ZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0CmluZGV4IDRiZmNlNDQuLmNiYTIzZDYgMTAwNjQ0Ci0tLSBhLy5jbGFuZy1mb3JtYXQKKysrIGIvLmNsYW5nLWZvcm1hdApAQCAtMjAsNiArMjAsOCBAQAogU3BhY2VBZnRlclRlbXBsYXRlS2V5d29yZDogdHJ1ZQogSW5jbHVkZUJsb2NrczogUmVncm91cAogSW5jbHVkZUNhdGVnb3JpZXM6CisgIC0gUmVnZXg6ICAgICAgICAgICAnXls8Il1jbVNUTFwuaHh4JworICAgIFByaW9yaXR5OiAgICAgICAgLTIKICAgLSBSZWdleDogICAgICAgICAgICdeWzwiXWNtQ29uZmlndXJlXC5oJwogICAgIFByaW9yaXR5OiAgICAgICAgLTEKICAgLSBSZWdleDogICAgICAgICAgICdePHF1ZXVlPicKQEAgLTMyLDE2ICszNCwxOCBAQAogICAgIFByaW9yaXR5OiAgICAgICAgNQogICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKVF0P1tBLVpdJwogICAgIFByaW9yaXR5OiAgICAgICAgNgotICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKWNtc3lzLycKKyAgLSBSZWdleDogICAgICAgICAgICdePGNtdHAvJwogICAgIFByaW9yaXR5OiAgICAgICAgNwotICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKWNtXycKKyAgLSBSZWdleDogICAgICAgICAgICdeKDx8IiljbXN5cy8nCiAgICAgUHJpb3JpdHk6ICAgICAgICA4Ci0gIC0gUmVnZXg6ICAgICAgICAgICAnXig8fCIpY21bQS1aXVteLl0rXC5oJworICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKWNtXycKICAgICBQcmlvcml0eTogICAgICAgIDkKKyAgLSBSZWdleDogICAgICAgICAgICdeKDx8IiljbVtBLVpdW14uXStcLmgnCisgICAgUHJpb3JpdHk6ICAgICAgICAxMAogICAtIFJlZ2V4OiAgICAgICAgICAgJ148W14uXStcLmgnCiAgICAgUHJpb3JpdHk6ICAgICAgICA0CiAgIC0gUmVnZXg6ICAgICAgICAgICAnXjwnCiAgICAgUHJpb3JpdHk6ICAgICAgICAxCiAgIC0gUmVnZXg6ICAgICAgICAgICAnLionCi0gICAgUHJpb3JpdHk6ICAgICAgICAxMAorICAgIFByaW9yaXR5OiAgICAgICAgMTEKIC4uLgpkaWZmIC0tZ2l0IGEvLmNsYW5nLXRpZHkgYi8uY2xhbmctdGlkeQppbmRleCBhNTIwNjc5Li4xMDgxOWVmIDEwMDY0NAotLS0gYS8uY2xhbmctdGlkeQorKysgYi8uY2xhbmctdGlkeQpAQCAtMTMsOSArMTMsMTEgQEAKIC1tb2Rlcm5pemUtYXZvaWQtYy1hcnJheXMsXAogLW1vZGVybml6ZS11c2Utbm9kaXNjYXJkLFwKIC1tb2Rlcm5pemUtdXNlLW5vZXhjZXB0LFwKKy1tb2Rlcm5pemUtdXNlLXRyYWlsaW5nLXJldHVybi10eXBlLFwKIC1tb2Rlcm5pemUtdXNlLXRyYW5zcGFyZW50LWZ1bmN0b3JzLFwKIHBlcmZvcm1hbmNlLSosXAogcmVhZGFiaWxpdHktKixcCistcmVhZGFiaWxpdHktY29udmVydC1tZW1iZXItZnVuY3Rpb25zLXRvLXN0YXRpYyxcCiAtcmVhZGFiaWxpdHktZnVuY3Rpb24tc2l6ZSxcCiAtcmVhZGFiaWxpdHktaWRlbnRpZmllci1uYW1pbmcsXAogLXJlYWRhYmlsaXR5LWltcGxpY2l0LWJvb2wtY29udmVyc2lvbixcCmRpZmYgLS1naXQgYS8uZ2l0aHViL3B1bGxfcmVxdWVzdF90ZW1wbGF0ZS5tZCBiLy5naXRodWIvcHVsbF9yZXF1ZXN0X3RlbXBsYXRlLm1kCmluZGV4IGQ5MzRiZjkuLjUyODFjOTIgMTAwNjQ0Ci0tLSBhLy5naXRodWIvcHVsbF9yZXF1ZXN0X3RlbXBsYXRlLm1kCisrKyBiLy5naXRodWIvcHVsbF9yZXF1ZXN0X3RlbXBsYXRlLm1kCkBAIC0yLDYgKzIsNiBAQAogaXMgYSBtaXJyb3IgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlLCBidXQgQ01ha2UgZG9lcyBub3QgdXNlIEdpdEh1YiBwdWxsCiByZXF1ZXN0cyBmb3IgY29udHJpYnV0aW9uLiAgUGxlYXNlIHNlZQogCi0gIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL3RyZWUvbWFzdGVyL0NPTlRSSUJVVElORy5yc3QKKyAgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS90cmVlL21hc3Rlci9DT05UUklCVVRJTkcucnN0CiAKIGZvciBjb250cmlidXRpb24gaW5zdHJ1Y3Rpb25zLiAgR2l0SHViIE9BdXRoIG1heSBiZSB1c2VkIHRvIHNpZ24gaW4uCmRpZmYgLS1naXQgYS8uZ2l0bGFiLWNpLnltbCBiLy5naXRsYWItY2kueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjM5M2IKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiLWNpLnltbApAQCAtMCwwICsxLDIwMSBAQAoraW5jbHVkZToKKyAgICAjIE1ldGFkYXRhIHNoYXJlZCBteSBtYW55IGpvYnMKKyAgICAtIGxvY2FsOiAuZ2l0bGFiL3J1bGVzLnltbAorICAgIC0gbG9jYWw6IC5naXRsYWIvYXJ0aWZhY3RzLnltbAorCisgICAgIyBPUyBidWlsZHMuCisgICAgLSBsb2NhbDogLmdpdGxhYi9vcy1saW51eC55bWwKKyAgICAtIGxvY2FsOiAuZ2l0bGFiL29zLW1hY29zLnltbAorICAgIC0gbG9jYWw6IC5naXRsYWIvb3Mtd2luZG93cy55bWwKKworc3RhZ2VzOgorICAgIC0gYnVpbGQKKyAgICAtIHRlc3QKKyAgICAtIHRlc3QtZXh0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEpvYiBkZWNsYXJhdGlvbnMKKyMKKyMgRWFjaCBqb2IgbXVzdCBwdWxsIGluIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBrZXlzOgorIworIyAgIC0gYSAiYmFzZSBpbWFnZSIKKyMgICAtIGEgYnVpbGQgc2NyaXB0CisjICAgLSB0YWdzIGZvciB0aGUgam9icworIyAgIC0gcnVsZXMgZm9yIHdoZW4gdG8gcnVuIHRoZSBqb2IKKyMKKyMgQWRkaXRpb25hbGx5LCBqb2JzIG1heSBhbHNvIGNvbnRhaW46CisjCisjICAgLSBhcnRpZmFjdHMKKyMgICAtIGRlcGVuZGVuY3kvbmVlZHMgam9icyBmb3IgcmVxdWlyZWQgam9icworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBMaW50IGJ1aWxkcworCitidWlsZDpkZWJpYW4xMC1pd3l1OgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLmRlYmlhbjEwX2l3eXUKKyAgICAgICAgLSAuY21ha2VfYnVpbGRfbGludXgKKyAgICAgICAgLSAubGludXhfYnVpbGRlcl90YWdzCisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisKK2J1aWxkOmZlZG9yYTMxLXRpZHk6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAuZmVkb3JhMzFfdGlkeQorICAgICAgICAtIC5jbWFrZV9idWlsZF9saW51eAorICAgICAgICAtIC5saW51eF9idWlsZGVyX3RhZ3NfcXQKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKworYnVpbGQ6ZmVkb3JhMzEtc3BoaW54OgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLmZlZG9yYTMxX3NwaGlueAorICAgICAgICAtIC5jbWFrZV9idWlsZF9saW51eAorICAgICAgICAtIC5saW51eF9idWlsZGVyX3RhZ3NfcXQKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKworIyBMaW51eCBidWlsZHMKKworYnVpbGQ6Y2VudG9zNi1yZWxlYXNlOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLnJlbGVhc2VfbGludXgKKyAgICAgICAgLSAuY21ha2VfYnVpbGRfcmVsZWFzZV9saW51eAorICAgICAgICAtIC5jbWFrZV9yZWxlYXNlX2FydGlmYWN0cworICAgICAgICAtIC5saW51eF9idWlsZGVyX3RhZ3MKKyAgICAgICAgLSAucnVuX21hbnVhbGx5CisKK3Rlc3Q6ZmVkb3JhMzEtbWFrZWZpbGVzOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLmZlZG9yYTMxX21ha2VmaWxlcworICAgICAgICAtIC5jbWFrZV90ZXN0X2xpbnV4X3BhY2thZ2UKKyAgICAgICAgLSAubGludXhfYnVpbGRlcl90YWdzX3F0CisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisgICAgZGVwZW5kZW5jaWVzOgorICAgICAgICAtIGJ1aWxkOmNlbnRvczYtcmVsZWFzZQorICAgIG5lZWRzOgorICAgICAgICAtIGJ1aWxkOmNlbnRvczYtcmVsZWFzZQorCit0ZXN0OmN1ZGExMC4yLW52aWRpYToKKyAgICBleHRlbmRzOgorICAgICAgICAtIC5jdWRhMTAuMl9udmlkaWEKKyAgICAgICAgLSAuY21ha2VfdGVzdF9saW51eF9wYWNrYWdlCisgICAgICAgIC0gLmxpbnV4X2J1aWxkZXJfdGFnc19jdWRhCisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisgICAgZGVwZW5kZW5jaWVzOgorICAgICAgICAtIGJ1aWxkOmNlbnRvczYtcmVsZWFzZQorICAgIG5lZWRzOgorICAgICAgICAtIGJ1aWxkOmNlbnRvczYtcmVsZWFzZQorCitidWlsZDpmZWRvcmEzMS1uaW5qYToKKyAgICBleHRlbmRzOgorICAgICAgICAtIC5mZWRvcmEzMV9uaW5qYQorICAgICAgICAtIC5jbWFrZV9idWlsZF9saW51eAorICAgICAgICAtIC5jbWFrZV9idWlsZF9hcnRpZmFjdHMKKyAgICAgICAgLSAubGludXhfYnVpbGRlcl90YWdzX3F0CisgICAgICAgIC0gLnJ1bl9tYW51YWxseQorCit0ZXN0OmZlZG9yYTMxLW5pbmphOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLmZlZG9yYTMxX25pbmphCisgICAgICAgIC0gLmNtYWtlX3Rlc3RfbGludXgKKyAgICAgICAgLSAubGludXhfYnVpbGRlcl90YWdzX3F0CisgICAgICAgIC0gLmNtYWtlX3Rlc3RfYXJ0aWZhY3RzCisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisgICAgZGVwZW5kZW5jaWVzOgorICAgICAgICAtIGJ1aWxkOmZlZG9yYTMxLW5pbmphCisgICAgbmVlZHM6CisgICAgICAgIC0gYnVpbGQ6ZmVkb3JhMzEtbmluamEKKwordGVzdDpmZWRvcmEzMS1uaW5qYS1tdWx0aToKKyAgICBleHRlbmRzOgorICAgICAgICAtIC5mZWRvcmEzMV9uaW5qYV9tdWx0aQorICAgICAgICAtIC5jbWFrZV90ZXN0X2xpbnV4X2V4dGVybmFsCisgICAgICAgIC0gLmxpbnV4X2J1aWxkZXJfdGFnc19xdAorICAgICAgICAtIC5ydW5fYXV0b21hdGljYWxseQorICAgIGRlcGVuZGVuY2llczoKKyAgICAgICAgLSB0ZXN0OmZlZG9yYTMxLW5pbmphCisgICAgbmVlZHM6CisgICAgICAgIC0gdGVzdDpmZWRvcmEzMS1uaW5qYQorCisjIG1hY09TIGJ1aWxkcworCitidWlsZDptYWNvcy1uaW5qYToKKyAgICBleHRlbmRzOgorICAgICAgICAtIC5tYWNvc19uaW5qYQorICAgICAgICAtIC5jbWFrZV9idWlsZF9tYWNvcworICAgICAgICAtIC5jbWFrZV9idWlsZF9hcnRpZmFjdHMKKyAgICAgICAgLSAubWFjb3NfYnVpbGRlcl90YWdzCisgICAgICAgIC0gLnJ1bl9tYW51YWxseQorCit0ZXN0Om1hY29zLW5pbmphOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLm1hY29zX25pbmphCisgICAgICAgIC0gLmNtYWtlX3Rlc3RfbWFjb3MKKyAgICAgICAgLSAuY21ha2VfdGVzdF9hcnRpZmFjdHMKKyAgICAgICAgLSAubWFjb3NfYnVpbGRlcl90YWdzCisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisgICAgZGVwZW5kZW5jaWVzOgorICAgICAgICAtIGJ1aWxkOm1hY29zLW5pbmphCisgICAgbmVlZHM6CisgICAgICAgIC0gYnVpbGQ6bWFjb3MtbmluamEKKworYnVpbGQ6bWFjb3MtbWFrZWZpbGVzOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLm1hY29zX21ha2VmaWxlcworICAgICAgICAtIC5jbWFrZV9idWlsZF9tYWNvcworICAgICAgICAtIC5jbWFrZV9idWlsZF9hcnRpZmFjdHMKKyAgICAgICAgLSAubWFjb3NfYnVpbGRlcl90YWdzCisgICAgICAgIC0gLnJ1bl9tYW51YWxseQorCit0ZXN0Om1hY29zLW1ha2VmaWxlczoKKyAgICBleHRlbmRzOgorICAgICAgICAtIC5tYWNvc19tYWtlZmlsZXMKKyAgICAgICAgLSAuY21ha2VfdGVzdF9tYWNvcworICAgICAgICAtIC5tYWNvc19idWlsZGVyX3RhZ3MKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKyAgICBkZXBlbmRlbmNpZXM6CisgICAgICAgIC0gYnVpbGQ6bWFjb3MtbWFrZWZpbGVzCisgICAgbmVlZHM6CisgICAgICAgIC0gYnVpbGQ6bWFjb3MtbWFrZWZpbGVzCisKK3Rlc3Q6bWFjb3MteGNvZGU6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAubWFjb3NfeGNvZGUKKyAgICAgICAgLSAuY21ha2VfdGVzdF9tYWNvc19leHRlcm5hbAorICAgICAgICAtIC5tYWNvc19idWlsZGVyX2V4dF90YWdzCisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisgICAgZGVwZW5kZW5jaWVzOgorICAgICAgICAtIHRlc3Q6bWFjb3MtbmluamEKKyAgICBuZWVkczoKKyAgICAgICAgLSB0ZXN0Om1hY29zLW5pbmphCisKKyMgV2luZG93cyBidWlsZHMKKworYnVpbGQ6d2luZG93cy12czIwMTkteDY0LW5pbmphOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLndpbmRvd3NfdnMyMDE5X3g2NF9uaW5qYQorICAgICAgICAtIC5jbWFrZV9idWlsZF93aW5kb3dzCisgICAgICAgIC0gLmNtYWtlX2J1aWxkX2FydGlmYWN0cworICAgICAgICAtIC53aW5kb3dzX2J1aWxkZXJfdGFncworICAgICAgICAtIC5ydW5fbWFudWFsbHkKKwordGVzdDp3aW5kb3dzLXZzMjAxOS14NjQtbmluamE6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAud2luZG93c192czIwMTlfeDY0X25pbmphCisgICAgICAgIC0gLmNtYWtlX3Rlc3Rfd2luZG93cworICAgICAgICAtIC53aW5kb3dzX2J1aWxkZXJfdGFncworICAgICAgICAtIC5jbWFrZV90ZXN0X2FydGlmYWN0cworICAgICAgICAtIC5ydW5fYXV0b21hdGljYWxseQorICAgIGRlcGVuZGVuY2llczoKKyAgICAgICAgLSBidWlsZDp3aW5kb3dzLXZzMjAxOS14NjQtbmluamEKKyAgICBuZWVkczoKKyAgICAgICAgLSBidWlsZDp3aW5kb3dzLXZzMjAxOS14NjQtbmluamEKKwordGVzdDp3aW5kb3dzLXZzMjAxOS14NjQ6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAud2luZG93c192czIwMTlfeDY0CisgICAgICAgIC0gLmNtYWtlX3Rlc3Rfd2luZG93c19leHRlcm5hbAorICAgICAgICAtIC53aW5kb3dzX2J1aWxkZXJfZXh0X3RhZ3MKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKyAgICBkZXBlbmRlbmNpZXM6CisgICAgICAgIC0gdGVzdDp3aW5kb3dzLXZzMjAxOS14NjQtbmluamEKKyAgICBuZWVkczoKKyAgICAgICAgLSB0ZXN0OndpbmRvd3MtdnMyMDE5LXg2NC1uaW5qYQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9hcnRpZmFjdHMueW1sIGIvLmdpdGxhYi9hcnRpZmFjdHMueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTBlMjQKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2FydGlmYWN0cy55bWwKQEAgLTAsMCArMSw4MSBAQAorIyBMaXN0cyBvZiBwYXRocyBmb3IgYXJ0aWZhY3RzIG9mIHZhcmlvdXMgc3RhZ2VzLgorCisuY21ha2VfYnVpbGRfYXJ0aWZhY3RzOgorICAgIGFydGlmYWN0czoKKyAgICAgICAgZXhwaXJlX2luOiAxZAorICAgICAgICBwYXRoczoKKyAgICAgICAgICAgICMgWFhYKGdsb2JiaW5nKTogQ2FuIGJlIHNpbXBsaWZpZWQgd2l0aCBzdXBwb3J0IGZyb20KKyAgICAgICAgICAgICMgaHR0cHM6Ly9naXRsYWIuY29tL2dpdGxhYi1vcmcvZ2l0bGFiLXJ1bm5lci9pc3N1ZXMvNDg0MAorICAgICAgICAgICAgLSBidWlsZC9DVGVzdFRlc3RmaWxlLmNtYWtlCisgICAgICAgICAgICAtIGJ1aWxkLyovQ1Rlc3RUZXN0ZmlsZS5jbWFrZQorICAgICAgICAgICAgLSBidWlsZC8qLyovQ1Rlc3RUZXN0ZmlsZS5jbWFrZQorICAgICAgICAgICAgLSBidWlsZC8qLyovKi9DVGVzdFRlc3RmaWxlLmNtYWtlCisgICAgICAgICAgICAtIGJ1aWxkLyovKi8qLyovQ1Rlc3RUZXN0ZmlsZS5jbWFrZQorCisgICAgICAgICAgICAjIEFsbG93IENNYWtlIHRvIGZpbmQgQ01BS0VfUk9PVC4KKyAgICAgICAgICAgIC0gYnVpbGQvQ01ha2VGaWxlcy9DTWFrZVNvdXJjZURpci50eHQKKworICAgICAgICAgICAgIyBUYWtlIHRoZSBpbnN0YWxsIHRyZWUuCisgICAgICAgICAgICAtIGJ1aWxkL2luc3RhbGwvCisKKyAgICAgICAgICAgICMgV2UgbmVlZCB0aGUgbWFpbiBiaW5hcmllcy4KKyAgICAgICAgICAgIC0gYnVpbGQvYmluLworICAgICAgICAgICAgIyBUaGUgY2FjaGUgaXMgbmVlZGVkIGZvciB0aGUgaW5zdGFsbGF0aW9uIHRlc3QuCisgICAgICAgICAgICAtIGJ1aWxkL0NNYWtlQ2FjaGUudHh0CisgICAgICAgICAgICAjIFRlc3QgYmluYXJpZXMuIEV2ZW50dWFsbHkgdGhlc2UgbWlnaHQgYmUgYmV0dGVyIHVuZGVyCisgICAgICAgICAgICAjIGBTb3VyY2UvVGVzdHNgIG9yIHRoZSBsaWtlLgorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9FbmZvcmNlQ29uZmlnLmNtYWtlCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlQnVpbGRUZXN0LmNtYWtlCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlQnVpbGREb3VibGVQcm9qZWN0VGVzdC5jbWFrZQorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovcnVuY29tcGlsZWNvbW1hbmRzCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9ydW5jb21waWxlY29tbWFuZHMuZXhlCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi90ZXN0KgorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svdmFsZ3JpbmQKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqL1BzZXVkb01lbWNoZWNrL3B1cmlmeQorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svbWVtY2hlY2tfZmFpbAorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svQkMKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqL1BzZXVkb01lbWNoZWNrL2N1ZGEtbWVtY2hlY2sKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqL1BzZXVkb01lbWNoZWNrL3ZhbGdyaW5kLmV4ZQorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svcHVyaWZ5LmV4ZQorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svbWVtY2hlY2tfZmFpbC5leGUKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqL1BzZXVkb01lbWNoZWNrL0JDLmV4ZQorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svY3VkYS1tZW1jaGVjay5leGUKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqL1BzZXVkb01lbWNoZWNrL05vTG9nCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKkxpYi8qTGliVGVzdHMKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqTGliLypMaWJUZXN0cy5leGUKKyAgICAgICAgICAgIC0gYnVpbGQvU291cmNlL2t3c3lzL2Ntc3lzVGVzdCoKKyAgICAgICAgICAgIC0gYnVpbGQvU291cmNlL2t3c3lzL3Rlc3RDb25zb2xlQnVmQ2hpbGQuZXhlCisgICAgICAgICAgICAtIGJ1aWxkL1V0aWxpdGllcy9jbWN1cmwvY3VybHRlc3QKKyAgICAgICAgICAgIC0gYnVpbGQvVXRpbGl0aWVzL2NtY3VybC9jdXJsdGVzdC5leGUKKyAgICAgICAgICAgIC0gYnVpbGQvVXRpbGl0aWVzL0tXSU1ML3Rlc3Qva3dpbWxfdGVzdAorICAgICAgICAgICAgLSBidWlsZC9VdGlsaXRpZXMvS1dJTUwvdGVzdC9rd2ltbF90ZXN0LmV4ZQorICAgICAgICAgICAgLSBidWlsZC9Tb3VyY2Uva3dzeXMvKmNtc3lzVGVzdER5bmxvYWQuKgorICAgICAgICAgICAgLSBidWlsZC9Tb3VyY2Uva3dzeXMvZHlubG9hZGRpci9jbXN5c1Rlc3REeW5sb2FkSW1wbC5kbGwKKyAgICAgICAgICAgIC0gYnVpbGQvU291cmNlL2t3c3lzL2R5bmxvYWRkaXIvY21zeXNUZXN0RHlubG9hZFVzZS5kbGwKKworICAgICAgICAgICAgIyBUZXN0IGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DVGVzdCoKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvRmluZCoKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvUXQ1KgorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9SdW5DTWFrZS8KKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2VPbmx5LworICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZVRlc3RzLworCisgICAgICAgICAgICAjIENUZXN0L0NEYXNoIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgLSBidWlsZC9UZXN0aW5nLworICAgICAgICAgICAgLSBidWlsZC9EYXJ0Q29uZmlndWF0aW9uLnRjbAorICAgICAgICAgICAgLSBidWlsZC9DVGVzdEN1c3RvbS5jbWFrZQorCisuY21ha2VfcmVsZWFzZV9hcnRpZmFjdHM6CisgICAgYXJ0aWZhY3RzOgorICAgICAgICBleHBpcmVfaW46IDVkCisgICAgICAgIHBhdGhzOgorICAgICAgICAgICAgIyBBbnkgcGFja2FnZXMgbWFkZS4KKyAgICAgICAgICAgIC0gYnVpbGQvY21ha2UtKi1MaW51eC14ODZfNjQuKgorCisuY21ha2VfdGVzdF9hcnRpZmFjdHM6CisgICAgYXJ0aWZhY3RzOgorICAgICAgICBleHBpcmVfaW46IDFkCisgICAgICAgIHBhdGhzOgorICAgICAgICAgICAgIyBUYWtlIHRoZSBpbnN0YWxsIHRyZWUuCisgICAgICAgICAgICAtIGJ1aWxkL2luc3RhbGwvCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NtYWtlLnBzMSBiLy5naXRsYWIvY2kvY21ha2UucHMxCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiNDJjYWUKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NtYWtlLnBzMQpAQCAtMCwwICsxLDE4IEBACiskZXJyb3JhY3Rpb25wcmVmZXJlbmNlID0gInN0b3AiCisKKyR2ZXJzaW9uID0gIjMuMTcuMiIKKyRzaGEyNTZzdW0gPSAiQ0Y4MkIxRUIyMEI2RkJFNTgzNDg3NjU2RkNENDk2NDkwRkZDQ0RGQkNCQkEwRjI2RTE5RjFDOUM2M0IwQjA0MSIKKyRmaWxlbmFtZSA9ICJjbWFrZS0kdmVyc2lvbi13aW42NC14NjQiCiskdGFyYmFsbCA9ICIkZmlsZW5hbWUuemlwIgorCiskb3V0ZGlyID0gJHB3ZC5QYXRoCiskb3V0ZGlyID0gIiRvdXRkaXJcLmdpdGxhYiIKK0ludm9rZS1XZWJSZXF1ZXN0IC1VcmkgImh0dHBzOi8vZ2l0aHViLmNvbS9LaXR3YXJlL0NNYWtlL3JlbGVhc2VzL2Rvd25sb2FkL3YkdmVyc2lvbi8kdGFyYmFsbCIgLU91dEZpbGUgIiRvdXRkaXJcJHRhcmJhbGwiCiskaGFzaCA9IEdldC1GaWxlSGFzaCAiJG91dGRpclwkdGFyYmFsbCIgLUFsZ29yaXRobSBTSEEyNTYKK2lmICgkaGFzaC5IYXNoIC1uZSAkc2hhMjU2c3VtKSB7CisgICAgZXhpdCAxCit9CisKK0FkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLklPLkNvbXByZXNzaW9uLkZpbGVTeXN0ZW0KK1tTeXN0ZW0uSU8uQ29tcHJlc3Npb24uWmlwRmlsZV06OkV4dHJhY3RUb0RpcmVjdG9yeSgiJG91dGRpclwkdGFyYmFsbCIsICIkb3V0ZGlyIikKK01vdmUtSXRlbSAtUGF0aCAiJG91dGRpclwkZmlsZW5hbWUiIC1EZXN0aW5hdGlvbiAiJG91dGRpclxjbWFrZSIKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY21ha2Uuc2ggYi8uZ2l0bGFiL2NpL2NtYWtlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1OGE2MmEKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NtYWtlLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworcmVhZG9ubHkgdmVyc2lvbj0iMy4xNy4yIgorCitjYXNlICIkKCB1bmFtZSAtcyApIiBpbgorICAgIExpbnV4KQorICAgICAgICBzaGF0b29sPSJzaGEyNTZzdW0iCisgICAgICAgIHNoYTI1NnN1bT0iZGM1N2YzY2M0NDhjYTY3ZmM4Nzc2YjRhZDRjMjJiMDg3YjljNmE4ZTQ1OTkzOGI5NjIyYjhjN2Y0ZWY2YjIxZSIKKyAgICAgICAgcGxhdGZvcm09IkxpbnV4IgorICAgICAgICA7OworICAgIERhcndpbikKKyAgICAgICAgc2hhdG9vbD0ic2hhc3VtIC1hIDI1NiIKKyAgICAgICAgc2hhMjU2c3VtPSIxMzk1MDBlMjBiMDgwNDQ0ZmNhZmU1N2YyNGY1NzI0OGM2OTFjNTE4N2NjZTY2OTViZWUyYjlhYWQ2NzkyYzdkIgorICAgICAgICBwbGF0Zm9ybT0iRGFyd2luIgorICAgICAgICA7OworICAgICopCisgICAgICAgIGVjaG8gIlVucmVjb2duaXplZCBwbGF0Zm9ybSAkKCB1bmFtZSAtcyApIgorICAgICAgICBleGl0IDEKKyAgICAgICAgOzsKK2VzYWMKK3JlYWRvbmx5IHNoYXRvb2wKK3JlYWRvbmx5IHNoYTI1NnN1bQorcmVhZG9ubHkgcGxhdGZvcm0KKworcmVhZG9ubHkgZmlsZW5hbWU9ImNtYWtlLSR2ZXJzaW9uLSRwbGF0Zm9ybS14ODZfNjQiCityZWFkb25seSB0YXJiYWxsPSIkZmlsZW5hbWUudGFyLmd6IgorCitjZCAuZ2l0bGFiCisKK2VjaG8gIiRzaGEyNTZzdW0gICR0YXJiYWxsIiA+IGNtYWtlLnNoYTI1NnN1bQorY3VybCAtT0wgImh0dHBzOi8vZ2l0aHViLmNvbS9LaXR3YXJlL0NNYWtlL3JlbGVhc2VzL2Rvd25sb2FkL3YkdmVyc2lvbi8kdGFyYmFsbCIKKyRzaGF0b29sIC0tY2hlY2sgY21ha2Uuc2hhMjU2c3VtCit0YXIgeGYgIiR0YXJiYWxsIgorbXYgIiRmaWxlbmFtZSIgY21ha2UKKworaWYgWyAiJCggdW5hbWUgLXMgKSIgPSAiRGFyd2luIiBdOyB0aGVuCisgICAgbG4gLXMgQ01ha2UuYXBwL0NvbnRlbnRzL2JpbiBjbWFrZS9iaW4KK2ZpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9jb21tb24uY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9jb21tb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0OWIyZAotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2NvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitzZXQoQ1RFU1RfVVNFX0xBVU5DSEVSUyAiT04iIENBQ0hFIEJPT0wgIiIpCisKKyMgV2UgcnVuIHRoZSBpbnN0YWxsIHJpZ2h0IGFmdGVyIHRoZSBidWlsZC4gQXZvaWQgcmVydW5uaW5nIGl0IHdoZW4gaW5zdGFsbGluZy4KK3NldChDTUFLRV9TS0lQX0lOU1RBTExfQUxMX0RFUEVOREVOQ1kgIk9OIiBDQUNIRSBCT09MICIiKQorIyBJbnN0YWxsIENNYWtlIHVuZGVyIHRoZSBidWlsZCB0cmVlLgorc2V0KENNQUtFX0lOU1RBTExfUFJFRklYICIke0NNQUtFX0JJTkFSWV9ESVJ9L2luc3RhbGwiIENBQ0hFIFBBVEggIiIpCitzZXQoQ01ha2VfVEVTVF9JTlNUQUxMICJPRkYiIENBQ0hFIEJPT0wgIiIpCisKK2lmIChOT1QgIiRFTlZ7Q01BS0VfQlVJTERfVFlQRX0iIFNUUkVRVUFMICIiKQorICBzZXQoQ01BS0VfQlVJTERfVFlQRSAiJEVOVntDTUFLRV9CVUlMRF9UWVBFfSIgQ0FDSEUgU1RSSU5HICIiKQorZW5kaWYgKCkKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfc2NjYWNoZS5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9jdWRhMTAuMl9udmlkaWEuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9jdWRhMTAuMl9udmlkaWEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5Njk5YgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2N1ZGExMC4yX252aWRpYS5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDTWFrZV9URVNUX0NVREEgIk5WSURJQSIgQ0FDSEUgU1RSSU5HICIiKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9leHRlcm5hbF90ZXN0LmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2RlYmlhbjEwX2l3eXUuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9kZWJpYW4xMF9pd3l1LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYWE1ODEKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9kZWJpYW4xMF9pd3l1LmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KENNYWtlX1JVTl9JV1lVIE9OIENBQ0hFIEJPT0wgIiIpCitzZXQoSVdZVV9DT01NQU5EICIvdXNyL2Jpbi9pbmNsdWRlLXdoYXQteW91LXVzZS02LjAiIENBQ0hFIEZJTEVQQVRIICIiKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9jb21tb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfZXh0ZXJuYWxfdGVzdC5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2V4dGVybmFsX3Rlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzOTdkMQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2V4dGVybmFsX3Rlc3QuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ01ha2VfVEVTVF9IT1NUX0NNQUtFICJPTiIgQ0FDSEUgQk9PTCAiIikKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX2NvbW1vbi5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX2NvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA2OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfY29tbW9uLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KEJVSUxEX0N1cnNlc0RpYWxvZyBPTiBDQUNIRSBCT09MICIiKQorc2V0KEJVSUxEX1F0RGlhbG9nIE9OIENBQ0hFIEJPT0wgIiIpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2NvbW1vbi5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV9tYWtlZmlsZXMuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV9tYWtlZmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NjNhMgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX21ha2VmaWxlcy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9leHRlcm5hbF90ZXN0LmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX25pbmphLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfbmluamEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3NjhiNwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX25pbmphLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2ZlZG9yYTMxX2NvbW1vbi5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV9uaW5qYV9tdWx0aS5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX25pbmphX211bHRpLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODYzYTIKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV9uaW5qYV9tdWx0aS5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9leHRlcm5hbF90ZXN0LmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX3NwaGlueC5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX3NwaGlueC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmM5YjhjCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfc3BoaW54LmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorc2V0KFNQSElOWF9JTkZPIE9OIENBQ0hFIEJPT0wgIiIpCitzZXQoU1BISU5YX01BTiBPTiBDQUNIRSBCT09MICIiKQorc2V0KFNQSElOWF9IVE1MIE9OIENBQ0hFIEJPT0wgIiIpCitzZXQoU1BISU5YX1NJTkdMRUhUTUwgT04gQ0FDSEUgQk9PTCAiIikKK3NldChTUEhJTlhfUVRIRUxQIE9OIENBQ0hFIEJPT0wgIiIpCitzZXQoU1BISU5YX1RFWFQgT04gQ0FDSEUgQk9PTCAiIikKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX3RpZHkuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV90aWR5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDAyMmMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV90aWR5LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENNYWtlX1JVTl9DTEFOR19USURZIE9OIENBQ0hFIEJPT0wgIiIpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2ZlZG9yYTMxX2NvbW1vbi5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc19jb21tb24uY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc19jb21tb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1OTAyYgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX2NvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDkgQEAKKyMgT3VyIENJIG1hY2hpbmVzIGRvIG5vdCBjb25zaXN0ZW50bHkgaGF2ZSBKYXZhIGluc3RhbGxlZCwgc28gYSBidWlsZCBtYXkKKyMgZGV0ZWN0IHRoYXQgSmF2YSBpcyBhdmFpbGFibGUgYW5kIHdvcmtpbmcsIGJ1dCBhIHRlc3QgbWFjaGluZSB0aGVuIG5vdCBoYXZlIGEKKyMgd29ya2luZyBKYXZhIGluc3RhbGxlZC4gVG8gd29yayBhcm91bmQgdGhpcywganVzdCBhY3QgYXMgaWYgSmF2YSBpcyBub3QKKyMgYXZhaWxhYmxlIG9uIGFueSBDSSBtYWNoaW5lLgorc2V0KEphdmFfSkFWQV9FWEVDVVRBQkxFICIiIENBQ0hFIEZJTEVQQVRIICIiKQorc2V0KEphdmFfSkFWQUNfRVhFQ1VUQUJMRSAiIiBDQUNIRSBGSUxFUEFUSCAiIikKK3NldChKYXZhX0pBUl9FWEVDVVRBQkxFICIiIENBQ0hFIEZJTEVQQVRIICIiKQorCitzZXQoQlVJTERfUXREaWFsb2cgT04gQ0FDSEUgQk9PTCAiIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX21ha2VmaWxlcy5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX21ha2VmaWxlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWY2N2I1Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfbWFjb3NfbWFrZWZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfbWFjb3NfY29tbW9uLmNtYWtlIikKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2NvbW1vbi5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc19uaW5qYS5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX25pbmphLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZjY3YjUKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc19uaW5qYS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX21hY29zX2NvbW1vbi5jbWFrZSIpCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9jb21tb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfbWFjb3NfeGNvZGUuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc194Y29kZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjk3NmQyCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfbWFjb3NfeGNvZGUuY21ha2UKQEAgLTAsMCArMSwyIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9tYWNvc19jb21tb24uY21ha2UiKQoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfZXh0ZXJuYWxfdGVzdC5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9zY2NhY2hlLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfc2NjYWNoZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjFiYjI4Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfc2NjYWNoZS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldChDTUFLRV9DX0NPTVBJTEVSX0xBVU5DSEVSICJzY2NhY2hlIiBDQUNIRSBTVFJJTkcgIiIpCitzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX0xBVU5DSEVSICJzY2NhY2hlIiBDQUNIRSBTVFJJTkcgIiIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV93aW5kb3dzX2NvbW1vbi5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjUwYWMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV93aW5kb3dzX2NvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldChCVUlMRF9RdERpYWxvZyBPTiBDQUNIRSBCT09MICIiKQorc2V0KENNQUtFX1BSRUZJWF9QQVRIICIkRU5We0NJX1BST0pFQ1RfRElSfS8uZ2l0bGFiL3F0IiBDQUNIRSBTVFJJTkcgIiIpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2NvbW1vbi5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV93aW5kb3dzX3ZzMjAxOV94NjQuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV93aW5kb3dzX3ZzMjAxOV94NjQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlY2U1NwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfdnMyMDE5X3g2NC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDTWFrZV9URVNUX1dJWF9OT19WRVJJRlkgIk9OIiBDQUNIRSBCT09MICIiKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9leHRlcm5hbF90ZXN0LmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfdnMyMDE5X3g2NF9uaW5qYS5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfdnMyMDE5X3g2NF9uaW5qYS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTljOTNjCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfd2luZG93c192czIwMTlfeDY0X25pbmphLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENNYWtlX1RFU1RfV0lYX05PX1ZFUklGWSAiT04iIENBQ0hFIEJPT0wgIiIpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX3dpbmRvd3NfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY3Rlc3RfYnVpbGQuY21ha2UgYi8uZ2l0bGFiL2NpL2N0ZXN0X2J1aWxkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDJhNWQKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2N0ZXN0X2J1aWxkLmNtYWtlCkBAIC0wLDAgKzEsNDEgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjgpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2l0bGFiX2NpLmNtYWtlIikKKworIyBSZWFkIHRoZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCitjdGVzdF9yZWFkX2N1c3RvbV9maWxlcygiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIpCisKKyMgUGljayB1cCBmcm9tIHdoZXJlIHRoZSBjb25maWd1cmUgbGVmdCBvZmYuCitjdGVzdF9zdGFydChBUFBFTkQpCisKK2lmIChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgU1RSRVFVQUwgIlVuaXggTWFrZWZpbGVzIikKKyAgaW5jbHVkZShQcm9jZXNzb3JDb3VudCkKKyAgUHJvY2Vzc29yQ291bnQobnByb2MpCisgIHNldChDVEVTVF9CVUlMRF9GTEFHUyAiLWoke25wcm9jfSIpCitlbmRpZiAoKQorCitjdGVzdF9idWlsZCgKKyAgTlVNQkVSX1dBUk5JTkdTIG51bV93YXJuaW5ncworICBSRVRVUk5fVkFMVUUgYnVpbGRfcmVzdWx0KQorY3Rlc3Rfc3VibWl0KFBBUlRTIEJ1aWxkKQorCitpZiAoYnVpbGRfcmVzdWx0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZhaWxlZCB0byBidWlsZCIpCitlbmRpZiAoKQorCitpZiAoIiRFTlZ7Q1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRH0iIEFORCBudW1fd2FybmluZ3MgR1JFQVRFUiAwKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZvdW5kICR7bnVtX3dhcm5pbmdzfSB3YXJuaW5ncyAodHJlYXRpbmcgYXMgZmF0YWwpLiIpCitlbmRpZiAoKQorCitpZiAoTk9UICIkRU5We0NNYWtlX1NLSVBfSU5TVEFMTH0iKQorICBjdGVzdF9idWlsZChBUFBFTkQKKyAgICBUQVJHRVQgaW5zdGFsbAorICAgIFJFVFVSTl9WQUxVRSBpbnN0YWxsX3Jlc3VsdCkKKworICBpZiAoaW5zdGFsbF9yZXN1bHQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIkZhaWxlZCB0byBpbnN0YWxsIikKKyAgZW5kaWYgKCkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2N0ZXN0X2NvbmZpZ3VyZS5jbWFrZSBiLy5naXRsYWIvY2kvY3Rlc3RfY29uZmlndXJlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2FkMTMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2N0ZXN0X2NvbmZpZ3VyZS5jbWFrZQpAQCAtMCwwICsxLDMyIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy44KQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dpdGxhYl9jaS5jbWFrZSIpCisKK3NldChjbWFrZV9hcmdzCisgIC1DICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV8kRU5We0NNQUtFX0NPTkZJR1VSQVRJT059LmNtYWtlIikKKworIyBDcmVhdGUgYW4gZW50cnkgaW4gQ0Rhc2guCitjdGVzdF9zdGFydChFeHBlcmltZW50YWwgVFJBQ0sgIiR7Y3Rlc3RfdHJhY2t9IikKKworIyBHYXRoZXIgdXBkYXRlIGluZm9ybWF0aW9uLgorZmluZF9wYWNrYWdlKEdpdCkKK3NldChDVEVTVF9VUERBVEVfVkVSU0lPTl9PTkxZIE9OKQorc2V0KENURVNUX1VQREFURV9DT01NQU5EICIke0dJVF9FWEVDVVRBQkxFfSIpCitjdGVzdF91cGRhdGUoKQorCisjIENvbmZpZ3VyZSB0aGUgcHJvamVjdC4KK2N0ZXN0X2NvbmZpZ3VyZSgKKyAgT1BUSU9OUyAiJHtjbWFrZV9hcmdzfSIKKyAgUkVUVVJOX1ZBTFVFIGNvbmZpZ3VyZV9yZXN1bHQpCisKKyMgUmVhZCB0aGUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorY3Rlc3RfcmVhZF9jdXN0b21fZmlsZXMoIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iKQorCisjIFdlIGNhbiBub3cgc3VibWl0IGJlY2F1c2Ugd2UndmUgY29uZmlndXJlZC4gVGhpcyBpcyBhIGNtYi1zdXBlcmJ1aWxkLWlzbS4KK2N0ZXN0X3N1Ym1pdChQQVJUUyBVcGRhdGUpCitjdGVzdF9zdWJtaXQoUEFSVFMgQ29uZmlndXJlKQorCitpZiAoY29uZmlndXJlX3Jlc3VsdCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJGYWlsZWQgdG8gY29uZmlndXJlIikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2N0ZXN0X2V4Y2x1c2lvbnMuY21ha2UgYi8uZ2l0bGFiL2NpL2N0ZXN0X2V4Y2x1c2lvbnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NWE2YQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY3Rlc3RfZXhjbHVzaW9ucy5jbWFrZQpAQCAtMCwwICsxLDE5IEBACitzZXQodGVzdF9leGNsdXNpb25zCisgICMgVGhpcyB0ZXN0IGhpdHMgZ2xvYmFsIHJlc291cmNlcyBhbmQgY2FuIGJlIGhhbmRsZWQgYnkgbmlnaHRseSB0ZXN0aW5nLgorICAjIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vbWVyZ2VfcmVxdWVzdHMvNDc2OQorICAiXkJ1bmRsZUdlbmVyYXRvclRlc3QkIgorKQorCitpZiAoQ1RFU1RfQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICBsaXN0KEFQUEVORCB0ZXN0X2V4Y2x1c2lvbnMKKyAgICAjIFRoaXMgdGVzdCB0YWtlcyBhcm91bmQgNSBtaW51dGVzIHdpdGggVmlzdWFsIFN0dWRpby4KKyAgICAjIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzIwNzMzCisgICAgIl5FeHRlcm5hbFByb2plY3RVcGRhdGUkIgorICAgICMgVGhpcyB0ZXN0IGlzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYWJvdmUgYW5kIGlzIG9ubHkgcmVxdWlyZWQgZm9yIGl0LgorICAgICJeRXh0ZXJuYWxQcm9qZWN0VXBkYXRlU2V0dXAkIikKK2VuZGlmICgpCisKK3N0cmluZyhSRVBMQUNFICI7IiAifCIgdGVzdF9leGNsdXNpb25zICIke3Rlc3RfZXhjbHVzaW9uc30iKQoraWYgKHRlc3RfZXhjbHVzaW9ucykKKyAgc2V0KHRlc3RfZXhjbHVzaW9ucyAiKCR7dGVzdF9leGNsdXNpb25zfSkiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY3Rlc3RfdGVzdC5jbWFrZSBiLy5naXRsYWIvY2kvY3Rlc3RfdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjkxMzlkCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jdGVzdF90ZXN0LmNtYWtlCkBAIC0wLDAgKzEsMjQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjgpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2l0bGFiX2NpLmNtYWtlIikKKworIyBSZWFkIHRoZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCitjdGVzdF9yZWFkX2N1c3RvbV9maWxlcygiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIpCisKKyMgUGljayB1cCBmcm9tIHdoZXJlIHRoZSBjb25maWd1cmUgbGVmdCBvZmYuCitjdGVzdF9zdGFydChBUFBFTkQpCisKK2luY2x1ZGUoUHJvY2Vzc29yQ291bnQpCitQcm9jZXNzb3JDb3VudChucHJvYykKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jdGVzdF9leGNsdXNpb25zLmNtYWtlIikKK2N0ZXN0X3Rlc3QoCisgIFBBUkFMTEVMX0xFVkVMICIke25wcm9jfSIKKyAgUkVUVVJOX1ZBTFVFIHRlc3RfcmVzdWx0CisgIEVYQ0xVREUgIiR7dGVzdF9leGNsdXNpb25zfSIpCitjdGVzdF9zdWJtaXQoUEFSVFMgVGVzdCkKKworaWYgKHRlc3RfcmVzdWx0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZhaWxlZCB0byB0ZXN0IikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2N0ZXN0X3Rlc3RfZXh0ZXJuYWwuY21ha2UgYi8uZ2l0bGFiL2NpL2N0ZXN0X3Rlc3RfZXh0ZXJuYWwuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyYjkzNgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY3Rlc3RfdGVzdF9leHRlcm5hbC5jbWFrZQpAQCAtMCwwICsxLDczIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy44KQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dpdGxhYl9jaS5jbWFrZSIpCisKK3NldChjbWFrZV9hcmdzCisgIC1DICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV8kRU5We0NNQUtFX0NPTkZJR1VSQVRJT059LmNtYWtlIikKKworIyBDcmVhdGUgYW4gZW50cnkgaW4gQ0Rhc2guCitjdGVzdF9zdGFydChFeHBlcmltZW50YWwgVFJBQ0sgIiR7Y3Rlc3RfdHJhY2t9IikKKworIyBHYXRoZXIgdXBkYXRlIGluZm9ybWF0aW9uLgorZmluZF9wYWNrYWdlKEdpdCkKK3NldChDVEVTVF9VUERBVEVfVkVSU0lPTl9PTkxZIE9OKQorc2V0KENURVNUX1VQREFURV9DT01NQU5EICIke0dJVF9FWEVDVVRBQkxFfSIpCitjdGVzdF91cGRhdGUoKQorCisjIENvbmZpZ3VyZSB0aGUgcHJvamVjdC4KK2N0ZXN0X2NvbmZpZ3VyZSgKKyAgT1BUSU9OUyAiJHtjbWFrZV9hcmdzfSIKKyAgUkVUVVJOX1ZBTFVFIGNvbmZpZ3VyZV9yZXN1bHQpCisKKyMgUmVhZCB0aGUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorY3Rlc3RfcmVhZF9jdXN0b21fZmlsZXMoIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iKQorCisjIFdlIGNhbiBub3cgc3VibWl0IGJlY2F1c2Ugd2UndmUgY29uZmlndXJlZC4gVGhpcyBpcyBhIGNtYi1zdXBlcmJ1aWxkLWlzbS4KK2N0ZXN0X3N1Ym1pdChQQVJUUyBVcGRhdGUpCitjdGVzdF9zdWJtaXQoUEFSVFMgQ29uZmlndXJlKQorCitpZiAoY29uZmlndXJlX3Jlc3VsdCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJGYWlsZWQgdG8gY29uZmlndXJlIikKK2VuZGlmICgpCisKK2luY2x1ZGUoUHJvY2Vzc29yQ291bnQpCitQcm9jZXNzb3JDb3VudChucHJvYykKKworaWYgKENURVNUX0NNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiVW5peCBNYWtlZmlsZXMiKQorICBzZXQoQ1RFU1RfQlVJTERfRkxBR1MgIi1qJHtucHJvY30iKQorZW5kaWYgKCkKKworY3Rlc3RfYnVpbGQoCisgIE5VTUJFUl9XQVJOSU5HUyBudW1fd2FybmluZ3MKKyAgUkVUVVJOX1ZBTFVFIGJ1aWxkX3Jlc3VsdCkKK2N0ZXN0X3N1Ym1pdChQQVJUUyBCdWlsZCkKKworaWYgKGJ1aWxkX3Jlc3VsdCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJGYWlsZWQgdG8gYnVpbGQiKQorZW5kaWYgKCkKKworaWYgKCIkRU5We0NURVNUX05PX1dBUk5JTkdTX0FMTE9XRUR9IiBBTkQgbnVtX3dhcm5pbmdzIEdSRUFURVIgMCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJGb3VuZCAke251bV93YXJuaW5nc30gd2FybmluZ3MgKHRyZWF0aW5nIGFzIGZhdGFsKS4iKQorZW5kaWYgKCkKKworc2V0KGN0ZXN0X2xhYmVsX2FyZ3MpCitpZiAoTk9UICIkRU5We0NURVNUX0xBQkVMU30iIFNUUkVRVUFMICIiKQorICBsaXN0KEFQUEVORCBjdGVzdF9sYWJlbF9hcmdzCisgICAgSU5DTFVERV9MQUJFTCAiJEVOVntDVEVTVF9MQUJFTFN9IikKK2VuZGlmICgpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY3Rlc3RfZXhjbHVzaW9ucy5jbWFrZSIpCitjdGVzdF90ZXN0KAorICBQQVJBTExFTF9MRVZFTCAiJHtucHJvY30iCisgIFJFVFVSTl9WQUxVRSB0ZXN0X3Jlc3VsdAorICAke2N0ZXN0X2xhYmVsX2FyZ3N9CisgIEVYQ0xVREUgIiR7dGVzdF9leGNsdXNpb25zfSIpCitjdGVzdF9zdWJtaXQoUEFSVFMgVGVzdCkKKworaWYgKHRlc3RfcmVzdWx0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZhaWxlZCB0byB0ZXN0IikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2RvY2tlci9jdWRhMTAuMi9Eb2NrZXJmaWxlIGIvLmdpdGxhYi9jaS9kb2NrZXIvY3VkYTEwLjIvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVhMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9kb2NrZXIvY3VkYTEwLjIvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDUgQEAKK0ZST00gbnZpZGlhL2N1ZGE6MTAuMi1kZXZlbC11YnVudHUxOC4wNAorTUFJTlRBSU5FUiBCZW4gQm9lY2tlbCA8YmVuLmJvZWNrZWxAa2l0d2FyZS5jb20+CisKK0NPUFkgaW5zdGFsbF9kZXBzLnNoIC9yb290L2luc3RhbGxfZGVwcy5zaAorUlVOIHNoIC9yb290L2luc3RhbGxfZGVwcy5zaApkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9kb2NrZXIvY3VkYTEwLjIvaW5zdGFsbF9kZXBzLnNoIGIvLmdpdGxhYi9jaS9kb2NrZXIvY3VkYTEwLjIvaW5zdGFsbF9kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkNTdjZDMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2RvY2tlci9jdWRhMTAuMi9pbnN0YWxsX2RlcHMuc2gKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCithcHQtZ2V0IHVwZGF0ZQorCisjIEluc3RhbGwgZGV2ZWxvcG1lbnQgdG9vbHMuCithcHQtZ2V0IGluc3RhbGwgLXkgXAorICAgIGcrKyBcCisgICAgY3VybCBcCisgICAgZ2l0CisKK2FwdC1nZXQgY2xlYW4KZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL0RvY2tlcmZpbGUgYi8uZ2l0bGFiL2NpL2RvY2tlci9kZWJpYW4xMC9Eb2NrZXJmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzM4NTEKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2RvY2tlci9kZWJpYW4xMC9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsMTUgQEAKK0ZST00gZGViaWFuOjEwIGFzIGl3eXUtYnVpbGQKK01BSU5UQUlORVIgQmVuIEJvZWNrZWwgPGJlbi5ib2Vja2VsQGtpdHdhcmUuY29tPgorCitDT1BZIGluc3RhbGxfaXd5dS5zaCAvcm9vdC9pbnN0YWxsX2l3eXUuc2gKK1JVTiBzaCAvcm9vdC9pbnN0YWxsX2l3eXUuc2gKKworRlJPTSBkZWJpYW46MTAKK01BSU5UQUlORVIgQmVuIEJvZWNrZWwgPGJlbi5ib2Vja2VsQGtpdHdhcmUuY29tPgorCitDT1BZIGluc3RhbGxfZGVwcy5zaCAvcm9vdC9pbnN0YWxsX2RlcHMuc2gKK1JVTiBzaCAvcm9vdC9pbnN0YWxsX2RlcHMuc2gKKworQ09QWSAtLWZyb209aXd5dS1idWlsZCAvcm9vdC9pd3l1LnRhci5neiAvcm9vdC9pd3l1LnRhci5negorUlVOIHRhciAtQyAvIC14ZiAvcm9vdC9pd3l1LnRhci5negorUlVOIGxuIC1zIC91c3IvbGliL2xsdm0tNi4wL2Jpbi9pbmNsdWRlLXdoYXQteW91LXVzZSAvdXNyL2Jpbi9pbmNsdWRlLXdoYXQteW91LXVzZS02LjAKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL2luc3RhbGxfZGVwcy5zaCBiLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL2luc3RhbGxfZGVwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzMyZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9kb2NrZXIvZGViaWFuMTAvaW5zdGFsbF9kZXBzLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworYXB0LWdldCB1cGRhdGUKKworIyBJbnN0YWxsIGJ1aWxkIHJlcXVpcmVtZW50cy4KK2FwdC1nZXQgaW5zdGFsbCAteSBcCisgICAgbGlic3NsLWRldgorCisjIEluc3RhbGwgZGV2ZWxvcG1lbnQgdG9vbHMuCithcHQtZ2V0IGluc3RhbGwgLXkgXAorICAgIGcrKyBcCisgICAgY3VybCBcCisgICAgZ2l0CisKKyMgSW5zdGFsbCBpd3l1IHJ1bnRpbWUgZGVwcy4KK2FwdC1nZXQgaW5zdGFsbCAteSBcCisgICAgY2xhbmctNi4wIFwKKyAgICBsaWJuY3Vyc2VzNgorCithcHQtZ2V0IGNsZWFuCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2RvY2tlci9kZWJpYW4xMC9pbnN0YWxsX2l3eXUuc2ggYi8uZ2l0bGFiL2NpL2RvY2tlci9kZWJpYW4xMC9pbnN0YWxsX2l3eXUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTRkMjZlZgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL2luc3RhbGxfaXd5dS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKworc2V0IC1lCisKKyMgSW5zdGFsbCBkZXZlbG9wbWVudCB0b29scy4KK2FwdC1nZXQgdXBkYXRlCithcHQtZ2V0IGluc3RhbGwgLXkgXAorICAgIGNsYW5nLTYuMCBcCisgICAgbGliY2xhbmctNi4wLWRldiBcCisgICAgbGx2bS02LjAtZGV2IFwKKyAgICBsaWJ6LWRldiBcCisgICAgZysrIFwKKyAgICBjbWFrZSBcCisgICAgbmluamEtYnVpbGQgXAorICAgIGdpdAorCitjZCAvcm9vdAorZ2l0IGNsb25lICJodHRwczovL2dpdGh1Yi5jb20vaW5jbHVkZS13aGF0LXlvdS11c2UvaW5jbHVkZS13aGF0LXlvdS11c2UuZ2l0IgorY2QgaW5jbHVkZS13aGF0LXlvdS11c2UKK3JlYWRvbmx5IGxsdm1fdmVyc2lvbj0iJCggY2xhbmctNi4wIC0tdmVyc2lvbiB8IGhlYWQgLW4xIHwgY3V0IC1kJyAnIC1mMyB8IGN1dCAtZC4gLWYtMiApIgorZ2l0IGNoZWNrb3V0ICJjbGFuZ18kbGx2bV92ZXJzaW9uIgorbWtkaXIgYnVpbGQKK2NkIGJ1aWxkCisKK2NtYWtlIC1HTmluamEgXAorICAgIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlIFwKKyAgICAiLURDTUFLRV9JTlNUQUxMX1BSRUZJWD0vdXNyL2xpYi9sbHZtLSRsbHZtX3ZlcnNpb24iIFwKKyAgICAiLURJV1lVX0xMVk1fUk9PVF9QQVRIPS91c3IvbGliL2xsdm0tJGxsdm1fdmVyc2lvbiIgXAorICAgIC4uCituaW5qYQorREVTVERJUj0vcm9vdC9pd3l1LWRlc3RkaXIgbmluamEgaW5zdGFsbAordGFyIC1DIC9yb290L2l3eXUtZGVzdGRpciAtY2YgL3Jvb3QvaXd5dS50YXIuZ3ogLgpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9kb2NrZXIvZmVkb3JhMzEvRG9ja2VyZmlsZSBiLy5naXRsYWIvY2kvZG9ja2VyL2ZlZG9yYTMxL0RvY2tlcmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4OGE4NQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZG9ja2VyL2ZlZG9yYTMxL0RvY2tlcmZpbGUKQEAgLTAsMCArMSw1IEBACitGUk9NIGZlZG9yYTozMQorTUFJTlRBSU5FUiBCZW4gQm9lY2tlbCA8YmVuLmJvZWNrZWxAa2l0d2FyZS5jb20+CisKK0NPUFkgaW5zdGFsbF9kZXBzLnNoIC9yb290L2luc3RhbGxfZGVwcy5zaAorUlVOIHNoIC9yb290L2luc3RhbGxfZGVwcy5zaApkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9kb2NrZXIvZmVkb3JhMzEvaW5zdGFsbF9kZXBzLnNoIGIvLmdpdGxhYi9jaS9kb2NrZXIvZmVkb3JhMzEvaW5zdGFsbF9kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkODU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2RvY2tlci9mZWRvcmEzMS9pbnN0YWxsX2RlcHMuc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKyMgSW5zdGFsbCBidWlsZCByZXF1aXJlbWVudHMuCitkbmYgaW5zdGFsbCAtLXNldG9wdD1pbnN0YWxsX3dlYWtfZGVwcz1GYWxzZSAteSBcCisgICAgbmN1cnNlcy1kZXZlbCBcCisgICAgb3BlbnNzbC1kZXZlbCBcCisgICAgcXQ1LXF0YmFzZS1kZXZlbAorCisjIEluc3RhbGwgZGV2ZWxvcG1lbnQgdG9vbHMuCitkbmYgaW5zdGFsbCAtLXNldG9wdD1pbnN0YWxsX3dlYWtfZGVwcz1GYWxzZSAteSBcCisgICAgY2xhbmctdG9vbHMtZXh0cmEgXAorICAgIGdjYy1jKysgXAorICAgIGdpdC1jb3JlIFwKKyAgICBtYWtlCisKKyMgSW5zdGFsbCBkb2N1bWVudGF0aW9uIHRvb2xzLgorZG5mIGluc3RhbGwgLS1zZXRvcHQ9aW5zdGFsbF93ZWFrX2RlcHM9RmFsc2UgLXkgXAorICAgIHB5dGhvbjMtc3BoaW54IFwKKyAgICB0ZXhpbmZvIFwKKyAgICBxdDUtcXR0b29scy1kZXZlbAorCisjIFRvb2xzIG5lZWRlZCBmb3IgdGhlIHRlc3Qgc3VpdGUuCitkbmYgaW5zdGFsbCAtLXNldG9wdD1pbnN0YWxsX3dlYWtfZGVwcz1GYWxzZSAteSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBmaWxlCisKK2RuZiBjbGVhbiBhbGwKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvZG93bmxvYWRfcXQuY21ha2UgYi8uZ2l0bGFiL2NpL2Rvd25sb2FkX3F0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTJiMWMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2Rvd25sb2FkX3F0LmNtYWtlCkBAIC0wLDAgKzEsMTQ2IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMikKKworIyBJbnB1dCB2YXJpYWJsZXMuCitzZXQocXRfdmVyc2lvbl9tYWpvciAiNSIpCitzZXQocXRfdmVyc2lvbl9taW5vciAiMTUiKQorc2V0KHF0X3ZlcnNpb25fcGF0Y2ggIjAiKQorIyBUaGlzIFVSTCBpcyBvbmx5IHZpc2libGUgaW5zaWRlIG9mIEtpdHdhcmUncyBuZXR3b3JrLiBQbGVhc2UgdXNlIHlvdXIgb3duIFF0CisjIEFjY291bnQgdG8gb2J0YWluIHRoZXNlIGZpbGVzLgorc2V0KHF0X3VybF9yb290ICJodHRwczovL3BhcmF2aWV3Lm9yZy9maWxlcy9kZXBlbmRlbmNpZXMvaW50ZXJuYWwvcXQiKQorCisjIERldGVybWluZSB0aGUgQUJJIHRvIGZldGNoIGZvciBRdC4KK2lmICgiJEVOVntDTUFLRV9DT05GSUdVUkFUSU9OfSIgTUFUQ0hFUyAidnMyMDE1IikKKyAgc2V0KHF0X3BsYXRmb3JtICJ3aW5kb3dzX3g4NiIpCisgIHNldChtc3ZjX3llYXIgIjIwMTUiKQorICBzZXQocXRfYWJpICJ3aW42NF9tc3ZjJHttc3ZjX3llYXJ9XzY0IikKK2Vsc2VpZiAoIiRFTlZ7Q01BS0VfQ09ORklHVVJBVElPTn0iIE1BVENIRVMgInZzMjAxNyIgT1IKKyAgICAgICAgIiRFTlZ7Q01BS0VfQ09ORklHVVJBVElPTn0iIE1BVENIRVMgInZzMjAxOSIpCisgIHNldChxdF9wbGF0Zm9ybSAid2luZG93c194ODYiKQorICBzZXQobXN2Y195ZWFyICIyMDE3IikKKyAgc2V0KHF0X2FiaSAid2luNjRfbXN2YyR7bXN2Y195ZWFyfV82NCIpCitlbHNlaWYgKCIkRU5We0NNQUtFX0NPTkZJR1VSQVRJT059IiBNQVRDSEVTICJtYWNvcyIpCisgIHNldChxdF9wbGF0Zm9ybSAibWFjX3g2NCIpCisgIHNldChxdF9hYmkgImNsYW5nXzY0IikKK2Vsc2UgKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJVbmtub3duIEFCSSB0byB1c2UgZm9yIFF0IikKK2VuZGlmICgpCisKKyMgQ29tYmluZWQgdmVyc2lvbiB2YXJpYWJsZXMuCitzZXQocXRfdmVyc2lvbiAiJHtxdF92ZXJzaW9uX21ham9yfS4ke3F0X3ZlcnNpb25fbWlub3J9LiR7cXRfdmVyc2lvbl9wYXRjaH0iKQorc2V0KHF0X3ZlcnNpb25fbm9kb3QgIiR7cXRfdmVyc2lvbl9tYWpvcn0ke3F0X3ZlcnNpb25fbWlub3J9JHtxdF92ZXJzaW9uX3BhdGNofSIpCisKKyMgRmlsZXMgbmVlZGVkIHRvIGRvd25sb2FkLgorc2V0KHF0X2ZpbGVzKQoraWYgKHF0X3BsYXRmb3JtIFNUUkVRVUFMICJ3aW5kb3dzX3g4NiIpCisgIGlmIChtc3ZjX3llYXIgU1RSRVFVQUwgIjIwMTciKQorICAgIHNldChxdF9idWlsZF9zdGFtcCAiMjAyMDAyMjYwNTM2IikKKyAgZWxzZWlmIChtc3ZjX3llYXIgU1RSRVFVQUwgIjIwMTUiKQorICAgIHNldChxdF9idWlsZF9zdGFtcCAiMjAyMDA1MTUwNzAwIikKKyAgZWxzZSAoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJCdWlsZCBzdGFtcCBmb3IgTVNWQyAke21zdmNfeWVhcn0gaXMgdW5rbm93biIpCisgIGVuZGlmICgpCisKKyAgc2V0KHF0X2ZpbGVfbmFtZV9wcmVmaXggIiR7cXRfdmVyc2lvbn0tMC0ke3F0X2J1aWxkX3N0YW1wfSIpCisKKyAgZm9yZWFjaCAocXRfY29tcG9uZW50IElOIElURU1TIHF0YmFzZSBxdHdpbmV4dHJhcykKKyAgICBsaXN0KEFQUEVORCBxdF9maWxlcworICAgICAgIiR7cXRfZmlsZV9uYW1lX3ByZWZpeH0ke3F0X2NvbXBvbmVudH0tV2luZG93cy1XaW5kb3dzXzEwLU1TVkMke21zdmNfeWVhcn0tV2luZG93cy1XaW5kb3dzXzEwLVg4Nl82NC43eiIpCisgIGVuZGZvcmVhY2ggKCkKKworICBzZXQocXRfc3ViZGlyICIke3F0X3ZlcnNpb259L21zdmMke21zdmNfeWVhcn1fNjQiKQorZWxzZWlmIChxdF9wbGF0Zm9ybSBTVFJFUVVBTCAibWFjX3g2NCIpCisgIHNldChxdF9idWlsZF9zdGFtcCAiMjAyMDA1MTQwODA1IikKKyAgc2V0KHF0X2ZpbGVfbmFtZV9wcmVmaXggIiR7cXRfdmVyc2lvbn0tMC0ke3F0X2J1aWxkX3N0YW1wfSIpCisKKyAgZm9yZWFjaCAocXRfY29tcG9uZW50IElOIElURU1TIHF0YmFzZSkKKyAgICBsaXN0KEFQUEVORCBxdF9maWxlcworICAgICAgIiR7cXRfZmlsZV9uYW1lX3ByZWZpeH0ke3F0X2NvbXBvbmVudH0tTWFjT1MtTWFjT1NfMTBfMTMtQ2xhbmctTWFjT1MtTWFjT1NfMTBfMTMtWDg2XzY0Ljd6IikKKyAgZW5kZm9yZWFjaCAoKQorCisgIHNldChxdF9zdWJkaXIgIiR7cXRfdmVyc2lvbn0vY2xhbmdfNjQiKQorZWxzZSAoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlVua25vd24gZmlsZXMgZm9yICR7cXRfcGxhdGZvcm19IikKK2VuZGlmICgpCisKKyMgVmVyaWZ5IHRoYXQgd2Uga25vdyB3aGF0IGRpcmVjdG9yeSB3aWxsIGJlIGV4dHJhY3RlZC4KK2lmIChOT1QgcXRfc3ViZGlyKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoZSBleHRyYWN0ZWQgc3ViZGlyZWN0b3J5IGlzIG5vdCBzZXQiKQorZW5kaWYgKCkKKworIyBCdWlsZCB1cCB0aGUgcGF0aCB0byB0aGUgZmlsZSB0byBkb3dubG9hZC4KK3NldChxdF91cmxfcGF0aCAiJHtxdF9wbGF0Zm9ybX0vZGVza3RvcC9xdDVfJHtxdF92ZXJzaW9uX25vZG90fS9xdC5xdDUuJHtxdF92ZXJzaW9uX25vZG90fS4ke3F0X2FiaX0iKQorc2V0KHF0X3VybF9wcmVmaXggIiR7cXRfdXJsX3Jvb3R9LyR7cXRfdXJsX3BhdGh9IikKKworIyBJbmNsdWRlIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGhhc2hlcyBvZiB0aGUgZmlsZXMgdGhhdCBtYXR0ZXIuCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2Rvd25sb2FkX3F0X2hhc2hlcy5jbWFrZSIpCisKKyMgRG93bmxvYWQgYW5kIGV4dHJhY3QgZWFjaCBmaWxlLgorZm9yZWFjaCAocXRfZmlsZSBJTiBMSVNUUyBxdF9maWxlcykKKyAgIyBFbnN1cmUgd2UgaGF2ZSBhIGhhc2ggdG8gdmVyaWZ5LgorICBpZiAoTk9UIERFRklORUQgIiR7cXRfZmlsZX1faGFzaCIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIlVua25vd24gaGFzaCBmb3IgJHtxdF9maWxlfSIpCisgIGVuZGlmICgpCisKKyAgIyBEb3dubG9hZCB0aGUgZmlsZS4KKyAgZmlsZShET1dOTE9BRAorICAgICIke3F0X3VybF9wcmVmaXh9LyR7cXRfZmlsZX0iCisgICAgIi5naXRsYWIvJHtxdF9maWxlfSIKKyAgICBTVEFUVVMgZG93bmxvYWRfc3RhdHVzCisgICAgRVhQRUNURURfSEFTSCAiU0hBMjU2PSR7JHtxdF9maWxlfV9oYXNofSIpCisKKyAgIyBDaGVjayB0aGUgZG93bmxvYWQgc3RhdHVzLgorICBsaXN0KEdFVCBkb3dubG9hZF9zdGF0dXMgMCByZXMpCisgIGlmIChyZXMpCisgICAgbGlzdChHRVQgZG93bmxvYWRfc3RhdHVzIDEgZXJyKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJGYWlsZWQgdG8gZG93bmxvYWQgJHtxdF9maWxlfTogJHtlcnJ9IikKKyAgZW5kaWYgKCkKKworICAjIEV4dHJhY3QgdGhlIGZpbGUuCisgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICBDT01NQU5ECisgICAgICAiJHtDTUFLRV9DT01NQU5EfSIKKyAgICAgIC1FIHRhcgorICAgICAgeGYgIiR7cXRfZmlsZX0iCisgICAgV09SS0lOR19ESVJFQ1RPUlkgIi5naXRsYWIiCisgICAgUkVTVUxUX1ZBUklBQkxFIHJlcworICAgIEVSUk9SX1ZBUklBQkxFIGVycgorICAgIEVSUk9SX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCisgIGlmIChyZXMpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIkZhaWxlZCB0byBleHRyYWN0ICR7cXRfZmlsZX06ICR7ZXJyfSIpCisgIGVuZGlmICgpCitlbmRmb3JlYWNoICgpCisKKyMgVGhlIFdpbmRvd3MgdGFyYmFsbHMgaGF2ZSBzb21lIHVuZm9ydHVuYXRlIHBlcm1pc3Npb25zIGluIHRoZW0gdGhhdCBwcmV2ZW50CisjIGRlbGV0aW9uIHdoZW4gYGdpdCBjbGVhbiAtZmZkeGAgdHJpZXMgdG8gY2xlYW4gdXAgdGhlIGRpcmVjdG9yeS4KK2lmIChxdF9wbGF0Zm9ybSBTVFJFUVVBTCAid2luZG93c194ODYiKQorICAjIEZpeCBwZXJtaXNzaW9ucy4KKyAgZmlsZShUT19OQVRJVkVfUEFUSCAiLmdpdGxhYi8ke3F0X3N1YmRpcn0vKi4qIiBuYXRpdmVfcXRfZGlyKQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgIyBSZW1vdmUgYW55IHJlYWQtb25seSBmbGFncyB0aGF0IGFyZW4ndCBhZmZlY3RlZCBieSBgaWNhY2xzYC4KKyAgICBDT01NQU5ECisgICAgICBhdHRyaWIKKyAgICAgIC1yICMgUmVtb3ZlIHJlYWRvbmx5IGZsYWcKKyAgICAgICIke25hdGl2ZV9xdF9kaXJ9IgorICAgICAgL2QgIyBUcmVhdCBhcyBhIGRpcmVjdG9yeQorICAgICAgL3MgIyBSZWN1cnNpdmUKKyAgICAgIC9sICMgRG9uJ3QgZGVyZWZlcmVuY2Ugc3ltbGlua3MKKyAgICBSRVNVTFRfVkFSSUFCTEUgcmVzCisgICAgRVJST1JfVkFSSUFCTEUgZXJyCisgICAgRVJST1JfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKyAgaWYgKHJlcykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiRmFpbGVkIHRvIGZpeCByZW1vdmUgcmVhZC1vbmx5IGZsYWdzIGluICR7cXRfZmlsZX06ICR7ZXJyfSIpCisgIGVuZGlmICgpCitlbmRpZiAoKQorCisjIE1vdmUgdG8gYSBwcmVkaWN0YWJsZSBwcmVmaXguCitmaWxlKFJFTkFNRQorICAiLmdpdGxhYi8ke3F0X3N1YmRpcn0iCisgICIuZ2l0bGFiL3F0IikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvZG93bmxvYWRfcXRfaGFzaGVzLmNtYWtlIGIvLmdpdGxhYi9jaS9kb3dubG9hZF9xdF9oYXNoZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljYjU5NwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZG93bmxvYWRfcXRfaGFzaGVzLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKKyMgTGluZXMgY2FuIGJlIGdlbmVyYXRlZCBieSBkb2luZzoKKyMKKyMgICBzaGEyNTZzdW0gJGZpbGVzIHwgYXdrICd7IHByaW50ICJzZXQoXCIiICQyICJfaGFzaFwiICIgJDEgIikiIH0nID4+ICR0aGlzZmlsZQorCitzZXQoIjUuMTUuMC0wLTIwMjAwMjI2MDUzNnF0YmFzZS1XaW5kb3dzLVdpbmRvd3NfMTAtTVNWQzIwMTctV2luZG93cy1XaW5kb3dzXzEwLVg4Nl82NC43el9oYXNoIiBjMDQxNTk2YmU4ZjdhMTZjN2JlOWVhNjc1N2MxNDc2NmZmMzIwMGFiNmQ1NmY3ZGI4Zjg2NWRiZmUwMzlmZTIwKQorc2V0KCI1LjE1LjAtMC0yMDIwMDIyNjA1MzZxdHdpbmV4dHJhcy1XaW5kb3dzLVdpbmRvd3NfMTAtTVNWQzIwMTctV2luZG93cy1XaW5kb3dzXzEwLVg4Nl82NC43el9oYXNoIiAxMDc5NjEyOGZhYzU0ZjE0Njc2N2UzM2Y2ODcyOTc1YmEyMzg4NTg1NDdkZTdhOTY1MGVjNGNkOTU4MWZlNzFhKQorCitzZXQoIjUuMTUuMC0wLTIwMjAwNTE1MDcwMHF0YmFzZS1XaW5kb3dzLVdpbmRvd3NfMTAtTVNWQzIwMTUtV2luZG93cy1XaW5kb3dzXzEwLVg4Nl82NC43el9oYXNoIiAwYzI2NTNjNWVjYTI1NmY1OWMwYjQ4YjUzN2NkNjMzYjA1NTYwZTQyNDFjMDIyNjg1NmQyYWUyMmFiMDY2ZGY0KQorc2V0KCI1LjE1LjAtMC0yMDIwMDUxNTA3MDBxdHdpbmV4dHJhcy1XaW5kb3dzLVdpbmRvd3NfMTAtTVNWQzIwMTUtV2luZG93cy1XaW5kb3dzXzEwLVg4Nl82NC43el9oYXNoIiA0YmNhM2E4ZDhjNzYxMWUyMTFhODJkODZiMzM5NmY4YTYyMmFiZTc4NTlkNTA1MjQ1MjQxNDY0MmVjMTkxODQ0KQorCitzZXQoIjUuMTUuMC0wLTIwMjAwNTE0MDgwNXF0YmFzZS1NYWNPUy1NYWNPU18xMF8xMy1DbGFuZy1NYWNPUy1NYWNPU18xMF8xMy1YODZfNjQuN3pfaGFzaCIgMDRkODY3YzgxZDI0MzFmMjg4YzQyYzk3NTI2NDI3NTk0NjBiOTQ2ODQ3N2RlMzQ5MzY4ZGNjOGRlMGM4ZGRjNCkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvZ2l0bGFiX2NpLmNtYWtlIGIvLmdpdGxhYi9jaS9naXRsYWJfY2kuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4ZDVlYQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZ2l0bGFiX2NpLmNtYWtlCkBAIC0wLDAgKzEsNTggQEAKK2lmIChOT1QgREVGSU5FRCAiRU5We0dJVExBQl9DSX0iKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoaXMgc2NyaXB0IGFzc3VtZXMgaXQgaXMgYmVpbmcgcnVuIGluc2lkZSBvZiBHaXRMYWItQ0kiKQorZW5kaWYgKCkKKworIyBTZXQgdXAgdGhlIHNvdXJjZSBhbmQgYnVpbGQgcGF0aHMuCitzZXQoQ1RFU1RfU09VUkNFX0RJUkVDVE9SWSAiJEVOVntDSV9QUk9KRUNUX0RJUn0iKQoraWYgKE5PVCAiJEVOVntDVEVTVF9TT1VSQ0VfU1VCRElSRUNUT1JZfSIgU1RSRVFVQUwgIiIpCisgIHN0cmluZyhBUFBFTkQgQ1RFU1RfU09VUkNFX0RJUkVDVE9SWSAiLyRFTlZ7Q1RFU1RfU09VUkNFX1NVQkRJUkVDVE9SWX0iKQorZW5kaWYgKCkKK3NldChDVEVTVF9CSU5BUllfRElSRUNUT1JZICIke0NURVNUX1NPVVJDRV9ESVJFQ1RPUll9L2J1aWxkIikKKworaWYgKCIkRU5We0NNQUtFX0NPTkZJR1VSQVRJT059IiBTVFJFUVVBTCAiIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJUaGUgQ01BS0VfQ09ORklHVVJBVElPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCB0byBrbm93IHdoYXQgIgorICAgICJjYWNoZSBpbml0aWFsaXphdGlvbiBmaWxlIHRvIHVzZS4iKQorZW5kaWYgKCkKKworIyBTZXQgdGhlIGJ1aWxkIG1ldGFkYXRhLgorc2V0KENURVNUX0JVSUxEX05BTUUgIiRFTlZ7Q0lfUFJPSkVDVF9OQU1FfS0kRU5We0NNQUtFX0NPTkZJR1VSQVRJT059IikKK3NldChDVEVTVF9TSVRFICJnaXRsYWItY2kiKQorCisjIERlZmF1bHQgdG8gUmVsZWFzZSBidWlsZHMuCitpZiAoTk9UICIkRU5We0NNQUtFX0JVSUxEX1RZUEV9IiBTVFJFUVVBTCAiIikKKyAgc2V0KENURVNUX0JVSUxEX0NPTkZJR1VSQVRJT04gIiRFTlZ7Q01BS0VfQlVJTERfVFlQRX0iKQorZW5kaWYgKCkKK2lmIChOT1QgQ1RFU1RfQlVJTERfQ09ORklHVVJBVElPTikKKyAgc2V0KENURVNUX0JVSUxEX0NPTkZJR1VSQVRJT04gIlJlbGVhc2UiKQorZW5kaWYgKCkKK3NldChDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEUgIiR7Q1RFU1RfQlVJTERfQ09ORklHVVJBVElPTn0iKQorCisjIERlZmF1bHQgdG8gdXNpbmcgTmluamEuCitpZiAoTk9UICIkRU5We0NNQUtFX0dFTkVSQVRPUn0iIFNUUkVRVUFMICIiKQorICBzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SICIkRU5We0NNQUtFX0dFTkVSQVRPUn0iKQorZW5kaWYgKCkKK2lmIChOT1QgQ1RFU1RfQ01BS0VfR0VORVJBVE9SKQorICBzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SICJOaW5qYSIpCitlbmRpZiAoKQorCisjIFNldCB0aGUgdG9vbHNldCBhbmQgcGxhdGZvcm0gaWYgcmVxdWVzdGVkLgoraWYgKE5PVCAiJEVOVntDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk19IiBTVFJFUVVBTCAiIikKKyAgc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STSAiJEVOVntDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk19IikKK2VuZGlmICgpCitpZiAoTk9UICIkRU5We0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUfSIgU1RSRVFVQUwgIiIpCisgIHNldChDVEVTVF9DTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCAiJEVOVntDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVH0iKQorZW5kaWYgKCkKKworIyBEZXRlcm1pbmUgdGhlIHRyYWNrIHRvIHN1Ym1pdCB0by4KK3NldChjdGVzdF90cmFjayAiRXhwZXJpbWVudGFsIikKK2lmIChOT1QgIiRFTlZ7Q0lfTUVSR0VfUkVRVUVTVF9JRH0iIFNUUkVRVUFMICIiKQorICBzZXQoY3Rlc3RfdHJhY2sgIm1lcmdlLXJlcXVlc3RzIikKK2Vsc2VpZiAoIiRFTlZ7Q0lfUFJPSkVDVF9QQVRIfSIgU1RSRVFVQUwgImNtYWtlL2NtYWtlIikKKyAgaWYgKCIkRU5We0NJX0NPTU1JVF9SRUZfTkFNRX0iIFNUUkVRVUFMICJtYXN0ZXIiKQorICAgIHNldChjdGVzdF90cmFjayAibWFzdGVyIikKKyAgZWxzZWlmICgiJEVOVntDSV9DT01NSVRfUkVGX05BTUV9IiBTVFJFUVVBTCAicmVsZWFzZSIpCisgICAgc2V0KGN0ZXN0X3RyYWNrICJyZWxlYXNlIikKKyAgZW5kaWYgKCkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL25pbmphLnBzMSBiLy5naXRsYWIvY2kvbmluamEucHMxCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxZjhiMDIKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL25pbmphLnBzMQpAQCAtMCwwICsxLDE3IEBACiskZXJyb3JhY3Rpb25wcmVmZXJlbmNlID0gInN0b3AiCisKKyR2ZXJzaW9uID0gIjEuMTAuMCIKKyRzaGEyNTZzdW0gPSAiOTE5RkQxNThDMTZCRjEzNUU4QTg1MEJCNDA0NkVDMUNFMjhBNzQzOUVFMDhCOTc3Q0QwQjdGNkIzNDYzRDE3OCIKKyRmaWxlbmFtZSA9ICJuaW5qYS13aW4iCiskdGFyYmFsbCA9ICIkZmlsZW5hbWUuemlwIgorCiskb3V0ZGlyID0gJHB3ZC5QYXRoCiskb3V0ZGlyID0gIiRvdXRkaXJcLmdpdGxhYiIKK0ludm9rZS1XZWJSZXF1ZXN0IC1VcmkgImh0dHBzOi8vZ2l0aHViLmNvbS9uaW5qYS1idWlsZC9uaW5qYS9yZWxlYXNlcy9kb3dubG9hZC92JHZlcnNpb24vJHRhcmJhbGwiIC1PdXRGaWxlICIkb3V0ZGlyXCR0YXJiYWxsIgorJGhhc2ggPSBHZXQtRmlsZUhhc2ggIiRvdXRkaXJcJHRhcmJhbGwiIC1BbGdvcml0aG0gU0hBMjU2CitpZiAoJGhhc2guSGFzaCAtbmUgJHNoYTI1NnN1bSkgeworICAgIGV4aXQgMQorfQorCitBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5JTy5Db21wcmVzc2lvbi5GaWxlU3lzdGVtCitbU3lzdGVtLklPLkNvbXByZXNzaW9uLlppcEZpbGVdOjpFeHRyYWN0VG9EaXJlY3RvcnkoIiRvdXRkaXJcJHRhcmJhbGwiLCAiJG91dGRpciIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL25pbmphLnNoIGIvLmdpdGxhYi9jaS9uaW5qYS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45M2MxZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9uaW5qYS5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKworc2V0IC1lCisKK3JlYWRvbmx5IHZlcnNpb249IjEuMTAuMCIKKworY2FzZSAiJCggdW5hbWUgLXMgKSIgaW4KKyAgICBMaW51eCkKKyAgICAgICAgc2hhdG9vbD0ic2hhMjU2c3VtIgorICAgICAgICBzaGEyNTZzdW09IjY1NjY4MzZkZGYzZDcyY2EwNjY4NWIzNDgxNGUwYzZmYTBmMDk0MzU0MmQ2NTFkMGRhYjMxNTBmMTAzMDdjODIiCisgICAgICAgIHBsYXRmb3JtPSJsaW51eCIKKyAgICAgICAgOzsKKyAgICBEYXJ3aW4pCisgICAgICAgIHNoYXRvb2w9InNoYXN1bSAtYSAyNTYiCisgICAgICAgIHNoYTI1NnN1bT0iMmVlNDA1YzBlMjA1ZDU1NjY2YzYwY2M5YzBkOGQwNGM4ZWRlMDZkM2VmMmUyYzJhYWJlMDhmZDgxYzE3ZDIyZSIKKyAgICAgICAgcGxhdGZvcm09Im1hYyIKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBlY2hvICJVbnJlY29nbml6ZWQgcGxhdGZvcm0gJCggdW5hbWUgLXMgKSIKKyAgICAgICAgZXhpdCAxCisgICAgICAgIDs7Citlc2FjCityZWFkb25seSBzaGF0b29sCityZWFkb25seSBzaGEyNTZzdW0KK3JlYWRvbmx5IHBsYXRmb3JtCisKK3JlYWRvbmx5IGZpbGVuYW1lPSJuaW5qYS0kcGxhdGZvcm0iCityZWFkb25seSB0YXJiYWxsPSIkZmlsZW5hbWUuemlwIgorCitjZCAuZ2l0bGFiCisKK2VjaG8gIiRzaGEyNTZzdW0gICR0YXJiYWxsIiA+IG5pbmphLnNoYTI1NnN1bQorY3VybCAtT0wgImh0dHBzOi8vZ2l0aHViLmNvbS9uaW5qYS1idWlsZC9uaW5qYS9yZWxlYXNlcy9kb3dubG9hZC92JHZlcnNpb24vJHRhcmJhbGwiCiskc2hhdG9vbCAtLWNoZWNrIG5pbmphLnNoYTI1NnN1bQorLi9jbWFrZS9iaW4vY21ha2UgLUUgdGFyIHhmICIkdGFyYmFsbCIKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvc2NjYWNoZS5zaCBiLy5naXRsYWIvY2kvc2NjYWNoZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mN2Q1MWZmCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9zY2NhY2hlLnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworcmVhZG9ubHkgdmVyc2lvbj0iMC4yLjEzIgorCitjYXNlICIkKCB1bmFtZSAtcyApIiBpbgorICAgIExpbnV4KQorICAgICAgICBzaGF0b29sPSJzaGEyNTZzdW0iCisgICAgICAgIHNoYTI1NnN1bT0iMjhhNTQ5OWUzNDA4NjViMDhiNjMyMzA2YjQzNTkxM2JlYjU5MGZiZDdiNDlhM2Y4ODdhNjIzYjQ1OWZhYmRlYiIKKyAgICAgICAgcGxhdGZvcm09Ing4Nl82NC11bmtub3duLWxpbnV4LW11c2wiCisgICAgICAgIDs7CisgICAgRGFyd2luKQorICAgICAgICBzaGF0b29sPSJzaGFzdW0gLWEgMjU2IgorICAgICAgICBzaGEyNTZzdW09ImY1NjRlOTQ4YWJhZGZjOWU0MDllYjFjZDdiYWJmMjRjNjc4NDA1N2Q1NTA2YzNiMGEwNGNkZDM3Y2Q4MzBhZTkiCisgICAgICAgIHBsYXRmb3JtPSJ4ODZfNjQtYXBwbGUtZGFyd2luIgorICAgICAgICA7OworICAgICopCisgICAgICAgIGVjaG8gIlVucmVjb2duaXplZCBwbGF0Zm9ybSAkKCB1bmFtZSAtcyApIgorICAgICAgICBleGl0IDEKKyAgICAgICAgOzsKK2VzYWMKK3JlYWRvbmx5IHNoYXRvb2wKK3JlYWRvbmx5IHNoYTI1NnN1bQorcmVhZG9ubHkgcGxhdGZvcm0KKworcmVhZG9ubHkgZmlsZW5hbWU9InNjY2FjaGUtJHZlcnNpb24tJHBsYXRmb3JtIgorcmVhZG9ubHkgdGFyYmFsbD0iJGZpbGVuYW1lLnRhci5neiIKKworY2QgLmdpdGxhYgorCitlY2hvICIkc2hhMjU2c3VtICAkdGFyYmFsbCIgPiBzY2NhY2hlLnNoYTI1NnN1bQorY3VybCAtT0wgImh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NjY2FjaGUvcmVsZWFzZXMvZG93bmxvYWQvJHZlcnNpb24vJHRhcmJhbGwiCiskc2hhdG9vbCAtLWNoZWNrIHNjY2FjaGUuc2hhMjU2c3VtCit0YXIgeGYgIiR0YXJiYWxsIgorbXYgIiRmaWxlbmFtZS9zY2NhY2hlIiAuCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL3ZjdmFyc2FsbC5wczEgYi8uZ2l0bGFiL2NpL3ZjdmFyc2FsbC5wczEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTdkMzM4NgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvdmN2YXJzYWxsLnBzMQpAQCAtMCwwICsxLDkgQEAKKyRlcnJvcmFjdGlvbnByZWZlcmVuY2UgPSAic3RvcCIKKworY21kIC9jICJgIiRlbnY6VkNWQVJTQUxMYCIgJFZDVkFSU1BMQVRGT1JNIC12Y3ZhcnNfdmVyPSRWQ1ZBUlNWRVJTSU9OICYgc2V0IiB8Citmb3JlYWNoIHsKKyAgICBpZiAoJF8gLW1hdGNoICI9IikgeworICAgICAgICAkdiA9ICRfLnNwbGl0KCI9IikKKyAgICAgICAgW0Vudmlyb25tZW50XTo6U2V0RW52aXJvbm1lbnRWYXJpYWJsZSgkdlswXSwgJHZbMV0pCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9vcy1saW51eC55bWwgYi8uZ2l0bGFiL29zLWxpbnV4LnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzk3Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9vcy1saW51eC55bWwKQEAgLTAsMCArMSwyMTAgQEAKKyMgTGludXgtc3BlY2lmaWMgYnVpbGRlciBjb25maWd1cmF0aW9ucyBhbmQgYnVpbGQgY29tbWFuZHMKKworIyMgQmFzZSBpbWFnZXMKKworIyMjIFJlbGVhc2UKKworLnJlbGVhc2VfbGludXg6CisgICAgaW1hZ2U6ICJraXR3YXJlL2NtYWtlOmJ1aWxkLWxpbnV4LXg4Nl82NC1kZXBzLTIwMjAtMDQtMDJAc2hhMjU2Ojc3ZTlhYjE4M2YzNDY4MDk5MGRiOWRhNTk0NTQ3M2UyODhmMGQ2NTU2YmNlNzllY2MxNTg5NjcwZDY1NmUxNTciCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIEdJVF9DTE9ORV9QQVRIOiAiJENJX0JVSUxEU19ESVIvY21ha2UgY2kiCisgICAgICAgIExBVU5DSEVSOiAic2NsIGVuYWJsZSBkZXZ0b29sc2V0LTYgcmgtcHl0aG9uMzYgLS0iCisKKyMjIyBEZWJpYW4KKworLmRlYmlhbjEwOgorICAgIGltYWdlOiAia2l0d2FyZS9jbWFrZTpjaS1kZWJpYW4xMC14ODZfNjQtMjAyMC0wNC0yNyIKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgR0lUX0NMT05FX1BBVEg6ICIkQ0lfQlVJTERTX0RJUi9jbWFrZSBjaSIKKworLmRlYmlhbjEwX2l3eXU6CisgICAgZXh0ZW5kczogLmRlYmlhbjEwCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IGRlYmlhbjEwX2l3eXUKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorICAgICAgICBDTWFrZV9TS0lQX0lOU1RBTEw6IDEKKworIyMjIEZlZG9yYQorCisuZmVkb3JhMzE6CisgICAgaW1hZ2U6ICJraXR3YXJlL2NtYWtlOmNpLWZlZG9yYTMxLXg4Nl82NC0yMDIwLTA2LTAxIgorCisgICAgdmFyaWFibGVzOgorICAgICAgICBHSVRfQ0xPTkVfUEFUSDogIiRDSV9CVUlMRFNfRElSL2NtYWtlIGNpIgorCisjIyMjIExpbnQgYnVpbGRzCisKKy5mZWRvcmEzMV90aWR5OgorICAgIGV4dGVuZHM6IC5mZWRvcmEzMQorCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiBmZWRvcmEzMV90aWR5CisgICAgICAgIENURVNUX05PX1dBUk5JTkdTX0FMTE9XRUQ6IDEKKyAgICAgICAgQ01ha2VfU0tJUF9JTlNUQUxMOiAxCisKKy5mZWRvcmEzMV9zcGhpbng6CisgICAgZXh0ZW5kczogLmZlZG9yYTMxCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IGZlZG9yYTMxX3NwaGlueAorICAgICAgICBDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEOiAxCisgICAgICAgIENURVNUX1NPVVJDRV9TVUJESVJFQ1RPUlk6ICJVdGlsaXRpZXMvU3BoaW54IgorICAgICAgICBDTWFrZV9TS0lQX0lOU1RBTEw6IDEKKworIyMjIyBCdWlsZCBhbmQgdGVzdAorCisuZmVkb3JhMzFfbmluamE6CisgICAgZXh0ZW5kczogLmZlZG9yYTMxCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IGZlZG9yYTMxX25pbmphCisgICAgICAgIENURVNUX05PX1dBUk5JTkdTX0FMTE9XRUQ6IDEKKworLmZlZG9yYTMxX25pbmphX211bHRpOgorICAgIGV4dGVuZHM6IC5mZWRvcmEzMQorCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiBmZWRvcmEzMV9uaW5qYV9tdWx0aQorICAgICAgICBDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEOiAxCisgICAgICAgIENNQUtFX0dFTkVSQVRPUjogIk5pbmphIE11bHRpLUNvbmZpZyIKKworLmZlZG9yYTMxX21ha2VmaWxlczoKKyAgICBleHRlbmRzOiAuZmVkb3JhMzEKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgQ01BS0VfQ09ORklHVVJBVElPTjogZmVkb3JhMzFfbWFrZWZpbGVzCisgICAgICAgIENURVNUX05PX1dBUk5JTkdTX0FMTE9XRUQ6IDEKKyAgICAgICAgQ01BS0VfR0VORVJBVE9SOiAiVW5peCBNYWtlZmlsZXMiCisKKyMjIyBDVURBIGJ1aWxkcworCisuY3VkYTEwLjI6CisgICAgaW1hZ2U6ICJraXR3YXJlL2NtYWtlOmNpLWN1ZGExMC4yLXg4Nl82NC0yMDIwLTA2LTExIgorCisgICAgdmFyaWFibGVzOgorICAgICAgICBHSVRfQ0xPTkVfUEFUSDogIiRDSV9CVUlMRFNfRElSL2NtYWtlIGNpIgorICAgICAgICBDVEVTVF9MQUJFTFM6ICJDVURBIgorCisuY3VkYTEwLjJfbnZpZGlhOgorICAgIGV4dGVuZHM6IC5jdWRhMTAuMgorCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiBjdWRhMTAuMl9udmlkaWEKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorCisjIyBUYWdzCisKKy5saW51eF9idWlsZGVyX3RhZ3M6CisgICAgdGFnczoKKyAgICAgICAgLSBidWlsZAorICAgICAgICAtIGRvY2tlcgorICAgICAgICAtIGxpbnV4CisKKy5saW51eF9idWlsZGVyX3RhZ3NfcXQ6CisgICAgdGFnczoKKyAgICAgICAgLSBidWlsZAorICAgICAgICAtIGRvY2tlcgorICAgICAgICAtIGxpbnV4CisgICAgICAgIC0gbGludXgtMy4xNyAjIE5lZWRlZCB0byBiZSBhYmxlIHRvIGxvYWQgRmVkb3JhJ3MgUXQgbGlicmFyaWVzLgorCisubGludXhfYnVpbGRlcl90YWdzX2N1ZGE6CisgICAgdGFnczoKKyAgICAgICAgLSBjdWRhLXJ0CisgICAgICAgIC0gZG9ja2VyCisgICAgICAgIC0gbGludXgKKworIyMgTGludXgtc3BlY2lmaWMgc2NyaXB0cworCisuYmVmb3JlX3NjcmlwdF9saW51eDogJmJlZm9yZV9zY3JpcHRfbGludXgKKyAgICAtIC5naXRsYWIvY2kvY21ha2Uuc2gKKyAgICAtIC5naXRsYWIvY2kvbmluamEuc2gKKyAgICAtIGV4cG9ydCBQQVRIPSRQV0QvLmdpdGxhYjokUFdELy5naXRsYWIvY21ha2UvYmluOiRQQVRICisgICAgLSBjbWFrZSAtLXZlcnNpb24KKyAgICAtIG5pbmphIC0tdmVyc2lvbgorCisuY21ha2VfYnVpbGRfbGludXg6CisgICAgc3RhZ2U6IGJ1aWxkCisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfbGludXgKKyAgICAgICAgLSAuZ2l0bGFiL2NpL3NjY2FjaGUuc2gKKyAgICAgICAgLSBzY2NhY2hlIC0tc3RhcnQtc2VydmVyCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKyAgICAgICAgLSAiJExBVU5DSEVSIGN0ZXN0IC1WViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X2NvbmZpZ3VyZS5jbWFrZSIKKyAgICAgICAgLSAiJExBVU5DSEVSIGN0ZXN0IC1WViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X2J1aWxkLmNtYWtlIgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisKKyAgICBpbnRlcnJ1cHRpYmxlOiB0cnVlCisKKy5jbWFrZV90ZXN0X2xpbnV4OgorICAgIHN0YWdlOiB0ZXN0CisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfbGludXgKKyAgICAgICAgLSAiJExBVU5DSEVSIGN0ZXN0IC0tb3V0cHV0LW9uLWZhaWx1cmUgLVYgLVMgLmdpdGxhYi9jaS9jdGVzdF90ZXN0LmNtYWtlIgorCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQorCisuY21ha2VfYnVpbGRfcmVsZWFzZV9saW51eDoKKyAgICBzdGFnZTogYnVpbGQKKworICAgIHNjcmlwdDoKKyAgICAgICAgIyBCb290c3RyYXAuCisgICAgICAgIC0gbWtkaXIgYnVpbGQvCisgICAgICAgIC0gY3AgLXYgVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L2NhY2hlLnR4dCBidWlsZC9DTWFrZUNhY2hlLnR4dAorICAgICAgICAjIE1ha2Ugc2NjYWNoZSBhdmFpbGFibGUuCisgICAgICAgIC0gLmdpdGxhYi9jaS9zY2NhY2hlLnNoCisgICAgICAgIC0gZXhwb3J0IFBBVEg9JFBXRC8uZ2l0bGFiOiRQQVRICisgICAgICAgICMgQXBwZW5kIHNjY2FjaGUgc2V0dGluZ3MgdG8gdGhlIGNhY2hlLgorICAgICAgICAtIGVjaG8gIkNNQUtFX0NfQ09NUElMRVJfTEFVTkNIRVI6U1RSSU5HPXNjY2FjaGUiID4+IGJ1aWxkL0NNYWtlQ2FjaGUudHh0CisgICAgICAgIC0gZWNobyAiQ01BS0VfQ1hYX0NPTVBJTEVSX0xBVU5DSEVSOlNUUklORz1zY2NhY2hlIiA+PiBidWlsZC9DTWFrZUNhY2hlLnR4dAorICAgICAgICAjIENJIHNldHRpbmdzLgorICAgICAgICAtIGVjaG8gIkNNYWtlX1RFU1RfSU5TVEFMTDpCT09MPU9GRiIgPj4gYnVpbGQvQ01ha2VDYWNoZS50eHQKKyAgICAgICAgLSBlY2hvICJDTUFLRV9JTlNUQUxMX1BSRUZJWDpQQVRIPSRQV0QvYnVpbGQvaW5zdGFsbCIgPj4gYnVpbGQvQ01ha2VDYWNoZS50eHQKKyAgICAgICAgLSBlY2hvICJDTUFLRV9TS0lQX0lOU1RBTExfQUxMX0RFUEVOREVOQ1k6Qk9PTD1PTiIgPj4gYnVpbGQvQ01ha2VDYWNoZS50eHQKKyAgICAgICAgIyBCb290c3RyYXAKKyAgICAgICAgLSBjZCBidWlsZC8KKyAgICAgICAgLSAiJExBVU5DSEVSIC4uL2Jvb3RzdHJhcCAtLXBhcmFsbGVsPSQobnByb2MpIC0tZG9jZGlyPWRvYy9jbWFrZSIKKyAgICAgICAgIyBGSVhNRTogV2hlbiBDVGVzdCBjYW4gZHJpdmUgYW4gZXh0ZXJuYWwgQ01ha2UgZm9yIHRoZSBidWlsZCBhcyB3ZWxsLAorICAgICAgICAjIHVzZSB0aGUgc2NyaXB0cyBoZXJlLgorICAgICAgICAtICIkTEFVTkNIRVIgbWFrZSAtaiQobnByb2MpIgorICAgICAgICAjIE5PVEU6IFRoaXMgcmVnZXggbWF0Y2hlcyB0aGF0IHVzZWQgaW4gdGhlIHJlbGVhc2UgYnVpbGQuCisgICAgICAgIC0gIiRMQVVOQ0hFUiBiaW4vY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtaiQobnByb2MpIC1SICdeKENNYWtlXFwufENNYWtlTGliXFwufENNYWtlU2VydmVyTGliXFwufFJ1bkNNYWtlXFwuY3Rlc3RfbWVtY2hlY2spJyIKKyAgICAgICAgIyBNYWtlIGEgcGFja2FnZS4KKyAgICAgICAgLSBiaW4vY3BhY2sgLUcgVEdaCisgICAgICAgIC0gYmluL2NwYWNrIC1HIFNUR1oKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQorCisuY21ha2VfdGVzdF9saW51eF9wYWNrYWdlOgorICAgIHN0YWdlOiB0ZXN0LWV4dAorCisgICAgc2NyaXB0OgorICAgICAgICAtICpiZWZvcmVfc2NyaXB0X2xpbnV4CisgICAgICAgICMgTWFrZSB0aGUgQ01ha2UgcGFja2FnZSBhdmFpbGFibGUuCisgICAgICAgIC0gbWtkaXIgLXAgYnVpbGQvaW5zdGFsbAorICAgICAgICAtIHRhciAtQyBidWlsZC9pbnN0YWxsIC0tc3RyaXAtY29tcG9uZW50cz0xIC14emYgYnVpbGQvY21ha2UtKi1MaW51eC14ODZfNjQudGFyLmd6CisgICAgICAgIC0gLmdpdGxhYi9jaS9zY2NhY2hlLnNoCisgICAgICAgIC0gc2NjYWNoZSAtLXN0YXJ0LXNlcnZlcgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisgICAgICAgIC0gIiRMQVVOQ0hFUiBidWlsZC9pbnN0YWxsL2Jpbi9jdGVzdCAtLW91dHB1dC1vbi1mYWlsdXJlIC1WIC1TIC5naXRsYWIvY2kvY3Rlc3RfdGVzdF9leHRlcm5hbC5jbWFrZSIKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQorCisuY21ha2VfdGVzdF9saW51eF9leHRlcm5hbDoKKyAgICBzdGFnZTogdGVzdC1leHQKKworICAgIHNjcmlwdDoKKyAgICAgICAgLSAqYmVmb3JlX3NjcmlwdF9saW51eAorICAgICAgICAtIC5naXRsYWIvY2kvc2NjYWNoZS5zaAorICAgICAgICAtIHNjY2FjaGUgLS1zdGFydC1zZXJ2ZXIKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworICAgICAgICAtICIkTEFVTkNIRVIgYnVpbGQvaW5zdGFsbC9iaW4vY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X3Rlc3RfZXh0ZXJuYWwuY21ha2UiCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKworICAgIGludGVycnVwdGlibGU6IHRydWUKZGlmZiAtLWdpdCBhLy5naXRsYWIvb3MtbWFjb3MueW1sIGIvLmdpdGxhYi9vcy1tYWNvcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxMjNlYwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvb3MtbWFjb3MueW1sCkBAIC0wLDAgKzEsMTE1IEBACisjIG1hY09TLXNwZWNpZmljIGJ1aWxkZXIgY29uZmlndXJhdGlvbnMgYW5kIGJ1aWxkIGNvbW1hbmRzCisKKyMjIEJhc2UgY29uZmlndXJhdGlvbnMKKworLm1hY29zOgorICAgIHZhcmlhYmxlczoKKyAgICAgICAgR0lUX0NMT05FX1BBVEg6ICIkQ0lfQlVJTERTX0RJUi9jbWFrZSBjaSBleHQvJENJX0NPTkNVUlJFTlRfSUQiCisgICAgICAgICMgVE9ETzogRmFjdG9yIHRoaXMgb3V0IHNvIHRoYXQgZWFjaCBqb2Igc2VsZWN0cyB0aGUgWGNvZGUgdmVyc2lvbiB0bworICAgICAgICAjIHVzZSBzbyB0aGF0IGRpZmZlcmVudCB2ZXJzaW9ucyBjYW4gYmUgdGVzdGVkIGluIGEgc2luZ2xlIHBpcGVsaW5lLgorICAgICAgICBERVZFTE9QRVJfRElSOiAiL0FwcGxpY2F0aW9ucy9YY29kZS0xMS41LmFwcC9Db250ZW50cy9EZXZlbG9wZXIiCisKKyMjIyBCdWlsZCBhbmQgdGVzdAorCisubWFjb3NfYnVpbGQ6CisgICAgZXh0ZW5kczogLm1hY29zCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgICMgTm90ZSB0aGF0IHNoZWxsIHJ1bm5lcnMgb25seSBzdXBwb3J0IHJ1bm5lcnMgd2l0aCBhIHNpbmdsZQorICAgICAgICAjIGNvbmN1cnJlbmN5IGxldmVsLiBXZSBjYW4ndCB1c2UgYCRDSV9DT05DVVJSRU5DWV9JRGAgYmVjYXVzZSB0aGlzIG1heQorICAgICAgICAjIGNoYW5nZSBiZXR3ZWVuIHRoZSBidWlsZCBhbmQgdGVzdCBzdGFnZXMgd2hpY2ggQ01ha2UgZG9lc24ndCBzdXBwb3J0LgorICAgICAgICAjIEV2ZW4gaWYgd2UgY291bGQsIGl0IGNvdWxkIGNoYW5nZSBpZiBvdGhlciBydW5uZXJzIG9uIHRoZSBtYWNoaW5lCisgICAgICAgICMgY291bGQgcnVuIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHdlIGRyb3AgaXQuCisgICAgICAgIEdJVF9DTE9ORV9QQVRIOiAiJENJX0JVSUxEU19ESVIvY21ha2UgY2kiCisKKy5tYWNvc19uaW5qYToKKyAgICBleHRlbmRzOiAubWFjb3NfYnVpbGQKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgQ01BS0VfQ09ORklHVVJBVElPTjogbWFjb3NfbmluamEKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorCisubWFjb3NfbWFrZWZpbGVzOgorICAgIGV4dGVuZHM6IC5tYWNvc19idWlsZAorCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiBtYWNvc19tYWtlZmlsZXMKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorICAgICAgICBDTUFLRV9HRU5FUkFUT1I6ICJVbml4IE1ha2VmaWxlcyIKKworIyMjIEV4dGVybmFsIHRlc3RpbmcKKworLm1hY29zX3hjb2RlOgorICAgIGV4dGVuZHM6IC5tYWNvcworCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiBtYWNvc194Y29kZQorICAgICAgICBDTUFLRV9HRU5FUkFUT1I6IFhjb2RlCisKKyMjIFRhZ3MKKworLm1hY29zX2J1aWxkZXJfdGFnczoKKyAgICB0YWdzOgorICAgICAgICAtIGNtYWtlICMgU2luY2UgdGhpcyBpcyBhIGJhcmUgcnVubmVyLCBwaW4gdG8gYSBwcm9qZWN0LgorICAgICAgICAtIG1hY29zCisgICAgICAgIC0gc2hlbGwKKyAgICAgICAgLSB4Y29kZS0xMS41CisgICAgICAgIC0gbm9uY29uY3VycmVudAorCisubWFjb3NfYnVpbGRlcl9leHRfdGFnczoKKyAgICB0YWdzOgorICAgICAgICAtIGNtYWtlICMgU2luY2UgdGhpcyBpcyBhIGJhcmUgcnVubmVyLCBwaW4gdG8gYSBwcm9qZWN0LgorICAgICAgICAtIG1hY29zCisgICAgICAgIC0gc2hlbGwKKyAgICAgICAgLSB4Y29kZS0xMS41CisgICAgICAgIC0gY29uY3VycmVudAorCisjIyBtYWNPUy1zcGVjaWZpYyBzY3JpcHRzCisKKy5iZWZvcmVfc2NyaXB0X21hY29zOiAmYmVmb3JlX3NjcmlwdF9tYWNvcworICAgIC0gLmdpdGxhYi9jaS9jbWFrZS5zaAorICAgIC0gLmdpdGxhYi9jaS9uaW5qYS5zaAorICAgIC0gZXhwb3J0IFBBVEg9JFBXRC8uZ2l0bGFiOiRQV0QvLmdpdGxhYi9jbWFrZS9iaW46JFBBVEgKKyAgICAtIGNtYWtlIC0tdmVyc2lvbgorICAgIC0gbmluamEgLS12ZXJzaW9uCisgICAgIyBEb3dubG9hZCBRdAorICAgIC0gY21ha2UgLVAgLmdpdGxhYi9jaS9kb3dubG9hZF9xdC5jbWFrZQorICAgIC0gZXhwb3J0IENNQUtFX1BSRUZJWF9QQVRIPSRQV0QvLmdpdGxhYi9xdAorCisuY21ha2VfYnVpbGRfbWFjb3M6CisgICAgc3RhZ2U6IGJ1aWxkCisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfbWFjb3MKKyAgICAgICAgLSAuZ2l0bGFiL2NpL3NjY2FjaGUuc2gKKyAgICAgICAgIyBBbGxvdyB0aGUgc2VydmVyIHRvIGFscmVhZHkgYmUgcnVubmluZy4KKyAgICAgICAgLSAic2NjYWNoZSAtLXN0YXJ0LXNlcnZlciB8fCA6IgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisgICAgICAgIC0gY3Rlc3QgLVZWIC1TIC5naXRsYWIvY2kvY3Rlc3RfY29uZmlndXJlLmNtYWtlCisgICAgICAgIC0gY3Rlc3QgLVZWIC1TIC5naXRsYWIvY2kvY3Rlc3RfYnVpbGQuY21ha2UKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQorCisuY21ha2VfdGVzdF9tYWNvczoKKyAgICBzdGFnZTogdGVzdAorCisgICAgc2NyaXB0OgorICAgICAgICAtICpiZWZvcmVfc2NyaXB0X21hY29zCisgICAgICAgIC0gY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X3Rlc3QuY21ha2UKKworICAgIGludGVycnVwdGlibGU6IHRydWUKKworLmNtYWtlX3Rlc3RfbWFjb3NfZXh0ZXJuYWw6CisgICAgc3RhZ2U6IHRlc3QtZXh0CisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfbWFjb3MKKyAgICAgICAgLSAuZ2l0bGFiL2NpL3NjY2FjaGUuc2gKKyAgICAgICAgIyBBbGxvdyB0aGUgc2VydmVyIHRvIGFscmVhZHkgYmUgcnVubmluZy4KKyAgICAgICAgLSAic2NjYWNoZSAtLXN0YXJ0LXNlcnZlciB8fCA6IgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisgICAgICAgIC0gIiRMQVVOQ0hFUiBidWlsZC9pbnN0YWxsL0NNYWtlLmFwcC9Db250ZW50cy9iaW4vY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X3Rlc3RfZXh0ZXJuYWwuY21ha2UiCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKworICAgIGludGVycnVwdGlibGU6IHRydWUKZGlmZiAtLWdpdCBhLy5naXRsYWIvb3Mtd2luZG93cy55bWwgYi8uZ2l0bGFiL29zLXdpbmRvd3MueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMGEyMzIKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL29zLXdpbmRvd3MueW1sCkBAIC0wLDAgKzEsMTE2IEBACisjIFdpbmRvd3Mtc3BlY2lmaWMgYnVpbGRlciBjb25maWd1cmF0aW9ucyBhbmQgYnVpbGQgY29tbWFuZHMKKworIyMgQmFzZSBjb25maWd1cmF0aW9ucworCisud2luZG93czoKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIEdJVF9DTE9ORV9QQVRIOiAiJENJX0JVSUxEU19ESVJcXGNtYWtlIGNpIGV4dFxcJENJX0NPTkNVUlJFTlRfSUQiCisKKyMjIyBCdWlsZCBhbmQgdGVzdAorCisud2luZG93c19idWlsZDoKKyAgICBleHRlbmRzOiAud2luZG93cworCisgICAgdmFyaWFibGVzOgorICAgICAgICAjIE5vdGUgdGhhdCBzaGVsbCBydW5uZXJzIG9ubHkgc3VwcG9ydCBydW5uZXJzIHdpdGggYSBzaW5nbGUKKyAgICAgICAgIyBjb25jdXJyZW5jeSBsZXZlbC4gV2UgY2FuJ3QgdXNlIGAkQ0lfQ09OQ1VSUkVOQ1lfSURgIGJlY2F1c2UgdGhpcyBtYXkKKyAgICAgICAgIyBjaGFuZ2UgYmV0d2VlbiB0aGUgYnVpbGQgYW5kIHRlc3Qgc3RhZ2VzIHdoaWNoIENNYWtlIGRvZXNuJ3Qgc3VwcG9ydC4KKyAgICAgICAgIyBFdmVuIGlmIHdlIGNvdWxkLCBpdCBjb3VsZCBjaGFuZ2UgaWYgb3RoZXIgcnVubmVycyBvbiB0aGUgbWFjaGluZQorICAgICAgICAjIGNvdWxkIHJ1biBhdCB0aGUgc2FtZSB0aW1lLCBzbyB3ZSBkcm9wIGl0LgorICAgICAgICBHSVRfQ0xPTkVfUEFUSDogIiRDSV9CVUlMRFNfRElSXFxjbWFrZSBjaSIKKworLndpbmRvd3NfbmluamE6CisgICAgZXh0ZW5kczogLndpbmRvd3NfYnVpbGQKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgIyBEZWJ1ZyBhbmQgUmVsV2l0aERlYmluZm8gYnVpbGQgdHlwZXMgdXNlIHRoZSBgL1ppYCB3aGljaCByZXN1bHRzIGluCisgICAgICAgICMgdW5jYWNoZWFibGUgY29tcGlhdGlvbnMuCisgICAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc2NjYWNoZS9pc3N1ZXMvMjQyCisgICAgICAgIENNQUtFX0JVSUxEX1RZUEU6IFJlbGVhc2UKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorCisud2luZG93c192czIwMTlfeDY0X25pbmphOgorICAgIGV4dGVuZHM6IC53aW5kb3dzX25pbmphCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IHdpbmRvd3NfdnMyMDE5X3g2NF9uaW5qYQorICAgICAgICBWQ1ZBUlNBTEw6ICIke1ZTMTYwQ09NTlRPT0xTfVxcLi5cXC4uXFxWQ1xcQXV4aWxpYXJ5XFxCdWlsZFxcdmN2YXJzYWxsLmJhdCIKKyAgICAgICAgVkNWQVJTUExBVEZPUk06ICJ4NjQiCisgICAgICAgIFZDVkFSU1ZFUlNJT046ICIxNC4yNiIKKworIyMjIEV4dGVybmFsIHRlc3RpbmcKKworLndpbmRvd3NfdnMyMDE5X3g2NDoKKyAgICBleHRlbmRzOiAud2luZG93cworCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiB3aW5kb3dzX3ZzMjAxOV94NjQKKyAgICAgICAgQ01BS0VfR0VORVJBVE9SOiAiVmlzdWFsIFN0dWRpbyAxNiAyMDE5IgorICAgICAgICBDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk06ICJ4NjQiCisgICAgICAgIENNQUtFX0dFTkVSQVRPUl9UT09MU0VUOiAidjE0Mix2ZXJzaW9uPTE0LjI2IgorCisjIyBUYWdzCisKKy53aW5kb3dzX2J1aWxkZXJfdGFnczoKKyAgICB0YWdzOgorICAgICAgICAtIGNtYWtlICMgU2luY2UgdGhpcyBpcyBhIGJhcmUgcnVubmVyLCBwaW4gdG8gYSBwcm9qZWN0LgorICAgICAgICAtIHdpbmRvd3MKKyAgICAgICAgLSBzaGVsbAorICAgICAgICAtIHZzMjAxOQorICAgICAgICAtIG1zdmMtMTkuMjUKKyAgICAgICAgLSBub25jb25jdXJyZW50CisKKy53aW5kb3dzX2J1aWxkZXJfZXh0X3RhZ3M6CisgICAgdGFnczoKKyAgICAgICAgLSBjbWFrZSAjIFNpbmNlIHRoaXMgaXMgYSBiYXJlIHJ1bm5lciwgcGluIHRvIGEgcHJvamVjdC4KKyAgICAgICAgLSB3aW5kb3dzCisgICAgICAgIC0gc2hlbGwKKyAgICAgICAgLSB2czIwMTkKKyAgICAgICAgLSBtc3ZjLTE5LjI1CisgICAgICAgIC0gY29uY3VycmVudAorCisjIyBXaW5kb3dzLXNwZWNpZmljIHNjcmlwdHMKKworLmJlZm9yZV9zY3JpcHRfd2luZG93czogJmJlZm9yZV9zY3JpcHRfd2luZG93cworICAgIC0gSW52b2tlLUV4cHJlc3Npb24gLUNvbW1hbmQgLmdpdGxhYi9jaS9jbWFrZS5wczEKKyAgICAtIEludm9rZS1FeHByZXNzaW9uIC1Db21tYW5kIC5naXRsYWIvY2kvbmluamEucHMxCisgICAgLSAkcHdkcGF0aCA9ICRwd2QuUGF0aAorICAgIC0gU2V0LUl0ZW0gLUZvcmNlIC1QYXRoICJlbnY6UEFUSCIgLVZhbHVlICIkcHdkcGF0aFwuZ2l0bGFiOyRwd2RwYXRoXC5naXRsYWJcY21ha2VcYmluOyRlbnY6UEFUSCIKKyAgICAtIGNtYWtlIC0tdmVyc2lvbgorICAgIC0gbmluamEgLS12ZXJzaW9uCisgICAgLSBjbWFrZSAtUCAuZ2l0bGFiL2NpL2Rvd25sb2FkX3F0LmNtYWtlCisgICAgLSBTZXQtSXRlbSAtRm9yY2UgLVBhdGggImVudjpQQVRIIiAtVmFsdWUgIiRwd2RwYXRoXC5naXRsYWJccXRcYmluOyRlbnY6UEFUSCIKKworLmNtYWtlX2J1aWxkX3dpbmRvd3M6CisgICAgc3RhZ2U6IGJ1aWxkCisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfd2luZG93cworICAgICAgICAtIFNldC1JdGVtIC1Gb3JjZSAtUGF0aCAiZW52OlBBVEgiIC1WYWx1ZSAiJGVudjpQQVRIOyRlbnY6U0NDQUNIRV9QQVRIIgorICAgICAgICAtIEludm9rZS1FeHByZXNzaW9uIC1Db21tYW5kIC5naXRsYWIvY2kvdmN2YXJzYWxsLnBzMQorICAgICAgICAtIHNjY2FjaGUgLS1zdGFydC1zZXJ2ZXIKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworICAgICAgICAtIGN0ZXN0IC1WViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X2NvbmZpZ3VyZS5jbWFrZQorICAgICAgICAtIGN0ZXN0IC1WViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X2J1aWxkLmNtYWtlCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKyAgICAgICAgLSBzY2NhY2hlIC0tc3RvcC1zZXJ2ZXIKKworICAgIGludGVycnVwdGlibGU6IHRydWUKKworLmNtYWtlX3Rlc3Rfd2luZG93czoKKyAgICBzdGFnZTogdGVzdAorCisgICAgc2NyaXB0OgorICAgICAgICAtICpiZWZvcmVfc2NyaXB0X3dpbmRvd3MKKyAgICAgICAgLSBJbnZva2UtRXhwcmVzc2lvbiAtQ29tbWFuZCAuZ2l0bGFiL2NpL3ZjdmFyc2FsbC5wczEKKyAgICAgICAgLSBjdGVzdCAtLW91dHB1dC1vbi1mYWlsdXJlIC1WIC1TIC5naXRsYWIvY2kvY3Rlc3RfdGVzdC5jbWFrZQorCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQorCisuY21ha2VfdGVzdF93aW5kb3dzX2V4dGVybmFsOgorICAgIHN0YWdlOiB0ZXN0LWV4dAorCisgICAgc2NyaXB0OgorICAgICAgICAtIGJ1aWxkL2luc3RhbGwvYmluL2N0ZXN0IC0tb3V0cHV0LW9uLWZhaWx1cmUgLVYgLVMgLmdpdGxhYi9jaS9jdGVzdF90ZXN0X2V4dGVybmFsLmNtYWtlCisKKyAgICBpbnRlcnJ1cHRpYmxlOiB0cnVlCmRpZmYgLS1naXQgYS8uZ2l0bGFiL3J1bGVzLnltbCBiLy5naXRsYWIvcnVsZXMueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Yjk1YzgKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL3J1bGVzLnltbApAQCAtMCwwICsxLDE4IEBACisjIFJ1bGVzIGZvciB3aGVyZSBqb2JzIGNhbiBydW4KKworLnJ1bl9tYW51YWxseToKKyAgICBydWxlczoKKyAgICAgICAgLSBpZjogJyRDSV9QUk9KRUNUX1BBVEggPT0gImNtYWtlL2NtYWtlIicKKyAgICAgICAgICB3aGVuOiBkZWxheWVkCisgICAgICAgICAgc3RhcnRfaW46IDUgbWludXRlcworICAgICAgICAtIGlmOiAnJENJX01FUkdFX1JFUVVFU1RfSUQnCisgICAgICAgICAgd2hlbjogbWFudWFsCisgICAgICAgIC0gd2hlbjogbmV2ZXIKKworLnJ1bl9hdXRvbWF0aWNhbGx5OgorICAgIHJ1bGVzOgorICAgICAgICAtIGlmOiAnJENJX1BST0pFQ1RfUEFUSCA9PSAiY21ha2UvY21ha2UiJworICAgICAgICAgIHdoZW46IGFsd2F5cworICAgICAgICAtIGlmOiAnJENJX01FUkdFX1JFUVVFU1RfSUQnCisgICAgICAgICAgd2hlbjogYWx3YXlzCisgICAgICAgIC0gd2hlbjogbmV2ZXIKZGlmZiAtLWdpdCBhL0F1eGlsaWFyeS9DTWFrZUxpc3RzLnR4dCBiL0F1eGlsaWFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCA1M2NmMmM1Li5hODMzYzc5IDEwMDY0NAotLS0gYS9BdXhpbGlhcnkvQ01ha2VMaXN0cy50eHQKKysrIGIvQXV4aWxpYXJ5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsNCBAQAotaW5zdGFsbChESVJFQ1RPUlkgdmltL2luZGVudCB2aW0vc3ludGF4IERFU1RJTkFUSU9OICR7Q01BS0VfREFUQV9ESVJ9L2VkaXRvcnMvdmltKQotaW5zdGFsbChGSUxFUyBjbWFrZS1tb2RlLmVsIERFU1RJTkFUSU9OICR7Q01BS0VfREFUQV9ESVJ9L2VkaXRvcnMvZW1hY3MpCitpbnN0YWxsKERJUkVDVE9SWSB2aW0vaW5kZW50IHZpbS9zeW50YXggREVTVElOQVRJT04gJHtDTUFLRV9YREdEQVRBX0RJUn0vdmltL3ZpbWZpbGVzKQoraW5zdGFsbChGSUxFUyBjbWFrZS1tb2RlLmVsIERFU1RJTkFUSU9OICR7Q01BS0VfWERHREFUQV9ESVJ9L2VtYWNzL3NpdGUtbGlzcCkKIGluc3RhbGwoRklMRVMgY21ha2UubTQgREVTVElOQVRJT04gJHtDTUFLRV9YREdEQVRBX0RJUn0vYWNsb2NhbCkKIGFkZF9zdWJkaXJlY3RvcnkgKGJhc2gtY29tcGxldGlvbikKZGlmZiAtLWdpdCBhL0F1eGlsaWFyeS9iYXNoLWNvbXBsZXRpb24vQ01ha2VMaXN0cy50eHQgYi9BdXhpbGlhcnkvYmFzaC1jb21wbGV0aW9uL0NNYWtlTGlzdHMudHh0CmluZGV4IGMwYTg4OTkuLjA2ZDIyYzIgMTAwNjQ0Ci0tLSBhL0F1eGlsaWFyeS9iYXNoLWNvbXBsZXRpb24vQ01ha2VMaXN0cy50eHQKKysrIGIvQXV4aWxpYXJ5L2Jhc2gtY29tcGxldGlvbi9DTWFrZUxpc3RzLnR4dApAQCAtMSw4ICsxLDE2IEBACi0jIEFsd2F5cyBpbnN0YWxsIGNvbXBsZXRpb24gZmlsZSBpbiBsb2NhbCBkaXIKLSMgaW4gb3JkZXIgdG8gYmUgc3VyZSB0byBhbHdheXMgYmUgYWJsZSB0byBpbnN0YWxsCi0jIGluIGEgbG9jYWwgdXNlciBkaXJlY3Rvcnkgcm9vdGVkIGluIGEgc2luZ2xlIGRpcmVjdG9yeS4KLSMgcGFja2FnZXIgc2hvdWxkIGVpdGhlciBwYXRjaCB0aGF0IG91dCBvcgotIyBhZGQgc3ltbGlua3MgdG8gdGhlIGZpbGVzIGluIGFwcHJvcHJpYXRlIHBsYWNlcwotIyAgL2V0Yy9iYXNoX2NvbXBsZXRpb24uZC8KLSMgIERBVEFESVIvY29tcGxldGlvbnMgKG1heSBiZSAvdXNyL3NoYXJlLzxwYWNrYWdlPi9jb21wbGV0aW9ucwotaW5zdGFsbChGSUxFUyBjbWFrZSBjcGFjayBjdGVzdCBERVNUSU5BVElPTiAke0NNQUtFX0RBVEFfRElSfS9jb21wbGV0aW9ucykKKyMgV2UgbmVlZCB0byBpbnRlZ3JhdGUgaW50byB0aGUgc3lzdGVtIGluc3RhbGwsIG9yIHRoaXMgd2lsbCBzaWxlbnRseSBmYWlsIHRvCisjIGFjY29tcGxpc2ggYW55dGhpbmcgYXQgYWxsLCBhbmQgcGFja2FnZXJzIHdvbid0IGV2ZW4ga25vdyBpdCBleGlzdHMuIFVzZSB0aGUKKyMgYDxzaGFyZWRpcj4vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL2AgaGllcmFyY2h5IGJ5IGRlZmF1bHQsIHJvb3RlZCBpbgorIyBDTWFrZSdzIFhER0RBVEFfRElSIGRlZmluaXRpb24gb2YgdGhlIHNoYXJlZGlyLiBUaGlzIHdvcmtzIHdpdGggaW5zdGFsbGF0aW9uCisjIHRvIGAvdXNyYCBvciBgL3Vzci9sb2NhbGAgKG9yIGFueSBwcmVmaXggd2hpY2ggYmFzaC1jb21wbGV0aW9uIGlzIGNvbmZpZ3VyZWQKKyMgd2l0aCkgYXMgd2VsbCBhcyBhIHNpbXBsZSBpbnN0YWxsYXRpb24gYnkgYSBsb2NhbCB1c2VyIGludG8gdGhlaXIgaG9tZQorIyBkaXJlY3RvcnkgKmlmKiB0aGUgcHJlZml4IGlzIGAkSE9NRS8ubG9jYWxgIHNpbmNlIGAubG9jYWwvc2hhcmUvYCBpcyBwYXJ0IG9mCisjIHRoZSBiYXNoLWNvbXBsZXRpb24gc2VhcmNoIHBhdGggdG9vLgorIyBGb3IgbW9yZSBjb21wbGV4IGluc3RhbGxhdGlvbnMsIHBhY2thZ2VycyBjYW4gc2V0IENNQUtFX0JBU0hfQ09NUF9ESVIgdG8KKyMgYW5vdGhlciBzeXN0ZW0gbG9jYXRpb24uCisKK3NldChDTUFLRV9CQVNIX0NPTVBfRElSX0RFRkFVTFQgJHtDTUFLRV9YREdEQVRBX0RJUn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zKQoraWYgKE5PVCBDTUFLRV9CQVNIX0NPTVBfRElSKQorICBzZXQoQ01BS0VfQkFTSF9DT01QX0RJUiAiJHtDTUFLRV9CQVNIX0NPTVBfRElSX0RFRkFVTFR9IikKK2VuZGlmKCkKK2luc3RhbGwoRklMRVMgY21ha2UgY3BhY2sgY3Rlc3QgREVTVElOQVRJT04gJHtDTUFLRV9CQVNIX0NPTVBfRElSfSkKZGlmZiAtLWdpdCBhL0F1eGlsaWFyeS92aW0vc3ludGF4L2NtYWtlLnZpbSBiL0F1eGlsaWFyeS92aW0vc3ludGF4L2NtYWtlLnZpbQppbmRleCAwNjc2ZjdlLi4yZDYzZWIwIDEwMDY0NAotLS0gYS9BdXhpbGlhcnkvdmltL3N5bnRheC9jbWFrZS52aW0KKysrIGIvQXV4aWxpYXJ5L3ZpbS9zeW50YXgvY21ha2UudmltCkBAIC0xNzAsNiArMTcwLDcgQEAKICAgICAgICAgICAgIFwgRlJBTUVXT1JLX1ZFUlNJT04KICAgICAgICAgICAgIFwgRm9ydHJhbl9GT1JNQVQKICAgICAgICAgICAgIFwgRm9ydHJhbl9NT0RVTEVfRElSRUNUT1JZCisgICAgICAgICAgICBcIEZvcnRyYW5fUFJFUFJPQ0VTUwogICAgICAgICAgICAgXCBHRU5FUkFURUQKICAgICAgICAgICAgIFwgR0VORVJBVE9SX0ZJTEVfTkFNRQogICAgICAgICAgICAgXCBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHCkBAIC0xMDE5LDYgKzEwMjAsNyBAQAogICAgICAgICAgICAgXCBDTUFLRV9Gb3J0cmFuX01PRFVMRV9ESVJFQ1RPUlkKICAgICAgICAgICAgIFwgQ01BS0VfRm9ydHJhbl9PVVRQVVRfRVhURU5TSU9OCiAgICAgICAgICAgICBcIENNQUtFX0ZvcnRyYW5fUExBVEZPUk1fSUQKKyAgICAgICAgICAgIFwgQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTCiAgICAgICAgICAgICBcIENNQUtFX0ZvcnRyYW5fU0lNVUxBVEVfSUQKICAgICAgICAgICAgIFwgQ01BS0VfRm9ydHJhbl9TSU1VTEFURV9WRVJTSU9OCiAgICAgICAgICAgICBcIENNQUtFX0ZvcnRyYW5fU0laRU9GX0RBVEFfUFRSCmRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CmluZGV4IDBkNmEzOGMuLjJkODYwZDQgMTAwNjQ0Ci0tLSBhL0NNYWtlTGlzdHMudHh0CisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC0zNyw3ICszNyw3IEBACiAgIGlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJIUC1VWCIpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUgogICAgICAgIkNNYWtlIG5vIGxvbmdlciBjb21waWxlcyBvbiBIUC1VWC4gIFNlZVxuIgotICAgICAgIiAgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE3MTM3XG4iCisgICAgICAiICBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xNzEzN1xuIgogICAgICAgIlVzZSBDTWFrZSAzLjkgb3IgbG93ZXIgaW5zdGVhZC4iCiAgICAgICApCiAgIGVuZGlmKCkKQEAgLTEwOCw2ICsxMDgsMTEgQEAKICAgZW5kaWYoKQogZW5kaWYoKQogCisjIEluZm9ybSBTVEwgbGlicmFyeSBoZWFkZXIgd3JhcHBlcnMgd2hldGhlciB0byB1c2Ugc3lzdGVtIHZlcnNpb25zLgorY29uZmlndXJlX2ZpbGUoJHtDTWFrZV9TT1VSQ0VfRElSfS9VdGlsaXRpZXMvc3RkL2NtU1RMLmh4eC5pbgorICAke0NNYWtlX0JJTkFSWV9ESVJ9L1V0aWxpdGllcy9jbVNUTC5oeHgKKyAgQE9OTFkpCisKICMgc2V0IHRoZSBpbnRlcm5hbCBlbmNvZGluZyBvZiBDTWFrZSB0byBVVEYtOAogc2V0KEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0UgQ1BfVVRGOCkKIApAQCAtMTU0LDcgKzE1OSw3IEBACiAKICAgIyBBbGxvdyB0aGUgdXNlciB0byBlbmFibGUvZGlzYWJsZSBhbGwgc3lzdGVtIHV0aWxpdHkgbGlicmFyeSBvcHRpb25zIGJ5CiAgICMgZGVmaW5pbmcgQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJJRVMgb3IgQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZXyR7dXRpbH0uCi0gIHNldChVVElMSVRJRVMgQlpJUDIgQ1VSTCBFWFBBVCBGT1JNIEpTT05DUFAgTElCQVJDSElWRSBMSUJMWk1BIExJQlJIQVNIIExJQlVWIFpMSUIgWlNURCkKKyAgc2V0KFVUSUxJVElFUyBCWklQMiBDVVJMIEVYUEFUIEZPUk0gSlNPTkNQUCBMSUJBUkNISVZFIExJQkxaTUEgTElCUkhBU0ggTElCVVYgTkdIVFRQMiBaTElCIFpTVEQpCiAgIGZvcmVhY2godXRpbCAke1VUSUxJVElFU30pCiAgICAgaWYoTk9UIERFRklORUQgQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZXyR7dXRpbH0KICAgICAgICAgQU5EIERFRklORUQgQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJJRVMpCkBAIC0xOTIsNiArMTk3LDggQEAKICAgICAiJHtDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfWlNURH0iICJOT1QgQ01BS0VfVVNFX1NZU1RFTV9MSUJBUkNISVZFIiBPTikKICAgQ01BS0VfREVQRU5ERU5UX09QVElPTihDTUFLRV9VU0VfU1lTVEVNX0xJQkxaTUEgIlVzZSBzeXN0ZW0taW5zdGFsbGVkIGxpYmx6bWEiCiAgICAgIiR7Q01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkxaTUF9IiAiTk9UIENNQUtFX1VTRV9TWVNURU1fTElCQVJDSElWRSIgT04pCisgIENNQUtFX0RFUEVOREVOVF9PUFRJT04oQ01BS0VfVVNFX1NZU1RFTV9OR0hUVFAyICJVc2Ugc3lzdGVtLWluc3RhbGxlZCBuZ2h0dHAyIgorICAgICIke0NNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9OR0hUVFAyfSIgIk5PVCBDTUFLRV9VU0VfU1lTVEVNX0NVUkwiIE9OKQogICBvcHRpb24oQ01BS0VfVVNFX1NZU1RFTV9GT1JNICJVc2Ugc3lzdGVtLWluc3RhbGxlZCBsaWJmb3JtIiAiJHtDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfRk9STX0iKQogICBvcHRpb24oQ01BS0VfVVNFX1NZU1RFTV9KU09OQ1BQICJVc2Ugc3lzdGVtLWluc3RhbGxlZCBqc29uY3BwIiAiJHtDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfSlNPTkNQUH0iKQogICBvcHRpb24oQ01BS0VfVVNFX1NZU1RFTV9MSUJSSEFTSCAiVXNlIHN5c3RlbS1pbnN0YWxsZWQgbGlicmhhc2giICIke0NNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJSSEFTSH0iKQpAQCAtMzM1LDYgKzM0Miw5IEBACiBtYWNybyAoQ01BS0VfQlVJTERfVVRJTElUSUVTKQogICBmaW5kX3BhY2thZ2UoVGhyZWFkcykKIAorICAjIFN1cHByZXNzIHVubmVjZXNzYXJ5IGNoZWNrcyBpbiB0aGlyZC1wYXJ0eSBjb2RlLgorICBpbmNsdWRlKFV0aWxpdGllcy9jbVRoaXJkUGFydHlDaGVja3MuY21ha2UpCisKICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAjIENyZWF0ZSB0aGUga3dzeXMgbGlicmFyeSBmb3IgQ01ha2UuCiAgIHNldChLV1NZU19OQU1FU1BBQ0UgY21zeXMpCkBAIC0zNTEsNiArMzYxLDIxIEBACiAgIGlmKENNYWtlX05PX0NYWF9TVEFOREFSRCkKICAgICBzZXQoS1dTWVNfQ1hYX1NUQU5EQVJEICIiKQogICBlbmRpZigpCisgIGlmKFdJTjMyKQorICAgICMgRklYTUU6IFRlYWNoIEtXU3lzIHRvIGhhcmQtY29kZSB0aGVzZSBjaGVja3Mgb24gV2luZG93cy4KKyAgICBzZXQoS1dTWVNfQ19IQVNfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUNfQ09NUElMRUQgMCkKKyAgICBzZXQoS1dTWVNfQ19IQVNfUFRSRElGRl9UX0NPTVBJTEVEIDEpCisgICAgc2V0KEtXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSF9DT01QSUxFRCAxKQorICAgIHNldChLV1NZU19DWFhfSEFTX1JMSU1JVDY0X0NPTVBJTEVEIDApCisgICAgc2V0KEtXU1lTX0NYWF9IQVNfU0VURU5WX0NPTVBJTEVEIDApCisgICAgc2V0KEtXU1lTX0NYWF9IQVNfVU5TRVRFTlZfQ09NUElMRUQgMCkKKyAgICBzZXQoS1dTWVNfQ1hYX0hBU19VVElNRU5TQVRfQ09NUElMRUQgMCkKKyAgICBzZXQoS1dTWVNfQ1hYX0hBU19VVElNRVNfQ09NUElMRUQgMCkKKyAgICBzZXQoS1dTWVNfQ1hYX1NUQVRfSEFTX1NUX01USU1fQ09NUElMRUQgMCkKKyAgICBzZXQoS1dTWVNfQ1hYX1NUQVRfSEFTX1NUX01USU1FU1BFQ19DT01QSUxFRCAwKQorICAgIHNldChLV1NZU19TVExfSEFTX1dTVFJJTkdfQ09NUElMRUQgMSkKKyAgICBzZXQoS1dTWVNfU1lTX0hBU19JRkFERFJTX0ggMCkKKyAgZW5kaWYoKQogICBhZGRfc3ViZGlyZWN0b3J5KFNvdXJjZS9rd3N5cykKICAgc2V0KGt3c3lzX2ZvbGRlciAiVXRpbGl0aWVzL0tXU3lzIikKICAgQ01BS0VfU0VUX1RBUkdFVF9GT0xERVIoJHtLV1NZU19OQU1FU1BBQ0V9ICIke2t3c3lzX2ZvbGRlcn0iKQpAQCAtMzc0LDEwICszOTksMTMgQEAKICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAiJHtDTWFrZV9TT1VSQ0VfRElSfS9VdGlsaXRpZXMvc3RkIikKICAgZW5kaWYoKQogCi0gIGluY2x1ZGVfZGlyZWN0b3JpZXMoCi0gICAgJHtDTWFrZV9CSU5BUllfRElSfS9VdGlsaXRpZXMKLSAgICAke0NNYWtlX1NPVVJDRV9ESVJ9L1V0aWxpdGllcwotICAgICkKKyAgaW5jbHVkZV9kaXJlY3RvcmllcygiJHtDTWFrZV9CSU5BUllfRElSfS9VdGlsaXRpZXMiKQorICBpZiAoKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBSVgiIE9SIENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJPUzQwMCIpIEFORCBDTUFLRV9DWFhfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIpCisgICAgIyB1c2luZyAtaXN5c3RlbSBvcHRpb24gZ2VuZXJhdGUgZXJyb3IgInRlbXBsYXRlIHdpdGggQyBsaW5rYWdlIgorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoIiR7Q01ha2VfU09VUkNFX0RJUn0vVXRpbGl0aWVzIikKKyAgZWxzZSgpCisgICAgaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gIiR7Q01ha2VfU09VUkNFX0RJUn0vVXRpbGl0aWVzIikKKyAgZW5kaWYoKQogCiAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIyBCdWlsZCBDTWFrZSBzdGQgbGlicmFyeSBmb3IgQ01ha2UgYW5kIENUZXN0LgpAQCAtNDMwLDYgKzQ1OCwxMyBAQAogICBlbHNlKCkKICAgICBzZXQoQ01BS0VfWkxJQl9JTkNMVURFUyAke0NNYWtlX1NPVVJDRV9ESVJ9L1V0aWxpdGllcykKICAgICBzZXQoQ01BS0VfWkxJQl9MSUJSQVJJRVMgY216bGliKQorICAgIHNldChXSVRIT1VUX1pMSUJfRExMICIiKQorICAgIHNldChXSVRIT1VUX1pMSUJfRExMX1dJVEhfTElCIGNtemxpYikKKyAgICBzZXQoWkxJQl9ETEwgIiIpCisgICAgc2V0KFpMSUJfRExMX1dJVEhfTElCIGNtemxpYikKKyAgICBzZXQoWkxJQl9XSU5BUEkgIiIpCisgICAgc2V0KFpMSUJfV0lOQVBJX0NPTVBJTEVEIDApCisgICAgc2V0KFpMSUJfV0lOQVBJX1dJVEhfTElCIGNtemxpYikKICAgICBhZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcy9jbXpsaWIpCiAgICAgQ01BS0VfU0VUX1RBUkdFVF9GT0xERVIoY216bGliICJVdGlsaXRpZXMvM3JkUGFydHkiKQogICBlbmRpZigpCkBAIC00NjUsOSArNTAwLDE5IEBACiAgICAgICBzZXQoQ1VSTF9DQV9QQVRIICIiIENBQ0hFIFBBVEggIlBhdGggdG8gU1NMIENBIENlcnRpZmljYXRlIERpcmVjdG9yeSIpCiAgICAgICBtYXJrX2FzX2FkdmFuY2VkKENVUkxfQ0FfQlVORExFIENVUkxfQ0FfUEFUSCkKICAgICBlbmRpZigpCisgICAgaWYoTk9UIENNQUtFX1VTRV9TWVNURU1fTkdIVFRQMikKKyAgICAgICMgVGVsbCBjdXJsJ3MgRmluZE5HSFRUUDIgbW9kdWxlIHRvIHVzZSBvdXIgbGlicmFyeS4KKyAgICAgIHNldChOR0hUVFAyX0xJQlJBUlkgY21uZ2h0dHAyKQorICAgICAgc2V0KE5HSFRUUDJfSU5DTFVERV9ESVIgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1V0aWxpdGllcy9jbW5naHR0cDIvbGliL2luY2x1ZGVzKQorICAgIGVuZGlmKCkKICAgICBhZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcy9jbWN1cmwpCiAgICAgQ01BS0VfU0VUX1RBUkdFVF9GT0xERVIoY21jdXJsICJVdGlsaXRpZXMvM3JkUGFydHkiKQogICAgIENNQUtFX1NFVF9UQVJHRVRfRk9MREVSKExJQkNVUkwgIlV0aWxpdGllcy8zcmRQYXJ0eSIpCisgICAgaWYoTk9UIENNQUtFX1VTRV9TWVNURU1fTkdIVFRQMikKKyAgICAgICMgQ29uZmlndXJlIGFmdGVyIGN1cmwgdG8gcmUtdXNlIHNvbWUgY2hlY2sgcmVzdWx0cy4KKyAgICAgIGFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzL2NtbmdodHRwMikKKyAgICAgIENNQUtFX1NFVF9UQVJHRVRfRk9MREVSKGNtbmdodHRwMiAiVXRpbGl0aWVzLzNyZFBhcnR5IikKKyAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAogICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00OTYsNiArNTQxLDExIEBACiAgICAgICBzZXQoQlpJUDJfSU5DTFVERV9ESVIKICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VdGlsaXRpZXMvY21iemlwMiIpCiAgICAgICBzZXQoQlpJUDJfTElCUkFSSUVTIGNtYnppcDIpCisgICAgICBzZXQoQlpJUDJfTkVFRF9QUkVGSVggIiIpCisgICAgICBzZXQoVVNFX0JaSVAyX0RMTCAiIikKKyAgICAgIHNldChVU0VfQlpJUDJfRExMX1dJVEhfTElCIGNtYnppcDIpCisgICAgICBzZXQoVVNFX0JaSVAyX1NUQVRJQyAiIikKKyAgICAgIHNldChVU0VfQlpJUDJfU1RBVElDX1dJVEhfTElCIGNtYnppcDIpCiAgICAgICBhZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcy9jbWJ6aXAyKQogICAgICAgQ01BS0VfU0VUX1RBUkdFVF9GT0xERVIoY21iemlwMiAiVXRpbGl0aWVzLzNyZFBhcnR5IikKICAgICBlbmRpZigpCkBAIC01NDcsMjEgKzU5NywyNSBAQAogICAgIHNldChaTElCX0lOQ0xVREVfRElSICR7Q01BS0VfWkxJQl9JTkNMVURFU30pCiAgICAgc2V0KFpMSUJfTElCUkFSWSAke0NNQUtFX1pMSUJfTElCUkFSSUVTfSkKICAgICBhZGRfZGVmaW5pdGlvbnMoLURMSUJBUkNISVZFX1NUQVRJQykKKyAgICBzZXQoRU5BQkxFX01CRURUTFMgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdXNlIG9mIG1iZWQgVExTIikKICAgICBzZXQoRU5BQkxFX05FVFRMRSBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB1c2Ugb2YgTmV0dGxlIikKICAgICBzZXQoRU5BQkxFX09QRU5TU0wgJHtDTUFLRV9VU0VfT1BFTlNTTH0gQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB1c2Ugb2YgT3BlblNTTCIpCisgICAgc2V0KEVOQUJMRV9MSUJCMiBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTElCQjIgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9MWk1BIE9OIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIExaTUEgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9MWjQgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIExaNCBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xaTyBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFpPIGxpYnJhcnkgaWYgZm91bmQiKQogICAgIHNldChFTkFCTEVfWkxJQiBPTiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBaTElCIGxpYnJhcnkgaWYgZm91bmQiKQogICAgIHNldChFTkFCTEVfQlppcDIgT04gQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gQlppcDIgbGlicmFyeSBpZiBmb3VuZCIpCisgICAgc2V0KEVOQUJMRV9aU1REIE9OIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIHpzdGQgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9MSUJYTUwyIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBsaWJ4bWwyIGxpYnJhcnkgaWYgZm91bmQiKQotICAgIHNldChFTkFCTEVfRVhQQVQgT04gQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gRVhQQVQgbGlicmFyeSBpZiBmb3VuZCIpCisgICAgc2V0KEVOQUJMRV9FWFBBVCBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gRVhQQVQgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9QQ1JFUE9TSVggT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIFBDUkVQT1NJWCBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xpYkdDQyBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTGliR0NDIGxpYnJhcnkgaWYgZm91bmQiKQogICAgIHNldChFTkFCTEVfWEFUVFIgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgZXh0ZW5kZWQgYXR0cmlidXRlIHN1cHBvcnQiKQogICAgIHNldChFTkFCTEVfQUNMIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIEFDTCBzdXBwb3J0IikKICAgICBzZXQoRU5BQkxFX0lDT05WIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIGljb252IHN1cHBvcnQiKQogICAgIHNldChFTkFCTEVfQ05HIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgQ05HKENyeXB0byBOZXh0IEdlbmVyYXRpb24pIikKKyAgICBTRVQoUE9TSVhfUkVHRVhfTElCICIiIENBQ0hFIElOVEVSTkFMICJDaG9vc2Ugd2hhdCBsaWJyYXJ5IHNob3VsZCBwcm92aWRlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IikKICAgICBhZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcy9jbWxpYmFyY2hpdmUpCiAgICAgQ01BS0VfU0VUX1RBUkdFVF9GT0xERVIoY21saWJhcmNoaXZlICJVdGlsaXRpZXMvM3JkUGFydHkiKQogICAgIHNldChDTUFLRV9UQVJfTElCUkFSSUVTIGNtbGliYXJjaGl2ZSAke0JaSVAyX0xJQlJBUklFU30pCkBAIC02NzcsMTAgKzczMSwxNSBAQAogICAgIGluY2x1ZGUoJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9DTWFrZUluc3RhbGwuY21ha2UpCiAgIGVuZGlmKCkKIAotICAjIG5vIGNsdWUgd2h5IHdlIGFyZSB0ZXN0aW5nIGZvciB0aGlzIGhlcmUKLSAgaW5jbHVkZShDaGVja1N5bWJvbEV4aXN0cykKLSAgQ0hFQ0tfU1lNQk9MX0VYSVNUUyh1bnNldGVudiAic3RkbGliLmgiIEhBVkVfVU5TRVRFTlYpCi0gIENIRUNLX1NZTUJPTF9FWElTVFMoZW52aXJvbiAic3RkbGliLmgiIEhBVkVfRU5WSVJPTl9OT1RfUkVRVUlSRV9QUk9UT1RZUEUpCisgICMgQ2hlY2tzIGZvciBjbVN5c3RlbVRvb2xzLgorICBpZihXSU4zMikKKyAgICBzZXQoSEFWRV9VTlNFVEVOViAwKQorICAgIHNldChIQVZFX0VOVklST05fTk9UX1JFUVVJUkVfUFJPVE9UWVBFIDEpCisgIGVsc2UoKQorICAgIGluY2x1ZGUoQ2hlY2tTeW1ib2xFeGlzdHMpCisgICAgQ0hFQ0tfU1lNQk9MX0VYSVNUUyh1bnNldGVudiAic3RkbGliLmgiIEhBVkVfVU5TRVRFTlYpCisgICAgQ0hFQ0tfU1lNQk9MX0VYSVNUUyhlbnZpcm9uICJzdGRsaWIuaCIgSEFWRV9FTlZJUk9OX05PVF9SRVFVSVJFX1BST1RPVFlQRSkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiAjIENNQUtFX1RFU1RTX0NEQVNIX1NFUlZFUjogQ0Rhc2ggc2VydmVyIHVzZWQgYnkgQ01ha2UvVGVzdHMuCmRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcucnN0IGIvQ09OVFJJQlVUSU5HLnJzdAppbmRleCA3OTgzYmUxLi4zMDA2MjE0IDEwMDY0NAotLS0gYS9DT05UUklCVVRJTkcucnN0CisrKyBiL0NPTlRSSUJVVElORy5yc3QKQEAgLTExLDExICsxMSwxMSBAQAogCiBDTWFrZSBpcyBtYWludGFpbmVkIGFuZCBzdXBwb3J0ZWQgYnkgYEtpdHdhcmVgXyBhbmQgZGV2ZWxvcGVkIGluCiBjb2xsYWJvcmF0aW9uIHdpdGggYSBwcm9kdWN0aXZlIGNvbW11bml0eSBvZiBjb250cmlidXRvcnMuCi1QbGVhc2Ugc3Vic2NyaWJlIGFuZCBwb3N0IHRvIHRoZSBgQ01ha2UgRGV2ZWxvcGVycyBMaXN0YF8gdG8gcmFpc2UKK1BsZWFzZSBwb3N0IHRvIHRoZSBgYERldmVsb3BtZW50YGAgY2F0ZWdvcnkgb2YgdGhlIGBDTWFrZSBGb3J1bWBfIHRvIHJhaXNlCiBkaXNjdXNzaW9uIG9mIGRldmVsb3BtZW50IHRvcGljcy4KIAogLi4gX2BLaXR3YXJlYDogaHR0cDovL3d3dy5raXR3YXJlLmNvbS9jbWFrZQotLi4gX2BDTWFrZSBEZXZlbG9wZXJzIExpc3RgOiBodHRwczovL2NtYWtlLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2NtYWtlLWRldmVsb3BlcnMKKy4uIF9gQ01ha2UgRm9ydW1gOiBodHRwczovL2Rpc2NvdXJzZS5jbWFrZS5vcmcKIAogUGF0Y2hlcwogPT09PT09PQpkaWZmIC0tZ2l0IGEvQ1Rlc3RDb25maWcuY21ha2UgYi9DVGVzdENvbmZpZy5jbWFrZQppbmRleCAwMjA1ODJlLi40NzZhMWM2IDEwMDY0NAotLS0gYS9DVGVzdENvbmZpZy5jbWFrZQorKysgYi9DVGVzdENvbmZpZy5jbWFrZQpAQCAtMSwxMCArMSwxNCBAQAogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgogCisjIElmIGNoYW5naW5nIHRoaXMgZmlsZSwgYWxzbyB1cGRhdGUgVXRpbGl0aWVzL1NwaGlueC9DVGVzdENvbmZpZy5jbWFrZQorCiBzZXQoQ1RFU1RfUFJPSkVDVF9OQU1FICJDTWFrZSIpCiBzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICIxOjAwOjAwIFVUQyIpCiAKLXNldChDVEVTVF9EUk9QX01FVEhPRCAiaHR0cCIpCitpZihOT1QgQ1RFU1RfRFJPUF9NRVRIT0QgU1RSRVFVQUwgImh0dHBzIikKKyAgc2V0KENURVNUX0RST1BfTUVUSE9EICJodHRwIikKK2VuZGlmKCkKIHNldChDVEVTVF9EUk9QX1NJVEUgIm9wZW4uY2Rhc2gub3JnIikKIHNldChDVEVTVF9EUk9QX0xPQ0FUSU9OICIvc3VibWl0LnBocD9wcm9qZWN0PUNNYWtlIikKIHNldChDVEVTVF9EUk9QX1NJVEVfQ0RBU0ggVFJVRSkKZGlmZiAtLWdpdCBhL0NUZXN0Q3VzdG9tLmNtYWtlLmluIGIvQ1Rlc3RDdXN0b20uY21ha2UuaW4KaW5kZXggZmI4ZTA5OS4uNGM4MjY3ZCAxMDA2NDQKLS0tIGEvQ1Rlc3RDdXN0b20uY21ha2UuaW4KKysrIGIvQ1Rlc3RDdXN0b20uY21ha2UuaW4KQEAgLTExLDYgKzExLDcgQEAKICAgIndhcm5pbmc6IFxcKExvbmcgZG91YmxlIHVzYWdlIGlzIHJlcG9ydGVkIG9ubHkgb25jZSBmb3IgZWFjaCBmaWxlIgogICAid2FybmluZzogVG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcgdXNlIgogICAiY291bGQgbm90IGJlIGlubGluZWQiCisgICJsaWJjbWV4cGF0LipoYXMgbm8gc3ltYm9scyIKICAgImxpYmNtY3VybC4qaGFzIG5vIHN5bWJvbHMiCiAgICJub3Qgc29ydGVkIHNsb3dlciBsaW5rIGVkaXRpbmcgd2lsbCByZXN1bHQiCiAgICJzdGxfZGVxdWUuaDo0NzkiCkBAIC02NCw2ICs2NSw3IEBACiAgICJsZDogd2FybmluZyAuKi9saWJnY2MuYSBhcmNoaXZlJ3MgY3B1dHlwZSIKICAgImxkOiB3YXJuaW5nOiBpZ25vcmluZyBmaWxlIC4qL2xpYmdjYy5hLCBmaWxlIHdhcyBidWlsdCBmb3IgYXJjaGl2ZSB3aGljaCBpcyBub3QgdGhlIGFyY2hpdGVjdHVyZSBiZWluZyBsaW5rZWQiCiAgICJsZDogd2FybmluZzogaW4gLiovbGliZ2NjLmEsIGZpbGUgaXMgbm90IG9mIHJlcXVpcmVkIGFyY2hpdGVjdHVyZSIKKyAgImxkOiB3YXJuaW5nOiBzeW1ib2wgLihkZWZsYXRlfGluZmxhdGUpX2NvcHlyaWdodC4gaGFzIGRpZmZlcmluZyBzaXplcyIgIyBzeXN0ZW0gbGlieiBhbmQgUXRDb3JlIGRpc2FncmVlCiAgICJ3YXJuaW5nLipUaGlzIHZlcnNpb24gb2YgTWFjIE9TIFggaXMgdW5zdXBwb3J0ZWQiCiAgICJjbGFuZy4qOiB3YXJuaW5nOiBhcmd1bWVudCB1bnVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uOiAuLWciCiAgICJub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8iICMgZGlhZ25vc3RpYyBjb250ZXh0IG5vdGUKQEAgLTgwLDcgKzgyLDcgQEAKICAgImNvbXBpbGF0aW9uIGNvbXBsZXRlZCB3aXRoIHdhcm5pbmdzIiAjIFBHSQogICAiWzAtOV0rIFdhcm5pbmdcXChzXFwpIGRldGVjdGVkIiAjIFN1blBybwogCi0jIHNjYW5idWlsZCBleGNlcHRpb25zCisgICMgc2NhbmJ1aWxkIGV4Y2VwdGlvbnMKICAgImNoYXJfdHJhaXRzLmg6Lio6IHdhcm5pbmc6IE51bGwgcG9pbnRlciBhcmd1bWVudCBpbiBjYWxsIHRvIHN0cmluZyBsZW5ndGggZnVuY3Rpb24iCiAgICJzdGxfY29uc3RydWN0Lmg6Lio6IHdhcm5pbmc6IEZvcm1pbmcgcmVmZXJlbmNlIHRvIG51bGwgcG9pbnRlciIKICAgIi4qc3RsX3VuaW5pdGlhbGl6ZWQuaDo3NToxOTogd2FybmluZzogRm9ybWluZyByZWZlcmVuY2UgdG8gbnVsbCBwb2ludGVyLioiCkBAIC05OSw2ICsxMDEsOSBAQAogICAibGlibHptYS9jb21tb24vaW5kZXhfZW5jb2Rlci5jOlswLTldKzpbMC05XSs6IHdhcm5pbmc6IFZhbHVlIHN0b3JlZCB0byAuKiBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uIGlzIG5ldmVyIHJlYWQiCiAgICJsaWJ1di9zcmMvLio6WzAtOV0rOlswLTldKzogd2FybmluZzogRGVyZWZlcmVuY2Ugb2YgbnVsbCBwb2ludGVyIgogICAibGlidXYvc3JjLy4qOlswLTldKzpbMC05XSs6IHdhcm5pbmc6IFRoZSBsZWZ0IG9wZXJhbmQgb2YgJz09JyBpcyBhIGdhcmJhZ2UgdmFsdWUiCisgICJsaWJ1di9zcmMvLio6WzAtOV0rOlswLTldKzogd2FybmluZzogMXN0IGZ1bmN0aW9uIGNhbGwgYXJndW1lbnQgaXMgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSIKKyAgIm5naHR0cDIvbGliLy4qOlswLTldKzpbMC05XSs6IHdhcm5pbmc6IERlcmVmZXJlbmNlIG9mIG51bGwgcG9pbnRlciIKKyAgIm5naHR0cDIvbGliLy4qOlswLTldKzpbMC05XSs6IHdhcm5pbmc6IFZhbHVlIHN0b3JlZCB0byAuKiBpcyBuZXZlciByZWFkIgogICApCiAKIGlmKE5PVCAiQENNQUtFX0dFTkVSQVRPUkAiIE1BVENIRVMgIlhjb2RlIikKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9ERVZJQ0VfTElOS19PUFRJT05TLnR4dCBiL0hlbHAvY29tbWFuZC9ERVZJQ0VfTElOS19PUFRJT05TLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjAyMjZmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9jb21tYW5kL0RFVklDRV9MSU5LX09QVElPTlMudHh0CkBAIC0wLDAgKzEsMTEgQEAKKworV2hlbiBhIGRldmljZSBsaW5rIHN0ZXAgaXMgaW52b2x2ZWQsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkKKzpwcm9wX3RndDpgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT05gIGFuZAorOnByb3BfdGd0OmBDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFNgIHByb3BlcnRpZXMgYW5kIHBvbGljeSA6cG9saWN5OmBDTVAwMTA1YCwKK3RoZSByYXcgb3B0aW9ucyB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgaG9zdCBhbmQgZGV2aWNlIGxpbmsgc3RlcHMgKHdyYXBwZWQgaW4KK2BgLVhjb21waWxlcmBgIG9yIGVxdWl2YWxlbnQgZm9yIGRldmljZSBsaW5rKS4gT3B0aW9ucyB3cmFwcGVkIHdpdGgKK2BgJDxERVZJQ0VfTElOSzouLi4+YGAKKzptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9uIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YCB3aWxsIGJlIHVzZWQKK29ubHkgZm9yIHRoZSBkZXZpY2UgbGluayBzdGVwLiBPcHRpb25zIHdyYXBwZWQgd2l0aCBgYCQ8SE9TVF9MSU5LOi4uLj5gYAorOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb24gPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIHdpbGwgYmUgdXNlZAorb25seSBmb3IgdGhlIGhvc3QgbGluayBzdGVwLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL0ZJTkRfWFhYLnR4dCBiL0hlbHAvY29tbWFuZC9GSU5EX1hYWC50eHQKaW5kZXggNDJiZjUyYi4uNGE2MmM1YiAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL0ZJTkRfWFhYLnR4dAorKysgYi9IZWxwL2NvbW1hbmQvRklORF9YWFgudHh0CkBAIC0xNSw2ICsxNSw3IEBACiAgICAgICAgICAgICAgW1BBVEhTIHBhdGgxIFtwYXRoMiAuLi4gRU5WIHZhcl1dCiAgICAgICAgICAgICAgW1BBVEhfU1VGRklYRVMgc3VmZml4MSBbc3VmZml4MiAuLi5dXQogICAgICAgICAgICAgIFtET0MgImNhY2hlIGRvY3VtZW50YXRpb24gc3RyaW5nIl0KKyAgICAgICAgICAgICBbUkVRVUlSRURdCiAgICAgICAgICAgICAgW05PX0RFRkFVTFRfUEFUSF0KICAgICAgICAgICAgICBbTk9fUEFDS0FHRV9ST09UX1BBVEhdCiAgICAgICAgICAgICAgW05PX0NNQUtFX1BBVEhdCkBAIC0zMSw4ICszMiw5IEBACiBvZiB0aGlzIGNvbW1hbmQuCiBJZiB0aGUgfFNFQVJDSF9YWFh8IGlzIGZvdW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJsZQogYW5kIHRoZSBzZWFyY2ggd2lsbCBub3QgYmUgcmVwZWF0ZWQgdW5sZXNzIHRoZSB2YXJpYWJsZSBpcyBjbGVhcmVkLgotSWYgbm90aGluZyBpcyBmb3VuZCwgdGhlIHJlc3VsdCB3aWxsIGJlCi1gYDxWQVI+LU5PVEZPVU5EYGAsIGFuZCB0aGUgc2VhcmNoIHdpbGwgYmUgYXR0ZW1wdGVkIGFnYWluIHRoZQorSWYgbm90aGluZyBpcyBmb3VuZCwgdGhlIHJlc3VsdCB3aWxsIGJlIGBgPFZBUj4tTk9URk9VTkRgYC4KK1RoZSBgYFJFUVVJUkVEYGAgb3B0aW9uIHN0b3BzIHByb2Nlc3Npbmcgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIG5vdGhpbmcKK2lzIGZvdW5kLCBvdGhlcndpc2UgdGhlIHNlYXJjaCB3aWxsIGJlIGF0dGVtcHRlZCBhZ2FpbiB0aGUKIG5leHQgdGltZSB8RklORF9YWFh8IGlzIGludm9rZWQgd2l0aCB0aGUgc2FtZSB2YXJpYWJsZS4KIAogT3B0aW9ucyBpbmNsdWRlOgpAQCAtNTcsNiArNTksOSBAQAogYGBET0NgYAogICBTcGVjaWZ5IHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBmb3IgdGhlIGBgPFZBUj5gYCBjYWNoZSBlbnRyeS4KIAorYGBSRVFVSVJFRGBgCisgIFN0b3AgcHJvY2Vzc2luZyB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaWYgbm90aGluZyBpcyBmb3VuZC4KKwogSWYgYGBOT19ERUZBVUxUX1BBVEhgYCBpcyBzcGVjaWZpZWQsIHRoZW4gbm8gYWRkaXRpb25hbCBwYXRocyBhcmUKIGFkZGVkIHRvIHRoZSBzZWFyY2guCiBJZiBgYE5PX0RFRkFVTFRfUEFUSGBgIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzZWFyY2ggcHJvY2VzcyBpcyBhcyBmb2xsb3dzOgpAQCAtMTM4LDYgKzE0MywxMCBAQAogICAgKiB8Q01BS0VfU1lTVEVNX1hYWF9QQVRIfAogICAgKiB8Q01BS0VfU1lTVEVNX1hYWF9NQUNfUEFUSHwKIAorICAgVGhlIHBsYXRmb3JtIHBhdGhzIHRoYXQgdGhlc2UgdmFyaWFibGVzIGNvbnRhaW4gYXJlIGxvY2F0aW9ucyB0aGF0CisgICB0eXBpY2FsbHkgaW5jbHVkZSBpbnN0YWxsZWQgc29mdHdhcmUuIEFuIGV4YW1wbGUgYmVpbmcgYGAvdXNyL2xvY2FsYGAgZm9yCisgICBVTklYIGJhc2VkIHBsYXRmb3Jtcy4KKwogNy4gU2VhcmNoIHRoZSBwYXRocyBzcGVjaWZpZWQgYnkgdGhlIFBBVEhTIG9wdGlvbgogICAgb3IgaW4gdGhlIHNob3J0LWhhbmQgdmVyc2lvbiBvZiB0aGUgY29tbWFuZC4KICAgIFRoZXNlIGFyZSB0eXBpY2FsbHkgaGFyZC1jb2RlZCBndWVzc2VzLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2FkZF9jb21waWxlX2RlZmluaXRpb25zLnJzdCBiL0hlbHAvY29tbWFuZC9hZGRfY29tcGlsZV9kZWZpbml0aW9ucy5yc3QKaW5kZXggZTEwYWJhMC4uNDhlMzNiZSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2FkZF9jb21waWxlX2RlZmluaXRpb25zLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMucnN0CkBAIC0xLDYgKzEsOCBAQAogYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogQWRkIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgY29tcGlsYXRpb24gb2Ygc291cmNlIGZpbGVzLgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9hZGRfY29tcGlsZV9vcHRpb25zLnJzdCBiL0hlbHAvY29tbWFuZC9hZGRfY29tcGlsZV9vcHRpb25zLnJzdAppbmRleCA0MzgwNWMzLi4zNmY0MDNjIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvYWRkX2NvbXBpbGVfb3B0aW9ucy5yc3QKKysrIGIvSGVscC9jb21tYW5kL2FkZF9jb21waWxlX29wdGlvbnMucnN0CkBAIC00NiwzICs0Niw2IEBACiBhbmQgOmNvbW1hbmQ6YGluY2x1ZGVfZGlyZWN0b3JpZXNgLgogCiBUaGUgY29tbWFuZCA6Y29tbWFuZDpgdGFyZ2V0X2NvbXBpbGVfb3B0aW9uc2AgYWRkcyB0YXJnZXQtc3BlY2lmaWMgb3B0aW9ucy4KKworVGhlIHNvdXJjZSBmaWxlIHByb3BlcnR5IDpwcm9wX3NmOmBDT01QSUxFX09QVElPTlNgIGFkZHMgb3B0aW9ucyB0byBvbmUKK3NvdXJjZSBmaWxlLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2FkZF9leGVjdXRhYmxlLnJzdCBiL0hlbHAvY29tbWFuZC9hZGRfZXhlY3V0YWJsZS5yc3QKaW5kZXggMGE3ZDdlMS4uZTA3MzIyOCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2FkZF9leGVjdXRhYmxlLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvYWRkX2V4ZWN1dGFibGUucnN0CkBAIC0xLDggKzEsMTUgQEAKIGFkZF9leGVjdXRhYmxlCiAtLS0tLS0tLS0tLS0tLQogCisuLiBvbmx5OjogaHRtbAorCisgIC4uIGNvbnRlbnRzOjoKKwogQWRkIGFuIGV4ZWN1dGFibGUgdG8gdGhlIHByb2plY3QgdXNpbmcgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZXMuCiAKK05vcm1hbCBFeGVjdXRhYmxlcworXl5eXl5eXl5eXl5eXl5eXl5eCisKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCiAgIGFkZF9leGVjdXRhYmxlKDxuYW1lPiBbV0lOMzJdIFtNQUNPU1hfQlVORExFXQpAQCAtNDUsNyArNTIsOCBAQAogcHJlLXByb2Nlc3NlZCwgYW5kIHlvdSB3YW50IHRvIGhhdmUgdGhlIG9yaWdpbmFsIHNvdXJjZXMgcmVhY2hhYmxlIGZyb20KIHdpdGhpbiBJREUuCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbXBvcnRlZCBFeGVjdXRhYmxlcworXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKQEAgLTY1LDcgKzczLDggQEAKIHRoZSBtYWluIGV4ZWN1dGFibGUgZmlsZSBvbiBkaXNrLiAgU2VlIGRvY3VtZW50YXRpb24gb2YgdGhlIGBgSU1QT1JURURfKmBgCiBwcm9wZXJ0aWVzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWxpYXMgRXhlY3V0YWJsZXMKK15eXl5eXl5eXl5eXl5eXl5eCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCkBAIC03NCw4ICs4MywxMyBAQAogQ3JlYXRlcyBhbiA6cmVmOmBBbGlhcyBUYXJnZXQgPEFsaWFzIFRhcmdldHM+YCwgc3VjaCB0aGF0IGBgPG5hbWU+YGAgY2FuCiBiZSB1c2VkIHRvIHJlZmVyIHRvIGBgPHRhcmdldD5gYCBpbiBzdWJzZXF1ZW50IGNvbW1hbmRzLiAgVGhlIGBgPG5hbWU+YGAKIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgZ2VuZXJhdGVkIGJ1aWxkc3lzdGVtIGFzIGEgbWFrZSB0YXJnZXQuICBUaGUKLWBgPHRhcmdldD5gYCBtYXkgbm90IGJlIGEgbm9uLWBgR0xPQkFMYGAKLTpyZWY6YEltcG9ydGVkIFRhcmdldCA8SW1wb3J0ZWQgVGFyZ2V0cz5gIG9yIGFuIGBgQUxJQVNgYC4KK2BgPHRhcmdldD5gYCBtYXkgbm90IGJlIGFuIGBgQUxJQVNgYC4KKworQW4gYGBBTElBU2BgIHRvIGEgbm9uLWBgR0xPQkFMYGAgOnJlZjpgSW1wb3J0ZWQgVGFyZ2V0IDxJbXBvcnRlZCBUYXJnZXRzPmAKK2hhcyBzY29wZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBhbGlhcyBpcyBjcmVhdGVkIGFuZCBiZWxvdy4KK1RoZSA6cHJvcF90Z3Q6YEFMSUFTX0dMT0JBTGAgdGFyZ2V0IHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZQorYWxpYXMgaXMgZ2xvYmFsIG9yIG5vdC4KKwogYGBBTElBU2BgIHRhcmdldHMgY2FuIGJlIHVzZWQgYXMgdGFyZ2V0cyB0byByZWFkIHByb3BlcnRpZXMKIGZyb20sIGV4ZWN1dGFibGVzIGZvciBjdXN0b20gY29tbWFuZHMgYW5kIGN1c3RvbSB0YXJnZXRzLiAgVGhleSBjYW4gYWxzbyBiZQogdGVzdGVkIGZvciBleGlzdGVuY2Ugd2l0aCB0aGUgcmVndWxhciA6Y29tbWFuZDpgaWYoVEFSR0VUKWAgc3ViY29tbWFuZC4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9hZGRfbGlicmFyeS5yc3QgYi9IZWxwL2NvbW1hbmQvYWRkX2xpYnJhcnkucnN0CmluZGV4IDcyNzRlNDQuLjAxYzQxNWEgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9hZGRfbGlicmFyeS5yc3QKKysrIGIvSGVscC9jb21tYW5kL2FkZF9saWJyYXJ5LnJzdApAQCAtMTM5LDggKzEzOSwxMyBAQAogQ3JlYXRlcyBhbiA6cmVmOmBBbGlhcyBUYXJnZXQgPEFsaWFzIFRhcmdldHM+YCwgc3VjaCB0aGF0IGBgPG5hbWU+YGAgY2FuIGJlCiB1c2VkIHRvIHJlZmVyIHRvIGBgPHRhcmdldD5gYCBpbiBzdWJzZXF1ZW50IGNvbW1hbmRzLiAgVGhlIGBgPG5hbWU+YGAgZG9lcwogbm90IGFwcGVhciBpbiB0aGUgZ2VuZXJhdGVkIGJ1aWxkc3lzdGVtIGFzIGEgbWFrZSB0YXJnZXQuICBUaGUgYGA8dGFyZ2V0PmBgCi1tYXkgbm90IGJlIGEgbm9uLWBgR0xPQkFMYGAgOnJlZjpgSW1wb3J0ZWQgVGFyZ2V0IDxJbXBvcnRlZCBUYXJnZXRzPmAgb3IgYW4KLWBgQUxJQVNgYC4KK21heSBub3QgYmUgYW4gYGBBTElBU2BgLgorCitBbiBgYEFMSUFTYGAgdG8gYSBub24tYGBHTE9CQUxgYCA6cmVmOmBJbXBvcnRlZCBUYXJnZXQgPEltcG9ydGVkIFRhcmdldHM+YAoraGFzIHNjb3BlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGFsaWFzIGlzIGNyZWF0ZWQgYW5kIGJlbG93LgorVGhlIDpwcm9wX3RndDpgQUxJQVNfR0xPQkFMYCB0YXJnZXQgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlCithbGlhcyBpcyBnbG9iYWwgb3Igbm90LgorCiBgYEFMSUFTYGAgdGFyZ2V0cyBjYW4gYmUgdXNlZCBhcyBsaW5rYWJsZSB0YXJnZXRzIGFuZCBhcyB0YXJnZXRzIHRvCiByZWFkIHByb3BlcnRpZXMgZnJvbS4gIFRoZXkgY2FuIGFsc28gYmUgdGVzdGVkIGZvciBleGlzdGVuY2Ugd2l0aCB0aGUKIHJlZ3VsYXIgOmNvbW1hbmQ6YGlmKFRBUkdFVClgIHN1YmNvbW1hbmQuICBUaGUgYGA8bmFtZT5gYCBtYXkgbm90IGJlIHVzZWQKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9hZGRfbGlua19vcHRpb25zLnJzdCBiL0hlbHAvY29tbWFuZC9hZGRfbGlua19vcHRpb25zLnJzdAppbmRleCBhODMwMDViLi5mMDNlN2MwIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvYWRkX2xpbmtfb3B0aW9ucy5yc3QKKysrIGIvSGVscC9jb21tYW5kL2FkZF9saW5rX29wdGlvbnMucnN0CkBAIC0xLDYgKzEsOCBAQAogYWRkX2xpbmtfb3B0aW9ucwogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIEFkZCBvcHRpb25zIHRvIHRoZSBsaW5rIHN0ZXAgZm9yIGV4ZWN1dGFibGUsIHNoYXJlZCBsaWJyYXJ5IG9yIG1vZHVsZQogbGlicmFyeSB0YXJnZXRzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYmVsb3cgdGhhdCBhcmUgYWRkZWQgYWZ0ZXIKIHRoaXMgY29tbWFuZCBpcyBpbnZva2VkLgpAQCAtMjYsNiArMjgsOCBAQAogbWFudWFsIGZvciBhdmFpbGFibGUgZXhwcmVzc2lvbnMuICBTZWUgdGhlIDptYW51YWw6YGNtYWtlLWJ1aWxkc3lzdGVtKDcpYAogbWFudWFsIGZvciBtb3JlIG9uIGRlZmluaW5nIGJ1aWxkc3lzdGVtIHByb3BlcnRpZXMuCiAKKy4uIGluY2x1ZGU6OiBERVZJQ0VfTElOS19PUFRJT05TLnR4dAorCiAuLiBpbmNsdWRlOjogT1BUSU9OU19TSEVMTC50eHQKIAogLi4gaW5jbHVkZTo6IExJTktfT1BUSU9OU19MSU5LRVIudHh0CmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvYWRkX3Rlc3QucnN0IGIvSGVscC9jb21tYW5kL2FkZF90ZXN0LnJzdAppbmRleCBhNzdiYTM3Li5jMDY3N2QyIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvYWRkX3Rlc3QucnN0CisrKyBiL0hlbHAvY29tbWFuZC9hZGRfdGVzdC5yc3QKQEAgLTEwLDggKzEwLDkgQEAKICAgICAgICAgICAgW1dPUktJTkdfRElSRUNUT1JZIDxkaXI+XQogICAgICAgICAgICBbQ09NTUFORF9FWFBBTkRfTElTVFNdKQogCi1BZGRzIGEgdGVzdCBjYWxsZWQgYGA8bmFtZT5gYC4gIFRoZSB0ZXN0IG5hbWUgbWF5IG5vdCBjb250YWluIHNwYWNlcywKLXF1b3Rlcywgb3Igb3RoZXIgY2hhcmFjdGVycyBzcGVjaWFsIGluIENNYWtlIHN5bnRheC4gIFRoZSBvcHRpb25zIGFyZToKK0FkZHMgYSB0ZXN0IGNhbGxlZCBgYDxuYW1lPmBgLiAgVGhlIHRlc3QgbmFtZSBtYXkgY29udGFpbiBhcmJpdHJhcnkKK2NoYXJhY3RlcnMgZXhjZXB0IGZvciBkb3VibGUtcXVvdGVzLiAgSG93ZXZlciwgaWYgaXQgY29udGFpbnMgc3BhY2VzCitvciBzZW1pY29sb25zIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gZG91YmxlLXF1b3Rlcy4gIFRoZSBvcHRpb25zIGFyZToKIAogYGBDT01NQU5EYGAKICAgU3BlY2lmeSB0aGUgdGVzdCBjb21tYW5kLWxpbmUuICBJZiBgYDxjb21tYW5kPmBgIHNwZWNpZmllcyBhbgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2NtYWtlX2xhbmd1YWdlLnJzdCBiL0hlbHAvY29tbWFuZC9jbWFrZV9sYW5ndWFnZS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5OGQ3OQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvY29tbWFuZC9jbWFrZV9sYW5ndWFnZS5yc3QKQEAgLTAsMCArMSwxMDEgQEAKK2NtYWtlX2xhbmd1YWdlCistLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0NhbGwgbWV0YS1vcGVyYXRpb25zIG9uIENNYWtlIGNvbW1hbmRzLgorCitTeW5vcHNpcworXl5eXl5eXl4KKworLi4gcGFyc2VkLWxpdGVyYWw6OgorCisgIGNtYWtlX2xhbmd1YWdlKGBDQUxMYF8gPGNvbW1hbmQ+IFs8YXJncz4uLi5dKQorICBjbWFrZV9sYW5ndWFnZShgRVZBTGBfIENPREUgPGNvZGU+Li4uKQorCitJbnRyb2R1Y3Rpb24KK15eXl5eXl5eXl5eXgorCitUaGlzIGNvbW1hbmQgd2lsbCBjYWxsIG1ldGEtb3BlcmF0aW9ucyBvbiBidWlsdC1pbiBDTWFrZSBjb21tYW5kcyBvcgordGhvc2UgY3JlYXRlZCB2aWEgdGhlIDpjb21tYW5kOmBtYWNyb2Agb3IgOmNvbW1hbmQ6YGZ1bmN0aW9uYCBjb21tYW5kcy4KKworYGBjbWFrZV9sYW5ndWFnZWBgIGRvZXMgbm90IGludHJvZHVjZSBhIG5ldyB2YXJpYWJsZSBvciBwb2xpY3kgc2NvcGUuCisKK0NhbGxpbmcgQ29tbWFuZHMKK15eXl5eXl5eXl5eXl5eXl4KKworLi4gX0NBTEw6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGNtYWtlX2xhbmd1YWdlKENBTEwgPGNvbW1hbmQ+IFs8YXJncz4uLi5dKQorCitDYWxscyB0aGUgbmFtZWQgYGA8Y29tbWFuZD5gYCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMgKGlmIGFueSkuCitGb3IgZXhhbXBsZSwgdGhlIGNvZGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChtZXNzYWdlX2NvbW1hbmQgIm1lc3NhZ2UiKQorICBjbWFrZV9sYW5ndWFnZShDQUxMICR7bWVzc2FnZV9jb21tYW5kfSBTVEFUVVMgIkhlbGxvIFdvcmxkISIpCisKK2lzIGVxdWl2YWxlbnQgdG8KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgbWVzc2FnZShTVEFUVVMgIkhlbGxvIFdvcmxkISIpCisKKy4uIG5vdGU6OgorICBUbyBlbnN1cmUgY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIG5vdCBhbGxvd2VkOgorCisgICogYGBpZmBgIC8gYGBlbHNlaWZgYCAvIGBgZWxzZWBgIC8gYGBlbmRpZmBgCisgICogYGB3aGlsZWBgIC8gYGBlbmR3aGlsZWBgCisgICogYGBmb3JlYWNoYGAgLyBgYGVuZGZvcmVhY2hgYAorICAqIGBgZnVuY3Rpb25gYCAvIGBgZW5kZnVuY3Rpb25gYAorICAqIGBgbWFjcm9gYCAvIGBgZW5kbWFjcm9gYAorCitFdmFsdWF0aW5nIENvZGUKK15eXl5eXl5eXl5eXl5eXgorCisuLiBfRVZBTDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFIDxjb2RlPi4uLikKKworRXZhbHVhdGVzIHRoZSBgYDxjb2RlPi4uLmBgIGFzIENNYWtlIGNvZGUuCisKK0ZvciBleGFtcGxlLCB0aGUgY29kZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0KEEgVFJVRSkKKyAgc2V0KEIgVFJVRSkKKyAgc2V0KEMgVFJVRSkKKyAgc2V0KGNvbmRpdGlvbiAiKEEgQU5EIEIpIE9SIEMiKQorCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAiCisgICAgaWYgKCR7Y29uZGl0aW9ufSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTIFRSVUUpCisgICAgZWxzZSgpCisgICAgICBtZXNzYWdlKFNUQVRVUyBGQUxTRSkKKyAgICBlbmRpZigpIgorICApCisKK2lzIGVxdWl2YWxlbnQgdG8KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0KEEgVFJVRSkKKyAgc2V0KEIgVFJVRSkKKyAgc2V0KEMgVFJVRSkKKyAgc2V0KGNvbmRpdGlvbiAiKEEgQU5EIEIpIE9SIEMiKQorCisgIGZpbGUoV1JJVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2V2YWwuY21ha2UgIgorICAgIGlmICgke2NvbmRpdGlvbn0pCisgICAgICBtZXNzYWdlKFNUQVRVUyBUUlVFKQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShTVEFUVVMgRkFMU0UpCisgICAgZW5kaWYoKSIKKyAgKQorCisgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2V2YWwuY21ha2UpCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvY21ha2VfcGFyc2VfYXJndW1lbnRzLnJzdCBiL0hlbHAvY29tbWFuZC9jbWFrZV9wYXJzZV9hcmd1bWVudHMucnN0CmluZGV4IGZjZDM2ZDAuLjg4MDNlYzggMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9jbWFrZV9wYXJzZV9hcmd1bWVudHMucnN0CisrKyBiL0hlbHAvY29tbWFuZC9jbWFrZV9wYXJzZV9hcmd1bWVudHMucnN0CkBAIC0xLDYgKzEsOCBAQAogY21ha2VfcGFyc2VfYXJndW1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIFBhcnNlIGZ1bmN0aW9uIG9yIG1hY3JvIGFyZ3VtZW50cy4KIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvY29uZmlndXJlX2ZpbGUucnN0IGIvSGVscC9jb21tYW5kL2NvbmZpZ3VyZV9maWxlLnJzdAppbmRleCAyOWU4NWJkLi40NmQxYTA1IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvY29uZmlndXJlX2ZpbGUucnN0CisrKyBiL0hlbHAvY29tbWFuZC9jb25maWd1cmVfZmlsZS5yc3QKQEAgLTcsNiArNyw3IEBACiAKICAgY29uZmlndXJlX2ZpbGUoPGlucHV0PiA8b3V0cHV0PgogICAgICAgICAgICAgICAgICBbQ09QWU9OTFldIFtFU0NBUEVfUVVPVEVTXSBbQE9OTFldCisgICAgICAgICAgICAgICAgIFtOT19TT1VSQ0VfUEVSTUlTU0lPTlNdCiAgICAgICAgICAgICAgICAgIFtORVdMSU5FX1NUWUxFIFtVTklYfERPU3xXSU4zMnxMRnxDUkxGXSBdKQogCiBDb3BpZXMgYW4gYGA8aW5wdXQ+YGAgZmlsZSB0byBhbiBgYDxvdXRwdXQ+YGAgZmlsZSBhbmQgc3Vic3RpdHV0ZXMKQEAgLTgyLDYgKzgzLDExIEBACiAgIFJlc3RyaWN0IHZhcmlhYmxlIHJlcGxhY2VtZW50IHRvIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGBAVkFSQGBgLgogICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc2NyaXB0cyB0aGF0IHVzZSBgYCR7VkFSfWBgIHN5bnRheC4KIAorIGBgTk9fU09VUkNFX1BFUk1JU1NJT05TYGAKKyAgRG9lcyBub3QgdHJhbnNmZXIgdGhlIGZpbGUgcGVybWlzc2lvbnMgb2YgdGhlIG9yaWdpbmFsIGZpbGUgdG8gdGhlIGNvcHkuCisgIFRoZSBjb3BpZWQgZmlsZSBwZXJtaXNzaW9ucyBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCA2NDQgdmFsdWUKKyAgKC1ydy1yLS1yLS0pLgorCiBgYE5FV0xJTkVfU1RZTEUgPHN0eWxlPmBgCiAgIFNwZWNpZnkgdGhlIG5ld2xpbmUgc3R5bGUgZm9yIHRoZSBvdXRwdXQgZmlsZS4gIFNwZWNpZnkKICAgYGBVTklYYGAgb3IgYGBMRmBgIGZvciBgYFxuYGAgbmV3bGluZXMsIG9yIHNwZWNpZnkKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9jb250aW51ZS5yc3QgYi9IZWxwL2NvbW1hbmQvY29udGludWUucnN0CmluZGV4IDMxYzcwODkuLmY2MjgwMmUgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9jb250aW51ZS5yc3QKKysrIGIvSGVscC9jb21tYW5kL2NvbnRpbnVlLnJzdApAQCAtMSw2ICsxLDggQEAKIGNvbnRpbnVlCiAtLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogQ29udGludWUgdG8gdGhlIHRvcCBvZiBlbmNsb3NpbmcgZm9yZWFjaCBvciB3aGlsZSBsb29wLgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9jdGVzdF90ZXN0LnJzdCBiL0hlbHAvY29tbWFuZC9jdGVzdF90ZXN0LnJzdAppbmRleCA1YzY3YjJjLi4zNTg5Mjk2IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvY3Rlc3RfdGVzdC5yc3QKKysrIGIvSGVscC9jb21tYW5kL2N0ZXN0X3Rlc3QucnN0CkBAIC0yMCw2ICsyMCw3IEBACiAgICAgICAgICAgICAgW1JFU09VUkNFX1NQRUNfRklMRSA8ZmlsZT5dCiAgICAgICAgICAgICAgW1RFU1RfTE9BRCA8dGhyZXNob2xkPl0KICAgICAgICAgICAgICBbU0NIRURVTEVfUkFORE9NIDxPTnxPRkY+XQorICAgICAgICAgICAgIFtTVE9QX09OX0ZBSUxVUkVdCiAgICAgICAgICAgICAgW1NUT1BfVElNRSA8dGltZS1vZi1kYXk+XQogICAgICAgICAgICAgIFtSRVRVUk5fVkFMVUUgPHJlc3VsdC12YXI+XQogICAgICAgICAgICAgIFtDQVBUVVJFX0NNQUtFX0VSUk9SIDxyZXN1bHQtdmFyPl0KQEAgLTExOSw2ICsxMjAsOSBAQAogICBMYXVuY2ggdGVzdHMgaW4gYSByYW5kb20gb3JkZXIuICBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGRldGVjdGluZwogICBpbXBsaWNpdCB0ZXN0IGRlcGVuZGVuY2llcy4KIAorYGBTVE9QX09OX0ZBSUxVUkVgYAorICBTdG9wIHRoZSBleGVjdXRpb24gb2YgdGhlIHRlc3RzIG9uY2Ugb25lIGhhcyBmYWlsZWQuCisKIGBgU1RPUF9USU1FIDx0aW1lLW9mLWRheT5gYAogICBTcGVjaWZ5IGEgdGltZSBvZiBkYXkgYXQgd2hpY2ggdGhlIHRlc3RzIHNob3VsZCBhbGwgc3RvcCBydW5uaW5nLgogCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZXhlY3V0ZV9wcm9jZXNzLnJzdCBiL0hlbHAvY29tbWFuZC9leGVjdXRlX3Byb2Nlc3MucnN0CmluZGV4IDE0Zjg3OWQuLmIzMjAyNWYgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9leGVjdXRlX3Byb2Nlc3MucnN0CisrKyBiL0hlbHAvY29tbWFuZC9leGVjdXRlX3Byb2Nlc3MucnN0CkBAIC0yMSw3ICsyMSw5IEBACiAgICAgICAgICAgICAgICAgICBbQ09NTUFORF9FQ0hPIDx3aGVyZT5dCiAgICAgICAgICAgICAgICAgICBbT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0VdCiAgICAgICAgICAgICAgICAgICBbRVJST1JfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRV0KLSAgICAgICAgICAgICAgICAgIFtFTkNPRElORyA8bmFtZT5dKQorICAgICAgICAgICAgICAgICAgW0VOQ09ESU5HIDxuYW1lPl0KKyAgICAgICAgICAgICAgICAgIFtFQ0hPX09VVFBVVF9WQVJJQUJMRV0KKyAgICAgICAgICAgICAgICAgIFtFQ0hPX0VSUk9SX1ZBUklBQkxFXSkKIAogUnVucyB0aGUgZ2l2ZW4gc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgY29tbWFuZHMuCiAKQEAgLTEwNSw2ICsxMDcsMTUgQEAKICAgIGZvciB0aGlzIGVuY29kaW5nLiBJbiBDTWFrZSAzLjExLjAsIGBgVVRGLThgYCB3YXMgYWRkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGgKICAgIHRoZSBgVVRGLTggUkZDIDxodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzYyOT5gXyBuYW1pbmcgY29udmVudGlvbi4KIAorYGBFQ0hPX09VVFBVVF9WQVJJQUJMRWBgLCBgYEVDSE9fRVJST1JfVkFSSUFCTEVgYAorICBUaGUgc3RhbmRhcmQgb3V0cHV0IG9yIHN0YW5kYXJkIGVycm9yIHdpbGwgbm90IGJlIGV4Y2x1c2l2ZWx5IHJlZGlyZWN0ZWQgdG8KKyAgdGhlIGNvbmZpZ3VyZWQgdmFyaWFibGVzLgorCisgIFRoZSBvdXRwdXQgd2lsbCBiZSBkdXBsaWNhdGVkLCBpdCB3aWxsIGJlIHNlbnQgaW50byB0aGUgY29uZmlndXJlZCB2YXJpYWJsZXMKKyAgYW5kIGFsc28gb24gc3RhbmRhcmQgb3V0cHV0IG9yIHN0YW5kYXJkIGVycm9yLgorCisgIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBgYHRlZWBgIFVuaXggY29tbWFuZC4KKwogSWYgbW9yZSB0aGFuIG9uZSBgYE9VVFBVVF8qYGAgb3IgYGBFUlJPUl8qYGAgb3B0aW9uIGlzIGdpdmVuIGZvciB0aGUKIHNhbWUgcGlwZSB0aGUgcHJlY2VkZW5jZSBpcyBub3Qgc3BlY2lmaWVkLgogSWYgbm8gYGBPVVRQVVRfKmBgIG9yIGBgRVJST1JfKmBgIG9wdGlvbnMgYXJlIGdpdmVuIHRoZSBvdXRwdXQgd2lsbApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2ZpbGUucnN0IGIvSGVscC9jb21tYW5kL2ZpbGUucnN0CmluZGV4IGRmN2Q4YmEuLmU3YmM4ZDIgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9maWxlLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvZmlsZS5yc3QKQEAgLTE5LDYgKzE5LDcgQEAKICAgICBmaWxlKHtgV1JJVEVgXyB8IGBBUFBFTkRgX30gPGZpbGVuYW1lPiA8Y29udGVudD4uLi4pCiAgICAgZmlsZSh7YFRPVUNIYF8gfCBgVE9VQ0hfTk9DUkVBVEVgX30gWzxmaWxlPi4uLl0pCiAgICAgZmlsZShgR0VORVJBVEVgXyBPVVRQVVQgPG91dHB1dC1maWxlPiBbLi4uXSkKKyAgICBmaWxlKGBDT05GSUdVUkVgXyBPVVRQVVQgPG91dHB1dC1maWxlPiBDT05URU5UIDxjb250ZW50PiBbLi4uXSkKIAogICBgRmlsZXN5c3RlbWBfCiAgICAgZmlsZSh7YEdMT0JgXyB8IGBHTE9CX1JFQ1VSU0VgX30gPG91dC12YXI+IFsuLi5dIFs8Z2xvYmJpbmctZXhwcj4uLi5dKQpAQCAtNDEsNiArNDIsMTAgQEAKICAgYExvY2tpbmdgXwogICAgIGZpbGUoYExPQ0tgXyA8cGF0aD4gWy4uLl0pCiAKKyAgYEFyY2hpdmluZ2BfCisgICAgZmlsZShgQVJDSElWRV9DUkVBVEVgXyBPVVRQVVQgPGFyY2hpdmU+IFBBVEhTIDxwYXRocz4uLi4gWy4uLl0pCisgICAgZmlsZShgQVJDSElWRV9FWFRSQUNUYF8gSU5QVVQgPGFyY2hpdmU+IFsuLi5dKQorCiBSZWFkaW5nCiBeXl5eXl5eCiAKQEAgLTU0LDcgKzU5LDkgQEAKIFJlYWQgY29udGVudCBmcm9tIGEgZmlsZSBjYWxsZWQgYGA8ZmlsZW5hbWU+YGAgYW5kIHN0b3JlIGl0IGluIGEKIGBgPHZhcmlhYmxlPmBgLiAgT3B0aW9uYWxseSBzdGFydCBmcm9tIHRoZSBnaXZlbiBgYDxvZmZzZXQ+YGAgYW5kCiByZWFkIGF0IG1vc3QgYGA8bWF4LWluPmBgIGJ5dGVzLiAgVGhlIGBgSEVYYGAgb3B0aW9uIGNhdXNlcyBkYXRhIHRvCi1iZSBjb252ZXJ0ZWQgdG8gYSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiAodXNlZnVsIGZvciBiaW5hcnkgZGF0YSkuCitiZSBjb252ZXJ0ZWQgdG8gYSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiAodXNlZnVsIGZvciBiaW5hcnkgZGF0YSkuIElmIHRoZQorYGBIRVhgYCBvcHRpb24gaXMgc3BlY2lmaWVkLCBsZXR0ZXJzIGluIHRoZSBvdXRwdXQgKGBgYWBgIHRocm91Z2ggYGBmYGApIGFyZSBpbgorbG93ZXJjYXNlLgogCiAuLiBfU1RSSU5HUzoKIApAQCAtMzk1LDggKzQwMiw4IEBACiAgIERldGVybWluZXMgdGhlIHBhdGggdG8gdGhlIHRvb2wgdG8gdXNlIGZvciBkZXBlbmRlbmN5IHJlc29sdXRpb24uIFRoaXMgaXMgdGhlCiAgIGFjdHVhbCBwYXRoIHRvIGBgb2JqZHVtcGBgLCBgYGR1bXBiaW5gYCwgb3IgYGBvdG9vbGBgLgogCi0gIElmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJ5IHN5c3RlbQotICBpbnRyb3NwZWN0aW9uLgorICBJZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mCisgIGBgQ01BS0VfT0JKRFVNUGBgIGlmIHNldCwgZWxzZSBieSBzeXN0ZW0gaW50cm9zcGVjdGlvbi4KIAogV3JpdGluZwogXl5eXl5eXgpAQCAtNDgyLDYgKzQ4OSw0NCBAQAogYGBmaWxlKEdFTkVSQVRFKWBgIGNvbW1hbmQgcmV0dXJucywgaXQgaXMgd3JpdHRlbiBvbmx5IGFmdGVyIHByb2Nlc3NpbmcgYWxsCiBvZiBhIHByb2plY3QncyBgYENNYWtlTGlzdHMudHh0YGAgZmlsZXMuCiAKKy4uIF9DT05GSUdVUkU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGZpbGUoQ09ORklHVVJFIE9VVFBVVCBvdXRwdXQtZmlsZQorICAgICAgIENPTlRFTlQgY29udGVudAorICAgICAgIFtFU0NBUEVfUVVPVEVTXSBbQE9OTFldCisgICAgICAgW05FV0xJTkVfU1RZTEUgW1VOSVh8RE9TfFdJTjMyfExGfENSTEZdIF0pCisKK0dlbmVyYXRlIGFuIG91dHB1dCBmaWxlIHVzaW5nIHRoZSBpbnB1dCBnaXZlbiBieSBgYENPTlRFTlRgYCBhbmQgc3Vic3RpdHV0ZQordmFyaWFibGUgdmFsdWVzIHJlZmVyZW5jZWQgYXMgYGBAVkFSQGBgIG9yIGBgJHtWQVJ9YGAgY29udGFpbmVkIHRoZXJlaW4uIFRoZQorc3Vic3RpdHV0aW9uIHJ1bGVzIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCBjb21tYW5kLgorSW4gb3JkZXIgdG8gbWF0Y2ggOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCdzIGJlaGF2aW9yLCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMKK2FyZSBub3Qgc3VwcG9ydGVkIGZvciBib3RoIGBgT1VUUFVUYGAgYW5kIGBgQ09OVEVOVGBgLgorCitUaGUgYXJndW1lbnRzIGFyZToKKworYGBPVVRQVVQgPG91dHB1dC1maWxlPmBgCisgIFNwZWNpZnkgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gZ2VuZXJhdGUuIEEgcmVsYXRpdmUgcGF0aCBpcyB0cmVhdGVkIHdpdGgKKyAgcmVzcGVjdCB0byB0aGUgdmFsdWUgb2YgOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJgLgorICBgYDxvdXRwdXQtZmlsZT5gYCBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyYXRvciBleHByZXNzaW9ucy4KKworYGBDT05URU5UIDxjb250ZW50PmBgCisgIFVzZSB0aGUgY29udGVudCBnaXZlbiBleHBsaWNpdGx5IGFzIGlucHV0LgorICBgYDxjb250ZW50PmBgIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zLgorCitgYEVTQ0FQRV9RVU9URVNgYAorICBFc2NhcGUgYW55IHN1YnN0aXR1dGVkIHF1b3RlcyB3aXRoIGJhY2tzbGFzaGVzIChDLXN0eWxlKS4KKworYGBAT05MWWBgCisgIFJlc3RyaWN0IHZhcmlhYmxlIHJlcGxhY2VtZW50IHRvIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGBAVkFSQGBgLgorICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc2NyaXB0cyB0aGF0IHVzZSBgYCR7VkFSfWBgIHN5bnRheC4KKworYGBORVdMSU5FX1NUWUxFIDxzdHlsZT5gYAorICBTcGVjaWZ5IHRoZSBuZXdsaW5lIHN0eWxlIGZvciB0aGUgb3V0cHV0IGZpbGUuICBTcGVjaWZ5CisgIGBgVU5JWGBgIG9yIGBgTEZgYCBmb3IgYGBcbmBgIG5ld2xpbmVzLCBvciBzcGVjaWZ5CisgIGBgRE9TYGAsIGBgV0lOMzJgYCwgb3IgYGBDUkxGYGAgZm9yIGBgXHJcbmBgIG5ld2xpbmVzLgorCiBGaWxlc3lzdGVtCiBeXl5eXl5eXl5eCiAKQEAgLTc5MCw2ICs4MzUsMTggQEAKIElmIG5laXRoZXIgYGBORVRSQ2BgIG9wdGlvbiBpcyBnaXZlbiBDTWFrZSB3aWxsIGNoZWNrIHZhcmlhYmxlcwogYGBDTUFLRV9ORVRSQ2BgIGFuZCBgYENNQUtFX05FVFJDX0ZJTEVgYCwgcmVzcGVjdGl2ZWx5LgogCitgYFRMU19WRVJJRlkgPE9OfE9GRj5gYAorICBTcGVjaWZ5IHdoZXRoZXIgdG8gdmVyaWZ5IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgZm9yIGBgaHR0cHM6Ly9gYCBVUkxzLgorICBUaGUgZGVmYXVsdCBpcyB0byAqbm90KiB2ZXJpZnkuCisKK2BgVExTX0NBSU5GTyA8ZmlsZT5gYAorICBTcGVjaWZ5IGEgY3VzdG9tIENlcnRpZmljYXRlIEF1dGhvcml0eSBmaWxlIGZvciBgYGh0dHBzOi8vYGAgVVJMcy4KKworRm9yIGBgaHR0cHM6Ly9gYCBVUkxzIENNYWtlIG11c3QgYmUgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQuICBgYFRMUy9TU0xgYAorY2VydGlmaWNhdGVzIGFyZSBub3QgY2hlY2tlZCBieSBkZWZhdWx0LiAgU2V0IGBgVExTX1ZFUklGWWBgIHRvIGBgT05gYCB0bworY2hlY2sgY2VydGlmaWNhdGVzLiBJZiBuZWl0aGVyIGBgVExTYGAgb3B0aW9uIGlzIGdpdmVuIENNYWtlIHdpbGwgY2hlY2sKK3ZhcmlhYmxlcyBgYENNQUtFX1RMU19WRVJJRllgYCBhbmQgYGBDTUFLRV9UTFNfQ0FJTkZPYGAsIHJlc3BlY3RpdmVseS4KKwogQWRkaXRpb25hbCBvcHRpb25zIHRvIGBgRE9XTkxPQURgYCBhcmU6CiAKIGBgRVhQRUNURURfSEFTSCBBTEdPPTx2YWx1ZT5gYApAQCAtODAxLDE5ICs4NTgsNiBAQAogYGBFWFBFQ1RFRF9NRDUgPHZhbHVlPmBgCiAgIEhpc3RvcmljYWwgc2hvcnQtaGFuZCBmb3IgYGBFWFBFQ1RFRF9IQVNIIE1ENT08dmFsdWU+YGAuCiAKLWBgVExTX1ZFUklGWSA8T058T0ZGPmBgCi0gIFNwZWNpZnkgd2hldGhlciB0byB2ZXJpZnkgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBmb3IgYGBodHRwczovL2BgIFVSTHMuCi0gIFRoZSBkZWZhdWx0IGlzIHRvICpub3QqIHZlcmlmeS4KLQotYGBUTFNfQ0FJTkZPIDxmaWxlPmBgCi0gIFNwZWNpZnkgYSBjdXN0b20gQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGZpbGUgZm9yIGBgaHR0cHM6Ly9gYCBVUkxzLgotCi1Gb3IgYGBodHRwczovL2BgIFVSTHMgQ01ha2UgbXVzdCBiZSBidWlsdCB3aXRoIE9wZW5TU0wgc3VwcG9ydC4gIGBgVExTL1NTTGBgCi1jZXJ0aWZpY2F0ZXMgYXJlIG5vdCBjaGVja2VkIGJ5IGRlZmF1bHQuICBTZXQgYGBUTFNfVkVSSUZZYGAgdG8gYGBPTmBgIHRvCi1jaGVjayBjZXJ0aWZpY2F0ZXMgYW5kL29yIHVzZSBgYEVYUEVDVEVEX0hBU0hgYCB0byB2ZXJpZnkgZG93bmxvYWRlZCBjb250ZW50LgotSWYgbmVpdGhlciBgYFRMU2BgIG9wdGlvbiBpcyBnaXZlbiBDTWFrZSB3aWxsIGNoZWNrIHZhcmlhYmxlcwotYGBDTUFLRV9UTFNfVkVSSUZZYGAgYW5kIGBgQ01BS0VfVExTX0NBSU5GT2BgLCByZXNwZWN0aXZlbHkuCi0KIExvY2tpbmcKIF5eXl5eXl4KIApAQCAtODQ2LDMgKzg5MCw2NiBAQAogVHJ5aW5nIHRvIGxvY2sgZmlsZSB0d2ljZSBpcyBub3QgYWxsb3dlZC4gIEFueSBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgYW5kCiBmaWxlIGl0c2VsZiB3aWxsIGJlIGNyZWF0ZWQgaWYgdGhleSBub3QgZXhpc3QuICBgYEdVQVJEYGAgYW5kIGBgVElNRU9VVGBgCiBvcHRpb25zIGlnbm9yZWQgb24gYGBSRUxFQVNFYGAgb3BlcmF0aW9uLgorCitBcmNoaXZpbmcKK15eXl5eXl5eXgorCisuLiBfQVJDSElWRV9DUkVBVEU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGZpbGUoQVJDSElWRV9DUkVBVEUgT1VUUFVUIDxhcmNoaXZlPgorICAgIFBBVEhTIDxwYXRocz4uLi4KKyAgICBbRk9STUFUIDxmb3JtYXQ+XQorICAgIFtDT01QUkVTU0lPTiA8Y29tcHJlc3Npb24+XQorICAgIFtNVElNRSA8bXRpbWU+XQorICAgIFtWRVJCT1NFXSkKKworQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGBgPGFyY2hpdmU+YGAgZmlsZSB3aXRoIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKK2xpc3RlZCBpbiBgYDxwYXRocz5gYC4gIE5vdGUgdGhhdCBgYDxwYXRocz5gYCBtdXN0IGxpc3QgYWN0dWFsIGZpbGVzIG9yCitkaXJlY3Rvcmllcywgd2lsZGNhcmRzIGFyZSBub3Qgc3VwcG9ydGVkLgorCitVc2UgdGhlIGBgRk9STUFUYGAgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFyY2hpdmUgZm9ybWF0LiAgU3VwcG9ydGVkIHZhbHVlcworZm9yIGBgPGZvcm1hdD5gYCBhcmUgYGA3emlwYGAsIGBgZ251dGFyYGAsIGBgcGF4YGAsIGBgcGF4cmBgLCBgYHJhd2BgIGFuZAorYGB6aXBgYC4gIElmIGBgRk9STUFUYGAgaXMgbm90IGdpdmVuLCB0aGUgZGVmYXVsdCBmb3JtYXQgaXMgYGBwYXhyYGAuCisKK1NvbWUgYXJjaGl2ZSBmb3JtYXRzIGFsbG93IHRoZSB0eXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHNwZWNpZmllZC4KK1RoZSBgYDd6aXBgYCBhbmQgYGB6aXBgYCBhcmNoaXZlIGZvcm1hdHMgYWxyZWFkeSBpbXBseSBhIHNwZWNpZmljIHR5cGUgb2YKK2NvbXByZXNzaW9uLiAgVGhlIG90aGVyIGZvcm1hdHMgdXNlIG5vIGNvbXByZXNzaW9uIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUKK2RpcmVjdGVkIHRvIGRvIHNvIHdpdGggdGhlIGBgQ09NUFJFU1NJT05gYCBvcHRpb24uICBWYWxpZCB2YWx1ZXMgZm9yCitgYDxjb21wcmVzc2lvbj5gYCBhcmUgYGBOb25lYGAsIGBgQlppcDJgYCwgYGBHWmlwYGAsIGBgWFpgYCwgYW5kIGBgWnN0ZGBgLgorCisuLiBub3RlOjoKKyAgV2l0aCBgYEZPUk1BVGBgIHNldCB0byBgYHJhd2BgIG9ubHkgb25lIGZpbGUgd2lsbCBiZSBjb21wcmVzc2VkIHdpdGggdGhlCisgIGNvbXByZXNzaW9uIHR5cGUgc3BlY2lmaWVkIGJ5IGBgQ09NUFJFU1NJT05gYC4KKworVGhlIGBgVkVSQk9TRWBgIG9wdGlvbiBlbmFibGVzIHZlcmJvc2Ugb3V0cHV0IGZvciB0aGUgYXJjaGl2ZSBvcGVyYXRpb24uCisKK1RvIHNwZWNpZnkgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIHJlY29yZGVkIGluIHRhcmJhbGwgZW50cmllcywgdXNlCit0aGUgYGBNVElNRWBgIG9wdGlvbi4KKworLi4gX0FSQ0hJVkVfRVhUUkFDVDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgZmlsZShBUkNISVZFX0VYVFJBQ1QgSU5QVVQgPGFyY2hpdmU+CisgICAgW0RFU1RJTkFUSU9OIDxkaXI+XQorICAgIFtQQVRURVJOUyA8cGF0dGVybnM+Li4uXQorICAgIFtMSVNUX09OTFldCisgICAgW1ZFUkJPU0VdKQorCitFeHRyYWN0cyBvciBsaXN0cyB0aGUgY29udGVudCBvZiB0aGUgc3BlY2lmaWVkIGBgPGFyY2hpdmU+YGAuCisKK1RoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNvbnRlbnQgb2YgdGhlIGFyY2hpdmUgd2lsbCBiZSBleHRyYWN0ZWQgdG8gY2FuCitiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGBgREVTVElOQVRJT05gYCBvcHRpb24uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90CitleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLiAgSWYgYGBERVNUSU5BVElPTmBgIGlzIG5vdCBnaXZlbiwgdGhlIGN1cnJlbnQKK2JpbmFyeSBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLgorCitJZiByZXF1aXJlZCwgeW91IG1heSBzZWxlY3Qgd2hpY2ggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGxpc3Qgb3IgZXh0cmFjdAorZnJvbSB0aGUgYXJjaGl2ZSB1c2luZyB0aGUgc3BlY2lmaWVkIGBgPHBhdHRlcm5zPmBgLiAgV2lsZGNhcmRzIGFyZSBzdXBwb3J0ZWQuCitJZiB0aGUgYGBQQVRURVJOU2BgIG9wdGlvbiBpcyBub3QgZ2l2ZW4sIHRoZSBlbnRpcmUgYXJjaGl2ZSB3aWxsIGJlIGxpc3RlZCBvcgorZXh0cmFjdGVkLgorCitgYExJU1RfT05MWWBgIHdpbGwgbGlzdCB0aGUgZmlsZXMgaW4gdGhlIGFyY2hpdmUgcmF0aGVyIHRoYW4gZXh0cmFjdCB0aGVtLgorCitXaXRoIGBgVkVSQk9TRWBgLCB0aGUgY29tbWFuZCB3aWxsIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZmluZF9wYWNrYWdlLnJzdCBiL0hlbHAvY29tbWFuZC9maW5kX3BhY2thZ2UucnN0CmluZGV4IDY0YTE2ZjMuLjg1N2RlNzggMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9maW5kX3BhY2thZ2UucnN0CisrKyBiL0hlbHAvY29tbWFuZC9maW5kX3BhY2thZ2UucnN0CkBAIC01OSw3ICs1OSw3IEBACiBtZXNzYWdlcy4gIFNvbWUgZmluZC1tb2R1bGVzIHByb3ZpZGUgbGltaXRlZCBvciBubyBzdXBwb3J0IGZvciB2ZXJzaW9uaW5nOwogY2hlY2sgdGhlIG1vZHVsZSBkb2N1bWVudGF0aW9uLgogCi1JZiB0aGUgYGBNT0RVTEVgYCBvcHRpb24gaXMgbm90IHNwZWNmaWVkIGluIHRoZSBhYm92ZSBzaWduYXR1cmUsCitJZiB0aGUgYGBNT0RVTEVgYCBvcHRpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgYWJvdmUgc2lnbmF0dXJlLAogQ01ha2UgZmlyc3Qgc2VhcmNoZXMgZm9yIHRoZSBwYWNrYWdlIHVzaW5nIE1vZHVsZSBtb2RlLiBUaGVuLCBpZiB0aGUKIHBhY2thZ2UgaXMgbm90IGZvdW5kLCBpdCBzZWFyY2hlcyBhZ2FpbiB1c2luZyBDb25maWcgbW9kZS4gQSB1c2VyCiBtYXkgc2V0IHRoZSB2YXJpYWJsZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHYCB0bwpAQCAtMzAyLDIzICszMDIsMjMgQEAKICAgIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCBhIGBgLURWQVI9dmFsdWVgYC4KICAgIFRoZSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdHMgPENNYWtlIExhbmd1YWdlIExpc3RzPmAuCiAgICBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIGBgTk9fQ01BS0VfUEFUSGBgIGlzIHBhc3NlZCBvciBieSBzZXR0aW5nIHRoZQotICAgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIYCB0byBgYEZBTFNFYGA6OgorICAgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIYCB0byBgYEZBTFNFYGA6CiAKLSAgICAgQ01BS0VfUFJFRklYX1BBVEgKLSAgICAgQ01BS0VfRlJBTUVXT1JLX1BBVEgKLSAgICAgQ01BS0VfQVBQQlVORExFX1BBVEgKKyAgICogOnZhcmlhYmxlOmBDTUFLRV9QUkVGSVhfUEFUSGAKKyAgICogOnZhcmlhYmxlOmBDTUFLRV9GUkFNRVdPUktfUEFUSGAKKyAgICogOnZhcmlhYmxlOmBDTUFLRV9BUFBCVU5ETEVfUEFUSGAKIAogMy4gU2VhcmNoIHBhdGhzIHNwZWNpZmllZCBpbiBjbWFrZS1zcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICBUaGVzZSBhcmUgaW50ZW5kZWQgdG8gYmUgc2V0IGluIHRoZSB1c2VyJ3Mgc2hlbGwgY29uZmlndXJhdGlvbiwKICAgIGFuZCB0aGVyZWZvcmUgdXNlIHRoZSBob3N0J3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yCiAgICAoYGA7YGAgb24gV2luZG93cyBhbmQgYGA6YGAgb24gVU5JWCkuCiAgICBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIGBgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSGBgIGlzIHBhc3NlZCBvciBieSBzZXR0aW5nCi0gICB0aGUgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRIYCB0byBgYEZBTFNFYGA6OgorICAgdGhlIDp2YXJpYWJsZTpgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSGAgdG8gYGBGQUxTRWBgOgogCi0gICAgIDxQYWNrYWdlTmFtZT5fRElSCi0gICAgIENNQUtFX1BSRUZJWF9QQVRICi0gICAgIENNQUtFX0ZSQU1FV09SS19QQVRICi0gICAgIENNQUtFX0FQUEJVTkRMRV9QQVRICisgICAqIGBgPFBhY2thZ2VOYW1lPl9ESVJgYAorICAgKiA6ZW52dmFyOmBDTUFLRV9QUkVGSVhfUEFUSGAKKyAgICogYGBDTUFLRV9GUkFNRVdPUktfUEFUSGBgCisgICAqIGBgQ01BS0VfQVBQQlVORExFX1BBVEhgYAogCiA0LiBTZWFyY2ggcGF0aHMgc3BlY2lmaWVkIGJ5IHRoZSBgYEhJTlRTYGAgb3B0aW9uLiAgVGhlc2Ugc2hvdWxkIGJlIHBhdGhzCiAgICBjb21wdXRlZCBieSBzeXN0ZW0gaW50cm9zcGVjdGlvbiwgc3VjaCBhcyBhIGhpbnQgcHJvdmlkZWQgYnkgdGhlCkBAIC0zMjksOSArMzI5LDkgQEAKICAgIHNraXBwZWQgaWYgYGBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSGBgIGlzIHBhc3NlZCAgb3IgYnkgc2V0dGluZyB0aGUKICAgIDp2YXJpYWJsZTpgQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEhgIHRvIGBgRkFMU0VgYC4gUGF0aCBlbnRyaWVzCiAgICBlbmRpbmcgaW4gYGAvYmluYGAgb3IgYGAvc2JpbmBgIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGVpcgotICAgcGFyZW50IGRpcmVjdG9yaWVzOjoKKyAgIHBhcmVudCBkaXJlY3RvcmllczoKIAotICAgICBQQVRICisgICAqIGBgUEFUSGBgCiAKIDYuIFNlYXJjaCBwYXRocyBzdG9yZWQgaW4gdGhlIENNYWtlIDpyZWY6YFVzZXIgUGFja2FnZSBSZWdpc3RyeWAuCiAgICBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIGBgTk9fQ01BS0VfUEFDS0FHRV9SRUdJU1RSWWBgIGlzIHBhc3NlZCBvciBieQpAQCAtMzQ1LDExICszNDUsMTUgQEAKIDcuIFNlYXJjaCBjbWFrZSB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgUGxhdGZvcm0gZmlsZXMgZm9yIHRoZQogICAgY3VycmVudCBzeXN0ZW0uICBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIGBgTk9fQ01BS0VfU1lTVEVNX1BBVEhgYCBpcwogICAgcGFzc2VkIG9yIGJ5IHNldHRpbmcgdGhlIDp2YXJpYWJsZTpgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEhgCi0gICB0byBgYEZBTFNFYGA6OgorICAgdG8gYGBGQUxTRWBgOgogCi0gICAgIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSAotICAgICBDTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEgKLSAgICAgQ01BS0VfU1lTVEVNX0FQUEJVTkRMRV9QQVRICisgICAqIDp2YXJpYWJsZTpgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIYAorICAgKiA6dmFyaWFibGU6YENNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSGAKKyAgICogOnZhcmlhYmxlOmBDTUFLRV9TWVNURU1fQVBQQlVORExFX1BBVEhgCisKKyAgIFRoZSBwbGF0Zm9ybSBwYXRocyB0aGF0IHRoZXNlIHZhcmlhYmxlcyBjb250YWluIGFyZSBsb2NhdGlvbnMgdGhhdAorICAgdHlwaWNhbGx5IGluY2x1ZGUgaW5zdGFsbGVkIHNvZnR3YXJlLiBBbiBleGFtcGxlIGJlaW5nIGBgL3Vzci9sb2NhbGBgIGZvcgorICAgVU5JWCBiYXNlZCBwbGF0Zm9ybXMuCiAKIDguIFNlYXJjaCBwYXRocyBzdG9yZWQgaW4gdGhlIENNYWtlIDpyZWY6YFN5c3RlbSBQYWNrYWdlIFJlZ2lzdHJ5YC4KICAgIFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgYGBOT19DTUFLRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWWBgIGlzIHBhc3NlZApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2Z1bmN0aW9uLnJzdCBiL0hlbHAvY29tbWFuZC9mdW5jdGlvbi5yc3QKaW5kZXggNTNiYTc1NC4uN2E5YjkwNyAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2Z1bmN0aW9uLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvZnVuY3Rpb24ucnN0CkBAIC00NCwxMSArNDQsMTUgQEAKICAgZm9vKCkKICAgRm9vKCkKICAgRk9PKCkKKyAgY21ha2VfbGFuZ3VhZ2UoQ0FMTCBmb28pCiAKIGFuZCBzbyBvbi4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gc3RheSB3aXRoIHRoZQogY2FzZSBjaG9zZW4gaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFR5cGljYWxseSBmdW5jdGlvbnMgdXNlCiBhbGwtbG93ZXJjYXNlIG5hbWVzLgogCitUaGUgOmNvbW1hbmQ6YGNtYWtlX2xhbmd1YWdlKENBTEwgLi4uKWAgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCitpbnZva2UgdGhlIGZ1bmN0aW9uLgorCiBBcmd1bWVudHMKIF5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZ2V0X3Byb3BlcnR5LnJzdCBiL0hlbHAvY29tbWFuZC9nZXRfcHJvcGVydHkucnN0CmluZGV4IGMwZjliNDYuLjA2MDI1MTggMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9nZXRfcHJvcGVydHkucnN0CisrKyBiL0hlbHAvY29tbWFuZC9nZXRfcHJvcGVydHkucnN0CkBAIC0xMCw2ICsxMCw3IEBACiAgICAgICAgICAgICAgICAgRElSRUNUT1JZIFs8ZGlyPl0gIHwKICAgICAgICAgICAgICAgICBUQVJHRVQgICAgPHRhcmdldD4gfAogICAgICAgICAgICAgICAgIFNPVVJDRSAgICA8c291cmNlPiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFtESVJFQ1RPUlkgPGRpcj4gfCBUQVJHRVRfRElSRUNUT1JZIDx0YXJnZXQ+XSB8CiAgICAgICAgICAgICAgICAgSU5TVEFMTCAgIDxmaWxlPiAgIHwKICAgICAgICAgICAgICAgICBURVNUICAgICAgPHRlc3Q+ICAgfAogICAgICAgICAgICAgICAgIENBQ0hFICAgICA8ZW50cnk+ICB8CkBAIC0zMCwxOCArMzEsMzYgQEAKICAgU2NvcGUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGJ1dCBhbm90aGVyCiAgIGRpcmVjdG9yeSAoYWxyZWFkeSBwcm9jZXNzZWQgYnkgQ01ha2UpIG1heSBiZSBuYW1lZCBieSB0aGUKICAgZnVsbCBvciByZWxhdGl2ZSBwYXRoIGBgPGRpcj5gYC4KKyAgU2VlIGFsc28gdGhlIDpjb21tYW5kOmBnZXRfZGlyZWN0b3J5X3Byb3BlcnR5YCBjb21tYW5kLgogCiBgYFRBUkdFVGBgCiAgIFNjb3BlIG11c3QgbmFtZSBvbmUgZXhpc3RpbmcgdGFyZ2V0LgorICBTZWUgYWxzbyB0aGUgOmNvbW1hbmQ6YGdldF90YXJnZXRfcHJvcGVydHlgIGNvbW1hbmQuCiAKIGBgU09VUkNFYGAKLSAgU2NvcGUgbXVzdCBuYW1lIG9uZSBzb3VyY2UgZmlsZS4KKyAgU2NvcGUgbXVzdCBuYW1lIG9uZSBzb3VyY2UgZmlsZS4gIEJ5IGRlZmF1bHQsIHRoZSBzb3VyY2UgZmlsZSdzIHByb3BlcnR5CisgIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkncyBzY29wZSwgYnV0IHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdWItb3B0aW9uczoKKworICBgYERJUkVDVE9SWSA8ZGlyPmBgCisgICAgVGhlIHNvdXJjZSBmaWxlIHByb3BlcnR5IHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBgYDxkaXI+YGAgZGlyZWN0b3J5J3MKKyAgICBzY29wZS4gIENNYWtlIG11c3QgYWxyZWFkeSBrbm93IGFib3V0IHRoYXQgc291cmNlIGRpcmVjdG9yeSwgZWl0aGVyIGJ5CisgICAgaGF2aW5nIGFkZGVkIGl0IHRocm91Z2ggYSBjYWxsIHRvIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBvciBgYDxkaXI+YGAKKyAgICBiZWluZyB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuICBSZWxhdGl2ZSBwYXRocyBhcmUgdHJlYXRlZCBhcworICAgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuCisKKyAgYGBUQVJHRVRfRElSRUNUT1JZIDx0YXJnZXQ+YGAKKyAgICBUaGUgc291cmNlIGZpbGUgcHJvcGVydHkgd2lsbCBiZSByZWFkIGZyb20gdGhlIGRpcmVjdG9yeSBzY29wZSBpbiB3aGljaAorICAgIGBgPHRhcmdldD5gYCB3YXMgY3JlYXRlZCAoYGA8dGFyZ2V0PmBgIG11c3QgdGhlcmVmb3JlIGFscmVhZHkgZXhpc3QpLgorCisgIFNlZSBhbHNvIHRoZSA6Y29tbWFuZDpgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5YCBjb21tYW5kLgogCiBgYElOU1RBTExgYAogICBTY29wZSBtdXN0IG5hbWUgb25lIGluc3RhbGxlZCBmaWxlIHBhdGguCiAKIGBgVEVTVGBgCiAgIFNjb3BlIG11c3QgbmFtZSBvbmUgZXhpc3RpbmcgdGVzdC4KKyAgU2VlIGFsc28gdGhlIDpjb21tYW5kOmBnZXRfdGVzdF9wcm9wZXJ0eWAgY29tbWFuZC4KIAogYGBDQUNIRWBgCiAgIFNjb3BlIG11c3QgbmFtZSBvbmUgY2FjaGUgZW50cnkuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5LnJzdCBiL0hlbHAvY29tbWFuZC9nZXRfc291cmNlX2ZpbGVfcHJvcGVydHkucnN0CmluZGV4IGRlY2VjMTkuLjc2ZWQ3NzYgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9nZXRfc291cmNlX2ZpbGVfcHJvcGVydHkucnN0CisrKyBiL0hlbHAvY29tbWFuZC9nZXRfc291cmNlX2ZpbGVfcHJvcGVydHkucnN0CkBAIC01LDE1ICs1LDMzIEBACiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi0gIGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShWQVIgZmlsZSBwcm9wZXJ0eSkKKyAgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KDx2YXJpYWJsZT4gPGZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICBbRElSRUNUT1JZIDxkaXI+IHwgVEFSR0VUX0RJUkVDVE9SWSA8dGFyZ2V0Pl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4pCiAKIEdldHMgYSBwcm9wZXJ0eSBmcm9tIGEgc291cmNlIGZpbGUuICBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGlzCi1zdG9yZWQgaW4gdGhlIHZhcmlhYmxlIGBgVkFSYGAuICBJZiB0aGUgc291cmNlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgdGhlCi1iZWhhdmlvciBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgaGFzIGJlZW4gZGVmaW5lZCB0byBiZSBhbiBgYElOSEVSSVRFRGBgIHByb3BlcnR5Ci1vciBub3QgKHNlZSA6Y29tbWFuZDpgZGVmaW5lX3Byb3BlcnR5YCkuICBOb24taW5oZXJpdGVkIHByb3BlcnRpZXMgd2lsbCBzZXQKLWBgVkFSYGAgdG8gIk5PVEZPVU5EIiwgd2hlcmVhcyBpbmhlcml0ZWQgcHJvcGVydGllcyB3aWxsIHNlYXJjaCB0aGUgcmVsZXZhbnQKLXBhcmVudCBzY29wZSBhcyBkZXNjcmliZWQgZm9yIHRoZSA6Y29tbWFuZDpgZGVmaW5lX3Byb3BlcnR5YCBjb21tYW5kIGFuZAotaWYgc3RpbGwgdW5hYmxlIHRvIGZpbmQgdGhlIHByb3BlcnR5LCBgYFZBUmBgIHdpbGwgYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZy4KK3N0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIGBgPHZhcmlhYmxlPmBgLiAgSWYgdGhlIHNvdXJjZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsCit0aGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB3aGV0aGVyIGl0IGhhcyBiZWVuIGRlZmluZWQgdG8gYmUgYW4gYGBJTkhFUklURURgYAorcHJvcGVydHkgb3Igbm90IChzZWUgOmNvbW1hbmQ6YGRlZmluZV9wcm9wZXJ0eWApLiAgTm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzCit3aWxsIHNldCBgYHZhcmlhYmxlYGAgdG8gYGBOT1RGT1VORGBgLCB3aGVyZWFzIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHdpbGwgc2VhcmNoCit0aGUgcmVsZXZhbnQgcGFyZW50IHNjb3BlIGFzIGRlc2NyaWJlZCBmb3IgdGhlIDpjb21tYW5kOmBkZWZpbmVfcHJvcGVydHlgCitjb21tYW5kIGFuZCBpZiBzdGlsbCB1bmFibGUgdG8gZmluZCB0aGUgcHJvcGVydHksIGBgdmFyaWFibGVgYCB3aWxsIGJlIHNldCB0bworYW4gZW1wdHkgc3RyaW5nLgorCitCeSBkZWZhdWx0LCB0aGUgc291cmNlIGZpbGUncyBwcm9wZXJ0eSB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY3VycmVudCBzb3VyY2UKK2RpcmVjdG9yeSdzIHNjb3BlLCBidXQgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nCitzdWItb3B0aW9uczoKKworYGBESVJFQ1RPUlkgPGRpcj5gYAorICBUaGUgc291cmNlIGZpbGUgcHJvcGVydHkgd2lsbCBiZSByZWFkIGZyb20gdGhlIGBgPGRpcj5gYCBkaXJlY3RvcnkncworICBzY29wZS4gIENNYWtlIG11c3QgYWxyZWFkeSBrbm93IGFib3V0IHRoYXQgc291cmNlIGRpcmVjdG9yeSwgZWl0aGVyIGJ5CisgIGhhdmluZyBhZGRlZCBpdCB0aHJvdWdoIGEgY2FsbCB0byA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAgb3IgYGA8ZGlyPmBgCisgIGJlaW5nIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4gIFJlbGF0aXZlIHBhdGhzIGFyZSB0cmVhdGVkIGFzCisgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuCisKK2BgVEFSR0VUX0RJUkVDVE9SWSA8dGFyZ2V0PmBgCisgIFRoZSBzb3VyY2UgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgZGlyZWN0b3J5IHNjb3BlIGluIHdoaWNoCisgIGBgPHRhcmdldD5gYCB3YXMgY3JlYXRlZCAoYGA8dGFyZ2V0PmBgIG11c3QgdGhlcmVmb3JlIGFscmVhZHkgZXhpc3QpLgogCiBVc2UgOmNvbW1hbmQ6YHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllc2AgdG8gc2V0IHByb3BlcnR5IHZhbHVlcy4gIFNvdXJjZQogZmlsZSBwcm9wZXJ0aWVzIHVzdWFsbHkgY29udHJvbCBob3cgdGhlIGZpbGUgaXMgYnVpbHQuIE9uZSBwcm9wZXJ0eSB0aGF0IGlzCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZ2V0X3RhcmdldF9wcm9wZXJ0eS5yc3QgYi9IZWxwL2NvbW1hbmQvZ2V0X3RhcmdldF9wcm9wZXJ0eS5yc3QKaW5kZXggMTFlMDdlYS4uOTg1YjFmZiAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2dldF90YXJnZXRfcHJvcGVydHkucnN0CisrKyBiL0hlbHAvY29tbWFuZC9nZXRfdGFyZ2V0X3Byb3BlcnR5LnJzdApAQCAtNSwxNSArNSwxNSBAQAogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKIAotICBnZXRfdGFyZ2V0X3Byb3BlcnR5KFZBUiB0YXJnZXQgcHJvcGVydHkpCisgIGdldF90YXJnZXRfcHJvcGVydHkoPFZBUj4gdGFyZ2V0IHByb3BlcnR5KQogCiBHZXQgYSBwcm9wZXJ0eSBmcm9tIGEgdGFyZ2V0LiAgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpcyBzdG9yZWQgaW4KLXRoZSB2YXJpYWJsZSBgYFZBUmBgLiAgSWYgdGhlIHRhcmdldCBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHRoZSBiZWhhdmlvcgordGhlIHZhcmlhYmxlIGBgPFZBUj5gYC4gIElmIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgbm90IGZvdW5kLCB0aGUgYmVoYXZpb3IKIGRlcGVuZHMgb24gd2hldGhlciBpdCBoYXMgYmVlbiBkZWZpbmVkIHRvIGJlIGFuIGBgSU5IRVJJVEVEYGAgcHJvcGVydHkKIG9yIG5vdCAoc2VlIDpjb21tYW5kOmBkZWZpbmVfcHJvcGVydHlgKS4gIE5vbi1pbmhlcml0ZWQgcHJvcGVydGllcyB3aWxsCi1zZXQgYGBWQVJgYCB0byBgYE5PVEZPVU5EYGAsIHdoZXJlYXMgaW5oZXJpdGVkIHByb3BlcnRpZXMgd2lsbCBzZWFyY2ggdGhlCi1yZWxldmFudCBwYXJlbnQgc2NvcGUgYXMgZGVzY3JpYmVkIGZvciB0aGUgOmNvbW1hbmQ6YGRlZmluZV9wcm9wZXJ0eWAKLWNvbW1hbmQgYW5kIGlmIHN0aWxsIHVuYWJsZSB0byBmaW5kIHRoZSBwcm9wZXJ0eSwgYGBWQVJgYCB3aWxsIGJlIHNldCB0bworc2V0IGBgPFZBUj5gYCB0byBgYDxWQVI+LU5PVEZPVU5EYGAsIHdoZXJlYXMgaW5oZXJpdGVkIHByb3BlcnRpZXMgd2lsbCBzZWFyY2gKK3RoZSByZWxldmFudCBwYXJlbnQgc2NvcGUgYXMgZGVzY3JpYmVkIGZvciB0aGUgOmNvbW1hbmQ6YGRlZmluZV9wcm9wZXJ0eWAKK2NvbW1hbmQgYW5kIGlmIHN0aWxsIHVuYWJsZSB0byBmaW5kIHRoZSBwcm9wZXJ0eSwgYGA8VkFSPmBgIHdpbGwgYmUgc2V0IHRvCiBhbiBlbXB0eSBzdHJpbmcuCiAKIFVzZSA6Y29tbWFuZDpgc2V0X3RhcmdldF9wcm9wZXJ0aWVzYCB0byBzZXQgdGFyZ2V0IHByb3BlcnR5IHZhbHVlcy4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9pbmNsdWRlX2d1YXJkLnJzdCBiL0hlbHAvY29tbWFuZC9pbmNsdWRlX2d1YXJkLnJzdAppbmRleCA4NzdhYTg2Li5kY2EzYjZmIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvaW5jbHVkZV9ndWFyZC5yc3QKKysrIGIvSGVscC9jb21tYW5kL2luY2x1ZGVfZ3VhcmQucnN0CkBAIC0xLDYgKzEsOCBAQAogaW5jbHVkZV9ndWFyZAogLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIFByb3ZpZGVzIGFuIGluY2x1ZGUgZ3VhcmQgZm9yIHRoZSBmaWxlIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgYnkgQ01ha2UuCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2luc3RhbGwucnN0IGIvSGVscC9jb21tYW5kL2luc3RhbGwucnN0CmluZGV4IDVhZmZjNWIuLmMxMWVhZjQgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9pbnN0YWxsLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvaW5zdGFsbC5yc3QKQEAgLTE4LDEwICsxOCwxMiBAQAogSW50cm9kdWN0aW9uCiBeXl5eXl5eXl5eXl4KIAotVGhpcyBjb21tYW5kIGdlbmVyYXRlcyBpbnN0YWxsYXRpb24gcnVsZXMgZm9yIGEgcHJvamVjdC4gIFJ1bGVzCi1zcGVjaWZpZWQgYnkgY2FsbHMgdG8gdGhpcyBjb21tYW5kIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnkgYXJlCi1leGVjdXRlZCBpbiBvcmRlciBkdXJpbmcgaW5zdGFsbGF0aW9uLiAgVGhlIG9yZGVyIGFjcm9zcyBkaXJlY3RvcmllcwotaXMgbm90IGRlZmluZWQuCitUaGlzIGNvbW1hbmQgZ2VuZXJhdGVzIGluc3RhbGxhdGlvbiBydWxlcyBmb3IgYSBwcm9qZWN0LiAgSW5zdGFsbCBydWxlcworc3BlY2lmaWVkIGJ5IGNhbGxzIHRvIHRoZSBgYGluc3RhbGwoKWBgIGNvbW1hbmQgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeQorYXJlIGV4ZWN1dGVkIGluIG9yZGVyIGR1cmluZyBpbnN0YWxsYXRpb24uICBJbnN0YWxsIHJ1bGVzIGluIHN1YmRpcmVjdG9yaWVzCithZGRlZCBieSBjYWxscyB0byB0aGUgOmNvbW1hbmQ6YGFkZF9zdWJkaXJlY3RvcnlgIGNvbW1hbmQgYXJlIGludGVybGVhdmVkCit3aXRoIHRob3NlIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIHJ1biBpbiB0aGUgb3JkZXIgZGVjbGFyZWQgKHNlZQorcG9saWN5IDpwb2xpY3k6YENNUDAwODJgKS4KIAogVGhlcmUgYXJlIG11bHRpcGxlIHNpZ25hdHVyZXMgZm9yIHRoaXMgY29tbWFuZC4gIFNvbWUgb2YgdGhlbSBkZWZpbmUKIGluc3RhbGxhdGlvbiBvcHRpb25zIGZvciBmaWxlcyBhbmQgdGFyZ2V0cy4gIE9wdGlvbnMgY29tbW9uIHRvCkBAIC0zMCwxMyArMzIsMjMgQEAKIAogYGBERVNUSU5BVElPTmBgCiAgIFNwZWNpZnkgdGhlIGRpcmVjdG9yeSBvbiBkaXNrIHRvIHdoaWNoIGEgZmlsZSB3aWxsIGJlIGluc3RhbGxlZC4KLSAgSWYgYSBmdWxsIHBhdGggKHdpdGggYSBsZWFkaW5nIHNsYXNoIG9yIGRyaXZlIGxldHRlcikgaXMgZ2l2ZW4KLSAgaXQgaXMgdXNlZCBkaXJlY3RseS4gIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBnaXZlbiBpdCBpcyBpbnRlcnByZXRlZAotICByZWxhdGl2ZSB0byB0aGUgdmFsdWUgb2YgdGhlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIHZhcmlhYmxlLgorICBBcmd1bWVudHMgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzLgorCisgIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBnaXZlbiBpdCBpcyBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgdmFsdWUKKyAgb2YgdGhlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIHZhcmlhYmxlLgogICBUaGUgcHJlZml4IGNhbiBiZSByZWxvY2F0ZWQgYXQgaW5zdGFsbCB0aW1lIHVzaW5nIHRoZSBgYERFU1RESVJgYAogICBtZWNoYW5pc20gZXhwbGFpbmVkIGluIHRoZSA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCB2YXJpYWJsZQogICBkb2N1bWVudGF0aW9uLgogCisgIElmIGFuIGFic29sdXRlIHBhdGggKHdpdGggYSBsZWFkaW5nIHNsYXNoIG9yIGRyaXZlIGxldHRlcikgaXMgZ2l2ZW4KKyAgaXQgaXMgdXNlZCB2ZXJiYXRpbS4KKworICBBcyBhYnNvbHV0ZSBwYXRocyBhcmUgbm90IHN1cHBvcnRlZCBieSA6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCBpbnN0YWxsZXIKKyAgZ2VuZXJhdG9ycywgaXQgaXMgcHJlZmVyYWJsZSB0byB1c2UgcmVsYXRpdmUgcGF0aHMgdGhyb3VnaG91dC4KKyAgSW4gcGFydGljdWxhciwgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIHBhdGhzIGFic29sdXRlIGJ5IHByZXBlbmRpbmcKKyAgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGA7IHRoaXMgcHJlZml4IGlzIHVzZWQgYnkgZGVmYXVsdCBpZgorICB0aGUgREVTVElOQVRJT04gaXMgYSByZWxhdGl2ZSBwYXRoLgorCiBgYFBFUk1JU1NJT05TYGAKICAgU3BlY2lmeSBwZXJtaXNzaW9ucyBmb3IgaW5zdGFsbGVkIGZpbGVzLiAgVmFsaWQgcGVybWlzc2lvbnMgYXJlCiAgIGBgT1dORVJfUkVBRGBgLCBgYE9XTkVSX1dSSVRFYGAsIGBgT1dORVJfRVhFQ1VURWBgLCBgYEdST1VQX1JFQURgYCwKQEAgLTExOSwzMSArMTMxLDM4IEBACiAgICAgICAgICAgKQogCiBUaGUgYGBUQVJHRVRTYGAgZm9ybSBzcGVjaWZpZXMgcnVsZXMgZm9yIGluc3RhbGxpbmcgdGFyZ2V0cyBmcm9tIGEKLXByb2plY3QuICBUaGVyZSBhcmUgc2V2ZXJhbCBraW5kcyBvZiB0YXJnZXQgZmlsZXMgdGhhdCBtYXkgYmUgaW5zdGFsbGVkOgorcHJvamVjdC4gIFRoZXJlIGFyZSBzZXZlcmFsIGtpbmRzIG9mIHRhcmdldCA6cmVmOmBPdXRwdXQgQXJ0aWZhY3RzYAordGhhdCBtYXkgYmUgaW5zdGFsbGVkOgogCiBgYEFSQ0hJVkVgYAotICBTdGF0aWMgbGlicmFyaWVzIGFyZSB0cmVhdGVkIGFzIGBgQVJDSElWRWBgIHRhcmdldHMsIGV4Y2VwdCB0aG9zZQotICBtYXJrZWQgd2l0aCB0aGUgYGBGUkFNRVdPUktgYCBwcm9wZXJ0eSBvbiBtYWNPUyAoc2VlIGBgRlJBTUVXT1JLYGAKLSAgYmVsb3cuKSBGb3IgRExMIHBsYXRmb3JtcyAoYWxsIFdpbmRvd3MtYmFzZWQgc3lzdGVtcyBpbmNsdWRpbmcKLSAgQ3lnd2luKSwgdGhlIERMTCBpbXBvcnQgbGlicmFyeSBpcyB0cmVhdGVkIGFzIGFuIGBgQVJDSElWRWBgIHRhcmdldC4KLSAgT24gQUlYLCB0aGUgbGlua2VyIGltcG9ydCBmaWxlIGNyZWF0ZWQgZm9yIGV4ZWN1dGFibGVzIHdpdGgKLSAgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgaXMgdHJlYXRlZCBhcyBhbiBgYEFSQ0hJVkVgYCB0YXJnZXQuCisgIFRhcmdldCBhcnRpZmFjdHMgb2YgdGhpcyBraW5kIGluY2x1ZGU6CisKKyAgKiAqU3RhdGljIGxpYnJhcmllcyoKKyAgICAoZXhjZXB0IG9uIG1hY09TIHdoZW4gbWFya2VkIGFzIGBgRlJBTUVXT1JLYGAsIHNlZSBiZWxvdyk7CisgICogKkRMTCBpbXBvcnQgbGlicmFyaWVzKgorICAgIChvbiBhbGwgV2luZG93cy1iYXNlZCBzeXN0ZW1zIGluY2x1ZGluZyBDeWd3aW47IHRoZXkgaGF2ZSBleHRlbnNpb24KKyAgICBgYC5saWJgYCwgaW4gY29udHJhc3QgdG8gdGhlIGBgLmRsbGBgIGxpYnJhcmllcyB0aGF0IGdvIHRvIGBgUlVOVElNRWBgKTsKKyAgKiBPbiBBSVgsIHRoZSAqbGlua2VyIGltcG9ydCBmaWxlKiBjcmVhdGVkIGZvciBleGVjdXRhYmxlcyB3aXRoCisgICAgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgZW5hYmxlZC4KIAogYGBMSUJSQVJZYGAKLSAgTW9kdWxlIGxpYnJhcmllcyBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgYGBMSUJSQVJZYGAgdGFyZ2V0cy4gRm9yIG5vbi0KLSAgRExMIHBsYXRmb3JtcyBzaGFyZWQgbGlicmFyaWVzIGFyZSB0cmVhdGVkIGFzIGBgTElCUkFSWWBgIHRhcmdldHMsCi0gIGV4Y2VwdCB0aG9zZSBtYXJrZWQgd2l0aCB0aGUgYGBGUkFNRVdPUktgYCBwcm9wZXJ0eSBvbiBtYWNPUyAoc2VlCi0gIGBgRlJBTUVXT1JLYGAgYmVsb3cuKQorICBUYXJnZXQgYXJ0aWZhY3RzIG9mIHRoaXMga2luZCBpbmNsdWRlOgorCisgICogKlNoYXJlZCBsaWJyYXJpZXMqLCBleGNlcHQKKworICAgIC0gRExMcyAodGhlc2UgZ28gdG8gYGBSVU5USU1FYGAsIHNlZSBiZWxvdyksCisgICAgLSBvbiBtYWNPUyB3aGVuIG1hcmtlZCBhcyBgYEZSQU1FV09SS2BgIChzZWUgYmVsb3cpLgogCiBgYFJVTlRJTUVgYAotICBFeGVjdXRhYmxlcyBhcmUgdHJlYXRlZCBhcyBgYFJVTlRJTUVgYCBvYmplY3RzLCBleGNlcHQgdGhvc2UgbWFya2VkCi0gIHdpdGggdGhlIGBgTUFDT1NYX0JVTkRMRWBgIHByb3BlcnR5IG9uIG1hY09TIChzZWUgYGBCVU5ETEVgYCBiZWxvdy4pCi0gIEZvciBETEwgcGxhdGZvcm1zIChhbGwgV2luZG93cy1iYXNlZCBzeXN0ZW1zIGluY2x1ZGluZyBDeWd3aW4pLCB0aGUKLSAgRExMIHBhcnQgb2YgYSBzaGFyZWQgbGlicmFyeSBpcyB0cmVhdGVkIGFzIGEgYGBSVU5USU1FYGAgdGFyZ2V0LgorICBUYXJnZXQgYXJ0aWZhY3RzIG9mIHRoaXMga2luZCBpbmNsdWRlOgorCisgICogKkV4ZWN1dGFibGVzKgorICAgIChleGNlcHQgb24gbWFjT1Mgd2hlbiBtYXJrZWQgYXMgYGBNQUNPU1hfQlVORExFYGAsIHNlZSBgYEJVTkRMRWBgIGJlbG93KTsKKyAgKiBETExzIChvbiBhbGwgV2luZG93cy1iYXNlZCBzeXN0ZW1zIGluY2x1ZGluZyBDeWd3aW47IG5vdGUgdGhhdCB0aGUKKyAgICBhY2NvbXBhbnlpbmcgaW1wb3J0IGxpYnJhcmllcyBhcmUgb2Yga2luZCBgYEFSQ0hJVkVgYCkuCiAKIGBgT0JKRUNUU2BgCi0gIE9iamVjdCBsaWJyYXJpZXMgKGEgc2ltcGxlIGdyb3VwIG9mIG9iamVjdCBmaWxlcykgYXJlIGFsd2F5cyB0cmVhdGVkCi0gIGFzIGBgT0JKRUNUU2BgIHRhcmdldHMuCisgIE9iamVjdCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggKm9iamVjdCBsaWJyYXJpZXMqLgogCiBgYEZSQU1FV09SS2BgCiAgIEJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIG1hcmtlZCB3aXRoIHRoZSBgYEZSQU1FV09SS2BgCkBAIC02MzAsNiArNjQ5LDEzIEBACiBgYChJTVBPUlRFRF8pP0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyhfPENPTkZJRz4pP2BgIHRvIGJlIGV4cG9ydGVkLCB3aGVuCiBwb2xpY3kgOnBvbGljeTpgQ01QMDAyMmAgaXMgYGBORVdgYC4KIAorLi4gbm90ZTo6CisgIFRoZSBpbnN0YWxsZWQgYGA8ZXhwb3J0LW5hbWU+LmNtYWtlYGAgZmlsZSBtYXkgY29tZSB3aXRoIGFkZGl0aW9uYWwKKyAgcGVyLWNvbmZpZ3VyYXRpb24gYGA8ZXhwb3J0LW5hbWU+LSouY21ha2VgYCBmaWxlcyB0byBiZSBsb2FkZWQgYnkKKyAgZ2xvYmJpbmcuICBEbyBub3QgdXNlIGFuIGV4cG9ydCBuYW1lIHRoYXQgaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UKKyAgbmFtZSBpbiBjb21iaW5hdGlvbiB3aXRoIGluc3RhbGxpbmcgYSBgYDxwYWNrYWdlLW5hbWU+LWNvbmZpZy5jbWFrZWBgCisgIGZpbGUgb3IgdGhlIGxhdHRlciBtYXkgYmUgaW5jb3JyZWN0bHkgbWF0Y2hlZCBieSB0aGUgZ2xvYiBhbmQgbG9hZGVkLgorCiBXaGVuIGEgYGBDT01QT05FTlRgYCBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBsaXN0ZWQgYGA8Y29tcG9uZW50PmBgIGltcGxpY2l0bHkKIGRlcGVuZHMgb24gYWxsIGNvbXBvbmVudHMgbWVudGlvbmVkIGluIHRoZSBleHBvcnQgc2V0LiBUaGUgZXhwb3J0ZWQKIGBgPG5hbWU+LmNtYWtlYGAgZmlsZSB3aWxsIHJlcXVpcmUgZWFjaCBvZiB0aGUgZXhwb3J0ZWQgY29tcG9uZW50cyB0byBiZQpAQCAtNjg0LDYgKzcxMCwxMSBAQAogR2VuZXJhdGVkIEluc3RhbGxhdGlvbiBTY3JpcHQKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKKy4uIG5vdGU6OgorCisgIFVzZSBvZiB0aGlzIGZlYXR1cmUgaXMgbm90IHJlY29tbWVuZGVkLiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlCisgIGBgLS1pbnN0YWxsYGAgYXJndW1lbnQgb2YgOm1hbnVhbDpgY21ha2UoMSlgIGluc3RlYWQuCisKIFRoZSBgYGluc3RhbGwoKWBgIGNvbW1hbmQgZ2VuZXJhdGVzIGEgZmlsZSwgYGBjbWFrZV9pbnN0YWxsLmNtYWtlYGAsIGluc2lkZQogdGhlIGJ1aWxkIGRpcmVjdG9yeSwgd2hpY2ggaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBnZW5lcmF0ZWQgaW5zdGFsbCB0YXJnZXQKIGFuZCBieSBDUGFjay4gWW91IGNhbiBhbHNvIGludm9rZSB0aGlzIHNjcmlwdCBtYW51YWxseSB3aXRoIGBgY21ha2UgLVBgYC4gVGhpcwpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2xpc3QucnN0IGIvSGVscC9jb21tYW5kL2xpc3QucnN0CmluZGV4IDUwYmY0MTcuLjRkMzM5YTAgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9saXN0LnJzdAorKysgYi9IZWxwL2NvbW1hbmQvbGlzdC5yc3QKQEAgLTMwOCw2ICszMDgsMTMgQEAKICogYGBTVFJJTkdgYDogU29ydHMgYSBsaXN0IG9mIHN0cmluZ3MgYWxwaGFiZXRpY2FsbHkuICBUaGlzIGlzIHRoZQogICBkZWZhdWx0IGJlaGF2aW9yIGlmIHRoZSBgYENPTVBBUkVgYCBvcHRpb24gaXMgbm90IGdpdmVuLgogKiBgYEZJTEVfQkFTRU5BTUVgYDogU29ydHMgYSBsaXN0IG9mIHBhdGhuYW1lcyBvZiBmaWxlcyBieSB0aGVpciBiYXNlbmFtZXMuCisqIGBgTkFUVVJBTGBgOiBTb3J0cyBhIGxpc3Qgb2Ygc3RyaW5ncyB1c2luZyBuYXR1cmFsIG9yZGVyCisgIChzZWUgYGBzdHJ2ZXJzY21wKDMpYGAgbWFudWFsKSwgaS5lLiBzdWNoIHRoYXQgY29udGlndW91cyBkaWdpdHMKKyAgYXJlIGNvbXBhcmVkIGFzIHdob2xlIG51bWJlcnMuCisgIEZvciBleGFtcGxlOiB0aGUgZm9sbG93aW5nIGxpc3QgYDEwLjAgMS4xIDIuMSA4LjAgMi4wIDMuMWAKKyAgd2lsbCBiZSBzb3J0ZWQgYXMgYDEuMSAyLjAgMi4xIDMuMSA4LjAgMTAuMGAgaWYgdGhlIGBgTkFUVVJBTGBgCisgIGNvbXBhcmlzb24gaXMgc2VsZWN0ZWQgd2hlcmUgaXQgd2lsbCBiZSBzb3J0ZWQgYXMKKyAgYDEuMSAxMC4wIDIuMCAyLjEgMy4xIDguMGAgd2l0aCB0aGUgYGBTVFJJTkdgYCBjb21wYXJpc29uLgogCiBVc2UgdGhlIGBgQ0FTRWBgIGtleXdvcmQgdG8gc2VsZWN0IGEgY2FzZSBzZW5zaXRpdmUgb3IgY2FzZSBpbnNlbnNpdGl2ZQogc29ydCBtb2RlLiAgVGhlIGBgPGNhc2U+YGAgb3B0aW9uIHNob3VsZCBiZSBvbmUgb2Y6CmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvbWFjcm8ucnN0IGIvSGVscC9jb21tYW5kL21hY3JvLnJzdAppbmRleCAwMDhkMDQ5Li43OTdhOTBkIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvbWFjcm8ucnN0CisrKyBiL0hlbHAvY29tbWFuZC9tYWNyby5yc3QKQEAgLTQyLDExICs0MiwxNSBAQAogICBmb28oKQogICBGb28oKQogICBGT08oKQorICBjbWFrZV9sYW5ndWFnZShDQUxMIGZvbykKIAogYW5kIHNvIG9uLiBIb3dldmVyLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBzdGF5IHdpdGggdGhlCiBjYXNlIGNob3NlbiBpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gIFR5cGljYWxseSBtYWNyb3MgdXNlCiBhbGwtbG93ZXJjYXNlIG5hbWVzLgogCitUaGUgOmNvbW1hbmQ6YGNtYWtlX2xhbmd1YWdlKENBTEwgLi4uKWAgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCitpbnZva2UgdGhlIG1hY3JvLgorCiBBcmd1bWVudHMKIF5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvb3B0aW9uLnJzdCBiL0hlbHAvY29tbWFuZC9vcHRpb24ucnN0CmluZGV4IDg5NTYzMDcuLjAyYjhkYWMgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9vcHRpb24ucnN0CisrKyBiL0hlbHAvY29tbWFuZC9vcHRpb24ucnN0CkBAIC05LDcgKzksNyBAQAogCiBQcm92aWRlcyBhbiBvcHRpb24gZm9yIHRoZSB1c2VyIHRvIHNlbGVjdCBhcyBgYE9OYGAgb3IgYGBPRkZgYC4KIElmIG5vIGluaXRpYWwgYGA8dmFsdWU+YGAgaXMgcHJvdmlkZWQsIGBgT0ZGYGAgaXMgdXNlZC4KLUlmIGBgPHZhcmlhYmxlPmBgIGlzIGFscmVhZHkgc2V0IGFzIGEgbm9ybWFsIHZhcmlhYmxlCitJZiBgYDx2YXJpYWJsZT5gYCBpcyBhbHJlYWR5IHNldCBhcyBhIG5vcm1hbCBvciBjYWNoZSB2YXJpYWJsZSwKIHRoZW4gdGhlIGNvbW1hbmQgZG9lcyBub3RoaW5nIChzZWUgcG9saWN5IDpwb2xpY3k6YENNUDAwNzdgKS4KIAogSWYgeW91IGhhdmUgb3B0aW9ucyB0aGF0IGRlcGVuZCBvbiB0aGUgdmFsdWVzIG9mIG90aGVyIG9wdGlvbnMsIHNlZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3NlcGFyYXRlX2FyZ3VtZW50cy5yc3QgYi9IZWxwL2NvbW1hbmQvc2VwYXJhdGVfYXJndW1lbnRzLnJzdAppbmRleCBmYmNhODU5Li5hYjNkNWMxIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvc2VwYXJhdGVfYXJndW1lbnRzLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvc2VwYXJhdGVfYXJndW1lbnRzLnJzdApAQCAtMTksNyArMTksNyBAQAogYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcga2V5d29yZHM6CiAKIGBgVU5JWF9DT01NQU5EYGAKLSAgQXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgYnkgdW5xdW90ZWQgd2hpdGVzcGFjZS4KKyAgQXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgdW5xdW90ZWQgd2hpdGVzcGFjZS4KICAgQm90aCBzaW5nbGUtcXVvdGUgYW5kIGRvdWJsZS1xdW90ZSBwYWlycyBhcmUgcmVzcGVjdGVkLgogICBBIGJhY2tzbGFzaCBlc2NhcGVzIHRoZSBuZXh0IGxpdGVyYWwgY2hhcmFjdGVyIChgYFwiYGAgaXMgYGAiYGApOwogICB0aGVyZSBhcmUgbm8gc3BlY2lhbCBlc2NhcGVzIChgYFxuYGAgaXMganVzdCBgYG5gYCkuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvc2V0X3Byb3BlcnR5LnJzdCBiL0hlbHAvY29tbWFuZC9zZXRfcHJvcGVydHkucnN0CmluZGV4IGVjMDhjOGYuLjkzYzJkOWMgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9zZXRfcHJvcGVydHkucnN0CisrKyBiL0hlbHAvY29tbWFuZC9zZXRfcHJvcGVydHkucnN0CkBAIC04LDEyICs4LDE0IEBACiAgIHNldF9wcm9wZXJ0eSg8R0xPQkFMICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICBESVJFQ1RPUlkgWzxkaXI+XSAgICAgICAgICAgfAogICAgICAgICAgICAgICAgIFRBUkdFVCAgICBbPHRhcmdldDE+IC4uLl0gICB8Ci0gICAgICAgICAgICAgICAgU09VUkNFICAgIFs8c3JjMT4gLi4uXSAgICAgIHwKKyAgICAgICAgICAgICAgICBTT1VSQ0UgICAgWzxzcmMxPiAuLi5dCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtESVJFQ1RPUlkgPGRpcnM+IC4uLl0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICBbVEFSR0VUX0RJUkVDVE9SWSA8dGFyZ2V0cz4gLi4uXQogICAgICAgICAgICAgICAgIElOU1RBTEwgICBbPGZpbGUxPiAuLi5dICAgICB8CiAgICAgICAgICAgICAgICAgVEVTVCAgICAgIFs8dGVzdDE+IC4uLl0gICAgIHwKICAgICAgICAgICAgICAgICBDQUNIRSAgICAgWzxlbnRyeTE+IC4uLl0gICAgPgogICAgICAgICAgICAgICAgW0FQUEVORF0gW0FQUEVORF9TVFJJTkddCi0gICAgICAgICAgICAgICBQUk9QRVJUWSA8bmFtZT4gW3ZhbHVlMSAuLi5dKQorICAgICAgICAgICAgICAgUFJPUEVSVFkgPG5hbWU+IFs8dmFsdWUxPiAuLi5dKQogCiBTZXRzIG9uZSBwcm9wZXJ0eSBvbiB6ZXJvIG9yIG1vcmUgb2JqZWN0cyBvZiBhIHNjb3BlLgogCkBAIC0zMyw5ICszNSwyMyBAQAogICBTZWUgYWxzbyB0aGUgOmNvbW1hbmQ6YHNldF90YXJnZXRfcHJvcGVydGllc2AgY29tbWFuZC4KIAogYGBTT1VSQ0VgYAotICBTY29wZSBtYXkgbmFtZSB6ZXJvIG9yIG1vcmUgc291cmNlIGZpbGVzLiAgTm90ZSB0aGF0IHNvdXJjZQotICBmaWxlIHByb3BlcnRpZXMgYXJlIHZpc2libGUgb25seSB0byB0YXJnZXRzIGFkZGVkIGluIHRoZSBzYW1lCi0gIGRpcmVjdG9yeSAoYGBDTWFrZUxpc3RzLnR4dGBgKS4KKyAgU2NvcGUgbWF5IG5hbWUgemVybyBvciBtb3JlIHNvdXJjZSBmaWxlcy4gIEJ5IGRlZmF1bHQsIHNvdXJjZSBmaWxlIHByb3BlcnRpZXMKKyAgYXJlIG9ubHkgdmlzaWJsZSB0byB0YXJnZXRzIGFkZGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAoYGBDTWFrZUxpc3RzLnR4dGBgKS4KKyAgVmlzaWJpbGl0eSBjYW4gYmUgc2V0IGluIG90aGVyIGRpcmVjdG9yeSBzY29wZXMgdXNpbmcgb25lIG9yIGJvdGggb2YgdGhlCisgIGZvbGxvd2luZyBzdWItb3B0aW9uczoKKworICBgYERJUkVDVE9SWSA8ZGlycz4uLi5gYAorICAgIFRoZSBzb3VyY2UgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHNldCBpbiBlYWNoIG9mIHRoZSBgYDxkaXJzPmBgCisgICAgZGlyZWN0b3JpZXMnIHNjb3Blcy4gIENNYWtlIG11c3QgYWxyZWFkeSBrbm93IGFib3V0IGVhY2ggb2YgdGhlc2UKKyAgICBzb3VyY2UgZGlyZWN0b3JpZXMsIGVpdGhlciBieSBoYXZpbmcgYWRkZWQgdGhlbSB0aHJvdWdoIGEgY2FsbCB0bworICAgIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBvciBpdCBiZWluZyB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgUmVsYXRpdmUgcGF0aHMgYXJlIHRyZWF0ZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc291cmNlIGRpcmVjdG9yeS4KKworICBgYFRBUkdFVF9ESVJFQ1RPUlkgPHRhcmdldHM+Li4uYGAKKyAgICBUaGUgc291cmNlIGZpbGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgaW4gZWFjaCBvZiB0aGUgZGlyZWN0b3J5IHNjb3BlcworICAgIHdoZXJlIGFueSBvZiB0aGUgc3BlY2lmaWVkIGBgPHRhcmdldHM+YGAgd2VyZSBjcmVhdGVkICh0aGUgYGA8dGFyZ2V0cz5gYAorICAgIG11c3QgdGhlcmVmb3JlIGFscmVhZHkgZXhpc3QpLgorCiAgIFNlZSBhbHNvIHRoZSA6Y29tbWFuZDpgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzYCBjb21tYW5kLgogCiBgYElOU1RBTExgYApAQCAtNjYsNyArODIsOCBAQAogcHJvcGVydHkgdmFsdWUgaW4gdGhlIGZvcm0gb2YgYSBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QuCiAKIElmIHRoZSBgYEFQUEVORGBgIG9wdGlvbiBpcyBnaXZlbiB0aGUgbGlzdCBpcyBhcHBlbmRlZCB0byBhbnkgZXhpc3RpbmcKLXByb3BlcnR5IHZhbHVlLiAgSWYgdGhlIGBgQVBQRU5EX1NUUklOR2BgIG9wdGlvbiBpcyBnaXZlbiB0aGUgc3RyaW5nIGlzCitwcm9wZXJ0eSB2YWx1ZSAoZXhjZXB0IHRoYXQgZW1wdHkgdmFsdWVzIGFyZSBpZ25vcmVkIGFuZCBub3QgYXBwZW5kZWQpLgorSWYgdGhlIGBgQVBQRU5EX1NUUklOR2BgIG9wdGlvbiBpcyBnaXZlbiB0aGUgc3RyaW5nIGlzCiBhcHBlbmRlZCB0byBhbnkgZXhpc3RpbmcgcHJvcGVydHkgdmFsdWUgYXMgc3RyaW5nLCBpLmUuIGl0IHJlc3VsdHMgaW4gYQogbG9uZ2VyIHN0cmluZyBhbmQgbm90IGEgbGlzdCBvZiBzdHJpbmdzLiAgV2hlbiB1c2luZyBgYEFQUEVORGBgIG9yCiBgYEFQUEVORF9TVFJJTkdgYCB3aXRoIGEgcHJvcGVydHkgZGVmaW5lZCB0byBzdXBwb3J0IGBgSU5IRVJJVEVEYGAKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9zZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMucnN0IGIvSGVscC9jb21tYW5kL3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcy5yc3QKaW5kZXggYWI5NWQ3MC4uOTU1OGI0MCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcy5yc3QKKysrIGIvSGVscC9jb21tYW5kL3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcy5yc3QKQEAgLTUsMTUgKzUsMzMgQEAKIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKLSAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKFtmaWxlMSBbZmlsZTIgWy4uLl1dXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBwcm9wMSB2YWx1ZTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wMiB2YWx1ZTIgWy4uLl1dKQorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoPGZpbGVzPiAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtESVJFQ1RPUlkgPGRpcnM+IC4uLl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUQVJHRVRfRElSRUNUT1JZIDx0YXJnZXRzPiAuLi5dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIDxwcm9wMT4gPHZhbHVlMT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs8cHJvcDI+IDx2YWx1ZTI+XSAuLi4pCiAKIFNldHMgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIHVzaW5nIGEga2V5L3ZhbHVlIHBhaXJlZAogbGlzdC4KIAorQnkgZGVmYXVsdCwgc291cmNlIGZpbGUgcHJvcGVydGllcyBhcmUgb25seSB2aXNpYmxlIHRvIHRhcmdldHMgYWRkZWQgaW4gdGhlCitzYW1lIGRpcmVjdG9yeSAoYGBDTWFrZUxpc3RzLnR4dGBgKS4gIFZpc2liaWxpdHkgY2FuIGJlIHNldCBpbiBvdGhlciBkaXJlY3RvcnkKK3Njb3BlcyB1c2luZyBvbmUgb3IgYm90aCBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKK2BgRElSRUNUT1JZIDxkaXJzPi4uLmBgCisgIFRoZSBzb3VyY2UgZmlsZSBwcm9wZXJ0aWVzIHdpbGwgYmUgc2V0IGluIGVhY2ggb2YgdGhlIGBgPGRpcnM+YGAKKyAgZGlyZWN0b3JpZXMnIHNjb3Blcy4gIENNYWtlIG11c3QgYWxyZWFkeSBrbm93IGFib3V0IGVhY2ggb2YgdGhlc2UKKyAgc291cmNlIGRpcmVjdG9yaWVzLCBlaXRoZXIgYnkgaGF2aW5nIGFkZGVkIHRoZW0gdGhyb3VnaCBhIGNhbGwgdG8KKyAgOmNvbW1hbmQ6YGFkZF9zdWJkaXJlY3RvcnlgIG9yIGl0IGJlaW5nIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KKyAgUmVsYXRpdmUgcGF0aHMgYXJlIHRyZWF0ZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc291cmNlIGRpcmVjdG9yeS4KKworYGBUQVJHRVRfRElSRUNUT1JZIDx0YXJnZXRzPi4uLmBgCisgIFRoZSBzb3VyY2UgZmlsZSBwcm9wZXJ0aWVzIHdpbGwgYmUgc2V0IGluIGVhY2ggb2YgdGhlIGRpcmVjdG9yeSBzY29wZXMKKyAgd2hlcmUgYW55IG9mIHRoZSBzcGVjaWZpZWQgYGA8dGFyZ2V0cz5gYCB3ZXJlIGNyZWF0ZWQgKHRoZSBgYDx0YXJnZXRzPmBgCisgIG11c3QgdGhlcmVmb3JlIGFscmVhZHkgZXhpc3QpLgorCitVc2UgOmNvbW1hbmQ6YGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eWAgdG8gZ2V0IHByb3BlcnR5IHZhbHVlcy4KIFNlZSBhbHNvIHRoZSA6Y29tbWFuZDpgc2V0X3Byb3BlcnR5KFNPVVJDRSlgIGNvbW1hbmQuCiAKIFNlZSA6cmVmOmBTb3VyY2UgRmlsZSBQcm9wZXJ0aWVzYCBmb3IgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBrbm93bgotdG8gQ01ha2UuICBTb3VyY2UgZmlsZSBwcm9wZXJ0aWVzIGFyZSB2aXNpYmxlIG9ubHkgdG8gdGFyZ2V0cyBhZGRlZAotaW4gdGhlIHNhbWUgZGlyZWN0b3J5IChgYENNYWtlTGlzdHMudHh0YGApLgordG8gQ01ha2UuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvc291cmNlX2dyb3VwLnJzdCBiL0hlbHAvY29tbWFuZC9zb3VyY2VfZ3JvdXAucnN0CmluZGV4IDY2MjNjOTguLjVhZTllNTEgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9zb3VyY2VfZ3JvdXAucnN0CisrKyBiL0hlbHAvY29tbWFuZC9zb3VyY2VfZ3JvdXAucnN0CkBAIC0zNywxMSArMzcsMTMgQEAKIElmIG5vIGdyb3VwIGV4cGxpY2l0bHkgbGlzdHMgdGhlIGZpbGUsIHRoZSAqbGFzdCogZ3JvdXAgd2hvc2UKIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIHRoZSBmaWxlIHdpbGwgYmUgZmF2b3JlZC4KIAotVGhlIGBgPG5hbWU+YGAgb2YgdGhlIGdyb3VwIGFuZCBgYDxwcmVmaXg+YGAgYXJndW1lbnQgbWF5IGNvbnRhaW4gYmFja3NsYXNoZXMKLXRvIHNwZWNpZnkgc3ViZ3JvdXBzOgorVGhlIGBgPG5hbWU+YGAgb2YgdGhlIGdyb3VwIGFuZCBgYDxwcmVmaXg+YGAgYXJndW1lbnQgbWF5IGNvbnRhaW4gZm9yd2FyZAorc2xhc2hlcyBvciBiYWNrc2xhc2hlcyB0byBzcGVjaWZ5IHN1Ymdyb3Vwcy4gIEJhY2tzbGFzaGVzIG5lZWQgdG8gYmUgZXNjYXBlZAorYXBwcm9wcmlhdGVseToKIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKKyAgc291cmNlX2dyb3VwKGJhc2Uvc3ViZGlyIC4uLikKICAgc291cmNlX2dyb3VwKG91dGVyXFxpbm5lciAuLi4pCiAgIHNvdXJjZV9ncm91cChUUkVFIDxyb290PiBQUkVGSVggc291cmNlc1xcaW5jIC4uLikKIApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3N0cmluZy5yc3QgYi9IZWxwL2NvbW1hbmQvc3RyaW5nLnJzdAppbmRleCA4MWEyMDYxLi5jZmNmOTE0IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvc3RyaW5nLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvc3RyaW5nLnJzdApAQCAtMTEsOCArMTEsNiBAQAogICBgU2VhcmNoIGFuZCBSZXBsYWNlYF8KICAgICBzdHJpbmcoYEZJTkRgXyA8c3RyaW5nPiA8c3Vic3RyaW5nPiA8b3V0LXZhcj4gWy4uLl0pCiAgICAgc3RyaW5nKGBSRVBMQUNFYF8gPG1hdGNoLXN0cmluZz4gPHJlcGxhY2Utc3RyaW5nPiA8b3V0LXZhcj4gPGlucHV0Pi4uLikKLQotICBgUmVndWxhciBFeHByZXNzaW9uc2BfCiAgICAgc3RyaW5nKGBSRUdFWCBNQVRDSGBfIDxtYXRjaC1yZWdleD4gPG91dC12YXI+IDxpbnB1dD4uLi4pCiAgICAgc3RyaW5nKGBSRUdFWCBNQVRDSEFMTGBfIDxtYXRjaC1yZWdleD4gPG91dC12YXI+IDxpbnB1dD4uLi4pCiAgICAgc3RyaW5nKGBSRUdFWCBSRVBMQUNFYF8gPG1hdGNoLXJlZ2V4PiA8cmVwbGFjZS1leHByPiA8b3V0LXZhcj4gPGlucHV0Pi4uLikKQEAgLTM4LDYgKzM2LDcgQEAKIAogICBgR2VuZXJhdGlvbmBfCiAgICAgc3RyaW5nKGBBU0NJSWBfIDxudW1iZXI+Li4uIDxvdXQtdmFyPikKKyAgICBzdHJpbmcoYEhFWGBfIDxzdHJpbmc+IDxvdXQtdmFyPikKICAgICBzdHJpbmcoYENPTkZJR1VSRWBfIDxzdHJpbmc+IDxvdXQtdmFyPiBbLi4uXSkKICAgICBzdHJpbmcoYE1BS0VfQ19JREVOVElGSUVSYF8gPHN0cmluZz4gPG91dC12YXI+KQogICAgIHN0cmluZyhgUkFORE9NYF8gWzxvcHRpb24+Li4uXSA8b3V0LXZhcj4pCkBAIC00Nyw2ICs0Niw5IEBACiBTZWFyY2ggYW5kIFJlcGxhY2UKIF5eXl5eXl5eXl5eXl5eXl5eXgogCitTZWFyY2ggYW5kIFJlcGxhY2UgV2l0aCBQbGFpbiBTdHJpbmdzCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCisKIC4uIF9GSU5EOgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKQEAgLTc0LDggKzc2LDggQEAKIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mIGBgPG1hdGNoX3N0cmluZz5gYCBpbiB0aGUgYGA8aW5wdXQ+YGAKIHdpdGggYGA8cmVwbGFjZV9zdHJpbmc+YGAgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIGBgPG91dHB1dF92YXJpYWJsZT5gYC4KIAotUmVndWxhciBFeHByZXNzaW9ucwotXl5eXl5eXl5eXl5eXl5eXl5eXgorU2VhcmNoIGFuZCBSZXBsYWNlIFdpdGggUmVndWxhciBFeHByZXNzaW9ucworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgogCiAuLiBfYFJFR0VYIE1BVENIYDoKIApAQCAtODcsNiArODksNyBAQAogTWF0Y2ggdGhlIGBgPHJlZ3VsYXJfZXhwcmVzc2lvbj5gYCBvbmNlIGFuZCBzdG9yZSB0aGUgbWF0Y2ggaW4gdGhlCiBgYDxvdXRwdXRfdmFyaWFibGU+YGAuCiBBbGwgYGA8aW5wdXQ+YGAgYXJndW1lbnRzIGFyZSBjb25jYXRlbmF0ZWQgYmVmb3JlIG1hdGNoaW5nLgorUmVndWxhciBleHByZXNzaW9ucyBhcmUgc3BlY2lmaWVkIGluIHRoZSBzdWJzZWN0aW9uIGp1c3QgYmVsb3cuCiAKIC4uIF9gUkVHRVggTUFUQ0hBTExgOgogCkBAIC0zNTMsNiArMzU2LDE2IEBACiAKIENvbnZlcnQgYWxsIG51bWJlcnMgaW50byBjb3JyZXNwb25kaW5nIEFTQ0lJIGNoYXJhY3RlcnMuCiAKKy4uIF9IRVg6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHN0cmluZyhIRVggPHN0cmluZz4gPG91dHB1dF92YXJpYWJsZT4pCisKK0NvbnZlcnQgZWFjaCBieXRlIGluIHRoZSBpbnB1dCBgYDxzdHJpbmc+YGAgdG8gaXRzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uCithbmQgc3RvcmUgdGhlIGNvbmNhdGVuYXRlZCBoZXggZGlnaXRzIGluIHRoZSBgYDxvdXRwdXRfdmFyaWFibGU+YGAuIExldHRlcnMgaW4KK3RoZSBvdXRwdXQgKGBgYWBgIHRocm91Z2ggYGBmYGApIGFyZSBpbiBsb3dlcmNhc2UuCisKIC4uIF9DT05GSUdVUkU6CiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX2ZlYXR1cmVzLnJzdCBiL0hlbHAvY29tbWFuZC90YXJnZXRfY29tcGlsZV9mZWF0dXJlcy5yc3QKaW5kZXggYzU0MDFlNi4uYjUwYmUzNCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX2ZlYXR1cmVzLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMucnN0CkBAIC0xLDYgKzEsOCBAQAogdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBBZGQgZXhwZWN0ZWQgY29tcGlsZXIgZmVhdHVyZXMgdG8gYSB0YXJnZXQuCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX29wdGlvbnMucnN0IGIvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX29wdGlvbnMucnN0CmluZGV4IDQ3ZTdkODYuLjNjNzMzYzUgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC90YXJnZXRfY29tcGlsZV9vcHRpb25zLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5yc3QKQEAgLTQ2LDMgKzQ2LDUgQEAKIGFuZCA6Y29tbWFuZDpgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNgLgogCiBGb3IgZGlyZWN0b3J5LXdpZGUgc2V0dGluZ3MsIHRoZXJlIGlzIHRoZSBjb21tYW5kIDpjb21tYW5kOmBhZGRfY29tcGlsZV9vcHRpb25zYC4KKworRm9yIGZpbGUtc3BlY2lmaWMgc2V0dGluZ3MsIHRoZXJlIGlzIHRoZSBzb3VyY2UgZmlsZSBwcm9wZXJ0eSA6cHJvcF9zZjpgQ09NUElMRV9PUFRJT05TYC4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC90YXJnZXRfbGlua19kaXJlY3Rvcmllcy5yc3QgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMucnN0CmluZGV4IDc2ZGE5NGQuLmJiNzVhM2QgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC90YXJnZXRfbGlua19kaXJlY3Rvcmllcy5yc3QKKysrIGIvSGVscC9jb21tYW5kL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzLnJzdApAQCAtMSw2ICsxLDggQEAKIHRhcmdldF9saW5rX2RpcmVjdG9yaWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIEFkZCBsaW5rIGRpcmVjdG9yaWVzIHRvIGEgdGFyZ2V0LgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC90YXJnZXRfbGlua19vcHRpb25zLnJzdCBiL0hlbHAvY29tbWFuZC90YXJnZXRfbGlua19vcHRpb25zLnJzdAppbmRleCBiNWFiYmM0Li5lNTllMGUxIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvdGFyZ2V0X2xpbmtfb3B0aW9ucy5yc3QKKysrIGIvSGVscC9jb21tYW5kL3RhcmdldF9saW5rX29wdGlvbnMucnN0CkBAIC0xLDYgKzEsOCBAQAogdGFyZ2V0X2xpbmtfb3B0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIEFkZCBvcHRpb25zIHRvIHRoZSBsaW5rIHN0ZXAgZm9yIGFuIGV4ZWN1dGFibGUsIHNoYXJlZCBsaWJyYXJ5IG9yIG1vZHVsZQogbGlicmFyeSB0YXJnZXQuCiAKQEAgLTQzLDYgKzQ1LDggQEAKIG1hbnVhbCBmb3IgYXZhaWxhYmxlIGV4cHJlc3Npb25zLiAgU2VlIHRoZSA6bWFudWFsOmBjbWFrZS1idWlsZHN5c3RlbSg3KWAKIG1hbnVhbCBmb3IgbW9yZSBvbiBkZWZpbmluZyBidWlsZHN5c3RlbSBwcm9wZXJ0aWVzLgogCisuLiBpbmNsdWRlOjogREVWSUNFX0xJTktfT1BUSU9OUy50eHQKKwogLi4gaW5jbHVkZTo6IE9QVElPTlNfU0hFTEwudHh0CiAKIC4uIGluY2x1ZGU6OiBMSU5LX09QVElPTlNfTElOS0VSLnR4dApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMucnN0IGIvSGVscC9jb21tYW5kL3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMucnN0CmluZGV4IDBkNGY0NWEuLjcwMDUxODAgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC90YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycy5yc3QKQEAgLTEsNiArMSw4IEBACiB0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQWRkIGEgbGlzdCBvZiBoZWFkZXIgZmlsZXMgdG8gcHJlY29tcGlsZS4KIAogUHJlY29tcGlsaW5nIGhlYWRlciBmaWxlcyBjYW4gc3BlZWQgdXAgY29tcGlsYXRpb24gYnkgY3JlYXRpbmcgYSBwYXJ0aWFsbHkKQEAgLTkzLDcgKzk1LDcgQEAKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFRoZSBjb21tYW5kIGFsc28gc3VwcG9ydHMgYSBzZWNvbmQgc2lnbmF0dXJlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhhdAotb25lIHRhcmdldCByZS11c2VzIGEgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGUgYXJ0ZWZhY3QgZnJvbSBhbm90aGVyIHRhcmdldAorb25lIHRhcmdldCByZS11c2VzIGEgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGUgYXJ0aWZhY3QgZnJvbSBhbm90aGVyIHRhcmdldAogaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGl0cyBvd246CiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RhcmdldF9zb3VyY2VzLnJzdCBiL0hlbHAvY29tbWFuZC90YXJnZXRfc291cmNlcy5yc3QKaW5kZXggMjdlNzM3Yi4uODU2ZDg2OSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3RhcmdldF9zb3VyY2VzLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X3NvdXJjZXMucnN0CkBAIC0xLDYgKzEsOCBAQAogdGFyZ2V0X3NvdXJjZXMKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBBZGQgc291cmNlcyB0byBhIHRhcmdldC4KIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvdmFyaWFibGVfd2F0Y2gucnN0IGIvSGVscC9jb21tYW5kL3ZhcmlhYmxlX3dhdGNoLnJzdAppbmRleCBjZTY5YmNmLi44MjkzZjVhIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvdmFyaWFibGVfd2F0Y2gucnN0CisrKyBiL0hlbHAvY29tbWFuZC92YXJpYWJsZV93YXRjaC5yc3QKQEAgLTcsOSArNyw0MiBAQAogCiAgIHZhcmlhYmxlX3dhdGNoKDx2YXJpYWJsZT4gWzxjb21tYW5kPl0pCiAKLUlmIHRoZSBzcGVjaWZpZWQgYGA8dmFyaWFibGU+YGAgY2hhbmdlcywgYSBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZAotdG8gaW5mb3JtIGFib3V0IHRoZSBjaGFuZ2UuCitJZiB0aGUgc3BlY2lmaWVkIGBgPHZhcmlhYmxlPmBgIGNoYW5nZXMgYW5kIG5vIGBgPGNvbW1hbmQ+YGAgaXMgZ2l2ZW4sCithIG1lc3NhZ2Ugd2lsbCBiZSBwcmludGVkIHRvIGluZm9ybSBhYm91dCB0aGUgY2hhbmdlLgogCi1BZGRpdGlvbmFsbHksIGlmIGBgPGNvbW1hbmQ+YGAgaXMgZ2l2ZW4sIHRoaXMgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkLgorSWYgYGA8Y29tbWFuZD5gYCBpcyBnaXZlbiwgdGhpcyBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW5zdGVhZC4KIFRoZSBjb21tYW5kIHdpbGwgcmVjZWl2ZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKIGBgQ09NTUFORCg8dmFyaWFibGU+IDxhY2Nlc3M+IDx2YWx1ZT4gPGN1cnJlbnRfbGlzdF9maWxlPiA8c3RhY2s+KWBgCisKK2BgPHZhcmlhYmxlPmBgCisgTmFtZSBvZiB0aGUgdmFyaWFibGUgYmVpbmcgYWNjZXNzZWQuCisKK2BgPGFjY2Vzcz5gYAorIE9uZSBvZiBgYFJFQURfQUNDRVNTYGAsIGBgVU5LTk9XTl9SRUFEX0FDQ0VTU2BgLCBgYE1PRElGSUVEX0FDQ0VTU2BgLAorIGBgVU5LTk9XTl9NT0RJRklFRF9BQ0NFU1NgYCwgb3IgYGBSRU1PVkVEX0FDQ0VTU2BgLiAgVGhlIGBgVU5LTk9XTl9gYAorIHZhbHVlcyBhcmUgb25seSB1c2VkIHdoZW4gdGhlIHZhcmlhYmxlIGhhcyBuZXZlciBiZWVuIHNldC4gIE9uY2Ugc2V0LAorIHRoZXkgYXJlIG5ldmVyIHVzZWQgYWdhaW4gZHVyaW5nIHRoZSBzYW1lIENNYWtlIHJ1biwgZXZlbiBpZiB0aGUKKyB2YXJpYWJsZSBpcyBsYXRlciB1bnNldC4KKworYGA8dmFsdWU+YGAKKyBUaGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiAgT24gYSBtb2RpZmljYXRpb24sIHRoaXMgaXMgdGhlIG5ldworIChtb2RpZmllZCkgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiAgT24gcmVtb3ZhbCwgdGhlIHZhbHVlIGlzIGVtcHR5LgorCitgYDxjdXJyZW50X2xpc3RfZmlsZT5gYAorIEZ1bGwgcGF0aCB0byB0aGUgZmlsZSBkb2luZyB0aGUgYWNjZXNzLgorCitgYDxzdGFjaz5gYAorIExpc3Qgb2YgYWJzb2x1dGUgcGF0aHMgb2YgYWxsIGZpbGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2sgb2YgZmlsZQorIGluY2x1c2lvbiwgd2l0aCB0aGUgYm90dG9tLW1vc3QgZmlsZSBmaXJzdCBhbmQgdGhlIGN1cnJlbnRseQorIHByb2Nlc3NlZCBmaWxlICh0aGF0IGlzLCBgYGN1cnJlbnRfbGlzdF9maWxlYGApIGxhc3QuCisKK05vdGUgdGhhdCBmb3Igc29tZSBhY2Nlc3NlcyBzdWNoIGFzIDpjb21tYW5kOmBsaXN0KEFQUEVORClgLCB0aGUgd2F0Y2hlcgoraXMgZXhlY3V0ZWQgdHdpY2UsIGZpcnN0IHdpdGggYSByZWFkIGFjY2VzcyBhbmQgdGhlbiB3aXRoIGEgd3JpdGUgb25lLgorQWxzbyBub3RlIHRoYXQgYW4gOmNvbW1hbmQ6YGlmKERFRklORUQpYCBxdWVyeSBvbiB0aGUgdmFyaWFibGUgZG9lcyBub3QKK3JlZ2lzdGVyIGFzIGFuIGFjY2VzcyBhbmQgdGhlIHdhdGNoZXIgaXMgbm90IGV4ZWN1dGVkLgorCitPbmx5IG5vbi1jYWNoZSB2YXJpYWJsZXMgY2FuIGJlIHdhdGNoZWQgdXNpbmcgdGhpcyBjb21tYW5kLiAgQWNjZXNzIHRvCitjYWNoZSB2YXJpYWJsZXMgaXMgbmV2ZXIgd2F0Y2hlZC4gIEhvd2V2ZXIsIHRoZSBleGlzdGVuY2Ugb2YgYSBjYWNoZQordmFyaWFibGUgYGB2YXJgYCBjYXVzZXMgYWNjZXNzZXMgdG8gdGhlIG5vbi1jYWNoZSB2YXJpYWJsZSBgYHZhcmBgIHRvCitub3QgdXNlIHRoZSBgYFVOS05PV05fYGAgcHJlZml4LCBldmVuIGlmIGEgbm9uLWNhY2hlIHZhcmlhYmxlIGBgdmFyYGAKK2hhcyBuZXZlciBleGlzdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vYXJjaGl2ZS5yc3QgYi9IZWxwL2NwYWNrX2dlbi9hcmNoaXZlLnJzdAppbmRleCBkNDU1ZjRiLi4zNjU2YWEyIDEwMDY0NAotLS0gYS9IZWxwL2NwYWNrX2dlbi9hcmNoaXZlLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9hcmNoaXZlLnJzdApAQCAtMSw4ICsxLDggQEAKIENQYWNrIEFyY2hpdmUgR2VuZXJhdG9yCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1BcmNoaXZlIENQYWNrIGdlbmVyYXRvciB0aGF0IHN1cHBvcnRzIHBhY2thZ2luZyBvZiBzb3VyY2VzIGFuZCBiaW5hcmllcyBpbgotZGlmZmVyZW50IGZvcm1hdHM6CitDUGFjayBnZW5lcmF0b3IgZm9yIHBhY2thZ2luZyBmaWxlcyBpbnRvIGFuIGFyY2hpdmUsIHdoaWNoIGNhbiBoYXZlCithbnkgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgogCiAgIC0gN1ogLSA3emlwIC0gKC43eikKICAgLSBUQloyICgudGFyLmJ6MikKQEAgLTEyLDI1ICsxMiw2NCBAQAogICAtIFRaU1QgKC50YXIuenN0KQogICAtIFpJUCAoLnppcCkKIAorV2hlbiB0aGlzIGdlbmVyYXRvciBpcyBjYWxsZWQgZnJvbSBgYENQYWNrU291cmNlQ29uZmlnLmNtYWtlYGAgKG9yIHRocm91Z2gKK3RoZSBgYHBhY2thZ2Vfc291cmNlYGAgdGFyZ2V0KSwgdGhlbiB0aGUgZ2VuZXJhdGVkIGFyY2hpdmUgd2lsbCBjb250YWluIGFsbAorZmlsZXMgaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5LCBleGNlcHQgdGhvc2Ugc3BlY2lmaWVkIGluCis6dmFyaWFibGU6YENQQUNLX1NPVVJDRV9JR05PUkVfRklMRVNgLiAgVGhlIGZvbGxvd2luZyBpcyBvbmUgZXhhbXBsZSBvZgorcGFja2FnaW5nIGFsbCBzb3VyY2UgZmlsZXMgb2YgYSBwcm9qZWN0OgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUiAiVEdaIikKKyAgc2V0KENQQUNLX1NPVVJDRV9JR05PUkVfRklMRVMKKyAgICBcXC5naXQvCisgICAgYnVpbGQvCisgICAgIi4qfiQiCisgICkKKyAgc2V0KENQQUNLX1ZFUkJBVElNX1ZBUklBQkxFUyBZRVMpCisgIGluY2x1ZGUoQ1BhY2spCisKK1doZW4gdGhpcyBnZW5lcmF0b3IgaXMgY2FsbGVkIGZyb20gYGBDUGFja0NvbmZpZy5jbWFrZWBgIChvciB0aHJvdWdoIHRoZQorYGBwYWNrYWdlYGAgdGFyZ2V0KSwgdGhlbiB0aGUgZ2VuZXJhdGVkIGFyY2hpdmUgd2lsbCBjb250YWluIGFsbCBmaWxlcwordGhhdCBoYXZlIGJlZW4gaW5zdGFsbGVkIHZpYSBDTWFrZSdzIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kIChhbmQgdGhlCitkZXByZWNhdGVkIGNvbW1hbmRzIDpjb21tYW5kOmBpbnN0YWxsX2ZpbGVzYCwgOmNvbW1hbmQ6YGluc3RhbGxfcHJvZ3JhbXNgLAorYW5kIDpjb21tYW5kOmBpbnN0YWxsX3RhcmdldHNgKS4KKwogVmFyaWFibGVzIHNwZWNpZmljIHRvIENQYWNrIEFyY2hpdmUgZ2VuZXJhdG9yCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19BUkNISVZFX0ZJTEVfTkFNRQogICAgICAgICAgICAgICBDUEFDS19BUkNISVZFXzxjb21wb25lbnQ+X0ZJTEVfTkFNRQogCi0gUGFja2FnZSBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24gd2hpY2ggaXMgYWRkZWQgYXV0b21hdGljYWxseSBkZXBlbmRpbmcKLSBvbiB0aGUgYXJjaGl2ZSBmb3JtYXQuCi0KLSAqIE1hbmRhdG9yeSA6IFlFUwotICogRGVmYXVsdCAgIDogYGA8Q1BBQ0tfUEFDS0FHRV9GSUxFX05BTUU+Wy08Y29tcG9uZW50Pl0uPGV4dGVuc2lvbj5gYCB3aXRoCi0gICAgICAgICAgICAgICBzcGFjZXMgcmVwbGFjZWQgYnkgJy0nCisgIFBhY2thZ2UgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uLiBUaGUgZXh0ZW5zaW9uIGlzIGRldGVybWluZWQgZnJvbSB0aGUKKyAgYXJjaGl2ZSBmb3JtYXQgKHNlZSBsaXN0IGFib3ZlKSBhbmQgYXV0b21hdGljYWxseSBhcHBlbmRlZCB0byB0aGUgZmlsZSBuYW1lLgorICBUaGUgZGVmYXVsdCBpcyBgYDxDUEFDS19QQUNLQUdFX0ZJTEVfTkFNRT5bLTxjb21wb25lbnQ+XWBgLCB3aXRoIHNwYWNlcworICByZXBsYWNlZCBieSAnLScuCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfQVJDSElWRV9DT01QT05FTlRfSU5TVEFMTAogCi0gRW5hYmxlIGNvbXBvbmVudCBwYWNrYWdpbmcgZm9yIENQYWNrQXJjaGl2ZQorICBFbmFibGUgY29tcG9uZW50IHBhY2thZ2luZy4gSWYgZW5hYmxlZCAoT04pLCB0aGVuIHRoZSBhcmNoaXZlIGdlbmVyYXRvcgorICBjcmVhdGVzICBtdWx0aXBsZSBwYWNrYWdlcy4gVGhlIGRlZmF1bHQgaXMgT0ZGLCB3aGljaCBtZWFucyB0aGF0IGEgc2luZ2xlCisgIHBhY2thZ2UgY29udGFpbmluZyBmaWxlcyBvZiBhbGwgY29tcG9uZW50cyBpcyBnZW5lcmF0ZWQuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiBPRkYKK1ZhcmlhYmxlcyB1c2VkIGJ5IENQYWNrIEFyY2hpdmUgZ2VuZXJhdG9yCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi0gSWYgZW5hYmxlZCAoT04pIG11bHRpcGxlIHBhY2thZ2VzIGFyZSBnZW5lcmF0ZWQuIEJ5IGRlZmF1bHQgYSBzaW5nbGUgcGFja2FnZQotIGNvbnRhaW5pbmcgZmlsZXMgb2YgYWxsIGNvbXBvbmVudHMgaXMgZ2VuZXJhdGVkLgorVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGJ5IHRoZSBBcmNoaXZlIGdlbmVyYXRvciwgYnV0IGFyZSBhbHNvIGF2YWlsYWJsZSB0bworQ1BhY2sgZ2VuZXJhdG9ycyB3aGljaCBhcmUgZXNzZW50aWFsbHkgYXJjaGl2ZXMgYXQgdGhlaXIgY29yZS4gVGhlc2UgaW5jbHVkZToKKworICAtIDpjcGFja19nZW46YENQYWNrIEN5Z3dpbiBHZW5lcmF0b3JgCisgIC0gOmNwYWNrX2dlbjpgQ1BhY2sgRnJlZUJTRCBHZW5lcmF0b3JgCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfQVJDSElWRV9USFJFQURTCisKKyAgVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSB3aGVuIHBlcmZvcm1pbmcgdGhlIGNvbXByZXNzaW9uLiBJZiBzZXQgdG8KKyAgYGAwYGAsIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNvcmVzIG9uIHRoZSBtYWNoaW5lIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorICBUaGUgZGVmYXVsdCBpcyBgYDFgYCB3aGljaCBsaW1pdHMgY29tcHJlc3Npb24gdG8gYSBzaW5nbGUgdGhyZWFkLiBOb3RlIHRoYXQKKyAgbm90IGFsbCBjb21wcmVzc2lvbiBtb2RlcyBzdXBwb3J0IHRocmVhZGluZyBpbiBhbGwgZW52aXJvbm1lbnRzLiBDdXJyZW50bHksCisgIG9ubHkgdGhlIFhaIGNvbXByZXNzaW9uIG1heSBzdXBwb3J0IGl0LgorCisuLiBub3RlOjoKKworICAgIE9mZmljaWFsIENNYWtlIGJpbmFyaWVzIGF2YWlsYWJsZSBvbiBgYGNtYWtlLm9yZ2BgIHNoaXAgd2l0aCBhIGBgbGlibHptYWBgCisgICAgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIGNvbXByZXNzaW9uLgpkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vY3lnd2luLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL2N5Z3dpbi5yc3QKaW5kZXggMWM1ZjdhZi4uYzY1NjUzZSAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vY3lnd2luLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9jeWd3aW4ucnN0CkBAIC0zLDYgKzMsMTEgQEAKIAogQ3lnd2luIENQYWNrIGdlbmVyYXRvciAoQ3lnd2luKS4KIAorVmFyaWFibGVzIGFmZmVjdGluZyB0aGUgQ1BhY2sgQ3lnd2luIGdlbmVyYXRvcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisgIC0gOnZhcmlhYmxlOmBDUEFDS19BUkNISVZFX1RIUkVBRFNgCisKIFZhcmlhYmxlcyBzcGVjaWZpYyB0byBDUGFjayBDeWd3aW4gZ2VuZXJhdG9yCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9kZWIucnN0IGIvSGVscC9jcGFja19nZW4vZGViLnJzdAppbmRleCBkYjcxYzg3Li5iZjUwYzU1IDEwMDY0NAotLS0gYS9IZWxwL2NwYWNrX2dlbi9kZWIucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL2RlYi5yc3QKQEAgLTI1LDggKzI1LDggQEAKIEhlcmUgYXJlIHNvbWUgQ1BhY2sgREVCIGdlbmVyYXRvciB3aWtpIHJlc291cmNlcyB0aGF0IGFyZSBoZXJlIGZvciBoaXN0b3JpYwogcmVhc29ucyBhbmQgYXJlIG5vIGxvbmdlciBtYWludGFpbmVkIGJ1dCBtYXkgc3RpbGwgcHJvdmUgdXNlZnVsOgogCi0gLSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvd2lraXMvZG9jL2NwYWNrL0NvbmZpZ3VyYXRpb24KLSAtIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS93aWtpcy9kb2MvY3BhY2svUGFja2FnZUdlbmVyYXRvcnMjZGViLXVuaXgtb25seQorIC0gaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5Ly0vd2lraXMvZG9jL2NwYWNrL0NvbmZpZ3VyYXRpb24KKyAtIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS8tL3dpa2lzL2RvYy9jcGFjay9QYWNrYWdlR2VuZXJhdG9ycyNkZWItdW5peC1vbmx5CiAKIExpc3Qgb2YgQ1BhY2sgREVCIGdlbmVyYXRvciBzcGVjaWZpYyB2YXJpYWJsZXM6CiAKQEAgLTI4Miw3ICsyODIsNyBAQAogICAgWW91IG1heSBuZWVkIHNldCA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUlBBVEhgIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlCiAgICBpZiB5b3UgdXNlIHRoaXMgZmVhdHVyZSwgYmVjYXVzZSBpZiB5b3UgZG9uJ3QgYGBkcGtnLXNobGliZGVwc2BgCiAgICBtYXkgZmFpbCB0byBmaW5kIHlvdXIgb3duIHNoYXJlZCBsaWJzLgotICAgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS93aWtpcy9kb2MvY21ha2UvUlBBVEgtaGFuZGxpbmcKKyAgIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvLS93aWtpcy9kb2MvY21ha2UvUlBBVEgtaGFuZGxpbmcKIAogLi4gdmFyaWFibGU6OiBDUEFDS19ERUJJQU5fUEFDS0FHRV9ERUJVRwogCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9leHRlcm5hbC5yc3QgYi9IZWxwL2NwYWNrX2dlbi9leHRlcm5hbC5yc3QKaW5kZXggNDA2ZjZiZS4uN2VmMTA3MSAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vZXh0ZXJuYWwucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL2V4dGVybmFsLnJzdApAQCAtMjgxLDMgKzI4MSwxMCBAQAogICBJdCBpcyBpbnZva2VkIGFmdGVyIChvcHRpb25hbCkgc3RhZ2luZyB0b29rIHBsYWNlIGFuZCBtYXkKICAgcnVuIGFuIGV4dGVybmFsIHBhY2thZ2luZyB0b29sLiBUaGUgc2NyaXB0IGhhcyBhY2Nlc3MgdG8KICAgdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5IHRoZSBDUGFjayBjb25maWcgZmlsZS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUworCisgIFRoZSBgYENQQUNLX0VYVEVSTkFMX1BBQ0tBR0VfU0NSSVBUYGAgc2NyaXB0IG1heSBzZXQgdGhpcyBsaXN0IHZhcmlhYmxlIHRvIHRoZQorICBmdWxsIHBhdGhzIG9mIGdlbmVyYXRlZCBwYWNrYWdlIGZpbGVzLiAgQ1BhY2sgY29weSB0aGVzZSBmaWxlcyBmcm9tIHRoZSBzdGFnZQorICBkaXJlY3RvcnkgYmFjayB0byB0aGUgdG9wIGJ1aWxkIGRpcmVjdG9yeSBhbmQgcG9zc2libHkgcHJvZHVjZSBjaGVja3N1bSBmaWxlcworICBpZiB0aGUgOnZhcmlhYmxlOmBDUEFDS19QQUNLQUdFX0NIRUNLU1VNYCBpcyBzZXQuCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9mcmVlYnNkLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL2ZyZWVic2QucnN0CmluZGV4IGE4ZGQzMjAuLjQ3YTc3ODQgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL2ZyZWVic2QucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL2ZyZWVic2QucnN0CkBAIC0zLDYgKzMsMTEgQEAKIAogVGhlIGJ1aWx0IGluIChiaW5hcnkpIENQYWNrIEZyZWVCU0QgKHBrZykgZ2VuZXJhdG9yIChVbml4IG9ubHkpCiAKK1ZhcmlhYmxlcyBhZmZlY3RpbmcgdGhlIENQYWNrIEZyZWVCU0QgKHBrZykgZ2VuZXJhdG9yCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisgIC0gOnZhcmlhYmxlOmBDUEFDS19BUkNISVZFX1RIUkVBRFNgCisKIFZhcmlhYmxlcyBzcGVjaWZpYyB0byBDUGFjayBGcmVlQlNEIChwa2cpIGdlbmVyYXRvcgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL2lmdy5yc3QgYi9IZWxwL2NwYWNrX2dlbi9pZncucnN0CmluZGV4IDRhOWFiOTkuLjc3NmJiNDYgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL2lmdy5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vaWZ3LnJzdApAQCAtMSw3MyArMSwyOCBAQAogQ1BhY2sgSUZXIEdlbmVyYXRvcgogLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb25maWd1cmUgYW5kIHJ1biB0aGUgUXQgSW5zdGFsbGVyIEZyYW1ld29yayB0byBnZW5lcmF0ZSBhIFF0IGluc3RhbGxlci4KKworLi4gb25seTo6IGh0bWwKKworICAuLiBjb250ZW50czo6CisKIE92ZXJ2aWV3CiBeXl5eXl5eXgogCiBUaGlzIDptYW51YWw6YGNwYWNrIGdlbmVyYXRvciA8Y3BhY2stZ2VuZXJhdG9ycyg3KT5gIGdlbmVyYXRlcwogY29uZmlndXJhdGlvbiBhbmQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIGBRdCBJbnN0YWxsZXIgRnJhbWV3b3JrCi08aHR0cDovL2RvYy5xdC5pby9xdGluc3RhbGxlcmZyYW1ld29yay9pbmRleC5odG1sPmBfIChRdElGVykuCis8aHR0cDovL2RvYy5xdC5pby9xdGluc3RhbGxlcmZyYW1ld29yay9pbmRleC5odG1sPmBfIChRdElGVyksCithbmQgcnVucyBRdElGVyB0b29scyB0byBnZW5lcmF0ZSBhIFF0IGluc3RhbGxlci4KIAogUXRJRlcgcHJvdmlkZXMgdG9vbHMgYW5kIHV0aWxpdGllcyB0byBjcmVhdGUgaW5zdGFsbGVycyBmb3IKIHRoZSBwbGF0Zm9ybXMgc3VwcG9ydGVkIGJ5IGBRdCA8aHR0cHM6Ly93d3cucXQuaW8+YF86IExpbnV4LAogTWljcm9zb2Z0IFdpbmRvd3MsIGFuZCBtYWNPUy4KIAotVG8gbWFrZSB1c2Ugb2YgdGhpcyBnZW5lcmF0b3IsIFF0SUZXIHNob3VsZCBhbHNvIGJlIGluc3RhbGxlZC4KLVRoZSBtb2R1bGUgOm1vZHVsZTpgQ1BhY2tJRldgIGxvb2tzIGZvciB0aGUgbG9jYXRpb24gb2YgdGhlCi1RdElGVyBjb21tYW5kLWxpbmUgdXRpbGl0aWVzLgotCi1IaW50cwotXl5eXl4KLQotR2VuZXJhbGx5LCB0aGUgQ1BhY2sgYGBJRldgYCBnZW5lcmF0b3IgYXV0b21hdGljYWxseSBmaW5kcyBRdElGVyB0b29scywKLWJ1dCBpZiB5b3UgZG9uJ3QgdXNlIGEgZGVmYXVsdCBwYXRoIGZvciBpbnN0YWxsYXRpb24gb2YgdGhlIFF0SUZXIHRvb2xzLAotdGhlIHBhdGggbWF5IGJlIHNwZWNpZmllZCBpbiBlaXRoZXIgYSBDTWFrZSBvciBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZToKLQotLi4gdmFyaWFibGU6OiBDUEFDS19JRldfUk9PVAotCi0gQW4gQ01ha2UgdmFyaWFibGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgUXRJRlcgdG9vbCBzdWl0ZS4KLQotIFRoZSB2YXJpYWJsZSB3aWxsIGJlIGNhY2hlZCBpbiB0aGUgYGBDUGFja0NvbmZpZy5jbWFrZWBgIGZpbGUgYW5kIHVzZWQgYXQKLSBDUGFjayBydW50aW1lLgotCi0uLiB2YXJpYWJsZTo6IFFUSUZXRElSCi0KLSBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGljaCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBRdElGVyB0b29sCi0gc3VpdGUuCi0KLS4uIG5vdGU6OgotICBUaGUgc3BlY2lmaWVkIHBhdGggc2hvdWxkIG5vdCBjb250YWluICJiaW4iIGF0IHRoZSBlbmQKLSAgKGZvciBleGFtcGxlOiAiRDpcXERldlRvb2xzXFxRdElGVzIuMC41IikuCi0KLVRoZSA6dmFyaWFibGU6YENQQUNLX0lGV19ST09UYCB2YXJpYWJsZSBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgYW5kIG92ZXJyaWRlcwotdGhlIHZhbHVlIG9mIHRoZSA6dmFyaWFibGU6YFFUSUZXRElSYCB2YXJpYWJsZS4KLQotSW50ZXJuYXRpb25hbGl6YXRpb24KLV5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLVNvbWUgdmFyaWFibGVzIGFuZCBjb21tYW5kIGFyZ3VtZW50cyBzdXBwb3J0IGludGVybmF0aW9uYWxpemF0aW9uIHZpYQotQ01ha2Ugc2NyaXB0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUuCi0KLUluc3RhbGxlcnMgY3JlYXRlZCBieSBRdElGVyB0b29scyBoYXZlIGJ1aWx0LWluIHN1cHBvcnQgZm9yCi1pbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbWFueSBwaHJhc2VzIGFyZSBsb2NhbGl6ZWQgdG8gbWFueSBsYW5ndWFnZXMsCi1idXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHlvdXIgY29tcG9uZW50cyBhbmQgZ3JvdXBzCi10aGF0IHdpbGwgYmUgZGlzdHJpYnV0ZWQuCi0KLUxvY2FsaXphdGlvbiBvZiB0aGUgZGVzY3JpcHRpb24gb2YgeW91ciBjb21wb25lbnRzIGFuZCBncm91cHMgaXMgdXNlZnVsIGZvcgotdXNlcnMgb2YgeW91ciBpbnN0YWxsZXJzLgotCi1BIGxvY2FsaXplZCB2YXJpYWJsZSBvciBhcmd1bWVudCBjYW4gY29udGFpbiBhIHNpbmdsZSBkZWZhdWx0IHZhbHVlLCBhbmQgYQotc2V0IG9mIHBhaXJzIHRoZSBuYW1lIG9mIHRoZSBsb2NhbGUgYW5kIHRoZSBsb2NhbGl6ZWQgdmFsdWUuCi0KLUZvciBleGFtcGxlOgotCi0uLiBjb2RlLWJsb2NrOjogY21ha2UKLQotICAgc2V0KExPQ0FMSVpBQkxFX1ZBUklBQkxFICJEZWZhdWx0IHZhbHVlIgotICAgICBlbiAiRW5nbGlzaCB2YWx1ZSIKLSAgICAgZW5fVVMgIkFtZXJpY2FuIHZhbHVlIgotICAgICBlbl9HQiAiR3JlYXQgQnJpdGFpbiB2YWx1ZSIKLSAgICAgKQorVG8gbWFrZSB1c2Ugb2YgdGhpcyBnZW5lcmF0b3IsIFF0SUZXIG5lZWRzIHRvIGJlIGluc3RhbGxlZC4KK1RoZSA6bW9kdWxlOmBDUGFja0lGV2AgbW9kdWxlIGxvb2tzIGZvciB0aGUgbG9jYXRpb24gb2YgdGhlCitRdElGVyBjb21tYW5kLWxpbmUgdXRpbGl0aWVzLCBhbmQgZGVmaW5lcyBzZXZlcmFsIGNvbW1hbmRzIHRvCitjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGlzIGdlbmVyYXRvci4KIAogVmFyaWFibGVzCiBeXl5eXl5eXl4KQEAgLTE1Nyw2ICsxMTIsOCBAQAogIERlZmF1bHQgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgaW5zdGFsbGF0aW9uLgogIEJ5IGRlZmF1bHQgdXNlZAogICJAQXBwbGljYXRpb25zRGlyQC86dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VfSU5TVEFMTF9ESVJFQ1RPUllgIgorICh2YXJpYWJsZXMgZW1iZWRkZWQgaW4gJ0AnIGFyZSBleHBhbmRlZCBieSB0aGUKKyBgUXRJRlcgc2NyaXB0aW5nIGVuZ2luZSA8aHR0cHM6Ly9kb2MucXQuaW8vcXRpbnN0YWxsZXJmcmFtZXdvcmsvc2NyaXB0aW5nLmh0bWw+YF8pLgogCiAgWW91IGNhbiB1c2UgcHJlZGVmaW5lZCB2YXJpYWJsZXMuCiAKQEAgLTI2Myw1NSArMjIwLDExMSBAQAogIHJlcGFjayBkZXBlbmRlbnQgY29tcG9uZW50cy4gVGhpcyBmZWF0dXJlIGF2YWlsYWJsZSBvbmx5CiAgc2luY2UgUXRJRlcgMy4xLgogCi1Ub29scwotIiIiIiIKK1F0SUZXIFRvb2xzCisiIiIiIiIiIiIiIgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19GUkFNRVdPUktfVkVSU0lPTgogCiAgVGhlIHZlcnNpb24gb2YgdXNlZCBRdElGVyB0b29scy4KIAorVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgcHJvdmlkZSB0aGUgbG9jYXRpb25zIG9mIHRoZSBRdElGVworY29tbWFuZC1saW5lIHRvb2xzIGFzIGRpc2NvdmVyZWQgYnkgdGhlIG1vZHVsZSA6bW9kdWxlOmBDUGFja0lGV2AuCitUaGVzZSB2YXJpYWJsZXMgYXJlIGNhY2hlZCwgYW5kIG1heSBiZSBjb25maWd1cmVkIGlmIG5lZWRlZC4KKwogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfQklOQVJZQ1JFQVRPUl9FWEVDVVRBQkxFCiAKLSBUaGUgcGF0aCB0byAiYmluYXJ5Y3JlYXRvciIgY29tbWFuZCBsaW5lIGNsaWVudC4KLQotIFRoaXMgdmFyaWFibGUgaXMgY2FjaGVkIGFuZCBtYXkgYmUgY29uZmlndXJlZCBpZiBuZWVkZWQuCisgVGhlIHBhdGggdG8gYGBiaW5hcnljcmVhdG9yYGAuCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfSUZXX1JFUE9HRU5fRVhFQ1VUQUJMRQogCi0gVGhlIHBhdGggdG8gInJlcG9nZW4iIGNvbW1hbmQgbGluZSBjbGllbnQuCi0KLSBUaGlzIHZhcmlhYmxlIGlzIGNhY2hlZCBhbmQgbWF5IGJlIGNvbmZpZ3VyZWQgaWYgbmVlZGVkLgorIFRoZSBwYXRoIHRvIGBgcmVwb2dlbmBgLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19JTlNUQUxMRVJCQVNFX0VYRUNVVEFCTEUKIAotIFRoZSBwYXRoIHRvICJpbnN0YWxsZXJiYXNlIiBpbnN0YWxsZXIgZXhlY3V0YWJsZSBiYXNlLgotCi0gVGhpcyB2YXJpYWJsZSBpcyBjYWNoZWQgYW5kIG1heSBiZSBjb25maWd1cmVkIGlmIG5lZWRlZC4KKyBUaGUgcGF0aCB0byBgYGluc3RhbGxlcmJhc2VgYC4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfREVWVE9PTF9FWEVDVVRBQkxFCiAKLSBUaGUgcGF0aCB0byAiZGV2dG9vbCIgY29tbWFuZCBsaW5lIGNsaWVudC4KKyBUaGUgcGF0aCB0byBgYGRldnRvb2xgYC4KIAotIFRoaXMgdmFyaWFibGUgaXMgY2FjaGVkIGFuZCBtYXkgYmUgY29uZmlndXJlZCBpZiBuZWVkZWQuCitIaW50cyBmb3IgRmluZGluZyBRdElGVworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAorR2VuZXJhbGx5LCB0aGUgQ1BhY2sgYGBJRldgYCBnZW5lcmF0b3IgYXV0b21hdGljYWxseSBmaW5kcyBRdElGVyB0b29scywKK2J1dCBpZiB5b3UgZG9uJ3QgdXNlIGEgZGVmYXVsdCBwYXRoIGZvciBpbnN0YWxsYXRpb24gb2YgdGhlIFF0SUZXIHRvb2xzLAordGhlIHBhdGggbWF5IGJlIHNwZWNpZmllZCBpbiBlaXRoZXIgYSBDTWFrZSBvciBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZToKKworLi4gdmFyaWFibGU6OiBDUEFDS19JRldfUk9PVAorCisgQW4gQ01ha2UgdmFyaWFibGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgUXRJRlcgdG9vbCBzdWl0ZS4KKworIFRoZSB2YXJpYWJsZSB3aWxsIGJlIGNhY2hlZCBpbiB0aGUgYGBDUGFja0NvbmZpZy5jbWFrZWBgIGZpbGUgYW5kIHVzZWQgYXQKKyBDUGFjayBydW50aW1lLgorCisuLiB2YXJpYWJsZTo6IFFUSUZXRElSCisKKyBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGljaCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBRdElGVyB0b29sCisgc3VpdGUuCisKKy4uIG5vdGU6OgorICBUaGUgc3BlY2lmaWVkIHBhdGggc2hvdWxkIG5vdCBjb250YWluICJiaW4iIGF0IHRoZSBlbmQKKyAgKGZvciBleGFtcGxlOiAiRDpcXERldlRvb2xzXFxRdElGVzIuMC41IikuCisKK1RoZSA6dmFyaWFibGU6YENQQUNLX0lGV19ST09UYCB2YXJpYWJsZSBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgYW5kIG92ZXJyaWRlcwordGhlIHZhbHVlIG9mIHRoZSA6dmFyaWFibGU6YFFUSUZXRElSYCB2YXJpYWJsZS4KKworT3RoZXIgU2V0dGluZ3MKK15eXl5eXl5eXl5eXl5eCiAKIE9ubGluZSBpbnN0YWxsZXIKLV5eXl5eXl5eXl5eXl5eXl4KKyIiIiIiIiIiIiIiIiIiIiIKIAotQnkgZGVmYXVsdCBDUGFjayBJRlcgZ2VuZXJhdG9yIG1ha2VzIG9mZmxpbmUgaW5zdGFsbGVyLiBUaGlzIG1lYW5zIHRoYXQgYWxsCi1jb21wb25lbnRzIHdpbGwgYmUgcGFja2FnZWQgaW50byBhIGJpbmFyeSBmaWxlLgorQnkgZGVmYXVsdCwgdGhpcyBnZW5lcmF0b3IgZ2VuZXJhdGVzIGFuICpvZmZsaW5lIGluc3RhbGxlciouIFRoaXMgbWVhbnMgdGhhdAordGhhdCBhbGwgcGFja2FnZWQgZmlsZXMgYXJlIGZ1bGx5IGNvbnRhaW5lZCBpbiB0aGUgaW5zdGFsbGVyIGV4ZWN1dGFibGUuCiAKLVRvIG1ha2UgYSBjb21wb25lbnQgZG93bmxvYWRlZCwgeW91IG11c3Qgc2V0IHRoZSBgYERPV05MT0FERURgYCBvcHRpb24gaW4KLTpjb21tYW5kOmBjcGFja19hZGRfY29tcG9uZW50YC4KK0luIGNvbnRyYXN0LCBhbiAqb25saW5lIGluc3RhbGxlciogd2lsbCBkb3dubG9hZCBzb21lIG9yIGFsbCBjb21wb25lbnRzIGZyb20KK2EgcmVtb3RlIHNlcnZlci4KIAotVGhlbiB5b3Ugd291bGQgdXNlIHRoZSBjb21tYW5kIDpjb21tYW5kOmBjcGFja19jb25maWd1cmVfZG93bmxvYWRzYC4KLUlmIHlvdSBzZXQgYGBBTExgYCBvcHRpb24gYWxsIGNvbXBvbmVudHMgd2lsbCBiZSBkb3dubG9hZGVkLgorVGhlIGBgRE9XTkxPQURFRGBgIG9wdGlvbiBpbiB0aGUgOmNvbW1hbmQ6YGNwYWNrX2FkZF9jb21wb25lbnRgIGNvbW1hbmQKK3NwZWNpZmllcyB0aGF0IGEgY29tcG9uZW50IGlzIHRvIGJlIGRvd25sb2FkZWQuIEFsdGVybmF0aXZlbHksIHRoZSBgYEFMTGBgCitvcHRpb24gaW4gdGhlIDpjb21tYW5kOmBjcGFja19jb25maWd1cmVfZG93bmxvYWRzYCBjb21tYW5kIHNwZWNpZmllcyB0aGF0CitgYWxsYCBjb21wb25lbnRzIGFyZSB0byBiZSBiZSBkb3dubG9hZGVkLgogCi1Zb3UgYWxzbyBjYW4gdXNlIGNvbW1hbmQgOmNvbW1hbmQ6YGNwYWNrX2lmd19hZGRfcmVwb3NpdG9yeWAgYW5kCi12YXJpYWJsZSA6dmFyaWFibGU6YENQQUNLX0lGV19ET1dOTE9BRF9BTExgIGZvciBtb3JlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCitUaGUgOmNvbW1hbmQ6YGNwYWNrX2lmd19hZGRfcmVwb3NpdG9yeWAgY29tbWFuZCBhbmQgdGhlCis6dmFyaWFibGU6YENQQUNLX0lGV19ET1dOTE9BRF9BTExgIHZhcmlhYmxlIGFsbG93IGZvciBtb3JlIHNwZWNpZmljCitjb25maWd1cmF0aW9uLgogCi1DUGFjayBJRlcgZ2VuZXJhdG9yIGNyZWF0ZXMgInJlcG9zaXRvcnkiIGRpciBpbiBjdXJyZW50IGJpbmFyeSBkaXIuIFlvdQotd291bGQgY29weSBjb250ZW50IG9mIHRoaXMgZGlyIHRvIHNwZWNpZmllZCBgYHNpdGVgYCAoYGB1cmxgYCkuCitXaGVuIHRoZXJlIGFyZSBvbmxpbmUgY29tcG9uZW50cywgQ1BhY2sgd2lsbCB3cml0ZSB0aGVtIHRvIGFyY2hpdmUgZmlsZXMuCitUaGUgaGVscCBwYWdlIG9mIHRoZSA6bW9kdWxlOmBDUGFja0NvbXBvbmVudGAgbW9kdWxlLCBlc3BlY2lhbGx5IHRoZSBzZWN0aW9uCitvbiB0aGUgOmNvbW1hbmQ6YGNwYWNrX2NvbmZpZ3VyZV9kb3dubG9hZHNgIGZ1bmN0aW9uLCBleHBsYWlucyBob3cgdG8gbWFrZQordGhlc2UgZmlsZXMgYWNjZXNzaWJsZSBmcm9tIGEgZG93bmxvYWQgVVJMLgorCitJbnRlcm5hdGlvbmFsaXphdGlvbgorIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworU29tZSB2YXJpYWJsZXMgYW5kIGNvbW1hbmQgYXJndW1lbnRzIHN1cHBvcnQgaW50ZXJuYXRpb25hbGl6YXRpb24gdmlhCitDTWFrZSBzY3JpcHQuIFRoaXMgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZS4KKworSW5zdGFsbGVycyBjcmVhdGVkIGJ5IFF0SUZXIHRvb2xzIGhhdmUgYnVpbHQtaW4gc3VwcG9ydCBmb3IKK2ludGVybmF0aW9uYWxpemF0aW9uIGFuZCBtYW55IHBocmFzZXMgYXJlIGxvY2FsaXplZCB0byBtYW55IGxhbmd1YWdlcywKK2J1dCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgeW91ciBjb21wb25lbnRzIGFuZCBncm91cHMKK3RoYXQgd2lsbCBiZSBkaXN0cmlidXRlZC4KKworTG9jYWxpemF0aW9uIG9mIHRoZSBkZXNjcmlwdGlvbiBvZiB5b3VyIGNvbXBvbmVudHMgYW5kIGdyb3VwcyBpcyB1c2VmdWwgZm9yCit1c2VycyBvZiB5b3VyIGluc3RhbGxlcnMuCisKK0EgbG9jYWxpemVkIHZhcmlhYmxlIG9yIGFyZ3VtZW50IGNhbiBjb250YWluIGEgc2luZ2xlIGRlZmF1bHQgdmFsdWUsIGFuZCBhCitzZXQgb2YgcGFpcnMgdGhlIG5hbWUgb2YgdGhlIGxvY2FsZSBhbmQgdGhlIGxvY2FsaXplZCB2YWx1ZS4KKworRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICBzZXQoTE9DQUxJWkFCTEVfVkFSSUFCTEUgIkRlZmF1bHQgdmFsdWUiCisgICAgIGVuICJFbmdsaXNoIHZhbHVlIgorICAgICBlbl9VUyAiQW1lcmljYW4gdmFsdWUiCisgICAgIGVuX0dCICJHcmVhdCBCcml0YWluIHZhbHVlIgorICAgICApCiAKIFNlZSBBbHNvCiBeXl5eXl5eXgpAQCAtMzMwLDUgKzM0Myw1IEBACiAqIFByb21vdGluZyBVcGRhdGVzOgogICBodHRwOi8vZG9jLnF0LmlvL3F0aW5zdGFsbGVyZnJhbWV3b3JrL2lmdy11cGRhdGVzLmh0bWwKIAotRG93bmxvYWQgUXQgSW5zdGFsbGVyIEZyYW1ld29yayBmb3IgeW91IHBsYXRmb3JtIGZyb20gUXQgc2l0ZToKK0Rvd25sb2FkIFF0IEluc3RhbGxlciBGcmFtZXdvcmsgZm9yIHlvdXIgcGxhdGZvcm0gZnJvbSBRdCBzaXRlOgogIGh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC1pbnN0YWxsZXItZnJhbWV3b3JrCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9uc2lzLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL25zaXMucnN0CmluZGV4IGQxZTQ5NWYuLjBkZDg3NmUgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL25zaXMucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL25zaXMucnN0CkBAIC0xNTUsMyArMTU1LDcgQEAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfTlNJU19NVUlfSEVBREVSSU1BR0UKIAogIFRoZSBpbWFnZSB0byBkaXNwbGF5IG9uIHRoZSBoZWFkZXIgb2YgaW5zdGFsbGVycyBwYWdlcy4KKworLi4gdmFyaWFibGU6OiBDUEFDS19OU0lTX01BTklGRVNUX0RQSV9BV0FSRQorCisgSWYgc2V0LCBkZWNsYXJlcyB0aGF0IHRoZSBpbnN0YWxsZXIgaXMgRFBJLWF3YXJlLgpkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vcnBtLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL3JwbS5yc3QKaW5kZXggMjY5M2M3Yi4uY2NiN2ViZCAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vcnBtLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9ycG0ucnN0CkBAIC0zNiw4ICszNiw4IEBACiBIZXJlIGFyZSBzb21lIENQYWNrIFJQTSBnZW5lcmF0b3Igd2lraSByZXNvdXJjZXMgdGhhdCBhcmUgaGVyZSBmb3IgaGlzdG9yaWMKIHJlYXNvbnMgYW5kIGFyZSBubyBsb25nZXIgbWFpbnRhaW5lZCBidXQgbWF5IHN0aWxsIHByb3ZlIHVzZWZ1bDoKIAotIC0gaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5L3dpa2lzL2RvYy9jcGFjay9Db25maWd1cmF0aW9uCi0gLSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvd2lraXMvZG9jL2NwYWNrL1BhY2thZ2VHZW5lcmF0b3JzI3JwbS11bml4LW9ubHkKKyAtIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS8tL3dpa2lzL2RvYy9jcGFjay9Db25maWd1cmF0aW9uCisgLSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvLS93aWtpcy9kb2MvY3BhY2svUGFja2FnZUdlbmVyYXRvcnMjcnBtLXVuaXgtb25seQogCiBMaXN0IG9mIENQYWNrIFJQTSBnZW5lcmF0b3Igc3BlY2lmaWMgdmFyaWFibGVzOgogCkBAIC00NzMsMzggKzQ3Myw0MiBAQAogCiAuLiB2YXJpYWJsZTo6IENQQUNLX1JQTV9QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICAgICAgICAgICBDUEFDS19SUE1fUFJFX1VOSU5TVEFMTF9TQ1JJUFRfRklMRQorICAgICAgICAgICAgICBDUEFDS19SUE1fUFJFX1RSQU5TX1NDUklQVF9GSUxFCiAKLSBQYXRoIHRvIGZpbGUgY29udGFpbmluZyBwcmUgKHVuKWluc3RhbGwgc2NyaXB0LgorIFBhdGggdG8gZmlsZSBjb250YWluaW5nIHByZSBpbnN0YWxsL3VuaW5zdGFsbC90cmFuc2FjdGlvbiBzY3JpcHQuCiAKICAqIE1hbmRhdG9yeSA6IE5PCiAgKiBEZWZhdWx0ICAgOiAtCiAKLSBNYXkgYmUgdXNlZCB0byBlbWJlZCBhIHByZSAodW4paW5zdGFsbGF0aW9uIHNjcmlwdCBpbiB0aGUgc3BlYyBmaWxlLgorIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcHJlIGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbi90cmFuc2FjdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KICBUaGUgcmVmZXJyZWQgc2NyaXB0IGZpbGUgKG9yIGJvdGgpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKICBwdXQgYWZ0ZXIgdGhlIGBgJXByZWBgIG9yIGBgJXByZXVuYGAgc2VjdGlvbgotIElmIDp2YXJpYWJsZTpgQ1BBQ0tfUlBNX0NPTVBPTkVOVF9JTlNUQUxMYCBpcyBzZXQgdG8gT04gdGhlICh1bilpbnN0YWxsCisgSWYgOnZhcmlhYmxlOmBDUEFDS19SUE1fQ09NUE9ORU5UX0lOU1RBTExgIGlzIHNldCB0byBPTiB0aGUgaW5zdGFsbC91bmluc3RhbGwvdHJhbnNhY3Rpb24KICBzY3JpcHQgZm9yIGVhY2ggY29tcG9uZW50IGNhbiBiZSBvdmVycmlkZGVuIHdpdGgKLSBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRWBgIGFuZAotIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEVgYC4KKyBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRWBgLAorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEVgYCwgYW5kCisgYGBDUEFDS19SUE1fPENPTVBPTkVOVD5fUFJFX1RSQU5TX1NDUklQVF9GSUxFYGAKICBPbmUgbWF5IHZlcmlmeSB3aGljaCBzY3JpcHRsZXQgaGFzIGJlZW4gaW5jbHVkZWQgd2l0aDo6CiAKICAgcnBtIC1xcCAtLXNjcmlwdHMgIHBhY2thZ2UucnBtCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfUlBNX1BPU1RfSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICAgICAgICAgICBDUEFDS19SUE1fUE9TVF9VTklOU1RBTExfU0NSSVBUX0ZJTEUKKyAgICAgICAgICAgICAgQ1BBQ0tfUlBNX1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEUKIAotIFBhdGggdG8gZmlsZSBjb250YWluaW5nIHBvc3QgKHVuKWluc3RhbGwgc2NyaXB0LgorIFBhdGggdG8gZmlsZSBjb250YWluaW5nIHBvc3QgaW5zdGFsbC91bmluc3RhbGwvdHJhbnNhY3Rpb24gc2NyaXB0LgogCiAgKiBNYW5kYXRvcnkgOiBOTwogICogRGVmYXVsdCAgIDogLQogCi0gTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwb3N0ICh1bilpbnN0YWxsYXRpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCisgTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwb3N0IGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbi90cmFuc2FjdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KICBUaGUgcmVmZXJyZWQgc2NyaXB0IGZpbGUgKG9yIGJvdGgpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKICBwdXQgYWZ0ZXIgdGhlIGBgJXBvc3RgYCBvciBgYCVwb3N0dW5gYCBzZWN0aW9uLgotIElmIDp2YXJpYWJsZTpgQ1BBQ0tfUlBNX0NPTVBPTkVOVF9JTlNUQUxMYCBpcyBzZXQgdG8gT04gdGhlICh1bilpbnN0YWxsCisgSWYgOnZhcmlhYmxlOmBDUEFDS19SUE1fQ09NUE9ORU5UX0lOU1RBTExgIGlzIHNldCB0byBPTiB0aGUgaW5zdGFsbC91bmluc3RhbGwvdHJhbnNhY3Rpb24KICBzY3JpcHQgZm9yIGVhY2ggY29tcG9uZW50IGNhbiBiZSBvdmVycmlkZGVuIHdpdGgKLSBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEVgYCBhbmQKLSBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX1VOSU5TVEFMTF9TQ1JJUFRfRklMRWBgLgorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfSU5TVEFMTF9TQ1JJUFRfRklMRWBgLAorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFYGAsIGFuZAorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEVgYAogIE9uZSBtYXkgdmVyaWZ5IHdoaWNoIHNjcmlwdGxldCBoYXMgYmVlbiBpbmNsdWRlZCB3aXRoOjoKIAogICBycG0gLXFwIC0tc2NyaXB0cyAgcGFja2FnZS5ycG0KZGlmZiAtLWdpdCBhL0hlbHAvZGV2L21haW50LnJzdCBiL0hlbHAvZGV2L21haW50LnJzdAppbmRleCBhMWMxYTZmLi40YzJjODlmIDEwMDY0NAotLS0gYS9IZWxwL2Rldi9tYWludC5yc3QKKysrIGIvSGVscC9kZXYvbWFpbnQucnN0CkBAIC0yMDAsNiArMjAwLDIzIEBACiAgIEFkZCBzZWN0aW9uIGhlYWRlcnMgc2ltaWxhciB0byB0aGUgJHByZXYgcmVsZWFzZSBub3RlcyBhbmQgbW92ZSBlYWNoCiAgIGluZGl2aWR1YWwgYnVsbGV0IGludG8gYW4gYXBwcm9wcmlhdGUgc2VjdGlvbi4gIFJldmlzZSBhIGZldyBidWxsZXRzLgogCitVcGRhdGUgU3BoaW54IGBgdmVyc2lvbmFkZGVkYGAgZGlyZWN0aXZlcyBpbiBkb2N1bWVudHMgYWRkZWQgc2luY2UKK3RoZSBwcmV2aW91cyByZWxlYXNlIGJ5IHJ1bm5pbmcgdGhlIGB1cGRhdGVfdmVyc2lvbnMucHlgXyBzY3JpcHQ6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbAorCisgIFV0aWxpdGllcy9TcGhpbngvdXBkYXRlX3ZlcnNpb25zLnB5IC0tc2luY2UgdiRwcmV2LjAgLS1vdmVyd3JpdGUKKworLi4gX2B1cGRhdGVfdmVyc2lvbnMucHlgOiAuLi8uLi9VdGlsaXRpZXMvU3BoaW54L3VwZGF0ZV92ZXJzaW9ucy5weQorCitDb21taXQgdGhlIGNoYW5nZXMgd2l0aCBhIG1lc3NhZ2Ugc3VjaCBhczo6CisKKyAgSGVscDogVXBkYXRlIFNwaGlueCB2ZXJzaW9uYWRkZWQgZGlyZWN0aXZlcyBmb3IgJHZlciByZWxlYXNlCisKKyAgUnVuIHRoZSBzY3JpcHQ6CisKKyAgICAgIFV0aWxpdGllcy9TcGhpbngvdXBkYXRlX3ZlcnNpb25zLnB5IC0tc2luY2UgdiRwcmV2LjAgLS1vdmVyd3JpdGUKKwogT3BlbiBhIG1lcmdlIHJlcXVlc3Qgd2l0aCB0aGUgYGBkb2MtJHZlci1yZWxub3Rlc2BgIGJyYW5jaCBmb3IgcmV2aWV3CiBhbmQgaW50ZWdyYXRpb24uICBGdXJ0aGVyIHN0ZXBzIG1heSBwcm9jZWVkIGFmdGVyIHRoaXMgaGFzIGJlZW4gbWVyZ2VkCiB0byBgYG1hc3RlcmBgLgpAQCAtMjk5LDMgKzMxNiwyOCBAQAogICBiZWZvcmUgc3RhZ2luZyBvciBtZXJnaW5nLgogCiAuLiBfYENNYWtlIERpc2NvdXJzZSBGb3J1bSBEZXZlbG9wbWVudCBDYXRlZ29yeWA6IGh0dHBzOi8vZGlzY291cnNlLmNtYWtlLm9yZy9jL2RldmVsb3BtZW50CisKK0luaXRpYWwgUG9zdC1SZWxlYXNlIERldmVsb3BtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZXByZWNhdGUgcG9saWNpZXMgbW9yZSB0aGFuIDggcmVsZWFzZSBzZXJpZXMgb2xkIGJ5IHVwZGF0aW5nIHRoZQorcG9saWN5IHJhbmdlIGNoZWNrIGluIGBgY21NYWtlZmlsZTo6U2V0UG9saWN5YGAuCitDb21taXQgd2l0aCBhIG1lc3NhZ2Ugc3VjaCBhczo6CisKKyAgQWRkIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciBwb2xpY2llcyBDTVAjIyMjIGFuZCBiZWxvdworCisgIFRoZSBPTEQgYmVoYXZpb3JzIG9mIGFsbCBwb2xpY2llcyBhcmUgZGVwcmVjYXRlZCwgYnV0IG9ubHkgYnkKKyAgZG9jdW1lbnRhdGlvbi4gIEFkZCBhbiBleHBsaWNpdCBkZXByZWNhdGlvbiBkaWFnbm9zdGljIGZvciBwb2xpY2llcworICBpbnRyb2R1Y2VkIGluIENNYWtlICRPTERWRVIgYW5kIGJlbG93IHRvIGVuY291cmFnZSBwcm9qZWN0cyB0byBwb3J0CisgIGF3YXkgZnJvbSBzZXR0aW5nIHBvbGljaWVzIHRvIE9MRC4KKworVXBkYXRlIHRoZSBgYGNtYWtlX3BvbGljeWBgIHZlcnNpb24gcmFuZ2UgZ2VuZXJhdGVkIGJ5IGBgaW5zdGFsbChFWFBPUlQpYGAKK2luIGBgY21FeHBvcnRGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZVBvbGljeUhlYWRlckNvZGVgYCB0byBlbmQgYXQgdGhlCitwcmV2aW91cyByZWxlYXNlLiAgV2UgdXNlIG9uZSByZWxlYXNlIGJhY2sgc2luY2Ugd2Ugbm93IGtub3cgYWxsIHRoZQorcG9saWNpZXMgYWRkZWQgZm9yIHRoYXQgdmVyc2lvbi4gIENvbW1pdCB3aXRoIGEgbWVzc2FnZSBzdWNoIGFzOjoKKworICBleHBvcnQ6IEluY3JlYXNlIG1heGltdW0gcG9saWN5IHZlcnNpb24gaW4gZXhwb3J0ZWQgZmlsZXMgdG8gJHByZXYKKworICBUaGUgZmlsZXMgZ2VuZXJhdGQgYnkgYGluc3RhbGwoRVhQT1JUKWAgYW5kIGBleHBvcnQoKWAgY29tbWFuZHMKKyAgYXJlIGtub3duIHRvIHdvcmsgd2l0aCBwb2xpY2llcyBhcyBvZiBDTWFrZSAkcHJldiwgc28gZW5hYmxlIHRoZW0KKyAgaW4gc3VmZmljaWVudGx5IG5ldyBDTWFrZSB2ZXJzaW9ucy4KZGlmZiAtLWdpdCBhL0hlbHAvZGV2L3Jldmlldy5yc3QgYi9IZWxwL2Rldi9yZXZpZXcucnN0CmluZGV4IDhlYzQxZDIuLjZjN2U5MmMgMTAwNjQ0Ci0tLSBhL0hlbHAvZGV2L3Jldmlldy5yc3QKKysrIGIvSGVscC9kZXYvcmV2aWV3LnJzdApAQCAtMjgsNyArMjgsNyBAQAogVGhpcyB3aWxsIGNhdXNlIHRoZSBNUiB0b3BpYyBicmFuY2ggdG8gYmUgYXV0b21hdGljYWxseSByZW1vdmVkIGZyb20KIHRoZSB1c2VyJ3MgZm9yayBkdXJpbmcgdGhlIGBNZXJnZWBfIHN0ZXAuCiAKLS4uIF9gQ01ha2UgTWVyZ2UgUmVxdWVzdHMgUGFnZWA6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL21lcmdlX3JlcXVlc3RzCisuLiBfYENNYWtlIE1lcmdlIFJlcXVlc3RzIFBhZ2VgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL21lcmdlX3JlcXVlc3RzCiAuLiBfYENNYWtlIFJlcG9zaXRvcnlgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZQogCiBXb3JrZmxvdyBTdGF0dXMKQEAgLTYwLDcgKzYwLDcgQEAKIFRoZSB3b3JrZmxvdyBzdGF0dXMgbGFiZWxzIGFyZSBpbnRlbmRlZCB0byBiZSBtdXR1YWxseSBleGNsdXNpdmUsCiBzbyBwbGVhc2UgcmVtb3ZlIGFueSBleGlzdGluZyB3b3JrZmxvdyBsYWJlbCB3aGVuIGFkZGluZyBvbmUuCiAKLS4uIF9gQ01ha2UgR2l0TGFiIFByb2plY3QgRGV2ZWxvcGVyc2A6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL3NldHRpbmdzL21lbWJlcnMKKy4uIF9gQ01ha2UgR2l0TGFiIFByb2plY3QgRGV2ZWxvcGVyc2A6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vc2V0dGluZ3MvbWVtYmVycwogCiBSb2JvdCBSZXZpZXcKID09PT09PT09PT09PQpAQCAtMjc4LDQyICsyNzgsNTIgQEAKIFRvcGljIFRlc3RpbmcKID09PT09PT09PT09PT0KIAotQ01ha2UgaGFzIGEgYGJ1aWxkYm90YF8gaW5zdGFuY2Ugd2F0Y2hpbmcgZm9yIG1lcmdlIHJlcXVlc3RzIHRvIHRlc3QuCi1gQ01ha2UgR2l0TGFiIFByb2plY3QgRGV2ZWxvcGVyc2BfIG1heSBhY3RpdmF0ZSBidWlsZGJvdCBvbiBhIE1SIGJ5Ci1hZGRpbmcgYSBjb21tZW50IHdpdGggYSBjb21tYW5kIGFtb25nIHRoZSBgY29tbWVudCB0cmFpbGluZyBsaW5lc2BfOjoKK0NNYWtlIHVzZXMgYEdpdExhYiBDSWBfIHRvIHRlc3QgbWVyZ2UgcmVxdWVzdHMsIGNvbmZpZ3VyZWQgYnkgdGhlIHRvcC1sZXZlbAorYGAuZ2l0bGFiLWNpLnltbGBgIGZpbGUuICBSZXN1bHRzIG1heSBiZSBzZWVuIGJvdGggb24gdGhlIG1lcmdlIHJlcXVlc3QncworcGlwZWxpbmUgcGFnZSBhbmQgb24gdGhlIGBDTWFrZSBDRGFzaCBQYWdlYF8uICBGaWx0ZXJlZCBDRGFzaCByZXN1bHRzCitzaG93aW5nIGp1c3QgdGhlIHBpcGVsaW5lJ3Mgam9icyBjYW4gYmUgcmVhY2hlZCBieSBzZWxlY3RpbmcgdGhlIGBgY2Rhc2hgYAoram9iIGluIHRoZSBgYEV4dGVybmFsYGAgc3RhZ2Ugb2YgdGhlIHBpcGVsaW5lLgogCi0gIERvOiB0ZXN0CitMaW50IGFuZCBkb2N1bWVudGF0aW9uIGJ1aWxkIGpvYnMgcnVuIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgZXZlcnkgcHVzaC4KK0hlYXZpZXIgam9icyByZXF1aXJlIGEgbWFudWFsIHRyaWdnZXIgdG8gcnVuOgogCi1gYEBrd3JvYm90YGAgd2lsbCBhZGQgYW4gYXdhcmQgZW1vamkgdG8gdGhlIGNvbW1lbnQgdG8gaW5kaWNhdGUgdGhhdCBpdAotd2FzIHByb2Nlc3NlZCBhbmQgYWxzbyBpbmZvcm0gYnVpbGRib3QgYWJvdXQgdGhlIHJlcXVlc3QuICBUaGUgYnVpbGRib3QKLXVzZXIgKGBgQGJ1aWxkYm90YGApIHdpbGwgc2NoZWR1bGUgYnVpbGRzIGFuZCByZXNwb25kIHdpdGggYSBjb21tZW50Ci1saW5raW5nIHRvIHRoZSBgQ01ha2UgQ0Rhc2ggUGFnZWBfIHdpdGggYSBmaWx0ZXIgZm9yIHJlc3VsdHMgYXNzb2NpYXRlZAotd2l0aCB0aGUgdG9waWMgdGVzdCByZXF1ZXN0LiAgSWYgdGhlIE1SIHRvcGljIGJyYW5jaCBpcyB1cGRhdGVkIGJ5IGEKLXB1c2ggYSBuZXcgYGBEbzogdGVzdGBgIGNvbW1hbmQgaXMgbmVlZGVkIHRvIGFjdGl2YXRlIHRlc3RpbmcgYWdhaW4uCisqIE1lcmdlIHJlcXVlc3QgYXV0aG9ycyBtYXkgdmlzaXQgdGhlaXIgbWVyZ2UgcmVxdWVzdCdzIHBpcGVsaW5lIGFuZCBjbGljayB0aGUKKyAgIlBsYXkiIGJ1dHRvbiBvbiBvbmUgb3IgbW9yZSBqb2JzIG1hbnVhbGx5LiAgSWYgdGhlIG1lcmdlIHJlcXVlc3QgaGFzIHRoZQorICAiQWxsb3cgY29tbWl0cyBmcm9tIG1lbWJlcnMgd2hvIGNhbiBtZXJnZSB0byB0aGUgdGFyZ2V0IGJyYW5jaCIgY2hlY2sgYm94CisgIGVuYWJsZWQsIENNYWtlIG1haW50YWluZXJzIG1heSB1c2UgdGhlICJQbGF5IiBidXR0b24gdG9vLgogCi1UaGUgYGBEbzogdGVzdGBgIGNvbW1hbmQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyogYENNYWtlIEdpdExhYiBQcm9qZWN0IERldmVsb3BlcnNgXyBtYXkgdHJpZ2dlciBDSSBvbiBhIG1lcmdlIHJlcXVlc3QgYnkKKyAgYWRkaW5nIGEgY29tbWVudCB3aXRoIGEgY29tbWFuZCBhbW9uZyB0aGUgYGNvbW1lbnQgdHJhaWxpbmcgbGluZXNgXzo6CiAKLSogYGAtLXN0b3BgYDogY2xlYXIgdGhlIGxpc3Qgb2YgY29tbWFuZHMgZm9yIHRoZSBtZXJnZSByZXF1ZXN0Ci0qIGBgLS1jbGVhcmBgOiBjbGVhciBwcmV2aW91cyBjb21tYW5kcyBiZWZvcmUgYWRkaW5nIHRoaXMgY29tbWFuZAotKiBgYC0tcmVnZXgtaW5jbHVkZSA8YXJnPmBgIG9yIGBgLWkgPGFyZz5gYDogb25seSBidWlsZCBvbiBidWlsZGVycwotICBtYXRjaGluZyBgYDxhcmc+YGAgKGEgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbikKLSogYGAtLXJlZ2V4LWV4Y2x1ZGUgPGFyZz5gYCBvciBgYC1lIDxhcmc+YGA6IGV4Y2x1ZGUgYnVpbGRzIG9uIGJ1aWxkZXJzCi0gIG1hdGNoaW5nIGBgPGFyZz5gYCAoYSBQeXRob24gcmVndWxhciBleHByZXNzaW9uKQorICAgIERvOiB0ZXN0CiAKLUJ1aWxkZXIgbmFtZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGBgcHJvamVjdC1ob3N0LW9zLWJ1aWxkdHlwZS1nZW5lcmF0b3JgYDoKKyAgYGBAa3dyb2JvdGBgIHdpbGwgYWRkIGFuIGF3YXJkIGVtb2ppIHRvIHRoZSBjb21tZW50IHRvIGluZGljYXRlIHRoYXQgaXQKKyAgd2FzIHByb2Nlc3NlZCBhbmQgYWxzbyB0cmlnZ2VyIGFsbCBtYW51YWwgam9icyBpbiB0aGUgbWVyZ2UgcmVxdWVzdCdzCisgIHBpcGVsaW5lLgogCi0qIGBgcHJvamVjdGBgOiBhbHdheXMgYGBjbWFrZWBgIGZvciBDTWFrZSBidWlsZHMKLSogYGBob3N0YGA6IHRoZSBidWlsZGJvdCBob3N0Ci0qIGBgb3NgYDogb25lIG9mIGBgd2luZG93c2BgLCBgYG9zeGBgLCBvciBgYGxpbnV4YGAKLSogYGBidWlsZHR5cGVgYDogYGByZWxlYXNlYGAgb3IgYGBkZWJ1Z2BgCi0qIGBgZ2VuZXJhdG9yYGA6IGBgbmluamFgYCwgYGBtYWtlZmlsZXNgYCwgYGB2czx5ZWFyPmBgLAotICBvciBgYGxpbnQtaXd5dS10aWR5YGAKKyAgVGhlIGBgRG86IHRlc3RgYCBjb21tYW5kIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CiAKLVRoZSBzcGVjaWFsIGBgbGludC08dG9vbHM+YGAgZ2VuZXJhdG9yIG5hbWUgaXMgYSBidWlsZGVyIHRoYXQgYnVpbGRzCi1DTWFrZSB1c2luZyBsaW50IHRvb2xzIGJ1dCBkb2VzIG5vdCBydW4gdGhlIHRlc3Qgc3VpdGUgKHNvIHRoZSBhY3R1YWwKLWdlbmVyYXRvciBkb2VzIG5vdCBtYXR0ZXIpLgorICAqIGBgLS1uYW1lZCA8cmVnZXg+YGAsIGBgLW4gPHJlZ2V4PmBgOiBUcmlnZ2VyIGpvYnMgbWF0Y2hpbmcgYGA8cmVnZXg+YGAKKyAgICBhbnl3aGVyZSBpbiB0aGVpciBuYW1lLiAgSm9iIG5hbWVzIG1heSBiZSBzZWVuIG9uIHRoZSBtZXJnZSByZXF1ZXN0J3MKKyAgICBwaXBlbGluZSBwYWdlLgorICAqIGBgLS1zdGFnZSA8c3RhZ2U+YGAsIGBgLXMgPHN0YWdlPmBgOiBPbmx5IGFmZmVjdCBqb2JzIGluIGEgZ2l2ZW4gc3RhZ2UuCisgICAgU3RhZ2UgbmFtZXMgbWF5IGJlIHNlZW4gb24gdGhlIG1lcmdlIHJlcXVlc3QncyBwaXBlbGluZSBwYWdlLiAgTm90ZSB0aGF0CisgICAgdGhlIG5hbWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHdoYXQgaXMgaW4gdGhlIGBgLmdpdGxhYi1jaS55bWxgYCBmaWxlIGFuZCBtYXkKKyAgICBiZSBjYXBpdGFsaXplZCBpbiB0aGUgd2ViIHBhZ2UsIHNvIGxvd2VyY2FzaW5nIHRoZSB3ZWJwYWdlJ3MgZGlzcGxheSBuYW1lCisgICAgZm9yIHN0YWdlcyBtYXkgYmUgcmVxdWlyZWQuCisgICogYGAtLWFjdGlvbiA8YWN0aW9uPmBgLCBgYC1hIDxhY3Rpb24+YGA6IFRoZSBhY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgam9icy4KKyAgICBQb3NzaWJsZSBhY3Rpb25zOgogCi0uLiBfYGJ1aWxkYm90YDogaHR0cDovL2J1aWxkYm90Lm5ldAorICAgICogYGBtYW51YWxgYCAodGhlIGRlZmF1bHQpOiBTdGFydCBqb2JzIGF3YWl0aW5nIG1hbnVhbCBpbnRlcmFjdGlvbi4KKyAgICAqIGBgdW5zdWNjZXNzZnVsYGA6IFN0YXJ0IG9yIHJlc3RhcnQgam9icyB3aGljaCBoYXZlIG5vdCBjb21wbGV0ZWQKKyAgICAgIHN1Y2Nlc3NmdWxseS4KKyAgICAqIGBgZmFpbGVkYGA6IFJlc3RhcnQgam9icyB3aGljaCBoYXZlIGNvbXBsZXRlZCwgYnV0IHdpdGhvdXQgc3VjY2Vzcy4KKyAgICAqIGBgY29tcGxldGVkYGA6IFJlc3RhcnQgYWxsIGNvbXBsZXRlZCBqb2JzLgorCitJZiB0aGUgbWVyZ2UgcmVxdWVzdCB0b3BpYyBicmFuY2ggaXMgdXBkYXRlZCBieSBhIHB1c2gsIGEgbmV3IG1hbnVhbCB0cmlnZ2VyCit1c2luZyBvbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgaXMgbmVlZGVkIHRvIHN0YXJ0IENJIGFnYWluLgorCisuLiBfYEdpdExhYiBDSWA6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2hlbHAvY2kvUkVBRE1FLm1kCiAuLiBfYENNYWtlIENEYXNoIFBhZ2VgOiBodHRwczovL29wZW4uY2Rhc2gub3JnL2luZGV4LnBocD9wcm9qZWN0PUNNYWtlCiAKIEludGVncmF0aW9uIFRlc3RpbmcKQEAgLTQ1NCw4ICs0NjQsOCBAQAogICBUaGUgYGAtdGBgIG9wdGlvbiB0byBhIGBgRG86IG1lcmdlYGAgY29tbWFuZCBvdmVycmlkZXMgYW55IHRvcGljCiAgIHJlbmFtZSBzZXQgaW4gdGhlIE1SIGRlc2NyaXB0aW9uLgogCi0uLiBfYENNYWtlIEdpdExhYiBQcm9qZWN0IE1hc3RlcnNgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9zZXR0aW5ncy9tZW1iZXJzCi0uLiBfYGJhY2twb3J0IGluc3RydWN0aW9uc2A6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL3V0aWxzL2dpdC13b3JrZmxvdy93aWtpcy9CYWNrcG9ydC10b3BpY3MKKy4uIF9gQ01ha2UgR2l0TGFiIFByb2plY3QgTWFzdGVyc2A6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vc2V0dGluZ3MvbWVtYmVycworLi4gX2BiYWNrcG9ydCBpbnN0cnVjdGlvbnNgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS91dGlscy9naXQtd29ya2Zsb3cvLS93aWtpcy9CYWNrcG9ydC10b3BpY3MKIC4uIF9gZ2l0IHJldi1wYXJzZWA6IGh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtcmV2LXBhcnNlCiAKIENsb3NlCmRpZmYgLS1naXQgYS9IZWxwL2Rldi9zb3VyY2UucnN0IGIvSGVscC9kZXYvc291cmNlLnJzdAppbmRleCAwZjc0ODhiLi5kOTNlNTVjIDEwMDY0NAotLS0gYS9IZWxwL2Rldi9zb3VyY2UucnN0CisrKyBiL0hlbHAvZGV2L3NvdXJjZS5yc3QKQEAgLTIzLDEyICsyMywxNjMgQEAKIEMrKyBTdWJzZXQgUGVybWl0dGVkCiA9PT09PT09PT09PT09PT09PT09PQogCi1DTWFrZSByZXF1aXJlcyBjb21waWxpbmcgYXMgQysrMTEgb3IgYWJvdmUuICBIb3dldmVyLCBpbiBvcmRlciB0byBzdXBwb3J0Ci1idWlsZGluZyBvbiBvbGRlciB0b29sY2hhaW5zIHNvbWUgY29uc3RydWN0cyBuZWVkIHRvIGJlIGhhbmRsZWQgd2l0aCBjYXJlOgorQ01ha2UgcmVxdWlyZXMgY29tcGlsaW5nIGFzIEMrKzExIGluIG9yZGVyIHRvIHN1cHBvcnQgYnVpbGRpbmcgb24gb2xkZXIKK3Rvb2xjaGFpbnMuICBIb3dldmVyLCB0byBmYWNpbGl0YXRlIGRldmVsb3BtZW50LCBzb21lIHN0YW5kYXJkIGxpYnJhcnkKK2ZlYXR1cmVzIGZyb20gbW9yZSByZWNlbnQgQysrIHN0YW5kYXJkcyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggYSBjb21wYXRpYmlsaXR5CitsYXllci4gIFRoZXNlIGZlYXR1cmVzIGFyZSBkZWZpbmVkIHVuZGVyIHRoZSBuYW1lc3BhY2UgYGBjbWBgIGFuZCBoZWFkZXJzCithcmUgYWNjZXNzaWJsZSB1bmRlciB0aGUgYGBjbS9gYCBkaXJlY3RvcnkuICBUaGUgaGVhZGVycyB1bmRlciBgYGNtL2BgIGNhbgorYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgc3RhbmRhcmQgb25lcyB3aGVuIGV4dGVuZGVkIGZlYXR1cmVzIGFyZSBuZWVkZWQuCitGb3IgZXhhbXBsZSBgYDxjbS9tZW1vcnk+YGAgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgYGA8bWVtb3J5PmBgLgogCi0qIERvIG5vdCB1c2UgYGBzdGQ6OmF1dG9fcHRyYGAuCitBdmFpbGFibGUgZmVhdHVyZXMgYXJlOgogCi0gIFRoZSBgYHN0ZDo6YXV0b19wdHJgYCB0ZW1wbGF0ZSBpcyBkZXByZWNhdGVkIGluIEMrKzExLiBVc2UgYGBzdGQ6OnVuaXF1ZV9wdHJgYC4KKyogRnJvbSBgYEMrKzE0YGA6CisKKyAgKiBgYDxjbS9pb21hbmlwPmBgOgorICAgIGBgY206OnF1b3RlZGBgCisKKyAgKiBgYDxjbS9pdGVyYXRvcj5gYDoKKyAgICBgYGNtOjptYWtlX3JldmVyc2VfaXRlcmF0b3JgYCwgYGBjbTo6Y2JlZ2luYGAsIGBgY206OmNlbmRgYCwKKyAgICBgYGNtOjpyYmVnaW5gYCwgYGBjbTo6cmVuZGBgLCBgYGNtOjpjcmJlZ2luYGAsIGBgY206OmNyZW5kYGAKKworICAqIGBgPGNtL21lbW9yeT5gYDoKKyAgICBgYGNtOjptYWtlX3VuaXF1ZWBgCisKKyAgKiBgYDxjbS9zaGFyZWRfbXV0ZXg+YGA6CisgICAgYGBjbTo6c2hhcmVkX2xvY2tgYAorCisgICogYGA8Y20vdHlwZV90cmFpdHM+YGA6CisgICAgYGBjbTo6ZW5hYmxlX2lmX3RgYAorCisqIEZyb20gYGBDKysxN2BgOgorCisgICogYGA8Y20vYWxnb3JpdGhtPmBgOgorICAgIGBgY206OmNsYW1wYGAKKworICAqIGBgY20vZmlsZXN5c3RlbT5gYDoKKyAgICBgYGNtOjpmaWxlc3lzdGVtOjpwYXRoYGAKKworICAqIGBgPGNtL2l0ZXJhdG9yPmBgOgorICAgIGBgY206OnNpemVgYCwgYGBjbTo6ZW1wdHlgYCwgYGBjbTo6ZGF0YWBgCisKKyAgKiBgYDxjbS9vcHRpb25hbD5gYDoKKyAgICBgYGNtOjpudWxsb3B0X3RgYCwgYGBjbTo6bnVsbG9wdGBgLCBgYGNtOjpvcHRpb25hbGBgLAorICAgIGBgY206Om1ha2Vfb3B0aW9uYWxgYCwgYGBjbTo6YmFkX29wdGlvbmFsX2FjY2Vzc2BgCisKKyAgKiBgYDxjbS9zaGFyZWRfbXV0ZXg+YGA6CisgICAgYGBjbTo6c2hhcmVkX211dGV4YGAKKworICAqIGBgPGNtL3N0cmluZ192aWV3PmBgOgorICAgIGBgY206OnN0cmluZ192aWV3YGAKKworICAqIGBgPGNtL3R5cGVfdHJhaXRzPmBgOgorICAgIGBgY206OmJvb2xfY29uc3RhbnRgYCwgYGBjbTo6aW52b2tlX3Jlc3VsdF90YGAsIGBgY206Omludm9rZV9yZXN1bHRgYCwKKyAgICBgYGNtOjp2b2lkX3RgYAorCisgICogYGA8Y20vdXRpbGl0eT5gYDoKKyAgICBgYGNtOjppbl9wbGFjZV90YGAsIGBgY206OmluX3BsYWNlYGAKKworKiBGcm9tIGBgQysrMjBgYDoKKworICAqIGBgPGNtL2RlcXVlPmBgOgorICAgIGBgY206OmVyYXNlYGAsIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL2xpc3Q+YGA6CisgICAgYGBjbTo6ZXJhc2VgYCwgYGBjbTo6ZXJhc2VfaWZgYAorCisgICogYGA8Y20vbWFwPmBgIDoKKyAgICBgYGNtOjplcmFzZV9pZmBgCisKKyAgKiBgYDxjbS9zZXQ+YGAgOgorICAgIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL3N0cmluZz5gYDoKKyAgICBgYGNtOjplcmFzZWBgLCBgYGNtOjplcmFzZV9pZmBgCisKKyAgKiBgYDxjbS91bm9yZGVyZWRfbWFwPmBgOgorICAgIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL3Vub3JkZXJlZF9zZXQ+YGA6CisgICAgYGBjbTo6ZXJhc2VfaWZgYAorCisgICogYGA8Y20vdmVjdG9yPmBgOgorICAgIGBgY206OmVyYXNlYGAsIGBgY206OmVyYXNlX2lmYGAKKworQWRkaXRpb25hbGx5LCBzb21lIHVzZWZ1bCBub24tc3RhbmRhcmQgZXh0ZW5zaW9ucyB0byB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnkKK2FyZSBhdmFpbGFibGUgaW4gaGVhZGVycyB1bmRlciB0aGUgZGlyZWN0b3J5IGBgY21leHQvYGAgaW4gbmFtZXNwYWNlIGBgY21gYC4KK1RoZXNlIGFyZToKKworKiBgYDxjbWV4dC9hbGdvcml0aG0+YGA6CisKKyAgKiBgYGNtOjphcHBlbmRgYDoKKyAgICBBcHBlbmQgZWxlbWVudHMgdG8gYSBzZXF1ZW50aWFsIGNvbnRhaW5lci4KKworICAqIGBgY206OmNvbnRhaW5zYGA6CisgICAgQ2hlY2tzIGlmIGVsZW1lbnQgb3Iga2V5IGlzIGNvbnRhaW5lZCBpbiBjb250YWluZXIuCisKKyogYGA8Y21leHQvaXRlcmF0b3I+YGA6CisKKyAgKiBgYGNtOjppc190ZXJhdG9yYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpdGVyYXRvciB0eXBlLgorCisgICogYGBjbTo6aXNfaW5wdXRfaXRlcmF0b3JgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGFuIGlucHV0IGl0ZXJhdG9yIHR5cGUuCisKKyAgKiBgYGNtOjppc19yYW5nZWBgOgorICAgIENoZWNrcyBpZiBhIHR5cGUgaXMgYSByYW5nZSB0eXBlOiBmdW5jdGlvbnMgYGBzdGQ6OmJlZ2luKClgYCBhbmQKKyAgICBgYHN0ZDo6ZW5kKClgYCBhcHBseS4KKworICAqIGBgY206OmlzX2lucHV0X3JhbmdlYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpbnB1dCByYW5nZSB0eXBlOiBmdW5jdGlvbnMgYGBzdGQ6OmJlZ2luKClgYCBhbmQKKyAgICBgYHN0ZDo6ZW5kKClgYCBhcHBseSBhbmQgcmV0dXJuIGFuIGlucHV0IGl0ZXJhdG9yLgorCisqIGBgPGNtZXh0L21lbW9yeT5gYDoKKworICAqIGBgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdGBgOgorICAgIEFwcGx5IGEgYGBzdGF0aWNfY2FzdGBgIHRvIGEgc21hcnQgcG9pbnRlci4KKworICAqIGBgY206OmR5bmFtaWNfcmVmZXJlbmNlX2Nhc3RgYDoKKyAgICBBcHBseSBhIGBgZHluYW1pY19jYXN0YGAgdG8gYSBzbWFydCBwb2ludGVyLgorCisqIGBgPGNtZXh0L3R5cGVfdHJhaXRzPmBgOgorCisgICogYGBjbTo6aXNfY29udGFpbmVyYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhIGNvbnRhaW5lciB0eXBlLgorCisgICogYGBjbTo6aXNfYXNzb2NpYXRpdmVfY29udGFpbmVyYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBhc3NvY2lhdGl2ZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3Vub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXJgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGFuIHVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3NlcXVlbmNlX2NvbnRhaW5lcmBgOgorICAgIENoZWNrcyBpZiBhIHR5cGUgaXMgYSBzZXF1ZW5jZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3VuaXF1ZV9wdHJgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGEgYGBzdGQ6OnVuaXF1ZV9wdHJgYCB0eXBlLgorCitEeW5hbWljIE1lbW9yeSBNYW5hZ2VtZW50Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIGVuc3VyZSBlZmZpY2llbnQgbWVtb3J5IG1hbmFnZW1lbnQsIGkuZS4gbm8gbWVtb3J5IGxlYWtzLCBpdCBpcyByZXF1aXJlZAordG8gdXNlIHNtYXJ0IHBvaW50ZXJzLiAgQW55IGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gbXVzdCBiZSBoYW5kbGVkIGJ5IGEKK3NtYXJ0IHBvaW50ZXIgc3VjaCBhcyBgYHN0ZDo6dW5pcXVlX3B0cmBgIG9yIGBgc3RkOjpzaGFyZWRfcHRyYGAuCisKK0l0IGlzIGFsbG93ZWQgdG8gcGFzcyByYXcgcG9pbnRlcnMgYmV0d2VlbiBvYmplY3RzIHRvIGVuYWJsZSBvYmplY3RzIHNoYXJpbmcuCitBIHJhdyBwb2ludGVyICoqbXVzdCoqIG5vdCBiZSBkZWxldGVkLiBPbmx5IHRoZSBvYmplY3Qocykgb3duaW5nIHRoZSBzbWFydAorcG9pbnRlciBhcmUgYWxsb3dlZCB0byBkZWxldGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeS4KKworVGhpcmQgUGFydGllcworPT09PT09PT09PT09PQorCitUbyBidWlsZCBDTWFrZSwgc29tZSB0aGlyZCBwYXJ0aWVzIGFyZSBuZWVkZWQuIFVuZGVyIGBgVXRpbGl0aWVzYGAKK2RpcmVjdG9yeSwgYXJlIHZlcnNpb25zIG9mIHRoZXNlIHRoaXJkIHBhcnRpZXMgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYW4KK2FsdGVybmF0ZSB0byB0aGUgb25lcyBwcm92aWRlZCBieSB0aGUgc3lzdGVtLgorCitUbyBlbmFibGUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdGhpcmQgcGFydGllcyBiZXR3ZWVuIHRoZSBzeXN0ZW0gYW5kIENNYWtlIG9uZXMsCitpbiBDTWFrZSBzb3VyY2VzLCB0aGlyZCBwYXJ0aWVzIGhlYWRlcnMgbXVzdCBiZSBwcmVmaXhlZCBieSBgYGNtM3AvYGAKKyhmb3IgZXhhbXBsZTogYGA8Y20zcC9qc29uL3JlYWRlci5oPmBgKS4gVGhlc2Ugd3JhcHBlcnMgYXJlIGxvY2F0ZWQgdW5kZXIKK2BgVXRpbGl0aWVzL2NtM3BgYCBkaXJlY3RvcnkuCiAKIFNvdXJjZSBUcmVlIExheW91dAogPT09PT09PT09PT09PT09PT09CkBAIC02OSw2ICsyMjAsMTUgQEAKICogYGBVdGlsaXRpZXMvYGA6CiAgIFNjcmlwdHMsIHRoaXJkLXBhcnR5IHNvdXJjZSBjb2RlLgogCisgICogYGBVdGlsaXRpZXMvc3RkL2NtYGA6CisgICAgU3VwcG9ydCBmaWxlcyBmb3IgdmFyaW91cyBDKysgc3RhbmRhcmRzLgorCisgICogYGBVdGlsaXRpZXMvc3RkL2NtZXh0YGA6CisgICAgRXh0ZW5zaW9ucyB0byB0aGUgQysrIFNUTC4KKworICAqIGBgVXRpbGl0aWVzL2NtM3BgYDoKKyAgICBQdWJsaWMgaGVhZGVycyBmb3IgdGhpcmQgcGFydGllcyBuZWVkZWQgdG8gYnVpbGQgQ01ha2UuCisKICAgKiBgYFV0aWxpdGllcy9TcGhpbngvYGA6CiAgICAgU3BoaW54IGNvbmZpZ3VyYXRpb24gdG8gYnVpbGQgQ01ha2UgdXNlciBkb2N1bWVudGF0aW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL2Rldi90ZXN0aW5nLnJzdCBiL0hlbHAvZGV2L3Rlc3RpbmcucnN0CmluZGV4IDIzZDBjYTMuLjI3OWU0YjIgMTAwNjQ0Ci0tLSBhL0hlbHAvZGV2L3Rlc3RpbmcucnN0CisrKyBiL0hlbHAvZGV2L3Rlc3RpbmcucnN0CkBAIC0zMyw3ICszMyw3IEBACiAuLiBfYENNYWtlIFJldmlldyBQcm9jZXNzYDogcmV2aWV3LnJzdAogLi4gX2BDTWFrZSBDRGFzaCBQYWdlYDogaHR0cHM6Ly9vcGVuLmNkYXNoLm9yZy9pbmRleC5waHA/cHJvamVjdD1DTWFrZQogLi4gX2BDTWFrZSBEYXNoYm9hcmQgU2NyaXB0cyBSZXBvc2l0b3J5YDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvZGFzaGJvYXJkLXNjcmlwdHMKLS4uIF9gY21ha2VfY29tbW9uLmNtYWtlYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvZGFzaGJvYXJkLXNjcmlwdHMvYmxvYi9tYXN0ZXIvY21ha2VfY29tbW9uLmNtYWtlCisuLiBfYGNtYWtlX2NvbW1vbi5jbWFrZWA6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2Rhc2hib2FyZC1zY3JpcHRzLy0vYmxvYi9tYXN0ZXIvY21ha2VfY29tbW9uLmNtYWtlCiAKIE5pZ2h0bHkgU3RhcnQgVGltZQogLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9BU01fRElBTEVDVC5yc3QgYi9IZWxwL2VudnZhci9BU01fRElBTEVDVC5yc3QKaW5kZXggYTA2ZTNjYi4uNzY4ZDhmZSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQVNNX0RJQUxFQ1QucnN0CisrKyBiL0hlbHAvZW52dmFyL0FTTV9ESUFMRUNULnJzdApAQCAtMSw2ICsxLDggQEAKIEFTTTxESUFMRUNUPgogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYSBzcGVjaWZpYyBkaWFsZWN0IG9mIGFzc2VtYmx5IGxhbmd1YWdlCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9BU01fRElBTEVDVEZMQUdTLnJzdCBiL0hlbHAvZW52dmFyL0FTTV9ESUFMRUNURkxBR1MucnN0CmluZGV4IDNjM2IwMmEuLjY2YTc1ZTIgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0FTTV9ESUFMRUNURkxBR1MucnN0CisrKyBiL0hlbHAvZW52dmFyL0FTTV9ESUFMRUNURkxBR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQVNNPERJQUxFQ1Q+RkxBR1MKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIERlZmF1bHQgY29tcGlsYXRpb24gZmxhZ3MgdG8gYmUgdXNlZCB3aGVuIGNvbXBpbGluZyBhIHNwZWNpZmljIGRpYWxlY3Qgb2YgYW4KQEAgLTExLDMgKzEzLDUgQEAKIGFzIGBgQ01BS0VfQVNNPERJQUxFQ1Q+X0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YGAuICBGb3IgYW55IGNvbmZpZ3VyYXRpb24KIHJ1biAoaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGlnbm9yZWQsIGlmIHRoZQogYGBDTUFLRV9BU008RElBTEVDVD5fRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gYCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitTZWUgYWxzbyA6dmFyaWFibGU6YENNQUtFX0FTTTxESUFMRUNUPl9GTEFHU19JTklUIDxDTUFLRV88TEFORz5fRkxBR1NfSU5JVD5gLgpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ0MucnN0IGIvSGVscC9lbnZ2YXIvQ0MucnN0CmluZGV4IGVmMTIwNTkuLjdkMmI4NzAgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NDLnJzdAorKysgYi9IZWxwL2VudnZhci9DQy5yc3QKQEAgLTEsNiArMSw4IEBACiBDQwogLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogUHJlZmVycmVkIGV4ZWN1dGFibGUgZm9yIGNvbXBpbGluZyBgYENgYCBsYW5ndWFnZSBmaWxlcy4gV2lsbCBvbmx5IGJlIHVzZWQgYnkKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NDTUFLRV9DT0xPUlMucnN0IGIvSGVscC9lbnZ2YXIvQ0NNQUtFX0NPTE9SUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3NmJmOAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZW52dmFyL0NDTUFLRV9DT0xPUlMucnN0CkBAIC0wLDAgKzEsMzYgQEAKK0NDTUFLRV9DT0xPUlMKKy0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitEZXRlcm1pbmVzIHdoYXQgY29sb3JzIGFyZSB1c2VkIGJ5IHRoZSBDTWFrZSBjdXJzZXMgaW50ZXJmYWNlLAord2hlbiBydW4gb24gYSB0ZXJtaW5hbCB0aGF0IHN1cHBvcnRzIGNvbG9ycy4KK1RoZSBzeW50YXggZm9sbG93cyB0aGUgc2FtZSBjb252ZW50aW9ucyBhcyBgYExTX0NPTE9SU2BgOwordGhhdCBpcywgYSBsaXN0IG9mIGtleS92YWx1ZSBwYWlycyBzZXBhcmF0ZWQgYnkgYGA6YGAuCisKK0tleXMgYXJlIGEgc2luZ2xlIGxldHRlciBjb3JyZXNwb25kaW5nIHRvIGEgQ01ha2UgY2FjaGUgdmFyaWFibGUgdHlwZToKKworLSBgYHNgYDogQSBgYFNUUklOR2BgLgorLSBgYHBgYDogQSBgYEZJTEVQQVRIYGAuCistIGBgY2BgOiBBIHZhbHVlIHdoaWNoIGhhcyBhbiBhc3NvY2lhdGVkIGxpc3Qgb2YgY2hvaWNlcy4KKy0gYGB5YGA6IEEgYGBCT09MYGAgd2hpY2ggaGFzIGEgdHJ1ZS1saWtlIHZhbHVlIChlLmcuIGBgT05gYCwgYGBZRVNgYCkuCistIGBgbmBgOiBBIGBgQk9PTGBgIHdoaWNoIGhhcyBhIGZhbHNlLWxpa2UgdmFsdWUgKGUuZy4gYGBPRkZgYCwgYGBOT2BgKS4KKworVmFsdWVzIGFyZSBhbiBpbnRlZ2VyIG51bWJlciB0aGF0IHNwZWNpZmllcyB3aGF0IGNvbG9yIHRvIHVzZS4KK2BgMGBgIGlzIGJsYWNrICh5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhhdCkuCitPdGhlcnMgYXJlIGRldGVybWluZWQgYnkgeW91ciB0ZXJtaW5hbCdzIGNvbG9yIHN1cHBvcnQuCitNb3N0IChjb2xvcikgdGVybWluYWxzIHdpbGwgc3VwcG9ydCBhdCBsZWFzdCA4IG9yIDE2IGNvbG9ycy4KK1NvbWUgd2lsbCBzdXBwb3J0IHVwIHRvIDI1NiBjb2xvcnMuIFRoZSBjb2xvcnMgd2lsbCBsaWtlbHkgbWF0Y2gKK2B0aGlzIGNoYXJ0IDxodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzEvMTUvWHRlcm1fMjU2Y29sb3JfY2hhcnQuc3ZnPmBfLAorYWx0aG91Z2ggdGhlIGZpcnN0IDE2IGNvbG9ycyBtYXkgbWF0Y2ggdGhlIG9yaWdpbmFsCitgQ0dBIGNvbG9yIHBhbGV0dGUgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbG9yX0dyYXBoaWNzX0FkYXB0ZXIjQ29sb3JfcGFsZXR0ZT5gXy4KKyhNYW55IG1vZGVybiB0ZXJtaW5hbCBlbXVsYXRvcnMgYWxzbyBhbGxvdyB0aGVpciBjb2xvciBwYWxldHRlLAorYXQgbGVhc3QgZm9yIHRoZSBmaXJzdCAxNiBjb2xvcnMsIHRvIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIuKQorCitOb3RlIHRoYXQgZmFpcmx5IG1pbmltYWwgY2hlY2tpbmcgaXMgZG9uZSBmb3IgYmFkIGNvbG9ycworKGFsdGhvdWdoIGEgdmFsdWUgaGlnaGVyIHRoYW4gd2hhdCBjdXJzZXMgYmVsaWV2ZXMgeW91ciB0ZXJtaW5hbCBzdXBwb3J0cword2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkKSBvciBiYWQgc3ludGF4LgorCitGb3IgZXhhbXBsZTo6CisKKyAgQ0NNQUtFX0NPTE9SUz0ncz0zOTpwPTIyMDpjPTIwNzpuPTE5Njp5PTQ2JwpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ0ZMQUdTLnJzdCBiL0hlbHAvZW52dmFyL0NGTEFHUy5yc3QKaW5kZXggZmRhOWNjYy4uMzFkYjZhNiAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ0ZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9DRkxBR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQ0ZMQUdTCiAtLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGBgQ2BgIGZpbGVzLiBXaWxsIG9ubHkgYmUKQEAgLTksMyArMTEsNSBAQAogYXMgOnZhcmlhYmxlOmBDTUFLRV9DX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YC4gRm9yIGFueSBjb25maWd1cmF0aW9uIHJ1bgogKGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9DX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitTZWUgYWxzbyA6dmFyaWFibGU6YENNQUtFX0NfRkxBR1NfSU5JVCA8Q01BS0VfPExBTkc+X0ZMQUdTX0lOSVQ+YC4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0JVSUxEX1BBUkFMTEVMX0xFVkVMLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX0JVSUxEX1BBUkFMTEVMX0xFVkVMLnJzdAppbmRleCAxOTljYTNlLi5kYmM1ODlhIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9CVUlMRF9QQVJBTExFTF9MRVZFTC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfQlVJTERfUEFSQUxMRUxfTEVWRUwucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQlVJTERfUEFSQUxMRUxfTEVWRUwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBwcm9jZXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0NPTkZJR19UWVBFLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX0NPTkZJR19UWVBFLnJzdAppbmRleCAxNjg1OTNkLi5jMjA3YTQ4IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9DT05GSUdfVFlQRS5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfQ09ORklHX1RZUEUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ09ORklHX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFRoZSBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIDpyZWY6YEJ1aWxkIFRvb2wgTW9kZWAgYW5kCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QKaW5kZXggZTllMDgxMC4uOWU2NzhiZSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMucnN0CisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgOnZhcmlhYmxlOmBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU2Agd2hlbiB0aGVyZQpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUi5yc3QKaW5kZXggZjJkMDU1Zi4uMzQ4OGIwNCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SLnJzdAorKysgYi9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1IucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfR0VORVJBVE9SCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogU3BlY2lmaWVzIHRoZSBDTWFrZSBkZWZhdWx0IGdlbmVyYXRvciB0byB1c2Ugd2hlbiBubyBnZW5lcmF0b3IgaXMgc3VwcGxpZWQKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRS5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UucnN0CmluZGV4IDE2NTRmYTEuLjhjYTdkODAgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRS5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIERlZmF1bHQgdmFsdWUgZm9yIDp2YXJpYWJsZTpgQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFYCBpZiBubyBDYWNoZSBlbnRyeSBpcwpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STS5yc3QKaW5kZXggOTE3YjMwYi4uYjAzOTg0NSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLnJzdAorKysgYi9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCB2YWx1ZSBmb3IgOnZhcmlhYmxlOmBDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk1gIGlmIG5vIENhY2hlIGVudHJ5CmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfVE9PTFNFVC5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfVE9PTFNFVC5yc3QKaW5kZXggN2FjMzg1Ni4uMzk0ZGQ4OCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQucnN0CisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9UT09MU0VULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dFTkVSQVRPUl9UT09MU0VUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBEZWZhdWx0IHZhbHVlIGZvciA6dmFyaWFibGU6YENNQUtFX0dFTkVSQVRPUl9UT09MU0VUYCBpZiBubyBDYWNoZSBlbnRyeQpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ01BS0VfTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdAppbmRleCA0ZjkxZTlhLi5jMzg0ZmExIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdAorKysgYi9IZWxwL2VudnZhci9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DT01QSUxFUl9MQVVOQ0hFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIERlZmF1bHQgY29tcGlsZXIgbGF1bmNoZXIgdG8gdXNlIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlLiBXaWxsIG9ubHkgYmUgdXNlZApkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ01BS0VfTVNWQ0lERV9SVU5fUEFUSC5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9NU1ZDSURFX1JVTl9QQVRILnJzdAppbmRleCA3N2VhZDRkLi41YmFiYmU1IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9NU1ZDSURFX1JVTl9QQVRILnJzdAorKysgYi9IZWxwL2VudnZhci9DTUFLRV9NU1ZDSURFX1JVTl9QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX01TVkNJREVfUlVOX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRXh0cmEgUEFUSCBsb2NhdGlvbnMgZm9yIGN1c3RvbSBjb21tYW5kcyB3aGVuIHVzaW5nCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9OT19WRVJCT1NFLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX05PX1ZFUkJPU0UucnN0CmluZGV4IDE0OWVmYmQuLmZlNzMzZjggMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NNQUtFX05PX1ZFUkJPU0UucnN0CisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX05PX1ZFUkJPU0UucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTk9fVkVSQk9TRQogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIERpc2FibGVzIHZlcmJvc2Ugb3V0cHV0IGZyb20gQ01ha2Ugd2hlbiA6ZW52dmFyOmBWRVJCT1NFYCBlbnZpcm9ubWVudCB2YXJpYWJsZQogaXMgc2V0LgogCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9PU1hfQVJDSElURUNUVVJFUy5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9PU1hfQVJDSElURUNUVVJFUy5yc3QKaW5kZXggZWY3ZDU0Ny4uNGJmYTM2YSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMucnN0CisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX09TWF9BUkNISVRFQ1RVUkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBUYXJnZXQgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBmb3IgbWFjT1MuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9QUkVGSVhfUEFUSC5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9QUkVGSVhfUEFUSC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkNmFhMQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX1BSRUZJWF9QQVRILnJzdApAQCAtMCwwICsxLDE5IEBACitDTUFLRV9QUkVGSVhfUEFUSAorLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCisuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKKworVGhlIGBgQ01BS0VfUFJFRklYX1BBVEhgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYXkgYmUgc2V0IHRvIGEgbGlzdCBvZgorZGlyZWN0b3JpZXMgc3BlY2lmeWluZyBpbnN0YWxsYXRpb24gKnByZWZpeGVzKiB0byBiZSBzZWFyY2hlZCBieSB0aGUKKzpjb21tYW5kOmBmaW5kX3BhY2thZ2VgLCA6Y29tbWFuZDpgZmluZF9wcm9ncmFtYCwgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAsCis6Y29tbWFuZDpgZmluZF9maWxlYCwgYW5kIDpjb21tYW5kOmBmaW5kX3BhdGhgIGNvbW1hbmRzLiAgRWFjaCBjb21tYW5kIHdpbGwKK2FkZCBhcHByb3ByaWF0ZSBzdWJkaXJlY3RvcmllcyAobGlrZSBgYGJpbmBgLCBgYGxpYmBgLCBvciBgYGluY2x1ZGVgYCkKK2FzIHNwZWNpZmllZCBpbiBpdHMgb3duIGRvY3VtZW50YXRpb24uCisKK1RoaXMgdmFyaWFibGUgbWF5IGhvbGQgYSBzaW5nbGUgcHJlZml4IG9yIGEgbGlzdCBvZiBwcmVmaXhlcyBzZXBhcmF0ZWQKK2J5IGBgOmBgIG9uIFVOSVggb3IgYGA7YGAgb24gV2luZG93cyAodGhlIHNhbWUgYXMgdGhlIGBgUEFUSGBgIGVudmlyb25tZW50Cit2YXJpYWJsZSBjb252ZW50aW9uIG9uIHRob3NlIHBsYXRmb3JtcykuCisKK1NlZSBhbHNvIHRoZSA6dmFyaWFibGU6YENNQUtFX1BSRUZJWF9QQVRIYCBDTWFrZSB2YXJpYWJsZS4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NTRkxBR1MucnN0IGIvSGVscC9lbnZ2YXIvQ1NGTEFHUy5yc3QKaW5kZXggNDA0YmI1OS4uZThjMGExMSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ1NGTEFHUy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ1NGTEFHUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDU0ZMQUdTCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYGBDU2hhcnBgYCBsYW5ndWFnZSBmaWxlcy4gV2lsbCBvbmx5IGJlCkBAIC05LDMgKzExLDUgQEAKIGFzIDp2YXJpYWJsZTpgQ01BS0VfQ1NoYXJwX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YC4gRm9yIGFueSBjb25maWd1cmF0aW9uCiBydW4gKGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9DU2hhcnBfRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKK1NlZSBhbHNvIDp2YXJpYWJsZTpgQ01BS0VfQ1NoYXJwX0ZMQUdTX0lOSVQgPENNQUtFXzxMQU5HPl9GTEFHU19JTklUPmAuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DVEVTVF9JTlRFUkFDVElWRV9ERUJVR19NT0RFLnJzdCBiL0hlbHAvZW52dmFyL0NURVNUX0lOVEVSQUNUSVZFX0RFQlVHX01PREUucnN0CmluZGV4IGUxOTkxYjIuLmIyN2JjMDkgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NURVNUX0lOVEVSQUNUSVZFX0RFQlVHX01PREUucnN0CisrKyBiL0hlbHAvZW52dmFyL0NURVNUX0lOVEVSQUNUSVZFX0RFQlVHX01PREUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfSU5URVJBQ1RJVkVfREVCVUdfTU9ERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBFbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdpbGwgZXhpc3QgYW5kIGJlIHNldCB0byBgYDFgYCB3aGVuIGEgdGVzdCBleGVjdXRlZApkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1RFU1RfT1VUUFVUX09OX0ZBSUxVUkUucnN0IGIvSGVscC9lbnZ2YXIvQ1RFU1RfT1VUUFVUX09OX0ZBSUxVUkUucnN0CmluZGV4IGQ4YjQyNjIuLjljNmJkMDMgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NURVNUX09VVFBVVF9PTl9GQUlMVVJFLnJzdAorKysgYi9IZWxwL2VudnZhci9DVEVTVF9PVVRQVVRfT05fRkFJTFVSRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9PVVRQVVRfT05fRkFJTFVSRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogQm9vbGVhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IGNvbnRyb2xzIGlmIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGxvZ2dlZCBmb3IKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NURVNUX1BBUkFMTEVMX0xFVkVMLnJzdCBiL0hlbHAvZW52dmFyL0NURVNUX1BBUkFMTEVMX0xFVkVMLnJzdAppbmRleCBmZDQ5MzZlLi5hMjFjNzgzIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DVEVTVF9QQVJBTExFTF9MRVZFTC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ1RFU1RfUEFSQUxMRUxfTEVWRUwucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfUEFSQUxMRUxfTEVWRUwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFNwZWNpZnkgdGhlIG51bWJlciBvZiB0ZXN0cyBmb3IgQ1Rlc3QgdG8gcnVuIGluIHBhcmFsbGVsLiBTZWUgOm1hbnVhbDpgY3Rlc3QoMSlgCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DVEVTVF9QUk9HUkVTU19PVVRQVVQucnN0IGIvSGVscC9lbnZ2YXIvQ1RFU1RfUFJPR1JFU1NfT1VUUFVULnJzdAppbmRleCBiMzZhNmI4Li44YzI5ZDdkIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DVEVTVF9QUk9HUkVTU19PVVRQVVQucnN0CisrKyBiL0hlbHAvZW52dmFyL0NURVNUX1BST0dSRVNTX09VVFBVVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9QUk9HUkVTU19PVVRQVVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBCb29sZWFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgYWZmZWN0cyBob3cgOm1hbnVhbDpgY3Rlc3QgPGN0ZXN0KDEpPmAKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NURVNUX1VTRV9MQVVOQ0hFUlNfREVGQVVMVC5yc3QgYi9IZWxwL2VudnZhci9DVEVTVF9VU0VfTEFVTkNIRVJTX0RFRkFVTFQucnN0CmluZGV4IDc5ZGJiNzkuLmRmZmQ2M2QgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NURVNUX1VTRV9MQVVOQ0hFUlNfREVGQVVMVC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ1RFU1RfVVNFX0xBVU5DSEVSU19ERUZBVUxULnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX1VTRV9MQVVOQ0hFUlNfREVGQVVMVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIEluaXRpYWxpemVzIHRoZSA6dmFyaWFibGU6YENURVNUX1VTRV9MQVVOQ0hFUlNgIHZhcmlhYmxlIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DVURBQ1hYLnJzdCBiL0hlbHAvZW52dmFyL0NVREFDWFgucnN0CmluZGV4IDEwYzBmOWQuLjFhZmZhYjYgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NVREFDWFgucnN0CisrKyBiL0hlbHAvZW52dmFyL0NVREFDWFgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1VEQUNYWAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBQcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGBgQ1VEQWBgIGxhbmd1YWdlIGZpbGVzLiBXaWxsIG9ubHkgYmUgdXNlZCBieQpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1VEQUZMQUdTLnJzdCBiL0hlbHAvZW52dmFyL0NVREFGTEFHUy5yc3QKaW5kZXggNDQ1NmQ2Yi4uMWYxYmRlNSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ1VEQUZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9DVURBRkxBR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1VEQUZMQUdTCiAtLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGBgQ1VEQWBgIGZpbGVzLiBXaWxsIG9ubHkgYmUKQEAgLTksMyArMTEsNSBAQAogY2FjaGUgYXMgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YC4gRm9yIGFueSBjb25maWd1cmF0aW9uCiBydW4gKGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGlmCiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitTZWUgYWxzbyA6dmFyaWFibGU6YENNQUtFX0NVREFfRkxBR1NfSU5JVCA8Q01BS0VfPExBTkc+X0ZMQUdTX0lOSVQ+YC4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NVREFIT1NUQ1hYLnJzdCBiL0hlbHAvZW52dmFyL0NVREFIT1NUQ1hYLnJzdAppbmRleCBiOWY2NWJkLi44MWMxMjI4IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DVURBSE9TVENYWC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ1VEQUhPU1RDWFgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1VEQUhPU1RDWFgKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgaG9zdCBjb2RlIHdoZW4gY29tcGlsaW5nIGBgQ1VEQWBgCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DWFgucnN0IGIvSGVscC9lbnZ2YXIvQ1hYLnJzdAppbmRleCBkNjU1MzUwLi5kZjkyN2Q1IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DWFgucnN0CisrKyBiL0hlbHAvZW52dmFyL0NYWC5yc3QKQEAgLTEsNiArMSw4IEBACiBDWFgKIC0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBQcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGBgQ1hYYGAgbGFuZ3VhZ2UgZmlsZXMuIFdpbGwgb25seSBiZSB1c2VkIGJ5CmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DWFhGTEFHUy5yc3QgYi9IZWxwL2VudnZhci9DWFhGTEFHUy5yc3QKaW5kZXggZDcyOTZkYy4uYTNjZWY3NyAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ1hYRkxBR1MucnN0CisrKyBiL0hlbHAvZW52dmFyL0NYWEZMQUdTLnJzdApAQCAtMSw2ICsxLDggQEAKIENYWEZMQUdTCiAtLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBEZWZhdWx0IGNvbXBpbGF0aW9uIGZsYWdzIHRvIGJlIHVzZWQgd2hlbiBjb21waWxpbmcgYGBDWFhgYCAoQysrKSBmaWxlcy4gV2lsbApAQCAtOSwzICsxMSw1IEBACiBhcyA6dmFyaWFibGU6YENNQUtFX0NYWF9GTEFHUyA8Q01BS0VfPExBTkc+X0ZMQUdTPmAuIEZvciBhbnkgY29uZmlndXJhdGlvbiBydW4gKAogaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGlnbm9yZWQgaWYKIHRoZSA6dmFyaWFibGU6YENNQUtFX0NYWF9GTEFHUyA8Q01BS0VfPExBTkc+X0ZMQUdTPmAgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworU2VlIGFsc28gOnZhcmlhYmxlOmBDTUFLRV9DWFhfRkxBR1NfSU5JVCA8Q01BS0VfPExBTkc+X0ZMQUdTX0lOSVQ+YC4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0RBU0hCT0FSRF9URVNUX0ZST01fQ1RFU1QucnN0IGIvSGVscC9lbnZ2YXIvREFTSEJPQVJEX1RFU1RfRlJPTV9DVEVTVC5yc3QKaW5kZXggNmE1MmQ2NC4uNzYzNTM0MiAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvREFTSEJPQVJEX1RFU1RfRlJPTV9DVEVTVC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvREFTSEJPQVJEX1RFU1RfRlJPTV9DVEVTVC5yc3QKQEAgLTEsNiArMSw4IEBACiBEQVNIQk9BUkRfVEVTVF9GUk9NX0NURVNUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIEVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgd2lsbCBleGlzdCB3aGVuIGEgdGVzdCBleGVjdXRlZCBieSA6bWFudWFsOmBjdGVzdCgxKWAKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0RFU1RESVIucnN0IGIvSGVscC9lbnZ2YXIvREVTVERJUi5yc3QKaW5kZXggZDIxNDRhZS4uZWUyOTBmMiAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvREVTVERJUi5yc3QKKysrIGIvSGVscC9lbnZ2YXIvREVTVERJUi5yc3QKQEAgLTEsNiArMSw4IEBACiBERVNURElSCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIE9uIFVOSVggb25lIGNhbiB1c2UgdGhlIGBgREVTVERJUmBgIG1lY2hhbmlzbSBpbiBvcmRlciB0byByZWxvY2F0ZSB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0ZDLnJzdCBiL0hlbHAvZW52dmFyL0ZDLnJzdAppbmRleCBkNmNhYmJjLi5mMWMyNmIwIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9GQy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvRkMucnN0CkBAIC0xLDYgKzEsOCBAQAogRkMKIC0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYGBGb3J0cmFuYGAgbGFuZ3VhZ2UgZmlsZXMuIFdpbGwgb25seSBiZSB1c2VkCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9GRkxBR1MucnN0IGIvSGVscC9lbnZ2YXIvRkZMQUdTLnJzdAppbmRleCAwMmQzYzM0Li40YzFmM2QyIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9GRkxBR1MucnN0CisrKyBiL0hlbHAvZW52dmFyL0ZGTEFHUy5yc3QKQEAgLTEsNiArMSw4IEBACiBGRkxBR1MKIC0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBEZWZhdWx0IGNvbXBpbGF0aW9uIGZsYWdzIHRvIGJlIHVzZWQgd2hlbiBjb21waWxpbmcgYGBGb3J0cmFuYGAgZmlsZXMuIFdpbGwgb25seQpAQCAtOSwzICsxMSw1IEBACiBhcyA6dmFyaWFibGU6YENNQUtFX0ZvcnRyYW5fRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gLiBGb3IgYW55IGNvbmZpZ3VyYXRpb24KIHJ1biAoaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGlnbm9yZWQgaWYKIHRoZSA6dmFyaWFibGU6YENNQUtFX0ZvcnRyYW5fRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKK1NlZSBhbHNvIDp2YXJpYWJsZTpgQ01BS0VfRm9ydHJhbl9GTEFHU19JTklUIDxDTUFLRV88TEFORz5fRkxBR1NfSU5JVD5gLgpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvTERGTEFHUy5yc3QgYi9IZWxwL2VudnZhci9MREZMQUdTLnJzdAppbmRleCA4MTZkNmVmLi43OGIzNGY0IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9MREZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9MREZMQUdTLnJzdApAQCAtMSw2ICsxLDggQEAKIExERkxBR1MKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogV2lsbCBvbmx5IGJlIHVzZWQgYnkgQ01ha2Ugb24gdGhlIGZpcnN0IGNvbmZpZ3VyYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0CmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQucnN0IGIvSGVscC9lbnZ2YXIvTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULnJzdAppbmRleCA2NjJiZDAzLi4xNTU4NzA0IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQucnN0CisrKyBiL0hlbHAvZW52dmFyL01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC5yc3QKQEAgLTEsNiArMSw4IEBACiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBTcGVjaWZ5IHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgbWFjT1Mgb24gd2hpY2ggdGhlIHRhcmdldCBiaW5hcmllcyBhcmUKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL09CSkMucnN0IGIvSGVscC9lbnZ2YXIvT0JKQy5yc3QKaW5kZXggMzBjMGQxMy4uMmQ5NTgwNiAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvT0JKQy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvT0JKQy5yc3QKQEAgLTEsNiArMSw4IEBACiBPQkpDCiAtLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYuNworCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogUHJlZmVycmVkIGV4ZWN1dGFibGUgZm9yIGNvbXBpbGluZyBgYE9CSkNgYCBsYW5ndWFnZSBmaWxlcy4gV2lsbCBvbmx5IGJlIHVzZWQKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL09CSkNYWC5yc3QgYi9IZWxwL2VudnZhci9PQkpDWFgucnN0CmluZGV4IGE3MmY3ZTcuLjcxMjg2ZDkgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL09CSkNYWC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvT0JKQ1hYLnJzdApAQCAtMSw2ICsxLDggQEAKIE9CSkNYWAogLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYuNworCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogUHJlZmVycmVkIGV4ZWN1dGFibGUgZm9yIGNvbXBpbGluZyBgYE9CSkNYWGBgIGxhbmd1YWdlIGZpbGVzLiBXaWxsIG9ubHkgYmUgdXNlZApkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvUGFja2FnZU5hbWVfUk9PVC5yc3QgYi9IZWxwL2VudnZhci9QYWNrYWdlTmFtZV9ST09ULnJzdAppbmRleCA4MmIwYTA2Li5mYzJhMWQ1IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9QYWNrYWdlTmFtZV9ST09ULnJzdAorKysgYi9IZWxwL2VudnZhci9QYWNrYWdlTmFtZV9ST09ULnJzdApAQCAtMSw2ICsxLDggQEAKIDxQYWNrYWdlTmFtZT5fUk9PVAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIuMQorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogQ2FsbHMgdG8gOmNvbW1hbmQ6YGZpbmRfcGFja2FnZSg8UGFja2FnZU5hbWU+KWAgd2lsbCBzZWFyY2ggaW4gcHJlZml4ZXMKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL1JDLnJzdCBiL0hlbHAvZW52dmFyL1JDLnJzdAppbmRleCA1NTc1MjBlLi4zZWMxNzg4IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9SQy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvUkMucnN0CkBAIC0xLDYgKzEsOCBAQAogUkMKIC0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYGByZXNvdXJjZWBgIGZpbGVzLiBXaWxsIG9ubHkgYmUgdXNlZCBieSBDTWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvUkNGTEFHUy5yc3QgYi9IZWxwL2VudnZhci9SQ0ZMQUdTLnJzdAppbmRleCA0NTQxOWZlLi5mMzNhOWE4IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9SQ0ZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9SQ0ZMQUdTLnJzdApAQCAtMSw2ICsxLDggQEAKIFJDRkxBR1MKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGBgcmVzb3VyY2VgYCBmaWxlcy4gV2lsbApAQCAtOSwzICsxMSw1IEBACiB0aGUgY2FjaGUgYXMgOnZhcmlhYmxlOmBDTUFLRV9SQ19GTEFHUyA8Q01BS0VfPExBTkc+X0ZMQUdTPmAuIEZvciBhbnkKIGNvbmZpZ3VyYXRpb24gcnVuIChpbmNsdWRpbmcgdGhlIGZpcnN0KSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgaWdub3JlZAogaWYgdGhlIDp2YXJpYWJsZTpgQ01BS0VfUkNfRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKK1NlZSBhbHNvIDp2YXJpYWJsZTpgQ01BS0VfUkNfRkxBR1NfSU5JVCA8Q01BS0VfPExBTkc+X0ZMQUdTX0lOSVQ+YC4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL1NXSUZUQy5yc3QgYi9IZWxwL2VudnZhci9TV0lGVEMucnN0CmluZGV4IGIxMmU1MWQuLmNlMDFjYTIgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL1NXSUZUQy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvU1dJRlRDLnJzdApAQCAtMSw2ICsxLDggQEAKIFNXSUZUQwogLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYGBTd2lmdGBgIGxhbmd1YWdlIGZpbGVzLiBXaWxsIG9ubHkgYmUgdXNlZCBieQpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvVkVSQk9TRS5yc3QgYi9IZWxwL2VudnZhci9WRVJCT1NFLnJzdAppbmRleCAyZDc3NWE1Li41OTExOTUxIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9WRVJCT1NFLnJzdAorKysgYi9IZWxwL2VudnZhci9WRVJCT1NFLnJzdApAQCAtMSw2ICsxLDggQEAKIFZFUkJPU0UKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBBY3RpdmF0ZXMgdmVyYm9zZSBvdXRwdXQgZnJvbSBDTWFrZSBhbmQgeW91ciBidWlsZCB0b29scyBvZiBjaG9pY2Ugd2hlbgogeW91IHN0YXJ0IHRvIGFjdHVhbGx5IGJ1aWxkIHlvdXIgcHJvamVjdC4KIApkaWZmIC0tZ2l0IGEvSGVscC9nZW5lcmF0b3IvR3JlZW4gSGlsbHMgTVVMVEkucnN0IGIvSGVscC9nZW5lcmF0b3IvR3JlZW4gSGlsbHMgTVVMVEkucnN0CmluZGV4IGRmZmM2NzkuLjIyNDY2OTkgMTAwNjQ0Ci0tLSBhL0hlbHAvZ2VuZXJhdG9yL0dyZWVuIEhpbGxzIE1VTFRJLnJzdAorKysgYi9IZWxwL2dlbmVyYXRvci9HcmVlbiBIaWxscyBNVUxUSS5yc3QKQEAgLTEsNiArMSw4IEBACiBHcmVlbiBIaWxscyBNVUxUSQogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIEdlbmVyYXRlcyBHcmVlbiBIaWxscyBNVUxUSSBwcm9qZWN0IGZpbGVzIChleHBlcmltZW50YWwsIHdvcmstaW4tcHJvZ3Jlc3MpLgogCiBUaGUgYnVpbGRzeXN0ZW0gaGFzIHByZWRldGVybWluZWQgYnVpbGQtY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0aGF0IGNhbiBiZSBjb250cm9sbGVkCmRpZmYgLS1naXQgYS9IZWxwL2dlbmVyYXRvci9OaW5qYSBNdWx0aS1Db25maWcucnN0IGIvSGVscC9nZW5lcmF0b3IvTmluamEgTXVsdGktQ29uZmlnLnJzdAppbmRleCBmNDgwZWI4Li5lNmM3YTFjIDEwMDY0NAotLS0gYS9IZWxwL2dlbmVyYXRvci9OaW5qYSBNdWx0aS1Db25maWcucnN0CisrKyBiL0hlbHAvZ2VuZXJhdG9yL05pbmphIE11bHRpLUNvbmZpZy5yc3QKQEAgLTEsNiArMSw4IEBACiBOaW5qYSBNdWx0aS1Db25maWcKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIEdlbmVyYXRlcyBtdWx0aXBsZSBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAgZmlsZXMuCiAKIFRoaXMgZ2VuZXJhdG9yIGlzIHZlcnkgbXVjaCBsaWtlIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yLCBidXQgd2l0aApkaWZmIC0tZ2l0IGEvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNCAyMDE1LnJzdCBiL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTQgMjAxNS5yc3QKaW5kZXggNzM4M2Y3YS4uNDAxODQ1ZCAxMDA2NDQKLS0tIGEvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNCAyMDE1LnJzdAorKysgYi9IZWxwL2dlbmVyYXRvci9WaXN1YWwgU3R1ZGlvIDE0IDIwMTUucnN0CkBAIC0xLDYgKzEsOCBAQAogVmlzdWFsIFN0dWRpbyAxNCAyMDE1CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIEdlbmVyYXRlcyBWaXN1YWwgU3R1ZGlvIDE0IChWUyAyMDE1KSBwcm9qZWN0IGZpbGVzLgogCiBQcm9qZWN0IFR5cGVzCmRpZmYgLS1naXQgYS9IZWxwL2dlbmVyYXRvci9WaXN1YWwgU3R1ZGlvIDE1IDIwMTcucnN0IGIvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNSAyMDE3LnJzdAppbmRleCA3ZTZmMGZiLi5lN2JhYWFkIDEwMDY0NAotLS0gYS9IZWxwL2dlbmVyYXRvci9WaXN1YWwgU3R1ZGlvIDE1IDIwMTcucnN0CisrKyBiL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTUgMjAxNy5yc3QKQEAgLTEsNiArMSw4IEBACiBWaXN1YWwgU3R1ZGlvIDE1IDIwMTcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcuMQorCiBHZW5lcmF0ZXMgVmlzdWFsIFN0dWRpbyAxNSAoVlMgMjAxNykgcHJvamVjdCBmaWxlcy4KIAogUHJvamVjdCBUeXBlcwpkaWZmIC0tZ2l0IGEvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNiAyMDE5LnJzdCBiL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTYgMjAxOS5yc3QKaW5kZXggNGFlYzdmNy4uM2RhODA5MSAxMDA2NDQKLS0tIGEvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNiAyMDE5LnJzdAorKysgYi9IZWxwL2dlbmVyYXRvci9WaXN1YWwgU3R1ZGlvIDE2IDIwMTkucnN0CkBAIC0xLDYgKzEsOCBAQAogVmlzdWFsIFN0dWRpbyAxNiAyMDE5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBHZW5lcmF0ZXMgVmlzdWFsIFN0dWRpbyAxNiAoVlMgMjAxOSkgcHJvamVjdCBmaWxlcy4KIAogUHJvamVjdCBUeXBlcwpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CmluZGV4IGM5MTE2MjUuLmE0N2Q1ZTAgMTAwNjQ0Ci0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKQEAgLTU3LDcgKzU3LDExIEBACiBzZXRfcHJvcGVydHkoVEFSR0VUIE1hdGhGdW5jdGlvbnMgUFJPUEVSVFkgU09WRVJTSU9OICIxIikKIAogIyBpbnN0YWxsIHJ1bGVzCi1pbnN0YWxsKFRBUkdFVFMgTWF0aEZ1bmN0aW9ucyB0dXRvcmlhbF9jb21waWxlcl9mbGFncworc2V0KGluc3RhbGxhYmxlX2xpYnMgTWF0aEZ1bmN0aW9ucyB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKK2lmKFRBUkdFVCBTcXJ0TGlicmFyeSkKKyAgbGlzdChBUFBFTkQgaW5zdGFsbGFibGVfbGlicyBTcXJ0TGlicmFyeSkKK2VuZGlmKCkKK2luc3RhbGwoVEFSR0VUUyAke2luc3RhbGxhYmxlX2xpYnN9CiAgICAgICAgIERFU1RJTkFUSU9OIGxpYgogICAgICAgICBFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMpCiBpbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTAvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEwL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggZTBjMDYyMS4uMGJmZTIwYyAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTAvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMC9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CkBAIC00Nyw1ICs0Nyw5IEBACiB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgIkVYUE9SVElOR19NWU1BVEgiKQogCiAjIGluc3RhbGwgcnVsZXMKLWluc3RhbGwoVEFSR0VUUyBNYXRoRnVuY3Rpb25zIERFU1RJTkFUSU9OIGxpYikKK3NldChpbnN0YWxsYWJsZV9saWJzIE1hdGhGdW5jdGlvbnMpCitpZihUQVJHRVQgU3FydExpYnJhcnkpCisgIGxpc3QoQVBQRU5EIGluc3RhbGxhYmxlX2xpYnMgU3FydExpYnJhcnkpCitlbmRpZigpCitpbnN0YWxsKFRBUkdFVFMgJHtpbnN0YWxsYWJsZV9saWJzfSBERVNUSU5BVElPTiBsaWIpCiBpbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTEvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDExL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggMzJmNWUwOC4uMGQyODdjYSAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTEvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CkBAIC01MSw1ICs1MSw5IEBACiB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgIkVYUE9SVElOR19NWU1BVEgiKQogCiAjIGluc3RhbGwgcnVsZXMKLWluc3RhbGwoVEFSR0VUUyBNYXRoRnVuY3Rpb25zIERFU1RJTkFUSU9OIGxpYikKK3NldChpbnN0YWxsYWJsZV9saWJzIE1hdGhGdW5jdGlvbnMgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCitpZihUQVJHRVQgU3FydExpYnJhcnkpCisgIGxpc3QoQVBQRU5EIGluc3RhbGxhYmxlX2xpYnMgU3FydExpYnJhcnkpCitlbmRpZigpCitpbnN0YWxsKFRBUkdFVFMgJHtpbnN0YWxsYWJsZV9saWJzfSBERVNUSU5BVElPTiBsaWIpCiBpbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggNzIwZWU2NC4uZWEzODYxYyAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CkBAIC01Myw3ICs1MywxMSBAQAogdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTWF0aEZ1bmN0aW9ucyBQUklWQVRFICJFWFBPUlRJTkdfTVlNQVRIIikKIAogIyBpbnN0YWxsIHJ1bGVzCi1pbnN0YWxsKFRBUkdFVFMgTWF0aEZ1bmN0aW9ucyB0dXRvcmlhbF9jb21waWxlcl9mbGFncworc2V0KGluc3RhbGxhYmxlX2xpYnMgTWF0aEZ1bmN0aW9ucyB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKK2lmKFRBUkdFVCBTcXJ0TGlicmFyeSkKKyAgbGlzdChBUFBFTkQgaW5zdGFsbGFibGVfbGlicyBTcXJ0TGlicmFyeSkKK2VuZGlmKCkKK2luc3RhbGwoVEFSR0VUUyAke2luc3RhbGxhYmxlX2xpYnN9CiAgICAgICAgIERFU1RJTkFUSU9OIGxpYgogICAgICAgICBFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMpCiBpbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwNS9NYXRoRnVuY3Rpb25zL01ha2VUYWJsZS5jeHggYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXA1L01hdGhGdW5jdGlvbnMvTWFrZVRhYmxlLmN4eApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1ODU1Ni4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXA1L01hdGhGdW5jdGlvbnMvTWFrZVRhYmxlLmN4eAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8vIEEgc2ltcGxlIHByb2dyYW0gdGhhdCBidWlsZHMgYSBzcXJ0IHRhYmxlCi0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKLXsKLSAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGFyZ3VtZW50cwotICBpZiAoYXJnYyA8IDIpIHsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHN0ZDo6b2ZzdHJlYW0gZm91dChhcmd2WzFdLCBzdGQ6Omlvc19iYXNlOjpvdXQpOwotICBjb25zdCBib29sIGZpbGVPcGVuID0gZm91dC5pc19vcGVuKCk7Ci0gIGlmIChmaWxlT3BlbikgewotICAgIGZvdXQgPDwgImRvdWJsZSBzcXJ0VGFibGVbXSA9IHsiIDw8IHN0ZDo6ZW5kbDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAgIGZvdXQgPDwgc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGkpKSA8PCAiLCIgPDwgc3RkOjplbmRsOwotICAgIH0KLSAgICAvLyBjbG9zZSB0aGUgdGFibGUgd2l0aCBhIHplcm8KLSAgICBmb3V0IDw8ICIwfTsiIDw8IHN0ZDo6ZW5kbDsKLSAgICBmb3V0LmNsb3NlKCk7Ci0gIH0KLSAgcmV0dXJuIGZpbGVPcGVuID8gMCA6IDE7IC8vIHJldHVybiAwIGlmIHdyb3RlIHRoZSBmaWxlCi19CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXA2L01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXA2L01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggNGJmNjAyNC4uZjY0YzZhYyAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwNi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDYvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dApAQCAtOCwxMCArOCwyMCBAQAogCiAjIGRvZXMgdGhpcyBzeXN0ZW0gcHJvdmlkZSB0aGUgbG9nIGFuZCBleHAgZnVuY3Rpb25zPwogaW5jbHVkZShDaGVja1N5bWJvbEV4aXN0cykKLXNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgIm0iKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhsb2cgIm1hdGguaCIgSEFWRV9MT0cpCiBjaGVja19zeW1ib2xfZXhpc3RzKGV4cCAibWF0aC5oIiBIQVZFX0VYUCkKK2lmKE5PVCAoSEFWRV9MT0cgQU5EIEhBVkVfRVhQKSkKKyAgdW5zZXQoSEFWRV9MT0cgQ0FDSEUpCisgIHVuc2V0KEhBVkVfRVhQIENBQ0hFKQorICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICJtIikKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhsb2cgIm1hdGguaCIgSEFWRV9MT0cpCisgIGNoZWNrX3N5bWJvbF9leGlzdHMoZXhwICJtYXRoLmgiIEhBVkVfRVhQKQorICBpZihIQVZFX0xPRyBBTkQgSEFWRV9FWFApCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKE1hdGhGdW5jdGlvbnMgUFJJVkFURSBtKQorICBlbmRpZigpCitlbmRpZigpCiAKKyMgYWRkIGNvbXBpbGUgZGVmaW5pdGlvbnMKIGlmKEhBVkVfTE9HIEFORCBIQVZFX0VYUCkKICAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTWF0aEZ1bmN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklWQVRFICJIQVZFX0xPRyIgIkhBVkVfRVhQIikKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvaW5kZXgucnN0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9pbmRleC5yc3QKaW5kZXggYTg0NGNiZi4uZTQyYjRmMCAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9pbmRleC5yc3QKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9pbmRleC5yc3QKQEAgLTgxLDggKzgxLDggQEAKIE5leHQgbW9kaWZ5IGBgdHV0b3JpYWwuY3h4YGAgdG8gaW5jbHVkZSB0aGUgY29uZmlndXJlZCBoZWFkZXIgZmlsZSwKIGBgVHV0b3JpYWxDb25maWcuaGBgLgogCi1GaW5hbGx5LCBsZXQncyBwcmludCBvdXQgdGhlIHZlcnNpb24gbnVtYmVyIGJ5IHVwZGF0aW5nIGBgdHV0b3JpYWwuY3h4YGAgYXMKLWZvbGxvd3M6CitGaW5hbGx5LCBsZXQncyBwcmludCBvdXQgdGhlIGV4ZWN1dGFibGUgbmFtZSBhbmQgdmVyc2lvbiBudW1iZXIgYnkgdXBkYXRpbmcKK2BgdHV0b3JpYWwuY3h4YGAgYXMgZm9sbG93czoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMi90dXRvcmlhbC5jeHgKICAgOmxhbmd1YWdlOiBjKysKQEAgLTEwNiw3ICsxMDYsOCBAQAogaW4gQ01ha2UgaXMgYnkgdXNpbmcgdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX1NUQU5EQVJEYCB2YXJpYWJsZS4gRm9yIHRoaXMKIHR1dG9yaWFsLCBzZXQgdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX1NUQU5EQVJEYCB2YXJpYWJsZSBpbiB0aGUKIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlIHRvIDExIGFuZCA6dmFyaWFibGU6YENNQUtFX0NYWF9TVEFOREFSRF9SRVFVSVJFRGAgdG8KLVRydWU6CitUcnVlLiBNYWtlIHN1cmUgdG8gYWRkIHRoZSBgYENNQUtFX0NYWF9TVEFOREFSRGBgIGRlY2xhcmF0aW9ucyBhYm92ZSB0aGUgY2FsbAordG8gYGBhZGRfZXhlY3V0YWJsZWBgLgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAyL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKQEAgLTEyMCwxOCArMTIxLDI4IEBACiB3aXRoIHlvdXIgY2hvc2VuIGJ1aWxkIHRvb2wuCiAKIEZvciBleGFtcGxlLCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2UgY291bGQgbmF2aWdhdGUgdG8gdGhlCi1gYEhlbHAvZ3VpZGUvdHV0b3JpYWxgYCBkaXJlY3Rvcnkgb2YgdGhlIENNYWtlIHNvdXJjZSBjb2RlIHRyZWUgYW5kIHJ1biB0aGUKLWZvbGxvd2luZyBjb21tYW5kczoKK2BgSGVscC9ndWlkZS90dXRvcmlhbGBgIGRpcmVjdG9yeSBvZiB0aGUgQ01ha2Ugc291cmNlIGNvZGUgdHJlZSBhbmQgY3JlYXRlIGEKK2J1aWxkIGRpcmVjdG9yeToKIAogLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKIAogICBta2RpciBTdGVwMV9idWlsZAorCitOZXh0LCBuYXZpZ2F0ZSB0byB0aGUgYnVpbGQgZGlyZWN0b3J5IGFuZCBydW4gQ01ha2UgdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0CithbmQgZ2VuZXJhdGUgYSBuYXRpdmUgYnVpbGQgc3lzdGVtOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCiAgIGNkIFN0ZXAxX2J1aWxkCiAgIGNtYWtlIC4uL1N0ZXAxCisKK1RoZW4gY2FsbCB0aGF0IGJ1aWxkIHN5c3RlbSB0byBhY3R1YWxseSBjb21waWxlL2xpbmsgdGhlIHByb2plY3Q6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKICAgY21ha2UgLS1idWlsZCAuCiAKLU5hdmlnYXRlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgVHV0b3JpYWwgd2FzIGJ1aWx0IChsaWtlbHkgdGhlIG1ha2UgZGlyZWN0b3J5Ci1vciBhIERlYnVnIG9yIFJlbGVhc2UgYnVpbGQgY29uZmlndXJhdGlvbiBzdWJkaXJlY3RvcnkpIGFuZCBydW4gdGhlc2UgY29tbWFuZHM6CitGaW5hbGx5LCB0cnkgdG8gdXNlIHRoZSBuZXdseSBidWlsdCBgYFR1dG9yaWFsYGAgd2l0aCB0aGVzZSBjb21tYW5kczoKIAogLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKIApAQCAtMjEyLDggKzIyMyw5IEBACiBjbGFzc2ljIGFwcHJvYWNoIHdoZW4gZGVhbGluZyB3aXRoIG1hbnkgb3B0aW9uYWwgY29tcG9uZW50cywgd2Ugd2lsbCBjb3ZlcgogdGhlIG1vZGVybiBhcHByb2FjaCBpbiB0aGUgbmV4dCBzdGVwLgogCi1UaGUgY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgY29kZSBhcmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gRmlyc3QsCi1pbiBgYHR1dG9yaWFsLmN4eGBgLCBpbmNsdWRlIHRoZSBgYE1hdGhGdW5jdGlvbnMuaGBgIGhlYWRlciBpZiB3ZSBuZWVkIGl0OgorVGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB0aGUgc291cmNlIGNvZGUgYXJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQuCitGaXJzdCwgaW4gYGB0dXRvcmlhbC5jeHhgYCwgaW5jbHVkZSB0aGUgYGBNYXRoRnVuY3Rpb25zLmhgYCBoZWFkZXIgaWYgd2UKK25lZWQgaXQ6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDMvdHV0b3JpYWwuY3h4CiAgIDpsYW5ndWFnZTogYysrCkBAIC0yNDIsOCArMjU0LDE3IEBACiA6bWFudWFsOmBjbWFrZS1ndWkgPGNtYWtlLWd1aSgxKT5gIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAogd2l0aCB5b3VyIGNob3NlbiBidWlsZCB0b29sLiBUaGVuIHJ1biB0aGUgYnVpbHQgVHV0b3JpYWwgZXhlY3V0YWJsZS4KIAotVXNlIHRoZSA6bWFudWFsOmBjY21ha2UgPGNjbWFrZSgxKT5gIGV4ZWN1dGFibGUgb3IgdGhlIDptYW51YWw6YGNtYWtlLWd1aSA8Y21ha2UtZ3VpKDEpPmAKLXRvIHVwZGF0ZSB0aGUgdmFsdWUgb2YgYGBVU0VfTVlNQVRIYGAuIFJlYnVpbGQgYW5kIHJ1biB0aGUgdHV0b3JpYWwgYWdhaW4uCitOb3cgbGV0J3MgdXBkYXRlIHRoZSB2YWx1ZSBvZiBgYFVTRV9NWU1BVEhgYC4gVGhlIGVhc2llc3Qgd2F5IGlzIHRvIHVzZSB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSA8Y21ha2UtZ3VpKDEpPmAgb3IgIDptYW51YWw6YGNjbWFrZSA8Y2NtYWtlKDEpPmAgaWYgeW91J3JlCitpbiB0aGUgdGVybWluYWwuIE9yLCBhbHRlcm5hdGl2ZWx5LCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIG9wdGlvbiBmcm9tIHRoZQorY29tbWFuZC1saW5lLCB0cnk6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgY21ha2UgLi4vU3RlcDIgLURVU0VfTVlNQVRIPU9GRgorCitSZWJ1aWxkIGFuZCBydW4gdGhlIHR1dG9yaWFsIGFnYWluLgorCiBXaGljaCBmdW5jdGlvbiBnaXZlcyBiZXR0ZXIgcmVzdWx0cywgc3FydCBvciBteXNxcnQ/CiAKIEFkZGluZyBVc2FnZSBSZXF1aXJlbWVudHMgZm9yIExpYnJhcnkgKFN0ZXAgMykKQEAgLTMyMCwyMSArMzQxLDMyIEBACiAKIFRoYXQgaXMgYWxsIHRoYXQgaXMgbmVlZGVkIHRvIGNyZWF0ZSBhIGJhc2ljIGxvY2FsIGluc3RhbGwgb2YgdGhlIHR1dG9yaWFsLgogCi1SdW4gdGhlIDptYW51YWw6YGNtYWtlICA8Y21ha2UoMSk+YCBleGVjdXRhYmxlIG9yIHRoZQorTm93IHJ1biB0aGUgOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGV4ZWN1dGFibGUgb3IgdGhlCiA6bWFudWFsOmBjbWFrZS1ndWkgPGNtYWtlLWd1aSgxKT5gIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAotd2l0aCB5b3VyIGNob3NlbiBidWlsZCB0b29sLiBSdW4gdGhlIGluc3RhbGwgc3RlcCBieSB1c2luZyB0aGUgYGBpbnN0YWxsYGAKLW9wdGlvbiBvZiB0aGUgOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGNvbW1hbmQgKGludHJvZHVjZWQgaW4gMy4xNSwgb2xkZXIKLXZlcnNpb25zIG9mIENNYWtlIG11c3QgdXNlIGBgbWFrZSBpbnN0YWxsYGApIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgYnVpbGQKLXRoZSBgYElOU1RBTExgYCB0YXJnZXQgZnJvbSBhbiBJREUuIFRoaXMgd2lsbCBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIKLWZpbGVzLCBsaWJyYXJpZXMsIGFuZCBleGVjdXRhYmxlcy4KK3dpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbC4KKworVGhlbiBydW4gdGhlIGluc3RhbGwgc3RlcCBieSB1c2luZyB0aGUgYGBpbnN0YWxsYGAgb3B0aW9uIG9mIHRoZQorOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGNvbW1hbmQgKGludHJvZHVjZWQgaW4gMy4xNSwgb2xkZXIgdmVyc2lvbnMgb2YKK0NNYWtlIG11c3QgdXNlIGBgbWFrZSBpbnN0YWxsYGApIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gRm9yCittdWx0aS1jb25maWd1cmF0aW9uIHRvb2xzLCBkb24ndCBmb3JnZXQgdG8gdXNlIHRoZSBgYC0tY29uZmlnYGAgYXJndW1lbnQgdG8KK3NwZWNpZnkgdGhlIGNvbmZpZ3VyYXRpb24uIElmIHVzaW5nIGFuIElERSwgc2ltcGx5IGJ1aWxkIHRoZSBgYElOU1RBTExgYAordGFyZ2V0LiBUaGlzIHN0ZXAgd2lsbCBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZXMsIGxpYnJhcmllcywgYW5kCitleGVjdXRhYmxlcy4gRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgY21ha2UgLS1pbnN0YWxsIC4KIAogVGhlIENNYWtlIHZhcmlhYmxlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZQotcm9vdCBvZiB3aGVyZSB0aGUgZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQuIElmIHVzaW5nIGBgY21ha2UgLS1pbnN0YWxsYGAgYQotY3VzdG9tIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgY2FuIGJlIGdpdmVuIHZpYSB0aGUgYGAtLXByZWZpeGBgIGFyZ3VtZW50LiBGb3IKLW11bHRpLWNvbmZpZ3VyYXRpb24gdG9vbHMsIHVzZSB0aGUgYGAtLWNvbmZpZ2BgIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhlCi1jb25maWd1cmF0aW9uLgorcm9vdCBvZiB3aGVyZSB0aGUgZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQuIElmIHVzaW5nIHRoZSBgYGNtYWtlIC0taW5zdGFsbGBgCitjb21tYW5kLCB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeCBjYW4gYmUgb3ZlcmlkZGVuIHZpYSB0aGUgYGAtLXByZWZpeGBgCithcmd1bWVudC4gRm9yIGV4YW1wbGU6CiAKLVZlcmlmeSB0aGF0IHRoZSBpbnN0YWxsZWQgVHV0b3JpYWwgcnVucy4KKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgY21ha2UgLS1pbnN0YWxsIC4gLS1wcmVmaXggIi9ob21lL215dXNlci9pbnN0YWxsZGlyIgorCitOYXZpZ2F0ZSB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkgYW5kIHZlcmlmeSB0aGF0IHRoZSBpbnN0YWxsZWQgVHV0b3JpYWwgcnVucy4KIAogVGVzdGluZyBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0KQEAgLTM4MCwxMyArNDEyLDE3IEBACiBJZiB0aGUgcGxhdGZvcm0gaGFzIGBgbG9nYGAgYW5kIGBgZXhwYGAgdGhlbiB3ZSB3aWxsIHVzZSB0aGVtIHRvIGNvbXB1dGUgdGhlCiBzcXVhcmUgcm9vdCBpbiB0aGUgYGBteXNxcnRgYCBmdW5jdGlvbi4gV2UgZmlyc3QgdGVzdCBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZgogdGhlc2UgZnVuY3Rpb25zIHVzaW5nIHRoZSA6bW9kdWxlOmBDaGVja1N5bWJvbEV4aXN0c2AgbW9kdWxlIGluIHRoZSB0b3AtbGV2ZWwKLWBgQ01ha2VMaXN0cy50eHRgYC4gV2UncmUgZ29pbmcgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcyBpbgotYGBUdXRvcmlhbENvbmZpZy5oLmluYGAsIHNvIGJlIHN1cmUgdG8gc2V0IHRoZW0gYmVmb3JlIHRoYXQgZmlsZSBpcyBjb25maWd1cmVkLgorYGBDTWFrZUxpc3RzLnR4dGBgLiBPbiBzb21lIHBsYXRmb3Jtcywgd2Ugd2lsbCBuZWVkIHRvIGxpbmsgdG8gdGhlIG0gbGlicmFyeS4KK0lmIGBgbG9nYGAgYW5kIGBgZXhwYGAgYXJlIG5vdCBpbml0aWFsbHkgZm91bmQsIHJlcXVpcmUgdGhlIG0gbGlicmFyeSBhbmQgdHJ5CithZ2Fpbi4KKworV2UncmUgZ29pbmcgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcyBpbiBgYFR1dG9yaWFsQ29uZmlnLmguaW5gYCwgc28gYmUgc3VyZSB0bworc2V0IHRoZW0gYmVmb3JlIHRoYXQgZmlsZSBpcyBjb25maWd1cmVkLgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXA2L01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQogICA6c3RhcnQtYWZ0ZXI6ICMgZG9lcyB0aGlzIHN5c3RlbSBwcm92aWRlIHRoZSBsb2cgYW5kIGV4cCBmdW5jdGlvbnM/Ci0gIDplbmQtYmVmb3JlOiBpZihIQVZFX0xPRyBBTkQgSEFWRV9FWFApCisgIDplbmQtYmVmb3JlOiAjIGFkZCBjb21waWxlIGRlZmluaXRpb25zCiAKIE5vdyBsZXQncyBhZGQgdGhlc2UgZGVmaW5lcyB0byBgYFR1dG9yaWFsQ29uZmlnLmguaW5gYCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbQogZnJvbSBgYG15c3FydC5jeHhgYDoKQEAgLTY3MSw5ICs3MDcsOSBAQAogCiBOb3cgdGhhdCB3ZSBoYXZlIG1hZGUgTWF0aEZ1bmN0aW9ucyBhbHdheXMgYmUgdXNlZCwgd2Ugd2lsbCBuZWVkIHRvIHVwZGF0ZQogdGhlIGxvZ2ljIG9mIHRoYXQgbGlicmFyeS4gU28sIGluIGBgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgIHdlIG5lZWQgdG8KLWNyZWF0ZSBhIFNxcnRMaWJyYXJ5IHRoYXQgd2lsbCBjb25kaXRpb25hbGx5IGJlIGJ1aWx0IHdoZW4gYGBVU0VfTVlNQVRIYGAgaXMKLWVuYWJsZWQuIE5vdywgc2luY2UgdGhpcyBpcyBhIHR1dG9yaWFsLCB3ZSBhcmUgZ29pbmcgdG8gZXhwbGljaXRseSByZXF1aXJlCi10aGF0IFNxcnRMaWJyYXJ5IGlzIGJ1aWx0IHN0YXRpY2FsbHkuCitjcmVhdGUgYSBTcXJ0TGlicmFyeSB0aGF0IHdpbGwgY29uZGl0aW9uYWxseSBiZSBidWlsdCBhbmQgaW5zdGFsbGVkIHdoZW4KK2BgVVNFX01ZTUFUSGBgIGlzIGVuYWJsZWQuIE5vdywgc2luY2UgdGhpcyBpcyBhIHR1dG9yaWFsLCB3ZSBhcmUgZ29pbmcgdG8KK2V4cGxpY2l0bHkgcmVxdWlyZSB0aGF0IFNxcnRMaWJyYXJ5IGlzIGJ1aWx0IHN0YXRpY2FsbHkuCiAKIFRoZSBlbmQgcmVzdWx0IGlzIHRoYXQgYGBNYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0YGAgc2hvdWxkIGxvb2sgbGlrZToKIApAQCAtNjk5LDcgKzczNSw3IEBACiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAxMC9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuaAogICA6bGFuZ3VhZ2U6IGMrKwogCi1BdCB0aGlzIHBvaW50LCBpZiB5b3UgYnVpbGQgZXZlcnl0aGluZywgeW91IHdpbGwgbm90aWNlIHRoYXQgbGlua2luZyBmYWlscworQXQgdGhpcyBwb2ludCwgaWYgeW91IGJ1aWxkIGV2ZXJ5dGhpbmcsIHlvdSBtYXkgbm90aWNlIHRoYXQgbGlua2luZyBmYWlscwogYXMgd2UgYXJlIGNvbWJpbmluZyBhIHN0YXRpYyBsaWJyYXJ5IHdpdGhvdXQgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSB3aXRoIGEKIGxpYnJhcnkgdGhhdCBoYXMgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZS4gVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgdG8KIGV4cGxpY2l0bHkgc2V0IHRoZSA6cHJvcF90Z3Q6YFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREVgIHRhcmdldCBwcm9wZXJ0eSBvZgpAQCAtNzQ2LDcgKzc4Miw3IEBACiA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGlzIHRvCiBjb25kaXRpb25hbGx5IGFkZCBjb21waWxlciBmbGFncywgc3VjaCBhcyB0aG9zZSBmb3IgbGFuZ3VhZ2UgbGV2ZWxzIG9yCiB3YXJuaW5ncy4gQSBuaWNlIHBhdHRlcm4gaXMgdG8gYXNzb2NpYXRlIHRoaXMgaW5mb3JtYXRpb24gdG8gYW4gYGBJTlRFUkZBQ0VgYAotdGFyZ2V0IGFsbG93aW5nIHRoaXMgaW5mb3JtYXRpb24gdG8gcHJvcGFnYXRlLiBMZXRzIHN0YXJ0IGJ5IGNvbnN0cnVjdGluZyBhbgordGFyZ2V0IGFsbG93aW5nIHRoaXMgaW5mb3JtYXRpb24gdG8gcHJvcGFnYXRlLiBMZXQncyBzdGFydCBieSBjb25zdHJ1Y3RpbmcgYW4KIGBgSU5URVJGQUNFYGAgdGFyZ2V0IGFuZCBzcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCBDKysgc3RhbmRhcmQgbGV2ZWwgb2YgYGAxMWBgCiBpbnN0ZWFkIG9mIHVzaW5nIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX1NUQU5EQVJEYC4KIApkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL2luZGV4LnJzdCBiL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9pbmRleC5yc3QKaW5kZXggM2ExMDM4Zi4uYzcyNGI2ZiAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL2luZGV4LnJzdAorKysgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vaW5kZXgucnN0CkBAIC04Niw2ICs4Niw3IEBACiBkaXJlY3RvcmllcyBmb3IgdGhlIHNvdXJjZSBhbmQgdGhlIGJ1aWxkLgogCiAuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Tb3VyY2UtQmluYXJ5LnBuZworICAgOmFsdDogQ2hvb3Npbmcgc291cmNlIGFuZCBiaW5hcnkgZGlyZWN0b3JpZXMKIAogR2VuZXJhdGluZyBhIEJ1aWxkc3lzdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTI0NiwxNiArMjQ3LDE5IEBACiBzZWxlY3QgdGhlIENNYWtlIGdlbmVyYXRvciB0byB1c2UuCiAKIC4uIGltYWdlOjogL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNvbmZpZ3VyZS1EaWFsb2cucG5nCisgICA6YWx0OiBDb25maWd1cmluZyBhIGdlbmVyYXRvcgogCiBBbGwgZ2VuZXJhdG9ycyBhdmFpbGFibGUgb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgYWxzbwogYXZhaWxhYmxlIGluIDptYW51YWw6YGNtYWtlLWd1aSgxKWAuCiAKIC4uIGltYWdlOjogL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNob29zZS1HZW5lcmF0b3IucG5nCisgICA6YWx0OiBDaG9vc2luZyBhIGdlbmVyYXRvcgogCiBXaGVuIGNob29zaW5nIGEgVmlzdWFsIFN0dWRpbyBnZW5lcmF0b3IsIGZ1cnRoZXIgb3B0aW9ucwogYXJlIGF2YWlsYWJsZSB0byBzZXQgYW4gYXJjaGl0ZWN0dXJlIHRvIGdlbmVyYXRlIGZvci4KIAogLi4gaW1hZ2U6OiAvbWFudWFsL1ZTLUNob29zZS1BcmNoLnBuZworICAgOmFsdDogQ2hvb3NpbmcgYW4gYXJjaGl0ZWN0dXJlIGZvciBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcnMKIAogLi4gX2BTZXR0aW5nIEJ1aWxkIFZhcmlhYmxlc2A6CiAKQEAgLTM1Niw2ICszNjAsNyBAQAogdGhlIHZhcmlhYmxlLgogCiAuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1BZGQtRW50cnkucG5nCisgICA6YWx0OiBFZGl0aW5nIGEgY2FjaGUgZW50cnkKIAogVGhlIG1haW4gdmlldyBvZiB0aGUgOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCB1c2VyIGludGVyZmFjZQogY2FuIGJlIHVzZWQgdG8gZWRpdCBleGlzdGluZyB2YXJpYWJsZXMuCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1jb21tYW5kcy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLWNvbW1hbmRzLjcucnN0CmluZGV4IDU5YmE4OTcuLjBhYTRmNzUgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLWNvbW1hbmRzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLWNvbW1hbmRzLjcucnN0CkBAIC0xNyw2ICsxNyw3IEBACiAKICAgIC9jb21tYW5kL2JyZWFrCiAgICAvY29tbWFuZC9jbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbgorICAgL2NvbW1hbmQvY21ha2VfbGFuZ3VhZ2UKICAgIC9jb21tYW5kL2NtYWtlX21pbmltdW1fcmVxdWlyZWQKICAgIC9jb21tYW5kL2NtYWtlX3BhcnNlX2FyZ3VtZW50cwogICAgL2NvbW1hbmQvY21ha2VfcG9saWN5CmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1lbnYtdmFyaWFibGVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtZW52LXZhcmlhYmxlcy43LnJzdAppbmRleCBmNzJlNDE0Li5jZTFlMzYwIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1lbnYtdmFyaWFibGVzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLWVudi12YXJpYWJsZXMuNy5yc3QKQEAgLTE0LDYgKzE0LDEzIEBACiA6cmVmOmBFbnZpcm9ubWVudCBWYXJpYWJsZXMgPENNYWtlIExhbmd1YWdlIEVudmlyb25tZW50IFZhcmlhYmxlcz5gCiBzZWN0aW9uIGluIHRoZSBjbWFrZS1sYW5ndWFnZSBtYW51YWwuCiAKK0Vudmlyb25tZW50IFZhcmlhYmxlcyB0aGF0IENoYW5nZSBCZWhhdmlvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorICAgOm1heGRlcHRoOiAxCisKKyAgIC9lbnZ2YXIvQ01BS0VfUFJFRklYX1BBVEgKIAogRW52aXJvbm1lbnQgVmFyaWFibGVzIHRoYXQgQ29udHJvbCB0aGUgQnVpbGQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NSwzICs4MiwxMSBAQAogICAgL2VudnZhci9DVEVTVF9QUk9HUkVTU19PVVRQVVQKICAgIC9lbnZ2YXIvQ1RFU1RfVVNFX0xBVU5DSEVSU19ERUZBVUxUCiAgICAvZW52dmFyL0RBU0hCT0FSRF9URVNUX0ZST01fQ1RFU1QKKworRW52aXJvbm1lbnQgVmFyaWFibGVzIGZvciB0aGUgQ01ha2UgY3Vyc2VzIGludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMQorCisgICAvZW52dmFyL0NDTUFLRV9DT0xPUlMKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLWZpbGUtYXBpLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtZmlsZS1hcGkuNy5yc3QKaW5kZXggMTJlZWNkOS4uMzRlZGM1NiAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtZmlsZS1hcGkuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtZmlsZS1hcGkuNy5yc3QKQEAgLTQyNSw3ICs0MjUsNyBAQAogCiAgIHsKICAgICAia2luZCI6ICJjb2RlbW9kZWwiLAotICAgICJ2ZXJzaW9uIjogeyAibWFqb3IiOiAyLCAibWlub3IiOiAwIH0sCisgICAgInZlcnNpb24iOiB7ICJtYWpvciI6IDIsICJtaW5vciI6IDIgfSwKICAgICAicGF0aHMiOiB7CiAgICAgICAic291cmNlIjogIi9wYXRoL3RvL3RvcC1sZXZlbC1zb3VyY2UtZGlyIiwKICAgICAgICJidWlsZCI6ICIvcGF0aC90by90b3AtbGV2ZWwtYnVpbGQtZGlyIgpAQCAtODY5LDYgKzg2OSwyNiBAQAogICAgIEEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGxhbmd1YWdlIChlLmcuIGBgQ2BgLCBgYENYWGBgLCBgYEZvcnRyYW5gYCkKICAgICBvZiB0aGUgdG9vbGNoYWluIGlzIHVzZWQgdG8gY29tcGlsZSB0aGUgc291cmNlIGZpbGUuCiAKKyAgYGBsYW5ndWFnZVN0YW5kYXJkYGAKKyAgICBPcHRpb25hbCBtZW1iZXIgdGhhdCBpcyBwcmVzZW50IHdoZW4gdGhlIGxhbmd1YWdlIHN0YW5kYXJkIGlzIHNldAorICAgIGV4cGxpY2l0bHkgKGUuZy4gdmlhIDpwcm9wX3RndDpgQ1hYX1NUQU5EQVJEYCkgb3IgaW1wbGljaXRseSBieQorICAgIGNvbXBpbGUgZmVhdHVyZXMuICBFYWNoIGVudHJ5IGlzIGEgSlNPTiBvYmplY3Qgd2l0aCB0d28gbWVtYmVyczoKKworICAgIGBgYmFja3RyYWNlc2BgCisgICAgICBPcHRpb25hbCBtZW1iZXIgdGhhdCBpcyBwcmVzZW50IHdoZW4gYSBDTWFrZSBsYW5ndWFnZSBiYWNrdHJhY2UgdG8KKyAgICAgIHRoZSBgYDxMQU5HPl9TVEFOREFSRGBgIHNldHRpbmcgaXMgYXZhaWxhYmxlLiAgSWYgdGhlIGxhbmd1YWdlCisgICAgICBzdGFuZGFyZCB3YXMgc2V0IGltcGxpY2l0bHkgYnkgY29tcGlsZSBmZWF0dXJlcyB0aG9zZSBhcmUgdXNlZCBhcworICAgICAgdGhlIGJhY2t0cmFjZShzKS4gIEl0J3MgcG9zc2libGUgZm9yIG11bHRpcGxlIGNvbXBpbGUgZmVhdHVyZXMgdG8KKyAgICAgIHJlcXVpcmUgdGhlIHNhbWUgbGFuZ3VhZ2Ugc3RhbmRhcmQgc28gdGhlcmUgY291bGQgYmUgbXVsdGlwbGUKKyAgICAgIGJhY2t0cmFjZXMuIFRoZSB2YWx1ZSBpcyBhIEpTT04gYXJyYXkgd2l0aCBlYWNoIGVudHJ5IGJlaW5nIGFuCisgICAgICB1bnNpZ25lZCBpbnRlZ2VyIDAtYmFzZWQgaW5kZXggaW50byB0aGUgYGBiYWNrdHJhY2VHcmFwaGBgCisgICAgICBtZW1iZXIncyBgYG5vZGVzYGAgYXJyYXkuCisKKyAgICBgYHN0YW5kYXJkYGAKKyAgICAgIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGxhbmd1YWdlIHN0YW5kYXJkLgorCisgICAgVGhpcyBmaWVsZCB3YXMgYWRkZWQgaW4gY29kZW1vZGVsIHZlcnNpb24gMi4yLgorCiAgIGBgY29tcGlsZUNvbW1hbmRGcmFnbWVudHNgYAogICAgIE9wdGlvbmFsIG1lbWJlciB0aGF0IGlzIHByZXNlbnQgd2hlbiBmcmFnbWVudHMgb2YgdGhlIGNvbXBpbGVyIGNvbW1hbmQKICAgICBsaW5lIGludm9jYXRpb24gYXJlIGF2YWlsYWJsZS4gIFRoZSB2YWx1ZSBpcyBhIEpTT04gYXJyYXkgb2YgZW50cmllcwpAQCAtODk5LDYgKzkxOSwyNCBAQAogICAgICAgYW4gdW5zaWduZWQgaW50ZWdlciAwLWJhc2VkIGluZGV4IGludG8gdGhlIGBgYmFja3RyYWNlR3JhcGhgYAogICAgICAgbWVtYmVyJ3MgYGBub2Rlc2BgIGFycmF5LgogCisgIGBgcHJlY29tcGlsZUhlYWRlcnNgYAorICAgIE9wdGlvbmFsIG1lbWJlciB0aGF0IGlzIHByZXNlbnQgd2hlbiA6Y29tbWFuZDpgdGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVyc2AKKyAgICBvciBvdGhlciBjb21tYW5kIGludm9jYXRpb25zIHNldCA6cHJvcF90Z3Q6YFBSRUNPTVBJTEVfSEVBREVSU2Agb24gdGhlCisgICAgdGFyZ2V0LiAgVGhlIHZhbHVlIGlzIGEgSlNPTiBhcnJheSB3aXRoIGFuIGVudHJ5IGZvciBlYWNoIGhlYWRlci4gIEVhY2gKKyAgICBlbnRyeSBpcyBhIEpTT04gb2JqZWN0IHdpdGggbWVtYmVyczoKKworICAgIGBgaGVhZGVyYGAKKyAgICAgIEZ1bGwgcGF0aCB0byB0aGUgcHJlY29tcGlsZSBoZWFkZXIgZmlsZS4KKworICAgIGBgYmFja3RyYWNlYGAKKyAgICAgIE9wdGlvbmFsIG1lbWJlciB0aGF0IGlzIHByZXNlbnQgd2hlbiBhIENNYWtlIGxhbmd1YWdlIGJhY2t0cmFjZSB0bworICAgICAgdGhlIDpjb21tYW5kOmB0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzYCBvciBvdGhlciBjb21tYW5kIGludm9jYXRpb24KKyAgICAgIHRoYXQgYWRkZWQgdGhpcyBwcmVjb21waWxlZCBoZWFkZXIgaXMgYXZhaWxhYmxlLiAgVGhlIHZhbHVlIGlzIGFuCisgICAgICB1bnNpZ25lZCBpbnRlZ2VyIDAtYmFzZWQgaW5kZXggaW50byB0aGUgYGBiYWNrdHJhY2VHcmFwaGBgIG1lbWJlcidzCisgICAgICBgYG5vZGVzYGAgYXJyYXkuCisKKyAgICBUaGlzIGZpZWxkIHdhcyBhZGRlZCBpbiBjb2RlbW9kZWwgdmVyc2lvbiAyLjEuCisKICAgYGBkZWZpbmVzYGAKICAgICBPcHRpb25hbCBtZW1iZXIgdGhhdCBpcyBwcmVzZW50IHdoZW4gdGhlcmUgYXJlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucy4KICAgICBUaGUgdmFsdWUgaXMgYSBKU09OIGFycmF5IHdpdGggYW4gZW50cnkgZm9yIGVhY2ggZGVmaW5pdGlvbi4gIEVhY2gKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucy43LnJzdAppbmRleCA2OTE0ODFiLi45MzVmNTU3IDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zLjcucnN0CkBAIC0xMDUsMTAgKzEwNSwxMSBAQAogCiBgYCQ8VEFSR0VUX0VYSVNUUzp0YXJnZXQ+YGAKICAgYGAxYGAgaWYgYGB0YXJnZXRgYCBleGlzdHMsIGVsc2UgYGAwYGAuCi1gYCQ8Q09ORklHOmNmZz5gYAotICBgYDFgYCBpZiBjb25maWcgaXMgYGBjZmdgYCwgZWxzZSBgYDBgYC4gVGhpcyBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KLSAgVGhlIG1hcHBpbmcgaW4gOnByb3BfdGd0OmBNQVBfSU1QT1JURURfQ09ORklHXzxDT05GSUc+YCBpcyBhbHNvIGNvbnNpZGVyZWQgYnkKLSAgdGhpcyBleHByZXNzaW9uIHdoZW4gaXQgaXMgZXZhbHVhdGVkIG9uIGEgcHJvcGVydHkgb24gYW4gOnByb3BfdGd0OmBJTVBPUlRFRGAKK2BgJDxDT05GSUc6Y2Zncz5gYAorICBgYDFgYCBpZiBjb25maWcgaXMgYW55IG9uZSBvZiB0aGUgZW50aXJlcyBpbiBgYGNmZ3NgYCwgZWxzZSBgYDBgYC4gVGhpcyBpcyBhCisgIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4gVGhlIG1hcHBpbmcgaW4KKyAgOnByb3BfdGd0OmBNQVBfSU1QT1JURURfQ09ORklHXzxDT05GSUc+YCBpcyBhbHNvIGNvbnNpZGVyZWQgYnkgdGhpcworICBleHByZXNzaW9uIHdoZW4gaXQgaXMgZXZhbHVhdGVkIG9uIGEgcHJvcGVydHkgb24gYW4gOnByb3BfdGd0OmBJTVBPUlRFRGAKICAgdGFyZ2V0LgogYGAkPFBMQVRGT1JNX0lEOnBsYXRmb3JtX2lkcz5gYAogICB3aGVyZSBgYHBsYXRmb3JtX2lkc2BgIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QuCkBAIC0yNTksNiArMjYwLDEyMiBAQAogICAgIGFkZF9leGVjdXRhYmxlKG15YXBwIG1haW4uY3BwKQogICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWFwcCBteWFwcF9jIG15YXBwX2N4eCkKIAorLi4gX2BCb29sZWFuIExJTktfTEFOR1VBR0UgR2VuZXJhdG9yIEV4cHJlc3Npb25gOgorCitgYCQ8TElOS19MQU5HX0FORF9JRDpsYW5ndWFnZSxjb21waWxlcl9pZHM+YGAKKyAgYGAxYGAgd2hlbiB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IgbGluayBzdGVwIG1hdGNoZXMgYGBsYW5ndWFnZWBgIGFuZCB0aGUKKyAgQ01ha2UncyBjb21waWxlciBpZCBvZiB0aGUgbGFuZ3VhZ2UgbGlua2VyIG1hdGNoZXMgYW55IG9uZSBvZiB0aGUgZW50cmllcworICBpbiBgYGNvbXBpbGVyX2lkc2BgLCBvdGhlcndpc2UgYGAwYGAuIFRoaXMgZXhwcmVzc2lvbiBpcyBhIHNob3J0IGZvcm0gZm9yIHRoZQorICBjb21iaW5hdGlvbiBvZiBgYCQ8TElOS19MQU5HVUFHRTpsYW5ndWFnZT5gYCBhbmQKKyAgYGAkPExBTkdfQ09NUElMRVJfSUQ6Y29tcGlsZXJfaWRzPmBgLiBUaGlzIGV4cHJlc3Npb24gbWF5IGJlIHVzZWQgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBvcHRpb25zLCBsaW5rIGRpcmVjdG9yaWVzIGFuZCBsaW5rIGRlcGVuZGVuY2llcyBvZiBhCisgIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgYW5kIGxpbmtlciBjb21iaW5hdGlvbiBpbiBhIHRhcmdldC4gRm9yIGV4YW1wbGU6CisKKyAgLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICBhZGRfbGlicmFyeShsaWJDX0NsYW5nIC4uLikKKyAgICBhZGRfbGlicmFyeShsaWJDWFhfQ2xhbmcgLi4uKQorICAgIGFkZF9saWJyYXJ5KGxpYkNfSW50ZWwgLi4uKQorICAgIGFkZF9saWJyYXJ5KGxpYkNYWF9JbnRlbCAuLi4pCisKKyAgICBhZGRfZXhlY3V0YWJsZShteWFwcCBtYWluLmMpCisgICAgaWYgKENYWF9DT05GSUcpCisgICAgICB0YXJnZXRfc291cmNlcyhteWFwcCBQUklWQVRFIGZpbGUuY3h4KQorICAgIGVuZGlmKCkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobXlhcHAKKyAgICAgIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLENsYW5nLEFwcGxlQ2xhbmc+OmxpYkNYWF9DbGFuZz4KKyAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxDbGFuZyxBcHBsZUNsYW5nPjpsaWJDX0NsYW5nPgorICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsSW50ZWw+OmxpYkNYWF9JbnRlbD4KKyAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxJbnRlbD46bGliQ19JbnRlbD4pCisKKyAgVGhpcyBzcGVjaWZpZXMgdGhlIHVzZSBvZiBkaWZmZXJlbnQgbGluayBsaWJyYXJpZXMgYmFzZWQgb24gYm90aCB0aGUKKyAgY29tcGlsZXIgaWQgYW5kIGxpbmsgbGFuZ3VhZ2UuIFRoaXMgZXhhbXBsZSB3aWxsIGhhdmUgdGFyZ2V0IGBgbGliQ1hYX0NsYW5nYGAKKyAgYXMgbGluayBkZXBlbmRlbmN5IHdoZW4gYGBDbGFuZ2BgIG9yIGBgQXBwbGVDbGFuZ2BgIGlzIHRoZSBgYENYWGBgCisgIGxpbmtlciwgYW5kIGBgbGliQ1hYX0ludGVsYGAgd2hlbiBgYEludGVsYGAgaXMgdGhlIGBgQ1hYYGAgbGlua2VyLgorICBMaWtld2lzZSB3aGVuIHRoZSBgYENgYCBsaW5rZXIgaXMgYGBDbGFuZ2BgIG9yIGBgQXBwbGVDbGFuZ2BgLCB0YXJnZXQKKyAgYGBsaWJDX0NsYW5nYGAgd2lsbCBiZSBhZGRlZCBhcyBsaW5rIGRlcGVuZGVuY3kgYW5kIGBgbGliQ19JbnRlbGBgIHdoZW4KKyAgYGBJbnRlbGBgIGlzIHRoZSBgYENgYCBsaW5rZXIuCisKKyAgU2VlIDpyZWY6YHRoZSBub3RlIHJlbGF0ZWQgdG8KKyAgPENvbnN0cmFpbnRzIExJTktfTEFOR1VBR0UgR2VuZXJhdG9yIEV4cHJlc3Npb24+YAorICBgYCQ8TElOS19MQU5HVUFHRTpsYW5ndWFnZT5gYCBmb3IgY29uc3RyYWludHMgYWJvdXQgdGhlIHVzYWdlIG9mIHRoaXMKKyAgZ2VuZXJhdG9yIGV4cHJlc3Npb24uCisKK2BgJDxMSU5LX0xBTkdVQUdFOmxhbmd1YWdlcz5gYAorICBgYDFgYCB3aGVuIHRoZSBsYW5ndWFnZSB1c2VkIGZvciBsaW5rIHN0ZXAgbWF0Y2hlcyBhbnkgb2YgdGhlIGVudHJpZXMKKyAgaW4gYGBsYW5ndWFnZXNgYCwgb3RoZXJ3aXNlIGBgMGBgLiAgVGhpcyBleHByZXNzaW9uIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgb3B0aW9ucywgbGluayBkaXJlY3RvcmllcyBhbmQgbGluayBkZXBlbmRlbmNpZXMgb2YgYQorICBwYXJ0aWN1bGFyIGxhbmd1YWdlIGluIGEgdGFyZ2V0LiBGb3IgZXhhbXBsZToKKworICAuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgIGFkZF9saWJyYXJ5KGFwaV9DIC4uLikKKyAgICBhZGRfbGlicmFyeShhcGlfQ1hYIC4uLikKKyAgICBhZGRfbGlicmFyeShhcGkgSU5URVJGQUNFKQorICAgIHRhcmdldF9saW5rX29wdGlvbnMoYXBpIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HVUFHRTpDPjotb3B0X2M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjotb3B0X2N4eD4pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGFwaSBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR1VBR0U6Qz46YXBpX0M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjphcGlfQ1hYPikKKworICAgIGFkZF9leGVjdXRhYmxlKG15YXBwMSBtYWluLmMpCisgICAgdGFyZ2V0X2xpbmtfb3B0aW9ucyhteWFwcDEgUFJJVkFURSBhcGkpCisKKyAgICBhZGRfZXhlY3V0YWJsZShteWFwcDIgbWFpbi5jcHApCisgICAgdGFyZ2V0X2xpbmtfb3B0aW9ucyhteWFwcDIgUFJJVkFURSBhcGkpCisKKyAgVGhpcyBzcGVjaWZpZXMgdG8gdXNlIHRoZSBgYGFwaWBgIHRhcmdldCBmb3IgbGlua2luZyB0YXJnZXRzIGBgbXlhcHAxYGAgYW5kCisgIGBgbXlhcHAyYGAuIEluIHByYWN0aWNlLCBgYG15YXBwMWBgIHdpbGwgbGluayB3aXRoIHRhcmdldCBgYGFwaV9DYGAgYW5kCisgIG9wdGlvbiBgYC1vcHRfY2BgIGJlY2F1c2UgaXQgd2lsbCB1c2UgYGBDYGAgYXMgbGluayBsYW5ndWFnZS4gQW5kIGBgbXlhcHAyYGAKKyAgd2lsbCBsaW5rIHdpdGggYGBhcGlfQ1hYYGAgYW5kIG9wdGlvbiBgYC1vcHRfY3h4YGAgYmVjYXVzZSBgYENYWGBgIHdpbGwgYmUKKyAgdGhlIGxpbmsgbGFuZ3VhZ2UuCisKKyAgLi4gX2BDb25zdHJhaW50cyBMSU5LX0xBTkdVQUdFIEdlbmVyYXRvciBFeHByZXNzaW9uYDoKKworICAuLiBub3RlOjoKKworICAgIFRvIGRldGVybWluZSB0aGUgbGluayBsYW5ndWFnZSBvZiBhIHRhcmdldCwgaXQgaXMgcmVxdWlyZWQgdG8gY29sbGVjdCwKKyAgICB0cmFuc2l0aXZlbHksIGFsbCB0aGUgdGFyZ2V0cyB3aGljaCB3aWxsIGJlIGxpbmtlZCB0byBpdC4gU28sIGZvciBsaW5rCisgICAgbGlicmFyaWVzIHByb3BlcnRpZXMsIGEgZG91YmxlIGV2YWx1YXRpb24gd2lsbCBiZSBkb25lLiBEdXJpbmcgdGhlIGZpcnN0CisgICAgZXZhbHVhdGlvbiwgYGAkPExJTktfTEFOR1VBR0U6Li4+YGAgZXhwcmVzc2lvbnMgd2lsbCBhbHdheXMgcmV0dXJuIGBgMGBgLgorICAgIFRoZSBsaW5rIGxhbmd1YWdlIGNvbXB1dGVkIGFmdGVyIHRoaXMgZmlyc3QgcGFzcyB3aWxsIGJlIHVzZWQgdG8gZG8gdGhlCisgICAgc2Vjb25kIHBhc3MuIFRvIGF2b2lkIGluY29uc2lzdGVuY3ksIGl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIHNlY29uZCBwYXNzCisgICAgZG8gbm90IGNoYW5nZSB0aGUgbGluayBsYW5ndWFnZS4gTW9yZW92ZXIsIHRvIGF2b2lkIHVuZXhwZWN0ZWQKKyAgICBzaWRlLWVmZmVjdHMsIGl0IGlzIHJlcXVpcmVkIHRvIHNwZWNpZnkgY29tcGxldGUgZW50aXRpZXMgYXMgcGFydCBvZiB0aGUKKyAgICBgYCQ8TElOS19MQU5HVUFHRTouLj5gYCBleHByZXNzaW9uLiBGb3IgZXhhbXBsZToKKworICAgIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICAgICBhZGRfbGlicmFyeShsaWIgU1RBVElDIGZpbGUuY3h4KQorICAgICAgYWRkX2xpYnJhcnkobGlib3RoZXIgU1RBVElDIGZpbGUuYykKKworICAgICAgIyBiYWQgdXNhZ2UKKyAgICAgIGFkZF9leGVjdXRhYmxlKG15YXBwMSBtYWluLmMpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobXlhcHAxIFBSSVZBVEUgbGliJDwkPExJTktfTEFOR1VBR0U6Qz46b3RoZXI+KQorCisgICAgICAjIGNvcnJlY3QgdXNhZ2UKKyAgICAgIGFkZF9leGVjdXRhYmxlKG15YXBwMiBtYWluLmMpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobXlhcHAyIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46bGlib3RoZXI+KQorCisgICAgSW4gdGhpcyBleGFtcGxlLCBmb3IgYGBteWFwcDFgYCwgdGhlIGZpcnN0IHBhc3Mgd2lsbCwgdW5leHBlY3RlZGx5LAorICAgIGRldGVybWluZSB0aGF0IHRoZSBsaW5rIGxhbmd1YWdlIGlzIGBgQ1hYYGAgYmVjYXVzZSB0aGUgZXZhbHVhdGlvbiBvZiB0aGUKKyAgICBnZW5lcmF0b3IgZXhwcmVzc2lvbiB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZyBzbyBgYG15YXBwMWBgIHdpbGwgZGVwZW5kcyBvbgorICAgIHRhcmdldCBgYGxpYmBgIHdoaWNoIGlzIGBgQysrYGAuIE9uIHRoZSBjb250cmFyeSwgZm9yIGBgbXlhcHAyYGAsIHRoZSBmaXJzdAorICAgIGV2YWx1YXRpb24gd2lsbCBnaXZlIGBgQ2BgIGFzIGxpbmsgbGFuZ3VhZ2UsIHNvIHRoZSBzZWNvbmQgcGFzcyB3aWxsCisgICAgY29ycmVjdGx5IGFkZCB0YXJnZXQgYGBsaWJvdGhlcmBgIGFzIGxpbmsgZGVwZW5kZW5jeS4KKworYGAkPERFVklDRV9MSU5LOmxpc3Q+YGAKKyAgUmV0dXJucyB0aGUgbGlzdCBpZiBpdCBpcyB0aGUgZGV2aWNlIGxpbmsgc3RlcCwgYW4gZW1wdHkgbGlzdCBvdGhlcndpc2UuCisgIFRoZSBkZXZpY2UgbGluayBzdGVwIGlzIGNvbnRyb2xsZWQgYnkgOnByb3BfdGd0OmBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTmAKKyAgYW5kIDpwcm9wX3RndDpgQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTYCBwcm9wZXJ0aWVzIGFuZAorICBwb2xpY3kgOnBvbGljeTpgQ01QMDEwNWAuIFRoaXMgZXhwcmVzc2lvbiBjYW4gb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorCitgYCQ8SE9TVF9MSU5LOmxpc3Q+YGAKKyAgUmV0dXJucyB0aGUgbGlzdCBpZiBpdCBpcyB0aGUgbm9ybWFsIGxpbmsgc3RlcCwgYW4gZW1wdHkgbGlzdCBvdGhlcndpc2UuCisgIFRoaXMgZXhwcmVzc2lvbiBpcyBtYWlubHkgdXNlZnVsIHdoZW4gYSBkZXZpY2UgbGluayBzdGVwIGlzIGFsc28gaW52b2x2ZWQKKyAgKHNlZSBgYCQ8REVWSUNFX0xJTks6bGlzdD5gYCBnZW5lcmF0b3IgZXhwcmVzc2lvbikuIFRoaXMgZXhwcmVzc2lvbiBjYW4gb25seQorICBiZSB1c2VkIHRvIHNwZWNpZnkgbGluayBvcHRpb25zLgorCiBTdHJpbmctVmFsdWVkIEdlbmVyYXRvciBFeHByZXNzaW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDUwLDIyICs1NjcsNDEgQEAKICAgPEJvb2xlYW4gQ09NUElMRV9MQU5HVUFHRSBHZW5lcmF0b3IgRXhwcmVzc2lvbj5gCiAgIGBgJDxDT01QSUxFX0xBTkdVQUdFOmxhbmd1YWdlPmBgCiAgIGZvciBub3RlcyBhYm91dCB0aGUgcG9ydGFiaWxpdHkgb2YgdGhpcyBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KK2BgJDxMSU5LX0xBTkdVQUdFPmBgCisgIFRoZSBsaW5rIGxhbmd1YWdlIG9mIHRhcmdldCB3aGVuIGV2YWx1YXRpbmcgbGluayBvcHRpb25zLgorICBTZWUgOnJlZjpgdGhlIHJlbGF0ZWQgYm9vbGVhbiBleHByZXNzaW9uCisgIDxCb29sZWFuIExJTktfTEFOR1VBR0UgR2VuZXJhdG9yIEV4cHJlc3Npb24+YCBgYCQ8TElOS19MQU5HVUFHRTpsYW5ndWFnZT5gYAorICBmb3Igbm90ZXMgYWJvdXQgdGhlIHBvcnRhYmlsaXR5IG9mIHRoaXMgZ2VuZXJhdG9yIGV4cHJlc3Npb24uCisKKyAgLi4gbm90ZTo6CisKKyAgICBUaGlzIGdlbmVyYXRvciBleHByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxpbmsgbGlicmFyaWVzCisgICAgcHJvcGVydGllcyB0byBhdm9pZCBzaWRlLWVmZmVjdHMgZHVlIHRvIHRoZSBkb3VibGUgZXZhbHVhdGlvbiBvZgorICAgIHRoZXNlIHByb3BlcnRpZXMuCiAKIFRhcmdldC1EZXBlbmRlbnQgUXVlcmllcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWBgJDxUQVJHRVRfTkFNRV9JRl9FWElTVFM6dGd0PmBgCi0gIEV4cGFuZHMgdG8gdGhlIGBgdGd0YGAgaWYgdGhlIGdpdmVuIHRhcmdldCBleGlzdHMsIGFuIGVtcHR5IHN0cmluZwotICBvdGhlcndpc2UuCi1gYCQ8VEFSR0VUX0ZJTEU6dGd0PmBgCi0gIEZ1bGwgcGF0aCB0byBtYWluIGZpbGUgKC5leGUsIC5zby4xLjIsIC5hKSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEKLSAgdGFyZ2V0LgotYGAkPFRBUkdFVF9GSUxFX0JBU0VfTkFNRTp0Z3Q+YGAKLSAgQmFzZSBuYW1lIG9mIG1haW4gZmlsZSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgorVGhlc2UgcXVlcmllcyByZWZlciB0byBhIHRhcmdldCBgYHRndGBgLiBUaGlzIGNhbiBiZSBhbnkgcnVudGltZSBhcnRpZmFjdCwKK25hbWVseToKIAotICBUaGUgYmFzZSBuYW1lIGNvcnJlc3BvbmRzIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lIChzZWUKLSAgYGAkPFRBUkdFVF9GSUxFX05BTUU6dGd0PmBgKSB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LiBGb3IgZXhhbXBsZSwgaWYKLSAgdGFyZ2V0IGZpbGUgbmFtZSBpcyBgYGxpYmJhc2Uuc29gYCwgdGhlIGJhc2UgbmFtZSBpcyBgYGJhc2VgYC4KKyogYW4gZXhlY3V0YWJsZSB0YXJnZXQgY3JlYXRlZCBieSA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgCisqIGEgc2hhcmVkIGxpYnJhcnkgdGFyZ2V0IChgYC5zb2BgLCBgYC5kbGxgYCBidXQgbm90IHRoZWlyIGBgLmxpYmBgIGltcG9ydCBsaWJyYXJ5KQorICBjcmVhdGVkIGJ5IDpjb21tYW5kOmBhZGRfbGlicmFyeWAKKyogYSBzdGF0aWMgbGlicmFyeSB0YXJnZXQgY3JlYXRlZCBieSA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgCisKK0luIHRoZSBmb2xsb3dpbmcsICJ0aGUgYGB0Z3RgYCBmaWxlbmFtZSIgbWVhbnMgdGhlIG5hbWUgb2YgdGhlIGBgdGd0YGAKK2JpbmFyeSBmaWxlLiBUaGlzIGhhcyB0byBiZSBkaXN0aW5ndWlzaGVkIGZyb20gInRoZSB0YXJnZXQgbmFtZSIsCit3aGljaCBpcyBqdXN0IHRoZSBzdHJpbmcgYGB0Z3RgYC4KKworYGAkPFRBUkdFVF9OQU1FX0lGX0VYSVNUUzp0Z3Q+YGAKKyAgVGhlIHRhcmdldCBuYW1lIGBgdGd0YGAgaWYgdGhlIHRhcmdldCBleGlzdHMsIGFuIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCitgYCQ8VEFSR0VUX0ZJTEU6dGd0PmBgCisgIEZ1bGwgcGF0aCB0byB0aGUgYGB0Z3RgYCBiaW5hcnkgZmlsZS4KK2BgJDxUQVJHRVRfRklMRV9CQVNFX05BTUU6dGd0PmBgCisgIEJhc2UgbmFtZSBvZiBgYHRndGBgLCBpLmUuIGBgJDxUQVJHRVRfRklMRV9OQU1FOnRndD5gYCB3aXRob3V0IHByZWZpeCBhbmQKKyAgc3VmZml4LgorICBGb3IgZXhhbXBsZSwgaWYgdGhlIGBgdGd0YGAgZmlsZW5hbWUgaXMgYGBsaWJiYXNlLnNvYGAsIHRoZSBiYXNlIG5hbWUgaXMgYGBiYXNlYGAuCiAKICAgU2VlIGFsc28gdGhlIDpwcm9wX3RndDpgT1VUUFVUX05BTUVgLCA6cHJvcF90Z3Q6YEFSQ0hJVkVfT1VUUFVUX05BTUVgLAogICA6cHJvcF90Z3Q6YExJQlJBUllfT1VUUFVUX05BTUVgIGFuZCA6cHJvcF90Z3Q6YFJVTlRJTUVfT1VUUFVUX05BTUVgCkBAIC00ODAsMzIgKzYxNiwzMSBAQAogICBOb3RlIHRoYXQgYGB0Z3RgYCBpcyBub3QgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgdGhpcwogICBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbi4KIGBgJDxUQVJHRVRfRklMRV9QUkVGSVg6dGd0PmBgCi0gIFByZWZpeCBvZiBtYWluIGZpbGUgd2hlcmUgYGB0Z3RgYCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldC4KKyAgUHJlZml4IG9mIHRoZSBgYHRndGBgIGZpbGVuYW1lIChzdWNoIGFzIGBgbGliYGApLgogCiAgIFNlZSBhbHNvIHRoZSA6cHJvcF90Z3Q6YFBSRUZJWGAgdGFyZ2V0IHByb3BlcnR5LgogCiAgIE5vdGUgdGhhdCBgYHRndGBgIGlzIG5vdCBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgb2YgdGhlIHRhcmdldCB0aGlzCiAgIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uLgogYGAkPFRBUkdFVF9GSUxFX1NVRkZJWDp0Z3Q+YGAKLSAgU3VmZml4IG9mIG1haW4gZmlsZSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgotCi0gIFRoZSBzdWZmaXggY29ycmVzcG9uZHMgdG8gdGhlIGZpbGUgZXh0ZW5zaW9uIChzdWNoIGFzICIuc28iIG9yICIuZXhlIikuCisgIFN1ZmZpeCBvZiB0aGUgYGB0Z3RgYCBmaWxlbmFtZSAoZXh0ZW5zaW9uIHN1Y2ggYXMgYGAuc29gYCBvciBgYC5leGVgYCkuCiAKICAgU2VlIGFsc28gdGhlIDpwcm9wX3RndDpgU1VGRklYYCB0YXJnZXQgcHJvcGVydHkuCiAKICAgTm90ZSB0aGF0IGBgdGd0YGAgaXMgbm90IGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IHRoaXMKICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb24uCiBgYCQ8VEFSR0VUX0ZJTEVfTkFNRTp0Z3Q+YGAKLSAgTmFtZSBvZiBtYWluIGZpbGUgKC5leGUsIC5zby4xLjIsIC5hKS4KKyAgVGhlIGBgdGd0YGAgZmlsZW5hbWUuCiBgYCQ8VEFSR0VUX0ZJTEVfRElSOnRndD5gYAotICBEaXJlY3Rvcnkgb2YgbWFpbiBmaWxlICguZXhlLCAuc28uMS4yLCAuYSkuCisgIERpcmVjdG9yeSBvZiB0aGUgYGB0Z3RgYCBiaW5hcnkgZmlsZS4KIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEU6dGd0PmBgCi0gIEZpbGUgdXNlZCB0byBsaW5rICguYSwgLmxpYiwgLnNvKSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgorICBGaWxlIHVzZWQgd2hlbiBsaW5raW5nIHRvIHRoZSBgYHRndGBgIHRhcmdldC4gIFRoaXMgd2lsbCB1c3VhbGx5CisgIGJlIHRoZSBsaWJyYXJ5IHRoYXQgYGB0Z3RgYCByZXByZXNlbnRzIChgYC5hYGAsIGBgLmxpYmBgLCBgYC5zb2BgKSwKKyAgYnV0IGZvciBhIHNoYXJlZCBsaWJyYXJ5IG9uIERMTCBwbGF0Zm9ybXMsIGl0IHdvdWxkIGJlIHRoZSBgYC5saWJgYAorICBpbXBvcnQgbGlicmFyeSBhc3NvY2lhdGVkIHdpdGggdGhlIERMTC4KIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FOnRndD5gYAotICBCYXNlIG5hbWUgb2YgZmlsZSB1c2VkIHRvIGxpbmsgd2hlcmUgYGB0Z3RgYCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldC4KLQotICBUaGUgYmFzZSBuYW1lIGNvcnJlc3BvbmRzIHRvIHRoZSB0YXJnZXQgbGlua2VyIGZpbGUgbmFtZSAoc2VlCi0gIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRTp0Z3Q+YGApIHdpdGhvdXQgcHJlZml4IGFuZCBzdWZmaXguIEZvciBleGFtcGxlLAorICBCYXNlIG5hbWUgb2YgZmlsZSB1c2VkIHRvIGxpbmsgdGhlIHRhcmdldCBgYHRndGBgLCBpLmUuCisgIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRTp0Z3Q+YGAgd2l0aG91dCBwcmVmaXggYW5kIHN1ZmZpeC4gRm9yIGV4YW1wbGUsCiAgIGlmIHRhcmdldCBmaWxlIG5hbWUgaXMgYGBsaWJiYXNlLmFgYCwgdGhlIGJhc2UgbmFtZSBpcyBgYGJhc2VgYC4KIAogICBTZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBPVVRQVVRfTkFNRWAsIDpwcm9wX3RndDpgQVJDSElWRV9PVVRQVVRfTkFNRWAsCkBAIC01MjAsNyArNjU1LDcgQEAKICAgTm90ZSB0aGF0IGBgdGd0YGAgaXMgbm90IGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IHRoaXMKICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb24uCiBgYCQ8VEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWDp0Z3Q+YGAKLSAgUHJlZml4IG9mIGZpbGUgdXNlZCB0byBsaW5rIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCisgIFByZWZpeCBvZiBmaWxlIHVzZWQgdG8gbGluayB0YXJnZXQgYGB0Z3RgYC4KIAogICBTZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBQUkVGSVhgIGFuZCA6cHJvcF90Z3Q6YElNUE9SVF9QUkVGSVhgIHRhcmdldAogICBwcm9wZXJ0aWVzLgpAQCAtNTM4LDE1ICs2NzMsMTUgQEAKICAgTm90ZSB0aGF0IGBgdGd0YGAgaXMgbm90IGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IHRoaXMKICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb24uCiBgYCQ8VEFSR0VUX0xJTktFUl9GSUxFX05BTUU6dGd0PmBgCi0gIE5hbWUgb2YgZmlsZSB1c2VkIHRvIGxpbmsgKC5hLCAubGliLCAuc28pLgorICBOYW1lIG9mIGZpbGUgdXNlZCB0byBsaW5rIHRhcmdldCBgYHRndGBgLgogYGAkPFRBUkdFVF9MSU5LRVJfRklMRV9ESVI6dGd0PmBgCi0gIERpcmVjdG9yeSBvZiBmaWxlIHVzZWQgdG8gbGluayAoLmEsIC5saWIsIC5zbykuCisgIERpcmVjdG9yeSBvZiBmaWxlIHVzZWQgdG8gbGluayB0YXJnZXQgYGB0Z3RgYC4KIGBgJDxUQVJHRVRfU09OQU1FX0ZJTEU6dGd0PmBgCi0gIEZpbGUgd2l0aCBzb25hbWUgKC5zby4zKSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgorICBGaWxlIHdpdGggc29uYW1lIChgYC5zby4zYGApIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCiBgYCQ8VEFSR0VUX1NPTkFNRV9GSUxFX05BTUU6dGd0PmBgCi0gIE5hbWUgb2YgZmlsZSB3aXRoIHNvbmFtZSAoLnNvLjMpLgorICBOYW1lIG9mIGZpbGUgd2l0aCBzb25hbWUgKGBgLnNvLjNgYCkuCiBgYCQ8VEFSR0VUX1NPTkFNRV9GSUxFX0RJUjp0Z3Q+YGAKLSAgRGlyZWN0b3J5IG9mIHdpdGggc29uYW1lICguc28uMykuCisgIERpcmVjdG9yeSBvZiB3aXRoIHNvbmFtZSAoYGAuc28uM2BgKS4KIGBgJDxUQVJHRVRfUERCX0ZJTEU6dGd0PmBgCiAgIEZ1bGwgcGF0aCB0byB0aGUgbGlua2VyIGdlbmVyYXRlZCBwcm9ncmFtIGRhdGFiYXNlIGZpbGUgKC5wZGIpCiAgIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCkBAIC01ODksMTEgKzcyNCwxMCBAQAogICBOb3RlIHRoYXQgYGB0Z3RgYCBpcyBub3QgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgdGhpcwogICBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbi4KIGBgJDxUQVJHRVRfUFJPUEVSVFk6cHJvcD5gYAotICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkgYGBwcm9wYGAgb24gdGhlIHRhcmdldCBvbiB3aGljaCB0aGUgZ2VuZXJhdG9yCi0gIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLiBOb3RlIHRoYXQgZm9yIGdlbmVyYXRvciBleHByZXNzaW9ucyBpbgotICA6cmVmOmBUYXJnZXQgVXNhZ2UgUmVxdWlyZW1lbnRzYCB0aGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKLSAgb24gdGhlIGNvbnN1bWluZyB0YXJnZXQgcmF0aGVyIHRoYW4gdGhlIHRhcmdldCBzcGVjaWZ5aW5nIHRoZQotICByZXF1aXJlbWVudC4KKyAgVmFsdWUgb2YgdGhlIHByb3BlcnR5IGBgcHJvcGBgIG9uIHRoZSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBleHByZXNzaW9uCisgIGlzIGJlaW5nIGV2YWx1YXRlZC4gTm90ZSB0aGF0IGZvciBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgaW4KKyAgOnJlZjpgVGFyZ2V0IFVzYWdlIFJlcXVpcmVtZW50c2AgdGhpcyBpcyB0aGUgY29uc3VtaW5nIHRhcmdldCByYXRoZXIKKyAgdGhhbiB0aGUgdGFyZ2V0IHNwZWNpZnlpbmcgdGhlIHJlcXVpcmVtZW50LgogYGAkPElOU1RBTExfUFJFRklYPmBgCiAgIENvbnRlbnQgb2YgdGhlIGluc3RhbGwgcHJlZml4IHdoZW4gdGhlIHRhcmdldCBpcyBleHBvcnRlZCB2aWEKICAgOmNvbW1hbmQ6YGluc3RhbGwoRVhQT1JUKWAsIG9yIHdoZW4gZXZhbHVhdGVkIGluCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1tb2R1bGVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtbW9kdWxlcy43LnJzdAppbmRleCBiZTY0MTEyLi41MDEzMWU4IDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1tb2R1bGVzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLW1vZHVsZXMuNy5yc3QKQEAgLTM2LDYgKzM2LDcgQEAKICAgIC9tb2R1bGUvQ2hlY2tJbmNsdWRlRmlsZXMKICAgIC9tb2R1bGUvQ2hlY2tMYW5ndWFnZQogICAgL21vZHVsZS9DaGVja0xpYnJhcnlFeGlzdHMKKyAgIC9tb2R1bGUvQ2hlY2tMaW5rZXJGbGFnCiAgICAvbW9kdWxlL0NoZWNrT0JKQ0NvbXBpbGVyRmxhZwogICAgL21vZHVsZS9DaGVja09CSkNTb3VyY2VDb21waWxlcwogICAgL21vZHVsZS9DaGVja09CSkNTb3VyY2VSdW5zCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1wb2xpY2llcy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLXBvbGljaWVzLjcucnN0CmluZGV4IGMyNTYyNTAuLjNjZWIxZGYgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLXBvbGljaWVzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLXBvbGljaWVzLjcucnN0CkBAIC01MSw2ICs1MSwyNyBAQAogdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVwb3J0IGFuIGVycm9yIG9uIHVzZSBvZiBkZXByZWNhdGVkIG1hY3JvcyBvcgogZnVuY3Rpb25zLgogCitQb2xpY2llcyBJbnRyb2R1Y2VkIGJ5IENNYWtlIDMuMTgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMQorCisgICBDTVAwMTA5OiBmaW5kX3Byb2dyYW0oKSByZXF1aXJlcyBwZXJtaXNzaW9uIHRvIGV4ZWN1dGUgYnV0IG5vdCB0byByZWFkLiA8L3BvbGljeS9DTVAwMTA5PgorCitQb2xpY2llcyBJbnRyb2R1Y2VkIGJ5IENNYWtlIDMuMTgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMQorCisgICBDTVAwMTA4OiBBIHRhcmdldCBjYW5ub3QgbGluayB0byBpdHNlbGYgdGhyb3VnaCBhbiBhbGlhcy4gPC9wb2xpY3kvQ01QMDEwOD4KKyAgIENNUDAxMDc6IEFuIEFMSUFTIHRhcmdldCBjYW5ub3Qgb3ZlcndyaXRlIGFub3RoZXIgdGFyZ2V0LiA8L3BvbGljeS9DTVAwMTA3PgorICAgQ01QMDEwNjogVGhlIERvY3VtZW50YXRpb24gbW9kdWxlIGlzIHJlbW92ZWQuIDwvcG9saWN5L0NNUDAxMDY+CisgICBDTVAwMTA1OiBEZXZpY2UgbGluayBzdGVwIHVzZXMgdGhlIGxpbmsgb3B0aW9ucy4gPC9wb2xpY3kvQ01QMDEwNT4KKyAgIENNUDAxMDQ6IENNQUtFX0NVREFfQVJDSElURUNUVVJFUyBub3cgZGV0ZWN0ZWQgZm9yIE5WQ0MsIGVtcHR5IENVREFfQVJDSElURUNUVVJFUyBub3QgYWxsb3dlZC4gPC9wb2xpY3kvQ01QMDEwND4KKyAgIENNUDAxMDM6IE11bHRpcGxlIGV4cG9ydCgpIHdpdGggc2FtZSBGSUxFIHdpdGhvdXQgQVBQRU5EIGlzIG5vdCBhbGxvd2VkLiA8L3BvbGljeS9DTVAwMTAzPgorCiBQb2xpY2llcyBJbnRyb2R1Y2VkIGJ5IENNYWtlIDMuMTcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1wcm9wZXJ0aWVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtcHJvcGVydGllcy43LnJzdAppbmRleCAwNjBhMDcyLi4zMGIyYTA1IDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1wcm9wZXJ0aWVzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLXByb3BlcnRpZXMuNy5yc3QKQEAgLTEwNSw2ICsxMDUsNyBAQAogCiAgICAvcHJvcF90Z3QvQURESVRJT05BTF9DTEVBTl9GSUxFUwogICAgL3Byb3BfdGd0L0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMKKyAgIC9wcm9wX3RndC9BTElBU19HTE9CQUwKICAgIC9wcm9wX3RndC9BTElBU0VEX1RBUkdFVAogICAgL3Byb3BfdGd0L0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUwogICAgL3Byb3BfdGd0L0FORFJPSURfQVBJCkBAIC0xNzEsNiArMTcyLDcgQEAKICAgIC9wcm9wX3RndC9DT05GSUdfT1VUUFVUX05BTUUKICAgIC9wcm9wX3RndC9DT05GSUdfUE9TVEZJWAogICAgL3Byb3BfdGd0L0NST1NTQ09NUElMSU5HX0VNVUxBVE9SCisgICAvcHJvcF90Z3QvQ1VEQV9BUkNISVRFQ1RVUkVTCiAgICAvcHJvcF90Z3QvQ1VEQV9QVFhfQ09NUElMQVRJT04KICAgIC9wcm9wX3RndC9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTgogICAgL3Byb3BfdGd0L0NVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUwpAQCAtMTk5LDcgKzIwMSw5IEBACiAgICAvcHJvcF90Z3QvRk9MREVSCiAgICAvcHJvcF90Z3QvRm9ydHJhbl9GT1JNQVQKICAgIC9wcm9wX3RndC9Gb3J0cmFuX01PRFVMRV9ESVJFQ1RPUlkKKyAgIC9wcm9wX3RndC9Gb3J0cmFuX1BSRVBST0NFU1MKICAgIC9wcm9wX3RndC9GUkFNRVdPUksKKyAgIC9wcm9wX3RndC9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHCiAgICAvcHJvcF90Z3QvRlJBTUVXT1JLX1ZFUlNJT04KICAgIC9wcm9wX3RndC9HRU5FUkFUT1JfRklMRV9OQU1FCiAgICAvcHJvcF90Z3QvR0hTX0lOVEVHUklUWV9BUFAKQEAgLTMwNyw2ICszMTEsNyBAQAogICAgL3Byb3BfdGd0L09TWF9BUkNISVRFQ1RVUkVTCiAgICAvcHJvcF90Z3QvT1VUUFVUX05BTUVfQ09ORklHCiAgICAvcHJvcF90Z3QvT1VUUFVUX05BTUUKKyAgIC9wcm9wX3RndC9QQ0hfV0FSTl9JTlZBTElECiAgICAvcHJvcF90Z3QvUERCX05BTUVfQ09ORklHCiAgICAvcHJvcF90Z3QvUERCX05BTUUKICAgIC9wcm9wX3RndC9QREJfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcKQEAgLTM0Myw2ICszNDgsNyBAQAogICAgL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0JBVENIX1NJWkUKICAgIC9wcm9wX3RndC9VTklUWV9CVUlMRF9DT0RFX0FGVEVSX0lOQ0xVREUKICAgIC9wcm9wX3RndC9VTklUWV9CVUlMRF9DT0RFX0JFRk9SRV9JTkNMVURFCisgICAvcHJvcF90Z3QvVU5JVFlfQlVJTERfTU9ERQogICAgL3Byb3BfdGd0L1ZFUlNJT04KICAgIC9wcm9wX3RndC9WSVNJQklMSVRZX0lOTElORVNfSElEREVOCiAgICAvcHJvcF90Z3QvVlNfQ09ORklHVVJBVElPTl9UWVBFCkBAIC0zNjksMTIgKzM3NSwxNSBAQAogICAgL3Byb3BfdGd0L1ZTX01PQklMRV9FWFRFTlNJT05TX1ZFUlNJT04KICAgIC9wcm9wX3RndC9WU19OT19TT0xVVElPTl9ERVBMT1kKICAgIC9wcm9wX3RndC9WU19QQUNLQUdFX1JFRkVSRU5DRVMKKyAgIC9wcm9wX3RndC9WU19QTEFURk9STV9UT09MU0VUCiAgICAvcHJvcF90Z3QvVlNfUFJPSkVDVF9JTVBPUlQKICAgIC9wcm9wX3RndC9WU19TQ0NfQVVYUEFUSAogICAgL3Byb3BfdGd0L1ZTX1NDQ19MT0NBTFBBVEgKICAgIC9wcm9wX3RndC9WU19TQ0NfUFJPSkVDVE5BTUUKICAgIC9wcm9wX3RndC9WU19TQ0NfUFJPVklERVIKICAgIC9wcm9wX3RndC9WU19TREtfUkVGRVJFTkNFUworICAgL3Byb3BfdGd0L1ZTX1NPTFVUSU9OX0RFUExPWQorICAgL3Byb3BfdGd0L1ZTX1NPVVJDRV9TRVRUSU5HU190b29sCiAgICAvcHJvcF90Z3QvVlNfVVNFUl9QUk9QUwogICAgL3Byb3BfdGd0L1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX01JTl9WRVJTSU9OCiAgICAvcHJvcF90Z3QvVlNfV0lOUlRfQ09NUE9ORU5UCkBAIC00NTksNiArNDY4LDcgQEAKICAgIC9wcm9wX3NmL0NPTVBJTEVfT1BUSU9OUwogICAgL3Byb3Bfc2YvRVhURVJOQUxfT0JKRUNUCiAgICAvcHJvcF9zZi9Gb3J0cmFuX0ZPUk1BVAorICAgL3Byb3Bfc2YvRm9ydHJhbl9QUkVQUk9DRVNTCiAgICAvcHJvcF9zZi9HRU5FUkFURUQKICAgIC9wcm9wX3NmL0hFQURFUl9GSUxFX09OTFkKICAgIC9wcm9wX3NmL0lOQ0xVREVfRElSRUNUT1JJRVMKQEAgLTQ3OCwxMiArNDg4LDE0IEBACiAgICAvcHJvcF9zZi9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRQogICAgL3Byb3Bfc2YvU3dpZnRfRElBR05PU1RJQ1NfRklMRQogICAgL3Byb3Bfc2YvU1lNQk9MSUMKKyAgIC9wcm9wX3NmL1VOSVRZX0dST1VQCiAgICAvcHJvcF9zZi9WU19DT1BZX1RPX09VVF9ESVIKICAgIC9wcm9wX3NmL1ZTX0NTSEFSUF90YWduYW1lCiAgICAvcHJvcF9zZi9WU19ERVBMT1lNRU5UX0NPTlRFTlQKICAgIC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfTE9DQVRJT04KICAgIC9wcm9wX3NmL1ZTX0lOQ0xVREVfSU5fVlNJWAogICAgL3Byb3Bfc2YvVlNfUkVTT1VSQ0VfR0VORVJBVE9SCisgICAvcHJvcF9zZi9WU19TRVRUSU5HUwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0VOQUJMRV9ERUJVRwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0VOVFJZUE9JTlQKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLXZhcmlhYmxlcy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLXZhcmlhYmxlcy43LnJzdAppbmRleCBmYzI3NzM5Li40Y2U4MzY1IDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS12YXJpYWJsZXMuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtdmFyaWFibGVzLjcucnN0CkBAIC0zODgsOCArMzg4LDEwIEBACiAgICAvdmFyaWFibGUvQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUCiAgICAvdmFyaWFibGUvQ01BS0VfRk9MREVSCiAgICAvdmFyaWFibGUvQ01BS0VfRlJBTUVXT1JLCisgICAvdmFyaWFibGUvQ01BS0VfRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0NPTkZJRwogICAgL3ZhcmlhYmxlL0NNQUtFX0ZvcnRyYW5fRk9STUFUCiAgICAvdmFyaWFibGUvQ01BS0VfRm9ydHJhbl9NT0RVTEVfRElSRUNUT1JZCisgICAvdmFyaWFibGUvQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTCiAgICAvdmFyaWFibGUvQ01BS0VfR0hTX05PX1NPVVJDRV9HUk9VUF9GSUxFCiAgICAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUCiAgICAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUKQEAgLTQzNyw2ICs0MzksNyBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTCiAgICAvdmFyaWFibGUvQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAgICAvdmFyaWFibGUvQ01BS0VfT1NYX1NZU1JPT1QKKyAgIC92YXJpYWJsZS9DTUFLRV9QQ0hfV0FSTl9JTlZBTElECiAgICAvdmFyaWFibGUvQ01BS0VfUERCX09VVFBVVF9ESVJFQ1RPUlkKICAgIC92YXJpYWJsZS9DTUFLRV9QREJfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcKICAgIC92YXJpYWJsZS9DTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFCkBAIC00ODYsNiArNDg5LDcgQEAKICAgIC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVDQwogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWAogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUc3NworICAgL3ZhcmlhYmxlL0NNQUtFX0NVREFfQVJDSElURUNUVVJFUwogICAgL3ZhcmlhYmxlL0NNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUwogICAgL3ZhcmlhYmxlL0NNQUtFX0NVREFfSE9TVF9DT01QSUxFUgogICAgL3ZhcmlhYmxlL0NNQUtFX0NVREFfRVhURU5TSU9OUwpAQCAtNjIxLDYgKzYyNSw3IEBACiAgICAvdmFyaWFibGUvQ1RFU1RfUDRfQ09NTUFORAogICAgL3ZhcmlhYmxlL0NURVNUX1A0X09QVElPTlMKICAgIC92YXJpYWJsZS9DVEVTVF9QNF9VUERBVEVfT1BUSU9OUworICAgL3ZhcmlhYmxlL0NURVNUX1JFU09VUkNFX1NQRUNfRklMRQogICAgL3ZhcmlhYmxlL0NURVNUX1JVTl9DVVJSRU5UX1NDUklQVAogICAgL3ZhcmlhYmxlL0NURVNUX1NDUF9DT01NQU5ECiAgICAvdmFyaWFibGUvQ1RFU1RfU0lURQpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UuMS5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdAppbmRleCBkMzQzODc0Li41NDRmNmVhIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdApAQCAtMzQxLDkgKzM0MSw5IEBACiAgUHJpbnQgYSB3YXJuaW5nIHdoZW4gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpcyB1c2VkLgogCiBgYC0td2Fybi11bnVzZWQtdmFyc2BgCi0gV2FybiBhYm91dCB1bnVzZWQgdmFyaWFibGVzLgotCi0gRmluZCB2YXJpYWJsZXMgdGhhdCBhcmUgZGVjbGFyZWQgb3Igc2V0LCBidXQgbm90IHVzZWQuCisgRG9lcyBub3RoaW5nLiAgSW4gQ01ha2UgdmVyc2lvbnMgMy4yIGFuZCBiZWxvdyB0aGlzIGVuYWJsZWQgd2FybmluZ3MgYWJvdXQKKyB1bnVzZWQgdmFyaWFibGVzLiAgSW4gQ01ha2UgdmVyc2lvbnMgMy4zIHRocm91Z2ggMy4xOCB0aGUgb3B0aW9uIHdhcyBicm9rZW4uCisgSW4gQ01ha2UgMy4xOSBhbmQgYWJvdmUgdGhlIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLgogCiBgYC0tbm8td2Fybi11bnVzZWQtY2xpYGAKICBEb24ndCB3YXJuIGFib3V0IGNvbW1hbmQgbGluZSBvcHRpb25zLgpAQCAtMzU4LDYgKzM1OCwyMCBAQAogIGluIDp2YXJpYWJsZTpgQ01BS0VfU09VUkNFX0RJUmAgYW5kIDp2YXJpYWJsZTpgQ01BS0VfQklOQVJZX0RJUmAuCiAgVGhpcyBmbGFnIHRlbGxzIENNYWtlIHRvIHdhcm4gYWJvdXQgb3RoZXIgZmlsZXMgYXMgd2VsbC4KIAorYGAtLXByb2ZpbGluZy1vdXRwdXQ9PHBhdGg+YGAKKyBVc2VkIGluIGNvbmp1Y3Rpb24gd2l0aCBgYC0tcHJvZmlsaW5nLWZvcm1hdGBgIHRvIG91dHB1dCB0byBhIGdpdmVuIHBhdGguCisKK2BgLS1wcm9maWxpbmctZm9ybWF0PTxmaWxlPmBgCisgRW5hYmxlIHRoZSBvdXRwdXQgb2YgcHJvZmlsaW5nIGRhdGEgb2YgQ01ha2Ugc2NyaXB0IGluIHRoZSBnaXZlbiBmb3JtYXQuCisKKyBUaGlzIGNhbiBhaWQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgQ01ha2Ugc2NyaXB0cyBleGVjdXRlZC4gVGhpcmQgcGFydHkKKyBhcHBsaWNhdGlvbnMgc2hvdWxkIGJlIHVzZWQgdG8gcHJvY2VzcyB0aGUgb3V0cHV0IGludG8gaHVtYW4gcmVhZGFibGUgZm9ybWF0LgorCisgQ3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgorIGBgZ29vZ2xlLXRyYWNlYGAgT3V0cHV0cyBpbiBHb29nbGUgVHJhY2UgRm9ybWF0LCB3aGljaCBjYW4gYmUgcGFyc2VkIGJ5IHRoZQorIGFib3V0OnRyYWNpbmcgdGFiIG9mIEdvb2dsZSBDaHJvbWUgb3IgdXNpbmcgYSBwbHVnaW4gZm9yIGEgdG9vbCBsaWtlIFRyYWNlCisgQ29tcGFzcy4KKwogLi4gX2BCdWlsZCBUb29sIE1vZGVgOgogCiBCdWlsZCBhIFByb2plY3QKQEAgLTQzNiw2ICs0NTAsOSBAQAogYGAtLWNvbXBvbmVudCA8Y29tcD5gYAogICBDb21wb25lbnQtYmFzZWQgaW5zdGFsbC4gT25seSBpbnN0YWxsIGNvbXBvbmVudCBgYDxjb21wPmBgLgogCitgYC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgPHBlcm1pc3Npb25zPmBgCisgIERlZmF1bHQgZGlyZWN0b3J5IGluc3RhbGwgcGVybWlzc2lvbnMuIFBlcm1pc3Npb25zIGluIGZvcm1hdCBgYDx1PXJ3eCxnPXJ4LG89cng+YGAuCisKIGBgLS1wcmVmaXggPHByZWZpeD5gYAogICBPdmVycmlkZSB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeCwgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGAuCiAKQEAgLTQ2NywxMyArNDg0LDE3IEBACiAKIC4uIGNvZGUtYmxvY2s6OiBzaGVsbAogCi0gIGNtYWtlIFt7LUQgPHZhcj49PHZhbHVlPn0uLi5dIC1QIDxjbWFrZS1zY3JpcHQtZmlsZT4KKyAgY21ha2UgW3stRCA8dmFyPj08dmFsdWU+fS4uLl0gLVAgPGNtYWtlLXNjcmlwdC1maWxlPiBbLS0gPHVucGFyc2VkLW9wdGlvbnM+Li4uXQogCiBQcm9jZXNzIHRoZSBnaXZlbiBjbWFrZSBmaWxlIGFzIGEgc2NyaXB0IHdyaXR0ZW4gaW4gdGhlIENNYWtlCiBsYW5ndWFnZS4gIE5vIGNvbmZpZ3VyZSBvciBnZW5lcmF0ZSBzdGVwIGlzIHBlcmZvcm1lZCBhbmQgdGhlIGNhY2hlCiBpcyBub3QgbW9kaWZpZWQuICBJZiB2YXJpYWJsZXMgYXJlIGRlZmluZWQgdXNpbmcgYGAtRGBgLCB0aGlzIG11c3QgYmUKIGRvbmUgYmVmb3JlIHRoZSBgYC1QYGAgYXJndW1lbnQuCiAKK0FueSBvcHRpb25zIGFmdGVyIGBgLS1gYCBhcmUgbm90IHBhcnNlZCBieSBDTWFrZSwgYnV0IHRoZXkgYXJlIHN0aWxsIGluY2x1ZGVkCitpbiB0aGUgc2V0IG9mIDp2YXJpYWJsZTpgQ01BS0VfQVJHVjxuPiA8Q01BS0VfQVJHVjA+YCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZQorc2NyaXB0IChpbmNsdWRpbmcgdGhlIGBgLS1gYCBpdHNlbGYpLgorCiAKIFJ1biBhIENvbW1hbmQtTGluZSBUb29sCiA9PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNTQwLDEyICs1NjEsMTYgQEAKICAgYGBzZXJ2ZXJNb2RlYGAKICAgICBgYHRydWVgYCBpZiBjbWFrZSBzdXBwb3J0cyBzZXJ2ZXItbW9kZSBhbmQgYGBmYWxzZWBgIG90aGVyd2lzZS4KIAorYGBjYXQgPGZpbGVzPi4uLmBgCisgIENvbmNhdGVuYXRlIGZpbGVzIGFuZCBwcmludCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCiBgYGNoZGlyIDxkaXI+IDxjbWQ+IFs8YXJnPi4uLl1gYAogICBDaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHJ1biBhIGNvbW1hbmQuCiAKIGBgY29tcGFyZV9maWxlcyBbLS1pZ25vcmUtZW9sXSA8ZmlsZTE+IDxmaWxlMj5gYAogICBDaGVjayBpZiBgYDxmaWxlMT5gYCBpcyBzYW1lIGFzIGBgPGZpbGUyPmBgLiBJZiBmaWxlcyBhcmUgdGhlIHNhbWUsCi0gIHRoZW4gcmV0dXJucyBgYDBgYCwgaWYgbm90IGl0IHJldHVybnMgYGAxYGAuICBUaGUgYGAtLWlnbm9yZS1lb2xgYCBvcHRpb24KKyAgdGhlbiByZXR1cm5zIGBgMGBgLCBpZiBub3QgaXQgcmV0dXJucyBgYDFgYC4gIEluIGNhc2Ugb2YgaW52YWxpZAorICBhcmd1bWVudHMsIGl0IHJldHJ1bnMgMi4gVGhlIGBgLS1pZ25vcmUtZW9sYGAgb3B0aW9uCiAgIGltcGxpZXMgbGluZS13aXNlIGNvbXBhcmlzb24gYW5kIGlnbm9yZXMgTEYvQ1JMRiBkaWZmZXJlbmNlcy4KIAogYGBjb3B5IDxmaWxlPi4uLiA8ZGVzdGluYXRpb24+YGAKQEAgLTU3Myw2ICs1OTgsMTMgQEAKICAgLi4gbm90ZTo6CiAgICAgUGF0aCB0byB3aGVyZSBgYDxuZXc+YGAgc3ltYm9saWMgbGluayB3aWxsIGJlIGNyZWF0ZWQgaGFzIHRvIGV4aXN0IGJlZm9yZWhhbmQuCiAKK2BgY3JlYXRlX2hhcmRsaW5rIDxvbGQ+IDxuZXc+YGAKKyAgQ3JlYXRlIGEgaGFyZCBsaW5rIGBgPG5ldz5gYCBuYW1pbmcgYGA8b2xkPmBgLgorCisgIC4uIG5vdGU6OgorICAgIFBhdGggdG8gd2hlcmUgYGA8bmV3PmBgIGhhcmQgbGluayB3aWxsIGJlIGNyZWF0ZWQgaGFzIHRvIGV4aXN0IGJlZm9yZWhhbmQuCisgICAgYGA8b2xkPmBgIGhhcyB0byBleGlzdCBiZWZvcmVoYW5kLgorCiBgYGVjaG8gWzxzdHJpbmc+Li4uXWBgCiAgIERpc3BsYXlzIGFyZ3VtZW50cyBhcyB0ZXh0LgogCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jdGVzdC4xLnJzdCBiL0hlbHAvbWFudWFsL2N0ZXN0LjEucnN0CmluZGV4IDY1MDNmMGUuLmQzYWI3NWEgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2N0ZXN0LjEucnN0CisrKyBiL0hlbHAvbWFudWFsL2N0ZXN0LjEucnN0CkBAIC03Miw2ICs3Miw5IEBACiAgVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgZW5hYmxlZCBieSBzZXR0aW5nIHRoZQogIDplbnZ2YXI6YENURVNUX09VVFBVVF9PTl9GQUlMVVJFYCBlbnZpcm9ubWVudCB2YXJpYWJsZQogCitgYC0tc3RvcC1vbi1mYWlsdXJlYGAKKyBTdG9wIHJ1bm5pbmcgdGhlIHRlc3RzIHdoZW4gdGhlIGZpcnN0IGZhaWx1cmUgaGFwcGVucy4KKwogYGAtRmBgCiAgRW5hYmxlIGZhaWxvdmVyLgogCkBAIC05OTQsOCArOTk3LDEyIEBACiAKIGBgUmVzb3VyY2VTcGVjRmlsZWBgCiAgIFNwZWNpZnkgYQotICA6cmVmOmByZXNvdXJjZSBzcGVjaWZpY2F0aW9uIGZpbGUgPGN0ZXN0LXJlc291cmNlLXNwZWNpZmljYXRpb24tZmlsZT5gLiBTZWUKLSAgOnJlZjpgY3Rlc3QtcmVzb3VyY2UtYWxsb2NhdGlvbmAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgIDpyZWY6YHJlc291cmNlIHNwZWNpZmljYXRpb24gZmlsZSA8Y3Rlc3QtcmVzb3VyY2Utc3BlY2lmaWNhdGlvbi1maWxlPmAuCisKKyAgKiBgQ1Rlc3QgU2NyaXB0YF8gdmFyaWFibGU6IDp2YXJpYWJsZTpgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYAorICAqIDptb2R1bGU6YENUZXN0YCBtb2R1bGUgdmFyaWFibGU6IGBgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYGAKKworICBTZWUgOnJlZjpgY3Rlc3QtcmVzb3VyY2UtYWxsb2NhdGlvbmAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIGBgTGFiZWxzRm9yU3VicHJvamVjdHNgYAogICBTcGVjaWZ5IGEgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGxhYmVscyB0aGF0IHdpbGwgYmUgdHJlYXRlZCBhcwpAQCAtMTQwMyw5ICsxNDEwLDE2IEBACiAKIFRoZSByZXNvdXJjZSBzcGVjaWZpY2F0aW9uIGZpbGUgaXMgYSBKU09OIGZpbGUgd2hpY2ggaXMgcGFzc2VkIHRvIENUZXN0LCBlaXRoZXIKIG9uIHRoZSA6bWFudWFsOmBjdGVzdCgxKWAgY29tbWFuZCBsaW5lIGFzIGBgLS1yZXNvdXJjZS1zcGVjLWZpbGVgYCwgb3IgYXMgdGhlCi1gYFJFU09VUkNFX1NQRUNfRklMRWBgIGFyZ3VtZW50IG9mIDpjb21tYW5kOmBjdGVzdF90ZXN0YC4gVGhlIHJlc291cmNlCi1zcGVjaWZpY2F0aW9uIGZpbGUgbXVzdCBiZSBhIEpTT04gb2JqZWN0LiBBbGwgZXhhbXBsZXMgaW4gdGhpcyBkb2N1bWVudCBhc3N1bWUKLXRoZSBmb2xsb3dpbmcgcmVzb3VyY2Ugc3BlY2lmaWNhdGlvbiBmaWxlOgorYGBSRVNPVVJDRV9TUEVDX0ZJTEVgYCBhcmd1bWVudCBvZiA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAuIElmIGEgZGFzaGJvYXJkIHNjcmlwdAoraXMgdXNlZCBhbmQgYGBSRVNPVVJDRV9TUEVDX0ZJTEVgYCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YKKzp2YXJpYWJsZTpgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYCBpbiB0aGUgZGFzaGJvYXJkIHNjcmlwdCBpcyB1c2VkIGluc3RlYWQuCitJZiBgYC0tcmVzb3VyY2Utc3BlYy1maWxlYGAsIGBgUkVTT1VSQ0VfU1BFQ19GSUxFYGAsIGFuZAorOnZhcmlhYmxlOmBDVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEVgIGluIHRoZSBkYXNoYm9hcmQgc2NyaXB0IGFyZSBub3Qgc3BlY2lmaWVkLAordGhlIHZhbHVlIG9mIDp2YXJpYWJsZTpgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYCBpbiB0aGUgQ01ha2UgYnVpbGQgaXMgdXNlZAoraW5zdGVhZC4gSWYgbm9uZSBvZiB0aGVzZSBhcmUgc3BlY2lmaWVkLCBubyByZXNvdXJjZSBzcGVjIGZpbGUgaXMgdXNlZC4KKworVGhlIHJlc291cmNlIHNwZWNpZmljYXRpb24gZmlsZSBtdXN0IGJlIGEgSlNPTiBvYmplY3QuIEFsbCBleGFtcGxlcyBpbiB0aGlzCitkb2N1bWVudCBhc3N1bWUgdGhlIGZvbGxvd2luZyByZXNvdXJjZSBzcGVjaWZpY2F0aW9uIGZpbGU6CiAKIC4uIGNvZGUtYmxvY2s6OiBqc29uCiAKZGlmZiAtLWdpdCBhL0hlbHAvbW9kdWxlL0NQYWNrQXJjaGl2ZS5yc3QgYi9IZWxwL21vZHVsZS9DUGFja0FyY2hpdmUucnN0CmluZGV4IDg2MTYwOTguLmY1ZDZkYTQgMTAwNjQ0Ci0tLSBhL0hlbHAvbW9kdWxlL0NQYWNrQXJjaGl2ZS5yc3QKKysrIGIvSGVscC9tb2R1bGUvQ1BhY2tBcmNoaXZlLnJzdApAQCAtMSw0ICsxLDYgQEAKIENQYWNrQXJjaGl2ZQogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIENQYWNrIEFyY2hpdmUgZ2VuZXJhdG9yIGhhcyBtb3ZlZCBoZXJlOiA6Y3BhY2tfZ2VuOmBDUGFjayBBcmNoaXZlIEdlbmVyYXRvcmAKZGlmZiAtLWdpdCBhL0hlbHAvbW9kdWxlL0NQYWNrRnJlZUJTRC5yc3QgYi9IZWxwL21vZHVsZS9DUGFja0ZyZWVCU0QucnN0CmluZGV4IDY5NzAxYjguLjdhZTYxNjQgMTAwNjQ0Ci0tLSBhL0hlbHAvbW9kdWxlL0NQYWNrRnJlZUJTRC5yc3QKKysrIGIvSGVscC9tb2R1bGUvQ1BhY2tGcmVlQlNELnJzdApAQCAtMSw0ICsxLDYgQEAKIENQYWNrRnJlZUJTRAogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBDUGFjayBGcmVlQlNEIGdlbmVyYXRvciBoYXMgbW92ZWQgaGVyZTogOmNwYWNrX2dlbjpgQ1BhY2sgRnJlZUJTRCBHZW5lcmF0b3JgCmRpZmYgLS1naXQgYS9IZWxwL21vZHVsZS9DUGFja051R2V0LnJzdCBiL0hlbHAvbW9kdWxlL0NQYWNrTnVHZXQucnN0CmluZGV4IDRmMzliM2EuLmJiZWQ3ZjkgMTAwNjQ0Ci0tLSBhL0hlbHAvbW9kdWxlL0NQYWNrTnVHZXQucnN0CisrKyBiL0hlbHAvbW9kdWxlL0NQYWNrTnVHZXQucnN0CkBAIC0xLDQgKzEsNiBAQAogQ1BhY2tOdUdldAogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQ1BhY2sgTnVHZXQgZ2VuZXJhdG9yIGhhcyBtb3ZlZCBoZXJlOiA6Y3BhY2tfZ2VuOmBDUGFjayBOdUdldCBHZW5lcmF0b3JgCmRpZmYgLS1naXQgYS9IZWxwL21vZHVsZS9DUGFja1Byb2R1Y3RCdWlsZC5yc3QgYi9IZWxwL21vZHVsZS9DUGFja1Byb2R1Y3RCdWlsZC5yc3QKaW5kZXggOGNkOTE5OC4uZTEyY2QzMiAxMDA2NDQKLS0tIGEvSGVscC9tb2R1bGUvQ1BhY2tQcm9kdWN0QnVpbGQucnN0CisrKyBiL0hlbHAvbW9kdWxlL0NQYWNrUHJvZHVjdEJ1aWxkLnJzdApAQCAtMSw0ICsxLDYgQEAKIENQYWNrUHJvZHVjdEJ1aWxkCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBDUGFjayBwcm9kdWN0YnVpbGQgZ2VuZXJhdG9yIGhhcyBtb3ZlZCBoZXJlOiA6Y3BhY2tfZ2VuOmBDUGFjayBwcm9kdWN0YnVpbGQgR2VuZXJhdG9yYApkaWZmIC0tZ2l0IGEvSGVscC9tb2R1bGUvQ2hlY2tMaW5rZXJGbGFnLnJzdCBiL0hlbHAvbW9kdWxlL0NoZWNrTGlua2VyRmxhZy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNTcyNQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvbW9kdWxlL0NoZWNrTGlua2VyRmxhZy5yc3QKQEAgLTAsMCArMSBAQAorLi4gY21ha2UtbW9kdWxlOjogLi4vLi4vTW9kdWxlcy9DaGVja0xpbmtlckZsYWcuY21ha2UKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNTEucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA1MS5yc3QKaW5kZXggNmI2NzllNS4uMDUzYmM5NyAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA1MS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA1MS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDUxCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBMaXN0IFRBUkdFVF9PQkpFQ1RTIGluIFNPVVJDRVMgdGFyZ2V0IHByb3BlcnR5LgogCiBDTWFrZSAzLjAgYW5kIGxvd2VyIGRpZCBub3QgaW5jbHVkZSB0aGUgYGBUQVJHRVRfT0JKRUNUU2BgCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDUyLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNTIucnN0CmluZGV4IGVlMmU2ZTguLmM3NWY5YWIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNTIucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNTIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA1MgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogUmVqZWN0IHNvdXJjZSBhbmQgYnVpbGQgZGlycyBpbiBpbnN0YWxsZWQKIDpwcm9wX3RndDpgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVNgLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDUzLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNTMucnN0CmluZGV4IDAzMmIzZTUuLjliMThiMmQgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNTMucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNTMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA1MwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU2ltcGxpZnkgdmFyaWFibGUgcmVmZXJlbmNlIGFuZCBlc2NhcGUgc2VxdWVuY2UgZXZhbHVhdGlvbi4KIAogQ01ha2UgMy4xIGludHJvZHVjZWQgYSBtdWNoIGZhc3RlciBpbXBsZW1lbnRhdGlvbiBvZiBldmFsdWF0aW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA1NC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDU0LnJzdAppbmRleCAxZTAwMGE2Li5jN2FlMDE5IDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDU0LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDU0LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNTQKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIE9ubHkgaW50ZXJwcmV0IDpjb21tYW5kOmBpZmAgYXJndW1lbnRzIGFzIHZhcmlhYmxlcyBvciBrZXl3b3JkcyB3aGVuIHVucXVvdGVkLgogCiBDTWFrZSAzLjEgYW5kIGFib3ZlIG5vIGxvbmdlciBpbXBsaWNpdGx5IGRlcmVmZXJlbmNlIHZhcmlhYmxlcyBvcgpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA1NS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDU1LnJzdAppbmRleCBiYzVhZDA4Li40N2NhYzhlIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDU1LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDU1LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNTUKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIFN0cmljdCBjaGVja2luZyBmb3IgdGhlIDpjb21tYW5kOmBicmVha2AgY29tbWFuZC4KIAogQ01ha2UgMy4xIGFuZCBsb3dlciBhbGxvd2VkIGNhbGxzIHRvIHRoZSA6Y29tbWFuZDpgYnJlYWtgIGNvbW1hbmQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNTYucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA1Ni5yc3QKaW5kZXggODM0ZGE4NC4uNjI4YTZhMSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA1Ni5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA1Ni5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDU2CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBIb25vciBsaW5rIGZsYWdzIGluIDpjb21tYW5kOmB0cnlfY29tcGlsZWAgc291cmNlLWZpbGUgc2lnbmF0dXJlLgogCiBUaGUgOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBjb21tYW5kIHNvdXJjZS1maWxlIHNpZ25hdHVyZSBnZW5lcmF0ZXMgYQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA1Ny5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDU3LnJzdAppbmRleCA4M2RiMTg2Li43NmFlYmZiIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDU3LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDU3LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNTcKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFN1cHBvcnQgbmV3IDpjb21tYW5kOmBpZmAgSU5fTElTVCBvcGVyYXRvci4KIAogQ01ha2UgMy4zIGFkZHMgc3VwcG9ydCBmb3IgdGhlIG5ldyBJTl9MSVNUIG9wZXJhdG9yLgpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA1OC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDU4LnJzdAppbmRleCAwNWVmZDQ4Li4wNmNjNzRiIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDU4LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDU4LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNTgKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIE5pbmphIHJlcXVpcmVzIGN1c3RvbSBjb21tYW5kIGJ5cHJvZHVjdHMgdG8gYmUgZXhwbGljaXQuCiAKIFdoZW4gYW4gaW50ZXJtZWRpYXRlIGZpbGUgZ2VuZXJhdGVkIGR1cmluZyB0aGUgYnVpbGQgaXMgY29uc3VtZWQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNTkucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA1OS5yc3QKaW5kZXggYmNlOTgyZS4uNjMxN2QwNSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA1OS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA1OS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDU5CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBEbyBub3QgdHJlYXQgYGBERUZJTklUSU9OU2BgIGFzIGEgYnVpbHQtaW4gZGlyZWN0b3J5IHByb3BlcnR5LgogCiBDTWFrZSAzLjMgYW5kIGFib3ZlIG5vIGxvbmdlciBtYWtlIGEgbGlzdCBvZiBkZWZpbml0aW9ucyBhdmFpbGFibGUgdGhyb3VnaApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA2MC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDYwLnJzdAppbmRleCA5OGFjMmNmLi4wOTI1N2QxIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDYwLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDYwLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNjAKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIExpbmsgbGlicmFyaWVzIGJ5IGZ1bGwgcGF0aCBldmVuIGluIGltcGxpY2l0IGRpcmVjdG9yaWVzLgogCiBQb2xpY3kgOnBvbGljeTpgQ01QMDAwM2Agd2FzIGludHJvZHVjZWQgd2l0aCB0aGUgaW50ZW50aW9uIG9mIGFsd2F5cwpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA2MS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDYxLnJzdAppbmRleCA1N2U0MTYxLi5hY2E1NTFkIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDYxLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDYxLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNjEKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIENUZXN0IGRvZXMgbm90IGJ5IGRlZmF1bHQgdGVsbCBgYG1ha2VgYCB0byBpZ25vcmUgZXJyb3JzIChgYC1pYGApLgogCiBUaGUgOmNvbW1hbmQ6YGN0ZXN0X2J1aWxkYCBhbmQgOmNvbW1hbmQ6YGJ1aWxkX2NvbW1hbmRgIGNvbW1hbmRzIG5vCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDYyLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjIucnN0CmluZGV4IDBkYjdhYWYuLjAxZTkzZjAgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjIucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2MgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogRGlzYWxsb3cgOmNvbW1hbmQ6YGluc3RhbGxgIG9mIDpjb21tYW5kOmBleHBvcnRgIHJlc3VsdC4KIAogVGhlIDpjb21tYW5kOmBleHBvcnQoKWAgY29tbWFuZCBnZW5lcmF0ZXMgYSBmaWxlIGNvbnRhaW5pbmcKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNjMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA2My5yc3QKaW5kZXggZDczNmQwNi4uZmVjM2FkOCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA2My5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA2My5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDYzCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBIb25vciB2aXNpYmlsaXR5IHByb3BlcnRpZXMgZm9yIGFsbCB0YXJnZXQgdHlwZXMuCiAKIFRoZSA6cHJvcF90Z3Q6YDxMQU5HPl9WSVNJQklMSVRZX1BSRVNFVGAgYW5kCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDY0LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjQucnN0CmluZGV4IGU5YTA2MWIuLjBjMjBjMTMgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjQucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2NAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogUmVjb2duaXplIGBgVEVTVGBgIGFzIGEgb3BlcmF0b3IgZm9yIHRoZSA6Y29tbWFuZDpgaWZgIGNvbW1hbmQuCiAKIFRoZSBgYFRFU1RgYCBvcGVyYXRvciB3YXMgYWRkZWQgdG8gdGhlIDpjb21tYW5kOmBpZmAgY29tbWFuZCB0byBkZXRlcm1pbmUgaWYgYQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA2NS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDY1LnJzdAppbmRleCBiODIwYWFkLi44OTY4YjkxIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDY1LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDY1LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNjUKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERvIG5vdCBhZGQgZmxhZ3MgdG8gZXhwb3J0IHN5bWJvbHMgZnJvbSBleGVjdXRhYmxlcyB3aXRob3V0CiB0aGUgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgdGFyZ2V0IHByb3BlcnR5LgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDY2LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjYucnN0CmluZGV4IGUxMTBhZTEuLmIwODQzMGYgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjYucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjYucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2NgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogSG9ub3IgcGVyLWNvbmZpZyBmbGFncyBpbiA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIHNvdXJjZS1maWxlIHNpZ25hdHVyZS4KIAogVGhlIHNvdXJjZSBmaWxlIHNpZ25hdHVyZSBvZiB0aGUgOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBjb21tYW5kIHVzZXMgdGhlIHZhbHVlCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDY3LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjcucnN0CmluZGV4IGY4MDI3ODcuLjgzNThiYjIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjcucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2NwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogSG9ub3IgbGFuZ3VhZ2Ugc3RhbmRhcmQgaW4gOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBzb3VyY2UtZmlsZSBzaWduYXR1cmUuCiAKIFRoZSA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIHNvdXJjZSBmaWxlIHNpZ25hdHVyZSBpcyBpbnRlbmRlZCB0byBhbGxvdwpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA2OC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDY4LnJzdAppbmRleCA5NzhhNmUzLi41ZDJhNGIxIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDY4LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDY4LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNjgKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIGBgUlBBVEhgYCBzZXR0aW5ncyBvbiBtYWNPUyBkbyBub3QgYWZmZWN0IGBgaW5zdGFsbF9uYW1lYGAuCiAKIENNYWtlIDMuOSBhbmQgbmV3ZXIgcmVtb3ZlIGFueSBlZmZlY3QgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyBtYXkgaGF2ZSBvbiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNjkucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA2OS5yc3QKaW5kZXggMGQ1ZGRmZC4uZWFmYWM0NSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA2OS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA2OS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDY5CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiA6cHJvcF90Z3Q6YElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05gIGlzIGVuZm9yY2VkIHdoZW4gZW5hYmxlZC4KIAogQ01ha2UgMy45IGFuZCBuZXdlciBwcmVmZXIgdG8gYWRkIElQTyBmbGFncyB3aGVuZXZlciB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzAucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3MC5yc3QKaW5kZXggMGZiMzYxNy4uYzg4MGQxZiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3MC5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3MC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDcwCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogRGVmaW5lIDpjb21tYW5kOmBmaWxlKEdFTkVSQVRFKWAgYmVoYXZpb3IgZm9yIHJlbGF0aXZlIHBhdGhzLgogCiBDTWFrZSAzLjEwIGFuZCBuZXdlciBkZWZpbmUgdGhhdCByZWxhdGl2ZSBwYXRocyBnaXZlbiB0byBgYElOUFVUYGAgYW5kCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDcxLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzEucnN0CmluZGV4IDg1NWVjZjAuLjcwMGQzYjAgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzEucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzEucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3MQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIExldCA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZCA6cHJvcF90Z3Q6YEFVVE9VSUNgIHByb2Nlc3MKIDpwcm9wX3NmOmBHRU5FUkFURURgIGZpbGVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDcyLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzIucnN0CmluZGV4IDNhYmJhZDcuLjFkY2RmZWYgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzIucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3MgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIDptb2R1bGU6YEZpbmRPcGVuR0xgIHByZWZlcnMgR0xWTkQgYnkgZGVmYXVsdCB3aGVuIGF2YWlsYWJsZS4KIAogVGhlIDptb2R1bGU6YEZpbmRPcGVuR0xgIG1vZHVsZSBwcm92aWRlcyBhbiBgYE9wZW5HTDo6R0xgYCB0YXJnZXQgYW5kIGFuCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDczLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzMucnN0CmluZGV4IDliZmEwZTkuLjhmMDM0NWMgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzMucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3MwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIERvIG5vdCBwcm9kdWNlIGxlZ2FjeSBgYF9MSUJfREVQRU5EU2BgIGNhY2hlIGVudHJpZXMuCiAKIEFuY2llbnQgQ01ha2UgdmVyc2lvbnMgb25jZSB1c2VkIGBgPHRndD5fTElCX0RFUEVORFNgYCBjYWNoZSBlbnRyaWVzIHRvCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDc0LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzQucnN0CmluZGV4IDYzZWJmN2IuLjg2M2JiYjIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzQucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3NAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIHVzZXMgYGA8UGFja2FnZU5hbWU+X1JPT1RgYCB2YXJpYWJsZXMuCiAKIEluIENNYWtlIDMuMTIgYW5kIGFib3ZlIHRoZSA6Y29tbWFuZDpgZmluZF9wYWNrYWdlKDxQYWNrYWdlTmFtZT4pYCBjb21tYW5kIG5vdwpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA3NS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDc1LnJzdAppbmRleCBhYTVjM2Y3Li40MjEzNzgyIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDc1LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDc1LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNzUKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBJbmNsdWRlIGZpbGUgY2hlY2sgbWFjcm9zIGhvbm9yIGBgQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTYGAuCiAKIEluIENNYWtlIDMuMTIgYW5kIGFib3ZlLCB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzYucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3Ni5yc3QKaW5kZXggZGQyNWY4MC4uZWRjYTc0MiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3Ni5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3Ni5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDc2CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogVGhlIDpjb21tYW5kOmB0YXJnZXRfc291cmNlc2AgY29tbWFuZCBjb252ZXJ0cyByZWxhdGl2ZSBwYXRocyB0byBhYnNvbHV0ZS4KIAogSW4gQ01ha2UgMy4xMyBhbmQgYWJvdmUsIHRoZSA6Y29tbWFuZDpgdGFyZ2V0X3NvdXJjZXNgIGNvbW1hbmQgbm93IGNvbnZlcnRzCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDc3LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzcucnN0CmluZGV4IDQ0Nzk3YjYuLjE3NGNkZTkgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzcucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3NwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIDpjb21tYW5kOmBvcHRpb25gIGhvbm9ycyBub3JtYWwgdmFyaWFibGVzLgogCiBUaGUgOmNvbW1hbmQ6YG9wdGlvbmAgY29tbWFuZCBpcyB0eXBpY2FsbHkgdXNlZCB0byBjcmVhdGUgYSBjYWNoZSBlbnRyeQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA3OC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDc4LnJzdAppbmRleCAyZTk3OTM0Li44OWZkYjBiIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDc4LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDc4LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNzgKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiA6bW9kdWxlOmBVc2VTV0lHYCBnZW5lcmF0ZXMgc3RhbmRhcmQgdGFyZ2V0IG5hbWVzLgogCiBTdGFydGluZyB3aXRoIENNYWtlIDMuMTMsIDptb2R1bGU6YFVzZVNXSUdgIGdlbmVyYXRlcyBub3cgc3RhbmRhcmQgdGFyZ2V0CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDc5LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzkucnN0CmluZGV4IDAyNDRkNmMuLjAxYWEwOGQgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzkucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3OQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgIGFsbG93cyB1c2Ugd2l0aCB0YXJnZXRzIGluIG90aGVyIGRpcmVjdG9yaWVzLgogCiBQcmlvciB0byBDTWFrZSAzLjEzIHRoZSA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYCBjb21tYW5kIGRpZCBub3QKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODAucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4MC5yc3QKaW5kZXggNWNlOTU5MS4uNzg5ZWZlYSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4MC5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4MC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDgwCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogOm1vZHVsZTpgQnVuZGxlVXRpbGl0aWVzYCBjYW5ub3QgYmUgaW5jbHVkZWQgYXQgY29uZmlndXJlIHRpbWUuCiAKIFRoZSBtYWNyb3MgcHJvdmlkZWQgYnkgOm1vZHVsZTpgQnVuZGxlVXRpbGl0aWVzYCBhcmUgaW50ZW5kZWQgdG8gYmUgaW52b2tlZApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA4MS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDgxLnJzdAppbmRleCBkM2IyODcyLi5kMTU3M2RkIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDgxLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDgxLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwODEKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBSZWxhdGl2ZSBwYXRocyBub3QgYWxsb3dlZCBpbiA6cHJvcF90Z3Q6YExJTktfRElSRUNUT1JJRVNgIHRhcmdldCBwcm9wZXJ0eS4KIAogQ01ha2UgMy4xMiBhbmQgbG93ZXIgYWxsb3dlZCB0aGUgOnByb3BfZGlyOmBMSU5LX0RJUkVDVE9SSUVTYCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODIucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4Mi5yc3QKaW5kZXggZDg4NzYxNi4uMjVjOTU4MCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4Mi5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4Mi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDgyCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogSW5zdGFsbCBydWxlcyBmcm9tIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBjYWxscyBhcmUgaW50ZXJsZWF2ZWQgd2l0aAogdGhvc2UgaW4gY2FsbGVyLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDgzLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwODMucnN0CmluZGV4IGUwYjA5Y2YuLjc1MThlZTMgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwODMucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwODMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA4MwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIFRvIGNvbnRyb2wgZ2VuZXJhdGlvbiBvZiBQb3NpdGlvbiBJbmRlcGVuZGVudCBFeGVjdXRhYmxlIChgYFBJRWBgKSBvciBub3QsIHNvbWUKIGZsYWdzIGFyZSByZXF1aXJlZCBhdCBsaW5rIHRpbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODQucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4NC5yc3QKaW5kZXggNzEzZDI5NS4uOTU0NzcwMSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4NC5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4NC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDg0CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogVGhlIDptb2R1bGU6YEZpbmRRdGAgbW9kdWxlIGRvZXMgbm90IGV4aXN0IGZvciA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYC4KIAogVGhlIGV4aXN0ZW5jZSBvZiA6bW9kdWxlOmBGaW5kUXRgIG1lYW5zIHRoYXQgZm9yIFF0IHVwc3RyZWFtIHRvIHByb3ZpZGUKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODUucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4NS5yc3QKaW5kZXggZDllYzlhMi4uZDkwYzcyZiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4NS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4NS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDg1CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogYGAkPElOX0xJU1Q6Li4uPmBgIGhhbmRsZXMgZW1wdHkgbGlzdCBpdGVtcy4KIAogSW4gQ01ha2UgMy4xMyBhbmQgbG93ZXIsIHRoZSBgYCQ8SU5fTElTVDouLi4+YGAgZ2VuZXJhdG9yIGV4cHJlc3Npb24gYWx3YXlzCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDg2LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwODYucnN0CmluZGV4IDRhOWU4YjguLjcyNWI1MDIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwODYucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwODYucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA4NgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIDptb2R1bGU6YFVzZVNXSUdgIGhvbm9ycyBgYFNXSUdfTU9EVUxFX05BTUVgYCB2aWEgYGAtbW9kdWxlYGAgZmxhZy4KIAogU3RhcnRpbmcgd2l0aCBDTWFrZSAzLjE0LCA6bW9kdWxlOmBVc2VTV0lHYCBwYXNzZXMgb3B0aW9uCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDg3LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwODcucnN0CmluZGV4IDRjNDViOTkuLjRhNjU1MDYgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwODcucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwODcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA4NwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIDpjb21tYW5kOmBpbnN0YWxsKENPREUpYCBhbmQgOmNvbW1hbmQ6YGluc3RhbGwoU0NSSVBUKWAgc3VwcG9ydCBnZW5lcmF0b3IKIGV4cHJlc3Npb25zLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDg4LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwODgucnN0CmluZGV4IDgyYzA0ZWYuLjE4NDBhNTggMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwODgucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwODgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA4OAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIDptb2R1bGU6YEZpbmRCSVNPTmAgcnVucyBiaXNvbiBpbiA6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUmAKIHdoZW4gZXhlY3V0aW5nLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDg5LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwODkucnN0CmluZGV4IDAyOWRlNTUuLmUzZmM3N2EgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwODkucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwODkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA4OQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIENvbXBpbGVyIGlkIGZvciBJQk0gQ2xhbmctYmFzZWQgWEwgY29tcGlsZXJzIGlzIG5vdyBgYFhMQ2xhbmdgYC4KIAogQ01ha2UgMy4xNSBhbmQgYWJvdmUgcmVjb2duaXplIHRoYXQgSUJNJ3MgQ2xhbmctYmFzZWQgWEwgY29tcGlsZXJzCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDkwLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTAucnN0CmluZGV4IDcyMGMxN2MuLjU4ZGQ5OTkgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwOTAucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTAucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA5MAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIDpjb21tYW5kOmBleHBvcnQoUEFDS0FHRSlgIGRvZXMgbm90IHBvcHVsYXRlIHBhY2thZ2UgcmVnaXN0cnkgYnkgZGVmYXVsdC4KIAogSW4gQ01ha2UgMy4xNCBhbmQgYmVsb3cgdGhlIDpjb21tYW5kOmBleHBvcnQoUEFDS0FHRSlgIGNvbW1hbmQgcG9wdWxhdGVkIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA5MS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDkxLnJzdAppbmRleCAxYTU4NzhhLi5mZmMwYWRlIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDkxLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDkxLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwOTEKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBNU1ZDIHJ1bnRpbWUgbGlicmFyeSBmbGFncyBhcmUgc2VsZWN0ZWQgYnkgYW4gYWJzdHJhY3Rpb24uCiAKIENvbXBpbGVycyB0YXJnZXRpbmcgdGhlIE1TVkMgQUJJIGhhdmUgZmxhZ3MgdG8gc2VsZWN0IHRoZSBNU1ZDIHJ1bnRpbWUgbGlicmFyeS4KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTIucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5Mi5yc3QKaW5kZXggOGQzYTI4OC4uNjZlM2YzZGUgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwOTIucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA5MgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIE1TVkMgd2FybmluZyBmbGFncyBhcmUgbm90IGluIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTYCBieSBkZWZhdWx0LgogCiBXaGVuIHVzaW5nIE1TVkMtbGlrZSBjb21waWxlcnMgaW4gQ01ha2UgMy4xNCBhbmQgYmVsb3csIHdhcm5pbmcgZmxhZ3MKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5My5yc3QKaW5kZXggMGZmYzQ5My4uNGE5OTU1ZiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA5My5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5My5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDkzCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogOm1vZHVsZTpgRmluZEJvb3N0YCByZXBvcnRzIGBgQm9vc3RfVkVSU0lPTmBgIGluIGBgeC55LnpgYCBmb3JtYXQuCiAKIEluIENNYWtlIDMuMTQgYW5kIGJlbG93IHRoZSBtb2R1bGUgd291bGQgcmVwb3J0IHRoZSBCb29zdCB2ZXJzaW9uCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDk0LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTQucnN0CmluZGV4IDgzNmYzMGYuLjFiNTc2NTggMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwOTQucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA5NAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIE1vZHVsZXMgOm1vZHVsZTpgRmluZFB5dGhvbjNgLCA6bW9kdWxlOmBGaW5kUHl0aG9uMmAgYW5kIDptb2R1bGU6YEZpbmRQeXRob25gCiB1c2UgYGBMT0NBVElPTmBgIGZvciBsb29rdXAgc3RyYXRlZ3kuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTUucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5NS5yc3QKaW5kZXggNGM1NmEwNS4uZWJkYmFiNiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA5NS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5NS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDk1CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogYGBSUEFUSGBgIGVudHJpZXMgYXJlIHByb3Blcmx5IGVzY2FwZWQgaW4gdGhlIGludGVybWVkaWFyeSBDTWFrZSBpbnN0YWxsIHNjcmlwdC4KIAogSW4gQ01ha2UgMy4xNSBhbmQgZWFybGllciwgYGBSUEFUSGBgIGVudHJpZXMgc2V0IHZpYQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA5Ni5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDk2LnJzdAppbmRleCA4ZWFmMGY5Li44ZmQ2ZjcyIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDk2LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDk2LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwOTYKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGUgOmNvbW1hbmQ6YHByb2plY3RgIGNvbW1hbmQgcHJlc2VydmVzIGxlYWRpbmcgemVyb3MgaW4gdmVyc2lvbiBjb21wb25lbnRzLgogCiBXaGVuIGEgYGBWRVJTSU9OIDxtYWpvcj5bLjxtaW5vcj5bLjxwYXRjaD5bLjx0d2Vhaz5dXV1dYGAgYXJndW1lbnQgaXMgZ2l2ZW4KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTcucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5Ny5yc3QKaW5kZXggNDg0MGFhNi4uMjI0MDg3NCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA5Ny5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5Ny5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDk3CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogOmNvbW1hbmQ6YEV4dGVybmFsUHJvamVjdF9BZGRgIHdpdGggYGBHSVRfU1VCTU9EVUxFUyAiImBgIGluaXRpYWxpemVzIG5vCiBzdWJtb2R1bGVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDk4LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTgucnN0CmluZGV4IDZkMTQ0M2IuLmU3OTMzODAgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwOTgucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA5OAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIDptb2R1bGU6YEZpbmRGTEVYYCBydW5zIGBgZmxleGBgIGluIGRpcmVjdG9yeQogOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJgIHdoZW4gZXhlY3V0aW5nLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDk5LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTkucnN0CmluZGV4IGM4OTdlN2IuLjBjNjQ5NDkgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwOTkucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA5OQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFRhcmdldCBsaW5rIHByb3BlcnRpZXMgOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19PUFRJT05TYCwKIDpwcm9wX3RndDpgSU5URVJGQUNFX0xJTktfRElSRUNUT1JJRVNgIGFuZCA6cHJvcF90Z3Q6YElOVEVSRkFDRV9MSU5LX0RFUEVORFNgCiBhcmUgbm93IHRyYW5zaXRpdmUgb3ZlciBwcml2YXRlIGRlcGVuZGVuY2llcyBvZiBzdGF0aWMgbGlicmFyaWVzLgpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDEwMC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMTAwLnJzdAppbmRleCBiMjRkMDEzLi43MzBmYTgyIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMTAwLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMTAwLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAxMDAKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBMZXQgOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYCBwcm9jZXNzCiBoZWFkZXIgZmlsZXMgdGhhdCBlbmQgd2l0aCBhIGBgLmhoYGAgZXh0ZW5zaW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMTAxLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAxMDEucnN0CmluZGV4IDk5NDFhY2YuLmYwMmJjY2MgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAxMDEucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDEucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDEwMQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIDpjb21tYW5kOmB0YXJnZXRfY29tcGlsZV9vcHRpb25zYCBub3cgaG9ub3JzIGBgQkVGT1JFYGAga2V5d29yZCBpbiBhbGwgc2NvcGVzLgogCiBJbiBDTWFrZSAzLjE2IGFuZCBiZWxvdyB0aGUgOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX29wdGlvbnNgIGlnbm9yZXMgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMTAyLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAxMDIucnN0CmluZGV4IDk4NTkwMDYuLjc4YjU1ODQgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAxMDIucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDEwMgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFRoZSA6Y29tbWFuZDpgbWFya19hc19hZHZhbmNlZGAgY29tbWFuZCBubyBsb25nZXIgY3JlYXRlcyBhIGNhY2hlIGVudHJ5IGlmIG9uZQogZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDEwMy5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMTAzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY0NGQxCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wb2xpY3kvQ01QMDEwMy5yc3QKQEAgLTAsMCArMSwyNCBAQAorQ01QMDEwMworLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK011bHRpcGxlIGNhbGxzIHRvIDpjb21tYW5kOmBleHBvcnRgIGNvbW1hbmQgd2l0aCBzYW1lIGBgRklMRWBgIHdpdGhvdXQKK2BgQVBQRU5EYGAgaXMgbm8gbG9uZ2VyIGFsbG93ZWQuCisKK0luIENNYWtlIDMuMTcgYW5kIGJlbG93LCBtdWx0aXBsZSBjYWxscyB0byA6Y29tbWFuZDpgZXhwb3J0YCBjb21tYW5kIHdpdGggdGhlCitzYW1lIGBgRklMRWBgIHdpdGhvdXQgYGBBUFBFTkRgYCBhcmUgYWNjZXB0ZWQgc2lsZW50bHkgYnV0IG9ubHkgdGhlIGxhc3QKK29jY3VycmVuY2UgaXMgdGFrZW4gaW50byBhY2NvdW50IGR1cmluZyB0aGUgZ2VuZXJhdGlvbi4KKworVGhlIGBgT0xEYGAgYmVoYXZpb3IgZm9yIHRoaXMgcG9saWN5IGlzIHRvIGlnbm9yZSB0aGUgbXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YKKyA6Y29tbWFuZDpgZXhwb3J0YCBjb21tYW5kIGV4Y2VwdCB0aGUgbGFzdCBvbmUuCisKK1RoZSBgYE5FV2BgIGJlaGF2aW9yIG9mIHRoaXMgcG9saWN5IGlzIHRvIHJhaXNlIGFuIGVycm9yIG9uIHNlY29uZCBjYWxsIHRvCis6Y29tbWFuZDpgZXhwb3J0YCBjb21tYW5kIHdpdGggc2FtZSBgYEZJTEVgYCB3aXRob3V0IGBgQVBQRU5EYGAuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xOC4gIENNYWtlIHZlcnNpb24KK3xyZWxlYXNlfCB3YXJucyB3aGVuIHRoZSBwb2xpY3kgaXMgbm90IHNldCBhbmQgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorVXNlIHRoZSA6Y29tbWFuZDpgY21ha2VfcG9saWN5YCBjb21tYW5kIHRvIHNldCBpdCB0byBgYE9MRGBgIG9yIGBgTkVXYGAKK2V4cGxpY2l0bHkuCisKKy4uIGluY2x1ZGU6OiBERVBSRUNBVEVELnR4dApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDEwNC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMTA0LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzdhMTZlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wb2xpY3kvQ01QMDEwNC5yc3QKQEAgLTAsMCArMSw1OCBAQAorQ01QMDEwNAorLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0luaXRpYWxpemUgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVNgIHdoZW4KKzp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCA8Q01BS0VfPExBTkc+X0NPTVBJTEVSX0lEPmAgaXMgYGBOVklESUFgYC4KK1JhaXNlIGFuIGVycm9yIGlmIDpwcm9wX3RndDpgQ1VEQV9BUkNISVRFQ1RVUkVTYCBpcyBlbXB0eS4KKworOnZhcmlhYmxlOmBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVNgIGludHJvZHVjZWQgaW4gQ01ha2UgMy4xOCBpcyB1c2VkIHRvCitpbml0aWFsaXplIDpwcm9wX3RndDpgQ1VEQV9BUkNISVRFQ1RVUkVTYCwgd2hpY2ggcGFzc2VzIGNvcnJlY3QgY29kZSBnZW5lcmF0aW9uCitmbGFncyB0byB0aGUgQ1VEQSBjb21waWxlci4KKworUHJldmlvdXMgdG8gdGhpcyB1c2VycyBoYWQgdG8gbWFudWFsbHkgc3BlY2lmeSB0aGUgY29kZSBnZW5lcmF0aW9uIGZsYWdzLiBUaGlzCitwb2xpY3kgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggbWFudWFsbHkgc3BlY2lmeWluZyBjb2RlIGdlbmVyYXRpb24KK2ZsYWdzLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgdG8gbm90IGluaXRpYWxpemUKKzp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTYCB3aGVuCis6dmFyaWFibGU6YENNQUtFX0NVREFfQ09NUElMRVJfSUQgPENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRD5gIGlzIGBgTlZJRElBYGAuCitFbXB0eSA6cHJvcF90Z3Q6YENVREFfQVJDSElURUNUVVJFU2AgaXMgYWxsb3dlZC4KKworVGhlIGBgTkVXYGAgYmVoYXZpb3Igb2YgdGhpcyBwb2xpY3kgaXMgdG8gaW5pdGlhbGl6ZQorOnZhcmlhYmxlOmBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVNgIHdoZW4KKzp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCA8Q01BS0VfPExBTkc+X0NPTVBJTEVSX0lEPmAgaXMgYGBOVklESUFgYAorYW5kIHJhaXNlIGFuIGVycm9yIGlmIDpwcm9wX3RndDpgQ1VEQV9BUkNISVRFQ1RVUkVTYCBpcyBlbXB0eSBkdXJpbmcgZ2VuZXJhdGlvbi4KKworSWYgOnByb3BfdGd0OmBDVURBX0FSQ0hJVEVDVFVSRVNgIGlzIHNldCB0byBhIGZhbHNlIHZhbHVlIG5vIGFyY2hpdGVjdHVyZXMKK2ZsYWdzIGFyZSBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLiBUaGlzIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgcGFja2FnZXJzIGFuZAordGhlIHJhcmUgY2FzZXMgd2hlcmUgZnVsbCBjb250cm9sIG92ZXIgdGhlIHBhc3NlZCBmbGFncyBpcyByZXF1aXJlZC4KKworVGhpcyBwb2xpY3kgd2FzIGludHJvZHVjZWQgaW4gQ01ha2UgdmVyc2lvbiAzLjE4LiAgQ01ha2UgdmVyc2lvbgorfHJlbGVhc2V8IHdhcm5zIHdoZW4gdGhlIHBvbGljeSBpcyBub3Qgc2V0IGFuZCB1c2VzIGBgT0xEYGAgYmVoYXZpb3IuCitVc2UgdGhlIDpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYAorZXhwbGljaXRseS4KKworLi4gaW5jbHVkZTo6IERFUFJFQ0FURUQudHh0CisKK0V4YW1wbGVzCiteXl5eXl5eXgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXRfcHJvcGVydHkoVEFSR0VUIHRndCBQUk9QRVJUWSBDVURBX0FSQ0hJVEVDVFVSRVMgMzUgNTAgNzIpCisKK0dlbmVyYXRlcyBjb2RlIGZvciByZWFsIGFuZCB2aXJ0dWFsIGFyY2hpdGVjdHVyZXMgYGAzMGBgLCBgYDUwYGAgYW5kIGBgNzJgYC4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0Z3QgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIDcwLXJlYWwgNzItdmlydHVhbCkKKworR2VuZXJhdGVzIGNvZGUgZm9yIHJlYWwgYXJjaGl0ZWN0dXJlIGBgNzBgYCBhbmQgdmlydHVhbCBhcmNoaXRlY3R1cmUgYGA3MmBgLgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXRfcHJvcGVydHkoVEFSR0VUIHRndCBQUk9QRVJUWSBDVURBX0FSQ0hJVEVDVFVSRVMgT0ZGKQorCitDTWFrZSB3aWxsIG5vdCBwYXNzIGFueSBhcmNoaXRlY3R1cmUgZmxhZ3MgdG8gdGhlIGNvbXBpbGVyLgpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDEwNS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMTA1LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTdhNTlhCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wb2xpY3kvQ01QMDEwNS5yc3QKQEAgLTAsMCArMSwyMSBAQAorQ01QMDEwNQorLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKKzpwcm9wX3RndDpgTElOS19PUFRJT05TYCBhbmQgOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19PUFRJT05TYCB0YXJnZXQKK3Byb3BlcnRpZXMgYXJlIG5vdyB1c2VkIGZvciB0aGUgZGV2aWNlIGxpbmsgc3RlcC4KKworSW4gQ01ha2UgMy4xNyBhbmQgYmVsb3csIGxpbmsgb3B0aW9ucyBhcmUgbm90IHVzZWQgYnkgdGhlIGRldmljZSBsaW5rIHN0ZXAuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBpZ25vcmUgdGhlIGxpbmsgb3B0aW9ucy4KKworVGhlIGBgTkVXYGAgYmVoYXZpb3Igb2YgdGhpcyBwb2xpY3kgaXMgdG8gdXNlIHRoZSBsaW5rIG9wdGlvbnMgZHVyaW5nIHRoZQorZGV2aWNlIGxpbmsgc3RlcC4KKworVGhpcyBwb2xpY3kgd2FzIGludHJvZHVjZWQgaW4gQ01ha2UgdmVyc2lvbiAzLjE3LiAgVXNlIHRoZQorOmNvbW1hbmQ6YGNtYWtlX3BvbGljeWAgY29tbWFuZCB0byBzZXQgaXQgdG8gYGBPTERgYCBvciBgYE5FV2BgIGV4cGxpY2l0bHkuCitVbmxpa2UgbWFueSBwb2xpY2llcywgQ01ha2UgdmVyc2lvbiB8cmVsZWFzZXwgZG9lcyAqbm90KiB3YXJuCit3aGVuIHRoaXMgcG9saWN5IGlzIG5vdCBzZXQgYW5kIHNpbXBseSB1c2VzIGBgT0xEYGAgYmVoYXZpb3IuCisKKy4uIGluY2x1ZGU6OiBERVBSRUNBVEVELnR4dApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDEwNi5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMTA2LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGE2NjM1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wb2xpY3kvQ01QMDEwNi5yc3QKQEAgLTAsMCArMSwyMSBAQAorQ01QMDEwNgorLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1RoZSA6bW9kdWxlOmBEb2N1bWVudGF0aW9uYCBtb2R1bGUgaXMgcmVtb3ZlZC4KKworVGhlIDptb2R1bGU6YERvY3VtZW50YXRpb25gIHdhcyBhZGRlZCBhcyBhIHN1cHBvcnQgbWVjaGFuaXNtIGZvciB0aGUgVlRLCitwcm9qZWN0IGFuZCB3YXMgdHVuZWQgZm9yIHRoYXQgcHJvamVjdC4gSW5zdGVhZCBvZiBDTWFrZSBwcm92aWRpbmcgdGhpcyBtb2R1bGUKK3dpdGggKG5vdyBvbGQpIFZUSyBwYXR0ZXJucyBmb3IgY2FjaGUgdmFyaWFibGVzIGFuZCByZXF1aXJlZCBwYWNrYWdlcywgdGhlCittb2R1bGUgaXMgbm93IGRlcHJlY2F0ZWQgYnkgQ01ha2UgaXRzZWxmLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyBmb3IgOm1vZHVsZTpgRG9jdW1lbnRhdGlvbmAgdG8gYWRkCitjYWNoZSB2YXJpYWJsZXMgYW5kIGZpbmQgVlRLIGRvY3VtZW50YXRpb24gZGVwZW5kZW50IHBhY2thZ2VzLiBUaGUgYGBORVdgYAorYmVoYXZpb3IgaXMgdG8gYWN0IGFzIGFuIGVtcHR5IG1vZHVsZS4KKworVGhpcyBwb2xpY3kgd2FzIGludHJvZHVjZWQgaW4gQ01ha2UgdmVyc2lvbiAzLjE4LiAgQ01ha2UgdmVyc2lvbiB8cmVsZWFzZXwKK3dhcm5zIHdoZW4gdGhlIHBvbGljeSBpcyBub3Qgc2V0IGFuZCB1c2VzIGBgT0xEYGAgYmVoYXZpb3IuIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDcucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwNy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1YWUwNgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDcucnN0CkBAIC0wLDAgKzEsMjEgQEAKK0NNUDAxMDcKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitJdCBpcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYW4gYGBBTElBU2BgIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4KK2Fub3RoZXIgdGFyZ2V0LgorCitJbiBDTWFrZSAzLjE3IGFuZCBiZWxvdywgYW4gYGBBTElBU2BgIHRhcmdldCBjYW4gb3ZlcndyaXRlIHNpbGVudGx5IGFuIGV4aXN0aW5nCit0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgdG8gYWxsb3cgdGFyZ2V0IG92ZXJ3cml0ZS4KKworVGhlIGBgTkVXYGAgYmVoYXZpb3Igb2YgdGhpcyBwb2xpY3kgaXMgdG8gcHJldmVudCB0YXJnZXQgb3ZlcndyaXRpbmcuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDgucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwOC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxMDkxZAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDgucnN0CkBAIC0wLDAgKzEsMjEgQEAKK0NNUDAxMDgKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitBIHRhcmdldCBpcyBub3QgYWxsb3dlZCB0byBsaW5rIHRvIGl0c2VsZiBldmVuIHRocm91Z2ggYW4gYGBBTElBU2BgIHRhcmdldC4KKworSW4gQ01ha2UgMy4xNyBhbmQgYmVsb3csIGEgdGFyZ2V0IGNhbiBsaW5rIHRvIGEgdGFyZ2V0IGFsaWFzZWQgdG8gaXRzZWxmLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgdG8gYWxsb3cgYSB0YXJnZXQgdG8gbGluayB0byBhIHRhcmdldAorYWxpYXNlZCB0byBpdHNlbGYuCisKK1RoZSBgYE5FV2BgIGJlaGF2aW9yIG9mIHRoaXMgcG9saWN5IGlzIHRvIHByZXZlbnQgYSB0YXJnZXQgdG8gbGluayB0byBpdHNlbGYKK3Rocm91Z2ggYW4gYGBBTElBU2BgIHRhcmdldC4KKworVGhpcyBwb2xpY3kgd2FzIGludHJvZHVjZWQgaW4gQ01ha2UgdmVyc2lvbiAzLjE3LiAgVXNlIHRoZQorOmNvbW1hbmQ6YGNtYWtlX3BvbGljeWAgY29tbWFuZCB0byBzZXQgaXQgdG8gYGBPTERgYCBvciBgYE5FV2BgIGV4cGxpY2l0bHkuCitVbmxpa2UgbWFueSBwb2xpY2llcywgQ01ha2UgdmVyc2lvbiB8cmVsZWFzZXwgZG9lcyAqbm90KiB3YXJuCit3aGVuIHRoaXMgcG9saWN5IGlzIG5vdCBzZXQgYW5kIHNpbXBseSB1c2VzIGBgT0xEYGAgYmVoYXZpb3IuCisKKy4uIGluY2x1ZGU6OiBERVBSRUNBVEVELnR4dApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDEwOS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMTA5LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODYyODdmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wb2xpY3kvQ01QMDEwOS5yc3QKQEAgLTAsMCArMSwyNCBAQAorQ01QMDEwOQorLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE5CisKKzpjb21tYW5kOmBmaW5kX3Byb2dyYW1gIHJlcXVpcmVzIHBlcm1pc3Npb24gdG8gZXhlY3V0ZSBidXQgbm90IHRvIHJlYWQuCisKK0luIENNYWtlIDMuMTggYW5kIGJlbG93LCB0aGUgOmNvbW1hbmQ6YGZpbmRfcHJvZ3JhbWAgY29tbWFuZCBvbiBVTklYCit3b3VsZCBmaW5kIGZpbGVzIHRoYXQgYXJlIHJlYWRhYmxlIHdpdGhvdXQgcmVxdWlyaW5nIGV4ZWN1dGUgcGVybWlzc2lvbiwKK2FuZCB3b3VsZCBub3QgZmluZCBmaWxlcyB0aGF0IGFyZSBleGVjdXRhYmxlIHdpdGhvdXQgcmVhZCBwZXJtaXNzaW9uLgorSW4gQ01ha2UgMy4xOSBhbmQgYWJvdmUsIGBgZmluZF9wcm9ncmFtYGAgbm93IHByZWZlcnMgdG8gcmVxdWlyZSBleGVjdXRlCitwZXJtaXNzaW9uIGJ1dCBub3QgcmVhZCBwZXJtaXNzaW9uLiAgVGhpcyBwb2xpY3kgcHJvdmlkZXMgY29tcGF0aWJpbGl0eQord2l0aCBwcm9qZWN0cyB0aGF0IGhhdmUgbm90IGJlZW4gdXBkYXRlZCB0byBleHBlY3QgdGhlIG5ldyBiZWhhdmlvci4KKworVGhlIGBgT0xEYGAgYmVoYXZpb3IgZm9yIHRoaXMgcG9saWN5IGlzIGZvciBgYGZpbmRfcHJvZ3JhbWBgIHRvIHJlcXVpcmUKK3JlYWQgcGVybWlzc2lvbiBidXQgbm90IGV4ZWN1dGUgcGVybWlzc2lvbi4KK1RoZSBgYE5FV2BgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyBmb3IgYGBmaW5kX3Byb2dyYW1gYCB0byByZXF1aXJlCitleGVjdXRlIHBlcm1pc3Npb24gYnV0IG5vdCByZWFkIHBlcm1pc3Npb24uCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xOS4gIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8Cit3YXJucyB3aGVuIHRoZSBwb2xpY3kgaXMgbm90IHNldCBhbmQgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLiAgVXNlIHRoZQorOmNvbW1hbmQ6YGNtYWtlX3BvbGljeWAgY29tbWFuZCB0byBzZXQgaXQgdG8gYGBPTERgYCBvciBgYE5FV2BgIGV4cGxpY2l0bHkuCisKKy4uIGluY2x1ZGU6OiBERVBSRUNBVEVELnR4dApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2Rpci9BRERJVElPTkFMX0NMRUFOX0ZJTEVTLnJzdCBiL0hlbHAvcHJvcF9kaXIvQURESVRJT05BTF9DTEVBTl9GSUxFUy5yc3QKaW5kZXggMDUxZDIyYS4uNjA5N2QxNCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2Rpci9BRERJVElPTkFMX0NMRUFOX0ZJTEVTLnJzdAorKysgYi9IZWxwL3Byb3BfZGlyL0FERElUSU9OQUxfQ0xFQU5fRklMRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQURESVRJT05BTF9DTEVBTl9GSUxFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIEEgOnJlZjpgOy1saXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRoYXQgd2lsbCBiZQogcmVtb3ZlZCBhcyBhIHBhcnQgb2YgdGhlIGdsb2JhbCBgYGNsZWFuYGAgdGFyZ2V0LiAgSXQgaXMgdXNlZnVsIGZvcgogc3BlY2lmeWluZyBnZW5lcmF0ZWQgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdGhhdCBhcmUgdXNlZCBieSBtdWx0aXBsZSB0YXJnZXRzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZGlyL0JJTkFSWV9ESVIucnN0IGIvSGVscC9wcm9wX2Rpci9CSU5BUllfRElSLnJzdAppbmRleCA1OTdjNzlhLi5mY2Y5ZDE3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZGlyL0JJTkFSWV9ESVIucnN0CisrKyBiL0hlbHAvcHJvcF9kaXIvQklOQVJZX0RJUi5yc3QKQEAgLTEsNSArMSw3IEBACiBCSU5BUllfRElSCiAtLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGlzIHJlYWQtb25seSBkaXJlY3RvcnkgcHJvcGVydHkgcmVwb3J0cyBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBiaW5hcnkKIGRpcmVjdG9yeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzb3VyY2Ugb24gd2hpY2ggaXQgaXMgcmVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9kaXIvQlVJTERTWVNURU1fVEFSR0VUUy5yc3QgYi9IZWxwL3Byb3BfZGlyL0JVSUxEU1lTVEVNX1RBUkdFVFMucnN0CmluZGV4IDA0YmI1NmUuLjVjNTg5M2QgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvQlVJTERTWVNURU1fVEFSR0VUUy5yc3QKKysrIGIvSGVscC9wcm9wX2Rpci9CVUlMRFNZU1RFTV9UQVJHRVRTLnJzdApAQCAtMSw2ICsxLDggQEAKIEJVSUxEU1lTVEVNX1RBUkdFVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRoaXMgcmVhZC1vbmx5IGRpcmVjdG9yeSBwcm9wZXJ0eSBjb250YWlucyBhCiA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YgYnVpbGRzeXN0ZW0gdGFyZ2V0cyBhZGRlZCBpbiB0aGUKIGRpcmVjdG9yeSBieSBjYWxscyB0byB0aGUgOmNvbW1hbmQ6YGFkZF9saWJyYXJ5YCwgOmNvbW1hbmQ6YGFkZF9leGVjdXRhYmxlYCwKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9kaXIvTEFCRUxTLnJzdCBiL0hlbHAvcHJvcF9kaXIvTEFCRUxTLnJzdAppbmRleCBkZTI3ZDkwLi5iZjE0MzY4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZGlyL0xBQkVMUy5yc3QKKysrIGIvSGVscC9wcm9wX2Rpci9MQUJFTFMucnN0CkBAIC0xLDYgKzEsOCBAQAogTEFCRUxTCiAtLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBTcGVjaWZ5IGEgbGlzdCBvZiB0ZXh0IGxhYmVscyBhc3NvY2lhdGVkIHdpdGggYSBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMKIHN1YmRpcmVjdG9yaWVzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgOnByb3BfdGd0OmBMQUJFTFNgIHRhcmdldAogcHJvcGVydHkgYW5kIHRoZSA6cHJvcF90ZXN0OmBMQUJFTFNgIHRlc3QgcHJvcGVydHkgb24gYWxsIHRhcmdldHMgYW5kIHRlc3RzIGluCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZGlyL0xJTktfT1BUSU9OUy5yc3QgYi9IZWxwL3Byb3BfZGlyL0xJTktfT1BUSU9OUy5yc3QKaW5kZXggNTRhYzZkZC4uM2E1YzcyZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2Rpci9MSU5LX09QVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF9kaXIvTElOS19PUFRJT05TLnJzdApAQCAtMSw4ICsxLDEwIEBACiBMSU5LX09QVElPTlMKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIExpc3Qgb2Ygb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBsaW5rIHN0ZXAgb2Ygc2hhcmVkIGxpYnJhcnksIG1vZHVsZQotYW5kIGV4ZWN1dGFibGUgdGFyZ2V0cy4KK2FuZCBleGVjdXRhYmxlIHRhcmdldHMgYXMgd2VsbCBhcyB0aGUgZGV2aWNlIGxpbmsgc3RlcC4KIAogVGhpcyBwcm9wZXJ0eSBob2xkcyBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZiBvcHRpb25zCiBnaXZlbiBzbyBmYXIgdG8gdGhlIDpjb21tYW5kOmBhZGRfbGlua19vcHRpb25zYCBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2Rpci9TT1VSQ0VfRElSLnJzdCBiL0hlbHAvcHJvcF9kaXIvU09VUkNFX0RJUi5yc3QKaW5kZXggYWM5OGMzYi4uZDczNzA3ZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2Rpci9TT1VSQ0VfRElSLnJzdAorKysgYi9IZWxwL3Byb3BfZGlyL1NPVVJDRV9ESVIucnN0CkBAIC0xLDUgKzEsNyBAQAogU09VUkNFX0RJUgogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVGhpcyByZWFkLW9ubHkgZGlyZWN0b3J5IHByb3BlcnR5IHJlcG9ydHMgYWJzb2x1dGUgcGF0aCB0byB0aGUgc291cmNlCiBkaXJlY3Rvcnkgb24gd2hpY2ggaXQgaXMgcmVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9kaXIvU1VCRElSRUNUT1JJRVMucnN0IGIvSGVscC9wcm9wX2Rpci9TVUJESVJFQ1RPUklFUy5yc3QKaW5kZXggNmEwYWM4MC4uNzFlYTQ5NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2Rpci9TVUJESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC9wcm9wX2Rpci9TVUJESVJFQ1RPUklFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBTVUJESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRoaXMgcmVhZC1vbmx5IGRpcmVjdG9yeSBwcm9wZXJ0eSBjb250YWlucyBhCiA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2Ygc3ViZGlyZWN0b3JpZXMgcHJvY2Vzc2VkIHNvIGZhciBieQogdGhlIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBvciA6Y29tbWFuZDpgc3ViZGlyc2AgY29tbWFuZHMuICBFYWNoIGVudHJ5IGlzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZGlyL1RFU1RTLnJzdCBiL0hlbHAvcHJvcF9kaXIvVEVTVFMucnN0CmluZGV4IDFjOWY2ZTUuLjI5NGJlMTcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvVEVTVFMucnN0CisrKyBiL0hlbHAvcHJvcF9kaXIvVEVTVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogVEVTVFMKIC0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogTGlzdCBvZiB0ZXN0cy4KIAogVGhpcyByZWFkLW9ubHkgcHJvcGVydHkgaG9sZHMgYQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2Rpci9URVNUX0lOQ0xVREVfRklMRVMucnN0IGIvSGVscC9wcm9wX2Rpci9URVNUX0lOQ0xVREVfRklMRVMucnN0CmluZGV4IGMzZTQ2MDIuLmY5YTY2ZjQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvVEVTVF9JTkNMVURFX0ZJTEVTLnJzdAorKysgYi9IZWxwL3Byb3BfZGlyL1RFU1RfSU5DTFVERV9GSUxFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBURVNUX0lOQ0xVREVfRklMRVMKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIEEgbGlzdCBvZiBjbWFrZSBmaWxlcyB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiBjdGVzdCBpcyBydW4uCiAKIElmIHlvdSBzcGVjaWZ5IGBgVEVTVF9JTkNMVURFX0ZJTEVTYGAsIHRob3NlIGZpbGVzIHdpbGwgYmUgaW5jbHVkZWQgYW5kCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZGlyL1ZTX1NUQVJUVVBfUFJPSkVDVC5yc3QgYi9IZWxwL3Byb3BfZGlyL1ZTX1NUQVJUVVBfUFJPSkVDVC5yc3QKaW5kZXggMjY4MGRmYS4uOGEwYzNjOCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2Rpci9WU19TVEFSVFVQX1BST0pFQ1QucnN0CisrKyBiL0hlbHAvcHJvcF9kaXIvVlNfU1RBUlRVUF9QUk9KRUNULnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX1NUQVJUVVBfUFJPSkVDVAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBTcGVjaWZ5IHRoZSBkZWZhdWx0IHN0YXJ0dXAgcHJvamVjdCBpbiBhIFZpc3VhbCBTdHVkaW8gc29sdXRpb24uCiAKIFRoZSA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGNyZWF0ZSBhIGBgLnNsbmBgIGZpbGUgZm9yIGVhY2ggZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL0FVVE9HRU5fU09VUkNFX0dST1VQLnJzdCBiL0hlbHAvcHJvcF9nYmwvQVVUT0dFTl9TT1VSQ0VfR1JPVVAucnN0CmluZGV4IGQyOTRlYjEuLjJlMzIzMjAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvQVVUT0dFTl9TT1VSQ0VfR1JPVVAucnN0CisrKyBiL0hlbHAvcHJvcF9nYmwvQVVUT0dFTl9TT1VSQ0VfR1JPVVAucnN0CkBAIC0xLDYgKzEsOCBAQAogQVVUT0dFTl9TT1VSQ0VfR1JPVVAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBOYW1lIG9mIHRoZSAgOmNvbW1hbmQ6YHNvdXJjZV9ncm91cGAgZm9yIDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kCiA6cHJvcF90Z3Q6YEFVVE9SQ0NgIGdlbmVyYXRlZCBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9BVVRPTU9DX1NPVVJDRV9HUk9VUC5yc3QgYi9IZWxwL3Byb3BfZ2JsL0FVVE9NT0NfU09VUkNFX0dST1VQLnJzdAppbmRleCAyNDU1ZGM3Li5hMjY2ZmRlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZ2JsL0FVVE9NT0NfU09VUkNFX0dST1VQLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0FVVE9NT0NfU09VUkNFX0dST1VQLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9NT0NfU09VUkNFX0dST1VQCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogTmFtZSBvZiB0aGUgIDpjb21tYW5kOmBzb3VyY2VfZ3JvdXBgIGZvciA6cHJvcF90Z3Q6YEFVVE9NT0NgIGdlbmVyYXRlZCBmaWxlcy4KIAogV2hlbiBzZXQgdGhpcyBpcyB1c2VkIGluc3RlYWQgb2YgOnByb3BfZ2JsOmBBVVRPR0VOX1NPVVJDRV9HUk9VUGAgZm9yCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL0FVVE9SQ0NfU09VUkNFX0dST1VQLnJzdCBiL0hlbHAvcHJvcF9nYmwvQVVUT1JDQ19TT1VSQ0VfR1JPVVAucnN0CmluZGV4IDY1ZWE5NWIuLjU0ZWJhYmIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvQVVUT1JDQ19TT1VSQ0VfR1JPVVAucnN0CisrKyBiL0hlbHAvcHJvcF9nYmwvQVVUT1JDQ19TT1VSQ0VfR1JPVVAucnN0CkBAIC0xLDYgKzEsOCBAQAogQVVUT1JDQ19TT1VSQ0VfR1JPVVAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBOYW1lIG9mIHRoZSAgOmNvbW1hbmQ6YHNvdXJjZV9ncm91cGAgZm9yIDpwcm9wX3RndDpgQVVUT1JDQ2AgZ2VuZXJhdGVkIGZpbGVzLgogCiBXaGVuIHNldCB0aGlzIGlzIHVzZWQgaW5zdGVhZCBvZiA6cHJvcF9nYmw6YEFVVE9HRU5fU09VUkNFX0dST1VQYCBmb3IKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ1VEQV9LTk9XTl9GRUFUVVJFUy5yc3QgYi9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NVREFfS05PV05fRkVBVFVSRVMucnN0CmluZGV4IDQ0ZTM3ZmUuLmU4ZTMxNDggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ1VEQV9LTk9XTl9GRUFUVVJFUy5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9DTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NVREFfS05PV05fRkVBVFVSRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBMaXN0IG9mIENVREEgZmVhdHVyZXMga25vd24gdG8gdGhpcyB2ZXJzaW9uIG9mIENNYWtlLgogCiBUaGUgZmVhdHVyZXMgbGlzdGVkIGluIHRoaXMgZ2xvYmFsIHByb3BlcnR5IG1heSBiZSBrbm93biB0byBiZSBhdmFpbGFibGUgdG8gdGhlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NYWF9LTk9XTl9GRUFUVVJFUy5yc3QgYi9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NYWF9LTk9XTl9GRUFUVVJFUy5yc3QKaW5kZXggYjkyMWM2Yi4uOWI1MzI4MiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9DTUFLRV9DWFhfS05PV05fRkVBVFVSRVMucnN0CisrKyBiL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ1hYX0tOT1dOX0ZFQVRVUkVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NYWF9LTk9XTl9GRUFUVVJFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBMaXN0IG9mIEMrKyBmZWF0dXJlcyBrbm93biB0byB0aGlzIHZlcnNpb24gb2YgQ01ha2UuCiAKIFRoZSBmZWF0dXJlcyBsaXN0ZWQgaW4gdGhpcyBnbG9iYWwgcHJvcGVydHkgbWF5IGJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSB0byB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ19LTk9XTl9GRUFUVVJFUy5yc3QgYi9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NfS05PV05fRkVBVFVSRVMucnN0CmluZGV4IGU1Zjg5NmUuLjcxNjYzODEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ19LTk9XTl9GRUFUVVJFUy5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9DTUFLRV9DX0tOT1dOX0ZFQVRVUkVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NfS05PV05fRkVBVFVSRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIExpc3Qgb2YgQyBmZWF0dXJlcyBrbm93biB0byB0aGlzIHZlcnNpb24gb2YgQ01ha2UuCiAKIFRoZSBmZWF0dXJlcyBsaXN0ZWQgaW4gdGhpcyBnbG9iYWwgcHJvcGVydHkgbWF5IGJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSB0byB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvQ01BS0VfUk9MRS5yc3QgYi9IZWxwL3Byb3BfZ2JsL0NNQUtFX1JPTEUucnN0CmluZGV4IDI3NTEyZmEuLjNmNDQ5MmYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvQ01BS0VfUk9MRS5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9DTUFLRV9ST0xFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1JPTEUKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBUZWxscyB3aGF0IG1vZGUgdGhlIGN1cnJlbnQgcnVubmluZyBzY3JpcHQgaXMgaW4uIENvdWxkIGJlIG9uZSBvZiBzZXZlcmFsCiB2YWx1ZXM6CiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvRUNMSVBTRV9FWFRSQV9DUFJPSkVDVF9DT05URU5UUy5yc3QgYi9IZWxwL3Byb3BfZ2JsL0VDTElQU0VfRVhUUkFfQ1BST0pFQ1RfQ09OVEVOVFMucnN0CmluZGV4IDUwYzQxYTkuLjJmMTEwYTcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvRUNMSVBTRV9FWFRSQV9DUFJPSkVDVF9DT05URU5UUy5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9FQ0xJUFNFX0VYVFJBX0NQUk9KRUNUX0NPTlRFTlRTLnJzdApAQCAtMSw2ICsxLDggQEAKIEVDTElQU0VfRVhUUkFfQ1BST0pFQ1RfQ09OVEVOVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBBZGRpdGlvbmFsIGNvbnRlbnRzIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGdlbmVyYXRlZCBFY2xpcHNlIGNwcm9qZWN0IGZpbGUuCiAKIFRoZSBjcHJvamVjdCBmaWxlIGRlZmluZXMgdGhlIENEVCBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gU29tZSB0aGlyZCBwYXJ0eSBJREUncwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9GSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTLnJzdCBiL0hlbHAvcHJvcF9nYmwvRklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUy5yc3QKaW5kZXggODM5NjAyNi4uZjZjYWQ2NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9GSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMucnN0CkBAIC0xLDYgKzEsOCBAQAogRklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hldGhlciB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCBzaG91bGQgYXV0b21hdGljYWxseSBzZWFyY2gKIGBgbGliMzJgYCBkaXJlY3Rvcmllcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9GSU5EX0xJQlJBUllfVVNFX0xJQlgzMl9QQVRIUy5yc3QgYi9IZWxwL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTLnJzdAppbmRleCBiODdiMDliLi44NTFmODU5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTLnJzdApAQCAtMSw2ICsxLDggQEAKIEZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogV2hldGhlciB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCBzaG91bGQgYXV0b21hdGljYWxseSBzZWFyY2gKIGBgbGlieDMyYGAgZGlyZWN0b3JpZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRy5yc3QgYi9IZWxwL3Byb3BfZ2JsL0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcucnN0CmluZGV4IGI4ZWM4YTYuLjZmMWE5ZTEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRy5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFJlYWQtb25seSBwcm9wZXJ0eSB0aGF0IGlzIHRydWUgb24gbXVsdGktY29uZmlndXJhdGlvbiBnZW5lcmF0b3JzLgogCiBUcnVlIHdoZW4gdXNpbmcgYSBtdWx0aS1jb25maWd1cmF0aW9uIGdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9UQVJHRVRfTUVTU0FHRVMucnN0IGIvSGVscC9wcm9wX2dibC9UQVJHRVRfTUVTU0FHRVMucnN0CmluZGV4IDI3NWIwNzQuLmJiOTE3NzIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvVEFSR0VUX01FU1NBR0VTLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL1RBUkdFVF9NRVNTQUdFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBUQVJHRVRfTUVTU0FHRVMKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU3BlY2lmeSB3aGV0aGVyIHRvIHJlcG9ydCB0aGUgY29tcGxldGlvbiBvZiBlYWNoIHRhcmdldC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hldGhlciA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYCBzaG91bGQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvWENPREVfRU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRS5yc3QgYi9IZWxwL3Byb3BfZ2JsL1hDT0RFX0VNSVRfRUZGRUNUSVZFX1BMQVRGT1JNX05BTUUucnN0CmluZGV4IDk1MDA0NDMuLjM5MmI3MDQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvWENPREVfRU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRS5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9YQ09ERV9FTUlUX0VGRkVDVElWRV9QTEFURk9STV9OQU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX0VNSVRfRUZGRUNUSVZFX1BMQVRGT1JNX05BTUUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIENvbnRyb2wgZW1pc3Npb24gb2YgYGBFRkZFQ1RJVkVfUExBVEZPUk1fTkFNRWBgIGJ5IHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAKIGdlbmVyYXRvci4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfREVTS1RPUF9TSE9SVENVVFMucnN0IGIvSGVscC9wcm9wX2luc3QvQ1BBQ0tfREVTS1RPUF9TSE9SVENVVFMucnN0CmluZGV4IDcyOWFiNjAuLjU1ZTlhMjAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9pbnN0L0NQQUNLX0RFU0tUT1BfU0hPUlRDVVRTLnJzdAorKysgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19ERVNLVE9QX1NIT1JUQ1VUUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDUEFDS19ERVNLVE9QX1NIT1JUQ1VUUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFNwZWNpZXMgYSBsaXN0IG9mIHNob3J0Y3V0IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQgb24gdGhlIGBEZXNrdG9wYAogZm9yIHRoaXMgZmlsZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfTkVWRVJfT1ZFUldSSVRFLnJzdCBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX05FVkVSX09WRVJXUklURS5yc3QKaW5kZXggNDc4OWUyNS4uMTJlZWY5ZSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfTkVWRVJfT1ZFUldSSVRFLnJzdAorKysgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19ORVZFUl9PVkVSV1JJVEUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1BBQ0tfTkVWRVJfT1ZFUldSSVRFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFJlcXVlc3QgdGhhdCB0aGlzIGZpbGUgbm90IGJlIG92ZXJ3cml0dGVuIG9uIGluc3RhbGwgb3IgcmVpbnN0YWxsLgogCiBUaGUgcHJvcGVydHkgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBXSVggR2VuZXJhdG9yYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1BFUk1BTkVOVC5yc3QgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19QRVJNQU5FTlQucnN0CmluZGV4IDk4NWRlMGQuLmU4OWM1NTIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1BFUk1BTkVOVC5yc3QKKysrIGIvSGVscC9wcm9wX2luc3QvQ1BBQ0tfUEVSTUFORU5ULnJzdApAQCAtMSw2ICsxLDggQEAKIENQQUNLX1BFUk1BTkVOVAogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBSZXF1ZXN0IHRoYXQgdGhpcyBmaWxlIG5vdCBiZSByZW1vdmVkIG9uIHVuaW5zdGFsbC4KIAogVGhlIHByb3BlcnR5IGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgOmNwYWNrX2dlbjpgQ1BhY2sgV0lYIEdlbmVyYXRvcmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19TVEFSVFVQX1NIT1JUQ1VUUy5yc3QgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19TVEFSVFVQX1NIT1JUQ1VUUy5yc3QKaW5kZXggZDkyMDhiOS4uZTg5NmFjZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfU1RBUlRVUF9TSE9SVENVVFMucnN0CisrKyBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1NUQVJUVVBfU0hPUlRDVVRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENQQUNLX1NUQVJUVVBfU0hPUlRDVVRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogU3BlY2llcyBhIGxpc3Qgb2Ygc2hvcnRjdXQgbmFtZXMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBpbiB0aGUgYFN0YXJ0dXBgIGZvbGRlcgogZm9yIHRoaXMgZmlsZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfU1RBUlRfTUVOVV9TSE9SVENVVFMucnN0IGIvSGVscC9wcm9wX2luc3QvQ1BBQ0tfU1RBUlRfTUVOVV9TSE9SVENVVFMucnN0CmluZGV4IDA5MjMzNGEuLmZiODgwN2YgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1NUQVJUX01FTlVfU0hPUlRDVVRTLnJzdAorKysgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19TVEFSVF9NRU5VX1NIT1JUQ1VUUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDUEFDS19TVEFSVF9NRU5VX1NIT1JUQ1VUUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFNwZWNpZXMgYSBsaXN0IG9mIHNob3J0Y3V0IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIGBTdGFydCBNZW51YAogZm9yIHRoaXMgZmlsZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfV0lYX0FDTC5yc3QgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19XSVhfQUNMLnJzdAppbmRleCBjODhmNDI2Li44YjRmYjVjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19XSVhfQUNMLnJzdAorKysgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19XSVhfQUNMLnJzdApAQCAtMSw2ICsxLDggQEAKIENQQUNLX1dJWF9BQ0wKIC0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZmllcyBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGZpbGVzIG9yIGRpcmVjdG9yaWVzCiBpbnN0YWxsZWQgYnkgYSBXaVggaW5zdGFsbGVyLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvQ09NUElMRV9PUFRJT05TLnJzdCBiL0hlbHAvcHJvcF9zZi9DT01QSUxFX09QVElPTlMucnN0CmluZGV4IDdlNDgyNzEuLmE2OTRjM2UgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9DT01QSUxFX09QVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9DT01QSUxFX09QVElPTlMucnN0CkBAIC0xLDEzICsxLDEzIEBACiBDT01QSUxFX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIExpc3Qgb2YgYWRkaXRpb25hbCBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyLgogCiBUaGlzIHByb3BlcnR5IGhvbGRzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIG9wdGlvbnMKIGFuZCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIGNvbXBpbGUgZmxhZ3Mgd2hlbiB0aGlzCi1zb3VyY2UgZmlsZSBidWlsZHMuICBVc2UgOnByb3Bfc2Y6YENPTVBJTEVfREVGSU5JVElPTlNgIHRvIHBhc3MKLWFkZGl0aW9uYWwgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIGFuZCA6cHJvcF9zZjpgSU5DTFVERV9ESVJFQ1RPUklFU2AgdG8gcGFzcwotYWRkaXRpb25hbCBpbmNsdWRlIGRpcmVjdG9yaWVzLgorc291cmNlIGZpbGUgYnVpbGRzLgogCiBDb250ZW50cyBvZiBgYENPTVBJTEVfT1BUSU9OU2BgIG1heSB1c2UgImdlbmVyYXRvciBleHByZXNzaW9ucyIgd2l0aCB0aGUKIHN5bnRheCBgYCQ8Li4uPmBgLiAgU2VlIHRoZSA6bWFudWFsOmBjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNylgIG1hbnVhbApAQCAtMTYsNiArMTYsMTkgQEAKIHRoYXQgZGVwZW5kIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFyZSBub3QgYWxsb3dlZCB3aXRoIHRoYXQKIGdlbmVyYXRvci4KIAotLi4gbm90ZTo6CitVc2FnZSBleGFtcGxlOgogCi0gIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIHByZWZlcnJlZCBvdmVyIHRoZSA6cHJvcF9zZjpgQ09NUElMRV9GTEFHU2AgcHJvcGVydHkuCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoZm9vLmNwcCBQUk9QRVJUSUVTIENPTVBJTEVfT1BUSU9OUyAiLVduby11bnVzZWQtcGFyYW1ldGVyOy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplciIpCisKK1JlbGF0ZWQgcHJvcGVydGllczoKKworKiBQcmVmZXIgdGhpcyBwcm9wZXJ0eSBvdmVyIDpwcm9wX3NmOmBDT01QSUxFX0ZMQUdTYC4KKyogVXNlIDpwcm9wX3NmOmBDT01QSUxFX0RFRklOSVRJT05TYCB0byBwYXNzIGFkZGl0aW9uYWwgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLgorKiBVc2UgOnByb3Bfc2Y6YElOQ0xVREVfRElSRUNUT1JJRVNgIHRvIHBhc3MgYWRkaXRpb25hbCBpbmNsdWRlIGRpcmVjdG9yaWVzLgorCitSZWxhdGVkIGNvbW1hbmRzOgorCisqIDpjb21tYW5kOmBhZGRfY29tcGlsZV9vcHRpb25zYCBmb3IgZGlyZWN0b3J5LXdpZGUgc2V0dGluZ3MKKyogOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX29wdGlvbnNgIGZvciB0YXJnZXQtc3BlY2lmaWMgc2V0dGluZ3MKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9Gb3J0cmFuX0ZPUk1BVC5yc3QgYi9IZWxwL3Byb3Bfc2YvRm9ydHJhbl9GT1JNQVQucnN0CmluZGV4IDFjYmJmNDguLmVmMzM5MjYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9Gb3J0cmFuX0ZPUk1BVC5yc3QKKysrIGIvSGVscC9wcm9wX3NmL0ZvcnRyYW5fRk9STUFULnJzdApAQCAtNCw3ICs0LDkgQEAKIFNldCB0byBgYEZJWEVEYGAgb3IgYGBGUkVFYGAgdG8gaW5kaWNhdGUgdGhlIEZvcnRyYW4gc291cmNlIGxheW91dC4KIAogVGhpcyBwcm9wZXJ0eSB0ZWxscyBDTWFrZSB3aGV0aGVyIGEgZ2l2ZW4gRm9ydHJhbiBzb3VyY2UgZmlsZSB1c2VzCi1maXhlZC1mb3JtYXQgb3IgZnJlZS1mb3JtYXQuICBDTWFrZSB3aWxsIHBhc3MgdGhlIGNvcnJlc3BvbmRpbmcgZm9ybWF0Ci1mbGFnIHRvIHRoZSBjb21waWxlci4gIENvbnNpZGVyIHVzaW5nIHRoZSB0YXJnZXQtd2lkZQotOnByb3BfdGd0OmBGb3J0cmFuX0ZPUk1BVGAgcHJvcGVydHkgaWYgYWxsIHNvdXJjZSBmaWxlcyBpbiBhIHRhcmdldAotc2hhcmUgdGhlIHNhbWUgZm9ybWF0LgorZml4ZWQtZm9ybWF0IG9yIGZyZWUtZm9ybWF0LiAgQ01ha2Ugd2lsbCBwYXNzIHRoZSBjb3JyZXNwb25kaW5nIGZvcm1hdCBmbGFnCit0byB0aGUgY29tcGlsZXIuICBDb25zaWRlciB1c2luZyB0aGUgdGFyZ2V0LXdpZGUgOnByb3BfdGd0OmBGb3J0cmFuX0ZPUk1BVGAKK3Byb3BlcnR5IGlmIGFsbCBzb3VyY2UgZmlsZXMgaW4gYSB0YXJnZXQgc2hhcmUgdGhlIHNhbWUgZm9ybWF0LgorCisuLiBub3RlOjogRm9yIHNvbWUgY29tcGlsZXJzLCBgYE5BR2BgLCBgYFBHSWBgIGFuZCBgYFNvbGFyaXMgU3R1ZGlvYGAsCisgICAgICAgICAgc2V0dGluZyB0aGlzIHRvIGBgT0ZGYGAgd2lsbCBoYXZlIG5vIGVmZmVjdC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9Gb3J0cmFuX1BSRVBST0NFU1MucnN0IGIvSGVscC9wcm9wX3NmL0ZvcnRyYW5fUFJFUFJPQ0VTUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4YTk3YgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF9zZi9Gb3J0cmFuX1BSRVBST0NFU1MucnN0CkBAIC0wLDAgKzEsMTkgQEAKK0ZvcnRyYW5fUFJFUFJPQ0VTUworLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworQ29udHJvbCB3aGV0aGVyIHRoZSBGb3J0cmFuIHNvdXJjZSBmaWxlIHNob3VsZCBiZSB1bmNvbmRpdGlvbmFsbHkgcHJlcHJvY2Vzc2VkLgorCitJZiB1bnNldCBvciBlbXB0eSwgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZpbGUKK3Nob3VsZCBiZSBwcmVwcm9jZXNzZWQuIElmIGV4cGxpY2l0bHkgc2V0IHRvIGBgT0ZGYGAgdGhlbiB0aGUgZmlsZQorZG9lcyBub3QgbmVlZCB0byBiZSBwcmVwcm9jZXNzZWQuIElmIGV4cGxpY2l0bHkgc2V0IHRvIGBgT05gYCwgdGhlbgordGhlIGZpbGUgZG9lcyBuZWVkIHRvIGJlIHByZXByb2Nlc3NlZCBhcyBwYXJ0IG9mIHRoZSBjb21waWxhdGlvbiBzdGVwLgorCitXaGVuIHVzaW5nIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yLCBhbGwgc291cmNlIGZpbGVzIGFyZQorZmlyc3QgcHJlcHJvY2Vzc2VkIGluIG9yZGVyIHRvIGdlbmVyYXRlIG1vZHVsZSBkZXBlbmRlbmN5CitpbmZvcm1hdGlvbi4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIGBgT0ZGYGAgd2lsbCBtYWtlIGBgTmluamFgYAorc2tpcCB0aGlzIHN0ZXAuCisKK0NvbnNpZGVyIHVzaW5nIHRoZSB0YXJnZXQtd2lkZSA6cHJvcF90Z3Q6YEZvcnRyYW5fUFJFUFJPQ0VTU2AgcHJvcGVydHkKK2lmIGFsbCBzb3VyY2UgZmlsZXMgaW4gYSB0YXJnZXQgbmVlZCB0byBiZSBwcmVwcm9jZXNzZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3Byb3Bfc2YvSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QKaW5kZXggMjNkZTcwZS4uODlmZmQxNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL0lOQ0xVREVfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOQ0xVREVfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBMaXN0IG9mIHByZXByb2Nlc3NvciBpbmNsdWRlIGZpbGUgc2VhcmNoIGRpcmVjdG9yaWVzLgogCiBUaGlzIHByb3BlcnR5IGhvbGRzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIHBhdGhzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvT0JKRUNUX09VVFBVVFMucnN0IGIvSGVscC9wcm9wX3NmL09CSkVDVF9PVVRQVVRTLnJzdAppbmRleCBlN2U4ODBiLi4zZTc5OWVkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvT0JKRUNUX09VVFBVVFMucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9PQkpFQ1RfT1VUUFVUUy5yc3QKQEAgLTcsMyArNyw2IEBACiBvZiB0aGVzZSBvdXRwdXRzIGlzIG1pc3NpbmcgdGhlIG9iamVjdCB3aWxsIGJlIHJlY29tcGlsZWQuICBUaGlzIGlzCiBzdXBwb3J0ZWQgb25seSBvbiB0aGUgOmdlbmVyYXRvcjpgTmluamFgIGFuZCA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYAogYW5kIHdpbGwgYmUgaWdub3JlZCBvbiBvdGhlciBnZW5lcmF0b3JzLgorCitUaGlzIHByb3BlcnR5IHN1cHBvcnRzCis6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT0dFTi5yc3QgYi9IZWxwL3Byb3Bfc2YvU0tJUF9BVVRPR0VOLnJzdAppbmRleCBmMzExODVhLi4yMTczZjU5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvU0tJUF9BVVRPR0VOLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvU0tJUF9BVVRPR0VOLnJzdApAQCAtMSw2ICsxLDggQEAKIFNLSVBfQVVUT0dFTgogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBFeGNsdWRlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIDpwcm9wX3RndDpgQVVUT01PQ2AsIDpwcm9wX3RndDpgQVVUT1VJQ2AgYW5kCiA6cHJvcF90Z3Q6YEFVVE9SQ0NgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9TS0lQX0FVVE9NT0MucnN0IGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT01PQy5yc3QKaW5kZXggYTkyOTQ0OC4uZTkyY2ZlMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT01PQy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT01PQy5yc3QKQEAgLTEsNiArMSw4IEBACiBTS0lQX0FVVE9NT0MKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRXhjbHVkZSB0aGUgc291cmNlIGZpbGUgZnJvbSA6cHJvcF90Z3Q6YEFVVE9NT0NgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKIEZvciBicm9hZGVyIGV4Y2x1c2lvbiBjb250cm9sIHNlZSA6cHJvcF9zZjpgU0tJUF9BVVRPR0VOYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9TS0lQX0FVVE9SQ0MucnN0IGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1JDQy5yc3QKaW5kZXggYmNjY2NmYy4uMjgyOWMyNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1JDQy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1JDQy5yc3QKQEAgLTEsNiArMSw4IEBACiBTS0lQX0FVVE9SQ0MKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRXhjbHVkZSB0aGUgc291cmNlIGZpbGUgZnJvbSA6cHJvcF90Z3Q6YEFVVE9SQ0NgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKIEZvciBicm9hZGVyIGV4Y2x1c2lvbiBjb250cm9sIHNlZSA6cHJvcF9zZjpgU0tJUF9BVVRPR0VOYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9TS0lQX0FVVE9VSUMucnN0IGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1VJQy5yc3QKaW5kZXggOGM5NjJkYi4uYWU5NzI1YSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1VJQy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1VJQy5yc3QKQEAgLTEsNiArMSw4IEBACiBTS0lQX0FVVE9VSUMKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRXhjbHVkZSB0aGUgc291cmNlIGZpbGUgZnJvbSA6cHJvcF90Z3Q6YEFVVE9VSUNgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKIDpwcm9wX3NmOmBTS0lQX0FVVE9VSUNgIGNhbiBiZSBzZXQgb24gQysrIGhlYWRlciBhbmQgc291cmNlIGZpbGVzIGFuZCBvbgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1NLSVBfUFJFQ09NUElMRV9IRUFERVJTLnJzdCBiL0hlbHAvcHJvcF9zZi9TS0lQX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKaW5kZXggMDAzMWRhMy4uNjYwZGUzZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfUFJFQ09NUElMRV9IRUFERVJTLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvU0tJUF9QUkVDT01QSUxFX0hFQURFUlMucnN0CkBAIC0xLDYgKzEsOCBAQAogU0tJUF9QUkVDT01QSUxFX0hFQURFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogSXMgdGhpcyBzb3VyY2UgZmlsZSBza2lwcGVkIGJ5IDpwcm9wX3RndDpgUFJFQ09NUElMRV9IRUFERVJTYCBmZWF0dXJlLgogCiBUaGlzIHByb3BlcnR5IGhlbHBzIHdpdGggYnVpbGQgcHJvYmxlbXMgdGhhdCBvbmUgd291bGQgcnVuIGludG8KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9TS0lQX1VOSVRZX0JVSUxEX0lOQ0xVU0lPTi5yc3QgYi9IZWxwL3Byb3Bfc2YvU0tJUF9VTklUWV9CVUlMRF9JTkNMVVNJT04ucnN0CmluZGV4IDZkMWU2MGQuLmFlNTI2YWMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9TS0lQX1VOSVRZX0JVSUxEX0lOQ0xVU0lPTi5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1NLSVBfVU5JVFlfQlVJTERfSU5DTFVTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIFNLSVBfVU5JVFlfQlVJTERfSU5DTFVTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIGVuc3VyZXMgdGhlIHNvdXJjZSBmaWxlIHdpbGwgYmUgc2tpcHBlZCBieQogdW5pdHkgYnVpbGRzIHdoZW4gaXRzIGFzc29jaWF0ZWQgdGFyZ2V0IGhhcyBpdHMgOnByb3BfdGd0OmBVTklUWV9CVUlMRGAKIHByb3BlcnR5IHNldCB0byB0cnVlLiAgVGhlIHNvdXJjZSBmaWxlIHdpbGwgaW5zdGVhZCBiZSBjb21waWxlZCBvbiBpdHMgb3duCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUucnN0IGIvSGVscC9wcm9wX3NmL1N3aWZ0X0RFUEVOREVOQ0lFU19GSUxFLnJzdAppbmRleCBmYWFjMmRmLi5hOTBjN2ViIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRS5yc3QKQEAgLTEsNSArMSw3IEBACiBTd2lmdF9ERVBFTkRFTkNJRVNfRklMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBUaGlzIHByb3BlcnR5IHNldHMgdGhlIHBhdGggZm9yIHRoZSBTd2lmdCBkZXBlbmRlbmN5IGZpbGUgKHN3aWZ0ZGVwcykgZm9yIHRoZQogc291cmNlLiAgSWYgb25lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgZGVmYXVsdCB0byBgYDxPQkpFQ1Q+LnN3aWZ0ZGVwc2BgLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1N3aWZ0X0RJQUdOT1NUSUNTX0ZJTEUucnN0IGIvSGVscC9wcm9wX3NmL1N3aWZ0X0RJQUdOT1NUSUNTX0ZJTEUucnN0CmluZGV4IDViZjVkNTkuLjQ3ZDVhYzMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9Td2lmdF9ESUFHTk9TVElDU19GSUxFLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvU3dpZnRfRElBR05PU1RJQ1NfRklMRS5yc3QKQEAgLTEsNCArMSw2IEBACiBTd2lmdF9ESUFHTk9TVElDU19GSUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogVGhpcyBwcm9wZXJ0eSBjb250cm9scyB3aGVyZSB0aGUgU3dpZnQgZGlhZ25vc3RpY3MgYXJlIHNlcmlhbGl6ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVU5JVFlfR1JPVVAucnN0IGIvSGVscC9wcm9wX3NmL1VOSVRZX0dST1VQLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzE4YjcwCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3NmL1VOSVRZX0dST1VQLnJzdApAQCAtMCwwICsxLDcgQEAKK1VOSVRZX0dST1VQCistLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1RoaXMgcHJvcGVydHkgY29udHJvbHMgd2hpY2ggKmJ1Y2tldCogdGhlIHNvdXJjZSB3aWxsIGJlIHBhcnQgb2Ygd2hlbgordGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERfTU9ERWAgaXMgc2V0IHRvIGBgR1JPVVBgYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19DT1BZX1RPX09VVF9ESVIucnN0IGIvSGVscC9wcm9wX3NmL1ZTX0NPUFlfVE9fT1VUX0RJUi5yc3QKaW5kZXggMTZjOGQ4My4uZWJjMzA2MSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX0NPUFlfVE9fT1VUX0RJUi5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX0NPUFlfVE9fT1VUX0RJUi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19DT1BZX1RPX09VVF9ESVIKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogU2V0cyB0aGUgYGA8Q29weVRvT3V0cHV0RGlyZWN0b3J5PmBgIHRhZyBmb3IgYSBzb3VyY2UgZmlsZSBpbiBhCiBWaXN1YWwgU3R1ZGlvIHByb2plY3QgZmlsZS4gVmFsaWQgdmFsdWVzIGFyZSBgYE5ldmVyYGAsIGBgQWx3YXlzYGAKIGFuZCBgYFByZXNlcnZlTmV3ZXN0YGAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfQ1NIQVJQX3RhZ25hbWUucnN0IGIvSGVscC9wcm9wX3NmL1ZTX0NTSEFSUF90YWduYW1lLnJzdAppbmRleCA5MWM0YTA2Li43NTcyMGY4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfQ1NIQVJQX3RhZ25hbWUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19DU0hBUlBfdGFnbmFtZS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19DU0hBUlBfPHRhZ25hbWU+CiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBWaXN1YWwgU3R1ZGlvIGFuZCBDU2hhcnAgc291cmNlLWZpbGUtc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KIAogVGVsbCB0aGUgOm1hbnVhbDpgVmlzdWFsIFN0dWRpbyBnZW5lcmF0b3JzIDxjbWFrZS1nZW5lcmF0b3JzKDcpPmAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19ERVBMT1lNRU5UX0NPTlRFTlQucnN0IGIvSGVscC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfQ09OVEVOVC5yc3QKaW5kZXggNmEzODQ3OC4uZWU0OWIyNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfQ09OVEVOVC5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfQ09OVEVOVC5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ERVBMT1lNRU5UX0NPTlRFTlQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogTWFyayBhIHNvdXJjZSBmaWxlIGFzIGNvbnRlbnQgZm9yIGRlcGxveW1lbnQgd2l0aCBhIFdpbmRvd3MgUGhvbmUgb3IKIFdpbmRvd3MgU3RvcmUgYXBwbGljYXRpb24gd2hlbiBidWlsdCB3aXRoIGEKIDptYW51YWw6YFZpc3VhbCBTdHVkaW8gZ2VuZXJhdG9ycyA8Y21ha2UtZ2VuZXJhdG9ycyg3KT5gLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfTE9DQVRJT04ucnN0IGIvSGVscC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfTE9DQVRJT04ucnN0CmluZGV4IDJjZTIyZmMuLmIxNzA1NDQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19ERVBMT1lNRU5UX0xPQ0FUSU9OLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfREVQTE9ZTUVOVF9MT0NBVElPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ERVBMT1lNRU5UX0xPQ0FUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZpZXMgdGhlIGRlcGxveW1lbnQgbG9jYXRpb24gZm9yIGEgY29udGVudCBzb3VyY2UgZmlsZSB3aXRoIGEgV2luZG93cwogUGhvbmUgb3IgV2luZG93cyBTdG9yZSBhcHBsaWNhdGlvbiB3aGVuIGJ1aWx0CiB3aXRoIGEgOm1hbnVhbDpgVmlzdWFsIFN0dWRpbyBnZW5lcmF0b3JzIDxjbWFrZS1nZW5lcmF0b3JzKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfSU5DTFVERV9JTl9WU0lYLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19JTkNMVURFX0lOX1ZTSVgucnN0CmluZGV4IGRiNDcwZWYuLjE2YzU2YmYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19JTkNMVURFX0lOX1ZTSVgucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19JTkNMVURFX0lOX1ZTSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfSU5DTFVERV9JTl9WU0lYCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIEJvb2xlYW4gcHJvcGVydHkgdG8gc3BlY2lmeSBpZiB0aGUgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgd2l0aGluIGEKIFZTSVggKFZpc3VhbCBTdHVkaW8gSW50ZWdyYXRpb24gRXh0ZW5zaW9uKSBleHRlbnNpb24gcGFja2FnZS4KIFRoaXMgaXMgbmVlZGVkIGZvciBkZXZlbG9wbWVudCBvZiBWaXN1YWwgU3R1ZGlvIGV4dGVuc2lvbnMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfUkVTT1VSQ0VfR0VORVJBVE9SLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19SRVNPVVJDRV9HRU5FUkFUT1IucnN0CmluZGV4IDk3ZTVhYWMuLmM1YmI0ZjYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19SRVNPVVJDRV9HRU5FUkFUT1IucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19SRVNPVVJDRV9HRU5FUkFUT1IucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfUkVTT1VSQ0VfR0VORVJBVE9SCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIHNwZWNpZnkgdGhlIHJlc291cmNlIGdlbmVyYXRvciB0byBiZSB1c2VkCiBvbiB0aGlzIGZpbGUuIEl0IGRlZmF1bHRzIHRvIGBgUHVibGljUmVzWEZpbGVDb2RlR2VuZXJhdG9yYGAgaWYKIG5vdCBzZXQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfU0VUVElOR1MucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1NFVFRJTkdTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjJmNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1NFVFRJTkdTLnJzdApAQCAtMCwwICsxLDIwIEBACitWU19TRVRUSU5HUworLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitTZXQgYW55IGl0ZW0gbWV0YWRhdGEgb24gYSBub24tYnVpbHQgZmlsZS4KKworVGFrZXMgYSBsaXN0IG9mIGBgS2V5PVZhbHVlYGAgcGFpcnMuIFRlbGxzIHRoZSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvciB0byBzZXQKK2BgS2V5YGAgdG8gYGBWYWx1ZWBgIGFzIGl0ZW0gbWV0YWRhdGEgb24gdGhlIGZpbGUuCisKK0ZvciBleGFtcGxlOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXRfcHJvcGVydHkoU09VUkNFIGZpbGUuaGxzbCBQUk9QRVJUWSBWU19TRVRUSU5HUyAiS2V5PVZhbHVlIiAiS2V5Mj1WYWx1ZTIiKQorCit3aWxsIHNldCBgYEtleWBgIHRvIGBgVmFsdWVgYCBhbmQgYGBLZXkyYGAgdG8gYGBWYWx1ZTJgYCBvbiB0aGUKK2BgZmlsZS5obHNsYGAgaXRlbSBhcyBtZXRhZGF0YS4KKworOm1hbnVhbDpgR2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YCBhcmUgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9ESVNBQkxFX09QVElNSVpBVElPTlMucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9ESVNBQkxFX09QVElNSVpBVElPTlMucnN0CmluZGV4IDQ0NmRkMjYuLjZmYjY3NzggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRElTQUJMRV9PUFRJTUlaQVRJT05TLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19TSEFERVJfRElTQUJMRV9PUFRJTUlaQVRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogRGlzYWJsZSBjb21waWxlciBvcHRpbWl6YXRpb25zIGZvciBhbiBgYC5obHNsYGAgc291cmNlIGZpbGUuICBUaGlzIGFkZHMgdGhlCiBgYC1PZGBgIGZsYWcgdG8gdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhlIEZ4Q29tcGlsZXIgdG9vbC4gIFNwZWNpZnkgdGhlIHZhbHVlCiBgYHRydWVgYCBmb3IgdGhpcyBwcm9wZXJ0eSB0byBkaXNhYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0VOQUJMRV9ERUJVRy5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0VOQUJMRV9ERUJVRy5yc3QKaW5kZXggYzBlNjBhMy4uOWM4ZjlkNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9FTkFCTEVfREVCVUcucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRU5BQkxFX0RFQlVHLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX1NIQURFUl9FTkFCTEVfREVCVUcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBFbmFibGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBhbiBgYC5obHNsYGAgc291cmNlIGZpbGUuICBUaGlzIGFkZHMgdGhlCiBgYC1aaWBgIGZsYWcgdG8gdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhlIEZ4Q29tcGlsZXIgdG9vbC4gIFNwZWNpZnkgdGhlIHZhbHVlCiBgYHRydWVgYCB0byBnZW5lcmF0ZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjb21waWxlZCBzaGFkZXIuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0VOVFJZUE9JTlQucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9FTlRSWVBPSU5ULnJzdAppbmRleCBmZTM0NzFmLi40YjMxMWJhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0VOVFJZUE9JTlQucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRU5UUllQT0lOVC5yc3QKQEAgLTEsNSArMSw3IEBACiBWU19TSEFERVJfRU5UUllQT0lOVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBzaGFkZXIgb2YgYSBgYC5obHNsYGAgc291cmNlCiBmaWxlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9GTEFHUy5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0ZMQUdTLnJzdAppbmRleCAwYTUzYWZkLi4wN2Y4NDk3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0ZMQUdTLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0ZMQUdTLnJzdApAQCAtMSw0ICsxLDYgQEAKIFZTX1NIQURFUl9GTEFHUwogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBTZXQgYWRkaXRpb25hbCBWaXN1YWwgU3R1ZGlvIHNoYWRlciBmbGFncyBvZiBhIGBgLmhsc2xgYCBzb3VyY2UgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfTU9ERUwucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9NT0RFTC5yc3QKaW5kZXggYjFjZjBkZi4uMDcyZGY4OSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9NT0RFTC5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9NT0RFTC5yc3QKQEAgLTEsNSArMSw3IEBACiBWU19TSEFERVJfTU9ERUwKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmaWVzIHRoZSBzaGFkZXIgbW9kZWwgb2YgYSBgYC5obHNsYGAgc291cmNlIGZpbGUuIFNvbWUgc2hhZGVyIHR5cGVzIGNhbgogb25seSBiZSB1c2VkIHdpdGggcmVjZW50IHNoYWRlciBtb2RlbHMKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfT0JKRUNUX0ZJTEVfTkFNRS5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX09CSkVDVF9GSUxFX05BTUUucnN0CmluZGV4IDA5M2JjYzYuLjM2NDdhNWUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfT0JKRUNUX0ZJTEVfTkFNRS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9PQkpFQ1RfRklMRV9OQU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX1NIQURFUl9PQkpFQ1RfRklMRV9OQU1FCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFNwZWNpZmllcyBhIGZpbGUgbmFtZSBmb3IgdGhlIGNvbXBpbGVkIHNoYWRlciBvYmplY3QgZmlsZSBmb3IgYW4gYGAuaGxzbGBgCiBzb3VyY2UgZmlsZS4gIFRoaXMgYWRkcyB0aGUgYGAtRm9gYCBmbGFnIHRvIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSBGeENvbXBpbGVyCiB0b29sLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUucnN0CmluZGV4IGU2NzYzZDMuLjQxMTNhMTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfT1VUUFVUX0hFQURFUl9GSUxFLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX09VVFBVVF9IRUFERVJfRklMRS5yc3QKQEAgLTEsNSArMSw3IEBACiBWU19TSEFERVJfT1VUUFVUX0hFQURFUl9GSUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogU2V0IGZpbGVuYW1lIGZvciBvdXRwdXQgaGVhZGVyIGZpbGUgY29udGFpbmluZyBvYmplY3QgY29kZSBvZiBhIGBgLmhsc2xgYAogc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX1RZUEUucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9UWVBFLnJzdAppbmRleCBmMTA0ODM3Li4zZmI3ZTYwIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX1RZUEUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfVFlQRS5yc3QKQEAgLTEsNCArMSw2IEBACiBWU19TSEFERVJfVFlQRQogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNldCB0aGUgVmlzdWFsIFN0dWRpbyBzaGFkZXIgdHlwZSBvZiBhIGBgLmhsc2xgYCBzb3VyY2UgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfVkFSSUFCTEVfTkFNRS5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX1ZBUklBQkxFX05BTUUucnN0CmluZGV4IDFhNWUzNjkuLjMzNjFiNDAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfVkFSSUFCTEVfTkFNRS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9WQVJJQUJMRV9OQU1FLnJzdApAQCAtMSw1ICsxLDcgQEAKIFZTX1NIQURFUl9WQVJJQUJMRV9OQU1FCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIFNldCBuYW1lIG9mIHZhcmlhYmxlIGluIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgb2JqZWN0IGNvZGUgb2YgYSBgYC5obHNsYGAKIHNvdXJjZSBmaWxlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1RPT0xfT1ZFUlJJREUucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1RPT0xfT1ZFUlJJREUucnN0CmluZGV4IDhiZGM1Y2EuLmIyZjQxMTIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19UT09MX09WRVJSSURFLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfVE9PTF9PVkVSUklERS5yc3QKQEAgLTEsNSArMSw3IEBACiBWU19UT09MX09WRVJSSURFCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBPdmVycmlkZSB0aGUgZGVmYXVsdCBWaXN1YWwgU3R1ZGlvIHRvb2wgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHNvdXJjZSBmaWxlCiB3aXRoIGEgbmV3IHRvb2wgbm90IGJhc2VkIG9uIHRoZSBleHRlbnNpb24gb2YgdGhlIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfWEFNTF9UWVBFLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19YQU1MX1RZUEUucnN0CmluZGV4IDFhMjc0YmEuLjYxMmIwN2IgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19YQU1MX1RZUEUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19YQU1MX1RZUEUucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfWEFNTF9UWVBFCiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIE1hcmsgYSBFeHRlbnNpYmxlIEFwcGxpY2F0aW9uIE1hcmt1cCBMYW5ndWFnZSAoWEFNTCkgc291cmNlIGZpbGUKIGFzIGEgZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgZGVmYXVsdCBgYFBhZ2VgYC4KIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSB3b3VsZCBiZSB0byBzZXQgdGhlIGRlZmF1bHQgYGBBcHAueGFtbGBgIGZpbGUgYXMKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9YQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUucnN0IGIvSGVscC9wcm9wX3NmL1hDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRS5yc3QKaW5kZXggYjhjZjk0Ni4uNWE1MGQ3ZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1hDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1hDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU2V0IHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgYGBleHBsaWNpdEZpbGVUeXBlYGAgYXR0cmlidXRlIG9uIGl0cyByZWZlcmVuY2UgdG8gYQogc291cmNlIGZpbGUuICBDTWFrZSBjb21wdXRlcyBhIGRlZmF1bHQgYmFzZWQgb24gZmlsZSBleHRlbnNpb24gYnV0CiBjYW4gYmUgdG9sZCBleHBsaWNpdGx5IHdpdGggdGhpcyBwcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9YQ09ERV9GSUxFX0FUVFJJQlVURVMucnN0IGIvSGVscC9wcm9wX3NmL1hDT0RFX0ZJTEVfQVRUUklCVVRFUy5yc3QKaW5kZXggNGM5M2Y0NC4uYmE1MWUwMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1hDT0RFX0ZJTEVfQVRUUklCVVRFUy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1hDT0RFX0ZJTEVfQVRUUklCVVRFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9GSUxFX0FUVFJJQlVURVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogQWRkIHZhbHVlcyB0byB0aGUgOmdlbmVyYXRvcjpgWGNvZGVgIGBgQVRUUklCVVRFU2BgIHNldHRpbmcgb24gaXRzIHJlZmVyZW5jZSB0byBhCiBzb3VyY2UgZmlsZS4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHJvbGUgb24KIGEgYGAubWlnYGAgZmlsZTo6CmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvWENPREVfTEFTVF9LTk9XTl9GSUxFX1RZUEUucnN0IGIvSGVscC9wcm9wX3NmL1hDT0RFX0xBU1RfS05PV05fRklMRV9UWVBFLnJzdAppbmRleCBiMjE4OTFmLi4wYjg0ZTMxIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvWENPREVfTEFTVF9LTk9XTl9GSUxFX1RZUEUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9YQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNldCB0aGUgOmdlbmVyYXRvcjpgWGNvZGVgIGBgbGFzdEtub3duRmlsZVR5cGVgYCBhdHRyaWJ1dGUgb24gaXRzIHJlZmVyZW5jZSB0bwogYSBzb3VyY2UgZmlsZS4gIENNYWtlIGNvbXB1dGVzIGEgZGVmYXVsdCBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvbiBidXQKIGNhbiBiZSB0b2xkIGV4cGxpY2l0bHkgd2l0aCB0aGlzIHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3Rlc3QvREVQRU5EUy5yc3QgYi9IZWxwL3Byb3BfdGVzdC9ERVBFTkRTLnJzdAppbmRleCA4OWM3NTUzLi41YWEzNmI0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGVzdC9ERVBFTkRTLnJzdAorKysgYi9IZWxwL3Byb3BfdGVzdC9ERVBFTkRTLnJzdApAQCAtOCwzICs4LDE1IEBACiBwdXJlbHkgZm9yIG9yZGVyIG9mIGV4ZWN1dGlvbiAoaS5lLiBpdCBpcyByZWFsbHkganVzdCBhICpydW4gYWZ0ZXIqCiByZWxhdGlvbnNoaXApLiBDb25zaWRlciB1c2luZyB0ZXN0IGZpeHR1cmVzIHdpdGggc2V0dXAgdGVzdHMgaWYgYSBkZXBlbmRlbmN5CiB3aXRoIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBpcyByZXF1aXJlZCAoc2VlIDpwcm9wX3Rlc3Q6YEZJWFRVUkVTX1JFUVVJUkVEYCkuCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBhZGRfdGVzdChOQU1FIGJhc2VUZXN0MSAuLi4pCisgIGFkZF90ZXN0KE5BTUUgYmFzZVRlc3QyIC4uLikKKyAgYWRkX3Rlc3QoTkFNRSBkZXBlbmRzVGVzdDEyIC4uLikKKworICBzZXRfdGVzdHNfcHJvcGVydGllcyhkZXBlbmRzVGVzdDEyIFBST1BFUlRJRVMgREVQRU5EUyAiYmFzZVRlc3QxO2Jhc2VUZXN0MiIpCisgICMgZGVwZW5kc1Rlc3QxMiBydW5zIGFmdGVyIGJhc2VUZXN0MSBhbmQgYmFzZVRlc3QyLCBldmVuIGlmIHRoZXkgZmFpbApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3Rlc3QvRElTQUJMRUQucnN0IGIvSGVscC9wcm9wX3Rlc3QvRElTQUJMRUQucnN0CmluZGV4IDFkNDY5ZTguLmNiZjA3YTUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L0RJU0FCTEVELnJzdAorKysgYi9IZWxwL3Byb3BfdGVzdC9ESVNBQkxFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBESVNBQkxFRAogLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIElmIHNldCB0byBgYFRydWVgYCwgdGhlIHRlc3Qgd2lsbCBiZSBza2lwcGVkIGFuZCBpdHMgc3RhdHVzIHdpbGwgYmUgJ05vdCBSdW4nLiBBCiBgYERJU0FCTEVEYGAgdGVzdCB3aWxsIG5vdCBiZSBjb3VudGVkIGluIHRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgYW5kIGl0cwogY29tcGxldGlvbiBzdGF0dXMgd2lsbCBiZSByZXBvcnRlZCB0byBDRGFzaCBhcyBgYERpc2FibGVkYGAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGVzdC9GSVhUVVJFU19DTEVBTlVQLnJzdCBiL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX0NMRUFOVVAucnN0CmluZGV4IDMwNzViNGQuLmFhMDQzZGEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX0NMRUFOVVAucnN0CisrKyBiL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX0NMRUFOVVAucnN0CkBAIC0xLDYgKzEsOCBAQAogRklYVFVSRVNfQ0xFQU5VUAogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogU3BlY2lmaWVzIGEgbGlzdCBvZiBmaXh0dXJlcyBmb3Igd2hpY2ggdGhlIHRlc3QgaXMgdG8gYmUgdHJlYXRlZCBhcyBhIGNsZWFudXAKIHRlc3QuIFRoZXNlIGZpeHR1cmUgbmFtZXMgYXJlIGRpc3RpbmN0IGZyb20gdGVzdCBjYXNlIG5hbWVzIGFuZCBhcmUgbm90CiByZXF1aXJlZCB0byBoYXZlIGFueSBzaW1pbGFyaXR5IHRvIHRoZSBuYW1lcyBvZiB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhlbS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX1JFUVVJUkVELnJzdCBiL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX1JFUVVJUkVELnJzdAppbmRleCBlM2Y2MGM0Li5kOTI4MDhhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGVzdC9GSVhUVVJFU19SRVFVSVJFRC5yc3QKKysrIGIvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfUkVRVUlSRUQucnN0CkBAIC0xLDYgKzEsOCBAQAogRklYVFVSRVNfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBTcGVjaWZpZXMgYSBsaXN0IG9mIGZpeHR1cmVzIHRoZSB0ZXN0IHJlcXVpcmVzLiBGaXh0dXJlIG5hbWVzIGFyZSBjYXNlCiBzZW5zaXRpdmUgYW5kIHRoZXkgYXJlIG5vdCByZXF1aXJlZCB0byBoYXZlIGFueSBzaW1pbGFyaXR5IHRvIHRlc3QgbmFtZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX1NFVFVQLnJzdCBiL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX1NFVFVQLnJzdAppbmRleCBmZGIyMWNjLi4wNGEwOWQ4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGVzdC9GSVhUVVJFU19TRVRVUC5yc3QKKysrIGIvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfU0VUVVAucnN0CkBAIC0xLDYgKzEsOCBAQAogRklYVFVSRVNfU0VUVVAKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBTcGVjaWZpZXMgYSBsaXN0IG9mIGZpeHR1cmVzIGZvciB3aGljaCB0aGUgdGVzdCBpcyB0byBiZSB0cmVhdGVkIGFzIGEgc2V0dXAKIHRlc3QuIFRoZXNlIGZpeHR1cmUgbmFtZXMgYXJlIGRpc3RpbmN0IGZyb20gdGVzdCBjYXNlIG5hbWVzIGFuZCBhcmUgbm90CiByZXF1aXJlZCB0byBoYXZlIGFueSBzaW1pbGFyaXR5IHRvIHRoZSBuYW1lcyBvZiB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhlbS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90ZXN0L1BST0NFU1NPUl9BRkZJTklUWS5yc3QgYi9IZWxwL3Byb3BfdGVzdC9QUk9DRVNTT1JfQUZGSU5JVFkucnN0CmluZGV4IDM4ZWMxNzkuLmY0OGE2OWMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L1BST0NFU1NPUl9BRkZJTklUWS5yc3QKKysrIGIvSGVscC9wcm9wX3Rlc3QvUFJPQ0VTU09SX0FGRklOSVRZLnJzdApAQCAtMSw2ICsxLDggQEAKIFBST0NFU1NPUl9BRkZJTklUWQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogU2V0IHRvIGEgdHJ1ZSB2YWx1ZSB0byBhc2sgQ1Rlc3QgdG8gbGF1bmNoIHRoZSB0ZXN0IHByb2Nlc3Mgd2l0aCBDUFUgYWZmaW5pdHkKIGZvciBhIGZpeGVkIHNldCBvZiBwcm9jZXNzb3JzLiAgSWYgZW5hYmxlZCBhbmQgc3VwcG9ydGVkIGZvciB0aGUgY3VycmVudAogcGxhdGZvcm0sIENUZXN0IHdpbGwgY2hvb3NlIGEgc2V0IG9mIHByb2Nlc3NvcnMgdG8gcGxhY2UgaW4gdGhlIENQVSBhZmZpbml0eQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3Rlc3QvUkVRVUlSRURfRklMRVMucnN0IGIvSGVscC9wcm9wX3Rlc3QvUkVRVUlSRURfRklMRVMucnN0CmluZGV4IGZhYzM1N2MuLmJhZjIwOWMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L1JFUVVJUkVEX0ZJTEVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGVzdC9SRVFVSVJFRF9GSUxFUy5yc3QKQEAgLTEsNyArMSwzOCBAQAogUkVRVUlSRURfRklMRVMKIC0tLS0tLS0tLS0tLS0tCiAKLUxpc3Qgb2YgZmlsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZSB0ZXN0LgorTGlzdCBvZiBmaWxlcyByZXF1aXJlZCB0byBydW4gdGhlIHRlc3QuICBUaGUgZmlsZW5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUKK3Rlc3QgOnByb3BfdGVzdDpgV09SS0lOR19ESVJFQ1RPUllgIHVubGVzcyBhbiBhYnNvbHV0ZSBwYXRoIGlzIHNwZWNpZmllZC4KIAogSWYgc2V0IHRvIGEgbGlzdCBvZiBmaWxlcywgdGhlIHRlc3Qgd2lsbCBub3QgYmUgcnVuIHVubGVzcyBhbGwgb2YgdGhlCiBmaWxlcyBleGlzdC4KKworRXhhbXBsZXMKK35+fn5+fn5+CisKK1N1cHBvc2UgdGhhdCBgYHRlc3QudHh0YGAgaXMgY3JlYXRlZCBieSB0ZXN0IGBgYmFzZVRlc3RgYCBhbmQgYGBub25lLnR4dGBgCitkb2VzIG5vdCBleGlzdDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgYWRkX3Rlc3QoTkFNRSBiYXNlVGVzdCAuLi4pICAgIyBBc3N1bWVkIHRvIGNyZWF0ZSB0ZXN0LnR4dAorICBhZGRfdGVzdChOQU1FIGZpbGVUZXN0IC4uLikKKworICAjIFRoZSBmb2xsb3dpbmcgZW5zdXJlcyB0aGF0IGlmIGJhc2VUZXN0IGlzIHN1Y2Nlc3NmdWwsIHRlc3QudHh0IHdpbGwKKyAgIyBoYXZlIGJlZW4gY3JlYXRlZCBiZWZvcmUgZmlsZVRlc3QgaXMgcnVuCisgIHNldF90ZXN0c19wcm9wZXJ0aWVzKGZpbGVUZXN0IFBST1BFUlRJRVMKKyAgICBERVBFTkRTIGJhc2VUZXN0CisgICAgUkVRVUlSRURfRklMRVMgdGVzdC50eHQKKyAgKQorCisgIGFkZF90ZXN0KE5BTUUgbm90UnVuVGVzdCAuLi4pCisKKyAgIyBUaGUgZm9sbG93aW5nIG1ha2VzIG5vdFJ1blRlc3QgZGVwZW5kIG9uIHR3byBmaWxlcy4gTm90aGluZyBjcmVhdGVzCisgICMgdGhlIG5vbmUudHh0IGZpbGUsIHNvIG5vdFJ1blRlc3Qgd2lsbCBmYWlsIHdpdGggc3RhdHVzICJOb3QgUnVuIi4KKyAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMobm90UnVuVGVzdCBQUk9QRVJUSUVTCisgICAgUkVRVUlSRURfRklMRVMgInRlc3QudHh0O25vbmUudHh0IgorICApCisKK1RoZSBhYm92ZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBob3cgYGBSRVFVSVJFRF9GSUxFU2BgIHdvcmtzLCBidXQgaXQgaXMgbm90IHRoZQorbW9zdCByb2J1c3Qgd2F5IHRvIGltcGxlbWVudCB0ZXN0IG9yZGVyaW5nIHdpdGggZmFpbHVyZSBkZXRlY3Rpb24uICBGb3IgdGhhdCwKK3Rlc3QgZml4dHVyZXMgYXJlIGEgYmV0dGVyIGFsdGVybmF0aXZlIChzZWUgOnByb3BfdGVzdDpgRklYVFVSRVNfUkVRVUlSRURgKS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90ZXN0L1JFU09VUkNFX0dST1VQUy5yc3QgYi9IZWxwL3Byb3BfdGVzdC9SRVNPVVJDRV9HUk9VUFMucnN0CmluZGV4IDYzYzU2Y2UuLjI2YzhmYTIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L1JFU09VUkNFX0dST1VQUy5yc3QKKysrIGIvSGVscC9wcm9wX3Rlc3QvUkVTT1VSQ0VfR1JPVVBTLnJzdApAQCAtMSw2ICsxLDggQEAKIFJFU09VUkNFX0dST1VQUwogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogU3BlY2lmeSByZXNvdXJjZXMgcmVxdWlyZWQgYnkgYSB0ZXN0LCBncm91cGVkIGluIGEgd2F5IHRoYXQgaXMgbWVhbmluZ2Z1bCB0bwogdGhlIHRlc3QuICBTZWUgOnJlZjpgcmVzb3VyY2UgYWxsb2NhdGlvbiA8Y3Rlc3QtcmVzb3VyY2UtYWxsb2NhdGlvbj5gCiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyBwcm9wZXJ0eSBpbnRlZ3JhdGVzIGludG8gdGhlIENUZXN0IHJlc291cmNlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGVzdC9TS0lQX1JFR1VMQVJfRVhQUkVTU0lPTi5yc3QgYi9IZWxwL3Byb3BfdGVzdC9TS0lQX1JFR1VMQVJfRVhQUkVTU0lPTi5yc3QKaW5kZXggMmM2ZDk4MC4uNDZjNDM2MyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3Rlc3QvU0tJUF9SRUdVTEFSX0VYUFJFU1NJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90ZXN0L1NLSVBfUkVHVUxBUl9FWFBSRVNTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIFNLSVBfUkVHVUxBUl9FWFBSRVNTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIElmIHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGUgdGVzdCB3aWxsIGJlIG1hcmtlZCBhcyBza2lwcGVkLgogCiBJZiBzZXQsIGlmIHRoZSBvdXRwdXQgbWF0Y2hlcyBvbmUgb2Ygc3BlY2lmaWVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMsCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGVzdC9USU1FT1VUX0FGVEVSX01BVENILnJzdCBiL0hlbHAvcHJvcF90ZXN0L1RJTUVPVVRfQUZURVJfTUFUQ0gucnN0CmluZGV4IGQ2MDc5OTIuLjcyNmRjYWIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L1RJTUVPVVRfQUZURVJfTUFUQ0gucnN0CisrKyBiL0hlbHAvcHJvcF90ZXN0L1RJTUVPVVRfQUZURVJfTUFUQ0gucnN0CkBAIC0xLDYgKzEsOCBAQAogVElNRU9VVF9BRlRFUl9NQVRDSAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogQ2hhbmdlIGEgdGVzdCdzIHRpbWVvdXQgZHVyYXRpb24gYWZ0ZXIgYSBtYXRjaGluZyBsaW5lIGlzIGVuY291bnRlcmVkCiBpbiBpdHMgb3V0cHV0LgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FERElUSU9OQUxfQ0xFQU5fRklMRVMucnN0IGIvSGVscC9wcm9wX3RndC9BRERJVElPTkFMX0NMRUFOX0ZJTEVTLnJzdAppbmRleCAzYjlkOTY1Li5kYzg3ZDIzIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FERElUSU9OQUxfQ0xFQU5fRklMRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQURESVRJT05BTF9DTEVBTl9GSUxFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBRERJVElPTkFMX0NMRUFOX0ZJTEVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogQSA6cmVmOmA7LWxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdGhhdCB3aWxsIGJlCiByZW1vdmVkIGFzIGEgcGFydCBvZiB0aGUgZ2xvYmFsIGBgY2xlYW5gYCB0YXJnZXQuICBJdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIGFzIHBhcnQgb2YgYnVpbGRpbmcgdGhlIHRhcmdldCBvcgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQUlYX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKaW5kZXggMTVkZGMwYi4uZGU5OGZkZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQUlYX0VYUE9SVF9BTExfU1lNQk9MUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIE9uIEFJWCwgQ01ha2UgYXV0b21hdGljYWxseSBleHBvcnRzIGFsbCBzeW1ib2xzIGZyb20gc2hhcmVkIGxpYnJhcmllcywgYW5kCiBmcm9tIGV4ZWN1dGFibGVzIHdpdGggdGhlIDpwcm9wX3RndDpgRU5BQkxFX0VYUE9SVFNgIHRhcmdldCBwcm9wZXJ0eSBzZXQuCiBFeHBsaWNpdGx5IGRpc2FibGUgdGhpcyBib29sZWFuIHByb3BlcnR5IHRvIHN1cHByZXNzIHRoZSBiZWhhdmlvciBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQUxJQVNfR0xPQkFMLnJzdCBiL0hlbHAvcHJvcF90Z3QvQUxJQVNfR0xPQkFMLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg1OWM2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9BTElBU19HTE9CQUwucnN0CkBAIC0wLDAgKzEsMTkgQEAKK0FMSUFTX0dMT0JBTAorLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworUmVhZC1vbmx5IHByb3BlcnR5IGluZGljYXRpbmcgb2Ygd2hldGhlciBhbiA6cmVmOmBBTElBUyB0YXJnZXQgPEFsaWFzIFRhcmdldHM+YAoraXMgZ2xvYmFsbHkgdmlzaWJsZS4KKworVGhlIGJvb2xlYW4gdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBgYFRSVUVgYCBmb3IgYWxpYXNlcyB0bworOnJlZjpgSU1QT1JURUQgdGFyZ2V0cyA8SW1wb3J0ZWQgVGFyZ2V0cz5gIGNyZWF0ZWQKK3dpdGggdGhlIGBgR0xPQkFMYGAgb3B0aW9ucyB0byA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGUoKWAgb3IKKzpjb21tYW5kOmBhZGRfbGlicmFyeSgpYCwgYGBGQUxTRWBgIG90aGVyd2lzZS4gSXQgaXMgdW5kZWZpbmVkIGZvcgordGFyZ2V0cyBidWlsdCB3aXRoaW4gdGhlIHByb2plY3QuCisKKy4uIG5vdGU6OgorCisgIFByb21vdGluZyBhbiA6cmVmOmBJTVBPUlRFRCB0YXJnZXQgPEltcG9ydGVkIFRhcmdldHM+YCBmcm9tIGBgTE9DQUxgYAorICB0byBgYEdMT0JBTGBgIHNjb3BlIGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvciA6cHJvcF90Z3Q6YElNUE9SVEVEX0dMT0JBTGAKKyAgdGFyZ2V0IHByb3BlcnR5IGRvIG5vdCBjaGFuZ2UgdGhlIHNjb3BlIG9mIGxvY2FsIGFsaWFzZXMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUy5yc3QKaW5kZXggYWY2YjQwNS4uZWNlYjE3ZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BTlRfQURESVRJT05BTF9PUFRJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTZXQgdGhlIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgQW5kcm9pZCBBbnQgYnVpbGQgc3lzdGVtLiBUaGlzIGlzCiBhIHN0cmluZyB2YWx1ZSBjb250YWluaW5nIGFsbCBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgdGhlIEFudCBidWlsZC4KIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FQSS5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVBJLnJzdAppbmRleCA2MzQ2NGQ3Li43NjY0ZjE4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVBJLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVBJLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfQVBJCiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCBOVklESUEgTnNpZ2h0IFRlZ3JhIFZpc3VhbCBTdHVkaW8KIEVkaXRpb25gLCB0aGlzIHByb3BlcnR5IHNldHMgdGhlIEFuZHJvaWQgdGFyZ2V0IEFQSSB2ZXJzaW9uIChlLmcuIGBgMTVgYCkuCiBUaGUgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSBhIHBvc2l0aXZlIGRlY2ltYWwgaW50ZWdlci4gIFRoaXMgcHJvcGVydHkgaXMKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BUElfTUlOLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BUElfTUlOLnJzdAppbmRleCA3NzNhYjNmLi43Y2EyNDU1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVBJX01JTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0FQSV9NSU4ucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9BUElfTUlOCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIFNldCB0aGUgQW5kcm9pZCBNSU4gQVBJIHZlcnNpb24gKGUuZy4gYGA5YGApLiAgVGhlIHZlcnNpb24gbnVtYmVyCiBtdXN0IGJlIGEgcG9zaXRpdmUgZGVjaW1hbCBpbnRlZ2VyLiAgVGhpcyBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieQogdGhlIHZhbHVlIG9mIHRoZSA6dmFyaWFibGU6YENNQUtFX0FORFJPSURfQVBJX01JTmAgdmFyaWFibGUgaWYgaXQgaXMgc2V0CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVJDSC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVJDSC5yc3QKaW5kZXggM2UwN2U1YS4uOTRiNzZkZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FSQ0gucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BUkNILnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfQVJDSAogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIE5WSURJQSBOc2lnaHQgVGVncmEgVmlzdWFsIFN0dWRpbwogRWRpdGlvbmAsIHRoaXMgcHJvcGVydHkgc2V0cyB0aGUgQW5kcm9pZCB0YXJnZXQgYXJjaGl0ZWN0dXJlLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BU1NFVFNfRElSRUNUT1JJRVMucnN0CmluZGV4IDc2NGE1ODIuLmIwOWE4YjcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BU1NFVFNfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BU1NFVFNfRElSRUNUT1JJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9BU1NFVFNfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTZXQgdGhlIEFuZHJvaWQgYXNzZXRzIGRpcmVjdG9yaWVzIHRvIGNvcHkgaW50byB0aGUgbWFpbiBhc3NldHMKIGZvbGRlciBiZWZvcmUgYnVpbGQuIFRoaXMgYSBzdHJpbmcgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUKIGRpcmVjdG9yeSBwYXRocyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0dVSS5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfR1VJLnJzdAppbmRleCA5MmUyMDQxLi5jYzAyMmRiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfR1VJLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfR1VJLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfR1VJCiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCBOVklESUEgTnNpZ2h0IFRlZ3JhIFZpc3VhbCBTdHVkaW8KIEVkaXRpb25gLCB0aGlzIHByb3BlcnR5IHNwZWNpZmllcyB3aGV0aGVyIHRvIGJ1aWxkIGFuIGV4ZWN1dGFibGUgYXMgYW4KIGFwcGxpY2F0aW9uIHBhY2thZ2Ugb24gQW5kcm9pZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTLnJzdAppbmRleCA0MjkzN2MxLi45ODgwZGFmIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfSkFSX0RFUEVOREVOQ0lFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBUl9ERVBFTkRFTkNJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyBKQVIgZGVwZW5kZW5jaWVzLgogVGhpcyBpcyBhIHN0cmluZyB2YWx1ZSBwcm9wZXJ0eS4gVGhpcyBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZAogYnkgdGhlIHZhbHVlIG9mIHRoZSA6dmFyaWFibGU6YENNQUtFX0FORFJPSURfSkFSX0RFUEVOREVOQ0lFU2AKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBUl9ESVJFQ1RPUklFUy5yc3QKaW5kZXggNTRmMGE4Zi4uNmZlZjUwYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBUl9ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBUl9ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX0pBUl9ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yCiB0aGUgSkFSIGxpYnJhcmllcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfSkFWQV9TT1VSQ0VfRElSLnJzdAppbmRleCA5MGVmMWNlLi45ZWE5ODg0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfSkFWQV9TT1VSQ0VfRElSLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfSkFWQV9TT1VSQ0VfRElSLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfSkFWQV9TT1VSQ0VfRElSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2V0IHRoZSBBbmRyb2lkIHByb3BlcnR5IHRoYXQgZGVmaW5lcyB0aGUgSmF2YSBzb3VyY2UgY29kZSByb290IGRpcmVjdG9yaWVzLgogVGhpcyBhIHN0cmluZyBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBkaXJlY3RvcnkgcGF0aHMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbi4KIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9OQVRJVkVfTElCX0RFUEVOREVOQ0lFUy5yc3QKaW5kZXggNzU5YTM3Yi4uM2FhNzQxZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9OQVRJVkVfTElCX0RFUEVOREVOQ0lFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2V0IHRoZSBBbmRyb2lkIHByb3BlcnR5IHRoYXQgc3BlY2lmaWVzIHRoZSAuc28gZGVwZW5kZW5jaWVzLgogVGhpcyBpcyBhIHN0cmluZyBwcm9wZXJ0eS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMucnN0CmluZGV4IGQwY2QyOWQuLjk4MjAwZDkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2V0IHRoZSBBbmRyb2lkIHByb3BlcnR5IHRoYXQgc3BlY2lmaWVzIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgdGhlIGBgLnNvYGAKIGxpYnJhcmllcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0NFU1NfTUFYLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9DRVNTX01BWC5yc3QKaW5kZXggODQ3YWNhZS4uMGI2YWJhNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0NFU1NfTUFYLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfUFJPQ0VTU19NQVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9QUk9DRVNTX01BWAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2V0IHRoZSBBbmRyb2lkIHByb3BlcnR5IHRoYXQgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYQogcGFyYWxsZWwgQW5kcm9pZCBOREsgY29tcGlsZXIgcHJvY2Vzc2VzIChlLmcuIGBgNGBgKS4KIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0dVQVJELnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9HVUFSRC5yc3QKaW5kZXggZGFmYzUxZS4uYjVjZTE2NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0dVQVJELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfUFJPR1VBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9QUk9HVUFSRAogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlIHRoYXQgZW5hYmxlcyB0aGUgUHJvR3VhcmQgdG9vbCB0byBzaHJpbmssCiBvcHRpbWl6ZSwgYW5kIG9iZnVzY2F0ZSB0aGUgY29kZSBieSByZW1vdmluZyB1bnVzZWQgY29kZSBhbmQgcmVuYW1pbmcKIGNsYXNzZXMsIGZpZWxkcywgYW5kIG1ldGhvZHMgd2l0aCBzZW1hbnRpY2FsbHkgb2JzY3VyZSBuYW1lcy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgucnN0CmluZGV4IDBlOTI5ZDEuLjZhYzU5ZDggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIFByb0d1YXJkCiBjb25maWcgZmlsZS4gTGVhdmUgZW1wdHkgdG8gdXNlIHRoZSBkZWZhdWx0IG9uZS4KIFRoaXMgYSBzdHJpbmcgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgcGF0aCB0byBQcm9HdWFyZCBjb25maWcgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfU0VDVVJFX1BST1BTX1BBVEgucnN0CmluZGV4IDk1MzNmMWEuLmYyZmZhMmUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfU0VDVVJFX1BST1BTX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IHN0YXRlcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlY3VyZSBwcm9wZXJ0aWVzIGZpbGUuCiBUaGlzIGlzIGEgc3RyaW5nIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGZpbGUgcGF0aC4KIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX1NLSVBfQU5UX1NURVAucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1NLSVBfQU5UX1NURVAucnN0CmluZGV4IDYzNjE4OTYuLjFhNTRiY2UgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TS0lQX0FOVF9TVEVQLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfU0tJUF9BTlRfU1RFUC5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX1NLSVBfQU5UX1NURVAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2V0IHRoZSBBbmRyb2lkIHByb3BlcnR5IHRoYXQgZGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBza2lwIHRoZSBBbnQgYnVpbGQgc3RlcC4KIFRoaXMgaXMgYSBib29sZWFuIHByb3BlcnR5IGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfQU5EUk9JRF9TS0lQX0FOVF9TVEVQYCB2YXJpYWJsZSBpZiBpdCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcyBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX1NUTF9UWVBFLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TVExfVFlQRS5yc3QKaW5kZXggMzg2ZTk2ZS4uYzgzNzEyYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX1NUTF9UWVBFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfU1RMX1RZUEUucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9TVExfVFlQRQogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCBOVklESUEgTnNpZ2h0IFRlZ3JhIFZpc3VhbCBTdHVkaW8KIEVkaXRpb25gLCB0aGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgdHlwZSBvZiBTVEwgc3VwcG9ydCBmb3IgdGhlIHByb2plY3QuCiBUaGlzIGlzIGEgc3RyaW5nIHByb3BlcnR5IHRoYXQgY291bGQgc2V0IHRvIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fQlVJTERfRElSLnJzdCBiL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9CVUlMRF9ESVIucnN0CmluZGV4IDkwOWIxNGMuLmZmNDJhZTggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9CVUlMRF9ESVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9CVUlMRF9ESVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQVVUT0dFTl9CVUlMRF9ESVIKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBEaXJlY3Rvcnkgd2hlcmUgOnByb3BfdGd0OmBBVVRPTU9DYCwgOnByb3BfdGd0OmBBVVRPVUlDYCBhbmQgOnByb3BfdGd0OmBBVVRPUkNDYAogZ2VuZXJhdGUgZmlsZXMgZm9yIHRoZSB0YXJnZXQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9PUklHSU5fREVQRU5EUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fT1JJR0lOX0RFUEVORFMucnN0CmluZGV4IDAyMmJhYjUuLjU2MzE5MGEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9PUklHSU5fREVQRU5EUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPR0VOX09SSUdJTl9ERVBFTkRTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9HRU5fT1JJR0lOX0RFUEVORFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBTd2l0Y2ggZm9yIGZvcndhcmRpbmcgb3JpZ2luIHRhcmdldCBkZXBlbmRlbmNpZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcKIGBgX2F1dG9nZW5gYCB0YXJnZXQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9QQVJBTExFTC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fUEFSQUxMRUwucnN0CmluZGV4IDk2OGI2MTkuLjY2M2I1NGUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9QQVJBTExFTC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPR0VOX1BBUkFMTEVMLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9HRU5fUEFSQUxMRUwKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBOdW1iZXIgb2YgcGFyYWxsZWwgYGBtb2NgYCBvciBgYHVpY2BgIHByb2Nlc3NlcyB0byBzdGFydCB3aGVuIHVzaW5nCiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZCA6cHJvcF90Z3Q6YEFVVE9VSUNgLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FUy5yc3QKaW5kZXggNTdhNjQ3Zi4uODk5ODI4NCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogQm9vbGVhbiB2YWx1ZSB1c2VkIGJ5IDpwcm9wX3RndDpgQVVUT01PQ2AgdG8gZGV0ZXJtaW5lIGlmIHRoZQogY29tcGlsZXIgcHJlIGRlZmluaXRpb25zIGZpbGUgYGBtb2NfcHJlZGVmcy5oYGAgc2hvdWxkIGJlIGdlbmVyYXRlZC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BVVRPTU9DX0RFUEVORF9GSUxURVJTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19ERVBFTkRfRklMVEVSUy5yc3QKaW5kZXggNmVkYTI2Yy4uMWYzMTcwMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BVVRPTU9DX0RFUEVORF9GSUxURVJTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQVVUT01PQ19ERVBFTkRfRklMVEVSUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogRmlsdGVyIGRlZmluaXRpb25zIHVzZWQgYnkgOnByb3BfdGd0OmBBVVRPTU9DYCB0byBleHRyYWN0IGZpbGUgbmFtZXMgZnJvbSBhCiBzb3VyY2UgZmlsZSB0aGF0IGFyZSByZWdpc3RlcmVkIGFzIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGZvciB0aGUKIGBgbW9jYGAgZmlsZSBvZiB0aGUgc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfRVhFQ1VUQUJMRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfRVhFQ1VUQUJMRS5yc3QKaW5kZXggNmI2NmNlOC4uZjRiODM5NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BVVRPTU9DX0VYRUNVVEFCTEUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19FWEVDVVRBQkxFLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9NT0NfRVhFQ1VUQUJMRQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogOnByb3BfdGd0OmBBVVRPTU9DX0VYRUNVVEFCTEVgIGlzIGZpbGUgcGF0aCBwb2ludGluZyB0byB0aGUgYGBtb2NgYAogZXhlY3V0YWJsZSB0byB1c2UgZm9yIDpwcm9wX3RndDpgQVVUT01PQ2AgZW5hYmxlZCBmaWxlcy4gU2V0dGluZwogdGhpcyBwcm9wZXJ0eSB3aWxsIG1ha2UgQ01ha2Ugc2tpcCB0aGUgYXV0b21hdGljIGRldGVjdGlvbiBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19NQUNST19OQU1FUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfTUFDUk9fTkFNRVMucnN0CmluZGV4IDUzMjliYmEuLmE1MzgxMGQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19NQUNST19OQU1FUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX01BQ1JPX05BTUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9NT0NfTUFDUk9fTkFNRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBBIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBsaXN0IG9mIG1hY3JvIG5hbWVzIHVzZWQgYnkKIDpwcm9wX3RndDpgQVVUT01PQ2AgdG8gZGV0ZXJtaW5lIGlmIGEgQysrIGZpbGUgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGJ5IGBgbW9jYGAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfUEFUSF9QUkVGSVgucnN0CmluZGV4IDNlMzA1OWQuLjRmODVjMTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX1BBVEhfUFJFRklYLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9NT0NfUEFUSF9QUkVGSVgKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBXaGVuIHRoaXMgcHJvcGVydHkgaXMgYGBPTmBgLCBDTWFrZSB3aWxsIGdlbmVyYXRlIHRoZSBgYC1wYGAgcGF0aCBwcmVmaXgKIG9wdGlvbiBmb3IgYGBtb2NgYCBvbiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGVuYWJsZWQgUXQgdGFyZ2V0cy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BVVRPUkNDX0VYRUNVVEFCTEUucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPUkNDX0VYRUNVVEFCTEUucnN0CmluZGV4IGNhMGZiZDcuLjRmODVmYmEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQ19FWEVDVVRBQkxFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FVVE9SQ0NfRVhFQ1VUQUJMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBBVVRPUkNDX0VYRUNVVEFCTEUKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIDpwcm9wX3RndDpgQVVUT1JDQ19FWEVDVVRBQkxFYCBpcyBmaWxlIHBhdGggcG9pbnRpbmcgdG8gdGhlIGBgcmNjYGAKIGV4ZWN1dGFibGUgdG8gdXNlIGZvciA6cHJvcF90Z3Q6YEFVVE9SQ0NgIGVuYWJsZWQgZmlsZXMuIFNldHRpbmcKIHRoaXMgcHJvcGVydHkgd2lsbCBtYWtlIENNYWtlIHNraXAgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9VSUNfRVhFQ1VUQUJMRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9VSUNfRVhFQ1VUQUJMRS5yc3QKaW5kZXggMDNiZDU1NC4uNTk2NjMyNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BVVRPVUlDX0VYRUNVVEFCTEUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19FWEVDVVRBQkxFLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9VSUNfRVhFQ1VUQUJMRQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogOnByb3BfdGd0OmBBVVRPVUlDX0VYRUNVVEFCTEVgIGlzIGZpbGUgcGF0aCBwb2ludGluZyB0byB0aGUgYGB1aWNgYAogZXhlY3V0YWJsZSB0byB1c2UgZm9yIDpwcm9wX3RndDpgQVVUT1VJQ2AgZW5hYmxlZCBmaWxlcy4gU2V0dGluZwogdGhpcyBwcm9wZXJ0eSB3aWxsIG1ha2UgQ01ha2Ugc2tpcCB0aGUgYXV0b21hdGljIGRldGVjdGlvbiBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19TRUFSQ0hfUEFUSFMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPVUlDX1NFQVJDSF9QQVRIUy5yc3QKaW5kZXggOTZkOWY4OS4uODdmZWE0OCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BVVRPVUlDX1NFQVJDSF9QQVRIUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPVUlDX1NFQVJDSF9QQVRIUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBVVRPVUlDX1NFQVJDSF9QQVRIUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFNlYXJjaCBwYXRoIGxpc3QgdXNlZCBieSA6cHJvcF90Z3Q6YEFVVE9VSUNgIHRvIGZpbmQgaW5jbHVkZWQKIGBgLnVpYGAgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQklOQVJZX0RJUi5yc3QgYi9IZWxwL3Byb3BfdGd0L0JJTkFSWV9ESVIucnN0CmluZGV4IDI0NmY3ZTYuLmJlYWIxMmMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQklOQVJZX0RJUi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9CSU5BUllfRElSLnJzdApAQCAtMSw2ICsxLDggQEAKIEJJTkFSWV9ESVIKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoaXMgcmVhZC1vbmx5IHByb3BlcnR5IHJlcG9ydHMgdGhlIHZhbHVlIG9mIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJgIHZhcmlhYmxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2gKIHRoZSB0YXJnZXQgd2FzIGRlZmluZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0JVSUxEX1JQQVRILnJzdCBiL0hlbHAvcHJvcF90Z3QvQlVJTERfUlBBVEgucnN0CmluZGV4IGQ5NzhiOTQuLjFmOTE3YTUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQlVJTERfUlBBVEgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQlVJTERfUlBBVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogQlVJTERfUlBBVEgKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBBIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBzcGVjaWZ5aW5nIHJ1bnRpbWUgcGF0aCAoYGBSUEFUSGBgKQogZW50cmllcyB0byBhZGQgdG8gYmluYXJpZXMgbGlua2VkIGluIHRoZSBidWlsZCB0cmVlIChmb3IgcGxhdGZvcm1zIHRoYXQKIHN1cHBvcnQgaXQpLiAgVGhlIGVudHJpZXMgd2lsbCAqbm90KiBiZSB1c2VkIGZvciBiaW5hcmllcyBpbiB0aGUgaW5zdGFsbApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9CVUlMRF9SUEFUSF9VU0VfT1JJR0lOLnJzdCBiL0hlbHAvcHJvcF90Z3QvQlVJTERfUlBBVEhfVVNFX09SSUdJTi5yc3QKaW5kZXggMzM3ODc5Ny4uMmNkZmEwZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9CVUlMRF9SUEFUSF9VU0VfT1JJR0lOLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0JVSUxEX1JQQVRIX1VTRV9PUklHSU4ucnN0CkBAIC0xLDYgKzEsOCBAQAogQlVJTERfUlBBVEhfVVNFX09SSUdJTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIFdoZXRoZXIgdG8gdXNlIHJlbGF0aXZlIHBhdGhzIGZvciB0aGUgYnVpbGQgYGBSUEFUSGBgLgogCiBUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSLnJzdCBiL0hlbHAvcHJvcF90Z3QvQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSLnJzdAppbmRleCBiYmI5YTI0Li4wNzNkY2U1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0JVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9CVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIGBgQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSYGAgaXMgYSBib29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciB0aGUgbWFjT1MKIGBgaW5zdGFsbF9uYW1lYGAgb2YgYSB0YXJnZXQgaW4gdGhlIGJ1aWxkIHRyZWUgdXNlcyB0aGUgZGlyZWN0b3J5IGdpdmVuIGJ5CiA6cHJvcF90Z3Q6YElOU1RBTExfTkFNRV9ESVJgLiAgVGhpcyBzZXR0aW5nIG9ubHkgYXBwbGllcyB0byB0YXJnZXRzIG9uIG1hY09TLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01NT05fTEFOR1VBR0VfUlVOVElNRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FLnJzdAppbmRleCAwNTJhYzZkLi5hZGZhNmY3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIENPTU1PTl9MQU5HVUFHRV9SVU5USU1FCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEJ5IHNldHRpbmcgdGhpcyB0YXJnZXQgcHJvcGVydHksIHRoZSB0YXJnZXQgaXMgY29uZmlndXJlZCB0byBidWlsZCB3aXRoCiBgYEMrKy9DTElgYCBzdXBwb3J0LgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfRkVBVFVSRVMucnN0IGIvSGVscC9wcm9wX3RndC9DT01QSUxFX0ZFQVRVUkVTLnJzdAppbmRleCA0NmFlYzRmLi45YjkzN2VkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfRkVBVFVSRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9GRUFUVVJFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDT01QSUxFX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBDb21waWxlciBmZWF0dXJlcyBlbmFibGVkIGZvciB0aGlzIHRhcmdldC4KIAogVGhlIGxpc3Qgb2YgZmVhdHVyZXMgaW4gdGhpcyBwcm9wZXJ0eSBhcmUgYSBzdWJzZXQgb2YgdGhlIGZlYXR1cmVzIGxpc3RlZApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9QREJfTkFNRS5yc3QKaW5kZXggMjRhOWY2Mi4uYjc2YWZlYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX05BTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ09NUElMRV9QREJfTkFNRQogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogT3V0cHV0IG5hbWUgZm9yIHRoZSBNUyBkZWJ1ZyBzeW1ib2wgYGAucGRiYGAgZmlsZSBnZW5lcmF0ZWQgYnkgdGhlCiBjb21waWxlciB3aGlsZSBidWlsZGluZyBzb3VyY2UgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9QREJfTkFNRV9DT05GSUcucnN0IGIvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FX0NPTkZJRy5yc3QKaW5kZXggZTQwNzdmNS4uNGM5ODI1ZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FX0NPTkZJRy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FX0NPTkZJRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDT01QSUxFX1BEQl9OQU1FXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBQZXItY29uZmlndXJhdGlvbiBvdXRwdXQgbmFtZSBmb3IgdGhlIE1TIGRlYnVnIHN5bWJvbCBgYC5wZGJgYCBmaWxlCiBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoaWxlIGJ1aWxkaW5nIHNvdXJjZSBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWS5yc3QKaW5kZXggMzRmNDliZS4uM2YzZGY2NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogT3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIE1TIGRlYnVnIHN5bWJvbCBgYC5wZGJgYCBmaWxlCiBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoaWxlIGJ1aWxkaW5nIHNvdXJjZSBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAppbmRleCBmMjYxNzU2Li5jMjVjMmZjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfPENPTkZJRz4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFBlci1jb25maWd1cmF0aW9uIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBNUyBkZWJ1ZyBzeW1ib2wgYGAucGRiYGAgZmlsZQogZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB3aGlsZSBidWlsZGluZyBzb3VyY2UgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ09ORklHX1BPU1RGSVgucnN0IGIvSGVscC9wcm9wX3RndC9DT05GSUdfUE9TVEZJWC5yc3QKaW5kZXggMTFiNTBiOS4uNWMyZmJkNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT05GSUdfUE9TVEZJWC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DT05GSUdfUE9TVEZJWC5yc3QKQEAgLTgsMyArOCw2IEBACiB0YXJnZXRzLCB0aGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKIENNQUtFXzxDT05GSUc+X1BPU1RGSVggaWYgaXQgaXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMgY3JlYXRlZC4gIFRoaXMKIHByb3BlcnR5IGlzIGlnbm9yZWQgb24gdGhlIE1hYyBmb3IgRnJhbWV3b3JrcyBhbmQgQXBwIEJ1bmRsZXMuCisKK0ZvciBtYWNPUyBzZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz5gCit0YXJnZXQgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NST1NTQ09NUElMSU5HX0VNVUxBVE9SLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CmluZGV4IDg3YzU5NzguLmQ3ZmI5YjEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBVc2UgdGhlIGdpdmVuIGVtdWxhdG9yIHRvIHJ1biBleGVjdXRhYmxlcyBjcmVhdGVkIHdoZW4gY3Jvc3Njb21waWxpbmcuCiBUaGlzIGNvbW1hbmQgd2lsbCBiZSBhZGRlZCBhcyBhIHByZWZpeCB0byA6Y29tbWFuZDpgYWRkX3Rlc3RgLAogOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAsIGFuZCA6Y29tbWFuZDpgYWRkX2N1c3RvbV90YXJnZXRgIGNvbW1hbmRzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NVREFfQVJDSElURUNUVVJFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfQVJDSElURUNUVVJFUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2Yjc2OQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9BUkNISVRFQ1RVUkVTLnJzdApAQCAtMCwwICsxLDQyIEBACitDVURBX0FSQ0hJVEVDVFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0xpc3Qgb2YgYXJjaGl0ZWN0dXJlcyB0byBnZW5lcmF0ZSBkZXZpY2UgY29kZSBmb3IuCisKK0FuIGFyY2hpdGVjdHVyZSBjYW4gYmUgc3VmZml4ZWQgYnkgZWl0aGVyIGBgLXJlYWxgYCBvciBgYC12aXJ0dWFsYGAgdG8gc3BlY2lmeQordGhlIGtpbmQgb2YgYXJjaGl0ZWN0dXJlIHRvIGdlbmVyYXRlIGNvZGUgZm9yLgorSWYgbm8gc3VmZml4IGlzIGdpdmVuIHRoZW4gY29kZSBpcyBnZW5lcmF0ZWQgZm9yIGJvdGggcmVhbCBhbmQgdmlydHVhbAorYXJjaGl0ZWN0dXJlcy4KKworQSBub24tZW1wdHkgZmFsc2UgdmFsdWUgKGUuZy4gYGBPRkZgYCkgZGlzYWJsZXMgYWRkaW5nIGFyY2hpdGVjdHVyZXMuCitUaGlzIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgcGFja2FnZXJzIGFuZCByYXJlIGNhc2VzIHdoZXJlIGZ1bGwgY29udHJvbAorb3ZlciB0aGUgcGFzc2VkIGZsYWdzIGlzIHJlcXVpcmVkLgorCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVNgCit2YXJpYWJsZSBpZiBpdCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcyBjcmVhdGVkLgorCitUaGUgYGBDVURBX0FSQ0hJVEVDVFVSRVNgYCB0YXJnZXQgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gYSBub24tZW1wdHkgdmFsdWUgb24gdGFyZ2V0cwordGhhdCBjb21waWxlIENVREEgc291cmNlcywgb3IgaXQgaXMgYW4gZXJyb3IuICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDRgLgorCitFeGFtcGxlcworXl5eXl5eXl4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0Z3QgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIDM1IDUwIDcyKQorCitHZW5lcmF0ZXMgY29kZSBmb3IgcmVhbCBhbmQgdmlydHVhbCBhcmNoaXRlY3R1cmVzIGBgMzBgYCwgYGA1MGBgIGFuZCBgYDcyYGAuCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGd0IFBST1BFUlRZIENVREFfQVJDSElURUNUVVJFUyA3MC1yZWFsIDcyLXZpcnR1YWwpCisKK0dlbmVyYXRlcyBjb2RlIGZvciByZWFsIGFyY2hpdGVjdHVyZSBgYDcwYGAgYW5kIHZpcnR1YWwgYXJjaGl0ZWN0dXJlIGBgNzJgYC4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0Z3QgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIE9GRikKKworQ01ha2Ugd2lsbCBub3QgcGFzcyBhbnkgYXJjaGl0ZWN0dXJlIGZsYWdzIHRvIHRoZSBjb21waWxlci4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9FWFRFTlNJT05TLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9FWFRFTlNJT05TLnJzdAppbmRleCAwOThjYTNjLi4yZGRiYTBiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NVREFfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DVURBX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1VEQV9FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIEJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIGNvbXBpbGVyIHNwZWNpZmljIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIHNob3VsZCBiZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DVURBX1BUWF9DT01QSUxBVElPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfUFRYX0NPTVBJTEFUSU9OLnJzdAppbmRleCAwZWUzNzJiLi40ZTkwYWZlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NVREFfUFRYX0NPTVBJTEFUSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NVREFfUFRYX0NPTVBJTEFUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFfUFRYX0NPTVBJTEFUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogQ29tcGlsZSBDVURBIHNvdXJjZXMgdG8gYGAucHR4YGAgZmlsZXMgaW5zdGVhZCBvZiBgYC5vYmpgYCBmaWxlcwogd2l0aGluIDpyZWY6YE9iamVjdCBMaWJyYXJpZXNgLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUy5yc3QKaW5kZXggZGFlOTYwZi4uODE5Y2UzZSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBDVURBIG9ubHk6IEVuYWJsZXMgZGV2aWNlIGxpbmtpbmcgZm9yIHRoZSBzcGVjaWZpYyBsaWJyYXJ5IHRhcmdldCB3aGVyZQogcmVxdWlyZWQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0IGIvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QKaW5kZXggMTFiMzQ0Yy4uZTkzN2ZjNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDVURBX1JVTlRJTUVfTElCUkFSWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBTZWxlY3QgdGhlIENVREEgcnVudGltZSBsaWJyYXJ5IGZvciB1c2UgYnkgY29tcGlsZXJzIHRhcmdldGluZyB0aGUgQ1VEQSBsYW5ndWFnZS4KIAogVGhlIGFsbG93ZWQgY2FzZSBpbnNlbnNpdGl2ZSB2YWx1ZXMgYXJlOgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OLnJzdAppbmRleCBkMzA2ZDdmLi4zMjIyMmY5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogQ1VEQSBvbmx5OiBFbmFibGVzIHNlcGFyYXRlIGNvbXBpbGF0aW9uIG9mIGRldmljZSBjb2RlCiAKIElmIHNldCB0aGlzIHdpbGwgZW5hYmxlIHNlcGFyYWJsZSBjb21waWxhdGlvbiBmb3IgYWxsIENVREEgZmlsZXMgZm9yCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NVREFfU1RBTkRBUkQucnN0IGIvSGVscC9wcm9wX3RndC9DVURBX1NUQU5EQVJELnJzdAppbmRleCBhM2EyZjU2Li5mY2M0NzI1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NVREFfU1RBTkRBUkQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9TVEFOREFSRC5yc3QKQEAgLTEsMTMgKzEsMTUgQEAKIENVREFfU1RBTkRBUkQKIC0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFRoZSBDVURBL0MrKyBzdGFuZGFyZCB3aG9zZSBmZWF0dXJlcyBhcmUgcmVxdWVzdGVkIHRvIGJ1aWxkIHRoaXMgdGFyZ2V0LgogCiBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgQ1VEQS9DKysgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZAogdG8gYnVpbGQgdGhpcyB0YXJnZXQuICBGb3Igc29tZSBjb21waWxlcnMsIHRoaXMgcmVzdWx0cyBpbiBhZGRpbmcgYQogZmxhZyBzdWNoIGFzIGBgLXN0ZD1nbnUrKzExYGAgdG8gdGhlIGNvbXBpbGUgbGluZS4KIAotU3VwcG9ydGVkIHZhbHVlcyBhcmUgYGA5OGBgLCBgYDExYGAsIGBgMTRgYC4KK1N1cHBvcnRlZCB2YWx1ZXMgYXJlIGBgOThgYCwgYGAwM2BgLCBgYDExYGAsIGBgMTRgYCwgYGAxN2BgLCBgYDIwYGAuCiAKIElmIHRoZSB2YWx1ZSByZXF1ZXN0ZWQgZG9lcyBub3QgcmVzdWx0IGluIGEgY29tcGlsZSBmbGFnIGJlaW5nIGFkZGVkIGZvcgogdGhlIGNvbXBpbGVyIGluIHVzZSwgYSBwcmV2aW91cyBzdGFuZGFyZCBmbGFnIHdpbGwgYmUgYWRkZWQgaW5zdGVhZC4gIFRoaXMKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IGIyZDViMjguLmI5MjM4MDAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9TVEFOREFSRF9SRVFVSVJFRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DVURBX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIEJvb2xlYW4gZGVzY3JpYmluZyB3aGV0aGVyIHRoZSB2YWx1ZSBvZiA6cHJvcF90Z3Q6YENVREFfU1RBTkRBUkRgIGlzIGEgcmVxdWlyZW1lbnQuCiAKIElmIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIGBgT05gYCwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NYWF9FWFRFTlNJT05TLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1hYX0VYVEVOU0lPTlMucnN0CmluZGV4IDI4MGJiM2EuLmJkYTUzMWUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ1hYX0VYVEVOU0lPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1hYX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1hYX0VYVEVOU0lPTlMKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBCb29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgY29tcGlsZXIgc3BlY2lmaWMgZXh0ZW5zaW9ucyBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1hYX1NUQU5EQVJELnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1hYX1NUQU5EQVJELnJzdAppbmRleCBjY2MwMTQ3Li5mMzIyZmZlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NYWF9TVEFOREFSRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DWFhfU1RBTkRBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1hYX1NUQU5EQVJECiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFRoZSBDKysgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZCB0byBidWlsZCB0aGlzIHRhcmdldC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIEMrKyBzdGFuZGFyZCB3aG9zZSBmZWF0dXJlcyBhcmUgcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3Byb3BfdGd0L0NYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKaW5kZXggNjk3ZDdmNi4uMmVhMjIxNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIENYWF9TVEFOREFSRF9SRVFVSVJFRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBCb29sZWFuIGRlc2NyaWJpbmcgd2hldGhlciB0aGUgdmFsdWUgb2YgOnByb3BfdGd0OmBDWFhfU1RBTkRBUkRgIGlzIGEgcmVxdWlyZW1lbnQuCiAKIElmIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIGBgT05gYCwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NfRVhURU5TSU9OUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NfRVhURU5TSU9OUy5yc3QKaW5kZXggMDViMTRjZS4uYjJhYmI0NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DX0VYVEVOU0lPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ19FWFRFTlNJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENfRVhURU5TSU9OUwogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBCb29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgY29tcGlsZXIgc3BlY2lmaWMgZXh0ZW5zaW9ucyBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ19TVEFOREFSRC5yc3QgYi9IZWxwL3Byb3BfdGd0L0NfU1RBTkRBUkQucnN0CmluZGV4IGU3Zjc5MDQuLjk5OWE5ZTcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ19TVEFOREFSRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DX1NUQU5EQVJELnJzdApAQCAtMSwxMyArMSwxNSBAQAogQ19TVEFOREFSRAogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogVGhlIEMgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZCB0byBidWlsZCB0aGlzIHRhcmdldC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIEMgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZAogdG8gYnVpbGQgdGhpcyB0YXJnZXQuICBGb3Igc29tZSBjb21waWxlcnMsIHRoaXMgcmVzdWx0cyBpbiBhZGRpbmcgYQogZmxhZyBzdWNoIGFzIGBgLXN0ZD1nbnUxMWBgIHRvIHRoZSBjb21waWxlIGxpbmUuICBGb3IgY29tcGlsZXJzIHRoYXQKLWhhdmUgbm8gbm90aW9uIG9mIGEgc3RhbmRhcmQgbGV2ZWwsIHN1Y2ggYXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgYmVmb3JlCi0yMDE1IFVwZGF0ZSAzLCB0aGlzIGhhcyBubyBlZmZlY3QuCitoYXZlIG5vIG5vdGlvbiBvZiBhIEMgc3RhbmRhcmQgbGV2ZWwsIHN1Y2ggYXMgYWxsIHZlcnNpb25zIG9mCitNU1ZDIGtub3duIGFzIG9mIHRoaXMgdmVyc2lvbiBvZiBDTWFrZSwgdGhpcyBoYXMgbm8gZWZmZWN0LgogCiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBgYDkwYGAsIGBgOTlgYCBhbmQgYGAxMWBgLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC9wcm9wX3RndC9DX1NUQU5EQVJEX1JFUVVJUkVELnJzdAppbmRleCBhY2ZhZDk4Li5jMWI1OGEwIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDX1NUQU5EQVJEX1JFUVVJUkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBCb29sZWFuIGRlc2NyaWJpbmcgd2hldGhlciB0aGUgdmFsdWUgb2YgOnByb3BfdGd0OmBDX1NUQU5EQVJEYCBpcyBhIHJlcXVpcmVtZW50LgogCiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBgYE9OYGAsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERUJVR19QT1NURklYLnJzdCBiL0hlbHAvcHJvcF90Z3QvREVCVUdfUE9TVEZJWC5yc3QKaW5kZXggMDRlMzEyZS4uZWNhN2NiMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9ERUJVR19QT1NURklYLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RFQlVHX1BPU1RGSVgucnN0CkBAIC0xLDcgKzEsNyBAQAogREVCVUdfUE9TVEZJWAogLS0tLS0tLS0tLS0tLQogCi1TZWUgdGFyZ2V0IHByb3BlcnR5IGBgPENPTkZJRz5fUE9TVEZJWGBgLgorU2VlIHRhcmdldCBwcm9wZXJ0eSA6cHJvcF90Z3Q6YDxDT05GSUc+X1BPU1RGSVhgLgogCi1UaGlzIHByb3BlcnR5IGlzIGEgc3BlY2lhbCBjYXNlIG9mIHRoZSBtb3JlLWdlbmVyYWwgYGA8Q09ORklHPl9QT1NURklYYGAKK1RoaXMgcHJvcGVydHkgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgdGhlIG1vcmUtZ2VuZXJhbCA6cHJvcF90Z3Q6YDxDT05GSUc+X1BPU1RGSVhgCiBwcm9wZXJ0eSBmb3IgdGhlIGBgREVCVUdgYCBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVMucnN0IGIvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVMucnN0CmluZGV4IDVlOWMxOTEuLmYxMWZlN2MgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvREVQTE9ZTUVOVF9BRERJVElPTkFMX0ZJTEVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RFUExPWU1FTlRfQURESVRJT05BTF9GSUxFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFNldCB0aGUgV2luQ0UgcHJvamVjdCBgYEFkZGl0aW9uYWxGaWxlc2BgIGluIGBgRGVwbG95bWVudFRvb2xgYCBpbiBgYC52Y3Byb2pgYAogZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSA6Z2VuZXJhdG9yOmBWaXN1YWwgU3R1ZGlvIDkgMjAwOGAgZ2VuZXJhdG9yLgogVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBkZWJ1ZyBvbiByZW1vdGUgV2luQ0UgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkucnN0IGIvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkucnN0CmluZGV4IDM2ODc2OGEuLjA2ODAyMzggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvREVQTE9ZTUVOVF9SRU1PVEVfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RFUExPWU1FTlRfUkVNT1RFX0RJUkVDVE9SWS5yc3QKQEAgLTEsNiArMSw4IEBACiBERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogU2V0IHRoZSBXaW5DRSBwcm9qZWN0IGBgUmVtb3RlRGlyZWN0b3J5YGAgaW4gYGBEZXBsb3ltZW50VG9vbGBgIGFuZAogYGBSZW1vdGVFeGVjdXRhYmxlYGAgaW4gYGBEZWJ1Z2dlclRvb2xgYCBpbiBgYC52Y3Byb2pgYCBmaWxlcyBnZW5lcmF0ZWQKIGJ5IHRoZSA6Z2VuZXJhdG9yOmBWaXN1YWwgU3R1ZGlvIDkgMjAwOGAgZ2VuZXJhdG9yLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERVBSRUNBVElPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0RFUFJFQ0FUSU9OLnJzdAppbmRleCBmZWYyZTJlLi40NWNhODQ4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0RFUFJFQ0FUSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RFUFJFQ0FUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIERFUFJFQ0FUSU9OCiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIERlcHJlY2F0aW9uIG1lc3NhZ2UgZnJvbSBpbXBvcnRlZCB0YXJnZXQncyBkZXZlbG9wZXIuCiAKIGBgREVQUkVDQVRJT05gYCBpcyB0aGUgbWVzc2FnZSByZWdhcmRpbmcgYSBkZXByZWNhdGlvbiBzdGF0dXMgdG8gYmUgZGlzcGxheWVkCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0RJU0FCTEVfUFJFQ09NUElMRV9IRUFERVJTLnJzdCBiL0hlbHAvcHJvcF90Z3QvRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CmluZGV4IDRjZWYwMjMuLjdiMzgyNmIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CkBAIC0xLDYgKzEsOCBAQAogRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogRGlzYWJsZXMgdGhlIHByZWNvbXBpbGF0aW9uIG9mIGhlYWRlciBmaWxlcyBzcGVjaWZpZWQgYnkKIDpwcm9wX3RndDpgUFJFQ09NUElMRV9IRUFERVJTYCBwcm9wZXJ0eS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSy5yc3QgYi9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdAppbmRleCA4Njk4ZWI2Li4zYmE0ZTI1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdApAQCAtMSw2ICsxLDggQEAKIERPVE5FVF9UQVJHRVRfRlJBTUVXT1JLCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFNwZWNpZnkgdGhlIC5ORVQgdGFyZ2V0IGZyYW1ld29yay4KIAogVXNlZCB0byBzcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgZm9yIEMrKy9DTEkgYW5kIEMjLiAgRm9yCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAppbmRleCBiMzNmNGZiLi5mYmQxYWFiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogU3BlY2lmeSB0aGUgLk5FVCB0YXJnZXQgZnJhbWV3b3JrIHZlcnNpb24uCiAKIFVzZWQgdG8gc3BlY2lmeSB0aGUgLk5FVCB0YXJnZXQgZnJhbWV3b3JrIHZlcnNpb24gZm9yIEMrKy9DTEkgYW5kIEMjLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9FWENMVURFX0ZST01fQUxMLnJzdCBiL0hlbHAvcHJvcF90Z3QvRVhDTFVERV9GUk9NX0FMTC5yc3QKaW5kZXggM2FhMjk2ZC4uYzllY2UyMiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9FWENMVURFX0ZST01fQUxMLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0VYQ0xVREVfRlJPTV9BTEwucnN0CkBAIC0xMyw5ICsxMyw5IEBACiAKIFdpdGggYGBFWENMVURFX0ZST01fQUxMYGAgc2V0IHRvIGZhbHNlIG9yIG5vdCBzZXQgYXQgYWxsLCB0aGUgdGFyZ2V0CiB3aWxsIGJlIGJyb3VnaHQgdXAgdG8gZGF0ZSBhcyBwYXJ0IG9mIGRvaW5nIGEgYGBtYWtlIGluc3RhbGxgYCBvciBpdHMKLWVxdWl2YWxlbnQgZm9yIHRoZSBDTWFrZSBnZW5lcmF0b3IgYmVpbmcgdXNlZC4gIElmIGEgdGFyZ2V0IGhhcwotYGBFWENMVURFX0ZST01fQUxMYGAgc2V0IHRvIHRydWUsIHRoZW4gYW55IGF0dGVtcHQgdG8gaW5zdGFsbCB0aGF0Ci10YXJnZXQgaGFzIHVuZGVmaW5lZCBiZWhhdmlvci4gIE5vdGUgdGhhdCBzdWNoIGEgdGFyZ2V0IGNhbiBzdGlsbCBzYWZlbHkKLWJlIGxpc3RlZCBpbiBhbiA6Y29tbWFuZDpgaW5zdGFsbChUQVJHRVRTKWAgY29tbWFuZCBhcyBsb25nIGFzIHRoZSBpbnN0YWxsCi1jb21wb25lbnRzIHRoZSB0YXJnZXQgYmVsb25ncyB0byBhcmUgbm90IHBhcnQgb2YgdGhlIHNldCBvZiBjb21wb25lbnRzCi10aGF0IGFueXRoaW5nIHRyaWVzIHRvIGluc3RhbGwuCitlcXVpdmFsZW50IGZvciB0aGUgQ01ha2UgZ2VuZXJhdG9yIGJlaW5nIHVzZWQuCisKK0lmIGEgdGFyZ2V0IGhhcyBgYEVYQ0xVREVfRlJPTV9BTExgYCBzZXQgdG8gdHJ1ZSwgaXQgbWF5IHN0aWxsIGJlIGxpc3RlZAoraW4gYW4gOmNvbW1hbmQ6YGluc3RhbGwoVEFSR0VUUylgIGNvbW1hbmQsIGJ1dCB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoYXQgdGhlIHRhcmdldCdzIGJ1aWxkIGFydGlmYWN0cyBhcmUgbm90IG1pc3Npbmcgb3Igb3V0ZGF0ZWQgd2hlbgorYW4gaW5zdGFsbCBpcyBwZXJmb3JtZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0VYUE9SVF9QUk9QRVJUSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvRVhQT1JUX1BST1BFUlRJRVMucnN0CmluZGV4IGJjZjQ3YTYuLjM0YzA1NGYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvRVhQT1JUX1BST1BFUlRJRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvRVhQT1JUX1BST1BFUlRJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogRVhQT1JUX1BST1BFUlRJRVMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogTGlzdCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gZXhwb3J0IGZvciBhIHRhcmdldC4KIAogVGhpcyBwcm9wZXJ0eSBjb250YWlucyBhIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBzaG91bGQgYmUgZXhwb3J0ZWQgYnkKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0NPTkZJRy5yc3QgYi9IZWxwL3Byb3BfdGd0L0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDBjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0CkBAIC0wLDAgKzEsMjggQEAKK0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF88Q09ORklHPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworUG9zdGZpeCB0byBhcHBlbmQgdG8gdGhlIGZyYW1ld29yayBmaWxlIG5hbWUgZm9yIGNvbmZpZ3VyYXRpb24gYGA8Q09ORklHPmBgLAord2hlbiB1c2luZyBhIG11bHRpLWNvbmZpZyBnZW5lcmF0b3IgKGxpa2UgWGNvZGUgYW5kIE5pbmphIE11bHRpLUNvbmZpZykuCisKK1doZW4gYnVpbGRpbmcgd2l0aCBjb25maWd1cmF0aW9uIGBgPENPTkZJRz5gYCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eQoraXMgYXBwZW5kZWQgdG8gdGhlIGZyYW1ld29yayBmaWxlIG5hbWUgYnVpbHQgb24gZGlzay4KKworRm9yIGV4YW1wbGUsIGdpdmVuIGEgZnJhbWV3b3JrIGNhbGxlZCBgYG15X2Z3YGAsIGEgdmFsdWUgb2YgYGBfZGVidWdgYAorZm9yIHRoZSBgYEZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9ERUJVR2BgIHByb3BlcnR5LCBhbmQKK2BgRGVidWc7UmVsZWFzZWBgIGluIDp2YXJpYWJsZTpgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFU2AsIHRoZSBmb2xsb3dpbmcKK3JlbGV2YW50IGZpbGVzIHdvdWxkIGJlIGNyZWF0ZWQgZm9yIHRoZSBgYERlYnVnYGAgYW5kIGBgUmVsZWFzZWBgCitjb25maWd1cmF0aW9uczoKKworLSBgYFJlbGVhc2UvbXlfZncuZnJhbWV3b3JrL215X2Z3YGAKKy0gYGBSZWxlYXNlL215X2Z3LmZyYW1ld29yay9WZXJzaW9ucy9BL215X2Z3YGAKKy0gYGBEZWJ1Zy9teV9mdy5mcmFtZXdvcmsvbXlfZndfZGVidWdgYAorLSBgYERlYnVnL215X2Z3LmZyYW1ld29yay9WZXJzaW9ucy9BL215X2Z3X2RlYnVnYGAKKworRm9yIGZyYW1ld29yayB0YXJnZXRzLCB0aGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKKzp2YXJpYWJsZTpgQ01BS0VfRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+YCB2YXJpYWJsZSBpZiBpdAoraXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMgY3JlYXRlZC4KKworVGhpcyBwcm9wZXJ0eSBpcyBpZ25vcmVkIGZvciBub24tZnJhbWV3b3JrIHRhcmdldHMsIGFuZCB3aGVuIHVzaW5nIHNpbmdsZQorY29uZmlnIGdlbmVyYXRvcnMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0ZSQU1FV09SS19WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX1ZFUlNJT04ucnN0CmluZGV4IGMyYWU3YjkuLjM4YjgxMzcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX1ZFUlNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogRlJBTUVXT1JLX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWZXJzaW9uIG9mIGEgZnJhbWV3b3JrIGNyZWF0ZWQgdXNpbmcgdGhlIDpwcm9wX3RndDpgRlJBTUVXT1JLYCB0YXJnZXQKIHByb3BlcnR5IChlLmcuIGBgQWBgKS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9Gb3J0cmFuX1BSRVBST0NFU1MucnN0IGIvSGVscC9wcm9wX3RndC9Gb3J0cmFuX1BSRVBST0NFU1MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTJmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0ZvcnRyYW5fUFJFUFJPQ0VTUy5yc3QKQEAgLTAsMCArMSwyNSBAQAorRm9ydHJhbl9QUkVQUk9DRVNTCistLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitDb250cm9sIHdoZXRoZXIgdGhlIEZvcnRyYW4gc291cmNlIGZpbGUgc2hvdWxkIGJlIHVuY29uZGl0aW9uYWxseQorcHJlcHJvY2Vzc2VkLgorCitJZiB1bnNldCBvciBlbXB0eSwgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZpbGUKK3Nob3VsZCBiZSBwcmVwcm9jZXNzZWQuIElmIGV4cGxpY2l0bHkgc2V0IHRvIGBgT0ZGYGAgdGhlbiB0aGUgZmlsZSBkb2VzIG5vdAorbmVlZCB0byBiZSBwcmVwcm9jZXNzZWQuIElmIGV4cGxpY2l0bHkgc2V0IHRvIGBgT05gYCwgdGhlbiB0aGUgZmlsZSBkb2VzCituZWVkIHRvIGJlIHByZXByb2Nlc3NlZCBhcyBwYXJ0IG9mIHRoZSBjb21waWxhdGlvbiBzdGVwLgorCitXaGVuIHVzaW5nIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yLCBhbGwgc291cmNlIGZpbGVzIGFyZQorZmlyc3QgcHJlcHJvY2Vzc2VkIGluIG9yZGVyIHRvIGdlbmVyYXRlIG1vZHVsZSBkZXBlbmRlbmN5CitpbmZvcm1hdGlvbi4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIGBgT0ZGYGAgd2lsbCBtYWtlIGBgTmluamFgYAorc2tpcCB0aGlzIHN0ZXAuCisKK1VzZSB0aGUgc291cmNlLXNwZWNpZmljIDpwcm9wX3NmOmBGb3J0cmFuX1BSRVBST0NFU1NgIHByb3BlcnR5IGlmIGEgc2luZ2xlCitmaWxlIG5lZWRzIHRvIGJlIHByZXByb2Nlc3NlZC4gSWYgdGhlIHZhcmlhYmxlCis6dmFyaWFibGU6YENNQUtFX0ZvcnRyYW5fUFJFUFJPQ0VTU2AgaXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMgY3JlYXRlZCBpdHMKK3ZhbHVlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGlzIHByb3BlcnR5LgorCisuLiBub3RlOjogRm9yIHNvbWUgY29tcGlsZXJzLCBgYE5BR2BgLCBgYFBHSWBgIGFuZCBgYFNvbGFyaXMgU3R1ZGlvYGAsCisgICAgICAgICAgc2V0dGluZyB0aGlzIHRvIGBgT0ZGYGAgd2lsbCBoYXZlIG5vIGVmZmVjdC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvR0hTX0lOVEVHUklUWV9BUFAucnN0IGIvSGVscC9wcm9wX3RndC9HSFNfSU5URUdSSVRZX0FQUC5yc3QKaW5kZXggYjY2OTc4MS4uY2NjZDA4NyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9HSFNfSU5URUdSSVRZX0FQUC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9HSFNfSU5URUdSSVRZX0FQUC5yc3QKQEAgLTEsNiArMSw4IEBACiBHSFNfSU5URUdSSVRZX0FQUAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBgYE9OYGAgLyBgYE9GRmBgIGJvb2xlYW4gdG8gZGV0ZXJtaW5lIGlmIGFuIGV4ZWN1dGFibGUgdGFyZ2V0IHNob3VsZAogYmUgdHJlYXRlZCBhcyBhbiBgSW50ZWdyaXR5IEFwcGxpY2F0aW9uYC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9HSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUucnN0IGIvSGVscC9wcm9wX3RndC9HSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUucnN0CmluZGV4IDExY2UwYjIyLi5mZTZiOGU2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9HSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUucnN0CkBAIC0xLDYgKzEsOCBAQAogR0hTX05PX1NPVVJDRV9HUk9VUF9GSUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBgYE9OYGAgLyBgYE9GRmBgIGJvb2xlYW4gdG8gY29udHJvbCBpZiB0aGUgcHJvamVjdCBmaWxlIGZvciBhIHRhcmdldCBzaG91bGQKIGJlIG9uZSBzaW5nbGUgZmlsZSBvciBtdWx0aXBsZSBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9DT01NT05fTEFOR1VBR0VfUlVOVElNRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FLnJzdAppbmRleCA5OWUzYmM0Li44YzIwZTA3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIElNUE9SVEVEX0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFByb3BlcnR5IHRvIGRlZmluZSBpZiB0aGUgdGFyZ2V0IHVzZXMgYGBDKysvQ0xJYGAuCiAKIElnbm9yZWQgZm9yIG5vbi1pbXBvcnRlZCB0YXJnZXRzLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9HTE9CQUwucnN0IGIvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9HTE9CQUwucnN0CmluZGV4IDFmZWNhMDQuLjE3NjEyN2YgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfR0xPQkFMLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0dMT0JBTC5yc3QKQEAgLTEsNiArMSw4IEBACiBJTVBPUlRFRF9HTE9CQUwKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIEluZGljYXRpb24gb2Ygd2hldGhlciBhbiA6cmVmOmBJTVBPUlRFRCB0YXJnZXQgPEltcG9ydGVkIFRhcmdldHM+YCBpcwogZ2xvYmFsbHkgdmlzaWJsZS4KIApAQCAtMTYsNyArMTgsMTUgQEAKIHRhcmdldCB0byBnbG9iYWwgc2NvcGUuIFRoaXMgcHJvbW90aW9uIGNhbiBvbmx5IGJlIGRvbmUgaW4gdGhlIHNhbWUKIGRpcmVjdG9yeSB3aGVyZSB0aGF0IGBgSU1QT1JURURgYCB0YXJnZXQgd2FzIGNyZWF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLgogCi1PbmNlIGFuIGltcG9ydGVkIHRhcmdldCBoYXMgYmVlbiBtYWRlIGdsb2JhbCwgaXQgY2Fubm90IGJlIGNoYW5nZWQgYmFjayB0bwotbm9uLWdsb2JhbC4gVGhlcmVmb3JlLCBpZiBhIHByb2plY3Qgc2V0cyB0aGlzIHByb3BlcnR5LCBpdCBtYXkgb25seQotcHJvdmlkZSBhIHZhbHVlIG9mIFRydWUuIENNYWtlIHdpbGwgaXNzdWUgYW4gZXJyb3IgaWYgdGhlIHByb2plY3QgdHJpZXMgdG8KLXNldCB0aGUgcHJvcGVydHkgdG8gYSBub24tVHJ1ZSB2YWx1ZSwgZXZlbiBpZiB0aGUgdmFsdWUgd2FzIGFscmVhZHkgRmFsc2UuCisuLiBub3RlOjoKKworICBPbmNlIGFuIGltcG9ydGVkIHRhcmdldCBoYXMgYmVlbiBtYWRlIGdsb2JhbCwgaXQgY2Fubm90IGJlIGNoYW5nZWQgYmFjayB0bworICBub24tZ2xvYmFsLiBUaGVyZWZvcmUsIGlmIGEgcHJvamVjdCBzZXRzIHRoaXMgcHJvcGVydHksIGl0IG1heSBvbmx5CisgIHByb3ZpZGUgYSB2YWx1ZSBvZiBUcnVlLiBDTWFrZSB3aWxsIGlzc3VlIGFuIGVycm9yIGlmIHRoZSBwcm9qZWN0IHRyaWVzIHRvCisgIHNldCB0aGUgcHJvcGVydHkgdG8gYSBub24tVHJ1ZSB2YWx1ZSwgZXZlbiBpZiB0aGUgdmFsdWUgd2FzIGFscmVhZHkgRmFsc2UuCisKKy4uIG5vdGU6OgorCisgIExvY2FsIDpyZWY6YEFMSUFTIHRhcmdldHMgPEFsaWFzIFRhcmdldHM+YCBjcmVhdGVkIGJlZm9yZSBwcm9tb3RpbmcgYW4KKyAgOnJlZjpgSU1QT1JURUQgdGFyZ2V0IDxJbXBvcnRlZCBUYXJnZXRzPmAgZnJvbSBgYExPQ0FMYGAgdG8gYGBHTE9CQUxgYCwga2VlcAorICB0aGVpciBpbml0aWFsIHNjb3BlIChzZWUgOnByb3BfdGd0OmBBTElBU19HTE9CQUxgIHRhcmdldCBwcm9wZXJ0eSkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0xJQk5BTUUucnN0IGIvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9MSUJOQU1FLnJzdAppbmRleCAxOTQzZGJhLi43YTgzOTA2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0xJQk5BTUUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfTElCTkFNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBJTVBPUlRFRF9MSUJOQU1FCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBTcGVjaWZ5IHRoZSBsaW5rIGxpYnJhcnkgbmFtZSBmb3IgYW4gOnJlZjpgaW1wb3J0ZWQgPEltcG9ydGVkIFRhcmdldHM+YAogOnJlZjpgSW50ZXJmYWNlIExpYnJhcnkgPEludGVyZmFjZSBMaWJyYXJpZXM+YC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9MSUJOQU1FX0NPTkZJRy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0xJQk5BTUVfQ09ORklHLnJzdAppbmRleCBhMjhiODM4Li5kZjY0NzY5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0xJQk5BTUVfQ09ORklHLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0xJQk5BTUVfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIElNUE9SVEVEX0xJQk5BTUVfPENPTkZJRz4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIDxDT05GSUc+LXNwZWNpZmljIHZlcnNpb24gb2YgOnByb3BfdGd0OmBJTVBPUlRFRF9MSUJOQU1FYCBwcm9wZXJ0eS4KIAogQ29uZmlndXJhdGlvbiBuYW1lcyBjb3JyZXNwb25kIHRvIHRob3NlIHByb3ZpZGVkIGJ5IHRoZSBwcm9qZWN0IGZyb20KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfT0JKRUNUUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX09CSkVDVFMucnN0CmluZGV4IDUwYTMyOWYuLmJiYmNkODYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfT0JKRUNUUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9PQkpFQ1RTLnJzdApAQCAtMSw2ICsxLDggQEAKIElNUE9SVEVEX09CSkVDVFMKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIEEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIGFic29sdXRlIHBhdGhzIHRvIHRoZSBvYmplY3QKIGZpbGVzIG9uIGRpc2sgZm9yIGFuIDpyZWY6YGltcG9ydGVkIDxJbXBvcnRlZCB0YXJnZXRzPmAKIDpyZWY6YG9iamVjdCBsaWJyYXJ5IDxvYmplY3QgbGlicmFyaWVzPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX09CSkVDVFNfQ09ORklHLnJzdCBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfT0JKRUNUU19DT05GSUcucnN0CmluZGV4IDQ0MTllZDEuLmIxMmNhMzggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfT0JKRUNUU19DT05GSUcucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfT0JKRUNUU19DT05GSUcucnN0CkBAIC0xLDYgKzEsOCBAQAogSU1QT1JURURfT0JKRUNUU188Q09ORklHPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogPENPTkZJRz4tc3BlY2lmaWMgdmVyc2lvbiBvZiA6cHJvcF90Z3Q6YElNUE9SVEVEX09CSkVDVFNgIHByb3BlcnR5LgogCiBDb25maWd1cmF0aW9uIG5hbWVzIGNvcnJlc3BvbmQgdG8gdGhvc2UgcHJvdmlkZWQgYnkgdGhlIHByb2plY3QgZnJvbQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTlNUQUxMX1JFTU9WRV9FTlZJUk9OTUVOVF9SUEFUSC5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdAppbmRleCA3MmRjYWEwLi5mNDFlNDFjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIElOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENvbnRyb2xzIHdoZXRoZXIgdG9vbGNoYWluLWRlZmluZWQgcnBhdGhzIHNob3VsZCBiZSByZW1vdmVkIGR1cmluZyBpbnN0YWxsYXRpb24uCiAKIFdoZW4gYSB0YXJnZXQgaXMgYmVpbmcgaW5zdGFsbGVkLCBDTWFrZSBtYXkgbmVlZCB0byByZXdyaXRlIGl0cyBycGF0aApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTlNUQUxMX1JQQVRILnJzdCBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9SUEFUSC5yc3QKaW5kZXggOTNiNDQ4OC4uNDU0OWI5MiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTlNUQUxMX1JQQVRILnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUlBBVEgucnN0CkBAIC04LDUgKzgsOSBAQAogYnkgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUlBBVEhgIGlmIGl0IGlzIHNldCB3aGVuCiBhIHRhcmdldCBpcyBjcmVhdGVkLgogCitCZWNhdXNlIHRoZSBycGF0aCBtYXkgY29udGFpbiBgYCR7T1JJR0lOfWBgLCB3aGljaCBjb2luY2lkZXMgd2l0aCBDTWFrZSBzeW50YXgsCit0aGUgY29udGVudHMgb2YgYGBJTlNUQUxMX1JQQVRIYGAgYXJlIHByb3Blcmx5IGVzY2FwZWQgaW4gdGhlCitgYGNtYWtlX2luc3RhbGwuY21ha2VgYCBzY3JpcHQgKHNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDA5NWAuKQorCiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzCiA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfQ09NUElMRV9GRUFUVVJFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTLnJzdAppbmRleCAzMWI1OTRmLi4wZGIzYjBjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogLi4gfHByb3BlcnR5X25hbWV8IHJlcGxhY2U6OiBjb21waWxlIGZlYXR1cmVzCiAuLiB8Y29tbWFuZF9uYW1lfCByZXBsYWNlOjogOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX2ZlYXR1cmVzYAogLi4gfFBST1BFUlRZX0lOVEVSRkFDRV9OQU1FfCByZXBsYWNlOjogYGBJTlRFUkZBQ0VfQ09NUElMRV9GRUFUVVJFU2BgCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9MSU5LX0RFUEVORFMucnN0IGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ERVBFTkRTLnJzdAppbmRleCA3OTA1NTRkLi45YzgyNzVkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9MSU5LX0RFUEVORFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfREVQRU5EUy5yc3QKQEAgLTEsNiArMSw4IEBACiBJTlRFUkZBQ0VfTElOS19ERVBFTkRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogQWRkaXRpb25hbCBwdWJsaWMgaW50ZXJmYWNlIGZpbGVzIG9uIHdoaWNoIGEgdGFyZ2V0IGJpbmFyeSBkZXBlbmRzIGZvciBsaW5raW5nLgogCiBUaGlzIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBvbmx5IGJ5IDpnZW5lcmF0b3I6YE5pbmphYCBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfRElSRUNUT1JJRVMucnN0IGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUy5yc3QKaW5kZXggNTZhNGVjMC4uZGUxZGFiYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBJTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiAuLiB8cHJvcGVydHlfbmFtZXwgcmVwbGFjZTo6IGxpbmsgZGlyZWN0b3JpZXMKIC4uIHxjb21tYW5kX25hbWV8IHJlcGxhY2U6OiA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXNgCiAuLiB8UFJPUEVSVFlfSU5URVJGQUNFX05BTUV8IHJlcGxhY2U6OiBgYElOVEVSRkFDRV9MSU5LX0RJUkVDVE9SSUVTYGAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfT1BUSU9OUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9MSU5LX09QVElPTlMucnN0CmluZGV4IGMyOTNiOTguLjQyNDVmZTkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfT1BUSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19PUFRJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9MSU5LX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiAuLiB8cHJvcGVydHlfbmFtZXwgcmVwbGFjZTo6IGxpbmsgb3B0aW9ucwogLi4gfGNvbW1hbmRfbmFtZXwgcmVwbGFjZTo6IDpjb21tYW5kOmB0YXJnZXRfbGlua19vcHRpb25zYAogLi4gfFBST1BFUlRZX0lOVEVSRkFDRV9OQU1FfCByZXBsYWNlOjogYGBJTlRFUkZBQ0VfTElOS19PUFRJT05TYGAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CmluZGV4IGUyODU0MDcuLjIyOTkyNjQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfUFJFQ09NUElMRV9IRUFERVJTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9QUkVDT01QSUxFX0hFQURFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBMaXN0IG9mIGludGVyZmFjZSBoZWFkZXIgZmlsZXMgdG8gcHJlY29tcGlsZSBpbnRvIGNvbnN1bWluZyB0YXJnZXRzLgogCiBUYXJnZXRzIG1heSBwb3B1bGF0ZSB0aGlzIHByb3BlcnR5IHRvIHB1Ymxpc2ggdGhlIGhlYWRlciBmaWxlcwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfU09VUkNFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9TT1VSQ0VTLnJzdAppbmRleCBhMjI0YjY4Li43NTljNDgyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9TT1VSQ0VTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9TT1VSQ0VTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9TT1VSQ0VTCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogTGlzdCBvZiBpbnRlcmZhY2Ugc291cmNlcyB0byBjb21waWxlIGludG8gY29uc3VtaW5nIHRhcmdldHMuCiAKIFRhcmdldHMgbWF5IHBvcHVsYXRlIHRoaXMgcHJvcGVydHkgdG8gcHVibGlzaCB0aGUgc291cmNlcwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JT1NfSU5TVEFMTF9DT01CSU5FRC5yc3QgYi9IZWxwL3Byb3BfdGd0L0lPU19JTlNUQUxMX0NPTUJJTkVELnJzdAppbmRleCA1OWY2N2E3Li4yM2E4NmU2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lPU19JTlNUQUxMX0NPTUJJTkVELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lPU19JTlNUQUxMX0NPTUJJTkVELnJzdApAQCAtMSw2ICsxLDggQEAKIElPU19JTlNUQUxMX0NPTUJJTkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogQnVpbGQgYSBjb21iaW5lZCAoZGV2aWNlIGFuZCBzaW11bGF0b3IpIHRhcmdldCB3aGVuIGluc3RhbGxpbmcuCiAKIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gc2V0IHRvIGZhbHNlICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgdGhlbiBpdCB3aWxsCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSLnJzdCBiL0hlbHAvcHJvcF90Z3QvSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIucnN0CmluZGV4IGVjZTI4YTQuLjQyY2FjZTAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIucnN0CkBAIC0xLDYgKzEsOCBAQAogSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogTmluamEgb25seTogUG9vbCB1c2VkIGZvciBnZW5lcmF0aW5nIHByZS1jb21waWxlZCBoZWFkZXJzLgogCiBUaGUgbnVtYmVyIG9mIHBhcmFsbGVsIGNvbXBpbGUgcHJvY2Vzc2VzIGNvdWxkIGJlIGxpbWl0ZWQgYnkgZGVmaW5pbmcKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTEFOR19DTEFOR19USURZLnJzdCBiL0hlbHAvcHJvcF90Z3QvTEFOR19DTEFOR19USURZLnJzdAppbmRleCAyYmZlZjY2Li43ZmMyMzcyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0xBTkdfQ0xBTkdfVElEWS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9MQU5HX0NMQU5HX1RJRFkucnN0CkBAIC0xLDYgKzEsOCBAQAogPExBTkc+X0NMQU5HX1RJRFkKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBUaGlzIHByb3BlcnR5IGlzIGltcGxlbWVudGVkIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgIG9yIGBgQ1hYYGAuCiAKIFNwZWNpZnkgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgY29udGFpbmluZyBhIGNvbW1hbmQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QgYi9IZWxwL3Byb3BfdGd0L0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0CmluZGV4IGE2ZjJiMjQuLjc3YWUxZjYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdApAQCAtMSw2ICsxLDggQEAKIDxMQU5HPl9DT01QSUxFUl9MQVVOQ0hFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUaGlzIHByb3BlcnR5IGlzIGltcGxlbWVudGVkIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgLCBgYENYWGBgLAogYGBGb3J0cmFuYGAsIGBgT0JKQ2BgLCBgYE9CSkNYWGBgLCBvciBgYENVREFgYC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MQU5HX0NQUENIRUNLLnJzdCBiL0hlbHAvcHJvcF90Z3QvTEFOR19DUFBDSEVDSy5yc3QKaW5kZXggNjA3ODVkMC4uODBhY2JjMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9MQU5HX0NQUENIRUNLLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xBTkdfQ1BQQ0hFQ0sucnN0CkBAIC0xLDYgKzEsOCBAQAogPExBTkc+X0NQUENIRUNLCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBUaGlzIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4gYGA8TEFORz5gYCBpcyBgYENgYCBvciBgYENYWGBgLgogCiBTcGVjaWZ5IGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIGNvbnRhaW5pbmcgYSBjb21tYW5kIGxpbmUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTEFOR19DUFBMSU5ULnJzdCBiL0hlbHAvcHJvcF90Z3QvTEFOR19DUFBMSU5ULnJzdAppbmRleCA5OTQ0Yzg4Li5iZTZkYjQ2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0xBTkdfQ1BQTElOVC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9MQU5HX0NQUExJTlQucnN0CkBAIC0xLDYgKzEsOCBAQAogPExBTkc+X0NQUExJTlQKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBUaGlzIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4gYGA8TEFORz5gYCBpcyBgYENgYCBvciBgYENYWGBgLgogCiBTcGVjaWZ5IGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIGNvbnRhaW5pbmcgYSBjb21tYW5kIGxpbmUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTEFOR19JTkNMVURFX1dIQVRfWU9VX1VTRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0xBTkdfSU5DTFVERV9XSEFUX1lPVV9VU0UucnN0CmluZGV4IDM1MjIwZTQuLmVlYmVmNTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTEFOR19JTkNMVURFX1dIQVRfWU9VX1VTRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9MQU5HX0lOQ0xVREVfV0hBVF9ZT1VfVVNFLnJzdApAQCAtMSw2ICsxLDggQEAKIDxMQU5HPl9JTkNMVURFX1dIQVRfWU9VX1VTRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBUaGlzIHByb3BlcnR5IGlzIGltcGxlbWVudGVkIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgIG9yIGBgQ1hYYGAuCiAKIFNwZWNpZnkgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgY29udGFpbmluZyBhIGNvbW1hbmQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTElOS19ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0xJTktfRElSRUNUT1JJRVMucnN0CmluZGV4IGMyOTA1YjMuLjY3YmU0OTQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTElOS19ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9MSU5LX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIExJTktfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBMaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHVzZSBmb3IgdGhlIGxpbmsgc3RlcCBvZiBzaGFyZWQgbGlicmFyeSwgbW9kdWxlCiBhbmQgZXhlY3V0YWJsZSB0YXJnZXRzLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0xJTktfT1BUSU9OUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0xJTktfT1BUSU9OUy5yc3QKaW5kZXggMmEwNWVhNy4uOGMwZGZjNCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9MSU5LX09QVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvTElOS19PUFRJT05TLnJzdApAQCAtMSwxMyArMSwxOSBAQAogTElOS19PUFRJT05TCiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBMaXN0IG9mIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgbGluayBzdGVwIG9mIHNoYXJlZCBsaWJyYXJ5LCBtb2R1bGUKLWFuZCBleGVjdXRhYmxlIHRhcmdldHMuIFRhcmdldHMgdGhhdCBhcmUgc3RhdGljIGxpYnJhcmllcyBuZWVkIHRvIHVzZQotdGhlIDpwcm9wX3RndDpgU1RBVElDX0xJQlJBUllfT1BUSU9OU2AgdGFyZ2V0IHByb3BlcnR5LgorYW5kIGV4ZWN1dGFibGUgdGFyZ2V0cyBhcyB3ZWxsIGFzIHRoZSBkZXZpY2UgbGluayBzdGVwLiBUYXJnZXRzIHRoYXQgYXJlIHN0YXRpYworbGlicmFyaWVzIG5lZWQgdG8gdXNlIHRoZSA6cHJvcF90Z3Q6YFNUQVRJQ19MSUJSQVJZX09QVElPTlNgIHRhcmdldCBwcm9wZXJ0eS4KIAorVGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCBmb3IgYm90aCBub3JtYWwgbGlua2luZyBhbmQgZGV2aWNlIGxpbmtpbmcKKyhzZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDVgKS4gVG8gY29udHJvbCBsaW5rIG9wdGlvbnMgZm9yIG5vcm1hbCBhbmQgZGV2aWNlCitsaW5rIHN0ZXBzLCBgYCQ8SE9TVF9MSU5LPmBgIGFuZCBgYCQ8REVWSUNFX0xJTks+YGAKKzptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgY2FuIGJlIHVzZWQuCiAKLVRoaXMgcHJvcGVydHkgaG9sZHMgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2Ygb3B0aW9ucwotc3BlY2lmaWVkIHNvIGZhciBmb3IgaXRzIHRhcmdldC4gIFVzZSB0aGUgOmNvbW1hbmQ6YHRhcmdldF9saW5rX29wdGlvbnNgCitUaGlzIHByb3BlcnR5IGhvbGRzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mCitvcHRpb25zIHNwZWNpZmllZCBzbyBmYXIgZm9yIGl0cyB0YXJnZXQuICBVc2UgdGhlIDpjb21tYW5kOmB0YXJnZXRfbGlua19vcHRpb25zYAogY29tbWFuZCB0byBhcHBlbmQgbW9yZSBvcHRpb25zLgogCiBUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSA6cHJvcF9kaXI6YExJTktfT1BUSU9OU2AgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0xJTktfV0hBVF9ZT1VfVVNFLnJzdCBiL0hlbHAvcHJvcF90Z3QvTElOS19XSEFUX1lPVV9VU0UucnN0CmluZGV4IDMyZDZlZGIuLjJlZDkzYWQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTElOS19XSEFUX1lPVV9VU0UucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvTElOS19XSEFUX1lPVV9VU0UucnN0CkBAIC0xLDYgKzEsOCBAQAogTElOS19XSEFUX1lPVV9VU0UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVGhpcyBpcyBhIGJvb2xlYW4gb3B0aW9uIHRoYXQgd2hlbiBzZXQgdG8gYGBUUlVFYGAgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1bgogYGBsZGQgLXIgLXVgYCBvbiB0aGUgdGFyZ2V0IGFmdGVyIGl0IGlzIGxpbmtlZC4gSW4gYWRkaXRpb24sIHRoZSBsaW5rZXIgZmxhZwogYGAtV2wsLS1uby1hcy1uZWVkZWRgYCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGFyZ2V0IHdpdGggdGhlIGxpbmsgY29tbWFuZCBzbwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9NQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9NQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04ucnN0CmluZGV4IDI2ZDVjYzguLmEyNGIyNTUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L01BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFdoYXQgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIG51bWJlciBpcyB0aGlzIHRhcmdldCBmb3IgTWFjaC1PIGJpbmFyaWVzLgogCiBGb3Igc2hhcmVkIGxpYnJhcmllcyBvbiBNYWNoLU8gc3lzdGVtcyAoZS5nLiBtYWNPUywgaU9TKQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9NQUNIT19DVVJSRU5UX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9NQUNIT19DVVJSRU5UX1ZFUlNJT04ucnN0CmluZGV4IDlhZmIzNTYuLjUzMGY3OWIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ1VSUkVOVF9WRVJTSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L01BQ0hPX0NVUlJFTlRfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBNQUNIT19DVVJSRU5UX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFdoYXQgY3VycmVudCB2ZXJzaW9uIG51bWJlciBpcyB0aGlzIHRhcmdldCBmb3IgTWFjaC1PIGJpbmFyaWVzLgogCiBGb3Igc2hhcmVkIGxpYnJhcmllcyBvbiBNYWNoLU8gc3lzdGVtcyAoZS5nLiBtYWNPUywgaU9TKQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9NQU5VQUxMWV9BRERFRF9ERVBFTkRFTkNJRVMucnN0IGIvSGVscC9wcm9wX3RndC9NQU5VQUxMWV9BRERFRF9ERVBFTkRFTkNJRVMucnN0CmluZGV4IGMxMmVhMTQuLjcyODcxYjMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTUFOVUFMTFlfQURERURfREVQRU5ERU5DSUVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L01BTlVBTExZX0FEREVEX0RFUEVOREVOQ0lFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBNQU5VQUxMWV9BRERFRF9ERVBFTkRFTkNJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogR2V0IG1hbnVhbGx5IGFkZGVkIGRlcGVuZGVuY2llcyB0byBvdGhlciB0b3AtbGV2ZWwgdGFyZ2V0cy4KIAogVGhpcyByZWFkLW9ubHkgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gcXVlcnkgYWxsIGRlcGVuZGVuY2llcyB0aGF0CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L01TVkNfUlVOVElNRV9MSUJSQVJZLnJzdCBiL0hlbHAvcHJvcF90Z3QvTVNWQ19SVU5USU1FX0xJQlJBUlkucnN0CmluZGV4IDczNzkyZGUuLjliOTc4YjIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTVNWQ19SVU5USU1FX0xJQlJBUlkucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvTVNWQ19SVU5USU1FX0xJQlJBUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogTVNWQ19SVU5USU1FX0xJQlJBUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogU2VsZWN0IHRoZSBNU1ZDIHJ1bnRpbWUgbGlicmFyeSBmb3IgdXNlIGJ5IGNvbXBpbGVycyB0YXJnZXRpbmcgdGhlIE1TVkMgQUJJLgogCiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9PQkpDWFhfRVhURU5TSU9OUy5yc3QgYi9IZWxwL3Byb3BfdGd0L09CSkNYWF9FWFRFTlNJT05TLnJzdAppbmRleCA5ZjlkODA0Li44YTI1NGYyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L09CSkNYWF9FWFRFTlNJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L09CSkNYWF9FWFRFTlNJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIE9CSkNYWF9FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIEJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIGNvbXBpbGVyIHNwZWNpZmljIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIHNob3VsZCBiZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9PQkpDWFhfU1RBTkRBUkQucnN0IGIvSGVscC9wcm9wX3RndC9PQkpDWFhfU1RBTkRBUkQucnN0CmluZGV4IDNjOTI1ZGMuLjEwNjcxNTMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvT0JKQ1hYX1NUQU5EQVJELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L09CSkNYWF9TVEFOREFSRC5yc3QKQEAgLTEsNiArMSw4IEBACiBPQkpDWFhfU1RBTkRBUkQKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFRoZSBPYmpDKysgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZCB0byBidWlsZCB0aGlzIHRhcmdldC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIE9iakMrKyBzdGFuZGFyZCB3aG9zZSBmZWF0dXJlcyBhcmUgcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L09CSkNYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3Byb3BfdGd0L09CSkNYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKaW5kZXggYzMzMGFiZi4uM2NlZTc0MCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9PQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvT0JKQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIE9CSkNYWF9TVEFOREFSRF9SRVFVSVJFRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQm9vbGVhbiBkZXNjcmliaW5nIHdoZXRoZXIgdGhlIHZhbHVlIG9mIDpwcm9wX3RndDpgT0JKQ1hYX1NUQU5EQVJEYCBpcyBhIHJlcXVpcmVtZW50LgogCiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBgYE9OYGAsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9PQkpDX0VYVEVOU0lPTlMucnN0IGIvSGVscC9wcm9wX3RndC9PQkpDX0VYVEVOU0lPTlMucnN0CmluZGV4IDJkZTllNDguLmVmMWM3NTQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvT0JKQ19FWFRFTlNJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L09CSkNfRVhURU5TSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBPQkpDX0VYVEVOU0lPTlMKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIEJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIGNvbXBpbGVyIHNwZWNpZmljIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIHNob3VsZCBiZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9PQkpDX1NUQU5EQVJELnJzdCBiL0hlbHAvcHJvcF90Z3QvT0JKQ19TVEFOREFSRC5yc3QKaW5kZXggZDFlMWIyNC4uMjE0M2ZmOSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9PQkpDX1NUQU5EQVJELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L09CSkNfU1RBTkRBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogT0JKQ19TVEFOREFSRAogLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFRoZSBPQkpDIHN0YW5kYXJkIHdob3NlIGZlYXR1cmVzIGFyZSByZXF1ZXN0ZWQgdG8gYnVpbGQgdGhpcyB0YXJnZXQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBPQkpDIHN0YW5kYXJkIHdob3NlIGZlYXR1cmVzIGFyZSByZXF1ZXN0ZWQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvT0JKQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3Byb3BfdGd0L09CSkNfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IDhjZjM3N2MuLjExNTQ3YzggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvT0JKQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9PQkpDX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIE9CSkNfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBCb29sZWFuIGRlc2NyaWJpbmcgd2hldGhlciB0aGUgdmFsdWUgb2YgOnByb3BfdGd0OmBPQkpDX1NUQU5EQVJEYCBpcyBhIHJlcXVpcmVtZW50LgogCiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBgYE9OYGAsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9QQ0hfV0FSTl9JTlZBTElELnJzdCBiL0hlbHAvcHJvcF90Z3QvUENIX1dBUk5fSU5WQUxJRC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1ZWM1NQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvUENIX1dBUk5fSU5WQUxJRC5yc3QKQEAgLTAsMCArMSwxMiBAQAorUENIX1dBUk5fSU5WQUxJRAorLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1doZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHByZWNvbXBpbGUgaGVhZGVyIGNvbXBpbGVyIG9wdGlvbnMKK3dpbGwgY29udGFpbiBhIGNvbXBpbGVyIGZsYWcgd2hpY2ggc2hvdWxkIHdhcm4gYWJvdXQgaW52YWxpZCBwcmVjb21waWxlZAoraGVhZGVycyBlLmcuIGBgLVdpbnZhbGlkLXBjaGBgIGZvciBHTlUgY29tcGlsZXIuCisKK1RoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQorOnZhcmlhYmxlOmBDTUFLRV9QQ0hfV0FSTl9JTlZBTElEYCB2YXJpYWJsZSBpZiBpdCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcworY3JlYXRlZC4gIElmIHRoYXQgdmFyaWFibGUgaXMgbm90IHNldCwgdGhlIHByb3BlcnR5IGRlZmF1bHRzIHRvIGBgT05gYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvUFJFQ09NUElMRV9IRUFERVJTLnJzdCBiL0hlbHAvcHJvcF90Z3QvUFJFQ09NUElMRV9IRUFERVJTLnJzdAppbmRleCA5ZTcwYjY1Li5hZjI3OTQ3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9QUkVDT01QSUxFX0hFQURFUlMucnN0CkBAIC0xLDYgKzEsOCBAQAogUFJFQ09NUElMRV9IRUFERVJTCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBMaXN0IG9mIGhlYWRlciBmaWxlcyB0byBwcmVjb21waWxlLgogCiBUaGlzIHByb3BlcnR5IGhvbGRzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1BSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NLnJzdCBiL0hlbHAvcHJvcF90Z3QvUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00ucnN0CmluZGV4IDljM2U3ZWEuLjZmNTYzNWIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00ucnN0CkBAIC0xLDYgKzEsOCBAQAogUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogVGFyZ2V0IGZyb20gd2hpY2ggdG8gcmV1c2UgdGhlIHByZWNvbXBpbGVkIGhlYWRlcnMgYnVpbGQgYXJ0aWZhY3QuCiAKIFNlZSB0aGUgc2Vjb25kIHNpZ25hdHVyZSBvZiA6Y29tbWFuZDpgdGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVyc2AgY29tbWFuZApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9TT1VSQ0VfRElSLnJzdCBiL0hlbHAvcHJvcF90Z3QvU09VUkNFX0RJUi5yc3QKaW5kZXggYjI1ODEzYi4uNzhjZTIyMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9TT1VSQ0VfRElSLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1NPVVJDRV9ESVIucnN0CkBAIC0xLDYgKzEsOCBAQAogU09VUkNFX0RJUgogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhpcyByZWFkLW9ubHkgcHJvcGVydHkgcmVwb3J0cyB0aGUgdmFsdWUgb2YgdGhlCiA6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUmAgdmFyaWFibGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaAogdGhlIHRhcmdldCB3YXMgZGVmaW5lZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvU1RBVElDX0xJQlJBUllfT1BUSU9OUy5yc3QgYi9IZWxwL3Byb3BfdGd0L1NUQVRJQ19MSUJSQVJZX09QVElPTlMucnN0CmluZGV4IGQwNWZkYTQuLjJmNGEzYmEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvU1RBVElDX0xJQlJBUllfT1BUSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9TVEFUSUNfTElCUkFSWV9PUFRJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIFNUQVRJQ19MSUJSQVJZX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBBcmNoaXZlciAob3IgTVNWQyBsaWJyYXJpYW4pIGZsYWdzIGZvciBhIHN0YXRpYyBsaWJyYXJ5IHRhcmdldC4KIFRhcmdldHMgdGhhdCBhcmUgc2hhcmVkIGxpYnJhcmllcywgbW9kdWxlcywgb3IgZXhlY3V0YWJsZXMgbmVlZCB0byB1c2UKIHRoZSA6cHJvcF90Z3Q6YExJTktfT1BUSU9OU2AgdGFyZ2V0IHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRS5yc3QgYi9IZWxwL3Byb3BfdGd0L1N3aWZ0X0RFUEVOREVOQ0lFU19GSUxFLnJzdAppbmRleCA0NmM5YTFkLi4wZjk0NGI2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1N3aWZ0X0RFUEVOREVOQ0lFU19GSUxFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1N3aWZ0X0RFUEVOREVOQ0lFU19GSUxFLnJzdApAQCAtMSw1ICsxLDcgQEAKIFN3aWZ0X0RFUEVOREVOQ0lFU19GSUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIFRoaXMgcHJvcGVydHkgc2V0cyB0aGUgcGF0aCBmb3IgdGhlIFN3aWZ0IGRlcGVuZGVuY3kgZmlsZSAoc3dpZnRkZXApIGZvciB0aGUKIHRhcmdldC4gIElmIG9uZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gYGA8VEFSR0VUPi5zd2lmdGRlcHNgYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvU3dpZnRfTEFOR1VBR0VfVkVSU0lPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04ucnN0CmluZGV4IDc1Nzk0NDcuLmFmYzZiMzEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvU3dpZnRfTEFOR1VBR0VfVkVSU0lPTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIFN3aWZ0X0xBTkdVQUdFX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGlzIHByb3BlcnR5IHNldHMgdGhlIGxhbmd1YWdlIHZlcnNpb24gZm9yIHRoZSBTd2lmdCBzb3VyY2VzIGluIHRoZSB0YXJnZXQuICBJZgogb25lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgZGVmYXVsdCB0byBgYDxDTUFLRV9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OPmBgIGlmCiBzcGVjaWZpZWQsIG90aGVyd2lzZSBpdCBpcyB0aGUgbGF0ZXN0IHZlcnNpb24gc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvU3dpZnRfTU9EVUxFX0RJUkVDVE9SWS5yc3QgYi9IZWxwL3Byb3BfdGd0L1N3aWZ0X01PRFVMRV9ESVJFQ1RPUlkucnN0CmluZGV4IGQ0MDQyNTEuLmE2NDg0ZjIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvU3dpZnRfTU9EVUxFX0RJUkVDVE9SWS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9Td2lmdF9NT0RVTEVfRElSRUNUT1JZLnJzdApAQCAtMSw2ICsxLDggQEAKIFN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBTcGVjaWZ5IG91dHB1dCBkaXJlY3RvcnkgZm9yIFN3aWZ0IG1vZHVsZXMgcHJvdmlkZWQgYnkgdGhlIHRhcmdldC4KIAogSWYgdGhlIHRhcmdldCBjb250YWlucyBTd2lmdCBzb3VyY2UgZmlsZXMsIHRoaXMgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2gKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvU3dpZnRfTU9EVUxFX05BTUUucnN0IGIvSGVscC9wcm9wX3RndC9Td2lmdF9NT0RVTEVfTkFNRS5yc3QKaW5kZXggMjg2NjAyMC4uZDk0MWI1NCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9Td2lmdF9NT0RVTEVfTkFNRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9Td2lmdF9NT0RVTEVfTkFNRS5yc3QKQEAgLTEsNSArMSw3IEBACiBTd2lmdF9NT0RVTEVfTkFNRQogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgU3dpZnQgbW9kdWxlLiAgSXQgaXMgZGVmYXVsdGVkIHRvIHRoZQogbmFtZSBvZiB0aGUgdGFyZ2V0LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRC5yc3QgYi9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxELnJzdAppbmRleCA0Nzk4MDJlLi4wNGNlZGU2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxELnJzdApAQCAtMSwxMiArMSwzNCBAQAogVU5JVFlfQlVJTEQKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB0aGUgdGFyZ2V0IHNvdXJjZSBmaWxlcyB3aWxsIGJlIGNvbWJpbmVkCiBpbnRvIGJhdGNoZXMgZm9yIGZhc3RlciBjb21waWxhdGlvbi4gIFRoaXMgaXMgZG9uZSBieSBjcmVhdGluZyBhIChzZXQgb2YpCiB1bml0eSBzb3VyY2VzIHdoaWNoIGBgI2luY2x1ZGVgYCB0aGUgb3JpZ2luYWwgc291cmNlcywgdGhlbiBjb21waWxpbmcgdGhlc2UKIHVuaXR5IHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWxzLiAgVGhpcyBpcyBrbm93biBhcyBhICpVbml0eSogb3IgKkp1bWJvKgotYnVpbGQuICBUaGUgOnByb3BfdGd0OmBVTklUWV9CVUlMRF9CQVRDSF9TSVpFYCBwcm9wZXJ0eSBjb250cm9scyB0aGUgdXBwZXIKLWxpbWl0IG9uIGhvdyBtYW55IHNvdXJjZXMgY2FuIGJlIGNvbWJpbmVkIHBlciB1bml0eSBzb3VyY2UgZmlsZS4KK2J1aWxkLgorCitDTWFrZSBwcm92aWRlcyBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3Igc2VsZWN0aW5nIHdoaWNoIHNvdXJjZXMgYXJlIGdyb3VwZWQKK3RvZ2V0aGVyIGludG8gYSAqYnVja2V0Ki4gQWxnb3JpdGhtIHNlbGVjdGlvbiBpcyBkZWNpZGVkIGJ5IHRoZQorOnByb3BfdGd0OmBVTklUWV9CVUlMRF9NT0RFYCB0YXJnZXQgcHJvcGVydHksIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nIGFjY2VwdGFibGUKK3ZhbHVlczoKKworKiBgYEJBVENIYGAKKyAgV2hlbiBpbiB0aGlzIG1vZGUgQ01ha2UgZGV0ZXJtaW5lcyB3aGljaCBmaWxlcyBhcmUgZ3JvdXBlZCB0b2dldGhlci4KKyAgVGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERfQkFUQ0hfU0laRWAgcHJvcGVydHkgY29udHJvbHMgdGhlIHVwcGVyIGxpbWl0IG9uCisgIGhvdyBtYW55IHNvdXJjZXMgY2FuIGJlIGNvbWJpbmVkIHBlciB1bml0eSBzb3VyY2UgZmlsZS4KKworKiBgYEdST1VQYGAKKyAgV2hlbiBpbiB0aGlzIG1vZGUgZWFjaCB0YXJnZXQgZXhwbGljaXRseSBzcGVjaWZpZXMgaG93IHRvIGdyb3VwCisgIHNvdXJjZSBmaWxlcy4gRWFjaCBzb3VyY2UgZmlsZSB0aGF0IGhhcyB0aGUgc2FtZQorICA6cHJvcF9zZjpgVU5JVFlfR1JPVVBgIHZhbHVlIHdpbGwgYmUgZ3JvdXBlZCB0b2dldGhlci4gQW55IHNvdXJjZXMKKyAgdGhhdCBkb24ndCBoYXZlIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBjb21waWxlZCBpbmRpdmlkdWFsbHkuIFRoZQorICA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEX0JBVENIX1NJWkVgIHByb3BlcnR5IGlzIGlnbm9yZWQgd2hlbiB1c2luZworICB0aGlzIG1vZGUuCisKK0lmIG5vIGV4cGxpY2l0IDpwcm9wX3RndDpgVU5JVFlfQlVJTERfTU9ERWAgaGFzIGJlZW4gc3BlY2lmaWVkLCBDTWFrZSB3aWxsCitkZWZhdWx0IHRvIGBgQkFUQ0hgYC4KIAogVW5pdHkgYnVpbGRzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBmb3IgYWxsIGxhbmd1YWdlcy4gIENNYWtlIHZlcnNpb24KIHxyZWxlYXNlfCBzdXBwb3J0cyBjb21iaW5pbmcgYGBDYGAgYW5kIGBgQ1hYYGAgc291cmNlIGZpbGVzLiAgRm9yIHRhcmdldHMgdGhhdApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9CQVRDSF9TSVpFLnJzdCBiL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQkFUQ0hfU0laRS5yc3QKaW5kZXggNDRmZmUyNy4uMzg4NmVjOSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9CQVRDSF9TSVpFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0JBVENIX1NJWkUucnN0CkBAIC0xLDYgKzEsOCBAQAogVU5JVFlfQlVJTERfQkFUQ0hfU0laRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlIGZpbGVzIHRoYXQgY2FuIGJlIGNvbWJpbmVkIGludG8gYW55IG9uZQogdW5pdHkgc291cmNlIGZpbGUgd2hlbiB1bml0eSBidWlsZHMgYXJlIGVuYWJsZWQgYnkgdGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERgCiB0YXJnZXQgcHJvcGVydHkuICBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIGFzIG1hbnkKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQ09ERV9BRlRFUl9JTkNMVURFLnJzdCBiL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQ09ERV9BRlRFUl9JTkNMVURFLnJzdAppbmRleCA3MjMxYjYxLi5hYzJiMTljIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQUZURVJfSU5DTFVERS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9DT0RFX0FGVEVSX0lOQ0xVREUucnN0CkBAIC0xLDYgKzEsOCBAQAogVU5JVFlfQlVJTERfQ09ERV9BRlRFUl9JTkNMVURFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb2RlIHNuaXBwZXQgd2hpY2ggaXMgaW5jbHVkZWQgdmVyYmF0aW0gYnkgdGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERgCiBmZWF0dXJlIGp1c3QgYWZ0ZXIgZXZlcnkgYGAjaW5jbHVkZWBgIHN0YXRlbWVudCBpbiB0aGUgZ2VuZXJhdGVkIHVuaXR5CiBzb3VyY2UgZmlsZXMuICBGb3IgZXhhbXBsZToKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQ09ERV9CRUZPUkVfSU5DTFVERS5yc3QgYi9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUucnN0CmluZGV4IDdlZDZmYTEuLjZmMGQ1NmIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQ09ERV9CRUZPUkVfSU5DTFVERS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9DT0RFX0JFRk9SRV9JTkNMVURFLnJzdApAQCAtMSw2ICsxLDggQEAKIFVOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb2RlIHNuaXBwZXQgd2hpY2ggaXMgaW5jbHVkZWQgdmVyYmF0aW0gYnkgdGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERgCiBmZWF0dXJlIGp1c3QgYmVmb3JlIGV2ZXJ5IGBgI2luY2x1ZGVgYCBzdGF0ZW1lbnQgaW4gdGhlIGdlbmVyYXRlZCB1bml0eQogc291cmNlIGZpbGVzLiAgRm9yIGV4YW1wbGU6CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX01PREUucnN0IGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9NT0RFLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM0NTFlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9NT0RFLnJzdApAQCAtMCwwICsxLDYwIEBACitVTklUWV9CVUlMRF9NT0RFCistLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworQ01ha2UgcHJvdmlkZXMgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIHNlbGVjdGluZyB3aGljaCBzb3VyY2VzIGFyZSBncm91cGVkCit0b2dldGhlciBpbnRvIGEgKmJ1Y2tldCouIFNlbGVjdGlvbiBpcyBkZWNpZGVkIGJ5IHRoaXMgcHJvcGVydHksCit3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBhY2NlcHRhYmxlIHZhbHVlczoKKworYGBCQVRDSGBgCisgIFdoZW4gaW4gdGhpcyBtb2RlIENNYWtlIGRldGVybWluZXMgd2hpY2ggZmlsZXMgYXJlIGdyb3VwZWQgdG9nZXRoZXIuCisgIFRoZSA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEX0JBVENIX1NJWkVgIHByb3BlcnR5IGNvbnRyb2xzIHRoZSB1cHBlciBsaW1pdCBvbgorICBob3cgbWFueSBzb3VyY2VzIGNhbiBiZSBjb21iaW5lZCBwZXIgdW5pdHkgc291cmNlIGZpbGUuCisKKyAgRXhhbXBsZSB1c2FnZToKKworICAuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgIGFkZF9saWJyYXJ5KGV4YW1wbGVfbGlicmFyeQorICAgICAgICAgICAgICAgIHNvdXJjZTEuY3h4CisgICAgICAgICAgICAgICAgc291cmNlMi5jeHgKKyAgICAgICAgICAgICAgICBzb3VyY2UzLmN4eAorICAgICAgICAgICAgICAgIHNvdXJjZTQuY3h4KQorCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4YW1wbGVfbGlicmFyeSBQUk9QRVJUSUVTCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEX01PREUgQkFUQ0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JVFlfQlVJTERfQkFUQ0hfU0laRSAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworYGBHUk9VUGBgCisgIFdoZW4gaW4gdGhpcyBtb2RlIGVhY2ggdGFyZ2V0IGV4cGxpY2l0bHkgc3BlY2lmaWVzIGhvdyB0byBncm91cAorICBzb3VyY2UgZmlsZXMuIEVhY2ggc291cmNlIGZpbGUgdGhhdCBoYXMgdGhlIHNhbWUKKyAgOnByb3Bfc2Y6YFVOSVRZX0dST1VQYCB2YWx1ZSB3aWxsIGJlIGdyb3VwZWQgdG9nZXRoZXIuIEFueSBzb3VyY2VzCisgIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgY29tcGlsZWQgaW5kaXZpZHVhbGx5LiBUaGUKKyAgOnByb3BfdGd0OmBVTklUWV9CVUlMRF9CQVRDSF9TSVpFYCBwcm9wZXJ0eSBpcyBpZ25vcmVkIHdoZW4gdXNpbmcKKyAgdGhpcyBtb2RlLgorCisgIEV4YW1wbGUgdXNhZ2U6CisKKyAgLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICBhZGRfbGlicmFyeShleGFtcGxlX2xpYnJhcnkKKyAgICAgICAgICAgICAgICBzb3VyY2UxLmN4eAorICAgICAgICAgICAgICAgIHNvdXJjZTIuY3h4CisgICAgICAgICAgICAgICAgc291cmNlMy5jeHgKKyAgICAgICAgICAgICAgICBzb3VyY2U0LmN4eCkKKworICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhleGFtcGxlX2xpYnJhcnkgUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAgICAgICAgICBVTklUWV9CVUlMRF9NT0RFIEdST1VQCisgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzb3VyY2UxLmN4eCBzb3VyY2UyLmN4eCBzb3VyY2UzLmN4eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJidWNrZXQxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHNvdXJjZTQuY3h4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgImJ1Y2tldDIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworSWYgbm8gZXhwbGljaXQgOnByb3BfdGd0OmBVTklUWV9CVUlMRF9NT0RFYCBoYXMgYmVlbiBzcGVjaWZpZWQsIENNYWtlIHdpbGwKK2RlZmF1bHQgdG8gYGBCQVRDSGBgLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19DT05GSUdVUkFUSU9OX1RZUEUucnN0IGIvSGVscC9wcm9wX3RndC9WU19DT05GSUdVUkFUSU9OX1RZUEUucnN0CmluZGV4IDY0MGJlZDUuLjRhZGZmZDQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfQ09ORklHVVJBVElPTl9UWVBFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0NPTkZJR1VSQVRJT05fVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19DT05GSUdVUkFUSU9OX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogVmlzdWFsIFN0dWRpbyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gdHlwZS4KIAogU2V0cyB0aGUgYGBDb25maWd1cmF0aW9uVHlwZWBgIGF0dHJpYnV0ZSBmb3IgYSBnZW5lcmF0ZWQgVmlzdWFsIFN0dWRpbyBwcm9qZWN0LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5ELnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfQ09NTUFORC5yc3QKaW5kZXggYmE1ZmQwYS4uNTg0NzZkNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5ELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0RFQlVHR0VSX0NPTU1BTkQucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfREVCVUdHRVJfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFNldHMgdGhlIGxvY2FsIGRlYnVnZ2VyIGNvbW1hbmQgZm9yIFZpc3VhbCBTdHVkaW8gQysrIHRhcmdldHMuCiBUaGUgcHJvcGVydHkgdmFsdWUgbWF5IHVzZQogOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfQ09NTUFORF9BUkdVTUVOVFMucnN0IGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUy5yc3QKaW5kZXggMDZlZjVkNS4uNmMyNjYwMSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUy5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBTZXRzIHRoZSBsb2NhbCBkZWJ1Z2dlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciBWaXN1YWwgU3R1ZGlvIEMrKyB0YXJnZXRzLgogVGhlIHByb3BlcnR5IHZhbHVlIG1heSB1c2UKIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RFQlVHR0VSX0VOVklST05NRU5ULnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQucnN0CmluZGV4IGY1NWFjN2IuLjJmNTlhODIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogU2V0cyB0aGUgbG9jYWwgZGVidWdnZXIgZW52aXJvbm1lbnQgZm9yIFZpc3VhbCBTdHVkaW8gQysrIHRhcmdldHMuCiBUaGUgcHJvcGVydHkgdmFsdWUgbWF5IHVzZQogOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfV09SS0lOR19ESVJFQ1RPUlkucnN0IGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKaW5kZXggMDA4YmJmNi4uYzE2M2FiZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFNldHMgdGhlIGxvY2FsIGRlYnVnZ2VyIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBWaXN1YWwgU3R1ZGlvIEMrKyB0YXJnZXRzLgogVGhlIHByb3BlcnR5IHZhbHVlIG1heSB1c2UKIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RFU0tUT1BfRVhURU5TSU9OU19WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CmluZGV4IDE5ZDE2MjAuLjVmZDIzZTEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWaXN1YWwgU3R1ZGlvIFdpbmRvd3MgMTAgRGVza3RvcCBFeHRlbnNpb25zIFZlcnNpb24KIAogU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBEZXNrdG9wIEV4dGVuc2lvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEUucnN0IGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFLnJzdAppbmRleCAxYmMzNjFjLi5hMzg4MjU2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX0RPQ1VNRU5UQVRJT05fRklMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogVmlzdWFsIFN0dWRpbyBtYW5hZ2VkIHByb2plY3QgLk5FVCBkb2N1bWVudGF0aW9uIG91dHB1dAogCiBTZXRzIHRoZSB0YXJnZXQgWE1MIGRvY3VtZW50YXRpb24gZmlsZSBvdXRwdXQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VQUk9QX3JlZm5hbWVfVEFHX3RhZ25hbWUucnN0IGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfUkVGRVJFTkNFUFJPUF9yZWZuYW1lX1RBR190YWduYW1lLnJzdAppbmRleCBhYjMxMWVhLi41YjljYWVlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VQUk9QX3JlZm5hbWVfVEFHX3RhZ25hbWUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRVBST1BfcmVmbmFtZV9UQUdfdGFnbmFtZS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ET1RORVRfUkVGRVJFTkNFUFJPUF88cmVmbmFtZT5fVEFHXzx0YWduYW1lPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBEZWZpbmVzIGFuIFhNTCBwcm9wZXJ0eSBgYDx0YWduYW1lPmBgIGZvciBhIC5ORVQgcmVmZXJlbmNlCiBgYDxyZWZuYW1lPmBgLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUwucnN0IGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfUkVGRVJFTkNFU19DT1BZX0xPQ0FMLnJzdAppbmRleCA3NjQxYmE1Li41NTZmYThhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUwucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRVNfQ09QWV9MT0NBTC5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ET1RORVRfUkVGRVJFTkNFU19DT1BZX0xPQ0FMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBTZXRzIHRoZSAqKkNvcHkgTG9jYWwqKiBwcm9wZXJ0eSBmb3IgYWxsIC5ORVQgaGludCByZWZlcmVuY2VzIGluIHRoZSB0YXJnZXQKIAogQm9vbGVhbiBwcm9wZXJ0eSB0byBlbmFibGUvZGlzYWJsZSBjb3B5aW5nIG9mIC5ORVQgaGludCByZWZlcmVuY2VzIHRvCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VfcmVmbmFtZS5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VfcmVmbmFtZS5yc3QKaW5kZXggNTgxNDAwNS4uOWM0ZDM0YSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ET1RORVRfUkVGRVJFTkNFX3JlZm5hbWUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRV9yZWZuYW1lLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX0RPVE5FVF9SRUZFUkVOQ0VfPHJlZm5hbWU+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogVmlzdWFsIFN0dWRpbyBtYW5hZ2VkIHByb2plY3QgLk5FVCByZWZlcmVuY2Ugd2l0aCBuYW1lIGBgPHJlZm5hbWU+YGAKIGFuZCBoaW50IHBhdGguCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfRFBJX0FXQVJFLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfRFBJX0FXQVJFLnJzdAppbmRleCA4MjY0MGNjLi40N2NlMWNlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0RQSV9BV0FSRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19EUElfQVdBUkUucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfRFBJX0FXQVJFCiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBTZXQgdGhlIE1hbmlmZXN0IFRvb2wgLT4gSW5wdXQgYW5kIE91dHB1dCAtPiBEUEkgQXdhcmVuZXNzIGluIHRoZSBWaXN1YWwgU3R1ZGlvCiB0YXJnZXQgcHJvamVjdCBwcm9wZXJ0aWVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0lPVF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9WU19JT1RfRVhURU5TSU9OU19WRVJTSU9OLnJzdAppbmRleCAyN2M4YTNkLi5jYTZhM2NhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0lPVF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfSU9UX0VYVEVOU0lPTlNfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19JT1RfRVhURU5TSU9OU19WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWaXN1YWwgU3R1ZGlvIFdpbmRvd3MgMTAgSW9UIEV4dGVuc2lvbnMgVmVyc2lvbgogCiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIElvVCBFeHRlbnNpb25zIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19JT1RfU1RBUlRVUF9UQVNLLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfSU9UX1NUQVJUVVBfVEFTSy5yc3QKaW5kZXggYWRkNTBjYi4uMjU5MDU1ZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19JT1RfU1RBUlRVUF9UQVNLLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0lPVF9TVEFSVFVQX1RBU0sucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfSU9UX1NUQVJUVVBfVEFTSwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVmlzdWFsIFN0dWRpbyBXaW5kb3dzIDEwIElvVCBDb250aW51b3VzIEJhY2tncm91bmQgVGFzawogCiBTcGVjaWZpZXMgdGhhdCB0aGUgdGFyZ2V0IHNob3VsZCBiZSBjb21waWxlZCBhcyBhIENvbnRpbnVvdXMgQmFja2dyb3VuZCBUYXNrIGxpYnJhcnkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcucnN0IGIvSGVscC9wcm9wX3RndC9WU19KVVNUX01ZX0NPREVfREVCVUdHSU5HLnJzdAppbmRleCA0MmZiOGFkLi43MjRiZDJmIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfSlVTVF9NWV9DT0RFX0RFQlVHR0lORy5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19KVVNUX01ZX0NPREVfREVCVUdHSU5HCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogRW5hYmxlIEp1c3QgTXkgQ29kZSB3aXRoIFZpc3VhbCBTdHVkaW8gZGVidWdnZXIuCiAKIFN1cHBvcnRlZCBvbiA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBoaWdoZXIsCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX01PQklMRV9FWFRFTlNJT05TX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9WU19NT0JJTEVfRVhURU5TSU9OU19WRVJTSU9OLnJzdAppbmRleCBiZTNjOWEwLi5iMzA3ZTg0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX01PQklMRV9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfTU9CSUxFX0VYVEVOU0lPTlNfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19NT0JJTEVfRVhURU5TSU9OU19WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWaXN1YWwgU3R1ZGlvIFdpbmRvd3MgMTAgTW9iaWxlIEV4dGVuc2lvbnMgVmVyc2lvbgogCiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIE1vYmlsZSBFeHRlbnNpb25zIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19OT19TT0xVVElPTl9ERVBMT1kucnN0IGIvSGVscC9wcm9wX3RndC9WU19OT19TT0xVVElPTl9ERVBMT1kucnN0CmluZGV4IGZmY2JkZTUuLmJmNmFjMTAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfTk9fU09MVVRJT05fREVQTE9ZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX05PX1NPTFVUSU9OX0RFUExPWS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19OT19TT0xVVElPTl9ERVBMT1kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIFNwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHNob3VsZCBub3QgYmUgbWFya2VkIGZvciBkZXBsb3ltZW50IHRvIGEgV2luZG93cyBDRQogb3IgV2luZG93cyBQaG9uZSBkZXZpY2UgaW4gdGhlIGdlbmVyYXRlZCBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1BBQ0tBR0VfUkVGRVJFTkNFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZTX1BBQ0tBR0VfUkVGRVJFTkNFUy5yc3QKaW5kZXggNWEwNDY1Yi4uZWMxNzU2NyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19QQUNLQUdFX1JFRkVSRU5DRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfUEFDS0FHRV9SRUZFUkVOQ0VTLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX1BBQ0tBR0VfUkVGRVJFTkNFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogVmlzdWFsIFN0dWRpbyBwYWNrYWdlIHJlZmVyZW5jZXMgZm9yIG51Z2V0LgogCiBBZGRzIG9uZSBvciBtb3JlIHNlbWljb2xvbi1kZWxpbWl0ZWQgcGFja2FnZSByZWZlcmVuY2VzIHRvIGEgZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1BMQVRGT1JNX1RPT0xTRVQucnN0IGIvSGVscC9wcm9wX3RndC9WU19QTEFURk9STV9UT09MU0VULnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2E5MmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19QTEFURk9STV9UT09MU0VULnJzdApAQCAtMCwwICsxLDEyIEBACitWU19QTEFURk9STV9UT09MU0VUCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworT3ZlcnJpZGVzIHRoZSBwbGF0Zm9ybSB0b29sc2V0IHVzZWQgdG8gYnVpbGQgYSB0YXJnZXQuCisKK09ubHkgc3VwcG9ydGVkIHdoZW4gdGhlIGNvbXBpbGVyIHVzZWQgYnkgdGhlIGdpdmVuIHRvb2xzZXQgaXMgdGhlCitzYW1lIGFzIHRoZSBjb21waWxlciB1c2VkIHRvIGJ1aWxkIHRoZSB3aG9sZSBzb3VyY2UgdHJlZS4KKworVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB0byBjcmVhdGUgZHJpdmVyIHByb2plY3RzIHdpdGggdGhlIHRvb2xzZXRzCisiV2luZG93c1VzZXJNb2RlRHJpdmVyMTAuMCIgb3IgIldpbmRvd3NLZXJuZWxNb2RlRHJpdmVyMTAuMCIuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1BST0pFQ1RfSU1QT1JULnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfUFJPSkVDVF9JTVBPUlQucnN0CmluZGV4IDU2OWM4ZWEuLmY1ZTk2OTggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfUFJPSkVDVF9JTVBPUlQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfUFJPSkVDVF9JTVBPUlQucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfUFJPSkVDVF9JTVBPUlQKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogVmlzdWFsIFN0dWRpbyBtYW5hZ2VkIHByb2plY3QgaW1wb3J0cwogCiBBZGRzIHRvIGEgZ2VuZXJhdGVkIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBvbmUgb3IgbW9yZSBzZW1pY29sb24tZGVsaW1pdGVkIHBhdGhzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1NES19SRUZFUkVOQ0VTLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfU0RLX1JFRkVSRU5DRVMucnN0CmluZGV4IDk5OTg3ZjUuLjlhMDgyZTcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfU0RLX1JFRkVSRU5DRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfU0RLX1JFRkVSRU5DRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfU0RLX1JFRkVSRU5DRVMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBWaXN1YWwgU3R1ZGlvIHByb2plY3QgU0RLIHJlZmVyZW5jZXMuCiBTcGVjaWZ5IGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIFNESyByZWZlcmVuY2VzCiB0byBiZSBhZGRlZCB0byBhIGdlbmVyYXRlZCBWaXN1YWwgU3R1ZGlvIHByb2plY3QsIGUuZy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfU09MVVRJT05fREVQTE9ZLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfU09MVVRJT05fREVQTE9ZLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTZmNDExCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19TT0xVVElPTl9ERVBMT1kucnN0CkBAIC0wLDAgKzEsMjkgQEAKK1ZTX1NPTFVUSU9OX0RFUExPWQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgc2hvdWxkIGJlIG1hcmtlZCBmb3IgZGVwbG95bWVudCB3aGVuIG5vdCB0YXJnZXRpbmcKK1dpbmRvd3MgQ0UsIFdpbmRvd3MgUGhvbmUgb3IgYSBXaW5kb3dzIFN0b3JlIGFwcGxpY2F0aW9uLgorCitJZiB0aGUgdGFyZ2V0IHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBkZXBsb3ltZW50LCB0aGlzIHByb3BlcnR5IHdvbid0IGhhdmUKK2FueSBlZmZlY3QuCisKKzptYW51YWw6YEdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgYXJlIHN1cHBvcnRlZC4KKworRXhhbXBsZXMKK15eXl5eXl5eCisKK0Fsd2F5cyBkZXBsb3kgdGFyZ2V0IGBgZm9vYGA6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGFkZF9leGVjdXRhYmxlKGZvbyBTSEFSRUQgZm9vLmNwcCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBmb28gUFJPUEVSVFkgVlNfU09MVVRJT05fREVQTE9ZIE9OKQorCitEZXBsb3kgdGFyZ2V0IGBgZm9vYGAgZm9yIGFsbCBjb25maWd1cmF0aW9ucyBleGNlcHQgYGBSZWxlYXNlYGA6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGFkZF9leGVjdXRhYmxlKGZvbyBTSEFSRUQgZm9vLmNwcCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBmb28gUFJPUEVSVFkgVlNfU09MVVRJT05fREVQTE9ZICIkPE5PVDokPENPTkZJRzpSZWxlYXNlPj4iKQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19TT1VSQ0VfU0VUVElOR1NfdG9vbC5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZTX1NPVVJDRV9TRVRUSU5HU190b29sLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE3NmZjCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19TT1VSQ0VfU0VUVElOR1NfdG9vbC5yc3QKQEAgLTAsMCArMSwyMSBAQAorVlNfU09VUkNFX1NFVFRJTkdTXzx0b29sPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1NldCBhbnkgaXRlbSBtZXRhZGF0YSBvbiBhbGwgbm9uLWJ1aWx0IGZpbGVzIHRoYXQgdXNlIDx0b29sPi4KKworVGFrZXMgYSBsaXN0IG9mIGBgS2V5PVZhbHVlYGAgcGFpcnMuIFRlbGxzIHRoZSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcgordG8gc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFzIGl0ZW0gbWV0YWRhdGEgb24gYWxsIG5vbi1idWlsdCBmaWxlcwordGhhdCB1c2UgYGA8dG9vbD5gYC4KKworRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgbWFpbiBQUk9QRVJUWSBWU19TT1VSQ0VfU0VUVElOR1NfRlhDb21waWxlICJLZXk9VmFsdWUiICJLZXkyPVZhbHVlMiIpCisKK3dpbGwgc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFuZCBgYEtleTJgYCB0byBgYFZhbHVlMmBgIGZvciBhbGwKK25vbi1idWlsdCBmaWxlcyB0aGF0IHVzZSBgYEZYQ29tcGlsZWBgLgorCis6bWFudWFsOmBHZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGFyZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1VTRVJfUFJPUFMucnN0IGIvSGVscC9wcm9wX3RndC9WU19VU0VSX1BST1BTLnJzdAppbmRleCAxYmUyMjJiLi44ZjJhMTA1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX1VTRVJfUFJPUFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfVVNFUl9QUk9QUy5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19VU0VSX1BST1BTCiAtLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBTZXRzIHRoZSB1c2VyIHByb3BzIGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHZpc3VhbCBzdHVkaW8KIEMrKyBwcm9qZWN0IGZpbGUuIFRoZSBzdGFuZGFyZCBwYXRoIGlzCiBgYCQoVXNlclJvb3REaXIpXFxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHNgYCwgd2hpY2ggaXMKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fTUlOX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTi5yc3QKaW5kZXggMWFkN2E3MS4uNTBjZjIwMyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFZpc3VhbCBTdHVkaW8gV2luZG93cyBUYXJnZXQgUGxhdGZvcm0gTWluaW11bSBWZXJzaW9uCiAKIEZvciBXaW5kb3dzIDEwLiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gdmVyc2lvbiBvZiB0aGUgT1MgdGhhdCBpcyBiZWluZwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19XSU5SVF9DT01QT05FTlQucnN0IGIvSGVscC9wcm9wX3RndC9WU19XSU5SVF9DT01QT05FTlQucnN0CmluZGV4IGUxNjBiZDYuLjhiNGFhZjcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfV0lOUlRfQ09NUE9ORU5ULnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX1dJTlJUX0NPTVBPTkVOVC5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19XSU5SVF9DT01QT05FTlQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogTWFyayBhIHRhcmdldCBhcyBhIFdpbmRvd3MgUnVudGltZSBjb21wb25lbnQgZm9yIHRoZSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvci4KIENvbXBpbGUgdGhlIHRhcmdldCB3aXRoIGBgQysrL0NYYGAgbGFuZ3VhZ2UgZXh0ZW5zaW9ucyBmb3IgV2luZG93cyBSdW50aW1lLgogRm9yIGBgU0hBUkVEYGAgYW5kIGBgTU9EVUxFYGAgbGlicmFyaWVzLCB0aGlzIGFsc28gZGVmaW5lcyB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvV0lORE9XU19FWFBPUlRfQUxMX1NZTUJPTFMucnN0IGIvSGVscC9wcm9wX3RndC9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKaW5kZXggODY3MTFiZi4uMDBmMzJmNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKQEAgLTEsNiArMSw4IEBACiBXSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoaXMgcHJvcGVydHkgaXMgaW1wbGVtZW50ZWQgb25seSBmb3IgTVMtY29tcGF0aWJsZSB0b29scyBvbiBXaW5kb3dzLgogCiBFbmFibGUgdGhpcyBib29sZWFuIHByb3BlcnR5IHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgbW9kdWxlIGRlZmluaXRpb24KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfRVhQTElDSVRfRklMRV9UWVBFLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfRVhQTElDSVRfRklMRV9UWVBFLnJzdAppbmRleCBkYzkyOTAyLi5lMDFhMDM0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfRVhQTElDSVRfRklMRV9UWVBFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFNldCB0aGUgWGNvZGUgYGBleHBsaWNpdEZpbGVUeXBlYGAgYXR0cmlidXRlIG9uIGl0cyByZWZlcmVuY2UgdG8gYQogdGFyZ2V0LiAgQ01ha2UgY29tcHV0ZXMgYSBkZWZhdWx0IGJhc2VkIG9uIHRhcmdldCB0eXBlIGJ1dAogY2FuIGJlIHRvbGQgZXhwbGljaXRseSB3aXRoIHRoaXMgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QKaW5kZXggYzMyYjRkZS4uMDZhM2NmOSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9HRU5FUkFURV9TQ0hFTUUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfR0VORVJBVEVfU0NIRU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX0dFTkVSQVRFX1NDSEVNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogSWYgZW5hYmxlZCwgdGhlIDpnZW5lcmF0b3I6YFhjb2RlYCBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBzY2hlbWEgZmlsZXMuICBUaGVzZQogYXJlIHVzZWZ1bCB0byBpbnZva2UgYW5hbHl6ZSwgYXJjaGl2ZSwgYnVpbGQtZm9yLXRlc3RpbmcgYW5kIHRlc3QKIGFjdGlvbnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9QUk9EVUNUX1RZUEUucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9QUk9EVUNUX1RZUEUucnN0CmluZGV4IGY0ZWY1YzAuLjE3YTljM2YgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfUFJPRFVDVF9UWVBFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1BST0RVQ1RfVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9QUk9EVUNUX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogU2V0IHRoZSBYY29kZSBgYHByb2R1Y3RUeXBlYGAgYXR0cmlidXRlIG9uIGl0cyByZWZlcmVuY2UgdG8gYQogdGFyZ2V0LiAgQ01ha2UgY29tcHV0ZXMgYSBkZWZhdWx0IGJhc2VkIG9uIHRhcmdldCB0eXBlIGJ1dAogY2FuIGJlIHRvbGQgZXhwbGljaXRseSB3aXRoIHRoaXMgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUi5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUi5yc3QKaW5kZXggY2M5YmFjMi4uYzcyZWMwNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfQUREUkVTU19TQU5JVElaRVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBBZGRyZXNzIFNhbml0aXplcmBgIGluIHRoZSBEaWFnbm9zdGljcwogc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfQUREUkVTU19TQU5JVElaRVJfVVNFX0FGVEVSX1JFVFVSTi5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdAppbmRleCAzN2EwNDNhLi4yOTNiNWQ0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgRGV0ZWN0IHVzZSBvZiBzdGFjayBhZnRlciByZXR1cm5gYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FSR1VNRU5UUy5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BUkdVTUVOVFMucnN0CmluZGV4IDFmMjI4ZTMuLjJiZmNiNDEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FSR1VNRU5UUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfQVJHVU1FTlRTLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9BUkdVTUVOVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBTcGVjaWZ5IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIEFyZ3VtZW50cwogc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfREVCVUdfQVNfUk9PVC5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19BU19ST09ULnJzdAppbmRleCA1NDA3ZTgwLi4yNTIzZGViIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19BU19ST09ULnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19BU19ST09ULnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9ERUJVR19BU19ST09UCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIFdoZXRoZXIgdG8gZGVidWcgdGhlIHRhcmdldCBhcyAncm9vdCcuCiAKIFBsZWFzZSByZWZlciB0byB0aGUgOnByb3BfdGd0OmBYQ09ERV9HRU5FUkFURV9TQ0hFTUVgIHRhcmdldCBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfREVCVUdfRE9DVU1FTlRfVkVSU0lPTklORy5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HLnJzdAppbmRleCA5YWZlZWRkLi5iYmNhZTM1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFdoZXRoZXIgdG8gZW5hYmxlCiBgYEFsbG93IGRlYnVnZ2luZyB3aGVuIHVzaW5nIGRvY3VtZW50IFZlcnNpb25zIEJyb3dzZXJgYAogaW4gdGhlIE9wdGlvbnMgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUi5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ESVNBQkxFX01BSU5fVEhSRUFEX0NIRUNLRVIucnN0CmluZGV4IDFhNmZjZmQuLjNkMzE1YTIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9ESVNBQkxFX01BSU5fVEhSRUFEX0NIRUNLRVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGBgTWFpbiBUaHJlYWQgQ2hlY2tlcmBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUy5yc3QKaW5kZXggOTIyNDAyMi4uMmNhMjBmNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgRHluYW1pYyBMaWJyYXJ5IExvYWRzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFLnJzdAppbmRleCAyMDNjODAzLi4yNzhjOWVmIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RZTkFNSUNfTElOS0VSX0FQSV9VU0FHRS5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBEeW5hbWljIExpbmtlciBBUEkgdXNhZ2VgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0VOVklST05NRU5ULnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0VOVklST05NRU5ULnJzdAppbmRleCBjNmQ4NzVlLi4xNjU0MmY4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0VOVklST05NRU5UCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBTcGVjaWZ5IGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgQXJndW1lbnRzCiBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9FWEVDVVRBQkxFLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0VYRUNVVEFCTEUucnN0CmluZGV4IDEwNDg0MWIuLmI0NTNmMTAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0VYRUNVVEFCTEUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0VYRUNVVEFCTEUucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0VYRUNVVEFCTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogU3BlY2lmeSBwYXRoIHRvIGV4ZWN1dGFibGUgaW4gdGhlIEluZm8gc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkCiBYY29kZSBzY2hlbWUuIElmIG5vdCBzZXQgdGhlIHNjaGVtYSBnZW5lcmF0b3Igd2lsbCBzZWxlY3QgdGhlCiBjdXJyZW50IHRhcmdldCBpZiBpdCBpcyBhY3R1YWxseSBleGVjdXRhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfR1VBUkRfTUFMTE9DLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0dVQVJEX01BTExPQy5yc3QKaW5kZXggYzRlODNkYS4uNGIyNDJhMiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfR1VBUkRfTUFMTE9DLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9HVUFSRF9NQUxMT0MucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0dVQVJEX01BTExPQwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBHdWFyZCBNYWxsb2NgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUC5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AucnN0CmluZGV4IDczOTkyYzMuLjJhODEzYWEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgYGBNYWluIFRocmVhZCBDaGVja2VyYGAgb3B0aW9uCiBgYFBhdXNlIG9uIGlzc3Vlc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUxMT0NfR1VBUkRfRURHRVMucnN0CmluZGV4IGNhNzYxYzAuLjc1MGRhNzQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9NQUxMT0NfR1VBUkRfRURHRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYE1hbGxvYyBHdWFyZCBFZGdlc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19TQ1JJQkJMRS5yc3QKaW5kZXggYzVkZGI5NS4uNGViZDIxYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUxMT0NfU0NSSUJCTEUucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX01BTExPQ19TQ1JJQkJMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBNYWxsb2MgU2NyaWJibGVgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19TVEFDSy5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0sucnN0CmluZGV4IDE3MGYzM2QuLjVhZmUzNGUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19TVEFDSy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NUQUNLLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0sKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYE1hbGxvYyBTdGFja2BgIGluIHRoZSBEaWFnbm9zdGljcwogc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUi5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSLnJzdAppbmRleCBiYjcwMTQxLi5jYzc3NGM0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVGhyZWFkIFNhbml0aXplcmBgIGluIHRoZSBEaWFnbm9zdGljcwogc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUC5yc3QKaW5kZXggNWRlYWRiMS4uM2JiMjU5NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSX1NUT1AucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVGhyZWFkIFNhbml0aXplciAtIFBhdXNlIG9uIGlzc3Vlc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIucnN0CmluZGV4IDBjZDgyM2QuLjExNDYxMzAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUi5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcmBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVJfU1RPUC5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QLnJzdAppbmRleCBkMWE5YmNhLi4zNThmMjk4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcmBgIG9wdGlvbgogYGBQYXVzZSBvbiBpc3N1ZXNgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWS5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKaW5kZXggZjUzOGYxZC4uZDhkNTZmYyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogU3BlY2lmeSB0aGUgYGBXb3JraW5nIERpcmVjdG9yeWBgIG9mIHRoZSAqUnVuKiBhbmQgKlByb2ZpbGUqCiBhY3Rpb25zIGluIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLiBJbiBjYXNlIHRoZSB2YWx1ZSBjb250YWlucwogZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHRob3NlIGFyZSBldmFsdWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUy5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUy5yc3QKaW5kZXggNmU3MGU4Yi4uNjAzMDEwOSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1pPTUJJRV9PQkpFQ1RTLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBab21iaWUgT2JqZWN0c2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ1RFU1QucnN0IGIvSGVscC9wcm9wX3RndC9YQ1RFU1QucnN0CmluZGV4IGViNDdlNjAuLjY3ZTlhNzAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENURVNULnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDVEVTVC5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ1RFU1QKIC0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogVGhpcyB0YXJnZXQgaXMgYSBYQ1Rlc3QgQ0ZCdW5kbGUgb24gdGhlIE1hYy4KIAogVGhpcyBwcm9wZXJ0eSB3aWxsIHVzdWFsbHkgZ2V0IHNldCB2aWEgdGhlIDpjb21tYW5kOmB4Y3Rlc3RfYWRkX2J1bmRsZWAKZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS8zLjEwLnJzdCBiL0hlbHAvcmVsZWFzZS8zLjEwLnJzdAppbmRleCAwM2VkYTM2Li4xMTc0MTViIDEwMDY0NAotLS0gYS9IZWxwL3JlbGVhc2UvMy4xMC5yc3QKKysrIGIvSGVscC9yZWxlYXNlLzMuMTAucnN0CkBAIC0yMzYsNyArMjM2LDcgQEAKICAgc3VwcG9ydCBmb3IgQysrMTEgYW5kIGEgcG9ydCBvZiBsaWJ1di4gIFNlZSBgQ01ha2UgSXNzdWUgMTcxMzdgXy4KICAgVXNlIENNYWtlIDMuOSBvciBsb3dlciBpbnN0ZWFkIGZvciBIUC1VWCBzdXBwb3J0LgogCi0uLiBfYENNYWtlIElzc3VlIDE3MTM3YDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE3MTM3CisuLiBfYENNYWtlIElzc3VlIDE3MTM3YDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTcxMzcKIAogT3RoZXIgQ2hhbmdlcwogPT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlLzMuMTgucnN0IGIvSGVscC9yZWxlYXNlLzMuMTgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzg0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvMy4xOC5yc3QKQEAgLTAsMCArMSwzMzQgQEAKK0NNYWtlIDMuMTggUmVsZWFzZSBOb3RlcworKioqKioqKioqKioqKioqKioqKioqKioqCisKKy4uIG9ubHk6OiBodG1sCisKKyAgLi4gY29udGVudHM6OgorCitDaGFuZ2VzIG1hZGUgc2luY2UgQ01ha2UgMy4xNyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcuCisKK05ldyBGZWF0dXJlcworPT09PT09PT09PT09CisKK0xhbmd1YWdlcworLS0tLS0tLS0tCisKKyogVGhlIGBgQ1VEQWBgIGxhbmd1YWdlIGNhbiBub3cgYmUgY29tcGlsZWQgdXNpbmcgQ2xhbmcgb24gbm9uLVdpbmRvd3MKKyAgcGxhdGZvcm1zLiBTZXBhcmFibGUgY29tcGlsYXRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgb24gYW55IHBsYXRmb3JtLgorCitDb21tYW5kLUxpbmUKKy0tLS0tLS0tLS0tLQorCisqIDptYW51YWw6YGNtYWtlKDEpYCBnYWluZWQgc3VwcG9ydCBmb3IgcHJvZmlsaW5nIG9mIENNYWtlIHNjcmlwdHMgdGhyb3VnaAorICB0aGUgcGFyYW1ldGVycyBgYC0tcHJvZmlsaW5nLW91dHB1dGBgIGFuZCBgYC0tcHJvZmlsaW5nLWZvcm1hdGBgLgorCisqIDptYW51YWw6YGNtYWtlKDEpYCBnYWluZWQgYSBgYGNhdGBgIGNvbW1hbmQgbGluZQorICBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBjb25jYXRlbmF0ZSBmaWxlcyBhbmQgcHJpbnQgdGhlbQorICBvbiBzdGFuZGFyZCBvdXRwdXQuCisKK0NvbW1hbmRzCistLS0tLS0tLQorCisqIFRoZSA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgIGFuZCA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgIGNvbW1hbmRzCisgIGxlYXJuZWQgdG8gY3JlYXRlIDpyZWY6YEFsaWFzIFRhcmdldHNgIHJlZmVyZW5jaW5nIG5vbi1gYEdMT0JBTGBgCisgIDpyZWY6YEltcG9ydGVkIFRhcmdldHNgLgorCisqIFRoZSA6Y29tbWFuZDpgY21ha2VfbGFuZ3VhZ2UoKWAgY29tbWFuZCB3YXMgYWRkZWQgZm9yIG1ldGEtb3BlcmF0aW9ucyBvbgorICBzY3JpcHRlZCBvciBidWlsdC1pbiBjb21tYW5kcywgc3RhcnRpbmcgd2l0aCBhIG1vZGUgdG8gYGBDQUxMYGAgb3RoZXIKKyAgY29tbWFuZHMsIGFuZCBgYEVWQUwgQ09ERWBgIHRvIGlucGxhY2UgZXZhbHVhdGUgYSBDTWFrZSBzY3JpcHQuCisKKyogVGhlIDpjb21tYW5kOmBleGVjdXRlX3Byb2Nlc3NgIGNvbW1hbmQgZ2FpbmVkIHRoZSBgYEVDSE9fT1VUUFVUX1ZBUklBQkxFYGAKKyAgYW5kIGBgRUNIT19FUlJPUl9WQVJJQUJMRWBgIG9wdGlvbnMuCisKKyogVGhlIDpjb21tYW5kOmBleHBvcnRgIGNvbW1hbmQgbm93IHJhaXNlIGFuIGVycm9yIGlmIHVzZWQgbXVsdGlwbGUgdGltZXMgd2l0aAorICBzYW1lIGBgRklMRWBgIHdpdGhvdXQgYGBBUFBFTkRgYC4gU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTAzYC4KKworKiBUaGUgOmNvbW1hbmQ6YGZpbGVgIGNvbW1hbmQgZ2FpbmVkIHRoZSBgYEFSQ0hJVkVfQ1JFQVRFYGAgYW5kCisgIGBgQVJDSElWRV9FWFRSQUNUYGAgc3ViY29tbWFuZHMgdG8gZXhwb3NlIHRoZSA6bWFudWFsOmBjbWFrZSgxKWAgYGAtRSB0YXJgYAorICBmdW5jdGlvbmFsaXR5IHRvIENNYWtlIHNjcmlwdGluZyBjb2RlLgorCisqIFRoZSA6Y29tbWFuZDpgZmlsZShDT05GSUdVUkUpYCBzdWJjb21tYW5kIHdhcyBjcmVhdGVkIGluIG9yZGVyIHRvIHJlcGxpY2F0ZQorICB0aGUgOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgcmVzb3J0aW5nIHRvIGEKKyAgcHJlLWV4aXN0aW5nIGZpbGUgb24gZGlzayBhcyBpbnB1dC4gVGhlIGNvbnRlbnQgaXMgaW5zdGVhZCBwYXNzZWQgYXMgYQorICBzdHJpbmcuCisKKyogVGhlIDpjb21tYW5kOmBmaWxlKFVQTE9BRClgIGNvbW1hbmQgZ2FpbmVkIGBgVExTX1ZFUklGWWBgIGFuZCBgYFRMU19DQUlORk9gYAorICBvcHRpb25zIHRvIGNvbnRyb2wgc2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KKworKiBUaGUgOmNvbW1hbmQ6YGZpbmRfcHJvZ3JhbWAsIDpjb21tYW5kOmBmaW5kX2xpYnJhcnlgLCA6Y29tbWFuZDpgZmluZF9wYXRoYAorICBhbmQgOmNvbW1hbmQ6YGZpbmRfZmlsZWAgY29tbWFuZHMgZ2FpbmVkIGEgbmV3IGBgUkVRVUlSRURgYCBvcHRpb24gdGhhdCB3aWxsCisgIHN0b3AgcHJvY2Vzc2luZyB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaWYgbm90aGluZyBpcyBmb3VuZC4KKworKiBUaGUgOmNvbW1hbmQ6YGdldF9wcm9wZXJ0eWAgY29tbWFuZCB3aXRoIGBgU09VUkNFYGAgc2NvcGUgZ2FpbmVkIHRoZQorICBgYERJUkVDVE9SWWBgIGFuZCBgYFRBUkdFVF9ESVJFQ1RPUllgYCBvcHRpb25zIHRvIGdldCBhIHByb3BlcnR5CisgIGZyb20gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSBzY29wZS4KKworKiBUaGUgOmNvbW1hbmQ6YGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eWAgY29tbWFuZCBnYWluZWQgdGhlIGBgRElSRUNUT1JZYGAKKyAgYW5kIGBgVEFSR0VUX0RJUkVDVE9SWWBgIG9wdGlvbnMgdG8gZ2V0IGEgcHJvcGVydHkgZnJvbSB0aGUKKyAgcHJvdmlkZWQgZGlyZWN0b3J5IHNjb3BlLgorCisqIFRoZSA6Y29tbWFuZDpgbGlzdGAgb3BlcmF0aW9uIGBgU09SVGBgIGdhaW5lZCB0aGUgYGBOQVRVUkFMYGAgc29ydAorICBvcHRpb24gdG8gc29ydCB1c2luZyBuYXR1cmFsIG9yZGVyIChzZWUgYGBzdHJ2ZXJzY21wKDMpYGAgbWFudWFsKS4KKworKiBUaGUgOmNvbW1hbmQ6YHNldF9wcm9wZXJ0eWAgY29tbWFuZCB3aXRoIHRoZSBgYFNPVVJDRWBgIHNjb3BlIGdhaW5lZCB0aGUKKyAgYGBESVJFQ1RPUllgYCBhbmQgYGBUQVJHRVRfRElSRUNUT1JZYGAgb3B0aW9ucyB0byBzZXQgcHJvcGVydGllcworICBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5IHNjb3Blcy4KKworKiBUaGUgOmNvbW1hbmQ6YHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllc2AgY29tbWFuZCBnYWluZWQgdGhlIGBgRElSRUNUT1JZYGAKKyAgYW5kIGBgVEFSR0VUX0RJUkVDVE9SWWBgIG9wdGlvbnMgdG8gc2V0IHByb3BlcnRpZXMgaW4gdGhlIHByb3ZpZGVkCisgIGRpcmVjdG9yeSBzY29wZXMuCisKKyogVGhlIDpjb21tYW5kOmBzdHJpbmdgIGNvbW1hbmQgbGVhcm5lZCBhIG5ldyBgYEhFWGBgIHN1Yi1jb21tYW5kLCB3aGljaAorICBjb252ZXJ0cyBzdHJpbmdzIGludG8gdGhlaXIgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uCisKK1ZhcmlhYmxlcworLS0tLS0tLS0tCisKKyogQSA6dmFyaWFibGU6YENNQUtFX0NVREFfQVJDSElURUNUVVJFU2AgdmFyaWFibGUgd2FzIGFkZGVkIHRvIHNwZWNpZnkKKyAgQ1VEQSBvdXRwdXQgYXJjaGl0ZWN0dXJlcy4gIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIGluc3RlYWQgb2YKKyAgc3BlY2lmeWluZyBvcHRpb25zIG1hbnVhbGx5LCBhcyB0aGlzIGFwcHJvYWNoIGlzIGNvbXBpbGVyLWFnbm9zdGljLgorICBUaGUgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgYXV0b21hdGljYWxseSB3aGVuCisgIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCA8Q01BS0VfPExBTkc+X0NPTVBJTEVSX0lEPmAgaXMgYGBOVklESUFgYC4KKyAgVGhlIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IDpwcm9wX3RndDpgQ1VEQV9BUkNISVRFQ1RVUkVTYAorICB0YXJnZXQgcHJvcGVydHkuICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDRgLgorCisqIFRoZSA6dmFyaWFibGU6YENNQUtFX1BDSF9XQVJOX0lOVkFMSURgIHZhcmlhYmxlIHdhcyBhZGRlZCB0byBpbml0aWFsaXplIHRoZQorICA6cHJvcF90Z3Q6YFBDSF9XQVJOX0lOVkFMSURgIHRhcmdldCBwcm9wZXJ0eSB0byBhbGxvdyB0aGUgcmVtb3ZhbCBvZiB0aGUKKyAgcHJlY29tcGlsZWQgaGVhZGVyIGludmFsaWQgd2FybmluZy4KKworUHJvcGVydGllcworLS0tLS0tLS0tLQorCisqIFRoZSA6cHJvcF90Z3Q6YENVREFfQVJDSElURUNUVVJFU2AgdGFyZ2V0IHByb3BlcnR5IHdhcyBhZGRlZCB0byBzcGVjaWZ5CisgIENVREEgb3V0cHV0IGFyY2hpdGVjdHVyZXMuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIGluc3RlYWQgb2YKKyAgc3BlY2lmeWluZyBvcHRpb25zIG1hbnVhbGx5LCBhcyB0aGlzIGFwcHJvYWNoIGlzIGNvbXBpbGVyLWFnbm9zdGljLgorICBUaGUgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIG5ldyA6dmFyaWFibGU6YENNQUtFX0NVREFfQVJDSElURUNUVVJFU2AKKyAgdmFyaWFibGUuICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDRgLgorCisqIFRoZSA6cHJvcF90Z3Q6YEZvcnRyYW5fUFJFUFJPQ0VTU2AgdGFyZ2V0IHByb3BlcnR5IGFuZAorICA6cHJvcF9zZjpgRm9ydHJhbl9QUkVQUk9DRVNTYCBzb3VyY2UtZmlsZSBwcm9wZXJ0eSB3ZXJlIGFkZGVkIHRvCisgIGNvbnRyb2wgcHJlcHJvY2Vzc2luZyBvZiBGb3J0cmFuIHNvdXJjZSBmaWxlcy4KKworKiBUaGUgOnByb3BfdGd0OmBGUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz5gIHRhcmdldCBwcm9wZXJ0eQorICBhbmQgYXNzb2NpYXRlZCA6dmFyaWFibGU6YENNQUtFX0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF88Q09ORklHPmAKKyAgdmFyaWFibGUgd2VyZSBjcmVhdGVkIHRvIGFsbG93IGFkZGluZyBhIHBvc3RmaXggdG8gdGhlIG5hbWUgb2YgYQorICBmcmFtZXdvcmsgZmlsZSBuYW1lIHdoZW4gdXNpbmcgYSBtdWx0aS1jb25maWcgZ2VuZXJhdG9yLgorCisqIFRoZSA6cHJvcF9zZjpgT0JKRUNUX09VVFBVVFNgIHNvdXJjZSBmaWxlIHByb3BlcnR5IG5vdyBzdXBwb3J0cworICA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgorCisqIFRoZSA6cHJvcF90Z3Q6YFBDSF9XQVJOX0lOVkFMSURgIHRhcmdldCBwcm9wZXJ0eSB3YXMgYWRkZWQgdG8gYWxsb3cgdGhlCisgIHJlbW92YWwgb2YgdGhlIHByZWNvbXBpbGVkIGhlYWRlciBpbnZhbGlkIHdhcm5pbmcuCisKKyogVGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERfTU9ERWAgdGFyZ2V0IHByb3BlcnR5IHdhcyBhZGRlZCB0byB0ZWxsCisgIGdlbmVyYXRvcnMgd2hpY2ggYWxnb3JpdGhtIHRvIHVzZSBmb3IgZ3JvdXBpbmcgaW5jbHVkZWQgc291cmNlCisgIGZpbGVzLgorCisqIFRoZSA6cHJvcF90Z3Q6YFZTX1NPVVJDRV9TRVRUSU5HU188dG9vbD5gIHRhcmdldCBwcm9wZXJ0eSB3YXMgYWRkZWQKKyAgdG8gdGVsbCA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSB0byBhZGQKKyAgbWV0YWRhdGEgdG8gbm9uLWJ1aWx0IHNvdXJjZSBmaWxlcyB1c2luZyBgYDx0b29sPmBgLgorCisqIFRoZSA6cHJvcF9zZjpgVlNfU0VUVElOR1NgIHNvdXJjZSBmaWxlIHByb3BlcnR5IHdhcyBhZGRlZCB0byB0ZWxsCisgIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIHRvIGFkZAorICBtZXRhZGF0YSB0byBhIG5vbi1idWlsdCBzb3VyY2UgZmlsZS4KKworKiBUaGUgOnByb3BfdGd0OmBWU19QTEFURk9STV9UT09MU0VUYCB0YXJnZXQgcHJvcGVydHkgd2FzIGFkZGVkIHRvIHRlbGwKKyAgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxMCBhbmQgYWJvdmUgdG8gb3ZlcnJpZGUKKyAgdGhlIHBsYXRmb3JtIHRvb2xzZXQuCisKKyogVGhlIDpwcm9wX3RndDpgVlNfU09MVVRJT05fREVQTE9ZYCB0YXJnZXQgcHJvcGVydHkgd2FzIGFkZGVkIHRvIHRlbGwKKyAgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxMCBhbmQgYWJvdmUgdG8gbWFyayBhCisgIHRhcmdldCBmb3IgZGVwbG95bWVudCBldmVuIHdoZW4gbm90IGJ1aWxkaW5nIGZvciBXaW5kb3dzIFBob25lL1N0b3JlL0NFLgorCitNb2R1bGVzCistLS0tLS0tCisKKyogVGhlIDptb2R1bGU6YENoZWNrTGlua2VyRmxhZ2AgbW9kdWxlIGhhcyBiZWVuIGFkZGVkIHRvIHByb3ZpZGUgYQorICBmYWNpbGl0eSB0byBjaGVjayB2YWxpZGl0eSBvZiBsaW5rIGZsYWdzLgorCisqIFRoZSA6bW9kdWxlOmBFeHRlcm5hbFByb2plY3RgIG1vZHVsZSA6Y29tbWFuZDpgRXh0ZXJuYWxQcm9qZWN0X0FkZGAgY29tbWFuZAorICBnYWluZWQgYSBuZXcgYGBHSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWWBgIGtleXdvcmQuICBUaGlzIGNhbiBiZSB1c2VkIHRvCisgIHNwZWNpZnkgaG93IGZhaWxlZCByZWJhc2Ugb3BlcmF0aW9ucyBkdXJpbmcgYSBnaXQgdXBkYXRlIHNob3VsZCBiZSBoYW5kbGVkLgorICBUaGUgYGBDTUFLRV9FUF9HSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWWBgIHZhcmlhYmxlIHdhcyBhbHNvIGFkZGVkIGFzIGEKKyAgZ2xvYmFsIGRlZmF1bHQgYW5kIGlzIGhvbm9yZWQgYnkgYm90aCB0aGUgOm1vZHVsZTpgRXh0ZXJuYWxQcm9qZWN0YCBhbmQKKyAgOm1vZHVsZTpgRmV0Y2hDb250ZW50YCBtb2R1bGVzLgorCisqIFRoZSA6bW9kdWxlOmBGZXRjaENvbnRlbnRgIG1vZHVsZSA6Y29tbWFuZDpgRmV0Y2hDb250ZW50X0RlY2xhcmVgIGNvbW1hbmQKKyAgbm93IHN1cHBvcnRzIGEgYGBTT1VSQ0VfU1VCRElSYGAgb3B0aW9uLiAgSXQgY2FuIGJlIHVzZWQgdG8gZGlyZWN0CisgIDpjb21tYW5kOmBGZXRjaENvbnRlbnRfTWFrZUF2YWlsYWJsZWAgdG8gbG9vayBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbgorICBmb3IgdGhlIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlLgorCisqIFRoZSA6bW9kdWxlOmBGaW5kQkxBU2AgbW9kdWxlIG5vdyBwcm92aWRlcyBhbiBpbXBvcnRlZCB0YXJnZXQuCisKKyogVGhlIDptb2R1bGU6YEZpbmRDVURBVG9vbGtpdGAgbW9kdWxlOgorCisgICogZ2FpbmVkIHRoZSB2YXJpYWJsZQorICAgIGBgQ1VEQVRvb2xraXRfTElCUkFSWV9ST09UYGAsIHdoaWNoIGlzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUKKyAgICBgYG52dm1gYCBkaXJlY3RvcnkgYW5kIGBgdmVyc2lvbi50eHRgYC4KKworICAqIHVzZXMgdG9vbGtpdCBhbmQgbGlicmFyeSByb290IGZvdW5kIGR1cmluZyBgYENVREFgYCBjb21waWxlciBkZXRlY3Rpb24uCisKKyogVGhlIDptb2R1bGU6YEZpbmRMQVBBQ0tgIG1vZHVsZSBub3cgcHJvdmlkZXMgYW4gaW1wb3J0ZWQgdGFyZ2V0LgorCisqIFRoZSA6bW9kdWxlOmBGaW5kUHl0aG9uM2AsIDptb2R1bGU6YEZpbmRQeXRob24yYCBhbmQgOm1vZHVsZTpgRmluZFB5dGhvbmAKKyAgbW9kdWxlczoKKworICAqIGdhaW5lZCB0aGUgcG9zc2liaWxpdHkgdG8gY3JlYXRlIHBlci1hcnRpZmFjdCBjYWNoZSB2YXJpYWJsZXMgZm9yCisgICAgaW50ZXJhY3RpdmUgZWRpdGluZyBpbiA6bWFudWFsOmBjbWFrZS1ndWkoMSlgIGFuZCA6bWFudWFsOmBjY21ha2UoMSlgLgorCisgICogZ2FpbmVkIHN1Yi1jb21wb25lbnRzIGBgRGV2ZWxvcG1lbnQuTW9kdWxlYGAgYW5kCisgICAgYGBEZXZlbG9wbWVudC5FbWJlZGBgIHVuZGVyIHRoZSBgYERldmVsb3BtZW50YGAgY29tcG9uZW50LgorCisgICogZ2FpbmVkIHRoZSBjYXBhYmlsaXR5IHRvIHNwZWNpZnkgd2hpY2ggUHl0aG9uIGltcGxlbWVudGF0aW9ucyB0byBmaW5kLAorICAgIGluY2x1ZGluZyBgYElyb25QeXRob25gYCBhbmQgYGBQeVB5YGAuCisKKyogVGhlIDptb2R1bGU6YEZpbmRSdWJ5YCBtb2R1bGUgaW5wdXQgYW5kIG91dHB1dCB2YXJpYWJsZXMgd2VyZSBhbGwgcmVuYW1lZAorICBmcm9tIGBgUlVCWV9gYCB0byBgYFJ1YnlfYGAgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgZmluZCBtb2R1bGVzLgorICBJbnB1dCB2YXJpYWJsZXMgb2YgdGhlIG9sZCBjYXNlIHdpbGwgYmUgaG9ub3JlZCBpZiBwcm92aWRlZCwgYW5kIG91dHB1dAorICB2YXJpYWJsZXMgb2YgdGhlIG9sZCBjYXNlIGFyZSBhbHdheXMgcHJvdmlkZWQuCisKKyogVGhlIDptb2R1bGU6YEZpbmRTV0lHYCBtb2R1bGUgbm93IGFjY2VwdHMgdGFyZ2V0IGxhbmd1YWdlcyBhcyAgYGBDT01QT05FTlRTYGAKKyAgYW5kIGBgT1BUSU9OQUxfQ09NUE9ORU5UU2BgIGFyZ3VtZW50cyB0byBgYGZpbmRfcGFja2FnZWBgLgorCisqIFRoZSA6bW9kdWxlOmBHb29nbGVUZXN0YCBtb2R1bGUgOmNvbW1hbmQ6YGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzYCBjb21tYW5kOgorCisgICogZ2FpbmVkIGEgbmV3IGBgRElTQ09WRVJZX01PREVgYCBvcHRpb24gdG8gY29udHJvbCB3aGVuIHRoZSB0ZXN0CisgICAgZGlzY292ZXJ5IHN0ZXAgaXMgcnVuLiAgSXQgb2ZmZXJzIGEgbmV3IGBgUFJFX1RFU1RgYCBzZXR0aW5nIHRvCisgICAgcnVuIHRoZSBkaXNjb3ZlcnkgYXQgdGVzdCB0aW1lIGluc3RlYWQgb2YgYnVpbGQgdGltZS4gIEEgbmV3CisgICAgYGBDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERWBgIHZhcmlhYmxlIGNhbiBiZSB1c2VkCisgICAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGdsb2JhbGx5LgorCisgICogZ2FpbmVkIGEgbmV3IG9wdGlvbmFsIHBhcmFtZXRlciBgYFhNTF9PVVRQVVRfRElSYGAuIFdoZW4gc2V0IHRoZQorICAgIEpVbml0IFhNTCB0ZXN0IHJlc3VsdHMgYXJlIHN0b3JlZCBpbiB0aGF0IGRpcmVjdG9yeS4KKworKiBUaGUgOm1vZHVsZTpgRmluZExpYlhzbHRgIG1vZHVsZSBub3cgcHJvdmlkZXMgaW1wb3J0ZWQgdGFyZ2V0cy4KKworKiBUaGUgOm1vZHVsZTpgVXNlU1dJR2AgbW9kdWxlIG5vdyBzdXBwb3J0cyBGb3J0cmFuIGFzIGEgdGFyZ2V0IGxhbmd1YWdlIGlmCisgIHRoZSBgYFNXSUdfRVhFQ1VUQUJMRWBgIGlzIFNXSUctRm9ydHJhbl8uCisKKy4uIF9gU1dJRy1Gb3J0cmFuYDogaHR0cHM6Ly9naXRodWIuY29tL3N3aWctZm9ydHJhbi9zd2lnCisKK0dlbmVyYXRvciBFeHByZXNzaW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGBgJDxERVZJQ0VfTElOSzouLi4+YGAgYW5kIGBgJDxIT1NUX0xJTks6Li4uPmBgCisgIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgd2VyZSBhZGRlZAorICB0byBtYW5hZ2UgZGV2aWNlIGFuZCBob3N0IGxpbmsgc3RlcHMuCisKKyogVGhlIGBgJDxMSU5LX0xBTkdVQUdFOi4uLj5gYCBhbmQgYGAkPExJTktfTEFOR19BTkRfSUQ6Li4uPmBgCisgIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgd2VyZSBhZGRlZC4KKworQ1Rlc3QKKy0tLS0tCisKKyogOm1hbnVhbDpgY3Rlc3QoMSlgIGdhaW5lZCBhIG5ldyA6dmFyaWFibGU6YENURVNUX1JFU09VUkNFX1NQRUNfRklMRWAKKyAgdmFyaWFibGUsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYQorICA6cmVmOmByZXNvdXJjZSBzcGVjaWZpY2F0aW9uIGZpbGUgPGN0ZXN0LXJlc291cmNlLXNwZWNpZmljYXRpb24tZmlsZT5gLgorCisqIDptYW51YWw6YGN0ZXN0KDEpYCBnYWluZWQgYSBgYC0tc3RvcC1vbi1mYWlsdXJlYGAgb3B0aW9uLAorICB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHJ1bm5pbmcgdGhlIHRlc3RzIG9uY2Ugb25lIGhhcyBmYWlsZWQuCisKKyogVGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kIGdhaW5lZCBhIGBgU1RPUF9PTl9GQUlMVVJFYGAgb3B0aW9uCisgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgcnVubmluZyB0aGUgdGVzdHMgb25jZSBvbmUgaGFzIGZhaWxlZC4KKworKiBUaGUgOm1vZHVsZTpgQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WYCBtb2R1bGUKKyAgOmNvbW1hbmQ6YGN0ZXN0X2NvdmVyYWdlX2NvbGxlY3RfZ2NvdmAgY29tbWFuZCBnYWluZWQgYQorICBgYFRBUkJBTExfQ09NUFJFU1NJT05gYCBvcHRpb24gdG8gY29udHJvbCBjb21wcmVzc2lvbiBvZiB0aGUKKyAgdGFyYmFsbCBvZiBjb2xsZWN0ZWQgcmVzdWx0cy4KKworQ1BhY2sKKy0tLS0tCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIEFyY2hpdmUgR2VuZXJhdG9yYCdzIGBgVFhaYGAgZm9ybWF0IGxlYXJuZWQgdGhlCisgIDp2YXJpYWJsZTpgQ1BBQ0tfQVJDSElWRV9USFJFQURTYCB2YXJpYWJsZSB0byBlbmFibGUgcGFyYWxsZWwgY29tcHJlc3Npb24uCisgIFJlcXVpcmVzIHN1cHBvcnQgaW4gdGhlIGBgbGlibHptYWBgIHVzZWQgYnkgQ01ha2UuCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIE5TSVMgR2VuZXJhdG9yYCBnYWluZWQgYSBuZXcgdmFyaWFibGUKKyAgOnZhcmlhYmxlOmBDUEFDS19OU0lTX01BTklGRVNUX0RQSV9BV0FSRWAgdG8gZGVjbGFyZSB0aGF0IHRoZQorICBpbnN0YWxsZXIgaXMgRFBJLWF3YXJlLgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBSUE0gR2VuZXJhdG9yYCBnYWluZWQKKyAgOnZhcmlhYmxlOmBDUEFDS19SUE1fUFJFX1RSQU5TX1NDUklQVF9GSUxFYCBhbmQKKyAgOnZhcmlhYmxlOmBDUEFDS19SUE1fUE9TVF9UUkFOU19TQ1JJUFRfRklMRWAKKyAgdmFyaWFibGVzIHRvIHNwZWNpZnkgcHJlLSBhbmQgcG9zdC10cmFuc2FjdGlvbiBzY3JpcHRzLgorCitPdGhlcgorLS0tLS0KKworKiA6bWFudWFsOmBjbWFrZS1ndWkoMSlgIG5vdyBwb3B1bGF0ZXMgaXRzIGdlbmVyYXRvciBzZWxlY3Rpb24KKyAgd2lkZ2V0IGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgOmVudnZhcjpgQ01BS0VfR0VORVJBVE9SYCBlbnZpcm9ubWVudAorICB2YXJpYWJsZS4gIEFkZGl0aW9uYWxseSwgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgIDplbnZ2YXI6YENNQUtFX0dFTkVSQVRPUl9QTEFURk9STWAgYW5kIDplbnZ2YXI6YENNQUtFX0dFTkVSQVRPUl9UT09MU0VUYAorICBhcmUgdXNlZCB0byBwb3B1bGF0ZSB0aGVpciByZXNwZWN0aXZlIHdpZGdldCBkZWZhdWx0cy4KKworKiA6bWFudWFsOmBjY21ha2UoMSlgIGxlYXJuZWQgdG8gcmVhZCBhIDplbnZ2YXI6YENDTUFLRV9DT0xPUlNgCisgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGN1c3RvbWl6ZSBjb2xvcnMuCisKK0RlcHJlY2F0ZWQgYW5kIFJlbW92ZWQgRmVhdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBUaGUgOm1vZHVsZTpgRG9jdW1lbnRhdGlvbmAgbW9kdWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgdmlhCisgIDpwb2xpY3k6YENNUDAxMDZgLiBUaGlzIG1vZHVsZSB3YXMgZXNzZW50aWFsbHkgVlRLIGNvZGUgdGhhdCBDTWFrZSBzaG91bGQKKyAgbm90IGJlIHNoaXBwaW5nIGFueW1vcmUuCisKKyogQW4gZXhwbGljaXQgZGVwcmVjYXRpb24gZGlhZ25vc3RpYyB3YXMgYWRkZWQgZm9yIHBvbGljeSBgYENNUDAwNzBgYAorICBhbmQgcG9saWN5IGBgQ01QMDA3MWBgIChgYENNUDAwNjlgYCBhbmQgYmVsb3cgd2VyZSBhbHJlYWR5IGRlcHJlY2F0ZWQpLgorICBUaGUgOm1hbnVhbDpgY21ha2UtcG9saWNpZXMoNylgIG1hbnVhbCBleHBsYWlucyB0aGF0IHRoZSBPTEQgYmVoYXZpb3JzCisgIG9mIGFsbCBwb2xpY2llcyBhcmUgZGVwcmVjYXRlZCBhbmQgdGhhdCBwcm9qZWN0cyBzaG91bGQgcG9ydCB0byB0aGUKKyAgTkVXIGJlaGF2aW9ycy4KKworT3RoZXIgQ2hhbmdlcworPT09PT09PT09PT09PQorCisqIE9uIFdpbmRvd3MsIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgYW5kIDpnZW5lcmF0b3I6YE5pbmphIE11bHRpLUNvbmZpZ2AKKyAgZ2VuZXJhdG9ycywgd2hlbiBhIGNvbXBpbGVyIGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCwgbm93IHNlbGVjdAorICB0aGUgZmlyc3QgY29tcGlsZXIgKG9mIGFueSBuYW1lKSBmb3VuZCBpbiBkaXJlY3RvcmllcyBsaXN0ZWQgYnkgdGhlCisgIGBgUEFUSGBgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisqIFRoZSA6cHJvcF90Z3Q6YExJTktfT1BUSU9OU2AgYW5kIDpwcm9wX3RndDpgSU5URVJGQUNFX0xJTktfT1BUSU9OU2AgdGFyZ2V0CisgIHByb3BlcnRpZXMgYXJlIG5vdyB1c2VkIGZvciB0aGUgZGV2aWNlIGxpbmsgc3RlcC4KKyAgU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTA1YC4KKworKiBDcmVhdGlvbiBvZiBhbiBgYEFMSUFTYGAgdGFyZ2V0IG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIHRhcmdldCBub3cgcmFpc2VzIGFuCisgIGVycm9yLiBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDdgLgorCisqIExpbmtpbmcgYSB0YXJnZXQgdG8gaXRzZWxmIHRocm91Z2ggYW4gYWxpYXMgbm93IHJhaXNlcyBhbiBlcnJvci4KKyAgU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTA4YC4KKworKiBUaGUgOm1vZHVsZTpgRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3NgIG1vZHVsZSBvcHRpb24gYGBSRVFVSVJFRF9WQVJTYGAKKyAgaXMgbm93IG9wdGlvbmFsIGlmIGBgSEFORExFX0NPTVBPTkVOVFNgYCBpcyBzcGVjaWZpZWQuCisKKyogVGhlIDpjb21tYW5kOmBzb3VyY2VfZ3JvdXBgIGNvbW1hbmQgbm93IGFsc28gcmVjb2duaXplcyBmb3J3YXJkIHNsYXNoZXMKKyAgYXMgc3ViZ3JvdXAgZGVsaW1pdGVycywgbm90IGp1c3QgYmFja3NsYXNoZXMuCisKKyogOm1hbnVhbDpgY3Rlc3QoMSlgIG5vdyBsb2dzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGl0IHNldHMgZm9yIGVhY2ggdGVzdCwKKyAgZWl0aGVyIGR1ZSB0byB0aGUgOnByb3BfdGVzdDpgRU5WSVJPTk1FTlRgIHByb3BlcnR5IG9yIHRoZQorICA6cmVmOmByZXNvdXJjZSBhbGxvY2F0aW9uIDxjdGVzdC1yZXNvdXJjZS1hbGxvY2F0aW9uPmAgZmVhdHVyZSwgYW5kIHN1Ym1pdHMKKyAgdGhpcyBsb2cgdG8gQ0Rhc2guIEl0IGRvZXMgbm90IGxvZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3ZXJlIHNldAorICBvdXRzaWRlIG9mIENUZXN0LgorCisqIFdoZW4gYnVpbGRpbmcgQ01ha2UgaXRzZWxmIGZyb20gc291cmNlIGFuZCBub3QgdXNpbmcgYSBzeXN0ZW0tcHJvdmlkZWQKKyAgbGliY3VybCwgSFRUUC8yIHN1cHBvcnQgaXMgbm93IGVuYWJsZWQgZm9yIGNvbW1hbmRzIHN1cHBvcnRpbmcKKyAgbmV0d29yayBjb21tdW5pY2F0aW9uIHZpYSBgYGh0dHAocylgYCwgc3VjaCBhcyA6Y29tbWFuZDpgZmlsZShET1dOTE9BRClgLAorICA6Y29tbWFuZDpgZmlsZShVUExPQUQpYCwgYW5kIDpjb21tYW5kOmBjdGVzdF9zdWJtaXRgLgorICBUaGUgcHJlY29tcGlsZWQgYmluYXJpZXMgcHJvdmlkZWQgb24gYGBjbWFrZS5vcmdgYCBub3cgc3VwcG9ydCBIVFRQLzIuCisKKyogVGhlIDptYW51YWw6YGNtYWtlLWZpbGUtYXBpKDcpYCAiY29kZW1vZGVsIiB2ZXJzaW9uIDIgYGB2ZXJzaW9uYGAgZmllbGQgaGFzCisgIGJlZW4gdXBkYXRlZCB0byAyLjEuCisKKyogVGhlIDptYW51YWw6YGNtYWtlLWZpbGUtYXBpKDcpYCAiY29kZW1vZGVsIiB2ZXJzaW9uIDIgInRhcmdldCIgb2JqZWN0IGdhaW5lZAorICBhIG5ldyBgYHByZWNvbXBpbGVIZWFkZXJzYGAgZmllbGQgaW4gdGhlIGBgY29tcGlsZUdyb3Vwc2BgIG9iamVjdHMuCisKK1VwZGF0ZXMKKz09PT09PT0KKworQ2hhbmdlcyBtYWRlIHNpbmNlIENNYWtlIDMuMTguMCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcuCisKKzMuMTguMQorLS0tLS0tCisKKyogVGhlIDpnZW5lcmF0b3I6YFhjb2RlYCBnZW5lcmF0b3IsIHdoZW4gOnZhcmlhYmxlOmBDTUFLRV9PU1hfQVJDSElURUNUVVJFU2AKKyAgaXMgbm90IGRlZmluZWQsIG5vdyBzZWxlY3RzIGBgJChOQVRJVkVfQVJDSF9BQ1RVQUwpYGAgYXMgdGhlIGRlZmF1bHQKKyAgYXJjaGl0ZWN0dXJlICh0aGUgWGNvZGUgYGBBUkNIU2BgIHNldHRpbmcpLiAgVGhpcyBpcyBuZWVkZWQgZm9yIFhjb2RlIDEyCisgIHRvIHNlbGVjdCB0aGUgaG9zdCdzIGFyY2hpdGVjdHVyZSwgd2hpY2ggb2xkZXIgdmVyc2lvbnMgb2YgWGNvZGUgZGlkCisgIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2LzAtc2FtcGxlLXRvcGljLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvMC1zYW1wbGUtdG9waWMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2MwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2LzAtc2FtcGxlLXRvcGljLnJzdApAQCAtMCwwICsxLDcgQEAKKzAtc2FtcGxlLXRvcGljCistLS0tLS0tLS0tLS0tLQorCisqIFRoaXMgaXMgYSBzYW1wbGUgcmVsZWFzZSBub3RlIGZvciB0aGUgY2hhbmdlIGluIGEgdG9waWMuCisgIERldmVsb3BlcnMgc2hvdWxkIGFkZCBzaW1pbGFyIG5vdGVzIGZvciBlYWNoIHRvcGljIGJyYW5jaAorICBtYWtpbmcgYSBub3Rld29ydGh5IGNoYW5nZS4gIEVhY2ggZG9jdW1lbnQgc2hvdWxkIGJlIG5hbWVkCisgIGFuZCB0aXRsZWQgdG8gbWF0Y2ggdGhlIHRvcGljIG5hbWUgdG8gYXZvaWQgbWVyZ2UgY29uZmxpY3RzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9DUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L0NQQUNLX0VYVEVSTkFMX0JVSUxUX1BBQ0tBR0VTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjQ0NmQyCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9DUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUy5yc3QKQEAgLTAsMCArMSw0IEBACitDUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiA6Y3BhY2tfZ2VuOmBDUGFjayBFeHRlcm5hbCBHZW5lcmF0b3JgIGxlYXJuZWQgdGhlIDp2YXJpYWJsZTpgQ1BBQ0tfRVhURVJOQUxfQlVJTFRfUEFDS0FHRVNgIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9GaW5kU0RMLXVwZGF0ZS5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRTREwtdXBkYXRlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODVkMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kU0RMLXVwZGF0ZS5yc3QKQEAgLTAsMCArMSwxMSBAQAorRmluZFNETC11cGRhdGUKKy0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptb2R1bGU6YEZpbmRTRExgIG1vZHVsZSBub3cgcHJvdmlkZXM6CisKKyAgKiBpbXBvcnRlZCB0YXJnZXQgYGBTREw6OlNETGBgLAorCisgICogcmVzdWx0IHZhcmlhYmxlcyBgYFNETF9MSUJSQVJJRVNgYCBhbmQgYGBTRExfSU5DTFVERV9ESVJTYGAsCisKKyAgKiB2ZXJzaW9uIHZhcmlhYmxlcyBgYFNETF9WRVJTSU9OYGAsIGBgU0RMX1ZFUlNJT05fTUFKT1JgYAorICAgIGBgU0RMX1ZFUlNJT05fTUlOT1JgYCwgYW5kIGBgU0RMX1ZFUlNJT05fUEFUQ0hgYC4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvRmluZFRJRkYtdGlmZnh4LnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvRmluZFRJRkYtdGlmZnh4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZkMzhmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kVElGRi10aWZmeHgucnN0CkBAIC0wLDAgKzEsNSBAQAorRmluZFRJRkYtdGlmZnh4CistLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOm1vZHVsZTpgRmluZFRJRkZgIG1vZHVsZSBnYWluZWQgYSBgYENYWGBgIGNvbXBvbmVudCB0bworICBmaW5kIHRoZSBgYHRpZmZ4eGBgIGxpYnJhcnkgY29udGFpbmluZyBDKysgYmluZGluZ3MuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRWdWxrYW4tZ2xzbGMucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kVnVsa2FuLWdsc2xjLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZiYzhmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kVnVsa2FuLWdsc2xjLnJzdApAQCAtMCwwICsxLDEwIEBACitGaW5kVnVsa2FuLWdsc2xjCistLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptb2R1bGU6YEZpbmRWdWxrYW5gIG1vZHVsZSBnYWluZWQgYSBuZXcgb3V0cHV0IHZhcmlhYmxlCisgIGBgVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEVgYCB3aGljaCBjb250YWlucyB0aGUgcGF0aCB0byB0aGUKKyAgR0xTTCBTUElSLVYgY29tcGlsZXIuCisKKyogVGhlIDptb2R1bGU6YEZpbmRWdWxrYW5gIG1vZHVsZSBnYWluZWQgYSBuZXcgdGFyZ2V0CisgIGBgVnVsa2FuOjpnbHNsY2BgIHdoaWNoIGNvbnRhaW5zIHRoZSBwYXRoIHRvIHRoZQorICBHTFNMIFNQSVItViBjb21waWxlci4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvY21ha2UtRS1jcmVhdGVfaGFyZGxpbmsucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9jbWFrZS1FLWNyZWF0ZV9oYXJkbGluay5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjZGM4NwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvY21ha2UtRS1jcmVhdGVfaGFyZGxpbmsucnN0CkBAIC0wLDAgKzEsNSBAQAorY21ha2UtRS1jcmVhdGVfaGFyZGxpbmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptYW51YWw6YGNtYWtlKDEpYCBnYWluZWQgYSBgYC1FIGNyZWF0ZV9oYXJkbGlua2BgIGNvbW1hbmQtbGluZSB0b29sCisgIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9jb25maWd1cmVfZmlsZS1wZXJtaXNzaW9uLWNvbnRyb2wucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9jb25maWd1cmVfZmlsZS1wZXJtaXNzaW9uLWNvbnRyb2wucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjUyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2NvbmZpZ3VyZV9maWxlLXBlcm1pc3Npb24tY29udHJvbC5yc3QKQEAgLTAsMCArMSw1IEBACitjb25maWd1cmVfZmlsZS1wZXJtaXNzaW9uLWNvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6Y29tbWFuZDpgY29uZmlndXJlX2ZpbGVgIGNvbW1hbmQgZ2FpbmVkIGEgYGBOT19TT1VSQ0VfUEVSTUlTU0lPTlNgYAorICBvcHRpb24gdG8gc3VwcHJlc3MgY29weWluZyB0aGUgaW5wdXQgZmlsZSdzIHBlcm1pc3Npb25zIHRvIHRoZSBvdXRwdXQgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvY3BhY2stcHJlLWFuZC1wb3N0LWJ1aWxkLXNjcmlwdHMucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9jcGFjay1wcmUtYW5kLXBvc3QtYnVpbGQtc2NyaXB0cy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3OTU4YgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvY3BhY2stcHJlLWFuZC1wb3N0LWJ1aWxkLXNjcmlwdHMucnN0CkBAIC0wLDAgKzEsNSBAQAorY3BhY2stcHJlLWFuZC1wb3N0LWJ1aWxkLXNjcmlwdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQ1BhY2sgbGVhcm5lZCB0aGUgOnZhcmlhYmxlOmBDUEFDS19QUkVfQlVJTERfU0NSSVBUU2AsIDp2YXJpYWJsZTpgQ1BBQ0tfUE9TVF9CVUlMRF9TQ1JJUFRTYCwKKyAgYW5kIDp2YXJpYWJsZTpgQ1BBQ0tfUEFDS0FHRV9GSUxFU2AgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9jdGVzdC1jdWRhLW1lbWNoZWNrLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvY3Rlc3QtY3VkYS1tZW1jaGVjay5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmODYxYQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvY3Rlc3QtY3VkYS1tZW1jaGVjay5yc3QKQEAgLTAsMCArMSw4IEBACitDVGVzdAorLS0tLS0KKworKiA6bWFudWFsOmBjdGVzdCgxKWAgZ2FpbmVkIHN1cHBvcnQgZm9yIGN1ZGEtbWVtY2hlY2sgYXMgYGBDVEVTVF9NRU1PUllDSEVDS19DT01NQU5EYGAuCisgIFRoZSBkaWZmZXJlbnQgdG9vbHMgKG1lbWNoZWNrLCByYWNlY2hlY2ssIHN5bmNjaGVjaywgaW5pdGNoZWNrKSBzdXBwbGllZCBieQorICBjdWRhLW1lbWNoZWNrIGNhbiBiZSBzZWxlY3RlZCBieSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBmbGFncyB1c2luZyB0aGUKKyAgYGBDVEVTVF9NRU1PUllDSEVDS19DT01NQU5EX09QVElPTlNgYCB2YXJpYWJsZS4KKyAgVGhlIGRlZmF1bHQgZmxhZ3MgYXJlIGAtLXRvb2wgbWVtY2hlY2sgLS1sZWFrLWNoZWNrIGZ1bGxgLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9kZXByZWNhdGUtcG9saWN5LW9sZC5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2RlcHJlY2F0ZS1wb2xpY3ktb2xkLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMwMWNjCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9kZXByZWNhdGUtcG9saWN5LW9sZC5yc3QKQEAgLTAsMCArMSwxMyBAQAorZGVwcmVjYXRlLXBvbGljeS1vbGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQW4gZXhwbGljaXQgZGVwcmVjYXRpb24gZGlhZ25vc3RpYyB3YXMgYWRkZWQgZm9yIHBvbGljeSBgYENNUDAwNzFgYAorICAoYGBDTVAwMDcxYGAgYW5kIGJlbG93IHdlcmUgYWxyZWFkeSBkZXByZWNhdGVkKS4KKyAgVGhlIDptYW51YWw6YGNtYWtlLXBvbGljaWVzKDcpYCBtYW51YWwgZXhwbGFpbnMgdGhhdCB0aGUgT0xEIGJlaGF2aW9ycworICBvZiBhbGwgcG9saWNpZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIHRoYXQgcHJvamVjdHMgc2hvdWxkIHBvcnQgdG8gdGhlCisgIE5FVyBiZWhhdmlvcnMuCisKKyogQ29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIG9mIENNYWtlIG9sZGVyIHRoYW4gMi44LjEyIGlzIG5vdyBkZXByZWNhdGVkCisgIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uLiAgQ2FsbHMgdG8KKyAgOmNvbW1hbmQ6YGNtYWtlX21pbmltdW1fcmVxdWlyZWRgIG9yIDpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIHRoYXQgc2V0CisgIHRoZSBwb2xpY3kgdmVyc2lvbiB0byBhbiBvbGRlciB2YWx1ZSBub3cgaXNzdWUgYSBkZXByZWNhdGlvbiBkaWFnbm9zdGljLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9maWxlYXBpLWNvZGVtb2RlbC0yLjIucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9maWxlYXBpLWNvZGVtb2RlbC0yLjIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTRkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2ZpbGVhcGktY29kZW1vZGVsLTIuMi5yc3QKQEAgLTAsMCArMSw3IEBACitmaWxlYXBpLWNvZGVtb2RlbC0yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6bWFudWFsOmBjbWFrZS1maWxlLWFwaSg3KWAgImNvZGVtb2RlbCIgdmVyc2lvbiAyIGBgdmVyc2lvbmBgIGZpZWxkIGhhcworICBiZWVuIHVwZGF0ZWQgdG8gMi4yLgorKiBUaGUgOm1hbnVhbDpgY21ha2UtZmlsZS1hcGkoNylgICJjb2RlbW9kZWwiIHZlcnNpb24gMiAidGFyZ2V0IiBvYmplY3QgZ2FpbmVkCisgIGEgbmV3IGBgbGFuZ3VhZ2VTdGFuZGFyZGBgIGZpZWxkIGluIHRoZSBgYGNvbXBpbGVHcm91cHNgYCBvYmplY3RzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9maW5kX3Byb2dyYW0tZXhlLW5vLXJlYWQucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9maW5kX3Byb2dyYW0tZXhlLW5vLXJlYWQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWI1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2ZpbmRfcHJvZ3JhbS1leGUtbm8tcmVhZC5yc3QKQEAgLTAsMCArMSw1IEBACitmaW5kX3Byb2dyYW0tZXhlLW5vLXJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6Y29tbWFuZDpgZmluZF9wcm9ncmFtYCBjb21tYW5kIG5vdyByZXF1aXJlcyBwZXJtaXNzaW9uIHRvIGV4ZWN1dGUKKyAgYnV0IG5vdCB0byByZWFkIHRoZSBmaWxlIGZvdW5kLiAgU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTA5YC4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvaW5zdGFsbC1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2luc3RhbGwtZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Y2ZmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2luc3RhbGwtZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMucnN0CkBAIC0wLDAgKzEsNSBAQAoraW5zdGFsbC1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBgYC0taW5zdGFsbGBgIGFyZ3VtZW50IG9mIHRoZSA6bWFudWFsOmBjbWFrZSgxKWAgY29tbWFuZCBsaW5lIHRvb2wgZ2FpbmVkIGEKKyAgYGAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zYGAgYXJndW1lbnQuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L21hY09TLXNkay1sYXRlc3QucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9tYWNPUy1zZGstbGF0ZXN0LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWFjM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9tYWNPUy1zZGstbGF0ZXN0LnJzdApAQCAtMCwwICsxLDEwIEBACittYWNPUy1zZGstbGF0ZXN0CistLS0tLS0tLS0tLS0tLS0tCisKKyogQnVpbGRpbmcgZm9yIG1hY09TIHdpbGwgbm93IHVzZSB0aGUgbGF0ZXN0IFNESyBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSwKKyAgdW5sZXNzIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IGNob3NlbiBhIFNESyB1c2luZyA6dmFyaWFibGU6YENNQUtFX09TWF9TWVNST09UYC4KKworICBUaGUgZGVwbG95bWVudCB0YXJnZXQgb3Igc3lzdGVtIG1hY09TIHZlcnNpb24gd2lsbCBub3QgYWZmZWN0CisgIHRoZSBjaG9pY2Ugb2YgU0RLLgorCisqIG1hY09TIFNES3Mgb2xkZXIgdGhhbiAxMC41IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9yZW1vdmUtY21ha2UtZ3VpLXF0NC5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L3JlbW92ZS1jbWFrZS1ndWktcXQ0LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI5Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9yZW1vdmUtY21ha2UtZ3VpLXF0NC5yc3QKQEAgLTAsMCArMSw1IEBACityZW1vdmUtY21ha2UtZ3VpLXF0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiA6bWFudWFsOmBjbWFrZS1ndWkoMSlgIG5vdyByZXF1aXJlcyBRdDUuIFN1cHBvcnQgZm9yIGNvbXBpbGluZyB3aXRoIFF0NCBoYXMKKyAgYmVlbiByZW1vdmVkLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9yZW1vdmUtd2Fybi11bnVzZWQtdmFycy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L3JlbW92ZS13YXJuLXVudXNlZC12YXJzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTA2ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9yZW1vdmUtd2Fybi11bnVzZWQtdmFycy5yc3QKQEAgLTAsMCArMSw2IEBACityZW1vdmUtd2Fybi11bnVzZWQtdmFycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOm1hbnVhbDpgY21ha2UoMSlgIGNvbW1hbmQtbGluZSBvcHRpb24gYGAtLXdhcm4tdW51c2VkLXZhcnNgYCBoYXMKKyAgYmVlbiByZW1vdmVkIGFuZCBpcyBub3cgc2lsZW50bHkgaWdub3JlZC4gIFRoZSBvcHRpb24gaGFzIG5vdCB3b3JrZWQKKyAgY29ycmVjdGx5IHNpbmNlIENNYWtlIDMuMy4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvdmlzdWFsLXN0dWRpby1hbmRyb2lkLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvdmlzdWFsLXN0dWRpby1hbmRyb2lkLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTFhMTEwCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi92aXN1YWwtc3R1ZGlvLWFuZHJvaWQucnN0CkBAIC0wLDAgKzEsNyBAQAordmlzdWFsLXN0dWRpby1hbmRyb2lkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVmlzdWFsIFN0dWRpbyAyMDE1IGFuZCBhYm92ZSBnYWluZWQKKyAgc3VwcG9ydCBmb3IgdGhlIFZpc3VhbCBTdHVkaW8gVG9vbHMgZm9yIEFuZHJvaWQuIFRoaXMgYWxsb3dzIHlvdSB0byBzZXQKKyAgOnZhcmlhYmxlOmBDTUFLRV9TWVNURU1fTkFNRWAgdG8gYEFuZHJvaWRgIHRvIGdlbmVyYXRlIGAudmN4cHJvamAgZmlsZXMgZm9yCisgIHRoZSBBbmRyb2lkIHRvb2xzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2luZGV4LnJzdCBiL0hlbHAvcmVsZWFzZS9pbmRleC5yc3QKaW5kZXggNWQxZjhhMi4uY2RjM2U4YiAxMDA2NDQKLS0tIGEvSGVscC9yZWxlYXNlL2luZGV4LnJzdAorKysgYi9IZWxwL3JlbGVhc2UvaW5kZXgucnN0CkBAIC03LDEyICs3LDE1IEBACiAgIFRoaXMgZmlsZSBzaG91bGQgaW5jbHVkZSB0aGUgYWRqYWNlbnQgImRldi50eHQiIGZpbGUKICAgaW4gZGV2ZWxvcG1lbnQgdmVyc2lvbnMgYnV0IG5vdCBpbiByZWxlYXNlIHZlcnNpb25zLgogCisuLiBpbmNsdWRlOjogZGV2LnR4dAorCiBSZWxlYXNlcwogPT09PT09PT0KIAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDEKIAorICAgMy4xOCA8My4xOD4KICAgIDMuMTcgPDMuMTc+CiAgICAzLjE2IDwzLjE2PgogICAgMy4xNSA8My4xNT4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQU5EUk9JRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0FORFJPSUQucnN0CmluZGV4IGZlZGU0Y2EuLjY4ZGNjZjIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQU5EUk9JRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9BTkRST0lELnJzdApAQCAtMSw1ICsxLDcgQEAKIEFORFJPSUQKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFNldCB0byBgYDFgYCB3aGVuIHRoZSB0YXJnZXQgc3lzdGVtICg6dmFyaWFibGU6YENNQUtFX1NZU1RFTV9OQU1FYCkgaXMKIGBgQW5kcm9pZGBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DQUNIRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NBQ0hFLnJzdAppbmRleCAyY2VmMjdlLi5kNTQ4OWM4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NBQ0hFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NBQ0hFLnJzdApAQCAtMSw2ICsxLDggQEAKIENBQ0hFCiAtLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIE9wZXJhdG9yIHRvIHJlYWQgY2FjaGUgdmFyaWFibGVzLgogCiBVc2UgdGhlIHN5bnRheCBgYCRDQUNIRXtWQVJ9YGAgdG8gcmVhZCBjYWNoZSBlbnRyeSBgYFZBUmBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQUlYX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKaW5kZXggYzY0ZGQ0OC4uNjk5ZmUwZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQUlYX0VYUE9SVF9BTExfU1lNQk9MUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQUlYX0VYUE9SVF9BTExfU1lNQk9MU2AgdGFyZ2V0IHByb3BlcnR5LgogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzIGl0IGlzCiBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMucnN0CmluZGV4IDg4NjJiYTkuLjJkNmI0YjkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BTlRfQURESVRJT05BTF9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9BTlRfQURESVRJT05BTF9PUFRJT05TYCB0YXJnZXQgcHJvcGVydHkuCiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVBJLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUEkucnN0CmluZGV4IGMwN2EwNWEuLjQzODhiZjIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUEkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUEkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQU5EUk9JRF9BUEkKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIE5WSURJQSBOc2lnaHQgVGVncmEgVmlzdWFsIFN0dWRpbwogRWRpdGlvbmAsIHRoaXMgdmFyaWFibGUgbWF5IGJlIHNldCB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUKIDpwcm9wX3RndDpgQU5EUk9JRF9BUElgIHRhcmdldCBwcm9wZXJ0eS4gIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUElfTUlOLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUElfTUlOLnJzdAppbmRleCAwMjQ2Yzc1Li5hMGQyYWI0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVBJX01JTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSV9NSU4ucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9BUElfTUlOCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfQVBJX01JTmAgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSQ0gucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSQ0gucnN0CmluZGV4IGI5MWNhNTcuLjlmMTI3NDIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUkNILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJDSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX0FSQ0gKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCBOVklESUEgTnNpZ2h0IFRlZ3JhIFZpc3VhbCBTdHVkaW8KIEVkaXRpb25gLCB0aGlzIHZhcmlhYmxlIG1heSBiZSBzZXQgdG8gc3BlY2lmeSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlCiA6cHJvcF90Z3Q6YEFORFJPSURfQVJDSGAgdGFyZ2V0IHByb3BlcnR5LiAgU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvcgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSQ0hfQUJJLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUkNIX0FCSS5yc3QKaW5kZXggMGEzZWQzYy4uNWEyZTNlYyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSQ0hfQUJJLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJDSF9BQkkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQU5EUk9JRF9BUkNIX0FCSQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWRgLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUKIHRhcmdldCBhcmNoaXRlY3R1cmUgYW5kIEFCSSB0byBiZSB1c2VkLiAgVmFsaWQgdmFsdWVzIGFyZToKIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSTV9NT0RFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUk1fTU9ERS5yc3QKaW5kZXggYWQzYzM3Yy4uOTczZmY3ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSTV9NT0RFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJNX01PREUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQU5EUk9JRF9BUk1fTU9ERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWRgIGFuZCA6dmFyaWFibGU6YENNQUtFX0FORFJPSURfQVJDSF9BQklgCiBpcyBzZXQgdG8gb25lIG9mIHRoZSBgYGFybWVhYmlgYCBhcmNoaXRlY3R1cmVzLCBzZXQgYGBDTUFLRV9BTkRST0lEX0FSTV9NT0RFYGAKIHRvIGBgT05gYCB0byB0YXJnZXQgMzItYml0IEFSTSBwcm9jZXNzb3JzIChgYC1tYXJtYGApLiAgT3RoZXJ3aXNlLCB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUk1fTkVPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJNX05FT04ucnN0CmluZGV4IDRiN2FlMDMuLjZiOWNmMDggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUk1fTkVPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSTV9ORU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FORFJPSURfQVJNX05FT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkYCBhbmQgOnZhcmlhYmxlOmBDTUFLRV9BTkRST0lEX0FSQ0hfQUJJYAogaXMgc2V0IHRvIGBgYXJtZWFiaS12N2FgYCBzZXQgYGBDTUFLRV9BTkRST0lEX0FSTV9ORU9OYGAgdG8gYGBPTmBgIHRvIHRhcmdldAogQVJNIE5FT04gZGV2aWNlcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BU1NFVFNfRElSRUNUT1JJRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FTU0VUU19ESVJFQ1RPUklFUy5yc3QKaW5kZXggYzM3MmZlNC4uM2RlMmJlNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FTU0VUU19ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FTU0VUU19ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX0FTU0VUU19ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTYCB0YXJnZXQgcHJvcGVydHkuCiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfR1VJLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9HVUkucnN0CmluZGV4IDE3NTUzNzUuLjgyMWJiZWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9HVUkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9HVUkucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9HVUkKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgOnByb3BfdGd0OmBBTkRST0lEX0dVSWAgdGFyZ2V0IHByb3BlcnR5IG9mCiBleGVjdXRhYmxlcy4gIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTLnJzdAppbmRleCA0NTFhOTI5Li44MGFiODQyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFSX0RFUEVOREVOQ0lFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBUl9ERVBFTkRFTkNJRVMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfSkFSX0RFUEVOREVOQ0lFU2AgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBUl9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFSX0RJUkVDVE9SSUVTLnJzdAppbmRleCBhZjgzZTM0Li40ZDE0OGQ4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFSX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFSX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfSkFSX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9KQVJfRElSRUNUT1JJRVNgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9KQVZBX1NPVVJDRV9ESVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QKaW5kZXggM2RjMDVlMC4uMDIxYmFhMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX0pBVkFfU09VUkNFX0RJUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfSkFWQV9TT1VSQ0VfRElSYCB0YXJnZXQgcHJvcGVydHkuCiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTLnJzdAppbmRleCA0MTkxOTA3Li40MWQ0Y2MzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OQVRJVkVfTElCX0RFUEVOREVOQ0lFUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgOnByb3BfdGd0OmBBTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTYCB0YXJnZXQKIHByb3BlcnR5LiAgU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMucnN0CmluZGV4IDdjYjk1MjcuLmU4NzU0N2QgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTYCB0YXJnZXQKIHByb3BlcnR5LiAgU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ESy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLLnJzdAppbmRleCBkMjQxZGQwLi43MmFjOTllIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FORFJPSURfTkRLCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCB0aGUgTkRLYCwgdGhpcyB2YXJpYWJsZSBob2xkcwogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBOREsuICBUaGUgZGlyZWN0b3J5IG11c3QKIGNvbnRhaW4gYSBgYHBsYXRmb3Jtc2BgIHN1YmRpcmVjdG9yeSBob2xkaW5nIHRoZSBgYGFuZHJvaWQtPGFwaT5gYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19ERVBSRUNBVEVEX0hFQURFUlMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19ERVBSRUNBVEVEX0hFQURFUlMucnN0CmluZGV4IDhlYTEyNTcuLjQwYTVjMWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREtfREVQUkVDQVRFRF9IRUFERVJTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX0RFUFJFQ0FURURfSEVBREVSUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX05ES19ERVBSRUNBVEVEX0hFQURFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCB0aGUgTkRLYCwgdGhpcyB2YXJpYWJsZQogbWF5IGJlIHNldCB0byBzcGVjaWZ5IHdoZXRoZXIgdG8gdXNlIHRoZSBkZXByZWNhdGVkIHBlci1hcGktbGV2ZWwKIGhlYWRlcnMgaW5zdGVhZCBvZiB0aGUgdW5pZmllZCBoZWFkZXJzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fSE9TVF9UQUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fSE9TVF9UQUcucnN0CmluZGV4IDIwNzAxOWEuLjlkNjFmYTQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX0hPU1RfVEFHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9IT1NUX1RBRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fSE9TVF9UQUcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcuMQorCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIHRoZSBOREtgLCB0aGlzIHZhcmlhYmxlCiBwcm92aWRlcyB0aGUgTkRLJ3MgImhvc3QgdGFnIiB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcGF0aCB0byBwcmVidWlsdAogdG9vbGNoYWlucyB0aGF0IHJ1biBvbiB0aGUgaG9zdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fVkVSU0lPTi5yc3QKaW5kZXggMjI4MDhlMy4uMTVmZTE4ZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fVkVSU0lPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fVkVSU0lPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkIHdpdGggdGhlIE5ES2AsIHRoaXMgdmFyaWFibGUKIG1heSBiZSBzZXQgdG8gc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiB0aGUgdG9vbGNoYWluIHRvIGJlIHVzZWQKIGFzIHRoZSBjb21waWxlci4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9DRVNTX01BWC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfUFJPQ0VTU19NQVgucnN0CmluZGV4IDE5ZmI1MjcuLmJlMjQxYzIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9DRVNTX01BWC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0NFU1NfTUFYLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfUFJPQ0VTU19NQVgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfUFJPQ0VTU19NQVhgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9HVUFSRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfUFJPR1VBUkQucnN0CmluZGV4IGI4ZmRkNDYuLmJiMDAxZDMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9HVUFSRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0dVQVJELnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfUFJPR1VBUkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfUFJPR1VBUkRgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgucnN0CmluZGV4IDhkZWEwMDkuLjZmZDQwNjcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRILnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEhgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU0VDVVJFX1BST1BTX1BBVEgucnN0CmluZGV4IDY5YTRkMGIuLjlmNTc0M2UgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRILnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfU0VDVVJFX1BST1BTX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfU0VDVVJFX1BST1BTX1BBVEhgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TS0lQX0FOVF9TVEVQLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TS0lQX0FOVF9TVEVQLnJzdAppbmRleCAwYTk2ZGY5Li41ODg3NjliIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU0tJUF9BTlRfU1RFUC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NLSVBfQU5UX1NURVAucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9TS0lQX0FOVF9TVEVQCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfU0tJUF9BTlRfU1RFUGAgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTi5yc3QKaW5kZXggZWE2MmNhYi4uM2NhODlmNSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCBhIFN0YW5kYWxvbmUgVG9vbGNoYWluYCwgdGhpcwogdmFyaWFibGUgaG9sZHMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSB0b29sY2hhaW4uCiBUaGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBtdXN0IGNvbnRhaW4gYSBgYHN5c3Jvb3RgYCBzdWJkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU1RMX1RZUEUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NUTF9UWVBFLnJzdAppbmRleCBkMTc0NTc1Li4zNzc4MTgxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU1RMX1RZUEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TVExfVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX1NUTF9UWVBFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIE5WSURJQSBOc2lnaHQgVGVncmEgVmlzdWFsIFN0dWRpbwogRWRpdGlvbmAsIHRoaXMgdmFyaWFibGUgbWF5IGJlIHNldCB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUKIDpwcm9wX3RndDpgQU5EUk9JRF9TVExfVFlQRWAgdGFyZ2V0IHByb3BlcnR5LiAgU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAppbmRleCA5NGMyYjZlLi5kOGJkODJjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfPENPTkZJRz4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogV2hlcmUgdG8gcHV0IGFsbCB0aGUgOnJlZjpgQVJDSElWRSA8QXJjaGl2ZSBPdXRwdXQgQXJ0aWZhY3RzPmAKIHRhcmdldCBmaWxlcyB3aGVuIGJ1aWx0IGZvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9PUklHSU5fREVQRU5EUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fT1JJR0lOX0RFUEVORFMucnN0CmluZGV4IDEzOThlNzguLmMyNGU0NjIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9PUklHSU5fREVQRU5EUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX09SSUdJTl9ERVBFTkRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FVVE9HRU5fT1JJR0lOX0RFUEVORFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBTd2l0Y2ggZm9yIGZvcndhcmRpbmcgb3JpZ2luIHRhcmdldCBkZXBlbmRlbmNpZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcKIGBgX2F1dG9nZW5gYCB0YXJnZXRzLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fUEFSQUxMRUwucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX1BBUkFMTEVMLnJzdAppbmRleCBkZDk0OTlhLi4yYWRhMDEyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fUEFSQUxMRUwucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9QQVJBTExFTC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BVVRPR0VOX1BBUkFMTEVMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogTnVtYmVyIG9mIHBhcmFsbGVsIGBgbW9jYGAgb3IgYGB1aWNgYCBwcm9jZXNzZXMgdG8gc3RhcnQgd2hlbiB1c2luZwogOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX1ZFUkJPU0UucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX1ZFUkJPU0UucnN0CmluZGV4IGJhZDljZjIuLmY3N2VkNmEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9WRVJCT1NFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fVkVSQk9TRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BVVRPR0VOX1ZFUkJPU0UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFNldHMgdGhlIHZlcmJvc2l0eSBvZiA6cHJvcF90Z3Q6YEFVVE9NT0NgLCA6cHJvcF90Z3Q6YEFVVE9VSUNgIGFuZAogOnByb3BfdGd0OmBBVVRPUkNDYC4gIEEgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBvciBhIHRydWUgYm9vbGVhbiB2YWx1ZQogbGV0cyB0aGUgYGBBVVRPKmBgIGdlbmVyYXRvcnMgb3V0cHV0IGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTLnJzdAppbmRleCA3ZTFjNTNkLi5mMWIwM2EwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBBVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVNgCiBwcm9wZXJ0eSBvbiBhbGwgdGhlIHRhcmdldHMuIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbAogaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX0RFUEVORF9GSUxURVJTLnJzdAppbmRleCA1YzM2NjJkLi4yYzE1NTFhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19ERVBFTkRfRklMVEVSUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BVVRPTU9DX0RFUEVORF9GSUxURVJTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBGaWx0ZXIgZGVmaW5pdGlvbnMgdXNlZCBieSA6dmFyaWFibGU6YENNQUtFX0FVVE9NT0NgCiB0byBleHRyYWN0IGZpbGUgbmFtZXMgZnJvbSBzb3VyY2UgY29kZSBhcyBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcwogZm9yIHRoZSBgYG1vY2BgIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfTUFDUk9fTkFNRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX01BQ1JPX05BTUVTLnJzdAppbmRleCBiYTFiOWQyLi44ZTM0ZGYyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfTUFDUk9fTkFNRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19NQUNST19OQU1FUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BVVRPTU9DX01BQ1JPX05BTUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogOnJlZjpgU2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIGxpc3Qgb2YgbWFjcm8gbmFtZXMgdXNlZCBieQogOnZhcmlhYmxlOmBDTUFLRV9BVVRPTU9DYCB0byBkZXRlcm1pbmUgaWYgYSBDKysgZmlsZSBuZWVkcyB0byBiZQogcHJvY2Vzc2VkIGJ5IGBgbW9jYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfUEFUSF9QUkVGSVgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX1BBVEhfUFJFRklYLnJzdAppbmRleCBkY2EwYjA2Li4wN2E2Y2M4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfUEFUSF9QUkVGSVgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BVVRPTU9DX1BBVEhfUFJFRklYCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogV2hldGhlciB0byBnZW5lcmF0ZSB0aGUgYGAtcGBgIHBhdGggcHJlZml4IG9wdGlvbiBmb3IgYGBtb2NgYCBvbgogOnByb3BfdGd0OmBBVVRPTU9DYCBlbmFibGVkIFF0IHRhcmdldHMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT1VJQ19TRUFSQ0hfUEFUSFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPVUlDX1NFQVJDSF9QQVRIUy5yc3QKaW5kZXggYWExMzJiZi4uMDI2MjM2OCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPVUlDX1NFQVJDSF9QQVRIUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPVUlDX1NFQVJDSF9QQVRIUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BVVRPVUlDX1NFQVJDSF9QQVRIUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFNlYXJjaCBwYXRoIGxpc3QgdXNlZCBieSA6dmFyaWFibGU6YENNQUtFX0FVVE9VSUNgIHRvIGZpbmQgaW5jbHVkZWQKIGBgLnVpYGAgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQlVJTERfUlBBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9SUEFUSC5yc3QKaW5kZXggZjVkNTNiOC4uN2E4YWNlNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9SUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9SUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9CVUlMRF9SUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIDpyZWY6YFNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBzcGVjaWZ5aW5nIHJ1bnRpbWUgcGF0aCAoYGBSUEFUSGBgKQogZW50cmllcyB0byBhZGQgdG8gYmluYXJpZXMgbGlua2VkIGluIHRoZSBidWlsZCB0cmVlIChmb3IgcGxhdGZvcm1zIHRoYXQKIHN1cHBvcnQgaXQpLiAgVGhlIGVudHJpZXMgd2lsbCAqbm90KiBiZSB1c2VkIGZvciBiaW5hcmllcyBpbiB0aGUgaW5zdGFsbApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9SUEFUSF9VU0VfT1JJR0lOLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQlVJTERfUlBBVEhfVVNFX09SSUdJTi5yc3QKaW5kZXggZTM0ZWRlNi4uZWNkOTI3OCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9SUEFUSF9VU0VfT1JJR0lOLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1JQQVRIX1VTRV9PUklHSU4ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQlVJTERfUlBBVEhfVVNFX09SSUdJTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIFdoZXRoZXIgdG8gdXNlIHJlbGF0aXZlIHBhdGhzIGZvciB0aGUgYnVpbGQgYGBSUEFUSGBgLgogCiBUaGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBCVUlMRF9SUEFUSF9VU0VfT1JJR0lOYCB0YXJnZXQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSLnJzdAppbmRleCAzMGQ1ZDNiLi41YmE3NzVjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFdoZXRoZXIgdG8gdXNlIDpwcm9wX3RndDpgSU5TVEFMTF9OQU1FX0RJUmAgb24gdGFyZ2V0cyBpbiB0aGUgYnVpbGQgdHJlZS4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT0RFQkxPQ0tTX0NPTVBJTEVSX0lELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUJMT0NLU19DT01QSUxFUl9JRC5yc3QKaW5kZXggYWQyNzA5ZC4uMGIyYjBhMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT0RFQkxPQ0tTX0NPTVBJTEVSX0lELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVCTE9DS1NfQ09NUElMRVJfSUQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ09ERUJMT0NLU19DT01QSUxFUl9JRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIENoYW5nZSB0aGUgY29tcGlsZXIgaWQgaW4gdGhlIGdlbmVyYXRlZCBDb2RlQmxvY2tzIHByb2plY3QgZmlsZXMuCiAKIENvZGVCbG9ja3MgdXNlcyBpdHMgb3duIGNvbXBpbGVyIGlkIHN0cmluZyB3aGljaCBkaWZmZXJzIGZyb20KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTLnJzdAppbmRleCA4MGZmY2UzLi5kYmI4NjA2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT0RFQkxPQ0tTX0VYQ0xVREVfRVhURVJOQUxfRklMRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBDaGFuZ2UgdGhlIHdheSB0aGUgQ29kZUJsb2NrcyBnZW5lcmF0b3IgY3JlYXRlcyBwcm9qZWN0IGZpbGVzLgogCiBJZiB0aGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byBgYE9OYGAgdGhlIGdlbmVyYXRvciBleGNsdWRlcyBmcm9tCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVMSVRFX1VTRV9UQVJHRVRTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUxJVEVfVVNFX1RBUkdFVFMucnN0CmluZGV4IDMzY2RmNmMuLjIxYWY1ZjcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUxJVEVfVVNFX1RBUkdFVFMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUxJVEVfVVNFX1RBUkdFVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ09ERUxJVEVfVVNFX1RBUkdFVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBDaGFuZ2UgdGhlIHdheSB0aGUgQ29kZUxpdGUgZ2VuZXJhdG9yIGNyZWF0ZXMgcHJvamVjdGZpbGVzLgogCiBJZiB0aGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byBgYE9OYGAgYXQgdGhlIGVuZCBvZiB0aGUgdG9wLWxldmVsCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNDLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MucnN0CmluZGV4IGE0MDY2N2UuLjkxY2Y4NDggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUcnVlIGlmIHRoZSBgYENgYCBjb21waWxlciBpcyBHTlUuCiBVc2UgOnZhcmlhYmxlOmBDTUFLRV9DX0NPTVBJTEVSX0lEIDxDTUFLRV88TEFORz5fQ09NUElMRVJfSUQ+YCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVDWFgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVDWFgucnN0CmluZGV4IGYxZjVjZjcuLmU2NzcxOGEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWC5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9DT01QSUxFUl9JU19HTlVDWFgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVHJ1ZSBpZiB0aGUgQysrIChgYENYWGBgKSBjb21waWxlciBpcyBHTlUuCiBVc2UgOnZhcmlhYmxlOmBDTUFLRV9DWFhfQ09NUElMRVJfSUQgPENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRD5gIGluc3RlYWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUc3Ny5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUc3Ny5yc3QKaW5kZXggM2Q2ZGFiNC4uZjY5YzAxYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVHNzcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VRzc3LnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0NPTVBJTEVSX0lTX0dOVUc3NwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUcnVlIGlmIHRoZSBgYEZvcnRyYW5gYCBjb21waWxlciBpcyBHTlUuCiBVc2UgOnZhcmlhYmxlOmBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIDxDTUFLRV88TEFORz5fQ09NUElMRVJfSUQ+YCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWS5yc3QKaW5kZXggZWEzM2M3ZC4uMTFmNTJjNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogT3V0cHV0IGRpcmVjdG9yeSBmb3IgTVMgZGVidWcgc3ltYm9sIGBgLnBkYmBgIGZpbGVzCiBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoaWxlIGJ1aWxkaW5nIHNvdXJjZSBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAppbmRleCBmZGViOWFiLi45OWQwYmRjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfPENPTkZJRz4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFBlci1jb25maWd1cmF0aW9uIG91dHB1dCBkaXJlY3RvcnkgZm9yIE1TIGRlYnVnIHN5bWJvbCBgYC5wZGJgYCBmaWxlcwogZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB3aGlsZSBidWlsZGluZyBzb3VyY2UgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1BBQ0tfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NQQUNLX0NPTU1BTkQucnN0CmluZGV4IDU1OTEwOGEuLjNhODFkNjggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1BBQ0tfQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DUEFDS19DT01NQU5ELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NQQUNLX0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBGdWxsIHBhdGggdG8gOm1hbnVhbDpgY3BhY2soMSlgIGNvbW1hbmQgaW5zdGFsbGVkIHdpdGggQ01ha2UuCiAKIFRoaXMgaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgQ1BhY2sgZXhlY3V0YWJsZSA6bWFudWFsOmBjcGFjaygxKWAgd2hpY2ggaXMKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DUk9TU0NPTVBJTElOR19FTVVMQVRPUi5yc3QKaW5kZXggMWQwMTNiNy4uODE1ZGEwMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DUk9TU0NPTVBJTElOR19FTVVMQVRPUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DUk9TU0NPTVBJTElOR19FTVVMQVRPUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DUk9TU0NPTVBJTElOR19FTVVMQVRPUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFRoaXMgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4gOnZhcmlhYmxlOmBDTUFLRV9DUk9TU0NPTVBJTElOR2AgaXMgb24uIEl0CiBzaG91bGQgcG9pbnQgdG8gYSBjb21tYW5kIG9uIHRoZSBob3N0IHN5c3RlbSB0aGF0IGNhbiBydW4gZXhlY3V0YWJsZSBidWlsdAogZm9yIHRoZSB0YXJnZXQgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DUk9TU19DT05GSUdTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1JPU1NfQ09ORklHUy5yc3QKaW5kZXggOTQxNTdmMy4uYmU5MjFkNiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DUk9TU19DT05GSUdTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NST1NTX0NPTkZJR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1JPU1NfQ09ORklHUwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFNwZWNpZmllcyBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZgogY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIGZyb20gYWxsIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYCBmaWxlcyBpbiB0aGUKIDpnZW5lcmF0b3I6YE5pbmphIE11bHRpLUNvbmZpZ2AgZ2VuZXJhdG9yLiAgVGhpcyB2YXJpYWJsZSBhY3RpdmF0ZXMKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1RFU1RfQVJHVU1FTlRTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1RFU1RfQVJHVU1FTlRTLnJzdAppbmRleCAwOTQwYjQ2Li40ZGZjOGZlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NURVNUX0FSR1VNRU5UUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVEVTVF9BUkdVTUVOVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1RFU1RfQVJHVU1FTlRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBTZXQgdGhpcyB0byBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZgogY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBwYXNzIHRvIDptYW51YWw6YGN0ZXN0KDEpYCB3aGVuIHJ1bm5pbmcgdGVzdHMKIHRocm91Z2ggdGhlIGBgdGVzdGBgIChvciBgYFJVTl9URVNUU2BgKSB0YXJnZXQgb2YgdGhlIGdlbmVyYXRlZCBidWlsZCBzeXN0ZW0uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQVJDSElURUNUVVJFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQVJDSElURUNUVVJFUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1MDQwZAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTLnJzdApAQCAtMCwwICsxLDE5IEBACitDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0RlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQ1VEQV9BUkNISVRFQ1RVUkVTYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgorCitUaGlzIGlzIGluaXRpYWxpemVkIGFzIGZvbGxvd3MgZGVwZW5kaW5nIG9uIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCA8Q01BS0VfPExBTkc+X0NPTVBJTEVSX0lEPmA6CisKKy0gRm9yIGBgQ2xhbmdgYDogdGhlIG9sZGVzdCBhcmNoaXRlY3R1cmUgdGhhdCB3b3Jrcy4KKworLSBGb3IgYGBOVklESUFgYDogdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlIGNob3NlbiBieSB0aGUgY29tcGlsZXIuCisgIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDEwNGAuCisKK1VzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIG92ZXJyaWRlIHRoaXMsIGFzIHRoZSBkZWZhdWx0IHZhcmllcyBhY3Jvc3MgY29tcGlsZXJzCithbmQgY29tcGlsZXIgdmVyc2lvbnMuCisKK1RoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENVREFfQVJDSElURUNUVVJFU2AgcHJvcGVydHkKK29uIGFsbCB0YXJnZXRzLiBTZWUgdGhlIHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTLnJzdAppbmRleCAyY2QyNjUwLi5jMWMyNzBjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBMaXN0IG9mIGZlYXR1cmVzIGtub3duIHRvIHRoZSBDVURBIGNvbXBpbGVyCiAKIFRoZXNlIGZlYXR1cmVzIGFyZSBrbm93biB0byBiZSBhdmFpbGFibGUgZm9yIHVzZSB3aXRoIHRoZSBDVURBIGNvbXBpbGVyLiBUaGlzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfRVhURU5TSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfRVhURU5TSU9OUy5yc3QKaW5kZXggNGZlNzU4ZS4uYjg2YzBlYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0VYVEVOU0lPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9FWFRFTlNJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NVREFfRVhURU5TSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENVREFfRVhURU5TSU9OU2AgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQ1VEQV9FWFRFTlNJT05TYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0hPU1RfQ09NUElMRVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0hPU1RfQ09NUElMRVIucnN0CmluZGV4IDZkMzRjNWMuLjA3MzQyYjUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfSE9TVF9DT01QSUxFUi5yc3QKQEAgLTEsOCArMSwyNSBAQAogQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRXhlY3V0YWJsZSB0byB1c2Ugd2hlbiBjb21waWxpbmcgaG9zdCBjb2RlIHdoZW4gY29tcGlsaW5nIGBgQ1VEQWBgIGxhbmd1YWdlCi1maWxlcy4gTWFwcyB0byB0aGUgYGBudmNjIC1jY2JpbmBgIG9wdGlvbi4gIFdpbGwgb25seSBiZSB1c2VkIGJ5IENNYWtlIG9uIHRoZSBmaXJzdAotY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgYSB2YWxpZCBob3N0IGNvbXBpbGVyIGZvciBgYENVREFgYC4gQWZ0ZXIgYSB2YWxpZAotaG9zdCBjb21waWxlciBoYXMgYmVlbiBmb3VuZCwgdGhpcyB2YWx1ZSBpcyByZWFkLW9ubHkuICBUaGlzIHZhcmlhYmxlIHRha2VzCi1wcmlvcml0eSBvdmVyIHRoZSA6ZW52dmFyOmBDVURBSE9TVENYWGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKK1doZW4gOnZhcmlhYmxlOmBDTUFLRV9DVURBX0NPTVBJTEVSIDxDTUFLRV88TEFORz5fQ09NUElMRVI+YCBpcyBzZXQgdG8KK05WSURJQSBgYG52Y2NgYCwgYGBDTUFLRV9DVURBX0hPU1RfQ09NUElMRVJgYCBzZWxlY3RzIHRoZSBjb21waWxlcgorZXhlY3V0YWJsZSB0byB1c2Ugd2hlbiBjb21waWxpbmcgaG9zdCBjb2RlIGZvciBgYENVREFgYCBsYW5ndWFnZSBmaWxlcy4KK1RoaXMgbWFwcyB0byB0aGUgYGBudmNjIC1jY2JpbmBgIG9wdGlvbi4KKworVGhlIGBgQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSYGAgdmFyaWFibGUgbWF5IGJlIHNldCBleHBsaWNpdGx5IGJlZm9yZSBDVURBIGlzCitmaXJzdCBlbmFibGVkIGJ5IGEgOmNvbW1hbmQ6YHByb2plY3RgIG9yIDpjb21tYW5kOmBlbmFibGVfbGFuZ3VhZ2VgIGNvbW1hbmQuCitUaGlzIGNhbiBiZSBkb25lIHZpYSBgYC1EQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSPS4uLmBgIG9uIHRoZSBjb21tYW5kIGxpbmUKK29yIGluIGEgOnJlZjpgdG9vbGNoYWluIGZpbGUgPENyb3NzIENvbXBpbGluZyBUb29sY2hhaW4+YC4gIE9yLCBvbmUgbWF5IHNldAordGhlIDplbnZ2YXI6YENVREFIT1NUQ1hYYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS4KKworT25jZSB0aGUgQ1VEQSBsYW5ndWFnZSBpcyBlbmFibGVkLCB0aGUgYGBDTUFLRV9DVURBX0hPU1RfQ09NUElMRVJgYCB2YXJpYWJsZQoraXMgcmVhZC1vbmx5IGFuZCBjaGFuZ2VzIHRvIGl0IGFyZSB1bmRlZmluZWQgYmVoYXZpb3IuCisKKy4uIG5vdGU6OgorCisgIFNpbmNlIGBgQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSYGAgaXMgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gdGhlCisgIGBgQ01BS0VfQ1VEQV9DT01QSUxFUmBgIGlzIGBgbnZjY2BgLCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvCisgIHNldCBgYENNQUtFX0NVREFfSE9TVF9DT01QSUxFUmBgIGV4cGxpY2l0bHkgd2l0aG91dCBhbHNvIHNldHRpbmcKKyAgYGBDTUFLRV9DVURBX0NPTVBJTEVSYGAgZXhwbGljaXRseSB0byBiZSBzdXJlIGl0IGlzIGBgbnZjY2BgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMucnN0CmluZGV4IGZjODM1Y2QuLjQ3NGJhZWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTYCB0YXJnZXQKIHByb3BlcnR5LiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb24gZWFjaCB0YXJnZXQgYXMKIGl0IGlzIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0CmluZGV4IGUzMjA1ZDMuLjY5YjlkOTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogU2VsZWN0IHRoZSBDVURBIHJ1bnRpbWUgbGlicmFyeSBmb3IgdXNlIHdoZW4gY29tcGlsaW5nIGFuZCBsaW5raW5nIENVREEuCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDVURBX1JVTlRJTUVfTElCUkFSWWAKIHByb3BlcnR5IG9uIGFsbCB0YXJnZXRzIGFzIHRoZXkgYXJlIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04ucnN0CmluZGV4IGVlZjkyZmIuLjNkYmFlZjkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTmAgdGFyZ2V0IHByb3BlcnR5LgogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzIGl0IGlzCiBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1NUQU5EQVJELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRC5yc3QKaW5kZXggNmMyMzAzMS4uNzk4YWIxZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1NUQU5EQVJELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU1RBTkRBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1VEQV9TVEFOREFSRAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDVURBX1NUQU5EQVJEYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDVURBX1NUQU5EQVJEYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1NUQU5EQVJEX1JFUVVJUkVELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRF9SRVFVSVJFRC5yc3QKaW5kZXggOTM1ZDYwNS4uYWUyZjUyZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1NUQU5EQVJEX1JFUVVJUkVELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU1RBTkRBUkRfUkVRVUlSRUQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1VEQV9TVEFOREFSRF9SRVFVSVJFRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDVURBX1NUQU5EQVJEX1JFUVVJUkVEYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDVURBX1NUQU5EQVJEX1JFUVVJUkVEYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdAppbmRleCA3ZGU1MGE1Li5lNTg2ZGFiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogV2hlbiB0aGUgYGBDVURBYGAgbGFuZ3VhZ2UgaGFzIGJlZW4gZW5hYmxlZCwgdGhpcyBwcm92aWRlcyBhCiA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YgaW5jbHVkZSBkaXJlY3RvcmllcyBwcm92aWRlZAogYnkgdGhlIENVREEgVG9vbGtpdC4gIFRoZSB2YWx1ZSBtYXkgYmUgdXNlZnVsIGZvciBDKysgc291cmNlIGZpbGVzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLnJzdAppbmRleCBmYjdmNjEwLi41ZDFhNGU5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogV2hlbiBleGVjdXRpbmcgY29kZSBpbnNpZGUgYSA6Y29tbWFuZDpgZnVuY3Rpb25gLCB0aGlzIHZhcmlhYmxlCiBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gIEl0IGNhbiBiZSB1c2VmdWwgZm9yCiBkaWFnbm9zdGljIG9yIGRlYnVnIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUi5yc3QKaW5kZXggNDRhZTFlNS4uZjhmNTUzZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFdoZW4gZXhlY3V0aW5nIGNvZGUgaW5zaWRlIGEgOmNvbW1hbmQ6YGZ1bmN0aW9uYCwgdGhpcyB2YXJpYWJsZQogY29udGFpbnMgdGhlIGZ1bGwgZGlyZWN0b3J5IG9mIHRoZSBsaXN0ZmlsZSB0aGF0IGRlZmluZWQgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRS5yc3QKaW5kZXggYzczN2FmOS4uNDM3ZGZlYyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBXaGVuIGV4ZWN1dGluZyBjb2RlIGluc2lkZSBhIDpjb21tYW5kOmBmdW5jdGlvbmAsIHRoaXMgdmFyaWFibGUKIGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGxpc3RmaWxlIHRoYXQgZGVmaW5lZCB0aGUgY3VycmVudCBmdW5jdGlvbi4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FLnJzdAppbmRleCBhZDYyODJlLi4yZmM3MDEyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFdoZW4gZXhlY3V0aW5nIGNvZGUgaW5zaWRlIGEgOmNvbW1hbmQ6YGZ1bmN0aW9uYCwgdGhpcyB2YXJpYWJsZQogY29udGFpbnMgdGhlIGxpbmUgbnVtYmVyIGluIHRoZSBsaXN0ZmlsZSB3aGVyZSB0aGUgY3VycmVudCBmdW5jdGlvbgogd2FzIGRlZmluZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9DT01QSUxFX0ZFQVRVUkVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMucnN0CmluZGV4IDVjNTlmOTUuLjhmY2ZiYWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBMaXN0IG9mIGZlYXR1cmVzIGtub3duIHRvIHRoZSBDKysgY29tcGlsZXIKIAogVGhlc2UgZmVhdHVyZXMgYXJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGggdGhlIEMrKyBjb21waWxlci4gVGhpcwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfRVhURU5TSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9FWFRFTlNJT05TLnJzdAppbmRleCA0YTkyNDI1Li5lYThjNGJlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9FWFRFTlNJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9FWFRFTlNJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NYWF9FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDWFhfRVhURU5TSU9OU2AgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQ1hYX0VYVEVOU0lPTlNgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9TVEFOREFSRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9TVEFOREFSRC5yc3QKaW5kZXggOGE4YmRmZi4uOGVmOGM4MCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfU1RBTkRBUkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX1NUQU5EQVJELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NYWF9TVEFOREFSRAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENYWF9TVEFOREFSRGAgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQ1hYX1NUQU5EQVJEYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IDRjNzEwNTguLmY3YjJhZTkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDWFhfU1RBTkRBUkRfUkVRVUlSRURgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENYWF9TVEFOREFSRF9SRVFVSVJFRGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19DT01QSUxFX0ZFQVRVUkVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19DT01QSUxFX0ZFQVRVUkVTLnJzdAppbmRleCA4ZDFlY2EwLi4yYjMwNmEzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfQ09NUElMRV9GRUFUVVJFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX0NPTVBJTEVfRkVBVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ19DT01QSUxFX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIExpc3Qgb2YgZmVhdHVyZXMga25vd24gdG8gdGhlIEMgY29tcGlsZXIKIAogVGhlc2UgZmVhdHVyZXMgYXJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGggdGhlIEMgY29tcGlsZXIuIFRoaXMKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19FWFRFTlNJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19FWFRFTlNJT05TLnJzdAppbmRleCBmYTUxMGQ0Li5mY2U4ZmM3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ19FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQ19FWFRFTlNJT05TYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDX0VYVEVOU0lPTlNgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX1NUQU5EQVJELnJzdAppbmRleCBiNTVlMDBjLi42NGVmOGNlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19TVEFOREFSRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DX1NUQU5EQVJECiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENfU1RBTkRBUkRgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENfU1RBTkRBUkRgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX1NUQU5EQVJEX1JFUVVJUkVELnJzdAppbmRleCA3ZjcwZjZlLi5lNzBiNmJkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DX1NUQU5EQVJEX1JFUVVJUkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENfU1RBTkRBUkRfUkVRVUlSRURgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENfU1RBTkRBUkRfUkVRVUlSRURgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5yc3QKaW5kZXggYWE0ZjgyZC4uY2FkYmYzYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZSBieSBkZWZhdWx0IGluIGEgYGBidWlsZC5uaW5qYWBgIGZpbGUgaW4gdGhlCiA6Z2VuZXJhdG9yOmBOaW5qYSBNdWx0aS1Db25maWdgIGdlbmVyYXRvci4gSWYgdGhpcyB2YXJpYWJsZSBpcyBzcGVjaWZpZWQsCiBgYGJ1aWxkLm5pbmphYGAgdXNlcyBidWlsZCBydWxlcyBmcm9tIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYCBieSBkZWZhdWx0LiBBbGwKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9DT05GSUdTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9DT05GSUdTLnJzdAppbmRleCA4NGM2NDJhLi42NWE1ZjBkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQ09ORklHUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ERUZBVUxUX0NPTkZJR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfREVGQVVMVF9DT05GSUdTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBTcGVjaWZpZXMgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YgY29uZmlndXJhdGlvbnMKIHRvIGJ1aWxkIGZvciBhIHRhcmdldCBpbiBgYGJ1aWxkLm5pbmphYGAgaWYgbm8gYGA6PENvbmZpZz5gYCBzdWZmaXggaXMgc3BlY2lmaWVkIGluCiB0aGUgOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYCBnZW5lcmF0b3IuIElmIGl0IGlzIHNldCB0byBgYGFsbGBgLCBhbGwKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfREVQRU5EU19JTl9QUk9KRUNUX09OTFkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9ERVBFTkRTX0lOX1BST0pFQ1RfT05MWS5yc3QKaW5kZXggNzE3OTA3MS4uYmZlOTQwMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9ERVBFTkRTX0lOX1BST0pFQ1RfT05MWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ERVBFTkRTX0lOX1BST0pFQ1RfT05MWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9ERVBFTkRTX0lOX1BST0pFQ1RfT05MWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFdoZW4gc2V0IHRvIGBgVFJVRWBgIGluIGEgZGlyZWN0b3J5LCB0aGUgYnVpbGQgc3lzdGVtIHByb2R1Y2VkIGJ5IHRoZQogOnJlZjpgTWFrZWZpbGUgR2VuZXJhdG9yc2AgaXMgc2V0IHVwIHRvIG9ubHkgY29uc2lkZXIgZGVwZW5kZW5jaWVzIG9uIHNvdXJjZQogZmlsZXMgdGhhdCBhcHBlYXIgZWl0aGVyIGluIHRoZSBzb3VyY2Ugb3IgaW4gdGhlIGJpbmFyeSBkaXJlY3Rvcmllcy4gIENoYW5nZXMKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRElSRUNUT1JZX0xBQkVMUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RJUkVDVE9SWV9MQUJFTFMucnN0CmluZGV4IDJhNmM0MTAuLjgxZDZkZDEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRElSRUNUT1JZX0xBQkVMUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ESVJFQ1RPUllfTEFCRUxTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0RJUkVDVE9SWV9MQUJFTFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogU3BlY2lmeSBsYWJlbHMgZm9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KIAogVGhpcyBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX2RpcjpgTEFCRUxTYCBkaXJlY3RvcnkgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RJU0FCTEVfUFJFQ09NUElMRV9IRUFERVJTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CmluZGV4IDdjMzBlZGUuLmNmNTI3NzYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSU2Agb2YgdGFyZ2V0cy4KIAogQnkgZGVmYXVsdCBgYENNQUtFX0RJU0FCTEVfUFJFQ09NUElMRV9IRUFERVJTYGAgaXMgYGBPRkZgYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSy5yc3QKaW5kZXggOGVkY2QxZS4uMjkyNDlkNiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YERPVE5FVF9UQVJHRVRfRlJBTUVXT1JLYCBwcm9wZXJ0eQlvZgogdGFyZ2V0cy4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKaW5kZXggYzJlZWY5ZS4uZmMzYzM2MCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTmAKIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9MSU5LRURfUkVTT1VSQ0VTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9MSU5LRURfUkVTT1VSQ0VTLnJzdAppbmRleCAzMzFhYWU4Li41NDhjNTYzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfR0VORVJBVEVfTElOS0VEX1JFU09VUkNFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX0dFTkVSQVRFX0xJTktFRF9SRVNPVVJDRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9MSU5LRURfUkVTT1VSQ0VTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFRoaXMgY2FjaGUgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgRWNsaXBzZSBwcm9qZWN0IGdlbmVyYXRvci4gIFNlZQogOm1hbnVhbDpgY21ha2UtZ2VuZXJhdG9ycyg3KWAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9TT1VSQ0VfUFJPSkVDVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfR0VORVJBVEVfU09VUkNFX1BST0pFQ1QucnN0CmluZGV4IDdiNDM2N2QuLmZjMjhlYmIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9TT1VSQ0VfUFJPSkVDVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX0dFTkVSQVRFX1NPVVJDRV9QUk9KRUNULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0VDTElQU0VfR0VORVJBVEVfU09VUkNFX1BST0pFQ1QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFRoaXMgY2FjaGUgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgRWNsaXBzZSBwcm9qZWN0IGdlbmVyYXRvci4gIFNlZQogOm1hbnVhbDpgY21ha2UtZ2VuZXJhdG9ycyg3KWAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9NQUtFX0FSR1VNRU5UUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfTUFLRV9BUkdVTUVOVFMucnN0CmluZGV4IDZlOGE0MDguLjkwZTM2ZjUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9NQUtFX0FSR1VNRU5UUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX01BS0VfQVJHVU1FTlRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0VDTElQU0VfTUFLRV9BUkdVTUVOVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFRoaXMgY2FjaGUgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgRWNsaXBzZSBwcm9qZWN0IGdlbmVyYXRvci4gIFNlZQogOm1hbnVhbDpgY21ha2UtZ2VuZXJhdG9ycyg3KWAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9SRVNPVVJDRV9FTkNPRElORy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfUkVTT1VSQ0VfRU5DT0RJTkcucnN0CmluZGV4IDMxNGVmZTUuLjQ5MmFjZDggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9SRVNPVVJDRV9FTkNPRElORy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX1JFU09VUkNFX0VOQ09ESU5HLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0VDTElQU0VfUkVTT1VSQ0VfRU5DT0RJTkcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGlzIGNhY2hlIHZhcmlhYmxlIHRlbGxzIHRoZSA6Z2VuZXJhdG9yOmBFY2xpcHNlIENEVDRgIHByb2plY3QgZ2VuZXJhdG9yCiB0byBzZXQgdGhlIHJlc291cmNlIGVuY29kaW5nIHRvIHRoZSBnaXZlbiB2YWx1ZSBpbiBnZW5lcmF0ZWQgcHJvamVjdCBmaWxlcy4KIElmIG5vIHZhbHVlIGlzIGdpdmVuLCBubyBlbmNvZGluZyB3aWxsIGJlIHNldC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9WRVJTSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9WRVJTSU9OLnJzdAppbmRleCA4Y2M3ODgyLi5kYjY1ZDg5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfVkVSU0lPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX1ZFUlNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRUNMSVBTRV9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFRoaXMgY2FjaGUgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgRWNsaXBzZSBwcm9qZWN0IGdlbmVyYXRvci4gIFNlZQogOm1hbnVhbDpgY21ha2UtZ2VuZXJhdG9ycyg3KWAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRU5BQkxFX0VYUE9SVFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FTkFCTEVfRVhQT1JUUy5yc3QKaW5kZXggODg0OGRhMS4uOWY0M2RlMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FTkFCTEVfRVhQT1JUUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FTkFCTEVfRVhQT1JUUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FTkFCTEVfRVhQT1JUUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNwZWNpZnkgd2hldGhlciBleGVjdXRhYmxlcyBleHBvcnQgc3ltYm9scyBmb3IgbG9hZGFibGUgbW9kdWxlcy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgRU5BQkxFX0VYUE9SVFNgIHRhcmdldApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVDVVRFX1BST0NFU1NfQ09NTUFORF9FQ0hPLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhFQ1VURV9QUk9DRVNTX0NPTU1BTkRfRUNITy5yc3QKaW5kZXggNzY1NjFkOC4uOTBhMTZjMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVDVVRFX1BST0NFU1NfQ09NTUFORF9FQ0hPLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRUNVVEVfUFJPQ0VTU19DT01NQU5EX0VDSE8ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRVhFQ1VURV9QUk9DRVNTX0NPTU1BTkRfRUNITwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIGBgU1RERVJSYGAsIGBgU1RET1VUYGAgb3IgYGBOT05FYGAgdGhlbiBjb21tYW5kcwogaW4gOmNvbW1hbmQ6YGV4ZWN1dGVfcHJvY2Vzc2AgY2FsbHMgd2lsbCBiZSBwcmludGVkIHRvIGVpdGhlciBzdGRlcnIgb3IKIHN0ZG91dCBvciBub3QgYXQgYWxsLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhFX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKaW5kZXggNTkyYTM2OS4uNGQyNzE4YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRVhFX0xJTktFUl9GTEFHU188Q09ORklHPl9JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnZhcmlhYmxlOmBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTXzxDT05GSUc+YAogY2FjaGUgZW50cnkgdGhlIGZpcnN0IHRpbWUgYSBidWlsZCB0cmVlIGlzIGNvbmZpZ3VyZWQuCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklULnJzdAppbmRleCAwYjhhZmU0Li42ZTM5MjdjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnZhcmlhYmxlOmBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTYAogY2FjaGUgZW50cnkgdGhlIGZpcnN0IHRpbWUgYSBidWlsZCB0cmVlIGlzIGNvbmZpZ3VyZWQuCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QKaW5kZXggNmQyNDUwYi4uNzI0ZjMwOSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIEVuYWJsZS9EaXNhYmxlIG91dHB1dCBvZiBjb21waWxlIGNvbW1hbmRzIGR1cmluZyBnZW5lcmF0aW9uLgogCiBJZiBlbmFibGVkLCBnZW5lcmF0ZXMgYSBgYGNvbXBpbGVfY29tbWFuZHMuanNvbmBgIGZpbGUgY29udGFpbmluZyB0aGUgZXhhY3QKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX05PX1BBQ0tBR0VfUkVHSVNUUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QKaW5kZXggNzY4ZWQ2NC4uNTc3MjQ5MCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIERpc2FibGUgdGhlIDpjb21tYW5kOmBleHBvcnQoUEFDS0FHRSlgIGNvbW1hbmQgd2hlbiA6cG9saWN5OmBDTVAwMDkwYAogaXMgbm90IHNldCB0byBgYE5FV2BgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9QQUNLQUdFX1JFR0lTVFJZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkucnN0CmluZGV4IDM0NzZhMTkuLjY2MzYzOWIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogRW5hYmxlcyB0aGUgOmNvbW1hbmQ6YGV4cG9ydChQQUNLQUdFKWAgY29tbWFuZCB3aGVuIDpwb2xpY3k6YENNUDAwOTBgCiBpcyBzZXQgdG8gYGBORVdgYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0FQUEJVTkRMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfQVBQQlVORExFLnJzdAppbmRleCA3YTA1ZmFjLi4xNzU2M2YzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfQVBQQlVORExFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfQVBQQlVORExFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfQVBQQlVORExFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhpcyB2YXJpYWJsZSBhZmZlY3RzIGhvdyBgYGZpbmRfKmBgIGNvbW1hbmRzIGNob29zZSBiZXR3ZWVuCiBtYWNPUyBBcHBsaWNhdGlvbiBCdW5kbGVzIGFuZCB1bml4LXN0eWxlIHBhY2thZ2UgY29tcG9uZW50cy4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0RFQlVHX01PREUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0RFQlVHX01PREUucnN0CmluZGV4IGY1ZmQ4Y2UuLjhmMmE4MmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9ERUJVR19NT0RFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfREVCVUdfTU9ERS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX0RFQlVHX01PREUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFByaW50IGV4dHJhIGZpbmQgY2FsbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBzdGFuZGFyZAogZXJyb3I6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9GUkFNRVdPUksucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0ZSQU1FV09SSy5yc3QKaW5kZXggNGQ1MDc4Zi4uM2I2MmNkYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0ZSQU1FV09SSy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0ZSQU1FV09SSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX0ZSQU1FV09SSwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoaXMgdmFyaWFibGUgYWZmZWN0cyBob3cgYGBmaW5kXypgYCBjb21tYW5kcyBjaG9vc2UgYmV0d2VlbgogbWFjT1MgRnJhbWV3b3JrcyBhbmQgdW5peC1zdHlsZSBwYWNrYWdlIGNvbXBvbmVudHMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9MSUJSQVJZX0NVU1RPTV9MSUJfU1VGRklYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9MSUJSQVJZX0NVU1RPTV9MSUJfU1VGRklYLnJzdAppbmRleCBhZGE4OTU1Li5jYTJhZDdmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfTElCUkFSWV9DVVNUT01fTElCX1NVRkZJWC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0xJQlJBUllfQ1VTVE9NX0xJQl9TVUZGSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRklORF9MSUJSQVJZX0NVU1RPTV9MSUJfU1VGRklYCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFNwZWNpZnkgYSBgYDxzdWZmaXg+YGAgdG8gdGVsbCB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCB0bwogc2VhcmNoIGluIGEgYGBsaWI8c3VmZml4PmBgIGRpcmVjdG9yeSBiZWZvcmUgZWFjaCBgYGxpYmBgIGRpcmVjdG9yeSB0aGF0CiB3b3VsZCBub3JtYWxseSBiZSBzZWFyY2hlZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX05BTUUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRS5yc3QKaW5kZXggYmQxYTMwZi4uZmMxZmQ0MyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xLjEKKwogRGVmaW5lZCBieSB0aGUgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY29tbWFuZCB3aGlsZSBsb2FkaW5nCiBhIGZpbmQgbW9kdWxlIHRvIHJlY29yZCB0aGUgY2FsbGVyLXNwZWNpZmllZCBwYWNrYWdlIG5hbWUuCiBTZWUgY29tbWFuZCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZLnJzdAppbmRleCA0ZWU5ZDhiLi44ZDg2YTk0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogLi4gZGVwcmVjYXRlZDo6IDMuMTYKIAogICBVc2UgdGhlIDp2YXJpYWJsZTpgQ01BS0VfRklORF9VU0VfUEFDS0FHRV9SRUdJU1RSWWAgdmFyaWFibGUgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX05PX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX05PX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZLnJzdAppbmRleCAxMDdjMTgzLi5jYzY3ZjA4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTk9fU1lTVEVNX1BBQ0tBR0VfUkVHSVNUUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRklORF9QQUNLQUdFX05PX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIC4uIGRlcHJlY2F0ZWQ6OiAzLjE2CiAKICAgVXNlIHRoZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZYCB2YXJpYWJsZSBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUFJFRkVSX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHLnJzdAppbmRleCBkYjY1OGExLi5iYTgxNTI5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBUZWxsIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIHRvIHRyeSAiQ29uZmlnIiBtb2RlIGJlZm9yZSAiTW9kdWxlIiBtb2RlIGlmIG5vCiBtb2RlIHdhcyBzcGVjaWZpZWQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1JFU09MVkVfU1lNTElOS1MucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUy5yc3QKaW5kZXggZGZiZGUyMC4uODZkNzVlNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBTZXQgdG8gYGBUUlVFYGAgdG8gdGVsbCA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBjYWxscyB0byByZXNvbHZlIHN5bWJvbGljCiBsaW5rcyBpbiB0aGUgdmFsdWUgb2YgYGA8UGFja2FnZU5hbWU+X0RJUmBgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTi5yc3QKaW5kZXggOTllNGVjMS4uOThjMmE4ZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfU09SVF9ESVJFQ1RJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfRElSRUNUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGUgc29ydGluZyBkaXJlY3Rpb24gdXNlZCBieSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX09SREVSYC4KIEl0IGNhbiBhc3N1bWUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX09SREVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIucnN0CmluZGV4IGJhNWYzYTguLjE3MjViYTEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGUgZGVmYXVsdCBvcmRlciBmb3Igc29ydGluZyBwYWNrYWdlcyBmb3VuZCB1c2luZyA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYC4KIEl0IGNhbiBhc3N1bWUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRILnJzdAppbmRleCA5NTdlOTU2Li5kZTFiYWQ3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ29udHJvbHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBmb3Igd2hldGhlciBvciBub3QgdG8KIHNlYXJjaCBwYXRocyBwcm92aWRlZCBieSBjbWFrZS1zcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEgucnN0CmluZGV4IGQyYmRiMDkuLjQ3Y2UzYTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciB3aGV0aGVyIG9yIG5vdCB0bwogc2VhcmNoIHBhdGhzIHByb3ZpZGVkIGJ5IGNtYWtlLXNwZWNpZmljIGNhY2hlIHZhcmlhYmxlczoKIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRILnJzdAppbmRleCBiOTkwODFkLi4yZmQwMGRmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENvbnRyb2xzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgZm9yIHdoZXRoZXIgb3Igbm90IHRvCiBzZWFyY2ggcGF0aHMgcHJvdmlkZWQgYnkgcGxhdGZvcm0tc3BlY2lmaWMgY21ha2UgdmFyaWFibGVzOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX1BBQ0tBR0VfUkVHSVNUUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JFR0lTVFJZLnJzdAppbmRleCA3YzdjYTM2Li4zMTI3MjA2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX1BBQ0tBR0VfUkVHSVNUUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfUEFDS0FHRV9SRUdJU1RSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JFR0lTVFJZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ29udHJvbHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQgZm9yCiB3aGV0aGVyIG9yIG5vdCB0byBzZWFyY2ggcGF0aHMgcHJvdmlkZWQgYnkgdGhlIDpyZWY6YFVzZXIgUGFja2FnZSBSZWdpc3RyeWAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfUEFDS0FHRV9ST09UX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSC5yc3QKaW5kZXggZTdmNWIwZi4uNjRlNWM2ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciB3aGV0aGVyIG9yIG5vdCB0bwogc2VhcmNoIHBhdGhzIHByb3ZpZGVkIGJ5IDp2YXJpYWJsZTpgPFBhY2thZ2VOYW1lPl9ST09UYCB2YXJpYWJsZXM6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSC5yc3QKaW5kZXggZmJhYmE1YS4uYTBhODZlNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciB3aGV0aGVyIG9yIG5vdCB0bwogc2VhcmNoIHBhdGhzIHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfU1lTVEVNX1BBQ0tBR0VfUkVHSVNUUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKaW5kZXggY2I0ZWVjNS4uNTA0YjdlOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyBzZWFyY2hpbmcgdGhlIDpyZWY6YFN5c3RlbSBQYWNrYWdlIFJlZ2lzdHJ5YCBieSB0aGUKIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRk9MREVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRk9MREVSLnJzdAppbmRleCA1MGEyYjg4Li4zN2YxMzdjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZPTERFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GT0xERVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRk9MREVSCiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBTZXQgdGhlIGZvbGRlciBuYW1lLiBVc2UgdG8gb3JnYW5pemUgdGFyZ2V0cyBpbiBhbiBJREUuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YEZPTERFUmAgcHJvcGVydHkgb24gYWxsIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUksucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUksucnN0CmluZGV4IDU5MTA0MWMuLjM3Mzg1YmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRlJBTUVXT1JLLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GUkFNRVdPUksKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgRlJBTUVXT1JLYCBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHByb3BlcnR5IG9uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ZiNjZlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHLnJzdApAQCAtMCwwICsxLDEwIEBACitDTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0RlZmF1bHQgZnJhbWV3b3JrIGZpbGVuYW1lIHBvc3RmaXggdW5kZXIgY29uZmlndXJhdGlvbiBgYDxDT05GSUc+YGAgd2hlbgordXNpbmcgYSBtdWx0aS1jb25maWcgZ2VuZXJhdG9yLgorCitXaGVuIGEgZnJhbWV3b3JrIHRhcmdldCBpcyBjcmVhdGVkIGl0cyA6cHJvcF90Z3Q6YEZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF88Q09ORklHPmAKK3RhcmdldCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlmIGl0IGlzIHNldC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQwNWYzCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9Gb3J0cmFuX1BSRVBST0NFU1MucnN0CkBAIC0wLDAgKzEsMTAgQEAKK0NNQUtFX0ZvcnRyYW5fUFJFUFJPQ0VTUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBGb3J0cmFuX1BSRVBST0NFU1NgIG9mIHRhcmdldHMuCisKK1RoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YEZvcnRyYW5fUFJFUFJPQ0VTU2AKK3Byb3BlcnR5IG9uIGFsbCB0aGUgdGFyZ2V0cy4gIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbAoraW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRS5yc3QKaW5kZXggMzY1N2VkNC4uNTg1OGQ3YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogR2VuZXJhdG9yLXNwZWNpZmljIGluc3RhbmNlIHNwZWNpZmljYXRpb24gcHJvdmlkZWQgYnkgdXNlci4KIAogU29tZSBDTWFrZSBnZW5lcmF0b3JzIHN1cHBvcnQgc2VsZWN0aW9uIG9mIGFuIGluc3RhbmNlIG9mIHRoZSBuYXRpdmUgYnVpbGQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLnJzdAppbmRleCAyYzExNWEzLi5iMTdkODNhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIEdlbmVyYXRvci1zcGVjaWZpYyB0YXJnZXQgcGxhdGZvcm0gc3BlY2lmaWNhdGlvbiBwcm92aWRlZCBieSB1c2VyLgogCiBTb21lIENNYWtlIGdlbmVyYXRvcnMgc3VwcG9ydCBhIHRhcmdldCBwbGF0Zm9ybSBuYW1lIHRvIGJlIGdpdmVuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QKaW5kZXggYjY3NjhhMS4uMGU4YWU1ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0hTX05PX1NPVVJDRV9HUk9VUF9GSUxFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogYGBPTmBgIC8gYGBPRkZgYCBib29sZWFuIHRvIGNvbnRyb2wgaWYgdGhlIHByb2plY3QgZmlsZSBmb3IgYSB0YXJnZXQgc2hvdWxkCiBiZSBvbmUgc2luZ2xlIGZpbGUgb3IgbXVsdGlwbGUgZmlsZXMuICBSZWZlciB0bwogOnByb3BfdGd0OmBHSFNfTk9fU09VUkNFX0dST1VQX0ZJTEVgIGZvciBmdXJ0aGVyIGRldGFpbHMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVC5yc3QKaW5kZXggODU4Nzc0Mi4uOTZlOTkwNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogU3dpdGNoIHRvIGVuYWJsZSBnZW5lcmF0aW9uIG9mIGEgZ2xvYmFsIGBgYXV0b2dlbmBgIHRhcmdldC4KIAogV2hlbiA6dmFyaWFibGU6YENNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVGAgaXMgZW5hYmxlZCwgYSBjdXN0b20gdGFyZ2V0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVF9OQU1FLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUucnN0CmluZGV4IGM4NmE1ZDAuLjRhZjRiYzMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBnbG9iYWwgYGBhdXRvZ2VuYGAgdGFyZ2V0LgogCiBXaGVuIDp2YXJpYWJsZTpgQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUYCBpcyBlbmFibGVkLCBhIGdsb2JhbCBjdXN0b20gdGFyZ2V0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPUkNDX1RBUkdFVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPUkNDX1RBUkdFVC5yc3QKaW5kZXggZjkyMTI4Yy4uZWZlYTViZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dMT0JBTF9BVVRPUkNDX1RBUkdFVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogU3dpdGNoIHRvIGVuYWJsZSBnZW5lcmF0aW9uIG9mIGEgZ2xvYmFsIGBgYXV0b3JjY2BgIHRhcmdldC4KIAogV2hlbiA6dmFyaWFibGU6YENNQUtFX0dMT0JBTF9BVVRPUkNDX1RBUkdFVGAgaXMgZW5hYmxlZCwgYSBjdXN0b20gdGFyZ2V0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPUkNDX1RBUkdFVF9OQU1FLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUX05BTUUucnN0CmluZGV4IGM2ZTA1ZGUuLjRkMmUzMTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUX05BTUUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUX05BTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUX05BTUUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBnbG9iYWwgYGBhdXRvcmNjYGAgdGFyZ2V0LgogCiBXaGVuIDp2YXJpYWJsZTpgQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUYCBpcyBlbmFibGVkLCBhIGdsb2JhbCBjdXN0b20gdGFyZ2V0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0hPU1RfU09MQVJJUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0hPU1RfU09MQVJJUy5yc3QKaW5kZXggODJiNWQ2OS4uNzA1NGFjZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9IT1NUX1NPTEFSSVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSE9TVF9TT0xBUklTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0hPU1RfU09MQVJJUwogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBgYFRydWVgYCBmb3IgT3JhY2xlIFNvbGFyaXMgb3BlcmF0aW5nIHN5c3RlbXMuCiAKIFNldCB0byBgYHRydWVgYCB3aGVuIHRoZSBob3N0IHN5c3RlbSBpcyBPcmFjbGUgU29sYXJpcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMucnN0CmluZGV4IGY5OTRmYmUuLmFhZDk5ZTQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBEZWZhdWx0IHBlcm1pc3Npb25zIGZvciBkaXJlY3RvcmllcyBjcmVhdGVkIGltcGxpY2l0bHkgZHVyaW5nIGluc3RhbGxhdGlvbgogb2YgZmlsZXMgYnkgOmNvbW1hbmQ6YGluc3RhbGxgIGFuZCA6Y29tbWFuZDpgZmlsZShJTlNUQUxMKWAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9NRVNTQUdFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9NRVNTQUdFLnJzdAppbmRleCAzMDRkZjI2Li40ZjM5Y2ZlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfTUVTU0FHRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX01FU1NBR0UucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfSU5TVEFMTF9NRVNTQUdFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdmVyYm9zaXR5IG9mIGluc3RhbGxhdGlvbiBzY3JpcHQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlCiA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZCAodXNpbmcgdGhlIDpjb21tYW5kOmBmaWxlKElOU1RBTEwpYCBjb21tYW5kKS4KIEZvciBwYXRocyB0aGF0IGFyZSBuZXdseSBpbnN0YWxsZWQgb3IgdXBkYXRlZCwgaW5zdGFsbGF0aW9uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUFJFRklYX0lOSVRJQUxJWkVEX1RPX0RFRkFVTFQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1BSRUZJWF9JTklUSUFMSVpFRF9UT19ERUZBVUxULnJzdAppbmRleCAyYTU4NDJkLi45M2NjMzE5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUFJFRklYX0lOSVRJQUxJWkVEX1RPX0RFRkFVTFQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9QUkVGSVhfSU5JVElBTElaRURfVE9fREVGQVVMVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9JTlNUQUxMX1BSRUZJWF9JTklUSUFMSVpFRF9UT19ERUZBVUxUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNy4xCisKIENNYWtlIHNldHMgdGhpcyB2YXJpYWJsZSB0byBhIGBgVFJVRWBgIHZhbHVlIHdoZW4gdGhlCiA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCBoYXMganVzdCBiZWVuIGluaXRpYWxpemVkIHRvCiBpdHMgZGVmYXVsdCB2YWx1ZSwgdHlwaWNhbGx5IG9uIHRoZSBmaXJzdCBydW4gb2YgQ01ha2Ugd2l0aGluCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgucnN0CmluZGV4IDc2Y2EzZGEuLmM4NmU0MzMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogU2V0cyB0aGUgZGVmYXVsdCBmb3Igd2hldGhlciB0b29sY2hhaW4tZGVmaW5lZCBycGF0aHMgc2hvdWxkIGJlIHJlbW92ZWQgZHVyaW5nCiBpbnN0YWxsYXRpb24uCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT04ucnN0CmluZGV4IGIwY2JiNjIuLmNmN2RhNzYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0lOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTmAgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTmAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTl9DT05GSUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OX0NPTkZJRy5yc3QKaW5kZXggYjI5MTEwMi4uNWIzZWU3NyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OX0NPTkZJRy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OX0NPTkZJRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fPENPTkZJRz5gIG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fPENPTkZJRz5gCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lPU19JTlNUQUxMX0NPTUJJTkVELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU9TX0lOU1RBTExfQ09NQklORUQucnN0CmluZGV4IGM1Y2I5YjYuLmNkN2ZkOGQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU9TX0lOU1RBTExfQ09NQklORUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU9TX0lOU1RBTExfQ09NQklORUQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfSU9TX0lOU1RBTExfQ09NQklORUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YElPU19JTlNUQUxMX0NPTUJJTkVEYCBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBJT1NfSU5TVEFMTF9DT01CSU5FRGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xTLnJzdAppbmRleCA3MmI1MGI0Li40M2QzYzg0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0pPQl9QT09MUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfSk9CX1BPT0xTCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBJZiB0aGUgOnByb3BfZ2JsOmBKT0JfUE9PTFNgIGdsb2JhbCBwcm9wZXJ0eSBpcyBub3Qgc2V0LCB0aGUgdmFsdWUKIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiBpdHMgcGxhY2UuICBTZWUgOnByb3BfZ2JsOmBKT0JfUE9PTFNgCiBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QKaW5kZXggZjk0NjdiMy4uMWE2ZjY2YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUmAKIHByb3BlcnR5IG9uIGFsbCB0aGUgdGFyZ2V0cy4gU2VlIDpwcm9wX3RndDpgSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVJgCiBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FLnJzdAppbmRleCBkMzM2MzY0Li5mNTM5Mjc3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNy4xCisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkYCB0aGlzIHZhcmlhYmxlIGNvbnRhaW5zIHRoZQogdG9vbGNoYWluIGJpbnV0aWxzIG1hY2hpbmUgbmFtZSAoZS5nLiBgYGdjYyAtZHVtcG1hY2hpbmVgYCkuICBUaGUKIGJpbnV0aWxzIHR5cGljYWxseSBoYXZlIGEgYGA8bWFjaGluZT4tYGAgcHJlZml4IG9uIHRoZWlyIG5hbWUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQU5EUk9JRF9UT09MQ0hBSU5fUFJFRklYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgucnN0CmluZGV4IGRiMDRhZjMuLmZmMDcyY2EgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0FORFJPSURfVE9PTENIQUlOX1BSRUZJWAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWRgIHRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlIGFic29sdXRlCiBwYXRoIHByZWZpeGluZyB0aGUgdG9vbGNoYWluIEdOVSBjb21waWxlciBhbmQgaXRzIGJpbnV0aWxzLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQU5EUk9JRF9UT09MQ0hBSU5fU1VGRklYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9TVUZGSVgucnN0CmluZGV4IDE1OWViMjIuLmQ1OTUyODAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9TVUZGSVgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9TVUZGSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0FORFJPSURfVE9PTENIQUlOX1NVRkZJWAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWRgIHRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlCiBob3N0IHBsYXRmb3JtIHN1ZmZpeCBvZiB0aGUgdG9vbGNoYWluIEdOVSBjb21waWxlciBhbmQgaXRzIGJpbnV0aWxzLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ0xBTkdfVElEWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ0xBTkdfVElEWS5yc3QKaW5kZXggYmQ0OWRlMy4uNzhmMGY2YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NMQU5HX1RJRFkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DTEFOR19USURZLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DTEFOR19USURZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmA8TEFORz5fQ0xBTkdfVElEWWAgdGFyZ2V0IHByb3BlcnR5CiB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAgb3IgYGBDWFhgYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0FSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9BUi5yc3QKaW5kZXggYjgzYTFkNC4uNzRmMjc1OCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0FSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0NPTVBJTEVSX0FSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIEEgd3JhcHBlciBhcm91bmQgYGBhcmBgIGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgYGAtLXBsdWdpbmBgIG9wdGlvbiBmb3IgdGhlCiBjb21waWxlci4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVJDSElURUNUVVJFX0lELnJzdAppbmRleCAwNTRjNjQ4Li44MDU3NTY2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVJDSElURUNUVVJFX0lELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVJDSElURUNUVVJFX0lELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBBbiBpbnRlcm5hbCB2YXJpYWJsZSBzdWJqZWN0IHRvIGNoYW5nZS4KIAogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSB2YXJpYW50IG9mIGEgY29tcGlsZXIgYmFzZWQgb24gaXRzIHRhcmdldApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QKaW5kZXggYzc2ZTJkMC4uOTg2MzRjMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0NPTVBJTEVSX0xBVU5DSEVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgPExBTkc+X0NPTVBJTEVSX0xBVU5DSEVSYCB0YXJnZXQgcHJvcGVydHkuCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb24gZWFjaCB0YXJnZXQgYXMgaXQgaXMKIGNyZWF0ZWQuICBUaGlzIGlzIGRvbmUgb25seSB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAsIGBgQ1hYYGAsIGBgRm9ydHJhbmBgLApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1BSRURFRklORVNfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfUFJFREVGSU5FU19DT01NQU5ELnJzdAppbmRleCBlMDUwZjQzLi45MzUzMjlhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfUFJFREVGSU5FU19DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfUFJFREVGSU5FU19DT01NQU5ELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DT01QSUxFUl9QUkVERUZJTkVTX0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBDb21tYW5kIHRoYXQgb3V0cHV0cyB0aGUgY29tcGlsZXIgcHJlIGRlZmluaXRpb25zLgogCiBTZWUgOnByb3BfdGd0OmBBVVRPTU9DYCB3aGljaCB1c2VzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfUkFOTElCLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9SQU5MSUIucnN0CmluZGV4IDk0NTE2MGIuLjFkMTBiNTUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9SQU5MSUIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9SQU5MSUIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0NPTVBJTEVSX1JBTkxJQgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogQSB3cmFwcGVyIGFyb3VuZCBgYHJhbmxpYmBgIGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgYGAtLXBsdWdpbmBgIG9wdGlvbiBmb3IgdGhlCiBjb21waWxlci4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1ZFUlNJT05fSU5URVJOQUwucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1ZFUlNJT05fSU5URVJOQUwucnN0CmluZGV4IGMzY2Q5ODAuLjU5NmE5ODkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9WRVJTSU9OX0lOVEVSTkFMLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfVkVSU0lPTl9JTlRFUk5BTC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fQ09NUElMRVJfVkVSU0lPTl9JTlRFUk5BTAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBBbiBpbnRlcm5hbCB2YXJpYWJsZSBzdWJqZWN0IHRvIGNoYW5nZS4KIAogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSB2YXJpYW50IG9mIGEgY29tcGlsZXIgYmFzZWQgb24gYW4gaW50ZXJuYWwKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DUFBDSEVDSy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ1BQQ0hFQ0sucnN0CmluZGV4IDUwYjQ3OGYuLjVhZTVmYWYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DUFBDSEVDSy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NQUENIRUNLLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DUFBDSEVDSwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmA8TEFORz5fQ1BQQ0hFQ0tgIHRhcmdldCBwcm9wZXJ0eS4gVGhpcyB2YXJpYWJsZQogaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvbiBlYWNoIHRhcmdldCBhcyBpdCBpcyBjcmVhdGVkLiAgVGhpcwogaXMgZG9uZSBvbmx5IHdoZW4gYGA8TEFORz5gYCBpcyBgYENgYCBvciBgYENYWGBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NQUExJTlQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NQUExJTlQucnN0CmluZGV4IDNiNmY0NTIuLmFiN2IwZmMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DUFBMSU5ULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ1BQTElOVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fQ1BQTElOVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgPExBTkc+X0NQUExJTlRgIHRhcmdldCBwcm9wZXJ0eS4gVGhpcyB2YXJpYWJsZQogaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvbiBlYWNoIHRhcmdldCBhcyBpdCBpcyBjcmVhdGVkLiAgVGhpcwogaXMgZG9uZSBvbmx5IHdoZW4gYGA8TEFORz5gYCBpcyBgYENgYCBvciBgYENYWGBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfQ09ORklHLnJzdAppbmRleCAxZGJkMDM2Li42MjhiNjJiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfQ09ORklHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfQ09ORklHLnJzdApAQCAtMSw0ICsxLDYgQEAKIENNQUtFXzxMQU5HPl9GTEFHU188Q09ORklHPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogRmxhZ3MgZm9yIGxhbmd1YWdlIGBgPExBTkc+YGAgd2hlbiBidWlsZGluZyBmb3IgdGhlIGBgPENPTkZJRz5gYCBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0NPTkZJR19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19DT05GSUdfSU5JVC5yc3QKaW5kZXggMWViNWIzZi4uMTc2NjlhMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0NPTkZJR19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfQ09ORklHX0lOSVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0ZMQUdTXzxDT05GSUc+X0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU188Q09ORklHPmAgY2FjaGUKIGVudHJ5IHRoZSBmaXJzdCB0aW1lIGEgYnVpbGQgdHJlZSBpcyBjb25maWd1cmVkIGZvciBsYW5ndWFnZSBgYDxMQU5HPmBgLgogVGhpcyB2YXJpYWJsZSBpcyBtZWFudCB0byBiZSBzZXQgYnkgYSA6dmFyaWFibGU6YHRvb2xjaGFpbiBmaWxlCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfREVCVUdfSU5JVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfREVCVUdfSU5JVC5yc3QKaW5kZXggZGU3ZmNmYy4uNDljOWU5OSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0RFQlVHX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19ERUJVR19JTklULnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFXzxMQU5HPl9GTEFHU19ERUJVR19JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVGhpcyB2YXJpYWJsZSBpcyB0aGUgYGBEZWJ1Z2BgIHZhcmlhbnQgb2YgdGhlCiA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU188Q09ORklHPl9JTklUYCB2YXJpYWJsZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19JTklULnJzdAppbmRleCBhODhkMTIyLi42N2ZmMmNiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0lOSVQucnN0CkBAIC0xLDExICsxLDE3IEBACiBDTUFLRV88TEFORz5fRkxBR1NfSU5JVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fRkxBR1NgIGNhY2hlIGVudHJ5CiB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZCBmb3IgbGFuZ3VhZ2UgYGA8TEFORz5gYC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQogPENNQUtFX1RPT0xDSEFJTl9GSUxFPmAuICBDTWFrZSBtYXkgcHJlcGVuZCBvciBhcHBlbmQgY29udGVudCB0bwotdGhlIHZhbHVlIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCBhbmQgdGFyZ2V0IHBsYXRmb3JtLgordGhlIHZhbHVlIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCBhbmQgdGFyZ2V0IHBsYXRmb3JtLiAgRm9yIGV4YW1wbGUsCit0aGUgY29udGVudHMgb2YgYSBgYHh4eEZMQUdTYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBwcmVwZW5kZWQsCit3aGVyZSBgYHh4eGBgIHdpbGwgYmUgbGFuZ3VhZ2Utc3BlY2lmaWMgYnV0IG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcworYGA8TEFORz5gYCAoZS5nLiA6ZW52dmFyOmBDWFhGTEFHU2AgZm9yIGBgQ1hYYGAsIDplbnZ2YXI6YEZGTEFHU2AgZm9yCitgYEZvcnRyYW5gYCwgYW5kIHNvIG9uKS4KIAogU2VlIGFsc28gdGhlIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMKIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTXzxDT05GSUc+X0lOSVRgIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX01JTlNJWkVSRUxfSU5JVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfTUlOU0laRVJFTF9JTklULnJzdAppbmRleCAxZTcwMDNjLi4zNjAwOTA5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfTUlOU0laRVJFTF9JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfTUlOU0laRVJFTF9JTklULnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFXzxMQU5HPl9GTEFHU19NSU5TSVpFUkVMX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRoaXMgdmFyaWFibGUgaXMgdGhlIGBgTWluU2l6ZVJlbGBgIHZhcmlhbnQgb2YgdGhlCiA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU188Q09ORklHPl9JTklUYCB2YXJpYWJsZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19SRUxFQVNFX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX1JFTEVBU0VfSU5JVC5yc3QKaW5kZXggZTdjNzNmZS4uZTg4OTg1MiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX1JFTEVBU0VfSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX1JFTEVBU0VfSU5JVC5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV88TEFORz5fRkxBR1NfUkVMRUFTRV9JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGlzIHZhcmlhYmxlIGlzIHRoZSBgYFJlbGVhc2VgYCB2YXJpYW50IG9mIHRoZQogOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fRkxBR1NfPENPTkZJRz5fSU5JVGAgdmFyaWFibGUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVC5yc3QKaW5kZXggM2FiMzk3NS4uYjQyY2FlZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX1JFTFdJVEhERUJJTkZPX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19SRUxXSVRIREVCSU5GT19JTklULnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFXzxMQU5HPl9GTEFHU19SRUxXSVRIREVCSU5GT19JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVGhpcyB2YXJpYWJsZSBpcyB0aGUgYGBSZWxXaXRoRGViSW5mb2BgIHZhcmlhbnQgb2YgdGhlCiA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU188Q09ORklHPl9JTklUYCB2YXJpYWJsZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19JTkNMVURFX1dIQVRfWU9VX1VTRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfSU5DTFVERV9XSEFUX1lPVV9VU0UucnN0CmluZGV4IDJjODAyOGEuLmJlNmMyMTAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19JTkNMVURFX1dIQVRfWU9VX1VTRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0lOQ0xVREVfV0hBVF9ZT1VfVVNFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9JTkNMVURFX1dIQVRfWU9VX1VTRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YDxMQU5HPl9JTkNMVURFX1dIQVRfWU9VX1VTRWAgdGFyZ2V0IHByb3BlcnR5LgogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzIGl0IGlzCiBjcmVhdGVkLiAgVGhpcyBpcyBkb25lIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgIG9yIGBgQ1hYYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS0VSX1dSQVBQRVJfRkxBRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS0VSX1dSQVBQRVJfRkxBRy5yc3QKaW5kZXggZGY1MTQwNy4uNDcxYzM1MSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktFUl9XUkFQUEVSX0ZMQUcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LRVJfV1JBUFBFUl9GTEFHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9MSU5LRVJfV1JBUFBFUl9GTEFHCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIERlZmluZXMgdGhlIHN5bnRheCBvZiBjb21waWxlciBkcml2ZXIgb3B0aW9uIHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUgbGlua2VyCiB0b29sLiBJdCB3aWxsIGJlIHVzZWQgdG8gdHJhbnNsYXRlIHRoZSBgYExJTktFUjpgYCBwcmVmaXggaW4gdGhlIGxpbmsgb3B0aW9ucwogKHNlZSA6Y29tbWFuZDpgYWRkX2xpbmtfb3B0aW9uc2AgYW5kIDpjb21tYW5kOmB0YXJnZXRfbGlua19vcHRpb25zYCkuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktFUl9XUkFQUEVSX0ZMQUdfU0VQLnJzdAppbmRleCBmYWYxNDgxLi5hMzg5NWFmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fTElOS0VSX1dSQVBQRVJfRkxBR19TRVAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aXRoIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0xJTktFUl9XUkFQUEVSX0ZMQUdgCiB2YXJpYWJsZSB0byBmb3JtYXQgYGBMSU5LRVI6YGAgcHJlZml4IGluIHRoZSBsaW5rIG9wdGlvbnMKIChzZWUgOmNvbW1hbmQ6YGFkZF9saW5rX29wdGlvbnNgIGFuZCA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfb3B0aW9uc2ApLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9GSUxFX0ZMQUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9GSUxFX0ZMQUcucnN0CmluZGV4IGQ1NGYwODAuLjIzZWNlODggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LX0xJQlJBUllfRklMRV9GTEFHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX0ZJTEVfRkxBRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fTElOS19MSUJSQVJZX0ZJTEVfRkxBRwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBMYW5ndWFnZS1zcGVjaWZpYyBmbGFnIHRvIGJlIHVzZWQgdG8gbGluayBhIGxpYnJhcnkgc3BlY2lmaWVkIGJ5CiBhIHBhdGggdG8gaXRzIGZpbGUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LX0xJQlJBUllfRkxBRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX0ZMQUcucnN0CmluZGV4IGQ3YmIwZDguLjBmNTI4ZGIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LX0xJQlJBUllfRkxBRy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9GTEFHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9MSU5LX0xJQlJBUllfRkxBRwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogRmxhZyB0byBiZSB1c2VkIHRvIGxpbmsgYSBsaWJyYXJ5IGludG8gYSBzaGFyZWQgbGlicmFyeSBvciBleGVjdXRhYmxlLgogCiBUaGlzIGZsYWcgd2lsbCBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsaWJyYXJ5IHRvIGxpbmsgdG8gYSBzaGFyZWQgbGlicmFyeSBvciBhbgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9TVUZGSVgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9TVUZGSVgucnN0CmluZGV4IGEzNzg2NTcuLjM1OWUyOWYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LX0xJQlJBUllfU1VGRklYLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX1NVRkZJWC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fTElOS19MSUJSQVJZX1NVRkZJWAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBMYW5ndWFnZS1zcGVjaWZpYyBzdWZmaXggZm9yIGxpYnJhcmllcyB0aGF0IHlvdSBsaW5rIHRvLgogCiBUaGUgc3VmZml4IHRvIHVzZSBmb3IgdGhlIGVuZCBvZiBhIGxpYnJhcnkgZmlsZW5hbWUsIGBgLmxpYmBgIG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QKaW5kZXggYzhlM2Q1Ny4uMjRhY2E4YiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogSW5jbHVkZSBkaXJlY3RvcmllcyB0byBiZSB1c2VkIGZvciBldmVyeSBzb3VyY2UgZmlsZSBjb21waWxlZCB3aXRoCiB0aGUgYGA8TEFORz5gYCBjb21waWxlci4gIFRoaXMgaXMgbWVhbnQgZm9yIHNwZWNpZmljYXRpb24gb2Ygc3lzdGVtCiBpbmNsdWRlIGRpcmVjdG9yaWVzIG5lZWRlZCBieSB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX1NUQU5EQVJEX0xJQlJBUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfU1RBTkRBUkRfTElCUkFSSUVTLnJzdAppbmRleCBiYTZkZjkzLi5kNWYzMzUxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfU1RBTkRBUkRfTElCUkFSSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfU1RBTkRBUkRfTElCUkFSSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9TVEFOREFSRF9MSUJSQVJJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIExpYnJhcmllcyBsaW5rZWQgaW50byBldmVyeSBleGVjdXRhYmxlIGFuZCBzaGFyZWQgbGlicmFyeSBsaW5rZWQKIGZvciBsYW5ndWFnZSBgYDxMQU5HPmBgLiAgVGhpcyBpcyBtZWFudCBmb3Igc3BlY2lmaWNhdGlvbiBvZiBzeXN0ZW0KIGxpYnJhcmllcyBuZWVkZWQgYnkgdGhlIGxhbmd1YWdlIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0CmluZGV4IGUwNjljZGQuLjA4Zjk1YzQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV88Q09ORklHPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBXaGVyZSB0byBwdXQgYWxsIHRoZSA6cmVmOmBMSUJSQVJZIDxMaWJyYXJ5IE91dHB1dCBBcnRpZmFjdHM+YAogdGFyZ2V0IGZpbGVzIHdoZW4gYnVpbHQgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX0RJUkVDVE9SSUVTX0JFRk9SRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfRElSRUNUT1JJRVNfQkVGT1JFLnJzdAppbmRleCAwMjZjYTM1Li5mMTIwODY2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfRElSRUNUT1JJRVNfQkVGT1JFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfRElSRUNUT1JJRVNfQkVGT1JFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0xJTktfRElSRUNUT1JJRVNfQkVGT1JFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gYXBwZW5kIG9yIHByZXBlbmQgZGlyZWN0b3JpZXMgYnkgZGVmYXVsdCBpbgogOmNvbW1hbmQ6YGxpbmtfZGlyZWN0b3JpZXNgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfU0VBUkNIX0VORF9TVEFUSUMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1NFQVJDSF9FTkRfU1RBVElDLnJzdAppbmRleCA1NGNkYWFhLi5mNGNjYzA0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfU0VBUkNIX0VORF9TVEFUSUMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19TRUFSQ0hfRU5EX1NUQVRJQy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9MSU5LX1NFQVJDSF9FTkRfU1RBVElDCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBFbmQgYSBsaW5rIGxpbmUgc3VjaCB0aGF0IHN0YXRpYyBzeXN0ZW0gbGlicmFyaWVzIGFyZSB1c2VkLgogCiBTb21lIGxpbmtlcnMgc3VwcG9ydCBzd2l0Y2hlcyBzdWNoIGFzIGBgLUJzdGF0aWNgYCBhbmQgYGAtQmR5bmFtaWNgYCB0bwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMucnN0CmluZGV4IDBkNTJhMzEuLjIwMjVjNzIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19TRUFSQ0hfU1RBUlRfU1RBVElDLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfU0VBUkNIX1NUQVJUX1NUQVRJQy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9MSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQXNzdW1lIHRoZSBsaW5rZXIgbG9va3MgZm9yIHN0YXRpYyBsaWJyYXJpZXMgYnkgZGVmYXVsdC4KIAogU29tZSBsaW5rZXJzIHN1cHBvcnQgc3dpdGNoZXMgc3VjaCBhcyBgYC1Cc3RhdGljYGAgYW5kIGBgLUJkeW5hbWljYGAgdG8KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19XSEFUX1lPVV9VU0UucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1dIQVRfWU9VX1VTRS5yc3QKaW5kZXggOTBjNGQzZi4uMDZiM2FhOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1dIQVRfWU9VX1VTRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1dIQVRfWU9VX1VTRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9MSU5LX1dIQVRfWU9VX1VTRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YExJTktfV0hBVF9ZT1VfVVNFYCB0YXJnZXQgcHJvcGVydHkuCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb24gZWFjaCB0YXJnZXQgYXMgaXQgaXMKIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01BVENIX0NPVU5ULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfQ09VTlQucnN0CmluZGV4IDM1NWU4MzQuLmRlZWVjOGIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfQ09VTlQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfQ09VTlQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTUFUQ0hfQ09VTlQKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBUaGUgbnVtYmVyIG9mIG1hdGNoZXMgd2l0aCB0aGUgbGFzdCByZWd1bGFyIGV4cHJlc3Npb24uCiAKIFdoZW4gYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggaXMgdXNlZCwgQ01ha2UgZmlsbHMgaW4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfbi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01BVENIX24ucnN0CmluZGV4IGM3ZGQ2MjMuLmE5Mjc4OGUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfbi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NQVRDSF9uLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX01BVENIXzxuPgogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBDYXB0dXJlIGdyb3VwIGBgPG4+YGAgbWF0Y2hlZCBieSB0aGUgbGFzdCByZWd1bGFyIGV4cHJlc3Npb24sIGZvciBncm91cHMKIDAgdGhyb3VnaCA5LiAgR3JvdXAgMCBpcyB0aGUgZW50aXJlIG1hdGNoLiAgR3JvdXBzIDEgdGhyb3VnaCA5IGFyZSB0aGUKIHN1YmV4cHJlc3Npb25zIGNhcHR1cmVkIGJ5IGBgKClgYCBzeW50YXguCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01BWElNVU1fUkVDVVJTSU9OX0RFUFRILnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFYSU1VTV9SRUNVUlNJT05fREVQVEgucnN0CmluZGV4IDcxMTBiMTYuLjU5YzYwZDMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFYSU1VTV9SRUNVUlNJT05fREVQVEgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFYSU1VTV9SRUNVUlNJT05fREVQVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTUFYSU1VTV9SRUNVUlNJT05fREVQVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogTWF4aW11bSByZWN1cnNpb24gZGVwdGggZm9yIENNYWtlIHNjcmlwdHMuIEl0IGlzIGludGVuZGVkIHRvIGJlIHNldCBvbiB0aGUKIGNvbW1hbmQgbGluZSB3aXRoIGBgLURDTUFLRV9NQVhJTVVNX1JFQ1VSU0lPTl9ERVBUSD08eD5gYCwgb3Igd2l0aGluCiBgYENNYWtlTGlzdHMudHh0YGAgYnkgcHJvamVjdHMgdGhhdCByZXF1aXJlIGEgbGFyZ2UgcmVjdXJzaW9uIGRlcHRoLiBQcm9qZWN0cwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0NPTlRFWFQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0NPTlRFWFQucnN0CmluZGV4IDZiNGNhNDAuLjQxYWNlNDMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NRVNTQUdFX0NPTlRFWFQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFdoZW4gZW5hYmxlZCBieSB0aGUgOm1hbnVhbDpgY21ha2UgPGNtYWtlKDEpPmAgYGAtLWxvZy1jb250ZXh0YGAgY29tbWFuZCBsaW5lCiBvcHRpb24gb3IgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgIHZhcmlhYmxlLCB0aGUKIDpjb21tYW5kOmBtZXNzYWdlYCBjb21tYW5kIGNvbnZlcnRzIHRoZSBgYENNQUtFX01FU1NBR0VfQ09OVEVYVGBgIGxpc3QgaW50byBhCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1cucnN0CmluZGV4IDdlYzIxOGUuLjM4MmU5ZmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1cucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1cucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1cKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIHRydWUgZW5hYmxlcyBzaG93aW5nIGEgY29udGV4dCB3aXRoIGVhY2ggbGluZQogbG9nZ2VkIGJ5IHRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCAoc2VlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9DT05URVhUYAogZm9yIGhvdyB0aGUgY29udGV4dCBpdHNlbGYgaXMgc3BlY2lmaWVkKS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9JTkRFTlQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0lOREVOVC5yc3QKaW5kZXggN2U0NGE0Yy4uYzYyNjNkMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0lOREVOVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0lOREVOVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NRVNTQUdFX0lOREVOVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGUgOmNvbW1hbmQ6YG1lc3NhZ2VgIGNvbW1hbmQgam9pbnMgdGhlIHN0cmluZ3MgZnJvbSB0aGlzIGxpc3QgYW5kIGZvcgogbG9nIGxldmVscyBvZiBgYE5PVElDRWBgIGFuZCBiZWxvdywgaXQgcHJlcGVuZHMgdGhlIHJlc3VsdGFudCBzdHJpbmcgdG8KIGVhY2ggbGluZSBvZiB0aGUgbWVzc2FnZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9MT0dfTEVWRUwucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTC5yc3QKaW5kZXggMWQ0Y2ZlNi4uM2I0NWQxZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NRVNTQUdFX0xPR19MRVZFTAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBXaGVuIHNldCwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGxvZ2dpbmcgbGV2ZWwgdXNlZCBieSB0aGUKIDpjb21tYW5kOmBtZXNzYWdlYCBjb21tYW5kLiAgVmFsaWQgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBmb3IgdGhlCiBgYC0tbG9nLWxldmVsYGAgY29tbWFuZCBsaW5lIG9wdGlvbiBvZiB0aGUgOm1hbnVhbDpgY21ha2UoMSlgIHByb2dyYW0uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdAppbmRleCAzMjc5MDE0Li5lOGE2NDAxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTXzxDT05GSUc+X0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfPENPTkZJRz5gCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQucnN0CmluZGV4IDkxYjM5ZjYuLmQ1OWU5YmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NgCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NU1ZDSURFX1JVTl9QQVRILnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTVNWQ0lERV9SVU5fUEFUSC5yc3QKaW5kZXggMjJlNzI3Zi4uNzIxY2VhYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NU1ZDSURFX1JVTl9QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01TVkNJREVfUlVOX1BBVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTVNWQ0lERV9SVU5fUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIEV4dHJhIFBBVEggbG9jYXRpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBleGVjdXRpbmcKIDpjb21tYW5kOmBhZGRfY3VzdG9tX2NvbW1hbmRgIG9yIDpjb21tYW5kOmBhZGRfY3VzdG9tX3RhcmdldGAgd2hlbiB1c2luZyB0aGUKIDpnZW5lcmF0b3I6YFZpc3VhbCBTdHVkaW8gOSAyMDA4YCAob3IgYWJvdmUpIGdlbmVyYXRvci4gVGhpcyBhbGxvd3MKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWS5yc3QKaW5kZXggOGI1NGU3ZS4uMTQ4MDZlNiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBTZWxlY3QgdGhlIE1TVkMgcnVudGltZSBsaWJyYXJ5IGZvciB1c2UgYnkgY29tcGlsZXJzIHRhcmdldGluZyB0aGUgTVNWQyBBQkkuCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBNU1ZDX1JVTlRJTUVfTElCUkFSWWAKIHByb3BlcnR5IG9uIGFsbCB0YXJnZXRzIGFzIHRoZXkgYXJlIGNyZWF0ZWQuICBJdCBpcyBhbHNvIHByb3BhZ2F0ZWQgYnkKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTkVUUkMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9ORVRSQy5yc3QKaW5kZXggOTAzZWMzMS4uMmM2NGE4MSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9ORVRSQy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ORVRSQy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9ORVRSQwogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYGBORVRSQ2BgIG9wdGlvbiBmb3IKIDpjb21tYW5kOmBmaWxlKERPV05MT0FEKWAgYW5kIDpjb21tYW5kOmBmaWxlKFVQTE9BRClgIGNvbW1hbmRzIGFuZCB0aGUKIG1vZHVsZSA6bW9kdWxlOmBFeHRlcm5hbFByb2plY3RgLiBTZWUgdGhvc2UgY29tbWFuZHMgZm9yIGFkZGl0aW9uYWwKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTkVUUkNfRklMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX05FVFJDX0ZJTEUucnN0CmluZGV4IDBmMDlhZmUuLjk3YTY0NWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTkVUUkNfRklMRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ORVRSQ19GSUxFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX05FVFJDX0ZJTEUKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYGBORVRSQ19GSUxFYGAgb3B0aW9uIGZvcgogOmNvbW1hbmQ6YGZpbGUoRE9XTkxPQUQpYCBhbmQgOmNvbW1hbmQ6YGZpbGUoVVBMT0FEKWAgY29tbWFuZHMgYW5kIHRoZQogbW9kdWxlIDptb2R1bGU6YEV4dGVybmFsUHJvamVjdGAuIFNlZSB0aG9zZSBjb21tYW5kcyBmb3IgYWRkaXRpb25hbApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9OSU5KQV9PVVRQVVRfUEFUSF9QUkVGSVgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9OSU5KQV9PVVRQVVRfUEFUSF9QUkVGSVgucnN0CmluZGV4IDY0MDkxYWEuLmE4YzQwMzUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTklOSkFfT1VUUFVUX1BBVEhfUFJFRklYLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX05JTkpBX09VVFBVVF9QQVRIX1BSRUZJWC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9OSU5KQV9PVVRQVVRfUEFUSF9QUkVGSVgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogU2V0IG91dHB1dCBmaWxlcyBwYXRoIHByZWZpeCBmb3IgdGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3IuCiAKIEV2ZXJ5IG91dHB1dCBmaWxlcyBsaXN0ZWQgaW4gdGhlIGdlbmVyYXRlZCBgYGJ1aWxkLm5pbmphYGAgd2lsbCBiZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfRVhURU5TSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9FWFRFTlNJT05TLnJzdAppbmRleCA4YWZhNmYyLi5iNTIyNWVhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9FWFRFTlNJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9FWFRFTlNJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX09CSkNYWF9FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgT0JKQ1hYX0VYVEVOU0lPTlNgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YE9CSkNYWF9FWFRFTlNJT05TYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfU1RBTkRBUkQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfU1RBTkRBUkQucnN0CmluZGV4IDRlNTAxNmEuLjk4ZTQ2MjQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ1hYX1NUQU5EQVJELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9TVEFOREFSRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9PQkpDWFhfU1RBTkRBUkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgT0JKQ1hYX1NUQU5EQVJEYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBPQkpDWFhfU1RBTkRBUkRgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKaW5kZXggM2EwNjAyYS4uNGI1ZTc3YyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX09CSkNYWF9TVEFOREFSRF9SRVFVSVJFRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBPQkpDWFhfU1RBTkRBUkRfUkVRVUlSRURgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YE9CSkNYWF9TVEFOREFSRF9SRVFVSVJFRGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19FWFRFTlNJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19FWFRFTlNJT05TLnJzdAppbmRleCBkOTYxOWQ4Li5kNmUzYzdkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfT0JKQ19FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YE9CSkNfRVhURU5TSU9OU2AgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgT0JKQ19FWFRFTlNJT05TYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDX1NUQU5EQVJELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19TVEFOREFSRC5yc3QKaW5kZXggOTc2YzQ0MS4uZmRlMzY3ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDX1NUQU5EQVJELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfU1RBTkRBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfT0JKQ19TVEFOREFSRAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgT0JKQ19TVEFOREFSRGAgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgT0JKQ19TVEFOREFSRGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IDVjMDIwOTYuLjhkMjZkOTUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX09CSkNfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YE9CSkNfU1RBTkRBUkRfUkVRVUlSRURgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YE9CSkNfU1RBTkRBUkRfUkVRVUlSRURgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BDSF9XQVJOX0lOVkFMSUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QQ0hfV0FSTl9JTlZBTElELnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTdhNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9QQ0hfV0FSTl9JTlZBTElELnJzdApAQCAtMCwwICsxLDcgQEAKK0NNQUtFX1BDSF9XQVJOX0lOVkFMSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBQQ0hfV0FSTl9JTlZBTElEYAorcHJvcGVydHkgb2YgdGFyZ2V0cyB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfREVTQ1JJUFRJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0RFU0NSSVBUSU9OLnJzdAppbmRleCA1MWIwNTkyLi45NWNiZTQwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfREVTQ1JJUFRJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9ERVNDUklQVElPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUX0RFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHRvcCBsZXZlbCBwcm9qZWN0LgogCiBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdCBhcyBzcGVjaWZpZWQgaW4gdGhlIHRvcApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0hPTUVQQUdFX1VSTC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSE9NRVBBR0VfVVJMLnJzdAppbmRleCBlZTBiZjdjLi40YzVkZWJlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSE9NRVBBR0VfVVJMLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSE9NRVBBR0VfVVJMLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1BST0pFQ1RfSE9NRVBBR0VfVVJMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSBob21lcGFnZSBVUkwgb2YgdGhlIHRvcCBsZXZlbCBwcm9qZWN0LgogCiBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBob21lcGFnZSBVUkwgb2YgdGhlIHByb2plY3QgYXMgc3BlY2lmaWVkIGluIHRoZSB0b3AKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9JTkNMVURFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9JTkNMVURFLnJzdAppbmRleCA1ODM1MjY0Li40MWQ5ZTVkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfUFJPSkVDVF9JTkNMVURFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBBIENNYWtlIGxhbmd1YWdlIGZpbGUgb3IgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGFzIHRoZSBsYXN0IHN0ZXAgb2YgYWxsCiA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCBjYWxscy4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGluamVjdGluZyBjdXN0b20gY29kZQogaW50byBwcm9qZWN0IGJ1aWxkcyB3aXRob3V0IG1vZGlmeWluZyB0aGVpciBzb3VyY2UuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFLnJzdAppbmRleCAyODBjMTRhLi5jMmZkMGY4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogQSBDTWFrZSBsYW5ndWFnZSBmaWxlIG9yIG1vZHVsZSB0byBiZSBpbmNsdWRlZCBhcyB0aGUgZmlyc3Qgc3RlcCBvZiBhbGwKIDpjb21tYW5kOmBwcm9qZWN0YCBjb21tYW5kIGNhbGxzLiAgVGhpcyBpcyBpbnRlbmRlZCBmb3IgaW5qZWN0aW5nIGN1c3RvbSBjb2RlCiBpbnRvIHByb2plY3QgYnVpbGRzIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZWlyIHNvdXJjZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9QUk9KRUNULU5BTUVfSU5DTFVERV9CRUZPUkUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFX0JFRk9SRS5yc3QKaW5kZXggZGIxNDMyZC4uMzlhYmIxMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFX0JFRk9SRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFX0JFRk9SRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVfQkVGT1JFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogQSBDTWFrZSBsYW5ndWFnZSBmaWxlIG9yIG1vZHVsZSB0byBiZSBpbmNsdWRlZCBhcyB0aGUgZmlyc3Qgc3RlcCBvZiBhbnkKIDpjb21tYW5kOmBwcm9qZWN0YCBjb21tYW5kIGNhbGxzIHRoYXQgc3BlY2lmeSBgYDxQUk9KRUNULU5BTUU+YGAgYXMgdGhlIHByb2plY3QKIG5hbWUuICBUaGlzIGlzIGludGVuZGVkIGZvciBpbmplY3RpbmcgY3VzdG9tIGNvZGUgaW50byBwcm9qZWN0IGJ1aWxkcyB3aXRob3V0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTi5yc3QKaW5kZXggNGY4ZjU1Ni4uNDUwYzEzNiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1BST0pFQ1RfVkVSU0lPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhlIHZlcnNpb24gb2YgdGhlIHRvcCBsZXZlbCBwcm9qZWN0LgogCiBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGFzIHNwZWNpZmllZCBpbiB0aGUgdG9wCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9NQUpPUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9NQUpPUi5yc3QKaW5kZXggZjEwMDFhYy4uYzc1MTFlNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUFKT1IucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX01BSk9SLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1BST0pFQ1RfVkVSU0lPTl9NQUpPUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIHRvcCBsZXZlbCBwcm9qZWN0LgogCiBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGFzIHNwZWNpZmllZCBpbiB0aGUgdG9wCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9NSU5PUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9NSU5PUi5yc3QKaW5kZXggMTMyMDJiZS4uZGQ5MWRjZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUlOT1IucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX01JTk9SLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1BST0pFQ1RfVkVSU0lPTl9NSU5PUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIHRvcCBsZXZlbCBwcm9qZWN0LgogCiBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGFzIHNwZWNpZmllZCBpbiB0aGUgdG9wCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9QQVRDSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9QQVRDSC5yc3QKaW5kZXggYjg1NzBkOS4uNjFmZDFmMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fUEFUQ0gucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX1BBVENILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1BST0pFQ1RfVkVSU0lPTl9QQVRDSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhlIHBhdGNoIHZlcnNpb24gb2YgdGhlIHRvcCBsZXZlbCBwcm9qZWN0LgogCiBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBwYXRjaCB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGFzIHNwZWNpZmllZCBpbiB0aGUgdG9wCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9UV0VBSy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9UV0VBSy5yc3QKaW5kZXggZTFhZDRiZS4uMGRlYWU4YiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fVFdFQUsucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX1RXRUFLLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1BST0pFQ1RfVkVSU0lPTl9UV0VBSwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhlIHR3ZWFrIHZlcnNpb24gb2YgdGhlIHRvcCBsZXZlbCBwcm9qZWN0LgogCiBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSB0d2VhayB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGFzIHNwZWNpZmllZCBpbiB0aGUgdG9wCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1JVTEVfTUVTU0FHRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9SVUxFX01FU1NBR0VTLnJzdAppbmRleCA3NDYwYTgxLi4zOWJlMmU5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1JVTEVfTUVTU0FHRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUlVMRV9NRVNTQUdFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9SVUxFX01FU1NBR0VTCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogU3BlY2lmeSB3aGV0aGVyIHRvIHJlcG9ydCBhIG1lc3NhZ2UgZm9yIGVhY2ggbWFrZSBydWxlLgogCiBJZiBzZXQgaW4gdGhlIGNhY2hlIGl0IGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgdGhlIDpwcm9wX2dibDpgUlVMRV9NRVNTQUdFU2AgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAppbmRleCAwODBkZWE2Li5jOWM1NWM1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfPENPTkZJRz4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogV2hlcmUgdG8gcHV0IGFsbCB0aGUgOnJlZjpgUlVOVElNRSA8UnVudGltZSBPdXRwdXQgQXJ0aWZhY3RzPmAKIHRhcmdldCBmaWxlcyB3aGVuIGJ1aWx0IGZvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CmluZGV4IDE4NWRmMzguLjdmM2RlYzcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfPENPTkZJRz5fSU5JVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBWYWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDp2YXJpYWJsZTpgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU188Q09ORklHPmAKIGNhY2hlIGVudHJ5IHRoZSBmaXJzdCB0aW1lIGEgYnVpbGQgdHJlZSBpcyBjb25maWd1cmVkLgogVGhpcyB2YXJpYWJsZSBpcyBtZWFudCB0byBiZSBzZXQgYnkgYSA6dmFyaWFibGU6YHRvb2xjaGFpbiBmaWxlCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfSU5JVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfSU5JVC5yc3QKaW5kZXggY2I4MTlhNy4uNmQ1MWFmZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfSU5JVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBWYWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDp2YXJpYWJsZTpgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU2AKIGNhY2hlIGVudHJ5IHRoZSBmaXJzdCB0aW1lIGEgYnVpbGQgdHJlZSBpcyBjb25maWd1cmVkLgogVGhpcyB2YXJpYWJsZSBpcyBtZWFudCB0byBiZSBzZXQgYnkgYSA6dmFyaWFibGU6YHRvb2xjaGFpbiBmaWxlCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdAppbmRleCBhNDlkMWNiLi41ZTY1ZWYyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTXzxDT05GSUc+X0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NfPENPTkZJRz5gCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTX0lOSVQucnN0CmluZGV4IDExM2NhNzEuLmNiZjY4MWMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NgCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TVUJMSU1FX1RFWFRfMl9FTlZfU0VUVElOR1MucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVUJMSU1FX1RFWFRfMl9FTlZfU0VUVElOR1MucnN0CmluZGV4IDAyYzg2NjMuLjVjMWM4ZDEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VCTElNRV9URVhUXzJfRU5WX1NFVFRJTkdTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NVQkxJTUVfVEVYVF8yX0VOVl9TRVRUSU5HUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TVUJMSU1FX1RFWFRfMl9FTlZfU0VUVElOR1MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogVGhpcyB2YXJpYWJsZSBjb250YWlucyBhIGxpc3Qgb2YgZW52IHZhcnMgYXMgYSBsaXN0IG9mIHRva2VucyB3aXRoIHRoZQogc3ludGF4IGBgdmFyPXZhbHVlYGAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VCTElNRV9URVhUXzJfRVhDTFVERV9CVUlMRF9UUkVFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VCTElNRV9URVhUXzJfRVhDTFVERV9CVUlMRF9UUkVFLnJzdAppbmRleCBkNjU0NDI1Li4yOGIwZGJkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NVQkxJTUVfVEVYVF8yX0VYQ0xVREVfQlVJTERfVFJFRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVUJMSU1FX1RFWFRfMl9FWENMVURFX0JVSUxEX1RSRUUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1VCTElNRV9URVhUXzJfRVhDTFVERV9CVUlMRF9UUkVFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIElmIHRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIGBgT05gYCBhdCB0aGUgZW5kIG9mIHRoZSB0b3AtbGV2ZWwKIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlLCB0aGUgOmdlbmVyYXRvcjpgU3VibGltZSBUZXh0IDJgIGV4dHJhIGdlbmVyYXRvcgogZXhjbHVkZXMgdGhlIGJ1aWxkIHRyZWUgZnJvbSB0aGUgYGAuc3VibGltZS1wcm9qZWN0YGAgaWYgaXQgaXMgaW5zaWRlIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TVVBQUkVTU19SRUdFTkVSQVRJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVVBQUkVTU19SRUdFTkVSQVRJT04ucnN0CmluZGV4IDk2MTg0ZGQuLjQ4NDkwZmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NVUFBSRVNTX1JFR0VORVJBVElPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TVVBQUkVTU19SRUdFTkVSQVRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIElmIGBgQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OYGAgaXMgYGBPRkZgYCwgd2hpY2ggaXMgZGVmYXVsdCwgdGhlbiBDTWFrZQogYWRkcyBhIHNwZWNpYWwgdGFyZ2V0IG9uIHdoaWNoIGFsbCBvdGhlciB0YXJnZXRzIGRlcGVuZCB0aGF0IGNoZWNrcyB0aGUgYnVpbGQKIHN5c3RlbSBhbmQgb3B0aW9uYWxseSByZS1ydW5zIENNYWtlIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSB3aGVuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1JPT1RfQ09NUElMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1JPT1RfQ09NUElMRS5yc3QKaW5kZXggZTk2YzYyYi4uNGFlYTQ4ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNST09UX0NPTVBJTEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTUk9PVF9DT01QSUxFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1NZU1JPT1RfQ09NUElMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBQYXRoIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyIGluIHRoZSBgYC0tc3lzcm9vdGBgIGZsYWcgd2hlbiBjb21waWxpbmcgc291cmNlCiBmaWxlcy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgOnZhcmlhYmxlOmBDTUFLRV9TWVNST09UYCBidXQgaXMgdXNlZCBvbmx5IGZvcgogY29tcGlsaW5nIHNvdXJjZXMgYW5kIG5vdCBsaW5raW5nLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNST09UX0xJTksucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNST09UX0xJTksucnN0CmluZGV4IDg4YjQ4ZWYuLjk3NDliN2IgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTUk9PVF9MSU5LLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1JPT1RfTElOSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TWVNST09UX0xJTksKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogUGF0aCB0byBwYXNzIHRvIHRoZSBjb21waWxlciBpbiB0aGUgYGAtLXN5c3Jvb3RgYCBmbGFnIHdoZW4gbGlua2luZy4gIFRoaXMgaXMKIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ01BS0VfU1lTUk9PVGAgYnV0IGlzIHVzZWQgb25seSBmb3IgbGlua2luZyBhbmQgbm90CiBjb21waWxpbmcgc291cmNlcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX0FQUEJVTkRMRV9QQVRILnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX0FQUEJVTkRMRV9QQVRILnJzdAppbmRleCA2NjZhZjQ2Li4wNmE5OWE4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9BUFBCVU5ETEVfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fQVBQQlVORExFX1BBVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1lTVEVNX0FQUEJVTkRMRV9QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNlYXJjaCBwYXRoIGZvciBtYWNPUyBhcHBsaWNhdGlvbiBidW5kbGVzIHVzZWQgYnkgdGhlIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gLAogYW5kIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmRzLiAgQnkgZGVmYXVsdCBpdCBjb250YWlucyB0aGUgc3RhbmRhcmQKIGRpcmVjdG9yaWVzIGZvciB0aGUgY3VycmVudCBzeXN0ZW0uICBJdCBpcyAqbm90KiBpbnRlbmRlZCB0byBiZSBtb2RpZmllZCBieQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEgucnN0CmluZGV4IDE0YmExOGUuLjFhNDAyYzEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2VhcmNoIHBhdGggZm9yIG1hY09TIGZyYW1ld29ya3MgdXNlZCBieSB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAsCiA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCwgOmNvbW1hbmQ6YGZpbmRfcGF0aGAsIGFuZCA6Y29tbWFuZDpgZmluZF9maWxlYAogY29tbWFuZHMuICBCeSBkZWZhdWx0IGl0IGNvbnRhaW5zIHRoZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBmb3IgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSC5yc3QKaW5kZXggODdhOWQwNi4uODFhN2EwYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fUFJFRklYX1BBVEgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRILnJzdApAQCAtOCwxMSArOCw0MyBAQAogc3ViZGlyZWN0b3JpZXMgKGxpa2UgYGBiaW5gYCwgYGBsaWJgYCwgb3IgYGBpbmNsdWRlYGApIGFzIHNwZWNpZmllZCBpbiBpdHMgb3duCiBkb2N1bWVudGF0aW9uLgogCi1CeSBkZWZhdWx0IHRoaXMgY29udGFpbnMgdGhlIHN0YW5kYXJkIGRpcmVjdG9yaWVzIGZvciB0aGUgY3VycmVudCBzeXN0ZW0sIHRoZQorQnkgZGVmYXVsdCB0aGlzIGNvbnRhaW5zIHRoZSBzeXN0ZW0gZGlyZWN0b3JpZXMgZm9yIHRoZSBjdXJyZW50IHN5c3RlbSwgdGhlCiA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCwgYW5kIHRoZSA6dmFyaWFibGU6YENNQUtFX1NUQUdJTkdfUFJFRklYYC4KIFRoZSBpbnN0YWxsYXRpb24gYW5kIHN0YWdpbmcgcHJlZml4ZXMgbWF5IGJlIGV4Y2x1ZGVkIGJ5IHNldHRpbmcKIHRoZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfTk9fSU5TVEFMTF9QUkVGSVhgIHZhcmlhYmxlLgogCitUaGUgc3lzdGVtIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiBgYENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSGBgIGFyZQorbG9jYXRpb25zIHRoYXQgdHlwaWNhbGx5IGluY2x1ZGUgaW5zdGFsbGVkIHNvZnR3YXJlLiBBbiBleGFtcGxlIGJlaW5nCitgYC91c3IvbG9jYWxgYCBmb3IgVU5JWCBiYXNlZCBwbGF0Zm9ybXMuIEluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIHBsYXRmb3JtCitsb2NhdGlvbnMsIENNYWtlIHdpbGwgYWxzbyBhZGQgdmFsdWVzIHRvIGBgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIYGAgYmFzZWQgb24KK2Vudmlyb25tZW50IHZhcmlhYmxlcy4gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgc2VhcmNoIGxvY2F0aW9ucyB0aGF0CitDTWFrZSB1c2VzIG1heSBldm9sdmUgb3ZlciB0aW1lLCBhcyBwbGF0Zm9ybXMgYW5kIHRoZWlyIGNvbnZlbnRpb25zIGFsc28KK2V2b2x2ZS4gVGhlIGZvbGxvd2luZyBwcm92aWRlcyBhbiBpbmRpY2F0aXZlIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzCithbmQgbG9jYXRpb25zIHRoYXQgQ01ha2Ugc2VhcmNoZXMsIGJ1dCB0aGV5IGFyZSBzdWJqZWN0IHRvIGNoYW5nZToKKworCitDcmF5TGludXhFbnZpcm9ubWVudDoKKyAgKiBgYEVOVntTWVNST09UX0RJUn0vYGAKKyAgKiBgYEVOVntTWVNST09UX0RJUn0vdXNyYGAKKyAgKiBgYEVOVntTWVNST09UX0RJUn0vdXNyL2xvY2FsYGAKKworRGFyd2luOgorICAqIGBgRU5We1NES1JPT1R9L3VzcmBgIFdoZW4gYGBDTUFLRV9PU1hfU1lTUk9PVGBgIGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZC4KKworT3BlbkJTRDoKKyAgKiBgYEVOVntMT0NBTEJBU0V9YGAKKworVW5peDoKKyAgKiBgYEVOVntDT05EQV9QUkVGSVh9YGAgd2hlbiB1c2luZyBhIGNvbmRhIGNvbXBpbGVyCisKK1dpbmRvd3M6CisgICogYGBFTlZ7UHJvZ3JhbVc2NDMyfWBgCisgICogYGBFTlZ7UHJvZ3JhbUZpbGVzfWBgCisgICogYGBFTlZ7UHJvZ3JhbUZpbGVzKHg4Nil9YGAKKyAgKiBgYEVOVntTeXN0ZW1Ecml2ZX0vUHJvZ3JhbSBGaWxlc2BgCisgICogYGBFTlZ7U3lzdGVtRHJpdmV9L1Byb2dyYW0gRmlsZXMgKHg4NilgYAorCisKIGBgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIYGAgaXMgKm5vdCogaW50ZW5kZWQgdG8gYmUgbW9kaWZpZWQgYnkgdGhlIHByb2plY3Q7CiB1c2UgOnZhcmlhYmxlOmBDTUFLRV9QUkVGSVhfUEFUSGAgZm9yIHRoaXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTEFOR1VBR0VfVkVSU0lPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04ucnN0CmluZGV4IGI0YTc0ZWIuLmZjZTZmYTcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTEFOR1VBR0VfVkVSU0lPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFNldCB0byB0aGUgU3dpZnQgbGFuZ3VhZ2UgdmVyc2lvbiBudW1iZXIuICBJZiBub3Qgc2V0LCB0aGUgb2xkZXN0IGxlZ2FjeQogdmVyc2lvbiBrbm93biB0byBiZSBhdmFpbGFibGUgaW4gdGhlIGhvc3QgWGNvZGUgdmVyc2lvbiBpcyBhc3N1bWVkOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X01PRFVMRV9ESVJFQ1RPUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9Td2lmdF9NT0RVTEVfRElSRUNUT1JZLnJzdAppbmRleCBiMTEyNTNiLi4zNjk0OTczIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X01PRFVMRV9ESVJFQ1RPUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTU9EVUxFX0RJUkVDVE9SWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9Td2lmdF9NT0RVTEVfRElSRUNUT1JZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogU3dpZnQgbW9kdWxlIG91dHB1dCBkaXJlY3RvcnkuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXNlIHRoZSA6cHJvcF90Z3Q6YFN3aWZ0X01PRFVMRV9ESVJFQ1RPUllgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X05VTV9USFJFQURTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTlVNX1RIUkVBRFMucnN0CmluZGV4IGNiMzM2NzguLmUxZGFmYjAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTlVNX1RIUkVBRFMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTlVNX1RIUkVBRFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU3dpZnRfTlVNX1RIUkVBRFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUuMQorCiBOdW1iZXIgb2YgdGhyZWFkcyBmb3IgcGFyYWxsZWwgY29tcGlsYXRpb24gZm9yIFN3aWZ0IHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgY29udHJvbHMgdGhlIG51bWJlciBvZiBwYXJhbGxlbCBqb2JzIHRoYXQgdGhlIHN3aWZ0IGRyaXZlciBjcmVhdGVzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1RSWV9DT01QSUxFX1BMQVRGT1JNX1ZBUklBQkxFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1RSWV9DT01QSUxFX1BMQVRGT1JNX1ZBUklBQkxFUy5yc3QKaW5kZXggMGY5Njc4Ny4uZDE3ODUxMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9UUllfQ09NUElMRV9QTEFURk9STV9WQVJJQUJMRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVFJZX0NPTVBJTEVfUExBVEZPUk1fVkFSSUFCTEVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1RSWV9DT01QSUxFX1BMQVRGT1JNX1ZBUklBQkxFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBMaXN0IG9mIHZhcmlhYmxlcyB0aGF0IHRoZSA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIGNvbW1hbmQgc291cmNlIGZpbGUgc2lnbmF0dXJlCiBtdXN0IHByb3BhZ2F0ZSBpbnRvIHRoZSB0ZXN0IHByb2plY3QgaW4gb3JkZXIgdG8gdGFyZ2V0IHRoZSBzYW1lIHBsYXRmb3JtIGFzCiB0aGUgaG9zdCBwcm9qZWN0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFLnJzdAppbmRleCA1ZmE4ZGZjLi5iNjA1MzlmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogVHlwZSBvZiB0YXJnZXQgZ2VuZXJhdGVkIGZvciA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIGNhbGxzIHVzaW5nIHRoZQogc291cmNlIGZpbGUgc2lnbmF0dXJlLiAgVmFsaWQgdmFsdWVzIGFyZToKIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9VTklUWV9CVUlMRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1VOSVRZX0JVSUxELnJzdAppbmRleCBhODZjZDY3Li41NGE3ODFhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1VOSVRZX0JVSUxELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1VOSVRZX0JVSUxELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1VOSVRZX0JVSUxECiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEYAogcHJvcGVydHkgb2YgdGFyZ2V0cyB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQuICBTZXR0aW5nIGl0IHRvIHRydWUKIGVuYWJsZXMgYmF0Y2ggY29tcGlsYXRpb24gb2YgbXVsdGlwbGUgc291cmNlcyB3aXRoaW4gZWFjaCB0YXJnZXQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1VOSVRZX0JVSUxEX0JBVENIX1NJWkUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9VTklUWV9CVUlMRF9CQVRDSF9TSVpFLnJzdAppbmRleCA3OTg4ZDRiLi43NzMzZmU4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1VOSVRZX0JVSUxEX0JBVENIX1NJWkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVU5JVFlfQlVJTERfQkFUQ0hfU0laRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9VTklUWV9CVUlMRF9CQVRDSF9TSVpFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERfQkFUQ0hfU0laRWAKIHByb3BlcnR5IG9mIHRhcmdldHMgd2hlbiB0aGV5IGFyZSBjcmVhdGVkLiAgSXQgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IHVwcGVyCiBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNvdXJjZSBmaWxlcyB0aGF0IG1heSBiZSBjb21iaW5lZCBpbiBhbnkgb25lIHVuaXR5CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0dMT0JBTFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19HTE9CQUxTLnJzdAppbmRleCA4Mzc3N2I2Li5kNDUxNGZlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0dMT0JBTFMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfR0xPQkFMUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19HTE9CQUxTCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogTGlzdCBvZiBgYEtleT1WYWx1ZWBgIHJlY29yZHMgdG8gYmUgc2V0IHBlciB0YXJnZXQgYXMgdGFyZ2V0IHByb3BlcnRpZXMKIDpwcm9wX3RndDpgVlNfR0xPQkFMXzx2YXJpYWJsZT5gIHdpdGggYGB2YXJpYWJsZT1LZXlgYCBhbmQgdmFsdWUgYGBWYWx1ZWBgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0lOQ0xVREVfSU5TVEFMTF9UT19ERUZBVUxUX0JVSUxELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfSU5DTFVERV9JTlNUQUxMX1RPX0RFRkFVTFRfQlVJTEQucnN0CmluZGV4IGY1NDQ3MmEuLmFjZTk0ZTQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfSU5DTFVERV9JTlNUQUxMX1RPX0RFRkFVTFRfQlVJTEQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfSU5DTFVERV9JTlNUQUxMX1RPX0RFRkFVTFRfQlVJTEQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfVlNfSU5DTFVERV9JTlNUQUxMX1RPX0RFRkFVTFRfQlVJTEQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBJbmNsdWRlIGBgSU5TVEFMTGBgIHRhcmdldCB0byBkZWZhdWx0IGJ1aWxkLgogCiBJbiBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uLCBieSBkZWZhdWx0IHRoZSBgYElOU1RBTExgYCB0YXJnZXQgd2lsbCBub3QgYmUgcGFydApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19JTkNMVURFX1BBQ0tBR0VfVE9fREVGQVVMVF9CVUlMRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0lOQ0xVREVfUEFDS0FHRV9UT19ERUZBVUxUX0JVSUxELnJzdAppbmRleCA2OTNiYTQ1Li5hYjRkMGZhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0lOQ0xVREVfUEFDS0FHRV9UT19ERUZBVUxUX0JVSUxELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0lOQ0xVREVfUEFDS0FHRV9UT19ERUZBVUxUX0JVSUxELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX0lOQ0xVREVfUEFDS0FHRV9UT19ERUZBVUxUX0JVSUxECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogSW5jbHVkZSBgYFBBQ0tBR0VgYCB0YXJnZXQgdG8gZGVmYXVsdCBidWlsZC4KIAogSW4gVmlzdWFsIFN0dWRpbyBzb2x1dGlvbiwgYnkgZGVmYXVsdCB0aGUgYGBQQUNLQUdFYGAgdGFyZ2V0IHdpbGwgbm90IGJlIHBhcnQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfSlVTVF9NWV9DT0RFX0RFQlVHR0lORy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcucnN0CmluZGV4IDU0NmNkZjQuLjBhMDJhMzIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfSlVTVF9NWV9DT0RFX0RFQlVHR0lORy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19KVVNUX01ZX0NPREVfREVCVUdHSU5HLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBFbmFibGUgSnVzdCBNeSBDb2RlIHdpdGggVmlzdWFsIFN0dWRpbyBkZWJ1Z2dlci4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgVlNfSlVTVF9NWV9DT0RFX0RFQlVHR0lOR2AKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfTnNpZ2h0VGVncmFfVkVSU0lPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX05zaWdodFRlZ3JhX1ZFUlNJT04ucnN0CmluZGV4IDM4NmMzYTkuLjI5ODJiMzkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfTnNpZ2h0VGVncmFfVkVSU0lPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19Oc2lnaHRUZWdyYV9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX05zaWdodFRlZ3JhX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFdoZW4gdXNpbmcgYSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvciB3aXRoIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9TWVNURU1fTkFNRWAgdmFyaWFibGUgc2V0IHRvIGBgQW5kcm9pZGBgLAogdGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX05BTUUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9OQU1FLnJzdAppbmRleCA3YTQ2NDJhLi43ZDA4YWRkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX05BTUUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fTkFNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19QTEFURk9STV9OQU1FCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBWaXN1YWwgU3R1ZGlvIHRhcmdldCBwbGF0Zm9ybSBuYW1lIHVzZWQgYnkgdGhlIGN1cnJlbnQgZ2VuZXJhdG9yLgogCiBWUyA4IGFuZCBhYm92ZSBhbGxvdyBwcm9qZWN0IGZpbGVzIHRvIHNwZWNpZnkgYSB0YXJnZXQgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX05BTUVfREVGQVVMVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX05BTUVfREVGQVVMVC5yc3QKaW5kZXggYzE4ZTZmZC4uNjQ0MDE3NCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9OQU1FX0RFRkFVTFQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fTkFNRV9ERUZBVUxULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX1BMQVRGT1JNX05BTUVfREVGQVVMVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQuMworCiBEZWZhdWx0IGZvciB0aGUgVmlzdWFsIFN0dWRpbyB0YXJnZXQgcGxhdGZvcm0gbmFtZSBmb3IgdGhlIGN1cnJlbnQgZ2VuZXJhdG9yCiB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSB2YWx1ZSBvZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk1gCiB2YXJpYWJsZS4gIEZvciA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDE3IGFuZCBiZWxvdyB0aGlzIGlzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfQ1VEQS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfQ1VEQS5yc3QKaW5kZXggNjdiN2Y3NC4uZTY2Mzc4ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREEucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfQ1VEQQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBOVklESUEgQ1VEQSBUb29sa2l0IHZlcnNpb24gd2hvc2UgVmlzdWFsIFN0dWRpbyB0b29sc2V0IHRvIHVzZS4KIAogVGhlIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIHN1cHBvcnQgdXNpbmcKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREFfQ1VTVE9NX0RJUi5yc3QKaW5kZXggMDYwNjQ4YS4uNzRkYjZiMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREFfQ1VTVE9NX0RJUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREFfQ1VTVE9NX0RJUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREFfQ1VTVE9NX0RJUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBQYXRoIHRvIHN0YW5kYWxvbmUgTlZJRElBIENVREEgVG9vbGtpdCAoZWcuIGV4dHJhY3RlZCBmcm9tIGluc3RhbGxlcikuCiAKIFRoZSA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSBzdXBwb3J0IHVzaW5nCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfSE9TVF9BUkNISVRFQ1RVUkUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0hPU1RfQVJDSElURUNUVVJFLnJzdAppbmRleCA5OWFjOTBkLi44NGQ3MjEyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfSE9TVF9BUkNISVRFQ1RVUkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9IT1NUX0FSQ0hJVEVDVFVSRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0hPU1RfQVJDSElURUNUVVJFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBWaXN1YWwgU3R1ZGlvIHByZWZlcnJlZCB0b29sIGFyY2hpdGVjdHVyZS4KIAogVGhlIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTMgYW5kIGFib3ZlIHN1cHBvcnQgdXNpbmcKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WRVJTSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WRVJTSU9OLnJzdAppbmRleCA0ZDliOTc4Li42NGYyZTM5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkVSU0lPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX1ZFUlNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBWaXN1YWwgU3R1ZGlvIFBsYXRmb3JtIFRvb2xzZXQgdmVyc2lvbi4KIAogVGhlIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTcgYW5kIGFib3ZlIGFsbG93IHRvCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWENMVURFX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0VYQ0xVREVfRElSRUNUT1JJRVMucnN0CmluZGV4IDM2YzRkY2MuLjk2OWYzMjggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0VYQ0xVREVfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0VYQ0xVREVfRElSRUNUT1JJRVMucnN0CkBAIC0xLDQgKzEsNiBAQAogQ01BS0VfVlNfU0RLX0VYQ0xVREVfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhpcyB2YXJpYWJsZSBhbGxvd3MgdG8gb3ZlcnJpZGUgVmlzdWFsIFN0dWRpbyBkZWZhdWx0IEV4Y2x1ZGUgRGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWEVDVVRBQkxFX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0VYRUNVVEFCTEVfRElSRUNUT1JJRVMucnN0CmluZGV4IDNlYzc1NWIuLjc0NTVlMTAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0VYRUNVVEFCTEVfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0VYRUNVVEFCTEVfRElSRUNUT1JJRVMucnN0CkBAIC0xLDQgKzEsNiBAQAogQ01BS0VfVlNfU0RLX0VYRUNVVEFCTEVfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhpcyB2YXJpYWJsZSBhbGxvd3MgdG8gb3ZlcnJpZGUgVmlzdWFsIFN0dWRpbyBkZWZhdWx0IEV4ZWN1dGFibGUgRGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19JTkNMVURFX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0lOQ0xVREVfRElSRUNUT1JJRVMucnN0CmluZGV4IGRhMTBiZGUuLjNmMjdhZWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0lOQ0xVREVfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0lOQ0xVREVfRElSRUNUT1JJRVMucnN0CkBAIC0xLDQgKzEsNiBAQAogQ01BS0VfVlNfU0RLX0lOQ0xVREVfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhpcyB2YXJpYWJsZSBhbGxvd3MgdG8gb3ZlcnJpZGUgVmlzdWFsIFN0dWRpbyBkZWZhdWx0IEluY2x1ZGUgRGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0xJQlJBUllfRElSRUNUT1JJRVMucnN0CmluZGV4IGIzMzc1NGEuLjM1ZTQ1YTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0xJQlJBUllfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0xJQlJBUllfRElSRUNUT1JJRVMucnN0CkBAIC0xLDQgKzEsNiBAQAogQ01BS0VfVlNfU0RLX0xJQlJBUllfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhpcyB2YXJpYWJsZSBhbGxvd3MgdG8gb3ZlcnJpZGUgVmlzdWFsIFN0dWRpbyBkZWZhdWx0IExpYnJhcnkgRGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX1dJTlJUX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0xJQlJBUllfV0lOUlRfRElSRUNUT1JJRVMucnN0CmluZGV4IGIwMjIyMTUuLjI0YjkwYjYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0xJQlJBUllfV0lOUlRfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX0xJQlJBUllfV0lOUlRfRElSRUNUT1JJRVMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfVlNfU0RLX0xJQlJBUllfV0lOUlRfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhpcyB2YXJpYWJsZSBhbGxvd3MgdG8gb3ZlcnJpZGUgVmlzdWFsIFN0dWRpbyBkZWZhdWx0IExpYnJhcnkgV2luUlQKIERpcmVjdG9yaWVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfUkVGRVJFTkNFX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX1JFRkVSRU5DRV9ESVJFQ1RPUklFUy5yc3QKaW5kZXggYzAzZjBhZS4uMDAzODJmZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfUkVGRVJFTkNFX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19SRUZFUkVOQ0VfRElSRUNUT1JJRVMucnN0CkBAIC0xLDQgKzEsNiBAQAogQ01BS0VfVlNfU0RLX1JFRkVSRU5DRV9ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRvIG92ZXJyaWRlIFZpc3VhbCBTdHVkaW8gZGVmYXVsdCBSZWZlcmVuY2UgRGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19TT1VSQ0VfRElSRUNUT1JJRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfU09VUkNFX0RJUkVDVE9SSUVTLnJzdAppbmRleCAwYzczZjA2Li5iOThjOTk5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19TT1VSQ0VfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX1NPVVJDRV9ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNCArMSw2IEBACiBDTUFLRV9WU19TREtfU09VUkNFX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhpcyB2YXJpYWJsZSBhbGxvd3MgdG8gb3ZlcnJpZGUgVmlzdWFsIFN0dWRpbyBkZWZhdWx0IFNvdXJjZSBEaXJlY3Rvcmllcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fVkVSU0lPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04ucnN0CmluZGV4IDgzYjliYzEuLmNiNTViYzIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fVkVSU0lPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFZpc3VhbCBTdHVkaW8gV2luZG93cyBUYXJnZXQgUGxhdGZvcm0gVmVyc2lvbi4KIAogV2hlbiB0YXJnZXRpbmcgV2luZG93cyAxMCBhbmQgYWJvdmUgVmlzdWFsIFN0dWRpbyAyMDE1IGFuZCBhYm92ZSBzdXBwb3J0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxULnJzdAppbmRleCAyZWVhNDI0Li45ZGVkODVmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfV0lOUlRfQllfREVGQVVMVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogSW5mb3JtIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIHRoYXQgdGhlCiB0YXJnZXQgcGxhdGZvcm0gZW5hYmxlcyBXaW5SVCBjb21waWxhdGlvbiBieSBkZWZhdWx0IGFuZCBpdCBuZWVkcyB0bwogYmUgZXhwbGljaXRseSBkaXNhYmxlZCBpZiBgYC9aV2BgIG9yIDpwcm9wX3RndDpgVlNfV0lOUlRfQ09NUE9ORU5UYCBpcwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1dJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdAppbmRleCAxNjM2ODQyLi43YjAxMTg1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1dJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1dJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1dJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBXSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MU2AgdGFyZ2V0IHByb3BlcnR5LgogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzIGl0IGlzCiBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9BVFRSSUJVVEVfYW4tYXR0cmlidXRlLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfQVRUUklCVVRFX2FuLWF0dHJpYnV0ZS5yc3QKaW5kZXggYmU2ODNkNi4uOTBlNGMwZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9BVFRSSUJVVEVfYW4tYXR0cmlidXRlLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0FUVFJJQlVURV9hbi1hdHRyaWJ1dGUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfQVRUUklCVVRFXzxhbi1hdHRyaWJ1dGU+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNldCBYY29kZSB0YXJnZXQgYXR0cmlidXRlcyBkaXJlY3RseS4KIAogVGVsbCB0aGUgOmdlbmVyYXRvcjpgWGNvZGVgIGdlbmVyYXRvciB0byBzZXQgJzxhbi1hdHRyaWJ1dGU+JyB0byBhIGdpdmVuIHZhbHVlCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QKaW5kZXggNWIxYTAwMy4uNDAwNzBlMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9HRU5FUkFURV9TQ0hFTUUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfR0VORVJBVEVfU0NIRU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX0dFTkVSQVRFX1NDSEVNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBJZiBlbmFibGVkLCB0aGUgOmdlbmVyYXRvcjpgWGNvZGVgIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIHNjaGVtYSBmaWxlcy4gIFRoZXNlCiBhcmUgdXNlZnVsIHRvIGludm9rZSBhbmFseXplLCBhcmNoaXZlLCBidWlsZC1mb3ItdGVzdGluZyBhbmQgdGVzdAogYWN0aW9ucyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0dFTkVSQVRFX1RPUF9MRVZFTF9QUk9KRUNUX09OTFkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9HRU5FUkFURV9UT1BfTEVWRUxfUFJPSkVDVF9PTkxZLnJzdAppbmRleCBlYTNlMjQwLi4zOGQwNDNjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0dFTkVSQVRFX1RPUF9MRVZFTF9QUk9KRUNUX09OTFkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfR0VORVJBVEVfVE9QX0xFVkVMX1BST0pFQ1RfT05MWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9HRU5FUkFURV9UT1BfTEVWRUxfUFJPSkVDVF9PTkxZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogSWYgZW5hYmxlZCwgdGhlIDpnZW5lcmF0b3I6YFhjb2RlYCBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBvbmx5IGEKIHNpbmdsZSBYY29kZSBwcm9qZWN0IGZpbGUgZm9yIHRoZSB0b3Btb3N0IDpjb21tYW5kOmBwcm9qZWN0KClgIGNvbW1hbmQKIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBvbmUgZm9yIGV2ZXJ5IGBgcHJvamVjdCgpYGAgY29tbWFuZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSLnJzdAppbmRleCBiOTcyYmE1Li5iM2ZhOTNiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfQUREUkVTU19TQU5JVElaRVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYEFkZHJlc3MgU2FuaXRpemVyYGAgaW4gdGhlIERpYWdub3N0aWNzCiBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4ucnN0CmluZGV4IDU5ZWIzMmQuLjFhMGExN2EgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBEZXRlY3QgdXNlIG9mIHN0YWNrIGFmdGVyIHJldHVybmBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfREVCVUdfRE9DVU1FTlRfVkVSU0lPTklORy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HLnJzdAppbmRleCBhMjY0ZDM2Li45MTdmYzdmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFdoZXRoZXIgdG8gZW5hYmxlCiBgYEFsbG93IGRlYnVnZ2luZyB3aGVuIHVzaW5nIGRvY3VtZW50IFZlcnNpb25zIEJyb3dzZXJgYAogaW4gdGhlIE9wdGlvbnMgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9ESVNBQkxFX01BSU5fVEhSRUFEX0NIRUNLRVIucnN0CmluZGV4IDcxYmNmNDIuLmI2MDQ1OTggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9ESVNBQkxFX01BSU5fVEhSRUFEX0NIRUNLRVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGBgTWFpbiBUaHJlYWQgQ2hlY2tlcmBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUy5yc3QKaW5kZXggNTNmNTVlNi4uMDcwZGRmYyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgRHluYW1pYyBMaWJyYXJ5IExvYWRzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFLnJzdAppbmRleCA3ODRjZWI2Li40MjkxODE2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RZTkFNSUNfTElOS0VSX0FQSV9VU0FHRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBEeW5hbWljIExpbmtlciBBUEkgdXNhZ2VgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5ULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5ULnJzdAppbmRleCA0ODMyNjU5Li42MmI2OThkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5UCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCiBTcGVjaWZ5IGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgQXJndW1lbnRzCiBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9HVUFSRF9NQUxMT0MucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfR1VBUkRfTUFMTE9DLnJzdAppbmRleCA5MzUwMjQ0Li40OGI0ODFlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9HVUFSRF9NQUxMT0MucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0dVQVJEX01BTExPQy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfR1VBUkRfTUFMTE9DCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBHdWFyZCBNYWxsb2NgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AucnN0CmluZGV4IDQ1YTJkYWQuLmVmOGVkOWIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgYGBNYWluIFRocmVhZCBDaGVja2VyYGAgb3B0aW9uCiBgYFBhdXNlIG9uIGlzc3Vlc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfR1VBUkRfRURHRVMucnN0CmluZGV4IDk0ZDFjNjEuLmQ0YWU5ZWIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfR1VBUkRfRURHRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYE1hbGxvYyBHdWFyZCBFZGdlc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19TQ1JJQkJMRS5yc3QKaW5kZXggOWJmMGViNC4uZTI4ZjZhMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfU0NSSUJCTEUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19TQ1JJQkJMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgTWFsbG9jIFNjcmliYmxlYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0sucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NUQUNLLnJzdAppbmRleCA0Y2MyMWVlLi41OWZjZmQzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0sucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19TVEFDSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NUQUNLCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBNYWxsb2MgU3RhY2tgYCBpbiB0aGUgRGlhZ25vc3RpY3MKIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUi5yc3QKaW5kZXggNmQxYjU2ZS4uNTExZWIwNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYFRocmVhZCBTYW5pdGl6ZXJgYCBpbiB0aGUgRGlhZ25vc3RpY3MKIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSX1NUT1AucnN0CmluZGV4IGRlNDA0NzguLjZmM2I4Y2UgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSX1NUT1AKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYFRocmVhZCBTYW5pdGl6ZXIgLSBQYXVzZSBvbiBpc3N1ZXNgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSLnJzdAppbmRleCBlYzVkZjY2Li40NmQzY2NmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXJgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVJfU1RPUC5yc3QKaW5kZXggZGNlYzliMC4uOGZhNWVjZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVJfU1RPUC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVJfU1RPUC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVJfU1RPUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXJgYCBvcHRpb24KIGBgUGF1c2Ugb24gaXNzdWVzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkucnN0CmluZGV4IDViYjc5MDcuLjQyMjFlNDggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKIFNwZWNpZnkgdGhlIGBgV29ya2luZyBEaXJlY3RvcnlgYCBvZiB0aGUgKlJ1biogYW5kICpQcm9maWxlKgogYWN0aW9ucyBpbiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMucnN0CmluZGV4IDgyZTlkNzYuLmZkOTQ4OGUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1pPTUJJRV9PQkpFQ1RTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgWm9tYmllIE9iamVjdHNgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1BBQ0tfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NQQUNLX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMucnN0CmluZGV4IDgzZDVjZTcuLjAxZmIxODkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1BBQ0tfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DUEFDS19JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENQQUNLX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBEZWZhdWx0IHBlcm1pc3Npb25zIGZvciBpbXBsaWNpdGx5IGNyZWF0ZWQgZGlyZWN0b3JpZXMgZHVyaW5nIHBhY2thZ2luZy4KIAogVGhpcyB2YXJpYWJsZSBzZXJ2ZXMgdGhlIHNhbWUgcHVycG9zZSBkdXJpbmcgcGFja2FnaW5nIGFzIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9CSU5BUllfRElSRUNUT1JZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQklOQVJZX0RJUkVDVE9SWS5yc3QKaW5kZXggZmQ4NDYxZi4uODQxM2UzNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9CSU5BUllfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0JJTkFSWV9ESVJFQ1RPUlkucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQklOQVJZX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBCdWlsZERpcmVjdG9yeWBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9CVUlMRF9DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQlVJTERfQ09NTUFORC5yc3QKaW5kZXggN2IxM2JhMC4uMzFjNDRlMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9CVUlMRF9DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0JVSUxEX0NPTU1BTkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQlVJTERfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBNYWtlQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9CVUlMRF9OQU1FLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQlVJTERfTkFNRS5yc3QKaW5kZXggZDI1ZDg0Yy4uM2QwODM5NyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9CVUlMRF9OQU1FLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0JVSUxEX05BTUUucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQlVJTERfTkFNRQogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBCdWlsZE5hbWVgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQlpSX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9CWlJfQ09NTUFORC5yc3QKaW5kZXggNDc0ZDYyMS4uMGMwNWQxYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9CWlJfQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9CWlJfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9CWlJfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgQlpSQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9CWlJfVVBEQVRFX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9CWlJfVVBEQVRFX09QVElPTlMucnN0CmluZGV4IGQwZjk1NzkuLjRkZDVlNWIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQlpSX1VQREFURV9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0JaUl9VUERBVEVfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9CWlJfVVBEQVRFX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBCWlJVcGRhdGVPcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NIQU5HRV9JRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NIQU5HRV9JRC5yc3QKaW5kZXggYTQyM2Y0OS4uYTZkMTVmNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DSEFOR0VfSUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ0hBTkdFX0lELnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NIQU5HRV9JRAogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYENoYW5nZUlkYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ0hFQ0tPVVRfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NIRUNLT1VUX0NPTU1BTkQucnN0CmluZGV4IGRhMjU2ZjIuLjg1MmMyOGUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ0hFQ0tPVVRfQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DSEVDS09VVF9DT01NQU5ELnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0NIRUNLT1VUX0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFRlbGwgdGhlIDpjb21tYW5kOmBjdGVzdF9zdGFydGAgY29tbWFuZCBob3cgdG8gY2hlY2tvdXQgb3IgaW5pdGlhbGl6ZQogdGhlIHNvdXJjZSBkaXJlY3RvcnkgaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRS5yc3QKaW5kZXggOWUyNzdmYS4uMzkyODQ1ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DT05GSUdVUkFUSU9OX1RZUEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NPTkZJR1VSQVRJT05fVFlQRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYERlZmF1bHRDVGVzdENvbmZpZ3VyYXRpb25UeXBlYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09ORklHVVJFX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DT05GSUdVUkVfQ09NTUFORC5yc3QKaW5kZXggNTU2MWI2ZC4uOTkyZWY0NyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DT05GSUdVUkVfQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DT05GSUdVUkVfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9DT05GSUdVUkVfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgQ29uZmlndXJlQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DT1ZFUkFHRV9DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09WRVJBR0VfQ09NTUFORC5yc3QKaW5kZXggYTc4NzkyZS4uZjU0MjVjYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DT1ZFUkFHRV9DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPVkVSQUdFX0NPTU1BTkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ09WRVJBR0VfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBDb3ZlcmFnZUNvbW1hbmRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DT1ZFUkFHRV9FWFRSQV9GTEFHUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPVkVSQUdFX0VYVFJBX0ZMQUdTLnJzdAppbmRleCAyOTgxOTU1Li4zOWQ5YjVkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPVkVSQUdFX0VYVFJBX0ZMQUdTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPVkVSQUdFX0VYVFJBX0ZMQUdTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0NPVkVSQUdFX0VYVFJBX0ZMQUdTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBDb3ZlcmFnZUV4dHJhRmxhZ3NgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VSTF9PUFRJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VSTF9PUFRJT05TLnJzdAppbmRleCBmYzVkZmM0Li4xNGFmNGU0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVUkxfT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVJMX09QVElPTlMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQ1VSTF9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgQ3VybE9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0NPVkVSQUdFX0VYQ0xVREUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fQ09WRVJBR0VfRVhDTFVERS5yc3QKaW5kZXggZDU4OTNjOS4uODRiYTEyZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fQ09WRVJBR0VfRVhDTFVERS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fQ09WRVJBR0VfRVhDTFVERS5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fQ09WRVJBR0VfRVhDTFVERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBleGNsdWRlIGZpbGVzIGJ5IHRoZWlyCiBwYXRoIGZyb20gY292ZXJhZ2Ugb3V0cHV0IGJ5IHRoZSA6Y29tbWFuZDpgY3Rlc3RfY292ZXJhZ2VgIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX0VYQ0VQVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9FWENFUFRJT04ucnN0CmluZGV4IGNkNjVhZTMuLjcxOTFjZTQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX0VYQ0VQVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfRVhDRVBUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9FUlJPUl9FWENFUFRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBleGNsdWRlIHdoZW4gZGV0ZWN0aW5nCiBlcnJvciBtZXNzYWdlcyBpbiBidWlsZCBvdXRwdXRzIGJ5IHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfTUFUQ0gucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfTUFUQ0gucnN0CmluZGV4IDU1OGY1ZTUuLjVkMjEzZjIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX01BVENILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9NQVRDSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fRVJST1JfTUFUQ0gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVjdCBlcnJvciBtZXNzYWdlcyBpbgogYnVpbGQgb3V0cHV0cyBieSB0aGUgOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX1BPU1RfQ09OVEVYVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9QT1NUX0NPTlRFWFQucnN0CmluZGV4IDYxNDg1OWIuLjQ1MmQwNjAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX1BPU1RfQ09OVEVYVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfUE9TVF9DT05URVhULnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9FUlJPUl9QT1NUX0NPTlRFWFQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoZSBudW1iZXIgb2YgbGluZXMgdG8gaW5jbHVkZSBhcyBjb250ZXh0IHdoaWNoIGZvbGxvdyBhbiBlcnJvciBtZXNzYWdlIGJ5IHRoZQogOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgIGNvbW1hbmQuIFRoZSBkZWZhdWx0IGlzIDEwLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9QUkVfQ09OVEVYVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9QUkVfQ09OVEVYVC5yc3QKaW5kZXggNzRkYzQ3YS4uYjc3MTdkZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfUFJFX0NPTlRFWFQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX1BSRV9DT05URVhULnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9FUlJPUl9QUkVfQ09OVEVYVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUaGUgbnVtYmVyIG9mIGxpbmVzIHRvIGluY2x1ZGUgYXMgY29udGV4dCB3aGljaCBwcmVjZWRlIGFuIGVycm9yIG1lc3NhZ2UgYnkKIHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4gVGhlIGRlZmF1bHQgaXMgMTAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fRkFJTEVEX1RFU1RfT1VUUFVUX1NJWkUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9GQUlMRURfVEVTVF9PVVRQVVRfU0laRS5yc3QKaW5kZXggNWFlYWU4OC4uMzFiYTA5OSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9GQUlMRURfVEVTVF9PVVRQVVRfU0laRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9GQUlMRURfVEVTVF9PVVRQVVRfU0laRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fTUFYSU1VTV9GQUlMRURfVEVTVF9PVVRQVVRfU0laRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFdoZW4gc2F2aW5nIGEgZmFpbGluZyB0ZXN0J3Mgb3V0cHV0LCB0aGlzIGlzIHRoZSBtYXhpbXVtIHNpemUsIGluIGJ5dGVzLCB0aGF0CiB3aWxsIGJlIGNvbGxlY3RlZCBieSB0aGUgOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgIGNvbW1hbmQuIERlZmF1bHRzIHRvIDMwNzIwMAogKDMwMCBLaUIpLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9OVU1CRVJfT0ZfRVJST1JTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fTlVNQkVSX09GX0VSUk9SUy5yc3QKaW5kZXggOTIwY2IwNC4uZTViZTFhZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9OVU1CRVJfT0ZfRVJST1JTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX05VTUJFUl9PRl9FUlJPUlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX01BWElNVU1fTlVNQkVSX09GX0VSUk9SUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyBpbiBhIHNpbmdsZSBidWlsZCBzdGVwIHdoaWNoIHdpbGwgYmUgZGV0ZWN0ZWQuCiBBZnRlciB0aGlzLCB0aGUgOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgIGNvbW1hbmQgd2lsbCB0cnVuY2F0ZSB0aGUgb3V0cHV0LgogRGVmYXVsdHMgdG8gNTAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX05VTUJFUl9PRl9XQVJOSU5HUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX05VTUJFUl9PRl9XQVJOSU5HUy5yc3QKaW5kZXggYTFmMWNjMS4uYjUxM2E1YyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9OVU1CRVJfT0ZfV0FSTklOR1MucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fTlVNQkVSX09GX1dBUk5JTkdTLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9NQVhJTVVNX05VTUJFUl9PRl9XQVJOSU5HUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygd2FybmluZ3MgaW4gYSBzaW5nbGUgYnVpbGQgc3RlcCB3aGljaCB3aWxsIGJlIGRldGVjdGVkLgogQWZ0ZXIgdGhpcywgdGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kIHdpbGwgdHJ1bmNhdGUgdGhlIG91dHB1dC4KIERlZmF1bHRzIHRvIDUwLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9QQVNTRURfVEVTVF9PVVRQVVRfU0laRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX1BBU1NFRF9URVNUX09VVFBVVF9TSVpFLnJzdAppbmRleCAxZmJiOGM1Li4wODc2MmQ4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX1BBU1NFRF9URVNUX09VVFBVVF9TSVpFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX1BBU1NFRF9URVNUX09VVFBVVF9TSVpFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9NQVhJTVVNX1BBU1NFRF9URVNUX09VVFBVVF9TSVpFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogV2hlbiBzYXZpbmcgYSBwYXNzaW5nIHRlc3QncyBvdXRwdXQsIHRoaXMgaXMgdGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIHRoYXQKIHdpbGwgYmUgY29sbGVjdGVkIGJ5IHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4gRGVmYXVsdHMgdG8gMTAyNAogKDEgS2lCKS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01FTUNIRUNLX0lHTk9SRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NRU1DSEVDS19JR05PUkUucnN0CmluZGV4IDU3ODU3NmMuLjQwNWZjMzMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01FTUNIRUNLX0lHTk9SRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUVNQ0hFQ0tfSUdOT1JFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9NRU1DSEVDS19JR05PUkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHRvIHVzZSB0byBleGNsdWRlIHRlc3RzIGR1cmluZyB0aGUKIDpjb21tYW5kOmBjdGVzdF9tZW1jaGVja2AgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUE9TVF9NRU1DSEVDSy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QT1NUX01FTUNIRUNLLnJzdAppbmRleCA0MDI5MWZlLi41ZTQ4OGE3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QT1NUX01FTUNIRUNLLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QT1NUX01FTUNIRUNLLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9QT1NUX01FTUNIRUNLCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIGNvbW1hbmRzIHRvIHJ1biBhdCB0aGUgZW5kIG9mIHRoZSA6Y29tbWFuZDpgY3Rlc3RfbWVtY2hlY2tgIGNvbW1hbmQuCiAKIC4uIGluY2x1ZGU6OiBDVEVTVF9DVVNUT01fWFhYLnR4dApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUE9TVF9URVNULnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BPU1RfVEVTVC5yc3QKaW5kZXggNzkxMjkyYy4uN2VjNDJmNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUE9TVF9URVNULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QT1NUX1RFU1QucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX1BPU1RfVEVTVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIGNvbW1hbmRzIHRvIHJ1biBhdCB0aGUgZW5kIG9mIHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4KIAogLi4gaW5jbHVkZTo6IENURVNUX0NVU1RPTV9YWFgudHh0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QUkVfTUVNQ0hFQ0sucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUFJFX01FTUNIRUNLLnJzdAppbmRleCAwMGRlOGFhLi45OWU0N2JkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QUkVfTUVNQ0hFQ0sucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BSRV9NRU1DSEVDSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fUFJFX01FTUNIRUNLCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBBIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIGF0IHRoZSBzdGFydCBvZiB0aGUgOmNvbW1hbmQ6YGN0ZXN0X21lbWNoZWNrYAogY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUFJFX1RFU1QucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUFJFX1RFU1QucnN0CmluZGV4IDZhZjcxNTIuLjk1YzYzMTQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BSRV9URVNULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QUkVfVEVTVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fUFJFX1RFU1QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEEgbGlzdCBvZiBjb21tYW5kcyB0byBydW4gYXQgdGhlIHN0YXJ0IG9mIHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4KIAogLi4gaW5jbHVkZTo6IENURVNUX0NVU1RPTV9YWFgudHh0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9URVNUU19JR05PUkUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fVEVTVFNfSUdOT1JFLnJzdAppbmRleCA1NzIyMmNhLi4yN2E3NWQ5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9URVNUU19JR05PUkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1RFU1RTX0lHTk9SRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fVEVTVFNfSUdOT1JFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gdXNlIHRvIGV4Y2x1ZGUgdGVzdHMgZHVyaW5nIHRoZQogOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfRVhDRVBUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfRVhDRVBUSU9OLnJzdAppbmRleCBhMDNkNDczLi41Mzk3NjBiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9XQVJOSU5HX0VYQ0VQVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fV0FSTklOR19FWENFUFRJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfRVhDRVBUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBleGNsdWRlIHdoZW4gZGV0ZWN0aW5nCiB3YXJuaW5nIG1lc3NhZ2VzIGluIGJ1aWxkIG91dHB1dHMgYnkgdGhlIDpjb21tYW5kOmBjdGVzdF9idWlsZGAgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fV0FSTklOR19NQVRDSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9XQVJOSU5HX01BVENILnJzdAppbmRleCAxOGFhNmIzLi41M2U3NzA3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9XQVJOSU5HX01BVENILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9XQVJOSU5HX01BVENILnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9XQVJOSU5HX01BVENICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB3YXJuaW5nIG1lc3NhZ2VzIGluCiBidWlsZCBvdXRwdXRzIGJ5IHRoZSA6Y29tbWFuZDpgY3Rlc3RfYnVpbGRgIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX0NIRUNLT1VULnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX0NIRUNLT1VULnJzdAppbmRleCA2NDMxYzAyLi4zMmNmOWViIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19DSEVDS09VVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVlNfQ0hFQ0tPVVQucnN0CkBAIC0xLDQgKzEsNiBAQAogQ1RFU1RfQ1ZTX0NIRUNLT1VUCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIERlcHJlY2F0ZWQuICBVc2UgOnZhcmlhYmxlOmBDVEVTVF9DSEVDS09VVF9DT01NQU5EYCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVlNfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19DT01NQU5ELnJzdAppbmRleCAwNDk3MDBiLi43OTMyMDcwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19DT01NQU5ELnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0NWU19DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBDVlNDb21tYW5kYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19VUERBVEVfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19VUERBVEVfT1BUSU9OUy5yc3QKaW5kZXggZDdmMmY3Yy4uMzU5ZTcwOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVlNfVVBEQVRFX09QVElPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX1VQREFURV9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0NWU19VUERBVEVfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYENWU1VwZGF0ZU9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9MT0NBVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfTE9DQVRJT04ucnN0CmluZGV4IGMwZjIyMTUuLmY2Njc5M2IgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9MT0NBVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX0xPQ0FUSU9OLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0RST1BfTE9DQVRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgRHJvcExvY2F0aW9uYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfTUVUSE9ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9NRVRIT0QucnN0CmluZGV4IDUwZmJkNGQuLjNhODQ2NTggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9NRVRIT0QucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9NRVRIT0QucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfRFJPUF9NRVRIT0QKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYERyb3BNZXRob2RgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFLnJzdAppbmRleCBkMTVkOTliLi45Yzg3MWUzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEUucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfRFJPUF9TSVRFCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgRHJvcFNpdGVgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX0NEQVNILnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX0NEQVNILnJzdAppbmRleCAyMmI5Nzc2Li5kY2RiMjg2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURV9DREFTSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfQ0RBU0gucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfRFJPUF9TSVRFX0NEQVNICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgSXNDRGFzaGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfUEFTU1dPUkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfUEFTU1dPUkQucnN0CmluZGV4IDkwNGQyYzguLjgyNTk2NTEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX1BBU1NXT1JELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURV9QQVNTV09SRC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9EUk9QX1NJVEVfUEFTU1dPUkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBEcm9wU2l0ZVBhc3N3b3JkYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURV9VU0VSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX1VTRVIucnN0CmluZGV4IGE4NjBhMDMuLjhkMmUzYTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX1VTRVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX1VTRVIucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfRFJPUF9TSVRFX1VTRVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYERyb3BTaXRlVXNlcmBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9FWFRSQV9DT1ZFUkFHRV9HTE9CLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRVhUUkFfQ09WRVJBR0VfR0xPQi5yc3QKaW5kZXggMjg2ZjdkZi4uMWQ3ZThkNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9FWFRSQV9DT1ZFUkFHRV9HTE9CLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0VYVFJBX0NPVkVSQUdFX0dMT0IucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfRVhUUkFfQ09WRVJBR0VfR0xPQgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGZpbmQgZmlsZXMgd2hpY2ggc2hvdWxkIGJlCiBjb3ZlcmVkIGJ5IHRoZSA6Y29tbWFuZDpgY3Rlc3RfY292ZXJhZ2VgIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfQ09NTUFORC5yc3QKaW5kZXggZWI4Mzc5Mi4uZWI5YjQ0MCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9HSVRfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgR0lUQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfSU5JVF9TVUJNT0RVTEVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX0lOSVRfU1VCTU9EVUxFUy5yc3QKaW5kZXggZmQyNzAwMy4uNTI5YmZjNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfSU5JVF9TVUJNT0RVTEVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9JTklUX1NVQk1PRFVMRVMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfR0lUX0lOSVRfU1VCTU9EVUxFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBHSVRJbml0U3VibW9kdWxlc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfVVBEQVRFX0NVU1RPTS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9VUERBVEVfQ1VTVE9NLnJzdAppbmRleCAwYzQ3OWU2Li44MmE4YTZhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9VUERBVEVfQ1VTVE9NLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9VUERBVEVfQ1VTVE9NLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0dJVF9VUERBVEVfQ1VTVE9NCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBHSVRVcGRhdGVDdXN0b21gYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX1VQREFURV9PUFRJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX1VQREFURV9PUFRJT05TLnJzdAppbmRleCA0NTkwYTc4Li4xNTY4MjM5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9VUERBVEVfT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfVVBEQVRFX09QVElPTlMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfR0lUX1VQREFURV9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgR0lUVXBkYXRlT3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9IR19DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfSEdfQ09NTUFORC5yc3QKaW5kZXggMzg1NDk1MC4uMzM3MmZlNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9IR19DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0hHX0NPTU1BTkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfSEdfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBIR0NvbW1hbmRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfSEdfVVBEQVRFX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9IR19VUERBVEVfT1BUSU9OUy5yc3QKaW5kZXggOTA0OWMxZi4uODVjNmIwMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9IR19VUERBVEVfT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9IR19VUERBVEVfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9IR19VUERBVEVfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgSEdVcGRhdGVPcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0xBQkVMU19GT1JfU1VCUFJPSkVDVFMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9MQUJFTFNfRk9SX1NVQlBST0pFQ1RTLnJzdAppbmRleCA5NTk1OTZiLi5kZDZkMTI1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0xBQkVMU19GT1JfU1VCUFJPSkVDVFMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTEFCRUxTX0ZPUl9TVUJQUk9KRUNUUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9MQUJFTFNfRk9SX1NVQlBST0pFQ1RTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBMYWJlbHNGb3JTdWJwcm9qZWN0c2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfQ09NTUFORC5yc3QKaW5kZXggOGMxOTliYS4uMjVmMWJkOSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX0NPTU1BTkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfTUVNT1JZQ0hFQ0tfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBNZW1vcnlDaGVja0NvbW1hbmRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfQ09NTUFORF9PUFRJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfQ09NTUFORF9PUFRJT05TLnJzdAppbmRleCAzZTI2YWI1Li41MTgzMGQ1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX0NPTU1BTkRfT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19DT01NQU5EX09QVElPTlMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfTUVNT1JZQ0hFQ0tfQ09NTUFORF9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgTWVtb3J5Q2hlY2tDb21tYW5kT3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19TQU5JVElaRVJfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1NBTklUSVpFUl9PUFRJT05TLnJzdAppbmRleCAyZGU1ZmI2Li42Y2Q1MWZhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1NBTklUSVpFUl9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1NBTklUSVpFUl9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX01FTU9SWUNIRUNLX1NBTklUSVpFUl9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBNZW1vcnlDaGVja1Nhbml0aXplck9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfU1VQUFJFU1NJT05TX0ZJTEUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19TVVBQUkVTU0lPTlNfRklMRS5yc3QKaW5kZXggMTE0N2VlOC4uYTYxYTNlZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19TVVBQUkVTU0lPTlNfRklMRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19TVVBQUkVTU0lPTlNfRklMRS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9NRU1PUllDSEVDS19TVVBQUkVTU0lPTlNfRklMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgTWVtb3J5Q2hlY2tTdXBwcmVzc2lvbkZpbGVgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfVFlQRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1RZUEUucnN0CmluZGV4IDRlN2Q1YzAuLjI0NTIyMjggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfVFlQRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX01FTU9SWUNIRUNLX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgTWVtb3J5Q2hlY2tUeXBlYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCiBWYWxpZCB2YWx1ZXMgYXJlIGBgVmFsZ3JpbmRgYCwgYGBQdXJpZnlgYCwgYGBCb3VuZHNDaGVja2VyYGAsIGBgRHJNZW1vcnlgYCBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FLnJzdAppbmRleCBiYzgwMjc2Li4yZDcwN2Q1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX05JR0hUTFlfU1RBUlRfVElNRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9OSUdIVExZX1NUQVJUX1RJTUUucnN0CkBAIC0xLDUgKzEsMTEgQEAKIENURVNUX05JR0hUTFlfU1RBUlRfVElNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNwZWNpZnkgdGhlIENUZXN0IGBgTmlnaHRseVN0YXJ0VGltZWBgIHNldHRpbmcKLWluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKK1NwZWNpZnkgdGhlIENUZXN0IGBgTmlnaHRseVN0YXJ0VGltZWBgIHNldHRpbmcgaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAKK2Rhc2hib2FyZCBjbGllbnQgc2NyaXB0LgorCitOb3RlIHRoYXQgdGhpcyB2YXJpYWJsZSBtdXN0IGFsd2F5cyBiZSBzZXQgZm9yIGEgbmlnaHRseSBidWlsZCBpbiBhCitkYXNoYm9hcmQgc2NyaXB0LiBJdCBpcyBuZWVkZWQgc28gdGhhdCBuaWdodGx5IGJ1aWxkcyBjYW4gYmUgcHJvcGVybHkgZ3JvdXBlZAordG9nZXRoZXIgaW4gQ0Rhc2guCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X0NMSUVOVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X0NMSUVOVC5yc3QKaW5kZXggMzQ3ZWE1NC4uMDc3OGM1YiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9DTElFTlQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfQ0xJRU5ULnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1A0X0NMSUVOVAogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFA0Q2xpZW50YGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9DT01NQU5ELnJzdAppbmRleCBkZWZhYjEyLi41Y2MyYTgxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9QNF9DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFA0Q29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9PUFRJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfT1BUSU9OUy5yc3QKaW5kZXggZmVlNGNlMi4uMDFiNjUzNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X09QVElPTlMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfUDRfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBQNE9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfVVBEQVRFX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9VUERBVEVfT1BUSU9OUy5yc3QKaW5kZXggMGUyNzkwZi4uMzY1YWEzZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9VUERBVEVfT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9VUERBVEVfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9QNF9VUERBVEVfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgUDRVcGRhdGVPcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1JFU09VUkNFX1NQRUNfRklMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1JFU09VUkNFX1NQRUNfRklMRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5YmYwMQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFLnJzdApAQCAtMCwwICsxLDEyIEBACitDVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1NwZWNpZnkgdGhlIENUZXN0IGBgUmVzb3VyY2VTcGVjRmlsZWBgIHNldHRpbmcgaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAKK2Rhc2hib2FyZCBjbGllbnQgc2NyaXB0LgorCitUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcmVzb3VyY2Ugc3BlYyBmaWxlIGZyb20gYSBDTWFrZSBidWlsZC4gSWYKK25vIGBgUkVTT1VSQ0VfU1BFQ19GSUxFYGAgaXMgcGFzc2VkIHRvIDpjb21tYW5kOmBjdGVzdF90ZXN0YCwgYW5kCitgYENURVNUX1JFU09VUkNFX1NQRUNfRklMRWBgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGRhc2hib2FyZCBzY3JpcHQsIHRoZQordmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBmcm9tIHRoZSBidWlsZCBpcyB1c2VkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9SVU5fQ1VSUkVOVF9TQ1JJUFQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9SVU5fQ1VSUkVOVF9TQ1JJUFQucnN0CmluZGV4IGFiYzEyM2MuLjMyYzg1YWQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfUlVOX0NVUlJFTlRfU0NSSVBULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1JVTl9DVVJSRU5UX1NDUklQVC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9SVU5fQ1VSUkVOVF9TQ1JJUFQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIFNldHRpbmcgdGhpcyB0byAwIHByZXZlbnRzIDptYW51YWw6YGN0ZXN0KDEpYCBmcm9tIGJlaW5nIHJ1biBhZ2FpbiB3aGVuIGl0CiByZWFjaGVzIHRoZSBlbmQgb2YgYSBzY3JpcHQgcnVuIGJ5IGNhbGxpbmcgYGBjdGVzdCAtU2BgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9TQ1BfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NDUF9DT01NQU5ELnJzdAppbmRleCAxOWVhOGIzLi4xNTViMDU4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NDUF9DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NDUF9DT01NQU5ELnJzdApAQCAtMSw0ICsxLDYgQEAKIENURVNUX1NDUF9DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogTGVnYWN5IG9wdGlvbi4gIE5vdCB1c2VkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9TSVRFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU0lURS5yc3QKaW5kZXggOGE1ZWMyNS4uNTI2ZTZlZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9TSVRFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NJVEUucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfU0lURQogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBTaXRlYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NPVVJDRV9ESVJFQ1RPUlkucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9TT1VSQ0VfRElSRUNUT1JZLnJzdAppbmRleCBiNjgzN2QxLi40YzZhYzU0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NPVVJDRV9ESVJFQ1RPUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU09VUkNFX0RJUkVDVE9SWS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9TT1VSQ0VfRElSRUNUT1JZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFNvdXJjZURpcmVjdG9yeWBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9TVUJNSVRfVVJMLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1VCTUlUX1VSTC5yc3QKaW5kZXggN2Q4NGRhNC4uYjZlN2Y2OCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9TVUJNSVRfVVJMLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NVQk1JVF9VUkwucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfU1VCTUlUX1VSTAogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIFNwZWNpZnkgdGhlIENUZXN0IGBgU3VibWl0VVJMYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NWTl9DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1ZOX0NPTU1BTkQucnN0CmluZGV4IGFmOTAxNDMuLmU5N2FjZDAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1ZOX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1ZOX0NPTU1BTkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfU1ZOX0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFNWTkNvbW1hbmRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1ZOX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fT1BUSU9OUy5yc3QKaW5kZXggNzY1NTFkYy4uNTMyNmUyMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9TVk5fT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgU1ZOT3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fVVBEQVRFX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fVVBEQVRFX09QVElPTlMucnN0CmluZGV4IDVmMDFhMTkuLjI0ZTBiYmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1ZOX1VQREFURV9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NWTl9VUERBVEVfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9TVk5fVVBEQVRFX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBTVk5VcGRhdGVPcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1RFU1RfTE9BRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1RFU1RfTE9BRC5yc3QKaW5kZXggODA4MjNmZS4uYjZhOWQ2MiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9URVNUX0xPQUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVEVTVF9MT0FELnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX1RFU1RfTE9BRAogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTcGVjaWZ5IHRoZSBgYFRlc3RMb2FkYGAgc2V0dGluZyBpbiB0aGUgOnJlZjpgQ1Rlc3QgVGVzdCBTdGVwYAogb2YgYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuICBUaGlzIHNldHMgdGhlCiBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYGBURVNUX0xPQURgYCBvcHRpb24gb2YgdGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9URVNUX1RJTUVPVVQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9URVNUX1RJTUVPVVQucnN0CmluZGV4IGMwMzE0MzcuLjYxZDkxOTEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVEVTVF9USU1FT1VULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1RFU1RfVElNRU9VVC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9URVNUX1RJTUVPVVQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBUaW1lT3V0YGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1RSSUdHRVJfU0lURS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1RSSUdHRVJfU0lURS5yc3QKaW5kZXggYTUwZTQwNS4uNmFiYjg1MiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9UUklHR0VSX1NJVEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVFJJR0dFUl9TSVRFLnJzdApAQCAtMSw0ICsxLDYgQEAKIENURVNUX1RSSUdHRVJfU0lURQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBMZWdhY3kgb3B0aW9uLiAgTm90IHVzZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX0NPTU1BTkQucnN0CmluZGV4IDkwMTU1ZDAuLmM0ZWQ2NDUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX0NPTU1BTkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfVVBEQVRFX0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFVwZGF0ZUNvbW1hbmRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfT1BUSU9OUy5yc3QKaW5kZXggZTQzZDYxZC4uOTZjNGI2YyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9VUERBVEVfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgVXBkYXRlT3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfVkVSU0lPTl9PTkxZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT05MWS5yc3QKaW5kZXggYTg2MmJhYS4uZjdjODYzYyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfVkVSU0lPTl9PTkxZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9WRVJTSU9OX09OTFkucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT05MWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgOnJlZjpgVXBkYXRlVmVyc2lvbk9ubHkgPFVwZGF0ZVZlcnNpb25Pbmx5PmAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9WRVJTSU9OX09WRVJSSURFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT1ZFUlJJREUucnN0CmluZGV4IDM5ZmJhYmEuLjg3OTE4Y2IgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT1ZFUlJJREUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT1ZFUlJJREUucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT1ZFUlJJREUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgOnJlZjpgVXBkYXRlVmVyc2lvbk92ZXJyaWRlIDxVcGRhdGVWZXJzaW9uT3ZlcnJpZGU+YCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVNFX0xBVU5DSEVSUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1VTRV9MQVVOQ0hFUlMucnN0CmluZGV4IDlmNDhhMmUuLjcyOGNkYzUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVNFX0xBVU5DSEVSUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9VU0VfTEFVTkNIRVJTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1VTRV9MQVVOQ0hFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgVXNlTGF1bmNoZXJzYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0dIUy1NVUxUSS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0dIUy1NVUxUSS5yc3QKaW5kZXggZmUzYjE3ZS4uYmIxMzlhZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9HSFMtTVVMVEkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvR0hTLU1VTFRJLnJzdApAQCAtMSw0ICsxLDYgQEAKIEdIUy1NVUxUSQogLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBgYFRydWVgYCB3aGVuIHVzaW5nIDpnZW5lcmF0b3I6YEdyZWVuIEhpbGxzIE1VTFRJYCBnZW5lcmF0b3IuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0lPUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0lPUy5yc3QKaW5kZXggZTVjYzNmNi4uYjI3YmU1NSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9JT1MucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvSU9TLnJzdApAQCAtMSw0ICsxLDYgQEAKIElPUwogLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogU2V0IHRvIGBgMWBgIHdoZW4gdGhlIHRhcmdldCBzeXN0ZW0gKDp2YXJpYWJsZTpgQ01BS0VfU1lTVEVNX05BTUVgKSBpcyBgYGlPU2BgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9NSU5HVy5yc3QgYi9IZWxwL3ZhcmlhYmxlL01JTkdXLnJzdAppbmRleCA2ZDI5YmU0Li4yN2M1NmVhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL01JTkdXLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL01JTkdXLnJzdApAQCAtMSw2ICsxLDggQEAKIE1JTkdXCiAtLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogYGBUcnVlYGAgd2hlbiB1c2luZyBNaW5HVwogCiBTZXQgdG8gYGB0cnVlYGAgd2hlbiB0aGUgY29tcGlsZXIgaXMgc29tZSB2ZXJzaW9uIG9mIE1pbkdXLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9NU1ZDMTQucnN0IGIvSGVscC92YXJpYWJsZS9NU1ZDMTQucnN0CmluZGV4IDc5ZTBjMTAuLjFlYjUxODMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvTVNWQzE0LnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL01TVkMxNC5yc3QKQEAgLTEsNiArMSw4IEBACiBNU1ZDMTQKIC0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRGlzY291cmFnZWQuICBVc2UgdGhlIDp2YXJpYWJsZTpgTVNWQ19WRVJTSU9OYCB2YXJpYWJsZSBpbnN0ZWFkLgogCiBgYFRydWVgYCB3aGVuIHVzaW5nIHRoZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBgYHYxNDBgYCBvciBgYHYxNDFgYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9NU1ZDX1RPT0xTRVRfVkVSU0lPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL01TVkNfVE9PTFNFVF9WRVJTSU9OLnJzdAppbmRleCBmNGEzM2UyLi5jNjQyYTlmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL01TVkNfVE9PTFNFVF9WRVJTSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL01TVkNfVE9PTFNFVF9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIE1TVkNfVE9PTFNFVF9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSB0b29sc2V0IHZlcnNpb24gb2YgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKyBiZWluZyB1c2VkIGlmIGFueS4KIElmIE1TVkMtbGlrZSBpcyBiZWluZyB1c2VkLCB0aGlzIHZhcmlhYmxlIGlzIHNldCBiYXNlZCBvbiB0aGUgdmVyc2lvbgogb2YgdGhlIGNvbXBpbGVyIGFzIGdpdmVuIGJ5IHRoZSA6dmFyaWFibGU6YE1TVkNfVkVSU0lPTmAgdmFyaWFibGUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL01TWVMucnN0IGIvSGVscC92YXJpYWJsZS9NU1lTLnJzdAppbmRleCAyNWRkYzdmLi42YmU3NjgxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL01TWVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvTVNZUy5yc3QKQEAgLTEsNCArMSw2IEBACiBNU1lTCiAtLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogYGBUcnVlYGAgd2hlbiB1c2luZyB0aGUgOmdlbmVyYXRvcjpgTVNZUyBNYWtlZmlsZXNgIGdlbmVyYXRvci4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVC1OQU1FX0RFU0NSSVBUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvUFJPSkVDVC1OQU1FX0RFU0NSSVBUSU9OLnJzdAppbmRleCAyYjg4YjFhLi5mMzcyZjVjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL1BST0pFQ1QtTkFNRV9ERVNDUklQVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9QUk9KRUNULU5BTUVfREVTQ1JJUFRJT04ucnN0CkBAIC0xLDUgKzEsNyBAQAogPFBST0pFQ1QtTkFNRT5fREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVmFsdWUgZ2l2ZW4gdG8gdGhlIGBgREVTQ1JJUFRJT05gYCBvcHRpb24gb2YgdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8gdGhlCiA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCB3aXRoIHByb2plY3QgbmFtZSBgYDxQUk9KRUNULU5BTUU+YGAsIGlmIGFueS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVC1OQU1FX0hPTUVQQUdFX1VSTC5yc3QgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1QtTkFNRV9IT01FUEFHRV9VUkwucnN0CmluZGV4IDIyY2MzMDQuLjQ4MDBiMTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVC1OQU1FX0hPTUVQQUdFX1VSTC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9QUk9KRUNULU5BTUVfSE9NRVBBR0VfVVJMLnJzdApAQCAtMSw1ICsxLDcgQEAKIDxQUk9KRUNULU5BTUU+X0hPTUVQQUdFX1VSTAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVmFsdWUgZ2l2ZW4gdG8gdGhlIGBgSE9NRVBBR0VfVVJMYGAgb3B0aW9uIG9mIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIHRoZQogOmNvbW1hbmQ6YHByb2plY3RgIGNvbW1hbmQgd2l0aCBwcm9qZWN0IG5hbWUgYGA8UFJPSkVDVC1OQU1FPmBgLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfREVTQ1JJUFRJT04ucnN0IGIvSGVscC92YXJpYWJsZS9QUk9KRUNUX0RFU0NSSVBUSU9OLnJzdAppbmRleCAyODMzZTExLi4xZmVmY2RjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfREVTQ1JJUFRJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvUFJPSkVDVF9ERVNDUklQVElPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBQUk9KRUNUX0RFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBTaG9ydCBwcm9qZWN0IGRlc2NyaXB0aW9uIGdpdmVuIHRvIHRoZSBwcm9qZWN0IGNvbW1hbmQuCiAKIFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGdpdmVuIHRvIHRoZSBtb3N0IHJlY2VudGx5IGNhbGxlZCA6Y29tbWFuZDpgcHJvamVjdGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVF9IT01FUEFHRV9VUkwucnN0IGIvSGVscC92YXJpYWJsZS9QUk9KRUNUX0hPTUVQQUdFX1VSTC5yc3QKaW5kZXggNzU0YzllOC4uMGQyYzkzNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9QUk9KRUNUX0hPTUVQQUdFX1VSTC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9QUk9KRUNUX0hPTUVQQUdFX1VSTC5yc3QKQEAgLTEsNiArMSw4IEBACiBQUk9KRUNUX0hPTUVQQUdFX1VSTAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBUaGUgaG9tZXBhZ2UgVVJMIG9mIHRoZSBwcm9qZWN0LgogCiBUaGlzIGlzIHRoZSBob21lcGFnZSBVUkwgZ2l2ZW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgY2FsbGVkIDpjb21tYW5kOmBwcm9qZWN0YApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9QUk9KRUNUX1NPVVJDRV9ESVIucnN0IGIvSGVscC92YXJpYWJsZS9QUk9KRUNUX1NPVVJDRV9ESVIucnN0CmluZGV4IDI3ZjI4MzguLmI0NjAxYzIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVF9TT1VSQ0VfRElSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfU09VUkNFX0RJUi5yc3QKQEAgLTEsNiArMSw4IEBACiBQUk9KRUNUX1NPVVJDRV9ESVIKIC0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ub3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeSBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdC4KLQotVGhpcyBpcyB0aGUgc291cmNlIGRpcmVjdG9yeSBvZiB0aGUgbW9zdCByZWNlbnQgOmNvbW1hbmQ6YHByb2plY3RgIGNvbW1hbmQuCitUaGlzIGlzIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG9mIHRoZSBsYXN0IGNhbGwgdG8gdGhlCis6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCBtYWRlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBzY29wZSBvciBvbmUKK29mIGl0cyBwYXJlbnRzLiBOb3RlLCBpdCBpcyBub3QgYWZmZWN0ZWQgYnkgY2FsbHMgdG8KKzpjb21tYW5kOmBwcm9qZWN0YCBtYWRlIHdpdGhpbiBhIGNoaWxkIGRpcmVjdG9yeSBzY29wZSAoaS5lLiBmcm9tCit3aXRoaW4gYSBjYWxsIHRvIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBmcm9tIHRoZSBjdXJyZW50IHNjb3BlKS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvUGFja2FnZU5hbWVfUk9PVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL1BhY2thZ2VOYW1lX1JPT1QucnN0CmluZGV4IDFjMmZkMzQuLjNmN2VlNGMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvUGFja2FnZU5hbWVfUk9PVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9QYWNrYWdlTmFtZV9ST09ULnJzdApAQCAtMSw2ICsxLDggQEAKIDxQYWNrYWdlTmFtZT5fUk9PVAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIuMQorCiBDYWxscyB0byA6Y29tbWFuZDpgZmluZF9wYWNrYWdlKDxQYWNrYWdlTmFtZT4pYCB3aWxsIHNlYXJjaCBpbiBwcmVmaXhlcwogc3BlY2lmaWVkIGJ5IHRoZSBgYDxQYWNrYWdlTmFtZT5fUk9PVGBgIENNYWtlIHZhcmlhYmxlLCB3aGVyZQogYGA8UGFja2FnZU5hbWU+YGAgaXMgdGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNhbGwKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvV0lOQ0UucnN0IGIvSGVscC92YXJpYWJsZS9XSU5DRS5yc3QKaW5kZXggNTRmZjdkZS4uNGRjYTI5NyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9XSU5DRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9XSU5DRS5yc3QKQEAgLTEsNSArMSw3IEBACiBXSU5DRQogLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFRydWUgd2hlbiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9TWVNURU1fTkFNRWAgdmFyaWFibGUgaXMgc2V0CiB0byBgYFdpbmRvd3NDRWBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9XSU5ET1dTX1BIT05FLnJzdCBiL0hlbHAvdmFyaWFibGUvV0lORE9XU19QSE9ORS5yc3QKaW5kZXggNjFkOTFiMC4uYmY3MDk5ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9XSU5ET1dTX1BIT05FLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1dJTkRPV1NfUEhPTkUucnN0CkBAIC0xLDUgKzEsNyBAQAogV0lORE9XU19QSE9ORQogLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogVHJ1ZSB3aGVuIHRoZSA6dmFyaWFibGU6YENNQUtFX1NZU1RFTV9OQU1FYCB2YXJpYWJsZSBpcyBzZXQKIHRvIGBgV2luZG93c1Bob25lYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL1dJTkRPV1NfU1RPUkUucnN0IGIvSGVscC92YXJpYWJsZS9XSU5ET1dTX1NUT1JFLnJzdAppbmRleCBkYWUzYjUzLi4xMzgzMWMyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL1dJTkRPV1NfU1RPUkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvV0lORE9XU19TVE9SRS5yc3QKQEAgLTEsNSArMSw3IEBACiBXSU5ET1dTX1NUT1JFCiAtLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBUcnVlIHdoZW4gdGhlIDp2YXJpYWJsZTpgQ01BS0VfU1lTVEVNX05BTUVgIHZhcmlhYmxlIGlzIHNldAogdG8gYGBXaW5kb3dzU3RvcmVgYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvWENPREUucnN0IGIvSGVscC92YXJpYWJsZS9YQ09ERS5yc3QKaW5kZXggOTlmMjBmYi4uMTY3Y2E4NiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9YQ09ERS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9YQ09ERS5yc3QKQEAgLTEsNCArMSw2IEBACiBYQ09ERQogLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIGBgVHJ1ZWBgIHdoZW4gdXNpbmcgOmdlbmVyYXRvcjpgWGNvZGVgIGdlbmVyYXRvci4KZGlmZiAtLWdpdCBhL01vZHVsZXMvQW5kcm9pZFRlc3RVdGlsaXRpZXMuY21ha2UgYi9Nb2R1bGVzL0FuZHJvaWRUZXN0VXRpbGl0aWVzLmNtYWtlCmluZGV4IDk1ZTJlZjcuLmRkY2NmNTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQW5kcm9pZFRlc3RVdGlsaXRpZXMuY21ha2UKKysrIGIvTW9kdWxlcy9BbmRyb2lkVGVzdFV0aWxpdGllcy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEFuZHJvaWRUZXN0VXRpbGl0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIENyZWF0ZSBhIHRlc3QgdGhhdCBhdXRvbWF0aWNhbGx5IGxvYWRzIHNwZWNpZmllZCBkYXRhIG9udG8gYW4gQW5kcm9pZCBkZXZpY2UuCiAKIEludHJvZHVjdGlvbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUFTTUNvbXBpbGVyLmNtYWtlLmluIGIvTW9kdWxlcy9DTWFrZUFTTUNvbXBpbGVyLmNtYWtlLmluCmluZGV4IGI4ZTA5ZmUuLjM5NTNiMzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VBU01Db21waWxlci5jbWFrZS5pbgorKysgYi9Nb2R1bGVzL0NNYWtlQVNNQ29tcGlsZXIuY21ha2UuaW4KQEAgLTEwLDcgKzEwLDkgQEAKIHNldChDTUFLRV9BU01AQVNNX0RJQUxFQ1RAX0NPTVBJTEVSX0lEICJAX0NNQUtFX0FTTV9DT01QSUxFUl9JREAiKQogc2V0KENNQUtFX0FTTUBBU01fRElBTEVDVEBfQ09NUElMRVJfVkVSU0lPTiAiQF9DTUFLRV9BU01fQ09NUElMRVJfVkVSU0lPTkAiKQogc2V0KENNQUtFX0FTTUBBU01fRElBTEVDVEBfQ09NUElMRVJfRU5WX1ZBUiAiQF9DTUFLRV9BU01fQ09NUElMRVJfRU5WX1ZBUkAiKQorQF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSEAKIEBfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSURACitAX1NFVF9DTUFLRV9BU01fQ09NUElMRVJfU1lTUk9PVEAKIAogc2V0KENNQUtFX0FTTUBBU01fRElBTEVDVEBfSUdOT1JFX0VYVEVOU0lPTlMgaDtIO287TztvYmo7T0JKO2RlZjtERUY7cmM7UkMpCiBzZXQoQ01BS0VfQVNNQEFTTV9ESUFMRUNUQF9MSU5LRVJfUFJFRkVSRU5DRSAwKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUFTTUluZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUFTTUluZm9ybWF0aW9uLmNtYWtlCmluZGV4IDZiNzM3MzAuLjAzMTk1Y2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VBU01JbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlQVNNSW5mb3JtYXRpb24uY21ha2UKQEAgLTc2LDEyICs3NiwxMiBAQAogaWYoTk9UIENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NSRUFURV9TVEFUSUNfTElCUkFSWSkKICAgc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NSRUFURV9TVEFUSUNfTElCUkFSWQogICAgICAgIjxDTUFLRV9BUj4gY3IgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAiCi0gICAgICAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4gIikKKyAgICAgICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0VYRUNVVEFCTEUpCiAgIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfRVhFQ1VUQUJMRV9SVU5USU1FX0FTTSR7QVNNX0RJQUxFQ1R9X0ZMQUcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQVNNX01BU01JbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VBU01fTUFTTUluZm9ybWF0aW9uLmNtYWtlCmluZGV4IDlmN2U5MzQuLjZkMWUxNzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VBU01fTUFTTUluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VBU01fTUFTTUluZm9ybWF0aW9uLmNtYWtlCkBAIC04LDcgKzgsNyBAQAogCiBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fU09VUkNFX0ZJTEVfRVhURU5TSU9OUyBhc20pCiAKLXNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFX09CSkVDVCAiPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC9jICAvRm8gPE9CSkVDVD4gPFNPVVJDRT4iKQorc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVfT0JKRUNUICI8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gL2MgL0ZvIDxPQkpFQ1Q+IDxTT1VSQ0U+IikKIAogIyBUaGUgQVNNX01BU00gY29tcGlsZXIgaWQgZm9yIHRoaXMgY29tcGlsZXIgaXMgIk1TVkMiLCBzbyBmaWxsIG91dCB0aGUgcnVudGltZSBsaWJyYXJ5IHRhYmxlLgogc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVfT1BUSU9OU19NU1ZDX1JVTlRJTUVfTElCUkFSWV9NdWx0aVRocmVhZGVkICAgICAgICAgIiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQVNNX05BU01JbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VBU01fTkFTTUluZm9ybWF0aW9uLmNtYWtlCmluZGV4IGNiNzkzZTcuLjk3Y2I0ODggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VBU01fTkFTTUluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VBU01fTkFTTUluZm9ybWF0aW9uLmNtYWtlCkBAIC04LDE5ICs4LDI1IEBACiAKIGlmKE5PVCBDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUKQogICBpZihXSU4zMikKLSAgICBpZihDTUFLRV9DX1NJWkVPRl9EQVRBX1BUUiBFUVVBTCA4KQorICAgIGlmKERFRklORUQgQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgQU5EIENNQUtFX0NfU0laRU9GX0RBVEFfUFRSIEVRVUFMIDgpCisgICAgICBzZXQoQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCB3aW42NCkKKyAgICBlbHNlaWYoREVGSU5FRCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSIEFORCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSIEVRVUFMIDgpCiAgICAgICBzZXQoQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCB3aW42NCkKICAgICBlbHNlKCkKICAgICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIHdpbjMyKQogICAgIGVuZGlmKCkKICAgZWxzZWlmKEFQUExFKQotICAgIGlmKENNQUtFX0NfU0laRU9GX0RBVEFfUFRSIEVRVUFMIDgpCisgICAgaWYoREVGSU5FRCBDTUFLRV9DX1NJWkVPRl9EQVRBX1BUUiBBTkQgQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgRVFVQUwgOCkKKyAgICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIG1hY2hvNjQpCisgICAgZWxzZWlmKERFRklORUQgQ01BS0VfQ1hYX1NJWkVPRl9EQVRBX1BUUiBBTkQgQ01BS0VfQ1hYX1NJWkVPRl9EQVRBX1BUUiBFUVVBTCA4KQogICAgICAgc2V0KENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQgbWFjaG82NCkKICAgICBlbHNlKCkKICAgICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIG1hY2hvKQogICAgIGVuZGlmKCkKICAgZWxzZSgpCi0gICAgaWYoQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgRVFVQUwgOCkKKyAgICBpZihERUZJTkVEIENNQUtFX0NfU0laRU9GX0RBVEFfUFRSIEFORCBDTUFLRV9DX1NJWkVPRl9EQVRBX1BUUiBFUVVBTCA4KQorICAgICAgc2V0KENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQgZWxmNjQpCisgICAgZWxzZWlmKERFRklORUQgQ01BS0VfQ1hYX1NJWkVPRl9EQVRBX1BUUiBBTkQgQ01BS0VfQ1hYX1NJWkVPRl9EQVRBX1BUUiBFUVVBTCA4KQogICAgICAgc2V0KENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQgZWxmNjQpCiAgICAgZWxzZSgpCiAgICAgICBzZXQoQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCBlbGYpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ0NvbXBpbGVyLmNtYWtlLmluIGIvTW9kdWxlcy9DTWFrZUNDb21waWxlci5jbWFrZS5pbgppbmRleCA5YjhkNDIzLi5lZWEzZjVkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ0NvbXBpbGVyLmNtYWtlLmluCisrKyBiL01vZHVsZXMvQ01ha2VDQ29tcGlsZXIuY21ha2UuaW4KQEAgLTE1LDYgKzE1LDcgQEAKIHNldChDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlQgIkBDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlRAIikKIHNldChDTUFLRV9DX1NJTVVMQVRFX1ZFUlNJT04gIkBDTUFLRV9DX1NJTVVMQVRFX1ZFUlNJT05AIikKIEBfU0VUX0NNQUtFX0NfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEQAorQF9TRVRfQ01BS0VfQ19DT01QSUxFUl9TWVNST09UQAogQFNFVF9NU1ZDX0NfQVJDSElURUNUVVJFX0lEQAogQFNFVF9DTUFLRV9YQ09ERV9BUkNIU0AKIHNldChDTUFLRV9BUiAiQENNQUtFX0FSQCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ0luZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUNJbmZvcm1hdGlvbi5jbWFrZQppbmRleCAxZTA4YmI3Li5mNmQ2MjBmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ0luZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VDSW5mb3JtYXRpb24uY21ha2UKQEAgLTE2MSw3ICsxNjEsNyBAQAogICBzZXQoQ01BS0VfQ19BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiBxYyA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX0NfQVJDSElWRV9BUFBFTkQpCi0gIHNldChDTUFLRV9DX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQorICBzZXQoQ01BS0VfQ19BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfQ19BUkNISVZFX0ZJTklTSCkKICAgc2V0KENNQUtFX0NfQVJDSElWRV9GSU5JU0ggIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+IikKQEAgLTE3MCwxMiArMTcwLDEyIEBACiAjIGNvbXBpbGUgYSBDIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQogaWYoTk9UIENNQUtFX0NfQ09NUElMRV9PQkpFQ1QpCiAgIHNldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+ICAgLWMgPFNPVVJDRT4iKQorICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfRVhFQ1VUQUJMRV9SVU5USU1FX0NfRkxBRykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlLmluCmluZGV4IDA0YTRjNDIuLjcwNGFkMDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4KKysrIGIvTW9kdWxlcy9DTWFrZUNVREFDb21waWxlci5jbWFrZS5pbgpAQCAtMTYsNiArMTYsNyBAQAogc2V0KENNQUtFX0NVREFfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVCAiQENNQUtFX0NVREFfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVEAiKQogc2V0KENNQUtFX0NVREFfU0lNVUxBVEVfVkVSU0lPTiAiQENNQUtFX0NVREFfU0lNVUxBVEVfVkVSU0lPTkAiKQogQFNFVF9NU1ZDX0NVREFfQVJDSElURUNUVVJFX0lEQAorQF9TRVRfQ01BS0VfQ1VEQV9DT01QSUxFUl9TWVNST09UQAogCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9FTlZfVkFSICJDVURBQ1hYIikKIHNldChDTUFLRV9DVURBX0hPU1RfQ09NUElMRVJfRU5WX1ZBUiAiQ1VEQUhPU1RDWFgiKQpAQCAtNDIsNiArNDMsOSBAQAogICBzZXQoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgIkBDTUFLRV9DVURBX0xJQlJBUllfQVJDSElURUNUVVJFQCIpCiBlbmRpZigpCiAKK3NldChDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVCAiQENNQUtFX0NVREFfQ09NUElMRVJfVE9PTEtJVF9ST09UQCIpCitzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QgIkBDTUFLRV9DVURBX0NPTVBJTEVSX0xJQlJBUllfUk9PVEAiKQorCiBzZXQoQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMgIkBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFU0AiKQogCiBzZXQoQ01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTICJAQ01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTQCIpCkBAIC01Niw0ICs2MCw1IEBACiBAX1NFVF9DTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUQAogCiBzZXQoQ01BS0VfTElOS0VSICJAQ01BS0VfTElOS0VSQCIpCitzZXQoQ01BS0VfQVIgIkBDTUFLRV9BUkAiKQogc2V0KENNQUtFX01UICJAQ01BS0VfTVRAIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDVURBSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQ1VEQUluZm9ybWF0aW9uLmNtYWtlCmluZGV4IDk3NGY1ZmEuLmY5Zjc1NzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDVURBSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUNVREFJbmZvcm1hdGlvbi5jbWFrZQpAQCAtOCw2ICs4LDE5IEBACiBlbmRpZigpCiBzZXQoQ01BS0VfSU5DTFVERV9GTEFHX0NVREEgIi1JIikKIAorIyBTZXQgaW1wbGljaXQgbGlua3MgZWFybHkgc28gY29tcGlsZXItc3BlY2lmaWMgbW9kdWxlcyBjYW4gdXNlIHRoZW0uCitzZXQoX19JTVBMSUNUX0xJTktTICkKK2ZvcmVhY2goZGlyICR7Q01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorICBzdHJpbmcoQVBQRU5EIF9fSU1QTElDVF9MSU5LUyAiIC1MXCIke2Rpcn1cIiIpCitlbmRmb3JlYWNoKCkKK2ZvcmVhY2gobGliICR7Q01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTfSkKKyAgaWYoJHtsaWJ9IE1BVENIRVMgIi8iKQorICAgIHN0cmluZyhBUFBFTkQgX19JTVBMSUNUX0xJTktTICIgXCIke2xpYn1cIiIpCisgIGVsc2UoKQorICAgIHN0cmluZyhBUFBFTkQgX19JTVBMSUNUX0xJTktTICIgLWwke2xpYn0iKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKwogIyBMb2FkIGNvbXBpbGVyLXNwZWNpZmljIGluZm9ybWF0aW9uLgogaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCkKICAgaW5jbHVkZShDb21waWxlci8ke0NNQUtFX0NVREFfQ09NUElMRVJfSUR9LUNVREEgT1BUSU9OQUwpCkBAIC05NywyMiArMTEwLDEwIEBACiAjIENNQUtFX0NVREFfQ09NUElMRV9TRVBBUkFCTEVfQ09NUElMQVRJT04KICMgQ01BS0VfQ1VEQV9MSU5LX0VYRUNVVEFCTEUKIAotaWYoQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSKQoraWYoQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSIEFORCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQogICBzdHJpbmcoQVBQRU5EIF9DTUFLRV9DVURBX0VYVFJBX0ZMQUdTICIgLWNjYmluPTxDTUFLRV9DVURBX0hPU1RfQ09NUElMRVI+IikKIGVuZGlmKCkKIAotc2V0KF9fSU1QTElDVF9MSU5LUyApCi1mb3JlYWNoKGRpciAke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKLSAgc3RyaW5nKEFQUEVORCBfX0lNUExJQ1RfTElOS1MgIiAtTFwiJHtkaXJ9XCIiKQotZW5kZm9yZWFjaCgpCi1mb3JlYWNoKGxpYiAke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU30pCi0gIGlmKCR7bGlifSBNQVRDSEVTICIvIikKLSAgICBzdHJpbmcoQVBQRU5EIF9fSU1QTElDVF9MSU5LUyAiIFwiJHtsaWJ9XCIiKQotICBlbHNlKCkKLSAgICBzdHJpbmcoQVBQRU5EIF9fSU1QTElDVF9MSU5LUyAiIC1sJHtsaWJ9IikKLSAgZW5kaWYoKQotZW5kZm9yZWFjaCgpCi0KICMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkKIGlmKE5PVCBDTUFLRV9DVURBX0NSRUFURV9TSEFSRURfTElCUkFSWSkKICAgc2V0KENNQUtFX0NVREFfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZCkBAIC0xMjksNyArMTMwLDcgQEAKICAgc2V0KENNQUtFX0NVREFfQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9DVURBX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfQ1VEQV9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX0NVREFfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX0NVREFfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9DVURBX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0xMzgsMjQgKzEzOSwyNCBAQAogI1NwZWNpZnkgaG93IHRvIGNvbXBpbGUgd2hlbiBwdHggaGFzIGJlZW4gcmVxdWVzdGVkCiBpZihOT1QgQ01BS0VfQ1VEQV9DT01QSUxFX1BUWF9DT01QSUxBVElPTikKICAgc2V0KENNQUtFX0NVREFfQ09NUElMRV9QVFhfQ09NUElMQVRJT04KLSAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLXB0eCA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCisgICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+ICR7X0NNQUtFX0NPTVBJTEVfQVNfQ1VEQV9GTEFHfSAke19DTUFLRV9DVURBX1BUWF9GTEFHfSA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCiBlbmRpZigpCiAKICNTcGVjaWZ5IGhvdyB0byBjb21waWxlIHdoZW4gc2VwYXJhYmxlIGNvbXBpbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZAogaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRV9TRVBBUkFCTEVfQ09NUElMQVRJT04pCiAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVfU0VQQVJBQkxFX0NPTVBJTEFUSU9OCi0gICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IGN1IC1kYyA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCisgICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+ICR7X0NNQUtFX0NPTVBJTEVfQVNfQ1VEQV9GTEFHfSAtZGMgPFNPVVJDRT4gLW8gPE9CSkVDVD4iKQogZW5kaWYoKQogCiAjU3BlY2lmeSBob3cgdG8gY29tcGlsZSB3aGVuIHdob2xlIGNvbXBpbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZAogaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRV9XSE9MRV9DT01QSUxBVElPTikKICAgc2V0KENNQUtFX0NVREFfQ09NUElMRV9XSE9MRV9DT01QSUxBVElPTgotICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBjdSAtYyA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCisgICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+ICR7X0NNQUtFX0NPTVBJTEVfQVNfQ1VEQV9GTEFHfSAtYyA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCiBlbmRpZigpCiAKLWlmKENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEiIEFORCBOT1QgQ01BS0VfREVQRklMRV9GTEFHU19DVURBICkKK2lmKENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEiIEFORCBOT1QgQ01BS0VfREVQRklMRV9GTEFHU19DVURBKQogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX0RFUEVOREVOQ1lfREVURUNUSU9OCi0gICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IGN1IC1NIDxTT1VSQ0U+IC1NVCA8T0JKRUNUPiAtbyAkREVQX0ZJTEUiKQorICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLU0gPFNPVVJDRT4gLU1UIDxPQkpFQ1Q+IC1vICRERVBfRklMRSIpCiAgICNUaGUgTmluamEgZ2VuZXJhdG9yIHVzZXMgdGhlIG1ha2UgZmlsZSBkZXBlbmRlbmN5IGZpbGVzIHRvIGRldGVybWluZSB3aGF0CiAgICNmaWxlcyBuZWVkIHRvIGJlIHJlY29tcGlsZWQuIFVuZm9ydHVuYXRlbHksIG52Y2MgPCAxMC4yIGRvZXNuJ3Qgc3VwcG9ydCBidWlsZGluZwogICAjYSBzb3VyY2UgZmlsZSBhbmQgZ2VuZXJhdGluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIHNhaWQgZmlsZSBpbiBhIHNpbmdsZQpAQCAtMTkyLDE0ICsxOTMsMTMgQEAKICNUaGVzZSBhcmUgdXNlZCB3aGVuIGxpbmtpbmcgcmVsb2NhdGFibGUgKGRjKSBjdWRhIGNvZGUKIGlmKE5PVCBDTUFLRV9DVURBX0RFVklDRV9MSU5LX0xJQlJBUlkpCiAgIHNldChDTUFLRV9DVURBX0RFVklDRV9MSU5LX0xJQlJBUlkKLSAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiAke0NNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQ30gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9ETElOS19GTEFHU30iKQorICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiAke0NNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQ30gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9ETElOS19GTEFHU30iKQogZW5kaWYoKQogaWYoTk9UIENNQUtFX0NVREFfREVWSUNFX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0NVREFfREVWSUNFX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPEZMQUdTPiAke0NNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQ30gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9ETElOS19GTEFHU30iKQorICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiAke0NNQUtFX0NVREFfQ09NUElMRV9PUFRJT05TX1BJQ30gJHtfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHU30gLXNoYXJlZCAtZGxpbmsgPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9ETElOS19GTEFHU30iKQogZW5kaWYoKQogCi11bnNldChfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHUykKIHVuc2V0KF9fSU1QTElDVF9ETElOS19GTEFHUykKIAogc2V0KENNQUtFX0NVREFfSU5GT1JNQVRJT05fTE9BREVEIDEpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ1hYQ29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlQ1hYQ29tcGlsZXIuY21ha2UuaW4KaW5kZXggZWZiOGFiZi4uMDliZGMyMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUNYWENvbXBpbGVyLmNtYWtlLmluCisrKyBiL01vZHVsZXMvQ01ha2VDWFhDb21waWxlci5jbWFrZS5pbgpAQCAtMTcsNiArMTcsNyBAQAogc2V0KENNQUtFX0NYWF9DT01QSUxFUl9GUk9OVEVORF9WQVJJQU5UICJAQ01BS0VfQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlRAIikKIHNldChDTUFLRV9DWFhfU0lNVUxBVEVfVkVSU0lPTiAiQENNQUtFX0NYWF9TSU1VTEFURV9WRVJTSU9OQCIpCiBAX1NFVF9DTUFLRV9DWFhfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEQAorQF9TRVRfQ01BS0VfQ1hYX0NPTVBJTEVSX1NZU1JPT1RACiBAU0VUX01TVkNfQ1hYX0FSQ0hJVEVDVFVSRV9JREAKIEBTRVRfQ01BS0VfWENPREVfQVJDSFNACiBzZXQoQ01BS0VfQVIgIkBDTUFLRV9BUkAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUNYWEluZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUNYWEluZm9ybWF0aW9uLmNtYWtlCmluZGV4IGRhNzQ0MGEuLmRiYjQzNjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDWFhJbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlQ1hYSW5mb3JtYXRpb24uY21ha2UKQEAgLTI1OCw3ICsyNTgsNyBAQAogICBzZXQoQ01BS0VfQ1hYX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfQ1hYX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfQ1hYX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQorICBzZXQoQ01BS0VfQ1hYX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9DWFhfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9DWFhfQVJDSElWRV9GSU5JU0ggIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+IikKQEAgLTI2NywxMiArMjY3LDEyIEBACiAjIGNvbXBpbGUgYSBDKysgZmlsZSBpbnRvIGFuIG9iamVjdCBmaWxlCiBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+ICA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKKyAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFKQogICBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAgPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIGVuZGlmKCkKIAogbWFya19hc19hZHZhbmNlZCgKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDb21waWxlcklkRGV0ZWN0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUNvbXBpbGVySWREZXRlY3Rpb24uY21ha2UKaW5kZXggYmI1NzNiNy4uYWNkMTVkZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUNvbXBpbGVySWREZXRlY3Rpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUNvbXBpbGVySWREZXRlY3Rpb24uY21ha2UKQEAgLTg5LDkgKzg5LDggQEAKICAgICAgICkKICAgICBlbmRpZigpCiAKLSAgICAjQ3VycmVudGx5IHRoZSBvbmx5IENVREEgY29tcGlsZXJzIGFyZSBOVklESUEKICAgICBpZihsYW5nIFNUUkVRVUFMIENVREEpCi0gICAgICBzZXQob3JkZXJlZF9jb21waWxlcnMgTlZJRElBKQorICAgICAgc2V0KG9yZGVyZWRfY29tcGlsZXJzIE5WSURJQSBDbGFuZykKICAgICBlbmRpZigpCiAKICAgICBpZihDSURfSURfREVGSU5FKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZUFTTUNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUFTTUNvbXBpbGVyLmNtYWtlCmluZGV4IGU0N2YzYTQuLmJjOGI4NmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVBU01Db21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQVNNQ29tcGlsZXIuY21ha2UKQEAgLTEzNCw2ICsxMzQsOSBAQAogICAgICAgbGlzdChHRVQgX2FsbF9jb21waWxlaWRfbWF0Y2hlcyAiLTEiIENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRCkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKKworICBfY21ha2VfZmluZF9jb21waWxlcl9zeXNyb290KEFTTSR7QVNNX0RJQUxFQ1R9KQorCiAgIHVuc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0lEX09VVFBVVCkKICAgdW5zZXQoX2FsbF9jb21waWxlaWRfbWF0Y2hlcykKICAgdW5zZXQoX2NvbXBpbGVpZCkKQEAgLTIxMSw2ICsyMTQsMjEgQEAKICAgc2V0KF9DTUFLRV9BU01fJHtfdmFyfSAiJHtDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV8ke192YXJ9fSIpCiBlbmRmb3JlYWNoKCkKIAoraWYoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfU1lTUk9PVCkKKyAgc3RyaW5nKENPTkNBVCBfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9TWVNST09UCisgICAgInNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9TWVNST09UfVwiKVxuIgorICAgICJzZXQoQ01BS0VfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfU1lTUk9PVH1cIikiKQorZWxzZSgpCisgIHNldChfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9TWVNST09UICIiKQorZW5kaWYoKQorCitpZihDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0gpCisgIHNldChfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0gKKyAgICAic2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSCBbPT1bJHtDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0h9XT09XSkiKQorZWxzZSgpCisgIHNldChfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0ggIiIpCitlbmRpZigpCisKIGlmKENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRCkKICAgc2V0KF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRAogICAgICJzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEICR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEfSkiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDQ29tcGlsZXIuY21ha2UKaW5kZXggMDM3YzMzYi4uODY2ODNkMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ0NvbXBpbGVyLmNtYWtlCkBAIC05OSw3ICs5OSw3IEBACiAgICAgQ01BS0VfQ19DT01QSUxFUl9JRF9QTEFURk9STV9DT05URU5UKQogCiAgICMgVGhlIElBUiBjb21waWxlciBwcm9kdWNlcyB3ZWlyZCBvdXRwdXQuCi0gICMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMDE3NiNub3RlXzE1MzU5MQorICAjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xMDE3NiNub3RlXzE1MzU5MQogICBsaXN0KEFQUEVORCBDTUFLRV9DX0NPTVBJTEVSX0lEX1ZFTkRPUlMgSUFSKQogICBzZXQoQ01BS0VfQ19DT01QSUxFUl9JRF9WRU5ET1JfRkxBR1NfSUFSICkKICAgc2V0KENNQUtFX0NfQ09NUElMRVJfSURfVkVORE9SX1JFR0VYX0lBUiAiSUFSIC4rIENvbXBpbGVyIikKQEAgLTExNSw2ICsxMTUsOCBAQAogICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVySWQuY21ha2UpCiAgIENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9JRChDIENGTEFHUyBDTWFrZUNDb21waWxlcklkLmMpCiAKKyAgX2NtYWtlX2ZpbmRfY29tcGlsZXJfc3lzcm9vdChDKQorCiAgICMgU2V0IG9sZCBjb21waWxlciBhbmQgcGxhdGZvcm0gaWQgdmFyaWFibGVzLgogICBpZihDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiKQogICAgIHNldChDTUFLRV9DT01QSUxFUl9JU19HTlVDQyAxKQpAQCAtMTUzLDcgKzE1NSw3IEBACiAjIE5BTUVfV0UgY2Fubm90IGJlIHVzZWQgc2luY2UgdGhlbiB0aGlzIHRlc3Qgd2lsbCBmYWlsIGZvciBuYW1lcyBsaWtlCiAjICJhcm0tdW5rbm93bi1udG8tcW54Ni4zLjAtZ2NjLmV4ZSIsIHdoZXJlIEJBU0VOQU1FIHdvdWxkIGJlCiAjICJhcm0tdW5rbm93bi1udG8tcW54NiIgaW5zdGVhZCBvZiB0aGUgY29ycmVjdCAiYXJtLXVua25vd24tbnRvLXFueDYuMy4wLSIKLWlmIChDTUFLRV9DUk9TU0NPTVBJTElORyAgQU5EIE5PVCBfQ01BS0VfVE9PTENIQUlOX1BSRUZJWCkKK2lmIChOT1QgX0NNQUtFX1RPT0xDSEFJTl9QUkVGSVgpCiAKICAgaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJHTlV8Q2xhbmd8UUNDIikKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENPTVBJTEVSX0JBU0VOQU1FICIke0NNQUtFX0NfQ09NUElMRVJ9IiBOQU1FKQpAQCAtMTkxLDYgKzE5MywxNCBAQAogaW5jbHVkZShDb21waWxlci8ke0NNQUtFX0NfQ09NUElMRVJfSUR9LUZpbmRCaW5VdGlscyBPUFRJT05BTCkKIHVuc2V0KF9DTUFLRV9QUk9DRVNTSU5HX0xBTkdVQUdFKQogCitpZihDTUFLRV9DX0NPTVBJTEVSX1NZU1JPT1QpCisgIHN0cmluZyhDT05DQVQgX1NFVF9DTUFLRV9DX0NPTVBJTEVSX1NZU1JPT1QKKyAgICAic2V0KENNQUtFX0NfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQ19DT01QSUxFUl9TWVNST09UfVwiKVxuIgorICAgICJzZXQoQ01BS0VfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQ19DT01QSUxFUl9TWVNST09UfVwiKSIpCitlbHNlKCkKKyAgc2V0KF9TRVRfQ01BS0VfQ19DT01QSUxFUl9TWVNST09UICIiKQorZW5kaWYoKQorCiBpZihDTUFLRV9DX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRCkKICAgc2V0KF9TRVRfQ01BS0VfQ19DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQKICAgICAic2V0KENNQUtFX0NfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEICR7Q01BS0VfQ19DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUR9KSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ1VEQUNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNVREFDb21waWxlci5jbWFrZQppbmRleCBiYWYxNTAxLi5mYTQ5N2NkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ1VEQUNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDVURBQ29tcGlsZXIuY21ha2UKQEAgLTIsNyArMiw3IEBACiAjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCiAKIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UpCi1pbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy8vQ01ha2VQYXJzZUltcGxpY2l0TGlua0luZm8uY21ha2UpCitpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZVBhcnNlSW1wbGljaXRMaW5rSW5mby5jbWFrZSkKIAogaWYoIE5PVCAoICgiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJNYWtlIikgT1IKICAgICAgICAgICAoIiR7Q01BS0VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiTmluamEiKSBPUgpAQCAtNTEsMjkgKzUxLDIxMCBAQAogaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfSURfUlVOKQogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9SVU4gMSkKIAotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIuCisgIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZSkKKworICBpZigke0NNQUtFX0dFTkVSQVRPUn0gTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgICAgIyBXZSB3aWxsIG5vdCBrbm93IENNQUtFX0NVREFfQ09NUElMRVIgdW50aWwgdGhlIG1haW4gY29tcGlsZXIgaWQgc3RlcAorICAgICMgYmVsb3cgZXh0cmFjdHMgaXQsIGJ1dCB3ZSBkbyBrbm93IHRoYXQgdGhlIGNvbXBpbGVyIGlkIHdpbGwgYmUgTlZJRElBLgorICAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0lEICJOVklESUEiKQorICBlbHNlKCkKKyAgICAjIFdlIGRldGVybWluZSB0aGUgdmVuZG9yIHRvIGhlbHAgd2l0aCBmaW5kIHRoZSB0b29sa2l0IGFuZCB1c2UgdGhlIHJpZ2h0IGZsYWdzIGZvciBkZXRlY3Rpb24gcmlnaHQgYXdheS4KKyAgICAjIFRoZSBtYWluIGNvbXBpbGVyIGlkZW50aWZpY2F0aW9uIGlzIHN0aWxsIG5lZWRlZCBiZWxvdyB0byBleHRyYWN0IG90aGVyIGluZm9ybWF0aW9uLgorICAgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfQ09NUElMRVJfSURfVkVORE9SUyBOVklESUEgQ2xhbmcpCisgICAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfSURfVkVORE9SX1JFR0VYX05WSURJQSAibnZjYzogTlZJRElBIFxcKFJcXCkgQ3VkYSBjb21waWxlciBkcml2ZXIiKQorICAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0lEX1ZFTkRPUl9SRUdFWF9DbGFuZyAiKGNsYW5nIHZlcnNpb24pIikKKyAgICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfSURfVkVORE9SKENVREEgIi0tdmVyc2lvbiIpCisKKyAgICAjIEZpbmQgdGhlIENVREEgdG9vbGtpdC4gV2Ugc3RvcmUgdGhlIENNQUtFX0NVREFfQ09NUElMRVJfVE9PTEtJVF9ST09UIGFuZCBDTUFLRV9DVURBX0NPTVBJTEVSX0xJQlJBUllfUk9PVAorICAgICMgaW4gQ01ha2VDVURBQ29tcGlsZXIuY21ha2UsIHNvIEZpbmRDVURBVG9vbGtpdCBjYW4gYXZvaWQgc2VhcmNoaW5nIG9uIGZ1dHVyZSBydW5zIGFuZCB0aGUgdG9vbGtpdCBzdGF5cyB0aGUgc2FtZS4KKyAgICAjIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIEZpbmRDVURBVG9vbGtpdCwgYnV0IHNvbWV3aGF0IHNpbXBsaWZpZWQgc2luY2Ugd2UgY2FuIGlzc3VlIGZhdGFsIGVycm9ycworICAgICMgaWYgd2UgZmFpbCB0byBmaW5kIHRoaW5ncyB3ZSBuZWVkIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGFjY291bnQgZm9yIHNlYXJjaGluZyB0aGUgbGlicmFyaWVzLgorCisgICAgIyBGb3IgTlZDQyB3ZSBjYW4gZWFzaWx5IGRlZHVjZSB0aGUgU0RLIGJpbmFyeSBkaXJlY3RvcnkgZnJvbSB0aGUgY29tcGlsZXIgcGF0aC4KKyAgICBpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICAgICAgc2V0KF9DVURBX05WQ0NfRVhFQ1VUQUJMRSAiJHtDTUFLRV9DVURBX0NPTVBJTEVSfSIpCisgICAgZWxzZSgpCisgICAgICAjIFNlYXJjaCB1c2luZyBDVURBVG9vbGtpdF9ST09UIGFuZCB0aGVuIENVREFfUEFUSCBmb3IgZXF1aXZhbGVuY2Ugd2l0aCBGaW5kQ1VEQVRvb2xraXQuCisgICAgICAjIEluIEZpbmRDVURBVG9vbGtpdCBDVURBVG9vbGtpdF9ST09UIGlzIHNlYXJjaGVkIGF1dG9tYXRpY2FsbHkgZHVlIHRvIGJlaW5nIGluIGEgZmluZF9wYWNrYWdlKCkuCisgICAgICAjIEZpcnN0IHdlIHNlYXJjaCBjYW5kaWRhdGUgbm9uLWRlZmF1bHQgcGF0aHMgdG8gZ2l2ZSB0aGVtIHByaW9yaXR5LgorICAgICAgZmluZF9wcm9ncmFtKF9DVURBX05WQ0NfRVhFQ1VUQUJMRQorICAgICAgICBOQU1FUyBudmNjIG52Y2MuZXhlCisgICAgICAgIFBBVEhTICR7Q1VEQVRvb2xraXRfUk9PVH0KKyAgICAgICAgRU5WIENVREFUb29sa2l0X1JPT1QKKyAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbgorICAgICAgICBOT19ERUZBVUxUX1BBVEgKKyAgICAgICkKKworICAgICAgIyBJZiB3ZSBkaWRuJ3QgZmluZCBOVkNDLCB0aGVuIHRyeSB0aGUgZGVmYXVsdCBwYXRocy4KKyAgICAgIGZpbmRfcHJvZ3JhbShfQ1VEQV9OVkNDX0VYRUNVVEFCTEUKKyAgICAgICAgTkFNRVMgbnZjYyBudmNjLmV4ZQorICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbgorICAgICAgKQorCisgICAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBDVURBVG9vbGtpdF9ST09UIGJ1dCBudmNjIGNvdWxkIG5vdCBiZSBmb3VuZCwgdGhpcyBpcyBhbiBlcnJvci4KKyAgICAgIGlmKE5PVCBfQ1VEQV9OVkNDX0VYRUNVVEFCTEUgQU5EIChERUZJTkVEIENVREFUb29sa2l0X1JPT1QgT1IgREVGSU5FRCBFTlZ7Q1VEQVRvb2xraXRfUk9PVH0pKQorICAgICAgICBzZXQoZmFpbF9iYXNlICJDb3VsZCBub3QgZmluZCBudmNjIGV4ZWN1dGFibGUgaW4gcGF0aCBzcGVjaWZpZWQgYnkiKQorCisgICAgICAgIGlmKERFRklORUQgQ1VEQVRvb2xraXRfUk9PVCkKKyAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIke2ZhaWxfYmFzZX0gQ1VEQVRvb2xraXRfUk9PVD0ke0NVREFUb29sa2l0X1JPT1R9IikKKyAgICAgICAgZWxzZWlmKERFRklORUQgRU5We0NVREFUb29sa2l0X1JPT1R9KQorICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7ZmFpbF9iYXNlfSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDVURBVG9vbGtpdF9ST09UPSRFTlZ7Q1VEQVRvb2xraXRfUk9PVH0iKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisKKyAgICAgICMgQ1VEQVRvb2xraXRfUk9PVCBjbWFrZS9lbnYgdmFyaWFibGUgbm90IHNwZWNpZmllZCwgdHJ5IHBsYXRmb3JtIGRlZmF1bHRzLgorICAgICAgIworICAgICAgIyAtIExpbnV4OiAvdXNyL2xvY2FsL2N1ZGEtWC5ZCisgICAgICAjIC0gbWFjT1M6IC9EZXZlbG9wZXIvTlZJRElBL0NVREEtWC5ZCisgICAgICAjIC0gV2luZG93czogQzpcUHJvZ3JhbSBGaWxlc1xOVklESUEgR1BVIENvbXB1dGluZyBUb29sa2l0XENVREFcdlguWQorICAgICAgIworICAgICAgIyBXZSB3aWxsIGFsc28gc2VhcmNoIHRoZSBkZWZhdWx0IHN5bWxpbmsgbG9jYXRpb24gL3Vzci9sb2NhbC9jdWRhIGZpcnN0IHNpbmNlCisgICAgICAjIGlmIENVREFUb29sa2l0X1JPT1QgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBzeW1saW5rZWQKKyAgICAgICMgZGlyZWN0b3J5IGlzIHRoZSBkZXNpcmVkIGxvY2F0aW9uLgorICAgICAgaWYoTk9UIF9DVURBX05WQ0NfRVhFQ1VUQUJMRSkKKyAgICAgICAgaWYoVU5JWCkKKyAgICAgICAgICBpZihOT1QgQVBQTEUpCisgICAgICAgICAgICBzZXQocGxhdGZvcm1fYmFzZSAiL3Vzci9sb2NhbC9jdWRhLSIpCisgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICBzZXQocGxhdGZvcm1fYmFzZSAiL0RldmVsb3Blci9OVklESUEvQ1VEQS0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KHBsYXRmb3JtX2Jhc2UgIkM6XFxQcm9ncmFtIEZpbGVzXFxOVklESUEgR1BVIENvbXB1dGluZyBUb29sa2l0XFxDVURBXFx2IikKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgQnVpbGQgb3V0IGEgZGVzY2VuZGluZyBsaXN0IG9mIHBvc3NpYmxlIGN1ZGEgaW5zdGFsbGF0aW9ucywgZS5nLgorICAgICAgICBmaWxlKEdMT0IgcG9zc2libGVfcGF0aHMgIiR7cGxhdGZvcm1fYmFzZX0qIikKKyAgICAgICAgIyBJdGVyYXRlIHRoZSBnbG9iIHJlc3VsdHMgYW5kIGNyZWF0ZSBhIGRlc2NlbmRpbmcgbGlzdC4KKyAgICAgICAgc2V0KHZlcnNpb25zKQorICAgICAgICBmb3JlYWNoKHAgJHtwb3NzaWJsZV9wYXRoc30pCisgICAgICAgICAgIyBFeHRyYWN0IHZlcnNpb24gbnVtYmVyIGZyb20gZW5kIG9mIHN0cmluZworICAgICAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiWzAtOV1bMC05XT9cXC5bMC05XSQiIHBfdmVyc2lvbiAke3B9KQorICAgICAgICAgIGlmKElTX0RJUkVDVE9SWSAke3B9IEFORCBwX3ZlcnNpb24pCisgICAgICAgICAgICBsaXN0KEFQUEVORCB2ZXJzaW9ucyAke3BfdmVyc2lvbn0pCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRmb3JlYWNoKCkKKworICAgICAgICAjIFNvcnQgbnVtZXJpY2FsbHkgaW4gZGVzY2VuZGluZyBvcmRlciwgc28gd2UgdHJ5IHRoZSBuZXdlc3QgdmVyc2lvbnMgZmlyc3QuCisgICAgICAgIGxpc3QoU09SVCB2ZXJzaW9ucyBDT01QQVJFIE5BVFVSQUwgT1JERVIgREVTQ0VORElORykKKworICAgICAgICAjIFdpdGggYSBkZXNjZW5kaW5nIGxpc3Qgb2YgdmVyc2lvbnMsIHBvcHVsYXRlIHBvc3NpYmxlIHBhdGhzIHRvIHNlYXJjaC4KKyAgICAgICAgc2V0KHNlYXJjaF9wYXRocykKKyAgICAgICAgZm9yZWFjaCh2ICR7dmVyc2lvbnN9KQorICAgICAgICAgIGxpc3QoQVBQRU5EIHNlYXJjaF9wYXRocyAiJHtwbGF0Zm9ybV9iYXNlfSR7dn0iKQorICAgICAgICBlbmRmb3JlYWNoKCkKKworICAgICAgICAjIEZvcmNlIHRoZSBnbG9iYWwgZGVmYXVsdCAvdXNyL2xvY2FsL2N1ZGEgdG8gdGhlIGZyb250IG9uIFVuaXguCisgICAgICAgIGlmKFVOSVgpCisgICAgICAgICAgbGlzdChJTlNFUlQgc2VhcmNoX3BhdGhzIDAgIi91c3IvbG9jYWwvY3VkYSIpCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICAjIE5vdyBzZWFyY2ggZm9yIG52Y2MgYWdhaW4gdXNpbmcgdGhlIHBsYXRmb3JtIGRlZmF1bHQgc2VhcmNoIHBhdGhzLgorICAgICAgICBmaW5kX3Byb2dyYW0oX0NVREFfTlZDQ19FWEVDVVRBQkxFCisgICAgICAgICAgTkFNRVMgbnZjYyBudmNjLmV4ZQorICAgICAgICAgIFBBVEhTICR7c2VhcmNoX3BhdGhzfQorICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluCisgICAgICAgICkKKworICAgICAgICAjIFdlIGFyZSBkb25lIHdpdGggdGhlc2UgdmFyaWFibGVzIG5vdywgY2xlYW51cC4KKyAgICAgICAgdW5zZXQocGxhdGZvcm1fYmFzZSkKKyAgICAgICAgdW5zZXQocG9zc2libGVfcGF0aHMpCisgICAgICAgIHVuc2V0KHZlcnNpb25zKQorICAgICAgICB1bnNldChzZWFyY2hfcGF0aHMpCisKKyAgICAgICAgaWYoTk9UIF9DVURBX05WQ0NfRVhFQ1VUQUJMRSkKKyAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBudmNjLCBwbGVhc2Ugc2V0IENVREFUb29sa2l0X1JPT1QuIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKworICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1QgIiR7X0NVREFfTlZDQ19FWEVDVVRBQkxFfSIgRElSRUNUT1JZKQorICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1QgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9IiBESVJFQ1RPUlkpCisKKyAgICAjIENNQUtFX0NVREFfQ09NUElMRVJfTElCUkFSWV9ST09UIGNvbnRhaW5zIHRoZSBkZXZpY2UgbGlicmFyeSBhbmQgdmVyc2lvbiBmaWxlLgorICAgICMgSW4gYSBub24tc2NhdHRlcmVkIGluc3RhbGxhdGlvbiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gQ01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1QuCisgICAgIyBXZSBmaXJzdCBjaGVjayBmb3IgYSBub24tc2NhdHRlcmVkIGluc3RhbGxhdGlvbiB0byBwcmVmZXIgaXQgb3ZlciBhIHNjYXR0ZXJlZCBpbnN0YWxsYXRpb24uCisgICAgaWYoRVhJU1RTICIke0NNQUtFX0NVREFfQ09NUElMRVJfVE9PTEtJVF9ST09UfS92ZXJzaW9uLnR4dCIpCisgICAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9IikKKyAgICBlbHNlaWYoQ01BS0VfU1lTUk9PVF9MSU5LIEFORCBFWElTVFMgIiR7Q01BS0VfU1lTUk9PVF9MSU5LfS91c3IvbGliL2N1ZGEvdmVyc2lvbi50eHQiKQorICAgICAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfTElCUkFSWV9ST09UICIke0NNQUtFX1NZU1JPT1RfTElOS30vdXNyL2xpYi9jdWRhIikKKyAgICBlbHNlaWYoRVhJU1RTICIke0NNQUtFX1NZU1JPT1R9L3Vzci9saWIvY3VkYS92ZXJzaW9uLnR4dCIpCisgICAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QgIiR7Q01BS0VfU1lTUk9PVH0vdXNyL2xpYi9jdWRhIikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9GTEFHU19BTFdBWVMgIi12IikKKworICBpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICAgIHNldChudmNjX3Rlc3RfZmxhZ3MgIi0ta2VlcCAtLWtlZXAtZGlyIHRtcCIpCisgICAgaWYoQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSKQorICAgICAgc3RyaW5nKEFQUEVORCBudmNjX3Rlc3RfZmxhZ3MgIiAtY2NiaW49XCIke0NNQUtFX0NVREFfSE9TVF9DT01QSUxFUn1cIiIpCisgICAgZW5kaWYoKQorICBlbHNlaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiQ2xhbmciKQorICAgIGlmKFdJTjMyKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ2xhbmcgd2l0aCBDVURBIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIFdpbmRvd3MuIFNlZSBDTWFrZSBpc3N1ZSAjMjA3NzYuIikKKyAgICBlbmRpZigpCisKKyAgICBzZXQoY2xhbmdfdGVzdF9mbGFncyAiLS1jdWRhLXBhdGg9XCIke0NNQUtFX0NVREFfQ09NUElMRVJfTElCUkFSWV9ST09UfVwiIikKKyAgICBpZihDTUFLRV9DUk9TU0NPTVBJTElORykKKyAgICAgICMgTmVlZCB0byBwYXNzIHRoZSBob3N0IHRhcmdldCBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcyBpZiB3ZSdyZSBjcm9zc2NvbXBpbGluZy4KKyAgICAgIHN0cmluZyhBUFBFTkQgY2xhbmdfdGVzdF9mbGFncyAiIC0tc3lzcm9vdD1cIiR7Q01BS0VfU1lTUk9PVH1cIiAtLXRhcmdldD0ke0NNQUtFX0NVREFfQ09NUElMRVJfVEFSR0VUfSIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgIyBGaXJzdCB0cnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgYXJjaGl0ZWN0dXJlcy4KKyAgaWYoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTKQorICAgIHNldChjbGFuZ19hcmNocyAiJHtjbGFuZ190ZXN0X2ZsYWdzfSIpCisgICAgc2V0KG52Y2NfYXJjaHMgIiR7bnZjY190ZXN0X2ZsYWdzfSIpCisKKyAgICBmb3JlYWNoKGFyY2ggJHtDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVN9KQorICAgICAgIyBTdHJpcCBzcGVjaWZpZXJzIGFzIFBUWCB2cyBiaW5hcnkgZG9lc24ndCBtYXR0ZXIuCisgICAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIlswLTldKyIgYXJjaF9uYW1lICIke2FyY2h9IikKKyAgICAgIHN0cmluZyhBUFBFTkQgY2xhbmdfYXJjaHMgIiAtLWN1ZGEtZ3B1LWFyY2g9c21fJHthcmNoX25hbWV9IikKKyAgICAgIHN0cmluZyhBUFBFTkQgbnZjY19hcmNocyAiIC1nZW5jb2RlPWFyY2g9Y29tcHV0ZV8ke2FyY2hfbmFtZX0sY29kZT1zbV8ke2FyY2hfbmFtZX0iKQorICAgICAgbGlzdChBUFBFTkQgdGVzdGVkX2FyY2hpdGVjdHVyZXMgIiR7YXJjaF9uYW1lfSIpCisgICAgZW5kZm9yZWFjaCgpCisKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEX1RFU1RfRkxBR1NfRklSU1QgIiR7Y2xhbmdfYXJjaHN9IikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEX1RFU1RfRkxBR1NfRklSU1QgIiR7bnZjY19hcmNoc30iKQorICBlbmRpZigpCisKKyAgIyBGYWxsYmFjayBkZWZhdWx0IE5WQ0MgZmxhZ3MuCisgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfQ09NUElMRVJfSURfVEVTVF9GTEFHU19GSVJTVCAke252Y2NfdGVzdF9mbGFnc30pCisKKyAgIyBDbGFuZyBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2VsZWN0IGFuIGFyY2hpdGVjdHVyZSBzdXBwb3J0ZWQgYnkgdGhlIFNESy4KKyAgIyBUcnkgaW4gcmV2ZXJzZSBvcmRlciBvZiBkZXByZWNhdGlvbiB3aXRoIHRoZSBtb3N0IHJlY2VudCBhdCBmcm9udCAoaS5lLiB0aGUgbW9zdCBsaWtlbHkgdG8gd29yayBmb3IgbmV3IHNldHVwcykuCisgIGZvcmVhY2goYXJjaCAiMjAiICIzMCIgIjUyIikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEX1RFU1RfRkxBR1NfRklSU1QgIiR7Y2xhbmdfdGVzdF9mbGFnc30gLS1jdWRhLWdwdS1hcmNoPXNtXyR7YXJjaH0iKQorICBlbmRmb3JlYWNoKCkKKworICAjIEZpbmFsbHkgYWxzbyB0cnkgdGhlIGRlZmF1bHQuCisgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfQ09NUElMRVJfSURfVEVTVF9GTEFHU19GSVJTVCAiJHtjbGFuZ190ZXN0X2ZsYWdzfSIpCisKKyAgIyBXZSBwZXJmb3JtIGNvbXBpbGVyIGlkZW50aWZpY2F0aW9uIGZvciBhIHNlY29uZCB0aW1lIHRvIGV4dHJhY3QgaW1wbGljaXQgbGlua2luZyBpbmZvIGFuZCBob3N0IGNvbXBpbGVyIGZvciBOVkNDLgorICAjIFdlIGFsc28gdXNlIGl0IHRvIHZlcmlmeSB0aGF0IENNQUtFX0NVREFfQVJDSElURUNUVVJFUyBhbmQgYWRkaXRpb25hbHkgb24gQ2xhbmcgdGhhdCBDVURBIHRvb2xraXQgcGF0aCB3b3Jrcy4KKyAgIyBUaGUgbGF0dGVyIGNvdWxkIGJlIGRvbmUgZHVyaW5nIGNvbXBpbGVyIHRlc3RpbmcgaW4gdGhlIGZ1dHVyZSB0byBhdm9pZCBkb2luZyB0aGlzIGZvciBDbGFuZy4KKyAgIyBXZSBuZWVkIHRvIHVuc2V0IHRoZSBjb21waWxlciBJRCBvdGhlcndpc2UgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKCkgZG9lc24ndCB3b3JrLgogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCkKICAgc2V0KENNQUtFX0NVREFfUExBVEZPUk1fSUQpCiAgIGZpbGUoUkVBRCAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VQbGF0Zm9ybUlkLmguaW4KICAgICBDTUFLRV9DVURBX0NPTVBJTEVSX0lEX1BMQVRGT1JNX0NPTlRFTlQpCiAKLSAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9NQVRDSF9WRU5ET1JTIE5WSURJQSkKLSAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfSURfTUFUQ0hfVkVORE9SX1JFR0VYX05WSURJQSAibnZjYzogTlZJRElBIFwoUlwpIEN1ZGEgY29tcGlsZXIgZHJpdmVyIikKKyAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKENVREEgQ1VEQUZMQUdTIENNYWtlQ1VEQUNvbXBpbGVySWQuY3UpCiAKLSAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9JRF9UT09MX01BVENIX1JFR0VYICJcbkxkW15cbl0qKFxuWyBcdF0rW15cbl0qKSpcblsgXHRdKyhbXiBcdFxyXG5dKylbXlxyXG5dKi1vW15cclxuXSpDb21waWxlcklkQ1VEQS8oXFwuLyk/KENvbXBpbGVySWRDVURBLnhjdGVzdC8pP0NvbXBpbGVySWRDVURBWyBcdFxuXFxcIl0iKQotICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEX1RPT0xfTUFUQ0hfSU5ERVggMikKLQotICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9GTEFHU19BTFdBWVMgLXYgLS1rZWVwIC0ta2VlcC1kaXIgdG1wKQotICBpZihDTUFLRV9DVURBX0hPU1RfQ09NUElMRVIpCi0gICAgICBsaXN0KEFQUEVORCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEX0ZMQUdTX0FMV0FZUyAiLWNjYmluPSR7Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSfSIpCisgIGlmKCR7Q01BS0VfR0VORVJBVE9SfSBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICAjIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHBhdGggdG8gbnZjYywgd2UgY2FuIGNvbXB1dGUgdGhlIHRvb2xraXQgcm9vdC4KKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENNQUtFX0NVREFfQ09NUElMRVJfVE9PTEtJVF9ST09UICIke0NNQUtFX0NVREFfQ09NUElMRVJ9IiBESVJFQ1RPUlkpCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVCAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVH0iIERJUkVDVE9SWSkKKyAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9IikKICAgZW5kaWYoKQogCi0gIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKENVREEgQ1VEQUZMQUdTIENNYWtlQ1VEQUNvbXBpbGVySWQuY3UpCisgIF9jbWFrZV9maW5kX2NvbXBpbGVyX3N5c3Jvb3QoQ1VEQSkKIGVuZGlmKCkKIAogc2V0KF9DTUFLRV9QUk9DRVNTSU5HX0xBTkdVQUdFICJDVURBIikKIGluY2x1ZGUoQ01ha2VGaW5kQmluVXRpbHMpCitpbmNsdWRlKENvbXBpbGVyLyR7Q01BS0VfQ1VEQV9DT01QSUxFUl9JRH0tRmluZEJpblV0aWxzIE9QVElPTkFMKQogdW5zZXQoX0NNQUtFX1BST0NFU1NJTkdfTEFOR1VBR0UpCiAKIGlmKE1TVkNfQ1VEQV9BUkNISVRFQ1RVUkVfSUQpCkBAIC0xMDAsNyArMjgxLDcxIEBACiAgIGVuZGlmKCkKICAgc2V0KF9TRVRfQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVAogICAgICJzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVCBcIiR7Q01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVH1cIikiKQotZWxzZWlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgTlZJRElBKQorZWxzZWlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgaWYoTk9UIENNQUtFX0NVREFfQVJDSElURUNUVVJFUykKKyAgICAjIEZpbmQgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBjb21waWxlZCB1c2luZyBhbmQgc2V0IGl0IGFzIHRoZSBkZWZhdWx0LgorICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiLXRhcmdldC1jcHUgc21fKFswLTldKykiIGRvbnRfY2FyZSAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQorICAgIHNldChkZXRlY3RlZF9hcmNoaXRlY3R1cmUgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICBlbHNlKCkKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0hBTEwgIi10YXJnZXQtY3B1IHNtXyhbMC05XSspIiB0YXJnZXRfY3B1cyAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQorCisgICAgZm9yZWFjaChjcHUgJHt0YXJnZXRfY3B1c30pCisgICAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIi10YXJnZXQtY3B1IHNtXyhbMC05XSspIiBkb250X2NhcmUgIiR7Y3B1fSIpCisgICAgICBsaXN0KEFQUEVORCBhcmNoaXRlY3R1cmVzICIke0NNQUtFX01BVENIXzF9IikKKyAgICBlbmRmb3JlYWNoKCkKKyAgZW5kaWYoKQorCisgICMgRmluZCB0YXJnZXQgZGlyZWN0b3J5LiBBY2NvdW50IGZvciBjcm9zc2NvbXBpbGluZy4KKyAgaWYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCisgICAgaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiYXJtdjctYSIpCisgICAgICAjIFN1cHBvcnQgZm9yIE5WUEFDSworICAgICAgc2V0KF9DVURBX1RBUkdFVF9OQU1FICJhcm12Ny1saW51eC1hbmRyb2lkZWFiaSIpCisgICAgZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgTUFUQ0hFUyAiYXJtIikKKyAgICAgIHNldChfQ1VEQV9UQVJHRVRfTkFNRSAiYXJtdjctbGludXgtZ251ZWFiaWhmIikKKyAgICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVTICJhYXJjaDY0IikKKyAgICAgIGlmKEFORFJPSURfQVJDSF9OQU1FIFNUUkVRVUFMICJhcm02NCIpCisgICAgICAgIHNldChfQ1VEQV9UQVJHRVRfTkFNRSAiYWFyY2g2NC1saW51eC1hbmRyb2lkZWFiaSIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KF9DVURBX1RBUkdFVF9OQU1FICJhYXJjaDY0LWxpbnV4IikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAieDg2XzY0IikKKyAgICAgIHNldChfQ1VEQV9UQVJHRVRfTkFNRSAieDg2XzY0LWxpbnV4IikKKyAgICBlbmRpZigpCisKKyAgICBpZihFWElTVFMgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9L3RhcmdldHMvJHtfQ1VEQV9UQVJHRVRfTkFNRX0iKQorICAgICAgc2V0KF9DVURBX1RBUkdFVF9ESVIgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9L3RhcmdldHMvJHtfQ1VEQV9UQVJHRVRfTkFNRX0iKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgc2V0KF9DVURBX1RBUkdFVF9ESVIgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9IikKKyAgZW5kaWYoKQorCisgICMgV2UgY2FuJ3QgdXNlIGZpbmRfbGlicmFyeSgpIHlldCBhdCB0aGlzIHBvaW50LCBzbyB0cnkgYSBmZXcgZ3Vlc3Nlcy4KKyAgaWYoRVhJU1RTICIke19DVURBX1RBUkdFVF9ESVJ9L2xpYjY0IikKKyAgICBzZXQoX0NVREFfTElCUkFSWV9ESVIgIiR7X0NVREFfVEFSR0VUX0RJUn0vbGliNjQiKQorICBlbHNlaWYoRVhJU1RTICIke19DVURBX1RBUkdFVF9ESVJ9L2xpYi94NjQiKQorICAgIHNldChfQ1VEQV9MSUJSQVJZX0RJUiAiJHtfQ1VEQV9UQVJHRVRfRElSfS9saWIveDY0IikKKyAgZWxzZWlmKEVYSVNUUyAiJHtfQ1VEQV9UQVJHRVRfRElSfS9saWIiKQorICAgIHNldChfQ1VEQV9MSUJSQVJZX0RJUiAiJHtfQ1VEQV9UQVJHRVRfRElSfS9saWIiKQorICBlbHNlKCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gZmluZCBfQ1VEQV9MSUJSQVJZX0RJUiBiYXNlZCBvbiBfQ1VEQV9UQVJHRVRfRElSPSR7X0NVREFfVEFSR0VUX0RJUn0iKQorICBlbmRpZigpCisKKyAgIyBfQ1VEQV9UQVJHRVRfRElSIGFsd2F5cyBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbmNsdWRlIGRpcmVjdG9yeS4KKyAgIyBPbiBhIHNjYXR0ZXJlZCBpbnN0YWxsYXRpb24gL3Vzciwgb24gYSBub24tc2NhdHRlcmVkIHNvbWV0aGluZyBsaWtlIC91c3IvbG9jYWwvY3VkYSBvciAvdXNyL2xvY2FsL2N1ZGEtMTAuMi90YXJnZXRzL2FhcmNoNjQtbGludXguCisgIGlmKEVYSVNUUyAiJHtfQ1VEQV9UQVJHRVRfRElSfS9pbmNsdWRlL2N1ZGFfcnVudGltZS5oIikKKyAgICBzZXQoX0NVREFfSU5DTFVERV9ESVIgIiR7X0NVREFfVEFSR0VUX0RJUn0vaW5jbHVkZSIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBmaW5kIGN1ZGFfcnVudGltZS5oIGluIFwiJHtfQ1VEQV9UQVJHRVRfRElSfS9pbmNsdWRlXCIgZm9yIF9DVURBX0lOQ0xVREVfRElSLiIpCisgIGVuZGlmKCkKKworICAjIENsYW5nIGRvZXMgbm90IGFkZCBhbnkgQ1VEQSBTREsgbGlicmFyaWVzIG9yIGRpcmVjdG9yaWVzIHdoZW4gaW52b2tpbmcgdGhlIGhvc3QgbGlua2VyLgorICAjIEFkZCB0aGUgQ1VEQSB0b29sa2l0IGxpYnJhcnkgZGlyZWN0b3J5IG91cnNlbHZlcyBzbyB0aGF0IGxpbmtpbmcgd29ya3MuCisgICMgVGhlIENVREEgcnVudGltZSBsaWJyYXJpZXMgYXJlIGhhbmRsZWQgZWxzZXdoZXJlIGJ5IENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZLgorICBzZXQoQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7X0NVREFfSU5DTFVERV9ESVJ9IikKKyAgc2V0KENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTICIke19DVURBX0xJQlJBUllfRElSfSIpCisgIHNldChDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgIiIpCisgIHNldChDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19GUkFNRVdPUktfRElSRUNUT1JJRVMgIiIpCitlbHNlaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKICAgc2V0KF9udmNjX2xvZyAiIikKICAgc3RyaW5nKFJFUExBQ0UgIlxyIiAiIiBfbnZjY19vdXRwdXRfb3JpZyAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQogICBpZihfbnZjY19vdXRwdXRfb3JpZyBNQVRDSEVTICIjXFxcJCArUEFUSD0gKihbXlxuXSopXG4iKQpAQCAtMjExLDQyICs0NTYsMTIwIEBACiAgICAgICAiUGFyc2VkIENVREEgbnZjYyBpbXBsaWNpdCBsaW5rIGluZm9ybWF0aW9uIGZyb20gYWJvdmUgb3V0cHV0OlxuJHtfbnZjY19sb2d9XG4ke2xvZ31cblxuIikKICAgZWxzZSgpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwotICAgICAgIkZhaWxlZCB0byBwYXJzZWQgQ1VEQSBudmNjIGltcGxpY2l0IGxpbmsgaW5mb3JtYXRpb246XG4ke19udmNjX2xvZ31cblxuIikKKyAgICAgICJGYWlsZWQgdG8gcGFyc2UgQ1VEQSBudmNjIGltcGxpY2l0IGxpbmsgaW5mb3JtYXRpb246XG4ke19udmNjX2xvZ31cblxuIikKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZXh0cmFjdCBudmNjIGltcGxpY2l0IGxpbmsgbGluZS4iKQogICBlbmRpZigpCiBlbmRpZigpCiAKLXNldChDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUyApCi1zdHJpbmcoUkVQTEFDRSAiXHIiICIiIF9udmNjX291dHB1dF9vcmlnICIke0NNQUtFX0NVREFfQ09NUElMRVJfUFJPRFVDRURfT1VUUFVUfSIpCi1pZihfbnZjY19vdXRwdXRfb3JpZyBNQVRDSEVTICIjXFxcJCArSU5DTFVERVM9ICooW15cbl0qKVxuIikKLSAgc2V0KF9udmNjX2luY2x1ZGVzICIke0NNQUtFX01BVENIXzF9IikKLSAgc3RyaW5nKEFQUEVORCBfbnZjY19sb2cgIiAgZm91bmQgJ0lOQ0xVREVTPScgc3RyaW5nOiBbJHtfbnZjY19pbmNsdWRlc31dXG4iKQotZWxzZSgpCi0gIHNldChfbnZjY19pbmNsdWRlcyAiIikKLSAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICAgIiBfbnZjY19vdXRwdXRfbG9nICJcbiR7X252Y2Nfb3V0cHV0X29yaWd9IikKLSAgc3RyaW5nKEFQUEVORCBfbnZjY19sb2cgIiAgbm8gJ0lOQ0xVREVTPScgc3RyaW5nIGZvdW5kIGluIG52Y2Mgb3V0cHV0OiR7X252Y2Nfb3V0cHV0X2xvZ31cbiIpCi1lbmRpZigpCi1pZihfbnZjY19pbmNsdWRlcykKLSAgIyBhY3Jvc3MgYWxsIG9wZXJhdGluZyBzeXN0ZW0gZWFjaCBpbmNsdWRlIGRpcmVjdG9yeSBpcyBwcmVmaXhlZCB3aXRoIC1JCi0gIHNlcGFyYXRlX2FyZ3VtZW50cyhfbnZjY19vdXRwdXQgTkFUSVZFX0NPTU1BTkQgIiR7X252Y2NfaW5jbHVkZXN9IikKLSAgZm9yZWFjaChsaW5lIElOIExJU1RTIF9udmNjX291dHB1dCkKLSAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi1JIiAiIiBsaW5lICIke2xpbmV9IikKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGxpbmUgIiR7bGluZX0iIEFCU09MVVRFKQotICAgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTICIke2xpbmV9IikKLSAgZW5kZm9yZWFjaCgpCisjIENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBpcyBkZXRlY3RlZCBhYm92ZSBhcyB0aGUgbGlzdCBvZgorIyBsaWJyYXJpZXMgdGhhdCB0aGUgQ1VEQSBjb21waWxlciBpbXBsaWNpdGx5IHBhc3NlcyB0byB0aGUgaG9zdCBsaW5rZXIuCisjIENNYWtlIGludm9rZXMgdGhlIGhvc3QgbGlua2VyIGRpcmVjdGx5IGFuZCBzbyBuZWVkcyB0byBwYXNzIHRoZXNlIGxpYnJhcmllcy4KKyMgV2UgZmlsdGVyIG91dCB0aG9zZSB0aGF0IHNob3VsZCBub3QgYmUgcGFzc2VkIHVuY29uZGl0aW9uYWxseSBib3RoIGhlcmUKKyMgYW5kIGZyb20gQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBpbiBDTWFrZVRlc3RDVURBQ29tcGlsZXIuCitzZXQoQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU19FWENMVURFCisgICMgVGhlIENVREEgcnVudGltZSBsaWJyYXJpZXMgYXJlIGNvbnRyb2xsZWQgYnkgQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkuCisgIGN1ZGFydCAgICAgICAgY3VkYXJ0LmxpYgorICBjdWRhcnRfc3RhdGljIGN1ZGFydF9zdGF0aWMubGliCisgIGN1ZGFkZXZydCAgICAgY3VkYWRldnJ0LmxpYgogCi0gIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCi0gICAgIlBhcnNlZCBDVURBIG52Y2MgaW5jbHVkZSBpbmZvcm1hdGlvbiBmcm9tIGFib3ZlIG91dHB1dDpcbiR7X252Y2NfbG9nfVxuJHtsb2d9XG5cbiIpCisgICMgRGVwZW5kZW5jaWVzIG9mIHRoZSBDVURBIHN0YXRpYyBydW50aW1lIGxpYnJhcnkgb24gTGludXggaG9zdHMuCisgIHJ0CisgIHB0aHJlYWQKKyAgZGwKKyAgKQorbGlzdChSRU1PVkVfSVRFTSBDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTX0VYQ0xVREV9KQorCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX1NZU1JPT1QpCisgIHN0cmluZyhDT05DQVQgX1NFVF9DTUFLRV9DVURBX0NPTVBJTEVSX1NZU1JPT1QKKyAgICAic2V0KENNQUtFX0NVREFfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9TWVNST09UfVwiKVxuIgorICAgICJzZXQoQ01BS0VfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9TWVNST09UfVwiKSIpCiBlbHNlKCkKLSAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKLSAgICAiRmFpbGVkIHRvIGRldGVjdCBDVURBIG52Y2MgaW5jbHVkZSBpbmZvcm1hdGlvbjpcbiR7X252Y2NfbG9nfVxuXG4iKQorICBzZXQoX1NFVF9DTUFLRV9DVURBX0NPTVBJTEVSX1NZU1JPT1QgIiIpCitlbmRpZigpCisKKyMgRGV0ZXJtaW5lIENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICBzZXQoQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIHN0cmluZyhSRVBMQUNFICJcciIgIiIgX252Y2Nfb3V0cHV0X29yaWcgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9QUk9EVUNFRF9PVVRQVVR9IikKKyAgaWYoX252Y2Nfb3V0cHV0X29yaWcgTUFUQ0hFUyAiI1xcXCQgK0lOQ0xVREVTPSAqKFteXG5dKilcbiIpCisgICAgc2V0KF9udmNjX2luY2x1ZGVzICIke0NNQUtFX01BVENIXzF9IikKKyAgICBzdHJpbmcoQVBQRU5EIF9udmNjX2xvZyAiICBmb3VuZCAnSU5DTFVERVM9JyBzdHJpbmc6IFske19udmNjX2luY2x1ZGVzfV1cbiIpCisgIGVsc2UoKQorICAgIHNldChfbnZjY19pbmNsdWRlcyAiIikKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgICAiIF9udmNjX291dHB1dF9sb2cgIlxuJHtfbnZjY19vdXRwdXRfb3JpZ30iKQorICAgIHN0cmluZyhBUFBFTkQgX252Y2NfbG9nICIgIG5vICdJTkNMVURFUz0nIHN0cmluZyBmb3VuZCBpbiBudmNjIG91dHB1dDoke19udmNjX291dHB1dF9sb2d9XG4iKQorICBlbmRpZigpCisgIGlmKF9udmNjX2luY2x1ZGVzKQorICAgICMgYWNyb3NzIGFsbCBvcGVyYXRpbmcgc3lzdGVtIGVhY2ggaW5jbHVkZSBkaXJlY3RvcnkgaXMgcHJlZml4ZWQgd2l0aCAtSQorICAgIHNlcGFyYXRlX2FyZ3VtZW50cyhfbnZjY19vdXRwdXQgTkFUSVZFX0NPTU1BTkQgIiR7X252Y2NfaW5jbHVkZXN9IikKKyAgICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgX252Y2Nfb3V0cHV0KQorICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4tSSIgIiIgbGluZSAiJHtsaW5lfSIpCisgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGxpbmUgIiR7bGluZX0iIEFCU09MVVRFKQorICAgICAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7bGluZX0iKQorICAgIGVuZGZvcmVhY2goKQorCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKKyAgICAgICJQYXJzZWQgQ1VEQSBudmNjIGluY2x1ZGUgaW5mb3JtYXRpb24gZnJvbSBhYm92ZSBvdXRwdXQ6XG4ke19udmNjX2xvZ31cbiR7bG9nfVxuXG4iKQorICBlbHNlKCkKKyAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICAgIkZhaWxlZCB0byBkZXRlY3QgQ1VEQSBudmNjIGluY2x1ZGUgaW5mb3JtYXRpb246XG4ke19udmNjX2xvZ31cblxuIikKKyAgZW5kaWYoKQorCisgICMgUGFyc2UgZGVmYXVsdCBDVURBIGFyY2hpdGVjdHVyZS4KKyAgY21ha2VfcG9saWN5KEdFVCBDTVAwMTA0IF9DVURBX0NNUDAxMDQpCisgIGlmKE5PVCBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgQU5EIF9DVURBX0NNUDAxMDQgU1RSRVFVQUwgIk5FVyIpCisgICAgc3RyaW5nKFJFR0VYIE1BVENIICJhcmNoWyA9XWNvbXB1dGVfKFswLTldKykiIGRvbnRfY2FyZSAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQorICAgIHNldChkZXRlY3RlZF9hcmNoaXRlY3R1cmUgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICBlbHNlaWYoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTKQorICAgIHN0cmluZyhSRUdFWCBNQVRDSEFMTCAiLWFyY2ggY29tcHV0ZV8oWzAtOV0rKSIgdGFyZ2V0X2NwdXMgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9QUk9EVUNFRF9PVVRQVVR9IikKKworICAgIGZvcmVhY2goY3B1ICR7dGFyZ2V0X2NwdXN9KQorICAgICAgc3RyaW5nKFJFR0VYIE1BVENIICItYXJjaCBjb21wdXRlXyhbMC05XSspIiBkb250X2NhcmUgIiR7Y3B1fSIpCisgICAgICBsaXN0KEFQUEVORCBhcmNoaXRlY3R1cmVzICIke0NNQUtFX01BVENIXzF9IikKKyAgICBlbmRmb3JlYWNoKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCisjIElmIHRoZSB1c2VyIGRpZG4ndCBzZXQgdGhlIGFyY2hpdGVjdHVyZXMsIHRoZW4gc2V0IHRoZW0gdG8gYSBkZWZhdWx0LgorIyBJZiB0aGUgdXNlciBkaWQsIHRoZW4gbWFrZSBzdXJlIHRob3NlIGFyY2hpdGVjdHVyZXMgd29ya2VkLgoraWYoREVGSU5FRCBkZXRlY3RlZF9hcmNoaXRlY3R1cmUgQU5EICIke0NNQUtFX0NVREFfQVJDSElURUNUVVJFU30iIFNUUkVRVUFMICIiKQorICBzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTICIke2RldGVjdGVkX2FyY2hpdGVjdHVyZX0iIENBQ0hFIFNUUklORyAiQ1VEQSBhcmNoaXRlY3R1cmVzIikKKworICBpZihOT1QgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBmaW5kIGEgd29ya2luZyBDVURBIGFyY2hpdGVjdHVyZS4iKQorICBlbmRpZigpCitlbHNlaWYoYXJjaGl0ZWN0dXJlcykKKyAgIyBTb3J0IHNpbmNlIG9yZGVyIG11c3RuJ3QgbWF0dGVyLgorICBsaXN0KFNPUlQgYXJjaGl0ZWN0dXJlcykKKyAgbGlzdChTT1JUIHRlc3RlZF9hcmNoaXRlY3R1cmVzKQorCisgICMgV2UgZG9uJ3QgZGlzdGluZ3Vpc2ggcmVhbC92aXJ0dWFsIGFyY2hpdGVjdHVyZXMgZHVyaW5nIHRlc3RpbmcuCisgICMgRm9yICI3MC1yZWFsOzcwLXZpcnR1YWwiIHdlIGRldGVjdCAiNzAiIGFzIHdvcmtpbmcgYW5kIHRlc3RlZF9hcmNoaXRlY3R1cmVzIGlzICI3MDs3MCIuCisgICMgVGh1cyB3ZSBuZWVkIHRvIHJlbW92ZSBkdXBsaWNhdGVzIGJlZm9yZSBjaGVja2luZyBpZiB0aGV5J3JlIGVxdWFsLgorICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIHRlc3RlZF9hcmNoaXRlY3R1cmVzKQorCisgIGlmKE5PVCAiJHthcmNoaXRlY3R1cmVzfSIgU1RSRVFVQUwgIiR7dGVzdGVkX2FyY2hpdGVjdHVyZXN9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiVGhlIENNQUtFX0NVREFfQVJDSElURUNUVVJFUzpcbiIKKyAgICAgICIgICR7Q01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTfVxuIgorICAgICAgImRvIG5vdCBhbGwgd29yayB3aXRoIHRoaXMgY29tcGlsZXIuICBUcnk6XG4iCisgICAgICAiICAke2FyY2hpdGVjdHVyZXN9XG4iCisgICAgICAiaW5zdGVhZC4iKQorICBlbmRpZigpCiBlbmRpZigpCiAKICMgY29uZmlndXJlIGFsbCB2YXJpYWJsZXMgc2V0IGluIHRoaXMgZmlsZQogY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlLmluCiAgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlCiAgIEBPTkxZCi0gICkKKykKKworIyBEb24ndCBsZWFrIHZhcmlhYmxlcyB1bm5lY2Vzc2FyaWx5IHRvIHVzZXIgY29kZS4KK3Vuc2V0KF9DVURBX0lOQ0xVREVfRElSIENBQ0hFKQordW5zZXQoX0NVREFfTlZDQ19FWEVDVVRBQkxFIENBQ0hFKQordW5zZXQoX0NVREFfTElCUkFSWV9ESVIpCit1bnNldChfQ1VEQV9UQVJHRVRfRElSKQordW5zZXQoX0NVREFfVEFSR0VUX05BTUUpCiAKIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0VOVl9WQVIgIkNVREFDWFgiKQogc2V0KENNQUtFX0NVREFfSE9TVF9DT01QSUxFUl9FTlZfVkFSICJDVURBSE9TVENYWCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ1hYQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ1hYQ29tcGlsZXIuY21ha2UKaW5kZXggNzI3NGVlYy4uNjYyYjgzMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNYWENvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDWFhDb21waWxlci5jbWFrZQpAQCAtOTQsNyArOTQsNyBAQAogICAgIENNQUtFX0NYWF9DT01QSUxFUl9JRF9QTEFURk9STV9DT05URU5UKQogCiAgICMgVGhlIElBUiBjb21waWxlciBwcm9kdWNlcyB3ZWlyZCBvdXRwdXQuCi0gICMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMDE3NiNub3RlXzE1MzU5MQorICAjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xMDE3NiNub3RlXzE1MzU5MQogICBsaXN0KEFQUEVORCBDTUFLRV9DWFhfQ09NUElMRVJfSURfVkVORE9SUyBJQVIpCiAgIHNldChDTUFLRV9DWFhfQ09NUElMRVJfSURfVkVORE9SX0ZMQUdTX0lBUiApCiAgIHNldChDTUFLRV9DWFhfQ09NUElMRVJfSURfVkVORE9SX1JFR0VYX0lBUiAiSUFSIC4rIENvbXBpbGVyIikKQEAgLTExMCw2ICsxMTAsOCBAQAogICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVySWQuY21ha2UpCiAgIENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9JRChDWFggQ1hYRkxBR1MgQ01ha2VDWFhDb21waWxlcklkLmNwcCkKIAorICBfY21ha2VfZmluZF9jb21waWxlcl9zeXNyb290KENYWCkKKwogICAjIFNldCBvbGQgY29tcGlsZXIgYW5kIHBsYXRmb3JtIGlkIHZhcmlhYmxlcy4KICAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiKQogICAgIHNldChDTUFLRV9DT01QSUxFUl9JU19HTlVDWFggMSkKQEAgLTE1MCw3ICsxNTIsNyBAQAogIyAiYXJtLXVua25vd24tbnRvLXFueDYiIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgImFybS11bmtub3duLW50by1xbng2LjMuMC0iCiAKIAotaWYgKENNQUtFX0NST1NTQ09NUElMSU5HICBBTkQgTk9UICBfQ01BS0VfVE9PTENIQUlOX1BSRUZJWCkKK2lmIChOT1QgX0NNQUtFX1RPT0xDSEFJTl9QUkVGSVgpCiAKICAgaWYoIiR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfSIgTUFUQ0hFUyAiR05VfENsYW5nfFFDQyIpCiAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDT01QSUxFUl9CQVNFTkFNRSAiJHtDTUFLRV9DWFhfQ09NUElMRVJ9IiBOQU1FKQpAQCAtMTg5LDYgKzE5MSwxNCBAQAogaW5jbHVkZShDb21waWxlci8ke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0tRmluZEJpblV0aWxzIE9QVElPTkFMKQogdW5zZXQoX0NNQUtFX1BST0NFU1NJTkdfTEFOR1VBR0UpCiAKK2lmKENNQUtFX0NYWF9DT01QSUxFUl9TWVNST09UKQorICBzdHJpbmcoQ09OQ0FUIF9TRVRfQ01BS0VfQ1hYX0NPTVBJTEVSX1NZU1JPT1QKKyAgICAic2V0KENNQUtFX0NYWF9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9DWFhfQ09NUElMRVJfU1lTUk9PVH1cIilcbiIKKyAgICAic2V0KENNQUtFX0NPTVBJTEVSX1NZU1JPT1QgXCIke0NNQUtFX0NYWF9DT01QSUxFUl9TWVNST09UfVwiKSIpCitlbHNlKCkKKyAgc2V0KF9TRVRfQ01BS0VfQ1hYX0NPTVBJTEVSX1NZU1JPT1QgIiIpCitlbmRpZigpCisKIGlmKENNQUtFX0NYWF9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQpCiAgIHNldChfU0VUX0NNQUtFX0NYWF9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQKICAgICAic2V0KENNQUtFX0NYWF9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQgJHtDTUFLRV9DWFhfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEfSkiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyLmNtYWtlCmluZGV4IGMzN2FkYWUuLjdjZDdjNDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UKQEAgLTUzLDYgKzUzLDIwIEBACiAgICAgICBOT19ERUZBVUxUX1BBVEgKICAgICAgIERPQyAiJHtsYW5nfSBjb21waWxlciIpCiAgIGVuZGlmKCkKKyAgaWYoQ01BS0VfSE9TVF9XSU4zMiBBTkQgQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphIikKKyAgICAjIE9uIFdpbmRvd3MgY29tbWFuZC1saW5lIGJ1aWxkcywgdGhlIE1ha2VmaWxlIGdlbmVyYXRvcnMgZWFjaCBpbXBseQorICAgICMgYSBwcmVmZXJyZWQgY29tcGlsZXIgdG9vbC4gIFRoZSBOaW5qYSBnZW5lcmF0b3IgZG9lcyBub3QgaW1wbHkgYQorICAgICMgY29tcGlsZXIgdG9vbCwgc28gdXNlIHRoZSBjb21waWxlciB0aGF0IG9jY3VycyBmaXJzdCBpbiBQQVRILgorICAgIGZpbmRfcHJvZ3JhbShDTUFLRV8ke2xhbmd9X0NPTVBJTEVSCisgICAgICBOQU1FUyAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfTElTVH0KKyAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgIERPQyAiJHtsYW5nfSBjb21waWxlciIKKyAgICAgIE5PX1BBQ0tBR0VfUk9PVF9QQVRICisgICAgICBOT19DTUFLRV9QQVRICisgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICisgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSAorICAgICAgKQorICBlbmRpZigpCiAgIGZpbmRfcHJvZ3JhbShDTUFLRV8ke2xhbmd9X0NPTVBJTEVSIE5BTUVTICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9MSVNUfSBET0MgIiR7bGFuZ30gY29tcGlsZXIiKQogICBpZihDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lOSVQgQU5EIE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSKQogICAgIHNldF9wcm9wZXJ0eShDQUNIRSBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSIFBST1BFUlRZIFZBTFVFICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSU5JVH0iKQpAQCAtMTE4LDMgKzEzMiwxOSBAQAogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogZW5kbWFjcm8oKQorCitmdW5jdGlvbihfY21ha2VfZmluZF9jb21waWxlcl9zeXNyb290IGxhbmcpCisgIGlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIpCisgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUn0iIC1wcmludC1zeXNyb290CisgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQorICAgICAgT1VUUFVUX1ZBUklBQkxFIF9jbWFrZV9zeXNyb290X3J1bl9vdXQKKyAgICAgIEVSUk9SX1ZBUklBQkxFIF9jbWFrZV9zeXNyb290X3J1bl9lcnIpCisKKyAgICBpZihfY21ha2Vfc3lzcm9vdF9ydW5fb3V0IEFORCBOT1QgX2NtYWtlX3N5c3Jvb3RfcnVuX2VyciBBTkQgSVNfRElSRUNUT1JZICIke19jbWFrZV9zeXNyb290X3J1bl9vdXR9L3VzciIpCisgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiR7X2NtYWtlX3N5c3Jvb3RfcnVuX291dH0vdXNyIiBfY21ha2Vfc3lzcm9vdF9ydW5fb3V0X3VzcikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1NZU1JPT1QgIiR7X2NtYWtlX3N5c3Jvb3RfcnVuX291dF91c3J9IiBQQVJFTlRfU0NPUEUpCisgICAgZWxzZSgpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9TWVNST09UICIiIFBBUkVOVF9TQ09QRSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZQppbmRleCBlMWIzYzUyLi41MGQ1Y2QxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlCkBAIC02NSwxMCArNjUsMTMgQEAKICAgICAjIE1vdmUgcmVzdWx0IGZyb20gY2FjaGUgdG8gbm9ybWFsIHZhcmlhYmxlLgogICAgIHNldChDTUFLRV8ke2xhbmd9X0FCSV9DT01QSUxFRCAke0NNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEfSkKICAgICB1bnNldChDTUFLRV8ke2xhbmd9X0FCSV9DT01QSUxFRCBDQUNIRSkKKyAgICBpZihDTUFLRV8ke2xhbmd9X0FCSV9DT01QSUxFRCBBTkQgX2NvcHlfZXJyb3IpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9BQklfQ09NUElMRUQgMCkKKyAgICBlbmRpZigpCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEICR7Q01BS0VfJHtsYW5nfV9BQklfQ09NUElMRUR9IFBBUkVOVF9TQ09QRSkKIAogICAgICMgTG9hZCB0aGUgcmVzdWx0aW5nIGluZm9ybWF0aW9uIHN0cmluZ3MuCi0gICAgaWYoQ01BS0VfJHtsYW5nfV9BQklfQ09NUElMRUQgQU5EIE5PVCBfY29weV9lcnJvcikKKyAgICBpZihDTUFLRV8ke2xhbmd9X0FCSV9DT01QSUxFRCkKICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZG9uZSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZXIgQUJJIGluZm8gY29tcGlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVySWQuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZQppbmRleCA5ZWViN2ExLi44MjAwMjAwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgc2V0KGlkX1Bvc3RCdWlsZEV2ZW50X0NvbW1hbmQgIiIpCiAgICAgaWYoQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVCBNQVRDSEVTICJeW0xsXVtMbF1bVnZdW01tXShfdlswLTldKyhfeHApPyk/JCIpCiAgICAgICBzZXQoaWRfY2xfdmFyICJDbGFuZ0NsRXhlY3V0YWJsZSIpCi0gICAgZWxzZWlmKENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVQgTUFUQ0hFUyAiXltDY11bTGxdW0FhXVtObl1bR2ddW0NjXVtMbF0kIikKKyAgICBlbHNlaWYoQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVCBNQVRDSEVTICJeW0NjXVtMbF1bQWFdW05uXVtHZ10oW0NjXVtMbF0kfF9bMC05XSkiKQogICAgICAgc2V0KGlkX2NsICIkKENMVG9vbEV4ZSkiKQogICAgIGVsc2VpZihDTUFLRV9WU19QTEFURk9STV9UT09MU0VUIE1BVENIRVMgInZbMC05XStfY2xhbmdfLioiKQogICAgICAgc2V0KGlkX2NsIGNsYW5nLmV4ZSkKQEAgLTMxMCwxNyArMzEwLDM2IEBACiAgICAgICBzZXQoaWRfUHJlZmVycmVkVG9vbEFyY2hpdGVjdHVyZSAiIikKICAgICBlbmRpZigpCiAgICAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIldpbmRvd3NQaG9uZSIpCisgICAgICBzZXQoaWRfa2V5d29yZCAiV2luMzJQcm9qIikKICAgICAgIHNldChpZF9zeXN0ZW0gIjxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBQaG9uZTwvQXBwbGljYXRpb25UeXBlPiIpCiAgICAgZWxzZWlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJXaW5kb3dzU3RvcmUiKQorICAgICAgc2V0KGlkX2tleXdvcmQgIldpbjMyUHJvaiIpCiAgICAgICBzZXQoaWRfc3lzdGVtICI8QXBwbGljYXRpb25UeXBlPldpbmRvd3MgU3RvcmU8L0FwcGxpY2F0aW9uVHlwZT4iKQorICAgIGVsc2VpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiQW5kcm9pZCIpCisgICAgICBzZXQoaWRfa2V5d29yZCAiQW5kcm9pZCIpCisgICAgICBzZXQoaWRfc3lzdGVtICI8QXBwbGljYXRpb25UeXBlPkFuZHJvaWQ8L0FwcGxpY2F0aW9uVHlwZT4iKQogICAgIGVsc2UoKQorICAgICAgc2V0KGlkX2tleXdvcmQgIldpbjMyUHJvaiIpCiAgICAgICBzZXQoaWRfc3lzdGVtICIiKQogICAgIGVuZGlmKCkKLSAgICBpZihpZF9zeXN0ZW0gQU5EIENNQUtFX1NZU1RFTV9WRVJTSU9OIE1BVENIRVMgIl4oWzAtOV0rXFwuWzAtOV0rKSIpCisgICAgaWYoaWRfa2V5d29yZCBTVFJFUVVBTCAiQW5kcm9pZCIpCisgICAgICBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyAxNCIpCisgICAgICAgIHNldChpZF9zeXN0ZW1fdmVyc2lvbiAiPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjIuMDwvQXBwbGljYXRpb25UeXBlUmV2aXNpb24+IikKKyAgICAgIGVsc2VpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyAxWzU2XSIpCisgICAgICAgIHNldChpZF9zeXN0ZW1fdmVyc2lvbiAiPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjMuMDwvQXBwbGljYXRpb25UeXBlUmV2aXNpb24+IikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoaWRfc3lzdGVtX3ZlcnNpb24gIiIpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmKGlkX3N5c3RlbSBBTkQgQ01BS0VfU1lTVEVNX1ZFUlNJT04gTUFUQ0hFUyAiXihbMC05XStcXC5bMC05XSspIikKICAgICAgIHNldChpZF9zeXN0ZW1fdmVyc2lvbiAiPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPiR7Q01BS0VfTUFUQ0hfMX08L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPiIpCiAgICAgZWxzZSgpCiAgICAgICBzZXQoaWRfc3lzdGVtX3ZlcnNpb24gIiIpCiAgICAgZW5kaWYoKQorICAgIGlmKGlkX2tleXdvcmQgU1RSRVFVQUwgIkFuZHJvaWQiKQorICAgICAgc2V0KGlkX2NvbmZpZ190eXBlICJEeW5hbWljTGlicmFyeSIpCisgICAgZWxzZSgpCisgICAgICBzZXQoaWRfY29uZmlnX3R5cGUgIkFwcGxpY2F0aW9uIikKKyAgICBlbmRpZigpCiAgICAgaWYoQ01BS0VfVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fVkVSU0lPTikKICAgICAgIHNldChpZF9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uICI8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4ke0NNQUtFX1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT059PC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPiIpCiAgICAgZW5kaWYoKQpAQCAtMzMzLDkgKzM1MiwxMSBAQAogICAgICAgICBzdHJpbmcoQVBQRU5EIGlkX0N1c3RvbUdsb2JhbHMgIjwke0NNQUtFX01BVENIXzF9PiR7Q01BS0VfTUFUQ0hfMn08LyR7Q01BS0VfTUFUQ0hfMX0+XG4gICAgIikKICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKLSAgICBpZihpZF9wbGF0Zm9ybSBTVFJFUVVBTCBBUk02NCkKKyAgICBpZihpZF9rZXl3b3JkIFNUUkVRVUFMICJBbmRyb2lkIikKKyAgICAgIHNldChpZF9XaW5kb3dzU0RLRGVza3RvcEFSTVN1cHBvcnQgIiIpCisgICAgZWxzZWlmKGlkX3BsYXRmb3JtIFNUUkVRVUFMICJBUk02NCIpCiAgICAgICBzZXQoaWRfV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0ICI8V2luZG93c1NES0Rlc2t0b3BBUk02NFN1cHBvcnQ+dHJ1ZTwvV2luZG93c1NES0Rlc2t0b3BBUk02NFN1cHBvcnQ+IikKLSAgICBlbHNlaWYoaWRfcGxhdGZvcm0gU1RSRVFVQUwgQVJNKQorICAgIGVsc2VpZihpZF9wbGF0Zm9ybSBTVFJFUVVBTCAiQVJNIikKICAgICAgIHNldChpZF9XaW5kb3dzU0RLRGVza3RvcEFSTVN1cHBvcnQgIjxXaW5kb3dzU0RLRGVza3RvcEFSTVN1cHBvcnQ+dHJ1ZTwvV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0PiIpCiAgICAgZWxzZSgpCiAgICAgICBzZXQoaWRfV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0ICIiKQpAQCAtNDY5LDYgKzQ5MCwxMiBAQAogICAgICAgICBzZXQoaWRfY2xhbmdfY3h4X2xpYnJhcnkgIkNMQU5HX0NYWF9MSUJSQVJZID0gXCIke0NNQUtFX01BVENIXzN9XCI7IikKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCisgICAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkRhcndpbiIgQU5EIENNQUtFX09TWF9TWVNST09UIE1BVENIRVMgIl4kfFtNbV1bQWFdW0NjXVtPb11bU3NdIikKKyAgICAgICMgV2hlbiB0YXJnZXRpbmcgbWFjT1MsIHVzZSBvbmx5IHRoZSBob3N0IGFyY2hpdGVjdHVyZS4KKyAgICAgIHNldChpZF9hcmNocyBbW0FSQ0hTID0gIiQoTkFUSVZFX0FSQ0hfQUNUVUFMKSI7XV0pCisgICAgZWxzZSgpCisgICAgICBzZXQoaWRfYXJjaHMgIiIpCisgICAgZW5kaWYoKQogICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9Db21waWxlcklkL1hjb2RlLTMucGJ4cHJvai5pbgogICAgICAgJHtpZF9kaXJ9L0NvbXBpbGVySWQke2xhbmd9Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogQE9OTFkpCiAgICAgdW5zZXQoX0VOVl9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQpCkBAIC04NzQsNiArOTAxLDE0IEBACiAgICAgZmlsZShNQUtFX0RJUkVDVE9SWSAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfRElSfSkKICAgZW5kaWYoKQogCisgICMgU2F2ZSB0aGUgY3VycmVudCBMQ19BTEwsIExDX01FU1NBR0VTLCBhbmQgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgIyBhbmQgc2V0IHRoZW0gdG8gIkMiIHNvIHdlIGdldCB0aGUgZXhwZWN0ZWQgb3V0cHV0IHRvIG1hdGNoLgorICBzZXQoX29yaWdfbGNfYWxsICAgICAgJEVOVntMQ19BTEx9KQorICBzZXQoX29yaWdfbGNfbWVzc2FnZXMgJEVOVntMQ19NRVNTQUdFU30pCisgIHNldChfb3JpZ19sYW5nICAgICAgICAkRU5We0xBTkd9KQorICBzZXQoRU5We0xDX0FMTH0gICAgICBDKQorICBzZXQoRU5We0xDX01FU1NBR0VTfSBDKQorICBzZXQoRU5We0xBTkd9ICAgICAgICBDKQogCiAgIGZvcmVhY2godmVuZG9yICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9WRU5ET1JTfSkKICAgICBzZXQoZmxhZ3MgJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX1ZFTkRPUl9GTEFHU18ke3ZlbmRvcn19KQpAQCAtODk1LDYgKzkzMCw3IEBACiAgICAgICAgICJtYXRjaGVkIFwiJHtyZWdleH1cIjpcbiR7b3V0cHV0fSIpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRCAiJHt2ZW5kb3J9IiBQQVJFTlRfU0NPUEUpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9PVVRQVVQgIiR7b3V0cHV0fSIgUEFSRU5UX1NDT1BFKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfVkVORE9SX01BVENIICIke0NNQUtFX01BVENIXzF9IiBQQVJFTlRfU0NPUEUpCiAgICAgICBicmVhaygpCiAgICAgZWxzZSgpCiAgICAgICBpZigiJHtyZXN1bHR9IiBNQVRDSEVTICAidGltZW91dCIpCkBAIC05MDgsNiArOTQ0LDExIEBACiAgICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCisKKyAgIyBSZXN0b3JlIG9yaWdpbmFsIExDX0FMTCwgTENfTUVTU0FHRVMsIGFuZCBMQU5HCisgIHNldChFTlZ7TENfQUxMfSAgICAgICR7X29yaWdfbGNfYWxsfSkKKyAgc2V0KEVOVntMQ19NRVNTQUdFU30gJHtfb3JpZ19sY19tZXNzYWdlc30pCisgIHNldChFTlZ7TEFOR30gICAgICAgICR7X29yaWdfbGFuZ30pCiBlbmRmdW5jdGlvbigpCiAKIGZ1bmN0aW9uKENNQUtFX0RFVEVSTUlORV9NU1ZDX1NIT1dJTkNMVURFU19QUkVGSVggbGFuZyB1c2VyZmxhZ3MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lRm9ydHJhbkNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUZvcnRyYW5Db21waWxlci5jbWFrZQppbmRleCBlODUwNTQxLi41ZjVhNzBhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lRm9ydHJhbkNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVGb3J0cmFuQ29tcGlsZXIuY21ha2UKQEAgLTE4Niw2ICsxODYsOCBAQAogICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVySWQuY21ha2UpCiAgIENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9JRChGb3J0cmFuIEZGTEFHUyBDTWFrZUZvcnRyYW5Db21waWxlcklkLkYpCiAKKyAgX2NtYWtlX2ZpbmRfY29tcGlsZXJfc3lzcm9vdChGb3J0cmFuKQorCiAgICMgRmFsbCBiYWNrIHRvIG9sZCBpcy1HTlUgdGVzdC4KICAgaWYoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQpCiAgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSfSAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSURfRkxBR1NfTElTVH0gLUUgIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZVRlc3RHTlUuYyIKQEAgLTI0OSw3ICsyNTEsNyBAQAogIyBOQU1FX1dFIGNhbm5vdCBiZSB1c2VkIHNpbmNlIHRoZW4gdGhpcyB0ZXN0IHdpbGwgZmFpbCBmb3IgbmFtZXMgbGlrZQogIyAiYXJtLXVua25vd24tbnRvLXFueDYuMy4wLWdjYy5leGUiLCB3aGVyZSBCQVNFTkFNRSB3b3VsZCBiZQogIyAiYXJtLXVua25vd24tbnRvLXFueDYiIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgImFybS11bmtub3duLW50by1xbng2LjMuMC0iCi1pZiAoQ01BS0VfQ1JPU1NDT01QSUxJTkcgIEFORCBOT1QgX0NNQUtFX1RPT0xDSEFJTl9QUkVGSVgpCitpZiAoTk9UIF9DTUFLRV9UT09MQ0hBSU5fUFJFRklYKQogCiAgIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VIikKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENPTVBJTEVSX0JBU0VOQU1FICIke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9IiBOQU1FKQpAQCAtMjc2LDYgKzI3OCwxNCBAQAogICAgICJzZXQoQ01BS0VfRm9ydHJhbl9YTF9DUFAgXCIke0NNQUtFX0ZvcnRyYW5fWExfQ1BQfVwiKSIpCiBlbmRpZigpCiAKK2lmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1lTUk9PVCkKKyAgc3RyaW5nKENPTkNBVCBfU0VUX0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1lTUk9PVAorICAgICJzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NZU1JPT1R9XCIpXG4iCisgICAgInNldChDTUFLRV9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NZU1JPT1R9XCIpIikKK2Vsc2UoKQorICBzZXQoX1NFVF9DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NZU1JPT1QgIiIpCitlbmRpZigpCisKIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEKQogICBzZXQoX1NFVF9DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRAogICAgICJzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQgJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRH0pIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVPQkpDWFhDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVPQkpDWFhDb21waWxlci5jbWFrZQppbmRleCBkYjg3NGQxLi45OWFkNmMzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lT0JKQ1hYQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZU9CSkNYWENvbXBpbGVyLmNtYWtlCkBAIC0xNDgsNyArMTQ4LDcgQEAKICMgImFybS11bmtub3duLW50by1xbng2IiBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0ICJhcm0tdW5rbm93bi1udG8tcW54Ni4zLjAtIgogCiAKLWlmIChDTUFLRV9DUk9TU0NPTVBJTElORyAgQU5EIE5PVCAgX0NNQUtFX1RPT0xDSEFJTl9QUkVGSVgpCitpZiAoTk9UIF9DTUFLRV9UT09MQ0hBSU5fUFJFRklYKQogCiAgIGlmKCIke0NNQUtFX09CSkNYWF9DT01QSUxFUl9JRH0iIE1BVENIRVMgIkdOVXxDbGFuZ3xRQ0MiKQogICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ09NUElMRVJfQkFTRU5BTUUgIiR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSfSIgTkFNRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VGaW5kQmluVXRpbHMuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRmluZEJpblV0aWxzLmNtYWtlCmluZGV4IGMyM2U0NDcuLmRlOWVmOWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VGaW5kQmluVXRpbHMuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUZpbmRCaW5VdGlscy5jbWFrZQpAQCAtNzUsNiArNzUsNyBAQAogICBlbmRpZigpCiAKICAgZmluZF9wcm9ncmFtKENNQUtFX0xJTktFUiBOQU1FUyAke19DTUFLRV9BRERJVElPTkFMX0xJTktFUl9OQU1FU30gbGluayBISU5UUyAke19DTUFLRV9UT09MQ0hBSU5fTE9DQVRJT059KQorICBmaW5kX3Byb2dyYW0oQ01BS0VfQVIgICAgIE5BTUVTIGxpYiAgSElOVFMgJHtfQ01BS0VfVE9PTENIQUlOX0xPQ0FUSU9OfSkKICAgZmluZF9wcm9ncmFtKENNQUtFX01UICAgICBOQU1FUyBtdCAgIEhJTlRTICR7X0NNQUtFX1RPT0xDSEFJTl9MT0NBVElPTn0pCiAKICAgbGlzdChBUFBFTkQgX0NNQUtFX1RPT0xfVkFSUyBMSU5LRVIgTVQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRmluZEVjbGlwc2VDRFQ0LmNtYWtlIGIvTW9kdWxlcy9DTWFrZUZpbmRFY2xpcHNlQ0RUNC5jbWFrZQppbmRleCAxOTkwMDVkLi5lNTYzYTEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRmluZEVjbGlwc2VDRFQ0LmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VGaW5kRWNsaXBzZUNEVDQuY21ha2UKQEAgLTI1LDcgKzI1LDcgQEAKIAogICBpZihOT1QgREVGSU5FRCBDTUFLRV9FQ0xJUFNFX1ZFUlNJT04pCiAgICAgaWYoQ01BS0VfRUNMSVBTRV9FWEVDVVRBQkxFKQotICAgICAgIyB1c2UgUkVBTFBBVEggdG8gcmVzb2x2ZSBzeW1saW5rcyAoaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzEzMDM2KQorICAgICAgIyB1c2UgUkVBTFBBVEggdG8gcmVzb2x2ZSBzeW1saW5rcyAoaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTMwMzYpCiAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9SRUFMUEFUSF9DTUFLRV9FQ0xJUFNFX0VYRUNVVEFCTEUgIiR7Q01BS0VfRUNMSVBTRV9FWEVDVVRBQkxFfSIgUkVBTFBBVEgpCiAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9FQ0xJUFNFX0RJUiAiJHtfUkVBTFBBVEhfQ01BS0VfRUNMSVBTRV9FWEVDVVRBQkxFfSIgUEFUSCkKICAgICAgIGZpbGUoR0xPQiBfRUNMSVBTRV9GRUFUVVJFX0RJUiAiJHtfRUNMSVBTRV9ESVJ9L2ZlYXR1cmVzL29yZy5lY2xpcHNlLnBsYXRmb3JtKiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRmluZEZyYW1ld29ya3MuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRmluZEZyYW1ld29ya3MuY21ha2UKaW5kZXggMDZjMDVmYi4uODkwNmY0OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUZpbmRGcmFtZXdvcmtzLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VGaW5kRnJhbWV3b3Jrcy5jbWFrZQpAQCAtMTcsMTMgKzE3LDI1IEBACiAgIG1hY3JvKENNQUtFX0ZJTkRfRlJBTUVXT1JLUyBmd2spCiAgICAgc2V0KCR7ZndrfV9GUkFNRVdPUktTKQogICAgIGlmKEFQUExFKQotICAgICAgZm9yZWFjaChkaXIKLSAgICAgICAgICB+L0xpYnJhcnkvRnJhbWV3b3Jrcy8ke2Z3a30uZnJhbWV3b3JrCi0gICAgICAgICAgL3Vzci9sb2NhbC9GcmFtZXdvcmtzLyR7ZndrfS5mcmFtZXdvcmsKLSAgICAgICAgICAvTGlicmFyeS9GcmFtZXdvcmtzLyR7ZndrfS5mcmFtZXdvcmsKLSAgICAgICAgICAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy8ke2Z3a30uZnJhbWV3b3JrCi0gICAgICAgICAgL05ldHdvcmsvTGlicmFyeS9GcmFtZXdvcmtzLyR7ZndrfS5mcmFtZXdvcmsKLSAgICAgICAgICAke0NNQUtFX0ZJTkRfRlJBTUVXT1JLX0VYVFJBX0xPQ0FUSU9OU30pCisgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7Q01BS0VfRlJBTUVXT1JLX1BBVEh9IiBfY21mZl9DTUFLRV9GUkFNRVdPUktfUEFUSCkKKyAgICAgIHNldChfY21mZl9zZWFyY2hfcGF0aHMKKyAgICAgICAgICAgICR7Q01BS0VfRlJBTUVXT1JLX1BBVEh9CisgICAgICAgICAgICAke19jbWZmX0NNQUtFX0ZSQU1FV09SS19QQVRIfQorICAgICAgICAgICAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAgICAgICAgIC91c3IvbG9jYWwvRnJhbWV3b3JrcworICAgICAgICAgICAgL0xpYnJhcnkvRnJhbWV3b3JrcworICAgICAgICAgICAgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAgICAgICAgIC9OZXR3b3JrL0xpYnJhcnkvRnJhbWV3b3JrcworICAgICAgICAgICAgJHtDTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEh9KQorCisgICAgICAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLAorICAgICAgIyBDTUFLRV9GSU5EX0ZSQU1FV09SS19FWFRSQV9MT0NBVElPTlMgaW5jbHVkZXMgJHtmd2t9LmZyYW1ld29yaworICAgICAgbGlzdChUUkFOU0ZPUk0gX2NtZmZfc2VhcmNoX3BhdGhzIEFQUEVORCAvJHtmd2t9LmZyYW1ld29yaykKKyAgICAgIGxpc3QoQVBQRU5EIF9jbWZmX3NlYXJjaF9wYXRocyAke0NNQUtFX0ZJTkRfRlJBTUVXT1JLX0VYVFJBX0xPQ0FUSU9OU30pCisKKyAgICAgIGxpc3QoUkVNT1ZFX0RVUExJQ0FURVMgX2NtZmZfc2VhcmNoX3BhdGhzKQorCisgICAgICBmb3JlYWNoKGRpciBJTiBMSVNUUyBfY21mZl9zZWFyY2hfcGF0aHMpCiAgICAgICAgIGlmKEVYSVNUUyAke2Rpcn0pCiAgICAgICAgICAgc2V0KCR7ZndrfV9GUkFNRVdPUktTICR7JHtmd2t9X0ZSQU1FV09SS1N9ICR7ZGlyfSkKICAgICAgICAgZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZS5pbiBiL01vZHVsZXMvQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UuaW4KaW5kZXggMzRmNDRhYS4uMDZlZTUyOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZS5pbgorKysgYi9Nb2R1bGVzL0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlLmluCkBAIC04LDYgKzgsNyBAQAogc2V0KENNQUtFX0ZvcnRyYW5fU0lNVUxBVEVfVkVSU0lPTiAiQENNQUtFX0ZvcnRyYW5fU0lNVUxBVEVfVkVSU0lPTkAiKQogQF9TRVRfQ01BS0VfRm9ydHJhbl9YTF9DUFBACiBAX1NFVF9DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JREAKK0BfU0VUX0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1lTUk9PVEAKIEBTRVRfTVNWQ19Gb3J0cmFuX0FSQ0hJVEVDVFVSRV9JREAKIHNldChDTUFLRV9BUiAiQENNQUtFX0FSQCIpCiBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9BUiAiQENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfQVJAIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VGb3J0cmFuSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlRm9ydHJhbkluZm9ybWF0aW9uLmNtYWtlCmluZGV4IGU4MDcxNmIuLjlhNGNlNjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VGb3J0cmFuSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUZvcnRyYW5JbmZvcm1hdGlvbi5jbWFrZQpAQCAtMTkzLDcgKzE5Myw3IEBACiAgIHNldChDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfRm9ydHJhbl9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX0ZvcnRyYW5fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfRm9ydHJhbl9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQpAQCAtMjA5LDcgKzIwOSw3IEBACiAjIGxpbmsgYSBmb3J0cmFuIHByb2dyYW0KIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0ZvcnRyYW5fTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiA8Q01BS0VfRm9ydHJhbl9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPEZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gPENNQUtFX0ZvcnRyYW5fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxGTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihDTUFLRV9Gb3J0cmFuX1NUQU5EQVJEX0xJQlJBUklFU19JTklUKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUdlbmVyaWNTeXN0ZW0uY21ha2UgYi9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQppbmRleCBmNTM5YjQ2Li4wMDBmYmExIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQpAQCAtNTAsMTUgKzUwLDkgQEAKICAgaWYoREVGSU5FRCBDTUFLRV9UQVJHRVRfTUVTU0FHRVMpCiAgICAgc2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSBUQVJHRVRfTUVTU0FHRVMgJHtDTUFLRV9UQVJHRVRfTUVTU0FHRVN9KQogICBlbmRpZigpCi0gIGlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJVbml4IE1ha2VmaWxlcyIpCi0gICAgc2V0KENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTICIkRU5We0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTfSIKLSAgICAgIENBQ0hFIEJPT0wgIkVuYWJsZS9EaXNhYmxlIG91dHB1dCBvZiBjb21waWxlIGNvbW1hbmRzIGR1cmluZyBnZW5lcmF0aW9uLiIKLSAgICAgICkKLSAgICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTKQotICBlbmRpZigpCiBlbmRpZigpCiAKLWlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSIpCitpZihOT1QgREVGSU5FRCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBBTkQgQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphfFVuaXggTWFrZWZpbGVzIikKICAgc2V0KENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTICIkRU5We0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTfSIKICAgICBDQUNIRSBCT09MICJFbmFibGUvRGlzYWJsZSBvdXRwdXQgb2YgY29tcGlsZSBjb21tYW5kcyBkdXJpbmcgZ2VuZXJhdGlvbi4iCiAgICAgKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZU9CSkNJbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VPQkpDSW5mb3JtYXRpb24uY21ha2UKaW5kZXggMTVhMzMxMS4uYjNkYTgyZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZU9CSkNJbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlT0JKQ0luZm9ybWF0aW9uLmNtYWtlCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgc2V0KENNQUtFX09CSkNfQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9PQkpDX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfT0JKQ19BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX09CSkNfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX09CSkNfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9PQkpDX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0xNzAsMTIgKzE3MCwxMiBAQAogIyBjb21waWxlIGFuIE9iamVjdGl2ZS1DIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQogaWYoTk9UIENNQUtFX09CSkNfQ09NUElMRV9PQkpFQ1QpCiAgIHNldChDTUFLRV9PQkpDX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9PQkpDX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IG9iamVjdGl2ZS1jIC1vIDxPQkpFQ1Q+ICAgLWMgPFNPVVJDRT4iKQorICAgICI8Q01BS0VfT0JKQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBvYmplY3RpdmUtYyAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9PQkpDX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX09CSkNfTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9PQkpDX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9PQkpDX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfT0JKQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfT0JKQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfRVhFQ1VUQUJMRV9SVU5USU1FX09CSkNfRkxBRykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VPQkpDWFhJbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VPQkpDWFhJbmZvcm1hdGlvbi5jbWFrZQppbmRleCBjYjM0OWQ3Li43MWJlYjdmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlT0JKQ1hYSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZU9CSkNYWEluZm9ybWF0aW9uLmNtYWtlCkBAIC0yNTQsNyArMjU0LDcgQEAKICAgc2V0KENNQUtFX09CSkNYWF9BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiBxYyA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX09CSkNYWF9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX09CSkNYWF9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX09CSkNYWF9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0yNjMsMTIgKzI2MywxMiBAQAogIyBjb21waWxlIGFuIE9iamVjdGl2ZS1DKysgZmlsZSBpbnRvIGFuIG9iamVjdCBmaWxlCiBpZihOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfT0JKQ1hYX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9PQkpDWFhfQ09NUElMRVI+ICA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IG9iamVjdGl2ZS1jKysgLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQorICAgICI8Q01BS0VfT0JKQ1hYX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IG9iamVjdGl2ZS1jKysgLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfT0JKQ1hYX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX09CSkNYWF9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX09CSkNYWF9DT01QSUxFUj4gIDxGTEFHUz4gPENNQUtFX09CSkNYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX09CSkNYWF9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfT0JKQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiBlbmRpZigpCiAKIG1hcmtfYXNfYWR2YW5jZWQoCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlUGxhdGZvcm1JZC5oLmluIGIvTW9kdWxlcy9DTWFrZVBsYXRmb3JtSWQuaC5pbgppbmRleCA2NGEwMGIzLi4wYjgxYzg4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlUGxhdGZvcm1JZC5oLmluCisrKyBiL01vZHVsZXMvQ01ha2VQbGF0Zm9ybUlkLmguaW4KQEAgLTg3LDYgKzg3LDkgQEAKICMgZWxpZiBkZWZpbmVkKF9fV0lORE9XU19fKQogIyAgZGVmaW5lIFBMQVRGT1JNX0lEICJXaW5kb3dzM3giCiAKKyMgZWxpZiBkZWZpbmVkKF9fVlhXT1JLU19fKQorIyAgZGVmaW5lIFBMQVRGT1JNX0lEICJWeFdvcmtzIgorCiAjIGVsc2UgLyogdW5rbm93biBwbGF0Zm9ybSAqLwogIyAgZGVmaW5lIFBMQVRGT1JNX0lECiAjIGVuZGlmCkBAIC0yMDMsNiArMjA2LDI0IEBACiAjIGVsc2UgLyogdW5rbm93biBhcmNoaXRlY3R1cmUgKi8KICMgIGRlZmluZSBBUkNISVRFQ1RVUkVfSUQgIiIKICMgZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykKKyMgaWYgZGVmaW5lZChfX1RJX0FSTV9fKQorIyAgZGVmaW5lIEFSQ0hJVEVDVFVSRV9JRCAiQVJNIgorCisjIGVsaWYgZGVmaW5lZChfX01TUDQzMF9fKQorIyAgZGVmaW5lIEFSQ0hJVEVDVFVSRV9JRCAiTVNQNDMwIgorCisjIGVsaWYgZGVmaW5lZChfX1RNUzMyMEMyOFhYX18pCisjICBkZWZpbmUgQVJDSElURUNUVVJFX0lEICJUTVMzMjBDMjh4IgorCisjIGVsaWYgZGVmaW5lZChfX1RNUzMyMEM2WF9fKSB8fCBkZWZpbmVkKF9UTVMzMjBDNlgpCisjICBkZWZpbmUgQVJDSElURUNUVVJFX0lEICJUTVMzMjBDNngiCisKKyMgZWxzZSAvKiB1bmtub3duIGFyY2hpdGVjdHVyZSAqLworIyAgZGVmaW5lIEFSQ0hJVEVDVFVSRV9JRCAiIgorIyBlbmRpZgorCiAjZWxzZQogIyAgZGVmaW5lIEFSQ0hJVEVDVFVSRV9JRAogI2VuZGlmCkBAIC0yODAsNCArMzAxLDMgQEAKICAgIGFycmF5IHJhdGhlciB0aGFuIGFzc2lnbmluZyBhIHBvaW50ZXIgdG8gYSBzdGF0aWMgYXJyYXkuICAqLwogY2hhciBjb25zdCogaW5mb19wbGF0Zm9ybSA9ICJJTkZPIiAiOiIgInBsYXRmb3JtWyIgUExBVEZPUk1fSUQgIl0iOwogY2hhciBjb25zdCogaW5mb19hcmNoID0gIklORk8iICI6IiAiYXJjaFsiIEFSQ0hJVEVDVFVSRV9JRCAiXSI7Ci0KZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VQcmludFN5c3RlbUluZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24uY21ha2UKaW5kZXggOGQ1Y2Y1Yy4uZDQ0ZTkzMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24uY21ha2UKQEAgLTExLDcgKzExLDcgQEAKIHByb2plY3QgdG8gc2VlIHZhcmlvdXMgaW50ZXJuYWwgQ01ha2UgdmFyaWFibGVzLgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAotbWVzc2FnZSgiQ01BS0VfU1lTVEVNIGlzICR7Q01BS0VfU1lTVEVNfSAke0NNQUtFX1NZU1RFTV9OQU1FfSAke0NNQUtFX1NZU1RFTV9WRVJTSU9OfSIpCittZXNzYWdlKCJDTUFLRV9TWVNURU0gaXMgJHtDTUFLRV9TWVNURU19ICR7Q01BS0VfU1lTVEVNX05BTUV9ICR7Q01BS0VfU1lTVEVNX1ZFUlNJT059ICR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0iKQogbWVzc2FnZSgiQ01BS0VfU1lTVEVNIGZpbGUgaXMgJHtDTUFLRV9TWVNURU1fSU5GT19GSUxFfSIpCiBtZXNzYWdlKCJDTUFLRV9DX0NPTVBJTEVSIGlzICR7Q01BS0VfQ19DT01QSUxFUn0iKQogbWVzc2FnZSgiQ01BS0VfQ1hYX0NPTVBJTEVSIGlzICR7Q01BS0VfQ1hYX0NPTVBJTEVSfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdENDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlCmluZGV4IGVhZGVhODkuLjM3MzRlYzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlCkBAIC0yMSw2ICsyMSwxNSBAQAogIyBXZSBub3cgc3RvcmUgdGhpcyBpbiBDTWFrZUNDb21waWxlci5jbWFrZS4KIHVuc2V0KENNQUtFX0NfQ09NUElMRVJfV09SS1MgQ0FDSEUpCiAKKyMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBBQkkgYW5kIGNvbmZpZ3VyZSBpdCBpbnRvIENNYWtlQ0NvbXBpbGVyLmNtYWtlCitpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlKQorQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0FCSShDICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNDb21waWxlckFCSS5jKQoraWYoQ01BS0VfQ19BQklfQ09NUElMRUQpCisgICMgVGhlIGNvbXBpbGVyIHdvcmtlZCBzbyBza2lwIGRlZGljYXRlZCB0ZXN0IGJlbG93LgorICBzZXQoQ01BS0VfQ19DT01QSUxFUl9XT1JLUyBUUlVFKQorICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIHdvcmtpbmcgQyBjb21waWxlcjogJHtDTUFLRV9DX0NPTVBJTEVSfSAtIHNraXBwZWQiKQorZW5kaWYoKQorCiAjIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IEVuYWJsZUxhbmd1YWdlIGluIGNtR2xvYmFsR2VuZXJhdG9yIHRvCiAjIGRldGVybWluZSB0aGF0IHRoYXQgc2VsZWN0ZWQgQyBjb21waWxlciBjYW4gYWN0dWFsbHkgY29tcGlsZQogIyBhbmQgbGluayB0aGUgbW9zdCBiYXNpYyBvZiBwcm9ncmFtcy4gICBJZiBub3QsIGEgZmF0YWwgZXJyb3IKQEAgLTQ3LDQ5ICs1Niw0MSBAQAogICAjIE1vdmUgcmVzdWx0IGZyb20gY2FjaGUgdG8gbm9ybWFsIHZhcmlhYmxlLgogICBzZXQoQ01BS0VfQ19DT01QSUxFUl9XT1JLUyAke0NNQUtFX0NfQ09NUElMRVJfV09SS1N9KQogICB1bnNldChDTUFLRV9DX0NPTVBJTEVSX1dPUktTIENBQ0hFKQotICBzZXQoQ19URVNUX1dBU19SVU4gMSkKICAgX19UZXN0Q29tcGlsZXJfcmVzdG9yZVRyeUNvbXBpbGVUYXJnZXRUeXBlKCkKKyAgaWYoTk9UIENNQUtFX0NfQ09NUElMRVJfV09SS1MpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKKyAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCisgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEMgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgorICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQorICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7X19DTUFLRV9DX0NPTVBJTEVSX09VVFBVVH0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlRoZSBDIGNvbXBpbGVyXG4gIFwiJHtDTUFLRV9DX0NPTVBJTEVSfVwiXG4iCisgICAgICAiaXMgbm90IGFibGUgdG8gY29tcGlsZSBhIHNpbXBsZSB0ZXN0IHByb2dyYW0uXG5JdCBmYWlscyAiCisgICAgICAid2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiAgJHtfb3V0cHV0fVxuXG4iCisgICAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCisgIGVuZGlmKCkKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQorICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQyBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCisgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQogZW5kaWYoKQogCi1pZihOT1QgQ01BS0VfQ19DT01QSUxFUl9XT1JLUykKLSAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKLSAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwotICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCi0gICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBfb3V0cHV0ICIke19fQ01BS0VfQ19DT01QSUxFUl9PVVRQVVR9IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEMgY29tcGlsZXJcbiAgXCIke0NNQUtFX0NfQ09NUElMRVJ9XCJcbiIKLSAgICAiaXMgbm90IGFibGUgdG8gY29tcGlsZSBhIHNpbXBsZSB0ZXN0IHByb2dyYW0uXG5JdCBmYWlscyAiCi0gICAgIndpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4gICR7X291dHB1dH1cblxuIgotICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKLWVsc2UoKQotICBpZihDX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCi0gICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKLSAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQyBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCi0gICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ19DT01QSUxFUl9PVVRQVVR9XG5cbiIpCi0gIGVuZGlmKCkKKyMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBjb21waWxlciBmZWF0dXJlcworaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UpCitDTUFLRV9ERVRFUk1JTkVfQ09NUElMRV9GRUFUVVJFUyhDKQogCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBBQkkgYW5kIGNvbmZpZ3VyZSBpdCBpbnRvIENNYWtlQ0NvbXBpbGVyLmNtYWtlCi0gIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoQyAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDQ29tcGlsZXJBQkkuYykKLSAgIyBUcnkgdG8gaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGZlYXR1cmVzCi0gIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlKQotICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRV9GRUFUVVJFUyhDKQorIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgorY29uZmlndXJlX2ZpbGUoCisgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNDb21waWxlci5jbWFrZS5pbgorICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNDb21waWxlci5jbWFrZQorICBAT05MWQorICApCitpbmNsdWRlKCR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ0NvbXBpbGVyLmNtYWtlKQogCi0gICMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KLSAgY29uZmlndXJlX2ZpbGUoCi0gICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ0NvbXBpbGVyLmNtYWtlLmluCi0gICAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDQ29tcGlsZXIuY21ha2UKLSAgICBAT05MWQotICAgICkKLSAgaW5jbHVkZSgke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNDb21waWxlci5jbWFrZSkKLQotICBpZihDTUFLRV9DX1NJWkVPRl9EQVRBX1BUUikKLSAgICBmb3JlYWNoKGYgJHtDTUFLRV9DX0FCSV9GSUxFU30pCi0gICAgICBpbmNsdWRlKCR7Zn0pCi0gICAgZW5kZm9yZWFjaCgpCi0gICAgdW5zZXQoQ01BS0VfQ19BQklfRklMRVMpCi0gIGVuZGlmKCkKK2lmKENNQUtFX0NfU0laRU9GX0RBVEFfUFRSKQorICBmb3JlYWNoKGYgJHtDTUFLRV9DX0FCSV9GSUxFU30pCisgICAgaW5jbHVkZSgke2Z9KQorICBlbmRmb3JlYWNoKCkKKyAgdW5zZXQoQ01BS0VfQ19BQklfRklMRVMpCiBlbmRpZigpCiAKIHNldChDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSAke19fQ01BS0VfU0FWRURfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEV9KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RDVURBQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdENVREFDb21waWxlci5jbWFrZQppbmRleCAwNTgxMWE4Li5hMTg5NDdiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlVGVzdENVREFDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdENVREFDb21waWxlci5jbWFrZQpAQCAtMTQsNiArMTQsMTUgQEAKICMgV2Ugbm93IHN0b3JlIHRoaXMgaW4gQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuCiB1bnNldChDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTIENBQ0hFKQogCisjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZUNVREFDb21waWxlci5jbWFrZQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoQ1VEQSAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXJBQkkuY3UpCitpZihDTUFLRV9DVURBX0FCSV9DT01QSUxFRCkKKyAgIyBUaGUgY29tcGlsZXIgd29ya2VkIHNvIHNraXAgZGVkaWNhdGVkIHRlc3QgYmVsb3cuCisgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTIFRSVUUpCisgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igd29ya2luZyBDVURBIGNvbXBpbGVyOiAke0NNQUtFX0NVREFfQ09NUElMRVJ9IC0gc2tpcHBlZCIpCitlbmRpZigpCisKICMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgRW5hYmxlTGFuZ3VhZ2UgaW4gY21HbG9iYWxHZW5lcmF0b3IgdG8KICMgZGV0ZXJtaW5lIHRoYXQgdGhlIHNlbGVjdGVkIGN1ZGEgY29tcGlsZXIgY2FuIGFjdHVhbGx5IGNvbXBpbGUKICMgYW5kIGxpbmsgdGhlIG1vc3QgYmFzaWMgb2YgcHJvZ3JhbXMuICAgSWYgbm90LCBhIGZhdGFsIGVycm9yCkBAIC0zNCw1MCArNDMsMzcgQEAKICAgIyBNb3ZlIHJlc3VsdCBmcm9tIGNhY2hlIHRvIG5vcm1hbCB2YXJpYWJsZS4KICAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfV09SS1MgJHtDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTfSkKICAgdW5zZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9XT1JLUyBDQUNIRSkKLSAgc2V0KENVREFfVEVTVF9XQVNfUlVOIDEpCisgIGlmKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTKQorICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZworICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDVURBIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKKyAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DVURBX0NPTVBJTEVSX09VVFBVVH1cblxuIikKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBfb3V0cHV0ICIke19fQ01BS0VfQ1VEQV9DT01QSUxFUl9PVVRQVVR9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgQ1VEQSBjb21waWxlclxuICBcIiR7Q01BS0VfQ1VEQV9DT01QSUxFUn1cIlxuIgorICAgICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgorICAgICAgIndpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4gICR7X291dHB1dH1cblxuIgorICAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQorICBlbmRpZigpCisgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX1BBU1MgIndvcmtzIikKKyAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKKyAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENVREEgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgorICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DVURBX0NPTVBJTEVSX09VVFBVVH1cblxuIikKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCi0gIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENVREEgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgotICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DVURBX0NPTVBJTEVSX09VVFBVVH1cblxuIikKLSAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX0NVREFfQ09NUElMRVJfT1VUUFVUfSIpCi0gIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlRoZSBDVURBIGNvbXBpbGVyXG4gIFwiJHtDTUFLRV9DVURBX0NPTVBJTEVSfVwiXG4iCi0gICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgotICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKLSAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCi1lbHNlKCkKLSAgaWYoQ1VEQV9URVNUX1dBU19SVU4pCi0gICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQotICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCi0gICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENVREEgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgotICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NVREFfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBlbmRpZigpCisjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlKQorQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoQ1VEQSkKIAotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZUNVREFDb21waWxlci5jbWFrZQotICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlKQotICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKENVREEgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVyQUJJLmN1KQotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKENVREEpCitpZigieCR7Q01BS0VfQ1VEQV9TSU1VTEFURV9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCisgIHNldChDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTICIke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU30iKQorICBzZXQoQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTICIke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSIpCitlbmRpZigpCiAKLSAgaWYoIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQotICAgIHNldChDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTICIke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU30iKQotICAgIHNldChDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVMgIiR7Q01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKLSAgZW5kaWYoKQorIyBGaWx0ZXIgb3V0IGltcGxpY2l0IGxpbmsgbGlicmFyaWVzIHRoYXQgc2hvdWxkIG5vdCBiZSBwYXNzZWQgdW5jb25kaXRpb25hbGx5LgorIyBTZWUgQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU19FWENMVURFIGluIENNYWtlRGV0ZXJtaW5lQ1VEQUNvbXBpbGVyLgorbGlzdChSRU1PVkVfSVRFTSBDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU19FWENMVURFfSkKIAotICAjIFJlbW92ZSB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBhbmQKLSAgIyBDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTCi0gICMKLSAgIyAtIGN1ZGFydAotICAjIC0gY3VkYXJ0X3N0YXRpYwotICAjIC0gY3VkYWRldnJ0Ci0gICMKLSAgIyBUaGVzZSBhcmUgY29udHJvbGxlZCBieSBDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWQotICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREFfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgY3VkYXJ0IGN1ZGFydF9zdGF0aWMgY3VkYWRldnJ0KQotICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBjdWRhcnQgY3VkYXJ0X3N0YXRpYyBjdWRhZGV2cnQpCi0KK2lmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk5WSURJQSIpCiAgICMgUmVtb3ZlIHRoZSBDVURBIFRvb2xraXQgaW5jbHVkZSBkaXJlY3RvcmllcyBmcm9tIHRoZSBzZXQgb2YKICAgIyBpbXBsaWNpdCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3Rvcmllcy4KICAgIyBUaGlzIHJlc29sdmVzIHRoZSBpc3N1ZSB0aGF0IE5WQ0MgZG9lc24ndCBzcGVjaWZ5IHRoZXNlCkBAIC04OSwxNSArODUsMTQgQEAKICAgICAgICR7Q01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVN9CiAgICAgICApCiAgIGVuZGlmKCkKLQotICAjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCi0gIGNvbmZpZ3VyZV9maWxlKAotICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNVREFDb21waWxlci5jbWFrZS5pbgotICAgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlCi0gICAgQE9OTFkKLSAgICApCi0gIGluY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDVURBQ29tcGlsZXIuY21ha2UpCiBlbmRpZigpCiAKKyMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KK2NvbmZpZ3VyZV9maWxlKAorICAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4KKyAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDVURBQ29tcGlsZXIuY21ha2UKKyAgQE9OTFkKKyAgKQoraW5jbHVkZSgke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNVREFDb21waWxlci5jbWFrZSkKIAogdW5zZXQoX19DTUFLRV9DVURBX0NPTVBJTEVSX09VVFBVVCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VUZXN0Q1hYQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdENYWENvbXBpbGVyLmNtYWtlCmluZGV4IGJkNDIxNTMuLmI5Y2IxZGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0Q1hYQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVRlc3RDWFhDb21waWxlci5jbWFrZQpAQCAtMjEsNiArMjEsMTUgQEAKICMgV2Ugbm93IHN0b3JlIHRoaXMgaW4gQ01ha2VDWFhDb21waWxlci5jbWFrZS4KIHVuc2V0KENNQUtFX0NYWF9DT01QSUxFUl9XT1JLUyBDQUNIRSkKIAorIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VDWFhDb21waWxlci5jbWFrZQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoQ1hYICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNYWENvbXBpbGVyQUJJLmNwcCkKK2lmKENNQUtFX0NYWF9BQklfQ09NUElMRUQpCisgICMgVGhlIGNvbXBpbGVyIHdvcmtlZCBzbyBza2lwIGRlZGljYXRlZCB0ZXN0IGJlbG93LgorICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX1dPUktTIFRSVUUpCisgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igd29ya2luZyBDWFggY29tcGlsZXI6ICR7Q01BS0VfQ1hYX0NPTVBJTEVSfSAtIHNraXBwZWQiKQorZW5kaWYoKQorCiAjIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IEVuYWJsZUxhbmd1YWdlIGluIGNtR2xvYmFsR2VuZXJhdG9yIHRvCiAjIGRldGVybWluZSB0aGF0IHRoZSBzZWxlY3RlZCBDKysgY29tcGlsZXIgY2FuIGFjdHVhbGx5IGNvbXBpbGUKICMgYW5kIGxpbmsgdGhlIG1vc3QgYmFzaWMgb2YgcHJvZ3JhbXMuICAgSWYgbm90LCBhIGZhdGFsIGVycm9yCkBAIC00MCw0OSArNDksNDEgQEAKICAgIyBNb3ZlIHJlc3VsdCBmcm9tIGNhY2hlIHRvIG5vcm1hbCB2YXJpYWJsZS4KICAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9XT1JLUyAke0NNQUtFX0NYWF9DT01QSUxFUl9XT1JLU30pCiAgIHVuc2V0KENNQUtFX0NYWF9DT01QSUxFUl9XT1JLUyBDQUNIRSkKLSAgc2V0KENYWF9URVNUX1dBU19SVU4gMSkKICAgX19UZXN0Q29tcGlsZXJfcmVzdG9yZVRyeUNvbXBpbGVUYXJnZXRUeXBlKCkKKyAgaWYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9XT1JLUykKKyAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQorICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKKyAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQorICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7X19DTUFLRV9DWFhfQ09NUElMRVJfT1VUUFVUfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEMrKyBjb21waWxlclxuICBcIiR7Q01BS0VfQ1hYX0NPTVBJTEVSfVwiXG4iCisgICAgICAiaXMgbm90IGFibGUgdG8gY29tcGlsZSBhIHNpbXBsZSB0ZXN0IHByb2dyYW0uXG5JdCBmYWlscyAiCisgICAgICAid2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiAgJHtfb3V0cHV0fVxuXG4iCisgICAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCisgIGVuZGlmKCkKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQorICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKKyAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1hYX0NPTVBJTEVSX09VVFBVVH1cblxuIikKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9XT1JLUykKLSAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKLSAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwotICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKLSAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1hYX0NPTVBJTEVSX09VVFBVVH1cblxuIikKLSAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX0NYWF9DT01QSUxFUl9PVVRQVVR9IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEMrKyBjb21waWxlclxuICBcIiR7Q01BS0VfQ1hYX0NPTVBJTEVSfVwiXG4iCi0gICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgotICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKLSAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCi1lbHNlKCkKLSAgaWYoQ1hYX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCi0gICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKLSAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKLSAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBlbmRpZigpCisjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlKQorQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoQ1hYKQogCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBBQkkgYW5kIGNvbmZpZ3VyZSBpdCBpbnRvIENNYWtlQ1hYQ29tcGlsZXIuY21ha2UKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0FCSShDWFggJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ1hYQ29tcGlsZXJBQkkuY3BwKQotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKENYWCkKKyMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KK2NvbmZpZ3VyZV9maWxlKAorICAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDWFhDb21waWxlci5jbWFrZS5pbgorICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNYWENvbXBpbGVyLmNtYWtlCisgIEBPTkxZCisgICkKK2luY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDWFhDb21waWxlci5jbWFrZSkKIAotICAjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCi0gIGNvbmZpZ3VyZV9maWxlKAotICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNYWENvbXBpbGVyLmNtYWtlLmluCi0gICAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDWFhDb21waWxlci5jbWFrZQotICAgIEBPTkxZCi0gICAgKQotICBpbmNsdWRlKCR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ1hYQ29tcGlsZXIuY21ha2UpCi0KLSAgaWYoQ01BS0VfQ1hYX1NJWkVPRl9EQVRBX1BUUikKLSAgICBmb3JlYWNoKGYgJHtDTUFLRV9DWFhfQUJJX0ZJTEVTfSkKLSAgICAgIGluY2x1ZGUoJHtmfSkKLSAgICBlbmRmb3JlYWNoKCkKLSAgICB1bnNldChDTUFLRV9DWFhfQUJJX0ZJTEVTKQotICBlbmRpZigpCitpZihDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSKQorICBmb3JlYWNoKGYgJHtDTUFLRV9DWFhfQUJJX0ZJTEVTfSkKKyAgICBpbmNsdWRlKCR7Zn0pCisgIGVuZGZvcmVhY2goKQorICB1bnNldChDTUFLRV9DWFhfQUJJX0ZJTEVTKQogZW5kaWYoKQogCiBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgJHtfX0NNQUtFX1NBVkVEX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VUZXN0Rm9ydHJhbkNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVRlc3RGb3J0cmFuQ29tcGlsZXIuY21ha2UKaW5kZXggNzQ2MWY5Yy4uMTBmYjBhNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RGb3J0cmFuQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVRlc3RGb3J0cmFuQ29tcGlsZXIuY21ha2UKQEAgLTE1LDYgKzE1LDE1IEBACiAjIFdlIG5vdyBzdG9yZSB0aGlzIGluIENNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlLgogdW5zZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9XT1JLUyBDQUNIRSkKIAorIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UpCitDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKEZvcnRyYW4gJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRm9ydHJhbkNvbXBpbGVyQUJJLkYpCitpZihDTUFLRV9Gb3J0cmFuX0FCSV9DT01QSUxFRCkKKyAgIyBUaGUgY29tcGlsZXIgd29ya2VkIHNvIHNraXAgZGVkaWNhdGVkIHRlc3QgYmVsb3cuCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTIFRSVUUpCisgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igd29ya2luZyBGb3J0cmFuIGNvbXBpbGVyOiAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9IC0gc2tpcHBlZCIpCitlbmRpZigpCisKICMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgRW5hYmxlTGFuZ3VhZ2UgaW4gY21HbG9iYWxHZW5lcmF0b3IgdG8KICMgZGV0ZXJtaW5lIHRoYXQgdGhlIHNlbGVjdGVkIEZvcnRyYW4gY29tcGlsZXIgY2FuIGFjdHVhbGx5IGNvbXBpbGUKICMgYW5kIGxpbmsgdGhlIG1vc3QgYmFzaWMgb2YgcHJvZ3JhbXMuICAgSWYgbm90LCBhIGZhdGFsIGVycm9yCkBAIC0zMyw3MCArNDIsNjEgQEAKICAgIyBNb3ZlIHJlc3VsdCBmcm9tIGNhY2hlIHRvIG5vcm1hbCB2YXJpYWJsZS4KICAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfV09SS1MgJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTfSkKICAgdW5zZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9XT1JLUyBDQUNIRSkKLSAgc2V0KEZPUlRSQU5fVEVTVF9XQVNfUlVOIDEpCisgIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTKQorICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZworICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKKyAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQorICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7T1VUUFVUfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEZvcnRyYW4gY29tcGlsZXJcbiAgXCIke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9XCJcbiIKKyAgICAgICJpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS5cbkl0IGZhaWxzICIKKyAgICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKKyAgICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKKyAgZW5kaWYoKQorICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCisgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCisgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKKyAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCi0gIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEZvcnRyYW4gY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgotICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBfb3V0cHV0ICIke09VVFBVVH0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgRm9ydHJhbiBjb21waWxlclxuICBcIiR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn1cIlxuIgotICAgICJpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS5cbkl0IGZhaWxzICIKLSAgICAid2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiAgJHtfb3V0cHV0fVxuXG4iCi0gICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQotZWxzZSgpCi0gIGlmKEZPUlRSQU5fVEVTVF9XQVNfUlVOKQotICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX1BBU1MgIndvcmtzIikKLSAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwotICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKLSAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICBlbmRpZigpCi0KLSAgIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0FCSShGb3J0cmFuICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUZvcnRyYW5Db21waWxlckFCSS5GKQotCi0gICMgVGVzdCBmb3IgRm9ydHJhbiA5MCBzdXBwb3J0IGJ5IHVzaW5nIGFuIGY5MC1zcGVjaWZpYyBjb25zdHJ1Y3QuCi0gIGlmKE5PVCBERUZJTkVEIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwKQotICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNraW5nIHdoZXRoZXIgJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSfSBzdXBwb3J0cyBGb3J0cmFuIDkwIikKLSAgICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdEZvcnRyYW5Db21waWxlckY5MC5mOTAgIgotICAgICAgUFJPR1JBTSBURVNURm9ydHJhbjkwCi0gICAgICBpbnRlZ2VyIHN0b3AgOyBzdG9wID0gMSA7IGRvIHdoaWxlICggc3RvcCAuZXEuIDAgKSA7IGVuZCBkbwotICAgICAgRU5EIFBST0dSQU0gVEVTVEZvcnRyYW45MAorIyBUZXN0IGZvciBGb3J0cmFuIDkwIHN1cHBvcnQgYnkgdXNpbmcgYW4gZjkwLXNwZWNpZmljIGNvbnN0cnVjdC4KK2lmKE5PVCBERUZJTkVEIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwKQorICBtZXNzYWdlKENIRUNLX1NUQVJUICJDaGVja2luZyB3aGV0aGVyICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0gc3VwcG9ydHMgRm9ydHJhbiA5MCIpCisgIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC90ZXN0Rm9ydHJhbkNvbXBpbGVyRjkwLmY5MCAiCisgICAgUFJPR1JBTSBURVNURm9ydHJhbjkwCisgICAgaW50ZWdlciBzdG9wIDsgc3RvcCA9IDEgOyBkbyB3aGlsZSAoIHN0b3AgLmVxLiAwICkgOyBlbmQgZG8KKyAgICBFTkQgUFJPR1JBTSBURVNURm9ydHJhbjkwCiAiKQotICAgIHRyeV9jb21waWxlKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwICR7Q01BS0VfQklOQVJZX0RJUn0KLSAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdEZvcnRyYW5Db21waWxlckY5MC5mOTAKLSAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCi0gICAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTApCi0gICAgICBtZXNzYWdlKENIRUNLX1BBU1MgInllcyIpCi0gICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwotICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEZvcnRyYW4gY29tcGlsZXIgc3VwcG9ydHMgRm9ydHJhbiA5MCBwYXNzZWQgd2l0aCAiCi0gICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgICAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwIDEpCi0gICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vIikKLSAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHN1cHBvcnRzIEZvcnRyYW4gOTAgZmFpbGVkIHdpdGggIgotICAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICAgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MCAwKQotICAgIGVuZGlmKCkKLSAgICB1bnNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MCBDQUNIRSkKKyAgdHJ5X2NvbXBpbGUoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgJHtDTUFLRV9CSU5BUllfRElSfQorICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdEZvcnRyYW5Db21waWxlckY5MC5mOTAKKyAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQorICBpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MCkKKyAgICBtZXNzYWdlKENIRUNLX1BBU1MgInllcyIpCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKKyAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgRm9ydHJhbiBjb21waWxlciBzdXBwb3J0cyBGb3J0cmFuIDkwIHBhc3NlZCB3aXRoICIKKyAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQorICAgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MCAxKQorICBlbHNlKCkKKyAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vIikKKyAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCisgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEZvcnRyYW4gY29tcGlsZXIgc3VwcG9ydHMgRm9ydHJhbiA5MCBmYWlsZWQgd2l0aCAiCisgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKKyAgICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgMCkKICAgZW5kaWYoKQorICB1bnNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MCBDQUNIRSkKK2VuZGlmKCkKIAotICAjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCi0gIGNvbmZpZ3VyZV9maWxlKAotICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZS5pbgotICAgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlCi0gICAgQE9OTFkKLSAgICApCi0gIGluY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UpCisjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCitjb25maWd1cmVfZmlsZSgKKyAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlLmluCisgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlCisgIEBPTkxZCisgICkKK2luY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UpCiAKLSAgaWYoQ01BS0VfRm9ydHJhbl9TSVpFT0ZfREFUQV9QVFIpCi0gICAgZm9yZWFjaChmICR7Q01BS0VfRm9ydHJhbl9BQklfRklMRVN9KQotICAgICAgaW5jbHVkZSgke2Z9KQotICAgIGVuZGZvcmVhY2goKQotICAgIHVuc2V0KENNQUtFX0ZvcnRyYW5fQUJJX0ZJTEVTKQotICBlbmRpZigpCitpZihDTUFLRV9Gb3J0cmFuX1NJWkVPRl9EQVRBX1BUUikKKyAgZm9yZWFjaChmICR7Q01BS0VfRm9ydHJhbl9BQklfRklMRVN9KQorICAgIGluY2x1ZGUoJHtmfSkKKyAgZW5kZm9yZWFjaCgpCisgIHVuc2V0KENNQUtFX0ZvcnRyYW5fQUJJX0ZJTEVTKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RPQkpDQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdE9CSkNDb21waWxlci5jbWFrZQppbmRleCBiY2M2ZmFlLi4wZTMzM2MwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlVGVzdE9CSkNDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdE9CSkNDb21waWxlci5jbWFrZQpAQCAtMjEsNiArMjEsMTUgQEAKICMgV2Ugbm93IHN0b3JlIHRoaXMgaW4gQ01ha2VDQ29tcGlsZXIuY21ha2UuCiB1bnNldChDTUFLRV9PQkpDX0NPTVBJTEVSX1dPUktTIENBQ0hFKQogCisjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZU9CSkNDb21waWxlci5jbWFrZQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoT0JKQyAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VPQkpDQ29tcGlsZXJBQkkubSkKK2lmKENNQUtFX09CSkNfQUJJX0NPTVBJTEVEKQorICAjIFRoZSBjb21waWxlciB3b3JrZWQgc28gc2tpcCBkZWRpY2F0ZWQgdGVzdCBiZWxvdy4KKyAgc2V0KENNQUtFX09CSkNfQ09NUElMRVJfV09SS1MgVFJVRSkKKyAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciB3b3JraW5nIE9CSkMgY29tcGlsZXI6ICR7Q01BS0VfT0JKQ19DT01QSUxFUn0gLSBza2lwcGVkIikKK2VuZGlmKCkKKwogIyBUaGlzIGZpbGUgaXMgdXNlZCBieSBFbmFibGVMYW5ndWFnZSBpbiBjbUdsb2JhbEdlbmVyYXRvciB0bwogIyBkZXRlcm1pbmUgdGhhdCB0aGF0IHNlbGVjdGVkIE9iamVjdGl2ZS1DIGNvbXBpbGVyIGNhbiBhY3R1YWxseSBjb21waWxlCiAjIGFuZCBsaW5rIHRoZSBtb3N0IGJhc2ljIG9mIHByb2dyYW1zLiAgIElmIG5vdCwgYSBmYXRhbCBlcnJvcgpAQCAtNDQsNDkgKzUzLDQxIEBACiAgICMgTW92ZSByZXN1bHQgZnJvbSBjYWNoZSB0byBub3JtYWwgdmFyaWFibGUuCiAgIHNldChDTUFLRV9PQkpDX0NPTVBJTEVSX1dPUktTICR7Q01BS0VfT0JKQ19DT01QSUxFUl9XT1JLU30pCiAgIHVuc2V0KENNQUtFX09CSkNfQ09NUElMRVJfV09SS1MgQ0FDSEUpCi0gIHNldChPQkpDX1RFU1RfV0FTX1JVTiAxKQogICBfX1Rlc3RDb21waWxlcl9yZXN0b3JlVHJ5Q29tcGlsZVRhcmdldFR5cGUoKQorICBpZihOT1QgQ01BS0VfT0JKQ19DT01QSUxFUl9XT1JLUykKKyAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQorICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgT2JqZWN0aXZlLUMgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgorICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQorICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7X19DTUFLRV9PQkpDX0NPTVBJTEVSX09VVFBVVH0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlRoZSBPYmplY3RpdmUtQyBjb21waWxlclxuICBcIiR7Q01BS0VfT0JKQ19DT01QSUxFUn1cIlxuIgorICAgICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgorICAgICAgIndpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4gICR7X291dHB1dH1cblxuIgorICAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQorICBlbmRpZigpCisgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX1BBU1MgIndvcmtzIikKKyAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKKyAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKKyAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfT0JKQ19DT01QSUxFUl9PVVRQVVR9XG5cbiIpCiBlbmRpZigpCiAKLWlmKE5PVCBDTUFLRV9PQkpDX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQotICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCi0gICAgIkRldGVybWluaW5nIGlmIHRoZSBPYmplY3RpdmUtQyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCi0gICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBfb3V0cHV0ICIke19fQ01BS0VfT0JKQ19DT01QSUxFUl9PVVRQVVR9IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIE9iamVjdGl2ZS1DIGNvbXBpbGVyXG4gIFwiJHtDTUFLRV9PQkpDX0NPTVBJTEVSfVwiXG4iCi0gICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgotICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKLSAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCi1lbHNlKCkKLSAgaWYoT0JKQ19URVNUX1dBU19SVU4pCi0gICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQotICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCi0gICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKLSAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDX0NPTVBJTEVSX09VVFBVVH1cblxuIikKLSAgZW5kaWYoKQorIyBUcnkgdG8gaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGZlYXR1cmVzCitpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKE9CSkMpCiAKLSAgIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VPQkpDQ29tcGlsZXIuY21ha2UKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0FCSShPQkpDICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZU9CSkNDb21waWxlckFCSS5tKQotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKE9CSkMpCisjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCitjb25maWd1cmVfZmlsZSgKKyAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlT0JKQ0NvbXBpbGVyLmNtYWtlLmluCisgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlT0JKQ0NvbXBpbGVyLmNtYWtlCisgIEBPTkxZCisgICkKK2luY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VPQkpDQ29tcGlsZXIuY21ha2UpCiAKLSAgIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgotICBjb25maWd1cmVfZmlsZSgKLSAgICAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VPQkpDQ29tcGlsZXIuY21ha2UuaW4KLSAgICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZU9CSkNDb21waWxlci5jbWFrZQotICAgIEBPTkxZCi0gICAgKQotICBpbmNsdWRlKCR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlT0JKQ0NvbXBpbGVyLmNtYWtlKQotCi0gIGlmKENNQUtFX09CSkNfU0laRU9GX0RBVEFfUFRSKQotICAgIGZvcmVhY2goZiAke0NNQUtFX09CSkNfQUJJX0ZJTEVTfSkKLSAgICAgIGluY2x1ZGUoJHtmfSkKLSAgICBlbmRmb3JlYWNoKCkKLSAgICB1bnNldChDTUFLRV9PQkpDX0FCSV9GSUxFUykKLSAgZW5kaWYoKQoraWYoQ01BS0VfT0JKQ19TSVpFT0ZfREFUQV9QVFIpCisgIGZvcmVhY2goZiAke0NNQUtFX09CSkNfQUJJX0ZJTEVTfSkKKyAgICBpbmNsdWRlKCR7Zn0pCisgIGVuZGZvcmVhY2goKQorICB1bnNldChDTUFLRV9PQkpDX0FCSV9GSUxFUykKIGVuZGlmKCkKIAogc2V0KENNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFICR7X19DTUFLRV9TQVZFRF9UUllfQ09NUElMRV9UQVJHRVRfVFlQRX0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdE9CSkNYWENvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVRlc3RPQkpDWFhDb21waWxlci5jbWFrZQppbmRleCA4MzIyN2Q1Li5kYzE1M2E3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlVGVzdE9CSkNYWENvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0T0JKQ1hYQ29tcGlsZXIuY21ha2UKQEAgLTIxLDYgKzIxLDE1IEBACiAjIFdlIG5vdyBzdG9yZSB0aGlzIGluIENNYWtlT0JKQ1hYQ29tcGlsZXIuY21ha2UuCiB1bnNldChDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MgQ0FDSEUpCiAKKyMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBBQkkgYW5kIGNvbmZpZ3VyZSBpdCBpbnRvIENNYWtlT0JKQ1hYQ29tcGlsZXIuY21ha2UKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UpCitDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKE9CSkNYWCAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VPQkpDWFhDb21waWxlckFCSS5tbSkKK2lmKENNQUtFX09CSkNYWF9BQklfQ09NUElMRUQpCisgICMgVGhlIGNvbXBpbGVyIHdvcmtlZCBzbyBza2lwIGRlZGljYXRlZCB0ZXN0IGJlbG93LgorICBzZXQoQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1dPUktTIFRSVUUpCisgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igd29ya2luZyBPQkpDWFggY29tcGlsZXI6ICR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSfSAtIHNraXBwZWQiKQorZW5kaWYoKQorCiAjIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IEVuYWJsZUxhbmd1YWdlIGluIGNtR2xvYmFsR2VuZXJhdG9yIHRvCiAjIGRldGVybWluZSB0aGF0IHRoZSBzZWxlY3RlZCBPYmplY3RpdmUtQysrIGNvbXBpbGVyIGNhbiBhY3R1YWxseSBjb21waWxlCiAjIGFuZCBsaW5rIHRoZSBtb3N0IGJhc2ljIG9mIHByb2dyYW1zLiAgIElmIG5vdCwgYSBmYXRhbCBlcnJvcgpAQCAtNDMsNDkgKzUyLDQxIEBACiAgICMgTW92ZSByZXN1bHQgZnJvbSBjYWNoZSB0byBub3JtYWwgdmFyaWFibGUuCiAgIHNldChDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MgJHtDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1N9KQogICB1bnNldChDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MgQ0FDSEUpCi0gIHNldChPQkpDWFhfVEVTVF9XQVNfUlVOIDEpCiAgIF9fVGVzdENvbXBpbGVyX3Jlc3RvcmVUcnlDb21waWxlVGFyZ2V0VHlwZSgpCisgIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKKyAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCisgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgorICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNYWF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX09CSkNYWF9DT01QSUxFUl9PVVRQVVR9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgT2JqZWN0aXZlLUMrKyBjb21waWxlclxuICBcIiR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSfVwiXG4iCisgICAgICAiaXMgbm90IGFibGUgdG8gY29tcGlsZSBhIHNpbXBsZSB0ZXN0IHByb2dyYW0uXG5JdCBmYWlscyAiCisgICAgICAid2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiAgJHtfb3V0cHV0fVxuXG4iCisgICAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCisgIGVuZGlmKCkKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQorICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICJEZXRlcm1pbmluZyBpZiB0aGUgT2JqZWN0aXZlLUMrKyBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCisgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNYWF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCiBlbmRpZigpCiAKLWlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCi0gIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgotICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBfb3V0cHV0ICIke19fQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX09VVFBVVH0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgT2JqZWN0aXZlLUMrKyBjb21waWxlclxuICBcIiR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSfVwiXG4iCi0gICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgotICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKLSAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCi1lbHNlKCkKLSAgaWYoT0JKQ1hYX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCi0gICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKLSAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgT2JqZWN0aXZlLUMrKyBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCi0gICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX09VVFBVVH1cblxuIikKLSAgZW5kaWYoKQorIyBUcnkgdG8gaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGZlYXR1cmVzCitpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKE9CSkNYWCkKIAotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZU9CSkNYWENvbXBpbGVyLmNtYWtlCi0gIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoT0JKQ1hYICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZU9CSkNYWENvbXBpbGVyQUJJLm1tKQotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKE9CSkNYWCkKKyMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KK2NvbmZpZ3VyZV9maWxlKAorICAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VPQkpDWFhDb21waWxlci5jbWFrZS5pbgorICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZU9CSkNYWENvbXBpbGVyLmNtYWtlCisgIEBPTkxZCisgICkKK2luY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VPQkpDWFhDb21waWxlci5jbWFrZSkKIAotICAjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCi0gIGNvbmZpZ3VyZV9maWxlKAotICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZU9CSkNYWENvbXBpbGVyLmNtYWtlLmluCi0gICAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VPQkpDWFhDb21waWxlci5jbWFrZQotICAgIEBPTkxZCi0gICAgKQotICBpbmNsdWRlKCR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlT0JKQ1hYQ29tcGlsZXIuY21ha2UpCi0KLSAgaWYoQ01BS0VfT0JKQ1hYX1NJWkVPRl9EQVRBX1BUUikKLSAgICBmb3JlYWNoKGYgJHtDTUFLRV9PQkpDWFhfQUJJX0ZJTEVTfSkKLSAgICAgIGluY2x1ZGUoJHtmfSkKLSAgICBlbmRmb3JlYWNoKCkKLSAgICB1bnNldChDTUFLRV9PQkpDWFhfQUJJX0ZJTEVTKQotICBlbmRpZigpCitpZihDTUFLRV9PQkpDWFhfU0laRU9GX0RBVEFfUFRSKQorICBmb3JlYWNoKGYgJHtDTUFLRV9PQkpDWFhfQUJJX0ZJTEVTfSkKKyAgICBpbmNsdWRlKCR7Zn0pCisgIGVuZGZvcmVhY2goKQorICB1bnNldChDTUFLRV9PQkpDWFhfQUJJX0ZJTEVTKQogZW5kaWYoKQogCiBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgJHtfX0NNQUtFX1NBVkVEX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1BhY2suY21ha2UgYi9Nb2R1bGVzL0NQYWNrLmNtYWtlCmluZGV4IGJhZjdlNDcuLjUzMmUzNjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1BhY2suY21ha2UKKysrIGIvTW9kdWxlcy9DUGFjay5jbWFrZQpAQCAtNSw3ICs1LDcgQEAKIENQYWNrCiAtLS0tLQogCi1Db25maWd1cmUgdGhlIGJpbmFyeSBhbmQgc291cmNlIHBhY2thZ2UgaW5zdGFsbGVycy4KK0NvbmZpZ3VyZSBnZW5lcmF0b3JzIGZvciBiaW5hcnkgaW5zdGFsbGVycyBhbmQgc291cmNlIHBhY2thZ2VzLgogCiBJbnRyb2R1Y3Rpb24KIF5eXl5eXl5eXl5eXgpAQCAtMTksMTMgKzE5LDIxIEBACiB0YXJnZXRzLCBgYHBhY2thZ2VgYCBhbmQgYGBwYWNrYWdlX3NvdXJjZWBgLiBTZWUgdGhlIGBwYWNrYWdpbmcgdGFyZ2V0c2BfCiBzZWN0aW9uIGJlbG93IGZvciBkZXRhaWxzLgogCi1UaGUgZ2VuZXJhdGVkIGJpbmFyeSBpbnN0YWxsZXJzIGNvbnRhaW4gZXZlcnl0aGluZyBpbnN0YWxsZWQgdmlhIENNYWtlJ3MKLTpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kIChhbmQgdGhlIGRlcHJlY2F0ZWQgY29tbWFuZHMgOmNvbW1hbmQ6YGluc3RhbGxfZmlsZXNgLAotOmNvbW1hbmQ6YGluc3RhbGxfcHJvZ3JhbXNgLCBhbmQgOmNvbW1hbmQ6YGluc3RhbGxfdGFyZ2V0c2ApLgotRm9yIGNlcnRhaW4ga2luZHMgb2YgYmluYXJ5IGluc3RhbGxlcnMgKGluY2x1ZGluZyB0aGUgZ3JhcGhpY2FsCi1pbnN0YWxsZXJzIG9uIG1hY09TIGFuZCBXaW5kb3dzKSwgQ1BhY2sgZ2VuZXJhdGVzIGluc3RhbGxlcnMgdGhhdAotYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGluZGl2aWR1YWwgYXBwbGljYXRpb24gY29tcG9uZW50cyB0byBpbnN0YWxsLgotU2VlIDptb2R1bGU6YENQYWNrQ29tcG9uZW50YCBtb2R1bGUgZm9yIGZ1cnRoZXIgZGV0YWlscy4KK1RoZSBnZW5lcmF0ZWQgYmluYXJ5IGluc3RhbGxlcnMgd2lsbCBjb250YWluIGFsbCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBpbnN0YWxsZWQKK3ZpYSBDTWFrZSdzIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kIChhbmQgdGhlIGRlcHJlY2F0ZWQgY29tbWFuZHMKKzpjb21tYW5kOmBpbnN0YWxsX2ZpbGVzYCwgOmNvbW1hbmQ6YGluc3RhbGxfcHJvZ3JhbXNgLCBhbmQKKzpjb21tYW5kOmBpbnN0YWxsX3RhcmdldHNgKS4gTm90ZSB0aGF0IHRoZSBgYERFU1RJTkFUSU9OYGAgb3B0aW9uIG9mIHRoZQorOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQgbXVzdCBiZSBhIHJlbGF0aXZlIHBhdGg7IG90aGVyd2lzZSBpbnN0YWxsZWQgZmlsZXMKK2FyZSBpZ25vcmVkIGJ5IENQYWNrLgorCitDZXJ0YWluIGtpbmRzIG9mIGJpbmFyeSBpbnN0YWxsZXJzIGNhbiBiZSBjb25maWd1cmVkIHN1Y2ggdGhhdCB1c2VycyBjYW4gc2VsZWN0CitpbmRpdmlkdWFsIGFwcGxpY2F0aW9uIGNvbXBvbmVudHMgdG8gaW5zdGFsbC4gIFNlZSB0aGUgOm1vZHVsZTpgQ1BhY2tDb21wb25lbnRgCittb2R1bGUgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworU291cmNlIHBhY2thZ2VzIChjb25maWd1cmVkIHRocm91Z2ggYGBDUGFja1NvdXJjZUNvbmZpZy5jbWFrZWBgIGFuZCBnZW5lcmF0ZWQKK2J5IHRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBBcmNoaXZlIEdlbmVyYXRvcmApIHdpbGwgY29udGFpbiBhbGwgc291cmNlIGZpbGVzIGluCit0aGUgcHJvamVjdCBkaXJlY3RvcnkgZXhjZXB0IHRob3NlIHNwZWNpZmllZCBpbgorOnZhcmlhYmxlOmBDUEFDS19TT1VSQ0VfSUdOT1JFX0ZJTEVTYC4KIAogQ1BhY2sgR2VuZXJhdG9ycwogXl5eXl5eXl5eXl5eXl5eXgpAQCAtMzgsMTAgKzQ2LDYgQEAKIDp2YXJpYWJsZTpgQ1BBQ0tfR0VORVJBVE9SYCBpcyBhICpzdHJpbmcgbmFtaW5nIGEgc2luZ2xlIGdlbmVyYXRvciouICBJZiB5b3UKIG5lZWQgcGVyLWNwYWNrLWdlbmVyYXRvciBsb2dpYyB0byBjb250cm9sICpvdGhlciogY3BhY2sgc2V0dGluZ3MsIHRoZW4geW91CiBuZWVkIGEgOnZhcmlhYmxlOmBDUEFDS19QUk9KRUNUX0NPTkZJR19GSUxFYC4KLQotVGhlIENNYWtlIHNvdXJjZSB0cmVlIGl0c2VsZiBjb250YWlucyBhIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRWAuCi1TZWUgdGhlIHRvcCBsZXZlbCBmaWxlIGBgQ01ha2VDUGFja09wdGlvbnMuY21ha2UuaW5gYCBmb3IgYW4gZXhhbXBsZS4KLQogSWYgc2V0LCB0aGUgOnZhcmlhYmxlOmBDUEFDS19QUk9KRUNUX0NPTkZJR19GSUxFYCBpcyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5CiBvbiBhIHBlci1nZW5lcmF0b3IgYmFzaXMuICBJdCBvbmx5IG5lZWQgY29udGFpbiBvdmVycmlkZXMuCiAKQEAgLTc5LDcgKzgzLDcgQEAKIAogSWYgQ01ha2UgaXMgcnVuIHdpdGggdGhlIE1ha2VmaWxlIG9yIE5pbmphIGdlbmVyYXRvciwgdGhlbiBgYGluY2x1ZGUoQ1BhY2spYGAKIGFsc28gZ2VuZXJhdGVzIGEgdGFyZ2V0IGBgcGFja2FnZV9zb3VyY2VgYC4gVG8gYnVpbGQgYSBzb3VyY2UgcGFja2FnZSwKLWluc3RlYWQgb2YgYGBjcGFjayAtRyBUR1ogLS1jb25maWcgQ1BhY2tDb25maWcuY21ha2VgYCBvbmUgbWF5IGNhbGwKK2luc3RlYWQgb2YgYGBjcGFjayAtRyBUR1ogLS1jb25maWcgQ1BhY2tTb3VyY2VDb25maWcuY21ha2VgYCBvbmUgbWF5IGNhbGwKIGBgY21ha2UgLS1idWlsZCAuIC0tdGFyZ2V0IHBhY2thZ2Vfc291cmNlYGAsIGBgbWFrZSBwYWNrYWdlX3NvdXJjZWBgLAogb3IgYGBuaW5qYSBwYWNrYWdlX3NvdXJjZWBgLgogCkBAIC0zODYsNiArMzkwLDIxIEBACiAgIHNlbGVjdCB0aGUgQ1BhY2sgZ2VuZXJhdG9yKHMpIHRvIGJlIHVzZWQgd2hlbiBidWlsZGluZyB0aGUgYGBwYWNrYWdlYGAKICAgdGFyZ2V0IG9yIHdoZW4gcnVubmluZyA6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCB3aXRob3V0IHRoZSBgYC1HYGAgb3B0aW9uLgogCisuLiB2YXJpYWJsZTo6IENQQUNLX1BSRV9CVUlMRF9TQ1JJUFRTCisKKyAgTGlzdCBvZiBDTWFrZSBzY3JpcHRzIHRvIGV4ZWN1dGUgYWZ0ZXIgQ1BhY2sgaGFzIGluc3RhbGxlZCB0aGUgZmlsZXMgdG8KKyAgYmUgcGFja2VkIGludG8gYSBzdGFnaW5nIGRpcmVjdG9yeSBhbmQgYmVmb3JlIHByb2R1Y2luZyB0aGUgcmVzdWx0CisgIHBhY2thZ2VzLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BPU1RfQlVJTERfU0NSSVBUUworCisgIExpc3Qgb2YgQ01ha2Ugc2NyaXB0cyB0byBleGVjdXRlIGFmdGVyIENQYWNrIGhhcyBwcm9kdWNlZCB0aGUgcmVzdWx0CisgIHBhY2thZ2VzIGFuZCBiZWZvcmUgY29weWluZyB0aGVtIGJhY2sgdG8gYSBidWlsZCBkaXJlY3RvcnkuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRV9GSUxFUworCisgIExpc3Qgb2YgcmVzdWx0aW5nIHBhY2thZ2UgZmlsZXMgcGFzc2VkIHRvIHRoZSBgYENQQUNLX1BPU1RfQlVJTERfU0NSSVBUU2BgLgorCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiAjIERlZmluZSB0aGlzIHZhciBpbiBvcmRlciB0byBhdm9pZCAob3Igd2FybikgY29uY2VybmluZyBtdWx0aXBsZSBpbmNsdXNpb24KZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1BhY2tDb21wb25lbnQuY21ha2UgYi9Nb2R1bGVzL0NQYWNrQ29tcG9uZW50LmNtYWtlCmluZGV4IDIxMWQ3NjcuLjFmOGMzOGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1BhY2tDb21wb25lbnQuY21ha2UKKysrIGIvTW9kdWxlcy9DUGFja0NvbXBvbmVudC5jbWFrZQpAQCAtNSwyOSArNSwzNCBAQAogQ1BhY2tDb21wb25lbnQKIC0tLS0tLS0tLS0tLS0tCiAKLUJ1aWxkIGJpbmFyeSBhbmQgc291cmNlIHBhY2thZ2UgaW5zdGFsbGVycworQ29uZmlndXJlIGNvbXBvbmVudHMgZm9yIGJpbmFyeSBpbnN0YWxsZXJzIGFuZCBzb3VyY2UgcGFja2FnZXMuCiAKLVZhcmlhYmxlcyBjb25jZXJuaW5nIENQYWNrIENvbXBvbmVudHMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKy4uIG9ubHk6OiBodG1sCiAKLVRoZSBDUGFja0NvbXBvbmVudCBtb2R1bGUgaXMgdGhlIG1vZHVsZSB3aGljaCBoYW5kbGVzIHRoZSBjb21wb25lbnQKLXBhcnQgb2YgQ1BhY2suICBTZWUgQ1BhY2sgbW9kdWxlIGZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IENQYWNrLgorICAuLiBjb250ZW50czo6CiAKLUZvciBjZXJ0YWluIGtpbmRzIG9mIGJpbmFyeSBpbnN0YWxsZXJzIChpbmNsdWRpbmcgdGhlIGdyYXBoaWNhbAotaW5zdGFsbGVycyBvbiBtYWNPUyBhbmQgV2luZG93cyksIENQYWNrIGdlbmVyYXRlcyBpbnN0YWxsZXJzIHRoYXQKLWFsbG93IHVzZXJzIHRvIHNlbGVjdCBpbmRpdmlkdWFsIGFwcGxpY2F0aW9uIGNvbXBvbmVudHMgdG8gaW5zdGFsbC4KLVRoZSBjb250ZW50cyBvZiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBDT01QT05FTlQKLWFyZ3VtZW50IG9mIENNYWtlJ3MgSU5TVEFMTCBjb21tYW5kLiAgVGhlc2UgY29tcG9uZW50cyBjYW4gYmUKK0ludHJvZHVjdGlvbgorXl5eXl5eXl5eXl5eCisKK1RoaXMgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgYnkgOm1vZHVsZTpgQ1BhY2tgLgorCitDZXJ0YWluIGJpbmFyeSBpbnN0YWxsZXJzIChlc3BlY2lhbGx5IHRoZSBncmFwaGljYWwgaW5zdGFsbGVycykgZ2VuZXJhdGVkCitieSBDUGFjayBhbGxvdyB1c2VycyB0byBzZWxlY3QgaW5kaXZpZHVhbCBhcHBsaWNhdGlvbiAqY29tcG9uZW50cyogdG8gaW5zdGFsbC4KK1RoaXMgbW9kdWxlIGFsbG93cyBkZXZlbG9wZXJzIHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnaW5nIG9mIHN1Y2ggY29tcG9uZW50cy4KKworQ29udGVudHMgaXMgYXNzaWduZWQgdG8gY29tcG9uZW50cyBieSB0aGUgYGBDT01QT05FTlRgYAorYXJndW1lbnQgb2YgQ01ha2UncyA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZC4gIENvbXBvbmVudHMgY2FuIGJlCiBhbm5vdGF0ZWQgd2l0aCB1c2VyLWZyaWVuZGx5IG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMsIGludGVyLWNvbXBvbmVudAogZGVwZW5kZW5jaWVzLCBldGMuLCBhbmQgZ3JvdXBlZCBpbiB2YXJpb3VzIHdheXMgdG8gY3VzdG9taXplIHRoZQotcmVzdWx0aW5nIGluc3RhbGxlci4gIFNlZSB0aGUgY3BhY2tfYWRkXyogY29tbWFuZHMsIGRlc2NyaWJlZCBiZWxvdywKLWZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBvbmVudC1zcGVjaWZpYyBpbnN0YWxsYXRpb25zLgorcmVzdWx0aW5nIGluc3RhbGxlciwgdXNpbmcgdGhlIGNvbW1hbmRzIGRlc2NyaWJlZCBiZWxvdy4KIAotQ29tcG9uZW50LXNwZWNpZmljIGluc3RhbGxhdGlvbiBhbGxvd3MgdXNlcnMgdG8gc2VsZWN0IHNwZWNpZmljIHNldHMKLW9mIGNvbXBvbmVudHMgdG8gaW5zdGFsbCBkdXJpbmcgdGhlIGluc3RhbGwgcHJvY2Vzcy4gIEluc3RhbGxhdGlvbgotY29tcG9uZW50cyBhcmUgaWRlbnRpZmllZCBieSB0aGUgQ09NUE9ORU5UIGFyZ3VtZW50IG9mIENNYWtlJ3MgSU5TVEFMTAotY29tbWFuZHMsIGFuZCBzaG91bGQgYmUgZnVydGhlciBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBDUGFjawotY29tbWFuZHM6CitUbyBzcGVjaWZ5IGRpZmZlcmVudCBncm91cGluZ3MgZm9yIGRpZmZlcmVudCBDUGFjayBnZW5lcmF0b3JzIHVzZQorYSBDUEFDS19QUk9KRUNUX0NPTkZJR19GSUxFLgorCitWYXJpYWJsZXMKK15eXl5eXl5eXgorCitUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbmZsdWVuY2UgdGhlIGNvbXBvbmVudC1zcGVjaWZpYyBwYWNrYWdpbmc6CiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfQ09NUE9ORU5UU19BTEwKIApAQCAtNjEsMTYgKzY2LDE0IEBACiAgU3BlY2lmeSBob3cgY29tcG9uZW50cyBhcmUgZ3JvdXBlZCBmb3IgbXVsdGktcGFja2FnZSBjb21wb25lbnQtYXdhcmUgQ1BhY2sKICBnZW5lcmF0b3JzLgogCi0gU29tZSBnZW5lcmF0b3JzIGxpa2UgUlBNIG9yIEFSQ0hJVkUgZmFtaWx5IChUR1osIFpJUCwgLi4uKSBnZW5lcmF0ZXMKLSBzZXZlcmFsIHBhY2thZ2VzIGZpbGVzIHdoZW4gYXNrZWQgZm9yIGNvbXBvbmVudCBwYWNrYWdpbmcuICBUaGV5IGdyb3VwCi0gdGhlIGNvbXBvbmVudCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGU6CisgU29tZSBnZW5lcmF0b3JzIGxpa2UgUlBNIG9yIEFSQ0hJVkUgKFRHWiwgWklQLCAuLi4pIG1heSBnZW5lcmF0ZQorIHNldmVyYWwgcGFja2FnZXMgZmlsZXMgd2hlbiB0aGVyZSBhcmUgY29tcG9uZW50cywgZGVwZW5kaW5nCisgb24gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGU6CiAKLSAqIE9ORV9QRVJfR1JPVVAgKGRlZmF1bHQpOiBjcmVhdGVzIG9uZSBwYWNrYWdlIGZpbGUgcGVyIGNvbXBvbmVudCBncm91cAotICogQUxMX0NPTVBPTkVOVFNfSU5fT05FIDogY3JlYXRlcyBhIHNpbmdsZSBwYWNrYWdlIHdpdGggYWxsIChyZXF1ZXN0ZWQpIGNvbXBvbmVudHMKLSAqIElHTk9SRSA6IGNyZWF0ZXMgb25lIHBhY2thZ2UgcGVyIGNvbXBvbmVudCwgaS5lLiBJR05PUkUgY29tcG9uZW50IGdyb3VwCi0KLSBPbmUgY2FuIHNwZWNpZnkgZGlmZmVyZW50IGdyb3VwaW5nIGZvciBkaWZmZXJlbnQgQ1BhY2sgZ2VuZXJhdG9yIGJ5Ci0gdXNpbmcgYSBDUEFDS19QUk9KRUNUX0NPTkZJR19GSUxFLgorICogT05FX1BFUl9HUk9VUCAoZGVmYXVsdCk6IGNyZWF0ZSBvbmUgcGFja2FnZSBwZXIgY29tcG9uZW50IGdyb3VwCisgKiBJR05PUkUgOiBjcmVhdGUgb25lIHBhY2thZ2UgcGVyIGNvbXBvbmVudCAoaWdub3JlIHRoZSBncm91cHMpCisgKiBBTExfQ09NUE9ORU5UU19JTl9PTkUgOiBjcmVhdGUgYSBzaW5nbGUgcGFja2FnZSB3aXRoIGFsbCByZXF1ZXN0ZWQKKyAgIGNvbXBvbmVudHMKIAogLi4gdmFyaWFibGU6OiBDUEFDS19DT01QT05FTlRfPGNvbXBOYW1lPl9ESVNQTEFZX05BTUUKIApAQCAtMTAwLDEwICsxMDMsMTUgQEAKIAogIFRydWUgaWYgdGhpcyBjb21wb25lbnQgaXMgbm90IHNlbGVjdGVkIHRvIGJlIGluc3RhbGxlZCBieSBkZWZhdWx0LgogCitDb21tYW5kcworXl5eXl5eXl4KKworQWRkIGNvbXBvbmVudAorIiIiIiIiIiIiIiIiIgorCiAuLiBjb21tYW5kOjogY3BhY2tfYWRkX2NvbXBvbmVudAogCi1EZXNjcmliZXMgYSBDUGFjayBpbnN0YWxsYXRpb24KLWNvbXBvbmVudCBuYW1lZCBieSB0aGUgQ09NUE9ORU5UIGFyZ3VtZW50IHRvIGEgQ01ha2UgSU5TVEFMTCBjb21tYW5kLgorRGVzY3JpYmUgYW4gaW5zdGFsbGF0aW9uIGNvbXBvbmVudC4KIAogOjoKIApAQCAtMTE4LDEzICsxMjYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICBbQVJDSElWRV9GSUxFIGZpbGVuYW1lXQogICAgICAgICAgICAgICAgICAgICAgIFtQTElTVCBmaWxlbmFtZV0pCiAKLQotCi1UaGUgY21ha2VfYWRkX2NvbXBvbmVudCBjb21tYW5kIGRlc2NyaWJlcyBhbiBpbnN0YWxsYXRpb24gY29tcG9uZW50LAotd2hpY2ggdGhlIHVzZXIgY2FuIG9wdCB0byBpbnN0YWxsIG9yIHJlbW92ZSBhcyBwYXJ0IG9mIHRoZSBncmFwaGljYWwKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgY29tcG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudCwgYXMKLXByb3ZpZGVkIHRvIHRoZSBDT01QT05FTlQgYXJndW1lbnQgb2Ygb25lIG9yIG1vcmUgQ01ha2UgSU5TVEFMTAotY29tbWFuZHMuCitgYGNvbXBuYW1lYGAgaXMgdGhlIG5hbWUgb2YgYW4gaW5zdGFsbGF0aW9uIGNvbXBvbmVudCwgYXMgZGVmaW5lZCBieSB0aGUKK2BgQ09NUE9ORU5UYGAgYXJndW1lbnQgb2Ygb25lIG9yIG1vcmUgQ01ha2UgOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmRzLgorV2l0aCB0aGUgYGBjcGFja19hZGRfY29tcG9uZW50YGAgY29tbWFuZCBvbmUgY2FuIHNldCBhIG5hbWUsIGEgZGVzY3JpcHRpb24sCithbmQgb3RoZXIgYXR0cmlidXRlcyBvZiBhbiBpbnN0YWxsYXRpb24gY29tcG9uZW50LgorT25lIGNhbiBhbHNvIGFzc2lnbiBhIGNvbXBvbmVudCB0byBhIGNvbXBvbmVudCBncm91cC4KIAogRElTUExBWV9OQU1FIGlzIHRoZSBkaXNwbGF5ZWQgbmFtZSBvZiB0aGUgY29tcG9uZW50LCB1c2VkIGluIGdyYXBoaWNhbAogaW5zdGFsbGVycyB0byBkaXNwbGF5IHRoZSBjb21wb25lbnQgbmFtZS4gIFRoaXMgdmFsdWUgY2FuIGJlIGFueQpAQCAtMTc3LDYgKzE4Myw5IEBACiBQTElTVCBnaXZlcyBhIGZpbGVuYW1lIHRoYXQgaXMgcGFzc2VkIHRvIHBrZ2J1aWxkIHdpdGggdGhlCiBgYC0tY29tcG9uZW50LXBsaXN0YGAgYXJndW1lbnQgd2hlbiB1c2luZyB0aGUgcHJvZHVjdGJ1aWxkIGdlbmVyYXRvci4KIAorQWRkIGNvbXBvbmVudCBncm91cAorIiIiIiIiIiIiIiIiIiIiIiIiIgorCiAuLiBjb21tYW5kOjogY3BhY2tfYWRkX2NvbXBvbmVudF9ncm91cAogCiBEZXNjcmliZXMgYSBncm91cCBvZiByZWxhdGVkIENQYWNrIGluc3RhbGxhdGlvbiBjb21wb25lbnRzLgpAQCAtMjI1LDYgKzIzNCw5IEBACiBCT0xEX1RJVExFIGluZGljYXRlcyB0aGF0IHRoZSBncm91cCB0aXRsZSBzaG91bGQgYXBwZWFyIGluIGJvbGQsIHRvCiBjYWxsIHRoZSB1c2VyJ3MgYXR0ZW50aW9uIHRvIHRoZSBncm91cC4KIAorQWRkIGluc3RhbGxhdGlvbiB0eXBlCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKwogLi4gY29tbWFuZDo6IGNwYWNrX2FkZF9pbnN0YWxsX3R5cGUKIAogQWRkIGEgbmV3IGluc3RhbGxhdGlvbiB0eXBlIGNvbnRhaW5pbmcKQEAgLTI0OSw2ICsyNjEsOSBAQAogdHlwaWNhbGx5IHNob3cgdXAgaW4gYSBkcm9wLWRvd24gYm94IHdpdGhpbiBhIGdyYXBoaWNhbCBpbnN0YWxsZXIuCiBUaGlzIHZhbHVlIGNhbiBiZSBhbnkgc3RyaW5nLgogCitDb25maWd1cmUgZG93bmxvYWRzCisiIiIiIiIiIiIiIiIiIiIiIiIiCisKIC4uIGNvbW1hbmQ6OiBjcGFja19jb25maWd1cmVfZG93bmxvYWRzCiAKIENvbmZpZ3VyZSBDUGFjayB0byBkb3dubG9hZApAQCAtMjgxLDggKzI5Niw2IEBACiAKICAgaHR0cDovL25zaXMuc291cmNlZm9yZ2UubmV0L1ppcERMTF9wbHVnLWluCiAKLQotCiBPbiBtYWNPUywgaW5zdGFsbGVycyB0aGF0IGRvd25sb2FkIGNvbXBvbmVudHMgb24tdGhlLWZseSBjYW4gb25seQogYmUgYnVpbHQgYW5kIGluc3RhbGxlZCBvbiBzeXN0ZW0gdXNpbmcgbWFjT1MgMTAuNSBvciBsYXRlci4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DUGFja0lGVy5jbWFrZSBiL01vZHVsZXMvQ1BhY2tJRlcuY21ha2UKaW5kZXggZjU4ZjllZi4uNThlNmEzNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DUGFja0lGVy5jbWFrZQorKysgYi9Nb2R1bGVzL0NQYWNrSUZXLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ1BhY2tJRlcKIC0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBUaGlzIG1vZHVsZSBsb29rcyBmb3IgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kLWxpbmUgdXRpbGl0aWVzIHN1cHBsaWVkIHdpdGggdGhlCiBgUXQgSW5zdGFsbGVyIEZyYW1ld29yayA8aHR0cDovL2RvYy5xdC5pby9xdGluc3RhbGxlcmZyYW1ld29yay9pbmRleC5odG1sPmBfCiAoUXRJRlcpLgpAQCAtNTksNyArNjEsNyBAQAogCiAgIGBgRk9SQ0VEX0lOU1RBTExBVElPTmBgCiAgICAgaWYgc2V0LCB0aGVuIHRoZSBjb21wb25lbnQgbXVzdCBhbHdheXMgYmUgaW5zdGFsbGVkLgotICAgIEl0IGlzIGEgZXF1aXZhbGVudCBvZiB0aGUgYGBSRVFVQVJFRGBgIG9wdGlvbiBmcm9tIHRoZQorICAgIEl0IGlzIGEgZXF1aXZhbGVudCBvZiB0aGUgYGBSRVFVSVJFRGBgIG9wdGlvbiBmcm9tIHRoZQogICAgIDpjb21tYW5kOmBjcGFja19hZGRfY29tcG9uZW50YCBjb21tYW5kLgogCiAgIGBgUkVRVUlSRVNfQURNSU5fUklHSFRTYGAKQEAgLTM1OSw2ICszNjEsOCBAQAogICAiUXRJRlctIikKIAogc2V0KF9DUEFDS19JRldfVkVSU0lPTlMKKyAgIjMuMiIKKyAgIjMuMi4wIgogICAiMy4xIgogICAiMy4xLjAiCiAgICIzLjAiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NQYWNrSUZXQ29uZmlndXJlRmlsZS5jbWFrZSBiL01vZHVsZXMvQ1BhY2tJRldDb25maWd1cmVGaWxlLmNtYWtlCmluZGV4IDBhYmUwZGEuLjI5NmIxM2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1BhY2tJRldDb25maWd1cmVGaWxlLmNtYWtlCisrKyBiL01vZHVsZXMvQ1BhY2tJRldDb25maWd1cmVGaWxlLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ1BhY2tJRldDb25maWd1cmVGaWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFRoZSBtb2R1bGUgZGVmaW5lcyA6Y29tbWFuZDpgY29uZmlndXJlX2ZpbGVgIHNpbWlsYXIgY29tbWFuZCB0bwogY29uZmlndXJlIGZpbGUgdGVtcGxhdGVzIHByZXBhcmVkIGluIFF0SUZXL1NESy9DcmVhdG9yIHN0eWxlLgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NTaGFycFV0aWxpdGllcy5jbWFrZSBiL01vZHVsZXMvQ1NoYXJwVXRpbGl0aWVzLmNtYWtlCmluZGV4IDZhNGI1YzcuLmRlZGIxNDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1NoYXJwVXRpbGl0aWVzLmNtYWtlCisrKyBiL01vZHVsZXMvQ1NoYXJwVXRpbGl0aWVzLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ1NoYXJwVXRpbGl0aWVzCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIEZ1bmN0aW9ucyB0byBtYWtlIGNvbmZpZ3VyYXRpb24gb2YgQ1NoYXJwLy5ORVQgdGFyZ2V0cyBlYXNpZXIuCiAKIEEgY29sbGVjdGlvbiBvZiBDTWFrZSB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VmdWwgZm9yIGRlYWxpbmcgd2l0aCBDU2hhcnAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WLmNtYWtlIGIvTW9kdWxlcy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YuY21ha2UKaW5kZXggZmY0OGNjMi4uYTAxYTJmZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YuY21ha2UKKysrIGIvTW9kdWxlcy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGBgY3Rlc3RfY292ZXJhZ2VfY29sbGVjdF9nY292YGAgZnVuY3Rpb24uCiAKIFRoaXMgZnVuY3Rpb24gcnVucyBnY292IG9uIGFsbCAuZ2NkYSBmaWxlcyBmb3VuZCBpbiB0aGUgYmluYXJ5IHRyZWUKQEAgLTM3LDYgKzM5LDE3IEBACiAgICAgdXBsb2FkIHRvIENEYXNoLiAgUmVsYXRpdmUgcGF0aHMgd2lsbCBiZSBpbnRlcnByZXRlZCB3aXRoIHJlc3BlY3QKICAgICB0byB0aGUgdG9wLWxldmVsIGJ1aWxkIGRpcmVjdG9yeS4KIAorICBgYFRBUkJBTExfQ09NUFJFU1NJT04gPG9wdGlvbj5gYCBTcGVjaWZ5IGEgY29tcHJlc3Npb24gYWxnb3JpdGhtIGZvciB0aGUKKyAgICBgYFRBUkJBTExgYCBkYXRhIGZpbGUuICBVc2luZyB0aGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkYXRhIGZpbGUKKyAgICBiZWZvcmUgaXQgaXMgc3VibWl0dGVkIHRvIENEYXNoLiAgYGA8b3B0aW9uPmBgIG11c3QgYmUgb25lIG9mIGBgR1pJUGBgLAorICAgIGBgQlpJUDJgYCwgYGBYWmBgLCBgYFpTVERgYCwgYGBGUk9NX0VYVGBgLCBvciBhbiBleHByZXNzaW9uIHRoYXQgQ01ha2UKKyAgICBldmFsdWF0ZXMgYXMgYGBGQUxTRWBgLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYEJaSVAyYGAuCisKKyAgICBJZiBgYEZST01fRVhUYGAgaXMgc3BlY2lmaWVkLCB0aGUgcmVzdWx0aW5nIGZpbGUgd2lsbCBiZSBjb21wcmVzc2VkIGJhc2VkIG9uCisgICAgdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBgYDx0YXJmaWxlPmBgIChpLmUuIGBgLnRhci5nemBgIHdpbGwgdXNlIGBgR1pJUGBgCisgICAgY29tcHJlc3Npb24pLiBGaWxlIGV4dGVuc2lvbnMgdGhhdCB3aWxsIHByb2R1Y2UgY29tcHJlc3NlZCBvdXRwdXQgaW5jbHVkZQorICAgIGBgLnRhci5nemBgLCBgYC50Z3pgYCwgYGAudGFyLmJ6aXAyYGAsIGBgLnRiemBgLCBgYC50YXIueHpgYCwgYW5kIGBgLnR4emBgLgorCiAgIGBgU09VUkNFIDxzb3VyY2VfZGlyPmBgCiAgICAgU3BlY2lmeSB0aGUgdG9wLWxldmVsIHNvdXJjZSBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZC4KICAgICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiA6dmFyaWFibGU6YENURVNUX1NPVVJDRV9ESVJFQ1RPUllgLgpAQCAtNjgsNyArODEsNyBAQAogCiBmdW5jdGlvbihjdGVzdF9jb3ZlcmFnZV9jb2xsZWN0X2djb3YpCiAgIHNldChvcHRpb25zIFFVSUVUIEdMT0IgREVMRVRFKQotICBzZXQob25lVmFsdWVBcmdzIFRBUkJBTEwgU09VUkNFIEJVSUxEIEdDT1ZfQ09NTUFORCkKKyAgc2V0KG9uZVZhbHVlQXJncyBUQVJCQUxMIFNPVVJDRSBCVUlMRCBHQ09WX0NPTU1BTkQgVEFSQkFMTF9DT01QUkVTU0lPTikKICAgc2V0KG11bHRpVmFsdWVBcmdzIEdDT1ZfT1BUSU9OUykKICAgY21ha2VfcGFyc2VfYXJndW1lbnRzKEdDT1YgICIke29wdGlvbnN9IiAiJHtvbmVWYWx1ZUFyZ3N9IgogICAgICIke211bHRpVmFsdWVBcmdzfSIgIiIgJHtBUkdOfSApCkBAIC05MSw2ICsxMDQsMTMgQEAKICAgZWxzZSgpCiAgICAgc2V0KGdjb3ZfY29tbWFuZCAiJHtHQ09WX0dDT1ZfQ09NTUFORH0iKQogICBlbmRpZigpCisgIGlmKE5PVCBERUZJTkVEIEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTikKKyAgICBzZXQoR0NPVl9UQVJCQUxMX0NPTVBSRVNTSU9OICJCWklQMiIpCisgIGVsc2VpZiggR0NPVl9UQVJCQUxMX0NPTVBSRVNTSU9OIEFORAorICAgICAgTk9UIEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTiBNQVRDSEVTICJeKEdaSVB8QlpJUDJ8WFp8WlNURHxGUk9NX0VYVCkkIikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUQVJCQUxMX0NPTVBSRVNTSU9OIG11c3QgYmUgb25lIG9mIE9GRiwgR1pJUCwgIgorICAgICAgIkJaSVAyLCBYWiwgWlNURCwgb3IgRlJPTV9FWFQgZm9yIGN0ZXN0X2NvdmVyYWdlX2NvbGxlY3RfZ2NvdiIpCisgIGVuZGlmKCkKICAgIyBydW4gZ2NvdiBvbiBlYWNoIGdjZGEgZmlsZSBpbiB0aGUgYmluYXJ5IHRyZWUKICAgc2V0KGdjZGFfZmlsZXMpCiAgIHNldChsYWJlbF9maWxlcykKQEAgLTEzNywxMSArMTU3LDIzIEBACiAgIGlmKE5PVCBERUZJTkVEIEdDT1ZfR0NPVl9PUFRJT05TKQogICAgIHNldChHQ09WX0dDT1ZfT1BUSU9OUyAtYiAteCkKICAgZW5kaWYoKQorICBpZiAoR0NPVl9RVUlFVCkKKyAgICBzZXQoY292ZXJhZ2Vfb3V0X29wdHMKKyAgICAgIE9VVFBVVF9RVUlFVAorICAgICAgRVJST1JfUVVJRVQKKyAgICAgICkKKyAgZWxzZSgpCisgICAgc2V0KGNvdmVyYWdlX291dF9vcHRzCisgICAgICBPVVRQVVRfRklMRSAiJHtjb3ZlcmFnZV9kaXJ9L2djb3YubG9nIgorICAgICAgRVJST1JfRklMRSAgIiR7Y292ZXJhZ2VfZGlyfS9nY292LmxvZyIKKyAgICAgICkKKyAgZW5kaWYoKQogICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORAogICAgICR7Z2Nvdl9jb21tYW5kfSAke0dDT1ZfR0NPVl9PUFRJT05TfSAke2djZGFfZmlsZXN9Ci0gICAgT1VUUFVUX1ZBUklBQkxFIG91dAogICAgIFJFU1VMVF9WQVJJQUJMRSByZXMKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke2NvdmVyYWdlX2Rpcn0pCisgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtjb3ZlcmFnZV9kaXJ9CisgICAgJHtjb3ZlcmFnZV9vdXRfb3B0c30KKyAgICApCiAKICAgaWYgKEdDT1ZfREVMRVRFKQogICAgIGZpbGUoUkVNT1ZFICR7Z2NkYV9maWxlc30pCkBAIC0xNDksNyArMTgxLDcgQEAKIAogICBpZihOT1QgIiR7cmVzfSIgRVFVQUwgMCkKICAgICBpZiAoTk9UIEdDT1ZfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiRXJyb3IgcnVubmluZyBnY292OiAke3Jlc30gJHtvdXR9IikKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJFcnJvciBydW5uaW5nIGdjb3Y6ICR7cmVzfSwgc2VlXG4gICR7Y292ZXJhZ2VfZGlyfS9nY292LmxvZyIpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAgICMgY3JlYXRlIGpzb24gZmlsZSB3aXRoIHByb2plY3QgaW5mb3JtYXRpb24KQEAgLTI1OCwxNCArMjkwLDM4IEBACiAke3VuY292ZXJlZF9maWxlc19mb3JfdGFyfQogIikKIAotICBpZiAoR0NPVl9RVUlFVCkKLSAgICBzZXQodGFyX29wdHMgImNmaiIpCi0gIGVsc2UoKQotICAgIHNldCh0YXJfb3B0cyAiY3ZmaiIpCisgICMgUHJlcGFyZSB0YXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworCisgIHNldCh0YXJfb3B0cyAiIikKKyAgIyBTZWxlY3QgZGF0YSBjb21wcmVzc2lvbiBtb2RlCisgIGlmKCBHQ09WX1RBUkJBTExfQ09NUFJFU1NJT04gU1RSRVFVQUwgIkZST01fRVhUIikKKyAgICBpZiggR0NPVl9UQVJCQUxMIE1BVENIRVMgW1tcLih0Z3p8dGFyLmd6KSRdXSApCisgICAgICBzdHJpbmcoQVBQRU5EIHRhcl9vcHRzICJ6IikKKyAgICBlbHNlaWYoIEdDT1ZfVEFSQkFMTCBNQVRDSEVTIFtbXC4odHh6fHRhci54eikkXV0gKQorICAgICAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAiSiIpCisgICAgZWxzZWlmKCBHQ09WX1RBUkJBTEwgTUFUQ0hFUyBbW1wuKHRienx0YXIuYnopJF1dICkKKyAgICAgIHN0cmluZyhBUFBFTkQgdGFyX29wdHMgImoiKQorICAgIGVuZGlmKCkKKyAgZWxzZWlmKEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTiBTVFJFUVVBTCAiR1pJUCIpCisgICAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAieiIpCisgIGVsc2VpZihHQ09WX1RBUkJBTExfQ09NUFJFU1NJT04gU1RSRVFVQUwgIlhaIikKKyAgICBzdHJpbmcoQVBQRU5EIHRhcl9vcHRzICJKIikKKyAgZWxzZWlmKEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTiBTVFJFUVVBTCAiQlpJUDIiKQorICAgIHN0cmluZyhBUFBFTkQgdGFyX29wdHMgImoiKQorICBlbHNlaWYoR0NPVl9UQVJCQUxMX0NPTVBSRVNTSU9OIFNUUkVRVUFMICJaU1REIikKKyAgICBzZXQoenN0ZF90YXJfb3B0ICItLXpzdGQiKQogICBlbmRpZigpCisgICMgVmVyYm9zaXR5IG9wdGlvbnMKKyAgaWYoTk9UIEdDT1ZfUVVJRVQgQU5EIE5PVCB0YXJfb3B0cyBNQVRDSEVTIHYpCisgICAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAidiIpCisgIGVuZGlmKCkKKyAgIyBQcmVwZW5kIG9wdGlvbiAnYycgc3BlY2lmeWluZyAnY3JlYXRlJworICBzdHJpbmcoUFJFUEVORCB0YXJfb3B0cyAiYyIpCisgICMgQXBwZW5kIG9wdGlvbiAnZicgc28gdGhhdCB0aGUgbmV4dCBhcmd1bWVudCBpcyB0aGUgZmlsZW5hbWUKKyAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAiZiIpCiAKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQKLSAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHRhciAke3Rhcl9vcHRzfSAke0dDT1ZfVEFSQkFMTH0KKyAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHRhciAke3Rhcl9vcHRzfSAke0dDT1ZfVEFSQkFMTH0gJHt6c3RkX3Rhcl9vcHR9CiAgICAgIi0tbXRpbWU9MTk3MC0wMS0wMSAwOjA6MCBVVEMiCiAgICAgIi0tZm9ybWF0PWdudXRhciIKICAgICAtLWZpbGVzLWZyb209JHtjb3ZlcmFnZV9kaXJ9L2NvdmVyYWdlX2ZpbGVfbGlzdC50eHQKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuQ29tcGlsZXJGbGFnLmNtYWtlIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5Db21waWxlckZsYWcuY21ha2UKaW5kZXggMjk5Y2Q4Yy4uYjhmYWM5NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0ZvcnRyYW5Db21waWxlckZsYWcuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5Db21waWxlckZsYWcuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDaGVja0ZvcnRyYW5Db21waWxlckZsYWcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogQ2hlY2sgd2hldGhlciB0aGUgRm9ydHJhbiBjb21waWxlciBzdXBwb3J0cyBhIGdpdmVuIGZsYWcuCiAKIC4uIGNvbW1hbmQ6OiBjaGVja19mb3J0cmFuX2NvbXBpbGVyX2ZsYWcKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzLmNtYWtlCmluZGV4IGYwZmRlOGQuLmQ3NzZiMGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5Tb3VyY2VDb21waWxlcy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogQ2hlY2sgaWYgZ2l2ZW4gRm9ydHJhbiBzb3VyY2UgY29tcGlsZXMgYW5kIGxpbmtzIGludG8gYW4gZXhlY3V0YWJsZS4KIAogLi4gY29tbWFuZDo6IGNoZWNrX2ZvcnRyYW5fc291cmNlX2NvbXBpbGVzCkBAIC0xMDMsOCArMTA1LDYgQEAKICAgICBpZihOT1QgX1NSQ19FWFQpCiAgICAgICBzZXQoX1NSQ19FWFQgRikKICAgICBlbmRpZigpCi0gICAgc2V0KE1BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TCi0gICAgICAiLUQke1ZBUn0gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQogICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OUykKICAgICAgIHNldChDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfTElOS19PUFRJT05TCiAgICAgICAgIExJTktfT1BUSU9OUyAke0NNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OU30pCkBAIC0xMzIsMTAgKzEzMiwxMCBAQAogICAgIHRyeV9jb21waWxlKCR7VkFSfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9zcmMuJHtfU1JDX0VYVH0KLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgJHtDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OU30KKyAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgLUQke1ZBUn0gJHtDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OU30KICAgICAgICR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJTktfT1BUSU9OU30KICAgICAgICR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJQlJBUklFU30KLSAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OU30KKyAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtDTUFLRV9SRVFVSVJFRF9GTEFHU30KICAgICAgICIke0NIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTX0FERF9JTkNMVURFU30iCiAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZVJ1bnMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZVJ1bnMuY21ha2UKaW5kZXggYTNlNWQ1ZC4uYTcxMDM1MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0ZvcnRyYW5Tb3VyY2VSdW5zLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlUnVucy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrRm9ydHJhblNvdXJjZVJ1bnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBDaGVjayBpZiBnaXZlbiBGb3J0cmFuIHNvdXJjZSBjb21waWxlcyBhbmQgbGlua3MgaW50byBhbiBleGVjdXRhYmxlIGFuZCBjYW4KIHN1YnNlcXVlbnRseSBiZSBydW4uCiAKQEAgLTk4LDggKzEwMCw2IEBACiAgICAgaWYoTk9UIF9TUkNfRVhUKQogICAgICAgc2V0KF9TUkNfRVhUIEY5MCkKICAgICBlbmRpZigpCi0gICAgc2V0KE1BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TCi0gICAgICAiLUQke1ZBUn0gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQogICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OUykKICAgICAgIHNldChDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfTElOS19PUFRJT05TCiAgICAgICAgIExJTktfT1BUSU9OUyAke0NNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OU30pCkBAIC0xMjcsMTAgKzEyNywxMCBAQAogICAgIHRyeV9ydW4oJHtWQVJ9X0VYSVRDT0RFICR7VkFSfV9DT01QSUxFRAogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9zcmMuJHtfU1JDX0VYVH0KLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgJHtDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OU30KKyAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgLUQke1ZBUn0gJHtDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OU30KICAgICAgICR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJTktfT1BUSU9OU30KICAgICAgICR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJQlJBUklFU30KLSAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OU30KKyAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtDTUFLRV9SRVFVSVJFRF9GTEFHU30KICAgICAgIC1EQ01BS0VfU0tJUF9SUEFUSDpCT09MPSR7Q01BS0VfU0tJUF9SUEFUSH0KICAgICAgICIke0NIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTX0FERF9JTkNMVURFU30iCiAgICAgICBDT01QSUxFX09VVFBVVF9WQVJJQUJMRSBPVVRQVVQKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tJUE9TdXBwb3J0ZWQuY21ha2UgYi9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkLmNtYWtlCmluZGV4IDkwYTlmNjEuLjFkZDk1MWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tJUE9TdXBwb3J0ZWQuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0lQT1N1cHBvcnRlZC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrSVBPU3VwcG9ydGVkCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogQ2hlY2sgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYW4gaW50ZXJwcm9jZWR1cmFsIG9wdGltaXphdGlvbiAoSVBPL0xUTykuCiBVc2UgdGhpcyBiZWZvcmUgZW5hYmxpbmcgdGhlIDpwcm9wX3RndDpgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTmAgdGFyZ2V0CiBwcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tMYW5ndWFnZS5jbWFrZSBiL01vZHVsZXMvQ2hlY2tMYW5ndWFnZS5jbWFrZQppbmRleCAxYzRlN2QzLi40NDM4N2Q0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrTGFuZ3VhZ2UuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0xhbmd1YWdlLmNtYWtlCkBAIC0yMCw3ICsyMCw3IEBACiBhcyB0aGUgY29tcGlsZXIgdGhhdCB3YXMgZm91bmQsIG9yIGBgTk9URk9VTkRgYCBpZiB0aGUgbGFuZ3VhZ2UgY2Fubm90IGJlCiBlbmFibGVkLiBGb3IgQ1VEQSB3aGljaCBjYW4gaGF2ZSBhbiBleHBsaWNpdCBob3N0IGNvbXBpbGVyLCB0aGUgY2FjaGUKIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSYCB2YXJpYWJsZSB3aWxsIGJlIHNldCBpZiBpdCB3YXMgcmVxdWlyZWQKLWZvciBjb21waWxhdGlvbi4KK2ZvciBjb21waWxhdGlvbiAoYW5kIGNsZWFyZWQgaWYgaXQgd2FzIG5vdCkuCiAKIEV4YW1wbGU6CiAKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgIHNldChleHRyYV9jb21waWxlcl92YXJpYWJsZXMgInNldChDTUFLRV9DVURBX0hPU1RfQ09NUElMRVIgXFxcIlwke0NNQUtFX0NVREFfSE9TVF9DT01QSUxFUn1cXFwiKSIpCiAgICAgZW5kaWYoKQogCi0gICAgc2V0KGNvbnRlbnQKKyAgICBzZXQoX2NsX2NvbnRlbnQKICAgICAgICJjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gJHtDTUFLRV9WRVJTSU9OfSkKIHByb2plY3QoQ2hlY2ske2xhbmd9ICR7bGFuZ30pCiBmaWxlKFdSSVRFIFwiXCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9yZXN1bHQuY21ha2VcIgpAQCAtNTcsNyArNTcsNyBAQAogICAgICkKIAogICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL0NoZWNrJHtsYW5nfS9DTWFrZUxpc3RzLnR4dCIKLSAgICAgICIke2NvbnRlbnR9IikKKyAgICAgICIke19jbF9jb250ZW50fSIpCiAgICAgaWYoQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFKQogICAgICAgc2V0KF9EX0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRSAiLURDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0U6SU5URVJOQUw9JHtDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0V9IikKICAgICBlbHNlKCkKQEAgLTc1LDIyICs3NSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVQgIiR7Q01BS0VfR0VORVJBVE9SX1RPT0xTRVR9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfRF9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0V9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke19EX0NNQUtFX01BS0VfUFJPR1JBTX0KLSAgICAgIE9VVFBVVF9WQVJJQUJMRSBvdXRwdXQKLSAgICAgIEVSUk9SX1ZBUklBQkxFIG91dHB1dAotICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgT1VUUFVUX1ZBUklBQkxFIF9jbF9vdXRwdXQKKyAgICAgIEVSUk9SX1ZBUklBQkxFIF9jbF9vdXRwdXQKKyAgICAgIFJFU1VMVF9WQVJJQUJMRSBfY2xfcmVzdWx0CiAgICAgICApCiAgICAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9DaGVjayR7bGFuZ30vcmVzdWx0LmNtYWtlIE9QVElPTkFMKQotICAgIGlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVIgQU5EICIke3Jlc3VsdH0iIFNUUkVRVUFMICIwIikKKyAgICBpZihDTUFLRV8ke2xhbmd9X0NPTVBJTEVSIEFORCAiJHtfY2xfcmVzdWx0fSIgU1RSRVFVQUwgIjAiKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIiR7X2Rlc2N9IHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgotICAgICAgICAiJHtvdXRwdXR9XG4iKQorICAgICAgICAiJHtfY2xfb3V0cHV0fVxuIikKICAgICAgIHNldChfQ0hFQ0tfQ09NUElMRVJfU1RBVFVTIENIRUNLX1BBU1MpCiAgICAgZWxzZSgpCiAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBOT1RGT1VORCkKICAgICAgIHNldChfQ0hFQ0tfQ09NUElMRVJfU1RBVFVTIENIRUNLX0ZBSUwpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICIke19kZXNjfSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKLSAgICAgICAgIiR7b3V0cHV0fVxuIikKKyAgICAgICAgIiR7X2NsX291dHB1dH1cbiIpCiAgICAgZW5kaWYoKQogICAgIG1lc3NhZ2UoJHtfQ0hFQ0tfQ09NUElMRVJfU1RBVFVTfSAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSIpCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVIgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUn0iIENBQ0hFIEZJTEVQQVRIICIke2xhbmd9IGNvbXBpbGVyIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tMaW5rZXJGbGFnLmNtYWtlIGIvTW9kdWxlcy9DaGVja0xpbmtlckZsYWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3MzAxZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvQ2hlY2tMaW5rZXJGbGFnLmNtYWtlCkBAIC0wLDAgKzEsODMgQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworI1s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVsucnN0OgorQ2hlY2tMaW5rZXJGbGFnCistLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitDaGVjayB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIGdpdmVuIGxpbmsgZmxhZy4KKworLi4gY29tbWFuZDo6IGNoZWNrX2xpbmtlcl9mbGFnCisKKyAgLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICBjaGVja19saW5rZXJfZmxhZyg8bGFuZz4gPGZsYWc+IDx2YXI+KQorCitDaGVjayB0aGF0IHRoZSBsaW5rIGBgPGZsYWc+YGAgaXMgYWNjZXB0ZWQgYnkgdGhlIGBgPGxhbmc+YGAgY29tcGlsZXIgd2l0aG91dAorYSBkaWFnbm9zdGljLiAgU3RvcmVzIHRoZSByZXN1bHQgaW4gYW4gaW50ZXJuYWwgY2FjaGUgZW50cnkgbmFtZWQgYGA8dmFyPmBgLgorCitUaGlzIGNvbW1hbmQgdGVtcG9yYXJpbHkgc2V0cyB0aGUgYGBDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlNgYCB2YXJpYWJsZQorYW5kIGNhbGxzIHRoZSBgYGNoZWNrXzxsYW5nPl9zb3VyY2VfY29tcGlsZXNgYCBtYWNybyBmcm9tIHRoZQorYGBDaGVjazxsYW5nPlNvdXJjZUNvbXBpbGVzYGAgbW9kdWxlICg6bW9kdWxlOmBDaGVja0NTb3VyY2VDb21waWxlc2AsCis6bW9kdWxlOmBDaGVja0NTb3VyY2VDb21waWxlc2AsIDptb2R1bGU6YENoZWNrQ1hYU291cmNlQ29tcGlsZXNgLAorOm1vZHVsZTpgQ2hlY2tPQkpDU291cmNlQ29tcGlsZXNgLCA6bW9kdWxlOmBDaGVja09CSkNYWFNvdXJjZUNvbXBpbGVzYCBvcgorOm1vZHVsZTpgQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXNgKS4gIFNlZSBkb2N1bWVudGF0aW9uIG9mIHRoZXNlCittb2R1bGVzIGZvciBhIGxpc3Rpbmcgb2YgdmFyaWFibGVzIHRoYXQgY2FuIG90aGVyd2lzZSBtb2RpZnkgdGhlIGJ1aWxkLgorCitUaGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiByZWx5IG9uIDpwcm9wX3RndDpgTElOS19PUFRJT05TYCBwcm9wZXJ0eSB0bworY2hlY2sgdGhlIHNwZWNpZmllZCBmbGFnLiBUaGUgYGBMSU5LRVI6YGAgcHJlZml4LCBhcyBkZXNjcmliZWQgaW4KKzpjb21tYW5kOmB0YXJnZXRfbGlua19vcHRpb25zYCBjb21tYW5kLCBjYW4gYmUgdXNlZCBhcyB3ZWxsLgorCitBIHBvc2l0aXZlIHJlc3VsdCBmcm9tIHRoaXMgY2hlY2sgaW5kaWNhdGVzIG9ubHkgdGhhdCB0aGUgY29tcGlsZXIgZGlkIG5vdAoraXNzdWUgYSBkaWFnbm9zdGljIG1lc3NhZ2Ugd2hlbiBnaXZlbiB0aGUgbGluayBmbGFnLiAgV2hldGhlciB0aGUgZmxhZyBoYXMgYW55CitlZmZlY3Qgb3IgZXZlbiBhIHNwZWNpZmljIG9uZSBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbW9kdWxlLgorCisuLiBub3RlOjoKKyAgU2luY2UgdGhlIDpjb21tYW5kOmB0cnlfY29tcGlsZWAgY29tbWFuZCBmb3J3YXJkcyBmbGFncyBmcm9tIHZhcmlhYmxlcworICBsaWtlIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTYCwgdW5rbm93biBmbGFncyBpbiBzdWNoIHZhcmlhYmxlcyBtYXkKKyAgY2F1c2UgYSBmYWxzZSBuZWdhdGl2ZSBmb3IgdGhpcyBjaGVjay4KKyNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCisKK2luY2x1ZGVfZ3VhcmQoR0xPQkFMKQorCitpbmNsdWRlKENNYWtlQ2hlY2tDb21waWxlckZsYWdDb21tb25QYXR0ZXJucykKKworZnVuY3Rpb24oQ0hFQ0tfTElOS0VSX0ZMQUcgX2xhbmcgX2ZsYWcgX3ZhcikKKyAgZ2V0X3Byb3BlcnR5IChfc3VwcG9ydGVkX2xhbmd1YWdlcyBHTE9CQUwgUFJPUEVSVFkgRU5BQkxFRF9MQU5HVUFHRVMpCisgIGlmIChOT1QgX2xhbmcgSU5fTElTVCBfc3VwcG9ydGVkX2xhbmd1YWdlcykKKyAgICBtZXNzYWdlIChTRU5EX0VSUk9SICJjaGVja19saW5rZXJfZmxhZzogJHtfbGFuZ306IHVua25vd24gbGFuZ3VhZ2UuIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaW5jbHVkZSAoQ2hlY2ske19sYW5nfVNvdXJjZUNvbXBpbGVzKQorCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlMgIiR7X2ZsYWd9IikKKworICAjIE5vcm1hbGl6ZSBsb2NhbGUgZHVyaW5nIHRlc3QgY29tcGlsYXRpb24uCisgIHNldChfbG9jYWxlX3ZhcnMgTENfQUxMIExDX01FU1NBR0VTIExBTkcpCisgIGZvcmVhY2godiBJTiBMSVNUUyBfbG9jYWxlX3ZhcnMpCisgICAgc2V0KF9sb2NhbGVfdmFyc19zYXZlZF8ke3Z9ICIkRU5WeyR7dn19IikKKyAgICBzZXQoRU5WeyR7dn19IEMpCisgIGVuZGZvcmVhY2goKQorCisgIGlmIChfbGFuZyBNQVRDSEVTICJeKEN8Q1hYKSQiKQorICAgIHNldCAoX3NvdXJjZSAiaW50IG1haW4oKSB7IHJldHVybiAwOyB9IikKKyAgZWxzZWlmIChfbGFuZyBTVFJFUVVBTCAiRm9ydHJhbiIpCisgICAgc2V0IChfc291cmNlICIgICAgICAgcHJvZ3JhbSB0ZXN0XG4gICAgICAgc3RvcFxuICAgICAgIGVuZCBwcm9ncmFtIikKKyAgZWxzZWlmIChfbGFuZyBNQVRDSEVTICJeKE9CSkN8T0JKQ1hYKSQiKQorICAgIHNldCAoX3NvdXJjZSAiI2lmbmRlZiBfX09CSkNfX1xuIyAgZXJyb3IgXCJOb3QgYW4gT2JqZWN0aXZlLUMrKyBjb21waWxlclwiXG4jZW5kaWZcbmludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH0iKQorICBlbHNlKCkKKyAgICBtZXNzYWdlIChTRU5EX0VSUk9SICJjaGVja19saW5rZXJfZmxhZzogJHtfbGFuZ306IHVuc3VwcG9ydGVkIGxhbmd1YWdlLiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorICBjaGVja19jb21waWxlcl9mbGFnX2NvbW1vbl9wYXR0ZXJucyhfY29tbW9uX3BhdHRlcm5zKQorCisgIGNtYWtlX2xhbmd1YWdlIChDQUxMIGNoZWNrXyR7X2xhbmd9X3NvdXJjZV9jb21waWxlcyAiJHtfc291cmNlfSIgJHtfdmFyfSAke19jb21tb25fcGF0dGVybnN9KQorCisgIGZvcmVhY2godiBJTiBMSVNUUyBfbG9jYWxlX3ZhcnMpCisgICAgc2V0KEVOVnske3Z9fSAke19sb2NhbGVfdmFyc19zYXZlZF8ke3Z9fSkKKyAgZW5kZm9yZWFjaCgpCisgIHNldCgke192YXJ9ICIkeyR7X3Zhcn19IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrT0JKQ0NvbXBpbGVyRmxhZy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tPQkpDQ29tcGlsZXJGbGFnLmNtYWtlCmluZGV4IDFkOTc1ZGEuLmE5OGY0MjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDQ29tcGlsZXJGbGFnLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tPQkpDQ29tcGlsZXJGbGFnLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tPQkpDQ29tcGlsZXJGbGFnCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDaGVjayB3aGV0aGVyIHRoZSBPYmplY3RpdmUtQyBjb21waWxlciBzdXBwb3J0cyBhIGdpdmVuIGZsYWcuCiAKIC4uIGNvbW1hbmQ6OiBjaGVja19vYmpjX2NvbXBpbGVyX2ZsYWcKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlQ29tcGlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrT0JKQ1NvdXJjZUNvbXBpbGVzLmNtYWtlCmluZGV4IDYwMWYxZmEuLjUwMmVkNzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlQ29tcGlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VDb21waWxlcy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrT0JKQ1NvdXJjZUNvbXBpbGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENoZWNrIGlmIGdpdmVuIE9iamVjdGl2ZS1DIHNvdXJjZSBjb21waWxlcyBhbmQgbGlua3MgaW50byBhbiBleGVjdXRhYmxlLgogCiAuLiBjb21tYW5kOjogY2hlY2tfb2JqY19zb3VyY2VfY29tcGlsZXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlUnVucy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlUnVucy5jbWFrZQppbmRleCA2Njg0NjkzLi45ZDRmYjFiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrT0JKQ1NvdXJjZVJ1bnMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VSdW5zLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tPQkpDU291cmNlUnVucwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENoZWNrIGlmIGdpdmVuIE9iamVjdGl2ZS1DIHNvdXJjZSBjb21waWxlcyBhbmQgbGlua3MgaW50byBhbiBleGVjdXRhYmxlIGFuZCBjYW4KIHN1YnNlcXVlbnRseSBiZSBydW4uCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tPQkpDWFhDb21waWxlckZsYWcuY21ha2UgYi9Nb2R1bGVzL0NoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnLmNtYWtlCmluZGV4IGMzMjc0MWIuLjc5NDRhYjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDWFhDb21waWxlckZsYWcuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja09CSkNYWENvbXBpbGVyRmxhZy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENoZWNrIHdoZXRoZXIgdGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgc3VwcG9ydHMgYSBnaXZlbiBmbGFnLgogCiAuLiBjb21tYW5kOjogY2hlY2tfb2JqY3h4X2NvbXBpbGVyX2ZsYWcKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlcy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlcy5jbWFrZQppbmRleCAyZWU3OWY0Li43YjgzOWU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlQ29tcGlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja09CSkNYWFNvdXJjZUNvbXBpbGVzLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENoZWNrIGlmIGdpdmVuIE9iamVjdGl2ZS1DKysgc291cmNlIGNvbXBpbGVzIGFuZCBsaW5rcyBpbnRvIGFuIGV4ZWN1dGFibGUuCiAKIC4uIGNvbW1hbmQ6OiBjaGVja19vYmpjeHhfc291cmNlX2NvbXBpbGVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlUnVucy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VSdW5zLmNtYWtlCmluZGV4IDdmN2UwNGYuLmMzMjc1OTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VSdW5zLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VSdW5zLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tPQkpDWFhTb3VyY2VSdW5zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDaGVjayBpZiBnaXZlbiBPYmplY3RpdmUtQysrIHNvdXJjZSBjb21waWxlcyBhbmQgbGlua3MgaW50byBhbiBleGVjdXRhYmxlIGFuZCBjYW4KIHN1YnNlcXVlbnRseSBiZSBydW4uCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tQSUVTdXBwb3J0ZWQuY21ha2UgYi9Nb2R1bGVzL0NoZWNrUElFU3VwcG9ydGVkLmNtYWtlCmluZGV4IDZkNjNmMGIuLmE5OWQ4YzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tQSUVTdXBwb3J0ZWQuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja1BJRVN1cHBvcnRlZC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrUElFU3VwcG9ydGVkCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIENoZWNrIHdoZXRoZXIgdGhlIGxpbmtlciBzdXBwb3J0cyBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlIChQSUUpIG9yIE5vCiBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlIChOT19QSUUpIGZvciBleGVjdXRhYmxlcy4KIFVzZSB0aGlzIHRvIGVuc3VyZSB0aGF0IHRoZSA6cHJvcF90Z3Q6YFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREVgIHRhcmdldApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja1R5cGVTaXplLmMuaW4gYi9Nb2R1bGVzL0NoZWNrVHlwZVNpemUuYy5pbgppbmRleCA4MjAzNWEzLi5mYjkzMDczIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrVHlwZVNpemUuYy5pbgorKysgYi9Nb2R1bGVzL0NoZWNrVHlwZVNpemUuYy5pbgpAQCAtNSwxMCArNSwxNCBAQAogIyBkZWZpbmUgS0VZICdfJywnXycsJ2knLCczJywnOCcsJzYnCiAjZWxpZiBkZWZpbmVkKF9feDg2XzY0KQogIyBkZWZpbmUgS0VZICdfJywnXycsJ3gnLCc4JywnNicsJ18nLCc2JywnNCcKLSNlbGlmIGRlZmluZWQoX19wcGNfXykKLSMgZGVmaW5lIEtFWSAnXycsJ18nLCdwJywncCcsJ2MnLCdfJywnXycKKyNlbGlmIGRlZmluZWQoX19QUEM2NF9fKQorIyBkZWZpbmUgS0VZICdfJywnXycsJ1AnLCdQJywnQycsJzYnLCc0JywnXycsJ18nCiAjZWxpZiBkZWZpbmVkKF9fcHBjNjRfXykKICMgZGVmaW5lIEtFWSAnXycsJ18nLCdwJywncCcsJ2MnLCc2JywnNCcsJ18nLCdfJworI2VsaWYgZGVmaW5lZChfX1BQQ19fKQorIyBkZWZpbmUgS0VZICdfJywnXycsJ1AnLCdQJywnQycsJ18nLCdfJworI2VsaWYgZGVmaW5lZChfX3BwY19fKQorIyBkZWZpbmUgS0VZICdfJywnXycsJ3AnLCdwJywnYycsJ18nLCdfJwogI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKICMgZGVmaW5lIEtFWSAnXycsJ18nLCdhJywnYScsJ3InLCdjJywnaCcsJzYnLCc0JywnXycsJ18nCiAjZWxpZiBkZWZpbmVkKF9fQVJNX0FSQ0hfN0FfXykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQVJNQ2xhbmcuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0FSTUNsYW5nLmNtYWtlCmluZGV4IDI1MThhYzcuLjAxY2U5MWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQVJNQ2xhbmcuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9BUk1DbGFuZy5jbWFrZQpAQCAtMTksNiArMTksMTMgQEAKIHNldChDTUFLRV9BUiAiJHtDTUFLRV9BUk1DbGFuZ19BUn0iIENBQ0hFIEZJTEVQQVRIICJUaGUgQVJNQ2xhbmcgYXJjaGl2ZXIiIEZPUkNFKQogbWFya19hc19hZHZhbmNlZChDTUFLRV9BUk1DbGFuZ19BUikKIAoraWYgKENNQUtFX0xJTktFUiBNQVRDSEVTICJhcm1saW5rIikKKyAgc2V0KF9fQ01BS0VfQVJNQ2xhbmdfVVNJTkdfYXJtbGluayBUUlVFKQorICBzZXQoQ01BS0VfTElCUkFSWV9QQVRIX0ZMQUcgIi0tdXNlcmxpYnBhdGg9IikKK2Vsc2UoKQorICBzZXQoX19DTUFLRV9BUk1DbGFuZ19VU0lOR19hcm1saW5rIEZBTFNFKQorZW5kaWYoKQorCiAjIGdldCBjb21waWxlciBzdXBwb3J0ZWQgY3B1IGxpc3QKIGZ1bmN0aW9uKF9fYXJtY2xhbmdfc2V0X3Byb2Nlc3Nvcl9saXN0IGxhbmcgb3V0X3ZhcikKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUn0iIC0tdGFyZ2V0PSR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9UQVJHRVR9IC1tY3B1PWxpc3QKQEAgLTM5LDYgKzQ2LDMyIEBACiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIAorIyBnZXQgY29tcGlsZXIgc3VwcG9ydGVkIGFyY2ggbGlzdAorZnVuY3Rpb24oX19hcm1jbGFuZ19zZXRfYXJjaF9saXN0IGxhbmcgb3V0X3ZhcikKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUn0iIC0tdGFyZ2V0PSR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9UQVJHRVR9IC1tYXJjaD1saXN0CisgICAgT1VUUFVUX1ZBUklBQkxFIGFyY2hfbGlzdAorICAgIEVSUk9SX1ZBUklBQkxFIGFyY2hfbGlzdCkKKyAgc3RyaW5nKFJFR0VYIE1BVENIQUxMICItbWFyY2g9KFteIFxuXSopIiBhcmNoX2xpc3QgIiR7YXJjaF9saXN0fSIpCisgIHN0cmluZyhSRUdFWCBSRVBMQUNFICItbWFyY2g9IiAiIiBhcmNoX2xpc3QgIiR7YXJjaF9saXN0fSIpCisgIHNldCgke291dF92YXJ9ICIke2FyY2hfbGlzdH0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworIyBnZXQgbGlua2VyIHN1cHBvcnRlZCBjcHUgbGlzdAorZnVuY3Rpb24oX19hcm1saW5rX3NldF9jcHVfbGlzdCBsYW5nIG91dF92YXIpCisgIGlmKF9fQ01BS0VfQVJNQ2xhbmdfVVNJTkdfYXJtbGluaykKKyAgICBzZXQoX19saW5rZXJfd3JhcHBlcl9mbGFncyAiIikKKyAgZWxzZSgpCisgICAgc2V0KF9fbGlua2VyX3dyYXBwZXJfZmxhZ3MgLS10YXJnZXQ9JHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1RBUkdFVH0gLVhsaW5rZXIpCisgIGVuZGlmKCkKKworICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAiJHtDTUFLRV9MSU5LRVJ9IiAke19fbGlua2VyX3dyYXBwZXJfZmxhZ3N9IC0tY3B1PWxpc3QKKyAgICBPVVRQVVRfVkFSSUFCTEUgY3B1X2xpc3QKKyAgICBFUlJPUl9WQVJJQUJMRSBjcHVfbGlzdCkKKyAgc3RyaW5nKFJFR0VYIE1BVENIQUxMICItLWNwdT0oW14gXG5dKikiIGNwdV9saXN0ICIke2NwdV9saXN0fSIpCisgIHN0cmluZyhSRUdFWCBSRVBMQUNFICItLWNwdT0iICIiIGNwdV9saXN0ICIke2NwdV9saXN0fSIpCisgIHNldCgke291dF92YXJ9ICIke2NwdV9saXN0fSIgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCiBtYWNybyhfX2NvbXBpbGVyX2FybWNsYW5nIGxhbmcpCiAgIGlmKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1RBUkdFVCkKICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9UQVJHRVQgYXJtLWFybS1ub25lLWVhYmkpCkBAIC00NiwyNCArNzksNTAgQEAKICAgaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJPQ0VTU09SX0xJU1QpCiAgICAgX19hcm1jbGFuZ19zZXRfcHJvY2Vzc29yX2xpc3QoJHtsYW5nfSBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1BST0NFU1NPUl9MSVNUKQogICBlbmRpZigpCi0gIGlmKE5PVCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiAgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBtdXN0IGJlIHNldCBmb3IgQVJNQ2xhbmdcbiIKLSAgICAgICIgIFN1cHBvcnRlZCBwcm9jZXNzb3I6ICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9QUk9DRVNTT1JfTElTVH1cbiIpCi0gIGVsc2UoKQotICAgIF9fYXJtY2xhbmdfY2hlY2tfcHJvY2Vzc29yKCIke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9IiAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1BST0NFU1NPUl9MSVNUfSIgX0NNQUtFXyR7bGFuZ31fQ0hFQ0tfUkVTVUxUKQotICAgIGlmKE5PVCBfQ01BS0VfJHtsYW5nfV9DSEVDS19SRVNVTFQpCi0gICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIgIFN5c3RlbSBwcm9jZXNzb3IgJyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0nIG5vdCBzdXBwb3J0ZWQgYnkgQVJNQ2xhbmcgJHtsYW5nfSBjb21waWxlclxuIgotICAgICAgICAiICBTdXBwb3J0ZWQgcHJvY2Vzc29yOiAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJPQ0VTU09SX0xJU1R9XG4iKQotICAgIGVuZGlmKCkKLSAgICB1bnNldChfQ01BS0VfJHtsYW5nfV9DSEVDS19SRVNVTFQpCisgIGlmKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0FSQ0hfTElTVCkKKyAgICBfX2FybWNsYW5nX3NldF9hcmNoX2xpc3QoJHtsYW5nfSBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0FSQ0hfTElTVCkKICAgZW5kaWYoKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfSU5JVCAiLW1jcHU9JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSIpCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTICItLWNwdT0ke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9IikKKyAgaWYoTk9UIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgQU5EIE5PVCBDTUFLRV9TWVNURU1fQVJDSCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIgIENNQUtFX1NZU1RFTV9QUk9DRVNTT1Igb3IgQ01BS0VfU1lTVEVNX0FSQ0ggbXVzdCBiZSBzZXQgZm9yIEFSTUNsYW5nXG4iCisgICAgICAiICBTdXBwb3J0ZWQgcHJvY2Vzc29yOiAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJPQ0VTU09SX0xJU1R9XG4iCisgICAgICAiICBTdXBwb3J0ZWQgQXJjaGl0ZWN0dXJlOiAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfQVJDSF9MSVNUfSIpCisgIGVsc2UoKQorICAgIF9fYXJtY2xhbmdfY2hlY2tfcHJvY2Vzc29yKCIke0NNQUtFX1NZU1RFTV9BUkNIfSIgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkNIX0xJU1R9IiBfQ01BS0VfJHtsYW5nfV9DSEVDS19BUkNIX1JFU1VMVCkKKyAgICBpZiggX0NNQUtFXyR7bGFuZ31fQ0hFQ0tfQVJDSF9SRVNVTFQpCisgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfSU5JVCAiLW1hcmNoPSR7Q01BS0VfU1lTVEVNX0FSQ0h9IikKKyAgICAgIHNldChfX21hcmNoX2ZsYWdfc2V0IFRSVUUpCisgICAgZW5kaWYoKQorICAgIF9fYXJtY2xhbmdfY2hlY2tfcHJvY2Vzc29yKCIke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9IiAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1BST0NFU1NPUl9MSVNUfSIgX0NNQUtFXyR7bGFuZ31fQ0hFQ0tfUFJPQ0VTU09SX1JFU1VMVCkKKyAgICBpZihfQ01BS0VfJHtsYW5nfV9DSEVDS19QUk9DRVNTT1JfUkVTVUxUKQorICAgICAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX0lOSVQgIi1tY3B1PSR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0iKQorICAgICAgc2V0KF9fbWNwdV9mbGFnX3NldCBUUlVFKQorICAgIGVuZGlmKCkKKyAgICBpZihOT1QgX19tYXJjaF9mbGFnX3NldCBBTkQgTk9UIF9fbWNwdV9mbGFnX3NldCkKKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkF0bGVhc3Qgb25lIG9mIHRoZSB2YXJpYWJsZXMgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBvciBDTUFLRV9TWVNURU1fQVJDSCBtdXN0IGJlIHNldCBmb3IgQVJNQ2xhbmdcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cHBvcnRlZCBwcm9jZXNzb3I6ICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9QUk9DRVNTT1JfTElTVH1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgU3VwcG9ydGVkIEFyY2hpdGVjdHVyZTogJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0FSQ0hfTElTVH0iKQorICAgIGVuZGlmKCkKKyAgICB1bnNldChfQ01BS0VfJHtsYW5nfV9DSEVDS19QUk9DRVNTT1JfUkVTVUxUKQorICAgIHVuc2V0KF9DTUFLRV8ke2xhbmd9X0NIRUNLX0FSQ0hfUkVTVUxUKQorICBlbmRpZigpCiAKLSAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFICI8Q01BS0VfTElOS0VSPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLS1saXN0IDxUQVJHRVRfQkFTRT4ubWFwIikKKyAgI2NoZWNrIGlmIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgYmVsb25ncyB0byBzdXBwb3J0ZWQgY3B1IGxpc3QgZm9yIGFybWxpbmsKKyAgX19hcm1saW5rX3NldF9jcHVfbGlzdCggJHtsYW5nfSBDTUFLRV9MSU5LRVJfQ1BVX0xJU1QpCisgIGxpc3QoVFJBTlNGT1JNIENNQUtFX0xJTktFUl9DUFVfTElTVCBUT0xPV0VSKQorICBfX2FybWNsYW5nX2NoZWNrX3Byb2Nlc3NvcigiJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSIgIiR7Q01BS0VfTElOS0VSX0NQVV9MSVNUfSIgX0NNQUtFX0NIRUNLX0xJTktfQ1BVX1JFU1VMVCkKKyAgaWYoX0NNQUtFX0NIRUNLX0xJTktfQ1BVX1JFU1VMVCkKKyAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fTElOS19GTEFHUyAiLS1jcHU9JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSIpCisgIGVuZGlmKCkKKworICBpZihfX0NNQUtFX0FSTUNsYW5nX1VTSU5HX2FybWxpbmspCisgICAgc2V0KF9fQ01BS0VfQVJNQ2xhbmdfVVNJTkdfYXJtbGlua19XUkFQUEVSICIiKQorICBlbHNlKCkKKyAgICBzZXQoX19DTUFLRV9BUk1DbGFuZ19VU0lOR19hcm1saW5rX1dSQVBQRVIgJHtDTUFLRV8ke2xhbmd9X0xJTktFUl9XUkFQUEVSX0ZMQUd9KQorICBlbmRpZigpCisgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRSAiPENNQUtFX0xJTktFUj4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+ICR7X19DTUFLRV9BUk1DbGFuZ19VU0lOR19hcm1saW5rX1dSQVBQRVJ9IC0tbGlzdCA8VEFSR0VUX0JBU0U+Lm1hcCIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAgIjxDTUFLRV9BUj4gLS1jcmVhdGUgLWNyIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0NSRUFURSAgICAgICAgICI8Q01BS0VfQVI+IC0tY3JlYXRlIC1jciA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKLSAgc2V0KENNQUtFXyR7bGFuZ31fUkVTUE9OU0VfRklMRV9MSU5LX0ZMQUcgIi0tdmlhPSIpCisgIHNldChDTUFLRV8ke2xhbmd9X1JFU1BPTlNFX0ZJTEVfTElOS19GTEFHICIke19fQ01BS0VfQVJNQ2xhbmdfVVNJTkdfYXJtbGlua19XUkFQUEVSfSAtLXZpYT0iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9PVVRQVVRfRVhURU5TSU9OICIubyIpCiAgIHNldChDTUFLRV8ke2xhbmd9X09VVFBVVF9FWFRFTlNJT05fUkVQTEFDRSAxKQogZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9BYnNvZnQtRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQWJzb2Z0LUZvcnRyYW4uY21ha2UKaW5kZXggNzY1MDJkYy4uODcyNGY4NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9BYnNvZnQtRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0Fic29mdC1Gb3J0cmFuLmNtYWtlCkBAIC05LDMgKzksNSBAQAogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZJWEVEX0ZMQUcgIi1mZml4ZWQiKQogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZSRUVfRkxBRyAiLWZmcmVlIikKIHNldChDTUFLRV9Gb3J0cmFuX0xJTktFUl9XUkFQUEVSX0ZMQUcgIi1YIikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09OICItY3BwIikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLW5vLWNwcCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctQy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DLmNtYWtlCmluZGV4IDI3OTRmNTIuLjI2YTRiYmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DLmNtYWtlCkBAIC0xLDYgKzEsOCBAQAogaW5jbHVkZShDb21waWxlci9DbGFuZykKIF9fY29tcGlsZXJfY2xhbmcoQykKIAorc2V0KENNQUtFX0NfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMpCisKIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQuMCkKICAgc2V0KENNQUtFX0M5MF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jOTAiKQogICBzZXQoQ01BS0VfQzkwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnU5MCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9BcHBsZUNsYW5nLUNYWC5jbWFrZQppbmRleCAxNWVkYzIxLi42MTFjNjc0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DWFguY21ha2UKQEAgLTEsNiArMSw4IEBACiBpbmNsdWRlKENvbXBpbGVyL0NsYW5nKQogX19jb21waWxlcl9jbGFuZyhDWFgpCiAKK3NldChDTUFLRV9DWFhfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMrKykKKwogaWYoTk9UICJ4JHtDTUFLRV9DWFhfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT1BUSU9OU19WSVNJQklMSVRZX0lOTElORVNfSElEREVOICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DLmNtYWtlCmluZGV4IDdjNGEyNjMuLmZiNmZmYTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUMuY21ha2UKQEAgLTgsNiArOCw4IEBACiAKIGlmKCJ4JHtDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieE1TVkMiKQogICBzZXQoQ01BS0VfQ19DTEFOR19USURZX0RSSVZFUl9NT0RFICJjbCIpCitlbHNlaWYoIngke0NNQUtFX0NYWF9DT01QSUxFUl9GUk9OVEVORF9WQVJJQU5UfSIgU1RSRVFVQUwgInhHTlUiKQorICBzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXggYykKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DVURBLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DVURBLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjgyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUNVREEuY21ha2UKQEAgLTAsMCArMSwyOCBAQAoraW5jbHVkZShDb21waWxlci9DbGFuZykKK19fY29tcGlsZXJfY2xhbmcoQ1VEQSkKKworIyBTZXQgZXhwbGljaXRseSwgYmVjYXVzZSBfX2NvbXBpbGVyX2NsYW5nKCkgZG9lc24ndCBzZXQgdGhpcyBpZiB3ZSdyZSBzaW11bGF0aW5nIE1TVkMuCitzZXQoQ01BS0VfREVQRklMRV9GTEFHU19DVURBICItTUQgLU1UIDxPQkpFQ1Q+IC1NRiA8REVQRklMRT4iKQorCisjIEMrKzAzIGlzbid0IHN1cHBvcnRlZCBmb3IgQ1hYLCBidXQgaXMgZm9yIENVREEsIHNvIHdlIG5lZWQgdG8gc2V0IHRoZXNlIG1hbnVhbGx5LgorIyBEbyB0aGlzIGJlZm9yZSBfX2NvbXBpbGVyX2NsYW5nX2N4eF9zdGFuZGFyZHMoKSBzaW5jZSB0aGF0IGFkZHMgdGhlIGZlYXR1cmUuCitzZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzAzIikKK3NldChDTUFLRV9DVURBMDNfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMDMiKQorX19jb21waWxlcl9jbGFuZ19jeHhfc3RhbmRhcmRzKENVREEpCisKK3NldChDTUFLRV9DVURBX0NPTVBJTEVSX0hBU19ERVZJQ0VfTElOS19QSEFTRSBUUlVFKQorc2V0KF9DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBRyAiLXggY3VkYSIpCitzZXQoX0NNQUtFX0NVREFfUFRYX0ZMQUcgIi0tY3VkYS1kZXZpY2Utb25seSAtUyIpCisKKyMgUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIgZXhwYW5kcyBjcm9zc2NvbXBpbGUgdmFyaWFibGVzIGxpa2Ugc3lzcm9vdCBhbmQgdGFyZ2V0IG9ubHkgZm9yIENNQUtFXzxMQU5HPl9DT01QSUxFUi4gT3ZlcnJpZGUgdGhlIGRlZmF1bHQuCitzZXQoQ01BS0VfQ1VEQV9MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9MSU5LU30iKQorc2V0KENNQUtFX0NVREFfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NVREFfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NVREFfRkxBR1M+IDxTT05BTUVfRkxBRz48VEFSR0VUX1NPTkFNRT4gLW8gPFRBUkdFVD4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9MSU5LU30iKQorCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVCAiU1RBVElDIikKK3NldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfU1RBVElDICJjdWRhZGV2cnQ7Y3VkYXJ0X3N0YXRpYyIpCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NIQVJFRCAiY3VkYWRldnJ0O2N1ZGFydCIpCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX05PTkUgICAiIikKKworaWYoVU5JWCkKKyAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NUQVRJQyAicnQiICJwdGhyZWFkIiAiZGwiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUNYWC5jbWFrZQppbmRleCBjYjI0MGY5Li4zMTFkMmIwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUNYWC5jbWFrZQpAQCAtMSw3ICsxLDEwIEBACiBpbmNsdWRlKENvbXBpbGVyL0NsYW5nKQogX19jb21waWxlcl9jbGFuZyhDWFgpCitfX2NvbXBpbGVyX2NsYW5nX2N4eF9zdGFuZGFyZHMoQ1hYKQorCiAKIGlmKCJ4JHtDTUFLRV9DWFhfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVH0iIFNUUkVRVUFMICJ4R05VIikKKyAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXggYysrKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT1BUSU9OU19WSVNJQklMSVRZX0lOTElORVNfSElEREVOICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iKQogZW5kaWYoKQogCkBAIC0xMywxMjEgKzE2LDMgQEAKIGlmKCJ4JHtDTUFLRV9DWFhfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVH0iIFNUUkVRVUFMICJ4TVNWQyIpCiAgIHNldChDTUFLRV9DWFhfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSAiY2wiKQogZW5kaWYoKQotCi1pZigieCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieEdOVSIpCi0gIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi4xKQotICAgIHNldChDTUFLRV9DWFg5OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKys5OCIpCi0gICAgc2V0KENNQUtFX0NYWDk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzk4IikKLSAgZW5kaWYoKQotCi0gIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xKQotICAgIHNldChDTUFLRV9DWFg5OF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgICBzZXQoQ01BS0VfQ1hYMTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTEiKQotICAgIHNldChDTUFLRV9DWFgxMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxMSIpCi0gICAgc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQotICBlbHNlaWYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAyLjEpCi0gICAgc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzB4IikKLSAgICBzZXQoQ01BS0VfQ1hYMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMHgiKQotICBlbmRpZigpCi0KLSAgaWYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjUpCi0gICAgc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE0IikKLSAgICBzZXQoQ01BS0VfQ1hYMTRfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTQiKQotICAgIHNldChDTUFLRV9DWFgxNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgZWxzZWlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQotICAgIHNldChDTUFLRV9DWFgxNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxeSIpCi0gICAgc2V0KENNQUtFX0NYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF5IikKLSAgICBzZXQoQ01BS0VfQ1hYMTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gIGVuZGlmKCkKLQotICBzZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcgNS4wKQotICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiQW5kcm9pZCIpCi0gICAgc2V0KF9jbGFuZ192ZXJzaW9uX3N0ZDE3IDYuMCkKLSAgZW5kaWYoKQotCi0gIGlmIChOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIke19jbGFuZ192ZXJzaW9uX3N0ZDE3fSIpCi0gICAgc2V0KENNQUtFX0NYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE3IikKLSAgICBzZXQoQ01BS0VfQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQotICBlbHNlaWYgKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy41KQotICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxeiIpCi0gICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF6IikKLSAgZW5kaWYoKQotCi0gIGlmIChOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIke19jbGFuZ192ZXJzaW9uX3N0ZDE3fSIpCi0gICAgc2V0KENNQUtFX0NYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzJhIikKLSAgICBzZXQoQ01BS0VfQ1hYMjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMmEiKQotICBlbmRpZigpCi0KLSAgdW5zZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcpCi0KLSAgaWYoIngke0NNQUtFX0NYWF9TSU1VTEFURV9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCi0gICAgIyBUaGUgTVNWQyBzdGFuZGFyZCBsaWJyYXJ5IHJlcXVpcmVzIEMrKzE0LCBhbmQgTVNWQyBpdHNlbGYgaGFzIG5vCi0gICAgIyBub3Rpb24gb2Ygb3BlcmF0aW5nIGluIGEgbW9kZSBub3QgYXdhcmUgb2YgYXQgbGVhc3QgdGhhdCBzdGFuZGFyZC4KLSAgICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTQiKQotICAgIHNldChDTUFLRV9DWFg5OF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxNCIpCi0gICAgc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE0IikKLSAgICBzZXQoQ01BS0VfQ1hYMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTQiKQotCi0gICAgIyBUaGlzIGNsYW5nKysgaXMgbWlzc2luZyBzb21lIGZlYXR1cmVzIGJlY2F1c2Ugb2YgTVNWQyBjb21wYXRpYmlsaXR5LgotICAgIHVuc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQotICAgIHVuc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQotICAgIHVuc2V0KENNQUtFX0NYWDE3X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQotICAgIHVuc2V0KENNQUtFX0NYWDIwX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQotICBlbmRpZigpCi0KLSAgX19jb21waWxlcl9jaGVja19kZWZhdWx0X2xhbmd1YWdlX3N0YW5kYXJkKENYWCAyLjEgOTgpCi1lbHNlaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDMuOQotICAgIEFORCBDTUFLRV9DWFhfU0lNVUxBVEVfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTkuMCkKLSAgIyBUaGlzIHZlcnNpb24gb2YgY2xhbmctY2wgYW5kIHRoZSBNU1ZDIHZlcnNpb24gaXQgc2ltdWxhdGVzIGhhdmUKLSAgIyBzdXBwb3J0IGZvciAtc3RkOiBmbGFncy4KLSAgc2V0KENNQUtFX0NYWDk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1hYOThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gIHNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrKzE0IikKLSAgc2V0KENNQUtFX0NYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNCIpCi0gIGlmIChDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgNi4wKQotICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCi0gICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCi0gICAgc2V0KENNQUtFX0NYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCi0gICAgc2V0KENNQUtFX0NYWDIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQotICBlbHNlKCkKLSAgICBzZXQoQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrbGF0ZXN0IikKLSAgICBzZXQoQ01BS0VfQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCi0gIGVuZGlmKCkKLQotICBfX2NvbXBpbGVyX2NoZWNrX2RlZmF1bHRfbGFuZ3VhZ2Vfc3RhbmRhcmQoQ1hYIDMuOSAxNCkKLWVsc2UoKQotICAjIFRoaXMgdmVyc2lvbiBvZiBjbGFuZy1jbCwgb3IgdGhlIE1TVkMgdmVyc2lvbiBpdCBzaW11bGF0ZXMsIGRvZXMgbm90IGhhdmUKLSAgIyBsYW5ndWFnZSBzdGFuZGFyZHMuICBTZXQgdGhlc2Ugb3B0aW9ucyBhcyBlbXB0eSBzdHJpbmdzIHNvIHRoZSBmZWF0dXJlCi0gICMgdGVzdCBpbmZyYXN0cnVjdHVyZSBjYW4gYXQgbGVhc3QgY2hlY2sgdG8gc2VlIGlmIHRoZXkgYXJlIGRlZmluZWQuCi0gIHNldChDTUFLRV9DWFg5OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1hYMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1hYMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFgxNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1hYMjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQotCi0gICMgVGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBkZWZhdWx0IGZvciB0aGlzCi0gIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfREVGQVVMVCAiIikKLQotICAjIFRoZXJlIGFyZSBubyBjb21waWxlciBtb2RlcyBzbyB3ZSBvbmx5IG5lZWQgdG8gdGVzdCBmZWF0dXJlcyBvbmNlLgotICAjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1hY3JvIGZvciB0aGlzIHNwZWNpYWwgY2FzZS4gIFByZXRlbmQgdGhhdAotICAjIGFsbCBsYW5ndWFnZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBzbyB0aGF0IGF0IGxlYXN0IGNvbXBpbGF0aW9uCi0gICMgY2FuIGJlIGF0dGVtcHRlZC4KLSAgbWFjcm8oY21ha2VfcmVjb3JkX2N4eF9jb21waWxlX2ZlYXR1cmVzKQotICAgIGxpc3QoQVBQRU5EIENNQUtFX0NYWF9DT01QSUxFX0ZFQVRVUkVTCi0gICAgICBjeHhfc3RkXzk4Ci0gICAgICBjeHhfc3RkXzExCi0gICAgICBjeHhfc3RkXzE0Ci0gICAgICBjeHhfc3RkXzE3Ci0gICAgICBjeHhfc3RkXzIwCi0gICAgICApCi0gICAgX3JlY29yZF9jb21waWxlcl9mZWF0dXJlcyhDWFggIiIgQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMpCi0gIGVuZG1hY3JvKCkKLWVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctT0JKQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1PQkpDWFguY21ha2UKaW5kZXggYjAxY2U2NC4uNDUzYjVmZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1PQkpDWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1PQkpDWFguY21ha2UKQEAgLTEsNzAgKzEsMyBAQAogaW5jbHVkZShDb21waWxlci9DbGFuZykKIF9fY29tcGlsZXJfY2xhbmcoT0JKQ1hYKQotCi1pZigieCR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieEdOVSIpCi0gIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi4xKQotICAgIHNldChDTUFLRV9PQkpDWFg5OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKys5OCIpCi0gICAgc2V0KENNQUtFX09CSkNYWDk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzk4IikKLSAgZW5kaWYoKQotCi0gIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xKQotICAgIHNldChDTUFLRV9PQkpDWFg5OF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTEiKQotICAgIHNldChDTUFLRV9PQkpDWFgxMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxMSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDExX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQotICBlbHNlaWYoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAyLjEpCi0gICAgc2V0KENNQUtFX09CSkNYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzB4IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMHgiKQotICBlbmRpZigpCi0KLSAgaWYoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjUpCi0gICAgc2V0KENNQUtFX09CSkNYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE0IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTRfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTQiKQotICAgIHNldChDTUFLRV9PQkpDWFgxNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgZWxzZWlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQotICAgIHNldChDTUFLRV9PQkpDWFgxNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxeSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF5IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gIGVuZGlmKCkKLQotICBzZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcgNS4wKQotCi0gIGlmIChOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIke19jbGFuZ192ZXJzaW9uX3N0ZDE3fSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE3IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQotICBlbHNlaWYgKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy41KQotICAgIHNldChDTUFLRV9PQkpDWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxeiIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF6IikKLSAgZW5kaWYoKQotCi0gIGlmIChOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIke19jbGFuZ192ZXJzaW9uX3N0ZDE3fSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzJhIikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMmEiKQotICBlbmRpZigpCi0KLSAgdW5zZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcpCi0KLSAgX19jb21waWxlcl9jaGVja19kZWZhdWx0X2xhbmd1YWdlX3N0YW5kYXJkKE9CSkNYWCAyLjEgOTgpCi1lbHNlaWYoQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDMuOQotICAgIEFORCBDTUFLRV9PQkpDWFhfU0lNVUxBVEVfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTkuMCkKLSAgIyBUaGlzIHZlcnNpb24gb2YgY2xhbmctY2wgYW5kIHRoZSBNU1ZDIHZlcnNpb24gaXQgc2ltdWxhdGVzIGhhdmUKLSAgIyBzdXBwb3J0IGZvciAtc3RkOiBmbGFncy4KLSAgc2V0KENNQUtFX09CSkNYWDk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfT0JKQ1hYOThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfT0JKQ1hYOThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gIHNldChDTUFLRV9PQkpDWFgxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX09CSkNYWDExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX09CSkNYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrKzE0IikKLSAgc2V0KENNQUtFX09CSkNYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNCIpCi0gIGlmIChDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgNi4wKQotICAgIHNldChDTUFLRV9PQkpDWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCi0gICAgc2V0KENNQUtFX09CSkNYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCi0gICAgc2V0KENNQUtFX09CSkNYWDIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQotICBlbHNlKCkKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrbGF0ZXN0IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCi0gIGVuZGlmKCkKLQotICBfX2NvbXBpbGVyX2NoZWNrX2RlZmF1bHRfbGFuZ3VhZ2Vfc3RhbmRhcmQoT0JKQ1hYIDMuOSAxNCkKLWVuZGlmKCkKK19fY29tcGlsZXJfY2xhbmdfY3h4X3N0YW5kYXJkcyhPQkpDWFgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy5jbWFrZQppbmRleCBmNjU5MTZmLi5iYjUxNmQzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmcuY21ha2UKQEAgLTEwNSwzICsxMDUsMTMwIEBACiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLVhjbGFuZyAtZW1pdC1wY2ggLVhjbGFuZyAtaW5jbHVkZSAtWGNsYW5nIDxQQ0hfSEVBREVSPikKICAgZW5kbWFjcm8oKQogZW5kaWYoKQorCittYWNybyhfX2NvbXBpbGVyX2NsYW5nX2N4eF9zdGFuZGFyZHMgbGFuZykKKyAgaWYoIngke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVH0iIFNUUkVRVUFMICJ4R05VIikKKyAgICBpZihOT1QgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAyLjEpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzk4IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9OThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrOTgiKQorICAgIGVuZGlmKCkKKworICAgIGlmKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuMSkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9OThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzExIikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTEiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKKyAgICBlbHNlaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi4xKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysweCIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzB4IikKKyAgICBlbmRpZigpCisKKyAgICBpZihOT1QgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjUpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE0IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTRfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTQiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKKyAgICBlbHNlaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxeSIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF5IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCisgICAgZW5kaWYoKQorCisgICAgc2V0KF9jbGFuZ192ZXJzaW9uX3N0ZDE3IDUuMCkKKyAgICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiQW5kcm9pZCIpCisgICAgICBzZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcgNi4wKQorICAgIGVuZGlmKCkKKworICAgIGlmIChOT1QgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiJHtfY2xhbmdfdmVyc2lvbl9zdGQxN30iKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNyIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE3IikKKyAgICBlbHNlaWYgKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNSkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMXoiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxeiIpCisgICAgZW5kaWYoKQorCisgICAgaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNi4wKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKKyAgICBlbmRpZigpCisKKyAgICBpZihOT1QgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxMS4wKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30yMF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysyMCIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzIwIikKKyAgICBlbHNlaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIiR7X2NsYW5nX3ZlcnNpb25fc3RkMTd9IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MjBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMmEiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30yMF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysyYSIpCisgICAgZW5kaWYoKQorCisgICAgdW5zZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcpCisKKyAgICBpZigieCR7Q01BS0VfJHtsYW5nfV9TSU1VTEFURV9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCisgICAgICAjIFRoZSBNU1ZDIHN0YW5kYXJkIGxpYnJhcnkgcmVxdWlyZXMgQysrMTQsIGFuZCBNU1ZDIGl0c2VsZiBoYXMgbm8KKyAgICAgICMgbm90aW9uIG9mIG9wZXJhdGluZyBpbiBhIG1vZGUgbm90IGF3YXJlIG9mIGF0IGxlYXN0IHRoYXQgc3RhbmRhcmQuCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE0IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9OThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTQiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNCIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE0IikKKworICAgICAgIyBUaGlzIGNsYW5nKysgaXMgbWlzc2luZyBzb21lIGZlYXR1cmVzIGJlY2F1c2Ugb2YgTVNWQyBjb21wYXRpYmlsaXR5LgorICAgICAgdW5zZXQoQ01BS0VfJHtsYW5nfTExX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICAgICAgdW5zZXQoQ01BS0VfJHtsYW5nfTE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICAgICAgdW5zZXQoQ01BS0VfJHtsYW5nfTE3X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICAgICAgdW5zZXQoQ01BS0VfJHtsYW5nfTIwX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICAgIGVuZGlmKCkKKworICAgIF9fY29tcGlsZXJfY2hlY2tfZGVmYXVsdF9sYW5ndWFnZV9zdGFuZGFyZCgke2xhbmd9IDIuMSA5OCkKKyAgZWxzZWlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMy45CisgICAgICBBTkQgQ01BS0VfJHtsYW5nfV9TSU1VTEFURV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxOS4wKQorICAgICMgVGhpcyB2ZXJzaW9uIG9mIGNsYW5nLWNsIGFuZCB0aGUgTVNWQyB2ZXJzaW9uIGl0IHNpbXVsYXRlcyBoYXZlCisgICAgIyBzdXBwb3J0IGZvciAtc3RkOiBmbGFncy4KKyAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV8ke2xhbmd9OThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV8ke2xhbmd9OThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCisgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrKzE0IikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNCIpCisgICAgaWYgKENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgNi4wKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQorICAgIGVsc2UoKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrbGF0ZXN0IikKKyAgICBlbmRpZigpCisKKyAgICBfX2NvbXBpbGVyX2NoZWNrX2RlZmF1bHRfbGFuZ3VhZ2Vfc3RhbmRhcmQoJHtsYW5nfSAzLjkgMTQpCisgIGVsc2UoKQorICAgICMgVGhpcyB2ZXJzaW9uIG9mIGNsYW5nLWNsLCBvciB0aGUgTVNWQyB2ZXJzaW9uIGl0IHNpbXVsYXRlcywgZG9lcyBub3QgaGF2ZQorICAgICMgbGFuZ3VhZ2Ugc3RhbmRhcmRzLiAgU2V0IHRoZXNlIG9wdGlvbnMgYXMgZW1wdHkgc3RyaW5ncyBzbyB0aGUgZmVhdHVyZQorICAgICMgdGVzdCBpbmZyYXN0cnVjdHVyZSBjYW4gYXQgbGVhc3QgY2hlY2sgdG8gc2VlIGlmIHRoZXkgYXJlIGRlZmluZWQuCisgICAgc2V0KENNQUtFXyR7bGFuZ305OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV8ke2xhbmd9MTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV8ke2xhbmd9MTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30xNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30xN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV8ke2xhbmd9MjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQorCisgICAgIyBUaGVyZSBpcyBubyBtZWFuaW5nZnVsIGRlZmF1bHQgZm9yIHRoaXMKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9TVEFOREFSRF9ERUZBVUxUICIiKQorCisgICAgIyBUaGVyZSBhcmUgbm8gY29tcGlsZXIgbW9kZXMgc28gd2Ugb25seSBuZWVkIHRvIHRlc3QgZmVhdHVyZXMgb25jZS4KKyAgICAjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1hY3JvIGZvciB0aGlzIHNwZWNpYWwgY2FzZS4gIFByZXRlbmQgdGhhdAorICAgICMgYWxsIGxhbmd1YWdlIHN0YW5kYXJkcyBhcmUgYXZhaWxhYmxlIHNvIHRoYXQgYXQgbGVhc3QgY29tcGlsYXRpb24KKyAgICAjIGNhbiBiZSBhdHRlbXB0ZWQuCisgICAgbWFjcm8oY21ha2VfcmVjb3JkXyR7bGFuZ31fY29tcGlsZV9mZWF0dXJlcykKKyAgICAgIGxpc3QoQVBQRU5EIENNQUtFXyR7bGFuZ31fQ09NUElMRV9GRUFUVVJFUworICAgICAgICAke2xhbmd9X3N0ZF85OAorICAgICAgICAke2xhbmd9X3N0ZF8xMQorICAgICAgICAke2xhbmd9X3N0ZF8xNAorICAgICAgICAke2xhbmd9X3N0ZF8xNworICAgICAgICAke2xhbmd9X3N0ZF8yMAorICAgICAgICApCisgICAgICBfcmVjb3JkX2NvbXBpbGVyX2ZlYXR1cmVzKCR7bGFuZ30gIiIgQ01BS0VfJHtsYW5nfV9DT01QSUxFX0ZFQVRVUkVTKQorICAgIGVuZG1hY3JvKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9DcmF5LUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0NyYXktRm9ydHJhbi5jbWFrZQppbmRleCBjY2I3YzJlLi42OTZhZTc2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0NyYXktRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0NyYXktRm9ydHJhbi5jbWFrZQpAQCAtMTEsMyArMTEsMTEgQEAKIHNldChDTUFLRV9Gb3J0cmFuX01PRERJUl9ERUZBVUxUIC4pCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRklYRURfRkxBRyAiLWYgZml4ZWQiKQogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZSRUVfRkxBRyAiLWYgZnJlZSIpCisKK2lmIChOT1QgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA4LjUpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09OICItZVQiKQorICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PRkYgIi1kVCIpCitlbHNlKCkKKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1lWiIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLWRaIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvRmxhbmctRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvRmxhbmctRm9ydHJhbi5jbWFrZQppbmRleCBmMGU2MWQ4Li5kZTA0ODRlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0ZsYW5nLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9GbGFuZy1Gb3J0cmFuLmNtYWtlCkBAIC0xMSwzICsxMSw2IEBACiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItZmZyZWUtZm9ybSIpCiAKIHNldChDTUFLRV9Gb3J0cmFuX01PRERJUl9GTEFHICItSiIpCisKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09OICItY3BwIikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLW5vY3BwIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvRzk1LUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0c5NS1Gb3J0cmFuLmNtYWtlCmluZGV4IDAzYjdlMDguLjVkYmEwNGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvRzk1LUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9HOTUtRm9ydHJhbi5jbWFrZQpAQCAtOSwzICs5LDUgQEAKIHNldChDTUFLRV9Gb3J0cmFuX0ZPUk1BVF9GUkVFX0ZMQUcgIi1mZnJlZS1mb3JtIikKIHNldChDTUFLRV9Gb3J0cmFuX0xJTktFUl9XUkFQUEVSX0ZMQUcgIi1XbCwiKQogc2V0KENNQUtFX0ZvcnRyYW5fTElOS0VSX1dSQVBQRVJfRkxBR19TRVAgIiwiKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1jcHAiKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT0ZGICItbm8tY3BwIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUFTTS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvR05VLUFTTS5jbWFrZQppbmRleCBlMDc0MDFkLi45NGFmNDAxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1BU00uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9HTlUtQVNNLmNtYWtlCkBAIC00LDMgKzQsMTAgQEAKIHNldChDTUFLRV9BU01fU09VUkNFX0ZJTEVfRVhURU5TSU9OUyBzO1M7YXNtKQogCiBfX2NvbXBpbGVyX2dudShBU00pCisKK2lmKENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSCBTVFJFUVVBTCAiR05VIGFzc2VtYmxlciIpCisgIHNldChDTUFLRV9ERVBGSUxFX0ZMQUdTX0FTTSR7QVNNX0RJQUxFQ1R9ICItLU1EIDxERVBGSUxFPiIpCisgIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0VYRUNVVEFCTEUKKyAgICAiPENNQUtFX0xJTktFUj4gPEZMQUdTPiA8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgc2V0KENNQUtFX0FTTV9ERUZJTkVfRkxBRyAiLS1kZWZzeW0gIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUMuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1DLmNtYWtlCmluZGV4IGNhMjg2YjMuLjgxMDVhNzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUMuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9HTlUtQy5jbWFrZQpAQCAtMSw2ICsxLDggQEAKIGluY2x1ZGUoQ29tcGlsZXIvR05VKQogX19jb21waWxlcl9nbnUoQykKIAorc2V0KENNQUtFX0NfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMpCisKIGlmIChOT1QgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA0LjUpCiAgIHNldChDTUFLRV9DOTBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YzkwIikKICAgc2V0KENNQUtFX0M5MF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251OTAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9HTlUtQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9HTlUtQ1hYLmNtYWtlCmluZGV4IGZjYWFlYWIuLjU5ZWMwNTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1DWFguY21ha2UKQEAgLTEsNiArMSw4IEBACiBpbmNsdWRlKENvbXBpbGVyL0dOVSkKIF9fY29tcGlsZXJfZ251KENYWCkKIAorc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXggYysrKQorCiBpZiAoV0lOMzIpCiAgIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNC42KQogICAgIHNldChDTUFLRV9DWFhfQ09NUElMRV9PUFRJT05TX1ZJU0lCSUxJVFlfSU5MSU5FU19ISURERU4gIi1mbm8ta2VlcC1pbmxpbmUtZGxsZXhwb3J0IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1Gb3J0cmFuLmNtYWtlCmluZGV4IDY0MTM3NjkuLjVkZmIwM2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9HTlUtRm9ydHJhbi5jbWFrZQpAQCAtMTAsNiArMTAsMTEgQEAKIHNldChDTUFLRV9Gb3J0cmFuX0ZPUk1BVF9GSVhFRF9GTEFHICItZmZpeGVkLWZvcm0iKQogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZSRUVfRkxBRyAiLWZmcmVlLWZvcm0iKQogCitpZiAoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNC40KQorICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLWNwcCIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLW5vY3BwIikKK2VuZGlmKCkKKwogc2V0KENNQUtFX0ZvcnRyYW5fUE9TVFBST0NFU1NfRkxBRyAiLWZwcmVwcm9jZXNzZWQiKQogCiAjIE5vIC1ETkRFQlVHIGZvciBGb3J0cmFuLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9HTlUuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS5jbWFrZQppbmRleCBhNjhiYjZjLi42NjhhNmE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0dOVS5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS5jbWFrZQpAQCAtNDQsNyArNDQsOCBAQAogICAjIHRlc3RzIHRvIGFsd2F5cyBzdWNjZWVkLiAgV29yayBhcm91bmQgdGhpcyBieSBkaXNhYmxpbmcgZGVwZW5kZW5jeSB0cmFja2luZwogICAjIGluIHRyeV9jb21waWxlIG1vZGUuCiAgIGdldF9wcm9wZXJ0eShfSU5fVEMgR0xPQkFMIFBST1BFUlRZIElOX1RSWV9DT01QSUxFKQotICBpZihOT1QgX0lOX1RDIE9SIENNQUtFX0ZPUkNFX0RFUEZJTEVTKQorICBpZihDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiIEFORCBfSU5fVEMgQU5EIE5PVCBDTUFLRV9GT1JDRV9ERVBGSUxFUykKKyAgZWxzZSgpCiAgICAgIyBkaXN0Y2MgZG9lcyBub3QgdHJhbnNmb3JtIC1vIHRvIC1NVCB3aGVuIGludm9raW5nIHRoZSBwcmVwcm9jZXNzb3IKICAgICAjIGludGVybmFsbHksIGFzIGl0IG91Z2h0IHRvLiAgV29yayBhcm91bmQgdGhpcyBidWcgYnkgc2V0dGluZyAtTVQgaGVyZQogICAgICMgZXZlbiB0aG91Z2ggaXQgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LgpAQCAtMTE1LDcgKzExNiw4IEBACiAgICAgaWYgKE5PVCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiWGNvZGUiKQogICAgICAgc2V0KENNQUtFX1BDSF9QUk9MT0dVRSAiI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlciIpCiAgICAgZW5kaWYoKQotICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1XaW52YWxpZC1wY2ggLWluY2x1ZGUgPFBDSF9IRUFERVI+KQotICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19DUkVBVEVfUENIIC1XaW52YWxpZC1wY2ggLXggJHtfX3BjaF9oZWFkZXJfJHtsYW5nfX0gLWluY2x1ZGUgPFBDSF9IRUFERVI+KQorICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19JTlZBTElEX1BDSCAtV2ludmFsaWQtcGNoKQorICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfQ1JFQVRFX1BDSCAteCAke19fcGNoX2hlYWRlcl8ke2xhbmd9fSAtaW5jbHVkZSA8UENIX0hFQURFUj4pCiAgIGVuZGlmKCkKIGVuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvSFAtRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvSFAtRm9ydHJhbi5jbWFrZQppbmRleCA2M2EwMzMxLi5kM2UyYTMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0hQLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9IUC1Gb3J0cmFuLmNtYWtlCkBAIC03LDMgKzcsNiBAQAogCiBzZXQoQ01BS0VfRm9ydHJhbl9MSU5LRVJfV1JBUFBFUl9GTEFHICItV2wsIikKIHNldChDTUFLRV9Gb3J0cmFuX0xJTktFUl9XUkFQUEVSX0ZMQUcgIiwiKQorCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiK2NwcD15ZXMiKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT0ZGICIrY3BwPW5vIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvSUFSLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9JQVIuY21ha2UKaW5kZXggOGU3NWNhYS4uMjk2ZTJmZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9JQVIuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9JQVIuY21ha2UKQEAgLTEsNiArMSw2IEBACiAjIFRoaXMgZmlsZSBpcyBwcm9jZXNzZWQgd2hlbiB0aGUgSUFSIGNvbXBpbGVyIGlzIHVzZWQgZm9yIGEgQyBvciBDKysgZmlsZQogIyBEb2N1bWVudGF0aW9uIGNhbiBiZSBkb3dubG9hZGVkIGhlcmU6IGh0dHA6Ly93d3cuaWFyLmNvbS93ZWJzaXRlMS8xLjAuMS4wLzY3NS8xLwotIyBUaGUgaW5pdGlhbCBmZWF0dXJlIHJlcXVlc3QgaXMgaGVyZTogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzEwMTc2CisjIFRoZSBpbml0aWFsIGZlYXR1cmUgcmVxdWVzdCBpcyBoZXJlOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xMDE3NgogIyBJdCBhbHNvIGNvbnRhaW5zIGFkZGl0aW9uYWwgbGlua3MgYW5kIGluZm9ybWF0aW9uLgogIyBTZWUgVVNFUiBHVUlERVMgLT4gQy9DKysgRGV2ZWxvcG1lbnQgR3VpZGUgYW5kIFJlbGVhc2VOb3RlcyBmb3IgRVdBUk06CiAjIHZlcnNpb24gNi4zMC44OiBodHRwOi8vc3VwcC5pYXIuY29tL0ZpbGVzUHVibGljL1VQRElORk8vMDA2NjA3L2FybS9kb2MvaW5mb2NlbnRlci9pbmRleC5FTlUuaHRtbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DLmNtYWtlCmluZGV4IGVjM2JmZDguLjMyMmY2M2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwtQy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUMuY21ha2UKQEAgLTI4LDYgKzI4LDggQEAKIAogZWxzZSgpCiAKKyAgc2V0KENNQUtFX0NfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMpCisKICAgaWYgKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE1LjAuMCkKICAgICBzZXQoQ01BS0VfQzExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMxMSIpCiAgICAgc2V0KENNQUtFX0MxMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251MTEiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQppbmRleCAxZWQxYjA4Li40MmFkZmQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQpAQCAtMTEsNiArMTEsMTEgQEAKIAogICBzZXQoQ01BS0VfQ1hYX0NMQU5HX1RJRFlfRFJJVkVSX01PREUgImNsIikKIAorICBpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxOS4wLjApCisgICAgc2V0KENNQUtFX0NYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItUXN0ZD1jKysyMCIpCisgICAgc2V0KENNQUtFX0NYWDIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLVFzdGQ9YysrMjAiKQorICBlbmRpZigpCisKICAgaWYgKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTguMC4wKQogICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLVFzdGQ9YysrMTciKQogICAgIHNldChDTUFLRV9DWFgxN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1Rc3RkPWMrKzE3IikKQEAgLTM3LDYgKzQyLDEzIEBACiAKIGVsc2UoKQogCisgIHNldChDTUFLRV9DWFhfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMrKykKKworICBpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxOS4wLjApCisgICAgc2V0KENNQUtFX0NYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzIwIikKKyAgICBzZXQoQ01BS0VfQ1hYMjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMjAiKQorICBlbmRpZigpCisKICAgaWYgKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTguMC4wKQogICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNyIpCiAgICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE3IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwtRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwtRm9ydHJhbi5jbWFrZQppbmRleCAxNTZiNTMzLi43MWYyNWY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9JbnRlbC1Gb3J0cmFuLmNtYWtlCkBAIC0xNSwzICsxNSw1IEBACiAKIHNldChDTUFLRV9Gb3J0cmFuX1BSRVBST0NFU1NfU09VUkNFCiAgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gLWZwcCA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1FIDxTT1VSQ0U+ID4gPFBSRVBST0NFU1NFRF9TT1VSQ0U+IikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09OICItZnBwIikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLW5vZnBwIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLmNtYWtlCmluZGV4IDU2YTMwNzguLjlhNzYwYzggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9JbnRlbC5jbWFrZQpAQCAtMzgsOCArMzgsOSBAQAogICAgICAgc2V0KENNQUtFX1BDSF9FWFRFTlNJT04gLnBjaGkpCiAgICAgICBzZXQoQ01BS0VfTElOS19QQ0ggT04pCiAgICAgICBzZXQoQ01BS0VfUENIX0VQSUxPR1VFICIjcHJhZ21hIGhkcnN0b3AiKQotICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLVdpbnZhbGlkLXBjaCAtV25vLXBjaC1tZXNzYWdlcyAtcGNoLXVzZSA8UENIX0ZJTEU+IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKLSAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19DUkVBVEVfUENIIC1XaW52YWxpZC1wY2ggLVduby1wY2gtbWVzc2FnZXMgLXBjaC1jcmVhdGUgPFBDSF9GSUxFPiAtaW5jbHVkZSA8UENIX0hFQURFUj4pCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfSU5WQUxJRF9QQ0ggLVdpbnZhbGlkLXBjaCkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1Xbm8tcGNoLW1lc3NhZ2VzIC1wY2gtdXNlIDxQQ0hfRklMRT4gLWluY2x1ZGUgPFBDSF9IRUFERVI+KQorICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLVduby1wY2gtbWVzc2FnZXMgLXBjaC1jcmVhdGUgPFBDSF9GSUxFPiAtaW5jbHVkZSA8UENIX0hFQURFUj4pCiAgICAgZW5kaWYoKQogICBlbmRtYWNybygpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL05BRy1Gb3J0cmFuLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9OQUctRm9ydHJhbi5jbWFrZQppbmRleCAyMTExYzY1Li5mZmNlOTdlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL05BRy1Gb3J0cmFuLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvTkFHLUZvcnRyYW4uY21ha2UKQEAgLTM3LDMgKzM3LDQgQEAKIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QSUMgIi1QSUMiKQogc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BJRSAiLVBJQyIpCiBzZXQoQ01BS0VfRm9ydHJhbl9SRVNQT05TRV9GSUxFX0xJTktfRkxBRyAiLVdsLEAiKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1mcHAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtQ1VEQS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvTlZJRElBLUNVREEuY21ha2UKaW5kZXggNjcxNDY4ZC4uZmViNWVjYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtQ1VEQS5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL05WSURJQS1DVURBLmNtYWtlCkBAIC00LDYgKzQsOSBAQAogc2V0KENNQUtFX0NVREFfVkVSQk9TRV9GTEFHICItdiIpCiBzZXQoQ01BS0VfQ1VEQV9WRVJCT1NFX0NPTVBJTEVfRkxBRyAiLVhjb21waWxlcj0tdiIpCiAKK3NldChfQ01BS0VfQ09NUElMRV9BU19DVURBX0ZMQUcgIi14IGN1IikKK3NldChfQ01BS0VfQ1VEQV9QVFhfRkxBRyAiLXB0eCIpCisKIGlmIChDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEwLjIuODkpCiAgICMgVGhlIC1mb3J3YXJkLXVua25vd24tdG8taG9zdC1jb21waWxlciBmbGFnIHdhcyBvbmx5CiAgICMgYWRkZWQgdG8gbnZjYyBpbiAxMC4yIHNvIGJlZm9yZSB0aGF0IHdlIGhhZCBubyBnb29kCkBAIC00MywxMCArNDYsMjcgQEAKIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfQ1VEQV9GTEFHUyAtc2hhcmVkKQogc2V0KENNQUtFX0lOQ0xVREVfU1lTVEVNX0ZMQUdfQ1VEQSAtaXN5c3RlbT0pCiAKK2lmIChDTUFLRV9DVURBX1NJTVVMQVRFX0lEIFNUUkVRVUFMICJHTlUiKQorICBzZXQoQ01BS0VfQ1VEQV9MSU5LRVJfV1JBUFBFUl9GTEFHICItV2wsIikKKyAgc2V0KENNQUtFX0NVREFfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAgIiwiKQorZWxzZWlmKENNQUtFX0NVREFfU0lNVUxBVEVfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgc2V0KENNQUtFX0NVREFfTElOS0VSX1dSQVBQRVJfRkxBRyAiLVhsaW5rZXIiICIgIikKKyAgc2V0KENNQUtFX0NVREFfTElOS0VSX1dSQVBQRVJfRkxBR19TRVApCitlbmRpZigpCisKK3NldChDTUFLRV9DVURBX0RFVklDRV9DT01QSUxFUl9XUkFQUEVSX0ZMQUcgIi1YY29tcGlsZXI9IikKK3NldChDTUFLRV9DVURBX0RFVklDRV9DT01QSUxFUl9XUkFQUEVSX0ZMQUdfU0VQICIsIikKK3NldChDTUFLRV9DVURBX0RFVklDRV9MSU5LRVJfV1JBUFBFUl9GTEFHICItWGxpbmtlcj0iKQorc2V0KENNQUtFX0NVREFfREVWSUNFX0xJTktFUl9XUkFQUEVSX0ZMQUdfU0VQICIsIikKKwogc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19TVEFUSUMgICJjdWRhZGV2cnQ7Y3VkYXJ0X3N0YXRpYyIpCiBzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NIQVJFRCAgImN1ZGFkZXZydDtjdWRhcnQiKQogc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19OT05FICAgICIiKQogCitpZihVTklYKQorICBsaXN0KEFQUEVORCBDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfU1RBVElDICJydCIgInB0aHJlYWQiICJkbCIpCitlbmRpZigpCisKIGlmKCJ4JHtDTUFLRV9DVURBX1NJTVVMQVRFX0lEfSIgU1RSRVFVQUwgInhNU1ZDIikKICAgc2V0KENNQUtFX0NVREEwM19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKICAgc2V0KENNQUtFX0NVREEwM19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCkBAIC01OCw2ICs3OCwxMiBAQAogICAgIHNldChDTUFLRV9DVURBMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCiAgICAgc2V0KENNQUtFX0NVREExNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCiAgIGVuZGlmKCkKKworICBpZiAoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTEuMCkKKyAgICBzZXQoQ01BS0VfQ1VEQTE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV9DVURBMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQorICBlbmRpZigpCisKIGVsc2UoKQogICBzZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQogICBzZXQoQ01BS0VfQ1VEQTAzX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKQEAgLTcyLDYgKzk4LDExIEBACiAgICAgc2V0KENNQUtFX0NVREExNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTQiKQogICBlbmRpZigpCiAKKyAgaWYgKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDExLjApCisgICAgc2V0KENNQUtFX0NVREExN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNyIpCisgICAgc2V0KENNQUtFX0NVREExN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTciKQorICBlbmRpZigpCisKIGVuZGlmKCkKIAogIyBGSVhNRTogaW52ZXN0aWdhdGUgdXNlIG9mIC0tb3B0aW9ucy1maWxlLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL05WSURJQS1EZXRlcm1pbmVDb21waWxlci5jbWFrZQppbmRleCBiZjkxMTFhLi40ZjZkZGMyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL05WSURJQS1EZXRlcm1pbmVDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL05WSURJQS1EZXRlcm1pbmVDb21waWxlci5jbWFrZQpAQCAtMTEsOSArMTEsMTkgQEAKICAgIC8qIF9NU0NfVkVSID0gVlZSUiAqLwogIyAgZGVmaW5lIEBQUkVGSVhAU0lNVUxBVEVfVkVSU0lPTl9NQUpPUiBATUFDUk9fREVDQChfTVNDX1ZFUiAvIDEwMCkKICMgIGRlZmluZSBAUFJFRklYQFNJTVVMQVRFX1ZFUlNJT05fTUlOT1IgQE1BQ1JPX0RFQ0AoX01TQ19WRVIgJSAxMDApCisjIGVsaWYgZGVmaW5lZChfX2NsYW5nX18pCisjICBkZWZpbmUgQFBSRUZJWEBTSU1VTEFURV9WRVJTSU9OX01BSk9SIEBNQUNST19ERUNAKF9fY2xhbmdfbWFqb3JfXykKKyMgIGRlZmluZSBAUFJFRklYQFNJTVVMQVRFX1ZFUlNJT05fTUlOT1IgQE1BQ1JPX0RFQ0AoX19jbGFuZ19taW5vcl9fKQorIyBlbGlmIGRlZmluZWQoX19HTlVDX18pCisjICBkZWZpbmUgQFBSRUZJWEBTSU1VTEFURV9WRVJTSU9OX01BSk9SIEBNQUNST19ERUNAKF9fR05VQ19fKQorIyAgZGVmaW5lIEBQUkVGSVhAU0lNVUxBVEVfVkVSU0lPTl9NSU5PUiBATUFDUk9fREVDQChfX0dOVUNfTUlOT1JfXykKICMgZW5kaWYiKQogCiBzZXQoX2NvbXBpbGVyX2lkX3NpbXVsYXRlICIKICMgaWYgZGVmaW5lZChfTVNDX1ZFUikKICMgIGRlZmluZSBAUFJFRklYQFNJTVVMQVRFX0lEIFwiTVNWQ1wiCisjIGVsaWYgZGVmaW5lZChfX2NsYW5nX18pCisjICBkZWZpbmUgQFBSRUZJWEBTSU1VTEFURV9JRCBcIkNsYW5nXCIKKyMgZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIEBQUkVGSVhAU0lNVUxBVEVfSUQgXCJHTlVcIgogIyBlbmRpZiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL09wZW5XYXRjb20tQy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvT3BlbldhdGNvbS1DLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTMzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL09wZW5XYXRjb20tQy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKENvbXBpbGVyL09wZW5XYXRjb20pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL09wZW5XYXRjb20tQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9PcGVuV2F0Y29tLUNYWC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWUzMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9Db21waWxlci9PcGVuV2F0Y29tLUNYWC5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKENvbXBpbGVyL09wZW5XYXRjb20pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL09wZW5XYXRjb20uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL09wZW5XYXRjb20uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmYmZjMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvT3BlbldhdGNvbS5jbWFrZQpAQCAtMCwwICsxLDExOCBAQAorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCisjIFRoaXMgbW9kdWxlIGlzIHNoYXJlZCBieSBtdWx0aXBsZSBsYW5ndWFnZXM7IHVzZSBpbmNsdWRlIGJsb2NrZXIuCitpbmNsdWRlX2d1YXJkKCkKKworc2V0KENNQUtFX0xJQlJBUllfUEFUSF9GTEFHICJsaWJwYXRoICIpCitzZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZMQUcgImxpYnJhcnkgIikKK3NldChDTUFLRV9MSU5LX0xJQlJBUllfRklMRV9GTEFHICJsaWJyYXJ5ICIpCisKK2lmKENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUpCisgIHNldChDTUFLRV9XQ0xfUVVJRVQpCisgIHNldChDTUFLRV9XTElOS19RVUlFVCkKKyAgc2V0KENNQUtFX0xJQl9RVUlFVCkKK2Vsc2UoKQorICBzZXQoQ01BS0VfV0NMX1FVSUVUICItenEiKQorICBzZXQoQ01BS0VfV0xJTktfUVVJRVQgIm9wdGlvbiBxdWlldCIpCisgIHNldChDTUFLRV9MSUJfUVVJRVQgIi1xIikKK2VuZGlmKCkKKworZm9yZWFjaCh0eXBlIENSRUFURV9TSEFSRURfTElCUkFSWSBDUkVBVEVfU0hBUkVEX01PRFVMRSBMSU5LX0VYRUNVVEFCTEUpCisgIHNldChDTUFLRV9DXyR7dHlwZX1fVVNFX1dBVENPTV9RVU9URSAxKQorICBzZXQoQ01BS0VfQ1hYXyR7dHlwZX1fVVNFX1dBVENPTV9RVU9URSAxKQorZW5kZm9yZWFjaCgpCisKK2ZvcmVhY2godHlwZSBTSEFSRUQgTU9EVUxFIEVYRSkKKyAgIyBsaW5rZXIgbWFwIGZpbGUgY3JlYXRpb24gZGlyZWN0aXZlcworICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7dHlwZX1fTElOS0VSX0ZMQUdTX0lOSVQgIiBvcHQgbWFwIikKKyAgIyBsaW5rZXIgZGVidWcgZGlyZWN0aXZlcworICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7dHlwZX1fTElOS0VSX0ZMQUdTX0RFQlVHX0lOSVQgIiBkZWJ1ZyBhbGwiKQorICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7dHlwZX1fTElOS0VSX0ZMQUdTX1JFTFdJVEhERUJJTkZPX0lOSVQgIiBkZWJ1ZyBhbGwiKQorZW5kZm9yZWFjaCgpCisKK2ZvcmVhY2gobGFuZyBDIENYWCkKKyAgIyB3YXJuaW5nIGxldmVsCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19JTklUICIgLXczIikKKyAgIyBkZWJ1ZyBvcHRpb25zCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19ERUJVR19JTklUICIgLWQyIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX01JTlNJWkVSRUxfSU5JVCAiIC1zIC1vcyAtZDAgLWROREVCVUciKQorICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfUkVMRUFTRV9JTklUICIgLXMgLW90IC1kMCAtZE5ERUJVRyIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19SRUxXSVRIREVCSU5GT19JTklUICIgLXMgLW90IC1kMSAtZE5ERUJVRyIpCitlbmRmb3JlYWNoKCkKKworIyBDIGNyZWF0ZSBpbXBvcnQgbGlicmFyeQorc2V0KENNQUtFX0NfQ1JFQVRFX0lNUE9SVF9MSUJSQVJZCisgICJ3bGliIC1jIC1xIC1uIC1iIDxUQVJHRVRfSU1QTElCPiArPFRBUkdFVF9RVU9URUQ+IikKKyMgQysrIGNyZWF0ZSBpbXBvcnQgbGlicmFyeQorc2V0KENNQUtFX0NYWF9DUkVBVEVfSU1QT1JUX0xJQlJBUlkgJHtDTUFLRV9DX0NSRUFURV9JTVBPUlRfTElCUkFSWX0pCisKKyMgQyBsaW5rIGEgb2JqZWN0IGZpbGVzIGludG8gYW4gZXhlY3V0YWJsZSBmaWxlCitzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUKKyAgIndsaW5rICR7Q01BS0VfV0xJTktfUVVJRVR9IG5hbWUgPFRBUkdFVD4gPExJTktfRkxBR1M+IGZpbGUgezxPQkpFQ1RTPn0gPExJTktfTElCUkFSSUVTPiIpCisjIEMrKyBsaW5rIGEgb2JqZWN0IGZpbGVzIGludG8gYW4gZXhlY3V0YWJsZSBmaWxlCitzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAke0NNQUtFX0NfTElOS19FWEVDVVRBQkxFfSkKKworIyBDIGNvbXBpbGUgYSBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKK3NldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUCisgICI8Q01BS0VfQ19DT01QSUxFUj4gJHtDTUFLRV9XQ0xfUVVJRVR9IC1kKyA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1mbzxPQkpFQ1Q+IC1jIC1jYyA8U09VUkNFPiIpCisjIEMrKyBjb21waWxlIGEgZmlsZSBpbnRvIGFuIG9iamVjdCBmaWxlCitzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUCisgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAke0NNQUtFX1dDTF9RVUlFVH0gLWQrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLWZvPE9CSkVDVD4gLWMgLWNjKysgPFNPVVJDRT4iKQorCisjIEMgcHJlcHJvY2VzcyBhIHNvdXJjZSBmaWxlCitzZXQoQ01BS0VfQ19DUkVBVEVfUFJFUFJPQ0VTU0VEX1NPVVJDRQorICAiPENNQUtFX0NfQ09NUElMRVI+ICR7Q01BS0VfV0NMX1FVSUVUfSAtZCsgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtZm88UFJFUFJPQ0VTU0VEX1NPVVJDRT4gLXBsIC1jYyA8U09VUkNFPiIpCisjIEMrKyBwcmVwcm9jZXNzIGEgc291cmNlIGZpbGUKK3NldChDTUFLRV9DWFhfQ1JFQVRFX1BSRVBST0NFU1NFRF9TT1VSQ0UKKyAgIjxDTUFLRV9DWFhfQ09NUElMRVI+ICR7Q01BS0VfV0NMX1FVSUVUfSAtZCsgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtZm88UFJFUFJPQ0VTU0VEX1NPVVJDRT4gLXBsIC1jYysrIDxTT1VSQ0U+IikKKworIyBDIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5CitzZXQoQ01BS0VfQ19DUkVBVEVfU0hBUkVEX0xJQlJBUlkKKyAgIndsaW5rICR7Q01BS0VfV0xJTktfUVVJRVR9IG5hbWUgPFRBUkdFVD4gPExJTktfRkxBR1M+IG9wdGlvbiBpbXBsaWI9PFRBUkdFVF9JTVBMSUI+IGZpbGUgezxPQkpFQ1RTPn0gPExJTktfTElCUkFSSUVTPiIpCisjIEMrKyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeQorc2V0KENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX0xJQlJBUlkgJHtDTUFLRV9DX0NSRUFURV9TSEFSRURfTElCUkFSWX0pCisKKyMgQyBjcmVhdGUgYSBzaGFyZWQgbW9kdWxlCitzZXQoQ01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRQorICAid2xpbmsgJHtDTUFLRV9XTElOS19RVUlFVH0gbmFtZSA8VEFSR0VUPiA8TElOS19GTEFHUz4gZmlsZSB7PE9CSkVDVFM+fSA8TElOS19MSUJSQVJJRVM+IikKKyMgQysrIGNyZWF0ZSBhIHNoYXJlZCBtb2R1bGUKK3NldChDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9NT0RVTEUgJHtDTUFLRV9DX0NSRUFURV9TSEFSRURfTU9EVUxFfSkKKworIyBDIGNyZWF0ZSBhIHN0YXRpYyBsaWJyYXJ5CitzZXQoQ01BS0VfQ19DUkVBVEVfU1RBVElDX0xJQlJBUlkKKyAgIndsaWIgJHtDTUFLRV9MSUJfUVVJRVR9IC1jIC1uIC1iIDxUQVJHRVRfUVVPVEVEPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICIpCisjIEMrKyBjcmVhdGUgYSBzdGF0aWMgbGlicmFyeQorc2V0KENNQUtFX0NYWF9DUkVBVEVfU1RBVElDX0xJQlJBUlkgJHtDTUFLRV9DX0NSRUFURV9TVEFUSUNfTElCUkFSWX0pCisKKworIyBvbGQgQ01ha2UgaW50ZXJuYWx5IHVzZWQgT3BlbldhdGNvbSB2ZXJzaW9uIG1hY3JvcworIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQoraWYoTk9UIF9DTUFLRV9XQVRDT01fVkVSU0lPTikKKyAgc2V0KF9DTUFLRV9XQVRDT01fVkVSU0lPTiAxKQorICBpZihDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04pCisgICAgc2V0KF9jb21waWxlcl92ZXJzaW9uICR7Q01BS0VfQ19DT01QSUxFUl9WRVJTSU9OfSkKKyAgICBzZXQoX2NvbXBpbGVyX2lkICR7Q01BS0VfQ19DT01QSUxFUl9JRH0pCisgIGVsc2UoKQorICAgIHNldChfY29tcGlsZXJfdmVyc2lvbiAke0NNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OfSkKKyAgICBzZXQoX2NvbXBpbGVyX2lkICR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfSkKKyAgZW5kaWYoKQorICBzZXQoV0FUQ09NMTYpCisgIHNldChXQVRDT00xNykKKyAgc2V0KFdBVENPTTE4KQorICBzZXQoV0FUQ09NMTkpCisgIGlmKCIke19jb21waWxlcl9pZH0iIFNUUkVRVUFMICJPcGVuV2F0Y29tIikKKyAgICBpZigiJHtfY29tcGlsZXJfdmVyc2lvbn0iIFZFUlNJT05fTEVTUyAxLjcpCisgICAgICBzZXQoV0FUQ09NMTYgMSkKKyAgICBlbmRpZigpCisgICAgaWYoIiR7X2NvbXBpbGVyX3ZlcnNpb259IiBWRVJTSU9OX0VRVUFMIDEuNykKKyAgICAgIHNldChXQVRDT00xNyAxKQorICAgIGVuZGlmKCkKKyAgICBpZigiJHtfY29tcGlsZXJfdmVyc2lvbn0iIFZFUlNJT05fRVFVQUwgMS44KQorICAgICAgc2V0KFdBVENPTTE4IDEpCisgICAgZW5kaWYoKQorICAgIGlmKCIke19jb21waWxlcl92ZXJzaW9ufSIgVkVSU0lPTl9FUVVBTCAxLjkpCisgICAgICBzZXQoV0FUQ09NMTkgMSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvUEdJLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1BHSS1Gb3J0cmFuLmNtYWtlCmluZGV4IDNkYWY3OTguLmZmODc1NzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvUEdJLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9QR0ktRm9ydHJhbi5jbWFrZQpAQCAtNiw2ICs2LDcgQEAKIAogc2V0KENNQUtFX0ZvcnRyYW5fUFJFUFJPQ0VTU19TT1VSQ0UKICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiAtTXByZXByb2Nlc3MgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtRSA8U09VUkNFPiA+IDxQUkVQUk9DRVNTRURfU09VUkNFPiIpCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLU1wcmVwcm9jZXNzIikKIAogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZJWEVEX0ZMQUcgIi1Nbm9mcmVlZm9ybSIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItTWZyZWVmb3JtIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvUGF0aFNjYWxlLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1BhdGhTY2FsZS1Gb3J0cmFuLmNtYWtlCmluZGV4IGQ5MDM2MjEuLjg5MWQ5M2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvUGF0aFNjYWxlLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9QYXRoU2NhbGUtRm9ydHJhbi5jbWFrZQpAQCAtNCwzICs0LDYgQEAKIHNldChDTUFLRV9Gb3J0cmFuX01PRERJUl9GTEFHICItbW9kdWxlICIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRklYRURfRkxBRyAiLWZpeGVkZm9ybSIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItZnJlZWZvcm0iKQorCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLWNwcCIpCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PRkYgIi1ub2NwcCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1FDQy1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1FDQy1DWFguY21ha2UKaW5kZXggMGU3MzE0YS4uNDIzMDNmNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9RQ0MtQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvUUNDLUNYWC5jbWFrZQpAQCAtMTAsNiArMTAsNiBAQAogICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLWxhbmctYysrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogCiBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLWxhbmctYysrIDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC1sYW5nLWMrKyA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIAogc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfVklTSUJJTElUWV9JTkxJTkVTX0hJRERFTiAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvU3VuUHJvLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1N1blByby1Gb3J0cmFuLmNtYWtlCmluZGV4IDBjOTNjOTQuLjBiYTUwMTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvU3VuUHJvLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9TdW5Qcm8tRm9ydHJhbi5jbWFrZQpAQCAtMzAsMyArMzAsNSBAQAogCiBzZXQoQ01BS0VfRm9ydHJhbl9DUkVBVEVfUFJFUFJPQ0VTU0VEX1NPVVJDRSAiPENNQUtFX0ZvcnRyYW5fQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLUYgLWZwcCA8U09VUkNFPiAtbyA8UFJFUFJPQ0VTU0VEX1NPVVJDRT4iKQogc2V0KENNQUtFX0ZvcnRyYW5fQ1JFQVRFX0FTU0VNQkxZX1NPVVJDRSAiPENNQUtFX0ZvcnRyYW5fQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLVMgPFNPVVJDRT4gLW8gPEFTU0VNQkxZX1NPVVJDRT4iKQorCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLWZwcCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1RJLUFTTS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvVEktQVNNLmNtYWtlCmluZGV4IGE1NjZkNzAuLjAxOTY1ZDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvVEktQVNNLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvVEktQVNNLmNtYWtlCkBAIC0xLDggKzEsNCBAQAotc2V0KENNQUtFX0xJQlJBUllfUEFUSF9GTEFHICItLXNlYXJjaF9wYXRoPSIpCi1zZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZMQUcgIi0tbGlicmFyeT0iKQotc2V0KENNQUtFX0lOQ0xVREVfRkxBR19BU00gIi0taW5jbHVkZV9wYXRoPSIpCi0KLXNldChDTUFLRV9BU01fQ09NUElMRV9PQkpFQ1QgICI8Q01BS0VfQVNNX0NPTVBJTEVSPiAtLWNvbXBpbGVfb25seSAtLWFzbV9maWxlPTxTT1VSQ0U+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLS1vdXRwdXRfZmlsZT08T0JKRUNUPiIpCi1zZXQoQ01BS0VfQVNNX0xJTktfRVhFQ1VUQUJMRSAiPENNQUtFX0FTTV9DT01QSUxFUj4gPE9CSkVDVFM+IC0tcnVuX2xpbmtlciAtLW91dHB1dF9maWxlPTxUQVJHRVQ+IDxDTUFLRV9BU01fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4iKQoraW5jbHVkZShDb21waWxlci9USSkKK19fY29tcGlsZXJfdGkoQVNNKQogCiBzZXQoQ01BS0VfQVNNX1NPVVJDRV9GSUxFX0VYVEVOU0lPTlMgYXNtO3M7YWJzKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9USS1DLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9USS1DLmNtYWtlCmluZGV4IDFjMGY0YmMuLjhlYTAxYjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvVEktQy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLUMuY21ha2UKQEAgLTEsMTggKzEsOCBAQAotc2V0KENNQUtFX0xJQlJBUllfUEFUSF9GTEFHICItLXNlYXJjaF9wYXRoPSIpCi1zZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZMQUcgIi0tbGlicmFyeT0iKQotc2V0KENNQUtFX0lOQ0xVREVfRkxBR19DICItLWluY2x1ZGVfcGF0aD0iKQoraW5jbHVkZShDb21waWxlci9USSkKK19fY29tcGlsZXJfdGkoQykKIAogc2V0KENNQUtFX0M5MF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLS1jODkiKQogc2V0KENNQUtFX0M5MF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi0tYzg5IC0tcmVsYXhlZF9hbnNpIikKIAogc2V0KENNQUtFX0M5OV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLS1jOTkiKQogc2V0KENNQUtFX0M5OV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi0tYzk5IC0tcmVsYXhlZF9hbnNpIikKLQotc2V0KENNQUtFX0RFUEZJTEVfRkxBR1NfQyAiLS1wcmVwcm9jX3dpdGhfY29tcGlsZSAtLXByZXByb2NfZGVwZW5kZW5jeT08REVQRklMRT4iKQotCi1zZXQoQ01BS0VfQ19DUkVBVEVfQVNTRU1CTFlfU09VUkNFICI8Q01BS0VfQ19DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS1za2lwX2Fzc2VtYmxlciAtLWNfZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PEFTU0VNQkxZX1NPVVJDRT4iKQotc2V0KENNQUtFX0NfQ1JFQVRFX1BSRVBST0NFU1NFRF9TT1VSQ0UgIjxDTUFLRV9DX0NPTVBJTEVSPiAtLXByZXByb2Nfb25seSAtLWNfZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PFBSRVBST0NFU1NFRF9TT1VSQ0U+IikKLQotc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QgICI8Q01BS0VfQ19DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS1jX2ZpbGU9PFNPVVJDRT4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtLW91dHB1dF9maWxlPTxPQkpFQ1Q+IikKLXNldChDTUFLRV9DX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IC1yIDxUQVJHRVQ+IDxPQkpFQ1RTPiIpCi1zZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9DX0NPTVBJTEVSPiAtLXJ1bl9saW5rZXIgLS1vdXRwdXRfZmlsZT08VEFSR0VUPiAtLW1hcF9maWxlPTxUQVJHRVQ+Lm1hcCA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9USS1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLUNYWC5jbWFrZQppbmRleCA0YzZhZjA2Li5jMDhkOWExIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL1RJLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLUNYWC5jbWFrZQpAQCAtMSwxMiArMSwyIEBACi1zZXQoQ01BS0VfTElCUkFSWV9QQVRIX0ZMQUcgIi0tc2VhcmNoX3BhdGg9IikKLXNldChDTUFLRV9MSU5LX0xJQlJBUllfRkxBRyAiLS1saWJyYXJ5PSIpCi1zZXQoQ01BS0VfSU5DTFVERV9GTEFHX0NYWCAiLS1pbmNsdWRlX3BhdGg9IikKLQotc2V0KENNQUtFX0RFUEZJTEVfRkxBR1NfQ1hYICItLXByZXByb2Nfd2l0aF9jb21waWxlIC0tcHJlcHJvY19kZXBlbmRlbmN5PTxERVBGSUxFPiIpCi0KLXNldChDTUFLRV9DWFhfQ1JFQVRFX0FTU0VNQkxZX1NPVVJDRSAiPENNQUtFX0NYWF9DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS1za2lwX2Fzc2VtYmxlciAtLWNwcF9maWxlPTxTT1VSQ0U+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLS1vdXRwdXRfZmlsZT08QVNTRU1CTFlfU09VUkNFPiIpCi1zZXQoQ01BS0VfQ1hYX0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAtLXByZXByb2Nfb25seSAtLWNwcF9maWxlPTxTT1VSQ0U+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLS1vdXRwdXRfZmlsZT08UFJFUFJPQ0VTU0VEX1NPVVJDRT4iKQotCi1zZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS1jcHBfZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PE9CSkVDVD4iKQotc2V0KENNQUtFX0NYWF9BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiAtciA8VEFSR0VUPiA8T0JKRUNUUz4iKQotc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC0tcnVuX2xpbmtlciAtLW91dHB1dF9maWxlPTxUQVJHRVQ+IC0tbWFwX2ZpbGU9PFRBUkdFVD4ubWFwIDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKK2luY2x1ZGUoQ29tcGlsZXIvVEkpCitfX2NvbXBpbGVyX3RpKENYWCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvVEkuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMmU4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLmNtYWtlCkBAIC0wLDAgKzEsNDAgQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworCisjIFRoaXMgbW9kdWxlIGlzIHNoYXJlZCBieSBtdWx0aXBsZSBsYW5ndWFnZXM7IHVzZSBpbmNsdWRlIGJsb2NrZXIuCitpZihfX0NPTVBJTEVSX1RJKQorICByZXR1cm4oKQorZW5kaWYoKQorc2V0KF9fQ09NUElMRVJfVEkgMSkKKworbWFjcm8oX19jb21waWxlcl90aSBsYW5nKQorICBzdHJpbmcoVE9MT1dFUiAke2xhbmd9IHByZWZpeCkKKyAgaWYoIngke2xhbmd9IiBTVFJFUVVBTCAieENYWCIpCisgICAgc2V0KHByZWZpeCAiY3BwIikKKyAgZW5kaWYoKQorCisgIHNldChDTUFLRV8ke2xhbmd9X1JFU1BPTlNFX0ZJTEVfRkxBRyAiLS1jbWRfZmlsZT0iKQorCisgIHNldChDTUFLRV9JTkNMVURFX0ZMQUdfJHtsYW5nfSAiLS1pbmNsdWRlX3BhdGg9IikKKyAgc2V0KENNQUtFX0RFUEZJTEVfRkxBR1NfJHtsYW5nfSAiLS1wcmVwcm9jX3dpdGhfY29tcGlsZSAtLXByZXByb2NfZGVwZW5kZW5jeT08REVQRklMRT4iKQorCisgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLS1wcmVwcm9jX29ubHkgLS0ke3ByZWZpeH1fZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PFBSRVBST0NFU1NFRF9TT1VSQ0U+IikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ1JFQVRFX0FTU0VNQkxZX1NPVVJDRSAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtLWNvbXBpbGVfb25seSAtLXNraXBfYXNzZW1ibGVyIC0tJHtwcmVmaXh9X2ZpbGU9PFNPVVJDRT4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtLW91dHB1dF9maWxlPTxBU1NFTUJMWV9TT1VSQ0U+IikKKworICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09CSkVDVCAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtLWNvbXBpbGVfb25seSAtLSR7cHJlZml4fV9maWxlPTxTT1VSQ0U+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLS1vdXRwdXRfZmlsZT08T0JKRUNUPiIpCisKKyAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcXIgPFRBUkdFVD4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcWEgPFRBUkdFVD4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9GSU5JU0ggIiIpCisKKyAgIyBBZnRlciB0aGUgLS1ydW5fbGlua2VyIGZsYWcgYSByZXNwb25zZSBmaWxlIGlzIG5vdCBwb3NzaWJsZQorICBzZXQoQ01BS0VfJHtsYW5nfV9SRVNQT05TRV9GSUxFX0xJTktfRkxBRyAiIikKKyAgc2V0KENNQUtFXyR7bGFuZ31fVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0xJQlJBUklFUyAwKQorICBzZXQoQ01BS0VfJHtsYW5nfV9VU0VfUkVTUE9OU0VfRklMRV9GT1JfT0JKRUNUUyAwKQorCisgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRSAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxGTEFHUz4gLS1ydW5fbGlua2VyIC0tb3V0cHV0X2ZpbGU9PFRBUkdFVD4gLS1tYXBfZmlsZT08VEFSR0VUX05BTUU+Lm1hcCA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iKQorZW5kbWFjcm8oKQorCitzZXQoQ01BS0VfTElCUkFSWV9QQVRIX0ZMQUcgIi0tc2VhcmNoX3BhdGg9IikKK3NldChDTUFLRV9MSU5LX0xJQlJBUllfRkxBRyAiLS1saWJyYXJ5PSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1hMLUMuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMLUMuY21ha2UKaW5kZXggMjA3N2JkYS4uNzhjNDRkNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9YTC1DLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvWEwtQy5jbWFrZQpAQCAtNiw2ICs2LDggQEAKICMgLXF0aHJlYWRlZCA9IEVuc3VyZXMgdGhhdCBhbGwgb3B0aW1pemF0aW9ucyB3aWxsIGJlIHRocmVhZC1zYWZlCiBzdHJpbmcoQVBQRU5EIENNQUtFX0NfRkxBR1NfSU5JVCAiIC1xdGhyZWFkZWQiKQogCitzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXFzb3VyY2V0eXBlPWMpCisKIGlmIChDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEwLjEpCiAgIHNldChDTUFLRV9DOTBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1xbGFuZ2x2bD1zdGRjODkiKQogICBzZXQoQ01BS0VfQzkwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXFsYW5nbHZsPWV4dGM4OSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1hMLUNYWC5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvWEwtQ1hYLmNtYWtlCmluZGV4IDQxZTNlMTEuLjNiOTExZjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvWEwtQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvWEwtQ1hYLmNtYWtlCkBAIC02LDYgKzYsOCBAQAogIyAtcXRocmVhZGVkID0gRW5zdXJlcyB0aGF0IGFsbCBvcHRpbWl6YXRpb25zIHdpbGwgYmUgdGhyZWFkLXNhZmUKIHN0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgIiAtcXRocmVhZGVkIikKIAorc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLSspCisKIGlmIChDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTAuMSkKICAgaWYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkxpbnV4IikKICAgICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCkBAIC0zMiw2ICszNCwzIEBACiBlbmRpZiAoKQogCiBfX2NvbXBpbGVyX2NoZWNrX2RlZmF1bHRfbGFuZ3VhZ2Vfc3RhbmRhcmQoQ1hYIDEwLjEgOTgpCi0KLXNldChDTUFLRV9DWFhfQ09NUElMRV9PQkpFQ1QKLSAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC0rIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9YTC1Gb3J0cmFuLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9YTC1Gb3J0cmFuLmNtYWtlCmluZGV4IDE2ODNkZmYuLmNjMTVlNjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvWEwtRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMLUZvcnRyYW4uY21ha2UKQEAgLTgsNiArOCw3IEBACiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItcWZyZWUiKSAjIFs9ZjkwfGlibV0KIAogc2V0KENNQUtFX0ZvcnRyYW5fTU9ERElSX0ZMQUcgIi1xbW9kZGlyPSIpCitzZXQoQ01BS0VfRm9ydHJhbl9NT0RESVJfSU5DTFVERV9GTEFHICItSSIpICMgLXFtb2RkaXI9IGRvZXMgbm90IGFmZmVjdCBzZWFyY2ggcGF0aAogCiBzZXQoQ01BS0VfRm9ydHJhbl9ERUZJTkVfRkxBRyAiLVdGLC1EIikKIApAQCAtMjIsMyArMjMsOCBAQAogc2V0KENNQUtFX0ZvcnRyYW5fUFJFUFJPQ0VTU19TT1VSQ0UKICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1xcHJlcHJvY2VzcyAtcW5vb2JqZWN0IC1xc3VwcHJlc3M9MTUxNy0wMjAgLXRGIC1CIFwiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9YTC1Gb3J0cmFuL1wiIC1XRiwtLWNwcCxcIiR7Q01BS0VfRm9ydHJhbl9YTF9DUFB9XCIsLS1vdXQsPFBSRVBST0NFU1NFRF9TT1VSQ0U+IDxTT1VSQ0U+IgogICApCisKK2lmIChOT1QgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxNS4xLjYpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09OICItcXByZXByb2Nlc3MiKQorICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PRkYgIi1xbm9wcmVwcm9jZXNzIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvWExDbGFuZy1DLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9YTENsYW5nLUMuY21ha2UKaW5kZXggNTRjMThhNi4uMTY2OGE0ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9YTENsYW5nLUMuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9YTENsYW5nLUMuY21ha2UKQEAgLTEsNiArMSw4IEBACiBpbmNsdWRlKENvbXBpbGVyL1hMQ2xhbmcpCiBfX2NvbXBpbGVyX3hsY2xhbmcoQykKIAorc2V0KENNQUtFX0NfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMpCisKIGlmIChDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEzLjEuMSkKICAgc2V0KENNQUtFX0M5MF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAgIi1zdGQ9Yzg5IikKICAgc2V0KENNQUtFX0M5MF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251ODkiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9YTENsYW5nLUNYWC5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvWExDbGFuZy1DWFguY21ha2UKaW5kZXggOWVhM2Q3Yy4uMDI2MzhjNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9YTENsYW5nLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMQ2xhbmctQ1hYLmNtYWtlCkBAIC0xLDYgKzEsOCBAQAogaW5jbHVkZShDb21waWxlci9YTENsYW5nKQogX19jb21waWxlcl94bGNsYW5nKENYWCkKIAorc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXggYysrKQorCiBpZiAoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEzLjEuMSkKICAgc2V0KENNQUtFX0NYWDk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICAiIikKICAgc2V0KENNQUtFX0NYWDk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXJJZC9WUy0xMC52Y3hwcm9qLmluIGIvTW9kdWxlcy9Db21waWxlcklkL1ZTLTEwLnZjeHByb2ouaW4KaW5kZXggYjQ4YTMzMi4uMzU5OGZjNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlcklkL1ZTLTEwLnZjeHByb2ouaW4KKysrIGIvTW9kdWxlcy9Db21waWxlcklkL1ZTLTEwLnZjeHByb2ouaW4KQEAgLTksNyArOSw3IEBACiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KICAgICA8UHJvamVjdEd1aWQ+e0NBRTA3MTc1LUQwMDctNEZDMy1CRkU4LTQ3QjM5MjgxNDE1OX08L1Byb2plY3RHdWlkPgogICAgIDxSb290TmFtZXNwYWNlPkNvbXBpbGVySWRAaWRfbGFuZ0A8L1Jvb3ROYW1lc3BhY2U+Ci0gICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxLZXl3b3JkPkBpZF9rZXl3b3JkQDwvS2V5d29yZD4KICAgICBAaWRfc3lzdGVtQAogICAgIEBpZF9zeXN0ZW1fdmVyc2lvbkAKICAgICBAaWRfV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbkAKQEAgLTI0LDcgKzI0LDcgQEAKICAgICBAaWRfUHJlZmVycmVkVG9vbEFyY2hpdGVjdHVyZUAKICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfEBpZF9wbGF0Zm9ybUAnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QGlkX2NvbmZpZ190eXBlQDwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgQGlkX3Rvb2xzZXRACiAgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlcklkL1hjb2RlLTMucGJ4cHJvai5pbiBiL01vZHVsZXMvQ29tcGlsZXJJZC9YY29kZS0zLnBieHByb2ouaW4KaW5kZXggNjcyMDQ0ZS4uNmZlMTdlNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlcklkL1hjb2RlLTMucGJ4cHJvai5pbgorKysgYi9Nb2R1bGVzL0NvbXBpbGVySWQvWGNvZGUtMy5wYnhwcm9qLmluCkBAIC04NCw2ICs4NCw3IEBACiAJCQkJQ09ERV9TSUdOSU5HX1JFUVVJUkVEID0gTk87CiAJCQkJQ09ORklHVVJBVElPTl9CVUlMRF9ESVIgPSAiJChCVUlMRF9ESVIpIjsKIAkJCQlTWU1ST09UID0gLjsKKwkJCQlAaWRfYXJjaHNACiAJCQkJQGlkX3Rvb2xzZXRACiAJCQkJQGlkX2xhbmdfdmVyc2lvbkAKIAkJCQlAaWRfY2xhbmdfY3h4X2xpYnJhcnlACmRpZmYgLS1naXQgYS9Nb2R1bGVzL0RvY3VtZW50YXRpb24uY21ha2UgYi9Nb2R1bGVzL0RvY3VtZW50YXRpb24uY21ha2UKaW5kZXggYWFmMjRmNi4uYzI5NzIzMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Eb2N1bWVudGF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvRG9jdW1lbnRhdGlvbi5jbWFrZQpAQCAtOSw2ICs5LDMwIEBACiByZWxpZXMgb24gc2V2ZXJhbCB0b29scyAoRG94eWdlbiwgUGVybCwgZXRjKS4KICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKK2NtYWtlX3BvbGljeShHRVQgQ01QMDEwNiBfRG9jdW1lbnRhdGlvbl9wb2xpY3kpCisKK2lmIChfRG9jdW1lbnRhdGlvbl9wb2xpY3kgU1RSRVFVQUwgIk5FVyIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiRG9jdW1lbnRhdGlvbi5jbWFrZSBpcyBWVEstc3BlY2lmaWMgY29kZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluICIKKyAgICAibm9uLVZUSyBwcm9qZWN0cy4gVGhpcyBsb2dpYyBpbiB0aGlzIG1vZHVsZSBpcyBiZXN0IHNoaXBwZWQgd2l0aCB0aGUgIgorICAgICJwcm9qZWN0IHVzaW5nIGl0IHJhdGhlciB0aGFuIHdpdGggQ01ha2UuIFRoaXMgaXMgbm93IGFuIGVycm9yIGFjY29yZGluZyAiCisgICAgInRvIHBvbGljeSBDTVAwMTA2LiIpCitlbHNlICgpCisKK2lmIChfRG9jdW1lbnRhdGlvbl9wb2xpY3kgU1RSRVFVQUwgIiIpCisgICMgSWdub3JlIHRoZSB3YXJuaW5nIGlmIHRoZSBwcm9qZWN0IGlzIGRldGVjdGVkIGFzIFZUSyBpdHNlbGYuCisgIGlmIChOT1QgQ01BS0VfUFJPSkVDVF9OQU1FIFNUUkVRVUFMICJWVEsiIEFORAorICAgICAgTk9UIFBST0pFQ1RfTkFNRSBTVFJFUVVBTCAiVlRLIikKKyAgICBjbWFrZV9wb2xpY3koR0VUX1dBUk5JTkcgQ01QMDEwNiBfRG9jdW1lbnRhdGlvbl9wb2xpY3lfd2FybmluZykKKyAgICBtZXNzYWdlKEFVVEhPUl9XQVJOSU5HCisgICAgICAiJHtfRG9jdW1lbnRhdGlvbl9wb2xpY3lfd2FybmluZ31cbiIKKyAgICAgICJEb2N1bWVudGF0aW9uLmNtYWtlIGlzIFZUSy1zcGVjaWZpYyBjb2RlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gIgorICAgICAgIm5vbi1WVEsgcHJvamVjdHMuIFRoaXMgbG9naWMgaW4gdGhpcyBtb2R1bGUgaXMgYmVzdCBzaGlwcGVkIHdpdGggdGhlICIKKyAgICAgICJwcm9qZWN0IHVzaW5nIGl0IHJhdGhlciB0aGFuIHdpdGggQ01ha2UuIikKKyAgZW5kaWYgKCkKKyAgdW5zZXQoX0RvY3VtZW50YXRpb25fcG9saWN5X3dhcm5pbmcpCitlbmRpZiAoKQorCiAjCiAjIEJ1aWxkIHRoZSBkb2N1bWVudGF0aW9uID8KICMKQEAgLTQ0LDMgKzY4LDcgQEAKICAgIwogCiBlbmRpZiAoKQorCitlbmRpZiAoKQorCit1bnNldChfRG9jdW1lbnRhdGlvbl9wb2xpY3kpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC1naXR1cGRhdGUuY21ha2UuaW4gYi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC1naXR1cGRhdGUuY21ha2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmMzljMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LWdpdHVwZGF0ZS5jbWFrZS5pbgpAQCAtMCwwICsxLDIxNiBAQAorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy41KQorCitleGVjdXRlX3Byb2Nlc3MoCisgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRAorICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgT1VUUFVUX1ZBUklBQkxFIGhlYWRfc2hhCisgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCisgICkKK2lmKGVycm9yX2NvZGUpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBnZXQgdGhlIGhhc2ggZm9yIEhFQUQiKQorZW5kaWYoKQorCitleGVjdXRlX3Byb2Nlc3MoCisgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHNob3ctcmVmICJAZ2l0X3RhZ0AiCisgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICBPVVRQVVRfVkFSSUFCTEUgc2hvd19yZWZfb3V0cHV0CisgICkKKyMgSWYgYSByZW1vdGUgcmVmIGlzIGFza2VkIGZvciwgd2hpY2ggY2FuIHBvc3NpYmx5IG1vdmUgYXJvdW5kLAorIyB3ZSBtdXN0IGFsd2F5cyBkbyBhIGZldGNoIGFuZCBjaGVja291dC4KK2lmKCIke3Nob3dfcmVmX291dHB1dH0iIE1BVENIRVMgInJlbW90ZXMiKQorICBzZXQoaXNfcmVtb3RlX3JlZiAxKQorZWxzZSgpCisgIHNldChpc19yZW1vdGVfcmVmIDApCitlbmRpZigpCisKKyMgVGFnIGlzIGluIHRoZSBmb3JtIDxyZW1vdGU+Lzx0YWc+IChpLmUuIG9yaWdpbi9tYXN0ZXIpIHdlIG11c3Qgc3RyaXAKKyMgdGhlIHJlbW90ZSBmcm9tIHRoZSB0YWcuCitpZigiJHtzaG93X3JlZl9vdXRwdXR9IiBNQVRDSEVTICJyZWZzL3JlbW90ZXMvQGdpdF90YWdAIikKKyAgc3RyaW5nKFJFR0VYIE1BVENIICJeKFteL10rKS8oLispJCIgX3VudXNlZCAiQGdpdF90YWdAIikKKyAgc2V0KGdpdF9yZW1vdGUgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICBzZXQoZ2l0X3RhZyAiJHtDTUFLRV9NQVRDSF8yfSIpCitlbHNlKCkKKyAgc2V0KGdpdF9yZW1vdGUgIkBnaXRfcmVtb3RlX25hbWVAIikKKyAgc2V0KGdpdF90YWcgIkBnaXRfdGFnQCIpCitlbmRpZigpCisKKyMgVGhpcyB3aWxsIGZhaWwgaWYgdGhlIHRhZyBkb2VzIG5vdCBleGlzdCAoaXQgcHJvYmFibHkgaGFzIG5vdCBiZWVuIGZldGNoZWQKKyMgeWV0KS4KK2V4ZWN1dGVfcHJvY2VzcygKKyAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSAiJHtnaXRfdGFnfSIKKyAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgIE9VVFBVVF9WQVJJQUJMRSB0YWdfc2hhCisgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCisgICkKKworIyBJcyB0aGUgaGFzaCBjaGVja291dCBvdXQgdGhhdCB3ZSB3YW50PworaWYoZXJyb3JfY29kZSBPUiBpc19yZW1vdGVfcmVmIE9SIE5PVCAoIiR7dGFnX3NoYX0iIFNUUkVRVUFMICIke2hlYWRfc2hhfSIpKQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgZmV0Y2gKKyAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICkKKyAgaWYoZXJyb3JfY29kZSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZmV0Y2ggcmVwb3NpdG9yeSAnQGdpdF9yZXBvc2l0b3J5QCciKQorICBlbmRpZigpCisKKyAgaWYoaXNfcmVtb3RlX3JlZikKKyAgICAjIENoZWNrIGlmIHN0YXNoIGlzIG5lZWRlZAorICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHN0YXR1cyAtLXBvcmNlbGFpbgorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgT1VUUFVUX1ZBUklBQkxFIHJlcG9fc3RhdHVzCisgICAgICApCisgICAgaWYoZXJyb3JfY29kZSkKKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBnZXQgdGhlIHN0YXR1cyIpCisgICAgZW5kaWYoKQorICAgIHN0cmluZyhMRU5HVEggIiR7cmVwb19zdGF0dXN9IiBuZWVkX3N0YXNoKQorCisgICAgIyBJZiBub3QgaW4gY2xlYW4gc3RhdGUsIHN0YXNoIGNoYW5nZXMgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwZXJmb3JtIGEKKyAgICAjIHJlYmFzZSBvciBjaGVja291dCB3aXRob3V0IGxvc2luZyB0aG9zZSBjaGFuZ2VzIHBlcm1hbmVudGx5CisgICAgaWYobmVlZF9zdGFzaCkKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgc3Rhc2ggc2F2ZSBAZ2l0X3N0YXNoX3NhdmVfb3B0aW9uc0AKKyAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgICAgICkKKyAgICAgIGlmKGVycm9yX2NvZGUpCisgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBzdGFzaCBjaGFuZ2VzIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisKKyAgICBpZigiQGdpdF91cGRhdGVfc3RyYXRlZ3lAIiBTVFJFUVVBTCAiQ0hFQ0tPVVQiKQorICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiBjaGVja291dCAiJHtnaXRfcmVtb3RlfS8ke2dpdF90YWd9IgorICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgKQorICAgICAgaWYoZXJyb3JfY29kZSkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIGNoZWNrb3V0IHRhZzogJyR7Z2l0X3JlbW90ZX0vJHtnaXRfdGFnfSciKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgIyBQdWxsIGNoYW5nZXMgZnJvbSB0aGUgcmVtb3RlIGJyYW5jaAorICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiByZWJhc2UgIiR7Z2l0X3JlbW90ZX0vJHtnaXRfdGFnfSIKKyAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgICAgIE9VVFBVVF9WQVJJQUJMRSByZWJhc2Vfb3V0cHV0CisgICAgICAgIEVSUk9SX1ZBUklBQkxFICByZWJhc2Vfb3V0cHV0CisgICAgICAgICkKKyAgICAgIGlmKGVycm9yX2NvZGUpCisgICAgICAgICMgUmViYXNlIGZhaWxlZCwgdW5kbyB0aGUgcmViYXNlIGF0dGVtcHQgYmVmb3JlIGNvbnRpbnVpbmcKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHJlYmFzZSAtLWFib3J0CisgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgICkKKworICAgICAgICBpZihOT1QgIkBnaXRfdXBkYXRlX3N0cmF0ZWd5QCIgU1RSRVFVQUwgIlJFQkFTRV9DSEVDS09VVCIpCisgICAgICAgICAgIyBOb3QgYWxsb3dlZCB0byBkbyBhIGNoZWNrb3V0IGFzIGEgZmFsbGJhY2ssIHNvIGNhbm5vdCBwcm9jZWVkCisgICAgICAgICAgaWYobmVlZF9zdGFzaCkKKyAgICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgc3Rhc2ggcG9wIC0taW5kZXggLS1xdWlldAorICAgICAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgICAgICAgKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJcbkZhaWxlZCB0byByZWJhc2UgaW46ICdAd29ya19kaXJAJy4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5PdXRwdXQgZnJvbSB0aGUgYXR0ZW1wdGVkIHJlYmFzZSBmb2xsb3dzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiR7cmViYXNlX291dHB1dH0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cbllvdSB3aWxsIGhhdmUgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzIG1hbnVhbGx5IikKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgRmFsbCBiYWNrIHRvIGNoZWNrb3V0LiBXZSBjcmVhdGUgYW4gYW5ub3RhdGVkIHRhZyBzbyB0aGF0IHRoZSB1c2VyCisgICAgICAgICMgY2FuIG1hbnVhbGx5IGluc3BlY3QgdGhlIHNpdHVhdGlvbiBhbmQgcmV2ZXJ0IGlmIHJlcXVpcmVkLgorICAgICAgICAjIFdlIGNhbid0IGxvZyB0aGUgZmFpbGVkIHJlYmFzZSBvdXRwdXQgYmVjYXVzZSBNU1ZDIHNlZXMgaXQgYW5kCisgICAgICAgICMgaW50ZXJ2ZW5lcywgY2F1c2luZyB0aGUgYnVpbGQgdG8gZmFpbCBldmVuIHRob3VnaCBpdCBjb21wbGV0ZXMuCisgICAgICAgICMgV3JpdGUgaXQgdG8gYSBmaWxlIGluc3RlYWQuCisgICAgICAgIHN0cmluZyhUSU1FU1RBTVAgdGFnX3RpbWVzdGFtcCAiJVklbSVkVCVIJU0lUyIgVVRDKQorICAgICAgICBzZXQodGFnX25hbWUgX2NtYWtlX0V4dGVybmFsUHJvamVjdF9tb3ZlZF9mcm9tX2hlcmVfJHt0YWdfdGltZXN0YW1wfVopCisgICAgICAgIHNldChlcnJvcl9sb2dfZmlsZSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JlYmFzZV9lcnJvcl8ke3RhZ190aW1lc3RhbXB9Wi5sb2cpCisgICAgICAgIGZpbGUoV1JJVEUgJHtlcnJvcl9sb2dfZmlsZX0gIiR7cmViYXNlX291dHB1dH0iKQorICAgICAgICBtZXNzYWdlKFdBUk5JTkcgIlJlYmFzZSBmYWlsZWQsIG91dHB1dCBoYXMgYmVlbiBzYXZlZCB0byAke2Vycm9yX2xvZ19maWxlfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcbkZhbGxpbmcgYmFjayB0byBjaGVja291dCwgcHJldmlvdXMgY29tbWl0IHRhZ2dlZCBhcyAke3RhZ19uYW1lfSIpCisgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiB0YWcgLWEKKyAgICAgICAgICAgICAgICAgIC1tICJFeHRlcm5hbFByb2plY3QgYXR0ZW1wdGluZyB0byBtb3ZlIGZyb20gaGVyZSB0byAke2dpdF9yZW1vdGV9LyR7Z2l0X3RhZ30iCisgICAgICAgICAgICAgICAgICAke3RhZ19uYW1lfQorICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgICAgICkKKyAgICAgICAgaWYoZXJyb3JfY29kZSkKKyAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gYWRkIG1hcmtlciB0YWciKQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIGNoZWNrb3V0ICIke2dpdF9yZW1vdGV9LyR7Z2l0X3RhZ30iCisgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgKQorICAgICAgICBpZihlcnJvcl9jb2RlKQorICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBjaGVja291dCA6ICcke2dpdF9yZW1vdGV9LyR7Z2l0X3RhZ30nIikKKyAgICAgICAgZW5kaWYoKQorCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorCisgICAgaWYobmVlZF9zdGFzaCkKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgc3Rhc2ggcG9wIC0taW5kZXggLS1xdWlldAorICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgKQorICAgICAgaWYoZXJyb3JfY29kZSkKKyAgICAgICAgIyBTdGFzaCBwb3AgLS1pbmRleCBmYWlsZWQ6IFRyeSBhZ2FpbiBkcm9wcGluZyB0aGUgaW5kZXgKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHJlc2V0IC0taGFyZCAtLXF1aWV0CisgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgICApCisgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiBzdGFzaCBwb3AgLS1xdWlldAorICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgICAgICAgKQorICAgICAgICBpZihlcnJvcl9jb2RlKQorICAgICAgICAgICMgU3Rhc2ggcG9wIGZhaWxlZDogUmVzdG9yZSBwcmV2aW91cyBzdGF0ZS4KKyAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCisgICAgICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiByZXNldCAtLWhhcmQgLS1xdWlldCAke2hlYWRfc2hhfQorICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgICAgKQorICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHN0YXNoIHBvcCAtLWluZGV4IC0tcXVpZXQKKyAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgICAgICAgICkKKyAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJcbkZhaWxlZCB0byB1bnN0YXNoIGNoYW5nZXMgaW46ICdAd29ya19kaXJAJy4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5Zb3Ugd2lsbCBoYXZlIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cyBtYW51YWxseSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVsc2UoKQorICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIGNoZWNrb3V0ICIke2dpdF90YWd9IgorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgKQorICAgIGlmKGVycm9yX2NvZGUpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gY2hlY2tvdXQgdGFnOiAnJHtnaXRfdGFnfSciKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgIHNldChpbml0X3N1Ym1vZHVsZXMgIkBpbml0X3N1Ym1vZHVsZXNAIikKKyAgaWYoaW5pdF9zdWJtb2R1bGVzKQorICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHN1Ym1vZHVsZSB1cGRhdGUgQGdpdF9zdWJtb2R1bGVzX3JlY3Vyc2VAIC0taW5pdCBAZ2l0X3N1Ym1vZHVsZXNACisgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgICApCisgIGVuZGlmKCkKKyAgaWYoZXJyb3JfY29kZSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gdXBkYXRlIHN1Ym1vZHVsZXMgaW46ICdAd29ya19kaXJAJyIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlIGIvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2UKaW5kZXggMTJhOTFiMy4uM2E0NzA5MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2UKKysrIGIvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2UKQEAgLTksOCArOSwxMSBAQAogCiAgICAuLiBjb250ZW50czo6CiAKK0NvbW1hbmRzCiteXl5eXl5eXgorCiBFeHRlcm5hbCBQcm9qZWN0IERlZmluaXRpb24KLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCiAKIC4uIGNvbW1hbmQ6OiBFeHRlcm5hbFByb2plY3RfQWRkCiAKQEAgLTI5MSw2ICsyOTQsNDIgQEAKICAgICAgICAgYGBnaXQgY2xvbmVgYCBjb21tYW5kIGxpbmUsIHdpdGggZWFjaCBvcHRpb24gcmVxdWlyZWQgdG8gYmUgaW4gdGhlCiAgICAgICAgIGZvcm0gYGBrZXk9dmFsdWVgYC4KIAorICAgICAgYGBHSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWSA8c3RyYXRlZ3k+YGAKKyAgICAgICAgV2hlbiBgYEdJVF9UQUdgYCByZWZlcnMgdG8gYSByZW1vdGUgYnJhbmNoLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0bworICAgICAgICBzcGVjaWZ5IGhvdyB0aGUgdXBkYXRlIHN0ZXAgYmVoYXZlcy4gIFRoZSBgYDxzdHJhdGVneT5gYCBtdXN0IGJlIG9uZSBvZgorICAgICAgICB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIGBgQ0hFQ0tPVVRgYAorICAgICAgICAgIElnbm9yZSB0aGUgbG9jYWwgYnJhbmNoIGFuZCBhbHdheXMgY2hlY2tvdXQgdGhlIGJyYW5jaCBzcGVjaWZpZWQgYnkKKyAgICAgICAgICBgYEdJVF9UQUdgYC4KKworICAgICAgICBgYFJFQkFTRWBgCisgICAgICAgICAgVHJ5IHRvIHJlYmFzZSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIG9uZSBzcGVjaWZpZWQgYnkgYGBHSVRfVEFHYGAuCisgICAgICAgICAgSWYgdGhlcmUgYXJlIGxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIHRoZXkgd2lsbCBiZSBzdGFzaGVkIGZpcnN0CisgICAgICAgICAgYW5kIHBvcHBlZCBhZ2FpbiBhZnRlciByZWJhc2luZy4gIElmIHJlYmFzaW5nIG9yIHBvcHBpbmcgc3Rhc2hlZAorICAgICAgICAgIGNoYW5nZXMgZmFpbCwgYWJvcnQgdGhlIHJlYmFzZSBhbmQgaGFsdCB3aXRoIGFuIGVycm9yLgorICAgICAgICAgIFdoZW4gYGBHSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWWBgIGlzIG5vdCBwcmVzZW50LCB0aGlzIGlzIHRoZQorICAgICAgICAgIGRlZmF1bHQgc3RyYXRlZ3kgdW5sZXNzIHRoZSBkZWZhdWx0IGhhcyBiZWVuIG92ZXJyaWRkZW4gd2l0aAorICAgICAgICAgIGBgQ01BS0VfRVBfR0lUX1JFTU9URV9VUERBVEVfU1RSQVRFR1lgYCAoc2VlIGJlbG93KS4KKworICAgICAgICBgYFJFQkFTRV9DSEVDS09VVGBgCisgICAgICAgICAgU2FtZSBhcyBgYFJFQkFTRWBgIGV4Y2VwdCBpZiB0aGUgcmViYXNlIGZhaWxzLCBhbiBhbm5vdGF0ZWQgdGFnIHdpbGwKKyAgICAgICAgICBiZSBjcmVhdGVkIGF0IHRoZSBvcmlnaW5hbCBgYEhFQURgYCBwb3NpdGlvbiBmcm9tIGJlZm9yZSB0aGUgcmViYXNlCisgICAgICAgICAgYW5kIHRoZW4gY2hlY2tvdXQgYGBHSVRfVEFHYGAganVzdCBsaWtlIHRoZSBgYENIRUNLT1VUYGAgc3RyYXRlZ3kuCisgICAgICAgICAgVGhlIG1lc3NhZ2Ugc3RvcmVkIG9uIHRoZSBhbm5vdGF0ZWQgdGFnIHdpbGwgZ2l2ZSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICAgIHdoYXQgd2FzIGF0dGVtcHRlZCBhbmQgdGhlIHRhZyBuYW1lIHdpbGwgaW5jbHVkZSBhIHRpbWVzdGFtcCBzbyB0aGF0CisgICAgICAgICAgZWFjaCBmYWlsZWQgcnVuIHdpbGwgYWRkIGEgbmV3IHRhZy4gIFRoaXMgc3RyYXRlZ3kgZW5zdXJlcyBubyBjaGFuZ2VzCisgICAgICAgICAgd2lsbCBiZSBsb3N0LCBidXQgdXBkYXRlcyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaWYgYGBHSVRfVEFHYGAgcmVmZXJzCisgICAgICAgICAgdG8gYSB2YWxpZCByZWYgdW5sZXNzIHRoZXJlIGFyZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRoYXQgY2Fubm90IGJlCisgICAgICAgICAgcG9wcGVkIHN1Y2Nlc3NmdWxseS4KKworICAgICAgICBUaGUgdmFyaWFibGUgYGBDTUFLRV9FUF9HSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWWBgIGNhbiBiZSBzZXQgdG8KKyAgICAgICAgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3RyYXRlZ3kuICBUaGlzIHZhcmlhYmxlIHNob3VsZCBub3QgYmUgc2V0IGJ5IGEKKyAgICAgICAgcHJvamVjdCwgaXQgaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyIHRvIHNldC4gIEl0IGlzIHByaW1hcmlseSBpbnRlbmRlZAorICAgICAgICBmb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gc2NyaXB0cyB0byBlbnN1cmUgdGhhdCB3aGVuIGhpc3RvcnkKKyAgICAgICAgaXMgcmV3cml0dGVuIG9uIGEgcmVtb3RlIGJyYW5jaCwgdGhlIGJ1aWxkIGRvZXNuJ3QgZW5kIHVwIHdpdGggdW5pbnRlbmRlZAorICAgICAgICBjaGFuZ2VzIG9yIGZhaWxlZCBidWlsZHMgcmVzdWx0aW5nIGZyb20gY29uZmxpY3RzIGR1cmluZyByZWJhc2Ugb3BlcmF0aW9ucy4KKwogICAgICpTdWJ2ZXJzaW9uKgogICAgICAgYGBTVk5fUkVQT1NJVE9SWSA8dXJsPmBgCiAgICAgICAgIFVSTCBvZiB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5LgpAQCAtNjY1LDcgKzcwNCw3IEBACiAgIGF1dG9tYXRpYyBzdWJzdGl0dXRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBmb3Igc29tZSBvcHRpb25zLgogCiBPYnRhaW5pbmcgUHJvamVjdCBQcm9wZXJ0aWVzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCiAKIC4uIGNvbW1hbmQ6OiBFeHRlcm5hbFByb2plY3RfR2V0X1Byb3BlcnR5CiAKQEAgLTY4Niw3ICs3MjUsNyBAQAogICAgIG1lc3NhZ2UoIlNvdXJjZSBkaXIgb2YgbXlFeHRQcm9qID0gJHtTT1VSQ0VfRElSfSIpCiAKIEV4cGxpY2l0IFN0ZXAgTWFuYWdlbWVudAotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAogVGhlIGBgRXh0ZXJuYWxQcm9qZWN0X0FkZCgpYGAgZnVuY3Rpb24gb24gaXRzIG93biBpcyBvZnRlbiBzdWZmaWNpZW50IGZvcgogaW5jb3Jwb3JhdGluZyBhbiBleHRlcm5hbCBwcm9qZWN0IGludG8gdGhlIG1haW4gYnVpbGQuIENlcnRhaW4gc2NlbmFyaW9zCkBAIC05MzUsNiArOTc0LDcgQEAKIAogY21ha2VfcG9saWN5KFBVU0gpCiBjbWFrZV9wb2xpY3koU0VUIENNUDAwNTQgTkVXKSAjIGlmKCkgcXVvdGVkIHZhcmlhYmxlcyBub3QgZGVyZWZlcmVuY2VkCitjbWFrZV9wb2xpY3koU0VUIENNUDAwNTcgTkVXKSAjIGlmKCkgc3VwcG9ydHMgSU5fTElTVAogCiAjIFByZS1jb21wdXRlIGEgcmVnZXggdG8gbWF0Y2ggZG9jdW1lbnRlZCBrZXl3b3JkcyBmb3IgZWFjaCBjb21tYW5kLgogbWF0aChFWFBSIF9lcF9kb2N1bWVudGF0aW9uX2xpbmVfY291bnQgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0xJTkV9IC0gNCIpCkBAIC0xMjM5LDcgKzEyNzksNyBAQAogZW5kZnVuY3Rpb24oKQogCiAKLWZ1bmN0aW9uKF9lcF93cml0ZV9naXR1cGRhdGVfc2NyaXB0IHNjcmlwdF9maWxlbmFtZSBnaXRfRVhFQ1VUQUJMRSBnaXRfdGFnIGdpdF9yZW1vdGVfbmFtZSBpbml0X3N1Ym1vZHVsZXMgZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZSBnaXRfc3VibW9kdWxlcyBnaXRfcmVwb3NpdG9yeSB3b3JrX2RpcikKK2Z1bmN0aW9uKF9lcF93cml0ZV9naXR1cGRhdGVfc2NyaXB0IHNjcmlwdF9maWxlbmFtZSBnaXRfRVhFQ1VUQUJMRSBnaXRfdGFnIGdpdF9yZW1vdGVfbmFtZSBpbml0X3N1Ym1vZHVsZXMgZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZSBnaXRfc3VibW9kdWxlcyBnaXRfcmVwb3NpdG9yeSB3b3JrX2RpciBnaXRfdXBkYXRlX3N0cmF0ZWd5KQogICBpZigiJHtnaXRfdGFnfSIgU1RSRVFVQUwgIiIpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGFnIGZvciBnaXQgY2hlY2tvdXQgc2hvdWxkIG5vdCBiZSBlbXB0eS4iKQogICBlbmRpZigpCkBAIC0xMjQ4LDE3MSArMTI4OCwxMyBAQAogICBlbHNlKCkKICAgICBzZXQoZ2l0X3N0YXNoX3NhdmVfb3B0aW9ucyAtLXF1aWV0KQogICBlbmRpZigpCi0gIGZpbGUoV1JJVEUgJHtzY3JpcHRfZmlsZW5hbWV9Ci0iCi1leGVjdXRlX3Byb2Nlc3MoCi0gIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRAotICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgT1VUUFVUX1ZBUklBQkxFIGhlYWRfc2hhCi0gIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCisKKyAgY29uZmlndXJlX2ZpbGUoCisgICAgICAiJHtfRXh0ZXJuYWxQcm9qZWN0X1NFTEZfRElSfS9FeHRlcm5hbFByb2plY3QtZ2l0dXBkYXRlLmNtYWtlLmluIgorICAgICAgIiR7c2NyaXB0X2ZpbGVuYW1lfSIKKyAgICAgIEBPTkxZCiAgICkKLWlmKGVycm9yX2NvZGUpCi0gIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJGYWlsZWQgdG8gZ2V0IHRoZSBoYXNoIGZvciBIRUFEXCIpCi1lbmRpZigpCi0KLWV4ZWN1dGVfcHJvY2VzcygKLSAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgc2hvdy1yZWYgJHtnaXRfdGFnfQotICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgT1VUUFVUX1ZBUklBQkxFIHNob3dfcmVmX291dHB1dAotICApCi0jIElmIGEgcmVtb3RlIHJlZiBpcyBhc2tlZCBmb3IsIHdoaWNoIGNhbiBwb3NzaWJseSBtb3ZlIGFyb3VuZCwKLSMgd2UgbXVzdCBhbHdheXMgZG8gYSBmZXRjaCBhbmQgY2hlY2tvdXQuCi1pZihcIlwke3Nob3dfcmVmX291dHB1dH1cIiBNQVRDSEVTIFwicmVtb3Rlc1wiKQotICBzZXQoaXNfcmVtb3RlX3JlZiAxKQotZWxzZSgpCi0gIHNldChpc19yZW1vdGVfcmVmIDApCi1lbmRpZigpCi0KLSMgVGFnIGlzIGluIHRoZSBmb3JtIDxyZW1vdGU+Lzx0YWc+IChpLmUuIG9yaWdpbi9tYXN0ZXIpIHdlIG11c3Qgc3RyaXAKLSMgdGhlIHJlbW90ZSBmcm9tIHRoZSB0YWcuCi1pZihcIlwke3Nob3dfcmVmX291dHB1dH1cIiBNQVRDSEVTIFwicmVmcy9yZW1vdGVzLyR7Z2l0X3RhZ31cIikKLSAgc3RyaW5nKFJFR0VYIE1BVENIIFwiXihbXi9dKykvKC4rKSRcIiBfdW51c2VkIFwiJHtnaXRfdGFnfVwiKQotICBzZXQoZ2l0X3JlbW90ZSBcIlwke0NNQUtFX01BVENIXzF9XCIpCi0gIHNldChnaXRfdGFnIFwiXCR7Q01BS0VfTUFUQ0hfMn1cIikKLWVsc2UoKQotICBzZXQoZ2l0X3JlbW90ZSBcIiR7Z2l0X3JlbW90ZV9uYW1lfVwiKQotICBzZXQoZ2l0X3RhZyBcIiR7Z2l0X3RhZ31cIikKLWVuZGlmKCkKLQotIyBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgdGFnIGRvZXMgbm90IGV4aXN0IChpdCBwcm9iYWJseSBoYXMgbm90IGJlZW4gZmV0Y2hlZAotIyB5ZXQpLgotZXhlY3V0ZV9wcm9jZXNzKAotICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiByZXYtbGlzdCAtLW1heC1jb3VudD0xICR7Z2l0X3RhZ30KLSAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCi0gIE9VVFBVVF9WQVJJQUJMRSB0YWdfc2hhCi0gIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCi0gICkKLQotIyBJcyB0aGUgaGFzaCBjaGVja291dCBvdXQgdGhhdCB3ZSB3YW50PwotaWYoZXJyb3JfY29kZSBPUiBpc19yZW1vdGVfcmVmIE9SIE5PVCAoXCJcJHt0YWdfc2hhfVwiIFNUUkVRVUFMIFwiXCR7aGVhZF9zaGF9XCIpKQotICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgZmV0Y2gKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQotICAgICkKLSAgaWYoZXJyb3JfY29kZSkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SIFwiRmFpbGVkIHRvIGZldGNoIHJlcG9zaXRvcnkgJyR7Z2l0X3JlcG9zaXRvcnl9J1wiKQotICBlbmRpZigpCi0KLSAgaWYoaXNfcmVtb3RlX3JlZikKLSAgICAjIENoZWNrIGlmIHN0YXNoIGlzIG5lZWRlZAotICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN0YXR1cyAtLXBvcmNlbGFpbgotICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQotICAgICAgT1VUUFVUX1ZBUklBQkxFIHJlcG9fc3RhdHVzCi0gICAgICApCi0gICAgaWYoZXJyb3JfY29kZSkKLSAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJGYWlsZWQgdG8gZ2V0IHRoZSBzdGF0dXNcIikKLSAgICBlbmRpZigpCi0gICAgc3RyaW5nKExFTkdUSCBcIlwke3JlcG9fc3RhdHVzfVwiIG5lZWRfc3Rhc2gpCi0KLSAgICAjIElmIG5vdCBpbiBjbGVhbiBzdGF0ZSwgc3Rhc2ggY2hhbmdlcyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGJlIGFibGUgdG8KLSAgICAjIHBlcmZvcm0gZ2l0IHB1bGwgLS1yZWJhc2UKLSAgICBpZihuZWVkX3N0YXNoKQotICAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiBzdGFzaCBzYXZlICR7Z2l0X3N0YXNoX3NhdmVfb3B0aW9uc30KLSAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCi0gICAgICAgICkKLSAgICAgIGlmKGVycm9yX2NvZGUpCi0gICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJGYWlsZWQgdG8gc3Rhc2ggY2hhbmdlc1wiKQotICAgICAgZW5kaWYoKQotICAgIGVuZGlmKCkKLQotICAgICMgUHVsbCBjaGFuZ2VzIGZyb20gdGhlIHJlbW90ZSBicmFuY2gKLSAgICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiByZWJhc2UgXCR7Z2l0X3JlbW90ZX0vXCR7Z2l0X3RhZ30KLSAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgICAgICkKLSAgICBpZihlcnJvcl9jb2RlKQotICAgICAgIyBSZWJhc2UgZmFpbGVkOiBSZXN0b3JlIHByZXZpb3VzIHN0YXRlLgotICAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiByZWJhc2UgLS1hYm9ydAotICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgICkKLSAgICAgIGlmKG5lZWRfc3Rhc2gpCi0gICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgICAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiBzdGFzaCBwb3AgLS1pbmRleCAtLXF1aWV0Ci0gICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICAgICAgKQotICAgICAgZW5kaWYoKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiBcIlxcbkZhaWxlZCB0byByZWJhc2UgaW46ICcke3dvcmtfZGlyfS8ke3NyY19uYW1lfScuXFxuWW91IHdpbGwgaGF2ZSB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgbWFudWFsbHlcIikKLSAgICBlbmRpZigpCi0KLSAgICBpZihuZWVkX3N0YXNoKQotICAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiBzdGFzaCBwb3AgLS1pbmRleCAtLXF1aWV0Ci0gICAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICAgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQotICAgICAgICApCi0gICAgICBpZihlcnJvcl9jb2RlKQotICAgICAgICAjIFN0YXNoIHBvcCAtLWluZGV4IGZhaWxlZDogVHJ5IGFnYWluIGRyb3BwaW5nIHRoZSBpbmRleAotICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgICAgICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgcmVzZXQgLS1oYXJkIC0tcXVpZXQKLSAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQotICAgICAgICAgICkKLSAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN0YXNoIHBvcCAtLXF1aWV0Ci0gICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgICAgICAgICApCi0gICAgICAgIGlmKGVycm9yX2NvZGUpCi0gICAgICAgICAgIyBTdGFzaCBwb3AgZmFpbGVkOiBSZXN0b3JlIHByZXZpb3VzIHN0YXRlLgotICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgICAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHJlc2V0IC0taGFyZCAtLXF1aWV0IFwke2hlYWRfc2hhfQotICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICAgICAgKQotICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgICAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN0YXNoIHBvcCAtLWluZGV4IC0tcXVpZXQKLSAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICAgICAgICAgICkKLSAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SIFwiXFxuRmFpbGVkIHRvIHVuc3Rhc2ggY2hhbmdlcyBpbjogJyR7d29ya19kaXJ9LyR7c3JjX25hbWV9Jy5cXG5Zb3Ugd2lsbCBoYXZlIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cyBtYW51YWxseVwiKQotICAgICAgICBlbmRpZigpCi0gICAgICBlbmRpZigpCi0gICAgZW5kaWYoKQotICBlbHNlKCkKLSAgICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiBjaGVja291dCAke2dpdF90YWd9Ci0gICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCi0gICAgICApCi0gICAgaWYoZXJyb3JfY29kZSkKLSAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJGYWlsZWQgdG8gY2hlY2tvdXQgdGFnOiAnJHtnaXRfdGFnfSdcIikKLSAgICBlbmRpZigpCi0gIGVuZGlmKCkKLQotICBzZXQoaW5pdF9zdWJtb2R1bGVzICR7aW5pdF9zdWJtb2R1bGVzfSkKLSAgaWYoaW5pdF9zdWJtb2R1bGVzKQotICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN1Ym1vZHVsZSB1cGRhdGUgJHtnaXRfc3VibW9kdWxlc19yZWN1cnNlfSAtLWluaXQgJHtnaXRfc3VibW9kdWxlc30KLSAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn0vJHtzcmNfbmFtZX1cIgotICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgICAgICkKLSAgZW5kaWYoKQotICBpZihlcnJvcl9jb2RlKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJGYWlsZWQgdG8gdXBkYXRlIHN1Ym1vZHVsZXMgaW46ICcke3dvcmtfZGlyfS8ke3NyY19uYW1lfSdcIikKLSAgZW5kaWYoKQotZW5kaWYoKQotCi0iCi0pCi0KLWVuZGZ1bmN0aW9uKF9lcF93cml0ZV9naXR1cGRhdGVfc2NyaXB0KQorZW5kZnVuY3Rpb24oKQogCiBmdW5jdGlvbihfZXBfd3JpdGVfZG93bmxvYWRmaWxlX3NjcmlwdCBzY3JpcHRfZmlsZW5hbWUgUkVNT1RFIExPQ0FMIHRpbWVvdXQgbm9fcHJvZ3Jlc3MgaGFzaCB0bHNfdmVyaWZ5IHRsc19jYWluZm8gdXNlcnB3ZCBodHRwX2hlYWRlcnMgbmV0cmMgbmV0cmNfZmlsZSkKICAgaWYodGltZW91dCkKQEAgLTE5MDUsNyArMTc4NywxMSBAQAogICAgIGdldF90YXJnZXRfcHJvcGVydHkoYXJncyAke25hbWV9IF9FUF8ke3N0ZXB9X0FSR1MpCiAgIGVuZGlmKCkKIAotICBsaXN0KEFQUEVORCBjbWQgJHthcmdzfSkKKyAgaWYoTk9UICIke2FyZ3N9IiBTVFJFUVVBTCAiIikKKyAgICAjIGFyZ3MgY291bGQgaGF2ZSBlbXB0eSBpdGVtcywgc28gd2UgbXVzdCBxdW90ZSBpdCB0byBwcmV2ZW50IHRoZW0KKyAgICAjIGZyb20gYmVpbmcgc2lsZW50bHkgcmVtb3ZlZAorICAgIGxpc3QoQVBQRU5EIGNtZCAiJHthcmdzfSIpCisgIGVuZGlmKCkKICAgc2V0KCR7Y21kX3Zhcn0gIiR7Y21kfSIgUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCkBAIC0yMjIxLDE3ICsyMTA3LDIzIEBACiAgICAgc2V0KGNvbW1hbmQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvX2FwcGVuZCkKICAgZW5kaWYoKQogCi0gIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtzdGFtcF9maWxlfQotICAgIEJZUFJPRFVDVFMgJHtieXByb2R1Y3RzfQotICAgIENPTU1FTlQgJHtjb21tZW50fQotICAgIENPTU1BTkQgJHtjb21tYW5kfQotICAgIENPTU1BTkQgJHt0b3VjaH0KLSAgICBERVBFTkRTICR7ZGVwZW5kc30KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke3dvcmtfZGlyfQotICAgIFZFUkJBVElNCi0gICAgJHt1c2VzX3Rlcm1pbmFsfQotICAgICkKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjb21tYW5kKQorICAgIHN0cmluZyhBUFBFTkQgX19jbWRRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgIGVuZGZvcmVhY2goKQorICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgIE9VVFBVVCBcJHtzdGFtcF9maWxlfQorICAgICAgQllQUk9EVUNUUyBcJHtieXByb2R1Y3RzfQorICAgICAgQ09NTUVOVCBcJHtjb21tZW50fQorICAgICAgQ09NTUFORCAke19fY21kUXVvdGVkfQorICAgICAgQ09NTUFORCBcJHt0b3VjaH0KKyAgICAgIERFUEVORFMgXCR7ZGVwZW5kc30KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke3dvcmtfZGlyfQorICAgICAgVkVSQkFUSU0KKyAgICAgICR7dXNlc190ZXJtaW5hbH0KKyAgICApIgorICApCiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtuYW1lfSBBUFBFTkQgUFJPUEVSVFkgX0VQX1NURVBTICR7c3RlcH0pCiAKICAgIyBBZGQgY3VzdG9tICJzdGVwIHRhcmdldCI/CkBAIC0yMjc5LDcgKzIxNzEsNyBAQAogCiAgIGdldF9wcm9wZXJ0eShzdGVwcyBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfU1RFUFMpCiAgIGxpc3QoRklORCBzdGVwcyAke3N0ZXB9IGlzX3N0ZXApCi0gIGlmKE5PVCBpc19zdGVwKQorICBpZihpc19zdGVwIExFU1MgMCkKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJFeHRlcm5hbCBwcm9qZWN0IFwiJHtuYW1lfVwiIGRvZXMgbm90IGhhdmUgYSBzdGVwIFwiJHtzdGVwfVwiLiIpCiAgIGVuZGlmKCkKIApAQCAtMjY4NiwxNyArMjU3OCwzMiBAQAogICAgIHNldCh1c2VzX3Rlcm1pbmFsICIiKQogICBlbmRpZigpCiAKLSAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gZG93bmxvYWQKLSAgICBDT01NRU5UICR7Y29tbWVudH0KLSAgICBDT01NQU5EICR7Y21kfQotICAgIFdPUktJTkdfRElSRUNUT1JZICR7d29ya19kaXJ9Ci0gICAgREVQRU5EUyAke2RlcGVuZHN9Ci0gICAgREVQRU5ERUVTIG1rZGlyCi0gICAgJHtsb2d9Ci0gICAgJHt1c2VzX3Rlcm1pbmFsfQotICAgICkKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjbWQpCisgICAgc3RyaW5nKEFQUEVORCBfX2NtZFF1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgZW5kZm9yZWFjaCgpCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAiCisgICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKFwke25hbWV9IGRvd25sb2FkCisgICAgICBDT01NRU5UIFwke2NvbW1lbnR9CisgICAgICBDT01NQU5EICR7X19jbWRRdW90ZWR9CisgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcJHt3b3JrX2Rpcn0KKyAgICAgIERFUEVORFMgXCR7ZGVwZW5kc30KKyAgICAgIERFUEVOREVFUyBta2RpcgorICAgICAgJHtsb2d9CisgICAgICAke3VzZXNfdGVybWluYWx9CisgICAgICApIgorICApCiBlbmRmdW5jdGlvbigpCiAKK2Z1bmN0aW9uKF9lcF9nZXRfdXBkYXRlX2Rpc2Nvbm5lY3RlZCB2YXIgbmFtZSkKKyAgZ2V0X3Byb3BlcnR5KHVwZGF0ZV9kaXNjb25uZWN0ZWRfc2V0IFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9VUERBVEVfRElTQ09OTkVDVEVEIFNFVCkKKyAgaWYodXBkYXRlX2Rpc2Nvbm5lY3RlZF9zZXQpCisgICAgZ2V0X3Byb3BlcnR5KHVwZGF0ZV9kaXNjb25uZWN0ZWQgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX1VQREFURV9ESVNDT05ORUNURUQpCisgIGVsc2UoKQorICAgIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkIERJUkVDVE9SWSBQUk9QRVJUWSBFUF9VUERBVEVfRElTQ09OTkVDVEVEKQorICBlbmRpZigpCisgIHNldCgke3Zhcn0gIiR7dXBkYXRlX2Rpc2Nvbm5lY3RlZH0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKIAogZnVuY3Rpb24oX2VwX2FkZF91cGRhdGVfY29tbWFuZCBuYW1lKQogICBFeHRlcm5hbFByb2plY3RfR2V0X1Byb3BlcnR5KCR7bmFtZX0gc291cmNlX2RpciB0bXBfZGlyKQpAQCAtMjcwNywxMiArMjYxNCw4IEBACiAgIGdldF9wcm9wZXJ0eShzdm5fcmVwb3NpdG9yeSBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfU1ZOX1JFUE9TSVRPUlkpCiAgIGdldF9wcm9wZXJ0eShnaXRfcmVwb3NpdG9yeSBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfR0lUX1JFUE9TSVRPUlkpCiAgIGdldF9wcm9wZXJ0eShoZ19yZXBvc2l0b3J5ICBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfSEdfUkVQT1NJVE9SWSApCi0gIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkX3NldCBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfVVBEQVRFX0RJU0NPTk5FQ1RFRCBTRVQpCi0gIGlmKHVwZGF0ZV9kaXNjb25uZWN0ZWRfc2V0KQotICAgIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkIFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9VUERBVEVfRElTQ09OTkVDVEVEKQotICBlbHNlKCkKLSAgICBnZXRfcHJvcGVydHkodXBkYXRlX2Rpc2Nvbm5lY3RlZCBESVJFQ1RPUlkgUFJPUEVSVFkgRVBfVVBEQVRFX0RJU0NPTk5FQ1RFRCkKLSAgZW5kaWYoKQorCisgIF9lcF9nZXRfdXBkYXRlX2Rpc2Nvbm5lY3RlZCh1cGRhdGVfZGlzY29ubmVjdGVkICR7bmFtZX0pCiAKICAgc2V0KHdvcmtfZGlyKQogICBzZXQoY29tbWVudCkKQEAgLTI3ODEsMTAgKzI2ODQsMjIgQEAKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAKKyAgICBnZXRfcHJvcGVydHkoZ2l0X3VwZGF0ZV9zdHJhdGVneSBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfR0lUX1JFTU9URV9VUERBVEVfU1RSQVRFR1kpCisgICAgaWYoTk9UIGdpdF91cGRhdGVfc3RyYXRlZ3kpCisgICAgICBzZXQoZ2l0X3VwZGF0ZV9zdHJhdGVneSAiJHtDTUFLRV9FUF9HSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWX0iKQorICAgIGVuZGlmKCkKKyAgICBpZihOT1QgZ2l0X3VwZGF0ZV9zdHJhdGVneSkKKyAgICAgIHNldChnaXRfdXBkYXRlX3N0cmF0ZWd5IFJFQkFTRSkKKyAgICBlbmRpZigpCisgICAgc2V0KHN0cmF0ZWdpZXMgQ0hFQ0tPVVQgUkVCQVNFIFJFQkFTRV9DSEVDS09VVCkKKyAgICBpZihOT1QgZ2l0X3VwZGF0ZV9zdHJhdGVneSBJTl9MSVNUIHN0cmF0ZWdpZXMpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICInJHtnaXRfdXBkYXRlX3N0cmF0ZWd5fScgaXMgbm90IG9uZSBvZiB0aGUgc3VwcG9ydGVkIHN0cmF0ZWdpZXM6ICR7c3RyYXRlZ2llc30iKQorICAgIGVuZGlmKCkKKwogICAgIF9lcF9nZXRfZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZShnaXRfc3VibW9kdWxlc19yZWN1cnNlKQogCiAgICAgX2VwX3dyaXRlX2dpdHVwZGF0ZV9zY3JpcHQoJHt0bXBfZGlyfS8ke25hbWV9LWdpdHVwZGF0ZS5jbWFrZQotICAgICAgJHtHSVRfRVhFQ1VUQUJMRX0gJHtnaXRfdGFnfSAke2dpdF9yZW1vdGVfbmFtZX0gJHtnaXRfaW5pdF9zdWJtb2R1bGVzfSAiJHtnaXRfc3VibW9kdWxlc19yZWN1cnNlfSIgIiR7Z2l0X3N1Ym1vZHVsZXN9IiAke2dpdF9yZXBvc2l0b3J5fSAke3dvcmtfZGlyfQorICAgICAgJHtHSVRfRVhFQ1VUQUJMRX0gJHtnaXRfdGFnfSAke2dpdF9yZW1vdGVfbmFtZX0gJHtnaXRfaW5pdF9zdWJtb2R1bGVzfSAiJHtnaXRfc3VibW9kdWxlc19yZWN1cnNlfSIgIiR7Z2l0X3N1Ym1vZHVsZXN9IiAke2dpdF9yZXBvc2l0b3J5fSAke3dvcmtfZGlyfSAke2dpdF91cGRhdGVfc3RyYXRlZ3l9CiAgICAgICApCiAgICAgc2V0KGNtZCAke0NNQUtFX0NPTU1BTkR9IC1QICR7dG1wX2Rpcn0vJHtuYW1lfS1naXR1cGRhdGUuY21ha2UpCiAgICAgc2V0KGFsd2F5cyAxKQpAQCAtMjgyNiwxNiArMjc0MSwyMiBAQAogICAgIHNldCh1c2VzX3Rlcm1pbmFsICIiKQogICBlbmRpZigpCiAKLSAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gdXBkYXRlCi0gICAgQ09NTUVOVCAke2NvbW1lbnR9Ci0gICAgQ09NTUFORCAke2NtZH0KLSAgICBBTFdBWVMgJHthbHdheXN9Ci0gICAgRVhDTFVERV9GUk9NX01BSU4gJHt1cGRhdGVfZGlzY29ubmVjdGVkfQotICAgIFdPUktJTkdfRElSRUNUT1JZICR7d29ya19kaXJ9Ci0gICAgREVQRU5ERUVTIGRvd25sb2FkCi0gICAgJHtsb2d9Ci0gICAgJHt1c2VzX3Rlcm1pbmFsfQotICAgICkKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjbWQpCisgICAgc3RyaW5nKEFQUEVORCBfX2NtZFF1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgZW5kZm9yZWFjaCgpCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAiCisgICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gdXBkYXRlCisgICAgICBDT01NRU5UIFwke2NvbW1lbnR9CisgICAgICBDT01NQU5EICR7X19jbWRRdW90ZWR9CisgICAgICBBTFdBWVMgXCR7YWx3YXlzfQorICAgICAgRVhDTFVERV9GUk9NX01BSU4gXCR7dXBkYXRlX2Rpc2Nvbm5lY3RlZH0KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke3dvcmtfZGlyfQorICAgICAgREVQRU5ERUVTIGRvd25sb2FkCisgICAgICAke2xvZ30KKyAgICAgICR7dXNlc190ZXJtaW5hbH0KKyAgICAgICkiCisgICkKIAogICBpZih1cGRhdGVfZGlzY29ubmVjdGVkKQogICAgIF9lcF9nZXRfc3RlcF9zdGFtcGZpbGUoJHtuYW1lfSBza2lwLXVwZGF0ZSBza2lwLXVwZGF0ZV9zdGFtcF9maWxlKQpAQCAtMjg3NCwxMiArMjc5NSwyNSBAQAogICAgIHNldChsb2cgIiIpCiAgIGVuZGlmKCkKIAotICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSBwYXRjaAotICAgIENPTU1BTkQgJHtjbWR9Ci0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHt3b3JrX2Rpcn0KLSAgICBERVBFTkRFRVMgZG93bmxvYWQKLSAgICAke2xvZ30KLSAgICApCisgIF9lcF9nZXRfdXBkYXRlX2Rpc2Nvbm5lY3RlZCh1cGRhdGVfZGlzY29ubmVjdGVkICR7bmFtZX0pCisgIGlmKHVwZGF0ZV9kaXNjb25uZWN0ZWQpCisgICAgc2V0KHVwZGF0ZV9kZXAgc2tpcC11cGRhdGUpCisgIGVsc2UoKQorICAgIHNldCh1cGRhdGVfZGVwIHVwZGF0ZSkKKyAgZW5kaWYoKQorCisgIHNldChfX2NtZFF1b3RlZCkKKyAgZm9yZWFjaChfX2l0ZW0gSU4gTElTVFMgY21kKQorICAgIHN0cmluZyhBUFBFTkQgX19jbWRRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgIGVuZGZvcmVhY2goKQorICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IHBhdGNoCisgICAgICBDT01NQU5EICR7X19jbWRRdW90ZWR9CisgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcJHt3b3JrX2Rpcn0KKyAgICAgIERFUEVOREVFUyBkb3dubG9hZCBcJHt1cGRhdGVfZGVwfQorICAgICAgJHtsb2d9CisgICAgICApIgorICApCiBlbmRmdW5jdGlvbigpCiAKIApAQCAtMzAwOCw3ICsyOTQyLDcgQEAKIAogICAjIElmIGFueXRoaW5nIGFib3V0IHRoZSBjb25maWd1cmUgY29tbWFuZCBjaGFuZ2VzLCAoY29tbWFuZCBpdHNlbGYsIGNtYWtlCiAgICMgdXNlZCwgY21ha2UgYXJncyBvciBjbWFrZSBnZW5lcmF0b3IpIHRoZW4gcmUtcnVuIHRoZSBjb25maWd1cmUgc3RlcC4KLSAgIyBGaXhlcyBpc3N1ZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTAyNTgKKyAgIyBGaXhlcyBpc3N1ZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xMDI1OAogICAjCiAgIGlmKE5PVCBFWElTVFMgJHt0bXBfZGlyfS8ke25hbWV9LWNmZ2NtZC50eHQuaW4pCiAgICAgZmlsZShXUklURSAke3RtcF9kaXJ9LyR7bmFtZX0tY2ZnY21kLnR4dC5pbiAiY21kPSdcQGNtZFxAJ1xuIikKQEAgLTMwMzIsMjYgKzI5NjYsMjcgQEAKICAgICBzZXQodXNlc190ZXJtaW5hbCAiIikKICAgZW5kaWYoKQogCi0gIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkX3NldCBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfVVBEQVRFX0RJU0NPTk5FQ1RFRCBTRVQpCi0gIGlmKHVwZGF0ZV9kaXNjb25uZWN0ZWRfc2V0KQotICAgIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkIFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9VUERBVEVfRElTQ09OTkVDVEVEKQotICBlbHNlKCkKLSAgICBnZXRfcHJvcGVydHkodXBkYXRlX2Rpc2Nvbm5lY3RlZCBESVJFQ1RPUlkgUFJPUEVSVFkgRVBfVVBEQVRFX0RJU0NPTk5FQ1RFRCkKLSAgZW5kaWYoKQorICBfZXBfZ2V0X3VwZGF0ZV9kaXNjb25uZWN0ZWQodXBkYXRlX2Rpc2Nvbm5lY3RlZCAke25hbWV9KQogICBpZih1cGRhdGVfZGlzY29ubmVjdGVkKQogICAgIHNldCh1cGRhdGVfZGVwIHNraXAtdXBkYXRlKQogICBlbHNlKCkKICAgICBzZXQodXBkYXRlX2RlcCB1cGRhdGUpCiAgIGVuZGlmKCkKIAotICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSBjb25maWd1cmUKLSAgICBDT01NQU5EICR7Y21kfQotICAgIFdPUktJTkdfRElSRUNUT1JZICR7YmluYXJ5X2Rpcn0KLSAgICBERVBFTkRFRVMgJHt1cGRhdGVfZGVwfSBwYXRjaAotICAgIERFUEVORFMgJHtmaWxlX2RlcHN9Ci0gICAgJHtsb2d9Ci0gICAgJHt1c2VzX3Rlcm1pbmFsfQotICAgICkKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjbWQpCisgICAgc3RyaW5nKEFQUEVORCBfX2NtZFF1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgZW5kZm9yZWFjaCgpCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAiCisgICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gY29uZmlndXJlCisgICAgICBDT01NQU5EICR7X19jbWRRdW90ZWR9CisgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcJHtiaW5hcnlfZGlyfQorICAgICAgREVQRU5ERUVTIFwke3VwZGF0ZV9kZXB9IHBhdGNoCisgICAgICBERVBFTkRTIFwke2ZpbGVfZGVwc30KKyAgICAgICR7bG9nfQorICAgICAgJHt1c2VzX3Rlcm1pbmFsfQorICAgICAgKSIKKyAgKQogZW5kZnVuY3Rpb24oKQogCiAKQEAgLTMwODksMTUgKzMwMjQsMjEgQEAKIAogICBnZXRfcHJvcGVydHkoYnVpbGRfYnlwcm9kdWN0cyBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfQlVJTERfQllQUk9EVUNUUykKIAotICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSBidWlsZAotICAgIENPTU1BTkQgJHtjbWR9Ci0gICAgQllQUk9EVUNUUyAke2J1aWxkX2J5cHJvZHVjdHN9Ci0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHtiaW5hcnlfZGlyfQotICAgIERFUEVOREVFUyBjb25maWd1cmUKLSAgICBBTFdBWVMgJHthbHdheXN9Ci0gICAgJHtsb2d9Ci0gICAgJHt1c2VzX3Rlcm1pbmFsfQotICAgICkKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjbWQpCisgICAgc3RyaW5nKEFQUEVORCBfX2NtZFF1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgZW5kZm9yZWFjaCgpCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAiCisgICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gYnVpbGQKKyAgICAgIENPTU1BTkQgJHtfX2NtZFF1b3RlZH0KKyAgICAgIEJZUFJPRFVDVFMgXCR7YnVpbGRfYnlwcm9kdWN0c30KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke2JpbmFyeV9kaXJ9CisgICAgICBERVBFTkRFRVMgY29uZmlndXJlCisgICAgICBBTFdBWVMgXCR7YWx3YXlzfQorICAgICAgJHtsb2d9CisgICAgICAke3VzZXNfdGVybWluYWx9CisgICAgICApIgorICApCiBlbmRmdW5jdGlvbigpCiAKIApAQCAtMzEyNiwxMyArMzA2NywxOSBAQAogICAgIHNldCh1c2VzX3Rlcm1pbmFsICIiKQogICBlbmRpZigpCiAKLSAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gaW5zdGFsbAotICAgIENPTU1BTkQgJHtjbWR9Ci0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHtiaW5hcnlfZGlyfQotICAgIERFUEVOREVFUyBidWlsZAotICAgICR7bG9nfQotICAgICR7dXNlc190ZXJtaW5hbH0KLSAgICApCisgIHNldChfX2NtZFF1b3RlZCkKKyAgZm9yZWFjaChfX2l0ZW0gSU4gTElTVFMgY21kKQorICAgIHN0cmluZyhBUFBFTkQgX19jbWRRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgIGVuZGZvcmVhY2goKQorICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IGluc3RhbGwKKyAgICAgIENPTU1BTkQgJHtfX2NtZFF1b3RlZH0KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke2JpbmFyeV9kaXJ9CisgICAgICBERVBFTkRFRVMgYnVpbGQKKyAgICAgICR7bG9nfQorICAgICAgJHt1c2VzX3Rlcm1pbmFsfQorICAgICAgKSIKKyAgKQogZW5kZnVuY3Rpb24oKQogCiAKQEAgLTMxODcsMTUgKzMxMzQsMjEgQEAKICAgICAgIHNldCh1c2VzX3Rlcm1pbmFsICIiKQogICAgIGVuZGlmKCkKIAotICAgIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IHRlc3QKLSAgICAgIENPTU1BTkQgJHtjbWR9Ci0gICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke2JpbmFyeV9kaXJ9Ci0gICAgICAke2RlcGVuZGVlc19hcmdzfQotICAgICAgJHtkZXBlbmRlcnNfYXJnc30KLSAgICAgICR7ZXhjbHVkZV9hcmdzfQotICAgICAgJHtsb2d9Ci0gICAgICAke3VzZXNfdGVybWluYWx9Ci0gICAgICApCisgICAgc2V0KF9fY21kUXVvdGVkKQorICAgIGZvcmVhY2goX19pdGVtIElOIExJU1RTIGNtZCkKKyAgICAgIHN0cmluZyhBUFBFTkQgX19jbWRRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgICAgZW5kZm9yZWFjaCgpCisgICAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFICIKKyAgICAgIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IHRlc3QKKyAgICAgICAgQ09NTUFORCAke19fY21kUXVvdGVkfQorICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcJHtiaW5hcnlfZGlyfQorICAgICAgICAke2RlcGVuZGVlc19hcmdzfQorICAgICAgICAke2RlcGVuZGVyc19hcmdzfQorICAgICAgICAke2V4Y2x1ZGVfYXJnc30KKyAgICAgICAgJHtsb2d9CisgICAgICAgICR7dXNlc190ZXJtaW5hbH0KKyAgICAgICAgKSIKKyAgICApCiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GZXRjaENvbnRlbnQuY21ha2UgYi9Nb2R1bGVzL0ZldGNoQ29udGVudC5jbWFrZQppbmRleCBmM2UxYjUxLi5jODVlMmQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZldGNoQ29udGVudC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZldGNoQ29udGVudC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZldGNoQ29udGVudAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogLi4gb25seTo6IGh0bWwKIAogICAuLiBjb250ZW50czo6CkBAIC03Niw4ICs3OCwxMSBAQAogcG9wdWxhdGUgc29tZSBjb250ZW50IGluIENNYWtlJ3Mgc2NyaXB0IG1vZGUuCiAKIAorQ29tbWFuZHMKK15eXl5eXl5eCisKIERlY2xhcmluZyBDb250ZW50IERldGFpbHMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAogLi4gY29tbWFuZDo6IEZldGNoQ29udGVudF9EZWNsYXJlCiAKQEAgLTEwNSw5ICsxMTAsMTMgQEAKICAgVGhlIGBgPGNvbnRlbnRPcHRpb25zPmBgIGNhbiBiZSBhbnkgb2YgdGhlIGRvd25sb2FkIG9yIHVwZGF0ZS9wYXRjaCBvcHRpb25zCiAgIHRoYXQgdGhlIDpjb21tYW5kOmBFeHRlcm5hbFByb2plY3RfQWRkYCBjb21tYW5kIHVuZGVyc3RhbmRzLiAgVGhlIGNvbmZpZ3VyZSwKICAgYnVpbGQsIGluc3RhbGwgYW5kIHRlc3Qgc3RlcHMgYXJlIGV4cGxpY2l0bHkgZGlzYWJsZWQgYW5kIHRoZXJlZm9yZSBvcHRpb25zCi0gIHJlbGF0ZWQgdG8gdGhlbSB3aWxsIGJlIGlnbm9yZWQuICBJbiBtb3N0IGNhc2VzLCBgYDxjb250ZW50T3B0aW9ucz5gYCB3aWxsCi0gIGp1c3QgYmUgYSBjb3VwbGUgb2Ygb3B0aW9ucyBkZWZpbmluZyB0aGUgZG93bmxvYWQgbWV0aG9kIGFuZCBtZXRob2Qtc3BlY2lmaWMKLSAgZGV0YWlscyBsaWtlIGEgY29tbWl0IHRhZyBvciBhcmNoaXZlIGhhc2guICBGb3IgZXhhbXBsZToKKyAgcmVsYXRlZCB0byB0aGVtIHdpbGwgYmUgaWdub3JlZC4gIFRoZSBgYFNPVVJDRV9TVUJESVJgYCBvcHRpb24gaXMgYW4KKyAgZXhjZXB0aW9uLCBzZWUgOmNvbW1hbmQ6YEZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlYCBmb3IgZGV0YWlscyBvbiBob3cgdGhhdAorICBhZmZlY3RzIGJlaGF2aW9yLgorCisgIEluIG1vc3QgY2FzZXMsIGBgPGNvbnRlbnRPcHRpb25zPmBgIHdpbGwganVzdCBiZSBhIGNvdXBsZSBvZiBvcHRpb25zIGRlZmluaW5nCisgIHRoZSBkb3dubG9hZCBtZXRob2QgYW5kIG1ldGhvZC1zcGVjaWZpYyBkZXRhaWxzIGxpa2UgYSBjb21taXQgdGFnIG9yIGFyY2hpdmUKKyAgaGFzaC4gIEZvciBleGFtcGxlOgogCiAgIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCkBAIC0xMzAsNyArMTM5LDcgQEAKICAgICApCiAKIFBvcHVsYXRpbmcgVGhlIENvbnRlbnQKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAogRm9yIG1vc3QgY29tbW9uIHNjZW5hcmlvcywgcG9wdWxhdGlvbiBtZWFucyBtYWtpbmcgY29udGVudCBhdmFpbGFibGUgdG8gdGhlCiBtYWluIGJ1aWxkIGFjY29yZGluZyB0byBwcmV2aW91c2x5IGRlY2xhcmVkIGRldGFpbHMgZm9yIHRoYXQgZGVwZW5kZW5jeS4KQEAgLTE2MSw4ICsxNzAsOSBAQAogVGhlIGFib3ZlIGlzIHN1Y2ggYSBjb21tb24gcGF0dGVybiB0aGF0LCB3aGVyZSBubyBjdXN0b20gc3RlcHMgYXJlIG5lZWRlZAogYmV0d2VlbiB0aGUgY2FsbHMgdG8gOmNvbW1hbmQ6YEZldGNoQ29udGVudF9Qb3B1bGF0ZWAgYW5kCiA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAsIGVxdWl2YWxlbnQgbG9naWMgY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcKLTpjb21tYW5kOmBGZXRjaENvbnRlbnRfTWFrZUF2YWlsYWJsZWAgaW5zdGVhZCAoYW5kIHNob3VsZCBiZSBwcmVmZXJyZWQgd2hlcmUKLWl0IG1lZXRzIHRoZSBuZWVkcyBvZiB0aGUgcHJvamVjdCkuCis6Y29tbWFuZDpgRmV0Y2hDb250ZW50X01ha2VBdmFpbGFibGVgIGluc3RlYWQuICBXaGVyZSBpdCBtZWV0cyB0aGUgbmVlZHMgb2YKK3RoZSBwcm9qZWN0LCA6Y29tbWFuZDpgRmV0Y2hDb250ZW50X01ha2VBdmFpbGFibGVgIHNob3VsZCBiZSBwcmVmZXJyZWQsIGFzIGl0CitpcyBzaW1wbGVyIGFuZCBwcm92aWRlcyBhZGRpdGlvbmFsIGZlYXR1cmVzIG92ZXIgdGhlIHBhdHRlcm4gYWJvdmUuCiAKIC4uIGNvbW1hbmQ6OiBGZXRjaENvbnRlbnRfUG9wdWxhdGUKIApAQCAtMzMyLDYgKzM0Miw4IEBACiAgICAgYGAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vPGxjTmFtZT4tc3ViYnVpbGRgYCBhbmQgaXQgd291bGQgYmUgdW51c3VhbAogICAgIHRvIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0LiAgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIHNwZWNpZmllZCwgaXQgd2lsbAogICAgIGJlIGludGVycHJldGVkIGFzIHJlbGF0aXZlIHRvIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSYC4KKyAgICBUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGggdGhlIGBgU09VUkNFX1NVQkRJUmBgIG9wdGlvbiB3aGljaAorICAgIG9ubHkgYWZmZWN0cyB0aGUgOmNvbW1hbmQ6YEZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlYCBjb21tYW5kLgogCiAgIGBgU09VUkNFX0RJUmBgLCBgYEJJTkFSWV9ESVJgYAogICAgIFRoZSBgYFNPVVJDRV9ESVJgYCBhbmQgYGBCSU5BUllfRElSYGAgYXJndW1lbnRzIGFyZSBzdXBwb3J0ZWQgYnkKQEAgLTQwNiwxNSArNDE4LDIyIEBACiAKICAgVGhpcyBjb21tYW5kIGltcGxlbWVudHMgdGhlIGNvbW1vbiBwYXR0ZXJuIHR5cGljYWxseSBuZWVkZWQgZm9yIG1vc3QKICAgZGVwZW5kZW5jaWVzLiAgSXQgaXRlcmF0ZXMgb3ZlciBlYWNoIG9mIHRoZSBuYW1lZCBkZXBlbmRlbmNpZXMgaW4gdHVybgotICBhbmQgZm9yIGVhY2ggb25lIGl0IGxvb3NlbHkgZm9sbG93cyB0aGUgc2FtZQorICBhbmQgZm9yIGVhY2ggb25lIGl0IGxvb3NlbHkgZm9sbG93cyB0aGUKICAgOnJlZjpgY2Fub25pY2FsIHBhdHRlcm4gPGZldGNoLWNvbnRlbnQtY2Fub25pY2FsLXBhdHRlcm4+YCBhcwotICBwcmVzZW50ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24uICBPbmUgc21hbGwgZGlmZmVyZW5jZSB0bwotICB0aGF0IHBhdHRlcm4gaXMgdGhhdCBpdCB3aWxsIG9ubHkgY2FsbCA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAgb24gdGhlCisgIHByZXNlbnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2VjdGlvbi4gIEFuIGltcG9ydGFudCBkaWZmZXJlbmNlIGlzCisgIHRoYXQgOmNvbW1hbmQ6YGFkZF9zdWJkaXJlY3RvcnlgIHdpbGwgb25seSBiZSBjYWxsZWQgb24gdGhlCiAgIHBvcHVsYXRlZCBjb250ZW50IGlmIHRoZXJlIGlzIGEgYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUgaW4gaXRzIHRvcCBsZXZlbAogICBzb3VyY2UgZGlyZWN0b3J5LiAgVGhpcyBhbGxvd3MgdGhlIGNvbW1hbmQgdG8gYmUgdXNlZCBmb3IgZGVwZW5kZW5jaWVzCiAgIHRoYXQgbWFrZSBkb3dubG9hZGVkIGNvbnRlbnQgYXZhaWxhYmxlIGF0IGEga25vd24gbG9jYXRpb24gYnV0IHdoaWNoIGRvCiAgIG5vdCBuZWVkIG9yIHN1cHBvcnQgYmVpbmcgYWRkZWQgZGlyZWN0bHkgdG8gdGhlIGJ1aWxkLgogCisgIFRoZSBgYFNPVVJDRV9TVUJESVJgYCBvcHRpb24gY2FuIGJlIGdpdmVuIGluIHRoZSBkZWNsYXJlZCBkZXRhaWxzIHRvCisgIGluc3RydWN0IGBgRmV0Y2hDb250ZW50X01ha2VBdmFpbGFibGUoKWBgIHRvIGxvb2sgZm9yIGEgYGBDTWFrZUxpc3RzLnR4dGBgCisgIGZpbGUgaW4gYSBzdWJkaXJlY3RvcnkgYmVsb3cgdGhlIHRvcCBsZXZlbCAoaS5lLiB0aGUgc2FtZSB3YXkgdGhhdAorICBgYFNPVVJDRV9TVUJESVJgYCBpcyB1c2VkIGJ5IHRoZSA6Y29tbWFuZDpgRXh0ZXJuYWxQcm9qZWN0X0FkZGAgY29tbWFuZCkuCisgIGBgU09VUkNFX1NVQkRJUmBgIG11c3QgYWx3YXlzIGJlIGEgcmVsYXRpdmUgcGF0aC4gIFNlZSB0aGUgbmV4dCBzZWN0aW9uCisgIGZvciBhbiBleGFtcGxlIG9mIHRoaXMgb3B0aW9uLgorCiAKIC4uIF9gZmV0Y2gtY29udGVudC1leGFtcGxlc2A6CiAKQEAgLTQ0Miw2ICs0NjEsMjMgQEAKICAgIyBDYXRjaDIgd2lsbCBiZSBkZWZpbmVkIGFuZCBhdmFpbGFibGUgdG8gdGhlIHJlc3Qgb2YgdGhlIGJ1aWxkCiAgIEZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlKGdvb2dsZXRlc3QgQ2F0Y2gyKQogCitJZiB0aGUgc3ViLXByb2plY3QncyBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSBpcyBub3QgYXQgdGhlIHRvcCBsZXZlbCBvZiBpdHMKK3NvdXJjZSB0cmVlLCB0aGUgYGBTT1VSQ0VfU1VCRElSYGAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHRlbGwgYGBGZXRjaENvbnRlbnRgYAord2hlcmUgdG8gZmluZCBpdC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIHRoYXQgb3B0aW9uIGFuZAoraXQgYWxzbyBzZXRzIGEgdmFyaWFibGUgd2hpY2ggaXMgbWVhbmluZ2Z1bCB0byB0aGUgc3VicHJvamVjdCBiZWZvcmUgcHVsbGluZworaXQgaW50byB0aGUgbWFpbiBidWlsZDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgaW5jbHVkZShGZXRjaENvbnRlbnQpCisgIEZldGNoQ29udGVudF9EZWNsYXJlKAorICAgIHByb3RvYnVmCisgICAgR0lUX1JFUE9TSVRPUlkgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi5naXQKKyAgICBHSVRfVEFHICAgICAgICB2My4xMi4wCisgICAgU09VUkNFX1NVQkRJUiAgY21ha2UKKyAgKQorICBzZXQocHJvdG9idWZfQlVJTERfVEVTVFMgT0ZGKQorICBGZXRjaENvbnRlbnRfTWFrZUF2YWlsYWJsZShwcm90b2J1ZikKIAogSW4gbW9yZSBjb21wbGV4IHByb2plY3QgaGllcmFyY2hpZXMsIHRoZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgY2FuIGJlIG1vcmUKIGNvbXBsaWNhdGVkLiAgQ29uc2lkZXIgYSBoaWVyYXJjaHkgd2hlcmUgYGBwcm9qQWBgIGlzIHRoZSB0b3AgbGV2ZWwgcHJvamVjdCBhbmQKQEAgLTYyMiw3ICs2NTgsMTIgQEAKICAgICAgIEJSSUVGX0RPQ1MgIkludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBGZXRjaENvbnRlbnRfUG9wdWxhdGUoKSIKICAgICAgIEZVTExfRE9DUyAgIkRldGFpbHMgdXNlZCBieSBGZXRjaENvbnRlbnRfUG9wdWxhdGUoKSBmb3IgJHtjb250ZW50TmFtZX0iCiAgICAgKQotICAgIHNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgJHtwcm9wZXJ0eU5hbWV9ICR7QVJHTn0pCisgICAgc2V0KF9fY21kQXJncykKKyAgICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBBUkdOKQorICAgICAgc3RyaW5nKEFQUEVORCBfX2NtZEFyZ3MgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgICAgZW5kZm9yZWFjaCgpCisgICAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFCisgICAgICAic2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSAke3Byb3BlcnR5TmFtZX0gJHtfX2NtZEFyZ3N9KSIpCiAgIGVuZGlmKCkKIAogZW5kZnVuY3Rpb24oKQpAQCAtNjU1LDcgKzY5Niw4IEBACiAgIHNldChvbmVWYWx1ZUFyZ3MgU1ZOX1JFUE9TSVRPUlkpCiAgIHNldChtdWx0aVZhbHVlQXJncyAiIikKIAotICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoQVJHICIke29wdGlvbnN9IiAiJHtvbmVWYWx1ZUFyZ3N9IiAiJHttdWx0aVZhbHVlQXJnc30iICR7QVJHTn0pCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhQQVJTRV9BUkdWIDEgQVJHCisgICAgIiR7b3B0aW9uc30iICIke29uZVZhbHVlQXJnc30iICIke211bHRpVmFsdWVBcmdzfSIpCiAKICAgdW5zZXQoc3JjRGlyU3VmZml4KQogICB1bnNldChzdm5SZXBvQXJncykKQEAgLTY3MywxMyArNzE1LDIwIEBACiAgIGVuZGlmKCkKIAogICBzdHJpbmcoVE9MT1dFUiAke2NvbnRlbnROYW1lfSBjb250ZW50TmFtZUxvd2VyKQotICBfX0ZldGNoQ29udGVudF9kZWNsYXJlRGV0YWlscygKLSAgICAke2NvbnRlbnROYW1lTG93ZXJ9Ci0gICAgU09VUkNFX0RJUiAiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tc3JjJHtzcmNEaXJTdWZmaXh9IgotICAgIEJJTkFSWV9ESVIgIiR7RkVUQ0hDT05URU5UX0JBU0VfRElSfS8ke2NvbnRlbnROYW1lTG93ZXJ9LWJ1aWxkIgotICAgICR7c3ZuUmVwb0FyZ3N9Ci0gICAgIyBMaXN0IHRoZXNlIGxhc3Qgc28gdGhleSBjYW4gb3ZlcnJpZGUgdGhpbmdzIHdlIHNldCBhYm92ZQotICAgICR7QVJHX1VOUEFSU0VEX0FSR1VNRU5UU30KKworICBzZXQoX19hcmdzUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBBUkdfVU5QQVJTRURfQVJHVU1FTlRTKQorICAgIHN0cmluZyhBUFBFTkQgX19hcmdzUXVvdGVkICIgWz09WyR7X19pdGVtfV09PV0iKQorICBlbmRmb3JlYWNoKCkKKyAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFICIKKyAgICBfX0ZldGNoQ29udGVudF9kZWNsYXJlRGV0YWlscygKKyAgICAgICR7Y29udGVudE5hbWVMb3dlcn0KKyAgICAgIFNPVVJDRV9ESVIgXCIke0ZFVENIQ09OVEVOVF9CQVNFX0RJUn0vJHtjb250ZW50TmFtZUxvd2VyfS1zcmMke3NyY0RpclN1ZmZpeH1cIgorICAgICAgQklOQVJZX0RJUiBcIiR7RkVUQ0hDT05URU5UX0JBU0VfRElSfS8ke2NvbnRlbnROYW1lTG93ZXJ9LWJ1aWxkXCIKKyAgICAgIFwke3N2blJlcG9BcmdzfQorICAgICAgIyBMaXN0IHRoZXNlIGxhc3Qgc28gdGhleSBjYW4gb3ZlcnJpZGUgdGhpbmdzIHdlIHNldCBhYm92ZQorICAgICAgJHtfX2FyZ3NRdW90ZWR9CisgICAgKSIKICAgKQogCiBlbmRmdW5jdGlvbigpCkBAIC03OTMsNiArODQyLDggQEAKICAgICAgIFNVQkJVSUxEX0RJUgogICAgICAgU09VUkNFX0RJUgogICAgICAgQklOQVJZX0RJUgorICAgICAgIyBXZSBuZWVkIHNwZWNpYWwgcHJvY2Vzc2luZyBpZiBET1dOTE9BRF9OT19FWFRSQUNUIGlzIHRydWUKKyAgICAgIERPV05MT0FEX05PX0VYVFJBQ1QKICAgICAgICMgUHJldmVudCB0aGUgZm9sbG93aW5nIGZyb20gYmVpbmcgcGFzc2VkIHRocm91Z2gKICAgICAgIENPTkZJR1VSRV9DT01NQU5ECiAgICAgICBCVUlMRF9DT01NQU5ECkBAIC04MDgsNyArODU5LDggQEAKICAgKQogICBzZXQobXVsdGlWYWx1ZUFyZ3MgIiIpCiAKLSAgY21ha2VfcGFyc2VfYXJndW1lbnRzKEFSRyAiJHtvcHRpb25zfSIgIiR7b25lVmFsdWVBcmdzfSIgIiR7bXVsdGlWYWx1ZUFyZ3N9IiAke0FSR059KQorICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoUEFSU0VfQVJHViAxIEFSRworICAgICIke29wdGlvbnN9IiAiJHtvbmVWYWx1ZUFyZ3N9IiAiJHttdWx0aVZhbHVlQXJnc30iKQogCiAgIGlmKE5PVCBBUkdfU1VCQlVJTERfRElSKQogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkludGVybmFsIGVycm9yOiBTVUJCVUlMRF9ESVIgbm90IHNldCIpCkBAIC04NDMsNiArODk1LDI2IEBACiAgICAgc2V0KEFSR19FWFRSQSAiJHtBUkdfRVhUUkF9IFwiJHthcmd9XCIiKQogICBlbmRmb3JlYWNoKCkKIAorICBpZihBUkdfRE9XTkxPQURfTk9fRVhUUkFDVCkKKyAgICBzZXQoQVJHX0VYVFJBICIke0FSR19FWFRSQX0gRE9XTkxPQURfTk9fRVhUUkFDVCBZRVMiKQorICAgIHNldChfX0ZFVENIQ09OVEVOVF9DT1BZX0ZJTEUKKyIKK0V4dGVybmFsUHJvamVjdF9HZXRfUHJvcGVydHkoJHtjb250ZW50TmFtZX0tcG9wdWxhdGUgRE9XTkxPQURFRF9GSUxFKQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChkbEZpbGVOYW1lIFwiXCR7RE9XTkxPQURFRF9GSUxFfVwiIE5BTUUpCisKK0V4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke2NvbnRlbnROYW1lfS1wb3B1bGF0ZSBjb3B5ZmlsZQorICBDT01NQU5EICAgIFwiJHtDTUFLRV9DT01NQU5EfVwiIC1FIGNvcHlfaWZfZGlmZmVyZW50CisgICAgICAgICAgICAgXCI8RE9XTkxPQURFRF9GSUxFPlwiIFwiJHtBUkdfU09VUkNFX0RJUn1cIgorICBERVBFTkRFRVMgIHBhdGNoCisgIERFUEVOREVSUyAgY29uZmlndXJlCisgIEJZUFJPRFVDVFMgXCIke0FSR19TT1VSQ0VfRElSfS9cJHtkbEZpbGVOYW1lfVwiCisgIENPTU1FTlQgICAgXCJDb3B5aW5nIGZpbGUgdG8gU09VUkNFX0RJUlwiCispCisiKQorICBlbHNlKCkKKyAgICB1bnNldChfX0ZFVENIQ09OVEVOVF9DT1BZX0ZJTEUpCisgIGVuZGlmKCkKKwogICAjIEhpZGUgb3V0cHV0IGlmIHJlcXVlc3RlZCwgYnV0IHNhdmUgaXQgdG8gYSB2YXJpYWJsZSBpbiBjYXNlIHRoZXJlJ3MgYW4KICAgIyBlcnJvciBzbyB3ZSBjYW4gc2hvdyB0aGUgb3V0cHV0IHVwb24gZmFpbHVyZS4gV2hlbiBub3QgcXVpZXQsIGRvbid0CiAgICMgY2FwdHVyZSB0aGUgb3V0cHV0IHRvIGEgdmFyaWFibGUgYmVjYXVzZSB0aGUgdXNlciBtYXkgd2FudCB0byBzZWUgdGhlCkBAIC04NjAsMTYgKzkzMiwxNiBAQAogICBlbmRpZigpCiAKICAgaWYoQ01BS0VfR0VORVJBVE9SKQotICAgIHNldChnZW5lcmF0b3JPcHRzICItRyR7Q01BS0VfR0VORVJBVE9SfSIpCisgICAgc2V0KHN1YkNNYWtlT3B0cyAiLUcke0NNQUtFX0dFTkVSQVRPUn0iKQogICAgIGlmKENNQUtFX0dFTkVSQVRPUl9QTEFURk9STSkKLSAgICAgIGxpc3QoQVBQRU5EIGdlbmVyYXRvck9wdHMgIi1BJHtDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk19IikKKyAgICAgIGxpc3QoQVBQRU5EIHN1YkNNYWtlT3B0cyAiLUEke0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0iKQogICAgIGVuZGlmKCkKICAgICBpZihDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCkKLSAgICAgIGxpc3QoQVBQRU5EIGdlbmVyYXRvck9wdHMgIi1UJHtDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVH0iKQorICAgICAgbGlzdChBUFBFTkQgc3ViQ01ha2VPcHRzICItVCR7Q01BS0VfR0VORVJBVE9SX1RPT0xTRVR9IikKICAgICBlbmRpZigpCiAKICAgICBpZihDTUFLRV9NQUtFX1BST0dSQU0pCi0gICAgICBsaXN0KEFQUEVORCBnZW5lcmF0b3JPcHRzICItRENNQUtFX01BS0VfUFJPR1JBTTpGSUxFUEFUSD0ke0NNQUtFX01BS0VfUFJPR1JBTX0iKQorICAgICAgbGlzdChBUFBFTkQgc3ViQ01ha2VPcHRzICItRENNQUtFX01BS0VfUFJPR1JBTTpGSUxFUEFUSD0ke0NNQUtFX01BS0VfUFJPR1JBTX0iKQogICAgIGVuZGlmKCkKIAogICBlbHNlKCkKQEAgLTg3Nyw3ICs5NDksMTIgQEAKICAgICAjIGdlbmVyYXRvciBpcyBzZXQgKGFuZCBoZW5jZSBDTUFLRV9NQUtFX1BST0dSQU0gY291bGQgbm90IGJlCiAgICAgIyB0cnVzdGVkIGV2ZW4gaWYgcHJvdmlkZWQpLiBXZSB3aWxsIGhhdmUgdG8gcmVseSBvbiBiZWluZwogICAgICMgYWJsZSB0byBmaW5kIHRoZSBkZWZhdWx0IGdlbmVyYXRvciBhbmQgYnVpbGQgdG9vbC4KLSAgICB1bnNldChnZW5lcmF0b3JPcHRzKQorICAgIHVuc2V0KHN1YkNNYWtlT3B0cykKKyAgZW5kaWYoKQorCisgIGlmKERFRklORUQgQ01BS0VfRVBfR0lUX1JFTU9URV9VUERBVEVfU1RSQVRFR1kpCisgICAgbGlzdChBUFBFTkQgc3ViQ01ha2VPcHRzCisgICAgICAiLURDTUFLRV9FUF9HSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWT0ke0NNQUtFX0VQX0dJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZfSIpCiAgIGVuZGlmKCkKIAogICAjIENyZWF0ZSBhbmQgYnVpbGQgYSBzZXBhcmF0ZSBDTWFrZSBwcm9qZWN0IHRvIGNhcnJ5IG91dCB0aGUgcG9wdWxhdGlvbi4KQEAgLTg4OCw3ICs5NjUsNyBAQAogICBjb25maWd1cmVfZmlsZSgiJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSfS9GZXRjaENvbnRlbnQvQ01ha2VMaXN0cy5jbWFrZS5pbiIKICAgICAgICAgICAgICAgICAgIiR7QVJHX1NVQkJVSUxEX0RJUn0vQ01ha2VMaXN0cy50eHQiKQogICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9ICR7Z2VuZXJhdG9yT3B0c30gLgorICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAke3N1YkNNYWtlT3B0c30gLgogICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKICAgICAke291dHB1dE9wdGlvbnN9CiAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7QVJHX1NVQkJVSUxEX0RJUn0iCkBAIC0xMDAwLDE3ICsxMDc3LDIzIEBACiAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJObyBkZXRhaWxzIGhhdmUgYmVlbiBzZXQgZm9yIGNvbnRlbnQ6ICR7Y29udGVudE5hbWV9IikKICAgICBlbmRpZigpCiAKLSAgICBfX0ZldGNoQ29udGVudF9kaXJlY3RQb3B1bGF0ZSgKLSAgICAgICR7Y29udGVudE5hbWVMb3dlcn0KLSAgICAgICR7cXVpZXRGbGFnfQotICAgICAgVVBEQVRFX0RJU0NPTk5FQ1RFRCAke2Rpc2Nvbm5lY3RVcGRhdGVzfQotICAgICAgU1VCQlVJTERfRElSICIke0ZFVENIQ09OVEVOVF9CQVNFX0RJUn0vJHtjb250ZW50TmFtZUxvd2VyfS1zdWJidWlsZCIKLSAgICAgIFNPVVJDRV9ESVIgICAiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tc3JjIgotICAgICAgQklOQVJZX0RJUiAgICIke0ZFVENIQ09OVEVOVF9CQVNFX0RJUn0vJHtjb250ZW50TmFtZUxvd2VyfS1idWlsZCIKLSAgICAgICMgUHV0IHRoZSBzYXZlZCBkZXRhaWxzIGxhc3Qgc28gdGhleSBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZQotICAgICAgIyB0aGUgb3B0aW9ucyB3ZSBzZXQgYWJvdmUgKHRoaXMgY2FuIGluY2x1ZGUgU09VUkNFX0RJUiBvcgotICAgICAgIyBCVUlMRF9ESVIpCi0gICAgICAke2NvbnRlbnREZXRhaWxzfQorICAgIHNldChfX2RldGFpbHNRdW90ZWQpCisgICAgZm9yZWFjaChfX2l0ZW0gSU4gTElTVFMgY29udGVudERldGFpbHMpCisgICAgICBzdHJpbmcoQVBQRU5EIF9fZGV0YWlsc1F1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgICBlbmRmb3JlYWNoKCkKKyAgICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgICAgX19GZXRjaENvbnRlbnRfZGlyZWN0UG9wdWxhdGUoCisgICAgICAgICR7Y29udGVudE5hbWVMb3dlcn0KKyAgICAgICAgJHtxdWlldEZsYWd9CisgICAgICAgIFVQREFURV9ESVNDT05ORUNURUQgJHtkaXNjb25uZWN0VXBkYXRlc30KKyAgICAgICAgU1VCQlVJTERfRElSIFwiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tc3ViYnVpbGRcIgorICAgICAgICBTT1VSQ0VfRElSICAgXCIke0ZFVENIQ09OVEVOVF9CQVNFX0RJUn0vJHtjb250ZW50TmFtZUxvd2VyfS1zcmNcIgorICAgICAgICBCSU5BUllfRElSICAgXCIke0ZFVENIQ09OVEVOVF9CQVNFX0RJUn0vJHtjb250ZW50TmFtZUxvd2VyfS1idWlsZFwiCisgICAgICAgICMgUHV0IHRoZSBzYXZlZCBkZXRhaWxzIGxhc3Qgc28gdGhleSBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZQorICAgICAgICAjIHRoZSBvcHRpb25zIHdlIHNldCBhYm92ZSAodGhpcyBjYW4gaW5jbHVkZSBTT1VSQ0VfRElSIG9yCisgICAgICAgICMgQlVJTERfRElSKQorICAgICAgICAke19fZGV0YWlsc1F1b3RlZH0KKyAgICAgICkiCiAgICAgKQogICBlbmRpZigpCiAKQEAgLTEwNDcsMTEgKzExMzAsMjYgQEAKICAgICAgICMgY2FuIGJlIHRyZWF0ZWQgdGhhdCB3YXkuIFByb3RlY3RpbmcgdGhlIGNhbGwgd2l0aCB0aGUgY2hlY2sKICAgICAgICMgYWxsb3dzIHRoaXMgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgcHJvamVjdHMgdGhhdCBqdXN0IHdhbnQKICAgICAgICMgdG8gZW5zdXJlIHRoZSBjb250ZW50IGV4aXN0cywgc3VjaCBhcyB0byBwcm92aWRlIGNvbnRlbnQgYXQKLSAgICAgICMgYSBrbm93biBsb2NhdGlvbi4KLSAgICAgIGlmKEVYSVNUUyAkeyR7Y29udGVudE5hbWVMb3dlcn1fU09VUkNFX0RJUn0vQ01ha2VMaXN0cy50eHQpCi0gICAgICAgIGFkZF9zdWJkaXJlY3RvcnkoJHske2NvbnRlbnROYW1lTG93ZXJ9X1NPVVJDRV9ESVJ9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHske2NvbnRlbnROYW1lTG93ZXJ9X0JJTkFSWV9ESVJ9KQorICAgICAgIyBhIGtub3duIGxvY2F0aW9uLiBXZSBjaGVjayB0aGUgc2F2ZWQgZGV0YWlscyBmb3IgYW4gb3B0aW9uYWwKKyAgICAgICMgU09VUkNFX1NVQkRJUiB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYXMgaXRzIG1lYW5pbmcKKyAgICAgICMgZm9yIEV4dGVybmFsUHJvamVjdC4gSXQgd29uJ3QgbWF0dGVyIGlmIGl0IHdhcyBwYXNzZWQgdGhyb3VnaAorICAgICAgIyB0byB0aGUgRXh0ZXJuYWxQcm9qZWN0IHN1Yi1idWlsZCwgc2luY2UgaXQgd291bGQgaGF2ZSBiZWVuCisgICAgICAjIGlnbm9yZWQgdGhlcmUuCisgICAgICBzZXQoX19mY19zcmNkaXIgIiR7JHtjb250ZW50TmFtZUxvd2VyfV9TT1VSQ0VfRElSfSIpCisgICAgICBfX0ZldGNoQ29udGVudF9nZXRTYXZlZERldGFpbHMoJHtjb250ZW50TmFtZX0gY29udGVudERldGFpbHMpCisgICAgICBpZigiJHtjb250ZW50RGV0YWlsc30iIFNUUkVRVUFMICIiKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJObyBkZXRhaWxzIGhhdmUgYmVlbiBzZXQgZm9yIGNvbnRlbnQ6ICR7Y29udGVudE5hbWV9IikKICAgICAgIGVuZGlmKCkKKyAgICAgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhfX2ZjX2FyZyAiIiAiU09VUkNFX1NVQkRJUiIgIiIgJHtjb250ZW50RGV0YWlsc30pCisgICAgICBpZihOT1QgIiR7X19mY19hcmdfU09VUkNFX1NVQkRJUn0iIFNUUkVRVUFMICIiKQorICAgICAgICBzdHJpbmcoQVBQRU5EIF9fZmNfc3JjZGlyICIvJHtfX2ZjX2FyZ19TT1VSQ0VfU1VCRElSfSIpCisgICAgICBlbmRpZigpCisKKyAgICAgIGlmKEVYSVNUUyAke19fZmNfc3JjZGlyfS9DTWFrZUxpc3RzLnR4dCkKKyAgICAgICAgYWRkX3N1YmRpcmVjdG9yeSgke19fZmNfc3JjZGlyfSAkeyR7Y29udGVudE5hbWVMb3dlcn1fQklOQVJZX0RJUn0pCisgICAgICBlbmRpZigpCisKKyAgICAgIHVuc2V0KF9fZmNfc3JjZGlyKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmV0Y2hDb250ZW50L0NNYWtlTGlzdHMuY21ha2UuaW4gYi9Nb2R1bGVzL0ZldGNoQ29udGVudC9DTWFrZUxpc3RzLmNtYWtlLmluCmluZGV4IDAwOTViMTEuLjQ1ZTRkZjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmV0Y2hDb250ZW50L0NNYWtlTGlzdHMuY21ha2UuaW4KKysrIGIvTW9kdWxlcy9GZXRjaENvbnRlbnQvQ01ha2VMaXN0cy5jbWFrZS5pbgpAQCAtMjEsMyArMjEsNSBAQAogICAgICAgICAgICAgICAgICAgICBVU0VTX1RFUk1JTkFMX0RPV05MT0FEICBZRVMKICAgICAgICAgICAgICAgICAgICAgVVNFU19URVJNSU5BTF9VUERBVEUgICAgWUVTCiApCisKK0BfX0ZFVENIQ09OVEVOVF9DT1BZX0ZJTEVACmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRBcm1hZGlsbG8uY21ha2UgYi9Nb2R1bGVzL0ZpbmRBcm1hZGlsbG8uY21ha2UKaW5kZXggYzRlNTVjZS4uYzhhMzFhMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQXJtYWRpbGxvLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEFybWFkaWxsby5jbWFrZQpAQCAtNiw3ICs2LDcgQEAKIC0tLS0tLS0tLS0tLS0KIAogRmluZCB0aGUgQXJtYWRpbGxvIEMrKyBsaWJyYXJ5LgotQXJtYWRpbGxvIGlzIGxpYnJhcnkgZm9yIGxpbmVhciBhbGdlYnJhICYgc2NpZW50aWZpYyBjb21wdXRpbmcuCitBcm1hZGlsbG8gaXMgYSBsaWJyYXJ5IGZvciBsaW5lYXIgYWxnZWJyYSAmIHNjaWVudGlmaWMgY29tcHV0aW5nLgogCiBVc2luZyBBcm1hZGlsbG86CiAKQEAgLTMxLDE5ICszMSwxMyBAQAogICBBUk1BRElMTE9fVkVSU0lPTl9OQU1FIC0gbmFtZSBvZiB0aGUgdmVyc2lvbiAoZXg6ICJBbnRpcG9kZWFuIEFudGlsZWVjaCIpCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi0jIFVOSVggcGF0aHMgYXJlIHN0YW5kYXJkLCBubyBuZWVkIHRvIHdyaXRlLgotZmluZF9saWJyYXJ5KEFSTUFESUxMT19MSUJSQVJZCi0gIE5BTUVTIGFybWFkaWxsbwotICBQQVRIUyAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsby9saWIiICAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsby9saWI2NCIgIiRFTlZ7UHJvZ3JhbUZpbGVzfS9Bcm1hZGlsbG8iCi0gICkKIGZpbmRfcGF0aChBUk1BRElMTE9fSU5DTFVERV9ESVIKICAgTkFNRVMgYXJtYWRpbGxvCiAgIFBBVEhTICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvL2luY2x1ZGUiCiAgICkKLQorbWFya19hc19hZHZhbmNlZChBUk1BRElMTE9fSU5DTFVERV9ESVIpCiAKIGlmKEFSTUFESUxMT19JTkNMVURFX0RJUikKLQogICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAjICBFeHRyYWN0IHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSA8YXJtYWRpbGxvPgogICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTksMzIgKzUzLDgwIEBACiAgIGlmKEVYSVNUUyAiJHtBUk1BRElMTE9fSU5DTFVERV9ESVJ9L2FybWFkaWxsb19iaXRzL2FybWFfdmVyc2lvbi5ocHAiKQogCiAgICAgIyBSZWFkIGFuZCBwYXJzZSBhcm1kaWxsbyB2ZXJzaW9uIGhlYWRlciBmaWxlIGZvciB2ZXJzaW9uIG51bWJlcgotICAgIGZpbGUoU1RSSU5HUyAiJHtBUk1BRElMTE9fSU5DTFVERV9ESVJ9L2FybWFkaWxsb19iaXRzL2FybWFfdmVyc2lvbi5ocHAiIF9hcm1hZGlsbG9fSEVBREVSX0NPTlRFTlRTIFJFR0VYICIjZGVmaW5lIEFSTUFfVkVSU0lPTl9bQS1aXSsgIikKLSAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9NQUpPUiAoWzAtOV0rKS4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9NQUpPUiAiJHtfYXJtYWRpbGxvX0hFQURFUl9DT05URU5UU30iKQotICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX01JTk9SIChbMC05XSspLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX01JTk9SICIke19hcm1hZGlsbG9fSEVBREVSX0NPTlRFTlRTfSIpCi0gICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fUEFUQ0ggKFswLTldKykuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fUEFUQ0ggIiR7X2FybWFkaWxsb19IRUFERVJfQ09OVEVOVFN9IikKKyAgICBmaWxlKFNUUklOR1MgIiR7QVJNQURJTExPX0lOQ0xVREVfRElSfS9hcm1hZGlsbG9fYml0cy9hcm1hX3ZlcnNpb24uaHBwIiBfQVJNQV9IRUFERVJfQ09OVEVOVFMgUkVHRVggIiNkZWZpbmUgQVJNQV9WRVJTSU9OX1tBLVpdKyAiKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX01BSk9SIChbMC05XSspLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX01BSk9SICIke19BUk1BX0hFQURFUl9DT05URU5UU30iKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX01JTk9SIChbMC05XSspLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX01JTk9SICIke19BUk1BX0hFQURFUl9DT05URU5UU30iKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX1BBVENIIChbMC05XSspLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX1BBVENIICIke19BUk1BX0hFQURFUl9DT05URU5UU30iKQogCiAgICAgIyBXQVJOSU5HOiBUaGUgbnVtYmVyIG9mIHNwYWNlcyBiZWZvcmUgdGhlIHZlcnNpb24gbmFtZSBpcyBub3Qgb25lLgotICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX05BTUUgK1wiKFswLTlhLXpBLVogXy1dKylcIi4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9OQU1FICIke19hcm1hZGlsbG9fSEVBREVSX0NPTlRFTlRTfSIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fTkFNRVwgK1wiKFswLTlhLXpBLVpcIF8tXSspXCIuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fTkFNRSAiJHtfQVJNQV9IRUFERVJfQ09OVEVOVFN9IikKIAotICAgIHVuc2V0KF9hcm1hZGlsbG9fSEVBREVSX0NPTlRFTlRTKQogICBlbmRpZigpCiAKICAgc2V0KEFSTUFESUxMT19WRVJTSU9OX1NUUklORyAiJHtBUk1BRElMTE9fVkVSU0lPTl9NQUpPUn0uJHtBUk1BRElMTE9fVkVSU0lPTl9NSU5PUn0uJHtBUk1BRElMTE9fVkVSU0lPTl9QQVRDSH0iKQogZW5kaWYgKCkKIAoraWYoRVhJU1RTICIke0FSTUFESUxMT19JTkNMVURFX0RJUn0vYXJtYWRpbGxvX2JpdHMvY29uZmlnLmhwcCIpCisgIGZpbGUoU1RSSU5HUyAiJHtBUk1BRElMTE9fSU5DTFVERV9ESVJ9L2FybWFkaWxsb19iaXRzL2NvbmZpZy5ocHAiIF9BUk1BX0NPTkZJR19DT05URU5UUyBSRUdFWCAiXiNkZWZpbmUgQVJNQV9VU0VfW0EtWl0rIikKKyAgc3RyaW5nKFJFR0VYIE1BVENIICJBUk1BX1VTRV9XUkFQUEVSIiBfQVJNQV9VU0VfV1JBUFBFUiAiJHtfQVJNQV9DT05GSUdfQ09OVEVOVFN9IikKKyAgc3RyaW5nKFJFR0VYIE1BVENIICJBUk1BX1VTRV9MQVBBQ0siIF9BUk1BX1VTRV9MQVBBQ0sgIiR7X0FSTUFfQ09ORklHX0NPTlRFTlRTfSIpCisgIHN0cmluZyhSRUdFWCBNQVRDSCAiQVJNQV9VU0VfQkxBUyIgX0FSTUFfVVNFX0JMQVMgIiR7X0FSTUFfQ09ORklHX0NPTlRFTlRTfSIpCisgIHN0cmluZyhSRUdFWCBNQVRDSCAiQVJNQV9VU0VfQVJQQUNLIiBfQVJNQV9VU0VfQVJQQUNLICIke19BUk1BX0NPTkZJR19DT05URU5UU30iKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIkFSTUFfVVNFX0hERjUiIF9BUk1BX1VTRV9IREY1ICIke19BUk1BX0NPTkZJR19DT05URU5UU30iKQorZW5kaWYoKQorCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCisKKyMgSWYgX0FSTUFfVVNFX1dSQVBQRVIgaXMgc2V0LCB0aGVuIHdlIGp1c3QgbGluayB0byBhcm1hZGlsbG8sIGJ1dCBpZiBpdCdzIG5vdCB0aGVuIHdlIG5lZWQgc3VwcG9ydCBsaWJyYXJpZXMgaW5zdGVhZAorc2V0KF9BUk1BX1NVUFBPUlRfTElCUkFSSUVTKQorCitpZihfQVJNQV9VU0VfV1JBUFBFUikKKyAgIyBMaW5rIHRvIHRoZSBhcm1hZGlsbG8gd3JhcHBlciBsaWJyYXJ5LgorICBmaW5kX2xpYnJhcnkoQVJNQURJTExPX0xJQlJBUlkKKyAgICBOQU1FUyBhcm1hZGlsbG8KKyAgICBOQU1FU19QRVJfRElSCisgICAgUEFUSFMKKyAgICAgICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvL2xpYiIKKyAgICAgICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvL2xpYjY0IgorICAgICAgIiRFTlZ7UHJvZ3JhbUZpbGVzfS9Bcm1hZGlsbG8iCisgICAgKQorICBtYXJrX2FzX2FkdmFuY2VkKEFSTUFESUxMT19MSUJSQVJZKQorICBzZXQoX0FSTUFfUkVRVUlSRURfVkFSUyBBUk1BRElMTE9fTElCUkFSWSkKK2Vsc2UoKQorICAjIExpbmsgZGlyZWN0bHkgdG8gaW5kaXZpZHVhbCBjb21wb25lbnRzLgorICBzZXQoQVJNQURJTExPX0xJQlJBUlkgIiIpCisgIGZvcmVhY2gocGtnCisgICAgICBMQVBBQ0sKKyAgICAgIEJMQVMKKyAgICAgIEFSUEFDSworICAgICAgSERGNQorICAgICAgKQorICAgIGlmKF9BUk1BX1VTRV8ke3BrZ30pCisgICAgICBmaW5kX3BhY2thZ2UoJHtwa2d9IFFVSUVUKQorICAgICAgbGlzdChBUFBFTkQgX0FSTUFfUkVRVUlSRURfVkFSUyAiJHtwa2d9X0ZPVU5EIikKKyAgICAgIGlmKCR7cGtnfV9GT1VORCkKKyAgICAgICAgbGlzdChBUFBFTkQgX0FSTUFfU1VQUE9SVF9MSUJSQVJJRVMgJHske3BrZ31fTElCUkFSSUVTfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorZW5kaWYoKQorCiBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoQXJtYWRpbGxvCi0gIFJFUVVJUkVEX1ZBUlMgQVJNQURJTExPX0xJQlJBUlkgQVJNQURJTExPX0lOQ0xVREVfRElSCisgIFJFUVVJUkVEX1ZBUlMgQVJNQURJTExPX0lOQ0xVREVfRElSICR7X0FSTUFfUkVRVUlSRURfVkFSU30KICAgVkVSU0lPTl9WQVIgQVJNQURJTExPX1ZFUlNJT05fU1RSSU5HKQotIyB2ZXJzaW9uX3ZhciBmYWlscyB3aXRoIGNtYWtlIDwgMi44LjQuCiAKIGlmIChBUk1BRElMTE9fRk9VTkQpCiAgIHNldChBUk1BRElMTE9fSU5DTFVERV9ESVJTICR7QVJNQURJTExPX0lOQ0xVREVfRElSfSkKLSAgc2V0KEFSTUFESUxMT19MSUJSQVJJRVMgJHtBUk1BRElMTE9fTElCUkFSWX0pCisgIHNldChBUk1BRElMTE9fTElCUkFSSUVTICR7QVJNQURJTExPX0xJQlJBUll9ICR7X0FSTUFfU1VQUE9SVF9MSUJSQVJJRVN9KQogZW5kaWYgKCkKIAotIyBIaWRlIGludGVybmFsIHZhcmlhYmxlcwotbWFya19hc19hZHZhbmNlZCgKLSAgQVJNQURJTExPX0lOQ0xVREVfRElSCi0gIEFSTUFESUxMT19MSUJSQVJZKQorIyBDbGVhbiB1cCBpbnRlcm5hbCB2YXJpYWJsZXMKK3Vuc2V0KF9BUk1BX1JFUVVJUkVEX1ZBUlMpCit1bnNldChfQVJNQV9TVVBQT1JUX0xJQlJBUklFUykKK3Vuc2V0KF9BUk1BX1VTRV9XUkFQUEVSKQordW5zZXQoX0FSTUFfVVNFX0xBUEFDSykKK3Vuc2V0KF9BUk1BX1VTRV9CTEFTKQordW5zZXQoX0FSTUFfVVNFX0FSUEFDSykKK3Vuc2V0KF9BUk1BX1VTRV9IREY1KQordW5zZXQoX0FSTUFfQ09ORklHX0NPTlRFTlRTKQordW5zZXQoX0FSTUFfSEVBREVSX0NPTlRFTlRTKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQklTT04uY21ha2UgYi9Nb2R1bGVzL0ZpbmRCSVNPTi5jbWFrZQppbmRleCA2YjU4MjhlLi4xZTFhNWEzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRCSVNPTi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRCSVNPTi5jbWFrZQpAQCAtODIsNyArODIsNyBAQAogICBhZGRfZXhlY3V0YWJsZShGb28gbWFpbi5jcHAgJHtCSVNPTl9NeVBhcnNlcl9PVVRQVVRTfSkKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLWZpbmRfcHJvZ3JhbShCSVNPTl9FWEVDVVRBQkxFIE5BTUVTIGJpc29uIHdpbl9iaXNvbiBET0MgInBhdGggdG8gdGhlIGJpc29uIGV4ZWN1dGFibGUiKQorZmluZF9wcm9ncmFtKEJJU09OX0VYRUNVVEFCTEUgTkFNRVMgYmlzb24gd2luLWJpc29uIHdpbl9iaXNvbiBET0MgInBhdGggdG8gdGhlIGJpc29uIGV4ZWN1dGFibGUiKQogbWFya19hc19hZHZhbmNlZChCSVNPTl9FWEVDVVRBQkxFKQogCiBpZihCSVNPTl9FWEVDVVRBQkxFKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQkxBUy5jbWFrZSBiL01vZHVsZXMvRmluZEJMQVMuY21ha2UKaW5kZXggOWI2ZDA5Yy4uMWUzYjU2MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQkxBUy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRCTEFTLmNtYWtlCkBAIC0zNiw3ICszNiw3IEBACiAgICogYGBTQ1NMYGAKICAgKiBgYFNHSU1BVEhgYAogICAqIGBgSUJNRVNTTGBgCi0gICogYGBJbnRlbDEwXzMyYGAgKGludGVsIG1rbCB2MTAgMzIgYml0KQorICAqIGBgSW50ZWwxMF8zMmBgIChpbnRlbCBta2wgdjEwIDMyIGJpdCwgdGhyZWFkZWQgY29kZSkKICAgKiBgYEludGVsMTBfNjRscGBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGxwNjQgbW9kZWwpCiAgICogYGBJbnRlbDEwXzY0bHBfc2VxYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgc2VxdWVudGlhbCBjb2RlLCBscDY0IG1vZGVsKQogICAqIGBgSW50ZWwxMF82NGlscGBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGlscDY0IG1vZGVsKQpAQCAtNDgsNiArNDgsMTAgQEAKICAgKiBgYEFDTUxfR1BVYGAKICAgKiBgYEFwcGxlYGAKICAgKiBgYE5BU2BgCisgICogYGBBcm1gYAorICAqIGBgQXJtX21wYGAKKyAgKiBgYEFybV9pbHA2NGBgCisgICogYGBBcm1faWxwNjRfbXBgYAogICAqIGBgR2VuZXJpY2BgCiAKIGBgQkxBX0Y5NWBgCkBAIC01Nyw2ICs2MSwxNSBAQAogICBpZiBzZXQgYGBwa2ctY29uZmlnYGAgd2lsbCBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgYSBCTEFTIGxpYnJhcnkgZmlyc3QKICAgYW5kIGlmIG9uZSBpcyBmb3VuZCB0aGF0IGlzIHByZWZlcnJlZAogCitJbXBvcnRlZCB0YXJnZXRzCiteXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXQ6CisKK2BgQkxBUzo6QkxBU2BgCisgIFRoZSBsaWJyYXJpZXMgdG8gdXNlIGZvciBCTEFTLCBpZiBmb3VuZC4KKworCiBSZXN1bHQgVmFyaWFibGVzCiBeXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTEwNyw2ICsxMjAsMTcgQEAKICAgZW5kaWYoKQogZW5kaWYoKQogCitmdW5jdGlvbihfYWRkX2JsYXNfdGFyZ2V0KQorICBpZihOT1QgVEFSR0VUIEJMQVM6OkJMQVMpCisgICAgYWRkX2xpYnJhcnkoQkxBUzo6QkxBUyBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgaWYoQkxBU19MSUJSQVJJRVMpCisgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQkxBUzo6QkxBUyBQUk9QRVJUSUVTCisgICAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiJHtCTEFTX0xJQlJBUklFU30iCisgICAgICApCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKQogICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ2hlY2tGb3J0cmFuRnVuY3Rpb25FeGlzdHMuY21ha2UpCiBlbHNlKCkKQEAgLTEyMyw2ICsxNDcsNyBAQAogICBpZihQS0dDX0JMQVNfRk9VTkQpCiAgICAgc2V0KEJMQVNfRk9VTkQgJHtQS0dDX0JMQVNfRk9VTkR9KQogICAgIHNldChCTEFTX0xJQlJBUklFUyAiJHtQS0dDX0JMQVNfTElOS19MSUJSQVJJRVN9IikKKyAgICBfYWRkX2JsYXNfdGFyZ2V0KCkKICAgICByZXR1cm4oKQogICBlbmRpZigpCiBlbmRpZigpCkBAIC0xODMsNiArMjA4LDcgQEAKICAgICAgIGlmKF9saWJyYXJpZXNfd29yaykKICAgICAgICAgZmluZF9saWJyYXJ5KCR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWQogICAgICAgICAgIE5BTUVTICR7X2xpYnJhcnl9CisgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgIFBBVEhTICR7X2V4dGFkZGxpYmRpcn0KICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7X3N1YmRpcnN9CiAgICAgICAgICkKQEAgLTM3Miw2ICszOTgsMTAgQEAKIAogICAgICAgICAgICMgQWRkIHRocmVhZGluZy9zZXF1ZW50aWFsIGxpYnMKICAgICAgICAgICBzZXQoQkxBU19TRUFSQ0hfTElCU19XSU5fVEhSRUFEICIiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQKKyAgICAgICAgICAgICAgImxpYmlvbXA1bWQgbWtsX2ludGVsX3RocmVhZCR7QkxBU19ta2xfRExMX1NVRkZJWH0iKQorICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9uCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQKQEAgLTQ0OCw3ICs0NzgsNyBAQAogICAgICAgICBzZXQoQkxBU19ta2xfT1NfTkFNRSAibGluIikKICAgICAgIGVuZGlmKCkKICAgICAgIGlmKERFRklORUQgRU5We01LTFJPT1R9KQotICAgICAgICBzZXQoQkxBU19ta2xfTUtMUk9PVCAiJEVOVntNS0xST09UfSIpCisgICAgICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntNS0xST09UfSIgQkxBU19ta2xfTUtMUk9PVCkKICAgICAgICAgIyBJZiBNS0xST09UIHBvaW50cyB0byB0aGUgc3ViZGlyZWN0b3J5ICdta2wnLCB1c2UgdGhlIHBhcmVudCBkaXJlY3RvcnkgaW5zdGVhZAogICAgICAgICAjIHNvIHdlIGNhbiBiZXR0ZXIgZGV0ZWN0IG90aGVyIHJlbGV2YW50IGxpYnJhcmllcyBpbiAnY29tcGlsZXInIG9yICd0YmInOgogICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KEJMQVNfbWtsX01LTFJPT1RfTEFTVF9ESVIgIiR7QkxBU19ta2xfTUtMUk9PVH0iIE5BTUUpCkBAIC00NTgsNyArNDg4LDkgQEAKICAgICAgIGVuZGlmKCkKICAgICAgIHNldChCTEFTX21rbF9MSUJfUEFUSF9TVUZGSVhFUwogICAgICAgICAgICJjb21waWxlci9saWIiICJjb21waWxlci9saWIvJHtCTEFTX21rbF9BUkNIX05BTUV9XyR7QkxBU19ta2xfT1NfTkFNRX0iCisgICAgICAgICAgImNvbXBpbGVyL2xpYi8ke0JMQVNfbWtsX0FSQ0hfTkFNRX0iCiAgICAgICAgICAgIm1rbC9saWIiICJta2wvbGliLyR7QkxBU19ta2xfQVJDSF9OQU1FfV8ke0JMQVNfbWtsX09TX05BTUV9IgorICAgICAgICAgICJta2wvbGliLyR7QkxBU19ta2xfQVJDSF9OQU1FfSIKICAgICAgICAgICAibGliLyR7QkxBU19ta2xfQVJDSF9OQU1FfV8ke0JMQVNfbWtsX09TX05BTUV9IikKIAogICAgICAgZm9yZWFjaChJVCAke0JMQVNfU0VBUkNIX0xJQlN9KQpAQCAtNTUwLDYgKzU4MiwzNiBAQAogICBlbmRpZigpCiBlbmRpZigpCiAKKyMgQXJtUEwgYmxhcyBsaWJyYXJ5PyAoaHR0cHM6Ly9kZXZlbG9wZXIuYXJtLmNvbS90b29scy1hbmQtc29mdHdhcmUvc2VydmVyLWFuZC1ocGMvY29tcGlsZS9hcm0tY29tcGlsZXItZm9yLWxpbnV4L2FybS1wZXJmb3JtYW5jZS1saWJyYXJpZXMpCitpZihCTEFfVkVORE9SIE1BVENIRVMgIkFybSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKworICAgIyBDaGVjayBmb3IgNjRiaXQgSW50ZWdlciBzdXBwb3J0CisgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl9pbHA2NCIpCisgICAgIHNldChCTEFTX2FybXBsX0xJQiAiYXJtcGxfaWxwNjQiKQorICAgZWxzZSgpCisgICAgIHNldChCTEFTX2FybXBsX0xJQiAiYXJtcGxfbHA2NCIpCisgICBlbmRpZigpCisKKyAgICMgQ2hlY2sgZm9yIE9wZW5NUCBzdXBwb3J0LCBWSUEgQkxBX1ZFTkRPUiBvZiBBcm1fbXAgb3IgQXJtX2lwbDY0X21wCisgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl9tcCIpCisgICAgIHNldChCTEFTX2FybXBsX0xJQiAiJHtCTEFTX2FybXBsX0xJQn1fbXAiKQorICAgZW5kaWYoKQorCisgICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCisgICAgICBCTEFTX0xJQlJBUklFUworICAgICAgQkxBUworICAgICAgc2dlbW0KKyAgICAgICIiCisgICAgICAiJHtCTEFTX2FybXBsX0xJQn0iCisgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCisgICAgICApCisgIGVuZGlmKCkKKworZW5kaWYoKQorCiAjIEZMQU1FJ3MgYmxpcyBsaWJyYXJ5PyAoaHR0cHM6Ly9naXRodWIuY29tL2ZsYW1lL2JsaXMpCiBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJGTEFNRSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQpAQCAtODkyLDExICs5NTQsMTMgQEAKICAgZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKEJMQVMgUkVRVUlSRURfVkFSUyBCTEFTX0xJQlJBUklFUykKIGVuZGlmKCkKIAorCiAjIE9uIGNvbXBpbGVycyB0aGF0IGltcGxpY2l0bHkgbGluayBCTEFTIChzdWNoIGFzIGZ0biwgY2MsIGFuZCBDQyBvbiBDcmF5IEhQQyBtYWNoaW5lcykKICMgd2UgdXNlZCBhIHBsYWNlaG9sZGVyIGZvciBlbXB0eSBCTEFTX0xJQlJBUklFUyB0byBnZXQgdGhyb3VnaCBvdXIgbG9naWMgYWJvdmUuCiBpZihCTEFTX0xJQlJBUklFUyBTVFJFUVVBTCAiQkxBU19MSUJSQVJJRVMtUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCiAgIHNldChCTEFTX0xJQlJBUklFUyAiIikKIGVuZGlmKCkKIAorX2FkZF9ibGFzX3RhcmdldCgpCiBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQogc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke19ibGFzX09SSUdfQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEJaaXAyLmNtYWtlIGIvTW9kdWxlcy9GaW5kQlppcDIuY21ha2UKaW5kZXggOThhYjcyYy4uNTcwNGQxZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQlppcDIuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQlppcDIuY21ha2UKQEAgLTQ1LDggKzQ1LDggQEAKIGZpbmRfcGF0aChCWklQMl9JTkNMVURFX0RJUiBiemxpYi5oICR7X0JaSVAyX1BBVEhTfSBQQVRIX1NVRkZJWEVTIGluY2x1ZGUpCiAKIGlmIChOT1QgQlpJUDJfTElCUkFSSUVTKQotICAgIGZpbmRfbGlicmFyeShCWklQMl9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgYnoyIGJ6aXAyIGxpYmJ6MiBsaWJiemlwMiAke19CWklQMl9QQVRIU30gUEFUSF9TVUZGSVhFUyBsaWIpCi0gICAgZmluZF9saWJyYXJ5KEJaSVAyX0xJQlJBUllfREVCVUcgTkFNRVMgYnoyZCBiemlwMmQgbGliYnoyZCBsaWJiemlwMmQgJHtfQlpJUDJfUEFUSFN9IFBBVEhfU1VGRklYRVMgbGliKQorICAgIGZpbmRfbGlicmFyeShCWklQMl9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgYnoyIGJ6aXAyIGxpYmJ6MiBsaWJiemlwMiBOQU1FU19QRVJfRElSICR7X0JaSVAyX1BBVEhTfSBQQVRIX1NVRkZJWEVTIGxpYikKKyAgICBmaW5kX2xpYnJhcnkoQlpJUDJfTElCUkFSWV9ERUJVRyBOQU1FUyBiejJkIGJ6aXAyZCBsaWJiejJkIGxpYmJ6aXAyZCBOQU1FU19QRVJfRElSICR7X0JaSVAyX1BBVEhTfSBQQVRIX1NVRkZJWEVTIGxpYikKIAogICAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9TZWxlY3RMaWJyYXJ5Q29uZmlndXJhdGlvbnMuY21ha2UpCiAgICAgU0VMRUNUX0xJQlJBUllfQ09ORklHVVJBVElPTlMoQlpJUDIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRCb29zdC5jbWFrZSBiL01vZHVsZXMvRmluZEJvb3N0LmNtYWtlCmluZGV4IDFlODE1YTAuLjgyZGJjYjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEJvb3N0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEJvb3N0LmNtYWtlCkBAIC0xNTUsNiArMTU1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaWYgbXVsdGlwbGUgY29tcGF0aWJsZSBzdWZmaXhlcyBzaG91bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGVzdGVkIGZvciwgaW4gZGVjcmVhc2luZyBvcmRlciBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJlbmNlLgorICBCb29zdF9MSUJfUFJFRklYICAgICAgICAgLSBTZXQgdG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGxpYnJhcnkgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKGUuZy4gImxpYiIpIHVzZWQgYnkgQm9vc3Qgc3RhdGljIGxpYnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgbmVlZGVkIG9ubHkgb24gcGxhdGZvcm1zIHdoZXJlIENNYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGtub3cgdGhlIHByZWZpeCBieSBkZWZhdWx0LgogICBCb29zdF9BUkNISVRFQ1RVUkUgICAgICAgLSBTZXQgdG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaWJyYXJ5IHN1ZmZpeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiLXg2NCIpLiAgRGVmYXVsdCBpcyBhdXRvLWNvbXB1dGVkIGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIGNvbXBpbGVyIGluIHVzZS4KQEAgLTEyNjYsMTAgKzEyNzAsOCBAQAogICBzZXQoX0Jvb3N0X1VOSVRfVEVTVF9GUkFNRVdPUktfSEVBREVSUyAiYm9vc3QvdGVzdC9mcmFtZXdvcmsuaHBwIikKICAgc2V0KF9Cb29zdF9XQVZFX0hFQURFUlMgICAgICAgICAgICAgICAgImJvb3N0L3dhdmUuaHBwIikKICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9IRUFERVJTICAgICAgImJvb3N0L2FyY2hpdmUvdGV4dF93aWFyY2hpdmUuaHBwIikKLSAgaWYoV0lOMzIpCi0gICAgc2V0KF9Cb29zdF9CWklQMl9IRUFERVJTICAgICAgICAgICAgICJib29zdC9pb3N0cmVhbXMvZmlsdGVyL2J6aXAyLmhwcCIpCi0gICAgc2V0KF9Cb29zdF9aTElCX0hFQURFUlMgICAgICAgICAgICAgICJib29zdC9pb3N0cmVhbXMvZmlsdGVyL3psaWIuaHBwIikKLSAgZW5kaWYoKQorICBzZXQoX0Jvb3N0X0JaSVAyX0hFQURFUlMgICAgICAgICAgICAgICAiYm9vc3QvaW9zdHJlYW1zL2ZpbHRlci9iemlwMi5ocHAiKQorICBzZXQoX0Jvb3N0X1pMSUJfSEVBREVSUyAgICAgICAgICAgICAgICAiYm9vc3QvaW9zdHJlYW1zL2ZpbHRlci96bGliLmhwcCIpCiAKICAgc3RyaW5nKFRPVVBQRVIgJHtjb21wb25lbnR9IHVwcGVyY29tcG9uZW50KQogICBzZXQoJHtfaGRyc30gJHtfQm9vc3RfJHt1cHBlcmNvbXBvbmVudH1fSEVBREVSU30gUEFSRU5UX1NDT1BFKQpAQCAtMTY2NywxMCArMTY2OSwxNyBAQAogIyAgUHJlZml4IGluaXRpYWxpemF0aW9uCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zZXQoQm9vc3RfTElCX1BSRUZJWCAiIikKLWlmICggKEdIU01VTFRJIEFORCBCb29zdF9VU0VfU1RBVElDX0xJQlMpIE9SCi0gICAgKFdJTjMyIEFORCBCb29zdF9VU0VfU1RBVElDX0xJQlMgQU5EIE5PVCBDWUdXSU4pICkKLSAgc2V0KEJvb3N0X0xJQl9QUkVGSVggImxpYiIpCitpZiAoIE5PVCBERUZJTkVEIEJvb3N0X0xJQl9QUkVGSVggKQorICAjIEJvb3N0J3Mgc3RhdGljIGxpYnJhcmllcyB1c2UgYSAibGliIiBwcmVmaXggb24gRExMIHBsYXRmb3JtcworICAjIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB0aGUgRExMIGltcG9ydCBsaWJyYXJpZXMuCisgIGlmIChCb29zdF9VU0VfU1RBVElDX0xJQlMgQU5EICgKKyAgICAgIChXSU4zMiBBTkQgTk9UIENZR1dJTikKKyAgICAgIE9SIEdIU01VTFRJCisgICAgICApKQorICAgIHNldChCb29zdF9MSUJfUFJFRklYICJsaWIiKQorICBlbHNlKCkKKyAgICBzZXQoQm9vc3RfTElCX1BSRUZJWCAiIikKKyAgZW5kaWYoKQogZW5kaWYoKQogCiBpZiAoIE5PVCBCb29zdF9OQU1FU1BBQ0UgKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ1VEQS5jbWFrZSBiL01vZHVsZXMvRmluZENVREEuY21ha2UKaW5kZXggZTFhZjJkNi4uYTkzZDRmZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQ1VEQS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRDVURBLmNtYWtlCkBAIC0zNTcsNyArMzU3LDggQEAKICAgQ1VEQV9ucHBpY2NfTElCUkFSWSAgIC0tIE5WSURJQSBQZXJmb3JtYW5jZSBQcmltaXRpdmVzIGxpYiAoaW1hZ2UgcHJvY2Vzc2luZykuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IGF2YWlsYWJsZSBmb3IgQ1VEQSB2ZXJzaW9uIDkuMC4KICAgQ1VEQV9ucHBpY29tX0xJQlJBUlkgIC0tIE5WSURJQSBQZXJmb3JtYW5jZSBQcmltaXRpdmVzIGxpYiAoaW1hZ2UgcHJvY2Vzc2luZykuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IGF2YWlsYWJsZSBmb3IgQ1VEQSB2ZXJzaW9uIDkuMC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgYXZhaWxhYmxlIGZvciBDVURBIHZlcnNpb24gOS4wIC0gMTAuMi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IG52anBlZy4KICAgQ1VEQV9ucHBpZGVpX0xJQlJBUlkgIC0tIE5WSURJQSBQZXJmb3JtYW5jZSBQcmltaXRpdmVzIGxpYiAoaW1hZ2UgcHJvY2Vzc2luZykuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IGF2YWlsYWJsZSBmb3IgQ1VEQSB2ZXJzaW9uIDkuMC4KICAgQ1VEQV9ucHBpZl9MSUJSQVJZICAgIC0tIE5WSURJQSBQZXJmb3JtYW5jZSBQcmltaXRpdmVzIGxpYiAoaW1hZ2UgcHJvY2Vzc2luZykuCkBAIC0xMDAyLDcgKzEwMDMsOSBAQAogICBmaW5kX2N1ZGFfaGVscGVyX2xpYnMobnBwYykKICAgZmluZF9jdWRhX2hlbHBlcl9saWJzKG5wcGlhbCkKICAgZmluZF9jdWRhX2hlbHBlcl9saWJzKG5wcGljYykKLSAgZmluZF9jdWRhX2hlbHBlcl9saWJzKG5wcGljb20pCisgIGlmKENVREFfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjExLjAiKQorICAgIGZpbmRfY3VkYV9oZWxwZXJfbGlicyhucHBpY29tKQorICBlbmRpZigpCiAgIGZpbmRfY3VkYV9oZWxwZXJfbGlicyhucHBpZGVpKQogICBmaW5kX2N1ZGFfaGVscGVyX2xpYnMobnBwaWYpCiAgIGZpbmRfY3VkYV9oZWxwZXJfbGlicyhucHBpZykKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZENVREEvc2VsZWN0X2NvbXB1dGVfYXJjaC5jbWFrZSBiL01vZHVsZXMvRmluZENVREEvc2VsZWN0X2NvbXB1dGVfYXJjaC5jbWFrZQppbmRleCA3ZGRiNzA5Li5jMTE3MjVkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRDVURBL3NlbGVjdF9jb21wdXRlX2FyY2guY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQ1VEQS9zZWxlY3RfY29tcHV0ZV9hcmNoLmNtYWtlCkBAIC01LDkgKzUsOSBAQAogIyAgICAgICAtICJBdXRvIiBkZXRlY3RzIGxvY2FsIG1hY2hpbmUgR1BVIGNvbXB1dGUgYXJjaCBhdCBydW50aW1lLgogIyAgICAgICAtICJDb21tb24iIGFuZCAiQWxsIiBjb3ZlciBjb21tb24gYW5kIGVudGlyZSBzdWJzZXRzIG9mIGFyY2hpdGVjdHVyZXMKICMgICAgICBBUkNIX0FORF9QVFggOiBOQU1FIHwgTlVNLk5VTSB8IE5VTS5OVU0oTlVNLk5VTSkgfCBOVU0uTlVNK1BUWAotIyAgICAgIE5BTUU6IEZlcm1pIEtlcGxlciBNYXh3ZWxsIEtlcGxlcitUZWdyYSBLZXBsZXIrVGVzbGEgTWF4d2VsbCtUZWdyYSBQYXNjYWwgVm9sdGEgVHVyaW5nCisjICAgICAgTkFNRTogRmVybWkgS2VwbGVyIE1heHdlbGwgS2VwbGVyK1RlZ3JhIEtlcGxlcitUZXNsYSBNYXh3ZWxsK1RlZ3JhIFBhc2NhbCBWb2x0YSBUdXJpbmcgQW1wZXJlCiAjICAgICAgTlVNOiBBbnkgbnVtYmVyLiBPbmx5IHRob3NlIHBhaXJzIGFyZSBjdXJyZW50bHkgYWNjZXB0ZWQgYnkgTlZDQyB0aG91Z2g6Ci0jICAgICAgICAgICAgMi4wIDIuMSAzLjAgMy4yIDMuNSAzLjcgNS4wIDUuMiA1LjMgNi4wIDYuMiA3LjAgNy4yIDcuNQorIyAgICAgICAgICAgIDIuMCAyLjEgMy4wIDMuMiAzLjUgMy43IDUuMCA1LjIgNS4zIDYuMCA2LjIgNy4wIDcuMiA3LjUgOC4wCiAjICAgICAgUmV0dXJucyBMSVNUIG9mIGZsYWdzIHRvIGJlIGFkZGVkIHRvIENVREFfTlZDQ19GTEFHUyBpbiAke291dF92YXJpYWJsZX0KICMgICAgICBBZGRpdGlvbmFsbHksIHNldHMgJHtvdXRfdmFyaWFibGV9X3JlYWRhYmxlIHRvIHRoZSByZXN1bHRpbmcgbnVtZXJpYyBsaXN0CiAjICAgICAgRXhhbXBsZToKQEAgLTMwLDcgKzMwLDEyIEBACiBzZXQoQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAgIkZlcm1pIiAiS2VwbGVyIiAiTWF4d2VsbCIpCiAKICMgVGhpcyBsaXN0IHdpbGwgYmUgdXNlZCBmb3IgQ1VEQV9BUkNIX05BTUUgPSBDb21tb24gb3B0aW9uIChlbmFibGVkIGJ5IGRlZmF1bHQpCi1zZXQoQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjMuMCIgIjMuNSIgIjUuMCIpCitzZXQoQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjMuNSIgIjUuMCIpCisjIDMuMCBpcyByZW1vdmVkIGluIENVREEgMTEsIHNlZToKKyMgaHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdWRhLXRvb2xraXQtcmVsZWFzZS1ub3Rlcy9pbmRleC5odG1sI2RlcHJlY2F0ZWQtZmVhdHVyZXMKK2lmKENVREFfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjExLjAiKQorICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiMy4wIikKK2VuZGlmKCkKIAogaWYoQ1VEQV9WRVJTSU9OIFZFUlNJT05fTEVTUyAiNy4wIikKICAgc2V0KENVREFfTElNSVRfR1BVX0FSQ0hJVEVDVFVSRSAiNS4yIikKQEAgLTU1LDI3ICs2MCwzOSBAQAogICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNi4wIiAiNi4xIiAiNi4yIikKIAogICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICI5LjAiKQotICAgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI2LjErUFRYIikKKyAgICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiNi4yK1BUWCIpCiAgICAgc2V0KENVREFfTElNSVRfR1BVX0FSQ0hJVEVDVFVSRSAiNy4wIikKICAgZW5kaWYoKQogZW5kaWYgKCkKIAogaWYoQ1VEQV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiOS4wIikKICAgbGlzdChBUFBFTkQgQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAiVm9sdGEiKQotICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiNy4wIiAiNy4wK1BUWCIpCi0gIGxpc3QoQVBQRU5EIENVREFfQUxMX0dQVV9BUkNISVRFQ1RVUkVTICI3LjAiICI3LjArUFRYIiAiNy4yIiAiNy4yK1BUWCIpCisgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI3LjAiKQorICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNy4wIiAiNy4yIikKIAogICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxMC4wIikKKyAgICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiNy4yK1BUWCIpCiAgICAgc2V0KENVREFfTElNSVRfR1BVX0FSQ0hJVEVDVFVSRSAiOC4wIikKICAgZW5kaWYoKQogZW5kaWYoKQogCiBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIxMC4wIikKICAgbGlzdChBUFBFTkQgQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAiVHVyaW5nIikKLSAgbGlzdChBUFBFTkQgQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjcuNSIgIjcuNStQVFgiKQotICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNy41IiAiNy41K1BUWCIpCisgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI3LjUiKQorICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNy41IikKIAogICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxMS4wIikKKyAgICBzZXQoQ1VEQV9MSU1JVF9HUFVfQVJDSElURUNUVVJFICI4LjAiKQorICAgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI3LjUrUFRYIikKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIxMS4wIikKKyAgbGlzdChBUFBFTkQgQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAiQW1wZXJlIikKKyAgbGlzdChBUFBFTkQgQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjguMCIgIjguMCtQVFgiKQorICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiOC4wIikKKworICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxMi4wIikKICAgICBzZXQoQ1VEQV9MSU1JVF9HUFVfQVJDSElURUNUVVJFICI5LjAiKQogICBlbmRpZigpCiBlbmRpZigpCkBAIC0yMTQsNiArMjMxLDkgQEAKICAgICAgIGVsc2VpZigke2FyY2hfbmFtZX0gU1RSRVFVQUwgIlR1cmluZyIpCiAgICAgICAgIHNldChhcmNoX2JpbiA3LjUpCiAgICAgICAgIHNldChhcmNoX3B0eCA3LjUpCisgICAgICBlbHNlaWYoJHthcmNoX25hbWV9IFNUUkVRVUFMICJBbXBlcmUiKQorICAgICAgICBzZXQoYXJjaF9iaW4gOC4wKQorICAgICAgICBzZXQoYXJjaF9wdHggOC4wKQogICAgICAgZWxzZSgpCiAgICAgICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiVW5rbm93biBDVURBIEFyY2hpdGVjdHVyZSBOYW1lICR7YXJjaF9uYW1lfSBpbiBDVURBX1NFTEVDVF9OVkNDX0FSQ0hfRkxBR1MiKQogICAgICAgZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ1VEQVRvb2xraXQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRDVURBVG9vbGtpdC5jbWFrZQppbmRleCBkZTdlNzg1Li40ZTUyZTAzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRDVURBVG9vbGtpdC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRDVURBVG9vbGtpdC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRDVURBVG9vbGtpdAogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKwogVGhpcyBzY3JpcHQgbG9jYXRlcyB0aGUgTlZJRElBIENVREEgdG9vbGtpdCBhbmQgdGhlIGFzc29jaWF0ZWQgbGlicmFyaWVzLCBidXQKIGRvZXMgbm90IHJlcXVpcmUgdGhlIGBgQ1VEQWBgIGxhbmd1YWdlIGJlIGVuYWJsZWQgZm9yIGEgZ2l2ZW4gcHJvamVjdC4gVGhpcwogbW9kdWxlIGRvZXMgbm90IHNlYXJjaCBmb3IgdGhlIE5WSURJQSBDVURBIFNhbXBsZXMuCkBAIC0xNTQsNiArMTU2LDggQEAKIAogLSBgYENVREE6OmN1Ymxhc2BgCiAtIGBgQ1VEQTo6Y3VibGFzX3N0YXRpY2BgCistIGBgQ1VEQTo6Y3VibGFzTHRgYCBzdGFydGluZyBpbiBDVURBIDEwLjEKKy0gYGBDVURBOjpjdWJsYXNMdF9zdGF0aWNgYCBzdGFydGluZyBpbiBDVURBIDEwLjEKIAogLi4gX2BjdWRhX3Rvb2xraXRfY3VGRlRgOgogCkBAIC0yNDAsNiArMjQ0LDcgQEAKICAgLSBgYENVREE6Om5wcGljY19zdGF0aWNgYAogCiAtIGBucHBpY29tYDogSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMgaW4gYG5wcGlfY29tcHJlc3Npb25fZnVuY3Rpb25zLmhgCisgIFJlbW92ZWQgc3RhcnRpbmcgaW4gQ1VEQSAxMS4wLCB1c2UgOnJlZjpgbnZKUEVHPGN1ZGFfdG9vbGtpdF9udkpQRUc+YCBpbnN0ZWFkLgogCiAgIC0gYGBDVURBOjpucHBpY29tYGAKICAgLSBgYENVREE6Om5wcGljb21fc3RhdGljYGAKQEAgLTMwMiw2ICszMDcsNyBAQAogIiIiIiIiIgogCiBUaGUgYG52R1JBUEggPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvbnZncmFwaC9pbmRleC5odG1sPmBfIGxpYnJhcnkuCitSZW1vdmVkIHN0YXJ0aW5nIGluIENVREEgMTEuMAogCiBUYXJnZXRzIENyZWF0ZWQ6CiAKQEAgLTQyMSw2ICs0MjcsMTAgQEAKICAgICBUaGUgcGF0aCB0byB0aGUgQ1VEQSBUb29sa2l0IGxpYnJhcnkgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIENVREEKICAgICBSdW50aW1lIGxpYnJhcnkgYGBjdWRhcnRgYC4KIAorYGBDVURBVG9vbGtpdF9MSUJSQVJZX1JPT1RgYAorICAgIFRoZSBwYXRoIHRvIHRoZSBDVURBIFRvb2xraXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG52dm0gZGlyZWN0b3J5IGFuZAorICAgIHZlcnNpb24udHh0LgorCiBgYENVREFUb29sa2l0X1RBUkdFVF9ESVJgYAogICAgIFRoZSBwYXRoIHRvIHRoZSBDVURBIFRvb2xraXQgZGlyZWN0b3J5IGluY2x1ZGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQogICAgIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiBXaGVuIG5vdCBjcm9zcy1jb21waWxpbmcgdGhpcyB3aWxsIGJlIGVxdWl2YWxhbnQgdG8KQEAgLTQ3MywyMTQgKzQ4MywxNzkgQEAKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9MT0FERUQgQU5EIE5PVCBDVURBVG9vbGtpdF9CSU5fRElSKQotICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGN1ZGFfZGlyICIke0NNQUtFX0NVREFfQ09NUElMRVJ9IiBESVJFQ1RPUlkpCi0gICMgdXNlIHRoZSBhbHJlYWR5IGRldGVjdGVkIGN1ZGEgY29tcGlsZXIKLSAgc2V0KENVREFUb29sa2l0X0JJTl9ESVIgIiR7Y3VkYV9kaXJ9IiBDQUNIRSBQQVRIICIiKQotICBtYXJrX2FzX2FkdmFuY2VkKENVREFUb29sa2l0X0JJTl9ESVIpCi0gIHVuc2V0KGN1ZGFfZGlyKQotZW5kaWYoKQorIyBUaGUgdG9vbGtpdCBpcyBsb2NhdGVkIGR1cmluZyBjb21waWxlciBkZXRlY3Rpb24gZm9yIENVREEgYW5kIHN0b3JlZCBpbiBDTWFrZUNVREFDb21waWxlci5jbWFrZSBhcworIyBDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVCBhbmQgQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QuCisjIFdlIGNvbXB1dGUgdGhlIHJlc3QgYmFzZWQgb24gdGhvc2UgaGVyZSB0byBhdm9pZCByZS1zZWFyY2hpbmcgYW5kIHRvIGF2b2lkIGZpbmRpbmcgYSBwb3NzaWJseQorIyBkaWZmZXJlbnQgaW5zdGFsbGF0aW9uLgoraWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1QpCisgIHNldChDVURBVG9vbGtpdF9ST09UX0RJUiAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVH0iKQorICBzZXQoQ1VEQVRvb2xraXRfTElCUkFSWV9ST09UICIke0NNQUtFX0NVREFfQ09NUElMRVJfTElCUkFSWV9ST09UfSIpCisgIHNldChDVURBVG9vbGtpdF9CSU5fRElSICIke0NVREFUb29sa2l0X1JPT1RfRElSfS9iaW4iKQorICBzZXQoQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFICIke0NVREFUb29sa2l0X0JJTl9ESVJ9L252Y2Mke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfSIpCitlbHNlKCkKKyAgIyBGb3IgTlZDQyB3ZSBjYW4gZWFzaWx5IGRlZHVjZSB0aGUgU0RLIGJpbmFyeSBkaXJlY3RvcnkgZnJvbSB0aGUgY29tcGlsZXIgcGF0aC4KKyAgaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9MT0FERUQgQU5EIE5PVCBDVURBVG9vbGtpdF9CSU5fRElSIEFORCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQVRvb2xraXRfQklOX0RJUiAiJHtDTUFLRV9DVURBX0NPTVBJTEVSfSIgRElSRUNUT1JZKQorICAgIHNldChDVURBVG9vbGtpdF9CSU5fRElSICIke0NVREFUb29sa2l0X0JJTl9ESVJ9IiBDQUNIRSBQQVRIICIiKQorICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1VEQVRvb2xraXRfQklOX0RJUikKKyAgZW5kaWYoKQogCi0jIFRyeSBsYW5ndWFnZS0gb3IgdXNlci1wcm92aWRlZCBwYXRoIGZpcnN0LgotaWYoQ1VEQVRvb2xraXRfQklOX0RJUikKLSAgZmluZF9wcm9ncmFtKENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRQotICAgIE5BTUVTIG52Y2MgbnZjYy5leGUKLSAgICBQQVRIUyAke0NVREFUb29sa2l0X0JJTl9ESVJ9Ci0gICAgTk9fREVGQVVMVF9QQVRICisgICMgVHJ5IGxhbmd1YWdlLSBvciB1c2VyLXByb3ZpZGVkIHBhdGggZmlyc3QuCisgIGlmKENVREFUb29sa2l0X0JJTl9ESVIpCisgICAgZmluZF9wcm9ncmFtKENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRQorICAgICAgTkFNRVMgbnZjYyBudmNjLmV4ZQorICAgICAgUEFUSFMgJHtDVURBVG9vbGtpdF9CSU5fRElSfQorICAgICAgTk9fREVGQVVMVF9QQVRICiAgICAgKQotZW5kaWYoKQotCi0jIFNlYXJjaCB1c2luZyBDVURBVG9vbGtpdF9ST09UCi1maW5kX3Byb2dyYW0oQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFCi0gIE5BTUVTIG52Y2MgbnZjYy5leGUKLSAgUEFUSFMgRU5WIENVREFfUEFUSAotICBQQVRIX1NVRkZJWEVTIGJpbgotKQotCi0jIElmIHRoZSB1c2VyIHNwZWNpZmllZCBDVURBVG9vbGtpdF9ST09UIGJ1dCBudmNjIGNvdWxkIG5vdCBiZSBmb3VuZCwgdGhpcyBpcyBhbiBlcnJvci4KLWlmIChOT1QgQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFIEFORCAoREVGSU5FRCBDVURBVG9vbGtpdF9ST09UIE9SIERFRklORUQgRU5We0NVREFUb29sa2l0X1JPT1R9KSkKLSAgIyBEZWNsYXJlIGVycm9yIG1lc3NhZ2VzIG5vdywgcHJpbnQgbGF0ZXIgZGVwZW5kaW5nIG9uIGZpbmRfcGFja2FnZSBhcmdzLgotICBzZXQoZmFpbF9iYXNlICJDb3VsZCBub3QgZmluZCBudmNjIGV4ZWN1dGFibGUgaW4gcGF0aCBzcGVjaWZpZWQgYnkiKQotICBzZXQoY3VkYV9yb290X2ZhaWwgIiR7ZmFpbF9iYXNlfSBDVURBVG9vbGtpdF9ST09UPSR7Q1VEQVRvb2xraXRfUk9PVH0iKQotICBzZXQoZW52X2N1ZGFfcm9vdF9mYWlsICIke2ZhaWxfYmFzZX0gZW52aXJvbm1lbnQgdmFyaWFibGUgQ1VEQVRvb2xraXRfUk9PVD0kRU5We0NVREFUb29sa2l0X1JPT1R9IikKLQotICBpZiAoQ1VEQVRvb2xraXRfRklORF9SRVFVSVJFRCkKLSAgICBpZiAoREVGSU5FRCBDVURBVG9vbGtpdF9ST09UKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2N1ZGFfcm9vdF9mYWlsfSkKLSAgICBlbHNlaWYgKERFRklORUQgRU5We0NVREFUb29sa2l0X1JPT1R9KQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2Vudl9jdWRhX3Jvb3RfZmFpbH0pCi0gICAgZW5kaWYoKQotICBlbHNlKCkKLSAgICBpZiAoTk9UIENVREFUb29sa2l0X0ZJTkRfUVVJRVRMWSkKLSAgICAgIGlmIChERUZJTkVEIENVREFUb29sa2l0X1JPT1QpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICR7Y3VkYV9yb290X2ZhaWx9KQotICAgICAgZWxzZWlmIChERUZJTkVEIEVOVntDVURBVG9vbGtpdF9ST09UfSkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgJHtlbnZfY3VkYV9yb290X2ZhaWx9KQotICAgICAgZW5kaWYoKQotICAgIGVuZGlmKCkKLSAgICBzZXQoQ1VEQVRvb2xraXRfRk9VTkQgRkFMU0UpCi0gICAgdW5zZXQoZmFpbF9iYXNlKQotICAgIHVuc2V0KGN1ZGFfcm9vdF9mYWlsKQotICAgIHVuc2V0KGVudl9jdWRhX3Jvb3RfZmFpbCkKLSAgICByZXR1cm4oKQotICBlbmRpZigpCi1lbmRpZigpCi0KLSMgQ1VEQVRvb2xraXRfUk9PVCBjbWFrZSAvIGVudiB2YXJpYWJsZSBub3Qgc3BlY2lmaWVkLCB0cnkgcGxhdGZvcm0gZGVmYXVsdHMuCi0jCi0jIC0gTGludXg6IC91c3IvbG9jYWwvY3VkYS1YLlkKLSMgLSBtYWNPUzogL0RldmVsb3Blci9OVklESUEvQ1VEQS1YLlkKLSMgLSBXaW5kb3dzOiBDOlxQcm9ncmFtIEZpbGVzXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcQ1VEQVx2WC5ZCi0jCi0jIFdlIHdpbGwgYWxzbyBzZWFyY2ggdGhlIGRlZmF1bHQgc3ltbGluayBsb2NhdGlvbiAvdXNyL2xvY2FsL2N1ZGEgZmlyc3Qgc2luY2UKLSMgaWYgQ1VEQVRvb2xraXRfUk9PVCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHN5bWxpbmtlZAotIyBkaXJlY3RvcnkgaXMgdGhlIGRlc2lyZWQgbG9jYXRpb24uCi1pZiAoTk9UIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSkKLSAgaWYgKFVOSVgpCi0gICAgaWYgKE5PVCBBUFBMRSkKLSAgICAgIHNldChwbGF0Zm9ybV9iYXNlICIvdXNyL2xvY2FsL2N1ZGEtIikKLSAgICBlbHNlKCkKLSAgICAgIHNldChwbGF0Zm9ybV9iYXNlICIvRGV2ZWxvcGVyL05WSURJQS9DVURBLSIpCi0gICAgZW5kaWYoKQotICBlbHNlKCkKLSAgICBzZXQocGxhdGZvcm1fYmFzZSAiQzpcXFByb2dyYW0gRmlsZXNcXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcXENVREFcXHYiKQogICBlbmRpZigpCiAKLSAgIyBCdWlsZCBvdXQgYSBkZXNjZW5kaW5nIGxpc3Qgb2YgcG9zc2libGUgY3VkYSBpbnN0YWxsYXRpb25zLCBlLmcuCi0gIGZpbGUoR0xPQiBwb3NzaWJsZV9wYXRocyAiJHtwbGF0Zm9ybV9iYXNlfSoiKQotICAjIEl0ZXJhdGUgdGhlIGdsb2IgcmVzdWx0cyBhbmQgY3JlYXRlIGEgZGVzY2VuZGluZyBsaXN0LgotICBzZXQocG9zc2libGVfdmVyc2lvbnMpCi0gIGZvcmVhY2ggKHAgJHtwb3NzaWJsZV9wYXRoc30pCi0gICAgIyBFeHRyYWN0IHZlcnNpb24gbnVtYmVyIGZyb20gZW5kIG9mIHN0cmluZwotICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiWzAtOV1bMC05XT9cXC5bMC05XSQiIHBfdmVyc2lvbiAke3B9KQotICAgIGlmIChJU19ESVJFQ1RPUlkgJHtwfSBBTkQgcF92ZXJzaW9uKQotICAgICAgbGlzdChBUFBFTkQgcG9zc2libGVfdmVyc2lvbnMgJHtwX3ZlcnNpb259KQotICAgIGVuZGlmKCkKLSAgZW5kZm9yZWFjaCgpCi0KLSAgIyBDYW5ub3QgdXNlIGxpc3QoU09SVCkgYmVjYXVzZSB0aGF0IGlzIGFscGhhYmV0aWNhbCwgd2UgbmVlZCBudW1lcmljYWwuCi0gICMgTk9URTogdGhpcyBpcyBub3QgYW4gZWZmaWNpZW50IHNvcnRpbmcgc3RyYXRlZ3kuICBCdXQgZXZlbiBpZiBhIHVzZXIgaGFkCi0gICMgZXZlcnkgcG9zc2libGUgdmVyc2lvbiBvZiBDVURBIGluc3RhbGxlZCwgdGhpcyB3b3VsZG4ndCBjcmVhdGUgYW55Ci0gICMgc2lnbmlmaWNhbnQgb3ZlcmhlYWQuCi0gIHNldCh2ZXJzaW9ucykKLSAgZm9yZWFjaCAodiAke3Bvc3NpYmxlX3ZlcnNpb25zfSkKLSAgICBsaXN0KExFTkdUSCB2ZXJzaW9ucyBudW1fdmVyc2lvbnMpCi0gICAgIyBGaXJzdCB2ZXJzaW9uLCBub3RoaW5nIHRvIGNvbXBhcmUgd2l0aCBzbyBqdXN0IGFwcGVuZC4KLSAgICBpZiAobnVtX3ZlcnNpb25zIEVRVUFMIDApCi0gICAgICBsaXN0KEFQUEVORCB2ZXJzaW9ucyAke3Z9KQotICAgIGVsc2UoKQotICAgICAgIyBMb29wIHRocm91Z2ggbGlzdC4gIEluc2VydCBhdCBhbiBpbmRleCB3aGVuIGNvbXBhcmlzb24gaXMKLSAgICAgICMgVkVSU0lPTl9HUkVBVEVSIHNpbmNlIHdlIHdhbnQgYSBkZXNjZW5kaW5nIGxpc3QuICBEdXBsaWNhdGVzIHdpbGwgbm90Ci0gICAgICAjIGhhcHBlbiBzaW5jZSB0aGlzIGNhbWUgZnJvbSBhIGdsb2IgbGlzdCBvZiBkaXJlY3Rvcmllcy4KLSAgICAgIHNldChpIDApCi0gICAgICBzZXQoZWFybHlfdGVybWluYXRlIEZBTFNFKQotICAgICAgd2hpbGUgKGkgTEVTUyBudW1fdmVyc2lvbnMpCi0gICAgICAgIGxpc3QoR0VUIHZlcnNpb25zICR7aX0gY3VycikKLSAgICAgICAgaWYgKHYgVkVSU0lPTl9HUkVBVEVSIGN1cnIpCi0gICAgICAgICAgbGlzdChJTlNFUlQgdmVyc2lvbnMgJHtpfSAke3Z9KQotICAgICAgICAgIHNldChlYXJseV90ZXJtaW5hdGUgVFJVRSkKLSAgICAgICAgICBicmVhaygpCi0gICAgICAgIGVuZGlmKCkKLSAgICAgICAgbWF0aChFWFBSIGkgIiR7aX0gKyAxIikKLSAgICAgIGVuZHdoaWxlKCkKLSAgICAgICMgSWYgaXQgZGlkIG5vdCBnZXQgaW5zZXJ0ZWQsIHBsYWNlIGl0IGF0IHRoZSBlbmQuCi0gICAgICBpZiAoTk9UIGVhcmx5X3Rlcm1pbmF0ZSkKLSAgICAgICAgbGlzdChBUFBFTkQgdmVyc2lvbnMgJHt2fSkKLSAgICAgIGVuZGlmKCkKLSAgICBlbmRpZigpCi0gIGVuZGZvcmVhY2goKQotCi0gICMgV2l0aCBhIGRlc2NlbmRpbmcgbGlzdCBvZiB2ZXJzaW9ucywgcG9wdWxhdGUgcG9zc2libGUgcGF0aHMgdG8gc2VhcmNoLgotICBzZXQoc2VhcmNoX3BhdGhzKQotICBmb3JlYWNoICh2ICR7dmVyc2lvbnN9KQotICAgIGxpc3QoQVBQRU5EIHNlYXJjaF9wYXRocyAiJHtwbGF0Zm9ybV9iYXNlfSR7dn0iKQotICBlbmRmb3JlYWNoKCkKLQotICAjIEZvcmNlIHRoZSBnbG9iYWwgZGVmYXVsdCAvdXNyL2xvY2FsL2N1ZGEgdG8gdGhlIGZyb250IG9uIFVuaXguCi0gIGlmIChVTklYKQotICAgIGxpc3QoSU5TRVJUIHNlYXJjaF9wYXRocyAwICIvdXNyL2xvY2FsL2N1ZGEiKQotICBlbmRpZigpCi0KLSAgIyBOb3cgc2VhcmNoIGZvciBudmNjIGFnYWluIHVzaW5nIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IHNlYXJjaCBwYXRocy4KKyAgIyBTZWFyY2ggdXNpbmcgQ1VEQVRvb2xraXRfUk9PVAogICBmaW5kX3Byb2dyYW0oQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFCiAgICAgTkFNRVMgbnZjYyBudmNjLmV4ZQotICAgIFBBVEhTICR7c2VhcmNoX3BhdGhzfQorICAgIFBBVEhTIEVOViBDVURBX1BBVEgKICAgICBQQVRIX1NVRkZJWEVTIGJpbgogICApCiAKLSAgIyBXZSBhcmUgZG9uZSB3aXRoIHRoZXNlIHZhcmlhYmxlcyBub3csIGNsZWFudXAgZm9yIGNhbGxlci4KLSAgdW5zZXQocGxhdGZvcm1fYmFzZSkKLSAgdW5zZXQocG9zc2libGVfcGF0aHMpCi0gIHVuc2V0KHBvc3NpYmxlX3ZlcnNpb25zKQotICB1bnNldCh2ZXJzaW9ucykKLSAgdW5zZXQoaSkKLSAgdW5zZXQoZWFybHlfdGVybWluYXRlKQotICB1bnNldChzZWFyY2hfcGF0aHMpCisgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIENVREFUb29sa2l0X1JPT1QgYnV0IG52Y2MgY291bGQgbm90IGJlIGZvdW5kLCB0aGlzIGlzIGFuIGVycm9yLgorICBpZihOT1QgQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFIEFORCAoREVGSU5FRCBDVURBVG9vbGtpdF9ST09UIE9SIERFRklORUQgRU5We0NVREFUb29sa2l0X1JPT1R9KSkKKyAgICAjIERlY2xhcmUgZXJyb3IgbWVzc2FnZXMgbm93LCBwcmludCBsYXRlciBkZXBlbmRpbmcgb24gZmluZF9wYWNrYWdlIGFyZ3MuCisgICAgc2V0KGZhaWxfYmFzZSAiQ291bGQgbm90IGZpbmQgbnZjYyBleGVjdXRhYmxlIGluIHBhdGggc3BlY2lmaWVkIGJ5IikKKyAgICBzZXQoY3VkYV9yb290X2ZhaWwgIiR7ZmFpbF9iYXNlfSBDVURBVG9vbGtpdF9ST09UPSR7Q1VEQVRvb2xraXRfUk9PVH0iKQorICAgIHNldChlbnZfY3VkYV9yb290X2ZhaWwgIiR7ZmFpbF9iYXNlfSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDVURBVG9vbGtpdF9ST09UPSRFTlZ7Q1VEQVRvb2xraXRfUk9PVH0iKQogCi0gIGlmIChOT1QgQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFKQotICAgIGlmIChDVURBVG9vbGtpdF9GSU5EX1JFUVVJUkVEKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgbnZjYywgcGxlYXNlIHNldCBDVURBVG9vbGtpdF9ST09ULiIpCi0gICAgZWxzZWlmKE5PVCBDVURBVG9vbGtpdF9GSU5EX1FVSUVUTFkpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ291bGQgbm90IGZpbmQgbnZjYywgcGxlYXNlIHNldCBDVURBVG9vbGtpdF9ST09ULiIpCisgICAgaWYoQ1VEQVRvb2xraXRfRklORF9SRVFVSVJFRCkKKyAgICAgIGlmKERFRklORUQgQ1VEQVRvb2xraXRfUk9PVCkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2N1ZGFfcm9vdF9mYWlsfSkKKyAgICAgIGVsc2VpZihERUZJTkVEIEVOVntDVURBVG9vbGtpdF9ST09UfSkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2Vudl9jdWRhX3Jvb3RfZmFpbH0pCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBpZihOT1QgQ1VEQVRvb2xraXRfRklORF9RVUlFVExZKQorICAgICAgICBpZihERUZJTkVEIENVREFUb29sa2l0X1JPT1QpCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgJHtjdWRhX3Jvb3RfZmFpbH0pCisgICAgICAgIGVsc2VpZihERUZJTkVEIEVOVntDVURBVG9vbGtpdF9ST09UfSkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAke2Vudl9jdWRhX3Jvb3RfZmFpbH0pCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICAgIHNldChDVURBVG9vbGtpdF9GT1VORCBGQUxTRSkKKyAgICAgIHVuc2V0KGZhaWxfYmFzZSkKKyAgICAgIHVuc2V0KGN1ZGFfcm9vdF9mYWlsKQorICAgICAgdW5zZXQoZW52X2N1ZGFfcm9vdF9mYWlsKQorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICAjIENVREFUb29sa2l0X1JPT1QgY21ha2UgLyBlbnYgdmFyaWFibGUgbm90IHNwZWNpZmllZCwgdHJ5IHBsYXRmb3JtIGRlZmF1bHRzLgorICAjCisgICMgLSBMaW51eDogL3Vzci9sb2NhbC9jdWRhLVguWQorICAjIC0gbWFjT1M6IC9EZXZlbG9wZXIvTlZJRElBL0NVREEtWC5ZCisgICMgLSBXaW5kb3dzOiBDOlxQcm9ncmFtIEZpbGVzXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcQ1VEQVx2WC5ZCisgICMKKyAgIyBXZSB3aWxsIGFsc28gc2VhcmNoIHRoZSBkZWZhdWx0IHN5bWxpbmsgbG9jYXRpb24gL3Vzci9sb2NhbC9jdWRhIGZpcnN0IHNpbmNlCisgICMgaWYgQ1VEQVRvb2xraXRfUk9PVCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHN5bWxpbmtlZAorICAjIGRpcmVjdG9yeSBpcyB0aGUgZGVzaXJlZCBsb2NhdGlvbi4KKyAgaWYoTk9UIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSkKKyAgICBpZihVTklYKQorICAgICAgaWYoTk9UIEFQUExFKQorICAgICAgICBzZXQocGxhdGZvcm1fYmFzZSAiL3Vzci9sb2NhbC9jdWRhLSIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KHBsYXRmb3JtX2Jhc2UgIi9EZXZlbG9wZXIvTlZJRElBL0NVREEtIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIHNldChwbGF0Zm9ybV9iYXNlICJDOlxcUHJvZ3JhbSBGaWxlc1xcTlZJRElBIEdQVSBDb21wdXRpbmcgVG9vbGtpdFxcQ1VEQVxcdiIpCiAgICAgZW5kaWYoKQogCi0gICAgc2V0KENVREFUb29sa2l0X0ZPVU5EIEZBTFNFKQotICAgIHJldHVybigpCisgICAgIyBCdWlsZCBvdXQgYSBkZXNjZW5kaW5nIGxpc3Qgb2YgcG9zc2libGUgY3VkYSBpbnN0YWxsYXRpb25zLCBlLmcuCisgICAgZmlsZShHTE9CIHBvc3NpYmxlX3BhdGhzICIke3BsYXRmb3JtX2Jhc2V9KiIpCisgICAgIyBJdGVyYXRlIHRoZSBnbG9iIHJlc3VsdHMgYW5kIGNyZWF0ZSBhIGRlc2NlbmRpbmcgbGlzdC4KKyAgICBzZXQodmVyc2lvbnMpCisgICAgZm9yZWFjaChwICR7cG9zc2libGVfcGF0aHN9KQorICAgICAgIyBFeHRyYWN0IHZlcnNpb24gbnVtYmVyIGZyb20gZW5kIG9mIHN0cmluZworICAgICAgc3RyaW5nKFJFR0VYIE1BVENIICJbMC05XVswLTldP1xcLlswLTldJCIgcF92ZXJzaW9uICR7cH0pCisgICAgICBpZihJU19ESVJFQ1RPUlkgJHtwfSBBTkQgcF92ZXJzaW9uKQorICAgICAgICBsaXN0KEFQUEVORCB2ZXJzaW9ucyAke3BfdmVyc2lvbn0pCisgICAgICBlbmRpZigpCisgICAgZW5kZm9yZWFjaCgpCisKKyAgICAjIFNvcnQgbnVtZXJpY2FsbHkgaW4gZGVzY2VuZGluZyBvcmRlciwgc28gd2UgdHJ5IHRoZSBuZXdlc3QgdmVyc2lvbnMgZmlyc3QuCisgICAgbGlzdChTT1JUIHZlcnNpb25zIENPTVBBUkUgTkFUVVJBTCBPUkRFUiBERVNDRU5ESU5HKQorCisgICAgIyBXaXRoIGEgZGVzY2VuZGluZyBsaXN0IG9mIHZlcnNpb25zLCBwb3B1bGF0ZSBwb3NzaWJsZSBwYXRocyB0byBzZWFyY2guCisgICAgc2V0KHNlYXJjaF9wYXRocykKKyAgICBmb3JlYWNoKHYgJHt2ZXJzaW9uc30pCisgICAgICBsaXN0KEFQUEVORCBzZWFyY2hfcGF0aHMgIiR7cGxhdGZvcm1fYmFzZX0ke3Z9IikKKyAgICBlbmRmb3JlYWNoKCkKKworICAgICMgRm9yY2UgdGhlIGdsb2JhbCBkZWZhdWx0IC91c3IvbG9jYWwvY3VkYSB0byB0aGUgZnJvbnQgb24gVW5peC4KKyAgICBpZihVTklYKQorICAgICAgbGlzdChJTlNFUlQgc2VhcmNoX3BhdGhzIDAgIi91c3IvbG9jYWwvY3VkYSIpCisgICAgZW5kaWYoKQorCisgICAgIyBOb3cgc2VhcmNoIGZvciBudmNjIGFnYWluIHVzaW5nIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IHNlYXJjaCBwYXRocy4KKyAgICBmaW5kX3Byb2dyYW0oQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFCisgICAgICBOQU1FUyBudmNjIG52Y2MuZXhlCisgICAgICBQQVRIUyAke3NlYXJjaF9wYXRoc30KKyAgICAgIFBBVEhfU1VGRklYRVMgYmluCisgICAgKQorCisgICAgIyBXZSBhcmUgZG9uZSB3aXRoIHRoZXNlIHZhcmlhYmxlcyBub3csIGNsZWFudXAgZm9yIGNhbGxlci4KKyAgICB1bnNldChwbGF0Zm9ybV9iYXNlKQorICAgIHVuc2V0KHBvc3NpYmxlX3BhdGhzKQorICAgIHVuc2V0KHZlcnNpb25zKQorICAgIHVuc2V0KHNlYXJjaF9wYXRocykKKworICAgIGlmKE5PVCBDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUpCisgICAgICBpZihDVURBVG9vbGtpdF9GSU5EX1JFUVVJUkVEKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBudmNjLCBwbGVhc2Ugc2V0IENVREFUb29sa2l0X1JPT1QuIikKKyAgICAgIGVsc2VpZihOT1QgQ1VEQVRvb2xraXRfRklORF9RVUlFVExZKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiQ291bGQgbm90IGZpbmQgbnZjYywgcGxlYXNlIHNldCBDVURBVG9vbGtpdF9ST09ULiIpCisgICAgICBlbmRpZigpCisKKyAgICAgIHNldChDVURBVG9vbGtpdF9GT1VORCBGQUxTRSkKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgaWYoTk9UIENVREFUb29sa2l0X0JJTl9ESVIgQU5EIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSkKKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENVREFUb29sa2l0X0JJTl9ESVIgIiR7Q1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFfSIgRElSRUNUT1JZKQorICAgIHNldChDVURBVG9vbGtpdF9CSU5fRElSICIke0NVREFUb29sa2l0X0JJTl9ESVJ9IiBDQUNIRSBQQVRIICIiIEZPUkNFKQorICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1VEQVRvb2xraXRfQklOX0RJUikKKyAgZW5kaWYoKQorCisgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQVRvb2xraXRfUk9PVF9ESVIgJHtDVURBVG9vbGtpdF9CSU5fRElSfSBESVJFQ1RPUlkgQUJTT0xVVEUpCisKKyAgIyBDVURBVG9vbGtpdF9MSUJSQVJZX1JPT1QgY29udGFpbnMgdGhlIGRldmljZSBsaWJyYXJ5IGFuZCB2ZXJzaW9uIGZpbGUuCisgICMgSW4gYSBub24tc2NhdHRlcmVkIGluc3RhbGxhdGlvbiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gQ1VEQVRvb2xraXRfUk9PVF9ESVIuCisgICMgV2UgZmlyc3QgY2hlY2sgZm9yIGEgbm9uLXNjYXR0ZXJlZCBpbnN0YWxsYXRpb24gdG8gcHJlZmVyIGl0IG92ZXIgYSBzY2F0dGVyZWQgaW5zdGFsbGF0aW9uLgorICBpZihFWElTVFMgIiR7Q1VEQVRvb2xraXRfUk9PVF9ESVJ9L3ZlcnNpb24udHh0IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfTElCUkFSWV9ST09UICIke0NVREFUb29sa2l0X1JPT1RfRElSfSIpCisgIGVsc2VpZihDTUFLRV9TWVNST09UX0xJTksgQU5EIEVYSVNUUyAiJHtDTUFLRV9TWVNST09UX0xJTkt9L3Vzci9saWIvY3VkYS92ZXJzaW9uLnR4dCIpCisgICAgc2V0KENVREFUb29sa2l0X0xJQlJBUllfUk9PVCAiJHtDTUFLRV9TWVNST09UX0xJTkt9L3Vzci9saWIvY3VkYSIpCisgIGVsc2VpZihFWElTVFMgIiR7Q01BS0VfU1lTUk9PVH0vdXNyL2xpYi9jdWRhL3ZlcnNpb24udHh0IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfTElCUkFSWV9ST09UICIke0NNQUtFX1NZU1JPT1R9L3Vzci9saWIvY3VkYSIpCiAgIGVuZGlmKCkKIGVuZGlmKCkKIAotaWYoTk9UIENVREFUb29sa2l0X0JJTl9ESVIgQU5EIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSkKLSAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChjdWRhX2RpciAiJHtDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEV9IiBESVJFQ1RPUlkpCi0gIHNldChDVURBVG9vbGtpdF9CSU5fRElSICIke2N1ZGFfZGlyfSIgQ0FDSEUgUEFUSCAiIiBGT1JDRSkKLSAgbWFya19hc19hZHZhbmNlZChDVURBVG9vbGtpdF9CSU5fRElSKQotICB1bnNldChjdWRhX2RpcikKLWVuZGlmKCkKLQotaWYoQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFIEFORAotICAgQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFIFNUUkVRVUFMIENNQUtFX0NVREFfQ09NUElMRVIpCi0gICMgTmVlZCB0byBzZXQgdGhlc2UgYmFzZWQgb2ZmIHRoZSBhbHJlYWR5IGNvbXB1dGVkIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiB2YWx1ZQotICAjIFRoaXMgaWYgc3RhdGVtZW50IHdpbGwgYWx3YXlzIG1hdGNoLCBidXQgaXMgdXNlZCB0byBwcm92aWRlIHZhcmlhYmxlcyBmb3IgTUFUQ0ggMSwyLDMuLi4KLSAgaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIE1BVENIRVMgWz1bKFswLTldKylcLihbMC05XSspXC4oWzAtOV0rKV09XSkKLSAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiAiJHtDTUFLRV9NQVRDSF8xfSIpCi0gICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fTUlOT1IgIiR7Q01BS0VfTUFUQ0hfMn0iKQotICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX1BBVENIICIke0NNQUtFX01BVENIXzN9IikKLSAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTiAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT059IikKLSAgZW5kaWYoKQotZWxzZSgpCi0gICMgQ29tcHV0ZSB0aGUgdmVyc2lvbiBieSBpbnZva2luZyBudmNjCi0gIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0gIi0tdmVyc2lvbiIgT1VUUFVUX1ZBUklBQkxFIE5WQ0NfT1VUKQotICBpZihOVkNDX09VVCBNQVRDSEVTIFs9WyBWKFswLTldKylcLihbMC05XSspXC4oWzAtOV0rKV09XSkKLSAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiAiJHtDTUFLRV9NQVRDSF8xfSIpCi0gICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fTUlOT1IgIiR7Q01BS0VfTUFUQ0hfMn0iKQotICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX1BBVENIICIke0NNQUtFX01BVENIXzN9IikKLSAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTiAgIiR7Q01BS0VfTUFUQ0hfMX0uJHtDTUFLRV9NQVRDSF8yfS4ke0NNQUtFX01BVENIXzN9IikKLSAgZW5kaWYoKQotICB1bnNldChOVkNDX09VVCkKLWVuZGlmKCkKLQotCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KENVREFUb29sa2l0X1JPT1RfRElSICR7Q1VEQVRvb2xraXRfQklOX0RJUn0gRElSRUNUT1JZIEFCU09MVVRFKQotCiAjIEhhbmRsZSBjcm9zcyBjb21waWxhdGlvbgogaWYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCiAgIGlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgU1RSRVFVQUwgImFybXY3LWEiKQogICAgICMgU3VwcG9ydCBmb3IgTlZQQUNLCi0gICAgc2V0IChDVURBVG9vbGtpdF9UQVJHRVRfTkFNRSAiYXJtdjctbGludXgtYW5kcm9pZGVhYmkiKQorICAgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfTkFNRSAiYXJtdjctbGludXgtYW5kcm9pZGVhYmkiKQogICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVTICJhcm0iKQogICAgICMgU3VwcG9ydCBmb3IgYXJtIGNyb3NzIGNvbXBpbGF0aW9uCiAgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9OQU1FICJhcm12Ny1saW51eC1nbnVlYWJpaGYiKQogICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVTICJhYXJjaDY0IikKICAgICAjIFN1cHBvcnQgZm9yIGFhcmNoNjQgY3Jvc3MgY29tcGlsYXRpb24KLSAgICBpZiAoQU5EUk9JRF9BUkNIX05BTUUgU1RSRVFVQUwgImFybTY0IikKKyAgICBpZihBTkRST0lEX0FSQ0hfTkFNRSBTVFJFUVVBTCAiYXJtNjQiKQogICAgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9OQU1FICJhYXJjaDY0LWxpbnV4LWFuZHJvaWRlYWJpIikKICAgICBlbHNlKCkKICAgICAgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfTkFNRSAiYWFyY2g2NC1saW51eCIpCi0gICAgZW5kaWYgKEFORFJPSURfQVJDSF9OQU1FIFNUUkVRVUFMICJhcm02NCIpCisgICAgZW5kaWYoQU5EUk9JRF9BUkNIX05BTUUgU1RSRVFVQUwgImFybTY0IikKICAgZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgU1RSRVFVQUwgIng4Nl82NCIpCi0gICAgICBzZXQoQ1VEQVRvb2xraXRfVEFSR0VUX05BTUUgIng4Nl82NC1saW51eCIpCisgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9OQU1FICJ4ODZfNjQtbGludXgiKQogICBlbmRpZigpCiAKLSAgaWYgKEVYSVNUUyAiJHtDVURBVG9vbGtpdF9ST09UX0RJUn0vdGFyZ2V0cy8ke0NVREFUb29sa2l0X1RBUkdFVF9OQU1FfSIpCisgIGlmKEVYSVNUUyAiJHtDVURBVG9vbGtpdF9ST09UX0RJUn0vdGFyZ2V0cy8ke0NVREFUb29sa2l0X1RBUkdFVF9OQU1FfSIpCiAgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9ESVIgIiR7Q1VEQVRvb2xraXRfUk9PVF9ESVJ9L3RhcmdldHMvJHtDVURBVG9vbGtpdF9UQVJHRVRfTkFNRX0iKQogICAgICMgYWRkIGtub3duIENVREEgdGFyZ2V0IHJvb3QgcGF0aCB0byB0aGUgc2V0IG9mIGRpcmVjdG9yaWVzIHdlIHNlYXJjaCBmb3IgcHJvZ3JhbXMsIGxpYnJhcmllcyBhbmQgaGVhZGVycwogICAgIGxpc3QoUFJFUEVORCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAiJHtDVURBVG9vbGtpdF9UQVJHRVRfRElSfSIpCkBAIC03MDIsMjUgKzY3Nyw0NyBAQAogICBzZXQoX0NVREFUb29sa2l0X1BvcF9QcmVmaXggVHJ1ZSkKIGVuZGlmKCkKIAorIyBDVURBVG9vbGtpdF9UQVJHRVRfRElSIGFsd2F5cyBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbmNsdWRlIGRpcmVjdG9yeS4KKyMgT24gYSBzY2F0dGVyZWQgaW5zdGFsbGF0aW9uIC91c3IsIG9uIGEgbm9uLXNjYXR0ZXJlZCBzb21ldGhpbmcgbGlrZSAvdXNyL2xvY2FsL2N1ZGEgb3IgL3Vzci9sb2NhbC9jdWRhLTEwLjIvdGFyZ2V0cy9hYXJjaDY0LWxpbnV4LgoraWYoRVhJU1RTICIke0NVREFUb29sa2l0X1RBUkdFVF9ESVJ9L2luY2x1ZGUvY3VkYV9ydW50aW1lLmgiKQorICBzZXQoQ1VEQVRvb2xraXRfSU5DTFVERV9ESVIgIiR7Q1VEQVRvb2xraXRfVEFSR0VUX0RJUn0vaW5jbHVkZSIpCitlbHNlaWYoTk9UIENVREFUb29sa2l0X0ZJTkRfUVVJRVRMWSkKKyAgbWVzc2FnZShTVEFUVVMgIlVuYWJsZSB0byBmaW5kIGN1ZGFfcnVudGltZS5oIGluIFwiJHtDVURBVG9vbGtpdF9UQVJHRVRfRElSfS9pbmNsdWRlXCIgZm9yIENVREFUb29sa2l0X0lOQ0xVREVfRElSLiIpCitlbmRpZigpCiAKLSMgRmluZCB0aGUgaW5jbHVkZS8gZGlyZWN0b3J5Ci1maW5kX3BhdGgoQ1VEQVRvb2xraXRfSU5DTFVERV9ESVIKLSAgTkFNRVMgY3VkYV9ydW50aW1lLmgKLSkKK2lmKENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSBBTkQKKyAgIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSBTVFJFUVVBTCBDTUFLRV9DVURBX0NPTVBJTEVSKQorICAjIE5lZWQgdG8gc2V0IHRoZXNlIGJhc2VkIG9mZiB0aGUgYWxyZWFkeSBjb21wdXRlZCBDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gdmFsdWUKKyAgIyBUaGlzIGlmIHN0YXRlbWVudCB3aWxsIGFsd2F5cyBtYXRjaCwgYnV0IGlzIHVzZWQgdG8gcHJvdmlkZSB2YXJpYWJsZXMgZm9yIE1BVENIIDEsMiwzLi4uCisgIGlmKENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBNQVRDSEVTIFs9WyhbMC05XSspXC4oWzAtOV0rKVwuKFswLTldKyldPV0pCisgICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fTUFKT1IgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX01JTk9SICIke0NNQUtFX01BVENIXzJ9IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9QQVRDSCAiJHtDTUFLRV9NQVRDSF8zfSIpCisgICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT04gIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OfSIpCisgIGVuZGlmKCkKK2Vsc2UoKQorICAjIENvbXB1dGUgdGhlIHZlcnNpb24gYnkgaW52b2tpbmcgbnZjYworICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0gIi0tdmVyc2lvbiIgT1VUUFVUX1ZBUklBQkxFIE5WQ0NfT1VUKQorICBpZihOVkNDX09VVCBNQVRDSEVTIFs9WyBWKFswLTldKylcLihbMC05XSspXC4oWzAtOV0rKV09XSkKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fTUlOT1IgIiR7Q01BS0VfTUFUQ0hfMn0iKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX1BBVENIICIke0NNQUtFX01BVENIXzN9IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTiAgIiR7Q01BS0VfTUFUQ0hfMX0uJHtDTUFLRV9NQVRDSF8yfS4ke0NNQUtFX01BVENIXzN9IikKKyAgZW5kaWYoKQorICB1bnNldChOVkNDX09VVCkKK2VuZGlmKCkKIAotIyBBbmQgZmluZCB0aGUgQ1VEQSBSdW50aW1lIExpYnJhcnkgbGliY3VkYXJ0CisjIEZpbmQgdGhlIENVREEgUnVudGltZSBMaWJyYXJ5IGxpYmN1ZGFydAogZmluZF9saWJyYXJ5KENVREFfQ1VEQVJUCiAgIE5BTUVTIGN1ZGFydAogICBQQVRIX1NVRkZJWEVTIGxpYjY0IGxpYi94NjQKICkKLWlmIChOT1QgQ1VEQV9DVURBUlQpCi0gIGZpbmRfbGlicmFyeShDVURBX0NVREFSVAotICAgIE5BTUVTIGN1ZGFydAotICAgIFBBVEhfU1VGRklYRVMgbGliNjQvc3R1YnMgbGliL3g2NC9zdHVicwotICApCi1lbmRpZigpCitmaW5kX2xpYnJhcnkoQ1VEQV9DVURBUlQKKyAgTkFNRVMgY3VkYXJ0CisgIFBBVEhfU1VGRklYRVMgbGliNjQvc3R1YnMgbGliL3g2NC9zdHVicworKQogCi1pZiAoTk9UIENVREFfQ1VEQVJUIEFORCBOT1QgQ1VEQVRvb2xraXRfRklORF9RVUlFVExZKQoraWYoTk9UIENVREFfQ1VEQVJUIEFORCBOT1QgQ1VEQVRvb2xraXRfRklORF9RVUlFVExZKQogICBtZXNzYWdlKFNUQVRVUyAiVW5hYmxlIHRvIGZpbmQgY3VkYXJ0IGxpYnJhcnkuIikKIGVuZGlmKCkKIApAQCAtNzQ5LDggKzc0Niw4IEBACiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29uc3RydWN0IHJlc3VsdCB2YXJpYWJsZXMKIGlmKENVREFUb29sa2l0X0ZPVU5EKQotIHNldChDVURBVG9vbGtpdF9JTkNMVURFX0RJUlMgJHtDVURBVG9vbGtpdF9JTkNMVURFX0RJUn0pCi0gZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDVURBVG9vbGtpdF9MSUJSQVJZX0RJUiAke0NVREFfQ1VEQVJUfSBESVJFQ1RPUlkgQUJTT0xVVEUpCisgIHNldChDVURBVG9vbGtpdF9JTkNMVURFX0RJUlMgJHtDVURBVG9vbGtpdF9JTkNMVURFX0RJUn0pCisgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQVRvb2xraXRfTElCUkFSWV9ESVIgJHtDVURBX0NVREFSVH0gRElSRUNUT1JZIEFCU09MVVRFKQogZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc2OSwxNiArNzY2LDE0IEBACiAgICAgICBQQVRIX1NVRkZJWEVTIG52aWRpYS9jdXJyZW50IGxpYjY0IGxpYi94NjQgbGliCiAgICAgICAgICAgICAgICAgICAgICR7YXJnX0VYVFJBX1BBVEhfU1VGRklYRVN9CiAgICAgKQotICAgICMgRG9uJ3QgdHJ5IGFueSBzdHViIGRpcmVjdG9yaWVzIGludGlsIHdlIGhhdmUgZXhoYXVzdGVkIGFsbCBvdGhlcgorICAgICMgRG9uJ3QgdHJ5IGFueSBzdHViIGRpcmVjdG9yaWVzIHVudGlsIHdlIGhhdmUgZXhoYXVzdGVkIGFsbCBvdGhlcgogICAgICMgc2VhcmNoIGxvY2F0aW9ucy4KLSAgICBpZihOT1QgQ1VEQV8ke2xpYl9uYW1lfV9MSUJSQVJZKQotICAgICAgZmluZF9saWJyYXJ5KENVREFfJHtsaWJfbmFtZX1fTElCUkFSWQotICAgICAgICBOQU1FUyAke3NlYXJjaF9uYW1lc30KLSAgICAgICAgSElOVFMgJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0KLSAgICAgICAgICAgICAgRU5WIENVREFfUEFUSAotICAgICAgICBQQVRIX1NVRkZJWEVTIGxpYjY0L3N0dWJzIGxpYi94NjQvc3R1YnMgbGliL3N0dWJzIHN0dWJzCi0gICAgICApCi0gICAgZW5kaWYoKQorICAgIGZpbmRfbGlicmFyeShDVURBXyR7bGliX25hbWV9X0xJQlJBUlkKKyAgICAgIE5BTUVTICR7c2VhcmNoX25hbWVzfQorICAgICAgSElOVFMgJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0KKyAgICAgICAgICAgIEVOViBDVURBX1BBVEgKKyAgICAgIFBBVEhfU1VGRklYRVMgbGliNjQvc3R1YnMgbGliL3g2NC9zdHVicyBsaWIvc3R1YnMgc3R1YnMKKyAgICApCiAKICAgICBtYXJrX2FzX2FkdmFuY2VkKENVREFfJHtsaWJfbmFtZX1fTElCUkFSWSkKIApAQCAtODMyLDcgKzgyNyw3IEBACiAgIGVuZGlmKCkKIAogICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VsaWJvcykgIyBpdCdzIGEgc3RhdGljIGxpYnJhcnkKLSAgZm9yZWFjaCAoY3VkYV9saWIgY3VibGFzIGN1ZmZ0IGN1cmFuZCBjdXNwYXJzZSBucHBjIG52anBlZykKKyAgZm9yZWFjaCAoY3VkYV9saWIgY3VibGFzTHQgY3VibGFzIGN1ZmZ0IGN1cmFuZCBjdXNwYXJzZSBucHBjIG52anBlZykKICAgICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoJHtjdWRhX2xpYn0pCiAgICAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKCR7Y3VkYV9saWJ9X3N0YXRpYyBERVBTIGN1bGlib3MpCiAgIGVuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ1VSTC5jbWFrZSBiL01vZHVsZXMvRmluZENVUkwuY21ha2UKaW5kZXggOTE5YmFiYy4uM2FjYWRjMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQ1VSTC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRDVVJMLmNtYWtlCkBAIC05Miw2ICs5Miw3IEBACiAgICAgICBjdXJsbGliX3N0YXRpYwogICAgICMgV2luZG93cyBvbGRlciAiV2luMzIgLSBNU1ZDIiBwcmVidWlsdHMgKGxpYmN1cmwubGliLCBlLmcuIGxpYmN1cmwtNy4xNS41LXdpbjMyLW1zdmMuemlwKToKICAgICAgIGxpYmN1cmwKKyAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgIEhJTlRTICR7UENfQ1VSTF9MSUJSQVJZX0RJUlN9CiAgICkKICAgbWFya19hc19hZHZhbmNlZChDVVJMX0xJQlJBUllfUkVMRUFTRSkKQEAgLTEwMCw2ICsxMDEsNyBAQAogICAgICMgV2luZG93cyBNU1ZDIENNYWtlIGJ1aWxkcyBpbiBkZWJ1ZyBjb25maWd1cmF0aW9uIG9uIHZjcGtnOgogICAgICAgbGliY3VybC1kX2ltcAogICAgICAgbGliY3VybC1kCisgICAgICBOQU1FU19QRVJfRElSCiAgICAgICBISU5UUyAke1BDX0NVUkxfTElCUkFSWV9ESVJTfQogICApCiAgIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9MSUJSQVJZX0RFQlVHKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ3Vyc2VzLmNtYWtlIGIvTW9kdWxlcy9GaW5kQ3Vyc2VzLmNtYWtlCmluZGV4IGJhNTYwNzguLmNkZTNhNGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEN1cnNlcy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRDdXJzZXMuY21ha2UKQEAgLTE1Niw3ICsxNTYsOSBAQAogCiAgIENIRUNLX0xJQlJBUllfRVhJU1RTKCIke0NVUlNFU19OQ1VSU0VTX0xJQlJBUll9IgogICAgIGNicmVhayAiIiBDVVJTRVNfTkNVUlNFU19IQVNfQ0JSRUFLKQotICBpZihOT1QgQ1VSU0VTX05DVVJTRVNfSEFTX0NCUkVBSykKKyAgQ0hFQ0tfTElCUkFSWV9FWElTVFMoIiR7Q1VSU0VTX05DVVJTRVNfTElCUkFSWX0iCisgICAgbm9kZWxheSAiIiBDVVJTRVNfTkNVUlNFU19IQVNfTk9ERUxBWSkKKyAgaWYoTk9UIENVUlNFU19OQ1VSU0VTX0hBU19DQlJFQUsgT1IgTk9UIENVUlNFU19OQ1VSU0VTX0hBU19OT0RFTEFZKQogICAgIGZpbmRfbGlicmFyeShDVVJTRVNfRVhUUkFfTElCUkFSWSAiJHtDVVJTRVNfVElORk9fTElCUkFSWV9OQU1FfSIgSElOVFMgIiR7X2N1cnNlc0xpYkRpcn0iKQogICAgIGZpbmRfbGlicmFyeShDVVJTRVNfRVhUUkFfTElCUkFSWSAiJHtDVVJTRVNfVElORk9fTElCUkFSWV9OQU1FfSIgKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmREb3h5Z2VuLmNtYWtlIGIvTW9kdWxlcy9GaW5kRG94eWdlbi5jbWFrZQppbmRleCBmYWEwM2Y5Li4xODRhOWEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmREb3h5Z2VuLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZERveHlnZW4uY21ha2UKQEAgLTk5OSw5ICs5OTksMTEgQEAKICAgICBmb3JlYWNoKF9pdGVtIElOIExJU1RTIERPWFlHRU5fSU5QVVQpCiAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2Fic19pdGVtICIke19pdGVtfSIgQUJTT0xVVEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQVNFX0RJUiAiJHtfYXJnc19XT1JLSU5HX0RJUkVDVE9SWX0iKQotICAgICAgICBpZihFWElTVFMgIiR7X2Fic19pdGVtfSIgQU5ECi0gICAgICAgICAgIE5PVCBJU19ESVJFQ1RPUlkgIiR7X2Fic19pdGVtfSIgQU5ECi0gICAgICAgICAgIE5PVCBJU19TWU1MSU5LICIke19hYnNfaXRlbX0iKQorICAgICAgICBnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkoX2lzR2VuZXJhdGVkICIke19hYnNfaXRlbX0iIEdFTkVSQVRFRCkKKyAgICAgICAgaWYoX2lzR2VuZXJhdGVkIE9SCisgICAgICAgICAgIChFWElTVFMgIiR7X2Fic19pdGVtfSIgQU5ECisgICAgICAgICAgICBOT1QgSVNfRElSRUNUT1JZICIke19hYnNfaXRlbX0iIEFORAorICAgICAgICAgICAgTk9UIElTX1NZTUxJTksgIiR7X2Fic19pdGVtfSIpKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgX3NvdXJjZXMgIiR7X2Fic19pdGVtfSIpCiAgICAgICAgIGVsc2VpZihfYXJnc19VU0VfU1RBTVBfRklMRSkKICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlNvdXJjZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBmaWxlOlxuIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kRVhQQVQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRFWFBBVC5jbWFrZQppbmRleCAxNWI0MTlhLi5iMGJiMDJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRFWFBBVC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRFWFBBVC5jbWFrZQpAQCAtMzgsNyArMzgsNyBAQAogZmluZF9wYXRoKEVYUEFUX0lOQ0xVREVfRElSIE5BTUVTIGV4cGF0LmggSElOVFMgJHtQQ19FWFBBVF9JTkNMVURFX0RJUlN9KQogCiAjIExvb2sgZm9yIHRoZSBsaWJyYXJ5LgotZmluZF9saWJyYXJ5KEVYUEFUX0xJQlJBUlkgTkFNRVMgZXhwYXQgbGliZXhwYXQgSElOVFMgJHtQQ19FWFBBVF9MSUJSQVJZX0RJUlN9KQorZmluZF9saWJyYXJ5KEVYUEFUX0xJQlJBUlkgTkFNRVMgZXhwYXQgbGliZXhwYXQgTkFNRVNfUEVSX0RJUiBISU5UUyAke1BDX0VYUEFUX0xJQlJBUllfRElSU30pCiAKIGlmIChFWFBBVF9JTkNMVURFX0RJUiBBTkQgRVhJU1RTICIke0VYUEFUX0lOQ0xVREVfRElSfS9leHBhdC5oIikKICAgICBmaWxlKFNUUklOR1MgIiR7RVhQQVRfSU5DTFVERV9ESVJ9L2V4cGF0LmgiIGV4cGF0X3ZlcnNpb25fc3RyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRFbnZNb2R1bGVzLmNtYWtlIGIvTW9kdWxlcy9GaW5kRW52TW9kdWxlcy5jbWFrZQppbmRleCA0ZGQ1MTE2Li5hNGFjMGI0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRFbnZNb2R1bGVzLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEVudk1vZHVsZXMuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kRW52TW9kdWxlcwogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBMb2NhdGUgYW4gZW52aXJvbm1lbnQgbW9kdWxlIGltcGxlbWVudGF0aW9uIGFuZCBtYWtlIGNvbW1hbmRzIGF2YWlsYWJsZSB0bwogQ01ha2Ugc2NyaXB0cyB0byB1c2UgdGhlbS4gIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIGJvdGggTHVhLWJhc2VkIExtb2QKIGFuZCBUQ0wtYmFzZWQgRW52aXJvbm1lbnRNb2R1bGVzLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kRkxFWC5jbWFrZSBiL01vZHVsZXMvRmluZEZMRVguY21ha2UKaW5kZXggOTBlNWY4Ni4uMTM4NDczNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kRkxFWC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRGTEVYLmNtYWtlCkBAIC05OSw3ICs5OSw3IEBACiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi1maW5kX3Byb2dyYW0oRkxFWF9FWEVDVVRBQkxFIE5BTUVTIGZsZXggd2luX2ZsZXggRE9DICJwYXRoIHRvIHRoZSBmbGV4IGV4ZWN1dGFibGUiKQorZmluZF9wcm9ncmFtKEZMRVhfRVhFQ1VUQUJMRSBOQU1FUyBmbGV4IHdpbi1mbGV4IHdpbl9mbGV4IERPQyAicGF0aCB0byB0aGUgZmxleCBleGVjdXRhYmxlIikKIG1hcmtfYXNfYWR2YW5jZWQoRkxFWF9FWEVDVVRBQkxFKQogCiBmaW5kX2xpYnJhcnkoRkxfTElCUkFSWSBOQU1FUyBmbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kRm9udGNvbmZpZy5jbWFrZSBiL01vZHVsZXMvRmluZEZvbnRjb25maWcuY21ha2UKaW5kZXggYTZmMDE4MC4uNTIyODgzMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kRm9udGNvbmZpZy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRGb250Y29uZmlnLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZEZvbnRjb25maWcKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogRmluZCBGb250Y29uZmlnIGhlYWRlcnMgYW5kIGxpYnJhcnkuCiAKIEltcG9ydGVkIFRhcmdldHMKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEdJRi5jbWFrZSBiL01vZHVsZXMvRmluZEdJRi5jbWFrZQppbmRleCBkNWExNDNlLi5jZWE5Y2Q4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRHSUYuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kR0lGLmNtYWtlCkBAIC02MCw2ICs2MCw3IEBACiAKIGZpbmRfbGlicmFyeShHSUZfTElCUkFSWQogICBOQU1FUyAke1BPVEVOVElBTF9HSUZfTElCU30KKyAgTkFNRVNfUEVSX0RJUgogICBISU5UUwogICAgIEVOViBHSUZfRElSCiAgIFBBVEhfU1VGRklYRVMgbGliCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRHTEVXLmNtYWtlIGIvTW9kdWxlcy9GaW5kR0xFVy5jbWFrZQppbmRleCAyN2ZmYTEzLi4wODAzNzFhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRHTEVXLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEdMRVcuY21ha2UKQEAgLTEzOSwxMSArMTM5LDEzIEBACiAKIGZpbmRfbGlicmFyeShHTEVXX1NIQVJFRF9MSUJSQVJZX1JFTEVBU0UKICAgICAgICAgICAgICBOQU1FUyBHTEVXIGdsZXcgZ2xldzMyCisgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgbGliIGxpYjY0IGxpYngzMiBsaWIvUmVsZWFzZS8ke19hcmNofQogICAgICAgICAgICAgIFBBVEhTIEVOViBHTEVXX1JPT1QpCiAKIGZpbmRfbGlicmFyeShHTEVXX1NIQVJFRF9MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgTkFNRVMgR0xFV2QgZ2xld2QgZ2xldzMyZAorICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGxpYiBsaWI2NAogICAgICAgICAgICAgIFBBVEhTIEVOViBHTEVXX1JPT1QpCiAKQEAgLTE1MiwxMSArMTU0LDEzIEBACiAKIGZpbmRfbGlicmFyeShHTEVXX1NUQVRJQ19MSUJSQVJZX1JFTEVBU0UKICAgICAgICAgICAgICBOQU1FUyBHTEVXIGdsZXcgZ2xldzMycworICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGxpYiBsaWI2NCBsaWJ4MzIgbGliL1JlbGVhc2UvJHtfYXJjaH0KICAgICAgICAgICAgICBQQVRIUyBFTlYgR0xFV19ST09UKQogCiBmaW5kX2xpYnJhcnkoR0xFV19TVEFUSUNfTElCUkFSWV9ERUJVRwogICAgICAgICAgICAgIE5BTUVTIEdMRVdkcyBnbGV3ZHMgZ2xldzMyZHMKKyAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBsaWIgbGliNjQKICAgICAgICAgICAgICBQQVRIUyBFTlYgR0xFV19ST09UKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRHU0wuY21ha2UgYi9Nb2R1bGVzL0ZpbmRHU0wuY21ha2UKaW5kZXggZGExYjNjNC4uM2Q0ZTdmOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kR1NMLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEdTTC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRHU0wKIC0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBGaW5kIHRoZSBuYXRpdmUgR05VIFNjaWVudGlmaWMgTGlicmFyeSAoR1NMKSBpbmNsdWRlcyBhbmQgbGlicmFyaWVzLgogCiBUaGUgR05VIFNjaWVudGlmaWMgTGlicmFyeSAoR1NMKSBpcyBhIG51bWVyaWNhbCBsaWJyYXJ5IGZvciBDIGFuZCBDKysKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEdUZXN0LmNtYWtlIGIvTW9kdWxlcy9GaW5kR1Rlc3QuY21ha2UKaW5kZXggNTNjYWIxYS4uMTBlMzFiMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kR1Rlc3QuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kR1Rlc3QuY21ha2UKQEAgLTk2LDYgKzk2LDI3IEBACiAgICAgbWFya19hc19hZHZhbmNlZCgke19uYW1lfSkKIGVuZGZ1bmN0aW9uKCkKIAorZnVuY3Rpb24oX19ndGVzdF9maW5kX2xpYnJhcnlfY29uZmlndXJhdGlvbiBfbmFtZSBfbGliIF9jZmdfc3VmZml4KQorICAgIHNldChfbGlicyAke19saWJ9KQorICAgIGlmKE1TVkMgQU5EIEdURVNUX01TVkNfU0VBUkNIIFNUUkVRVUFMICJNRCIpCisgICAgICAgICMgVGhlIHByb3ZpZGVkIC9NRCBwcm9qZWN0IGZpbGVzIGZvciBHb29nbGUgVGVzdCBhZGQgLW1kIHN1ZmZpeGVzIHRvIHRoZQorICAgICAgICAjIGxpYnJhcnkgbmFtZXMuCisgICAgICAgIGxpc3QoSU5TRVJUIF9saWJzIDAgJHtfbGlifS1tZCkKKyAgICBlbmRpZigpCisgICAgbGlzdChUUkFOU0ZPUk0gX2xpYnMgQVBQRU5EICIke19jZmdfc3VmZml4fSIpCisKKyAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeSgke19uYW1lfSAke19saWJzfSkKK2VuZGZ1bmN0aW9uKCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1NlbGVjdExpYnJhcnlDb25maWd1cmF0aW9ucy5jbWFrZSkKK2Z1bmN0aW9uKF9fZ3Rlc3RfZmluZF9hbmRfc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMgX2Jhc2VuYW1lIF9saWIpCisgICAgX19ndGVzdF9maW5kX2xpYnJhcnlfY29uZmlndXJhdGlvbigke19iYXNlbmFtZX1fTElCUkFSWV9SRUxFQVNFICR7X2xpYn0gIiIpCisgICAgX19ndGVzdF9maW5kX2xpYnJhcnlfY29uZmlndXJhdGlvbigke19iYXNlbmFtZX1fTElCUkFSWV9ERUJVRyAgICR7X2xpYn0gImQiKQorCisgICAgc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoJHtfYmFzZW5hbWV9KQorICAgIHNldCgke19iYXNlbmFtZX1fTElCUkFSWSAkeyR7X2Jhc2VuYW1lfV9MSUJSQVJZfSBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKIG1hY3JvKF9fZ3Rlc3RfZGV0ZXJtaW5lX3dpbmRvd3NfbGlicmFyeV90eXBlIF92YXIpCiAgICAgaWYoRVhJU1RTICIkeyR7X3Zhcn19IikKICAgICAgICAgZmlsZShUT19OQVRJVkVfUEFUSCAiJHske192YXJ9fSIgX2xpYl9wYXRoKQpAQCAtMTg3LDE4ICsyMDgsMTMgQEAKICkKIG1hcmtfYXNfYWR2YW5jZWQoR1RFU1RfSU5DTFVERV9ESVIpCiAKLWlmKE1TVkMgQU5EIEdURVNUX01TVkNfU0VBUkNIIFNUUkVRVUFMICJNRCIpCi0gICAgIyBUaGUgcHJvdmlkZWQgL01EIHByb2plY3QgZmlsZXMgZm9yIEdvb2dsZSBUZXN0IGFkZCAtbWQgc3VmZml4ZXMgdG8gdGhlCi0gICAgIyBsaWJyYXJ5IG5hbWVzLgotICAgIF9fZ3Rlc3RfZmluZF9saWJyYXJ5KEdURVNUX0xJQlJBUlkgICAgICAgICAgICBndGVzdC1tZCAgZ3Rlc3QpCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTElCUkFSWV9ERUJVRyAgICAgIGd0ZXN0LW1kZCBndGVzdGQpCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTUFJTl9MSUJSQVJZICAgICAgIGd0ZXN0X21haW4tbWQgIGd0ZXN0X21haW4pCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTUFJTl9MSUJSQVJZX0RFQlVHIGd0ZXN0X21haW4tbWRkIGd0ZXN0X21haW5kKQotZWxzZSgpCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTElCUkFSWSAgICAgICAgICAgIGd0ZXN0KQotICAgIF9fZ3Rlc3RfZmluZF9saWJyYXJ5KEdURVNUX0xJQlJBUllfREVCVUcgICAgICBndGVzdGQpCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTUFJTl9MSUJSQVJZICAgICAgIGd0ZXN0X21haW4pCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTUFJTl9MSUJSQVJZX0RFQlVHIGd0ZXN0X21haW5kKQorIyBBbGxvdyBHVEVTVF9MSUJSQVJZIGFuZCBHVEVTVF9NQUlOX0xJQlJBUlkgdG8gYmUgc2V0IG1hbnVhbGx5LCBhcyB0aGUKKyMgbG9jYXRpb25zIG9mIHRoZSBndGVzdCBhbmQgZ3Rlc3RfbWFpbiBsaWJyYXJpZXMsIHJlc3BlY3RpdmVseS4KK2lmKE5PVCBHVEVTVF9MSUJSQVJZKQorICAgIF9fZ3Rlc3RfZmluZF9hbmRfc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoR1RFU1QgZ3Rlc3QpCitlbmRpZigpCitpZihOT1QgR1RFU1RfTUFJTl9MSUJSQVJZKQorICAgIF9fZ3Rlc3RfZmluZF9hbmRfc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoR1RFU1RfTUFJTiBndGVzdF9tYWluKQogZW5kaWYoKQogCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRIREY1LmNtYWtlIGIvTW9kdWxlcy9GaW5kSERGNS5jbWFrZQppbmRleCBiNDg4NDE4Li43YTFjMjUyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRIREY1LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEhERjUuY21ha2UKQEAgLTE5LDkgKzE5LDEyIEBACiBgYENPTVBPTkVOVFNgYCBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBmaW5kIG1vZHVsZSB3aWxsIGRlZmF1bHQgdG8gZmluZGluZwogb25seSB0aGUgYGBIREY1YGAgQyBsaWJyYXJ5LiAgSWYgb25lIG9yIG1vcmUgYGBDT01QT05FTlRTYGAgYXJlIHNwZWNpZmllZCwgdGhlCiBtb2R1bGUgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIGxhbmd1YWdlIGJpbmRpbmdzIGZvciB0aGUgc3BlY2lmaWVkCi1jb21wb25lbnRzLiAgVGhlIG9ubHkgdmFsaWQgY29tcG9uZW50cyBhcmUgYGBDYGAsIGBgQ1hYYGAsIGBgRm9ydHJhbmBgLCBgYEhMYGAsCi1hbmQgYGBGb3J0cmFuX0hMYGAuICBJZiB0aGUgYGBDT01QT05FTlRTYGAgYXJndW1lbnQgaXMgbm90IGdpdmVuLCB0aGUgbW9kdWxlIHdpbGwKK2NvbXBvbmVudHMuICBUaGUgdmFsaWQgY29tcG9uZW50cyBhcmUgYGBDYGAsIGBgQ1hYYGAsIGBgRm9ydHJhbmBgLCBgYEhMYGAuCitgYEhMYGAgcmVmZXJzIHRvIHRoZSAiaGlnaC1sZXZlbCIgSERGNSBmdW5jdGlvbnMgZm9yIEMgYW5kIEZvcnRyYW4uCitJZiB0aGUgYGBDT01QT05FTlRTYGAgYXJndW1lbnQgaXMgbm90IGdpdmVuLCB0aGUgbW9kdWxlIHdpbGwKIGF0dGVtcHQgdG8gZmluZCBvbmx5IHRoZSBDIGJpbmRpbmdzLgorRm9yIGV4YW1wbGUsIHRvIHVzZSBGb3J0cmFuIEhERjUgYW5kIEhERjUtSEwgZnVuY3Rpb25zLCBkbzoKK2BgZmluZF9wYWNrYWdlKEhERjUgQ09NUE9ORU5UUyBGb3J0cmFuIEhMKWBgLgogCiBUaGlzIG1vZHVsZSB3aWxsIHJlYWQgdGhlIHZhcmlhYmxlCiBgYEhERjVfVVNFX1NUQVRJQ19MSUJSQVJJRVNgYCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gcHJlZmVyIGEKQEAgLTI5LDE2ICszMiwxMSBAQAogVG8gdXNlIHRoaXMgZmVhdHVyZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGBgSERGNV9VU0VfU1RBVElDX0xJQlJBUklFU2BgCiB2YXJpYWJsZSBpcyBzZXQgYmVmb3JlIHRoZSBjYWxsIHRvIGZpbmRfcGFja2FnZS4KIAotVG8gcHJvdmlkZSB0aGUgbW9kdWxlIHdpdGggYSBoaW50IGFib3V0IHdoZXJlIHRvIGZpbmQgeW91ciBgYEhERjVgYAotaW5zdGFsbGF0aW9uLCB5b3UgY2FuIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBIREY1X1JPT1RgYC4gIFRoZQotRmluZCBtb2R1bGUgd2lsbCB0aGVuIGxvb2sgaW4gdGhpcyBwYXRoIHdoZW4gc2VhcmNoaW5nIGZvciBgYEhERjVgYAotZXhlY3V0YWJsZXMsIHBhdGhzLCBhbmQgbGlicmFyaWVzLgotCiBCb3RoIHRoZSBzZXJpYWwgYW5kIHBhcmFsbGVsIGBgSERGNWBgIHdyYXBwZXJzIGFyZSBjb25zaWRlcmVkIGFuZCB0aGUgZmlyc3QKIGRpcmVjdG9yeSB0byBjb250YWluIGVpdGhlciBvbmUgd2lsbCBiZSB1c2VkLiAgSW4gdGhlIGV2ZW50IHRoYXQgYm90aCBhcHBlYXIKIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0aGUgc2VyaWFsIHZlcnNpb24gaXMgcHJlZmVyZW50aWFsbHkgc2VsZWN0ZWQuIFRoaXMKIGJlaGF2aW9yIGNhbiBiZSByZXZlcnNlZCBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZSBgYEhERjVfUFJFRkVSX1BBUkFMTEVMYGAgdG8KLWBgVHJ1ZWBgLgorYGBUUlVFYGAuCiAKIEluIGFkZGl0aW9uIHRvIGZpbmRpbmcgdGhlIGluY2x1ZGVzIGFuZCBsaWJyYXJpZXMgcmVxdWlyZWQgdG8gY29tcGlsZQogYW4gYGBIREY1YGAgY2xpZW50IGFwcGxpY2F0aW9uLCB0aGlzIG1vZHVsZSBhbHNvIG1ha2VzIGFuIGVmZm9ydCB0byBmaW5kCkBAIC0xMTUsMTAgKzExMywxMCBAQAogSGludHMKIF5eXl5eCiAKLVRoZSBmb2xsb3dpbmcgdmFyaWFibGUgY2FuIGJlIHNldCB0byBndWlkZSB0aGUgc2VhcmNoIGZvciBIREY1IGxpYnJhcmllcyBhbmQgaW5jbHVkZXM6CitUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBjYW4gYmUgc2V0IHRvIGd1aWRlIHRoZSBzZWFyY2ggZm9yIEhERjUgbGlicmFyaWVzIGFuZCBpbmNsdWRlczoKIAotYGBIREY1X1JPT1RgYAotICBTcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBIREY1IGluc3RhbGxhdGlvbiB0byB1c2UuCitgYEhERjVfUFJFRkVSX1BBUkFMTEVMYGAKKyAgc2V0IGBgdHJ1ZWBgIHRvIHByZWZlciBwYXJhbGxlbCBIREY1IChieSBkZWZhdWx0LCBzZXJpYWwgaXMgcHJlZmVycmVkKQogCiBgYEhERjVfRklORF9ERUJVR2BgCiAgIFNldCBgYHRydWVgYCB0byBnZXQgZXh0cmEgZGVidWdnaW5nIG91dHB1dC4KQEAgLTEyNyw4ICsxMjUsNiBAQAogICBTZXQgYGB0cnVlYGAgdG8gc2tpcCB0cnlpbmcgdG8gZmluZCBgYGhkZjUtY29uZmlnLmNtYWtlYGAuCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi0jIFRoaXMgbW9kdWxlIGlzIG1haW50YWluZWQgYnkgV2lsbCBEaWNoYXJyeSA8d2RpY2hhcnJ5QHN0ZWxsYXJzY2llbmNlLmNvbT4uCi0KIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9TZWxlY3RMaWJyYXJ5Q29uZmlndXJhdGlvbnMuY21ha2UpCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCiAKQEAgLTE0MSwyOCArMTM3LDMwIEBACiBlbHNlKCkKICAgc2V0KEhERjVfTEFOR1VBR0VfQklORElOR1MpCiAgICMgYWRkIHRoZSBleHRyYSBzcGVjaWZpZWQgY29tcG9uZW50cywgZW5zdXJpbmcgdGhhdCB0aGV5IGFyZSB2YWxpZC4KLSAgc2V0KEZJTkRfSEwgT0ZGKQotICBmb3JlYWNoKGNvbXBvbmVudCBJTiBMSVNUUyBIREY1X0ZJTkRfQ09NUE9ORU5UUykKLSAgICBsaXN0KEZJTkQgSERGNV9WQUxJRF9MQU5HVUFHRV9CSU5ESU5HUyAke2NvbXBvbmVudH0gY29tcG9uZW50X2xvY2F0aW9uKQotICAgIGlmKE5PVCBjb21wb25lbnRfbG9jYXRpb24gRVFVQUwgLTEpCi0gICAgICBsaXN0KEFQUEVORCBIREY1X0xBTkdVQUdFX0JJTkRJTkdTICR7Y29tcG9uZW50fSkKLSAgICBlbHNlaWYoY29tcG9uZW50IFNUUkVRVUFMICJITCIpCi0gICAgICBzZXQoRklORF9ITCBPTikKLSAgICBlbHNlaWYoY29tcG9uZW50IFNUUkVRVUFMICJGb3J0cmFuX0hMIikgIyBvbmx5IGZvciBjb21wYXRpYmlsaXR5CisgIHNldChIREY1X0ZJTkRfSEwgT0ZGKQorICBmb3JlYWNoKF9jb21wb25lbnQgSU4gTElTVFMgSERGNV9GSU5EX0NPTVBPTkVOVFMpCisgICAgbGlzdChGSU5EIEhERjVfVkFMSURfTEFOR1VBR0VfQklORElOR1MgJHtfY29tcG9uZW50fSBfY29tcG9uZW50X2xvY2F0aW9uKQorICAgIGlmKE5PVCBfY29tcG9uZW50X2xvY2F0aW9uIEVRVUFMIC0xKQorICAgICAgbGlzdChBUFBFTkQgSERGNV9MQU5HVUFHRV9CSU5ESU5HUyAke19jb21wb25lbnR9KQorICAgIGVsc2VpZihfY29tcG9uZW50IFNUUkVRVUFMICJITCIpCisgICAgICBzZXQoSERGNV9GSU5EX0hMIE9OKQorICAgIGVsc2VpZihfY29tcG9uZW50IFNUUkVRVUFMICJGb3J0cmFuX0hMIikgIyBvbmx5IGZvciBjb21wYXRpYmlsaXR5CiAgICAgICBsaXN0KEFQUEVORCBIREY1X0xBTkdVQUdFX0JJTkRJTkdTIEZvcnRyYW4pCi0gICAgICBzZXQoRklORF9ITCBPTikKLSAgICAgIHNldChIREY1X0ZJTkRfUkVRVUlSRURfRm9ydHJhbl9ITCBGYWxzZSkKLSAgICAgIHNldChIREY1X0ZJTkRfUkVRVUlSRURfRm9ydHJhbiBUcnVlKQotICAgICAgc2V0KEhERjVfRklORF9SRVFVSVJFRF9ITCBUcnVlKQorICAgICAgc2V0KEhERjVfRklORF9ITCBPTikKKyAgICAgIHNldChIREY1X0ZJTkRfUkVRVUlSRURfRm9ydHJhbl9ITCBGQUxTRSkKKyAgICAgIHNldChIREY1X0ZJTkRfUkVRVUlSRURfRm9ydHJhbiBUUlVFKQorICAgICAgc2V0KEhERjVfRklORF9SRVFVSVJFRF9ITCBUUlVFKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiJHtjb21wb25lbnR9IGlzIG5vdCBhIHZhbGlkIEhERjUgY29tcG9uZW50LiIpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIke19jb21wb25lbnR9IGlzIG5vdCBhIHZhbGlkIEhERjUgY29tcG9uZW50LiIpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKKyAgdW5zZXQoX2NvbXBvbmVudCkKKyAgdW5zZXQoX2NvbXBvbmVudF9sb2NhdGlvbikKICAgaWYoTk9UIEhERjVfTEFOR1VBR0VfQklORElOR1MpCi0gICAgZ2V0X3Byb3BlcnR5KF9fbGFuZ3MgR0xPQkFMIFBST1BFUlRZIEVOQUJMRURfTEFOR1VBR0VTKQotICAgIGZvcmVhY2goX19sYW5nIElOIExJU1RTIF9fbGFuZ3MpCi0gICAgICBpZihfX2xhbmcgTUFUQ0hFUyAiXihDfENYWHxGb3J0cmFuKSQiKQotICAgICAgICBsaXN0KEFQUEVORCBIREY1X0xBTkdVQUdFX0JJTkRJTkdTICR7X19sYW5nfSkKKyAgICBnZXRfcHJvcGVydHkoX2xhbmdzIEdMT0JBTCBQUk9QRVJUWSBFTkFCTEVEX0xBTkdVQUdFUykKKyAgICBmb3JlYWNoKF9sYW5nIElOIExJU1RTIF9sYW5ncykKKyAgICAgIGlmKF9sYW5nIE1BVENIRVMgIl4oQ3xDWFh8Rm9ydHJhbikkIikKKyAgICAgICAgbGlzdChBUFBFTkQgSERGNV9MQU5HVUFHRV9CSU5ESU5HUyAke19sYW5nfSkKICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKICAgZW5kaWYoKQpAQCAtMzI4LDk3ICszMjYsMTExIEBACiAKICMgSW52b2tlIHRoZSBIREY1IHdyYXBwZXIgY29tcGlsZXIuICBUaGUgY29tcGlsZXIgcmV0dXJuIHZhbHVlIGlzIHN0b3JlZCB0byB0aGUKICMgcmV0dXJuX3ZhbHVlIGFyZ3VtZW50LCB0aGUgdGV4dCBvdXRwdXQgaXMgc3RvcmVkIHRvIHRoZSBvdXRwdXQgdmFyaWFibGUuCi1tYWNybyggX0hERjVfaW52b2tlX2NvbXBpbGVyIGxhbmd1YWdlIG91dHB1dCByZXR1cm5fdmFsdWUgdmVyc2lvbiBpc19wYXJhbGxlbCkKLSAgICBzZXQoJHt2ZXJzaW9ufSkKLSAgICBpZihIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTKQotICAgICAgICBzZXQobGliX3R5cGVfYXJncyAtbm9zaGxpYikKLSAgICBlbHNlKCkKLSAgICAgICAgc2V0KGxpYl90eXBlX2FyZ3MgLXNobGliKQotICAgIGVuZGlmKCkKLSAgICBzZXQoc2NyYXRjaF9kaXIgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L2hkZjUpCi0gICAgaWYoIiR7bGFuZ3VhZ2V9IiBTVFJFUVVBTCAiQyIpCi0gICAgICAgIHNldCh0ZXN0X2ZpbGUgJHtzY3JhdGNoX2Rpcn0vY21ha2VfaGRmNV90ZXN0LmMpCi0gICAgZWxzZWlmKCIke2xhbmd1YWdlfSIgU1RSRVFVQUwgIkNYWCIpCi0gICAgICAgIHNldCh0ZXN0X2ZpbGUgJHtzY3JhdGNoX2Rpcn0vY21ha2VfaGRmNV90ZXN0LmN4eCkKLSAgICBlbHNlaWYoIiR7bGFuZ3VhZ2V9IiBTVFJFUVVBTCAiRm9ydHJhbiIpCi0gICAgICAgIHNldCh0ZXN0X2ZpbGUgJHtzY3JhdGNoX2Rpcn0vY21ha2VfaGRmNV90ZXN0LmY5MCkKLSAgICBlbmRpZigpCitmdW5jdGlvbiggX0hERjVfaW52b2tlX2NvbXBpbGVyIGxhbmd1YWdlIG91dHB1dF92YXIgcmV0dXJuX3ZhbHVlX3ZhciB2ZXJzaW9uX3ZhciBpc19wYXJhbGxlbF92YXIpCisgIHNldChpc19wYXJhbGxlbCBGQUxTRSkKKyAgaWYoSERGNV9VU0VfU1RBVElDX0xJQlJBUklFUykKKyAgICBzZXQobGliX3R5cGVfYXJncyAtbm9zaGxpYikKKyAgZWxzZSgpCisgICAgc2V0KGxpYl90eXBlX2FyZ3MgLXNobGliKQorICBlbmRpZigpCisgIHNldChzY3JhdGNoX2RpciAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vaGRmNSkKKyAgaWYoIiR7bGFuZ3VhZ2V9IiBTVFJFUVVBTCAiQyIpCisgICAgc2V0KHRlc3RfZmlsZSAke3NjcmF0Y2hfZGlyfS9jbWFrZV9oZGY1X3Rlc3QuYykKKyAgZWxzZWlmKCIke2xhbmd1YWdlfSIgU1RSRVFVQUwgIkNYWCIpCisgICAgc2V0KHRlc3RfZmlsZSAke3NjcmF0Y2hfZGlyfS9jbWFrZV9oZGY1X3Rlc3QuY3h4KQorICBlbHNlaWYoIiR7bGFuZ3VhZ2V9IiBTVFJFUVVBTCAiRm9ydHJhbiIpCisgICAgc2V0KHRlc3RfZmlsZSAke3NjcmF0Y2hfZGlyfS9jbWFrZV9oZGY1X3Rlc3QuZjkwKQorICBlbmRpZigpCisgICMgVmVyaWZ5IHRoYXQgdGhlIGNvbXBpbGVyIHdyYXBwZXIgY2FuIGFjdHVhbGx5IGNvbXBpbGU6IHNvbWV0aW1lcyB0aGUgY29tcGlsZXIKKyAgIyB3cmFwcGVyIGV4aXN0cywgYnV0IG5vdCB0aGUgY29tcGlsZXIuICBFLmcuIE1pbmljb25kYSAvIEFuYWNvbmRhIFB5dGhvbgorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCAke0hERjVfJHtsYW5ndWFnZX1fQ09NUElMRVJfRVhFQ1VUQUJMRX0gJHt0ZXN0X2ZpbGV9CisgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtzY3JhdGNoX2Rpcn0KKyAgICBSRVNVTFRfVkFSSUFCTEUgcmV0dXJuX3ZhbHVlCisgICAgKQorICBpZihyZXR1cm5fdmFsdWUpCisgICAgbWVzc2FnZShTVEFUVVMKKyAgICAgICJIREY1ICR7bGFuZ3VhZ2V9IGNvbXBpbGVyIHdyYXBwZXIgaXMgdW5hYmxlIHRvIGNvbXBpbGUgYSBtaW5pbWFsIEhERjUgcHJvZ3JhbS4iKQorICBlbHNlKCkKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICBDT01NQU5EICR7SERGNV8ke2xhbmd1YWdlfV9DT01QSUxFUl9FWEVDVVRBQkxFfSAtc2hvdyAke2xpYl90eXBlX2FyZ3N9ICR7dGVzdF9maWxlfQotICAgICAgT1VUUFVUX1ZBUklBQkxFICR7b3V0cHV0fQotICAgICAgRVJST1JfVkFSSUFCTEUgJHtvdXRwdXR9Ci0gICAgICBSRVNVTFRfVkFSSUFCTEUgJHtyZXR1cm5fdmFsdWV9CisgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke3NjcmF0Y2hfZGlyfQorICAgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAorICAgICAgRVJST1JfVkFSSUFCTEUgb3V0cHV0CisgICAgICBSRVNVTFRfVkFSSUFCTEUgcmV0dXJuX3ZhbHVlCisgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQogICAgICAgKQotICAgIGlmKE5PVCAkeyR7cmV0dXJuX3ZhbHVlfX0gRVFVQUwgMCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMKLSAgICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBIREY1ICR7bGFuZ3VhZ2V9IGZsYWdzIGZyb20gSERGNSB3cmFwcGVyLiIpCisgICAgaWYocmV0dXJuX3ZhbHVlKQorICAgICAgbWVzc2FnZShTVEFUVVMKKyAgICAgICAgIlVuYWJsZSB0byBkZXRlcm1pbmUgSERGNSAke2xhbmd1YWdlfSBmbGFncyBmcm9tIEhERjUgd3JhcHBlci4iKQogICAgIGVuZGlmKCkKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICBDT01NQU5EICR7SERGNV8ke2xhbmd1YWdlfV9DT01QSUxFUl9FWEVDVVRBQkxFfSAtc2hvd2NvbmZpZwogICAgICAgT1VUUFVUX1ZBUklBQkxFIGNvbmZpZ19vdXRwdXQKICAgICAgIEVSUk9SX1ZBUklBQkxFIGNvbmZpZ19vdXRwdXQKLSAgICAgIFJFU1VMVF9WQVJJQUJMRSBjb25maWdfcmV0dXJuCisgICAgICBSRVNVTFRfVkFSSUFCTEUgcmV0dXJuX3ZhbHVlCisgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQogICAgICAgKQotICAgIGlmKE5PVCAke3JldHVybl92YWx1ZX0gRVFVQUwgMCkKLSAgICAgICAgbWVzc2FnZSggU1RBVFVTCi0gICAgICAgICAgIlVuYWJsZSB0byBkZXRlcm1pbmUgSERGNSAke2xhbmd1YWdlfSB2ZXJzaW9uIGZyb20gSERGNSB3cmFwcGVyLiIpCisgICAgaWYocmV0dXJuX3ZhbHVlKQorICAgICAgbWVzc2FnZShTVEFUVVMKKyAgICAgICAgIlVuYWJsZSB0byBkZXRlcm1pbmUgSERGNSAke2xhbmd1YWdlfSB2ZXJzaW9uX3ZhciBmcm9tIEhERjUgd3JhcHBlci4iKQogICAgIGVuZGlmKCkKLSAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIkhERjUgVmVyc2lvbjogKFthLXpBLVowLTlcXC5cXC1dKikiIHZlcnNpb25fbWF0Y2ggIiR7Y29uZmlnX291dHB1dH0iKQotICAgIGlmKHZlcnNpb25fbWF0Y2gpCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICJIREY1IFZlcnNpb246ICIgIiIgJHt2ZXJzaW9ufSAiJHt2ZXJzaW9uX21hdGNofSIpCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICItcGF0Y2giICIuIiAke3ZlcnNpb259ICIkeyR7dmVyc2lvbn19IikKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIkhERjUgVmVyc2lvbjogKFthLXpBLVowLTlcXC5cXC1dKikiIHZlcnNpb24gIiR7Y29uZmlnX291dHB1dH0iKQorICAgIGlmKHZlcnNpb24pCisgICAgICBzdHJpbmcoUkVQTEFDRSAiSERGNSBWZXJzaW9uOiAiICIiIHZlcnNpb24gIiR7dmVyc2lvbn0iKQorICAgICAgc3RyaW5nKFJFUExBQ0UgIi1wYXRjaCIgIi4iIHZlcnNpb24gIiR7dmVyc2lvbn0iKQogICAgIGVuZGlmKCkKICAgICBpZihjb25maWdfb3V0cHV0IE1BVENIRVMgIlBhcmFsbGVsIEhERjU6IHllcyIpCi0gICAgICBzZXQoJHtpc19wYXJhbGxlbH0gVFJVRSkKLSAgICBlbHNlKCkKLSAgICAgIHNldCgke2lzX3BhcmFsbGVsfSBGQUxTRSkKKyAgICAgIHNldChpc19wYXJhbGxlbCBUUlVFKQogICAgIGVuZGlmKCkKLWVuZG1hY3JvKCkKKyAgZW5kaWYoKQorICBmb3JlYWNoKHZhciBvdXRwdXQgcmV0dXJuX3ZhbHVlIHZlcnNpb24gaXNfcGFyYWxsZWwpCisgICAgc2V0KCR7JHt2YXJ9X3Zhcn0gJHske3Zhcn19IFBBUkVOVF9TQ09QRSkKKyAgZW5kZm9yZWFjaCgpCitlbmRmdW5jdGlvbigpCiAKICMgUGFyc2UgYSBjb21waWxlIGxpbmUgZm9yIGRlZmluaXRpb25zLCBpbmNsdWRlcywgbGlicmFyeSBwYXRocywgYW5kIGxpYnJhcmllcy4KLW1hY3JvKCBfSERGNV9wYXJzZV9jb21waWxlX2xpbmUKLSAgICBjb21waWxlX2xpbmVfdmFyCi0gICAgaW5jbHVkZV9wYXRocwotICAgIGRlZmluaXRpb25zCi0gICAgbGlicmFyeV9wYXRocwotICAgIGxpYnJhcmllcwotICAgIGxpYnJhcmllc19obCkKK2Z1bmN0aW9uKF9IREY1X3BhcnNlX2NvbXBpbGVfbGluZSBjb21waWxlX2xpbmVfdmFyIGluY2x1ZGVfcGF0aHMgZGVmaW5pdGlvbnMKKyAgICBsaWJyYXJ5X3BhdGhzIGxpYnJhcmllcyBsaWJyYXJpZXNfaGwpCiAKLSAgc2VwYXJhdGVfYXJndW1lbnRzKF9IREY1X0NPTVBJTEVfQVJHUyBOQVRJVkVfQ09NTUFORCAiJHske2NvbXBpbGVfbGluZV92YXJ9fSIpCisgIHNlcGFyYXRlX2FyZ3VtZW50cyhfY29tcGlsZV9hcmdzIE5BVElWRV9DT01NQU5EICIkeyR7Y29tcGlsZV9saW5lX3Zhcn19IikKIAotICBmb3JlYWNoKGFyZyBJTiBMSVNUUyBfSERGNV9DT01QSUxFX0FSR1MpCi0gICAgaWYoIiR7YXJnfSIgTUFUQ0hFUyAiXi1JKC4qKSQiKQorICBmb3JlYWNoKF9hcmcgSU4gTElTVFMgX2NvbXBpbGVfYXJncykKKyAgICBpZigiJHtfYXJnfSIgTUFUQ0hFUyAiXi1JKC4qKSQiKQogICAgICAgIyBpbmNsdWRlIGRpcmVjdG9yeQotICAgICAgbGlzdChBUFBFTkQgJHtpbmNsdWRlX3BhdGhzfSAiJHtDTUFLRV9NQVRDSF8xfSIpCi0gICAgZWxzZWlmKCIke2FyZ30iIE1BVENIRVMgIl4tRCguKikkIikKKyAgICAgIGxpc3QoQVBQRU5EIGluY2x1ZGVfcGF0aHMgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICAgIGVsc2VpZigiJHtfYXJnfSIgTUFUQ0hFUyAiXi1EKC4qKSQiKQogICAgICAgIyBjb21waWxlIGRlZmluaXRpb24KLSAgICAgIGxpc3QoQVBQRU5EICR7ZGVmaW5pdGlvbnN9ICItRCR7Q01BS0VfTUFUQ0hfMX0iKQotICAgIGVsc2VpZigiJHthcmd9IiBNQVRDSEVTICJeLUwoLiopJCIpCisgICAgICBsaXN0KEFQUEVORCBkZWZpbml0aW9ucyAiLUQke0NNQUtFX01BVENIXzF9IikKKyAgICBlbHNlaWYoIiR7X2FyZ30iIE1BVENIRVMgIl4tTCguKikkIikKICAgICAgICMgbGlicmFyeSBzZWFyY2ggcGF0aAotICAgICAgbGlzdChBUFBFTkQgJHtsaWJyYXJ5X3BhdGhzfSAiJHtDTUFLRV9NQVRDSF8xfSIpCi0gICAgZWxzZWlmKCIke2FyZ30iIE1BVENIRVMgIl4tbChoZGY1LipobC4qKSQiKQorICAgICAgbGlzdChBUFBFTkQgbGlicmFyeV9wYXRocyAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgZWxzZWlmKCIke19hcmd9IiBNQVRDSEVTICJeLWwoaGRmNS4qaGwuKikkIikKICAgICAgICMgbGlicmFyeSBuYW1lIChobCkKLSAgICAgIGxpc3QoQVBQRU5EICR7bGlicmFyaWVzX2hsfSAiJHtDTUFLRV9NQVRDSF8xfSIpCi0gICAgZWxzZWlmKCIke2FyZ30iIE1BVENIRVMgIl4tbCguKikkIikKKyAgICAgIGxpc3QoQVBQRU5EIGxpYnJhcmllc19obCAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgZWxzZWlmKCIke19hcmd9IiBNQVRDSEVTICJeLWwoLiopJCIpCiAgICAgICAjIGxpYnJhcnkgbmFtZQotICAgICAgbGlzdChBUFBFTkQgJHtsaWJyYXJpZXN9ICIke0NNQUtFX01BVENIXzF9IikKLSAgICBlbHNlaWYoIiR7YXJnfSIgTUFUQ0hFUyAiXiguOik/Wy9cXF0uKlxcLihhfHNvfGR5bGlifHNsfGxpYikkIikKKyAgICAgIGxpc3QoQVBQRU5EIGxpYnJhcmllcyAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgZWxzZWlmKCIke19hcmd9IiBNQVRDSEVTICJeKC46KT9bL1xcXS4qXFwuKGF8c298ZHlsaWJ8c2x8bGliKSQiKQogICAgICAgIyBsaWJyYXJ5IGZpbGUKLSAgICAgIGlmKE5PVCBFWElTVFMgIiR7YXJnfSIpCisgICAgICBpZihOT1QgRVhJU1RTICIke19hcmd9IikKICAgICAgICAgY29udGludWUoKQogICAgICAgZW5kaWYoKQotICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfSERGNV9MUEFUSCAiJHthcmd9IiBESVJFQ1RPUlkpCi0gICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9IREY1X0xOQU1FICIke2FyZ30iIE5BTUVfV0UpCi0gICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXmxpYiIgIiIgX0hERjVfTE5BTUUgIiR7X0hERjVfTE5BTUV9IikKLSAgICAgIGxpc3QoQVBQRU5EICR7bGlicmFyeV9wYXRoc30gIiR7X0hERjVfTFBBVEh9IikKLSAgICAgIGlmKF9IREY1X0xOQU1FIE1BVENIRVMgImhkZjUuKmhsIikKLSAgICAgICAgbGlzdChBUFBFTkQgJHtsaWJyYXJpZXNfaGx9ICIke19IREY1X0xOQU1FfSIpCisgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9scGF0aCAiJHtfYXJnfSIgRElSRUNUT1JZKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfbG5hbWUgIiR7X2FyZ30iIE5BTUVfV0UpCisgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXmxpYiIgIiIgX2xuYW1lICIke19sbmFtZX0iKQorICAgICAgbGlzdChBUFBFTkQgbGlicmFyeV9wYXRocyAiJHtfbHBhdGh9IikKKyAgICAgIGlmKF9sbmFtZSBNQVRDSEVTICJoZGY1LipobCIpCisgICAgICAgIGxpc3QoQVBQRU5EIGxpYnJhcmllc19obCAiJHtfbG5hbWV9IikKICAgICAgIGVsc2UoKQotICAgICAgICBsaXN0KEFQUEVORCAke2xpYnJhcmllc30gIiR7X0hERjVfTE5BTUV9IikKKyAgICAgICAgbGlzdChBUFBFTkQgbGlicmFyaWVzICIke19sbmFtZX0iKQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCi1lbmRtYWNybygpCisgIGZvcmVhY2godmFyIGluY2x1ZGVfcGF0aHMgZGVmaW5pdGlvbnMgbGlicmFyeV9wYXRocyBsaWJyYXJpZXMgbGlicmFyaWVzX2hsKQorICAgIHNldCgkeyR7dmFyfV92YXJ9ICR7JHt2YXJ9fSBQQVJFTlRfU0NPUEUpCisgIGVuZGZvcmVhY2goKQorZW5kZnVuY3Rpb24oKQogCiAjIFNlbGVjdCBhIHByZWZlcnJlZCBpbXBvcnRlZCBjb25maWd1cmF0aW9uIGZyb20gYSB0YXJnZXQKIGZ1bmN0aW9uKF9IREY1X3NlbGVjdF9pbXBvcnRlZF9jb25maWcgdGFyZ2V0IGltcG9ydGVkX2NvbmYpCkBAIC01MjgsMTAgKzU0MCwxMCBAQAogICAgICAgICAgICAgICAgIHNldChIREY1XyR7X2xhbmd9X0xJQlJBUlkgJHtfaGRmNV9sYW5nX2xvY2F0aW9ufSkKICAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1X0xJQlJBUklFUyAke0hERjVfJHtfbGFuZ31fVEFSR0VUfSR7X3N1ZmZpeH0pCiAgICAgICAgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9UQVJHRVR9JHtfc3VmZml4fSkKLSAgICAgICAgICAgICAgICBzZXQoSERGNV8ke19sYW5nfV9GT1VORCBUcnVlKQorICAgICAgICAgICAgICAgIHNldChIREY1XyR7X2xhbmd9X0ZPVU5EIFRSVUUpCiAgICAgICAgICAgICBlbmRpZigpCi0gICAgICAgICAgICBpZihGSU5EX0hMKQotICAgICAgICAgICAgICAgIGdldF90YXJnZXRfcHJvcGVydHkoX19sYW5nX2hsX2xvY2F0aW9uICR7SERGNV8ke19sYW5nfV9ITF9UQVJHRVR9JHtfc3VmZml4fSBJTVBPUlRFRF9JTVBMSUJfJHtfaGRmNV9pbXBvcnRlZF9jb25mfSApCisgICAgICAgICAgICBpZihIREY1X0ZJTkRfSEwpCisgICAgICAgICAgICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfbGFuZ19obF9sb2NhdGlvbiAke0hERjVfJHtfbGFuZ31fSExfVEFSR0VUfSR7X3N1ZmZpeH0gSU1QT1JURURfSU1QTElCXyR7X2hkZjVfaW1wb3J0ZWRfY29uZn0gKQogICAgICAgICAgICAgICAgIGlmIChOT1QgX2hkZjVfbGFuZ19obF9sb2NhdGlvbikKICAgICAgICAgICAgICAgICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfaGRmNV9sYW5nX2hsX2xvY2F0aW9uICR7SERGNV8ke19sYW5nfV9ITF9UQVJHRVR9JHtfc3VmZml4fSBMT0NBVElPTl8ke19oZGY1X2ltcG9ydGVkX2NvbmZ9KQogICAgICAgICAgICAgICAgICAgICBpZiAoTk9UIF9oZGY1X2hsX2xhbmdfbG9jYXRpb24pCkBAIC01NDIsNyArNTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fSExfTElCUkFSWSAke19oZGY1X2xhbmdfaGxfbG9jYXRpb259KQogICAgICAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1X0hMX0xJQlJBUklFUyAke0hERjVfJHtfbGFuZ31fSExfVEFSR0VUfSR7X3N1ZmZpeH0pCiAgICAgICAgICAgICAgICAgICAgIHNldChIREY1XyR7X2xhbmd9X0hMX0xJQlJBUklFUyAke0hERjVfJHtfbGFuZ31fSExfVEFSR0VUfSR7X3N1ZmZpeH0pCi0gICAgICAgICAgICAgICAgICAgIHNldChIREY1X0hMX0ZPVU5EIFRydWUpCisgICAgICAgICAgICAgICAgICAgIHNldChIREY1X0hMX0ZPVU5EIFRSVUUpCiAgICAgICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgICAgICAgIHVuc2V0KF9oZGY1X2xhbmdfaGxfbG9jYXRpb24pCiAgICAgICAgICAgICBlbmRpZigpCkBAIC01NTMsMTcyICs1NjUsMTc3IEBACiBlbmRpZigpCiAKIGlmKE5PVCBIREY1X0ZPVU5EKQotICBzZXQoX0hERjVfTkVFRF9UT19TRUFSQ0ggRmFsc2UpCi0gIHNldChIREY1X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFIFRydWUpCisgIHNldChfSERGNV9ORUVEX1RPX1NFQVJDSCBGQUxTRSkKKyAgc2V0KEhERjVfQ09NUElMRVJfTk9fSU5URVJST0dBVEUgVFJVRSkKICAgIyBPbmx5IHNlYXJjaCBmb3IgbGFuZ3VhZ2VzIHdlJ3ZlIGVuYWJsZWQKLSAgZm9yZWFjaChfX2xhbmcgSU4gTElTVFMgSERGNV9MQU5HVUFHRV9CSU5ESU5HUykKKyAgZm9yZWFjaChfbGFuZyBJTiBMSVNUUyBIREY1X0xBTkdVQUdFX0JJTkRJTkdTKQogICAgICMgRmlyc3QgY2hlY2sgdG8gc2VlIGlmIG91ciByZWd1bGFyIGNvbXBpbGVyIGlzIG9uZSBvZiB3cmFwcGVycwotICAgIGlmKF9fbGFuZyBTVFJFUVVBTCAiQyIpCisgICAgaWYoX2xhbmcgU1RSRVFVQUwgIkMiKQogICAgICAgX0hERjVfdGVzdF9yZWd1bGFyX2NvbXBpbGVyX0MoCi0gICAgICAgIEhERjVfJHtfX2xhbmd9X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFCi0gICAgICAgIEhERjVfJHtfX2xhbmd9X1ZFUlNJT04KLSAgICAgICAgSERGNV8ke19fbGFuZ31fSVNfUEFSQUxMRUwpCi0gICAgZWxzZWlmKF9fbGFuZyBTVFJFUVVBTCAiQ1hYIikKKyAgICAgICAgSERGNV8ke19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURQorICAgICAgICBIREY1XyR7X2xhbmd9X1ZFUlNJT04KKyAgICAgICAgSERGNV8ke19sYW5nfV9JU19QQVJBTExFTCkKKyAgICBlbHNlaWYoX2xhbmcgU1RSRVFVQUwgIkNYWCIpCiAgICAgICBfSERGNV90ZXN0X3JlZ3VsYXJfY29tcGlsZXJfQ1hYKAotICAgICAgICBIREY1XyR7X19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURQotICAgICAgICBIREY1XyR7X19sYW5nfV9WRVJTSU9OCi0gICAgICAgIEhERjVfJHtfX2xhbmd9X0lTX1BBUkFMTEVMKQotICAgIGVsc2VpZihfX2xhbmcgU1RSRVFVQUwgIkZvcnRyYW4iKQorICAgICAgICBIREY1XyR7X2xhbmd9X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFCisgICAgICAgIEhERjVfJHtfbGFuZ31fVkVSU0lPTgorICAgICAgICBIREY1XyR7X2xhbmd9X0lTX1BBUkFMTEVMKQorICAgIGVsc2VpZihfbGFuZyBTVFJFUVVBTCAiRm9ydHJhbiIpCiAgICAgICBfSERGNV90ZXN0X3JlZ3VsYXJfY29tcGlsZXJfRm9ydHJhbigKLSAgICAgICAgSERGNV8ke19fbGFuZ31fQ09NUElMRVJfTk9fSU5URVJST0dBVEUKLSAgICAgICAgSERGNV8ke19fbGFuZ31fSVNfUEFSQUxMRUwpCisgICAgICAgIEhERjVfJHtfbGFuZ31fQ09NUElMRVJfTk9fSU5URVJST0dBVEUKKyAgICAgICAgSERGNV8ke19sYW5nfV9JU19QQVJBTExFTCkKICAgICBlbHNlKCkKICAgICAgIGNvbnRpbnVlKCkKICAgICBlbmRpZigpCi0gICAgaWYoSERGNV8ke19fbGFuZ31fQ09NUElMRVJfTk9fSU5URVJST0dBVEUpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiSERGNTogVXNpbmcgaGRmNSBjb21waWxlciB3cmFwcGVyIGZvciBhbGwgJHtfX2xhbmd9IGNvbXBpbGluZyIpCi0gICAgICBzZXQoSERGNV8ke19fbGFuZ31fRk9VTkQgVHJ1ZSkKLSAgICAgIHNldChIREY1XyR7X19sYW5nfV9DT01QSUxFUl9FWEVDVVRBQkxFX05PX0lOVEVSUk9HQVRFCi0gICAgICAgICAgIiR7Q01BS0VfJHtfX2xhbmd9X0NPTVBJTEVSfSIKLSAgICAgICAgICBDQUNIRSBGSUxFUEFUSCAiSERGNSAke19fbGFuZ30gY29tcGlsZXIgd3JhcHBlciIpCi0gICAgICBzZXQoSERGNV8ke19fbGFuZ31fREVGSU5JVElPTlMpCi0gICAgICBzZXQoSERGNV8ke19fbGFuZ31fSU5DTFVERV9ESVJTKQotICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0xJQlJBUklFUykKLSAgICAgIHNldChIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVMpCisgICAgaWYoSERGNV8ke19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURSkKKyAgICAgIGlmKEhERjVfRklORF9ERUJVRykKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIkhERjU6IFVzaW5nIGhkZjUgY29tcGlsZXIgd3JhcHBlciBmb3IgYWxsICR7X2xhbmd9IGNvbXBpbGluZyIpCisgICAgICBlbmRpZigpCisgICAgICBzZXQoSERGNV8ke19sYW5nfV9GT1VORCBUUlVFKQorICAgICAgc2V0KEhERjVfJHtfbGFuZ31fQ09NUElMRVJfRVhFQ1VUQUJMRV9OT19JTlRFUlJPR0FURQorICAgICAgICAgICIke0NNQUtFXyR7X2xhbmd9X0NPTVBJTEVSfSIKKyAgICAgICAgICBDQUNIRSBGSUxFUEFUSCAiSERGNSAke19sYW5nfSBjb21waWxlciB3cmFwcGVyIikKKyAgICAgIHNldChIREY1XyR7X2xhbmd9X0RFRklOSVRJT05TKQorICAgICAgc2V0KEhERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJTKQorICAgICAgc2V0KEhERjVfJHtfbGFuZ31fTElCUkFSSUVTKQorICAgICAgc2V0KEhERjVfJHtfbGFuZ31fSExfTElCUkFSSUVTKQogCi0gICAgICBtYXJrX2FzX2FkdmFuY2VkKEhERjVfJHtfX2xhbmd9X0NPTVBJTEVSX0VYRUNVVEFCTEVfTk9fSU5URVJST0dBVEUpCisgICAgICBtYXJrX2FzX2FkdmFuY2VkKEhERjVfJHtfbGFuZ31fQ09NUElMRVJfRVhFQ1VUQUJMRV9OT19JTlRFUlJPR0FURSkKIAotICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0ZPVU5EIFRydWUpCi0gICAgICBzZXQoSERGNV9ITF9GT1VORCBUcnVlKQorICAgICAgc2V0KEhERjVfJHtfbGFuZ31fRk9VTkQgVFJVRSkKKyAgICAgIHNldChIREY1X0hMX0ZPVU5EIFRSVUUpCiAgICAgZWxzZSgpCi0gICAgICBzZXQoSERGNV9DT01QSUxFUl9OT19JTlRFUlJPR0FURSBGYWxzZSkKKyAgICAgIHNldChIREY1X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFIEZBTFNFKQogICAgICAgIyBJZiB0aGlzIGxhbmd1YWdlIGlzbid0IHVzaW5nIHRoZSB3cmFwcGVyLCB0aGVuIHRyeSB0byBzZWVkIHRoZQogICAgICAgIyBzZWFyY2ggb3B0aW9ucyB3aXRoIHRoZSB3cmFwcGVyCi0gICAgICBmaW5kX3Byb2dyYW0oSERGNV8ke19fbGFuZ31fQ09NUElMRVJfRVhFQ1VUQUJMRQotICAgICAgICBOQU1FUyAke0hERjVfJHtfX2xhbmd9X0NPTVBJTEVSX05BTUVTfSBOQU1FU19QRVJfRElSCisgICAgICBmaW5kX3Byb2dyYW0oSERGNV8ke19sYW5nfV9DT01QSUxFUl9FWEVDVVRBQkxFCisgICAgICAgIE5BTUVTICR7SERGNV8ke19sYW5nfV9DT01QSUxFUl9OQU1FU30gTkFNRVNfUEVSX0RJUgogICAgICAgICBISU5UUyAke0hERjVfUk9PVH0KICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4gQmluCi0gICAgICAgIERPQyAiSERGNSAke19fbGFuZ30gV3JhcHBlciBjb21waWxlci4gIFVzZWQgb25seSB0byBkZXRlY3QgSERGNSBjb21waWxlIGZsYWdzLiIKKyAgICAgICAgRE9DICJIREY1ICR7X2xhbmd9IFdyYXBwZXIgY29tcGlsZXIuICBVc2VkIG9ubHkgdG8gZGV0ZWN0IEhERjUgY29tcGlsZSBmbGFncy4iCiAgICAgICAgICR7X0hERjVfU0VBUkNIX09QVFN9CiAgICAgICApCi0gICAgICBtYXJrX2FzX2FkdmFuY2VkKCBIREY1XyR7X19sYW5nfV9DT01QSUxFUl9FWEVDVVRBQkxFICkKLSAgICAgIHVuc2V0KEhERjVfJHtfX2xhbmd9X0NPTVBJTEVSX05BTUVTKQorICAgICAgbWFya19hc19hZHZhbmNlZCggSERGNV8ke19sYW5nfV9DT01QSUxFUl9FWEVDVVRBQkxFICkKKyAgICAgIHVuc2V0KEhERjVfJHtfbGFuZ31fQ09NUElMRVJfTkFNRVMpCiAKLSAgICAgIGlmKEhERjVfJHtfX2xhbmd9X0NPTVBJTEVSX0VYRUNVVEFCTEUpCi0gICAgICAgIF9IREY1X2ludm9rZV9jb21waWxlcigke19fbGFuZ30gSERGNV8ke19fbGFuZ31fQ09NUElMRV9MSU5FCi0gICAgICAgICAgSERGNV8ke19fbGFuZ31fUkVUVVJOX1ZBTFVFIEhERjVfJHtfX2xhbmd9X1ZFUlNJT04gSERGNV8ke19fbGFuZ31fSVNfUEFSQUxMRUwpCi0gICAgICAgIGlmKEhERjVfJHtfX2xhbmd9X1JFVFVSTl9WQUxVRSBFUVVBTCAwKQotICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1OiBVc2luZyBoZGY1IGNvbXBpbGVyIHdyYXBwZXIgdG8gZGV0ZXJtaW5lICR7X19sYW5nfSBjb25maWd1cmF0aW9uIikKLSAgICAgICAgICBfSERGNV9wYXJzZV9jb21waWxlX2xpbmUoIEhERjVfJHtfX2xhbmd9X0NPTVBJTEVfTElORQotICAgICAgICAgICAgSERGNV8ke19fbGFuZ31fSU5DTFVERV9ESVJTCi0gICAgICAgICAgICBIREY1XyR7X19sYW5nfV9ERUZJTklUSU9OUwotICAgICAgICAgICAgSERGNV8ke19fbGFuZ31fTElCUkFSWV9ESVJTCi0gICAgICAgICAgICBIREY1XyR7X19sYW5nfV9MSUJSQVJZX05BTUVTCi0gICAgICAgICAgICBIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJZX05BTUVTCisgICAgICBpZihIREY1XyR7X2xhbmd9X0NPTVBJTEVSX0VYRUNVVEFCTEUpCisgICAgICAgIF9IREY1X2ludm9rZV9jb21waWxlcigke19sYW5nfSBIREY1XyR7X2xhbmd9X0NPTVBJTEVfTElORQorICAgICAgICAgIEhERjVfJHtfbGFuZ31fUkVUVVJOX1ZBTFVFIEhERjVfJHtfbGFuZ31fVkVSU0lPTiBIREY1XyR7X2xhbmd9X0lTX1BBUkFMTEVMKQorICAgICAgICBpZihIREY1XyR7X2xhbmd9X1JFVFVSTl9WQUxVRSBFUVVBTCAwKQorICAgICAgICAgIGlmKEhERjVfRklORF9ERUJVRykKKyAgICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1OiBVc2luZyBoZGY1IGNvbXBpbGVyIHdyYXBwZXIgdG8gZGV0ZXJtaW5lICR7X2xhbmd9IGNvbmZpZ3VyYXRpb24iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBfSERGNV9wYXJzZV9jb21waWxlX2xpbmUoIEhERjVfJHtfbGFuZ31fQ09NUElMRV9MSU5FCisgICAgICAgICAgICBIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSUworICAgICAgICAgICAgSERGNV8ke19sYW5nfV9ERUZJTklUSU9OUworICAgICAgICAgICAgSERGNV8ke19sYW5nfV9MSUJSQVJZX0RJUlMKKyAgICAgICAgICAgIEhERjVfJHtfbGFuZ31fTElCUkFSWV9OQU1FUworICAgICAgICAgICAgSERGNV8ke19sYW5nfV9ITF9MSUJSQVJZX05BTUVTCiAgICAgICAgICAgKQotICAgICAgICAgIHNldChIREY1XyR7X19sYW5nfV9MSUJSQVJJRVMpCisgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fTElCUkFSSUVTKQogCi0gICAgICAgICAgZm9yZWFjaChMIElOIExJU1RTIEhERjVfJHtfX2xhbmd9X0xJQlJBUllfTkFNRVMpCisgICAgICAgICAgZm9yZWFjaChfbGliIElOIExJU1RTIEhERjVfJHtfbGFuZ31fTElCUkFSWV9OQU1FUykKICAgICAgICAgICAgIHNldChfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUwpCi0gICAgICAgICAgICBpZigieCR7TH0iIE1BVENIRVMgImhkZjUiKQorICAgICAgICAgICAgaWYoIngke19saWJ9IiBNQVRDSEVTICJoZGY1IikKICAgICAgICAgICAgICAgIyBoZGY1IGxpYnJhcnkKICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9PUFRTX0xPQ0FMICR7X0hERjVfU0VBUkNIX09QVFN9KQogICAgICAgICAgICAgICBpZihIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTKQogICAgICAgICAgICAgICAgIGlmKFdJTjMyKQotICAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCBsaWIke0x9KQorICAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCBsaWIke19saWJ9KQogICAgICAgICAgICAgICAgIGVsc2UoKQotICAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCBsaWIke0x9LmEpCisgICAgICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMIGxpYiR7X2xpYn0uYSkKICAgICAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICAgIGVsc2UoKQogICAgICAgICAgICAgICAjIGV4dGVybmFsIGxpYnJhcnkKICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9PUFRTX0xPQ0FMKQogICAgICAgICAgICAgZW5kaWYoKQotICAgICAgICAgICAgZmluZF9saWJyYXJ5KEhERjVfJHtfX2xhbmd9X0xJQlJBUllfJHtMfQotICAgICAgICAgICAgICBOQU1FUyAke19IREY1X1NFQVJDSF9OQU1FU19MT0NBTH0gJHtMfSBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgIEhJTlRTICR7SERGNV8ke19fbGFuZ31fTElCUkFSWV9ESVJTfQorICAgICAgICAgICAgZmluZF9saWJyYXJ5KEhERjVfJHtfbGFuZ31fTElCUkFSWV8ke19saWJ9CisgICAgICAgICAgICAgIE5BTUVTICR7X0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMfSAke19saWJ9IE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgSElOVFMgJHtIREY1XyR7X2xhbmd9X0xJQlJBUllfRElSU30KICAgICAgICAgICAgICAgICAgICAgJHtIREY1X1JPT1R9CiAgICAgICAgICAgICAgICR7X0hERjVfU0VBUkNIX09QVFNfTE9DQUx9CiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgIHVuc2V0KF9IREY1X1NFQVJDSF9PUFRTX0xPQ0FMKQogICAgICAgICAgICAgdW5zZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMKQotICAgICAgICAgICAgaWYoSERGNV8ke19fbGFuZ31fTElCUkFSWV8ke0x9KQotICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X19sYW5nfV9MSUJSQVJJRVMgJHtIREY1XyR7X19sYW5nfV9MSUJSQVJZXyR7TH19KQorICAgICAgICAgICAgaWYoSERGNV8ke19sYW5nfV9MSUJSQVJZXyR7X2xpYn0pCisgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfbGFuZ31fTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9MSUJSQVJZXyR7X2xpYn19KQogICAgICAgICAgICAgZWxzZSgpCi0gICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfX2xhbmd9X0xJQlJBUklFUyAke0x9KQorICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X2xhbmd9X0xJQlJBUklFUyAke19saWJ9KQogICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICAgIGlmKEZJTkRfSEwpCi0gICAgICAgICAgICBzZXQoSERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTKQotICAgICAgICAgICAgZm9yZWFjaChMIElOIExJU1RTIEhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUllfTkFNRVMpCisgICAgICAgICAgaWYoSERGNV9GSU5EX0hMKQorICAgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fSExfTElCUkFSSUVTKQorICAgICAgICAgICAgZm9yZWFjaChfbGliIElOIExJU1RTIEhERjVfJHtfbGFuZ31fSExfTElCUkFSWV9OQU1FUykKICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCkKLSAgICAgICAgICAgICAgaWYoIngke0x9IiBNQVRDSEVTICJoZGY1IikKKyAgICAgICAgICAgICAgaWYoIngke19saWJ9IiBNQVRDSEVTICJoZGY1IikKICAgICAgICAgICAgICAgICAjIGhkZjUgbGlicmFyeQogICAgICAgICAgICAgICAgIHNldChfSERGNV9TRUFSQ0hfT1BUU19MT0NBTCAke19IREY1X1NFQVJDSF9PUFRTfSkKICAgICAgICAgICAgICAgICBpZihIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTKQogICAgICAgICAgICAgICAgICAgaWYoV0lOMzIpCi0gICAgICAgICAgICAgICAgICAgIHNldChfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUwgbGliJHtMfSkKKyAgICAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCBsaWIke19saWJ9KQogICAgICAgICAgICAgICAgICAgZWxzZSgpCi0gICAgICAgICAgICAgICAgICAgIHNldChfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUwgbGliJHtMfS5hKQorICAgICAgICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMIGxpYiR7X2xpYn0uYSkKICAgICAgICAgICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgICAgIGVsc2UoKQogICAgICAgICAgICAgICAgICMgZXh0ZXJuYWwgbGlicmFyeQogICAgICAgICAgICAgICAgIHNldChfSERGNV9TRUFSQ0hfT1BUU19MT0NBTCkKICAgICAgICAgICAgICAgZW5kaWYoKQotICAgICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke19fbGFuZ31fTElCUkFSWV8ke0x9Ci0gICAgICAgICAgICAgICAgTkFNRVMgJHtfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUx9ICR7TH0gTkFNRVNfUEVSX0RJUgotICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV8ke19fbGFuZ31fTElCUkFSWV9ESVJTfQorICAgICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke19sYW5nfV9MSUJSQVJZXyR7X2xpYn0KKyAgICAgICAgICAgICAgICBOQU1FUyAke19IREY1X1NFQVJDSF9OQU1FU19MT0NBTH0gJHtfbGlifSBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgSElOVFMgJHtIREY1XyR7X2xhbmd9X0xJQlJBUllfRElSU30KICAgICAgICAgICAgICAgICAgICAgICAke0hERjVfUk9PVH0KICAgICAgICAgICAgICAgICAke19IREY1X1NFQVJDSF9PUFRTX0xPQ0FMfQogICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgdW5zZXQoX0hERjVfU0VBUkNIX09QVFNfTE9DQUwpCiAgICAgICAgICAgICAgIHVuc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCkKLSAgICAgICAgICAgICAgaWYoSERGNV8ke19fbGFuZ31fTElCUkFSWV8ke0x9KQotICAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUklFUyAke0hERjVfJHtfX2xhbmd9X0xJQlJBUllfJHtMfX0pCisgICAgICAgICAgICAgIGlmKEhERjVfJHtfbGFuZ31fTElCUkFSWV8ke19saWJ9KQorICAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfbGFuZ31fSExfTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9MSUJSQVJZXyR7X2xpYn19KQogICAgICAgICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVMgJHtMfSkKKyAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X2xhbmd9X0hMX0xJQlJBUklFUyAke19saWJ9KQogICAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgICAgICAgIHNldChIREY1X0hMX0ZPVU5EIFRydWUpCisgICAgICAgICAgICBzZXQoSERGNV9ITF9GT1VORCBUUlVFKQogICAgICAgICAgIGVuZGlmKCkKIAotICAgICAgICAgIHNldChIREY1XyR7X19sYW5nfV9GT1VORCBUcnVlKQotICAgICAgICAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfJHtfX2xhbmd9X0RFRklOSVRJT05TKQotICAgICAgICAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSUykKLSAgICAgICAgICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1XyR7X19sYW5nfV9MSUJSQVJJRVMpCi0gICAgICAgICAgX0hERjVfcmVtb3ZlX2R1cGxpY2F0ZXNfZnJvbV9iZWdpbm5pbmcoSERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTKQorICAgICAgICAgIHNldChIREY1XyR7X2xhbmd9X0ZPVU5EIFRSVUUpCisgICAgICAgICAgX0hERjVfcmVtb3ZlX2R1cGxpY2F0ZXNfZnJvbV9iZWdpbm5pbmcoSERGNV8ke19sYW5nfV9ERUZJTklUSU9OUykKKyAgICAgICAgICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSUykKKyAgICAgICAgICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1XyR7X2xhbmd9X0xJQlJBUklFUykKKyAgICAgICAgICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1XyR7X2xhbmd9X0hMX0xJQlJBUklFUykKICAgICAgICAgZWxzZSgpCi0gICAgICAgICAgc2V0KF9IREY1X05FRURfVE9fU0VBUkNIIFRydWUpCisgICAgICAgICAgc2V0KF9IREY1X05FRURfVE9fU0VBUkNIIFRSVUUpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVsc2UoKQotICAgICAgICBzZXQoX0hERjVfTkVFRF9UT19TRUFSQ0ggVHJ1ZSkKKyAgICAgICAgc2V0KF9IREY1X05FRURfVE9fU0VBUkNIIFRSVUUpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQotICAgIGlmKEhERjVfJHtfX2xhbmd9X1ZFUlNJT04pCisgICAgaWYoSERGNV8ke19sYW5nfV9WRVJTSU9OKQogICAgICAgaWYoTk9UIEhERjVfVkVSU0lPTikKLSAgICAgICAgc2V0KEhERjVfVkVSU0lPTiAke0hERjVfJHtfX2xhbmd9X1ZFUlNJT059KQotICAgICAgZWxzZWlmKE5PVCBIREY1X1ZFUlNJT04gVkVSU0lPTl9FUVVBTCBIREY1XyR7X19sYW5nfV9WRVJTSU9OKQotICAgICAgICBtZXNzYWdlKFdBUk5JTkcgIkhERjUgVmVyc2lvbiBmb3VuZCBmb3IgbGFuZ3VhZ2UgJHtfX2xhbmd9LCAke0hERjVfJHtfX2xhbmd9X1ZFUlNJT059IGlzIGRpZmZlcmVudCB0aGFuIHByZXZpb3VzbHkgZm91bmQgdmVyc2lvbiAke0hERjVfVkVSU0lPTn0iKQorICAgICAgICBzZXQoSERGNV9WRVJTSU9OICR7SERGNV8ke19sYW5nfV9WRVJTSU9OfSkKKyAgICAgIGVsc2VpZihOT1QgSERGNV9WRVJTSU9OIFZFUlNJT05fRVFVQUwgSERGNV8ke19sYW5nfV9WRVJTSU9OKQorICAgICAgICBtZXNzYWdlKFdBUk5JTkcgIkhERjUgVmVyc2lvbiBmb3VuZCBmb3IgbGFuZ3VhZ2UgJHtfbGFuZ30sICR7SERGNV8ke19sYW5nfV9WRVJTSU9OfSBpcyBkaWZmZXJlbnQgdGhhbiBwcmV2aW91c2x5IGZvdW5kIHZlcnNpb24gJHtIREY1X1ZFUlNJT059IikKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCi0gICAgaWYoREVGSU5FRCBIREY1XyR7X19sYW5nfV9JU19QQVJBTExFTCkKKyAgICBpZihERUZJTkVEIEhERjVfJHtfbGFuZ31fSVNfUEFSQUxMRUwpCiAgICAgICBpZihOT1QgREVGSU5FRCBIREY1X0lTX1BBUkFMTEVMKQotICAgICAgICBzZXQoSERGNV9JU19QQVJBTExFTCAke0hERjVfJHtfX2xhbmd9X0lTX1BBUkFMTEVMfSkKLSAgICAgIGVsc2VpZihOT1QgSERGNV9JU19QQVJBTExFTCBBTkQgSERGNV8ke19fbGFuZ31fSVNfUEFSQUxMRUwpCi0gICAgICAgIG1lc3NhZ2UoV0FSTklORyAiSERGNSBmb3VuZCBmb3IgbGFuZ3VhZ2UgJHtfX2xhbmd9IGlzIHBhcmFsbGVsIGJ1dCBwcmV2aW91c2x5IGZvdW5kIGxhbmd1YWdlIGlzIG5vdCBwYXJhbGxlbC4iKQotICAgICAgZWxzZWlmKEhERjVfSVNfUEFSQUxMRUwgQU5EIE5PVCBIREY1XyR7X19sYW5nfV9JU19QQVJBTExFTCkKLSAgICAgICAgbWVzc2FnZShXQVJOSU5HICJIREY1IGZvdW5kIGZvciBsYW5ndWFnZSAke19fbGFuZ30gaXMgbm90IHBhcmFsbGVsIGJ1dCBwcmV2aW91c2x5IGZvdW5kIGxhbmd1YWdlIGlzIHBhcmFsbGVsLiIpCisgICAgICAgIHNldChIREY1X0lTX1BBUkFMTEVMICR7SERGNV8ke19sYW5nfV9JU19QQVJBTExFTH0pCisgICAgICBlbHNlaWYoTk9UIEhERjVfSVNfUEFSQUxMRUwgQU5EIEhERjVfJHtfbGFuZ31fSVNfUEFSQUxMRUwpCisgICAgICAgIG1lc3NhZ2UoV0FSTklORyAiSERGNSBmb3VuZCBmb3IgbGFuZ3VhZ2UgJHtfbGFuZ30gaXMgcGFyYWxsZWwgYnV0IHByZXZpb3VzbHkgZm91bmQgbGFuZ3VhZ2UgaXMgbm90IHBhcmFsbGVsLiIpCisgICAgICBlbHNlaWYoSERGNV9JU19QQVJBTExFTCBBTkQgTk9UIEhERjVfJHtfbGFuZ31fSVNfUEFSQUxMRUwpCisgICAgICAgIG1lc3NhZ2UoV0FSTklORyAiSERGNSBmb3VuZCBmb3IgbGFuZ3VhZ2UgJHtfbGFuZ30gaXMgbm90IHBhcmFsbGVsIGJ1dCBwcmV2aW91c2x5IGZvdW5kIGxhbmd1YWdlIGlzIHBhcmFsbGVsLiIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKKyAgdW5zZXQoX2xpYikKIGVsc2UoKQotICBzZXQoX0hERjVfTkVFRF9UT19TRUFSQ0ggVHJ1ZSkKKyAgc2V0KF9IREY1X05FRURfVE9fU0VBUkNIIFRSVUUpCiBlbmRpZigpCiAKIGlmKE5PVCBIREY1X0ZPVU5EIEFORCBIREY1X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFKQogICAjIE5vIGFyZ3VtZW50cyBuZWNlc3NhcnksIGFsbCBsYW5ndWFnZXMgY2FuIHVzZSB0aGUgY29tcGlsZXIgd3JhcHBlcnMKLSAgc2V0KEhERjVfRk9VTkQgVHJ1ZSkKKyAgc2V0KEhERjVfRk9VTkQgVFJVRSkKICAgc2V0KEhERjVfTUVUSE9EICJJbmNsdWRlZCBieSBjb21waWxlciB3cmFwcGVycyIpCiAgIHNldChIREY1X1JFUVVJUkVEX1ZBUlMgSERGNV9NRVRIT0QpCiBlbHNlaWYoTk9UIEhERjVfRk9VTkQgQU5EIE5PVCBfSERGNV9ORUVEX1RPX1NFQVJDSCkKQEAgLTcyNywxNCArNzQ0LDE0IEBACiAgIHNldChIREY1X0lOQ0xVREVfRElSUykKICAgc2V0KEhERjVfTElCUkFSSUVTKQogICBzZXQoSERGNV9ITF9MSUJSQVJJRVMpCi0gIGZvcmVhY2goX19sYW5nIElOIExJU1RTIEhERjVfTEFOR1VBR0VfQklORElOR1MpCi0gICAgaWYoSERGNV8ke19fbGFuZ31fRk9VTkQpCi0gICAgICBpZihOT1QgSERGNV8ke19fbGFuZ31fQ09NUElMRVJfTk9fSU5URVJST0dBVEUpCi0gICAgICAgIGxpc3QoQVBQRU5EIEhERjVfREVGSU5JVElPTlMgJHtIREY1XyR7X19sYW5nfV9ERUZJTklUSU9OU30pCi0gICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSU5DTFVERV9ESVJTICR7SERGNV8ke19fbGFuZ31fSU5DTFVERV9ESVJTfSkKLSAgICAgICAgbGlzdChBUFBFTkQgSERGNV9MSUJSQVJJRVMgJHtIREY1XyR7X19sYW5nfV9MSUJSQVJJRVN9KQotICAgICAgICBpZihGSU5EX0hMKQotICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSExfTElCUkFSSUVTICR7SERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTfSkKKyAgZm9yZWFjaChfbGFuZyBJTiBMSVNUUyBIREY1X0xBTkdVQUdFX0JJTkRJTkdTKQorICAgIGlmKEhERjVfJHtfbGFuZ31fRk9VTkQpCisgICAgICBpZihOT1QgSERGNV8ke19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURSkKKyAgICAgICAgbGlzdChBUFBFTkQgSERGNV9ERUZJTklUSU9OUyAke0hERjVfJHtfbGFuZ31fREVGSU5JVElPTlN9KQorICAgICAgICBsaXN0KEFQUEVORCBIREY1X0lOQ0xVREVfRElSUyAke0hERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJTfSkKKyAgICAgICAgbGlzdChBUFBFTkQgSERGNV9MSUJSQVJJRVMgJHtIREY1XyR7X2xhbmd9X0xJQlJBUklFU30pCisgICAgICAgIGlmKEhERjVfRklORF9ITCkKKyAgICAgICAgICBsaXN0KEFQUEVORCBIREY1X0hMX0xJQlJBUklFUyAke0hERjVfJHtfbGFuZ31fSExfTElCUkFSSUVTfSkKICAgICAgICAgZW5kaWYoKQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKQEAgLTc0Myw5ICs3NjAsOSBAQAogICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1X0lOQ0xVREVfRElSUykKICAgX0hERjVfcmVtb3ZlX2R1cGxpY2F0ZXNfZnJvbV9iZWdpbm5pbmcoSERGNV9MSUJSQVJJRVMpCiAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfSExfTElCUkFSSUVTKQotICBzZXQoSERGNV9GT1VORCBUcnVlKQorICBzZXQoSERGNV9GT1VORCBUUlVFKQogICBzZXQoSERGNV9SRVFVSVJFRF9WQVJTIEhERjVfTElCUkFSSUVTKQotICBpZihGSU5EX0hMKQorICBpZihIREY1X0ZJTkRfSEwpCiAgICAgbGlzdChBUFBFTkQgSERGNV9SRVFVSVJFRF9WQVJTIEhERjVfSExfTElCUkFSSUVTKQogICBlbmRpZigpCiBlbmRpZigpCkBAIC03NjksMzMgKzc4Niw0NCBAQAogICAgIHNldChIREY1X0ZvcnRyYW5fTElCUkFSWV9OQU1FUyAgICBoZGY1X2ZvcnRyYW4gICAke0hERjVfQ19MSUJSQVJZX05BTUVTfSkKICAgICBzZXQoSERGNV9Gb3J0cmFuX0hMX0xJQlJBUllfTkFNRVMgaGRmNWhsX2ZvcnRyYW4gJHtIREY1X0NfSExfTElCUkFSWV9OQU1FU30gJHtIREY1X0ZvcnRyYW5fTElCUkFSWV9OQU1FU30pCiAKLSAgICBmb3JlYWNoKF9fbGFuZyBJTiBMSVNUUyBIREY1X0xBTkdVQUdFX0JJTkRJTkdTKQorICAgICMgc3VmZml4ZXMgYXMgc2VlbiBvbiBMaW51eCwgTVNZUzIsIC4uLgorICAgIHNldChfbGliX3N1ZmZpeGVzIGhkZjUpCisgICAgaWYoTk9UIEhERjVfUFJFRkVSX1BBUkFMTEVMKQorICAgICAgbGlzdChBUFBFTkQgX2xpYl9zdWZmaXhlcyBoZGY1L3NlcmlhbCkKKyAgICBlbmRpZigpCisgICAgaWYoSERGNV9VU0VfU1RBVElDX0xJQlJBUklFUykKKyAgICAgIHNldChfaW5jX3N1ZmZpeGVzIGluY2x1ZGUvc3RhdGljKQorICAgIGVsc2UoKQorICAgICAgc2V0KF9pbmNfc3VmZml4ZXMgaW5jbHVkZS9zaGFyZWQpCisgICAgZW5kaWYoKQorCisgICAgZm9yZWFjaChfbGFuZyBJTiBMSVNUUyBIREY1X0xBTkdVQUdFX0JJTkRJTkdTKQogICAgICAgICAjIGZpbmQgdGhlIEhERjUgaW5jbHVkZSBkaXJlY3RvcmllcwotICAgICAgICBpZigiJHtfX2xhbmd9IiBTVFJFUVVBTCAiRm9ydHJhbiIpCisgICAgICAgIGlmKCIke19sYW5nfSIgU1RSRVFVQUwgIkZvcnRyYW4iKQogICAgICAgICAgICAgc2V0KEhERjVfSU5DTFVERV9GSUxFTkFNRSBoZGY1Lm1vZCBIREY1Lm1vZCkKLSAgICAgICAgZWxzZWlmKCIke19fbGFuZ30iIFNUUkVRVUFMICJDWFgiKQorICAgICAgICBlbHNlaWYoIiR7X2xhbmd9IiBTVFJFUVVBTCAiQ1hYIikKICAgICAgICAgICAgIHNldChIREY1X0lOQ0xVREVfRklMRU5BTUUgSDVDcHAuaCkKICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgICBzZXQoSERGNV9JTkNMVURFX0ZJTEVOQU1FIGhkZjUuaCkKICAgICAgICAgZW5kaWYoKQogCi0gICAgICAgIGZpbmRfcGF0aChIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUiAke0hERjVfSU5DTFVERV9GSUxFTkFNRX0KKyAgICAgICAgZmluZF9wYXRoKEhERjVfJHtfbGFuZ31fSU5DTFVERV9ESVIgJHtIREY1X0lOQ0xVREVfRklMRU5BTUV9CiAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0KICAgICAgICAgICAgIFBBVEhTICRFTlZ7SE9NRX0vLmxvY2FsL2luY2x1ZGUKLSAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgaW5jbHVkZSBJbmNsdWRlCisgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGluY2x1ZGUgSW5jbHVkZSAke19pbmNfc3VmZml4ZXN9ICR7X2xpYl9zdWZmaXhlc30KICAgICAgICAgICAgICR7X0hERjVfU0VBUkNIX09QVFN9CiAgICAgICAgICkKLSAgICAgICAgbWFya19hc19hZHZhbmNlZChIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUikKKyAgICAgICAgbWFya19hc19hZHZhbmNlZChIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSKQogICAgICAgICAjIHNldCB0aGUgX0RJUlMgdmFyaWFibGUgYXMgdGhpcyBpcyB3aGF0IHRoZSB1c2VyIHdpbGwgbm9ybWFsbHkgdXNlCi0gICAgICAgIHNldChIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUlMgJHtIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUn0pCi0gICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSU5DTFVERV9ESVJTICR7SERGNV8ke19fbGFuZ31fSU5DTFVERV9ESVJ9KQorICAgICAgICBzZXQoSERGNV8ke19sYW5nfV9JTkNMVURFX0RJUlMgJHtIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSfSkKKyAgICAgICAgbGlzdChBUFBFTkQgSERGNV9JTkNMVURFX0RJUlMgJHtIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSfSkKIAogICAgICAgICAjIGZpbmQgdGhlIEhERjUgbGlicmFyaWVzCi0gICAgICAgIGZvcmVhY2goTElCIElOIExJU1RTIEhERjVfJHtfX2xhbmd9X0xJQlJBUllfTkFNRVMpCisgICAgICAgIGZvcmVhY2goTElCIElOIExJU1RTIEhERjVfJHtfbGFuZ31fTElCUkFSWV9OQU1FUykKICAgICAgICAgICAgIGlmKEhERjVfVVNFX1NUQVRJQ19MSUJSQVJJRVMpCiAgICAgICAgICAgICAgICAgIyBBY2NvcmRpbmcgdG8gYnVnIDE2NDMgb24gdGhlIENNYWtlIGJ1ZyB0cmFja2VyLCB0aGlzIGlzIHRoZQogICAgICAgICAgICAgICAgICMgcHJlZmVycmVkIG1ldGhvZCBmb3Igc2VhcmNoaW5nIGZvciBhIHN0YXRpYyBsaWJyYXJ5LgotICAgICAgICAgICAgICAgICMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xNjQzLiAgV2Ugc2VhcmNoCisgICAgICAgICAgICAgICAgIyBTZWUgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTY0My4gIFdlIHNlYXJjaAogICAgICAgICAgICAgICAgICMgZmlyc3QgZm9yIHRoZSBmdWxsIHN0YXRpYyBsaWJyYXJ5IG5hbWUsIGJ1dCBmYWxsIGJhY2sgdG8gYQogICAgICAgICAgICAgICAgICMgZ2VuZXJpYyBzZWFyY2ggb24gdGhlIG5hbWUgaWYgdGhlIHN0YXRpYyBzZWFyY2ggZmFpbHMuCiAgICAgICAgICAgICAgICAgc2V0KCBUSElTX0xJQlJBUllfU0VBUkNIX0RFQlVHCkBAIC04MTEsMzEgKzgzOSwzMiBAQAogICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgICAgZmluZF9saWJyYXJ5KEhERjVfJHtMSUJ9X0xJQlJBUllfREVCVUcKICAgICAgICAgICAgICAgICBOQU1FUyAke1RISVNfTElCUkFSWV9TRUFSQ0hfREVCVUd9Ci0gICAgICAgICAgICAgICAgSElOVFMgJHtIREY1X1JPT1R9IFBBVEhfU1VGRklYRVMgbGliIExpYgorICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIgJHtfbGliX3N1ZmZpeGVzfQogICAgICAgICAgICAgICAgICR7X0hERjVfU0VBUkNIX09QVFN9CiAgICAgICAgICAgICApCi0gICAgICAgICAgICBmaW5kX2xpYnJhcnkoIEhERjVfJHtMSUJ9X0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgZmluZF9saWJyYXJ5KEhERjVfJHtMSUJ9X0xJQlJBUllfUkVMRUFTRQogICAgICAgICAgICAgICAgIE5BTUVTICR7VEhJU19MSUJSQVJZX1NFQVJDSF9SRUxFQVNFfQotICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIKKyAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliICR7X2xpYl9zdWZmaXhlc30KICAgICAgICAgICAgICAgICAke19IREY1X1NFQVJDSF9PUFRTfQogICAgICAgICAgICAgKQorCiAgICAgICAgICAgICBzZWxlY3RfbGlicmFyeV9jb25maWd1cmF0aW9ucyggSERGNV8ke0xJQn0gKQotICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19fbGFuZ31fTElCUkFSSUVTICR7SERGNV8ke0xJQn1fTElCUkFSWX0pCisgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X2xhbmd9X0xJQlJBUklFUyAke0hERjVfJHtMSUJ9X0xJQlJBUll9KQogICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgICAgaWYoSERGNV8ke19fbGFuZ31fTElCUkFSSUVTKQotICAgICAgICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0ZPVU5EIFRydWUpCisgICAgICAgIGlmKEhERjVfJHtfbGFuZ31fTElCUkFSSUVTKQorICAgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fRk9VTkQgVFJVRSkKICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgICMgQXBwZW5kIHRoZSBsaWJyYXJpZXMgZm9yIHRoaXMgbGFuZ3VhZ2UgYmluZGluZyB0byB0aGUgbGlzdCBvZiBhbGwKICAgICAgICAgIyByZXF1aXJlZCBsaWJyYXJpZXMuCi0gICAgICAgIGxpc3QoQVBQRU5EIEhERjVfTElCUkFSSUVTICR7SERGNV8ke19fbGFuZ31fTElCUkFSSUVTfSkKKyAgICAgICAgbGlzdChBUFBFTkQgSERGNV9MSUJSQVJJRVMgJHtIREY1XyR7X2xhbmd9X0xJQlJBUklFU30pCiAKLSAgICAgICAgaWYoRklORF9ITCkKLSAgICAgICAgICAgIGZvcmVhY2goTElCIElOIExJU1RTIEhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUllfTkFNRVMpCisgICAgICAgIGlmKEhERjVfRklORF9ITCkKKyAgICAgICAgICAgIGZvcmVhY2goTElCIElOIExJU1RTIEhERjVfJHtfbGFuZ31fSExfTElCUkFSWV9OQU1FUykKICAgICAgICAgICAgICAgICBpZihIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTKQogICAgICAgICAgICAgICAgICAgICAjIEFjY29yZGluZyB0byBidWcgMTY0MyBvbiB0aGUgQ01ha2UgYnVnIHRyYWNrZXIsIHRoaXMgaXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICMgcHJlZmVycmVkIG1ldGhvZCBmb3Igc2VhcmNoaW5nIGZvciBhIHN0YXRpYyBsaWJyYXJ5LgotICAgICAgICAgICAgICAgICAgICAjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTY0My4gIFdlIHNlYXJjaAorICAgICAgICAgICAgICAgICAgICAjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xNjQzLiAgV2Ugc2VhcmNoCiAgICAgICAgICAgICAgICAgICAgICMgZmlyc3QgZm9yIHRoZSBmdWxsIHN0YXRpYyBsaWJyYXJ5IG5hbWUsIGJ1dCBmYWxsIGJhY2sgdG8gYQogICAgICAgICAgICAgICAgICAgICAjIGdlbmVyaWMgc2VhcmNoIG9uIHRoZSBuYW1lIGlmIHRoZSBzdGF0aWMgc2VhcmNoIGZhaWxzLgogICAgICAgICAgICAgICAgICAgICBzZXQoIFRISVNfTElCUkFSWV9TRUFSQ0hfREVCVUcKQEAgLTg0OCwyNSArODc3LDI2IEBACiAgICAgICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgICAgICAgIGZpbmRfbGlicmFyeShIREY1XyR7TElCfV9MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7VEhJU19MSUJSQVJZX1NFQVJDSF9ERUJVR30KLSAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtIREY1X1JPT1R9IFBBVEhfU1VGRklYRVMgbGliIExpYgorICAgICAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliICR7X2xpYl9zdWZmaXhlc30KICAgICAgICAgICAgICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU30KICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgZmluZF9saWJyYXJ5KCBIREY1XyR7TElCfV9MSUJSQVJZX1JFTEVBU0UKKyAgICAgICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke0xJQn1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7VEhJU19MSUJSQVJZX1NFQVJDSF9SRUxFQVNFfQotICAgICAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliCisgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIgJHtfbGliX3N1ZmZpeGVzfQogICAgICAgICAgICAgICAgICAgICAke19IREY1X1NFQVJDSF9PUFRTfQogICAgICAgICAgICAgICAgICkKKwogICAgICAgICAgICAgICAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKCBIREY1XyR7TElCfSApCi0gICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTICR7SERGNV8ke0xJQn1fTElCUkFSWX0pCisgICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVMgJHtIREY1XyR7TElCfV9MSUJSQVJZfSkKICAgICAgICAgICAgIGVuZGZvcmVhY2goKQogCiAgICAgICAgICAgICAjIEFwcGVuZCB0aGUgbGlicmFyaWVzIGZvciB0aGlzIGxhbmd1YWdlIGJpbmRpbmcgdG8gdGhlIGxpc3Qgb2YgYWxsCiAgICAgICAgICAgICAjIHJlcXVpcmVkIGxpYnJhcmllcy4KLSAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSExfTElCUkFSSUVTICR7SERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTfSkKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSExfTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVN9KQogICAgICAgICBlbmRpZigpCiAgICAgZW5kZm9yZWFjaCgpCi0gICAgaWYoRklORF9ITCBBTkQgSERGNV9ITF9MSUJSQVJJRVMpCi0gICAgICAgIHNldChIREY1X0hMX0ZPVU5EIFRydWUpCisgICAgaWYoSERGNV9GSU5EX0hMIEFORCBIREY1X0hMX0xJQlJBUklFUykKKyAgICAgICAgc2V0KEhERjVfSExfRk9VTkQgVFJVRSkKICAgICBlbmRpZigpCiAKICAgICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1X0RFRklOSVRJT05TKQpAQCAtOTAzLDEyICs5MzMsMTQgQEAKICAgICAgICAgZW5kaWYoKQogICAgICAgZW5kZm9yZWFjaCgpCiAgICAgZW5kZm9yZWFjaCgpCisgICAgdW5zZXQoX2hkcikKKyAgICB1bnNldChfZGlyKQogICAgIHNldCggSERGNV9JU19QQVJBTExFTCAke0hERjVfSVNfUEFSQUxMRUx9IENBQ0hFIEJPT0wKICAgICAgICAgIkhERjUgbGlicmFyeSBjb21waWxlZCB3aXRoIHBhcmFsbGVsIElPIHN1cHBvcnQiICkKICAgICBtYXJrX2FzX2FkdmFuY2VkKCBIREY1X0lTX1BBUkFMTEVMICkKIAogICAgIHNldChIREY1X1JFUVVJUkVEX1ZBUlMgSERGNV9MSUJSQVJJRVMgSERGNV9JTkNMVURFX0RJUlMpCi0gICAgaWYoRklORF9ITCkKKyAgICBpZihIREY1X0ZJTkRfSEwpCiAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfUkVRVUlSRURfVkFSUyBIREY1X0hMX0xJQlJBUklFUykKICAgICBlbmRpZigpCiBlbmRpZigpCkBAIC05NDYsMTMgKzk3OCwxNSBAQAogICBtZXNzYWdlKFNUQVRVUyAiSERGNV9JTkNMVURFX0RJUlM6ICR7SERGNV9JTkNMVURFX0RJUlN9IikKICAgbWVzc2FnZShTVEFUVVMgIkhERjVfTElCUkFSSUVTOiAke0hERjVfTElCUkFSSUVTfSIpCiAgIG1lc3NhZ2UoU1RBVFVTICJIREY1X0hMX0xJQlJBUklFUzogJHtIREY1X0hMX0xJQlJBUklFU30iKQotICBmb3JlYWNoKF9fbGFuZyBJTiBMSVNUUyBIREY1X0xBTkdVQUdFX0JJTkRJTkdTKQotICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X19sYW5nfV9ERUZJTklUSU9OUzogJHtIREY1XyR7X19sYW5nfV9ERUZJTklUSU9OU30iKQotICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUjogJHtIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUn0iKQotICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUlM6ICR7SERGNV8ke19fbGFuZ31fSU5DTFVERV9ESVJTfSIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfX2xhbmd9X0xJQlJBUlk6ICR7SERGNV8ke19fbGFuZ31fTElCUkFSWX0iKQotICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X19sYW5nfV9MSUJSQVJJRVM6ICR7SERGNV8ke19fbGFuZ31fTElCUkFSSUVTfSIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUlk6ICR7SERGNV8ke19fbGFuZ31fSExfTElCUkFSWX0iKQotICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVM6ICR7SERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTfSIpCisgIGZvcmVhY2goX2xhbmcgSU4gTElTVFMgSERGNV9MQU5HVUFHRV9CSU5ESU5HUykKKyAgICBtZXNzYWdlKFNUQVRVUyAiSERGNV8ke19sYW5nfV9ERUZJTklUSU9OUzogJHtIREY1XyR7X2xhbmd9X0RFRklOSVRJT05TfSIpCisgICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfbGFuZ31fSU5DTFVERV9ESVI6ICR7SERGNV8ke19sYW5nfV9JTkNMVURFX0RJUn0iKQorICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSUzogJHtIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSU30iKQorICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X2xhbmd9X0xJQlJBUlk6ICR7SERGNV8ke19sYW5nfV9MSUJSQVJZfSIpCisgICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfbGFuZ31fTElCUkFSSUVTOiAke0hERjVfJHtfbGFuZ31fTElCUkFSSUVTfSIpCisgICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfbGFuZ31fSExfTElCUkFSWTogJHtIREY1XyR7X2xhbmd9X0hMX0xJQlJBUll9IikKKyAgICBtZXNzYWdlKFNUQVRVUyAiSERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVM6ICR7SERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVN9IikKICAgZW5kZm9yZWFjaCgpCiBlbmRpZigpCit1bnNldChfbGFuZykKK3Vuc2V0KF9IREY1X05FRURfVE9fU0VBUkNIKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kSUNVLmNtYWtlIGIvTW9kdWxlcy9GaW5kSUNVLmNtYWtlCmluZGV4IDM4MDgxZjUuLmM4YjNlMWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZElDVS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRJQ1UuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kSUNVCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBGaW5kIHRoZSBJbnRlcm5hdGlvbmFsIENvbXBvbmVudHMgZm9yIFVuaWNvZGUgKElDVSkgbGlicmFyaWVzIGFuZAogcHJvZ3JhbXMuCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEljZS5jbWFrZSBiL01vZHVsZXMvRmluZEljZS5jbWFrZQppbmRleCA1Y2UyYjQyLi4wZjgyMWU4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRJY2UuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kSWNlLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZEljZQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRmluZCB0aGUgWmVyb0MgSW50ZXJuZXQgQ29tbXVuaWNhdGlvbiBFbmdpbmUgKElDRSkgcHJvZ3JhbXMsCiBsaWJyYXJpZXMgYW5kIGRhdGFmaWxlcy4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kSWNvbnYuY21ha2UgYi9Nb2R1bGVzL0ZpbmRJY29udi5jbWFrZQppbmRleCBiZjIwZjZmLi40MWI3NTUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRJY29udi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRJY29udi5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRJY29udgogLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogVGhpcyBtb2R1bGUgZmluZHMgdGhlIGBgaWNvbnYoKWBgIFBPU0lYLjEgZnVuY3Rpb25zIG9uIHRoZSBzeXN0ZW0uCiBUaGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgcHJvdmlkZWQgaW4gdGhlIHJlZ3VsYXIgQyBsaWJyYXJ5IG9yIGV4dGVybmFsbHkKIGluIHRoZSBmb3JtIG9mIGFuIGFkZGl0aW9uYWwgbGlicmFyeS4KQEAgLTExMCw2ICsxMTIsNyBAQAogCiBmaW5kX2xpYnJhcnkoSWNvbnZfTElCUkFSWQogICBOQU1FUyAke0ljb252X0xJQlJBUllfTkFNRVN9CisgIE5BTUVTX1BFUl9ESVIKICAgRE9DICJpY29udiBsaWJyYXJ5IChwb3RlbnRpYWxseSB0aGUgQyBsaWJyYXJ5KSIpCiAKIG1hcmtfYXNfYWR2YW5jZWQoSWNvbnZfSU5DTFVERV9ESVIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRJbnRsLmNtYWtlIGIvTW9kdWxlcy9GaW5kSW50bC5jbWFrZQppbmRleCAzODE4ZDQ1Li4xYTA5YTYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRJbnRsLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEludGwuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kSW50bAogLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIEZpbmQgdGhlIEdldHRleHQgbGliaW50bCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuCiAKIFRoaXMgbW9kdWxlIHJlcG9ydHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEdldHRleHQgbGliaW50bApAQCAtNDAsNyArNDIsNyBAQAogbWFya19hc19hZHZhbmNlZChJbnRsX0lOQ0xVREVfRElSKQogCiAjIEZpbmQgYWxsIEludGwgbGlicmFyaWVzCi1maW5kX2xpYnJhcnkoSW50bF9MSUJSQVJZICJpbnRsIgorZmluZF9saWJyYXJ5KEludGxfTElCUkFSWSAiaW50bCIgTkFNRVNfUEVSX0RJUgogICBET0MgImxpYmludGwgbGlicmFyaWVzIChpZiBub3QgaW4gdGhlIEMgbGlicmFyeSkiKQogbWFya19hc19hZHZhbmNlZChJbnRsX0xJQlJBUlkpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEpQRUcuY21ha2UgYi9Nb2R1bGVzL0ZpbmRKUEVHLmNtYWtlCmluZGV4IDBiYjY5ODkuLjYzMmZjOWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEpQRUcuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kSlBFRy5jbWFrZQpAQCAtNTgsOCArNTgsOCBAQAogZW5kZm9yZWFjaCgpCiAKIGlmKE5PVCBKUEVHX0xJQlJBUlkpCi0gIGZpbmRfbGlicmFyeShKUEVHX0xJQlJBUllfUkVMRUFTRSBOQU1FUyAke2pwZWdfbmFtZXN9KQotICBmaW5kX2xpYnJhcnkoSlBFR19MSUJSQVJZX0RFQlVHIE5BTUVTICR7anBlZ19uYW1lc19kZWJ1Z30pCisgIGZpbmRfbGlicmFyeShKUEVHX0xJQlJBUllfUkVMRUFTRSBOQU1FUyAke2pwZWdfbmFtZXN9IE5BTUVTX1BFUl9ESVIpCisgIGZpbmRfbGlicmFyeShKUEVHX0xJQlJBUllfREVCVUcgTkFNRVMgJHtqcGVnX25hbWVzX2RlYnVnfSBOQU1FU19QRVJfRElSKQogICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vU2VsZWN0TGlicmFyeUNvbmZpZ3VyYXRpb25zLmNtYWtlKQogICBzZWxlY3RfbGlicmFyeV9jb25maWd1cmF0aW9ucyhKUEVHKQogICBtYXJrX2FzX2FkdmFuY2VkKEpQRUdfTElCUkFSWV9SRUxFQVNFIEpQRUdfTElCUkFSWV9ERUJVRykKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEphdmEuY21ha2UgYi9Nb2R1bGVzL0ZpbmRKYXZhLmNtYWtlCmluZGV4IDk0NWRmM2MuLjlkYjc0MGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEphdmEuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kSmF2YS5jbWFrZQpAQCAtMTYwLDkgKzE2MCw4IEBACiAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQogICAgICAgRVJST1JfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKICAgICBpZiggcmVzICkKLSAgICAgIGlmKHZhciBNQVRDSEVTICJObyBKYXZhIHJ1bnRpbWUgcHJlc2VudCwgcmVxdWVzdGluZyBpbnN0YWxsIikKLSAgICAgICAgc2V0X3Byb3BlcnR5KENBQ0hFIEphdmFfSkFWQV9FWEVDVVRBQkxFCi0gICAgICAgICAgUFJPUEVSVFkgVkFMVUUgIkphdmFfSkFWQV9FWEVDVVRBQkxFLU5PVEZPVU5EIikKKyAgICAgIGlmKHZhciBNQVRDSEVTICJVbmFibGUgdG8gbG9jYXRlIGEgSmF2YSBSdW50aW1lIHRvIGludm9rZXxObyBKYXZhIHJ1bnRpbWUgcHJlc2VudCwgcmVxdWVzdGluZyBpbnN0YWxsIikKKyAgICAgICAgc2V0KEphdmFfSkFWQV9FWEVDVVRBQkxFIEphdmFfSkFWQV9FWEVDVVRBQkxFLU5PVEZPVU5EKQogICAgICAgZWxzZWlmKCR7SmF2YV9GSU5EX1JFUVVJUkVEfSkKICAgICAgICAgbWVzc2FnZSggRkFUQUxfRVJST1IgIkVycm9yIGV4ZWN1dGluZyBqYXZhIC12ZXJzaW9uIiApCiAgICAgICBlbHNlKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZExBUEFDSy5jbWFrZSBiL01vZHVsZXMvRmluZExBUEFDSy5jbWFrZQppbmRleCBjOTYyOTc2Li5mOTk2ZDRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMQVBBQ0suY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTEFQQUNLLmNtYWtlCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgKiBgYE9wZW5CTEFTYGAKICAgKiBgYEZMQU1FYGAKLSAgKiBgYEludGVsMTBfMzJgYCAoaW50ZWwgbWtsIHYxMCAzMiBiaXQpCisgICogYGBJbnRlbDEwXzMyYGAgKGludGVsIG1rbCB2MTAgMzIgYml0LCB0aHJlYWRlZCBjb2RlKQogICAqIGBgSW50ZWwxMF82NGxwYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgbHA2NCBtb2RlbCkKICAgKiBgYEludGVsMTBfNjRscF9zZXFgYCAoaW50ZWwgbWtsIHYxMCsgNjQgYml0LCBzZXF1ZW50aWFsIGNvZGUsIGxwNjQgbW9kZWwpCiAgICogYGBJbnRlbDEwXzY0aWxwYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgaWxwNjQgbW9kZWwpCkBAIC0zOCwxMSArMzgsMjMgQEAKICAgKiBgYEFDTUxgYAogICAqIGBgQXBwbGVgYAogICAqIGBgTkFTYGAKKyAgKiBgYEFybWBgCisgICogYGBBcm1fbXBgYAorICAqIGBgQXJtX2lscDY0YGAKKyAgKiBgYEFybV9pbHA2NF9tcGBgCiAgICogYGBHZW5lcmljYGAKIAogYGBCTEFfRjk1YGAKICAgaWYgYGBPTmBgIHRyaWVzIHRvIGZpbmQgdGhlIEJMQVM5NS9MQVBBQ0s5NSBpbnRlcmZhY2VzCiAKK0ltcG9ydGVkIHRhcmdldHMKK15eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldDoKKworYGBMQVBBQ0s6OkxBUEFDS2BgCisgIFRoZSBsaWJyYXJpZXMgdG8gdXNlIGZvciBMQVBBQ0ssIGlmIGZvdW5kLgorCiBSZXN1bHQgVmFyaWFibGVzCiBeXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTE1MCw2ICsxNjIsNyBAQAogICAgICAgaWYoX2xpYnJhcmllc193b3JrKQogICAgICAgICBmaW5kX2xpYnJhcnkoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZCiAgICAgICAgICAgTkFNRVMgJHtfbGlicmFyeX0KKyAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgUEFUSFMgJHtfZXh0YWRkbGliZGlyfQogICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfc3ViZGlyc30KICAgICAgICAgKQpAQCAtMjY3LDcgKzI4MCw3IEBACiAgICAgICAgICAgc2V0KExBUEFDS19ta2xfT1NfTkFNRSAibGluIikKICAgICAgICAgZW5kaWYoKQogICAgICAgICBpZihERUZJTkVEIEVOVntNS0xST09UfSkKLSAgICAgICAgICBzZXQoTEFQQUNLX21rbF9NS0xST09UICIkRU5We01LTFJPT1R9IikKKyAgICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7TUtMUk9PVH0iIExBUEFDS19ta2xfTUtMUk9PVCkKICAgICAgICAgICAjIElmIE1LTFJPT1QgcG9pbnRzIHRvIHRoZSBzdWJkaXJlY3RvcnkgJ21rbCcsIHVzZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBpbnN0ZWFkCiAgICAgICAgICAgIyBzbyB3ZSBjYW4gYmV0dGVyIGRldGVjdCBvdGhlciByZWxldmFudCBsaWJyYXJpZXMgaW4gJ2NvbXBpbGVyJyBvciAndGJiJzoKICAgICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KExBUEFDS19ta2xfTUtMUk9PVF9MQVNUX0RJUiAiJHtMQVBBQ0tfbWtsX01LTFJPT1R9IiBOQU1FKQpAQCAtMjc3LDcgKzI5MCw5IEBACiAgICAgICAgIGVuZGlmKCkKICAgICAgICAgc2V0KExBUEFDS19ta2xfTElCX1BBVEhfU1VGRklYRVMKICAgICAgICAgICAgICJjb21waWxlci9saWIiICJjb21waWxlci9saWIvJHtMQVBBQ0tfbWtsX0FSQ0hfTkFNRX1fJHtMQVBBQ0tfbWtsX09TX05BTUV9IgorICAgICAgICAgICAgImNvbXBpbGVyL2xpYi8ke0xBUEFDS19ta2xfQVJDSF9OQU1FfSIKICAgICAgICAgICAgICJta2wvbGliIiAibWtsL2xpYi8ke0xBUEFDS19ta2xfQVJDSF9OQU1FfV8ke0xBUEFDS19ta2xfT1NfTkFNRX0iCisgICAgICAgICAgICAibWtsL2xpYi8ke0xBUEFDS19ta2xfQVJDSF9OQU1FfSIKICAgICAgICAgICAgICJsaWIvJHtMQVBBQ0tfbWtsX0FSQ0hfTkFNRX1fJHtMQVBBQ0tfbWtsX09TX05BTUV9IikKIAogICAgICAgICAjIEZpcnN0IHRyeSBlbXB0eSBsYXBhY2sgbGlicwpAQCAtMzU5LDYgKzM3NCwzNiBAQAogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCisgICMgQXJtUEw/IChodHRwczovL2RldmVsb3Blci5hcm0uY29tL3Rvb2xzLWFuZC1zb2Z0d2FyZS9zZXJ2ZXItYW5kLWhwYy9jb21waWxlL2FybS1jb21waWxlci1mb3ItbGludXgvYXJtLXBlcmZvcm1hbmNlLWxpYnJhcmllcykKKyAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJBcm0iIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisKKyAgICAjIENoZWNrIGZvciA2NGJpdCBJbnRlZ2VyIHN1cHBvcnQKKyAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl9pbHA2NCIpCisgICAgICBzZXQoTEFQQUNLX2FybXBsX0xJQiAiYXJtcGxfaWxwNjQiKQorICAgIGVsc2UoKQorICAgICAgc2V0KExBUEFDS19hcm1wbF9MSUIgImFybXBsX2xwNjQiKQorICAgIGVuZGlmKCkKKworICAgICMgQ2hlY2sgZm9yIE9wZW5NUCBzdXBwb3J0LCBWSUEgQkxBX1ZFTkRPUiBvZiBBcm1fbXAgb3IgQXJtX2lwbDY0X21wCisgICAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJfbXAiKQorICAgICBzZXQoTEFQQUNLX2FybXBsX0xJQiAiJHtMQVBBQ0tfYXJtcGxfTElCfV9tcCIpCisgICAgZW5kaWYoKQorCisgICAgaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCisgICAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAorICAgICAgICBMQVBBQ0tfTElCUkFSSUVTCisgICAgICAgIExBUEFDSworICAgICAgICBjaGVldgorICAgICAgICAiIgorICAgICAgICAiJHtMQVBBQ0tfYXJtcGxfTElCfSIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiR7QkxBU19MSUJSQVJJRVN9IgorICAgICAgKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCiAgICMgRkxBTUUncyBibGlzIGxpYnJhcnk/IChodHRwczovL2dpdGh1Yi5jb20vZmxhbWUvYmxpcykKICAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiRkxBTUUiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCkBAIC00OTIsNSArNTM3LDIyIEBACiAgIHNldChMQVBBQ0tfTElCUkFSSUVTICIiKQogZW5kaWYoKQogCitpZihOT1QgVEFSR0VUIExBUEFDSzo6TEFQQUNLKQorICBhZGRfbGlicmFyeShMQVBBQ0s6OkxBUEFDSyBJTlRFUkZBQ0UgSU1QT1JURUQpCisgIHNldChfbGFwYWNrX2xpYnMgIiR7TEFQQUNLX0xJQlJBUklFU30iKQorICBpZihfbGFwYWNrX2xpYnMgQU5EIFRBUkdFVCBCTEFTOjpCTEFTKQorICAgICMgcmVtb3ZlIHRoZSAke0JMQVNfTElCUkFSSUVTfSBmcm9tIHRoZSBpbnRlcmZhY2UgYW5kIHJlcGxhY2UgaXQKKyAgICAjIHdpdGggdGhlIEJMQVM6OkJMQVMgdGFyZ2V0CisgICAgbGlzdChSRU1PVkVfSVRFTSBfbGFwYWNrX2xpYnMgIiR7QkxBU19MSUJSQVJJRVN9IikKKyAgZW5kaWYoKQorCisgIGlmKF9sYXBhY2tfbGlicykKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTEFQQUNLOjpMQVBBQ0sgUFJPUEVSVElFUworICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTICIke19sYXBhY2tfbGlic30iCisgICAgKQorICBlbmRpZigpCisgIHVuc2V0KF9sYXBhY2tfbGlicykKK2VuZGlmKCkKKwogY21ha2VfcG9wX2NoZWNrX3N0YXRlKCkKIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgJHtfbGFwYWNrX09SSUdfQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZExUVG5nVVNULmNtYWtlIGIvTW9kdWxlcy9GaW5kTFRUbmdVU1QuY21ha2UKaW5kZXggOWNkMTdlYi4uZjQ3OGU0ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTFRUbmdVU1QuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTFRUbmdVU1QuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kTFRUbmdVU1QKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogRmluZAogYExpbnV4IFRyYWNlIFRvb2xraXQgTmV4dCBHZW5lcmF0aW9uIChMVFRuZy1VU1QpIDxodHRwOi8vbHR0bmcub3JnLz5gX18gbGlicmFyeS4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTGliTFpNQS5jbWFrZSBiL01vZHVsZXMvRmluZExpYkxaTUEuY21ha2UKaW5kZXggMjAwZDZiZi4uNGE3OWExMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTGliTFpNQS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMaWJMWk1BLmNtYWtlCkBAIC00Myw4ICs0Myw4IEBACiAKIGZpbmRfcGF0aChMSUJMWk1BX0lOQ0xVREVfRElSIGx6bWEuaCApCiBpZihOT1QgTElCTFpNQV9MSUJSQVJZKQotICBmaW5kX2xpYnJhcnkoTElCTFpNQV9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgbHptYSBsaWJsem1hIFBBVEhfU1VGRklYRVMgbGliKQotICBmaW5kX2xpYnJhcnkoTElCTFpNQV9MSUJSQVJZX0RFQlVHIE5BTUVTIGx6bWFkIGxpYmx6bWFkIFBBVEhfU1VGRklYRVMgbGliKQorICBmaW5kX2xpYnJhcnkoTElCTFpNQV9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgbHptYSBsaWJsem1hIE5BTUVTX1BFUl9ESVIgUEFUSF9TVUZGSVhFUyBsaWIpCisgIGZpbmRfbGlicmFyeShMSUJMWk1BX0xJQlJBUllfREVCVUcgTkFNRVMgbHptYWQgbGlibHptYWQgTkFNRVNfUEVSX0RJUiBQQVRIX1NVRkZJWEVTIGxpYikKICAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1NlbGVjdExpYnJhcnlDb25maWd1cmF0aW9ucy5jbWFrZSkKICAgc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoTElCTFpNQSkKIGVsc2UoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTGliWHNsdC5jbWFrZSBiL01vZHVsZXMvRmluZExpYlhzbHQuY21ha2UKaW5kZXggMDFhOWQ4Yi4uZmM3YWRlYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTGliWHNsdC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMaWJYc2x0LmNtYWtlCkBAIC04LDkgKzgsMjIgQEAKIEZpbmQgdGhlIFhTTCBUcmFuc2Zvcm1hdGlvbnMsIEV4dGVuc2libGUgU3R5bGVzaGVldCBMYW5ndWFnZQogVHJhbnNmb3JtYXRpb25zIChYU0xUKSBsaWJyYXJ5IChMaWJYc2x0KQogCi1PbmNlIGRvbmUgdGhpcyB3aWxsIGRlZmluZQorSU1QT1JURUQgVGFyZ2V0cworXl5eXl5eXl5eXl5eXl5eXgogCi06OgorVGhlIGZvbGxvd2luZyA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXRzIG1heSBiZSBkZWZpbmVkOgorCitgYExpYlhzbHQ6OkxpYlhzbHRgYAorICBJZiB0aGUgbGlieHNsdCBsaWJyYXJ5IGhhcyBiZWVuIGZvdW5kCitgYExpYlhzbHQ6OkxpYkV4c2x0YGAKKyAgSWYgdGhlIGxpYmV4c2x0IGxpYnJhcnkgaGFzIGJlZW4gZm91bmQKK2BgTGliWHNsdDo6eHNsdHByb2NgYAorICBJZiB0aGUgeHNsdHByb2MgY29tbWFuZC1saW5lIGV4ZWN1dGFibGUgaGFzIGJlZW4gZm91bmQKKworUmVzdWx0IHZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSB3aWxsIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB5b3VyIHByb2plY3Q6CiAKICAgTElCWFNMVF9GT1VORCAtIHN5c3RlbSBoYXMgTGliWHNsdAogICBMSUJYU0xUX0lOQ0xVREVfRElSIC0gdGhlIExpYlhzbHQgaW5jbHVkZSBkaXJlY3RvcnkKQEAgLTIxLDYgKzM0LDggQEAKIEFkZGl0aW9uYWxseSwgdGhlIGZvbGxvd2luZyB0d28gdmFyaWFibGVzIGFyZSBzZXQgKGJ1dCBub3QgcmVxdWlyZWQKIGZvciB1c2luZyB4c2x0KToKIAorYGBMSUJYU0xUX0VYU0xUX0lOQ0xVREVfRElSYGAKKyAgVGhlIGluY2x1ZGUgZGlyZWN0b3J5IGZvciBleHNsdC4KIGBgTElCWFNMVF9FWFNMVF9MSUJSQVJJRVNgYAogICBMaW5rIHRvIHRoZXNlIGlmIHlvdSBuZWVkIHRvIGxpbmsgYWdhaW5zdCB0aGUgZXhzbHQgbGlicmFyeS4KIGBgTElCWFNMVF9YU0xUUFJPQ19FWEVDVVRBQkxFYGAKQEAgLTM5LDE2ICs1NCwzNiBAQAogICAgJHtQQ19MSUJYU0xUX0lOQ0xVREVfRElSU30KICAgKQogCi1maW5kX2xpYnJhcnkoTElCWFNMVF9MSUJSQVJJRVMgTkFNRVMgeHNsdCBsaWJ4c2x0CisjIENNYWtlIDMuMTcgYW5kIGJlbG93IHVzZWQgJ0xJQlhTTFRfTElCUkFSSUVTJyBhcyB0aGUgbmFtZSBvZgorIyB0aGUgY2FjaGUgZW50cnkgc3RvcmluZyB0aGUgZmluZF9saWJyYXJ5IHJlc3VsdC4gIFVzZSB0aGUKKyMgdmFsdWUgaWYgaXQgd2FzIHNldCBieSB0aGUgcHJvamVjdCBvciB1c2VyLgoraWYoREVGSU5FRCBMSUJYU0xUX0xJQlJBUklFUyBBTkQgTk9UIERFRklORUQgTElCWFNMVF9MSUJSQVJZKQorICBzZXQoTElCWFNMVF9MSUJSQVJZICR7TElCWFNMVF9MSUJSQVJJRVN9KQorZW5kaWYoKQorCitmaW5kX2xpYnJhcnkoTElCWFNMVF9MSUJSQVJZIE5BTUVTIHhzbHQgbGlieHNsdAogICAgIEhJTlRTCiAgICAke1BDX0xJQlhTTFRfTElCRElSfQogICAgJHtQQ19MSUJYU0xUX0xJQlJBUllfRElSU30KICAgKQogCitzZXQoTElCWFNMVF9MSUJSQVJJRVMgJHtMSUJYU0xUX0xJQlJBUll9KQorCitQS0dfQ0hFQ0tfTU9EVUxFUyhQQ19MSUJYU0xUX0VYU0xUIFFVSUVUIGxpYmV4c2x0KQorc2V0KExJQlhTTFRfRVhTTFRfREVGSU5JVElPTlMgJHtQQ19MSUJYU0xUX0VYU0xUX0NGTEFHU19PVEhFUn0pCisKK2ZpbmRfcGF0aChMSUJYU0xUX0VYU0xUX0lOQ0xVREVfRElSIE5BTUVTIGxpYmV4c2x0L2V4c2x0LmgKKyAgSElOVFMKKyAgJHtQQ19MSUJYU0xUX0VYU0xUX0lOQ0xVREVESVJ9CisgICR7UENfTElCWFNMVF9FWFNMVF9JTkNMVURFX0RJUlN9CispCisKIGZpbmRfbGlicmFyeShMSUJYU0xUX0VYU0xUX0xJQlJBUlkgTkFNRVMgZXhzbHQgbGliZXhzbHQKICAgICBISU5UUwogICAgICR7UENfTElCWFNMVF9MSUJESVJ9CiAgICAgJHtQQ19MSUJYU0xUX0xJQlJBUllfRElSU30KKyAgICAke1BDX0xJQlhTTFRfRVhTTFRfTElCRElSfQorICAgICR7UENfTElCWFNMVF9FWFNMVF9MSUJSQVJZX0RJUlN9CiAgICkKIAogc2V0KExJQlhTTFRfRVhTTFRfTElCUkFSSUVTICR7TElCWFNMVF9FWFNMVF9MSUJSQVJZfSApCkBAIC03NSwzICsxMTAsMjIgQEAKICAgICAgICAgICAgICAgICAgTElCWFNMVF9MSUJSQVJJRVMKICAgICAgICAgICAgICAgICAgTElCWFNMVF9FWFNMVF9MSUJSQVJZCiAgICAgICAgICAgICAgICAgIExJQlhTTFRfWFNMVFBST0NfRVhFQ1VUQUJMRSkKKworaWYoTElCWFNMVF9GT1VORCBBTkQgTk9UIFRBUkdFVCBMaWJYc2x0OjpMaWJYc2x0KQorICBhZGRfbGlicmFyeShMaWJYc2x0OjpMaWJYc2x0IFVOS05PV04gSU1QT1JURUQpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYc2x0OjpMaWJYc2x0IFBST1BFUlRJRVMgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7TElCWFNMVF9JTkNMVURFX0RJUn0iKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliWHNsdDo6TGliWHNsdCBQUk9QRVJUSUVTIElOVEVSRkFDRV9DT01QSUxFX09QVElPTlMgIiR7TElCWFNMVF9ERUZJTklUSU9OU30iKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIExpYlhzbHQ6OkxpYlhzbHQgQVBQRU5EIFBST1BFUlRZIElNUE9SVEVEX0xPQ0FUSU9OICIke0xJQlhTTFRfTElCUkFSWX0iKQorZW5kaWYoKQorCitpZihMSUJYU0xUX0ZPVU5EIEFORCBOT1QgVEFSR0VUIExpYlhzbHQ6OkxpYkV4c2x0KQorICBhZGRfbGlicmFyeShMaWJYc2x0OjpMaWJFeHNsdCBVTktOT1dOIElNUE9SVEVEKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliWHNsdDo6TGliRXhzbHQgUFJPUEVSVElFUyBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtMSUJYU0xUX0VYU0xUX0lOQ0xVREVfRElSfSIpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYc2x0OjpMaWJFeHNsdCBQUk9QRVJUSUVTIElOVEVSRkFDRV9DT01QSUxFX09QVElPTlMgIiR7TElCWFNMVF9FWFNMVF9ERUZJTklUSU9OU30iKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIExpYlhzbHQ6OkxpYkV4c2x0IEFQUEVORCBQUk9QRVJUWSBJTVBPUlRFRF9MT0NBVElPTiAiJHtMSUJYU0xUX0VYU0xUX0xJQlJBUll9IikKK2VuZGlmKCkKKworaWYoTElCWFNMVF9YU0xUUFJPQ19FWEVDVVRBQkxFIEFORCBOT1QgVEFSR0VUIExpYlhzbHQ6OnhzbHRwcm9jKQorICBhZGRfZXhlY3V0YWJsZShMaWJYc2x0Ojp4c2x0cHJvYyBJTVBPUlRFRCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKExpYlhzbHQ6OnhzbHRwcm9jIFBST1BFUlRJRVMgSU1QT1JURURfTE9DQVRJT04gIiR7TElCWFNMVF9YU0xUUFJPQ19FWEVDVVRBQkxFfSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRMaWJpbnB1dC5jbWFrZSBiL01vZHVsZXMvRmluZExpYmlucHV0LmNtYWtlCmluZGV4IGMxZmU0NTUuLjg4ZDViMmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZExpYmlucHV0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZExpYmlucHV0LmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZExpYmlucHV0CiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBGaW5kIGxpYmlucHV0IGhlYWRlcnMgYW5kIGxpYnJhcnkuCiAKIEltcG9ydGVkIFRhcmdldHMKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEx1YS5jbWFrZSBiL01vZHVsZXMvRmluZEx1YS5jbWFrZQppbmRleCAwYjBjOTcwLi5jNDM2MWI3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMdWEuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTHVhLmNtYWtlCkBAIC00OCw3ICs0OCw3IEBACiAKICMgdGhpcyBpcyBhIGZ1bmN0aW9uIG9ubHkgdG8gaGF2ZSBhbGwgdGhlIHZhcmlhYmxlcyBpbnNpZGUgZ28gYXdheSBhdXRvbWF0aWNhbGx5CiBmdW5jdGlvbihfbHVhX2dldF92ZXJzaW9ucykKLSAgICBzZXQoTFVBX1ZFUlNJT05TNSA1LjMgNS4yIDUuMSA1LjApCisgICAgc2V0KExVQV9WRVJTSU9OUzUgNS40IDUuMyA1LjIgNS4xIDUuMCkKIAogICAgIGlmIChMdWFfRklORF9WRVJTSU9OX0VYQUNUKQogICAgICAgICBpZiAoTHVhX0ZJTkRfVkVSU0lPTl9DT1VOVCBHUkVBVEVSIDEpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRNUEkuY21ha2UgYi9Nb2R1bGVzL0ZpbmRNUEkuY21ha2UKaW5kZXggY2RiYjkyNy4uMjVkZTU2MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTVBJLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZE1QSS5jbWFrZQpAQCAtODY3LDExICs4NjcsMTEgQEAKICAgICAgICMgV2UgZmlyc3QgYXR0ZW1wdCB0byBsb2NhdGUgdGhlIG1zbXBpLmxpYi4gU2hvdWxkIGJlIGZpbmQgaXQsIHdlJ2xsIGFzc3VtZSB0aGF0IHRoZSBNUEkgcHJlc2VudCBpcyBpbmRlZWQKICAgICAgICMgTWljcm9zb2Z0IE1QSS4KICAgICAgIGlmKCIke0NNQUtFX1NJWkVPRl9WT0lEX1B9IiBFUVVBTCA4KQotICAgICAgICBzZXQoTVBJX01TTVBJX0xJQl9QQVRIICIkRU5We01TTVBJX0xJQjY0fSIpCi0gICAgICAgIHNldChNUElfTVNNUElfSU5DX1BBVEhfRVhUUkEgIiRFTlZ7TVNNUElfSU5DfS94NjQiKQorICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7TVNNUElfTElCNjR9IiBNUElfTVNNUElfTElCX1BBVEgpCisgICAgICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntNU01QSV9JTkN9L3g2NCIgTVBJX01TTVBJX0lOQ19QQVRIX0VYVFJBKQogICAgICAgZWxzZSgpCi0gICAgICAgIHNldChNUElfTVNNUElfTElCX1BBVEggIiRFTlZ7TVNNUElfTElCMzJ9IikKLSAgICAgICAgc2V0KE1QSV9NU01QSV9JTkNfUEFUSF9FWFRSQSAiJEVOVntNU01QSV9JTkN9L3g4NiIpCisgICAgICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntNU01QSV9MSUIzMn0iIE1QSV9NU01QSV9MSUJfUEFUSCkKKyAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We01TTVBJX0lOQ30veDg2IiBNUElfTVNNUElfSU5DX1BBVEhfRVhUUkEpCiAgICAgICBlbmRpZigpCiAKICAgICAgIGZpbmRfbGlicmFyeShNUElfbXNtcGlfTElCUkFSWQpAQCAtMTE1Myw4ICsxMTUzLDEwIEBACiAgICAgYWRkX2xpYnJhcnkoTVBJOjpNUElfJHtMQU5HfSBJTlRFUkZBQ0UgSU1QT1JURUQpCiAgIGVuZGlmKCkKIAotICAjIFdoZW4gdGhpcyBpcyBjb25zdW1lZCBmb3IgY29tcGlsaW5nIENVREEsIHVzZSAnLVhjb21waWxlcicgdG8gd3JhcCAnLXB0aHJlYWQnLgotICBzdHJpbmcoUkVQTEFDRSAiLXB0aHJlYWQiICIkPCQ8Q09NUElMRV9MQU5HVUFHRTpDVURBPjpTSEVMTDotWGNvbXBpbGVyID4tcHRocmVhZCIKKyAgIyBXaGVuIHRoaXMgaXMgY29uc3VtZWQgZm9yIGNvbXBpbGluZyBDVURBLCB1c2UgJy1YY29tcGlsZXInIHRvIHdyYXAgJy1wdGhyZWFkJyBhbmQgJy1mZXhjZXB0aW9ucycuCisgIHN0cmluZyhSRVBMQUNFICItcHRocmVhZCIgIiQ8JDxDT01QSUxFX0xBTkdfQU5EX0lEOkNVREEsTlZJRElBPjpTSEVMTDotWGNvbXBpbGVyID4tcHRocmVhZCIKKyAgICBfTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TICIke01QSV8ke0xBTkd9X0NPTVBJTEVfT1BUSU9OU30iKQorICBzdHJpbmcoUkVQTEFDRSAiLWZleGNlcHRpb25zIiAiJDwkPENPTVBJTEVfTEFOR19BTkRfSUQ6Q1VEQSxOVklESUE+OlNIRUxMOi1YY29tcGlsZXIgPi1mZXhjZXB0aW9ucyIKICAgICBfTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TICIke01QSV8ke0xBTkd9X0NPTVBJTEVfT1BUSU9OU30iKQogICBzZXRfcHJvcGVydHkoVEFSR0VUIE1QSTo6TVBJXyR7TEFOR30gUFJPUEVSVFkgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyAiJHtfTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TfSIpCiAgIHVuc2V0KF9NUElfJHtMQU5HfV9DT01QSUxFX09QVElPTlMpCkBAIC0xMTYyLDYgKzExNjQsOCBAQAogICBzZXRfcHJvcGVydHkoVEFSR0VUIE1QSTo6TVBJXyR7TEFOR30gUFJPUEVSVFkgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgIiR7TVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OU30iKQogCiAgIGlmKE1QSV8ke0xBTkd9X0xJTktfRkxBR1MpCisgICAgc3RyaW5nKFJFUExBQ0UgIi1wdGhyZWFkIiAiJDwkPExJTktfTEFOR19BTkRfSUQ6Q1VEQSxOVklESUE+Oi1YbGlua2VyID4tcHRocmVhZCIKKyAgICAgIF9NUElfJHtMQU5HfV9MSU5LX0ZMQUdTICIke01QSV8ke0xBTkd9X0xJTktfRkxBR1N9IikKICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIE1QSTo6TVBJXyR7TEFOR30gUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfT1BUSU9OUyAiU0hFTEw6JHtNUElfJHtMQU5HfV9MSU5LX0ZMQUdTfSIpCiAgIGVuZGlmKCkKICAgIyBJZiB0aGUgY29tcGlsZXIgbGlua3MgTVBJIGltcGxpY2l0bHksIG5vIGxpYnJhcmllcyB3aWxsIGJlIGZvdW5kIGFzIHRoZXkncmUgY29udGFpbmVkIHdpdGhpbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTWF0bGFiLmNtYWtlIGIvTW9kdWxlcy9GaW5kTWF0bGFiLmNtYWtlCmluZGV4IGU0MmMyMDYuLjA1ZWMzYWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE1hdGxhYi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRNYXRsYWIuY21ha2UKQEAgLTk5Miw3ICs5OTIsMTAgQEAKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAotICBpZihOT1QgTWF0bGFiX1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAiOS40IikgIyBGb3IgOS40IChSMjAxOGEpIGFuZCBuZXdlciwgYWRkIEFQSSBtYWNybworICAjIEZvciA5LjQgKFIyMDE4YSkgYW5kIG5ld2VyLCBhZGQgQVBJIG1hY3JvLgorICAjIEFkZCBpdCBmb3IgdW5rbm93biB2ZXJzaW9ucyB0b28sIGp1c3QgaW4gY2FzZS4KKyAgaWYoTk9UIE1hdGxhYl9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgIjkuNCIKKyAgICAgIE9SIE1hdGxhYl9WRVJTSU9OX1NUUklORyBTVFJFUVVBTCAidW5rbm93biIpCiAgICAgaWYoJHske3ByZWZpeH1fUjIwMThhfSkKICAgICAgIHNldChNRVhfQVBJX01BQ1JPICJNQVRMQUJfREVGQVVMVF9SRUxFQVNFPVIyMDE4YSIpCiAgICAgZWxzZSgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRPREJDLmNtYWtlIGIvTW9kdWxlcy9GaW5kT0RCQy5jbWFrZQppbmRleCAzZjcxMGRiLi44ODQ2NTNjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRPREJDLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZE9EQkMuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kT0RCQwogLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBGaW5kIGFuIE9wZW4gRGF0YWJhc2UgQ29ubmVjdGl2aXR5IChPREJDKSBpbmNsdWRlIGRpcmVjdG9yeSBhbmQgbGlicmFyeS4KIAogT24gV2luZG93cywgd2hlbiBidWlsZGluZyB3aXRoIFZpc3VhbCBTdHVkaW8sIHRoaXMgbW9kdWxlIGFzc3VtZXMgdGhlIE9EQkMKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9wZW5BQ0MuY21ha2UgYi9Nb2R1bGVzL0ZpbmRPcGVuQUNDLmNtYWtlCmluZGV4IDM5OGRjZjUuLmVkNTJlMzUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE9wZW5BQ0MuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT3BlbkFDQy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRPcGVuQUNDCiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIERldGVjdCBPcGVuQUNDIHN1cHBvcnQgYnkgdGhlIGNvbXBpbGVyLgogCiBUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0byBkZXRlY3QgT3BlbkFDQyBzdXBwb3J0IGluIGEgY29tcGlsZXIuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRPcGVuQUwuY21ha2UgYi9Nb2R1bGVzL0ZpbmRPcGVuQUwuY21ha2UKaW5kZXggMjdkY2FmNS4uYjViOTJjNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kT3BlbkFMLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZE9wZW5BTC5jbWFrZQpAQCAtNSwyNyArNSw0NSBAQAogRmluZE9wZW5BTAogLS0tLS0tLS0tLQogCi0KIEZpbmRzIE9wZW4gQXVkaW8gTGlicmFyeSAoT3BlbkFMKS4KLVRoaXMgbW9kdWxlIGRlZmluZXMgYGBPUEVOQUxfTElCUkFSWSBPUEVOQUxfRk9VTkRgYCwgaWYKLWZhbHNlLCBkbyBub3QgdHJ5IHRvIGxpbmsgdG8gT3BlbkFMIGBgT1BFTkFMX0lOQ0xVREVfRElSYGAsIHdoZXJlIHRvIGZpbmQKLXRoZSBoZWFkZXJzLgogCi1gYCRPUEVOQUxESVJgYCBpcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdvdWxkIGNvcnJlc3BvbmQgdG8gdGhlCi1gYC4vY29uZmlndXJlIC0tcHJlZml4PSRPUEVOQUxESVJgYCB1c2VkIGluIGJ1aWxkaW5nIE9wZW5BTC4KK1Byb2plY3RzIHVzaW5nIHRoaXMgbW9kdWxlIHNob3VsZCB1c2UgYGAjaW5jbHVkZSAiYWwuaCJgYCB0byBpbmNsdWRlIHRoZSBPcGVuQUwKK2hlYWRlciBmaWxlLCAqKm5vdCoqIGBgI2luY2x1ZGUgPEFML2FsLmg+YGAuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlCitsYXR0ZXIgaXMgbm90IGVudGlyZWx5IHBvcnRhYmxlLiAgV2luZG93cy9DcmVhdGl2ZSBMYWJzIGRvZXMgbm90IGJ5IGRlZmF1bHQgcHV0Cit0aGVpciBoZWFkZXJzIGluIGBgQUwvYGAgYW5kIG1hY09TIHVzZXMgdGhlIGNvbnZlbnRpb24gYGA8T3BlbkFML2FsLmg+YGAuCiAKLUNyZWF0ZWQgYnkgRXJpYyBXaW5nLiAgVGhpcyB3YXMgaW5mbHVlbmNlZCBieSB0aGUgYGBGaW5kU0RMLmNtYWtlYGAKLW1vZHVsZS4KK0hpbnRzCiteXl5eXgorCitFbnZpcm9ubWVudCB2YXJpYWJsZSBgYCRPUEVOQUxESVJgYCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHByZWZpeCBvZiBPcGVuQUwKK2luc3RhbGxhdGlvbiB0byBiZSBmb3VuZC4KKworQnkgZGVmYXVsdCBvbiBtYWNPUywgc3lzdGVtIGZyYW1ld29yayBpcyBzZWFyY2ggZmlyc3QuICBJbiBvdGhlciB3b3JkcywKK09wZW5BTCBpcyBzZWFyY2hlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorCisxLiBTeXN0ZW0gZnJhbWV3b3JrOiBgYC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzYGAsIHdob3NlIHByaW9yaXR5IGNhbiBiZQorICAgY2hhbmdlZCB2aWEgc2V0dGluZyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX0ZSQU1FV09SS2AgdmFyaWFibGUuCisyLiBFbnZpcm9ubWVudCB2YXJpYWJsZSBgYCRPUEVOQUxESVJgYC4KKzMuIFN5c3RlbSBwYXRocy4KKzQuIFVzZXItY29tcGlsZWQgZnJhbWV3b3JrOiBgYH4vTGlicmFyeS9GcmFtZXdvcmtzYGAuCis1LiBNYW51YWxseSBjb21waWxlZCBmcmFtZXdvcms6IGBgL0xpYnJhcnkvRnJhbWV3b3Jrc2BgLgorNi4gQWRkLW9uIHBhY2thZ2U6IGBgL29wdGBgLgorCitSZXN1bHQgVmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisKK2BgT1BFTkFMX0ZPVU5EYGAKKyAgSWYgZmFsc2UsIGRvIG5vdCB0cnkgdG8gbGluayB0byBPcGVuQUwKK2BgT1BFTkFMX0lOQ0xVREVfRElSYGAKKyAgT3BlbkFMIGluY2x1ZGUgZGlyZWN0b3J5CitgYE9QRU5BTF9MSUJSQVJZYGAKKyAgUGF0aCB0byB0aGUgT3BlbkFMIGxpYnJhcnkKK2BgT1BFTkFMX1ZFUlNJT05fU1RSSU5HYGAKKyAgSHVtYW4tcmVhZGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgT3BlbkFMCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi0jIFRoaXMgbWFrZXMgdGhlIHByZXN1bXB0aW9uIHRoYXQgeW91IGFyZSBpbmNsdWRlIGFsLmggbGlrZQotIyAjaW5jbHVkZSAiYWwuaCIKLSMgYW5kIG5vdAotIyAjaW5jbHVkZSA8QUwvYWwuaD4KLSMgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBsYXR0ZXIgaXMgbm90IGVudGlyZWx5IHBvcnRhYmxlLgotIyBXaW5kb3dzL0NyZWF0aXZlIExhYnMgZG9lcyBub3QgYnkgZGVmYXVsdCBwdXQgdGhlaXIgaGVhZGVycyBpbiBBTC8gYW5kCi0jIE9TIFggdXNlcyB0aGUgY29udmVudGlvbiA8T3BlbkFML2FsLmg+LgotIwogIyBGb3IgV2luZG93cywgQ3JlYXRpdmUgTGFicyBzZWVtcyB0byBoYXZlIGFkZGVkIGEgcmVnaXN0cnkga2V5IGZvciB0aGVpcgogIyBPcGVuQUwgMS4xIGluc3RhbGxlci4gSSBoYXZlIGFkZGVkIHRoYXQga2V5IHRvIHRoZSBsaXN0IG9mIHNlYXJjaCBwYXRocywKICMgaG93ZXZlciwgdGhlIGtleSBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgbGl0dGxlIGZyYWdpbGUgZGVwZW5kaW5nIG9uCkBAIC0zNiwzNiArNTQsMTcgQEAKICMgcGxhdGZvcm1zIGFyZSBpbnRyb2R1Y2VkLgogIyBUaGUgT3BlbkFMIDEuMCBpbnN0YWxsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSB1c2VmdWwga2V5IEkgY2FuIHVzZS4KICMgSSBkbyBub3Qga25vdyBpZiB0aGUgTnZpZGlhIE9wZW5BTCBTREsgaGFzIGEgcmVnaXN0cnkga2V5LgotIwotIyBGb3IgT1MgWCwgcmVtZW1iZXIgdGhhdCBPcGVuQUwgd2FzIGFkZGVkIGJ5IEFwcGxlIGluIDEwLjQgKFRpZ2VyKS4KLSMgVG8gc3VwcG9ydCB0aGUgZnJhbWV3b3JrLCBJIG9yaWdpbmFsbHkgd3JvdGUgc3BlY2lhbCBmcmFtZXdvcmsgZGV0ZWN0aW9uCi0jIGNvZGUgaW4gdGhpcyBtb2R1bGUgd2hpY2ggSSBoYXZlIG5vdyByZW1vdmVkIHdpdGggQ01ha2UncyBpbnRyb2R1Y3Rpb24KLSMgb2YgbmF0aXZlIHN1cHBvcnQgZm9yIGZyYW1ld29ya3MuCi0jIEluIGFkZGl0aW9uLCBPcGVuQUwgaXMgb3BlbiBzb3VyY2UsIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIG9uIFBhbnRoZXIuCi0jIEZ1cnRoZXJtb3JlLCBkdWUgdG8gYnVncyBpbiB0aGUgaW5pdGlhbCBPcGVuQUwgcmVsZWFzZSwgYW5kIHRoZQotIyB0cmFuc2l0aW9uIHRvIE9wZW5BTCAxLjEsIGl0IGlzIGNvbW1vbiB0byBuZWVkIHRvIG92ZXJyaWRlIHRoZSBidWlsdC1pbgotIyBmcmFtZXdvcmsuCi0jIFBlciBteSByZXF1ZXN0LCBDTWFrZSBzaG91bGQgc2VhcmNoIGZvciBmcmFtZXdvcmtzIGZpcnN0IGluCi0jIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0jIH4vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5BTC5mcmFtZXdvcmsvSGVhZGVycwotIyAvTGlicmFyeS9GcmFtZXdvcmtzL09wZW5BTC5mcmFtZXdvcmsvSGVhZGVycwotIyAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuQUwuZnJhbWV3b3JrL0hlYWRlcnMKLSMKLSMgT24gT1MgWCwgdGhpcyB3aWxsIHByZWZlciB0aGUgRnJhbWV3b3JrIHZlcnNpb24gKGlmIGZvdW5kKSBvdmVyIG90aGVycy4KLSMgUGVvcGxlIHdpbGwgaGF2ZSB0byBtYW51YWxseSBjaGFuZ2UgdGhlIGNhY2hlIHZhbHVlcyBvZgotIyBPUEVOQUxfTElCUkFSWSB0byBvdmVycmlkZSB0aGlzIHNlbGVjdGlvbiBvciBzZXQgdGhlIENNYWtlIGVudmlyb25tZW50Ci0jIENNQUtFX0lOQ0xVREVfUEFUSCB0byBtb2RpZnkgdGhlIHNlYXJjaCBwYXRocy4KIAogZmluZF9wYXRoKE9QRU5BTF9JTkNMVURFX0RJUiBhbC5oCiAgIEhJTlRTCiAgICAgRU5WIE9QRU5BTERJUgotICBQQVRIX1NVRkZJWEVTIGluY2x1ZGUvQUwgaW5jbHVkZS9PcGVuQUwgaW5jbHVkZSBBTCBPcGVuQUwKICAgUEFUSFMKLSAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MKLSAgL0xpYnJhcnkvRnJhbWV3b3JrcwotICAvb3B0Ci0gIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxDcmVhdGl2ZVwgTGFic1xcT3BlbkFMXCAxLjFcIFNvZnR3YXJlXCBEZXZlbG9wbWVudFwgS2l0XFwxLjAwLjAwMDA7SW5zdGFsbERpcl0KLSkKKyAgICB+L0xpYnJhcnkvRnJhbWV3b3JrcworICAgIC9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAvb3B0CisgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENyZWF0aXZlXCBMYWJzXFxPcGVuQUxcIDEuMVwgU29mdHdhcmVcIERldmVsb3BtZW50XCBLaXRcXDEuMDAuMDAwMDtJbnN0YWxsRGlyXQorICBQQVRIX1NVRkZJWEVTIGluY2x1ZGUvQUwgaW5jbHVkZS9PcGVuQUwgaW5jbHVkZSBBTCBPcGVuQUwKKyAgKQogCiBpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCiAgIHNldChfT3BlbkFMX0FSQ0hfRElSIGxpYnMvV2luNjQpCkBAIC03NywxNyArNzYsMjEgQEAKICAgTkFNRVMgT3BlbkFMIGFsIG9wZW5hbCBPcGVuQUwzMgogICBISU5UUwogICAgIEVOViBPUEVOQUxESVIKLSAgUEFUSF9TVUZGSVhFUyBsaWJ4MzIgbGliNjQgbGliIGxpYnM2NCBsaWJzICR7X09wZW5BTF9BUkNIX0RJUn0KICAgUEFUSFMKLSAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MKLSAgL0xpYnJhcnkvRnJhbWV3b3JrcwotICAvb3B0Ci0gIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxDcmVhdGl2ZVwgTGFic1xcT3BlbkFMXCAxLjFcIFNvZnR3YXJlXCBEZXZlbG9wbWVudFwgS2l0XFwxLjAwLjAwMDA7SW5zdGFsbERpcl0KLSkKKyAgICB+L0xpYnJhcnkvRnJhbWV3b3JrcworICAgIC9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAvb3B0CisgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENyZWF0aXZlXCBMYWJzXFxPcGVuQUxcIDEuMVwgU29mdHdhcmVcIERldmVsb3BtZW50XCBLaXRcXDEuMDAuMDAwMDtJbnN0YWxsRGlyXQorICBQQVRIX1NVRkZJWEVTIGxpYngzMiBsaWI2NCBsaWIgbGliczY0IGxpYnMgJHtfT3BlbkFMX0FSQ0hfRElSfQorICApCiAKIHVuc2V0KF9PcGVuQUxfQVJDSF9ESVIpCiAKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKLUZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhPcGVuQUwgIERFRkFVTFRfTVNHICBPUEVOQUxfTElCUkFSWSBPUEVOQUxfSU5DTFVERV9ESVIpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoCisgIE9wZW5BTAorICBSRVFVSVJFRF9WQVJTIE9QRU5BTF9MSUJSQVJZIE9QRU5BTF9JTkNMVURFX0RJUgorICBWRVJTSU9OX1ZBUiBPUEVOQUxfVkVSU0lPTl9TVFJJTkcKKyAgKQogCiBtYXJrX2FzX2FkdmFuY2VkKE9QRU5BTF9MSUJSQVJZIE9QRU5BTF9JTkNMVURFX0RJUikKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9wZW5DTC5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5DTC5jbWFrZQppbmRleCA5ODkxNzI0Li5iM2U1YTlmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRPcGVuQ0wuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT3BlbkNMLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZE9wZW5DTAogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRmluZHMgT3BlbiBDb21wdXRpbmcgTGFuZ3VhZ2UgKE9wZW5DTCkKIAogSU1QT1JURUQgVGFyZ2V0cwpAQCAtNzgsNiArODAsOCBAQAogICAgIEVOViBDVURBX1BBVEgKICAgICBFTlYgQVRJU1RSRUFNU0RLUk9PVAogICAgIEVOViBPQ0xfUk9PVAorICAgIC91c3IvbG9jYWwvY3VkYQorICAgIC9vcHQvY3VkYQogICBQQVRIX1NVRkZJWEVTCiAgICAgaW5jbHVkZQogICAgIE9wZW5DTC9jb21tb24vaW5jCkBAIC0xMjYsNiArMTMwLDggQEAKICAgICAgIFBBVEhTCiAgICAgICAgIEVOViBBTURBUFBTREtST09UCiAgICAgICAgIEVOViBDVURBX1BBVEgKKyAgICAgICAgL3Vzci9sb2NhbC9jdWRhCisgICAgICAgIC9vcHQvY3VkYQogICAgICAgUEFUSF9TVUZGSVhFUwogICAgICAgICBsaWIveDg2CiAgICAgICAgIGxpYikKQEAgLTEzNSw2ICsxNDEsOCBAQAogICAgICAgUEFUSFMKICAgICAgICAgRU5WIEFNREFQUFNES1JPT1QKICAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgICAvdXNyL2xvY2FsL2N1ZGEKKyAgICAgICAgL29wdC9jdWRhCiAgICAgICBQQVRIX1NVRkZJWEVTCiAgICAgICAgIGxpYi94ODZfNjQKICAgICAgICAgbGliL3g2NApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kT3Blbk1QLmNtYWtlIGIvTW9kdWxlcy9GaW5kT3Blbk1QLmNtYWtlCmluZGV4IGE0YjFlMWUuLmJiMzhlMjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE9wZW5NUC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuTVAuY21ha2UKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgX09QRU5NUF9HRVRfU1BFQ19EQVRFKCIke0xBTkd9IiBPcGVuTVBfJHtMQU5HfV9TUEVDX0RBVEVfSU5URVJOQUwpCiAgICAgICBzZXQoT3Blbk1QXyR7TEFOR31fU1BFQ19EQVRFICIke09wZW5NUF8ke0xBTkd9X1NQRUNfREFURV9JTlRFUk5BTH0iIENBQ0hFCiAgICAgICAgIElOVEVSTkFMICIke0xBTkd9IGNvbXBpbGVyJ3MgT3Blbk1QIHNwZWNpZmljYXRpb24gZGF0ZSIpCi0gICAgICBfT1BFTk1QX1NFVF9WRVJTSU9OX0JZX1NQRUNfREFURSgiJHtMQU5HfSIpCiAgICAgZW5kaWYoKQorICAgIF9PUEVOTVBfU0VUX1ZFUlNJT05fQllfU1BFQ19EQVRFKCIke0xBTkd9IikKIAogICAgIHNldChPcGVuTVBfJHtMQU5HfV9GSU5EX1FVSUVUTFkgJHtPcGVuTVBfRklORF9RVUlFVExZfSkKICAgICBzZXQoT3Blbk1QXyR7TEFOR31fRklORF9SRVFVSVJFRCAke09wZW5NUF9GSU5EX1JFUVVJUkVEfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9wZW5TU0wuY21ha2UgYi9Nb2R1bGVzL0ZpbmRPcGVuU1NMLmNtYWtlCmluZGV4IGFkMTAxOGYuLmVlNDA2OTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE9wZW5TU0wuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT3BlblNTTC5jbWFrZQpAQCAtMjIsNiArMjIsMjcgQEAKICAgVGhlIE9wZW5TU0wgYGBzc2xgYCBsaWJyYXJ5LCBpZiBmb3VuZC4KIGBgT3BlblNTTDo6Q3J5cHRvYGAKICAgVGhlIE9wZW5TU0wgYGBjcnlwdG9gYCBsaWJyYXJ5LCBpZiBmb3VuZC4KK2BgT3BlblNTTDo6YXBwbGlua2BgCisgIFRoZSBPcGVuU1NMIGBgYXBwbGlua2BgIGNvbXBvbmVudHMgdGhhdCBtaWdodCBiZSBuZWVkIHRvIGJlIGNvbXBpbGVkIGludG8KKyAgcHJvamVjdHMgdW5kZXIgTVNWQy4gVGhpcyB0YXJnZXQgaXMgYXZhaWxhYmxlIG9ubHkgaWYgZm91bmQgT3BlblNTTCB2ZXJzaW9uCisgIGlzIG5vdCBsZXNzIHRoYW4gMC45LjguIEJ5IGxpbmtpbmcgdGhpcyB0YXJnZXQgdGhlIGFib3ZlIE9wZW5TU0wgdGFyZ2V0cyBjYW4KKyAgYmUgbGlua2VkIGV2ZW4gaWYgdGhlIHByb2plY3QgaGFzIGRpZmZlcmVudCBNU1ZDIHJ1bnRpbWUgY29uZmlndXJhdGlvbnMgd2l0aAorICB0aGUgYWJvdmUgT3BlblNTTCB0YXJnZXRzLiBUaGlzIHRhcmdldCBoYXMgbm8gZWZmZWN0IG9uIHBsYWZvcm1zIG90aGVyIHRoYW4KKyAgTVNWQy4KKworTk9URTogRHVlIHRvIGhvdyBgYElOVEVSRkFDRV9TT1VSQ0VTYGAgYXJlIGNvbnN1bWVkIGJ5IHRoZSBjb25zdW1pbmcgdGFyZ2V0LAordW5sZXNzIHlvdSBjZXJ0YWlubHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIGl0IGlzIGFsd2F5cyBwcmVmZXJlZCB0byBsaW5rCitgYE9wZW5TU0w6OmFwcGxpbmtgYCB0YXJnZXQgYXMgYGBQUklWQVRFYGAgYW5kIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgdGFyZ2V0IGlzCitsaW5rZWQgYXQgbW9zdCBvbmNlIGZvciB0aGUgd2hvbGUgZGVwZW5kZW5jeSBncmFwaCBvZiBhbnkgbGlicmFyeSBvcgorZXhlY3V0YWJsZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteVRhcmdldCBQUklWQVRFIE9wZW5TU0w6OmFwcGxpbmspCisKK090aGVyd2lzZSB5b3Ugd291bGQgcHJvYmFibHkgZW5jb3VudGVyIHVuZXhwZWN0ZWQgcmFuZG9tIHByb2JsZW1zIHdoZW4gYnVpbGRpbmcKK2FuZCBsaW5raW5nLCBhcyBib3RoIHRoZSBJU08gQyBhbmQgdGhlIElTTyBDKysgc3RhbmRhcmQgY2xhaW1zIGFsbW9zdCBub3RoaW5nCithYm91dCB3aGF0IGEgbGluayBwcm9jZXNzIHNob3VsZCBiZS4KIAogUmVzdWx0IFZhcmlhYmxlcwogXl5eXl5eXl5eXl5eXl5eXgpAQCAtNDUsNiArNjYsMTAgQEAKICAgQWxsIE9wZW5TU0wgbGlicmFyaWVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuCiBgYE9QRU5TU0xfVkVSU0lPTmBgCiAgIFRoaXMgaXMgc2V0IHRvIGBgJG1ham9yLiRtaW5vci4kcmV2aXNpb24kcGF0Y2hgYCAoZS5nLiBgYDAuOS44c2BgKS4KK2BgT1BFTlNTTF9BUFBMSU5LX1NPVVJDRWBgCisgIFRoZSBzb3VyY2VzIGluIHRoZSB0YXJnZXQgYGBPcGVuU1NMOjphcHBsaW5rYGAgdGhhdCBpcyBtZW50aW9uZWQgYWJvdmUuIFRoaXMKKyAgdmFyaWFibGUgc2hhbGwgYWx3YXlzIGJlIHVuZGVmaW5lZCBpZiBmb3VuZCBvcGVuc3NsIHZlcnNpb24gaXMgbGVzcyB0aGFuCisgIDAuOS44IG9yIGlmIHBsYXRmb3JtIGlzIG5vdCBNU1ZDLgogCiBIaW50cwogXl5eXl4KQEAgLTUzNSw2ICs1NjAsMjggQEAKICAgICBlbmRpZigpCiAgICAgX09wZW5TU0xfdGFyZ2V0X2FkZF9kZXBlbmRlbmNpZXMoT3BlblNTTDo6U1NMKQogICBlbmRpZigpCisKKyAgaWYoIiR7T1BFTlNTTF9WRVJTSU9OX01BSk9SfS4ke09QRU5TU0xfVkVSU0lPTl9NQUpPUn0uJHtPUEVOU1NMX1ZFUlNJT05fRklYfSIgVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIwLjkuOCIpCisgICAgaWYoTVNWQykKKyAgICAgIGlmKEVYSVNUUyAiJHtPUEVOU1NMX0lOQ0xVREVfRElSfSIpCisgICAgICAgIHNldChfT1BFTlNTTF9hcHBsaW5rX3BhdGhzIFBBVEhTICR7T1BFTlNTTF9JTkNMVURFX0RJUn0pCisgICAgICBlbmRpZigpCisgICAgICBmaW5kX2ZpbGUoT1BFTlNTTF9BUFBMSU5LX1NPVVJDRQorICAgICAgICBOQU1FUworICAgICAgICAgIG9wZW5zc2wvYXBwbGluay5jCisgICAgICAgICR7X09QRU5TU0xfYXBwbGlua19wYXRoc30KKyAgICAgICAgTk9fREVGQVVMVF9QQVRIKQorICAgICAgaWYoT1BFTlNTTF9BUFBMSU5LX1NPVVJDRSkKKyAgICAgICAgc2V0KF9PUEVOU1NMX2FwcGxpbmtfaW50ZXJmYWNlX3NyY3MgJHtPUEVOU1NMX0FQUExJTktfU09VUkNFfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgICAgaWYoTk9UIFRBUkdFVCBPcGVuU1NMOjphcHBsaW5rKQorICAgICAgYWRkX2xpYnJhcnkoT3BlblNTTDo6YXBwbGluayBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIE9wZW5TU0w6OmFwcGxpbmsgQVBQRU5ECisgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9TT1VSQ0VTCisgICAgICAgICAgJHtfT1BFTlNTTF9hcHBsaW5rX2ludGVyZmFjZV9zcmNzfSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogIyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmaW5kIGxpYnJhcnkgb3JkZXJpbmcKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFBORy5jbWFrZSBiL01vZHVsZXMvRmluZFBORy5jbWFrZQppbmRleCBmMWZlODlhLi5mZDBlNGU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQTkcuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUE5HLmNtYWtlCkBAIC03Niw4ICs3Niw4IEBACiAgICMgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBwcmlvciB0byB0aGlzIG11bHRpLWNvbmZpZyBzZWFyY2gsIGhvbm9yCiAgICMgYW55IFBOR19MSUJSQVJZIHRoYXQgaXMgYWxyZWFkeSBzcGVjaWZpZWQgYW5kIHNraXAgdGhlIHNlYXJjaC4KICAgaWYoTk9UIFBOR19MSUJSQVJZKQotICAgIGZpbmRfbGlicmFyeShQTkdfTElCUkFSWV9SRUxFQVNFIE5BTUVTICR7UE5HX05BTUVTfSkKLSAgICBmaW5kX2xpYnJhcnkoUE5HX0xJQlJBUllfREVCVUcgTkFNRVMgJHtQTkdfTkFNRVNfREVCVUd9KQorICAgIGZpbmRfbGlicmFyeShQTkdfTElCUkFSWV9SRUxFQVNFIE5BTUVTICR7UE5HX05BTUVTfSBOQU1FU19QRVJfRElSKQorICAgIGZpbmRfbGlicmFyeShQTkdfTElCUkFSWV9ERUJVRyBOQU1FUyAke1BOR19OQU1FU19ERUJVR30gTkFNRVNfUEVSX0RJUikKICAgICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vU2VsZWN0TGlicmFyeUNvbmZpZ3VyYXRpb25zLmNtYWtlKQogICAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKFBORykKICAgICBtYXJrX2FzX2FkdmFuY2VkKFBOR19MSUJSQVJZX1JFTEVBU0UgUE5HX0xJQlJBUllfREVCVUcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlIGIvTW9kdWxlcy9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZQppbmRleCBhMDc4MDQ5Li40ZmIwODI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UKQEAgLTU3LDcgKzU3LDggQEAKICAgICBUaGVzZSBtYXkgYmUgbmFtZWQgaW4gdGhlIGdlbmVyYXRlZCBmYWlsdXJlIG1lc3NhZ2UgYXNraW5nIHRoZQogICAgIHVzZXIgdG8gc2V0IHRoZSBtaXNzaW5nIHZhcmlhYmxlIHZhbHVlcy4gIFRoZXJlZm9yZSB0aGVzZSBzaG91bGQKICAgICB0eXBpY2FsbHkgYmUgY2FjaGUgZW50cmllcyBzdWNoIGFzIGBgRk9PX0xJQlJBUllgYCBhbmQgbm90IG91dHB1dAotICAgIHZhcmlhYmxlcyBsaWtlIGBgRk9PX0xJQlJBUklFU2BgLgorICAgIHZhcmlhYmxlcyBsaWtlIGBgRk9PX0xJQlJBUklFU2BgLiBUaGlzIG9wdGlvbiBpcyBtYW5kYXRvcnkgaWYKKyAgICBgYEhBTkRMRV9DT01QT05FTlRTYGAgaXMgbm90IHNwZWNpZmllZC4KIAogICBgYFZFUlNJT05fVkFSIDx2ZXJzaW9uLXZhcj5gYAogICAgIFNwZWNpZnkgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlCkBAIC0yNTcsNyArMjU4LDcgQEAKICAgICAgIHNldChGUEhTQV9WRVJTSU9OX1ZBUiAke19OQU1FfV9WRVJTSU9OKQogICAgIGVuZGlmKCkKIAotICAgIGlmKE5PVCBGUEhTQV9SRVFVSVJFRF9WQVJTKQorICAgIGlmKE5PVCBGUEhTQV9SRVFVSVJFRF9WQVJTIEFORCBOT1QgRlBIU0FfSEFORExFX0NPTVBPTkVOVFMpCiAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJObyBSRVFVSVJFRF9WQVJTIHNwZWNpZmllZCBmb3IgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKCkiKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQpAQCAtMjgzLDcgKzI4NCw5IEBACiAgICAgc2V0KEZQSFNBX0ZBSUxfTUVTU0FHRSAiQ291bGQgTk9UIGZpbmQgJHtfTkFNRX0iKQogICBlbmRpZigpCiAKLSAgbGlzdChHRVQgRlBIU0FfUkVRVUlSRURfVkFSUyAwIF9GSVJTVF9SRVFVSVJFRF9WQVIpCisgIGlmIChGUEhTQV9SRVFVSVJFRF9WQVJTKQorICAgIGxpc3QoR0VUIEZQSFNBX1JFUVVJUkVEX1ZBUlMgMCBfRklSU1RfUkVRVUlSRURfVkFSKQorICBlbmRpZigpCiAKICAgc3RyaW5nKFRPVVBQRVIgJHtfTkFNRX0gX05BTUVfVVBQRVIpCiAgIHN0cmluZyhUT0xPV0VSICR7X05BTUV9IF9OQU1FX0xPV0VSKQpAQCAtNDQwLDcgKzQ0MywxNyBAQAogICAgICAgX0ZQSFNBX0hBTkRMRV9GQUlMVVJFX0NPTkZJR19NT0RFKCkKICAgICBlbHNlKCkKICAgICAgIGlmKE5PVCBWRVJTSU9OX09LKQotICAgICAgICBfRlBIU0FfRkFJTFVSRV9NRVNTQUdFKCIke0ZQSFNBX0ZBSUxfTUVTU0FHRX06ICR7VkVSU0lPTl9NU0d9IChmb3VuZCAkeyR7X0ZJUlNUX1JFUVVJUkVEX1ZBUn19KSIpCisgICAgICAgIHNldChSRVNVTFRfTVNHKQorICAgICAgICBpZiAoX0ZJUlNUX1JFUVVJUkVEX1ZBUikKKyAgICAgICAgICBzdHJpbmcgKEFQUEVORCBSRVNVTFRfTVNHICJmb3VuZCAkeyR7X0ZJUlNUX1JFUVVJUkVEX1ZBUn19IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZiAoQ09NUE9ORU5UX01TRykKKyAgICAgICAgICBpZiAoUkVTVUxUX01TRykKKyAgICAgICAgICAgIHN0cmluZyAoQVBQRU5EIFJFU1VMVF9NU0cgIiwgIikKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgc3RyaW5nIChBUFBFTkQgUkVTVUxUX01TRyAiJHtGT1VORF9DT01QT05FTlRTX01TR30iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIF9GUEhTQV9GQUlMVVJFX01FU1NBR0UoIiR7RlBIU0FfRkFJTF9NRVNTQUdFfTogJHtWRVJTSU9OX01TR30gKCR7UkVTVUxUX01TR30pIikKICAgICAgIGVsc2UoKQogICAgICAgICBfRlBIU0FfRkFJTFVSRV9NRVNTQUdFKCIke0ZQSFNBX0ZBSUxfTUVTU0FHRX0gKG1pc3Npbmc6JHtNSVNTSU5HX1ZBUlN9KSAke1ZFUlNJT05fTVNHfSIpCiAgICAgICBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQYXRjaC5jbWFrZSBiL01vZHVsZXMvRmluZFBhdGNoLmNtYWtlCmluZGV4IDQ5OTg4MzkuLjQxMDg2NTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFBhdGNoLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFBhdGNoLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZFBhdGNoCiAtLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CiAKIGBgUGF0Y2hfRVhFQ1VUQUJMRWBgCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQa2dDb25maWcuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQa2dDb25maWcuY21ha2UKaW5kZXggMjhkZTU3NS4uOTM4MjdkOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUGtnQ29uZmlnLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFBrZ0NvbmZpZy5jbWFrZQpAQCAtMzQsMTYgKzM0LDMxIEBACiBmaW5kX3Byb2dyYW0oUEtHX0NPTkZJR19FWEVDVVRBQkxFIE5BTUVTIHBrZy1jb25maWcgRE9DICJwa2ctY29uZmlnIGV4ZWN1dGFibGUiKQogbWFya19hc19hZHZhbmNlZChQS0dfQ09ORklHX0VYRUNVVEFCTEUpCiAKK3NldChfUEtHX0NPTkZJR19GQUlMVVJFX01FU1NBR0UgIiIpCiBpZiAoUEtHX0NPTkZJR19FWEVDVVRBQkxFKQogICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1BLR19DT05GSUdfRVhFQ1VUQUJMRX0gLS12ZXJzaW9uCi0gICAgT1VUUFVUX1ZBUklBQkxFIFBLR19DT05GSUdfVkVSU0lPTl9TVFJJTkcKLSAgICBFUlJPUl9RVUlFVAotICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorICAgIE9VVFBVVF9WQVJJQUJMRSBQS0dfQ09ORklHX1ZFUlNJT05fU1RSSU5HIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCisgICAgRVJST1JfVkFSSUFCTEUgX1BLR19DT05GSUdfVkVSU0lPTl9FUlJPUiBFUlJPUl9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCisgICAgUkVTVUxUX1ZBUklBQkxFIF9QS0dfQ09ORklHX1ZFUlNJT05fUkVTVUxUCisgICAgKQorCisgIGlmIChOT1QgX1BLR19DT05GSUdfVkVSU0lPTl9SRVNVTFQgRVFVQUwgMCkKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgICAiIF9QS0dfQ09ORklHX1ZFUlNJT05fRVJST1IgIiAgICAgICR7X1BLR19DT05GSUdfVkVSU0lPTl9FUlJPUn0iKQorICAgIHN0cmluZyhBUFBFTkQgX1BLR19DT05GSUdfRkFJTFVSRV9NRVNTQUdFCisgICAgICAiVGhlIGNvbW1hbmRcbiIKKyAgICAgICIgICAgICBcIiR7UEtHX0NPTkZJR19FWEVDVVRBQkxFfVwiIC0tdmVyc2lvblxuIgorICAgICAgIiAgICBmYWlsZWQgd2l0aCBvdXRwdXRcbiR7X1BLR19DT05GSUdfVkVSU0lPTl9FUlJPUn0iCisgICAgICApCisgICAgc2V0KFBLR19DT05GSUdfRVhFQ1VUQUJMRSAiIikKKyAgICB1bnNldChQS0dfQ09ORklHX1ZFUlNJT05fU1RSSU5HKQorICBlbmRpZiAoKQorICB1bnNldChfUEtHX0NPTkZJR19WRVJTSU9OX1JFU1VMVCkKIGVuZGlmICgpCiAKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhQa2dDb25maWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRF9WQVJTIFBLR19DT05GSUdfRVhFQ1VUQUJMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQVNPTl9GQUlMVVJFX01FU1NBR0UgIiR7X1BLR19DT05GSUdfRkFJTFVSRV9NRVNTQUdFfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBQS0dfQ09ORklHX1ZFUlNJT05fU1RSSU5HKQogCiAjIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIG1vZHVsZSBuYW1lIGlzICJQa2dDb25maWciIGJ1dCB0aGUgbmFtZSBvZgpAQCAtMTk3LDcgKzIxMiwxMyBAQAogICBlbmRpZigpCiAKICAgdW5zZXQoX3NlYXJjaF9wYXRocykKKyAgdW5zZXQoX25leHRfaXNfZnJhbWV3b3JrKQogICBmb3JlYWNoIChmbGFnIElOIExJU1RTICR7X3ByZWZpeH1fTERGTEFHUykKKyAgICBpZiAoX25leHRfaXNfZnJhbWV3b3JrKQorICAgICAgbGlzdChBUFBFTkQgX2xpYnMgIi1mcmFtZXdvcmsgJHtmbGFnfSIpCisgICAgICB1bnNldChfbmV4dF9pc19mcmFtZXdvcmspCisgICAgICBjb250aW51ZSgpCisgICAgZW5kaWYgKCkKICAgICBpZiAoZmxhZyBNQVRDSEVTICJeLUwoLiopIikKICAgICAgIGxpc3QoQVBQRU5EIF9zZWFyY2hfcGF0aHMgJHtDTUFLRV9NQVRDSF8xfSkKICAgICAgIGNvbnRpbnVlKCkKQEAgLTIwNSw2ICsyMjYsOSBAQAogICAgIGlmIChmbGFnIE1BVENIRVMgIl4tbCguKikiKQogICAgICAgc2V0KF9wa2dfc2VhcmNoICIke0NNQUtFX01BVENIXzF9IikKICAgICBlbHNlKCkKKyAgICAgIGlmIChmbGFnIFNUUkVRVUFMICItZnJhbWV3b3JrIikKKyAgICAgICAgc2V0KF9uZXh0X2lzX2ZyYW1ld29yayBUUlVFKQorICAgICAgZW5kaWYgKCkKICAgICAgIGNvbnRpbnVlKCkKICAgICBlbmRpZigpCiAKQEAgLTM2NCw2ICszODgsMzAgQEAKICAgdW5zZXQoX3BrZ2NvbmZpZ19wYXRoX29sZCkKIGVuZG1hY3JvKCkKIAorIyBwa2ctY29uZmlnIHJldHVybnMgZnJhbWV3b3JrcyBpbiAtLWxpYnMtb25seS1vdGhlcgorIyB0aGV5IG5lZWQgdG8gYmUgaW4gJHtfcHJlZml4fV9MSUJSQVJJRVMgc28gIi1mcmFtZXdvcmsgYSAtZnJhbWV3b3JrIGIiIGRvZXMKKyMgbm90IGluY29ycmVjdGx5IGJlIGNvbWJpbmVkIHRvICItZnJhbWV3b3JrIGEgYiIKK2Z1bmN0aW9uKF9wa2djb25maWdfZXh0cmFjdF9mcmFtZXdvcmtzIF9wcmVmaXgpCisgIHNldChsZGZsYWdzICIkeyR7X3ByZWZpeH1fTERGTEFHU19PVEhFUn0iKQorICBsaXN0KEZJTkQgbGRmbGFncyAiLWZyYW1ld29yayIgRlJfUE9TKQorICBsaXN0KExFTkdUSCBsZGZsYWdzIExEX0xFTkdUSCkKKworICAjIHJlZHVjZSBsZW5ndGggYnkgMSBhcyB3ZSBuZWVkICItZnJhbWV3b3JrIiBhbmQgdGhlIG5leHQgZW50cnkKKyAgbWF0aChFWFBSIExEX0xFTkdUSCAiJHtMRF9MRU5HVEh9IC0gMSIpCisgIHdoaWxlIChGUl9QT1MgR1JFQVRFUiAtMSBBTkQgTERfTEVOR1RIIEdSRUFURVIgRlJfUE9TKQorICAgIGxpc3QoUkVNT1ZFX0FUIGxkZmxhZ3MgJHtGUl9QT1N9KQorICAgIGxpc3QoR0VUIGxkZmxhZ3MgJHtGUl9QT1N9IEhFQUQpCisgICAgbGlzdChSRU1PVkVfQVQgbGRmbGFncyAke0ZSX1BPU30pCisgICAgbWF0aChFWFBSIExEX0xFTkdUSCAiJHtMRF9MRU5HVEh9IC0gMiIpCisKKyAgICBsaXN0KEFQUEVORCBMSUJTICItZnJhbWV3b3JrICR7SEVBRH0iKQorCisgICAgbGlzdChGSU5EIGxkZmxhZ3MgIi1mcmFtZXdvcmsiIEZSX1BPUykKKyAgZW5kd2hpbGUgKCkKKyAgc2V0KCR7X3ByZWZpeH1fTElCUkFSSUVTICR7JHtfcHJlZml4fV9MSUJSQVJJRVN9ICR7TElCU30gUEFSRU5UX1NDT1BFKQorICBzZXQoJHtfcHJlZml4fV9MREZMQUdTX09USEVSICIke2xkZmxhZ3N9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKICMgcGtnLWNvbmZpZyByZXR1cm5zIC1pc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgaW4gLS1jZmxhZ3Mtb25seS1vdGhlciwKICMgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIGFuZCBpZiB0aGVyZSBpcyBhIHNwYWNlIGJldHdlZW4gLWlzeXN0ZW0gYW5kCiAjIHRoZSBhY3R1YWwgcGF0aApAQCAtNTMyLDYgKzU4MCwxMCBAQAogICAgICAgX3BrZ2NvbmZpZ19pbnZva2VfZHluKCIke19wa2dfY2hlY2tfbW9kdWxlc19wYWNrYWdlc30iICIke19wcmVmaXh9IiBMREZMQUdTICAgICAgICIiICAgICAgICAgICAgICAgICAgICAtLWxpYnMgKQogICAgICAgX3BrZ2NvbmZpZ19pbnZva2VfZHluKCIke19wa2dfY2hlY2tfbW9kdWxlc19wYWNrYWdlc30iICIke19wcmVmaXh9IiBMREZMQUdTX09USEVSICIiICAgICAgICAgICAgICAgICAgICAtLWxpYnMtb25seS1vdGhlciApCiAKKyAgICAgIGlmIChBUFBMRSBBTkQgIi1mcmFtZXdvcmsiIElOX0xJU1QgJHtfcHJlZml4fV9MREZMQUdTX09USEVSKQorICAgICAgICBfcGtnY29uZmlnX2V4dHJhY3RfZnJhbWV3b3JrcygiJHtfcHJlZml4fSIpCisgICAgICBlbmRpZigpCisKICAgICAgIF9wa2djb25maWdfaW52b2tlX2R5bigiJHtfcGtnX2NoZWNrX21vZHVsZXNfcGFja2FnZXN9IiAiJHtfcHJlZml4fSIgSU5DTFVERV9ESVJTICAiKF58ICkoLUl8LWlzeXN0ZW0gPykiIC0tY2ZsYWdzLW9ubHktSSApCiAgICAgICBfcGtnY29uZmlnX2ludm9rZV9keW4oIiR7X3BrZ19jaGVja19tb2R1bGVzX3BhY2thZ2VzfSIgIiR7X3ByZWZpeH0iIENGTEFHUyAgICAgICAgIiIgICAgICAgICAgICAgICAgICAgIC0tY2ZsYWdzICkKICAgICAgIF9wa2djb25maWdfaW52b2tlX2R5bigiJHtfcGtnX2NoZWNrX21vZHVsZXNfcGFja2FnZXN9IiAiJHtfcHJlZml4fSIgQ0ZMQUdTX09USEVSICAiIiAgICAgICAgICAgICAgICAgICAgLS1jZmxhZ3Mtb25seS1vdGhlciApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQcm90b2J1Zi5jbWFrZSBiL01vZHVsZXMvRmluZFByb3RvYnVmLmNtYWtlCmluZGV4IGYzNTk3OGQuLmY2ZDhmZTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFByb3RvYnVmLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFByb3RvYnVmLmNtYWtlCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgYGBQWWBgCiAgICAgVmFyaWFibGUgdG8gZGVmaW5lIHdpdGggYXV0b2dlbmVyYXRlZCBQeXRob24gZmlsZXMKICAgYGBBUkdOYGAKLSAgICBgYC5wcm90b2BgIGZpbGVzcworICAgIGBgLnByb3RvYGAgZmlsZXMKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGZ1bmN0aW9uKHByb3RvYnVmX2dlbmVyYXRlKQpAQCAtMzc2LDExICszNzYsMTMgQEAKICAgZWxzZSgpCiAgICAgZmluZF9saWJyYXJ5KCR7bmFtZX1fTElCUkFSWV9SRUxFQVNFCiAgICAgICBOQU1FUyAke2ZpbGVuYW1lfQorICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgUEFUSFMgJHtQcm90b2J1Zl9TUkNfUk9PVF9GT0xERVJ9L3ZzcHJvamVjdHMvJHtfUFJPVE9CVUZfQVJDSF9ESVJ9UmVsZWFzZSkKICAgICBtYXJrX2FzX2FkdmFuY2VkKCR7bmFtZX1fTElCUkFSWV9SRUxFQVNFKQogCiAgICAgZmluZF9saWJyYXJ5KCR7bmFtZX1fTElCUkFSWV9ERUJVRwogICAgICAgTkFNRVMgJHtmaWxlbmFtZX1kICR7ZmlsZW5hbWV9CisgICAgICBOQU1FU19QRVJfRElSCiAgICAgICBQQVRIUyAke1Byb3RvYnVmX1NSQ19ST09UX0ZPTERFUn0vdnNwcm9qZWN0cy8ke19QUk9UT0JVRl9BUkNIX0RJUn1EZWJ1ZykKICAgICBtYXJrX2FzX2FkdmFuY2VkKCR7bmFtZX1fTElCUkFSWV9ERUJVRykKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUHl0aG9uLmNtYWtlIGIvTW9kdWxlcy9GaW5kUHl0aG9uLmNtYWtlCmluZGV4IDMyZWYxMjAuLmY1MDNjY2EgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFB5dGhvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRQeXRob24uY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kUHl0aG9uCiAtLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogRmluZCBQeXRob24gaW50ZXJwcmV0ZXIsIGNvbXBpbGVyIGFuZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCAoaW5jbHVkZQogZGlyZWN0b3JpZXMgYW5kIGxpYnJhcmllcykuCiAKQEAgLTEzLDEzICsxNSwyNCBAQAogKiBgYEludGVycHJldGVyYGA6IHNlYXJjaCBmb3IgUHl0aG9uIGludGVycHJldGVyLgogKiBgYENvbXBpbGVyYGA6IHNlYXJjaCBmb3IgUHl0aG9uIGNvbXBpbGVyLiBPbmx5IG9mZmVyZWQgYnkgSXJvblB5dGhvbi4KICogYGBEZXZlbG9wbWVudGBgOiBzZWFyY2ggZm9yIGRldmVsb3BtZW50IGFydGlmYWN0cyAoaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKLSAgbGlicmFyaWVzKS4KKyAgbGlicmFyaWVzKS4gVGhpcyBjb21wb25lbnQgaW5jbHVkZXMgdHdvIHN1Yi1jb21wb25lbnRzIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQKKyAgaW5kZXBlbmRlbnRseToKKworICAqIGBgRGV2ZWxvcG1lbnQuTW9kdWxlYGA6IHNlYXJjaCBmb3IgYXJ0aWZhY3RzIGZvciBQeXRob24gbW9kdWxlCisgICAgZGV2ZWxvcG1lbnRzLgorICAqIGBgRGV2ZWxvcG1lbnQuRW1iZWRgYDogc2VhcmNoIGZvciBhcnRpZmFjdHMgZm9yIFB5dGhvbiBlbWJlZGRpbmcKKyAgICBkZXZlbG9wbWVudHMuCisKICogYGBOdW1QeWBgOiBzZWFyY2ggZm9yIE51bVB5IGluY2x1ZGUgZGlyZWN0b3JpZXMuCiAKIElmIG5vIGBgQ09NUE9ORU5UU2BgIGFyZSBzcGVjaWZpZWQsIGBgSW50ZXJwcmV0ZXJgYCBpcyBhc3N1bWVkLgogCitJZiBjb21wb25lbnQgYGBEZXZlbG9wbWVudGBgIGlzIHNwZWNpZmllZCwgaXQgaW1wbGllcyBzdWItY29tcG9uZW50cworYGBEZXZlbG9wbWVudC5Nb2R1bGVgYCBhbmQgYGBEZXZlbG9wbWVudC5FbWJlZGBgLgorCiBUbyBlbnN1cmUgY29uc2lzdGVudCB2ZXJzaW9ucyBiZXR3ZWVuIGNvbXBvbmVudHMgYGBJbnRlcnByZXRlcmBgLCBgYENvbXBpbGVyYGAsCi1gYERldmVsb3BtZW50YGAgYW5kIGBgTnVtUHlgYCwgc3BlY2lmeSBhbGwgY29tcG9uZW50cyBhdCB0aGUgc2FtZSB0aW1lOjoKK2BgRGV2ZWxvcG1lbnRgYCAob3Igb25lIG9mIGl0cyBzdWItY29tcG9uZW50cykgYW5kIGBgTnVtUHlgYCwgc3BlY2lmeSBhbGwKK2NvbXBvbmVudHMgYXQgdGhlIHNhbWUgdGltZTo6CiAKICAgZmluZF9wYWNrYWdlIChQeXRob24gQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKIApAQCAtMzAsMTAgKzQzLDExIEBACiAKIC4uIG5vdGU6OgogCi0gIElmIGNvbXBvbmVudHMgYGBJbnRlcnByZXRlcmBgIGFuZCBgYERldmVsb3BtZW50YGAgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGlzCi0gIG1vZHVsZSBzZWFyY2ggb25seSBmb3IgaW50ZXJwcmV0ZXIgd2l0aCBzYW1lIHBsYXRmb3JtIGFyY2hpdGVjdHVyZSBhcyB0aGUgb25lCi0gIGRlZmluZWQgYnkgYGBDTWFrZWBgIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29udHJhaW50IGRvZXMgbm90IGFwcGx5IGlmIG9ubHkKLSAgYGBJbnRlcnByZXRlcmBgIGNvbXBvbmVudCBpcyBzcGVjaWZpZWQuCisgIElmIGNvbXBvbmVudHMgYGBJbnRlcnByZXRlcmBgIGFuZCBgYERldmVsb3BtZW50YGAgKG9yIG9uZSBvZiBpdHMKKyAgc3ViLWNvbXBvbmVudHMpIGFyZSBib3RoIHNwZWNpZmllZCwgdGhpcyBtb2R1bGUgc2VhcmNoIG9ubHkgZm9yIGludGVycHJldGVyCisgIHdpdGggc2FtZSBwbGF0Zm9ybSBhcmNoaXRlY3R1cmUgYXMgdGhlIG9uZSBkZWZpbmVkIGJ5IGBgQ01ha2VgYAorICBjb25maWd1cmF0aW9uLiBUaGlzIGNvbnRyYWludCBkb2VzIG5vdCBhcHBseSBpZiBvbmx5IGBgSW50ZXJwcmV0ZXJgYAorICBjb21wb25lbnQgaXMgc3BlY2lmaWVkLgogCiBJbXBvcnRlZCBUYXJnZXRzCiBeXl5eXl5eXl5eXl5eXl5eCkBAIC00NSwxMiArNTksMTIgQEAKICAgUHl0aG9uIGludGVycHJldGVyLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQgYGBJbnRlcnByZXRlcmBgIGlzIGZvdW5kLgogYGBQeXRob246OkNvbXBpbGVyYGAKICAgUHl0aG9uIGNvbXBpbGVyLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQgYGBDb21waWxlcmBgIGlzIGZvdW5kLgorYGBQeXRob246Ok1vZHVsZWBgCisgIFB5dGhvbiBsaWJyYXJ5IGZvciBQeXRob24gbW9kdWxlLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQKKyAgYGBEZXZlbG9wbWVudC5Nb2R1bGVgYCBpcyBmb3VuZC4KIGBgUHl0aG9uOjpQeXRob25gYAogICBQeXRob24gbGlicmFyeSBmb3IgUHl0aG9uIGVtYmVkZGluZy4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50Ci0gIGBgRGV2ZWxvcG1lbnRgYCBpcyBmb3VuZC4KLWBgUHl0aG9uOjpNb2R1bGVgYAotICBQeXRob24gbGlicmFyeSBmb3IgUHl0aG9uIG1vZHVsZS4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50IGBgRGV2ZWxvcG1lbnRgYAotICBpcyBmb3VuZC4KKyAgYGBEZXZlbG9wbWVudC5FbWJlZGBgIGlzIGZvdW5kLgogYGBQeXRob246Ok51bVB5YGAKICAgTnVtUHkgUHl0aG9uIGxpYnJhcnkuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYE51bVB5YGAgaXMgZm91bmQuCiAKQEAgLTczLDMzICs4Nyw0MCBAQAogICAgICogQW5hY29uZGEKICAgICAqIENhbm9weQogICAgICogSXJvblB5dGhvbgorICAgICogUHlQeQogYGBQeXRob25fU1RETElCYGAKICAgU3RhbmRhcmQgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9VHJ1ZSlgYC4KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPVRydWUpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgnc3RkbGliJylgYC4KIGBgUHl0aG9uX1NUREFSQ0hgYAogICBTdGFuZGFyZCBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1UcnVlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1UcnVlKWBgCisgIG9yIGVsc2UgYGBzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKWBgLgogYGBQeXRob25fU0lURUxJQmBgCiAgIFRoaXJkLXBhcnR5IHBsYXRmb3JtIGluZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPUZhbHNlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncHVyZWxpYicpYGAuCiBgYFB5dGhvbl9TSVRFQVJDSGBgCiAgIFRoaXJkLXBhcnR5IHBsYXRmb3JtIGRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPUZhbHNlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYAorICBvciBlbHNlIGBgc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0bGliJylgYC4KIGBgUHl0aG9uX1NPQUJJYGAKICAgRXh0ZW5zaW9uIHN1ZmZpeCBmb3IgbW9kdWxlcy4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ19mbGFnKCdTT0FCSScpYGAgb3IgY29tcHV0ZWQgZnJvbQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ19mbGFnKCdFWFRfU1VGRklYJylgYCBvcgotICBgYHB5dGhvbi1jb25maWcgLS1leHRlbnNpb24tc3VmZml4YGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU09BQkknKWBgIG9yIGNvbXB1dGVkIGZyb20KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJylgYCBvcgorICBgYHB5dGhvbi1jb25maWcgLS1leHRlbnNpb24tc3VmZml4YGAuIElmIHBhY2thZ2UgYGBkaXN0dXRpbHMuc3lzY29uZmlnYGAgaXMKKyAgbm90IGF2YWlsYWJsZSwgYGBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPQUJJJylgYCBvcgorICBgYHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpYGAgYXJlIHVzZWQuCiBgYFB5dGhvbl9Db21waWxlcl9GT1VORGBgCiAgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiBjb21waWxlci4KIGBgUHl0aG9uX0NPTVBJTEVSYGAKQEAgLTEwNyw4ICsxMjgsMTQgQEAKIGBgUHl0aG9uX0NPTVBJTEVSX0lEYGAKICAgQSBzaG9ydCBzdHJpbmcgdW5pcXVlIHRvIHRoZSBjb21waWxlci4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6CiAgICAgKiBJcm9uUHl0aG9uCitgYFB5dGhvbl9ET1RORVRfTEFVTkNIRVJgYAorICBUaGUgYGAuTmV0YGAgaW50ZXJwcmV0ZXIuIE9ubHkgdXNlZCBieSBgYElyb25QeXRob25gYCBpbXBsZW1lbnRhdGlvbi4KIGBgUHl0aG9uX0RldmVsb3BtZW50X0ZPVU5EYGAKICAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIGRldmVsb3BtZW50IGFydGlmYWN0cy4KK2BgUHl0aG9uX0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORGBgCisgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiBkZXZlbG9wbWVudCBhcnRpZmFjdHMgZm9yIFB5dGhvbiBtb2R1bGUuCitgYFB5dGhvbl9EZXZlbG9wbWVudC5FbWJlZF9GT1VORGBgCisgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiBkZXZlbG9wbWVudCBhcnRpZmFjdHMgZm9yIFB5dGhvbiBlbWJlZGRpbmcuCiBgYFB5dGhvbl9JTkNMVURFX0RJUlNgYAogICBUaGUgUHl0aG9uIGluY2x1ZGUgZGlyZWN0b3JpZXMuCiBgYFB5dGhvbl9MSUJSQVJJRVNgYApAQCAtMTI1LDYgKzE1Miw4IEBACiAgIFB5dGhvbiBtaW5vciB2ZXJzaW9uLgogYGBQeXRob25fVkVSU0lPTl9QQVRDSGBgCiAgIFB5dGhvbiBwYXRjaCB2ZXJzaW9uLgorYGBQeXRob25fUHlQeV9WRVJTSU9OYGAKKyAgUHl0aG9uIFB5UHkgdmVyc2lvbi4KIGBgUHl0aG9uX051bVB5X0ZPVU5EYGAKICAgU3lzdGVtIGhhcyB0aGUgTnVtUHkuCiBgYFB5dGhvbl9OdW1QeV9JTkNMVURFX0RJUlNgYApAQCAtMjM3LDggKzI2Niw5IEBACiAgICogYGBPTkxZYGA6IE9ubHkgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCB0byBsb29rLXVwIGZvciB0aGUKICAgICBpbnRlcnByZXRlci4KICAgKiBgYFNUQU5EQVJEYGA6IFRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIG5vdCB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQotICAgIGludGVycHJldGVyLiBJbiB0aGlzIGNhc2UsIHZhcmlhYmxlIGBgUHl0aG9uX0ZJTkRfUkVHSVNUUllgYCAoV2luZG93cykKLSAgICBvciBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAgKG1hY09TKSBjYW4gYmUgc2V0IHdpdGggdmFsdWUgYGBMQVNUYGAgb3IKKyAgICBpbnRlcnByZXRlciBidXQgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBQQVRIYGAgaXMgYWx3YXlzIGNvbnNpZGVyZWQuCisgICAgSW4gdGhpcyBjYXNlLCB2YXJpYWJsZSBgYFB5dGhvbl9GSU5EX1JFR0lTVFJZYGAgKFdpbmRvd3MpIG9yCisgICAgYGBDTUFLRV9GSU5EX0ZSQU1FV09SS2BgIChtYWNPUykgY2FuIGJlIHNldCB3aXRoIHZhbHVlIGBgTEFTVGBgIG9yCiAgICAgYGBORVZFUmBgIHRvIHNlbGVjdCBwcmVmZXJhYmx5IHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSB2aXJ0dWFsCiAgICAgZW52aXJvbm1lbnQuCiAKQEAgLTI0OCw2ICsyNzgsMzkgQEAKICAgICByZWNvbW1lbmRlZCB0byBhbHNvIGluY2x1ZGUgdGhlIGNvbXBvbmVudCBgYEludGVycHJldGVyYGAgdG8gZ2V0IGV4cGVjdGVkCiAgICAgcmVzdWx0LgogCitgYFB5dGhvbl9GSU5EX0lNUExFTUVOVEFUSU9OU2BgCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcywgaW4gYW4gb3JkZXJlZCBsaXN0LCB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucworICB3aGljaCB3aWxsIGJlIHNlYXJjaGVkLiBUaGUgYGBQeXRob25fRklORF9JTVBMRU1FTlRBVElPTlNgYCB2YXJpYWJsZSBjYW4KKyAgaG9sZCB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAqIGBgQ1B5dGhvbmBgOiB0aGlzIGlzIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbi4gVmFyaW91cyBwcm9kdWN0cywgbGlrZQorICAgIGBgQW5hY29uZGFgYCBvciBgYEFjdGl2ZVB5dGhvbmBgLCByZWx5IG9uIHRoaXMgaW1wbGVtZW50YXRpb24uCisgICogYGBJcm9uUHl0aG9uYGA6IFRoaXMgaW1wbGVtZW50YXRpb24gdXNlIHRoZSBgYENTaGFycGBgIGxhbmd1YWdlIGZvcgorICAgIGBgLk5FVCBGcmFtZXdvcmtgYCBvbiB0b3Agb2YgdGhlIGBEeW5hbWljIExhbmd1YWdlIFJ1bnRpbWVgIChgYERMUmBgKS4KKyAgICBTZWUgYElyb25QeXRob24gPGh0dHA6Ly9pcm9ucHl0aG9uLm5ldD5gXy4KKyAgKiBgYFB5UHlgYDogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2UgYGBSUHl0aG9uYGAgbGFuZ3VhZ2UgYW5kCisgICAgYGBSUHl0aG9uIHRyYW5zbGF0aW9uIHRvb2xjaGFpbmBgIHRvIHByb2R1Y2UgdGhlIHB5dGhvbiBpbnRlcnByZXRlci4KKyAgICBTZWUgYFB5UHkgPGh0dHBzOi8vd3d3LnB5cHkub3JnPmBfLgorCisgIFRoZSBkZWZhdWx0IHZhbHVlIGlzOgorCisgICogV2luZG93cyBwbGF0Zm9ybTogYGBDUHl0aG9uYGAsIGBgSXJvblB5dGhvbmBgCisgICogT3RoZXIgcGxhdGZvcm1zOiBgYENQeXRob25gYAorCisgIC4uIG5vdGU6OgorCisgICAgVGhpcyBoaW50IGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5IG9mIGFsbCBoaW50cywgc28gZXZlbiBpZiwgZm9yIGV4YW1wbGUsCisgICAgeW91IHNwZWNpZnkgYGBJcm9uUHl0aG9uYGAgZmlyc3QgYW5kIGBgQ1B5dGhvbmBgIGluIHNlY29uZCwgYSBweXRob24KKyAgICBwcm9kdWN0IGJhc2VkIG9uIGBgQ1B5dGhvbmBgIGNhbiBiZSBzZWxlY3RlZCBiZWNhdXNlLCBmb3IgZXhhbXBsZSB3aXRoCisgICAgYGBQeXRob25fRklORF9TVFJBVEVHWT1MT0NBVElPTmBgLCBlYWNoIGxvY2F0aW9uIHdpbGwgYmUgc2VhcmNoIGZpcnN0IGZvcgorICAgIGBgSXJvblB5dGhvbmBgIGFuZCBzZWNvbmQgZm9yIGBgQ1B5dGhvbmBgLgorCisgIC4uIG5vdGU6OgorCisgICAgV2hlbiBgYElyb25QeXRob25gYCBpcyBzcGVjaWZpZWQsIG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIGBgV2luZG93c2BgLCB0aGUKKyAgICBgYC5OZXRgYCBpbnRlcnByZXRlciAoaS5lLiBgYG1vbm9gYCBjb21tYW5kKSBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUKKyAgICB0aHJvdWdoIHRoZSBgYFBBVEhgYCB2YXJpYWJsZS4KKwogQXJ0aWZhY3RzIFNwZWNpZmljYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTI2MCw2ICszMjMsOSBAQAogYGBQeXRob25fQ09NUElMRVJgYAogICBUaGUgcGF0aCB0byB0aGUgY29tcGlsZXIuCiAKK2BgUHl0aG9uX0RPVE5FVF9MQVVOQ0hFUmBgCisgIFRoZSBgYC5OZXRgYCBpbnRlcnByZXRlci4gT25seSB1c2VkIGJ5IGBgSXJvblB5dGhvbmBgIGltcGxlbWVudGF0aW9uLgorCiBgYFB5dGhvbl9MSUJSQVJZYGAKICAgVGhlIHBhdGggdG8gdGhlIGxpYnJhcnkuIEl0IHdpbGwgYmUgdXNlZCB0byBjb21wdXRlIHRoZQogICB2YXJpYWJsZXMgYGBQeXRob25fTElCUkFSSUVTYGAsIGBgUHl0aG9uX0xJQlJBWV9ESVJTYGAgYW5kCkBAIC0yODYsNiArMzUyLDIyIEBACiAgIElmIG1vcmUgdGhhbiBvbmUgYXJ0aWZhY3QgaXMgc3BlY2lmaWVkLCBpdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNhYmlsaXR5IHRvCiAgIGVuc3VyZSB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIHZhcmlvdXMgYXJ0aWZhY3RzLgogCitCeSBkZWZhdWx0LCB0aGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYWxscyBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgb2YgYQorcHJvamVjdCB3aXRoIGRpZmZlcmVudCB2ZXJzaW9uL2NvbXBvbmVudCByZXF1aXJlbWVudHMgd2hpbGUgcHJvdmlkaW5nIGNvcnJlY3QKK2FuZCBjb25zaXN0ZW50IHJlc3VsdHMgZm9yIGVhY2ggY2FsbC4gVG8gc3VwcG9ydCB0aGlzIGJlaGF2aW9yLCBgYENNYWtlYGAgY2FjaGUKK2lzIG5vdCB1c2VkIGluIHRoZSB0cmFkaXRpb25hbCB3YXkgd2hpY2ggY2FuIGJlIHByb2JsZW1hdGljIGZvciBpbnRlcmFjdGl2ZQorc3BlY2lmaWNhdGlvbi4gU28sIHRvIGVuYWJsZSBhbHNvIGludGVyYWN0aXZlIHNwZWNpZmljYXRpb24sIG1vZHVsZSBiZWhhdmlvcgorY2FuIGJlIGNvbnRyb2xlZCB3aXRoIHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6CisKK2BgUHl0aG9uX0FSVElGQUNUU19JTlRFUkFDVElWRWBgCisgIFNlbGVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgYSBib29sZWFuIHZhcmlhYmxlOgorCisgICogSWYgc2V0IHRvIGBgVFJVRWBgOiBDcmVhdGUgQ01ha2UgY2FjaGUgZW50cmllcyBmb3IgdGhlIGFib3ZlIGFydGlmYWN0CisgICAgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgc28gdGhhdCB1c2VycyBjYW4gZWRpdCB0aGVtIGludGVyYWN0aXZlbHkuCisgICAgVGhpcyBkaXNhYmxlcyBzdXBwb3J0IGZvciBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudCByZXF1aXJlbWVudHMuCisgICogSWYgc2V0IHRvIGBgRkFMU0VgYCBvciB1bmRlZmluZWQ6IEVuYWJsZSBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudAorICAgIHJlcXVpcmVtZW50cy4KKwogQ29tbWFuZHMKIF5eXl5eXl5eCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFB5dGhvbi9TdXBwb3J0LmNtYWtlIGIvTW9kdWxlcy9GaW5kUHl0aG9uL1N1cHBvcnQuY21ha2UKaW5kZXggOGFhN2I5Ny4uMWJlMDYyNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUHl0aG9uL1N1cHBvcnQuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUHl0aG9uL1N1cHBvcnQuY21ha2UKQEAgLTc1LDcxICs3NSwxMzUgQEAKICAgICAgIChfUFlUSE9OX2lzTXVsdGlDb25maWcgT1IgQ01BS0VfQlVJTERfVFlQRSkpCiAgICAgIyBpZiB0aGUgZ2VuZXJhdG9yIGlzIG11bHRpLWNvbmZpZyBvciBpZiBDTUFLRV9CVUlMRF9UWVBFIGlzIHNldCBmb3IKICAgICAjIHNpbmdsZS1jb25maWcgZ2VuZXJhdG9ycywgc2V0IG9wdGltaXplZCBhbmQgZGVidWcgbGlicmFyaWVzCi0gICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlkgIiIpCi0gICAgZm9yZWFjaCAoX1BZVEhPTl9saWJuYW1lIElOIExJU1RTICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9SRUxFQVNFICkKLSAgICAgIGxpc3QoIEFQUEVORCAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlkgb3B0aW1pemVkICIke19QWVRIT05fbGlibmFtZX0iICkKKyAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTICIiKQorICAgIGZvcmVhY2ggKF9QWVRIT05fbGlibmFtZSBJTiBMSVNUUyAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgIGxpc3QoIEFQUEVORCAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyBvcHRpbWl6ZWQgIiR7X1BZVEhPTl9saWJuYW1lfSIpCiAgICAgZW5kZm9yZWFjaCgpCi0gICAgZm9yZWFjaCAoX1BZVEhPTl9saWJuYW1lIElOIExJU1RTICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9ERUJVRyApCi0gICAgICBsaXN0KCBBUFBFTkQgJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZIGRlYnVnICIke19QWVRIT05fbGlibmFtZX0iICkKKyAgICBmb3JlYWNoIChfUFlUSE9OX2xpYm5hbWUgSU4gTElTVFMgJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZX0RFQlVHKQorICAgICAgbGlzdCggQVBQRU5EICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTIGRlYnVnICIke19QWVRIT05fbGlibmFtZX0iKQogICAgIGVuZGZvcmVhY2goKQogICBlbHNlaWYgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9SRUxFQVNFKQotICAgIHNldCAoJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZICIkeyR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9SRUxFQVNFfSIpCisgICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfUkVMRUFTRX0iKQogICBlbHNlaWYgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9ERUJVRykKLSAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWSAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfREVCVUd9IikKKyAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTICIkeyR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9ERUJVR30iKQogICBlbHNlKCkKLSAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWSAiJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZLU5PVEZPVU5EIikKKyAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSSUVTICIke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlktTk9URk9VTkQiKQogICBlbmRpZigpCi0KLSAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUll9IikKIGVuZG1hY3JvKCkKIAogCiBtYWNybyAoX1BZVEhPTl9GSU5EX0ZSQU1FV09SS1MpCi0gIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLUykKICAgaWYgKENNQUtFX0hPU1RfQVBQTEUgT1IgQVBQTEUpCiAgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We0NNQUtFX0ZSQU1FV09SS19QQVRIfSIgX3BmZl9DTUFLRV9GUkFNRVdPUktfUEFUSCkKICAgICBzZXQgKF9wZmZfZnJhbWV3b3JrcyAke0NNQUtFX0ZSQU1FV09SS19QQVRIfQotICAgICAgICAgICAgICAgICAgICAke19wZmZfQ01BS0VfRlJBTUVXT1JLX1BBVEh9Ci0gICAgICAgICAgICAgICAgICAgIH4vTGlicmFyeS9GcmFtZXdvcmtzCi0gICAgICAgICAgICAgICAgICAgIC91c3IvbG9jYWwvRnJhbWV3b3JrcwotICAgICAgICAgICAgICAgICAgICAke0NNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSH0pCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtfcGZmX0NNQUtFX0ZSQU1FV09SS19QQVRIfQorICAgICAgICAgICAgICAgICAgICAgICAgIH4vTGlicmFyeS9GcmFtZXdvcmtzCisgICAgICAgICAgICAgICAgICAgICAgICAgL3Vzci9sb2NhbC9GcmFtZXdvcmtzCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEh9KQogICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF9wZmZfZnJhbWV3b3JrcykKLSAgICBmb3JlYWNoIChfcGZmX2ZyYW1ld29yayBJTiBMSVNUUyBfcGZmX2ZyYW1ld29ya3MpCi0gICAgICBpZiAoRVhJU1RTICR7X3BmZl9mcmFtZXdvcmt9L1B5dGhvbiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9LmZyYW1ld29yaykKLSAgICAgICAgbGlzdCAoQVBQRU5EICR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS1MgJHtfcGZmX2ZyYW1ld29ya30vUHl0aG9uJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUn0uZnJhbWV3b3JrKQotICAgICAgZW5kaWYoKQotICAgICAgaWYgKEVYSVNUUyAke19wZmZfZnJhbWV3b3JrfS9QeXRob24uZnJhbWV3b3JrKQotICAgICAgICBsaXN0IChBUFBFTkQgJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLUyAke19wZmZfZnJhbWV3b3JrfS9QeXRob24uZnJhbWV3b3JrKQorICAgIGZvcmVhY2ggKF9wZmZfaW1wbGVtZW50YXRpb24gSU4gTElTVFMgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TKQorICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV8ke19wZmZfaW1wbGVtZW50YXRpb259X0ZSQU1FV09SS1MpCisgICAgICBpZiAoX3BmZl9pbXBsZW1lbnRhdGlvbiBTVFJFUVVBTCAiQ1B5dGhvbiIpCisgICAgICAgIGZvcmVhY2ggKF9wZmZfZnJhbWV3b3JrIElOIExJU1RTIF9wZmZfZnJhbWV3b3JrcykKKyAgICAgICAgICBpZiAoRVhJU1RTICR7X3BmZl9mcmFtZXdvcmt9L1B5dGhvbiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9LmZyYW1ld29yaykKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fJHtfcGZmX2ltcGxlbWVudGF0aW9ufV9GUkFNRVdPUktTICR7X3BmZl9mcmFtZXdvcmt9L1B5dGhvbiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9LmZyYW1ld29yaykKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgaWYgKEVYSVNUUyAke19wZmZfZnJhbWV3b3JrfS9QeXRob24uZnJhbWV3b3JrKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV8ke19wZmZfaW1wbGVtZW50YXRpb259X0ZSQU1FV09SS1MgJHtfcGZmX2ZyYW1ld29ya30vUHl0aG9uLmZyYW1ld29yaykKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGZvcmVhY2goKQorICAgICAgZWxzZWlmIChfcGZmX2ltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgICAgICAgZm9yZWFjaCAoX3BmZl9mcmFtZXdvcmsgSU4gTElTVFMgX3BmZl9mcmFtZXdvcmtzKQorICAgICAgICAgIGlmIChFWElTVFMgJHtfcGZmX2ZyYW1ld29ya30vSXJvblB5dGhvbi5mcmFtZXdvcmspCisgICAgICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9XyR7X3BmZl9pbXBsZW1lbnRhdGlvbn1fRlJBTUVXT1JLUyAke19wZmZfZnJhbWV3b3JrfS9Jcm9uUHl0aG9uLmZyYW1ld29yaykKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGZvcmVhY2goKQogICAgICAgZW5kaWYoKQogICAgIGVuZGZvcmVhY2goKQorICAgIHVuc2V0IChfcGZmX2ltcGxlbWVudGF0aW9uKQogICAgIHVuc2V0IChfcGZmX2ZyYW1ld29ya3MpCiAgICAgdW5zZXQgKF9wZmZfZnJhbWV3b3JrKQogICBlbmRpZigpCiBlbmRtYWNybygpCiAKLWZ1bmN0aW9uIChfUFlUSE9OX0dFVF9GUkFNRVdPUktTIF9QWVRIT05fUEdGX0ZSQU1FV09SS19QQVRIUyBfUFlUSE9OX1ZFUlNJT04pCi0gIHNldCAoX1BZVEhPTl9GUkFNRVdPUktfUEFUSFMpCi0gIGZvcmVhY2ggKF9QWVRIT05fRlJBTUVXT1JLIElOIExJU1RTICR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS1MpCi0gICAgbGlzdCAoQVBQRU5EIF9QWVRIT05fRlJBTUVXT1JLX1BBVEhTCi0gICAgICAgICAgIiR7X1BZVEhPTl9GUkFNRVdPUkt9L1ZlcnNpb25zLyR7X1BZVEhPTl9WRVJTSU9OfSIpCitmdW5jdGlvbiAoX1BZVEhPTl9HRVRfRlJBTUVXT1JLUyBfUFlUSE9OX1BHRl9GUkFNRVdPUktfUEFUSFMpCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAoUEFSU0VfQVJHViAxIF9QR0YgIiIgIiIgIklNUExFTUVOVEFUSU9OUztWRVJTSU9OIikKKworICBpZiAoTk9UIF9QR0ZfSU1QTEVNRU5UQVRJT05TKQorICAgIHNldCAoX1BHRl9JTVBMRU1FTlRBVElPTlMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlN9KQorICBlbmRpZigpCisKKyAgc2V0IChmcmFtZXdvcmtfcGF0aHMpCisKKyAgZm9yZWFjaCAoaW1wbGVtZW50YXRpb24gSU4gTElTVFMgX1BHRl9JTVBMRU1FTlRBVElPTlMpCisgICAgaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJDUHl0aG9uIikKKyAgICAgIGZvcmVhY2ggKHZlcnNpb24gSU4gTElTVFMgX1BHRl9WRVJTSU9OKQorICAgICAgICBmb3JlYWNoIChmcmFtZXdvcmsgSU4gTElTVFMgXyR7X1BZVEhPTl9QUkVGSVh9XyR7aW1wbGVtZW50YXRpb259X0ZSQU1FV09SS1MpCisgICAgICAgICAgaWYgKEVYSVNUUyAiJHtmcmFtZXdvcmt9L1ZlcnNpb25zLyR7dmVyc2lvbn0iKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIGZyYW1ld29ya19wYXRocyAiJHtmcmFtZXdvcmt9L1ZlcnNpb25zLyR7dmVyc2lvbn0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBlbmRmb3JlYWNoKCkKKyAgICBlbHNlaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgICAgIGZvcmVhY2ggKHZlcnNpb24gSU4gTElTVFMgX1BHRl9WRVJTSU9OKQorICAgICAgICBmb3JlYWNoIChmcmFtZXdvcmsgSU4gTElTVFMgXyR7X1BZVEhPTl9QUkVGSVh9XyR7aW1wbGVtZW50YXRpb259X0ZSQU1FV09SS1MpCisgICAgICAgICAgIyBwaWNrLXVwIGFsbCBhdmFpbGFibGUgdmVyc2lvbnMKKyAgICAgICAgICBmaWxlIChHTE9CIHZlcnNpb25zIExJU1RfRElSRUNUT1JJRVMgdHJ1ZSBSRUxBVElWRSAiJHtmcmFtZXdvcmt9L1ZlcnNpb25zLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke2ZyYW1ld29ya30vVmVyc2lvbnMvJHt2ZXJzaW9ufSoiKQorICAgICAgICAgIGxpc3QgKFNPUlQgdmVyc2lvbnMgT1JERVIgREVTQ0VORElORykKKyAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gdmVyc2lvbnMgUFJFUEVORCAiJHtmcmFtZXdvcmt9L1ZlcnNpb25zLyIpCisgICAgICAgICAgbGlzdCAoQVBQRU5EIGZyYW1ld29ya19wYXRocyAke3ZlcnNpb25zfSkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBlbmRmb3JlYWNoKCkKKyAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQotICBzZXQgKCR7X1BZVEhPTl9QR0ZfRlJBTUVXT1JLX1BBVEhTfSAke19QWVRIT05fRlJBTUVXT1JLX1BBVEhTfSBQQVJFTlRfU0NPUEUpCisKKyAgc2V0ICgke19QWVRIT05fUEdGX0ZSQU1FV09SS19QQVRIU30gJHtmcmFtZXdvcmtfcGF0aHN9IFBBUkVOVF9TQ09QRSkKIGVuZGZ1bmN0aW9uKCkKIAotZnVuY3Rpb24gKF9QWVRIT05fR0VUX1JFR0lTVFJJRVMgX1BZVEhPTl9QR1JfUkVHSVNUUllfUEFUSFMgX1BZVEhPTl9WRVJTSU9OKQotICBzdHJpbmcgKFJFUExBQ0UgIi4iICIiIF9QWVRIT05fVkVSU0lPTl9OT19ET1RTICR7X1BZVEhPTl9WRVJTSU9OfSkKLSAgc2V0ICgke19QWVRIT05fUEdSX1JFR0lTVFJZX1BBVEhTfQotICAgICAgIFtIS0VZX0NVUlJFTlRfVVNFUlxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHtfUFlUSE9OX1ZFUlNJT059LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0h9XFxJbnN0YWxsUGF0aF0KLSAgICAgICBbSEtFWV9DVVJSRU5UX1VTRVJcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7X1BZVEhPTl9WRVJTSU9OfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn1cXEluc3RhbGxQYXRoXQotICAgICAgIFtIS0VZX0NVUlJFTlRfVVNFUlxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHtfUFlUSE9OX1ZFUlNJT059XFxJbnN0YWxsUGF0aF0KLSAgICAgICBbSEtFWV9DVVJSRU5UX1VTRVJcXFNPRlRXQVJFXFxQeXRob25cXENvbnRpbnV1bUFuYWx5dGljc1xcQW5hY29uZGEke19QWVRIT05fVkVSU0lPTl9OT19ET1RTfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxDb250aW51dW1BbmFseXRpY3NcXEFuYWNvbmRhJHtfUFlUSE9OX1ZFUlNJT05fTk9fRE9UU30tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDJ9XFxJbnN0YWxsUGF0aF0KLSAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke19QWVRIT05fVkVSU0lPTn0tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH1cXEluc3RhbGxQYXRoXQotICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7X1BZVEhPTl9WRVJTSU9OfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn1cXEluc3RhbGxQYXRoXQotICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7X1BZVEhPTl9WRVJTSU9OfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXFB5dGhvblxcQ29udGludXVtQW5hbHl0aWNzXFxBbmFjb25kYSR7X1BZVEhPTl9WRVJTSU9OX05PX0RPVFN9LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0h9XFxJbnN0YWxsUGF0aF0KLSAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcUHl0aG9uXFxDb250aW51dW1BbmFseXRpY3NcXEFuYWNvbmRhJHtfUFlUSE9OX1ZFUlNJT05fTk9fRE9UU30tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDJ9XFxJbnN0YWxsUGF0aF0KLSAgICAgICBQQVJFTlRfU0NPUEUpCitmdW5jdGlvbiAoX1BZVEhPTl9HRVRfUkVHSVNUUklFUyBfUFlUSE9OX1BHUl9SRUdJU1RSWV9QQVRIUykKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDEgX1BHUiAiIiAiIiAiSU1QTEVNRU5UQVRJT05TO1ZFUlNJT04iKQorCisgIGlmIChOT1QgX1BHUl9JTVBMRU1FTlRBVElPTlMpCisgICAgc2V0IChfUEdSX0lNUExFTUVOVEFUSU9OUyAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OU30pCisgIGVuZGlmKCkKKworICBzZXQgKHJlZ2lzdHJpZXMpCisKKyAgZm9yZWFjaCAoaW1wbGVtZW50YXRpb24gSU4gTElTVFMgX1BHUl9JTVBMRU1FTlRBVElPTlMpCisgICAgaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJDUHl0aG9uIikKKyAgICAgIGZvcmVhY2ggKHZlcnNpb24gSU4gTElTVFMgX1BHUl9WRVJTSU9OKQorICAgICAgICBzdHJpbmcgKFJFUExBQ0UgIi4iICIiIHZlcnNpb25fbm9fZG90cyAke3ZlcnNpb259KQorICAgICAgICBsaXN0IChBUFBFTkQgcmVnaXN0cmllcworICAgICAgICAgICAgICAgICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke3ZlcnNpb259LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0h9XFxJbnN0YWxsUGF0aF0KKyAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0NVUlJFTlRfVVNFUlxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHt2ZXJzaW9ufS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn1cXEluc3RhbGxQYXRoXSkKKyAgICAgICAgaWYgKHZlcnNpb24gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIzLjUiKQorICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKGFyY2ggIltIS0VZX0NVUlJFTlRfVVNFUlxcU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHt2ZXJzaW9ufTtTeXNBcmNoaXRlY3R1cmVdIiBOQU1FKQorICAgICAgICAgIGlmIChhcmNoIE1BVENIRVMgIigke18ke19QWVRIT05fUFJFRklYfV9BUkNIfXwke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn0pYml0IikKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCByZWdpc3RyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke3ZlcnNpb259XFxJbnN0YWxsUGF0aF0pCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBsaXN0IChBUFBFTkQgcmVnaXN0cmllcworICAgICAgICAgICAgICAgICAgICAgICBbSEtFWV9DVVJSRU5UX1VTRVJcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7dmVyc2lvbn1cXEluc3RhbGxQYXRoXSkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBsaXN0IChBUFBFTkQgcmVnaXN0cmllcworICAgICAgICAgICAgICAgICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxDb250aW51dW1BbmFseXRpY3NcXEFuYWNvbmRhJHt2ZXJzaW9uX25vX2RvdHN9LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0h9XFxJbnN0YWxsUGF0aF0KKyAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0NVUlJFTlRfVVNFUlxcU09GVFdBUkVcXFB5dGhvblxcQ29udGludXVtQW5hbHl0aWNzXFxBbmFjb25kYSR7dmVyc2lvbl9ub19kb3RzfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn1cXEluc3RhbGxQYXRoXQorICAgICAgICAgICAgICAgICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHt2ZXJzaW9ufS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIfVxcSW5zdGFsbFBhdGhdCisgICAgICAgICAgICAgICAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke3ZlcnNpb259LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyfVxcSW5zdGFsbFBhdGhdCisgICAgICAgICAgICAgICAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke3ZlcnNpb259XFxJbnN0YWxsUGF0aF0KKyAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxQeXRob25cXENvbnRpbnV1bUFuYWx5dGljc1xcQW5hY29uZGEke3ZlcnNpb25fbm9fZG90c30tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH1cXEluc3RhbGxQYXRoXQorICAgICAgICAgICAgICAgICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXFB5dGhvblxcQ29udGludXVtQW5hbHl0aWNzXFxBbmFjb25kYSR7dmVyc2lvbl9ub19kb3RzfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn1cXEluc3RhbGxQYXRoXSkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVsc2VpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIklyb25QeXRob24iKQorICAgICAgZm9yZWFjaCAodmVyc2lvbiAgSU4gTElTVFMgX1BHUl9WRVJTSU9OKQorICAgICAgICBsaXN0IChBUFBFTkQgcmVnaXN0cmllcyBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcSXJvblB5dGhvblxcJHt2ZXJzaW9ufVxcSW5zdGFsbFBhdGhdKQorICAgICAgZW5kZm9yZWFjaCgpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBzZXQgKCR7X1BZVEhPTl9QR1JfUkVHSVNUUllfUEFUSFN9ICIke3JlZ2lzdHJpZXN9IiBQQVJFTlRfU0NPUEUpCiBlbmRmdW5jdGlvbigpCiAKIApAQCAtMTg3LDcgKzI1MSwxMSBAQAogZW5kZnVuY3Rpb24oKQogCiBmdW5jdGlvbiAoX1BZVEhPTl9HRVRfUEFUSF9TVUZGSVhFUyBfUFlUSE9OX1BHUFNfUEFUSF9TVUZGSVhFUykKLSAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDEgX1BHUFMgIkxJQlJBUlk7SU5DTFVERSIgIlZFUlNJT04iICIiKQorICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMSBfUEdQUyAiSU5URVJQUkVURVI7Q09NUElMRVI7TElCUkFSWTtJTkNMVURFIiAiIiAiSU1QTEVNRU5UQVRJT05TO1ZFUlNJT04iKQorCisgIGlmIChOT1QgX1BHUFNfSU1QTEVNRU5UQVRJT05TKQorICAgIHNldCAoX1BHUFNfSU1QTEVNRU5UQVRJT05TICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TfSkKKyAgZW5kaWYoKQogCiAgIGlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUykKICAgICBzZXQgKGFiaSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1N9IikKQEAgLTE5Niw5MyArMjY0LDE2MyBAQAogICBlbmRpZigpCiAKICAgc2V0IChwYXRoX3N1ZmZpeGVzKQotICBpZiAoX1BHUFNfTElCUkFSWSkKLSAgICBpZiAoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUpCi0gICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyBsaWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0pCi0gICAgZW5kaWYoKQotICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzIGxpYiBsaWJzKQogCi0gICAgaWYgKENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFKQotICAgICAgc2V0IChzdWZmaXhlcyAiJHthYml9IikKLSAgICAgIGlmIChzdWZmaXhlcykKLSAgICAgICAgbGlzdCAoVFJBTlNGT1JNIHN1ZmZpeGVzIFBSRVBFTkQgImxpYi9weXRob24ke19QR1BTX1ZFUlNJT059L2NvbmZpZy0ke19QR1BTX1ZFUlNJT059IikKLSAgICAgICAgbGlzdCAoVFJBTlNGT1JNIHN1ZmZpeGVzIEFQUEVORCAiLSR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9IikKKyAgZm9yZWFjaCAoaW1wbGVtZW50YXRpb24gSU4gTElTVFMgX1BHUFNfSU1QTEVNRU5UQVRJT05TKQorICAgIGlmIChpbXBsZW1lbnRhdGlvbiBTVFJFUVVBTCAiQ1B5dGhvbiIpCisgICAgICBpZiAoX1BHUFNfSU5URVJQUkVURVIpCisgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzIGJpbiBTY3JpcHRzKQogICAgICAgZWxzZSgpCi0gICAgICAgIHNldCAoc3VmZml4ZXMgImxpYi9weXRob24ke19QR1BTX1ZFUlNJT059L2NvbmZpZy0ke19QR1BTX1ZFUlNJT059LSR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9IikKKyAgICAgICAgZm9yZWFjaCAodmVyc2lvbiBJTiBMSVNUUyBfUEdQU19WRVJTSU9OKQorICAgICAgICAgIGlmIChfUEdQU19MSUJSQVJZKQorICAgICAgICAgICAgaWYgKENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFKQorICAgICAgICAgICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyBsaWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0pCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyBsaWIgbGlicykKKworICAgICAgICAgICAgaWYgKENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFKQorICAgICAgICAgICAgICBzZXQgKHN1ZmZpeGVzICIke2FiaX0iKQorICAgICAgICAgICAgICBpZiAoc3VmZml4ZXMpCisgICAgICAgICAgICAgICAgbGlzdCAoVFJBTlNGT1JNIHN1ZmZpeGVzIFBSRVBFTkQgImxpYi9weXRob24ke19QR1BTX1ZFUlNJT059L2NvbmZpZy0ke19QR1BTX1ZFUlNJT059IikKKyAgICAgICAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gc3VmZml4ZXMgQVBQRU5EICItJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0iKQorICAgICAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICAgICBzZXQgKHN1ZmZpeGVzICJsaWIvcHl0aG9uJHtfUEdQU19WRVJTSU9OfS9jb25maWctJHtfUEdQU19WRVJTSU9OfS0ke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfSIpCisgICAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgICAgbGlzdCAoQVBQRU5EIHBhdGhfc3VmZml4ZXMgJHtzdWZmaXhlc30pCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgICBzZXQgKHN1ZmZpeGVzICIke2FiaX0iKQorICAgICAgICAgICAgaWYgKHN1ZmZpeGVzKQorICAgICAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gc3VmZml4ZXMgUFJFUEVORCAibGliL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0vY29uZmlnLSR7X1BHUFNfVkVSU0lPTn0iKQorICAgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAgIHNldCAoc3VmZml4ZXMgImxpYi9weXRob24ke19QR1BTX1ZFUlNJT059L2NvbmZpZy0ke19QR1BTX1ZFUlNJT059IikKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7c3VmZml4ZXN9KQorICAgICAgICAgIGVsc2VpZiAoX1BHUFNfSU5DTFVERSkKKyAgICAgICAgICAgIHNldCAoc3VmZml4ZXMgIiR7YWJpfSIpCisgICAgICAgICAgICBpZiAoc3VmZml4ZXMpCisgICAgICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSBzdWZmaXhlcyBQUkVQRU5EICJpbmNsdWRlL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0iKQorICAgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAgIHNldCAoc3VmZml4ZXMgImluY2x1ZGUvcHl0aG9uJHtfUEdQU19WRVJTSU9OfSIpCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke3N1ZmZpeGVzfSBpbmNsdWRlKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCiAgICAgICBlbmRpZigpCi0gICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke3N1ZmZpeGVzfSkKKyAgICBlbHNlaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgICAgIGlmIChfUEdQU19JTlRFUlBSRVRFUiBPUiBfUEdQU19DT01QSUxFUikKKyAgICAgICAgZm9yZWFjaCAodmVyc2lvbiBJTiBMSVNUUyBfUEdQU19WRVJTSU9OKQorICAgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICJzaGFyZS9pcm9ucHl0aG9uJHt2ZXJzaW9ufSIpCisgICAgICAgIGVuZGZvcmVhY2goKQorICAgICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJQeVB5IikKKyAgICAgIGlmIChfUEdQU19JTlRFUlBSRVRFUikKKyAgICAgICAgbGlzdCAoQVBQRU5EIHBhdGhfc3VmZml4ZXMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9FWEVDVVRBQkxFX1BBVEhfU1VGRklYRVN9KQorICAgICAgZWxzZWlmIChfUEdQU19MSUJSQVJZKQorICAgICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke18ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQlJBUllfUEFUSF9TVUZGSVhFU30pCisgICAgICBlbHNlaWYgKF9QR1BTX0lOQ0xVREUpCisgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BZUFlfSU5DTFVERV9QQVRIX1NVRkZJWEVTfSkKKyAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCi0gICAgc2V0IChzdWZmaXhlcyAiJHthYml9IikKLSAgICBpZiAoc3VmZml4ZXMpCi0gICAgICBsaXN0IChUUkFOU0ZPUk0gc3VmZml4ZXMgUFJFUEVORCAibGliL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0vY29uZmlnLSR7X1BHUFNfVkVSU0lPTn0iKQotICAgIGVsc2UoKQotICAgICAgc2V0IChzdWZmaXhlcyAibGliL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0vY29uZmlnLSR7X1BHUFNfVkVSU0lPTn0iKQotICAgIGVuZGlmKCkKLSAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke3N1ZmZpeGVzfSkKLSAgZWxzZWlmIChfUEdQU19JTkNMVURFKQotICAgIHNldCAoc3VmZml4ZXMgIiR7YWJpfSIpCi0gICAgaWYgKHN1ZmZpeGVzKQotICAgICAgbGlzdCAoVFJBTlNGT1JNIHN1ZmZpeGVzIFBSRVBFTkQgImluY2x1ZGUvcHl0aG9uJHtfUEdQU19WRVJTSU9OfSIpCi0gICAgZWxzZSgpCi0gICAgICBzZXQgKHN1ZmZpeGVzICJpbmNsdWRlL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0iKQotICAgIGVuZGlmKCkKLSAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke3N1ZmZpeGVzfSBpbmNsdWRlKQotICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorICBsaXN0IChSRU1PVkVfRFVQTElDQVRFUyBwYXRoX3N1ZmZpeGVzKQogCiAgIHNldCAoJHtfUFlUSE9OX1BHUFNfUEFUSF9TVUZGSVhFU30gJHtwYXRoX3N1ZmZpeGVzfSBQQVJFTlRfU0NPUEUpCiBlbmRmdW5jdGlvbigpCiAKIGZ1bmN0aW9uIChfUFlUSE9OX0dFVF9OQU1FUyBfUFlUSE9OX1BHTl9OQU1FUykKLSAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDEgX1BHTiAiUE9TSVg7RVhFQ1VUQUJMRTtDT05GSUc7TElCUkFSWTtXSU4zMjtERUJVRyIgIlZFUlNJT04iICIiKQorICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMSBfUEdOICJQT1NJWDtJTlRFUlBSRVRFUjtDT01QSUxFUjtDT05GSUc7TElCUkFSWTtXSU4zMjtERUJVRyIgIiIgIklNUExFTUVOVEFUSU9OUztWRVJTSU9OIikKKworICBpZiAoTk9UIF9QR05fSU1QTEVNRU5UQVRJT05TKQorICAgIHNldCAoX1BHTl9JTVBMRU1FTlRBVElPTlMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlN9KQorICBlbmRpZigpCiAKICAgc2V0IChuYW1lcykKIAotICBpZiAoX1BHTl9XSU4zMikKLSAgICBzdHJpbmcgKFJFUExBQ0UgIi4iICIiIF9QWVRIT05fVkVSU0lPTl9OT19ET1RTICR7X1BHTl9WRVJTSU9OfSkKKyAgZm9yZWFjaCAoaW1wbGVtZW50YXRpb24gSU4gTElTVFMgX1BHTl9JTVBMRU1FTlRBVElPTlMpCisgICAgaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJDUHl0aG9uIikKKyAgICAgIGZvcmVhY2ggKHZlcnNpb24gSU4gTElTVFMgX1BHTl9WRVJTSU9OKQorICAgICAgICBpZiAoX1BHTl9XSU4zMikKKyAgICAgICAgICBzdHJpbmcgKFJFUExBQ0UgIi4iICIiIHZlcnNpb25fbm9fZG90cyAke3ZlcnNpb259KQogCi0gICAgc2V0IChuYW1lIHB5dGhvbiR7X1BZVEhPTl9WRVJTSU9OX05PX0RPVFN9KQotICAgIGlmIChfUEdOX0RFQlVHKQotICAgICAgc3RyaW5nIChBUFBFTkQgbmFtZSAiX2QiKQotICAgIGVuZGlmKCkKKyAgICAgICAgICBzZXQgKG5hbWUgcHl0aG9uJHt2ZXJzaW9uX25vX2RvdHN9KQorICAgICAgICAgIGlmIChfUEdOX0RFQlVHKQorICAgICAgICAgICAgc3RyaW5nIChBUFBFTkQgbmFtZSAiX2QiKQorICAgICAgICAgIGVuZGlmKCkKIAotICAgIGxpc3QgKEFQUEVORCBuYW1lcyAiJHtuYW1lfSIpCi0gIGVuZGlmKCkKKyAgICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgIiR7bmFtZX0iKQorICAgICAgICBlbmRpZigpCiAKLSAgaWYgKF9QR05fUE9TSVgpCi0gICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTKQotICAgICAgc2V0IChhYmkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTfSIpCi0gICAgZWxzZSgpCi0gICAgICBpZiAoX1BHTl9FWEVDVVRBQkxFIE9SIF9QR05fQ09ORklHKQotICAgICAgICBzZXQgKGFiaSAiIikKLSAgICAgIGVsc2UoKQotICAgICAgICBzZXQgKGFiaSAibXUiICJtIiAidSIgIiIpCisgICAgICAgIGlmIChfUEdOX1BPU0lYKQorICAgICAgICAgIGlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUykKKyAgICAgICAgICAgIHNldCAoYWJpICIke18ke19QWVRIT05fUFJFRklYfV9BQklGTEFHU30iKQorICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgaWYgKF9QR05fSU5URVJQUkVURVIgT1IgX1BHTl9DT05GSUcpCisgICAgICAgICAgICAgIHNldCAoYWJpICIiKQorICAgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAgIHNldCAoYWJpICJtdSIgIm0iICJ1IiAiIikKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBlbmRpZigpCisKKyAgICAgICAgICBpZiAoYWJpKQorICAgICAgICAgICAgaWYgKF9QR05fQ09ORklHIEFORCBERUZJTkVEIENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFKQorICAgICAgICAgICAgICBzZXQgKGFiaW5hbWVzICIke2FiaX0iKQorICAgICAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gYWJpbmFtZXMgUFJFUEVORCAiJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0tcHl0aG9uJHt2ZXJzaW9ufSIpCisgICAgICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBBUFBFTkQgIi1jb25maWciKQorICAgICAgICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgJHthYmluYW1lc30pCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgICBzZXQgKGFiaW5hbWVzICIke2FiaX0iKQorICAgICAgICAgICAgbGlzdCAoVFJBTlNGT1JNIGFiaW5hbWVzIFBSRVBFTkQgInB5dGhvbiR7dmVyc2lvbn0iKQorICAgICAgICAgICAgaWYgKF9QR05fQ09ORklHKQorICAgICAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gYWJpbmFtZXMgQVBQRU5EICItY29uZmlnIikKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAke2FiaW5hbWVzfSkKKyAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHVuc2V0IChhYmluYW1lcykKKyAgICAgICAgICAgIGlmIChfUEdOX0NPTkZJRyBBTkQgREVGSU5FRCBDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSkKKyAgICAgICAgICAgICAgc2V0IChhYmluYW1lcyAiJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0tcHl0aG9uJHt2ZXJzaW9ufSIpCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgICBsaXN0IChBUFBFTkQgYWJpbmFtZXMgInB5dGhvbiR7dmVyc2lvbn0iKQorICAgICAgICAgICAgaWYgKF9QR05fQ09ORklHKQorICAgICAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gYWJpbmFtZXMgQVBQRU5EICItY29uZmlnIikKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAke2FiaW5hbWVzfSkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgICAgaWYgKF9QR05fSU5URVJQUkVURVIpCisgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyBweXRob24ke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfSBweXRob24pCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmIChpbXBsZW1lbnRhdGlvbiBTVFJFUVVBTCAiSXJvblB5dGhvbiIpCisgICAgICBpZiAoX1BHTl9JTlRFUlBSRVRFUikKKyAgICAgICAgaWYgKE5PVCBDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQorICAgICAgICAgICMgRG8gbm90IHVzZSB3cmFwcGVyIHNjcmlwdCBvbiBMaW51eCBiZWNhdXNlIGl0IGlzIGJ1Z2d5OiAtYyBpbnRlcnByZXRlciBvcHRpb24gY2Fubm90IGJlIHVzZWQKKyAgICAgICAgICBmb3JlYWNoICh2ZXJzaW9uIElOIExJU1RTIF9QR05fVkVSU0lPTikKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAiaXB5JHt2ZXJzaW9ufSIpCisgICAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0lOVEVSUFJFVEVSX05BTUVTfSkKKyAgICAgIGVsc2VpZiAoX1BHTl9DT01QSUxFUikKKyAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0NPTVBJTEVSX05BTUVTfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJQeVB5IikKKyAgICAgIGlmIChfUEdOX0lOVEVSUFJFVEVSKQorICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9OQU1FU30pCisgICAgICBlbHNlaWYgKF9QR05fTElCUkFSWSkKKyAgICAgICAgaWYgKF9QR05fV0lOMzIpCisgICAgICAgICAgZm9yZWFjaCAodmVyc2lvbiBJTiBMSVNUUyBfUEdOX1ZFUlNJT04pCisgICAgICAgICAgICBzdHJpbmcgKFJFUExBQ0UgIi4iICIiIHZlcnNpb25fbm9fZG90cyAke3ZlcnNpb259KQorCisgICAgICAgICAgICBzZXQgKG5hbWUgInB5dGhvbiR7dmVyc2lvbl9ub19kb3RzfSIpCisgICAgICAgICAgICBpZiAoX1BHTl9ERUJVRykKKyAgICAgICAgICAgICAgc3RyaW5nIChBUFBFTkQgbmFtZSAiX2QiKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICIke25hbWV9IikKKyAgICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9MSUJfTkFNRVN9KQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKLQotICAgIGlmIChhYmkpCi0gICAgICBpZiAoX1BHTl9DT05GSUcgQU5EIERFRklORUQgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUpCi0gICAgICAgIHNldCAoYWJpbmFtZXMgIiR7YWJpfSIpCi0gICAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBQUkVQRU5EICIke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfS1weXRob24ke19QR05fVkVSU0lPTn0iKQotICAgICAgICBsaXN0IChUUkFOU0ZPUk0gYWJpbmFtZXMgQVBQRU5EICItY29uZmlnIikKLSAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICR7YWJpbmFtZXN9KQotICAgICAgZW5kaWYoKQotICAgICAgc2V0IChhYmluYW1lcyAiJHthYml9IikKLSAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBQUkVQRU5EICJweXRob24ke19QR05fVkVSU0lPTn0iKQotICAgICAgaWYgKF9QR05fQ09ORklHKQotICAgICAgICBsaXN0IChUUkFOU0ZPUk0gYWJpbmFtZXMgQVBQRU5EICItY29uZmlnIikKLSAgICAgIGVuZGlmKCkKLSAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAke2FiaW5hbWVzfSkKLSAgICBlbHNlKCkKLSAgICAgIGlmIChfUEdOX0NPTkZJRyBBTkQgREVGSU5FRCBDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSkKLSAgICAgICAgc2V0IChhYmluYW1lcyAiJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0tcHl0aG9uJHtfUEdOX1ZFUlNJT059IikKLSAgICAgIGVuZGlmKCkKLSAgICAgIGxpc3QgKEFQUEVORCBhYmluYW1lcyAicHl0aG9uJHtfUEdOX1ZFUlNJT059IikKLSAgICAgIGlmIChfUEdOX0NPTkZJRykKLSAgICAgICAgbGlzdCAoVFJBTlNGT1JNIGFiaW5hbWVzIEFQUEVORCAiLWNvbmZpZyIpCi0gICAgICBlbmRpZigpCi0gICAgICBsaXN0IChBUFBFTkQgbmFtZXMgJHthYmluYW1lc30pCi0gICAgZW5kaWYoKQotICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQogCiAgIHNldCAoJHtfUFlUSE9OX1BHTl9OQU1FU30gJHtuYW1lc30gUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQpAQCAtMzIzLDcgKzQ2MSw3IEBACiAKICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcpCiAgICAgaWYgKE5BTUUgU1RSRVFVQUwgIlBSRUZJWCIpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLlBSRUZJWCxzeXNjb25maWcuRVhFQ19QUkVGSVgsc3lzY29uZmlnLkJBU0VfRVhFQ19QUkVGSVhdKSkiCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzeXNcbnRyeTpcbiAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoJzsnLmpvaW4oW3N5c2NvbmZpZy5QUkVGSVgsc3lzY29uZmlnLkVYRUNfUFJFRklYLHN5c2NvbmZpZy5CQVNFX0VYRUNfUFJFRklYXSkpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdiYXNlJykgb3IgJycsIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignaW5zdGFsbGVkX2Jhc2UnKSBvciAnJ10pKSIKICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9yZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF92YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKQEAgLTMzNCwxNiArNDcyLDI1IEBACiAgICAgICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF92YWx1ZXMpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZWlmIChOQU1FIFNUUkVRVUFMICJJTkNMVURFUyIpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9RmFsc2UpXSkpIgorICAgICAgaWYgKFdJTjMyKQorICAgICAgICBzZXQgKF9zY2hlbWUgIm50IikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQgKF9zY2hlbWUgInBvc2l4X3ByZWZpeCIpCisgICAgICBlbmRpZigpCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9RmFsc2UpXSkpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0aW5jbHVkZScpLHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGluY2x1ZGUnLCcke19zY2hlbWV9Jyksc3lzY29uZmlnLmdldF9wYXRoKCdpbmNsdWRlJyksc3lzY29uZmlnLmdldF9wYXRoKCdpbmNsdWRlJywnJHtfc2NoZW1lfScpXSkpIgogICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX3Jlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX3ZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKICAgICAgIGlmIChfcmVzdWx0KQogICAgICAgICB1bnNldCAoX3ZhbHVlcykKKyAgICAgIGVsc2UoKQorICAgICAgICBsaXN0IChSRU1PVkVfRFVQTElDQVRFUyBfdmFsdWVzKQogICAgICAgZW5kaWYoKQogICAgIGVsc2VpZiAoTkFNRSBTVFJFUVVBTCAiU09BQkkiKQotICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzeXM7IGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7c3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTT0FCSScpIG9yICcnLHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIG9yICcnXSkpIgorICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXNcbnRyeTpcbiAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoJzsnLmpvaW4oW3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU09BQkknKSBvciAnJyxzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBvciAnJ10pKVxuZXhjZXB0IEV4Y2VwdGlvbjpcbiAgIGltcG9ydCBzeXNjb25maWc7c3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTT0FCSScpIG9yICcnLHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIG9yICcnXSkpIgogICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX3Jlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX3NvYWJpCiAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCkBAIC0zNTEsMTQgKzQ5OCwxNSBAQAogICAgICAgaWYgKF9yZXN1bHQpCiAgICAgICAgIHVuc2V0IChfdmFsdWVzKQogICAgICAgZWxzZSgpCi0gICAgICAgIGxpc3QgKEdFVCBfc29hYmkgMCBfdmFsdWVzKQotICAgICAgICBpZiAoTk9UIF92YWx1ZXMpCi0gICAgICAgICAgIyB0cnkgdG8gY29tcHV0ZSBTT0FCSSBmcm9tIEVYVF9TVUZGSVgKLSAgICAgICAgICBsaXN0IChHRVQgX3NvYWJpIDEgX3ZhbHVlcykKLSAgICAgICAgICBpZiAoX3ZhbHVlcykKLSAgICAgICAgICAgICMgY2xlYW4tdXA6IHJlbW92ZSBwcmVmaXggY2hhcmFjdGVyIGFuZCBzdWZmaXgKLSAgICAgICAgICAgIHN0cmluZyAoUkVHRVggUkVQTEFDRSAiXlsuLV0oLispKCR7Q01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYfXxcXC4oc298cHlkKSkkIiAiXFwxIiBfdmFsdWVzICIke192YWx1ZXN9IikKKyAgICAgICAgZm9yZWFjaCAoX2l0ZW0gSU4gTElTVFMgX3NvYWJpKQorICAgICAgICAgIGlmIChfaXRlbSkKKyAgICAgICAgICAgIHNldCAoX3ZhbHVlcyAiJHtfaXRlbX0iKQorICAgICAgICAgICAgYnJlYWsoKQogICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICAgIGlmIChfdmFsdWVzKQorICAgICAgICAgICMgY2xlYW4tdXA6IHJlbW92ZSBwcmVmaXggY2hhcmFjdGVyIGFuZCBzdWZmaXgKKyAgICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl5bLi1dKC4rKSgke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH18XFwuKHNvfHB5ZCkpJCIgIlxcMSIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKICAgICBlbHNlKCkKQEAgLTM2Niw3ICs1MTQsOCBAQAogICAgICAgaWYgKE5BTUUgU1RSRVFVQUwgIkNPTkZJR0RJUiIpCiAgICAgICAgIHNldCAoY29uZmlnX2ZsYWcgIkxJQlBMIikKICAgICAgIGVuZGlmKCkKLSAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnOyBzeXMuc3Rkb3V0LndyaXRlKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignJHtjb25maWdfZmxhZ30nKSkiCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJyR7Y29uZmlnX2ZsYWd9JykpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJyR7Y29uZmlnX2ZsYWd9JykpIgogICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX3Jlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX3ZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVApAQCAtMzk0LDYgKzU0MywxMCBAQAogICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF92YWx1ZXMpCiAgIGVuZGlmKCkKIAorICBpZiAoV0lOMzIgQU5EIE5BTUUgTUFUQ0hFUyAiXihQUkVGSVh8Q09ORklHRElSfElOQ0xVREVTKSQiKQorICAgIGZpbGUgKFRPX0NNQUtFX1BBVEggIiR7X3ZhbHVlc30iIF92YWx1ZXMpCisgIGVuZGlmKCkKKwogICBzZXQgKCR7X1BZVEhPTl9QR0NWX1ZBTFVFfSAiJHtfdmFsdWVzfSIgUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCkBAIC00MjAsNiArNTczLDE2IEBACiAgICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1WRVJTSU9OX01JTk9SICIke0NNQUtFX01BVENIXzJ9IiBQQVJFTlRfU0NPUEUpCiAgICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1WRVJTSU9OICIke0NNQUtFX01BVENIXzF9LiR7Q01BS0VfTUFUQ0hfMn0iIFBBUkVOVF9TQ09QRSkKICAgICAgICAgc2V0ICgke19QR1ZfUFJFRklYfUFCSSAiJHtDTUFLRV9NQVRDSF8zfSIgUEFSRU5UX1NDT1BFKQorICAgICAgZWxzZWlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIE1BVENIRVMgInB5cHkoMyk/IikKKyAgICAgICAgc2V0ICh2ZXJzaW9uICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgICAgaWYgKHZlcnNpb24gRVFVQUwgIjMiKQorICAgICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1WRVJTSU9OX01BSk9SICIzIiBQQVJFTlRfU0NPUEUpCisgICAgICAgICAgc2V0ICgke19QR1ZfUFJFRklYfVZFUlNJT04gIjMiIFBBUkVOVF9TQ09QRSkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0ICgke19QR1ZfUFJFRklYfVZFUlNJT05fTUFKT1IgIjIiIFBBUkVOVF9TQ09QRSkKKyAgICAgICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9VkVSU0lPTiAiMiIgUEFSRU5UX1NDT1BFKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1BQkkgIiIgUEFSRU5UX1NDT1BFKQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZWxzZSgpCkBAIC00NjYsNiArNjI5LDM2IEBACiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIAorZnVuY3Rpb24gKF9QWVRIT05fR0VUX0xBVU5DSEVSIF9QWVRIT05fUEdMX05BTUUpCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAoUEFSU0VfQVJHViAxIF9QR0wgIklOVEVSUFJFVEVSO0NPTVBJTEVSIiAiIiAiIikKKworICB1bnNldCAoe19QWVRIT05fUEdMX05BTUV9IFBBUkVOVF9TQ09QRSkKKworICBpZiAoKF9QR0xfSU5URVJQUkVURVIgQU5EIE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKKyAgICAgIE9SIChfUEdMX0NPTVBJTEVSIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKSkKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYgKCJJcm9uUHl0aG9uIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OUworICAgICAgQU5EIE5PVCBTWVNURU1fTkFNRSBNQVRDSEVTICJXaW5kb3dzfExpbnV4IikKKyAgICBpZiAoX1BHTF9JTlRFUlBSRVRFUikKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKG5hbWUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiBOQU1FKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoZXh0ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgTEFTVF9FWFQpCisgICAgICBpZiAobmFtZSBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9JTlRFUlBSRVRFUl9OQU1FUworICAgICAgICAgIEFORCBleHQgU1RSRVFVQUwgIi5leGUiKQorICAgICAgICBzZXQgKCR7X1BZVEhPTl9QR0xfTkFNRX0gIiR7JHtfUFlUSE9OX1BSRUZJWH1fRE9UTkVUX0xBVU5DSEVSfSIgUEFSRU5UX1NDT1BFKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAobmFtZSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiBOQU1FKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoZXh0ICIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn0iIExBU1RfRVhUKQorICAgICAgaWYgKG5hbWUgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fQ09NUElMRVJfTkFNRVMKKyAgICAgICAgICBBTkQgZXh0IFNUUkVRVUFMICIuZXhlIikKKyAgICAgICAgc2V0ICgke19QWVRIT05fUEdMX05BTUV9ICIkeyR7X1BZVEhPTl9QUkVGSVh9X0RPVE5FVF9MQVVOQ0hFUn0iIFBBUkVOVF9TQ09QRSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKwogCiBmdW5jdGlvbiAoX1BZVEhPTl9WQUxJREFURV9JTlRFUlBSRVRFUikKICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKQEAgLTQ4Niw5ICs2NzksMTEgQEAKICAgICByZXR1cm4oKQogICBlbmRpZigpCiAKKyAgX3B5dGhvbl9nZXRfbGF1bmNoZXIgKGxhdW5jaGVyIElOVEVSUFJFVEVSKQorCiAgICMgdmFsaWRhdGUgQUJJIGNvbXBhdGliaWxpdHkKICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQUJJKQotICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7bGF1bmNoZXJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLmFiaWZsYWdzKSIKICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBhYmkKQEAgLTUxOSw3ICs3MTQsNyBAQAogICAgICAgZW5kaWYoKQogCiAgICAgICAjIGV4ZWN1dGFibGUgZm91bmQgbXVzdCBoYXZlIGEgc3BlY2lmaWMgdmVyc2lvbgotICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke2xhdW5jaGVyfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoJy4nLmpvaW4oW3N0cih4KSBmb3IgeCBpbiBzeXMudmVyc2lvbl9pbmZvWzoke2NvdW50fV1dKSkiCiAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIHZlcnNpb24KQEAgLTU1Myw3ICs3NDgsNyBAQAogICAgIGlmIChOT1QgcHl0aG9uX25hbWUgU1RSRVFVQUwgInB5dGhvbiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9JHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0iKQogICAgICAgIyBleGVjdXRhYmxlIGZvdW5kIGRvIG5vdCBoYXZlIHZlcnNpb24gaW4gbmFtZQogICAgICAgIyBlbnN1cmUgbWFqb3IgdmVyc2lvbiBpcyBPSwotICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke2xhdW5jaGVyfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy52ZXJzaW9uX2luZm9bMF0pKSIKICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgdmVyc2lvbgpAQCAtNTcyLDEwICs3NjcsMTEgQEAKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAotICBpZiAoQ01BS0VfU0laRU9GX1ZPSURfUCBBTkQgIkRldmVsb3BtZW50IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUworICBpZiAoQ01BS0VfU0laRU9GX1ZPSURfUCBBTkQgKCJEZXZlbG9wbWVudC5Nb2R1bGUiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTCisgICAgICAgIE9SICJEZXZlbG9wbWVudC5FbWJlZCIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCiAgICAgICBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKQogICAgICMgSW4gdGhpcyBjYXNlLCBpbnRlcnByZXRlciBtdXN0IGhhdmUgc2FtZSBhcmNoaXRlY3R1cmUgYXMgZW52aXJvbm1lbnQKLSAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYworICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke2xhdW5jaGVyfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzLCBzdHJ1Y3Q7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN0cnVjdC5jYWxjc2l6ZShcIlBcIikpKSIKICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBzaXplCkBAIC02MTcsNiArODEzLDggQEAKICAgICByZXR1cm4oKQogICBlbmRpZigpCiAKKyAgX3B5dGhvbl9nZXRfbGF1bmNoZXIgKGxhdW5jaGVyIENPTVBJTEVSKQorCiAgICMgcmV0cmlldmUgcHl0aG9uIGVudmlyb25tZW50IHZlcnNpb24gZnJvbSBjb21waWxlcgogICBzZXQgKHdvcmtpbmdfZGlyICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vUHl0aG9uQ29tcGlsZXJWZXJzaW9uLmRpciIpCiAgIGlmIChtYWpvcl92ZXJzaW9uKQpAQCAtNjMyLDEyICs4MzAsMTYgQEAKICAgICBlbmRpZigpCiAgICAgZmlsZSAoV1JJVEUgIiR7d29ya2luZ19kaXJ9L3ZlcnNpb24ucHkiICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCcuJy5qb2luKFtzdHIoeCkgZm9yIHggaW4gc3lzLnZlcnNpb25faW5mb1s6JHtjb3VudH1dXSkpXG4iKQogICBlbmRpZigpCi0gIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiAvdGFyZ2V0OmV4ZSAvZW1iZWQgIiR7d29ya2luZ19kaXJ9L3ZlcnNpb24ucHkiCisgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke2xhdW5jaGVyfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fQ09NUElMRVJfQVJDSF9GTEFHU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC90YXJnZXQ6ZXhlIC9lbWJlZCAiJHt3b3JraW5nX2Rpcn0vdmVyc2lvbi5weSIKICAgICAgICAgICAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiJHt3b3JraW5nX2Rpcn0iCiAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1FVSUVUCiAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKLSAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke3dvcmtpbmdfZGlyfS92ZXJzaW9uIgorICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChpcl9kaXIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIgRElSRUNUT1JZKQorICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiTU9OT19QQVRIPSR7aXJfZGlyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeyR7X1BZVEhPTl9QUkVGSVh9X0RPVE5FVF9MQVVOQ0hFUn0gIiR7d29ya2luZ19kaXJ9L3ZlcnNpb24uZXhlIgogICAgICAgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke3dvcmtpbmdfZGlyfSIKICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIHZlcnNpb24KQEAgLTY1OCw2ICs4NjAsNyBAQAogCiBmdW5jdGlvbiAoX1BZVEhPTl9WQUxJREFURV9MSUJSQVJZKQogICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHKQogICAgIHJldHVybigpCiAgIGVuZGlmKCkKIApAQCAtNzg0LDEzICs5ODcsMzAgQEAKICAgICAgIGxpc3QgKEFQUEVORCBfUFlUSE9OX0RJUlMgIiR7X1BZVEhPTl9ESVJ9IikKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQotICBpZiAoX1BZVEhPTl9ESVJTKQotICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF9QWVRIT05fRElSUykKLSAgZW5kaWYoKQorICBsaXN0IChSRU1PVkVfRFVQTElDQVRFUyBfUFlUSE9OX0RJUlMpCiAgIHNldCAoJHtfUFlUSE9OX1NMRF9SRVNVTFR9ICR7X1BZVEhPTl9ESVJTfSBQQVJFTlRfU0NPUEUpCiBlbmRmdW5jdGlvbigpCiAKIAorZnVuY3Rpb24gKF9QWVRIT05fU0VUX0RFVkVMT1BNRU5UX01PRFVMRV9GT1VORCBtb2R1bGUpCisgIGlmICgiRGV2ZWxvcG1lbnQuJHttb2R1bGV9IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKKyAgICBzdHJpbmcoVE9VUFBFUiAiJHttb2R1bGV9IiBpZCkKKyAgICBzZXQgKG1vZHVsZV9mb3VuZCBUUlVFKQorCisgICAgaWYgKCJMSUJSQVJZIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUworICAgICAgICBBTkQgTk9UIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICBzZXQgKG1vZHVsZV9mb3VuZCBGQUxTRSkKKyAgICBlbmRpZigpCisgICAgaWYgKCJJTkNMVURFX0RJUiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMKKyAgICAgICAgQU5EIE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCisgICAgICBzZXQgKG1vZHVsZV9mb3VuZCBGQUxTRSkKKyAgICBlbmRpZigpCisKKyAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50LiR7bW9kdWxlfV9GT1VORCAke21vZHVsZV9mb3VuZH0gUEFSRU5UX1NDT1BFKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKKwogIyBJZiBtYWpvciB2ZXJzaW9uIGlzIHNwZWNpZmllZCwgaXQgbXVzdCBiZSB0aGUgc2FtZSBhcyBpbnRlcm5hbCBtYWpvciB2ZXJzaW9uCiBpZiAoREVGSU5FRCAke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fTUFKT1IKICAgICBBTkQgTk9UICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0VRVUFMIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SKQpAQCAtODA0LDEyICsxMDI0LDM0IEBACiAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRVFVSVJFRF9JbnRlcnByZXRlciBUUlVFKQogZW5kaWYoKQogaWYgKCJOdW1QeSIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCi0gIGxpc3QgKEFQUEVORCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMgIkludGVycHJldGVyIiAiRGV2ZWxvcG1lbnQiKQotICBsaXN0IChSRU1PVkVfRFVQTElDQVRFUyAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCisgIGxpc3QgKEFQUEVORCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMgIkludGVycHJldGVyIiAiRGV2ZWxvcG1lbnQuTW9kdWxlIikKIGVuZGlmKCkKLWZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlQgSU4gSVRFTVMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIgRGV2ZWxvcG1lbnQgTnVtUHkpCitpZiAoIkRldmVsb3BtZW50IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKKyAgbGlzdCAoQVBQRU5EICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUyAiRGV2ZWxvcG1lbnQuTW9kdWxlIiAiRGV2ZWxvcG1lbnQuRW1iZWQiKQorZW5kaWYoKQorbGlzdCAoUkVNT1ZFX0RVUExJQ0FURVMgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTKQorZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBPTkVOVCBJTiBJVEVNUyBJbnRlcnByZXRlciBDb21waWxlciBEZXZlbG9wbWVudCBEZXZlbG9wbWVudC5Nb2R1bGUgRGV2ZWxvcG1lbnQuRW1iZWQgTnVtUHkpCiAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UfV9GT1VORCBGQUxTRSkKIGVuZGZvcmVhY2goKQoraWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVRVUlSRURfRGV2ZWxvcG1lbnQpCisgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRVFVSVJFRF9EZXZlbG9wbWVudC5Nb2R1bGUgVFJVRSkKKyAgc2V0ICgke19QWVRIT05fUFJFRklYfV9GSU5EX1JFUVVJUkVEX0RldmVsb3BtZW50LkVtYmVkIFRSVUUpCitlbmRpZigpCisKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMpCit1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfTU9EVUxFX0FSVElGQUNUUykKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9FTUJFRF9BUlRJRkFDVFMpCitpZiAoIkRldmVsb3BtZW50Lk1vZHVsZSIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCisgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJeKFdpbmRvd3MuKnxDWUdXSU58TVNZUykkIikKKyAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfTU9EVUxFX0FSVElGQUNUUyAiTElCUkFSWSIpCisgIGVuZGlmKCkKKyAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX01PRFVMRV9BUlRJRkFDVFMgIklOQ0xVREVfRElSIikKK2VuZGlmKCkKK2lmICgiRGV2ZWxvcG1lbnQuRW1iZWQiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTKQorICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfRU1CRURfQVJUSUZBQ1RTICJMSUJSQVJZIiAiSU5DTFVERV9ESVIiKQorZW5kaWYoKQorc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9NT0RVTEVfQVJUSUZBQ1RTfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0VNQkVEX0FSVElGQUNUU30pCitsaXN0IChSRU1PVkVfRFVQTElDQVRFUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMpCiAKICMgU2V0IHZlcnNpb25zIHRvIHNlYXJjaAogIyMgZGVmYXVsdDogc2VhcmNoIGFueSB2ZXJzaW9uCkBAIC04MTksMTMgKzEwNjEsMTMgQEAKIGlmICgke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fQ09VTlQpCiAgIGlmICgke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1QpCiAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUICJFWEFDVCIpCi0gICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUyAiJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX01JTk9SfSIpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUyAkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9NQUpPUn0uJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fTUlOT1J9KQogICBlbHNlKCkKICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMpCiAgICAgIyBhZGQgYWxsIGNvbXBhdGlibGUgdmVyc2lvbnMKICAgICBmb3JlYWNoIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTlMpCiAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9NQUpPUn0uJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fTUlOT1J9IikKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSIpCisgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKICAgZW5kaWYoKQpAQCAtODgxLDE1ICsxMTIzLDc1IEBACiBlbmRpZigpCiAKICMgSXJvblB5dGhvbiBzdXBwb3J0Cit1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0lOVEVSUFJFVEVSX05BTUVTKQordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9OQU1FUykKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fQ09NUElMRVJfQVJDSF9GTEFHUykKIGlmIChDTUFLRV9TSVpFT0ZfVk9JRF9QKQotICAjIEluIHRoaXMgY2FzZSwgc2VhcmNoIG9ubHkgZm9yIDY0Yml0IG9yIDMyYml0Ci0gIG1hdGggKEVYUFIgXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggIiR7Q01BS0VfU0laRU9GX1ZPSURfUH0gKiA4IikKLSAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fTkFNRVMgaXB5JHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH0gaXB5KQotZWxzZSgpCi0gICMgYXJjaGl0ZWN0dXJlIHVua25vd24sIHNlYXJjaCBmb3IgbmF0dXJhbCBpbnRlcnByZXRlcgotICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9OQU1FUyBpcHkpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSCBFUVVBTCAiMzIiKQorICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0NPTVBJTEVSX0FSQ0hfRkxBR1MgIi9wbGF0Zm9ybTp4ODYiKQorICBlbHNlKCkKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9BUkNIX0ZMQUdTICIvcGxhdGZvcm06eDY0IikKKyAgZW5kaWYoKQogZW5kaWYoKQotc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFUyBuZXQ0NSBuZXQ0MCkKK2lmIChOT1QgQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkxpbnV4IikKKyAgIyBEbyBub3QgdXNlIHdyYXBwZXIgc2NyaXB0IG9uIExpbnV4IGJlY2F1c2UgaXQgaXMgYnVnZ3k6IC1jIGludGVycHJldGVyIG9wdGlvbiBjYW5ub3QgYmUgdXNlZAorICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0lOVEVSUFJFVEVSX05BTUVTICJpcHkke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfSIgImlweTY0IiAiaXB5MzIiICJpcHkiKQorICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0NPTVBJTEVSX05BTUVTICJpcHljIikKK2VuZGlmKCkKK2xpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fSU5URVJQUkVURVJfTkFNRVMgImlweS5leGUiKQorbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9OQU1FUyAiaXB5Yy5leGUiKQorc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFUyBuZXQ0NSBuZXQ0MCBiaW4pCisKKyMgUHlQeSBzdXBwb3J0CitpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IgRVFVQUwgIjMiKQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX05BTUVTIHB5cHkzKQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQl9OQU1FUyBweXB5My1jKQorICBpZiAoV0lOMzIpCisgICAgIyBzcGVjaWFsIG5hbWUgZm9yIHJ1bnRpbWUgcGFydAorICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9MSUJfTkFNRVMgbGlicHlweTMtYykKKyAgZW5kaWYoKQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0lOQ0xVREVfUEFUSF9TVUZGSVhFUyBsaWIvcHlweTMpCitlbHNlKCkKKyAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9OQU1FUyBweXB5KQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQl9OQU1FUyBweXB5LWMpCisgIGlmIChXSU4zMikKKyAgICAjIHNwZWNpYWwgbmFtZSBmb3IgcnVudGltZSBwYXJ0CisgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQl9OQU1FUyBsaWJweXB5LWMpCisgIGVuZGlmKCkKKyAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9JTkNMVURFX1BBVEhfU1VGRklYRVMgbGliL3B5cHkpCitlbmRpZigpCitzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0VYRUNVVEFCTEVfUEFUSF9TVUZGSVhFUyBiaW4pCitzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQlJBUllfUEFUSF9TVUZGSVhFUyBsaWIgbGlicyBiaW4pCitsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1BZUFlfSU5DTFVERV9QQVRIX1NVRkZJWEVTIGluY2x1ZGUpCisKKyMgUHl0aG9uIEltcGxlbWVudGF0aW9ucyBoYW5kbGluZwordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OUykKK2lmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TKQorICBmb3JlYWNoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT04gSU4gTElTVFMgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMpCisgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT04gTUFUQ0hFUyAiXihDUHl0aG9ufElyb25QeXRob258UHlQeSkkIikKKyAgICAgIG1lc3NhZ2UgKEFVVEhPUl9XQVJOSU5HICJGaW5kJHtfUFlUSE9OX1BSRUZJWH06ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lNUExFTUVOVEFUSU9OfTogaW52YWxpZCB2YWx1ZSBmb3IgJyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TJy4gJ0NQeXRob24nLCAnSXJvblB5dGhvbicgb3IgJ1B5UHknIGV4cGVjdGVkLiBWYWx1ZSB3aWxsIGJlIGlnbm9yZWQuIikKKyAgICBlbHNlKCkKKyAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT059KQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCitlbHNlKCkKKyAgaWYgKFdJTjMyKQorICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TIENQeXRob24gSXJvblB5dGhvbikKKyAgZWxzZSgpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMgQ1B5dGhvbikKKyAgZW5kaWYoKQorZW5kaWYoKQorCisjIGNvbXB1dGUgbGlzdCBvZiBuYW1lcyBmb3IgaGVhZGVyIGZpbGUKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FUykKK2ZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9JTVBMRU1FTlRBVElPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT04gU1RSRVFVQUwgIkNQeXRob24iKQorICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FUyAiUHl0aG9uLmgiKQorICBlbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9JTVBMRU1FTlRBVElPTiBTVFJFUVVBTCAiUHlQeSIpCisgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX05BTUVTICJQeVB5LmgiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKwogCiAjIEFwcGxlIGZyYW1ld29ya3MgaGFuZGxpbmcKIF9weXRob25fZmluZF9mcmFtZXdvcmtzICgpCkBAIC05NjEsNyArMTI2Myw3IEBACiAKICMgQ29tcHV0ZSBzZWFyY2ggc2lnbmF0dXJlCiAjIFRoaXMgc2lnbmF0dXJlIHdpbGwgYmUgdXNlZCB0byBjaGVjayB2YWxpZGl0eSBvZiBjYWNoZWQgdmFyaWFibGVzIG9uIG5ldyBzZWFyY2gKLXNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRSAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn06JHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9TVFJBVEVHWX06JHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlZ9IikKK3NldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRSAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn06JHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlN9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1l9OiR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WfSIpCiBpZiAoTk9UIFdJTjMyKQogICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICI6JHske19QWVRIT05fUFJFRklYfV9VU0VfU1RBVElDX0xJQlN9OiIpCiBlbmRpZigpCkBAIC05NzIsNiArMTI3NCw2NCBAQAogICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICI6JHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWX0iKQogZW5kaWYoKQogCitmdW5jdGlvbiAoX1BZVEhPTl9DSEVDS19ERVZFTE9QTUVOVF9TSUdOQVRVUkUgbW9kdWxlKQorICBpZiAoIkRldmVsb3BtZW50LiR7bW9kdWxlfSIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCisgICAgc3RyaW5nIChUT1VQUEVSICIke21vZHVsZX0iIGlkKQorICAgIHNldCAoc2lnbmF0dXJlICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiIpCisgICAgaWYgKCJMSUJSQVJZIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUykKKyAgICAgIGxpc3QgKEFQUEVORCBzaWduYXR1cmUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX06IikKKyAgICBlbmRpZigpCisgICAgaWYgKCJJTkNMVURFX0RJUiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMpCisgICAgICBsaXN0IChBUFBFTkQgc2lnbmF0dXJlICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn06IikKKyAgICBlbmRpZigpCisgICAgc3RyaW5nIChNRDUgc2lnbmF0dXJlICIke3NpZ25hdHVyZX0iKQorICAgIGlmIChzaWduYXR1cmUgU1RSRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UXyR7aWR9X1NJR05BVFVSRSkKKyAgICAgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMpCisgICAgICAgIF9weXRob25fdmFsaWRhdGVfbGlicmFyeSAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0VYSVNUUykKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmICgiSU5DTFVERV9ESVIiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfJHtpZH1fQVJUSUZBQ1RTKQorICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2luY2x1ZGVfZGlyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19FWElTVFMpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfJHtpZH1fQVJUSUZBQ1RTKQorICAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBDQUNIRSkKKyAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHIENBQ0hFKQorICAgICAgZW5kaWYoKQorICAgICAgaWYgKCJJTkNMVURFX0RJUiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMpCisgICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgQ0FDSEUpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICAgIGlmICgoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfJHtpZH1fQVJUSUZBQ1RTCisgICAgICAgICAgQU5EIE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFKQorICAgICAgICBPUiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUworICAgICAgICAgIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSKSkKKyAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHIENBQ0hFKQorICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF8ke2lkfV9TSUdOQVRVUkUgQ0FDSEUpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uIChfUFlUSE9OX0NPTVBVVEVfREVWRUxPUE1FTlRfU0lHTkFUVVJFIG1vZHVsZSkKKyAgc3RyaW5nIChUT1VQUEVSICIke21vZHVsZX0iIGlkKQorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuJHttb2R1bGV9X0ZPVU5EKQorICAgIHNldCAoc2lnbmF0dXJlICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiIpCisgICAgaWYgKCJMSUJSQVJZIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUykKKyAgICAgIGxpc3QgKEFQUEVORCBzaWduYXR1cmUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX06IikKKyAgICBlbmRpZigpCisgICAgaWYgKCJJTkNMVURFX0RJUiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMpCisgICAgICBsaXN0IChBUFBFTkQgc2lnbmF0dXJlICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn06IikKKyAgICBlbmRpZigpCisgICAgc3RyaW5nIChNRDUgc2lnbmF0dXJlICIke3NpZ25hdHVyZX0iKQorICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UXyR7aWR9X1NJR05BVFVSRSAiJHtzaWduYXR1cmV9IiBDQUNIRSBJTlRFUk5BTCAiIikKKyAgZWxzZSgpCisgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF8ke2lkfV9TSUdOQVRVUkUgQ0FDSEUpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKwogCiB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlMpCiB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NBQ0hFRF9WQVJTKQpAQCAtOTgxLDYgKzEzNDEsMTUgQEAKIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfUkVBU09OX0ZBSUxVUkUpCiAKIAorIyBwcmVhbWJsZQorIyMgRm9yIElyb25QeXRob24gb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gV2luZG93cywgc2VhcmNoIGZvciB0aGUgLk5ldCBpbnRlcnByZXRlcgoraWYgKCJJcm9uUHl0aG9uIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OUworICAgIEFORCBOT1QgV0lOMzIpCisgIGZpbmRfcHJvZ3JhbSAoJHtfUFlUSE9OX1BSRUZJWH1fRE9UTkVUX0xBVU5DSEVSCisgICAgICAgICAgICAgICAgTkFNRVMgIm1vbm8iKQorZW5kaWYoKQorCisKICMgZmlyc3Qgc3RlcCwgc2VhcmNoIGZvciB0aGUgaW50ZXJwcmV0ZXIKIGlmICgiSW50ZXJwcmV0ZXIiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTKQogICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0NBQ0hFRF9WQVJTIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCkBAIC0xMDE5LDI1ICsxMzg4LDE0IEBACiAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCiAKICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1kgU1RSRVFVQUwgIkxPQ0FUSU9OIikKLSAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVMpCi0gICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKLSAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMpCisgICAgICAjIGJ1aWxkIGFsbCBleGVjdXRhYmxlIG5hbWVzCisgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30gUE9TSVggSU5URVJQUkVURVIpCisgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9IElOVEVSUFJFVEVSKQogCi0gICAgICBmb3JlYWNoIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUykKLSAgICAgICAgIyBidWlsZCBhbGwgZXhlY3V0YWJsZSBuYW1lcwotICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBQT1NJWCBFWEVDVVRBQkxFKQotICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTkFNRVN9KQotCi0gICAgICAgICMgRnJhbWV3b3JrIFBhdGhzCi0gICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQotICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTfSkKLQotICAgICAgICAjIFJlZ2lzdHJ5IFBhdGhzCi0gICAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQotICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcSXJvblB5dGhvblxcJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn1cXEluc3RhbGxQYXRoXSkKLSAgICAgIGVuZGZvcmVhY2goKQotICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9OQU1FUyBweXRob24ke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfSBweXRob24pCisgICAgICAjIEZyYW1ld29yayBQYXRocworICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9KQorICAgICAgIyBSZWdpc3RyeSBQYXRocworICAgICAgX3B5dGhvbl9nZXRfcmVnaXN0cmllcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30pCiAKICAgICAgIHdoaWxlIChUUlVFKQogICAgICAgICAjIFZpcnR1YWwgZW52aXJvbm1lbnRzIGhhbmRsaW5nCkBAIC0xMDQ3LDcgKzE0MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyBFTlYgVklSVFVBTF9FTlYgRU5WIENPTkRBX1BSRUZJWAotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4gU2NyaXB0cworICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKQEAgLTEwNjksNyArMTQyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSApAQCAtMTA4MywxMSArMTQ0MSwxMCBAQAogICAgICAgICBpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCiAgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVH0pCkBAIC0xMDk5LDEwICsxNDU2LDkgQEAKICAgICAgICAgIyB0cnkgdXNpbmcgSElOVFMKICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQogICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfSkKQEAgLTExMTIsOSArMTQ2OCw4IEBACiAgICAgICAgICMgdHJ5IHVzaW5nIHN0YW5kYXJkIHBhdGhzCiAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9OQU1FU30KICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFU30pCisgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfSkKICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVH0pCiAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKICAgICAgICAgICBicmVhaygpCkBAIC0xMTI2LDcgKzE0ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbgorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fREVGQVVMVF9QQVRIKQogICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQogICAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKQEAgLTExMzcsMTAgKzE0OTIsOSBAQAogICAgICAgICBpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQogICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCiAgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVH0pCiAgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQpAQCAtMTE1MywxMiArMTUwNywxMSBAQAogICAgIGVsc2UoKQogICAgICAgIyBsb29rLXVwIGZvciB2YXJpb3VzIHZlcnNpb25zIGFuZCBsb2NhdGlvbnMKICAgICAgIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQotICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gUE9TSVggRVhFQ1VUQUJMRSkKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9OQU1FUyBweXRob24ke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbikKKyAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IFBPU0lYIElOVEVSUFJFVEVSKQorICAgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IElOVEVSUFJFVEVSKQogCi0gICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCi0gICAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKKyAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQorICAgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKIAogICAgICAgICAjIFZpcnR1YWwgZW52aXJvbm1lbnRzIGhhbmRsaW5nCiAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WIE1BVENIRVMgIl4oRklSU1R8T05MWSkkIikKQEAgLTExNjcsNyArMTUyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTIEVOViBWSVJUVUFMX0VOViBFTlYgQ09OREFfUFJFRklYCi0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiBTY3JpcHRzCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSApAQCAtMTE4OCw3ICsxNTQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQogICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX0VOVklST05NRU5UX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICkBAIC0xMTk5LDEyICsxNTUyLDEwIEBACiAgICAgICAgIGlmIChDTUFLRV9IT1NUX1dJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiRklSU1QiKQogICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXElyb25QeXRob25cXCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059XFxJbnN0YWxsUGF0aF0KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCiAgICAgICAgIGVuZGlmKCkKQEAgLTEyMTcsMTAgKzE1NjgsOSBAQAogICAgICAgICAjIHRyeSB1c2luZyBISU5UUwogICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCiAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCiAgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IEVYQUNUKQpAQCAtMTIzMywxNSArMTU4Myw5IEBACiAgICAgICAgICMgRm9yIGV4YW1wbGUsIHR5cGljYWwgc3lzdGVtcyBoYXZlICdweXRob24nIGZvciB2ZXJzaW9uIDIuKiBhbmQgJ3B5dGhvbjMnCiAgICAgICAgICMgZm9yIHZlcnNpb24gMy4qLiBTbyBsb29raW5nIGZvciBuYW1lcyBwZXIgZGlyIHdpbGwgZmluZCwgcG90ZW50aWFsbHksCiAgICAgICAgICMgc3lzdGVtYXRpY2FsbHkgJ3B5dGhvbicgKGkuZS4gdmVyc2lvbiAyKSBldmVuIGlmIHZlcnNpb24gMyBpcyBzZWFyY2hlZC4KLSAgICAgICAgaWYgKENNQUtFX0hPU1RfV0lOMzIpCi0gICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRob24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfSkKLSAgICAgICAgZWxzZSgpCi0gICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9KQotICAgICAgICBlbmRpZigpCisgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKKyAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9KQogICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBFWEFDVCkKICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQogICAgICAgICAgIGJyZWFrKCkKQEAgLTEyNTMsNyArMTU5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCiAgICAgICAgIGVuZGlmKCkKIApAQCAtMTI2MSwxMSArMTYwNSw5IEBACiAgICAgICAgIGlmIChDTUFLRV9IT1NUX1dJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCiAgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9OQU1FU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXElyb25QeXRob25cXCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059XFxJbnN0YWxsUGF0aF0KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCiAgICAgICAgIGVuZGlmKCkKIApAQCAtMTI4MywyMCArMTYyNSwyMCBAQAogICAgICAgICAjIEZvciBleGFtcGxlLCB0eXBpY2FsIHN5c3RlbXMgaGF2ZSAncHl0aG9uJyBmb3IgdmVyc2lvbiAyLiogYW5kICdweXRob24zJwogICAgICAgICAjIGZvciB2ZXJzaW9uIDMuKi4gU28gbG9va2luZyBmb3IgbmFtZXMgcGVyIGRpciB3aWxsIGZpbmQsIHBvdGVudGlhbGx5LAogICAgICAgICAjIHN5c3RlbWF0aWNhbGx5ICdweXRob24nIChpLmUuIHZlcnNpb24gMikgZXZlbiBpZiB2ZXJzaW9uIDMgaXMgc2VhcmNoZWQuCisgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVMgUE9TSVggSU5URVJQUkVURVIpCiAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKLSAgICAgICAgICAgICAgICAgICAgICBOQU1FUyBweXRob24ke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfSkKKyAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30pCiAgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCkKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAogICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IikKKyAgX3B5dGhvbl9nZXRfbGF1bmNoZXIgKF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9MQVVOQ0hFUiBJTlRFUlBSRVRFUikKIAogICAjIHJldHJpZXZlIGV4YWN0IHZlcnNpb24gb2YgZXhlY3V0YWJsZSBmb3VuZAogICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUpCi0gICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoJy4nLmpvaW4oW3N0cih4KSBmb3IgeCBpbiBzeXMudmVyc2lvbl9pbmZvWzozXV0pKSIKICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCiAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTgpAQCAtMTM0Myw3ICsxNjg1LDggQEAKIAogICAgICAgICAjIFVzZSBpbnRlcnByZXRlciB2ZXJzaW9uIGFuZCBBQkkgZm9yIGZ1dHVyZSBzZWFyY2hlcyB0byBlbnN1cmUgY29uc2lzdGVuY3kKICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUyAkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0pCi0gICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5hYmlmbGFncykiCisgICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuYWJpZmxhZ3MpIgogICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCiAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUwogICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCkBAIC0xMzU1LDEzICsxNjk4LDE2IEBACiAgICAgICBlbmRpZigpCiAKICAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCkKKyAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSkKKwogICAgICAgICAjIGNvbXB1dGUgYW5kIHNhdmUgaW50ZXJwcmV0ZXIgc2lnbmF0dXJlCiAgICAgICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IikKICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFICIke19fJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFfSIgQ0FDSEUgSU5URVJOQUwgIiIpCiAKICAgICAgICAgaWYgKE5PVCBDTUFLRV9TSVpFT0ZfVk9JRF9QKQogICAgICAgICAgICMgZGV0ZXJtaW5lIGludGVycHJldGVyIGFyY2hpdGVjdHVyZQotICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBwcmludChzeXMubWF4c2l6ZSA+IDIqKjMyKSIKKyAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy5tYXhzaXplID4gMioqMzIpKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fSVM2NEJJVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fSVM2NEJJVCkKQEAgLTEzNzcsNyArMTcyMyw3IEBACiAgICAgICAgIGVuZGlmKCkKIAogICAgICAgICAjIHJldHJpZXZlIGludGVycHJldGVyIGlkZW50aXR5Ci0gICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1WCisgICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9MQVVOQ0hFUn0gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtVgogICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCiAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lECiAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQpCkBAIC0xMzg2LDExICsxNzMyLDE1IEBACiAgICAgICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEICJBbmFjb25kYSIpCiAgICAgICAgICAgZWxzZWlmICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBNQVRDSEVTICJFbnRob3VnaHQiKQogICAgICAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCAiQ2Fub3B5IikKKyAgICAgICAgICBlbHNlaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIE1BVENIRVMgIlB5UHkgKFswLTkuXSspIikKKyAgICAgICAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgIlB5UHkiKQorICAgICAgICAgICAgc2V0ICAoJHtfUFlUSE9OX1BSRUZJWH1fUHlQeV9WRVJTSU9OICIke0NNQUtFX01BVENIXzF9IikKICAgICAgICAgICBlbHNlKCkKICAgICAgICAgICAgIHN0cmluZyAoUkVHRVggUkVQTEFDRSAiXihbXiBdKykuKiIgIlxcMSIgJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgIiR7JHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUR9IikKICAgICAgICAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBTVFJFUVVBTCAiUHl0aG9uIikKICAgICAgICAgICAgICAgIyB0cnkgdG8gZ2V0IGEgbW9yZSBwcmVjaXNlIElECi0gICAgICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBwcmludChzeXMuY29weXJpZ2h0KSIKKyAgICAgICAgICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuY29weXJpZ2h0KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSAke19QWVRIT05fUFJFRklYfV9DT1BZUklHSFQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVCkKQEAgLTE0MDQsMTAgKzE3NTQsMTEgQEAKICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgICMgcmV0cmlldmUgdmFyaW91cyBwYWNrYWdlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllcwotICAgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZztzeXMuc3Rkb3V0LndyaXRlKCc7Jy5qb2luKFtzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPUZhbHNlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSldKSkiCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAotICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUwotICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQpCisgICAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9MQVVOQ0hFUn0gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXNcbnRyeTpcbiAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoJzsnLmpvaW4oW3N5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1UcnVlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1UcnVlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9RmFsc2UpLHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPUZhbHNlKV0pKVxuZXhjZXB0IEV4Y2VwdGlvbjpcbiAgIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoJzsnLmpvaW4oW3N5c2NvbmZpZy5nZXRfcGF0aCgnc3RkbGliJyksc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0c3RkbGliJyksc3lzY29uZmlnLmdldF9wYXRoKCdwdXJlbGliJyksc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0bGliJyldKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKKyAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlBBVEhTCisgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQpCiAgICAgICAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVCkKICAgICAgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlBBVEhTIDAgJHtfUFlUSE9OX1BSRUZJWH1fU1RETElCKQogICAgICAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMgMSAke19QWVRIT05fUFJFRklYfV9TVERBUkNIKQpAQCAtMTQzNCw2ICsxNzg1LDEwIEBACiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKKyAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0FSVElGQUNUU19JTlRFUkFDVElWRSkKKyAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiBDQUNIRSBGSUxFUEFUSCAiJHtfUFlUSE9OX1BSRUZJWH0gSW50ZXJwcmV0ZXIiKQorICBlbmRpZigpCisKICAgX3B5dGhvbl9tYXJrX2FzX2ludGVybmFsIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9QUk9QRVJUSUVTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRSkKQEAgLTE0NDcsNyArMTgwMiwxMCBAQAogICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUyAke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKICAgZW5kaWYoKQogCi0gIGlmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCisgIGlmIChOT1QgIklyb25QeXRob24iIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgQ0FDSEUpCisgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkUgQ0FDSEUpCisgIGVsc2VpZiAoREVGSU5FRCAke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgogICAgICAgQU5EIElTX0FCU09MVVRFICIkeyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIpCiAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgIiR7JHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiBDQUNIRSBJTlRFUk5BTCAiIikKICAgZWxzZWlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKQEAgLTE0NjYsNyArMTgyNCw4IEBACiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKLSAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIpCisgIGlmICgiSXJvblB5dGhvbiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMKKyAgICAgIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQogICAgICMgSXJvblB5dGhvbiBzcGVjaWZpYyBhcnRpZmFjdHMKICAgICAjIElmIElyb25QeXRob24gaW50ZXJwcmV0ZXIgaXMgZm91bmQsIHVzZSBpdHMgcGF0aAogICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9ST09UKQpAQCAtMTQ3NSwyMSArMTgzNCw0OSBAQAogICAgIGVuZGlmKCkKIAogICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9TVFJBVEVHWSBTVFJFUVVBTCAiTE9DQVRJT04iKQotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMpCisgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTCisgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9CisgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIpCiAKLSAgICAgIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQotICAgICAgICAjIFJlZ2lzdHJ5IFBhdGhzCi0gICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMKLSAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxJcm9uUHl0aG9uXFwke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfVxcSW5zdGFsbFBhdGhdKQotICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSKQorCisgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBMRU1FTlRBVElPTlMgSXJvblB5dGhvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfSkKKyAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30pCiAKICAgICAgIHdoaWxlIChUUlVFKQotICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKKyAgICAgICAgIyBBcHBsZSBmcmFtZXdvcmtzIGhhbmRsaW5nCisgICAgICAgIGlmIChDTUFLRV9IT1NUX0FQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkZJUlNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgaXB5YworICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1JPT1R9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQorICAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIpCisgICAgICAgICAgICBicmVhaygpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCisgICAgICAgICMgV2luZG93cyByZWdpc3RyeQorICAgICAgICBpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKKyAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1JPT1R9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQogICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCiAgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9jb21waWxlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVH0pCkBAIC0xNDk4LDEwICsxODg1LDEyIEBACiAgICAgICAgICAgZW5kaWYoKQogICAgICAgICBlbmRpZigpCiAKKyAgICAgICAgIyB0cnkgdXNpbmcgSElOVFMKICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKLSAgICAgICAgICAgICAgICAgICAgICBOQU1FUyBpcHljCisgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUk9PVH0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9Ci0gICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQogICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2NvbXBpbGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfSkKQEAgLTE1MDksMTIgKzE4OTgsNDAgQEAKICAgICAgICAgICBicmVhaygpCiAgICAgICAgIGVuZGlmKCkKIAotICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQorICAgICAgICAjIHRyeSB1c2luZyBzdGFuZGFyZCBwYXRocworICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgorICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9KQorICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2NvbXBpbGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfSkKKyAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKKyAgICAgICAgICBicmVhaygpCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICAjIEFwcGxlIGZyYW1ld29ya3MgaGFuZGxpbmcKKyAgICAgICAgaWYgKENNQUtFX0hPU1RfQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiTEFTVCIpCiAgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKLSAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTIGlweWMKLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCisgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9jb21waWxlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVH0pCisgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKKyAgICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgIyBXaW5kb3dzIHJlZ2lzdHJ5CisgICAgICAgIGlmIChDTUFLRV9IT1NUX1dJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCisgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCisgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKKyAgICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgICBlbmRpZigpCiAgICAgICAgIGVuZGlmKCkKIAogICAgICAgICBicmVhaygpCkBAIC0xNTIyLDEyICsxOTM5LDQ4IEBACiAgICAgZWxzZSgpCiAgICAgICAjIHRyeSB1c2luZyByb290IGRpciBhbmQgcmVnaXN0cnkKICAgICAgIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQotICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKKyAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9OQU1FUworICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSKQorCisgICAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QSUxFUikKKworICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCisgICAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBMRU1FTlRBVElPTlMgSXJvblB5dGhvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQorCisgICAgICAgICMgQXBwbGUgZnJhbWV3b3JrcyBoYW5kbGluZworICAgICAgICBpZiAoQ01BS0VfSE9TVF9BUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJGSVJTVCIpCiAgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKLSAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTIGlweWMKKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9ST09UfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxJcm9uUHl0aG9uXFwke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICisgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9jb21waWxlciAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gRVhBQ1QpCisgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKKyAgICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgIyBXaW5kb3dzIHJlZ2lzdHJ5CisgICAgICAgIGlmIChDTUFLRV9IT1NUX1dJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiRklSU1QiKQorICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUk9PVH0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKICAgICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2NvbXBpbGVyICgke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBFWEFDVCkKQEAgLTE1MzYsMTAgKzE5ODksMTIgQEAKICAgICAgICAgICBlbmRpZigpCiAgICAgICAgIGVuZGlmKCkKIAorICAgICAgICAjIHRyeSB1c2luZyBISU5UUwogICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgotICAgICAgICAgICAgICAgICAgICAgIE5BTUVTIGlweWMKKyAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9ST09UfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCiAgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IEVYQUNUKQpAQCAtMTU0NywxMSArMjAwMiwyNiBAQAogICAgICAgICAgIGJyZWFrKCkKICAgICAgICAgZW5kaWYoKQogCi0gICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCisgICAgICAgICMgQXBwbGUgZnJhbWV3b3JrcyBoYW5kbGluZworICAgICAgICBpZiAoQ01BS0VfSE9TVF9BUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgaXB5YwotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXElyb25QeXRob25cXCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059XFxJbnN0YWxsUGF0aF0KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTk9fREVGQVVMVF9QQVRIKQorICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IEVYQUNUKQorICAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIpCisgICAgICAgICAgICBicmVhaygpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCisgICAgICAgICMgV2luZG93cyByZWdpc3RyeQorICAgICAgICBpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQorICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fREVGQVVMVF9QQVRIKQogICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IEVYQUNUKQogICAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIpCkBAIC0xNTYxLDEwICsyMDMxLDE4IEBACiAgICAgICBlbmRmb3JlYWNoKCkKIAogICAgICAgIyBubyBzcGVjaWZpYyB2ZXJzaW9uIGZvdW5kLCByZS10cnkgaW4gc3RhbmRhcmQgcGF0aHMKKyAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTVBMRU1FTlRBVElPTlMgSXJvblB5dGhvbgorICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30KKyAgICAgICAgICAgICAgICAgICAgICAgICBDT01QSUxFUikKKyAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBMRU1FTlRBVElPTlMgSXJvblB5dGhvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIpCiAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgotICAgICAgICAgICAgICAgICAgICBOQU1FUyBpcHljCisgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQogICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1JPT1R9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9KQorICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9KQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCkBAIC0xNTcyLDEzICsyMDUwLDE4IEBACiAKICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKICAgICAjIHJldHJpZXZlIHB5dGhvbiBlbnZpcm9ubWVudCB2ZXJzaW9uIGZyb20gY29tcGlsZXIKKyAgICBfcHl0aG9uX2dldF9sYXVuY2hlciAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX0xBVU5DSEVSIENPTVBJTEVSKQogICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vUHl0aG9uQ29tcGlsZXJWZXJzaW9uLmRpciIpCiAgICAgZmlsZSAoV1JJVEUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSfS92ZXJzaW9uLnB5IiAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgnLicuam9pbihbc3RyKHgpIGZvciB4IGluIHN5cy52ZXJzaW9uX2luZm9bOjNdXSkpXG4iKQotICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiAvdGFyZ2V0OmV4ZSAvZW1iZWQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSfS92ZXJzaW9uLnB5IgorICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9MQVVOQ0hFUn0gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fQ09NUElMRVJfQVJDSF9GTEFHU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3RhcmdldDpleGUgL2VtYmVkICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX0RJUn0vdmVyc2lvbi5weSIKICAgICAgICAgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX0RJUn0iCiAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUVVJRVQKICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUKQotICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9ESVJ9L3ZlcnNpb24iCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lSX0RJUiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiBESVJFQ1RPUlkpCisgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgIk1PTk9fUEFUSD0ke18ke19QWVRIT05fUFJFRklYfV9JUl9ESVJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeyR7X1BZVEhPTl9QUkVGSVh9X0RPVE5FVF9MQVVOQ0hFUn0gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSfS92ZXJzaW9uLmV4ZSIKICAgICAgICAgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX0RJUn0iCiAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAogICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OCkBAIC0xNjEzLDEyICsyMDk2LDE0IEBACiAgICAgICBlbmRpZigpCiAgICAgZWxzZWlmICgke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IpCiAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0NvbXBpbGVyX0ZPVU5EIFRSVUUpCi0gICAgIyBVc2UgY29tcGlsZXIgdmVyc2lvbiBmb3IgZnV0dXJlIHNlYXJjaGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeQotICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMgJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfS4keyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9KQorICAgICAgIyBVc2UgY29tcGlsZXIgdmVyc2lvbiBmb3IgZnV0dXJlIHNlYXJjaGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUyAkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0pCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0NvbXBpbGVyX0ZPVU5EKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ29tcGlsZXJfUkVBU09OX0ZBSUxVUkUpCisKICAgICAjIGNvbXB1dGUgYW5kIHNhdmUgY29tcGlsZXIgc2lnbmF0dXJlCiAgICAgc3RyaW5nIChNRDUgX18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IikKICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkUgIiR7X18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkV9IiBDQUNIRSBJTlRFUk5BTCAiIikKQEAgLTE2MjksNTMgKzIxMTQsNjAgQEAKICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfSUQpCiAgIGVuZGlmKCkKIAorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIgQ0FDSEUgRklMRVBBVEggIiR7X1BZVEhPTl9QUkVGSVh9IENvbXBpbGVyIikKKyAgZW5kaWYoKQorCiAgIF9weXRob25fbWFya19hc19pbnRlcm5hbCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX1NJR05BVFVSRSkKIGVuZGlmKCkKIAotCiAjIHRoaXJkIHN0ZXAsIHNlYXJjaCBmb3IgdGhlIGRldmVsb3BtZW50IGFydGlmYWN0cwotaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVRVUlSRURfRGV2ZWxvcG1lbnQpCi0gIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUyAke19QWVRIT05fUFJFRklYfV9MSUJSQVJJRVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSUykKK2lmICgke19QWVRIT05fUFJFRklYfV9GSU5EX1JFUVVJUkVEX0RldmVsb3BtZW50Lk1vZHVsZSkKKyAgaWYgKCJMSUJSQVJZIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX01PRFVMRV9BUlRJRkFDVFMpCisgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WQVJTICR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUklFUykKKyAgZW5kaWYoKQorICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX01PRFVMRV9BUlRJRkFDVFMpCisgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WQVJTICR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSUykKKyAgZW5kaWYoKQogZW5kaWYoKQoraWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVRVUlSRURfRGV2ZWxvcG1lbnQuRW1iZWQpCisgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9FTUJFRF9BUlRJRkFDVFMpCisgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WQVJTICR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUklFUykKKyAgZW5kaWYoKQorICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0VNQkVEX0FSVElGQUNUUykKKyAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlMgJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJTKQorICBlbmRpZigpCitlbmRpZigpCitsaXN0IChSRU1PVkVfRFVQTElDQVRFUyBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUykKICMjIERldmVsb3BtZW50IGVudmlyb25tZW50IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggSXJvblB5dGhvbiBpbnRlcnByZXRlcgotaWYgKCJEZXZlbG9wbWVudCIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMKLSAgICBBTkQgTk9UICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKK2lmICgoIkRldmVsb3BtZW50Lk1vZHVsZSIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMKKyAgICAgIE9SICJEZXZlbG9wbWVudC5FbWJlZCIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCisgICAgQU5EICgoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQKKyAgICAgICAgQU5EIE5PVCAke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBTVFJFUVVBTCAiSXJvblB5dGhvbiIpCisgICAgICBPUiBOT1QgJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQpKQorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQpCisgICAgIyByZWR1Y2UgcG9zc2libGUgaW1wbGVtZW50YXRpb25zIHRvIHRoZSBpbnRlcnByZXRlciBvbmUKKyAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIlB5UHkiKQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMgIlB5UHkiKQorICAgIGVsc2UoKQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMgIkNQeXRob24iKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgbGlzdCAoUkVNT1ZFX0lURU0gXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TICJJcm9uUHl0aG9uIikKKyAgZW5kaWYoKQorICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfQVJUSUZBQ1RTKQogICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0NBQ0hFRF9WQVJTIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX1JFTEVBU0UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRykKKyAgZW5kaWYoKQorICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUykKKyAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0NBQ0hFRF9WQVJTIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKKyAgZW5kaWYoKQogCi0gIGlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgT1IgREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCi0gICAgIyBjb21wdXRlIGRldmVsb3BtZW50IHNpZ25hdHVyZSBhbmQgY2hlY2sgdmFsaWRpdHkgb2YgZGVmaW5pdGlvbgotICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKLSAgICBpZiAoV0lOMzIgQU5EIE5PVCBERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHKQotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRyAiJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRy1OT1RGT1VORCIgQ0FDSEUgSU5URVJOQUwgIiIpCi0gICAgZW5kaWYoKQotICAgIGlmIChOT1QgREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCi0gICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiAiJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVItTk9URk9VTkQiIENBQ0hFIElOVEVSTkFMICIiKQotICAgIGVuZGlmKCkKLSAgICBpZiAoX18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgU1RSRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UX1NJR05BVFVSRSkKLSAgICAgICMgY2hlY2sgdmVyc2lvbiB2YWxpZGl0eQotICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVCkKLSAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9saWJyYXJ5ICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gRVhBQ1QgQ0hFQ0tfRVhJU1RTKQotICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2luY2x1ZGVfZGlyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gRVhBQ1QgQ0hFQ0tfRVhJU1RTKQotICAgICAgZWxzZSgpCi0gICAgICAgIF9weXRob25fdmFsaWRhdGVfbGlicmFyeSAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059IENIRUNLX0VYSVNUUykKLSAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbmNsdWRlX2RpciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059IENIRUNLX0VYSVNUUykKLSAgICAgIGVuZGlmKCkKLSAgICBlbHNlKCkKLSAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIENBQ0hFKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHIENBQ0hFKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiBDQUNIRSkKLSAgICBlbmRpZigpCi0gIGVuZGlmKCkKLSAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIE9SIE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCi0gICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT05GSUcgQ0FDSEUpCi0gICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgQ0FDSEUpCi0gIGVuZGlmKCkKKyAgX3B5dGhvbl9jaGVja19kZXZlbG9wbWVudF9zaWduYXR1cmUgKE1vZHVsZSkKKyAgX3B5dGhvbl9jaGVja19kZXZlbG9wbWVudF9zaWduYXR1cmUgKEVtYmVkKQogCiAgIGlmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUlkKICAgICAgIEFORCBJU19BQlNPTFVURSAiJHske19QWVRIT05fUFJFRklYfV9MSUJSQVJZfSIpCkBAIC0xNzAzLDI1ICsyMTk1LDE4IEBACiAgICAgIyBpZiBweXRob24gaW50ZXJwcmV0ZXIgaXMgZm91bmQsIHVzZSBpdCB0byBsb29rLXVwIGZvciBhcnRpZmFjdHMKICAgICAjIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIGludGVycHJldGVyIGFuZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuCiAgICAgIyBJZiBub3QsIHRyeSB0byBsb2NhdGUgYSBjb21wYXRpYmxlIGNvbmZpZyB0b29sCi0gICAgaWYgKE5PVCAke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCBPUiBDTUFLRV9DUk9TU0NPTVBJTElORykKKyAgICBpZiAoKE5PVCAke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCBPUiBDTUFLRV9DUk9TU0NPTVBJTElORykKKyAgICAgICAgQU5EICJDUHl0aG9uIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OUykKICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSfSIgRU5WICR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSKQogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTKQogICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlYgTUFUQ0hFUyAiXihGSVJTVHxPTkxZKSQiKQogICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTIEVOViBWSVJUVUFMX0VOViBFTlYgQ09OREFfUFJFRklYKQogICAgICAgZW5kaWYoKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMpCiAKICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9TVFJBVEVHWSBTVFJFUVVBTCAiTE9DQVRJT04iKQotICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT05GSUdfTkFNRVMpCi0KLSAgICAgICAgZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04gSU4gTElTVFMgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMpCi0gICAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gUE9TSVggQ09ORklHKQotICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHX05BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTkFNRVN9KQotCisgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30gUE9TSVggQ09ORklHKQogICAgICAgICAgICMgRnJhbWV3b3JrIFBhdGhzCi0gICAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCi0gICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRIU30pCi0gICAgICAgIGVuZGZvcmVhY2goKQorICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30pCiAKICAgICAgICAgIyBBcHBsZSBmcmFtZXdvcmtzIGhhbmRsaW5nCiAgICAgICAgIGlmIChDTUFLRV9IT1NUX0FQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkZJUlNUIikKQEAgLTE4MDUsNyArMjI5MCw3IEBACiAgICAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9DT05GSUdfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBQT1NJWCBDT05GSUcpCiAKICAgICAgICAgICAjIEZyYW1ld29yayBQYXRocwotICAgICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCisgICAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQogCiAgICAgICAgICAgIyBBcHBsZSBmcmFtZXdvcmtzIGhhbmRsaW5nCiAgICAgICAgICAgaWYgKENNQUtFX0hPU1RfQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiRklSU1QiKQpAQCAtMTg5OCwxNDAgKzIzODMsNjEgQEAKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAotICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCi0gICAgaWYgKCgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKSBPUiBfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHKQotICAgICAgIyByZXRyaWV2ZSByb290IGluc3RhbGwgZGlyZWN0b3J5Ci0gICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYIFBSRUZJWCkKLQotICAgICAgIyBlbmZvcmNlIGN1cnJlbnQgQUJJCi0gICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MgQUJJRkxBR1MpCi0KLSAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTICIke18ke19QWVRIT05fUFJFRklYfV9QUkVGSVh9IikKLQotICAgICAgIyByZXRyaWV2ZSBsaWJyYXJ5Ci0gICAgICAjIyBjb21wdXRlIHNvbWUgcGF0aHMgYW5kIGFydGlmYWN0IG5hbWVzCi0gICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKLSAgICAgICAgc3RyaW5nIChSRUdFWCBSRVBMQUNFICJeLitweXRob24oWzAtOS5dKylbYS16XSotY29uZmlnIiAiXFwxIiBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHfSIpCi0gICAgICBlbHNlKCkKLSAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiAiJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfS4keyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IikKLSAgICAgIGVuZGlmKCkKLSAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gTElCUkFSWSkKLSAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gV0lOMzIgUE9TSVggTElCUkFSWSkKLQotICAgICAgX3B5dGhvbl9nZXRfY29uZmlnX3ZhciAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJR0RJUiBDT05GSUdESVIpCi0gICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTICIke18ke19QWVRIT05fUFJFRklYfV9DT05GSUdESVJ9IikKLQotICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn0iIEVOViAke19QWVRIT05fUFJFRklYfV9ST09UX0RJUikKLQotICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCi0gICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgotICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQotICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAotICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKLSAgICBlbmRpZigpCi0KLSAgICAjIFJlbHkgb24gSElOVFMgYW5kIHN0YW5kYXJkIHBhdGhzIGlmIGludGVycHJldGVyIG9yIGNvbmZpZyB0b29sIGZhaWxlZCB0byBsb2NhdGUgYXJ0aWZhY3RzCisgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMpCiAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFKQotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCisgICAgICBpZiAoKCR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX0ZPVU5EIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcpIE9SIF8ke19QWVRIT05fUFJFRklYfV9DT05GSUcpCisgICAgICAgICMgcmV0cmlldmUgcm9vdCBpbnN0YWxsIGRpcmVjdG9yeQorICAgICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYIFBSRUZJWCkKIAotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTKQotICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlYgTUFUQ0hFUyAiXihGSVJTVHxPTkxZKSQiKQotICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTIEVOViBWSVJUVUFMX0VOViBFTlYgQ09OREFfUFJFRklYKQotICAgICAgZW5kaWYoKQorICAgICAgICAjIGVuZm9yY2UgY3VycmVudCBBQkkKKyAgICAgICAgX3B5dGhvbl9nZXRfY29uZmlnX3ZhciAoXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTIEFCSUZMQUdTKQogCi0gICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1kgU1RSRVFVQUwgIkxPQ0FUSU9OIikKLSAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMpCi0gICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHKQotICAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKLSAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUykKLSAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTKQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYfSIpCiAKLSAgICAgICAgZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQotICAgICAgICAgICMgbGlicmFyeSBuYW1lcwotICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQotICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTkFNRVN9KQotICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSBXSU4zMiBERUJVRykKLSAgICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVRyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX05BTUVTfSkKLQotICAgICAgICAgICMgRnJhbWV3b3JrIFBhdGhzCi0gICAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059KQotICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFN9KQotCi0gICAgICAgICAgIyBSZWdpc3RyeSBQYXRocwotICAgICAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSkKLSAgICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFN9KQotCi0gICAgICAgICAgIyBQYXRocyBzdWZmaXhlcwotICAgICAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IExJQlJBUlkpCi0gICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFN9KQotICAgICAgICBlbmRmb3JlYWNoKCkKLQotICAgICAgICBpZiAoQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiRklSU1QiKQotICAgICAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgotICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQotICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAotICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAotICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKLSAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgICAjIHJldHJpZXZlIGxpYnJhcnkKKyAgICAgICAgIyMgY29tcHV0ZSBzb21lIHBhdGhzIGFuZCBhcnRpZmFjdCBuYW1lcworICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKKyAgICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl4uK3B5dGhvbihbMC05Ll0rKVthLXpdKi1jb25maWciICJcXDEiIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OICIke18ke19QWVRIT05fUFJFRklYfV9DT05GSUd9IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiAiJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfS4keyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IikKICAgICAgICAgZW5kaWYoKQorICAgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IExJQlJBUlkpCisgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gV0lOMzIgUE9TSVggTElCUkFSWSkKIAotICAgICAgICBpZiAoV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJGSVJTVCIpCi0gICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCi0gICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KLSAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKLSAgICAgICAgZW5kaWYoKQorICAgICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHRElSIENPTkZJR0RJUikKKyAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHRElSfSIpCiAKLSAgICAgICAgIyBzZWFyY2ggaW4gSElOVFMgbG9jYXRpb25zCisgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCisKICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTfQogICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgZW5kaWYoKQogCi0gICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKLSAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30pCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKKyAgICAgICMgUmVseSBvbiBISU5UUyBhbmQgc3RhbmRhcmQgcGF0aHMgaWYgaW50ZXJwcmV0ZXIgb3IgY29uZmlnIHRvb2wgZmFpbGVkIHRvIGxvY2F0ZSBhcnRpZmFjdHMKKyAgICAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCisKKyAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTKQorICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFkpJCIpCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUyBFTlYgVklSVFVBTF9FTlYgRU5WIENPTkRBX1BSRUZJWCkKICAgICAgICAgZW5kaWYoKQogCi0gICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQotICAgICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30pCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQotICAgICAgICBlbmRpZigpCisgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9TVFJBVEVHWSBTVFJFUVVBTCAiTE9DQVRJT04iKQorICAgICAgICAgICMgbGlicmFyeSBuYW1lcworICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30gV0lOMzIgUE9TSVggTElCUkFSWSkKKyAgICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVRyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9IFdJTjMyIERFQlVHKQorICAgICAgICAgICMgUGF0aHMgc3VmZml4ZXMKKyAgICAgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9IExJQlJBUlkpCiAKLSAgICAgICAgIyBzZWFyY2ggaW4gYWxsIGRlZmF1bHQgcGF0aHMKLSAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCi0gICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKLSAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke19fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7X18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9KQotICAgICAgZWxzZSgpCi0gICAgICAgIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUykKLSAgICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQotICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IFdJTjMyIERFQlVHKQotCi0gICAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTn0pCi0gICAgICAgICAgX3B5dGhvbl9nZXRfcmVnaXN0cmllcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSkKLQotICAgICAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IExJQlJBUlkpCisgICAgICAgICAgIyBGcmFtZXdvcmsgUGF0aHMKKyAgICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX0ZJTkRfVkVSU0lPTlN9KQorICAgICAgICAgICMgUmVnaXN0cnkgUGF0aHMKKyAgICAgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfSApCiAKICAgICAgICAgICBpZiAoQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiRklSU1QiKQogICAgICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCkBAIC0yMDY5LDIwMCArMjQ3NSwyODggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKIAotICAgICAgICAgaWYgKEFQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkxBU1QiKQotICAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30pCi0gICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgdW5zZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTKQotICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfSkKKyAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKKyAgICAgICAgICBlbmRpZigpCiAKLSAgICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQotICAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9KQotICAgICAgICAgZWxzZSgpCi0gICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQotICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQorICAgICAgICAgICAgc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfSkKKyAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQorICAgICAgICAgIGVuZGlmKCkKIAotICAgICAgICAgIyBzZWFyY2ggaW4gYWxsIGRlZmF1bHQgcGF0aHMKLSAgICAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICMgc2VhcmNoIGluIGFsbCBkZWZhdWx0IHBhdGhzCisgICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke19fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQogICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfSkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQorICAgICAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTn0gV0lOMzIgUE9TSVggTElCUkFSWSkKKyAgICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IFdJTjMyIERFQlVHKQogCi0gICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCi0gICAgICAgICAgICBicmVhaygpCi0gICAgICAgICAgZW5kaWYoKQotICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTn0pCisgICAgICAgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTn0pCisKKyAgICAgICAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IExJQlJBUlkpCisKKyAgICAgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJGSVJTVCIpCisgICAgICAgICAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKyAgICAgICAgICAgIGVuZGlmKCkKKworICAgICAgICAgICAgaWYgKFdJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiRklSU1QiKQorICAgICAgICAgICAgICBmaW5kX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgICAgICAgICBlbmRpZigpCisKKyAgICAgICAgICAgICMgc2VhcmNoIGluIEhJTlRTIGxvY2F0aW9ucworICAgICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKworICAgICAgICAgICAgaWYgKEFQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkxBU1QiKQorICAgICAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30pCisgICAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICAgdW5zZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTKQorICAgICAgICAgICAgZW5kaWYoKQorCisgICAgICAgICAgICBpZiAoV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICAgICAgc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfSkKKyAgICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgICB1bnNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUykKKyAgICAgICAgICAgIGVuZGlmKCkKKworICAgICAgICAgICAgIyBzZWFyY2ggaW4gYWxsIGRlZmF1bHQgcGF0aHMKKyAgICAgICAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9KQorCisgICAgICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGVuZGZvcmVhY2goKQorICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQotICBlbmRpZigpCiAKLSAgIyBmaW5hbGl6ZSBsaWJyYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24KLSAgX3B5dGhvbl9nZXRfdmVyc2lvbiAoTElCUkFSWSBQUkVGSVggXyR7X1BZVEhPTl9QUkVGSVh9XykKLQotICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSIpCi0KLSAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQotICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX1cIiIpCi0gICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UtTk9URk9VTkQiKQotICBlbmRpZigpCi0KLSAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCi0KLSAgaWYgKFdJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFKQotICAgICMgc2VhcmNoIGZvciBkZWJ1ZyBsaWJyYXJ5Ci0gICAgIyB1c2UgcmVsZWFzZSBsaWJyYXJ5IGxvY2F0aW9uIGFzIGEgaGludAotICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gV0lOMzIgREVCVUcpCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iIERJUkVDVE9SWSkKLSAgICBmaW5kX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHCi0gICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVNfREVCVUd9Ci0gICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICBISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSH0iICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgTk9fREVGQVVMVF9QQVRIKQotICAgICMgc2Vjb25kIHRyeSBpbmNsdWRpbmcgQ01BS0UgdmFyaWFibGVzIHRvIGNhdGNoLXVwIG5vbiBjb252ZW50aW9uYWwgbGF5b3V0cwotICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcKLSAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVR30KLSAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKLSAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKLSAgZW5kaWYoKQotCi0gICMgcmV0cmlldmUgcnVudGltZSBsaWJyYXJpZXMKLSAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCi0gICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IiBESVJFQ1RPUlkpCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyICIke18ke19QWVRIT05fUFJFRklYfV9QQVRIfSIgRElSRUNUT1JZKQotICAgIF9weXRob25fZmluZF9ydW50aW1lX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSDJ9IiAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKLSAgZW5kaWYoKQotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcpCi0gICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVNfREVCVUcgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBERUJVRykKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVR30iIERJUkVDVE9SWSkKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSDIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IiBESVJFQ1RPUlkpCi0gICAgX3B5dGhvbl9maW5kX3J1bnRpbWVfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVR30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSDJ9IiAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKLSAgZW5kaWYoKQotCi0gICMgRG9uJ3Qgc2VhcmNoIGZvciBpbmNsdWRlIGRpciBpZiBubyBsaWJyYXJ5IHdhcyBmb3VuZGVkCi0gIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSKQotICAgIGlmICgoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgQU5EIE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORykgT1IgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKLSAgICAgIF9weXRob25fZ2V0X2NvbmZpZ192YXIgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUlMgSU5DTFVERVMpCi0KLSAgICAgIGZpbmRfcGF0aCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSCi0gICAgICAgICAgICAgICAgIE5BTUVTIFB5dGhvbi5oCi0gICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSU30KLSAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKLSAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgIyBmaW5hbGl6ZSBsaWJyYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24KKyAgICBfcHl0aG9uX2dldF92ZXJzaW9uIChMSUJSQVJZIFBSRUZJWCBfJHtfUFlUSE9OX1BSRUZJWH1fKQorICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiBFUVVBTCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUn0iKQorICAgICAgIyBub3QgYWJsZSB0byBleHRyYWN0IGZ1bGwgdmVyc2lvbiBmcm9tIGxpYnJhcnkgbmFtZQorICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX0ZPVU5EKQorICAgICAgICAjIHVwZGF0ZSBmcm9tIGludGVycHJldGVyCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04gJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUiAkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9KQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SICR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0pCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUQ0ggJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVENIfSkKKyAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAKLSAgICAjIFJlbHkgb24gSElOVFMgYW5kIHN0YW5kYXJkIHBhdGhzIGlmIGludGVycHJldGVyIG9yIGNvbmZpZyB0b29sIGZhaWxlZCB0byBsb2NhdGUgYXJ0aWZhY3RzCi0gICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCi0gICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMpCi0gICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFkpJCIpCi0gICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMgRU5WIFZJUlRVQUxfRU5WIEVOViBDT05EQV9QUkVGSVgpCi0gICAgICBlbmRpZigpCi0gICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFMpCisgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQogCi0gICAgICAjIFVzZSB0aGUgbGlicmFyeSdzIGluc3RhbGwgcHJlZml4IGFzIGEgaGludAotICAgICAgaWYgKCR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0gTUFUQ0hFUyAiXiguKy9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvWzAtOS5dKykiKQotICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFMgIiR7Q01BS0VfTUFUQ0hfMX0iKQotICAgICAgZWxzZWlmICgke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IE1BVENIRVMgIl4oLispL2xpYig2NHwzMik/L3B5dGhvblswLTkuXSsvY29uZmlnIikKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke0NNQUtFX01BVENIXzF9IikKLSAgICAgIGVsc2VpZiAoREVGSU5FRCBDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSBBTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSBNQVRDSEVTICJeKC4rKS9saWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0iKQotICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFMgIiR7Q01BS0VfTUFUQ0hfMX0iKQotICAgICAgZWxzZSgpCi0gICAgICAgICMgYXNzdW1lIGxpYnJhcnkgaXMgaW4gYSBkaXJlY3RvcnkgdW5kZXIgcm9vdAotICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IiBESVJFQ1RPUlkpCi0gICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QUkVGSVggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BSRUZJWH0iIERJUkVDVE9SWSkKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke18ke19QWVRIT05fUFJFRklYfV9QUkVGSVh9IikKLSAgICAgIGVuZGlmKCkKLQotICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKLSAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKLSAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gSU5DTFVERSkKLQotICAgICAgaWYgKEFQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkZJUlNUIikKLSAgICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKLSAgICAgICAgICAgICAgICAgICBOQU1FUyBQeXRob24uaAotICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KLSAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICi0gICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAotICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCi0gICAgICBlbmRpZigpCi0KLSAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKLSAgICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKLSAgICAgICAgICAgICAgICAgICBOQU1FUyBQeXRob24uaAotICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQotICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCi0gICAgICBlbmRpZigpCi0KLSAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKLSAgICAgICAgc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9KQotICAgICAgZWxzZSgpCi0gICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKLSAgICAgIGVuZGlmKCkKLQotICAgICAgaWYgKFdJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCi0gICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30pCi0gICAgICBlbHNlKCkKLSAgICAgICAgdW5zZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMpCi0gICAgICBlbmRpZigpCi0KLSAgICAgIGZpbmRfcGF0aCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSCi0gICAgICAgICAgICAgICAgIE5BTUVTIFB5dGhvbi5oCi0gICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAke19fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAke19fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9Ci0gICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KLSAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKLSAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfVwiIikKKyAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFLU5PVEZPVU5EIikKICAgICBlbmRpZigpCiAKLSAgICAjIHNlYXJjaCBoZWFkZXIgZmlsZSBpbiBzdGFuZGFyZCBsb2NhdGlvbnMKLSAgICBmaW5kX3BhdGggKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUgotICAgICAgICAgICAgICAgTkFNRVMgUHl0aG9uLmgpCi0gIGVuZGlmKCkKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn0iIEVOViAke19QWVRIT05fUFJFRklYfV9ST09UX0RJUikKIAotICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKKyAgICBpZiAoV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICAjIHNlYXJjaCBmb3IgZGVidWcgbGlicmFyeQorICAgICAgIyB1c2UgcmVsZWFzZSBsaWJyYXJ5IGxvY2F0aW9uIGFzIGEgaGludAorICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVNfREVCVUcgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBERUJVRykKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IiBESVJFQ1RPUlkpCisgICAgICBmaW5kX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHCisgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVR30KKyAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICBISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSH0iICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQorICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCisgICAgICAjIHNlY29uZCB0cnkgaW5jbHVkaW5nIENNQUtFIHZhcmlhYmxlcyB0byBjYXRjaC11cCBub24gY29udmVudGlvbmFsIGxheW91dHMKKyAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHfQorICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgIGVuZGlmKCkKIAotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIEFORCBOT1QgRVhJU1RTICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn0iKQotICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgZmluZCB0aGUgZGlyZWN0b3J5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9XCIiKQotICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUi1OT1RGT1VORCIpCi0gIGVuZGlmKCkKLQotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSKQotICAgICMgcmV0cmlldmUgdmVyc2lvbiBmcm9tIGhlYWRlciBmaWxlCi0gICAgX3B5dGhvbl9nZXRfdmVyc2lvbiAoSU5DTFVERSBQUkVGSVggXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ18pCi0KKyAgICAjIHJldHJpZXZlIHJ1bnRpbWUgbGlicmFyaWVzCiAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCi0gICAgICBpZiAoIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01BSk9SfS4ke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NSU5PUn0iCi0gICAgICAgICAgVkVSU0lPTl9FUVVBTCBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTikKLSAgICAgICAgIyB1cGRhdGUgdmVyc2lvbmluZworICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iIERJUkVDVE9SWSkKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIMiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSH0iIERJUkVDVE9SWSkKKyAgICAgIF9weXRob25fZmluZF9ydW50aW1lX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyfSIgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKKyAgICBlbmRpZigpCisgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHKQorICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVNfREVCVUcgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBERUJVRykKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHfSIgRElSRUNUT1JZKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyICIke18ke19QWVRIT05fUFJFRklYfV9QQVRIfSIgRElSRUNUT1JZKQorICAgICAgX3B5dGhvbl9maW5kX3J1bnRpbWVfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyfSIgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUykKKyAgICB3aGlsZSAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKKyAgICAgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMKKyAgICAgICAgICBBTkQgTk9UIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICAgICMgRG9uJ3Qgc2VhcmNoIGZvciBpbmNsdWRlIGRpciBpZiBubyBsaWJyYXJ5IHdhcyBmb3VuZGVkCisgICAgICAgIGJyZWFrKCkKKyAgICAgIGVuZGlmKCkKKworICAgICAgaWYgKCgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKSBPUiBfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHKQorICAgICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJTIElOQ0xVREVTKQorCisgICAgICAgIGZpbmRfcGF0aCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSCisgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FU30KKyAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKyAgICAgIGVuZGlmKCkKKworICAgICAgIyBSZWx5IG9uIEhJTlRTIGFuZCBzdGFuZGFyZCBwYXRocyBpZiBpbnRlcnByZXRlciBvciBjb25maWcgdG9vbCBmYWlsZWQgdG8gbG9jYXRlIGFydGlmYWN0cworICAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCisgICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUykKKyAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlYgTUFUQ0hFUyAiXihGSVJTVHxPTkxZKSQiKQorICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMgRU5WIFZJUlRVQUxfRU5WIEVOViBDT05EQV9QUkVGSVgpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTKQorCisgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFKQorICAgICAgICAgICMgVXNlIHRoZSBsaWJyYXJ5J3MgaW5zdGFsbCBwcmVmaXggYXMgYSBoaW50CisgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgTUFUQ0hFUyAiXiguKy9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvWzAtOS5dKykiKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgICAgICBlbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgTUFUQ0hFUyAiXiguKykvbGliKDY0fDMyKT8vcHl0aG9uWzAtOS5dKy9jb25maWciKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgICAgICBlbHNlaWYgKERFRklORUQgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0gTUFUQ0hFUyAiXiguKykvbGliLyR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9IikKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UUyAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAjIGFzc3VtZSBsaWJyYXJ5IGlzIGluIGEgZGlyZWN0b3J5IHVuZGVyIHJvb3QKKyAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QUkVGSVggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iIERJUkVDVE9SWSkKKyAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QUkVGSVggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BSRUZJWH0iIERJUkVDVE9SWSkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYfSIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQorICAgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKKyAgICAgICAgX3B5dGhvbl9nZXRfcGF0aF9zdWZmaXhlcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBJTkNMVURFKQorCisgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJGSVJTVCIpCisgICAgICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKKyAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KKyAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICisgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICBpZiAoV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJGSVJTVCIpCisgICAgICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKKyAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KKyAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30pCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQorICAgICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30pCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKKyAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX05BTUVTfQorICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQorICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAke19fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgICBlbmRpZigpCisKKyAgICAgICMgc2VhcmNoIGhlYWRlciBmaWxlIGluIHN0YW5kYXJkIGxvY2F0aW9ucworICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKKyAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FU30pCisKKyAgICAgIGJyZWFrKCkKKyAgICBlbmR3aGlsZSgpCisKKyAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKKworICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfSIpCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IGZpbmQgdGhlIGRpcmVjdG9yeSBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfVwiIikKKyAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUi1OT1RGT1VORCIpCisgICAgZW5kaWYoKQorCisgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKKyAgICAgICMgcmV0cmlldmUgdmVyc2lvbiBmcm9tIGhlYWRlciBmaWxlCisgICAgICBfcHl0aG9uX2dldF92ZXJzaW9uIChJTkNMVURFIFBSRUZJWCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DXykKKworICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICAgIGlmICgiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01JTk9SfSIKKyAgICAgICAgICAgIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04pCisgICAgICAgICAgIyB1cGRhdGUgdmVyc2lvbmluZworICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT059KQorICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUQ0ggJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fUEFUQ0h9KQorICAgICAgICBlbmRpZigpCisgICAgICBlbHNlKCkKICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTn0pCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1IgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUFKT1J9KQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01JTk9SfSkKICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSCAke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9QQVRDSH0pCiAgICAgICBlbmRpZigpCi0gICAgZWxzZSgpCi0gICAgICAjIGxpYnJhcnkgaXMgbm90IGRlZmluZWQsIHJlbHkgb24gaGVhZGVyIGZvciB2ZXJzaW9uCi0gICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OfSkKLSAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1IgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUFKT1J9KQotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUiAke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NSU5PUn0pCi0gICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVENIICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX1BBVENIfSkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIApAQCAtMjI3NSw3NCArMjc2OSwxMTEgQEAKICAgZW5kaWYoKQogCiAgICMgZGVmaW5lIHB1YmxpYyB2YXJpYWJsZXMKLSAgc2V0ICgke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHfSIpCi0gIF9weXRob25fc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMgKCR7X1BZVEhPTl9QUkVGSVh9KQorICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfQVJUSUZBQ1RTKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVR30iKQorICAgIF9weXRob25fc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMgKCR7X1BZVEhPTl9QUkVGSVh9KQogCi0gIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX1JFTEVBU0UgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFfSIpCi0gIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUd9IikKKyAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRX0iKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUd9IikKIAotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFKQotICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRX0iKQotICBlbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUcpCi0gICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVR30iKQotICBlbHNlKCkKLSAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWSAiJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZLU5PVEZPVU5EIikKLSAgZW5kaWYoKQotCi0gIF9weXRob25fc2V0X2xpYnJhcnlfZGlycyAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRykKLSAgaWYgKFVOSVgpCi0gICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgTUFUQ0hFUyAiJHtDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVh9JCIpCi0gICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ESVJTICR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTfSkKKyAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFfSIpCisgICAgZWxzZWlmIChfJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVR30iKQorICAgIGVsc2UoKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWS1OT1RGT1VORCIpCiAgICAgZW5kaWYoKQotICBlbHNlKCkKKworICAgIF9weXRob25fc2V0X2xpYnJhcnlfZGlycyAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRykKKyAgICBpZiAoVU5JWCkKKyAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIE1BVENIRVMgIiR7Q01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYfSQiKQorICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ESVJTICR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKICAgICAgIF9weXRob25fc2V0X2xpYnJhcnlfZGlycyAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RJUlMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFIF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHKQorICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0gIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIE9SIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgT1IgJHtfUFlUSE9OX1BSRUZJWH1fQ29tcGlsZXJfRk9VTkQpCiAgICAgICAjIGRldmVsb3BtZW50IGVudmlyb25tZW50IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIGludGVycHJldGVyL2NvbXBpbGVyCiAgICAgICBpZiAoIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IiBWRVJTSU9OX0VRVUFMICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0iCiAgICAgICAgICAgQU5EICIke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NQUpPUn0uJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUlOT1J9IiBWRVJTSU9OX0VRVUFMICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfS4ke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SfSIpCi0gICAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfRk9VTkQgVFJVRSkKKyAgICAgICAgX3B5dGhvbl9zZXRfZGV2ZWxvcG1lbnRfbW9kdWxlX2ZvdW5kIChNb2R1bGUpCisgICAgICAgIF9weXRob25fc2V0X2RldmVsb3BtZW50X21vZHVsZV9mb3VuZCAoRW1iZWQpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZWlmICgke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IKLSAgICAgICAgICAgIEFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01JTk9SfSIgVkVSU0lPTl9FUVVBTCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUn0uJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0iKQotICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9GT1VORCBUUlVFKQorICAgICAgICBBTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01BSk9SfS4ke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NSU5PUn0iIFZFUlNJT05fRVFVQUwgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IikKKyAgICAgIF9weXRob25fc2V0X2RldmVsb3BtZW50X21vZHVsZV9mb3VuZCAoTW9kdWxlKQorICAgICAgX3B5dGhvbl9zZXRfZGV2ZWxvcG1lbnRfbW9kdWxlX2ZvdW5kIChFbWJlZCkKICAgICBlbmRpZigpCiAgICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQUJJIEFORAogICAgICAgICAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9BQkkgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MKICAgICAgICAgICBPUiBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19BQkkgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MpKQotICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9GT1VORCBGQUxTRSkKKyAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EIEZBTFNFKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCBGQUxTRSkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAorICBpZiAoKCAke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQKKyAgICAgICAgQU5EICR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EKQorICAgICAgT1IgKE5PVCAiRGV2ZWxvcG1lbnQuTW9kdWxlIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUworICAgICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgICAgICBPUiAoTk9UICJEZXZlbG9wbWVudC5FbWJlZCIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMKKyAgICAgICAgQU5EICR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORCkpCisgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9SRUFTT05fRkFJTFVSRSkKKyAgZW5kaWYoKQorCisgIGlmICgiRGV2ZWxvcG1lbnQiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTCisgICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5ECisgICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9GT1VORCBUUlVFKQorICBlbmRpZigpCisKKyAgaWYgKCgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQKKyAgICAgIE9SICR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EKQorICAgIEFORCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfS9QeVB5LmgiKQorICAjIHJldHJpZXZlIFB5UHkgdmVyc2lvbgorICBmaWxlIChTVFJJTkdTICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn0vcGF0Y2hsZXZlbC5oIiAke19QWVRIT05fUFJFRklYfV9QeVB5X1ZFUlNJT04KKyAgICAgICAgICAgICAgICBSRUdFWCAiXiNkZWZpbmVbIFx0XStQWVBZX1ZFUlNJT05bIFx0XStcIlteXCJdK1wiIikKKyAgc3RyaW5nIChSRUdFWCBSRVBMQUNFICJeI2RlZmluZVsgXHRdK1BZUFlfVkVSU0lPTlsgXHRdK1wiKFteXCJdKylcIi4qIiAiXFwxIgorICAgICAgICAgICAgICAgICR7X1BZVEhPTl9QUkVGSVh9X1B5UHlfVkVSU0lPTiAiJHske19QWVRIT05fUFJFRklYfV9QeVB5X1ZFUlNJT059IikKKyAgZW5kaWYoKQorCiAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjMiCiAgICAgICBBTkQgTk9UIERFRklORUQgJHtfUFlUSE9OX1BSRUZJWH1fU09BQkkpCiAgICAgX3B5dGhvbl9nZXRfY29uZmlnX3ZhciAoJHtfUFlUSE9OX1BSRUZJWH1fU09BQkkgU09BQkkpCiAgIGVuZGlmKCkKIAotICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfRk9VTkQpCi0gICAgIyBjb21wdXRlIGFuZCBzYXZlIGRldmVsb3BtZW50IHNpZ25hdHVyZQotICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKLSAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgIiR7X18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkV9IiBDQUNIRSBJTlRFUk5BTCAiIikKLSAgZWxzZSgpCi0gICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgQ0FDSEUpCi0gIGVuZGlmKCkKKyAgX3B5dGhvbl9jb21wdXRlX2RldmVsb3BtZW50X3NpZ25hdHVyZSAoTW9kdWxlKQorICBfcHl0aG9uX2NvbXB1dGVfZGV2ZWxvcG1lbnRfc2lnbmF0dXJlIChFbWJlZCkKIAogICAjIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGZpbmQgbGlicmFyeSBvcmRlcmluZwogICBpZiAoREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTKQogICAgIHNldCAoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCiAgIGVuZGlmKCkKIAorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICAgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMpCisgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iIENBQ0hFIEZJTEVQQVRIICIke19QWVRIT05fUFJFRklYfSBMaWJyYXJ5IikKKyAgICBlbmRpZigpCisgICAgaWYgKCJJTkNMVURFX0RJUiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMpCisgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn0iIENBQ0hFIEZJTEVQQVRIICIke19QWVRIT05fUFJFRklYfSBJbmNsdWRlIERpcmVjdG9yeSIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKICAgX3B5dGhvbl9tYXJrX2FzX2ludGVybmFsIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX1JFTEVBU0UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UX01PRFVMRV9TSUdOQVRVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfRU1CRURfU0lHTkFUVVJFKQogZW5kaWYoKQogCiBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRVFVSVJFRF9OdW1QeSkKQEAgLTIzNTYsNyArMjg4Nyw3IEBACiAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIgIiR7JHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVJ9IiBDQUNIRSBJTlRFUk5BTCAiIikKICAgZWxzZWlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUikKICAgICAjIGNvbXB1dGUgbnVtcHkgc2lnbmF0dXJlLiBEZXBlbmRzIG9uIGludGVycHJldGVyIGFuZCBkZXZlbG9wbWVudCBzaWduYXR1cmVzCi0gICAgc3RyaW5nIChNRDUgX18ke19QWVRIT05fUFJFRklYfV9OVU1QWV9TSUdOQVRVUkUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFfToke18ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUn0iKQorICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fTlVNUFlfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UX01PRFVMRV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSfSIpCiAgICAgaWYgKE5PVCBfXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSBTVFJFUVVBTCBfJHtfUFlUSE9OX1BSRUZJWH1fTlVNUFlfU0lHTkFUVVJFCiAgICAgICAgIE9SIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSfSIpCiAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSIENBQ0hFKQpAQCAtMjM2NSwxMyArMjg5NiwxMiBAQAogICBlbmRpZigpCiAKICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIpCi0gICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgQ09NTUFORCAiJHske19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKLSAgICAgICAgICAgICAgImZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb25cbnRyeTogaW1wb3J0IG51bXB5OyBwcmludChudW1weS5nZXRfaW5jbHVkZSgpLCBlbmQ9JycpXG5leGNlcHQ6cGFzc1xuIgotICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKLSAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfUEFUSAotICAgICAgRVJST1JfUVVJRVQKLSAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7JHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5c1xudHJ5OiBpbXBvcnQgbnVtcHk7IHN5cy5zdGRvdXQud3JpdGUobnVtcHkuZ2V0X2luY2x1ZGUoKSlcbmV4Y2VwdDpwYXNzXG4iCisgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCisgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfUEFUSAorICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKIAogICAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVCkKICAgICAgIGZpbmRfcGF0aCAoXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSCkBAIC0yMzg5LDMxICsyOTE5LDM2IEBACiAgIGVuZGlmKCkKIAogICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSKQotICAgIGV4ZWN1dGVfcHJvY2VzcyAoCi0gICAgICAgICAgICBDT01NQU5EICIkeyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYwotICAgICAgICAgICAgImZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb25cbnRyeTogaW1wb3J0IG51bXB5OyBwcmludChudW1weS5fX3ZlcnNpb25fXywgZW5kPScnKVxuZXhjZXB0OnBhc3NcbiIKLSAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCi0gICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1ZFUlNJT04pCisgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7JHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXNcbnRyeTogaW1wb3J0IG51bXB5OyBzeXMuc3Rkb3V0LndyaXRlKG51bXB5Ll9fdmVyc2lvbl9fKVxuZXhjZXB0OnBhc3NcbiIKKyAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCisgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1ZFUlNJT04pCiAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUKQogICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9OdW1QeV9WRVJTSU9OICIke18ke19QWVRIT05fUFJFRklYfV9OdW1QeV9WRVJTSU9OfSIpCiAgICAgZWxzZSgpCiAgICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfVkVSU0lPTikKICAgICBlbmRpZigpCiAKLSAgICAjIGZpbmFsIHN0ZXA6IHNldCBOdW1QeSBmb3VuZGVkIG9ubHkgaWYgRGV2ZWxvcG1lbnQgY29tcG9uZW50IGlzIGZvdW5kZWQgYXMgd2VsbAotICAgIHNldCgke19QWVRIT05fUFJFRklYfV9OdW1QeV9GT1VORCAkeyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X0ZPVU5EfSkKKyAgICAjIGZpbmFsIHN0ZXA6IHNldCBOdW1QeSBmb3VuZGVkIG9ubHkgaWYgRGV2ZWxvcG1lbnQuTW9kdWxlIGNvbXBvbmVudCBpcyBmb3VuZGVkIGFzIHdlbGwKKyAgICBzZXQoJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfRk9VTkQgJHske19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkR9KQogICBlbHNlKCkKICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0ZPVU5EIEZBTFNFKQogICBlbmRpZigpCiAKICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0ZPVU5EKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfUkVBU09OX0ZBSUxVUkUpCisKICAgICAjIGNvbXB1dGUgYW5kIHNhdmUgbnVtcHkgc2lnbmF0dXJlCi0gICAgc3RyaW5nIChNRDUgX18ke19QWVRIT05fUFJFRklYfV9OVU1QWV9TSUdOQVRVUkUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFfTokeyR7X1BZVEhPTl9QUkVGSVh9X051bVB5SU5DTFVERV9ESVJ9IikKKyAgICBzdHJpbmcgKE1ENSBfXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFfToke18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9NT0RVTEVfU0lHTkFUVVJFfTokeyR7X1BZVEhPTl9QUkVGSVh9X051bVB5SU5DTFVERV9ESVJ9IikKICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9OVU1QWV9TSUdOQVRVUkUgIiR7X18ke19QWVRIT05fUFJFRklYfV9OVU1QWV9TSUdOQVRVUkV9IiBDQUNIRSBJTlRFUk5BTCAiIikKICAgZWxzZSgpCiAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9OVU1QWV9TSUdOQVRVUkUgQ0FDSEUpCiAgIGVuZGlmKCkKIAorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSfSIgQ0FDSEUgRklMRVBBVEggIiR7X1BZVEhPTl9QUkVGSVh9IE51bVB5IEluY2x1ZGUgRGlyZWN0b3J5IikKKyAgZW5kaWYoKQorCiAgIF9weXRob25fbWFya19hc19pbnRlcm5hbCAoXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSkKIGVuZGlmKCkKQEAgLTI0MjYsMTEgKzI5NjEsMTAgQEAKIAogdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9SRUFTT05fRkFJTFVSRSkKIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlQgSU4gSVRFTVMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIgRGV2ZWxvcG1lbnQgTnVtUHkpCi0gIGlmIChOT1QgJHtfUFlUSE9OX1BSRUZJWH1fJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UfV9GT1VORAotICAgICAgQU5EIF8ke19QWVRIT05fUFJFRklYfV8ke18ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlR9X1JFQVNPTl9GQUlMVVJFKQorICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9XyR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBPTkVOVH1fUkVBU09OX0ZBSUxVUkUpCiAgICAgc3RyaW5nIChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFQVNPTl9GQUlMVVJFICJcbiAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UfTogJHtfJHtfUFlUSE9OX1BSRUZJWH1fJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UfV9SRUFTT05fRkFJTFVSRX0iKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UfV9SRUFTT05fRkFJTFVSRSkKICAgZW5kaWYoKQotICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9XyR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBPTkVOVH1fUkVBU09OX0ZBSUxVUkUpCiBlbmRmb3JlYWNoKCkKIAogaW5jbHVkZSAoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS8uLi9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKQEAgLTI0NTgsOCArMjk5MiwxMCBAQAogICAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7JHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IikKICAgZW5kaWYoKQogCi0gIGlmICgiRGV2ZWxvcG1lbnQiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTCi0gICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfRk9VTkQpCisgIGlmICgoIkRldmVsb3BtZW50Lk1vZHVsZSIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMKKyAgICAgICAgQU5EICR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORCkKKyAgICAgIE9SICgiRGV2ZWxvcG1lbnQuRW1iZWQiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTCisgICAgICAgIEFORCAke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkpCiAKICAgICBtYWNybyAoX19QWVRIT05fSU1QT1JUX0xJQlJBUlkgX19uYW1lKQogICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBNQVRDSEVTICIke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH0kIgpAQCAtMjQ5MSw4ICszMDI3LDggQEAKICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzICgke19fbmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTICJDIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9JTVBMSUIgIiR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWX0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWX0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9JTVBMSUIgIiR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSSUVTfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7JHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX1JFTEVBU0V9IikKICAgICAgICAgZW5kaWYoKQogICAgICAgZWxzZSgpCiAgICAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgQU5EICR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcpCkBAIC0yNTA2LDcgKzMwNDIsNyBAQAogICAgICAgICBlbHNlKCkKICAgICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMgKCR7X19uYW1lfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MQU5HVUFHRVMgIkMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUll9IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKIApAQCAtMjUyMCwzMSArMzA1NiwzNSBAQAogICAgICAgZW5kaWYoKQogICAgIGVuZG1hY3JvKCkKIAotICAgIF9fcHl0aG9uX2ltcG9ydF9saWJyYXJ5ICgke19QWVRIT05fUFJFRklYfTo6UHl0aG9uKQorICAgIGlmICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgICAgIF9fcHl0aG9uX2ltcG9ydF9saWJyYXJ5ICgke19QWVRIT05fUFJFRklYfTo6UHl0aG9uKQorICAgIGVuZGlmKCkKIAotICAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJeKFdpbmRvd3MuKnxDWUdXSU58TVNZUykkIikKLSAgICAgICMgT24gV2luZG93cy9DWUdXSU4vTVNZUywgUHl0aG9uOjpNb2R1bGUgaXMgdGhlIHNhbWUgYXMgUHl0aG9uOjpQeXRob24KLSAgICAgICMgYnV0IEFMSUFTIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhlIGltcG9ydGVkIGxpYnJhcnkgaXMgbm90IEdMT0JBTC4KLSAgICAgIF9fcHl0aG9uX2ltcG9ydF9saWJyYXJ5ICgke19QWVRIT05fUFJFRklYfTo6TW9kdWxlKQotICAgIGVsc2UoKQotICAgICAgaWYgKE5PVCBUQVJHRVQgJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZSApCi0gICAgICAgIGFkZF9saWJyYXJ5ICgke19QWVRIT05fUFJFRklYfTo6TW9kdWxlIElOVEVSRkFDRSBJTVBPUlRFRCkKLSAgICAgIGVuZGlmKCkKLSAgICAgIHNldF9wcm9wZXJ0eSAoVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJTfSIpCisgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORCkKKyAgICAgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9NT0RVTEVfQVJUSUZBQ1RTKQorICAgICAgICAjIE9uIFdpbmRvd3MvQ1lHV0lOL01TWVMsIFB5dGhvbjo6TW9kdWxlIGlzIHRoZSBzYW1lIGFzIFB5dGhvbjo6UHl0aG9uCisgICAgICAgICMgYnV0IEFMSUFTIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhlIGltcG9ydGVkIGxpYnJhcnkgaXMgbm90IEdMT0JBTC4KKyAgICAgICAgX19weXRob25faW1wb3J0X2xpYnJhcnkgKCR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUpCisgICAgICBlbHNlKCkKKyAgICAgICAgaWYgKE5PVCBUQVJHRVQgJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZSkKKyAgICAgICAgICBhZGRfbGlicmFyeSAoJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZSBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgc2V0X3Byb3BlcnR5IChUQVJHRVQgJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIkeyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSU30iKQogCi0gICAgICAjIFdoZW4gYXZhaWxhYmxlLCBlbmZvcmNlIHNoYXJlZCBsaWJyYXJ5IGdlbmVyYXRpb24gd2l0aCB1bmRlZmluZWQgc3ltYm9scwotICAgICAgaWYgKEFQUExFKQotICAgICAgICBzZXRfcHJvcGVydHkgKFRBUkdFVCAke19QWVRIT05fUFJFRklYfTo6TW9kdWxlCi0gICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfT1BUSU9OUyAiTElOS0VSOi11bmRlZmluZWQsZHluYW1pY19sb29rdXAiKQotICAgICAgZW5kaWYoKQotICAgICAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJTdW5PUyIpCi0gICAgICAgIHNldF9wcm9wZXJ0eSAoVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19PUFRJT05TICJMSU5LRVI6LXosbm9kZWZzIikKLSAgICAgIGVuZGlmKCkKLSAgICAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiQUlYIikKLSAgICAgICAgc2V0X3Byb3BlcnR5IChUQVJHRVQgJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZQotICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9MSU5LX09QVElPTlMgIkxJTktFUjotYixlcm9rIikKKyAgICAgICAgIyBXaGVuIGF2YWlsYWJsZSwgZW5mb3JjZSBzaGFyZWQgbGlicmFyeSBnZW5lcmF0aW9uIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMKKyAgICAgICAgaWYgKEFQUExFKQorICAgICAgICAgIHNldF9wcm9wZXJ0eSAoVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9MSU5LX09QVElPTlMgIkxJTktFUjotdW5kZWZpbmVkLGR5bmFtaWNfbG9va3VwIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZiAoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIlN1bk9TIikKKyAgICAgICAgICBzZXRfcHJvcGVydHkgKFRBUkdFVCAke19QWVRIT05fUFJFRklYfTo6TW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19PUFRJT05TICJMSU5LRVI6LXosbm9kZWZzIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZiAoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFJWCIpCisgICAgICAgICAgc2V0X3Byb3BlcnR5IChUQVJHRVQgJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfT1BUSU9OUyAiTElOS0VSOi1iLGVyb2siKQorICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogCkBAIC0yNTUzLDggKzMwOTMsNyBAQAogICAgICMgSXQgaXMgdXNlZCB0byBidWlsZCBtb2R1bGVzIGZvciBweXRob24uCiAgICAgIwogICAgIGZ1bmN0aW9uIChfXyR7X1BZVEhPTl9QUkVGSVh9X0FERF9MSUJSQVJZIHByZWZpeCBuYW1lKQotICAgICAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDIgUFlUSE9OX0FERF9MSUJSQVJZCi0gICAgICAgICJTVEFUSUM7U0hBUkVEO01PRFVMRTtXSVRIX1NPQUJJIiAiIiAiIikKKyAgICAgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAoUEFSU0VfQVJHViAyIFBZVEhPTl9BRERfTElCUkFSWSAiU1RBVElDO1NIQVJFRDtNT0RVTEU7V0lUSF9TT0FCSSIgIiIgIiIpCiAKICAgICAgIGlmIChwcmVmaXggU1RSRVFVQUwgIlB5dGhvbjIiIEFORCBQWVRIT05fQUREX0xJQlJBUllfV0lUSF9TT0FCSSkKICAgICAgICAgbWVzc2FnZSAoQVVUSE9SX1dBUk5JTkcgIkZpbmRQeXRob24yOiBPcHRpb24gYFdJVEhfU09BQklgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFB5dGhvbjIgYW5kIHdpbGwgYmUgaWdub3JlZC4iKQpAQCAtMjU2OCw2ICszMTA3LDE2IEBACiAgICAgICBlbHNlKCkKICAgICAgICAgc2V0ICh0eXBlIE1PRFVMRSkKICAgICAgIGVuZGlmKCkKKworICAgICAgaWYgKHR5cGUgU1RSRVFVQUwgIk1PRFVMRSIgQU5EIE5PVCBUQVJHRVQgJHtwcmVmaXh9OjpNb2R1bGUpCisgICAgICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgIiR7cHJlZml4fV9BRERfTElCUkFSWTogZGVwZW5kZW50IHRhcmdldCAnJHtwcmVmaXh9OjpNb2R1bGUnIGlzIG5vdCBkZWZpbmVkLlxuICAgRGlkIHlvdSBtaXNzIHRvIHJlcXVlc3QgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5Nb2R1bGUnPyIpCisgICAgICAgIHJldHVybigpCisgICAgICBlbmRpZigpCisgICAgICBpZiAoTk9UIHR5cGUgU1RSRVFVQUwgIk1PRFVMRSIgQU5EIE5PVCBUQVJHRVQgJHtwcmVmaXh9OjpQeXRob24pCisgICAgICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgIiR7cHJlZml4fV9BRERfTElCUkFSWTogZGVwZW5kZW50IHRhcmdldCAnJHtwcmVmaXh9OjpQeXRob24nIGlzIG5vdCBkZWZpbmVkLlxuICAgRGlkIHlvdSBtaXNzIHRvIHJlcXVlc3QgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5FbWJlZCc/IikKKyAgICAgICAgcmV0dXJuKCkKKyAgICAgIGVuZGlmKCkKKwogICAgICAgYWRkX2xpYnJhcnkgKCR7bmFtZX0gJHt0eXBlfSAke1BZVEhPTl9BRERfTElCUkFSWV9VTlBBUlNFRF9BUkdVTUVOVFN9KQogCiAgICAgICBnZXRfcHJvcGVydHkgKHR5cGUgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgVFlQRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFB5dGhvbjIuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQeXRob24yLmNtYWtlCmluZGV4IDNkMGU2YjkuLjQyZDg3YzggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFB5dGhvbjIuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUHl0aG9uMi5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRQeXRob24yCiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEZpbmQgUHl0aG9uIDIgaW50ZXJwcmV0ZXIsIGNvbXBpbGVyIGFuZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCAoaW5jbHVkZQogZGlyZWN0b3JpZXMgYW5kIGxpYnJhcmllcykuCiAKQEAgLTEzLDEzICsxNSwyNCBAQAogKiBgYEludGVycHJldGVyYGA6IHNlYXJjaCBmb3IgUHl0aG9uIDIgaW50ZXJwcmV0ZXIKICogYGBDb21waWxlcmBgOiBzZWFyY2ggZm9yIFB5dGhvbiAyIGNvbXBpbGVyLiBPbmx5IG9mZmVyZWQgYnkgSXJvblB5dGhvbi4KICogYGBEZXZlbG9wbWVudGBgOiBzZWFyY2ggZm9yIGRldmVsb3BtZW50IGFydGlmYWN0cyAoaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKLSAgbGlicmFyaWVzKQorICBsaWJyYXJpZXMpLiBUaGlzIGNvbXBvbmVudCBpbmNsdWRlcyB0d28gc3ViLWNvbXBvbmVudHMgd2hpY2ggY2FuIGJlIHNwZWNpZmllZAorICBpbmRlcGVuZGVudGx5OgorCisgICogYGBEZXZlbG9wbWVudC5Nb2R1bGVgYDogc2VhcmNoIGZvciBhcnRpZmFjdHMgZm9yIFB5dGhvbiAyIG1vZHVsZQorICAgIGRldmVsb3BtZW50cy4KKyAgKiBgYERldmVsb3BtZW50LkVtYmVkYGA6IHNlYXJjaCBmb3IgYXJ0aWZhY3RzIGZvciBQeXRob24gMiBlbWJlZGRpbmcKKyAgICBkZXZlbG9wbWVudHMuCisKICogYGBOdW1QeWBgOiBzZWFyY2ggZm9yIE51bVB5IGluY2x1ZGUgZGlyZWN0b3JpZXMuCiAKIElmIG5vIGBgQ09NUE9ORU5UU2BgIGFyZSBzcGVjaWZpZWQsIGBgSW50ZXJwcmV0ZXJgYCBpcyBhc3N1bWVkLgogCitJZiBjb21wb25lbnQgYGBEZXZlbG9wbWVudGBgIGlzIHNwZWNpZmllZCwgaXQgaW1wbGllcyBzdWItY29tcG9uZW50cworYGBEZXZlbG9wbWVudC5Nb2R1bGVgYCBhbmQgYGBEZXZlbG9wbWVudC5FbWJlZGBgLgorCiBUbyBlbnN1cmUgY29uc2lzdGVudCB2ZXJzaW9ucyBiZXR3ZWVuIGNvbXBvbmVudHMgYGBJbnRlcnByZXRlcmBgLCBgYENvbXBpbGVyYGAsCi1gYERldmVsb3BtZW50YGAgYW5kIGBgTnVtUHlgYCwgc3BlY2lmeSBhbGwgY29tcG9uZW50cyBhdCB0aGUgc2FtZSB0aW1lOjoKK2BgRGV2ZWxvcG1lbnRgYCAob3Igb25lIG9mIGl0cyBzdWItY29tcG9uZW50cykgYW5kIGBgTnVtUHlgYCwgc3BlY2lmeSBhbGwKK2NvbXBvbmVudHMgYXQgdGhlIHNhbWUgdGltZTo6CiAKICAgZmluZF9wYWNrYWdlIChQeXRob24yIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCiAKQEAgLTMxLDEwICs0NCwxMSBAQAogCiAuLiBub3RlOjoKIAotICBJZiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCBhbmQgYGBEZXZlbG9wbWVudGBgIGFyZSBib3RoIHNwZWNpZmllZCwgdGhpcwotICBtb2R1bGUgc2VhcmNoIG9ubHkgZm9yIGludGVycHJldGVyIHdpdGggc2FtZSBwbGF0Zm9ybSBhcmNoaXRlY3R1cmUgYXMgdGhlIG9uZQotICBkZWZpbmVkIGJ5IGBgQ01ha2VgYCBjb25maWd1cmF0aW9uLiBUaGlzIGNvbnRyYWludCBkb2VzIG5vdCBhcHBseSBpZiBvbmx5Ci0gIGBgSW50ZXJwcmV0ZXJgYCBjb21wb25lbnQgaXMgc3BlY2lmaWVkLgorICBJZiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCBhbmQgYGBEZXZlbG9wbWVudGBgIChvciBvbmUgb2YgaXRzCisgIHN1Yi1jb21wb25lbnRzKSBhcmUgYm90aCBzcGVjaWZpZWQsIHRoaXMgbW9kdWxlIHNlYXJjaCBvbmx5IGZvciBpbnRlcnByZXRlcgorICB3aXRoIHNhbWUgcGxhdGZvcm0gYXJjaGl0ZWN0dXJlIGFzIHRoZSBvbmUgZGVmaW5lZCBieSBgYENNYWtlYGAKKyAgY29uZmlndXJhdGlvbi4gVGhpcyBjb250cmFpbnQgZG9lcyBub3QgYXBwbHkgaWYgb25seSBgYEludGVycHJldGVyYGAKKyAgY29tcG9uZW50IGlzIHNwZWNpZmllZC4KIAogSW1wb3J0ZWQgVGFyZ2V0cwogXl5eXl5eXl5eXl5eXl5eXgpAQCAtNDYsMTIgKzYwLDEyIEBACiAgIFB5dGhvbiAyIGludGVycHJldGVyLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQgYGBJbnRlcnByZXRlcmBgIGlzIGZvdW5kLgogYGBQeXRob24yOjpDb21waWxlcmBgCiAgIFB5dGhvbiAyIGNvbXBpbGVyLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQgYGBDb21waWxlcmBgIGlzIGZvdW5kLgotYGBQeXRob24yOjpQeXRob25gYAotICBQeXRob24gMiBsaWJyYXJ5IGZvciBQeXRob24gZW1iZWRkaW5nLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQKLSAgYGBEZXZlbG9wbWVudGBgIGlzIGZvdW5kLgogYGBQeXRob24yOjpNb2R1bGVgYAogICBQeXRob24gMiBsaWJyYXJ5IGZvciBQeXRob24gbW9kdWxlLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQKLSAgYGBEZXZlbG9wbWVudGBgIGlzIGZvdW5kLgorICBgYERldmVsb3BtZW50Lk1vZHVsZWBgIGlzIGZvdW5kLgorYGBQeXRob24yOjpQeXRob25gYAorICBQeXRob24gMiBsaWJyYXJ5IGZvciBQeXRob24gZW1iZWRkaW5nLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQKKyAgYGBEZXZlbG9wbWVudC5FbWJlZGBgIGlzIGZvdW5kLgogYGBQeXRob24yOjpOdW1QeWBgCiAgIE51bVB5IGxpYnJhcnkgZm9yIFB5dGhvbiAyLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQgYGBOdW1QeWBgIGlzIGZvdW5kLgogCkBAIC03NCwyNiArODgsMzEgQEAKICAgICAqIEFuYWNvbmRhCiAgICAgKiBDYW5vcHkKICAgICAqIElyb25QeXRob24KKyAgICAqIFB5UHkKIGBgUHl0aG9uMl9TVERMSUJgYAogICBTdGFuZGFyZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1UcnVlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9VHJ1ZSlgYAorICBvciBlbHNlIGBgc3lzY29uZmlnLmdldF9wYXRoKCdzdGRsaWInKWBgLgogYGBQeXRob24yX1NUREFSQ0hgYAogICBTdGFuZGFyZCBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1UcnVlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1UcnVlKWBgCisgIG9yIGVsc2UgYGBzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKWBgLgogYGBQeXRob24yX1NJVEVMSUJgYAogICBUaGlyZC1wYXJ0eSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYC4KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPUZhbHNlKWBgCisgIG9yIGVsc2UgYGBzeXNjb25maWcuZ2V0X3BhdGgoJ3B1cmVsaWInKWBgLgogYGBQeXRob24yX1NJVEVBUkNIYGAKICAgVGhpcmQtcGFydHkgcGxhdGZvcm0gZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPUZhbHNlKWBgCisgIG9yIGVsc2UgYGBzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRsaWInKWBgLgogYGBQeXRob24yX0NvbXBpbGVyX0ZPVU5EYGAKICAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDIgY29tcGlsZXIuCiBgYFB5dGhvbjJfQ09NUElMRVJgYApAQCAtMTAxLDggKzEyMCwxNCBAQAogYGBQeXRob24yX0NPTVBJTEVSX0lEYGAKICAgQSBzaG9ydCBzdHJpbmcgdW5pcXVlIHRvIHRoZSBjb21waWxlci4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6CiAgICAgKiBJcm9uUHl0aG9uCitgYFB5dGhvbjJfRE9UTkVUX0xBVU5DSEVSYGAKKyAgVGhlIGBgLk5ldGBgIGludGVycHJldGVyLiBPbmx5IHVzZWQgYnkgYGBJcm9uUHl0aG9uYGAgaW1wbGVtZW50YXRpb24uCiBgYFB5dGhvbjJfRGV2ZWxvcG1lbnRfRk9VTkRgYAogICBTeXN0ZW0gaGFzIHRoZSBQeXRob24gMiBkZXZlbG9wbWVudCBhcnRpZmFjdHMuCitgYFB5dGhvbjJfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDIgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzIGZvciBQeXRob24gbW9kdWxlLgorYGBQeXRob24yX0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDIgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzIGZvciBQeXRob24gZW1iZWRkaW5nLgogYGBQeXRob24yX0lOQ0xVREVfRElSU2BgCiAgIFRoZSBQeXRob24gMiBpbmNsdWRlIGRpcmVjdG9yaWVzLgogYGBQeXRob24yX0xJQlJBUklFU2BgCkBAIC0xMTksNiArMTQ0LDggQEAKICAgUHl0aG9uIDIgbWlub3IgdmVyc2lvbi4KIGBgUHl0aG9uMl9WRVJTSU9OX1BBVENIYGAKICAgUHl0aG9uIDIgcGF0Y2ggdmVyc2lvbi4KK2BgUHl0aG9uMl9QeVB5X1ZFUlNJT05gYAorICBQeXRob24gMiBQeVB5IHZlcnNpb24uCiBgYFB5dGhvbjJfTnVtUHlfRk9VTkRgYAogICBTeXN0ZW0gaGFzIHRoZSBOdW1QeS4KIGBgUHl0aG9uMl9OdW1QeV9JTkNMVURFX0RJUlNgYApAQCAtMTg2LDggKzIxMyw5IEBACiAgICogYGBPTkxZYGA6IE9ubHkgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCB0byBsb29rLXVwIGZvciB0aGUKICAgICBpbnRlcnByZXRlci4KICAgKiBgYFNUQU5EQVJEYGA6IFRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIG5vdCB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQotICAgIGludGVycHJldGVyLiBJbiB0aGlzIGNhc2UsIHZhcmlhYmxlIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgKFdpbmRvd3MpCi0gICAgb3IgYGBDTUFLRV9GSU5EX0ZSQU1FV09SS2BgIChtYWNPUykgY2FuIGJlIHNldCB3aXRoIHZhbHVlIGBgTEFTVGBgIG9yCisgICAgaW50ZXJwcmV0ZXIgYnV0IGVudmlyb25tZW50IHZhcmlhYmxlIGBgUEFUSGBgIGlzIGFsd2F5cyBjb25zaWRlcmVkLgorICAgIEluIHRoaXMgY2FzZSwgdmFyaWFibGUgYGBQeXRob24yX0ZJTkRfUkVHSVNUUllgYCAoV2luZG93cykgb3IKKyAgICBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAgKG1hY09TKSBjYW4gYmUgc2V0IHdpdGggdmFsdWUgYGBMQVNUYGAgb3IKICAgICBgYE5FVkVSYGAgdG8gc2VsZWN0IHByZWZlcmFibHkgdGhlIGludGVycHJldGVyIGZyb20gdGhlIHZpcnR1YWwKICAgICBlbnZpcm9ubWVudC4KIApAQCAtMTk3LDYgKzIyNSwzOSBAQAogICAgIHJlY29tbWVuZGVkIHRvIGFsc28gaW5jbHVkZSB0aGUgY29tcG9uZW50IGBgSW50ZXJwcmV0ZXJgYCB0byBnZXQgZXhwZWN0ZWQKICAgICByZXN1bHQuCiAKK2BgUHl0aG9uMl9GSU5EX0lNUExFTUVOVEFUSU9OU2BgCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcywgaW4gYW4gb3JkZXJlZCBsaXN0LCB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucworICB3aGljaCB3aWxsIGJlIHNlYXJjaGVkLiBUaGUgYGBQeXRob24yX0ZJTkRfSU1QTEVNRU5UQVRJT05TYGAgdmFyaWFibGUgY2FuCisgIGhvbGQgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgKiBgYENQeXRob25gYDogdGhpcyBpcyB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24uIFZhcmlvdXMgcHJvZHVjdHMsIGxpa2UKKyAgICBgYEFuYWNvbmRhYGAgb3IgYGBBY3RpdmVQeXRob25gYCwgcmVseSBvbiB0aGlzIGltcGxlbWVudGF0aW9uLgorICAqIGBgSXJvblB5dGhvbmBgOiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZSB0aGUgYGBDU2hhcnBgYCBsYW5ndWFnZSBmb3IKKyAgICBgYC5ORVQgRnJhbWV3b3JrYGAgb24gdG9wIG9mIHRoZSBgRHluYW1pYyBMYW5ndWFnZSBSdW50aW1lYCAoYGBETFJgYCkuCisgICAgU2VlIGBJcm9uUHl0aG9uIDxodHRwOi8vaXJvbnB5dGhvbi5uZXQ+YF8uCisgICogYGBQeVB5YGA6IFRoaXMgaW1wbGVtZW50YXRpb24gdXNlIGBgUlB5dGhvbmBgIGxhbmd1YWdlIGFuZAorICAgIGBgUlB5dGhvbiB0cmFuc2xhdGlvbiB0b29sY2hhaW5gYCB0byBwcm9kdWNlIHRoZSBweXRob24gaW50ZXJwcmV0ZXIuCisgICAgU2VlIGBQeVB5IDxodHRwczovL3d3dy5weXB5Lm9yZz5gXy4KKworICBUaGUgZGVmYXVsdCB2YWx1ZSBpczoKKworICAqIFdpbmRvd3MgcGxhdGZvcm06IGBgQ1B5dGhvbmBgLCBgYElyb25QeXRob25gYAorICAqIE90aGVyIHBsYXRmb3JtczogYGBDUHl0aG9uYGAKKworICAuLiBub3RlOjoKKworICAgIFRoaXMgaGludCBoYXMgdGhlIGxvd2VzdCBwcmlvcml0eSBvZiBhbGwgaGludHMsIHNvIGV2ZW4gaWYsIGZvciBleGFtcGxlLAorICAgIHlvdSBzcGVjaWZ5IGBgSXJvblB5dGhvbmBgIGZpcnN0IGFuZCBgYENQeXRob25gYCBpbiBzZWNvbmQsIGEgcHl0aG9uCisgICAgcHJvZHVjdCBiYXNlZCBvbiBgYENQeXRob25gYCBjYW4gYmUgc2VsZWN0ZWQgYmVjYXVzZSwgZm9yIGV4YW1wbGUgd2l0aAorICAgIGBgUHl0aG9uMl9GSU5EX1NUUkFURUdZPUxPQ0FUSU9OYGAsIGVhY2ggbG9jYXRpb24gd2lsbCBiZSBzZWFyY2ggZmlyc3QgZm9yCisgICAgYGBJcm9uUHl0aG9uYGAgYW5kIHNlY29uZCBmb3IgYGBDUHl0aG9uYGAuCisKKyAgLi4gbm90ZTo6CisKKyAgICBXaGVuIGBgSXJvblB5dGhvbmBgIGlzIHNwZWNpZmllZCwgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gYGBXaW5kb3dzYGAsIHRoZQorICAgIGBgLk5ldGBgIGludGVycHJldGVyIChpLmUuIGBgbW9ub2BgIGNvbW1hbmQpIGlzIGV4cGVjdGVkIHRvIGJlIGF2YWlsYWJsZQorICAgIHRocm91Z2ggdGhlIGBgUEFUSGBgIHZhcmlhYmxlLgorCiBBcnRpZmFjdHMgU3BlY2lmaWNhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMjA5LDYgKzI3MCw5IEBACiBgYFB5dGhvbjJfQ09NUElMRVJgYAogICBUaGUgcGF0aCB0byB0aGUgY29tcGlsZXIuCiAKK2BgUHl0aG9uMl9ET1RORVRfTEFVTkNIRVJgYAorICBUaGUgYGAuTmV0YGAgaW50ZXJwcmV0ZXIuIE9ubHkgdXNlZCBieSBgYElyb25QeXRob25gYCBpbXBsZW1lbnRhdGlvbi4KKwogYGBQeXRob24yX0xJQlJBUllgYAogICBUaGUgcGF0aCB0byB0aGUgbGlicmFyeS4gSXQgd2lsbCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlCiAgIHZhcmlhYmxlcyBgYFB5dGhvbjJfTElCUkFSSUVTYGAsIGBgUHl0aG9uMl9MSUJSQVlfRElSU2BgIGFuZApAQCAtMjM1LDYgKzI5OSwyMiBAQAogICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0bwogICBlbnN1cmUgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YXJpb3VzIGFydGlmYWN0cy4KIAorQnkgZGVmYXVsdCwgdGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FsbHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9mIGEKK3Byb2plY3Qgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzIHdoaWxlIHByb3ZpZGluZyBjb3JyZWN0CithbmQgY29uc2lzdGVudCByZXN1bHRzIGZvciBlYWNoIGNhbGwuIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYGBDTWFrZWBgIGNhY2hlCitpcyBub3QgdXNlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5IHdoaWNoIGNhbiBiZSBwcm9ibGVtYXRpYyBmb3IgaW50ZXJhY3RpdmUKK3NwZWNpZmljYXRpb24uIFNvLCB0byBlbmFibGUgYWxzbyBpbnRlcmFjdGl2ZSBzcGVjaWZpY2F0aW9uLCBtb2R1bGUgYmVoYXZpb3IKK2NhbiBiZSBjb250cm9sZWQgd2l0aCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOgorCitgYFB5dGhvbjJfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFYGAKKyAgU2VsZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS4gVGhpcyBpcyBhIGJvb2xlYW4gdmFyaWFibGU6CisKKyAgKiBJZiBzZXQgdG8gYGBUUlVFYGA6IENyZWF0ZSBDTWFrZSBjYWNoZSBlbnRyaWVzIGZvciB0aGUgYWJvdmUgYXJ0aWZhY3QKKyAgICBzcGVjaWZpY2F0aW9uIHZhcmlhYmxlcyBzbyB0aGF0IHVzZXJzIGNhbiBlZGl0IHRoZW0gaW50ZXJhY3RpdmVseS4KKyAgICBUaGlzIGRpc2FibGVzIHN1cHBvcnQgZm9yIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50IHJlcXVpcmVtZW50cy4KKyAgKiBJZiBzZXQgdG8gYGBGQUxTRWBgIG9yIHVuZGVmaW5lZDogRW5hYmxlIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50CisgICAgcmVxdWlyZW1lbnRzLgorCiBDb21tYW5kcwogXl5eXl5eXl4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUHl0aG9uMy5jbWFrZSBiL01vZHVsZXMvRmluZFB5dGhvbjMuY21ha2UKaW5kZXggYzlhNWQwOS4uYjU4ZWUzMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUHl0aG9uMy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRQeXRob24zLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZFB5dGhvbjMKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogRmluZCBQeXRob24gMyBpbnRlcnByZXRlciwgY29tcGlsZXIgYW5kIGRldmVsb3BtZW50IGVudmlyb25tZW50IChpbmNsdWRlCiBkaXJlY3RvcmllcyBhbmQgbGlicmFyaWVzKS4KIApAQCAtMTMsMTMgKzE1LDI0IEBACiAqIGBgSW50ZXJwcmV0ZXJgYDogc2VhcmNoIGZvciBQeXRob24gMyBpbnRlcnByZXRlcgogKiBgYENvbXBpbGVyYGA6IHNlYXJjaCBmb3IgUHl0aG9uIDMgY29tcGlsZXIuIE9ubHkgb2ZmZXJlZCBieSBJcm9uUHl0aG9uLgogKiBgYERldmVsb3BtZW50YGA6IHNlYXJjaCBmb3IgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzIChpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZAotICBsaWJyYXJpZXMpCisgIGxpYnJhcmllcykuIFRoaXMgY29tcG9uZW50IGluY2x1ZGVzIHR3byBzdWItY29tcG9uZW50cyB3aGljaCBjYW4gYmUgc3BlY2lmaWVkCisgIGluZGVwZW5kZW50bHk6CisKKyAgKiBgYERldmVsb3BtZW50Lk1vZHVsZWBgOiBzZWFyY2ggZm9yIGFydGlmYWN0cyBmb3IgUHl0aG9uIDMgbW9kdWxlCisgICAgZGV2ZWxvcG1lbnRzLgorICAqIGBgRGV2ZWxvcG1lbnQuRW1iZWRgYDogc2VhcmNoIGZvciBhcnRpZmFjdHMgZm9yIFB5dGhvbiAzIGVtYmVkZGluZworICAgIGRldmVsb3BtZW50cy4KKwogKiBgYE51bVB5YGA6IHNlYXJjaCBmb3IgTnVtUHkgaW5jbHVkZSBkaXJlY3Rvcmllcy4KIAogSWYgbm8gYGBDT01QT05FTlRTYGAgYXJlIHNwZWNpZmllZCwgYGBJbnRlcnByZXRlcmBgIGlzIGFzc3VtZWQuCiAKK0lmIGNvbXBvbmVudCBgYERldmVsb3BtZW50YGAgaXMgc3BlY2lmaWVkLCBpdCBpbXBsaWVzIHN1Yi1jb21wb25lbnRzCitgYERldmVsb3BtZW50Lk1vZHVsZWBgIGFuZCBgYERldmVsb3BtZW50LkVtYmVkYGAuCisKIFRvIGVuc3VyZSBjb25zaXN0ZW50IHZlcnNpb25zIGJldHdlZW4gY29tcG9uZW50cyBgYEludGVycHJldGVyYGAsIGBgQ29tcGlsZXJgYCwKLWBgRGV2ZWxvcG1lbnRgYCBhbmQgYGBOdW1QeWBgLCBzcGVjaWZ5IGFsbCBjb21wb25lbnRzIGF0IHRoZSBzYW1lIHRpbWU6OgorYGBEZXZlbG9wbWVudGBgIChvciBvbmUgb2YgaXRzIHN1Yi1jb21wb25lbnRzKSBhbmQgYGBOdW1QeWBgLCBzcGVjaWZ5IGFsbAorY29tcG9uZW50cyBhdCB0aGUgc2FtZSB0aW1lOjoKIAogICBmaW5kX3BhY2thZ2UgKFB5dGhvbjMgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKIApAQCAtMzEsMTAgKzQ0LDExIEBACiAKIC4uIG5vdGU6OgogCi0gIElmIGNvbXBvbmVudHMgYGBJbnRlcnByZXRlcmBgIGFuZCBgYERldmVsb3BtZW50YGAgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGlzCi0gIG1vZHVsZSBzZWFyY2ggb25seSBmb3IgaW50ZXJwcmV0ZXIgd2l0aCBzYW1lIHBsYXRmb3JtIGFyY2hpdGVjdHVyZSBhcyB0aGUgb25lCi0gIGRlZmluZWQgYnkgYGBDTWFrZWBgIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29udHJhaW50IGRvZXMgbm90IGFwcGx5IGlmIG9ubHkKLSAgYGBJbnRlcnByZXRlcmBgIGNvbXBvbmVudCBpcyBzcGVjaWZpZWQuCisgIElmIGNvbXBvbmVudHMgYGBJbnRlcnByZXRlcmBgIGFuZCBgYERldmVsb3BtZW50YGAgKG9yIG9uZSBvZiBpdHMKKyAgc3ViLWNvbXBvbmVudHMpIGFyZSBib3RoIHNwZWNpZmllZCwgdGhpcyBtb2R1bGUgc2VhcmNoIG9ubHkgZm9yIGludGVycHJldGVyCisgIHdpdGggc2FtZSBwbGF0Zm9ybSBhcmNoaXRlY3R1cmUgYXMgdGhlIG9uZSBkZWZpbmVkIGJ5IGBgQ01ha2VgYAorICBjb25maWd1cmF0aW9uLiBUaGlzIGNvbnRyYWludCBkb2VzIG5vdCBhcHBseSBpZiBvbmx5IGBgSW50ZXJwcmV0ZXJgYAorICBjb21wb25lbnQgaXMgc3BlY2lmaWVkLgogCiBJbXBvcnRlZCBUYXJnZXRzCiBeXl5eXl5eXl5eXl5eXl5eCkBAIC00NiwxMiArNjAsMTIgQEAKICAgUHl0aG9uIDMgaW50ZXJwcmV0ZXIuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYEludGVycHJldGVyYGAgaXMgZm91bmQuCiBgYFB5dGhvbjM6OkNvbXBpbGVyYGAKICAgUHl0aG9uIDMgY29tcGlsZXIuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYENvbXBpbGVyYGAgaXMgZm91bmQuCi1gYFB5dGhvbjM6OlB5dGhvbmBgCi0gIFB5dGhvbiAzIGxpYnJhcnkgZm9yIFB5dGhvbiBlbWJlZGRpbmcuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudAotICBgYERldmVsb3BtZW50YGAgaXMgZm91bmQuCiBgYFB5dGhvbjM6Ok1vZHVsZWBgCiAgIFB5dGhvbiAzIGxpYnJhcnkgZm9yIFB5dGhvbiBtb2R1bGUuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudAotICBgYERldmVsb3BtZW50YGAgaXMgZm91bmQuCisgIGBgRGV2ZWxvcG1lbnQuTW9kdWxlYGAgaXMgZm91bmQuCitgYFB5dGhvbjM6OlB5dGhvbmBgCisgIFB5dGhvbiAzIGxpYnJhcnkgZm9yIFB5dGhvbiBlbWJlZGRpbmcuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudAorICBgYERldmVsb3BtZW50LkVtYmVkYGAgaXMgZm91bmQuCiBgYFB5dGhvbjM6Ok51bVB5YGAKICAgTnVtUHkgbGlicmFyeSBmb3IgUHl0aG9uIDMuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYE51bVB5YGAgaXMgZm91bmQuCiAKQEAgLTc0LDMzICs4OCw0MCBAQAogICAgICogQW5hY29uZGEKICAgICAqIENhbm9weQogICAgICogSXJvblB5dGhvbgorICAgICogUHlQeQogYGBQeXRob24zX1NURExJQmBgCiAgIFN0YW5kYXJkIHBsYXRmb3JtIGluZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPVRydWUpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1UcnVlKWBgCisgIG9yIGVsc2UgYGBzeXNjb25maWcuZ2V0X3BhdGgoJ3N0ZGxpYicpYGAuCiBgYFB5dGhvbjNfU1REQVJDSGBgCiAgIFN0YW5kYXJkIHBsYXRmb3JtIGRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdHN0ZGxpYicpYGAuCiBgYFB5dGhvbjNfU0lURUxJQmBgCiAgIFRoaXJkLXBhcnR5IHBsYXRmb3JtIGluZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPUZhbHNlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncHVyZWxpYicpYGAuCiBgYFB5dGhvbjNfU0lURUFSQ0hgYAogICBUaGlyZC1wYXJ0eSBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYC4KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGxpYicpYGAuCiBgYFB5dGhvbjNfU09BQklgYAogICBFeHRlbnNpb24gc3VmZml4IGZvciBtb2R1bGVzLgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX2ZsYWcoJ1NPQUJJJylgYCBvciBjb21wdXRlZCBmcm9tCi0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX2ZsYWcoJ0VYVF9TVUZGSVgnKWBgIG9yCi0gIGBgcHl0aG9uMy1jb25maWcgLS1leHRlbnNpb24tc3VmZml4YGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU09BQkknKWBgIG9yIGNvbXB1dGVkIGZyb20KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJylgYCBvcgorICBgYHB5dGhvbjMtY29uZmlnIC0tZXh0ZW5zaW9uLXN1ZmZpeGBgLiBJZiBwYWNrYWdlIGBgZGlzdHV0aWxzLnN5c2NvbmZpZ2BgIGlzCisgIG5vdCBhdmFpbGFibGUsIGBgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTT0FCSScpYGAgb3IKKyAgYGBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKWBgIGFyZSB1c2VkLgogYGBQeXRob24zX0NvbXBpbGVyX0ZPVU5EYGAKICAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDMgY29tcGlsZXIuCiBgYFB5dGhvbjNfQ09NUElMRVJgYApAQCAtMTA4LDggKzEyOSwxNCBAQAogYGBQeXRob24zX0NPTVBJTEVSX0lEYGAKICAgQSBzaG9ydCBzdHJpbmcgdW5pcXVlIHRvIHRoZSBjb21waWxlci4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6CiAgICAgKiBJcm9uUHl0aG9uCitgYFB5dGhvbjNfRE9UTkVUX0xBVU5DSEVSYGAKKyAgVGhlIGBgLk5ldGBgIGludGVycHJldGVyLiBPbmx5IHVzZWQgYnkgYGBJcm9uUHl0aG9uYGAgaW1wbGVtZW50YXRpb24uCiBgYFB5dGhvbjNfRGV2ZWxvcG1lbnRfRk9VTkRgYAogICBTeXN0ZW0gaGFzIHRoZSBQeXRob24gMyBkZXZlbG9wbWVudCBhcnRpZmFjdHMuCitgYFB5dGhvbjNfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDMgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzIGZvciBQeXRob24gbW9kdWxlLgorYGBQeXRob24zX0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDMgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzIGZvciBQeXRob24gZW1iZWRkaW5nLgogYGBQeXRob24zX0lOQ0xVREVfRElSU2BgCiAgIFRoZSBQeXRob24gMyBpbmNsdWRlIGRpcmVjdG9yaWVzLgogYGBQeXRob24zX0xJQlJBUklFU2BgCkBAIC0xMjYsNiArMTUzLDggQEAKICAgUHl0aG9uIDMgbWlub3IgdmVyc2lvbi4KIGBgUHl0aG9uM19WRVJTSU9OX1BBVENIYGAKICAgUHl0aG9uIDMgcGF0Y2ggdmVyc2lvbi4KK2BgUHl0aG9uM19QeVB5X1ZFUlNJT05gYAorICBQeXRob24gMyBQeVB5IHZlcnNpb24uCiBgYFB5dGhvbjNfTnVtUHlfRk9VTkRgYAogICBTeXN0ZW0gaGFzIHRoZSBOdW1QeS4KIGBgUHl0aG9uM19OdW1QeV9JTkNMVURFX0RJUlNgYApAQCAtMjM0LDggKzI2Myw5IEBACiAgICogYGBPTkxZYGA6IE9ubHkgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCB0byBsb29rLXVwIGZvciB0aGUKICAgICBpbnRlcnByZXRlci4KICAgKiBgYFNUQU5EQVJEYGA6IFRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIG5vdCB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQotICAgIGludGVycHJldGVyLiBJbiB0aGlzIGNhc2UsIHZhcmlhYmxlIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgKFdpbmRvd3MpCi0gICAgb3IgYGBDTUFLRV9GSU5EX0ZSQU1FV09SS2BgIChtYWNPUykgY2FuIGJlIHNldCB3aXRoIHZhbHVlIGBgTEFTVGBgIG9yCisgICAgaW50ZXJwcmV0ZXIgYnV0IGVudmlyb25tZW50IHZhcmlhYmxlIGBgUEFUSGBgIGlzIGFsd2F5cyBjb25zaWRlcmVkLgorICAgIEluIHRoaXMgY2FzZSwgdmFyaWFibGUgYGBQeXRob24zX0ZJTkRfUkVHSVNUUllgYCAoV2luZG93cykgb3IKKyAgICBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAgKG1hY09TKSBjYW4gYmUgc2V0IHdpdGggdmFsdWUgYGBMQVNUYGAgb3IKICAgICBgYE5FVkVSYGAgdG8gc2VsZWN0IHByZWZlcmFibHkgdGhlIGludGVycHJldGVyIGZyb20gdGhlIHZpcnR1YWwKICAgICBlbnZpcm9ubWVudC4KIApAQCAtMjQ1LDYgKzI3NSwzOSBAQAogICAgIHJlY29tbWVuZGVkIHRvIGFsc28gaW5jbHVkZSB0aGUgY29tcG9uZW50IGBgSW50ZXJwcmV0ZXJgYCB0byBnZXQgZXhwZWN0ZWQKICAgICByZXN1bHQuCiAKK2BgUHl0aG9uM19GSU5EX0lNUExFTUVOVEFUSU9OU2BgCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcywgaW4gYW4gb3JkZXJlZCBsaXN0LCB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucworICB3aGljaCB3aWxsIGJlIHNlYXJjaGVkLiBUaGUgYGBQeXRob24zX0ZJTkRfSU1QTEVNRU5UQVRJT05TYGAgdmFyaWFibGUgY2FuCisgIGhvbGQgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgKiBgYENQeXRob25gYDogdGhpcyBpcyB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24uIFZhcmlvdXMgcHJvZHVjdHMsIGxpa2UKKyAgICBgYEFuYWNvbmRhYGAgb3IgYGBBY3RpdmVQeXRob25gYCwgcmVseSBvbiB0aGlzIGltcGxlbWVudGF0aW9uLgorICAqIGBgSXJvblB5dGhvbmBgOiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZSB0aGUgYGBDU2hhcnBgYCBsYW5ndWFnZSBmb3IKKyAgICBgYC5ORVQgRnJhbWV3b3JrYGAgb24gdG9wIG9mIHRoZSBgRHluYW1pYyBMYW5ndWFnZSBSdW50aW1lYCAoYGBETFJgYCkuCisgICAgU2VlIGBJcm9uUHl0aG9uIDxodHRwOi8vaXJvbnB5dGhvbi5uZXQ+YF8uCisgICogYGBQeVB5YGA6IFRoaXMgaW1wbGVtZW50YXRpb24gdXNlIGBgUlB5dGhvbmBgIGxhbmd1YWdlIGFuZAorICAgIGBgUlB5dGhvbiB0cmFuc2xhdGlvbiB0b29sY2hhaW5gYCB0byBwcm9kdWNlIHRoZSBweXRob24gaW50ZXJwcmV0ZXIuCisgICAgU2VlIGBQeVB5IDxodHRwczovL3d3dy5weXB5Lm9yZz5gXy4KKworICBUaGUgZGVmYXVsdCB2YWx1ZSBpczoKKworICAqIFdpbmRvd3MgcGxhdGZvcm06IGBgQ1B5dGhvbmBgLCBgYElyb25QeXRob25gYAorICAqIE90aGVyIHBsYXRmb3JtczogYGBDUHl0aG9uYGAKKworICAuLiBub3RlOjoKKworICAgIFRoaXMgaGludCBoYXMgdGhlIGxvd2VzdCBwcmlvcml0eSBvZiBhbGwgaGludHMsIHNvIGV2ZW4gaWYsIGZvciBleGFtcGxlLAorICAgIHlvdSBzcGVjaWZ5IGBgSXJvblB5dGhvbmBgIGZpcnN0IGFuZCBgYENQeXRob25gYCBpbiBzZWNvbmQsIGEgcHl0aG9uCisgICAgcHJvZHVjdCBiYXNlZCBvbiBgYENQeXRob25gYCBjYW4gYmUgc2VsZWN0ZWQgYmVjYXVzZSwgZm9yIGV4YW1wbGUgd2l0aAorICAgIGBgUHl0aG9uM19GSU5EX1NUUkFURUdZPUxPQ0FUSU9OYGAsIGVhY2ggbG9jYXRpb24gd2lsbCBiZSBzZWFyY2ggZmlyc3QgZm9yCisgICAgYGBJcm9uUHl0aG9uYGAgYW5kIHNlY29uZCBmb3IgYGBDUHl0aG9uYGAuCisKKyAgLi4gbm90ZTo6CisKKyAgICBXaGVuIGBgSXJvblB5dGhvbmBgIGlzIHNwZWNpZmllZCwgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gYGBXaW5kb3dzYGAsIHRoZQorICAgIGBgLk5ldGBgIGludGVycHJldGVyIChpLmUuIGBgbW9ub2BgIGNvbW1hbmQpIGlzIGV4cGVjdGVkIHRvIGJlIGF2YWlsYWJsZQorICAgIHRocm91Z2ggdGhlIGBgUEFUSGBgIHZhcmlhYmxlLgorCiBBcnRpZmFjdHMgU3BlY2lmaWNhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMjU3LDYgKzMyMCw5IEBACiBgYFB5dGhvbjNfQ09NUElMRVJgYAogICBUaGUgcGF0aCB0byB0aGUgY29tcGlsZXIuCiAKK2BgUHl0aG9uM19ET1RORVRfTEFVTkNIRVJgYAorICBUaGUgYGAuTmV0YGAgaW50ZXJwcmV0ZXIuIE9ubHkgdXNlZCBieSBgYElyb25QeXRob25gYCBpbXBsZW1lbnRhdGlvbi4KKwogYGBQeXRob24zX0xJQlJBUllgYAogICBUaGUgcGF0aCB0byB0aGUgbGlicmFyeS4gSXQgd2lsbCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlCiAgIHZhcmlhYmxlcyBgYFB5dGhvbjNfTElCUkFSSUVTYGAsIGBgUHl0aG9uM19MSUJSQVlfRElSU2BgIGFuZApAQCAtMjgzLDYgKzM0OSwyMiBAQAogICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0bwogICBlbnN1cmUgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YXJpb3VzIGFydGlmYWN0cy4KIAorQnkgZGVmYXVsdCwgdGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FsbHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9mIGEKK3Byb2plY3Qgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzIHdoaWxlIHByb3ZpZGluZyBjb3JyZWN0CithbmQgY29uc2lzdGVudCByZXN1bHRzIGZvciBlYWNoIGNhbGwuIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYGBDTWFrZWBgIGNhY2hlCitpcyBub3QgdXNlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5IHdoaWNoIGNhbiBiZSBwcm9ibGVtYXRpYyBmb3IgaW50ZXJhY3RpdmUKK3NwZWNpZmljYXRpb24uIFNvLCB0byBlbmFibGUgYWxzbyBpbnRlcmFjdGl2ZSBzcGVjaWZpY2F0aW9uLCBtb2R1bGUgYmVoYXZpb3IKK2NhbiBiZSBjb250cm9sZWQgd2l0aCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOgorCitgYFB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFYGAKKyAgU2VsZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS4gVGhpcyBpcyBhIGJvb2xlYW4gdmFyaWFibGU6CisKKyAgKiBJZiBzZXQgdG8gYGBUUlVFYGA6IENyZWF0ZSBDTWFrZSBjYWNoZSBlbnRyaWVzIGZvciB0aGUgYWJvdmUgYXJ0aWZhY3QKKyAgICBzcGVjaWZpY2F0aW9uIHZhcmlhYmxlcyBzbyB0aGF0IHVzZXJzIGNhbiBlZGl0IHRoZW0gaW50ZXJhY3RpdmVseS4KKyAgICBUaGlzIGRpc2FibGVzIHN1cHBvcnQgZm9yIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50IHJlcXVpcmVtZW50cy4KKyAgKiBJZiBzZXQgdG8gYGBGQUxTRWBgIG9yIHVuZGVmaW5lZDogRW5hYmxlIG11bHRpcGxlIHZlcnNpb24vY29tcG9uZW50CisgICAgcmVxdWlyZW1lbnRzLgorCiBDb21tYW5kcwogXl5eXl5eXl4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUnVieS5jbWFrZSBiL01vZHVsZXMvRmluZFJ1YnkuY21ha2UKaW5kZXggN2UwMWZiYy4uMWJkZWU2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUnVieS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRSdWJ5LmNtYWtlCkBAIC04LDI4OCArOCw1MDUgQEAKIEZpbmQgUnVieQogCiBUaGlzIG1vZHVsZSBmaW5kcyBpZiBSdWJ5IGlzIGluc3RhbGxlZCBhbmQgZGV0ZXJtaW5lcyB3aGVyZSB0aGUKLWluY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmllcyBhcmUuICBSdWJ5IDEuOCwgMS45LCAyLjAgYW5kIDIuMSBhcmUKK2luY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmllcyBhcmUuICBSdWJ5IDEuOCB0aHJvdWdoIDIuNyBhcmUKIHN1cHBvcnRlZC4KIAogVGhlIG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiBvZiBSdWJ5IGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCi1zdGFuZGFyZCBzeW50YXgsIGUuZy4gIGZpbmRfcGFja2FnZShSdWJ5IDEuOCkKK3N0YW5kYXJkIHN5bnRheCwgZS5nLgogCi1JdCBhbHNvIGRldGVybWluZXMgd2hhdCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBpcy4gIFRoaXMgY29kZSBzZXRzCi10aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi1gYFJVQllfRVhFQ1VUQUJMRWBgCisgIGZpbmRfcGFja2FnZShSdWJ5IDIuNS4xIEVYQUNUIFJFUVVJUkVEKQorICAjIE9SCisgIGZpbmRfcGFja2FnZShSdWJ5IDIuNCkKKworSXQgYWxzbyBkZXRlcm1pbmVzIHdoYXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgaXMuCisKK1ZpcnR1YWwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUlZNIGFyZSBoYW5kbGVkIGFzIHdlbGwsIGJ5IHBhc3NpbmcKK3RoZSBhcmd1bWVudCBgYFJ1YnlfRklORF9WSVJUVUFMRU5WYGAKKworUmVzdWx0IFZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSB3aWxsIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB5b3VyIHByb2plY3Q6CisKK2BgUnVieV9GT1VORGBgCisgIHNldCB0byB0cnVlIGlmIHJ1Ynkgd2FzIGZvdW5kIHN1Y2Nlc3NmdWxseQorYGBSdWJ5X0VYRUNVVEFCTEVgYAogICBmdWxsIHBhdGggdG8gdGhlIHJ1YnkgYmluYXJ5Ci1gYFJVQllfSU5DTFVERV9ESVJTYGAKK2BgUnVieV9JTkNMVURFX0RJUlNgYAogICBpbmNsdWRlIGRpcnMgdG8gYmUgdXNlZCB3aGVuIHVzaW5nIHRoZSBydWJ5IGxpYnJhcnkKLWBgUlVCWV9MSUJSQVJZYGAKLSAgZnVsbCBwYXRoIHRvIHRoZSBydWJ5IGxpYnJhcnkKLWBgUlVCWV9WRVJTSU9OYGAKK2BgUnVieV9MSUJSQVJJRVNgYAorICBsaWJyYXJpZXMgbmVlZGVkIHRvIHVzZSBydWJ5IGZyb20gQy4KK2BgUnVieV9WRVJTSU9OYGAKICAgdGhlIHZlcnNpb24gb2YgcnVieSB3aGljaCB3YXMgZm91bmQsIGUuZy4gIjEuOC43IgotYGBSVUJZX0ZPVU5EYGAKLSAgc2V0IHRvIHRydWUgaWYgcnVieSB3cyBmb3VuZCBzdWNjZXNzZnVsbHkKK2BgUnVieV9WRVJTSU9OX01BSk9SYGAKKyAgUnVieSBtYWpvciB2ZXJzaW9uLgorYGBSdWJ5X1ZFUlNJT05fTUlOT1JgYAorICBSdWJ5IG1pbm9yIHZlcnNpb24uCitgYFJ1YnlfVkVSU0lPTl9QQVRDSGBgCisgIFJ1YnkgcGF0Y2ggdmVyc2lvbi4KKwogCiBBbHNvOgogCi1gYFJVQllfSU5DTFVERV9QQVRIYGAKLSAgc2FtZSBhcyBSVUJZX0lOQ0xVREVfRElSUywgb25seSBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBkb24ndCB1c2UgaXQKK2BgUnVieV9JTkNMVURFX1BBVEhgYAorICBzYW1lIGFzIFJ1YnlfSU5DTFVERV9ESVJTLCBvbmx5IHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGRvbid0IHVzZSBpdAorCitIaW50cworXl5eXl4KKworYGBSdWJ5X1JPT1RfRElSYGAKKyAgRGVmaW5lIHRoZSByb290IGRpcmVjdG9yeSBvZiBhIFJ1YnkgaW5zdGFsbGF0aW9uLgorCitgYFJ1YnlfRklORF9WSVJUVUFMRU5WYGAKKyAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSBoYW5kbGluZyBvZiB2aXJ0dWFsIGVudmlyb25tZW50cyBtYW5hZ2VkIGJ5CisgIGBgcnZtYGAuIEl0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudAorICBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgcnZtYGAgc2NyaXB0IGhhcyBiZWVuIGV2YWx1YXRlZCBvciBhdCBsZWFzdCB0aGUKKyAgYGBNWV9SVUJZX0hPTUVgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQpLgorICBUaGUgYGBSdWJ5X0ZJTkRfVklSVFVBTEVOVmBgIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gZW1wdHkgb3IKKyAgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgKiBgYEZJUlNUYGA6IFRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIHVzZWQgYmVmb3JlIGFueSBvdGhlciBzdGFuZGFyZAorICAgIHBhdGhzIHRvIGxvb2stdXAgZm9yIHRoZSBpbnRlcnByZXRlci4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKyAgKiBgYE9OTFlgYDogT25seSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpcyB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQorICAgIGludGVycHJldGVyLgorICAqIGBgU1RBTkRBUkRgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgbm90IHVzZWQgdG8gbG9vay11cCBmb3IgdGhlCisgICAgaW50ZXJwcmV0ZXIgKGFzc3VtaW5nIGl0IGlzbid0IHN0aWxsIGluIHRoZSBQQVRILi4uKQorCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi0jICAgUlVCWV9BUkNIRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAImFyY2hkaXIiQDo+QCknYAotIyAgIFJVQllfU0lURUFSQ0hESVI9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAic2l0ZWFyY2hkaXIiQDo+QCknYAotIyAgIFJVQllfU0lURURJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJzaXRlbGliZGlyIkA6PkApJ2AKLSMgICBSVUJZX0xJQkRJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJsaWJkaXIiQDo+QCknYAotIyAgIFJVQllfTElCUlVCWUFSRz1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJMSUJSVUJZQVJHX1NIQVJFRCJAOj5AKSdgCisjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisjIERlZmluZSBjYW1lbCBjYXNlIHZlcnNpb25zIG9mIGlucHV0IHZhcmlhYmxlcworZm9yZWFjaChVUFBFUgorICAgIFJVQllfRVhFQ1VUQUJMRQorICAgIFJVQllfTElCUkFSWQorICAgIFJVQllfSU5DTFVERV9ESVIKKyAgICBSVUJZX0NPTkZJR19JTkNMVURFX0RJUgorICAgICkKKyAgICBpZiAoREVGSU5FRCAke1VQUEVSfSkKKyAgICAgIHN0cmluZyhSRVBMQUNFICJSVUJZXyIgIlJ1YnlfIiBDYW1lbCAke1VQUEVSfSkKKyAgICAgICAgaWYgKE5PVCBERUZJTkVEICR7Q2FtZWx9KQorICAgICAgICAgICAgc2V0KCR7Q2FtZWx9ICR7JHtVUFBFUn19KQorICAgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKKyMgICBSdWJ5X0FSQ0hESVI9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAiYXJjaGRpciJAOj5AKSdgCisjICAgUnVieV9TSVRFQVJDSERJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJzaXRlYXJjaGRpciJAOj5AKSdgCisjICAgUnVieV9TSVRFRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAInNpdGVsaWJkaXIiQDo+QCknYAorIyAgIFJ1YnlfTElCRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAImxpYmRpciJAOj5AKSdgCisjICAgUnVieV9MSUJSVUJZQVJHPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAIkxJQlJVQllBUkdfU0hBUkVEIkA6PkApJ2AKIAogIyB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGdldCBkZWJ1ZyBvdXRwdXQgZm9yIHRoaXMgZmlsZQotIyBzZXQoX1JVQllfREVCVUdfT1VUUFVUIFRSVUUpCisjIHNldChfUnVieV9ERUJVR19PVVRQVVQgVFJVRSkKIAogIyBEZXRlcm1pbmUgdGhlIGxpc3Qgb2YgcG9zc2libGUgbmFtZXMgb2YgdGhlIHJ1YnkgZXhlY3V0YWJsZSBkZXBlbmRpbmcKICMgb24gd2hpY2ggdmVyc2lvbiBvZiBydWJ5IGlzIHJlcXVpcmVkCi1zZXQoX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5KQorc2V0KF9SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVMgcnVieSkKIAotIyBpZiAxLjkgaXMgcmVxdWlyZWQsIGRvbid0IGxvb2sgZm9yIHJ1YnkxOCBhbmQgcnVieTEuOCwgZGVmYXVsdCB0byB2ZXJzaW9uIDEuOAotaWYoREVGSU5FRCBSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUiBBTkQgREVGSU5FRCBSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUikKLSAgc2V0KFJ1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UICIke1J1YnlfRklORF9WRVJTSU9OX01BSk9SfSR7UlVCWV9GSU5EX1ZFUlNJT05fTUlOT1J9IikKLSAgIyB3ZSBjYW4ndCBjb25zdHJ1Y3QgdGhhdCBpZiBvbmx5IG1ham9yIHZlcnNpb24gaXMgZ2l2ZW4KLSAgc2V0KF9SVUJZX1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVMKLSAgICBydWJ5JHtSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUn0uJHtSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUn0KLSAgICBydWJ5JHtSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUn0ke1J1YnlfRklORF9WRVJTSU9OX01JTk9SfQotICAgICR7X1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FU30pCi1lbHNlKCkKLSAgc2V0KFJ1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UICIxOCIpCisjIElmIG5vdCBzcGVjaWZpZWQsIGFsbG93IGV2ZXJ5dGhpbmcgYXMgZmFyIGJhY2sgYXMgMS44LjAKK2lmKE5PVCBERUZJTkVEIFJ1YnlfRklORF9WRVJTSU9OX01BSk9SKQorICBzZXQoUnVieV9GSU5EX1ZFUlNJT04gIjEuOC4wIikKKyAgc2V0KFJ1YnlfRklORF9WRVJTSU9OX01BSk9SIDEpCisgIHNldChSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUiA4KQorICBzZXQoUnVieV9GSU5EX1ZFUlNJT05fUEFUQ0ggMCkKIGVuZGlmKCkKIAotaWYoTk9UIFJ1YnlfRklORF9WRVJTSU9OX0VYQUNUKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjQgcnVieTI0KQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjMgcnVieTIzKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjIgcnVieTIyKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjEgcnVieTIxKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjAgcnVieTIwKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkxLjkgcnVieTE5KQoraWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICBtZXNzYWdlKCJSdWJ5X0ZJTkRfVkVSU0lPTj0ke1J1YnlfRklORF9WRVJTSU9OfSIpCisgIG1lc3NhZ2UoIlJ1YnlfRklORF9WRVJTSU9OX01BSk9SPSR7UnVieV9GSU5EX1ZFUlNJT05fTUFKT1J9IikKKyAgbWVzc2FnZSgiUnVieV9GSU5EX1ZFUlNJT05fTUlOT1I9JHtSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUn0iKQorICBtZXNzYWdlKCJSdWJ5X0ZJTkRfVkVSU0lPTl9QQVRDSD0ke1J1YnlfRklORF9WRVJTSU9OX1BBVENIfSIpCitlbmRpZigpCiAKLSAgIyBpZiB3ZSB3YW50IGEgdmVyc2lvbiBiZWxvdyAxLjksIGFsc28gbG9vayBmb3IgcnVieSAxLjgKLSAgaWYoIiR7UnVieV9GSU5EX1ZFUlNJT05fU0hPUlRfTk9ET1R9IiBWRVJTSU9OX0xFU1MgIjE5IikKLSAgICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkxLjggcnVieTE4KQorc2V0KFJ1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UICIke1J1YnlfRklORF9WRVJTSU9OX01BSk9SfSR7UnVieV9GSU5EX1ZFUlNJT05fTUlOT1J9IikKKworIyBTZXQgbmFtZSBvZiBwb3NzaWJsZSBleGVjdXRhYmxlcywgaWdub3JpbmcgdGhlIG1pbm9yCisjIEVnOgorIyAyLjEuMSA9PiBmcm9tIHJ1YnkyNyB0byBydWJ5MjEgaW5jbHVkZWQKKyMgMi4xICAgPT4gZnJvbSBydWJ5MjcgdG8gcnVieTIxIGluY2x1ZGVkCisjIDIgICAgID0+IGZyb20gcnVieTI2IHRvIHJ1YnkyMCBpbmNsdWRlZAorIyBlbXB0eSA9PiBmcm9tIHJ1YnkyNyB0byBydWJ5MTggaW5jbHVkZWQKK2lmKE5PVCBSdWJ5X0ZJTkRfVkVSU0lPTl9FWEFDVCkKKworICBmb3JlYWNoKF9ydWJ5X3ZlcnNpb24gUkFOR0UgMjcgMTggLTEpCisgICAgc3RyaW5nKFNVQlNUUklORyAiJHtfcnVieV92ZXJzaW9ufSIgMCAxIF9ydWJ5X21ham9yX3ZlcnNpb24pCisgICAgc3RyaW5nKFNVQlNUUklORyAiJHtfcnVieV92ZXJzaW9ufSIgMSAxIF9ydWJ5X21pbm9yX3ZlcnNpb24pCisKKyAgICBpZihOT1QgIiR7X3J1YnlfbWFqb3JfdmVyc2lvbn0ke19ydWJ5X21pbm9yX3ZlcnNpb259IiBWRVJTSU9OX0xFU1MgJHtSdWJ5X0ZJTkRfVkVSU0lPTl9TSE9SVF9OT0RPVH0pCisgICAgICAjIEFwcGVuZCBib3RoIHJ1YnlYLlkgYW5kIHJ1YnlYWSAoZWc6IHJ1YnkyLjcgcnVieTI3KQorICAgICAgbGlzdChBUFBFTkQgX1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5JHtfcnVieV9tYWpvcl92ZXJzaW9ufS4ke19ydWJ5X21pbm9yX3ZlcnNpb259IHJ1Ynkke19ydWJ5X21ham9yX3ZlcnNpb259JHtfcnVieV9taW5vcl92ZXJzaW9ufSkKKyAgICBlbHNlKCkKKyAgICAgIGJyZWFrKCkKKyAgICBlbmRpZigpCisKKyAgZW5kZm9yZWFjaCgpCisKKyAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTKQorZW5kaWYoKQorCisjIHZpcnR1YWwgZW52aXJvbm1lbnRzIGhhbmRsaW5nIChlZyBSVk0pCitpZiAoREVGSU5FRCBFTlZ7TVlfUlVCWV9IT01FfSkKKyAgaWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICAgIG1lc3NhZ2UoIk15IHJ1YnkgaG9tZSBpcyBkZWZpbmVkOiAkRU5We01ZX1JVQllfSE9NRX0iKQogICBlbmRpZigpCiAKLSAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTKQorICBpZiAoREVGSU5FRCBSdWJ5X0ZJTkRfVklSVFVBTEVOVikKKyAgICBpZiAoTk9UIFJ1YnlfRklORF9WSVJUVUFMRU5WIE1BVENIRVMgIl4oRklSU1R8T05MWXxTVEFOREFSRCkkIikKKyAgICAgIG1lc3NhZ2UgKEFVVEhPUl9XQVJOSU5HICJGaW5kUnVieTogJHtSdWJ5X0ZJTkRfVklSVFVBTEVOVn06IGludmFsaWQgdmFsdWUgZm9yICdSdWJ5X0ZJTkRfVklSVFVBTEVOVicuICdGSVJTVCcsICdPTkxZJyBvciAnU1RBTkRBUkQnIGV4cGVjdGVkLiAnRklSU1QnIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICBzZXQgKF9SdWJ5X0ZJTkRfVklSVFVBTEVOViAiRklSU1QiKQorICAgIGVsc2UoKQorICAgICAgc2V0IChfUnVieV9GSU5EX1ZJUlRVQUxFTlYgJHtSdWJ5X0ZJTkRfVklSVFVBTEVOVn0pCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBzZXQgKF9SdWJ5X0ZJTkRfVklSVFVBTEVOViBGSVJTVCkKKyAgZW5kaWYoKQorZWxzZSgpCisgIGlmIChERUZJTkVEIFJ1YnlfRklORF9WSVJUVUFMRU5WKQorICAgIG1lc3NhZ2UoIkVudmlyb25tZW50IHZhcmlhYmxlIE1ZX1JVQllfSE9NRSBpc24ndCBzZXQsIGRlZmF1bHRpbmcgYmFjayB0byBSdWJ5X0ZJTkRfVklSVFVBTEVOVj1TVEFOREFSRCIpCisgIGVuZGlmKCkKKyAgc2V0IChfUnVieV9GSU5EX1ZJUlRVQUxFTlYgU1RBTkRBUkQpCiBlbmRpZigpCiAKLWZpbmRfcHJvZ3JhbShSVUJZX0VYRUNVVEFCTEUgTkFNRVMgJHtfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfSkKK2lmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgbWVzc2FnZSgiX1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUz0ke19SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVN9IikKKyAgbWVzc2FnZSgiX1J1YnlfRklORF9WSVJUVUFMRU5WPSR7X1J1YnlfRklORF9WSVJUVUFMRU5WfSIpCitlbmRpZigpCiAKLWlmKFJVQllfRVhFQ1VUQUJMRSAgQU5EIE5PVCAgUlVCWV9WRVJTSU9OX01BSk9SKQorZnVuY3Rpb24gKF9SVUJZX1ZBTElEQVRFX0lOVEVSUFJFVEVSKQorICBpZiAoTk9UIFJ1YnlfRVhFQ1VUQUJMRSkKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDAgX1JWSSAiRVhBQ1Q7Q0hFQ0tfRVhJU1RTIiAiIiAiIikKKyAgaWYgKF9SVklfVU5QQVJTRURfQVJHVU1FTlRTKQorICAgIHNldCAoZXhwZWN0ZWRfdmVyc2lvbiAke19SVklfVU5QQVJTRURfQVJHVU1FTlRTfSkKKyAgZWxzZSgpCisgICAgdW5zZXQgKGV4cGVjdGVkX3ZlcnNpb24pCisgIGVuZGlmKCkKKworICBpZiAoX1JWSV9DSEVDS19FWElTVFMgQU5EIE5PVCBFWElTVFMgIiR7UnVieV9FWEVDVVRBQkxFfSIpCisgICAgIyBpbnRlcnByZXRlciBkb2VzIG5vdCBleGlzdCBhbnltb3JlCisgICAgc2V0IChfUnVieV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IGZpbmQgdGhlIGludGVycHJldGVyIFwiJHtSdWJ5X0VYRUNVVEFCTEV9XCIiKQorICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgUnVieV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICJSdWJ5X0VYRUNVVEFCTEUtTk9URk9VTkQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICAjIENoZWNrIHRoZSB2ZXJzaW9uIGl0IHJldHVybnMKKyAgIyBleGVjdXRhYmxlIGZvdW5kIG11c3QgaGF2ZSBhIHNwZWNpZmljIHZlcnNpb24KKyAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke1J1YnlfRVhFQ1VUQUJMRX0iIC1lICJwdXRzIFJVQllfVkVSU0lPTiIKKyAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorICBpZiAocmVzdWx0IE9SIChfUlZJX0VYQUNUIEFORCBOT1QgdmVyc2lvbiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pIE9SICh2ZXJzaW9uIFZFUlNJT05fTEVTUyBleHBlY3RlZF92ZXJzaW9uKSkKKyAgICAjIGludGVycHJldGVyIG5vdCB1c2FibGUgb3IgaGFzIHdyb25nIG1ham9yIHZlcnNpb24KKyAgICBpZiAocmVzdWx0KQorICAgICAgc2V0IChfUnVieV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHVzZSB0aGUgaW50ZXJwcmV0ZXIgXCIke1J1YnlfRVhFQ1VUQUJMRX1cIiIpCisgICAgZWxzZSgpCisgICAgICBzZXQgKF9SdWJ5X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJXcm9uZyBtYWpvciB2ZXJzaW9uIGZvciB0aGUgaW50ZXJwcmV0ZXIgXCIke1J1YnlfRVhFQ1VUQUJMRX1cIiIpCisgICAgZW5kaWYoKQorICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgUnVieV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICJSdWJ5X0VYRUNVVEFCTEUtTk9URk9VTkQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworZW5kZnVuY3Rpb24oKQorCit3aGlsZSgxKQorICAjIFZpcnR1YWwgZW52aXJvbm1lbnRzIGhhbmRsaW5nCisgIGlmKF9SdWJ5X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFkpJCIpCisgICAgaWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICAgICAgbWVzc2FnZSgiSW5zaWRlIE1hdGNoZXMiKQorICAgIGVuZGlmKCkKKyAgICBmaW5kX3Byb2dyYW0gKFJ1YnlfRVhFQ1VUQUJMRQorICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfQorICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgUEFUSFMgRU5WIE1ZX1JVQllfSE9NRQorICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4gU2NyaXB0cworICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAorICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorCisgICAgaWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICAgICAgbWVzc2FnZSgiUnVieV9FWEVDVVRBQkxFPSR7UnVieV9FWEVDVVRBQkxFfSIpCisgICAgZW5kaWYoKQorCisgICAgX1JVQllfVkFMSURBVEVfSU5URVJQUkVURVIgKCR7UnVieV9GSU5EX1ZFUlNJT059fSkKKyAgICBpZihSdWJ5X0VYRUNVVEFCTEUpCisgICAgICBicmVhaygpCisgICAgZW5kaWYoKQorICAgIGlmKE5PVCBfUnVieV9GSU5EX1ZJUlRVQUxFTlYgU1RSRVFVQUwgIk9OTFkiKQorICAgICAgYnJlYWsoKQorICAgIGVuZGlmKCkKKyAgZWxzZWlmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgICBtZXNzYWdlKCJfUnVieV9GSU5EX1ZJUlRVQUxFTlYgZG9lc24ndCBtYXRjaDogJHtfUnVieV9GSU5EX1ZJUlRVQUxFTlZ9IikKKyAgZW5kaWYoKQorCisgICMgdHJ5IHVzaW5nIHN0YW5kYXJkIHBhdGhzCisgIGZpbmRfcHJvZ3JhbSAoUnVieV9FWEVDVVRBQkxFCisgICAgICAgICAgICAgICAgTkFNRVMgJHtfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfQorICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIpCisgIF9SVUJZX1ZBTElEQVRFX0lOVEVSUFJFVEVSICgke1J1YnlfRklORF9WRVJTSU9OfSkKKyAgaWYgKFJ1YnlfRVhFQ1VUQUJMRSkKKyAgICBicmVhaygpCisgIGVuZGlmKCkKKworICBicmVhaygpCitlbmR3aGlsZSgpCisKK2lmKFJ1YnlfRVhFQ1VUQUJMRSBBTkQgTk9UIFJ1YnlfVkVSU0lPTl9NQUpPUikKICAgZnVuY3Rpb24oX1JVQllfQ09ORklHX1ZBUiBSQlZBUiBPVVRWQVIpCi0gICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtSVUJZX0VYRUNVVEFCTEV9IC1yIHJiY29uZmlnIC1lICJwcmludCBSYkNvbmZpZzo6Q09ORklHWycke1JCVkFSfSddIgotICAgICAgUkVTVUxUX1ZBUklBQkxFIF9SVUJZX1NVQ0NFU1MKLSAgICAgIE9VVFBVVF9WQVJJQUJMRSBfUlVCWV9PVVRQVVQKKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1J1YnlfRVhFQ1VUQUJMRX0gLXIgcmJjb25maWcgLWUgInByaW50IFJiQ29uZmlnOjpDT05GSUdbJyR7UkJWQVJ9J10iCisgICAgICBSRVNVTFRfVkFSSUFCTEUgX1J1YnlfU1VDQ0VTUworICAgICAgT1VUUFVUX1ZBUklBQkxFIF9SdWJ5X09VVFBVVAogICAgICAgRVJST1JfUVVJRVQpCi0gICAgaWYoX1JVQllfU1VDQ0VTUyBPUiBfUlVCWV9PVVRQVVQgU1RSRVFVQUwgIiIpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1JVQllfRVhFQ1VUQUJMRX0gLXIgcmJjb25maWcgLWUgInByaW50IENvbmZpZzo6Q09ORklHWycke1JCVkFSfSddIgotICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX1JVQllfU1VDQ0VTUwotICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX1JVQllfT1VUUFVUCisgICAgaWYoX1J1YnlfU1VDQ0VTUyBPUiBfUnVieV9PVVRQVVQgU1RSRVFVQUwgIiIpCisgICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1J1YnlfRVhFQ1VUQUJMRX0gLXIgcmJjb25maWcgLWUgInByaW50IENvbmZpZzo6Q09ORklHWycke1JCVkFSfSddIgorICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX1J1YnlfU1VDQ0VTUworICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX1J1YnlfT1VUUFVUCiAgICAgICAgIEVSUk9SX1FVSUVUKQogICAgIGVuZGlmKCkKLSAgICBzZXQoJHtPVVRWQVJ9ICIke19SVUJZX09VVFBVVH0iIFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoJHtPVVRWQVJ9ICIke19SdWJ5X09VVFBVVH0iIFBBUkVOVF9TQ09QRSkKICAgZW5kZnVuY3Rpb24oKQogCiAKICAgIyBxdWVyeSB0aGUgcnVieSB2ZXJzaW9uCi0gIF9SVUJZX0NPTkZJR19WQVIoIk1BSk9SIiBSVUJZX1ZFUlNJT05fTUFKT1IpCi0gIF9SVUJZX0NPTkZJR19WQVIoIk1JTk9SIiBSVUJZX1ZFUlNJT05fTUlOT1IpCi0gIF9SVUJZX0NPTkZJR19WQVIoIlRFRU5ZIiBSVUJZX1ZFUlNJT05fUEFUQ0gpCisgIF9SVUJZX0NPTkZJR19WQVIoIk1BSk9SIiBSdWJ5X1ZFUlNJT05fTUFKT1IpCisgIF9SVUJZX0NPTkZJR19WQVIoIk1JTk9SIiBSdWJ5X1ZFUlNJT05fTUlOT1IpCisgIF9SVUJZX0NPTkZJR19WQVIoIlRFRU5ZIiBSdWJ5X1ZFUlNJT05fUEFUQ0gpCiAKICAgIyBxdWVyeSB0aGUgZGlmZmVyZW50IGRpcmVjdG9yaWVzCi0gIF9SVUJZX0NPTkZJR19WQVIoImFyY2hkaXIiIFJVQllfQVJDSF9ESVIpCi0gIF9SVUJZX0NPTkZJR19WQVIoImFyY2giIFJVQllfQVJDSCkKLSAgX1JVQllfQ09ORklHX1ZBUigicnVieWhkcmRpciIgUlVCWV9IRFJfRElSKQotICBfUlVCWV9DT05GSUdfVkFSKCJydWJ5YXJjaGhkcmRpciIgUlVCWV9BUkNISERSX0RJUikKLSAgX1JVQllfQ09ORklHX1ZBUigibGliZGlyIiBSVUJZX1BPU1NJQkxFX0xJQl9ESVIpCi0gIF9SVUJZX0NPTkZJR19WQVIoInJ1YnlsaWJkaXIiIFJVQllfUlVCWV9MSUJfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJhcmNoZGlyIiBSdWJ5X0FSQ0hfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJhcmNoIiBSdWJ5X0FSQ0gpCisgIF9SVUJZX0NPTkZJR19WQVIoInJ1YnloZHJkaXIiIFJ1YnlfSERSX0RJUikKKyAgX1JVQllfQ09ORklHX1ZBUigicnVieWFyY2hoZHJkaXIiIFJ1YnlfQVJDSEhEUl9ESVIpCisgIF9SVUJZX0NPTkZJR19WQVIoImxpYmRpciIgUnVieV9QT1NTSUJMRV9MSUJfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJydWJ5bGliZGlyIiBSdWJ5X1JVQllfTElCX0RJUikKIAogICAjIHNpdGVfcnVieQotICBfUlVCWV9DT05GSUdfVkFSKCJzaXRlYXJjaGRpciIgUlVCWV9TSVRFQVJDSF9ESVIpCi0gIF9SVUJZX0NPTkZJR19WQVIoInNpdGVsaWJkaXIiIFJVQllfU0lURUxJQl9ESVIpCisgIF9SVUJZX0NPTkZJR19WQVIoInNpdGVhcmNoZGlyIiBSdWJ5X1NJVEVBUkNIX0RJUikKKyAgX1JVQllfQ09ORklHX1ZBUigic2l0ZWxpYmRpciIgUnVieV9TSVRFTElCX0RJUikKIAogICAjIHZlbmRvcl9ydWJ5IGF2YWlsYWJsZSA/Ci0gIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7UlVCWV9FWEVDVVRBQkxFfSAtciB2ZW5kb3Itc3BlY2lmaWMgLWUgInByaW50ICd0cnVlJyIKLSAgICBPVVRQVVRfVkFSSUFCTEUgUlVCWV9IQVNfVkVORE9SX1JVQlkgIEVSUk9SX1FVSUVUKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1J1YnlfRVhFQ1VUQUJMRX0gLXIgdmVuZG9yLXNwZWNpZmljIC1lICJwcmludCAndHJ1ZSciCisgICAgT1VUUFVUX1ZBUklBQkxFIFJ1YnlfSEFTX1ZFTkRPUl9SVUJZICBFUlJPUl9RVUlFVCkKIAotICBpZihSVUJZX0hBU19WRU5ET1JfUlVCWSkKLSAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JsaWJkaXIiIFJVQllfVkVORE9STElCX0RJUikKLSAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JhcmNoZGlyIiBSVUJZX1ZFTkRPUkFSQ0hfRElSKQorICBpZihSdWJ5X0hBU19WRU5ET1JfUlVCWSkKKyAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JsaWJkaXIiIFJ1YnlfVkVORE9STElCX0RJUikKKyAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JhcmNoZGlyIiBSdWJ5X1ZFTkRPUkFSQ0hfRElSKQogICBlbmRpZigpCiAKICAgIyBzYXZlIHRoZSByZXN1bHRzIGluIHRoZSBjYWNoZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHJ1biBydWJ5IHRoZSBuZXh0IHRpbWUgYWdhaW4KLSAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAgICAke1JVQllfVkVSU0lPTl9NQUpPUn0gICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgbWFqb3IgdmVyc2lvbiIgRk9SQ0UpCi0gIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgICAgJHtSVUJZX1ZFUlNJT05fTUlOT1J9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IG1pbm9yIHZlcnNpb24iIEZPUkNFKQotICBzZXQoUlVCWV9WRVJTSU9OX1BBVENIICAgICR7UlVCWV9WRVJTSU9OX1BBVENIfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBwYXRjaCB2ZXJzaW9uIiBGT1JDRSkKLSAgc2V0KFJVQllfQVJDSF9ESVIgICAgICAgICAke1JVQllfQVJDSF9ESVJ9ICAgICAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgYXJjaCBkaXIiIEZPUkNFKQotICBzZXQoUlVCWV9IRFJfRElSICAgICAgICAgICR7UlVCWV9IRFJfRElSfSAgICAgICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBoZWFkZXIgZGlyICgxLjkrKSIgRk9SQ0UpCi0gIHNldChSVUJZX0FSQ0hIRFJfRElSICAgICAgJHtSVUJZX0FSQ0hIRFJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IGFyY2ggaGVhZGVyIGRpciAoMi4wKykiIEZPUkNFKQotICBzZXQoUlVCWV9QT1NTSUJMRV9MSUJfRElSICR7UlVCWV9QT1NTSUJMRV9MSUJfRElSfSBDQUNIRSBQQVRIICJUaGUgUnVieSBsaWIgZGlyIiBGT1JDRSkKLSAgc2V0KFJVQllfUlVCWV9MSUJfRElSICAgICAke1JVQllfUlVCWV9MSUJfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgcnVieS1saWIgZGlyIiBGT1JDRSkKLSAgc2V0KFJVQllfU0lURUFSQ0hfRElSICAgICAke1JVQllfU0lURUFSQ0hfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1Ynkgc2l0ZSBhcmNoIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX1NJVEVMSUJfRElSICAgICAgJHtSVUJZX1NJVEVMSUJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHNpdGUgbGliIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX0hBU19WRU5ET1JfUlVCWSAgJHtSVUJZX0hBU19WRU5ET1JfUlVCWX0gIENBQ0hFIEJPT0wgIlZlbmRvciBSdWJ5IGlzIGF2YWlsYWJsZSIgRk9SQ0UpCi0gIHNldChSVUJZX1ZFTkRPUkFSQ0hfRElSICAgJHtSVUJZX1ZFTkRPUkFSQ0hfRElSfSAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBhcmNoIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX1ZFTkRPUkxJQl9ESVIgICAgJHtSVUJZX1ZFTkRPUkxJQl9ESVJ9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBsaWIgZGlyIiBGT1JDRSkKKyAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAgICAke1J1YnlfVkVSU0lPTl9NQUpPUn0gICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgbWFqb3IgdmVyc2lvbiIgRk9SQ0UpCisgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgICAgJHtSdWJ5X1ZFUlNJT05fTUlOT1J9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IG1pbm9yIHZlcnNpb24iIEZPUkNFKQorICBzZXQoUnVieV9WRVJTSU9OX1BBVENIICAgICR7UnVieV9WRVJTSU9OX1BBVENIfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBwYXRjaCB2ZXJzaW9uIiBGT1JDRSkKKyAgc2V0KFJ1YnlfQVJDSF9ESVIgICAgICAgICAke1J1YnlfQVJDSF9ESVJ9ICAgICAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgYXJjaCBkaXIiIEZPUkNFKQorICBzZXQoUnVieV9IRFJfRElSICAgICAgICAgICR7UnVieV9IRFJfRElSfSAgICAgICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBoZWFkZXIgZGlyICgxLjkrKSIgRk9SQ0UpCisgIHNldChSdWJ5X0FSQ0hIRFJfRElSICAgICAgJHtSdWJ5X0FSQ0hIRFJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IGFyY2ggaGVhZGVyIGRpciAoMi4wKykiIEZPUkNFKQorICBzZXQoUnVieV9QT1NTSUJMRV9MSUJfRElSICR7UnVieV9QT1NTSUJMRV9MSUJfRElSfSBDQUNIRSBQQVRIICJUaGUgUnVieSBsaWIgZGlyIiBGT1JDRSkKKyAgc2V0KFJ1YnlfUlVCWV9MSUJfRElSICAgICAke1J1YnlfUlVCWV9MSUJfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgcnVieS1saWIgZGlyIiBGT1JDRSkKKyAgc2V0KFJ1YnlfU0lURUFSQ0hfRElSICAgICAke1J1YnlfU0lURUFSQ0hfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1Ynkgc2l0ZSBhcmNoIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X1NJVEVMSUJfRElSICAgICAgJHtSdWJ5X1NJVEVMSUJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHNpdGUgbGliIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X0hBU19WRU5ET1JfUlVCWSAgJHtSdWJ5X0hBU19WRU5ET1JfUlVCWX0gIENBQ0hFIEJPT0wgIlZlbmRvciBSdWJ5IGlzIGF2YWlsYWJsZSIgRk9SQ0UpCisgIHNldChSdWJ5X1ZFTkRPUkFSQ0hfRElSICAgJHtSdWJ5X1ZFTkRPUkFSQ0hfRElSfSAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBhcmNoIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X1ZFTkRPUkxJQl9ESVIgICAgJHtSdWJ5X1ZFTkRPUkxJQl9ESVJ9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBsaWIgZGlyIiBGT1JDRSkKIAogICBtYXJrX2FzX2FkdmFuY2VkKAotICAgIFJVQllfQVJDSF9ESVIKLSAgICBSVUJZX0FSQ0gKLSAgICBSVUJZX0hEUl9ESVIKLSAgICBSVUJZX0FSQ0hIRFJfRElSCi0gICAgUlVCWV9QT1NTSUJMRV9MSUJfRElSCi0gICAgUlVCWV9SVUJZX0xJQl9ESVIKLSAgICBSVUJZX1NJVEVBUkNIX0RJUgotICAgIFJVQllfU0lURUxJQl9ESVIKLSAgICBSVUJZX0hBU19WRU5ET1JfUlVCWQotICAgIFJVQllfVkVORE9SQVJDSF9ESVIKLSAgICBSVUJZX1ZFTkRPUkxJQl9ESVIKLSAgICBSVUJZX1ZFUlNJT05fTUFKT1IKLSAgICBSVUJZX1ZFUlNJT05fTUlOT1IKLSAgICBSVUJZX1ZFUlNJT05fUEFUQ0gKKyAgICBSdWJ5X0FSQ0hfRElSCisgICAgUnVieV9BUkNICisgICAgUnVieV9IRFJfRElSCisgICAgUnVieV9BUkNISERSX0RJUgorICAgIFJ1YnlfUE9TU0lCTEVfTElCX0RJUgorICAgIFJ1YnlfUlVCWV9MSUJfRElSCisgICAgUnVieV9TSVRFQVJDSF9ESVIKKyAgICBSdWJ5X1NJVEVMSUJfRElSCisgICAgUnVieV9IQVNfVkVORE9SX1JVQlkKKyAgICBSdWJ5X1ZFTkRPUkFSQ0hfRElSCisgICAgUnVieV9WRU5ET1JMSUJfRElSCisgICAgUnVieV9WRVJTSU9OX01BSk9SCisgICAgUnVieV9WRVJTSU9OX01JTk9SCisgICAgUnVieV9WRVJTSU9OX1BBVENICiAgICAgKQogZW5kaWYoKQogCi0jIEluIGNhc2UgUlVCWV9FWEVDVVRBQkxFIGNvdWxkIG5vdCBiZSBleGVjdXRlZCAoZS5nLiBjcm9zcyBjb21waWxpbmcpCisjIEluIGNhc2UgUnVieV9FWEVDVVRBQkxFIGNvdWxkIG5vdCBiZSBleGVjdXRlZCAoZS5nLiBjcm9zcyBjb21waWxpbmcpCiAjIHRyeSB0byBkZXRlY3Qgd2hpY2ggdmVyc2lvbiB3ZSBmb3VuZC4gVGhpcyBpcyBub3QgdG9vIGdvb2QuCi1pZihSVUJZX0VYRUNVVEFCTEUgQU5EIE5PVCBSVUJZX1ZFUlNJT05fTUFKT1IpCitpZihSdWJ5X0VYRUNVVEFCTEUgQU5EIE5PVCBSdWJ5X1ZFUlNJT05fTUFKT1IpCiAgICMgYnkgZGVmYXVsdCBhc3N1bWUgMS44LjAKLSAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAxKQotICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDgpCi0gIHNldChSVUJZX1ZFUlNJT05fUEFUQ0ggMCkKKyAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAxKQorICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDgpCisgIHNldChSdWJ5X1ZFUlNJT05fUEFUQ0ggMCkKICAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDEuOS54Ci0gIGlmKCR7UlVCWV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MVxcLj85IikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01BSk9SIDEpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NSU5PUiA5KQorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTFcXC4/OSIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAxKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgOSkKICAgZW5kaWYoKQogICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi4wLngKLSAgaWYoJHtSVUJZX0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzAiKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgMikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDApCisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8wIikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiAwKQogICBlbmRpZigpCiAgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjEueAotICBpZigke1JVQllfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/MSIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAyKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgMSkKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzEiKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDEpCiAgIGVuZGlmKCkKICAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDIuMi54Ci0gIGlmKCR7UlVCWV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8yIikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01BSk9SIDIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NSU5PUiAyKQorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/MiIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAyKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgMikKICAgZW5kaWYoKQogICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi4zLngKLSAgaWYoJHtSVUJZX0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzMiKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgMikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDMpCisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8zIikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiAzKQogICBlbmRpZigpCiAgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjQueAotICBpZigke1JVQllfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/NCIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAyKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgNCkKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzQiKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDQpCisgIGVuZGlmKCkKKyAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDIuNS54CisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj81IikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiA1KQorICBlbmRpZigpCisgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjYueAorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/NiIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAyKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgNikKKyAgZW5kaWYoKQorICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi43LngKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzciKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDcpCiAgIGVuZGlmKCkKIGVuZGlmKCkKIAotaWYoUlVCWV9WRVJTSU9OX01BSk9SKQotICBzZXQoUlVCWV9WRVJTSU9OICIke1JVQllfVkVSU0lPTl9NQUpPUn0uJHtSVUJZX1ZFUlNJT05fTUlOT1J9LiR7UlVCWV9WRVJTSU9OX1BBVENIfSIpCi0gIHNldChfUlVCWV9WRVJTSU9OX1NIT1JUICIke1JVQllfVkVSU0lPTl9NQUpPUn0uJHtSVUJZX1ZFUlNJT05fTUlOT1J9IikKLSAgc2V0KF9SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1QgIiR7UlVCWV9WRVJTSU9OX01BSk9SfSR7UlVCWV9WRVJTSU9OX01JTk9SfSIpCi0gIHNldChfUlVCWV9OT0RPVF9WRVJTSU9OICIke1JVQllfVkVSU0lPTl9NQUpPUn0ke1JVQllfVkVSU0lPTl9NSU5PUn0ke1JVQllfVkVSU0lPTl9QQVRDSH0iKQoraWYoUnVieV9WRVJTSU9OX01BSk9SKQorICBzZXQoUnVieV9WRVJTSU9OICIke1J1YnlfVkVSU0lPTl9NQUpPUn0uJHtSdWJ5X1ZFUlNJT05fTUlOT1J9LiR7UnVieV9WRVJTSU9OX1BBVENIfSIpCisgIHNldChfUnVieV9WRVJTSU9OX1NIT1JUICIke1J1YnlfVkVSU0lPTl9NQUpPUn0uJHtSdWJ5X1ZFUlNJT05fTUlOT1J9IikKKyAgc2V0KF9SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1QgIiR7UnVieV9WRVJTSU9OX01BSk9SfSR7UnVieV9WRVJTSU9OX01JTk9SfSIpCisgIHNldChfUnVieV9OT0RPVF9WRVJTSU9OICIke1J1YnlfVkVSU0lPTl9NQUpPUn0ke1J1YnlfVkVSU0lPTl9NSU5PUn0ke1J1YnlfVkVSU0lPTl9QQVRDSH0iKQogZW5kaWYoKQogCi1maW5kX3BhdGgoUlVCWV9JTkNMVURFX0RJUgorIyBGSVhNRTogQ3VycmVudGx5IHdlIHJlcXVpcmUgYm90aCB0aGUgaW50ZXJwcmV0ZXIgYW5kIGRldmVsb3BtZW50IGNvbXBvbmVudHMgdG8gYmUgZm91bmQKKyMgaW4gb3JkZXIgdG8gdXNlIGVpdGhlci4gIFNlZSBpc3N1ZSAjMjA0NzQuCitmaW5kX3BhdGgoUnVieV9JTkNMVURFX0RJUgogICBOQU1FUyBydWJ5LmgKICAgSElOVFMKLSAgICAke1JVQllfSERSX0RJUn0KLSAgICAke1JVQllfQVJDSF9ESVJ9Ci0gICAgL3Vzci9saWIvcnVieS8ke19SVUJZX1ZFUlNJT05fU0hPUlR9L2k1ODYtbGludXgtZ251LworICAgICR7UnVieV9IRFJfRElSfQorICAgICR7UnVieV9BUkNIX0RJUn0KKyAgICAvdXNyL2xpYi9ydWJ5LyR7X1J1YnlfVkVSU0lPTl9TSE9SVH0vaTU4Ni1saW51eC1nbnUvCiApCiAKLXNldChSVUJZX0lOQ0xVREVfRElSUyAke1JVQllfSU5DTFVERV9ESVJ9ICkKK3NldChSdWJ5X0lOQ0xVREVfRElSUyAke1J1YnlfSU5DTFVERV9ESVJ9KQogCiAjIGlmIHJ1YnkgPiAxLjggaXMgcmVxdWlyZWQgb3IgaWYgcnVieSA+IDEuOCB3YXMgZm91bmQsIHNlYXJjaCBmb3IgdGhlIGNvbmZpZy5oIGRpcgotaWYoICIke1J1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UfSIgR1JFQVRFUiAxOCAgT1IgICIke19SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1R9IiBHUkVBVEVSIDE4ICBPUiAgUlVCWV9IRFJfRElSKQotICBmaW5kX3BhdGgoUlVCWV9DT05GSUdfSU5DTFVERV9ESVIKK2lmKCBSdWJ5X0ZJTkRfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjEuOSIgIE9SICBSdWJ5X1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIxLjkiICBPUiAgUnVieV9IRFJfRElSKQorICBmaW5kX3BhdGgoUnVieV9DT05GSUdfSU5DTFVERV9ESVIKICAgICBOQU1FUyBydWJ5L2NvbmZpZy5oICBjb25maWcuaAogICAgIEhJTlRTCi0gICAgICAke1JVQllfSERSX0RJUn0vJHtSVUJZX0FSQ0h9Ci0gICAgICAke1JVQllfQVJDSF9ESVJ9Ci0gICAgICAke1JVQllfQVJDSEhEUl9ESVJ9CisgICAgICAke1J1YnlfSERSX0RJUn0vJHtSdWJ5X0FSQ0h9CisgICAgICAke1J1YnlfQVJDSF9ESVJ9CisgICAgICAke1J1YnlfQVJDSEhEUl9ESVJ9CiAgICkKIAotICBzZXQoUlVCWV9JTkNMVURFX0RJUlMgJHtSVUJZX0lOQ0xVREVfRElSU30gJHtSVUJZX0NPTkZJR19JTkNMVURFX0RJUn0gKQorICBzZXQoUnVieV9JTkNMVURFX0RJUlMgJHtSdWJ5X0lOQ0xVREVfRElSU30gJHtSdWJ5X0NPTkZJR19JTkNMVURFX0RJUn0gKQogZW5kaWYoKQogCiAKICMgRGV0ZXJtaW5lIHRoZSBsaXN0IG9mIHBvc3NpYmxlIG5hbWVzIGZvciB0aGUgcnVieSBsaWJyYXJ5Ci1zZXQoX1JVQllfUE9TU0lCTEVfTElCX05BTUVTIHJ1YnkgcnVieS1zdGF0aWMgcnVieSR7X1JVQllfVkVSU0lPTl9TSE9SVH0gcnVieSR7X1JVQllfVkVSU0lPTl9TSE9SVF9OT0RPVH0gcnVieS0ke19SVUJZX1ZFUlNJT05fU0hPUlR9IHJ1YnktJHtSVUJZX1ZFUlNJT059KQorc2V0KF9SdWJ5X1BPU1NJQkxFX0xJQl9OQU1FUyBydWJ5IHJ1Ynktc3RhdGljIHJ1Ynkke19SdWJ5X1ZFUlNJT05fU0hPUlR9IHJ1Ynkke19SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1R9IHJ1YnktJHtfUnVieV9WRVJTSU9OX1NIT1JUfSBydWJ5LSR7UnVieV9WRVJTSU9OfSkKIAogaWYoV0lOMzIpCi0gIHNldCggX1JVQllfTVNWQ19SVU5USU1FICIiICkKLSAgaWYoIE1TVkNfVkVSU0lPTiBFUVVBTCAxMjAwICkKLSAgICBzZXQoIF9SVUJZX01TVkNfUlVOVElNRSAiNjAiICkKLSAgZW5kaWYoKQotICBpZiggTVNWQ19WRVJTSU9OIEVRVUFMIDEzMDAgKQotICAgIHNldCggX1JVQllfTVNWQ19SVU5USU1FICI3MCIgKQotICBlbmRpZigpCi0gIGlmKCBNU1ZDX1ZFUlNJT04gRVFVQUwgMTMxMCApCi0gICAgc2V0KCBfUlVCWV9NU1ZDX1JVTlRJTUUgIjcxIiApCi0gIGVuZGlmKCkKLSAgaWYoIE1TVkNfVkVSU0lPTiBFUVVBTCAxNDAwICkKLSAgICBzZXQoIF9SVUJZX01TVkNfUlVOVElNRSAiODAiICkKLSAgZW5kaWYoKQotICBpZiggTVNWQ19WRVJTSU9OIEVRVUFMIDE1MDAgKQotICAgIHNldCggX1JVQllfTVNWQ19SVU5USU1FICI5MCIgKQorICBpZihNU1ZDX1RPT0xTRVRfVkVSU0lPTikKKyAgICBzZXQoX1J1YnlfTVNWQ19SVU5USU1FICIke01TVkNfVE9PTFNFVF9WRVJTSU9OfSIpCisgIGVsc2UoKQorICAgIHNldChfUnVieV9NU1ZDX1JVTlRJTUUgIiIpCiAgIGVuZGlmKCkKIAotICBzZXQoX1JVQllfQVJDSF9QUkVGSVggIiIpCisgIHNldChfUnVieV9BUkNIX1BSRUZJWCAiIikKICAgaWYoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQotICAgIHNldChfUlVCWV9BUkNIX1BSRUZJWCAieDY0LSIpCisgICAgc2V0KF9SdWJ5X0FSQ0hfUFJFRklYICJ4NjQtIikKICAgZW5kaWYoKQogCi0gIGxpc3QoQVBQRU5EIF9SVUJZX1BPU1NJQkxFX0xJQl9OQU1FUwotICAgICAgICAgICAgICIke19SVUJZX0FSQ0hfUFJFRklYfW1zdmNyJHtfUlVCWV9NU1ZDX1JVTlRJTUV9LXJ1Ynkke19SVUJZX05PRE9UX1ZFUlNJT059IgotICAgICAgICAgICAgICIke19SVUJZX0FSQ0hfUFJFRklYfW1zdmNyJHtfUlVCWV9NU1ZDX1JVTlRJTUV9LXJ1Ynkke19SVUJZX05PRE9UX1ZFUlNJT059LXN0YXRpYyIKLSAgICAgICAgICAgICAiJHtfUlVCWV9BUkNIX1BSRUZJWH1tc3ZjcnQtcnVieSR7X1JVQllfTk9ET1RfVkVSU0lPTn0iCi0gICAgICAgICAgICAgIiR7X1JVQllfQVJDSF9QUkVGSVh9bXN2Y3J0LXJ1Ynkke19SVUJZX05PRE9UX1ZFUlNJT059LXN0YXRpYyIgKQorICBsaXN0KEFQUEVORCBfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVMKKyAgICAgICAgICAgICAiJHtfUnVieV9BUkNIX1BSRUZJWH1tc3ZjciR7X1J1YnlfTVNWQ19SVU5USU1FfS1ydWJ5JHtfUnVieV9OT0RPVF9WRVJTSU9OfSIKKyAgICAgICAgICAgICAiJHtfUnVieV9BUkNIX1BSRUZJWH1tc3ZjciR7X1J1YnlfTVNWQ19SVU5USU1FfS1ydWJ5JHtfUnVieV9OT0RPVF9WRVJTSU9OfS1zdGF0aWMiCisgICAgICAgICAgICAgIiR7X1J1YnlfQVJDSF9QUkVGSVh9bXN2Y3J0LXJ1Ynkke19SdWJ5X05PRE9UX1ZFUlNJT059IgorICAgICAgICAgICAgICIke19SdWJ5X0FSQ0hfUFJFRklYfW1zdmNydC1ydWJ5JHtfUnVieV9OT0RPVF9WRVJTSU9OfS1zdGF0aWMiICkKIGVuZGlmKCkKIAotZmluZF9saWJyYXJ5KFJVQllfTElCUkFSWSBOQU1FUyAke19SVUJZX1BPU1NJQkxFX0xJQl9OQU1FU30gSElOVFMgJHtSVUJZX1BPU1NJQkxFX0xJQl9ESVJ9ICkKK2ZpbmRfbGlicmFyeShSdWJ5X0xJQlJBUlkgTkFNRVMgJHtfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVN9IEhJTlRTICR7UnVieV9QT1NTSUJMRV9MSUJfRElSfSApCiAKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKLXNldChfUlVCWV9SRVFVSVJFRF9WQVJTIFJVQllfRVhFQ1VUQUJMRSBSVUJZX0lOQ0xVREVfRElSIFJVQllfTElCUkFSWSkKLWlmKF9SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1QgR1JFQVRFUiAxOCkKLSAgbGlzdChBUFBFTkQgX1JVQllfUkVRVUlSRURfVkFSUyBSVUJZX0NPTkZJR19JTkNMVURFX0RJUikKK3NldChfUnVieV9SRVFVSVJFRF9WQVJTIFJ1YnlfRVhFQ1VUQUJMRSBSdWJ5X0lOQ0xVREVfRElSIFJ1YnlfTElCUkFSWSkKK2lmKF9SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1QgR1JFQVRFUiAxOCkKKyAgbGlzdChBUFBFTkQgX1J1YnlfUkVRVUlSRURfVkFSUyBSdWJ5X0NPTkZJR19JTkNMVURFX0RJUikKIGVuZGlmKCkKIAotaWYoX1JVQllfREVCVUdfT1VUUFVUKQoraWYoX1J1YnlfREVCVUdfT1VUUFVUKQogICBtZXNzYWdlKFNUQVRVUyAiLS0tLS0tLS1GaW5kUnVieS5jbWFrZSBkZWJ1Zy0tLS0tLS0tLS0tLSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTOiAke19SVUJZX1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVN9IikKLSAgbWVzc2FnZShTVEFUVVMgIl9SVUJZX1BPU1NJQkxFX0xJQl9OQU1FUzogJHtfUlVCWV9QT1NTSUJMRV9MSUJfTkFNRVN9IikKLSAgbWVzc2FnZShTVEFUVVMgIlJVQllfQVJDSF9ESVI6ICR7UlVCWV9BUkNIX0RJUn0iKQotICBtZXNzYWdlKFNUQVRVUyAiUlVCWV9IRFJfRElSOiAke1JVQllfSERSX0RJUn0iKQotICBtZXNzYWdlKFNUQVRVUyAiUlVCWV9QT1NTSUJMRV9MSUJfRElSOiAke1JVQllfUE9TU0lCTEVfTElCX0RJUn0iKQotICBtZXNzYWdlKFNUQVRVUyAiRm91bmQgUlVCWV9WRVJTSU9OOiBcIiR7UlVCWV9WRVJTSU9OfVwiICwgc2hvcnQ6IFwiJHtfUlVCWV9WRVJTSU9OX1NIT1JUfVwiLCBub2RvdDogXCIke19SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1R9XCIiKQotICBtZXNzYWdlKFNUQVRVUyAiX1JVQllfUkVRVUlSRURfVkFSUzogJHtfUlVCWV9SRVFVSVJFRF9WQVJTfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0VYRUNVVEFCTEU6ICR7UlVCWV9FWEVDVVRBQkxFfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0xJQlJBUlk6ICR7UlVCWV9MSUJSQVJZfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0lOQ0xVREVfRElSOiAke1JVQllfSU5DTFVERV9ESVJ9IikKLSAgbWVzc2FnZShTVEFUVVMgIlJVQllfQ09ORklHX0lOQ0xVREVfRElSOiAke1JVQllfQ09ORklHX0lOQ0xVREVfRElSfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTOiAke19SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVN9IikKKyAgbWVzc2FnZShTVEFUVVMgIl9SdWJ5X1BPU1NJQkxFX0xJQl9OQU1FUzogJHtfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVN9IikKKyAgbWVzc2FnZShTVEFUVVMgIlJ1YnlfQVJDSF9ESVI6ICR7UnVieV9BUkNIX0RJUn0iKQorICBtZXNzYWdlKFNUQVRVUyAiUnVieV9IRFJfRElSOiAke1J1YnlfSERSX0RJUn0iKQorICBtZXNzYWdlKFNUQVRVUyAiUnVieV9QT1NTSUJMRV9MSUJfRElSOiAke1J1YnlfUE9TU0lCTEVfTElCX0RJUn0iKQorICBtZXNzYWdlKFNUQVRVUyAiRm91bmQgUnVieV9WRVJTSU9OOiBcIiR7UnVieV9WRVJTSU9OfVwiICwgc2hvcnQ6IFwiJHtfUnVieV9WRVJTSU9OX1NIT1JUfVwiLCBub2RvdDogXCIke19SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1R9XCIiKQorICBtZXNzYWdlKFNUQVRVUyAiX1J1YnlfUkVRVUlSRURfVkFSUzogJHtfUnVieV9SRVFVSVJFRF9WQVJTfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0VYRUNVVEFCTEU6ICR7UnVieV9FWEVDVVRBQkxFfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0xJQlJBUlk6ICR7UnVieV9MSUJSQVJZfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0lOQ0xVREVfRElSOiAke1J1YnlfSU5DTFVERV9ESVJ9IikKKyAgbWVzc2FnZShTVEFUVVMgIlJ1YnlfQ09ORklHX0lOQ0xVREVfRElSOiAke1J1YnlfQ09ORklHX0lOQ0xVREVfRElSfSIpCiAgIG1lc3NhZ2UoU1RBVFVTICItLS0tLS0tLS0tLS0tLS0tLS0tLSIpCiBlbmRpZigpCiAKLUZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhSdWJ5ICBSRVFVSVJFRF9WQVJTICAke19SVUJZX1JFUVVJUkVEX1ZBUlN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgUlVCWV9WRVJTSU9OICkKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKK0ZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhSdWJ5ICBSRVFVSVJFRF9WQVJTICAke19SdWJ5X1JFUVVJUkVEX1ZBUlN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgUnVieV9WRVJTSU9OICkKKworaWYoUnVieV9GT1VORCkKKyAgc2V0KFJ1YnlfTElCUkFSSUVTICR7UnVieV9MSUJSQVJZfSkKK2VuZGlmKCkKIAogbWFya19hc19hZHZhbmNlZCgKLSAgUlVCWV9FWEVDVVRBQkxFCi0gIFJVQllfTElCUkFSWQotICBSVUJZX0lOQ0xVREVfRElSCi0gIFJVQllfQ09ORklHX0lOQ0xVREVfRElSCisgIFJ1YnlfRVhFQ1VUQUJMRQorICBSdWJ5X0xJQlJBUlkKKyAgUnVieV9JTkNMVURFX0RJUgorICBSdWJ5X0NPTkZJR19JTkNMVURFX0RJUgogICApCiAKLSMgU2V0IHNvbWUgdmFyaWFibGVzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGZpbGUKLXNldChSVUJZX1BPU1NJQkxFX0xJQl9QQVRIICR7UlVCWV9QT1NTSUJMRV9MSUJfRElSfSkKLXNldChSVUJZX1JVQllfTElCX1BBVEggJHtSVUJZX1JVQllfTElCX0RJUn0pCi1zZXQoUlVCWV9JTkNMVURFX1BBVEggJHtSVUJZX0lOQ0xVREVfRElSU30pCisjIFNldCBzb21lIHZhcmlhYmxlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBmaWxlIChubyBuZWVkIHRvIHByb3ZpZGUgYSBDYW1lbENhc2UgdmVyc2lvbiBvZiB0aGF0Li4uKQorc2V0KFJVQllfUE9TU0lCTEVfTElCX1BBVEggJHtSdWJ5X1BPU1NJQkxFX0xJQl9ESVJ9KQorc2V0KFJVQllfUlVCWV9MSUJfUEFUSCAke1J1YnlfUlVCWV9MSUJfRElSfSkKK3NldChSVUJZX0lOQ0xVREVfUEFUSCAke1J1YnlfSU5DTFVERV9ESVJTfSkKKworIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorIyBEZWZpbmUgdXBwZXIgY2FzZSB2ZXJzaW9ucyBvZiBvdXRwdXQgdmFyaWFibGVzCitmb3JlYWNoKENhbWVsCisgICAgUnVieV9FWEVDVVRBQkxFCisgICAgUnVieV9JTkNMVURFX0RJUlMKKyAgICBSdWJ5X0xJQlJBUlkKKyAgICBSdWJ5X1ZFUlNJT04KKyAgICBSdWJ5X1ZFUlNJT05fTUFKT1IKKyAgICBSdWJ5X1ZFUlNJT05fTUlOT1IKKyAgICBSdWJ5X1ZFUlNJT05fUEFUQ0gKKyAgICBSdWJ5X0lOQ0xVREVfUEFUSAorCisgICAgUnVieV9BUkNIX0RJUgorICAgIFJ1YnlfQVJDSAorICAgIFJ1YnlfSERSX0RJUgorICAgIFJ1YnlfQVJDSEhEUl9ESVIKKyAgICBSdWJ5X1BPU1NJQkxFX0xJQl9ESVIKKyAgICBSdWJ5X1JVQllfTElCX0RJUgorICAgIFJ1YnlfU0lURUFSQ0hfRElSCisgICAgUnVieV9TSVRFTElCX0RJUgorICAgIFJ1YnlfSEFTX1ZFTkRPUl9SVUJZCisgICAgUnVieV9WRU5ET1JBUkNIX0RJUgorCisgICAgKQorICAgIHN0cmluZyhUT1VQUEVSICR7Q2FtZWx9IFVQUEVSKQorICAgIHNldCgke1VQUEVSfSAkeyR7Q2FtZWx9fSkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU0RMLmNtYWtlIGIvTW9kdWxlcy9GaW5kU0RMLmNtYWtlCmluZGV4IDhkNzkzYTkuLjU5ZWRkYmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFNETC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTREwuY21ha2UKQEAgLTUsMjQgKzUsNTQgQEAKIEZpbmRTREwKIC0tLS0tLS0KIAotTG9jYXRlIFNETCBsaWJyYXJ5Ci0KLVRoaXMgbW9kdWxlIGRlZmluZXMKLQotOjoKLQotICBTRExfTElCUkFSWSwgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdG8gbGluayBhZ2FpbnN0Ci0gIFNETF9GT1VORCwgaWYgZmFsc2UsIGRvIG5vdCB0cnkgdG8gbGluayB0byBTREwKLSAgU0RMX0lOQ0xVREVfRElSLCB3aGVyZSB0byBmaW5kIFNETC5oCi0gIFNETF9WRVJTSU9OX1NUUklORywgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgU0RMCitMb2NhdGUgdGhlIFNETCBsaWJyYXJ5CiAKIAorSW1wb3J0ZWQgdGFyZ2V0cworXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgOnByb3BfdGd0OmBJTVBPUlRFRGAgdGFyZ2V0OgorCitgYFNETDo6U0RMYGAKKyAgVGhlIFNETCBsaWJyYXJ5LCBpZiBmb3VuZAorCitSZXN1bHQgdmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgbW9kdWxlIHdpbGwgc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgcHJvamVjdDoKKworYGBTRExfSU5DTFVERV9ESVJTYGAKKyAgd2hlcmUgdG8gZmluZCBTREwuaAorYGBTRExfTElCUkFSSUVTYGAKKyAgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdG8gbGluayBhZ2FpbnN0CitgYFNETF9GT1VORGBgCisgIGlmIGZhbHNlLCBkbyBub3QgdHJ5IHRvIGxpbmsgdG8gU0RMCitgYFNETF9WRVJTSU9OYGAKKyAgdGhlIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG9mIFNETCBpZiBmb3VuZAorYGBTRExfVkVSU0lPTl9NQUpPUmBgCisgIFNETCBtYWpvciB2ZXJzaW9uCitgYFNETF9WRVJTSU9OX01JTk9SYGAKKyAgU0RMIG1pbm9yIHZlcnNpb24KK2BgU0RMX1ZFUlNJT05fUEFUQ0hgYAorICBTREwgcGF0Y2ggdmVyc2lvbgorCitDYWNoZSB2YXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXgorCitUaGVzZSB2YXJpYWJsZXMgbWF5IG9wdGlvbmFsbHkgYmUgc2V0IHRvIGhlbHAgdGhpcyBtb2R1bGUgZmluZCB0aGUgY29ycmVjdCBmaWxlczoKKworYGBTRExfSU5DTFVERV9ESVJgYAorICB3aGVyZSB0byBmaW5kIFNETC5oCitgYFNETF9MSUJSQVJZYGAKKyAgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdG8gbGluayBhZ2FpbnN0CisKKworVmFyaWFibGVzIGZvciBsb2NhdGluZyBTREwKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFRoaXMgbW9kdWxlIHJlc3BvbmRzIHRvIHRoZSBmbGFnOgogCi06OgotCi0gIFNETF9CVUlMRElOR19MSUJSQVJZCitgYFNETF9CVUlMRElOR19MSUJSQVJZYGAKICAgICBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZW4gbm8gU0RMX21haW4gd2lsbCBiZSBsaW5rZWQgaW4gYmVjYXVzZQogICAgIG9ubHkgYXBwbGljYXRpb25zIG5lZWQgbWFpbigpLgogICAgIE90aGVyd2lzZSwgaXQgaXMgYXNzdW1lZCB5b3UgYXJlIGJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIGFuZCB0aGlzCkBAIC0zMCw2ICs2MCwxNSBAQAogICAgIGFzIHBhcnQgb2YgdGhlIHJldHVybmVkIFNETF9MSUJSQVJZIHZhcmlhYmxlLgogCiAKK09ic29sZXRlIHZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZXNlIHZhcmlhYmxlcyBhcmUgb2Jzb2xldGUgYW5kIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKworYGBTRExfVkVSU0lPTl9TVFJJTkdgYAorICB0aGUgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgU0RMIGlmIGZvdW5kLgorICBJZGVudGljYWwgdG8gU0RMX1ZFUlNJT04KKwogCiBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZSBTRExtYWluLmggYW5kIFNETG1haW4ubSB5b3VyIHByb2plY3QgZm9yIHRoZQogT1MgWCBmcmFtZXdvcmsgYmFzZWQgdmVyc2lvbi4gIChPdGhlciB2ZXJzaW9ucyBsaW5rIHRvIC1sU0RMbWFpbiB3aGljaApAQCAtNTIsMTUgKzkxLDYgQEAKICRTRExESVIgaXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3b3VsZCBjb3JyZXNwb25kIHRvIHRoZQogLi9jb25maWd1cmUgLS1wcmVmaXg9JFNETERJUiB1c2VkIGluIGJ1aWxkaW5nIFNETC4gIGwuZS5nYWx1cCA5LTIwLTAyCiAKLU1vZGlmaWVkIGJ5IEVyaWMgV2luZy4gIEFkZGVkIGNvZGUgdG8gYXNzaXN0IHdpdGggYXV0b21hdGVkIGJ1aWxkaW5nCi1ieSB1c2luZyBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyBhbmQgcHJvdmlkaW5nIGEgbW9yZQotY29udHJvbGxlZC9jb25zaXN0ZW50IHNlYXJjaCBiZWhhdmlvci4gIEFkZGVkIG5ldyBtb2RpZmljYXRpb25zIHRvCi1yZWNvZ25pemUgT1MgWCBmcmFtZXdvcmtzIGFuZCBhZGRpdGlvbmFsIFVuaXggcGF0aHMgKEZyZWVCU0QsIGV0YykuCi1BbHNvIGNvcnJlY3RlZCB0aGUgaGVhZGVyIHNlYXJjaCBwYXRoIHRvIGZvbGxvdyAicHJvcGVyIiBTREwKLWd1aWRlbGluZXMuICBBZGRlZCBhIHNlYXJjaCBmb3IgU0RMbWFpbiB3aGljaCBpcyBuZWVkZWQgYnkgc29tZQotcGxhdGZvcm1zLiAgQWRkZWQgYSBzZWFyY2ggZm9yIHRocmVhZHMgd2hpY2ggaXMgbmVlZGVkIGJ5IHNvbWUKLXBsYXRmb3Jtcy4gIEFkZGVkIG5lZWRlZCBjb21waWxlIHN3aXRjaGVzIGZvciBNaW5HVy4KLQogT24gT1NYLCB0aGlzIHdpbGwgcHJlZmVyIHRoZSBGcmFtZXdvcmsgdmVyc2lvbiAoaWYgZm91bmQpIG92ZXIgb3RoZXJzLgogUGVvcGxlIHdpbGwgaGF2ZSB0byBtYW51YWxseSBjaGFuZ2UgdGhlIGNhY2hlIHZhbHVlcyBvZiBTRExfTElCUkFSWSB0bwogb3ZlcnJpZGUgdGhpcyBzZWxlY3Rpb24gb3Igc2V0IHRoZSBDTWFrZSBlbnZpcm9ubWVudApAQCAtMTc0LDEzICsyMDQsMTEgQEAKICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4jZGVmaW5lWyBcdF0rU0RMX01BSk9SX1ZFUlNJT05bIFx0XSsoWzAtOV0rKSQiICJcXDEiIFNETF9WRVJTSU9OX01BSk9SICIke1NETF9WRVJTSU9OX01BSk9SX0xJTkV9IikKICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4jZGVmaW5lWyBcdF0rU0RMX01JTk9SX1ZFUlNJT05bIFx0XSsoWzAtOV0rKSQiICJcXDEiIFNETF9WRVJTSU9OX01JTk9SICIke1NETF9WRVJTSU9OX01JTk9SX0xJTkV9IikKICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4jZGVmaW5lWyBcdF0rU0RMX1BBVENITEVWRUxbIFx0XSsoWzAtOV0rKSQiICJcXDEiIFNETF9WRVJTSU9OX1BBVENIICIke1NETF9WRVJTSU9OX1BBVENIX0xJTkV9IikKLSAgc2V0KFNETF9WRVJTSU9OX1NUUklORyAke1NETF9WRVJTSU9OX01BSk9SfS4ke1NETF9WRVJTSU9OX01JTk9SfS4ke1NETF9WRVJTSU9OX1BBVENIfSkKICAgdW5zZXQoU0RMX1ZFUlNJT05fTUFKT1JfTElORSkKICAgdW5zZXQoU0RMX1ZFUlNJT05fTUlOT1JfTElORSkKICAgdW5zZXQoU0RMX1ZFUlNJT05fUEFUQ0hfTElORSkKLSAgdW5zZXQoU0RMX1ZFUlNJT05fTUFKT1IpCi0gIHVuc2V0KFNETF9WRVJTSU9OX01JTk9SKQotICB1bnNldChTRExfVkVSU0lPTl9QQVRDSCkKKyAgc2V0KFNETF9WRVJTSU9OICR7U0RMX1ZFUlNJT05fTUFKT1J9LiR7U0RMX1ZFUlNJT05fTUlOT1J9LiR7U0RMX1ZFUlNJT05fUEFUQ0h9KQorICBzZXQoU0RMX1ZFUlNJT05fU1RSSU5HICR7U0RMX1ZFUlNJT059KQogZW5kaWYoKQogCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCkBAIC0xODgsMyArMjE2LDE0IEBACiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoU0RMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfVkFSUyBTRExfTElCUkFSWSBTRExfSU5DTFVERV9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBTRExfVkVSU0lPTl9TVFJJTkcpCisKK2lmKFNETF9GT1VORCkKKyAgc2V0KFNETF9MSUJSQVJJRVMgJHtTRExfTElCUkFSWX0pCisgIHNldChTRExfSU5DTFVERV9ESVJTICR7U0RMX0lOQ0xVREVfRElSfSkKKyAgaWYoTk9UIFRBUkdFVCBTREw6OlNETCkKKyAgICBhZGRfbGlicmFyeShTREw6OlNETCBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFNETDo6U0RMIFBST1BFUlRJRVMKKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1NETF9JTkNMVURFX0RJUn0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIiR7U0RMX0xJQlJBUll9IikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU1FMaXRlMy5jbWFrZSBiL01vZHVsZXMvRmluZFNRTGl0ZTMuY21ha2UKaW5kZXggMzc0ZDdhZi4uODhjN2RkMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kU1FMaXRlMy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTUUxpdGUzLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZFNRTGl0ZTMKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogRmluZCB0aGUgU1FMaXRlIGxpYnJhcmllcywgdjMKIAogSU1QT1JURUQgdGFyZ2V0cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU1dJRy5jbWFrZSBiL01vZHVsZXMvRmluZFNXSUcuY21ha2UKaW5kZXggYWU2YWU1Ni4uMmZkZWQ0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kU1dJRy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTV0lHLmNtYWtlCkBAIC01LDI1ICs1LDQ5IEBACiBGaW5kU1dJRwogLS0tLS0tLS0KIAotRmluZCBTaW1wbGlmaWVkIFdyYXBwZXIgYW5kIEludGVyZmFjZSBHZW5lcmF0b3IgKFNXSUcpCi0KLVRoaXMgbW9kdWxlIGZpbmRzIGFuIGluc3RhbGxlZCBTV0lHLiAgSXQgc2V0cyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKLQotOjoKLQotICBTV0lHX0ZPVU5EIC0gc2V0IHRvICJUcnVlIiBpZiBTV0lHIGlzIGZvdW5kCi0gIFNXSUdfRElSIC0gdGhlIGRpcmVjdG9yeSB3aGVyZSBzd2lnIGlzIGluc3RhbGxlZAotICBTV0lHX0VYRUNVVEFCTEUgLSB0aGUgcGF0aCB0byB0aGUgc3dpZyBleGVjdXRhYmxlCi0gIFNXSUdfVkVSU0lPTiAgIC0gdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBzd2lnIGV4ZWN1dGFibGUKK0ZpbmQgdGhlIFNpbXBsaWZpZWQgV3JhcHBlciBhbmQgSW50ZXJmYWNlIEdlbmVyYXRvciAoU1dJR18pIGV4ZWN1dGFibGUuCiAKIAorVGhpcyBtb2R1bGUgZmluZHMgYW4gaW5zdGFsbGVkIFNXSUcgYW5kIGRldGVybWluZXMgaXRzIHZlcnNpb24uIElmIGEKK2BgQ09NUE9ORU5UU2BgIG9yIGBgT1BUSU9OQUxfQ09NUE9ORU5UU2BgIGFyZ3VtZW50IGlzIGdpdmVuIHRvIGBgZmluZF9wYWNrYWdlYGAsCitpdCB3aWxsIGFsc28gZGV0ZXJtaW5lIHN1cHBvcnRlZCB0YXJnZXQgbGFuZ3VhZ2VzLiAgVGhlIG1vZHVsZSBzZW50cyB0aGUKK2ZvbGxvd2luZyB2YXJpYWJsZXM6CiAKLVRoZSBtaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24gb2YgU1dJRyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQotc3RhbmRhcmQgc3ludGF4LCBlLmcuICAgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZShTV0lHIDEuMSlgCitgYFNXSUdfRk9VTkRgYAorICBXaGV0aGVyIFNXSUcgYW5kIGFueSByZXF1aXJlZCBjb21wb25lbnRzIHdlcmUgZm91bmQgb24gdGhlIHN5c3RlbS4KK2BgU1dJR19FWEVDVVRBQkxFYGAKKyAgUGF0aCB0byB0aGUgU1dJRyBleGVjdXRhYmxlLgorYGBTV0lHX0RJUmBgCisgIFBhdGggdG8gdGhlIGluc3RhbGxlZCBTV0lHIGBgTGliYGAgZGlyZWN0b3J5IChyZXN1bHQgb2YgYGBzd2lnIC1zd2lnbGliYGApLgorYGBTV0lHX1ZFUlNJT05gYAorICBTV0lHIGV4ZWN1dGFibGUgdmVyc2lvbiAocmVzdWx0IG9mIGBgc3dpZyAtdmVyc2lvbmBgKS4KK2BgU1dJR188bGFuZz5fRk9VTkRgYAorICBJZiBgYENPTVBPTkVOVFNgYCBvciBgYE9QVElPTkFMX0NPTVBPTkVOVFNgYCBhcmUgcmVxdWVzdGVkLCBlYWNoIGF2YWlsYWJsZQorICB0YXJnZXQgbGFuZ3VhZ2UgYGA8bGFuZz5gYCAobG93ZXJjYXNlKSB3aWxsIGJlIHNldCB0byBUUlVFLgorCitBbnkgYGBDT01QT05FTlRTYGAgZ2l2ZW4gdG8gYGBmaW5kX3BhY2thZ2VgYCBzaG91bGQgYmUgdGhlIG5hbWVzIG9mIHN1cHBvcnRlZAordGFyZ2V0IGxhbmd1YWdlcyBhcyBwcm92aWRlZCB0byB0aGUgTEFOR1VBR0UgYXJndW1lbnQgb2YgYGBzd2lnX2FkZF9saWJyYXJ5YGAsCitzdWNoIGFzIGBgcHl0aG9uYGAgb3IgYGBwZXJsNWBgLiBMYW5ndWFnZSBuYW1lcyAqbXVzdCogYmUgbG93ZXJjYXNlLgogCiBBbGwgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkIGZyb20gdGhlIGBgU1dJR19FWEVDVVRBQkxFYGAsIHNvIHRoZSB2ZXJzaW9uCiB0byBiZSBmb3VuZCBjYW4gYmUgY2hhbmdlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnkgbWVhbnMgb2Ygc2V0dGluZwotYGBTV0lHX0VYRUNVVEFCTEVgYAorYGBTV0lHX0VYRUNVVEFCTEVgYC4KKworRXhhbXBsZSB1c2FnZSByZXF1aXJpbmcgU1dJRyA0LjAgb3IgaGlnaGVyIGFuZCBQeXRob24gbGFuZ3VhZ2Ugc3VwcG9ydCwgd2l0aAorb3B0aW9uYWwgRm9ydHJhbiBzdXBwb3J0OgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgZmluZF9wYWNrYWdlKFNXSUcgNC4wIENPTVBPTkVOVFMgcHl0aG9uIE9QVElPTkFMX0NPTVBPTkVOVFMgZm9ydHJhbikKKyAgIGlmKFNXSUdfRk9VTkQpCisgICAgIG1lc3NhZ2UoIlNXSUcgZm91bmQ6ICR7U1dJR19FWEVDVVRBQkxFfSIpCisgICAgIGlmKE5PVCBTV0lHX2ZvcnRyYW5fRk9VTkQpCisgICAgICAgbWVzc2FnZShXQVJOSU5HICJTV0lHIEZvcnRyYW4gYmluZGluZ3MgY2Fubm90IGJlIGdlbmVyYXRlZCIpCisgICAgIGVuZGlmKCkKKyAgIGVuZGlmKCkKKworLi4gX2BTV0lHYDogaHR0cDovL3N3aWcub3JnCisKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGZpbmRfcHJvZ3JhbShTV0lHX0VYRUNVVEFCTEUgTkFNRVMgc3dpZzQuMCBzd2lnMy4wIHN3aWcyLjAgc3dpZykKQEAgLTU4LDEwICs4MiwyOSBAQAogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQorCisgIGlmKFNXSUdfRklORF9DT01QT05FTlRTKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7U1dJR19FWEVDVVRBQkxFfSAtaGVscAorICAgICAgT1VUUFVUX1ZBUklBQkxFIFNXSUdfc3dpZ2hlbHBfb3V0cHV0CisgICAgICBFUlJPUl9WQVJJQUJMRSBTV0lHX3N3aWdoZWxwX2Vycm9yCisgICAgICBSRVNVTFRfVkFSSUFCTEUgU1dJR19zd2lnaGVscF9yZXN1bHQpCisgICAgaWYoU1dJR19zd2lnaGVscF9yZXN1bHQpCisgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkNvbW1hbmQgXCIke1NXSUdfRVhFQ1VUQUJMRX0gLWhlbHBcIiBmYWlsZWQgd2l0aCBvdXRwdXQ6XG4ke1NXSUdfc3dpZ2xpYl9lcnJvcn0iKQorICAgIGVsc2UoKQorICAgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgU1dJR19zd2lnaGVscF9vdXRwdXQgIiR7U1dJR19zd2lnaGVscF9vdXRwdXR9IikKKyAgICAgIGZvcmVhY2goU1dJR19saW5lIElOIExJU1RTIFNXSUdfc3dpZ2hlbHBfb3V0cHV0KQorICAgICAgICBpZihTV0lHX2xpbmUgTUFUQ0hFUyAiLShbQS1aYS16MC05X10rKSArLSAqR2VuZXJhdGUuKndyYXBwZXJzIikKKyAgICAgICAgICBzZXQoU1dJR18ke0NNQUtFX01BVENIXzF9X0ZPVU5EIFRSVUUpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCi1GSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoU1dJRyAgUkVRVUlSRURfVkFSUyBTV0lHX0VYRUNVVEFCTEUgU1dJR19ESVIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBTV0lHX1ZFUlNJT04gKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKAorICBTV0lHIEhBTkRMRV9DT01QT05FTlRTCisgIFJFUVVJUkVEX1ZBUlMgU1dJR19FWEVDVVRBQkxFIFNXSUdfRElSCisgIFZFUlNJT05fVkFSIFNXSUdfVkVSU0lPTikKIAogbWFya19hc19hZHZhbmNlZChTV0lHX0RJUiBTV0lHX1ZFUlNJT04gU1dJR19FWEVDVVRBQkxFKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU3F1aXNoLmNtYWtlIGIvTW9kdWxlcy9GaW5kU3F1aXNoLmNtYWtlCmluZGV4IDdkNDk1MDUuLjkxZDE0MTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFNxdWlzaC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTcXVpc2guY21ha2UKQEAgLTksOCArOSw3IEBACiAKIAogCi1UaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0byBmaW5kIFNxdWlzaC4gIEN1cnJlbnRseSBTcXVpc2ggdmVyc2lvbnMgMwotYW5kIDQgYXJlIHN1cHBvcnRlZC4KK1RoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGZpbmQgU3F1aXNoLgogCiA6OgogCkBAIC0zOSwxMiArMzgsMTIgQEAKIAogCiAKLUl0IHByb3ZpZGVzIHRoZSBmdW5jdGlvbiBzcXVpc2hfdjRfYWRkX3Rlc3QoKSBmb3IgYWRkaW5nIGEgc3F1aXNoIHRlc3QKLXRvIGNtYWtlIHVzaW5nIFNxdWlzaCA0Lng6CitJdCBwcm92aWRlcyB0aGUgZnVuY3Rpb24gc3F1aXNoX2FkZF90ZXN0KCkgZm9yIGFkZGluZyBhIHNxdWlzaCB0ZXN0Cit0byBjbWFrZSB1c2luZyBTcXVpc2ggPj0gNC54OgogCiA6OgogCi0gICBzcXVpc2hfdjRfYWRkX3Rlc3QoY21ha2VUZXN0TmFtZQorICAgc3F1aXNoX2FkZF90ZXN0KGNtYWtlVGVzdE5hbWUKICAgICAgQVVUIHRhcmdldE5hbWUgU1VJVEUgc3VpdGVOYW1lIFRFU1Qgc3F1aXNoVGVzdE5hbWUKICAgICAgW1NFVFRJTkdTR1JPVVAgZ3JvdXBdIFtQUkVfQ09NTUFORCBjb21tYW5kXSBbUE9TVF9DT01NQU5EIGNvbW1hbmRdICkKIApAQCAtNjYsOCArNjUsNyBAQAogICB0aGUgbmFtZSBvZiB0aGUgc3F1aXNoIHRlc3QsIGkuZS4gdGhlIG5hbWUgb2YgdGhlIHN1YmRpcmVjdG9yeQogICBvZiB0aGUgdGVzdCBpbnNpZGUgdGhlIHN1aXRlIGRpcmVjdG9yeS4KIGBgU0VUVElOR1NHUk9VUCBncm91cGBgCi0gIGlmIHNwZWNpZmllZCwgdGhlIGdpdmVuIHNldHRpbmdzIGdyb3VwIHdpbGwgYmUgdXNlZCBmb3IgZXhlY3V0aW5nIHRoZSB0ZXN0LgotICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ3JvdXBuYW1lIHdpbGwgYmUgIkNUZXN0Xzx1c2VybmFtZT4iCisgIGRlcHJlY2F0ZWQsIHRoaXMgYXJndW1lbnQgd2lsbCBiZSBpZ25vcmVkLgogYGBQUkVfQ09NTUFORCBjb21tYW5kYGAKICAgaWYgc3BlY2lmaWVkLCB0aGUgZ2l2ZW4gY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSBzdGFydGluZyB0aGUgc3F1aXNoIHRlc3QuCiBgYFBPU1RfQ09NTUFORCBjb21tYW5kYGAKQEAgLTc4LDEzICs3NiwxMiBAQAogOjoKIAogICAgZW5hYmxlX3Rlc3RpbmcoKQotICAgZmluZF9wYWNrYWdlKFNxdWlzaCA0LjApCisgICBmaW5kX3BhY2thZ2UoU3F1aXNoIDYuNSkKICAgIGlmIChTUVVJU0hfRk9VTkQpCi0gICAgICBzcXVpc2hfdjRfYWRkX3Rlc3QobXlUZXN0TmFtZQorICAgICAgc3F1aXNoX2FkZF90ZXN0KG15VGVzdE5hbWUKICAgICAgICAgQVVUIG15QXBwCiAgICAgICAgIFNVSVRFICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdHMvbXlTdWl0ZQogICAgICAgICBURVNUIHNvbWVTcXVpc2hUZXN0Ci0gICAgICAgIFNFVFRJTkdTR1JPVVAgbXlHcm91cAogICAgICAgICApCiAgICBlbmRpZiAoKQogCkBAIC0xMDUsMTkgKzEwMiwxMiBAQAogOjoKIAogICBlbmFibGVfdGVzdGluZygpCi0gIGZpbmRfcGFja2FnZShTcXVpc2gpCisgIGZpbmRfcGFja2FnZShTcXVpc2ggMy4wKQogICBpZiAoU1FVSVNIX0ZPVU5EKQogICAgIHNxdWlzaF92M19hZGRfdGVzdChteVRlc3ROYW1lIG15QXBwbGljYXRpb24gdGVzdENhc2UgZW52VmFycyB0ZXN0V3JhcHBlcikKICAgZW5kaWYgKCkKIAogCi0KLW1hY3JvIFNRVUlTSF9BRERfVEVTVCh0ZXN0TmFtZSBhcHBsaWNhdGlvblVuZGVyVGVzdCB0ZXN0Q2FzZSBlbnZWYXJzCi10ZXN0V3JhcHBlcikKLQotOjoKLQotICAgVGhpcyBpcyBkZXByZWNhdGVkLiBVc2UgU1FVSVNIX1YzX0FERF9URVNUKCkgaWYgeW91IGFyZSB1c2luZyBTcXVpc2ggMy54IGluc3RlYWQuCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiBzZXQoU1FVSVNIX0lOU1RBTExfRElSX1NUUklORyAiRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGJpbiwgZG9jLCBhbmQgbGliIGRpcmVjdG9yaWVzIGZvciBTcXVpc2g7IHRoaXMgc2hvdWxkIGJlIHRoZSByb290IG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiIpCkBAIC0xMzcsNyArMTI3LDggQEAKICAgc3RyaW5nKFJFUExBQ0UgIi8vIiAiLyIgU1FVSVNIX0lOU1RBTExfRElSX1NFQVJDSCAiJHtTUVVJU0hfSU5TVEFMTF9ESVJfU0VBUkNIfSIpCiAKICAgIyBMb29rIGZvciBhbiBpbnN0YWxsYXRpb24KLSAgZmluZF9wYXRoKFNRVUlTSF9JTlNUQUxMX0RJUiBiaW4vc3F1aXNocnVubmVyCisgIGZpbmRfcGF0aChTUVVJU0hfSU5TVEFMTF9ESVIKKyAgICBOQU1FUyBiaW4vc3F1aXNocnVubmVyIGJpbi9zcXVpc2hydW5uZXIuZXhlCiAgICAgSElOVFMKICAgICAjIExvb2sgZm9yIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIFNRVUlTSF9JTlNUQUxMX0RJUi4KICAgICAgIEVOViBTUVVJU0hfSU5TVEFMTF9ESVIKQEAgLTE2OSw5ICsxNjAsOSBAQAogCiAKIHNldChTUVVJU0hfVkVSU0lPTikKLXNldChTUVVJU0hfVkVSU0lPTl9NQUpPUiApCi1zZXQoU1FVSVNIX1ZFUlNJT05fTUlOT1IgKQotc2V0KFNRVUlTSF9WRVJTSU9OX1BBVENIICkKK3NldChTUVVJU0hfVkVSU0lPTl9NQUpPUikKK3NldChTUVVJU0hfVkVSU0lPTl9NSU5PUikKK3NldChTUVVJU0hfVkVSU0lPTl9QQVRDSCkKIAogIyByZWNvcmQgaWYgZXhlY3V0YWJsZXMgYXJlIHNldAogaWYoU1FVSVNIX0NMSUVOVF9FWEVDVVRBQkxFKQpAQCAtMjAzLDggKzE5NCw4IEBACiAKIHNldChfU1FVSVNIX01PRFVMRV9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0iKQogCi1tYWNybyhTUVVJU0hfVjNfQUREX1RFU1QgdGVzdE5hbWUgdGVzdEFVVCB0ZXN0Q2FzZSBlbnZWYXJzIHRlc3RXcmFwZXIpCi0gIGlmKCIke1NRVUlTSF9WRVJTSU9OX01BSk9SfSIgU1RSRVFVQUwgIjQiKQorbWFjcm8oc3F1aXNoX3YzX2FkZF90ZXN0IHRlc3ROYW1lIHRlc3RBVVQgdGVzdENhc2UgZW52VmFycyB0ZXN0V3JhcGVyKQorICBpZigiJHtTUVVJU0hfVkVSU0lPTl9NQUpPUn0iIFNUUkdSRUFURVIgIjMiKQogICAgIG1lc3NhZ2UoU1RBVFVTICJVc2luZyBzcXVpc2hfdjNfYWRkX3Rlc3QoKSwgYnV0IFNRVUlTSF9WRVJTSU9OX01BSk9SIGlzICR7U1FVSVNIX1ZFUlNJT05fTUFKT1J9LlxuVGhpcyBtYXkgbm90IHdvcmsuIikKICAgZW5kaWYoKQogCkBAIC0yMjcsMTYgKzIxOCw5IEBACiBlbmRtYWNybygpCiAKIAotbWFjcm8oU1FVSVNIX0FERF9URVNUKQotICBtZXNzYWdlKFNUQVRVUyAiVXNpbmcgc3F1aXNoX2FkZF90ZXN0KCkgaXMgZGVwcmVjYXRlZCwgdXNlIHNxdWlzaF92M19hZGRfdGVzdCgpIGluc3RlYWQuIikKLSAgc3F1aXNoX3YzX2FkZF90ZXN0KCR7QVJHVn0pCi1lbmRtYWNybygpCi0KLQotZnVuY3Rpb24oU1FVSVNIX1Y0X0FERF9URVNUIHRlc3ROYW1lKQotCi0gIGlmKE5PVCAiJHtTUVVJU0hfVkVSU0lPTl9NQUpPUn0iIFNUUkVRVUFMICI0IikKLSAgICBtZXNzYWdlKFNUQVRVUyAiVXNpbmcgc3F1aXNoX3Y0X2FkZF90ZXN0KCksIGJ1dCBTUVVJU0hfVkVSU0lPTl9NQUpPUiBpcyAke1NRVUlTSF9WRVJTSU9OX01BSk9SfS5cblRoaXMgbWF5IG5vdCB3b3JrLiIpCitmdW5jdGlvbihzcXVpc2hfdjRfYWRkX3Rlc3QgdGVzdE5hbWUpCisgIGlmKE5PVCAiJHtTUVVJU0hfVkVSU0lPTl9NQUpPUn0iIFNUUkdSRUFURVIgIjMiKQorICAgIG1lc3NhZ2UoU1RBVFVTICJVc2luZyBzcXVpc2hfYWRkX3Rlc3QoKSwgYnV0IFNRVUlTSF9WRVJTSU9OX01BSk9SIGlzICR7U1FVSVNIX1ZFUlNJT05fTUFKT1J9LlxuVGhpcyBtYXkgbm90IHdvcmsuIikKICAgZW5kaWYoKQogCiAgIHNldChvbmVWYWx1ZUFyZ3MgQVVUIFNVSVRFIFRFU1QgU0VUVElOR1NHUk9VUCBQUkVfQ09NTUFORCBQT1NUX0NPTU1BTkQpCkBAIC0yNTksMTAgKzI0Myw2IEBACiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUmVxdWlyZWQgYXJndW1lbnQgVEVTVCBub3QgZ2l2ZW4gZm9yIFNRVUlTSF9BRERfVEVTVCgpIikKICAgZW5kaWYoKQogCi0gIGdldF90YXJnZXRfcHJvcGVydHkodGVzdEFVVExvY2F0aW9uICR7X1NRVUlTSF9BVVR9IExPQ0FUSU9OKQotICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHRlc3RBVVREaXIgJHt0ZXN0QVVUTG9jYXRpb259IFBBVEgpCi0gIGdldF9maWxlbmFtZV9jb21wb25lbnQodGVzdEFVVE5hbWUgJHt0ZXN0QVVUTG9jYXRpb259IE5BTUUpCi0KICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChhYnNUZXN0U3VpdGUgIiR7X1NRVUlTSF9TVUlURX0iIEFCU09MVVRFKQogICBpZihOT1QgRVhJU1RTICIke2Fic1Rlc3RTdWl0ZX0iKQogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIHNxdWlzaCB0ZXN0IHN1aXRlICR7X1NRVUlTSF9TVUlURX0gKGNoZWNrZWQgJHthYnNUZXN0U3VpdGV9KSIpCkBAIC0yNzMsMTUgKzI1MywxNSBAQAogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIHNxdWlzaCB0ZXN0Y2FzZSAke19TUVVJU0hfVEVTVH0gKGNoZWNrZWQgJHthYnNUZXN0Q2FzZX0pIikKICAgZW5kaWYoKQogCi0gIGlmKE5PVCBfU1FVSVNIX1NFVFRJTkdTR1JPVVApCi0gICAgc2V0KF9TUVVJU0hfU0VUVElOR1NHUk9VUCAiQ1Rlc3RfJEVOVntMT0dOQU1FfSIpCisgIGlmKF9TUVVJU0hfU0VUVElOR1NHUk9VUCkKKyAgICBtZXNzYWdlKCJTRVRUSU5HU0dST1VQIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4iKQogICBlbmRpZigpCiAKLSAgYWRkX3Rlc3QoJHt0ZXN0TmFtZX0KLSAgICAke0NNQUtFX0NPTU1BTkR9IC1WIC1WVgorICBhZGRfdGVzdChOQU1FICR7dGVzdE5hbWV9CisgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1WIC1WVgogICAgICItRHNxdWlzaF92ZXJzaW9uOlNUUklORz00IgotICAgICItRHNxdWlzaF9hdXQ6U1RSSU5HPSR7dGVzdEFVVE5hbWV9IgotICAgICItRHNxdWlzaF9hdXRfZGlyOlNUUklORz0ke3Rlc3RBVVREaXJ9IgorICAgICItRHNxdWlzaF9hdXQ6U1RSSU5HPSQ8VEFSR0VUX0ZJTEVfQkFTRV9OQU1FOiR7X1NRVUlTSF9BVVR9PiIKKyAgICAiLURzcXVpc2hfYXV0X2RpcjpTVFJJTkc9JDxUQVJHRVRfRklMRV9ESVI6JHtfU1FVSVNIX0FVVH0+IgogICAgICItRHNxdWlzaF9zZXJ2ZXJfZXhlY3V0YWJsZTpTVFJJTkc9JHtTUVVJU0hfU0VSVkVSX0VYRUNVVEFCTEV9IgogICAgICItRHNxdWlzaF9jbGllbnRfZXhlY3V0YWJsZTpTVFJJTkc9JHtTUVVJU0hfQ0xJRU5UX0VYRUNVVEFCTEV9IgogICAgICItRHNxdWlzaF9saWJxdGRpcjpTVFJJTkc9JHtRVF9MSUJSQVJZX0RJUn0iCkBAIC0yOTAsNyArMjcwLDYgQEAKICAgICAiLURzcXVpc2hfZW52X3ZhcnM6U1RSSU5HPSR7ZW52VmFyc30iCiAgICAgIi1Ec3F1aXNoX3dyYXBwZXI6U1RSSU5HPSR7dGVzdFdyYXBlcn0iCiAgICAgIi1Ec3F1aXNoX21vZHVsZV9kaXI6U1RSSU5HPSR7X1NRVUlTSF9NT0RVTEVfRElSfSIKLSAgICAiLURzcXVpc2hfc2V0dGluZ3Nncm91cDpTVFJJTkc9JHtfU1FVSVNIX1NFVFRJTkdTR1JPVVB9IgogICAgICItRHNxdWlzaF9wcmVfY29tbWFuZDpTVFJJTkc9JHtfU1FVSVNIX1BSRV9DT01NQU5EfSIKICAgICAiLURzcXVpc2hfcG9zdF9jb21tYW5kOlNUUklORz0ke19TUVVJU0hfUE9TVF9DT01NQU5EfSIKICAgICAtUCAiJHtfU1FVSVNIX01PRFVMRV9ESVJ9L1NxdWlzaFRlc3RTY3JpcHQuY21ha2UiCkBAIC0yOTksMyArMjc4LDExIEBACiAgICAgUFJPUEVSVElFUyBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAiRkFJTDtGQUlMRUQ7RVJST1I7RkFUQUwiCiAgICAgKQogZW5kZnVuY3Rpb24oKQorCittYWNybyhzcXVpc2hfYWRkX3Rlc3QpCisgIGlmKCIke1NRVUlTSF9WRVJTSU9OX01BSk9SfSIgU1RSR1JFQVRFUiAiMyIpCisgICAgc3F1aXNoX3Y0X2FkZF90ZXN0KCR7QVJHVn0pCisgIGVsc2UoKQorICAgIHNxdWlzaF92M19hZGRfdGVzdCgke0FSR1Z9KQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRUSUZGLmNtYWtlIGIvTW9kdWxlcy9GaW5kVElGRi5jbWFrZQppbmRleCAwMGEzYTQxLi4zYjc0Yzk0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRUSUZGLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFRJRkYuY21ha2UKQEAgLTUsNyArNSwxNCBAQAogRmluZFRJRkYKIC0tLS0tLS0tCiAKLUZpbmQgdGhlIFRJRkYgbGlicmFyeSAoYGBsaWJ0aWZmYGApLgorRmluZCB0aGUgVElGRiBsaWJyYXJ5IChgYGxpYnRpZmZgYCwgaHR0cHM6Ly9saWJ0aWZmLmdpdGxhYi5pby9saWJ0aWZmLykuCisKK09wdGlvbmFsIENPTVBPTkVOVFMKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIG9wdGlvbmFsIGNvbXBvbmVudCBgQ1hYYCwgZm9yIHVzZSB3aXRoIHRoZSBDT01QT05FTlRTCithcmd1bWVudCBvZiB0aGUgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY29tbWFuZC4gVGhpcyBjb21wb25lbnQgaGFzIGFuIGFzc29jaWF0ZWQKK2ltcG9ydGVkIHRhcmdldCwgYXMgZGVzY3JpYmVkIGJlbG93LgogCiBJbXBvcnRlZCB0YXJnZXRzCiBeXl5eXl5eXl5eXl5eXl5eCkBAIC0xNSw2ICsyMiwxMSBAQAogYGBUSUZGOjpUSUZGYGAKICAgVGhlIFRJRkYgbGlicmFyeSwgaWYgZm91bmQuCiAKK2BgVElGRjo6Q1hYYGAKKyAgVGhlIEMrKyB3cmFwcGVyIGxpYnRpZmZ4eCwgaWYgcmVxdWVzdGVkIGJ5IHRoZSBgQ09NUE9ORU5UUyBDWFhgIG9wdGlvbiwKKyAgaWYgdGhlIGNvbXBpbGVyIGlzIG5vdCBNU1ZDICh3aGljaCBpbmNsdWRlcyB0aGUgQysrIHdyYXBwZXIgaW4gbGlidGlmZiksCisgIGFuZCBpZiBmb3VuZC4KKwogUmVzdWx0IHZhcmlhYmxlcwogXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0zNiwxMCArNDgsMTkgQEAKIAogYGBUSUZGX0lOQ0xVREVfRElSYGAKICAgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBUSUZGIGhlYWRlcnMKLWBgVElGRl9MSUJSQVJZYGAKLSAgdGhlIHBhdGggdG8gdGhlIFRJRkYgbGlicmFyeQorYGBUSUZGX0xJQlJBUllfUkVMRUFTRWBgCisgIHRoZSBwYXRoIHRvIHRoZSBUSUZGIGxpYnJhcnkgZm9yIHJlbGVhc2UgY29uZmlndXJhdGlvbnMKK2BgVElGRl9MSUJSQVJZX0RFQlVHYGAKKyAgdGhlIHBhdGggdG8gdGhlIFRJRkYgbGlicmFyeSBmb3IgZGVidWcgY29uZmlndXJhdGlvbnMKK2BgVElGRlhYX0xJQlJBUllfUkVMRUFTRWBgCisgIHRoZSBwYXRoIHRvIHRoZSBUSUZGWFggbGlicmFyeSBmb3IgcmVsZWFzZSBjb25maWd1cmF0aW9ucworYGBUSUZGWFhfTElCUkFSWV9ERUJVR2BgCisgIHRoZSBwYXRoIHRvIHRoZSBUSUZGWFggbGlicmFyeSBmb3IgZGVidWcgY29uZmlndXJhdGlvbnMKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKK2NtYWtlX3BvbGljeShQVVNIKQorY21ha2VfcG9saWN5KFNFVCBDTVAwMDU3IE5FVykKKwogZmluZF9wYXRoKFRJRkZfSU5DTFVERV9ESVIgdGlmZi5oKQogCiBzZXQoVElGRl9OQU1FUyAke1RJRkZfTkFNRVN9IHRpZmYgbGlidGlmZiB0aWZmMyBsaWJ0aWZmMykKQEAgLTU0LDggKzc1LDYgQEAKICAgc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoVElGRikKICAgbWFya19hc19hZHZhbmNlZChUSUZGX0xJQlJBUllfUkVMRUFTRSBUSUZGX0xJQlJBUllfREVCVUcpCiBlbmRpZigpCi11bnNldChUSUZGX05BTUVTKQotdW5zZXQoVElGRl9OQU1FU19ERUJVRykKIAogaWYoVElGRl9JTkNMVURFX0RJUiBBTkQgRVhJU1RTICIke1RJRkZfSU5DTFVERV9ESVJ9L3RpZmZ2ZXJzLmgiKQogICAgIGZpbGUoU1RSSU5HUyAiJHtUSUZGX0lOQ0xVREVfRElSfS90aWZmdmVycy5oIiB0aWZmX3ZlcnNpb25fc3RyCkBAIC02NiwxMyArODUsNDYgQEAKICAgICB1bnNldCh0aWZmX3ZlcnNpb25fc3RyKQogZW5kaWYoKQogCitmb3JlYWNoKF9jb21wIElOIExJU1RTIFRJRkZfRklORF9DT01QT05FTlRTKQorICBpZihfY29tcCBTVFJFUVVBTCAiQ1hYIikKKyAgICBpZihNU1ZDKQorICAgICAgIyBDKysgYmluZGluZ3MgYXJlIGJ1aWx0IGludG8gdGhlIG1haW4gdGlmZiBsaWJyYXJ5LgorICAgICAgc2V0KFRJRkZfQ1hYX0ZPVU5EIDEpCisgICAgZWxzZSgpCisgICAgICBmb3JlYWNoKG5hbWUgJHtUSUZGX05BTUVTfSkKKyAgICAgICAgbGlzdChBUFBFTkQgVElGRlhYX05BTUVTICIke25hbWV9eHgiKQorICAgICAgICBsaXN0KEFQUEVORCBUSUZGWFhfTkFNRVNfREVCVUcgIiR7bmFtZX14eGQiKQorICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBmaW5kX2xpYnJhcnkoVElGRlhYX0xJQlJBUllfUkVMRUFTRSBOQU1FUyAke1RJRkZYWF9OQU1FU30pCisgICAgICBmaW5kX2xpYnJhcnkoVElGRlhYX0xJQlJBUllfREVCVUcgTkFNRVMgJHtUSUZGWFhfTkFNRVNfREVCVUd9KQorICAgICAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1NlbGVjdExpYnJhcnlDb25maWd1cmF0aW9ucy5jbWFrZSkKKyAgICAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKFRJRkZYWCkKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoVElGRlhYX0xJQlJBUllfUkVMRUFTRSBUSUZGWFhfTElCUkFSWV9ERUJVRykKKyAgICAgIHVuc2V0KFRJRkZYWF9OQU1FUykKKyAgICAgIHVuc2V0KFRJRkZYWF9OQU1FU19ERUJVRykKKyAgICAgIGlmKFRJRkZYWF9MSUJSQVJZKQorICAgICAgICBzZXQoVElGRl9DWFhfRk9VTkQgMSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQordW5zZXQoX2NvbXApCisKK3Vuc2V0KFRJRkZfTkFNRVMpCit1bnNldChUSUZGX05BTUVTX0RFQlVHKQorCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoVElGRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9DT01QT05FTlRTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfVkFSUyBUSUZGX0xJQlJBUlkgVElGRl9JTkNMVURFX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSIFRJRkZfVkVSU0lPTl9TVFJJTkcpCiAKIGlmKFRJRkZfRk9VTkQpCiAgIHNldChUSUZGX0xJQlJBUklFUyAke1RJRkZfTElCUkFSWX0pCisgIGlmKCJDWFgiIElOX0xJU1QgVElGRl9GSU5EX0NPTVBPTkVOVFMgQU5EIE5PVCBNU1ZDKQorICAgIGxpc3QoQVBQRU5EIFRJRkZfTElCUkFSSUVTICR7VElGRlhYX0xJQlJBUll9KQorICBlbmRpZigpCisKICAgc2V0KFRJRkZfSU5DTFVERV9ESVJTICIke1RJRkZfSU5DTFVERV9ESVJ9IikKIAogICBpZihOT1QgVEFSR0VUIFRJRkY6OlRJRkYpCkBAIC0xMDEsNiArMTUzLDQxIEBACiAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OX0RFQlVHICIke1RJRkZfTElCUkFSWV9ERUJVR30iKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQorCisgIGlmKE5PVCBUQVJHRVQgVElGRjo6Q1hYKQorICAgIGlmKE1TVkMpCisgICAgICBhZGRfbGlicmFyeShUSUZGOjpDWFggSU5URVJGQUNFIElNUE9SVEVEKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBUSUZGOjpDWFggUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIFRJRkY6OlRJRkYpCisgICAgZWxzZSgpCisgICAgICBhZGRfbGlicmFyeShUSUZGOjpDWFggVU5LTk9XTiBJTVBPUlRFRCkKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgVElGRjo6Q1hYIFBST1BFUlRZIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyBUSUZGOjpUSUZGKQorICAgICAgaWYoVElGRl9JTkNMVURFX0RJUlMpCisgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhUSUZGOjpDWFggUFJPUEVSVElFUworICAgICAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1RJRkZfSU5DTFVERV9ESVJTfSIpCisgICAgICBlbmRpZigpCisgICAgICBpZihFWElTVFMgIiR7VElGRlhYX0xJQlJBUll9IikKKyAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRJRkY6OkNYWCBQUk9QRVJUSUVTCisgICAgICAgICAgSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTICJDWFgiCisgICAgICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7VElGRlhYX0xJQlJBUll9IikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKEVYSVNUUyAiJHtUSUZGWFhfTElCUkFSWV9SRUxFQVNFfSIpCisgICAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgVElGRjo6Q1hYIEFQUEVORCBQUk9QRVJUWQorICAgICAgICAgIElNUE9SVEVEX0NPTkZJR1VSQVRJT05TIFJFTEVBU0UpCisgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhUSUZGOjpDWFggUFJPUEVSVElFUworICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFU19SRUxFQVNFICJDWFgiCisgICAgICAgICAgSU1QT1JURURfTE9DQVRJT05fUkVMRUFTRSAiJHtUSUZGWFhfTElCUkFSWV9SRUxFQVNFfSIpCisgICAgICBlbmRpZigpCisgICAgICBpZihFWElTVFMgIiR7VElGRlhYX0xJQlJBUllfREVCVUd9IikKKyAgICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBUSUZGOjpDWFggQVBQRU5EIFBST1BFUlRZCisgICAgICAgICAgSU1QT1JURURfQ09ORklHVVJBVElPTlMgREVCVUcpCisgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhUSUZGOjpDWFggUFJPUEVSVElFUworICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFU19ERUJVRyAiQ1hYIgorICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OX0RFQlVHICIke1RJRkZYWF9MSUJSQVJZX0RFQlVHfSIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKIGVuZGlmKCkKIAotbWFya19hc19hZHZhbmNlZChUSUZGX0lOQ0xVREVfRElSIFRJRkZfTElCUkFSWSkKK21hcmtfYXNfYWR2YW5jZWQoVElGRl9JTkNMVURFX0RJUikKK2NtYWtlX3BvbGljeShQT1ApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRUaHJlYWRzLmNtYWtlIGIvTW9kdWxlcy9GaW5kVGhyZWFkcy5jbWFrZQppbmRleCBmOTdlNWM4Li5lZTQ5ODY3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRUaHJlYWRzLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFRocmVhZHMuY21ha2UKQEAgLTIzOCw4ICsyMzgsOCBAQAogCiAgIGlmKFRIUkVBRFNfSEFWRV9QVEhSRUFEX0FSRykKICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFRocmVhZHM6OlRocmVhZHMKLSAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyAiJDwkPENPTVBJTEVfTEFOR1VBR0U6Q1VEQT46U0hFTEw6LVhjb21waWxlciAtcHRocmVhZD4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQ8JDxOT1Q6JDxDT01QSUxFX0xBTkdVQUdFOkNVREE+PjotcHRocmVhZD4iKQorICAgICAgICAgICAgICAgICBQUk9QRVJUWSBJTlRFUkZBQ0VfQ09NUElMRV9PUFRJT05TICIkPCQ8Q09NUElMRV9MQU5HX0FORF9JRDpDVURBLE5WSURJQT46U0hFTEw6LVhjb21waWxlciAtcHRocmVhZD4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQ8JDxOT1Q6JDxDT01QSUxFX0xBTkdfQU5EX0lEOkNVREEsTlZJRElBPj46LXB0aHJlYWQ+IikKICAgZW5kaWYoKQogCiAgIGlmKENNQUtFX1RIUkVBRF9MSUJTX0lOSVQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRWdWxrYW4uY21ha2UgYi9Nb2R1bGVzL0ZpbmRWdWxrYW4uY21ha2UKaW5kZXggNTVkYTU1Zi4uMGVjNjAxMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kVnVsa2FuLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFZ1bGthbi5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRWdWxrYW4KIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIEZpbmQgVnVsa2FuLCB3aGljaCBpcyBhIGxvdy1vdmVyaGVhZCwgY3Jvc3MtcGxhdGZvcm0gM0QgZ3JhcGhpY3MKIGFuZCBjb21wdXRpbmcgQVBJLgogCkBAIC0xNCw2ICsxNiw5IEBACiBUaGlzIG1vZHVsZSBkZWZpbmVzIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldCBgYFZ1bGthbjo6VnVsa2FuYGAsIGlmCiBWdWxrYW4gaGFzIGJlZW4gZm91bmQuCiAKK1RoaXMgbW9kdWxlIGRlZmluZXMgOnByb3BfdGd0OmBJTVBPUlRFRGAgdGFyZ2V0IGBgVnVsa2FuOjpnbHNsY2BgLCBpZgorVnVsa2FuIGFuZCB0aGUgR0xTTEMgU1BJUi1WIGNvbXBpbGVyIGhhcyBiZWVuIGZvdW5kLgorCiBSZXN1bHQgVmFyaWFibGVzCiBeXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTIzLDQ1ICsyOCw2NSBAQAogICBWdWxrYW5fSU5DTFVERV9ESVJTICAgLSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBWdWxrYW4KICAgVnVsa2FuX0xJQlJBUklFUyAgICAgIC0gbGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeSB0byB1c2UgVnVsa2FuCiAKLVRoZSBtb2R1bGUgd2lsbCBhbHNvIGRlZmluZSB0d28gY2FjaGUgdmFyaWFibGVzOjoKK1RoZSBtb2R1bGUgd2lsbCBhbHNvIGRlZmluZSB0aHJlZSBjYWNoZSB2YXJpYWJsZXM6OgogCi0gIFZ1bGthbl9JTkNMVURFX0RJUiAgICAtIHRoZSBWdWxrYW4gaW5jbHVkZSBkaXJlY3RvcnkKLSAgVnVsa2FuX0xJQlJBUlkgICAgICAgIC0gdGhlIHBhdGggdG8gdGhlIFZ1bGthbiBsaWJyYXJ5CisgIFZ1bGthbl9JTkNMVURFX0RJUiAgICAgICAgLSB0aGUgVnVsa2FuIGluY2x1ZGUgZGlyZWN0b3J5CisgIFZ1bGthbl9MSUJSQVJZICAgICAgICAgICAgLSB0aGUgcGF0aCB0byB0aGUgVnVsa2FuIGxpYnJhcnkKKyAgVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUgICAtIHRoZSBwYXRoIHRvIHRoZSBHTFNMIFNQSVItViBjb21waWxlcgorCitIaW50cworXl5eXl4KKworVGhlIGBgVlVMS0FOX1NES2BgIGVudmlyb25tZW50IHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZQorbG9jYXRpb24gb2YgdGhlIFZ1bGthbiBTREsgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBnaXZlbgorYXJjaGl0ZWN0dXJlLiBJdCBpcyB0eXBpY2FsbHkgc2V0IGJ5IHNvdXJjaW5nIHRoZSB0b3BsZXZlbAorYGBzZXR1cC1lbnYuc2hgYCBzY3JpcHQgb2YgdGhlIFZ1bGthbiBTREsgZGlyZWN0b3J5IGludG8gdGhlIHNoZWxsCitlbnZpcm9ubWVudC4KIAogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogaWYoV0lOMzIpCiAgIGZpbmRfcGF0aChWdWxrYW5fSU5DTFVERV9ESVIKICAgICBOQU1FUyB2dWxrYW4vdnVsa2FuLmgKLSAgICBQQVRIUworICAgIEhJTlRTCiAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9JbmNsdWRlIgogICAgICkKIAogICBpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCiAgICAgZmluZF9saWJyYXJ5KFZ1bGthbl9MSUJSQVJZCiAgICAgICBOQU1FUyB2dWxrYW4tMQotICAgICAgUEFUSFMKKyAgICAgIEhJTlRTCiAgICAgICAgICIkRU5We1ZVTEtBTl9TREt9L0xpYiIKICAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vQmluIgotICAgICAgICApCisgICAgICApCisgICAgZmluZF9wcm9ncmFtKFZ1bGthbl9HTFNMQ19FWEVDVVRBQkxFCisgICAgICBOQU1FUyBnbHNsYworICAgICAgSElOVFMKKyAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vQmluIgorICAgICAgKQogICBlbHNlaWYoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA0KQogICAgIGZpbmRfbGlicmFyeShWdWxrYW5fTElCUkFSWQogICAgICAgTkFNRVMgdnVsa2FuLTEKLSAgICAgIFBBVEhTCisgICAgICBISU5UUwogICAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9MaWIzMiIKICAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vQmluMzIiCi0gICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICkKKyAgICAgICkKKyAgICBmaW5kX3Byb2dyYW0oVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUKKyAgICAgIE5BTUVTIGdsc2xjCisgICAgICBISU5UUworICAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9CaW4zMiIKKyAgICAgICkKICAgZW5kaWYoKQogZWxzZSgpCi0gICAgZmluZF9wYXRoKFZ1bGthbl9JTkNMVURFX0RJUgotICAgICAgTkFNRVMgdnVsa2FuL3Z1bGthbi5oCi0gICAgICBQQVRIUwotICAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9pbmNsdWRlIikKLSAgICBmaW5kX2xpYnJhcnkoVnVsa2FuX0xJQlJBUlkKLSAgICAgIE5BTUVTIHZ1bGthbgotICAgICAgUEFUSFMKLSAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vbGliIikKKyAgZmluZF9wYXRoKFZ1bGthbl9JTkNMVURFX0RJUgorICAgIE5BTUVTIHZ1bGthbi92dWxrYW4uaAorICAgIEhJTlRTICIkRU5We1ZVTEtBTl9TREt9L2luY2x1ZGUiKQorICBmaW5kX2xpYnJhcnkoVnVsa2FuX0xJQlJBUlkKKyAgICBOQU1FUyB2dWxrYW4KKyAgICBISU5UUyAiJEVOVntWVUxLQU5fU0RLfS9saWIiKQorICBmaW5kX3Byb2dyYW0oVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUKKyAgICBOQU1FUyBnbHNsYworICAgIEhJTlRTICIkRU5We1ZVTEtBTl9TREt9L2JpbiIpCiBlbmRpZigpCiAKIHNldChWdWxrYW5fTElCUkFSSUVTICR7VnVsa2FuX0xJQlJBUll9KQpAQCAtNzIsNyArOTcsNyBAQAogICBERUZBVUxUX01TRwogICBWdWxrYW5fTElCUkFSWSBWdWxrYW5fSU5DTFVERV9ESVIpCiAKLW1hcmtfYXNfYWR2YW5jZWQoVnVsa2FuX0lOQ0xVREVfRElSIFZ1bGthbl9MSUJSQVJZKQorbWFya19hc19hZHZhbmNlZChWdWxrYW5fSU5DTFVERV9ESVIgVnVsa2FuX0xJQlJBUlkgVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUpCiAKIGlmKFZ1bGthbl9GT1VORCBBTkQgTk9UIFRBUkdFVCBWdWxrYW46OlZ1bGthbikKICAgYWRkX2xpYnJhcnkoVnVsa2FuOjpWdWxrYW4gVU5LTk9XTiBJTVBPUlRFRCkKQEAgLTgwLDMgKzEwNSw4IEBACiAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7VnVsa2FuX0xJQlJBUklFU30iCiAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7VnVsa2FuX0lOQ0xVREVfRElSU30iKQogZW5kaWYoKQorCitpZihWdWxrYW5fRk9VTkQgQU5EIFZ1bGthbl9HTFNMQ19FWEVDVVRBQkxFIEFORCBOT1QgVEFSR0VUIFZ1bGthbjo6Z2xzbGMpCisgIGFkZF9leGVjdXRhYmxlKFZ1bGthbjo6Z2xzbGMgSU1QT1JURUQpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgVnVsa2FuOjpnbHNsYyBQUk9QRVJUWSBJTVBPUlRFRF9MT0NBVElPTiAiJHtWdWxrYW5fR0xTTENfRVhFQ1VUQUJMRX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kWDExLmNtYWtlIGIvTW9kdWxlcy9GaW5kWDExLmNtYWtlCmluZGV4IGIyOGRkMTIuLjk1OGEyMmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFgxMS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRYMTEuY21ha2UKQEAgLTI1LDYgKzI1LDEwIEBACiAgIFgxMV9YYWNjZXNzcnVsZXNfSU5DTFVERV9QQVRILAogICBYMTFfWGFjY2Vzc3N0cl9JTkNMVURFX1BBVEgsICAgICAgICAgICAgICAgICAgICAgICBYMTFfWGFjY2Vzc19GT1VORAogICBYMTFfWGF1X0lOQ0xVREVfUEFUSCwgICAgICAgICAgWDExX1hhdV9MSUIsICAgICAgICBYMTFfWGF1X0ZPVU5ELCAgICAgICAgWDExOjpYYXUKKyAgWDExX3hjYl9JTkNMVURFX1BBVEgsICAgICAgICAgIFgxMV94Y2JfTElCLCAgICAgICAgWDExX3hjYl9GT1VORCwgICAgICAgIFgxMTo6eGNiCisgIFgxMV9YMTFfeGNiX0lOQ0xVREVfUEFUSCwgICAgICBYMTFfWDExX3hjYl9MSUIsICAgIFgxMV9YMTFfeGNiX0ZPVU5ELCAgICBYMTE6OlgxMV94Y2IKKyAgWDExX3hjYl9pY2NjbV9JTkNMVURFX1BBVEgsICAgIFgxMV94Y2JfaWNjY21fTElCLCAgWDExX3hjYl9pY2NjbV9GT1VORCwgIFgxMTo6eGNiX2ljY2NtCisgIFgxMV94Y2JfeGtiX0lOQ0xVREVfUEFUSCwgICAgICBYMTFfeGNiX3hrYl9MSUIsICAgIFgxMV94Y2JfeGtiX0ZPVU5ELCAgICBYMTE6OnhjYl94a2IKICAgWDExX1hjb21wb3NpdGVfSU5DTFVERV9QQVRILCAgIFgxMV9YY29tcG9zaXRlX0xJQiwgWDExX1hjb21wb3NpdGVfRk9VTkQsIFgxMTo6WGNvbXBvc2l0ZQogICBYMTFfWGN1cnNvcl9JTkNMVURFX1BBVEgsICAgICAgWDExX1hjdXJzb3JfTElCLCAgICBYMTFfWGN1cnNvcl9GT1VORCwgICAgWDExOjpYY3Vyc29yCiAgIFgxMV9YZGFtYWdlX0lOQ0xVREVfUEFUSCwgICAgICBYMTFfWGRhbWFnZV9MSUIsICAgIFgxMV9YZGFtYWdlX0ZPVU5ELCAgICBYMTE6OlhkYW1hZ2UKQEAgLTM4LDYgKzQyLDggQEAKICAgWDExX1hpbmVyYW1hX0lOQ0xVREVfUEFUSCwgICAgIFgxMV9YaW5lcmFtYV9MSUIsICAgWDExX1hpbmVyYW1hX0ZPVU5ELCAgIFgxMTo6WGluZXJhbWEKICAgWDExX1hrYl9JTkNMVURFX1BBVEgsCiAgIFgxMV9Ya2JsaWJfSU5DTFVERV9QQVRILCAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMV9Ya2JfRk9VTkQsICAgICAgICBYMTE6OlhrYgorICBYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSCwgICAgWDExX3hrYmNvbW1vbl9MSUIsICBYMTFfeGtiY29tbW9uX0ZPVU5ELCAgWDExOjp4a2Jjb21tb24KKyAgWDExX3hrYmNvbW1vbl9YMTFfSU5DTFVERV9QQVRILFgxMV94a2Jjb21tb25fWDExX0xJQixYMTFfeGtiY29tbW9uX1gxMV9GT1VORCxYMTE6OnhrYmNvbW1vbl9YMTEKICAgWDExX3hrYmZpbGVfSU5DTFVERV9QQVRILCAgICAgIFgxMV94a2JmaWxlX0xJQiwgICAgWDExX3hrYmZpbGVfRk9VTkQsICAgIFgxMTo6eGtiZmlsZQogICBYMTFfWG11X0lOQ0xVREVfUEFUSCwgICAgICAgICAgWDExX1htdV9MSUIsICAgICAgICBYMTFfWG11X0ZPVU5ELCAgICAgICAgWDExOjpYbXUKICAgWDExX1hwbV9JTkNMVURFX1BBVEgsICAgICAgICAgIFgxMV9YcG1fTElCLCAgICAgICAgWDExX1hwbV9GT1VORCwgICAgICAgIFgxMTo6WHBtCkBAIC01Myw2ICs1OSw3IEBACiAgIFgxMV9YU2htX0lOQ0xVREVfUEFUSCwgICAgICAgICAoaW4gWDExX1hleHRfTElCKSwgIFgxMV9YU2htX0ZPVU5ECiAgIFgxMV9Yc2hhcGVfSU5DTFVERV9QQVRILCAgICAgICAoaW4gWDExX1hleHRfTElCKSwgIFgxMV9Yc2hhcGVfRk9VTkQKICAgWDExX1hTeW5jX0lOQ0xVREVfUEFUSCwgICAgICAgIChpbiBYMTFfWGV4dF9MSUIpLCAgWDExX1hTeW5jX0ZPVU5ECisgIFgxMV9YYXdfSU5DTFVERV9QQVRILCAgICAgICAgICBYMTFfWGF3X0xJQiAgICAgICAgIFgxMV9YYXdfRk9VTkQgICAgICAgICBYMTE6OlhhdwogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogaWYgKFVOSVgpCkBAIC05NCw2ICsxMDEsMTAgQEAKICAgZmluZF9wYXRoKFgxMV9YYWNjZXNzcnVsZXNfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1hLQnJ1bGVzLmggICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGFjY2Vzc3N0cl9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWEtCc3RyLmggICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hhdV9JTkNMVURFX1BBVEggWDExL1hhdXRoLmggICAgICAgICAgICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV9YYXdfSU5DTFVERV9QQVRIIFgxMS9YYXcvSW50cmluc2ljLmggICAgICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCisgIGZpbmRfcGF0aChYMTFfeGNiX0lOQ0xVREVfUEFUSCB4Y2IveGNiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQorICBmaW5kX3BhdGgoWDExX1gxMV94Y2JfSU5DTFVERV9QQVRIIFgxMS9YbGliLXhjYi5oICAgICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV94Y2JfaWNjY21fSU5DTFVERV9QQVRIIHhjYi94Y2JfaWNjY20uaCAgICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGNvbXBvc2l0ZV9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hjdXJzb3JfSU5DTFVERV9QQVRIIFgxMS9YY3Vyc29yL1hjdXJzb3IuaCAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKICAgZmluZF9wYXRoKFgxMV9YZGFtYWdlX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9YZGFtYWdlLmggICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCkBAIC0xMDcsNiArMTE4LDggQEAKICAgZmluZF9wYXRoKFgxMV9YaV9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWElucHV0LmggICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGluZXJhbWFfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1hpbmVyYW1hLmggICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hrYl9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWEtCLmggICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV94a2Jjb21tb25fSU5DTFVERV9QQVRIIHhrYmNvbW1vbi94a2Jjb21tb24uaCAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCisgIGZpbmRfcGF0aChYMTFfeGtiY29tbW9uX1gxMV9JTkNMVURFX1BBVEggeGtiY29tbW9uL3hrYmNvbW1vbi14MTEuaCAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hrYmxpYl9JTkNMVURFX1BBVEggWDExL1hLQmxpYi5oICAgICAgICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKICAgZmluZF9wYXRoKFgxMV94a2JmaWxlX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9YS0JmaWxlLmggICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWG11X0lOQ0xVREVfUEFUSCBYMTEvWG11L1htdS5oICAgICAgICAgICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQpAQCAtMTIzLDYgKzEzNiw4IEBACiAgIGZpbmRfcGF0aChYMTFfWHZfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1h2bGliLmggICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hTeW5jX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9zeW5jLmggICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKIAorCisKICAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgc2V0KFgxMV9YaW5wdXRfSU5DTFVERV9QQVRIICIke1gxMV9YaV9JTkNMVURFX1BBVEh9IikKICAgc2V0KFgxMV94Zjg2bWlzY19JTkNMVURFX1BBVEggIiR7WDExX1h4Zjg2bWlzY19JTkNMVURFX1BBVEh9IikKQEAgLTEzNyw2ICsxNTIsMTEgQEAKICAgZmluZF9saWJyYXJ5KFgxMV9JQ0VfTElCIElDRSAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfU01fTElCIFNNICAgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hhdV9MSUIgWGF1ICAgICAgICAgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9saWJyYXJ5KFgxMV9YYXdfTElCIFhhdyAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGNiX0xJQiB4Y2IgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQorICBmaW5kX2xpYnJhcnkoWDExX1gxMV94Y2JfTElCIFgxMS14Y2IgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9saWJyYXJ5KFgxMV94Y2JfaWNjY21fTElCIHhjYi1pY2NjbSAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGNiX3hrYl9MSUIgeGNiLXhrYiAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hjb21wb3NpdGVfTElCIFhjb21wb3NpdGUgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YY3Vyc29yX0xJQiBYY3Vyc29yICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfWGRhbWFnZV9MSUIgWGRhbWFnZSAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQpAQCAtMTQ2LDYgKzE2Niw4IEBACiAgIGZpbmRfbGlicmFyeShYMTFfWGZ0X0xJQiBYZnQgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hpX0xJQiBYaSAgICAgICAgICAgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YaW5lcmFtYV9MSUIgWGluZXJhbWEgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGtiY29tbW9uX0xJQiB4a2Jjb21tb24gICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQorICBmaW5kX2xpYnJhcnkoWDExX3hrYmNvbW1vbl9YMTFfTElCIHhrYmNvbW1vbi14MTEgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX3hrYmZpbGVfTElCIHhrYmZpbGUgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YbXVfTElCIFhtdSAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfWHBtX0xJQiBYcG0gICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQpAQCAtMjIxLDYgKzI0MywyMiBAQAogICAgIHNldChYMTFfWGF1X0ZPVU5EIFRSVUUpCiAgIGVuZGlmICgpCiAKKyAgaWYgKFgxMV94Y2JfTElCIEFORCBYMTFfeGNiX0lOQ0xVREVfUEFUSCkKKyAgICBzZXQoWDExX3hjYl9GT1VORCBUUlVFKQorICBlbmRpZiAoKQorCisgIGlmIChYMTFfWDExX3hjYl9MSUIgQU5EIFgxMV9YMTFfeGNiX0lOQ0xVREVfUEFUSCkKKyAgICBzZXQoWDExX1gxMV94Y2JfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hjYl9pY2NjbV9MSUIgQU5EIFgxMV94Y2JfaWNjY21fSU5DTFVERV9QQVRIKQorICAgIHNldChYMTFfeGNiX2ljY2NtX0ZPVU5EIFRSVUUpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94Y2JfeGtiX0xJQikKKyAgICBzZXQoWDExX3hjYl94a2JfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX1hkbWNwX0lOQ0xVREVfUEFUSCBBTkQgWDExX1hkbWNwX0xJQikKICAgICAgIHNldChYMTFfWGRtY3BfRk9VTkQgVFJVRSkKICAgICAgIGxpc3QoQVBQRU5EIFgxMV9JTkNMVURFX0RJUiAke1gxMV9YZG1jcF9JTkNMVURFX1BBVEh9KQpAQCAtMzI2LDYgKzM2NCwxNCBAQAogICAgICBsaXN0KEFQUEVORCBYMTFfSU5DTFVERV9ESVIgJHtYMTFfWGtiX0lOQ0xVREVfUEFUSH0gKQogICBlbmRpZiAoKQogCisgIGlmIChYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSCBBTkQgWDExX3hrYmNvbW1vbl9MSUIpCisgICAgIHNldChYMTFfeGtiY29tbW9uX0ZPVU5EIFRSVUUpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94a2Jjb21tb25fWDExX0lOQ0xVREVfUEFUSCBBTkQgWDExX3hrYmNvbW1vbl9YMTFfTElCKQorICAgICBzZXQoWDExX3hrYmNvbW1vbl9YMTFfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX3hrYmZpbGVfSU5DTFVERV9QQVRIIEFORCBYMTFfeGtiZmlsZV9MSUIgQU5EIFgxMV9YbGliX0lOQ0xVREVfUEFUSCkKICAgICAgc2V0KFgxMV94a2JmaWxlX0ZPVU5EIFRSVUUpCiAgICAgICMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCkBAIC0zNTEsNiArMzk3LDEwIEBACiAgICAgIHNldChYMTFfU01fRk9VTkQgVFJVRSkKICAgZW5kaWYoKQogCisgIGlmKFgxMV9YYXdfTElCIEFORCBYMTFfWGF3X0lOQ0xVREVfUEFUSCkKKyAgICAgIHNldChYMTFfWGF3X0ZPVU5EIFRSVUUpCisgIGVuZGlmKCkKKwogICAjIE1vc3Qgb2YgdGhlIFgxMSBoZWFkZXJzIHdpbGwgYmUgaW4gdGhlIHNhbWUgZGlyZWN0b3JpZXMsIGF2b2lkCiAgICMgY3JlYXRpbmcgYSBodWdlIGxpc3Qgb2YgZHVwbGljYXRlcy4KICAgaWYgKFgxMV9JTkNMVURFX0RJUikKQEAgLTQ3OCw2ICs1MjgsNDMgQEAKICAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1gxMV9YYXVfSU5DTFVERV9QQVRIfSIpCiAgIGVuZGlmICgpCiAKKyAgaWYgKFgxMV9YYXdfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjpYYXcpCisgICAgYWRkX2xpYnJhcnkoWDExOjpYYXcgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjpYYXcgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX1hhd19MSUJ9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7WDExX1hhd19JTkNMVURFX1BBVEh9IgorICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTICJYMTE6OlhleHQ7WDExOjpYbXU7WDExOjpYdDtYMTE6OlhwbTtYMTE6OlgxMSIpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94Y2JfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4Y2IpCisgICAgYWRkX2xpYnJhcnkoWDExOjp4Y2IgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjp4Y2IgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX3hjYl9MSUJ9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7WDExX3hjYl9JTkNMVURFX1BBVEh9IikKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX1gxMV94Y2JfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjpYMTFfeGNiKQorICAgIGFkZF9saWJyYXJ5KFgxMTo6WDExX3hjYiBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OlgxMV94Y2IgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX1gxMV94Y2JfTElCfSIKKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1gxMV9YMTFfeGNiX0lOQ0xVREVfUEFUSH0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6eGNiO1gxMTo6WDExIikKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hjYl9pY2NjbV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhjYl9pY2NjbSkKKyAgICBhZGRfbGlicmFyeShYMTE6OnhjYl9pY2NjbSBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhjYl9pY2NjbSBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtYMTFfeGNiX2ljY2NtX0xJQn0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6eGNiIikKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hjYl94a2JfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4Y2JfeGtiKQorICAgIGFkZF9saWJyYXJ5KFgxMTo6eGNiX3hrYiBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhjYl94a2IgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX3hjYl94a2JfTElCfSIKKyAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiWDExOjp4Y2IiKQorICBlbmRpZiAoKQorCiAgIGlmIChYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6Olhjb21wb3NpdGUpCiAgICAgYWRkX2xpYnJhcnkoWDExOjpYY29tcG9zaXRlIFVOS05PV04gSU1QT1JURUQpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFgxMTo6WGNvbXBvc2l0ZSBQUk9QRVJUSUVTCkBAIC01NzIsNiArNjU5LDIxIEBACiAgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6WDExIikKICAgZW5kaWYgKCkKIAorICBpZiAoWDExX3hrYmNvbW1vbl9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhrYmNvbW1vbikKKyAgICBhZGRfbGlicmFyeShYMTE6OnhrYmNvbW1vbiBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhrYmNvbW1vbiBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtYMTFfeGtiY29tbW9uX0xJQn0iCisgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSH0iKQorICBlbmRpZiAoKQorCisgIGlmIChYMTFfeGtiY29tbW9uX1gxMV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhrYmNvbW1vbl9YMTEpCisgICAgYWRkX2xpYnJhcnkoWDExOjp4a2Jjb21tb25fWDExIFVOS05PV04gSU1QT1JURUQpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFgxMTo6eGtiY29tbW9uX1gxMSBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtYMTFfeGtiY29tbW9uX1gxMV9MSUJ9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7WDExX3hrYmNvbW1vbl9YMTFfSU5DTFVERV9QQVRIfSIKKyAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiWDExOjpYMTE7WDExOjp4a2Jjb21tb24iKQorICBlbmRpZiAoKQorCiAgIGlmIChYMTFfeGtiZmlsZV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhrYmZpbGUpCiAgICAgYWRkX2xpYnJhcnkoWDExOjp4a2JmaWxlIFVOS05PV04gSU1QT1JURUQpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFgxMTo6eGtiZmlsZSBQUk9QRVJUSUVTCkBAIC02NjgsNiArNzcwLDExIEBACiAgICAgWDExX1hleHRfTElCCiAgICAgWDExX1hhdV9MSUIKICAgICBYMTFfWGF1X0lOQ0xVREVfUEFUSAorICAgIFgxMV94Y2JfTElCCisgICAgWDExX3hjYl9JTkNMVURFX1BBVEgKKyAgICBYMTFfeGNiX3hrYl9MSUIKKyAgICBYMTFfWDExX3hjYl9MSUIKKyAgICBYMTFfWDExX3hjYl9JTkNMVURFX1BBVEgKICAgICBYMTFfWGxpYl9JTkNMVURFX1BBVEgKICAgICBYMTFfWHV0aWxfSU5DTFVERV9QQVRICiAgICAgWDExX1hjb21wb3NpdGVfSU5DTFVERV9QQVRICkBAIC03MDQsNiArODExLDEwIEBACiAgICAgWDExX1hkbWNwX0lOQ0xVREVfUEFUSAogICAgIFgxMV9Ya2JfSU5DTFVERV9QQVRICiAgICAgWDExX1hrYmxpYl9JTkNMVURFX1BBVEgKKyAgICBYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSAorICAgIFgxMV94a2Jjb21tb25fTElCCisgICAgWDExX3hrYmNvbW1vbl9YMTFfSU5DTFVERV9QQVRICisgICAgWDExX3hrYmNvbW1vbl9YMTFfTElCCiAgICAgWDExX3hrYmZpbGVfSU5DTFVERV9QQVRICiAgICAgWDExX3hrYmZpbGVfTElCCiAgICAgWDExX1htdV9JTkNMVURFX1BBVEgKQEAgLTcyMyw2ICs4MzQsOCBAQAogICAgIFgxMV9TTV9MSUIKICAgICBYMTFfU01fSU5DTFVERV9QQVRICiAgICAgWDExX1hTeW5jX0lOQ0xVREVfUEFUSAorICAgIFgxMV9YYXdfTElCCisgICAgWDExX1hhd19JTkNMVURFX1BBVEgKICAgKQogICBzZXQoQ01BS0VfRklORF9GUkFNRVdPUksgJHtDTUFLRV9GSU5EX0ZSQU1FV09SS19TQVZFfSkKICAgc2V0KENNQUtFX1JFUVVJUkVEX1FVSUVUICR7Q01BS0VfUkVRVUlSRURfUVVJRVRfU0FWRX0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRYQ1Rlc3QuY21ha2UgYi9Nb2R1bGVzL0ZpbmRYQ1Rlc3QuY21ha2UKaW5kZXggMTU3MjFlMS4uMWY2ZTgyNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kWENUZXN0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFhDVGVzdC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRYQ1Rlc3QKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIEZ1bmN0aW9ucyB0byBoZWxwIGNyZWF0aW5nIGFuZCBleGVjdXRpbmcgWENUZXN0IGJ1bmRsZXMuCiAKIEFuIFhDVGVzdCBidW5kbGUgaXMgYSBDRkJ1bmRsZSB3aXRoIGEgc3BlY2lhbCBwcm9kdWN0LXR5cGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFhhbGFuQy5jbWFrZSBiL01vZHVsZXMvRmluZFhhbGFuQy5jbWFrZQppbmRleCAzYWRhYTQ0Li5jYTkxOTVjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRYYWxhbkMuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kWGFsYW5DLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZFhhbGFuQwogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIEZpbmQgdGhlIEFwYWNoZSBYYWxhbi1DKysgWFNMIHRyYW5zZm9ybSBwcm9jZXNzb3IgaGVhZGVycyBhbmQgbGlicmFyaWVzLgogCiBJbXBvcnRlZCB0YXJnZXRzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRYZXJjZXNDLmNtYWtlIGIvTW9kdWxlcy9GaW5kWGVyY2VzQy5jbWFrZQppbmRleCA0N2JmZDYyLi5hYmUxOGMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRYZXJjZXNDLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFhlcmNlc0MuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kWGVyY2VzQwogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIEZpbmQgdGhlIEFwYWNoZSBYZXJjZXMtQysrIHZhbGlkYXRpbmcgWE1MIHBhcnNlciBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuCiAKIEltcG9ydGVkIHRhcmdldHMKQEAgLTgxLDEwICs4MywxNCBAQAogaWYoTk9UIFhlcmNlc0NfTElCUkFSWSkKICAgIyBGaW5kIGFsbCBYZXJjZXNDIGxpYnJhcmllcwogICBmaW5kX2xpYnJhcnkoWGVyY2VzQ19MSUJSQVJZX1JFTEVBU0UKLSAgICAgICAgICAgICAgIE5BTUVTICJ4ZXJjZXMtYyIgInhlcmNlcy1jXyR7WGVyY2VzQ19WRVJTSU9OX01BSk9SfSIKKyAgICAgICAgICAgICAgIE5BTUVTICJ4ZXJjZXMtYyIKKyAgICAgICAgICAgICAgICAgICAgICJ4ZXJjZXMtY18ke1hlcmNlc0NfVkVSU0lPTl9NQUpPUn0iCisgICAgICAgICAgICAgICAgICAgICAieGVyY2VzLWMtJHtYZXJjZXNDX1ZFUlNJT05fTUFKT1J9LiR7WGVyY2VzQ19WRVJTSU9OX01JTk9SfSIKICAgICAgICAgICAgICAgIERPQyAiWGVyY2VzLUMrKyBsaWJyYXJpZXMgKHJlbGVhc2UpIikKICAgZmluZF9saWJyYXJ5KFhlcmNlc0NfTElCUkFSWV9ERUJVRwotICAgICAgICAgICAgICAgTkFNRVMgInhlcmNlcy1jZCIgInhlcmNlcy1jXyR7WGVyY2VzQ19WRVJTSU9OX01BSk9SfUQiICJ4ZXJjZXMtY18ke1hlcmNlc0NfVkVSU0lPTl9NQUpPUn1fJHtYZXJjZXNDX1ZFUlNJT05fTUlOT1J9RCIKKyAgICAgICAgICAgICAgIE5BTUVTICJ4ZXJjZXMtY2QiCisgICAgICAgICAgICAgICAgICAgICAieGVyY2VzLWNfJHtYZXJjZXNDX1ZFUlNJT05fTUFKT1J9RCIKKyAgICAgICAgICAgICAgICAgICAgICJ4ZXJjZXMtY18ke1hlcmNlc0NfVkVSU0lPTl9NQUpPUn1fJHtYZXJjZXNDX1ZFUlNJT05fTUlOT1J9RCIKICAgICAgICAgICAgICAgIERPQyAiWGVyY2VzLUMrKyBsaWJyYXJpZXMgKGRlYnVnKSIpCiAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9TZWxlY3RMaWJyYXJ5Q29uZmlndXJhdGlvbnMuY21ha2UpCiAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKFhlcmNlc0MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0IGIvTW9kdWxlcy9Gb3J0cmFuQ0ludGVyZmFjZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzODEwODBiLi4xM2U0NDk4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CisrKyBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvQ01ha2VMaXN0cy50eHQKQEAgLTEwMSwzICsxMDEsNyBAQAogIyBSZXF1aXJlIHN5bWJvbHMgdGhyb3VnaCBGb3J0cmFuLgogYWRkX2V4ZWN1dGFibGUoRm9ydHJhbkNJbnRlcmZhY2UgbWFpbi5GIGNhbGxfc3ViLmYgJHtjYWxsX21vZH0pCiB0YXJnZXRfbGlua19saWJyYXJpZXMoRm9ydHJhbkNJbnRlcmZhY2UgUFVCTElDIHN5bWJvbHMpCisKK2ZpbGUoR0VORVJBVEUgT1VUUFVUIGV4ZS0kPENPTkZJRz4uY21ha2UgQ09OVEVOVCBbWworc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSAiJDxUQVJHRVRfRklMRTpGb3J0cmFuQ0ludGVyZmFjZT4iKQorXV0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0RldGVjdC5jbWFrZSBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvRGV0ZWN0LmNtYWtlCmluZGV4IDMzZGU2YzYuLmM3NTA2N2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvRGV0ZWN0LmNtYWtlCisrKyBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvRGV0ZWN0LmNtYWtlCkBAIC00MywxNyArNDMsMTEgQEAKIHVuc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0NPTVBJTEVEIENBQ0hFKQogCiAjIExvY2F0ZSB0aGUgc2FtcGxlIHByb2plY3QgZXhlY3V0YWJsZS4KK3NldChGb3J0cmFuQ0ludGVyZmFjZV9FWEUpCiBpZihGb3J0cmFuQ0ludGVyZmFjZV9DT01QSUxFRCkKLSAgZmluZF9wcm9ncmFtKEZvcnRyYW5DSW50ZXJmYWNlX0VYRQotICAgIE5BTUVTIEZvcnRyYW5DSW50ZXJmYWNlJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0KLSAgICBQQVRIUyAke0ZvcnRyYW5DSW50ZXJmYWNlX0JJTkFSWV9ESVJ9ICR7Rm9ydHJhbkNJbnRlcmZhY2VfQklOQVJZX0RJUn0vUmVsZWFzZQotICAgIE5PX0RFRkFVTFRfUEFUSAotICAgICkKLSAgc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSAke0ZvcnRyYW5DSW50ZXJmYWNlX0VYRX0pCi0gIHVuc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSBDQUNIRSkKKyAgaW5jbHVkZSgke0ZvcnRyYW5DSW50ZXJmYWNlX0JJTkFSWV9ESVJ9L2V4ZS1SZWxlYXNlLmNtYWtlIE9QVElPTkFMKQogZWxzZSgpCiAgIHNldChfcmVzdWx0ICJGYWlsZWQgdG8gY29tcGlsZSIpCi0gIHNldChGb3J0cmFuQ0ludGVyZmFjZV9FWEUpCiAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAiRm9ydHJhbi9DIGludGVyZmFjZSB0ZXN0IHByb2plY3QgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgIiR7Rm9ydHJhbkNJbnRlcmZhY2VfT1VUUFVUfVxuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvR29vZ2xlVGVzdC5jbWFrZSBiL01vZHVsZXMvR29vZ2xlVGVzdC5jbWFrZQppbmRleCBhNWJiODYzLi4yZWY3MzgyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0dvb2dsZVRlc3QuY21ha2UKKysrIGIvTW9kdWxlcy9Hb29nbGVUZXN0LmNtYWtlCkBAIC01LDYgKzUsOCBAQAogR29vZ2xlVGVzdAogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogVGhpcyBtb2R1bGUgZGVmaW5lcyBmdW5jdGlvbnMgdG8gaGVscCB1c2UgdGhlIEdvb2dsZSBUZXN0IGluZnJhc3RydWN0dXJlLiAgVHdvCiBtZWNoYW5pc21zIGZvciBhZGRpbmcgdGVzdHMgYXJlIHByb3ZpZGVkLiA6Y29tbWFuZDpgZ3Rlc3RfYWRkX3Rlc3RzYCBoYXMgYmVlbgogYXJvdW5kIGZvciBzb21lIHRpbWUsIG9yaWdpbmFsbHkgdmlhIGBgZmluZF9wYWNrYWdlKEdUZXN0KWBgLgpAQCAtMTUxLDkgKzE1MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFtQUk9QRVJUSUVTIG5hbWUxIHZhbHVlMS4uLl0KICAgICAgICAgICAgICAgICAgICAgICAgICBbVEVTVF9MSVNUIHZhcl0KICAgICAgICAgICAgICAgICAgICAgICAgICBbRElTQ09WRVJZX1RJTUVPVVQgc2Vjb25kc10KKyAgICAgICAgICAgICAgICAgICAgICAgICBbWE1MX09VVFBVVF9ESVIgZGlyXQorICAgICAgICAgICAgICAgICAgICAgICAgIFtESVNDT1ZFUllfTU9ERSA8UE9TVF9CVUlMRHxQUkVfVEVTVD5dCiAgICAgKQogCi0gIGBgZ3Rlc3RfZGlzY292ZXJfdGVzdHNgYCBzZXRzIHVwIGEgcG9zdC1idWlsZCBjb21tYW5kIG9uIHRoZSB0ZXN0IGV4ZWN1dGFibGUKKyAgYGBndGVzdF9kaXNjb3Zlcl90ZXN0cygpYGAgc2V0cyB1cCBhIHBvc3QtYnVpbGQgY29tbWFuZCBvbiB0aGUgdGVzdCBleGVjdXRhYmxlCiAgIHRoYXQgZ2VuZXJhdGVzIHRoZSBsaXN0IG9mIHRlc3RzIGJ5IHBhcnNpbmcgdGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgdGhlIHRlc3QKICAgd2l0aCB0aGUgYGAtLWd0ZXN0X2xpc3RfdGVzdHNgYCBhcmd1bWVudC4gIENvbXBhcmVkIHRvIHRoZSBzb3VyY2UgcGFyc2luZwogICBhcHByb2FjaCBvZiA6Y29tbWFuZDpgZ3Rlc3RfYWRkX3Rlc3RzYCwgdGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZ1bGwgbGlzdCBvZgpAQCAtMjEwLDcgKzIxNCw3IEBACiAKICAgYGBQUk9QRVJUSUVTIG5hbWUxIHZhbHVlMS4uLmBgCiAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBzZXQgb24gYWxsIHRlc3RzIGRpc2NvdmVyZWQgYnkgdGhpcwotICAgIGludm9jYXRpb24gb2YgYGBndGVzdF9kaXNjb3Zlcl90ZXN0c2BgLgorICAgIGludm9jYXRpb24gb2YgYGBndGVzdF9kaXNjb3Zlcl90ZXN0cygpYGAuCiAKICAgYGBURVNUX0xJU1QgdmFyYGAKICAgICBNYWtlIHRoZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUgYGB2YXJgYCwgcmF0aGVyIHRoYW4gdGhlCkBAIC0yMzYsNiArMjQwLDI5IEBACiAgICAgICBwcm9ibGVtLiAgVGhlIGFtYmlndW91cyBiZWhhdmlvciBvZiB0aGUgYGBUSU1FT1VUYGAga2V5d29yZCBpbiAzLjEwLjEKICAgICAgIGFuZCAzLjEwLjIgaGFzIG5vdCBiZWVuIHByZXNlcnZlZC4KIAorICBgYFhNTF9PVVRQVVRfRElSIGRpcmBgCisgICAgSWYgc3BlY2lmaWVkLCB0aGUgcGFyYW1ldGVyIGlzIHBhc3NlZCBhbG9uZyB3aXRoIGBgLS1ndGVzdF9vdXRwdXQ9eG1sOmBgCisgICAgdG8gdGVzdCBleGVjdXRhYmxlLiBUaGUgYWN0dWFsIGZpbGUgbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgdGVzdCB0YXJnZXQsCisgICAgaW5jbHVkaW5nIHByZWZpeCBhbmQgc3VmZml4LiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YKKyAgICBgYEVYVFJBX0FSR1MgLS1ndGVzdF9vdXRwdXQ9eG1sYGAgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdyaXRpbmcgdGhlCisgICAgWE1MIHJlc3VsdCBvdXRwdXQgd2hlbiB1c2luZyBwYXJhbGxlbCB0ZXN0IGV4ZWN1dGlvbi4KKworICBgYERJU0NPVkVSWV9NT0RFYGAKKyAgICBQcm92aWRlcyBncmVhdGVyIGNvbnRyb2wgb3ZlciB3aGVuIGBgZ3Rlc3RfZGlzY292ZXJfdGVzdHMoKWBgIHBlcmZvcm1zIHRlc3QKKyAgICBkaXNjb3ZlcnkuIEJ5IGRlZmF1bHQsIGBgUE9TVF9CVUlMRGBgIHNldHMgdXAgYSBwb3N0LWJ1aWxkIGNvbW1hbmQKKyAgICB0byBwZXJmb3JtIHRlc3QgZGlzY292ZXJ5IGF0IGJ1aWxkIHRpbWUuIEluIGNlcnRhaW4gc2NlbmFyaW9zLCBsaWtlCisgICAgY3Jvc3MtY29tcGlsaW5nLCB0aGlzIGBgUE9TVF9CVUlMRGBgIGJlaGF2aW9yIGlzIG5vdCBkZXNpcmFibGUuCisgICAgQnkgY29udHJhc3QsIGBgUFJFX1RFU1RgYCBkZWxheXMgdGVzdCBkaXNjb3ZlcnkgdW50aWwganVzdCBwcmlvciB0byB0ZXN0CisgICAgZXhlY3V0aW9uLiBUaGlzIHdheSB0ZXN0IGRpc2NvdmVyeSBvY2N1cnMgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudAorICAgIHdoZXJlIHRoZSB0ZXN0IGhhcyBhIGJldHRlciBjaGFuY2UgYXQgZmluZGluZyBhcHByb3ByaWF0ZSBydW50aW1lCisgICAgZGVwZW5kZW5jaWVzLgorCisgICAgYGBESVNDT1ZFUllfTU9ERWBgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICBgYENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFYGAgdmFyaWFibGUgaWYgaXQgaXMgbm90CisgICAgcGFzc2VkIHdoZW4gY2FsbGluZyBgYGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzKClgYC4gVGhpcyBwcm92aWRlcyBhIG1lY2hhbmlzbQorICAgIGZvciBnbG9iYWxseSBzZWxlY3RpbmcgYSBwcmVmZXJyZWQgdGVzdCBkaXNjb3ZlcnkgYmVoYXZpb3Igd2l0aG91dCBoYXZpbmcKKyAgICB0byBtb2RpZnkgZWFjaCBjYWxsIHNpdGUuCisKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKICMgU2F2ZSBwcm9qZWN0J3MgcG9saWNpZXMKQEAgLTM2OCwxMSArMzk1LDEyIEBACiBlbmRmdW5jdGlvbigpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogZnVuY3Rpb24oZ3Rlc3RfZGlzY292ZXJfdGVzdHMgVEFSR0VUKQogICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoCiAgICAgIiIKICAgICAiTk9fUFJFVFRZX1RZUEVTO05PX1BSRVRUWV9WQUxVRVMiCi0gICAgIlRFU1RfUFJFRklYO1RFU1RfU1VGRklYO1dPUktJTkdfRElSRUNUT1JZO1RFU1RfTElTVDtESVNDT1ZFUllfVElNRU9VVCIKKyAgICAiVEVTVF9QUkVGSVg7VEVTVF9TVUZGSVg7V09SS0lOR19ESVJFQ1RPUlk7VEVTVF9MSVNUO0RJU0NPVkVSWV9USU1FT1VUO1hNTF9PVVRQVVRfRElSO0RJU0NPVkVSWV9NT0RFIgogICAgICJFWFRSQV9BUkdTO1BST1BFUlRJRVMiCiAgICAgJHtBUkdOfQogICApCkBAIC0zODYsNiArNDE0LDEyIEBACiAgIGlmKE5PVCBfRElTQ09WRVJZX1RJTUVPVVQpCiAgICAgc2V0KF9ESVNDT1ZFUllfVElNRU9VVCA1KQogICBlbmRpZigpCisgIGlmKE5PVCBfRElTQ09WRVJZX01PREUpCisgICAgaWYoTk9UIENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFKQorICAgICAgc2V0KENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFICJQT1NUX0JVSUxEIikKKyAgICBlbmRpZigpCisgICAgc2V0KF9ESVNDT1ZFUllfTU9ERSAke0NNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFfSkKKyAgZW5kaWYoKQogCiAgIGdldF9wcm9wZXJ0eSgKICAgICBoYXNfY291bnRlcgpAQCAtNDE3LDM0ICs0NTEsODYgQEAKICAgICBUQVJHRVQgJHtUQVJHRVR9CiAgICAgUFJPUEVSVFkgQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IKICAgKQotICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgVEFSR0VUICR7VEFSR0VUfSBQT1NUX0JVSUxECi0gICAgQllQUk9EVUNUUyAiJHtjdGVzdF90ZXN0c19maWxlfSIKLSAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IgotICAgICAgICAgICAgLUQgIlRFU1RfVEFSR0VUPSR7VEFSR0VUfSIKLSAgICAgICAgICAgIC1EICJURVNUX0VYRUNVVEFCTEU9JDxUQVJHRVRfRklMRToke1RBUkdFVH0+IgotICAgICAgICAgICAgLUQgIlRFU1RfRVhFQ1VUT1I9JHtjcm9zc2NvbXBpbGluZ19lbXVsYXRvcn0iCi0gICAgICAgICAgICAtRCAiVEVTVF9XT1JLSU5HX0RJUj0ke19XT1JLSU5HX0RJUkVDVE9SWX0iCi0gICAgICAgICAgICAtRCAiVEVTVF9FWFRSQV9BUkdTPSR7X0VYVFJBX0FSR1N9IgotICAgICAgICAgICAgLUQgIlRFU1RfUFJPUEVSVElFUz0ke19QUk9QRVJUSUVTfSIKLSAgICAgICAgICAgIC1EICJURVNUX1BSRUZJWD0ke19URVNUX1BSRUZJWH0iCi0gICAgICAgICAgICAtRCAiVEVTVF9TVUZGSVg9JHtfVEVTVF9TVUZGSVh9IgotICAgICAgICAgICAgLUQgIk5PX1BSRVRUWV9UWVBFUz0ke19OT19QUkVUVFlfVFlQRVN9IgotICAgICAgICAgICAgLUQgIk5PX1BSRVRUWV9WQUxVRVM9JHtfTk9fUFJFVFRZX1ZBTFVFU30iCi0gICAgICAgICAgICAtRCAiVEVTVF9MSVNUPSR7X1RFU1RfTElTVH0iCi0gICAgICAgICAgICAtRCAiQ1RFU1RfRklMRT0ke2N0ZXN0X3Rlc3RzX2ZpbGV9IgotICAgICAgICAgICAgLUQgIlRFU1RfRElTQ09WRVJZX1RJTUVPVVQ9JHtfRElTQ09WRVJZX1RJTUVPVVR9IgotICAgICAgICAgICAgLVAgIiR7X0dPT0dMRVRFU1RfRElTQ09WRVJfVEVTVFNfU0NSSVBUfSIKLSAgICBWRVJCQVRJTQotICApCiAKLSAgZmlsZShXUklURSAiJHtjdGVzdF9pbmNsdWRlX2ZpbGV9IgotICAgICJpZihFWElTVFMgXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpXG4iCi0gICAgIiAgaW5jbHVkZShcIiR7Y3Rlc3RfdGVzdHNfZmlsZX1cIilcbiIKLSAgICAiZWxzZSgpXG4iCi0gICAgIiAgYWRkX3Rlc3QoJHtUQVJHRVR9X05PVF9CVUlMVCAke1RBUkdFVH1fTk9UX0JVSUxUKVxuIgotICAgICJlbmRpZigpXG4iCi0gICkKKyAgaWYoX0RJU0NPVkVSWV9NT0RFIFNUUkVRVUFMICJQT1NUX0JVSUxEIikKKyAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgICBUQVJHRVQgJHtUQVJHRVR9IFBPU1RfQlVJTEQKKyAgICAgIEJZUFJPRFVDVFMgIiR7Y3Rlc3RfdGVzdHNfZmlsZX0iCisgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9UQVJHRVQ9JHtUQVJHRVR9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9FWEVDVVRBQkxFPSQ8VEFSR0VUX0ZJTEU6JHtUQVJHRVR9PiIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfRVhFQ1VUT1I9JHtjcm9zc2NvbXBpbGluZ19lbXVsYXRvcn0iCisgICAgICAgICAgICAgIC1EICJURVNUX1dPUktJTkdfRElSPSR7X1dPUktJTkdfRElSRUNUT1JZfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfRVhUUkFfQVJHUz0ke19FWFRSQV9BUkdTfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfUFJPUEVSVElFUz0ke19QUk9QRVJUSUVTfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfUFJFRklYPSR7X1RFU1RfUFJFRklYfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfU1VGRklYPSR7X1RFU1RfU1VGRklYfSIKKyAgICAgICAgICAgICAgLUQgIk5PX1BSRVRUWV9UWVBFUz0ke19OT19QUkVUVFlfVFlQRVN9IgorICAgICAgICAgICAgICAtRCAiTk9fUFJFVFRZX1ZBTFVFUz0ke19OT19QUkVUVFlfVkFMVUVTfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfTElTVD0ke19URVNUX0xJU1R9IgorICAgICAgICAgICAgICAtRCAiQ1RFU1RfRklMRT0ke2N0ZXN0X3Rlc3RzX2ZpbGV9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9ESVNDT1ZFUllfVElNRU9VVD0ke19ESVNDT1ZFUllfVElNRU9VVH0iCisgICAgICAgICAgICAgIC1EICJURVNUX1hNTF9PVVRQVVRfRElSPSR7X1hNTF9PVVRQVVRfRElSfSIKKyAgICAgICAgICAgICAgLVAgIiR7X0dPT0dMRVRFU1RfRElTQ09WRVJfVEVTVFNfU0NSSVBUfSIKKyAgICAgIFZFUkJBVElNCisgICAgKQorCisgICAgZmlsZShXUklURSAiJHtjdGVzdF9pbmNsdWRlX2ZpbGV9IgorICAgICAgImlmKEVYSVNUUyBcIiR7Y3Rlc3RfdGVzdHNfZmlsZX1cIilcbiIKKyAgICAgICIgIGluY2x1ZGUoXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpXG4iCisgICAgICAiZWxzZSgpXG4iCisgICAgICAiICBhZGRfdGVzdCgke1RBUkdFVH1fTk9UX0JVSUxUICR7VEFSR0VUfV9OT1RfQlVJTFQpXG4iCisgICAgICAiZW5kaWYoKVxuIgorICAgICkKKyAgZWxzZWlmKF9ESVNDT1ZFUllfTU9ERSBTVFJFUVVBTCAiUFJFX1RFU1QiKQorCisgICAgZ2V0X3Byb3BlcnR5KEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcgR0xPQkFMCisgICAgICAgIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcKKyAgICApCisKKyAgICBpZihHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgICAgc2V0KGN0ZXN0X3Rlc3RzX2ZpbGUgIiR7Y3Rlc3RfZmlsZV9iYXNlfV90ZXN0cy0kPENPTkZJRz4uY21ha2UiKQorICAgIGVuZGlmKCkKKworICAgIHN0cmluZyhDT05DQVQgY3Rlc3RfaW5jbHVkZV9jb250ZW50CisgICAgICAiaWYoRVhJU1RTIFwiJDxUQVJHRVRfRklMRToke1RBUkdFVH0+XCIpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICIgIGlmKFwiJDxUQVJHRVRfRklMRToke1RBUkdFVH0+XCIgSVNfTkVXRVJfVEhBTiBcIiR7Y3Rlc3RfdGVzdHNfZmlsZX1cIikiICAgIlxuIgorICAgICAgIiAgICBpbmNsdWRlKEdvb2dsZVRlc3RBZGRUZXN0cykiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICAgIGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzX2ltcGwoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICIgICAgICBURVNUX0VYRUNVVEFCTEUiICAgICAgICAiIFs9PVsiICIkPFRBUkdFVF9GSUxFOiR7VEFSR0VUfT4iICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIFRFU1RfRVhFQ1VUT1IiICAgICAgICAgICIgWz09WyIgIiR7Y3Jvc3Njb21waWxpbmdfZW11bGF0b3J9IiAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9XT1JLSU5HX0RJUiIgICAgICAgIiBbPT1bIiAiJHtfV09SS0lOR19ESVJFQ1RPUll9IiAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX0VYVFJBX0FSR1MiICAgICAgICAiIFs9PVsiICIke19FWFRSQV9BUkdTfSIgICAgICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIFRFU1RfUFJPUEVSVElFUyIgICAgICAgICIgWz09WyIgIiR7X1BST1BFUlRJRVN9IiAgICAgICAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9QUkVGSVgiICAgICAgICAgICAgIiBbPT1bIiAiJHtfVEVTVF9QUkVGSVh9IiAgICAgICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX1NVRkZJWCIgICAgICAgICAgICAiIFs9PVsiICIke19URVNUX1NVRkZJWH0iICAgICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIE5PX1BSRVRUWV9UWVBFUyIgICAgICAgICIgWz09WyIgIiR7X05PX1BSRVRUWV9UWVBFU30iICAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgTk9fUFJFVFRZX1ZBTFVFUyIgICAgICAgIiBbPT1bIiAiJHtfTk9fUFJFVFRZX1ZBTFVFU30iICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX0xJU1QiICAgICAgICAgICAgICAiIFs9PVsiICIke19URVNUX0xJU1R9IiAgICAgICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIENURVNUX0ZJTEUiICAgICAgICAgICAgICIgWz09WyIgIiR7Y3Rlc3RfdGVzdHNfZmlsZX0iICAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9ESVNDT1ZFUllfVElNRU9VVCIgIiBbPT1bIiAiJHtfRElTQ09WRVJZX1RJTUVPVVR9IiAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX1hNTF9PVVRQVVRfRElSIiAgICAiIFs9PVsiICIke19YTUxfT1VUUFVUX0RJUn0iICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICApIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICBlbmRpZigpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICIgIGluY2x1ZGUoXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgImVsc2UoKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICBhZGRfdGVzdCgke1RBUkdFVH1fTk9UX0JVSUxUICR7VEFSR0VUfV9OT1RfQlVJTFQpIiAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICJlbmRpZigpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICkKKworICAgIGlmKEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgICBmb3JlYWNoKF9jb25maWcgJHtDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTfSkKKyAgICAgICAgZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Y3Rlc3RfZmlsZV9iYXNlfV9pbmNsdWRlLSR7X2NvbmZpZ30uY21ha2UiIENPTlRFTlQgIiR7Y3Rlc3RfaW5jbHVkZV9jb250ZW50fSIgQ09ORElUSU9OICQ8Q09ORklHOiR7X2NvbmZpZ30+KQorICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBmaWxlKFdSSVRFICIke2N0ZXN0X2luY2x1ZGVfZmlsZX0iICJpbmNsdWRlKFwiJHtjdGVzdF9maWxlX2Jhc2V9X2luY2x1ZGUtXCR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfS5jbWFrZVwiKSIpCisgICAgZWxzZSgpCisgICAgICBmaWxlKEdFTkVSQVRFIE9VVFBVVCAiJHtjdGVzdF9maWxlX2Jhc2V9X2luY2x1ZGUuY21ha2UiIENPTlRFTlQgIiR7Y3Rlc3RfaW5jbHVkZV9jb250ZW50fSIpCisgICAgICBmaWxlKFdSSVRFICIke2N0ZXN0X2luY2x1ZGVfZmlsZX0iICJpbmNsdWRlKFwiJHtjdGVzdF9maWxlX2Jhc2V9X2luY2x1ZGUuY21ha2VcIikiKQorICAgIGVuZGlmKCkKKworICBlbHNlKCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmtub3duIERJU0NPVkVSWV9NT0RFOiAke19ESVNDT1ZFUllfTU9ERX0iKQorICBlbmRpZigpCiAKICAgIyBBZGQgZGlzY292ZXJlZCB0ZXN0cyB0byBkaXJlY3RvcnkgVEVTVF9JTkNMVURFX0ZJTEVTCiAgIHNldF9wcm9wZXJ0eShESVJFQ1RPUlkKZGlmZiAtLWdpdCBhL01vZHVsZXMvR29vZ2xlVGVzdEFkZFRlc3RzLmNtYWtlIGIvTW9kdWxlcy9Hb29nbGVUZXN0QWRkVGVzdHMuY21ha2UKaW5kZXggNGFiYmJlYy4uNWQwOThkOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Hb29nbGVUZXN0QWRkVGVzdHMuY21ha2UKKysrIGIvTW9kdWxlcy9Hb29nbGVUZXN0QWRkVGVzdHMuY21ha2UKQEAgLTEsMTA2ICsxLDE4OCBAQAogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgogCi1zZXQocHJlZml4ICIke1RFU1RfUFJFRklYfSIpCi1zZXQoc3VmZml4ICIke1RFU1RfU1VGRklYfSIpCi1zZXQoZXh0cmFfYXJncyAke1RFU1RfRVhUUkFfQVJHU30pCi1zZXQocHJvcGVydGllcyAke1RFU1RfUFJPUEVSVElFU30pCi1zZXQoc2NyaXB0KQotc2V0KHN1aXRlKQotc2V0KHRlc3RzKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OICR7Q01BS0VfVkVSU0lPTn0pCiAKLWZ1bmN0aW9uKGFkZF9jb21tYW5kIE5BTUUpCisjIE92ZXJ3cml0ZSBwb3NzaWJseSBleGlzdGluZyAke19DVEVTVF9GSUxFfSB3aXRoIGVtcHR5IGZpbGUKK3NldChmbHVzaF90ZXN0c19NT0RFIFdSSVRFKQorCisjIEZsdXNoZXMgc2NyaXB0IHRvICR7X0NURVNUX0ZJTEV9CittYWNybyhmbHVzaF9zY3JpcHQpCisgIGZpbGUoJHtmbHVzaF90ZXN0c19NT0RFfSAiJHtfQ1RFU1RfRklMRX0iICIke3NjcmlwdH0iKQorICBzZXQoZmx1c2hfdGVzdHNfTU9ERSBBUFBFTkQpCisKKyAgc2V0KHNjcmlwdCAiIikKK2VuZG1hY3JvKCkKKworIyBGbHVzaGVzIHRlc3RzX2J1ZmZlciB0byB0ZXN0cworbWFjcm8oZmx1c2hfdGVzdHNfYnVmZmVyKQorICBsaXN0KEFQUEVORCB0ZXN0cyAiJHt0ZXN0c19idWZmZXJ9IikKKyAgc2V0KHRlc3RzX2J1ZmZlciAiIikKK2VuZG1hY3JvKCkKKworbWFjcm8oYWRkX2NvbW1hbmQgTkFNRSkKICAgc2V0KF9hcmdzICIiKQogICBmb3JlYWNoKF9hcmcgJHtBUkdOfSkKICAgICBpZihfYXJnIE1BVENIRVMgIlteLS4vOmEtekEtWjAtOV9dIikKLSAgICAgIHNldChfYXJncyAiJHtfYXJnc30gWz09WyR7X2FyZ31dPT1dIikKKyAgICAgIHN0cmluZyhBUFBFTkQgX2FyZ3MgIiBbPT1bJHtfYXJnfV09PV0iKQogICAgIGVsc2UoKQotICAgICAgc2V0KF9hcmdzICIke19hcmdzfSAke19hcmd9IikKKyAgICAgIHN0cmluZyhBUFBFTkQgX2FyZ3MgIiAke19hcmd9IikKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQotICBzZXQoc2NyaXB0ICIke3NjcmlwdH0ke05BTUV9KCR7X2FyZ3N9KVxuIiBQQVJFTlRfU0NPUEUpCisgIHN0cmluZyhBUFBFTkQgc2NyaXB0ICIke05BTUV9KCR7X2FyZ3N9KVxuIikKKyAgc3RyaW5nKExFTkdUSCAiJHtzY3JpcHR9IiBfc2NyaXB0X2xlbikKKyAgaWYoJHtfc2NyaXB0X2xlbn0gR1JFQVRFUiAiNTAwMDAiKQorICAgIGZsdXNoX3NjcmlwdCgpCisgIGVuZGlmKCkKKyAgIyBVbnNldHMgbWFjcm8gbG9jYWwgdmFyaWFibGVzIHRvIHByZXZlbnQgbGVha2FnZSBvdXRzaWRlIG9mIHRoaXMgbWFjcm8uCisgIHVuc2V0KF9hcmdzKQorICB1bnNldChfc2NyaXB0X2xlbikKK2VuZG1hY3JvKCkKKworZnVuY3Rpb24oZ3Rlc3RfZGlzY292ZXJfdGVzdHNfaW1wbCkKKworICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoCisgICAgIiIKKyAgICAiIgorICAgICJOT19QUkVUVFlfVFlQRVM7Tk9fUFJFVFRZX1ZBTFVFUztURVNUX0VYRUNVVEFCTEU7VEVTVF9FWEVDVVRPUjtURVNUX1dPUktJTkdfRElSO1RFU1RfUFJFRklYO1RFU1RfU1VGRklYO1RFU1RfTElTVDtDVEVTVF9GSUxFO1RFU1RfRElTQ09WRVJZX1RJTUVPVVQ7VEVTVF9YTUxfT1VUUFVUX0RJUiIKKyAgICAiVEVTVF9FWFRSQV9BUkdTO1RFU1RfUFJPUEVSVElFUyIKKyAgICAke0FSR059CisgICkKKworICBzZXQocHJlZml4ICIke19URVNUX1BSRUZJWH0iKQorICBzZXQoc3VmZml4ICIke19URVNUX1NVRkZJWH0iKQorICBzZXQoZXh0cmFfYXJncyAke19URVNUX0VYVFJBX0FSR1N9KQorICBzZXQocHJvcGVydGllcyAke19URVNUX1BST1BFUlRJRVN9KQorICBzZXQoc2NyaXB0KQorICBzZXQoc3VpdGUpCisgIHNldCh0ZXN0cykKKyAgc2V0KHRlc3RzX2J1ZmZlcikKKworICAjIFJ1biB0ZXN0IGV4ZWN1dGFibGUgdG8gZ2V0IGxpc3Qgb2YgYXZhaWxhYmxlIHRlc3RzCisgIGlmKE5PVCBFWElTVFMgIiR7X1RFU1RfRVhFQ1VUQUJMRX0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJTcGVjaWZpZWQgdGVzdCBleGVjdXRhYmxlIGRvZXMgbm90IGV4aXN0LlxuIgorICAgICAgIiAgUGF0aDogJyR7X1RFU1RfRVhFQ1VUQUJMRX0nIgorICAgICkKKyAgZW5kaWYoKQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCAke19URVNUX0VYRUNVVE9SfSAiJHtfVEVTVF9FWEVDVVRBQkxFfSIgLS1ndGVzdF9saXN0X3Rlc3RzCisgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7X1RFU1RfV09SS0lOR19ESVJ9IgorICAgIFRJTUVPVVQgJHtfVEVTVF9ESVNDT1ZFUllfVElNRU9VVH0KKyAgICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0CisgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICApCisgIGlmKE5PVCAke3Jlc3VsdH0gRVFVQUwgMCkKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgICAiIG91dHB1dCAiJHtvdXRwdXR9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiRXJyb3IgcnVubmluZyB0ZXN0IGV4ZWN1dGFibGUuXG4iCisgICAgICAiICBQYXRoOiAnJHtfVEVTVF9FWEVDVVRBQkxFfSdcbiIKKyAgICAgICIgIFJlc3VsdDogJHtyZXN1bHR9XG4iCisgICAgICAiICBPdXRwdXQ6XG4iCisgICAgICAiICAgICR7b3V0cHV0fVxuIgorICAgICkKKyAgZW5kaWYoKQorCisgICMgUHJlc2VydmUgc2VtaWNvbG9uIGluIHRlc3QtcGFyYW1ldGVycworICBzdHJpbmcoUkVQTEFDRSBbWztdXSBbW1w7XV0gb3V0cHV0ICIke291dHB1dH0iKQorICBzdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBvdXRwdXQgIiR7b3V0cHV0fSIpCisKKyAgIyBQYXJzZSBvdXRwdXQKKyAgZm9yZWFjaChsaW5lICR7b3V0cHV0fSkKKyAgICAjIFNraXAgaGVhZGVyCisgICAgaWYoTk9UIGxpbmUgTUFUQ0hFUyAiZ3Rlc3RfbWFpblxcLmNjIikKKyAgICAgICMgRG8gd2UgaGF2ZSBhIG1vZHVsZSBuYW1lIG9yIGEgdGVzdCBuYW1lPworICAgICAgaWYoTk9UIGxpbmUgTUFUQ0hFUyAiXiAgIikKKyAgICAgICAgIyBNb2R1bGU7IHJlbW92ZSB0cmFpbGluZyAnLicgdG8gZ2V0IGp1c3QgdGhlIG5hbWUuLi4KKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlxcLiggKiMuKik/IiAiIiBzdWl0ZSAiJHtsaW5lfSIpCisgICAgICAgIGlmKGxpbmUgTUFUQ0hFUyAiIyIgQU5EIE5PVCBfTk9fUFJFVFRZX1RZUEVTKQorICAgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvWzAtOV1cXC4rICsjLio9ICsiICIvIiBwcmV0dHlfc3VpdGUgIiR7bGluZX0iKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQocHJldHR5X3N1aXRlICIke3N1aXRlfSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5ESVNBQkxFRF8iICIiIHByZXR0eV9zdWl0ZSAiJHtwcmV0dHlfc3VpdGV9IikKKyAgICAgIGVsc2UoKQorICAgICAgICAjIFRlc3QgbmFtZTsgc3RyaXAgc3BhY2VzIGFuZCBjb21tZW50cyB0byBnZXQganVzdCB0aGUgbmFtZS4uLgorICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiICsiICIiIHRlc3QgIiR7bGluZX0iKQorICAgICAgICBpZih0ZXN0IE1BVENIRVMgIiMiIEFORCBOT1QgX05PX1BSRVRUWV9WQUxVRVMpCisgICAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi9bMC05XSsjR2V0UGFyYW0uLj0iICIvIiBwcmV0dHlfdGVzdCAiJHt0ZXN0fSIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIjLioiICIiIHByZXR0eV90ZXN0ICIke3Rlc3R9IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXkRJU0FCTEVEXyIgIiIgcHJldHR5X3Rlc3QgIiR7cHJldHR5X3Rlc3R9IikKKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiMuKiIgIiIgdGVzdCAiJHt0ZXN0fSIpCisgICAgICAgIGlmKE5PVCAiJHtfVEVTVF9YTUxfT1VUUFVUX0RJUn0iIFNUUkVRVUFMICIiKQorICAgICAgICAgIHNldChURVNUX1hNTF9PVVRQVVRfUEFSQU0gIi0tZ3Rlc3Rfb3V0cHV0PXhtbDoke19URVNUX1hNTF9PVVRQVVRfRElSfS8ke3ByZWZpeH0ke3N1aXRlfS4ke3Rlc3R9JHtzdWZmaXh9LnhtbCIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHVuc2V0KFRFU1RfWE1MX09VVFBVVF9QQVJBTSkKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgc2FuaXRpemUgdGVzdCBuYW1lIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgZG93bnN0cmVhbQorICAgICAgICBzZXQodGVzdG5hbWUgIiR7cHJlZml4fSR7cHJldHR5X3N1aXRlfS4ke3ByZXR0eV90ZXN0fSR7c3VmZml4fSIpCisgICAgICAgICMgZXNjYXBlIFwKKyAgICAgICAgc3RyaW5nKFJFUExBQ0UgW1tcXV0gW1tcXF1dIHRlc3RuYW1lICIke3Rlc3RuYW1lfSIpCisgICAgICAgICMgZXNjYXBlIDsKKyAgICAgICAgc3RyaW5nKFJFUExBQ0UgW1s7XV0gW1tcO11dIHRlc3RuYW1lICIke3Rlc3RuYW1lfSIpCisgICAgICAgICMgZXNjYXBlICQKKyAgICAgICAgc3RyaW5nKFJFUExBQ0UgW1skXV0gW1tcJF1dIHRlc3RuYW1lICIke3Rlc3RuYW1lfSIpCisKKyAgICAgICAgIyAuLi5hbmQgYWRkIHRvIHNjcmlwdAorICAgICAgICBhZGRfY29tbWFuZChhZGRfdGVzdAorICAgICAgICAgICIke3Rlc3RuYW1lfSIKKyAgICAgICAgICAke19URVNUX0VYRUNVVE9SfQorICAgICAgICAgICIke19URVNUX0VYRUNVVEFCTEV9IgorICAgICAgICAgICItLWd0ZXN0X2ZpbHRlcj0ke3N1aXRlfS4ke3Rlc3R9IgorICAgICAgICAgICItLWd0ZXN0X2Fsc29fcnVuX2Rpc2FibGVkX3Rlc3RzIgorICAgICAgICAgICR7VEVTVF9YTUxfT1VUUFVUX1BBUkFNfQorICAgICAgICAgICR7ZXh0cmFfYXJnc30KKyAgICAgICAgKQorICAgICAgICBpZihzdWl0ZSBNQVRDSEVTICJeRElTQUJMRUQiIE9SIHRlc3QgTUFUQ0hFUyAiXkRJU0FCTEVEIikKKyAgICAgICAgICBhZGRfY29tbWFuZChzZXRfdGVzdHNfcHJvcGVydGllcworICAgICAgICAgICAgIiR7dGVzdG5hbWV9IgorICAgICAgICAgICAgUFJPUEVSVElFUyBESVNBQkxFRCBUUlVFCisgICAgICAgICAgKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGFkZF9jb21tYW5kKHNldF90ZXN0c19wcm9wZXJ0aWVzCisgICAgICAgICAgIiR7dGVzdG5hbWV9IgorICAgICAgICAgIFBST1BFUlRJRVMKKyAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtfVEVTVF9XT1JLSU5HX0RJUn0iCisgICAgICAgICAgU0tJUF9SRUdVTEFSX0VYUFJFU1NJT04gIlxcXFxbICBTS0lQUEVEIFxcXFxdIgorICAgICAgICAgICR7cHJvcGVydGllc30KKyAgICAgICAgKQorICAgICAgICBsaXN0KEFQUEVORCB0ZXN0c19idWZmZXIgIiR7dGVzdG5hbWV9IikKKyAgICAgICAgbGlzdChMRU5HVEggdGVzdHNfYnVmZmVyIHRlc3RzX2J1ZmZlcl9sZW5ndGgpCisgICAgICAgIGlmKCR7dGVzdHNfYnVmZmVyX2xlbmd0aH0gR1JFQVRFUiAiMjUwIikKKyAgICAgICAgICBmbHVzaF90ZXN0c19idWZmZXIoKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworCisgICMgQ3JlYXRlIGEgbGlzdCBvZiBhbGwgZGlzY292ZXJlZCB0ZXN0cywgd2hpY2ggdXNlcnMgbWF5IHVzZSB0byBlLmcuIHNldAorICAjIHByb3BlcnRpZXMgb24gdGhlIHRlc3RzCisgIGZsdXNoX3Rlc3RzX2J1ZmZlcigpCisgIGFkZF9jb21tYW5kKHNldCAke19URVNUX0xJU1R9ICR7dGVzdHN9KQorCisgICMgV3JpdGUgQ1Rlc3Qgc2NyaXB0CisgIGZsdXNoX3NjcmlwdCgpCisKIGVuZGZ1bmN0aW9uKCkKIAotIyBSdW4gdGVzdCBleGVjdXRhYmxlIHRvIGdldCBsaXN0IG9mIGF2YWlsYWJsZSB0ZXN0cwotaWYoTk9UIEVYSVNUUyAiJHtURVNUX0VYRUNVVEFCTEV9IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUgotICAgICJTcGVjaWZpZWQgdGVzdCBleGVjdXRhYmxlIGRvZXMgbm90IGV4aXN0LlxuIgotICAgICIgIFBhdGg6ICcke1RFU1RfRVhFQ1VUQUJMRX0nIgoraWYoQ01BS0VfU0NSSVBUX01PREVfRklMRSkKKyAgZ3Rlc3RfZGlzY292ZXJfdGVzdHNfaW1wbCgKKyAgICBOT19QUkVUVFlfVFlQRVMgJHtOT19QUkVUVFlfVFlQRVN9CisgICAgTk9fUFJFVFRZX1ZBTFVFUyAke05PX1BSRVRUWV9WQUxVRVN9CisgICAgVEVTVF9FWEVDVVRBQkxFICR7VEVTVF9FWEVDVVRBQkxFfQorICAgIFRFU1RfRVhFQ1VUT1IgJHtURVNUX0VYRUNVVE9SfQorICAgIFRFU1RfV09SS0lOR19ESVIgJHtURVNUX1dPUktJTkdfRElSfQorICAgIFRFU1RfUFJFRklYICR7VEVTVF9QUkVGSVh9CisgICAgVEVTVF9TVUZGSVggJHtURVNUX1NVRkZJWH0KKyAgICBURVNUX0xJU1QgJHtURVNUX0xJU1R9CisgICAgQ1RFU1RfRklMRSAke0NURVNUX0ZJTEV9CisgICAgVEVTVF9ESVNDT1ZFUllfVElNRU9VVCAke1RFU1RfRElTQ09WRVJZX1RJTUVPVVR9CisgICAgVEVTVF9YTUxfT1VUUFVUX0RJUiAke1RFU1RfWE1MX09VVFBVVF9ESVJ9CisgICAgVEVTVF9FWFRSQV9BUkdTICR7VEVTVF9FWFRSQV9BUkdTfQorICAgIFRFU1RfUFJPUEVSVElFUyAke1RFU1RfUFJPUEVSVElFU30KICAgKQogZW5kaWYoKQotZXhlY3V0ZV9wcm9jZXNzKAotICBDT01NQU5EICR7VEVTVF9FWEVDVVRPUn0gIiR7VEVTVF9FWEVDVVRBQkxFfSIgLS1ndGVzdF9saXN0X3Rlc3RzCi0gIFdPUktJTkdfRElSRUNUT1JZICIke1RFU1RfV09SS0lOR19ESVJ9IgotICBUSU1FT1VUICR7VEVTVF9ESVNDT1ZFUllfVElNRU9VVH0KLSAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAotICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0Ci0pCi1pZihOT1QgJHtyZXN1bHR9IEVRVUFMIDApCi0gIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAgICIgb3V0cHV0ICIke291dHB1dH0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SCi0gICAgIkVycm9yIHJ1bm5pbmcgdGVzdCBleGVjdXRhYmxlLlxuIgotICAgICIgIFBhdGg6ICcke1RFU1RfRVhFQ1VUQUJMRX0nXG4iCi0gICAgIiAgUmVzdWx0OiAke3Jlc3VsdH1cbiIKLSAgICAiICBPdXRwdXQ6XG4iCi0gICAgIiAgICAke291dHB1dH1cbiIKLSAgKQotZW5kaWYoKQotCi1zdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBvdXRwdXQgIiR7b3V0cHV0fSIpCi0KLSMgUGFyc2Ugb3V0cHV0Ci1mb3JlYWNoKGxpbmUgJHtvdXRwdXR9KQotICAjIFNraXAgaGVhZGVyCi0gIGlmKE5PVCBsaW5lIE1BVENIRVMgImd0ZXN0X21haW5cXC5jYyIpCi0gICAgIyBEbyB3ZSBoYXZlIGEgbW9kdWxlIG5hbWUgb3IgYSB0ZXN0IG5hbWU/Ci0gICAgaWYoTk9UIGxpbmUgTUFUQ0hFUyAiXiAgIikKLSAgICAgICMgTW9kdWxlOyByZW1vdmUgdHJhaWxpbmcgJy4nIHRvIGdldCBqdXN0IHRoZSBuYW1lLi4uCi0gICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXFwuKCAqIy4qKT8iICIiIHN1aXRlICIke2xpbmV9IikKLSAgICAgIGlmKGxpbmUgTUFUQ0hFUyAiIyIgQU5EIE5PVCBOT19QUkVUVFlfVFlQRVMpCi0gICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvWzAtOV1cXC4rICsjLio9ICsiICIvIiBwcmV0dHlfc3VpdGUgIiR7bGluZX0iKQotICAgICAgZWxzZSgpCi0gICAgICAgIHNldChwcmV0dHlfc3VpdGUgIiR7c3VpdGV9IikKLSAgICAgIGVuZGlmKCkKLSAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeRElTQUJMRURfIiAiIiBwcmV0dHlfc3VpdGUgIiR7cHJldHR5X3N1aXRlfSIpCi0gICAgZWxzZSgpCi0gICAgICAjIFRlc3QgbmFtZTsgc3RyaXAgc3BhY2VzIGFuZCBjb21tZW50cyB0byBnZXQganVzdCB0aGUgbmFtZS4uLgotICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiArIiAiIiB0ZXN0ICIke2xpbmV9IikKLSAgICAgIGlmKHRlc3QgTUFUQ0hFUyAiIyIgQU5EIE5PVCBOT19QUkVUVFlfVkFMVUVTKQotICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL1swLTldKyNHZXRQYXJhbS4uPSIgIi8iIHByZXR0eV90ZXN0ICIke3Rlc3R9IikKLSAgICAgIGVsc2UoKQotICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiIy4qIiAiIiBwcmV0dHlfdGVzdCAiJHt0ZXN0fSIpCi0gICAgICBlbmRpZigpCi0gICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXkRJU0FCTEVEXyIgIiIgcHJldHR5X3Rlc3QgIiR7cHJldHR5X3Rlc3R9IikKLSAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIjLioiICIiIHRlc3QgIiR7dGVzdH0iKQotICAgICAgIyAuLi5hbmQgYWRkIHRvIHNjcmlwdAotICAgICAgYWRkX2NvbW1hbmQoYWRkX3Rlc3QKLSAgICAgICAgIiR7cHJlZml4fSR7cHJldHR5X3N1aXRlfS4ke3ByZXR0eV90ZXN0fSR7c3VmZml4fSIKLSAgICAgICAgJHtURVNUX0VYRUNVVE9SfQotICAgICAgICAiJHtURVNUX0VYRUNVVEFCTEV9IgotICAgICAgICAiLS1ndGVzdF9maWx0ZXI9JHtzdWl0ZX0uJHt0ZXN0fSIKLSAgICAgICAgIi0tZ3Rlc3RfYWxzb19ydW5fZGlzYWJsZWRfdGVzdHMiCi0gICAgICAgICR7ZXh0cmFfYXJnc30KLSAgICAgICkKLSAgICAgIGlmKHN1aXRlIE1BVENIRVMgIl5ESVNBQkxFRCIgT1IgdGVzdCBNQVRDSEVTICJeRElTQUJMRUQiKQotICAgICAgICBhZGRfY29tbWFuZChzZXRfdGVzdHNfcHJvcGVydGllcwotICAgICAgICAgICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iCi0gICAgICAgICAgUFJPUEVSVElFUyBESVNBQkxFRCBUUlVFCi0gICAgICAgICkKLSAgICAgIGVuZGlmKCkKLSAgICAgIGFkZF9jb21tYW5kKHNldF90ZXN0c19wcm9wZXJ0aWVzCi0gICAgICAgICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iCi0gICAgICAgIFBST1BFUlRJRVMKLSAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7VEVTVF9XT1JLSU5HX0RJUn0iCi0gICAgICAgICR7cHJvcGVydGllc30KLSAgICAgICkKLSAgICAgbGlzdChBUFBFTkQgdGVzdHMgIiR7cHJlZml4fSR7cHJldHR5X3N1aXRlfS4ke3ByZXR0eV90ZXN0fSR7c3VmZml4fSIpCi0gICAgZW5kaWYoKQotICBlbmRpZigpCi1lbmRmb3JlYWNoKCkKLQotIyBDcmVhdGUgYSBsaXN0IG9mIGFsbCBkaXNjb3ZlcmVkIHRlc3RzLCB3aGljaCB1c2VycyBtYXkgdXNlIHRvIGUuZy4gc2V0Ci0jIHByb3BlcnRpZXMgb24gdGhlIHRlc3RzCi1hZGRfY29tbWFuZChzZXQgJHtURVNUX0xJU1R9ICR7dGVzdHN9KQotCi0jIFdyaXRlIENUZXN0IHNjcmlwdAotZmlsZShXUklURSAiJHtDVEVTVF9GSUxFfSIgIiR7c2NyaXB0fSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0luc3RhbGxSZXF1aXJlZFN5c3RlbUxpYnJhcmllcy5jbWFrZSBiL01vZHVsZXMvSW5zdGFsbFJlcXVpcmVkU3lzdGVtTGlicmFyaWVzLmNtYWtlCmluZGV4IDA0Njg3YjkuLmNhY2E2OTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvSW5zdGFsbFJlcXVpcmVkU3lzdGVtTGlicmFyaWVzLmNtYWtlCisrKyBiL01vZHVsZXMvSW5zdGFsbFJlcXVpcmVkU3lzdGVtTGlicmFyaWVzLmNtYWtlCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICBpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCiAgICAgICAgIHNldChfSW50ZWxfYXJjaGRpciBpbnRlbDY0KQogICAgICAgZWxzZSgpCi0gICAgICAgIHNldChfSW50ZWxfYXJjaGRpciB4ODYpCisgICAgICAgIHNldChfSW50ZWxfYXJjaGRpciBpYTMyKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KF9JbnRlbF9jb21waWxlcl92ZXIgJHtDTUFLRV8ke0xBTkd9X0NPTVBJTEVSX1ZFUlNJT059KQogICAgICAgaWYoV0lOMzIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrTnVHZXQuY21ha2UgYi9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrTnVHZXQuY21ha2UKaW5kZXggMWY0YmNmZC4uMjBlZWQyZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja051R2V0LmNtYWtlCisrKyBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tOdUdldC5jbWFrZQpAQCAtMjg3LDcgKzI4NywxMSBAQAogICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgICAgQ09NTUFORCAiJHtOVUdFVF9FWEVDVVRBQkxFfSIgcGFjayAke0NQQUNLX05VR0VUX1BBQ0tfQURESVRJT05BTF9PUFRJT05TfQogICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtDUEFDS19URU1QT1JBUllfRElSRUNUT1JZfSIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9udWdldF9yZXN1bHQKICAgICAgICkKKyAgICBpZihOT1QgX251Z2V0X3Jlc3VsdCBFUVVBTCAwKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOdWdldCBwYWNrIGZhaWxlZCIpCisgICAgZW5kaWYoKQogCiBlbHNlaWYoQ1BBQ0tfTlVHRVRfQUxMX0lOX09ORSkKICAgICAjIFRoaXMgdmFyaWFibGUgYENQQUNLX05VR0VUX0FMTF9JTl9PTkVgIHNldCBieSBDKysgY29kZToKQEAgLTMwMCw3ICszMDQsMTEgQEAKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICAgIENPTU1BTkQgIiR7TlVHRVRfRVhFQ1VUQUJMRX0iIHBhY2sgJHtDUEFDS19OVUdFVF9QQUNLX0FERElUSU9OQUxfT1BUSU9OU30KICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0iCisgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfbnVnZXRfcmVzdWx0CiAgICAgICApCisgICAgaWYoTk9UIF9udWdldF9yZXN1bHQgRVFVQUwgMCkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTnVnZXQgcGFjayBmYWlsZWQiKQorICAgIGVuZGlmKCkKIAogZWxzZSgpCiAgICAgIyBJcyB0aGVyZSBhbnkgZ3JvdXBlZCBjb21wb25lbnQ/CkBAIC0zMjIsNyArMzMwLDExIEBACiAgICAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICAgICAgICAgICAgQ09NTUFORCAiJHtOVUdFVF9FWEVDVVRBQkxFfSIgcGFjayAke0NQQUNLX05VR0VUX1BBQ0tfQURESVRJT05BTF9PUFRJT05TfQogICAgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke0NQQUNLX1RFTVBPUkFSWV9ESVJFQ1RPUll9IgorICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfbnVnZXRfcmVzdWx0CiAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmKE5PVCBfbnVnZXRfcmVzdWx0IEVRVUFMIDApCisgICAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTnVnZXQgcGFjayBmYWlsZWQiKQorICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICBlbmRmb3JlYWNoKCkKICAgICBlbmRpZigpCiAgICAgIyBJcyB0aGVyZSBhbnkgc2luZ2xlIGNvbXBvbmVudCBwYWNrYWdlIG5lZWRlZD8KQEAgLTM0MSw3ICszNTMsMTEgQEAKICAgICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgICAgICAgICAgICBDT01NQU5EICIke05VR0VUX0VYRUNVVEFCTEV9IiBwYWNrICR7Q1BBQ0tfTlVHRVRfUEFDS19BRERJVElPTkFMX09QVElPTlN9CiAgICAgICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0iCisgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9udWdldF9yZXN1bHQKICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgaWYoTk9UIF9udWdldF9yZXN1bHQgRVFVQUwgMCkKKyAgICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOdWdldCBwYWNrIGZhaWxlZCIpCisgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgIGVuZGZvcmVhY2goKQogICAgIGVuZGlmKCkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tSUE0uY21ha2UgYi9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrUlBNLmNtYWtlCmluZGV4IDM0ODVlN2QuLjA4YmJjNjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tSUE0uY21ha2UKKysrIGIvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja1JQTS5jbWFrZQpAQCAtMTA5OSwxNiArMTA5OSwxOCBAQAogCiAgICMgQ1BBQ0tfUlBNX1BPU1RfSU5TVEFMTF9TQ1JJUFRfRklMRSAob3IgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfSU5TVEFMTF9TQ1JJUFRfRklMRSkKICAgIyBDUEFDS19SUE1fUE9TVF9VTklOU1RBTExfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX1VOSU5TVEFMTF9TQ1JJUFRfRklMRSkKLSAgIyBNYXkgYmUgdXNlZCB0byBlbWJlZCBhIHBvc3QgKHVuKWluc3RhbGxhdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KKyAgIyBDUEFDS19SUE1fUE9TVF9UUkFOU19TQ1JJUFRfRklMRSAob3IgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEUpCisgICMgTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwb3N0IGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbi90cmFuc2FjdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KICAgIyBUaGUgcmVmZXJyZWQgc2NyaXB0IGZpbGUocykgd2lsbCBiZSByZWFkIGFuZCBkaXJlY3RseQotICAjIHB1dCBhZnRlciB0aGUgJXBvc3Qgb3IgJXBvc3R1biBzZWN0aW9uCisgICMgcHV0IGFmdGVyIHRoZSAlcG9zdCBvciAlcG9zdHVuIG9yICVwb3N0dHJhbnMgc2VjdGlvbgogICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIyBDUEFDS19SUE1fUFJFX0lOU1RBTExfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRSkKICAgIyBDUEFDS19SUE1fUFJFX1VOSU5TVEFMTF9TQ1JJUFRfRklMRSAob3IgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEUpCi0gICMgTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwcmUgKHVuKWluc3RhbGxhdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KKyAgIyBDUEFDS19SUE1fUFJFX1RSQU5TX1NDUklQVF9GSUxFIChvciBDUEFDS19SUE1fPENPTVBPTkVOVD5fUFJFX1RSQU5TX1NDUklQVF9GSUxFKQorICAjIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcHJlIGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbi90cmFuc2FjdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KICAgIyBUaGUgcmVmZXJyZWQgc2NyaXB0IGZpbGUocykgd2lsbCBiZSByZWFkIGFuZCBkaXJlY3RseQotICAjIHB1dCBhZnRlciB0aGUgJXByZSBvciAlcHJldW4gc2VjdGlvbgotICBmb3JlYWNoKFJQTV9TQ1JJUFRfRklMRV9UWVBFXyAiSU5TVEFMTCIgIlVOSU5TVEFMTCIpCisgICMgcHV0IGFmdGVyIHRoZSAlcHJlIG9yICVwcmV1biBvciAlcHJldHJhbnMgc2VjdGlvbgorICBmb3JlYWNoKFJQTV9TQ1JJUFRfRklMRV9UWVBFXyAiSU5TVEFMTCIgIlVOSU5TVEFMTCIgIlRSQU5TIikKICAgICBmb3JlYWNoKFJQTV9TQ1JJUFRfRklMRV9USU1FXyAiUFJFIiAiUE9TVCIpCiAgICAgICBzZXQoIkNQQUNLX1JQTV8ke1JQTV9TQ1JJUFRfRklMRV9USU1FX31fJHtSUE1fU0NSSVBUX0ZJTEVfVFlQRV99X1JFQURfRklMRSIKICAgICAgICAgIiR7Q1BBQ0tfUlBNXyR7UlBNX1NDUklQVF9GSUxFX1RJTUVffV8ke1JQTV9TQ1JJUFRfRklMRV9UWVBFX31fU0NSSVBUX0ZJTEV9IikKQEAgLTE3MjcsMTIgKzE3MjksMTggQEAKIFxAUlBNX1NZTUxJTktfUE9TVElOU1RBTExcQAogXEBDUEFDS19SUE1fU1BFQ19QT1NUSU5TVEFMTFxACiAKKyVwb3N0dHJhbnMKK1xAQ1BBQ0tfUlBNX1NQRUNfUE9TVFRSQU5TXEAKKwogJXBvc3R1bgogXEBDUEFDS19SUE1fU1BFQ19QT1NUVU5JTlNUQUxMXEAKIAogJXByZQogXEBDUEFDS19SUE1fU1BFQ19QUkVJTlNUQUxMXEAKIAorJXByZXRyYW5zCitcQENQQUNLX1JQTV9TUEVDX1BSRVRSQU5TXEAKKwogJXByZXVuCiBcQENQQUNLX1JQTV9TUEVDX1BSRVVOSU5TVEFMTFxACiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svTlNJUy50ZW1wbGF0ZS5pbiBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svTlNJUy50ZW1wbGF0ZS5pbgppbmRleCA2NjBiZmEzLi42MDA5Y2UwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL05TSVMudGVtcGxhdGUuaW4KKysrIGIvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9OU0lTLnRlbXBsYXRlLmluCkBAIC00MSw2ICs0MSw3IEBACiAgIFJlcXVlc3RFeGVjdXRpb25MZXZlbCBhZG1pbgogCiBAQ1BBQ0tfTlNJU19ERUZJTkVTQAorQENQQUNLX05TSVNfTUFOSUZFU1RfRFBJX0FXQVJFX0NPREVACiAKICAgIWluY2x1ZGUgU2VjdGlvbnMubnNoCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1DbGFuZy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1DbGFuZy5jbWFrZQppbmRleCA3NTk0NDhiLi4xNjBlYWRhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ2xhbmcuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNsYW5nLmNtYWtlCkBAIC01Myw0ICs1Myw3IEBACiAgICAgZW5kaWYoKQogICAgIGxpc3QoQVBQRU5EIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJFREVGSU5FU19DT01NQU5EICItLXRhcmdldD0ke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfVEFSR0VUfSIpCiAgIGVuZGlmKCkKKyAgaWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICAgIHNldChfQU5EUk9JRF9TVExfTk9TVERMSUJYWCAxKQorICBlbmRpZigpCiBlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ29tbW9uLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNvbW1vbi5jbWFrZQppbmRleCAxYWZmY2QwLi41ODFmZGU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ29tbW9uLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1Db21tb24uY21ha2UKQEAgLTczLDcgKzczLDcgQEAKICAgICAgIG1hY3JvKF9fYW5kcm9pZF9zdGwgbGFuZykKICAgICAgICAgIyBGSVhNRTogQWRkIGEgd2F5IHRvIGFkZCBwcm9qZWN0LXdpZGUgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZS1vbmx5IGZsYWdzLgogICAgICAgICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT0JKRUNUCi0gICAgICAgICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+ICA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IC1ub3N0ZGluYysrIikKKyAgICAgICAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiAtbm9zdGRpbmMrKyIpCiAgICAgICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9TVEFOREFSRF9MSUJSQVJJRVMgIiAtbm9zdGRsaWIrKyIpCiAgICAgICBlbmRtYWNybygpCiAgICAgZWxzZSgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtRGV0ZXJtaW5lLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLURldGVybWluZS5jbWFrZQppbmRleCAyMjI1ODk3Li4xMWEwNTA0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtRGV0ZXJtaW5lLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1EZXRlcm1pbmUuY21ha2UKQEAgLTcsOCArNyw4IEBACiAKICMgU3VwcG9ydCBmb3IgTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvIEVkaXRpb24gd2FzIHByZXZpb3VzbHkKICMgaW1wbGVtZW50ZWQgaW4gdGhlIENNYWtlIFZTIElERSBnZW5lcmF0b3JzLiAgQXZvaWQgaW50ZXJmZXJpbmcgd2l0aAotIyB0aGF0IGZ1bmN0aW9uYWxpdHkgZm9yIG5vdy4gIExhdGVyIHdlIG1heSB0cnkgdG8gaW50ZWdyYXRlIHRoaXMuCi1pZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisjIHRoYXQgZnVuY3Rpb25hbGl0eSBmb3Igbm93LgoraWYoQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIFNUUkVRVUFMICJUZWdyYS1BbmRyb2lkIikKICAgcmV0dXJuKCkKIGVuZGlmKCkKIApAQCAtMjcsNiArMjcsNjMgQEAKIGNtYWtlX3BvbGljeShQVVNIKQogY21ha2VfcG9saWN5KFNFVCBDTVAwMDU3IE5FVykgIyBpZiBJTl9MSVNUCiAKKyMgSWYgdXNpbmcgQW5kcm9pZCB0b29scyBmb3IgVmlzdWFsIFN0dWRpbywgY29tcGlsZSBhIHNhbXBsZSBwcm9qZWN0IHRvIGdldCB0aGUKKyMgc3lzcm9vdC4KK2lmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgaWYoTk9UIENNQUtFX1NZU1JPT1QpCisgICAgc2V0KHZjeF9wbGF0Zm9ybSAke0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0pCisgICAgaWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8gMVs0NV0iKQorICAgICAgc2V0KHZjeF9zeXNyb290X3ZhciAiU3lzcm9vdCIpCisgICAgZWxzZSgpCisgICAgICBzZXQodmN4X3N5c3Jvb3RfdmFyICJTeXNyb290TGluayIpCisgICAgZW5kaWYoKQorICAgIGlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIDE0IikKKyAgICAgIHNldCh2Y3hfcmV2aXNpb24gIjIuMCIpCisgICAgZWxzZWlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIDFbNTZdIikKKyAgICAgIHNldCh2Y3hfcmV2aXNpb24gIjMuMCIpCisgICAgZWxzZSgpCisgICAgICBzZXQodmN4X3JldmlzaW9uICIiKQorICAgIGVuZGlmKCkKKyAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC9WQ1hQcm9qSW5zcGVjdC52Y3hwcm9qLmluCisgICAgICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9WQ1hQcm9qSW5zcGVjdC52Y3hwcm9qIEBPTkxZKQorICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgIENPTU1BTkQgIiR7Q01BS0VfVlNfTVNCVUlMRF9DT01NQU5EfSIgIlZDWFByb2pJbnNwZWN0LnZjeHByb2oiCisgICAgICAgICIvcDpDb25maWd1cmF0aW9uPURlYnVnIiAiL3A6UGxhdGZvcm09JHt2Y3hfcGxhdGZvcm19IgorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0KKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBWQ1hQUk9KX0lOU1BFQ1RfT1VUUFVUCisgICAgICBFUlJPUl9WQVJJQUJMRSBWQ1hQUk9KX0lOU1BFQ1RfT1VUUFVUCisgICAgICBSRVNVTFRfVkFSSUFCTEUgVkNYUFJPSl9JTlNQRUNUX1JFU1VMVAorICAgICAgKQorICAgIGlmKE5PVCBDTUFLRV9TWVNST09UIEFORCBWQ1hQUk9KX0lOU1BFQ1RfT1VUUFVUIE1BVENIRVMgIkNNQUtFX1NZU1JPT1Q9KFteJVxyXG5dKylbXHJcbl0iKQorICAgICAgIyBTdHJpcCBWUyBkaWFnbm9zdGljIG91dHB1dCBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiIFxcKFRhc2tJZDpbMC05XSpcXCkkIiAiIiBfc3lzcm9vdCAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgICBpZihFWElTVFMgIiR7X3N5c3Jvb3R9IikKKyAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIke19zeXNyb290fSIgQ01BS0VfU1lTUk9PVCkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgICAgaWYoVkNYUFJPSl9JTlNQRUNUX1JFU1VMVCkKKyAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICAgIkRldGVybWluaW5nIHRoZSBzeXNyb290IGZvciB0aGUgQW5kcm9pZCBOREsgZmFpbGVkLgorVGhlIG91dHB1dCB3YXM6Ciske1ZDWFBST0pfSU5TUEVDVF9SRVNVTFR9Ciske1ZDWFBST0pfSU5TUEVDVF9PVVRQVVR9CisKKyIpCisgICAgZWxzZSgpCisgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICAgICAiRGV0ZXJtaW5pbmcgdGhlIHN5c3Jvb3QgZm9yIHRoZSBBbmRyb2lkIE5ESyBzdWNjZWVkZWQuCitUaGUgb3V0cHV0IHdhczoKKyR7VkNYUFJPSl9JTlNQRUNUX1JFU1VMVH0KKyR7VkNYUFJPSl9JTlNQRUNUX09VVFBVVH0KKworIikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9WRVJTSU9OKQorICAgIHNldChDTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fVkVSU0lPTiAiY2xhbmciKQorICBlbmRpZigpCitlbmRpZigpCisKICMgSWYgdGhlIHVzZXIgcHJvdmlkZWQgQ01BS0VfU1lTUk9PVCBmb3IgdXMsIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSBpdC4KIHNldChfQU5EUk9JRF9TWVNST09UX05ESyAiIikKIHNldChfQU5EUk9JRF9TWVNST09UX0FQSSAiIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1Jbml0aWFsaXplLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUluaXRpYWxpemUuY21ha2UKaW5kZXggYjkwZGQ3YS4uNTAxOWMyOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUluaXRpYWxpemUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUluaXRpYWxpemUuY21ha2UKQEAgLTYsNyArNiw3IEBACiAKICMgU3VwcG9ydCBmb3IgTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvIEVkaXRpb24gd2FzIHByZXZpb3VzbHkKICMgaW1wbGVtZW50ZWQgaW4gdGhlIENNYWtlIFZTIElERSBnZW5lcmF0b3JzLiAgQXZvaWQgaW50ZXJmZXJpbmcgd2l0aAotIyB0aGF0IGZ1bmN0aW9uYWxpdHkgZm9yIG5vdy4gIExhdGVyIHdlIG1heSB0cnkgdG8gaW50ZWdyYXRlIHRoaXMuCisjIHRoYXQgZnVuY3Rpb25hbGl0eSBmb3Igbm93LgogaWYoQ01BS0VfVlNfUExBVEZPUk1fTkFNRSBTVFJFUVVBTCAiVGVncmEtQW5kcm9pZCIpCiAgIHJldHVybigpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvVkNYUHJvakluc3BlY3QudmN4cHJvai5pbiBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC9WQ1hQcm9qSW5zcGVjdC52Y3hwcm9qLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTlkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvVkNYUHJvakluc3BlY3QudmN4cHJvai5pbgpAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEB2Y3hfcGxhdGZvcm1AIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkB2Y3hfcGxhdGZvcm1APC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57MTRENDQ3NzItRUNGNy00N0JELTlFMjktQkM2MkZBRjk0MEE1fTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+VkNYUHJvakluc3BlY3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+QW5kcm9pZDwvS2V5d29yZD4KKyAgICA8QXBwbGljYXRpb25UeXBlPkFuZHJvaWQ8L0FwcGxpY2F0aW9uVHlwZT4KKyAgICA8QXBwbGljYXRpb25UeXBlUmV2aXNpb24+QHZjeF9yZXZpc2lvbkA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8QHZjeF9wbGF0Zm9ybUAnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xAdmN4X3BsYXRmb3JtQCciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xAdmN4X3BsYXRmb3JtQCciPgorICAgIDxQb3N0QnVpbGRFdmVudD4KKyAgICAgIDxDb21tYW5kPiU0MGVjaG8gQ01BS0VfU1lTUk9PVD0kKEB2Y3hfc3lzcm9vdF92YXJAKTwvQ29tbWFuZD4KKyAgICA8L1Bvc3RCdWlsZEV2ZW50PgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lTC5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVMLmNtYWtlCmluZGV4IDA4MmU0NmMuLjBlZDk5NzUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVMLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVMLmNtYWtlCkBAIC0yMywxOCArMjMsMTggQEAKIAogaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MpCiAgIHNldChDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVdsLC1sZ2NjLC1sYyAtbG5zc19maWxlcyAtbG5zc19kbnMgLWxyZXNvbHYiKQorICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxnY2MsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCiBlbHNlKCkKICAgIyB3aGVuIHVzaW5nIElCTSB4bGMgd2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBsaW5rIHRvIC1sZ2NjCiAgIHNldChDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVdsLC1sYyAtbG5zc19maWxlcyAtbG5zc19kbnMgLWxyZXNvbHYiKQorICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCiBlbmRpZigpCiAKIGlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWCkKICAgc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxzdGRjKyssLWxnY2MsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCisgICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC1XbCwtcmVsYXggPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxzdGRjKyssLWxnY2MsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCiBlbHNlKCkKICAgIyB3aGVuIHVzaW5nIHRoZSBJQk0geGxDIHdlIHByb2JhYmx5IGRvbid0IHdhbnQgdG8gbGluayB0byAtbGdjYwogICBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbHN0ZGMrKywtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKKyAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbHN0ZGMrKywtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVQLWJhc2UuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lUC1iYXNlLmNtYWtlCmluZGV4IGZlOTViNDIuLjcwOTVkZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVQLWJhc2UuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVAtYmFzZS5jbWFrZQpAQCAtOTcsNyArOTcsNyBAQAogICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfUlVOVElNRV8ke2xhbmd9X0ZMQUdfU0VQICAiOiIpICMgOiBvciBlbXB0eQogCiAgIHNldChCR1BfJHtsYW5nfV9ERUZBVUxUX0VYRV9GTEFHUwotICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLVdsLC1yZWxheCAke0JHUF8ke2xhbmd9X0RZTkFNSUNfRVhFX0ZMQUdTfSAke0JHUF8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTfSIpCiBlbmRtYWNybygpCkBAIC0xMDgsNyArMTA4LDcgQEAKICMKIG1hY3JvKF9fQmx1ZUdlbmVQX3NldF9zdGF0aWNfZmxhZ3MgY29tcGlsZXJfaWQgbGFuZykKICAgc2V0KEJHUF8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTCi0gICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCiAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtV2wsLXJlbGF4ICR7QkdQXyR7bGFuZ31fREVGQVVMVF9FWEVfRkxBR1N9IikKIGVuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVRLWJhc2UuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lUS1iYXNlLmNtYWtlCmluZGV4IDVlNTZkOGUuLjk0Y2IwYTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVRLWJhc2UuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVEtYmFzZS5jbWFrZQpAQCAtMTAxLDcgKzEwMSw3IEBACiAgIGZvcmVhY2goZGlyICR7Q01BS0VfU1lTVEVNX0lOQ0xVREVfUEFUSH0pCiAgICAgc3RyaW5nKEFQUEVORCBCR1FfU1lTVEVNX0lOQ0xVREVTICIgLUkke2Rpcn0iKQogICBlbmRmb3JlYWNoKCkKLSAgc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QgICAiPENNQUtFX0NfQ09NUElMRVI+ICAgPERFRklORVM+ICR7QkdRX1NZU1RFTV9JTkNMVURFU30gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKKyAgc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QgICAiPENNQUtFX0NfQ09NUElMRVI+IDxERUZJTkVTPiAke0JHUV9TWVNURU1fSU5DTFVERVN9IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiAgIHNldChDTUFLRV9DWFhfQ09NUElMRV9PQkpFQ1QgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxERUZJTkVTPiAke0JHUV9TWVNURU1fSU5DTFVERVN9IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiAKICAgIwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKICAgIyBGb3IgZHluYW1pYyBleGVjdXRhYmxlcywgbmVlZCB0byBwcm92aWRlIHNwZWNpYWwgQkcvUSBhcmd1bWVudHMuCiAgIHNldChCR1FfJHtsYW5nfV9ERUZBVUxUX0VYRV9GTEFHUwotICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLVdsLC1yZWxheCAke0JHUV8ke2xhbmd9X0RZTkFNSUNfRVhFX0ZMQUdTfSAke0JHUV8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTfSIpCiBlbmRtYWNybygpCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogICAjIEZvciBzdGF0aWMgZXhlY3V0YWJsZXMsIHVzZSBkZWZhdWx0IGxpbmsgc2V0dGluZ3MuCiAgIHNldChCR1FfJHtsYW5nfV9ERUZBVUxUX0VYRV9GTEFHUwotICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLVdsLC1yZWxheCAke0JHUV8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTfSIpCiBlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0NZR1dJTi1HTlUuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0NZR1dJTi1HTlUuY21ha2UKaW5kZXggY2E5MDcxMi4uNGZhMTRjZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9DWUdXSU4tR05VLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQ1lHV0lOLUdOVS5jbWFrZQpAQCAtMjIsNyArMjIsNyBAQAogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfJHtsYW5nfV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gLW8gPFRBUkdFVD4gLVdsLC0tb3V0LWltcGxpYiw8VEFSR0VUX0lNUExJQj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiAtV2wsLS1vdXQtaW1wbGliLDxUQVJHRVRfSU1QTElCPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1XbCwtLW91dC1pbXBsaWIsPFRBUkdFVF9JTVBMSUI+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCiAKICAgICMgTm8gLWZQSUMgb24gY3lnd2luCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19QSUMgIiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLUMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLUMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3MWM4NAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRE9TLU9wZW5XYXRjb20tQy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFBsYXRmb3JtL0RPUy1PcGVuV2F0Y29tKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9ET1MtT3BlbldhdGNvbS1DWFguY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLUNYWC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjcxYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9ET1MtT3BlbldhdGNvbS1DWFguY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9ET1MtT3BlbldhdGNvbSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vRE9TLU9wZW5XYXRjb20uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YzQ1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLmNtYWtlCkBAIC0wLDAgKzEsMjggQEAKKworIyBUaGlzIG1vZHVsZSBpcyBzaGFyZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzOyB1c2UgaW5jbHVkZSBibG9ja2VyLgoraW5jbHVkZV9ndWFyZCgpCisKK3NldChDTUFLRV9CVUlMRF9UWVBFX0lOSVQgRGVidWcpCisKK2lmKERFRklORUQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBBTkQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiSTg2IikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zIikKK2Vsc2UoKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBkb3M0ZyIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIGRvczRnIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zNGciKQorZW5kaWYoKQorCitzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRExMICItYmQiKSAjIE5vdGU6IFRoaXMgdmFyaWFibGUgaXMgYSAnOycgc2VwYXJhdGVkIGxpc3QKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9DX0ZMQUdTICItYmQiKSAjIC4uLiB3aGlsZSB0aGlzIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZy4KKworc3RyaW5nKEFQUEVORCBDTUFLRV9DX0ZMQUdTX0lOSVQgIiAtYnQ9ZG9zIikKK3N0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgIiAtYnQ9ZG9zIC14cyIpCisKK2lmKE5PVCBDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIHNldChDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2gpCitlbmRpZigpCitpZihOT1QgQ01BS0VfQ1hYX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUyAkRU5We1dBVENPTX0vaCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vRE9TLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9ET1MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5NTkzNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRE9TLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK3NldChET1MgMSkKKworc2V0KENNQUtFX1NUQVRJQ19MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVggIi5saWIiKQorc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVggIi5kbGwiKQorc2V0KENNQUtFX0lNUE9SVF9MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9JTVBPUlRfTElCUkFSWV9TVUZGSVggIi5saWIiKQorc2V0KENNQUtFX0VYRUNVVEFCTEVfU1VGRklYICIuZXhlIikKK3NldChDTUFLRV9MSU5LX0xJQlJBUllfU1VGRklYICIubGliIikKK3NldChDTUFLRV9ETF9MSUJTICIiKQorCitzZXQoQ01BS0VfRklORF9MSUJSQVJZX1BSRUZJWEVTICIiKQorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAiLmxpYiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi1Jbml0aWFsaXplLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9EYXJ3aW4tSW5pdGlhbGl6ZS5jbWFrZQppbmRleCA4MGU5YTQwLi5kMDg3NDEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi1Jbml0aWFsaXplLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLUluaXRpYWxpemUuY21ha2UKQEAgLTYyLDQ1ICs2MiwzNiBAQAogICAjIEZpbmQgaW5zdGFsbGVkIFNES3MgaW4gZWl0aGVyIFhjb2RlLTQuMysgb3IgcHJlLTQuMyBTREtzIGRpcmVjdG9yeS4KICAgc2V0KF9DTUFLRV9PU1hfU0RLU19ESVIgIiIpCiAgIGlmKE9TWF9ERVZFTE9QRVJfUk9PVCkKLSAgICBmb3JlYWNoKGQgUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcyBTREtzKQotICAgICAgZmlsZShHTE9CIF9DTUFLRV9PU1hfU0RLUyAke09TWF9ERVZFTE9QRVJfUk9PVH0vJHtkfS8qKQorICAgIGZvcmVhY2goX2QgUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcyBTREtzKQorICAgICAgZmlsZShHTE9CIF9DTUFLRV9PU1hfU0RLUyAke09TWF9ERVZFTE9QRVJfUk9PVH0vJHtfZH0vKikKICAgICAgIGlmKF9DTUFLRV9PU1hfU0RLUykKLSAgICAgICAgc2V0KF9DTUFLRV9PU1hfU0RLU19ESVIgJHtPU1hfREVWRUxPUEVSX1JPT1R9LyR7ZH0pCisgICAgICAgIHNldChfQ01BS0VfT1NYX1NES1NfRElSICR7T1NYX0RFVkVMT1BFUl9ST09UfS8ke19kfSkKICAgICAgICAgYnJlYWsoKQogICAgICAgZW5kaWYoKQogICAgIGVuZGZvcmVhY2goKQogICBlbmRpZigpCiAKICAgaWYoX0NNQUtFX09TWF9TREtTX0RJUikKLSAgICAjIFNlbGVjdCBTREsgZm9yIGN1cnJlbnQgT1NYIHZlcnNpb24gYWNjb3VudGluZyBmb3IgdGhlIGtub3duCi0gICAgIyBzcGVjaWFsbHkgbmFtZWQgU0RLcy4KLSAgICBzZXQoX0NNQUtFX09TWF9TREtTX1ZFUl9TVUZGSVhfMTAuNCAidSIpCi0gICAgc2V0KF9DTUFLRV9PU1hfU0RLU19WRVJfU1VGRklYXzEwLjMgIi45IikKLQotICAgICMgZmluZCB0aGUgbGF0ZXN0IFNESworICAgICMgRmluZCB0aGUgbGF0ZXN0IFNESyBhcyByZWNvbW1lbmRlZCBieSBBcHBsZSAoVGVjaG5pY2FsIFEmQSBRQTE4MDYpCiAgICAgc2V0KF9DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OICIwLjAiKQogICAgIGZpbGUoR0xPQiBfQ01BS0VfT1NYX1NES1MgUkVMQVRJVkUgIiR7X0NNQUtFX09TWF9TREtTX0RJUn0iICIke19DTUFLRV9PU1hfU0RLU19ESVJ9L01hY09TWCouc2RrIikKICAgICBmb3JlYWNoKF9TREsgJHtfQ01BS0VfT1NYX1NES1N9KQotICAgICAgaWYoX1NESyBNQVRDSEVTICJNYWNPU1goWzAtOV0rXFwuWzAtOV0rKVteL10qXFwuc2RrIiBBTkQgQ01BS0VfTUFUQ0hfMSBWRVJTSU9OX0dSRUFURVIgJHtfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTn0pCisgICAgICBpZihJU19ESVJFQ1RPUlkgIiR7X0NNQUtFX09TWF9TREtTX0RJUn0vJHtfU0RLfSIKKyAgICAgICAgIEFORCBfU0RLIE1BVENIRVMgIk1hY09TWChbMC05XStcXC5bMC05XSspW14vXSpcXC5zZGsiCisgICAgICAgICBBTkQgQ01BS0VfTUFUQ0hfMSBWRVJTSU9OX0dSRUFURVIgJHtfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTn0pCiAgICAgICAgIHNldChfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTiAiJHtDTUFLRV9NQVRDSF8xfSIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kZm9yZWFjaCgpCiAKLSAgICAjIHBpY2sgYW4gU0RLIHRoYXQgd29ya3MKLSAgICBzZXQoX0NNQUtFX09TWF9TWVNST09UX0RFRkFVTFQpCi0gICAgZm9yZWFjaCh2ZXIgJHtDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVR9Ci0gICAgICAgICAgICAgICAgJHtfQ1VSUkVOVF9PU1hfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke19DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OfSkKLSAgICAgIHNldChfQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUICR7dmVyfSkKLSAgICAgIHNldChfQ01BS0VfT1NYX1NES1NfVkVSICR7X0NNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVH0ke19DTUFLRV9PU1hfU0RLU19WRVJfU1VGRklYXyR7X0NNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVH19KQotICAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9DSEVDSyAiJHtfQ01BS0VfT1NYX1NES1NfRElSfS9NYWNPU1gke19DTUFLRV9PU1hfU0RLU19WRVJ9LnNkayIpCi0gICAgICBpZihJU19ESVJFQ1RPUlkgIiR7X0NNQUtFX09TWF9TWVNST09UX0NIRUNLfSIpCi0gICAgICAgIHNldChfQ01BS0VfT1NYX1NZU1JPT1RfREVGQVVMVCAiJHtfQ01BS0VfT1NYX1NZU1JPT1RfQ0hFQ0t9IikKLSAgICAgICAgYnJlYWsoKQotICAgICAgZW5kaWYoKQotICAgIGVuZGZvcmVhY2goKQorICAgIGlmKE5PVCBfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTiBTVFJFUVVBTCAiMC4wIikKKyAgICAgIHNldChfQ01BS0VfT1NYX1NZU1JPT1RfREVGQVVMVCAiJHtfQ01BS0VfT1NYX1NES1NfRElSfS9NYWNPU1gke19DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OfS5zZGsiKQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShXQVJOSU5HICJDb3VsZCBub3QgZmluZCBhbnkgdmFsaWQgU0RLcyBpbiAke19DTUFLRV9PU1hfU0RLU19ESVJ9IikKKyAgICBlbmRpZigpCiAKLSAgICBpZihOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcgQU5EIE5PVCBDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQgQU5EIF9DVVJSRU5UX09TWF9WRVJTSU9OIFZFUlNJT05fTEVTUyBfQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUKQorICAgIGlmKE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORyBBTkQgTk9UIENNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgIEFORCAoX0NVUlJFTlRfT1NYX1ZFUlNJT04gVkVSU0lPTl9MRVNTIF9DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OCisgICAgICAgICAgICBPUiBfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTiBTVFJFUVVBTCAiMC4wIikpCiAgICAgICBzZXQoQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUICR7X0NVUlJFTlRfT1NYX1ZFUlNJT059IENBQ0hFIFNUUklORwogICAgICAgICAiTWluaW11bSBPUyBYIHZlcnNpb24gdG8gdGFyZ2V0IGZvciBkZXBsb3ltZW50IChhdCBydW50aW1lKTsgbmV3ZXIgQVBJcyB3ZWFrIGxpbmtlZC4gU2V0IHRvIGVtcHR5IHN0cmluZyBmb3IgZGVmYXVsdCB2YWx1ZS4iIEZPUkNFKQogICAgIGVuZGlmKCkKQEAgLTExMyw4ICsxMDQsOCBAQAogIyBTZXQgY2FjaGUgdmFyaWFibGUgLSBlbmQgdXNlciBtYXkgY2hhbmdlIHRoaXMgZHVyaW5nIGNjbWFrZSBvciBjbWFrZS1ndWkgY29uZmlndXJlLgogIyBDaG9vc2UgdGhlIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUuCiBzZXQoX0NNQUtFX09TWF9TWVNST09UX1RZUEUgU1RSSU5HKQotZm9yZWFjaCh2IENNQUtFX09TWF9TWVNST09UIF9DTUFLRV9PU1hfU1lTUk9PVF9ERUZBVUxUKQotICBpZigieCR7JHt2fX0iIE1BVENIRVMgIi8iKQorZm9yZWFjaChfdiBDTUFLRV9PU1hfU1lTUk9PVCBfQ01BS0VfT1NYX1NZU1JPT1RfREVGQVVMVCkKKyAgaWYoIngkeyR7X3Z9fSIgTUFUQ0hFUyAiLyIpCiAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9UWVBFIFBBVEgpCiAgICAgYnJlYWsoKQogICBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCmluZGV4IDBhNGQ0ZTEuLmM2ZGUzYjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCkBAIC00Miw2ICs0Miw3IEBACiAKIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9QUkVGSVggImxpYiIpCiBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYICIuZHlsaWIiKQorc2V0KENNQUtFX0VYVFJBX1NIQVJFRF9MSUJSQVJZX1NVRkZJWEVTICIudGJkIiAiLnNvIikKIHNldChDTUFLRV9TSEFSRURfTU9EVUxFX1BSRUZJWCAibGliIikKIHNldChDTUFLRV9TSEFSRURfTU9EVUxFX1NVRkZJWCAiLnNvIikKIHNldChDTUFLRV9NT0RVTEVfRVhJU1RTIDEpCkBAIC0xNTYsNiArMTU3LDEzIEBACiAgICAgICBicmVhaygpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKKworICBpZihFWElTVFMgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xpYikKKyAgICBsaXN0KElOU0VSVCBDTUFLRV9QTEFURk9STV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIDAgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xpYikKKyAgZW5kaWYoKQorICBpZihFWElTVFMgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xvY2FsL2xpYikKKyAgICBsaXN0KElOU0VSVCBDTUFLRV9QTEFURk9STV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIDAgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xvY2FsL2xpYikKKyAgZW5kaWYoKQogZW5kaWYoKQogaWYgKE9TWF9ERVZFTE9QRVJfUk9PVCBBTkQgRVhJU1RTICIke09TWF9ERVZFTE9QRVJfUk9PVH0vTGlicmFyeS9GcmFtZXdvcmtzIikKICAgbGlzdChBUFBFTkQgQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRICkBAIC0yMDgsMTEgKzIxNiwxOSBAQAogdW5zZXQoX2FwcHNfcGF0aHMpCiAKIGluY2x1ZGUoUGxhdGZvcm0vVW5peFBhdGhzKQotaWYoX0NNQUtFX09TWF9TWVNST09UX1BBVEggQU5EIEVYSVNUUyAke19DTUFLRV9PU1hfU1lTUk9PVF9QQVRIfS91c3IvaW5jbHVkZSkKLSAgbGlzdChBUFBFTkQgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3VzcikKLSAgZm9yZWFjaChsYW5nIEMgQ1hYIE9CSkMgT0JKQ1hYIFN3aWZ0KQotICAgIGxpc3QoQVBQRU5EIF9DTUFLRV8ke2xhbmd9X0lNUExJQ0lUX0lOQ0xVREVfRElSRUNUT1JJRVNfSU5JVCAke19DTUFLRV9PU1hfU1lTUk9PVF9QQVRIfS91c3IvaW5jbHVkZSkKLSAgZW5kZm9yZWFjaCgpCitpZihfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSCkKKyAgaWYoRVhJU1RTICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3Vzci9pbmNsdWRlKQorICAgIGxpc3QoSU5TRVJUIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSCAwICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3VzcikKKyAgICBmb3JlYWNoKGxhbmcgQyBDWFggT0JKQyBPQkpDWFggU3dpZnQpCisgICAgICBsaXN0KEFQUEVORCBfQ01BS0VfJHtsYW5nfV9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTX0lOSVQgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2luY2x1ZGUpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGlmKCkKKyAgaWYoRVhJU1RTICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3Vzci9sb2NhbC9pbmNsdWRlKQorICAgIGxpc3QoSU5TRVJUIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSCAwICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3Vzci9sb2NhbCkKKyAgICBmb3JlYWNoKGxhbmcgQyBDWFggT0JKQyBPQkpDWFggU3dpZnQpCisgICAgICBsaXN0KEFQUEVORCBfQ01BS0VfJHtsYW5nfV9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTX0lOSVQgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xvY2FsL2luY2x1ZGUpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGlmKCkKIGVuZGlmKCkKIGxpc3QoQVBQRU5EIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSAogICAvc3cgICAgICAgICMgRmluawpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9IUC1VWC1IUC1DLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9IUC1VWC1IUC1DLmNtYWtlCmluZGV4IDc2MTAzODMuLjU3YmEyZWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vSFAtVVgtSFAtQy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0hQLVVYLUhQLUMuY21ha2UKQEAgLTMsNCArMyw0IEBACiAKIHNldChDTUFLRV9DX0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtRSA8U09VUkNFPiA+IDxQUkVQUk9DRVNTRURfU09VUkNFPiIpCiBzZXQoQ01BS0VfQ19DUkVBVEVfQVNTRU1CTFlfU09VUkNFICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtUyA8U09VUkNFPiAtbyA8QVNTRU1CTFlfU09VUkNFPiIpCi1zZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAiPENNQUtFX0NfQ09NUElMRVI+IDxERUZJTkVTPiAtQWEgLUFlIDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAgIC1jIDxTT1VSQ0U+IikKK3NldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IC1BYSAtQWUgPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbS1DLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9MaW51eC1PcGVuV2F0Y29tLUMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzMzQ5YQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbS1DLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbS1DWFguY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20tQ1hYLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzM0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20tQ1hYLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjRlOTk1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9MaW51eC1PcGVuV2F0Y29tLmNtYWtlCkBAIC0wLDAgKzEsMjUgQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworIyBUaGlzIG1vZHVsZSBpcyBzaGFyZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzOyB1c2UgaW5jbHVkZSBibG9ja2VyLgoraW5jbHVkZV9ndWFyZCgpCisKK3NldChDTUFLRV9CVUlMRF9UWVBFX0lOSVQgRGVidWcpCisKK3N0cmluZyhBUFBFTkQgQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIGxpbnV4IG9wdCBub2V4dGVuc2lvbiIpCitzdHJpbmcoQVBQRU5EIENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBsaW51eCIpCitzdHJpbmcoQVBQRU5EIENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBsaW51eCIpCisKKyMgc2luZ2xlL211bHRpLXRocmVhZGVkICAgICAgICAgICAgICAgICAvLWJtCisjIGRlZmF1bHQgaXMgc2V0dXAgZm9yIHNpbmdsZS10aHJlYWRlZCBsaWJyYXJpZXMKK3N0cmluZyhBUFBFTkQgQ01BS0VfQ19GTEFHU19JTklUICIgLWJ0PWxpbnV4IikKK3N0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgIiAtYnQ9bGludXggLXhzIikKKworaWYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCisgIGlmKE5PVCBDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgICAgc2V0KENNQUtFX0NfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUyAkRU5We1dBVENPTX0vbGgpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NYWF9TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICAgIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUyAkRU5We1dBVENPTX0vbGgpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vTGludXgtY29tby5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vTGludXgtY29tby5jbWFrZQppbmRleCBkMTU1MGQyLi5mNmRiMzRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LWNvbW8uY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9MaW51eC1jb21vLmNtYWtlCkBAIC0xMSw3ICsxMSw3IEBACiAKIHNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFCiAgICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC0tcHJlbGlua19vYmplY3RzIDxPQkpFQ1RTPiIKLSAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPEZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8RkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIAogc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfQ19GTEFHICIiKQogc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX0NfRkxBR1MgIiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL09TMi1PcGVuV2F0Y29tLUMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL09TMi1PcGVuV2F0Y29tLUMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhNGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vT1MyLU9wZW5XYXRjb20tQy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFBsYXRmb3JtL09TMi1PcGVuV2F0Y29tKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9PUzItT3BlbldhdGNvbS1DWFguY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL09TMi1PcGVuV2F0Y29tLUNYWC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWE0ZDllCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9PUzItT3BlbldhdGNvbS1DWFguY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9PUzItT3BlbldhdGNvbSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vT1MyLU9wZW5XYXRjb20uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL09TMi1PcGVuV2F0Y29tLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGZiOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL09TMi1PcGVuV2F0Y29tLmNtYWtlCkBAIC0wLDAgKzEsMzUgQEAKKyMgVGhpcyBtb2R1bGUgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGxhbmd1YWdlczsgdXNlIGluY2x1ZGUgYmxvY2tlci4KK2luY2x1ZGVfZ3VhcmQoKQorCitzZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQorCitpZihERUZJTkVEIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgQU5EIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgU1RSRVFVQUwgIkk4NiIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIG9zMiIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIG9zMl9kbGwiKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBvczJfZGxsIikKK2Vsc2UoKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBvczJ2MiIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIG9zMnYyX2RsbCIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIG9zMnYyX2RsbCIpCitlbmRpZigpCisKK3NldChDTUFLRV9DX0NPTVBJTEVfT1BUSU9OU19ETEwgIi1iZCIpICMgTm90ZTogVGhpcyB2YXJpYWJsZSBpcyBhICc7JyBzZXBhcmF0ZWQgbGlzdAorc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX0NfRkxBR1MgIi1iZCIpICMgLi4uIHdoaWxlIHRoaXMgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLgorCitzdHJpbmcoQVBQRU5EIENNQUtFX0NfRkxBR1NfSU5JVCAiIC1idD1vczIiKQorc3RyaW5nKEFQUEVORCBDTUFLRV9DWFhfRkxBR1NfSU5JVCAiIC1idD1vczIgLXhzIikKKworaWYoTk9UIENNQUtFX0NfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgaWYoREVGSU5FRCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SIEFORCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SIFNUUkVRVUFMICJJODYiKQorICAgIHNldChDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2ggJEVOVntXQVRDT019L2gvb3MyMXgpCisgIGVsc2UoKQorICAgIHNldChDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2ggJEVOVntXQVRDT019L2gvb3MyKQorICBlbmRpZigpCitlbmRpZigpCitpZihOT1QgQ01BS0VfQ1hYX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIGlmKERFRklORUQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBBTkQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiSTg2IikKKyAgICBzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2ggJEVOVntXQVRDT019L2gvb3MyMXgpCisgIGVsc2UoKQorICAgIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUyAkRU5We1dBVENPTX0vaCAkRU5We1dBVENPTX0vaC9vczIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vT1MyLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9PUzIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkZjY2ZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vT1MyLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK3NldChPUzIgMSkKKworc2V0KENNQUtFX1NUQVRJQ19MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVggIi5saWIiKQorc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVggIi5kbGwiKQorc2V0KENNQUtFX0lNUE9SVF9MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9JTVBPUlRfTElCUkFSWV9TVUZGSVggIi5saWIiKQorc2V0KENNQUtFX0VYRUNVVEFCTEVfU1VGRklYICIuZXhlIikKK3NldChDTUFLRV9MSU5LX0xJQlJBUllfU1VGRklYICIubGliIikKK3NldChDTUFLRV9ETF9MSUJTICIiKQorCitzZXQoQ01BS0VfRklORF9MSUJSQVJZX1BSRUZJWEVTICIiKQorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAiLmxpYiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1VuaXhQYXRocy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vVW5peFBhdGhzLmNtYWtlCmluZGV4IDk3Zjc0NGQuLmI5MzgxYzMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vVW5peFBhdGhzLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vVW5peFBhdGhzLmNtYWtlCkBAIC0yMSw2ICsyMSwxMCBAQAogCiAjIExpc3QgY29tbW9uIGluc3RhbGxhdGlvbiBwcmVmaXhlcy4gIFRoZXNlIHdpbGwgYmUgdXNlZCBmb3IgYWxsCiAjIHNlYXJjaCB0eXBlcy4KKyMKKyMgUmVtaW5kZXIgd2hlbiBhZGRpbmcgbmV3IGxvY2F0aW9ucyBjb21wdXRlZCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcworIyBwbGVhc2UgbWFrZSBzdXJlIHRvIGtlZXAgSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fUFJFRklYX1BBVEgucnN0CisjIHN5bmNocm9uaXplZAogbGlzdChBUFBFTkQgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRICiAgICMgU3RhbmRhcmQKICAgL3Vzci9sb2NhbCAvdXNyIC8KQEAgLTg2LDYgKzkwLDE3IEBACiAKIHVuc2V0KF9jbWFrZV9zeXNyb290X2NvbXBpbGUpCiAKKyMgUmVtaW5kZXIgd2hlbiBhZGRpbmcgbmV3IGxvY2F0aW9ucyBjb21wdXRlZCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcworIyBwbGVhc2UgbWFrZSBzdXJlIHRvIGtlZXAgSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fUFJFRklYX1BBVEgucnN0CisjIHN5bmNocm9uaXplZAoraWYoQ01BS0VfQ09NUElMRVJfU1lTUk9PVCkKKyAgbGlzdChQUkVQRU5EIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSCAiJHtDTUFLRV9DT01QSUxFUl9TWVNST09UfSIpCisKKyAgaWYoREVGSU5FRCBFTlZ7Q09OREFfUFJFRklYfSBBTkQgRVhJU1RTICIkRU5We0NPTkRBX1BSRUZJWH0iKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSCAiJEVOVntDT05EQV9QUkVGSVh9IikKKyAgZW5kaWYoKQorZW5kaWYoKQorCiAjIEVuYWJsZSB1c2Ugb2YgbGliMzIgYW5kIGxpYjY0IHNlYXJjaCBwYXRoIHZhcmlhbnRzIGJ5IGRlZmF1bHQuCiBzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMgVFJVRSkKIHNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUyBUUlVFKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLmNtYWtlCmluZGV4IGEwNDg2OTguLmRmZjgxNjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1DbGFuZy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtQ2xhbmcuY21ha2UKQEAgLTU1LDEzICs1NSwxMyBAQAogCiAgICMgQ3JlYXRlIGFyY2hpdmluZyBydWxlcyB0byBzdXBwb3J0IGxhcmdlIG9iamVjdCBmaWxlIGxpc3RzIGZvciBzdGF0aWMgbGlicmFyaWVzLgogICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiBxYyA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKLSAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTElCUkFSWQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLWZ1c2UtbGQ9bGxkLWxpbmsgLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgPENNQUtFX1NIQVJFRF9MSUJSQVJZXyR7bGFuZ31fRkxBR1M+IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV8ke2xhbmd9X0ZMQUdTPiAtbyA8VEFSR0VUPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IC1YbGlua2VyIC9pbXBsaWI6PFRBUkdFVF9JTVBMSUI+IC1YbGlua2VyIC9wZGI6PFRBUkdFVF9QREI+IC1YbGlua2VyIC92ZXJzaW9uOjxUQVJHRVRfVkVSU0lPTl9NQUpPUj4uPFRBUkdFVF9WRVJTSU9OX01JTk9SPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTU9EVUxFICR7Q01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUll9KQogICBzZXQoQ01BS0VfJHtsYW5nfV9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IC1mdXNlLWxkPWxsZC1saW5rIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIDxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gLVhsaW5rZXIgL2ltcGxpYjo8VEFSR0VUX0lNUExJQj4gLVhsaW5rZXIgL3BkYjo8VEFSR0VUX1BEQj4gLVhsaW5rZXIgL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtZnVzZS1sZD1sbGQtbGluayAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiA8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLVhsaW5rZXIgL2ltcGxpYjo8VEFSR0VUX0lNUExJQj4gLVhsaW5rZXIgL3BkYjo8VEFSR0VUX1BEQj4gLVhsaW5rZXIgL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCiAKICAgaWYoTk9UICIke2xhbmd9IiBTVFJFUVVBTCAiQVNNIikKICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZCAgICAgICAgIC1YY2xhbmcgLWZsdG8tdmlzaWJpbGl0eS1wdWJsaWMtc3RkIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPWxpYmNtdCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1HTlUuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtR05VLmNtYWtlCmluZGV4IDM4YThjZjQuLmEyZTM4MTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1HTlUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUdOVS5jbWFrZQpAQCAtNDcsMTYgKzQ3LDEyIEBACiAgIHNldChfX1dJTkRPV1NfR05VX0xEX1JFU1BPTlNFIDApCiBlbmRpZigpCiAKLWlmKE5PVCBDTUFLRV9HRU5FUkFUT1JfUkMgQU5EIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJVbml4IE1ha2VmaWxlcyIpCi0gIHNldChDTUFLRV9HRU5FUkFUT1JfUkMgd2luZHJlcykKLWVuZGlmKCkKLQogbWFjcm8oX193aW5kb3dzX2NvbXBpbGVyX2dudSBsYW5nKQogCiAgIGlmKE1TWVMgT1IgTUlOR1cpCiAgICAgIyBDcmVhdGUgYXJjaGl2aW5nIHJ1bGVzIHRvIHN1cHBvcnQgbGFyZ2Ugb2JqZWN0IGZpbGUgbGlzdHMgZm9yIHN0YXRpYyBsaWJyYXJpZXMuCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCi0gICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKICAgICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQogCiAgICAgIyBJbml0aWFsaXplIEMgbGluayB0eXBlIHNlbGVjdGlvbiBmbGFncy4gIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHdoZW4KQEAgLTEwOCw3ICsxMDQsNyBAQAogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFSWV8ke2xhbmd9X0ZMQUdTPiA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gLW8gPFRBUkdFVD4gLVdsLC0tb3V0LWltcGxpYiw8VEFSR0VUX0lNUExJQj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiAtV2wsLS1vdXQtaW1wbGliLDxUQVJHRVRfSU1QTElCPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1XbCwtLW91dC1pbXBsaWIsPFRBUkdFVF9JTVBMSUI+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCiAKICAgbGlzdChBUFBFTkQgQ01BS0VfJHtsYW5nfV9BQklfRklMRVMgIlBsYXRmb3JtL1dpbmRvd3MtR05VLSR7bGFuZ30tQUJJIikKIApAQCAtMTMyLDcgKzEyOCw3IEBACiAgIGVuZGlmKCkKIAogICBpZihOT1QgQ01BS0VfUkNfQ09NUElMRVJfSU5JVCBBTkQgTk9UIENNQUtFX0dFTkVSQVRPUl9SQykKLSAgICBzZXQoQ01BS0VfUkNfQ09NUElMRVJfSU5JVCB3aW5kcmVzKQorICAgIHNldChDTUFLRV9SQ19DT01QSUxFUl9JTklUICR7X0NNQUtFX1RPT0xDSEFJTl9QUkVGSVh9d2luZHJlcykKICAgZW5kaWYoKQogCiAgIGVuYWJsZV9sYW5ndWFnZShSQykKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1JbnRlbC5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1JbnRlbC5jbWFrZQppbmRleCA5NmIxNzYwLi41ZDhmN2ZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtSW50ZWwuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUludGVsLmNtYWtlCkBAIC0xMSw3ICsxMSw3IEBACiBpbmNsdWRlKFBsYXRmb3JtL1dpbmRvd3MtTVNWQykKIG1hY3JvKF9fd2luZG93c19jb21waWxlcl9pbnRlbCBsYW5nKQogICBfX3dpbmRvd3NfY29tcGlsZXJfbXN2Yygke2xhbmd9KQotICBzdHJpbmcoUkVQTEFDRSAiPENNQUtFX0xJTktFUj4gL2xpYiIgInhpbGliIiBDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAiJHtDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWX0iKQorICBzdHJpbmcoUkVQTEFDRSAiPENNQUtFX0FSPiIgInhpbGliIiBDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAiJHtDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWX0iKQogICBmb3JlYWNoKHJ1bGUgQ1JFQVRFX1NIQVJFRF9MSUJSQVJZIENSRUFURV9TSEFSRURfTU9EVUxFIExJTktfRVhFQ1VUQUJMRSkKICAgICBzdHJpbmcoUkVQTEFDRSAiPENNQUtFX0xJTktFUj4iICJ4aWxpbmsiIENNQUtFXyR7bGFuZ31fJHtydWxlfSAiJHtDTUFLRV8ke2xhbmd9XyR7cnVsZX19IikKICAgZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtTVNWQy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1NU1ZDLmNtYWtlCmluZGV4IGZiMjMwNTguLjI0NzZhMzMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1NU1ZDLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1NU1ZDLmNtYWtlCkBAIC0zMTYsNyArMzE2LDcgQEAKICAgICAiJHtfQ01BS0VfVlNfTElOS19ETEx9PENNQUtFX0xJTktFUj4gJHtDTUFLRV9DTF9OT0xPR099IDxPQkpFQ1RTPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gL291dDo8VEFSR0VUPiAvaW1wbGliOjxUQVJHRVRfSU1QTElCPiAvcGRiOjxUQVJHRVRfUERCPiAvZGxsIC92ZXJzaW9uOjxUQVJHRVRfVkVSU0lPTl9NQUpPUj4uPFRBUkdFVF9WRVJTSU9OX01JTk9SPiR7X1BMQVRGT1JNX0xJTktfRkxBR1N9IDxMSU5LX0ZMQUdTPiA8TElOS19MSUJSQVJJRVM+ICR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQogCiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTU9EVUxFICR7Q01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUll9KQotICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU1RBVElDX0xJQlJBUlkgICI8Q01BS0VfTElOS0VSPiAvbGliICR7Q01BS0VfQ0xfTk9MT0dPfSA8TElOS19GTEFHUz4gL291dDo8VEFSR0VUPiA8T0JKRUNUUz4gIikKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICAiPENNQUtFX0FSPiAke0NNQUtFX0NMX05PTE9HT30gPExJTktfRkxBR1M+IC9vdXQ6PFRBUkdFVD4gPE9CSkVDVFM+ICIpCiAKICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PQkpFQ1QKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAke0NNQUtFX0NMX05PTE9HT30ke19DT01QSUxFXyR7bGFuZ319IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gL0ZvPE9CSkVDVD4gL0ZkPFRBUkdFVF9DT01QSUxFX1BEQj4ke19GU18ke2xhbmd9fSAtYyA8U09VUkNFPiR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLU5WSURJQS1DVURBLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLU5WSURJQS1DVURBLmNtYWtlCmluZGV4IDk4Y2Q1ZWYuLmE4OGY0YmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1OVklESUEtQ1VEQS5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtTlZJRElBLUNVREEuY21ha2UKQEAgLTEsMTEgKzEsMTEgQEAKIGluY2x1ZGUoUGxhdGZvcm0vV2luZG93cy1NU1ZDKQogCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX1BUWF9DT01QSUxBVElPTgotICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLXB0eCA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLXB0eCA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX1NFUEFSQUJMRV9DT01QSUxBVElPTgotICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLWRjIDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTIikKKyAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+ICR7X0NNQUtFX0NPTVBJTEVfQVNfQ1VEQV9GTEFHfSAtZGMgPFNPVVJDRT4gLW8gPE9CSkVDVD4gLVhjb21waWxlcj0tRmQ8VEFSR0VUX0NPTVBJTEVfUERCPiwtRlMiKQogc2V0KENNQUtFX0NVREFfQ09NUElMRV9XSE9MRV9DT01QSUxBVElPTgotICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLWMgPFNPVVJDRT4gLW8gPE9CSkVDVD4gLVhjb21waWxlcj0tRmQ8VEFSR0VUX0NPTVBJTEVfUERCPiwtRlMiKQorICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gJHtfQ01BS0VfQ09NUElMRV9BU19DVURBX0ZMQUd9IC1jIDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTIikKIAogc2V0KF9fSU1QTElDVF9MSU5LUyApCiBmb3JlYWNoKGRpciAke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKQEAgLTIzLDcgKzIzLDcgQEAKICAgIiR7X0NNQUtFX1ZTX0xJTktfRExMfTxDTUFLRV9MSU5LRVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSA8T0JKRUNUUz4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9IC9vdXQ6PFRBUkdFVD4gL2ltcGxpYjo8VEFSR0VUX0lNUExJQj4gL3BkYjo8VEFSR0VUX1BEQj4gL2RsbCAvdmVyc2lvbjo8VEFSR0VUX1ZFUlNJT05fTUFKT1I+LjxUQVJHRVRfVkVSU0lPTl9NSU5PUj4ke19QTEFURk9STV9MSU5LX0ZMQUdTfSA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiR7X19JTVBMSUNUX0xJTktTfSAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKIAogc2V0KENNQUtFX0NVREFfQ1JFQVRFX1NIQVJFRF9NT0RVTEUgJHtDTUFLRV9DVURBX0NSRUFURV9TSEFSRURfTElCUkFSWX0pCi1zZXQoQ01BS0VfQ1VEQV9DUkVBVEVfU1RBVElDX0xJQlJBUlkgICI8Q01BS0VfTElOS0VSPiAvbGliICR7Q01BS0VfQ0xfTk9MT0dPfSA8TElOS19GTEFHUz4gL291dDo8VEFSR0VUPiA8T0JKRUNUUz4gIikKK3NldChDTUFLRV9DVURBX0NSRUFURV9TVEFUSUNfTElCUkFSWSAgIjxDTUFLRV9BUj4gJHtDTUFLRV9DTF9OT0xPR099IDxMSU5LX0ZMQUdTPiAvb3V0OjxUQVJHRVQ+IDxPQkpFQ1RTPiAiKQogc2V0KENNQUtFX0NVREFfTElOS0VSX1NVUFBPUlRTX1BEQiBPTikKIHNldChDTUFLRV9DVURBX0xJTktfRVhFQ1VUQUJMRQogICAiJHtfQ01BS0VfVlNfTElOS19FWEV9PENNQUtFX0xJTktFUj4gJHtDTUFLRV9DTF9OT0xPR099IDxPQkpFQ1RTPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gL291dDo8VEFSR0VUPiAvaW1wbGliOjxUQVJHRVRfSU1QTElCPiAvcGRiOjxUQVJHRVRfUERCPiAvdmVyc2lvbjo8VEFSR0VUX1ZFUlNJT05fTUFKT1I+LjxUQVJHRVRfVkVSU0lPTl9NSU5PUj4ke19QTEFURk9STV9MSU5LX0ZMQUdTfSA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiR7X19JTVBMSUNUX0xJTktTfSAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKQEAgLTQ2LDkgKzQ2LDkgQEAKIHVuc2V0KF9fSU1QTElDVF9ETElOS19ESVJTKQogCiBzZXQoQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZCi0gICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTJHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKKyAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTJHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKIHNldChDTUFLRV9DVURBX0RFVklDRV9MSU5LX0VYRUNVVEFCTEUKLSAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAgJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPEZMQUdTPiAke19DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTfSAtc2hhcmVkIC1kbGluayA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyR7X19JTVBMSUNUX0RMSU5LX0ZMQUdTfSIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiAke19DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTfSAtc2hhcmVkIC1kbGluayA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyR7X19JTVBMSUNUX0RMSU5LX0ZMQUdTfSIpCiB1bnNldChfX0lNUExJQ1RfRExJTktfRkxBR1MpCiAKIHN0cmluZyhSRVBMQUNFICIvRCIgIi1EIiBfUExBVEZPUk1fREVGSU5FU19DVURBICIke19QTEFURk9STV9ERUZJTkVTfSR7X1BMQVRGT1JNX0RFRklORVNfQ1hYfSIpCkBAIC03Myw2ICs3MywxMCBAQAogc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19TSEFSRUQgICJjdWRhZGV2cnQ7Y3VkYXJ0IikKIHNldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfTk9ORSAgICAiIikKIAoraWYoVU5JWCkKKyAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NUQVRJQyAicnQiICJwdGhyZWFkIiAiZGwiKQorZW5kaWYoKQorCiBzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1NfSU5JVCAiICR7UExBVEZPUk1fREVGSU5FU19DVURBfSAtRF9XSU5ET1dTIC1YY29tcGlsZXI9XCIke19XM30ke19GTEFHU19DWFh9XCIiKQogc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTX0RFQlVHX0lOSVQgIiAtWGNvbXBpbGVyPVwiJHtfTURkfS1aaSAtT2IwIC1PZCAke19SVEMxfVwiIikKIHN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHU19SRUxFQVNFX0lOSVQgIiAtWGNvbXBpbGVyPVwiJHtfTUR9LU8yIC1PYjJcIiAtRE5ERUJVRyIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtT3BlbldhdGNvbS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1PcGVuV2F0Y29tLmNtYWtlCmluZGV4IDc2Y2QyOGIuLjcwMDU1ZGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1PcGVuV2F0Y29tLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1PcGVuV2F0Y29tLmNtYWtlCkBAIC0xLDEyOSArMSwzMiBAQAogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgogCi0KICMgVGhpcyBtb2R1bGUgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGxhbmd1YWdlczsgdXNlIGluY2x1ZGUgYmxvY2tlci4KLWlmKF9fV0lORE9XU19PUEVOV0FUQ09NKQotICByZXR1cm4oKQotZW5kaWYoKQotc2V0KF9fV0lORE9XU19PUEVOV0FUQ09NIDEpCitpbmNsdWRlX2d1YXJkKCkKIAotc2V0KENNQUtFX0xJQlJBUllfUEFUSF9GTEFHICJsaWJwYXRoICIpCi1zZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZMQUcgImxpYnJhcnkgIikKLXNldChDTUFLRV9MSU5LX0xJQlJBUllfRklMRV9GTEFHICJsaWJyYXJ5ICIpCitzZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQogCi1pZihDTUFLRV9WRVJCT1NFX01BS0VGSUxFKQotICBzZXQoQ01BS0VfV0NMX1FVSUVUKQotICBzZXQoQ01BS0VfV0xJTktfUVVJRVQpCi0gIHNldChDTUFLRV9MSUJfUVVJRVQpCi1lbHNlKCkKLSAgc2V0KENNQUtFX1dDTF9RVUlFVCAiLXpxIikKLSAgc2V0KENNQUtFX1dMSU5LX1FVSUVUICJvcHRpb24gcXVpZXQiKQotICBzZXQoQ01BS0VfTElCX1FVSUVUICItcSIpCi1lbmRpZigpCi0KLXN0cmluZyhBUFBFTkQgQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUICIgIikKIHNldChDTUFLRV9DUkVBVEVfV0lOMzJfRVhFICJzeXN0ZW0gbnRfd2luIiApCiBzZXQoQ01BS0VfQ1JFQVRFX0NPTlNPTEVfRVhFICJzeXN0ZW0gbnQiICkKIHN0cmluZyhBUFBFTkQgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIG50X2RsbCIpCiBzdHJpbmcoQVBQRU5EIENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBudF9kbGwiKQotZm9yZWFjaCh0eXBlIFNIQVJFRCBNT0RVTEUgRVhFKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7dHlwZX1fTElOS0VSX0ZMQUdTX0RFQlVHX0lOSVQgIiBkZWJ1ZyBhbGwgb3B0IG1hcCIpCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfJHt0eXBlfV9MSU5LRVJfRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVCAiIGRlYnVnIGFsbCBvcHQgbWFwIikKLWVuZGZvcmVhY2goKQogCiBzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRExMICItYmQiKSAjIE5vdGU6IFRoaXMgdmFyaWFibGUgaXMgYSAnOycgc2VwYXJhdGVkIGxpc3QKIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9DX0ZMQUdTICItYmQiKSAjIC4uLiB3aGlsZSB0aGlzIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZy4KIAogc2V0KENNQUtFX1JDX0NPTVBJTEVSICJyYyIgKQogCi1zZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQotCiAjIHNpbmdsZS9tdWx0aS10aHJlYWRlZCAgICAgICAgICAgICAgICAgLy1ibQogIyBzdGF0aWMvRExMIHJ1bi10aW1lIGxpYnJhcmllcyAgICAgICAgIC8tYnIKICMgZGVmYXVsdCBpcyBzZXR1cCBmb3IgbXVsdGktdGhyZWFkZWQgKyBETEwgcnVuLXRpbWUgbGlicmFyaWVzCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NfRkxBR1NfSU5JVCAiIC1idD1udCAtdzMgLWRXSU4zMiAtYnIgLWJtIikKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgIiAtYnQ9bnQgLXhzIC13MyAtZFdJTjMyIC1iciAtYm0iKQotZm9yZWFjaChsYW5nIEMgQ1hYKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfREVCVUdfSU5JVCAiIC1kMiIpCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19NSU5TSVpFUkVMX0lOSVQgIiAtcyAtb3MgLWQwIC1kTkRFQlVHIikKLSAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX1JFTEVBU0VfSU5JVCAiIC1zIC1vdCAtZDAgLWROREVCVUciKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVCAiIC1zIC1vdCAtZDEgLWROREVCVUciKQotZW5kZm9yZWFjaCgpCitzdHJpbmcoQVBQRU5EIENNQUtFX0NfRkxBR1NfSU5JVCAiIC1idD1udCAtZFdJTjMyIC1iciAtYm0iKQorc3RyaW5nKEFQUEVORCBDTUFLRV9DWFhfRkxBR1NfSU5JVCAiIC1idD1udCAteHMgLWRXSU4zMiAtYnIgLWJtIikKIAotZm9yZWFjaCh0eXBlIENSRUFURV9TSEFSRURfTElCUkFSWSBDUkVBVEVfU0hBUkVEX01PRFVMRSBMSU5LX0VYRUNVVEFCTEUpCi0gIHNldChDTUFLRV9DXyR7dHlwZX1fVVNFX1dBVENPTV9RVU9URSAxKQotICBzZXQoQ01BS0VfQ1hYXyR7dHlwZX1fVVNFX1dBVENPTV9RVU9URSAxKQotZW5kZm9yZWFjaCgpCi0KLXNldChDTUFLRV9DX0NSRUFURV9JTVBPUlRfTElCUkFSWQotICAid2xpYiAtYyAtcSAtbiAtYiA8VEFSR0VUX0lNUExJQj4gKzxUQVJHRVRfUVVPVEVEPiIpCi1zZXQoQ01BS0VfQ1hYX0NSRUFURV9JTVBPUlRfTElCUkFSWSAke0NNQUtFX0NfQ1JFQVRFX0lNUE9SVF9MSUJSQVJZfSkKLQotc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFCi0gICAgIndsaW5rICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAke0NNQUtFX1dMSU5LX1FVSUVUfSBuYW1lIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiBmaWxlIHs8T0JKRUNUUz59IDxMSU5LX0xJQlJBUklFUz4gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCi0KLQotc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgJHtDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRX0pCi0KLSMgY29tcGlsZSBhIEMrKyBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKLXNldChDTUFLRV9DWFhfQ09NUElMRV9PQkpFQ1QKLSAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICR7Q01BS0VfV0NMX1FVSUVUfSAtZCsgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtZm88T0JKRUNUPiAtYyAtY2MrKyA8U09VUkNFPiR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQotCi0jIGNvbXBpbGUgYSBDIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQotc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QKLSAgICAiPENNQUtFX0NfQ09NUElMRVI+ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAke0NNQUtFX1dDTF9RVUlFVH0gLWQrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLWZvPE9CSkVDVD4gLWMgLWNjIDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCi0KLSMgcHJlcHJvY2VzcyBhIEMgc291cmNlIGZpbGUKLXNldChDTUFLRV9DX0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFCi0gICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9XQ0xfUVVJRVR9IC1kKyA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1mbzxQUkVQUk9DRVNTRURfU09VUkNFPiAtcGwgLWNjIDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCi0KLSMgcHJlcHJvY2VzcyBhIEMrKyBzb3VyY2UgZmlsZQotc2V0KENNQUtFX0NYWF9DUkVBVEVfUFJFUFJPQ0VTU0VEX1NPVVJDRQotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9XQ0xfUVVJRVR9IC1kKyA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1mbzxQUkVQUk9DRVNTRURfU09VUkNFPiAtcGwgLWNjKysgPFNPVVJDRT4ke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKLQotc2V0KENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKLSAid2xpbmsgJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICR7Q01BS0VfV0xJTktfUVVJRVR9IG5hbWUgPFRBUkdFVD4gPExJTktfRkxBR1M+IG9wdGlvbiBpbXBsaWI9PFRBUkdFVF9JTVBMSUI+IGZpbGUgezxPQkpFQ1RTPn0gPExJTktfTElCUkFSSUVTPiAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKLXN0cmluZyhSRVBMQUNFICIgb3B0aW9uIGltcGxpYj08VEFSR0VUX0lNUExJQj4iICIiCi0gIENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRSAiJHtDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZfSIpCi0KLSMgY3JlYXRlIGEgQyBzaGFyZWQgbGlicmFyeQotc2V0KENNQUtFX0NfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICR7Q01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElCUkFSWX0pCi0KLSMgY3JlYXRlIGEgQyBzaGFyZWQgbW9kdWxlCi1zZXQoQ01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRSAke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRX0pCi0KLSMgY3JlYXRlIGEgQysrIHN0YXRpYyBsaWJyYXJ5Ci1zZXQoQ01BS0VfQ1hYX0NSRUFURV9TVEFUSUNfTElCUkFSWSAgIndsaWIgJHtDTUFLRV9MSUJfUVVJRVR9IC1jIC1uIC1iIDxUQVJHRVRfUVVPVEVEPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICIpCi0KLSMgY3JlYXRlIGEgQyBzdGF0aWMgbGlicmFyeQotc2V0KENNQUtFX0NfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICR7Q01BS0VfQ1hYX0NSRUFURV9TVEFUSUNfTElCUkFSWX0pCi0KLWlmKE5PVCBfQ01BS0VfV0FUQ09NX1ZFUlNJT04pCi0gIHNldChfQ01BS0VfV0FUQ09NX1ZFUlNJT04gMSkKLSAgaWYoQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OKQotICAgIHNldChfY29tcGlsZXJfdmVyc2lvbiAke0NNQUtFX0NfQ09NUElMRVJfVkVSU0lPTn0pCi0gICAgc2V0KF9jb21waWxlcl9pZCAke0NNQUtFX0NfQ09NUElMRVJfSUR9KQotICBlbHNlKCkKLSAgICBzZXQoX2NvbXBpbGVyX3ZlcnNpb24gJHtDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTn0pCi0gICAgc2V0KF9jb21waWxlcl9pZCAke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0pCitpZihDTUFLRV9DUk9TU0NPTVBJTElORykKKyAgaWYoTk9UIENNQUtFX0NfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgICBzZXQoQ01BS0VfQ19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTICRFTlZ7V0FUQ09NfS9oICRFTlZ7V0FUQ09NfS9oL250KQogICBlbmRpZigpCi0gIHNldChXQVRDT00xNikKLSAgc2V0KFdBVENPTTE3KQotICBzZXQoV0FUQ09NMTgpCi0gIHNldChXQVRDT00xOSkKLSAgaWYoIiR7X2NvbXBpbGVyX2lkfSIgU1RSRVFVQUwgIk9wZW5XYXRjb20iKQotICAgIGlmKCIke19jb21waWxlcl92ZXJzaW9ufSIgVkVSU0lPTl9MRVNTIDEuNykKLSAgICAgIHNldChXQVRDT00xNiAxKQotICAgIGVuZGlmKCkKLSAgICBpZigiJHtfY29tcGlsZXJfdmVyc2lvbn0iIFZFUlNJT05fRVFVQUwgMS43KQotICAgICAgc2V0KFdBVENPTTE3IDEpCi0gICAgZW5kaWYoKQotICAgIGlmKCIke19jb21waWxlcl92ZXJzaW9ufSIgVkVSU0lPTl9FUVVBTCAxLjgpCi0gICAgICBzZXQoV0FUQ09NMTggMSkKLSAgICBlbmRpZigpCi0gICAgaWYoIiR7X2NvbXBpbGVyX3ZlcnNpb259IiBWRVJTSU9OX0VRVUFMIDEuOSkKLSAgICAgIHNldChXQVRDT00xOSAxKQotICAgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NYWF9TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICAgIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUyAkRU5We1dBVENPTX0vaCAkRU5We1dBVENPTX0vaC9udCkKICAgZW5kaWYoKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLWRmLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLWRmLmNtYWtlCmluZGV4IGY5NDg5MTQuLjhiODI0YmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1kZi5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtZGYuY21ha2UKQEAgLTEzLDcgKzEzLDcgQEAKIHNldChDTUFLRV9Gb3J0cmFuX01PRERJUl9GTEFHICItbW9kdWxlOiIpCiAKIHNldChDTUFLRV9Gb3J0cmFuX0NSRUFURV9TSEFSRURfTElCUkFSWQotICJsaW5rICR7Q01BS0VfQ0xfTk9MT0dPfSAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gIC9vdXQ6PFRBUkdFVD4gL2RsbCAgPExJTktfRkxBR1M+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+ICR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQorICJsaW5rICR7Q01BS0VfQ0xfTk9MT0dPfSAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gL291dDo8VEFSR0VUPiAvZGxsIDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKIAogc2V0KENNQUtFX0ZvcnRyYW5fQ1JFQVRFX1NIQVJFRF9NT0RVTEUgJHtDTUFLRV9Gb3J0cmFuX0NSRUFURV9TSEFSRURfTElCUkFSWX0pCiAKQEAgLTIyLDcgKzIyLDcgQEAKIAogIyBjb21waWxlIGEgQysrIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQogc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PQkpFQ1QKLSAgICAiPENNQUtFX0ZvcnRyYW5fQ09NUElMRVI+ICAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9DTF9OT0xPR099IC9vYmplY3Q6PE9CSkVDVD4gPEZMQUdTPiAvY29tcGlsZV9vbmx5IDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCisgICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9DTF9OT0xPR099IC9vYmplY3Q6PE9CSkVDVD4gPEZMQUdTPiAvY29tcGlsZV9vbmx5IDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiAKIHNldChDTUFLRV9Gb3J0cmFuX0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gJHtDTUFLRV9DTF9OT0xPR099ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSA8RkxBR1M+IC9leGU6PFRBUkdFVD4gPE9CSkVDVFM+IC9saW5rIDxDTUFLRV9Gb3J0cmFuX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8TElOS19MSUJSQVJJRVM+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NQYXRocy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1BhdGhzLmNtYWtlCmluZGV4IDcxY2M2MDkuLmI5ZTJmMTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1BhdGhzLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1BhdGhzLmNtYWtlCkBAIC0yNCw2ICsyNCwxMCBAQAogIyAgIEVOVntQcm9ncmFtRmlsZXMoeDg2KX0gPSBbQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KV0KICMgICBFTlZ7UHJvZ3JhbUZpbGVzfSA9IFtDOlxQcm9ncmFtIEZpbGVzICh4ODYpXQogIyAgIEVOVntQcm9ncmFtVzY0MzJ9ID0gW0M6XFByb2dyYW0gRmlsZXNdCisjCisjIFJlbWluZGVyIHdoZW4gYWRkaW5nIG5ldyBsb2NhdGlvbnMgY29tcHV0ZWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyMgcGxlYXNlIG1ha2Ugc3VyZSB0byBrZWVwIEhlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRILnJzdAorIyBzeW5jaHJvbml6ZWQKIHNldChfcHJvZ3JhbWZpbGVzICIiKQogZm9yZWFjaCh2ICJQcm9ncmFtVzY0MzIiICJQcm9ncmFtRmlsZXMiICJQcm9ncmFtRmlsZXMoeDg2KSIpCiAgIGlmKERFRklORUQgIkVOVnske3Z9fSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL2VDb3MuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL2VDb3MuY21ha2UKaW5kZXggZTEyNzllZi4uMjVkYjAyOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9lQ29zLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vZUNvcy5jbWFrZQpAQCAtNTIsOCArNTIsOCBAQAogYWRkX2RlZmluaXRpb25zKC1EX19FQ09TX189MSAtRF9fRUNPUz0xKQogCiAjIHNwZWNpYWwgbGluayBjb21tYW5kcyBmb3IgZUNvcyBleGVjdXRhYmxlcwotc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtTCR7RUNPU19MSUJUQVJHRVRfRElSRUNUT1JZfSAtVHRhcmdldC5sZCAgPExJTktfTElCUkFSSUVTPiIpCi1zZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAgIDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gICA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1MJHtFQ09TX0xJQlRBUkdFVF9ESVJFQ1RPUll9IC1UdGFyZ2V0LmxkICA8TElOS19MSUJSQVJJRVM+IikKK3NldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLUwke0VDT1NfTElCVEFSR0VUX0RJUkVDVE9SWX0gLVR0YXJnZXQubGQgPExJTktfTElCUkFSSUVTPiIpCitzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLUwke0VDT1NfTElCVEFSR0VUX0RJUkVDVE9SWX0gLVR0YXJnZXQubGQgPExJTktfTElCUkFSSUVTPiIpCiAKICMgZUNvcyBkb2Vzbid0IHN1cHBvcnQgc2hhcmVkIGxpYnMKIHNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTIEZBTFNFKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9nYXMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL2dhcy5jbWFrZQppbmRleCA3YzY1OWYyLi44NDg0MDc2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL2dhcy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL2dhcy5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogICAgICAgIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+ICIpCiAKIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX0xJTktFUj4gPEZMQUdTPiA8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxDTUFLRV9MSU5LRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAKICMgdG8gYmUgZG9uZQogc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NSRUFURV9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvU3F1aXNoNFJ1blRlc3RDYXNlLmJhdCBiL01vZHVsZXMvU3F1aXNoNFJ1blRlc3RDYXNlLmJhdAppbmRleCBhZDFjYzhjLi5mZTMwM2I4IDEwMDc1NQotLS0gYS9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5iYXQKKysrIGIvTW9kdWxlcy9TcXVpc2g0UnVuVGVzdENhc2UuYmF0CkBAIC00LDcgKzQsNiBAQAogc2V0IFRFU1RDQVNFPSU0CiBzZXQgQVVUPSU1CiBzZXQgQVVURElSPSU2Ci1zZXQgU0VUVElOR1NHUk9VUD0lNwogCiAlU1FVSVNIU0VSVkVSJSAtLXN0b3AKIApAQCAtMTIsOSArMTEsOSBAQAogJVNRVUlTSFNFUlZFUiUgLS1jb25maWcgYWRkQVVUICIlQVVUJSIgIiVBVVRESVIlIgogCiBlY2hvICJTdGFydGluZyB0aGUgc3F1aXNoIHNlcnZlci4uLiAlU1FVSVNIU0VSVkVSJSIKLXN0YXJ0IC9CICVTUVVJU0hTRVJWRVIlCitzdGFydCAvQiAiU3F1aXNoIFNlcnZlciIgJVNRVUlTSFNFUlZFUiUKIAotZWNobyAiUnVubmluZyB0aGUgdGVzdCBjYXNlLi4uJVNRVUlTSFJVTk5FUiUgLS10ZXN0c3VpdGUgJVRFU1RTVUlURSUgLS10ZXN0Y2FzZSAlVEVTVENBU0UlIgorZWNobyAiUnVubmluZyB0aGUgdGVzdCBjYXNlLi4uICVTUVVJU0hSVU5ORVIlIC0tdGVzdHN1aXRlICVURVNUU1VJVEUlIC0tdGVzdGNhc2UgJVRFU1RDQVNFJSIKICVTUVVJU0hSVU5ORVIlIC0tdGVzdHN1aXRlICIlVEVTVFNVSVRFJSIgLS10ZXN0Y2FzZSAiJVRFU1RDQVNFJSIKIHNldCByZXR1cm5WYWx1ZT0lRVJST1JMRVZFTCUKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TcXVpc2g0UnVuVGVzdENhc2Uuc2ggYi9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5zaAppbmRleCAzOWEzOTA3Li40ZDFlMzgyIDEwMDc1NQotLS0gYS9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5zaAorKysgYi9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5zaApAQCAtNiwyMCArNiwxOSBAQAogVEVTVENBU0U9JDQKIEFVVD0kNQogQVVURElSPSQ2Ci1TRVRUSU5HU0dST1VQPSQ3CiAKICRTUVVJU0hTRVJWRVIgLS1zdG9wID4gL2Rldi9udWxsIDI+JjEKIAotZWNobyAiQWRkaW5nIEFVVC4uLiAkU1FVSVNIU0VSVkVSIC0tc2V0dGluZ3NHcm91cCAkU0VUVElOR1NHUk9VUCAtLWNvbmZpZyBhZGRBVVQgJEFVVCAkQVVURElSIgotJFNRVUlTSFNFUlZFUiAtLXNldHRpbmdzR3JvdXAgIiRTRVRUSU5HU0dST1VQIiAtLWNvbmZpZyBhZGRBVVQgIiRBVVQiICIkQVVURElSIiB8fCBleGl0IDI1NQorZWNobyAiQWRkaW5nIEFVVC4uLiAkU1FVSVNIU0VSVkVSIC0tY29uZmlnIGFkZEFVVCAkQVVUICRBVVRESVIiCiskU1FVSVNIU0VSVkVSIC0tY29uZmlnIGFkZEFVVCAiJEFVVCIgIiRBVVRESVIiIHx8IGV4aXQgMjU1CiAjIHNsZWVwIDEKIAogZWNobyAiU3RhcnRpbmcgdGhlIHNxdWlzaCBzZXJ2ZXIuLi4gJFNRVUlTSFNFUlZFUiAtLWRhZW1vbiIKICRTUVVJU0hTRVJWRVIgLS1kYWVtb24gfHwgZXhpdCAyNTUKICMgc2xlZXAgMgogCi1lY2hvICJSdW5uaW5nIHRoZSB0ZXN0IGNhc2UuLi4kU1FVSVNIUlVOTkVSIC0tc2V0dGluZ3NHcm91cCAkU0VUVElOR1NHUk9VUCAtLXRlc3RzdWl0ZSAkVEVTVFNVSVRFIC0tdGVzdGNhc2UgJFRFU1RDQVNFIgotJFNRVUlTSFJVTk5FUiAtLXNldHRpbmdzR3JvdXAgIiRTRVRUSU5HU0dST1VQIiAtLXRlc3RzdWl0ZSAiJFRFU1RTVUlURSIgLS10ZXN0Y2FzZSAiJFRFU1RDQVNFIgorZWNobyAiUnVubmluZyB0aGUgdGVzdCBjYXNlLi4uICRTUVVJU0hSVU5ORVIgLS10ZXN0c3VpdGUgJFRFU1RTVUlURSAtLXRlc3RjYXNlICRURVNUQ0FTRSIKKyRTUVVJU0hSVU5ORVIgLS10ZXN0c3VpdGUgIiRURVNUU1VJVEUiIC0tdGVzdGNhc2UgIiRURVNUQ0FTRSIKIHJldHVyblZhbHVlPSQ/CiAKIGVjaG8gIlN0b3BwaW5nIHRoZSBzcXVpc2ggc2VydmVyLi4uICRTUVVJU0hTRVJWRVIgLS1zdG9wIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TcXVpc2hUZXN0U2NyaXB0LmNtYWtlIGIvTW9kdWxlcy9TcXVpc2hUZXN0U2NyaXB0LmNtYWtlCmluZGV4IDJhODBiZTUuLmIwY2I0YWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU3F1aXNoVGVzdFNjcmlwdC5jbWFrZQorKysgYi9Nb2R1bGVzL1NxdWlzaFRlc3RTY3JpcHQuY21ha2UKQEAgLTMxLDcgKzMxLDYgQEAKIG1lc3NhZ2UoU1RBVFVTICJzcXVpc2hfd3JhcHBlcj0nJHtzcXVpc2hfd3JhcHBlcn0nIikKIG1lc3NhZ2UoU1RBVFVTICJzcXVpc2hfZW52X3ZhcnM9JyR7c3F1aXNoX2Vudl92YXJzfSciKQogbWVzc2FnZShTVEFUVVMgInNxdWlzaF9tb2R1bGVfZGlyPScke3NxdWlzaF9tb2R1bGVfZGlyfSciKQotbWVzc2FnZShTVEFUVVMgInNxdWlzaF9zZXR0aW5nc2dyb3VwPScke3NxdWlzaF9zZXR0aW5nc2dyb3VwfSciKQogbWVzc2FnZShTVEFUVVMgInNxdWlzaF9wcmVfY29tbWFuZD0nJHtzcXVpc2hfcHJlX2NvbW1hbmR9JyIpCiBtZXNzYWdlKFNUQVRVUyAic3F1aXNoX3Bvc3RfY29tbWFuZD0nJHtzcXVpc2hfcG9zdF9jb21tYW5kfSciKQogCkBAIC01NywxMCArNTYsMTAgQEAKICMgcnVuIHRoZSB0ZXN0CiBpZigiJHtzcXVpc2hfdmVyc2lvbn0iIFNUUkVRVUFMICI0IikKICAgaWYgKFdJTjMyKQotICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7c3F1aXNoX21vZHVsZV9kaXJ9L1NxdWlzaDRSdW5UZXN0Q2FzZS5iYXQgJHtzcXVpc2hfc2VydmVyX2V4ZWN1dGFibGV9ICR7c3F1aXNoX2NsaWVudF9leGVjdXRhYmxlfSAke3NxdWlzaF90ZXN0X3N1aXRlfSAke3NxdWlzaF90ZXN0X2Nhc2V9ICR7c3F1aXNoX2F1dH0gJHtzcXVpc2hfYXV0X2Rpcn0gJHtzcXVpc2hfc2V0dGluZ3Nncm91cH0KKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke3NxdWlzaF9tb2R1bGVfZGlyfS9TcXVpc2g0UnVuVGVzdENhc2UuYmF0ICR7c3F1aXNoX3NlcnZlcl9leGVjdXRhYmxlfSAke3NxdWlzaF9jbGllbnRfZXhlY3V0YWJsZX0gJHtzcXVpc2hfdGVzdF9zdWl0ZX0gJHtzcXVpc2hfdGVzdF9jYXNlfSAke3NxdWlzaF9hdXR9ICR7c3F1aXNoX2F1dF9kaXJ9CiAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSB0ZXN0X3J2ICkKICAgZWxzZWlmKFVOSVgpCi0gICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtzcXVpc2hfbW9kdWxlX2Rpcn0vU3F1aXNoNFJ1blRlc3RDYXNlLnNoICR7c3F1aXNoX3NlcnZlcl9leGVjdXRhYmxlfSAke3NxdWlzaF9jbGllbnRfZXhlY3V0YWJsZX0gJHtzcXVpc2hfdGVzdF9zdWl0ZX0gJHtzcXVpc2hfdGVzdF9jYXNlfSAke3NxdWlzaF9hdXR9ICR7c3F1aXNoX2F1dF9kaXJ9ICR7c3F1aXNoX3NldHRpbmdzZ3JvdXB9CisgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtzcXVpc2hfbW9kdWxlX2Rpcn0vU3F1aXNoNFJ1blRlc3RDYXNlLnNoICR7c3F1aXNoX3NlcnZlcl9leGVjdXRhYmxlfSAke3NxdWlzaF9jbGllbnRfZXhlY3V0YWJsZX0gJHtzcXVpc2hfdGVzdF9zdWl0ZX0gJHtzcXVpc2hfdGVzdF9jYXNlfSAke3NxdWlzaF9hdXR9ICR7c3F1aXNoX2F1dF9kaXJ9CiAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSB0ZXN0X3J2ICkKICAgZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Vc2VFY29zLmNtYWtlIGIvTW9kdWxlcy9Vc2VFY29zLmNtYWtlCmluZGV4IDYwMzI0YjEuLjgzYzliMjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvVXNlRWNvcy5jbWFrZQorKysgYi9Nb2R1bGVzL1VzZUVjb3MuY21ha2UKQEAgLTE4NSwxMSArMTg1LDExIEBACiAjIHdoZW4gdXNpbmcgbm1ha2UgbWFrZWZpbGVzLCB0aGUgY3VzdG9tIGJ1aWxkdHlwZSBzdXBwcmVzc2VzIHRoZSBkZWZhdWx0IGNsLmV4ZSBmbGFncwogIyBhbmQgdGhlIHJ1bGVzIGZvciBjcmVhdGluZyBvYmplY3RzIGFyZSBhZGp1c3RlZCBmb3IgZ2NjCiAgIHNldChDTUFLRV9CVUlMRF9UWVBFIENVU1RPTV9FQ09TX0JVSUxEKQotICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAgIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQorICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKICAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVCAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKICMgc3BlY2lhbCBsaW5rIGNvbW1hbmRzIGZvciBlY29zLWV4ZWN1dGFibGVzCi0gIHNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+ICR7X2Vjb3NfRVhUUkFfTElCU30gLW5vc3RkbGliICAtbm9zdGFydGZpbGVzIC1MJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2Vjb3MvaW5zdGFsbC9saWIgLVR0YXJnZXQubGQgJHtFQ09TX0xEX01DUFV9IikKLSAgc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFICAgICI8Q01BS0VfQ19DT01QSUxFUj4gICA8Q01BS0VfQ19MSU5LX0ZMQUdTPiAgIDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gJHtfZWNvc19FWFRSQV9MSUJTfSAtbm9zdGRsaWIgIC1ub3N0YXJ0ZmlsZXMgLUwke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZWNvcy9pbnN0YWxsL2xpYiAtVHRhcmdldC5sZCAke0VDT1NfTERfTUNQVX0iKQorICBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+ICR7X2Vjb3NfRVhUUkFfTElCU30gLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLUwke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZWNvcy9pbnN0YWxsL2xpYiAtVHRhcmdldC5sZCAke0VDT1NfTERfTUNQVX0iKQorICBzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gJHtfZWNvc19FWFRSQV9MSUJTfSAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtTCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9lY29zL2luc3RhbGwvbGliIC1UdGFyZ2V0LmxkICR7RUNPU19MRF9NQ1BVfSIpCiAjIHNvbWUgc3RyaWN0IGNvbXBpbGVyIGZsYWdzCiAgIHNldCAoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV3N0cmljdC1wcm90b3R5cGVzIikKICAgc2V0IChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV292ZXJsb2FkZWQtdmlydHVhbCAtZm5vLXJ0dGkgLVdjdG9yLWR0b3ItcHJpdmFjeSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWV4Y2VwdGlvbnMiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Vc2VKYXZhLmNtYWtlIGIvTW9kdWxlcy9Vc2VKYXZhLmNtYWtlCmluZGV4IGI2NjhiOWUuLmRiM2ZiOTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvVXNlSmF2YS5jbWFrZQorKysgYi9Nb2R1bGVzL1VzZUphdmEuY21ha2UKQEAgLTM3Nyw3ICszNzcsOSBAQAogICAgICAgICBBUkdTICAgICR7c3JjfQogICAgICAgICAgICAgICAgICR7ZGVzdH0KICAgICAgICAgREVQRU5EUyAke3NyY30KLSAgICAgICAgQ09NTUVOVCAke2NvbW1lbnR9KQorICAgICAgICBDT01NRU5UICR7Y29tbWVudH0KKyAgICAgICAgVkVSQkFUSU0KKyAgICAgICAgKQogZW5kZnVuY3Rpb24gKCkKIAogZnVuY3Rpb24oX19qYXZhX2xjYXQgVkFSKQpAQCAtNTk3LDcgKzU5OSwxMCBAQAogICAgICAgICAgICAgIyBDcmVhdGUgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gY29tcGlsZS4KICAgICAgICAgICAgIHNldChfSkFWQV9TT1VSQ0VTX0ZJTEUgJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX3NvdXJjZXMpCiAgICAgICAgICAgICBzdHJpbmcoUkVQTEFDRSAiOyIgIlwiXG5cIiIgX0pBVkFfQ09NUElMRV9TVFJJTkcgIlwiJHtfSkFWQV9DT01QSUxFX0ZJTEVTfVwiIikKLSAgICAgICAgICAgIGZpbGUoV1JJVEUgJHtfSkFWQV9TT1VSQ0VTX0ZJTEV9ICR7X0pBVkFfQ09NUElMRV9TVFJJTkd9KQorICAgICAgICAgICAgc2V0KENNQUtFX0NPTkZJR1VSQUJMRV9GSUxFX0NPTlRFTlQgIiR7X0pBVkFfQ09NUElMRV9TVFJJTkd9IikKKyAgICAgICAgICAgIGNvbmZpZ3VyZV9maWxlKCIke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDb25maWd1cmFibGVGaWxlLmluIgorICAgICAgICAgICAgICAiJHtfSkFWQV9TT1VSQ0VTX0ZJTEV9IiBAT05MWSkKKyAgICAgICAgICAgIHVuc2V0KENNQUtFX0NPTkZJR1VSQUJMRV9GSUxFX0NPTlRFTlQpCiAgICAgICAgICAgICBsaXN0IChBUFBFTkQgX0pBVkFfU09VUkNFU19GSUxFTElTVFMgIkAke19KQVZBX1NPVVJDRVNfRklMRX0iKQogICAgICAgICBlbmRpZigpCiAgICAgICAgIGlmIChfSkFWQV9DT01QSUxFX0ZJTEVMSVNUUykKQEAgLTYxMCw2ICs2MTUsMTAgQEAKICAgICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAgIyBOT1RFOiB0aGlzIGNvbW1hbmQgZ2VuZXJhdGVzIGFuIGFydGlmaWNpYWwgZGVwZW5kZW5jeSBmaWxlCiAgICAgICAgICAgICBPVVRQVVQgJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX2NvbXBpbGVkXyR7X1RBUkdFVF9OQU1FfQorICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CisgICAgICAgICAgICAgICAgLURDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIPSR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KKyAgICAgICAgICAgICAgICAtRENNQUtFX0pBUl9DTEFTU0VTX1BSRUZJWD0ke0NNQUtFX0pBUl9DTEFTU0VTX1BSRUZJWH0KKyAgICAgICAgICAgICAgICAtUCAke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJ9L1VzZUphdmEvQ2xlYXJDbGFzc0ZpbGVzLmNtYWtlCiAgICAgICAgICAgICBDT01NQU5EICR7SmF2YV9KQVZBQ19FWEVDVVRBQkxFfQogICAgICAgICAgICAgICAgICR7Q01BS0VfSkFWQV9DT01QSUxFX0ZMQUdTfQogICAgICAgICAgICAgICAgIC1jbGFzc3BhdGggIiR7Q01BS0VfSkFWQV9JTkNMVURFX1BBVEhfRklOQUx9IgpAQCAtNjE3LDE4ICs2MjYsMjAgQEAKICAgICAgICAgICAgICAgICAke19HRU5FUkFURV9OQVRJVkVfSEVBREVSU30KICAgICAgICAgICAgICAgICAke19KQVZBX1NPVVJDRVNfRklMRUxJU1RTfQogICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHRvdWNoICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0vamF2YV9jb21waWxlZF8ke19UQVJHRVRfTkFNRX0KLSAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9DT01QSUxFX0ZJTEVTfSAke19KQVZBX0NPTVBJTEVfRklMRUxJU1RTfSAke19KQVZBX0NPTVBJTEVfREVQRU5EU30KKyAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9DT01QSUxFX0ZJTEVTfSAke19KQVZBX0NPTVBJTEVfRklMRUxJU1RTfSAke19KQVZBX0NPTVBJTEVfREVQRU5EU30gJHtfSkFWQV9TT1VSQ0VTX0ZJTEV9CiAgICAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0KICAgICAgICAgICAgIENPTU1FTlQgIkJ1aWxkaW5nIEphdmEgb2JqZWN0cyBmb3IgJHtfVEFSR0VUX05BTUV9LmphciIKKyAgICAgICAgICAgIFZFUkJBVElNCiAgICAgICAgICkKICAgICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAgT1VUUFVUICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0vamF2YV9jbGFzc19maWxlbGlzdAogICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CiAgICAgICAgICAgICAgICAgLURDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIPSR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KLSAgICAgICAgICAgICAgICAtRENNQUtFX0pBUl9DTEFTU0VTX1BSRUZJWD0iJHtDTUFLRV9KQVJfQ0xBU1NFU19QUkVGSVh9IgorICAgICAgICAgICAgICAgIC1EQ01BS0VfSkFSX0NMQVNTRVNfUFJFRklYPSR7Q01BS0VfSkFSX0NMQVNTRVNfUFJFRklYfQogICAgICAgICAgICAgICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUn0vVXNlSmF2YUNsYXNzRmlsZWxpc3QuY21ha2UKICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX2NvbXBpbGVkXyR7X1RBUkdFVF9OQU1FfQogICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9CisgICAgICAgICAgICBWRVJCQVRJTQogICAgICAgICApCiAgICAgZWxzZSAoKQogICAgICAgICAjIGNyZWF0ZSBhbiBlbXB0eSBqYXZhX2NsYXNzX2ZpbGVsaXN0CkBAIC02NTksNiArNjcwLDcgQEAKICAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9SRVNPVVJDRV9GSUxFU30gJHtfSkFWQV9ERVBFTkRTfSAke0NNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEh9L2phdmFfY2xhc3NfZmlsZWxpc3QKICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KICAgICAgICAgICAgIENPTU1FTlQgIkNyZWF0aW5nIEphdmEgYXJjaGl2ZSAke19KQVZBX1RBUkdFVF9PVVRQVVRfTkFNRX0iCisgICAgICAgICAgICBWRVJCQVRJTQogICAgICAgICApCiAgICAgZWxzZSAoKQogICAgICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCkBAIC02NzQsNiArNjg2LDcgQEAKICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KICAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9SRVNPVVJDRV9GSUxFU30gJHtfSkFWQV9ERVBFTkRTfSAke0NNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEh9L2phdmFfY2xhc3NfZmlsZWxpc3QKICAgICAgICAgICAgIENPTU1FTlQgIkNyZWF0aW5nIEphdmEgYXJjaGl2ZSAke19KQVZBX1RBUkdFVF9PVVRQVVRfTkFNRX0iCisgICAgICAgICAgICBWRVJCQVRJTQogICAgICAgICApCiAgICAgZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Vc2VKYXZhL0NsZWFyQ2xhc3NGaWxlcy5jbWFrZSBiL01vZHVsZXMvVXNlSmF2YS9DbGVhckNsYXNzRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxMTVjNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvVXNlSmF2YS9DbGVhckNsYXNzRmlsZXMuY21ha2UKQEAgLTAsMCArMSwxNyBAQAorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCisjIFRoaXMgc2NyaXB0IGRlbGV0ZXMgY29tcGlsZWQgSmF2YSBjbGFzcyBmaWxlcy4KKworaWYoQ01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSCkKKyAgaWYoRVhJU1RTICIke0NNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEh9L2phdmFfY2xhc3NfZmlsZWxpc3QiKQorICAgIGZpbGUoU1RSSU5HUyAiJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX2NsYXNzX2ZpbGVsaXN0IiBjbGFzc2VzKQorICAgIGxpc3QoVFJBTlNGT1JNIGNsYXNzZXMgUFJFUEVORCAiJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS8iKQorICAgIGlmKGNsYXNzZXMpCisgICAgICBmaWxlKFJFTU9WRSAke2NsYXNzZXN9KQorICAgICAgbWVzc2FnZShTVEFUVVMgIkNsZWFuIGNsYXNzIGZpbGVzIGZyb20gcHJldmlvdXMgYnVpbGQiKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZWxzZSgpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNhbid0IGZpbmQgQ01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1VzZVNXSUcuY21ha2UgYi9Nb2R1bGVzL1VzZVNXSUcuY21ha2UKaW5kZXggNzg1MjJkYS4uYTYwZTA1ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Vc2VTV0lHLmNtYWtlCisrKyBiL01vZHVsZXMvVXNlU1dJRy5jbWFrZQpAQCAtNDEsNiArNDEsMTQgQEAKICAgICBjb25maWd1cmF0aW9uLXNwZWNpZmljIGZpbGVzIGdlbmVyYXRlZCBieSBgYFNXSUdgYC4gQWxsIGJ1aWxkCiAgICAgY29uZmlndXJhdGlvbnMgbXVzdCByZXN1bHQgaW4gdGhlIHNhbWUgZ2VuZXJhdGVkIHNvdXJjZSBmaWxlLgogCisgIC4uIG5vdGU6OgorCisgICAgRm9yIE1ha2UtYmFzZWQgZ2VuZXJhdG9ycywgYGBzd2lnX2FkZF9saWJyYXJ5YGAgZG9lcyBub3QgdHJhY2sgZmlsZQorICAgIGRlcGVuZGVuY2llcywgc28gZGVwZW5kaW5nIG9uIHRoZSBgYDxuYW1lPl9zd2lnX2NvbXBpbGF0aW9uYGAgY3VzdG9tIHRhcmdldAorICAgIGlzIHJlcXVpcmVkIGZvciB0YXJnZXRzIHdoaWNoIHJlcXVpcmUgdGhlIGBgc3dpZ2BgLWdlbmVyYXRlZCBmaWxlcyB0bworICAgIGV4aXN0LiBPdGhlciBnZW5lcmF0b3JzIG1heSBkZXBlbmQgb24gdGhlIHNvdXJjZSBmaWxlcyB0aGF0IHdvdWxkIGJlCisgICAgZ2VuZXJhdGVkIGJ5IFNXSUcuCisKICAgYGBUWVBFYGAKICAgICBgYFNIQVJFRGBgLCBgYE1PRFVMRWBgIGFuZCBgYFNUQVRJQ2BgIGhhdmUgdGhlIHNhbWUgc2VtYW50aWMgYXMgZm9yIHRoZQogICAgIDpjb21tYW5kOmBhZGRfbGlicmFyeWAgY29tbWFuZC4gSWYgYGBVU0VfQlVJTERfU0hBUkVEX0xJQlNgYCBpcyBzcGVjaWZpZWQsCkBAIC0zNDEsNiArMzQ5LDIzIEBACiAgICAgbGlzdChBUFBFTkQgZmlsZXMgIiR7ZXh0cmFfZmlsZX0iKQogICBlbmRmb3JlYWNoKCkKIAorICBpZiAobGFuZ3VhZ2UgU1RSRVFVQUwgIkZPUlRSQU4iIEFORCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKKyAgICAjIFByb2Nlc3MgcG9zc2libGUgdXNlci1zdXBwbGllZCBleHRlbnNpb24gaW4gZmxhZ3MgKG9idGFpbmVkIHZpYSBwYXJlbnQKKyAgICAjIHNjb3BlIHZhcmlhYmxlKSB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisgICAgbGlzdChGSU5EIFNXSUdfQ09NUElMQVRJT05fRkxBR1MgIi1mZXh0IiBmZXh0X2lkeCkKKyAgICBpZiAoZmV4dF9pZHggRVFVQUwgLTEpCisgICAgICAjIERlZmF1bHQgRm9ydHJhbiBnZW5lcmF0ZWQgZXh0ZW5zaW9uCisgICAgICBzZXQoZmV4dCAiZjkwIikKKyAgICBlbHNlKCkKKyAgICAgICMgR2V0IGV4dGVuc2lvbiBmcm9tIHVzZXItcHJvdmlkZWQgZmxhZworICAgICAgbWF0aChFWFBSIGZleHRfaWR4ICIke2ZleHRfaWR4fSArIDEiKQorICAgICAgbGlzdChHRVQgU1dJR19DT01QSUxBVElPTl9GTEFHUyAiJHtmZXh0X2lkeH0iIGZleHQpCisgICAgZW5kaWYoKQorICAgIHNldChleHRyYV9maWxlICIke2dlbmVyYXRlZHBhdGh9LyR7bW9kdWxlX2Jhc2VuYW1lfS4ke2ZleHR9IikKKyAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7ZXh0cmFfZmlsZX0iIFBST1BFUlRJRVMgTEFOR1VBR0UgIkZvcnRyYW4iKQorICAgIGxpc3QoQVBQRU5EIGZpbGVzICIke2V4dHJhX2ZpbGV9IikKKyAgZW5kaWYoKQorCiAgIHNldCAoJHtvdXRmaWxlc30gJHtmaWxlc30gUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCkBAIC00MTUsNiArNDQwLDcgQEAKICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChzd2lnX3NvdXJjZV9maWxlX2Z1bGxuYW1lICIke2luZmlsZX0iIEFCU09MVVRFKQogCiAgIGlmIChOT1QgU1dJR19NT0RVTEVfJHtuYW1lfV9OT1BST1hZKQorICAgIHNldChTV0lHX0NPTVBJTEFUSU9OX0ZMQUdTICR7c3dpZ19zb3VyY2VfZmlsZV9mbGFnc30pCiAgICAgU1dJR19HRVRfRVhUUkFfT1VUUFVUX0ZJTEVTKCR7U1dJR19NT0RVTEVfJHtuYW1lfV9MQU5HVUFHRX0KICAgICAgIHN3aWdfZXh0cmFfZ2VuZXJhdGVkX2ZpbGVzCiAgICAgICAiJHtvdXRkaXJ9IgpAQCAtNzg3LDYgKzgxMyw4IEBACiAgICAgaWYgKEFQUExFKQogICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzICgke3RhcmdldF9uYW1lfSBQUk9QRVJUSUVTIFNVRkZJWCAiLmR5bGliIikKICAgICBlbmRpZiAoKQorICBlbHNlaWYgKHN3aWdfbG93ZXJjYXNlX2xhbmd1YWdlIFNUUkVRVUFMICJmb3J0cmFuIikKKyAgICAjIERvICpub3QqIG92ZXJyaWRlIHRoZSB0YXJnZXQncyBsaWJyYXJ5IHByZWZpeAogICBlbHNlKCkKICAgICAjIGFzc3VtZSBlbXB0eSBwcmVmaXggYmVjYXVzZSB3ZSBleHBlY3QgdGhlIG1vZHVsZSB0byBiZSBkeW5hbWljYWxseSBsb2FkZWQKICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMgKCR7dGFyZ2V0X25hbWV9IFBST1BFUlRJRVMgUFJFRklYICIiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Xcml0ZUNvbXBpbGVyRGV0ZWN0aW9uSGVhZGVyLmNtYWtlIGIvTW9kdWxlcy9Xcml0ZUNvbXBpbGVyRGV0ZWN0aW9uSGVhZGVyLmNtYWtlCmluZGV4IDIzZDgxYjUuLjUxMDAwMzUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvV3JpdGVDb21waWxlckRldGVjdGlvbkhlYWRlci5jbWFrZQorKysgYi9Nb2R1bGVzL1dyaXRlQ29tcGlsZXJEZXRlY3Rpb25IZWFkZXIuY21ha2UKQEAgLTUsNiArNSw4IEBACiBXcml0ZUNvbXBpbGVyRGV0ZWN0aW9uSGVhZGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZnVuY3Rpb24gYGB3cml0ZV9jb21waWxlcl9kZXRlY3Rpb25faGVhZGVyKClgYC4KIAogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGZpbGUgc3VpdGFibGUgZm9yIHByZXByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbWUudHh0IGIvTW9kdWxlcy9yZWFkbWUudHh0CmluZGV4IGE2Mjk0NzguLmRhNzg3MzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZG1lLnR4dAorKysgYi9Nb2R1bGVzL3JlYWRtZS50eHQKQEAgLTEsNCArMSw0IEBACiBTZWUgdGhlICJGaW5kIE1vZHVsZXMiIHNlY3Rpb24gb2YgdGhlIGNtYWtlLWRldmVsb3Blcig3KSBtYW51YWwgcGFnZS4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGNvbnRyaWJ1dGUgbW9kdWxlcyB0byBDTWFrZSwgc2VlIHRoaXMgcGFnZToKLWh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS93aWtpcy9kb2MvY21ha2UvZGV2L01vZHVsZS1NYWludGFpbmVycworaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5Ly0vd2lraXMvZG9jL2NtYWtlL2Rldi9Nb2R1bGUtTWFpbnRhaW5lcnMKZGlmZiAtLWdpdCBhL1JFQURNRS5yc3QgYi9SRUFETUUucnN0CmluZGV4IDUwMjBkMzkuLjY0ZTIzNTMgMTAwNjQ0Ci0tLSBhL1JFQURNRS5yc3QKKysrIGIvUkVBRE1FLnJzdApAQCAtMTEsNyArMTEsNyBAQAogCiAuLiBfYENNYWtlIEhvbWUgUGFnZWA6IGh0dHBzOi8vY21ha2Uub3JnCiAuLiBfYENNYWtlIERvY3VtZW50YXRpb24gUGFnZWA6IGh0dHBzOi8vY21ha2Uub3JnL2RvY3VtZW50YXRpb24KLS4uIF9gQ01ha2UgQ29tbXVuaXR5IFdpa2lgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvd2lraXMvaG9tZQorLi4gX2BDTWFrZSBDb21tdW5pdHkgV2lraWA6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS8tL3dpa2lzL2hvbWUKIAogQ01ha2UgaXMgbWFpbnRhaW5lZCBhbmQgc3VwcG9ydGVkIGJ5IGBLaXR3YXJlYF8gYW5kIGRldmVsb3BlZCBpbgogY29sbGFib3JhdGlvbiB3aXRoIGEgcHJvZHVjdGl2ZSBjb21tdW5pdHkgb2YgY29udHJpYnV0b3JzLgpAQCAtMTIyLDcgKzEyMiw3IEBACiAzLiBGaW5hbGx5LCBpZiB0aGUgaXNzdWUgaXMgbm90IHJlc29sdmVkIGJ5IHRoZSBhYm92ZSBzdGVwcywgb3BlbgogICAgYW4gZW50cnkgaW4gdGhlIGBDTWFrZSBJc3N1ZSBUcmFja2VyYF8uCiAKLS4uIF9gQ01ha2UgSXNzdWUgVHJhY2tlcmA6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3VlcworLi4gX2BDTWFrZSBJc3N1ZSBUcmFja2VyYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMKIAogQ29udHJpYnV0aW5nCiA9PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjNTdmNzEzLi5lZTg3NjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDkgKzEsMTYgQEAKICMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KIAorIyBUbyBlbnN1cmUgbWF4aW11bSBwb3J0YWJpbGl0eSBhY3Jvc3MgdmFyaW91cyBjb21waWxlcnMgYW5kIHBsYXRmb3JtcworIyBkZWFjdGl2YXRlIGFueSBjb21waWxlciBleHRlbnNpb25zCitzZXQoQ01BS0VfQ19FWFRFTlNJT05TIEZBTFNFKQorc2V0KENNQUtFX0NYWF9FWFRFTlNJT05TIEZBTFNFKQorCiBpbmNsdWRlKENoZWNrSW5jbHVkZUZpbGUpCiAjIENoZWNrIGlmIHdlIGNhbiBidWlsZCBzdXBwb3J0IGZvciBFTEYgcGFyc2luZy4KLWlmKENNQUtFX0NYWF9QTEFURk9STV9JRCBNQVRDSEVTICJPcGVuQlNEIikKK2lmKFdJTjMyKQorICBzZXQoSEFWRV9FTEZfSCAwKQorZWxzZWlmKENNQUtFX0NYWF9QTEFURk9STV9JRCBNQVRDSEVTICJPcGVuQlNEIikKICAgQ0hFQ0tfSU5DTFVERV9GSUxFUygic3RkaW50Lmg7ZWxmX2FiaS5oIiBIQVZFX0VMRl9IKQogZWxzZSgpCiAgIENIRUNLX0lOQ0xVREVfRklMRSgiZWxmLmgiIEhBVkVfRUxGX0gpCkBAIC0zNTQsNiArMzYxLDcgQEAKICAgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5jeHgKICAgY21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3IuY3h4CiAgIGNtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yLmN4eAorICBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5jeHgKICAgY21NYWtlZmlsZVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CiAgIGNtTWVzc2FnZVR5cGUuaAogICBjbU1lc3Nlbmdlci5jeHgKQEAgLTM3Nyw4ICszODUsNiBAQAogICBjbVByb3BlcnR5LmgKICAgY21Qcm9wZXJ0eURlZmluaXRpb24uY3h4CiAgIGNtUHJvcGVydHlEZWZpbml0aW9uLmgKLSAgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuY3h4Ci0gIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwLmgKICAgY21Qcm9wZXJ0eU1hcC5jeHgKICAgY21Qcm9wZXJ0eU1hcC5oCiAgIGNtUXRBdXRvR2VuLmN4eApAQCAtNDA2LDYgKzQxMiw4IEBACiAgIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZC5oCiAgIGNtU291cmNlR3JvdXAuY3h4CiAgIGNtU291cmNlR3JvdXAuaAorICBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5jeHgKKyAgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuaAogICBjbVN0YXRlLmN4eAogICBjbVN0YXRlLmgKICAgY21TdGF0ZURpcmVjdG9yeS5jeHgKQEAgLTQ4Niw2ICs0OTQsOCBAQAogICBjbUJ1aWxkTmFtZUNvbW1hbmQuaAogICBjbUNNYWtlSG9zdFN5c3RlbUluZm9ybWF0aW9uQ29tbWFuZC5jeHgKICAgY21DTWFrZUhvc3RTeXN0ZW1JbmZvcm1hdGlvbkNvbW1hbmQuaAorICBjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmN4eAorICBjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmgKICAgY21DTWFrZU1pbmltdW1SZXF1aXJlZC5jeHgKICAgY21DTWFrZU1pbmltdW1SZXF1aXJlZC5oCiAgIGNtQ01ha2VQb2xpY3lDb21tYW5kLmN4eApAQCAtNjkwLDcgKzcwMCw2IEBACiAgIGNtV3JpdGVGaWxlQ29tbWFuZC5jeHgKICAgY21Xcml0ZUZpbGVDb21tYW5kLmgKIAotICBjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4CiAgIGNtX2dldF9kYXRlLmgKICAgY21fZ2V0X2RhdGUuYwogICBjbV91dGY4LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UgYi9Tb3VyY2UvQ01ha2VWZXJzaW9uLmNtYWtlCmluZGV4IGRhZTNlNmMuLjZlNzE5MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UKKysrIGIvU291cmNlL0NNYWtlVmVyc2lvbi5jbWFrZQpAQCAtMSw3ICsxLDcgQEAKICMgQ01ha2UgdmVyc2lvbiBudW1iZXIgY29tcG9uZW50cy4KIHNldChDTWFrZV9WRVJTSU9OX01BSk9SIDMpCi1zZXQoQ01ha2VfVkVSU0lPTl9NSU5PUiAxNykKLXNldChDTWFrZV9WRVJTSU9OX1BBVENIIDMpCitzZXQoQ01ha2VfVkVSU0lPTl9NSU5PUiAxOCkKK3NldChDTWFrZV9WRVJTSU9OX1BBVENIIDIwMjAwNzIyKQogI3NldChDTWFrZV9WRVJTSU9OX1JDIDApCiBzZXQoQ01ha2VfVkVSU0lPTl9JU19ESVJUWSAwKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldDb21tb24uY3h4IGIvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXQ29tbW9uLmN4eAppbmRleCA5ZmE3NGJlLi4yMGQzOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldDb21tb24uY3h4CisrKyBiL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV0NvbW1vbi5jeHgKQEAgLTIsNyArMiw3IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUNQYWNrSUZXQ29tbW9uLmgiCiAKLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldHZW5lcmF0b3IuY3h4CmluZGV4IDUwOWFjNjUuLjI4MDZjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXR2VuZXJhdG9yLmN4eApAQCAtNTQ0LDEwICs1NDQsNyBAQAogICBpZiAoZ3JvdXAtPlBhcmVudEdyb3VwKSB7CiAgICAgY21DUGFja0lGV1BhY2thZ2UqIHBhY2thZ2UgPSB0aGlzLT5HZXRHcm91cFBhY2thZ2UoZ3JvdXAtPlBhcmVudEdyb3VwKTsKICAgICBib29sIGRvdCA9ICF0aGlzLT5SZXNvbHZlRHVwbGljYXRlTmFtZXM7Ci0gICAgaWYgKGRvdCAmJiBuYW1lLnN1YnN0cigwLCBwYWNrYWdlLT5OYW1lLnNpemUoKSkgPT0gcGFja2FnZS0+TmFtZSkgewotICAgICAgZG90ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb3QpIHsKKyAgICBpZiAoZG90ICYmICFjbUhhc1ByZWZpeChuYW1lLCBwYWNrYWdlLT5OYW1lKSkgewogICAgICAgbmFtZSA9IHBhY2thZ2UtPk5hbWUgKyAiLiIgKyBuYW1lOwogICAgIH0KICAgfQpAQCAtNTc2LDEwICs1NzMsNyBAQAogICAgICAgcmV0dXJuIHBhY2thZ2UtPk5hbWU7CiAgICAgfQogICAgIGJvb2wgZG90ID0gIXRoaXMtPlJlc29sdmVEdXBsaWNhdGVOYW1lczsKLSAgICBpZiAoZG90ICYmIG5hbWUuc3Vic3RyKDAsIHBhY2thZ2UtPk5hbWUuc2l6ZSgpKSA9PSBwYWNrYWdlLT5OYW1lKSB7Ci0gICAgICBkb3QgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRvdCkgeworICAgIGlmIChkb3QgJiYgIWNtSGFzUHJlZml4KG5hbWUsIHBhY2thZ2UtPk5hbWUpKSB7CiAgICAgICBuYW1lID0gcGFja2FnZS0+TmFtZSArICIuIiArIG5hbWU7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldQYWNrYWdlLmN4eCBiL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV1BhY2thZ2UuY3h4CmluZGV4IDlhOWNkNTYuLjU2YTc0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV1BhY2thZ2UuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV1BhY2thZ2UuY3h4CkBAIC01NSw4ICs1NSw3IEBACiAgIGlmIChkYXNoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgcG9zID0gZGFzaFBvczsKICAgfQotICB0aGlzLT5OYW1lID0KLSAgICBwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBkZXBlbmRlbmNlIDogZGVwZW5kZW5jZS5zdWJzdHIoMCwgcG9zKTsKKyAgdGhpcy0+TmFtZSA9IGRlcGVuZGVuY2Uuc3Vic3RyKDAsIHBvcyk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtQ1BhY2tJRldQYWNrYWdlOjpEZXBlbmRlbmNlU3RydWN0OjpOYW1lV2l0aENvbXBhcmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXUmVwb3NpdG9yeS5jeHggYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldSZXBvc2l0b3J5LmN4eAppbmRleCBhNjk2NTQ5Li5mNWU4NzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldSZXBvc2l0b3J5LmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldSZXBvc2l0b3J5LmN4eApAQCAtMjEsMTEgKzIxLDcgQEAKIAogICBzd2l0Y2ggKHRoaXMtPlVwZGF0ZSkgewogICAgIGNhc2UgY21DUGFja0lGV1JlcG9zaXRvcnk6Ok5vbmU6Ci0gICAgICB2YWxpZCA9ICF0aGlzLT5VcmwuZW1wdHkoKTsKLSAgICAgIGJyZWFrOwogICAgIGNhc2UgY21DUGFja0lGV1JlcG9zaXRvcnk6OkFkZDoKLSAgICAgIHZhbGlkID0gIXRoaXMtPlVybC5lbXB0eSgpOwotICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbUNQYWNrSUZXUmVwb3NpdG9yeTo6UmVtb3ZlOgogICAgICAgdmFsaWQgPSAhdGhpcy0+VXJsLmVtcHR5KCk7CiAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9PU1hTY3JpcHRMYXVuY2hlci5jeHggYi9Tb3VyY2UvQ1BhY2svT1NYU2NyaXB0TGF1bmNoZXIuY3h4CmluZGV4IDIxZDI3YTAuLmJkYWY3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9PU1hTY3JpcHRMYXVuY2hlci5jeHgKKysrIGIvU291cmNlL0NQYWNrL09TWFNjcmlwdExhdW5jaGVyLmN4eApAQCAtNSw2ICs1LDggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgpAQCAtMjYsNyArMjgsNiBAQAogICBDRlN0cmluZ1JlZiBmaWxlTmFtZTsKICAgQ0ZCdW5kbGVSZWYgYXBwQnVuZGxlOwogICBDRlVSTFJlZiBzY3JpcHRGaWxlVVJMOwotICBVSW50OCogcGF0aDsKIAogICAvLyBnZXQgQ0YgVVJMIGZvciBzY3JpcHQKICAgaWYgKCEoYXBwQnVuZGxlID0gQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCkpKSB7CkBAIC00MSwxMyArNDIsMTUgQEAKICAgfQogCiAgIC8vIGNyZWF0ZSBwYXRoIHN0cmluZwotICBpZiAoIShwYXRoID0gbmV3IFVJbnQ4W1BBVEhfTUFYXSkpIHsKKyAgYXV0byBwYXRoID0gY206Om1ha2VfdW5pcXVlPFVJbnQ4W10+KFBBVEhfTUFYKTsKKyAgaWYgKCFwYXRoKSB7CiAgICAgcmV0dXJuIDE7CiAgIH0KIAogICAvLyBnZXQgdGhlIGZpbGUgc3lzdGVtIHBhdGggb2YgdGhlIHVybCBhcyBhIGNzdHJpbmcKICAgLy8gaW4gYW4gZW5jb2Rpbmcgc3VpdGFibGUgZm9yIHBvc2l4IGFwaXMKLSAgaWYgKCFDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzY3JpcHRGaWxlVVJMLCB0cnVlLCBwYXRoLCBQQVRIX01BWCkpIHsKKyAgaWYgKCFDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzY3JpcHRGaWxlVVJMLCB0cnVlLCBwYXRoLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYKSkgewogICAgIERlYnVnRXJyb3IoIkNGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uIGZhaWxlZCIpOwogICAgIHJldHVybiAxOwogICB9CkBAIC01NSwxMCArNTgsMTAgQEAKICAgLy8gZGlzcG9zZSBvZiB0aGUgQ0YgdmFyaWFibGUKICAgQ0ZSZWxlYXNlKHNjcmlwdEZpbGVVUkwpOwogCi0gIHN0ZDo6c3RyaW5nIGZ1bGxTY3JpcHRQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGF0aCk7Ci0gIGRlbGV0ZVtdIHBhdGg7CisgIHN0ZDo6c3RyaW5nIGZ1bGxTY3JpcHRQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGF0aC5nZXQoKSk7CisgIHBhdGgucmVzZXQoKTsKIAotICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsU2NyaXB0UGF0aC5jX3N0cigpKSkgeworICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsU2NyaXB0UGF0aCkpIHsKICAgICByZXR1cm4gMTsKICAgfQogCkBAIC04MCw3ICs4Myw2IEBACiAgIGNtc3lzUHJvY2Vzc19TZXRUaW1lb3V0KGNwLCAwKTsKICAgY21zeXNQcm9jZXNzX0V4ZWN1dGUoY3ApOwogCi0gIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBPdXRwdXQ7CiAgIGNoYXIqIGRhdGE7CiAgIGludCBsZW5ndGg7CiAgIHdoaWxlIChjbXN5c1Byb2Nlc3NfV2FpdEZvckRhdGEoY3AsICZkYXRhLCAmbGVuZ3RoLCBudWxscHRyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9XaVgvY21DUGFja1dJWEdlbmVyYXRvci5jeHgKaW5kZXggZTcxYTM4Zi4uNzJhZjEwYiAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuY3h4CkBAIC00LDE0ICs0LDE1IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKICNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvU3lzdGVtVG9vbHMuaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DUGFja0NvbXBvbmVudEdyb3VwLmgiCiAjaW5jbHVkZSAiY21DUGFja0xvZy5oIgogI2luY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgpAQCAtMzUsMjIgKzM2LDE2IEBACiAjaW5jbHVkZSAiY21DTWFrZVRvV2l4UGF0aC5oIgogCiBjbUNQYWNrV0lYR2VuZXJhdG9yOjpjbUNQYWNrV0lYR2VuZXJhdG9yKCkKLSAgOiBQYXRjaCgwKQotICAsIENvbXBvbmVudEd1aWRUeXBlKGNtV0lYU291cmNlV3JpdGVyOjpXSVhfR0VORVJBVEVEX0dVSUQpCisgIDogQ29tcG9uZW50R3VpZFR5cGUoY21XSVhTb3VyY2VXcml0ZXI6OldJWF9HRU5FUkFURURfR1VJRCkKIHsKIH0KIAotY21DUGFja1dJWEdlbmVyYXRvcjo6fmNtQ1BhY2tXSVhHZW5lcmF0b3IoKQotewotICBpZiAodGhpcy0+UGF0Y2gpIHsKLSAgICBkZWxldGUgdGhpcy0+UGF0Y2g7Ci0gIH0KLX0KK2NtQ1BhY2tXSVhHZW5lcmF0b3I6On5jbUNQYWNrV0lYR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiBpbnQgY21DUGFja1dJWEdlbmVyYXRvcjo6SW5pdGlhbGl6ZUludGVybmFsKCkKIHsKICAgY29tcG9uZW50UGFja2FnZU1ldGhvZCA9IE9ORV9QQUNLQUdFOwotICB0aGlzLT5QYXRjaCA9IG5ldyBjbVdJWFBhdGNoKHRoaXMtPkxvZ2dlcik7CisgIHRoaXMtPlBhdGNoID0gY206Om1ha2VfdW5pcXVlPGNtV0lYUGF0Y2g+KHRoaXMtPkxvZ2dlcik7CiAKICAgcmV0dXJuIHRoaXMtPlN1cGVyY2xhc3M6OkluaXRpYWxpemVJbnRlcm5hbCgpOwogfQpAQCAtMTAzLDcgKzk4LDcgQEAKICAgICBjb21tYW5kIDw8ICIgLWV4dCAiIDw8IFF1b3RlUGF0aChleHQpOwogICB9CiAKLSAgaWYgKHNvdXJjZUZpbGUucmZpbmQodGhpcy0+Q1BhY2tUb3BMZXZlbCwgMCkgIT0gMCkgeworICBpZiAoIWNtSGFzU3VmZml4KHNvdXJjZUZpbGUsIHRoaXMtPkNQYWNrVG9wTGV2ZWwpKSB7CiAgICAgY29tbWFuZCA8PCAiICIgPDwgUXVvdGVQYXRoKCItSSIgKyB0aGlzLT5DUGFja1RvcExldmVsKTsKICAgfQogCkBAIC0zNTUsOCArMzUwLDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdGlvbnMgPSBHZXRPcHRpb25zKCk7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG9wdGlvbnMpIHsKLSAgICBpZiAobmFtZS5sZW5ndGgoKSA+IHByZWZpeC5sZW5ndGgoKSAmJgotICAgICAgICBuYW1lLnN1YnN0cigwLCBwcmVmaXgubGVuZ3RoKCkpID09IHByZWZpeCkgeworICAgIGlmIChjbUhhc1ByZWZpeChuYW1lLCBwcmVmaXgpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBpZCA9IG5hbWUuc3Vic3RyKHByZWZpeC5sZW5ndGgoKSk7CiAgICAgICBzdGQ6OnN0cmluZyB2YWx1ZSA9IEdldE9wdGlvbihuYW1lLmNfc3RyKCkpOwogCkBAIC05NjAsNyArOTU0LDcgQEAKICAgICAgICAgICBzaG9ydGN1dC53b3JraW5nRGlyZWN0b3J5SWQgPSBkaXJlY3RvcnlJZDsKICAgICAgICAgICBzaG9ydGN1dHMuaW5zZXJ0KGNtV0lYU2hvcnRjdXRzOjpTVEFSVF9NRU5VLCBpZCwgc2hvcnRjdXQpOwogCi0gICAgICAgICAgaWYgKGNtQ29udGFpbnMoZGVza3RvcEV4ZWN1dGFibGVzLCBleGVjdXRhYmxlTmFtZSkpIHsKKyAgICAgICAgICBpZiAoY206OmNvbnRhaW5zKGRlc2t0b3BFeGVjdXRhYmxlcywgZXhlY3V0YWJsZU5hbWUpKSB7CiAgICAgICAgICAgICBzaG9ydGN1dHMuaW5zZXJ0KGNtV0lYU2hvcnRjdXRzOjpERVNLVE9QLCBpZCwgc2hvcnRjdXQpOwogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTEwNCwxNCArMTA5OCwxNCBAQAogICBjbUNyeXB0b0hhc2ggc2hhMShjbUNyeXB0b0hhc2g6OkFsZ29TSEExKTsKICAgc3RkOjpzdHJpbmcgY29uc3QgaGFzaCA9IHNoYTEuSGFzaFN0cmluZyhwYXRoKTsKIAotICBzdGQ6OnN0cmluZyBpZGVudGlmaWVyID0gY21TdHJDYXQoY206OnN0cmluZ192aWV3KGhhc2gpLnN1YnN0cigwLCA3KSwgJ18nKTsKLQogICBjb25zdCBzaXplX3QgbWF4RmlsZU5hbWVMZW5ndGggPSA1MjsKKyAgc3RkOjpzdHJpbmcgaWRlbnRpZmllciA9CisgICAgY21TdHJDYXQoY206OnN0cmluZ192aWV3KGhhc2gpLnN1YnN0cigwLCA3KSwgJ18nLAorICAgICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhub3JtYWxpemVkRmlsZW5hbWUpLnN1YnN0cigwLCBtYXhGaWxlTmFtZUxlbmd0aCkpOworCisgIC8vIGlmIHRoZSBuYW1lIHdhcyB0cnVuY2F0ZWQKICAgaWYgKG5vcm1hbGl6ZWRGaWxlbmFtZS5sZW5ndGgoKSA+IG1heEZpbGVOYW1lTGVuZ3RoKSB7Ci0gICAgaWRlbnRpZmllciArPSBub3JtYWxpemVkRmlsZW5hbWUuc3Vic3RyKDAsIG1heEZpbGVOYW1lTGVuZ3RoIC0gMyk7CiAgICAgaWRlbnRpZmllciArPSAiLi4uIjsKLSAgfSBlbHNlIHsKLSAgICBpZGVudGlmaWVyICs9IG5vcm1hbGl6ZWRGaWxlbmFtZTsKICAgfQogCiAgIHJldHVybiBpZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaAppbmRleCBkMTkzMzQ4Li5kNWExNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaApAQCAtNCw2ICs0LDcgQEAKICNkZWZpbmUgY21DUGFja1dJWEdlbmVyYXRvcl9oCiAKICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KIAogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKQEAgLTI0LDYgKzI1LDggQEAKICAgY21DUGFja1R5cGVNYWNybyhjbUNQYWNrV0lYR2VuZXJhdG9yLCBjbUNQYWNrR2VuZXJhdG9yKTsKIAogICBjbUNQYWNrV0lYR2VuZXJhdG9yKCk7CisgIGNtQ1BhY2tXSVhHZW5lcmF0b3IoY29uc3QgY21DUGFja1dJWEdlbmVyYXRvciYpID0gZGVsZXRlOworICBjb25zdCBjbUNQYWNrV0lYR2VuZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgY21DUGFja1dJWEdlbmVyYXRvciYpID0gZGVsZXRlOwogICB+Y21DUGFja1dJWEdlbmVyYXRvcigpOwogCiBwcm90ZWN0ZWQ6CkBAIC0xNTcsNyArMTYwLDcgQEAKIAogICBzdGQ6OnN0cmluZyBDUGFja1RvcExldmVsOwogCi0gIGNtV0lYUGF0Y2gqIFBhdGNoOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21XSVhQYXRjaD4gUGF0Y2g7CiAKICAgY21XSVhTb3VyY2VXcml0ZXI6Okd1aWRUeXBlIENvbXBvbmVudEd1aWRUeXBlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhBY2Nlc3NDb250cm9sTGlzdC5jeHggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYQWNjZXNzQ29udHJvbExpc3QuY3h4CmluZGV4IDM2NjhiNDYuLjk2ODVhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhBY2Nlc3NDb250cm9sTGlzdC5jeHgKKysrIGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWEFjY2Vzc0NvbnRyb2xMaXN0LmN4eApAQCAtMiw2ICsyLDggQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtV0lYQWNjZXNzQ29udHJvbExpc3QuaCIKIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21DUGFja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTM1LDEyICszNywxMyBAQAogICAgIHJldHVybjsKICAgfQogCi0gIHN0ZDo6c3RyaW5nIHVzZXJfYW5kX2RvbWFpbiA9IGVudHJ5LnN1YnN0cigwLCBwb3MpOwotICBzdGQ6OnN0cmluZyBwZXJtaXNzaW9uX3N0cmluZyA9IGVudHJ5LnN1YnN0cihwb3MgKyAxKTsKKyAgY206OnN0cmluZ192aWV3IGVudmlldyhlbnRyeSk7CisgIGNtOjpzdHJpbmdfdmlldyB1c2VyX2FuZF9kb21haW4gPSBlbnZpZXcuc3Vic3RyKDAsIHBvcyk7CisgIGNtOjpzdHJpbmdfdmlldyBwZXJtaXNzaW9uX3N0cmluZyA9IGVudmlldy5zdWJzdHIocG9zICsgMSk7CiAKICAgcG9zID0gdXNlcl9hbmRfZG9tYWluLmZpbmQoJ0AnKTsKLSAgc3RkOjpzdHJpbmcgdXNlcjsKLSAgc3RkOjpzdHJpbmcgZG9tYWluOworICBjbTo6c3RyaW5nX3ZpZXcgdXNlcjsKKyAgY206OnN0cmluZ192aWV3IGRvbWFpbjsKICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHVzZXIgPSB1c2VyX2FuZF9kb21haW4uc3Vic3RyKDAsIHBvcyk7CiAgICAgZG9tYWluID0gdXNlcl9hbmRfZG9tYWluLnN1YnN0cihwb3MgKyAxKTsKQEAgLTUxLDkgKzU0LDkgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBlcm1pc3Npb25zID0gY21Ub2tlbml6ZShwZXJtaXNzaW9uX3N0cmluZywgIiwiKTsKIAogICB0aGlzLT5Tb3VyY2VXcml0ZXIuQmVnaW5FbGVtZW50KCJQZXJtaXNzaW9uIik7Ci0gIHRoaXMtPlNvdXJjZVdyaXRlci5BZGRBdHRyaWJ1dGUoIlVzZXIiLCB1c2VyKTsKKyAgdGhpcy0+U291cmNlV3JpdGVyLkFkZEF0dHJpYnV0ZSgiVXNlciIsIHN0ZDo6c3RyaW5nKHVzZXIpKTsKICAgaWYgKCFkb21haW4uZW1wdHkoKSkgewotICAgIHRoaXMtPlNvdXJjZVdyaXRlci5BZGRBdHRyaWJ1dGUoIkRvbWFpbiIsIGRvbWFpbik7CisgICAgdGhpcy0+U291cmNlV3JpdGVyLkFkZEF0dHJpYnV0ZSgiRG9tYWluIiwgc3RkOjpzdHJpbmcoZG9tYWluKSk7CiAgIH0KICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcGVybWlzc2lvbiA6IHBlcm1pc3Npb25zKSB7CiAgICAgdGhpcy0+RW1pdEJvb2xlYW5BdHRyaWJ1dGUoZW50cnksIGNtVHJpbVdoaXRlc3BhY2UocGVybWlzc2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbVdJWEZpbGVzU291cmNlV3JpdGVyLmN4eCBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhGaWxlc1NvdXJjZVdyaXRlci5jeHgKaW5kZXggYzBkODc5YS4uYjQwODVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL1dpWC9jbVdJWEZpbGVzU291cmNlV3JpdGVyLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYRmlsZXNTb3VyY2VXcml0ZXIuY3h4CkBAIC0xLDUgKzEsMTAgQEAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisvLyBGb3IgU19JV1JJVEUgc3ltYm9sCisjICBkZWZpbmUgX0RFRkFVTFRfU09VUkNFCisjZW5kaWYKKwogI2luY2x1ZGUgImNtV0lYRmlsZXNTb3VyY2VXcml0ZXIuaCIKIAogI2luY2x1ZGUgImNtX3N5c19zdGF0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2guY3h4IGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWFBhdGNoLmN4eAppbmRleCBjYTIzMmY5Li4xMjJmZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2guY3h4CisrKyBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaC5jeHgKQEAgLTQxLDcgKzQxLDcgQEAKIHZvaWQgY21XSVhQYXRjaDo6QXBwbHlFbGVtZW50Q2hpbGRyZW4oY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmIGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtV0lYU291cmNlV3JpdGVyJiB3cml0ZXIpCiB7Ci0gIGZvciAoY21XSVhQYXRjaE5vZGUqIG5vZGUgOiBlbGVtZW50LmNoaWxkcmVuKSB7CisgIGZvciAoY29uc3QgYXV0byYgbm9kZSA6IGVsZW1lbnQuY2hpbGRyZW4pIHsKICAgICBzd2l0Y2ggKG5vZGUtPnR5cGUoKSkgewogICAgICAgY2FzZSBjbVdJWFBhdGNoTm9kZTo6RUxFTUVOVDoKICAgICAgICAgQXBwbHlFbGVtZW50KGR5bmFtaWNfY2FzdDxjb25zdCBjbVdJWFBhdGNoRWxlbWVudCY+KCpub2RlKSwgd3JpdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5jeHggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2hQYXJzZXIuY3h4CmluZGV4IGZkOTEwM2IuLjhiMjZjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5jeHgKKysrIGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWFBhdGNoUGFyc2VyLmN4eApAQCAtMiw3ICsyLDExIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbVdJWFBhdGNoUGFyc2VyLmgiCiAKLSNpbmNsdWRlICJjbV9leHBhdC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKKyNpbmNsdWRlIDxjbTNwL2V4cGF0Lmg+CiAKICNpbmNsdWRlICJjbUNQYWNrR2VuZXJhdG9yLmgiCiAKQEAgLTIwLDEyICsyNCw4IEBACiB7CiB9CiAKLWNtV0lYUGF0Y2hFbGVtZW50Ojp+Y21XSVhQYXRjaEVsZW1lbnQoKQotewotICBmb3IgKGNtV0lYUGF0Y2hOb2RlKiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgZGVsZXRlIGNoaWxkOwotICB9Ci19CitjbVdJWFBhdGNoRWxlbWVudDo6Y21XSVhQYXRjaEVsZW1lbnQoKSA9IGRlZmF1bHQ7CitjbVdJWFBhdGNoRWxlbWVudDo6fmNtV0lYUGF0Y2hFbGVtZW50KCkgPSBkZWZhdWx0OwogCiBjbVdJWFBhdGNoUGFyc2VyOjpjbVdJWFBhdGNoUGFyc2VyKGZyYWdtZW50X21hcF90JiBmcmFnbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ1BhY2tMb2cqIGxvZ2dlcikKQEAgLTU0LDggKzU0LDcgQEAKICAgfSBlbHNlIGlmIChTdGF0ZSA9PSBJTlNJREVfRlJBR01FTlQpIHsKICAgICBjbVdJWFBhdGNoRWxlbWVudCYgcGFyZW50ID0gKkVsZW1lbnRTdGFjay5iYWNrKCk7CiAKLSAgICBjbVdJWFBhdGNoRWxlbWVudCogZWxlbWVudCA9IG5ldyBjbVdJWFBhdGNoRWxlbWVudDsKLSAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaF9iYWNrKGVsZW1lbnQpOworICAgIGF1dG8gZWxlbWVudCA9IGNtOjptYWtlX3VuaXF1ZTxjbVdJWFBhdGNoRWxlbWVudD4oKTsKIAogICAgIGVsZW1lbnQtPm5hbWUgPSBuYW1lOwogCkBAIC02Niw3ICs2NSw4IEBACiAgICAgICBlbGVtZW50LT5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTsKICAgICB9CiAKLSAgICBFbGVtZW50U3RhY2sucHVzaF9iYWNrKGVsZW1lbnQpOworICAgIEVsZW1lbnRTdGFjay5wdXNoX2JhY2soZWxlbWVudC5nZXQoKSk7CisgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayhzdGQ6Om1vdmUoZWxlbWVudCkpOwogICB9CiB9CiAKQEAgLTEzMCwxMCArMTMwLDEwIEBACiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBsYXN0ID0gdGV4dC5maW5kX2xhc3Rfbm90X29mKHdoaXRlc3BhY2UpOwogCiAgICAgaWYgKGZpcnN0ICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGxhc3QgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgIGNtV0lYUGF0Y2hUZXh0KiB0ZXh0X25vZGUgPSBuZXcgY21XSVhQYXRjaFRleHQ7CisgICAgICBhdXRvIHRleHRfbm9kZSA9IGNtOjptYWtlX3VuaXF1ZTxjbVdJWFBhdGNoVGV4dD4oKTsKICAgICAgIHRleHRfbm9kZS0+dGV4dCA9IHRleHQuc3Vic3RyKGZpcnN0LCBsYXN0IC0gZmlyc3QgKyAxKTsKIAotICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayh0ZXh0X25vZGUpOworICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayhzdGQ6Om1vdmUodGV4dF9ub2RlKSk7CiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2hQYXJzZXIuaCBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCmluZGV4IDg3ZGQ4OTIuLjhkNWQyYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCisrKyBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBjbUNQYWNrV0lYUGF0Y2hQYXJzZXJfaAogCiAjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC0zMyw5ICszNCwxNCBAQAogewogICB2aXJ0dWFsIFR5cGUgdHlwZSgpOwogCisgIGNtV0lYUGF0Y2hFbGVtZW50KCk7CisKKyAgY21XSVhQYXRjaEVsZW1lbnQoY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBjbVdJWFBhdGNoRWxlbWVudCYpID0gZGVsZXRlOworCiAgIH5jbVdJWFBhdGNoRWxlbWVudCgpOwogCi0gIHVzaW5nIGNoaWxkX2xpc3RfdCA9IHN0ZDo6dmVjdG9yPGNtV0lYUGF0Y2hOb2RlKj47CisgIHVzaW5nIGNoaWxkX2xpc3RfdCA9IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVdJWFBhdGNoTm9kZT4+OwogICB1c2luZyBhdHRyaWJ1dGVzX3QgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OwogCiAgIHN0ZDo6c3RyaW5nIG5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0FyY2hpdmVHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmN4eAppbmRleCA0M2YyOTQ2Li45NjdjYzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0FyY2hpdmVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrQXJjaGl2ZUdlbmVyYXRvci5jeHgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbTNwL2FyY2hpdmUuaD4KKwogI2luY2x1ZGUgImNtQ1BhY2tDb21wb25lbnRHcm91cC5oIgogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC0xNTQsNiArMTU2LDIwIEBACiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIGNtQXJjaGl2ZVdyaXRlIGFyY2hpdmUoZ2YsIHRoaXMtPkNvbXByZXNzLCB0aGlzLT5BcmNoaXZlRm9ybWF0KTsgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCF0aGlzLT5TZXRBcmNoaXZlT3B0aW9ucygmYXJjaGl2ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHRvIHNldCBhcmNoaXZlIG9wdGlvbnMgPCIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgKGZpbGVuYW1lKSA8PCAiPiwgRVJST1IgPSAiIDw8IChhcmNoaXZlKS5HZXRFcnJvcigpICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCFhcmNoaXZlLk9wZW4oKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHRvIG9wZW4gYXJjaGl2ZSA8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgKGZpbGVuYW1lKSA8PCAiPiwgRVJST1IgPSAiIDw8IChhcmNoaXZlKS5HZXRFcnJvcigpICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCEoYXJjaGl2ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHRvIGNyZWF0ZSBhcmNoaXZlIDwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMjgsMyArMzQ0LDIzIEBACiAgIC8vIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb24pCiAgIHJldHVybiBJc09uKCJDUEFDS19BUkNISVZFX0NPTVBPTkVOVF9JTlNUQUxMIik7CiB9CisKK2Jvb2wgY21DUGFja0FyY2hpdmVHZW5lcmF0b3I6OlNldEFyY2hpdmVPcHRpb25zKGNtQXJjaGl2ZVdyaXRlKiBhcmNoaXZlKQoreworI2lmIEFSQ0hJVkVfVkVSU0lPTl9OVU1CRVIgPj0gMzAwNDAwMAorICAvLyBVcHN0cmVhbSBmaXhlZCBhbiBpc3N1ZSB3aXRoIHRoZWlyIGludGVnZXIgcGFyc2luZyBpbiAzLjQuMCB3aGljaCB3b3VsZAorICAvLyBjYXVzZSBzcHVyaW91cyBlcnJvcnMgdG8gYmUgcmFpc2VkIGZyb20gYHN0cnRvdWxsYC4KKyAgaWYgKHRoaXMtPkNvbXByZXNzID09IGNtQXJjaGl2ZVdyaXRlOjpDb21wcmVzc1haKSB7CisgICAgY29uc3QgY2hhciogdGhyZWFkcyA9ICIxIjsKKyAgICBpZiAodGhpcy0+SXNTZXQoIkNQQUNLX0FSQ0hJVkVfVEhSRUFEUyIpKSB7CisgICAgICB0aHJlYWRzID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19BUkNISVZFX1RIUkVBRFMiKTsKKyAgICB9CisKKyAgICBpZiAoIWFyY2hpdmUtPlNldEZpbHRlck9wdGlvbigieHoiLCAidGhyZWFkcyIsIHRocmVhZHMpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisjZW5kaWYKKworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrQXJjaGl2ZUdlbmVyYXRvci5oIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmgKaW5kZXggOGQ2NzcyMC4uN2ViNTY2NSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmgKQEAgLTg2LDYgKzg2LDggQEAKICAgICByZXR1cm4gdGhpcy0+T3V0cHV0RXh0ZW5zaW9uLmNfc3RyKCk7CiAgIH0KIAorICBib29sIFNldEFyY2hpdmVPcHRpb25zKGNtQXJjaGl2ZVdyaXRlKiBhcmNoaXZlKTsKKwogcHJpdmF0ZToKICAgY21BcmNoaXZlV3JpdGU6OkNvbXByZXNzIENvbXByZXNzOwogICBzdGQ6OnN0cmluZyBBcmNoaXZlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tEZWJHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tEZWJHZW5lcmF0b3IuY3h4CmluZGV4IGQ5MmFjZGUuLjNkNWZlNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRGViR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0RlYkdlbmVyYXRvci5jeHgKQEAgLTEzNSwxNiArMTM1LDE3IEBACiB7CiAgIC8vIGRlYmlhbi1iaW5hcnkgZmlsZQogICBjb25zdCBzdGQ6OnN0cmluZyBkYmZpbGVuYW1lID0gV29ya0RpciArICIvZGViaWFuLWJpbmFyeSI7Ci0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQoZGJmaWxlbmFtZSk7Ci0gIG91dCA8PCAiMi4wIjsKLSAgb3V0IDw8IHN0ZDo6ZW5kbDsgLy8gcmVxdWlyZWQgZm9yIHZhbGlkIGRlYmlhbiBwYWNrYWdlCisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQ7CisgIG91dC5PcGVuKGRiZmlsZW5hbWUsIGZhbHNlLCB0cnVlKTsKKyAgb3V0IDw8ICIyLjBcbiI7IC8vIHJlcXVpcmVkIGZvciB2YWxpZCBkZWJpYW4gcGFja2FnZQogfQogCiB2b2lkIERlYkdlbmVyYXRvcjo6Z2VuZXJhdGVDb250cm9sRmlsZSgpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIGN0bGZpbGVuYW1lID0gV29ya0RpciArICIvY29udHJvbCI7CiAKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG91dChjdGxmaWxlbmFtZSk7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQ7CisgIG91dC5PcGVuKGN0bGZpbGVuYW1lLCBmYWxzZSwgdHJ1ZSk7CiAgIGZvciAoYXV0byBjb25zdCYga3YgOiBDb250cm9sVmFsdWVzKSB7CiAgICAgb3V0IDw8IGt2LmZpcnN0IDw8ICI6ICIgPDwga3Yuc2Vjb25kIDw8ICJcbiI7CiAgIH0KQEAgLTE1Niw4ICsxNTcsNyBAQAogICAgICAgdG90YWxTaXplICs9IGNtU3lzdGVtVG9vbHM6OkZpbGVMZW5ndGgoZmlsZSk7CiAgICAgfQogICB9Ci0gIG91dCA8PCAiSW5zdGFsbGVkLVNpemU6ICIgPDwgKHRvdGFsU2l6ZSArIDEwMjMpIC8gMTAyNCA8PCAiXG4iOwotICBvdXQgPDwgc3RkOjplbmRsOworICBvdXQgPDwgIkluc3RhbGxlZC1TaXplOiAiIDw8ICh0b3RhbFNpemUgKyAxMDIzKSAvIDEwMjQgPDwgIlxuXG4iOwogfQogCiBib29sIERlYkdlbmVyYXRvcjo6Z2VuZXJhdGVEYXRhVGFyKCkgY29uc3QKQEAgLTE3Myw2ICsxNzMsNyBAQAogICB9CiAgIGNtQXJjaGl2ZVdyaXRlIGRhdGFfdGFyKGZpbGVTdHJlYW1fZGF0YV90YXIsIFRhckNvbXByZXNzaW9uVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRGViaWFuQXJjaGl2ZVR5cGUpOworICBkYXRhX3Rhci5PcGVuKCk7CiAKICAgLy8gdWlkL2dpZCBzaG91bGQgYmUgdGhlIG9uZSBvZiB0aGUgcm9vdCB1c2VyLCBhbmQgdGhpcyByb290IHVzZXIgaGFzCiAgIC8vIGFsd2F5cyB1aWQvZ2lkIGVxdWFsIHRvIDAuCkBAIC0yNDcsNyArMjQ4LDggQEAKIHsKICAgc3RkOjpzdHJpbmcgbWQ1ZmlsZW5hbWUgPSBXb3JrRGlyICsgIi9tZDVzdW1zIjsKIAotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0KG1kNWZpbGVuYW1lKTsKKyAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG91dDsKKyAgb3V0Lk9wZW4obWQ1ZmlsZW5hbWUsIGZhbHNlLCB0cnVlKTsKIAogICBzdGQ6OnN0cmluZyB0b3BMZXZlbFdpdGhUcmFpbGluZ1NsYXNoID0gY21TdHJDYXQoVGVtcG9yYXJ5RGlyLCAnLycpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlIDogUGFja2FnZUZpbGVzKSB7CkBAIC0yOTEsNiArMjkzLDcgQEAKICAgfQogICBjbUFyY2hpdmVXcml0ZSBjb250cm9sX3RhcihmaWxlU3RyZWFtX2NvbnRyb2xfdGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUFyY2hpdmVXcml0ZTo6Q29tcHJlc3NHWmlwLCBEZWJpYW5BcmNoaXZlVHlwZSk7CisgIGNvbnRyb2xfdGFyLk9wZW4oKTsKIAogICAvLyBzZXRzIHBlcm1pc3Npb25zIGFuZCB1aWQvZ2lkIGZvciB0aGUgZmlsZXMKICAgY29udHJvbF90YXIuU2V0VUlEQW5kR0lEKDB1LCAwdSk7CkBAIC00MTAsNiArNDEzLDcgQEAKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGRlYlN0cmVhbTsKICAgZGViU3RyZWFtLk9wZW4ob3V0cHV0UGF0aCwgZmFsc2UsIHRydWUpOwogICBjbUFyY2hpdmVXcml0ZSBkZWIoZGViU3RyZWFtLCBjbUFyY2hpdmVXcml0ZTo6Q29tcHJlc3NOb25lLCAiYXJic2QiKTsKKyAgZGViLk9wZW4oKTsKIAogICAvLyB1aWQvZ2lkIHNob3VsZCBiZSB0aGUgb25lIG9mIHRoZSByb290IHVzZXIsIGFuZCB0aGlzIHJvb3QgdXNlciBoYXMKICAgLy8gYWx3YXlzIHVpZC9naWQgZXF1YWwgdG8gMC4KQEAgLTc1NCwxNSArNzU4LDE3IEBACiAgIGNvbnN0IGJvb2wgZ2VuX3NoaWJzID0gdGhpcy0+SXNPbigiQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfR0VORVJBVEVfU0hMSUJTIikgJiYKICAgICBkZWJpYW5fcGtnX3NobGlicyAmJiAqZGViaWFuX3BrZ19zaGxpYnM7CiAgIGlmIChnZW5fc2hpYnMpIHsKLSAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0KHNobGlic2ZpbGVuYW1lKTsKKyAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0OworICAgIG91dC5PcGVuKHNobGlic2ZpbGVuYW1lLCBmYWxzZSwgdHJ1ZSk7CiAgICAgb3V0IDw8IGRlYmlhbl9wa2dfc2hsaWJzOwotICAgIG91dCA8PCBzdGQ6OmVuZGw7CisgICAgb3V0IDw8ICdcbic7CiAgIH0KIAogICBjb25zdCBzdGQ6OnN0cmluZyBwb3N0aW5zdCA9IHN0ckdlbldESVIgKyAiL3Bvc3RpbnN0IjsKICAgY29uc3Qgc3RkOjpzdHJpbmcgcG9zdHJtID0gc3RyR2VuV0RJUiArICIvcG9zdHJtIjsKICAgaWYgKHRoaXMtPklzT24oIkdFTl9DUEFDS19ERUJJQU5fR0VORVJBVEVfUE9TVElOU1QiKSkgewotICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQocG9zdGluc3QpOworICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQ7CisgICAgb3V0Lk9wZW4ocG9zdGluc3QsIGZhbHNlLCB0cnVlKTsKICAgICBvdXQgPDwgIiMhL2Jpbi9zaFxuXG4iCiAgICAgICAgICAgICJzZXQgLWVcblxuIgogICAgICAgICAgICAiaWYgWyBcIiQxXCIgPSBcImNvbmZpZ3VyZVwiIF07IHRoZW5cbiIKQEAgLTc3MCw3ICs3NzYsOCBAQAogICAgICAgICAgICAiZmlcbiI7CiAgIH0KICAgaWYgKHRoaXMtPklzT24oIkdFTl9DUEFDS19ERUJJQU5fR0VORVJBVEVfUE9TVFJNIikpIHsKLSAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0KHBvc3RybSk7CisgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG91dDsKKyAgICBvdXQuT3Blbihwb3N0cm0sIGZhbHNlLCB0cnVlKTsKICAgICBvdXQgPDwgIiMhL2Jpbi9zaFxuXG4iCiAgICAgICAgICAgICJzZXQgLWVcblxuIgogICAgICAgICAgICAiaWYgWyBcIiQxXCIgPSBcInJlbW92ZVwiIF07IHRoZW5cbiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yLmN4eAppbmRleCBmZTdhYmY0Li5jZWZiOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0RyYWdORHJvcEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IuY3h4CkBAIC04LDcgKzgsOSBAQAogI2luY2x1ZGUgPG1hcD4KIAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9hYmkuaD4KIAorI2luY2x1ZGUgImNtc3lzL0Jhc2U2NC5oIgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIApAQCAtMTgsNiArMjAsNyBAQAogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKyNpbmNsdWRlICJjbVhNTFdyaXRlci5oIgogCiAjaWZkZWYgSEFWRV9Db3JlU2VydmljZXMKIC8vIEZvciB0aGUgb2xkIExvY2FsZVN0cmluZ1RvTGFuZ0FuZFJlZ2lvbkNvZGVzKCkgZnVuY3Rpb24sIHRvIGNvbnZlcnQKQEAgLTI2LDM2ICsyOSwyOCBAQAogIyAgaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyKiBTTEFIZWFkZXIgPQotICAiZGF0YSAnTFBpYycgKDUwMDApIHtcbiIKLSAgIiAgICAkXCIwMDAyIDAwMTEgMDAwMyAwMDAxIDAwMDAgMDAwMCAwMDAyIDAwMDBcIlxuIgotICAiICAgICRcIjAwMDggMDAwMyAwMDAwIDAwMDEgMDAwNCAwMDAwIDAwMDQgMDAwNVwiXG4iCi0gICIgICAgJFwiMDAwMCAwMDBFIDAwMDYgMDAwMSAwMDA1IDAwMDcgMDAwMCAwMDA3XCJcbiIKLSAgIiAgICAkXCIwMDA4IDAwMDAgMDA0NyAwMDA5IDAwMDAgMDAzNCAwMDBBIDAwMDFcIlxuIgotICAiICAgICRcIjAwMzUgMDAwQiAwMDAxIDAwMjAgMDAwQyAwMDAwIDAwMTEgMDAwRFwiXG4iCi0gICIgICAgJFwiMDAwMCAwMDVCIDAwMDQgMDAwMCAwMDMzIDAwMEYgMDAwMSAwMDBDXCJcbiIKLSAgIiAgICAkXCIwMDEwIDAwMDAgMDAwQiAwMDBFIDAwMDBcIlxuIgotICAifTtcbiIKLSAgIlxuIjsKK3N0YXRpYyBjb25zdCB1aW50MTZfdCBEZWZhdWx0THBpY1tdID0geworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIDB4MDAwMiwgMHgwMDExLCAweDAwMDMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMiwgMHgwMDAwLAorICAweDAwMDgsIDB4MDAwMywgMHgwMDAwLCAweDAwMDEsIDB4MDAwNCwgMHgwMDAwLCAweDAwMDQsIDB4MDAwNSwKKyAgMHgwMDAwLCAweDAwMEUsIDB4MDAwNiwgMHgwMDAxLCAweDAwMDUsIDB4MDAwNywgMHgwMDAwLCAweDAwMDcsCisgIDB4MDAwOCwgMHgwMDAwLCAweDAwNDcsIDB4MDAwOSwgMHgwMDAwLCAweDAwMzQsIDB4MDAwQSwgMHgwMDAxLAorICAweDAwMzUsIDB4MDAwQiwgMHgwMDAxLCAweDAwMjAsIDB4MDAwQywgMHgwMDAwLCAweDAwMTEsIDB4MDAwRCwKKyAgMHgwMDAwLCAweDAwNUIsIDB4MDAwNCwgMHgwMDAwLCAweDAwMzMsIDB4MDAwRiwgMHgwMDAxLCAweDAwMEMsCisgIDB4MDAxMCwgMHgwMDAwLCAweDAwMEIsIDB4MDAwRSwgMHgwMDAwCisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworfTsKIAotc3RhdGljIGNvbnN0IGNoYXIqIFNMQVNUUkVuZ2xpc2ggPQotICAicmVzb3VyY2UgJ1NUUiMnICg1MDAyLCBcIkVuZ2xpc2hcIikge1xuIgotICAiICAgIHtcbiIKLSAgIiAgICAgICAgXCJFbmdsaXNoXCIsXG4iCi0gICIgICAgICAgIFwiQWdyZWVcIixcbiIKLSAgIiAgICAgICAgXCJEaXNhZ3JlZVwiLFxuIgotICAiICAgICAgICBcIlByaW50XCIsXG4iCi0gICIgICAgICAgIFwiU2F2ZS4uLlwiLFxuIgotICAiICAgICAgICBcIllvdSBhZ3JlZSB0byB0aGUgTGljZW5zZSBBZ3JlZW1lbnQgdGVybXMgd2hlbiB5b3UgY2xpY2sgXCJcbiIKLSAgIiAgICAgICAgXCJ0aGUgXFxcIkFncmVlXFxcIiBidXR0b24uXCIsXG4iCi0gICIgICAgICAgIFwiU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnRcIixcbiIKLSAgIiAgICAgICAgXCJUaGlzIHRleHQgY2Fubm90IGJlIHNhdmVkLiAgVGhpcyBkaXNrIG1heSBiZSBmdWxsIG9yIGxvY2tlZCwgIgotICAib3IgdGhlIFwiXG4iCi0gICIgICAgICAgIFwiZmlsZSBtYXkgYmUgbG9ja2VkLlwiLFxuIgotICAiICAgICAgICBcIlVuYWJsZSB0byBwcmludC4gIE1ha2Ugc3VyZSB5b3UgaGF2ZSBzZWxlY3RlZCBhIHByaW50ZXIuXCJcbiIKLSAgIiAgICB9XG4iCi0gICJ9O1xuIgotICAiXG4iOworc3RhdGljIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEZWZhdWx0TWVudSA9IHsKKyAgeyAiRW5nbGlzaCIsICJBZ3JlZSIsICJEaXNhZ3JlZSIsICJQcmludCIsICJTYXZlLi4uIiwKKyAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1zdXNwaWNpb3VzLW1pc3NpbmctY29tbWEpCisgICAgIllvdSBhZ3JlZSB0byB0aGUgTGljZW5zZSBBZ3JlZW1lbnQgdGVybXMgd2hlbiAiCisgICAgInlvdSBjbGljayB0aGUgXCJBZ3JlZVwiIGJ1dHRvbi4iLAorICAgICJTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCIsCisgICAgIlRoaXMgdGV4dCBjYW5ub3QgYmUgc2F2ZWQuICAiCisgICAgIlRoaXMgZGlzayBtYXkgYmUgZnVsbCBvciBsb2NrZWQsIG9yIHRoZSBmaWxlIG1heSBiZSBsb2NrZWQuIiwKKyAgICAiVW5hYmxlIHRvIHByaW50LiAgTWFrZSBzdXJlIHlvdSBoYXZlIHNlbGVjdGVkIGEgcHJpbnRlci4iIH0KK307CiAKIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3I6OmNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IoKQogICA6IHNpbmdsZUxpY2Vuc2UoZmFsc2UpCkBAIC01MjMsMjIgKzUxOCw0MyBAQAogICAgIH0KICAgfQogCisgIC8vIENyZWF0ZSB0aGUgZmluYWwgY29tcHJlc3NlZCByZWFkLW9ubHkgZGlzayBpbWFnZSAuLi4KKyAgc3RkOjpvc3RyaW5nc3RyZWFtIGZpbmFsX2ltYWdlX2NvbW1hbmQ7CisgIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19DT01NQU5EX0hESVVUSUwiKTsKKyAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIGNvbnZlcnQgXCIiIDw8IHRlbXBfaW1hZ2UgPDwgIlwiIjsKKyAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIC1mb3JtYXQgIjsKKyAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCBjcGFja19kbWdfZm9ybWF0OworICBmaW5hbF9pbWFnZV9jb21tYW5kIDw8ICIgLWltYWdla2V5IjsKKyAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIHpsaWItbGV2ZWw9OSI7CisgIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiAtbyBcIiIgPDwgb3V0cHV0X2ZpbGUgPDwgIlwiIjsKKworICBzdGQ6OnN0cmluZyBjb252ZXJ0X2Vycm9yOworCisgIGlmICghdGhpcy0+UnVuQ29tbWFuZChmaW5hbF9pbWFnZV9jb21tYW5kLCAmY29udmVydF9lcnJvcikpIHsKKyAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICJFcnJvciBjb21wcmVzc2luZyBkaXNrIGltYWdlLiIgPDwgc3RkOjplbmRsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNvbnZlcnRfZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKKworICAgIHJldHVybiAwOworICB9CisKICAgaWYgKCFjcGFja19saWNlbnNlX2ZpbGUuZW1wdHkoKSB8fCAhc2xhRGlyZWN0b3J5LmVtcHR5KCkpIHsKICAgICAvLyBVc2Ugb2xkIGhhcmRjb2RlZCBzdHlsZSBpZiBzbGFfZGlyIGlzIG5vdCBzZXQKICAgICBib29sIG9sZFN0eWxlID0gc2xhRGlyZWN0b3J5LmVtcHR5KCk7Ci0gICAgc3RkOjpzdHJpbmcgc2xhX3IgPQotICAgICAgY21TdHJDYXQodGhpcy0+R2V0T3B0aW9uKCJDUEFDS19UT1BMRVZFTF9ESVJFQ1RPUlkiKSwgIi9zbGEuciIpOworICAgIHN0ZDo6c3RyaW5nIHNsYV94bWwgPQorICAgICAgY21TdHJDYXQodGhpcy0+R2V0T3B0aW9uKCJDUEFDS19UT1BMRVZFTF9ESVJFQ1RPUlkiKSwgIi9zbGEueG1sIik7CiAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VzOwogICAgIGlmICghb2xkU3R5bGUpIHsKICAgICAgIGNtRXhwYW5kTGlzdChjcGFja19kbWdfbGFuZ3VhZ2VzLCBsYW5ndWFnZXMpOwogICAgIH0KIAotICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvZnMoc2xhX3IpOwotICAgIG9mcyA8PCAiI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMucj5cblxuIjsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4gaGVhZGVyX2RhdGE7CiAgICAgaWYgKG9sZFN0eWxlKSB7Ci0gICAgICBvZnMgPDwgU0xBSGVhZGVyOwotICAgICAgb2ZzIDw8ICJcbiI7CisgICAgICBoZWFkZXJfZGF0YSA9IHN0ZDo6dmVjdG9yPHVpbnQxNl90PigKKyAgICAgICAgRGVmYXVsdExwaWMsCisgICAgICAgIERlZmF1bHRMcGljICsgKHNpemVvZihEZWZhdWx0THBpYykgLyBzaXplb2YoKkRlZmF1bHRMcGljKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAvKgogICAgICAgICogTFBpYyBMYXlvdXQKQEAgLTU1OCw4ICs1NzQsNiBAQAogICAgICAgICogfQogICAgICAgICovCiAKLSAgICAgIC8vIENyZWF0ZSB2ZWN0b3IgZmlyc3QgZm9yIHJlYWRhYmlsaXR5LCB0aGVuIGl0ZXJhdGUgdG8gd3JpdGUgdG8gb2ZzCi0gICAgICBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4gaGVhZGVyX2RhdGE7CiAgICAgICBoZWFkZXJfZGF0YS5wdXNoX2JhY2soMCk7CiAgICAgICBoZWFkZXJfZGF0YS5wdXNoX2JhY2sobGFuZ3VhZ2VzLnNpemUoKSk7CiAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhbmd1YWdlcy5zaXplKCk7ICsraSkgewpAQCAtNTk2LDUyICs2MTAsNTAgQEAKICAgICAgICAgaGVhZGVyX2RhdGEucHVzaF9iYWNrKDApOwogI2VuZGlmCiAgICAgICB9Ci0gICAgICBvZnMgPDwgImRhdGEgJ0xQaWMnICg1MDAwKSB7XG4iOwotICAgICAgb2ZzIDw8IHN0ZDo6aGV4IDw8IHN0ZDo6dXBwZXJjYXNlIDw8IHN0ZDo6c2V0ZmlsbCgnMCcpOworICAgIH0KIAotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZWFkZXJfZGF0YS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaSAlIDggPT0gMCkgewotICAgICAgICAgIG9mcyA8PCAiICAgICRcIiI7Ci0gICAgICAgIH0KKyAgICBSZXpEb2MgcmV6OwogCi0gICAgICAgIG9mcyA8PCBzdGQ6OnNldHcoNCkgPDwgaGVhZGVyX2RhdGFbaV07Ci0KLSAgICAgICAgaWYgKGkgJSA4ID09IDcgfHwgaSA9PSBoZWFkZXJfZGF0YS5zaXplKCkgLSAxKSB7Ci0gICAgICAgICAgb2ZzIDw8ICJcIlxuIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBvZnMgPDwgIiAiOwotICAgICAgICB9CisgICAgeworICAgICAgUmV6RGljdCBscGljID0geyB7fSwgNTAwMCwge30gfTsKKyAgICAgIGxwaWMuRGF0YS5yZXNlcnZlKGhlYWRlcl9kYXRhLnNpemUoKSAqIHNpemVvZihoZWFkZXJfZGF0YVswXSkpOworICAgICAgZm9yICh1aW50MTZfdCB4IDogaGVhZGVyX2RhdGEpIHsKKyAgICAgICAgLy8gTFBpYyBoZWFkZXIgaXMgYmlnLWVuZGlhbi4KKyAgICAgICAgY2hhciogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZ4KTsKKyNpZiBLV0lNTF9BQklfRU5ESUFOX0lEID09IEtXSU1MX0FCSV9FTkRJQU5fSURfTElUVExFCisgICAgICAgIGxwaWMuRGF0YS5wdXNoX2JhY2soZFsxXSk7CisgICAgICAgIGxwaWMuRGF0YS5wdXNoX2JhY2soZFswXSk7CisjZWxzZQorICAgICAgICBscGljLkRhdGEucHVzaF9iYWNrKGRbMF0pOworICAgICAgICBscGljLkRhdGEucHVzaF9iYWNrKGRbMV0pOworI2VuZGlmCiAgICAgICB9Ci0gICAgICBvZnMgPDwgIn07XG5cbiI7Ci0gICAgICAvLyBSZXNldCBvZnMgb3B0aW9ucwotICAgICAgb2ZzIDw8IHN0ZDo6ZGVjIDw8IHN0ZDo6bm91cHBlcmNhc2UgPDwgc3RkOjpzZXRmaWxsKCcgJyk7CisgICAgICByZXouTFBpYy5FbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUobHBpYykpOwogICAgIH0KIAogICAgIGJvb2wgaGF2ZV93cml0ZV9saWNlbnNlX2Vycm9yID0gZmFsc2U7CiAgICAgc3RkOjpzdHJpbmcgZXJyb3I7CiAKICAgICBpZiAob2xkU3R5bGUpIHsKLSAgICAgIGlmICghdGhpcy0+V3JpdGVMaWNlbnNlKG9mcywgMCwgIiIsIGNwYWNrX2xpY2Vuc2VfZmlsZSwgJmVycm9yKSkgeworICAgICAgaWYgKCF0aGlzLT5Xcml0ZUxpY2Vuc2UocmV6LCAwLCAiIiwgY3BhY2tfbGljZW5zZV9maWxlLCAmZXJyb3IpKSB7CiAgICAgICAgIGhhdmVfd3JpdGVfbGljZW5zZV9lcnJvciA9IHRydWU7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFuZ3VhZ2VzLnNpemUoKSAmJiAhaGF2ZV93cml0ZV9saWNlbnNlX2Vycm9yOwogICAgICAgICAgICArK2kpIHsKICAgICAgICAgaWYgKHNpbmdsZUxpY2Vuc2UpIHsKLSAgICAgICAgICBpZiAoIXRoaXMtPldyaXRlTGljZW5zZShvZnMsIGkgKyA1MDAwLCBsYW5ndWFnZXNbaV0sCisgICAgICAgICAgaWYgKCF0aGlzLT5Xcml0ZUxpY2Vuc2UocmV6LCBpICsgNTAwMCwgbGFuZ3VhZ2VzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwYWNrX2xpY2Vuc2VfZmlsZSwgJmVycm9yKSkgewogICAgICAgICAgICAgaGF2ZV93cml0ZV9saWNlbnNlX2Vycm9yID0gdHJ1ZTsKICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKCF0aGlzLT5Xcml0ZUxpY2Vuc2Uob2ZzLCBpICsgNTAwMCwgbGFuZ3VhZ2VzW2ldLCAiIiwgJmVycm9yKSkgeworICAgICAgICAgIGlmICghdGhpcy0+V3JpdGVMaWNlbnNlKHJleiwgaSArIDUwMDAsIGxhbmd1YWdlc1tpXSwgIiIsICZlcnJvcikpIHsKICAgICAgICAgICAgIGhhdmVfd3JpdGVfbGljZW5zZV9lcnJvciA9IHRydWU7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCi0gICAgb2ZzLkNsb3NlKCk7Ci0KICAgICBpZiAoaGF2ZV93cml0ZV9saWNlbnNlX2Vycm9yKSB7CiAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHdyaXRpbmcgbGljZW5zZSBmaWxlIHRvIFNMQS4iIDw8IHN0ZDo6ZW5kbApAQCAtNjUwLDk0ICs2NjIsMjUgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmICh0ZW1wX2ltYWdlX2Zvcm1hdCAhPSAiVURaTyIpIHsKLSAgICAgIHRlbXBfaW1hZ2VfZm9ybWF0ID0gIlVEWk8iOwotICAgICAgLy8gY29udmVydCB0byBVRFpPIHRvIGVuYWJsZSB1bmZsYXR0ZW4vZmxhdHRlbgotICAgICAgc3RkOjpzdHJpbmcgdGVtcF91ZHpvID0gY21TdHJDYXQoCi0gICAgICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfVE9QTEVWRUxfRElSRUNUT1JZIiksICIvdGVtcC11ZHpvLmRtZyIpOworICAgIHRoaXMtPldyaXRlUmV6WE1MKHNsYV94bWwsIHJleik7CiAKLSAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSB1ZGNvX2ltYWdlX2NvbW1hbmQ7Ci0gICAgICB1ZGNvX2ltYWdlX2NvbW1hbmQgPDwgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19DT01NQU5EX0hESVVUSUwiKTsKLSAgICAgIHVkY29faW1hZ2VfY29tbWFuZCA8PCAiIGNvbnZlcnQgXCIiIDw8IHRlbXBfaW1hZ2UgPDwgIlwiIjsKLSAgICAgIHVkY29faW1hZ2VfY29tbWFuZCA8PCAiIC1mb3JtYXQgVURaTyI7Ci0gICAgICB1ZGNvX2ltYWdlX2NvbW1hbmQgPDwgIiAtb3YgLW8gXCIiIDw8IHRlbXBfdWR6byA8PCAiXCIiOwotCi0gICAgICBpZiAoIXRoaXMtPlJ1bkNvbW1hbmQodWRjb19pbWFnZV9jb21tYW5kLCAmZXJyb3IpKSB7Ci0gICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb252ZXJ0aW5nIHRvIFVEQ08gZG1nIGZvciBhZGRpbmcgU0xBLiIKLSAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICAgICAgICAgPDwgZXJyb3IgPDwgc3RkOjplbmRsKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgICB0ZW1wX2ltYWdlID0gdGVtcF91ZHpvOwotICAgIH0KLQotICAgIC8vIHVuZmxhdHRlbiBkbWcKLSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdW5mbGF0dGVuX2NvbW1hbmQ7Ci0gICAgdW5mbGF0dGVuX2NvbW1hbmQgPDwgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19DT01NQU5EX0hESVVUSUwiKTsKLSAgICB1bmZsYXR0ZW5fY29tbWFuZCA8PCAiIHVuZmxhdHRlbiAiOwotICAgIHVuZmxhdHRlbl9jb21tYW5kIDw8ICJcIiIgPDwgdGVtcF9pbWFnZSA8PCAiXCIiOwotCi0gICAgaWYgKCF0aGlzLT5SdW5Db21tYW5kKHVuZmxhdHRlbl9jb21tYW5kLCAmZXJyb3IpKSB7Ci0gICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgIkVycm9yIHVuZmxhdHRlbmluZyBkbWcgZm9yIGFkZGluZyBTTEEuIiA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBSZXogdGhlIFNMQQorICAgIC8vIENyZWF0ZSB0aGUgZmluYWwgY29tcHJlc3NlZCByZWFkLW9ubHkgZGlzayBpbWFnZSAuLi4KICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZW1iZWRfc2xhX2NvbW1hbmQ7Ci0gICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19DT01NQU5EX1JFWiIpOwotICAgIGNvbnN0IGNoYXIqIHN5c3Jvb3QgPSB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX09TWF9TWVNST09UIik7Ci0gICAgaWYgKHN5c3Jvb3QgJiYgc3lzcm9vdFswXSAhPSAnXDAnKSB7Ci0gICAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCAiIC1pc3lzcm9vdCBcIiIgPDwgc3lzcm9vdCA8PCAiXCIiOwotICAgIH0KLSAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCAiIFwiIiA8PCBzbGFfciA8PCAiXCIiOwotICAgIGVtYmVkX3NsYV9jb21tYW5kIDw8ICIgLWEgLW8gIjsKLSAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCAiXCIiIDw8IHRlbXBfaW1hZ2UgPDwgIlwiIjsKLQotICAgIGlmICghdGhpcy0+UnVuQ29tbWFuZChlbWJlZF9zbGFfY29tbWFuZCwgJmVycm9yKSkgeworICAgIGVtYmVkX3NsYV9jb21tYW5kIDw8IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfQ09NTUFORF9IRElVVElMIik7CisgICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgIiB1ZGlmcmV6IjsKKyAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCAiIC14bWwiOworICAgIGVtYmVkX3NsYV9jb21tYW5kIDw8ICIgXCIiIDw8IHNsYV94bWwgPDwgIlwiIjsKKyAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCAiIEZJWE1FX1dIWV9JU19USElTX0FSR1VNRU5UX05FRURFRCI7CisgICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgIiBcIiIgPDwgb3V0cHV0X2ZpbGUgPDwgIlwiIjsKKyAgICBzdGQ6OnN0cmluZyBlbWJlZF9lcnJvcjsKKyAgICBpZiAoIXRoaXMtPlJ1bkNvbW1hbmQoZW1iZWRfc2xhX2NvbW1hbmQsICZlbWJlZF9lcnJvcikpIHsKICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAiRXJyb3IgYWRkaW5nIFNMQS4iIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGVycm9yIDw8IHN0ZDo6ZW5kbCk7CisgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb21wcmVzc2luZyBkaXNrIGltYWdlLiIgPDwgc3RkOjplbmRsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZW1iZWRfZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOworCiAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICAvLyBmbGF0dGVuIGRtZwotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBmbGF0dGVuX2NvbW1hbmQ7Ci0gICAgZmxhdHRlbl9jb21tYW5kIDw8IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfQ09NTUFORF9IRElVVElMIik7Ci0gICAgZmxhdHRlbl9jb21tYW5kIDw8ICIgZmxhdHRlbiAiOwotICAgIGZsYXR0ZW5fY29tbWFuZCA8PCAiXCIiIDw8IHRlbXBfaW1hZ2UgPDwgIlwiIjsKLQotICAgIGlmICghdGhpcy0+UnVuQ29tbWFuZChmbGF0dGVuX2NvbW1hbmQsICZlcnJvcikpIHsKLSAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZmxhdHRlbmluZyBkbWcgZm9yIGFkZGluZyBTTEEuIiA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotCi0gIC8vIENyZWF0ZSB0aGUgZmluYWwgY29tcHJlc3NlZCByZWFkLW9ubHkgZGlzayBpbWFnZSAuLi4KLSAgc3RkOjpvc3RyaW5nc3RyZWFtIGZpbmFsX2ltYWdlX2NvbW1hbmQ7Ci0gIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19DT01NQU5EX0hESVVUSUwiKTsKLSAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIGNvbnZlcnQgXCIiIDw8IHRlbXBfaW1hZ2UgPDwgIlwiIjsKLSAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIC1mb3JtYXQgIjsKLSAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCBjcGFja19kbWdfZm9ybWF0OwotICBmaW5hbF9pbWFnZV9jb21tYW5kIDw8ICIgLWltYWdla2V5IjsKLSAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIHpsaWItbGV2ZWw9OSI7Ci0gIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiAtbyBcIiIgPDwgb3V0cHV0X2ZpbGUgPDwgIlwiIjsKLQotICBzdGQ6OnN0cmluZyBjb252ZXJ0X2Vycm9yOwotCi0gIGlmICghdGhpcy0+UnVuQ29tbWFuZChmaW5hbF9pbWFnZV9jb21tYW5kLCAmY29udmVydF9lcnJvcikpIHsKLSAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICJFcnJvciBjb21wcmVzc2luZyBkaXNrIGltYWdlLiIgPDwgc3RkOjplbmRsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNvbnZlcnRfZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKLQotICAgIHJldHVybiAwOwogICB9CiAKICAgcmV0dXJuIDE7CkBAIC03ODgsMTAgKzczMSw2NyBAQAogICByZXR1cm4gR2V0Q29tcG9uZW50UGFja2FnZUZpbGVOYW1lKHBhY2thZ2VfZmlsZV9uYW1lLCBjb21wb25lbnROYW1lLCBmYWxzZSk7CiB9CiAKLWJvb2wgY21DUGFja0RyYWdORHJvcEdlbmVyYXRvcjo6V3JpdGVMaWNlbnNlKAotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIG91dHB1dFN0cmVhbSwgaW50IGxpY2Vuc2VOdW1iZXIsCi0gIHN0ZDo6c3RyaW5nIGxpY2Vuc2VMYW5ndWFnZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGxpY2Vuc2VGaWxlLAotICBzdGQ6OnN0cmluZyogZXJyb3IpCit2b2lkIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3I6OldyaXRlUmV6WE1MKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXpEb2MgY29uc3QmIHJleikKK3sKKyAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZ4bWwoZmlsZSk7CisgIGNtWE1MV3JpdGVyIHhtbChmeG1sKTsKKyAgeG1sLlN0YXJ0RG9jdW1lbnQoKTsKKyAgeG1sLlN0YXJ0RWxlbWVudCgicGxpc3QiKTsKKyAgeG1sLkF0dHJpYnV0ZSgidmVyc2lvbiIsICIxLjAiKTsKKyAgeG1sLlN0YXJ0RWxlbWVudCgiZGljdCIpOworICB0aGlzLT5Xcml0ZVJlekFycmF5KHhtbCwgcmV6LkxQaWMpOworICB0aGlzLT5Xcml0ZVJlekFycmF5KHhtbCwgcmV6Lk1lbnUpOworICB0aGlzLT5Xcml0ZVJlekFycmF5KHhtbCwgcmV6LlRleHQpOworICB0aGlzLT5Xcml0ZVJlekFycmF5KHhtbCwgcmV6LlJURik7CisgIHhtbC5FbmRFbGVtZW50KCk7IC8vIGRpY3QKKyAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gcGxpc3QKKyAgeG1sLkVuZERvY3VtZW50KCk7CisgIGZ4bWwuQ2xvc2UoKTsKK30KKwordm9pZCBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yOjpXcml0ZVJlekFycmF5KGNtWE1MV3JpdGVyJiB4bWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV6QXJyYXkgY29uc3QmIGFycmF5KQoreworICBpZiAoYXJyYXkuRW50cmllcy5lbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIHhtbC5TdGFydEVsZW1lbnQoImtleSIpOworICB4bWwuQ29udGVudChhcnJheS5LZXkpOworICB4bWwuRW5kRWxlbWVudCgpOyAvLyBrZXkKKyAgeG1sLlN0YXJ0RWxlbWVudCgiYXJyYXkiKTsKKyAgZm9yIChSZXpEaWN0IGNvbnN0JiBkaWN0IDogYXJyYXkuRW50cmllcykgeworICAgIHRoaXMtPldyaXRlUmV6RGljdCh4bWwsIGRpY3QpOworICB9CisgIHhtbC5FbmRFbGVtZW50KCk7IC8vIGFycmF5Cit9CisKK3ZvaWQgY21DUGFja0RyYWdORHJvcEdlbmVyYXRvcjo6V3JpdGVSZXpEaWN0KGNtWE1MV3JpdGVyJiB4bWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXpEaWN0IGNvbnN0JiBkaWN0KQoreworICBzdGQ6OnZlY3RvcjxjaGFyPiBiYXNlNjRidWYoZGljdC5EYXRhLnNpemUoKSAqIDMgLyAyICsgNSk7CisgIHNpemVfdCBiYXNlNjRsZW4gPQorICAgIGNtc3lzQmFzZTY0X0VuY29kZShkaWN0LkRhdGEuZGF0YSgpLCBkaWN0LkRhdGEuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihiYXNlNjRidWYuZGF0YSgpKSwgMCk7CisgIHN0ZDo6c3RyaW5nIGJhc2U2NGRhdGEoYmFzZTY0YnVmLmRhdGEoKSwgYmFzZTY0bGVuKTsKKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICB4bWwuU3RhcnRFbGVtZW50KCJkaWN0Iik7CisgIHhtbC5TdGFydEVsZW1lbnQoImtleSIpOyAgICB4bWwuQ29udGVudCgiQXR0cmlidXRlcyIpOyB4bWwuRW5kRWxlbWVudCgpOworICB4bWwuU3RhcnRFbGVtZW50KCJzdHJpbmciKTsgeG1sLkNvbnRlbnQoIjB4MDAwMCIpOyAgICAgeG1sLkVuZEVsZW1lbnQoKTsKKyAgeG1sLlN0YXJ0RWxlbWVudCgia2V5Iik7ICAgIHhtbC5Db250ZW50KCJEYXRhIik7ICAgICAgIHhtbC5FbmRFbGVtZW50KCk7CisgIHhtbC5TdGFydEVsZW1lbnQoImRhdGEiKTsgICB4bWwuQ29udGVudChiYXNlNjRkYXRhKTsgICB4bWwuRW5kRWxlbWVudCgpOworICB4bWwuU3RhcnRFbGVtZW50KCJrZXkiKTsgICAgeG1sLkNvbnRlbnQoIklEIik7ICAgICAgICAgeG1sLkVuZEVsZW1lbnQoKTsKKyAgeG1sLlN0YXJ0RWxlbWVudCgic3RyaW5nIik7IHhtbC5Db250ZW50KGRpY3QuSUQpOyAgICAgIHhtbC5FbmRFbGVtZW50KCk7CisgIHhtbC5TdGFydEVsZW1lbnQoImtleSIpOyAgICB4bWwuQ29udGVudCgiTmFtZSIpOyAgICAgICB4bWwuRW5kRWxlbWVudCgpOworICB4bWwuU3RhcnRFbGVtZW50KCJzdHJpbmciKTsgeG1sLkNvbnRlbnQoZGljdC5OYW1lKTsgICAgeG1sLkVuZEVsZW1lbnQoKTsKKyAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gZGljdAorICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KK30KKworYm9vbCBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yOjpXcml0ZUxpY2Vuc2UoUmV6RG9jJiByZXosIHNpemVfdCBsaWNlbnNlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbGljZW5zZUxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpY2Vuc2VGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKQogewogICBpZiAoIWxpY2Vuc2VGaWxlLmVtcHR5KCkgJiYgIXNpbmdsZUxpY2Vuc2UpIHsKICAgICBsaWNlbnNlTnVtYmVyID0gNTAwMjsKQEAgLTc5OSwxMSArNzk5LDExIEBACiAgIH0KIAogICAvLyBMaWNlbnNlIGZpbGUKLSAgc3RkOjpzdHJpbmcgbGljZW5zZV9mb3JtYXQgPSAiVEVYVCI7CisgIFJlekFycmF5KiBsaWNlbnNlQXJyYXkgPSAmcmV6LlRleHQ7CiAgIHN0ZDo6c3RyaW5nIGFjdHVhbF9saWNlbnNlOwogICBpZiAoIWxpY2Vuc2VGaWxlLmVtcHR5KCkpIHsKICAgICBpZiAoY21IYXNMaXRlcmFsU3VmZml4KGxpY2Vuc2VGaWxlLCAiLnJ0ZiIpKSB7Ci0gICAgICBsaWNlbnNlX2Zvcm1hdCA9ICJSVEYgIjsKKyAgICAgIGxpY2Vuc2VBcnJheSA9ICZyZXouUlRGOwogICAgIH0KICAgICBhY3R1YWxfbGljZW5zZSA9IGxpY2Vuc2VGaWxlOwogICB9IGVsc2UgewpAQCAtODEyLDkzICs4MTIsOTQgQEAKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhsaWNlbnNlX3dvX2V4dCArICIudHh0IikpIHsKICAgICAgIGFjdHVhbF9saWNlbnNlID0gbGljZW5zZV93b19leHQgKyAiLnR4dCI7CiAgICAgfSBlbHNlIHsKLSAgICAgIGxpY2Vuc2VfZm9ybWF0ID0gIlJURiAiOworICAgICAgbGljZW5zZUFycmF5ID0gJnJlei5SVEY7CiAgICAgICBhY3R1YWxfbGljZW5zZSA9IGxpY2Vuc2Vfd29fZXh0ICsgIi5ydGYiOwogICAgIH0KICAgfQogCi0gIC8vIExpY2Vuc2UgaGVhZGVyCi0gIG91dHB1dFN0cmVhbSA8PCAiZGF0YSAnIiA8PCBsaWNlbnNlX2Zvcm1hdCA8PCAiJyAoIiA8PCBsaWNlbnNlTnVtYmVyCi0gICAgICAgICAgICAgICA8PCAiLCBcIiIgPDwgbGljZW5zZUxhbmd1YWdlIDw8ICJcIikge1xuIjsKICAgLy8gTGljZW5zZSBib2R5Ci0gIGNtc3lzOjppZnN0cmVhbSBsaWNlbnNlX2lmczsKLSAgbGljZW5zZV9pZnMub3BlbihhY3R1YWxfbGljZW5zZS5jX3N0cigpKTsKLSAgaWYgKGxpY2Vuc2VfaWZzLmlzX29wZW4oKSkgewotICAgIHdoaWxlIChsaWNlbnNlX2lmcy5nb29kKCkpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGxpbmU7Ci0gICAgICBzdGQ6OmdldGxpbmUobGljZW5zZV9pZnMsIGxpbmUpOwotICAgICAgaWYgKCFsaW5lLmVtcHR5KCkpIHsKLSAgICAgICAgRXNjYXBlUXVvdGVzQW5kQmFja3NsYXNoZXMobGluZSk7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5lczsKLSAgICAgICAgaWYgKCF0aGlzLT5CcmVha0xvbmdMaW5lKGxpbmUsIGxpbmVzLCBlcnJvcikpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBsIDogbGluZXMpIHsKLSAgICAgICAgICBvdXRwdXRTdHJlYW0gPDwgIiAgICAgICAgXCIiIDw8IGwgPDwgIlwiXG4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBvdXRwdXRTdHJlYW0gPDwgIiAgICAgICAgXCJcXG5cIlxuIjsKKyAgeworICAgIFJlekRpY3QgbGljZW5zZSA9IHsgbGljZW5zZUxhbmd1YWdlLCBsaWNlbnNlTnVtYmVyLCB7fSB9OworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5lczsKKyAgICBpZiAoIXRoaXMtPlJlYWRGaWxlKGFjdHVhbF9saWNlbnNlLCBsaW5lcywgZXJyb3IpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGxpY2Vuc2VfaWZzLmNsb3NlKCk7CisgICAgdGhpcy0+RW5jb2RlTGljZW5zZShsaWNlbnNlLCBsaW5lcyk7CisgICAgbGljZW5zZUFycmF5LT5FbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUobGljZW5zZSkpOwogICB9CiAKLSAgLy8gRW5kIG9mIExpY2Vuc2UKLSAgb3V0cHV0U3RyZWFtIDw8ICJ9O1xuXG4iOwotICBpZiAoIWxpY2Vuc2VGaWxlLmVtcHR5KCkgJiYgIXNpbmdsZUxpY2Vuc2UpIHsKLSAgICBvdXRwdXRTdHJlYW0gPDwgU0xBU1RSRW5nbGlzaDsKLSAgfSBlbHNlIHsKLSAgICAvLyBNZW51IGhlYWRlcgotICAgIG91dHB1dFN0cmVhbSA8PCAicmVzb3VyY2UgJ1NUUiMnICgiIDw8IGxpY2Vuc2VOdW1iZXIgPDwgIiwgXCIiCi0gICAgICAgICAgICAgICAgIDw8IGxpY2Vuc2VMYW5ndWFnZSA8PCAiXCIpIHtcbiI7Ci0gICAgb3V0cHV0U3RyZWFtIDw8ICIgICAge1xuIjsKLQotICAgIC8vIE1lbnUgYm9keQotICAgIGNtc3lzOjppZnN0cmVhbSBtZW51X2lmczsKLSAgICBtZW51X2lmcy5vcGVuKAotICAgICAgKHNsYURpcmVjdG9yeSArICIvIiArIGxpY2Vuc2VMYW5ndWFnZSArICIubWVudS50eHQiKS5jX3N0cigpKTsKLSAgICBpZiAobWVudV9pZnMuaXNfb3BlbigpKSB7Ci0gICAgICBzaXplX3QgbGluZXNfd3JpdHRlbiA9IDA7Ci0gICAgICB3aGlsZSAobWVudV9pZnMuZ29vZCgpKSB7Ci0gICAgICAgIC8vIExpbmVzIHdyaXR0ZW4gZnJvbSBvcmlnaW5hbCBmaWxlLCBub3QgZnJvbSBicm9rZW4gdXAgbGluZXMKLSAgICAgICAgc3RkOjpzdHJpbmcgbGluZTsKLSAgICAgICAgc3RkOjpnZXRsaW5lKG1lbnVfaWZzLCBsaW5lKTsKLSAgICAgICAgaWYgKCFsaW5lLmVtcHR5KCkpIHsKLSAgICAgICAgICBFc2NhcGVRdW90ZXNBbmRCYWNrc2xhc2hlcyhsaW5lKTsKLSAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7Ci0gICAgICAgICAgaWYgKCF0aGlzLT5CcmVha0xvbmdMaW5lKGxpbmUsIGxpbmVzLCBlcnJvcikpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29tbWE7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIGEgY29tbWEgYWZ0ZXIgZXZlcnkgY29tcGxldGUgc3RyaW5nLAotICAgICAgICAgICAgLy8gYnV0IG5vdCBvbiB0aGUgdmVyeSBsYXN0IGxpbmUKLSAgICAgICAgICAgIGlmIChsaW5lc193cml0dGVuICE9IDggJiYgaSA9PSBsaW5lcy5zaXplKCkgLSAxKSB7Ci0gICAgICAgICAgICAgIGNvbW1hID0gIiwiOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgY29tbWEgPSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dHB1dFN0cmVhbSA8PCAiICAgICAgICBcIiIgPDwgbGluZXNbaV0gPDwgIlwiIiA8PCBjb21tYSA8PCAiXG4iOwotICAgICAgICAgIH0KLSAgICAgICAgICArK2xpbmVzX3dyaXR0ZW47Ci0gICAgICAgIH0KKyAgLy8gTWVudSBib2R5CisgIHsKKyAgICBSZXpEaWN0IG1lbnUgPSB7IGxpY2Vuc2VMYW5ndWFnZSwgbGljZW5zZU51bWJlciwge30gfTsKKyAgICBpZiAoIWxpY2Vuc2VGaWxlLmVtcHR5KCkgJiYgIXNpbmdsZUxpY2Vuc2UpIHsKKyAgICAgIHRoaXMtPkVuY29kZU1lbnUobWVudSwgRGVmYXVsdE1lbnUpOworICAgIH0gZWxzZSB7CisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7CisgICAgICBzdGQ6OnN0cmluZyBhY3R1YWxfbWVudSA9CisgICAgICAgIHNsYURpcmVjdG9yeSArICIvIiArIGxpY2Vuc2VMYW5ndWFnZSArICIubWVudS50eHQiOworICAgICAgaWYgKCF0aGlzLT5SZWFkRmlsZShhY3R1YWxfbWVudSwgbGluZXMsIGVycm9yKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBtZW51X2lmcy5jbG9zZSgpOworICAgICAgdGhpcy0+RW5jb2RlTWVudShtZW51LCBsaW5lcyk7CiAgICAgfQotCi0gICAgLy8gRW5kIG9mIG1lbnUKLSAgICBvdXRwdXRTdHJlYW0gPDwgIiAgICB9XG4iOwotICAgIG91dHB1dFN0cmVhbSA8PCAifTtcbiI7Ci0gICAgb3V0cHV0U3RyZWFtIDw8ICJcbiI7CisgICAgcmV6Lk1lbnUuRW50cmllcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG1lbnUpKTsKICAgfQogCiAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3I6OkVuY29kZUxpY2Vuc2UoCisgIFJlekRpY3QmIGRpY3QsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbGluZXMpCit7CisgIC8vIExpY2Vuc2UgdGV4dCB1c2VzIENSIG5ld2xpbmVzLgorICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsIDogbGluZXMpIHsKKyAgICBkaWN0LkRhdGEuaW5zZXJ0KGRpY3QuRGF0YS5lbmQoKSwgbC5iZWdpbigpLCBsLmVuZCgpKTsKKyAgICBkaWN0LkRhdGEucHVzaF9iYWNrKCdccicpOworICB9CisgIGRpY3QuRGF0YS5wdXNoX2JhY2soJ1xyJyk7Cit9CisKK3ZvaWQgY21DUGFja0RyYWdORHJvcEdlbmVyYXRvcjo6RW5jb2RlTWVudSgKKyAgUmV6RGljdCYgZGljdCwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBsaW5lcykKK3sKKyAgLy8gTWVudSByZXNvdXJjZXMgc3RhcnQgd2l0aCBhIGJpZy1lbmRpYW4gdWludDE2X3QgZm9yIG51bWJlciBvZiBsaW5lczoKKyAgeworICAgIHVpbnQxNl90IG51bUxpbmVzID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGxpbmVzLnNpemUoKSk7CisgICAgY2hhciogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZudW1MaW5lcyk7CisjaWYgS1dJTUxfQUJJX0VORElBTl9JRCA9PSBLV0lNTF9BQklfRU5ESUFOX0lEX0xJVFRMRQorICAgIGRpY3QuRGF0YS5wdXNoX2JhY2soZFsxXSk7CisgICAgZGljdC5EYXRhLnB1c2hfYmFjayhkWzBdKTsKKyNlbHNlCisgICAgZGljdC5EYXRhLnB1c2hfYmFjayhkWzBdKTsKKyAgICBkaWN0LkRhdGEucHVzaF9iYWNrKGRbMV0pOworI2VuZGlmCisgIH0KKyAgLy8gRWFjaCBsaW5lIHN0YXJ0cyB3aXRoIGEgdWludDhfdCBsZW5ndGgsIHBsdXMgdGhlIGJ5dGVzIHRoZW1zZWx2ZXM6CisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGwgOiBsaW5lcykgeworICAgIGRpY3QuRGF0YS5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obC5sZW5ndGgoKSkpOworICAgIGRpY3QuRGF0YS5pbnNlcnQoZGljdC5EYXRhLmVuZCgpLCBsLmJlZ2luKCksIGwuZW5kKCkpOworICB9Cit9CisKK2Jvb2wgY21DUGFja0RyYWdORHJvcEdlbmVyYXRvcjo6UmVhZEZpbGUoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikKK3sKKyAgY21zeXM6Omlmc3RyZWFtIGlmcyhmaWxlKTsKKyAgc3RkOjpzdHJpbmcgbGluZTsKKyAgd2hpbGUgKHN0ZDo6Z2V0bGluZShpZnMsIGxpbmUpKSB7CisgICAgaWYgKCF0aGlzLT5CcmVha0xvbmdMaW5lKGxpbmUsIGxpbmVzLCBlcnJvcikpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgY21DUGFja0RyYWdORHJvcEdlbmVyYXRvcjo6QnJlYWtMb25nTGluZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGxpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikKIHsKLSAgY29uc3Qgc2l6ZV90IG1heF9saW5lX2xlbmd0aCA9IDUxMjsKKyAgY29uc3Qgc2l6ZV90IG1heF9saW5lX2xlbmd0aCA9IDI1NTsKICAgc2l6ZV90IGxpbmVfbGVuZ3RoID0gbWF4X2xpbmVfbGVuZ3RoOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmUuc2l6ZSgpOyBpICs9IGxpbmVfbGVuZ3RoKSB7CiAgICAgbGluZV9sZW5ndGggPSBtYXhfbGluZV9sZW5ndGg7CkBAIC05MTMsMjUgKzkxNCwxMCBAQAogICAgIGlmIChsaW5lX2xlbmd0aCA9PSAwKSB7CiAgICAgICAqZXJyb3IgPSAiUGxlYXNlIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gd29yZHMgIgogICAgICAgICAgICAgICAgIihvciBjaGFyYWN0ZXIgc2VxdWVuY2VzIG5vdCBicm9rZW4gdXAgYnkgc3BhY2VzIG9yIG5ld2xpbmVzKSAiCi0gICAgICAgICAgICAgICAiaW4geW91ciBsaWNlbnNlIGZpbGUgd2hpY2ggYXJlIG1vcmUgdGhhbiA1MTIgY2hhcmFjdGVycyBsb25nLiI7CisgICAgICAgICAgICAgICAiaW4geW91ciBsaWNlbnNlIGZpbGUgd2hpY2ggYXJlIG1vcmUgdGhhbiAyNTUgY2hhcmFjdGVycyBsb25nLiI7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGxpbmVzLnB1c2hfYmFjayhsaW5lLnN1YnN0cihpLCBsaW5lX2xlbmd0aCkpOwogICB9CiAgIHJldHVybiB0cnVlOwogfQotCi12b2lkIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3I6OkVzY2FwZVF1b3Rlc0FuZEJhY2tzbGFzaGVzKHN0ZDo6c3RyaW5nJiBsaW5lKQotewotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGJhY2tzbGFzaF9wb3MgPSBsaW5lLmZpbmQoJ1xcJyk7Ci0gIHdoaWxlIChiYWNrc2xhc2hfcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgbGluZS5yZXBsYWNlKGJhY2tzbGFzaF9wb3MsIDEsICJcXFxcIik7Ci0gICAgYmFja3NsYXNoX3BvcyA9IGxpbmUuZmluZCgnXFwnLCBiYWNrc2xhc2hfcG9zICsgMik7Ci0gIH0KLQotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHF1b3RlX3BvcyA9IGxpbmUuZmluZCgnXCInKTsKLSAgd2hpbGUgKHF1b3RlX3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIGxpbmUucmVwbGFjZShxdW90ZV9wb3MsIDEsICJcXFwiIik7Ci0gICAgcXVvdGVfcG9zID0gbGluZS5maW5kKCdcIicsIHF1b3RlX3BvcyArIDIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0RyYWdORHJvcEdlbmVyYXRvci5oIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IuaAppbmRleCBmOGM4NmMwLi5kYmQxOTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0RyYWdORHJvcEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJjbUNQYWNrR2VuZXJhdG9yLmgiCiAKIGNsYXNzIGNtR2VuZXJhdGVkRmlsZVN0cmVhbTsKK2NsYXNzIGNtWE1MV3JpdGVyOwogCiAvKiogXGNsYXNzIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IKICAqIFxicmllZiBBIGdlbmVyYXRvciBmb3IgT1NYIGRyYWctbi1kcm9wIGluc3RhbGxzCkBAIC00NSwxMiArNDYsNDAgQEAKICAgc3RkOjpzdHJpbmcgc2xhRGlyZWN0b3J5OwogICBib29sIHNpbmdsZUxpY2Vuc2U7CiAKLSAgYm9vbCBXcml0ZUxpY2Vuc2UoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBvdXRwdXRTdHJlYW0sIGludCBsaWNlbnNlTnVtYmVyLAorICBzdHJ1Y3QgUmV6RGljdAorICB7CisgICAgc3RkOjpzdHJpbmcgTmFtZTsKKyAgICBzaXplX3QgSUQ7CisgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gRGF0YTsKKyAgfTsKKworICBzdHJ1Y3QgUmV6QXJyYXkKKyAgeworICAgIHN0ZDo6c3RyaW5nIEtleTsKKyAgICBzdGQ6OnZlY3RvcjxSZXpEaWN0PiBFbnRyaWVzOworICB9OworCisgIHN0cnVjdCBSZXpEb2MKKyAgeworICAgIFJlekFycmF5IExQaWMgPSB7ICJMUGljIiwge30gfTsKKyAgICBSZXpBcnJheSBNZW51ID0geyAiU1RSIyIsIHt9IH07CisgICAgUmV6QXJyYXkgVGV4dCA9IHsgIlRFWFQiLCB7fSB9OworICAgIFJlekFycmF5IFJURiA9IHsgIlJURiAiLCB7fSB9OworICB9OworCisgIHZvaWQgV3JpdGVSZXpYTUwoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUsIFJlekRvYyBjb25zdCYgcmV6KTsKKyAgdm9pZCBXcml0ZVJlekFycmF5KGNtWE1MV3JpdGVyJiB4bWwsIFJlekFycmF5IGNvbnN0JiBhcnJheSk7CisgIHZvaWQgV3JpdGVSZXpEaWN0KGNtWE1MV3JpdGVyJiB4bWwsIFJlekRpY3QgY29uc3QmIGRpY3QpOworCisgIGJvb2wgV3JpdGVMaWNlbnNlKFJlekRvYyYgcmV6LCBzaXplX3QgbGljZW5zZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbGljZW5zZUxhbmd1YWdlLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGljZW5zZUZpbGUsIHN0ZDo6c3RyaW5nKiBlcnJvcik7CisgIHZvaWQgRW5jb2RlTGljZW5zZShSZXpEaWN0JiBkaWN0LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxpbmVzKTsKKyAgdm9pZCBFbmNvZGVNZW51KFJlekRpY3QmIGRpY3QsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbGluZXMpOworICBib29sIFJlYWRGaWxlKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGxpbmVzLAorICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcik7CiAgIGJvb2wgQnJlYWtMb25nTGluZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBsaW5lcywKICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcik7Ci0gIHZvaWQgRXNjYXBlUXVvdGVzQW5kQmFja3NsYXNoZXMoc3RkOjpzdHJpbmcmIGxpbmUpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0V4dGVybmFsR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrRXh0ZXJuYWxHZW5lcmF0b3IuY3h4CmluZGV4IDE0MmViNmYuLjUzYmU0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRXh0ZXJuYWxHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrRXh0ZXJuYWxHZW5lcmF0b3IuY3h4CkBAIC04LDEwICs4LDEwIEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKLSNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vd3JpdGVyLmg+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogI2luY2x1ZGUgImNtQ1BhY2tDb21wb25lbnRHcm91cC5oIgogI2luY2x1ZGUgImNtQ1BhY2tMb2cuaCIKQEAgLTc1LDYgKzc1LDEyIEBACiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSB8fCAhcmVzKSB7CiAgICAgICByZXR1cm4gMDsKICAgICB9CisKKyAgICBjb25zdCBjaGFyKiBidWlsdFBhY2thZ2VzU3RyID0KKyAgICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfRVhURVJOQUxfQlVJTFRfUEFDS0FHRVMiKTsKKyAgICBpZiAoYnVpbHRQYWNrYWdlc1N0cikgeworICAgICAgY21FeHBhbmRMaXN0KGJ1aWx0UGFja2FnZXNTdHIsIHRoaXMtPnBhY2thZ2VGaWxlTmFtZXMsIGZhbHNlKTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRnJlZUJTREdlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja0ZyZWVCU0RHZW5lcmF0b3IuY3h4CmluZGV4IGUzY2MzNTIuLmI2NzMwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRnJlZUJTREdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tGcmVlQlNER2VuZXJhdG9yLmN4eApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisjaW5jbHVkZSAiY21Xb3JraW5nRGlyZWN0b3J5LmgiCiAKIC8vIE5lZWRlZCBmb3IgOjpvcGVuKCkgYW5kIDo6c3RhdCgpCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjg1LDggKzI4Niw3IEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGVJdDsKLSAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKLSAgY21TeXN0ZW1Ub29sczo6Q2hhbmdlRGlyZWN0b3J5KHRvcGxldmVsKTsKKyAgY21Xb3JraW5nRGlyZWN0b3J5IHdkKHRvcGxldmVsKTsKIAogICBmaWxlcy5lcmFzZShzdGQ6OnJlbW92ZV9pZihmaWxlcy5iZWdpbigpLCBmaWxlcy5lbmQoKSwgaWdub3JlX2ZpbGUpLAogICAgICAgICAgICAgICBmaWxlcy5lbmQoKSk7CkBAIC0zMzIsNiArMzMyLDUgQEAKICAgICB9CiAgIH0KIAotICBjbVN5c3RlbVRvb2xzOjpDaGFuZ2VEaXJlY3RvcnkoZGlyKTsKICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja0dlbmVyYXRvci5jeHgKaW5kZXggZTA1MzE0NC4uYzY0MTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrR2VuZXJhdG9yLmN4eApAQCAtMjY0LDYgKzI2NCwyMyBAQAogICAgIHJldHVybiAwOwogICB9CiAKKyAgLy8gUnVuIHByZS1idWlsZCBhY3Rpb25zCisgIGNvbnN0IGNoYXIqIHByZUJ1aWxkU2NyaXB0cyA9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfUFJFX0JVSUxEX1NDUklQVFMiKTsKKyAgaWYgKHByZUJ1aWxkU2NyaXB0cykgeworICAgIGNvbnN0IGF1dG8gc2NyaXB0cyA9IGNtRXhwYW5kZWRMaXN0KHByZUJ1aWxkU2NyaXB0cywgZmFsc2UpOworICAgIGZvciAoY29uc3QgYXV0byYgc2NyaXB0IDogc2NyaXB0cykgeworICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAiRXhlY3V0aW5nIHByZS1idWlsZCBzY3JpcHQ6ICIgPDwgc2NyaXB0IDw8IHN0ZDo6ZW5kbCk7CisKKyAgICAgIGlmICghdGhpcy0+TWFrZWZpbGVNYXAtPlJlYWRMaXN0RmlsZShzY3JpcHQpKSB7CisgICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICJUaGUgcHJlLWJ1aWxkIHNjcmlwdCBub3QgZm91bmQ6ICIgPDwgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKwogICBpZiAoc2V0RGVzdERpcikgewogICAgIGNtU3lzdGVtVG9vbHM6OlB1dEVudigiREVTVERJUj0iKTsKICAgfQpAQCAtMzMzLDcgKzM1MCw4IEBACiAgICAgaWYgKGluc3RhbGxEaXJlY3Rvcmllc1ZlY3Rvci5zaXplKCkgJSAyICE9IDApIHsKICAgICAgIGNtQ1BhY2tMb2dnZXIoCiAgICAgICAgIGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKLSAgICAgICAgIkNQQUNLX0lOU1RBTExFRF9ESVJFQ1RPUklFUyBzaG91bGQgY29udGFpbiBwYWlycyBvZiA8ZGlyZWN0b3J5PiBhbmQgIgorICAgICAgICAiQ1BBQ0tfSU5TVEFMTEVEX0RJUkVDVE9SSUVTIHNob3VsZCBjb250YWluIHBhaXJzIG9mIDxkaXJlY3Rvcnk+ICIKKyAgICAgICAgImFuZCAiCiAgICAgICAgICI8c3ViZGlyZWN0b3J5Pi4gVGhlIDxzdWJkaXJlY3Rvcnk+IGNhbiBiZSAnLicgdG8gYmUgaW5zdGFsbGVkIGluICIKICAgICAgICAgInRoZSB0b3BsZXZlbCBkaXJlY3Rvcnkgb2YgaW5zdGFsbGF0aW9uLiIKICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwpAQCAtNDAzLDcgKzQyMSw2IEBACiAgICAgICB9CiAgICAgICAvKiByZWJ1aWxkIHN5bWxpbmtzIGluIHRoZSBpbnN0YWxsZWQgdHJlZSAqLwogICAgICAgaWYgKCFzeW1saW5rZWRGaWxlcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGN1ckRpciA9IGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGdvVG9EaXIgPSBjbVN0ckNhdCh0ZW1wRGlyLCAnLycsIHN1YmRpcik7CiAgICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0RFQlVHLAogICAgICAgICAgICAgICAgICAgICAgICJDaGFuZ2UgZGlyIHRvOiAiIDw8IGdvVG9EaXIgPDwgc3RkOjplbmRsKTsKQEAgLTQ0Miw3ICs0NTksOCBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19ERUJVRywKLSAgICAgICAgICAgICAgICAgICAgICAiR29pbmcgYmFjayB0bzogIiA8PCBjdXJEaXIgPDwgc3RkOjplbmRsKTsKKyAgICAgICAgICAgICAgICAgICAgICAiR29pbmcgYmFjayB0bzogIiA8PCB3b3JrZGlyLkdldE9sZERpcmVjdG9yeSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTQ3NSwxMCArNDkzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICItIEluc3RhbGwgc2NyaXB0OiAiIDw8IGluc3RhbGxTY3JpcHQgPDwgc3RkOjplbmRsKTsKIAogICAgICAgaWYgKHNldERlc3REaXIpIHsKLSAgICAgICAgLy8gRm9yIERFU1RESVIgYmFzZWQgcGFja2FnaW5nLCB1c2UgdGhlICpwcm9qZWN0KiBDTUFLRV9JTlNUQUxMX1BSRUZJWAotICAgICAgICAvLyB1bmRlcm5lYXRoIHRoZSB0ZW1wSW5zdGFsbERpcmVjdG9yeS4gVGhlIHZhbHVlIG9mIHRoZSBwcm9qZWN0J3MKLSAgICAgICAgLy8gQ01BS0VfSU5TVEFMTF9QUkVGSVggaXMgc2VudCBpbiBoZXJlIGFzIHRoZSB2YWx1ZSBvZiB0aGUKLSAgICAgICAgLy8gQ1BBQ0tfSU5TVEFMTF9QUkVGSVggdmFyaWFibGUuCisgICAgICAgIC8vIEZvciBERVNURElSIGJhc2VkIHBhY2thZ2luZywgdXNlIHRoZSAqcHJvamVjdCoKKyAgICAgICAgLy8gQ01BS0VfSU5TVEFMTF9QUkVGSVggdW5kZXJuZWF0aCB0aGUgdGVtcEluc3RhbGxEaXJlY3RvcnkuIFRoZQorICAgICAgICAvLyB2YWx1ZSBvZiB0aGUgcHJvamVjdCdzIENNQUtFX0lOU1RBTExfUFJFRklYIGlzIHNlbnQgaW4gaGVyZSBhcyB0aGUKKyAgICAgICAgLy8gdmFsdWUgb2YgdGhlIENQQUNLX0lOU1RBTExfUFJFRklYIHZhcmlhYmxlLgogCiAgICAgICAgIHN0ZDo6c3RyaW5nIGRpcjsKICAgICAgICAgaWYgKHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfSU5TVEFMTF9QUkVGSVgiKSkgewpAQCAtODExLDcgKzgyOSw3IEBACiAgICAgICogICAgIC0gQmVjYXVzZSBpdCB3YXMgYWxyZWFkeSB1c2VkIGZvciBjb21wb25lbnQgaW5zdGFsbAogICAgICAqICAgICAgIGluIG9yZGVyIHRvIHB1dCB0aGluZ3MgaW4gc3ViZGlycy4uLgogICAgICAqLwotICAgIGNtU3lzdGVtVG9vbHM6OlB1dEVudihzdGQ6OnN0cmluZygiREVTVERJUj0iKSArIHRlbXBJbnN0YWxsRGlyZWN0b3J5KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpQdXRFbnYoIkRFU1RESVI9IiArIHRlbXBJbnN0YWxsRGlyZWN0b3J5KTsKICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19ERUJVRywKICAgICAgICAgICAgICAgICAgICItIENyZWF0aW5nIGRpcmVjdG9yeTogJyIgPDwgZGlyIDw8ICInIiA8PCBzdGQ6OmVuZGwpOwogCkBAIC05MjEsMTEgKzkzOSwxMSBAQAogICAgIH0KICAgfQogCi0gIGlmIChudWxscHRyICE9IG1mLkdldERlZmluaXRpb24oIkNQQUNLX0FCU09MVVRFX0RFU1RJTkFUSU9OX0ZJTEVTIikpIHsKKyAgaWYgKGF1dG8gZCA9IG1mLkdldERlZmluaXRpb24oIkNQQUNLX0FCU09MVVRFX0RFU1RJTkFUSU9OX0ZJTEVTIikpIHsKICAgICBpZiAoIWFic29sdXRlRGVzdEZpbGVzLmVtcHR5KCkpIHsKICAgICAgIGFic29sdXRlRGVzdEZpbGVzICs9ICI7IjsKICAgICB9Ci0gICAgYWJzb2x1dGVEZXN0RmlsZXMgKz0gbWYuR2V0RGVmaW5pdGlvbigiQ1BBQ0tfQUJTT0xVVEVfREVTVElOQVRJT05fRklMRVMiKTsKKyAgICBhYnNvbHV0ZURlc3RGaWxlcyArPSBkOwogICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0RFQlVHLAogICAgICAgICAgICAgICAgICAgIkdvdCBzb21lIEFCU09MVVRFIERFU1RJTkFUSU9OIEZJTEVTOiAiIDw8IGFic29sdXRlRGVzdEZpbGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKQEAgLTkzNiw4ICs5NTQsNyBAQAogICAgICAgICBHZXRDb21wb25lbnRJbnN0YWxsRGlyTmFtZVN1ZmZpeChjb21wb25lbnQpOwogICAgICAgaWYgKG51bGxwdHIgIT0gdGhpcy0+R2V0T3B0aW9uKGFic29sdXRlRGVzdEZpbGVDb21wb25lbnQpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGFic29sdXRlRGVzdEZpbGVzTGlzdENvbXBvbmVudCA9Ci0gICAgICAgICAgY21TdHJDYXQodGhpcy0+R2V0T3B0aW9uKGFic29sdXRlRGVzdEZpbGVDb21wb25lbnQpLCAnOycsCi0gICAgICAgICAgICAgICAgICAgbWYuR2V0RGVmaW5pdGlvbigiQ1BBQ0tfQUJTT0xVVEVfREVTVElOQVRJT05fRklMRVMiKSk7CisgICAgICAgICAgY21TdHJDYXQodGhpcy0+R2V0T3B0aW9uKGFic29sdXRlRGVzdEZpbGVDb21wb25lbnQpLCAnOycsIGQpOwogICAgICAgICB0aGlzLT5TZXRPcHRpb24oYWJzb2x1dGVEZXN0RmlsZUNvbXBvbmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRGVzdEZpbGVzTGlzdENvbXBvbmVudC5jX3N0cigpKTsKICAgICAgIH0gZWxzZSB7CkBAIC0xMDc3LDYgKzEwOTQsMjUgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KICAgfQorICAvLyBSdW4gcG9zdC1idWlsZCBhY3Rpb25zCisgIGNvbnN0IGNoYXIqIHBvc3RCdWlsZFNjcmlwdHMgPSB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX1BPU1RfQlVJTERfU0NSSVBUUyIpOworICBpZiAocG9zdEJ1aWxkU2NyaXB0cykgeworICAgIHRoaXMtPk1ha2VmaWxlTWFwLT5BZGREZWZpbml0aW9uKCJDUEFDS19QQUNLQUdFX0ZJTEVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUpvaW4odGhpcy0+cGFja2FnZUZpbGVOYW1lcywgIjsiKSk7CisKKyAgICBjb25zdCBhdXRvIHNjcmlwdHMgPSBjbUV4cGFuZGVkTGlzdChwb3N0QnVpbGRTY3JpcHRzLCBmYWxzZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzY3JpcHQgOiBzY3JpcHRzKSB7CisgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICJFeGVjdXRpbmcgcG9zdC1idWlsZCBzY3JpcHQ6ICIgPDwgc2NyaXB0IDw8IHN0ZDo6ZW5kbCk7CisKKyAgICAgIGlmICghdGhpcy0+TWFrZWZpbGVNYXAtPlJlYWRMaXN0RmlsZShzY3JpcHQpKSB7CisgICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICJUaGUgcG9zdC1idWlsZCBzY3JpcHQgbm90IGZvdW5kOiAiIDw8IHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQogCiAgIC8qIFByZXBhcmUgY2hlY2tzdW0gYWxnb3JpdGhtKi8KICAgY29uc3QgY2hhciogYWxnbyA9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfUEFDS0FHRV9DSEVDS1NVTSIpOwpAQCAtMTI5MCw3ICsxMzI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvcHlPbmx5IC8qID0gZmFsc2UgKi8pCiB7CiAgIHJldHVybiB0aGlzLT5NYWtlZmlsZU1hcC0+Q29uZmlndXJlRmlsZShpbk5hbWUsIG91dE5hbWUsIGNvcHlPbmx5LCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpID09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdHJ1ZSkgPT0gMTsKIH0KIAogaW50IGNtQ1BhY2tHZW5lcmF0b3I6OkNsZWFuVGVtcG9yYXJ5RGlyZWN0b3J5KCkKQEAgLTEzNzksNyArMTQxNSw4IEBACiAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgfQogCi0gIC8vIGlmIHVzZXIgc3BlY2lmaWVkIHBhY2thZ2luZyBtZXRob2QsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBhY2thZ2luZyBtZXRob2QKKyAgLy8gaWYgdXNlciBzcGVjaWZpZWQgcGFja2FnaW5nIG1ldGhvZCwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnaW5nCisgIC8vIG1ldGhvZAogICBpZiAobWV0aG9kICE9IFVOS05PV05fQ09NUE9ORU5UX1BBQ0tBR0VfTUVUSE9EKSB7CiAgICAgY29tcG9uZW50UGFja2FnZU1ldGhvZCA9IG1ldGhvZDsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuY3h4CmluZGV4IGNhNjc1ZmQuLjQ5ZTQxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrTG9nLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5jeHgKQEAgLTQsNTQgKzQsMzggQEAKIAogI2luY2x1ZGUgPGlvc3RyZWFtPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBjbUNQYWNrTG9nOjpjbUNQYWNrTG9nKCkKIHsKLSAgdGhpcy0+VmVyYm9zZSA9IGZhbHNlOwotICB0aGlzLT5EZWJ1ZyA9IGZhbHNlOwotICB0aGlzLT5RdWlldCA9IGZhbHNlOwotICB0aGlzLT5OZXdMaW5lID0gdHJ1ZTsKLQotICB0aGlzLT5MYXN0VGFnID0gY21DUGFja0xvZzo6Tk9UQUc7CiAgIHRoaXMtPkRlZmF1bHRPdXRwdXQgPSAmc3RkOjpjb3V0OwogICB0aGlzLT5EZWZhdWx0RXJyb3IgPSAmc3RkOjpjZXJyOwotCi0gIHRoaXMtPkxvZ091dHB1dCA9IG51bGxwdHI7Ci0gIHRoaXMtPkxvZ091dHB1dENsZWFudXAgPSBmYWxzZTsKIH0KIAotY21DUGFja0xvZzo6fmNtQ1BhY2tMb2coKQotewotICB0aGlzLT5TZXRMb2dPdXRwdXRTdHJlYW0obnVsbHB0cik7Ci19CitjbUNQYWNrTG9nOjp+Y21DUGFja0xvZygpID0gZGVmYXVsdDsKIAogdm9pZCBjbUNQYWNrTG9nOjpTZXRMb2dPdXRwdXRTdHJlYW0oc3RkOjpvc3RyZWFtKiBvcykKIHsKLSAgaWYgKHRoaXMtPkxvZ091dHB1dENsZWFudXAgJiYgdGhpcy0+TG9nT3V0cHV0KSB7Ci0gICAgZGVsZXRlIHRoaXMtPkxvZ091dHB1dDsKLSAgfQotICB0aGlzLT5Mb2dPdXRwdXRDbGVhbnVwID0gZmFsc2U7CisgIHRoaXMtPkxvZ091dHB1dFN0cmVhbS5yZXNldCgpOwogICB0aGlzLT5Mb2dPdXRwdXQgPSBvczsKIH0KIAogYm9vbCBjbUNQYWNrTG9nOjpTZXRMb2dPdXRwdXRGaWxlKGNvbnN0IGNoYXIqIGZuYW1lKQogewotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIGNnID0gbnVsbHB0cjsKKyAgdGhpcy0+TG9nT3V0cHV0U3RyZWFtLnJlc2V0KCk7CiAgIGlmIChmbmFtZSkgewotICAgIGNnID0gbmV3IGNtR2VuZXJhdGVkRmlsZVN0cmVhbShmbmFtZSk7CisgICAgdGhpcy0+TG9nT3V0cHV0U3RyZWFtID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oZm5hbWUpOwogICB9Ci0gIGlmIChjZyAmJiAhKmNnKSB7Ci0gICAgZGVsZXRlIGNnOwotICAgIGNnID0gbnVsbHB0cjsKKyAgaWYgKHRoaXMtPkxvZ091dHB1dFN0cmVhbSAmJiAhKnRoaXMtPkxvZ091dHB1dFN0cmVhbSkgeworICAgIHRoaXMtPkxvZ091dHB1dFN0cmVhbS5yZXNldCgpOwogICB9Ci0gIHRoaXMtPlNldExvZ091dHB1dFN0cmVhbShjZyk7Ci0gIGlmICghY2cpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgdGhpcy0+TG9nT3V0cHV0Q2xlYW51cCA9IHRydWU7Ci0gIHJldHVybiB0cnVlOworCisgIHRoaXMtPkxvZ091dHB1dCA9IHRoaXMtPkxvZ091dHB1dFN0cmVhbS5nZXQoKTsKKworICByZXR1cm4gdGhpcy0+TG9nT3V0cHV0ICE9IG51bGxwdHI7CiB9CiAKIHZvaWQgY21DUGFja0xvZzo6TG9nKGludCB0YWcsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBtc2csCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5oIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuaAppbmRleCAxY2IxNjQzLi42OGZmY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5oCisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTG9nLmgKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogCkBAIC05NywxMyArOTgsMTMgQEAKICAgdm9pZCBTZXRFcnJvclByZWZpeChzdGQ6OnN0cmluZyBjb25zdCYgcGZ4KSB7IHRoaXMtPkVycm9yUHJlZml4ID0gcGZ4OyB9CiAKIHByaXZhdGU6Ci0gIGJvb2wgVmVyYm9zZTsKLSAgYm9vbCBEZWJ1ZzsKLSAgYm9vbCBRdWlldDsKKyAgYm9vbCBWZXJib3NlID0gZmFsc2U7CisgIGJvb2wgRGVidWcgPSBmYWxzZTsKKyAgYm9vbCBRdWlldCA9IGZhbHNlOwogCi0gIGJvb2wgTmV3TGluZTsKKyAgYm9vbCBOZXdMaW5lID0gdHJ1ZTsKIAotICBpbnQgTGFzdFRhZzsKKyAgaW50IExhc3RUYWcgPSBjbUNQYWNrTG9nOjpOT1RBRzsKIAogICBzdGQ6OnN0cmluZyBQcmVmaXg7CiAgIHN0ZDo6c3RyaW5nIE91dHB1dFByZWZpeDsKQEAgLTExMiwxMyArMTEzLDExIEBACiAgIHN0ZDo6c3RyaW5nIFdhcm5pbmdQcmVmaXg7CiAgIHN0ZDo6c3RyaW5nIEVycm9yUHJlZml4OwogCi0gIHN0ZDo6b3N0cmVhbSogRGVmYXVsdE91dHB1dDsKLSAgc3RkOjpvc3RyZWFtKiBEZWZhdWx0RXJyb3I7CisgIHN0ZDo6b3N0cmVhbSogRGVmYXVsdE91dHB1dCA9IG51bGxwdHI7CisgIHN0ZDo6b3N0cmVhbSogRGVmYXVsdEVycm9yID0gbnVsbHB0cjsKIAotICBzdGQ6OnN0cmluZyBMb2dPdXRwdXRGaWxlTmFtZTsKLSAgc3RkOjpvc3RyZWFtKiBMb2dPdXRwdXQ7Ci0gIC8vIERvIHdlIG5lZWQgdG8gY2xlYW51cCBsb2cgb3V0cHV0IHN0cmVhbQotICBib29sIExvZ091dHB1dENsZWFudXA7CisgIHN0ZDo6b3N0cmVhbSogTG9nT3V0cHV0ID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmVhbT4gTG9nT3V0cHV0U3RyZWFtOwogfTsKIAogY2xhc3MgY21DUGFja0xvZ1dyaXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tOU0lTR2VuZXJhdG9yLmN4eAppbmRleCAyYTQ2NjI3Li4wNThiMDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5jeHgKQEAgLTksMTAgKzksMTEgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1BhY2tDb21wb25lbnRHcm91cC5oIgogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC02OCw3ICs2OSw3IEBACiAKICAgICAgIC8vIFVzZSB0aGUgY3VzdG9tIGNvbXBvbmVudCBpbnN0YWxsIGRpcmVjdG9yeSBpZiB3ZSBoYXZlIG9uZQogICAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb21wb25lbnROYW1lID0gZmlsZU4uc3Vic3RyKDAsIHBvcyk7CisgICAgICAgIGF1dG8gY29tcG9uZW50TmFtZSA9IGNtOjpzdHJpbmdfdmlldyhmaWxlTikuc3Vic3RyKDAsIHBvcyk7CiAgICAgICAgIG91dHB1dERpciA9IEN1c3RvbUNvbXBvbmVudEluc3RhbGxEaXJlY3RvcnkoY29tcG9uZW50TmFtZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBvdXRwdXREaXIgPSBDdXN0b21Db21wb25lbnRJbnN0YWxsRGlyZWN0b3J5KGZpbGVOKTsKQEAgLTEwMyw3ICsxMDQsNyBAQAogICAgICAgICBjb21wb25lbnROYW1lID0gZmlsZU4uc3Vic3RyKDAsIHNsYXNoKTsKIAogICAgICAgICAvLyBTdHJpcCBvZmYgdGhlIGNvbXBvbmVudCBwYXJ0IG9mIHRoZSBwYXRoLgotICAgICAgICBmaWxlTiA9IGZpbGVOLnN1YnN0cihzbGFzaCArIDEpOworICAgICAgICBmaWxlTi5lcmFzZSgwLCBzbGFzaCArIDEpOwogICAgICAgfQogICAgIH0KICAgICBzdGQ6OnJlcGxhY2UoZmlsZU4uYmVnaW4oKSwgZmlsZU4uZW5kKCksICcvJywgJ1xcJyk7CkBAIC0yMDMsNiArMjA0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiFkZWZpbmUgTVVJX0ZJTklTSFBBR0VfVElUTEVfM0xJTkVTIik7CiAgIH0KIAorICBpZiAodGhpcy0+SXNTZXQoIkNQQUNLX05TSVNfTUFOSUZFU1RfRFBJX0FXQVJFIikpIHsKKyAgICB0aGlzLT5TZXRPcHRpb25JZk5vdFNldCgiQ1BBQ0tfTlNJU19NQU5JRkVTVF9EUElfQVdBUkVfQ09ERSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hbmlmZXN0RFBJQXdhcmUgdHJ1ZSIpOworICB9CisKICAgLy8gU2V0dXAgYWxsIG9mIHRoZSBjb21wb25lbnQgc2VjdGlvbnMKICAgaWYgKHRoaXMtPkNvbXBvbmVudHMuZW1wdHkoKSkgewogICAgIHRoaXMtPlNldE9wdGlvbklmTm90U2V0KCJDUEFDS19OU0lTX0lOU1RBTExBVElPTl9UWVBFUyIsICIiKTsKQEAgLTUyNCw3ICs1MzAsNyBAQAogICAgICAgICAgICAgICAgIDw8ICIubG5rXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICAgIC8vIHNlZSBpZiBDUEFDS19DUkVBVEVfREVTS1RPUF9MSU5LX0V4ZU5hbWUgaXMgb24KICAgICAgIC8vIGlmIHNvIGFkZCBhIGRlc2t0b3AgbGluawotICAgICAgaWYgKGNtQ29udGFpbnMoY3BhY2tQYWNrYWdlRGVza3RvcExpbmtzVmVjdG9yLCBleGVjTmFtZSkpIHsKKyAgICAgIGlmIChjbTo6Y29udGFpbnMoY3BhY2tQYWNrYWdlRGVza3RvcExpbmtzVmVjdG9yLCBleGVjTmFtZSkpIHsKICAgICAgICAgc3RyIDw8ICIgIFN0ckNtcCBcIiRJTlNUQUxMX0RFU0tUT1BcIiBcIjFcIiAwICsyXG4iOwogICAgICAgICBzdHIgPDwgIiAgICBDcmVhdGVTaG9ydEN1dCBcIiRERVNLVE9QXFwiIDw8IGxpbmtOYW1lCiAgICAgICAgICAgICA8PCBSIigubG5rIiAiJElOU1RESVJcKSIgPDwgY3BhY2tOc2lzRXhlY3V0YWJsZXNEaXJlY3RvcnkgPDwgIlxcIgpAQCAtNjcyLDcgKzY3OCw3IEBACiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgY29tcG9uZW50T3V0cHV0RGlyID0KICAgICBDdXN0b21Db21wb25lbnRJbnN0YWxsRGlyZWN0b3J5KGNvbXBvbmVudC0+TmFtZSk7Ci0gIGNvbXBvbmVudENvZGUgKz0gIiAgU2V0T3V0UGF0aCBcIiIgKyBjb21wb25lbnRPdXRwdXREaXIgKyAiXCJcbiI7CisgIGNvbXBvbmVudENvZGUgKz0gY21TdHJDYXQoIiAgU2V0T3V0UGF0aCBcIiIsIGNvbXBvbmVudE91dHB1dERpciwgIlwiXG4iKTsKIAogICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBpbnN0YWxsYXRpb24gY29tbWFuZHMKICAgaWYgKGNvbXBvbmVudC0+SXNEb3dubG9hZGVkKSB7CkBAIC05MjEsMTIgKzkyNywxMSBAQAogfQogCiBzdGQ6OnN0cmluZyBjbUNQYWNrTlNJU0dlbmVyYXRvcjo6Q3VzdG9tQ29tcG9uZW50SW5zdGFsbERpcmVjdG9yeSgKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbXBvbmVudE5hbWUpCisgIGNtOjpzdHJpbmdfdmlldyBjb21wb25lbnROYW1lKQogewotICBjb25zdCBjaGFyKiBvdXRwdXREaXIgPQotICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU18iICsgY29tcG9uZW50TmFtZSArICJfSU5TVEFMTF9ESVJFQ1RPUlkiKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgY29tcG9uZW50T3V0cHV0RGlyID0gKG91dHB1dERpciA/IG91dHB1dERpciA6ICIkSU5TVERJUiIpOwotICByZXR1cm4gY29tcG9uZW50T3V0cHV0RGlyOworICBjb25zdCBjaGFyKiBvdXRwdXREaXIgPSB0aGlzLT5HZXRPcHRpb24oCisgICAgY21TdHJDYXQoIkNQQUNLX05TSVNfIiwgY29tcG9uZW50TmFtZSwgIl9JTlNUQUxMX0RJUkVDVE9SWSIpKTsKKyAgcmV0dXJuIG91dHB1dERpciA/IG91dHB1dERpciA6ICIkSU5TVERJUiI7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtQ1BhY2tOU0lTR2VuZXJhdG9yOjpUcmFuc2xhdGVOZXdsaW5lcyhzdGQ6OnN0cmluZyBzdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuaCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5oCmluZGV4IDBhZjM3YWYuLjg4Y2JhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21DUGFja0dlbmVyYXRvci5oIgogCiBjbGFzcyBjbUNQYWNrQ29tcG9uZW50OwpAQCAtNzUsOCArNzcsNyBAQAogCiAgIC8vLyBSZXR1cm5zIHRoZSBjdXN0b20gaW5zdGFsbCBkaXJlY3RvcnkgaWYgYXZhaWxhYmxlIGZvciB0aGUgc3BlY2lmaWVkCiAgIC8vLyBjb21wb25lbnQsIG90aGVyd2lzZSAkSU5TVERJUiBpcyByZXR1cm5lZC4KLSAgc3RkOjpzdHJpbmcgQ3VzdG9tQ29tcG9uZW50SW5zdGFsbERpcmVjdG9yeSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcG9uZW50TmFtZSk7CisgIHN0ZDo6c3RyaW5nIEN1c3RvbUNvbXBvbmVudEluc3RhbGxEaXJlY3RvcnkoY206OnN0cmluZ192aWV3IGNvbXBvbmVudE5hbWUpOwogCiAgIC8vLyBUcmFuc2xhdGlvbnMgYW55IG5ld2xpbmVzIGZvdW5kIGluIHRoZSBzdHJpbmcgaW50byBcXHJcXG4sIHNvIHRoYXQgdGhlCiAgIC8vLyByZXN1bHRpbmcgc3RyaW5nIGNhbiBiZSB1c2VkIHdpdGhpbiBOU0lTLgpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NwYWNrLmN4eCBiL1NvdXJjZS9DUGFjay9jcGFjay5jeHgKaW5kZXggZGMzMTYyMy4uM2E0MDBiNyAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NwYWNrLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY3BhY2suY3h4CkBAIC04NSw3ICs4NSw3IEBACiAgICAgcmV0dXJuIDA7CiAgIH0KICAgc3RkOjpzdHJpbmcga2V5ID0gdmFsdWUuc3Vic3RyKDAsIHBvcyk7Ci0gIHZhbHVlID0gdmFsdWUuc3Vic3RyKHBvcyArIDEpOworICB2YWx1ZS5lcmFzZSgwLCBwb3MgKyAxKTsKICAgZGVmLT5NYXBba2V5XSA9IHZhbHVlOwogICBjbUNQYWNrX0xvZyhkZWYtPkxvZywgY21DUGFja0xvZzo6TE9HX0RFQlVHLAogICAgICAgICAgICAgICAiU2V0IENQYWNrIHZhcmlhYmxlOiAiIDw8IGtleSA8PCAiIHRvIFwiIiA8PCB2YWx1ZSA8PCAiXCIiCkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICAvLyBUaGUgdmFsdWUgaGFzIG5vdCBiZWVuIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lCiAgICAgZWxzZSB7CiAgICAgICAvLyBnZXQgYSBkZWZhdWx0IHZhbHVlIChjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KQotICAgICAgY3BhY2tQcm9qZWN0RGlyZWN0b3J5ID0gY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOworICAgICAgY3BhY2tQcm9qZWN0RGlyZWN0b3J5ID0gY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKICAgICAgIC8vIHVzZSBkZWZhdWx0IHZhbHVlIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkIGJ5IHRoZSBjb25maWcgZmlsZQogICAgICAgaWYgKCFnbG9iYWxNRi5Jc1NldCgiQ1BBQ0tfUEFDS0FHRV9ESVJFQ1RPUlkiKSkgewogICAgICAgICBnbG9iYWxNRi5BZGREZWZpbml0aW9uKCJDUEFDS19QQUNLQUdFX0RJUkVDVE9SWSIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJaUi5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJaUi5jeHgKaW5kZXggYzg3ZmI4M2IuLmM1MzNjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QlpSLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJaUi5jeHgKQEAgLTEwLDkgKzEwLDkgQEAKIAogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKKyNpbmNsdWRlIDxjbTNwL2V4cGF0Lmg+CiAKLSNpbmNsdWRlICJjbV9leHBhdC5oIgorI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0VkMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRBbmRUZXN0SGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQW5kVGVzdEhhbmRsZXIuY3h4CmluZGV4IDVlMjkzODYuLmRiNDI2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRBbmRUZXN0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZEFuZFRlc3RIYW5kbGVyLmN4eApAQCAtMzc5LDcgKzM3OSw3IEBACiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYWxsQXJncykKIHsKICAgLy8gLS1idWlsZC1hbmQtdGVzdCBvcHRpb25zCi0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtYW5kLXRlc3QiLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtYW5kLXRlc3QiKSAmJgogICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWYgKGlkeCArIDIgPCBhbGxBcmdzLnNpemUoKSkgewogICAgICAgaWR4Kys7CkBAIC0zOTcsMjUgKzM5NywyOSBAQAogICAgICAgcmV0dXJuIDA7CiAgICAgfQogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtdGFyZ2V0IiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS1idWlsZC10YXJnZXQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRUYXJnZXRzLnB1c2hfYmFjayhhbGxBcmdzW2lkeF0pOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtbm9jbWFrZSIsIDApID09IDApIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS1idWlsZC1ub2NtYWtlIikpIHsKICAgICB0aGlzLT5CdWlsZE5vQ01ha2UgPSB0cnVlOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtcnVuLWRpciIsIDApID09IDAgJiYgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtcnVuLWRpciIpICYmCisgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5CdWlsZFJ1bkRpciA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLXR3by1jb25maWciLCAwKSA9PSAwKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtdHdvLWNvbmZpZyIpKSB7CiAgICAgdGhpcy0+QnVpbGRUd29Db25maWcgPSB0cnVlOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtZXhlLWRpciIsIDApID09IDAgJiYgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtZXhlLWRpciIpICYmCisgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5FeGVjdXRhYmxlRGlyZWN0b3J5ID0gYWxsQXJnc1tpZHhdOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tdGVzdC10aW1lb3V0IiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS10ZXN0LXRpbWVvdXQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+VGltZW91dCA9IGNtRHVyYXRpb24oYXRvZihhbGxBcmdzW2lkeF0uY19zdHIoKSkpOwogICB9CkBAIC00MzEsMzEgKzQzNSwzMyBAQAogICAgIGlkeCsrOwogICAgIHRoaXMtPkJ1aWxkR2VuZXJhdG9yVG9vbHNldCA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLXByb2plY3QiLCAwKSA9PSAwICYmIGlkeCA8IGFsbEFyZ3Muc2l6ZSgpIC0gMSkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLXByb2plY3QiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRQcm9qZWN0ID0gYWxsQXJnc1tpZHhdOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtbWFrZXByb2dyYW0iLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtbWFrZXByb2dyYW0iKSAmJgogICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRNYWtlUHJvZ3JhbSA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLWNvbmZpZy1zYW1wbGUiLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtY29uZmlnLXNhbXBsZSIpICYmCiAgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5Db25maWdTYW1wbGUgPSBhbGxBcmdzW2lkeF07CiAgIH0KLSAgaWYgKGN1cnJlbnRBcmcuZmluZCgiLS1idWlsZC1ub2NsZWFuIiwgMCkgPT0gMCkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLW5vY2xlYW4iKSkgewogICAgIHRoaXMtPkJ1aWxkTm9DbGVhbiA9IHRydWU7CiAgIH0KLSAgaWYgKGN1cnJlbnRBcmcuZmluZCgiLS1idWlsZC1vcHRpb25zIiwgMCkgPT0gMCkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLW9wdGlvbnMiKSkgewogICAgIHdoaWxlIChpZHggKyAxIDwgYWxsQXJncy5zaXplKCkgJiYgYWxsQXJnc1tpZHggKyAxXSAhPSAiLS1idWlsZC10YXJnZXQiICYmCiAgICAgICAgICAgIGFsbEFyZ3NbaWR4ICsgMV0gIT0gIi0tdGVzdC1jb21tYW5kIikgewogICAgICAgKytpZHg7CiAgICAgICB0aGlzLT5CdWlsZE9wdGlvbnMucHVzaF9iYWNrKGFsbEFyZ3NbaWR4XSk7CiAgICAgfQogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tdGVzdC1jb21tYW5kIiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS10ZXN0LWNvbW1hbmQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgKytpZHg7CiAgICAgdGhpcy0+VGVzdENvbW1hbmQgPSBhbGxBcmdzW2lkeF07CiAgICAgd2hpbGUgKGlkeCArIDEgPCBhbGxBcmdzLnNpemUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuY3h4CmluZGV4IGQxYjc3MDEuLjQ0ZmRjMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQ29tbWFuZC5jeHgKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxzc3RyZWFtPgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0QnVpbGRIYW5kbGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkSGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkSGFuZGxlci5jeHgKaW5kZXggMDNhM2ZkMy4uMzVjMmIxMSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZEhhbmRsZXIuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRIYW5kbGVyLmN4eApAQCAtMzg2LDI0ICszODYsMjAgQEAKICAgaWYgKHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIlNvdXJjZURpcmVjdG9yeSIpLnNpemUoKSA+IDIwKSB7CiAgICAgc3RkOjpzdHJpbmcgc3JjZGlyID0KICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIlNvdXJjZURpcmVjdG9yeSIpICsgIi8iOwotICAgIGZvciAoY2MgPSBzcmNkaXIuc2l6ZSgpIC0gMjsgY2MgPiAwOyBjYy0tKSB7Ci0gICAgICBpZiAoc3JjZGlyW2NjXSA9PSAnLycpIHsKLSAgICAgICAgc3JjZGlyID0gc3JjZGlyLnN1YnN0cigwLCBjYyArIDEpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICBjYyA9IHNyY2Rpci5yZmluZCgnLycsIHNyY2Rpci5zaXplKCkgLSAyKTsKKyAgICBpZiAoY2MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHNyY2Rpci5yZXNpemUoY2MgKyAxKTsKKyAgICAgIHRoaXMtPlNpbXBsaWZ5U291cmNlRGlyID0gc3RkOjptb3ZlKHNyY2Rpcik7CiAgICAgfQotICAgIHRoaXMtPlNpbXBsaWZ5U291cmNlRGlyID0gc3JjZGlyOwogICB9CiAgIGlmICh0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJCdWlsZERpcmVjdG9yeSIpLnNpemUoKSA+IDIwKSB7CiAgICAgc3RkOjpzdHJpbmcgYmluZGlyID0KICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJ1aWxkRGlyZWN0b3J5IikgKyAiLyI7Ci0gICAgZm9yIChjYyA9IGJpbmRpci5zaXplKCkgLSAyOyBjYyA+IDA7IGNjLS0pIHsKLSAgICAgIGlmIChiaW5kaXJbY2NdID09ICcvJykgewotICAgICAgICBiaW5kaXIgPSBiaW5kaXIuc3Vic3RyKDAsIGNjICsgMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQorICAgIGNjID0gYmluZGlyLnJmaW5kKCcvJywgYmluZGlyLnNpemUoKSAtIDIpOworICAgIGlmIChjYyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgYmluZGlyLnJlc2l6ZShjYyArIDEpOworICAgICAgdGhpcy0+U2ltcGxpZnlCdWlsZERpciA9IHN0ZDo6bW92ZShiaW5kaXIpOwogICAgIH0KLSAgICB0aGlzLT5TaW1wbGlmeUJ1aWxkRGlyID0gYmluZGlyOwogICB9CiAKICAgLy8gT2ssIGxldCdzIGRvIHRoZSBidWlsZApAQCAtNTQ1LDExICs1NDEsMTEgQEAKICAgICBjb25zdCBjaGFyKiBmbmFtZSA9IGxhdW5jaERpci5HZXRGaWxlKGkpOwogICAgIGlmICh0aGlzLT5Jc0xhdW5jaGVkRXJyb3JGaWxlKGZuYW1lKSAmJiBudW1FcnJvcnNBbGxvd2VkKSB7CiAgICAgICBudW1FcnJvcnNBbGxvd2VkLS07Ci0gICAgICBmcmFnbWVudHMuaW5zZXJ0KHRoaXMtPkNUZXN0TGF1bmNoRGlyICsgIi8iICsgZm5hbWUpOworICAgICAgZnJhZ21lbnRzLmluc2VydCh0aGlzLT5DVGVzdExhdW5jaERpciArICcvJyArIGZuYW1lKTsKICAgICAgICsrdGhpcy0+VG90YWxFcnJvcnM7CiAgICAgfSBlbHNlIGlmICh0aGlzLT5Jc0xhdW5jaGVkV2FybmluZ0ZpbGUoZm5hbWUpICYmIG51bVdhcm5pbmdzQWxsb3dlZCkgewogICAgICAgbnVtV2FybmluZ3NBbGxvd2VkLS07Ci0gICAgICBmcmFnbWVudHMuaW5zZXJ0KHRoaXMtPkNUZXN0TGF1bmNoRGlyICsgIi8iICsgZm5hbWUpOworICAgICAgZnJhZ21lbnRzLmluc2VydCh0aGlzLT5DVGVzdExhdW5jaERpciArICcvJyArIGZuYW1lKTsKICAgICAgICsrdGhpcy0+VG90YWxXYXJuaW5nczsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q1ZTLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q1ZTLmN4eAppbmRleCA0NWVjMzkwLi4xMjA5ZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENWUy5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RDVlMuY3h4CkBAIC0xNTIsMTAgKzE1MiwxMiBAQAogICAgICAgICB0aGlzLT5GaW5pc2hSZXZpc2lvbigpOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAodGhpcy0+U2VjdGlvbiA9PSBTZWN0aW9uUmV2aXNpb25zKSB7CisgICAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICAgIGlmICghdGhpcy0+UmV2LkxvZy5lbXB0eSgpKSB7CiAgICAgICAgIC8vIENvbnRpbnVlIHRoZSBleGlzdGluZyBsb2cuCiAgICAgICAgIHRoaXMtPlJldi5Mb2cgKz0gdGhpcy0+TGluZTsKLSAgICAgICAgdGhpcy0+UmV2LkxvZyArPSAiXG4iOworICAgICAgICB0aGlzLT5SZXYuTG9nICs9ICdcbic7CiAgICAgICB9IGVsc2UgaWYgKHRoaXMtPlJldi5SZXYuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgICB0aGlzLT5SZWdleFJldmlzaW9uLmZpbmQodGhpcy0+TGluZSkpIHsKICAgICAgICAgdGhpcy0+UmV2LlJldiA9IHRoaXMtPlJlZ2V4UmV2aXNpb24ubWF0Y2goMSk7CkBAIC0xNjYsNyArMTY4LDcgQEAKICAgICAgIH0gZWxzZSBpZiAoIXRoaXMtPlJlZ2V4QnJhbmNoZXMuZmluZCh0aGlzLT5MaW5lKSkgewogICAgICAgICAvLyBTdGFydCB0aGUgbG9nLgogICAgICAgICB0aGlzLT5SZXYuTG9nICs9IHRoaXMtPkxpbmU7Ci0gICAgICAgIHRoaXMtPlJldi5Mb2cgKz0gIlxuIjsKKyAgICAgICAgdGhpcy0+UmV2LkxvZyArPSAnXG4nOwogICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdGhpcy0+U2VjdGlvbiAhPSBTZWN0aW9uRW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb25maWd1cmVDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q29uZmlndXJlQ29tbWFuZC5jeHgKaW5kZXggMzg1NDcxMC4uZjQyYzNmMSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb25maWd1cmVDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvbmZpZ3VyZUNvbW1hbmQuY3h4CkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0Q29uZmlndXJlSGFuZGxlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb3ZlcmFnZUNvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb3ZlcmFnZUNvbW1hbmQuY3h4CmluZGV4IGQ2ZTZiZTMuLjc0MzJkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q292ZXJhZ2VDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvdmVyYWdlQ29tbWFuZC5jeHgKQEAgLTQsOSArNCw5IEBACiAKICNpbmNsdWRlIDxzZXQ+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0Q292ZXJhZ2VIYW5kbGVyLmgiCiAKQEAgLTIyLDcgKzIyLDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBrZXl3b3JkcykKIHsKICAgdGhpcy0+TGFiZWxzTWVudGlvbmVkID0KLSAgICAhdGhpcy0+TGFiZWxzLmVtcHR5KCkgfHwgY21Db250YWlucyhrZXl3b3JkcywgIkxBQkVMUyIpOworICAgICF0aGlzLT5MYWJlbHMuZW1wdHkoKSB8fCBjbTo6Y29udGFpbnMoa2V5d29yZHMsICJMQUJFTFMiKTsKIH0KIAogY21DVGVzdEdlbmVyaWNIYW5kbGVyKiBjbUNUZXN0Q292ZXJhZ2VDb21tYW5kOjpJbml0aWFsaXplSGFuZGxlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvdmVyYWdlSGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvdmVyYWdlSGFuZGxlci5jeHgKaW5kZXggMmM4ZjExOS4uYjgzOWMxMCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXIuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q292ZXJhZ2VIYW5kbGVyLmN4eApAQCAtNjgwLDggKzY4MCw5IEBACiAvLwogI2lmZGVmIF9XSU4zMgogIyAgZGVmaW5lIGZuYyhzKSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UocykKKyMgIGRlZmluZSBmbmNfcHJlZml4KHMsIHQpIGZuYyhzLnN1YnN0cigwLCB0LnNpemUoKSkpID09IGZuYyh0KQogI2Vsc2UKLSMgIGRlZmluZSBmbmMocykgcworIyAgZGVmaW5lIGZuY19wcmVmaXgocywgdCkgY21IYXNQcmVmaXgocywgdCkKICNlbmRpZgogCiBib29sIElzRmlsZUluRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmRpcikKQEAgLTY4OSw4ICs2OTAsOCBAQAogICBzdGQ6OnN0cmluZyBmaWxlID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChpbmZpbGUpOwogICBzdGQ6OnN0cmluZyBkaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGluZGlyKTsKIAotICByZXR1cm4gZmlsZS5zaXplKCkgPiBkaXIuc2l6ZSgpICYmCi0gICAgZm5jKGZpbGUuc3Vic3RyKDAsIGRpci5zaXplKCkpKSA9PSBmbmMoZGlyKSAmJiBmaWxlW2Rpci5zaXplKCldID09ICcvJzsKKyAgcmV0dXJuIGZpbGUuc2l6ZSgpID4gZGlyLnNpemUoKSAmJiBmbmNfcHJlZml4KGZpbGUsIGRpcikgJiYKKyAgICBmaWxlW2Rpci5zaXplKCldID09ICcvJzsKIH0KIAogaW50IGNtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXI6OkhhbmRsZVBIUENvdmVyYWdlKApAQCAtMTIxNCw4ICsxMjE1LDYgQEAKICAgICAgICAgICB3aGlsZSAoY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0oaWZpbGUsIG5sKSkgewogICAgICAgICAgICAgY250Kys7CiAKLSAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBnY292IDMuMCBub24tY292ZXJhZ2UgbGluZXMKLQogICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSBsaW5lcwogICAgICAgICAgICAgaWYgKG5sLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjI2LDYgKzEyMjUsMTQgQEAKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIEhhbmRsZSBnY292IDMuMCBub24tY292ZXJhZ2UgbGluZXMKKyAgICAgICAgICAgIC8vIG5vbi1jb3ZlcmFnZSBsaW5lcyBzZWVtIHRvIGFsd2F5cyBzdGFydCB3aXRoIHNvbWV0aGluZyBub3QKKyAgICAgICAgICAgIC8vIGEgc3BhY2UgYW5kIGRvbid0IGhhdmUgYSAnOicgaW4gdGhlIDl0aCBwb3NpdGlvbgorICAgICAgICAgICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhY3R1YWxseSBhIHJvYnVzdCBtZXRyaWMKKyAgICAgICAgICAgIGlmIChubFswXSAhPSAnICcgJiYgbmxbOV0gIT0gJzonKSB7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBSZWFkIHRoZSBjb3ZlcmFnZSBjb3VudCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdjb3Ygb3V0cHV0CiAgICAgICAgICAgICAvLyBsaW5lCiAgICAgICAgICAgICBzdGQ6OnN0cmluZyBwcmVmaXggPSBubC5zdWJzdHIoMCwgMTIpOwpAQCAtMTcwOSwyOSArMTcxNiwyNiBAQAogCiAgICAgICAgIC8vIFJlYWQgdGhlIGNvdmVyYWdlIGNvdW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgVHJhY2UucHkgb3V0cHV0CiAgICAgICAgIC8vIGxpbmUKLSAgICAgICAgc3RkOjpzdHJpbmcgcHJlZml4ID0gbmwuc3Vic3RyKDAsIDYpOwotICAgICAgICBpZiAocHJlZml4WzVdICE9ICcgJyAmJiBwcmVmaXhbNV0gIT0gJzonKSB7Ci0gICAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2suIFdlIHNob3VsZCByZWFsbHkgZG8gc29tZXRoaW5nIG1vcmUgZWxhYm9yYXRlCi0gICAgICAgICAgcHJlZml4ID0gbmwuc3Vic3RyKDAsIDcpOwotICAgICAgICAgIGlmIChwcmVmaXhbNl0gIT0gJyAnICYmIHByZWZpeFs2XSAhPSAnOicpIHsKLSAgICAgICAgICAgIHByZWZpeCA9IG5sLnN1YnN0cigwLCA4KTsKLSAgICAgICAgICAgIGlmIChwcmVmaXhbN10gIT0gJyAnICYmIHByZWZpeFs3XSAhPSAnOicpIHsKLSAgICAgICAgICAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiQ3VycmVudGx5IHRoZSBsaW1pdCBpcyBtYXhpbXVtIGNvdmVyYWdlIG9mIDk5OTk5OSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zOworICAgICAgICBpbnQgY292ID0gMDsKKyAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2suIFdlIHNob3VsZCByZWFsbHkgZG8gc29tZXRoaW5nIG1vcmUgZWxhYm9yYXRlCisgICAgICAgIGZvciAocG9zID0gNTsgcG9zIDwgODsgcG9zKyspIHsKKyAgICAgICAgICBpZiAobmxbcG9zXSA9PSAnICcpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbGluZSBkb2VzIG5vdCBoYXZlICc6JyBzbyBubyBjb3ZlcmFnZSBoZXJlLiBUaGF0IHNhaWQsCisgICAgICAgICAgICAvLyBUcmFjZS5weSBkb2VzIG5vdCBoYW5kbGUgbm90IGNvdmVyZWQgbGluZXMgdmVyc3VzIGNvbW1lbnRzIGV0Yy4KKyAgICAgICAgICAgIC8vIFNvLCB0aGlzIHdpbGwgYmUgc2V0IHRvIDAuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKG5sW3Bvc10gPT0gJzonKSB7CisgICAgICAgICAgICBjb3YgPSBhdG9pKG5sLnN1YnN0cigwLCBwb3MgLSAxKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpbnQgY292ID0gYXRvaShwcmVmaXguY19zdHIoKSk7Ci0gICAgICAgIGlmIChwcmVmaXhbcHJlZml4LnNpemUoKSAtIDFdICE9ICc6JykgewotICAgICAgICAgIC8vIFRoaXMgbGluZSBkb2VzIG5vdCBoYXZlICc6JyBzbyBubyBjb3ZlcmFnZSBoZXJlLiBUaGF0IHNhaWQsCi0gICAgICAgICAgLy8gVHJhY2UucHkgZG9lcyBub3QgaGFuZGxlIG5vdCBjb3ZlcmVkIGxpbmVzIHZlcnN1cyBjb21tZW50cyBldGMuCi0gICAgICAgICAgLy8gU28sIHRoaXMgd2lsbCBiZSBzZXQgdG8gMC4KLSAgICAgICAgICBjb3YgPSAwOworICAgICAgICBpZiAocG9zID09IDgpIHsKKyAgICAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAorICAgICAgICAgICAgICAgICAgICAgIkN1cnJlbnRseSB0aGUgbGltaXQgaXMgbWF4aW11bSBjb3ZlcmFnZSBvZiA5OTk5OTkiCisgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CiAgICAgICAgIH0KLSAgICAgICAgY21DVGVzdE9wdGlvbmFsTG9nKAotICAgICAgICAgIHRoaXMtPkNUZXN0LCBERUJVRywKLSAgICAgICAgICAiUHJlZml4OiAiIDw8IHByZWZpeCA8PCAiIGNvdjogIiA8PCBjb3YgPDwgc3RkOjplbmRsLCB0aGlzLT5RdWlldCk7CiAgICAgICAgIC8vIFJlYWQgdGhlIGxpbmUgbnVtYmVyIHN0YXJ0aW5nIGF0IHRoZSAxMHRoIGNoYXJhY3RlciBvZiB0aGUgZ2NvdgogICAgICAgICAvLyBvdXRwdXQgbGluZQogICAgICAgICBsb25nIGxpbmVJZHggPSBjbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEN1cmwuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5oCmluZGV4IDljNWJhNjYuLmIwZDdmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5oCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9jdXJsLmgiCisjaW5jbHVkZSA8Y20zcC9jdXJsL2N1cmwuaD4KIAogY2xhc3MgY21DVGVzdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RHSVQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RHSVQuY3h4CmluZGV4IDNmM2MxMDcuLjU2OGIwOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0R0lULmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEdJVC5jeHgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3RpbWU+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKQEAgLTE5Myw3ICsxOTQsOCBAQAogICAgICAgaWYgKGxpbmUuZmluZCgiXHRub3QtZm9yLW1lcmdlXHQiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IGxpbmUuZmluZCgnXHQnKTsKICAgICAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICAgIHNoYTEgPSBsaW5lLnN1YnN0cigwLCBwb3MpOworICAgICAgICAgIHNoYTEgPSBzdGQ6Om1vdmUobGluZSk7CisgICAgICAgICAgc2hhMS5yZXNpemUocG9zKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0SGFuZGxlckNvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RIYW5kbGVyQ29tbWFuZC5jeHgKaW5kZXggYjEwMzRjOS4uYTc1NTYzMiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RIYW5kbGVyQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RIYW5kbGVyQ29tbWFuZC5jeHgKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxzc3RyZWFtPgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0R2VuZXJpY0hhbmRsZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tDb21tYW5kLmN4eAppbmRleCAzOWRlYzZkLi5kMGUyOTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0NvbW1hbmQuY3h4CkBAIC0yLDcgKzIsNyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21DVGVzdE1lbUNoZWNrQ29tbWFuZC5oIgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5jeHgKaW5kZXggYzFlY2FmMS4uZDI3NzJhNyAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXIuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmN4eApAQCAtMTAsMTEgKzEwLDEyIEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0yOTcsOSArMjk4LDYgQEAKIAogICB0aGlzLT5DVGVzdC0+UG9wdWxhdGVDdXN0b21WZWN0b3IobWYsICJDVEVTVF9DVVNUT01fTUVNQ0hFQ0tfSUdOT1JFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkN1c3RvbVRlc3RzSWdub3JlKTsKLSAgc3RkOjpzdHJpbmcgY21ha2UgPSBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKTsKLSAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiQ01ha2VDb21tYW5kIiwgY21ha2UuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5RdWlldCk7CiB9CiAKIGludCBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpHZXREZWZlY3RDb3VudCgpCkBAIC0zMjgsNiArMzI2LDkgQEAKICAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkJPVU5EU19DSEVDS0VSOgogICAgICAgeG1sLkF0dHJpYnV0ZSgiQ2hlY2tlciIsICJCb3VuZHNDaGVja2VyIik7CiAgICAgICBicmVhazsKKyAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkNVREFfTUVNQ0hFQ0s6CisgICAgICB4bWwuQXR0cmlidXRlKCJDaGVja2VyIiwgIkN1ZGFNZW1jaGVjayIpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpBRERSRVNTX1NBTklUSVpFUjoKICAgICAgIHhtbC5BdHRyaWJ1dGUoIkNoZWNrZXIiLCAiQWRkcmVzc1Nhbml0aXplciIpOwogICAgICAgYnJlYWs7CkBAIC00NjcsNiArNDY4LDggQEAKICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6UFVSSUZZOwogICAgIH0gZWxzZSBpZiAodGVzdGVyTmFtZS5maW5kKCJCQyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkJPVU5EU19DSEVDS0VSOworICAgIH0gZWxzZSBpZiAodGVzdGVyTmFtZS5maW5kKCJjdWRhLW1lbWNoZWNrIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Q1VEQV9NRU1DSEVDSzsKICAgICB9IGVsc2UgewogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTktOT1dOOwogICAgIH0KQEAgLTQ4NywzNCArNDkwLDM5IEBACiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0KICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJvdW5kc0NoZWNrZXJDb21tYW5kIik7CiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpCT1VORFNfQ0hFQ0tFUjsKKyAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKAorICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQ3VkYU1lbWNoZWNrQ29tbWFuZCIpKSkgeworICAgIHRoaXMtPk1lbW9yeVRlc3RlciA9CisgICAgICB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDdWRhTWVtY2hlY2tDb21tYW5kIik7CisgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpDVURBX01FTUNIRUNLOwogICB9CiAgIGlmICh0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJNZW1vcnlDaGVja1R5cGUiKSA9PQogICAgICAgIkFkZHJlc3NTYW5pdGl6ZXIiKSB7Ci0gICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQ01ha2VDb21tYW5kIik7CisgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCk7CiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpBRERSRVNTX1NBTklUSVpFUjsKICAgICB0aGlzLT5Mb2dXaXRoUElEID0gdHJ1ZTsgLy8gZXZlbiBpZiB3ZSBnaXZlIHRoZSBsb2cgZmlsZSB0aGUgcGlkIGlzIGFkZGVkCiAgIH0KICAgaWYgKHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIk1lbW9yeUNoZWNrVHlwZSIpID09CiAgICAgICAiTGVha1Nhbml0aXplciIpIHsKLSAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDTWFrZUNvbW1hbmQiKTsKKyAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKTsKICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkxFQUtfU0FOSVRJWkVSOwogICAgIHRoaXMtPkxvZ1dpdGhQSUQgPSB0cnVlOyAvLyBldmVuIGlmIHdlIGdpdmUgdGhlIGxvZyBmaWxlIHRoZSBwaWQgaXMgYWRkZWQKICAgfQogICBpZiAodGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tUeXBlIikgPT0KICAgICAgICJUaHJlYWRTYW5pdGl6ZXIiKSB7Ci0gICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQ01ha2VDb21tYW5kIik7CisgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCk7CiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpUSFJFQURfU0FOSVRJWkVSOwogICAgIHRoaXMtPkxvZ1dpdGhQSUQgPSB0cnVlOyAvLyBldmVuIGlmIHdlIGdpdmUgdGhlIGxvZyBmaWxlIHRoZSBwaWQgaXMgYWRkZWQKICAgfQogICBpZiAodGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tUeXBlIikgPT0KICAgICAgICJNZW1vcnlTYW5pdGl6ZXIiKSB7Ci0gICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQ01ha2VDb21tYW5kIik7CisgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCk7CiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpNRU1PUllfU0FOSVRJWkVSOwogICAgIHRoaXMtPkxvZ1dpdGhQSUQgPSB0cnVlOyAvLyBldmVuIGlmIHdlIGdpdmUgdGhlIGxvZyBmaWxlIHRoZSBwaWQgaXMgYWRkZWQKICAgfQogICBpZiAodGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tUeXBlIikgPT0KICAgICAgICJVbmRlZmluZWRCZWhhdmlvclNhbml0aXplciIpIHsKLSAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDTWFrZUNvbW1hbmQiKTsKKyAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKTsKICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlVCX1NBTklUSVpFUjsKICAgICB0aGlzLT5Mb2dXaXRoUElEID0gdHJ1ZTsgLy8gZXZlbiBpZiB3ZSBnaXZlIHRoZSBsb2cgZmlsZSB0aGUgcGlkIGlzIGFkZGVkCiAgIH0KQEAgLTUzMCw2ICs1MzgsOCBAQAogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpWQUxHUklORDsKICAgICB9IGVsc2UgaWYgKGNoZWNrVHlwZSA9PSAiRHJNZW1vcnkiKSB7CiAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkRSTUVNT1JZOworICAgIH0gZWxzZSBpZiAoY2hlY2tUeXBlID09ICJDdWRhTWVtY2hlY2siKSB7CisgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkNVREFfTUVNQ0hFQ0s7CiAgICAgfQogICB9CiAgIGlmICh0aGlzLT5NZW1vcnlUZXN0ZXIuZW1wdHkoKSkgewpAQCAtNTU1LDYgKzU2NSwxMCBAQAogICAgICAgICAgICAgICAgIC5lbXB0eSgpKSB7CiAgICAgbWVtb3J5VGVzdGVyT3B0aW9ucyA9CiAgICAgICB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJEck1lbW9yeUNvbW1hbmRPcHRpb25zIik7CisgIH0gZWxzZSBpZiAoIXRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkN1ZGFNZW1jaGVja0NvbW1hbmRPcHRpb25zIikKKyAgICAgICAgICAgICAgICAuZW1wdHkoKSkgeworICAgIG1lbW9yeVRlc3Rlck9wdGlvbnMgPQorICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQ3VkYU1lbWNoZWNrQ29tbWFuZE9wdGlvbnMiKTsKICAgfQogICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zID0KICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZUFyZ3VtZW50cyhtZW1vcnlUZXN0ZXJPcHRpb25zKTsKQEAgLTU5NCwxMSArNjA4LDExIEBACiAgICAgICBzdGQ6OnN0cmluZyB0ZW1wRHJNZW1vcnlEaXIgPQogICAgICAgICB0aGlzLT5DVGVzdC0+R2V0QmluYXJ5RGlyKCkgKyAiL1Rlc3RpbmcvVGVtcG9yYXJ5L0RyTWVtb3J5IjsKIAotICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMsICItcXVpZXQiKSkgeworICAgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucywgIi1xdWlldCIpKSB7CiAgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW1wbGFjZV9iYWNrKCItcXVpZXQiKTsKICAgICAgIH0KIAotICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMsICItYmF0Y2giKSkgeworICAgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucywgIi1iYXRjaCIpKSB7CiAgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW1wbGFjZV9iYWNrKCItYmF0Y2giKTsKICAgICAgIH0KIApAQCAtNjg4LDYgKzcwMiwxOCBAQAogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi9NIik7CiAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpDVURBX01FTUNIRUNLOiB7CisgICAgICAvLyBjdWRhLW1lbWNoZWNrIHNlcGFyYXRlcyBmbGFncyBmcm9tIGFyZ3VtZW50cyBieSBzcGFjZXMKKyAgICAgIGlmICh0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcHR5KCkpIHsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi0tdG9vbCIpOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcGxhY2VfYmFjaygibWVtY2hlY2siKTsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi0tbGVhay1jaGVjayIpOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcGxhY2VfYmFjaygiZnVsbCIpOworICAgICAgfQorICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyRHluYW1pY09wdGlvbnMuZW1wbGFjZV9iYWNrKCItLWxvZy1maWxlIik7CisgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJEeW5hbWljT3B0aW9ucy5wdXNoX2JhY2sodGhpcy0+TWVtb3J5VGVzdGVyT3V0cHV0RmlsZSk7CisgICAgICBicmVhazsKKyAgICB9CiAgICAgLy8gdGhlc2UgYXJlIGFsbW9zdCB0aGUgc2FtZSBidXQgdGhlIGVudiB2YXIgdXNlZCBpcyBkaWZmZXJlbnQKICAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkFERFJFU1NfU0FOSVRJWkVSOgogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6TEVBS19TQU5JVElaRVI6CkBAIC03NzMsNiArNzk5LDggQEAKICAgICAgIHJldHVybiB0aGlzLT5Qcm9jZXNzTWVtQ2hlY2tTYW5pdGl6ZXJPdXRwdXQoc3RyLCBsb2csIHJlc3VsdHMpOwogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Qk9VTkRTX0NIRUNLRVI6CiAgICAgICByZXR1cm4gdGhpcy0+UHJvY2Vzc01lbUNoZWNrQm91bmRzQ2hlY2tlck91dHB1dChzdHIsIGxvZywgcmVzdWx0cyk7CisgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpDVURBX01FTUNIRUNLOgorICAgICAgcmV0dXJuIHRoaXMtPlByb2Nlc3NNZW1DaGVja0N1ZGFPdXRwdXQoc3RyLCBsb2csIHJlc3VsdHMpOwogICAgIGRlZmF1bHQ6CiAgICAgICBsb2cuYXBwZW5kKCJcbk1lbW9yeSBjaGVja2luZyBzdHlsZSB1c2VkIHdhczogIik7CiAgICAgICBsb2cuYXBwZW5kKCJOb25lIHRoYXQgSSBrbm93Iik7CkBAIC05NTcsMzUgKzk4NSwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxncmluZCAgbGluZSAiIDw8IGxpbmVzW2NjXSA8PCBzdGQ6OmVuZGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwogICAgICAgaW50IGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpOT19NRU1PUllfRkFVTFQ7Ci0gICAgICBpZiAodmdGSU0uZmluZChsaW5lc1tjY10pKSB7CisgICAgICBhdXRvJiBsaW5lID0gbGluZXNbY2NdOworICAgICAgaWYgKHZnRklNLmZpbmQobGluZSkpIHsKICAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkZJTTsKLSAgICAgIH0gZWxzZSBpZiAodmdGTU0uZmluZChsaW5lc1tjY10pKSB7CisgICAgICB9IGVsc2UgaWYgKHZnRk1NLmZpbmQobGluZSkpIHsKICAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkZNTTsKLSAgICAgIH0gZWxzZSBpZiAodmdNTEsxLmZpbmQobGluZXNbY2NdKSkgeworICAgICAgfSBlbHNlIGlmICh2Z01MSzEuZmluZChsaW5lKSB8fCB2Z01MSzIuZmluZChsaW5lKSkgewogICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6TUxLOwotICAgICAgfSBlbHNlIGlmICh2Z01MSzIuZmluZChsaW5lc1tjY10pKSB7Ci0gICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpNTEs7Ci0gICAgICB9IGVsc2UgaWYgKHZnUEFSLmZpbmQobGluZXNbY2NdKSkgeworICAgICAgfSBlbHNlIGlmICh2Z1BBUi5maW5kKGxpbmUpKSB7CiAgICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpQQVI7Ci0gICAgICB9IGVsc2UgaWYgKHZnTVBLMS5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIH0gZWxzZSBpZiAodmdNUEsxLmZpbmQobGluZSkgfHwgdmdNUEsyLmZpbmQobGluZSkpIHsKICAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6Ok1QSzsKLSAgICAgIH0gZWxzZSBpZiAodmdNUEsyLmZpbmQobGluZXNbY2NdKSkgewotICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6TVBLOwotICAgICAgfSBlbHNlIGlmICh2Z1VNQy5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIH0gZWxzZSBpZiAodmdVTUMuZmluZChsaW5lKSkgewogICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VU1DOwotICAgICAgfSBlbHNlIGlmICh2Z1VNUjEuZmluZChsaW5lc1tjY10pKSB7CisgICAgICB9IGVsc2UgaWYgKHZnVU1SMS5maW5kKGxpbmUpIHx8IHZnVU1SMi5maW5kKGxpbmUpIHx8IHZnVU1SMy5maW5kKGxpbmUpIHx8CisgICAgICAgICAgICAgICAgIHZnVU1SNC5maW5kKGxpbmUpIHx8IHZnVU1SNS5maW5kKGxpbmUpKSB7CiAgICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTVI7Ci0gICAgICB9IGVsc2UgaWYgKHZnVU1SMi5maW5kKGxpbmVzW2NjXSkpIHsKLSAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlVNUjsKLSAgICAgIH0gZWxzZSBpZiAodmdVTVIzLmZpbmQobGluZXNbY2NdKSkgewotICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VU1SOwotICAgICAgfSBlbHNlIGlmICh2Z1VNUjQuZmluZChsaW5lc1tjY10pKSB7Ci0gICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTVI7Ci0gICAgICB9IGVsc2UgaWYgKHZnVU1SNS5maW5kKGxpbmVzW2NjXSkpIHsKLSAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlVNUjsKLSAgICAgIH0gZWxzZSBpZiAodmdJUFcuZmluZChsaW5lc1tjY10pKSB7CisgICAgICB9IGVsc2UgaWYgKHZnSVBXLmZpbmQobGluZSkpIHsKICAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OklQVzsKLSAgICAgIH0gZWxzZSBpZiAodmdBQlIuZmluZChsaW5lc1tjY10pKSB7CisgICAgICB9IGVsc2UgaWYgKHZnQUJSLmZpbmQobGluZSkpIHsKICAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkFCUjsKICAgICAgIH0KIApAQCAtMTA0OSwxMyArMTA2Nyw5IEBACiAgICAgb3N0ciA8PCBsIDw8IHN0ZDo6ZW5kbDsKICAgICBpZiAoZHJNZW1vcnlFcnJvci5maW5kKGwpKSB7CiAgICAgICBkZWZlY3RzKys7Ci0gICAgICBpZiAodW5hZGRyZXNzYWJsZUFjY2Vzcy5maW5kKGwpKSB7CisgICAgICBpZiAodW5hZGRyZXNzYWJsZUFjY2Vzcy5maW5kKGwpIHx8IHVuaW5pdGlhbGl6ZWRSZWFkLmZpbmQobCkpIHsKICAgICAgICAgcmVzdWx0c1tjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTVJdKys7Ci0gICAgICB9IGVsc2UgaWYgKHVuaW5pdGlhbGl6ZWRSZWFkLmZpbmQobCkpIHsKLSAgICAgICAgcmVzdWx0c1tjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTVJdKys7Ci0gICAgICB9IGVsc2UgaWYgKGxlYWsuZmluZChsKSkgewotICAgICAgICByZXN1bHRzW2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6Ok1MS10rKzsKLSAgICAgIH0gZWxzZSBpZiAoaGFuZGxlTGVhay5maW5kKGwpKSB7CisgICAgICB9IGVsc2UgaWYgKGxlYWsuZmluZChsKSB8fCBoYW5kbGVMZWFrLmZpbmQobCkpIHsKICAgICAgICAgcmVzdWx0c1tjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpNTEtdKys7CiAgICAgICB9IGVsc2UgaWYgKGludmFsaWRIZWFwQXJndW1lbnQuZmluZChsKSkgewogICAgICAgICByZXN1bHRzW2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkZNTV0rKzsKQEAgLTExMTksNiArMTEzMywxMTggQEAKICAgcmV0dXJuIGRlZmVjdHMgPT0gMDsKIH0KIAorYm9vbCBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpQcm9jZXNzTWVtQ2hlY2tDdWRhT3V0cHV0KAorICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLCBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7CisgIGNtc3lzOjpTeXN0ZW1Ub29sczo6U3BsaXQoc3RyLCBsaW5lcyk7CisgIGJvb2wgdW5saW1pdGVkT3V0cHV0ID0gZmFsc2U7CisgIGlmIChzdHIuZmluZCgiQ1RFU1RfRlVMTF9PVVRQVVQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fAorICAgICAgdGhpcy0+Q3VzdG9tTWF4aW11bUZhaWxlZFRlc3RPdXRwdXRTaXplID09IDApIHsKKyAgICB1bmxpbWl0ZWRPdXRwdXQgPSB0cnVlOworICB9CisKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBjYzsKKworICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3N0cjsKKyAgbG9nLmNsZWFyKCk7CisKKyAgaW50IGRlZmVjdHMgPSAwOworCisgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBtZW1jaGVja0xpbmUoIl49PT09PT09PSIpOworCisgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBsZWFrRXhwcigiPT0gTGVha2VkIFswLTksXSsgYnl0ZXMgYXQiKTsKKworICAvLyBsaXN0IG9mIG1hdGNoZXJzIGZvciBvdXRwdXQgbWVzc2FnZXMgdGhhdCBjb250YWluIHZhcmlhYmxlIGNvbnRlbnQKKyAgLy8gKGFkZHJlc3Nlcywgc2l6ZXMsIC4uLikgb3IgY2FuIGJlIHNob3J0ZW5lZCBpbiBnZW5lcmFsLiB0aGUgZmlyc3QgbWF0Y2ggaXMKKyAgLy8gdXNlZCBhcyBhIGVycm9yIG5hbWUuCisgIHN0ZDo6dmVjdG9yPGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbj4gbWF0Y2hlcnN7CisgICAgLy8gQVBJIGVycm9ycworICAgICI9PSBNYWxsb2MvRnJlZSBlcnJvciBlbmNvdW50ZXJlZDogKC4qKSIsCisgICAgIj09IFByb2dyYW0gaGl0IGVycm9yIChbXiBdKikuKiBvbiBDVURBIEFQSSBjYWxsIHRvIiwKKyAgICAiPT0gUHJvZ3JhbSBoaXQgKFteIF0qKS4qIG9uIENVREEgQVBJIGNhbGwgdG8iLAorICAgIC8vIG1lbWNoZWNrCisgICAgIj09IChJbnZhbGlkIC4qKSBvZiBzaXplIFswLTksXSsiLAorICAgIC8vIHJhY2VjaGVjaworICAgICI9PSAuKiAoUG90ZW50aWFsIC4qIGhhemFyZCBkZXRlY3RlZCkiLCAiPT0gLiogKFJhY2UgcmVwb3J0ZWQpIiwKKyAgICAvLyBzeW5jY2hlY2sKKyAgICAiPT0gKEJhcnJpZXIgZXJyb3IpIiwKKyAgICAvLyBpbml0Y2hlY2sKKyAgICAiPT0gKFVuaW5pdGlhbGl6ZWQgLiogbWVtb3J5IHJlYWQpIiwgIj09IChVbnVzZWQgbWVtb3J5KSIsCisgICAgLy8gZ2VuZXJpYyBlcnJvcjogaWdub3JlIEVSUk9SIFNVTU1BUlksIENVREEtTUVNQ0hFQ0sgYW5kIG90aGVycworICAgICI9PSAoW0EtWl1bYS16XS4qKSIKKyAgfTsKKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZzo6c2l6ZV90eXBlPiBub25NZW1jaGVja091dHB1dDsKKyAgYXV0byBzdHRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAgY21DVGVzdE9wdGlvbmFsTG9nKHRoaXMtPkNUZXN0LCBERUJVRywKKyAgICAgICAgICAgICAgICAgICAgICJTdGFydCB0ZXN0OiAiIDw8IGxpbmVzLnNpemUoKSA8PCBzdGQ6OmVuZGwsIHRoaXMtPlF1aWV0KTsKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSB0b3RhbE91dHB1dFNpemUgPSAwOworICBmb3IgKGNjID0gMDsgY2MgPCBsaW5lcy5zaXplKCk7IGNjKyspIHsKKyAgICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIERFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBsaW5lICIgPDwgbGluZXNbY2NdIDw8IHN0ZDo6ZW5kbCwgdGhpcy0+UXVpZXQpOworCisgICAgaWYgKG1lbWNoZWNrTGluZS5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgREVCVUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgImN1ZGEtbWVtY2hlY2sgbGluZSAiIDw8IGxpbmVzW2NjXSA8PCBzdGQ6OmVuZGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOworICAgICAgaW50IGZhaWx1cmUgPSAtMTsKKyAgICAgIGF1dG8mIGxpbmUgPSBsaW5lc1tjY107CisgICAgICBpZiAobGVha0V4cHIuZmluZChsaW5lKSkgeworICAgICAgICBmYWlsdXJlID0gc3RhdGljX2Nhc3Q8aW50Pih0aGlzLT5GaW5kT3JBZGRXYXJuaW5nKCJNZW1vcnkgbGVhayIpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0byYgbWF0Y2hlciA6IG1hdGNoZXJzKSB7CisgICAgICAgICAgaWYgKG1hdGNoZXIuZmluZChsaW5lKSkgeworICAgICAgICAgICAgZmFpbHVyZSA9CisgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4odGhpcy0+RmluZE9yQWRkV2FybmluZyhtYXRjaGVyLm1hdGNoKDEpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGZhaWx1cmUgPj0gMCkgeworICAgICAgICBvc3RyIDw8ICI8Yj4iIDw8IHRoaXMtPlJlc3VsdFN0cmluZ3NbZmFpbHVyZV0gPDwgIjwvYj4gIjsKKyAgICAgICAgaWYgKHJlc3VsdHMuZW1wdHkoKSB8fCB1bnNpZ25lZChmYWlsdXJlKSA+IHJlc3VsdHMuc2l6ZSgpIC0gMSkgeworICAgICAgICAgIHJlc3VsdHMucHVzaF9iYWNrKDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJlc3VsdHNbZmFpbHVyZV0rKzsKKyAgICAgICAgfQorICAgICAgICBkZWZlY3RzKys7CisgICAgICB9CisgICAgICB0b3RhbE91dHB1dFNpemUgKz0gbGluZXNbY2NdLnNpemUoKTsKKyAgICAgIG9zdHIgPDwgbGluZXNbY2NdIDw8IHN0ZDo6ZW5kbDsKKyAgICB9IGVsc2UgeworICAgICAgbm9uTWVtY2hlY2tPdXRwdXQucHVzaF9iYWNrKGNjKTsKKyAgICB9CisgIH0KKyAgLy8gTm93IHB1dCBhbGwgYWxsIHRoZSBub24gY3VkYS1tZW1jaGVjayBvdXRwdXQgaW50byB0aGUgdGVzdCBvdXRwdXQKKyAgLy8gVGhpcyBzaG91bGQgYmUgbGFzdCBpbiBjYXNlIGl0IGdldHMgdHJ1bmNhdGVkIGJ5IHRoZSBvdXRwdXQKKyAgLy8gbGltaXRpbmcgY29kZQorICBmb3IgKHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgaSA6IG5vbk1lbWNoZWNrT3V0cHV0KSB7CisgICAgdG90YWxPdXRwdXRTaXplICs9IGxpbmVzW2ldLnNpemUoKTsKKyAgICBvc3RyIDw8IGxpbmVzW2ldIDw8IHN0ZDo6ZW5kbDsKKyAgICBpZiAoIXVubGltaXRlZE91dHB1dCAmJgorICAgICAgICB0b3RhbE91dHB1dFNpemUgPgorICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4odGhpcy0+Q3VzdG9tTWF4aW11bUZhaWxlZFRlc3RPdXRwdXRTaXplKSkgeworICAgICAgb3N0ciA8PCAiLi4uLlxuIjsKKyAgICAgIG9zdHIgPDwgIlRlc3QgT3V0cHV0IGZvciB0aGlzIHRlc3QgaGFzIGJlZW4gdHJ1bmNhdGVkIHNlZSB0ZXN0aW5nIgorICAgICAgICAgICAgICAiIG1hY2hpbmUgbG9ncyBmb3IgZnVsbCBvdXRwdXQsXG4iOworICAgICAgb3N0ciA8PCAib3IgcHV0IENURVNUX0ZVTExfT1VUUFVUIGluIHRoZSBvdXRwdXQgb2YgIgorICAgICAgICAgICAgICAidGhpcyB0ZXN0IHByb2dyYW0uXG4iOworICAgICAgYnJlYWs7IC8vIHN0b3AgdGhlIGNvcHkgb2Ygb3V0cHV0IGlmIHdlIGFyZSBmdWxsCisgICAgfQorICB9CisgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgREVCVUcsCisgICAgICAgICAgICAgICAgICAgICAiRW5kIHRlc3QgKGVsYXBzZWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgY21EdXJhdGlvblRvPHVuc2lnbmVkIGludD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBzdHRpbWUpCisgICAgICAgICAgICAgICAgICAgICAgIDw8ICJzKSIgPDwgc3RkOjplbmRsLAorICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOworICBsb2cgPSBvc3RyLnN0cigpOworICB0aGlzLT5EZWZlY3RDb3VudCArPSBkZWZlY3RzOworICByZXR1cm4gZGVmZWN0cyA9PSAwOworfQorCiAvLyBQb3N0UHJvY2Vzc1Rlc3QgbWVtY2hlY2sgcmVzdWx0cwogdm9pZCBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpQb3N0UHJvY2Vzc1Rlc3QoY21DVGVzdFRlc3RSZXN1bHQmIHJlcywgaW50IHRlc3QpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXIuaAppbmRleCA1MjY2N2Y4Li42M2FiNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgICBEUk1FTU9SWSwKICAgICBCT1VORFNfQ0hFQ0tFUiwKICAgICAvLyBjaGVja2VycyBhZnRlciBoZXJlIGRvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIGVycm9yIGxpc3QKKyAgICBDVURBX01FTUNIRUNLLAogICAgIEFERFJFU1NfU0FOSVRJWkVSLAogICAgIExFQUtfU0FOSVRJWkVSLAogICAgIFRIUkVBRF9TQU5JVElaRVIsCkBAIC0xMzcsNiArMTM4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKTsKICAgYm9vbCBQcm9jZXNzTWVtQ2hlY2tQdXJpZnlPdXRwdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgc3RkOjpzdHJpbmcmIGxvZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiYgcmVzdWx0cyk7CisgIGJvb2wgUHJvY2Vzc01lbUNoZWNrQ3VkYU91dHB1dChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiYgcmVzdWx0cyk7CiAgIGJvb2wgUHJvY2Vzc01lbUNoZWNrU2FuaXRpemVyT3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nJiBsb2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpOwogICBib29sIFByb2Nlc3NNZW1DaGVja0JvdW5kc0NoZWNrZXJPdXRwdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuY3h4CmluZGV4IDIxOTI4NDMuLmEwOGNiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmN4eApAQCAtNiwzMCArNiwyOSBAQAogI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW9tYW5pcD4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0YWNrPgogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3dyaXRlci5oPgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KKwogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1N5c3RlbUluZm9ybWF0aW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3dyaXRlci5oIgotI2luY2x1ZGUgImNtX3V2LmgiCi0KICNpbmNsdWRlICJjbUFmZmluaXR5LmgiCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RCaW5QYWNrZXIuaCIKICNpbmNsdWRlICJjbUNUZXN0UnVuVGVzdC5oIgpAQCAtMTM4LDcgKzEzNyw3IEBACiAgIHV2X3J1bigmdGhpcy0+TG9vcCwgVVZfUlVOX0RFRkFVTFQpOwogICB1dl9sb29wX2Nsb3NlKCZ0aGlzLT5Mb29wKTsKIAotICBpZiAoIXRoaXMtPlN0b3BUaW1lUGFzc2VkKSB7CisgIGlmICghdGhpcy0+U3RvcFRpbWVQYXNzZWQgJiYgIXRoaXMtPkNoZWNrU3RvcE9uRmFpbHVyZSgpKSB7CiAgICAgYXNzZXJ0KHRoaXMtPkNvbXBsZXRlZCA9PSB0aGlzLT5Ub3RhbCk7CiAgICAgYXNzZXJ0KHRoaXMtPlRlc3RzLmVtcHR5KCkpOwogICB9CkBAIC0xNzIsNyArMTcxLDggQEAKICAgdGhpcy0+RXJhc2VUZXN0KHRlc3QpOwogICB0aGlzLT5SdW5uaW5nQ291bnQgKz0gR2V0UHJvY2Vzc29yc1VzZWQodGVzdCk7CiAKLSAgY21DVGVzdFJ1blRlc3QqIHRlc3RSdW4gPSBuZXcgY21DVGVzdFJ1blRlc3QoKnRoaXMpOworICBhdXRvIHRlc3RSdW4gPSBjbTo6bWFrZV91bmlxdWU8Y21DVGVzdFJ1blRlc3Q+KCp0aGlzKTsKKwogICBpZiAodGhpcy0+UmVwZWF0TW9kZSAhPSBjbUNUZXN0OjpSZXBlYXQ6Ok5ldmVyKSB7CiAgICAgdGVzdFJ1bi0+U2V0UmVwZWF0TW9kZSh0aGlzLT5SZXBlYXRNb2RlKTsKICAgICB0ZXN0UnVuLT5TZXROdW1iZXJPZlJ1bnModGhpcy0+UmVwZWF0Q291bnQpOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgIC8vIEZpbmQgYW55IGZhaWxlZCBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgdGVzdC4gV2UgYXNzdW1lIHRoZSBtb3JlIGNvbW1vbgogICAvLyBzY2VuYXJpbyBoYXMgbm8gZmFpbGVkIHRlc3RzLCBzbyBtYWtlIGl0IHRoZSBvdXRlciBsb29wLgogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmIDogKnRoaXMtPkZhaWxlZCkgewotICAgIGlmIChjbUNvbnRhaW5zKHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPlJlcXVpcmVTdWNjZXNzRGVwZW5kcywgZikpIHsKKyAgICBpZiAoY206OmNvbnRhaW5zKHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPlJlcXVpcmVTdWNjZXNzRGVwZW5kcywgZikpIHsKICAgICAgIHRlc3RSdW4tPkFkZEZhaWxlZERlcGVuZGVuY3koZik7CiAgICAgfQogICB9CkBAIC0yMjksMjggKzIyOSwyNSBAQAogICAgICAgZSA8PCAiXG4iOwogICAgIH0KICAgICBlIDw8ICJSZXNvdXJjZSBzcGVjIGZpbGU6XG5cbiAgIiA8PCB0aGlzLT5UZXN0SGFuZGxlci0+UmVzb3VyY2VTcGVjRmlsZTsKLSAgICB0ZXN0UnVuLT5TdGFydEZhaWx1cmUoZS5zdHIoKSwgIkluc3VmZmljaWVudCByZXNvdXJjZXMiKTsKLSAgICB0aGlzLT5GaW5pc2hUZXN0UHJvY2Vzcyh0ZXN0UnVuLCBmYWxzZSk7CisgICAgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0RmFpbHVyZShzdGQ6Om1vdmUodGVzdFJ1biksIGUuc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5zdWZmaWNpZW50IHJlc291cmNlcyIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIGNtV29ya2luZ0RpcmVjdG9yeSB3b3JrZGlyKHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPkRpcmVjdG9yeSk7CiAgIGlmICh3b3JrZGlyLkZhaWxlZCgpKSB7Ci0gICAgdGVzdFJ1bi0+U3RhcnRGYWlsdXJlKCJGYWlsZWQgdG8gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5IHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPkRpcmVjdG9yeSArICIgOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmVycm9yKHdvcmtkaXIuR2V0TGFzdFJlc3VsdCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkiKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAodGVzdFJ1bi0+U3RhcnRUZXN0KHRoaXMtPkNvbXBsZXRlZCwgdGhpcy0+VG90YWwpKSB7Ci0gICAgICAvLyBPd25lcnNoaXAgb2YgJ3Rlc3RSdW4nIGhhcyBtb3ZlZCB0byBhbm90aGVyIHN0cnVjdHVyZS4KLSAgICAgIC8vIFdoZW4gdGhlIHRlc3QgZmluaXNoZXMsIEZpbmlzaFRlc3RQcm9jZXNzIHdpbGwgYmUgY2FsbGVkLgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEZhaWx1cmUoc3RkOjptb3ZlKHRlc3RSdW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkgdG8gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPkRpcmVjdG9yeSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJlcnJvcih3b3JrZGlyLkdldExhc3RSZXN1bHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIpOworICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIC8vIFBhc3Mgb3duZXJzaGlwIG9mICd0ZXN0UnVuJy4KLSAgdGhpcy0+RmluaXNoVGVzdFByb2Nlc3ModGVzdFJ1biwgZmFsc2UpOwotICByZXR1cm4gZmFsc2U7CisgIC8vIE93bmVyc2hpcCBvZiAndGVzdFJ1bicgaGFzIG1vdmVkIHRvIGFub3RoZXIgc3RydWN0dXJlLgorICAvLyBXaGVuIHRoZSB0ZXN0IGZpbmlzaGVzLCBGaW5pc2hUZXN0UHJvY2VzcyB3aWxsIGJlIGNhbGxlZC4KKyAgcmV0dXJuIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydFRlc3Qoc3RkOjptb3ZlKHRlc3RSdW4pLCB0aGlzLT5Db21wbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlRvdGFsKTsKIH0KIAogYm9vbCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6QWxsb2NhdGVSZXNvdXJjZXMoaW50IGluZGV4KQpAQCAtMzcwLDYgKzM2NywxMSBAQAogICB9CiB9CiAKK2Jvb2wgY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXI6OkNoZWNrU3RvcE9uRmFpbHVyZSgpCit7CisgIHJldHVybiB0aGlzLT5DVGVzdC0+R2V0U3RvcE9uRmFpbHVyZSgpOworfQorCiBib29sIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyOjpDaGVja1N0b3BUaW1lUGFzc2VkKCkKIHsKICAgaWYgKCF0aGlzLT5TdG9wVGltZVBhc3NlZCkgewpAQCAtNDQ3LDcgKzQ0OSw3IEBACiB7CiAgIC8vIENoZWNrIGZvciBsb2NrZWQgcmVzb3VyY2VzCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiB0aGlzLT5Qcm9wZXJ0aWVzW3Rlc3RdLT5Mb2NrZWRSZXNvdXJjZXMpIHsKLSAgICBpZiAoY21Db250YWlucyh0aGlzLT5Mb2NrZWRSZXNvdXJjZXMsIGkpKSB7CisgICAgaWYgKGNtOjpjb250YWlucyh0aGlzLT5Mb2NrZWRSZXNvdXJjZXMsIGkpKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICB9CkBAIC00ODYsNiArNDg4LDEwIEBACiAgICAgcmV0dXJuOwogICB9CiAKKyAgaWYgKHRoaXMtPkNoZWNrU3RvcE9uRmFpbHVyZSgpICYmICF0aGlzLT5GYWlsZWQtPmVtcHR5KCkpIHsKKyAgICByZXR1cm47CisgIH0KKwogICBzaXplX3QgbnVtVG9TdGFydCA9IDA7CiAKICAgaWYgKHRoaXMtPlJ1bm5pbmdDb3VudCA8IHRoaXMtPlBhcmFsbGVsTGV2ZWwpIHsKQEAgLTU0MCw3ICs1NDYsOCBAQAogICAgIGlmICh0aGlzLT5TZXJpYWxUZXN0UnVubmluZykgewogICAgICAgYnJlYWs7CiAgICAgfQotICAgIC8vIFdlIGNhbiBvbmx5IHN0YXJ0IGEgUlVOX1NFUklBTCB0ZXN0IGlmIG5vIG90aGVyIHRlc3RzIGFyZSBhbHNvIHJ1bm5pbmcuCisgICAgLy8gV2UgY2FuIG9ubHkgc3RhcnQgYSBSVU5fU0VSSUFMIHRlc3QgaWYgbm8gb3RoZXIgdGVzdHMgYXJlIGFsc28KKyAgICAvLyBydW5uaW5nLgogICAgIGlmICh0aGlzLT5Qcm9wZXJ0aWVzW3Rlc3RdLT5SdW5TZXJpYWwgJiYgdGhpcy0+UnVubmluZ0NvdW50ID4gMCkgewogICAgICAgY29udGludWU7CiAgICAgfQpAQCAtNjE4LDggKzYyNSw4IEBACiAgIHNlbGYtPlN0YXJ0TmV4dFRlc3RzKCk7CiB9CiAKLXZvaWQgY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXI6OkZpbmlzaFRlc3RQcm9jZXNzKGNtQ1Rlc3RSdW5UZXN0KiBydW5uZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0YXJ0ZWQpCit2b2lkIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyOjpGaW5pc2hUZXN0UHJvY2VzcygKKyAgc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBydW5uZXIsIGJvb2wgc3RhcnRlZCkKIHsKICAgdGhpcy0+Q29tcGxldGVkKys7CiAKQEAgLTYzMSw3ICs2MzgsOCBAQAogICAgIHRoaXMtPlNldFN0b3BUaW1lUGFzc2VkKCk7CiAgIH0KICAgaWYgKHN0YXJ0ZWQpIHsKLSAgICBpZiAoIXRoaXMtPlN0b3BUaW1lUGFzc2VkICYmIHJ1bm5lci0+U3RhcnRBZ2Fpbih0aGlzLT5Db21wbGV0ZWQpKSB7CisgICAgaWYgKCF0aGlzLT5TdG9wVGltZVBhc3NlZCAmJgorICAgICAgICBjbUNUZXN0UnVuVGVzdDo6U3RhcnRBZ2FpbihzdGQ6Om1vdmUocnVubmVyKSwgdGhpcy0+Q29tcGxldGVkKSkgewogICAgICAgdGhpcy0+Q29tcGxldGVkLS07IC8vIHJlbW92ZSB0aGUgY29tcGxldGVkIHRlc3QgYmVjYXVzZSBydW4gYWdhaW4KICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NTksNyArNjY3LDcgQEAKICAgfQogICBwcm9wZXJ0aWVzLT5BZmZpbml0eS5jbGVhcigpOwogCi0gIGRlbGV0ZSBydW5uZXI7CisgIHJ1bm5lci5yZXNldCgpOwogICBpZiAoc3RhcnRlZCkgewogICAgIHRoaXMtPlN0YXJ0TmV4dFRlc3RzKCk7CiAgIH0KQEAgLTgwMiw3ICs4MTAsNyBAQAogICAvLyBJbiBwYXJhbGxlbCB0ZXN0IHJ1bnMgYWRkIHByZXZpb3VzbHkgZmFpbGVkIHRlc3RzIHRvIHRoZSBmcm9udAogICAvLyBvZiB0aGUgY29zdCBsaXN0IGFuZCBxdWV1ZSBvdGhlciB0ZXN0cyBmb3IgZnVydGhlciBzb3J0aW5nCiAgIGZvciAoYXV0byBjb25zdCYgdCA6IHRoaXMtPlRlc3RzKSB7Ci0gICAgaWYgKGNtQ29udGFpbnModGhpcy0+TGFzdFRlc3RzRmFpbGVkLCB0aGlzLT5Qcm9wZXJ0aWVzW3QuZmlyc3RdLT5OYW1lKSkgeworICAgIGlmIChjbTo6Y29udGFpbnModGhpcy0+TGFzdFRlc3RzRmFpbGVkLCB0aGlzLT5Qcm9wZXJ0aWVzW3QuZmlyc3RdLT5OYW1lKSkgewogICAgICAgLy8gSWYgdGhlIHRlc3QgZmFpbGVkIGxhc3QgdGltZSwgaXQgc2hvdWxkIGJlIHJ1biBmaXJzdC4KICAgICAgIHRoaXMtPlNvcnRlZFRlc3RzLnB1c2hfYmFjayh0LmZpcnN0KTsKICAgICAgIGFscmVhZHlTb3J0ZWRUZXN0cy5pbnNlcnQodC5maXJzdCk7CkBAIC04NDEsNyArODQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wYXJhdG9yKHRoaXMpKTsKIAogICAgIGZvciAoYXV0byBjb25zdCYgaiA6IHNvcnRlZENvcHkpIHsKLSAgICAgIGlmICghY21Db250YWlucyhhbHJlYWR5U29ydGVkVGVzdHMsIGopKSB7CisgICAgICBpZiAoIWNtOjpjb250YWlucyhhbHJlYWR5U29ydGVkVGVzdHMsIGopKSB7CiAgICAgICAgIHRoaXMtPlNvcnRlZFRlc3RzLnB1c2hfYmFjayhqKTsKICAgICAgICAgYWxyZWFkeVNvcnRlZFRlc3RzLmluc2VydChqKTsKICAgICAgIH0KQEAgLTg3Myw3ICs4ODEsNyBAQAogICBUZXN0U2V0IGFscmVhZHlTb3J0ZWRUZXN0czsKIAogICBmb3IgKGludCB0ZXN0IDogcHJlc29ydGVkTGlzdCkgewotICAgIGlmIChjbUNvbnRhaW5zKGFscmVhZHlTb3J0ZWRUZXN0cywgdGVzdCkpIHsKKyAgICBpZiAoY206OmNvbnRhaW5zKGFscmVhZHlTb3J0ZWRUZXN0cywgdGVzdCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIApAQCAtODgxLDcgKzg4OSw3IEBACiAgICAgR2V0QWxsVGVzdERlcGVuZGVuY2llcyh0ZXN0LCBkZXBlbmRlbmNpZXMpOwogCiAgICAgZm9yIChpbnQgdGVzdERlcGVuZGVuY3kgOiBkZXBlbmRlbmNpZXMpIHsKLSAgICAgIGlmICghY21Db250YWlucyhhbHJlYWR5U29ydGVkVGVzdHMsIHRlc3REZXBlbmRlbmN5KSkgeworICAgICAgaWYgKCFjbTo6Y29udGFpbnMoYWxyZWFkeVNvcnRlZFRlc3RzLCB0ZXN0RGVwZW5kZW5jeSkpIHsKICAgICAgICAgYWxyZWFkeVNvcnRlZFRlc3RzLmluc2VydCh0ZXN0RGVwZW5kZW5jeSk7CiAgICAgICAgIHRoaXMtPlNvcnRlZFRlc3RzLnB1c2hfYmFjayh0ZXN0RGVwZW5kZW5jeSk7CiAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5oCmluZGV4IDViNDI5ZDQuLmUyMWI5MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5oCkBAIC02LDE0ICs2LDE0IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKLSNpbmNsdWRlICJjbV91di5oIgotCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RSZXNvdXJjZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgImNtQ1Rlc3RUZXN0SGFuZGxlci5oIgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgIC8vIFJlbW92ZXMgdGhlIGNoZWNrcG9pbnQgZmlsZQogICB2b2lkIE1hcmtGaW5pc2hlZCgpOwogICB2b2lkIEVyYXNlVGVzdChpbnQgaW5kZXgpOwotICB2b2lkIEZpbmlzaFRlc3RQcm9jZXNzKGNtQ1Rlc3RSdW5UZXN0KiBydW5uZXIsIGJvb2wgc3RhcnRlZCk7CisgIHZvaWQgRmluaXNoVGVzdFByb2Nlc3Moc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBydW5uZXIsIGJvb2wgc3RhcnRlZCk7CiAKICAgc3RhdGljIHZvaWQgT25UZXN0TG9hZFJldHJ5Q0IodXZfdGltZXJfdCogdGltZXIpOwogCkBAIC0xMzcsNiArMTM3LDggQEAKICAgaW5saW5lIHNpemVfdCBHZXRQcm9jZXNzb3JzVXNlZChpbnQgaW5kZXgpOwogICBzdGQ6OnN0cmluZyBHZXROYW1lKGludCBpbmRleCk7CiAKKyAgYm9vbCBDaGVja1N0b3BPbkZhaWx1cmUoKTsKKwogICBib29sIENoZWNrU3RvcFRpbWVQYXNzZWQoKTsKICAgdm9pZCBTZXRTdG9wVGltZVBhc3NlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJlc291cmNlU3BlYy5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJlc291cmNlU3BlYy5jeHgKaW5kZXggOGY5MWVmYi4uMjFjOTdkZSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSZXNvdXJjZVNwZWMuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UmVzb3VyY2VTcGVjLmN4eApAQCAtNywxMiArNywxMiBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20zcC9qc29uL3JlYWRlci5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0KIHN0YXRpYyBjb25zdCBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gSWRlbnRpZmllclJlZ2V4eyAiXlthLXpfXVthLXowLTlfXSokIiB9Owogc3RhdGljIGNvbnN0IGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBJZFJlZ2V4eyAiXlthLXowLTlfXSskIiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJ1blRlc3QuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmN4eAppbmRleCA1ODI4OWVhLi4yYzhlMzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJ1blRlc3QuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5jeHgKQEAgLTMsNyArMyw3IEBACiAjaW5jbHVkZSAiY21DVGVzdFJ1blRlc3QuaCIKIAogI2luY2x1ZGUgPGNocm9ubz4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8Y3N0cmluZz4KQEAgLTMxNCwyMyArMzE0LDI3IEBACiAgIHJldHVybiBwYXNzZWQgfHwgc2tpcHBlZDsKIH0KIAotYm9vbCBjbUNUZXN0UnVuVGVzdDo6U3RhcnRBZ2FpbihzaXplX3QgY29tcGxldGVkKQorYm9vbCBjbUNUZXN0UnVuVGVzdDo6U3RhcnRBZ2FpbihzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbXBsZXRlZCkKIHsKLSAgaWYgKCF0aGlzLT5SdW5BZ2FpbikgeworICBhdXRvKiB0ZXN0UnVuID0gcnVubmVyLmdldCgpOworCisgIGlmICghdGVzdFJ1bi0+UnVuQWdhaW4pIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgdGhpcy0+UnVuQWdhaW4gPSBmYWxzZTsgLy8gcmVzZXQKKyAgdGVzdFJ1bi0+UnVuQWdhaW4gPSBmYWxzZTsgLy8gcmVzZXQKKyAgdGVzdFJ1bi0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPihzdGQ6Om1vdmUocnVubmVyKSk7CiAgIC8vIGNoYW5nZSB0byB0ZXN0cyBkaXJlY3RvcnkKLSAgY21Xb3JraW5nRGlyZWN0b3J5IHdvcmtkaXIodGhpcy0+VGVzdFByb3BlcnRpZXMtPkRpcmVjdG9yeSk7CisgIGNtV29ya2luZ0RpcmVjdG9yeSB3b3JrZGlyKHRlc3RSdW4tPlRlc3RQcm9wZXJ0aWVzLT5EaXJlY3RvcnkpOwogICBpZiAod29ya2Rpci5GYWlsZWQoKSkgewotICAgIHRoaXMtPlN0YXJ0RmFpbHVyZSgiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5UZXN0UHJvcGVydGllcy0+RGlyZWN0b3J5ICsgIiA6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyZXJyb3Iod29ya2Rpci5HZXRMYXN0UmVzdWx0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIpOworICAgIHRlc3RSdW4tPlN0YXJ0RmFpbHVyZSgiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSB0byAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVuLT5UZXN0UHJvcGVydGllcy0+RGlyZWN0b3J5ICsgIiA6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyZXJyb3Iod29ya2Rpci5HZXRMYXN0UmVzdWx0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKLSAgdGhpcy0+U3RhcnRUZXN0KGNvbXBsZXRlZCwgdGhpcy0+VG90YWxOdW1iZXJPZlRlc3RzKTsKKyAgdGVzdFJ1bi0+U3RhcnRUZXN0KGNvbXBsZXRlZCwgdGVzdFJ1bi0+VG90YWxOdW1iZXJPZlRlc3RzKTsKICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM4Nyw2ICszOTEsMTggQEAKICAgaGFuZGxlci0+UG9zdFByb2Nlc3NUZXN0KHRoaXMtPlRlc3RSZXN1bHQsIHRoaXMtPkluZGV4KTsKIH0KIAordm9pZCBjbUNUZXN0UnVuVGVzdDo6U3RhcnRGYWlsdXJlKHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRldGFpbCkKK3sKKyAgYXV0byogdGVzdFJ1biA9IHJ1bm5lci5nZXQoKTsKKworICB0ZXN0UnVuLT5UZXN0UHJvY2VzcyA9IGNtOjptYWtlX3VuaXF1ZTxjbVByb2Nlc3M+KHN0ZDo6bW92ZShydW5uZXIpKTsKKyAgdGVzdFJ1bi0+U3RhcnRGYWlsdXJlKG91dHB1dCwgZGV0YWlsKTsKKworICB0ZXN0UnVuLT5GaW5hbGl6ZVRlc3QoZmFsc2UpOworfQorCiB2b2lkIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEZhaWx1cmUoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGV0YWlsKQogewpAQCAtNDE4LDcgKzQzNCw3IEBACiAgIHRoaXMtPlRlc3RSZXN1bHQuUGF0aCA9IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5EaXJlY3Rvcnk7CiAgIHRoaXMtPlRlc3RSZXN1bHQuT3V0cHV0ID0gb3V0cHV0OwogICB0aGlzLT5UZXN0UmVzdWx0LkZ1bGxDb21tYW5kTGluZS5jbGVhcigpOwotICB0aGlzLT5UZXN0UHJvY2VzcyA9IGNtOjptYWtlX3VuaXF1ZTxjbVByb2Nlc3M+KCp0aGlzKTsKKyAgdGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudC5jbGVhcigpOwogfQogCiBzdGQ6OnN0cmluZyBjbUNUZXN0UnVuVGVzdDo6R2V0VGVzdFByZWZpeChzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpIGNvbnN0CkBAIC00NDIsNiArNDU4LDIxIEBACiAgIHJldHVybiBvdXRwdXRTdHJlYW0uc3RyKCk7CiB9CiAKK2Jvb2wgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0VGVzdChzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpCit7CisgIGF1dG8qIHRlc3RSdW4gPSBydW5uZXIuZ2V0KCk7CisKKyAgdGVzdFJ1bi0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPihzdGQ6Om1vdmUocnVubmVyKSk7CisKKyAgaWYgKCF0ZXN0UnVuLT5TdGFydFRlc3QoY29tcGxldGVkLCB0b3RhbCkpIHsKKyAgICB0ZXN0UnVuLT5GaW5hbGl6ZVRlc3QoZmFsc2UpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiAvLyBTdGFydHMgdGhlIGV4ZWN1dGlvbiBvZiBhIHRlc3QuICBSZXR1cm5zIG9uY2UgaXQgaGFzIHN0YXJ0ZWQKIGJvb2wgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0VGVzdChzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpCiB7CkBAIC00NzMsOSArNTA0LDkgQEAKICAgaWYgKHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5EaXNhYmxlZCkgewogICAgIHRoaXMtPlRlc3RSZXN1bHQuQ29tcGxldGlvblN0YXR1cyA9ICJEaXNhYmxlZCI7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgPSBjbUNUZXN0VGVzdEhhbmRsZXI6Ok5PVF9SVU47Ci0gICAgdGhpcy0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPigqdGhpcyk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSAiRGlzYWJsZWQiOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7CisgICAgdGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudC5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC00ODcsNyArNTE4LDYgQEAKICAgLy8gaXRzIGFyZ3VtZW50cyBhcmUgaXJyZWxldmFudC4gVGhpcyBtYXR0ZXJzIGZvciB0aGUgY2FzZSB3aGVyZSBhIGZpeHR1cmUKICAgLy8gZGVwZW5kZW5jeSBtaWdodCBiZSBjcmVhdGluZyB0aGUgZXhlY3V0YWJsZSB3ZSB3YW50IHRvIHJ1bi4KICAgaWYgKCF0aGlzLT5GYWlsZWREZXBlbmRlbmNpZXMuZW1wdHkoKSkgewotICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgIHN0ZDo6c3RyaW5nIG1zZyA9ICJGYWlsZWQgdGVzdCBkZXBlbmRlbmNpZXM6IjsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmYWlsZWREZXAgOiB0aGlzLT5GYWlsZWREZXBlbmRlbmNpZXMpIHsKICAgICAgIG1zZyArPSAiICIgKyBmYWlsZWREZXA7CkBAIC00OTYsNiArNTI2LDcgQEAKICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBIQU5ETEVSX09VVFBVVCwgbXNnIDw8IHN0ZDo6ZW5kbCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSBtc2c7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5GdWxsQ29tbWFuZExpbmUuY2xlYXIoKTsKKyAgICB0aGlzLT5UZXN0UmVzdWx0LkVudmlyb25tZW50LmNsZWFyKCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5Db21wbGV0aW9uU3RhdHVzID0gIkZpeHR1cmUgZGVwZW5kZW5jeSBmYWlsZWQiOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID0gY21DVGVzdFRlc3RIYW5kbGVyOjpOT1RfUlVOOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTUwNCw3ICs1MzUsNiBAQAogICB0aGlzLT5Db21wdXRlQXJndW1lbnRzKCk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncyA9IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5BcmdzOwogICBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiBhcmdzWzFdID09ICJOT1RfQVZBSUxBQkxFIikgewotICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgIHN0ZDo6c3RyaW5nIG1zZzsKICAgICBpZiAodGhpcy0+Q1Rlc3QtPkdldENvbmZpZ1R5cGUoKS5lbXB0eSgpKSB7CiAgICAgICBtc2cgPSAiVGVzdCBub3QgYXZhaWxhYmxlIHdpdGhvdXQgY29uZmlndXJhdGlvbi4gIChNaXNzaW5nIFwiLUMgIgpAQCAtNTE3LDYgKzU0Nyw3IEBACiAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwgbXNnIDw8IHN0ZDo6ZW5kbCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSBtc2c7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5GdWxsQ29tbWFuZExpbmUuY2xlYXIoKTsKKyAgICB0aGlzLT5UZXN0UmVzdWx0LkVudmlyb25tZW50LmNsZWFyKCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5Db21wbGV0aW9uU3RhdHVzID0gIk1pc3NpbmcgQ29uZmlndXJhdGlvbiI7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgPSBjbUNUZXN0VGVzdEhhbmRsZXI6Ok5PVF9SVU47CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTI2LDEzICs1NTcsMTMgQEAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSA6IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5SZXF1aXJlZEZpbGVzKSB7CiAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGZpbGUpKSB7CiAgICAgICAvLyBSZXF1aXJlZCBmaWxlIHdhcyBub3QgZm91bmQKLSAgICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgICAgKnRoaXMtPlRlc3RIYW5kbGVyLT5Mb2dGaWxlIDw8ICJVbmFibGUgdG8gZmluZCByZXF1aXJlZCBmaWxlOiAiIDw8IGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGZpbmQgcmVxdWlyZWQgZmlsZTogIiA8PCBmaWxlIDw8IHN0ZDo6ZW5kbCk7CiAgICAgICB0aGlzLT5UZXN0UmVzdWx0Lk91dHB1dCA9ICJVbmFibGUgdG8gZmluZCByZXF1aXJlZCBmaWxlOiAiICsgZmlsZTsKICAgICAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7CisgICAgICB0aGlzLT5UZXN0UmVzdWx0LkVudmlyb25tZW50LmNsZWFyKCk7CiAgICAgICB0aGlzLT5UZXN0UmVzdWx0LkNvbXBsZXRpb25TdGF0dXMgPSAiUmVxdWlyZWQgRmlsZXMgTWlzc2luZyI7CiAgICAgICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyA9IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Tk9UX1JVTjsKICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU0MiwxMyArNTczLDEzIEBACiAgIGlmICh0aGlzLT5BY3R1YWxDb21tYW5kLmVtcHR5KCkpIHsKICAgICAvLyBpZiB0aGUgY29tbWFuZCB3YXMgbm90IGZvdW5kIGNyZWF0ZSBhIFRlc3RSZXN1bHQgb2JqZWN0CiAgICAgLy8gdGhhdCBoYXMgdGhhdCBpbmZvcm1hdGlvbgotICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgICp0aGlzLT5UZXN0SGFuZGxlci0+TG9nRmlsZSA8PCAiVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZTogIiA8PCBhcmdzWzFdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIlVuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGU6ICIgPDwgYXJnc1sxXSA8PCBzdGQ6OmVuZGwpOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuT3V0cHV0ID0gIlVuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGU6ICIgKyBhcmdzWzFdOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7CisgICAgdGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudC5jbGVhcigpOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuQ29tcGxldGlvblN0YXR1cyA9ICJVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlIjsKICAgICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyA9IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Tk9UX1JVTjsKICAgICByZXR1cm4gZmFsc2U7CkBAIC02NTQsNyArNjg1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiogZW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+KiBhZmZpbml0eSkKIHsKLSAgdGhpcy0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPigqdGhpcyk7CiAgIHRoaXMtPlRlc3RQcm9jZXNzLT5TZXRJZCh0aGlzLT5JbmRleCk7CiAgIHRoaXMtPlRlc3RQcm9jZXNzLT5TZXRXb3JraW5nRGlyZWN0b3J5KHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5EaXJlY3RvcnkpOwogICB0aGlzLT5UZXN0UHJvY2Vzcy0+U2V0Q29tbWFuZCh0aGlzLT5BY3R1YWxDb21tYW5kKTsKQEAgLTY5NCwyNSArNzI0LDQzIEBACiAgIGNtU3lzdGVtVG9vbHM6OlNhdmVSZXN0b3JlRW52aXJvbm1lbnQgc3JlOwogI2VuZGlmCiAKKyAgc3RkOjpvc3RyaW5nc3RyZWFtIGVudk1lYXN1cmVtZW50OwogICBpZiAoZW52aXJvbm1lbnQgJiYgIWVudmlyb25tZW50LT5lbXB0eSgpKSB7CiAgICAgY21TeXN0ZW1Ub29sczo6QXBwZW5kRW52KCplbnZpcm9ubWVudCk7CisgICAgZm9yIChhdXRvIGNvbnN0JiB2YXIgOiAqZW52aXJvbm1lbnQpIHsKKyAgICAgIGVudk1lYXN1cmVtZW50IDw8IHZhciA8PCBzdGQ6OmVuZGw7CisgICAgfQogICB9CiAKICAgaWYgKHRoaXMtPlVzZUFsbG9jYXRlZFJlc291cmNlcykgewotICAgIHRoaXMtPlNldHVwUmVzb3VyY2VzRW52aXJvbm1lbnQoKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZW52TG9nOworICAgIHRoaXMtPlNldHVwUmVzb3VyY2VzRW52aXJvbm1lbnQoJmVudkxvZyk7CisgICAgZm9yIChhdXRvIGNvbnN0JiB2YXIgOiBlbnZMb2cpIHsKKyAgICAgIGVudk1lYXN1cmVtZW50IDw8IHZhciA8PCBzdGQ6OmVuZGw7CisgICAgfQogICB9IGVsc2UgewogICAgIGNtU3lzdGVtVG9vbHM6OlVuc2V0RW52KCJDVEVTVF9SRVNPVVJDRV9HUk9VUF9DT1VOVCIpOworICAgIC8vIFNpZ25pZnkgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIGFjdGl2ZWx5IHVuc2V0CisgICAgZW52TWVhc3VyZW1lbnQgPDwgIiNDVEVTVF9SRVNPVVJDRV9HUk9VUF9DT1VOVD0iIDw8IHN0ZDo6ZW5kbDsKICAgfQogCisgIHRoaXMtPlRlc3RSZXN1bHQuRW52aXJvbm1lbnQgPSBlbnZNZWFzdXJlbWVudC5zdHIoKTsKKyAgLy8gUmVtb3ZlIGxhc3QgbmV3bGluZQorICB0aGlzLT5UZXN0UmVzdWx0LkVudmlyb25tZW50LmVyYXNlKHRoaXMtPlRlc3RSZXN1bHQuRW52aXJvbm1lbnQubGVuZ3RoKCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworCiAgIHJldHVybiB0aGlzLT5UZXN0UHJvY2Vzcy0+U3RhcnRQcm9jZXNzKHRoaXMtPk11bHRpVGVzdEhhbmRsZXIuTG9vcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHkpOwogfQogCi12b2lkIGNtQ1Rlc3RSdW5UZXN0OjpTZXR1cFJlc291cmNlc0Vudmlyb25tZW50KCkKK3ZvaWQgY21DVGVzdFJ1blRlc3Q6OlNldHVwUmVzb3VyY2VzRW52aXJvbm1lbnQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBsb2cpCiB7CiAgIHN0ZDo6c3RyaW5nIHByb2Nlc3NDb3VudCA9ICJDVEVTVF9SRVNPVVJDRV9HUk9VUF9DT1VOVD0iOwogICBwcm9jZXNzQ291bnQgKz0gc3RkOjp0b19zdHJpbmcodGhpcy0+QWxsb2NhdGVkUmVzb3VyY2VzLnNpemUoKSk7CiAgIGNtU3lzdGVtVG9vbHM6OlB1dEVudihwcm9jZXNzQ291bnQpOworICBpZiAobG9nKSB7CisgICAgbG9nLT5wdXNoX2JhY2socHJvY2Vzc0NvdW50KTsKKyAgfQogCiAgIHN0ZDo6c2l6ZV90IGkgPSAwOwogICBmb3IgKGF1dG8gY29uc3QmIHByb2Nlc3MgOiB0aGlzLT5BbGxvY2F0ZWRSZXNvdXJjZXMpIHsKQEAgLTczOCw4ICs3ODYsMTQgQEAKICAgICAgICAgdmFyICs9ICJpZDoiICsgaXQyLklkICsgIixzbG90czoiICsgc3RkOjp0b19zdHJpbmcoaXQyLlNsb3RzKTsKICAgICAgIH0KICAgICAgIGNtU3lzdGVtVG9vbHM6OlB1dEVudih2YXIpOworICAgICAgaWYgKGxvZykgeworICAgICAgICBsb2ctPnB1c2hfYmFjayh2YXIpOworICAgICAgfQogICAgIH0KICAgICBjbVN5c3RlbVRvb2xzOjpQdXRFbnYocmVzb3VyY2VMaXN0KTsKKyAgICBpZiAobG9nKSB7CisgICAgICBsb2ctPnB1c2hfYmFjayhyZXNvdXJjZUxpc3QpOworICAgIH0KICAgICArK2k7CiAgIH0KIH0KQEAgLTgyMSw3ICs4NzUsOCBAQAogICAgICAgICAgICAgICJUZXN0aW5nICIgPDwgdGhpcy0+VGVzdFByb3BlcnRpZXMtPk5hbWUgPDwgIiAuLi4gIik7CiB9CiAKLXZvaWQgY21DVGVzdFJ1blRlc3Q6OkZpbmFsaXplVGVzdCgpCit2b2lkIGNtQ1Rlc3RSdW5UZXN0OjpGaW5hbGl6ZVRlc3QoYm9vbCBzdGFydGVkKQogewotICB0aGlzLT5NdWx0aVRlc3RIYW5kbGVyLkZpbmlzaFRlc3RQcm9jZXNzKHRoaXMsIHRydWUpOworICB0aGlzLT5NdWx0aVRlc3RIYW5kbGVyLkZpbmlzaFRlc3RQcm9jZXNzKHRoaXMtPlRlc3RQcm9jZXNzLT5HZXRSdW5uZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmgKaW5kZXggNDk4ODgzOS4uZDgzMTI0NyAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmgKQEAgLTY1LDYgKzY1LDE1IEBACiAgIC8vIFJlYWQgYW5kIHN0b3JlIG91dHB1dC4gIFJldHVybnMgdHJ1ZSBpZiBpdCBtdXN0IGJlIGNhbGxlZCBhZ2Fpbi4KICAgdm9pZCBDaGVja091dHB1dChzdGQ6OnN0cmluZyBjb25zdCYgbGluZSk7CiAKKyAgc3RhdGljIGJvb2wgU3RhcnRUZXN0KHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbXBsZXRlZCwgc2l6ZV90IHRvdGFsKTsKKyAgc3RhdGljIGJvb2wgU3RhcnRBZ2FpbihzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tcGxldGVkKTsKKworICBzdGF0aWMgdm9pZCBTdGFydEZhaWx1cmUoc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBydW5uZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRldGFpbCk7CisKICAgLy8gbGF1bmNoIHRoZSB0ZXN0IHByb2Nlc3MsIHJldHVybiB3aGV0aGVyIGl0IHN0YXJ0ZWQgY29ycmVjdGx5CiAgIGJvb2wgU3RhcnRUZXN0KHNpemVfdCBjb21wbGV0ZWQsIHNpemVfdCB0b3RhbCk7CiAgIC8vIGNhcHR1cmUgYW5kIHJlcG9ydCB0aGUgdGVzdCByZXN1bHRzCkBAIC03NCw4ICs4Myw2IEBACiAKICAgdm9pZCBDb21wdXRlV2VpZ2h0ZWRDb3N0KCk7CiAKLSAgYm9vbCBTdGFydEFnYWluKHNpemVfdCBjb21wbGV0ZWQpOwotCiAgIHZvaWQgU3RhcnRGYWlsdXJlKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXRhaWwpOwogCiAgIGNtQ1Rlc3QqIEdldENUZXN0KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q1Rlc3Q7IH0KQEAgLTg0LDcgKzkxLDcgQEAKIAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldEFyZ3VtZW50cygpIHsgcmV0dXJuIHRoaXMtPkFyZ3VtZW50czsgfQogCi0gIHZvaWQgRmluYWxpemVUZXN0KCk7CisgIHZvaWQgRmluYWxpemVUZXN0KGJvb2wgc3RhcnRlZCA9IHRydWUpOwogCiAgIGJvb2wgVGltZWRPdXRGb3JTdG9wVGltZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlRpbWVvdXRJc0ZvclN0b3BUaW1lOyB9CiAKQEAgLTExMiw3ICsxMTksNyBAQAogICAvLyBSdW4gcG9zdCBwcm9jZXNzaW5nIG9mIHRoZSBwcm9jZXNzIG91dHB1dCBmb3IgTWVtQ2hlY2sKICAgdm9pZCBNZW1DaGVja1Bvc3RQcm9jZXNzKCk7CiAKLSAgdm9pZCBTZXR1cFJlc291cmNlc0Vudmlyb25tZW50KCk7CisgIHZvaWQgU2V0dXBSZXNvdXJjZXNFbnZpcm9ubWVudChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIGxvZyA9IG51bGxwdHIpOwogCiAgIC8vIFJldHVybnMgImNvbXBsZXRlZC90b3RhbCBUZXN0ICNJbmRleDogIgogICBzdGQ6OnN0cmluZyBHZXRUZXN0UHJlZml4KHNpemVfdCBjb21wbGV0ZWQsIHNpemVfdCB0b3RhbCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNjcmlwdEhhbmRsZXIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTY3JpcHRIYW5kbGVyLmN4eAppbmRleCA3ODAzZTM3Li40ZmE0ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNjcmlwdEhhbmRsZXIuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5jeHgKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8cmF0aW8+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtNTEsMjIgKzUwLDcgQEAKIAogI2RlZmluZSBDVEVTVF9JTklUSUFMX0NNQUtFX09VVFBVVF9GSUxFX05BTUUgIkNUZXN0SW5pdGlhbENNYWtlT3V0cHV0LmxvZyIKIAotY21DVGVzdFNjcmlwdEhhbmRsZXI6OmNtQ1Rlc3RTY3JpcHRIYW5kbGVyKCkKLXsKLSAgdGhpcy0+QmFja3VwID0gZmFsc2U7Ci0gIHRoaXMtPkVtcHR5QmluRGlyID0gZmFsc2U7Ci0gIHRoaXMtPkVtcHR5QmluRGlyT25jZSA9IGZhbHNlOwotICB0aGlzLT5NYWtlZmlsZSA9IG51bGxwdHI7Ci0gIHRoaXMtPlBhcmVudE1ha2VmaWxlID0gbnVsbHB0cjsKLSAgdGhpcy0+Q01ha2UgPSBudWxscHRyOwotICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IgPSBudWxscHRyOwotCi0gIHRoaXMtPlNjcmlwdFN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQoKTsKLQotICAvLyB0aGUgKjYwIGlzIGJlY2F1c2UgdGhlIHNldHRpbmdzIGFyZSBpbiBtaW51dGVzIGJ1dCBHZXRUaW1lIGlzIHNlY29uZHMKLSAgdGhpcy0+TWluaW11bUludGVydmFsID0gMzAgKiA2MDsKLSAgdGhpcy0+Q29udGludW91c0R1cmF0aW9uID0gLTE7Ci19CitjbUNUZXN0U2NyaXB0SGFuZGxlcjo6Y21DVGVzdFNjcmlwdEhhbmRsZXIoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgY21DVGVzdFNjcmlwdEhhbmRsZXI6OkluaXRpYWxpemUoKQogewpAQCAtOTUsMjIgKzc5LDE1IEBACiAgIC8vIHdoYXQgdGltZSBpbiBzZWNvbmRzIGRpZCB0aGlzIHNjcmlwdCBzdGFydCBydW5uaW5nCiAgIHRoaXMtPlNjcmlwdFN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQoKTsKIAotICBkZWxldGUgdGhpcy0+TWFrZWZpbGU7Ci0gIHRoaXMtPk1ha2VmaWxlID0gbnVsbHB0cjsKKyAgdGhpcy0+TWFrZWZpbGUucmVzZXQoKTsKICAgdGhpcy0+UGFyZW50TWFrZWZpbGUgPSBudWxscHRyOwogCi0gIGRlbGV0ZSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7Ci0gIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9IG51bGxwdHI7CisgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci5yZXNldCgpOwogCi0gIGRlbGV0ZSB0aGlzLT5DTWFrZTsKKyAgdGhpcy0+Q01ha2UucmVzZXQoKTsKIH0KIAotY21DVGVzdFNjcmlwdEhhbmRsZXI6On5jbUNUZXN0U2NyaXB0SGFuZGxlcigpCi17Ci0gIGRlbGV0ZSB0aGlzLT5NYWtlZmlsZTsKLSAgZGVsZXRlIHRoaXMtPkdsb2JhbEdlbmVyYXRvcjsKLSAgZGVsZXRlIHRoaXMtPkNNYWtlOwotfQorY21DVGVzdFNjcmlwdEhhbmRsZXI6On5jbUNUZXN0U2NyaXB0SGFuZGxlcigpID0gZGVmYXVsdDsKIAogLy8ganVzdCBhZGRzIGFuIGFyZ3VtZW50IHRvIHRoZSB2ZWN0b3IKIHZvaWQgY21DVGVzdFNjcmlwdEhhbmRsZXI6OkFkZENvbmZpZ3VyYXRpb25TY3JpcHQoY29uc3QgY2hhciogc2NyaXB0LApAQCAtMjQ3LDIzICsyMjQsMjAgQEAKIHZvaWQgY21DVGVzdFNjcmlwdEhhbmRsZXI6OkNyZWF0ZUNNYWtlKCkKIHsKICAgLy8gY3JlYXRlIGEgY21ha2UgaW5zdGFuY2UgdG8gcmVhZCB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHQKLSAgaWYgKHRoaXMtPkNNYWtlKSB7Ci0gICAgZGVsZXRlIHRoaXMtPkNNYWtlOwotICAgIGRlbGV0ZSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7Ci0gICAgZGVsZXRlIHRoaXMtPk1ha2VmaWxlOwotICB9Ci0gIHRoaXMtPkNNYWtlID0gbmV3IGNtYWtlKGNtYWtlOjpSb2xlU2NyaXB0LCBjbVN0YXRlOjpDVGVzdCk7CisgIHRoaXMtPkNNYWtlID0gY206Om1ha2VfdW5pcXVlPGNtYWtlPihjbWFrZTo6Um9sZVNjcmlwdCwgY21TdGF0ZTo6Q1Rlc3QpOwogICB0aGlzLT5DTWFrZS0+U2V0SG9tZURpcmVjdG9yeSgiIik7CiAgIHRoaXMtPkNNYWtlLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KCIiKTsKICAgdGhpcy0+Q01ha2UtPkdldEN1cnJlbnRTbmFwc2hvdCgpLlNldERlZmF1bHREZWZpbml0aW9ucygpOwogICB0aGlzLT5DTWFrZS0+QWRkQ01ha2VQYXRocygpOwotICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IgPSBuZXcgY21HbG9iYWxHZW5lcmF0b3IodGhpcy0+Q01ha2UpOworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IgPQorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdsb2JhbEdlbmVyYXRvcj4odGhpcy0+Q01ha2UuZ2V0KCkpOwogCiAgIGNtU3RhdGVTbmFwc2hvdCBzbmFwc2hvdCA9IHRoaXMtPkNNYWtlLT5HZXRDdXJyZW50U25hcHNob3QoKTsKICAgc3RkOjpzdHJpbmcgY3dkID0gY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKICAgc25hcHNob3QuR2V0RGlyZWN0b3J5KCkuU2V0Q3VycmVudFNvdXJjZShjd2QpOwogICBzbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRDdXJyZW50QmluYXJ5KGN3ZCk7Ci0gIHRoaXMtPk1ha2VmaWxlID0gbmV3IGNtTWFrZWZpbGUodGhpcy0+R2xvYmFsR2VuZXJhdG9yLCBzbmFwc2hvdCk7CisgIHRoaXMtPk1ha2VmaWxlID0KKyAgICBjbTo6bWFrZV91bmlxdWU8Y21NYWtlZmlsZT4odGhpcy0+R2xvYmFsR2VuZXJhdG9yLmdldCgpLCBzbmFwc2hvdCk7CiAgIGlmICh0aGlzLT5QYXJlbnRNYWtlZmlsZSkgewogICAgIHRoaXMtPk1ha2VmaWxlLT5TZXRSZWN1cnNpb25EZXB0aCgKICAgICAgIHRoaXMtPlBhcmVudE1ha2VmaWxlLT5HZXRSZWN1cnNpb25EZXB0aCgpKTsKQEAgLTMxMCwxMiArMjg0LDE0IEBACiAgIC8vIGlmIHRoZSBhcmd1bWVudCBoYXMgYSAsIGluIGl0IHRoZW4gaXQgbmVlZHMgdG8gYmUgYnJva2VuIGludG8gdGhlIGZpc3QKICAgLy8gYXJndW1lbnQgKHdoaWNoIGlzIHRoZSBzY3JpcHQpIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHdoaWNoIHdpbGwgYmUKICAgLy8gcGFzc2VkIGludG8gdGhlIHNjcmlwdHMgYXMgU19BUkcKLSAgc3RkOjpzdHJpbmcgc2NyaXB0ID0gdG90YWxfc2NyaXB0X2FyZzsKKyAgc3RkOjpzdHJpbmcgc2NyaXB0OwogICBzdGQ6OnN0cmluZyBzY3JpcHRfYXJnOwogICBjb25zdCBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGNvbW1hX3BvcyA9IHRvdGFsX3NjcmlwdF9hcmcuZmluZCgnLCcpOwogICBpZiAoY29tbWFfcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgc2NyaXB0ID0gdG90YWxfc2NyaXB0X2FyZy5zdWJzdHIoMCwgY29tbWFfcG9zKTsKICAgICBzY3JpcHRfYXJnID0gdG90YWxfc2NyaXB0X2FyZy5zdWJzdHIoY29tbWFfcG9zICsgMSk7CisgIH0gZWxzZSB7CisgICAgc2NyaXB0ID0gdG90YWxfc2NyaXB0X2FyZzsKICAgfQogICAvLyBtYWtlIHN1cmUgdGhlIGZpbGUgZXhpc3RzCiAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhzY3JpcHQpKSB7CkBAIC04NzgsNyArODU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzbmFtZSwgYm9vbCBJblByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiByZXR1cm5WYWx1ZSkKIHsKLSAgY21DVGVzdFNjcmlwdEhhbmRsZXIqIHNoID0gbmV3IGNtQ1Rlc3RTY3JpcHRIYW5kbGVyKCk7CisgIGF1dG8gc2ggPSBjbTo6bWFrZV91bmlxdWU8Y21DVGVzdFNjcmlwdEhhbmRsZXI+KCk7CiAgIHNoLT5TZXRDVGVzdEluc3RhbmNlKGN0ZXN0KTsKICAgc2gtPlBhcmVudE1ha2VmaWxlID0gbWY7CiAgIHNoLT5BZGRDb25maWd1cmF0aW9uU2NyaXB0KHNuYW1lLCBJblByb2Nlc3MpOwpAQCAtODg2LDcgKzg2Miw2IEBACiAgIGlmIChyZXR1cm5WYWx1ZSkgewogICAgICpyZXR1cm5WYWx1ZSA9IHJlczsKICAgfQotICBkZWxldGUgc2g7CiAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNjcmlwdEhhbmRsZXIuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5oCmluZGV4IGQwMDMxOTkuLmViYjc5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5oCkBAIC0xMDEsMTIgKzEwMSwxNCBAQAogICBjbUR1cmF0aW9uIEdldFJlbWFpbmluZ1RpbWVBbGxvd2VkKCk7CiAKICAgY21DVGVzdFNjcmlwdEhhbmRsZXIoKTsKKyAgY21DVGVzdFNjcmlwdEhhbmRsZXIoY29uc3QgY21DVGVzdFNjcmlwdEhhbmRsZXImKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21DVGVzdFNjcmlwdEhhbmRsZXImIG9wZXJhdG9yPShjb25zdCBjbUNUZXN0U2NyaXB0SGFuZGxlciYpID0gZGVsZXRlOwogICB+Y21DVGVzdFNjcmlwdEhhbmRsZXIoKSBvdmVycmlkZTsKIAogICB2b2lkIEluaXRpYWxpemUoKSBvdmVycmlkZTsKIAogICB2b2lkIENyZWF0ZUNNYWtlKCk7Ci0gIGNtYWtlKiBHZXRDTWFrZSgpIHsgcmV0dXJuIHRoaXMtPkNNYWtlOyB9CisgIGNtYWtlKiBHZXRDTWFrZSgpIHsgcmV0dXJuIHRoaXMtPkNNYWtlLmdldCgpOyB9CiAKICAgdm9pZCBTZXRSdW5DdXJyZW50U2NyaXB0KGJvb2wgdmFsdWUpOwogCkBAIC0xNDMsOSArMTQ1LDkgQEAKIAogICBib29sIFNob3VsZFJ1bkN1cnJlbnRTY3JpcHQ7CiAKLSAgYm9vbCBCYWNrdXA7Ci0gIGJvb2wgRW1wdHlCaW5EaXI7Ci0gIGJvb2wgRW1wdHlCaW5EaXJPbmNlOworICBib29sIEJhY2t1cCA9IGZhbHNlOworICBib29sIEVtcHR5QmluRGlyID0gZmFsc2U7CisgIGJvb2wgRW1wdHlCaW5EaXJPbmNlID0gZmFsc2U7CiAKICAgc3RkOjpzdHJpbmcgU291cmNlRGlyOwogICBzdGQ6OnN0cmluZyBCaW5hcnlEaXI7CkBAIC0xNjEsMTYgKzE2MywxOCBAQAogICBzdGQ6OnN0cmluZyBDTU91dEZpbGU7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBFeHRyYVVwZGF0ZXM7CiAKLSAgZG91YmxlIE1pbmltdW1JbnRlcnZhbDsKLSAgZG91YmxlIENvbnRpbnVvdXNEdXJhdGlvbjsKKyAgLy8gdGhlICo2MCBpcyBiZWNhdXNlIHRoZSBzZXR0aW5ncyBhcmUgaW4gbWludXRlcyBidXQgR2V0VGltZSBpcyBzZWNvbmRzCisgIGRvdWJsZSBNaW5pbXVtSW50ZXJ2YWwgPSAzMCAqIDYwOworICBkb3VibGUgQ29udGludW91c0R1cmF0aW9uID0gLTE7CiAKICAgLy8gd2hhdCB0aW1lIGluIHNlY29uZHMgZGlkIHRoaXMgc2NyaXB0IHN0YXJ0IHJ1bm5pbmcKLSAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBTY3JpcHRTdGFydFRpbWU7CisgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgU2NyaXB0U3RhcnRUaW1lID0KKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50KCk7CiAKLSAgY21NYWtlZmlsZSogTWFrZWZpbGU7Ci0gIGNtTWFrZWZpbGUqIFBhcmVudE1ha2VmaWxlOwotICBjbUdsb2JhbEdlbmVyYXRvciogR2xvYmFsR2VuZXJhdG9yOwotICBjbWFrZSogQ01ha2U7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlPiBNYWtlZmlsZTsKKyAgY21NYWtlZmlsZSogUGFyZW50TWFrZWZpbGUgPSBudWxscHRyOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IEdsb2JhbEdlbmVyYXRvcjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtYWtlPiBDTWFrZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0Q29tbWFuZC5jeHgKaW5kZXggYWNiNzViMi4uMjc5MjE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN1Ym1pdENvbW1hbmQuY3h4CkBAIC04LDEwICs4LDkgQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS92ZWN0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKLQotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0U3VibWl0SGFuZGxlci5oIgogI2luY2x1ZGUgImNtQ29tbWFuZC5oIgpAQCAtMTcyLDggKzE3MSwxMCBAQAogdm9pZCBjbUNUZXN0U3VibWl0Q29tbWFuZDo6Q2hlY2tBcmd1bWVudHMoCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYga2V5d29yZHMpCiB7Ci0gIHRoaXMtPlBhcnRzTWVudGlvbmVkID0gIXRoaXMtPlBhcnRzLmVtcHR5KCkgfHwgY21Db250YWlucyhrZXl3b3JkcywgIlBBUlRTIik7Ci0gIHRoaXMtPkZpbGVzTWVudGlvbmVkID0gIXRoaXMtPkZpbGVzLmVtcHR5KCkgfHwgY21Db250YWlucyhrZXl3b3JkcywgIkZJTEVTIik7CisgIHRoaXMtPlBhcnRzTWVudGlvbmVkID0KKyAgICAhdGhpcy0+UGFydHMuZW1wdHkoKSB8fCBjbTo6Y29udGFpbnMoa2V5d29yZHMsICJQQVJUUyIpOworICB0aGlzLT5GaWxlc01lbnRpb25lZCA9CisgICAgIXRoaXMtPkZpbGVzLmVtcHR5KCkgfHwgY206OmNvbnRhaW5zKGtleXdvcmRzLCAiRklMRVMiKTsKIAogICBjbTo6ZXJhc2VfaWYodGhpcy0+UGFydHMsIFt0aGlzXShzdGQ6OnN0cmluZyBjb25zdCYgYXJnKSAtPiBib29sIHsKICAgICBjbUNUZXN0OjpQYXJ0IHAgPSB0aGlzLT5DVGVzdC0+R2V0UGFydEZyb21OYW1lKGFyZy5jX3N0cigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0SGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN1Ym1pdEhhbmRsZXIuY3h4CmluZGV4IDIyYWI0OGYuLmVhMzZkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRIYW5kbGVyLmN4eApAQCAtOSw5ICs5LDkgQEAKIAogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtX2N1cmwuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3JlYWRlci5oIgotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2N1cmwvY3VybC5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi9yZWFkZXIuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjbUN1cmwuaCIKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0yNjAsMTEgKzI2MSwxMCBAQAogICAgICAgICBjbUNUZXN0U2NyaXB0SGFuZGxlciogY2ggPSB0aGlzLT5DVGVzdC0+R2V0U2NyaXB0SGFuZGxlcigpOwogICAgICAgICBjbWFrZSogY20gPSBjaC0+R2V0Q01ha2UoKTsKICAgICAgICAgaWYgKGNtKSB7Ci0gICAgICAgICAgY29uc3QgY2hhciogc3VicHJvamVjdCA9Ci0gICAgICAgICAgICBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKKyAgICAgICAgICBjbVByb3Agc3VicHJvamVjdCA9IGNtLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiU3ViUHJvamVjdCIpOwogICAgICAgICAgIGlmIChzdWJwcm9qZWN0KSB7CiAgICAgICAgICAgICB1cGxvYWRfYXMgKz0gIiZzdWJwcm9qZWN0PSI7Ci0gICAgICAgICAgICB1cGxvYWRfYXMgKz0gY3Rlc3RfY3VybC5Fc2NhcGUoc3VicHJvamVjdCk7CisgICAgICAgICAgICB1cGxvYWRfYXMgKz0gY3Rlc3RfY3VybC5Fc2NhcGUoKnN1YnByb2plY3QpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtNTA2LDE4ICs1MDYsMTkgQEAKICAgY3VybC5TZXRUaW1lT3V0U2Vjb25kcyhTVUJNSVRfVElNRU9VVF9JTl9TRUNPTkRTX0RFRkFVTFQpOwogICBjdXJsLlNldEh0dHBIZWFkZXJzKHRoaXMtPkh0dHBIZWFkZXJzKTsKICAgc3RkOjpzdHJpbmcgdXJsID0gdGhpcy0+Q1Rlc3QtPkdldFN1Ym1pdFVSTCgpOwotICBzdGQ6OnN0cmluZyBmaWVsZHM7Ci0gIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gdXJsLmZpbmQoJz8nKTsKLSAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIGZpZWxkcyA9IHVybC5zdWJzdHIocG9zICsgMSk7Ci0gICAgdXJsID0gdXJsLnN1YnN0cigwLCBwb3MpOwotICB9CiAgIGlmICghY21IYXNMaXRlcmFsUHJlZml4KHVybCwgImh0dHA6Ly8iKSAmJgogICAgICAgIWNtSGFzTGl0ZXJhbFByZWZpeCh1cmwsICJodHRwczovLyIpKSB7CiAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJPbmx5IGh0dHAgYW5kIGh0dHBzIGFyZSBzdXBwb3J0ZWQgZm9yIENEQVNIX1VQTE9BRFxuIik7CiAgICAgcmV0dXJuIC0xOwogICB9CisKKyAgc3RkOjpzdHJpbmcgZmllbGRzOworICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IHVybC5maW5kKCc/Jyk7CisgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBmaWVsZHMgPSB1cmwuc3Vic3RyKHBvcyArIDEpOworICAgIHVybC5lcmFzZShwb3MpOworICB9CiAgIGJvb2wgaW50ZXJuYWxUZXN0ID0gY21Jc09uKHRoaXMtPkdldE9wdGlvbigiSW50ZXJuYWxUZXN0IikpOwogCiAgIC8vIEdldCBSRVRSWV9DT1VOVCBhbmQgUkVUUllfREVMQVkgdmFsdWVzIGlmIHRoZXkgd2VyZSBzZXQuCkBAIC01NTUsMTEgKzU1NiwxMSBAQAogICAvLyBhICImc3VicHJvamVjdD1zdWJwcm9qZWN0bmFtZSIgdG8gdGhlIGZpcnN0IFBPU1QuCiAgIGNtQ1Rlc3RTY3JpcHRIYW5kbGVyKiBjaCA9IHRoaXMtPkNUZXN0LT5HZXRTY3JpcHRIYW5kbGVyKCk7CiAgIGNtYWtlKiBjbSA9IGNoLT5HZXRDTWFrZSgpOwotICBjb25zdCBjaGFyKiBzdWJwcm9qZWN0ID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJTdWJQcm9qZWN0Iik7CisgIGNtUHJvcCBzdWJwcm9qZWN0ID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJTdWJQcm9qZWN0Iik7CiAgIC8vIFRPRE86IEVuY29kZSB2YWx1ZXMgZm9yIGEgVVJMIGluc3RlYWQgb2YgdHJ1c3RpbmcgY2FsbGVyLgogICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyOwogICBpZiAoc3VicHJvamVjdCkgewotICAgIHN0ciA8PCAic3VicHJvamVjdD0iIDw8IGN1cmwuRXNjYXBlKHN1YnByb2plY3QpIDw8ICImIjsKKyAgICBzdHIgPDwgInN1YnByb2plY3Q9IiA8PCBjdXJsLkVzY2FwZSgqc3VicHJvamVjdCkgPDwgIiYiOwogICB9CiAgIGF1dG8gdGltZU5vdyA9CiAgICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dG9fdGltZV90KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdENvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5jeHgKaW5kZXggMGY5YjY5NS4uYzcxYjQwOSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5jeHgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxzc3RyZWFtPgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0R2VuZXJpY0hhbmRsZXIuaCIKQEAgLTM0LDYgKzM0LDcgQEAKICAgdGhpcy0+QmluZCgiU1RPUF9USU1FIl9zLCB0aGlzLT5TdG9wVGltZSk7CiAgIHRoaXMtPkJpbmQoIlRFU1RfTE9BRCJfcywgdGhpcy0+VGVzdExvYWQpOwogICB0aGlzLT5CaW5kKCJSRVNPVVJDRV9TUEVDX0ZJTEUiX3MsIHRoaXMtPlJlc291cmNlU3BlY0ZpbGUpOworICB0aGlzLT5CaW5kKCJTVE9QX09OX0ZBSUxVUkUiX3MsIHRoaXMtPlN0b3BPbkZhaWx1cmUpOwogfQogCiBjbUNUZXN0R2VuZXJpY0hhbmRsZXIqIGNtQ1Rlc3RUZXN0Q29tbWFuZDo6SW5pdGlhbGl6ZUhhbmRsZXIoKQpAQCAtNTIsNiArNTMsMTMgQEAKICAgICB9CiAgIH0KICAgdGhpcy0+Q1Rlc3QtPlNldFRpbWVPdXQodGltZW91dCk7CisKKyAgY29uc3QgY2hhciogcmVzb3VyY2VTcGVjRmlsZSA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNURVNUX1JFU09VUkNFX1NQRUNfRklMRSIpOworICBpZiAodGhpcy0+UmVzb3VyY2VTcGVjRmlsZS5lbXB0eSgpICYmIHJlc291cmNlU3BlY0ZpbGUpIHsKKyAgICB0aGlzLT5SZXNvdXJjZVNwZWNGaWxlID0gcmVzb3VyY2VTcGVjRmlsZTsKKyAgfQorCiAgIGNtQ1Rlc3RHZW5lcmljSGFuZGxlciogaGFuZGxlciA9IHRoaXMtPkluaXRpYWxpemVBY3R1YWxIYW5kbGVyKCk7CiAgIGlmICghdGhpcy0+U3RhcnQuZW1wdHkoKSB8fCAhdGhpcy0+RW5kLmVtcHR5KCkgfHwgIXRoaXMtPlN0cmlkZS5lbXB0eSgpKSB7CiAgICAgaGFuZGxlci0+U2V0T3B0aW9uKApAQCAtODMsNiArOTEsOSBAQAogICAgIGhhbmRsZXItPlNldE9wdGlvbigiRXhjbHVkZUZpeHR1cmVDbGVhbnVwUmVndWxhckV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5FeGNsdWRlRml4dHVyZUNsZWFudXAuY19zdHIoKSk7CiAgIH0KKyAgaWYgKHRoaXMtPlN0b3BPbkZhaWx1cmUpIHsKKyAgICBoYW5kbGVyLT5TZXRPcHRpb24oIlN0b3BPbkZhaWx1cmUiLCAiT04iKTsKKyAgfQogICBpZiAoIXRoaXMtPlBhcmFsbGVsTGV2ZWwuZW1wdHkoKSkgewogICAgIGhhbmRsZXItPlNldE9wdGlvbigiUGFyYWxsZWxMZXZlbCIsIHRoaXMtPlBhcmFsbGVsTGV2ZWwuY19zdHIoKSk7CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdENvbW1hbmQuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdENvbW1hbmQuaAppbmRleCAyMzQ1YWZiLi43OTI1NTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RDb21tYW5kLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5oCkBAIC02MCw2ICs2MCw3IEBACiAgIHN0ZDo6c3RyaW5nIFN0b3BUaW1lOwogICBzdGQ6OnN0cmluZyBUZXN0TG9hZDsKICAgc3RkOjpzdHJpbmcgUmVzb3VyY2VTcGVjRmlsZTsKKyAgYm9vbCBTdG9wT25GYWlsdXJlID0gZmFsc2U7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5jeHgKaW5kZXggNGYzMjRlYS4uZDBkYmFhZSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5jeHgKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0cmluZz4KQEAgLTE4LDYgKzE4LDkgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgPGNtc3lzL0Jhc2U2NC5oPgpAQCAtMjYsNyArMjksNiBAQAogCiAjaW5jbHVkZSAiY21fdXRmOC5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21DVGVzdFJlc291cmNlR3JvdXBzTGV4ZXJIZWxwZXIuaCIKQEAgLTQwNiw3ICs0MDgsOSBAQAogICAvLyBzdGFydCB0aGUgcmVhbCB0aW1lIGNsb2NrCiAgIGF1dG8gY2xvY2tfc3RhcnQgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKIAotICB0aGlzLT5Qcm9jZXNzRGlyZWN0b3J5KHBhc3NlZCwgZmFpbGVkKTsKKyAgaWYgKCF0aGlzLT5Qcm9jZXNzRGlyZWN0b3J5KHBhc3NlZCwgZmFpbGVkKSkgeworICAgIHJldHVybiAtMTsKKyAgfQogCiAgIGF1dG8gY2xvY2tfZmluaXNoID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAKQEAgLTUxMCw2ICs1MTQsMTAgQEAKICAgICB0aGlzLT5DVGVzdC0+U2V0UGFyYWxsZWxMZXZlbChhdG9pKHRoaXMtPkdldE9wdGlvbigiUGFyYWxsZWxMZXZlbCIpKSk7CiAgIH0KIAorICBpZiAodGhpcy0+R2V0T3B0aW9uKCJTdG9wT25GYWlsdXJlIikpIHsKKyAgICB0aGlzLT5DVGVzdC0+U2V0U3RvcE9uRmFpbHVyZSh0cnVlKTsKKyAgfQorCiAgIGNvbnN0IGNoYXIqIHZhbDsKICAgdmFsID0gdGhpcy0+R2V0T3B0aW9uKCJMYWJlbFJlZ3VsYXJFeHByZXNzaW9uIik7CiAgIGlmICh2YWwpIHsKQEAgLTU0MywyMiArNTUxLDExIEBACiAgIGlmICh2YWwpIHsKICAgICB0aGlzLT5FeGNsdWRlRml4dHVyZUNsZWFudXBSZWdFeHAgPSB2YWw7CiAgIH0KLSAgdGhpcy0+U2V0UmVydW5GYWlsZWQoY21Jc09uKHRoaXMtPkdldE9wdGlvbigiUmVydW5GYWlsZWQiKSkpOwotCiAgIHZhbCA9IHRoaXMtPkdldE9wdGlvbigiUmVzb3VyY2VTcGVjRmlsZSIpOwogICBpZiAodmFsKSB7Ci0gICAgdGhpcy0+VXNlUmVzb3VyY2VTcGVjID0gdHJ1ZTsKICAgICB0aGlzLT5SZXNvdXJjZVNwZWNGaWxlID0gdmFsOwotICAgIGF1dG8gcmVzdWx0ID0gdGhpcy0+UmVzb3VyY2VTcGVjLlJlYWRGcm9tSlNPTkZpbGUodmFsKTsKLSAgICBpZiAocmVzdWx0ICE9IGNtQ1Rlc3RSZXNvdXJjZVNwZWM6OlJlYWRGaWxlUmVzdWx0OjpSRUFEX09LKSB7Ci0gICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAotICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlYWQvcGFyc2UgcmVzb3VyY2Ugc3BlYyBmaWxlICIKLSAgICAgICAgICAgICAgICAgICA8PCB2YWwgPDwgIjogIgotICAgICAgICAgICAgICAgICAgIDw8IGNtQ1Rlc3RSZXNvdXJjZVNwZWM6OlJlc3VsdFRvU3RyaW5nKHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgfQorICB0aGlzLT5TZXRSZXJ1bkZhaWxlZChjbUlzT24odGhpcy0+R2V0T3B0aW9uKCJSZXJ1bkZhaWxlZCIpKSk7CiAKICAgcmV0dXJuIHRydWU7CiB9CkBAIC03MTgsNyArNzE1LDcgQEAKICAgICBjbUNUZXN0VGVzdFByb3BlcnRpZXMmIHAgPSAqcmVzdWx0LlByb3BlcnRpZXM7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbCA6IHAuTGFiZWxzKSB7CiAgICAgICAvLyBvbmx5IHVzZSBsYWJlbHMgZm91bmQgaW4gbGFiZWxzCi0gICAgICBpZiAoY21Db250YWlucyhsYWJlbHMsIGwpKSB7CisgICAgICBpZiAoY206OmNvbnRhaW5zKGxhYmVscywgbCkpIHsKICAgICAgICAgbGFiZWxUaW1lc1tsXSArPQogICAgICAgICAgIHJlc3VsdC5FeGVjdXRpb25UaW1lLmNvdW50KCkgKiByZXN1bHQuUHJvcGVydGllcy0+UHJvY2Vzc29yczsKICAgICAgICAgKytsYWJlbENvdW50c1tsXTsKQEAgLTg2MCwxNCArODU3LDE1IEBACiAKICAgICBpZiAodGhpcy0+VXNlVW5pb24pIHsKICAgICAgIC8vIGlmIGl0IGlzIG5vdCBpbiB0aGUgbGlzdCBhbmQgbm90IGluIHRoZSByZWdleHAgdGhlbiBza2lwCi0gICAgICBpZiAoKCF0aGlzLT5UZXN0c1RvUnVuLmVtcHR5KCkgJiYgIWNtQ29udGFpbnModGhpcy0+VGVzdHNUb1J1biwgY250KSkgJiYKKyAgICAgIGlmICgoIXRoaXMtPlRlc3RzVG9SdW4uZW1wdHkoKSAmJgorICAgICAgICAgICAhY206OmNvbnRhaW5zKHRoaXMtPlRlc3RzVG9SdW4sIGNudCkpICYmCiAgICAgICAgICAgIXRwLklzSW5CYXNlZE9uUkVPcHRpb25zKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAvLyBpcyB0aGlzIHRlc3QgaW4gdGhlIGxpc3Qgb2YgdGVzdHMgdG8gcnVuPyBJZiBub3QgdGhlbiBza2lwIGl0CiAgICAgICBpZiAoKCF0aGlzLT5UZXN0c1RvUnVuLmVtcHR5KCkgJiYKLSAgICAgICAgICAgIWNtQ29udGFpbnModGhpcy0+VGVzdHNUb1J1biwgaW5SRWNudCkpIHx8CisgICAgICAgICAgICFjbTo6Y29udGFpbnModGhpcy0+VGVzdHNUb1J1biwgaW5SRWNudCkpIHx8CiAgICAgICAgICAgIXRwLklzSW5CYXNlZE9uUkVPcHRpb25zKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQpAQCAtODk2LDcgKzg5NCw3IEBACiAgICAgY250Kys7CiAKICAgICAvLyBpZiB0aGlzIHRlc3QgaXMgbm90IGluIG91ciBsaXN0IG9mIHRlc3RzIHRvIHJ1biwgdGhlbiBza2lwIGl0LgotICAgIGlmICghdGhpcy0+VGVzdHNUb1J1bi5lbXB0eSgpICYmICFjbUNvbnRhaW5zKHRoaXMtPlRlc3RzVG9SdW4sIGNudCkpIHsKKyAgICBpZiAoIXRoaXMtPlRlc3RzVG9SdW4uZW1wdHkoKSAmJiAhY206OmNvbnRhaW5zKHRoaXMtPlRlc3RzVG9SdW4sIGNudCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIApAQCAtMTAxNSw3ICsxMDEzLDcgQEAKICAgICAgIGZvciAoYXV0byBzSXQgPSBzZXR1cFJhbmdlLmZpcnN0OyBzSXQgIT0gc2V0dXBSYW5nZS5zZWNvbmQ7ICsrc0l0KSB7CiAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR1cFRlc3ROYW1lID0gc0l0LT5zZWNvbmQtPk5hbWU7CiAgICAgICAgIHRlc3RzW2ldLlJlcXVpcmVTdWNjZXNzRGVwZW5kcy5pbnNlcnQoc2V0dXBUZXN0TmFtZSk7Ci0gICAgICAgIGlmICghY21Db250YWlucyh0ZXN0c1tpXS5EZXBlbmRzLCBzZXR1cFRlc3ROYW1lKSkgeworICAgICAgICBpZiAoIWNtOjpjb250YWlucyh0ZXN0c1tpXS5EZXBlbmRzLCBzZXR1cFRlc3ROYW1lKSkgewogICAgICAgICAgIHRlc3RzW2ldLkRlcGVuZHMucHVzaF9iYWNrKHNldHVwVGVzdE5hbWUpOwogICAgICAgICB9CiAgICAgICB9CkBAIC0xMTE5LDcgKzExMTcsNyBAQAogICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiBpbmRpY2VzID0gY0l0LT5zZWNvbmQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcykgewogICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXFUZXN0TmFtZSA9IHRlc3RzW2luZGV4XS5OYW1lOwotICAgICAgICAgIGlmICghY21Db250YWlucyhwLkRlcGVuZHMsIHJlcVRlc3ROYW1lKSkgeworICAgICAgICAgIGlmICghY206OmNvbnRhaW5zKHAuRGVwZW5kcywgcmVxVGVzdE5hbWUpKSB7CiAgICAgICAgICAgICBwLkRlcGVuZHMucHVzaF9iYWNrKHJlcVRlc3ROYW1lKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExMzIsNyArMTEzMCw3IEBACiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIGluZGljZXMgPSBjSXQtPnNlY29uZDsKICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBpbmRpY2VzKSB7CiAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNldHVwVGVzdE5hbWUgPSB0ZXN0c1tpbmRleF0uTmFtZTsKLSAgICAgICAgICBpZiAoIWNtQ29udGFpbnMocC5EZXBlbmRzLCBzZXR1cFRlc3ROYW1lKSkgeworICAgICAgICAgIGlmICghY206OmNvbnRhaW5zKHAuRGVwZW5kcywgc2V0dXBUZXN0TmFtZSkpIHsKICAgICAgICAgICAgIHAuRGVwZW5kcy5wdXNoX2JhY2soc2V0dXBUZXN0TmFtZSk7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjU5LDcgKzEyNTcsNyBAQAogICByZXR1cm4gcmV0OwogfQogCi12b2lkIGNtQ1Rlc3RUZXN0SGFuZGxlcjo6UHJvY2Vzc0RpcmVjdG9yeShzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHBhc3NlZCwKK2Jvb2wgY21DVGVzdFRlc3RIYW5kbGVyOjpQcm9jZXNzRGlyZWN0b3J5KHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFzc2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBmYWlsZWQpCiB7CiAgIHRoaXMtPkNvbXB1dGVUZXN0TGlzdCgpOwpAQCAtMTI2Nyw3ICsxMjY1LDcgQEAKICAgdGhpcy0+U3RhcnRUZXN0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogICBhdXRvIGVsYXBzZWRfdGltZV9zdGFydCA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCi0gIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyKiBwYXJhbGxlbCA9IG5ldyBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjsKKyAgYXV0byBwYXJhbGxlbCA9IGNtOjptYWtlX3VuaXF1ZTxjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcj4oKTsKICAgcGFyYWxsZWwtPlNldENUZXN0KHRoaXMtPkNUZXN0KTsKICAgcGFyYWxsZWwtPlNldFBhcmFsbGVsTGV2ZWwodGhpcy0+Q1Rlc3QtPkdldFBhcmFsbGVsTGV2ZWwoKSk7CiAgIHBhcmFsbGVsLT5TZXRUZXN0SGFuZGxlcih0aGlzKTsKQEAgLTEyODMsNyArMTI4MSwxNyBAQAogICB9IGVsc2UgewogICAgIHBhcmFsbGVsLT5TZXRUZXN0TG9hZCh0aGlzLT5DVGVzdC0+R2V0VGVzdExvYWQoKSk7CiAgIH0KLSAgaWYgKHRoaXMtPlVzZVJlc291cmNlU3BlYykgeworICBpZiAoIXRoaXMtPlJlc291cmNlU3BlY0ZpbGUuZW1wdHkoKSkgeworICAgIHRoaXMtPlVzZVJlc291cmNlU3BlYyA9IHRydWU7CisgICAgYXV0byByZXN1bHQgPSB0aGlzLT5SZXNvdXJjZVNwZWMuUmVhZEZyb21KU09ORmlsZSh0aGlzLT5SZXNvdXJjZVNwZWNGaWxlKTsKKyAgICBpZiAocmVzdWx0ICE9IGNtQ1Rlc3RSZXNvdXJjZVNwZWM6OlJlYWRGaWxlUmVzdWx0OjpSRUFEX09LKSB7CisgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAorICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlYWQvcGFyc2UgcmVzb3VyY2Ugc3BlYyBmaWxlICIKKyAgICAgICAgICAgICAgICAgICA8PCB0aGlzLT5SZXNvdXJjZVNwZWNGaWxlIDw8ICI6ICIKKyAgICAgICAgICAgICAgICAgICA8PCBjbUNUZXN0UmVzb3VyY2VTcGVjOjpSZXN1bHRUb1N0cmluZyhyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcGFyYWxsZWwtPkluaXRSZXNvdXJjZUFsbG9jYXRvcih0aGlzLT5SZXNvdXJjZVNwZWMpOwogICB9CiAKQEAgLTEzMzgsMTIgKzEzNDYsMTMgQEAKICAgfSBlbHNlIHsKICAgICBwYXJhbGxlbC0+UnVuVGVzdHMoKTsKICAgfQotICBkZWxldGUgcGFyYWxsZWw7CiAgIHRoaXMtPkVuZFRlc3QgPSB0aGlzLT5DVGVzdC0+Q3VycmVudFRpbWUoKTsKICAgdGhpcy0+RW5kVGVzdFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKICAgdGhpcy0+RWxhcHNlZFRlc3RpbmdUaW1lID0KICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSAtIGVsYXBzZWRfdGltZV9zdGFydDsKICAgKnRoaXMtPkxvZ0ZpbGUgPDwgIkVuZCB0ZXN0aW5nOiAiIDw8IHRoaXMtPkNUZXN0LT5DdXJyZW50VGltZSgpIDw8IHN0ZDo6ZW5kbDsKKworICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBjbUNUZXN0VGVzdEhhbmRsZXI6OkdlbmVyYXRlVGVzdENvbW1hbmQoCkBAIC0xNDIzLDYgKzE0MzIsMTIgQEAKICAgICB4bWwuQXR0cmlidXRlKCJuYW1lIiwgIkNvbW1hbmQgTGluZSIpOwogICAgIHhtbC5FbGVtZW50KCJWYWx1ZSIsIHJlc3VsdC5GdWxsQ29tbWFuZExpbmUpOwogICAgIHhtbC5FbmRFbGVtZW50KCk7IC8vIE5hbWVkTWVhc3VyZW1lbnQKKworICAgIHhtbC5TdGFydEVsZW1lbnQoIk5hbWVkTWVhc3VyZW1lbnQiKTsKKyAgICB4bWwuQXR0cmlidXRlKCJ0eXBlIiwgInRleHQvc3RyaW5nIik7CisgICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsICJFbnZpcm9ubWVudCIpOworICAgIHhtbC5FbGVtZW50KCJWYWx1ZSIsIHJlc3VsdC5FbnZpcm9ubWVudCk7CisgICAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gTmFtZWRNZWFzdXJlbWVudAogICAgIGZvciAoYXV0byBjb25zdCYgbWVhc3VyZSA6IHJlc3VsdC5Qcm9wZXJ0aWVzLT5NZWFzdXJlbWVudHMpIHsKICAgICAgIHhtbC5TdGFydEVsZW1lbnQoIk5hbWVkTWVhc3VyZW1lbnQiKTsKICAgICAgIHhtbC5BdHRyaWJ1dGUoInR5cGUiLCAidGV4dC9zdHJpbmciKTsKQEAgLTE3NDIsNiArMTc1NywxMCBAQAogICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RXJyb3JPY2N1cmVkRmxhZygpKSB7CiAgICAgcmV0dXJuOwogICB9CisgIGNvbnN0IGNoYXIqIHNwZWNGaWxlID0gbWYuR2V0RGVmaW5pdGlvbigiQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFIik7CisgIGlmICh0aGlzLT5SZXNvdXJjZVNwZWNGaWxlLmVtcHR5KCkgJiYgc3BlY0ZpbGUpIHsKKyAgICB0aGlzLT5SZXNvdXJjZVNwZWNGaWxlID0gc3BlY0ZpbGU7CisgIH0KICAgY21DVGVzdE9wdGlvbmFsTG9nKHRoaXMtPkNUZXN0LCBIQU5ETEVSX1ZFUkJPU0VfT1VUUFVULAogICAgICAgICAgICAgICAgICAgICAgIkRvbmUgY29uc3RydWN0aW5nIGEgbGlzdCBvZiB0ZXN0cyIgPDwgc3RkOjplbmRsLAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwpAQCAtMTg5NCw3ICsxOTEzLDggQEAKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKLSAgICAgIGludCB2YWwgPSBhdG9pKGxpbmUuc3Vic3RyKDAsIHBvcykuY19zdHIoKSk7CisgICAgICBsaW5lLmVyYXNlKHBvcyk7CisgICAgICBpbnQgdmFsID0gYXRvaShsaW5lLmNfc3RyKCkpOwogICAgICAgdGhpcy0+VGVzdHNUb1J1bi5wdXNoX2JhY2sodmFsKTsKICAgICB9CiAgICAgaWZzLmNsb3NlKCk7CkBAIC0yMDE2LDEzICsyMDM2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RkOjppb3M6OmJpbmFyeQogI2VuZGlmCiAgICAgICAgICAgKTsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBmaWxlX2J1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFyW2xlbiArIDFdOwotICAgICAgICAgIGlmcy5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZpbGVfYnVmZmVyKSwgbGVuKTsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBlbmNvZGVkX2J1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFyW3N0YXRpY19jYXN0PGludD4oCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KGxlbikgKiAxLjUgKyA1LjApXTsKKyAgICAgICAgICBhdXRvIGZpbGVfYnVmZmVyID0gY206Om1ha2VfdW5pcXVlPHVuc2lnbmVkIGNoYXJbXT4obGVuICsgMSk7CisgICAgICAgICAgaWZzLnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmlsZV9idWZmZXIuZ2V0KCkpLCBsZW4pOworICAgICAgICAgIGF1dG8gZW5jb2RlZF9idWZmZXIgPSBjbTo6bWFrZV91bmlxdWU8dW5zaWduZWQgY2hhcltdPigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW4pICogMS41ICsgNS4wKSk7CiAKLSAgICAgICAgICBzaXplX3QgcmxlbiA9Ci0gICAgICAgICAgICBjbXN5c0Jhc2U2NF9FbmNvZGUoZmlsZV9idWZmZXIsIGxlbiwgZW5jb2RlZF9idWZmZXIsIDEpOworICAgICAgICAgIHNpemVfdCBybGVuID0gY21zeXNCYXNlNjRfRW5jb2RlKGZpbGVfYnVmZmVyLmdldCgpLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZF9idWZmZXIuZ2V0KCksIDEpOwogCiAgICAgICAgICAgeG1sLlN0YXJ0RWxlbWVudCgiTmFtZWRNZWFzdXJlbWVudCIpOwogICAgICAgICAgIHhtbC5BdHRyaWJ1dGUobWVhc3VyZW1lbnRmaWxlLm1hdGNoKDEpLmNfc3RyKCksCkBAIC0yMDM5LDggKzIwNTksNiBAQAogICAgICAgICAgIH0KICAgICAgICAgICB4bWwuRWxlbWVudCgiVmFsdWUiLCBvc3RyLnN0cigpKTsKICAgICAgICAgICB4bWwuRW5kRWxlbWVudCgpOyAvLyBOYW1lZE1lYXN1cmVtZW50Ci0gICAgICAgICAgZGVsZXRlW10gZmlsZV9idWZmZXI7Ci0gICAgICAgICAgZGVsZXRlW10gZW5jb2RlZF9idWZmZXI7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGludCBpZHggPSA0OwpAQCAtMjA4NSwxOSArMjEwMywxOCBAQAogICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhpbikpIHsKICAgICBjbXN5czo6aWZzdHJlYW0gZmluKGluKTsKICAgICB1bnNpZ25lZCBsb25nIGZpbGVsZW4gPSBjbVN5c3RlbVRvb2xzOjpGaWxlTGVuZ3RoKGluKTsKLSAgICBjaGFyKiBidWZmID0gbmV3IGNoYXJbZmlsZWxlbiArIDFdOwotICAgIGZpbi5nZXRsaW5lKGJ1ZmYsIGZpbGVsZW4pOworICAgIGF1dG8gYnVmZiA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KGZpbGVsZW4gKyAxKTsKKyAgICBmaW4uZ2V0bGluZShidWZmLmdldCgpLCBmaWxlbGVuKTsKICAgICBidWZmW2Zpbi5nY291bnQoKV0gPSAwOwotICAgIHRoaXMtPlRlc3RzVG9SdW5TdHJpbmcgPSBidWZmOwotICAgIGRlbGV0ZVtdIGJ1ZmY7CisgICAgdGhpcy0+VGVzdHNUb1J1blN0cmluZyA9IGJ1ZmYuZ2V0KCk7CiAgIH0KIH0KIAotYm9vbCBjbUNUZXN0VGVzdEhhbmRsZXI6OkNsZWFuVGVzdE91dHB1dChzdGQ6OnN0cmluZyYgb3V0cHV0LCBzaXplX3QgbGVuZ3RoKQordm9pZCBjbUNUZXN0VGVzdEhhbmRsZXI6OkNsZWFuVGVzdE91dHB1dChzdGQ6OnN0cmluZyYgb3V0cHV0LCBzaXplX3QgbGVuZ3RoKQogewogICBpZiAoIWxlbmd0aCB8fCBsZW5ndGggPj0gb3V0cHV0LnNpemUoKSB8fAogICAgICAgb3V0cHV0LmZpbmQoIkNURVNUX0ZVTExfT1VUUFVUIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm47CiAgIH0KIAogICAvLyBUcnVuY2F0ZSBhdCBnaXZlbiBsZW5ndGggYnV0IGRvIG5vdCBicmVhayBpbiB0aGUgbWlkZGxlIG9mIGEgbXVsdGktYnl0ZQpAQCAtMjExOCw3ICsyMTM1LDcgQEAKICAgICAgICsrY3VycmVudDsKICAgICB9CiAgIH0KLSAgb3V0cHV0ID0gb3V0cHV0LnN1YnN0cigwLCBjdXJyZW50IC0gYmVnaW4pOworICBvdXRwdXQuZXJhc2UoY3VycmVudCAtIGJlZ2luKTsKIAogICAvLyBBcHBlbmQgdHJ1bmNhdGlvbiBtZXNzYWdlLgogICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwpAQCAtMjEyOCw3ICsyMTQ1LDYgQEAKICAgICAgICAgICJvZiAiCiAgICAgICA8PCBsZW5ndGggPDwgIiBieXRlcy5cbiI7CiAgIG91dHB1dCArPSBtc2cuc3RyKCk7Ci0gIHJldHVybiB0cnVlOwogfQogCiBib29sIGNtQ1Rlc3RUZXN0SGFuZGxlcjo6U2V0VGVzdHNQcm9wZXJ0aWVzKApAQCAtMjE0OSwxNiArMjE2NSwxNiBAQAogICB9CiAgICsraXQ7IC8vIHNraXAgUFJPUEVSVElFUwogICBmb3IgKDsgaXQgIT0gYXJncy5lbmQoKTsgKytpdCkgewotICAgIHN0ZDo6c3RyaW5nIGtleSA9ICppdDsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYga2V5ID0gKml0OwogICAgICsraXQ7CiAgICAgaWYgKGl0ID09IGFyZ3MuZW5kKCkpIHsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBzdGQ6OnN0cmluZyB2YWwgPSAqaXQ7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZhbCA9ICppdDsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiB0IDogdGVzdHMpIHsKICAgICAgIGZvciAoY21DVGVzdFRlc3RQcm9wZXJ0aWVzJiBydCA6IHRoaXMtPlRlc3RMaXN0KSB7CiAgICAgICAgIGlmICh0ID09IHJ0Lk5hbWUpIHsKLSAgICAgICAgICBpZiAoa2V5ID09ICJfQkFDS1RSQUNFX1RSSVBMRVMiKSB7CisgICAgICAgICAgaWYgKGtleSA9PSAiX0JBQ0tUUkFDRV9UUklQTEVTIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdHJpcGxlczsKICAgICAgICAgICAgIC8vIGFsbG93IGVtcHR5IGFyZ3MgaW4gdGhlIHRyaXBsZXMKICAgICAgICAgICAgIGNtRXhwYW5kTGlzdCh2YWwsIHRyaXBsZXMsIHRydWUpOwpAQCAtMjE4Miw5MSArMjE5OCw3MCBAQAogICAgICAgICAgICAgICAgIHJ0LkJhY2t0cmFjZSA9IHJ0LkJhY2t0cmFjZS5QdXNoKGZjKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJXSUxMX0ZBSUwiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIldJTExfRkFJTCJfcykgewogICAgICAgICAgICAgcnQuV2lsbEZhaWwgPSBjbUlzT24odmFsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiRElTQUJMRUQiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkRJU0FCTEVEIl9zKSB7CiAgICAgICAgICAgICBydC5EaXNhYmxlZCA9IGNtSXNPbih2YWwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJBVFRBQ0hFRF9GSUxFUyIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiQVRUQUNIRURfRklMRVMiX3MpIHsKICAgICAgICAgICAgIGNtRXhwYW5kTGlzdCh2YWwsIHJ0LkF0dGFjaGVkRmlsZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJBVFRBQ0hFRF9GSUxFU19PTl9GQUlMIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJBVFRBQ0hFRF9GSUxFU19PTl9GQUlMIl9zKSB7CiAgICAgICAgICAgICBjbUV4cGFuZExpc3QodmFsLCBydC5BdHRhY2hPbkZhaWwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJSRVNPVVJDRV9MT0NLIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJSRVNPVVJDRV9MT0NLIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHZhbCA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAKICAgICAgICAgICAgIHJ0LkxvY2tlZFJlc291cmNlcy5pbnNlcnQobHZhbC5iZWdpbigpLCBsdmFsLmVuZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiRklYVFVSRVNfU0VUVVAiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkZJWFRVUkVTX1NFVFVQIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHZhbCA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAKICAgICAgICAgICAgIHJ0LkZpeHR1cmVzU2V0dXAuaW5zZXJ0KGx2YWwuYmVnaW4oKSwgbHZhbC5lbmQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkZJWFRVUkVTX0NMRUFOVVAiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkZJWFRVUkVTX0NMRUFOVVAiX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsdmFsID0gY21FeHBhbmRlZExpc3QodmFsKTsKIAogICAgICAgICAgICAgcnQuRml4dHVyZXNDbGVhbnVwLmluc2VydChsdmFsLmJlZ2luKCksIGx2YWwuZW5kKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJGSVhUVVJFU19SRVFVSVJFRCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRklYVFVSRVNfUkVRVUlSRUQiX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsdmFsID0gY21FeHBhbmRlZExpc3QodmFsKTsKIAogICAgICAgICAgICAgcnQuRml4dHVyZXNSZXF1aXJlZC5pbnNlcnQobHZhbC5iZWdpbigpLCBsdmFsLmVuZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiVElNRU9VVCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiVElNRU9VVCJfcykgewogICAgICAgICAgICAgcnQuVGltZW91dCA9IGNtRHVyYXRpb24oYXRvZih2YWwuY19zdHIoKSkpOwogICAgICAgICAgICAgcnQuRXhwbGljaXRUaW1lb3V0ID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiQ09TVCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiQ09TVCJfcykgewogICAgICAgICAgICAgcnQuQ29zdCA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mKHZhbC5jX3N0cigpKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlJFUVVJUkVEX0ZJTEVTIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJSRVFVSVJFRF9GSUxFUyJfcykgewogICAgICAgICAgICAgY21FeHBhbmRMaXN0KHZhbCwgcnQuUmVxdWlyZWRGaWxlcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlJVTl9TRVJJQUwiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlJVTl9TRVJJQUwiX3MpIHsKICAgICAgICAgICAgIHJ0LlJ1blNlcmlhbCA9IGNtSXNPbih2YWwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04iX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsdmFsID0gY21FeHBhbmRlZExpc3QodmFsKTsKICAgICAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGNyIDogbHZhbCkgewogICAgICAgICAgICAgICBydC5FcnJvclJlZ3VsYXJFeHByZXNzaW9ucy5lbXBsYWNlX2JhY2soY3IsIGNyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiU0tJUF9SRUdVTEFSX0VYUFJFU1NJT04iKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlNLSVBfUkVHVUxBUl9FWFBSRVNTSU9OIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHZhbCA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAgICAgICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjciA6IGx2YWwpIHsKICAgICAgICAgICAgICAgcnQuU2tpcFJlZ3VsYXJFeHByZXNzaW9ucy5lbXBsYWNlX2JhY2soY3IsIGNyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiUFJPQ0VTU09SUyIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUFJPQ0VTU09SUyJfcykgewogICAgICAgICAgICAgcnQuUHJvY2Vzc29ycyA9IGF0b2kodmFsLmNfc3RyKCkpOwogICAgICAgICAgICAgaWYgKHJ0LlByb2Nlc3NvcnMgPCAxKSB7CiAgICAgICAgICAgICAgIHJ0LlByb2Nlc3NvcnMgPSAxOwogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJQUk9DRVNTT1JfQUZGSU5JVFkiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBST0NFU1NPUl9BRkZJTklUWSJfcykgewogICAgICAgICAgICAgcnQuV2FudEFmZmluaXR5ID0gY21Jc09uKHZhbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlJFU09VUkNFX0dST1VQUyIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUkVTT1VSQ0VfR1JPVVBTIl9zKSB7CiAgICAgICAgICAgICBpZiAoIVBhcnNlUmVzb3VyY2VHcm91cHNQcm9wZXJ0eSh2YWwsIHJ0LlJlc291cmNlR3JvdXBzKSkgewogICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlNLSVBfUkVUVVJOX0NPREUiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlNLSVBfUkVUVVJOX0NPREUiX3MpIHsKICAgICAgICAgICAgIHJ0LlNraXBSZXR1cm5Db2RlID0gYXRvaSh2YWwuY19zdHIoKSk7CiAgICAgICAgICAgICBpZiAocnQuU2tpcFJldHVybkNvZGUgPCAwIHx8IHJ0LlNraXBSZXR1cm5Db2RlID4gMjU1KSB7CiAgICAgICAgICAgICAgIHJ0LlNraXBSZXR1cm5Db2RlID0gLTE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkRFUEVORFMiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkRFUEVORFMiX3MpIHsKICAgICAgICAgICAgIGNtRXhwYW5kTGlzdCh2YWwsIHJ0LkRlcGVuZHMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJFTlZJUk9OTUVOVCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRU5WSVJPTk1FTlQiX3MpIHsKICAgICAgICAgICAgIGNtRXhwYW5kTGlzdCh2YWwsIHJ0LkVudmlyb25tZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiTEFCRUxTIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJMQUJFTFMiX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBMYWJlbHMgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogICAgICAgICAgICAgcnQuTGFiZWxzLmluc2VydChydC5MYWJlbHMuZW5kKCksIExhYmVscy5iZWdpbigpLCBMYWJlbHMuZW5kKCkpOwogICAgICAgICAgICAgLy8gc29ydCB0aGUgYXJyYXkKQEAgLTIyNzQsOCArMjI2OSw3IEBACiAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlcwogICAgICAgICAgICAgYXV0byBuZXdfZW5kID0gc3RkOjp1bmlxdWUocnQuTGFiZWxzLmJlZ2luKCksIHJ0LkxhYmVscy5lbmQoKSk7CiAgICAgICAgICAgICBydC5MYWJlbHMuZXJhc2UobmV3X2VuZCwgcnQuTGFiZWxzLmVuZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiTUVBU1VSRU1FTlQiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIk1FQVNVUkVNRU5UIl9zKSB7CiAgICAgICAgICAgICBzaXplX3QgcG9zID0gdmFsLmZpbmRfZmlyc3Rfb2YoJz0nKTsKICAgICAgICAgICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbUtleSA9IHZhbC5zdWJzdHIoMCwgcG9zKTsKQEAgLTIyODQsMTcgKzIyNzgsMTQgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIHJ0Lk1lYXN1cmVtZW50c1t2YWxdID0gIjEiOwogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUEFTU19SRUdVTEFSX0VYUFJFU1NJT04iX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsdmFsID0gY21FeHBhbmRlZExpc3QodmFsKTsKICAgICAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGNyIDogbHZhbCkgewogICAgICAgICAgICAgICBydC5SZXF1aXJlZFJlZ3VsYXJFeHByZXNzaW9ucy5lbXBsYWNlX2JhY2soY3IsIGNyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiV09SS0lOR19ESVJFQ1RPUlkiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIldPUktJTkdfRElSRUNUT1JZIl9zKSB7CiAgICAgICAgICAgICBydC5EaXJlY3RvcnkgPSB2YWw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlRJTUVPVVRfQUZURVJfTUFUQ0giKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlRJTUVPVVRfQUZURVJfTUFUQ0giX3MpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wQXJncyA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAgICAgICAgICAgICBpZiAocHJvcEFyZ3Muc2l6ZSgpICE9IDIpIHsKICAgICAgICAgICAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgV0FSTklORywKQEAgLTIzMzQsMTYgKzIzMjUsMTYgQEAKICAgfQogICArK2l0OyAvLyBza2lwIFBST1BFUlRJRVMKICAgZm9yICg7IGl0ICE9IGFyZ3MuZW5kKCk7ICsraXQpIHsKLSAgICBzdGQ6OnN0cmluZyBrZXkgPSAqaXQ7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGtleSA9ICppdDsKICAgICArK2l0OwogICAgIGlmIChpdCA9PSBhcmdzLmVuZCgpKSB7CiAgICAgICBicmVhazsKICAgICB9Ci0gICAgc3RkOjpzdHJpbmcgdmFsID0gKml0OworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWwgPSAqaXQ7CiAgICAgZm9yIChjbUNUZXN0VGVzdFByb3BlcnRpZXMmIHJ0IDogdGhpcy0+VGVzdExpc3QpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGN3ZCA9IGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiAgICAgICBpZiAoY3dkID09IHJ0LkRpcmVjdG9yeSkgewotICAgICAgICBpZiAoa2V5ID09ICJMQUJFTFMiKSB7CisgICAgICAgIGlmIChrZXkgPT0gIkxBQkVMUyJfcykgewogICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEaXJlY3RvcnlMYWJlbHMgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogICAgICAgICAgIHJ0LkxhYmVscy5pbnNlcnQocnQuTGFiZWxzLmVuZCgpLCBEaXJlY3RvcnlMYWJlbHMuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeUxhYmVscy5lbmQoKSk7CkBAIC0yNDIyLDEwICsyNDEzLDkgQEAKICAgdGVzdC5Ta2lwUmV0dXJuQ29kZSA9IC0xOwogICB0ZXN0LlByZXZpb3VzUnVucyA9IDA7CiAgIGlmICh0aGlzLT5Vc2VJbmNsdWRlUmVnRXhwRmxhZyAmJgotICAgICAgIXRoaXMtPkluY2x1ZGVUZXN0c1JlZ3VsYXJFeHByZXNzaW9uLmZpbmQodGVzdG5hbWUpKSB7Ci0gICAgdGVzdC5Jc0luQmFzZWRPblJFT3B0aW9ucyA9IGZhbHNlOwotICB9IGVsc2UgaWYgKHRoaXMtPlVzZUV4Y2x1ZGVSZWdFeHBGbGFnICYmICF0aGlzLT5Vc2VFeGNsdWRlUmVnRXhwRmlyc3QgJiYKLSAgICAgICAgICAgICB0aGlzLT5FeGNsdWRlVGVzdHNSZWd1bGFyRXhwcmVzc2lvbi5maW5kKHRlc3RuYW1lKSkgeworICAgICAgKCF0aGlzLT5JbmNsdWRlVGVzdHNSZWd1bGFyRXhwcmVzc2lvbi5maW5kKHRlc3RuYW1lKSB8fAorICAgICAgICghdGhpcy0+VXNlRXhjbHVkZVJlZ0V4cEZpcnN0ICYmCisgICAgICAgIHRoaXMtPkV4Y2x1ZGVUZXN0c1JlZ3VsYXJFeHByZXNzaW9uLmZpbmQodGVzdG5hbWUpKSkpIHsKICAgICB0ZXN0LklzSW5CYXNlZE9uUkVPcHRpb25zID0gZmFsc2U7CiAgIH0KICAgdGhpcy0+VGVzdExpc3QucHVzaF9iYWNrKHRlc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5oCmluZGV4IGIxYzg3NTUuLjBkODhjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RIYW5kbGVyLmgKQEAgLTE2OSw2ICsxNjksNyBAQAogICAgIHN0ZDo6c3RyaW5nIFBhdGg7CiAgICAgc3RkOjpzdHJpbmcgUmVhc29uOwogICAgIHN0ZDo6c3RyaW5nIEZ1bGxDb21tYW5kTGluZTsKKyAgICBzdGQ6OnN0cmluZyBFbnZpcm9ubWVudDsKICAgICBjbUR1cmF0aW9uIEV4ZWN1dGlvblRpbWU7CiAgICAgc3RkOjppbnQ2NF90IFJldHVyblZhbHVlOwogICAgIGludCBTdGF0dXM7CkBAIC0yMzUsNyArMjM2LDcgQEAKICAgdm9pZCBBdHRhY2hGaWxlcyhjbVhNTFdyaXRlciYgeG1sLCBjbUNUZXN0VGVzdFJlc3VsdCYgcmVzdWx0KTsKIAogICAvLyEgQ2xlYW4gdGVzdCBvdXRwdXQgdG8gc3BlY2lmaWVkIGxlbmd0aAotICBib29sIENsZWFuVGVzdE91dHB1dChzdGQ6OnN0cmluZyYgb3V0cHV0LCBzaXplX3QgbGVuZ3RoKTsKKyAgdm9pZCBDbGVhblRlc3RPdXRwdXQoc3RkOjpzdHJpbmcmIG91dHB1dCwgc2l6ZV90IGxlbmd0aCk7CiAKICAgY21EdXJhdGlvbiBFbGFwc2VkVGVzdGluZ1RpbWU7CiAKQEAgLTI3OCw3ICsyNzksNyBAQAogICAvKioKICAgICogUnVuIHRoZSB0ZXN0cyBmb3IgYSBkaXJlY3RvcnkgYW5kIGFueSBzdWJkaXJlY3RvcmllcwogICAgKi8KLSAgdm9pZCBQcm9jZXNzRGlyZWN0b3J5KHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFzc2VkLAorICBib29sIFByb2Nlc3NEaXJlY3Rvcnkoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXNzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGZhaWxlZCk7CiAKICAgLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFVwbG9hZENvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RVcGxvYWRDb21tYW5kLmN4eAppbmRleCBlYWVmMWNhLi5mODZlZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFVwbG9hZENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VXBsb2FkQ29tbWFuZC5jeHgKQEAgLTYsOCArNiw3IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KIAogI2luY2x1ZGUgPGNtL3ZlY3Rvcj4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdFVwbG9hZEhhbmRsZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VkMuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5jeHgKaW5kZXggNjAyNmM2OS4uNDUyZDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5jeHgKQEAgLTM4LDcgKzM4LDcgQEAKICAgdGhpcy0+U291cmNlRGlyZWN0b3J5ID0gZGlyOwogfQogCi1ib29sIGNtQ1Rlc3RWQzo6SW5pdGlhbENoZWNrb3V0KGNvbnN0IGNoYXIqIGNvbW1hbmQpCitib29sIGNtQ1Rlc3RWQzo6SW5pdGlhbENoZWNrb3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tYW5kKQogewogICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBIQU5ETEVSX09VVFBVVCwKICAgICAgICAgICAgICAiICAgRmlyc3QgcGVyZm9ybSB0aGUgaW5pdGlhbCBjaGVja291dDogIiA8PCBjb21tYW5kIDw8ICJcbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5oCmluZGV4IDJhNDc2NWQuLjMwMzdlMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VkMuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmgKQEAgLTM2LDcgKzM2LDcgQEAKICAgc3RkOjpzdHJpbmcgR2V0TmlnaHRseVRpbWUoKTsKIAogICAvKiogUHJlcGFyZSB0aGUgd29yayB0cmVlLiAgKi8KLSAgYm9vbCBJbml0aWFsQ2hlY2tvdXQoY29uc3QgY2hhciogY29tbWFuZCk7CisgIGJvb2wgSW5pdGlhbENoZWNrb3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tYW5kKTsKIAogICAvKiogUGVyZm9ybSBjbGVhbnVwIG9wZXJhdGlvbnMgb24gdGhlIHdvcmsgdHJlZS4gICovCiAgIHZvaWQgQ2xlYW51cCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmN4eCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ2FjaGVDb3ZlcmFnZS5jeHgKaW5kZXggOGM0ZGE3NS4uODRkN2RlMCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuY3h4CkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKQEAgLTE5LDcgKzIwLDcgQEAKIHsKIH0KIAotYm9vbCBjbVBhcnNlQ2FjaGVDb3ZlcmFnZTo6TG9hZENvdmVyYWdlRGF0YShjb25zdCBjaGFyKiBkKQorYm9vbCBjbVBhcnNlQ2FjaGVDb3ZlcmFnZTo6TG9hZENvdmVyYWdlRGF0YShzdGQ6OnN0cmluZyBjb25zdCYgZCkKIHsKICAgLy8gbG9hZCBhbGwgdGhlIC5tY292IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CiAgIGNtc3lzOjpEaXJlY3RvcnkgZGlyOwpAQCAtNjksMjYgKzcwLDYgQEAKICAgfQogfQogCi1ib29sIGNtUGFyc2VDYWNoZUNvdmVyYWdlOjpTcGxpdFN0cmluZyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGluZSkKLXsKLSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MxID0gMDsKLSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MyID0gbGluZS5maW5kKCcsJywgMCk7Ci0gIGlmIChwb3MyID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHN0ZDo6c3RyaW5nIGFyZzsKLSAgd2hpbGUgKHBvczIgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICBhcmcgPSBsaW5lLnN1YnN0cihwb3MxLCBwb3MyIC0gcG9zMSk7Ci0gICAgYXJncy5wdXNoX2JhY2soYXJnKTsKLSAgICBwb3MxID0gcG9zMiArIDE7Ci0gICAgcG9zMiA9IGxpbmUuZmluZCgnLCcsIHBvczEpOwotICB9Ci0gIGFyZyA9IGxpbmUuc3Vic3RyKHBvczEpOwotICBhcmdzLnB1c2hfYmFjayhhcmcpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBjbVBhcnNlQ2FjaGVDb3ZlcmFnZTo6UmVhZENNQ292RmlsZShjb25zdCBjaGFyKiBmaWxlKQogewogICBjbXN5czo6aWZzdHJlYW0gaW4oZmlsZSk7CkBAIC05Nyw3ICs3OCw2IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgIHN0ZDo6c3RyaW5nIGxpbmU7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXBhcmF0ZUxpbmU7CiAgIGlmICghY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0oaW4sIGxpbmUpKSB7CiAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJFbXB0eSBmaWxlIDogIiA8PCBmaWxlCkBAIC0xMDYsOCArODYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGxpbmUgPDwgIl1cbiIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBzZXBhcmF0ZUxpbmUuY2xlYXIoKTsKLSAgdGhpcy0+U3BsaXRTdHJpbmcoc2VwYXJhdGVMaW5lLCBsaW5lKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNlcGFyYXRlTGluZSA9CisgICAgY21TeXN0ZW1Ub29sczo6U3BsaXRTdHJpbmcobGluZSwgJywnKTsKICAgaWYgKHNlcGFyYXRlTGluZS5zaXplKCkgIT0gNCB8fCBzZXBhcmF0ZUxpbmVbMF0gIT0gIlJvdXRpbmUiIHx8CiAgICAgICBzZXBhcmF0ZUxpbmVbMV0gIT0gIkxpbmUiIHx8IHNlcGFyYXRlTGluZVsyXSAhPSAiUnRuTGluZSIgfHwKICAgICAgIHNlcGFyYXRlTGluZVszXSAhPSAiQ29kZSIpIHsKQEAgLTEyMCwxMCArMTAwLDggQEAKICAgc3RkOjpzdHJpbmcgcm91dGluZTsKICAgc3RkOjpzdHJpbmcgZmlsZXBhdGg7CiAgIHdoaWxlIChjbVN5c3RlbVRvb2xzOjpHZXRMaW5lRnJvbVN0cmVhbShpbiwgbGluZSkpIHsKLSAgICAvLyBjbGVhciBvdXQgbGluZSBhcmd1bWVudCB2ZWN0b3IKLSAgICBzZXBhcmF0ZUxpbmUuY2xlYXIoKTsKICAgICAvLyBwYXJzZSB0aGUgY29tbWEgc2VwYXJhdGVkIGxpbmUKLSAgICB0aGlzLT5TcGxpdFN0cmluZyhzZXBhcmF0ZUxpbmUsIGxpbmUpOworICAgIHNlcGFyYXRlTGluZSA9IGNtU3lzdGVtVG9vbHM6OlNwbGl0U3RyaW5nKGxpbmUsICcsJyk7CiAgICAgLy8gbWlnaHQgaGF2ZSBtb3JlIGJlY2F1c2UgY29kZSBjb3VsZCBoYXZlIGEgcXVvdGVkICwgaW4gaXQKICAgICAvLyBidXQgd2Ugb25seSBjYXJlIGFib3V0IHRoZSBmaXJzdCAzIGFyZ3MgYW55d2F5CiAgICAgaWYgKHNlcGFyYXRlTGluZS5zaXplKCkgPCA0KSB7CkBAIC0xNTUsNyArMTMzLDcgQEAKICAgICAvLyBpZiB3ZSBoYXZlIGEgcm91dGluZSBuYW1lLCBjaGVjayBmb3IgZW5kIG9mIHJvdXRpbmUKICAgICBlbHNlIHsKICAgICAgIC8vIFRvdGFscyBpbiBhcmcgMCBtYXJrcyB0aGUgZW5kIG9mIGEgcm91dGluZQotICAgICAgaWYgKHNlcGFyYXRlTGluZVswXS5zdWJzdHIoMCwgNikgPT0gIlRvdGFscyIpIHsKKyAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoc2VwYXJhdGVMaW5lWzBdLCAiVG90YWxzIikpIHsKICAgICAgICAgcm91dGluZS5jbGVhcigpOyAvLyBhdCB0aGUgZW5kIG9mIHRoaXMgcm91dGluZQogICAgICAgICBmaWxlcGF0aC5jbGVhcigpOwogICAgICAgICBjb250aW51ZTsgLy8gbW92ZSB0byBuZXh0IGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ2FjaGVDb3ZlcmFnZS5oIGIvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmgKaW5kZXggZTg5YjllNC4uYTgyMDBiNyAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmgKKysrIGIvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmgKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbVBhcnNlTXVtcHNDb3ZlcmFnZS5oIgogCkBAIC0yNiwxMyArMjUsMTEgQEAKIAogcHJvdGVjdGVkOgogICAvLyBpbXBsZW1lbnQgdmlydHVhbCBmcm9tIHBhcmVudAotICBib29sIExvYWRDb3ZlcmFnZURhdGEoY29uc3QgY2hhciogZGlyKSBvdmVycmlkZTsKKyAgYm9vbCBMb2FkQ292ZXJhZ2VEYXRhKHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXIpIG92ZXJyaWRlOwogICAvLyByZW1vdmUgZmlsZXMgd2l0aCBubyBjb3ZlcmFnZQogICB2b2lkIFJlbW92ZVVuQ292ZXJlZEZpbGVzKCk7CiAgIC8vIFJlYWQgYSBzaW5nbGUgbWNvdiBmaWxlCiAgIGJvb2wgUmVhZENNQ292RmlsZShjb25zdCBjaGFyKiBmKTsKLSAgLy8gc3BsaXQgYSBzdHJpbmcgYmFzZWQgb24gLAotICBib29sIFNwbGl0U3RyaW5nKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncywgc3RkOjpzdHJpbmcgY29uc3QmIGxpbmUpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNvYmVydHVyYUNvdmVyYWdlLmN4eCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ29iZXJ0dXJhQ292ZXJhZ2UuY3h4CmluZGV4IDA1ZGE4NGUuLjcxMWE4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ29iZXJ0dXJhQ292ZXJhZ2UuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ29iZXJ0dXJhQ292ZXJhZ2UuY3h4CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgZmFsbHMgd2l0aGluIG91cgogICAgICAgICAgIC8vIHNvdXJjZSBvciBiaW5hcnkgZGlyZWN0b3JpZXMuCiAgICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZVBhdGggOiBGaWxlUGF0aHMpIHsKLSAgICAgICAgICAgIGlmIChmaWxlbmFtZS5maW5kKGZpbGVQYXRoKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoY21IYXNQcmVmaXgoZmlsZW5hbWUsIGZpbGVQYXRoKSkgewogICAgICAgICAgICAgICB0aGlzLT5DdXJGaWxlTmFtZSA9IGZpbGVuYW1lOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuY3h4IGIvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5jeHgKaW5kZXggMWRjNWI3MC4uMTQ0MTdjYyAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5jeHgKQEAgLTE5LDcgKzE5LDcgQEAKIHsKIH0KIAotYm9vbCBjbVBhcnNlR1RNQ292ZXJhZ2U6OkxvYWRDb3ZlcmFnZURhdGEoY29uc3QgY2hhciogZCkKK2Jvb2wgY21QYXJzZUdUTUNvdmVyYWdlOjpMb2FkQ292ZXJhZ2VEYXRhKHN0ZDo6c3RyaW5nIGNvbnN0JiBkKQogewogICAvLyBsb2FkIGFsbCB0aGUgLm1jb3YgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKICAgY21zeXM6OkRpcmVjdG9yeSBkaXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmggYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmgKaW5kZXggZmUwYWUwYi4uNDFjYzdmNSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuaApAQCAtMjUsNyArMjUsNyBAQAogCiBwcm90ZWN0ZWQ6CiAgIC8vIGltcGxlbWVudCB2aXJ0dWFsIGZyb20gcGFyZW50Ci0gIGJvb2wgTG9hZENvdmVyYWdlRGF0YShjb25zdCBjaGFyKiBkaXIpIG92ZXJyaWRlOworICBib29sIExvYWRDb3ZlcmFnZURhdGEoc3RkOjpzdHJpbmcgY29uc3QmIGRpcikgb3ZlcnJpZGU7CiAgIC8vIFJlYWQgYSBzaW5nbGUgbWNvdiBmaWxlCiAgIGJvb2wgUmVhZE1Db3ZGaWxlKGNvbnN0IGNoYXIqIGYpOwogICAvLyBmaW5kIG91dCB3aGF0IGxpbmUgaW4gYSBtdW1wcyBmaWxlIChmaWxlcGF0aCkgdGhlIGdpdmVuIGVudHJ5IHBvaW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuY3h4IGIvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmN4eAppbmRleCBiMTZmMTAxLi5kYzMwNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5jeHgKQEAgLTM5LDkgKzM5LDkgQEAKICAgICAgIHN0ZDo6c3RyaW5nIHR5cGUgPSBsaW5lLnN1YnN0cigwLCBwb3MpOwogICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGxpbmUuc3Vic3RyKHBvcyArIDEpOwogICAgICAgaWYgKHR5cGUgPT0gInBhY2thZ2VzIikgewotICAgICAgICB0aGlzLT5Mb2FkUGFja2FnZXMocGF0aC5jX3N0cigpKTsKKyAgICAgICAgdGhpcy0+TG9hZFBhY2thZ2VzKHBhdGgpOwogICAgICAgfSBlbHNlIGlmICh0eXBlID09ICJjb3ZlcmFnZV9kaXIiKSB7Ci0gICAgICAgIHRoaXMtPkxvYWRDb3ZlcmFnZURhdGEocGF0aC5jX3N0cigpKTsKKyAgICAgICAgdGhpcy0+TG9hZENvdmVyYWdlRGF0YShwYXRoKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAgICAgIlBhcnNlIEVycm9yIGluIE11bXBzIGNvdmVyYWdlIGZpbGUgOlxuIgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgIH0KIH0KIAotYm9vbCBjbVBhcnNlTXVtcHNDb3ZlcmFnZTo6TG9hZFBhY2thZ2VzKGNvbnN0IGNoYXIqIGQpCitib29sIGNtUGFyc2VNdW1wc0NvdmVyYWdlOjpMb2FkUGFja2FnZXMoc3RkOjpzdHJpbmcgY29uc3QmIGQpCiB7CiAgIGNtc3lzOjpHbG9iIGdsb2I7CiAgIGdsb2IuUmVjdXJzZU9uKCk7CkBAIC0xMTMsNyArMTEzLDggQEAKICAgZ2xvYi5GaW5kRmlsZXMocGF0KTsKICAgZm9yIChzdGQ6OnN0cmluZyYgZmlsZSA6IGdsb2IuR2V0RmlsZXMoKSkgewogICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZSk7Ci0gICAgdGhpcy0+Um91dGluZVRvRGlyZWN0b3J5W25hbWUuc3Vic3RyKDAsIG5hbWUuc2l6ZSgpIC0gMildID0gZmlsZTsKKyAgICBuYW1lLmVyYXNlKG5hbWUuc2l6ZSgpIC0gMik7CisgICAgdGhpcy0+Um91dGluZVRvRGlyZWN0b3J5W25hbWVdID0gZmlsZTsKICAgICAvLyBpbml0aWFsaXplIGVhY2ggZmlsZSwgdGhpcyBpcyBsZWZ0IG91dCB1bnRpbCBDRGFzaCBpcyBmaXhlZAogICAgIC8vIHRvIGhhbmRsZSBsYXJnZSBudW1iZXJzIG9mIGZpbGVzCiAgICAgdGhpcy0+SW5pdGlhbGl6ZU11bXBzRmlsZShmaWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5oIGIvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmgKaW5kZXggMmM1NDQ5NS4uOGMwODcwMiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmgKKysrIGIvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmgKQEAgLTI5LDEwICsyOSwxMCBAQAogcHJvdGVjdGVkOgogICAvLyBzdWIgY2xhc3NlcyB3aWxsIHVzZSB0aGlzIHRvCiAgIC8vIGxvYWQgYWxsIGNvdmVyYWdlIGZpbGVzIGZvdW5kIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkKLSAgdmlydHVhbCBib29sIExvYWRDb3ZlcmFnZURhdGEoY29uc3QgY2hhciogZCkgPSAwOworICB2aXJ0dWFsIGJvb2wgTG9hZENvdmVyYWdlRGF0YShzdGQ6OnN0cmluZyBjb25zdCYgZCkgPSAwOwogICAvLyBzZWFyY2ggdGhlIHBhY2thZ2UgZGlyZWN0b3J5IGZvciBtdW1wcyBmaWxlcyBhbmQgZmlsbAogICAvLyBpbiB0aGUgUm91dGluZVRvRGlyZWN0b3J5IG1hcAotICBib29sIExvYWRQYWNrYWdlcyhjb25zdCBjaGFyKiBkaXIpOworICBib29sIExvYWRQYWNrYWdlcyhzdGQ6OnN0cmluZyBjb25zdCYgZGlyKTsKICAgLy8gaW5pdGlhbGl6ZSB0aGUgY292ZXJhZ2UgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIG11bXBzIGZpbGUKICAgdm9pZCBJbml0aWFsaXplTXVtcHNGaWxlKHN0ZDo6c3RyaW5nJiBmaWxlKTsKICAgLy8gRmluZCBtdW1wcyBmaWxlIGZvciByb3V0aW5lCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZVBIUENvdmVyYWdlLmN4eCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlUEhQQ292ZXJhZ2UuY3h4CmluZGV4IGE0OTRiOTIuLjA0NGY1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlUEhQQ292ZXJhZ2UuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlUEhQQ292ZXJhZ2UuY3h4CkBAIC0zLDYgKzMsOCBAQAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0cmluZz4KIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAKQEAgLTE0MiwxNyArMTQ0LDE1IEBACiAgIGludCBzaXplID0gMDsKICAgaWYgKHRoaXMtPlJlYWRJbnQoaW4sIHNpemUpKSB7CiAgICAgc2l6ZSsrOyAvLyBhZGQgb25lIGZvciBudWxsIHRlcm1pbmF0aW9uCi0gICAgY2hhciogcyA9IG5ldyBjaGFyW3NpemUgKyAxXTsKKyAgICBhdXRvIHMgPSBjbTo6bWFrZV91bmlxdWU8Y2hhcltdPihzaXplICsgMSk7CiAgICAgLy8gcmVhZCBvcGVuIHF1b3RlCiAgICAgaWYgKGluLmdldChjKSAmJiBjICE9ICciJykgewotICAgICAgZGVsZXRlW10gczsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gcmVhZCB0aGUgc3RyaW5nIGRhdGEKLSAgICBpbi5yZWFkKHMsIHNpemUgLSAxKTsKKyAgICBpbi5yZWFkKHMuZ2V0KCksIHNpemUgLSAxKTsKICAgICBzW3NpemUgLSAxXSA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgZmlsZU5hbWUgPSBzOwotICAgIGRlbGV0ZVtdIHM7CisgICAgc3RkOjpzdHJpbmcgZmlsZU5hbWUgPSBzLmdldCgpOwogICAgIC8vIHJlYWQgY2xvc2UgcXVvdGUKICAgICBpZiAoaW4uZ2V0KGMpICYmIGMgIT0gJyInKSB7CiAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmN4eAppbmRleCA2MDk3YWE1Li5hNTQ5MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmN4eApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxjc2lnbmFsPgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCkBAIC0xNiwxNCArMTcsMTMgQEAKICNpbmNsdWRlICJjbUdldFBpcGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaWYgZGVmaW5lZChfV0lOMzIpCi0jICBpbmNsdWRlICJjbV9rd2ltbC5oIgorIyAgaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KICNlbmRpZgotI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNkZWZpbmUgQ01fUFJPQ0VTU19CVUZfU0laRSA2NTUzNgogCi1jbVByb2Nlc3M6OmNtUHJvY2VzcyhjbUNUZXN0UnVuVGVzdCYgcnVubmVyKQotICA6IFJ1bm5lcihydW5uZXIpCitjbVByb2Nlc3M6OmNtUHJvY2VzcyhzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lcikKKyAgOiBSdW5uZXIoc3RkOjptb3ZlKHJ1bm5lcikpCiAgICwgQ29udihjbVByb2Nlc3NPdXRwdXQ6OlVURjgsIENNX1BST0NFU1NfQlVGX1NJWkUpCiB7CiAgIHRoaXMtPlRpbWVvdXQgPSBjbUR1cmF0aW9uOjp6ZXJvKCk7CkBAIC02OSw3ICs2OSw3IEBACiAgIGNtOjp1dl90aW1lcl9wdHIgdGltZXI7CiAgIGludCBzdGF0dXMgPSB0aW1lci5pbml0KGxvb3AsIHRoaXMpOwogICBpZiAoc3RhdHVzICE9IDApIHsKLSAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAorICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLT5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIkVycm9yIGluaXRpYWxpemluZyB0aW1lcjogIiA8PCB1dl9zdHJlcnJvcihzdGF0dXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODQsNyArODQsNyBAQAogICBpbnQgZmRzWzJdID0geyAtMSwgLTEgfTsKICAgc3RhdHVzID0gY21HZXRQaXBlcyhmZHMpOwogICBpZiAoc3RhdHVzICE9IDApIHsKLSAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAorICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLT5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIkVycm9yIGluaXRpYWxpemluZyBwaXBlOiAiIDw8IHV2X3N0cmVycm9yKHN0YXR1cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgIHV2X3JlYWRfc3RhcnQocGlwZV9yZWFkZXIsICZjbVByb2Nlc3M6Ok9uQWxsb2NhdGVDQiwgJmNtUHJvY2Vzczo6T25SZWFkQ0IpOwogCiAgIGlmIChzdGF0dXMgIT0gMCkgewotICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCisgICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXItPkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAiRXJyb3Igc3RhcnRpbmcgcmVhZCBldmVudHM6ICIgPDwgdXZfc3RyZXJyb3Ioc3RhdHVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM1LDcgKzEzNSw3IEBACiAKICAgc3RhdHVzID0gdGhpcy0+UHJvY2Vzcy5zcGF3bihsb29wLCBvcHRpb25zLCB0aGlzKTsKICAgaWYgKHN0YXR1cyAhPSAwKSB7Ci0gICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXIuR2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKKyAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci0+R2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJQcm9jZXNzIG5vdCBzdGFydGVkXG4gIiA8PCB0aGlzLT5Db21tYW5kIDw8ICJcblsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdXZfc3RyZXJyb3Ioc3RhdHVzKSA8PCAiXVxuIik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUyLDcgKzE1Miw3IEBACiAKIHZvaWQgY21Qcm9jZXNzOjpTdGFydFRpbWVyKCkKIHsKLSAgYXV0byBwcm9wZXJ0aWVzID0gdGhpcy0+UnVubmVyLkdldFRlc3RQcm9wZXJ0aWVzKCk7CisgIGF1dG8gcHJvcGVydGllcyA9IHRoaXMtPlJ1bm5lci0+R2V0VGVzdFByb3BlcnRpZXMoKTsKICAgYXV0byBtc2VjID0KICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPih0aGlzLT5UaW1lb3V0KTsKIApAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgY206OmFwcGVuZCh0aGlzLT5PdXRwdXQsIHN0cmRhdGEpOwogCiAgICAgd2hpbGUgKHRoaXMtPk91dHB1dC5HZXRMaW5lKGxpbmUpKSB7Ci0gICAgICB0aGlzLT5SdW5uZXIuQ2hlY2tPdXRwdXQobGluZSk7CisgICAgICB0aGlzLT5SdW5uZXItPkNoZWNrT3V0cHV0KGxpbmUpOwogICAgICAgbGluZS5jbGVhcigpOwogICAgIH0KIApAQCAtMjM2LDEzICsyMzYsMTMgQEAKICAgLy8gVGhlIHByb2Nlc3Mgd2lsbCBwcm92aWRlIG5vIG1vcmUgZGF0YS4KICAgaWYgKG5yZWFkICE9IFVWX0VPRikgewogICAgIGF1dG8gZXJyb3IgPSBzdGF0aWNfY2FzdDxpbnQ+KG5yZWFkKTsKLSAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAorICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLT5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIkVycm9yIHJlYWRpbmcgc3RyZWFtOiAiIDw8IHV2X3N0cmVycm9yKGVycm9yKSA8PCBzdGQ6OmVuZGwpOwogICB9CiAKICAgLy8gTG9vayBmb3IgcGFydGlhbCBsYXN0IGxpbmVzLgogICBpZiAodGhpcy0+T3V0cHV0LkdldExhc3QobGluZSkpIHsKLSAgICB0aGlzLT5SdW5uZXIuQ2hlY2tPdXRwdXQobGluZSk7CisgICAgdGhpcy0+UnVubmVyLT5DaGVja091dHB1dChsaW5lKTsKICAgfQogCiAgIHRoaXMtPlJlYWRIYW5kbGVDbG9zZWQgPSB0cnVlOwpAQCAtMzM5LDcgKzMzOSw3IEBACiAgIGlmICh0aGlzLT5Ub3RhbFRpbWUgPD0gY21EdXJhdGlvbjo6emVybygpKSB7CiAgICAgdGhpcy0+VG90YWxUaW1lID0gY21EdXJhdGlvbjo6emVybygpOwogICB9Ci0gIHRoaXMtPlJ1bm5lci5GaW5hbGl6ZVRlc3QoKTsKKyAgdGhpcy0+UnVubmVyLT5GaW5hbGl6ZVRlc3QoKTsKIH0KIAogY21Qcm9jZXNzOjpTdGF0ZSBjbVByb2Nlc3M6OkdldFByb2Nlc3NTdGF0dXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5oIGIvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5oCmluZGV4IGVhNzJhMjYuLjFlNjU3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVByb2Nlc3MuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmgKQEAgLTYsMTQgKzYsMTUgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKLSNpbmNsdWRlICJjbV91di5oIgotCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgogI2luY2x1ZGUgImNtVVZIYW5kbGVQdHIuaCIKQEAgLTI4LDcgKzI5LDcgQEAKIGNsYXNzIGNtUHJvY2VzcwogewogcHVibGljOgotICBleHBsaWNpdCBjbVByb2Nlc3MoY21DVGVzdFJ1blRlc3QmIHJ1bm5lcik7CisgIGV4cGxpY2l0IGNtUHJvY2VzcyhzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lcik7CiAgIH5jbVByb2Nlc3MoKTsKICAgdm9pZCBTZXRDb21tYW5kKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21tYW5kKTsKICAgdm9pZCBTZXRDb21tYW5kQXJndW1lbnRzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJnKTsKQEAgLTcwLDYgKzcxLDExIEBACiAgIEV4Y2VwdGlvbiBHZXRFeGl0RXhjZXB0aW9uKCk7CiAgIHN0ZDo6c3RyaW5nIEdldEV4aXRFeGNlcHRpb25TdHJpbmcoKTsKIAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IEdldFJ1bm5lcigpCisgIHsKKyAgICByZXR1cm4gc3RkOjptb3ZlKHRoaXMtPlJ1bm5lcik7CisgIH0KKwogcHJpdmF0ZToKICAgY21EdXJhdGlvbiBUaW1lb3V0OwogICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IFN0YXJ0VGltZTsKQEAgLTgyLDcgKzg4LDcgQEAKICAgY206OnV2X3RpbWVyX3B0ciBUaW1lcjsKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gQnVmOwogCi0gIGNtQ1Rlc3RSdW5UZXN0JiBSdW5uZXI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gUnVubmVyOwogICBjbVByb2Nlc3NPdXRwdXQgQ29udjsKICAgaW50IFNpZ25hbCA9IDA7CiAgIGNtUHJvY2Vzczo6U3RhdGUgUHJvY2Vzc1N0YXRlID0gY21Qcm9jZXNzOjpTdGF0ZTo6U3RhcnRpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF9mZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZlYXR1cmVzLmNtYWtlCmluZGV4IDJhNjc3NDguLmU3MjZmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZlYXR1cmVzLmNtYWtlCkBAIC0zNiw4ICszNiw2IEBACiAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlteXG5dKmljcGM6IGNvbW1hbmQgbGluZSB3YXJuaW5nICMxMDEyMTogb3ZlcnJpZGluZyBbXlxuXSoiICIiIGNoZWNrX291dHB1dCAiJHtjaGVja19vdXRwdXR9IikKICAgICAjIEZpbHRlciBvdXQgbGQgd2FybmluZ3MuCiAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlteXG5dKmxkOiB3YXJuaW5nOiBbXlxuXSoiICIiIGNoZWNrX291dHB1dCAiJHtjaGVja19vdXRwdXR9IikKLSAgICAjIEZpbHRlciBvdXQgQ1VEQSBpbnN0YWxsYXRpb24gd2FybmluZ3MuCi0gICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlteXG5dKmNsYW5nOiB3YXJuaW5nOiBVbmtub3duIENVREEgdmVyc2lvblteXG5dKiIgIiIgY2hlY2tfb3V0cHV0ICIke2NoZWNrX291dHB1dH0iKQogICAgICMgSWYgdXNpbmcgdGhlIGZlYXR1cmUgY2F1c2VzIHdhcm5pbmdzLCB0cmVhdCBpdCBhcyBicm9rZW4vdW5hdmFpbGFibGUuCiAgICAgaWYoY2hlY2tfb3V0cHV0IE1BVENIRVMgIihefFsgOl0pW1d3XVtBYV1bUnJdW05uXVtJaV1bTm5dW0dnXSIpCiAgICAgICBzZXQoQ01ha2VfSEFWRV9DWFhfJHtGRUFUVVJFfSBPRkYgQ0FDSEUgSU5URVJOQUwgIlRSWV9DT01QSUxFIiBGT1JDRSkKQEAgLTY1LDMgKzYzLDggQEAKICAgc2V0KENNYWtlX0hBVkVfQ1hYX1VOSVFVRV9QVFIgMSkKIGVuZGlmKCkKIGNtX2NoZWNrX2N4eF9mZWF0dXJlKHVuaXF1ZV9wdHIpCitpZiAoTk9UIENNQUtFX0NYWF9TVEFOREFSRCBMRVNTICIxNyIpCisgIGNtX2NoZWNrX2N4eF9mZWF0dXJlKGZpbGVzeXN0ZW0pCitlbHNlKCkKKyAgc2V0KENNYWtlX0hBVkVfQ1hYX0ZJTEVTWVNURU0gRkFMU0UpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF9maWxlc3lzdGVtLmN4eCBiL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZpbGVzeXN0ZW0uY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDhkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF9maWxlc3lzdGVtLmN4eApAQCAtMCwwICsxLDEwIEBACisKKyNpbmNsdWRlIDxmaWxlc3lzdGVtPgorCitpbnQgbWFpbigpCit7CisgIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwMSgiL2EvYi9jIik7CisgIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwMigiL2EvYi9jIik7CisKKyAgcmV0dXJuIHAxID09IHAyID8gMCA6IDE7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NjbWFrZS5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NjbWFrZS5jeHgKaW5kZXggMDFmY2U4NS4uODVlMjU2YiAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9jY21ha2UuY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY2NtYWtlLmN4eApAQCAtMiwxMSArMiwxNSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAKICNpbmNsdWRlIDxjc2lnbmFsPgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCiAjaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaHh4IgogCiAjaW5jbHVkZSAiY21DdXJzZXNDb2xvci5oIgpAQCAtMTYsNiArMjAsNyBAQAogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCkBAIC01Myw3ICs1OCwxMiBAQAogewogICBpZiAoY21DdXJzZXNGb3JtOjpDdXJyZW50Rm9ybSkgewogICAgIGVuZHdpbigpOwotICAgIGluaXRzY3IoKTsgICAgICAgICAgICAvKiBJbml0aWFsaXphdGlvbiAqLworICAgIGlmIChpbml0c2NyKCkgPT0gbnVsbHB0cikgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZXJybXNnW10gPSAiRXJyb3I6IG5jdXJzZXMgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iOworICAgICAgYXV0byByID0gd3JpdGUoU1RERVJSX0ZJTEVOTywgZXJybXNnLCBzaXplb2YoZXJybXNnKSAtIDEpOworICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4ocik7CisgICAgICBleGl0KDEpOworICAgIH0KICAgICBub2VjaG8oKTsgICAgICAgICAgICAgLyogRWNobyBvZmYgKi8KICAgICBjYnJlYWsoKTsgICAgICAgICAgICAgLyogbmwtIG9yIGNyIG5vdCBuZWVkZWQgKi8KICAgICBrZXlwYWQoc3Rkc2NyLCB0cnVlKTsgLyogVXNlIGtleSBzeW1ib2xzIGFzIEtFWV9ET1dOICovCkBAIC0xMTEsOCArMTIxLDggQEAKIAogICBzdGQ6OnN0cmluZyBjYWNoZURpciA9IGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiAgIGZvciAoaSA9IDE7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7Ci0gICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgICBpZiAoYXJnLmZpbmQoIi1CIiwgMCkgPT0gMCkgeworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgPSBhcmdzW2ldOworICAgIGlmIChjbUhhc1ByZWZpeChhcmcsICItQiIpKSB7CiAgICAgICBjYWNoZURpciA9IGFyZy5zdWJzdHIoMik7CiAgICAgfQogICB9CkBAIC0xMjMsNyArMTMzLDEwIEBACiAgICAgY21DdXJzZXNGb3JtOjpEZWJ1Z1N0YXJ0KCk7CiAgIH0KIAotICBpbml0c2NyKCk7ICAgICAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gKi8KKyAgaWYgKGluaXRzY3IoKSA9PSBudWxscHRyKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogbmN1cnNlcyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworICAgIGV4aXQoMSk7CisgIH0KICAgbm9lY2hvKCk7ICAgICAgICAgICAgIC8qIEVjaG8gb2ZmICovCiAgIGNicmVhaygpOyAgICAgICAgICAgICAvKiBubC0gb3IgY3Igbm90IG5lZWRlZCAqLwogICBrZXlwYWQoc3Rkc2NyLCB0cnVlKTsgLyogVXNlIGtleSBzeW1ib2xzIGFzIEtFWV9ET1dOICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZS5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZS5jeHgKaW5kZXggNGQzMTMxYi4uMzVmMDlmZCAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUuY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlLmN4eApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImNtQ3Vyc2VzUGF0aFdpZGdldC5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzU3RyaW5nV2lkZ2V0LmgiCiAjaW5jbHVkZSAiY21DdXJzZXNXaWRnZXQuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtNDgsNDIgKzQ5LDQyIEBACiAgICAgdGhpcy0+SXNOZXdMYWJlbCA9IGNtOjptYWtlX3VuaXF1ZTxjbUN1cnNlc0xhYmVsV2lkZ2V0PigxLCAxLCAxLCAxLCAiICIpOwogICB9CiAKLSAgY29uc3QgY2hhciogdmFsdWUgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGtleSk7CisgIGNtUHJvcCB2YWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KTsKICAgYXNzZXJ0KHZhbHVlKTsKICAgc3dpdGNoIChzdGF0ZS0+R2V0Q2FjaGVFbnRyeVR5cGUoa2V5KSkgewogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpCT09MOiB7CiAgICAgICBhdXRvIGJ3ID0gY206Om1ha2VfdW5pcXVlPGNtQ3Vyc2VzQm9vbFdpZGdldD4odGhpcy0+RW50cnlXaWR0aCwgMSwgMSwgMSk7Ci0gICAgICBidy0+U2V0VmFsdWVBc0Jvb2woY21Jc09uKHZhbHVlKSk7CisgICAgICBidy0+U2V0VmFsdWVBc0Jvb2woY21Jc09uKCp2YWx1ZSkpOwogICAgICAgdGhpcy0+RW50cnkgPSBzdGQ6Om1vdmUoYncpOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpQQVRIOiB7CiAgICAgICBhdXRvIHB3ID0gY206Om1ha2VfdW5pcXVlPGNtQ3Vyc2VzUGF0aFdpZGdldD4odGhpcy0+RW50cnlXaWR0aCwgMSwgMSwgMSk7Ci0gICAgICBwdy0+U2V0U3RyaW5nKHZhbHVlKTsKKyAgICAgIHB3LT5TZXRTdHJpbmcoKnZhbHVlKTsKICAgICAgIHRoaXMtPkVudHJ5ID0gc3RkOjptb3ZlKHB3KTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RklMRVBBVEg6IHsKICAgICAgIGF1dG8gZnB3ID0KICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtQ3Vyc2VzRmlsZVBhdGhXaWRnZXQ+KHRoaXMtPkVudHJ5V2lkdGgsIDEsIDEsIDEpOwotICAgICAgZnB3LT5TZXRTdHJpbmcodmFsdWUpOworICAgICAgZnB3LT5TZXRTdHJpbmcoKnZhbHVlKTsKICAgICAgIHRoaXMtPkVudHJ5ID0gc3RkOjptb3ZlKGZwdyk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNUUklORzogewotICAgICAgY29uc3QgY2hhciogc3RyaW5nc1Byb3AgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgIlNUUklOR1MiKTsKKyAgICAgIGNtUHJvcCBzdHJpbmdzUHJvcCA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCAiU1RSSU5HUyIpOwogICAgICAgaWYgKHN0cmluZ3NQcm9wKSB7CiAgICAgICAgIGF1dG8gb3cgPQogICAgICAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUN1cnNlc09wdGlvbnNXaWRnZXQ+KHRoaXMtPkVudHJ5V2lkdGgsIDEsIDEsIDEpOwotICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvcHQgOiBjbUV4cGFuZGVkTGlzdChzdHJpbmdzUHJvcCkpIHsKKyAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3B0IDogY21FeHBhbmRlZExpc3QoKnN0cmluZ3NQcm9wKSkgewogICAgICAgICAgIG93LT5BZGRPcHRpb24ob3B0KTsKICAgICAgICAgfQotICAgICAgICBvdy0+U2V0T3B0aW9uKHZhbHVlKTsKKyAgICAgICAgb3ctPlNldE9wdGlvbigqdmFsdWUpOwogICAgICAgICB0aGlzLT5FbnRyeSA9IHN0ZDo6bW92ZShvdyk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBhdXRvIHN3ID0KICAgICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21DdXJzZXNTdHJpbmdXaWRnZXQ+KHRoaXMtPkVudHJ5V2lkdGgsIDEsIDEsIDEpOwotICAgICAgICBzdy0+U2V0U3RyaW5nKHZhbHVlKTsKKyAgICAgICAgc3ctPlNldFN0cmluZygqdmFsdWUpOwogICAgICAgICB0aGlzLT5FbnRyeSA9IHN0ZDo6bW92ZShzdyk7CiAgICAgICB9CiAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDb2xvci5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQ29sb3IuY3h4CmluZGV4IDY0MWQ0OGMuLmMwYjQ2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDb2xvci5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmN4eApAQCAtMiw2ICsyLDEyIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUN1cnNlc0NvbG9yLmgiCiAKKyNpbmNsdWRlIDxjY3R5cGU+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dXRpbGl0eT4KKwogI2luY2x1ZGUgImNtQ3Vyc2VzU3RhbmRhcmRJbmNsdWRlcy5oIgogCiBib29sIGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpCkBAIC0xOSwxMSArMjUsNTQgQEAKICAgaWYgKEhhc0NvbG9ycygpKSB7CiAgICAgc3RhcnRfY29sb3IoKTsKICAgICB1c2VfZGVmYXVsdF9jb2xvcnMoKTsKLSAgICBpbml0X3BhaXIoY21DdXJzZXNDb2xvcjo6Qm9vbE9mZiwgQ09MT1JfUkVELCAtMSk7Ci0gICAgaW5pdF9wYWlyKGNtQ3Vyc2VzQ29sb3I6OkJvb2xPbiwgQ09MT1JfR1JFRU4sIC0xKTsKLSAgICBpbml0X3BhaXIoY21DdXJzZXNDb2xvcjo6U3RyaW5nLCBDT0xPUl9CTFVFLCAtMSk7Ci0gICAgaW5pdF9wYWlyKGNtQ3Vyc2VzQ29sb3I6OlBhdGgsIENPTE9SX1lFTExPVywgLTEpOwotICAgIGluaXRfcGFpcihjbUN1cnNlc0NvbG9yOjpPcHRpb25zLCBDT0xPUl9NQUdFTlRBLCAtMSk7CisgICAgaW5pdF9wYWlyKEJvb2xPZmYsIEdldENvbG9yKCdOJywgQ09MT1JfUkVEKSwgLTEpOworICAgIGluaXRfcGFpcihCb29sT24sIEdldENvbG9yKCdZJywgQ09MT1JfR1JFRU4pLCAtMSk7CisgICAgaW5pdF9wYWlyKFN0cmluZywgR2V0Q29sb3IoJ1MnLCBDT0xPUl9DWUFOKSwgLTEpOworICAgIGluaXRfcGFpcihQYXRoLCBHZXRDb2xvcignUCcsIENPTE9SX1lFTExPVyksIC0xKTsKKyAgICBpbml0X3BhaXIoQ2hvaWNlLCBHZXRDb2xvcignQycsIENPTE9SX01BR0VOVEEpLCAtMSk7CiAgIH0KICNlbmRpZgogfQorCitzaG9ydCBjbUN1cnNlc0NvbG9yOjpHZXRDb2xvcihjaGFyIGlkLCBzaG9ydCBmYWxsYmFjaykKK3sKKyAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxjaGFyLCBzaG9ydD4gZW52OworCisgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICBpZiAoYXV0byogdiA9IGdldGVudigiQ0NNQUtFX0NPTE9SUyIpKSB7CisgICAgICB3aGlsZSAodlswXSAmJiB2WzFdICYmIHZbMV0gPT0gJz0nKSB7CisgICAgICAgIGF1dG8gY29uc3QgbiA9IHN0ZDo6dG91cHBlcigqdik7CisKKyAgICAgICAgY2hhciBidWZmZXJbMTJdOworICAgICAgICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICAgICAgaWYgKGF1dG8qIGNvbnN0IGUgPSBzdHJjaHIodiwgJzonKSkgeworICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGUgLSB2KSA+IHNpemVvZihidWZmZXIpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzdHJuY3B5KGJ1ZmZlciwgdiArIDIsIHN0YXRpY19jYXN0PHNpemVfdD4oZSAtIHYgLSAyKSk7CisgICAgICAgICAgdiA9IGUgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGF1dG8gY29uc3QgbCA9IHN0cmxlbih2KTsKKyAgICAgICAgICBpZiAobCA+IHNpemVvZihidWZmZXIpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzdHJuY3B5KGJ1ZmZlciwgdiArIDIsIGwgLSAyKTsKKyAgICAgICAgICB2ICs9IGw7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNvbnN0IGMgPSBhdG9pKGJ1ZmZlcik7CisgICAgICAgIGlmIChjICYmIGMgPCBDT0xPUlMpIHsKKyAgICAgICAgICBlbnYuZW1wbGFjZShuLCBzdGF0aWNfY2FzdDxzaG9ydD4oYykpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgfQorCisgIGF1dG8gY29uc3QgaXRlciA9IGVudi5maW5kKGlkKTsKKyAgcmV0dXJuIChpdGVyID09IGVudi5lbmQoKSA/IGZhbGxiYWNrIDogaXRlci0+c2Vjb25kKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDb2xvci5oIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmgKaW5kZXggNzhjYTUyYy4uZjgzMjY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmgKQEAgLTEzLDEyICsxMywxNSBAQAogICAgIEJvb2xPbiwKICAgICBTdHJpbmcsCiAgICAgUGF0aCwKLSAgICBPcHRpb25zCisgICAgQ2hvaWNlCiAgIH07CiAKICAgc3RhdGljIGJvb2wgSGFzQ29sb3JzKCk7CiAKICAgc3RhdGljIHZvaWQgSW5pdENvbG9ycygpOworCitwcm90ZWN0ZWQ6CisgIHN0YXRpYyBzaG9ydCBHZXRDb2xvcihjaGFyIGlkLCBzaG9ydCBmYWxsYmFjayk7CiB9OwogCiAjZW5kaWYgLy8gY21DdXJzZXNDb2xvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtLmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNMb25nTWVzc2FnZUZvcm0uY3h4CmluZGV4IGFmZDJiNmIuLjU5MWM1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNMb25nTWVzc2FnZUZvcm0uY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNMb25nTWVzc2FnZUZvcm0uY3h4CkBAIC00MSw3ICs0MSw4IEBACiAgIHRoaXMtPlRpdGxlID0gdGl0bGU7CiAKICAgaWYgKCFvdXRwdXQuZW1wdHkoKSAmJiB0aGlzLT5NZXNzYWdlcy5zaXplKCkgPCBNQVhfQ09OVEVOVF9TSVpFKSB7Ci0gICAgdGhpcy0+TWVzc2FnZXMuYXBwZW5kKCJcbiIgKyBvdXRwdXQpOworICAgIHRoaXMtPk1lc3NhZ2VzLnB1c2hfYmFjaygnXG4nKTsKKyAgICB0aGlzLT5NZXNzYWdlcy5hcHBlbmQob3V0cHV0KTsKICAgICBmb3JtX2RyaXZlcih0aGlzLT5Gb3JtLCBSRVFfTkVXX0xJTkUpOwogICAgIHRoaXMtPkRyYXdNZXNzYWdlKG91dHB1dC5jX3N0cigpKTsKICAgfQpAQCAtNjcsNyArNjgsNyBAQAogICAgIGJhcltpXSA9ICcgJzsKICAgfQogICBpbnQgd2lkdGg7Ci0gIGlmICh4IDwgY21DdXJzZXNNYWluRm9ybTo6TUFYX1dJRFRIKSB7CisgIGlmICh4ID49IDAgJiYgeCA8IGNtQ3Vyc2VzTWFpbkZvcm06Ok1BWF9XSURUSCkgewogICAgIHdpZHRoID0geDsKICAgfSBlbHNlIHsKICAgICB3aWR0aCA9IGNtQ3Vyc2VzTWFpbkZvcm06Ok1BWF9XSURUSCAtIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTWFpbkZvcm0uY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc01haW5Gb3JtLmN4eAppbmRleCA2NTM3NmQxLi42ZmM1NTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTWFpbkZvcm0uY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5jeHgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJjbUN1cnNlc1N0YW5kYXJkSW5jbHVkZXMuaCIKICNpbmNsdWRlICJjbUN1cnNlc1N0cmluZ1dpZGdldC5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzV2lkZ2V0LmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTE2MSw3ICsxNjIsNyBAQAogICAgIC8vIElmIG5vcm1hbCBtb2RlLCBjb3VudCBvbmx5IG5vbi1hZHZhbmNlZCBlbnRyaWVzCiAgICAgdGhpcy0+TnVtYmVyT2ZWaXNpYmxlRW50cmllcyA9IDA7CiAgICAgZm9yIChjbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUmIGVudHJ5IDogdGhpcy0+RW50cmllcykgewotICAgICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9CisgICAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShlbnRyeS5HZXRWYWx1ZSgpKTsKICAgICAgIGJvb2wgYWR2YW5jZWQgPQogICAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woCkBAIC0xODIsNyArMTgzLDcgQEAKIAogICAvLyBBc3NpZ24gZmllbGRzCiAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKLSAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KKyAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoZW50cnkuR2V0VmFsdWUoKSk7CiAgICAgYm9vbCBhZHZhbmNlZCA9CiAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woCkBAIC0yNDEsNyArMjQyLDcgQEAKICAgICAvLyBJZiBub3JtYWwsIGRpc3BsYXkgb25seSBub24tYWR2YW5jZWQgZW50cmllcwogICAgIHRoaXMtPk51bWJlck9mVmlzaWJsZUVudHJpZXMgPSAwOwogICAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoZW50cnkuR2V0VmFsdWUoKSk7CiAgICAgICBib29sIGFkdmFuY2VkID0KICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKApAQCAtMjU5LDcgKzI2MCw3IEBACiAgICAgYm9vbCBpc05ld1BhZ2U7CiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoZW50cnkuR2V0VmFsdWUoKSk7CiAgICAgICBib29sIGFkdmFuY2VkID0KICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKApAQCAtNDA1LDExICs0MDYsMTIgQEAKICAgICAvLyBHZXQgdGhlIGhlbHAgc3RyaW5nIG9mIHRoZSBjdXJyZW50IGVudHJ5CiAgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgaGVscCBzdHJpbmcKICAgICBhdXRvIGNtYWtlU3RhdGUgPSB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpOwotICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPSBjbWFrZVN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUobGFiZWxWYWx1ZSk7CisgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPSBjbWFrZVN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUobGFiZWxWYWx1ZSk7CiAgICAgaWYgKGV4aXN0aW5nVmFsdWUpIHsKLSAgICAgIGF1dG8gaGVscCA9IGNtYWtlU3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShsYWJlbFZhbHVlLCAiSEVMUFNUUklORyIpOworICAgICAgY21Qcm9wIGhlbHAgPQorICAgICAgICBjbWFrZVN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkobGFiZWxWYWx1ZSwgIkhFTFBTVFJJTkciKTsKICAgICAgIGlmIChoZWxwKSB7Ci0gICAgICAgIGJhciArPSBoZWxwOworICAgICAgICBiYXIgKz0gKmhlbHA7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC02MTYsMTAgKzYxOCwxMCBAQAogewogICBmb3IgKGNtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZSYgZW50cnkgOiB0aGlzLT5FbnRyaWVzKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNhY2hlS2V5ID0gZW50cnkuS2V5OwotICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0KICAgICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShjYWNoZUtleSk7CiAgICAgaWYgKGV4aXN0aW5nVmFsdWUpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIG9sZFZhbHVlID0gZXhpc3RpbmdWYWx1ZTsKKyAgICAgIHN0ZDo6c3RyaW5nIG9sZFZhbHVlID0gKmV4aXN0aW5nVmFsdWU7CiAgICAgICBzdGQ6OnN0cmluZyBuZXdWYWx1ZSA9IGVudHJ5LkVudHJ5LT5HZXRWYWx1ZSgpOwogICAgICAgc3RkOjpzdHJpbmcgZml4ZWRPbGRWYWx1ZTsKICAgICAgIHN0ZDo6c3RyaW5nIGZpeGVkTmV3VmFsdWU7CkBAIC04MDIsOSArODA0LDkgQEAKICAgICAgICAgY21DdXJzZXNXaWRnZXQqIGxibCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y21DdXJzZXNXaWRnZXQqPigKICAgICAgICAgICBmaWVsZF91c2VycHRyKHRoaXMtPkZpZWxkc1tmaW5kZXggLSAyXSkpOwogICAgICAgICBjb25zdCBjaGFyKiBjdXJGaWVsZCA9IGxibC0+R2V0VmFsdWUoKTsKLSAgICAgICAgY29uc3QgY2hhciogaGVscFN0cmluZyA9IG51bGxwdHI7CisgICAgICAgIGNtUHJvcCBoZWxwU3RyaW5nID0gbnVsbHB0cjsKIAotICAgICAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KKyAgICAgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShjdXJGaWVsZCk7CiAgICAgICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7CiAgICAgICAgICAgaGVscFN0cmluZyA9IHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlQcm9wZXJ0eSgKQEAgLTgxMyw3ICs4MTUsNyBAQAogICAgICAgICBpZiAoaGVscFN0cmluZykgewogICAgICAgICAgIHRoaXMtPkhlbHBNZXNzYWdlWzFdID0KICAgICAgICAgICAgIGNtU3RyQ2F0KCJDdXJyZW50IG9wdGlvbiBpczogIiwgY3VyRmllbGQsICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAiSGVscCBzdHJpbmcgZm9yIHRoaXMgb3B0aW9uIGlzOiAiLCBoZWxwU3RyaW5nLCAnXG4nKTsKKyAgICAgICAgICAgICAgICAgICAgICJIZWxwIHN0cmluZyBmb3IgdGhpcyBvcHRpb24gaXM6ICIsICpoZWxwU3RyaW5nLCAnXG4nKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICB0aGlzLT5IZWxwTWVzc2FnZVsxXSA9ICIiOwogICAgICAgICB9CkBAIC04NTIsMTEgKzg1NCw3IEBACiAgICAgICB9CiAgICAgICAvLyBzd2l0Y2ggYWR2YW5jZWQgb24vb2ZmCiAgICAgICBlbHNlIGlmIChrZXkgPT0gJ3QnKSB7Ci0gICAgICAgIGlmICh0aGlzLT5BZHZhbmNlZE1vZGUpIHsKLSAgICAgICAgICB0aGlzLT5BZHZhbmNlZE1vZGUgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aGlzLT5BZHZhbmNlZE1vZGUgPSB0cnVlOwotICAgICAgICB9CisgICAgICAgIHRoaXMtPkFkdmFuY2VkTW9kZSA9ICF0aGlzLT5BZHZhbmNlZE1vZGU7CiAgICAgICAgIGdldG1heHl4KHN0ZHNjciwgeSwgeCk7CiAgICAgICAgIHRoaXMtPlJlUG9zdCgpOwogICAgICAgICB0aGlzLT5SZW5kZXIoMSwgMSwgeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzT3B0aW9uc1dpZGdldC5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzT3B0aW9uc1dpZGdldC5jeHgKaW5kZXggYTE1MjQxZi4uOGRmMzJlMiAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc09wdGlvbnNXaWRnZXQuY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNPcHRpb25zV2lkZ2V0LmN4eApAQCAtMTcsOCArMTcsOCBAQAogICAvLyB0aGUgd2lkZ2V0IGludG8gYSBzdHJpbmcgd2lkZ2V0IGF0IHNvbWUgcG9pbnQuICBCT09MIGlzIHNhZmUgZm9yCiAgIC8vIG5vdy4KICAgaWYgKGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpKSB7Ci0gICAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6T3B0aW9ucykpOwotICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6Ok9wdGlvbnMpKTsKKyAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQ09MT1JfUEFJUihjbUN1cnNlc0NvbG9yOjpDaG9pY2UpKTsKKyAgICBzZXRfZmllbGRfYmFjayh0aGlzLT5GaWVsZCwgQ09MT1JfUEFJUihjbUN1cnNlc0NvbG9yOjpDaG9pY2UpKTsKICAgfSBlbHNlIHsKICAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQV9OT1JNQUwpOwogICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBBX1NUQU5ET1VUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNTdHJpbmdXaWRnZXQuY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc1N0cmluZ1dpZGdldC5jeHgKaW5kZXggYzYyOTQ3OC4uNDgzMGQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc1N0cmluZ1dpZGdldC5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc1N0cmluZ1dpZGdldC5jeHgKQEAgLTEwNSwxMiArMTA1LDEwIEBACiAgICAgaWYgKCF0aGlzLT5JbkVkaXQgJiYgKGtleSAhPSAxMCAmJiBrZXkgIT0gS0VZX0VOVEVSICYmIGtleSAhPSAnaScpKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIC8vIGVudGVyIGVkaXQgd2l0aCByZXR1cm4gYW5kIGkgKHZpbSBiaW5kaW5nKQotICAgIGlmICghdGhpcy0+SW5FZGl0ICYmIChrZXkgPT0gMTAgfHwga2V5ID09IEtFWV9FTlRFUiB8fCBrZXkgPT0gJ2knKSkgewotICAgICAgdGhpcy0+T25SZXR1cm4oZm0sIHcpOwotICAgIH0KLSAgICAvLyBsZWF2ZSBlZGl0IHdpdGggcmV0dXJuIChidXQgbm90IGkgLS0gbm90IGEgdG9nZ2xlKQotICAgIGVsc2UgaWYgKHRoaXMtPkluRWRpdCAmJiAoa2V5ID09IDEwIHx8IGtleSA9PSBLRVlfRU5URVIpKSB7CisgICAgLy8gdG9nZ2xlIGVkaXQgd2l0aCByZXR1cm4KKyAgICBpZiAoKGtleSA9PSAxMCB8fCBrZXkgPT0gS0VZX0VOVEVSKQorICAgICAgICAvLyBlbnRlciBlZGl0IHdpdGggaSAoYW5kIG5vdC1lZGl0IG1vZGUpCisgICAgICAgIHx8ICghdGhpcy0+SW5FZGl0ICYmIGtleSA9PSAnaScpKSB7CiAgICAgICB0aGlzLT5PblJldHVybihmbSwgdyk7CiAgICAgfSBlbHNlIGlmIChrZXkgPT0gS0VZX0RPV04gfHwga2V5ID09IGN0cmwoJ24nKSB8fCBrZXkgPT0gS0VZX1VQIHx8CiAgICAgICAgICAgICAgICBrZXkgPT0gY3RybCgncCcpIHx8IGtleSA9PSBLRVlfTlBBR0UgfHwga2V5ID09IGN0cmwoJ2QnKSB8fApkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5jIGIvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5jCmluZGV4IDE1ZGNkYTAuLmVjNzQyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuYworKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmMKQEAgLTI3ODcsNyArMjc4Nyw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGNtTGlzdEZpbGVMZXhlcl9Ub2tlbiogY21MaXN0RmlsZUxleGVyX1NjYW4oY21MaXN0RmlsZUxleGVyKiBsZXhlcikKIHsKLSAgaWYgKCFsZXhlci0+ZmlsZSkgeworICBpZiAoIWxleGVyLT5maWxlICYmICFsZXhlci0+c3RyaW5nX2J1ZmZlcikgewogICAgIHJldHVybiAwOwogICB9CiAgIGlmIChjbUxpc3RGaWxlTGV4ZXJfeXlsZXgobGV4ZXItPnNjYW5uZXIsIGxleGVyKSkgewpAQCAtMjgwMSwyMSArMjgwMSwxMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBsb25nIGNtTGlzdEZpbGVMZXhlcl9HZXRDdXJyZW50TGluZShjbUxpc3RGaWxlTGV4ZXIqIGxleGVyKQogewotICBpZiAobGV4ZXItPmZpbGUpIHsKLSAgICByZXR1cm4gbGV4ZXItPmxpbmU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KKyAgcmV0dXJuIGxleGVyLT5saW5lOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGxvbmcgY21MaXN0RmlsZUxleGVyX0dldEN1cnJlbnRDb2x1bW4oY21MaXN0RmlsZUxleGVyKiBsZXhlcikKIHsKLSAgaWYgKGxleGVyLT5maWxlKSB7Ci0gICAgcmV0dXJuIGxleGVyLT5jb2x1bW47Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KKyAgcmV0dXJuIGxleGVyLT5jb2x1bW47CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5pbi5sIGIvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5pbi5sCmluZGV4IGZkZjE0ZDIuLjk0Y2Y4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuaW4ubAorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmluLmwKQEAgLTUwMCw3ICs1MDAsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBjbUxpc3RGaWxlTGV4ZXJfVG9rZW4qIGNtTGlzdEZpbGVMZXhlcl9TY2FuKGNtTGlzdEZpbGVMZXhlciogbGV4ZXIpCiB7Ci0gIGlmICghbGV4ZXItPmZpbGUpIHsKKyAgaWYgKCFsZXhlci0+ZmlsZSAmJiAhbGV4ZXItPnN0cmluZ19idWZmZXIpIHsKICAgICByZXR1cm4gMDsKICAgfQogICBpZiAoY21MaXN0RmlsZUxleGVyX3l5bGV4KGxleGVyLT5zY2FubmVyLCBsZXhlcikpIHsKQEAgLTUxNCwyMSArNTE0LDEzIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGxvbmcgY21MaXN0RmlsZUxleGVyX0dldEN1cnJlbnRMaW5lKGNtTGlzdEZpbGVMZXhlciogbGV4ZXIpCiB7Ci0gIGlmIChsZXhlci0+ZmlsZSkgewotICAgIHJldHVybiBsZXhlci0+bGluZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gMDsKLSAgfQorICByZXR1cm4gbGV4ZXItPmxpbmU7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogbG9uZyBjbUxpc3RGaWxlTGV4ZXJfR2V0Q3VycmVudENvbHVtbihjbUxpc3RGaWxlTGV4ZXIqIGxleGVyKQogewotICBpZiAobGV4ZXItPmZpbGUpIHsKLSAgICByZXR1cm4gbGV4ZXItPmNvbHVtbjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gMDsKLSAgfQorICByZXR1cm4gbGV4ZXItPmNvbHVtbjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VMaXN0cy50eHQKaW5kZXggOThkZDBlMi4uZTZkNmIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dApAQCAtMywxMTEgKzMsNzkgQEAKIAogcHJvamVjdChRdERpYWxvZykKIENNYWtlX09QVElPTkFMX0NPTVBPTkVOVChjbWFrZS1ndWkpCi1maW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCkKLWlmIChRdDVXaWRnZXRzX0ZPVU5EKQotICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7UXQ1V2lkZ2V0c19JTkNMVURFX0RJUlN9KQotICBhZGRfZGVmaW5pdGlvbnMoJHtRdDVXaWRnZXRzX0RFRklOSVRPTlN9KQotICBtYWNybyhxdDRfd3JhcF91aSkKLSAgICBxdDVfd3JhcF91aSgke0FSR059KQotICBlbmRtYWNybygpCi0gIG1hY3JvKHF0NF93cmFwX2NwcCkKLSAgICBxdDVfd3JhcF9jcHAoJHtBUkdOfSkKLSAgZW5kbWFjcm8oKQotICBtYWNybyhxdDRfYWRkX3Jlc291cmNlcykKLSAgICBxdDVfYWRkX3Jlc291cmNlcygke0FSR059KQotICBlbmRtYWNybygpCitmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkKIAotICBzZXQoQ01ha2VfUVRfTElCUkFSSUVTICR7UXQ1V2lkZ2V0c19MSUJSQVJJRVN9KQotICBzZXQoUVRfUVRNQUlOX0xJQlJBUlkgJHtRdDVDb3JlX1FUTUFJTl9MSUJSQVJJRVN9KQorc2V0KENNYWtlX1FUX0VYVFJBX0xJQlJBUklFUykKIAotICAjIFRyeSB0byBmaW5kIHRoZSBwYWNrYWdlIFdpbkV4dHJhcyBmb3IgdGhlIHRhc2sgYmFyIHByb2dyZXNzCi0gIGlmKFdJTjMyKQotICAgIGZpbmRfcGFja2FnZShRdDVXaW5FeHRyYXMgUVVJRVQpCi0gICAgaWYgKFF0NVdpbkV4dHJhc19GT1VORCkKLSAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtRdDVXaW5FeHRyYXNfSU5DTFVERV9ESVJTfSkKLSAgICAgIGFkZF9kZWZpbml0aW9ucygtRFFUX1dJTkVYVFJBUykKLSAgICAgIGxpc3QoQVBQRU5EIENNYWtlX1FUX0xJQlJBUklFUyAke1F0NVdpbkV4dHJhc19MSUJSQVJJRVN9KQotICAgIGVuZGlmKCkKKyMgVHJ5IHRvIGZpbmQgdGhlIHBhY2thZ2UgV2luRXh0cmFzIGZvciB0aGUgdGFzayBiYXIgcHJvZ3Jlc3MKK2lmKFdJTjMyKQorICBmaW5kX3BhY2thZ2UoUXQ1V2luRXh0cmFzIFFVSUVUKQorICBpZiAoUXQ1V2luRXh0cmFzX0ZPVU5EKQorICAgIGFkZF9kZWZpbml0aW9ucygtRFFUX1dJTkVYVFJBUykKKyAgICBsaXN0KEFQUEVORCBDTWFrZV9RVF9FWFRSQV9MSUJSQVJJRVMgUXQ1OjpXaW5FeHRyYXMpCiAgIGVuZGlmKCkKK2VuZGlmKCkKIAotICAjIFJlbW92ZSB0aGlzIHdoZW4gdGhlIG1pbmltdW0gdmVyc2lvbiBvZiBRdCBpcyA0LjYuCi0gIGFkZF9kZWZpbml0aW9ucygtRFFUX0RJU0FCTEVfREVQUkVDQVRFRF9CRUZPUkU9MCkKK3NldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAke1F0NVdpZGdldHNfRVhFQ1VUQUJMRV9DT01QSUxFX0ZMQUdTfSIpCiAKLSAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9ICR7UXQ1V2lkZ2V0c19FWEVDVVRBQkxFX0NPTVBJTEVfRkxBR1N9IikKK2lmKENNYWtlX1FUX1NUQVRJQ19RWGNiSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTKQorICBsaXN0KEFQUEVORCBDTWFrZV9RVF9FWFRSQV9MSUJSQVJJRVMgJHtDTWFrZV9RVF9TVEFUSUNfUVhjYkludGVncmF0aW9uUGx1Z2luX0xJQlJBUklFU30pCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgQ01ha2VTZXR1cC5jeHgKKyAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIFVTRV9RWGNiSW50ZWdyYXRpb25QbHVnaW4pCitlbmRpZigpCiAKLSAgaWYoQ01ha2VfUVRfU1RBVElDX1FYY2JJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVMpCi0gICAgbGlzdChBUFBFTkQgQ01ha2VfUVRfTElCUkFSSUVTICR7Q01ha2VfUVRfU1RBVElDX1FYY2JJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVN9KQotICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgQ01ha2VTZXR1cC5jeHgKLSAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgVVNFX1FYY2JJbnRlZ3JhdGlvblBsdWdpbikKLSAgZW5kaWYoKQoraWYoQ01ha2VfUVRfU1RBVElDX1FXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTKQorICBsaXN0KEFQUEVORCBDTWFrZV9RVF9FWFRSQV9MSUJSQVJJRVMgJHtDTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVN9KQorICBzZXRfcHJvcGVydHkoU09VUkNFIENNYWtlU2V0dXAuY3h4CisgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBVU0VfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbikKK2VuZGlmKCkKIAotICBpZihDTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVMpCi0gICAgbGlzdChBUFBFTkQgQ01ha2VfUVRfTElCUkFSSUVTICR7Q01ha2VfUVRfU1RBVElDX1FXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTfSkKLSAgICBzZXRfcHJvcGVydHkoU09VUkNFIENNYWtlU2V0dXAuY3h4Ci0gICAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIFVTRV9RV2luZG93c0ludGVncmF0aW9uUGx1Z2luKQotICBlbmRpZigpCi0KLSAgIyBXZSBuZWVkIHRvIGluc3RhbGwgcGxhdGZvcm0gcGx1Z2luIGFuZCBhZGQgcXQuY29uZiBmb3IgUXQ1IG9uIE1hYyBhbmQgV2luZG93cy4KLSAgIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcGFydCBvZiBRdDUgQ01ha2Ugc2NyaXB0cywgYnV0IHVuZm9ydHVuYXRlbHkKLSAgIyBRdDUgc3VwcG9ydCBpcyBtaXNzaW5nIHRoZXJlLgotICBpZihDTWFrZV9JTlNUQUxMX0RFUEVOREVOQ0lFUyBBTkQgKEFQUExFIE9SIFdJTjMyKSkKLSAgICBtYWNybyhpbnN0YWxsX3F0NV9wbHVnaW4gX3F0X3BsdWdpbl9uYW1lIF9xdF9wbHVnaW5zX3ZhcikKLSAgICAgIGdldF90YXJnZXRfcHJvcGVydHkoX3F0X3BsdWdpbl9wYXRoICIke19xdF9wbHVnaW5fbmFtZX0iIExPQ0FUSU9OKQotICAgICAgaWYoRVhJU1RTICIke19xdF9wbHVnaW5fcGF0aH0iKQotICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9xdF9wbHVnaW5fZmlsZSAiJHtfcXRfcGx1Z2luX3BhdGh9IiBOQU1FKQotICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9xdF9wbHVnaW5fdHlwZSAiJHtfcXRfcGx1Z2luX3BhdGh9IiBQQVRIKQotICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9xdF9wbHVnaW5fdHlwZSAiJHtfcXRfcGx1Z2luX3R5cGV9IiBOQU1FKQotICAgICAgICBpZihBUFBMRSkKLSAgICAgICAgICBzZXQoX3F0X3BsdWdpbl9kaXIgIlBsdWdJbnMiKQotICAgICAgICBlbHNlaWYoV0lOMzIpCi0gICAgICAgICAgc2V0KF9xdF9wbHVnaW5fZGlyICJwbHVnaW5zIikKLSAgICAgICAgZW5kaWYoKQotICAgICAgICBzZXQoX3F0X3BsdWdpbl9kZXN0ICIke19xdF9wbHVnaW5fZGlyfS8ke19xdF9wbHVnaW5fdHlwZX0iKQotICAgICAgICBpbnN0YWxsKEZJTEVTICIke19xdF9wbHVnaW5fcGF0aH0iCi0gICAgICAgICAgREVTVElOQVRJT04gIiR7X3F0X3BsdWdpbl9kZXN0fSIKLSAgICAgICAgICAke0NPTVBPTkVOVH0pCi0gICAgICAgIHNldCgke19xdF9wbHVnaW5zX3Zhcn0KLSAgICAgICAgICAiJHske19xdF9wbHVnaW5zX3Zhcn19O1wkRU5We0RFU1RESVJ9XCR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7X3F0X3BsdWdpbl9kZXN0fS8ke19xdF9wbHVnaW5fZmlsZX0iKQotICAgICAgZWxzZSgpCi0gICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlFUIHBsdWdpbiAke19xdF9wbHVnaW5fbmFtZX0gbm90IGZvdW5kIikKKyMgV2UgbmVlZCB0byBpbnN0YWxsIHBsYXRmb3JtIHBsdWdpbiBhbmQgYWRkIHF0LmNvbmYgZm9yIFF0NSBvbiBNYWMgYW5kIFdpbmRvd3MuCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIFF0NSBDTWFrZSBzY3JpcHRzLCBidXQgdW5mb3J0dW5hdGVseQorIyBRdDUgc3VwcG9ydCBpcyBtaXNzaW5nIHRoZXJlLgoraWYoQ01ha2VfSU5TVEFMTF9ERVBFTkRFTkNJRVMgQU5EIChBUFBMRSBPUiBXSU4zMikpCisgIG1hY3JvKGluc3RhbGxfcXQ1X3BsdWdpbiBfcXRfcGx1Z2luX25hbWUgX3F0X3BsdWdpbnNfdmFyKQorICAgIGdldF90YXJnZXRfcHJvcGVydHkoX3F0X3BsdWdpbl9wYXRoICIke19xdF9wbHVnaW5fbmFtZX0iIExPQ0FUSU9OKQorICAgIGlmKEVYSVNUUyAiJHtfcXRfcGx1Z2luX3BhdGh9IikKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX3F0X3BsdWdpbl9maWxlICIke19xdF9wbHVnaW5fcGF0aH0iIE5BTUUpCisgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9xdF9wbHVnaW5fdHlwZSAiJHtfcXRfcGx1Z2luX3BhdGh9IiBQQVRIKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfcXRfcGx1Z2luX3R5cGUgIiR7X3F0X3BsdWdpbl90eXBlfSIgTkFNRSkKKyAgICAgIGlmKEFQUExFKQorICAgICAgICBzZXQoX3F0X3BsdWdpbl9kaXIgIlBsdWdJbnMiKQorICAgICAgZWxzZWlmKFdJTjMyKQorICAgICAgICBzZXQoX3F0X3BsdWdpbl9kaXIgInBsdWdpbnMiKQogICAgICAgZW5kaWYoKQotICAgIGVuZG1hY3JvKCkKLSAgICBpZihBUFBMRSkKLSAgICAgIGluc3RhbGxfcXQ1X3BsdWdpbigiUXQ1OjpRQ29jb2FJbnRlZ3JhdGlvblBsdWdpbiIgUVRfUExVR0lOUykKLSAgICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9xdC5jb25mIgotICAgICAgICAiW1BhdGhzXVxuUGx1Z2lucyA9ICR7X3F0X3BsdWdpbl9kaXJ9XG4iKQotICAgICAgaW5zdGFsbChGSUxFUyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3F0LmNvbmYiCi0gICAgICAgIERFU1RJTkFUSU9OICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9SZXNvdXJjZXMiCisgICAgICBzZXQoX3F0X3BsdWdpbl9kZXN0ICIke19xdF9wbHVnaW5fZGlyfS8ke19xdF9wbHVnaW5fdHlwZX0iKQorICAgICAgaW5zdGFsbChGSUxFUyAiJHtfcXRfcGx1Z2luX3BhdGh9IgorICAgICAgICBERVNUSU5BVElPTiAiJHtfcXRfcGx1Z2luX2Rlc3R9IgogICAgICAgICAke0NPTVBPTkVOVH0pCi0gICAgZWxzZWlmKFdJTjMyIEFORCBOT1QgQ01ha2VfUVRfU1RBVElDX1FXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTKQotICAgICAgaW5zdGFsbF9xdDVfcGx1Z2luKCJRdDU6OlFXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW4iIFFUX1BMVUdJTlMpCi0gICAgICBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcXQuY29uZiIKLSAgICAgICAgIltQYXRoc11cblBsdWdpbnMgPSAuLi8ke19xdF9wbHVnaW5fZGlyfVxuIikKLSAgICAgIGluc3RhbGwoRklMRVMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9xdC5jb25mIgotICAgICAgICBERVNUSU5BVElPTiBiaW4KLSAgICAgICAgJHtDT01QT05FTlR9KQorICAgICAgc2V0KCR7X3F0X3BsdWdpbnNfdmFyfQorICAgICAgICAiJHske19xdF9wbHVnaW5zX3Zhcn19O1wkRU5We0RFU1RESVJ9XCR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7X3F0X3BsdWdpbl9kZXN0fS8ke19xdF9wbHVnaW5fZmlsZX0iKQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUVQgcGx1Z2luICR7X3F0X3BsdWdpbl9uYW1lfSBub3QgZm91bmQiKQogICAgIGVuZGlmKCkKKyAgZW5kbWFjcm8oKQorICBpZihBUFBMRSkKKyAgICBpbnN0YWxsX3F0NV9wbHVnaW4oIlF0NTo6UUNvY29hSW50ZWdyYXRpb25QbHVnaW4iIFFUX1BMVUdJTlMpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3F0LmNvbmYiCisgICAgICAiW1BhdGhzXVxuUGx1Z2lucyA9ICR7X3F0X3BsdWdpbl9kaXJ9XG4iKQorICAgIGluc3RhbGwoRklMRVMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9xdC5jb25mIgorICAgICAgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L1Jlc291cmNlcyIKKyAgICAgICR7Q09NUE9ORU5UfSkKKyAgZWxzZWlmKFdJTjMyIEFORCBOT1QgQ01ha2VfUVRfU1RBVElDX1FXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTKQorICAgIGluc3RhbGxfcXQ1X3BsdWdpbigiUXQ1OjpRV2luZG93c0ludGVncmF0aW9uUGx1Z2luIiBRVF9QTFVHSU5TKQorICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9xdC5jb25mIgorICAgICAgIltQYXRoc11cblBsdWdpbnMgPSAuLi8ke19xdF9wbHVnaW5fZGlyfVxuIikKKyAgICBpbnN0YWxsKEZJTEVTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcXQuY29uZiIKKyAgICAgIERFU1RJTkFUSU9OIGJpbgorICAgICAgJHtDT01QT05FTlR9KQogICBlbmRpZigpCitlbmRpZigpCiAKLSAgaWYoVEFSR0VUIFF0NTo6Q29yZSkKLSAgICBnZXRfcHJvcGVydHkoX1F0NV9Db3JlX0xPQ0FUSU9OIFRBUkdFVCBRdDU6OkNvcmUgUFJPUEVSVFkgTE9DQVRJT04pCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChRdF9CSU5fRElSICIke19RdDVfQ29yZV9MT0NBVElPTn0iIFBBVEgpCi0gICAgaWYoQVBQTEUpCi0gICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KFF0X0JJTl9ESVIgIiR7UXRfQklOX0RJUn0iIFBBVEgpCi0gICAgZW5kaWYoKQotICBlbmRpZigpCi1lbHNlKCkKLSAgc2V0KFFUX01JTl9WRVJTSU9OICI0LjQuMCIpCi0gIGZpbmRfcGFja2FnZShRdDQgUkVRVUlSRUQpCi0gIGlmKE5PVCBRVDRfRk9VTkQpCi0gICAgbWVzc2FnZShTRU5EX0VSUk9SICJGYWlsZWQgdG8gZmluZCBRdCA0LjQgb3IgZ3JlYXRlci4iKQotICAgIHJldHVybigpCi0gIGVuZGlmKCkKLQotICBpbmNsdWRlKCR7UVRfVVNFX0ZJTEV9KQotCi0gIHNldChDTWFrZV9RVF9MSUJSQVJJRVMgJHtRVF9MSUJSQVJJRVN9KQotCitnZXRfcHJvcGVydHkoX1F0NV9Db3JlX0xPQ0FUSU9OIFRBUkdFVCBRdDU6OkNvcmUgUFJPUEVSVFkgTE9DQVRJT04pCitnZXRfZmlsZW5hbWVfY29tcG9uZW50KFF0X0JJTl9ESVIgIiR7X1F0NV9Db3JlX0xPQ0FUSU9OfSIgUEFUSCkKK2lmKEFQUExFKQorICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KFF0X0JJTl9ESVIgIiR7UXRfQklOX0RJUn0iIFBBVEgpCiBlbmRpZigpCiAKIHNldChTUkNTCkBAIC0xMTYsNiArODQsNyBAQAogICBDTWFrZVNldHVwLmN4eAogICBDTWFrZVNldHVwRGlhbG9nLmN4eAogICBDTWFrZVNldHVwRGlhbG9nLmgKKyAgQ29tcGlsZXJzLmgKICAgRmlyc3RDb25maWd1cmUuY3h4CiAgIEZpcnN0Q29uZmlndXJlLmgKICAgUUNNYWtlLmN4eApAQCAtMTI5LDcgKzk4LDcgQEAKICAgV2FybmluZ01lc3NhZ2VzRGlhbG9nLmN4eAogICBXYXJuaW5nTWVzc2FnZXNEaWFsb2cuaAogICApCi1RVDRfV1JBUF9VSShVSV9TUkNTCitxdDVfd3JhcF91aShVSV9TUkNTCiAgIENNYWtlU2V0dXBEaWFsb2cudWkKICAgQ29tcGlsZXJzLnVpCiAgIENyb3NzQ29tcGlsZXIudWkKQEAgLTEzNyw3ICsxMDYsNyBAQAogICBSZWdleEV4cGxvcmVyLnVpCiAgIFdhcm5pbmdNZXNzYWdlc0RpYWxvZy51aQogICApCi1RVDRfV1JBUF9DUFAoTU9DX1NSQ1MKK3F0NV93cmFwX2NwcChNT0NfU1JDUwogICBBZGRDYWNoZUVudHJ5LmgKICAgQ29tcGlsZXJzLmgKICAgQ01ha2VTZXR1cERpYWxvZy5oCkBAIC0xNDgsMTQgKzExNywyNCBAQAogICBSZWdleEV4cGxvcmVyLmgKICAgV2FybmluZ01lc3NhZ2VzRGlhbG9nLmgKICAgKQotUVQ0X0FERF9SRVNPVVJDRVMoUkNfU1JDUyBDTWFrZVNldHVwLnFyYykKK3F0NV9hZGRfcmVzb3VyY2VzKFJDX1NSQ1MgQ01ha2VTZXR1cC5xcmMpCiAKLXNldChTUkNTICR7U1JDU30gJHtVSV9TUkNTfSAke01PQ19TUkNTfSAke1JDX1NSQ1N9KQoraWYgKEZBTFNFKSAjIENNYWtlJ3MgYm9vdHN0cmFwIGJpbmFyeSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tb2MKKyAgc2V0KENNQUtFX0FVVE9NT0MgMSkKKyAgc2V0KENNQUtFX0FVVE9SQ0MgMSkKKyAgc2V0KENNQUtFX0FVVE9VSUMgMSkKK2Vsc2UgKCkKKyAgbGlzdChBUFBFTkQgU1JDUworICAgICR7VUlfU1JDU30KKyAgICAke01PQ19TUkNTfQorICAgICR7UkNfU1JDU30pCitlbmRpZiAoKQorCiBpZihXSU4zMikKLSAgc2V0KFNSQ1MgJHtTUkNTfSBDTWFrZVNldHVwLnJjKQorICBsaXN0KEFQUEVORCBTUkNTIENNYWtlU2V0dXAucmMpCiBlbmRpZigpCiBpZihBUFBMRSkKLSAgc2V0KFNSQ1MgJHtTUkNTfSBDTWFrZVNldHVwLmljbnMpCisgIGxpc3QoQVBQRU5EIFNSQ1MgQ01ha2VTZXR1cC5pY25zKQogICBzZXQoTUFDT1NYX0JVTkRMRV9JQ09OX0ZJTEUgQ01ha2VTZXR1cC5pY25zKQogICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoQ01ha2VTZXR1cC5pY25zIFBST1BFUlRJRVMKICAgICBNQUNPU1hfUEFDS0FHRV9MT0NBVElPTiBSZXNvdXJjZXMpCkBAIC0xNzIsNyArMTUxLDcgQEAKIHNldChDTUFLRV9JTkNMVURFX0NVUlJFTlRfRElSIE9OKQogCiBhZGRfZXhlY3V0YWJsZShjbWFrZS1ndWkgV0lOMzIgTUFDT1NYX0JVTkRMRSAke1NSQ1N9ICR7TUFOSUZFU1RfRklMRX0pCi10YXJnZXRfbGlua19saWJyYXJpZXMoY21ha2UtZ3VpIENNYWtlTGliICR7UVRfUVRNQUlOX0xJQlJBUll9ICR7Q01ha2VfUVRfTElCUkFSSUVTfSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhjbWFrZS1ndWkgQ01ha2VMaWIgUXQ1OjpDb3JlIFF0NTo6V2lkZ2V0cyAke0NNYWtlX1FUX0VYVFJBX0xJQlJBUklFU30pCiAKIGlmKFdJTjMyKQogICB0YXJnZXRfc291cmNlcyhjbWFrZS1ndWkgUFJJVkFURSAkPFRBUkdFVF9PQkpFQ1RTOkNNYWtlVmVyc2lvbj4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cC5jeHggYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cC5jeHgKaW5kZXggZWU4MWE3ZC4uN2VmNWE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXAuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwLmN4eApAQCAtMTE1LDE0ICsxMTUsNiBAQAogICBRVGV4dENvZGVjKiB1dGY4X2NvZGVjID0gUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKCJVVEYtOCIpOwogICBRVGV4dENvZGVjOjpzZXRDb2RlY0ZvckxvY2FsZSh1dGY4X2NvZGVjKTsKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA1MDAwMAotICAvLyBjbGVhbiBvdXQgc3RhbmRhcmQgUXQgcGF0aHMgZm9yIHBsdWdpbnMsIHdoaWNoIHdlIGRvbid0IHVzZSBhbnl3YXkKLSAgLy8gd2hlbiBjcmVhdGluZyBNYWMgYnVuZGxlcywgaXQgcG90ZW50aWFsbHkgY2F1c2VzIHByb2JsZW1zCi0gIGZvcmVhY2ggKFFTdHJpbmcgcCwgUUFwcGxpY2F0aW9uOjpsaWJyYXJ5UGF0aHMoKSkgewotICAgIFFBcHBsaWNhdGlvbjo6cmVtb3ZlTGlicmFyeVBhdGgocCk7Ci0gIH0KLSNlbmRpZgotCiAgIC8vIHRlbGwgdGhlIGNtYWtlIGxpYnJhcnkgd2hlcmUgY21ha2UgaXMKICAgUURpciBjbUV4ZWNEaXIoUUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbkRpclBhdGgoKSk7CiAjaWYgZGVmaW5lZChRX09TX01BQykKQEAgLTIwMSw4ICsxOTMsNyBAQAogICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGFyZ3NbMV0udG9Mb2NhbDhCaXQoKS5kYXRhKCkpOwogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIENNYWtlQ2FjaGUudHh0Ci0gICAgICBzdGQ6OnN0cmluZyBidWlsZEZpbGVQYXRoID0KLSAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgiQ01ha2VDYWNoZS50eHQiLCBmaWxlUGF0aC5jX3N0cigpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGJ1aWxkRmlsZVBhdGggPSBjbVN0ckNhdChmaWxlUGF0aCwgIi9DTWFrZUNhY2hlLnR4dCIpOwogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIENNYWtlQ2FjaGUudHh0IGZpbGUKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZVBhdGgpID09ICJDTWFrZUNhY2hlLnR4dCIgJiYKQEAgLTIxMSw4ICsyMDIsNyBAQAogICAgICAgfQogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIENNYWtlTGlzdHMudHh0Ci0gICAgICBzdGQ6OnN0cmluZyBzcmNGaWxlUGF0aCA9Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoIkNNYWtlTGlzdHMudHh0IiwgZmlsZVBhdGguY19zdHIoKSk7CisgICAgICBzdGQ6OnN0cmluZyBzcmNGaWxlUGF0aCA9IGNtU3RyQ2F0KGZpbGVQYXRoLCAiL0NNYWtlTGlzdHMudHh0Iik7CiAKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGJ1aWxkRmlsZVBhdGguY19zdHIoKSkpIHsKICAgICAgICAgZGlhbG9nLnNldEJpbmFyeURpcmVjdG9yeShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KApkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuY3h4IGIvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuY3h4CmluZGV4IDQzNmE5MDQuLmZjYzg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwRGlhbG9nLmN4eAorKysgYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cERpYWxvZy5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJDTWFrZVNldHVwRGlhbG9nLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlIDxRQ2xvc2VFdmVudD4KICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEZXNrdG9wU2VydmljZXM+CkBAIC0zOSwyMyArNDEsMjEgQEAKIAogUUNNYWtlVGhyZWFkOjpRQ01ha2VUaHJlYWQoUU9iamVjdCogcCkKICAgOiBRVGhyZWFkKHApCi0gICwgQ01ha2VJbnN0YW5jZShudWxscHRyKQogewogfQogCiBRQ01ha2UqIFFDTWFrZVRocmVhZDo6Y21ha2VJbnN0YW5jZSgpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5DTWFrZUluc3RhbmNlOworICByZXR1cm4gdGhpcy0+Q01ha2VJbnN0YW5jZS5nZXQoKTsKIH0KIAogdm9pZCBRQ01ha2VUaHJlYWQ6OnJ1bigpCiB7Ci0gIHRoaXMtPkNNYWtlSW5zdGFuY2UgPSBuZXcgUUNNYWtlOworICB0aGlzLT5DTWFrZUluc3RhbmNlID0gY206Om1ha2VfdW5pcXVlPFFDTWFrZT4oKTsKICAgLy8gZW1pdCB0aGF0IHRoaXMgY21ha2UgdGhyZWFkIGlzIHJlYWR5IGZvciB1c2UKICAgZW1pdCB0aGlzLT5jbWFrZUluaXRpYWxpemVkKCk7CiAgIHRoaXMtPmV4ZWMoKTsKLSAgZGVsZXRlIHRoaXMtPkNNYWtlSW5zdGFuY2U7Ci0gIHRoaXMtPkNNYWtlSW5zdGFuY2UgPSBudWxscHRyOworICB0aGlzLT5DTWFrZUluc3RhbmNlLnJlc2V0KCk7CiB9CiAKIENNYWtlU2V0dXBEaWFsb2c6OkNNYWtlU2V0dXBEaWFsb2coKQpAQCAtMTUyLDkgKzE1Miw2IEBACiAgIHRoaXMtPldhcm5VbmluaXRpYWxpemVkQWN0aW9uID0KICAgICBPcHRpb25zTWVudS0+YWRkQWN0aW9uKHRyKCImV2FybiBVbmluaXRpYWxpemVkICgtLXdhcm4tdW5pbml0aWFsaXplZCkiKSk7CiAgIHRoaXMtPldhcm5VbmluaXRpYWxpemVkQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gIHRoaXMtPldhcm5VbnVzZWRBY3Rpb24gPQotICAgIE9wdGlvbnNNZW51LT5hZGRBY3Rpb24odHIoIiZXYXJuIFVudXNlZCAoLS13YXJuLXVudXNlZC12YXJzKSIpKTsKLSAgdGhpcy0+V2FyblVudXNlZEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwogCiAgIFFBY3Rpb24qIGRlYnVnQWN0aW9uID0gT3B0aW9uc01lbnUtPmFkZEFjdGlvbih0cigiJkRlYnVnIE91dHB1dCIpKTsKICAgZGVidWdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKQEAgLTI5MCw5ICsyODcsNiBAQAogICBRT2JqZWN0Ojpjb25uZWN0KHRoaXMtPldhcm5VbmluaXRpYWxpemVkQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwKICAgICAgICAgICAgICAgICAgICB0aGlzLT5DTWFrZVRocmVhZC0+Y21ha2VJbnN0YW5jZSgpLAogICAgICAgICAgICAgICAgICAgIFNMT1Qoc2V0V2FyblVuaW5pdGlhbGl6ZWRNb2RlKGJvb2wpKSk7Ci0gIFFPYmplY3Q6OmNvbm5lY3QodGhpcy0+V2FyblVudXNlZEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksCi0gICAgICAgICAgICAgICAgICAgdGhpcy0+Q01ha2VUaHJlYWQtPmNtYWtlSW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICBTTE9UKHNldFdhcm5VbnVzZWRNb2RlKGJvb2wpKSk7CiAKICAgaWYgKCF0aGlzLT5Tb3VyY2VEaXJlY3RvcnktPnRleHQoKS5pc0VtcHR5KCkgfHwKICAgICAgICF0aGlzLT5CaW5hcnlEaXJlY3RvcnktPmxpbmVFZGl0KCktPnRleHQoKS5pc0VtcHR5KCkpIHsKQEAgLTU5NSw3ICs1ODksMTEgQEAKIAogICBRRGlhbG9nIGRpYWxvZzsKICAgUUZvbnRNZXRyaWNzIG1ldCh0aGlzLT5mb250KCkpOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAxMSwgMCkKKyAgaW50IG1zZ1dpZHRoID0gbWV0Lmhvcml6b250YWxBZHZhbmNlKG1zZyk7CisjZWxzZQogICBpbnQgbXNnV2lkdGggPSBtZXQud2lkdGgobXNnKTsKKyNlbmRpZgogICBkaWFsb2cuc2V0TWluaW11bVNpemUobXNnV2lkdGggLyAxNSwgMjApOwogICBkaWFsb2cuc2V0V2luZG93VGl0bGUodHIoIkhlbHAiKSk7CiAgIFFWQm94TGF5b3V0KiBsID0gbmV3IFFWQm94TGF5b3V0KCZkaWFsb2cpOwpAQCAtODA0LDEyICs4MDIsMTkgQEAKICAgICAgIFFTdHJpbmcgc3lzdGVtVmVyc2lvbiA9IGRpYWxvZy5nZXRTeXN0ZW1WZXJzaW9uKCk7CiAgICAgICBtLT5pbnNlcnRQcm9wZXJ0eShRQ01ha2VQcm9wZXJ0eTo6U1RSSU5HLCAiQ01BS0VfU1lTVEVNX1ZFUlNJT04iLAogICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkNNYWtlIFN5c3RlbSBWZXJzaW9uIiksIHN5c3RlbVZlcnNpb24sIGZhbHNlKTsKKyAgICAgIFFTdHJpbmcgc3lzdGVtUHJvY2Vzc29yID0gZGlhbG9nLmdldFN5c3RlbVByb2Nlc3NvcigpOworICAgICAgbS0+aW5zZXJ0UHJvcGVydHkoUUNNYWtlUHJvcGVydHk6OlNUUklORywgIkNNQUtFX1NZU1RFTV9QUk9DRVNTT1IiLAorICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkNNYWtlIFN5c3RlbSBQcm9jZXNzb3IiKSwgc3lzdGVtUHJvY2Vzc29yLCBmYWxzZSk7CiAgICAgICBRU3RyaW5nIGN4eENvbXBpbGVyID0gZGlhbG9nLmdldENYWENvbXBpbGVyKCk7Ci0gICAgICBtLT5pbnNlcnRQcm9wZXJ0eShRQ01ha2VQcm9wZXJ0eTo6RklMRVBBVEgsICJDTUFLRV9DWFhfQ09NUElMRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkNYWCBjb21waWxlci4iKSwgY3h4Q29tcGlsZXIsIGZhbHNlKTsKKyAgICAgIGlmICghY3h4Q29tcGlsZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIG0tPmluc2VydFByb3BlcnR5KFFDTWFrZVByb3BlcnR5OjpGSUxFUEFUSCwgIkNNQUtFX0NYWF9DT01QSUxFUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRyKCJDWFggY29tcGlsZXIuIiksIGN4eENvbXBpbGVyLCBmYWxzZSk7CisgICAgICB9CiAgICAgICBRU3RyaW5nIGNDb21waWxlciA9IGRpYWxvZy5nZXRDQ29tcGlsZXIoKTsKLSAgICAgIG0tPmluc2VydFByb3BlcnR5KFFDTWFrZVByb3BlcnR5OjpGSUxFUEFUSCwgIkNNQUtFX0NfQ09NUElMRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkMgY29tcGlsZXIuIiksIGNDb21waWxlciwgZmFsc2UpOworICAgICAgaWYgKCFjQ29tcGlsZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIG0tPmluc2VydFByb3BlcnR5KFFDTWFrZVByb3BlcnR5OjpGSUxFUEFUSCwgIkNNQUtFX0NfQ09NUElMRVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cigiQyBjb21waWxlci4iKSwgY0NvbXBpbGVyLCBmYWxzZSk7CisgICAgICB9CiAgICAgfSBlbHNlIGlmIChkaWFsb2cuY3Jvc3NDb21waWxlclRvb2xDaGFpbkZpbGUoKSkgewogICAgICAgUVN0cmluZyB0b29sY2hhaW5GaWxlID0gZGlhbG9nLmdldENyb3NzQ29tcGlsZXJUb29sQ2hhaW5GaWxlKCk7CiAgICAgICBtLT5pbnNlcnRQcm9wZXJ0eShRQ01ha2VQcm9wZXJ0eTo6RklMRVBBVEgsICJDTUFLRV9UT09MQ0hBSU5fRklMRSIsCkBAIC0xMDQ5LDE0ICsxMDU0LDcgQEAKICAgICB0aGlzLT5HZW5lcmF0ZUFjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7CiAgICAgdGhpcy0+T3BlblByb2plY3RCdXR0b24tPnNldEVuYWJsZWQoZmFsc2UpOwogICAgIHRoaXMtPkdlbmVyYXRlQnV0dG9uLT5zZXRUZXh0KHRyKCImU3RvcCIpKTsKLSAgfSBlbHNlIGlmIChzID09IFJlYWR5Q29uZmlndXJlKSB7Ci0gICAgdGhpcy0+c2V0RW5hYmxlZFN0YXRlKHRydWUpOwotICAgIHRoaXMtPkdlbmVyYXRlQnV0dG9uLT5zZXRFbmFibGVkKHRydWUpOwotICAgIHRoaXMtPkdlbmVyYXRlQWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwotICAgIHRoaXMtPkNvbmZpZ3VyZUJ1dHRvbi0+c2V0RW5hYmxlZCh0cnVlKTsKLSAgICB0aGlzLT5Db25maWd1cmVCdXR0b24tPnNldFRleHQodHIoIiZDb25maWd1cmUiKSk7Ci0gICAgdGhpcy0+R2VuZXJhdGVCdXR0b24tPnNldFRleHQodHIoIiZHZW5lcmF0ZSIpKTsKLSAgfSBlbHNlIGlmIChzID09IFJlYWR5R2VuZXJhdGUpIHsKKyAgfSBlbHNlIGlmIChzID09IFJlYWR5Q29uZmlndXJlIHx8IHMgPT0gUmVhZHlHZW5lcmF0ZSkgewogICAgIHRoaXMtPnNldEVuYWJsZWRTdGF0ZSh0cnVlKTsKICAgICB0aGlzLT5HZW5lcmF0ZUJ1dHRvbi0+c2V0RW5hYmxlZCh0cnVlKTsKICAgICB0aGlzLT5HZW5lcmF0ZUFjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKQEAgLTEyMDYsNyArMTIwNCw3IEBACiAKIHZvaWQgQ01ha2VTZXR1cERpYWxvZzo6ZG9PdXRwdXRDb250ZXh0TWVudShRUG9pbnQgcHQpCiB7Ci0gIFFNZW51KiBtZW51ID0gdGhpcy0+T3V0cHV0LT5jcmVhdGVTdGFuZGFyZENvbnRleHRNZW51KCk7CisgIHN0ZDo6dW5pcXVlX3B0cjxRTWVudT4gbWVudSh0aGlzLT5PdXRwdXQtPmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKSk7CiAKICAgbWVudS0+YWRkU2VwYXJhdG9yKCk7CiAgIG1lbnUtPmFkZEFjdGlvbih0cigiRmluZC4uLiIpLCB0aGlzLCBTTE9UKGRvT3V0cHV0RmluZERpYWxvZygpKSwKQEAgLTEyMjAsNyArMTIxOCw2IEBACiAgICAgICAgICAgICAgICAgICBRS2V5U2VxdWVuY2UoUXQ6OktleV9GOCkpOwogCiAgIG1lbnUtPmV4ZWModGhpcy0+T3V0cHV0LT5tYXBUb0dsb2JhbChwdCkpOwotICBkZWxldGUgbWVudTsKIH0KIAogdm9pZCBDTWFrZVNldHVwRGlhbG9nOjpkb091dHB1dEZpbmREaWFsb2coKQpkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuaCBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwRGlhbG9nLmgKaW5kZXggZjIzYWVlNi4uOTE0YmUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuaAorKysgYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cERpYWxvZy5oCkBAIC0zLDYgKzMsOCBAQAogI2lmbmRlZiBDTWFrZVNldHVwRGlhbG9nX2gKICNkZWZpbmUgQ01ha2VTZXR1cERpYWxvZ19oCiAKKyNpbmNsdWRlIDxtZW1vcnk+CisKICNpbmNsdWRlICJRQ01ha2UuaCIKICNpbmNsdWRlIDxRRXZlbnRMb29wPgogI2luY2x1ZGUgPFFNYWluV2luZG93PgpAQCAtMTA5LDcgKzExMSw2IEBACiAgIFFBY3Rpb24qIENvbmZpZ3VyZUFjdGlvbjsKICAgUUFjdGlvbiogR2VuZXJhdGVBY3Rpb247CiAgIFFBY3Rpb24qIFdhcm5VbmluaXRpYWxpemVkQWN0aW9uOwotICBRQWN0aW9uKiBXYXJuVW51c2VkQWN0aW9uOwogICBRQWN0aW9uKiBJbnN0YWxsRm9yQ29tbWFuZExpbmVBY3Rpb247CiAgIFN0YXRlIEN1cnJlbnRTdGF0ZTsKIApAQCAtMTQzLDcgKzE0NCw3IEBACiAKIHByb3RlY3RlZDoKICAgdmlydHVhbCB2b2lkIHJ1bigpOwotICBRQ01ha2UqIENNYWtlSW5zdGFuY2U7CisgIHN0ZDo6dW5pcXVlX3B0cjxRQ01ha2U+IENNYWtlSW5zdGFuY2U7CiB9OwogCiAjZW5kaWYgLy8gQ01ha2VTZXR1cERpYWxvZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuY3h4IGIvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmN4eAppbmRleCBjYTI4YjE5Li4zYzI0YjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9GaXJzdENvbmZpZ3VyZS5jeHgKQEAgLTEwLDggKzEwLDEyIEBACiAKICNpbmNsdWRlICJDb21waWxlcnMuaCIKIAotU3RhcnRDb21waWxlclNldHVwOjpTdGFydENvbXBpbGVyU2V0dXAoUVdpZGdldCogcCkKK1N0YXJ0Q29tcGlsZXJTZXR1cDo6U3RhcnRDb21waWxlclNldHVwKFFTdHJpbmcgZGVmYXVsdEdlbmVyYXRvclBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBkZWZhdWx0R2VuZXJhdG9yVG9vbHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFXaWRnZXQqIHApCiAgIDogUVdpemFyZFBhZ2UocCkKKyAgLCBEZWZhdWx0R2VuZXJhdG9yUGxhdGZvcm0oc3RkOjptb3ZlKGRlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybSkpCisgICwgRGVmYXVsdEdlbmVyYXRvclRvb2xzZXQoc3RkOjptb3ZlKGRlZmF1bHRHZW5lcmF0b3JUb29sc2V0KSkKIHsKICAgUVZCb3hMYXlvdXQqIGwgPSBuZXcgUVZCb3hMYXlvdXQodGhpcyk7CiAgIGwtPmFkZFdpZGdldChuZXcgUUxhYmVsKHRyKCJTcGVjaWZ5IHRoZSBnZW5lcmF0b3IgZm9yIHRoaXMgcHJvamVjdCIpKSk7CkBAIC02OCw2ICs3MiwxMCBAQAogICBUb29sc2V0ID0gbmV3IFFMaW5lRWRpdChmcmFtZSk7CiAgIGwtPmFkZFdpZGdldChUb29sc2V0KTsKIAorICAvLyBEZWZhdWx0IHRvIENNQUtFX0dFTkVSQVRPUl9UT09MU0VUIGVudiB2YXIgaWYgc2V0CisgIGlmICghRGVmYXVsdEdlbmVyYXRvclRvb2xzZXQuaXNFbXB0eSgpKSB7CisgICAgdGhpcy0+VG9vbHNldC0+c2V0VGV4dChEZWZhdWx0R2VuZXJhdG9yVG9vbHNldCk7CisgIH0KICAgcmV0dXJuIGZyYW1lOwogfQogCkBAIC0xOTksNiArMjA3LDE0IEBACiAKICAgICB0aGlzLT5QbGF0Zm9ybU9wdGlvbnMtPmFkZEl0ZW1zKHBsYXRmb3JtX2xpc3QpOwogICAgIFBsYXRmb3JtRnJhbWUtPnNob3coKTsKKworICAgIC8vIERlZmF1bHQgdG8gZ2VuZXJhdG9yIHBsYXRmb3JtIGZyb20gZW52aXJvbm1lbnQKKyAgICBpZiAoIURlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybS5pc0VtcHR5KCkpIHsKKyAgICAgIGludCBwbGF0Zm9ybV9pbmRleCA9IHBsYXRmb3Jtcy5pbmRleE9mKERlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybSk7CisgICAgICBpZiAocGxhdGZvcm1faW5kZXggIT0gLTEpIHsKKyAgICAgICAgdGhpcy0+UGxhdGZvcm1PcHRpb25zLT5zZXRDdXJyZW50SW5kZXgocGxhdGZvcm1faW5kZXgpOworICAgICAgfQorICAgIH0KICAgfSBlbHNlIHsKICAgICBQbGF0Zm9ybUZyYW1lLT5oaWRlKCk7CiAgIH0KQEAgLTQyMSw4ICs0MzcsMjYgQEAKIAogRmlyc3RDb25maWd1cmU6OkZpcnN0Q29uZmlndXJlKCkKIHsKKyAgY29uc3QgY2hhciogZW52X2dlbmVyYXRvciA9IHN0ZDo6Z2V0ZW52KCJDTUFLRV9HRU5FUkFUT1IiKTsKKyAgY29uc3QgY2hhciogZW52X2dlbmVyYXRvcl9wbGF0Zm9ybSA9IG51bGxwdHI7CisgIGNvbnN0IGNoYXIqIGVudl9nZW5lcmF0b3JfdG9vbHNldCA9IG51bGxwdHI7CisgIGlmIChlbnZfZ2VuZXJhdG9yICYmIHN0ZDo6c3RybGVuKGVudl9nZW5lcmF0b3IpKSB7CisgICAgbURlZmF1bHRHZW5lcmF0b3IgPSBlbnZfZ2VuZXJhdG9yOworICAgIGVudl9nZW5lcmF0b3JfcGxhdGZvcm0gPSBzdGQ6OmdldGVudigiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIik7CisgICAgZW52X2dlbmVyYXRvcl90b29sc2V0ID0gc3RkOjpnZXRlbnYoIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIik7CisgIH0KKworICBpZiAoIWVudl9nZW5lcmF0b3JfcGxhdGZvcm0pIHsKKyAgICBlbnZfZ2VuZXJhdG9yX3BsYXRmb3JtID0gIiI7CisgIH0KKworICBpZiAoIWVudl9nZW5lcmF0b3JfdG9vbHNldCkgeworICAgIGVudl9nZW5lcmF0b3JfdG9vbHNldCA9ICIiOworICB9CisKICAgLy8gdGhpcy0+c2V0T3B0aW9uKFFXaXphcmQ6OkhhdmVGaW5pc2hCdXR0b25PbkVhcmx5UGFnZXMsIHRydWUpOwotICB0aGlzLT5tU3RhcnRDb21waWxlclNldHVwUGFnZSA9IG5ldyBTdGFydENvbXBpbGVyU2V0dXAodGhpcyk7CisgIHRoaXMtPm1TdGFydENvbXBpbGVyU2V0dXBQYWdlID0gbmV3IFN0YXJ0Q29tcGlsZXJTZXR1cCgKKyAgICBlbnZfZ2VuZXJhdG9yX3BsYXRmb3JtLCBlbnZfZ2VuZXJhdG9yX3Rvb2xzZXQsIHRoaXMpOwogICB0aGlzLT5zZXRQYWdlKFN0YXJ0LCB0aGlzLT5tU3RhcnRDb21waWxlclNldHVwUGFnZSk7CiAgIFFPYmplY3Q6OmNvbm5lY3QodGhpcy0+bVN0YXJ0Q29tcGlsZXJTZXR1cFBhZ2UsIFNJR05BTChzZWxlY3Rpb25DaGFuZ2VkKCkpLAogICAgICAgICAgICAgICAgICAgIHRoaXMsIFNMT1QocmVzdGFydCgpKSk7CkBAIC01MDQsNiArNTM4LDE3IEBACiAgIHRoaXMtPm1Dcm9zc0NvbXBpbGVyU2V0dXBQYWdlLT5zZXRJbmNsdWRlTW9kZSgKICAgICBzZXR0aW5ncy52YWx1ZSgiSW5jbHVkZU1vZGUiLCAwKS50b0ludCgpKTsKICAgc2V0dGluZ3MuZW5kR3JvdXAoKTsKKworICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYXBwbGljYXRpb24gc2V0dGluZ3MgYmVjYXVzZS4uLgorICAvLyAtIHRoZXkncmUgaGFyZGVyIHRvIHNldAorICAvLyAtIHNldHRpbmdzIGFsd2F5cyBleGlzdCBhZnRlciB0aGUgcHJvZ3JhbSBpcyBydW4gb25jZSwgc28gdGhlIGVudmlyb25tZW50CisgIC8vICAgICB2YXJpYWJsZXMgd291bGQgbmV2ZXIgYmUgdXNlZCBvdGhlcndpc2UKKyAgLy8gLSBwbGF0Zm9ybSBhbmQgdG9vbHNldCBhcmUgcG9wdWxhdGVkIG9ubHkgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHNvCisgIC8vICAgICB0aGlzIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyB0YWtlbiBmcm9tIGVudmlyb25tZW50LCB3aGlsZSB0aGUKKyAgLy8gICAgIGdlbmVyYXRvciBpcyB0YWtlbiBmcm9tIGFwcGxpY2F0aW9uIHNldHRpbmdzCisgIGlmICghbURlZmF1bHRHZW5lcmF0b3IuaXNFbXB0eSgpKSB7CisgICAgdGhpcy0+bVN0YXJ0Q29tcGlsZXJTZXR1cFBhZ2UtPnNldEN1cnJlbnRHZW5lcmF0b3IobURlZmF1bHRHZW5lcmF0b3IpOworICB9CiB9CiAKIHZvaWQgRmlyc3RDb25maWd1cmU6OnNhdmVUb1NldHRpbmdzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9GaXJzdENvbmZpZ3VyZS5oIGIvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmgKaW5kZXggZDFkYjViZi4uYzI2ZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmgKKysrIGIvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmgKQEAgLTI5LDcgKzI5LDggQEAKIHsKICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgU3RhcnRDb21waWxlclNldHVwKFFXaWRnZXQqIHApOworICBTdGFydENvbXBpbGVyU2V0dXAoUVN0cmluZyBkZWZhdWx0R2VuZXJhdG9yUGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGRlZmF1bHRHZW5lcmF0b3JUb29sc2V0LCBRV2lkZ2V0KiBwKTsKICAgflN0YXJ0Q29tcGlsZXJTZXR1cCgpOwogICB2b2lkIHNldEdlbmVyYXRvcnMoc3RkOjp2ZWN0b3I8Y21ha2U6OkdlbmVyYXRvckluZm8+IGNvbnN0JiBnZW5zKTsKICAgdm9pZCBzZXRDdXJyZW50R2VuZXJhdG9yKGNvbnN0IFFTdHJpbmcmIGdlbik7CkBAIC02NCw2ICs2NSw3IEBACiAgIFFTdHJpbmdMaXN0IEdlbmVyYXRvcnNTdXBwb3J0aW5nUGxhdGZvcm07CiAgIFFNdWx0aU1hcDxRU3RyaW5nLCBRU3RyaW5nPiBHZW5lcmF0b3JTdXBwb3J0ZWRQbGF0Zm9ybXM7CiAgIFFNYXA8UVN0cmluZywgUVN0cmluZz4gR2VuZXJhdG9yRGVmYXVsdFBsYXRmb3JtOworICBRU3RyaW5nIERlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybSwgRGVmYXVsdEdlbmVyYXRvclRvb2xzZXQ7CiAKIHByaXZhdGU6CiAgIFFGcmFtZSogQ3JlYXRlVG9vbHNldFdpZGdldHMoKTsKQEAgLTE5Nyw2ICsxOTksNyBAQAogICBOYXRpdmVDb21waWxlclNldHVwKiBtTmF0aXZlQ29tcGlsZXJTZXR1cFBhZ2U7CiAgIENyb3NzQ29tcGlsZXJTZXR1cCogbUNyb3NzQ29tcGlsZXJTZXR1cFBhZ2U7CiAgIFRvb2xjaGFpbkNvbXBpbGVyU2V0dXAqIG1Ub29sY2hhaW5Db21waWxlclNldHVwUGFnZTsKKyAgUVN0cmluZyBtRGVmYXVsdEdlbmVyYXRvcjsKIH07CiAKICNlbmRpZiAvLyBGaXJzdENvbmZpZ3VyZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlLmN4eCBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuY3h4CmluZGV4IGE5MDg5ZTUuLjYwOTAyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuY3h4CkBAIC0yLDYgKzIsOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiUUNNYWtlLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEaXI+CiAKQEAgLTE5LDcgKzIxLDYgQEAKICAgOiBRT2JqZWN0KHApCiB7CiAgIHRoaXMtPldhcm5VbmluaXRpYWxpemVkTW9kZSA9IGZhbHNlOwotICB0aGlzLT5XYXJuVW51c2VkTW9kZSA9IGZhbHNlOwogICBxUmVnaXN0ZXJNZXRhVHlwZTxRQ01ha2VQcm9wZXJ0eT4oKTsKICAgcVJlZ2lzdGVyTWV0YVR5cGU8UUNNYWtlUHJvcGVydHlMaXN0PigpOwogCkBAIC0zNSw3ICszNiw4IEBACiAgIGNtU3lzdGVtVG9vbHM6OlNldFN0ZGVyckNhbGxiYWNrKAogICAgIFt0aGlzXShzdGQ6OnN0cmluZyBjb25zdCYgbXNnKSB7IHRoaXMtPnN0ZGVyckNhbGxiYWNrKG1zZyk7IH0pOwogCi0gIHRoaXMtPkNNYWtlSW5zdGFuY2UgPSBuZXcgY21ha2UoY21ha2U6OlJvbGVQcm9qZWN0LCBjbVN0YXRlOjpQcm9qZWN0KTsKKyAgdGhpcy0+Q01ha2VJbnN0YW5jZSA9CisgICAgY206Om1ha2VfdW5pcXVlPGNtYWtlPihjbWFrZTo6Um9sZVByb2plY3QsIGNtU3RhdGU6OlByb2plY3QpOwogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRDTWFrZUVkaXRDb21tYW5kKAogICAgIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlR1VJQ29tbWFuZCgpKTsKICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0UHJvZ3Jlc3NDYWxsYmFjaygKQEAgLTU1LDExICs1Nyw3IEBACiAgIH0KIH0KIAotUUNNYWtlOjp+UUNNYWtlKCkKLXsKLSAgZGVsZXRlIHRoaXMtPkNNYWtlSW5zdGFuY2U7Ci0gIC8vIGNtRHluYW1pY0xvYWRlcjo6Rmx1c2hDYWNoZSgpOwotfQorUUNNYWtlOjp+UUNNYWtlKCkgPSBkZWZhdWx0OwogCiB2b2lkIFFDTWFrZTo6bG9hZENhY2hlKGNvbnN0IFFTdHJpbmcmIGRpcikKIHsKQEAgLTEwMSwyOSArOTksMjggQEAKIAogICAgIFFDTWFrZVByb3BlcnR5TGlzdCBwcm9wcyA9IHRoaXMtPnByb3BlcnRpZXMoKTsKICAgICBlbWl0IHRoaXMtPnByb3BlcnRpZXNDaGFuZ2VkKHByb3BzKTsKLSAgICBjb25zdCBjaGFyKiBob21lRGlyID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfSE9NRV9ESVJFQ1RPUlkiKTsKKyAgICBjbVByb3AgaG9tZURpciA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIik7CiAgICAgaWYgKGhvbWVEaXIpIHsKLSAgICAgIHNldFNvdXJjZURpcmVjdG9yeShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGhvbWVEaXIpKTsKKyAgICAgIHNldFNvdXJjZURpcmVjdG9yeShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGhvbWVEaXItPmNfc3RyKCkpKTsKICAgICB9Ci0gICAgY29uc3QgY2hhciogZ2VuID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CisgICAgY21Qcm9wIGdlbiA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOwogICAgIGlmIChnZW4pIHsKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBleHRyYUdlbiA9CiAgICAgICAgIHN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0VYVFJBX0dFTkVSQVRPUiIpOwogICAgICAgc3RkOjpzdHJpbmcgY3VyR2VuID0KICAgICAgICAgY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcjo6Q3JlYXRlRnVsbEdlbmVyYXRvck5hbWUoCi0gICAgICAgICAgZ2VuLCBleHRyYUdlbiA/ICpleHRyYUdlbiA6ICIiKTsKKyAgICAgICAgICAqZ2VuLCBleHRyYUdlbiA/ICpleHRyYUdlbiA6ICIiKTsKICAgICAgIHRoaXMtPnNldEdlbmVyYXRvcihRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGN1ckdlbi5jX3N0cigpKSk7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogcGxhdGZvcm0gPQotICAgICAgc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIik7CisgICAgY21Qcm9wIHBsYXRmb3JtID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIik7CiAgICAgaWYgKHBsYXRmb3JtKSB7Ci0gICAgICB0aGlzLT5zZXRQbGF0Zm9ybShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHBsYXRmb3JtKSk7CisgICAgICB0aGlzLT5zZXRQbGF0Zm9ybShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHBsYXRmb3JtLT5jX3N0cigpKSk7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogdG9vbHNldCA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIik7CisgICAgY21Qcm9wIHRvb2xzZXQgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIpOwogICAgIGlmICh0b29sc2V0KSB7Ci0gICAgICB0aGlzLT5zZXRUb29sc2V0KFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQodG9vbHNldCkpOworICAgICAgdGhpcy0+c2V0VG9vbHNldChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHRvb2xzZXQtPmNfc3RyKCkpKTsKICAgICB9CiAKICAgICBjaGVja09wZW5Qb3NzaWJsZSgpOwpAQCAtMTcyLDcgKzE2OSw2IEBACiAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlNldEdlbmVyYXRvclRvb2xzZXQodGhpcy0+VG9vbHNldC50b0xvY2FsOEJpdCgpLmRhdGEoKSk7CiAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkxvYWRDYWNoZSgpOwogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRXYXJuVW5pbml0aWFsaXplZCh0aGlzLT5XYXJuVW5pbml0aWFsaXplZE1vZGUpOwotICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRXYXJuVW51c2VkKHRoaXMtPldhcm5VbnVzZWRNb2RlKTsKICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+UHJlTG9hZENNYWtlRmlsZXMoKTsKIAogICBJbnRlcnJ1cHRGbGFnID0gMDsKQEAgLTMwNCwyNyArMzAwLDI4IEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICBjb25zdCBjaGFyKiBjYWNoZWRWYWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KTsKKyAgICBjbVByb3AgY2FjaGVkVmFsdWUgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGtleSk7CiAKICAgICBRQ01ha2VQcm9wZXJ0eSBwcm9wOwogICAgIHByb3AuS2V5ID0gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChrZXkuY19zdHIoKSk7Ci0gICAgcHJvcC5IZWxwID0KLSAgICAgIFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksICJIRUxQU1RSSU5HIikpOwotICAgIHByb3AuVmFsdWUgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGNhY2hlZFZhbHVlKTsKKyAgICBpZiAoY21Qcm9wIGhzID0gc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksICJIRUxQU1RSSU5HIikpIHsKKyAgICAgIHByb3AuSGVscCA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoaHMtPmNfc3RyKCkpOworICAgIH0KKyAgICBwcm9wLlZhbHVlID0gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChjYWNoZWRWYWx1ZS0+Y19zdHIoKSk7CiAgICAgcHJvcC5BZHZhbmNlZCA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woa2V5LCAiQURWQU5DRUQiKTsKICAgICBpZiAodCA9PSBjbVN0YXRlRW51bXM6OkJPT0wpIHsKICAgICAgIHByb3AuVHlwZSA9IFFDTWFrZVByb3BlcnR5OjpCT09MOwotICAgICAgcHJvcC5WYWx1ZSA9IGNtSXNPbihjYWNoZWRWYWx1ZSk7CisgICAgICBwcm9wLlZhbHVlID0gY21Jc09uKCpjYWNoZWRWYWx1ZSk7CiAgICAgfSBlbHNlIGlmICh0ID09IGNtU3RhdGVFbnVtczo6UEFUSCkgewogICAgICAgcHJvcC5UeXBlID0gUUNNYWtlUHJvcGVydHk6OlBBVEg7CiAgICAgfSBlbHNlIGlmICh0ID09IGNtU3RhdGVFbnVtczo6RklMRVBBVEgpIHsKICAgICAgIHByb3AuVHlwZSA9IFFDTWFrZVByb3BlcnR5OjpGSUxFUEFUSDsKICAgICB9IGVsc2UgaWYgKHQgPT0gY21TdGF0ZUVudW1zOjpTVFJJTkcpIHsKICAgICAgIHByb3AuVHlwZSA9IFFDTWFrZVByb3BlcnR5OjpTVFJJTkc7Ci0gICAgICBjb25zdCBjaGFyKiBzdHJpbmdzUHJvcGVydHkgPQotICAgICAgICBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgIlNUUklOR1MiKTsKKyAgICAgIGNtUHJvcCBzdHJpbmdzUHJvcGVydHkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgIlNUUklOR1MiKTsKICAgICAgIGlmIChzdHJpbmdzUHJvcGVydHkpIHsKLSAgICAgICAgcHJvcC5TdHJpbmdzID0gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzdHJpbmdzUHJvcGVydHkpLnNwbGl0KCI7Iik7CisgICAgICAgIHByb3AuU3RyaW5ncyA9CisgICAgICAgICAgUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzdHJpbmdzUHJvcGVydHktPmNfc3RyKCkpLnNwbGl0KCI7Iik7CiAgICAgICB9CiAgICAgfQogCkBAIC0zNDEsMTAgKzMzOCwxMCBAQAogCiBib29sIFFDTWFrZTo6aW50ZXJydXB0Q2FsbGJhY2soKQogewotI2lmIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCi0gIHJldHVybiB0aGlzLT5JbnRlcnJ1cHRGbGFnOwotI2Vsc2UKKyNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAxNCwgMCkKICAgcmV0dXJuIHRoaXMtPkludGVycnVwdEZsYWcubG9hZCgpOworI2Vsc2UKKyAgcmV0dXJuIHRoaXMtPkludGVycnVwdEZsYWcubG9hZFJlbGF4ZWQoKTsKICNlbmRpZgogfQogCkBAIC00NzksMTEgKzQ3Niw2IEBACiAgIHRoaXMtPldhcm5VbmluaXRpYWxpemVkTW9kZSA9IHZhbHVlOwogfQogCi12b2lkIFFDTWFrZTo6c2V0V2FyblVudXNlZE1vZGUoYm9vbCB2YWx1ZSkKLXsKLSAgdGhpcy0+V2FyblVudXNlZE1vZGUgPSB2YWx1ZTsKLX0KLQogdm9pZCBRQ01ha2U6OmNoZWNrT3BlblBvc3NpYmxlKCkKIHsKICAgc3RkOjpzdHJpbmcgZGF0YSA9IHRoaXMtPkJpbmFyeURpcmVjdG9yeS50b0xvY2FsOEJpdCgpLmRhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuaCBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuaAppbmRleCBmYTQ0NTFiLi4zOTU1NWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlLmgKKysrIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDUxMikKICNlbmRpZgogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPFFBdG9taWNJbnQ+CkBAIC0xMTMsOCArMTE0LDYgQEAKICAgdm9pZCBzZXREZXByZWNhdGVkV2FybmluZ3NBc0Vycm9ycyhib29sIHZhbHVlKTsKICAgLy8vIHNldCB3aGV0aGVyIHRvIHJ1biBjbWFrZSB3aXRoIHdhcm5pbmdzIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIHZvaWQgc2V0V2FyblVuaW5pdGlhbGl6ZWRNb2RlKGJvb2wgdmFsdWUpOwotICAvLy8gc2V0IHdoZXRoZXIgdG8gcnVuIGNtYWtlIHdpdGggd2FybmluZ3MgYWJvdXQgdW51c2VkIHZhcmlhYmxlcwotICB2b2lkIHNldFdhcm5VbnVzZWRNb2RlKGJvb2wgdmFsdWUpOwogICAvLy8gY2hlY2sgaWYgcHJvamVjdCBJREUgb3BlbiBpcyBwb3NzaWJsZSBhbmQgZW1pdCBvcGVuUG9zc2libGUgc2lnbmFsCiAgIHZvaWQgY2hlY2tPcGVuUG9zc2libGUoKTsKIApAQCAtMTY1LDcgKzE2NCw3IEBACiAgIHZvaWQgb3BlblBvc3NpYmxlKGJvb2wgcG9zc2libGUpOwogCiBwcm90ZWN0ZWQ6Ci0gIGNtYWtlKiBDTWFrZUluc3RhbmNlOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21ha2U+IENNYWtlSW5zdGFuY2U7CiAKICAgYm9vbCBpbnRlcnJ1cHRDYWxsYmFjaygpOwogICB2b2lkIHByb2dyZXNzQ2FsbGJhY2soc3RkOjpzdHJpbmcgY29uc3QmIG1zZywgZmxvYXQgcGVyY2VudCk7CkBAIC0xNzQsOCArMTczLDYgQEAKICAgdm9pZCBzdGRlcnJDYWxsYmFjayhzdGQ6OnN0cmluZyBjb25zdCYgbXNnKTsKIAogICBib29sIFdhcm5VbmluaXRpYWxpemVkTW9kZTsKLSAgYm9vbCBXYXJuVW51c2VkTW9kZTsKLSAgYm9vbCBXYXJuVW51c2VkQWxsTW9kZTsKICAgUVN0cmluZyBTb3VyY2VEaXJlY3Rvcnk7CiAgIFFTdHJpbmcgQmluYXJ5RGlyZWN0b3J5OwogICBRU3RyaW5nIEdlbmVyYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VDYWNoZVZpZXcuY3h4IGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5jeHgKaW5kZXggM2U2YTQ5ZS4uNjU5YTUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5jeHgKKysrIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5jeHgKQEAgLTE1NSwxMSArMTU1LDcgQEAKIAogdm9pZCBRQ01ha2VDYWNoZVZpZXc6OnNldFNob3dBZHZhbmNlZChib29sIHMpCiB7Ci0jaWYgUVRfVkVSU0lPTiA+PSAwNDAzMDAKLSAgLy8gbmV3IDQuMyBBUEkgdGhhdCBuZWVkcyB0byBiZSBjYWxsZWQuICB3aGF0IGFib3V0IGFuIG9sZGVyIFF0PwogICB0aGlzLT5TZWFyY2hGaWx0ZXItPmludmFsaWRhdGUoKTsKLSNlbmRpZgotCiAgIHRoaXMtPkFkdmFuY2VkRmlsdGVyLT5zZXRTaG93QWR2YW5jZWQocyk7CiB9CiAKQEAgLTIwOSwxOCArMjA1LDMzIEBACiAKIHZvaWQgUUNNYWtlQ2FjaGVNb2RlbDo6c2V0UHJvcGVydGllcyhjb25zdCBRQ01ha2VQcm9wZXJ0eUxpc3QmIHByb3BzKQogeworICB0aGlzLT5iZWdpblJlc2V0TW9kZWwoKTsKKwogICBRU2V0PFFDTWFrZVByb3BlcnR5PiBuZXdQcm9wczsKICAgUVNldDxRQ01ha2VQcm9wZXJ0eT4gbmV3UHJvcHMyOwogCiAgIGlmICh0aGlzLT5TaG93TmV3UHJvcGVydGllcykgeworI2lmIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NIRUNLKDUsIDE0LCAwKQogICAgIG5ld1Byb3BzID0gcHJvcHMudG9TZXQoKTsKKyNlbHNlCisgICAgbmV3UHJvcHMgPSBRU2V0PFFDTWFrZVByb3BlcnR5Pihwcm9wcy5iZWdpbigpLCBwcm9wcy5lbmQoKSk7CisjZW5kaWYKICAgICBuZXdQcm9wczIgPSBuZXdQcm9wczsKKyNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAxNCwgMCkKICAgICBRU2V0PFFDTWFrZVByb3BlcnR5PiBvbGRQcm9wcyA9IHRoaXMtPnByb3BlcnRpZXMoKS50b1NldCgpOworI2Vsc2UKKyAgICBRU2V0PFFDTWFrZVByb3BlcnR5PiBvbGRQcm9wcyA9IFFTZXQ8UUNNYWtlUHJvcGVydHk+KAorICAgICAgdGhpcy0+cHJvcGVydGllcygpLmJlZ2luKCksIHRoaXMtPnByb3BlcnRpZXMoKS5lbmQoKSk7CisjZW5kaWYKICAgICBvbGRQcm9wcy5pbnRlcnNlY3QobmV3UHJvcHMpOwogICAgIG5ld1Byb3BzLnN1YnRyYWN0KG9sZFByb3BzKTsKICAgICBuZXdQcm9wczIuc3VidHJhY3QobmV3UHJvcHMpOwogICB9IGVsc2UgeworI2lmIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NIRUNLKDUsIDE0LCAwKQogICAgIG5ld1Byb3BzMiA9IHByb3BzLnRvU2V0KCk7CisjZWxzZQorICAgIG5ld1Byb3BzMiA9IFFTZXQ8UUNNYWtlUHJvcGVydHk+KHByb3BzLmJlZ2luKCksIHByb3BzLmVuZCgpKTsKKyNlbmRpZgogICB9CiAKICAgYm9vbCBiID0gdGhpcy0+YmxvY2tTaWduYWxzKHRydWUpOwpAQCAtMjI5LDEwICsyNDAsMTUgQEAKICAgdGhpcy0+TmV3UHJvcGVydHlDb3VudCA9IG5ld1Byb3BzLnNpemUoKTsKIAogICBpZiAoVmlldyA9PSBGbGF0VmlldykgewotICAgIFFDTWFrZVByb3BlcnR5TGlzdCBuZXdQID0gbmV3UHJvcHMudG9MaXN0KCk7Ci0gICAgUUNNYWtlUHJvcGVydHlMaXN0IG5ld1AyID0gbmV3UHJvcHMyLnRvTGlzdCgpOworICAgIFFDTWFrZVByb3BlcnR5TGlzdCBuZXdQID0gbmV3UHJvcHMudmFsdWVzKCk7CisgICAgUUNNYWtlUHJvcGVydHlMaXN0IG5ld1AyID0gbmV3UHJvcHMyLnZhbHVlcygpOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCA5LCAwKQorICAgIHN0ZDo6c29ydChuZXdQLmJlZ2luKCksIG5ld1AuZW5kKCkpOworICAgIHN0ZDo6c29ydChuZXdQMi5iZWdpbigpLCBuZXdQMi5lbmQoKSk7CisjZWxzZQogICAgIHFTb3J0KG5ld1ApOwogICAgIHFTb3J0KG5ld1AyKTsKKyNlbmRpZgogICAgIGludCByb3dfY291bnQgPSAwOwogICAgIGZvcmVhY2ggKFFDTWFrZVByb3BlcnR5IGNvbnN0JiBwLCBuZXdQKSB7CiAgICAgICB0aGlzLT5pbnNlcnRSb3cocm93X2NvdW50KTsKQEAgLTI2MiwxMCArMjc4LDE3IEBACiAgICAgICBwYXJlbnRJdGVtcy5hcHBlbmQoCiAgICAgICAgIG5ldyBRU3RhbmRhcmRJdGVtKGtleS5pc0VtcHR5KCkgPyB0cigiVW5ncm91cGVkIEVudHJpZXMiKSA6IGtleSkpOwogICAgICAgcGFyZW50SXRlbXMuYXBwZW5kKG5ldyBRU3RhbmRhcmRJdGVtKCkpOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCA5LCAwKQorICAgICAgcGFyZW50SXRlbXNbMF0tPnNldERhdGEoUUJydXNoKFFDb2xvcigyNTUsIDEwMCwgMTAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdDo6QmFja2dyb3VuZFJvbGUpOworICAgICAgcGFyZW50SXRlbXNbMV0tPnNldERhdGEoUUJydXNoKFFDb2xvcigyNTUsIDEwMCwgMTAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdDo6QmFja2dyb3VuZFJvbGUpOworI2Vsc2UKICAgICAgIHBhcmVudEl0ZW1zWzBdLT5zZXREYXRhKFFCcnVzaChRQ29sb3IoMjU1LCAxMDAsIDEwMCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXQ6OkJhY2tncm91bmRDb2xvclJvbGUpOwogICAgICAgcGFyZW50SXRlbXNbMV0tPnNldERhdGEoUUJydXNoKFFDb2xvcigyNTUsIDEwMCwgMTAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdDo6QmFja2dyb3VuZENvbG9yUm9sZSk7CisjZW5kaWYKICAgICAgIHBhcmVudEl0ZW1zWzBdLT5zZXREYXRhKDEsIEdyb3VwUm9sZSk7CiAgICAgICBwYXJlbnRJdGVtc1sxXS0+c2V0RGF0YSgxLCBHcm91cFJvbGUpOwogICAgICAgcm9vdC0+YXBwZW5kUm93KHBhcmVudEl0ZW1zKTsKQEAgLTMwNSw3ICszMjgsNyBAQAogICB9CiAKICAgdGhpcy0+YmxvY2tTaWduYWxzKGIpOwotICB0aGlzLT5yZXNldCgpOworICB0aGlzLT5lbmRSZXNldE1vZGVsKCk7CiB9CiAKIFFDTWFrZUNhY2hlTW9kZWw6OlZpZXdUeXBlIFFDTWFrZUNhY2hlTW9kZWw6OnZpZXdUeXBlKCkgY29uc3QKQEAgLTMxNSw2ICszMzgsOCBAQAogCiB2b2lkIFFDTWFrZUNhY2hlTW9kZWw6OnNldFZpZXdUeXBlKFFDTWFrZUNhY2hlTW9kZWw6OlZpZXdUeXBlIHQpCiB7CisgIHRoaXMtPmJlZ2luUmVzZXRNb2RlbCgpOworCiAgIHRoaXMtPlZpZXcgPSB0OwogCiAgIFFDTWFrZVByb3BlcnR5TGlzdCBwcm9wcyA9IHRoaXMtPnByb3BlcnRpZXMoKTsKQEAgLTMzMCw3ICszNTUsNyBAQAogICB0aGlzLT5zZXRQcm9wZXJ0aWVzKG9sZFByb3BzKTsKICAgdGhpcy0+c2V0UHJvcGVydGllcyhwcm9wcyk7CiAgIHRoaXMtPmJsb2NrU2lnbmFscyhiKTsKLSAgdGhpcy0+cmVzZXQoKTsKKyAgdGhpcy0+ZW5kUmVzZXRNb2RlbCgpOwogfQogCiB2b2lkIFFDTWFrZUNhY2hlTW9kZWw6OnNldFByb3BlcnR5RGF0YShjb25zdCBRTW9kZWxJbmRleCYgaWR4MSwKQEAgLTM1NiwxMCArMzgxLDE1IEBACiAgIH0KIAogICBpZiAoaXNOZXcpIHsKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgOSwgMCkKKyAgICB0aGlzLT5zZXREYXRhKGlkeDEsIFFCcnVzaChRQ29sb3IoMjU1LCAxMDAsIDEwMCkpLCBRdDo6QmFja2dyb3VuZFJvbGUpOworICAgIHRoaXMtPnNldERhdGEoaWR4MiwgUUJydXNoKFFDb2xvcigyNTUsIDEwMCwgMTAwKSksIFF0OjpCYWNrZ3JvdW5kUm9sZSk7CisjZWxzZQogICAgIHRoaXMtPnNldERhdGEoaWR4MSwgUUJydXNoKFFDb2xvcigyNTUsIDEwMCwgMTAwKSksCiAgICAgICAgICAgICAgICAgICBRdDo6QmFja2dyb3VuZENvbG9yUm9sZSk7CiAgICAgdGhpcy0+c2V0RGF0YShpZHgyLCBRQnJ1c2goUUNvbG9yKDI1NSwgMTAwLCAxMDApKSwKICAgICAgICAgICAgICAgICAgIFF0OjpCYWNrZ3JvdW5kQ29sb3JSb2xlKTsKKyNlbmRpZgogICB9CiB9CiAKQEAgLTQwOSw3ICs0MzksMTEgQEAKICAgICAgIHJlb3JnUHJvcHMuYXBwZW5kKCgqaXRlcilbMF0pOwogICAgICAgaXRlciA9IHRtcC5lcmFzZShpdGVyKTsKICAgICB9IGVsc2UgeworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCA5LCAwKQorICAgICAgc3RkOjpzb3J0KGl0ZXItPmJlZ2luKCksIGl0ZXItPmVuZCgpKTsKKyNlbHNlCiAgICAgICBxU29ydCgqaXRlcik7CisjZW5kaWYKICAgICAgICsraXRlcjsKICAgICB9CiAgIH0KQEAgLTQ0Nyw4ICs0ODEsNyBAQAogICAgICAgLy8gZ28gdG8gdGhlIG5leHQgaW4gdGhlIHRyZWUKICAgICAgIHdoaWxlICghaWR4cy5pc0VtcHR5KCkgJiYKICAgICAgICAgICAgICAoCi0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NIRUNLKDUsIDEsIDApCisjaWYgUVRfVkVSU0lPTiA8IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMSwgMCkKICAgICAgICAgICAgICAgIChpZHhzLmxhc3QoKS5yb3coKSArIDEpID49IHJvd0NvdW50KGlkeHMubGFzdCgpLnBhcmVudCgpKSB8fAogI2VuZGlmCiAgICAgICAgICAgICAgICAhaWR4cy5sYXN0KCkuc2libGluZyhpZHhzLmxhc3QoKS5yb3coKSArIDEsIDApLmlzVmFsaWQoKSkpIHsKQEAgLTYwOCwyMCArNjQxLDYgQEAKICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLS8vIElzc3VlIDIwNTkwMyBmaXhlZCBpbiBRdCA0LjUuMC4KLS8vIENhbiByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgRmlsZURpYWxvZ0ZsYWcgd2hlbiBtaW5pbXVtIFF0IHZlcnNpb24gaXMgNC41Ci1ib29sIFFDTWFrZUNhY2hlTW9kZWxEZWxlZ2F0ZTo6ZXZlbnRGaWx0ZXIoUU9iamVjdCogb2JqZWN0LCBRRXZlbnQqIGV2dCkKLXsKLSAgLy8gd29ya2Fyb3VuZCBmb3Igd2hhdCBsb29rcyBsaWtlIGEgYnVnIGluIFF0IG9uIG1hY09TCi0gIC8vIHdoZXJlIGl0IGRvZXNuJ3QgY3JlYXRlIGEgUVdpZGdldCB3cmFwcGVyIGZvciB0aGUgbmF0aXZlIGZpbGUgZGlhbG9nCi0gIC8vIHNvIHRoZSBRdCBsaWJyYXJ5IGVuZHMgdXAgYXNzdW1pbmcgdGhlIGZvY3VzIHdhcyBsb3N0IHRvIHNvbWV0aGluZyBlbHNlCi0KLSAgaWYgKGV2dC0+dHlwZSgpID09IFFFdmVudDo6Rm9jdXNPdXQgJiYgdGhpcy0+RmlsZURpYWxvZ0ZsYWcpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIFFJdGVtRGVsZWdhdGU6OmV2ZW50RmlsdGVyKG9iamVjdCwgZXZ0KTsKLX0KLQogdm9pZCBRQ01ha2VDYWNoZU1vZGVsRGVsZWdhdGU6OnNldE1vZGVsRGF0YShRV2lkZ2V0KiBlZGl0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFBYnN0cmFjdEl0ZW1Nb2RlbCogbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNb2RlbEluZGV4JiBpbmRleCkgY29uc3QKQEAgLTYzOSw5ICs2NTgsMTUgQEAKICAgLy8gaW5jcmVhc2UgdG8gY2hlY2tib3ggc2l6ZQogICBRU3R5bGVPcHRpb25CdXR0b24gb3B0OwogICBvcHQuUVN0eWxlT3B0aW9uOjpvcGVyYXRvcj0ob3B0aW9uKTsKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMTMsIDApCisgIHN6ID0gc3ouZXhwYW5kZWRUbygKKyAgICBzdHlsZS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9JdGVtVmlld0l0ZW1DaGVja0luZGljYXRvciwgJm9wdCwgbnVsbHB0cikKKyAgICAgIC5zaXplKCkpOworI2Vsc2UKICAgc3ogPSBzei5leHBhbmRlZFRvKAogICAgIHN0eWxlLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1ZpZXdJdGVtQ2hlY2tJbmRpY2F0b3IsICZvcHQsIG51bGxwdHIpCiAgICAgICAuc2l6ZSgpKTsKKyNlbmRpZgogCiAgIHJldHVybiBzejsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VDYWNoZVZpZXcuaCBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VDYWNoZVZpZXcuaAppbmRleCBiZWExOTY1Li5hMjUyNzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlQ2FjaGVWaWV3LmgKKysrIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5oCkBAIC0xNDQsNyArMTQ0LDYgQEAKICAgYm9vbCBlZGl0b3JFdmVudChRRXZlbnQqIGV2ZW50LCBRQWJzdHJhY3RJdGVtTW9kZWwqIG1vZGVsLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHlsZU9wdGlvblZpZXdJdGVtJiBvcHRpb24sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUU1vZGVsSW5kZXgmIGluZGV4KTsKLSAgYm9vbCBldmVudEZpbHRlcihRT2JqZWN0KiBvYmplY3QsIFFFdmVudCogZXZlbnQpOwogICB2b2lkIHNldE1vZGVsRGF0YShRV2lkZ2V0KiBlZGl0b3IsIFFBYnN0cmFjdEl0ZW1Nb2RlbCogbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNb2RlbEluZGV4JiBpbmRleCkgY29uc3Q7CiAgIFFTaXplIHNpemVIaW50KGNvbnN0IFFTdHlsZU9wdGlvblZpZXdJdGVtJiBvcHRpb24sCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlV2lkZ2V0cy5jeHggYi9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlV2lkZ2V0cy5jeHgKaW5kZXggMzMyYTc3MC4uZDE2ZWE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL1FDTWFrZVdpZGdldHMuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VXaWRnZXRzLmN4eApAQCAtNCw5ICs0LDkgQEAKIAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlIDxRRGlyTW9kZWw+CiAjaW5jbHVkZSA8UUZpbGVEaWFsb2c+CiAjaW5jbHVkZSA8UUZpbGVJbmZvPgorI2luY2x1ZGUgPFFGaWxlU3lzdGVtTW9kZWw+CiAjaW5jbHVkZSA8UVJlc2l6ZUV2ZW50PgogI2luY2x1ZGUgPFFUb29sQnV0dG9uPgogCkBAIC04OCwyMCArODgsMjAgQEAKICAgfQogfQogCi0vLyB1c2Ugc2FtZSBRRGlyTW9kZWwgZm9yIGFsbCBjb21wbGV0ZXJzCi1zdGF0aWMgUURpck1vZGVsKiBmaWxlRGlyTW9kZWwoKQorLy8gdXNlIHNhbWUgUUZpbGVTeXN0ZW1Nb2RlbCBmb3IgYWxsIGNvbXBsZXRlcnMKK3N0YXRpYyBRRmlsZVN5c3RlbU1vZGVsKiBmaWxlRGlyTW9kZWwoKQogewotICBzdGF0aWMgUURpck1vZGVsKiBtID0gbnVsbHB0cjsKKyAgc3RhdGljIFFGaWxlU3lzdGVtTW9kZWwqIG0gPSBudWxscHRyOwogICBpZiAoIW0pIHsKLSAgICBtID0gbmV3IFFEaXJNb2RlbCgpOworICAgIG0gPSBuZXcgUUZpbGVTeXN0ZW1Nb2RlbCgpOwogICB9CiAgIHJldHVybiBtOwogfQotc3RhdGljIFFEaXJNb2RlbCogcGF0aERpck1vZGVsKCkKK3N0YXRpYyBRRmlsZVN5c3RlbU1vZGVsKiBwYXRoRGlyTW9kZWwoKQogewotICBzdGF0aWMgUURpck1vZGVsKiBtID0gbnVsbHB0cjsKKyAgc3RhdGljIFFGaWxlU3lzdGVtTW9kZWwqIG0gPSBudWxscHRyOwogICBpZiAoIW0pIHsKLSAgICBtID0gbmV3IFFEaXJNb2RlbCgpOworICAgIG0gPSBuZXcgUUZpbGVTeXN0ZW1Nb2RlbCgpOwogICAgIG0tPnNldEZpbHRlcihRRGlyOjpBbGxEaXJzIHwgUURpcjo6RHJpdmVzIHwgUURpcjo6Tm9Eb3RBbmREb3REb3QpOwogICB9CiAgIHJldHVybiBtOwpAQCAtMTEwLDcgKzExMCw3IEBACiBRQ01ha2VGaWxlQ29tcGxldGVyOjpRQ01ha2VGaWxlQ29tcGxldGVyKFFPYmplY3QqIG8sIGJvb2wgZGlycykKICAgOiBRQ29tcGxldGVyKG8pCiB7Ci0gIFFEaXJNb2RlbCogbSA9IGRpcnMgPyBwYXRoRGlyTW9kZWwoKSA6IGZpbGVEaXJNb2RlbCgpOworICBRRmlsZVN5c3RlbU1vZGVsKiBtID0gZGlycyA/IHBhdGhEaXJNb2RlbCgpIDogZmlsZURpck1vZGVsKCk7CiAgIHRoaXMtPnNldE1vZGVsKG0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvUmVnZXhFeHBsb3Jlci5jeHggYi9Tb3VyY2UvUXREaWFsb2cvUmVnZXhFeHBsb3Jlci5jeHgKaW5kZXggNzQ2ZmQ4YS4uNjE5NDk0MCAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL1JlZ2V4RXhwbG9yZXIuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9SZWdleEV4cGxvcmVyLmN4eApAQCAtMTQ3LDkgKzE0Nyw2IEBACiAgICAgICB9IGVsc2UgaWYgKG5leHRjID09ICduJykgewogICAgICAgICByZXN1bHQuYXBwZW5kKDEsICdcbicpOwogICAgICAgICBpbisrOwotICAgICAgfSBlbHNlIGlmIChuZXh0YyA9PSAndCcpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgxLCAnXHQnKTsKLSAgICAgICAgaW4rKzsKICAgICAgIH0gZWxzZSBpZiAoaXNhbG51bShuZXh0YykgfHwgbmV4dGMgPT0gJ1wwJykgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL2JpbmRleHBsaWIuY3h4IGIvU291cmNlL2JpbmRleHBsaWIuY3h4CmluZGV4IDBiMjc1MGQuLjg0MzU3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9iaW5kZXhwbGliLmN4eAorKysgYi9Tb3VyY2UvYmluZGV4cGxpYi5jeHgKQEAgLTY0LDcgKzY0LDcgQEAKICAqLwogI2luY2x1ZGUgImJpbmRleHBsaWIuaCIKIAotI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHZlY3Rvcj4KIApAQCAtMjc2LDggKzI3Niw5IEBACiAgICAgICAgICAgICAgIHN5bWJvbC5jb21wYXJlKDAsIDQsIHZlY3RvclByZWZpeCkpIHsKICAgICAgICAgICAgIFNlY3RDaGFyID0gdGhpcy0+U2VjdGlvbkhlYWRlcnNbcFN5bWJvbFRhYmxlLT5TZWN0aW9uTnVtYmVyIC0gMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAuQ2hhcmFjdGVyaXN0aWNzOwotICAgICAgICAgICAgLy8gc2tpcCBzeW1ib2xzIGNvbnRhaW5pbmcgYSBkb3QKLSAgICAgICAgICAgIGlmIChzeW1ib2wuZmluZCgnLicpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICAvLyBza2lwIHN5bWJvbHMgY29udGFpbmluZyBhIGRvdCBvciBhcmUgZnJvbSBtYW5hZ2VkIGNvZGUKKyAgICAgICAgICAgIGlmIChzeW1ib2wuZmluZCgnLicpID09IHN0ZDo6c3RyaW5nOjpucG9zICYmCisgICAgICAgICAgICAgICAgIVN5bWJvbElzRnJvbU1hbmFnZWRDb2RlKHN5bWJvbCkpIHsKICAgICAgICAgICAgICAgaWYgKCFwU3ltYm9sVGFibGUtPlR5cGUgJiYgKFNlY3RDaGFyICYgSU1BR0VfU0NOX01FTV9XUklURSkpIHsKICAgICAgICAgICAgICAgICAvLyBSZWFkIG9ubHkgKGkuZS4gY29uc3RhbnRzKSBtdXN0IGJlIGV4Y2x1ZGVkCiAgICAgICAgICAgICAgICAgdGhpcy0+RGF0YVN5bWJvbHMuaW5zZXJ0KHN5bWJvbCk7CkBAIC0zMDIsNiArMzAzLDEzIEBACiAgIH0KIAogcHJpdmF0ZToKKyAgYm9vbCBTeW1ib2xJc0Zyb21NYW5hZ2VkQ29kZShzdGQ6OnN0cmluZyBjb25zdCYgc3ltYm9sKQorICB7CisgICAgcmV0dXJuIHN5bWJvbCA9PSAiX190Mm0iIHx8IHN5bWJvbCA9PSAiX19tMm1lcCIgfHwgc3ltYm9sID09ICJfX21lcCIgfHwKKyAgICAgIHN5bWJvbC5maW5kKCIkJEYiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fAorICAgICAgc3ltYm9sLmZpbmQoIiQkSiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICB9CisKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBTeW1ib2xzOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIERhdGFTeW1ib2xzOwogICBEV09SRF9QVFIgU3ltYm9sQ291bnQ7CkBAIC0zNTIsMTQgKzM2MCwxNCBAQAogICAgICAgICAgICAgICBsaW5lLmNfc3RyKCkpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyBzeW0gPSBsaW5lLnN1YnN0cigwLCBzeW1fZW5kKTsKICAgICBjb25zdCBjaGFyIHN5bV90eXBlID0gbGluZVtzeW1fZW5kICsgMV07CisgICAgbGluZS5yZXNpemUoc3ltX2VuZCk7CiAgICAgc3dpdGNoIChzeW1fdHlwZSkgewogICAgICAgY2FzZSAnRCc6Ci0gICAgICAgIGRhdGFTeW1ib2xzLmluc2VydChzeW0pOworICAgICAgICBkYXRhU3ltYm9scy5pbnNlcnQobGluZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAnVCc6Ci0gICAgICAgIHN5bWJvbHMuaW5zZXJ0KHN5bSk7CisgICAgICAgIHN5bWJvbHMuaW5zZXJ0KGxpbmUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFkZEV4ZWN1dGFibGVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUFkZEV4ZWN1dGFibGVDb21tYW5kLmN4eAppbmRleCBlNzM4YmM0Li45ZGQ4YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BZGRFeGVjdXRhYmxlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQWRkRXhlY3V0YWJsZUNvbW1hbmQuY3h4CkBAIC0xMTcsMTQgKzExNyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGlzIG5vdCBhbiBleGVjdXRhYmxlLiIpKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKGFsaWFzZWRUYXJnZXQtPklzSW1wb3J0ZWQoKSAmJgotICAgICAgICAhYWxpYXNlZFRhcmdldC0+SXNJbXBvcnRlZEdsb2JhbGx5VmlzaWJsZSgpKSB7Ci0gICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImNhbm5vdCBjcmVhdGUgQUxJQVMgdGFyZ2V0IFwiIiwgZXhlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgYmVjYXVzZSB0YXJnZXQgXCIiLCBhbGlhc2VkTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgaW1wb3J0ZWQgYnV0IG5vdCBnbG9iYWxseSB2aXNpYmxlLiIpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWYuQWRkQWxpYXMoZXhlbmFtZSwgYWxpYXNlZE5hbWUpOworICAgIG1mLkFkZEFsaWFzKGV4ZW5hbWUsIGFsaWFzZWROYW1lLAorICAgICAgICAgICAgICAgICFhbGlhc2VkVGFyZ2V0LT5Jc0ltcG9ydGVkKCkgfHwKKyAgICAgICAgICAgICAgICAgIGFsaWFzZWRUYXJnZXQtPklzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWRkTGlicmFyeUNvbW1hbmQuY3h4IGIvU291cmNlL2NtQWRkTGlicmFyeUNvbW1hbmQuY3h4CmluZGV4IGY0NDNmYzYuLjNlNWQ3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFkZExpYnJhcnlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BZGRMaWJyYXJ5Q29tbWFuZC5jeHgKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC0xODEsNiArMTgyLDE2IEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaWYgKG1mLkdldFBvbGljeVN0YXR1cyhjbVBvbGljaWVzOjpDTVAwMTA3KSA9PSBjbVBvbGljaWVzOjpORVcpIHsKKyAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgICAgICBpZiAobWYuRmluZFRhcmdldFRvVXNlKGxpYk5hbWUpKSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgKKyAgICAgICAgICAiY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgXCIiLCBsaWJOYW1lLAorICAgICAgICAgICJcIiBiZWNhdXNlIGFub3RoZXIgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYWxpYXNlZE5hbWUgPSAqczsKICAgICBpZiAobWYuSXNBbGlhcyhhbGlhc2VkTmFtZSkpIHsKICAgICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgXCIiLCBsaWJOYW1lLApAQCAtMjA4LDE0ICsyMTksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiBpcyBub3QgYSBsaWJyYXJ5LiIpKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKGFsaWFzZWRUYXJnZXQtPklzSW1wb3J0ZWQoKSAmJgotICAgICAgICAhYWxpYXNlZFRhcmdldC0+SXNJbXBvcnRlZEdsb2JhbGx5VmlzaWJsZSgpKSB7Ci0gICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImNhbm5vdCBjcmVhdGUgQUxJQVMgdGFyZ2V0IFwiIiwgbGliTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgYmVjYXVzZSB0YXJnZXQgXCIiLCBhbGlhc2VkTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgaW1wb3J0ZWQgYnV0IG5vdCBnbG9iYWxseSB2aXNpYmxlLiIpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWYuQWRkQWxpYXMobGliTmFtZSwgYWxpYXNlZE5hbWUpOworICAgIG1mLkFkZEFsaWFzKGxpYk5hbWUsIGFsaWFzZWROYW1lLAorICAgICAgICAgICAgICAgICFhbGlhc2VkVGFyZ2V0LT5Jc0ltcG9ydGVkKCkgfHwKKyAgICAgICAgICAgICAgICAgIGFsaWFzZWRUYXJnZXQtPklzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWRkU3ViRGlyZWN0b3J5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21BZGRTdWJEaXJlY3RvcnlDb21tYW5kLmN4eAppbmRleCAzNWVhYmFmLi44M2Q2MzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BZGRTdWJEaXJlY3RvcnlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BZGRTdWJEaXJlY3RvcnlDb21tYW5kLmN4eApAQCAtNCw2ICs0LDggQEAKIAogI2luY2x1ZGUgPGNzdHJpbmc+CiAKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKQEAgLTg2LDcgKzg4LDggQEAKICAgICBpZiAoYmluTGVuID4gMCAmJiBiaW4uYmFjaygpID09ICcvJykgewogICAgICAgLS1iaW5MZW47CiAgICAgfQotICAgIGJpblBhdGggPSBiaW4uc3Vic3RyKDAsIGJpbkxlbikgKyBzcmNQYXRoLnN1YnN0cihzcmNMZW4pOworICAgIGJpblBhdGggPSBjbVN0ckNhdChjbTo6c3RyaW5nX3ZpZXcoYmluKS5zdWJzdHIoMCwgYmluTGVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgY206OnN0cmluZ192aWV3KHNyY1BhdGgpLnN1YnN0cihzcmNMZW4pKTsKICAgfSBlbHNlIHsKICAgICAvLyBVc2UgdGhlIGJpbmFyeSBkaXJlY3Rvcnkgc3BlY2lmaWVkLgogICAgIC8vIEludGVycHJldCBhIHJlbGF0aXZlIHBhdGggd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGJpbmFyeSBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21BZmZpbml0eS5jeHggYi9Tb3VyY2UvY21BZmZpbml0eS5jeHgKaW5kZXggOGY5ZmUyYS4uMzU0NDNlNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQWZmaW5pdHkuY3h4CisrKyBiL1NvdXJjZS9jbUFmZmluaXR5LmN4eApAQCAtMiw3ICsyLDcgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtQWZmaW5pdHkuaCIKIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaWZuZGVmIENNQUtFX1VTRV9TWVNURU1fTElCVVYKICMgIGlmZGVmIF9XSU4zMgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWxnb3JpdGhtcy5oIGIvU291cmNlL2NtQWxnb3JpdGhtcy5oCmluZGV4IGMwYWM1NTEuLmM4ZThkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFsZ29yaXRobXMuaAorKysgYi9Tb3VyY2UvY21BbGdvcml0aG1zLmgKQEAgLTEzLDIwICsxMywxMCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAKLXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgotc3RydWN0IGNtT3ZlcmxvYWRQcmlvcml0eSA6IGNtT3ZlcmxvYWRQcmlvcml0eTxOIC0gMT4KLXsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgY21PdmVybG9hZFByaW9yaXR5PDA+Ci17Ci19OwotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRndkSXQ+CiBGd2RJdCBjbVJvdGF0ZShGd2RJdCBmaXJzdCwgRndkSXQgbWlkZGxlLCBGd2RJdCBsYXN0KQogewpAQCAtMzcsMzQgKzI3LDYgQEAKICAgcmV0dXJuIGZpcnN0OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleT4KLWF1dG8gY21Db250YWluc0ltcGwoUmFuZ2UgY29uc3QmIHJhbmdlLCBLZXkgY29uc3QmIGtleSwgY21PdmVybG9hZFByaW9yaXR5PDI+KQotICAtPiBkZWNsdHlwZShyYW5nZS5leGlzdHMoa2V5KSkKLXsKLSAgcmV0dXJuIHJhbmdlLmV4aXN0cyhrZXkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleT4KLWF1dG8gY21Db250YWluc0ltcGwoUmFuZ2UgY29uc3QmIHJhbmdlLCBLZXkgY29uc3QmIGtleSwgY21PdmVybG9hZFByaW9yaXR5PDE+KQotICAtPiBkZWNsdHlwZShyYW5nZS5maW5kKGtleSkgIT0gcmFuZ2UuZW5kKCkpCi17Ci0gIHJldHVybiByYW5nZS5maW5kKGtleSkgIT0gcmFuZ2UuZW5kKCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZSwgdHlwZW5hbWUgS2V5PgotYm9vbCBjbUNvbnRhaW5zSW1wbChSYW5nZSBjb25zdCYgcmFuZ2UsIEtleSBjb25zdCYga2V5LCBjbU92ZXJsb2FkUHJpb3JpdHk8MD4pCi17Ci0gIHVzaW5nIHN0ZDo6YmVnaW47Ci0gIHVzaW5nIHN0ZDo6ZW5kOwotICByZXR1cm4gc3RkOjpmaW5kKGJlZ2luKHJhbmdlKSwgZW5kKHJhbmdlKSwga2V5KSAhPSBlbmQocmFuZ2UpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleT4KLWJvb2wgY21Db250YWlucyhSYW5nZSBjb25zdCYgcmFuZ2UsIEtleSBjb25zdCYga2V5KQotewotICByZXR1cm4gY21Db250YWluc0ltcGwocmFuZ2UsIGtleSwgY21PdmVybG9hZFByaW9yaXR5PDI+e30pOwotfQotCiBuYW1lc3BhY2UgQ29udGFpbmVyQWxnb3JpdGhtcyB7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGd2RJdD4KQEAgLTE1OCw3ICsxMjAsNyBAQAogCiAgIEZvcndhcmRJdGVyYXRvciByZXN1bHQgPSBmaXJzdDsKICAgd2hpbGUgKGZpcnN0ICE9IGxhc3QpIHsKLSAgICBpZiAoIWNtQ29udGFpbnModW5pcSwgZmlyc3QpKSB7CisgICAgaWYgKCFjbTo6Y29udGFpbnModW5pcSwgZmlyc3QpKSB7CiAgICAgICBpZiAocmVzdWx0ICE9IGZpcnN0KSB7CiAgICAgICAgICpyZXN1bHQgPSBzdGQ6Om1vdmUoKmZpcnN0KTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFyY2hpdmVXcml0ZS5jeHggYi9Tb3VyY2UvY21BcmNoaXZlV3JpdGUuY3h4CmluZGV4IGQyOWIyYWMuLmFkZGZiZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFyY2hpdmVXcml0ZS5jeHgKKysrIGIvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmN4eApAQCAtNywxMiArNywxNCBAQAogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAKKyNpbmNsdWRlIDxjbTNwL2FyY2hpdmUuaD4KKyNpbmNsdWRlIDxjbTNwL2FyY2hpdmVfZW50cnkuaD4KKwogI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaHh4IgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCiAjaW5jbHVkZSAiY21fZ2V0X2RhdGUuaCIKLSNpbmNsdWRlICJjbV9saWJhcmNoaXZlLmgiCiAKICNpbmNsdWRlICJjbUxvY2FsZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMTcwLDE1ICsxNzIsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtX2FyY2hpdmVfZXJyb3Jfc3RyaW5nKHRoaXMtPkFyY2hpdmUpKTsKICAgICByZXR1cm47CiAgIH0KK30KIAorYm9vbCBjbUFyY2hpdmVXcml0ZTo6T3BlbigpCit7CiAgIGlmIChhcmNoaXZlX3dyaXRlX29wZW4oCiAgICAgICAgIHRoaXMtPkFyY2hpdmUsIHRoaXMsIG51bGxwdHIsCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8YXJjaGl2ZV93cml0ZV9jYWxsYmFjayo+KCZDYWxsYmFjazo6V3JpdGUpLAogICAgICAgICBudWxscHRyKSAhPSBBUkNISVZFX09LKSB7CiAgICAgdGhpcy0+RXJyb3IgPQogICAgICAgY21TdHJDYXQoImFyY2hpdmVfd3JpdGVfb3BlbjogIiwgY21fYXJjaGl2ZV9lcnJvcl9zdHJpbmcodGhpcy0+QXJjaGl2ZSkpOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KKyAgcmV0dXJuIHRydWU7CiB9CiAKIGNtQXJjaGl2ZVdyaXRlOjp+Y21BcmNoaXZlV3JpdGUoKQpAQCAtMjc2LDcgKzI4MiwxMiBAQAogICAgICAgdGltZV90IGVwb2NoVGltZTsKICAgICAgIGlzcyA+PiBlcG9jaFRpbWU7CiAgICAgICBpZiAoaXNzLmVvZigpICYmICFpc3MuZmFpbCgpKSB7CisgICAgICAgIC8vIFNldCBhbGwgb2YgdGhlIGZpbGUgdGltZXMgdG8gdGhlIGVwb2NoIHRpbWUgdG8gaGFuZGxlIGFyY2hpdmUKKyAgICAgICAgLy8gZm9ybWF0cyB0aGF0IGluY2x1ZGUgY3JlYXRpb24vYWNjZXNzIHRpbWUuCiAgICAgICAgIGFyY2hpdmVfZW50cnlfc2V0X210aW1lKGUsIGVwb2NoVGltZSwgMCk7CisgICAgICAgIGFyY2hpdmVfZW50cnlfc2V0X2F0aW1lKGUsIGVwb2NoVGltZSwgMCk7CisgICAgICAgIGFyY2hpdmVfZW50cnlfc2V0X2N0aW1lKGUsIGVwb2NoVGltZSwgMCk7CisgICAgICAgIGFyY2hpdmVfZW50cnlfc2V0X2JpcnRodGltZShlLCBlcG9jaFRpbWUsIDApOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMzY1LDMgKzM3NiwxNiBAQAogICB9CiAgIHJldHVybiB0cnVlOwogfQorCitib29sIGNtQXJjaGl2ZVdyaXRlOjpTZXRGaWx0ZXJPcHRpb24oY29uc3QgY2hhciogbW9kdWxlLCBjb25zdCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUpCit7CisgIGlmIChhcmNoaXZlX3dyaXRlX3NldF9maWx0ZXJfb3B0aW9uKHRoaXMtPkFyY2hpdmUsIG1vZHVsZSwga2V5LCB2YWx1ZSkgIT0KKyAgICAgIEFSQ0hJVkVfT0spIHsKKyAgICB0aGlzLT5FcnJvciA9ICJhcmNoaXZlX3dyaXRlX3NldF9maWx0ZXJfb3B0aW9uOiAiOworICAgIHRoaXMtPkVycm9yICs9IGNtX2FyY2hpdmVfZXJyb3Jfc3RyaW5nKHRoaXMtPkFyY2hpdmUpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmggYi9Tb3VyY2UvY21BcmNoaXZlV3JpdGUuaAppbmRleCBlNzkxNzYxLi5iNjQzYmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BcmNoaXZlV3JpdGUuaAorKysgYi9Tb3VyY2UvY21BcmNoaXZlV3JpdGUuaApAQCAtNjIsNiArNjIsOCBAQAogICBjbUFyY2hpdmVXcml0ZShjb25zdCBjbUFyY2hpdmVXcml0ZSYpID0gZGVsZXRlOwogICBjbUFyY2hpdmVXcml0ZSYgb3BlcmF0b3I9KGNvbnN0IGNtQXJjaGl2ZVdyaXRlJikgPSBkZWxldGU7CiAKKyAgYm9vbCBPcGVuKCk7CisKICAgLyoqCiAgICAqIEFkZCBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5KSB0byB0aGUgYXJjaGl2ZS4gIERpcmVjdG9yaWVzIGFyZQogICAgKiBhZGRlZCByZWN1cnNpdmVseS4gIFRoZSAicGF0aCIgbXVzdCBiZSByZWFkYWJsZSBvbiBkaXNrLCBlaXRoZXIKQEAgLTEzOSw2ICsxNDEsOSBAQAogICAgIHRoaXMtPkduYW1lID0gIiI7CiAgIH0KIAorICAvLyEgU2V0IGFuIG9wdGlvbiBvbiBhIGZpbHRlcjsKKyAgYm9vbCBTZXRGaWx0ZXJPcHRpb24oY29uc3QgY2hhciogbW9kdWxlLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwogcHJpdmF0ZToKICAgYm9vbCBPa2F5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+RXJyb3IuZW1wdHkoKTsgfQogICBib29sIEFkZFBhdGgoY29uc3QgY2hhciogcGF0aCwgc2l6ZV90IHNraXAsIGNvbnN0IGNoYXIqIHByZWZpeCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFyZ3VtZW50UGFyc2VyLmN4eCBiL1NvdXJjZS9jbUFyZ3VtZW50UGFyc2VyLmN4eAppbmRleCA0Yzg3MTc3Li40NjI0ZjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Bcmd1bWVudFBhcnNlci5jeHgKKysrIGIvU291cmNlL2NtQXJndW1lbnRQYXJzZXIuY3h4CkBAIC0zLDcgKzMsNiBAQAogI2luY2x1ZGUgImNtQXJndW1lbnRQYXJzZXIuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KIAogbmFtZXNwYWNlIEFyZ3VtZW50UGFyc2VyIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQXJndW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9jbUFyZ3VtZW50UGFyc2VyLmgKaW5kZXggOTQyNjUzNy4uNWQyZGZhMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQXJndW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvY21Bcmd1bWVudFBhcnNlci5oCkBAIC0xMiw4ICsxMiw3IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+Ci0KLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiBuYW1lc3BhY2UgQXJndW1lbnRQYXJzZXIgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21BdXhTb3VyY2VEaXJlY3RvcnlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUF1eFNvdXJjZURpcmVjdG9yeUNvbW1hbmQuY3h4CmluZGV4IDI4OWJiNzIuLjUzZDRjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUF1eFNvdXJjZURpcmVjdG9yeUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUF1eFNvdXJjZURpcmVjdG9yeUNvbW1hbmQuY3h4CkBAIC02LDYgKzYsOCBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCkBAIC01MCwxMSArNTIsMTAgQEAKICAgICAgIC8vIFNwbGl0IHRoZSBmaWxlbmFtZSBpbnRvIGJhc2UgYW5kIGV4dGVuc2lvbgogICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBkb3Rwb3MgPSBmaWxlLnJmaW5kKCcuJyk7CiAgICAgICBpZiAoZG90cG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGV4dCA9IGZpbGUuc3Vic3RyKGRvdHBvcyArIDEpOwotICAgICAgICBzdGQ6OnN0cmluZyBiYXNlID0gZmlsZS5zdWJzdHIoMCwgZG90cG9zKTsKKyAgICAgICAgYXV0byBleHQgPSBjbTo6c3RyaW5nX3ZpZXcoZmlsZSkuc3Vic3RyKGRvdHBvcyArIDEpOwogICAgICAgICAvLyBQcm9jZXNzIG9ubHkgc291cmNlIGZpbGVzCiAgICAgICAgIGF1dG8gY20gPSBtZi5HZXRDTWFrZUluc3RhbmNlKCk7Ci0gICAgICAgIGlmICghYmFzZS5lbXB0eSgpICYmIGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHQpKSB7CisgICAgICAgIGlmIChkb3Rwb3MgPiAwICYmIGNtLT5Jc0FDTGlrZVNvdXJjZUV4dGVuc2lvbihleHQpKSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgZnVsbG5hbWUgPSBjbVN0ckNhdCh0ZW1wbGF0ZURpcmVjdG9yeSwgJy8nLCBmaWxlKTsKICAgICAgICAgICAvLyBhZGQgdGhlIGZpbGUgYXMgYSBjbGFzcyBmaWxlIHNvCiAgICAgICAgICAgLy8gZGVwZW5kcyBjYW4gYmUgZG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQmluVXRpbHNMaW51eEVMRkxpbmtlci5jeHggYi9Tb3VyY2UvY21CaW5VdGlsc0xpbnV4RUxGTGlua2VyLmN4eAppbmRleCAwZGVhODI1Li45Y2U0MDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21CaW5VdGlsc0xpbnV4RUxGTGlua2VyLmN4eAorKysgYi9Tb3VyY2UvY21CaW5VdGlsc0xpbnV4RUxGTGlua2VyLmN4eApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSA8Y21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4PgogCkBAIC0yNiwxNCArMjcsMTYgQEAKIAogICBjbXN5czo6UmVndWxhckV4cHJlc3Npb25NYXRjaCBtYXRjaDsKICAgaWYgKG9yaWdpblJlZ2V4LmZpbmQocnBhdGguY19zdHIoKSwgbWF0Y2gpKSB7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW4gPSBycGF0aC5zdWJzdHIoMCwgbWF0Y2guc3RhcnQoMSkpOwotICAgIHN0ZDo6c3RyaW5nIGVuZCA9IHJwYXRoLnN1YnN0cihtYXRjaC5lbmQoMSkpOwotICAgIHJldHVybiBiZWdpbiArIG9yaWdpbiArIGVuZDsKKyAgICBjbTo6c3RyaW5nX3ZpZXcgcGF0aHYocnBhdGgpOworICAgIGF1dG8gYmVnaW4gPSBwYXRodi5zdWJzdHIoMCwgbWF0Y2guc3RhcnQoMSkpOworICAgIGF1dG8gZW5kID0gcGF0aHYuc3Vic3RyKG1hdGNoLmVuZCgxKSk7CisgICAgcmV0dXJuIGNtU3RyQ2F0KGJlZ2luLCBvcmlnaW4sIGVuZCk7CiAgIH0KICAgaWYgKG9yaWdpbkN1cmx5UmVnZXguZmluZChycGF0aC5jX3N0cigpLCBtYXRjaCkpIHsKLSAgICBzdGQ6OnN0cmluZyBiZWdpbiA9IHJwYXRoLnN1YnN0cigwLCBtYXRjaC5zdGFydCgpKTsKLSAgICBzdGQ6OnN0cmluZyBlbmQgPSBycGF0aC5zdWJzdHIobWF0Y2guZW5kKCkpOwotICAgIHJldHVybiBiZWdpbiArIG9yaWdpbiArIGVuZDsKKyAgICBjbTo6c3RyaW5nX3ZpZXcgcGF0aHYocnBhdGgpOworICAgIGF1dG8gYmVnaW4gPSBwYXRodi5zdWJzdHIoMCwgbWF0Y2guc3RhcnQoKSk7CisgICAgYXV0byBlbmQgPSBwYXRodi5zdWJzdHIobWF0Y2guZW5kKCkpOworICAgIHJldHVybiBjbVN0ckNhdChiZWdpbiwgb3JpZ2luLCBlbmQpOwogICB9CiAgIHJldHVybiBycGF0aDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUJpblV0aWxzTWFjT1NNYWNoT0xpbmtlci5jeHggYi9Tb3VyY2UvY21CaW5VdGlsc01hY09TTWFjaE9MaW5rZXIuY3h4CmluZGV4IDk4MjUwYjEuLjBmNDcxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUJpblV0aWxzTWFjT1NNYWNoT0xpbmtlci5jeHgKKysrIGIvU291cmNlL2NtQmluVXRpbHNNYWNPU01hY2hPTGlua2VyLmN4eApAQCAtMTQsNiArMTQsMTggQEAKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKK25hbWVzcGFjZSB7Citib29sIElzTWlzc2luZ1N5c3RlbUR5bGliKHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoKQoreworICAvLyBTdGFydGluZyBvbiBtYWNPUyAxMSwgdGhlIGR5bmFtaWMgbG9hZGVyIGhhcyBhIGJ1aWx0aW4gY2FjaGUgb2YKKyAgLy8gc3lzdGVtLXByb3ZpZGVkIGR5bGliIGZpbGVzIHRoYXQgZG8gbm90IGV4aXN0IG9uIHRoZSBmaWxlc3lzdGVtLgorICAvLyBUZWxsIG91ciBjYWxsZXIgdGhhdCB0aGVzZSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWlzc2luZy4KKyAgcmV0dXJuICgoY21IYXNMaXRlcmFsUHJlZml4KHBhdGgsICIvU3lzdGVtL0xpYnJhcnkvIikgfHwKKyAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHBhdGgsICIvdXNyL2xpYi8iKSkgJiYKKyAgICAgICAgICAhY21TeXN0ZW1Ub29sczo6UGF0aEV4aXN0cyhwYXRoKSk7Cit9Cit9CisKIGNtQmluVXRpbHNNYWNPU01hY2hPTGlua2VyOjpjbUJpblV0aWxzTWFjT1NNYWNoT0xpbmtlcigKICAgY21SdW50aW1lRGVwZW5kZW5jeUFyY2hpdmUqIGFyY2hpdmUpCiAgIDogY21CaW5VdGlsc0xpbmtlcihhcmNoaXZlKQpAQCAtODIsNyArOTQsOCBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAgICAgICBpZiAocmVzb2x2ZWQpIHsKLSAgICAgICAgaWYgKCF0aGlzLT5BcmNoaXZlLT5Jc1Bvc3RFeGNsdWRlZChwYXRoKSkgeworICAgICAgICBpZiAoIXRoaXMtPkFyY2hpdmUtPklzUG9zdEV4Y2x1ZGVkKHBhdGgpICYmCisgICAgICAgICAgICAhSXNNaXNzaW5nU3lzdGVtRHlsaWIocGF0aCkpIHsKICAgICAgICAgICBhdXRvIGZpbGVuYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKHBhdGgpOwogICAgICAgICAgIGJvb2wgdW5pcXVlOwogICAgICAgICAgIHRoaXMtPkFyY2hpdmUtPkFkZFJlc29sdmVkUGF0aChmaWxlbmFtZSwgcGF0aCwgdW5pcXVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUJ1aWxkQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21CdWlsZENvbW1hbmQuY3h4CmluZGV4IDQ5Yzk0MzkuLmI4MmZiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUJ1aWxkQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQnVpbGRDb21tYW5kLmN4eApAQCAtMTA4LDcgKzEwOCw3IEBACiAgIGlmIChjYWNoZVZhbHVlKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KLSAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGRlZmluZSwgbWFrZWNvbW1hbmQuY19zdHIoKSwKKyAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGRlZmluZSwgbWFrZWNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCB1c2VkIHRvIGJ1aWxkIGVudGlyZSBwcm9qZWN0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHRoZSBjb21tYW5kIGxpbmUuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUJ1aWxkTmFtZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtQnVpbGROYW1lQ29tbWFuZC5jeHgKaW5kZXggM2U1MTdkYy4uYWQ0ZDY2NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQnVpbGROYW1lQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQnVpbGROYW1lQ29tbWFuZC5jeHgKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgIHN0ZDo6cmVwbGFjZShjdi5iZWdpbigpLCBjdi5lbmQoKSwgJy8nLCAnXycpOwogICAgICAgc3RkOjpyZXBsYWNlKGN2LmJlZ2luKCksIGN2LmVuZCgpLCAnKCcsICdfJyk7CiAgICAgICBzdGQ6OnJlcGxhY2UoY3YuYmVnaW4oKSwgY3YuZW5kKCksICcpJywgJ18nKTsKLSAgICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihhcmdzWzBdLCBjdi5jX3N0cigpLCAiTmFtZSBvZiBidWlsZC4iLAorICAgICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGFyZ3NbMF0sIGN2LCAiTmFtZSBvZiBidWlsZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NCw3ICs1NCw3IEBACiAgIHN0ZDo6cmVwbGFjZShidWlsZG5hbWUuYmVnaW4oKSwgYnVpbGRuYW1lLmVuZCgpLCAnKCcsICdfJyk7CiAgIHN0ZDo6cmVwbGFjZShidWlsZG5hbWUuYmVnaW4oKSwgYnVpbGRuYW1lLmVuZCgpLCAnKScsICdfJyk7CiAKLSAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGFyZ3NbMF0sIGJ1aWxkbmFtZS5jX3N0cigpLCAiTmFtZSBvZiBidWlsZC4iLAorICBtZi5BZGRDYWNoZURlZmluaXRpb24oYXJnc1swXSwgYnVpbGRuYW1lLCAiTmFtZSBvZiBidWlsZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjkyNjlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtQ01ha2VMYW5ndWFnZUNvbW1hbmQuY3h4CkBAIC0wLDAgKzEsMTM3IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaW5jbHVkZSAiY21DTWFrZUxhbmd1YWdlQ29tbWFuZC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgorCisjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKKyNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKKyNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21SYW5nZS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKworbmFtZXNwYWNlIHsKK3N0ZDo6YXJyYXk8Y206OnN0YXRpY19zdHJpbmdfdmlldywgMTI+IEludmFsaWRDb21tYW5kc3sKKyAgeyAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgICJmdW5jdGlvbiJfcywgImVuZGZ1bmN0aW9uIl9zLAorICAibWFjcm8iX3MsICJlbmRtYWNybyJfcywKKyAgImlmIl9zLCAiZWxzZWlmIl9zLCAiZWxzZSJfcywgImVuZGlmIl9zLAorICAid2hpbGUiX3MsICJlbmR3aGlsZSJfcywKKyAgImZvcmVhY2giX3MsICJlbmRmb3JlYWNoIl9zCisgIH0gLy8gY2xhbmctZm9ybWF0IG9uCit9OworfQorCitib29sIGNtQ01ha2VMYW5ndWFnZUNvbW1hbmQoc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUFyZ3VtZW50PiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQoreworICBpZiAoYXJncy5lbXB0eSgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNtTWFrZWZpbGUmIG1ha2VmaWxlID0gc3RhdHVzLkdldE1ha2VmaWxlKCk7CisgIGNtTGlzdEZpbGVDb250ZXh0IGNvbnRleHQgPSBtYWtlZmlsZS5HZXRFeGVjdXRpb25Db250ZXh0KCk7CisKKyAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlzcGF0Y2hFeHBhbmRlZEFyZ3M7CisgIHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVBcmd1bWVudD4gZGlzcGF0Y2hBcmdzOworICBkaXNwYXRjaEFyZ3MuZW1wbGFjZV9iYWNrKGFyZ3NbMF0pOworICBtYWtlZmlsZS5FeHBhbmRBcmd1bWVudHMoZGlzcGF0Y2hBcmdzLCBkaXNwYXRjaEV4cGFuZGVkQXJncyk7CisKKyAgaWYgKGRpc3BhdGNoRXhwYW5kZWRBcmdzLmVtcHR5KCkpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGRpc3BhdGNoRXhwYW5kZWRBcmdzWzBdID09ICJDQUxMIikgeworICAgIGlmICgoYXJncy5zaXplKCkgPT0gMSAmJiBkaXNwYXRjaEV4cGFuZGVkQXJncy5zaXplKCkgIT0gMikgfHwKKyAgICAgICAgZGlzcGF0Y2hFeHBhbmRlZEFyZ3Muc2l6ZSgpID4gMikgeworICAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEZpcnN0IGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsCisgICAgc3RkOjpzdHJpbmcgY2FsbENvbW1hbmQ7CisgICAgc2l6ZV90IHN0YXJ0QXJnOworICAgIGlmIChkaXNwYXRjaEV4cGFuZGVkQXJncy5zaXplKCkgPT0gMSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZ1bmN0aW9uRXhwYW5kZWRBcmc7CisgICAgICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlQXJndW1lbnQ+IGZ1bmN0aW9uQXJnOworICAgICAgZnVuY3Rpb25BcmcuZW1wbGFjZV9iYWNrKGFyZ3NbMV0pOworICAgICAgbWFrZWZpbGUuRXhwYW5kQXJndW1lbnRzKGZ1bmN0aW9uQXJnLCBmdW5jdGlvbkV4cGFuZGVkQXJnKTsKKworICAgICAgaWYgKGZ1bmN0aW9uRXhwYW5kZWRBcmcuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIGNhbGxDb21tYW5kID0gZnVuY3Rpb25FeHBhbmRlZEFyZ1swXTsKKyAgICAgIHN0YXJ0QXJnID0gMjsKKyAgICB9IGVsc2UgeworICAgICAgY2FsbENvbW1hbmQgPSBkaXNwYXRjaEV4cGFuZGVkQXJnc1sxXTsKKyAgICAgIHN0YXJ0QXJnID0gMTsKKyAgICB9CisKKyAgICAvLyBlbnN1cmUgc3BlY2lmaWVkIGNvbW1hbmQgaXMgdmFsaWQKKyAgICAvLyBzdGFydC9lbmQgZmxvdyBjb250cm9sIGNvbW1hbmRzIGFyZSBub3QgYWxsb3dlZAorICAgIGF1dG8gY21kID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKGNhbGxDb21tYW5kKTsKKyAgICBpZiAoc3RkOjpmaW5kKEludmFsaWRDb21tYW5kcy5jYmVnaW4oKSwgSW52YWxpZENvbW1hbmRzLmNlbmQoKSwgY21kKSAhPQorICAgICAgICBJbnZhbGlkQ29tbWFuZHMuY2VuZCgpKSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImludmFsaWQgY29tbWFuZCBzcGVjaWZpZWQ6ICJfcywgY2FsbENvbW1hbmQpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjbUxpc3RGaWxlRnVuY3Rpb24gZnVuYzsKKyAgICBmdW5jLk5hbWUgPSBjYWxsQ29tbWFuZDsKKyAgICBmdW5jLkxpbmUgPSBjb250ZXh0LkxpbmU7CisKKyAgICAvLyBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGwgYWJvdmUKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRBcmc7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7CisgICAgICBjbUxpc3RGaWxlQXJndW1lbnQgbGZhcmc7CisgICAgICBsZmFyZy5EZWxpbSA9IGFyZ3NbaV0uRGVsaW07CisgICAgICBsZmFyZy5MaW5lID0gY29udGV4dC5MaW5lOworICAgICAgbGZhcmcuVmFsdWUgPSBhcmdzW2ldLlZhbHVlOworICAgICAgZnVuYy5Bcmd1bWVudHMuZW1wbGFjZV9iYWNrKGxmYXJnKTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBtYWtlZmlsZS5FeGVjdXRlQ29tbWFuZChmdW5jLCBzdGF0dXMpOworICB9IGVsc2UgaWYgKGRpc3BhdGNoRXhwYW5kZWRBcmdzWzBdID09ICJFVkFMIikgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBhbmRlZEFyZ3M7CisgICAgbWFrZWZpbGUuRXhwYW5kQXJndW1lbnRzKGFyZ3MsIGV4cGFuZGVkQXJncyk7CisKKyAgICBpZiAoZXhwYW5kZWRBcmdzLnNpemUoKSA8IDIpIHsKKyAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZXhwYW5kZWRBcmdzWzFdICE9ICJDT0RFIikgeworICAgICAgYXV0byBjb2RlX2l0ZXIgPQorICAgICAgICBzdGQ6OmZpbmQoZXhwYW5kZWRBcmdzLmJlZ2luKCkgKyAyLCBleHBhbmRlZEFyZ3MuZW5kKCksICJDT0RFIik7CisgICAgICBpZiAoY29kZV9pdGVyID09IGV4cGFuZGVkQXJncy5lbmQoKSkgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRob3V0IENPREUgYXJndW1lbnQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcigKKyAgICAgICAgICAiY2FsbGVkIHdpdGggdW5zdXBwb3J0ZWQgYXJndW1lbnRzIGJldHdlZW4gRVZBTCBhbmQgQ09ERSBhcmd1bWVudHMiKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBjb2RlID0KKyAgICAgIGNtSm9pbihjbU1ha2VSYW5nZShleHBhbmRlZEFyZ3MuYmVnaW4oKSArIDIsIGV4cGFuZGVkQXJncy5lbmQoKSksICIgIik7CisgICAgcmVzdWx0ID0gbWFrZWZpbGUuUmVhZExpc3RGaWxlQXNTdHJpbmcoCisgICAgICBjb2RlLCBjbVN0ckNhdChjb250ZXh0LkZpbGVQYXRoLCAiOiIsIGNvbnRleHQuTGluZSwgIjpFVkFMIikpOworICB9IGVsc2UgeworICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggdW5rbm93biBtZXRhLW9wZXJhdGlvbiIpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmggYi9Tb3VyY2UvY21DTWFrZUxhbmd1YWdlQ29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMDY1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21DTWFrZUxhbmd1YWdlQ29tbWFuZC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21DTWFrZUxhbmd1YWdlQ29tbWFuZF9oCisjZGVmaW5lIGNtQ01ha2VMYW5ndWFnZUNvbW1hbmRfaAorCisjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKKworI2luY2x1ZGUgPHZlY3Rvcj4KKworY2xhc3MgY21FeGVjdXRpb25TdGF0dXM7CitzdHJ1Y3QgY21MaXN0RmlsZUFyZ3VtZW50OworCisvKioKKyAqIFxicmllZiBDYWxscyBhIHNjcmlwdGVkIG9yIGJ1aWxkLWluIGNvbW1hbmQKKyAqCisgKi8KK2Jvb2wgY21DTWFrZUxhbmd1YWdlQ29tbWFuZChzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlQXJndW1lbnQ+IGNvbnN0JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNQbHVnaW5BUEkuY3h4IGIvU291cmNlL2NtQ1BsdWdpbkFQSS5jeHgKaW5kZXggYjVjN2U5Ni4uNjk3ZDQzNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ1BsdWdpbkFQSS5jeHgKKysrIGIvU291cmNlL2NtQ1BsdWdpbkFQSS5jeHgKQEAgLTQ4OCwyNCArNDg4LDggQEAKIAogLy8gS2VlcCBhIG1hcCBmcm9tIHJlYWwgY21Tb3VyY2VGaWxlIGluc3RhbmNlcyBzdG9yZWQgaW4gYSBtYWtlZmlsZSB0bwogLy8gdGhlIENQbHVnaW5BUEkgcHJveHkgc291cmNlIGZpbGUuCi1jbGFzcyBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwCi0gIDogcHVibGljIHN0ZDo6bWFwPGNtU291cmNlRmlsZSosIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGUqPgotewotcHVibGljOgotICB1c2luZyBkZXJpdmVkID0gc3RkOjptYXA8Y21Tb3VyY2VGaWxlKiwgY21DUGx1Z2luQVBJU291cmNlRmlsZSo+OwotICB1c2luZyBpdGVyYXRvciA9IGRlcml2ZWQ6Oml0ZXJhdG9yOwotICB1c2luZyB2YWx1ZV90eXBlID0gZGVyaXZlZDo6dmFsdWVfdHlwZTsKLSAgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcCgpID0gZGVmYXVsdDsKLSAgfmNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAoKQotICB7Ci0gICAgZm9yIChhdXRvIGNvbnN0JiBpIDogKnRoaXMpIHsKLSAgICAgIGRlbGV0ZSBpLnNlY29uZDsKLSAgICB9Ci0gIH0KLSAgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcChjb25zdCBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwJikgPSBkZWxldGU7Ci0gIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAmIG9wZXJhdG9yPShjb25zdCBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwJikgPQotICAgIGRlbGV0ZTsKLX07Cit1c2luZyBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwID0KKyAgc3RkOjptYXA8Y21Tb3VyY2VGaWxlKiwgc3RkOjp1bmlxdWVfcHRyPGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGU+PjsKIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAgY21DUGx1Z2luQVBJU291cmNlRmlsZXM7CiAKIHZvaWQqIENDT05WIGNtQ3JlYXRlU291cmNlRmlsZSh2b2lkKQpAQCAtNTM2LDcgKzUyMCw3IEBACiAgICAgYXV0byBpID0gY21DUGx1Z2luQVBJU291cmNlRmlsZXMuZmluZChyc2YpOwogICAgIGlmIChpID09IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVzLmVuZCgpKSB7CiAgICAgICAvLyBDcmVhdGUgYSBwcm94eSBzb3VyY2UgZmlsZSBvYmplY3QgZm9yIHRoaXMgc291cmNlLgotICAgICAgY21DUGx1Z2luQVBJU291cmNlRmlsZSogc2YgPSBuZXcgY21DUGx1Z2luQVBJU291cmNlRmlsZTsKKyAgICAgIGF1dG8gc2YgPSBjbTo6bWFrZV91bmlxdWU8Y21DUGx1Z2luQVBJU291cmNlRmlsZT4oKTsKICAgICAgIHNmLT5SZWFsU291cmNlRmlsZSA9IHJzZjsKICAgICAgIHNmLT5GdWxsUGF0aCA9IHJzZi0+UmVzb2x2ZUZ1bGxQYXRoKCk7CiAgICAgICBzZi0+U291cmNlTmFtZSA9CkBAIC01NDUsMTAgKzUyOSw5IEBACiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTGFzdEV4dGVuc2lvbihzZi0+RnVsbFBhdGgpOwogCiAgICAgICAvLyBTdG9yZSB0aGUgcHJveHkgaW4gdGhlIG1hcCBzbyBpdCBjYW4gYmUgcmUtdXNlZCBhbmQgZGVsZXRlZCBsYXRlci4KLSAgICAgIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXA6OnZhbHVlX3R5cGUgZW50cnkocnNmLCBzZik7Ci0gICAgICBpID0gY21DUGx1Z2luQVBJU291cmNlRmlsZXMuaW5zZXJ0KGVudHJ5KS5maXJzdDsKKyAgICAgIGkgPSBjbUNQbHVnaW5BUElTb3VyY2VGaWxlcy5lbXBsYWNlKHJzZiwgc3RkOjptb3ZlKHNmKSkuZmlyc3Q7CiAgICAgfQotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0dXJuIGktPnNlY29uZC5nZXQoKTsKICAgfQogICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTU2OSwxNSArNTUyLDE2IEBACiAgIH0KIAogICAvLyBDcmVhdGUgdGhlIHByb3h5IGZvciB0aGUgcmVhbCBzb3VyY2UgZmlsZS4KLSAgY21DUGx1Z2luQVBJU291cmNlRmlsZSogc2YgPSBuZXcgY21DUGx1Z2luQVBJU291cmNlRmlsZTsKKyAgYXV0byBzZiA9IGNtOjptYWtlX3VuaXF1ZTxjbUNQbHVnaW5BUElTb3VyY2VGaWxlPigpOwogICBzZi0+UmVhbFNvdXJjZUZpbGUgPSByc2Y7CiAgIHNmLT5GdWxsUGF0aCA9IG9zZi0+RnVsbFBhdGg7CiAgIHNmLT5Tb3VyY2VOYW1lID0gb3NmLT5Tb3VyY2VOYW1lOwogICBzZi0+U291cmNlRXh0ZW5zaW9uID0gb3NmLT5Tb3VyY2VFeHRlbnNpb247CiAKICAgLy8gU3RvcmUgdGhlIHByb3h5IGluIHRoZSBtYXAgc28gaXQgY2FuIGJlIHJlLXVzZWQgYW5kIGRlbGV0ZWQgbGF0ZXIuCi0gIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVzW3JzZl0gPSBzZjsKLSAgcmV0dXJuIHNmOworICBhdXRvIHZhbHVlID0gc2YuZ2V0KCk7CisgIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVzW3JzZl0gPSBzdGQ6Om1vdmUoc2YpOworICByZXR1cm4gdmFsdWU7CiB9CiAKIGNvbnN0IGNoYXIqIENDT05WIGNtU291cmNlRmlsZUdldFNvdXJjZU5hbWUodm9pZCogYXJnKQpAQCAtNTk2LDEyICs1ODAsMTQgQEAKIHsKICAgY21DUGx1Z2luQVBJU291cmNlRmlsZSogc2YgPSBzdGF0aWNfY2FzdDxjbUNQbHVnaW5BUElTb3VyY2VGaWxlKj4oYXJnKTsKICAgaWYgKGNtU291cmNlRmlsZSogcnNmID0gc2YtPlJlYWxTb3VyY2VGaWxlKSB7Ci0gICAgcmV0dXJuIHJzZi0+R2V0UHJvcGVydHkocHJvcCk7CisgICAgY21Qcm9wIHAgPSByc2YtPkdldFByb3BlcnR5KHByb3ApOworICAgIHJldHVybiBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHI7CiAgIH0KICAgaWYgKCFzdHJjbXAocHJvcCwgIkxPQ0FUSU9OIikpIHsKICAgICByZXR1cm4gc2YtPkZ1bGxQYXRoLmNfc3RyKCk7CiAgIH0KLSAgcmV0dXJuIHNmLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSBzZi0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICByZXR1cm4gcmV0VmFsID8gcmV0VmFsLT5jX3N0cigpIDogbnVsbHB0cjsKIH0KIAogaW50IENDT05WIGNtU291cmNlRmlsZUdldFByb3BlcnR5QXNCb29sKHZvaWQqIGFyZywgY29uc3QgY2hhciogcHJvcCkKQEAgLTc5MSw4ICs3NzcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbG9uZ0RvY3MsIGludCBjaGFpbmVkKQogewogICBjbU1ha2VmaWxlKiBtZiA9IHN0YXRpY19jYXN0PGNtTWFrZWZpbGUqPihhcmcpOwotICBtZi0+R2V0U3RhdGUoKS0+RGVmaW5lUHJvcGVydHkobmFtZSwgY21Qcm9wZXJ0eTo6U09VUkNFX0ZJTEUsIGJyaWVmRG9jcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdEb2NzLCBjaGFpbmVkICE9IDApOworICBtZi0+R2V0U3RhdGUoKS0+RGVmaW5lUHJvcGVydHkobmFtZSwgY21Qcm9wZXJ0eTo6U09VUkNFX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmllZkRvY3MgPyBicmllZkRvY3MgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdEb2NzID8gbG9uZ0RvY3MgOiAiIiwgY2hhaW5lZCAhPSAwKTsKIH0KIAogfSAvLyBjbG9zZSB0aGUgZXh0ZXJuICJDIiBzY29wZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ1Rlc3QuY3h4IGIvU291cmNlL2NtQ1Rlc3QuY3h4CmluZGV4IDA0Zjc1YmQuLjQyNTRlMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNUZXN0LmN4eAorKysgYi9Tb3VyY2UvY21DVGVzdC5jeHgKQEAgLTE2LDYgKzE2LDE0IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgorCisjaW5jbHVkZSA8Y20zcC9jdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KKwogI2luY2x1ZGUgImNtc3lzL0Jhc2U2NC5oIgogI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC0yMywxOCArMzEsMTIgQEAKICNpbmNsdWRlICJjbXN5cy9Qcm9jZXNzLmgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogI2luY2x1ZGUgImNtc3lzL1N5c3RlbUluZm9ybWF0aW9uLmh4eCIKLQotI2luY2x1ZGUgImNtX2N1cmwuaCIKLSNpbmNsdWRlICJjbV96bGliLmgiCiAjaWYgZGVmaW5lZChfV0lOMzIpCiAjICBpbmNsdWRlIDx3aW5kb3dzLmg+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjZWxzZQogIyAgaW5jbHVkZSA8dW5pc3RkLmg+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjZW5kaWYKIAotI2luY2x1ZGUgPGNtL21lbW9yeT4KLSNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+Ci0KICNpbmNsdWRlICJjbUNUZXN0QnVpbGRBbmRUZXN0SGFuZGxlci5oIgogI2luY2x1ZGUgImNtQ1Rlc3RCdWlsZEhhbmRsZXIuaCIKICNpbmNsdWRlICJjbUNUZXN0Q29uZmlndXJlSGFuZGxlci5oIgpAQCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC04OSw2ICs5Miw3IEBACiAgIHN0ZDo6c3RyaW5nIENvbmZpZ1R5cGU7CiAgIHN0ZDo6c3RyaW5nIFNjaGVkdWxlVHlwZTsKICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBTdG9wVGltZTsKKyAgYm9vbCBTdG9wT25GYWlsdXJlID0gZmFsc2U7CiAgIGJvb2wgVGVzdFByb2dyZXNzT3V0cHV0ID0gZmFsc2U7CiAgIGJvb2wgVmVyYm9zZSA9IGZhbHNlOwogICBib29sIEV4dHJhVmVyYm9zZSA9IGZhbHNlOwpAQCAtMjAxLDcgKzIwNSw3IEBACiAKICAgaW50IFN1Ym1pdEluZGV4ID0gMDsKIAotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIE91dHB1dExvZ0ZpbGUgPSBudWxscHRyOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPiBPdXRwdXRMb2dGaWxlOwogICBpbnQgT3V0cHV0TG9nRmlsZUxhc3RUYWcgPSAtMTsKIAogICBib29sIE91dHB1dFRlc3RPdXRwdXRPblRlc3RGYWlsdXJlID0gZmFsc2U7CkBAIC0yNzEsOSArMjc1LDEwIEBACiAgIHJldHVybiB0aGlzLT5JbXBsLT5Ub21vcnJvd1RhZzsKIH0KIAotc3RkOjpzdHJpbmcgY21DVGVzdDo6Q2xlYW5TdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3N0ZDo6c3RyaW5nIGNtQ1Rlc3Q6OkNsZWFuU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwb3MpCiB7Ci0gIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc3BvcyA9IHN0ci5maW5kX2ZpcnN0X25vdF9vZigiIFxuXHRcclxmXHYiKTsKKyAgc3BvcyA9IHN0ci5maW5kX2ZpcnN0X25vdF9vZigiIFxuXHRcclxmXHYiLCBzcG9zKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlcG9zID0gc3RyLmZpbmRfbGFzdF9ub3Rfb2YoIiBcblx0XHJcZlx2Iik7CiAgIGlmIChzcG9zID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkBAIC0zNjIsMTAgKzM2Nyw3IEBACiAgIGNtU3lzdGVtVG9vbHM6OkVuYWJsZVZTQ29uc29sZU91dHB1dCgpOwogfQogCi1jbUNUZXN0Ojp+Y21DVGVzdCgpCi17Ci0gIGRlbGV0ZSB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlOwotfQorY21DVGVzdDo6fmNtQ1Rlc3QoKSA9IGRlZmF1bHQ7CiAKIGludCBjbUNUZXN0OjpHZXRQYXJhbGxlbExldmVsKCkgY29uc3QKIHsKQEAgLTcyNyw3ICs3MjksNyBAQAogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIHdoaWxlIChmaW4gJiYgKGxpbmUuYmFjaygpID09ICdcXCcpKSB7Ci0gICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBsaW5lLnNpemUoKSAtIDEpOworICAgICAgICBsaW5lLnJlc2l6ZShsaW5lLnNpemUoKSAtIDEpOwogICAgICAgICBidWZmZXJbMF0gPSAwOwogICAgICAgICBmaW4uZ2V0bGluZShidWZmZXIsIDEwMjMpOwogICAgICAgICBidWZmZXJbMTAyM10gPSAwOwpAQCAtNzQxLDcgKzc0Myw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcga2V5ID0gbGluZS5zdWJzdHIoMCwgY3Bvcyk7Ci0gICAgICBzdGQ6OnN0cmluZyB2YWx1ZSA9IGNtQ1Rlc3Q6OkNsZWFuU3RyaW5nKGxpbmUuc3Vic3RyKGNwb3MgKyAxKSk7CisgICAgICBzdGQ6OnN0cmluZyB2YWx1ZSA9IGNtQ1Rlc3Q6OkNsZWFuU3RyaW5nKGxpbmUsIGNwb3MgKyAxKTsKICAgICAgIHRoaXMtPkltcGwtPkNUZXN0Q29uZmlndXJhdGlvbltrZXldID0gdmFsdWU7CiAgICAgfQogICAgIGZpbi5jbG9zZSgpOwpAQCAtODM5LDYgKzg0MSw3IEBACiAgICAgfQogICB9CiAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gdGVzdGluZ0RpciArICIvIiArIG5hbWU7CisgIHN0cmVhbS5TZXRUZW1wRXh0KCJ0bXAiKTsKICAgc3RyZWFtLk9wZW4oZmlsZW5hbWUpOwogICBpZiAoIXN0cmVhbSkgewogICAgIGNtQ1Rlc3RMb2codGhpcywgRVJST1JfTUVTU0FHRSwKQEAgLTE0NDIsMTYgKzE0NDUsMTUgQEAKICAgICByZXR1cm47CiAgIH0KICAgLy8gVGhpcyBjb2RlIHNob3VsZCBnbyB3aGVuIGNkYXNoIGlzIGNoYW5nZWQgdG8gdXNlIGxhYmVscyBvbmx5Ci0gIGNvbnN0IGNoYXIqIHN1YnByb2plY3QgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKKyAgY21Qcm9wIHN1YnByb2plY3QgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKICAgaWYgKHN1YnByb2plY3QpIHsKICAgICB4bWwuU3RhcnRFbGVtZW50KCJTdWJwcm9qZWN0Iik7Ci0gICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsIHN1YnByb2plY3QpOwotICAgIGNvbnN0IGNoYXIqIGxhYmVscyA9CisgICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsICpzdWJwcm9qZWN0KTsKKyAgICBjbVByb3AgbGFiZWxzID0KICAgICAgIGNoLT5HZXRDTWFrZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiU3ViUHJvamVjdExhYmVscyIpOwogICAgIGlmIChsYWJlbHMpIHsKICAgICAgIHhtbC5TdGFydEVsZW1lbnQoIkxhYmVscyIpOwotICAgICAgc3RkOjpzdHJpbmcgbCA9IGxhYmVsczsKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzID0gY21FeHBhbmRlZExpc3QobCk7CisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJncyA9IGNtRXhwYW5kZWRMaXN0KCpsYWJlbHMpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGFyZ3MpIHsKICAgICAgICAgeG1sLkVsZW1lbnQoIkxhYmVsIiwgaSk7CiAgICAgICB9CkBAIC0xNDYxLDEwICsxNDYzLDEwIEBACiAgIH0KIAogICAvLyBUaGlzIGNvZGUgc2hvdWxkIHN0YXkgd2hlbiBjZGFzaCBvbmx5IGRvZXMgbGFiZWwgYmFzZWQgc3ViLXByb2plY3RzCi0gIGNvbnN0IGNoYXIqIGxhYmVsID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJMYWJlbCIpOworICBjbVByb3AgbGFiZWwgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIkxhYmVsIik7CiAgIGlmIChsYWJlbCkgewogICAgIHhtbC5TdGFydEVsZW1lbnQoIkxhYmVscyIpOwotICAgIHhtbC5FbGVtZW50KCJMYWJlbCIsIGxhYmVsKTsKKyAgICB4bWwuRWxlbWVudCgiTGFiZWwiLCAqbGFiZWwpOwogICAgIHhtbC5FbmRFbGVtZW50KCk7CiAgIH0KIH0KQEAgLTE4MTYsMTAgKzE4MTgsMTAgQEAKICAgICAgIDw8ICIgIGN0ZXN0IC1EIE5pZ2h0bHlNZW1vcnlDaGVjayIgPDwgc3RkOjplbmRsKTsKIH0KIAotYm9vbCBjbUNUZXN0OjpDaGVja0FyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcsIGNvbnN0IGNoYXIqIHZhcmcxLAorYm9vbCBjbUNUZXN0OjpDaGVja0FyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcsIGNtOjpzdHJpbmdfdmlldyB2YXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJnMikKIHsKLSAgcmV0dXJuICh2YXJnMSAmJiBhcmcgPT0gdmFyZzEpIHx8ICh2YXJnMiAmJiBhcmcgPT0gdmFyZzIpOworICByZXR1cm4gKGFyZyA9PSB2YXJnMSkgfHwgKHZhcmcyICYmIGFyZyA9PSB2YXJnMik7CiB9CiAKIC8vIFByb2Nlc3NlcyBvbmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IChhbmQgaXRzIGFyZ3VtZW50cyBpZiBhbnkpCkBAIC0xODI5LDIxICsxODMxLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBlcnJvcm1zZykKIHsKICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUYiKSkgeworICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRiJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5GYWlsb3ZlciA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLWoiLCAiLS1wYXJhbGxlbCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1qIl9zLCAiLS1wYXJhbGxlbCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICBpbnQgcGxldmVsID0gYXRvaShhcmdzW2ldLmNfc3RyKCkpOwogICAgIHRoaXMtPlNldFBhcmFsbGVsTGV2ZWwocGxldmVsKTsKICAgICB0aGlzLT5JbXBsLT5QYXJhbGxlbExldmVsU2V0SW5DbGkgPSB0cnVlOwotICB9IGVsc2UgaWYgKGFyZy5maW5kKCItaiIpID09IDApIHsKKyAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChhcmcsICItaiIpKSB7CiAgICAgaW50IHBsZXZlbCA9IGF0b2koYXJnLnN1YnN0cigyKS5jX3N0cigpKTsKICAgICB0aGlzLT5TZXRQYXJhbGxlbExldmVsKHBsZXZlbCk7CiAgICAgdGhpcy0+SW1wbC0+UGFyYWxsZWxMZXZlbFNldEluQ2xpID0gdHJ1ZTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVwZWF0LXVudGlsLWZhaWwiKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVwZWF0LXVudGlsLWZhaWwiX3MpKSB7CiAgICAgaWYgKGkgPj0gYXJncy5zaXplKCkgLSAxKSB7CiAgICAgICBlcnJvcm1zZyA9ICInLS1yZXBlYXQtdW50aWwtZmFpbCcgcmVxdWlyZXMgYW4gYXJndW1lbnQiOwogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg1NSw4ICsxODU3LDggQEAKICAgICBpKys7CiAgICAgbG9uZyByZXBlYXQgPSAxOwogICAgIGlmICghY21TdHJUb0xvbmcoYXJnc1tpXSwgJnJlcGVhdCkpIHsKLSAgICAgIGVycm9ybXNnID0KLSAgICAgICAgIictLXJlcGVhdC11bnRpbC1mYWlsJyBnaXZlbiBub24taW50ZWdlciB2YWx1ZSAnIiArIGFyZ3NbaV0gKyAiJyI7CisgICAgICBlcnJvcm1zZyA9IGNtU3RyQ2F0KCInLS1yZXBlYXQtdW50aWwtZmFpbCcgZ2l2ZW4gbm9uLWludGVnZXIgdmFsdWUgJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0sICInIik7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHRoaXMtPkltcGwtPlJlcGVhdENvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihyZXBlYXQpOwpAQCAtMTg2NSw3ICsxODY3LDcgQEAKICAgICB9CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXJlcGVhdCIpKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1yZXBlYXQiX3MpKSB7CiAgICAgaWYgKGkgPj0gYXJncy5zaXplKCkgLSAxKSB7CiAgICAgICBlcnJvcm1zZyA9ICInLS1yZXBlYXQnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IjsKICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4OTMsMTIgKzE4OTUsMTIgQEAKICAgICAgICAgfQogICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICBlcnJvcm1zZyA9ICInLS1yZXBlYXQnIGdpdmVuIGludmFsaWQgdmFsdWUgJyIgKyBhcmdzW2ldICsgIiciOworICAgICAgZXJyb3Jtc2cgPSBjbVN0ckNhdCgiJy0tcmVwZWF0JyBnaXZlbiBpbnZhbGlkIHZhbHVlICciLCBhcmdzW2ldLCAiJyIpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1sb2FkIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1sb2FkIl9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHVuc2lnbmVkIGxvbmcgbG9hZDsKICAgICBpZiAoY21TdHJUb1VMb25nKGFyZ3NbaV0sICZsb2FkKSkgewpAQCAtMTkwOSw3NiArMTkxMSw2OCBAQAogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tbm8tY29tcHJlc3Mtb3V0cHV0IikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW5vLWNvbXByZXNzLW91dHB1dCJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5Db21wcmVzc1Rlc3RPdXRwdXQgPSBmYWxzZTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcHJpbnQtbGFiZWxzIikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXByaW50LWxhYmVscyJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5QcmludExhYmVscyA9IHRydWU7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWh0dHAxLjAiKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0taHR0cDEuMCJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5Vc2VIVFRQMTAgPSB0cnVlOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10aW1lb3V0IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGltZW91dCJfcykgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICBhdXRvIHRpbWVvdXQgPSBjbUR1cmF0aW9uKGF0b2YoYXJnc1tpXS5jX3N0cigpKSk7CiAgICAgdGhpcy0+SW1wbC0+R2xvYmFsVGltZW91dCA9IHRpbWVvdXQ7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN0b3AtdGltZSIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN0b3AtdGltZSJfcykgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5TZXRTdG9wVGltZShhcmdzW2ldKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1DIiwgIi0tYnVpbGQtY29uZmlnIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN0b3Atb24tZmFpbHVyZSJfcykpIHsKKyAgICB0aGlzLT5JbXBsLT5TdG9wT25GYWlsdXJlID0gdHJ1ZTsKKyAgfQorCisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUMiX3MsICItLWJ1aWxkLWNvbmZpZyIpICYmCisgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+U2V0Q29uZmlnVHlwZShhcmdzW2ldLmNfc3RyKCkpOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1kZWJ1ZyIpKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1kZWJ1ZyJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5EZWJ1ZyA9IHRydWU7CiAgICAgdGhpcy0+SW1wbC0+U2hvd0xpbmVOdW1iZXJzID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWdyb3VwIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKCh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZ3JvdXAiX3MpIHx8CisgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIC8gZGVwcmVjYXRlZCBvcHRpb24uCisgICAgICAgICAgICAgIC8vICJUcmFjayIgaGFzIGJlZW4gcmVuYW1lZCB0byAiR3JvdXAiLgorICAgICAgICAgICAgICB0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdHJhY2siX3MpKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+SW1wbC0+U3BlY2lmaWNHcm91cCA9IGFyZ3NbaV07Ci0gIH0KLSAgLy8gVGhpcyBpcyBhbiB1bmRvY3VtZW50ZWQgLyBkZXByZWNhdGVkIG9wdGlvbi4KLSAgLy8gIlRyYWNrIiBoYXMgYmVlbiByZW5hbWVkIHRvICJHcm91cCIuCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdHJhY2siKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7Ci0gICAgaSsrOwotICAgIHRoaXMtPkltcGwtPlNwZWNpZmljR3JvdXAgPSBhcmdzW2ldOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tc2hvdy1saW5lLW51bWJlcnMiKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1zaG93LWxpbmUtbnVtYmVycyJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5TaG93TGluZU51bWJlcnMgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tbm8tbGFiZWwtc3VtbWFyeSIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW5vLWxhYmVsLXN1bW1hcnkiX3MpKSB7CiAgICAgdGhpcy0+SW1wbC0+TGFiZWxTdW1tYXJ5ID0gZmFsc2U7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1uby1zdWJwcm9qZWN0LXN1bW1hcnkiKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1uby1zdWJwcm9qZWN0LXN1bW1hcnkiX3MpKSB7CiAgICAgdGhpcy0+SW1wbC0+U3VicHJvamVjdFN1bW1hcnkgPSBmYWxzZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItUSIsICItLXF1aWV0IikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1RIl9zLCAiLS1xdWlldCIpKSB7CiAgICAgdGhpcy0+SW1wbC0+UXVpZXQgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcHJvZ3Jlc3MiKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1wcm9ncmVzcyJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5UZXN0UHJvZ3Jlc3NPdXRwdXQgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1WIiwgIi0tdmVyYm9zZSIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItViJfcywgIi0tdmVyYm9zZSIpKSB7CiAgICAgdGhpcy0+SW1wbC0+VmVyYm9zZSA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVZWIiwgIi0tZXh0cmEtdmVyYm9zZSIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItVlYiX3MsICItLWV4dHJhLXZlcmJvc2UiKSkgewogICAgIHRoaXMtPkltcGwtPkV4dHJhVmVyYm9zZSA9IHRydWU7CiAgICAgdGhpcy0+SW1wbC0+VmVyYm9zZSA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1vdXRwdXQtb24tZmFpbHVyZSIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW91dHB1dC1vbi1mYWlsdXJlIl9zKSkgewogICAgIHRoaXMtPkltcGwtPk91dHB1dFRlc3RPdXRwdXRPblRlc3RGYWlsdXJlID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXRlc3Qtb3V0cHV0LXNpemUtcGFzc2VkIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1vdXRwdXQtc2l6ZS1wYXNzZWQiX3MpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICBsb25nIG91dHB1dFNpemU7CiAgICAgaWYgKGNtU3RyVG9Mb25nKGFyZ3NbaV0sICZvdXRwdXRTaXplKSkgewpAQCAtMTk4OCw5ICsxOTgyLDggQEAKICAgICAgICAgICAgICAgICAgIkludmFsaWQgdmFsdWUgZm9yICctLXRlc3Qtb3V0cHV0LXNpemUtcGFzc2VkJzogIiA8PCBhcmdzW2ldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlxuIik7CiAgICAgfQotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1vdXRwdXQtc2l6ZS1mYWlsZWQiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10ZXN0LW91dHB1dC1zaXplLWZhaWxlZCJfcykgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIGxvbmcgb3V0cHV0U2l6ZTsKICAgICBpZiAoY21TdHJUb0xvbmcoYXJnc1tpXSwgJm91dHB1dFNpemUpKSB7CkBAIC0yMDAwLDExICsxOTkzLDkgQEAKICAgICAgICAgICAgICAgICAgIkludmFsaWQgdmFsdWUgZm9yICctLXRlc3Qtb3V0cHV0LXNpemUtZmFpbGVkJzogIiA8PCBhcmdzW2ldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlxuIik7CiAgICAgfQotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1OIiwgIi0tc2hvdy1vbmx5IikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1OIl9zLCAiLS1zaG93LW9ubHkiKSkgewogICAgIHRoaXMtPkltcGwtPlNob3dPbmx5ID0gdHJ1ZTsKLSAgfQotICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tc2hvdy1vbmx5PSIpKSB7CisgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tc2hvdy1vbmx5PSIpKSB7CiAgICAgdGhpcy0+SW1wbC0+U2hvd09ubHkgPSB0cnVlOwogCiAgICAgLy8gQ2hlY2sgaWYgYSBzcGVjaWZpYyBmb3JtYXQgaXMgcmVxdWVzdGVkLiBEZWZhdWx0cyB0byBodW1hbiByZWFkYWJsZQpAQCAtMjAyMiwyNyArMjAxMywyNiBAQAogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1PIiwgIi0tb3V0cHV0LWxvZyIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItTyJfcywgIi0tb3V0cHV0LWxvZyIpICYmCisgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+U2V0T3V0cHV0TG9nRmlsZU5hbWUoYXJnc1tpXS5jX3N0cigpKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdG9tb3Jyb3ctdGFnIikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXRvbW9ycm93LXRhZyJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5Ub21vcnJvd1RhZyA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1mb3JjZS1uZXctY3Rlc3QtcHJvY2VzcyIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWZvcmNlLW5ldy1jdGVzdC1wcm9jZXNzIl9zKSkgewogICAgIHRoaXMtPkltcGwtPkZvcmNlTmV3Q1Rlc3RQcm9jZXNzID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItVyIsICItLW1heC13aWR0aCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1XIl9zLCAiLS1tYXgtd2lkdGgiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+SW1wbC0+TWF4VGVzdE5hbWVXaWR0aCA9IGF0b2koYXJnc1tpXS5jX3N0cigpKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWludGVyYWN0aXZlLWRlYnVnLW1vZGUiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1pbnRlcmFjdGl2ZS1kZWJ1Zy1tb2RlIl9zKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+SW1wbC0+SW50ZXJhY3RpdmVEZWJ1Z01vZGUgPSBjbUlzT24oYXJnc1tpXSk7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1zdWJtaXQtaW5kZXgiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN1Ym1pdC1pbmRleCJfcykgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkltcGwtPlN1Ym1pdEluZGV4ID0gYXRvaShhcmdzW2ldLmNfc3RyKCkpOwogICAgIGlmICh0aGlzLT5JbXBsLT5TdWJtaXRJbmRleCA8IDApIHsKQEAgLTIwNTAsMjQgKzIwNDAsMjcgQEAKICAgICB9CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW92ZXJ3cml0ZSIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW92ZXJ3cml0ZSJfcykgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5BZGRDVGVzdENvbmZpZ3VyYXRpb25PdmVyd3JpdGUoYXJnc1tpXSk7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUEiLCAiLS1hZGQtbm90ZXMiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItQSJfcywgIi0tYWRkLW5vdGVzIikgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgdGhpcy0+SW1wbC0+UHJvZHVjZVhNTCA9IHRydWU7CiAgICAgdGhpcy0+U2V0VGVzdCgiTm90ZXMiKTsKICAgICBpKys7CiAgICAgdGhpcy0+U2V0Tm90ZXNGaWxlcyhhcmdzW2ldLmNfc3RyKCkpOworICAgIHJldHVybiB0cnVlOwogICB9CiAKLSAgY29uc3Qgc3RkOjpzdHJpbmcgbm9UZXN0c1ByZWZpeCA9ICItLW5vLXRlc3RzPSI7CisgIGNtOjpzdHJpbmdfdmlldyBub1Rlc3RzUHJlZml4ID0gIi0tbm8tdGVzdHM9IjsKICAgaWYgKGNtSGFzUHJlZml4KGFyZywgbm9UZXN0c1ByZWZpeCkpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBub1Rlc3RzTW9kZSA9IGFyZy5zdWJzdHIobm9UZXN0c1ByZWZpeC5sZW5ndGgoKSk7CisgICAgY206OnN0cmluZ192aWV3IG5vVGVzdHNNb2RlID0KKyAgICAgIGNtOjpzdHJpbmdfdmlldyhhcmcpLnN1YnN0cihub1Rlc3RzUHJlZml4Lmxlbmd0aCgpKTsKICAgICBpZiAobm9UZXN0c01vZGUgPT0gImVycm9yIikgewogICAgICAgdGhpcy0+SW1wbC0+Tm9UZXN0c01vZGUgPSBjbUNUZXN0OjpOb1Rlc3RzOjpFcnJvcjsKICAgICB9IGVsc2UgaWYgKG5vVGVzdHNNb2RlICE9ICJpZ25vcmUiKSB7Ci0gICAgICBlcnJvcm1zZyA9ICInLS1uby10ZXN0cz0nIGdpdmVuIHVua25vd24gdmFsdWUgJyIgKyBub1Rlc3RzTW9kZSArICInIjsKKyAgICAgIGVycm9ybXNnID0KKyAgICAgICAgY21TdHJDYXQoIictLW5vLXRlc3RzPScgZ2l2ZW4gdW5rbm93biB2YWx1ZSAnIiwgbm9UZXN0c01vZGUsICdcJycpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICB0aGlzLT5JbXBsLT5Ob1Rlc3RzTW9kZSA9IGNtQ1Rlc3Q6Ok5vVGVzdHM6Oklnbm9yZTsKQEAgLTIwNzUsMzQgKzIwNjgsMzIgQEAKICAgfQogCiAgIC8vIG9wdGlvbnMgdGhhdCBjb250cm9sIHdoYXQgdGVzdHMgYXJlIHJ1bgotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItSSIsICItLXRlc3RzLWluZm9ybWF0aW9uIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItSSJfcywgIi0tdGVzdHMtaW5mb3JtYXRpb24iKSAmJgorICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIlRlc3RzVG9SdW5JbmZvcm1hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwogICAgIHRoaXMtPkdldE1lbUNoZWNrSGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJUZXN0c1RvUnVuSW5mb3JtYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVUiLCAiLS11bmlvbiIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItVSJfcywgIi0tdW5pb24iKSkgewogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIlVzZVVuaW9uIiwgInRydWUiKTsKICAgICB0aGlzLT5HZXRNZW1DaGVja0hhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiVXNlVW5pb24iLCAidHJ1ZSIpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1SIiwgIi0tdGVzdHMtcmVnZXgiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItUiJfcywgIi0tdGVzdHMtcmVnZXgiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiSW5jbHVkZVJlZ3VsYXJFeHByZXNzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgdGhpcy0+R2V0TWVtQ2hlY2tIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIkluY2x1ZGVSZWd1bGFyRXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItTCIsICItLWxhYmVsLXJlZ2V4IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUwiX3MsICItLWxhYmVsLXJlZ2V4IikgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIkxhYmVsUmVndWxhckV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKICAgICB0aGlzLT5HZXRNZW1DaGVja0hhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiTGFiZWxSZWd1bGFyRXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItTEUiLCAiLS1sYWJlbC1leGNsdWRlIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1MRSJfcywgIi0tbGFiZWwtZXhjbHVkZSIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKAogICAgICAgIkV4Y2x1ZGVMYWJlbFJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKQEAgLTIxMTAsOCArMjEwMSw4IEBACiAgICAgICAiRXhjbHVkZUxhYmVsUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUUiLCAiLS1leGNsdWRlLXJlZ2V4IikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRSJfcywgIi0tZXhjbHVkZS1yZWdleCIpICYmCisgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiRXhjbHVkZVJlZ3VsYXJFeHByZXNzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7CkBAIC0yMTE5LDI0ICsyMTEwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1GQSIsICItLWZpeHR1cmUtZXhjbHVkZS1hbnkiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1GQSJfcywgIi0tZml4dHVyZS1leGNsdWRlLWFueSIpICYmCisgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigKICAgICAgICJFeGNsdWRlRml4dHVyZVJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKICAgICB0aGlzLT5HZXRNZW1DaGVja0hhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigKICAgICAgICJFeGNsdWRlRml4dHVyZVJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRlMiLCAiLS1maXh0dXJlLWV4Y2x1ZGUtc2V0dXAiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUZTIl9zLCAiLS1maXh0dXJlLWV4Y2x1ZGUtc2V0dXAiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigKICAgICAgICJFeGNsdWRlRml4dHVyZVNldHVwUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwogICAgIHRoaXMtPkdldE1lbUNoZWNrSGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKAogICAgICAgIkV4Y2x1ZGVGaXh0dXJlU2V0dXBSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUZDIiwgIi0tZml4dHVyZS1leGNsdWRlLWNsZWFudXAiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUZDIl9zLCAiLS1maXh0dXJlLWV4Y2x1ZGUtY2xlYW51cCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKAogICAgICAgIkV4Y2x1ZGVGaXh0dXJlQ2xlYW51cFJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKQEAgLTIxNDQsOCArMjEzMyw4IEBACiAgICAgICAiRXhjbHVkZUZpeHR1cmVDbGVhbnVwUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1yZXNvdXJjZS1zcGVjLWZpbGUiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVzb3VyY2Utc3BlYy1maWxlIl9zKSAmJgorICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIlJlc291cmNlU3BlY0ZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKQEAgLTIxNTMsNyArMjE0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVydW4tZmFpbGVkIikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXJlcnVuLWZhaWxlZCJfcykpIHsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJSZXJ1bkZhaWxlZCIsICJ0cnVlIik7CiAgICAgdGhpcy0+R2V0TWVtQ2hlY2tIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIlJlcnVuRmFpbGVkIiwgInRydWUiKTsKICAgfQpAQCAtMjIwNSw3ICsyMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIFNSQXJndW1lbnRTcGVjaWZpZWQpCiB7CiAgIHN0ZDo6c3RyaW5nIGFyZyA9IGFyZ3NbaV07Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1TUCIsICItLXNjcmlwdC1uZXctcHJvY2VzcyIpICYmCisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1TUCJfcywgIi0tc2NyaXB0LW5ldy1wcm9jZXNzIikgJiYKICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICB0aGlzLT5JbXBsLT5SdW5Db25maWd1cmF0aW9uU2NyaXB0ID0gdHJ1ZTsKICAgICBpKys7CkBAIC0yMjE2LDcgKzIyMDUsOCBAQAogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1TUiIsICItLXNjcmlwdC1ydW4iKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1TUiJfcywgIi0tc2NyaXB0LXJ1biIpICYmCisgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgU1JBcmd1bWVudFNwZWNpZmllZCA9IHRydWU7CiAgICAgdGhpcy0+SW1wbC0+UnVuQ29uZmlndXJhdGlvblNjcmlwdCA9IHRydWU7CiAgICAgaSsrOwpAQCAtMjIyNCw3ICsyMjE0LDcgQEAKICAgICBjaC0+QWRkQ29uZmlndXJhdGlvblNjcmlwdChhcmdzW2ldLmNfc3RyKCksIHRydWUpOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVMiLCAiLS1zY3JpcHQiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1TIl9zLCAiLS1zY3JpcHQiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgdGhpcy0+SW1wbC0+UnVuQ29uZmlndXJhdGlvblNjcmlwdCA9IHRydWU7CiAgICAgaSsrOwogICAgIGNtQ1Rlc3RTY3JpcHRIYW5kbGVyKiBjaCA9IHRoaXMtPkdldFNjcmlwdEhhbmRsZXIoKTsKQEAgLTIyNzQsNyArMjI2NCw4IEBACiAKICAgICAvLyAtLWRhc2hib2FyZDogaGFuZGxlIGEgcmVxdWVzdCBmb3IgYSBkYXNoYm9hcmQKICAgICBzdGQ6OnN0cmluZyBhcmcgPSBhcmdzW2ldOwotICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1EIiwgIi0tZGFzaGJvYXJkIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1EIl9zLCAiLS1kYXNoYm9hcmQiKSAmJgorICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgICB0aGlzLT5JbXBsLT5Qcm9kdWNlWE1MID0gdHJ1ZTsKICAgICAgIGkrKzsKICAgICAgIHN0ZDo6c3RyaW5nIHRhcmcgPSBhcmdzW2ldOwpAQCAtMjMxMCw3ICsyMzAxLDcgQEAKICAgICB9CiAKICAgICAvLyAtLWV4dHJhLXN1Ym1pdAotICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZXh0cmEtc3VibWl0IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZXh0cmEtc3VibWl0Il9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgICB0aGlzLT5JbXBsLT5Qcm9kdWNlWE1MID0gdHJ1ZTsKICAgICAgIHRoaXMtPlNldFRlc3QoIlN1Ym1pdCIpOwogICAgICAgaSsrOwpAQCAtMjMyMCwxMiArMjMxMSwxMyBAQAogICAgIH0KIAogICAgIC8vIC0tYnVpbGQtYW5kLXRlc3Qgb3B0aW9ucwotICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tYnVpbGQtYW5kLXRlc3QiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1idWlsZC1hbmQtdGVzdCJfcykgJiYKKyAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgICAgY21ha2VBbmRUZXN0ID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyAtLXNjaGVkdWxlLXJhbmRvbQotICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tc2NoZWR1bGUtcmFuZG9tIikpIHsKKyAgICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXNjaGVkdWxlLXJhbmRvbSJfcykpIHsKICAgICAgIHRoaXMtPkltcGwtPlNjaGVkdWxlVHlwZSA9ICJSYW5kb20iOwogICAgIH0KIApAQCAtMjM4MCw3ICsyMzcyLDcgQEAKIHsKICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVQiLCAiLS10ZXN0LWFjdGlvbiIpICYmCisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1UIl9zLCAiLS10ZXN0LWFjdGlvbiIpICYmCiAgICAgICAoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkpIHsKICAgICB0aGlzLT5JbXBsLT5Qcm9kdWNlWE1MID0gdHJ1ZTsKICAgICBpKys7CkBAIC0yNDEyLDE1ICsyNDA0LDE1IEBACiB7CiAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CiAgIHN0ZDo6c3RyaW5nIGFyZyA9IGFyZ3NbaV07Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1NIiwgIi0tdGVzdC1tb2RlbCIpICYmCisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1NIl9zLCAiLS10ZXN0LW1vZGVsIikgJiYKICAgICAgIChpIDwgYXJncy5zaXplKCkgLSAxKSkgewogICAgIGkrKzsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgc3RyID0gYXJnc1tpXTsKLSAgICBpZiAoY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN0cikgPT0gIm5pZ2h0bHkiKSB7CisgICAgaWYgKGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzdHIpID09ICJuaWdodGx5Il9zKSB7CiAgICAgICB0aGlzLT5TZXRUZXN0TW9kZWwoY21DVGVzdDo6TklHSFRMWSk7Ci0gICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc3RyKSA9PSAiY29udGludW91cyIpIHsKKyAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzdHIpID09ICJjb250aW51b3VzIl9zKSB7CiAgICAgICB0aGlzLT5TZXRUZXN0TW9kZWwoY21DVGVzdDo6Q09OVElOVU9VUyk7Ci0gICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc3RyKSA9PSAiZXhwZXJpbWVudGFsIikgeworICAgIH0gZWxzZSBpZiAoY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN0cikgPT0gImV4cGVyaW1lbnRhbCJfcykgewogICAgICAgdGhpcy0+U2V0VGVzdE1vZGVsKGNtQ1Rlc3Q6OkVYUEVSSU1FTlRBTCk7CiAgICAgfSBlbHNlIHsKICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKQEAgLTI1MDcsNiArMjQ5OSwxNiBAQAogICB0aGlzLT5JbXBsLT5Ob3Rlc0ZpbGVzID0gbm90ZXM7CiB9CiAKK2Jvb2wgY21DVGVzdDo6R2V0U3RvcE9uRmFpbHVyZSgpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5JbXBsLT5TdG9wT25GYWlsdXJlOworfQorCit2b2lkIGNtQ1Rlc3Q6OlNldFN0b3BPbkZhaWx1cmUoYm9vbCBzdG9wKQoreworICB0aGlzLT5JbXBsLT5TdG9wT25GYWlsdXJlID0gc3RvcDsKK30KKwogc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBjbUNUZXN0OjpHZXRTdG9wVGltZSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5JbXBsLT5TdG9wVGltZTsKQEAgLTI2ODcsNyArMjY4OSw3IEBACiAKICAgICBwYXRoID0gIi4vIiArICpyZXM7CiAgICAgaWYgKHBhdGguYmFjaygpID09ICcvJykgewotICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDAsIHBhdGguc2l6ZSgpIC0gMSk7CisgICAgICBwYXRoLnJlc2l6ZShwYXRoLnNpemUoKSAtIDEpOwogICAgIH0KICAgfQogCkBAIC0yNzM4LDcgKzI3NDAsNyBAQAogICAgIHN0ZDo6c3RyaW5nIHNpdGUgPSB0aGlzLT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkRyb3BTaXRlIik7CiAgICAgc3RkOjpzdHJpbmcgbG9jYXRpb24gPSB0aGlzLT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkRyb3BMb2NhdGlvbiIpOwogCi0gICAgdXJsID0gY21TdHJDYXQobWV0aG9kLmVtcHR5KCkgPyAiaHR0cCIgOiBtZXRob2QsICI6Ly8iKTsKKyAgICB1cmwgPSBjbVN0ckNhdChtZXRob2QuZW1wdHkoKSA/ICJodHRwIiA6IG1ldGhvZCwgIjovLyJfcyk7CiAgICAgaWYgKCF1c2VyLmVtcHR5KCkpIHsKICAgICAgIHVybCArPSB1c2VyOwogICAgICAgaWYgKCFwYXNzd29yZC5lbXB0eSgpKSB7CkBAIC0zMDg2LDEyICszMDg4LDEwIEBACiAKIHZvaWQgY21DVGVzdDo6U2V0T3V0cHV0TG9nRmlsZU5hbWUoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgaWYgKHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUpIHsKLSAgICBkZWxldGUgdGhpcy0+SW1wbC0+T3V0cHV0TG9nRmlsZTsKLSAgICB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlID0gbnVsbHB0cjsKLSAgfQogICBpZiAobmFtZSkgewotICAgIHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUgPSBuZXcgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKG5hbWUpOworICAgIHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUgPSBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPihuYW1lKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlLnJlc2V0KCk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ1Rlc3QuaCBiL1NvdXJjZS9jbUNUZXN0LmgKaW5kZXggN2Y4ZjkxMy4uYTM5YjhmZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ1Rlc3QuaAorKysgYi9Tb3VyY2UvY21DVGVzdC5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgogCkBAIC0xNDAsNyArMTQyLDggQEAKIAogICBzdGQ6OnN0cmluZyBHZXRUZXN0TW9kZWxTdHJpbmcoKTsKICAgc3RhdGljIGludCBHZXRUZXN0TW9kZWxGcm9tU3RyaW5nKGNvbnN0IGNoYXIqIHN0cik7Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBDbGVhblN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKTsKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIENsZWFuU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwb3MgPSAwKTsKICAgc3RkOjpzdHJpbmcgR2V0Q1Rlc3RDb25maWd1cmF0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgdm9pZCBTZXRDVGVzdENvbmZpZ3VyYXRpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcHJlc3MgPSBmYWxzZSk7CkBAIC0yMDEsNiArMjA0LDkgQEAKICAgYm9vbCBTaG91bGRDb21wcmVzc1Rlc3RPdXRwdXQoKTsKICAgYm9vbCBDb21wcmVzc1N0cmluZyhzdGQ6OnN0cmluZyYgc3RyKTsKIAorICBib29sIEdldFN0b3BPbkZhaWx1cmUoKSBjb25zdDsKKyAgdm9pZCBTZXRTdG9wT25GYWlsdXJlKGJvb2wgc3RvcCk7CisKICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBHZXRTdG9wVGltZSgpIGNvbnN0OwogICB2b2lkIFNldFN0b3BUaW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiB0aW1lKTsKIApAQCAtNTA2LDggKzUxMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBmaWxlcyk7CiAKICAgLyoqIENoZWNrIGlmIHRoZSBhcmd1bWVudCBpcyB0aGUgb25lIHNwZWNpZmllZCAqLwotICBib29sIENoZWNrQXJndW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGFyZywgY29uc3QgY2hhciogdmFyZzEsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJnMiA9IG51bGxwdHIpOworICBzdGF0aWMgYm9vbCBDaGVja0FyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcsIGNtOjpzdHJpbmdfdmlldyB2YXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJnMiA9IG51bGxwdHIpOwogCiAgIC8qKiBPdXRwdXQgZXJyb3JzIGZyb20gYSB0ZXN0ICovCiAgIHZvaWQgT3V0cHV0VGVzdEVycm9ycyhzdGQ6OnZlY3RvcjxjaGFyPiBjb25zdCYgcHJvY2Vzc19vdXRwdXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmN4eCBiL1NvdXJjZS9jbUNhY2hlTWFuYWdlci5jeHgKaW5kZXggZGM5YWJhMS4uOTU2ODZlYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmN4eAorKysgYi9Tb3VyY2UvY21DYWNoZU1hbmFnZXIuY3h4CkBAIC0xOSwxMiArMTksNiBAQAogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbVZlcnNpb24uaCIKIAotY21DYWNoZU1hbmFnZXI6OmNtQ2FjaGVNYW5hZ2VyKCkKLXsKLSAgdGhpcy0+Q2FjaGVNYWpvclZlcnNpb24gPSAwOwotICB0aGlzLT5DYWNoZU1pbm9yVmVyc2lvbiA9IDA7Ci19Ci0KIHZvaWQgY21DYWNoZU1hbmFnZXI6OkNsZWFuQ01ha2VGaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkKIHsKICAgc3RkOjpzdHJpbmcgZ2xvYiA9IGNtU3RyQ2F0KHBhdGgsICIvQ01ha2VGaWxlcy8qLmNtYWtlIik7CkBAIC03Nyw3ICs3MSw3IEBACiAgICAgfQogICAgIHdoaWxlIChyZWFsYnVmZmVyWzBdID09ICcvJyAmJiByZWFsYnVmZmVyWzFdID09ICcvJykgewogICAgICAgaWYgKChyZWFsYnVmZmVyWzJdID09ICdcXCcpICYmIChyZWFsYnVmZmVyWzNdID09ICduJykpIHsKLSAgICAgICAgaGVscFN0cmluZyArPSAiXG4iOworICAgICAgICBoZWxwU3RyaW5nICs9ICdcbic7CiAgICAgICAgIGhlbHBTdHJpbmcgKz0gJnJlYWxidWZmZXJbNF07CiAgICAgICB9IGVsc2UgewogICAgICAgICBoZWxwU3RyaW5nICs9ICZyZWFsYnVmZmVyWzJdOwpAQCAtMTE3LDIwICsxMTEsMjAgQEAKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGVycm9yOwotICAgICAgZXJyb3IgPDwgIlBhcnNlIGVycm9yIGluIGNhY2hlIGZpbGUgIiA8PCBjYWNoZUZpbGU7Ci0gICAgICBlcnJvciA8PCAiIG9uIGxpbmUgIiA8PCBsaW5lbm8gPDwgIi4gT2ZmZW5kaW5nIGVudHJ5OiAiIDw8IHJlYWxidWZmZXI7CisgICAgICBlcnJvciA8PCAiUGFyc2UgZXJyb3IgaW4gY2FjaGUgZmlsZSAiIDw8IGNhY2hlRmlsZSA8PCAiIG9uIGxpbmUgIgorICAgICAgICAgICAgPDwgbGluZW5vIDw8ICIuIE9mZmVuZGluZyBlbnRyeTogIiA8PCByZWFsYnVmZmVyOwogICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoZXJyb3Iuc3RyKCkpOwogICAgIH0KICAgfQogICB0aGlzLT5DYWNoZU1ham9yVmVyc2lvbiA9IDA7CiAgIHRoaXMtPkNhY2hlTWlub3JWZXJzaW9uID0gMDsKLSAgaWYgKGNvbnN0IHN0ZDo6c3RyaW5nKiBjbWFqb3IgPQorICBpZiAoY21Qcm9wIGNtYWpvciA9CiAgICAgICAgIHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVfTUFKT1JfVkVSU0lPTiIpKSB7CiAgICAgdW5zaWduZWQgaW50IHYgPSAwOwogICAgIGlmIChzc2NhbmYoY21ham9yLT5jX3N0cigpLCAiJXUiLCAmdikgPT0gMSkgewogICAgICAgdGhpcy0+Q2FjaGVNYWpvclZlcnNpb24gPSB2OwogICAgIH0KLSAgICBpZiAoY29uc3Qgc3RkOjpzdHJpbmcqIGNtaW5vciA9CisgICAgaWYgKGNtUHJvcCBjbWlub3IgPQogICAgICAgICAgIHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVfTUlOT1JfVkVSU0lPTiIpKSB7CiAgICAgICBpZiAoc3NjYW5mKGNtaW5vci0+Y19zdHIoKSwgIiV1IiwgJnYpID09IDEpIHsKICAgICAgICAgdGhpcy0+Q2FjaGVNaW5vclZlcnNpb24gPSB2OwpAQCAtMTUwLDggKzE0NCw3IEBACiAgIH0KICAgLy8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBjYWNoZSBkaXJlY3RvcnkgaGFzIG5vdAogICAvLyBiZWVuIG1vdmVkCi0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBvbGREaXIgPQotICAgIHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVGSUxFX0RJUiIpOworICBjbVByb3Agb2xkRGlyID0gdGhpcy0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9DQUNIRUZJTEVfRElSIik7CiAgIGlmIChpbnRlcm5hbCAmJiBvbGREaXIpIHsKICAgICBzdGQ6OnN0cmluZyBjdXJyZW50Y3dkID0gcGF0aDsKICAgICBzdGQ6OnN0cmluZyBvbGRjd2QgPSAqb2xkRGlyOwpAQCAtMTU5LDggKzE1Miw3IEBACiAgICAgY3VycmVudGN3ZCArPSAiL0NNYWtlQ2FjaGUudHh0IjsKICAgICBvbGRjd2QgKz0gIi9DTWFrZUNhY2hlLnR4dCI7CiAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpTYW1lRmlsZShvbGRjd2QsIGN1cnJlbnRjd2QpKSB7Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyogZGlyID0KLSAgICAgICAgdGhpcy0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9DQUNIRUZJTEVfRElSIik7CisgICAgICBjbVByb3AgZGlyID0gdGhpcy0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9DQUNIRUZJTEVfRElSIik7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbWVzc2FnZTsKICAgICAgIG1lc3NhZ2UgPDwgIlRoZSBjdXJyZW50IENNYWtlQ2FjaGUudHh0IGRpcmVjdG9yeSAiIDw8IGN1cnJlbnRjd2QKICAgICAgICAgICAgICAgPDwgIiBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgZGlyZWN0b3J5ICIgPDwgKGRpciA/ICpkaXIgOiAiIikKQEAgLTE3NCwxMCArMTY2LDEwIEBACiB9CiAKIGNvbnN0IGNoYXIqIGNtQ2FjaGVNYW5hZ2VyOjpQZXJzaXN0ZW50UHJvcGVydGllc1tdID0geyAiQURWQU5DRUQiLCAiTU9ESUZJRUQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTVFJJTkdTIiwgbnVsbHB0ciB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTVFJJTkdTIiB9OwogCi1ib29sIGNtQ2FjaGVNYW5hZ2VyOjpSZWFkUHJvcGVydHlFbnRyeShzdGQ6OnN0cmluZyBjb25zdCYgZW50cnlLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWNoZUVudHJ5JiBlKQorYm9vbCBjbUNhY2hlTWFuYWdlcjo6UmVhZFByb3BlcnR5RW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGVudHJ5S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSYgZSkKIHsKICAgLy8gQWxsIHByb3BlcnR5IGVudHJpZXMgYXJlIGludGVybmFsLgogICBpZiAoZS5UeXBlICE9IGNtU3RhdGVFbnVtczo6SU5URVJOQUwpIHsKQEAgLTE4NSwyMCArMTc3LDE4IEBACiAgIH0KIAogICBjb25zdCBjaGFyKiBlbmQgPSBlbnRyeUtleS5jX3N0cigpICsgZW50cnlLZXkuc2l6ZSgpOwotICBmb3IgKGNvbnN0IGNoYXIqKiBwID0gY21DYWNoZU1hbmFnZXI6OlBlcnNpc3RlbnRQcm9wZXJ0aWVzOyAqcDsgKytwKSB7Ci0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwbGVuID0gc3RybGVuKCpwKSArIDE7CisgIGZvciAoY29uc3QgY2hhciogcCA6IGNtQ2FjaGVNYW5hZ2VyOjpQZXJzaXN0ZW50UHJvcGVydGllcykgeworICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcGxlbiA9IHN0cmxlbihwKSArIDE7CiAgICAgaWYgKGVudHJ5S2V5LnNpemUoKSA+IHBsZW4gJiYgKihlbmQgLSBwbGVuKSA9PSAnLScgJiYKLSAgICAgICAgc3RyY21wKGVuZCAtIHBsZW4gKyAxLCAqcCkgPT0gMCkgeworICAgICAgICBzdHJjbXAoZW5kIC0gcGxlbiArIDEsIHApID09IDApIHsKICAgICAgIHN0ZDo6c3RyaW5nIGtleSA9IGVudHJ5S2V5LnN1YnN0cigwLCBlbnRyeUtleS5zaXplKCkgLSBwbGVuKTsKLSAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0gdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpOwotICAgICAgaWYgKGl0LklzQXRFbmQoKSkgeworICAgICAgaWYgKGF1dG8gZW50cnkgPSB0aGlzLT5HZXRDYWNoZUVudHJ5KGtleSkpIHsKKyAgICAgICAgLy8gU3RvcmUgdGhpcyBwcm9wZXJ0eSBvbiBpdHMgZW50cnkuCisgICAgICAgIGVudHJ5LT5TZXRQcm9wZXJ0eShwLCBlLlZhbHVlLmNfc3RyKCkpOworICAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ3JlYXRlIGFuIGVudHJ5IGFuZCBzdG9yZSB0aGUgcHJvcGVydHkuCiAgICAgICAgIENhY2hlRW50cnkmIG5lID0gdGhpcy0+Q2FjaGVba2V5XTsKLSAgICAgICAgbmUuVHlwZSA9IGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRDsKLSAgICAgICAgbmUuU2V0UHJvcGVydHkoKnAsIGUuVmFsdWUuY19zdHIoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTdG9yZSB0aGlzIHByb3BlcnR5IG9uIGl0cyBlbnRyeS4KLSAgICAgICAgaXQuU2V0UHJvcGVydHkoKnAsIGUuVmFsdWUuY19zdHIoKSk7CisgICAgICAgIG5lLlNldFByb3BlcnR5KHAsIGUuVmFsdWUuY19zdHIoKSk7CiAgICAgICB9CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDYsMjEgKzE5NiwyMyBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgY21DYWNoZU1hbmFnZXI6OldyaXRlUHJvcGVydHlFbnRyaWVzKHN0ZDo6b3N0cmVhbSYgb3MsIENhY2hlSXRlcmF0b3IgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpCit2b2lkIGNtQ2FjaGVNYW5hZ2VyOjpXcml0ZVByb3BlcnR5RW50cmllcyhzdGQ6Om9zdHJlYW0mIG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGVudHJ5S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSYgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpIGNvbnN0CiB7Ci0gIGZvciAoY29uc3QgY2hhcioqIHAgPSBjbUNhY2hlTWFuYWdlcjo6UGVyc2lzdGVudFByb3BlcnRpZXM7ICpwOyArK3ApIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSBpLkdldFByb3BlcnR5KCpwKSkgeworICBmb3IgKGNvbnN0IGNoYXIqIHAgOiBjbUNhY2hlTWFuYWdlcjo6UGVyc2lzdGVudFByb3BlcnRpZXMpIHsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gZS5HZXRQcm9wZXJ0eShwKSkgewogICAgICAgc3RkOjpzdHJpbmcgaGVscHN0cmluZyA9Ci0gICAgICAgIGNtU3RyQ2F0KCpwLCAiIHByb3BlcnR5IGZvciB2YXJpYWJsZTogIiwgaS5HZXROYW1lKCkpOworICAgICAgICBjbVN0ckNhdChwLCAiIHByb3BlcnR5IGZvciB2YXJpYWJsZTogIiwgZW50cnlLZXkpOwogICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcob3MsIGhlbHBzdHJpbmcpOwogCi0gICAgICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChpLkdldE5hbWUoKSwgJy0nLCAqcCk7CisgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChlbnRyeUtleSwgJy0nLCBwKTsKICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRLZXkob3MsIGtleSk7CiAgICAgICBvcyA8PCAiOklOVEVSTkFMPSI7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0VmFsdWUob3MsIHZhbHVlKTsKLSAgICAgIG9zIDw8ICJcbiI7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKG9zLCBrZXksIHZhbHVlLAorICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKG9zLCAqdmFsdWUpOworICAgICAgb3MgPDwgJ1xuJzsKKyAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXROZXdsaW5lVHJ1bmNhdGlvbldhcm5pbmcob3MsIGtleSwgKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIpOwogICAgIH0KICAgfQpAQCAtMjcwLDMxICsyNjIsMjkgQEAKIAogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIGZvdXQgPDwgIiMgVGhpcyBpcyB0aGUgQ01ha2VDYWNoZSBmaWxlLlxuIgotICAgICAgIDw8ICIjIEZvciBidWlsZCBpbiBkaXJlY3Rvcnk6ICIgPDwgY3VycmVudGN3ZCA8PCAiXG4iCi0gICAgICAgPDwgIiMgSXQgd2FzIGdlbmVyYXRlZCBieSBDTWFrZTogIgotICAgICAgIDw8IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAiIyBGb3IgYnVpbGQgaW4gZGlyZWN0b3J5OiAiIDw8IGN1cnJlbnRjd2QgPDwgIlxuIgorICAgICAgICAgICIjIEl0IHdhcyBnZW5lcmF0ZWQgYnkgQ01ha2U6ICIKKyAgICAgICA8PCBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKQorICAgICAgIDw8ICJcbiIKKyAgICAgICAgICAiIyBZb3UgY2FuIGVkaXQgdGhpcyBmaWxlIHRvIGNoYW5nZSB2YWx1ZXMgZm91bmQgYW5kIHVzZWQgYnkgY21ha2UuIgorICAgICAgICAgICJcbiIKKyAgICAgICAgICAiIyBJZiB5b3UgZG8gbm90IHdhbnQgdG8gY2hhbmdlIGFueSBvZiB0aGUgdmFsdWVzLCBzaW1wbHkgZXhpdCB0aGUgIgorICAgICAgICAgICJlZGl0b3IuXG4iCisgICAgICAgICAgIiMgSWYgeW91IGRvIHdhbnQgdG8gY2hhbmdlIGEgdmFsdWUsIHNpbXBseSBlZGl0LCBzYXZlLCBhbmQgZXhpdCAiCisgICAgICAgICAgInRoZSBlZGl0b3IuXG4iCisgICAgICAgICAgIiMgVGhlIHN5bnRheCBmb3IgdGhlIGZpbGUgaXMgYXMgZm9sbG93czpcbiIKKyAgICAgICAgICAiIyBLRVk6VFlQRT1WQUxVRVxuIgorICAgICAgICAgICIjIEtFWSBpcyB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlIGluIHRoZSBjYWNoZS5cbiIKKyAgICAgICAgICAiIyBUWVBFIGlzIGEgaGludCB0byBHVUlzIGZvciB0aGUgdHlwZSBvZiBWQUxVRSwgRE8gTk9UIEVESVQgVFlQRSEuIgorICAgICAgICAgICJcbiIKKyAgICAgICAgICAiIyBWQUxVRSBpcyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIEtFWS5cbiIKKyAgICAgICAgICAiXG4iCisgICAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgICAgICIjIEVYVEVSTkFMIGNhY2hlIGVudHJpZXNcbiIKKyAgICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICAgICAgIlxuIjsKICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAKLSAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwotICBmb3V0IDw8ICIjIFlvdSBjYW4gZWRpdCB0aGlzIGZpbGUgdG8gY2hhbmdlIHZhbHVlcyBmb3VuZCBhbmQgdXNlZCBieSBjbWFrZS4iCi0gICAgICAgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgSWYgeW91IGRvIG5vdCB3YW50IHRvIGNoYW5nZSBhbnkgb2YgdGhlIHZhbHVlcywgc2ltcGx5IGV4aXQgdGhlICIKLSAgICAgICAiZWRpdG9yLiIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgSWYgeW91IGRvIHdhbnQgdG8gY2hhbmdlIGEgdmFsdWUsIHNpbXBseSBlZGl0LCBzYXZlLCBhbmQgZXhpdCAiCi0gICAgICAgInRoZSBlZGl0b3IuIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyBUaGUgc3ludGF4IGZvciB0aGUgZmlsZSBpcyBhcyBmb2xsb3dzOlxuIgotICAgICAgIDw8ICIjIEtFWTpUWVBFPVZBTFVFXG4iCi0gICAgICAgPDwgIiMgS0VZIGlzIHRoZSBuYW1lIG9mIGEgdmFyaWFibGUgaW4gdGhlIGNhY2hlLlxuIgotICAgICAgIDw8ICIjIFRZUEUgaXMgYSBoaW50IHRvIEdVSXMgZm9yIHRoZSB0eXBlIG9mIFZBTFVFLCBETyBOT1QgRURJVCAiCi0gICAgICAgIlRZUEUhLiIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgVkFMVUUgaXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBLRVkuXG5cbiI7Ci0gIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotCi0gIGZvdXQgPDwgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsKLSAgZm91dCA8PCAiIyBFWFRFUk5BTCBjYWNoZSBlbnRyaWVzXG4iOwotICBmb3V0IDw8ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7Ci0gIGZvdXQgPDwgIlxuIjsKLQogICBmb3IgKGF1dG8gY29uc3QmIGkgOiB0aGlzLT5DYWNoZSkgewogICAgIENhY2hlRW50cnkgY29uc3QmIGNlID0gaS5zZWNvbmQ7CiAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0ID0gY2UuVHlwZTsKQEAgLTMwNSw0OSArMjk1LDQ4IEBACiAgICAgICAqLwogICAgIH0gZWxzZSBpZiAodCAhPSBjbVN0YXRlRW51bXM6OklOVEVSTkFMKSB7CiAgICAgICAvLyBGb3JtYXQgaXMga2V5OnR5cGU9dmFsdWUKLSAgICAgIGlmIChjb25zdCBjaGFyKiBoZWxwID0gY2UuR2V0UHJvcGVydHkoIkhFTFBTVFJJTkciKSkgewotICAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0SGVscFN0cmluZyhmb3V0LCBoZWxwKTsKKyAgICAgIGlmIChjbVByb3AgaGVscCA9IGNlLkdldFByb3BlcnR5KCJIRUxQU1RSSU5HIikpIHsKKyAgICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcoZm91dCwgKmhlbHApOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcoZm91dCwgIk1pc3NpbmcgZGVzY3JpcHRpb24iKTsKICAgICAgIH0KICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRLZXkoZm91dCwgaS5maXJzdCk7Ci0gICAgICBmb3V0IDw8ICI6IiA8PCBjbVN0YXRlOjpDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKHQpIDw8ICI9IjsKKyAgICAgIGZvdXQgPDwgJzonIDw8IGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodCkgPDwgJz0nOwogICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKGZvdXQsIGNlLlZhbHVlKTsKLSAgICAgIGZvdXQgPDwgIlxuIjsKKyAgICAgIGZvdXQgPDwgJ1xuJzsKICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXROZXdsaW5lVHJ1bmNhdGlvbldhcm5pbmcoZm91dCwgaS5maXJzdCwgY2UuVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlcik7Ci0gICAgICBmb3V0IDw8ICJcbiI7CisgICAgICBmb3V0IDw8ICdcbic7CiAgICAgfQogICB9CiAKLSAgZm91dCA8PCAiXG4iOwotICBmb3V0IDw8ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7Ci0gIGZvdXQgPDwgIiMgSU5URVJOQUwgY2FjaGUgZW50cmllc1xuIjsKLSAgZm91dCA8PCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOwotICBmb3V0IDw8ICJcbiI7CisgIGZvdXQgPDwgIlxuIgorICAgICAgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgICAgICAiIyBJTlRFUk5BTCBjYWNoZSBlbnRyaWVzXG4iCisgICAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgICAgICJcbiI7CiAKLSAgZm9yIChjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpID0gdGhpcy0+TmV3SXRlcmF0b3IoKTsgIWkuSXNBdEVuZCgpOwotICAgICAgIGkuTmV4dCgpKSB7Ci0gICAgaWYgKCFpLkluaXRpYWxpemVkKCkpIHsKKyAgZm9yIChhdXRvIGNvbnN0JiBpIDogdGhpcy0+Q2FjaGUpIHsKKyAgICBpZiAoIWkuc2Vjb25kLkluaXRpYWxpemVkKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHQgPSBpLkdldFR5cGUoKTsKLSAgICB0aGlzLT5Xcml0ZVByb3BlcnR5RW50cmllcyhmb3V0LCBpLCBtZXNzZW5nZXIpOworICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdCA9IGkuc2Vjb25kLkdldFR5cGUoKTsKKyAgICB0aGlzLT5Xcml0ZVByb3BlcnR5RW50cmllcyhmb3V0LCBpLmZpcnN0LCBpLnNlY29uZCwgbWVzc2VuZ2VyKTsKICAgICBpZiAodCA9PSBjbVN0YXRlRW51bXM6OklOVEVSTkFMKSB7CiAgICAgICAvLyBGb3JtYXQgaXMga2V5OnR5cGU9dmFsdWUKLSAgICAgIGlmIChjb25zdCBjaGFyKiBoZWxwID0gaS5HZXRQcm9wZXJ0eSgiSEVMUFNUUklORyIpKSB7Ci0gICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRIZWxwU3RyaW5nKGZvdXQsIGhlbHApOworICAgICAgaWYgKGNtUHJvcCBoZWxwID0gaS5zZWNvbmQuR2V0UHJvcGVydHkoIkhFTFBTVFJJTkciKSkgeworICAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0SGVscFN0cmluZyhmb3V0LCAqaGVscCk7CiAgICAgICB9Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0S2V5KGZvdXQsIGkuR2V0TmFtZSgpKTsKLSAgICAgIGZvdXQgPDwgIjoiIDw8IGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodCkgPDwgIj0iOwotICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKGZvdXQsIGkuR2V0VmFsdWUoKSk7Ci0gICAgICBmb3V0IDw8ICJcbiI7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKGZvdXQsIGkuR2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLkdldFZhbHVlKCksIG1lc3Nlbmdlcik7CisgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0S2V5KGZvdXQsIGkuZmlyc3QpOworICAgICAgZm91dCA8PCAnOicgPDwgY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyh0KSA8PCAnPSc7CisgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0VmFsdWUoZm91dCwgaS5zZWNvbmQuR2V0VmFsdWUoKSk7CisgICAgICBmb3V0IDw8ICdcbic7CisgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKAorICAgICAgICBmb3V0LCBpLmZpcnN0LCBpLnNlY29uZC5HZXRWYWx1ZSgpLCBtZXNzZW5nZXIpOwogICAgIH0KICAgfQotICBmb3V0IDw8ICJcbiI7CisgIGZvdXQgPDwgJ1xuJzsKICAgZm91dC5DbG9zZSgpOwogICBzdGQ6OnN0cmluZyBjaGVja0NhY2hlRmlsZSA9IGNtU3RyQ2F0KHBhdGgsICIvQ01ha2VGaWxlcyIpOwogICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KGNoZWNrQ2FjaGVGaWxlKTsKQEAgLTM4NSw3ICszNzQsOSBAQAogewogICAvLyBzdXBwb3J0IDogaW4ga2V5IG5hbWUgYnkgZG91YmxlIHF1b3RpbmcKICAgY29uc3QgY2hhciogcSA9Ci0gICAgKGtleS5maW5kKCc6JykgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwga2V5LmZpbmQoIi8vIikgPT0gMCkgPyAiXCIiIDogIiI7CisgICAgKGtleS5maW5kKCc6JykgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgY21IYXNMaXRlcmFsUHJlZml4KGtleSwgIi8vIikpCisgICAgPyAiXCIiCisgICAgOiAiIjsKICAgZm91dCA8PCBxIDw8IGtleSA8PCBxOwogfQogCkBAIC00MzAsNyArNDIxLDcgQEAKICAgICAgICAgZm91dCA8PCAiXFxuIjsKICAgICAgIH0KICAgICAgIG9uZUxpbmUgPSBoZWxwU3RyaW5nLnN1YnN0cihwb3MsIGkgLSBwb3MpOwotICAgICAgZm91dCA8PCBvbmVMaW5lIDw8ICJcbiI7CisgICAgICBmb3V0IDw8IG9uZUxpbmUgPDwgJ1xuJzsKICAgICAgIHBvcyA9IGk7CiAgICAgfQogICB9CkBAIC00NTIsNyArNDQzLDcgQEAKICAgICAgICAgZm91dCA8PCAiXFxuIjsKICAgICAgIH0KICAgICAgIG9uZUxpbmUgPSBtZXNzYWdlLnN1YnN0cihwb3MsIGkgLSBwb3MpOwotICAgICAgZm91dCA8PCBvbmVMaW5lIDw8ICJcbiI7CisgICAgICBmb3V0IDw8IG9uZUxpbmUgPDwgJ1xuJzsKICAgICAgIHBvcyA9IGk7CiAgICAgfQogICB9CkBAIC00ODEsMTAgKzQ3Miw3IEBACiAKIHZvaWQgY21DYWNoZU1hbmFnZXI6OlJlbW92ZUNhY2hlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKIHsKLSAgYXV0byBpID0gdGhpcy0+Q2FjaGUuZmluZChrZXkpOwotICBpZiAoaSAhPSB0aGlzLT5DYWNoZS5lbmQoKSkgewotICAgIHRoaXMtPkNhY2hlLmVyYXNlKGkpOwotICB9CisgIHRoaXMtPkNhY2hlLmVyYXNlKGtleSk7CiB9CiAKIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUVudHJ5KiBjbUNhY2hlTWFuYWdlcjo6R2V0Q2FjaGVFbnRyeSgKQEAgLTQ5Nyw0MCArNDg1LDM5IEBACiAgIHJldHVybiBudWxscHRyOwogfQogCi1jbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBjbUNhY2hlTWFuYWdlcjo6R2V0Q2FjaGVJdGVyYXRvcigKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKLXsKLSAgcmV0dXJuIHsgKnRoaXMsIGtleS5jX3N0cigpIH07Ci19Ci0KLWNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGNtQ2FjaGVNYW5hZ2VyOjpHZXRDYWNoZUl0ZXJhdG9yKCkKLXsKLSAgcmV0dXJuIHsgKnRoaXMsIG51bGxwdHIgfTsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcqIGNtQ2FjaGVNYW5hZ2VyOjpHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoCitjb25zdCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeSogY21DYWNoZU1hbmFnZXI6OkdldENhY2hlRW50cnkoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0CiB7CiAgIGF1dG8gaSA9IHRoaXMtPkNhY2hlLmZpbmQoa2V5KTsKLSAgaWYgKGkgIT0gdGhpcy0+Q2FjaGUuZW5kKCkgJiYgaS0+c2Vjb25kLkluaXRpYWxpemVkKSB7Ci0gICAgcmV0dXJuICZpLT5zZWNvbmQuVmFsdWU7CisgIGlmIChpICE9IHRoaXMtPkNhY2hlLmVuZCgpKSB7CisgICAgcmV0dXJuICZpLT5zZWNvbmQ7CisgIH0KKyAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2NtUHJvcCBjbUNhY2hlTWFuYWdlcjo6R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0Cit7CisgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgaWYgKGVudHJ5LT5Jbml0aWFsaXplZCkgeworICAgICAgcmV0dXJuICZlbnRyeS0+R2V0VmFsdWUoKTsKKyAgICB9CiAgIH0KICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgY21DYWNoZU1hbmFnZXI6OlByaW50Q2FjaGUoc3RkOjpvc3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gIG91dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPDwgc3RkOjplbmRsOwotICBvdXQgPDwgIkNNYWtlQ2FjaGUgQ29udGVudHM6IiA8PCBzdGQ6OmVuZGw7CisgIG91dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorICAgICAgICAgIkNNYWtlQ2FjaGUgQ29udGVudHM6XG4iOwogICBmb3IgKGF1dG8gY29uc3QmIGkgOiB0aGlzLT5DYWNoZSkgewogICAgIGlmIChpLnNlY29uZC5UeXBlICE9IGNtU3RhdGVFbnVtczo6SU5URVJOQUwpIHsKLSAgICAgIG91dCA8PCBpLmZpcnN0IDw8ICIgPSAiIDw8IGkuc2Vjb25kLlZhbHVlIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIG91dCA8PCBpLmZpcnN0IDw8ICIgPSAiIDw8IGkuc2Vjb25kLlZhbHVlIDw8ICdcbic7CiAgICAgfQogICB9Ci0gIG91dCA8PCAiXG5cbiI7Ci0gIG91dCA8PCAiVG8gY2hhbmdlIHZhbHVlcyBpbiB0aGUgQ01ha2VDYWNoZSwgIiA8PCBzdGQ6OmVuZGwKLSAgICAgIDw8ICJlZGl0IENNYWtlQ2FjaGUudHh0IGluIHlvdXIgb3V0cHV0IGRpcmVjdG9yeS5cbiI7Ci0gIG91dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPDwgc3RkOjplbmRsOworICBvdXQgPDwgIlxuXG4iCisgICAgICAgICAiVG8gY2hhbmdlIHZhbHVlcyBpbiB0aGUgQ01ha2VDYWNoZSwgXG4iCisgICAgICAgICAiZWRpdCBDTWFrZUNhY2hlLnR4dCBpbiB5b3VyIG91dHB1dCBkaXJlY3RvcnkuXG4iCisgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKIH0KIAogdm9pZCBjbUNhY2hlTWFuYWdlcjo6QWRkQ2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSwKQEAgLTUzOCwxMiArNTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlKQogewogICBDYWNoZUVudHJ5JiBlID0gdGhpcy0+Q2FjaGVba2V5XTsKLSAgaWYgKHZhbHVlKSB7Ci0gICAgZS5WYWx1ZSA9IHZhbHVlOwotICAgIGUuSW5pdGlhbGl6ZWQgPSB0cnVlOwotICB9IGVsc2UgewotICAgIGUuVmFsdWUuY2xlYXIoKTsKLSAgfQorICBlLlNldFZhbHVlKHZhbHVlKTsKICAgZS5UeXBlID0gdHlwZTsKICAgLy8gbWFrZSBzdXJlIHdlIG9ubHkgdXNlIHVuaXggc3R5bGUgcGF0aHMKICAgaWYgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCB8fCB0eXBlID09IGNtU3RhdGVFbnVtczo6UEFUSCkgewpAQCAtNTY3LDcwICs1NDksMzggQEAKICAgICAgICAgICAgICAgICAgIDogIihUaGlzIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQpIik7CiB9CiAKLWJvb2wgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OklzQXRFbmQoKSBjb25zdAordm9pZCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6U2V0VmFsdWUoY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gIHJldHVybiB0aGlzLT5Qb3NpdGlvbiA9PSB0aGlzLT5Db250YWluZXIuQ2FjaGUuZW5kKCk7Ci19Ci0KLXZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OkJlZ2luKCkKLXsKLSAgdGhpcy0+UG9zaXRpb24gPSB0aGlzLT5Db250YWluZXIuQ2FjaGUuYmVnaW4oKTsKLX0KLQotYm9vbCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6RmluZChjb25zdCBzdGQ6OnN0cmluZyYga2V5KQotewotICB0aGlzLT5Qb3NpdGlvbiA9IHRoaXMtPkNvbnRhaW5lci5DYWNoZS5maW5kKGtleSk7Ci0gIHJldHVybiAhdGhpcy0+SXNBdEVuZCgpOwotfQotCi12b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpOZXh0KCkKLXsKLSAgaWYgKCF0aGlzLT5Jc0F0RW5kKCkpIHsKLSAgICArK3RoaXMtPlBvc2l0aW9uOwotICB9Ci19Ci0KLXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6R2V0UHJvcGVydHlMaXN0KCkgY29uc3QKLXsKLSAgcmV0dXJuIHRoaXMtPkdldEVudHJ5KCkuR2V0UHJvcGVydHlMaXN0KCk7Ci19Ci0KLXZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OlNldFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKQotewotICBpZiAodGhpcy0+SXNBdEVuZCgpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIENhY2hlRW50cnkqIGVudHJ5ID0gJnRoaXMtPkdldEVudHJ5KCk7CiAgIGlmICh2YWx1ZSkgewotICAgIGVudHJ5LT5WYWx1ZSA9IHZhbHVlOwotICAgIGVudHJ5LT5Jbml0aWFsaXplZCA9IHRydWU7CisgICAgdGhpcy0+VmFsdWUgPSB2YWx1ZTsKKyAgICB0aGlzLT5Jbml0aWFsaXplZCA9IHRydWU7CiAgIH0gZWxzZSB7Ci0gICAgZW50cnktPlZhbHVlLmNsZWFyKCk7CisgICAgdGhpcy0+VmFsdWUuY2xlYXIoKTsKICAgfQogfQogCi1ib29sIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpHZXRWYWx1ZUFzQm9vbCgpIGNvbnN0Ci17Ci0gIHJldHVybiBjbUlzT24odGhpcy0+R2V0RW50cnkoKS5WYWx1ZSk7Ci19Ci0KIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6R2V0UHJvcGVydHlMaXN0KCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPlByb3BlcnRpZXMuR2V0S2V5cygpOwogfQogCi1jb25zdCBjaGFyKiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6R2V0UHJvcGVydHkoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAorY21Qcm9wIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUVudHJ5OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgaWYgKHByb3AgPT0gIlRZUEUiKSB7Ci0gICAgcmV0dXJuIGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodGhpcy0+VHlwZSkuY19zdHIoKTsKKyAgICByZXR1cm4gJmNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodGhpcy0+VHlwZSk7CiAgIH0KICAgaWYgKHByb3AgPT0gIlZBTFVFIikgewotICAgIHJldHVybiB0aGlzLT5WYWx1ZS5jX3N0cigpOworICAgIHJldHVybiAmdGhpcy0+VmFsdWU7CiAgIH0KICAgcmV0dXJuIHRoaXMtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKIH0KIAorYm9vbCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6R2V0UHJvcGVydHlBc0Jvb2woCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAoreworICByZXR1cm4gY21Jc09uKHRoaXMtPkdldFByb3BlcnR5KHByb3ApKTsKK30KKwogdm9pZCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6U2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSkKIHsKQEAgLTY0Myw2ICs1OTMsMTEgQEAKICAgfQogfQogCit2b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUVudHJ5OjpTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcCwgYm9vbCB2KQoreworICB0aGlzLT5TZXRQcm9wZXJ0eShwLCB2ID8gIk9OIiA6ICJPRkYiKTsKK30KKwogdm9pZCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQpAQCAtNjYxLDQ5ICs2MTYsMyBAQAogICAgIHRoaXMtPlByb3BlcnRpZXMuQXBwZW5kUHJvcGVydHkocHJvcCwgdmFsdWUsIGFzU3RyaW5nKTsKICAgfQogfQotCi1jb25zdCBjaGFyKiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6R2V0UHJvcGVydHkoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAotewotICBpZiAoIXRoaXMtPklzQXRFbmQoKSkgewotICAgIHJldHVybiB0aGlzLT5HZXRFbnRyeSgpLkdldFByb3BlcnR5KHByb3ApOwotICB9Ci0gIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHYpCi17Ci0gIGlmICghdGhpcy0+SXNBdEVuZCgpKSB7Ci0gICAgdGhpcy0+R2V0RW50cnkoKS5TZXRQcm9wZXJ0eShwLCB2KTsKLSAgfQotfQotCi12b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZykKLXsKLSAgaWYgKCF0aGlzLT5Jc0F0RW5kKCkpIHsKLSAgICB0aGlzLT5HZXRFbnRyeSgpLkFwcGVuZFByb3BlcnR5KHAsIHYsIGFzU3RyaW5nKTsKLSAgfQotfQotCi1ib29sIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpHZXRQcm9wZXJ0eUFzQm9vbCgKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0Ci17Ci0gIGlmIChjb25zdCBjaGFyKiB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7Ci0gICAgcmV0dXJuIGNtSXNPbih2YWx1ZSk7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcCwgYm9vbCB2KQotewotICB0aGlzLT5TZXRQcm9wZXJ0eShwLCB2ID8gIk9OIiA6ICJPRkYiKTsKLX0KLQotYm9vbCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6UHJvcGVydHlFeGlzdHMoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAotewotICByZXR1cm4gdGhpcy0+R2V0UHJvcGVydHkocHJvcCkgIT0gbnVsbHB0cjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNhY2hlTWFuYWdlci5oIGIvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmgKaW5kZXggZDhiZTk5MS4uZjAzNjI1OCAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmgKKysrIGIvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVByb3BlcnR5TWFwLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAKQEAgLTI1LDc3ICsyNiwzMyBAQAogICovCiBjbGFzcyBjbUNhY2hlTWFuYWdlcgogewotcHVibGljOgotICBjbUNhY2hlTWFuYWdlcigpOwotICBjbGFzcyBDYWNoZUl0ZXJhdG9yOwotICBmcmllbmQgY2xhc3MgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I7Ci0KLXByaXZhdGU6Ci0gIHN0cnVjdCBDYWNoZUVudHJ5CisgIGNsYXNzIENhY2hlRW50cnkKICAgeworICAgIGZyaWVuZCBjbGFzcyBjbUNhY2hlTWFuYWdlcjsKKworICBwdWJsaWM6CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldFZhbHVlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VmFsdWU7IH0KKyAgICB2b2lkIFNldFZhbHVlKGNvbnN0IGNoYXIqKTsKKworICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgR2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlR5cGU7IH0KKyAgICB2b2lkIFNldFR5cGUoY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eSkgeyB0aGlzLT5UeXBlID0gdHk7IH0KKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRQcm9wZXJ0eUxpc3QoKSBjb25zdDsKKyAgICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5KSBjb25zdDsKKyAgICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSkgY29uc3Q7CisgICAgdm9pZCBTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IGNoYXIqIHZhbHVlKTsKKyAgICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7CisKKyAgcHJpdmF0ZToKICAgICBzdGQ6OnN0cmluZyBWYWx1ZTsKICAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIFR5cGUgPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQ7CiAgICAgY21Qcm9wZXJ0eU1hcCBQcm9wZXJ0aWVzOwotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRQcm9wZXJ0eUxpc3QoKSBjb25zdDsKLSAgICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OwotICAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gICAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7CiAgICAgYm9vbCBJbml0aWFsaXplZCA9IGZhbHNlOwogICB9OwogCiBwdWJsaWM6Ci0gIGNsYXNzIENhY2hlSXRlcmF0b3IKLSAgewotICBwdWJsaWM6Ci0gICAgdm9pZCBCZWdpbigpOwotICAgIGJvb2wgRmluZChjb25zdCBzdGQ6OnN0cmluZyYpOwotICAgIGJvb2wgSXNBdEVuZCgpIGNvbnN0OwotICAgIHZvaWQgTmV4dCgpOwotICAgIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5Qb3NpdGlvbi0+Zmlyc3Q7IH0KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0UHJvcGVydHlMaXN0KCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdDsKLSAgICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBQcm9wZXJ0eUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OwotICAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gICAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7Ci0gICAgdm9pZCBTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGJvb2wgdmFsdWUpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkdldEVudHJ5KCkuVmFsdWU7IH0KLSAgICBib29sIEdldFZhbHVlQXNCb29sKCkgY29uc3Q7Ci0gICAgdm9pZCBTZXRWYWx1ZShjb25zdCBjaGFyKik7Ci0gICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBHZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICByZXR1cm4gdGhpcy0+R2V0RW50cnkoKS5UeXBlOwotICAgIH0KLSAgICB2b2lkIFNldFR5cGUoY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eSkKLSAgICB7Ci0gICAgICB0aGlzLT5HZXRFbnRyeSgpLlR5cGUgPSB0eTsKLSAgICB9Ci0gICAgYm9vbCBJbml0aWFsaXplZCgpIHsgcmV0dXJuIHRoaXMtPkdldEVudHJ5KCkuSW5pdGlhbGl6ZWQ7IH0KLSAgICBjbUNhY2hlTWFuYWdlciYgQ29udGFpbmVyOwotICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDYWNoZUVudHJ5Pjo6aXRlcmF0b3IgUG9zaXRpb247Ci0gICAgQ2FjaGVJdGVyYXRvcihjbUNhY2hlTWFuYWdlciYgY20pCi0gICAgICA6IENvbnRhaW5lcihjbSkKLSAgICB7Ci0gICAgICB0aGlzLT5CZWdpbigpOwotICAgIH0KLSAgICBDYWNoZUl0ZXJhdG9yKGNtQ2FjaGVNYW5hZ2VyJiBjbSwgY29uc3QgY2hhcioga2V5KQotICAgICAgOiBDb250YWluZXIoY20pCi0gICAgewotICAgICAgaWYgKGtleSkgewotICAgICAgICB0aGlzLT5GaW5kKGtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gIHByaXZhdGU6Ci0gICAgQ2FjaGVFbnRyeSBjb25zdCYgR2V0RW50cnkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5Qb3NpdGlvbi0+c2Vjb25kOyB9Ci0gICAgQ2FjaGVFbnRyeSYgR2V0RW50cnkoKSB7IHJldHVybiB0aGlzLT5Qb3NpdGlvbi0+c2Vjb25kOyB9Ci0gIH07Ci0KLSAgLy8hIHJldHVybiBhbiBpdGVyYXRvciB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNhY2hlIG1hcAotICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBOZXdJdGVyYXRvcigpIHsgcmV0dXJuIHsgKnRoaXMgfTsgfQotCiAgIC8vISBMb2FkIGEgY2FjaGUgZm9yIGdpdmVuIG1ha2VmaWxlLiAgTG9hZHMgZnJvbSBwYXRoL0NNYWtlQ2FjaGUudHh0LgogICBib29sIExvYWRDYWNoZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwgYm9vbCBpbnRlcm5hbCwKICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBleGNsdWRlcywKQEAgLTExMCw2NyArNjcsODIgQEAKICAgLy8hIFByaW50IHRoZSBjYWNoZSB0byBhIHN0cmVhbQogICB2b2lkIFByaW50Q2FjaGUoc3RkOjpvc3RyZWFtJikgY29uc3Q7CiAKLSAgLy8hIEdldCB0aGUgaXRlcmF0b3IgZm9yIGFuIGVudHJ5IHdpdGggYSBnaXZlbiBrZXkuCi0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIEdldENhY2hlSXRlcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSk7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIEdldENhY2hlSXRlcmF0b3IoKTsKLQotICAvLyEgUmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlCi0gIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5KTsKLQotICAvLyEgR2V0IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2FjaGUKLSAgaW50IEdldFNpemUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRoaXMtPkNhY2hlLnNpemUoKSk7IH0KLQogICAvLyEgR2V0IGEgdmFsdWUgZnJvbSB0aGUgY2FjaGUgZ2l2ZW4gYSBrZXkKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIEdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYga2V5KSBjb25zdDsKKyAgY21Qcm9wIEdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYga2V5KSBjb25zdDsKIAotICBjb25zdCBjaGFyKiBHZXRDYWNoZUVudHJ5VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKKyAgY21Qcm9wIEdldENhY2hlRW50cnlWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYga2V5KSBjb25zdAogICB7Ci0gICAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaXQgPSB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7Ci0gICAgaWYgKGl0LklzQXRFbmQoKSkgewotICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8gZW50cnkgPSB0aGlzLT5HZXRDYWNoZUVudHJ5KGtleSkpIHsKKyAgICAgIHJldHVybiAmZW50cnktPkdldFZhbHVlKCk7CiAgICAgfQotICAgIHJldHVybiBpdC5HZXRWYWx1ZSgpLmNfc3RyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAotICBjb25zdCBjaGFyKiBHZXRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSkKKyAgdm9pZCBTZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKQogICB7Ci0gICAgcmV0dXJuIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5KS5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgICAgaWYgKGF1dG8gZW50cnkgPSB0aGlzLT5HZXRDYWNoZUVudHJ5KGtleSkpIHsKKyAgICAgIGVudHJ5LT5TZXRWYWx1ZSh2YWx1ZS5jX3N0cigpKTsKKyAgICB9CiAgIH0KIAotICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIEdldENhY2hlRW50cnlUeXBlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpCisgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgR2V0Q2FjaGVFbnRyeVR5cGUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKICAgewotICAgIHJldHVybiB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuR2V0VHlwZSgpOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICByZXR1cm4gZW50cnktPkdldFR5cGUoKTsKKyAgICB9CisgICAgcmV0dXJuIGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRDsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRDYWNoZUVudHJ5UHJvcGVydHlMaXN0KAorICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0CisgIHsKKyAgICBpZiAoYXV0byBlbnRyeSA9IHRoaXMtPkdldENhY2hlRW50cnkoa2V5KSkgeworICAgICAgcmV0dXJuIGVudHJ5LT5HZXRQcm9wZXJ0eUxpc3QoKTsKKyAgICB9CisgICAgcmV0dXJuIHt9OworICB9CisKKyAgY21Qcm9wIEdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSkgY29uc3QKKyAgeworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICByZXR1cm4gZW50cnktPkdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAogICBib29sIEdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChzdGQ6OnN0cmluZyBjb25zdCYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSkgY29uc3QKICAgewotICAgIHJldHVybiB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuR2V0UHJvcGVydHlBc0Jvb2wocHJvcE5hbWUpOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICByZXR1cm4gZW50cnktPkdldFByb3BlcnR5QXNCb29sKHByb3BOYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgdm9pZCBTZXRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCiAgIHsKLSAgICB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuU2V0UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLmNfc3RyKCkpOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICBlbnRyeS0+U2V0UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLmNfc3RyKCkpOworICAgIH0KICAgfQogCiAgIHZvaWQgU2V0Q2FjaGVFbnRyeUJvb2xQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lLCBib29sIHZhbHVlKQogICB7Ci0gICAgdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpLlNldFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSk7Ci0gIH0KLQotICB2b2lkIFNldENhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5LCBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCi0gIHsKLSAgICB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSkuU2V0VmFsdWUodmFsdWUuY19zdHIoKSk7CisgICAgaWYgKGF1dG8gZW50cnkgPSB0aGlzLT5HZXRDYWNoZUVudHJ5KGtleSkpIHsKKyAgICAgIGVudHJ5LT5TZXRQcm9wZXJ0eShwcm9wTmFtZSwgdmFsdWUpOworICAgIH0KICAgfQogCiAgIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSkKICAgewotICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5KS5TZXRQcm9wZXJ0eShwcm9wTmFtZSwgbnVsbHB0cik7CisgICAgaWYgKGF1dG8gZW50cnkgPSB0aGlzLT5HZXRDYWNoZUVudHJ5KGtleSkpIHsKKyAgICAgIGVudHJ5LT5TZXRQcm9wZXJ0eShwcm9wTmFtZSwgbnVsbHB0cik7CisgICAgfQogICB9CiAKICAgdm9pZCBBcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKQEAgLTE3OCwxNiArMTUwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKQogICB7Ci0gICAgdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpLkFwcGVuZFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSwgYXNTdHJpbmcpOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICBlbnRyeS0+QXBwZW5kUHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLCBhc1N0cmluZyk7CisgICAgfQogICB9CiAKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldENhY2hlRW50cnlLZXlzKCkKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldENhY2hlRW50cnlLZXlzKCkgY29uc3QKICAgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZpbml0aW9uczsKLSAgICBkZWZpbml0aW9ucy5yZXNlcnZlKHRoaXMtPkdldFNpemUoKSk7Ci0gICAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgY2l0ID0gdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcigpOwotICAgIGZvciAoY2l0LkJlZ2luKCk7ICFjaXQuSXNBdEVuZCgpOyBjaXQuTmV4dCgpKSB7Ci0gICAgICBkZWZpbml0aW9ucy5wdXNoX2JhY2soY2l0LkdldE5hbWUoKSk7CisgICAgZGVmaW5pdGlvbnMucmVzZXJ2ZSh0aGlzLT5DYWNoZS5zaXplKCkpOworICAgIGZvciAoYXV0byBjb25zdCYgaSA6IHRoaXMtPkNhY2hlKSB7CisgICAgICBkZWZpbml0aW9ucy5wdXNoX2JhY2soaS5maXJzdCk7CiAgICAgfQogICAgIHJldHVybiBkZWZpbml0aW9uczsKICAgfQpAQCAtMTk2LDIzICsxNjksMjIgQEAKICAgdW5zaWduZWQgaW50IEdldENhY2hlTWFqb3JWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q2FjaGVNYWpvclZlcnNpb247IH0KICAgdW5zaWduZWQgaW50IEdldENhY2hlTWlub3JWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q2FjaGVNaW5vclZlcnNpb247IH0KIAotcHJvdGVjdGVkOgogICAvLyEgQWRkIGFuIGVudHJ5IGludG8gdGhlIGNhY2hlCiAgIHZvaWQgQWRkQ2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGhlbHBTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHR5cGUpOwogCisgIC8vISBSZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgY2FjaGUKKyAgdm9pZCBSZW1vdmVDYWNoZUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpOworCitwcml2YXRlOgogICAvLyEgR2V0IGEgY2FjaGUgZW50cnkgb2JqZWN0IGZvciBhIGtleQogICBDYWNoZUVudHJ5KiBHZXRDYWNoZUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpOworICBjb25zdCBDYWNoZUVudHJ5KiBHZXRDYWNoZUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0OworCiAgIC8vISBDbGVhbiBvdXQgdGhlIENNYWtlRmlsZXMgZGlyZWN0b3J5IGlmIG5vIENNYWtlQ2FjaGUudHh0CiAgIHZvaWQgQ2xlYW5DTWFrZUZpbGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKTsKIAotICAvLyBDYWNoZSB2ZXJzaW9uIGluZm8KLSAgdW5zaWduZWQgaW50IENhY2hlTWFqb3JWZXJzaW9uOwotICB1bnNpZ25lZCBpbnQgQ2FjaGVNaW5vclZlcnNpb247Ci0KLXByaXZhdGU6Ci0gIHVzaW5nIENhY2hlRW50cnlNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgQ2FjaGVFbnRyeT47CiAgIHN0YXRpYyB2b2lkIE91dHB1dEhlbHBTdHJpbmcoc3RkOjpvc3RyZWFtJiBmb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBoZWxwU3RyaW5nKTsKICAgc3RhdGljIHZvaWQgT3V0cHV0V2FybmluZ0NvbW1lbnQoc3RkOjpvc3RyZWFtJiBmb3V0LApAQCAtMjI4LDE1ICsyMDAsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSk7CiAKICAgc3RhdGljIGNvbnN0IGNoYXIqIFBlcnNpc3RlbnRQcm9wZXJ0aWVzW107Ci0gIGJvb2wgUmVhZFByb3BlcnR5RW50cnkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwgQ2FjaGVFbnRyeSYgZSk7Ci0gIHZvaWQgV3JpdGVQcm9wZXJ0eUVudHJpZXMoc3RkOjpvc3RyZWFtJiBvcywgQ2FjaGVJdGVyYXRvciBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpOworICBib29sIFJlYWRQcm9wZXJ0eUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIGNvbnN0IENhY2hlRW50cnkmIGUpOworICB2b2lkIFdyaXRlUHJvcGVydHlFbnRyaWVzKHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbnRyeUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDYWNoZUVudHJ5JiBlLCBjbU1lc3NlbmdlciogbWVzc2VuZ2VyKSBjb25zdDsKIAotICBDYWNoZUVudHJ5TWFwIENhY2hlOwotICAvLyBPbmx5IGNtYWtlIGFuZCBjbVN0YXRlIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBjYWNoZSB2YWx1ZXMKLSAgLy8gdGhlIGNvbW1hbmRzIHNob3VsZCBuZXZlciB1c2UgdGhlIGNtQ2FjaGVNYW5hZ2VyIGRpcmVjdGx5Ci0gIGZyaWVuZCBjbGFzcyBjbVN0YXRlOyAvLyBhbGxvdyBhY2Nlc3MgdG8gYWRkIGNhY2hlIHZhbHVlcwotICBmcmllbmQgY2xhc3MgY21ha2U7ICAgLy8gYWxsb3cgYWNjZXNzIHRvIGFkZCBjYWNoZSB2YWx1ZXMKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENhY2hlRW50cnk+IENhY2hlOworCisgIC8vIENhY2hlIHZlcnNpb24gaW5mbworICB1bnNpZ25lZCBpbnQgQ2FjaGVNYWpvclZlcnNpb24gPSAwOworICB1bnNpZ25lZCBpbnQgQ2FjaGVNaW5vclZlcnNpb24gPSAwOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DYWxsVmlzdWFsU3R1ZGlvTWFjcm8uY3h4IGIvU291cmNlL2NtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmN4eAppbmRleCA5ZTE1MmZmLi45NGI2ZTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DYWxsVmlzdWFsU3R1ZGlvTWFjcm8uY3h4CisrKyBiL1NvdXJjZS9jbUNhbGxWaXN1YWxTdHVkaW9NYWNyby5jeHgKQEAgLTQzLDggKzQzLDcgQEAKICAgICAgIGlmIChMb2dFcnJvcnNBc01lc3NhZ2VzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIF9ocmVzdWx0X29zczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgX2hyZXN1bHRfb3NzLmZsYWdzKHN0ZDo6aW9zOjpoZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2hyZXN1bHRfb3NzIDw8IGNvbnRleHQgPDwgIiBmYWlsZWQgSFJFU1VMVCwgaHIgPSAweCIgPDwgaHIgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2hyZXN1bHRfb3NzIDw8IGNvbnRleHQgPDwgIiBmYWlsZWQgSFJFU1VMVCwgaHIgPSAweCIgPDwgaHIgPDwgJ1xuJzsgIFwKICAgICAgICAgX2hyZXN1bHRfb3NzLmZsYWdzKHN0ZDo6aW9zOjpkZWMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgX2hyZXN1bHRfb3NzIDw8IF9fRklMRV9fIDw8ICIoIiA8PCBfX0xJTkVfXyA8PCAiKSI7ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY21TeXN0ZW1Ub29sczo6TWVzc2FnZShfaHJlc3VsdF9vc3Muc3RyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTk4LDMyICs5NywzNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIERJU1BBVENIX01FVEhPRCwgJnBhcmFtcywgJnJlc3VsdCwgJmV4Y2VwLCAmYXJnKTsKIAogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKLSAgICAgIG9zcyA8PCBzdGQ6OmVuZGw7Ci0gICAgICBvc3MgPDwgIkludm9rZShFeGVjdXRlQ29tbWFuZCkiIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIG9zcyA8PCAiICBNYWNybzogIiA8PCBtYWNybyA8PCBzdGQ6OmVuZGw7Ci0gICAgICBvc3MgPDwgIiAgQXJnczogIiA8PCBhcmdzIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICAgIG9zcyA8PCAiXG5JbnZva2UoRXhlY3V0ZUNvbW1hbmQpXG4iCisgICAgICAgICAgICAgIiAgTWFjcm86ICIgPDwgbWFjcm8gPDwgIlxuIgorICAgICAgICAgICAgICIgIEFyZ3M6ICIgPDwgYXJncyA8PCAnXG4nOworICAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAKICAgICAgIGlmIChESVNQX0VfRVhDRVBUSU9OID09IGhyKSB7Ci0gICAgICAgIG9zcyA8PCAiRElTUF9FX0VYQ0VQVElPTiBFWENFUElORk86IiA8PCBleGNlcC53Q29kZSA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zcyA8PCAiICB3Q29kZTogIiA8PCBleGNlcC53Q29kZSA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zcyA8PCAiICB3UmVzZXJ2ZWQ6ICIgPDwgZXhjZXAud1Jlc2VydmVkIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgICAgICBvc3MgPDwgIkRJU1BfRV9FWENFUFRJT04gRVhDRVBJTkZPOiIgPDwgZXhjZXAud0NvZGUgPDwgIlxuIgorICAgICAgICAgICAgICAgIiAgd0NvZGU6ICIgPDwgZXhjZXAud0NvZGUgPDwgIlxuIgorICAgICAgICAgICAgICAgIiAgd1Jlc2VydmVkOiAiIDw8IGV4Y2VwLndSZXNlcnZlZCA8PCAnXG4nOworICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICAgICAgICAgaWYgKGV4Y2VwLmJzdHJTb3VyY2UpIHsKICAgICAgICAgICBvc3MgPDwgIiAgYnN0clNvdXJjZTogIiA8PCAoY29uc3QgY2hhciopKF9ic3RyX3QpZXhjZXAuYnN0clNvdXJjZQotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgIDw8ICdcbic7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGV4Y2VwLmJzdHJEZXNjcmlwdGlvbikgewogICAgICAgICAgIG9zcyA8PCAiICBic3RyRGVzY3JpcHRpb246ICIKLSAgICAgICAgICAgICAgPDwgKGNvbnN0IGNoYXIqKShfYnN0cl90KWV4Y2VwLmJzdHJEZXNjcmlwdGlvbiA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgIDw8IChjb25zdCBjaGFyKikoX2JzdHJfdClleGNlcC5ic3RyRGVzY3JpcHRpb24gPDwgJ1xuJzsKICAgICAgICAgfQogICAgICAgICBpZiAoZXhjZXAuYnN0ckhlbHBGaWxlKSB7CiAgICAgICAgICAgb3NzIDw8ICIgIGJzdHJIZWxwRmlsZTogIiA8PCAoY29uc3QgY2hhciopKF9ic3RyX3QpZXhjZXAuYnN0ckhlbHBGaWxlCi0gICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgICAgPDwgJ1xuJzsKICAgICAgICAgfQotICAgICAgICBvc3MgPDwgIiAgZHdIZWxwQ29udGV4dDogIiA8PCBleGNlcC5kd0hlbHBDb250ZXh0IDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgb3NzIDw8ICIgIHB2UmVzZXJ2ZWQ6ICIgPDwgZXhjZXAucHZSZXNlcnZlZCA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zcyA8PCAiICBwZm5EZWZlcnJlZEZpbGxJbjogIgotICAgICAgICAgICAgPDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXhjZXAucGZuRGVmZXJyZWRGaWxsSW4pIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgb3NzIDw8ICIgIHNjb2RlOiAiIDw8IGV4Y2VwLnNjb2RlIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgICAgICBvc3MgPDwgIiAgZHdIZWxwQ29udGV4dDogIiA8PCBleGNlcC5kd0hlbHBDb250ZXh0IDw8ICJcbiIKKyAgICAgICAgICAgICAgICIgIHB2UmVzZXJ2ZWQ6ICIgPDwgZXhjZXAucHZSZXNlcnZlZCA8PCAiXG4iCisgICAgICAgICAgICAgICAiICBwZm5EZWZlcnJlZEZpbGxJbjogIgorICAgICAgICAgICAgPDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXhjZXAucGZuRGVmZXJyZWRGaWxsSW4pIDw8ICJcbiIKKyAgICAgICAgICAgICAgICIgIHNjb2RlOiAiIDw8IGV4Y2VwLnNjb2RlIDw8ICdcbic7CisgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICAgICAgfQogCiAgICAgICBzdGQ6OnN0cmluZyBleHN0cihvc3Muc3RyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmN4eCBiL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5jeHgKaW5kZXggNjEzYWUwNi4uODdlYjkxYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmN4eAorKysgYi9Tb3VyY2UvY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXIuY3h4CkBAIC01LDkgKzUsMTMgQEAKICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL21lbW9yeT4KIAogI2luY2x1ZGUgImNtQ29tbWFuZEFyZ3VtZW50TGV4ZXIuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC00MCwxMCArNDQsMTAgQEAKICAgaWYgKHN0ci5lbXB0eSgpKSB7CiAgICAgcmV0dXJuICIiOwogICB9Ci0gIGNoYXIqIHN0VmFsID0gbmV3IGNoYXJbc3RyLnNpemUoKSArIDFdOwotICBzdHJjcHkoc3RWYWwsIHN0ci5jX3N0cigpKTsKLSAgdGhpcy0+VmFyaWFibGVzLnB1c2hfYmFjayhzdFZhbCk7Ci0gIHJldHVybiBzdFZhbDsKKyAgYXV0byBzdFZhbCA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KHN0ci5zaXplKCkgKyAxKTsKKyAgc3RyY3B5KHN0VmFsLmdldCgpLCBzdHIuY19zdHIoKSk7CisgIHRoaXMtPlZhcmlhYmxlcy5wdXNoX2JhY2soc3RkOjptb3ZlKHN0VmFsKSk7CisgIHJldHVybiB0aGlzLT5WYXJpYWJsZXMuYmFjaygpLmdldCgpOwogfQogCiBjb25zdCBjaGFyKiBjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlcjo6RXhwYW5kU3BlY2lhbFZhcmlhYmxlKApAQCAtNjYsOCArNzAsNyBAQAogICAgIHJldHVybiAiIjsKICAgfQogICBpZiAoc3RyY21wKGtleSwgIkNBQ0hFIikgPT0gMCkgewotICAgIGlmIChjb25zdCBzdGQ6OnN0cmluZyogYyA9Ci0gICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSh2YXIpKSB7CisgICAgaWYgKGNtUHJvcCBjID0gdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSh2YXIpKSB7CiAgICAgICBpZiAodGhpcy0+RXNjYXBlUXVvdGVzKSB7CiAgICAgICAgIHJldHVybiB0aGlzLT5BZGRTdHJpbmcoY21Fc2NhcGVRdW90ZXMoKmMpKTsKICAgICAgIH0KQEAgLTEzNiwxMSArMTM5LDExIEBACiAgICAgcmV0dXJuIGluMTsKICAgfQogICBzaXplX3QgbGVuID0gc3RybGVuKGluMSkgKyBzdHJsZW4oaW4yKSArIDE7Ci0gIGNoYXIqIG91dCA9IG5ldyBjaGFyW2xlbl07Ci0gIHN0cmNweShvdXQsIGluMSk7Ci0gIHN0cmNhdChvdXQsIGluMik7Ci0gIHRoaXMtPlZhcmlhYmxlcy5wdXNoX2JhY2sob3V0KTsKLSAgcmV0dXJuIG91dDsKKyAgYXV0byBvdXQgPSBjbTo6bWFrZV91bmlxdWU8Y2hhcltdPihsZW4pOworICBzdHJjcHkob3V0LmdldCgpLCBpbjEpOworICBzdHJjYXQob3V0LmdldCgpLCBpbjIpOworICB0aGlzLT5WYXJpYWJsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShvdXQpKTsKKyAgcmV0dXJuIHRoaXMtPlZhcmlhYmxlcy5iYWNrKCkuZ2V0KCk7CiB9CiAKIHZvaWQgY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXI6OkFsbG9jYXRlUGFyc2VyVHlwZSgKQEAgLTE1MywxMSArMTU2LDExIEBACiAgIGlmIChsZW4gPT0gMCkgewogICAgIHJldHVybjsKICAgfQotICBjaGFyKiBvdXQgPSBuZXcgY2hhcltsZW4gKyAxXTsKLSAgbWVtY3B5KG91dCwgc3RyLCBsZW4pOwotICBvdXRbbGVuXSA9IDA7Ci0gIHB0LT5zdHIgPSBvdXQ7Ci0gIHRoaXMtPlZhcmlhYmxlcy5wdXNoX2JhY2sob3V0KTsKKyAgYXV0byBvdXQgPSBjbTo6bWFrZV91bmlxdWU8Y2hhcltdPihsZW4gKyAxKTsKKyAgbWVtY3B5KG91dC5nZXQoKSwgc3RyLCBsZW4pOworICBvdXQuZ2V0KClbbGVuXSA9IDA7CisgIHB0LT5zdHIgPSBvdXQuZ2V0KCk7CisgIHRoaXMtPlZhcmlhYmxlcy5wdXNoX2JhY2soc3RkOjptb3ZlKG91dCkpOwogfQogCiBib29sIGNtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyOjpIYW5kbGVFc2NhcGVTeW1ib2woCkBAIC0yMzUsMTAgKzIzOCw3IEBACiAKIHZvaWQgY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXI6OkNsZWFudXBQYXJzZXIoKQogewotICBmb3IgKGNoYXIqIHZhciA6IHRoaXMtPlZhcmlhYmxlcykgewotICAgIGRlbGV0ZVtdIHZhcjsKLSAgfQotICB0aGlzLT5WYXJpYWJsZXMuZXJhc2UodGhpcy0+VmFyaWFibGVzLmJlZ2luKCksIHRoaXMtPlZhcmlhYmxlcy5lbmQoKSk7CisgIHRoaXMtPlZhcmlhYmxlcy5jbGVhcigpOwogfQogCiBpbnQgY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXI6OkxleElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heGxlbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5oIGIvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmgKaW5kZXggMjVlNjg5Mi4uYjQ2ZWRjYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmgKKysrIGIvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmgKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKQEAgLTY5LDcgKzcwLDcgQEAKICAgdm9pZCBDbGVhbnVwUGFyc2VyKCk7CiAgIHZvaWQgU2V0RXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIG1zZyk7CiAKLSAgc3RkOjp2ZWN0b3I8Y2hhcio+IFZhcmlhYmxlczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4+IFZhcmlhYmxlczsKICAgY29uc3QgY21NYWtlZmlsZSogTWFrZWZpbGU7CiAgIHN0ZDo6c3RyaW5nIFJlc3VsdDsKICAgc3RkOjpzdHJpbmcgRXJyb3JTdHJpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21tYW5kcy5jeHggYi9Tb3VyY2UvY21Db21tYW5kcy5jeHgKaW5kZXggODk2YjZhOS4uYzk0ZjEyOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29tbWFuZHMuY3h4CisrKyBiL1NvdXJjZS9jbUNvbW1hbmRzLmN4eApAQCAtOTIsNiArOTIsNyBAQAogIyAgaW5jbHVkZSAiY21BdXhTb3VyY2VEaXJlY3RvcnlDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUJ1aWxkTmFtZUNvbW1hbmQuaCIKICMgIGluY2x1ZGUgImNtQ01ha2VIb3N0U3lzdGVtSW5mb3JtYXRpb25Db21tYW5kLmgiCisjICBpbmNsdWRlICJjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUV4cG9ydENvbW1hbmQuaCIKICMgIGluY2x1ZGUgImNtRXhwb3J0TGlicmFyeURlcGVuZGVuY2llc0NvbW1hbmQuaCIKICMgIGluY2x1ZGUgImNtRkxUS1dyYXBVSUNvbW1hbmQuaCIKQEAgLTE5OCw2ICsxOTksNyBAQAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUNNYWtlSG9zdFN5c3RlbUluZm9ybWF0aW9uQ29tbWFuZCk7CisgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgiY21ha2VfbGFuZ3VhZ2UiLCBjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJsb2FkX2NhY2hlIiwgY21Mb2FkQ2FjaGVDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJyZW1vdmUiLCBjbVJlbW92ZUNvbW1hbmQpOwogICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoInZhcmlhYmxlX3dhdGNoIiwgY21WYXJpYWJsZVdhdGNoQ29tbWFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCAwMzNjYjYwLi44YWVlMjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtNDAsNyArNDEsNyBAQAogY29uc3QgY2hhciogY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlKGZlYXR1cmUsIGNvbmZpZyk7CisgIHJldHVybiB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEZlYXR1cmUoZmVhdHVyZSwgY29uZmlnKS0+Y19zdHIoKTsKIH0KIAogdm9pZCBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6QWRkTW9kdWxlRGVmaW5pdGlvbkZsYWcoCkBAIC03MywxMSArNzQsMTIgQEAKIHZvaWQgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkFwcGVuZEZvcnRyYW5Gb3JtYXRGbGFncygKICAgc3RkOjpzdHJpbmcmIGZsYWdzLCBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSkKIHsKLSAgY29uc3QgY2hhciogc3JjZm10ID0gc291cmNlLkdldFByb3BlcnR5KCJGb3J0cmFuX0ZPUk1BVCIpOworICBjb25zdCBzdGQ6OnN0cmluZyBzcmNmbXQgPSBzb3VyY2UuR2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX0ZPUk1BVCIpOwogICBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhbkZvcm1hdCBmb3JtYXQgPQogICAgIGNtT3V0cHV0Q29udmVydGVyOjpHZXRGb3J0cmFuRm9ybWF0KHNyY2ZtdCk7CiAgIGlmIChmb3JtYXQgPT0gY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5Gb3JtYXROb25lKSB7Ci0gICAgY29uc3QgY2hhciogdGd0Zm10ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKTsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgdGd0Zm10ID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX0ZPUk1BVCIpOwogICAgIGZvcm1hdCA9IGNtT3V0cHV0Q29udmVydGVyOjpHZXRGb3J0cmFuRm9ybWF0KHRndGZtdCk7CiAgIH0KICAgY29uc3QgY2hhciogdmFyID0gbnVsbHB0cjsKQEAgLTk3LDE4ICs5OSw0OSBAQAogICB9CiB9CiAKLXN0ZDo6c3RyaW5nIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXRGbGFncyhjb25zdCBzdGQ6OnN0cmluZyYgbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQordm9pZCBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6QXBwZW5kRm9ydHJhblByZXByb2Nlc3NGbGFncygKKyAgc3RkOjpzdHJpbmcmIGZsYWdzLCBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSkKIHsKLSAgYXV0byBpID0gdGhpcy0+Q29uZmlnc1tjb25maWddLkZsYWdzQnlMYW5ndWFnZS5maW5kKGwpOwotICBpZiAoaSA9PSB0aGlzLT5Db25maWdzW2NvbmZpZ10uRmxhZ3NCeUxhbmd1YWdlLmVuZCgpKSB7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIHNyY3BwID0gc291cmNlLkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9QUkVQUk9DRVNTIik7CisgIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2VzcyBwcmVwcm9jZXNzID0KKyAgICBjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhblByZXByb2Nlc3Moc3JjcHApOworICBpZiAocHJlcHJvY2VzcyA9PSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3M6OlVuc2V0KSB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIHRndHBwID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX1BSRVBST0NFU1MiKTsKKyAgICBwcmVwcm9jZXNzID0gY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5QcmVwcm9jZXNzKHRndHBwKTsKKyAgfQorICBjb25zdCBjaGFyKiB2YXIgPSBudWxscHRyOworICBzd2l0Y2ggKHByZXByb2Nlc3MpIHsKKyAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2Vzczo6TmVlZGVkOgorICAgICAgdmFyID0gIkNNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3M6Ok5vdE5lZWRlZDoKKyAgICAgIHZhciA9ICJDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKyAgaWYgKHZhcikgeworICAgIHRoaXMtPkxvY2FsQ29tbW9uR2VuZXJhdG9yLT5BcHBlbmRDb21waWxlT3B0aW9ucygKKyAgICAgIGZsYWdzLCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24odmFyKSk7CisgIH0KK30KKworc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEZsYWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpCit7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGtleSA9IGNvbmZpZyArIGFyY2g7CisKKyAgYXV0byBpID0gdGhpcy0+Q29uZmlnc1trZXldLkZsYWdzQnlMYW5ndWFnZS5maW5kKGwpOworICBpZiAoaSA9PSB0aGlzLT5Db25maWdzW2tleV0uRmxhZ3NCeUxhbmd1YWdlLmVuZCgpKSB7CiAgICAgc3RkOjpzdHJpbmcgZmxhZ3M7CiAKICAgICB0aGlzLT5Mb2NhbENvbW1vbkdlbmVyYXRvci0+R2V0VGFyZ2V0Q29tcGlsZUZsYWdzKHRoaXMtPkdlbmVyYXRvclRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywgbCwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLCBsLCBmbGFncywgYXJjaCk7CiAKICAgICBCeUxhbmd1YWdlTWFwOjp2YWx1ZV90eXBlIGVudHJ5KGwsIGZsYWdzKTsKLSAgICBpID0gdGhpcy0+Q29uZmlnc1tjb25maWddLkZsYWdzQnlMYW5ndWFnZS5pbnNlcnQoZW50cnkpLmZpcnN0OworICAgIGkgPSB0aGlzLT5Db25maWdzW2tleV0uRmxhZ3NCeUxhbmd1YWdlLmluc2VydChlbnRyeSkuZmlyc3Q7CiAgIH0KICAgcmV0dXJuIGktPnNlY29uZDsKIH0KQEAgLTIyMSw5ICsyNTQsOSBAQAogewogICBzdGQ6OnN0cmluZyBhaXhFeHBvcnRzOwogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPklzQUlYKCkpIHsKLSAgICBpZiAoY29uc3QgY2hhciogZXhwb3J0QWxsID0KKyAgICBpZiAoY21Qcm9wIGV4cG9ydEFsbCA9CiAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQUlYX0VYUE9SVF9BTExfU1lNQk9MUyIpKSB7Ci0gICAgICBpZiAoY21Jc09mZihleHBvcnRBbGwpKSB7CisgICAgICBpZiAoY21Jc09mZigqZXhwb3J0QWxsKSkgewogICAgICAgICBhaXhFeHBvcnRzID0gIi1uIjsKICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5oCmluZGV4IGI0MGEyZWQuLmMzYzNhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5oCkBAIC00NSwxMyArNDUsMTcgQEAKICAgdm9pZCBBcHBlbmRGb3J0cmFuRm9ybWF0RmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSk7CiAKKyAgdm9pZCBBcHBlbmRGb3J0cmFuUHJlcHJvY2Vzc0ZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU291cmNlRmlsZSBjb25zdCYgc291cmNlKTsKKwogICB2aXJ0dWFsIHZvaWQgQWRkSW5jbHVkZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgPSAwOwogCiAgIHZvaWQgQXBwZW5kT1NYVmVyRmxhZyhzdGQ6OnN0cmluZyYgZmxhZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSwgYm9vbCBzbyk7CiAKLSAgc3RkOjpzdHJpbmcgR2V0RmxhZ3MoY29uc3Qgc3RkOjpzdHJpbmcmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICBzdGQ6OnN0cmluZyBHZXRGbGFncyhjb25zdCBzdGQ6OnN0cmluZyYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggPSBzdGQ6OnN0cmluZygpKTsKICAgc3RkOjpzdHJpbmcgR2V0RGVmaW5lcyhjb25zdCBzdGQ6OnN0cmluZyYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIHN0ZDo6c3RyaW5nIEdldEluY2x1ZGVzKHN0ZDo6c3RyaW5nIGNvbnN0JiBsLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKICAgc3RkOjpzdHJpbmcgR2V0TWFuaWZlc3RzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5jeHggYi9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmN4eAppbmRleCAxMTU3MGQ2Li5mYmI5NWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmN4eAorKysgYi9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmN4eApAQCAtOSwxMCArOSw5IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNvbXB1dGVMaW5rRGVwZW5kcy5oIgotI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKQEAgLTIyLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjbU9yZGVyRGlyZWN0b3JpZXMuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtNTE0LDcgKzUxNCw3IEBACiAKICAgLy8gUmVzdG9yZSB0aGUgdGFyZ2V0IGxpbmsgdHlwZSBzbyB0aGUgY29ycmVjdCBzeXN0ZW0gcnVudGltZQogICAvLyBsaWJyYXJpZXMgYXJlIGZvdW5kLgotICBjb25zdCBjaGFyKiBsc3MgPSB0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX1NFQVJDSF9FTkRfU1RBVElDIik7CisgIGNtUHJvcCBsc3MgPSB0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX1NFQVJDSF9FTkRfU1RBVElDIik7CiAgIGlmIChjbUlzT24obHNzKSkgewogICAgIHRoaXMtPlNldEN1cnJlbnRMaW5rVHlwZShMaW5rU3RhdGljKTsKICAgfSBlbHNlIHsKQEAgLTU4NywzMyArNTg3LDE4IEBACiB9CiAKIHZvaWQgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpBZGRSdW50aW1lTGlua0xpYnJhcnkoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpCi17IC8vIEFkZCB0aGUgbGFuZyBydW50aW1lIGxpYnJhcnkgZmxhZ3MuIFRoaXMgaXMgYWN0aXZhdGVkIGJ5IHRoZSBwcmVzZW5jZQotICAvLyBvZiBhIGRlZmF1bHQgc2VsZWN0aW9uIHdoZXRoZXIgb3Igbm90IGl0IGlzIG92ZXJyaWRkZW4gYnkgYSBwcm9wZXJ0eS4KLSAgc3RkOjpzdHJpbmcgZGVmYXVsdFZhciA9Ci0gICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQiKTsKLSAgY29uc3QgY2hhciogbGFuZ1J1bnRpbWVMaWJyYXJ5RGVmYXVsdCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oZGVmYXVsdFZhcik7Ci0gIGlmIChsYW5nUnVudGltZUxpYnJhcnlEZWZhdWx0ICYmICpsYW5nUnVudGltZUxpYnJhcnlEZWZhdWx0KSB7Ci0gICAgY29uc3QgY2hhciogcnVudGltZUxpYnJhcnlWYWx1ZSA9Ci0gICAgICB0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfUlVOVElNRV9MSUJSQVJZIikpOwotICAgIGlmICghcnVudGltZUxpYnJhcnlWYWx1ZSkgewotICAgICAgcnVudGltZUxpYnJhcnlWYWx1ZSA9IGxhbmdSdW50aW1lTGlicmFyeURlZmF1bHQ7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgcnVudGltZUxpYnJhcnkgPQotICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgIHJ1bnRpbWVMaWJyYXJ5VmFsdWUsIHRoaXMtPlRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgdGhpcy0+Q29uZmlnLAotICAgICAgICB0aGlzLT5UYXJnZXQpKTsKLSAgICBpZiAoIXJ1bnRpbWVMaWJyYXJ5LmVtcHR5KCkpIHsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBydW50aW1lTGlua09wdGlvbnMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU18iICsKLSAgICAgICAgICAgIHJ1bnRpbWVMaWJyYXJ5KSkgewotICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlic1ZlYyA9IGNtRXhwYW5kZWRMaXN0KHJ1bnRpbWVMaW5rT3B0aW9ucyk7Ci0gICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBsaWJzVmVjKSB7Ci0gICAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkltcGxpY2l0TGlua0xpYnMsIGkpKSB7Ci0gICAgICAgICAgICB0aGlzLT5BZGRJdGVtKGksIG51bGxwdHIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQoreworICBzdGQ6OnN0cmluZyBjb25zdCYgcnVudGltZUxpYnJhcnkgPQorICAgIHRoaXMtPlRhcmdldC0+R2V0UnVudGltZUxpbmtMaWJyYXJ5KGxhbmcsIHRoaXMtPkNvbmZpZyk7CisgIGlmIChydW50aW1lTGlicmFyeS5lbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIGlmIChjb25zdCBjaGFyKiBydW50aW1lTGlua09wdGlvbnMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKKyAgICAgICAgIkNNQUtFXyIgKyBsYW5nICsgIl9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TXyIgKyBydW50aW1lTGlicmFyeSkpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlic1ZlYyA9IGNtRXhwYW5kZWRMaXN0KHJ1bnRpbWVMaW5rT3B0aW9ucyk7CisgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGxpYnNWZWMpIHsKKyAgICAgIGlmICghY206OmNvbnRhaW5zKHRoaXMtPkltcGxpY2l0TGlua0xpYnMsIGkpKSB7CisgICAgICAgIHRoaXMtPkFkZEl0ZW0oaSwgbnVsbHB0cik7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC02MjcsNyArNjEyLDcgQEAKICAgaWYgKGNvbnN0IGNoYXIqIGxpYnMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihsaWJWYXIpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpYnNWZWMgPSBjbUV4cGFuZGVkTGlzdChsaWJzKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogbGlic1ZlYykgewotICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkltcGxpY2l0TGlua0xpYnMsIGkpKSB7CisgICAgICBpZiAoIWNtOjpjb250YWlucyh0aGlzLT5JbXBsaWNpdExpbmtMaWJzLCBpKSkgewogICAgICAgICB0aGlzLT5BZGRJdGVtKGksIG51bGxwdHIpOwogICAgICAgfQogICAgIH0KQEAgLTg1NSw3ICs4NDAsNyBAQAogICB9CiAKICAgLy8gTG9va3VwIHRoZSBzdGFydGluZyBsaW5rIHR5cGUgZnJvbSB0aGUgdGFyZ2V0IChsaW5rZWQgc3RhdGljYWxseT8pLgotICBjb25zdCBjaGFyKiBsc3MgPSB0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMiKTsKKyAgY21Qcm9wIGxzcyA9IHRoaXMtPlRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfU0VBUkNIX1NUQVJUX1NUQVRJQyIpOwogICB0aGlzLT5TdGFydExpbmtUeXBlID0gY21Jc09uKGxzcykgPyBMaW5rU3RhdGljIDogTGlua1NoYXJlZDsKICAgdGhpcy0+Q3VycmVudExpbmtUeXBlID0gdGhpcy0+U3RhcnRMaW5rVHlwZTsKIH0KQEAgLTg2NCwzMSArODQ5LDMxIEBACiB7CiAgIC8vIEdldCBwb3NzaWJsZSBsaWJyYXJ5IG5hbWUgcHJlZml4ZXMuCiAgIGNtTWFrZWZpbGUqIG1mID0gdGhpcy0+TWFrZWZpbGU7Ci0gIHRoaXMtPkFkZExpbmtQcmVmaXgobWYtPkdldERlZmluaXRpb24oIkNNQUtFX1NUQVRJQ19MSUJSQVJZX1BSRUZJWCIpKTsKLSAgdGhpcy0+QWRkTGlua1ByZWZpeChtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfU0hBUkVEX0xJQlJBUllfUFJFRklYIikpOworICB0aGlzLT5BZGRMaW5rUHJlZml4KG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfU1RBVElDX0xJQlJBUllfUFJFRklYIikpOworICB0aGlzLT5BZGRMaW5rUHJlZml4KG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfU0hBUkVEX0xJQlJBUllfUFJFRklYIikpOwogCiAgIC8vIEltcG9ydCBsaWJyYXJ5IG5hbWVzIHNob3VsZCBiZSBtYXRjaGVkIGFuZCB0cmVhdGVkIGFzIHNoYXJlZAogICAvLyBsaWJyYXJpZXMgZm9yIHRoZSBwdXJwb3NlcyBvZiBsaW5raW5nLgotICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9JTVBPUlRfTElCUkFSWV9TVUZGSVgiKSwKKyAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0lNUE9SVF9MSUJSQVJZX1NVRkZJWCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtTaGFyZWQpOwotICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVgiKSwKKyAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX1NUQVRJQ19MSUJSQVJZX1NVRkZJWCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtTdGF0aWMpOwotICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVgiKSwKKyAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtTaGFyZWQpOwotICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9MSU5LX0xJQlJBUllfU1VGRklYIiksCisgIHRoaXMtPkFkZExpbmtFeHRlbnNpb24obWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9MSU5LX0xJQlJBUllfU1VGRklYIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1Vua25vd24pOwogICBpZiAoY29uc3QgY2hhciogbGlua1N1ZmZpeGVzID0KICAgICAgICAgbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0VYVFJBX0xJTktfRVhURU5TSU9OUyIpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtTdWZmaXhWZWMgPSBjbUV4cGFuZGVkTGlzdChsaW5rU3VmZml4ZXMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBsaW5rU3VmZml4VmVjKSB7Ci0gICAgICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKGkuY19zdHIoKSwgTGlua1Vua25vd24pOworICAgICAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihpLCBMaW5rVW5rbm93bik7CiAgICAgfQogICB9CiAgIGlmIChjb25zdCBjaGFyKiBzaGFyZWRTdWZmaXhlcyA9CiAgICAgICAgIG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9FWFRSQV9TSEFSRURfTElCUkFSWV9TVUZGSVhFUyIpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNoYXJlZFN1ZmZpeFZlYyA9IGNtRXhwYW5kZWRMaXN0KHNoYXJlZFN1ZmZpeGVzKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogc2hhcmVkU3VmZml4VmVjKSB7Ci0gICAgICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKGkuY19zdHIoKSwgTGlua1NoYXJlZCk7CisgICAgICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKGksIExpbmtTaGFyZWQpOwogICAgIH0KICAgfQogCkBAIC05MTgsNyArOTAzLDcgQEAKICNpZmRlZiBDTV9DT01QVVRFX0xJTktfSU5GT19ERUJVRwogICBmcHJpbnRmKHN0ZGVyciwgImFueSByZWdleCBbJXNdXG4iLCByZWdfYW55LmNfc3RyKCkpOwogI2VuZGlmCi0gIHRoaXMtPkV4dHJhY3RBbnlMaWJyYXJ5TmFtZS5jb21waWxlKHJlZ19hbnkuY19zdHIoKSk7CisgIHRoaXMtPkV4dHJhY3RBbnlMaWJyYXJ5TmFtZS5jb21waWxlKHJlZ19hbnkpOwogCiAgIC8vIENyZWF0ZSBhIHJlZ2V4IHRvIG1hdGNoIHN0YXRpYyBsaWJyYXJ5IG5hbWVzLgogICBpZiAoIXRoaXMtPlN0YXRpY0xpbmtFeHRlbnNpb25zLmVtcHR5KCkpIHsKQEAgLTkyNyw3ICs5MTIsNyBAQAogI2lmZGVmIENNX0NPTVBVVEVfTElOS19JTkZPX0RFQlVHCiAgICAgZnByaW50ZihzdGRlcnIsICJzdGF0aWMgcmVnZXggWyVzXVxuIiwgcmVnX3N0YXRpYy5jX3N0cigpKTsKICNlbmRpZgotICAgIHRoaXMtPkV4dHJhY3RTdGF0aWNMaWJyYXJ5TmFtZS5jb21waWxlKHJlZ19zdGF0aWMuY19zdHIoKSk7CisgICAgdGhpcy0+RXh0cmFjdFN0YXRpY0xpYnJhcnlOYW1lLmNvbXBpbGUocmVnX3N0YXRpYyk7CiAgIH0KIAogICAvLyBDcmVhdGUgYSByZWdleCB0byBtYXRjaCBzaGFyZWQgbGlicmFyeSBuYW1lcy4KQEAgLTkzOSwyMCArOTI0LDIxIEBACiAjaWZkZWYgQ01fQ09NUFVURV9MSU5LX0lORk9fREVCVUcKICAgICBmcHJpbnRmKHN0ZGVyciwgInNoYXJlZCByZWdleCBbJXNdXG4iLCByZWdfc2hhcmVkLmNfc3RyKCkpOwogI2VuZGlmCi0gICAgdGhpcy0+RXh0cmFjdFNoYXJlZExpYnJhcnlOYW1lLmNvbXBpbGUocmVnX3NoYXJlZC5jX3N0cigpKTsKKyAgICB0aGlzLT5FeHRyYWN0U2hhcmVkTGlicmFyeU5hbWUuY29tcGlsZShyZWdfc2hhcmVkKTsKICAgfQogfQogCi12b2lkIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6QWRkTGlua1ByZWZpeChjb25zdCBjaGFyKiBwKQordm9pZCBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246OkFkZExpbmtQcmVmaXgoc3RkOjpzdHJpbmcgY29uc3QmIHApCiB7Ci0gIGlmIChwICYmICpwKSB7CisgIGlmICghcC5lbXB0eSgpKSB7CiAgICAgdGhpcy0+TGlua1ByZWZpeGVzLmluc2VydChwKTsKICAgfQogfQogCi12b2lkIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6QWRkTGlua0V4dGVuc2lvbihjb25zdCBjaGFyKiBlLCBMaW5rVHlwZSB0eXBlKQordm9pZCBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246OkFkZExpbmtFeHRlbnNpb24oc3RkOjpzdHJpbmcgY29uc3QmIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rVHlwZSB0eXBlKQogewotICBpZiAoZSAmJiAqZSkgeworICBpZiAoIWUuZW1wdHkoKSkgewogICAgIGlmICh0eXBlID09IExpbmtTdGF0aWMpIHsKICAgICAgIHRoaXMtPlN0YXRpY0xpbmtFeHRlbnNpb25zLmVtcGxhY2VfYmFjayhlKTsKICAgICB9CkBAIC05NzcsNyArOTYzLDcgQEAKICAgICAvLyBTdG9yZSB0aGlzIGV4dGVuc2lvbiBjaG9pY2Ugd2l0aCB0aGUgIi4iIGVzY2FwZWQuCiAgICAgbGliZXh0ICs9ICJcXCI7CiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0gICAgbGliZXh0ICs9IHRoaXMtPk5vQ2FzZUV4cHJlc3Npb24oaS5jX3N0cigpKTsKKyAgICBsaWJleHQgKz0gdGhpcy0+Tm9DYXNlRXhwcmVzc2lvbihpKTsKICNlbHNlCiAgICAgbGliZXh0ICs9IGk7CiAjZW5kaWYKQEAgLTk5NSwyMCArOTgxLDE5IEBACiAgIHJldHVybiBsaWJleHQ7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6Tm9DYXNlRXhwcmVzc2lvbihjb25zdCBjaGFyKiBzdHIpCitzdGQ6OnN0cmluZyBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Ok5vQ2FzZUV4cHJlc3Npb24oc3RkOjpzdHJpbmcgY29uc3QmIHN0cikKIHsKICAgc3RkOjpzdHJpbmcgcmV0OwotICBjb25zdCBjaGFyKiBzID0gc3RyOwotICB3aGlsZSAoKnMpIHsKLSAgICBpZiAoKnMgPT0gJy4nKSB7Ci0gICAgICByZXQgKz0gKnM7CisgIHJldC5yZXNlcnZlKHN0ci5zaXplKCkgKiA0KTsKKyAgZm9yIChjaGFyIGMgOiBzdHIpIHsKKyAgICBpZiAoYyA9PSAnLicpIHsKKyAgICAgIHJldCArPSBjOwogICAgIH0gZWxzZSB7Ci0gICAgICByZXQgKz0gIlsiOwotICAgICAgcmV0ICs9IHN0YXRpY19jYXN0PGNoYXI+KHRvbG93ZXIoKnMpKTsKLSAgICAgIHJldCArPSBzdGF0aWNfY2FzdDxjaGFyPih0b3VwcGVyKCpzKSk7Ci0gICAgICByZXQgKz0gIl0iOworICAgICAgcmV0ICs9ICdbJzsKKyAgICAgIHJldCArPSBzdGF0aWNfY2FzdDxjaGFyPih0b2xvd2VyKGMpKTsKKyAgICAgIHJldCArPSBzdGF0aWNfY2FzdDxjaGFyPih0b3VwcGVyKGMpKTsKKyAgICAgIHJldCArPSAnXSc7CiAgICAgfQotICAgIHMrKzsKICAgfQogICByZXR1cm4gcmV0OwogfQpAQCAtMTA2Myw4ICsxMDQ4LDggQEAKICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSAyLjQgaW5jbHVkZSB0aGUgaXRlbSdzIGRpcmVjdG9yeSBpbgogICAvLyB0aGUgbGlua2VyIHNlYXJjaCBwYXRoLgogICBpZiAodGhpcy0+T2xkTGlua0Rpck1vZGUgJiYgIXRhcmdldC0+SXNGcmFtZXdvcmtPbkFwcGxlKCkgJiYKLSAgICAgICFjbUNvbnRhaW5zKHRoaXMtPk9sZExpbmtEaXJNYXNrLAotICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGl0ZW0uVmFsdWUpKSkgeworICAgICAgIWNtOjpjb250YWlucyh0aGlzLT5PbGRMaW5rRGlyTWFzaywKKyAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGl0ZW0uVmFsdWUpKSkgewogICAgIHRoaXMtPk9sZExpbmtEaXJJdGVtcy5wdXNoX2JhY2soaXRlbS5WYWx1ZSk7CiAgIH0KIApAQCAtMTExNyw4ICsxMTAyLDggQEAKICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSAyLjQgaW5jbHVkZSB0aGUgaXRlbSdzIGRpcmVjdG9yeSBpbgogICAvLyB0aGUgbGlua2VyIHNlYXJjaCBwYXRoLgogICBpZiAodGhpcy0+T2xkTGlua0Rpck1vZGUgJiYKLSAgICAgICFjbUNvbnRhaW5zKHRoaXMtPk9sZExpbmtEaXJNYXNrLAotICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGl0ZW0uVmFsdWUpKSkgeworICAgICAgIWNtOjpjb250YWlucyh0aGlzLT5PbGRMaW5rRGlyTWFzaywKKyAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGl0ZW0uVmFsdWUpKSkgewogICAgIHRoaXMtPk9sZExpbmtEaXJJdGVtcy5wdXNoX2JhY2soaXRlbS5WYWx1ZSk7CiAgIH0KIApAQCAtMTEzNyw3ICsxMTIyLDcgQEAKIAogICAvLyBDaGVjayBpZiB0aGlzIGl0ZW0gaXMgaW4gYW4gaW1wbGljaXQgbGluayBkaXJlY3RvcnkuCiAgIHN0ZDo6c3RyaW5nIGRpciA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChpdGVtKTsKLSAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkltcGxpY2l0TGlua0RpcnMsIGRpcikpIHsKKyAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+SW1wbGljaXRMaW5rRGlycywgZGlyKSkgewogICAgIC8vIE9ubHkgbGlicmFyaWVzIGluIGltcGxpY2l0IGxpbmsgZGlyZWN0b3JpZXMgYXJlIGNvbnZlcnRlZCB0bwogICAgIC8vIHBhdGhsZXNzIGl0ZW1zLgogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMDAsNyArMTE4NSw4IEBACiAgICAgLy8gQ01QMDAwMyBzbyBwdXQgaXQgaW4gT2xkVXNlckZsYWdJdGVtcywgaWYgaXQgaXMgbm90IGEgLWwKICAgICAvLyBvciAtV2wsLWwgKC1mcmFtZXdvcmsgLXB0aHJlYWQpLCB0aGVuIGFsbG93IGl0IHdpdGhvdXQgYQogICAgIC8vIENNUDAwMDMgYXMgLUwgd2lsbCBub3QgYWZmZWN0IHRob3NlIG90aGVyIGxpbmtlciBmbGFncwotICAgIGlmIChpdGVtLlZhbHVlLmZpbmQoIi1sIikgPT0gMCB8fCBpdGVtLlZhbHVlLmZpbmQoIi1XbCwtbCIpID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGl0ZW0uVmFsdWUsICItbCIpIHx8CisgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChpdGVtLlZhbHVlLCAiLVdsLC1sIikpIHsKICAgICAgIC8vIFRoaXMgaXMgYSBsaW5rZXIgb3B0aW9uIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLgogICAgICAgdGhpcy0+T2xkVXNlckZsYWdJdGVtcy5wdXNoX2JhY2soaXRlbS5WYWx1ZSk7CiAgICAgfQpAQCAtMTM0NCwxOCArMTMzMCwxMyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW1wbGljaXREaXJWZWM7CiAKICAgLy8gR2V0IHBsYXRmb3JtLXdpZGUgaW1wbGljaXQgZGlyZWN0b3JpZXMuCi0gIGlmIChjb25zdCBjaGFyKiBpbXBsaWNpdExpbmtzID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oCi0gICAgICAgICJDTUFLRV9QTEFURk9STV9JTVBMSUNJVF9MSU5LX0ZSQU1FV09SS19ESVJFQ1RPUklFUyIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGltcGxpY2l0TGlua3MsIGltcGxpY2l0RGlyVmVjKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgKKyAgICAiQ01BS0VfUExBVEZPUk1fSU1QTElDSVRfTElOS19GUkFNRVdPUktfRElSRUNUT1JJRVMiLCBpbXBsaWNpdERpclZlYyk7CiAKICAgLy8gR2V0IGxhbmd1YWdlLXNwZWNpZmljIGltcGxpY2l0IGRpcmVjdG9yaWVzLgogICBzdGQ6OnN0cmluZyBpbXBsaWNpdERpclZhciA9IGNtU3RyQ2F0KAogICAgICJDTUFLRV8iLCB0aGlzLT5MaW5rTGFuZ3VhZ2UsICJfSU1QTElDSVRfTElOS19GUkFNRVdPUktfRElSRUNUT1JJRVMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGltcGxpY2l0RGlycyA9Ci0gICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGltcGxpY2l0RGlyVmFyKSkgewotICAgIGNtRXhwYW5kTGlzdChpbXBsaWNpdERpcnMsIGltcGxpY2l0RGlyVmVjKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdChpbXBsaWNpdERpclZhciwgaW1wbGljaXREaXJWZWMpOwogCiAgIHRoaXMtPkZyYW1ld29ya1BhdGhzRW1taXR0ZWQuaW5zZXJ0KGltcGxpY2l0RGlyVmVjLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0RGlyVmVjLmVuZCgpKTsKQEAgLTE0MzksNyArMTQyMCw2IEBACiAgICAgfQogICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgogICAgICAgLy8gT0xEIGJlaGF2aW9yIGRvZXMgbm90IHdhcm4uCi0gICAgICBicmVhazsKICAgICBjYXNlIGNtUG9saWNpZXM6Ok5FVzoKICAgICAgIC8vIE5FVyBiZWhhdmlvciB3aWxsIG5vdCBnZXQgaGVyZS4KICAgICAgIGJyZWFrOwpAQCAtMTU2OSwxMCArMTU0OSw4IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbXBsaWNpdERpclZlYzsKIAogICAvLyBHZXQgcGxhdGZvcm0td2lkZSBpbXBsaWNpdCBkaXJlY3Rvcmllcy4KLSAgaWYgKGNvbnN0IGNoYXIqIGltcGxpY2l0TGlua3MgPSAodGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oCi0gICAgICAgICJDTUFLRV9QTEFURk9STV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIikpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGltcGxpY2l0TGlua3MsIGltcGxpY2l0RGlyVmVjKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfUExBVEZPUk1fSU1QTElDSVRfTElOS19ESVJFQ1RPUklFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0RGlyVmVjKTsKIAogICAvLyBBcHBlbmQgbGlicmFyeSBhcmNoaXRlY3R1cmUgdG8gYWxsIGltcGxpY2l0IHBsYXRmb3JtIGRpcmVjdG9yaWVzCiAgIC8vIGFuZCBhZGQgdGhlbSB0byB0aGUgc2V0CkBAIC0xNTg2LDEwICsxNTY0LDcgQEAKICAgLy8gR2V0IGxhbmd1YWdlLXNwZWNpZmljIGltcGxpY2l0IGRpcmVjdG9yaWVzLgogICBzdGQ6OnN0cmluZyBpbXBsaWNpdERpclZhciA9CiAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxpbmtMYW5ndWFnZSwgIl9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIik7Ci0gIGlmIChjb25zdCBjaGFyKiBpbXBsaWNpdERpcnMgPQotICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihpbXBsaWNpdERpclZhcikpIHsKLSAgICBjbUV4cGFuZExpc3QoaW1wbGljaXREaXJzLCBpbXBsaWNpdERpclZlYyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoaW1wbGljaXREaXJWYXIsIGltcGxpY2l0RGlyVmVjKTsKIAogICAvLyBTdG9yZSBpbXBsaWNpdCBsaW5rIGRpcmVjdG9yaWVzLgogICB0aGlzLT5JbXBsaWNpdExpbmtEaXJzLmluc2VydChpbXBsaWNpdERpclZlYy5iZWdpbigpLCBpbXBsaWNpdERpclZlYy5lbmQoKSk7CkBAIC0xNTk4LDEwICsxNTczLDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGltcGxpY2l0TGliVmVjOwogICBzdGQ6OnN0cmluZyBpbXBsaWNpdExpYlZhciA9CiAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxpbmtMYW5ndWFnZSwgIl9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyIpOwotICBpZiAoY29uc3QgY2hhciogaW1wbGljaXRMaWJzID0KLSAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oaW1wbGljaXRMaWJWYXIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGltcGxpY2l0TGlicywgaW1wbGljaXRMaWJWZWMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KGltcGxpY2l0TGliVmFyLCBpbXBsaWNpdExpYlZlYyk7CiAKICAgLy8gU3RvcmUgaW1wbGljaXQgbGluayBsaWJyYXJpZXMuCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGl0ZW0gOiBpbXBsaWNpdExpYlZlYykgewpAQCAtMTYxMywxMCArMTU4NSw4IEBACiAgIH0KIAogICAvLyBHZXQgcGxhdGZvcm0gc3BlY2lmaWMgcnBhdGggbGluayBkaXJlY3RvcmllcwotICBpZiAoY29uc3QgY2hhciogcnBhdGhEaXJzID0KLSAgICAgICAgKHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9QTEFURk9STV9SVU5USU1FX1BBVEgiKSkpIHsKLSAgICBjbUV4cGFuZExpc3QocnBhdGhEaXJzLCB0aGlzLT5SdW50aW1lTGlua0RpcnMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9QTEFURk9STV9SVU5USU1FX1BBVEgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5SdW50aW1lTGlua0RpcnMpOwogfQogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmCkBAIC0xNzE3LDcgKzE2ODcsNyBAQAogICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNtQ0xJX0V4cGFuZExpc3RVbmlxdWUoY29uc3QgY2hhciogc3RyLAorc3RhdGljIHZvaWQgY21DTElfRXhwYW5kTGlzdFVuaXF1ZShzdGQ6OnN0cmluZyBjb25zdCYgc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBlbWl0dGVkKQogewpAQCAtMTc2NCw3ICsxNzM0LDcgQEAKICAgaWYgKHVzZV9pbnN0YWxsX3JwYXRoKSB7CiAgICAgc3RkOjpzdHJpbmcgaW5zdGFsbF9ycGF0aDsKICAgICB0aGlzLT5UYXJnZXQtPkdldEluc3RhbGxSUEFUSCh0aGlzLT5Db25maWcsIGluc3RhbGxfcnBhdGgpOwotICAgIGNtQ0xJX0V4cGFuZExpc3RVbmlxdWUoaW5zdGFsbF9ycGF0aC5jX3N0cigpLCBydW50aW1lRGlycywgZW1pdHRlZCk7CisgICAgY21DTElfRXhwYW5kTGlzdFVuaXF1ZShpbnN0YWxsX3JwYXRoLCBydW50aW1lRGlycywgZW1pdHRlZCk7CiAgIH0KICAgaWYgKHVzZV9idWlsZF9ycGF0aCkgewogICAgIC8vIEFkZCBkaXJlY3RvcmllcyBleHBsaWNpdGx5IHNwZWNpZmllZCBieSB1c2VyCkBAIC0xNzcyLDcgKzE3NDIsNyBAQAogICAgIGlmICh0aGlzLT5UYXJnZXQtPkdldEJ1aWxkUlBBVEgodGhpcy0+Q29uZmlnLCBidWlsZF9ycGF0aCkpIHsKICAgICAgIC8vIFRoaXMgd2lsbCBub3QgcmVzb2x2ZSBlbnRyaWVzIHRvIHVzZSAkT1JJR0lOLCB0aGUgdXNlciBpcyBleHBlY3RlZCB0bwogICAgICAgLy8gZG8gdGhhdCBpZiBuZWNlc3NhcnkuCi0gICAgICBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKGJ1aWxkX3JwYXRoLmNfc3RyKCksIHJ1bnRpbWVEaXJzLCBlbWl0dGVkKTsKKyAgICAgIGNtQ0xJX0V4cGFuZExpc3RVbmlxdWUoYnVpbGRfcnBhdGgsIHJ1bnRpbWVEaXJzLCBlbWl0dGVkKTsKICAgICB9CiAgIH0KICAgaWYgKHVzZV9idWlsZF9ycGF0aCB8fCB1c2VfbGlua19ycGF0aCkgewpAQCAtMTc5NiwxMSArMTc2NiwxMSBAQAogICAgICAgLy8gc3VwcG9ydCBvciBpZiB1c2luZyB0aGUgbGluayBwYXRoIGFzIGFuIHJwYXRoLgogICAgICAgaWYgKHVzZV9idWlsZF9ycGF0aCkgewogICAgICAgICBzdGQ6OnN0cmluZyBkID0gcmk7Ci0gICAgICAgIGlmICghcm9vdFBhdGguZW1wdHkoKSAmJiBkLmZpbmQocm9vdFBhdGgpID09IDApIHsKLSAgICAgICAgICBkID0gZC5zdWJzdHIocm9vdFBhdGguc2l6ZSgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGFnZVBhdGggJiYgKnN0YWdlUGF0aCAmJiBkLmZpbmQoc3RhZ2VQYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgc3VmZml4ID0gZC5zdWJzdHIoc3RybGVuKHN0YWdlUGF0aCkpOwotICAgICAgICAgIGQgPSBjbVN0ckNhdChpbnN0YWxsUHJlZml4LCAnLycsIHN1ZmZpeCk7CisgICAgICAgIGlmICghcm9vdFBhdGguZW1wdHkoKSAmJiBjbUhhc1ByZWZpeChkLCByb290UGF0aCkpIHsKKyAgICAgICAgICBkLmVyYXNlKDAsIHJvb3RQYXRoLnNpemUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhZ2VQYXRoICYmICpzdGFnZVBhdGggJiYgY21IYXNQcmVmaXgoZCwgc3RhZ2VQYXRoKSkgeworICAgICAgICAgIGQuZXJhc2UoMCwgc3RybGVuKHN0YWdlUGF0aCkpOworICAgICAgICAgIGQgPSBjbVN0ckNhdChpbnN0YWxsUHJlZml4LCAnLycsIGQpOwogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKGQpOwogICAgICAgICB9IGVsc2UgaWYgKHVzZV9yZWxhdGl2ZV9idWlsZF9ycGF0aCkgewogICAgICAgICAgIC8vIElmIGV4cGFuc2lvbiBvZiB0aGUgJE9SSUdJTiB0b2tlbiBpcyBzdXBwb3J0ZWQgYW5kIHBlcm1pdHRlZCBwZXIKQEAgLTE4MjcsMTEgKzE3OTcsMTEgQEAKICAgICAgICAgICAgICFjbVN5c3RlbVRvb2xzOjpJc1N1YkRpcmVjdG9yeShyaSwgdG9wU291cmNlRGlyKSAmJgogICAgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OklzU3ViRGlyZWN0b3J5KHJpLCB0b3BCaW5hcnlEaXIpKSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgZCA9IHJpOwotICAgICAgICAgIGlmICghcm9vdFBhdGguZW1wdHkoKSAmJiBkLmZpbmQocm9vdFBhdGgpID09IDApIHsKLSAgICAgICAgICAgIGQgPSBkLnN1YnN0cihyb290UGF0aC5zaXplKCkpOwotICAgICAgICAgIH0gZWxzZSBpZiAoc3RhZ2VQYXRoICYmICpzdGFnZVBhdGggJiYgZC5maW5kKHN0YWdlUGF0aCkgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3VmZml4ID0gZC5zdWJzdHIoc3RybGVuKHN0YWdlUGF0aCkpOwotICAgICAgICAgICAgZCA9IGNtU3RyQ2F0KGluc3RhbGxQcmVmaXgsICcvJywgc3VmZml4KTsKKyAgICAgICAgICBpZiAoIXJvb3RQYXRoLmVtcHR5KCkgJiYgY21IYXNQcmVmaXgoZCwgcm9vdFBhdGgpKSB7CisgICAgICAgICAgICBkLmVyYXNlKDAsIHJvb3RQYXRoLnNpemUoKSk7CisgICAgICAgICAgfSBlbHNlIGlmIChzdGFnZVBhdGggJiYgKnN0YWdlUGF0aCAmJiBjbUhhc1ByZWZpeChkLCBzdGFnZVBhdGgpKSB7CisgICAgICAgICAgICBkLmVyYXNlKDAsIHN0cmxlbihzdGFnZVBhdGgpKTsKKyAgICAgICAgICAgIGQgPSBjbVN0ckNhdChpbnN0YWxsUHJlZml4LCAnLycsIGQpOwogICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZCk7CiAgICAgICAgICAgfQogICAgICAgICAgIGlmIChlbWl0dGVkLmluc2VydChkKS5zZWNvbmQpIHsKQEAgLTE4NTIsOCArMTgyMiw4IEBACiAgICAgICAgICJDTUFLRV8iICsgbGkgKyAiX1VTRV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTX0lOX1JVTlRJTUVfUEFUSCI7CiAgICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24odXNlVmFyKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBkaXJWYXIgPSAiQ01BS0VfIiArIGxpICsgIl9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIjsKLSAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGRpcnMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihkaXJWYXIpKSB7Ci0gICAgICAgICAgY21DTElfRXhwYW5kTGlzdFVuaXF1ZShkaXJzLCBydW50aW1lRGlycywgZW1pdHRlZCk7CisgICAgICAgIGlmIChjbVByb3AgZGlycyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoZGlyVmFyKSkgeworICAgICAgICAgIGNtQ0xJX0V4cGFuZExpc3RVbmlxdWUoKmRpcnMsIHJ1bnRpbWVEaXJzLCBlbWl0dGVkKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTE4NjEsNyArMTgzMSw3IEBACiAKICAgLy8gQWRkIHJ1bnRpbWUgcGF0aHMgcmVxdWlyZWQgYnkgdGhlIHBsYXRmb3JtIHRvIGFsd2F5cyBiZQogICAvLyBwcmVzZW50LiAgVGhpcyBpcyBkb25lIGV2ZW4gd2hlbiBza2lwcGluZyBycGF0aCBzdXBwb3J0LgotICBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKHRoaXMtPlJ1bnRpbWVBbHdheXMuY19zdHIoKSwgcnVudGltZURpcnMsIGVtaXR0ZWQpOworICBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKHRoaXMtPlJ1bnRpbWVBbHdheXMsIHJ1bnRpbWVEaXJzLCBlbWl0dGVkKTsKIH0KIAogc3RkOjpzdHJpbmcgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpHZXRSUGF0aFN0cmluZyhib29sIGZvcl9pbnN0YWxsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oCmluZGV4IGU1MGQzNjkuLjU0NGZmMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgKQEAgLTE0NCwxMSArMTQ0LDExIEBACiAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBFeHRyYWN0U2hhcmVkTGlicmFyeU5hbWU7CiAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBFeHRyYWN0QW55TGlicmFyeU5hbWU7CiAgIHN0ZDo6c3RyaW5nIFNoYXJlZFJlZ2V4U3RyaW5nOwotICB2b2lkIEFkZExpbmtQcmVmaXgoY29uc3QgY2hhciogcCk7Ci0gIHZvaWQgQWRkTGlua0V4dGVuc2lvbihjb25zdCBjaGFyKiBlLCBMaW5rVHlwZSB0eXBlKTsKKyAgdm9pZCBBZGRMaW5rUHJlZml4KHN0ZDo6c3RyaW5nIGNvbnN0JiBwKTsKKyAgdm9pZCBBZGRMaW5rRXh0ZW5zaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBlLCBMaW5rVHlwZSB0eXBlKTsKICAgc3RkOjpzdHJpbmcgQ3JlYXRlRXh0ZW5zaW9uUmVnZXgoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBleHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rVHlwZSB0eXBlKTsKLSAgc3RkOjpzdHJpbmcgTm9DYXNlRXhwcmVzc2lvbihjb25zdCBjaGFyKiBzdHIpOworICBzdGQ6OnN0cmluZyBOb0Nhc2VFeHByZXNzaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpOwogCiAgIC8vIEhhbmRsaW5nIG9mIGxpbmsgaXRlbXMuCiAgIHZvaWQgQWRkVGFyZ2V0SXRlbShCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGl0ZW0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21wdXRlVGFyZ2V0RGVwZW5kcy5jeHggYi9Tb3VyY2UvY21Db21wdXRlVGFyZ2V0RGVwZW5kcy5jeHgKaW5kZXggYTk4YTYwOC4uNmI0ZDExMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29tcHV0ZVRhcmdldERlcGVuZHMuY3h4CisrKyBiL1NvdXJjZS9jbUNvbXB1dGVUYXJnZXREZXBlbmRzLmN4eApAQCAtMTk2LDggKzE5NiwyMiBAQAogICAgIHN0ZDo6c2V0PGNtTGlua0l0ZW0+IGVtaXR0ZWQ7CiAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQotICAgICAgZGVwZW5kZXItPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKCk7CisgICAgICBkZXBlbmRlci0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdCA6IGNvbmZpZ3MpIHsKKyAgICAgIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0gZGVwZW5kZXItPkdldExpbmtJbXBsZW1lbnRhdGlvbihpdCk7CisKKyAgICAgIC8vIEEgdGFyZ2V0IHNob3VsZCBub3QgZGVwZW5kIG9uIGl0c2VsZi4KKyAgICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIGZhbHNlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKKyAgICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIHRydWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOworICAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CisgICAgICAgIC8vIERvbid0IGVtaXQgdGhlIHNhbWUgbGlicmFyeSB0d2ljZSBmb3IgdGhpcyB0YXJnZXQuCisgICAgICAgIGlmIChlbWl0dGVkLmluc2VydChsaWIpLnNlY29uZCkgeworICAgICAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgbGliLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgdGhpcy0+QWRkSW50ZXJmYWNlRGVwZW5kcyhkZXBlbmRlcl9pbmRleCwgbGliLCBpdCwgZW1pdHRlZCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gQWRkIGRlcGVuZGVuY2llcyBvbiBvYmplY3QgbGlicmFyaWVzIG5vdCBvdGhlcndpc2UgaGFuZGxlZCBhYm92ZS4KICAgICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IG9iamVjdEZpbGVzOwogICAgICAgZGVwZW5kZXItPkdldEV4dGVybmFsT2JqZWN0cyhvYmplY3RGaWxlcywgaXQpOwogICAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG8gOiBvYmplY3RGaWxlcykgewpAQCAtMjIyLDE5ICsyMzYsNiBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQotCi0gICAgICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogaW1wbCA9IGRlcGVuZGVyLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oaXQpOwotCi0gICAgICAvLyBBIHRhcmdldCBzaG91bGQgbm90IGRlcGVuZCBvbiBpdHNlbGYuCi0gICAgICBlbWl0dGVkLmluc2VydChjbUxpbmtJdGVtKGRlcGVuZGVyLCBmYWxzZSwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7Ci0gICAgICBlbWl0dGVkLmluc2VydChjbUxpbmtJdGVtKGRlcGVuZGVyLCB0cnVlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKLSAgICAgIGZvciAoY21MaW5rSW1wbEl0ZW0gY29uc3QmIGxpYiA6IGltcGwtPkxpYnJhcmllcykgewotICAgICAgICAvLyBEb24ndCBlbWl0IHRoZSBzYW1lIGxpYnJhcnkgdHdpY2UgZm9yIHRoaXMgdGFyZ2V0LgotICAgICAgICBpZiAoZW1pdHRlZC5pbnNlcnQobGliKS5zZWNvbmQpIHsKLSAgICAgICAgICB0aGlzLT5BZGRUYXJnZXREZXBlbmQoZGVwZW5kZXJfaW5kZXgsIGxpYiwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICAgIHRoaXMtPkFkZEludGVyZmFjZURlcGVuZHMoZGVwZW5kZXJfaW5kZXgsIGxpYiwgaXQsIGVtaXR0ZWQpOwotICAgICAgICB9Ci0gICAgICB9CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbmRpdGlvbkV2YWx1YXRvci5jeHggYi9Tb3VyY2UvY21Db25kaXRpb25FdmFsdWF0b3IuY3h4CmluZGV4IGZkYTY4N2YuLjdhM2EzZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbmRpdGlvbkV2YWx1YXRvci5jeHgKKysrIGIvU291cmNlL2NtQ29uZGl0aW9uRXZhbHVhdG9yLmN4eApAQCAtMTMsNyArMTMsNiBAQAogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC00OTQsMTIgKzQ5MywxMiBAQAogICAgICAgaWYgKHRoaXMtPklzS2V5d29yZChrZXlERUZJTkVELCAqYXJnKSAmJiBhcmdQMSAhPSBuZXdBcmdzLmVuZCgpKSB7CiAgICAgICAgIHNpemVfdCBhcmdQMWxlbiA9IGFyZ1AxLT5HZXRWYWx1ZSgpLnNpemUoKTsKICAgICAgICAgYm9vbCBiZGVmID0gZmFsc2U7Ci0gICAgICAgIGlmIChhcmdQMWxlbiA+IDQgJiYgYXJnUDEtPkdldFZhbHVlKCkuc3Vic3RyKDAsIDQpID09ICJFTlZ7IiAmJgorICAgICAgICBpZiAoYXJnUDFsZW4gPiA0ICYmIGNtSGFzTGl0ZXJhbFByZWZpeChhcmdQMS0+R2V0VmFsdWUoKSwgIkVOVnsiKSAmJgogICAgICAgICAgICAgYXJnUDEtPkdldFZhbHVlKCkub3BlcmF0b3JbXShhcmdQMWxlbiAtIDEpID09ICd9JykgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIGVudiA9IGFyZ1AxLT5HZXRWYWx1ZSgpLnN1YnN0cig0LCBhcmdQMWxlbiAtIDUpOwogICAgICAgICAgIGJkZWYgPSBjbVN5c3RlbVRvb2xzOjpIYXNFbnYoZW52KTsKICAgICAgICAgfSBlbHNlIGlmIChhcmdQMWxlbiA+IDYgJiYKLSAgICAgICAgICAgICAgICAgICBhcmdQMS0+R2V0VmFsdWUoKS5zdWJzdHIoMCwgNikgPT0gIkNBQ0hFeyIgJiYKKyAgICAgICAgICAgICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnUDEtPkdldFZhbHVlKCksICJDQUNIRXsiKSAmJgogICAgICAgICAgICAgICAgICAgIGFyZ1AxLT5HZXRWYWx1ZSgpLm9wZXJhdG9yW10oYXJnUDFsZW4gLSAxKSA9PSAnfScpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBjYWNoZSA9IGFyZ1AxLT5HZXRWYWx1ZSgpLnN1YnN0cig2LCBhcmdQMWxlbiAtIDcpOwogICAgICAgICAgIGJkZWYgPQpAQCAtNjczLDcgKzY3Miw3IEBACiAgICAgICAgICAgaWYgKGRlZjIpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaXN0ID0gY21FeHBhbmRlZExpc3QoZGVmMiwgdHJ1ZSk7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IGNtQ29udGFpbnMobGlzdCwgZGVmKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNtOjpjb250YWlucyhsaXN0LCBkZWYpOwogICAgICAgICAgIH0KIAogICAgICAgICAgIHRoaXMtPkhhbmRsZUJpbmFyeU9wKHJlc3VsdCwgcmVkdWNpYmxlLCBhcmcsIG5ld0FyZ3MsIGFyZ1AxLCBhcmdQMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db25maWd1cmUuY21ha2UuaC5pbiBiL1NvdXJjZS9jbUNvbmZpZ3VyZS5jbWFrZS5oLmluCmluZGV4IDRkZTFjNWQuLjk3ZTc4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbmZpZ3VyZS5jbWFrZS5oLmluCisrKyBiL1NvdXJjZS9jbUNvbmZpZ3VyZS5jbWFrZS5oLmluCkBAIC0xOSw3ICsxOSw2IEBACiAjY21ha2VkZWZpbmUgSEFWRV9VTlNFVEVOVgogI2NtYWtlZGVmaW5lIENNQUtFX1VTRV9FTEZfUEFSU0VSCiAjY21ha2VkZWZpbmUgQ01BS0VfVVNFX01BQ0hfUEFSU0VSCi0jY21ha2VkZWZpbmUgQ01ha2VfSEFWRV9DWFhfTUFLRV9VTklRVUUKICNkZWZpbmUgQ01ha2VfREVGQVVMVF9SRUNVUlNJT05fTElNSVQgQENNYWtlX0RFRkFVTFRfUkVDVVJTSU9OX0xJTUlUQAogI2RlZmluZSBDTUFLRV9CSU5fRElSICIvQENNQUtFX0JJTl9ESVJAIgogI2RlZmluZSBDTUFLRV9EQVRBX0RJUiAiL0BDTUFLRV9EQVRBX0RJUkAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db25maWd1cmVGaWxlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21Db25maWd1cmVGaWxlQ29tbWFuZC5jeHgKaW5kZXggODc2NzM4Ni4uNjgzMjJjYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29uZmlndXJlRmlsZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUNvbmZpZ3VyZUZpbGVDb21tYW5kLmN4eApAQCAtMiw2ICsyLDExIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUNvbmZpZ3VyZUZpbGVDb21tYW5kLmgiCiAKKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKQEAgLTU1LDYgKzYwLDE5IEBACiAgIH0KICAgYm9vbCBjb3B5T25seSA9IGZhbHNlOwogICBib29sIGVzY2FwZVF1b3RlcyA9IGZhbHNlOworICBib29sIHVzZV9zb3VyY2VfcGVybWlzc2lvbnMgPSB0cnVlOworCisgIHN0YXRpYyBzdGQ6OnNldDxjbTo6c3RyaW5nX3ZpZXc+IG5vb3BPcHRpb25zID0geworICAgIC8qIExlZ2FjeS4gICovCisgICAgIklNTUVESUFURSJfcywKKyAgICAvKiBIYW5kbGVkIGJ5IE5ld0xpbmVTdHlsZSBtZW1iZXIuICAqLworICAgICJORVdMSU5FX1NUWUxFIl9zLAorICAgICJMRiJfcywKKyAgICAiVU5JWCJfcywKKyAgICAiQ1JMRiJfcywKKyAgICAiV0lOMzIiX3MsCisgICAgIkRPUyJfcywKKyAgfTsKIAogICBzdGQ6OnN0cmluZyB1bmtub3duX2FyZ3M7CiAgIGJvb2wgYXRPbmx5ID0gZmFsc2U7CkBAIC03MCwxMiArODgsMTAgQEAKICAgICAgIGVzY2FwZVF1b3RlcyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJAT05MWSIpIHsKICAgICAgIGF0T25seSA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJJTU1FRElBVEUiKSB7Ci0gICAgICAvKiBJZ25vcmUgbGVnYWN5IG9wdGlvbi4gICovCi0gICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJORVdMSU5FX1NUWUxFIiB8fCBhcmdzW2ldID09ICJMRiIgfHwKLSAgICAgICAgICAgICAgIGFyZ3NbaV0gPT0gIlVOSVgiIHx8IGFyZ3NbaV0gPT0gIkNSTEYiIHx8IGFyZ3NbaV0gPT0gIldJTjMyIiB8fAotICAgICAgICAgICAgICAgYXJnc1tpXSA9PSAiRE9TIikgewotICAgICAgLyogT3B0aW9ucyBoYW5kbGVkIGJ5IE5ld0xpbmVTdHlsZSBtZW1iZXIgYWJvdmUuICAqLworICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiTk9fU09VUkNFX1BFUk1JU1NJT05TIikgeworICAgICAgdXNlX3NvdXJjZV9wZXJtaXNzaW9ucyA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAobm9vcE9wdGlvbnMuZmluZChhcmdzW2ldKSAhPSBub29wT3B0aW9ucy5lbmQoKSkgeworICAgICAgLyogSWdub3JlIG5vLW9wIG9wdGlvbnMuICAqLwogICAgIH0gZWxzZSB7CiAgICAgICB1bmtub3duX2FyZ3MgKz0gIiAiOwogICAgICAgdW5rbm93bl9hcmdzICs9IGFyZ3NbaV07CkBAIC04OSw3ICsxMDUsOCBAQAogICB9CiAKICAgaWYgKCFzdGF0dXMuR2V0TWFrZWZpbGUoKS5Db25maWd1cmVGaWxlKAotICAgICAgICBpbnB1dEZpbGUsIG91dHB1dEZpbGUsIGNvcHlPbmx5LCBhdE9ubHksIGVzY2FwZVF1b3RlcywgbmV3TGluZVN0eWxlKSkgeworICAgICAgICBpbnB1dEZpbGUsIG91dHB1dEZpbGUsIGNvcHlPbmx5LCBhdE9ubHksIGVzY2FwZVF1b3RlcywKKyAgICAgICAgdXNlX3NvdXJjZV9wZXJtaXNzaW9ucywgbmV3TGluZVN0eWxlKSkgewogICAgIHN0YXR1cy5TZXRFcnJvcigiUHJvYmxlbSBjb25maWd1cmluZyBmaWxlIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db25uZWN0aW9uLmN4eCBiL1NvdXJjZS9jbUNvbm5lY3Rpb24uY3h4CmluZGV4IDg4NGUzMTQuLmU0ZDBjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbm5lY3Rpb24uY3h4CisrKyBiL1NvdXJjZS9jbUNvbm5lY3Rpb24uY3h4CkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8Y3N0cmluZz4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21TZXJ2ZXIuaCIKIApAQCAtMjAsOCArMjAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2J1Zl90KiBidWYpCiB7CiAgICh2b2lkKShoYW5kbGUpOworI2lmbmRlZiBfX2NsYW5nX2FuYWx5emVyX18KICAgY2hhciogcmF3QnVmZmVyID0gbmV3IGNoYXJbc3VnZ2VzdGVkX3NpemVdOwogICAqYnVmID0gdXZfYnVmX2luaXQocmF3QnVmZmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN1Z2dlc3RlZF9zaXplKSk7CisjZWxzZQorICAodm9pZCkoc3VnZ2VzdGVkX3NpemUpOworICAodm9pZCkoYnVmKTsKKyNlbmRpZiAvKiBfX2NsYW5nX2FuYWx5emVyX18gKi8KIH0KIAogdm9pZCBjbUV2ZW50QmFzZWRDb25uZWN0aW9uOjpvbl9yZWFkKHV2X3N0cmVhbV90KiBzdHJlYW0sIHNzaXplX3QgbnJlYWQsCkBAIC03Niw2ICs4MSw3IEBACiAgIGFzc2VydCh1dl90aHJlYWRfZXF1YWwoJmN1cnJfdGhyZWFkX2lkLCAmdGhpcy0+U2VydmVyLT5TZXJ2ZVRocmVhZElkKSk7CiAjZW5kaWYKIAorI2lmbmRlZiBfX2NsYW5nX2FuYWx5emVyX18KICAgYXV0byBkYXRhID0gX2RhdGE7CiAgIGFzc2VydCh0aGlzLT5Xcml0ZVN0cmVhbS5nZXQoKSk7CiAgIGlmIChCdWZmZXJTdHJhdGVneSkgewpAQCAtOTAsNiArOTYsOSBAQAogICBtZW1jcHkocmVxLT5idWYuYmFzZSwgZGF0YS5jX3N0cigpLCBkcyk7CiAgIHV2X3dyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dXZfd3JpdGVfdCo+KHJlcSksIHRoaXMtPldyaXRlU3RyZWFtLCAmcmVxLT5idWYsIDEsCiAgICAgICAgICAgIG9uX3dyaXRlKTsKKyNlbHNlCisgICh2b2lkKShfZGF0YSk7CisjZW5kaWYgLyogX19jbGFuZ19hbmFseXplcl9fICovCiB9CiAKIHZvaWQgY21FdmVudEJhc2VkQ29ubmVjdGlvbjo6UmVhZERhdGEoY29uc3Qgc3RkOjpzdHJpbmcmIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db25uZWN0aW9uLmggYi9Tb3VyY2UvY21Db25uZWN0aW9uLmgKaW5kZXggN2JiMjQ5NC4uNTMzNWE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9jbUNvbm5lY3Rpb24uaApAQCAtOSw3ICs5LDcgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKICNpbmNsdWRlICJjbVVWSGFuZGxlUHRyLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbnZlcnRNU0J1aWxkWE1MVG9KU09OLnB5IGIvU291cmNlL2NtQ29udmVydE1TQnVpbGRYTUxUb0pTT04ucHkKaW5kZXggMDIwNzRiYS4uMmJlMzc4MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29udmVydE1TQnVpbGRYTUxUb0pTT04ucHkKKysrIGIvU291cmNlL2NtQ29udmVydE1TQnVpbGRYTUxUb0pTT04ucHkKQEAgLTM1LDEyICszNSwxNCBAQAogICAgIHJldHVybiB2YWx1ZXMKIAogCi1kZWYgcmVhZF9tc2J1aWxkX3htbChwYXRoLCB2YWx1ZXM9e30pOgorZGVmIHJlYWRfbXNidWlsZF94bWwocGF0aCwgdmFsdWVzPU5vbmUpOgogICAgICIiIlJlYWRzIHRoZSBNUyBCdWlsZCBYTUwgZmlsZSBhdCB0aGUgcGF0aCBhbmQgcmV0dXJucyBpdHMgY29udGVudHMuCiAKICAgICBLZXl3b3JkIGFyZ3VtZW50czoKICAgICB2YWx1ZXMgLS0gVGhlIG1hcCB0byBhcHBlbmQgdGhlIGNvbnRlbnRzIHRvIChkZWZhdWx0IHt9KQogICAgICIiIgorICAgIGlmIHZhbHVlcyBpcyBOb25lOgorICAgICAgICB2YWx1ZXMgPSB7fQogCiAgICAgIyBBdHRlbXB0IHRvIHJlYWQgdGhlIGZpbGUgY29udGVudHMKICAgICB0cnk6CkBAIC03NiwxMiArNzgsMTUgQEAKICAgICByZXR1cm4gdmFsdWVzCiAKIAotZGVmIHJlYWRfbXNidWlsZF9qc29uKHBhdGgsIHZhbHVlcz1bXSk6CitkZWYgcmVhZF9tc2J1aWxkX2pzb24ocGF0aCwgdmFsdWVzPU5vbmUpOgogICAgICIiIlJlYWRzIHRoZSBNUyBCdWlsZCBKU09OIGZpbGUgYXQgdGhlIHBhdGggYW5kIHJldHVybnMgaXRzIGNvbnRlbnRzLgogCiAgICAgS2V5d29yZCBhcmd1bWVudHM6CiAgICAgdmFsdWVzIC0tIFRoZSBsaXN0IHRvIGFwcGVuZCB0aGUgY29udGVudHMgdG8gKGRlZmF1bHQgW10pCiAgICAgIiIiCisgICAgaWYgdmFsdWVzIGlzIE5vbmU6CisgICAgICAgIHZhbHVlcyA9IFtdCisKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgIGxvZ2dpbmcuaW5mbygnQ291bGQgbm90IGZpbmQgTVMgQnVpbGQgSlNPTiBmaWxlIGF0ICVzJywgcGF0aCkKICAgICAgICAgcmV0dXJuIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29yZVRyeUNvbXBpbGUuY3h4IGIvU291cmNlL2NtQ29yZVRyeUNvbXBpbGUuY3h4CmluZGV4IDczZjA5OWIuLjg0NjVjNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvcmVUcnlDb21waWxlLmN4eAorKysgYi9Tb3VyY2UvY21Db3JlVHJ5Q29tcGlsZS5jeHgKQEAgLTgsOSArOCw5IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKIAogI2luY2x1ZGUgImNtRXhwb3J0VHJ5Q29tcGlsZUZpbGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTI1LDczICsyNiwyMDUgQEAKICNpbmNsdWRlICJjbVZlcnNpb24uaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCi1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NfQ09NUElMRVJfRVhURVJOQUxfVE9PTENIQUlOID0KLSAgIkNNQUtFX0NfQ09NUElMRVJfRVhURVJOQUxfVE9PTENIQUlOIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ19DT01QSUxFUl9UQVJHRVQgPSAiQ01BS0VfQ19DT01QSUxFUl9UQVJHRVQiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9DX0xJTktfTk9fUElFX1NVUFBPUlRFRCA9Ci0gICJDTUFLRV9DX0xJTktfTk9fUElFX1NVUFBPUlRFRCI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NfTElOS19QSUVfU1VQUE9SVEVEID0KLSAgIkNNQUtFX0NfTElOS19QSUVfU1VQUE9SVEVEIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ1hYX0NPTVBJTEVSX0VYVEVSTkFMX1RPT0xDSEFJTiA9Ci0gICJDTUFLRV9DWFhfQ09NUElMRVJfRVhURVJOQUxfVE9PTENIQUlOIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ1hYX0NPTVBJTEVSX1RBUkdFVCA9Ci0gICJDTUFLRV9DWFhfQ09NUElMRVJfVEFSR0VUIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ1hYX0xJTktfTk9fUElFX1NVUFBPUlRFRCA9Ci0gICJDTUFLRV9DWFhfTElOS19OT19QSUVfU1VQUE9SVEVEIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ1hYX0xJTktfUElFX1NVUFBPUlRFRCA9Ci0gICJDTUFLRV9DWFhfTElOS19QSUVfU1VQUE9SVEVEIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkgPQotICAiQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9FTkFCTEVfRVhQT1JUUyA9ICJDTUFLRV9FTkFCTEVfRVhQT1JUUyI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0xJTktfU0VBUkNIX0VORF9TVEFUSUMgPQorbmFtZXNwYWNlIHsKK2NsYXNzIExhbmd1YWdlU3RhbmRhcmRTdGF0ZQoreworcHVibGljOgorICBMYW5ndWFnZVN0YW5kYXJkU3RhdGUoc3RkOjpzdHJpbmcmJiBsYW5nKQorICAgIDogSXNFbmFibGVkKGZhbHNlKQorICAgICwgRGlkU3RhbmRhcmQoZmFsc2UpCisgICAgLCBEaWRTdGFuZGFyZFJlcXVpcmVkKGZhbHNlKQorICAgICwgRGlkRXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIFN0YW5kYXJkRmxhZyhsYW5nICsgIl9TVEFOREFSRCIpCisgICAgLCBSZXF1aXJlZEZsYWcobGFuZyArICJfU1RBTkRBUkRfUkVRVUlSRUQiKQorICAgICwgRXh0ZW5zaW9uRmxhZyhsYW5nICsgIl9FWFRFTlNJT05TIikKKyAgeworICB9CisKKyAgdm9pZCBFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IHRoaXMtPklzRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQorCisgIGJvb2wgVXBkYXRlSWZNYXRjaGVzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJndiwgc2l6ZV90JiBpbmRleCkKKyAgeworICAgIGJvb2wgdXBkYXRlZCA9IGZhbHNlOworICAgIGlmIChhcmd2W2luZGV4XSA9PSB0aGlzLT5TdGFuZGFyZEZsYWcpIHsKKyAgICAgIHRoaXMtPkRpZFN0YW5kYXJkID0gdHJ1ZTsKKyAgICAgIHRoaXMtPlN0YW5kYXJkVmFsdWUgPSBhcmd2WysraW5kZXhdOworICAgICAgdXBkYXRlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChhcmd2W2luZGV4XSA9PSB0aGlzLT5SZXF1aXJlZEZsYWcpIHsKKyAgICAgIHRoaXMtPkRpZFN0YW5kYXJkUmVxdWlyZWQgPSB0cnVlOworICAgICAgdGhpcy0+UmVxdWlyZWRWYWx1ZSA9IGFyZ3ZbKytpbmRleF07CisgICAgICB1cGRhdGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGFyZ3ZbaW5kZXhdID09IHRoaXMtPkV4dGVuc2lvbkZsYWcpIHsKKyAgICAgIHRoaXMtPkRpZEV4dGVuc2lvbnMgPSB0cnVlOworICAgICAgdGhpcy0+RXh0ZW5zaW9uVmFsdWUgPSBhcmd2WysraW5kZXhdOworICAgICAgdXBkYXRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiB1cGRhdGVkOworICB9CisKKyAgYm9vbCBWYWxpZGF0ZShjbU1ha2VmaWxlKiBjb25zdCBtYWtlZmlsZSkgY29uc3QKKyAgeworICAgIGlmICh0aGlzLT5EaWRTdGFuZGFyZCkgeworICAgICAgbWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICBjbVN0ckNhdCh0aGlzLT5TdGFuZGFyZEZsYWcsCisgICAgICAgICAgICAgICAgICIgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh0aGlzLT5EaWRTdGFuZGFyZFJlcXVpcmVkKSB7CisgICAgICBtYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgIGNtU3RyQ2F0KHRoaXMtPlJlcXVpcmVkRmxhZywKKyAgICAgICAgICAgICAgICAgIiBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHRoaXMtPkRpZEV4dGVuc2lvbnMpIHsKKyAgICAgIG1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgY21TdHJDYXQodGhpcy0+RXh0ZW5zaW9uRmxhZywKKyAgICAgICAgICAgICAgICAgIiBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGJvb2wgRGlkTm9uZSgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gIXRoaXMtPkRpZFN0YW5kYXJkICYmICF0aGlzLT5EaWRTdGFuZGFyZFJlcXVpcmVkICYmCisgICAgICAhdGhpcy0+RGlkRXh0ZW5zaW9uczsKKyAgfQorCisgIHZvaWQgTG9hZFVuc2V0UHJvcGVydHlWYWx1ZXMoY21NYWtlZmlsZSogY29uc3QgbWFrZWZpbGUsIGJvb2wgaG9ub3JTdGFuZGFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdhcm5DTVAwMDY3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgd2FybkNNUDAwNjdWYXJpYWJsZXMpCisgIHsKKyAgICBpZiAoIXRoaXMtPklzRW5hYmxlZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbG9va3VwU3RkVmFyID0gWyZdKHN0ZDo6c3RyaW5nIGNvbnN0JiB2YXIpIC0+IHN0ZDo6c3RyaW5nIHsKKyAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gbWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKHZhcik7CisgICAgICBpZiAod2FybkNNUDAwNjcgJiYgIXZhbHVlLmVtcHR5KCkpIHsKKyAgICAgICAgdmFsdWUuY2xlYXIoKTsKKyAgICAgICAgd2FybkNNUDAwNjdWYXJpYWJsZXMucHVzaF9iYWNrKHZhcik7CisgICAgICB9CisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfTsKKworICAgIGlmIChob25vclN0YW5kYXJkIHx8IHdhcm5DTVAwMDY3KSB7CisgICAgICBpZiAoIXRoaXMtPkRpZFN0YW5kYXJkKSB7CisgICAgICAgIHRoaXMtPlN0YW5kYXJkVmFsdWUgPQorICAgICAgICAgIGxvb2t1cFN0ZFZhcihjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+U3RhbmRhcmRGbGFnKSk7CisgICAgICB9CisgICAgICBpZiAoIXRoaXMtPkRpZFN0YW5kYXJkUmVxdWlyZWQpIHsKKyAgICAgICAgdGhpcy0+UmVxdWlyZWRWYWx1ZSA9CisgICAgICAgICAgbG9va3VwU3RkVmFyKGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5SZXF1aXJlZEZsYWcpKTsKKyAgICAgIH0KKyAgICAgIGlmICghdGhpcy0+RGlkRXh0ZW5zaW9ucykgeworICAgICAgICB0aGlzLT5FeHRlbnNpb25WYWx1ZSA9CisgICAgICAgICAgbG9va3VwU3RkVmFyKGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5FeHRlbnNpb25GbGFnKSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdm9pZCBXcml0ZVByb3BlcnRpZXMoRklMRSogZm91dCwgc3RkOjpzdHJpbmcgY29uc3QmIHRhcmdldE5hbWUpIGNvbnN0CisgIHsKKyAgICBpZiAoIXRoaXMtPklzRW5hYmxlZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gd3JpdGVQcm9wID0gWyZdKHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLCBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpIHsKKyAgICAgIGZwcmludGYoZm91dCwgInNldF9wcm9wZXJ0eShUQVJHRVQgJXMgUFJPUEVSVFkgJXMgJXMpXG4iLAorICAgICAgICAgICAgICB0YXJnZXROYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZShwcm9wKS5jX3N0cigpLAorICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2UodmFsdWUpLmNfc3RyKCkpOworICAgIH07CisKKyAgICBpZiAoIXRoaXMtPlN0YW5kYXJkVmFsdWUuZW1wdHkoKSkgeworICAgICAgd3JpdGVQcm9wKHRoaXMtPlN0YW5kYXJkRmxhZywgdGhpcy0+U3RhbmRhcmRWYWx1ZSk7CisgICAgfQorICAgIGlmICghdGhpcy0+UmVxdWlyZWRWYWx1ZS5lbXB0eSgpKSB7CisgICAgICB3cml0ZVByb3AodGhpcy0+UmVxdWlyZWRGbGFnLCB0aGlzLT5SZXF1aXJlZFZhbHVlKTsKKyAgICB9CisgICAgaWYgKCF0aGlzLT5FeHRlbnNpb25WYWx1ZS5lbXB0eSgpKSB7CisgICAgICB3cml0ZVByb3AodGhpcy0+RXh0ZW5zaW9uRmxhZywgdGhpcy0+RXh0ZW5zaW9uVmFsdWUpOworICAgIH0KKyAgfQorCitwcml2YXRlOgorICBib29sIElzRW5hYmxlZDsKKyAgYm9vbCBEaWRTdGFuZGFyZDsKKyAgYm9vbCBEaWRTdGFuZGFyZFJlcXVpcmVkOworICBib29sIERpZEV4dGVuc2lvbnM7CisKKyAgc3RkOjpzdHJpbmcgU3RhbmRhcmRGbGFnOworICBzdGQ6OnN0cmluZyBSZXF1aXJlZEZsYWc7CisgIHN0ZDo6c3RyaW5nIEV4dGVuc2lvbkZsYWc7CisKKyAgc3RkOjpzdHJpbmcgU3RhbmRhcmRWYWx1ZTsKKyAgc3RkOjpzdHJpbmcgUmVxdWlyZWRWYWx1ZTsKKyAgc3RkOjpzdHJpbmcgRXh0ZW5zaW9uVmFsdWU7Cit9OworCitjb25zdGV4cHIgc2l6ZV90IGxhbmdfcHJvcGVydHlfc3RhcnQgPSAwOworY29uc3RleHByIHNpemVfdCBsYW5nX3Byb3BlcnR5X3NpemUgPSA0OworY29uc3RleHByIHNpemVfdCBwaWVfcHJvcGVydHlfc3RhcnQgPSA0OworY29uc3RleHByIHNpemVfdCBwaWVfcHJvcGVydHlfc2l6ZSA9IDI7CisjZGVmaW5lIFNFVFVQX0xBTkdVQUdFKG5hbWUsIGxhbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBuYW1lW2xhbmdfcHJvcGVydHlfc2l6ZSArIHBpZV9wcm9wZXJ0eV9zaXplICsgMV0gPSBcCisgICAgeyAiQ01BS0VfIiAjbGFuZyAiX0NPTVBJTEVSX0VYVEVSTkFMX1RPT0xDSEFJTiIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAiQ01BS0VfIiAjbGFuZyAiX0NPTVBJTEVSX1RBUkdFVCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAiQ01BS0VfIiAjbGFuZyAiX0xJTktfTk9fUElFX1NVUFBPUlRFRCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAiQ01BS0VfIiAjbGFuZyAiX1BJRV9TVVBQT1JURUQiLCAiIiB9CisKKy8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLXN1c3BpY2lvdXMtbWlzc2luZy1jb21tYSkKK1NFVFVQX0xBTkdVQUdFKGNfcHJvcGVydGllcywgQyk7CisvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1zdXNwaWNpb3VzLW1pc3NpbmctY29tbWEpCitTRVRVUF9MQU5HVUFHRShjeHhfcHJvcGVydGllcywgQ1hYKTsKKworLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtc3VzcGljaW91cy1taXNzaW5nLWNvbW1hKQorU0VUVVBfTEFOR1VBR0UoY3VkYV9wcm9wZXJ0aWVzLCBDVURBKTsKKy8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLXN1c3BpY2lvdXMtbWlzc2luZy1jb21tYSkKK1NFVFVQX0xBTkdVQUdFKGZvcnRyYW5fcHJvcGVydGllcywgRm9ydHJhbik7CisvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1zdXNwaWNpb3VzLW1pc3NpbmctY29tbWEpCitTRVRVUF9MQU5HVUFHRShvYmpjX3Byb3BlcnRpZXMsIE9CSkMpOworLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtc3VzcGljaW91cy1taXNzaW5nLWNvbW1hKQorU0VUVVBfTEFOR1VBR0Uob2JqY3h4X3Byb3BlcnRpZXMsIE9CSkNYWCk7CisvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1zdXNwaWNpb3VzLW1pc3NpbmctY29tbWEpCitTRVRVUF9MQU5HVUFHRShzd2lmdF9wcm9wZXJ0aWVzLCBTd2lmdCk7CisjdW5kZWYgU0VUVVBfTEFOR1VBR0UKKworc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NVREFfQVJDSElURUNUVVJFUyA9ICJDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMiOworc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZID0gIkNNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9FTkFCTEVfRVhQT1JUUyA9ICJDTUFLRV9FTkFCTEVfRVhQT1JUUyI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfTElOS19TRUFSQ0hfRU5EX1NUQVRJQyA9CiAgICJDTUFLRV9MSU5LX1NFQVJDSF9FTkRfU1RBVElDIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfTElOS19TRUFSQ0hfU1RBUlRfU1RBVElDID0KK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9MSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMgPQogICAiQ01BS0VfTElOS19TRUFSQ0hfU1RBUlRfU1RBVElDIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUllfREVGQVVMVCA9CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUllfREVGQVVMVCA9CiAgICJDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMgPSAiQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQgPQotICAiQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfT1NYX1NZU1JPT1QgPSAiQ01BS0VfT1NYX1NZU1JPT1QiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9BUFBMRV9BUkNIX1NZU1JPT1RTID0KLSAgIkNNQUtFX0FQUExFX0FSQ0hfU1lTUk9PVFMiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFID0KK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9PU1hfQVJDSElURUNUVVJFUyA9ICJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gIkNNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVCI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfT1NYX1NZU1JPT1QgPSAiQ01BS0VfT1NYX1NZU1JPT1QiOworc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0FQUExFX0FSQ0hfU1lTUk9PVFMgPSAiQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUyI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSA9CiAgICJDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfU1lTUk9PVCA9ICJDTUFLRV9TWVNST09UIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfU1lTUk9PVF9DT01QSUxFID0gIkNNQUtFX1NZU1JPT1RfQ09NUElMRSI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1NZU1JPT1RfTElOSyA9ICJDTUFLRV9TWVNST09UX0xJTksiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9Td2lmdF9DT01QSUxFUl9UQVJHRVQgPQotICAiQ01BS0VfU3dpZnRfQ09NUElMRVJfVEFSR0VUIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfVFJZX0NPTVBJTEVfT1NYX0FSQ0hJVEVDVFVSRVMgPQorc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1NZU1JPT1QgPSAiQ01BS0VfU1lTUk9PVCI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfU1lTUk9PVF9DT01QSUxFID0gIkNNQUtFX1NZU1JPT1RfQ09NUElMRSI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfU1lTUk9PVF9MSU5LID0gIkNNQUtFX1NZU1JPT1RfTElOSyI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfVFJZX0NPTVBJTEVfT1NYX0FSQ0hJVEVDVFVSRVMgPQogICAiQ01BS0VfVFJZX0NPTVBJTEVfT1NYX0FSQ0hJVEVDVFVSRVMiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9UUllfQ09NUElMRV9QTEFURk9STV9WQVJJQUJMRVMgPQorc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1RSWV9DT01QSUxFX1BMQVRGT1JNX1ZBUklBQkxFUyA9CiAgICJDTUFLRV9UUllfQ09NUElMRV9QTEFURk9STV9WQVJJQUJMRVMiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9XQVJOX0RFUFJFQ0FURUQgPSAiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9XQVJOX0RFUFJFQ0FURUQgPSAiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIjsKIAogLyogR0hTIE11bHRpIHBsYXRmb3JtIHZhcmlhYmxlcyAqLwotc3RhdGljIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBnaHNfcGxhdGZvcm1fdmFyc3sKK3N0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBjb25zdCBnaHNfcGxhdGZvcm1fdmFyc3sKICAgIkdIU19UQVJHRVRfUExBVEZPUk0iLCAiR0hTX1BSSU1BUllfVEFSR0VUIiwgIkdIU19UT09MU0VUX1JPT1QiLAogICAiR0hTX09TX1JPT1QiLCAgICAgICAgICJHSFNfT1NfRElSIiwgICAgICAgICAiR0hTX0JTUF9OQU1FIiwKICAgIkdIU19PU19ESVJfT1BUSU9OIgogfTsKLQotc3RhdGljIHZvaWQgd3JpdGVQcm9wZXJ0eShGSUxFKiBmb3V0LCBzdGQ6OnN0cmluZyBjb25zdCYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSkKLXsKLSAgZnByaW50Zihmb3V0LCAic2V0X3Byb3BlcnR5KFRBUkdFVCAlcyBQUk9QRVJUWSAlcyAlcylcbiIsIHRhcmdldE5hbWUuY19zdHIoKSwKLSAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2UocHJvcCkuY19zdHIoKSwKLSAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2UodmFsdWUpLmNfc3RyKCkpOwotfQotCi1zdGQ6OnN0cmluZyBjbUNvcmVUcnlDb21waWxlOjpMb29rdXBTdGRWYXIoc3RkOjpzdHJpbmcgY29uc3QmIHZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdhcm5DTVAwMDY3KQotewotICBzdGQ6OnN0cmluZyB2YWx1ZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbih2YXIpOwotICBpZiAod2FybkNNUDAwNjcgJiYgIXZhbHVlLmVtcHR5KCkpIHsKLSAgICB2YWx1ZS5jbGVhcigpOwotICAgIHRoaXMtPldhcm5DTVAwMDY3LnB1c2hfYmFjayh2YXIpOwotICB9Ci0gIHJldHVybiB2YWx1ZTsKIH0KIAogaW50IGNtQ29yZVRyeUNvbXBpbGU6OlRyeUNvbXBpbGVDb2RlKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJndiwKQEAgLTEwMywyOSArMjM2LDIyIEBACiAgIHRoaXMtPlNyY0ZpbGVTaWduYXR1cmUgPSB0cnVlOwogCiAgIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlID0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOwotICBjb25zdCBjaGFyKiB0dCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFIik7Ci0gIGlmICghaXNUcnlSdW4gJiYgdHQgJiYgKnR0KSB7Ci0gICAgaWYgKHN0cmNtcCh0dCwgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSkgPT0KLSAgICAgICAgMCkgeworICBjbVByb3AgdHQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKCJDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSIpOworICBpZiAoIWlzVHJ5UnVuICYmIGNtTm9uZW1wdHkodHQpKSB7CisgICAgaWYgKCp0dCA9PSBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpKSB7CiAgICAgICB0YXJnZXRUeXBlID0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKHR0LAotICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSkpID09IDApIHsKKyAgICB9IGVsc2UgaWYgKCp0dCA9PQorICAgICAgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSkpIHsKICAgICAgIHRhcmdldFR5cGUgPSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZOwogICAgIH0gZWxzZSB7CiAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAogICAgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAgIHN0ZDo6c3RyaW5nKCJJbnZhbGlkIHZhbHVlICciKSArIHR0ICsKLSAgICAgICAgICAiJyBmb3IgIgotICAgICAgICAgICJDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRS4gIE9ubHkgIgotICAgICAgICAgICInIiArCi0gICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSArCi0gICAgICAgICAgIicgYW5kICIKLSAgICAgICAgICAiJyIgKwotICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpICsKLSAgICAgICAgICAiJyAiCi0gICAgICAgICAgImFyZSBhbGxvd2VkLiIpOworICAgICAgICBjbVN0ckNhdCgiSW52YWxpZCB2YWx1ZSAnIiwgKnR0LAorICAgICAgICAgICAgICAgICAiJyBmb3IgQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUuICBPbmx5ICciLAorICAgICAgICAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpLAorICAgICAgICAgICAgICAgICAiJyBhbmQgJyIsCisgICAgICAgICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpLAorICAgICAgICAgICAgICAgICAiJyBhcmUgYWxsb3dlZC4iKSk7CiAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICB9CkBAIC0xMzksMjEgKzI2NSwxMSBAQAogICBzdGQ6OnN0cmluZyBvdXRwdXRWYXJpYWJsZTsKICAgc3RkOjpzdHJpbmcgY29weUZpbGU7CiAgIHN0ZDo6c3RyaW5nIGNvcHlGaWxlRXJyb3I7Ci0gIHN0ZDo6c3RyaW5nIGNTdGFuZGFyZDsKLSAgc3RkOjpzdHJpbmcgb2JqY1N0YW5kYXJkOwotICBzdGQ6OnN0cmluZyBjeHhTdGFuZGFyZDsKLSAgc3RkOjpzdHJpbmcgb2JqY3h4U3RhbmRhcmQ7Ci0gIHN0ZDo6c3RyaW5nIGN1ZGFTdGFuZGFyZDsKLSAgc3RkOjpzdHJpbmcgY1N0YW5kYXJkUmVxdWlyZWQ7Ci0gIHN0ZDo6c3RyaW5nIGN4eFN0YW5kYXJkUmVxdWlyZWQ7Ci0gIHN0ZDo6c3RyaW5nIG9iamNTdGFuZGFyZFJlcXVpcmVkOwotICBzdGQ6OnN0cmluZyBvYmpjeHhTdGFuZGFyZFJlcXVpcmVkOwotICBzdGQ6OnN0cmluZyBjdWRhU3RhbmRhcmRSZXF1aXJlZDsKLSAgc3RkOjpzdHJpbmcgY0V4dGVuc2lvbnM7Ci0gIHN0ZDo6c3RyaW5nIGN4eEV4dGVuc2lvbnM7Ci0gIHN0ZDo6c3RyaW5nIG9iamNFeHRlbnNpb25zOwotICBzdGQ6OnN0cmluZyBvYmpjeHhFeHRlbnNpb25zOwotICBzdGQ6OnN0cmluZyBjdWRhRXh0ZW5zaW9uczsKKyAgTGFuZ3VhZ2VTdGFuZGFyZFN0YXRlIGNTdGF0ZSgiQyIpOworICBMYW5ndWFnZVN0YW5kYXJkU3RhdGUgY3VkYVN0YXRlKCJDVURBIik7CisgIExhbmd1YWdlU3RhbmRhcmRTdGF0ZSBjeHhTdGF0ZSgiQ1hYIik7CisgIExhbmd1YWdlU3RhbmRhcmRTdGF0ZSBvYmpjU3RhdGUoIk9CSkMiKTsKKyAgTGFuZ3VhZ2VTdGFuZGFyZFN0YXRlIG9iamN4eFN0YXRlKCJPQkpDWFgiKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRhcmdldHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rT3B0aW9uczsKICAgc3RkOjpzdHJpbmcgbGlic1RvTGluayA9ICIgIjsKQEAgLTE2MiwyMSArMjc4LDYgQEAKICAgYm9vbCBkaWRPdXRwdXRWYXJpYWJsZSA9IGZhbHNlOwogICBib29sIGRpZENvcHlGaWxlID0gZmFsc2U7CiAgIGJvb2wgZGlkQ29weUZpbGVFcnJvciA9IGZhbHNlOwotICBib29sIGRpZENTdGFuZGFyZCA9IGZhbHNlOwotICBib29sIGRpZEN4eFN0YW5kYXJkID0gZmFsc2U7Ci0gIGJvb2wgZGlkT2JqQ1N0YW5kYXJkID0gZmFsc2U7Ci0gIGJvb2wgZGlkT2JqQ3h4U3RhbmRhcmQgPSBmYWxzZTsKLSAgYm9vbCBkaWRDdWRhU3RhbmRhcmQgPSBmYWxzZTsKLSAgYm9vbCBkaWRDU3RhbmRhcmRSZXF1aXJlZCA9IGZhbHNlOwotICBib29sIGRpZEN4eFN0YW5kYXJkUmVxdWlyZWQgPSBmYWxzZTsKLSAgYm9vbCBkaWRPYmpDU3RhbmRhcmRSZXF1aXJlZCA9IGZhbHNlOwotICBib29sIGRpZE9iakN4eFN0YW5kYXJkUmVxdWlyZWQgPSBmYWxzZTsKLSAgYm9vbCBkaWRDdWRhU3RhbmRhcmRSZXF1aXJlZCA9IGZhbHNlOwotICBib29sIGRpZENFeHRlbnNpb25zID0gZmFsc2U7Ci0gIGJvb2wgZGlkQ3h4RXh0ZW5zaW9ucyA9IGZhbHNlOwotICBib29sIGRpZE9iakNFeHRlbnNpb25zID0gZmFsc2U7Ci0gIGJvb2wgZGlkT2JqQ3h4RXh0ZW5zaW9ucyA9IGZhbHNlOwotICBib29sIGRpZEN1ZGFFeHRlbnNpb25zID0gZmFsc2U7CiAgIGJvb2wgdXNlU291cmNlcyA9IGFyZ3ZbMl0gPT0gIlNPVVJDRVMiOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlczsKIApAQCAtMTkwLDIxICsyOTEsNiBAQAogICAgIERvaW5nT3V0cHV0VmFyaWFibGUsCiAgICAgRG9pbmdDb3B5RmlsZSwKICAgICBEb2luZ0NvcHlGaWxlRXJyb3IsCi0gICAgRG9pbmdDU3RhbmRhcmQsCi0gICAgRG9pbmdDeHhTdGFuZGFyZCwKLSAgICBEb2luZ09iakNTdGFuZGFyZCwKLSAgICBEb2luZ09iakN4eFN0YW5kYXJkLAotICAgIERvaW5nQ3VkYVN0YW5kYXJkLAotICAgIERvaW5nQ1N0YW5kYXJkUmVxdWlyZWQsCi0gICAgRG9pbmdDeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgIERvaW5nT2JqQ1N0YW5kYXJkUmVxdWlyZWQsCi0gICAgRG9pbmdPYmpDeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgIERvaW5nQ3VkYVN0YW5kYXJkUmVxdWlyZWQsCi0gICAgRG9pbmdDRXh0ZW5zaW9ucywKLSAgICBEb2luZ0N4eEV4dGVuc2lvbnMsCi0gICAgRG9pbmdPYmpDRXh0ZW5zaW9ucywKLSAgICBEb2luZ09iakN4eEV4dGVuc2lvbnMsCi0gICAgRG9pbmdDdWRhRXh0ZW5zaW9ucywKICAgICBEb2luZ1NvdXJjZXMsCiAgICAgRG9pbmdDTWFrZUludGVybmFsCiAgIH07CkBAIC0yMjgsNTEgKzMxNCwxMiBAQAogICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiQ09QWV9GSUxFX0VSUk9SIikgewogICAgICAgZG9pbmcgPSBEb2luZ0NvcHlGaWxlRXJyb3I7CiAgICAgICBkaWRDb3B5RmlsZUVycm9yID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNfU1RBTkRBUkQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nQ1N0YW5kYXJkOwotICAgICAgZGlkQ1N0YW5kYXJkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNYWF9TVEFOREFSRCIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdDeHhTdGFuZGFyZDsKLSAgICAgIGRpZEN4eFN0YW5kYXJkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIk9CSkNfU1RBTkRBUkQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nT2JqQ1N0YW5kYXJkOwotICAgICAgZGlkT2JqQ1N0YW5kYXJkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIk9CSkNYWF9TVEFOREFSRCIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdPYmpDeHhTdGFuZGFyZDsKLSAgICAgIGRpZE9iakN4eFN0YW5kYXJkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNVREFfU1RBTkRBUkQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nQ3VkYVN0YW5kYXJkOwotICAgICAgZGlkQ3VkYVN0YW5kYXJkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNfU1RBTkRBUkRfUkVRVUlSRUQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nQ1N0YW5kYXJkUmVxdWlyZWQ7Ci0gICAgICBkaWRDU3RhbmRhcmRSZXF1aXJlZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJDWFhfU1RBTkRBUkRfUkVRVUlSRUQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nQ3h4U3RhbmRhcmRSZXF1aXJlZDsKLSAgICAgIGRpZEN4eFN0YW5kYXJkUmVxdWlyZWQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiT0JKQ19TVEFOREFSRF9SRVFVSVJFRCIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdPYmpDU3RhbmRhcmRSZXF1aXJlZDsKLSAgICAgIGRpZE9iakNTdGFuZGFyZFJlcXVpcmVkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIk9CSkNYWF9TVEFOREFSRF9SRVFVSVJFRCIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdPYmpDeHhTdGFuZGFyZFJlcXVpcmVkOwotICAgICAgZGlkT2JqQ3h4U3RhbmRhcmRSZXF1aXJlZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJDVURBX1NUQU5EQVJEX1JFUVVJUkVEIikgewotICAgICAgZG9pbmcgPSBEb2luZ0N1ZGFTdGFuZGFyZFJlcXVpcmVkOwotICAgICAgZGlkQ3VkYVN0YW5kYXJkUmVxdWlyZWQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiQ19FWFRFTlNJT05TIikgewotICAgICAgZG9pbmcgPSBEb2luZ0NFeHRlbnNpb25zOwotICAgICAgZGlkQ0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiQ1hYX0VYVEVOU0lPTlMiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nQ3h4RXh0ZW5zaW9uczsKLSAgICAgIGRpZEN4eEV4dGVuc2lvbnMgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiT0JKQ19FWFRFTlNJT05TIikgewotICAgICAgZG9pbmcgPSBEb2luZ09iakNFeHRlbnNpb25zOwotICAgICAgZGlkT2JqQ0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiT0JKQ1hYX0VYVEVOU0lPTlMiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nT2JqQ3h4RXh0ZW5zaW9uczsKLSAgICAgIGRpZE9iakN4eEV4dGVuc2lvbnMgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiQ1VEQV9FWFRFTlNJT05TIikgewotICAgICAgZG9pbmcgPSBEb2luZ0N1ZGFFeHRlbnNpb25zOwotICAgICAgZGlkQ3VkYUV4dGVuc2lvbnMgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoY1N0YXRlLlVwZGF0ZUlmTWF0Y2hlcyhhcmd2LCBpKSB8fAorICAgICAgICAgICAgICAgY3h4U3RhdGUuVXBkYXRlSWZNYXRjaGVzKGFyZ3YsIGkpIHx8CisgICAgICAgICAgICAgICBjdWRhU3RhdGUuVXBkYXRlSWZNYXRjaGVzKGFyZ3YsIGkpIHx8CisgICAgICAgICAgICAgICBvYmpjU3RhdGUuVXBkYXRlSWZNYXRjaGVzKGFyZ3YsIGkpIHx8CisgICAgICAgICAgICAgICBvYmpjeHhTdGF0ZS5VcGRhdGVJZk1hdGNoZXMoYXJndiwgaSkpIHsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiX19DTUFLRV9JTlRFUk5BTCIpIHsKICAgICAgIGRvaW5nID0gRG9pbmdDTWFrZUludGVybmFsOwogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDTWFrZUZsYWdzKSB7CkBAIC0yOTgsMTIgKzM0NSwxMCBAQAogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAogICAgICAgICAgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAgICAgICAgICJPbmx5IGxpYnJhcmllcyBtYXkgYmUgdXNlZCBhcyB0cnlfY29tcGlsZSBvciB0cnlfcnVuIElNUE9SVEVEICIKLSAgICAgICAgICAgICAgIkxJTktfTElCUkFSSUVTLiAgR290ICIgKwotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHRndC0+R2V0TmFtZSgpKSArCi0gICAgICAgICAgICAgICAgIiBvZiAiCi0gICAgICAgICAgICAgICAgInR5cGUgIiArCi0gICAgICAgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGd0LT5HZXRUeXBlKCkpICsgIi4iKTsKKyAgICAgICAgICAgICAgY21TdHJDYXQoIk9ubHkgbGlicmFyaWVzIG1heSBiZSB1c2VkIGFzIHRyeV9jb21waWxlIG9yIHRyeV9ydW4gIgorICAgICAgICAgICAgICAgICAgICAgICAiSU1QT1JURUQgTElOS19MSUJSQVJJRVMuICBHb3QgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGd0LT5HZXROYW1lKCksICIgb2YgdHlwZSAiLAorICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0Z3QtPkdldFR5cGUoKSksICIuIikpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGlmICh0Z3QtPklzSW1wb3J0ZWQoKSkgewpAQCAtMzE5LDUxICszNjQsNiBAQAogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDb3B5RmlsZUVycm9yKSB7CiAgICAgICBjb3B5RmlsZUVycm9yID0gYXJndltpXTsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDU3RhbmRhcmQpIHsKLSAgICAgIGNTdGFuZGFyZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ3h4U3RhbmRhcmQpIHsKLSAgICAgIGN4eFN0YW5kYXJkID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdPYmpDU3RhbmRhcmQpIHsKLSAgICAgIG9iamNTdGFuZGFyZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nT2JqQ3h4U3RhbmRhcmQpIHsKLSAgICAgIG9iamN4eFN0YW5kYXJkID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDdWRhU3RhbmRhcmQpIHsKLSAgICAgIGN1ZGFTdGFuZGFyZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ1N0YW5kYXJkUmVxdWlyZWQpIHsKLSAgICAgIGNTdGFuZGFyZFJlcXVpcmVkID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDeHhTdGFuZGFyZFJlcXVpcmVkKSB7Ci0gICAgICBjeHhTdGFuZGFyZFJlcXVpcmVkID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdPYmpDU3RhbmRhcmRSZXF1aXJlZCkgewotICAgICAgb2JqY1N0YW5kYXJkUmVxdWlyZWQgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ09iakN4eFN0YW5kYXJkUmVxdWlyZWQpIHsKLSAgICAgIG9iamN4eFN0YW5kYXJkUmVxdWlyZWQgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0N1ZGFTdGFuZGFyZFJlcXVpcmVkKSB7Ci0gICAgICBjdWRhU3RhbmRhcmRSZXF1aXJlZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ0V4dGVuc2lvbnMpIHsKLSAgICAgIGNFeHRlbnNpb25zID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDeHhFeHRlbnNpb25zKSB7Ci0gICAgICBjeHhFeHRlbnNpb25zID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdPYmpDRXh0ZW5zaW9ucykgewotICAgICAgb2JqY0V4dGVuc2lvbnMgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ09iakN4eEV4dGVuc2lvbnMpIHsKLSAgICAgIG9iamN4eEV4dGVuc2lvbnMgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0N1ZGFFeHRlbnNpb25zKSB7Ci0gICAgICBjdWRhRXh0ZW5zaW9ucyA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nU291cmNlcykgewogICAgICAgc291cmNlcy5wdXNoX2JhY2soYXJndltpXSk7CiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0NNYWtlSW50ZXJuYWwpIHsKQEAgLTQxNSw1OSArNDE1LDIyIEBACiAgICAgcmV0dXJuIC0xOwogICB9CiAKLSAgaWYgKGRpZENTdGFuZGFyZCAmJiAhdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgewotICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAiQ19TVEFOREFSRCBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoZGlkQ3h4U3RhbmRhcmQgJiYgIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKLSAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgIkNYWF9TVEFOREFSRCBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoZGlkQ3VkYVN0YW5kYXJkICYmICF0aGlzLT5TcmNGaWxlU2lnbmF0dXJlKSB7Ci0gICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICJDVURBX1NUQU5EQVJEIGFsbG93ZWQgb25seSBpbiBzb3VyY2UgZmlsZSBzaWduYXR1cmUuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmIChkaWRDU3RhbmRhcmRSZXF1aXJlZCAmJiAhdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgewotICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAiQ19TVEFOREFSRF9SRVFVSVJFRCBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoZGlkQ3h4U3RhbmRhcmRSZXF1aXJlZCAmJiAhdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgewotICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAiQ1hYX1NUQU5EQVJEX1JFUVVJUkVEIGFsbG93ZWQgb25seSBpbiBzb3VyY2UgZmlsZSBzaWduYXR1cmUuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmIChkaWRDdWRhU3RhbmRhcmRSZXF1aXJlZCAmJiAhdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgewotICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAiQ1VEQV9TVEFOREFSRF9SRVFVSVJFRCBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoZGlkQ0V4dGVuc2lvbnMgJiYgIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKLSAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgIkNfRVhURU5TSU9OUyBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoZGlkQ3h4RXh0ZW5zaW9ucyAmJiAhdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgewotICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAiQ1hYX0VYVEVOU0lPTlMgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWYgKGRpZEN1ZGFFeHRlbnNpb25zICYmICF0aGlzLT5TcmNGaWxlU2lnbmF0dXJlKSB7Ci0gICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICJDVURBX0VYVEVOU0lPTlMgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKTsKLSAgICByZXR1cm4gLTE7CisgIGlmICghdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgeworICAgIGlmICghY1N0YXRlLlZhbGlkYXRlKHRoaXMtPk1ha2VmaWxlKSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoIWN1ZGFTdGF0ZS5WYWxpZGF0ZSh0aGlzLT5NYWtlZmlsZSkpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFjeHhTdGF0ZS5WYWxpZGF0ZSh0aGlzLT5NYWtlZmlsZSkpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFvYmpjU3RhdGUuVmFsaWRhdGUodGhpcy0+TWFrZWZpbGUpKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICghb2JqY3h4U3RhdGUuVmFsaWRhdGUodGhpcy0+TWFrZWZpbGUpKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQogICB9CiAKICAgLy8gY29tcHV0ZSB0aGUgYmluYXJ5IGRpciB3aGVuIFRSWV9DT01QSUxFIGlzIGNhbGxlZCB3aXRoIGEgc3JjIGZpbGUKQEAgLTU3MSw2ICs1MzQsMTQgQEAKICAgICAgICAgICAgICAgKm1zdmNSdW50aW1lTGlicmFyeURlZmF1bHQgPyAiTkVXIiA6ICJPTEQiKTsKICAgICB9CiAKKyAgICAvKiBTZXQgQ1VEQSBhcmNoaXRlY3R1cmVzIHBvbGljeSB0byBtYXRjaCBvdXRlciBwcm9qZWN0LiAgKi8KKyAgICBpZiAodGhpcy0+TWFrZWZpbGUtPkdldFBvbGljeVN0YXR1cyhjbVBvbGljaWVzOjpDTVAwMTA0KSAhPQorICAgICAgICAgIGNtUG9saWNpZXM6Ok5FVyAmJgorICAgICAgICB0ZXN0TGFuZ3MuZmluZCgiQ1VEQSIpICE9IHRlc3RMYW5ncy5lbmQoKSAmJgorICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oa0NNQUtFX0NVREFfQVJDSElURUNUVVJFUykuZW1wdHkoKSkgeworICAgICAgZnByaW50Zihmb3V0LCAiY21ha2VfcG9saWN5KFNFVCBDTVAwMTA0IE9MRClcbiIpOworICAgIH0KKwogICAgIHN0ZDo6c3RyaW5nIHByb2plY3RMYW5nczsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsaSA6IHRlc3RMYW5ncykgewogICAgICAgcHJvamVjdExhbmdzICs9ICIgIiArIGxpOwpAQCAtNzE3LDEwICs2ODgsMjMgQEAKICAgICAvLyBGb3J3YXJkIGEgc2V0IG9mIHZhcmlhYmxlcyB0byB0aGUgaW5uZXIgcHJvamVjdCBjYWNoZS4KICAgICB7CiAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gdmFyczsKLSAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DX0NPTVBJTEVSX0VYVEVSTkFMX1RPT0xDSEFJTik7Ci0gICAgICB2YXJzLmluc2VydChrQ01BS0VfQ19DT01QSUxFUl9UQVJHRVQpOwotICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0NYWF9DT01QSUxFUl9FWFRFUk5BTF9UT09MQ0hBSU4pOwotICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0NYWF9DT01QSUxFUl9UQVJHRVQpOworICAgICAgdmFycy5pbnNlcnQoJmNfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgICAgICAgICAgICZjX3Byb3BlcnRpZXNbbGFuZ19wcm9wZXJ0eV9zdGFydCArIGxhbmdfcHJvcGVydHlfc2l6ZV0pOworICAgICAgdmFycy5pbnNlcnQoJmN4eF9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgJmN4eF9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnQgKyBsYW5nX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgIHZhcnMuaW5zZXJ0KCZjdWRhX3Byb3BlcnRpZXNbbGFuZ19wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICAgICAgICAgICAmY3VkYV9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnQgKyBsYW5nX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgIHZhcnMuaW5zZXJ0KAorICAgICAgICAmZm9ydHJhbl9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAmZm9ydHJhbl9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnQgKyBsYW5nX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgIHZhcnMuaW5zZXJ0KCZvYmpjX3Byb3BlcnRpZXNbbGFuZ19wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICAgICAgICAgICAmb2JqY19wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnQgKyBsYW5nX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgIHZhcnMuaW5zZXJ0KAorICAgICAgICAmb2JqY3h4X3Byb3BlcnRpZXNbbGFuZ19wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICZvYmpjeHhfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0ICsgbGFuZ19wcm9wZXJ0eV9zaXplXSk7CisgICAgICB2YXJzLmluc2VydCgmc3dpZnRfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgICAgICAgICAgICZzd2lmdF9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnQgKyBsYW5nX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZKTsKICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9FTkFCTEVfRVhQT1JUUyk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfTElOS19TRUFSQ0hfRU5EX1NUQVRJQyk7CkBAIC03MzMsNyArNzE3LDYgQEAKICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9TWVNST09UKTsKICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9TWVNST09UX0NPTVBJTEUpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX1NZU1JPT1RfTElOSyk7Ci0gICAgICB2YXJzLmluc2VydChrQ01BS0VfU3dpZnRfQ09NUElMRVJfVEFSR0VUKTsKICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9XQVJOX0RFUFJFQ0FURUQpOwogICAgICAgdmFycy5lbXBsYWNlKCJDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWSJfcyk7CiAKQEAgLTc0NywxMCArNzMwLDIyIEBACiAgICAgICAgICAgY21Qb2xpY2llczo6TkVXKSB7CiAgICAgICAgIC8vIFRvIGVuc3VyZSBmdWxsIHN1cHBvcnQgb2YgUElFLCBwcm9wYWdhdGUgY2FjaGUgdmFyaWFibGVzCiAgICAgICAgIC8vIGRyaXZpbmcgdGhlIGxpbmsgb3B0aW9ucwotICAgICAgICB2YXJzLmluc2VydChrQ01BS0VfQ19MSU5LX1BJRV9TVVBQT1JURUQpOwotICAgICAgICB2YXJzLmluc2VydChrQ01BS0VfQ19MSU5LX05PX1BJRV9TVVBQT1JURUQpOwotICAgICAgICB2YXJzLmluc2VydChrQ01BS0VfQ1hYX0xJTktfUElFX1NVUFBPUlRFRCk7Ci0gICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DWFhfTElOS19OT19QSUVfU1VQUE9SVEVEKTsKKyAgICAgICAgdmFycy5pbnNlcnQoJmNfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgICAmY19wcm9wZXJ0aWVzW3BpZV9wcm9wZXJ0eV9zdGFydCArIHBpZV9wcm9wZXJ0eV9zaXplXSk7CisgICAgICAgIHZhcnMuaW5zZXJ0KCZjeHhfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgICAmY3h4X3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0ICsgcGllX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgICAgdmFycy5pbnNlcnQoJmN1ZGFfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgICAmY3VkYV9wcm9wZXJ0aWVzW3BpZV9wcm9wZXJ0eV9zdGFydCArIHBpZV9wcm9wZXJ0eV9zaXplXSk7CisgICAgICAgIHZhcnMuaW5zZXJ0KAorICAgICAgICAgICZmb3J0cmFuX3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgICAmZm9ydHJhbl9wcm9wZXJ0aWVzW3BpZV9wcm9wZXJ0eV9zdGFydCArIHBpZV9wcm9wZXJ0eV9zaXplXSk7CisgICAgICAgIHZhcnMuaW5zZXJ0KCZvYmpjX3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgICAgICAgICAgICAgJm9iamNfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnQgKyBwaWVfcHJvcGVydHlfc2l6ZV0pOworICAgICAgICB2YXJzLmluc2VydCgKKyAgICAgICAgICAmb2JqY3h4X3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgICAmb2JqY3h4X3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0ICsgcGllX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgICAgdmFycy5pbnNlcnQoJnN3aWZ0X3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgICAgICAgICAgICAgJnN3aWZ0X3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0ICsgcGllX3Byb3BlcnR5X3NpemVdKTsKICAgICAgIH0KIAogICAgICAgLyogZm9yIHRoZSBUUllfQ09NUElMRXMgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgdGhlIGFyY2hpdGVjdHVyZS4KQEAgLTgxMywyMSArODA4LDE3IEBACiAgICAgfQogICAgIGZwcmludGYoZm91dCwgIilcbiIpOwogCi0gICAgYm9vbCBjb25zdCB0ZXN0QyA9IHRlc3RMYW5ncy5maW5kKCJDIikgIT0gdGVzdExhbmdzLmVuZCgpOwotICAgIGJvb2wgY29uc3QgdGVzdE9iakMgPSB0ZXN0TGFuZ3MuZmluZCgiT0JKQyIpICE9IHRlc3RMYW5ncy5lbmQoKTsKLSAgICBib29sIGNvbnN0IHRlc3RDeHggPSB0ZXN0TGFuZ3MuZmluZCgiQ1hYIikgIT0gdGVzdExhbmdzLmVuZCgpOwotICAgIGJvb2wgY29uc3QgdGVzdE9iakN4eCA9IHRlc3RMYW5ncy5maW5kKCJPQkpDWFgiKSAhPSB0ZXN0TGFuZ3MuZW5kKCk7Ci0gICAgYm9vbCBjb25zdCB0ZXN0Q3VkYSA9IHRlc3RMYW5ncy5maW5kKCJDVURBIikgIT0gdGVzdExhbmdzLmVuZCgpOworICAgIGNTdGF0ZS5FbmFibGVkKHRlc3RMYW5ncy5maW5kKCJDIikgIT0gdGVzdExhbmdzLmVuZCgpKTsKKyAgICBjeHhTdGF0ZS5FbmFibGVkKHRlc3RMYW5ncy5maW5kKCJDWFgiKSAhPSB0ZXN0TGFuZ3MuZW5kKCkpOworICAgIGN1ZGFTdGF0ZS5FbmFibGVkKHRlc3RMYW5ncy5maW5kKCJDVURBIikgIT0gdGVzdExhbmdzLmVuZCgpKTsKKyAgICBvYmpjU3RhdGUuRW5hYmxlZCh0ZXN0TGFuZ3MuZmluZCgiT0JKQyIpICE9IHRlc3RMYW5ncy5lbmQoKSk7CisgICAgb2JqY3h4U3RhdGUuRW5hYmxlZCh0ZXN0TGFuZ3MuZmluZCgiT0JKQ1hYIikgIT0gdGVzdExhbmdzLmVuZCgpKTsKIAogICAgIGJvb2wgd2FybkNNUDAwNjcgPSBmYWxzZTsKICAgICBib29sIGhvbm9yU3RhbmRhcmQgPSB0cnVlOwogCi0gICAgaWYgKCFkaWRDU3RhbmRhcmQgJiYgIWRpZEN4eFN0YW5kYXJkICYmICFkaWRPYmpDU3RhbmRhcmQgJiYKLSAgICAgICAgIWRpZE9iakN4eFN0YW5kYXJkICYmICFkaWRDdWRhU3RhbmRhcmQgJiYgIWRpZENTdGFuZGFyZFJlcXVpcmVkICYmCi0gICAgICAgICFkaWRDeHhTdGFuZGFyZFJlcXVpcmVkICYmICFkaWRPYmpDU3RhbmRhcmRSZXF1aXJlZCAmJgotICAgICAgICAhZGlkT2JqQ3h4U3RhbmRhcmRSZXF1aXJlZCAmJiAhZGlkQ3VkYVN0YW5kYXJkUmVxdWlyZWQgJiYKLSAgICAgICAgIWRpZENFeHRlbnNpb25zICYmICFkaWRDeHhFeHRlbnNpb25zICYmICFkaWRPYmpDRXh0ZW5zaW9ucyAmJgotICAgICAgICAhZGlkT2JqQ3h4RXh0ZW5zaW9ucyAmJiAhZGlkQ3VkYUV4dGVuc2lvbnMpIHsKKyAgICBpZiAoY1N0YXRlLkRpZE5vbmUoKSAmJiBjeHhTdGF0ZS5EaWROb25lKCkgJiYgb2JqY1N0YXRlLkRpZE5vbmUoKSAmJgorICAgICAgICBvYmpjeHhTdGF0ZS5EaWROb25lKCkgJiYgY3VkYVN0YXRlLkRpZE5vbmUoKSkgewogICAgICAgc3dpdGNoICh0aGlzLT5NYWtlZmlsZS0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNjcpKSB7CiAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6V0FSTjoKICAgICAgICAgICB3YXJuQ01QMDA2NyA9IHRoaXMtPk1ha2VmaWxlLT5Qb2xpY3lPcHRpb25hbFdhcm5pbmdFbmFibGVkKApAQCAtODQ5LDQ2ICs4NDAsMjAgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaG9ub3JTdGFuZGFyZCB8fCB3YXJuQ01QMDA2NykgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB3YXJuQ01QMDA2N1ZhcmlhYmxlczsKIAotICAgICAgYXV0byB0ZXN0TGFuZ3VhZ2UgPQotICAgICAgICBbJl0oYm9vbCB0ZXN0TGFuZywgYm9vbCBkaWRMYW5nU3RhbmRhcmQsIGJvb2wgZGlkTGFuZ1N0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICBib29sIGRpZExhbmdFeHRlbnNpb25zLCBzdGQ6OnN0cmluZyYgbGFuZ1N0YW5kYXJkLAotICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxhbmdTdGFuZGFyZFJlcXVpcmVkLCBzdGQ6OnN0cmluZyYgbGFuZ0V4dGVuc2lvbnMsCi0gICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykgewotICAgICAgICAgIGlmICh0ZXN0TGFuZykgewotICAgICAgICAgICAgaWYgKCFkaWRMYW5nU3RhbmRhcmQpIHsKLSAgICAgICAgICAgICAgbGFuZ1N0YW5kYXJkID0gdGhpcy0+TG9va3VwU3RkVmFyKAotICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEIiksIHdhcm5DTVAwMDY3KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZGlkTGFuZ1N0YW5kYXJkUmVxdWlyZWQpIHsKLSAgICAgICAgICAgICAgbGFuZ1N0YW5kYXJkUmVxdWlyZWQgPSB0aGlzLT5Mb29rdXBTdGRWYXIoCi0gICAgICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfU1RBTkRBUkRfUkVRVUlSRUQiKSwgd2FybkNNUDAwNjcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFkaWRMYW5nRXh0ZW5zaW9ucykgewotICAgICAgICAgICAgICBsYW5nRXh0ZW5zaW9ucyA9IHRoaXMtPkxvb2t1cFN0ZFZhcigKLSAgICAgICAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9FWFRFTlNJT05TIiksIHdhcm5DTVAwMDY3KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgY1N0YXRlLkxvYWRVbnNldFByb3BlcnR5VmFsdWVzKHRoaXMtPk1ha2VmaWxlLCBob25vclN0YW5kYXJkLCB3YXJuQ01QMDA2NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybkNNUDAwNjdWYXJpYWJsZXMpOworICAgIGN4eFN0YXRlLkxvYWRVbnNldFByb3BlcnR5VmFsdWVzKHRoaXMtPk1ha2VmaWxlLCBob25vclN0YW5kYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5DTVAwMDY3LCB3YXJuQ01QMDA2N1ZhcmlhYmxlcyk7CisgICAgY3VkYVN0YXRlLkxvYWRVbnNldFByb3BlcnR5VmFsdWVzKHRoaXMtPk1ha2VmaWxlLCBob25vclN0YW5kYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuQ01QMDA2Nywgd2FybkNNUDAwNjdWYXJpYWJsZXMpOworICAgIG9iamNTdGF0ZS5Mb2FkVW5zZXRQcm9wZXJ0eVZhbHVlcyh0aGlzLT5NYWtlZmlsZSwgaG9ub3JTdGFuZGFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybkNNUDAwNjcsIHdhcm5DTVAwMDY3VmFyaWFibGVzKTsKKyAgICBvYmpjeHhTdGF0ZS5Mb2FkVW5zZXRQcm9wZXJ0eVZhbHVlcyh0aGlzLT5NYWtlZmlsZSwgaG9ub3JTdGFuZGFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuQ01QMDA2Nywgd2FybkNNUDAwNjdWYXJpYWJsZXMpOwogCi0gICAgICB0ZXN0TGFuZ3VhZ2UodGVzdEMsIGRpZENTdGFuZGFyZCwgZGlkQ1N0YW5kYXJkUmVxdWlyZWQsIGRpZENFeHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgIGNTdGFuZGFyZCwgY1N0YW5kYXJkUmVxdWlyZWQsIGNFeHRlbnNpb25zLCAiQyIpOwotICAgICAgdGVzdExhbmd1YWdlKHRlc3RPYmpDLCBkaWRPYmpDU3RhbmRhcmQsIGRpZE9iakNTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgIGRpZE9iakNFeHRlbnNpb25zLCBvYmpjU3RhbmRhcmQsIG9iamNTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgIG9iamNFeHRlbnNpb25zLCAiT0JKQyIpOwotICAgICAgdGVzdExhbmd1YWdlKHRlc3RDeHgsIGRpZEN4eFN0YW5kYXJkLCBkaWRDeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgIGRpZEN4eEV4dGVuc2lvbnMsIGN4eFN0YW5kYXJkLCBjeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgIGN4eEV4dGVuc2lvbnMsICJDWFgiKTsKLSAgICAgIHRlc3RMYW5ndWFnZSh0ZXN0T2JqQ3h4LCBkaWRPYmpDeHhTdGFuZGFyZCwgZGlkT2JqQ3h4U3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICBkaWRPYmpDeHhFeHRlbnNpb25zLCBvYmpjeHhTdGFuZGFyZCwgb2JqY3h4U3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICBvYmpjeHhFeHRlbnNpb25zLCAiT0JKQ1hYIik7Ci0gICAgICB0ZXN0TGFuZ3VhZ2UodGVzdEN1ZGEsIGRpZEN1ZGFTdGFuZGFyZCwgZGlkQ3VkYVN0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgZGlkQ3VkYUV4dGVuc2lvbnMsIGN1ZGFTdGFuZGFyZCwgY3VkYVN0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgY3VkYUV4dGVuc2lvbnMsICJDVURBIik7Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzLT5XYXJuQ01QMDA2Ny5lbXB0eSgpKSB7CisgICAgaWYgKCF3YXJuQ01QMDA2N1ZhcmlhYmxlcy5lbXB0eSgpKSB7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdzsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgICAgIHcgPDwgY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhjbVBvbGljaWVzOjpDTVAwMDY3KSA8PCAiXG4iCkBAIC04OTYsNDMgKzg2MSwxNyBAQAogICAgICAgICAiaXMgbm90IGhvbm9yaW5nIGxhbmd1YWdlIHN0YW5kYXJkIHZhcmlhYmxlcyBpbiB0aGUgdGVzdCBwcm9qZWN0OlxuIgogICAgICAgICA7CiAgICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KLSAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHZpIDogdGhpcy0+V2FybkNNUDAwNjcpIHsKKyAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHZpIDogd2FybkNNUDAwNjdWYXJpYWJsZXMpIHsKICAgICAgICAgdyA8PCAiICAiIDw8IHZpIDw8ICJcbiI7CiAgICAgICB9CiAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywgdy5zdHIoKSk7CiAgICAgfQogCi0gICAgYXV0byB3cml0ZUxhbmd1YWdlUHJvcGVydGllcyA9IFsmXShib29sIHRlc3RMYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmdTdGFuZGFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nU3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nRXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKSB7Ci0gICAgICBpZiAodGVzdExhbmcpIHsKLSAgICAgICAgaWYgKCFsYW5nU3RhbmRhcmQuZW1wdHkoKSkgewotICAgICAgICAgIHdyaXRlUHJvcGVydHkoZm91dCwgdGFyZ2V0TmFtZSwgY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ1N0YW5kYXJkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxhbmdTdGFuZGFyZFJlcXVpcmVkLmVtcHR5KCkpIHsKLSAgICAgICAgICB3cml0ZVByb3BlcnR5KGZvdXQsIHRhcmdldE5hbWUsIGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkRfUkVRVUlSRUQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdTdGFuZGFyZFJlcXVpcmVkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxhbmdFeHRlbnNpb25zLmVtcHR5KCkpIHsKLSAgICAgICAgICB3cml0ZVByb3BlcnR5KGZvdXQsIHRhcmdldE5hbWUsIGNtU3RyQ2F0KGxhbmcsICJfRVhURU5TSU9OUyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ0V4dGVuc2lvbnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIHdyaXRlTGFuZ3VhZ2VQcm9wZXJ0aWVzKHRlc3RDLCBjU3RhbmRhcmQsIGNTdGFuZGFyZFJlcXVpcmVkLCBjRXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQyIpOwotICAgIHdyaXRlTGFuZ3VhZ2VQcm9wZXJ0aWVzKHRlc3RPYmpDLCBvYmpjU3RhbmRhcmQsIG9iamNTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamNFeHRlbnNpb25zLCAiT0JKQyIpOwotICAgIHdyaXRlTGFuZ3VhZ2VQcm9wZXJ0aWVzKHRlc3RDeHgsIGN4eFN0YW5kYXJkLCBjeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4eEV4dGVuc2lvbnMsICJDWFgiKTsKLSAgICB3cml0ZUxhbmd1YWdlUHJvcGVydGllcyh0ZXN0T2JqQ3h4LCBvYmpjeHhTdGFuZGFyZCwgb2JqY3h4U3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpjeHhFeHRlbnNpb25zLCAiT0JKQ1hYIik7Ci0gICAgd3JpdGVMYW5ndWFnZVByb3BlcnRpZXModGVzdEN1ZGEsIGN1ZGFTdGFuZGFyZCwgY3VkYVN0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VkYUV4dGVuc2lvbnMsICJDVURBIik7CisgICAgY1N0YXRlLldyaXRlUHJvcGVydGllcyhmb3V0LCB0YXJnZXROYW1lKTsKKyAgICBjeHhTdGF0ZS5Xcml0ZVByb3BlcnRpZXMoZm91dCwgdGFyZ2V0TmFtZSk7CisgICAgY3VkYVN0YXRlLldyaXRlUHJvcGVydGllcyhmb3V0LCB0YXJnZXROYW1lKTsKKyAgICBvYmpjU3RhdGUuV3JpdGVQcm9wZXJ0aWVzKGZvdXQsIHRhcmdldE5hbWUpOworICAgIG9iamN4eFN0YXRlLldyaXRlUHJvcGVydGllcyhmb3V0LCB0YXJnZXROYW1lKTsKIAogICAgIGlmICghbGlua09wdGlvbnMuZW1wdHkoKSkgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdGlvbnM7CkBAIC0xMDQ0LDcgKzk4Myw5IEBACiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBkZWxldGVkRmlsZXM7CiAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGRpci5HZXROdW1iZXJPZkZpbGVzKCk7ICsraSkgewogICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1lID0gZGlyLkdldEZpbGUoaSk7Ci0gICAgaWYgKHN0cmNtcChmaWxlTmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChmaWxlTmFtZSwgIi4uIikgIT0gMCkgeworICAgIGlmIChzdHJjbXAoZmlsZU5hbWUsICIuIikgIT0gMCAmJiBzdHJjbXAoZmlsZU5hbWUsICIuLiIpICE9IDAgJiYKKyAgICAgICAgLy8gRG8gbm90IGRlbGV0ZSBORlMgdGVtcG9yYXJ5IGZpbGVzLgorICAgICAgICAhY21IYXNQcmVmaXgoZmlsZU5hbWUsICIubmZzIikpIHsKICAgICAgIGlmIChkZWxldGVkRmlsZXMuaW5zZXJ0KGZpbGVOYW1lKS5zZWNvbmQpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZnVsbFBhdGggPQogICAgICAgICAgIHN0ZDo6c3RyaW5nKGJpbkRpcikuYXBwZW5kKCIvIikuYXBwZW5kKGZpbGVOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvcmVUcnlDb21waWxlLmggYi9Tb3VyY2UvY21Db3JlVHJ5Q29tcGlsZS5oCmluZGV4IGFlNzE0YTYuLjkxNjU3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvcmVUcnlDb21waWxlLmgKKysrIGIvU291cmNlL2NtQ29yZVRyeUNvbXBpbGUuaApAQCAtNDcsMTAgKzQ3LDYgQEAKICAgc3RkOjpzdHJpbmcgT3V0cHV0RmlsZTsKICAgc3RkOjpzdHJpbmcgRmluZEVycm9yTWVzc2FnZTsKICAgYm9vbCBTcmNGaWxlU2lnbmF0dXJlID0gZmFsc2U7Ci0KLXByaXZhdGU6Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBXYXJuQ01QMDA2NzsKLSAgc3RkOjpzdHJpbmcgTG9va3VwU3RkVmFyKHN0ZDo6c3RyaW5nIGNvbnN0JiB2YXIsIGJvb2wgd2FybkNNUDAwNjcpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DcmVhdGVUZXN0U291cmNlTGlzdC5jeHggYi9Tb3VyY2UvY21DcmVhdGVUZXN0U291cmNlTGlzdC5jeHgKaW5kZXggOWQ0OTJiYS4uOWM0ZGVlYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ3JlYXRlVGVzdFNvdXJjZUxpc3QuY3h4CisrKyBiL1NvdXJjZS9jbUNyZWF0ZVRlc3RTb3VyY2VMaXN0LmN4eApAQCAtMTI3LDcgKzEyNyw3IEBACiAgIG1mLkFkZERlZmluaXRpb24oIkNNQUtFX0ZPUldBUkRfREVDTEFSRV9URVNUUyIsIGZvcndhcmREZWNsYXJlQ29kZSk7CiAgIG1mLkFkZERlZmluaXRpb24oIkNNQUtFX0ZVTkNUSU9OX1RBQkxFX0VOVElSRVMiLCBmdW5jdGlvbk1hcENvZGUpOwogICBib29sIHJlcyA9IHRydWU7Ci0gIGlmICghbWYuQ29uZmlndXJlRmlsZShjb25maWdGaWxlLCBkcml2ZXIsIGZhbHNlLCB0cnVlLCBmYWxzZSkpIHsKKyAgaWYgKCFtZi5Db25maWd1cmVGaWxlKGNvbmZpZ0ZpbGUsIGRyaXZlciwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlKSkgewogICAgIHJlcyA9IGZhbHNlOwogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNyeXB0b0hhc2guY3h4IGIvU291cmNlL2NtQ3J5cHRvSGFzaC5jeHgKaW5kZXggZGM3ZDkzOS4uYjFlNjNiYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ3J5cHRvSGFzaC5jeHgKKysrIGIvU291cmNlL2NtQ3J5cHRvSGFzaC5jeHgKQEAgLTQsMTAgKzQsMTAgQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KIAotI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CisjaW5jbHVkZSA8Y20zcC9yaGFzaC5oPgogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKLSNpbmNsdWRlICJjbV9yaGFzaC5oIgorI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGNtQ3J5cHRvSGFzaEFsZ29Ub0lkW10gPSB7CiAgIC8qIGNsYW5nLWZvcm1hdCBuZWVkcyB0aGlzIGNvbW1lbnQgdG8gYnJlYWsgYWZ0ZXIgdGhlIG9wZW5pbmcgYnJhY2UgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUN1cmwuaCBiL1NvdXJjZS9jbUN1cmwuaAppbmRleCBjYjczY2U2Li43YmQwMzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DdXJsLmgKKysrIGIvU291cmNlL2NtQ3VybC5oCkBAIC03LDcgKzcsNyBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaW5jbHVkZSAiY21fY3VybC5oIgorI2luY2x1ZGUgPGNtM3AvY3VybC9jdXJsLmg+CiAKIHN0ZDo6c3RyaW5nIGNtQ3VybFNldENBSW5mbyg6OkNVUkwqIGN1cmwsIGNvbnN0IGNoYXIqIGNhZmlsZSA9IG51bGxwdHIpOwogc3RkOjpzdHJpbmcgY21DdXJsU2V0TkVUUkNPcHRpb24oOjpDVVJMKiBjdXJsLCBjb25zdCBzdGQ6OnN0cmluZyYgbmV0cmNfbGV2ZWwsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmN4eCBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmQuY3h4CmluZGV4IDBkZDg3MjIuLjE0OWY1ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmQuY3h4CkBAIC0xMSw3ICsxMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRMaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCwgY29uc3QgY2hhciogY29tbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGRQaXBlc1VURjgpCiAgIDogT3V0cHV0cyhzdGQ6Om1vdmUob3V0cHV0cykpCiAgICwgQnlwcm9kdWN0cyhzdGQ6Om1vdmUoYnlwcm9kdWN0cykpCiAgICwgRGVwZW5kcyhzdGQ6Om1vdmUoZGVwZW5kcykpCkBAIC0yMCw2ICsyMSw3IEBACiAgICwgQ29tbWVudChjb21tZW50ID8gY29tbWVudCA6ICIiKQogICAsIFdvcmtpbmdEaXJlY3Rvcnkod29ya2luZ0RpcmVjdG9yeSA/IHdvcmtpbmdEaXJlY3RvcnkgOiAiIikKICAgLCBIYXZlQ29tbWVudChjb21tZW50ICE9IG51bGxwdHIpCisgICwgU3RkUGlwZXNVVEY4KHN0ZFBpcGVzVVRGOCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ3VzdG9tQ29tbWFuZC5oIGIvU291cmNlL2NtQ3VzdG9tQ29tbWFuZC5oCmluZGV4IGQzMDBmYTUuLmFhNTcyYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmQuaAorKysgYi9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmgKQEAgLTMwLDcgKzMwLDggQEAKICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBieXByb2R1Y3RzLAogICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMsCiAgICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXJlY3RvcnkpOworICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgIGJvb2wgc3RkUGlwZXNVVEY4KTsKIAogICAvKiogR2V0IHRoZSBvdXRwdXQgZmlsZSBwcm9kdWNlZCBieSB0aGUgY29tbWFuZC4gICovCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgR2V0T3V0cHV0cygpIGNvbnN0OwpAQCAtNTMsNiArNTQsOSBAQAogICAvKiogR2V0IHRoZSBjb21tZW50IHN0cmluZyBmb3IgdGhlIGNvbW1hbmQuICAqLwogICBjb25zdCBjaGFyKiBHZXRDb21tZW50KCkgY29uc3Q7CiAKKyAgLyoqIEdldCBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIGNvbW1hbmQgdXNlcyBVVEYtOCBvdXRwdXQgcGlwZXMuICovCisgIGJvb2wgR2V0U3RkUGlwZXNVVEY4KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3RkUGlwZXNVVEY4OyB9CisKICAgLyoqIEFwcGVuZCB0byB0aGUgbGlzdCBvZiBjb21tYW5kIGxpbmVzLiAgKi8KICAgdm9pZCBBcHBlbmRDb21tYW5kcyhjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzKTsKIApAQCAtMTA4LDYgKzExMiw3IEBACiAgIGJvb2wgRXNjYXBlT2xkU3R5bGUgPSB0cnVlOwogICBib29sIFVzZXNUZXJtaW5hbCA9IGZhbHNlOwogICBib29sIENvbW1hbmRFeHBhbmRMaXN0cyA9IGZhbHNlOworICBib29sIFN0ZFBpcGVzVVRGOCA9IGZhbHNlOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CmluZGV4IDI0MzJkMmIuLjYwNTA0YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0xMTEsMTMgKzExMiwxMyBAQAogICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFICYmCiAgICAgICAgICF0YXJnZXQtPklzSW1wb3J0ZWQoKSkgewogCi0gICAgICBjb25zdCBjaGFyKiBlbXVsYXRvcl9wcm9wZXJ0eSA9CisgICAgICBjbVByb3AgZW11bGF0b3JfcHJvcGVydHkgPQogICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJDUk9TU0NPTVBJTElOR19FTVVMQVRPUiIpOwogICAgICAgaWYgKCFlbXVsYXRvcl9wcm9wZXJ0eSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAotICAgICAgY21FeHBhbmRMaXN0KGVtdWxhdG9yX3Byb3BlcnR5LCB0aGlzLT5FbXVsYXRvcnNXaXRoQXJndW1lbnRzW2NdKTsKKyAgICAgIGNtRXhwYW5kTGlzdCgqZW11bGF0b3JfcHJvcGVydHksIHRoaXMtPkVtdWxhdG9yc1dpdGhBcmd1bWVudHNbY10pOwogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVmaW5lUHJvcGVydHlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbURlZmluZVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggZjRlNGZkYS4uNGUyZDliMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVmaW5lUHJvcGVydHlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21EZWZpbmVQcm9wZXJ0eUNvbW1hbmQuY3h4CkBAIC05NSw3ICs5NSw3IEBACiAKICAgLy8gQWN0dWFsbHkgZGVmaW5lIHRoZSBwcm9wZXJ0eS4KICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+RGVmaW5lUHJvcGVydHkoCi0gICAgUHJvcGVydHlOYW1lLCBzY29wZSwgQnJpZWZEb2NzLmNfc3RyKCksIEZ1bGxEb2NzLmNfc3RyKCksIGluaGVyaXRlZCk7CisgICAgUHJvcGVydHlOYW1lLCBzY29wZSwgQnJpZWZEb2NzLCBGdWxsRG9jcywgaW5oZXJpdGVkKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbURlZmluaXRpb25zLmN4eCBiL1NvdXJjZS9jbURlZmluaXRpb25zLmN4eAppbmRleCA2OWE2NDI3Li40YTRmODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZWZpbml0aW9ucy5jeHgKKysrIGIvU291cmNlL2NtRGVmaW5pdGlvbnMuY3h4CkBAIC0xOSw3ICsxOSw2IEBACiAgIHsKICAgICBhdXRvIGl0ID0gYmVnaW4tPk1hcC5maW5kKGNtOjpTdHJpbmc6OmJvcnJvdyhrZXkpKTsKICAgICBpZiAoaXQgIT0gYmVnaW4tPk1hcC5lbmQoKSkgewotICAgICAgaXQtPnNlY29uZC5Vc2VkID0gdHJ1ZTsKICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwogICAgIH0KICAgfQpAQCAtMTA4LDE2ICsxMDcsMyBAQAogewogICB0aGlzLT5NYXBba2V5XSA9IERlZigpOwogfQotCi1zdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21EZWZpbml0aW9uczo6VW51c2VkS2V5cygpIGNvbnN0Ci17Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBrZXlzOwotICBrZXlzLnJlc2VydmUodGhpcy0+TWFwLnNpemUoKSk7Ci0gIC8vIENvbnNpZGVyIGxvY2FsIGRlZmluaXRpb25zLgotICBmb3IgKGF1dG8gY29uc3QmIG1pIDogdGhpcy0+TWFwKSB7Ci0gICAgaWYgKCFtaS5zZWNvbmQuVXNlZCkgewotICAgICAga2V5cy5wdXNoX2JhY2soKm1pLmZpcnN0LnN0cl9pZl9zdGFibGUoKSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBrZXlzOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVmaW5pdGlvbnMuaCBiL1NvdXJjZS9jbURlZmluaXRpb25zLmgKaW5kZXggMGUzOGZiMS4uZDU3NzUwYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVmaW5pdGlvbnMuaAorKysgYi9Tb3VyY2UvY21EZWZpbml0aW9ucy5oCkBAIC00OCw5ICs0OCw2IEBACiAgIC8qKiBVbnNldCBhIGRlZmluaXRpb24uICAqLwogICB2b2lkIFVuc2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpOwogCi0gIC8qKiBMaXN0IG9mIHVudXNlZCBrZXlzLiAgKi8KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFVudXNlZEtleXMoKSBjb25zdDsKLQogcHJpdmF0ZToKICAgLyoqIFN0cmluZyB3aXRoIGV4aXN0ZW5jZSBib29sZWFuLiAgKi8KICAgc3RydWN0IERlZgpAQCAtNjIsNyArNTksNiBAQAogICAgIHsKICAgICB9CiAgICAgY206OlN0cmluZyBWYWx1ZTsKLSAgICBib29sIFVzZWQgPSBmYWxzZTsKICAgfTsKICAgc3RhdGljIERlZiBOb0RlZjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kcy5jeHggYi9Tb3VyY2UvY21EZXBlbmRzLmN4eAppbmRleCAxMjlhNWY3Li5kOGFhNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZXBlbmRzLmN4eAorKysgYi9Tb3VyY2UvY21EZXBlbmRzLmN4eApAQCAtMiw3ICsyLDYgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtRGVwZW5kcy5oIgogCi0jaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC0xMCwxMiArOSwxMiBAQAogI2luY2x1ZGUgImNtRmlsZVRpbWUuaCIKICNpbmNsdWRlICJjbUZpbGVUaW1lQ2FjaGUuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKLSNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCi1jbURlcGVuZHM6OmNtRGVwZW5kcyhjbUxvY2FsR2VuZXJhdG9yKiBsZywgc3RkOjpzdHJpbmcgdGFyZ2V0RGlyKQorY21EZXBlbmRzOjpjbURlcGVuZHMoY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnLCBzdGQ6OnN0cmluZyB0YXJnZXREaXIpCiAgIDogTG9jYWxHZW5lcmF0b3IobGcpCiAgICwgVGFyZ2V0RGlyZWN0b3J5KHN0ZDo6bW92ZSh0YXJnZXREaXIpKQogewpAQCAtODEsMTYgKzgwLDE0IEBACiB7CiAgIC8vIFByaW50IHZlcmJvc2Ugb3V0cHV0LgogICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgbXNnIDw8ICJDbGVhcmluZyBkZXBlbmRlbmNpZXMgaW4gXCIiIDw8IGZpbGUgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChtc2cuc3RyKCkpOworICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dCgKKyAgICAgIGNtU3RyQ2F0KCJDbGVhcmluZyBkZXBlbmRlbmNpZXMgaW4gXCIiLCBmaWxlLCAiXCIuXG4iKSk7CiAgIH0KIAogICAvLyBXcml0ZSBhbiBlbXB0eSBkZXBlbmRlbmN5IGZpbGUuCiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBkZXBGaWxlU3RyZWFtKGZpbGUpOwogICBkZXBGaWxlU3RyZWFtIDw8ICIjIEVtcHR5IGRlcGVuZGVuY2llcyBmaWxlXG4iCi0gICAgICAgICAgICAgICAgPDwgIiMgVGhpcyBtYXkgYmUgcmVwbGFjZWQgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LiIKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgICAgICAgIiMgVGhpcyBtYXkgYmUgcmVwbGFjZWQgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LlxuIjsKIH0KIAogYm9vbCBjbURlcGVuZHM6OldyaXRlRGVwZW5kZW5jaWVzKGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgLyp1bnVzZWQqLywKQEAgLTE3MiwxMCArMTY5LDkgQEAKIAogICAgICAgLy8gUHJpbnQgdmVyYm9zZSBvdXRwdXQuCiAgICAgICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICBtc2cgPDwgIkRlcGVuZGVlIFwiIiA8PCBkZXBlbmRlZSA8PCAiXCIgZG9lcyBub3QgZXhpc3QgZm9yIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgPDwgZGVwZW5kZXIgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQobXNnLnN0cigpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGRvZXMgbm90IGV4aXN0IGZvciBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlciwgIlwiLlxuIikpOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGVwZW5kZXJFeGlzdHMpIHsKICAgICAgIC8vIFRoZSBkZXBlbmRlZSBhbmQgZGVwZW5kZXIgYm90aCBleGlzdC4gIENvbXBhcmUgZmlsZSB0aW1lcy4KQEAgLTE4NSwxMCArMTgxLDkgQEAKIAogICAgICAgICAvLyBQcmludCB2ZXJib3NlIG91dHB1dC4KICAgICAgICAgaWYgKHRoaXMtPlZlcmJvc2UpIHsKLSAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICAgIG1zZyA8PCAiRGVwZW5kZWUgXCIiIDw8IGRlcGVuZGVlIDw8ICJcIiBpcyBuZXdlciB0aGFuIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgICA8PCBkZXBlbmRlciA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVyLCAiXCIuXG4iKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjAwLDExICsxOTUsOSBAQAogCiAgICAgICAgIC8vIFByaW50IHZlcmJvc2Ugb3V0cHV0LgogICAgICAgICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgICAgICAgbXNnIDw8ICJEZXBlbmRlZSBcIiIgPDwgZGVwZW5kZWUKLSAgICAgICAgICAgICAgPDwgIlwiIGlzIG5ld2VyIHRoYW4gZGVwZW5kcyBmaWxlIFwiIiA8PCBpbnRlcm5hbERlcGVuZHNGaWxlTmFtZQotICAgICAgICAgICAgICA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRzIGZpbGUgXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbERlcGVuZHNGaWxlTmFtZSwgIlwiLlxuIikpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kcy5oIGIvU291cmNlL2NtRGVwZW5kcy5oCmluZGV4IGQ5Mzg3NzUuLjhjZjUyOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHMuaAorKysgYi9Tb3VyY2UvY21EZXBlbmRzLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKIGNsYXNzIGNtRmlsZVRpbWVDYWNoZTsKLWNsYXNzIGNtTG9jYWxHZW5lcmF0b3I7CitjbGFzcyBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzsKIAogLyoqIFxjbGFzcyBjbURlcGVuZHMKICAqIFxicmllZiBEZXBlbmRlbmN5IHNjYW5uZXIgc3VwZXJjbGFzcy4KQEAgLTI5LDcgKzI5LDggQEAKIHB1YmxpYzoKICAgLyoqIEluc3RhbmNlcyBuZWVkIHRvIGtub3cgdGhlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGFuZCB0aGUgcmVsYXRpdmUKICAgICAgIHBhdGggZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5IHRvIHRoZSB0YXJnZXQgZmlsZS4gICovCi0gIGNtRGVwZW5kcyhjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IG51bGxwdHIsIHN0ZDo6c3RyaW5nIHRhcmdldERpciA9ICIiKTsKKyAgY21EZXBlbmRzKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZyA9IG51bGxwdHIsCisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0YXJnZXREaXIgPSAiIik7CiAKICAgY21EZXBlbmRzKGNtRGVwZW5kcyBjb25zdCYpID0gZGVsZXRlOwogICBjbURlcGVuZHMmIG9wZXJhdG9yPShjbURlcGVuZHMgY29uc3QmKSA9IGRlbGV0ZTsKQEAgLTM4LDcgKzM5LDEwIEBACiAgICAgICBzY2FubmluZyBkZXBlbmRlbmNpZXMuICBUaGlzIGlzIG5vdCBhIGZ1bGwgbG9jYWwgZ2VuZXJhdG9yOyBpdAogICAgICAgaGFzIGJlZW4gc2V0dXAgdG8gZG8gcmVsYXRpdmUgcGF0aCBjb252ZXJzaW9ucyBmb3IgdGhlIGN1cnJlbnQKICAgICAgIGRpcmVjdG9yeS4gICovCi0gIHZvaWQgU2V0TG9jYWxHZW5lcmF0b3IoY21Mb2NhbEdlbmVyYXRvciogbGcpIHsgdGhpcy0+TG9jYWxHZW5lcmF0b3IgPSBsZzsgfQorICB2b2lkIFNldExvY2FsR2VuZXJhdG9yKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZykKKyAgeworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yID0gbGc7CisgIH0KIAogICAvKiogU2V0IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSB0byBiZSBzY2FubmVkLiAgKi8KICAgdm9pZCBTZXRMYW5ndWFnZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykgeyB0aGlzLT5MYW5ndWFnZSA9IGxhbmc7IH0KQEAgLTkyLDcgKzk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgaW50ZXJuYWxEZXBlbmRzKTsKIAogICAvLyBUaGUgbG9jYWwgZ2VuZXJhdG9yLgotICBjbUxvY2FsR2VuZXJhdG9yKiBMb2NhbEdlbmVyYXRvcjsKKyAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIExvY2FsR2VuZXJhdG9yOwogCiAgIC8vIEZsYWcgZm9yIHZlcmJvc2Ugb3V0cHV0LgogICBib29sIFZlcmJvc2UgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbURlcGVuZHNDLmN4eCBiL1NvdXJjZS9jbURlcGVuZHNDLmN4eAppbmRleCBlMzBkOTU5Li5lMDVjOTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZXBlbmRzQy5jeHgKKysrIGIvU291cmNlL2NtRGVwZW5kc0MuY3h4CkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCiAjaW5jbHVkZSAiY21GaWxlVGltZS5oIgotI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0yMiw4ICsyMiw5IEBACiAKIGNtRGVwZW5kc0M6OmNtRGVwZW5kc0MoKSA9IGRlZmF1bHQ7CiAKLWNtRGVwZW5kc0M6OmNtRGVwZW5kc0MoY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXREaXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBjb25zdCBEZXBlbmRlbmN5TWFwKiB2YWxpZERlcHMpCitjbURlcGVuZHNDOjpjbURlcGVuZHNDKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldERpciwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlcGVuZGVuY3lNYXAqIHZhbGlkRGVwcykKICAgOiBjbURlcGVuZHMobGcsIHRhcmdldERpcikKICAgLCBWYWxpZERlcHModmFsaWREZXBzKQogewpAQCAtMjExLDE4ICsyMTIsMTggQEAKICAgLy8gd3JpdHRlbiBieSB0aGUgb3JpZ2luYWwgbG9jYWwgZ2VuZXJhdG9yIGZvciB0aGlzIGRpcmVjdG9yeQogICAvLyBjb252ZXJ0IHRoZSBkZXBlbmRlbmNpZXMgdG8gcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGhvbWUgb3V0cHV0CiAgIC8vIGRpcmVjdG9yeS4gIFdlIG11c3QgZG8gdGhlIHNhbWUgaGVyZS4KLSAgc3RkOjpzdHJpbmcgb2JqX20gPSBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKG9ial9pKTsKLSAgaW50ZXJuYWxEZXBlbmRzIDw8IG9ial9pIDw8IHN0ZDo6ZW5kbDsKKyAgc3RkOjpzdHJpbmcgb2JqX20gPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvTWFrZWZpbGVQYXRoKG9ial9pKTsKKyAgaW50ZXJuYWxEZXBlbmRzIDw8IG9ial9pIDw8ICdcbic7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZGVwIDogZGVwZW5kZW5jaWVzKSB7CiAgICAgbWFrZURlcGVuZHMgPDwgb2JqX20gPDwgIjogIgotICAgICAgICAgICAgICAgIDw8IGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgoCisgICAgICAgICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb01ha2VmaWxlUGF0aCgKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwKSkKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgaW50ZXJuYWxEZXBlbmRzIDw8ICIgIiA8PCBkZXAgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgIDw8ICdcbic7CisgICAgaW50ZXJuYWxEZXBlbmRzIDw8ICcgJyA8PCBkZXAgPDwgJ1xuJzsKICAgfQotICBtYWtlRGVwZW5kcyA8PCBzdGQ6OmVuZGw7CisgIG1ha2VEZXBlbmRzIDw8ICdcbic7CiAKICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNjQsMTkgKzI2NSwxOSBAQAogICAgICAgLy8gZmlsZSBkb2Vzbid0IGV4aXN0LCBjaGVjayB0aGF0IHRoZSByZWd1bGFyIGV4cHJlc3Npb25zCiAgICAgICAvLyBoYXZlbid0IGNoYW5nZWQKICAgICAgIGVsc2UgaWYgKCFyZXMpIHsKLSAgICAgICAgaWYgKGxpbmUuZmluZChJTkNMVURFX1JFR0VYX0xJTkVfTUFSS0VSKSA9PSAwKSB7CisgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobGluZSwgSU5DTFVERV9SRUdFWF9MSU5FX01BUktFUikpIHsKICAgICAgICAgICBpZiAobGluZSAhPSB0aGlzLT5JbmNsdWRlUmVnZXhMaW5lU3RyaW5nKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGxpbmUuZmluZChJTkNMVURFX1JFR0VYX1NDQU5fTUFSS0VSKSA9PSAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxpbmUsIElOQ0xVREVfUkVHRVhfU0NBTl9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4U2NhblN0cmluZykgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChsaW5lLmZpbmQoSU5DTFVERV9SRUdFWF9DT01QTEFJTl9NQVJLRVIpID09IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobGluZSwgSU5DTFVERV9SRUdFWF9DT01QTEFJTl9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4Q29tcGxhaW5TdHJpbmcpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobGluZS5maW5kKElOQ0xVREVfUkVHRVhfVFJBTlNGT1JNX01BUktFUikgPT0gMCkgeworICAgICAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChsaW5lLCBJTkNMVURFX1JFR0VYX1RSQU5TRk9STV9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4VHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQpAQCAtMzEyLDE3ICszMTMsMTcgQEAKIAogICBmb3IgKGF1dG8gY29uc3QmIGZpbGVJdCA6IHRoaXMtPkZpbGVDYWNoZSkgewogICAgIGlmIChmaWxlSXQuc2Vjb25kLlVzZWQpIHsKLSAgICAgIGNhY2hlT3V0IDw8IGZpbGVJdC5maXJzdCA8PCBzdGQ6OmVuZGw7CisgICAgICBjYWNoZU91dCA8PCBmaWxlSXQuZmlyc3QgPDwgJ1xuJzsKIAogICAgICAgZm9yIChVbnNjYW5uZWRFbnRyeSBjb25zdCYgaW5jIDogZmlsZUl0LnNlY29uZC5VbnNjYW5uZWRFbnRyaWVzKSB7Ci0gICAgICAgIGNhY2hlT3V0IDw8IGluYy5GaWxlTmFtZSA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGNhY2hlT3V0IDw8IGluYy5GaWxlTmFtZSA8PCAnXG4nOwogICAgICAgICBpZiAoaW5jLlF1b3RlZExvY2F0aW9uLmVtcHR5KCkpIHsKLSAgICAgICAgICBjYWNoZU91dCA8PCAiLSIgPDwgc3RkOjplbmRsOworICAgICAgICAgIGNhY2hlT3V0IDw8ICctJyA8PCAnXG4nOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNhY2hlT3V0IDw8IGluYy5RdW90ZWRMb2NhdGlvbiA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgY2FjaGVPdXQgPDwgaW5jLlF1b3RlZExvY2F0aW9uIDw8ICdcbic7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGNhY2hlT3V0IDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGNhY2hlT3V0IDw8ICdcbic7CiAgICAgfQogICB9CiB9CkBAIC0zODMsOSArMzg0LDcgQEAKICAgLy8gR2V0IHRoZSB0cmFuc2Zvcm1hdGlvbiBydWxlcy4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRyYW5zZm9ybVJ1bGVzOwogICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZSgpOwotICBpZiAoY29uc3QgY2hhciogeGZvcm0gPSBtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfSU5DTFVERV9UUkFOU0ZPUk1TIikpIHsKLSAgICBjbUV4cGFuZExpc3QoeGZvcm0sIHRyYW5zZm9ybVJ1bGVzLCB0cnVlKTsKLSAgfQorICBtZi0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfSU5DTFVERV9UUkFOU0ZPUk1TIiwgdHJhbnNmb3JtUnVsZXMsIHRydWUpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiB0ciA6IHRyYW5zZm9ybVJ1bGVzKSB7CiAgICAgdGhpcy0+UGFyc2VUcmFuc2Zvcm0odHIpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21EZXBlbmRzQy5oIGIvU291cmNlL2NtRGVwZW5kc0MuaAppbmRleCA4NjhjOTRhLi5lMDFmYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZXBlbmRzQy5oCisrKyBiL1NvdXJjZS9jbURlcGVuZHNDLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2luY2x1ZGUgImNtRGVwZW5kcy5oIgogCi1jbGFzcyBjbUxvY2FsR2VuZXJhdG9yOworY2xhc3MgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM7CiAKIC8qKiBcY2xhc3MgY21EZXBlbmRzQwogICogXGJyaWVmIERlcGVuZGVuY3kgc2Nhbm5lciBmb3IgQyBhbmQgQysrIG9iamVjdCBmaWxlcy4KQEAgLTI3LDcgKzI3LDcgQEAKICAgLyoqIENoZWNraW5nIGluc3RhbmNlcyBuZWVkIHRvIGtub3cgdGhlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGFuZCB0aGUKICAgICAgIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5IHRvIHRoZSB0YXJnZXQgZmlsZS4gICovCiAgIGNtRGVwZW5kc0MoKTsKLSAgY21EZXBlbmRzQyhjbUxvY2FsR2VuZXJhdG9yKiBsZywgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldERpciwKKyAgY21EZXBlbmRzQyhjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXREaXIsCiAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsIGNvbnN0IERlcGVuZGVuY3lNYXAqIHZhbGlkRGVwcyk7CiAKICAgLyoqIFZpcnR1YWwgZGVzdHJ1Y3RvciB0byBjbGVhbnVwIHN1YmNsYXNzZXMgcHJvcGVybHkuICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uY3h4IGIvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uY3h4CmluZGV4IDM2OTIyMDIuLjhmMDJkOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmN4eAorKysgYi9Tb3VyY2UvY21EZXBlbmRzRm9ydHJhbi5jeHgKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgImNtRm9ydHJhblBhcnNlci5oIiAvKiBJbnRlcmZhY2UgdG8gcGFyc2VyIG9iamVjdC4gICovCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCi0jaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21TdGF0ZURpcmVjdG9yeS5oIgpAQCAtMjksMTIgKzI5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBtb2RfbG93ZXIpCiB7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZXh0X2xlbiA9IDA7Ci0gIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobW9kLCAiLm1vZCIpKSB7CisgIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobW9kLCAiLm1vZCIpIHx8IGNtSGFzTGl0ZXJhbFN1ZmZpeChtb2QsICIuc3ViIikpIHsKICAgICBleHRfbGVuID0gNDsKICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobW9kLCAiLnNtb2QiKSkgewogICAgIGV4dF9sZW4gPSA1OwotICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFN1ZmZpeChtb2QsICIuc3ViIikpIHsKLSAgICBleHRfbGVuID0gNDsKICAgfQogICBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA9IG1vZC5zdWJzdHIoMCwgbW9kLnNpemUoKSAtIGV4dF9sZW4pOwogICBzdGQ6OnN0cmluZyBjb25zdCYgZXh0ID0gbW9kLnN1YnN0cihtb2Quc2l6ZSgpIC0gZXh0X2xlbik7CkBAIC03Miw3ICs3MCw3IEBACiAKIGNtRGVwZW5kc0ZvcnRyYW46OmNtRGVwZW5kc0ZvcnRyYW4oKSA9IGRlZmF1bHQ7CiAKLWNtRGVwZW5kc0ZvcnRyYW46OmNtRGVwZW5kc0ZvcnRyYW4oY21Mb2NhbEdlbmVyYXRvciogbGcpCitjbURlcGVuZHNGb3J0cmFuOjpjbURlcGVuZHNGb3J0cmFuKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZykKICAgOiBjbURlcGVuZHMobGcpCiAgICwgSW50ZXJuYWwobmV3IGNtRGVwZW5kc0ZvcnRyYW5JbnRlcm5hbHMpCiB7CkBAIC04MiwxMCArODAsNyBAQAogICAvLyBHZXQgdGhlIGxpc3Qgb2YgZGVmaW5pdGlvbnMuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZpbml0aW9uczsKICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGUoKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNfZGVmaW5lcyA9Ci0gICAgICAgIG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9UQVJHRVRfREVGSU5JVElPTlNfRm9ydHJhbiIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGNfZGVmaW5lcywgZGVmaW5pdGlvbnMpOwotICB9CisgIG1mLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9UQVJHRVRfREVGSU5JVElPTlNfRm9ydHJhbiIsIGRlZmluaXRpb25zKTsKIAogICAvLyB0cmFuc2xhdGUgaS5lLiBGT089QkFSIHRvIEZPTyBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGRlZmluZWQKICAgLy8gcHJlcHJvY2Vzc29yIHN5bWJvbHMKQEAgLTEwMiwxMCArOTcsNyBAQAogICB0aGlzLT5TTW9kRXh0ID0gbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9Gb3J0cmFuX1NVQk1PRFVMRV9FWFQiKTsKIH0KIAotY21EZXBlbmRzRm9ydHJhbjo6fmNtRGVwZW5kc0ZvcnRyYW4oKQotewotICBkZWxldGUgdGhpcy0+SW50ZXJuYWw7Ci19CitjbURlcGVuZHNGb3J0cmFuOjp+Y21EZXBlbmRzRm9ydHJhbigpID0gZGVmYXVsdDsKIAogYm9vbCBjbURlcGVuZHNGb3J0cmFuOjpXcml0ZURlcGVuZGVuY2llcyhjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIHNvdXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvYmosCkBAIC0xODgsNyArMTgwLDcgQEAKICAgZmlTdHJlYW0gPDwgInByb3ZpZGVzXG4iOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gY29uc3QmIHByb3ZpZGVzID0gdGhpcy0+SW50ZXJuYWwtPlRhcmdldFByb3ZpZGVzOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogcHJvdmlkZXMpIHsKLSAgICBmaVN0cmVhbSA8PCAiICIgPDwgaSA8PCAiXG4iOworICAgIGZpU3RyZWFtIDw8ICcgJyA8PCBpIDw8ICdcbic7CiAgIH0KIAogICAvLyBDcmVhdGUgYSBzY3JpcHQgdG8gY2xlYW4gdGhlIG1vZHVsZXMuCkBAIC0yMDUsMTQgKzE5NywxNCBAQAogICAgICAgc3RkOjpzdHJpbmcgbW9kX2xvd2VyID0gY21TdHJDYXQobW9kX2RpciwgJy8nKTsKICAgICAgIGNtRm9ydHJhbk1vZHVsZUFwcGVuZFVwcGVyTG93ZXIoaSwgbW9kX3VwcGVyLCBtb2RfbG93ZXIpOwogICAgICAgc3RkOjpzdHJpbmcgc3RhbXAgPSBjbVN0ckNhdChzdGFtcF9kaXIsICcvJywgaSwgIi5zdGFtcCIpOwotICAgICAgZmNTdHJlYW0gPDwgIlxuIjsKLSAgICAgIGZjU3RyZWFtIDw8ICIgIFwiIgorICAgICAgZmNTdHJlYW0gPDwgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgXCIiCiAgICAgICAgICAgICAgICA8PCB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBtb2RfbG93ZXIpCi0gICAgICAgICAgICAgICA8PCAiXCJcbiI7Ci0gICAgICBmY1N0cmVhbSA8PCAiICBcIiIKKyAgICAgICAgICAgICAgIDw8ICJcIlxuIgorICAgICAgICAgICAgICAgICAgIiAgXCIiCiAgICAgICAgICAgICAgICA8PCB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBtb2RfdXBwZXIpCi0gICAgICAgICAgICAgICA8PCAiXCJcbiI7Ci0gICAgICBmY1N0cmVhbSA8PCAiICBcIiIKKyAgICAgICAgICAgICAgIDw8ICJcIlxuIgorICAgICAgICAgICAgICAgICAgIiAgXCIiCiAgICAgICAgICAgICAgICA8PCB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBzdGFtcCkKICAgICAgICAgICAgICAgIDw8ICJcIlxuIjsKICAgICB9CkBAIC0yNDgsMTAgKzI0MCw3IEBACiAgIC8vIExvYWQgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgdGFyZ2V0cy4KICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGUoKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluZm9GaWxlczsKLSAgaWYgKGNvbnN0IGNoYXIqIGluZm9GaWxlc1ZhbHVlID0KLSAgICAgICAgbWYtPkdldERlZmluaXRpb24oIkNNQUtFX1RBUkdFVF9MSU5LRURfSU5GT19GSUxFUyIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGluZm9GaWxlc1ZhbHVlLCBpbmZvRmlsZXMpOwotICB9CisgIG1mLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9UQVJHRVRfTElOS0VEX0lORk9fRklMRVMiLCBpbmZvRmlsZXMpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5mb0ZpbGVzKSB7CiAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGkpOwogICAgIHN0ZDo6c3RyaW5nIGZuYW1lID0gdGFyZ2V0RGlyICsgIi9mb3J0cmFuLmludGVybmFsIjsKQEAgLTMyOSwxNiArMzE4LDE1IEBACiAgIHN0ZDo6c3RyaW5nIGJpbkRpciA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKTsKICAgc3RkOjpzdHJpbmcgb2JqX2kgPSB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIG9iaik7CiAgIHN0ZDo6c3RyaW5nIG9ial9tID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aChvYmpfaSk7Ci0gIGludGVybmFsRGVwZW5kcyA8PCBvYmpfaSA8PCBzdGQ6OmVuZGw7Ci0gIGludGVybmFsRGVwZW5kcyA8PCAiICIgPDwgc3JjIDw8IHN0ZDo6ZW5kbDsKKyAgaW50ZXJuYWxEZXBlbmRzIDw8IG9ial9pIDw8ICJcbiAiIDw8IHNyYyA8PCAnXG4nOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5mby5JbmNsdWRlcykgewogICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICI6ICIKICAgICAgICAgICAgICAgICA8PCBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluRGlyLCBpKSkKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgaW50ZXJuYWxEZXBlbmRzIDw8ICIgIiA8PCBpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgICAgICA8PCAnXG4nOworICAgIGludGVybmFsRGVwZW5kcyA8PCAnICcgPDwgaSA8PCAnXG4nOwogICB9Ci0gIG1ha2VEZXBlbmRzIDw8IHN0ZDo6ZW5kbDsKKyAgbWFrZURlcGVuZHMgPDwgJ1xuJzsKIAogICAvLyBXcml0ZSBtb2R1bGUgcmVxdWlyZW1lbnRzIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5mby5SZXF1aXJlcykgewpAQCAtMzU3LDcgKzM0NSw3IEBACiAgICAgICAvLyBUaGlzIG1vZHVsZSBpcyBrbm93bi4gIERlcGVuZCBvbiBpdHMgdGltZXN0YW1wIGZpbGUuCiAgICAgICBzdGQ6OnN0cmluZyBzdGFtcEZpbGUgPSBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKAogICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIHJlcXVpcmVkLT5zZWNvbmQpKTsKLSAgICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICI6ICIgPDwgc3RhbXBGaWxlIDw8ICJcbiI7CisgICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiOiAiIDw8IHN0YW1wRmlsZSA8PCAnXG4nOwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBUaGlzIG1vZHVsZSBpcyBub3Qga25vd24gdG8gQ01ha2UuICBUcnkgdG8gbG9jYXRlIGl0IHdoZXJlCiAgICAgICAvLyB0aGUgY29tcGlsZXIgd2lsbCBhbmQgZGVwZW5kIG9uIHRoYXQuCkBAIC0zNjUsNyArMzUzLDcgQEAKICAgICAgIGlmICh0aGlzLT5GaW5kTW9kdWxlKGksIG1vZHVsZSkpIHsKICAgICAgICAgbW9kdWxlID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCgKICAgICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIG1vZHVsZSkpOwotICAgICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiOiAiIDw8IG1vZHVsZSA8PCAiXG4iOworICAgICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiOiAiIDw8IG1vZHVsZSA8PCAnXG4nOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMzk0LDcgKzM4Miw3IEBACiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgoc3RhbXBGaWxlKTsKIAogICAgICAgbWFrZURlcGVuZHMgPDwgb2JqX20gPDwgIi5wcm92aWRlcy5idWlsZCIKLSAgICAgICAgICAgICAgICAgIDw8ICI6ICIgPDwgc3RhbXBGaWxlRm9yTWFrZSA8PCAiXG4iOworICAgICAgICAgICAgICAgICAgPDwgIjogIiA8PCBzdGFtcEZpbGVGb3JNYWtlIDw8ICdcbic7CiAgICAgICAvLyBOb3RlIHRoYXQgd2hlbiBjbWFrZV9jb3B5X2Y5MF9tb2QgZmluZHMgdGhhdCBhIG1vZHVsZSBmaWxlCiAgICAgICAvLyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhbXAgZmlsZSBoYXZlIG5vIGRpZmZlcmVuY2VzLCB0aGUgc3RhbXAKICAgICAgIC8vIGZpbGUgaXMgbm90IHVwZGF0ZWQuIEluIHN1Y2ggY2FzZSB0aGUgc3RhbXAgZmlsZSB3aWxsIGJlIGFsd2F5cwpAQCAtNDAyLDE1ICszOTAsMTUgQEAKICAgICAgIC8vIG9uIGVhY2ggbmV3IGJ1aWxkLiBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGZvciBpbmNyZW1lbnRhbAogICAgICAgLy8gYnVpbGRzIGFuZCBjYW4gbm90IGJlIGNoYW5nZWQgd2l0aG91dCBwcmVmb3JtaW5nIHJlY3Vyc2l2ZSBtYWtlCiAgICAgICAvLyBjYWxscyB0aGF0IHdvdWxkIGNvbnNpZGVyYWJseSBzbG93IGRvd24gdGhlIGJ1aWxkaW5nIHByb2Nlc3MuCi0gICAgICBtYWtlRGVwZW5kcyA8PCBzdGFtcEZpbGVGb3JNYWtlIDw8ICI6ICIgPDwgb2JqX20gPDwgIlxuIjsKKyAgICAgIG1ha2VEZXBlbmRzIDw8IHN0YW1wRmlsZUZvck1ha2UgPDwgIjogIiA8PCBvYmpfbSA8PCAnXG4nOwogICAgICAgbWFrZURlcGVuZHMgPDwgIlx0JChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9jb3B5X2Y5MF9tb2QgIiA8PCBtb2RGaWxlCi0gICAgICAgICAgICAgICAgICA8PCAiICIgPDwgc3RhbXBGaWxlRm9yU2hlbGw7CisgICAgICAgICAgICAgICAgICA8PCAnICcgPDwgc3RhbXBGaWxlRm9yU2hlbGw7CiAgICAgICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZSgpOwogICAgICAgY29uc3QgY2hhciogY2lkID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQiKTsKICAgICAgIGlmIChjaWQgJiYgKmNpZCkgewotICAgICAgICBtYWtlRGVwZW5kcyA8PCAiICIgPDwgY2lkOworICAgICAgICBtYWtlRGVwZW5kcyA8PCAnICcgPDwgY2lkOwogICAgICAgfQotICAgICAgbWFrZURlcGVuZHMgPDwgIlxuIjsKKyAgICAgIG1ha2VEZXBlbmRzIDw8ICdcbic7CiAgICAgfQogICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICIucHJvdmlkZXMuYnVpbGQ6XG4iOwogICAgIC8vIEFmdGVyIGNvcHlpbmcgdGhlIG1vZHVsZXMgdXBkYXRlIHRoZSB0aW1lc3RhbXAgZmlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmggYi9Tb3VyY2UvY21EZXBlbmRzRm9ydHJhbi5oCmluZGV4IDA0ODUxMTUuLjNlMzA2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmgKKysrIGIvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTE0LDcgKzE1LDcgQEAKIAogY2xhc3MgY21EZXBlbmRzRm9ydHJhbkludGVybmFsczsKIGNsYXNzIGNtRm9ydHJhblNvdXJjZUluZm87Ci1jbGFzcyBjbUxvY2FsR2VuZXJhdG9yOworY2xhc3MgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM7CiAKIC8qKiBcY2xhc3MgY21EZXBlbmRzRm9ydHJhbgogICogXGJyaWVmIERlcGVuZGVuY3kgc2Nhbm5lciBmb3IgRm9ydHJhbiBvYmplY3QgZmlsZXMuCkBAIC0zMCw3ICszMSw3IEBACiAgICAgICBwYXRoIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeSB0byB0aGUgdGFyZ2V0IGZpbGUsIHRoZSBzb3VyY2UKICAgICAgIGZpbGUgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgdGhlIGluY2x1ZGUgZmlsZSBzZWFyY2gKICAgICAgIHBhdGgsIGFuZCB0aGUgdGFyZ2V0IGRpcmVjdG9yeS4gICovCi0gIGNtRGVwZW5kc0ZvcnRyYW4oY21Mb2NhbEdlbmVyYXRvciogbGcpOworICBjbURlcGVuZHNGb3J0cmFuKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZyk7CiAKICAgLyoqIFZpcnR1YWwgZGVzdHJ1Y3RvciB0byBjbGVhbnVwIHN1YmNsYXNzZXMgcHJvcGVybHkuICAqLwogICB+Y21EZXBlbmRzRm9ydHJhbigpIG92ZXJyaWRlOwpAQCAtODQsNyArODUsNyBAQAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gUFBEZWZpbml0aW9uczsKIAogICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotICBjbURlcGVuZHNGb3J0cmFuSW50ZXJuYWxzKiBJbnRlcm5hbCA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbURlcGVuZHNGb3J0cmFuSW50ZXJuYWxzPiBJbnRlcm5hbDsKIAogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGJhc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5jeHggYi9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5jeHgKaW5kZXggNTE2YmJiZi4uZmMxYmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuY3h4CisrKyBiL1NvdXJjZS9jbURlcGVuZHNKYXZhUGFyc2VySGVscGVyLmN4eApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC0xNjksMTAgKzE3MCwxMSBAQAogICAgIHJldHVybjsKICAgfQogICB0aGlzLT5VbmlvbnNBdmFpbGFibGUrKzsKLSAgcHQtPnN0ciA9IG5ldyBjaGFyW2xlbiArIDFdOworICBhdXRvIHVwID0gY206Om1ha2VfdW5pcXVlPGNoYXJbXT4obGVuICsgMSk7CisgIHB0LT5zdHIgPSB1cC5nZXQoKTsKICAgc3RybmNweShwdC0+c3RyLCBzdHIsIGxlbik7CiAgIHB0LT5zdHJbbGVuXSA9IDA7Ci0gIHRoaXMtPkFsbG9jYXRlcy5wdXNoX2JhY2socHQtPnN0cik7CisgIHRoaXMtPkFsbG9jYXRlcy5wdXNoX2JhY2soc3RkOjptb3ZlKHVwKSk7CiB9CiAKIHZvaWQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6U3RhcnRDbGFzcyhjb25zdCBjaGFyKiBjbHMpCkBAIC0yNzUsMTAgKzI3Nyw3IEBACiAKIHZvaWQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6Q2xlYW51cFBhcnNlcigpCiB7Ci0gIGZvciAoY2hhciogYWxsb2NhdGUgOiB0aGlzLT5BbGxvY2F0ZXMpIHsKLSAgICBkZWxldGVbXSBhbGxvY2F0ZTsKLSAgfQotICB0aGlzLT5BbGxvY2F0ZXMuZXJhc2UodGhpcy0+QWxsb2NhdGVzLmJlZ2luKCksIHRoaXMtPkFsbG9jYXRlcy5lbmQoKSk7CisgIHRoaXMtPkFsbG9jYXRlcy5jbGVhcigpOwogfQogCiBpbnQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6TGV4SW5wdXQoY2hhciogYnVmLCBpbnQgbWF4bGVuKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuaCBiL1NvdXJjZS9jbURlcGVuZHNKYXZhUGFyc2VySGVscGVyLmgKaW5kZXggYTY3M2I1Yi4uYzU0NWVlMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuaAorKysgYi9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC04MSw3ICs4Miw3IEBACiAgIGludCBDdXJyZW50RGVwdGg7CiAgIGludCBWZXJib3NlOwogCi0gIHN0ZDo6dmVjdG9yPGNoYXIqPiBBbGxvY2F0ZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+PiBBbGxvY2F0ZXM7CiAKICAgdm9pZCBQcmludENsYXNzZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRHluYW1pY0xvYWRlci5jeHggYi9Tb3VyY2UvY21EeW5hbWljTG9hZGVyLmN4eAppbmRleCAwYjcyYTk0Li5hMzczMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EeW5hbWljTG9hZGVyLmN4eAorKysgYi9Tb3VyY2UvY21EeW5hbWljTG9hZGVyLmN4eApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorbmFtZXNwYWNlIHsKIGNsYXNzIGNtRHluYW1pY0xvYWRlckNhY2hlCiB7CiBwdWJsaWM6CkBAIC0xNSwxNCArMTYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgY21zeXM6OkR5bmFtaWNMb2FkZXI6OkxpYnJhcnlIYW5kbGUmIC8qcCovKTsKICAgYm9vbCBGbHVzaENhY2hlKGNvbnN0IGNoYXIqIHBhdGgpOwogICB2b2lkIEZsdXNoQ2FjaGUoKTsKLSAgc3RhdGljIGNtRHluYW1pY0xvYWRlckNhY2hlKiBHZXRJbnN0YW5jZSgpOworICBzdGF0aWMgY21EeW5hbWljTG9hZGVyQ2FjaGUmIEdldEluc3RhbmNlKCk7CiAKIHByaXZhdGU6CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbXN5czo6RHluYW1pY0xvYWRlcjo6TGlicmFyeUhhbmRsZT4gQ2FjaGVNYXA7Ci0gIHN0YXRpYyBjbUR5bmFtaWNMb2FkZXJDYWNoZSogSW5zdGFuY2U7CisgIHN0YXRpYyBjbUR5bmFtaWNMb2FkZXJDYWNoZSBJbnN0YW5jZTsKIH07CiAKLWNtRHluYW1pY0xvYWRlckNhY2hlKiBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6SW5zdGFuY2UgPSBudWxscHRyOworY21EeW5hbWljTG9hZGVyQ2FjaGUgY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlOworfQogCiBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6fmNtRHluYW1pY0xvYWRlckNhY2hlKCkgPSBkZWZhdWx0OwogCkBAIC02NCwxNSArNjYsMTEgQEAKICAgZm9yIChhdXRvIGNvbnN0JiBpdCA6IHRoaXMtPkNhY2hlTWFwKSB7CiAgICAgY21zeXM6OkR5bmFtaWNMb2FkZXI6OkNsb3NlTGlicmFyeShpdC5zZWNvbmQpOwogICB9Ci0gIGRlbGV0ZSBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6SW5zdGFuY2U7Ci0gIGNtRHluYW1pY0xvYWRlckNhY2hlOjpJbnN0YW5jZSA9IG51bGxwdHI7CisgIHRoaXMtPkNhY2hlTWFwLmNsZWFyKCk7CiB9CiAKLWNtRHluYW1pY0xvYWRlckNhY2hlKiBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKQorY21EeW5hbWljTG9hZGVyQ2FjaGUmIGNtRHluYW1pY0xvYWRlckNhY2hlOjpHZXRJbnN0YW5jZSgpCiB7Ci0gIGlmICghY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlKSB7Ci0gICAgY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlID0gbmV3IGNtRHluYW1pY0xvYWRlckNhY2hlOwotICB9CiAgIHJldHVybiBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6SW5zdGFuY2U7CiB9CiAKQEAgLTgwLDE1ICs3OCwxNSBAQAogICBjb25zdCBjaGFyKiBsaWJuYW1lKQogewogICBjbXN5czo6RHluYW1pY0xvYWRlcjo6TGlicmFyeUhhbmRsZSBsaDsKLSAgaWYgKGNtRHluYW1pY0xvYWRlckNhY2hlOjpHZXRJbnN0YW5jZSgpLT5HZXRDYWNoZUZpbGUobGlibmFtZSwgbGgpKSB7CisgIGlmIChjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS5HZXRDYWNoZUZpbGUobGlibmFtZSwgbGgpKSB7CiAgICAgcmV0dXJuIGxoOwogICB9CiAgIGxoID0gY21zeXM6OkR5bmFtaWNMb2FkZXI6Ok9wZW5MaWJyYXJ5KGxpYm5hbWUpOwotICBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS0+Q2FjaGVGaWxlKGxpYm5hbWUsIGxoKTsKKyAgY21EeW5hbWljTG9hZGVyQ2FjaGU6OkdldEluc3RhbmNlKCkuQ2FjaGVGaWxlKGxpYm5hbWUsIGxoKTsKICAgcmV0dXJuIGxoOwogfQogCiB2b2lkIGNtRHluYW1pY0xvYWRlcjo6Rmx1c2hDYWNoZSgpCiB7Ci0gIGNtRHluYW1pY0xvYWRlckNhY2hlOjpHZXRJbnN0YW5jZSgpLT5GbHVzaENhY2hlKCk7CisgIGNtRHluYW1pY0xvYWRlckNhY2hlOjpHZXRJbnN0YW5jZSgpLkZsdXNoQ2FjaGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUVMRi5jeHggYi9Tb3VyY2UvY21FTEYuY3h4CmluZGV4IDIwMmIyMDUuLmE4ZDgxZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUVMRi5jeHgKKysrIGIvU291cmNlL2NtRUxGLmN4eApAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJjbUVMRi5oIgogCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3N0cmVhbT4KQEAgLTEyLDE0ICsxMywxMyBAQAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLSNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2FiaS5oPgogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogLy8gSW5jbHVkZSB0aGUgRUxGIGZvcm1hdCBpbmZvcm1hdGlvbiBzeXN0ZW0gaGVhZGVyLgogI2lmIGRlZmluZWQoX19PcGVuQlNEX18pCiAjICBpbmNsdWRlIDxlbGZfYWJpLmg+Ci0jICBpbmNsdWRlIDxzdGRpbnQuaD4KICNlbGlmIGRlZmluZWQoX19IQUlLVV9fKQogIyAgaW5jbHVkZSA8ZWxmMzIuaD4KICMgIGluY2x1ZGUgPGVsZjY0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeGVjdXRlUHJvY2Vzc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtRXhlY3V0ZVByb2Nlc3NDb21tYW5kLmN4eAppbmRleCA1YmU1YmNlLi45YzUzYmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeGVjdXRlUHJvY2Vzc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUV4ZWN1dGVQcm9jZXNzQ29tbWFuZC5jeHgKQEAgLTEwLDExICsxMCwxMCBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtc3lzL1Byb2Nlc3MuaCIKIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCi0KICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC02MSw2ICs2MCw4IEBACiAgICAgYm9vbCBFcnJvclF1aWV0ID0gZmFsc2U7CiAgICAgYm9vbCBPdXRwdXRTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSA9IGZhbHNlOwogICAgIGJvb2wgRXJyb3JTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSA9IGZhbHNlOworICAgIGJvb2wgRWNob091dHB1dFZhcmlhYmxlID0gZmFsc2U7CisgICAgYm9vbCBFY2hvRXJyb3JWYXJpYWJsZSA9IGZhbHNlOwogICAgIHN0ZDo6c3RyaW5nIEVuY29kaW5nOwogICB9OwogCkBAIC04Myw3ICs4NCw5IEBACiAgICAgICAgICAgICAmQXJndW1lbnRzOjpPdXRwdXRTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSkKICAgICAgIC5CaW5kKCJFUlJPUl9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFIl9zLAogICAgICAgICAgICAgJkFyZ3VtZW50czo6RXJyb3JTdHJpcFRyYWlsaW5nV2hpdGVzcGFjZSkKLSAgICAgIC5CaW5kKCJFTkNPRElORyJfcywgJkFyZ3VtZW50czo6RW5jb2RpbmcpOworICAgICAgLkJpbmQoIkVOQ09ESU5HIl9zLCAmQXJndW1lbnRzOjpFbmNvZGluZykKKyAgICAgIC5CaW5kKCJFQ0hPX09VVFBVVF9WQVJJQUJMRSJfcywgJkFyZ3VtZW50czo6RWNob091dHB1dFZhcmlhYmxlKQorICAgICAgLkJpbmQoIkVDSE9fRVJST1JfVkFSSUFCTEUiX3MsICZBcmd1bWVudHM6OkVjaG9FcnJvclZhcmlhYmxlKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5wYXJzZWRBcmd1bWVudHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBrZXl3b3Jkc01pc3NpbmdWYWx1ZTsKQEAgLTI0MSwyOCArMjQ0LDMyIEBACiAgIHdoaWxlICgocCA9IGNtc3lzUHJvY2Vzc19XYWl0Rm9yRGF0YShjcCwgJmRhdGEsICZsZW5ndGgsIG51bGxwdHIpKSkgewogICAgIC8vIFB1dCB0aGUgb3V0cHV0IGluIHRoZSByaWdodCBwbGFjZS4KICAgICBpZiAocCA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERPVVQgJiYgIWFyZ3VtZW50cy5PdXRwdXRRdWlldCkgewotICAgICAgaWYgKGFyZ3VtZW50cy5PdXRwdXRWYXJpYWJsZS5lbXB0eSgpKSB7CisgICAgICBpZiAoYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkgfHwgYXJndW1lbnRzLkVjaG9PdXRwdXRWYXJpYWJsZSkgewogICAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoZGF0YSwgbGVuZ3RoLCBzdHJkYXRhLCAxKTsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KHN0cmRhdGEpOwotICAgICAgfSBlbHNlIHsKKyAgICAgIH0KKyAgICAgIGlmICghYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkpIHsKICAgICAgICAgY21FeGVjdXRlUHJvY2Vzc0NvbW1hbmRBcHBlbmQodGVtcE91dHB1dCwgZGF0YSwgbGVuZ3RoKTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHAgPT0gY21zeXNQcm9jZXNzX1BpcGVfU1RERVJSICYmICFhcmd1bWVudHMuRXJyb3JRdWlldCkgewotICAgICAgaWYgKGFyZ3VtZW50cy5FcnJvclZhcmlhYmxlLmVtcHR5KCkpIHsKKyAgICAgIGlmIChhcmd1bWVudHMuRXJyb3JWYXJpYWJsZS5lbXB0eSgpIHx8IGFyZ3VtZW50cy5FY2hvRXJyb3JWYXJpYWJsZSkgewogICAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoZGF0YSwgbGVuZ3RoLCBzdHJkYXRhLCAyKTsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3RkZXJyKHN0cmRhdGEpOwotICAgICAgfSBlbHNlIHsKKyAgICAgIH0KKyAgICAgIGlmICghYXJndW1lbnRzLkVycm9yVmFyaWFibGUuZW1wdHkoKSkgewogICAgICAgICBjbUV4ZWN1dGVQcm9jZXNzQ29tbWFuZEFwcGVuZCh0ZW1wRXJyb3IsIGRhdGEsIGxlbmd0aCk7CiAgICAgICB9CiAgICAgfQogICB9Ci0gIGlmICghYXJndW1lbnRzLk91dHB1dFF1aWV0ICYmIGFyZ3VtZW50cy5PdXRwdXRWYXJpYWJsZS5lbXB0eSgpKSB7CisgIGlmICghYXJndW1lbnRzLk91dHB1dFF1aWV0ICYmCisgICAgICAoYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkgfHwgYXJndW1lbnRzLkVjaG9PdXRwdXRWYXJpYWJsZSkpIHsKICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMSk7CiAgICAgaWYgKCFzdHJkYXRhLmVtcHR5KCkpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChzdHJkYXRhKTsKICAgICB9CiAgIH0KLSAgaWYgKCFhcmd1bWVudHMuRXJyb3JRdWlldCAmJiBhcmd1bWVudHMuRXJyb3JWYXJpYWJsZS5lbXB0eSgpKSB7CisgIGlmICghYXJndW1lbnRzLkVycm9yUXVpZXQgJiYKKyAgICAgIChhcmd1bWVudHMuRXJyb3JWYXJpYWJsZS5lbXB0eSgpIHx8IGFyZ3VtZW50cy5FY2hvRXJyb3JWYXJpYWJsZSkpIHsKICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMik7CiAgICAgaWYgKCFzdHJkYXRhLmVtcHR5KCkpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZGVycihzdHJkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yLmN4eAppbmRleCA1NjFlODMwLi4zNjQxY2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRCdWlsZEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0QnVpbGRBbmRyb2lkTUtHZW5lcmF0b3IuY3h4CkBAIC01LDcgKzUsOCBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21MaW5rSXRlbS5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTQ2LDcgKzQ3LDkgQEAKICAgb3MgPDwgIkxPQ0FMX01PRFVMRSA6PSAiOwogICBvcyA8PCB0YXJnZXROYW1lIDw8ICJcbiI7CiAgIG9zIDw8ICJMT0NBTF9TUkNfRklMRVMgOj0gIjsKLSAgc3RkOjpzdHJpbmcgcGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgodGFyZ2V0LT5HZXRGdWxsUGF0aCgpKTsKKyAgc3RkOjpzdHJpbmcgY29uc3Qgbm9Db25maWc7IC8vIEZJWE1FOiBXaGF0IGNvbmZpZyB0byB1c2UgaGVyZT8KKyAgc3RkOjpzdHJpbmcgcGF0aCA9CisgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCh0YXJnZXQtPkdldEZ1bGxQYXRoKG5vQ29uZmlnKSk7CiAgIG9zIDw8IHBhdGggPDwgIlxuIjsKIH0KIApAQCAtMTE4LDEzICsxMjEsMTMgQEAKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYm9vbCByZWxwYXRoID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBjbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yOjpJTlNUQUxMKSB7Ci0gICAgICAgICAgICAgIHJlbHBhdGggPSBsaWIuc3Vic3RyKDAsIDMpID09ICIuLi8iOworICAgICAgICAgICAgICByZWxwYXRoID0gY21IYXNMaXRlcmFsUHJlZml4KGxpYiwgIi4uLyIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGZ1bGwgcGF0aCBvciBpZiBpdCBhbHJlYWR5IGhhcyBhIC1sLCBvcgogICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgYW4gaW5zdGFsbCBjaGVjayBmb3IgcmVsYXRpdmUgcGF0aHMKICAgICAgICAgICAgIC8vIGlmIGl0IGlzIGZ1bGwgb3IgYSBsaW5rIGxpYnJhcnkgdGhlbiB1c2Ugc3RyaW5nIGRpcmVjdGx5CiAgICAgICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgobGliKSB8fAotICAgICAgICAgICAgICAgIGxpYi5zdWJzdHIoMCwgMikgPT0gIi1sIiB8fCByZWxwYXRoKSB7CisgICAgICAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KGxpYiwgIi1sIikgfHwgcmVscGF0aCkgewogICAgICAgICAgICAgICBsZGxpYnMgKz0gIiAiICsgbGliOwogICAgICAgICAgICAgICAvLyBpZiBpdCBpcyBub3QgYSBwYXRoIGFuZCBkb2VzIG5vdCBoYXZlIGEgLWwgdGhlbiBhZGQgLWwKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxpYi5lbXB0eSgpKSB7CkBAIC0xNjUsNyArMTY4LDcgQEAKICAgLy8gVGVsbCB0aGUgTkRLIGJ1aWxkIHN5c3RlbSBpZiBwcmVidWlsdCBzdGF0aWMgbGlicmFyaWVzIHVzZSBDKysuCiAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSB7CiAgICAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIGxpID0gdGFyZ2V0LT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnKTsKLSAgICBpZiAoY21Db250YWlucyhsaS0+TGFuZ3VhZ2VzLCAiQ1hYIikpIHsKKyAgICBpZiAoY206OmNvbnRhaW5zKGxpLT5MYW5ndWFnZXMsICJDWFgiKSkgewogICAgICAgb3MgPDwgIkxPQ0FMX0hBU19DUFAgOj0gdHJ1ZVxuIjsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuY3h4CmluZGV4IGQyMmJkNDguLmRkNzAwYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yLmN4eApAQCAtOCw3ICs4LDggQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUV4cG9ydFNldC5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCkBAIC0zMDcsNyArMzA4LDcgQEAKICAgICBjb25zdCBhdXRvJiBleHBvcnRTZXQgPSBleHAuc2Vjb25kOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0YXJnZXRzOwogICAgIGV4cG9ydFNldC0+R2V0VGFyZ2V0cyh0YXJnZXRzKTsKLSAgICBpZiAoY21Db250YWlucyh0YXJnZXRzLCBuYW1lKSkgeworICAgIGlmIChjbTo6Y29udGFpbnModGFyZ2V0cywgbmFtZSkpIHsKICAgICAgIGV4cG9ydEZpbGVzLnB1c2hfYmFjayhleHAuZmlyc3QpOwogICAgICAgbnMgPSBleHBvcnRTZXQtPkdldE5hbWVzcGFjZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydENvbW1hbmQuY3h4IGIvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKaW5kZXggZTQ5YzE3NC4uMzUyZWFmMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKQEAgLTcsMTIgKzcsMTEgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCi0KLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yLmgiCkBAIC0yNCw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21UYXJnZXQuaCIKIApAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgfQogICAgIGV4cG9ydFNldCA9ICZpdC0+c2Vjb25kOwogICB9IGVsc2UgaWYgKCFhcmd1bWVudHMuVGFyZ2V0cy5lbXB0eSgpIHx8Ci0gICAgICAgICAgICAgY21Db250YWlucyhrZXl3b3Jkc01pc3NpbmdWYWx1ZSwgIlRBUkdFVFMiKSkgeworICAgICAgICAgICAgIGNtOjpjb250YWlucyhrZXl3b3Jkc01pc3NpbmdWYWx1ZSwgIlRBUkdFVFMiKSkgewogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGN1cnJlbnRUYXJnZXQgOiBhcmd1bWVudHMuVGFyZ2V0cykgewogICAgICAgaWYgKG1mLklzQWxpYXMoY3VycmVudFRhcmdldCkpIHsKICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CkBAIC0xODMsNiArMTgzLDI4IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKKyAgLy8gaWYgY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGUgZmlsZQorICAvLyBhbmQgQVBQRU5EIGlzIG5vdCBzcGVjaWZpZWQsIGlmIENNUDAxMDMgaXMgT0xEIGlnbm9yZSBwcmV2aW91cyBkZWZpbml0aW9uCisgIC8vIGVsc2UgcmFpc2UgYW4gZXJyb3IKKyAgaWYgKGdnLT5HZXRFeHBvcnRlZFRhcmdldHNGaWxlKGZuYW1lKSAhPSBudWxscHRyKSB7CisgICAgc3dpdGNoIChtZi5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwMykpIHsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6V0FSTjoKKyAgICAgICAgbWYuSXNzdWVNZXNzYWdlKAorICAgICAgICAgIE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywKKyAgICAgICAgICBjbVN0ckNhdChjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAxMDMpLCAnXG4nLAorICAgICAgICAgICAgICAgICAgICJleHBvcnQoKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZVxuICAiLAorICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5GaWxlbmFtZSwgIlxuRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmQ/IikpOworICAgICAgICBDTV9GQUxMVEhST1VHSDsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiY29tbWFuZCBhbHJlYWR5IHNwZWNpZmllZCBmb3IgdGhlIGZpbGVcbiAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5GaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbkRpZCB5b3UgbWlzcyAnQVBQRU5EJyBrZXl3b3JkPyIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCiAgIC8vIFNldHVwIGV4cG9ydCBmaWxlIGdlbmVyYXRpb24uCiAgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcj4gZWJmZyA9IG51bGxwdHI7CiAgIGlmIChhbmRyb2lkKSB7CkBAIC0yMDEsMTEgKzIyMyw5IEBACiAgIGViZmctPlNldEV4cG9ydE9sZChhcmd1bWVudHMuRXhwb3J0T2xkKTsKIAogICAvLyBDb21wdXRlIHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZXhwb3J0ZWQuCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWd1cmF0aW9uVHlwZXM7Ci0gIG1mLkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25UeXBlcyk7Ci0gIGlmIChjb25maWd1cmF0aW9uVHlwZXMuZW1wdHkoKSkgewotICAgIGNvbmZpZ3VyYXRpb25UeXBlcy5lbXBsYWNlX2JhY2soKTsKLSAgfQorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlndXJhdGlvblR5cGVzID0KKyAgICBtZi5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CisKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY3QgOiBjb25maWd1cmF0aW9uVHlwZXMpIHsKICAgICBlYmZnLT5BZGRDb25maWd1cmF0aW9uKGN0KTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhwb3J0RmlsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmN4eAppbmRleCA2NDQxZTZmLi41OGFhMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmN4eApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eU1hcC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMTI1LDkgKzEyNiw5IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wTmFtZSwgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKICAgSW1wb3J0UHJvcGVydHlNYXAmIHByb3BlcnRpZXMpCiB7Ci0gIGNvbnN0IGNoYXIqIGlucHV0ID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgIGNtUHJvcCBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogICBpZiAoaW5wdXQpIHsKLSAgICBwcm9wZXJ0aWVzW3Byb3BOYW1lXSA9IGlucHV0OworICAgIHByb3BlcnRpZXNbcHJvcE5hbWVdID0gKmlucHV0OwogICB9CiB9CiAKQEAgLTEzNywxNiArMTM4LDE2IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2Vzc0NvbnRleHQgcHJlcHJvY2Vzc1J1bGUsCiAgIEltcG9ydFByb3BlcnR5TWFwJiBwcm9wZXJ0aWVzLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG1pc3NpbmdUYXJnZXRzKQogewotICBjb25zdCBjaGFyKiBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICBjbVByb3AgaW5wdXQgPSB0YXJnZXQtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKICAgaWYgKGlucHV0KSB7Ci0gICAgaWYgKCEqaW5wdXQpIHsKKyAgICBpZiAoaW5wdXQtPmVtcHR5KCkpIHsKICAgICAgIC8vIFNldCB0byBlbXB0eQogICAgICAgcHJvcGVydGllc1tvdXRwdXROYW1lXS5jbGVhcigpOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIHByZXBybyA9Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoaW5wdXQsIHByZXByb2Nlc3NSdWxlKTsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcygqaW5wdXQsIHByZXByb2Nlc3NSdWxlKTsKICAgICBpZiAoIXByZXByby5lbXB0eSgpKSB7CiAgICAgICB0aGlzLT5SZXNvbHZlVGFyZ2V0c0luR2VuZXJhdG9yRXhwcmVzc2lvbnMocHJlcHJvLCB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ1RhcmdldHMpOwpAQCAtMTc0LDEwICsxNzUsMTAgQEAKICAgaWYgKCF0YXJnZXQtPklzTGlua2FibGUoKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBjb25zdCBjaGFyKiBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpOworICBjbVByb3AgaW5wdXQgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKTsKICAgaWYgKGlucHV0KSB7CiAgICAgc3RkOjpzdHJpbmcgcHJlcHJvID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcyhpbnB1dCwgcHJlcHJvY2Vzc1J1bGUpOworICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKCppbnB1dCwgcHJlcHJvY2Vzc1J1bGUpOwogICAgIGlmICghcHJlcHJvLmVtcHR5KCkpIHsKICAgICAgIHRoaXMtPlJlc29sdmVUYXJnZXRzSW5HZW5lcmF0b3JFeHByZXNzaW9ucygKICAgICAgICAgcHJlcHJvLCB0YXJnZXQsIG1pc3NpbmdUYXJnZXRzLCBSZXBsYWNlRnJlZVRhcmdldHMpOwpAQCAtMjc2LDggKzI3Nyw3IEBACiAgICAgICAgICAgICAgICAgPDwgIlwiXG5ob3dldmVyIGl0IGlzIGFsc28gIgogICAgICAgICAgICAgICAgICAgICJhIHN1YmRpcmVjdG9yeSBvZiB0aGUgIgogICAgICAgICAgICAgICAgIDw8IChpbkJpbmFyeSA/ICJidWlsZCIgOiAic291cmNlIikgPDwgIiB0cmVlOlxuICAgIFwiIgotICAgICAgICAgICAgICAgIDw8IChpbkJpbmFyeSA/IHRvcEJpbmFyeURpciA6IHRvcFNvdXJjZURpcikgPDwgIlwiIgotICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgICAgICA8PCAoaW5CaW5hcnkgPyB0b3BCaW5hcnlEaXIgOiB0b3BTb3VyY2VEaXIpIDw8ICJcIlxuIjsKICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Jc3N1ZU1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLCBzLnN0cigpKTsKICAgICAgICAgICAgICAgQ01fRkFMTFRIUk9VR0g7CkBAIC0zNDIsMTkgKzM0MiwxOSBAQAogICBhc3NlcnQocHJlcHJvY2Vzc1J1bGUgPT0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJbnN0YWxsSW50ZXJmYWNlKTsKIAogICBjb25zdCBjaGFyKiBwcm9wTmFtZSA9ICJJTlRFUkZBQ0VfU09VUkNFUyI7Ci0gIGNvbnN0IGNoYXIqIGlucHV0ID0gZ3QtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgY21Qcm9wIGlucHV0ID0gZ3QtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKIAogICBpZiAoIWlucHV0KSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgaWYgKCEqaW5wdXQpIHsKKyAgaWYgKGlucHV0LT5lbXB0eSgpKSB7CiAgICAgcHJvcGVydGllc1twcm9wTmFtZV0uY2xlYXIoKTsKICAgICByZXR1cm47CiAgIH0KIAogICBzdGQ6OnN0cmluZyBwcmVwcm8gPQotICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcyhpbnB1dCwgcHJlcHJvY2Vzc1J1bGUsIHRydWUpOworICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcygqaW5wdXQsIHByZXByb2Nlc3NSdWxlLCB0cnVlKTsKICAgaWYgKCFwcmVwcm8uZW1wdHkoKSkgewogICAgIHRoaXMtPlJlc29sdmVUYXJnZXRzSW5HZW5lcmF0b3JFeHByZXNzaW9ucyhwcmVwcm8sIGd0LCBtaXNzaW5nVGFyZ2V0cyk7CiAKQEAgLTM3Myw3ICszNzMsNyBAQAogICBhc3NlcnQocHJlcHJvY2Vzc1J1bGUgPT0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJbnN0YWxsSW50ZXJmYWNlKTsKIAogICBjb25zdCBjaGFyKiBwcm9wTmFtZSA9ICJJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyI7Ci0gIGNvbnN0IGNoYXIqIGlucHV0ID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgIGNtUHJvcCBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKIApAQCAtNDAwLDcgKzQwMCw3IEBACiAgIGlmICghaW5wdXQgJiYgZXhwb3J0RGlycy5lbXB0eSgpKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGlmICgoaW5wdXQgJiYgISppbnB1dCkgJiYgZXhwb3J0RGlycy5lbXB0eSgpKSB7CisgIGlmICgoaW5wdXQgJiYgaW5wdXQtPmVtcHR5KCkpICYmIGV4cG9ydERpcnMuZW1wdHkoKSkgewogICAgIC8vIFNldCB0byBlbXB0eQogICAgIHByb3BlcnRpZXNbcHJvcE5hbWVdLmNsZWFyKCk7CiAgICAgcmV0dXJuOwpAQCAtNDA4LDcgKzQwOCw3IEBACiAKICAgcHJlZml4SXRlbXMoZXhwb3J0RGlycyk7CiAKLSAgc3RkOjpzdHJpbmcgaW5jbHVkZXMgPSAoaW5wdXQgPyBpbnB1dCA6ICIiKTsKKyAgc3RkOjpzdHJpbmcgaW5jbHVkZXMgPSAoaW5wdXQgPyAqaW5wdXQgOiAiIik7CiAgIGNvbnN0IGNoYXIqIHNlcCA9IGlucHV0ID8gIjsiIDogIiI7CiAgIGluY2x1ZGVzICs9IHNlcCArIGV4cG9ydERpcnM7CiAgIHN0ZDo6c3RyaW5nIHByZXBybyA9CkBAIC00MzEsMTkgKzQzMSwxOSBAQAogICBhc3NlcnQocHJlcHJvY2Vzc1J1bGUgPT0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJbnN0YWxsSW50ZXJmYWNlKTsKIAogICBjb25zdCBjaGFyKiBwcm9wTmFtZSA9ICJJTlRFUkZBQ0VfTElOS19ERVBFTkRTIjsKLSAgY29uc3QgY2hhciogaW5wdXQgPSBndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICBjbVByb3AgaW5wdXQgPSBndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogCiAgIGlmICghaW5wdXQpIHsKICAgICByZXR1cm47CiAgIH0KIAotICBpZiAoISppbnB1dCkgeworICBpZiAoaW5wdXQtPmVtcHR5KCkpIHsKICAgICBwcm9wZXJ0aWVzW3Byb3BOYW1lXS5jbGVhcigpOwogICAgIHJldHVybjsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIHByZXBybyA9Ci0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKGlucHV0LCBwcmVwcm9jZXNzUnVsZSwgdHJ1ZSk7CisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKCppbnB1dCwgcHJlcHJvY2Vzc1J1bGUsIHRydWUpOwogICBpZiAoIXByZXByby5lbXB0eSgpKSB7CiAgICAgdGhpcy0+UmVzb2x2ZVRhcmdldHNJbkdlbmVyYXRvckV4cHJlc3Npb25zKHByZXBybywgZ3QsIG1pc3NpbmdUYXJnZXRzKTsKIApAQCAtNDYyLDE5ICs0NjIsMTkgQEAKICAgYXNzZXJ0KHByZXByb2Nlc3NSdWxlID09IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6SW5zdGFsbEludGVyZmFjZSk7CiAKICAgY29uc3QgY2hhciogcHJvcE5hbWUgPSAiSU5URVJGQUNFX0xJTktfRElSRUNUT1JJRVMiOwotICBjb25zdCBjaGFyKiBpbnB1dCA9IGd0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgIGNtUHJvcCBpbnB1dCA9IGd0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CiAKICAgaWYgKCFpbnB1dCkgewogICAgIHJldHVybjsKICAgfQogCi0gIGlmICghKmlucHV0KSB7CisgIGlmIChpbnB1dC0+ZW1wdHkoKSkgewogICAgIHByb3BlcnRpZXNbcHJvcE5hbWVdLmNsZWFyKCk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgc3RkOjpzdHJpbmcgcHJlcHJvID0KLSAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoaW5wdXQsIHByZXByb2Nlc3NSdWxlLCB0cnVlKTsKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoKmlucHV0LCBwcmVwcm9jZXNzUnVsZSwgdHJ1ZSk7CiAgIGlmICghcHJlcHJvLmVtcHR5KCkpIHsKICAgICB0aGlzLT5SZXNvbHZlVGFyZ2V0c0luR2VuZXJhdG9yRXhwcmVzc2lvbnMocHJlcHJvLCBndCwgbWlzc2luZ1RhcmdldHMpOwogCkBAIC00OTcsMTEgKzQ5NywxMSBAQAogdm9pZCBnZXRQcm9wZXJ0eUNvbnRlbnRzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaWZhY2VQcm9wZXJ0aWVzKQogewotICBjb25zdCBjaGFyKiBwID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgY21Qcm9wIHAgPSB0Z3QtPkdldFByb3BlcnR5KHByb3ApOwogICBpZiAoIXApIHsKICAgICByZXR1cm47CiAgIH0KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnRlbnQgPSBjbUV4cGFuZGVkTGlzdChwKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnRlbnQgPSBjbUV4cGFuZGVkTGlzdCgqcCk7CiAgIGlmYWNlUHJvcGVydGllcy5pbnNlcnQoY29udGVudC5iZWdpbigpLCBjb250ZW50LmVuZCgpKTsKIH0KIApAQCAtNTY3LDggKzU2Nyw5IEBACiAgIGlmIChndGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgIGdldENvbXBhdGlibGVJbnRlcmZhY2VQcm9wZXJ0aWVzKGd0YXJnZXQsIGlmYWNlUHJvcGVydGllcywgIiIpOwogCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzOwotICAgIGd0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlnTmFtZXMpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdOYW1lcyA9CisgICAgICBndGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICAgIGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjbiA6IGNvbmZpZ05hbWVzKSB7CiAgICAgICBnZXRDb21wYXRpYmxlSW50ZXJmYWNlUHJvcGVydGllcyhndGFyZ2V0LCBpZmFjZVByb3BlcnRpZXMsIGNuKTsKQEAgLTc2MiwxMyArNzYzLDEyIEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgY29uc3QgY2hhciogcHJvcENvbnRlbnQ7CisgIGNtUHJvcCBwcm9wQ29udGVudDsKIAotICBpZiAoY29uc3QgY2hhciogcHJvcF9zdWZmaXhlZCA9CisgIGlmIChjbVByb3AgcHJvcF9zdWZmaXhlZCA9CiAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfSU5URVJGQUNFX0xJQlJBUklFUyIgKyBzdWZmaXgpKSB7CiAgICAgcHJvcENvbnRlbnQgPSBwcm9wX3N1ZmZpeGVkOwotICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIHByb3AgPQotICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIikpIHsKKyAgfSBlbHNlIGlmIChjbVByb3AgcHJvcCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfSU5URVJGQUNFX0xJQlJBUklFUyIpKSB7CiAgICAgcHJvcENvbnRlbnQgPSBwcm9wOwogICB9IGVsc2UgewogICAgIHJldHVybjsKQEAgLTc5MCwxMyArNzkwLDEzIEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgaWYgKCEqcHJvcENvbnRlbnQpIHsKKyAgaWYgKHByb3BDb250ZW50LT5lbXB0eSgpKSB7CiAgICAgcHJvcGVydGllc1siSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIiArIHN1ZmZpeF0uY2xlYXIoKTsKICAgICByZXR1cm47CiAgIH0KIAogICBzdGQ6OnN0cmluZyBwcmVwcm8gPQotICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2Vzcyhwcm9wQ29udGVudCwgcHJlcHJvY2Vzc1J1bGUpOworICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcygqcHJvcENvbnRlbnQsIHByZXByb2Nlc3NSdWxlKTsKICAgaWYgKCFwcmVwcm8uZW1wdHkoKSkgewogICAgIHRoaXMtPlJlc29sdmVUYXJnZXRzSW5HZW5lcmF0b3JFeHByZXNzaW9ucyhwcmVwcm8sIHRhcmdldCwgbWlzc2luZ1RhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VGcmVlVGFyZ2V0cyk7CkBAIC04NTYsOCArODU2LDggQEAKICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNYW5hZ2VkVHlwZTo6TmF0aXZlKSB7CiAgICAgc3RkOjpzdHJpbmcgcHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9DT01NT05fTEFOR1VBR0VfUlVOVElNRSIsIHN1ZmZpeCk7CiAgICAgc3RkOjpzdHJpbmcgcHJvcHZhbDsKLSAgICBpZiAoYXV0byogcCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNPTU1PTl9MQU5HVUFHRV9SVU5USU1FIikpIHsKLSAgICAgIHByb3B2YWwgPSBwOworICAgIGlmIChjbVByb3AgcCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNPTU1PTl9MQU5HVUFHRV9SVU5USU1FIikpIHsKKyAgICAgIHByb3B2YWwgPSAqcDsKICAgICB9IGVsc2UgaWYgKHRhcmdldC0+SXNDU2hhcnBPbmx5KCkpIHsKICAgICAgIC8vIEMjIHByb2plY3RzIGRvIG5vdCBoYXZlIHRoZSAvY2xyIGZsYWcsIHNvIHdlIHNldCB0aGUgcHJvcGVydHkKICAgICAgIC8vIGhlcmUgdG8gbWFyayB0aGUgdGFyZ2V0IGFzIChvbmx5KSBtYW5hZ2VkIChpLmUuIG5vIC5saWIgZmlsZQpAQCAtOTI1LDEyICs5MjUsMTQgQEAKICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAKICAgLy8gSXNvbGF0ZSB0aGUgZmlsZSBwb2xpY3kgbGV2ZWwuCi0gIC8vIFdlIHVzZSAyLjYgaGVyZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHZlcnNpb24gYmVjYXVzZSBuZXdlcgotICAvLyB2ZXJzaW9ucyBvZiBDTWFrZSBzaG91bGQgYmUgYWJsZSB0byBleHBvcnQgZmlsZXMgaW1wb3J0ZWQgYnkgMi42Ci0gIC8vIHVudGlsIHRoZSBpbXBvcnQgZm9ybWF0IGNoYW5nZXMuCisgIC8vIFN1cHBvcnQgQ01ha2UgdmVyc2lvbnMgYXMgZmFyIGJhY2sgYXMgMi42IGJ1dCBhbHNvIHN1cHBvcnQgdXNpbmcgTkVXCisgIC8vIHBvbGljeSBzZXR0aW5ncyBmb3IgdXAgdG8gQ01ha2UgMy4xNyAodGhpcyB1cHBlciBsaW1pdCBtYXkgYmUgcmV2aWV3ZWQKKyAgLy8gYW5kIGluY3JlYXNlZCBmcm9tIHRpbWUgdG8gdGltZSkuIFRoaXMgcmVkdWNlcyB0aGUgb3Bwb3J0dW5pdHkgZm9yIENNYWtlCisgIC8vIHdhcm5pbmdzIHdoZW4gYW4gb2xkZXIgZXhwb3J0IGZpbGUgaXMgbGF0ZXIgdXNlZCB3aXRoIG5ld2VyIENNYWtlCisgIC8vIHZlcnNpb25zLgogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIG9zIDw8ICJjbWFrZV9wb2xpY3koUFVTSClcbiIKLSAgICAgPDwgImNtYWtlX3BvbGljeShWRVJTSU9OIDIuNilcbiI7CisgICAgIDw8ICJjbWFrZV9wb2xpY3koVkVSU0lPTiAyLjYuLi4zLjE3KVxuIjsKICAgLyogY2xhbmctZm9ybWF0IG9uICovCiB9CiAKQEAgLTExMTYsNyArMTExOCw3IEBACiAgICAgcmV0dXJuOwogICB9CiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgb3MgPDwgIiMgTWFrZSBzdXJlIHRoZSB0YXJnZXRzIHdoaWNoIGhhdmUgYmVlbiBleHBvcnRlZCBpbiBzb21lIG90aGVyIFxuIgorICBvcyA8PCAiIyBNYWtlIHN1cmUgdGhlIHRhcmdldHMgd2hpY2ggaGF2ZSBiZWVuIGV4cG9ydGVkIGluIHNvbWUgb3RoZXJcbiIKICAgICAgICAgIiMgZXhwb3J0IHNldCBleGlzdC5cbiIKICAgICAgICAgInVuc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X05PVF9GT1VORF9NRVNTQUdFX3RhcmdldHMpXG4iCiAgICAgICAgICJmb3JlYWNoKF90YXJnZXQgIjsKQEAgLTEyMTUsOSArMTIxNyw5IEBACiAgIHN0ZDo6c3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgIGF1dG8mIHRhcmdldFByb3BlcnRpZXMgPSBndGUtPlRhcmdldC0+R2V0UHJvcGVydGllcygpOwotICBpZiAoY29uc3QgY2hhciogZXhwb3J0UHJvcGVydGllcyA9CisgIGlmIChjbVByb3AgZXhwb3J0UHJvcGVydGllcyA9CiAgICAgICAgIHRhcmdldFByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZSgiRVhQT1JUX1BST1BFUlRJRVMiKSkgewotICAgIGZvciAoYXV0byYgcHJvcCA6IGNtRXhwYW5kZWRMaXN0KGV4cG9ydFByb3BlcnRpZXMpKSB7CisgICAgZm9yIChhdXRvJiBwcm9wIDogY21FeHBhbmRlZExpc3QoKmV4cG9ydFByb3BlcnRpZXMpKSB7CiAgICAgICAvKiBCbGFjayBsaXN0IHJlc2VydmVkIHByb3BlcnRpZXMgKi8KICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIklNUE9SVEVEXyIpIHx8CiAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJJTlRFUkZBQ0VfIikpIHsKQEAgLTEyMjgsMTUgKzEyMzAsMTUgQEAKICAgICAgICAgZXJyb3JNZXNzYWdlID0gZS5zdHIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgYXV0byBwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICAgICAgY21Qcm9wIHByb3BlcnR5VmFsdWUgPSB0YXJnZXRQcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA9PSBudWxscHRyKSB7CiAgICAgICAgIC8vIEFza2VkIHRvIGV4cG9ydCBhIHByb3BlcnR5IHRoYXQgaXNuJ3QgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0LiBEbyBub3QKICAgICAgICAgLy8gY29uc2lkZXIgdGhpcyBhbiBlcnJvciwgdGhlcmUncyBqdXN0IG5vdGhpbmcgdG8gZXhwb3J0LgogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZFZhbHVlID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKAotICAgICAgICBwcm9wZXJ0eVZhbHVlLCBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwQWxsR2VuZXJhdG9yRXhwcmVzc2lvbnMpOwotICAgICAgaWYgKGV2YWx1YXRlZFZhbHVlICE9IHByb3BlcnR5VmFsdWUpIHsKKyAgICAgICAgKnByb3BlcnR5VmFsdWUsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBBbGxHZW5lcmF0b3JFeHByZXNzaW9ucyk7CisgICAgICBpZiAoZXZhbHVhdGVkVmFsdWUgIT0gKnByb3BlcnR5VmFsdWUpIHsKICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICAgIGUgPDwgIlRhcmdldCBcIiIgPDwgZ3RlLT5UYXJnZXQtPkdldE5hbWUoKSA8PCAiXCIgY29udGFpbnMgcHJvcGVydHkgXCIiCiAgICAgICAgICAgPDwgcHJvcCA8PCAiXCIgaW4gRVhQT1JUX1BST1BFUlRJRVMgYnV0IHRoaXMgcHJvcGVydHkgY29udGFpbnMgYSAiCkBAIC0xMjQ0LDcgKzEyNDYsNyBAQAogICAgICAgICBlcnJvck1lc3NhZ2UgPSBlLnN0cigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBwcm9wZXJ0aWVzW3Byb3BdID0gcHJvcGVydHlWYWx1ZTsKKyAgICAgIHByb3BlcnRpZXNbcHJvcF0gPSAqcHJvcGVydHlWYWx1ZTsKICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHBvcnRJbnN0YWxsQW5kcm9pZE1LR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxBbmRyb2lkTUtHZW5lcmF0b3IuY3h4CmluZGV4IDk3MDJlMGUuLjgwZjc3NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxBbmRyb2lkTUtHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxBbmRyb2lkTUtHZW5lcmF0b3IuY3h4CkBAIC02Niw3ICs2Niw3IEBACiAgIG9zIDw8ICJMT0NBTF9NT0RVTEUgOj0gIjsKICAgb3MgPDwgdGFyZ2V0TmFtZSA8PCAiXG4iOwogICBvcyA8PCAiTE9DQUxfU1JDX0ZJTEVTIDo9ICQoX0lNUE9SVF9QUkVGSVgpLyI7Ci0gIG9zIDw8IHRhcmdldC0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiX19kZXN0IikgPDwgIi8iOworICBvcyA8PCB0YXJnZXQtPlRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJfX2Rlc3QiKSA8PCAiLyI7CiAgIHN0ZDo6c3RyaW5nIGNvbmZpZzsKICAgaWYgKCF0aGlzLT5Db25maWd1cmF0aW9ucy5lbXB0eSgpKSB7CiAgICAgY29uZmlnID0gdGhpcy0+Q29uZmlndXJhdGlvbnNbMF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHBvcnRMaWJyYXJ5RGVwZW5kZW5jaWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21FeHBvcnRMaWJyYXJ5RGVwZW5kZW5jaWVzQ29tbWFuZC5jeHgKaW5kZXggNjAxMWJhNC4uN2YzMWRkMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0TGlicmFyeURlcGVuZGVuY2llc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUV4cG9ydExpYnJhcnlEZXBlbmRlbmNpZXNDb21tYW5kLmN4eApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtOTUsOCArOTYsOCBAQAogICAgICAgICAgIC8vIEhhbmRsZSBzaW1wbGUgb3V0cHV0IG5hbWUgY2hhbmdlcy4gIFRoaXMgY29tbWFuZCBpcwogICAgICAgICAgIC8vIGRlcHJlY2F0ZWQgc28gd2UgZG8gbm90IHN1cHBvcnQgZnVsbCB0YXJnZXQgbmFtZQogICAgICAgICAgIC8vIHRyYW5zbGF0aW9uICh3aGljaCByZXF1aXJlcyBwZXItY29uZmlndXJhdGlvbiBpbmZvKS4KLSAgICAgICAgICBpZiAoY29uc3QgY2hhciogb3V0bmFtZSA9IGxpYnRndC0+R2V0UHJvcGVydHkoIk9VVFBVVF9OQU1FIikpIHsKLSAgICAgICAgICAgIGxpYiA9IG91dG5hbWU7CisgICAgICAgICAgaWYgKGNtUHJvcCBvdXRuYW1lID0gbGlidGd0LT5HZXRQcm9wZXJ0eSgiT1VUUFVUX05BTUUiKSkgeworICAgICAgICAgICAgbGliID0gKm91dG5hbWU7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHZhbHVlT2xkICs9IGxpYjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydFRyeUNvbXBpbGVGaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydFRyeUNvbXBpbGVGaWxlR2VuZXJhdG9yLmN4eAppbmRleCAzZGY2YTVjLi5jNmI2MTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRUcnlDb21waWxlRmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0VHJ5Q29tcGlsZUZpbGVHZW5lcmF0b3IuY3h4CkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgpAQCAtNTgsNyArNTksNyBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcE5hbWUsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSwgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiYgZW1pdHRlZCkKIHsKLSAgY29uc3QgY2hhciogcHJvcCA9IHRndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICBjbVByb3AgcHJvcCA9IHRndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogICBpZiAoIXByb3ApIHsKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKICAgfQpAQCAtNjcsMTEgKzY4LDExIEBACiAKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBkYWdDaGVja2VyKHRndCwgcHJvcE5hbWUsIG51bGxwdHIsIG51bGxwdHIpOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0gZ2UuUGFyc2UocHJvcCk7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0gZ2UuUGFyc2UoKnByb3ApOwogCiAgIGNtVGFyZ2V0IGR1bW15SGVhZCgidHJ5X2NvbXBpbGVfZHVtbXlfZXhlIiwgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFLAogICAgICAgICAgICAgICAgICAgICAgY21UYXJnZXQ6OlZpc2liaWxpdHlOb3JtYWwsIHRndC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLAotICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICBjbVRhcmdldDo6UGVyQ29uZmlnOjpZZXMpOwogCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGdEdW1teUhlYWQoJmR1bW15SGVhZCwgdGd0LT5HZXRMb2NhbEdlbmVyYXRvcigpKTsKIApAQCAtOTUsMTEgKzk2LDExIEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IHRhcmdldC0+R2V0UHJvcGVydHlLZXlzKCk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiBwcm9wcykgewogCi0gICAgcHJvcGVydGllc1twXSA9IHRhcmdldC0+R2V0UHJvcGVydHkocCk7CisgICAgcHJvcGVydGllc1twXSA9ICp0YXJnZXQtPkdldFByb3BlcnR5KHApOwogCi0gICAgaWYgKHAuZmluZCgiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIikgPT0gMCB8fAotICAgICAgICBwLmZpbmQoIklNUE9SVEVEX0xJTktfREVQRU5ERU5UX0xJQlJBUklFUyIpID09IDAgfHwKLSAgICAgICAgcC5maW5kKCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChwLCAiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIikgfHwKKyAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHAsICJJTVBPUlRFRF9MSU5LX0RFUEVOREVOVF9MSUJSQVJJRVMiKSB8fAorICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgocCwgIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBldmFsUmVzdWx0ID0KICAgICAgICAgdGhpcy0+RmluZFRhcmdldHMocCwgdGFyZ2V0LCBzdGQ6OnN0cmluZygpLCBlbWl0dGVkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhwclBhcnNlckhlbHBlci5oIGIvU291cmNlL2NtRXhwclBhcnNlckhlbHBlci5oCmluZGV4IGVhZjVkYzcuLjcxN2FjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4cHJQYXJzZXJIZWxwZXIuaAorKysgYi9Tb3VyY2UvY21FeHByUGFyc2VySGVscGVyLmgKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2t3aW1sLmgiCisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAogY2xhc3MgY21FeHByUGFyc2VySGVscGVyCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHRyYUNvZGVCbG9ja3NHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXh0cmFDb2RlQmxvY2tzR2VuZXJhdG9yLmN4eAppbmRleCBiNzEwNDY3Li5iZTIyYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHRyYUNvZGVCbG9ja3NHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4dHJhQ29kZUJsb2Nrc0dlbmVyYXRvci5jeHgKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgIC8vIENvbnZlcnQKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsaXN0RmlsZSA6IGxpc3RGaWxlcykgewogICAgICAgLy8gZG9uJ3QgcHV0IGNtYWtlJ3Mgb3duIGZpbGVzIGludG8gdGhlIHByb2plY3QgKCMxMjExMCk6Ci0gICAgICBpZiAobGlzdEZpbGUuZmluZChjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZVJvb3QoKSkgPT0gMCkgeworICAgICAgaWYgKGNtSGFzUHJlZml4KGxpc3RGaWxlLCBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZVJvb3QoKSkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKQEAgLTIzNiw5ICsyMzYsOCBAQAogICAgICAgLy8KICAgICAgIC8vIEFsc28gd2UgY2FuIGRpc2FibGUgZXh0ZXJuYWwgKG91dHNpZGUgdGhlIHByb2plY3QpIGZpbGVzIGJ5IHNldHRpbmcgT04KICAgICAgIC8vIENNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUyB2YXJpYWJsZS4KLSAgICAgIGNvbnN0IGJvb2wgZXhjbHVkZUV4dGVybmFsID0KLSAgICAgICAgY21Jc09uKGl0LnNlY29uZFswXS0+R2V0TWFrZWZpbGUoKS0+R2V0U2FmZURlZmluaXRpb24oCi0gICAgICAgICAgIkNNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUyIpKTsKKyAgICAgIGNvbnN0IGJvb2wgZXhjbHVkZUV4dGVybmFsID0gaXQuc2Vjb25kWzBdLT5HZXRNYWtlZmlsZSgpLT5Jc09uKAorICAgICAgICAiQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTIik7CiAgICAgICBpZiAoIXNwbGl0dGVkLmVtcHR5KCkgJiYKICAgICAgICAgICAoIWV4Y2x1ZGVFeHRlcm5hbCB8fCAocmVsYXRpdmUuZmluZCgiLi4iKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykpICYmCiAgICAgICAgICAgcmVsYXRpdmUuZmluZCgiQ01ha2VGaWxlcyIpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CkBAIC0zMDEsMTEgKzMwMCwxMSBAQAogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKICAgICAgICAgICAvLyBBZGQgYWxsIHV0aWxpdHkgdGFyZ2V0cywgZXhjZXB0IHRoZSBOaWdodGx5L0NvbnRpbnVvdXMvCiAgICAgICAgICAgLy8gRXhwZXJpbWVudGFsLSJzdWIidGFyZ2V0cyBhcyBlLmcuIE5pZ2h0bHlTdGFydAotICAgICAgICAgIGlmICgoKHRhcmdldE5hbWUuZmluZCgiTmlnaHRseSIpID09IDApICYmCisgICAgICAgICAgaWYgKChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIk5pZ2h0bHkiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIk5pZ2h0bHkiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkNvbnRpbnVvdXMiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJDb250aW51b3VzIikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJDb250aW51b3VzIikpIHx8Ci0gICAgICAgICAgICAgICgodGFyZ2V0TmFtZS5maW5kKCJFeHBlcmltZW50YWwiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJFeHBlcmltZW50YWwiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkV4cGVyaW1lbnRhbCIpKSkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQpAQCAtMzcwLDcgKzM2OSw3IEBACiAgICAgICAgICAgICBzdGQ6OnN0cmluZyBsYW5nID0gcy0+R2V0T3JEZXRlcm1pbmVMYW5ndWFnZSgpOwogICAgICAgICAgICAgaWYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIkNYWCIgfHwgbGFuZyA9PSAiQ1VEQSIpIHsKICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHNyY2V4dCA9IHMtPkdldEV4dGVuc2lvbigpOwotICAgICAgICAgICAgICBpc0NGaWxlID0gY20tPklzU291cmNlRXh0ZW5zaW9uKHNyY2V4dCk7CisgICAgICAgICAgICAgIGlzQ0ZpbGUgPSBjbS0+SXNBQ0xpa2VTb3VyY2VFeHRlbnNpb24oc3JjZXh0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZ1bGxQYXRoID0gcy0+UmVzb2x2ZUZ1bGxQYXRoKCk7CkBAIC0zODAsOSArMzc5LDggQEAKICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6UmVsYXRpdmVQYXRoKGxnLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgZnVsbFBhdGgpOwogICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGlzIGZpbGUgaWYgaXQgaGFzICIuLiIgaW4gcmVsYXRpdmUgcGF0aCBhbmQKICAgICAgICAgICAgIC8vIGlmIENNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUyB2YXJpYWJsZSBpcyBvbi4KLSAgICAgICAgICAgIGNvbnN0IGJvb2wgZXhjbHVkZUV4dGVybmFsID0KLSAgICAgICAgICAgICAgY21Jc09uKGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICAiQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTIikpOworICAgICAgICAgICAgY29uc3QgYm9vbCBleGNsdWRlRXh0ZXJuYWwgPSBsZy0+R2V0TWFrZWZpbGUoKS0+SXNPbigKKyAgICAgICAgICAgICAgIkNNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUyIpOwogICAgICAgICAgICAgaWYgKGV4Y2x1ZGVFeHRlcm5hbCAmJgogICAgICAgICAgICAgICAgIChyZWxhdGl2ZS5maW5kKCIuLiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSkgewogICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTcyMyw3ICs3MjEsNyBAQAogICBpZiAoZ2VuZXJhdG9yID09ICJOTWFrZSBNYWtlZmlsZXMiIHx8IGdlbmVyYXRvciA9PSAiTk1ha2UgTWFrZWZpbGVzIEpPTSIpIHsKICAgICAvLyBGb3IgV2luZG93cyBDb252ZXJ0VG9PdXRwdXRQYXRoIGFscmVhZHkgYWRkcyBxdW90ZXMgd2hlbiByZXF1aXJlZC4KICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGVzY2FwZWQsIHNlZQotICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMzk1MgorICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEzOTUyCiAgICAgc3RkOjpzdHJpbmcgbWFrZWZpbGVOYW1lID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aChtYWtlZmlsZSk7CiAgICAgY29tbWFuZCArPSAiIC9OT0xPR08gL2YgIjsKICAgICBjb21tYW5kICs9IG1ha2VmaWxlTmFtZTsKQEAgLTczMSw3ICs3MjksNyBAQAogICAgIGNvbW1hbmQgKz0gdGFyZ2V0OwogICB9IGVsc2UgaWYgKGdlbmVyYXRvciA9PSAiTWluR1cgTWFrZWZpbGVzIikgewogICAgIC8vIG5vIGVzY2FwaW5nIG9mIHNwYWNlcyBpbiB0aGlzIGNhc2UsIHNlZQotICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMDAxNAorICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEwMDE0CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG1ha2VmaWxlTmFtZSA9IG1ha2VmaWxlOwogICAgIGNvbW1hbmQgKz0gIiAtZiBcIiI7CiAgICAgY29tbWFuZCArPSBtYWtlZmlsZU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHRyYUNvZGVMaXRlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CmluZGV4IGRlNDBjNzcuLjk1Y2ZiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CkBAIC0yMDQsOSArMjA0LDcgQEAKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6IHsKICAgICAgIHByb2plY3RUeXBlID0gIlN0YXRpYyBMaWJyYXJ5IjsKICAgICB9IGJyZWFrOwotICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWTogewotICAgICAgcHJvamVjdFR5cGUgPSAiRHluYW1pYyBMaWJyYXJ5IjsKLSAgICB9IGJyZWFrOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6IHsKICAgICAgIHByb2plY3RUeXBlID0gIkR5bmFtaWMgTGlicmFyeSI7CiAgICAgfSBicmVhazsKQEAgLTIyOSw4ICsyMjcsNyBAQAogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzLT5HZXRFeHRlbnNpb24oKSk7CiAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBzb3VyY2Ugb3IgYSBpbmNsdWRlIGZpbGUKICAgICAgICAgLy8gdGhlbiBwdXQgaXQgYWNjb3JkaW5nbHkgaW50byBvbmUgb2YgdGhlIHR3byBjb250YWluZXJzCi0gICAgICAgIGlmIChjbS0+SXNTb3VyY2VFeHRlbnNpb24oZXh0TG93ZXIpIHx8IGNtLT5Jc0N1ZGFFeHRlbnNpb24oZXh0TG93ZXIpIHx8Ci0gICAgICAgICAgICBjbS0+SXNGb3J0cmFuRXh0ZW5zaW9uKGV4dExvd2VyKSkgeworICAgICAgICBpZiAoY20tPklzQUtub3duU291cmNlRXh0ZW5zaW9uKGV4dExvd2VyKSkgewogICAgICAgICAgIGNGaWxlc1tmdWxsUGF0aF0gPSBzOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIG90aGVyRmlsZXMuaW5zZXJ0KGZ1bGxQYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5jeHgKaW5kZXggNzhjYWJjZS4uN2JjNDUzNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5jeHgKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VHcm91cC5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKQEAgLTE4NywxMCArMTg4LDEwIEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgZm91dCA8PCAiZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEiIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAiZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTFcbiI7CiAgIGNvbnN0IGNoYXIqIGVuY29kaW5nID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0VDTElQU0VfUkVTT1VSQ0VfRU5DT0RJTkciKTsKICAgaWYgKGVuY29kaW5nKSB7Ci0gICAgZm91dCA8PCAiZW5jb2RpbmcvPHByb2plY3Q+PSIgPDwgZW5jb2RpbmcgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgImVuY29kaW5nLzxwcm9qZWN0Pj0iIDw8IGVuY29kaW5nIDw8ICdcbic7CiAgIH0KIH0KIApAQCAtMjQzLDggKzI0NCw3IEBACiAgIGNvbnN0IGJvb2wgZW52VmFyU2V0ID0gY21TeXN0ZW1Ub29sczo6R2V0RW52KGVudlZhciwgZW52VmFyVmFsdWUpOwogCiAgIHN0ZDo6c3RyaW5nIGNhY2hlRW50cnlOYW1lID0gY21TdHJDYXQoIkNNQUtFX0VDTElQU0VfRU5WVkFSXyIsIGVudlZhcik7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBjYWNoZVZhbHVlID0KLSAgICBsZy5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoY2FjaGVFbnRyeU5hbWUpOworICBjbVByb3AgY2FjaGVWYWx1ZSA9IGxnLkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShjYWNoZUVudHJ5TmFtZSk7CiAKICAgLy8gbm93IHdlIGhhdmUgYm90aCwgZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UKICAgc3RkOjpzdHJpbmcgdmFsdWVUb1VzZTsKQEAgLTI1NSw4ICsyNTUsOCBAQAogICAgIC8vIFRoZSB2YXJpYWJsZSBpcyBpbiB0aGUgZW52LCBidXQgbm90IGluIHRoZSBjYWNoZS4gVXNlIGl0IGFuZCBwdXQgaXQKICAgICAvLyBpbiB0aGUgY2FjaGUKICAgICB2YWx1ZVRvVXNlID0gZW52VmFyVmFsdWU7Ci0gICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbihjYWNoZUVudHJ5TmFtZSwgdmFsdWVUb1VzZS5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVFbnRyeU5hbWUuY19zdHIoKSwgY21TdGF0ZUVudW1zOjpTVFJJTkcsIHRydWUpOworICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oY2FjaGVFbnRyeU5hbWUsIHZhbHVlVG9Vc2UsIGNhY2hlRW50cnlOYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlNUUklORywgdHJ1ZSk7CiAgICAgbWYtPkdldENNYWtlSW5zdGFuY2UoKS0+U2F2ZUNhY2hlKGxnLkdldEJpbmFyeURpcmVjdG9yeSgpKTsKICAgfSBlbHNlIGlmICghZW52VmFyU2V0ICYmIGNhY2hlVmFsdWUgIT0gbnVsbHB0cikgewogICAgIC8vIEl0IGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlLCBidXQgbm90IGluIHRoZSBlbnYsIHNvIHVzZSBpdCBmcm9tIHRoZSBjYWNoZQpAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgdmFsdWVUb1VzZSA9ICpjYWNoZVZhbHVlOwogICAgIGlmICh2YWx1ZVRvVXNlLmZpbmQoZW52VmFyVmFsdWUpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICB2YWx1ZVRvVXNlID0gZW52VmFyVmFsdWU7Ci0gICAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKGNhY2hlRW50cnlOYW1lLCB2YWx1ZVRvVXNlLmNfc3RyKCksCisgICAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKGNhY2hlRW50cnlOYW1lLCB2YWx1ZVRvVXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5TmFtZS5jX3N0cigpLCBjbVN0YXRlRW51bXM6OlNUUklORywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICBtZi0+R2V0Q01ha2VJbnN0YW5jZSgpLT5TYXZlQ2FjaGUobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCkpOwpAQCAtNDE1LDkgKzQxNSw5IEBACiAgICAgeG1sLkVsZW1lbnQoIm5hdHVyZSIsIG4pOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGV4dHJhTmF0dXJlc1Byb3AgPQorICBpZiAoY21Qcm9wIGV4dHJhTmF0dXJlc1Byb3AgPQogICAgICAgICBtZi0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIkVDTElQU0VfRVhUUkFfTkFUVVJFUyIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4dHJhTmF0dXJlcyA9IGNtRXhwYW5kZWRMaXN0KGV4dHJhTmF0dXJlc1Byb3ApOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHRyYU5hdHVyZXMgPSBjbUV4cGFuZGVkTGlzdCgqZXh0cmFOYXR1cmVzUHJvcCk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IGV4dHJhTmF0dXJlcykgewogICAgICAgeG1sLkVsZW1lbnQoIm5hdHVyZSIsIG4pOwogICAgIH0KQEAgLTQzMCw3ICs0MzAsNyBAQAogICBpZiAodGhpcy0+SXNPdXRPZlNvdXJjZUJ1aWxkKSB7CiAgICAgLy8gY3JlYXRlIGEgbGlua2VkIHJlc291cmNlIHRvIENNQUtFX1NPVVJDRV9ESVIKICAgICAvLyAodGhpcyBpcyBub3QgZG9uZSBhbnltb3JlIGZvciBlYWNoIHByb2plY3QgYmVjYXVzZSBvZgotICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy85OTc4IGFuZCBiZWNhdXNlIEkgZm91bmQKKyAgICAvLyBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy85OTc4IGFuZCBiZWNhdXNlIEkgZm91bmQKICAgICAvLyBpdCBhY3R1YWxseSBxdWl0ZSBjb25mdXNpbmcgaW4gYmlnZ2VyIHByb2plY3RzIHdpdGggbWFueSBkaXJlY3RvcmllcyBhbmQKICAgICAvLyBwcm9qZWN0cywgQWxleAogCkBAIC03NTQsMTEgKzc1NCwxMSBAQAogICBlbW1pdGVkLmNsZWFyKCk7CiAgIGZvciAoY29uc3QgYXV0byYgbGdlbiA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKIAotICAgIGlmIChjb25zdCBjaGFyKiBjZGVmcyA9CisgICAgaWYgKGNtUHJvcCBjZGVmcyA9CiAgICAgICAgICAgbGdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0UHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiKSkgewogICAgICAgLy8gRXhwYW5kIHRoZSBsaXN0LgogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlZnM7Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlNwbGl0KGNkZWZzLCBkZWZzKTsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3BsaXQoKmNkZWZzLCBkZWZzKTsKIAogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZCA6IGRlZnMpIHsKICAgICAgICAgaWYgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChkKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewpAQCAtOTM2LDExICs5MzYsMTEgQEAKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CiAgICAgICAgICAgLy8gQWRkIGFsbCB1dGlsaXR5IHRhcmdldHMsIGV4Y2VwdCB0aGUgTmlnaHRseS9Db250aW51b3VzLwogICAgICAgICAgIC8vIEV4cGVyaW1lbnRhbC0ic3ViInRhcmdldHMgYXMgZS5nLiBOaWdodGx5U3RhcnQKLSAgICAgICAgICBpZiAoKCh0YXJnZXROYW1lLmZpbmQoIk5pZ2h0bHkiKSA9PSAwKSAmJgorICAgICAgICAgIGlmICgoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJOaWdodGx5IikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJOaWdodGx5IikpIHx8Ci0gICAgICAgICAgICAgICgodGFyZ2V0TmFtZS5maW5kKCJDb250aW51b3VzIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiQ29udGludW91cyIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiQ29udGludW91cyIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiRXhwZXJpbWVudGFsIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiRXhwZXJpbWVudGFsIikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJFeHBlcmltZW50YWwiKSkpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTk4MSw3ICs5ODEsNiBAQAogICAgICAgICAgIH0KICAgICAgICAgfSBicmVhazsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZOgotICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIGJyZWFrOwogICAgICAgfQpAQCAtMTAzMyw5ICsxMDMyLDkgQEAKICAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gc3RvcmFnZU1vZHVsZQogCiAgIC8vIEFwcGVuZCBhZGRpdGlvbmFsIGNwcm9qZWN0IGNvbnRlbnRzIHdpdGhvdXQgYXBwbHlpbmcgYW55IFhNTCBmb3JtYXR0aW5nCi0gIGlmIChjb25zdCBjaGFyKiBleHRyYUNQcm9qZWN0Q29udGVudHMgPQorICBpZiAoY21Qcm9wIGV4dHJhQ1Byb2plY3RDb250ZW50cyA9CiAgICAgICAgIG1mLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiRUNMSVBTRV9FWFRSQV9DUFJPSkVDVF9DT05URU5UUyIpKSB7Ci0gICAgZm91dCA8PCBleHRyYUNQcm9qZWN0Q29udGVudHM7CisgICAgZm91dCA8PCAqZXh0cmFDUHJvamVjdENvbnRlbnRzOwogICB9CiAKICAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gY3Byb2plY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhS2F0ZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYUthdGVHZW5lcmF0b3IuY3h4CmluZGV4IDNhMjI4NDYuLjAxZmFjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhS2F0ZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXh0cmFLYXRlR2VuZXJhdG9yLmN4eApAQCAtMTI5LDkgKzEyOSw4IEBACiAgICAgICAgICAgICBpZiAodGFyZ2V0TmFtZSA9PSAiZWRpdF9jYWNoZSIpIHsKICAgICAgICAgICAgICAgY29uc3QgY2hhciogZWRpdENvbW1hbmQgPQogICAgICAgICAgICAgICAgIGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKCJDTUFLRV9FRElUX0NPTU1BTkQiKTsKLSAgICAgICAgICAgICAgaWYgKGVkaXRDb21tYW5kID09IG51bGxwdHIpIHsKLSAgICAgICAgICAgICAgICBpbnNlcnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJzdHIoZWRpdENvbW1hbmQsICJjY21ha2UiKSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgIGlmIChlZGl0Q29tbWFuZCA9PSBudWxscHRyIHx8CisgICAgICAgICAgICAgICAgICBzdHJzdHIoZWRpdENvbW1hbmQsICJjY21ha2UiKSAhPSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0VGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE0NCwxMSArMTQzLDExIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgogICAgICAgICAgIC8vIEFkZCBhbGwgdXRpbGl0eSB0YXJnZXRzLCBleGNlcHQgdGhlIE5pZ2h0bHkvQ29udGludW91cy8KICAgICAgICAgICAvLyBFeHBlcmltZW50YWwtInN1YiJ0YXJnZXRzIGFzIGUuZy4gTmlnaHRseVN0YXJ0Ci0gICAgICAgICAgaWYgKCgodGFyZ2V0TmFtZS5maW5kKCJOaWdodGx5IikgPT0gMCkgJiYKKyAgICAgICAgICBpZiAoKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiTmlnaHRseSIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiTmlnaHRseSIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiQ29udGludW91cyIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkNvbnRpbnVvdXMiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkNvbnRpbnVvdXMiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkV4cGVyaW1lbnRhbCIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkV4cGVyaW1lbnRhbCIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiRXhwZXJpbWVudGFsIikpKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0yNzQsNyArMjczLDcgQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0eXBlLAogICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgcmV0dXJuIG5hbWUgKyAodHlwZS5lbXB0eSgpID8gIiIgOiAiLSIpICsgdHlwZSArICJAIiArIHBhdGg7CisgIHJldHVybiBuYW1lICsgKHR5cGUuZW1wdHkoKSA/ICIiIDogIi0iKSArIHR5cGUgKyAnQCcgKyBwYXRoOwogfQogCiBzdGQ6OnN0cmluZyBjbUV4dHJhS2F0ZUdlbmVyYXRvcjo6R2V0UGF0aEJhc2VuYW1lKApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmN4eAppbmRleCA0MTM0NDljLi4zZTI2NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmN4eApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTE5OSwxMSArMjAwLDExIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgogICAgICAgICAgIC8vIEFkZCBhbGwgdXRpbGl0eSB0YXJnZXRzLCBleGNlcHQgdGhlIE5pZ2h0bHkvQ29udGludW91cy8KICAgICAgICAgICAvLyBFeHBlcmltZW50YWwtInN1YiJ0YXJnZXRzIGFzIGUuZy4gTmlnaHRseVN0YXJ0Ci0gICAgICAgICAgaWYgKCgodGFyZ2V0TmFtZS5maW5kKCJOaWdodGx5IikgPT0gMCkgJiYKKyAgICAgICAgICBpZiAoKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiTmlnaHRseSIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiTmlnaHRseSIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiQ29udGludW91cyIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkNvbnRpbnVvdXMiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkNvbnRpbnVvdXMiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkV4cGVyaW1lbnRhbCIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkV4cGVyaW1lbnRhbCIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiRXhwZXJpbWVudGFsIikpKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0zMjcsNyArMzI4LDcgQEAKICAgICBzdGQ6OnN0cmluZyBtYWtlZmlsZU5hbWU7CiAgICAgaWYgKGdlbmVyYXRvciA9PSAiTWluR1cgTWFrZWZpbGVzIikgewogICAgICAgLy8gbm8gZXNjYXBpbmcgb2Ygc3BhY2VzIGluIHRoaXMgY2FzZSwgc2VlCi0gICAgICAvLyBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTAwMTQKKyAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEwMDE0CiAgICAgICBtYWtlZmlsZU5hbWUgPSBtYWtlZmlsZTsKICAgICB9IGVsc2UgewogICAgICAgbWFrZWZpbGVOYW1lID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aChtYWtlZmlsZSk7CkBAIC0zNDgsNiArMzQ5LDEzIEBACiAgIGlmIChsYW5ndWFnZS5lbXB0eSgpKSB7CiAgICAgbGFuZ3VhZ2UgPSAiQyI7CiAgIH0KKworICAvLyBleHBsaWNpdGx5IGFkZCB0aGUgZXhwbGljaXQgbGFuZ3VhZ2UgZmxhZyBiZWZvcmUgYW55IG90aGVyIGZsYWcKKyAgLy8gdGhpcyB3YXkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB1c2VyIGZsYWdzIGlzIG1haW50YWluZWQKKyAgaWYgKHNvdXJjZS0+R2V0UHJvcGVydHkoIkxBTkdVQUdFIikpIHsKKyAgICBsZy0+QXBwZW5kRmVhdHVyZU9wdGlvbnMoZmxhZ3MsIGxhbmd1YWdlLCAiRVhQTElDSVRfTEFOR1VBR0UiKTsKKyAgfQorCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcgPQogICAgIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQlVJTERfVFlQRSIpOwogCkBAIC0zNTgsMTQgKzM2NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlKTsKIAogICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX0ZMQUdTKCJDT01QSUxFX0ZMQUdTIik7Ci0gIGlmIChjb25zdCBjaGFyKiBjZmxhZ3MgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7Ci0gICAgbGctPkFwcGVuZEZsYWdzKGZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUykpOworICBpZiAoY21Qcm9wIGNmbGFncyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9GTEFHUykpIHsKKyAgICBsZy0+QXBwZW5kRmxhZ3MoZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNmbGFncywgQ09NUElMRV9GTEFHUykpOwogICB9CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvcHRpb25zID0gc291cmNlLT5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CisgIGlmIChjbVByb3AgY29wdGlvbnMgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKICAgICBsZy0+QXBwZW5kQ29tcGlsZU9wdGlvbnMoCi0gICAgICBmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb3B0aW9ucywgQ09NUElMRV9PUFRJT05TKSk7CisgICAgICBmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOwogICB9CiAKICAgcmV0dXJuIGZsYWdzOwpAQCAtMzg3LDE3ICszOTUsMTcgQEAKICAgLy8gQWRkIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyBmb3IgdGhpcyB0YXJnZXQgYW5kIGNvbmZpZ3VyYXRpb24uCiAgIGxnLT5HZXRUYXJnZXREZWZpbmVzKHRhcmdldCwgY29uZmlnLCBsYW5ndWFnZSwgZGVmaW5lcyk7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfREVGSU5JVElPTlMoIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKKyAgaWYgKGNtUHJvcCBjb21waWxlX2RlZnMgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CiAgICAgbGctPkFwcGVuZERlZmluZXMoCi0gICAgICBkZWZpbmVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykpOworICAgICAgZGVmaW5lcywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBkZWZQcm9wTmFtZSA9CiAgICAgY21TdHJDYXQoIkNPTVBJTEVfREVGSU5JVElPTlNfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZykpOwotICBpZiAoY29uc3QgY2hhciogY29uZmlnX2NvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CisgIGlmIChjbVByb3AgY29uZmlnX2NvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgbGctPkFwcGVuZERlZmluZXMoCiAgICAgICBkZWZpbmVzLAotICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBkZWZpbmVzU3RyaW5nOwpAQCAtNDE5LDkgKzQyNyw5IEBACiAKICAgLy8gQWRkIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRoaXMgc291cmNlIGZpbGUKICAgY29uc3Qgc3RkOjpzdHJpbmcgSU5DTFVERV9ESVJFQ1RPUklFUygiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwotICBpZiAoY29uc3QgY2hhciogY2luY2x1ZGVzID0gc291cmNlLT5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgeworICBpZiAoY21Qcm9wIGNpbmNsdWRlcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKICAgICBsZy0+QXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKAotICAgICAgaW5jbHVkZXMsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKSwKKyAgICAgIGluY2x1ZGVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjaW5jbHVkZXMsIElOQ0xVREVfRElSRUNUT1JJRVMpLAogICAgICAgKnNvdXJjZSk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUFQSS5jeHggYi9Tb3VyY2UvY21GaWxlQVBJLmN4eAppbmRleCBhNTZhZDIyLi5jMmFiMmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQVBJLmN4eAorKysgYi9Tb3VyY2UvY21GaWxlQVBJLmN4eApAQCAtNjY1LDcgKzY2NSw3IEBACiAKIC8vIFRoZSAiY29kZW1vZGVsIiBvYmplY3Qga2luZC4KIAotc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBDb2RlTW9kZWxWMk1pbm9yID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgQ29kZU1vZGVsVjJNaW5vciA9IDI7CiAKIHZvaWQgY21GaWxlQVBJOjpCdWlsZENsaWVudFJlcXVlc3RDb2RlTW9kZWwoCiAgIENsaWVudFJlcXVlc3QmIHIsIHN0ZDo6dmVjdG9yPFJlcXVlc3RWZXJzaW9uPiBjb25zdCYgdmVyc2lvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlQVBJLmggYi9Tb3VyY2UvY21GaWxlQVBJLmgKaW5kZXggZTE4M2UwZC4uYWUwNzYxMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUFQSS5oCisrKyBiL1NvdXJjZS9jbUZpbGVBUEkuaApAQCAtMTEsOSArMTEsOSBAQAogI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vcmVhZGVyLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3dyaXRlci5oPgogCiBjbGFzcyBjbWFrZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUFQSUNNYWtlRmlsZXMuY3h4IGIvU291cmNlL2NtRmlsZUFQSUNNYWtlRmlsZXMuY3h4CmluZGV4IDQ0YmE5NmMuLjFlNGYzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVBUElDTWFrZUZpbGVzLmN4eAorKysgYi9Tb3VyY2UvY21GaWxlQVBJQ01ha2VGaWxlcy5jeHgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogI2luY2x1ZGUgImNtRmlsZUFQSS5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlQVBJQ01ha2VGaWxlcy5oIGIvU291cmNlL2NtRmlsZUFQSUNNYWtlRmlsZXMuaAppbmRleCBhODUxYzMyLi4xYWUxZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQVBJQ01ha2VGaWxlcy5oCisrKyBiL1NvdXJjZS9jbUZpbGVBUElDTWFrZUZpbGVzLmgKQEAgLTUsNyArNSw3IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogCiBjbGFzcyBjbUZpbGVBUEk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVBUElDYWNoZS5jeHggYi9Tb3VyY2UvY21GaWxlQVBJQ2FjaGUuY3h4CmluZGV4IGVmNzc3OTUuLjNiYTk0M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVBUElDYWNoZS5jeHgKKysrIGIvU291cmNlL2NtRmlsZUFQSUNhY2hlLmN4eApAQCAtNyw5ICs3LDEwIEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKICNpbmNsdWRlICJjbUZpbGVBUEkuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtYWtlLmgiCiAKQEAgLTY3LDcgKzY4LDcgQEAKICAgZW50cnlbIm5hbWUiXSA9IG5hbWU7CiAgIGVudHJ5WyJ0eXBlIl0gPQogICAgIGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlUeXBlKG5hbWUpKTsKLSAgZW50cnlbInZhbHVlIl0gPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKG5hbWUpOworICBlbnRyeVsidmFsdWUiXSA9IHRoaXMtPlN0YXRlLT5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKG5hbWUpOwogCiAgIEpzb246OlZhbHVlIHByb3BlcnRpZXMgPSB0aGlzLT5EdW1wRW50cnlQcm9wZXJ0aWVzKG5hbWUpOwogICBpZiAoIXByb3BlcnRpZXMuZW1wdHkoKSkgewpAQCAtOTQsNyArOTUsOCBAQAogewogICBKc29uOjpWYWx1ZSBwcm9wZXJ0eSA9IEpzb246Om9iamVjdFZhbHVlOwogICBwcm9wZXJ0eVsibmFtZSJdID0gcHJvcDsKLSAgcHJvcGVydHlbInZhbHVlIl0gPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KG5hbWUsIHByb3ApOworICBjbVByb3AgcCA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkobmFtZSwgcHJvcCk7CisgIHByb3BlcnR5WyJ2YWx1ZSJdID0gcCA/ICpwIDogIiI7CiAgIHJldHVybiBwcm9wZXJ0eTsKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVBUElDYWNoZS5oIGIvU291cmNlL2NtRmlsZUFQSUNhY2hlLmgKaW5kZXggMDlkOWUxYy4uMmYzMGM3NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUFQSUNhY2hlLmgKKysrIGIvU291cmNlL2NtRmlsZUFQSUNhY2hlLmgKQEAgLTUsNyArNSw3IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogCiBjbGFzcyBjbUZpbGVBUEk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVBUElDb2RlbW9kZWwuY3h4IGIvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5jeHgKaW5kZXggOTU1MTk1Zi4uZTlhZjIwOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5jeHgKKysrIGIvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5jeHgKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogI2luY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgogI2luY2x1ZGUgImNtRmlsZUFQSS5oIgpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU291cmNlR3JvdXAuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC0xNzQsNiArMTc1LDM4IEBACiAgIH0KIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgSkJUcworeworcHVibGljOgorICBKQlRzKFQgdiA9IFQoKSwgc3RkOjp2ZWN0b3I8SkJUSW5kZXg+IGlkcyA9IHN0ZDo6dmVjdG9yPEpCVEluZGV4PigpKQorICAgIDogVmFsdWUoc3RkOjptb3ZlKHYpKQorICAgICwgQmFja3RyYWNlcyhzdGQ6Om1vdmUoaWRzKSkKKyAgeworICB9CisgIFQgVmFsdWU7CisgIHN0ZDo6dmVjdG9yPEpCVEluZGV4PiBCYWNrdHJhY2VzOworICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KEpCVHM8VD4gY29uc3QmIGwsIEpCVHM8VD4gY29uc3QmIHIpCisgIHsKKyAgICBpZiAoKGwuVmFsdWUgPT0gci5WYWx1ZSkgJiYgKGwuQmFja3RyYWNlcy5zaXplKCkgPT0gci5CYWNrdHJhY2VzLnNpemUoKSkpIHsKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbC5CYWNrdHJhY2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChsLkJhY2t0cmFjZXNbaV0uSW5kZXggIT0gci5CYWNrdHJhY2VzW2ldLkluZGV4KSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIHN0YXRpYyBib29sIFZhbHVlRXEoSkJUczxUPiBjb25zdCYgbCwgSkJUczxUPiBjb25zdCYgcikKKyAgeworICAgIHJldHVybiBsLlZhbHVlID09IHIuVmFsdWU7CisgIH0KKyAgc3RhdGljIGJvb2wgVmFsdWVMZXNzKEpCVHM8VD4gY29uc3QmIGwsIEpCVHM8VD4gY29uc3QmIHIpCisgIHsKKyAgICByZXR1cm4gbC5WYWx1ZSA8IHIuVmFsdWU7CisgIH0KK307CisKIGNsYXNzIEJhY2t0cmFjZURhdGEKIHsKICAgc3RkOjpzdHJpbmcgVG9wU291cmNlOwpAQCAtMjc2LDE0ICszMDksMTggQEAKIAogICBzdGQ6OnN0cmluZyBMYW5ndWFnZTsKICAgc3RkOjpzdHJpbmcgU3lzcm9vdDsKKyAgSkJUczxzdGQ6OnN0cmluZz4gTGFuZ3VhZ2VTdGFuZGFyZDsKICAgc3RkOjp2ZWN0b3I8SkJUPHN0ZDo6c3RyaW5nPj4gRmxhZ3M7CiAgIHN0ZDo6dmVjdG9yPEpCVDxzdGQ6OnN0cmluZz4+IERlZmluZXM7CisgIHN0ZDo6dmVjdG9yPEpCVDxzdGQ6OnN0cmluZz4+IFByZWNvbXBpbGVIZWFkZXJzOwogICBzdGQ6OnZlY3RvcjxJbmNsdWRlRW50cnk+IEluY2x1ZGVzOwogCiAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oQ29tcGlsZURhdGEgY29uc3QmIGwsIENvbXBpbGVEYXRhIGNvbnN0JiByKQogICB7CiAgICAgcmV0dXJuIChsLkxhbmd1YWdlID09IHIuTGFuZ3VhZ2UgJiYgbC5TeXNyb290ID09IHIuU3lzcm9vdCAmJgogICAgICAgICAgICAgbC5GbGFncyA9PSByLkZsYWdzICYmIGwuRGVmaW5lcyA9PSByLkRlZmluZXMgJiYKKyAgICAgICAgICAgIGwuUHJlY29tcGlsZUhlYWRlcnMgPT0gci5QcmVjb21waWxlSGVhZGVycyAmJgorICAgICAgICAgICAgbC5MYW5ndWFnZVN0YW5kYXJkID09IHIuTGFuZ3VhZ2VTdGFuZGFyZCAmJgogICAgICAgICAgICAgbC5JbmNsdWRlcyA9PSByLkluY2x1ZGVzKTsKICAgfQogfTsKQEAgLTMxMyw2ICszNTAsMTYgQEAKICAgICAgIHJlc3VsdCA9IHJlc3VsdCBeIGhhc2g8c3RkOjpzdHJpbmc+KCkoaS5WYWx1ZSkgXgogICAgICAgICBoYXNoPEpzb246OkFycmF5SW5kZXg+KCkoaS5CYWNrdHJhY2UuSW5kZXgpOwogICAgIH0KKyAgICBmb3IgKGF1dG8gY29uc3QmIGkgOiBpbi5QcmVjb21waWxlSGVhZGVycykgeworICAgICAgcmVzdWx0ID0gcmVzdWx0IF4gaGFzaDxzdGQ6OnN0cmluZz4oKShpLlZhbHVlKSBeCisgICAgICAgIGhhc2g8SnNvbjo6QXJyYXlJbmRleD4oKShpLkJhY2t0cmFjZS5JbmRleCk7CisgICAgfQorICAgIGlmICghaW4uTGFuZ3VhZ2VTdGFuZGFyZC5WYWx1ZS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSByZXN1bHQgXiBoYXNoPHN0ZDo6c3RyaW5nPigpKGluLkxhbmd1YWdlU3RhbmRhcmQuVmFsdWUpOworICAgICAgZm9yIChKQlRJbmRleCBiYWNrdHJhY2UgOiBpbi5MYW5ndWFnZVN0YW5kYXJkLkJhY2t0cmFjZXMpIHsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0IF4gaGFzaDxKc29uOjpBcnJheUluZGV4PigpKGJhY2t0cmFjZS5JbmRleCk7CisgICAgICB9CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIH07CkBAIC0zNTYsNiArNDAzLDE2IEBACiAgICAgcmV0dXJuIEpCVDxUPihidC5WYWx1ZSwgdGhpcy0+QmFja3RyYWNlcy5BZGQoYnQuQmFja3RyYWNlKSk7CiAgIH0KIAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgSkJUczxUPiBUb0pCVHMoQlRzPFQ+IGNvbnN0JiBidHMpCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxKQlRJbmRleD4gaWRzOworICAgIGZvciAoY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgYmFja3RyYWNlIDogYnRzLkJhY2t0cmFjZXMpIHsKKyAgICAgIGlkcy5lbXBsYWNlX2JhY2sodGhpcy0+QmFja3RyYWNlcy5BZGQoYmFja3RyYWNlKSk7CisgICAgfQorICAgIHJldHVybiBKQlRzPFQ+KGJ0cy5WYWx1ZSwgaWRzKTsKKyAgfQorCiAgIHZvaWQgUHJvY2Vzc0xhbmd1YWdlcygpOwogICB2b2lkIFByb2Nlc3NMYW5ndWFnZShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZyk7CiAKQEAgLTM2OSw2ICs0MjYsOCBAQAogICBKc29uOjpWYWx1ZSBEdW1wUGF0aHMoKTsKICAgSnNvbjo6VmFsdWUgRHVtcENvbXBpbGVEYXRhKENvbXBpbGVEYXRhIGNvbnN0JiBjZCk7CiAgIEpzb246OlZhbHVlIER1bXBJbmNsdWRlKENvbXBpbGVEYXRhOjpJbmNsdWRlRW50cnkgY29uc3QmIGluYyk7CisgIEpzb246OlZhbHVlIER1bXBQcmVjb21waWxlSGVhZGVyKEpCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGhlYWRlcik7CisgIEpzb246OlZhbHVlIER1bXBMYW5ndWFnZVN0YW5kYXJkKEpCVHM8c3RkOjpzdHJpbmc+IGNvbnN0JiBzdGFuZGFyZCk7CiAgIEpzb246OlZhbHVlIER1bXBEZWZpbmUoSkJUPHN0ZDo6c3RyaW5nPiBjb25zdCYgZGVmKTsKICAgSnNvbjo6VmFsdWUgRHVtcFNvdXJjZXMoKTsKICAgSnNvbjo6VmFsdWUgRHVtcFNvdXJjZShjbUdlbmVyYXRvclRhcmdldDo6U291cmNlQW5kS2luZCBjb25zdCYgc2ssCkBAIC00MzAsNyArNDg5LDcgQEAKICAgY29uc3QgYXV0byYgbWFrZWZpbGVzID0gZ2ctPkdldE1ha2VmaWxlcygpOwogICBpZiAoIW1ha2VmaWxlcy5lbXB0eSgpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICAgIG1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOworICAgICAgbWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlncykgewogICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKHRoaXMtPkR1bXBDb25maWd1cmF0aW9uKGNvbmZpZykpOwogICAgIH0KQEAgLTgyNSw2ICs4ODQsMTYgQEAKICAgICAgIHRoaXMtPlRvSkJUKGkpLAogICAgICAgdGhpcy0+R1QtPklzU3lzdGVtSW5jbHVkZURpcmVjdG9yeShpLlZhbHVlLCB0aGlzLT5Db25maWcsIGxhbmcpKTsKICAgfQorICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IHByZWNvbXBpbGVIZWFkZXJzID0KKyAgICB0aGlzLT5HVC0+R2V0UHJlY29tcGlsZUhlYWRlcnModGhpcy0+Q29uZmlnLCBsYW5nKTsKKyAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIHBjaCA6IHByZWNvbXBpbGVIZWFkZXJzKSB7CisgICAgY2QuUHJlY29tcGlsZUhlYWRlcnMuZW1wbGFjZV9iYWNrKHRoaXMtPlRvSkJUKHBjaCkpOworICB9CisgIEJUczxzdGQ6OnN0cmluZz4gY29uc3QqIGxhbmd1YWdlU3RhbmRhcmQgPQorICAgIHRoaXMtPkdULT5HZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkobGFuZywgdGhpcy0+Q29uZmlnKTsKKyAgaWYgKGxhbmd1YWdlU3RhbmRhcmQpIHsKKyAgICBjZC5MYW5ndWFnZVN0YW5kYXJkID0gdGhpcy0+VG9KQlRzKCpsYW5ndWFnZVN0YW5kYXJkKTsKKyAgfQogfQogCiBKc29uOjpBcnJheUluZGV4IFRhcmdldDo6QWRkU291cmNlR3JvdXAoY21Tb3VyY2VHcm91cCogc2csIEpzb246OkFycmF5SW5kZXggc2kpCkBAIC04NTUsOCArOTI0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC5MYW5ndWFnZSk7CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9GTEFHUygiQ09NUElMRV9GTEFHUyIpOwotICBpZiAoY29uc3QgY2hhciogY2ZsYWdzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7Ci0gICAgc3RkOjpzdHJpbmcgZmxhZ3MgPSBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUyk7CisgIGlmIChjbVByb3AgY2ZsYWdzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7CisgICAgc3RkOjpzdHJpbmcgZmxhZ3MgPSBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjZmxhZ3MsIENPTVBJTEVfRkxBR1MpOwogICAgIGZkLkZsYWdzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZmxhZ3MpLCBKQlRJbmRleCgpKTsKICAgfQogICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX09QVElPTlMoIkNPTVBJTEVfT1BUSU9OUyIpOwpAQCAtODcyLDE0ICs5NDEsMjcgQEAKICAgfQogCiAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgY29tcGlsZSBvcHRpb25zLgotICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPQotICAgIHRoaXMtPkdULT5HZXRQY2hTb3VyY2UodGhpcy0+Q29uZmlnLCBmZC5MYW5ndWFnZSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmNoaXRlY3R1cmVzOworICB0aGlzLT5HVC0+R2V0QXBwbGVBcmNocyh0aGlzLT5Db25maWcsIGFyY2hpdGVjdHVyZXMpOworICBpZiAoYXJjaGl0ZWN0dXJlcy5lbXB0eSgpKSB7CisgICAgYXJjaGl0ZWN0dXJlcy5lbXBsYWNlX2JhY2soKTsKKyAgfQogCi0gIGlmICghcGNoU291cmNlLmVtcHR5KCkgJiYgIXNmLT5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgeworICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBwY2hTb3VyY2VzOworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoIDogYXJjaGl0ZWN0dXJlcykgeworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9CisgICAgICB0aGlzLT5HVC0+R2V0UGNoU291cmNlKHRoaXMtPkNvbmZpZywgZmQuTGFuZ3VhZ2UsIGFyY2gpOworICAgIGlmICghcGNoU291cmNlLmVtcHR5KCkpIHsKKyAgICAgIHBjaFNvdXJjZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHBjaFNvdXJjZSwgYXJjaCkpOworICAgIH0KKyAgfQorCisgIGlmICghcGNoU291cmNlcy5lbXB0eSgpICYmICFzZi0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKICAgICBzdGQ6OnN0cmluZyBwY2hPcHRpb25zOwotICAgIGlmIChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCkgPT0gcGNoU291cmNlKSB7Ci0gICAgICBwY2hPcHRpb25zID0KLSAgICAgICAgdGhpcy0+R1QtPkdldFBjaENyZWF0ZUNvbXBpbGVPcHRpb25zKHRoaXMtPkNvbmZpZywgZmQuTGFuZ3VhZ2UpOworICAgIGF1dG8gcGNoSXQgPSBwY2hTb3VyY2VzLmZpbmQoc2YtPlJlc29sdmVGdWxsUGF0aCgpKTsKKyAgICBpZiAocGNoSXQgIT0gcGNoU291cmNlcy5lbmQoKSkgeworICAgICAgcGNoT3B0aW9ucyA9IHRoaXMtPkdULT5HZXRQY2hDcmVhdGVDb21waWxlT3B0aW9ucygKKyAgICAgICAgdGhpcy0+Q29uZmlnLCBmZC5MYW5ndWFnZSwgcGNoSXQtPnNlY29uZCk7CiAgICAgfSBlbHNlIHsKICAgICAgIHBjaE9wdGlvbnMgPQogICAgICAgICB0aGlzLT5HVC0+R2V0UGNoVXNlQ29tcGlsZU9wdGlvbnModGhpcy0+Q29uZmlnLCBmZC5MYW5ndWFnZSk7CkBAIC05MzYsMTAgKzEwMTgsMTAgQEAKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNvbmZpZ0ZpbGVEZWZpbmVzOwogICBjb25zdCBzdGQ6OnN0cmluZyBkZWZQcm9wTmFtZSA9CiAgICAgIkNPTVBJTEVfREVGSU5JVElPTlNfIiArIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSh0aGlzLT5Db25maWcpOwotICBpZiAoY29uc3QgY2hhciogY29uZmlnX2RlZnMgPSBzZi0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CisgIGlmIChjbVByb3AgY29uZmlnX2RlZnMgPSBzZi0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgbGctPkFwcGVuZERlZmluZXMoCiAgICAgICBjb25maWdGaWxlRGVmaW5lcywKLSAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29uZmlnX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKKyAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvbmZpZ19kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgIH0KIAogICBmZC5EZWZpbmVzLnJlc2VydmUoZmlsZURlZmluZXMuc2l6ZSgpICsgY29uZmlnRmlsZURlZmluZXMuc2l6ZSgpKTsKQEAgLTk2Nyw2ICsxMDQ5LDEyIEBACiAgIC8vIEFsbCBjb21waWxlIGdyb3VwcyBzaGFyZSB0aGUgc3lzcm9vdCBvZiB0aGUgdGFyZ2V0LgogICBjZC5TeXNyb290ID0gdGQuU3lzcm9vdDsKIAorICAvLyBBbGwgY29tcGlsZSBncm91cHMgc2hhcmUgdGhlIHByZWNvbXBpbGUgaGVhZGVycyBvZiB0aGUgdGFyZ2V0LgorICBjZC5QcmVjb21waWxlSGVhZGVycyA9IHRkLlByZWNvbXBpbGVIZWFkZXJzOworCisgIC8vIEFsbCBjb21waWxlIGdyb3VwcyBzaGFyZSB0aGUgbGFuZ3VhZ2Ugc3RhbmRhcmQgb2YgdGhlIHRhcmdldC4KKyAgY2QuTGFuZ3VhZ2VTdGFuZGFyZCA9IHRkLkxhbmd1YWdlU3RhbmRhcmQ7CisKICAgLy8gVXNlIHRhcmdldC13aWRlIGZsYWdzIGZvbGxvd2VkIGJ5IHNvdXJjZS1zcGVjaWZpYyBmbGFncy4KICAgY2QuRmxhZ3MucmVzZXJ2ZSh0ZC5GbGFncy5zaXplKCkgKyBmZC5GbGFncy5zaXplKCkpOwogICBjZC5GbGFncy5pbnNlcnQoY2QuRmxhZ3MuZW5kKCksIHRkLkZsYWdzLmJlZ2luKCksIHRkLkZsYWdzLmVuZCgpKTsKQEAgLTExMTcsNiArMTIwNSwxNyBAQAogICAgIH0KICAgICByZXN1bHRbImRlZmluZXMiXSA9IHN0ZDo6bW92ZShkZWZpbmVzKTsKICAgfQorICBpZiAoIWNkLlByZWNvbXBpbGVIZWFkZXJzLmVtcHR5KCkpIHsKKyAgICBKc29uOjpWYWx1ZSBwcmVjb21waWxlSGVhZGVycyA9IEpzb246OmFycmF5VmFsdWU7CisgICAgZm9yIChKQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBwY2ggOiBjZC5QcmVjb21waWxlSGVhZGVycykgeworICAgICAgcHJlY29tcGlsZUhlYWRlcnMuYXBwZW5kKHRoaXMtPkR1bXBQcmVjb21waWxlSGVhZGVyKHBjaCkpOworICAgIH0KKyAgICByZXN1bHRbInByZWNvbXBpbGVIZWFkZXJzIl0gPSBzdGQ6Om1vdmUocHJlY29tcGlsZUhlYWRlcnMpOworICB9CisgIGlmICghY2QuTGFuZ3VhZ2VTdGFuZGFyZC5WYWx1ZS5lbXB0eSgpKSB7CisgICAgcmVzdWx0WyJsYW5ndWFnZVN0YW5kYXJkIl0gPQorICAgICAgdGhpcy0+RHVtcExhbmd1YWdlU3RhbmRhcmQoY2QuTGFuZ3VhZ2VTdGFuZGFyZCk7CisgIH0KIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTEzMiw2ICsxMjMxLDI4IEBACiAgIHJldHVybiBpbmNsdWRlOwogfQogCitKc29uOjpWYWx1ZSBUYXJnZXQ6OkR1bXBQcmVjb21waWxlSGVhZGVyKEpCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGhlYWRlcikKK3sKKyAgSnNvbjo6VmFsdWUgcHJlY29tcGlsZUhlYWRlciA9IEpzb246Om9iamVjdFZhbHVlOworICBwcmVjb21waWxlSGVhZGVyWyJoZWFkZXIiXSA9IGhlYWRlci5WYWx1ZTsKKyAgdGhpcy0+QWRkQmFja3RyYWNlKHByZWNvbXBpbGVIZWFkZXIsIGhlYWRlci5CYWNrdHJhY2UpOworICByZXR1cm4gcHJlY29tcGlsZUhlYWRlcjsKK30KKworSnNvbjo6VmFsdWUgVGFyZ2V0OjpEdW1wTGFuZ3VhZ2VTdGFuZGFyZChKQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCYgc3RhbmRhcmQpCit7CisgIEpzb246OlZhbHVlIGxhbmd1YWdlU3RhbmRhcmQgPSBKc29uOjpvYmplY3RWYWx1ZTsKKyAgbGFuZ3VhZ2VTdGFuZGFyZFsic3RhbmRhcmQiXSA9IHN0YW5kYXJkLlZhbHVlOworICBpZiAoIXN0YW5kYXJkLkJhY2t0cmFjZXMuZW1wdHkoKSkgeworICAgIEpzb246OlZhbHVlIGJhY2t0cmFjZXMgPSBKc29uOjphcnJheVZhbHVlOworICAgIGZvciAoSkJUSW5kZXggYmFja3RyYWNlIDogc3RhbmRhcmQuQmFja3RyYWNlcykgeworICAgICAgYmFja3RyYWNlcy5hcHBlbmQoYmFja3RyYWNlLkluZGV4KTsKKyAgICB9CisgICAgbGFuZ3VhZ2VTdGFuZGFyZFsiYmFja3RyYWNlcyJdID0gYmFja3RyYWNlczsKKyAgfQorICByZXR1cm4gbGFuZ3VhZ2VTdGFuZGFyZDsKK30KKwogSnNvbjo6VmFsdWUgVGFyZ2V0OjpEdW1wRGVmaW5lKEpCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGRlZikKIHsKICAgSnNvbjo6VmFsdWUgZGVmaW5lID0gSnNvbjo6b2JqZWN0VmFsdWU7CkBAIC0xNDExLDkgKzE1MzIsOSBAQAogSnNvbjo6VmFsdWUgVGFyZ2V0OjpEdW1wRm9sZGVyKCkKIHsKICAgSnNvbjo6VmFsdWUgZm9sZGVyOwotICBpZiAoY29uc3QgY2hhciogZiA9IHRoaXMtPkdULT5HZXRQcm9wZXJ0eSgiRk9MREVSIikpIHsKKyAgaWYgKGNtUHJvcCBmID0gdGhpcy0+R1QtPkdldFByb3BlcnR5KCJGT0xERVIiKSkgewogICAgIGZvbGRlciA9IEpzb246Om9iamVjdFZhbHVlOwotICAgIGZvbGRlclsibmFtZSJdID0gZjsKKyAgICBmb2xkZXJbIm5hbWUiXSA9ICpmOwogICB9CiAgIHJldHVybiBmb2xkZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlQVBJQ29kZW1vZGVsLmggYi9Tb3VyY2UvY21GaWxlQVBJQ29kZW1vZGVsLmgKaW5kZXggZmZiZDkyOC4uYTZjNmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5oCisrKyBiL1NvdXJjZS9jbUZpbGVBUElDb2RlbW9kZWwuaApAQCAtNSw3ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKIGNsYXNzIGNtRmlsZUFQSTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtRmlsZUNvbW1hbmQuY3h4CmluZGV4IGUzNmFiZGMuLjcxMDFlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21GaWxlQ29tbWFuZC5jeHgKQEAgLTE2LDEzICsxNiwxNCBAQAogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KKworI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKICNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbV9rd2ltbC5oIgotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCiAjaW5jbHVkZSAiY21fc3lzX3N0YXQuaCIKIAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgpAQCAtMzMsMTIgKzM0LDE0IEBACiAjaW5jbHVkZSAiY21GaWxlSW5zdGFsbGVyLmgiCiAjaW5jbHVkZSAiY21GaWxlTG9ja1Bvb2wuaCIKICNpbmNsdWRlICJjbUZpbGVUaW1lcy5oIgorI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21IZXhGaWxlQ29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbU5ld0xpbmVTdHlsZS5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21SdW50aW1lRGVwZW5kZW5jeUFyY2hpdmUuaCIKQEAgLTQ3LDEwICs1MCwxMSBAQAogI2luY2x1ZGUgImNtU3ViY29tbWFuZFRhYmxlLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogI2luY2x1ZGUgImNtVGltZXN0YW1wLmgiCisjaW5jbHVkZSAiY21Xb3JraW5nRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKLSMgIGluY2x1ZGUgImNtX2N1cmwuaCIKKyMgIGluY2x1ZGUgPGNtM3AvY3VybC9jdXJsLmg+CiAKICMgIGluY2x1ZGUgImNtQ3VybC5oIgogIyAgaW5jbHVkZSAiY21GaWxlTG9ja1Jlc3VsdC5oIgpAQCAtNjcyLDEyICs2NzYsMTIgQEAKICAgICB9CiAgIH0KIAorICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlczsKICAgYm9vbCBjb25maWd1cmVEZXBlbmRzID0gZmFsc2U7CiAgIGJvb2wgd2FybkNvbmZpZ3VyZUxhdGUgPSBmYWxzZTsKICAgYm9vbCB3YXJuRm9sbG93ZWRTeW1saW5rcyA9IGZhbHNlOwotICBjb25zdCBjbWFrZTo6V29ya2luZ01vZGUgd29ya2luZ01vZGUgPQotICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0V29ya2luZ01vZGUoKTsKKyAgY29uc3QgY21ha2U6OldvcmtpbmdNb2RlIHdvcmtpbmdNb2RlID0gY20tPkdldFdvcmtpbmdNb2RlKCk7CiAgIHdoaWxlIChpICE9IGFyZ3MuZW5kKCkpIHsKICAgICBpZiAoKmkgPT0gIkxJU1RfRElSRUNUT1JJRVMiKSB7CiAgICAgICArK2k7IC8vIHNraXAgTElTVF9ESVJFQ1RPUklFUwpAQCAtNzY1LDEyICs3NjksMTcgQEAKICAgICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLAogICAgICAgICAgICAgICAiQ3ljbGljIHJlY3Vyc2lvbiBkZXRlY3RlZCB3aGlsZSBnbG9iYmluZyBmb3IgJyIgKyAqaSArICInOlxuIiArCiAgICAgICAgICAgICAgICAgZ2xvYk1lc3NhZ2UuY29udGVudCk7Ci0gICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGdsb2JNZXNzYWdlLnR5cGUgPT0gY21zeXM6Okdsb2I6OmVycm9yKSB7CiAgICAgICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc3N1ZU1lc3NhZ2UoCiAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICAgICAgICAgIkVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBnbG9iYmluZyBmb3IgJyIgKyAqaSArICInIC0gIiArCiAgICAgICAgICAgICAgICAgZ2xvYk1lc3NhZ2UuY29udGVudCk7CiAgICAgICAgICAgICBzaG91bGRFeGl0ID0gdHJ1ZTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNtLT5HZXREZWJ1Z091dHB1dCgpIHx8IGNtLT5HZXRUcmFjZSgpKSB7CisgICAgICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlOjpMT0csCisgICAgICAgICAgICAgIGNtU3RyQ2F0KCJHbG9iYmluZyBmb3JcbiAgIiwgKmksICJcbkVuY291bnRlcmVkIGFuIGVycm9yOlxuICIsCisgICAgICAgICAgICAgICAgICAgICAgIGdsb2JNZXNzYWdlLmNvbnRlbnQpKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNob3VsZEV4aXQpIHsKQEAgLTc5MCw3ICs3OTksNyBAQAogICAgICAgICBzdGQ6OnNvcnQoZm91bmRGaWxlcy5iZWdpbigpLCBmb3VuZEZpbGVzLmVuZCgpKTsKICAgICAgICAgZm91bmRGaWxlcy5lcmFzZShzdGQ6OnVuaXF1ZShmb3VuZEZpbGVzLmJlZ2luKCksIGZvdW5kRmlsZXMuZW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kRmlsZXMuZW5kKCkpOwotICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCktPkFkZEdsb2JDYWNoZUVudHJ5KAorICAgICAgICBjbS0+QWRkR2xvYkNhY2hlRW50cnkoCiAgICAgICAgICAgcmVjdXJzZSwgKHJlY3Vyc2UgPyBnLkdldFJlY3Vyc2VMaXN0RGlycygpIDogZy5HZXRMaXN0RGlycygpKSwKICAgICAgICAgICAocmVjdXJzZSA/IGcuR2V0UmVjdXJzZVRocm91Z2hTeW1saW5rcygpIDogZmFsc2UpLAogICAgICAgICAgIChnLkdldFJlbGF0aXZlKCkgPyBnLkdldFJlbGF0aXZlKCkgOiAiIiksIGV4cHIsIGZvdW5kRmlsZXMsIHZhcmlhYmxlLApAQCAtMTYwNiw3ICsxNjE1LDcgQEAKICAgICAgIGlmIChpICE9IGFyZ3MuZW5kKCkpIHsKICAgICAgICAgdGxzX3ZlcmlmeSA9IGNtSXNPbigqaSk7CiAgICAgICB9IGVsc2UgewotICAgICAgICBzdGF0dXMuU2V0RXJyb3IoIlRMU19WRVJJRlkgbWlzc2luZyBib29sIHZhbHVlLiIpOworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoIkRPV05MT0FEIG1pc3NpbmcgYm9vbCB2YWx1ZSBmb3IgVExTX1ZFUklGWS4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoKmkgPT0gIlRMU19DQUlORk8iKSB7CkBAIC0xNjE0LDcgKzE2MjMsNyBAQAogICAgICAgaWYgKGkgIT0gYXJncy5lbmQoKSkgewogICAgICAgICBjYWluZm8gPSBpLT5jX3N0cigpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzLlNldEVycm9yKCJUTFNfQ0FGSUxFIG1pc3NpbmcgZmlsZSB2YWx1ZS4iKTsKKyAgICAgICAgc3RhdHVzLlNldEVycm9yKCJET1dOTE9BRCBtaXNzaW5nIGZpbGUgdmFsdWUgZm9yIFRMU19DQUlORk8uIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCppID09ICJORVRSQ19GSUxFIikgewpAQCAtMTc1NiwxMSArMTc2NSwxMiBAQAogICAvLyBjaGVjayB0byBzZWUgaWYgVExTIHZlcmlmaWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgaWYgKHRsc192ZXJpZnkpIHsKICAgICByZXMgPSA6OmN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMSk7Ci0gICAgY2hlY2tfY3VybF9yZXN1bHQocmVzLCAiVW5hYmxlIHRvIHNldCBUTFMvU1NMIFZlcmlmeSBvbjogIik7CisgICAgY2hlY2tfY3VybF9yZXN1bHQocmVzLCAiRE9XTkxPQUQgY2Fubm90IHNldCBUTFMvU1NMIFZlcmlmeSBvbjogIik7CiAgIH0gZWxzZSB7CiAgICAgcmVzID0gOjpjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDApOwotICAgIGNoZWNrX2N1cmxfcmVzdWx0KHJlcywgIlVuYWJsZSB0byBzZXQgVExTL1NTTCBWZXJpZnkgb2ZmOiAiKTsKKyAgICBjaGVja19jdXJsX3Jlc3VsdChyZXMsICJET1dOTE9BRCBjYW5ub3Qgc2V0IFRMUy9TU0wgVmVyaWZ5IG9mZjogIik7CiAgIH0KKwogICAvLyBjaGVjayB0byBzZWUgaWYgYSBDQUlORk8gZmlsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgLy8gY29tbWFuZCBhcmcgY29tZXMgZmlyc3QKICAgc3RkOjpzdHJpbmcgY29uc3QmIGNhaW5mb19lcnIgPSBjbUN1cmxTZXRDQUluZm8oY3VybCwgY2FpbmZvKTsKQEAgLTE5MjUsNiArMTkzNSw4IEBACiAgIHN0ZDo6c3RyaW5nIGxvZ1ZhcjsKICAgc3RkOjpzdHJpbmcgc3RhdHVzVmFyOwogICBib29sIHNob3dQcm9ncmVzcyA9IGZhbHNlOworICBib29sIHRsc192ZXJpZnkgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc09uKCJDTUFLRV9UTFNfVkVSSUZZIik7CisgIGNvbnN0IGNoYXIqIGNhaW5mbyA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldERlZmluaXRpb24oIkNNQUtFX1RMU19DQUlORk8iKTsKICAgc3RkOjpzdHJpbmcgdXNlcnB3ZDsKICAgc3RkOjpzdHJpbmcgbmV0cmNfbGV2ZWwgPQogICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9ORVRSQyIpOwpAQCAtMTk2Niw2ICsxOTc4LDIyIEBACiAgICAgICBzdGF0dXNWYXIgPSAqaTsKICAgICB9IGVsc2UgaWYgKCppID09ICJTSE9XX1BST0dSRVNTIikgewogICAgICAgc2hvd1Byb2dyZXNzID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKCppID09ICJUTFNfVkVSSUZZIikgeworICAgICAgKytpOworICAgICAgaWYgKGkgIT0gYXJncy5lbmQoKSkgeworICAgICAgICB0bHNfdmVyaWZ5ID0gY21Jc09uKCppKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcigiVVBMT0FEIG1pc3NpbmcgYm9vbCB2YWx1ZSBmb3IgVExTX1ZFUklGWS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoKmkgPT0gIlRMU19DQUlORk8iKSB7CisgICAgICArK2k7CisgICAgICBpZiAoaSAhPSBhcmdzLmVuZCgpKSB7CisgICAgICAgIGNhaW5mbyA9IGktPmNfc3RyKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoIlVQTE9BRCBtaXNzaW5nIGZpbGUgdmFsdWUgZm9yIFRMU19DQUlORk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KICAgICB9IGVsc2UgaWYgKCppID09ICJORVRSQ19GSUxFIikgewogICAgICAgKytpOwogICAgICAgaWYgKGkgIT0gYXJncy5lbmQoKSkgewpAQCAtMjA1MSw4ICsyMDc5LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUZpbGVDb21tYW5kQ3VybERlYnVnQ2FsbGJhY2spOwogICBjaGVja19jdXJsX3Jlc3VsdChyZXMsICJVUExPQUQgY2Fubm90IHNldCBkZWJ1ZyBmdW5jdGlvbjogIik7CiAKLSAgLy8gbWFrZSBzdXJlIGRlZmF1bHQgQ0FJbmZvIGlzIHNldAotICBzdGQ6OnN0cmluZyBjb25zdCYgY2FpbmZvX2VyciA9IGNtQ3VybFNldENBSW5mbyhjdXJsLCBudWxscHRyKTsKKyAgLy8gY2hlY2sgdG8gc2VlIGlmIFRMUyB2ZXJpZmljYXRpb24gaXMgcmVxdWVzdGVkCisgIGlmICh0bHNfdmVyaWZ5KSB7CisgICAgcmVzID0gOjpjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDEpOworICAgIGNoZWNrX2N1cmxfcmVzdWx0KHJlcywgIlVQTE9BRCBjYW5ub3Qgc2V0IFRMUy9TU0wgVmVyaWZ5IG9uOiAiKTsKKyAgfSBlbHNlIHsKKyAgICByZXMgPSA6OmN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7CisgICAgY2hlY2tfY3VybF9yZXN1bHQocmVzLCAiVVBMT0FEIGNhbm5vdCBzZXQgVExTL1NTTCBWZXJpZnkgb2ZmOiAiKTsKKyAgfQorCisgIC8vIGNoZWNrIHRvIHNlZSBpZiBhIENBSU5GTyBmaWxlIGhhcyBiZWVuIHNwZWNpZmllZAorICAvLyBjb21tYW5kIGFyZyBjb21lcyBmaXJzdAorICBzdGQ6OnN0cmluZyBjb25zdCYgY2FpbmZvX2VyciA9IGNtQ3VybFNldENBSW5mbyhjdXJsLCBjYWluZm8pOwogICBpZiAoIWNhaW5mb19lcnIuZW1wdHkoKSkgewogICAgIHN0YXR1cy5TZXRFcnJvcihjYWluZm9fZXJyKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzMwLDEyICsyMzY4LDkgQEAKICAgICBwYXRoICs9ICIvY21ha2UubG9jayI7CiAgIH0KIAotICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkpIHsKLSAgICBwYXRoID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpICsgIi8iICsgcGF0aDsKLSAgfQotCiAgIC8vIFVuaWZ5IHBhdGggKHJlbW92ZSAnLy8nLCAnLy4uLycsIC4uLikKLSAgcGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCk7CisgIHBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgIHBhdGgsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CiAKICAgLy8gQ3JlYXRlIGZpbGUgYW5kIGRpcmVjdG9yaWVzIGlmIG5lZWRlZAogICBzdGQ6OnN0cmluZyBwYXJlbnREaXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRQYXJlbnREaXJlY3RvcnkocGF0aCk7CkBAIC0yNzgzLDYgKzI4MTgsMzE0IEBACiAgIHJldHVybiB0cnVlOwogfQogCitib29sIEhhbmRsZUNvbmZpZ3VyZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCit7CisgIGlmIChhcmdzLnNpemUoKSA8IDUpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoIkluY29ycmVjdCBhcmd1bWVudHMgdG8gQ09ORklHVVJFIHN1YmNvbW1hbmQuIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmIChhcmdzWzFdICE9ICJPVVRQVVQiKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJJbmNvcnJlY3QgYXJndW1lbnRzIHRvIENPTkZJR1VSRSBzdWJjb21tYW5kLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAoYXJnc1szXSAhPSAiQ09OVEVOVCIpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoIkluY29ycmVjdCBhcmd1bWVudHMgdG8gQ09ORklHVVJFIHN1YmNvbW1hbmQuIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjpzdHJpbmcgZXJyb3JNZXNzYWdlOworICBjbU5ld0xpbmVTdHlsZSBuZXdMaW5lU3R5bGU7CisgIGlmICghbmV3TGluZVN0eWxlLlJlYWRGcm9tQXJndW1lbnRzKGFyZ3MsIGVycm9yTWVzc2FnZSkpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoIkNPTkZJR1VSRSAiLCBlcnJvck1lc3NhZ2UpKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBib29sIGVzY2FwZVF1b3RlcyA9IGZhbHNlOworICBib29sIGF0T25seSA9IGZhbHNlOworICBmb3IgKHVuc2lnbmVkIGludCBpID0gNTsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICBpZiAoYXJnc1tpXSA9PSAiQE9OTFkiKSB7CisgICAgICBhdE9ubHkgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiRVNDQVBFX1FVT1RFUyIpIHsKKyAgICAgIGVzY2FwZVF1b3RlcyA9IHRydWU7CisgICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJORVdMSU5FX1NUWUxFIiB8fCBhcmdzW2ldID09ICJMRiIgfHwKKyAgICAgICAgICAgICAgIGFyZ3NbaV0gPT0gIlVOSVgiIHx8IGFyZ3NbaV0gPT0gIkNSTEYiIHx8IGFyZ3NbaV0gPT0gIldJTjMyIiB8fAorICAgICAgICAgICAgICAgYXJnc1tpXSA9PSAiRE9TIikgeworICAgICAgLyogT3B0aW9ucyBoYW5kbGVkIGJ5IE5ld0xpbmVTdHlsZSBtZW1iZXIgYWJvdmUuICAqLworICAgIH0gZWxzZSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCJDT05GSUdVUkUgVW5yZWNvZ25pemVkIGFyZ3VtZW50IFwiIiwgYXJnc1tpXSwgIlwiIikpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIC8vIENoZWNrIGZvciBnZW5lcmF0b3IgZXhwcmVzc2lvbnMKKyAgY29uc3Qgc3RkOjpzdHJpbmcgaW5wdXQgPSBhcmdzWzRdOworICBzdGQ6OnN0cmluZyBvdXRwdXRGaWxlID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICBhcmdzWzJdLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOworCisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gaW5wdXQuZmluZF9maXJzdF9vZigiPD4iKTsKKyAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiQ09ORklHVVJFIGNhbGxlZCB3aXRoIENPTlRFTlQgY29udGFpbmluZyBhIFwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbcG9zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiLiAgVGhpcyBjaGFyYWN0ZXIgaXMgbm90IGFsbG93ZWQuIikpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHBvcyA9IG91dHB1dEZpbGUuZmluZF9maXJzdF9vZigiPD4iKTsKKyAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiQ09ORklHVVJFIGNhbGxlZCB3aXRoIE9VVFBVVCBjb250YWluaW5nIGEgXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRGaWxlW3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIi4gIFRoaXMgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkLiIpKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjbU1ha2VmaWxlJiBtYWtlRmlsZSA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpOworICBpZiAoIW1ha2VGaWxlLkNhbklXcml0ZVRoaXNGaWxlKG91dHB1dEZpbGUpKSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgZmlsZTogIiArIG91dHB1dEZpbGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgaW50byBhIHNvdXJjZSBkaXJlY3RvcnkuIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMob3V0cHV0RmlsZSk7CisKKyAgLy8gUmUtZ2VuZXJhdGUgaWYgbm9uLXRlbXBvcmFyeSBvdXRwdXRzIGFyZSBtaXNzaW5nLgorICAvLyB3aGVuIHdlIGZpbmFsaXplIHRoZSBjb25maWd1cmF0aW9uIHdlIHdpbGwgcmVtb3ZlIGFsbAorICAvLyBvdXRwdXQgZmlsZXMgdGhhdCBub3cgZG9uJ3QgZXhpc3QuCisgIG1ha2VGaWxlLkFkZENNYWtlT3V0cHV0RmlsZShvdXRwdXRGaWxlKTsKKworICAvLyBDcmVhdGUgb3V0cHV0IGRpcmVjdG9yeQorICBjb25zdCBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNsYXNoUG9zID0gb3V0cHV0RmlsZS5yZmluZCgnLycpOworICBpZiAoc2xhc2hQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwYXRoID0gb3V0cHV0RmlsZS5zdWJzdHIoMCwgc2xhc2hQb3MpOworICAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkocGF0aCk7CisgIH0KKworICBzdGQ6OnN0cmluZyBuZXdMaW5lQ2hhcmFjdGVyczsKKyAgYm9vbCBvcGVuX3dpdGhfYmluYXJ5X2ZsYWcgPSBmYWxzZTsKKyAgaWYgKG5ld0xpbmVTdHlsZS5Jc1ZhbGlkKCkpIHsKKyAgICBvcGVuX3dpdGhfYmluYXJ5X2ZsYWcgPSB0cnVlOworICAgIG5ld0xpbmVDaGFyYWN0ZXJzID0gbmV3TGluZVN0eWxlLkdldENoYXJhY3RlcnMoKTsKKyAgfQorCisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmb3V0OworICBmb3V0Lk9wZW4ob3V0cHV0RmlsZSwgZmFsc2UsIG9wZW5fd2l0aF9iaW5hcnlfZmxhZyk7CisgIGlmICghZm91dCkgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb3VsZCBub3Qgb3BlbiBmaWxlIGZvciB3cml0ZSBpbiBjb3B5IG9wZXJhdGlvbiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRGaWxlKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpSZXBvcnRMYXN0U3lzdGVtRXJyb3IoIiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBmb3V0LlNldENvcHlJZkRpZmZlcmVudCh0cnVlKTsKKworICAvLyBjb3B5IGludHB1dCB0byBvdXRwdXQgYW5kIGV4cGFuZCB2YXJpYWJsZXMgZnJvbSBpbnB1dCBhdCB0aGUgc2FtZSB0aW1lCisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNpbihpbnB1dCwgc3RkOjppb3M6OmluKTsKKyAgc3RkOjpzdHJpbmcgaW5MaW5lOworICBzdGQ6OnN0cmluZyBvdXRMaW5lOworICB3aGlsZSAoY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0oc2luLCBpbkxpbmUpKSB7CisgICAgb3V0TGluZS5jbGVhcigpOworICAgIG1ha2VGaWxlLkNvbmZpZ3VyZVN0cmluZyhpbkxpbmUsIG91dExpbmUsIGF0T25seSwgZXNjYXBlUXVvdGVzKTsKKyAgICBmb3V0IDw8IG91dExpbmUgPDwgbmV3TGluZUNoYXJhY3RlcnM7CisgIH0KKworICAvLyBjbG9zZSBmaWxlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNvcHkKKyAgZm91dC5jbG9zZSgpOworCisgIHJldHVybiB0cnVlOworfQorCitib29sIEhhbmRsZUFyY2hpdmVDcmVhdGVDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKK3sKKyAgc3RydWN0IEFyZ3VtZW50cworICB7CisgICAgc3RkOjpzdHJpbmcgT3V0cHV0OworICAgIHN0ZDo6c3RyaW5nIEZvcm1hdDsKKyAgICBzdGQ6OnN0cmluZyBDb21wcmVzc2lvbjsKKyAgICBzdGQ6OnN0cmluZyBNVGltZTsKKyAgICBib29sIFZlcmJvc2UgPSBmYWxzZTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gUGF0aHM7CisgIH07CisKKyAgc3RhdGljIGF1dG8gY29uc3QgcGFyc2VyID0gY21Bcmd1bWVudFBhcnNlcjxBcmd1bWVudHM+e30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiT1VUUFVUIl9zLCAmQXJndW1lbnRzOjpPdXRwdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIkZPUk1BVCJfcywgJkFyZ3VtZW50czo6Rm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJDT01QUkVTU0lPTiJfcywgJkFyZ3VtZW50czo6Q29tcHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIk1USU1FIl9zLCAmQXJndW1lbnRzOjpNVGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiVkVSQk9TRSJfcywgJkFyZ3VtZW50czo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiUEFUSFMiX3MsICZBcmd1bWVudHM6OlBhdGhzKTsKKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5yZWNvZ25pemVkQXJndW1lbnRzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5d29yZHNNaXNzaW5nVmFsdWVzOworICBhdXRvIHBhcnNlZEFyZ3MgPQorICAgIHBhcnNlci5QYXJzZShjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDEpLCAmdW5yZWNvZ25pemVkQXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAma2V5d29yZHNNaXNzaW5nVmFsdWVzKTsKKyAgYXV0byBhcmdJdCA9IHVucmVjb2duaXplZEFyZ3VtZW50cy5iZWdpbigpOworICBpZiAoYXJnSXQgIT0gdW5yZWNvZ25pemVkQXJndW1lbnRzLmVuZCgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJVbnJlY29nbml6ZWQgYXJndW1lbnQ6IFwiIiwgKmFyZ0l0LCAiXCIiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTElTVF9BUkdTID0geyAiT1VUUFVUIiwgIkZPUk1BVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT01QUkVTU0lPTiIsICJNVElNRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVRIUyIgfTsKKyAgYXV0byBrd2JlZ2luID0ga2V5d29yZHNNaXNzaW5nVmFsdWVzLmNiZWdpbigpOworICBhdXRvIGt3ZW5kID0gY21SZW1vdmVNYXRjaGluZyhrZXl3b3Jkc01pc3NpbmdWYWx1ZXMsIExJU1RfQVJHUyk7CisgIGlmIChrd2VuZCAhPSBrd2JlZ2luKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJLZXl3b3JkcyBtaXNzaW5nIHZhbHVlczpcbiAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Kb2luKGNtTWFrZVJhbmdlKGt3YmVnaW4sIGt3ZW5kKSwgIlxuICAiKSkpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29uc3QgY2hhcioga25vd25Gb3JtYXRzW10gPSB7CisgICAgIjd6aXAiLCAiZ251dGFyIiwgInBheCIsICJwYXhyIiwgInJhdyIsICJ6aXAiCisgIH07CisKKyAgaWYgKCFwYXJzZWRBcmdzLkZvcm1hdC5lbXB0eSgpICYmCisgICAgICAhY206OmNvbnRhaW5zKGtub3duRm9ybWF0cywgcGFyc2VkQXJncy5Gb3JtYXQpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKAorICAgICAgY21TdHJDYXQoImFyY2hpdmUgZm9ybWF0ICIsIHBhcnNlZEFyZ3MuRm9ybWF0LCAiIG5vdCBzdXBwb3J0ZWQiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBjaGFyKiB6aXBGaWxlRm9ybWF0c1tdID0geyAiN3ppcCIsICJ6aXAiIH07CisgIGlmICghcGFyc2VkQXJncy5Db21wcmVzc2lvbi5lbXB0eSgpICYmCisgICAgICBjbTo6Y29udGFpbnMoemlwRmlsZUZvcm1hdHMsIHBhcnNlZEFyZ3MuRm9ybWF0KSkgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiYXJjaGl2ZSBmb3JtYXQgIiwgcGFyc2VkQXJncy5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZG9lcyBub3Qgc3VwcG9ydCBDT01QUkVTU0lPTiBhcmd1bWVudHMiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGF0aWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtU3lzdGVtVG9vbHM6OmNtVGFyQ29tcHJlc3Npb24+CisgICAgY29tcHJlc3Npb25UeXBlTWFwID0geyB7ICJOb25lIiwgY21TeXN0ZW1Ub29sczo6VGFyQ29tcHJlc3NOb25lIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJCWmlwMiIsIGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzQlppcDIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkdaaXAiLCBjbVN5c3RlbVRvb2xzOjpUYXJDb21wcmVzc0daaXAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIlhaIiwgY21TeXN0ZW1Ub29sczo6VGFyQ29tcHJlc3NYWiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiWnN0ZCIsIGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzWnN0ZCB9IH07CisKKyAgY21TeXN0ZW1Ub29sczo6Y21UYXJDb21wcmVzc2lvbiBjb21wcmVzcyA9IGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzTm9uZTsKKyAgYXV0byB0eXBlSXQgPSBjb21wcmVzc2lvblR5cGVNYXAuZmluZChwYXJzZWRBcmdzLkNvbXByZXNzaW9uKTsKKyAgaWYgKHR5cGVJdCAhPSBjb21wcmVzc2lvblR5cGVNYXAuZW5kKCkpIHsKKyAgICBjb21wcmVzcyA9IHR5cGVJdC0+c2Vjb25kOworICB9IGVsc2UgaWYgKCFwYXJzZWRBcmdzLkNvbXByZXNzaW9uLmVtcHR5KCkpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImNvbXByZXNzaW9uIHR5cGUgIiwgcGFyc2VkQXJncy5Db21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBub3Qgc3VwcG9ydGVkIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKHBhcnNlZEFyZ3MuUGF0aHMuZW1wdHkoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigiQVJDSElWRV9DUkVBVEUgcmVxdWlyZXMgYSBub24tZW1wdHkgbGlzdCBvZiBQQVRIUyIpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKCFjbVN5c3RlbVRvb2xzOjpDcmVhdGVUYXIocGFyc2VkQXJncy5PdXRwdXQsIHBhcnNlZEFyZ3MuUGF0aHMsIGNvbXByZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRBcmdzLlZlcmJvc2UsIHBhcnNlZEFyZ3MuTVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEFyZ3MuRm9ybWF0KSkgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiZmFpbGVkIHRvIGNvbXByZXNzOiAiLCBwYXJzZWRBcmdzLk91dHB1dCkpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGFuZGxlQXJjaGl2ZUV4dHJhY3RDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCit7CisgIHN0cnVjdCBBcmd1bWVudHMKKyAgeworICAgIHN0ZDo6c3RyaW5nIElucHV0OworICAgIGJvb2wgVmVyYm9zZSA9IGZhbHNlOworICAgIGJvb2wgTGlzdE9ubHkgPSBmYWxzZTsKKyAgICBzdGQ6OnN0cmluZyBEZXN0aW5hdGlvbjsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gUGF0dGVybnM7CisgIH07CisKKyAgc3RhdGljIGF1dG8gY29uc3QgcGFyc2VyID0gY21Bcmd1bWVudFBhcnNlcjxBcmd1bWVudHM+e30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiSU5QVVQiX3MsICZBcmd1bWVudHM6OklucHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJWRVJCT1NFIl9zLCAmQXJndW1lbnRzOjpWZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJMSVNUX09OTFkiX3MsICZBcmd1bWVudHM6Okxpc3RPbmx5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJERVNUSU5BVElPTiJfcywgJkFyZ3VtZW50czo6RGVzdGluYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIlBBVFRFUk5TIl9zLCAmQXJndW1lbnRzOjpQYXR0ZXJucyk7CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHVucmVjb2duaXplZEFyZ3VtZW50czsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtleXdvcmRzTWlzc2luZ1ZhbHVlczsKKyAgYXV0byBwYXJzZWRBcmdzID0KKyAgICBwYXJzZXIuUGFyc2UoY21NYWtlUmFuZ2UoYXJncykuYWR2YW5jZSgxKSwgJnVucmVjb2duaXplZEFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAgJmtleXdvcmRzTWlzc2luZ1ZhbHVlcyk7CisgIGF1dG8gYXJnSXQgPSB1bnJlY29nbml6ZWRBcmd1bWVudHMuYmVnaW4oKTsKKyAgaWYgKGFyZ0l0ICE9IHVucmVjb2duaXplZEFyZ3VtZW50cy5lbmQoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiVW5yZWNvZ25pemVkIGFyZ3VtZW50OiBcIiIsICphcmdJdCwgIlwiIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IExJU1RfQVJHUyA9IHsgIklOUFVUIiwgIkRFU1RJTkFUSU9OIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBVFRFUk5TIiB9OworICBhdXRvIGt3YmVnaW4gPSBrZXl3b3Jkc01pc3NpbmdWYWx1ZXMuY2JlZ2luKCk7CisgIGF1dG8ga3dlbmQgPSBjbVJlbW92ZU1hdGNoaW5nKGtleXdvcmRzTWlzc2luZ1ZhbHVlcywgTElTVF9BUkdTKTsKKyAgaWYgKGt3ZW5kICE9IGt3YmVnaW4pIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoIktleXdvcmRzIG1pc3NpbmcgdmFsdWVzOlxuICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUpvaW4oY21NYWtlUmFuZ2Uoa3diZWdpbiwga3dlbmQpLCAiXG4gICIpKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OnN0cmluZyBpbkZpbGUgPSBwYXJzZWRBcmdzLklucHV0OworCisgIGlmIChwYXJzZWRBcmdzLkxpc3RPbmx5KSB7CisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpMaXN0VGFyKGluRmlsZSwgcGFyc2VkQXJncy5QYXR0ZXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXJncy5WZXJib3NlKSkgeworICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJmYWlsZWQgdG8gbGlzdDogIiwgaW5GaWxlKSk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdGQ6OnN0cmluZyBkZXN0RGlyID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOworICAgIGlmICghcGFyc2VkQXJncy5EZXN0aW5hdGlvbi5lbXB0eSgpKSB7CisgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGFyc2VkQXJncy5EZXN0aW5hdGlvbikpIHsKKyAgICAgICAgZGVzdERpciA9IHBhcnNlZEFyZ3MuRGVzdGluYXRpb247CisgICAgICB9IGVsc2UgeworICAgICAgICBkZXN0RGlyID0gY21TdHJDYXQoZGVzdERpciwgIi8iLCBwYXJzZWRBcmdzLkRlc3RpbmF0aW9uKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KGRlc3REaXIpKSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3Rvcnk6ICIsIGRlc3REaXIpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGluRmlsZSkpIHsKKyAgICAgICAgaW5GaWxlID0KKyAgICAgICAgICBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpLCAiLyIsIGluRmlsZSk7CisgICAgICB9CisgICAgfQorCisgICAgY21Xb3JraW5nRGlyZWN0b3J5IHdvcmtkaXIoZGVzdERpcik7CisgICAgaWYgKHdvcmtkaXIuRmFpbGVkKCkpIHsKKyAgICAgIHN0YXR1cy5TZXRFcnJvcigKKyAgICAgICAgY21TdHJDYXQoImZhaWxlZCB0byBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkgdG86ICIsIGRlc3REaXIpKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpFeHRyYWN0VGFyKGluRmlsZSwgcGFyc2VkQXJncy5QYXR0ZXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXJncy5WZXJib3NlKSkgeworICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJmYWlsZWQgdG8gZXh0cmFjdDogIiwgaW5GaWxlKSk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZQogCiBib29sIGNtRmlsZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLApAQCAtMjgzNiw2ICszMTc5LDkgQEAKICAgICB7ICJSRUFEX1NZTUxJTksiX3MsIEhhbmRsZVJlYWRTeW1saW5rQ29tbWFuZCB9LAogICAgIHsgIkNSRUFURV9MSU5LIl9zLCBIYW5kbGVDcmVhdGVMaW5rQ29tbWFuZCB9LAogICAgIHsgIkdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUyJfcywgSGFuZGxlR2V0UnVudGltZURlcGVuZGVuY2llc0NvbW1hbmQgfSwKKyAgICB7ICJDT05GSUdVUkUiX3MsIEhhbmRsZUNvbmZpZ3VyZUNvbW1hbmQgfSwKKyAgICB7ICJBUkNISVZFX0NSRUFURSJfcywgSGFuZGxlQXJjaGl2ZUNyZWF0ZUNvbW1hbmQgfSwKKyAgICB7ICJBUkNISVZFX0VYVFJBQ1QiX3MsIEhhbmRsZUFyY2hpdmVFeHRyYWN0Q29tbWFuZCB9LAogICB9OwogCiAgIHJldHVybiBzdWJjb21tYW5kKGFyZ3NbMF0sIGFyZ3MsIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlTW9uaXRvci5oIGIvU291cmNlL2NtRmlsZU1vbml0b3IuaAppbmRleCBiNTEwYTJjLi5mYzc1YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlTW9uaXRvci5oCisrKyBiL1NvdXJjZS9jbUZpbGVNb25pdG9yLmgKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiBjbGFzcyBjbVJvb3RXYXRjaGVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kQmFzZS5jeHggYi9Tb3VyY2UvY21GaW5kQmFzZS5jeHgKaW5kZXggYmVjOTliYi4uNzQzYWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZEJhc2UuY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRCYXNlLmN4eApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU2VhcmNoUGF0aC5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKQEAgLTIyLDEwICsyMyw2IEBACiBjbUZpbmRCYXNlOjpjbUZpbmRCYXNlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiAgIDogY21GaW5kQ29tbW9uKHN0YXR1cykKIHsKLSAgdGhpcy0+QWxyZWFkeUluQ2FjaGUgPSBmYWxzZTsKLSAgdGhpcy0+QWxyZWFkeUluQ2FjaGVXaXRob3V0TWV0YUluZm8gPSBmYWxzZTsKLSAgdGhpcy0+TmFtZXNQZXJEaXIgPSBmYWxzZTsKLSAgdGhpcy0+TmFtZXNQZXJEaXJBbGxvd2VkID0gZmFsc2U7CiB9CiAKIGJvb2wgY21GaW5kQmFzZTo6UGFyc2VBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzSW4pCkBAIC0xMTUsNiArMTEyLDEwIEBACiAgICAgfSBlbHNlIGlmIChhcmdzW2pdID09ICJOT19TWVNURU1fUEFUSCIpIHsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOwogICAgICAgdGhpcy0+Tm9EZWZhdWx0UGF0aCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChhcmdzW2pdID09ICJSRVFVSVJFRCIpIHsKKyAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgICAgdGhpcy0+UmVxdWlyZWQgPSB0cnVlOworICAgICAgbmV3U3R5bGUgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tDb21tb25Bcmd1bWVudChhcmdzW2pdKSkgewogICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CiAgICAgfSBlbHNlIHsKQEAgLTI5Niw3ICsyOTcsNyBAQAogICBpZiAoY29uc3QgY2hhciogY2FjaGVWYWx1ZSA9CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSkpIHsKICAgICBjbVN0YXRlKiBzdGF0ZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpOwotICAgIGNvbnN0IGNoYXIqIGNhY2hlRW50cnkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlZhcmlhYmxlTmFtZSk7CisgICAgY21Qcm9wIGNhY2hlRW50cnkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlZhcmlhYmxlTmFtZSk7CiAgICAgYm9vbCBmb3VuZCA9ICFjbUlzTk9URk9VTkQoY2FjaGVWYWx1ZSk7CiAgICAgYm9vbCBjYWNoZWQgPSBjYWNoZUVudHJ5ICE9IG51bGxwdHI7CiAgICAgaWYgKGZvdW5kKSB7CkBAIC0zMTIsOSArMzEzLDkgQEAKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoY2FjaGVkKSB7Ci0gICAgICBjb25zdCBjaGFyKiBocyA9CisgICAgICBjbVByb3AgaHMgPQogICAgICAgICBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KHRoaXMtPlZhcmlhYmxlTmFtZSwgIkhFTFBTVFJJTkciKTsKLSAgICAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbiA9IGhzID8gaHMgOiAiKG5vbmUpIjsKKyAgICAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbiA9IGhzID8gKmhzIDogIihub25lKSI7CiAgICAgfQogICB9CiAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRCYXNlLmggYi9Tb3VyY2UvY21GaW5kQmFzZS5oCmluZGV4IGZjZTBiMTEuLjRjYmYwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRCYXNlLmgKKysrIGIvU291cmNlL2NtRmluZEJhc2UuaApAQCAtNDQsMTQgKzQ0LDE2IEBACiAgIHN0ZDo6c3RyaW5nIFZhcmlhYmxlRG9jdW1lbnRhdGlvbjsKICAgc3RkOjpzdHJpbmcgVmFyaWFibGVOYW1lOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTmFtZXM7Ci0gIGJvb2wgTmFtZXNQZXJEaXI7Ci0gIGJvb2wgTmFtZXNQZXJEaXJBbGxvd2VkOworICBib29sIE5hbWVzUGVyRGlyID0gZmFsc2U7CisgIGJvb2wgTmFtZXNQZXJEaXJBbGxvd2VkID0gZmFsc2U7CiAKICAgLy8gQ01BS0VfKl9QQVRIIENNQUtFX1NZU1RFTV8qX1BBVEggRlJBTUVXT1JLfExJQlJBUll8SU5DTFVERXxQUk9HUkFNCiAgIHN0ZDo6c3RyaW5nIEVudmlyb25tZW50UGF0aDsgLy8gTElCLElOQ0xVREUKIAotICBib29sIEFscmVhZHlJbkNhY2hlOwotICBib29sIEFscmVhZHlJbkNhY2hlV2l0aG91dE1ldGFJbmZvOworICBib29sIEFscmVhZHlJbkNhY2hlID0gZmFsc2U7CisgIGJvb2wgQWxyZWFkeUluQ2FjaGVXaXRob3V0TWV0YUluZm8gPSBmYWxzZTsKKworICBib29sIFJlcXVpcmVkID0gZmFsc2U7CiAKIHByaXZhdGU6CiAgIC8vIEFkZCBwaWVjZXMgb2YgdGhlIHNlYXJjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRDb21tb24uY3h4IGIvU291cmNlL2NtRmluZENvbW1vbi5jeHgKaW5kZXggODJhY2ZlZC4uM2U5NzE1MCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZENvbW1vbi5jeHgKKysrIGIvU291cmNlL2NtRmluZENvbW1vbi5jeHgKQEAgLTQsNyArNCw2IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8YXJyYXk+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgpAQCAtMjgwLDEyICsyNzksNyBAQAogICAvLyBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgcGF0aCByb290cyB3aXRoIG5vIHRyYWlsaW5nIHNsYXNoZXMuCiAgIGZvciAoY29uc3QgY2hhcioqIHBhdGhOYW1lID0gcGF0aHM7ICpwYXRoTmFtZTsgKytwYXRoTmFtZSkgewogICAgIC8vIEdldCB0aGUgbGlzdCBvZiBwYXRocyB0byBpZ25vcmUgZnJvbSB0aGUgdmFyaWFibGUuCi0gICAgY29uc3QgY2hhciogaWdub3JlUGF0aCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCpwYXRoTmFtZSk7Ci0gICAgaWYgKChpZ25vcmVQYXRoID09IG51bGxwdHIpIHx8IChzdHJsZW4oaWdub3JlUGF0aCkgPT0gMCkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNtRXhwYW5kTGlzdChpZ25vcmVQYXRoLCBpZ25vcmUpOworICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCpwYXRoTmFtZSwgaWdub3JlKTsKICAgfQogCiAgIGZvciAoc3RkOjpzdHJpbmcmIGkgOiBpZ25vcmUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRMaWJyYXJ5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21GaW5kTGlicmFyeUNvbW1hbmQuY3h4CmluZGV4IGQ1YTRiZGUuLjMyNDJiNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRMaWJyYXJ5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRmluZExpYnJhcnlDb21tYW5kLmN4eApAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTc1LDE1ICs3NiwyMiBAQAogICBzdGQ6OnN0cmluZyBjb25zdCBsaWJyYXJ5ID0gdGhpcy0+RmluZExpYnJhcnkoKTsKICAgaWYgKCFsaWJyYXJ5LmVtcHR5KCkpIHsKICAgICAvLyBTYXZlIHRoZSB2YWx1ZSBpbiB0aGUgY2FjaGUKLSAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSwgbGlicmFyeS5jX3N0cigpLAorICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24odGhpcy0+VmFyaWFibGVOYW1lLCBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogICBzdGQ6OnN0cmluZyBub3Rmb3VuZCA9IHRoaXMtPlZhcmlhYmxlTmFtZSArICItTk9URk9VTkQiOwotICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSwgbm90Zm91bmQuY19zdHIoKSwKKyAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZU5hbWUsIG5vdGZvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbi5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6RklMRVBBVEgpOworICBpZiAodGhpcy0+UmVxdWlyZWQpIHsKKyAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgIkNvdWxkIG5vdCBmaW5kICIgKyB0aGlzLT5WYXJpYWJsZU5hbWUgKworICAgICAgICAiIHVzaW5nIHRoZSBmb2xsb3dpbmcgbmFtZXM6ICIgKyBjbUpvaW4odGhpcy0+TmFtZXMsICIsICIpKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICB9CiAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MjUsNyArNDMzLDggQEAKICNlbmRpZgogICAgIGlmIChuYW1lLlJlZ2V4LmZpbmQodGVzdE5hbWUpKSB7CiAgICAgICB0aGlzLT5UZXN0UGF0aCA9IGNtU3RyQ2F0KHBhdGgsIG9yaWdOYW1lKTsKLSAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KHRoaXMtPlRlc3RQYXRoKSkgeworICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXRoIGlzIHJlYWRhYmxlIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkuCisgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0aGlzLT5UZXN0UGF0aCwgdHJ1ZSkpIHsKICAgICAgICAgdGhpcy0+RGVidWdMaWJyYXJ5Rm91bmQobmFtZS5SYXcsIGRpcik7CiAKICAgICAgICAgLy8gVGhpcyBpcyBhIG1hdGNoaW5nIGZpbGUuICBDaGVjayBpZiBpdCBpcyBiZXR0ZXIgdGhhbiB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuY3h4CmluZGV4IDI5N2M3MmIuLmFlMDYwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRmluZFBhY2thZ2VDb21tYW5kLmN4eApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21TZWFyY2hQYXRoLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgpAQCAtMjc5LDkgKzI4MCwxMyBAQAogICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiTU9EVUxFIikgewogICAgICAgbW9kdWxlQXJncy5pbnNlcnQoaSk7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKKyAgICAgIC8vIFhYWChjbGFuZy10aWR5KTogaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NQorICAgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtYnJhbmNoLWNsb25lKQogICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiQ09ORklHIikgewogICAgICAgY29uZmlnQXJncy5pbnNlcnQoaSk7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKKyAgICAgIC8vIFhYWChjbGFuZy10aWR5KTogaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NQorICAgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtYnJhbmNoLWNsb25lKQogICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiTk9fTU9EVUxFIikgewogICAgICAgY29uZmlnQXJncy5pbnNlcnQoaSk7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKQEAgLTMxOCw2ICszMjMsOCBAQAogICAgICAgdGhpcy0+Tm9TeXN0ZW1SZWdpc3RyeSA9IHRydWU7CiAgICAgICBjb25maWdBcmdzLmluc2VydChpKTsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgICAgLy8gWFhYKGNsYW5nLXRpZHkpOiBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTY1CisgICAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJOT19DTUFLRV9CVUlMRFNfUEFUSCIpIHsKICAgICAgIC8vIElnbm9yZSBsZWdhY3kgb3B0aW9uLgogICAgICAgY29uZmlnQXJncy5pbnNlcnQoaSk7CkBAIC00OTgsOSArNTA1LDcgQEAKICAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOiB7CiAgICAgICAgIC8vIE5FVyBiZWhhdmlvciBpcyB0byBob25vciB0aGUgPHBrZz5fUk9PVCB2YXJpYWJsZXMuCiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHJvb3RWYXIgPSB0aGlzLT5OYW1lICsgIl9ST09UIjsKLSAgICAgICAgaWYgKGNvbnN0IGNoYXIqIHBrZ1Jvb3QgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihyb290VmFyKSkgewotICAgICAgICAgIGNtRXhwYW5kTGlzdChwa2dSb290LCByb290UGF0aHMsIGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdChyb290VmFyLCByb290UGF0aHMsIGZhbHNlKTsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0UGF0aChyb290UGF0aHMsIHJvb3RWYXIuY19zdHIoKSk7CiAgICAgICB9IGJyZWFrOwogICAgIH0KQEAgLTEwNjAsOCArMTA2NSw4IEBACiAgICAgY21TdHJDYXQoIlRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBhIENNYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgIiwKICAgICAgICAgICAgICB0aGlzLT5OYW1lLCAnLicpOwogICAvLyBXZSBmb3JjZSB0aGUgdmFsdWUgc2luY2Ugd2UgZG8gbm90IGdldCBoZXJlIGlmIGl0IHdhcyBhbHJlYWR5IHNldC4KLSAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZSwgaW5pdC5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHAuY19zdHIoKSwgY21TdGF0ZUVudW1zOjpQQVRILCB0cnVlKTsKKyAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZSwgaW5pdCwgaGVscC5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6UEFUSCwgdHJ1ZSk7CiAKICAgcmV0dXJuIGZvdW5kOwogfQpAQCAtMTExNCwxMiArMTExOSwxMCBAQAogdm9pZCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6QXBwZW5kVG9Gb3VuZFByb3BlcnR5KGJvb2wgZm91bmQpCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmb3VuZENvbnRlbnRzOwotICBjb25zdCBjaGFyKiBmb3VuZFByb3AgPQorICBjbVByb3AgZm91bmRQcm9wID0KICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlBBQ0tBR0VTX0ZPVU5EIik7Ci0gIGlmIChmb3VuZFByb3AgJiYgKmZvdW5kUHJvcCkgewotICAgIHN0ZDo6c3RyaW5nIHRtcCA9IGZvdW5kUHJvcDsKLQotICAgIGNtRXhwYW5kTGlzdCh0bXAsIGZvdW5kQ29udGVudHMsIGZhbHNlKTsKKyAgaWYgKGNtTm9uZW1wdHkoZm91bmRQcm9wKSkgeworICAgIGNtRXhwYW5kTGlzdCgqZm91bmRQcm9wLCBmb3VuZENvbnRlbnRzLCBmYWxzZSk7CiAgICAgYXV0byBuYW1lSXQgPQogICAgICAgc3RkOjpmaW5kKGZvdW5kQ29udGVudHMuYmVnaW4oKSwgZm91bmRDb250ZW50cy5lbmQoKSwgdGhpcy0+TmFtZSk7CiAgICAgaWYgKG5hbWVJdCAhPSBmb3VuZENvbnRlbnRzLmVuZCgpKSB7CkBAIC0xMTI4LDEyICsxMTMxLDEwIEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm90Rm91bmRDb250ZW50czsKLSAgY29uc3QgY2hhciogbm90Rm91bmRQcm9wID0KKyAgY21Qcm9wIG5vdEZvdW5kUHJvcCA9CiAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJQQUNLQUdFU19OT1RfRk9VTkQiKTsKLSAgaWYgKG5vdEZvdW5kUHJvcCAmJiAqbm90Rm91bmRQcm9wKSB7Ci0gICAgc3RkOjpzdHJpbmcgdG1wID0gbm90Rm91bmRQcm9wOwotCi0gICAgY21FeHBhbmRMaXN0KHRtcCwgbm90Rm91bmRDb250ZW50cywgZmFsc2UpOworICBpZiAoY21Ob25lbXB0eShub3RGb3VuZFByb3ApKSB7CisgICAgY21FeHBhbmRMaXN0KCpub3RGb3VuZFByb3AsIG5vdEZvdW5kQ29udGVudHMsIGZhbHNlKTsKICAgICBhdXRvIG5hbWVJdCA9CiAgICAgICBzdGQ6OmZpbmQobm90Rm91bmRDb250ZW50cy5iZWdpbigpLCBub3RGb3VuZENvbnRlbnRzLmVuZCgpLCB0aGlzLT5OYW1lKTsKICAgICBpZiAobmFtZUl0ICE9IG5vdEZvdW5kQ29udGVudHMuZW5kKCkpIHsKQEAgLTExNjUsOSArMTE2Niw5IEBACiAgIHN0ZDo6c3RyaW5nIGZvdW5kID0gY21TdHJDYXQodGhpcy0+TmFtZSwgIl9GT1VORCIpOwogICBzdGQ6OnN0cmluZyB1cHBlckZvdW5kID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGZvdW5kKTsKIAotICBjb25zdCBjaGFyKiB1cHBlclJlc3VsdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHVwcGVyRm91bmQpOwotICBjb25zdCBjaGFyKiByZXN1bHQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihmb3VuZCk7Ci0gIGJvb2wgcGFja2FnZUZvdW5kID0gKChjbUlzT24ocmVzdWx0KSkgfHwgKGNtSXNPbih1cHBlclJlc3VsdCkpKTsKKyAgYm9vbCB1cHBlclJlc3VsdCA9IHRoaXMtPk1ha2VmaWxlLT5Jc09uKHVwcGVyRm91bmQpOworICBib29sIHJlc3VsdCA9IHRoaXMtPk1ha2VmaWxlLT5Jc09uKGZvdW5kKTsKKyAgYm9vbCBwYWNrYWdlRm91bmQgPSAocmVzdWx0IHx8IHVwcGVyUmVzdWx0KTsKIAogICB0aGlzLT5BcHBlbmRUb0ZvdW5kUHJvcGVydHkocGFja2FnZUZvdW5kKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmluZFBhY2thZ2VDb21tYW5kLmggYi9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuaAppbmRleCBhZTlhZGU3Li43MDU4YTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuaAorKysgYi9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuaApAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9rd2ltbC5oIgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKICNpbmNsdWRlICJjbUZpbmRDb21tb24uaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuY3h4IGIvU291cmNlL2NtRmluZFBhdGhDb21tYW5kLmN4eAppbmRleCA5MDhmMGMxLi40YmFiNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRQYXRoQ29tbWFuZC5jeHgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCiAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTQzLDE0ICs0NCwyMSBAQAogICBzdGQ6OnN0cmluZyByZXN1bHQgPSB0aGlzLT5GaW5kSGVhZGVyKCk7CiAgIGlmICghcmVzdWx0LmVtcHR5KCkpIHsKICAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKAotICAgICAgdGhpcy0+VmFyaWFibGVOYW1lLCByZXN1bHQuY19zdHIoKSwgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCisgICAgICB0aGlzLT5WYXJpYWJsZU5hbWUsIHJlc3VsdCwgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCiAgICAgICAodGhpcy0+SW5jbHVkZUZpbGVJblBhdGgpID8gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCA6IGNtU3RhdGVFbnVtczo6UEFUSCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbigKLSAgICB0aGlzLT5WYXJpYWJsZU5hbWUsICh0aGlzLT5WYXJpYWJsZU5hbWUgKyAiLU5PVEZPVU5EIikuY19zdHIoKSwKKyAgICB0aGlzLT5WYXJpYWJsZU5hbWUsIHRoaXMtPlZhcmlhYmxlTmFtZSArICItTk9URk9VTkQiLAogICAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbi5jX3N0cigpLAogICAgICh0aGlzLT5JbmNsdWRlRmlsZUluUGF0aCkgPyBjbVN0YXRlRW51bXM6OkZJTEVQQVRIIDogY21TdGF0ZUVudW1zOjpQQVRIKTsKKyAgaWYgKHRoaXMtPlJlcXVpcmVkKSB7CisgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICJDb3VsZCBub3QgZmluZCAiICsgdGhpcy0+VmFyaWFibGVOYW1lICsKKyAgICAgICAgIiB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGVzOiAiICsgY21Kb2luKHRoaXMtPk5hbWVzLCAiLCAiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgfQogICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmluZFByb2dyYW1Db21tYW5kLmN4eCBiL1NvdXJjZS9jbUZpbmRQcm9ncmFtQ29tbWFuZC5jeHgKaW5kZXggM2U0OTE3Mi4uNzc3MjhlYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZFByb2dyYW1Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21GaW5kUHJvZ3JhbUNvbW1hbmQuY3h4CkBAIC0zLDYgKzMsOCBAQAogI2luY2x1ZGUgImNtRmluZFByb2dyYW1Db21tYW5kLmgiCiAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0xOCw2ICsyMCw3IEBACiAgIGNtRmluZFByb2dyYW1IZWxwZXIoY21NYWtlZmlsZSogbWFrZWZpbGUsIGNtRmluZEJhc2UgY29uc3QqIGJhc2UpCiAgICAgOiBEZWJ1Z1NlYXJjaGVzKCJmaW5kX3Byb2dyYW0iLCBiYXNlKQogICAgICwgTWFrZWZpbGUobWFrZWZpbGUpCisgICAgLCBQb2xpY3lDTVAwMTA5KG1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwOSkpCiAgIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQogICAgIC8vIENvbnNpZGVyIHBsYXRmb3JtLXNwZWNpZmljIGV4dGVuc2lvbnMuCkBAIC00Nyw2ICs1MCw4IEBACiAgIGNtRmluZEJhc2VEZWJ1Z1N0YXRlIERlYnVnU2VhcmNoZXM7CiAgIGNtTWFrZWZpbGUqIE1ha2VmaWxlOwogCisgIGNtUG9saWNpZXM6OlBvbGljeVN0YXR1cyBQb2xpY3lDTVAwMTA5OworCiAgIHZvaWQgQWRkTmFtZShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgeyB0aGlzLT5OYW1lcy5wdXNoX2JhY2sobmFtZSk7IH0KICAgdm9pZCBTZXROYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKQogICB7CkBAIC04NCw3ICs4OSw3IEBACiAgICAgICB0aGlzLT5UZXN0TmFtZUV4dCA9IGNtU3RyQ2F0KG5hbWUsIGV4dCk7CiAgICAgICB0aGlzLT5UZXN0UGF0aCA9CiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodGhpcy0+VGVzdE5hbWVFeHQsIHBhdGgpOwotICAgICAgYm9vbCBleGlzdHMgPSBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPlRlc3RQYXRoLCB0cnVlKTsKKyAgICAgIGJvb2wgZXhpc3RzID0gdGhpcy0+RmlsZUlzRXhlY3V0YWJsZSh0aGlzLT5UZXN0UGF0aCk7CiAgICAgICBleGlzdHMgPyB0aGlzLT5EZWJ1Z1NlYXJjaGVzLkZvdW5kQXQodGhpcy0+VGVzdFBhdGgpCiAgICAgICAgICAgICAgOiB0aGlzLT5EZWJ1Z1NlYXJjaGVzLkZhaWxlZEF0KHRoaXMtPlRlc3RQYXRoKTsKICAgICAgIGlmIChleGlzdHMpIHsKQEAgLTk0LDYgKzk5LDQ4IEBACiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKICAgfQorICBib29sIEZpbGVJc0V4ZWN1dGFibGUoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUpIGNvbnN0CisgIHsKKyAgICBzd2l0Y2ggKHRoaXMtPlBvbGljeUNNUDAxMDkpIHsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmaWxlLCB0cnVlKTsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgorICAgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9BTFdBWVM6CisgICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0lGX1VTRUQ6CisgICAgICAgIHJldHVybiBjbVN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKGZpbGUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGJvb2wgY29uc3QgaXNFeGVPbGQgPSBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGZpbGUsIHRydWUpOworICAgIGJvb2wgY29uc3QgaXNFeGVOZXcgPSBjbVN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKGZpbGUpOworICAgIGlmIChpc0V4ZU5ldyA9PSBpc0V4ZU9sZCkgeworICAgICAgcmV0dXJuIGlzRXhlTmV3OworICAgIH0KKyAgICBpZiAoaXNFeGVOZXcpIHsKKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgIE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywKKyAgICAgICAgY21TdHJDYXQoY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhjbVBvbGljaWVzOjpDTVAwMTA5KSwKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiVGhlIGZpbGVcbiIKKyAgICAgICAgICAgICAgICAgIiAgIiwKKyAgICAgICAgICAgICAgICAgZmlsZSwKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiaXMgZXhlY3V0YWJsZSBidXQgbm90IHJlYWRhYmxlLiAgIgorICAgICAgICAgICAgICAgICAiQ01ha2UgaXMgaWdub3JpbmcgaXQgZm9yIGNvbXBhdGliaWxpdHkuIikpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCisgICAgICAgIGNtU3RyQ2F0KGNtUG9saWNpZXM6OkdldFBvbGljeVdhcm5pbmcoY21Qb2xpY2llczo6Q01QMDEwOSksCisgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgIlRoZSBmaWxlXG4iCisgICAgICAgICAgICAgICAgICIgICIsCisgICAgICAgICAgICAgICAgIGZpbGUsCisgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgImlzIHJlYWRhYmxlIGJ1dCBub3QgZXhlY3V0YWJsZS4gICIKKyAgICAgICAgICAgICAgICAgIkNNYWtlIGlzIHVzaW5nIGl0IGZvciBjb21wYXRpYmlsaXR5LiIpKTsKKyAgICB9CisgICAgcmV0dXJuIGlzRXhlT2xkOworICB9CiB9OwogCiBjbUZpbmRQcm9ncmFtQ29tbWFuZDo6Y21GaW5kUHJvZ3JhbUNvbW1hbmQoY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKQEAgLTEyNywxNSArMTc0LDIyIEBACiAgIHN0ZDo6c3RyaW5nIGNvbnN0IHJlc3VsdCA9IEZpbmRQcm9ncmFtKCk7CiAgIGlmICghcmVzdWx0LmVtcHR5KCkpIHsKICAgICAvLyBTYXZlIHRoZSB2YWx1ZSBpbiB0aGUgY2FjaGUKLSAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSwgcmVzdWx0LmNfc3RyKCksCisgICAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZU5hbWUsIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbi5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKAotICAgIHRoaXMtPlZhcmlhYmxlTmFtZSwgKHRoaXMtPlZhcmlhYmxlTmFtZSArICItTk9URk9VTkQiKS5jX3N0cigpLAorICAgIHRoaXMtPlZhcmlhYmxlTmFtZSwgdGhpcy0+VmFyaWFibGVOYW1lICsgIi1OT1RGT1VORCIsCiAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksIGNtU3RhdGVFbnVtczo6RklMRVBBVEgpOworICBpZiAodGhpcy0+UmVxdWlyZWQpIHsKKyAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgIkNvdWxkIG5vdCBmaW5kICIgKyB0aGlzLT5WYXJpYWJsZU5hbWUgKworICAgICAgICAiIHVzaW5nIHRoZSBmb2xsb3dpbmcgbmFtZXM6ICIgKyBjbUpvaW4odGhpcy0+TmFtZXMsICIsICIpKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICB9CiAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTgsMTQgKzMxMiwxMyBAQAogCiAgIGlmIChleGVjdXRhYmxlVVJMICE9IG51bGxwdHIpIHsKICAgICBjb25zdCBpbnQgTUFYX09TWF9QQVRIX1NJWkUgPSAxMDI0OwotICAgIGNoYXIgYnVmZmVyW01BWF9PU1hfUEFUSF9TSVpFXTsKKyAgICBVSW50OCBidWZmZXJbTUFYX09TWF9QQVRIX1NJWkVdOwogCi0gICAgLy8gQ29udmVydCB0aGUgQ0ZTdHJpbmcgdG8gYSBDIHN0cmluZwotICAgIENGU3RyaW5nR2V0Q1N0cmluZyhDRlVSTEdldFN0cmluZyhleGVjdXRhYmxlVVJMKSwgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICBNQVhfT1NYX1BBVEhfU0laRSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLQotICAgIC8vIEFuZCBmaW5hbGx5IHRvIGEgYysrIHN0cmluZwotICAgIGV4ZWN1dGFibGUgPSBidW5kbGVQYXRoICsgIi9Db250ZW50cy9NYWNPUy8iICsgc3RkOjpzdHJpbmcoYnVmZmVyKTsKKyAgICBpZiAoQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZXhlY3V0YWJsZVVSTCwgZmFsc2UsIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX09TWF9QQVRIX1NJWkUpKSB7CisgICAgICBleGVjdXRhYmxlID0gYnVuZGxlUGF0aCArICIvQ29udGVudHMvTWFjT1MvIiArCisgICAgICAgIHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikpOworICAgIH0KICAgICAvLyBPbmx5IHJlbGVhc2UgQ0ZVUkxSZWYgaWYgaXQncyBub3QgbnVsbAogICAgIENGUmVsZWFzZShleGVjdXRhYmxlVVJMKTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRm9yRWFjaENvbW1hbmQuY3h4IGIvU291cmNlL2NtRm9yRWFjaENvbW1hbmQuY3h4CmluZGV4IDA1NDYxODYuLjNiODJlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZvckVhY2hDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21Gb3JFYWNoQ29tbWFuZC5jeHgKQEAgLTQsNyArNCw3IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAvLyBOT1RFIFRoZSBkZWNsYXJhdGlvbiBvZiBgc3RkOjphYnNgIGhhcyBtb3ZlZCB0byBgY21hdGhgIHNpbmNlIEMrKzE3CiAvLyBTZWUgaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL251bWVyaWMvbWF0aC9hYnMKIC8vIEFMRVJUIEJ1dCBJV1lVIHVzZWQgdG8gbGludCBgI2luY2x1ZGVgcyBkbyBub3QgInVuZGVyc3RhbmQiCkBAIC0xOCw4ICsxOCw3IEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+Ci0KLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUZ1bmN0aW9uQmxvY2tlci5oIgpAQCAtMTE0LDggKzExMyw4IEBACiAgIC8vIEF0IGVuZCBvZiBmb3IgZWFjaCBleGVjdXRlIHJlY29yZGVkIGNvbW1hbmRzCiAgIC8vIHN0b3JlIHRoZSBvbGQgdmFsdWUKICAgc3RkOjpzdHJpbmcgb2xkRGVmOwotICBpZiAobWYuR2V0RGVmaW5pdGlvbih0aGlzLT5BcmdzLmZyb250KCkpKSB7Ci0gICAgb2xkRGVmID0gbWYuR2V0RGVmaW5pdGlvbih0aGlzLT5BcmdzLmZyb250KCkpOworICBpZiAoYXV0byBkID0gbWYuR2V0RGVmaW5pdGlvbih0aGlzLT5BcmdzLmZyb250KCkpKSB7CisgICAgb2xkRGVmID0gZDsKICAgfQogCiAgIGF1dG8gcmVzdG9yZSA9IGZhbHNlOwpAQCAtMTg3LDggKzE4Niw4IEBACiAgIC8vIFN0b3JlIG9sZCB2YWx1ZXMgZm9yIGl0ZXJhdGlvbiB2YXJpYWJsZXMKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBvbGREZWZzOwogICBmb3IgKGF1dG8gaSA9IDB1OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKG1mLkdldERlZmluaXRpb24oaXRlcmF0aW9uVmFyc1tpXSkpIHsKLSAgICAgIG9sZERlZnMuZW1wbGFjZShpdGVyYXRpb25WYXJzW2ldLCBtZi5HZXREZWZpbml0aW9uKGl0ZXJhdGlvblZhcnNbaV0pKTsKKyAgICBpZiAoYXV0byBkID0gbWYuR2V0RGVmaW5pdGlvbihpdGVyYXRpb25WYXJzW2ldKSkgeworICAgICAgb2xkRGVmcy5lbXBsYWNlKGl0ZXJhdGlvblZhcnNbaV0sIGQpOwogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GdW5jdGlvbkJsb2NrZXIuY3h4IGIvU291cmNlL2NtRnVuY3Rpb25CbG9ja2VyLmN4eAppbmRleCA1Nzc4YTcxLi42NDNjZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GdW5jdGlvbkJsb2NrZXIuY3h4CisrKyBiL1NvdXJjZS9jbUZ1bmN0aW9uQmxvY2tlci5jeHgKQEAgLTMsNyArMyw5IEBACiAjaW5jbHVkZSAiY21GdW5jdGlvbkJsb2NrZXIuaCIKIAogI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8bWVtb3J5PiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRnVuY3Rpb25Db21tYW5kLmN4eCBiL1NvdXJjZS9jbUZ1bmN0aW9uQ29tbWFuZC5jeHgKaW5kZXggYTRjOTA3Mi4uYjZmNThiZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRnVuY3Rpb25Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21GdW5jdGlvbkNvbW1hbmQuY3h4CkBAIC03LDggKzcsNyBAQAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KICNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUZ1bmN0aW9uQmxvY2tlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5jeHggYi9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmN4eAppbmRleCAyYWYwNGI2Li4zNDVmMGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmN4eApAQCAtOCw4ICs4LDkgQEAKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisjICBpbmNsdWRlIDxjbTNwL3psaWIuaD4KKwogIyAgaW5jbHVkZSAiY21fY29kZWN2dC5oeHgiCi0jICBpbmNsdWRlICJjbV96bGliLmgiCiAjZW5kaWYKIAogY21HZW5lcmF0ZWRGaWxlU3RyZWFtOjpjbUdlbmVyYXRlZEZpbGVTdHJlYW0oRW5jb2RpbmcgZW5jb2RpbmcpCkBAIC0xMjEsMTAgKzEyMiwxNyBAQAogICAvLyBDcmVhdGUgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLgogICB0aGlzLT5UZW1wTmFtZSA9IG5hbWU7CiAjaWYgZGVmaW5lZChfX1ZNUykKLSAgdGhpcy0+VGVtcE5hbWUgKz0gIl90bXAiOworICB0aGlzLT5UZW1wTmFtZSArPSAiXyI7CiAjZWxzZQotICB0aGlzLT5UZW1wTmFtZSArPSAiLnRtcCI7CisgIHRoaXMtPlRlbXBOYW1lICs9ICIuIjsKICNlbmRpZgorICBpZiAoIXRoaXMtPlRlbXBFeHQuZW1wdHkoKSkgeworICAgIHRoaXMtPlRlbXBOYW1lICs9IHRoaXMtPlRlbXBFeHQ7CisgIH0gZWxzZSB7CisgICAgY2hhciBidWZbNjRdOworICAgIHNwcmludGYoYnVmLCAidG1wJTA1eCIsIGNtU3lzdGVtVG9vbHM6OlJhbmRvbVNlZWQoKSAmIDB4RkZGRkYpOworICAgIHRoaXMtPlRlbXBOYW1lICs9IGJ1ZjsKKyAgfQogCiAgIC8vIE1ha2Ugc3VyZSB0aGUgdGVtcG9yYXJ5IGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgaXMgbm90IHByZXNlbnQuCiAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUodGhpcy0+VGVtcE5hbWUpOwpAQCAtMTgwLDYgKzE4OCw3IEBACiAgIH0KICAgRklMRSogaWZzID0gY21zeXM6OlN5c3RlbVRvb2xzOjpGb3BlbihvbGRuYW1lLCAiciIpOwogICBpZiAoIWlmcykgeworICAgIGd6Y2xvc2UoZ2YpOwogICAgIHJldHVybiAwOwogICB9CiAgIHNpemVfdCByZXM7CkBAIC0yMTQsMyArMjIzLDggQEAKIHsKICAgdGhpcy0+TmFtZSA9IGZuYW1lOwogfQorCit2b2lkIGNtR2VuZXJhdGVkRmlsZVN0cmVhbTo6U2V0VGVtcEV4dChzdGQ6OnN0cmluZyBjb25zdCYgZXh0KQoreworICB0aGlzLT5UZW1wRXh0ID0gZXh0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIGIvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5oCmluZGV4IGE5MDg4YWMuLjNkZWUxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRlZEZpbGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgKQEAgLTQzLDYgKzQzLDkgQEAKICAgLy8gVGhlIG5hbWUgb2YgdGhlIGZpbmFsIGRlc3RpbmF0aW9uIGZpbGUgZm9yIHRoZSBvdXRwdXQuCiAgIHN0ZDo6c3RyaW5nIE5hbWU7CiAKKyAgLy8gVGhlIGV4dGVuc2lvbiBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUuCisgIHN0ZDo6c3RyaW5nIFRlbXBFeHQ7CisKICAgLy8gVGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLgogICBzdGQ6OnN0cmluZyBUZW1wTmFtZTsKIApAQCAtMTM4LDYgKzE0MSwxMiBAQAogICAgKiB0aGUgb3V0cHV0IGZpbGUgdG8gYmUgY2hhbmdlZCBkdXJpbmcgdGhlIHVzZSBvZiBjbUdlbmVyYXRlZEZpbGVTdHJlYW0uCiAgICAqLwogICB2b2lkIFNldE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKTsKKworICAvKioKKyAgICogU2V0IHNldCBhIGN1c3RvbSB0ZW1wb3JhcnkgZmlsZSBleHRlbnNpb24gdXNlZCB3aXRoICdPcGVuJy4KKyAgICogVGhpcyBkb2VzIG5vdCB3b3JrIGlmIHRoZSBmaWxlIHdhcyBvcGVuZWQgYnkgdGhlIGNvbnN0cnVjdG9yLgorICAgKi8KKyAgdm9pZCBTZXRUZW1wRXh0KHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmN4eCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uY3h4CmluZGV4IDgxZDFlNDYuLjg0MGY1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uY3h4CkBAIC0zMiwxMiArMzIsNiBAQAogICAgIG5ldyBjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbih0aGlzLT5CYWNrdHJhY2UsIHN0ZDo6bW92ZShpbnB1dCkpKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjbUdlbmVyYXRvckV4cHJlc3Npb246OlBhcnNlKAotICBjb25zdCBjaGFyKiBpbnB1dCkgY29uc3QKLXsKLSAgcmV0dXJuIHRoaXMtPlBhcnNlKHN0ZDo6c3RyaW5nKGlucHV0ID8gaW5wdXQgOiAiIikpOwotfQotCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAogICBzdGQ6OnN0cmluZyBpbnB1dCwgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LApAQCAtNTIsMTcgKzQ2LDYgQEAKICAgcmV0dXJuIGlucHV0OwogfQogCi1zdGQ6OnN0cmluZyBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICBjb25zdCBjaGFyKiBpbnB1dCwgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LAotICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyLAotICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogY3VycmVudFRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlKQotewotICByZXR1cm4gaW5wdXQgPyBFdmFsdWF0ZShzdGQ6OnN0cmluZyhpbnB1dCksIGxnLCBjb25maWcsIGhlYWRUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhZ0NoZWNrZXIsIGN1cnJlbnRUYXJnZXQsIGxhbmd1YWdlKQotICAgICAgICAgICAgICAgOiAiIjsKLX0KLQogY29uc3Qgc3RkOjpzdHJpbmcmIGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKICAgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBoZWFkVGFyZ2V0LApAQCAtMTAzLDYgKzg2LDggQEAKICAgaWYgKCFjb250ZXh0LkhhZEVycm9yKSB7CiAgICAgdGhpcy0+SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGNvbnRleHQuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgICB0aGlzLT5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uID0gY29udGV4dC5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uOworICAgIHRoaXMtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9CisgICAgICBjb250ZXh0LkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgICB0aGlzLT5Tb3VyY2VTZW5zaXRpdmVUYXJnZXRzID0gY29udGV4dC5Tb3VyY2VTZW5zaXRpdmVUYXJnZXRzOwogICB9CiAKQEAgLTExOSw2ICsxMDQsNyBAQAogICAsIFF1aWV0KGZhbHNlKQogICAsIEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCiAgICwgSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbihmYWxzZSkKKyAgLCBIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCiB7CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkxleGVyIGw7CiAgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuPiB0b2tlbnMgPSBsLlRva2VuaXplKHRoaXMtPklucHV0KTsKQEAgLTQyMCw5ICs0MDYsMyBAQAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5Db25maWcsIHRoaXMtPkhlYWRUYXJnZXQsICZkYWdDaGVja2VyLCBudWxscHRyLAogICAgIHRoaXMtPkxhbmd1YWdlKTsKIH0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyOjpFdmFsdWF0ZSgKLSAgY29uc3QgY2hhciogZXhwcmVzc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5KQotewotICByZXR1cm4gdGhpcy0+RXZhbHVhdGUoc3RkOjpzdHJpbmcoZXhwcmVzc2lvbiA/IGV4cHJlc3Npb24gOiAiIiksIHByb3BlcnR5KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uaCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uaAppbmRleCBjNGJlM2ExLi4wOWQ4Yjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbi5oCkBAIC00Miw4ICs0Miw2IEBACiAKICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBQYXJzZSgKICAgICBzdGQ6OnN0cmluZyBpbnB1dCkgY29uc3Q7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gUGFyc2UoCi0gICAgY29uc3QgY2hhciogaW5wdXQpIGNvbnN0OwogCiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBFdmFsdWF0ZSgKICAgICBzdGQ6OnN0cmluZyBpbnB1dCwgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCkBAIC01MSwxMiArNDksNiBAQAogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIgPSBudWxscHRyLAogICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBjdXJyZW50VGFyZ2V0ID0gbnVsbHB0ciwKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZ3VhZ2UgPSBzdGQ6OnN0cmluZygpKTsKLSAgc3RhdGljIHN0ZDo6c3RyaW5nIEV2YWx1YXRlKAotICAgIGNvbnN0IGNoYXIqIGlucHV0LCBjbUxvY2FsR2VuZXJhdG9yKiBsZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCA9IG51bGxwdHIsCi0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlciA9IG51bGxwdHIsCi0gICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGN1cnJlbnRUYXJnZXQgPSBudWxscHRyLAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSA9IHN0ZDo6c3RyaW5nKCkpOwogCiAgIGVudW0gUHJlcHJvY2Vzc0NvbnRleHQKICAgewpAQCAtMTM3LDYgKzEyOSwxMCBAQAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb247CiAgIH0KKyAgYm9vbCBHZXRIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbjsKKyAgfQogICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IEdldFNvdXJjZVNlbnNpdGl2ZVRhcmdldHMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPlNvdXJjZVNlbnNpdGl2ZVRhcmdldHM7CkBAIC0xNzgsNiArMTc0LDcgQEAKICAgbXV0YWJsZSBzdGQ6OnN0cmluZyBPdXRwdXQ7CiAgIG11dGFibGUgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uOwogICBtdXRhYmxlIGJvb2wgSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbjsKKyAgbXV0YWJsZSBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgbXV0YWJsZSBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IFNvdXJjZVNlbnNpdGl2ZVRhcmdldHM7CiB9OwogCkBAIC0yMDIsOCArMTk5LDYgQEAKIAogICBjb25zdCBzdGQ6OnN0cmluZyYgRXZhbHVhdGUoc3RkOjpzdHJpbmcgZXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSk7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBFdmFsdWF0ZShjb25zdCBjaGFyKiBleHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5KTsKIAogcHJvdGVjdGVkOgogICBjbUdlbmVyYXRvckV4cHJlc3Npb24gR2VuZXJhdG9yRXhwcmVzc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmN4eCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmN4eAppbmRleCA2ZDk3MzMxLi40MmNiZTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5jeHgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuY3h4CkBAIC0xOSw2ICsxOSw3IEBACiAgICwgSGFkRXJyb3IoZmFsc2UpCiAgICwgSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbihmYWxzZSkKICAgLCBIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKGZhbHNlKQorICAsIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbihmYWxzZSkKICAgLCBFdmFsdWF0ZUZvckJ1aWxkc3lzdGVtKGV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0pCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaAppbmRleCA0NzA5ZmEwLi5iY2VmZjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICAgYm9vbCBIYWRFcnJvcjsKICAgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uOwogICBib29sIEhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb247CisgIGJvb2wgSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uOwogICBib29sIEV2YWx1YXRlRm9yQnVpbGRzeXN0ZW07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5jeHgKaW5kZXggNjQzYmEzNC4uZTIyM2YxNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmN4eApAQCAtNiw2ICs2LDkgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtNDQsMTIgKzQ3LDcgQEAKIAogdm9pZCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpJbml0aWFsaXplKCkKIHsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogdG9wID0gdGhpczsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogcCA9IHRoaXMtPlBhcmVudDsKLSAgd2hpbGUgKHApIHsKLSAgICB0b3AgPSBwOwotICAgIHAgPSBwLT5QYXJlbnQ7Ci0gIH0KKyAgY29uc3QgYXV0byogdG9wID0gdGhpcy0+VG9wKCk7CiAgIHRoaXMtPkNoZWNrUmVzdWx0ID0gdGhpcy0+Q2hlY2tHcmFwaCgpOwogCiAjZGVmaW5lIFRFU1RfVFJBTlNJVElWRV9QUk9QRVJUWV9NRVRIT0QoTUVUSE9EKSB0b3AtPk1FVEhPRCgpIHx8CkBAIC0xNDAsMzggKzEzOCw2NSBAQAogICByZXR1cm4gREFHOwogfQogCi1ib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkdldFRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seSgpCitib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkdldFRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seSgpIGNvbnN0CiB7Ci0gIGNvbnN0IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIHRvcCA9IHRoaXM7Ci0gIGNvbnN0IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIHBhcmVudCA9IHRoaXMtPlBhcmVudDsKLSAgd2hpbGUgKHBhcmVudCkgewotICAgIHRvcCA9IHBhcmVudDsKLSAgICBwYXJlbnQgPSBwYXJlbnQtPlBhcmVudDsKLSAgfQotCi0gIHJldHVybiB0b3AtPlRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seTsKKyAgcmV0dXJuIHRoaXMtPlRvcCgpLT5UcmFuc2l0aXZlUHJvcGVydGllc09ubHk7CiB9CiAKLWJvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6RXZhbHVhdGluZ0dlbmV4RXhwcmVzc2lvbigpCitib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdHZW5leEV4cHJlc3Npb24oKSBjb25zdAogewotICByZXR1cm4gdGhpcy0+UHJvcGVydHkuZmluZCgiVEFSR0VUX0dFTkVYX0VWQUw6IikgPT0gMCB8fAotICAgIHRoaXMtPlByb3BlcnR5LmZpbmQoIkdFTkVYX0VWQUw6IiwgMCkgPT0gMDsKKyAgcmV0dXJuIGNtSGFzTGl0ZXJhbFByZWZpeCh0aGlzLT5Qcm9wZXJ0eSwgIlRBUkdFVF9HRU5FWF9FVkFMOiIpIHx8CisgICAgY21IYXNMaXRlcmFsUHJlZml4KHRoaXMtPlByb3BlcnR5LCAiR0VORVhfRVZBTDoiKTsKIH0KIAotYm9vbCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpFdmFsdWF0aW5nUElDRXhwcmVzc2lvbigpCitib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdQSUNFeHByZXNzaW9uKCkgY29uc3QKIHsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogdG9wID0gdGhpczsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogcGFyZW50ID0gdGhpcy0+UGFyZW50OwotICB3aGlsZSAocGFyZW50KSB7Ci0gICAgdG9wID0gcGFyZW50OwotICAgIHBhcmVudCA9IHBhcmVudC0+UGFyZW50OwotICB9CisgIHJldHVybiB0aGlzLT5Ub3AoKS0+UHJvcGVydHkgPT0gIklOVEVSRkFDRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIjsKK30KIAotICByZXR1cm4gdG9wLT5Qcm9wZXJ0eSA9PSAiSU5URVJGQUNFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiOworYm9vbCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpFdmFsdWF0aW5nQ29tcGlsZUV4cHJlc3Npb24oKSBjb25zdAoreworICBjbTo6c3RyaW5nX3ZpZXcgcHJvcGVydHkodGhpcy0+VG9wKCktPlByb3BlcnR5KTsKKworICByZXR1cm4gcHJvcGVydHkgPT0gIklOQ0xVREVfRElSRUNUT1JJRVMiX3MgfHwKKyAgICBwcm9wZXJ0eSA9PSAiQ09NUElMRV9ERUZJTklUSU9OUyJfcyB8fCBwcm9wZXJ0eSA9PSAiQ09NUElMRV9PUFRJT05TIl9zOworfQorCitib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdMaW5rRXhwcmVzc2lvbigpIGNvbnN0Cit7CisgIGNtOjpzdHJpbmdfdmlldyBwcm9wZXJ0eSh0aGlzLT5Ub3AoKS0+UHJvcGVydHkpOworCisgIHJldHVybiBwcm9wZXJ0eSA9PSAiTElOS19ESVJFQ1RPUklFUyJfcyB8fCBwcm9wZXJ0eSA9PSAiTElOS19PUFRJT05TIl9zIHx8CisgICAgcHJvcGVydHkgPT0gIkxJTktfREVQRU5EUyJfczsKK30KKworYm9vbCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpFdmFsdWF0aW5nTGlua09wdGlvbnNFeHByZXNzaW9uKCkgY29uc3QKK3sKKyAgY206OnN0cmluZ192aWV3IHByb3BlcnR5KHRoaXMtPlRvcCgpLT5Qcm9wZXJ0eSk7CisKKyAgcmV0dXJuIHByb3BlcnR5ID09ICJMSU5LX09QVElPTlMiX3M7CiB9CiAKIGJvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6RXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMoCi0gIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QpCisgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QpIGNvbnN0Cit7CisgIGNvbnN0IGF1dG8qIHRvcCA9IHRoaXMtPlRvcCgpOworCisgIGNtOjpzdHJpbmdfdmlldyBwcm9wKHRvcC0+UHJvcGVydHkpOworCisgIGlmICh0Z3QpIHsKKyAgICByZXR1cm4gdG9wLT5UYXJnZXQgPT0gdGd0ICYmIHByb3AgPT0gIkxJTktfTElCUkFSSUVTIl9zOworICB9CisKKyAgcmV0dXJuIHByb3AgPT0gIkxJTktfTElCUkFSSUVTIl9zIHx8IHByb3AgPT0gIkxJTktfSU5URVJGQUNFX0xJQlJBUklFUyJfcyB8fAorICAgIHByb3AgPT0gIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyJfcyB8fAorICAgIGNtSGFzTGl0ZXJhbFByZWZpeChwcm9wLCAiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTXyIpIHx8CisgICAgY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVNfIikgfHwKKyAgICBwcm9wID09ICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiX3M7Cit9CisKK2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgY29uc3QqIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OlRvcCgpCisgIGNvbnN0CiB7CiAgIGNvbnN0IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIHRvcCA9IHRoaXM7CiAgIGNvbnN0IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIHBhcmVudCA9IHRoaXMtPlBhcmVudDsKQEAgLTE3OSwzMCArMjA0LDEyIEBACiAgICAgdG9wID0gcGFyZW50OwogICAgIHBhcmVudCA9IHBhcmVudC0+UGFyZW50OwogICB9Ci0KLSAgY29uc3QgY2hhciogcHJvcCA9IHRvcC0+UHJvcGVydHkuY19zdHIoKTsKLQotICBpZiAodGd0KSB7Ci0gICAgcmV0dXJuIHRvcC0+VGFyZ2V0ID09IHRndCAmJiBzdHJjbXAocHJvcCwgIkxJTktfTElCUkFSSUVTIikgPT0gMDsKLSAgfQotCi0gIHJldHVybiAoc3RyY21wKHByb3AsICJMSU5LX0xJQlJBUklFUyIpID09IDAgfHwKLSAgICAgICAgICBzdHJjbXAocHJvcCwgIkxJTktfSU5URVJGQUNFX0xJQlJBUklFUyIpID09IDAgfHwKLSAgICAgICAgICBzdHJjbXAocHJvcCwgIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyIpID09IDAgfHwKLSAgICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIkxJTktfSU5URVJGQUNFX0xJQlJBUklFU18iKSB8fAotICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChwcm9wLCAiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTXyIpKSB8fAotICAgIHN0cmNtcChwcm9wLCAiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIikgPT0gMDsKKyAgcmV0dXJuIHRvcDsKIH0KIAogY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OlRvcFRhcmdldCgpIGNvbnN0CiB7Ci0gIGNvbnN0IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIHRvcCA9IHRoaXM7Ci0gIGNvbnN0IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIHBhcmVudCA9IHRoaXMtPlBhcmVudDsKLSAgd2hpbGUgKHBhcmVudCkgewotICAgIHRvcCA9IHBhcmVudDsKLSAgICBwYXJlbnQgPSBwYXJlbnQtPlBhcmVudDsKLSAgfQotICByZXR1cm4gdG9wLT5UYXJnZXQ7CisgIHJldHVybiB0aGlzLT5Ub3AoKS0+VGFyZ2V0OwogfQogCiBlbnVtIFRyYW5zaXRpdmVQcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuaCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmgKaW5kZXggZjJjNDliYi4uYWMyMzE0YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuaAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5oCkBAIC02Niw5ICs2NiwxMyBAQAogICB2b2lkIFJlcG9ydEVycm9yKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cHIpOwogCi0gIGJvb2wgRXZhbHVhdGluZ0dlbmV4RXhwcmVzc2lvbigpOwotICBib29sIEV2YWx1YXRpbmdQSUNFeHByZXNzaW9uKCk7Ci0gIGJvb2wgRXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCA9IG51bGxwdHIpOworICBib29sIEV2YWx1YXRpbmdHZW5leEV4cHJlc3Npb24oKSBjb25zdDsKKyAgYm9vbCBFdmFsdWF0aW5nUElDRXhwcmVzc2lvbigpIGNvbnN0OworICBib29sIEV2YWx1YXRpbmdDb21waWxlRXhwcmVzc2lvbigpIGNvbnN0OworICBib29sIEV2YWx1YXRpbmdMaW5rRXhwcmVzc2lvbigpIGNvbnN0OworICBib29sIEV2YWx1YXRpbmdMaW5rT3B0aW9uc0V4cHJlc3Npb24oKSBjb25zdDsKKworICBib29sIEV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QgPSBudWxscHRyKSBjb25zdDsKIAogI2RlZmluZSBERUNMQVJFX1RSQU5TSVRJVkVfUFJPUEVSVFlfTUVUSE9EKE1FVEhPRCkgYm9vbCBNRVRIT0QoKSBjb25zdDsKIApAQCAtNzYsOSArODAsMTAgQEAKIAogI3VuZGVmIERFQ0xBUkVfVFJBTlNJVElWRV9QUk9QRVJUWV9NRVRIT0QKIAotICBib29sIEdldFRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seSgpOworICBib29sIEdldFRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seSgpIGNvbnN0OwogICB2b2lkIFNldFRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seSgpIHsgdGhpcy0+VHJhbnNpdGl2ZVByb3BlcnRpZXNPbmx5ID0gdHJ1ZTsgfQogCisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgY29uc3QqIFRvcCgpIGNvbnN0OwogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogVG9wVGFyZ2V0KCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUuY3h4IGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlLmN4eAppbmRleCA5ZTg3MDdkLi4xMTA3YWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUuY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0aW9uRmlsZS5jeHgKQEAgLTE1NywxMiArMTU3LDggQEAKIAogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG91dHB1dEZpbGVzOwogCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhbGxDb25maWdzOwotICBsZy0+R2V0TWFrZWZpbGUoKS0+R2V0Q29uZmlndXJhdGlvbnMoYWxsQ29uZmlncyk7Ci0KLSAgaWYgKGFsbENvbmZpZ3MuZW1wdHkoKSkgewotICAgIGFsbENvbmZpZ3MuZW1wbGFjZV9iYWNrKCk7Ci0gIH0KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFsbENvbmZpZ3MgPQorICAgIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGVuYWJsZWRMYW5ndWFnZXM7CiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IGxnLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlLmN4eCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlLmN4eAppbmRleCAxNDQ3OGMyLi5hMWEwYWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZS5jeHgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbk5vZGUuY3h4CkBAIC0xNSwxMiArMTUsMTMgQEAKIAogI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtL3ZlY3Rvcj4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAjaW5jbHVkZSAiY21zeXMvU3RyaW5nLmgiCiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgotCiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgorI2luY2x1ZGUgImNtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgpAQCAtNjIsNiArNjUsOSBAQAogICBpZiAoY2dlLT5HZXRIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKICAgICBjb250ZXh0LT5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKICAgfQorICBpZiAoY2dlLT5HZXRIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oKSkgeworICAgIGNvbnRleHQtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzEwLDcgKzMxNiw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBjbUNvbnRhaW5zKHZhbHVlcywgcGFyYW1ldGVycy5mcm9udCgpKSA/ICIxIiA6ICIwIjsKKyAgICByZXR1cm4gY206OmNvbnRhaW5zKHZhbHVlcywgcGFyYW1ldGVycy5mcm9udCgpKSA/ICIxIiA6ICIwIjsKICAgfQogfSBpbkxpc3ROb2RlOwogCkBAIC04NzYsNyArODgyLDcgQEAKIHsKICAgQ29uZmlndXJhdGlvblRlc3ROb2RlKCkge30gLy8gTk9MSU5UKG1vZGVybml6ZS11c2UtZXF1YWxzLWRlZmF1bHQpCiAKLSAgaW50IE51bUV4cGVjdGVkUGFyYW1ldGVycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE9uZU9yWmVyb1BhcmFtZXRlcnM7IH0KKyAgaW50IE51bUV4cGVjdGVkUGFyYW1ldGVycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFplcm9Pck1vcmVQYXJhbWV0ZXJzOyB9CiAKICAgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLApAQCAtODk0LDM0ICs5MDAsMzcgQEAKICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICAgIH0KICAgICBjb250ZXh0LT5IYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKLSAgICBpZiAoY29udGV4dC0+Q29uZmlnLmVtcHR5KCkpIHsKLSAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmZyb250KCkuZW1wdHkoKSA/ICIxIiA6ICIwIjsKLSAgICB9Ci0KLSAgICBpZiAoY21zeXNTdHJpbmdfc3RyY2FzZWNtcChwYXJhbWV0ZXJzLmZyb250KCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5Db25maWcuY19zdHIoKSkgPT0gMCkgewotICAgICAgcmV0dXJuICIxIjsKKyAgICBmb3IgKGF1dG8mIHBhcmFtIDogcGFyYW1ldGVycykgeworICAgICAgaWYgKGNvbnRleHQtPkNvbmZpZy5lbXB0eSgpKSB7CisgICAgICAgIGlmIChwYXJhbS5lbXB0eSgpKSB7CisgICAgICAgICAgcmV0dXJuICIxIjsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChjbXN5c1N0cmluZ19zdHJjYXNlY21wKHBhcmFtLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Q29uZmlnLmNfc3RyKCkpID09IDApIHsKKyAgICAgICAgcmV0dXJuICIxIjsKKyAgICAgIH0KICAgICB9CiAKICAgICBpZiAoY29udGV4dC0+Q3VycmVudFRhcmdldCAmJiBjb250ZXh0LT5DdXJyZW50VGFyZ2V0LT5Jc0ltcG9ydGVkKCkpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGxvYyA9IG51bGxwdHI7Ci0gICAgICBjb25zdCBjaGFyKiBpbXAgPSBudWxscHRyOworICAgICAgY21Qcm9wIGxvYyA9IG51bGxwdHI7CisgICAgICBjbVByb3AgaW1wID0gbnVsbHB0cjsKICAgICAgIHN0ZDo6c3RyaW5nIHN1ZmZpeDsKLSAgICAgIGlmIChjb250ZXh0LT5DdXJyZW50VGFyZ2V0LT5UYXJnZXQtPkdldE1hcHBlZENvbmZpZygKLSAgICAgICAgICAgIGNvbnRleHQtPkNvbmZpZywgJmxvYywgJmltcCwgc3VmZml4KSkgeworICAgICAgaWYgKGNvbnRleHQtPkN1cnJlbnRUYXJnZXQtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGNvbnRleHQtPkNvbmZpZywgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcCwgc3VmZml4KSkgewogICAgICAgICAvLyBUaGlzIGltcG9ydGVkIHRhcmdldCBoYXMgYW4gYXBwcm9wcmlhdGUgbG9jYXRpb24KICAgICAgICAgLy8gZm9yIHRoaXMgKHBvc3NpYmx5IG1hcHBlZCkgY29uZmlnLgogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHByb3BlciBjb25maWcgbWFwcGluZyBmb3IgdGhlIHRlc3RlZCBjb25maWcuCiAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtYXBwZWRDb25maWdzOwogICAgICAgICBzdGQ6OnN0cmluZyBtYXBQcm9wID0gY21TdHJDYXQoCiAgICAgICAgICAgIk1BUF9JTVBPUlRFRF9DT05GSUdfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbnRleHQtPkNvbmZpZykpOwotICAgICAgICBpZiAoY29uc3QgY2hhciogbWFwVmFsdWUgPQotICAgICAgICAgICAgICBjb250ZXh0LT5DdXJyZW50VGFyZ2V0LT5HZXRQcm9wZXJ0eShtYXBQcm9wKSkgewotICAgICAgICAgIGNtRXhwYW5kTGlzdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UobWFwVmFsdWUpLCBtYXBwZWRDb25maWdzKTsKLSAgICAgICAgICByZXR1cm4gY21Db250YWlucyhtYXBwZWRDb25maWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShwYXJhbWV0ZXJzLmZyb250KCkpKQotICAgICAgICAgICAgPyAiMSIKLSAgICAgICAgICAgIDogIjAiOworICAgICAgICBpZiAoY21Qcm9wIG1hcFZhbHVlID0gY29udGV4dC0+Q3VycmVudFRhcmdldC0+R2V0UHJvcGVydHkobWFwUHJvcCkpIHsKKyAgICAgICAgICBjbUV4cGFuZExpc3QoY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKCptYXBWYWx1ZSksIG1hcHBlZENvbmZpZ3MpOworCisgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgIGlmIChjbTo6Y29udGFpbnMobWFwcGVkQ29uZmlncywgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKHBhcmFtKSkpIHsKKyAgICAgICAgICAgICAgcmV0dXJuICIxIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC05NTgsOSArOTY3LDEwIEBACiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLAogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCi0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogLypkYWdDaGVja2VyKi8pIGNvbnN0IG92ZXJyaWRlCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKICAgewotICAgIGlmIChjb250ZXh0LT5MYW5ndWFnZS5lbXB0eSgpKSB7CisgICAgaWYgKGNvbnRleHQtPkxhbmd1YWdlLmVtcHR5KCkgJiYKKyAgICAgICAgKCFkYWdDaGVja2VyIHx8ICFkYWdDaGVja2VyLT5FdmFsdWF0aW5nQ29tcGlsZUV4cHJlc3Npb24oKSkpIHsKICAgICAgIHJlcG9ydEVycm9yKAogICAgICAgICBjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwKICAgICAgICAgIiQ8Q09NUElMRV9MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBpbmNsdWRlICIKQEAgLTEwMDUsNyArMTAxNSw5IEBACiAgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCiAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKICAgewotICAgIGlmICghY29udGV4dC0+SGVhZFRhcmdldCB8fCBjb250ZXh0LT5MYW5ndWFnZS5lbXB0eSgpKSB7CisgICAgaWYgKCFjb250ZXh0LT5IZWFkVGFyZ2V0IHx8CisgICAgICAgIChjb250ZXh0LT5MYW5ndWFnZS5lbXB0eSgpICYmCisgICAgICAgICAoIWRhZ0NoZWNrZXIgfHwgIWRhZ0NoZWNrZXItPkV2YWx1YXRpbmdDb21waWxlRXhwcmVzc2lvbigpKSkpIHsKICAgICAgIC8vIHJlcG9ydEVycm9yKGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLCAiIik7CiAgICAgICByZXBvcnRFcnJvcigKICAgICAgICAgY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCkBAIC0xMDM5LDYgKzEwNTEsMjE0IEBACiAgIH0KIH0gbGFuZ3VhZ2VBbmRJZE5vZGU7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgTGlua0xhbmd1YWdlTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIExpbmtMYW5ndWFnZU5vZGUoKSB7fSAvLyBOT0xJTlQobW9kZXJuaXplLXVzZS1lcXVhbHMtZGVmYXVsdCkKKworICBpbnQgTnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gWmVyb09yTW9yZVBhcmFtZXRlcnM7IH0KKworICBzdGQ6OnN0cmluZyBFdmFsdWF0ZSgKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHBhcmFtZXRlcnMsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudCogY29udGVudCwKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyKSBjb25zdCBvdmVycmlkZQorICB7CisgICAgaWYgKCFjb250ZXh0LT5IZWFkVGFyZ2V0IHx8ICFkYWdDaGVja2VyIHx8CisgICAgICAgICEoZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtFeHByZXNzaW9uKCkgfHwKKyAgICAgICAgICBkYWdDaGVja2VyLT5FdmFsdWF0aW5nTGlua0xpYnJhcmllcygpKSkgeworICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAiJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzICIKKyAgICAgICAgICAgICAgICAgICJ0byBzcGVjaWZ5IGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgIgorICAgICAgICAgICAgICAgICAgImFuZCBsaW5rIGRlcGVuZHMuIik7CisgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkgJiYgcGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXBvcnRFcnJvcigKKyAgICAgICAgY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICIkPExJTktfTEFOR1VBR0U+IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGluayBsaWJyYXJpZXMgZXhwcmVzc2lvbi4iKTsKKyAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgIH0KKworICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IGNvbnRleHQtPkxHLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKKyAgICBzdGQ6OnN0cmluZyBnZW5OYW1lID0gZ2ctPkdldE5hbWUoKTsKKyAgICBpZiAoZ2VuTmFtZS5maW5kKCJNYWtlZmlsZXMiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIk5pbmphIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJWaXN1YWwgU3R1ZGlvIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJYY29kZSIpID09IHN0ZDo6c3RyaW5nOjpucG9zICYmCisgICAgICAgIGdlbk5hbWUuZmluZCgiV2F0Y29tIFdNYWtlIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHJlcG9ydEVycm9yKGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgIiQ8TElOS19MQU5HVUFHRTouLi4+IG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZ2VuZXJhdG9yLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkpIHsKKyAgICAgIGNvbnRleHQtPkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOworICAgICAgY29udGV4dC0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gY29udGV4dC0+TGFuZ3VhZ2U7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgIGlmIChjb250ZXh0LT5MYW5ndWFnZSA9PSBwYXJhbSkgeworICAgICAgICByZXR1cm4gIjEiOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIjAiOworICB9Cit9IGxpbmtMYW5ndWFnZU5vZGU7CisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgTGlua2VySWQKK3sKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEV2YWx1YXRlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudCogY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKQorICB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpbmtlcklkID0KKyAgICAgIGNvbnRleHQtPkxHLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ09NUElMRVJfSUQiKTsKKyAgICBpZiAocGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gbGlua2VySWQ7CisgICAgfQorICAgIGlmIChsaW5rZXJJZC5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gcGFyYW1ldGVycy5mcm9udCgpLmVtcHR5KCkgPyAiMSIgOiAiMCI7CisgICAgfQorICAgIHN0YXRpYyBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gbGlua2VySWRWYWxpZGF0b3IoIl5bQS1aYS16MC05X10qJCIpOworCisgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgIGlmICghbGlua2VySWRWYWxpZGF0b3IuZmluZChwYXJhbSkpIHsKKyAgICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICJFeHByZXNzaW9uIHN5bnRheCBub3QgcmVjb2duaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgICB9CisKKyAgICAgIGlmIChwYXJhbSA9PSBsaW5rZXJJZCkgeworICAgICAgICByZXR1cm4gIjEiOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIjAiOworICB9Cit9OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IExpbmtMYW5ndWFnZUFuZElkTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIExpbmtMYW5ndWFnZUFuZElkTm9kZSgpIHt9IC8vIE5PTElOVChtb2Rlcm5pemUtdXNlLWVxdWFscy1kZWZhdWx0KQorCisgIGludCBOdW1FeHBlY3RlZFBhcmFtZXRlcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBUd29Pck1vcmVQYXJhbWV0ZXJzOyB9CisKKyAgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLAorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIGlmICghY29udGV4dC0+SGVhZFRhcmdldCB8fCAhZGFnQ2hlY2tlciB8fAorICAgICAgICAhKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rRXhwcmVzc2lvbigpIHx8CisgICAgICAgICAgZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMoKSkpIHsKKyAgICAgIHJlcG9ydEVycm9yKAorICAgICAgICBjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwKKyAgICAgICAgIiQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgIgorICAgICAgICAidG8gc3BlY2lmeSBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayAiCisgICAgICAgICJkZXBlbmRzLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gY29udGV4dC0+TEctPkdldEdsb2JhbEdlbmVyYXRvcigpOworICAgIHN0ZDo6c3RyaW5nIGdlbk5hbWUgPSBnZy0+R2V0TmFtZSgpOworICAgIGlmIChnZW5OYW1lLmZpbmQoIk1ha2VmaWxlcyIpID09IHN0ZDo6c3RyaW5nOjpucG9zICYmCisgICAgICAgIGdlbk5hbWUuZmluZCgiTmluamEiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIlZpc3VhbCBTdHVkaW8iKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIlhjb2RlIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJXYXRjb20gV01ha2UiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgcmVwb3J0RXJyb3IoCisgICAgICAgIGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLAorICAgICAgICAiJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZ2VuZXJhdG9yLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkpIHsKKyAgICAgIGNvbnRleHQtPkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOworICAgICAgY29udGV4dC0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZyA9IGNvbnRleHQtPkxhbmd1YWdlOworICAgIGlmIChsYW5nID09IHBhcmFtZXRlcnMuZnJvbnQoKSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGlkUGFyYW1ldGVyKChwYXJhbWV0ZXJzLmNiZWdpbigpICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5jZW5kKCkpOworICAgICAgcmV0dXJuIExpbmtlcklkOjpFdmFsdWF0ZShpZFBhcmFtZXRlciwgY29udGV4dCwgY29udGVudCwgbGFuZyk7CisgICAgfQorICAgIHJldHVybiAiMCI7CisgIH0KK30gbGlua0xhbmd1YWdlQW5kSWROb2RlOworCitzdGF0aWMgY29uc3Qgc3RydWN0IEhvc3RMaW5rTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIEhvc3RMaW5rTm9kZSgpIHt9IC8vIE5PTElOVChtb2Rlcm5pemUtdXNlLWVxdWFscy1kZWZhdWx0KQorCisgIGludCBOdW1FeHBlY3RlZFBhcmFtZXRlcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBaZXJvT3JNb3JlUGFyYW1ldGVyczsgfQorCisgIHN0ZDo6c3RyaW5nIEV2YWx1YXRlKAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFyYW1ldGVycywKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KiBjb250ZW50LAorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIpIGNvbnN0IG92ZXJyaWRlCisgIHsKKyAgICBpZiAoIWNvbnRleHQtPkhlYWRUYXJnZXQgfHwgIWRhZ0NoZWNrZXIgfHwKKyAgICAgICAgIWRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rT3B0aW9uc0V4cHJlc3Npb24oKSkgeworICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAiJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgIgorICAgICAgICAgICAgICAgICAgInRvIHNwZWNpZnkgbGluayBvcHRpb25zLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbnRleHQtPkhlYWRUYXJnZXQtPklzRGV2aWNlTGluaygpID8gc3RkOjpzdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNtSm9pbihwYXJhbWV0ZXJzLCAiOyIpOworICB9Cit9IGhvc3RMaW5rTm9kZTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBEZXZpY2VMaW5rTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIERldmljZUxpbmtOb2RlKCkge30gLy8gTk9MSU5UKG1vZGVybml6ZS11c2UtZXF1YWxzLWRlZmF1bHQpCisKKyAgaW50IE51bUV4cGVjdGVkUGFyYW1ldGVycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFplcm9Pck1vcmVQYXJhbWV0ZXJzOyB9CisKKyAgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLAorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIGlmICghY29udGV4dC0+SGVhZFRhcmdldCB8fCAhZGFnQ2hlY2tlciB8fAorICAgICAgICAhZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtPcHRpb25zRXhwcmVzc2lvbigpKSB7CisgICAgICByZXBvcnRFcnJvcihjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICIkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzICIKKyAgICAgICAgICAgICAgICAgICJ0byBzcGVjaWZ5IGxpbmsgb3B0aW9ucy4iKTsKKyAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgIH0KKworICAgIGlmIChjb250ZXh0LT5IZWFkVGFyZ2V0LT5Jc0RldmljZUxpbmsoKSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpc3Q7CisgICAgICBjbUV4cGFuZExpc3RzKHBhcmFtZXRlcnMuYmVnaW4oKSwgcGFyYW1ldGVycy5lbmQoKSwgbGlzdCk7CisgICAgICBjb25zdCBhdXRvIERMX0JFR0lOID0gIjxERVZJQ0VfTElOSz4iX3M7CisgICAgICBjb25zdCBhdXRvIERMX0VORCA9ICI8L0RFVklDRV9MSU5LPiJfczsKKyAgICAgIGNtOjplcmFzZV9pZihsaXN0LCBbJl0oY29uc3Qgc3RkOjpzdHJpbmcmIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0gPT0gRExfQkVHSU4gfHwgaXRlbSA9PSBETF9FTkQ7CisgICAgICB9KTsKKworICAgICAgbGlzdC5pbnNlcnQobGlzdC5iZWdpbigpLCBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4oRExfQkVHSU4pKTsKKyAgICAgIGxpc3QucHVzaF9iYWNrKHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihETF9FTkQpKTsKKworICAgICAgcmV0dXJuIGNtSm9pbihsaXN0LCAiOyIpOworICAgIH0KKworICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICB9Cit9IGRldmljZUxpbmtOb2RlOworCiBzdGQ6OnN0cmluZyBnZXRMaW5rZWRUYXJnZXRzQ29udGVudCgKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCkBAIC0xMTMwLDYgKzEzNTAsMTQgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKICAgICAgIH0KKyAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gIkFMSUFTX0dMT0JBTCJfcykgeworICAgICAgICBpZiAoY29udGV4dC0+TEctPkdldE1ha2VmaWxlKCktPklzQWxpYXModGFyZ2V0TmFtZSkpIHsKKyAgICAgICAgICByZXR1cm4gY29udGV4dC0+TEctPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc0FsaWFzKHRhcmdldE5hbWUpCisgICAgICAgICAgICA/ICJUUlVFIgorICAgICAgICAgICAgOiAiRkFMU0UiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgICAgfQogICAgICAgdGFyZ2V0ID0gY29udGV4dC0+TEctPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZSh0YXJnZXROYW1lKTsKIAogICAgICAgaWYgKCF0YXJnZXQpIHsKQEAgLTExNTYsNiArMTM4NCw3IEBACiAgICAgICAgICAgY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCiAgICAgICAgICAgIiQ8VEFSR0VUX1BST1BFUlRZOnByb3A+ICBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMuICAiCiAgICAgICAgICAgIkl0IG1heSBub3QgYmUgdXNlZCB3aXRoIGFkZF9jdXN0b21fY29tbWFuZCBvciBhZGRfY3VzdG9tX3RhcmdldC4gICIKKyAgICAgICAgICAiICIKICAgICAgICAgICAiU3BlY2lmeSB0aGUgdGFyZ2V0IHRvIHJlYWQgYSBwcm9wZXJ0eSBmcm9tIHVzaW5nIHRoZSAiCiAgICAgICAgICAgIiQ8VEFSR0VUX1BST1BFUlRZOnRndCxwcm9wPiBzaWduYXR1cmUgaW5zdGVhZC4iKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkBAIC0xMjcwLDggKzE0OTksOCBAQAogCiAgICAgc3RkOjpzdHJpbmcgcmVzdWx0OwogICAgIGJvb2wgaGF2ZVByb3AgPSBmYWxzZTsKLSAgICBpZiAoY29uc3QgY2hhciogcCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSkgewotICAgICAgcmVzdWx0ID0gcDsKKyAgICBpZiAoY21Qcm9wIHAgPSB0YXJnZXQtPkdldFByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgIHJlc3VsdCA9ICpwOwogICAgICAgaGF2ZVByb3AgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoZXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMpIHsKICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpAQCAtMTQxOCwxMSArMTY0NywxMSBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvYmplY3RzOwogCiAgICAgaWYgKGd0LT5Jc0ltcG9ydGVkKCkpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGxvYyA9IG51bGxwdHI7Ci0gICAgICBjb25zdCBjaGFyKiBpbXAgPSBudWxscHRyOworICAgICAgY21Qcm9wIGxvYyA9IG51bGxwdHI7CisgICAgICBjbVByb3AgaW1wID0gbnVsbHB0cjsKICAgICAgIHN0ZDo6c3RyaW5nIHN1ZmZpeDsKLSAgICAgIGlmIChndC0+VGFyZ2V0LT5HZXRNYXBwZWRDb25maWcoY29udGV4dC0+Q29uZmlnLCAmbG9jLCAmaW1wLCBzdWZmaXgpKSB7Ci0gICAgICAgIGNtRXhwYW5kTGlzdChsb2MsIG9iamVjdHMpOworICAgICAgaWYgKGd0LT5UYXJnZXQtPkdldE1hcHBlZENvbmZpZyhjb250ZXh0LT5Db25maWcsIGxvYywgaW1wLCBzdWZmaXgpKSB7CisgICAgICAgIGNtRXhwYW5kTGlzdCgqbG9jLCBvYmplY3RzKTsKICAgICAgIH0KICAgICAgIGNvbnRleHQtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOwogICAgIH0gZWxzZSB7CkBAIC0xNDgyLDEyICsxNzExLDEyIEBACiAgICAgc3RhdGljIExhbmdNYXAgYXZhaWxhYmxlRmVhdHVyZXM7CiAKICAgICBMYW5nTWFwIHRlc3RlZEZlYXR1cmVzOwotCisgICAgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIgc3RhbmRhcmRSZXNvbHZlcihjb250ZXh0LT5MRy0+R2V0TWFrZWZpbGUoKSk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IHBhcmFtZXRlcnMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGVycm9yOwogICAgICAgc3RkOjpzdHJpbmcgbGFuZzsKLSAgICAgIGlmICghY29udGV4dC0+TEctPkdldE1ha2VmaWxlKCktPkNvbXBpbGVGZWF0dXJlS25vd24oCi0gICAgICAgICAgICBjb250ZXh0LT5IZWFkVGFyZ2V0LT5UYXJnZXQsIHAsIGxhbmcsICZlcnJvcikpIHsKKyAgICAgIGlmICghc3RhbmRhcmRSZXNvbHZlci5Db21waWxlRmVhdHVyZUtub3duKAorICAgICAgICAgICAgY29udGV4dC0+SGVhZFRhcmdldC0+VGFyZ2V0LT5HZXROYW1lKCksIHAsIGxhbmcsICZlcnJvcikpIHsKICAgICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksIGVycm9yKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgICAgICB9CkBAIC0xNDk1LDcgKzE3MjQsNyBAQAogCiAgICAgICBpZiAoYXZhaWxhYmxlRmVhdHVyZXMuZmluZChsYW5nKSA9PSBhdmFpbGFibGVGZWF0dXJlcy5lbmQoKSkgewogICAgICAgICBjb25zdCBjaGFyKiBmZWF0dXJlc0tub3duID0KLSAgICAgICAgICBjb250ZXh0LT5MRy0+R2V0TWFrZWZpbGUoKS0+Q29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKGxhbmcsICZlcnJvcik7CisgICAgICAgICAgc3RhbmRhcmRSZXNvbHZlci5Db21waWxlRmVhdHVyZXNBdmFpbGFibGUobGFuZywgJmVycm9yKTsKICAgICAgICAgaWYgKCFmZWF0dXJlc0tub3duKSB7CiAgICAgICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksIGVycm9yKTsKICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKQEAgLTE1MDksMjYgKzE3MzgsMjYgQEAKICAgICBmb3IgKGF1dG8gY29uc3QmIGxpdCA6IHRlc3RlZEZlYXR1cmVzKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxhbmdBdmFpbGFibGUgPQogICAgICAgICBhdmFpbGFibGVGZWF0dXJlc1tsaXQuZmlyc3RdOwotICAgICAgY29uc3QgY2hhciogc3RhbmRhcmREZWZhdWx0ID0gY29udGV4dC0+TEctPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24oCisgICAgICBjbVByb3Agc3RhbmRhcmREZWZhdWx0ID0gY29udGV4dC0+TEctPkdldE1ha2VmaWxlKCktPkdldERlZigKICAgICAgICAgIkNNQUtFXyIgKyBsaXQuZmlyc3QgKyAiX1NUQU5EQVJEX0RFRkFVTFQiKTsKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGl0IDogbGl0LnNlY29uZCkgewotICAgICAgICBpZiAoIWNtQ29udGFpbnMobGFuZ0F2YWlsYWJsZSwgaXQpKSB7CisgICAgICAgIGlmICghY206OmNvbnRhaW5zKGxhbmdBdmFpbGFibGUsIGl0KSkgewogICAgICAgICAgIHJldHVybiAiMCI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0YW5kYXJkRGVmYXVsdCAmJiAhKnN0YW5kYXJkRGVmYXVsdCkgeworICAgICAgICBpZiAoc3RhbmRhcmREZWZhdWx0ICYmIHN0YW5kYXJkRGVmYXVsdC0+ZW1wdHkoKSkgewogICAgICAgICAgIC8vIFRoaXMgY29tcGlsZXIgaGFzIG5vIG5vdGlvbiBvZiBsYW5ndWFnZSBzdGFuZGFyZCBsZXZlbHMuCiAgICAgICAgICAgLy8gQWxsIGZlYXR1cmVzIGtub3duIGZvciB0aGUgbGFuZ3VhZ2UgYXJlIGFsd2F5cyBhdmFpbGFibGUuCiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFjb250ZXh0LT5MRy0+R2V0TWFrZWZpbGUoKS0+SGF2ZVN0YW5kYXJkQXZhaWxhYmxlKAotICAgICAgICAgICAgICB0YXJnZXQtPlRhcmdldCwgbGl0LmZpcnN0LCBpdCkpIHsKKyAgICAgICAgaWYgKCFzdGFuZGFyZFJlc29sdmVyLkhhdmVTdGFuZGFyZEF2YWlsYWJsZSh0YXJnZXQsIGxpdC5maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5Db25maWcsIGl0KSkgewogICAgICAgICAgIGlmIChldmFsTEwpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGwgPSB0YXJnZXQtPkdldFByb3BlcnR5KGxpdC5maXJzdCArICJfU1RBTkRBUkQiKTsKKyAgICAgICAgICAgIGNtUHJvcCBsID0gdGFyZ2V0LT5HZXRMYW5ndWFnZVN0YW5kYXJkKGxpdC5maXJzdCwgY29udGV4dC0+Q29uZmlnKTsKICAgICAgICAgICAgIGlmICghbCkgewogICAgICAgICAgICAgICBsID0gc3RhbmRhcmREZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXNzZXJ0KGwpOwotICAgICAgICAgICAgY29udGV4dC0+TWF4TGFuZ3VhZ2VTdGFuZGFyZFt0YXJnZXRdW2xpdC5maXJzdF0gPSBsOworICAgICAgICAgICAgY29udGV4dC0+TWF4TGFuZ3VhZ2VTdGFuZGFyZFt0YXJnZXRdW2xpdC5maXJzdF0gPSAqbDsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0dXJuICIwIjsKICAgICAgICAgICB9CkBAIC0yMzE0LDYgKzI1NDMsMTAgQEAKICAgICB7ICJMSU5LX09OTFkiLCAmbGlua09ubHlOb2RlIH0sCiAgICAgeyAiQ09NUElMRV9MQU5HX0FORF9JRCIsICZsYW5ndWFnZUFuZElkTm9kZSB9LAogICAgIHsgIkNPTVBJTEVfTEFOR1VBR0UiLCAmbGFuZ3VhZ2VOb2RlIH0sCisgICAgeyAiTElOS19MQU5HX0FORF9JRCIsICZsaW5rTGFuZ3VhZ2VBbmRJZE5vZGUgfSwKKyAgICB7ICJMSU5LX0xBTkdVQUdFIiwgJmxpbmtMYW5ndWFnZU5vZGUgfSwKKyAgICB7ICJIT1NUX0xJTksiLCAmaG9zdExpbmtOb2RlIH0sCisgICAgeyAiREVWSUNFX0xJTksiLCAmZGV2aWNlTGlua05vZGUgfSwKICAgICB7ICJTSEVMTF9QQVRIIiwgJnNoZWxsUGF0aE5vZGUgfQogICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JUYXJnZXQuY3h4IGIvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmN4eAppbmRleCAzNmNmMjEzLi40ZmU2OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JUYXJnZXQuY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvclRhcmdldC5jeHgKQEAgLTE3LDYgKzE3LDggQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKQEAgLTM1LDExICszNywxMyBAQAogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eU1hcC5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZUxvY2F0aW9uS2luZC5oIgorI2luY2x1ZGUgImNtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTUxLDExICs1NSwxMSBAQAogY2xhc3MgY21NZXNzZW5nZXI7CiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFNvdXJjZXM8Y21HZW5lcmF0b3JUYXJnZXQ+KAorY21Qcm9wIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0U291cmNlczxjbUdlbmVyYXRvclRhcmdldD4oCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsIGNtTWVzc2VuZ2VyKiAvKiBtZXNzZW5nZXIgKi8sCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIC8qIGNvbnRleHQgKi8pCiB7Ci0gIHJldHVybiB0Z3QtPkdldFNvdXJjZXNQcm9wZXJ0eSgpLmNfc3RyKCk7CisgIHJldHVybiAmdGd0LT5HZXRTb3VyY2VzUHJvcGVydHkoKTsKIH0KIAogdGVtcGxhdGUgPD4KQEAgLTIzNiwxNyArMjQwLDIzIEBACiAgIHJldHVybiBlZTsKIH0KIAotc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXMoCitzdHJ1Y3QgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzCit7CisgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IEVudHJpZXM7CisgIGJvb2wgSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGZhbHNlOworfTsKKworRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGhpc1RhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvclRhcmdldDo6VGFyZ2V0UHJvcGVydHlFbnRyeT4+IGNvbnN0JgogICAgIGluKQogewotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBvdXQ7Ci0gIG91dC5yZXNlcnZlKGluLnNpemUoKSk7CisgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyBvdXQ7CisgIG91dC5FbnRyaWVzLnJlc2VydmUoaW4uc2l6ZSgpKTsKICAgZm9yIChhdXRvJiBlbnRyeSA6IGluKSB7Ci0gICAgb3V0LmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkodGhpc1RhcmdldCwgY29uZmlnLCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhZ0NoZWNrZXIsICplbnRyeSkpOworICAgIG91dC5FbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkoCisgICAgICB0aGlzVGFyZ2V0LCBjb25maWcsIGxhbmcsIGRhZ0NoZWNrZXIsICplbnRyeSkpOwogICB9CiAgIHJldHVybiBvdXQ7CiB9CkBAIC0zMDgsNiArMzE4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+U291cmNlRW50cmllcywgdHJ1ZSk7CiAKICAgdGhpcy0+UG9saWN5TWFwID0gdC0+R2V0UG9saWN5TWFwKCk7CisKKyAgLy8gR2V0IGhhcmQtY29kZWQgbGlua2VyIGxhbmd1YWdlCisgIGlmICh0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KCJIQVNfQ1hYIikpIHsKKyAgICB0aGlzLT5MaW5rZXJMYW5ndWFnZSA9ICJDWFgiOworICB9IGVsc2UgeworICAgIHRoaXMtPkxpbmtlckxhbmd1YWdlID0gdGhpcy0+VGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIpOworICB9CiB9CiAKIGNtR2VuZXJhdG9yVGFyZ2V0Ojp+Y21HZW5lcmF0b3JUYXJnZXQoKSA9IGRlZmF1bHQ7CkBAIC0zNDYsMjkgKzM2MywyOSBAQAogCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0RXhwb3J0TmFtZSgpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIGV4cG9ydE5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRVhQT1JUX05BTUUiKTsKKyAgY21Qcm9wIGV4cG9ydE5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRVhQT1JUX05BTUUiKTsKIAotICBpZiAoZXhwb3J0TmFtZSAmJiAqZXhwb3J0TmFtZSkgewotICAgIGlmICghY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJc1ZhbGlkVGFyZ2V0TmFtZShleHBvcnROYW1lKSkgeworICBpZiAoY21Ob25lbXB0eShleHBvcnROYW1lKSkgeworICAgIGlmICghY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJc1ZhbGlkVGFyZ2V0TmFtZSgqZXhwb3J0TmFtZSkpIHsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgICAgZSA8PCAiRVhQT1JUX05BTUUgcHJvcGVydHkgXCIiIDw8IGV4cG9ydE5hbWUgPDwgIlwiIGZvciBcIiIKKyAgICAgIGUgPDwgIkVYUE9SVF9OQU1FIHByb3BlcnR5IFwiIiA8PCAqZXhwb3J0TmFtZSA8PCAiXCIgZm9yIFwiIgogICAgICAgICA8PCB0aGlzLT5HZXROYW1lKCkgPDwgIlwiOiBpcyBub3QgdmFsaWQuIjsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGUuc3RyKCkpOwogICAgICAgcmV0dXJuICIiOwogICAgIH0KLSAgICByZXR1cm4gZXhwb3J0TmFtZTsKKyAgICByZXR1cm4gKmV4cG9ydE5hbWU7CiAgIH0KICAgcmV0dXJuIHRoaXMtPkdldE5hbWUoKTsKIH0KIAotY29uc3QgY2hhciogY21HZW5lcmF0b3JUYXJnZXQ6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAorY21Qcm9wIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgaWYgKCFjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OlBhc3Nlc1doaXRlbGlzdCgKICAgICAgICAgdGhpcy0+R2V0VHlwZSgpLCBwcm9wLCB0aGlzLT5NYWtlZmlsZS0+R2V0TWVzc2VuZ2VyKCksCiAgICAgICAgIHRoaXMtPkdldEJhY2t0cmFjZSgpKSkgewogICAgIHJldHVybiBudWxscHRyOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiByZXN1bHQgPSBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFByb3BlcnR5KAorICBpZiAoY21Qcm9wIHJlc3VsdCA9IGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0UHJvcGVydHkoCiAgICAgICAgIHRoaXMsIHByb3AsIHRoaXMtPk1ha2VmaWxlLT5HZXRNZXNzZW5nZXIoKSwgdGhpcy0+R2V0QmFja3RyYWNlKCkpKSB7CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpAQCAtMzc4LDEzICszOTUsMTYgQEAKICAgcmV0dXJuIHRoaXMtPlRhcmdldC0+R2V0UHJvcGVydHkocHJvcCk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRTYWZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitzdGQ6OnN0cmluZyBjb25zdCYgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFNhZmVQcm9wZXJ0eSgKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3ApIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIHJldCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOwotICBpZiAoIXJldCkgewotICAgIHJldHVybiAiIjsKKyAgY21Qcm9wIHJldCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOworICBpZiAocmV0KSB7CisgICAgcmV0dXJuICpyZXQ7CiAgIH0KLSAgcmV0dXJuIHJldDsKKworICBzdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qgc19lbXB0eTsKKyAgcmV0dXJuIHNfZW1wdHk7CiB9CiAKIGNvbnN0IGNoYXIqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRPdXRwdXRUYXJnZXRUeXBlKApAQCAtNDczLDggKzQ5Myw4IEBACiAKICAgICBzdGQ6OnN0cmluZyBvdXROYW1lOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiBwcm9wcykgewotICAgICAgaWYgKGNvbnN0IGNoYXIqIG91dE5hbWVQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkocCkpIHsKLSAgICAgICAgb3V0TmFtZSA9IG91dE5hbWVQcm9wOworICAgICAgaWYgKGNtUHJvcCBvdXROYW1lUHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KHApKSB7CisgICAgICAgIG91dE5hbWUgPSAqb3V0TmFtZVByb3A7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KQEAgLTUzMCwxOCArNTUwLDQ2IEBACiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRGaWxlUG9zdGZpeChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewotICBjb25zdCBjaGFyKiBwb3N0Zml4ID0gbnVsbHB0cjsKKyAgY21Qcm9wIHBvc3RmaXggPSBudWxscHRyOworICBzdGQ6OnN0cmluZyBmcmFtZXdvcmtQb3N0Zml4OwogICBpZiAoIWNvbmZpZy5lbXB0eSgpKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uZmlnUHJvcCA9CiAgICAgICBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSwgIl9QT1NURklYIik7CiAgICAgcG9zdGZpeCA9IHRoaXMtPkdldFByb3BlcnR5KGNvbmZpZ1Byb3ApOwotICAgIC8vIE1hYyBhcHBsaWNhdGlvbiBidW5kbGVzIGFuZCBmcmFtZXdvcmtzIGhhdmUgbm8gcG9zdGZpeC4KKworICAgIC8vIE1hYyBhcHBsaWNhdGlvbiBidW5kbGVzIGFuZCBmcmFtZXdvcmtzIGhhdmUgbm8gcmVndWxhciBwb3N0Zml4IGxpa2UKKyAgICAvLyBsaWJyYXJpZXMgZG8uCiAgICAgaWYgKCF0aGlzLT5Jc0ltcG9ydGVkKCkgJiYgcG9zdGZpeCAmJgogICAgICAgICAodGhpcy0+SXNBcHBCdW5kbGVPbkFwcGxlKCkgfHwgdGhpcy0+SXNGcmFtZXdvcmtPbkFwcGxlKCkpKSB7CiAgICAgICBwb3N0Zml4ID0gbnVsbHB0cjsKICAgICB9CisKKyAgICAvLyBGcmFtZXdvcmtzIGNyZWF0ZWQgYnkgbXVsdGkgY29uZmlnIGdlbmVyYXRvcnMgY2FuIGhhdmUgYSBzcGVjaWFsCisgICAgLy8gZnJhbWV3b3JrIHBvc3RmaXguCisgICAgZnJhbWV3b3JrUG9zdGZpeCA9IEdldEZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeChjb25maWcpOworICAgIGlmICghZnJhbWV3b3JrUG9zdGZpeC5lbXB0eSgpKSB7CisgICAgICBwb3N0Zml4ID0gJmZyYW1ld29ya1Bvc3RmaXg7CisgICAgfQogICB9Ci0gIHJldHVybiBwb3N0Zml4ID8gcG9zdGZpeCA6IHN0ZDo6c3RyaW5nKCk7CisgIHJldHVybiBwb3N0Zml4ID8gKnBvc3RmaXggOiBzdGQ6OnN0cmluZygpOworfQorCitzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0RnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4KAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAoreworICBjbVByb3AgcG9zdGZpeCA9IG51bGxwdHI7CisgIGlmICghY29uZmlnLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnN0cmluZyBjb25maWdQcm9wID0gY21TdHJDYXQoIkZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7CisgICAgcG9zdGZpeCA9IHRoaXMtPkdldFByb3BlcnR5KGNvbmZpZ1Byb3ApOworCisgICAgaWYgKCF0aGlzLT5Jc0ltcG9ydGVkKCkgJiYgcG9zdGZpeCAmJgorICAgICAgICAodGhpcy0+SXNGcmFtZXdvcmtPbkFwcGxlKCkgJiYKKyAgICAgICAgICFHZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSkgeworICAgICAgcG9zdGZpeCA9IG51bGxwdHI7CisgICAgfQorICB9CisgIHJldHVybiBwb3N0Zml4ID8gKnBvc3RmaXggOiBzdGQ6OnN0cmluZygpOwogfQogCiBjb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0RmlsZVByZWZpeEludGVybmFsKApAQCAtNTc0LDcgKzYyMiw3IEBACiAgIH0KIAogICAvLyBDb21wdXRlIHByZWZpeCB2YWx1ZS4KLSAgY29uc3QgY2hhciogdGFyZ2V0UHJlZml4ID0KKyAgY21Qcm9wIHRhcmdldFByZWZpeCA9CiAgICAgKGlzSW1wb3J0ZWRMaWJyYXJ5QXJ0aWZhY3QgPyB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JUX1BSRUZJWCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLT5HZXRQcm9wZXJ0eSgiUFJFRklYIikpOwogCkBAIC01ODIsMTcgKzYzMCwxNyBAQAogICAgIGNvbnN0IGNoYXIqIHByZWZpeFZhciA9IHRoaXMtPlRhcmdldC0+R2V0UHJlZml4VmFyaWFibGVJbnRlcm5hbChhcnRpZmFjdCk7CiAgICAgaWYgKCFsYW5ndWFnZS5lbXB0eSgpICYmIHByZWZpeFZhciAmJiAqcHJlZml4VmFyKSB7CiAgICAgICBzdGQ6OnN0cmluZyBsYW5nUHJlZml4ID0gcHJlZml4VmFyICsgc3RkOjpzdHJpbmcoIl8iKSArIGxhbmd1YWdlOwotICAgICAgdGFyZ2V0UHJlZml4ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24obGFuZ1ByZWZpeCk7CisgICAgICB0YXJnZXRQcmVmaXggPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKGxhbmdQcmVmaXgpOwogICAgIH0KIAogICAgIC8vIGlmIHRoZXJlIGlzIG5vIHByZWZpeCBvbiB0aGUgdGFyZ2V0IG5vciBzcGVjaWZpYyBsYW5ndWFnZQogICAgIC8vIHVzZSB0aGUgY21ha2UgZGVmaW5pdGlvbi4KICAgICBpZiAoIXRhcmdldFByZWZpeCAmJiBwcmVmaXhWYXIpIHsKLSAgICAgIHRhcmdldFByZWZpeCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHByZWZpeFZhcik7CisgICAgICB0YXJnZXRQcmVmaXggPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKHByZWZpeFZhcik7CiAgICAgfQogICB9CiAKLSAgcmV0dXJuIHRhcmdldFByZWZpeDsKKyAgcmV0dXJuIHRhcmdldFByZWZpeCA/IHRhcmdldFByZWZpeC0+Y19zdHIoKSA6IG51bGxwdHI7CiB9CiBjb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0RmlsZVN1ZmZpeEludGVybmFsKAogICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLCBjbVN0YXRlRW51bXM6OkFydGlmYWN0VHlwZSBhcnRpZmFjdCwKQEAgLTYyNCw3ICs2NzIsNyBAQAogICB9CiAKICAgLy8gQ29tcHV0ZSBzdWZmaXggdmFsdWUuCi0gIGNvbnN0IGNoYXIqIHRhcmdldFN1ZmZpeCA9CisgIGNtUHJvcCB0YXJnZXRTdWZmaXggPQogICAgIChpc0ltcG9ydGVkTGlicmFyeUFydGlmYWN0ID8gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVF9TVUZGSVgiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy0+R2V0UHJvcGVydHkoIlNVRkZJWCIpKTsKIApAQCAtNjMyLDE3ICs2ODAsMTcgQEAKICAgICBjb25zdCBjaGFyKiBzdWZmaXhWYXIgPSB0aGlzLT5UYXJnZXQtPkdldFN1ZmZpeFZhcmlhYmxlSW50ZXJuYWwoYXJ0aWZhY3QpOwogICAgIGlmICghbGFuZ3VhZ2UuZW1wdHkoKSAmJiBzdWZmaXhWYXIgJiYgKnN1ZmZpeFZhcikgewogICAgICAgc3RkOjpzdHJpbmcgbGFuZ1N1ZmZpeCA9IHN1ZmZpeFZhciArIHN0ZDo6c3RyaW5nKCJfIikgKyBsYW5ndWFnZTsKLSAgICAgIHRhcmdldFN1ZmZpeCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGxhbmdTdWZmaXgpOworICAgICAgdGFyZ2V0U3VmZml4ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZihsYW5nU3VmZml4KTsKICAgICB9CiAKICAgICAvLyBpZiB0aGVyZSBpcyBubyBzdWZmaXggb24gdGhlIHRhcmdldCBub3Igc3BlY2lmaWMgbGFuZ3VhZ2UKICAgICAvLyB1c2UgdGhlIGNtYWtlIGRlZmluaXRpb24uCiAgICAgaWYgKCF0YXJnZXRTdWZmaXggJiYgc3VmZml4VmFyKSB7Ci0gICAgICB0YXJnZXRTdWZmaXggPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihzdWZmaXhWYXIpOworICAgICAgdGFyZ2V0U3VmZml4ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZihzdWZmaXhWYXIpOwogICAgIH0KICAgfQogCi0gIHJldHVybiB0YXJnZXRTdWZmaXg7CisgIHJldHVybiB0YXJnZXRTdWZmaXggPyB0YXJnZXRTdWZmaXgtPmNfc3RyKCkgOiBudWxscHRyOwogfQogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDbGVhclNvdXJjZXNDYWNoZSgpCkBAIC03MDUsOSArNzUzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZUltcG9ydGVkLCBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZ3VhZ2UpCiB7Ci0gIGlmIChjb25zdCBjaGFyKiBkaXJzID0KKyAgaWYgKGNtUHJvcCBkaXJzID0KICAgICAgICAgZGVwVGd0LT5HZXRQcm9wZXJ0eSgiSU5URVJGQUNFX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTIikpIHsKLSAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShkaXJzLCBsZywgY29uZmlnLCBoZWFkVGFyZ2V0LAorICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpkaXJzLCBsZywgY29uZmlnLCBoZWFkVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhZ0NoZWNrZXIsIGRlcFRndCwgbGFuZ3VhZ2UpLAogICAgICAgICAgICAgICAgICByZXN1bHQpOwogICB9CkBAIC03MTUsOSArNzYzLDggQEAKICAgICByZXR1cm47CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogZGlycyA9Ci0gICAgICAgIGRlcFRndC0+R2V0UHJvcGVydHkoIklOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTIikpIHsKLSAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShkaXJzLCBsZywgY29uZmlnLCBoZWFkVGFyZ2V0LAorICBpZiAoY21Qcm9wIGRpcnMgPSBkZXBUZ3QtPkdldFByb3BlcnR5KCJJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyIpKSB7CisgICAgY21FeHBhbmRMaXN0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKmRpcnMsIGxnLCBjb25maWcsIGhlYWRUYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFnQ2hlY2tlciwgZGVwVGd0LCBsYW5ndWFnZSksCiAgICAgICAgICAgICAgICAgIHJlc3VsdCk7CiAgIH0KQEAgLTc1NSw3ICs4MDIsOCBAQAogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb21wdXRlT2JqZWN0TWFwcGluZygpCiB7Ci0gIGF1dG8gY29uc3QmIGNvbmZpZ3MgPSB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOworICBhdXRvIGNvbnN0JiBjb25maWdzID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gY29uZmlnU2V0KGNvbmZpZ3MuYmVnaW4oKSwgY29uZmlncy5lbmQoKSk7CiAgIGlmIChjb25maWdTZXQgPT0gdGhpcy0+VmlzaXRlZENvbmZpZ3NGb3JPYmplY3RzKSB7CiAgICAgcmV0dXJuOwpAQCAtNzY3LDE3ICs4MTUsMTcgQEAKICAgfQogfQogCi1jb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0RmVhdHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CitjbVByb3AgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgaWYgKCFjb25maWcuZW1wdHkoKSkgewogICAgIHN0ZDo6c3RyaW5nIGZlYXR1cmVDb25maWcgPQogICAgICAgY21TdHJDYXQoZmVhdHVyZSwgJ18nLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkoZmVhdHVyZUNvbmZpZykpIHsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkoZmVhdHVyZUNvbmZpZykpIHsKICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAgIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkoZmVhdHVyZSkpIHsKKyAgaWYgKGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KGZlYXR1cmUpKSB7CiAgICAgcmV0dXJuIHZhbHVlOwogICB9CiAgIHJldHVybiB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0RmVhdHVyZShmZWF0dXJlLCBjb25maWcpOwpAQCAtODA1LDEwICs4NTMsOSBAQAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNJUE9FbmFibGVkKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIGZlYXR1cmUgPSAiSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTiI7Ci0gIGNvbnN0IGJvb2wgcmVzdWx0ID0gY21Jc09uKHRoaXMtPkdldEZlYXR1cmUoZmVhdHVyZSwgY29uZmlnKSk7CisgIGNtUHJvcCBmZWF0dXJlID0gdGhpcy0+R2V0RmVhdHVyZSgiSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTiIsIGNvbmZpZyk7CiAKLSAgaWYgKCFyZXN1bHQpIHsKKyAgaWYgKCFjbUlzT24oZmVhdHVyZSkpIHsKICAgICAvLyAnSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTicgaXMgb2ZmLCBubyBuZWVkIHRvIGNoZWNrIHBvbGljaWVzCiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC05MDEsNiArOTQ4LDYxIEBACiAgIHJldHVybiBpdCAhPSB0aGlzLT5FeHBsaWNpdE9iamVjdE5hbWUuZW5kKCk7CiB9CiAKK0JUczxzdGQ6OnN0cmluZz4gY29uc3QqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKSBjb25zdAoreworICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSwgJy0nLCBsYW5nKTsKKyAgYXV0byBsYW5nU3RhbmRhcmRJdGVyID0gdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcC5maW5kKGtleSk7CisgIGlmIChsYW5nU3RhbmRhcmRJdGVyICE9IHRoaXMtPkxhbmd1YWdlU3RhbmRhcmRNYXAuZW5kKCkpIHsKKyAgICByZXR1cm4gJmxhbmdTdGFuZGFyZEl0ZXItPnNlY29uZDsKKyAgfQorCisgIHJldHVybiB0aGlzLT5UYXJnZXQtPkdldExhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0eSgKKyAgICBjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOworfQorCitjbVByb3AgY21HZW5lcmF0b3JUYXJnZXQ6OkdldExhbmd1YWdlU3RhbmRhcmQoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykgY29uc3QKK3sKKyAgQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogbGFuZ3VhZ2VTdGFuZGFyZCA9CisgICAgdGhpcy0+R2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KGxhbmcsIGNvbmZpZyk7CisKKyAgaWYgKGxhbmd1YWdlU3RhbmRhcmQpIHsKKyAgICByZXR1cm4gJihsYW5ndWFnZVN0YW5kYXJkLT5WYWx1ZSk7CisgIH0KKworICByZXR1cm4gbnVsbHB0cjsKK30KKworY21Qcm9wIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQcm9wZXJ0eVdpdGhQYWlyZWRMYW5ndWFnZVN1cHBvcnQoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBjb25zdCBjaGFyKiBzdWZmaXgpIGNvbnN0Cit7CisgIGNtUHJvcCBwcm9wZXJ0eVZhbHVlID0gdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCBzdWZmaXgpKTsKKyAgaWYgKHByb3BlcnR5VmFsdWUgPT0gbnVsbHB0cikgeworICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCB1c2UgdGhlIHZhbHVlIHNldCBieSBhbm90aGVyIGxhbmd1YWdlLgorICAgIGlmIChsYW5nID09ICJPQkpDIikgeworICAgICAgcHJvcGVydHlWYWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5V2l0aFBhaXJlZExhbmd1YWdlU3VwcG9ydCgiQyIsIHN1ZmZpeCk7CisgICAgfSBlbHNlIGlmIChsYW5nID09ICJPQkpDWFgiIHx8IGxhbmcgPT0gIkNVREEiKSB7CisgICAgICBwcm9wZXJ0eVZhbHVlID0KKyAgICAgICAgdGhpcy0+R2V0UHJvcGVydHlXaXRoUGFpcmVkTGFuZ3VhZ2VTdXBwb3J0KCJDWFgiLCBzdWZmaXgpOworICAgIH0KKyAgfQorICByZXR1cm4gcHJvcGVydHlWYWx1ZTsKK30KKworY21Qcm9wIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMYW5ndWFnZUV4dGVuc2lvbnMoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5HZXRQcm9wZXJ0eVdpdGhQYWlyZWRMYW5ndWFnZVN1cHBvcnQobGFuZywgIl9FWFRFTlNJT05TIik7Cit9CisKK2Jvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkdldExhbmd1YWdlU3RhbmRhcmRSZXF1aXJlZCgKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0Cit7CisgIGNtUHJvcCBwID0KKyAgICB0aGlzLT5HZXRQcm9wZXJ0eVdpdGhQYWlyZWRMYW5ndWFnZVN1cHBvcnQobGFuZywgIl9TVEFOREFSRF9SRVFVSVJFRCIpOworICByZXR1cm4gY21Jc09uKHApOworfQorCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRNb2R1bGVEZWZpbml0aW9uU291cmNlcygKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mIGRhdGEsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CkBAIC05MzEsNTEgKzEwMzMsMTIgQEAKICAgSU1QTEVNRU5UX1ZJU0lUKFNvdXJjZUtpbmRFeHRlcm5hbE9iamVjdCk7CiB9CiAKLXZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEV4cGVjdGVkUmVzeEhlYWRlcnMoc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBoZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAotewotICBLaW5kZWRTb3VyY2VzIGNvbnN0JiBraW5kZWQgPSB0aGlzLT5HZXRLaW5kZWRTb3VyY2VzKGNvbmZpZyk7Ci0gIGhlYWRlcnMgPSBraW5kZWQuRXhwZWN0ZWRSZXN4SGVhZGVyczsKLX0KLQotdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0UmVzeFNvdXJjZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAotewotICBJTVBMRU1FTlRfVklTSVQoU291cmNlS2luZFJlc3gpOwotfQotCi12b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRBcHBNYW5pZmVzdChzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Ci17Ci0gIElNUExFTUVOVF9WSVNJVChTb3VyY2VLaW5kQXBwTWFuaWZlc3QpOwotfQotCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRNYW5pZmVzdHMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgSU1QTEVNRU5UX1ZJU0lUKFNvdXJjZUtpbmRNYW5pZmVzdCk7CiB9CiAKLXZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldENlcnRpZmljYXRlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAotewotICBJTVBMRU1FTlRfVklTSVQoU291cmNlS2luZENlcnRpZmljYXRlKTsKLX0KLQotdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0RXhwZWN0ZWRYYW1sSGVhZGVycyhzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGhlYWRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Ci17Ci0gIEtpbmRlZFNvdXJjZXMgY29uc3QmIGtpbmRlZCA9IHRoaXMtPkdldEtpbmRlZFNvdXJjZXMoY29uZmlnKTsKLSAgaGVhZGVycyA9IGtpbmRlZC5FeHBlY3RlZFhhbWxIZWFkZXJzOwotfQotCi12b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRFeHBlY3RlZFhhbWxTb3VyY2VzKHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgc3JjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKLXsKLSAgS2luZGVkU291cmNlcyBjb25zdCYga2luZGVkID0gdGhpcy0+R2V0S2luZGVkU291cmNlcyhjb25maWcpOwotICBzcmNzID0ga2luZGVkLkV4cGVjdGVkWGFtbFNvdXJjZXM7Ci19Ci0KIHN0ZDo6c2V0PGNtTGlua0l0ZW0+IGNvbnN0JiBjbUdlbmVyYXRvclRhcmdldDo6R2V0VXRpbGl0eUl0ZW1zKCkgY29uc3QKIHsKICAgaWYgKCF0aGlzLT5VdGlsaXR5SXRlbXNEb25lKSB7CkBAIC05OTUsMTIgKzEwNTgsNiBAQAogICByZXR1cm4gdGhpcy0+VXRpbGl0eUl0ZW1zOwogfQogCi12b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRYYW1sU291cmNlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Ci17Ci0gIElNUExFTUVOVF9WSVNJVChTb3VyY2VLaW5kWGFtbCk7Ci19Ci0KIGNvbnN0IHN0ZDo6c3RyaW5nJiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb24oCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CkBAIC0xMDUyLDcgKzExMDksOCBAQAogICB9CiAKICAgLy8gTm93IGhhbmRsZSB0aGUgZGVwcmVjYXRlZCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gbG9jYXRpb24uCi0gIGxvY2F0aW9uID0gdGhpcy0+R2V0RGlyZWN0b3J5KCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IG5vQ29uZmlnOworICBsb2NhdGlvbiA9IHRoaXMtPkdldERpcmVjdG9yeShub0NvbmZpZyk7CiAgIGNvbnN0IGNoYXIqIGNmZ2lkID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0NGR19JTlRESVIiKTsKICAgaWYgKGNmZ2lkICYmIHN0cmNtcChjZmdpZCwgIi4iKSAhPSAwKSB7CiAgICAgbG9jYXRpb24gKz0gIi8iOwpAQCAtMTEzNCw4ICsxMTkyLDggQEAKICAgICBib29sJiBtYXliZUludGVyZmFjZVByb3AgPSBpLT5zZWNvbmQ7CiAKICAgICAvLyBJZiB0aGlzIHRhcmdldCBpdHNlbGYgaGFzIGEgbm9uLWVtcHR5IHByb3BlcnR5IHZhbHVlLCB3ZSBhcmUgZG9uZS4KLSAgICBjb25zdCBjaGFyKiBwID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7Ci0gICAgbWF5YmVJbnRlcmZhY2VQcm9wID0gcCAmJiAqcDsKKyAgICBjbVByb3AgcCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOworICAgIG1heWJlSW50ZXJmYWNlUHJvcCA9IGNtTm9uZW1wdHkocCk7CiAKICAgICAvLyBPdGhlcndpc2UsIHJlY3Vyc2UgdG8gaW50ZXJmYWNlIGRlcGVuZGVuY2llcy4KICAgICBpZiAoIW1heWJlSW50ZXJmYWNlUHJvcCkgewpAQCAtMTE5MSw3ICsxMjQ5LDYgQEAKICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpDWUNMSUNfUkVGRVJFTkNFOgogICAgICAgLy8gTm8gZXJyb3IuIFdlIGp1c3Qgc2tpcCBjeWNsaWMgcmVmZXJlbmNlcy4KLSAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpBTFJFQURZX1NFRU46CiAgICAgICAvLyBObyBlcnJvci4gV2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhpcyB0cmFuc2l0aXZlIHByb3BlcnR5LgogICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEyMDIsMTMgKzEyNTksMTYgQEAKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQgPQogICAgIGNvbnRleHQtPkhlYWRUYXJnZXQgPyBjb250ZXh0LT5IZWFkVGFyZ2V0IDogdGhpczsKIAotICBpZiAoY29uc3QgY2hhciogcCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CisgIGlmIChjbVByb3AgcCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CiAgICAgcmVzdWx0ID0gY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZTo6RXZhbHVhdGVEZXBlbmRlbnRFeHByZXNzaW9uKAotICAgICAgcCwgY29udGV4dC0+TEcsIGNvbnRleHQsIGhlYWRUYXJnZXQsICZkYWdDaGVja2VyLCB0aGlzKTsKKyAgICAgICpwLCBjb250ZXh0LT5MRywgY29udGV4dCwgaGVhZFRhcmdldCwgJmRhZ0NoZWNrZXIsIHRoaXMpOwogICB9CiAKICAgaWYgKGNtTGlua0ludGVyZmFjZUxpYnJhcmllcyBjb25zdCogaWZhY2UgPSB0aGlzLT5HZXRMaW5rSW50ZXJmYWNlTGlicmFyaWVzKAogICAgICAgICBjb250ZXh0LT5Db25maWcsIGhlYWRUYXJnZXQsIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSkgeworICAgIGNvbnRleHQtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24gPQorICAgICAgY29udGV4dC0+SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiB8fAorICAgICAgaWZhY2UtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgICAgZm9yIChjbUxpbmtJdGVtIGNvbnN0JiBsaWIgOiBpZmFjZS0+TGlicmFyaWVzKSB7CiAgICAgICAvLyBCcm9rZW4gY29kZSBjYW4gaGF2ZSBhIHRhcmdldCBpbiBpdHMgb3duIGxpbmsgaW50ZXJmYWNlLgogICAgICAgLy8gRG9uJ3QgZm9sbG93IHN1Y2ggbGluayBpbnRlcmZhY2UgZW50cmllcyBzbyBhcyBub3QgdG8gY3JlYXRlIGEKQEAgLTEyNDcsMTUgKzEzMDcsOTkgQEAKIH0KIAogbmFtZXNwYWNlIHsKK3N0ZDo6c3RyaW5nIEFkZFN3aWZ0SW50ZXJmYWNlSW5jbHVkZURpcmVjdG9yaWVzKAorICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogcm9vdCwgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogY29udGV4dCkKK3sKKyAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBkYWd7IHRhcmdldC0+R2V0QmFja3RyYWNlKCksIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTd2lmdF9NT0RVTEVfRElSRUNUT1JZIiwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgfTsKKyAgc3dpdGNoIChkYWcuQ2hlY2soKSkgeworICAgIGNhc2UgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6U0VMRl9SRUZFUkVOQ0U6CisgICAgICBkYWcuUmVwb3J0RXJyb3IobnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAiJDxUQVJHRVRfUFJPUEVSVFk6IiArIHRhcmdldC0+R2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIsU3dpZnRfTU9EVUxFX0RJUkVDVE9SWT4iKTsKKyAgICAgIENNX0ZBTExUSFJPVUdIOworICAgIGNhc2UgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6Q1lDTElDX1JFRkVSRU5DRToKKyAgICAgIC8vIE5vIGVycm9yLiBXZSBqdXN0IHNraXAgY3ljbGljIHJlZmVyZW5jZXMuCisgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpBTFJFQURZX1NFRU46CisgICAgICAvLyBObyBlcnJvci4gV2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhpcyB0cmFuc2l0aXZlIHByb3BlcnR5LgorICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6REFHOgorICAgICAgYnJlYWs7CisgIH0KKworICBzdGQ6OnN0cmluZyBkaXJlY3RvcmllczsKKyAgaWYgKGNvbnN0IGF1dG8qIGludGVyZmFjZSA9CisgICAgICAgIHRhcmdldC0+R2V0TGlua0ludGVyZmFjZUxpYnJhcmllcyhjb25maWcsIHJvb3QsIHRydWUpKSB7CisgICAgZm9yIChjb25zdCBjbUxpbmtJdGVtJiBsaWJyYXJ5IDogaW50ZXJmYWNlLT5MaWJyYXJpZXMpIHsKKyAgICAgIGlmIChjb25zdCBjbUdlbmVyYXRvclRhcmdldCogZGVwZW5kZW5jeSA9IGxpYnJhcnkuVGFyZ2V0KSB7CisgICAgICAgIGlmIChjbTo6Y29udGFpbnMoZGVwZW5kZW5jeS0+R2V0QWxsQ29uZmlnQ29tcGlsZUxhbmd1YWdlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJTd2lmdCIpKSB7CisgICAgICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPQorICAgICAgICAgICAgZGVwZW5kZW5jeS0+R2V0U2FmZVByb3BlcnR5KCJTd2lmdF9NT0RVTEVfRElSRUNUT1JZIik7CisgICAgICAgICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHZhbHVlID0KKyAgICAgICAgICAgICAgZGVwZW5kZW5jeS0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICghZGlyZWN0b3JpZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgZGlyZWN0b3JpZXMgKz0gIjsiOworICAgICAgICAgIH0KKyAgICAgICAgICBkaXJlY3RvcmllcyArPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gZGlyZWN0b3JpZXM7Cit9CisKK3ZvaWQgQWRkU3dpZnRJbXBsaWNpdEluY2x1ZGVEaXJlY3RvcmllcygKKyAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzJiBlbnRyaWVzKQoreworICBpZiAoY29uc3QgYXV0byogbGlicmFyaWVzID0gdGFyZ2V0LT5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKSkgeworICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgZGFneyB0YXJnZXQtPkdldEJhY2t0cmFjZSgpLCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTd2lmdF9NT0RVTEVfRElSRUNUT1JZIiwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciB9OworCisgICAgZm9yIChjb25zdCBjbUxpbmtJbXBsSXRlbSYgbGlicmFyeSA6IGxpYnJhcmllcy0+TGlicmFyaWVzKSB7CisgICAgICBpZiAoY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIGRlcGVuZGVuY3kgPSBsaWJyYXJ5LlRhcmdldCkgeworICAgICAgICBpZiAoZGVwZW5kZW5jeS0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY206OmNvbnRhaW5zKGRlcGVuZGVuY3ktPkdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU3dpZnQiKSkgeworICAgICAgICAgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkgZW50cnl7IGxpYnJhcnksIGxpYnJhcnkuQmFja3RyYWNlIH07CisKKyAgICAgICAgICBpZiAoY21Qcm9wIHZhbCA9IGRlcGVuZGVuY3ktPkdldFByb3BlcnR5KCJTd2lmdF9NT0RVTEVfRElSRUNUT1JZIikpIHsKKyAgICAgICAgICAgIGVudHJ5LlZhbHVlcy5lbXBsYWNlX2JhY2soKnZhbCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LlZhbHVlcy5lbXBsYWNlX2JhY2soCisgICAgICAgICAgICAgIGRlcGVuZGVuY3ktPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgY21FeHBhbmRMaXN0KEFkZFN3aWZ0SW50ZXJmYWNlSW5jbHVkZURpcmVjdG9yaWVzKHRhcmdldCwgZGVwZW5kZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLCAmZGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuVmFsdWVzKTsKKworICAgICAgICAgIGVudHJpZXMuRW50cmllcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGVudHJ5KSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKwogdm9pZCBBZGRJbnRlcmZhY2VFbnRyaWVzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4mIGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzJiBlbnRyaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkgPSB0cnVlKQogewogICBpZiAoY21MaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMgY29uc3QqIGltcGwgPQogICAgICAgICBoZWFkVGFyZ2V0LT5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKSkgeworICAgIGVudHJpZXMuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGltcGwtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CiAgICAgICBpZiAobGliLlRhcmdldCkgewogICAgICAgICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGVlKGxpYiwgbGliLkJhY2t0cmFjZSk7CkBAIC0xMjY5LDcgKzE0MTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBwcm9wLCAmY29udGV4dCwgZGFnQ2hlY2tlciwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpLAogICAgICAgICAgICAgICAgICAgICAgZWUuVmFsdWVzKTsKICAgICAgICAgZWUuQ29udGV4dERlcGVuZGVudCA9IGNvbnRleHQuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbjsKLSAgICAgICAgZW50cmllcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGVlKSk7CisgICAgICAgIGVudHJpZXMuRW50cmllcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGVlKSk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0xMjc4LDEwICsxNDIyLDExIEBACiB2b2lkIEFkZE9iamVjdEVudHJpZXMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+JiBlbnRyaWVzKQorICAgICAgICAgICAgICAgICAgICAgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyYgZW50cmllcykKIHsKICAgaWYgKGNtTGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzIGNvbnN0KiBpbXBsID0KICAgICAgICAgaGVhZFRhcmdldC0+R2V0TGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzKGNvbmZpZykpIHsKKyAgICBlbnRyaWVzLkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24gPSBpbXBsLT5IYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uOwogICAgIGZvciAoY21MaW5rSW1wbEl0ZW0gY29uc3QmIGxpYiA6IGltcGwtPkxpYnJhcmllcykgewogICAgICAgaWYgKGxpYi5UYXJnZXQgJiYKICAgICAgICAgICBsaWIuVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgewpAQCAtMTMwMCwyMyArMTQ0NSwyMyBAQAogICAgICAgICBpZiAoY2dlLT5HZXRIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKICAgICAgICAgICBlZS5Db250ZXh0RGVwZW5kZW50ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBlbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZWUpKTsKKyAgICAgICAgZW50cmllcy5FbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZWUpKTsKICAgICAgIH0KICAgICB9CiAgIH0KIH0KIAogYm9vbCBwcm9jZXNzU291cmNlcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0LAotICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiYgZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzJiBlbnRyaWVzLAogICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+JiBzcmNzLAogICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+JiB1bmlxdWVTcmNzLAogICAgICAgICAgICAgICAgICAgICBib29sIGRlYnVnU291cmNlcykKIHsKICAgY21NYWtlZmlsZSogbWYgPSB0Z3QtPlRhcmdldC0+R2V0TWFrZWZpbGUoKTsKIAotICBib29sIGNvbnRleHREZXBlbmRlbnQgPSBmYWxzZTsKKyAgYm9vbCBjb250ZXh0RGVwZW5kZW50ID0gZW50cmllcy5IYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uOwogCi0gIGZvciAoRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeSYgZW50cnkgOiBlbnRyaWVzKSB7CisgIGZvciAoRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeSYgZW50cnkgOiBlbnRyaWVzLkVudHJpZXMpIHsKICAgICBpZiAoZW50cnkuQ29udGV4dERlcGVuZGVudCkgewogICAgICAgY29udGV4dERlcGVuZGVudCA9IHRydWU7CiAgICAgfQpAQCAtMTQwMSwxNCArMTU0NiwxMSBAQAogICB9CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlYnVnUHJvcGVydGllczsKLSAgY29uc3QgY2hhciogZGVidWdQcm9wID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiKTsKLSAgaWYgKGRlYnVnUHJvcCkgewotICAgIGNtRXhwYW5kTGlzdChkZWJ1Z1Byb3AsIGRlYnVnUHJvcGVydGllcyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdQcm9wZXJ0aWVzKTsKIAogICBib29sIGRlYnVnU291cmNlcyA9Ci0gICAgIXRoaXMtPkRlYnVnU291cmNlc0RvbmUgJiYgY21Db250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJTT1VSQ0VTIik7CisgICAgIXRoaXMtPkRlYnVnU291cmNlc0RvbmUgJiYgY206OmNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIlNPVVJDRVMiKTsKIAogICBpZiAodGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRDb25maWd1cmVEb25lQ01QMDAyNigpKSB7CiAgICAgdGhpcy0+RGVidWdTb3VyY2VzRG9uZSA9IHRydWU7CkBAIC0xNDE3LDE2ICsxNTU5LDE1IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgZGFnQ2hlY2tlcih0aGlzLCAiU09VUkNFUyIsIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsKIAotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyaWVzID0KLSAgICBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcyh0aGlzLCBjb25maWcsIHN0ZDo6c3RyaW5nKCksICZkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlNvdXJjZUVudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgc3RkOjpzdHJpbmcoKSwgJmRhZ0NoZWNrZXIsIHRoaXMtPlNvdXJjZUVudHJpZXMpOwogCiAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gdW5pcXVlU3JjczsKICAgYm9vbCBjb250ZXh0RGVwZW5kZW50RGlyZWN0U291cmNlcyA9CiAgICAgcHJvY2Vzc1NvdXJjZXModGhpcywgZW50cmllcywgZmlsZXMsIHVuaXF1ZVNyY3MsIGRlYnVnU291cmNlcyk7CiAKICAgLy8gQ29sbGVjdCBJTlRFUkZBQ0VfU09VUkNFUyBvZiBhbGwgZGlyZWN0IGxpbmstZGVwZW5kZW5jaWVzLgotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBsaW5rSW50ZXJmYWNlU291cmNlc0VudHJpZXM7CisgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyBsaW5rSW50ZXJmYWNlU291cmNlc0VudHJpZXM7CiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX1NPVVJDRVMiLCBzdGQ6OnN0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBsaW5rSW50ZXJmYWNlU291cmNlc0VudHJpZXMpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OnNpemVfdHlwZSBudW1GaWxlc0JlZm9yZSA9IGZpbGVzLnNpemUoKTsKQEAgLTE0MzcsNyArMTU3OCw3IEBACiAgIGJvb2wgY29udGV4dERlcGVuZGVudE9iamVjdHMgPSBmYWxzZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjpzaXplX3R5cGUgbnVtRmlsZXNCZWZvcmUyID0gZmlsZXMuc2l6ZSgpOwogICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKLSAgICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBsaW5rT2JqZWN0c0VudHJpZXM7CisgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIGxpbmtPYmplY3RzRW50cmllczsKICAgICBBZGRPYmplY3RFbnRyaWVzKHRoaXMsIGNvbmZpZywgJmRhZ0NoZWNrZXIsIGxpbmtPYmplY3RzRW50cmllcyk7CiAgICAgY29udGV4dERlcGVuZGVudE9iamVjdHMgPSBwcm9jZXNzU291cmNlcyh0aGlzLCBsaW5rT2JqZWN0c0VudHJpZXMsIGZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3JjcywgZGVidWdTb3VyY2VzKTsKQEAgLTE1NzMsMTAgKzE3MTQsMTQgQEAKICAgICBzdGQ6OnN0cmluZyBleHQgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc2YtPkdldEV4dGVuc2lvbigpKTsKICAgICBpZiAoc2YtPkdldEN1c3RvbUNvbW1hbmQoKSkgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRDdXN0b21Db21tYW5kOworICAgICAgLy8gWFhYKGNsYW5nLXRpZHkpOiBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTY1CisgICAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgfSBlbHNlIGlmICh0aGlzLT5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKICAgICAgIGtpbmQgPSBTb3VyY2VLaW5kRXh0cmE7CiAgICAgfSBlbHNlIGlmICh0aGlzLT5Jc1NvdXJjZUZpbGVQYXJ0T2ZVbml0eUJhdGNoKHNmLT5SZXNvbHZlRnVsbFBhdGgoKSkpIHsKICAgICAgIGtpbmQgPSBTb3VyY2VLaW5kVW5pdHlCYXRjaGVkOworICAgICAgLy8gWFhYKGNsYW5nLXRpZHkpOiBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTY1CisgICAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgfSBlbHNlIGlmIChzZi0+R2V0UHJvcGVydHlBc0Jvb2woIkhFQURFUl9GSUxFX09OTFkiKSkgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRIZWFkZXI7CiAgICAgfSBlbHNlIGlmIChzZi0+R2V0UHJvcGVydHlBc0Jvb2woIkVYVEVSTkFMX09CSkVDVCIpKSB7CkBAIC0xNTk1LDE0ICsxNzQwLDYgQEAKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV4dCA9PSAicmVzeCIpIHsKICAgICAgIGtpbmQgPSBTb3VyY2VLaW5kUmVzeDsKLSAgICAgIC8vIEJ1aWxkIGFuZCBzYXZlIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIC5oIGZpbGUKLSAgICAgIC8vIFRoaXMgcmVsYXRpb25zaGlwIHdpbGwgYmUgdXNlZCBsYXRlciB3aGVuIGJ1aWxkaW5nIHRoZSBwcm9qZWN0IGZpbGVzLgotICAgICAgLy8gQm90aCBuYW1lcyB3b3VsZCBoYXZlIGJlZW4gYXV0byBnZW5lcmF0ZWQgZnJvbSBWaXN1YWwgU3R1ZGlvCi0gICAgICAvLyB3aGVyZSB0aGUgdXNlciBzdXBwbGllZCB0aGUgZmlsZSBuYW1lIGFuZCBWaXN1YWwgU3R1ZGlvCi0gICAgICAvLyBhcHBlbmRlZCB0aGUgc3VmZml4LgotICAgICAgc3RkOjpzdHJpbmcgcmVzeCA9IHNmLT5SZXNvbHZlRnVsbFBhdGgoKTsKLSAgICAgIHN0ZDo6c3RyaW5nIGhGaWxlTmFtZSA9IHJlc3guc3Vic3RyKDAsIHJlc3guZmluZF9sYXN0X29mKCcuJykpICsgIi5oIjsKLSAgICAgIGZpbGVzLkV4cGVjdGVkUmVzeEhlYWRlcnMuaW5zZXJ0KGhGaWxlTmFtZSk7CiAgICAgfSBlbHNlIGlmIChleHQgPT0gImFwcHhtYW5pZmVzdCIpIHsKICAgICAgIGtpbmQgPSBTb3VyY2VLaW5kQXBwTWFuaWZlc3Q7CiAgICAgfSBlbHNlIGlmIChleHQgPT0gIm1hbmlmZXN0IikgewpAQCAtMTYxMSwxNiArMTc0OCw2IEBACiAgICAgICBraW5kID0gU291cmNlS2luZENlcnRpZmljYXRlOwogICAgIH0gZWxzZSBpZiAoZXh0ID09ICJ4YW1sIikgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRYYW1sOwotICAgICAgLy8gQnVpbGQgYW5kIHNhdmUgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgLmggYW5kIC5jcHAgZmlsZQotICAgICAgLy8gVGhpcyByZWxhdGlvbnNoaXAgd2lsbCBiZSB1c2VkIGxhdGVyIHdoZW4gYnVpbGRpbmcgdGhlIHByb2plY3QgZmlsZXMuCi0gICAgICAvLyBCb3RoIG5hbWVzIHdvdWxkIGhhdmUgYmVlbiBhdXRvIGdlbmVyYXRlZCBmcm9tIFZpc3VhbCBTdHVkaW8KLSAgICAgIC8vIHdoZXJlIHRoZSB1c2VyIHN1cHBsaWVkIHRoZSBmaWxlIG5hbWUgYW5kIFZpc3VhbCBTdHVkaW8KLSAgICAgIC8vIGFwcGVuZGVkIHRoZSBzdWZmaXguCi0gICAgICBzdGQ6OnN0cmluZyB4YW1sID0gc2YtPlJlc29sdmVGdWxsUGF0aCgpOwotICAgICAgc3RkOjpzdHJpbmcgaEZpbGVOYW1lID0geGFtbCArICIuaCI7Ci0gICAgICBzdGQ6OnN0cmluZyBjcHBGaWxlTmFtZSA9IHhhbWwgKyAiLmNwcCI7Ci0gICAgICBmaWxlcy5FeHBlY3RlZFhhbWxIZWFkZXJzLmluc2VydChoRmlsZU5hbWUpOwotICAgICAgZmlsZXMuRXhwZWN0ZWRYYW1sU291cmNlcy5pbnNlcnQoY3BwRmlsZU5hbWUpOwogICAgIH0gZWxzZSBpZiAoaGVhZGVyX3JlZ2V4LmZpbmQoc2YtPlJlc29sdmVGdWxsUGF0aCgpKSkgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRIZWFkZXI7CiAgICAgfSBlbHNlIHsKQEAgLTE2NTUsOCArMTc4Miw4IEBACiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVBbGxDb25maWdTb3VyY2VzKCkgY29uc3QKIHsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3MgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgc3RkOjptYXA8Y21Tb3VyY2VGaWxlIGNvbnN0Kiwgc2l6ZV90PiBpbmRleDsKIApAQCAtMTY3OCw2ICsxODA1LDE4IEBACiAgIH0KIH0KIAorc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZT4KK2NtR2VuZXJhdG9yVGFyZ2V0OjpHZXRBbGxDb25maWdTb3VyY2VzKFNvdXJjZUtpbmQga2luZCkgY29uc3QKK3sKKyAgc3RkOjp2ZWN0b3I8QWxsQ29uZmlnU291cmNlPiByZXN1bHQ7CisgIGZvciAoQWxsQ29uZmlnU291cmNlIGNvbnN0JiBzb3VyY2UgOiB0aGlzLT5HZXRBbGxDb25maWdTb3VyY2VzKCkpIHsKKyAgICBpZiAoc291cmNlLktpbmQgPT0ga2luZCkgeworICAgICAgcmVzdWx0LnB1c2hfYmFjayhzb3VyY2UpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCiBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gY21HZW5lcmF0b3JUYXJnZXQ6OkdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKSBjb25zdAogewogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VzOwpAQCAtMTcwMywxNCArMTg0MiwxNCBAQAogICAvLyBDaGVjayBmb3IgYSBwZXItY29uZmlndXJhdGlvbiBvdXRwdXQgZGlyZWN0b3J5IHRhcmdldCBwcm9wZXJ0eS4KICAgc3RkOjpzdHJpbmcgY29uZmlnVXBwZXIgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgc3RkOjpzdHJpbmcgY29uZmlnUHJvcCA9IGNtU3RyQ2F0KCJDT01QSUxFX1BEQl9OQU1FXyIsIGNvbmZpZ1VwcGVyKTsKLSAgY29uc3QgY2hhciogY29uZmlnX25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShjb25maWdQcm9wKTsKLSAgaWYgKGNvbmZpZ19uYW1lICYmICpjb25maWdfbmFtZSkgewotICAgIHJldHVybiBwcmVmaXggKyBjb25maWdfbmFtZSArICIucGRiIjsKKyAgY21Qcm9wIGNvbmZpZ19uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcCk7CisgIGlmIChjbU5vbmVtcHR5KGNvbmZpZ19uYW1lKSkgeworICAgIHJldHVybiBwcmVmaXggKyAqY29uZmlnX25hbWUgKyAiLnBkYiI7CiAgIH0KIAotICBjb25zdCBjaGFyKiBuYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX05BTUUiKTsKLSAgaWYgKG5hbWUgJiYgKm5hbWUpIHsKLSAgICByZXR1cm4gcHJlZml4ICsgbmFtZSArICIucGRiIjsKKyAgY21Qcm9wIG5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIpOworICBpZiAoY21Ob25lbXB0eShuYW1lKSkgeworICAgIHJldHVybiBwcmVmaXggKyAqbmFtZSArICIucGRiIjsKICAgfQogCiAgIHJldHVybiAiIjsKQEAgLTE4OTIsMTAgKzIwMzEsOSBAQAogICAgIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBjb25zdCBjaGFyKiBpbnN0YWxsX25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU5TVEFMTF9OQU1FX0RJUiIpOworICAgIGNtUHJvcCBpbnN0YWxsX25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU5TVEFMTF9OQU1FX0RJUiIpOwogICAgIGJvb2wgdXNlX2luc3RhbGxfbmFtZSA9IHRoaXMtPk1hY09TWFVzZUluc3RhbGxOYW1lRGlyKCk7Ci0gICAgaWYgKGluc3RhbGxfbmFtZSAmJiB1c2VfaW5zdGFsbF9uYW1lICYmCi0gICAgICAgIHN0ZDo6c3RyaW5nKGluc3RhbGxfbmFtZSkgPT0gIkBycGF0aCIpIHsKKyAgICBpZiAoaW5zdGFsbF9uYW1lICYmIHVzZV9pbnN0YWxsX25hbWUgJiYgKmluc3RhbGxfbmFtZSA9PSAiQHJwYXRoIikgewogICAgICAgaW5zdGFsbF9uYW1lX2lzX3JwYXRoID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGluc3RhbGxfbmFtZSAmJiB1c2VfaW5zdGFsbF9uYW1lKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTA4LDcgKzIwNDYsNyBAQAogICAgIGlmIChjbUdlbmVyYXRvclRhcmdldDo6SW1wb3J0SW5mbyBjb25zdCogaW5mbyA9CiAgICAgICAgICAgdGhpcy0+R2V0SW1wb3J0SW5mbyhjb25maWcpKSB7CiAgICAgICBpZiAoIWluZm8tPk5vU09OYW1lICYmICFpbmZvLT5TT05hbWUuZW1wdHkoKSkgewotICAgICAgICBpZiAoaW5mby0+U09OYW1lLmZpbmQoIkBycGF0aC8iKSA9PSAwKSB7CisgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoaW5mby0+U09OYW1lLCAiQHJwYXRoLyIpKSB7CiAgICAgICAgICAgaW5zdGFsbF9uYW1lX2lzX3JwYXRoID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKQEAgLTE5NTEsNyArMjA4OSw3IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgY29uc3QgY2hhciogbWFjb3N4X3JwYXRoX3N0ciA9IHRoaXMtPkdldFByb3BlcnR5KCJNQUNPU1hfUlBBVEgiKTsKKyAgY21Qcm9wIG1hY29zeF9ycGF0aF9zdHIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTUFDT1NYX1JQQVRIIik7CiAgIGlmIChtYWNvc3hfcnBhdGhfc3RyKSB7CiAgICAgcmV0dXJuIHRoaXMtPkdldFByb3BlcnR5QXNCb29sKCJNQUNPU1hfUlBBVEgiKTsKICAgfQpAQCAtMTk2OCwxMCArMjEwNiwxMCBAQAogCiBib29sIGNtR2VuZXJhdG9yVGFyZ2V0OjpNYWNPU1hVc2VJbnN0YWxsTmFtZURpcigpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIGJ1aWxkX3dpdGhfaW5zdGFsbF9uYW1lID0KKyAgY21Qcm9wIGJ1aWxkX3dpdGhfaW5zdGFsbF9uYW1lID0KICAgICB0aGlzLT5HZXRQcm9wZXJ0eSgiQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSIik7CiAgIGlmIChidWlsZF93aXRoX2luc3RhbGxfbmFtZSkgewotICAgIHJldHVybiBjbUlzT24oYnVpbGRfd2l0aF9pbnN0YWxsX25hbWUpOworICAgIHJldHVybiBjbUlzT24oKmJ1aWxkX3dpdGhfaW5zdGFsbF9uYW1lKTsKICAgfQogCiAgIGNtUG9saWNpZXM6OlBvbGljeVN0YXR1cyBjbXAwMDY4ID0gdGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDA2OCgpOwpAQCAtMjAyNSw3ICsyMTYzLDcgQEAKICAgICAgICAgcmV0dXJuIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShpbmZvLT5Mb2NhdGlvbik7CiAgICAgICB9CiAgICAgICAvLyBVc2UgdGhlIHNvbmFtZSBnaXZlbiBpZiBhbnkuCi0gICAgICBpZiAoaW5mby0+U09OYW1lLmZpbmQoIkBycGF0aC8iKSA9PSAwKSB7CisgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGluZm8tPlNPTmFtZSwgIkBycGF0aC8iKSkgewogICAgICAgICByZXR1cm4gaW5mby0+U09OYW1lLnN1YnN0cig2KTsKICAgICAgIH0KICAgICAgIHJldHVybiBpbmZvLT5TT05hbWU7CkBAIC0yMDUzLDExICsyMTkxLDggQEAKIHsKICAgc3RkOjpzdHJpbmcgZnBhdGggPSBjbVN0ckNhdCgKICAgICB0aGlzLT5HZXRGdWxsTmFtZShjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KSwgJy4nKTsKLSAgY29uc3QgY2hhciogZXh0ID0gdGhpcy0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKLSAgaWYgKCFleHQpIHsKLSAgICBleHQgPSAiYXBwIjsKLSAgfQotICBmcGF0aCArPSBleHQ7CisgIGNtUHJvcCBleHQgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpOworICBmcGF0aCArPSAoZXh0ID8gKmV4dCA6ICJhcHAiKTsKICAgaWYgKHNob3VsZEFkZENvbnRlbnRMZXZlbChsZXZlbCkgJiYKICAgICAgICF0aGlzLT5NYWtlZmlsZS0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKSkgewogICAgIGZwYXRoICs9ICIvQ29udGVudHMiOwpAQCAtMjA3OSw4ICsyMjE0LDEwIEBACiB7CiAgIHN0ZDo6c3RyaW5nIGZwYXRoID0gY21TdHJDYXQoCiAgICAgdGhpcy0+R2V0T3V0cHV0TmFtZShjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KSwgJy4nKTsKLSAgY29uc3QgY2hhciogZXh0ID0gdGhpcy0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKLSAgaWYgKCFleHQpIHsKKyAgc3RkOjpzdHJpbmcgZXh0OworICBpZiAoY21Qcm9wIHAgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpKSB7CisgICAgZXh0ID0gKnA7CisgIH0gZWxzZSB7CiAgICAgaWYgKHRoaXMtPklzWENUZXN0T25BcHBsZSgpKSB7CiAgICAgICBleHQgPSAieGN0ZXN0IjsKICAgICB9IGVsc2UgewpAQCAtMjEwMywxMSArMjI0MCw4IEBACiB7CiAgIHN0ZDo6c3RyaW5nIGZwYXRoID0gY21TdHJDYXQoCiAgICAgdGhpcy0+R2V0T3V0cHV0TmFtZShjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KSwgJy4nKTsKLSAgY29uc3QgY2hhciogZXh0ID0gdGhpcy0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKLSAgaWYgKCFleHQpIHsKLSAgICBleHQgPSAiZnJhbWV3b3JrIjsKLSAgfQotICBmcGF0aCArPSBleHQ7CisgIGNtUHJvcCBleHQgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpOworICBmcGF0aCArPSAoZXh0ID8gKmV4dCA6ICJmcmFtZXdvcmsiKTsKICAgaWYgKHNob3VsZEFkZEZ1bGxMZXZlbChsZXZlbCkgJiYKICAgICAgICF0aGlzLT5NYWtlZmlsZS0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKSkgewogICAgIGZwYXRoICs9ICIvVmVyc2lvbnMvIjsKQEAgLTIxNTgsMTEgKzIyOTIsMTEgQEAKIHsKICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QTEFURk9STV9IQVNfSU5TVEFMTE5BTUUiKSkgewogICAgIHN0ZDo6c3RyaW5nIGRpcjsKLSAgICBjb25zdCBjaGFyKiBpbnN0YWxsX25hbWVfZGlyID0gdGhpcy0+R2V0UHJvcGVydHkoIklOU1RBTExfTkFNRV9ESVIiKTsKKyAgICBjbVByb3AgaW5zdGFsbF9uYW1lX2RpciA9IHRoaXMtPkdldFByb3BlcnR5KCJJTlNUQUxMX05BTUVfRElSIik7CiAKICAgICBpZiAodGhpcy0+Q2FuR2VuZXJhdGVJbnN0YWxsTmFtZURpcihJTlNUQUxMX05BTUVfRk9SX0lOU1RBTEwpKSB7Ci0gICAgICBpZiAoaW5zdGFsbF9uYW1lX2RpciAmJiAqaW5zdGFsbF9uYW1lX2RpcikgewotICAgICAgICBkaXIgPSBpbnN0YWxsX25hbWVfZGlyOworICAgICAgaWYgKGNtTm9uZW1wdHkoaW5zdGFsbF9uYW1lX2RpcikpIHsKKyAgICAgICAgZGlyID0gKmluc3RhbGxfbmFtZV9kaXI7CiAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UmVwbGFjZUluc3RhbGxQcmVmaXgoZGlyLCBpbnN0YWxsUHJlZml4KTsKICAgICAgICAgZGlyID0KICAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKGRpciwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CkBAIC0yMjA3LDggKzIzNDEsOCBAQAogICBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgIHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZIHx8CiAgICAgICB0aGlzLT5Jc0V4ZWN1dGFibGVXaXRoRXhwb3J0cygpKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGN1c3RvbV9leHBvcnRfbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KCJERUZJTkVfU1lNQk9MIikpIHsKLSAgICAgIHRoaXMtPkV4cG9ydE1hY3JvID0gY3VzdG9tX2V4cG9ydF9uYW1lOworICAgIGlmIChjbVByb3AgY3VzdG9tX2V4cG9ydF9uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoIkRFRklORV9TWU1CT0wiKSkgeworICAgICAgdGhpcy0+RXhwb3J0TWFjcm8gPSAqY3VzdG9tX2V4cG9ydF9uYW1lOwogICAgIH0gZWxzZSB7CiAgICAgICBzdGQ6OnN0cmluZyBpbiA9IGNtU3RyQ2F0KHRoaXMtPkdldE5hbWUoKSwgIl9FWFBPUlRTIik7CiAgICAgICB0aGlzLT5FeHBvcnRNYWNybyA9IGNtU3lzdGVtVG9vbHM6Ok1ha2VDaWRlbnRpZmllcihpbik7CkBAIC0yMjI0LDExICsyMzU4LDEyIEBACiAgIGNtVGFyZ2V0Q29sbGVjdExpbmtMYW5ndWFnZXMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiYgbGFuZ3VhZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkLCBib29sIHNlY29uZFBhc3MpCiAgICAgOiBDb25maWcoc3RkOjptb3ZlKGNvbmZpZykpCiAgICAgLCBMYW5ndWFnZXMobGFuZ3VhZ2VzKQogICAgICwgSGVhZFRhcmdldChoZWFkKQogICAgICwgVGFyZ2V0KHRhcmdldCkKKyAgICAsIFNlY29uZFBhc3Moc2Vjb25kUGFzcykKICAgewogICAgIHRoaXMtPlZpc2l0ZWQuaW5zZXJ0KHRhcmdldCk7CiAgIH0KQEAgLTIyNzAsMTEgKzI0MDUsMTQgQEAKICAgICBpZiAoIXRoaXMtPlZpc2l0ZWQuaW5zZXJ0KGl0ZW0uVGFyZ2V0KS5zZWNvbmQpIHsKICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBpZmFjZSA9Ci0gICAgICBpdGVtLlRhcmdldC0+R2V0TGlua0ludGVyZmFjZSh0aGlzLT5Db25maWcsIHRoaXMtPkhlYWRUYXJnZXQpOworICAgIGNtTGlua0ludGVyZmFjZSBjb25zdCogaWZhY2UgPSBpdGVtLlRhcmdldC0+R2V0TGlua0ludGVyZmFjZSgKKyAgICAgIHRoaXMtPkNvbmZpZywgdGhpcy0+SGVhZFRhcmdldCwgdGhpcy0+U2Vjb25kUGFzcyk7CiAgICAgaWYgKCFpZmFjZSkgewogICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoaWZhY2UtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbikgeworICAgICAgdGhpcy0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKKyAgICB9CiAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSA6IGlmYWNlLT5MYW5ndWFnZXMpIHsKICAgICAgIHRoaXMtPkxhbmd1YWdlcy5pbnNlcnQobGFuZ3VhZ2UpOwpAQCAtMjI4NSwxMiArMjQyMywxOSBAQAogICAgIH0KICAgfQogCisgIGJvb2wgR2V0SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKCkKKyAgeworICAgIHJldHVybiBIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb247CisgIH0KKwogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgQ29uZmlnOwogICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+JiBMYW5ndWFnZXM7CiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBIZWFkVGFyZ2V0OwogICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogVGFyZ2V0OwogICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IFZpc2l0ZWQ7CisgIGJvb2wgU2Vjb25kUGFzczsKKyAgYm9vbCBIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24gPSBmYWxzZTsKIH07CiAKIGNtR2VuZXJhdG9yVGFyZ2V0OjpMaW5rQ2xvc3VyZSBjb25zdCogY21HZW5lcmF0b3JUYXJnZXQ6OkdldExpbmtDbG9zdXJlKApAQCAtMjMyMSw3ICsyNDY2LDcgQEAKICAgewogICAgIHRoaXMtPkdHID0gdGhpcy0+VGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKICAgfQotICB2b2lkIENvbnNpZGVyKGNvbnN0IGNoYXIqIGxhbmcpCisgIHZvaWQgQ29uc2lkZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpCiAgIHsKICAgICBpbnQgcHJlZmVyZW5jZSA9IHRoaXMtPkdHLT5HZXRMaW5rZXJQcmVmZXJlbmNlKGxhbmcpOwogICAgIGlmIChwcmVmZXJlbmNlID4gdGhpcy0+UHJlZmVyZW5jZSkgewpAQCAtMjM1NCw0MCArMjQ5OSwzNiBAQAogICB9CiB9OwogCi12b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb21wdXRlTGlua0Nsb3N1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rQ2xvc3VyZSYgbGMpIGNvbnN0Citib29sIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb21wdXRlTGlua0Nsb3N1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rQ2xvc3VyZSYgbGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWNvbmRQYXNzKSBjb25zdAogewogICAvLyBHZXQgbGFuZ3VhZ2VzIGJ1aWx0IGluIHRoaXMgdGFyZ2V0LgogICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+IGxhbmd1YWdlczsKLSAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIGltcGwgPSB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnKTsKKyAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIGltcGwgPQorICAgIHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbihjb25maWcsIHNlY29uZFBhc3MpOwogICBhc3NlcnQoaW1wbCk7Ci0gIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxpIDogaW1wbC0+TGFuZ3VhZ2VzKSB7Ci0gICAgbGFuZ3VhZ2VzLmluc2VydChsaSk7Ci0gIH0KKyAgbGFuZ3VhZ2VzLmluc2VydChpbXBsLT5MYW5ndWFnZXMuY2JlZ2luKCksIGltcGwtPkxhbmd1YWdlcy5jZW5kKCkpOwogCiAgIC8vIEFkZCBpbnRlcmZhY2UgbGFuZ3VhZ2VzIGZyb20gbGlua2VkIHRhcmdldHMuCi0gIGNtVGFyZ2V0Q29sbGVjdExpbmtMYW5ndWFnZXMgY2xsKHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2VzLCB0aGlzKTsKKyAgLy8gY21UYXJnZXRDb2xsZWN0TGlua0xhbmd1YWdlcyBjbGwodGhpcywgY29uZmlnLCBsYW5ndWFnZXMsIHRoaXMsCisgIC8vIHNlY29uZFBhc3MpOworICBjbVRhcmdldENvbGxlY3RMaW5rTGFuZ3VhZ2VzIGNsbCh0aGlzLCBjb25maWcsIGxhbmd1YWdlcywgdGhpcywgc2Vjb25kUGFzcyk7CiAgIGZvciAoY21MaW5rSW1wbEl0ZW0gY29uc3QmIGxpYiA6IGltcGwtPkxpYnJhcmllcykgewogICAgIGNsbC5WaXNpdChsaWIpOwogICB9CiAKICAgLy8gU3RvcmUgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiBsYW5ndWFnZXMuCi0gIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcgOiBsYW5ndWFnZXMpIHsKLSAgICBsYy5MYW5ndWFnZXMucHVzaF9iYWNrKGxhbmcpOwotICB9CisgIGNtOjphcHBlbmQobGMuTGFuZ3VhZ2VzLCBsYW5ndWFnZXMpOwogCiAgIC8vIENob29zZSB0aGUgbGFuZ3VhZ2Ugd2hvc2UgbGlua2VyIHNob3VsZCBiZSB1c2VkLgotICBpZiAodGhpcy0+R2V0UHJvcGVydHkoIkhBU19DWFgiKSkgewotICAgIGxjLkxpbmtlckxhbmd1YWdlID0gIkNYWCI7Ci0gIH0gZWxzZSBpZiAoY29uc3QgY2hhciogbGlua2VyTGFuZyA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LRVJfTEFOR1VBR0UiKSkgewotICAgIGxjLkxpbmtlckxhbmd1YWdlID0gbGlua2VyTGFuZzsKLSAgfSBlbHNlIHsKKyAgaWYgKHNlY29uZFBhc3MgfHwgbGMuTGlua2VyTGFuZ3VhZ2UuZW1wdHkoKSkgewogICAgIC8vIEZpbmQgdGhlIGxhbmd1YWdlIHdpdGggdGhlIGhpZ2hlc3QgcHJlZmVyZW5jZSB2YWx1ZS4KICAgICBjbVRhcmdldFNlbGVjdExpbmtlciB0c2wodGhpcyk7CiAKICAgICAvLyBGaXJzdCBzZWxlY3QgZnJvbSB0aGUgbGFuZ3VhZ2VzIGNvbXBpbGVkIGRpcmVjdGx5IGluIHRoaXMgdGFyZ2V0LgogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGwgOiBpbXBsLT5MYW5ndWFnZXMpIHsKLSAgICAgIHRzbC5Db25zaWRlcihsLmNfc3RyKCkpOworICAgICAgdHNsLkNvbnNpZGVyKGwpOwogICAgIH0KIAogICAgIC8vIE5vdyBjb25zaWRlciBsYW5ndWFnZXMgdGhhdCBwcm9wYWdhdGUgZnJvbSBsaW5rZWQgdGFyZ2V0cy4KQEAgLTIzOTUsMTIgKzI1MzYsNTAgQEAKICAgICAgIHN0ZDo6c3RyaW5nIHByb3BhZ2F0ZXMgPQogICAgICAgICAiQ01BS0VfIiArIGxhbmcgKyAiX0xJTktFUl9QUkVGRVJFTkNFX1BST1BBR0FURVMiOwogICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKHByb3BhZ2F0ZXMpKSB7Ci0gICAgICAgIHRzbC5Db25zaWRlcihsYW5nLmNfc3RyKCkpOworICAgICAgICB0c2wuQ29uc2lkZXIobGFuZyk7CiAgICAgICB9CiAgICAgfQogCiAgICAgbGMuTGlua2VyTGFuZ3VhZ2UgPSB0c2wuQ2hvb3NlKCk7CiAgIH0KKworICByZXR1cm4gaW1wbC0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uIHx8CisgICAgY2xsLkdldEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbigpOworfQorCit2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb21wdXRlTGlua0Nsb3N1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rQ2xvc3VyZSYgbGMpIGNvbnN0Cit7CisgIGJvb2wgc2Vjb25kUGFzcyA9IGZhbHNlOworCisgIHsKKyAgICBMaW5rQ2xvc3VyZSBsaW5rQ2xvc3VyZTsKKyAgICBsaW5rQ2xvc3VyZS5MaW5rZXJMYW5ndWFnZSA9IHRoaXMtPkxpbmtlckxhbmd1YWdlOworCisgICAgLy8gR2V0IGxhbmd1YWdlcyBidWlsdCBpbiB0aGlzIHRhcmdldC4KKyAgICBzZWNvbmRQYXNzID0gdGhpcy0+Q29tcHV0ZUxpbmtDbG9zdXJlKGNvbmZpZywgbGlua0Nsb3N1cmUsIGZhbHNlKTsKKyAgICB0aGlzLT5MaW5rZXJMYW5ndWFnZSA9IGxpbmtDbG9zdXJlLkxpbmtlckxhbmd1YWdlOworICAgIGlmICghc2Vjb25kUGFzcykgeworICAgICAgbGMgPSBzdGQ6Om1vdmUobGlua0Nsb3N1cmUpOworICAgIH0KKyAgfQorCisgIGlmIChzZWNvbmRQYXNzKSB7CisgICAgTGlua0Nsb3N1cmUgbGlua0Nsb3N1cmU7CisKKyAgICB0aGlzLT5Db21wdXRlTGlua0Nsb3N1cmUoY29uZmlnLCBsaW5rQ2xvc3VyZSwgc2Vjb25kUGFzcyk7CisgICAgbGMgPSBzdGQ6Om1vdmUobGlua0Nsb3N1cmUpOworCisgICAgLy8gbGlua2VyIGxhbmd1YWdlIG11c3Qgbm90IGJlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIHBhc3NlcworICAgIGlmICh0aGlzLT5MaW5rZXJMYW5ndWFnZSAhPSBsYy5MaW5rZXJMYW5ndWFnZSkgeworICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgICBlIDw8ICJFdmFsdWF0aW9uIG9mICQ8TElOS19MQU5HVUFHRTouLi4+IG9yICQ8TElOS19MQU5EX0FORF9JRDouLi4+ICIKKyAgICAgICAgICAgImNoYW5nZXNcbnRoZSBsaW5rZXIgbGFuZ3VhZ2UgZm9yIHRhcmdldCBcIiIKKyAgICAgICAgPDwgdGhpcy0+R2V0TmFtZSgpIDw8ICJcIiAoZnJvbSAnIiA8PCB0aGlzLT5MaW5rZXJMYW5ndWFnZSA8PCAiJyB0byAnIgorICAgICAgICA8PCBsYy5MaW5rZXJMYW5ndWFnZSA8PCAiJykgd2hpY2ggaXMgaW52YWxpZC4iOworICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoZS5zdHIoKSk7CisgICAgfQorICB9CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEZ1bGxOYW1lQ29tcG9uZW50cygKQEAgLTI0NTAsOSArMjYyOSw5IEBACiAgICAgcmV0dXJuIGVmZmVjdGl2ZUZvbGRlcjsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHRhcmdldEZvbGRlciA9IHRoaXMtPkdldFByb3BlcnR5KCJGT0xERVIiKTsKKyAgY21Qcm9wIHRhcmdldEZvbGRlciA9IHRoaXMtPkdldFByb3BlcnR5KCJGT0xERVIiKTsKICAgaWYgKHRhcmdldEZvbGRlcikgewotICAgIGVmZmVjdGl2ZUZvbGRlciArPSB0YXJnZXRGb2xkZXI7CisgICAgZWZmZWN0aXZlRm9sZGVyICs9ICp0YXJnZXRGb2xkZXI7CiAgIH0KIAogICByZXR1cm4gZWZmZWN0aXZlRm9sZGVyOwpAQCAtMjYzNywxNCArMjgxNiwxNCBAQAogICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgIHN0ZDo6c2V0PGNtU291cmNlRmlsZSo+IGVtaXR0ZWQ7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKCk7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiBjb25maWdzKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBzb3VyY2VzOwogICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBjKTsKICAgICAgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IHNvdXJjZXMpIHsKICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiB0Z3RzID0KICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldEZpbGVuYW1lVGFyZ2V0RGVwZW5kcyhzZik7Ci0gICAgICAgIGlmIChjbUNvbnRhaW5zKHRndHMsIHRoaXMtPkdlbmVyYXRvclRhcmdldCkpIHsKKyAgICAgICAgaWYgKGNtOjpjb250YWlucyh0Z3RzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQpKSB7CiAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICAgICAgZSA8PCAiRXZhbHVhdGlvbiBvdXRwdXQgZmlsZVxuICBcIiIgPDwgc2YtPlJlc29sdmVGdWxsUGF0aCgpCiAgICAgICAgICAgICA8PCAiXCJcbmRlcGVuZHMgb24gdGhlIHNvdXJjZXMgb2YgYSB0YXJnZXQgaXQgaXMgdXNlZCBpbi4gIFRoaXMgIgpAQCAtMjY3Nyw4ICsyODU2LDggQEAKICAgICB0aGlzLT5DdXJyZW50RW50cnkgPSAmdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5Tb3VyY2VEZXBlbmRzW3NmXTsKIAogICAgIC8vIFF1ZXVlIGRlcGVuZGVuY2llcyBhZGRlZCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyLgotICAgIGlmIChjb25zdCBjaGFyKiBhZGRpdGlvbmFsRGVwcyA9IHNmLT5HZXRQcm9wZXJ0eSgiT0JKRUNUX0RFUEVORFMiKSkgewotICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9iakRlcHMgPSBjbUV4cGFuZGVkTGlzdChhZGRpdGlvbmFsRGVwcyk7CisgICAgaWYgKGNtUHJvcCBhZGRpdGlvbmFsRGVwcyA9IHNmLT5HZXRQcm9wZXJ0eSgiT0JKRUNUX0RFUEVORFMiKSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9iakRlcHMgPSBjbUV4cGFuZGVkTGlzdCgqYWRkaXRpb25hbERlcHMpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyYgb2JqRGVwIDogb2JqRGVwcykgewogICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgob2JqRGVwKSkgewogICAgICAgICAgIG9iakRlcCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgob2JqRGVwKTsKQEAgLTI4NDgsNyArMzAyNyw3IEBACiAgIC8vIFF1ZXVlIHRoZSBjdXN0b20gY29tbWFuZCBkZXBlbmRlbmNpZXMuCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBlbWl0dGVkOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKCk7CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZiA6IGNvbmZpZ3MpIHsKICAgICB0aGlzLT5Gb2xsb3dDb21tYW5kRGVwZW5kcyhjYywgY29uZiwgZW1pdHRlZCk7CiAgIH0KQEAgLTI5MDksNyArMzA4OCw3IEBACiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRBcHBsZUFyY2hzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJjaFZlYykgY29uc3QKIHsKLSAgY29uc3QgY2hhciogYXJjaHMgPSBudWxscHRyOworICBjbVByb3AgYXJjaHMgPSBudWxscHRyOwogICBpZiAoIWNvbmZpZy5lbXB0eSgpKSB7CiAgICAgc3RkOjpzdHJpbmcgZGVmVmFyTmFtZSA9CiAgICAgICBjbVN0ckNhdCgiT1NYX0FSQ0hJVEVDVFVSRVNfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZykpOwpAQCAtMjkxOSw3ICszMDk4LDEzOSBAQAogICAgIGFyY2hzID0gdGhpcy0+R2V0UHJvcGVydHkoIk9TWF9BUkNISVRFQ1RVUkVTIik7CiAgIH0KICAgaWYgKGFyY2hzKSB7Ci0gICAgY21FeHBhbmRMaXN0KHN0ZDo6c3RyaW5nKGFyY2hzKSwgYXJjaFZlYyk7CisgICAgY21FeHBhbmRMaXN0KCphcmNocywgYXJjaFZlYyk7CisgIH0KK30KKwordm9pZCBjbUdlbmVyYXRvclRhcmdldDo6QWRkQ1VEQUFyY2hpdGVjdHVyZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncykgY29uc3QKK3sKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5ID0gdGhpcy0+R2V0U2FmZVByb3BlcnR5KCJDVURBX0FSQ0hJVEVDVFVSRVMiKTsKKworICBpZiAocHJvcGVydHkuZW1wdHkoKSkgeworICAgIHN3aXRjaCAodGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDEwNCgpKSB7CisgICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46CisgICAgICAgIGlmICghdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SXNJblRyeUNvbXBpbGUoKSkgeworICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCisgICAgICAgICAgICBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAxMDQpICsKKyAgICAgICAgICAgICAgIlxuQ1VEQV9BUkNISVRFQ1RVUkVTIGlzIGVtcHR5IGZvciB0YXJnZXQgXCIiICsgdGhpcy0+R2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgIlwiLiIpOworICAgICAgICB9CisgICAgICAgIENNX0ZBTExUSFJPVUdIOworICAgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgIkNVREFfQVJDSElURUNUVVJFUyBpcyBlbXB0eSBmb3IgdGFyZ2V0IFwiIiArIHRoaXMtPkdldE5hbWUoKSArCisgICAgICAgICAgICAiXCIuIik7CisgICAgfQorICB9CisKKyAgLy8gSWYgQ1VEQV9BUkNISVRFQ1RVUkVTIGlzIGZhbHNlIHdlIGRvbid0IGFkZCBhbnkgYXJjaGl0ZWN0dXJlcy4KKyAgaWYgKGNtSXNPZmYocHJvcGVydHkpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgc3RydWN0IEN1ZGFBcmNoaXRlY3R1cmUKKyAgeworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgYm9vbCByZWFseyB0cnVlIH07CisgICAgYm9vbCB2aXJ0dWFsX3sgdHJ1ZSB9OworICB9OworICBzdGQ6OnZlY3RvcjxDdWRhQXJjaGl0ZWN0dXJlPiBhcmNoaXRlY3R1cmVzOworCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9uczsKKyAgICBjbUV4cGFuZExpc3QocHJvcGVydHksIG9wdGlvbnMpOworCisgICAgZm9yIChzdGQ6OnN0cmluZyYgb3B0aW9uIDogb3B0aW9ucykgeworICAgICAgQ3VkYUFyY2hpdGVjdHVyZSBhcmNoaXRlY3R1cmU7CisKKyAgICAgIC8vIEFyY2hpdGVjdHVyZSBuYW1lIGlzIHVwIHRvIHRoZSBmaXJzdCBzcGVjaWZpZXIuCisgICAgICBzdGQ6OnNpemVfdCBwb3MgPSBvcHRpb24uZmluZF9maXJzdF9vZignLScpOworICAgICAgYXJjaGl0ZWN0dXJlLm5hbWUgPSBvcHRpb24uc3Vic3RyKDAsIHBvcyk7CisKKyAgICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgY206OnN0cmluZ192aWV3IHNwZWNpZmllcnsgb3B0aW9uLmNfc3RyKCkgKyBwb3MgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ubGVuZ3RoKCkgLSBwb3MgLSAxIH07CisKKyAgICAgICAgaWYgKHNwZWNpZmllciA9PSAicmVhbCIpIHsKKyAgICAgICAgICBhcmNoaXRlY3R1cmUucmVhbCA9IHRydWU7CisgICAgICAgICAgYXJjaGl0ZWN0dXJlLnZpcnR1YWxfID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lmaWVyID09ICJ2aXJ0dWFsIikgeworICAgICAgICAgIGFyY2hpdGVjdHVyZS5yZWFsID0gZmFsc2U7CisgICAgICAgICAgYXJjaGl0ZWN0dXJlLnZpcnR1YWxfID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgIlVrbm93biBDVURBIGFyY2hpdGVjdHVyZSBzcGVjaWZpZXIgXCIiICsgc3RkOjpzdHJpbmcoc3BlY2lmaWVyKSArCisgICAgICAgICAgICAgICJcIi4iKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBhcmNoaXRlY3R1cmVzLmVtcGxhY2VfYmFjayhhcmNoaXRlY3R1cmUpOworICAgIH0KKyAgfQorCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21waWxlciA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DVURBX0NPTVBJTEVSX0lEIik7CisKKyAgaWYgKGNvbXBpbGVyID09ICJOVklESUEiKSB7CisgICAgZm9yIChDdWRhQXJjaGl0ZWN0dXJlJiBhcmNoaXRlY3R1cmUgOiBhcmNoaXRlY3R1cmVzKSB7CisgICAgICBmbGFncyArPQorICAgICAgICAiIC0tZ2VuZXJhdGUtY29kZT1hcmNoPWNvbXB1dGVfIiArIGFyY2hpdGVjdHVyZS5uYW1lICsgIixjb2RlPVsiOworCisgICAgICBpZiAoYXJjaGl0ZWN0dXJlLnZpcnR1YWxfKSB7CisgICAgICAgIGZsYWdzICs9ICJjb21wdXRlXyIgKyBhcmNoaXRlY3R1cmUubmFtZTsKKworICAgICAgICBpZiAoYXJjaGl0ZWN0dXJlLnJlYWwpIHsKKyAgICAgICAgICBmbGFncyArPSAiLCI7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGFyY2hpdGVjdHVyZS5yZWFsKSB7CisgICAgICAgIGZsYWdzICs9ICJzbV8iICsgYXJjaGl0ZWN0dXJlLm5hbWU7CisgICAgICB9CisKKyAgICAgIGZsYWdzICs9ICJdIjsKKyAgICB9CisgIH0gZWxzZSBpZiAoY29tcGlsZXIgPT0gIkNsYW5nIikgeworICAgIGZvciAoQ3VkYUFyY2hpdGVjdHVyZSYgYXJjaGl0ZWN0dXJlIDogYXJjaGl0ZWN0dXJlcykgeworICAgICAgZmxhZ3MgKz0gIiAtLWN1ZGEtZ3B1LWFyY2g9c21fIiArIGFyY2hpdGVjdHVyZS5uYW1lOworCisgICAgICBpZiAoIWFyY2hpdGVjdHVyZS5yZWFsKSB7CisgICAgICAgIE1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgTWVzc2FnZVR5cGU6OldBUk5JTkcsCisgICAgICAgICAgIkNsYW5nIGRvZXNuJ3Qgc3VwcG9ydCBkaXNhYmxpbmcgQ1VEQSByZWFsIGNvZGUgZ2VuZXJhdGlvbi4iKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFhcmNoaXRlY3R1cmUudmlydHVhbF8pIHsKKyAgICAgICAgZmxhZ3MgKz0gIiAtLW5vLWN1ZGEtaW5jbHVkZS1wdHg9c21fIiArIGFyY2hpdGVjdHVyZS5uYW1lOworICAgICAgfQorICAgIH0KKyAgfQorfQorCit2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpBZGRDVURBVG9vbGtpdEZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncykgY29uc3QKK3sKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBpbGVyID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0NVREFfQ09NUElMRVJfSUQiKTsKKworICBpZiAoY29tcGlsZXIgPT0gIkNsYW5nIikgeworICAgIC8vIFBhc3MgQ1VEQSB0b29sa2l0IGV4cGxpY2l0bHkgdG8gQ2xhbmcuCisgICAgLy8gQ2xhbmcncyBzZWFyY2hpbmcgZm9yIHRoZSBzeXN0ZW0gQ1VEQSB0b29sa2l0IGlzbid0IHZlcnkgZ29vZCBhbmQgaXQncworICAgIC8vIGV4cGVjdGVkIHRoZSB1c2VyIHdpbGwgZXhwbGljaXRseSBwYXNzIHRoZSB0b29sa2l0IHBhdGguCisgICAgLy8gVGhpcyBhbHNvIGF2b2lkcyBDbGFuZyBoYXZpbmcgdG8gc2VhcmNoIGZvciB0aGUgdG9vbGtpdCBvbiBldmVyeQorICAgIC8vIGludm9jYXRpb24uCisgICAgc3RkOjpzdHJpbmcgdG9vbGtpdFJvb3QgPQorICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DVURBX0NPTVBJTEVSX0xJQlJBUllfUk9PVCIpOworCisgICAgaWYgKCF0b29sa2l0Um9vdC5lbXB0eSgpKSB7CisgICAgICBmbGFncyArPSAiIC0tY3VkYS1wYXRoPSIgKworICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHRvb2xraXRSb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgfQogICB9CiB9CiAKQEAgLTI5NjcsMTMgKzMyNzgsMTMgQEAKIH0KIAogbmFtZXNwYWNlIHsKLXZvaWQgcHJvY2Vzc0luY2x1ZGVEaXJlY3RvcmllcygKLSAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCwKLSAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4mIGVudHJpZXMsCi0gIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIGluY2x1ZGVzLAotICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+JiB1bmlxdWVJbmNsdWRlcywgYm9vbCBkZWJ1Z0luY2x1ZGVzKQordm9pZCBwcm9jZXNzSW5jbHVkZURpcmVjdG9yaWVzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzJiBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIGluY2x1ZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4mIHVuaXF1ZUluY2x1ZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVidWdJbmNsdWRlcykKIHsKLSAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5JiBlbnRyeSA6IGVudHJpZXMpIHsKKyAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5JiBlbnRyeSA6IGVudHJpZXMuRW50cmllcykgewogICAgIGNtTGlua0ltcGxJdGVtIGNvbnN0JiBpdGVtID0gZW50cnkuTGlua0ltcGxJdGVtOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YXJnZXROYW1lID0gaXRlbS5Bc1N0cigpOwogICAgIGJvb2wgY29uc3QgZnJvbUltcG9ydGVkID0gaXRlbS5UYXJnZXQgJiYgaXRlbS5UYXJnZXQtPklzSW1wb3J0ZWQoKTsKQEAgLTMwODEsMjIgKzMzOTIsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKICAgYm9vbCBkZWJ1Z0luY2x1ZGVzID0gIXRoaXMtPkRlYnVnSW5jbHVkZXNEb25lICYmCi0gICAgY21Db250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJJTkNMVURFX0RJUkVDVE9SSUVTIik7CisgICAgY206OmNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKIAogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDb25maWd1cmVEb25lQ01QMDAyNigpKSB7CiAgICAgdGhpcy0+RGVidWdJbmNsdWRlc0RvbmUgPSB0cnVlOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cmllcyA9Ci0gICAgRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXModGhpcywgY29uZmlnLCBsYW5nLCAmZGFnQ2hlY2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5JbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzKTsKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIGVudHJpZXMgPSBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcygKKyAgICB0aGlzLCBjb25maWcsIGxhbmcsICZkYWdDaGVja2VyLCB0aGlzLT5JbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzKTsKKworICBpZiAobGFuZyA9PSAiU3dpZnQiKSB7CisgICAgQWRkU3dpZnRJbXBsaWNpdEluY2x1ZGVEaXJlY3Rvcmllcyh0aGlzLCBjb25maWcsIGVudHJpZXMpOworICB9CiAKICAgQWRkSW50ZXJmYWNlRW50cmllcyh0aGlzLCBjb25maWcsICJJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyIsIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMpOwpAQCAtMzExOCw3ICszNDI5LDcgQEAKIAogICAgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeSBlZShsaWIsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CiAgICAgICBlZS5WYWx1ZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShsaWJEaXIpKTsKLSAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShlZSkpOworICAgICAgZW50cmllcy5FbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZWUpKTsKICAgICB9CiAgIH0KIApAQCAtMzEzNSwyMiArMzQ0NiwzOCBAQAogfTsKIAogbmFtZXNwYWNlIHsKK2NvbnN0IGF1dG8gRExfQkVHSU4gPSAiPERFVklDRV9MSU5LPiJfczsKK2NvbnN0IGF1dG8gRExfRU5EID0gIjwvREVWSUNFX0xJTks+Il9zOworCiB2b2lkIHByb2Nlc3NPcHRpb25zKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGNvbnN0JiBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgY29uc3QmIGVudHJpZXMsCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4mIHVuaXF1ZU9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZGVidWdPcHRpb25zLCBjb25zdCBjaGFyKiBsb2dOYW1lLCBPcHRpb25zUGFyc2UgcGFyc2UpCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVidWdPcHRpb25zLCBjb25zdCBjaGFyKiBsb2dOYW1lLCBPcHRpb25zUGFyc2UgcGFyc2UsCisgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJvY2Vzc0RldmljZU9wdGlvbnMgPSBmYWxzZSkKIHsKLSAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGNvbnN0JiBlbnRyeSA6IGVudHJpZXMpIHsKKyAgYm9vbCBzcGxpdE9wdGlvbiA9ICFwcm9jZXNzRGV2aWNlT3B0aW9uczsKKyAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGNvbnN0JiBlbnRyeSA6IGVudHJpZXMuRW50cmllcykgewogICAgIHN0ZDo6c3RyaW5nIHVzZWRPcHRpb25zOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG9wdCA6IGVudHJ5LlZhbHVlcykgeworICAgICAgaWYgKHByb2Nlc3NEZXZpY2VPcHRpb25zICYmIChvcHQgPT0gRExfQkVHSU4gfHwgb3B0ID09IERMX0VORCkpIHsKKyAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2sob3B0LCBlbnRyeS5CYWNrdHJhY2UpOworICAgICAgICBzcGxpdE9wdGlvbiA9IG9wdCA9PSBETF9CRUdJTjsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKICAgICAgIGlmICh1bmlxdWVPcHRpb25zLmluc2VydChvcHQpLnNlY29uZCkgewogICAgICAgICBpZiAocGFyc2UgPT0gT3B0aW9uc1BhcnNlOjpTaGVsbCAmJgogICAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KG9wdCwgIlNIRUxMOiIpKSB7Ci0gICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRtcDsKLSAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZVVuaXhDb21tYW5kTGluZShvcHQuY19zdHIoKSArIDYsIHRtcCk7Ci0gICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyYgbyA6IHRtcCkgewotICAgICAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG8pLCBlbnRyeS5CYWNrdHJhY2UpOworICAgICAgICAgIGlmIChzcGxpdE9wdGlvbikgeworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRtcDsKKyAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlBhcnNlVW5peENvbW1hbmRMaW5lKG9wdC5jX3N0cigpICsgNiwgdG1wKTsKKyAgICAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcmIG8gOiB0bXApIHsKKyAgICAgICAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG8pLCBlbnRyeS5CYWNrdHJhY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjayhzdGQ6OnN0cmluZyhvcHQuY19zdHIoKSArIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuQmFja3RyYWNlKTsKICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2sob3B0LCBlbnRyeS5CYWNrdHJhY2UpOwpAQCAtMzE2OSw2ICszNDk2LDYzIEBACiAgICAgfQogICB9CiB9CisKK3N0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gd3JhcE9wdGlvbnMoCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3B0aW9ucywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgYnQsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgd3JhcHBlckZsYWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB3cmFwcGVyU2VwLAorICBib29sIGNvbmNhdEZsYWdBbmRBcmdzKQoreworICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IHJlc3VsdDsKKworICBpZiAob3B0aW9ucy5lbXB0eSgpKSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGlmICh3cmFwcGVyRmxhZy5lbXB0eSgpIHx8IGNtSGFzTGl0ZXJhbFByZWZpeChvcHRpb25zLmZyb250KCksICJMSU5LRVI6IikpIHsKKyAgICAvLyBub3RoaW5nIHNwZWNpZmllZCBvciBMSU5LRVIgd3JhcHBlciwgaW5zZXJ0IGVsZW1lbnRzIGFzIGlzCisgICAgcmVzdWx0LnJlc2VydmUob3B0aW9ucy5zaXplKCkpOworICAgIGZvciAoc3RkOjpzdHJpbmcmIG8gOiBvcHRpb25zKSB7CisgICAgICByZXN1bHQuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShvKSwgYnQpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIXdyYXBwZXJTZXAuZW1wdHkoKSkgeworICAgICAgaWYgKGNvbmNhdEZsYWdBbmRBcmdzKSB7CisgICAgICAgIC8vIGluc2VydCBmbGFnIGVsZW1lbnRzIGV4Y2VwdCBsYXN0IG9uZQorICAgICAgICBmb3IgKGF1dG8gaSA9IHdyYXBwZXJGbGFnLmJlZ2luKCk7IGkgIT0gd3JhcHBlckZsYWcuZW5kKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICByZXN1bHQuZW1wbGFjZV9iYWNrKCppLCBidCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gY29uY2F0ZW5hdGUgbGFzdCBmbGFnIGVsZW1lbnQgYW5kIGFsbCBsaXN0IHZhbHVlcworICAgICAgICAvLyBpbiBvbmUgb3B0aW9uCisgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2sod3JhcHBlckZsYWcuYmFjaygpICsgY21Kb2luKG9wdGlvbnMsIHdyYXBwZXJTZXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiB3cmFwcGVyRmxhZykgeworICAgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2soaSwgYnQpOworICAgICAgICB9CisgICAgICAgIC8vIGNvbmNhdGVuYXRlIGFsbCBsaXN0IHZhbHVlcyBpbiBvbmUgb3B0aW9uCisgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2soY21Kb2luKG9wdGlvbnMsIHdyYXBwZXJTZXApLCBidCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIHByZWZpeCBlYWNoIGVsZW1lbnQgb2YgbGlzdCB3aXRoIHdyYXBwZXIKKyAgICAgIGlmIChjb25jYXRGbGFnQW5kQXJncykgeworICAgICAgICBzdGQ6OnRyYW5zZm9ybShvcHRpb25zLmJlZ2luKCksIG9wdGlvbnMuZW5kKCksIG9wdGlvbnMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgWyZ3cmFwcGVyRmxhZ10oc3RkOjpzdHJpbmcgY29uc3QmIG8pIC0+IHN0ZDo6c3RyaW5nIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlckZsYWcuYmFjaygpICsgbzsKKyAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICB9CisgICAgICBmb3IgKHN0ZDo6c3RyaW5nJiBvIDogb3B0aW9ucykgeworICAgICAgICBmb3IgKGF1dG8gaSA9IHdyYXBwZXJGbGFnLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICBlID0gY29uY2F0RmxhZ0FuZEFyZ3MgPyB3cmFwcGVyRmxhZy5lbmQoKSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHdyYXBwZXJGbGFnLmVuZCgpOworICAgICAgICAgICAgIGkgIT0gZTsgKytpKSB7CisgICAgICAgICAgcmVzdWx0LmVtcGxhY2VfYmFjaygqaSwgYnQpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG8pLCBidCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldENvbXBpbGVPcHRpb25zKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcmVzdWx0LApAQCAtMzE5MiwyMiArMzU3NiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlYnVnUHJvcGVydGllczsKLSAgY29uc3QgY2hhciogZGVidWdQcm9wID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiKTsKLSAgaWYgKGRlYnVnUHJvcCkgewotICAgIGNtRXhwYW5kTGlzdChkZWJ1Z1Byb3AsIGRlYnVnUHJvcGVydGllcyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdQcm9wZXJ0aWVzKTsKIAogICBib29sIGRlYnVnT3B0aW9ucyA9ICF0aGlzLT5EZWJ1Z0NvbXBpbGVPcHRpb25zRG9uZSAmJgotICAgIGNtQ29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiQ09NUElMRV9PUFRJT05TIik7CisgICAgY206OmNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIkNPTVBJTEVfT1BUSU9OUyIpOwogCiAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENvbmZpZ3VyZURvbmVDTVAwMDI2KCkpIHsKICAgICB0aGlzLT5EZWJ1Z0NvbXBpbGVPcHRpb25zRG9uZSA9IHRydWU7CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyaWVzID0KLSAgICBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcyh0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db21waWxlT3B0aW9uc0VudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLCB0aGlzLT5Db21waWxlT3B0aW9uc0VudHJpZXMpOwogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyIsIGxhbmd1YWdlLAogICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKQEAgLTMyMzgsMjIgKzM2MTgsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKICAgYm9vbCBkZWJ1Z0ZlYXR1cmVzID0gIXRoaXMtPkRlYnVnQ29tcGlsZUZlYXR1cmVzRG9uZSAmJgotICAgIGNtQ29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiQ09NUElMRV9GRUFUVVJFUyIpOworICAgIGNtOjpjb250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJDT01QSUxFX0ZFQVRVUkVTIik7CiAKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0Q29uZmlndXJlRG9uZUNNUDAwMjYoKSkgewogICAgIHRoaXMtPkRlYnVnQ29tcGlsZUZlYXR1cmVzRG9uZSA9IHRydWU7CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyaWVzID0KLSAgICBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcyh0aGlzLCBjb25maWcsIHN0ZDo6c3RyaW5nKCksICZkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgc3RkOjpzdHJpbmcoKSwgJmRhZ0NoZWNrZXIsIHRoaXMtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMpOwogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0NPTVBJTEVfRkVBVFVSRVMiLAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCksICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKQEAgLTMyODYsMjIgKzM2NjIsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKICAgYm9vbCBkZWJ1Z0RlZmluZXMgPSAhdGhpcy0+RGVidWdDb21waWxlRGVmaW5pdGlvbnNEb25lICYmCi0gICAgY21Db250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJDT01QSUxFX0RFRklOSVRJT05TIik7CisgICAgY206OmNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKIAogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDb25maWd1cmVEb25lQ01QMDAyNigpKSB7CiAgICAgdGhpcy0+RGVidWdDb21waWxlRGVmaW5pdGlvbnNEb25lID0gdHJ1ZTsKICAgfQogCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJpZXMgPQotICAgIEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbXBpbGVEZWZpbml0aW9uc0VudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLCB0aGlzLT5Db21waWxlRGVmaW5pdGlvbnNFbnRyaWVzKTsKIAogICBBZGRJbnRlcmZhY2VFbnRyaWVzKHRoaXMsIGNvbmZpZywgIklOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TIiwgbGFuZ3VhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMpOwpAQCAtMzMwOSw3ICszNjgxLDcgQEAKICAgaWYgKCFjb25maWcuZW1wdHkoKSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ1Byb3BOYW1lID0KICAgICAgICJDT01QSUxFX0RFRklOSVRJT05TXyIgKyBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKLSAgICBjb25zdCBjaGFyKiBjb25maWdQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcE5hbWUpOworICAgIGNtUHJvcCBjb25maWdQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcE5hbWUpOwogICAgIGlmIChjb25maWdQcm9wKSB7CiAgICAgICBzd2l0Y2ggKHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA0MykpIHsKICAgICAgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOiB7CkBAIC0zMzIwLDggKzM2OTIsOCBAQAogICAgICAgICB9CiAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOiB7CiAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJ5ID0KLSAgICAgICAgICAgIENyZWF0ZVRhcmdldFByb3BlcnR5RW50cnkoY29uZmlnUHJvcCk7Ci0gICAgICAgICAgZW50cmllcy5lbXBsYWNlX2JhY2soRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAorICAgICAgICAgICAgQ3JlYXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgqY29uZmlnUHJvcCk7CisgICAgICAgICAgZW50cmllcy5FbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkoCiAgICAgICAgICAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgKmVudHJ5KSk7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgpAQCAtMzM0NywxMSArMzcxOSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVidWdQcm9wZXJ0aWVzOwotICBjb25zdCBjaGFyKiBkZWJ1Z1Byb3AgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIpOwotICBpZiAoZGVidWdQcm9wKSB7Ci0gICAgY21FeHBhbmRMaXN0KGRlYnVnUHJvcCwgZGVidWdQcm9wZXJ0aWVzKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1Byb3BlcnRpZXMpOwogCiAgIGJvb2wgZGVidWdEZWZpbmVzID0gIXRoaXMtPkRlYnVnUHJlY29tcGlsZUhlYWRlcnNEb25lICYmCiAgICAgc3RkOjpmaW5kKGRlYnVnUHJvcGVydGllcy5iZWdpbigpLCBkZWJ1Z1Byb3BlcnRpZXMuZW5kKCksCkBAIC0zMzYxLDkgKzM3MzAsOCBAQAogICAgIHRoaXMtPkRlYnVnUHJlY29tcGlsZUhlYWRlcnNEb25lID0gdHJ1ZTsKICAgfQogCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJpZXMgPQotICAgIEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlByZWNvbXBpbGVIZWFkZXJzRW50cmllcyk7CisgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyBlbnRyaWVzID0gRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXMoCisgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsIHRoaXMtPlByZWNvbXBpbGVIZWFkZXJzRW50cmllcyk7CiAKICAgQWRkSW50ZXJmYWNlRW50cmllcyh0aGlzLCBjb25maWcsICJJTlRFUkZBQ0VfUFJFQ09NUElMRV9IRUFERVJTIiwgbGFuZ3VhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMpOwpAQCAtMzM3Niw3ICszNzQ0LDggQEAKIH0KIAogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFBjaEhlYWRlcihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpIGNvbnN0CiB7CiAgIGlmIChsYW5ndWFnZSAhPSAiQyIgJiYgbGFuZ3VhZ2UgIT0gIkNYWCIgJiYgbGFuZ3VhZ2UgIT0gIk9CSkMiICYmCiAgICAgICBsYW5ndWFnZSAhPSAiT0JKQ1hYIikgewpAQCAtMzM4NywxMSArMzc1NiwxMSBAQAogICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICB9CiAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBnZW5lcmF0b3JUYXJnZXQgPSB0aGlzOwotICBjb25zdCBjaGFyKiBwY2hSZXVzZUZyb20gPQorICBjbVByb3AgcGNoUmV1c2VGcm9tID0KICAgICBnZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJQUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTSIpOwogCiAgIGNvbnN0IGF1dG8gaW5zZXJ0ZWQgPQotICAgIHRoaXMtPlBjaEhlYWRlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnLCAiIikpOworICAgIHRoaXMtPlBjaEhlYWRlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnICsgYXJjaCwgIiIpKTsKICAgaWYgKGluc2VydGVkLnNlY29uZCkgewogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gaGVhZGVycyA9CiAgICAgICB0aGlzLT5HZXRQcmVjb21waWxlSGVhZGVycyhjb25maWcsIGxhbmd1YWdlKTsKQEAgLTM0MDIsNyArMzc3MSw3IEBACiAKICAgICBpZiAocGNoUmV1c2VGcm9tKSB7CiAgICAgICBnZW5lcmF0b3JUYXJnZXQgPQotICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZEdlbmVyYXRvclRhcmdldChwY2hSZXVzZUZyb20pOworICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZEdlbmVyYXRvclRhcmdldCgqcGNoUmV1c2VGcm9tKTsKICAgICB9CiAKICAgICBmaWxlbmFtZSA9IGNtU3RyQ2F0KApAQCAtMzQyMyw3ICszNzkyLDggQEAKICAgICB9CiAKICAgICBmaWxlbmFtZSA9Ci0gICAgICBjbVN0ckNhdChmaWxlbmFtZSwgIi9jbWFrZV9wY2giLCBsYW5ndWFnZVRvRXh0ZW5zaW9uLmF0KGxhbmd1YWdlKSk7CisgICAgICBjbVN0ckNhdChmaWxlbmFtZSwgIi9jbWFrZV9wY2giLCBhcmNoLmVtcHR5KCkgPyAiIiA6IGNtU3RyQ2F0KCJfIiwgYXJjaCksCisgICAgICAgICAgICAgICBsYW5ndWFnZVRvRXh0ZW5zaW9uLmF0KGxhbmd1YWdlKSk7CiAKICAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZV90bXAgPSBjbVN0ckNhdChmaWxlbmFtZSwgIi50bXAiKTsKICAgICBpZiAoIXBjaFJldXNlRnJvbSkgewpAQCAtMzQ4MiwyNyArMzg1MiwyOCBAQAogfQogCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0UGNoU291cmNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSkgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCkgY29uc3QKIHsKICAgaWYgKGxhbmd1YWdlICE9ICJDIiAmJiBsYW5ndWFnZSAhPSAiQ1hYIiAmJiBsYW5ndWFnZSAhPSAiT0JKQyIgJiYKICAgICAgIGxhbmd1YWdlICE9ICJPQkpDWFgiKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgIH0KICAgY29uc3QgYXV0byBpbnNlcnRlZCA9Ci0gICAgdGhpcy0+UGNoU291cmNlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobGFuZ3VhZ2UgKyBjb25maWcsICIiKSk7CisgICAgdGhpcy0+UGNoU291cmNlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobGFuZ3VhZ2UgKyBjb25maWcgKyBhcmNoLCAiIikpOwogICBpZiAoaW5zZXJ0ZWQuc2Vjb25kKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoSGVhZGVyID0gdGhpcy0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZ3VhZ2UpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEhlYWRlciA9IHRoaXMtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmd1YWdlLCBhcmNoKTsKICAgICBpZiAocGNoSGVhZGVyLmVtcHR5KCkpIHsKICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICAgIH0KICAgICBzdGQ6OnN0cmluZyYgZmlsZW5hbWUgPSBpbnNlcnRlZC5maXJzdC0+c2Vjb25kOwogCiAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIGdlbmVyYXRvclRhcmdldCA9IHRoaXM7Ci0gICAgY29uc3QgY2hhciogcGNoUmV1c2VGcm9tID0KKyAgICBjbVByb3AgcGNoUmV1c2VGcm9tID0KICAgICAgIGdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlBSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NIik7CiAgICAgaWYgKHBjaFJldXNlRnJvbSkgewogICAgICAgZ2VuZXJhdG9yVGFyZ2V0ID0KLSAgICAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRHZW5lcmF0b3JUYXJnZXQocGNoUmV1c2VGcm9tKTsKKyAgICAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRHZW5lcmF0b3JUYXJnZXQoKnBjaFJldXNlRnJvbSk7CiAgICAgfQogCiAgICAgZmlsZW5hbWUgPQpAQCAtMzUxOCwxMyArMzg4OSwxNSBAQAogICAgICAgICB7ICJPQkpDWFgiLCAiLm9iamN4eC5oeHgubW0iIH0KICAgICAgIH07CiAKLSAgICAgIGZpbGVuYW1lICs9IGxhbmd1YWdlVG9FeHRlbnNpb24uYXQobGFuZ3VhZ2UpOworICAgICAgZmlsZW5hbWUgPSBjbVN0ckNhdChmaWxlbmFtZSwgYXJjaC5lbXB0eSgpID8gIiIgOiBjbVN0ckNhdCgiXyIsIGFyY2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZVRvRXh0ZW5zaW9uLmF0KGxhbmd1YWdlKSk7CiAgICAgfSBlbHNlIHsKICAgICAgIGNvbnN0IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VUb0V4dGVuc2lvbiA9IHsKICAgICAgICAgeyAiQyIsICIuYyIgfSwgeyAiQ1hYIiwgIi5jeHgiIH0sIHsgIk9CSkMiLCAiLm0iIH0sIHsgIk9CSkNYWCIsICIubW0iIH0KICAgICAgIH07CiAKLSAgICAgIGZpbGVuYW1lICs9IGxhbmd1YWdlVG9FeHRlbnNpb24uYXQobGFuZ3VhZ2UpOworICAgICAgZmlsZW5hbWUgPSBjbVN0ckNhdChmaWxlbmFtZSwgYXJjaC5lbXB0eSgpID8gIiIgOiBjbVN0ckNhdCgiXyIsIGFyY2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZVRvRXh0ZW5zaW9uLmF0KGxhbmd1YWdlKSk7CiAgICAgfQogCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZW5hbWVfdG1wID0gY21TdHJDYXQoZmlsZW5hbWUsICIudG1wIik7CkBAIC0zNTQxLDE2ICszOTE0LDE3IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQY2hGaWxlT2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCkKIHsKICAgaWYgKGxhbmd1YWdlICE9ICJDIiAmJiBsYW5ndWFnZSAhPSAiQ1hYIiAmJiBsYW5ndWFnZSAhPSAiT0JKQyIgJiYKICAgICAgIGxhbmd1YWdlICE9ICJPQkpDWFgiKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgIH0KICAgY29uc3QgYXV0byBpbnNlcnRlZCA9Ci0gICAgdGhpcy0+UGNoT2JqZWN0RmlsZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnLCAiIikpOworICAgIHRoaXMtPlBjaE9iamVjdEZpbGVzLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZyArIGFyY2gsICIiKSk7CiAgIGlmIChpbnNlcnRlZC5zZWNvbmQpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPSB0aGlzLT5HZXRQY2hTb3VyY2UoY29uZmlnLCBsYW5ndWFnZSk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0gdGhpcy0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOwogICAgIGlmIChwY2hTb3VyY2UuZW1wdHkoKSkgewogICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgICAgfQpAQCAtMzU2MCwxNSArMzkzNCwyMCBAQAogICAgICAgcGNoU291cmNlLCBmYWxzZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CiAKICAgICBmaWxlbmFtZSA9IGNtU3RyQ2F0KHRoaXMtPk9iamVjdERpcmVjdG9yeSwgdGhpcy0+R2V0T2JqZWN0TmFtZShwY2hTZikpOworICAgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKAorICAgICAgICBmaWxlbmFtZSwgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldENNYWtlQ0ZHSW50RGlyKCksIGNvbmZpZyk7CisgICAgfQogICB9CiAgIHJldHVybiBpbnNlcnRlZC5maXJzdC0+c2Vjb25kOwogfQogCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0UGNoRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpCiB7CiAgIGNvbnN0IGF1dG8gaW5zZXJ0ZWQgPQotICAgIHRoaXMtPlBjaEZpbGVzLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZywgIiIpKTsKKyAgICB0aGlzLT5QY2hGaWxlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobGFuZ3VhZ2UgKyBjb25maWcgKyBhcmNoLCAiIikpOwogICBpZiAoaW5zZXJ0ZWQuc2Vjb25kKSB7CiAgICAgc3RkOjpzdHJpbmcmIHBjaEZpbGUgPSBpbnNlcnRlZC5maXJzdC0+c2Vjb25kOwogCkBAIC0zNTg4LDIwICszOTY3LDIwIEBACiAgICAgICB9OwogCiAgICAgICBjbUdlbmVyYXRvclRhcmdldCogZ2VuZXJhdG9yVGFyZ2V0ID0gdGhpczsKLSAgICAgIGNvbnN0IGNoYXIqIHBjaFJldXNlRnJvbSA9CisgICAgICBjbVByb3AgcGNoUmV1c2VGcm9tID0KICAgICAgICAgZ2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iKTsKICAgICAgIGlmIChwY2hSZXVzZUZyb20pIHsKICAgICAgICAgZ2VuZXJhdG9yVGFyZ2V0ID0KLSAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZEdlbmVyYXRvclRhcmdldChwY2hSZXVzZUZyb20pOworICAgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KCpwY2hSZXVzZUZyb20pOwogICAgICAgfQogCiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hGaWxlT2JqZWN0ID0KLSAgICAgICAgZ2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hGaWxlT2JqZWN0KGNvbmZpZywgbGFuZ3VhZ2UpOworICAgICAgICBnZW5lcmF0b3JUYXJnZXQtPkdldFBjaEZpbGVPYmplY3QoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CiAgICAgICBpZiAoIXBjaEV4dGVuc2lvbi5lbXB0eSgpKSB7CiAgICAgICAgIHBjaEZpbGUgPSByZXBsYWNlRXh0ZW5zaW9uKHBjaEZpbGVPYmplY3QsIHBjaEV4dGVuc2lvbik7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIHBjaEZpbGUgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSk7CisgICAgICBwY2hGaWxlID0gdGhpcy0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOwogICAgICAgcGNoRmlsZSArPSBwY2hFeHRlbnNpb247CiAgICAgfQogICB9CkBAIC0zNjA5LDE5ICszOTg4LDI3IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQY2hDcmVhdGVDb21waWxlT3B0aW9ucygKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoKQogewogICBjb25zdCBhdXRvIGluc2VydGVkID0gdGhpcy0+UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMuaW5zZXJ0KAotICAgIHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnLCAiIikpOworICAgIHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnICsgYXJjaCwgIiIpKTsKICAgaWYgKGluc2VydGVkLnNlY29uZCkgewogICAgIHN0ZDo6c3RyaW5nJiBjcmVhdGVPcHRpb25MaXN0ID0gaW5zZXJ0ZWQuZmlyc3QtPnNlY29uZDsKIAorICAgIGlmICh0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiUENIX1dBUk5fSU5WQUxJRCIpKSB7CisgICAgICBjcmVhdGVPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX0lOVkFMSURfUENIIikpOworICAgIH0KKwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNyZWF0ZU9wdFZhciA9CiAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0giKTsKLSAgICBjcmVhdGVPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKGNyZWF0ZU9wdFZhcik7CiAKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSk7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRoaXMtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSk7CisgICAgY3JlYXRlT3B0aW9uTGlzdCA9IGNtU3RyQ2F0KAorICAgICAgY3JlYXRlT3B0aW9uTGlzdCwgIjsiLCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oY3JlYXRlT3B0VmFyKSk7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRoaXMtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CiAKICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGNyZWF0ZU9wdGlvbkxpc3QsICI8UENIX0hFQURFUj4iLCBwY2hIZWFkZXIpOwogICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoY3JlYXRlT3B0aW9uTGlzdCwgIjxQQ0hfRklMRT4iLCBwY2hGaWxlKTsKQEAgLTM2MzAsMTkgKzQwMTcsMzMgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFBjaFVzZUNvbXBpbGVPcHRpb25zKAotICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpCiB7Ci0gIGNvbnN0IGF1dG8gaW5zZXJ0ZWQgPQotICAgIHRoaXMtPlBjaFVzZUNvbXBpbGVPcHRpb25zLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZywgIiIpKTsKKyAgY29uc3QgYXV0byBpbnNlcnRlZCA9IHRoaXMtPlBjaFVzZUNvbXBpbGVPcHRpb25zLmluc2VydCgKKyAgICBzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZyArIGFyY2gsICIiKSk7CiAgIGlmIChpbnNlcnRlZC5zZWNvbmQpIHsKICAgICBzdGQ6OnN0cmluZyYgdXNlT3B0aW9uTGlzdCA9IGluc2VydGVkLmZpcnN0LT5zZWNvbmQ7CiAKLSAgICBjb25zdCBzdGQ6OnN0cmluZyB1c2VPcHRWYXIgPQotICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmd1YWdlLCAiX0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIik7Ci0gICAgdXNlT3B0aW9uTGlzdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbih1c2VPcHRWYXIpOworICAgIGlmICh0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiUENIX1dBUk5fSU5WQUxJRCIpKSB7CisgICAgICB1c2VPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX0lOVkFMSURfUENIIikpOworICAgIH0KIAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEhlYWRlciA9IHRoaXMtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmd1YWdlKTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hGaWxlID0gdGhpcy0+R2V0UGNoRmlsZShjb25maWcsIGxhbmd1YWdlKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyB1c2VPcHRWYXIgPQorICAgICAgY21TdHJDYXQobGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX1VTRV9QQ0giKTsKKworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB1c2VPcHRpb25MaXN0UHJvcGVydHkgPQorICAgICAgdGhpcy0+R2V0U2FmZVByb3BlcnR5KHVzZU9wdFZhcik7CisKKyAgICB1c2VPcHRpb25MaXN0ID0gY21TdHJDYXQoCisgICAgICB1c2VPcHRpb25MaXN0LCAiOyIsCisgICAgICB1c2VPcHRpb25MaXN0UHJvcGVydHkuZW1wdHkoKQorICAgICAgICA/IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgdXNlT3B0VmFyKSkKKyAgICAgICAgOiB1c2VPcHRpb25MaXN0UHJvcGVydHkpOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoSGVhZGVyID0gdGhpcy0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEZpbGUgPSB0aGlzLT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOwogCiAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyh1c2VPcHRpb25MaXN0LCAiPFBDSF9IRUFERVI+IiwgcGNoSGVhZGVyKTsKICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHVzZU9wdGlvbkxpc3QsICI8UENIX0ZJTEU+IiwgcGNoRmlsZSk7CkBAIC0zNjcxLDYgKzQwNzIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIGNvbnN0CiB7CisgIGlmICh0aGlzLT5Jc0RldmljZUxpbmsoKSAmJgorICAgICAgdGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDEwNSgpICE9IGNtUG9saWNpZXM6Ok5FVykgeworICAgIC8vIGxpbmsgb3B0aW9ucyBhcmUgbm90IHByb3BhZ2F0ZWQgdG8gdGhlIGRldmljZSBsaW5rIHN0ZXAKKyAgICByZXR1cm47CisgIH0KKwogICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IHRtcCA9IHRoaXMtPkdldExpbmtPcHRpb25zKGNvbmZpZywgbGFuZ3VhZ2UpOwogICByZXN1bHQucmVzZXJ2ZSh0bXAuc2l6ZSgpKTsKICAgZm9yIChCVDxzdGQ6OnN0cmluZz4mIHYgOiB0bXApIHsKQEAgLTM2ODgsMzcgKzQwOTUsODMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKLSAgYm9vbCBkZWJ1Z09wdGlvbnMgPQotICAgICF0aGlzLT5EZWJ1Z0xpbmtPcHRpb25zRG9uZSAmJiBjbUNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIkxJTktfT1BUSU9OUyIpOworICBib29sIGRlYnVnT3B0aW9ucyA9ICF0aGlzLT5EZWJ1Z0xpbmtPcHRpb25zRG9uZSAmJgorICAgIGNtOjpjb250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJMSU5LX09QVElPTlMiKTsKIAogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDb25maWd1cmVEb25lQ01QMDAyNigpKSB7CiAgICAgdGhpcy0+RGVidWdMaW5rT3B0aW9uc0RvbmUgPSB0cnVlOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cmllcyA9Ci0gICAgRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXModGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TGlua09wdGlvbnNFbnRyaWVzKTsKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIGVudHJpZXMgPSBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcygKKyAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgdGhpcy0+TGlua09wdGlvbnNFbnRyaWVzKTsKIAogICBBZGRJbnRlcmZhY2VFbnRyaWVzKHRoaXMsIGNvbmZpZywgIklOVEVSRkFDRV9MSU5LX09QVElPTlMiLCBsYW5ndWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgZW50cmllcywKICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQb2xpY3lTdGF0dXNDTVAwMDk5KCkgIT0gY21Qb2xpY2llczo6TkVXKTsKIAogICBwcm9jZXNzT3B0aW9ucyh0aGlzLCBlbnRyaWVzLCByZXN1bHQsIHVuaXF1ZU9wdGlvbnMsIGRlYnVnT3B0aW9ucywKLSAgICAgICAgICAgICAgICAgImxpbmsgb3B0aW9ucyIsIE9wdGlvbnNQYXJzZTo6U2hlbGwpOworICAgICAgICAgICAgICAgICAibGluayBvcHRpb25zIiwgT3B0aW9uc1BhcnNlOjpTaGVsbCwgdGhpcy0+SXNEZXZpY2VMaW5rKCkpOworCisgIGlmICh0aGlzLT5Jc0RldmljZUxpbmsoKSkgeworICAgIC8vIHdyYXAgaG9zdCBsaW5rIG9wdGlvbnMKKyAgICBjb25zdCBzdGQ6OnN0cmluZyB3cmFwcGVyKHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKKyAgICAgICJDTUFLRV8iICsgbGFuZ3VhZ2UgKyAiX0RFVklDRV9DT01QSUxFUl9XUkFQUEVSX0ZMQUciKSk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHdyYXBwZXJGbGFnID0gY21FeHBhbmRlZExpc3Qod3JhcHBlcik7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgd3JhcHBlclNlcCh0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCisgICAgICAiQ01BS0VfIiArIGxhbmd1YWdlICsgIl9ERVZJQ0VfQ09NUElMRVJfV1JBUFBFUl9GTEFHX1NFUCIpKTsKKyAgICBib29sIGNvbmNhdEZsYWdBbmRBcmdzID0gdHJ1ZTsKKyAgICBpZiAoIXdyYXBwZXJGbGFnLmVtcHR5KCkgJiYgd3JhcHBlckZsYWcuYmFjaygpID09ICIgIikgeworICAgICAgY29uY2F0RmxhZ0FuZEFyZ3MgPSBmYWxzZTsKKyAgICAgIHdyYXBwZXJGbGFnLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgYXV0byBpdCA9IHJlc3VsdC5iZWdpbigpOworICAgIHdoaWxlIChpdCAhPSByZXN1bHQuZW5kKCkpIHsKKyAgICAgIGlmIChpdC0+VmFsdWUgPT0gRExfQkVHSU4pIHsKKyAgICAgICAgLy8gZGV2aWNlIGxpbmsgb3B0aW9ucywgbm8gdHJlYXRtZW50CisgICAgICAgIGl0ID0gcmVzdWx0LmVyYXNlKGl0KTsKKyAgICAgICAgaXQgPSBzdGQ6OmZpbmRfaWYoaXQsIHJlc3VsdC5lbmQoKSwgW10oY29uc3QgQlQ8c3RkOjpzdHJpbmc+JiBpdGVtKSB7CisgICAgICAgICAgcmV0dXJuIGl0ZW0uVmFsdWUgPT0gRExfRU5EOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGl0ICE9IHJlc3VsdC5lbmQoKSkgeworICAgICAgICAgIGl0ID0gcmVzdWx0LmVyYXNlKGl0KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gaG9zdCBsaW5rIG9wdGlvbnMgbXVzdCBiZSB3cmFwcGVkCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRpb25zOworICAgICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZVVuaXhDb21tYW5kTGluZShpdC0+VmFsdWUuY19zdHIoKSwgb3B0aW9ucyk7CisgICAgICAgIGF1dG8gaG9zdE9wdGlvbnMgPSB3cmFwT3B0aW9ucyhvcHRpb25zLCBpdC0+QmFja3RyYWNlLCB3cmFwcGVyRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJTZXAsIGNvbmNhdEZsYWdBbmRBcmdzKTsKKyAgICAgICAgaXQgPSByZXN1bHQuZXJhc2UoaXQpOworICAgICAgICAvLyBzb21lIGNvbXBpbGVycyAobGlrZSBnY2MgNC44IG9yIEludGVsIDE5LjAgb3IgWExDIDE2KSBkbyBub3QgcmVzcGVjdAorICAgICAgICAvLyBDKysxMSBzdGFuZGFyZDogJ3N0ZDo6dmVjdG9yOjppbnNlcnQoKScgZG8gbm90IHJldHVybnMgYW4gaXRlcmF0b3IsCisgICAgICAgIC8vIHNvIG5lZWQgdG8gcmVjb21wdXRlIHRoZSBpdGVyYXRvciBhZnRlciBpbnNlcnRpb24uCisgICAgICAgIGlmIChpdCA9PSByZXN1bHQuZW5kKCkpIHsKKyAgICAgICAgICBjbTo6YXBwZW5kKHJlc3VsdCwgaG9zdE9wdGlvbnMpOworICAgICAgICAgIGl0ID0gcmVzdWx0LmVuZCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGF1dG8gaW5kZXggPSBpdCAtIHJlc3VsdC5iZWdpbigpOworICAgICAgICAgIHJlc3VsdC5pbnNlcnQoaXQsIGhvc3RPcHRpb25zLmJlZ2luKCksIGhvc3RPcHRpb25zLmVuZCgpKTsKKyAgICAgICAgICBpdCA9IHJlc3VsdC5iZWdpbigpICsgaW5kZXggKyBob3N0T3B0aW9ucy5zaXplKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KIAogICAvLyBMYXN0IHN0ZXA6IHJlcGxhY2UgIkxJTktFUjoiIHByZWZpeGVkIGVsZW1lbnRzIGJ5CiAgIC8vIGFjdHVhbCBsaW5rZXIgd3JhcHBlcgogICBjb25zdCBzdGQ6OnN0cmluZyB3cmFwcGVyKHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAiQ01BS0VfIiArIGxhbmd1YWdlICsgIl9MSU5LRVJfV1JBUFBFUl9GTEFHIikpOworICAgICJDTUFLRV8iICsgbGFuZ3VhZ2UgKworICAgICh0aGlzLT5Jc0RldmljZUxpbmsoKSA/ICJfREVWSUNFX0xJTktFUl9XUkFQUEVSX0ZMQUciCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogIl9MSU5LRVJfV1JBUFBFUl9GTEFHIikpKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHdyYXBwZXJGbGFnID0gY21FeHBhbmRlZExpc3Qod3JhcHBlcik7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nIHdyYXBwZXJTZXAodGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAotICAgICJDTUFLRV8iICsgbGFuZ3VhZ2UgKyAiX0xJTktFUl9XUkFQUEVSX0ZMQUdfU0VQIikpOworICAgICJDTUFLRV8iICsgbGFuZ3VhZ2UgKworICAgICh0aGlzLT5Jc0RldmljZUxpbmsoKSA/ICJfREVWSUNFX0xJTktFUl9XUkFQUEVSX0ZMQUdfU0VQIgorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAiKSkpOwogICBib29sIGNvbmNhdEZsYWdBbmRBcmdzID0gdHJ1ZTsKICAgaWYgKCF3cmFwcGVyRmxhZy5lbXB0eSgpICYmIHdyYXBwZXJGbGFnLmJhY2soKSA9PSAiICIpIHsKICAgICBjb25jYXRGbGFnQW5kQXJncyA9IGZhbHNlOwpAQCAtMzc2NCw1MSArNDIxNyw4IEBACiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gb3B0aW9uczsKLSAgICBpZiAod3JhcHBlckZsYWcuZW1wdHkoKSkgewotICAgICAgLy8gbm90aGluZyBzcGVjaWZpZWQsIGluc2VydCBlbGVtZW50cyBhcyBpcwotICAgICAgb3B0aW9ucy5yZXNlcnZlKGxpbmtlck9wdGlvbnMuc2l6ZSgpKTsKLSAgICAgIGZvciAoc3RkOjpzdHJpbmcmIG8gOiBsaW5rZXJPcHRpb25zKSB7Ci0gICAgICAgIG9wdGlvbnMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShvKSwgYnQpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIXdyYXBwZXJTZXAuZW1wdHkoKSkgewotICAgICAgICBpZiAoY29uY2F0RmxhZ0FuZEFyZ3MpIHsKLSAgICAgICAgICAvLyBpbnNlcnQgZmxhZyBlbGVtZW50cyBleGNlcHQgbGFzdCBvbmUKLSAgICAgICAgICBmb3IgKGF1dG8gaSA9IHdyYXBwZXJGbGFnLmJlZ2luKCk7IGkgIT0gd3JhcHBlckZsYWcuZW5kKCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgIG9wdGlvbnMuZW1wbGFjZV9iYWNrKCppLCBidCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGNvbmNhdGVuYXRlIGxhc3QgZmxhZyBlbGVtZW50IGFuZCBhbGwgTElOS0VSIGxpc3QgdmFsdWVzCi0gICAgICAgICAgLy8gaW4gb25lIG9wdGlvbgotICAgICAgICAgIG9wdGlvbnMuZW1wbGFjZV9iYWNrKAotICAgICAgICAgICAgd3JhcHBlckZsYWcuYmFjaygpICsgY21Kb2luKGxpbmtlck9wdGlvbnMsIHdyYXBwZXJTZXApLCBidCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IHdyYXBwZXJGbGFnKSB7Ci0gICAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjayhpLCBidCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGNvbmNhdGVuYXRlIGFsbCBMSU5LRVIgbGlzdCB2YWx1ZXMgaW4gb25lIG9wdGlvbgotICAgICAgICAgIG9wdGlvbnMuZW1wbGFjZV9iYWNrKGNtSm9pbihsaW5rZXJPcHRpb25zLCB3cmFwcGVyU2VwKSwgYnQpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBwcmVmaXggZWFjaCBlbGVtZW50IG9mIExJTktFUiBsaXN0IHdpdGggd3JhcHBlcgotICAgICAgICBpZiAoY29uY2F0RmxhZ0FuZEFyZ3MpIHsKLSAgICAgICAgICBzdGQ6OnRyYW5zZm9ybShsaW5rZXJPcHRpb25zLmJlZ2luKCksIGxpbmtlck9wdGlvbnMuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyT3B0aW9ucy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsmd3JhcHBlckZsYWddKHN0ZDo6c3RyaW5nIGNvbnN0JiBvKSAtPiBzdGQ6OnN0cmluZyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlckZsYWcuYmFjaygpICsgbzsKLSAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nJiBvIDogbGlua2VyT3B0aW9ucykgewotICAgICAgICAgIGZvciAoYXV0byBpID0gd3JhcHBlckZsYWcuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgZSA9IGNvbmNhdEZsYWdBbmRBcmdzID8gd3JhcHBlckZsYWcuZW5kKCkgLSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHdyYXBwZXJGbGFnLmVuZCgpOwotICAgICAgICAgICAgICAgaSAhPSBlOyArK2kpIHsKLSAgICAgICAgICAgIG9wdGlvbnMuZW1wbGFjZV9iYWNrKCppLCBidCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIG9wdGlvbnMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShvKSwgYnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQorICAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gb3B0aW9ucyA9IHdyYXBPcHRpb25zKAorICAgICAgbGlua2VyT3B0aW9ucywgYnQsIHdyYXBwZXJGbGFnLCB3cmFwcGVyU2VwLCBjb25jYXRGbGFnQW5kQXJncyk7CiAgICAgcmVzdWx0Lmluc2VydChlbnRyeSwgb3B0aW9ucy5iZWdpbigpLCBvcHRpb25zLmVuZCgpKTsKICAgfQogICByZXR1cm4gcmVzdWx0OwpAQCAtMzgzNSwxNCArNDI0NSwxNCBAQAogICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyIGRhZ0NoZWNrZXIodGhpcywgIlNUQVRJQ19MSUJSQVJZX09QVElPTlMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cmllczsKLSAgaWYgKGNvbnN0IGNoYXIqIGxpbmtPcHRpb25zID0gdGhpcy0+R2V0UHJvcGVydHkoIlNUQVRJQ19MSUJSQVJZX09QVElPTlMiKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRpb25zID0gY21FeHBhbmRlZExpc3QobGlua09wdGlvbnMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllczsKKyAgaWYgKGNtUHJvcCBsaW5rT3B0aW9ucyA9IHRoaXMtPkdldFByb3BlcnR5KCJTVEFUSUNfTElCUkFSWV9PUFRJT05TIikpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9ucyA9IGNtRXhwYW5kZWRMaXN0KCpsaW5rT3B0aW9ucyk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBvcHRpb24gOiBvcHRpb25zKSB7CiAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cnkgPQogICAgICAgICBDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KG9wdGlvbik7Ci0gICAgICBlbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkodGhpcywgY29uZmlnLCBsYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgKmVudHJ5KSk7CisgICAgICBlbnRyaWVzLkVudHJpZXMuZW1wbGFjZV9iYWNrKEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgKKyAgICAgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsICplbnRyeSkpOwogICAgIH0KICAgfQogICBwcm9jZXNzT3B0aW9ucyh0aGlzLCBlbnRyaWVzLCByZXN1bHQsIHVuaXF1ZU9wdGlvbnMsIGZhbHNlLApAQCAtMzg1MywxMiArNDI2MywxMiBAQAogCiBuYW1lc3BhY2Ugewogdm9pZCBwcm9jZXNzTGlua0RpcmVjdG9yaWVzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4mIGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzJiBlbnRyaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIGRpcmVjdG9yaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4mIHVuaXF1ZURpcmVjdG9yaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVidWdEaXJlY3RvcmllcykKIHsKLSAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5JiBlbnRyeSA6IGVudHJpZXMpIHsKKyAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5JiBlbnRyeSA6IGVudHJpZXMuRW50cmllcykgewogICAgIGNtTGlua0ltcGxJdGVtIGNvbnN0JiBpdGVtID0gZW50cnkuTGlua0ltcGxJdGVtOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YXJnZXROYW1lID0gaXRlbS5Bc1N0cigpOwogCkBAIC0zOTQ0LDIyICs0MzU0LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVidWdQcm9wZXJ0aWVzOwotICBjb25zdCBjaGFyKiBkZWJ1Z1Byb3AgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIpOwotICBpZiAoZGVidWdQcm9wKSB7Ci0gICAgY21FeHBhbmRMaXN0KGRlYnVnUHJvcCwgZGVidWdQcm9wZXJ0aWVzKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1Byb3BlcnRpZXMpOwogCiAgIGJvb2wgZGVidWdEaXJlY3RvcmllcyA9ICF0aGlzLT5EZWJ1Z0xpbmtEaXJlY3Rvcmllc0RvbmUgJiYKLSAgICBjbUNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIkxJTktfRElSRUNUT1JJRVMiKTsKKyAgICBjbTo6Y29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiTElOS19ESVJFQ1RPUklFUyIpOwogCiAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENvbmZpZ3VyZURvbmVDTVAwMDI2KCkpIHsKICAgICB0aGlzLT5EZWJ1Z0xpbmtEaXJlY3Rvcmllc0RvbmUgPSB0cnVlOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cmllcyA9Ci0gICAgRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXModGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TGlua0RpcmVjdG9yaWVzRW50cmllcyk7CisgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyBlbnRyaWVzID0gRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXMoCisgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsIHRoaXMtPkxpbmtEaXJlY3Rvcmllc0VudHJpZXMpOwogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0xJTktfRElSRUNUT1JJRVMiLCBsYW5ndWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgZW50cmllcywKQEAgLTM5OTAsMTQgKzQzOTYsMTQgQEAKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBkYWdDaGVja2VyKHRoaXMsICJMSU5LX0RFUEVORFMiLCBudWxscHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CiAKLSAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cmllczsKLSAgaWYgKGNvbnN0IGNoYXIqIGxpbmtEZXBlbmRzID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfREVQRU5EUyIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMgPSBjbUV4cGFuZGVkTGlzdChsaW5rRGVwZW5kcyk7CisgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyBlbnRyaWVzOworICBpZiAoY21Qcm9wIGxpbmtEZXBlbmRzID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfREVQRU5EUyIpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMgPSBjbUV4cGFuZGVkTGlzdCgqbGlua0RlcGVuZHMpOwogICAgIGZvciAoY29uc3QgYXV0byYgZGVwZW5kIDogZGVwZW5kcykgewogICAgICAgc3RkOjp1bmlxdWVfcHRyPFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJ5ID0KICAgICAgICAgQ3JlYXRlVGFyZ2V0UHJvcGVydHlFbnRyeShkZXBlbmQpOwotICAgICAgZW50cmllcy5lbXBsYWNlX2JhY2soRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsICplbnRyeSkpOworICAgICAgZW50cmllcy5FbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkoCisgICAgICAgIHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLCAqZW50cnkpKTsKICAgICB9CiAgIH0KICAgQWRkSW50ZXJmYWNlRW50cmllcyh0aGlzLCBjb25maWcsICJJTlRFUkZBQ0VfTElOS19ERVBFTkRTIiwgbGFuZ3VhZ2UsCkBAIC00MDYxLDEyICs0NDY3LDc1IEBACiAKIGJvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVDb21waWxlRmVhdHVyZXMoc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykgY29uc3QKIHsKKyAgLy8gQ29tcHV0ZSB0aGUgbGFuZ3VhZ2Ugc3RhbmRhcmQgYmFzZWQgb24gdGhlIGNvbXBpbGUgZmVhdHVyZXMuCisgIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyIHN0YW5kYXJkUmVzb2x2ZXIodGhpcy0+TWFrZWZpbGUpOwogICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IGZlYXR1cmVzID0gdGhpcy0+R2V0Q29tcGlsZUZlYXR1cmVzKGNvbmZpZyk7CiAgIGZvciAoQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBmIDogZmVhdHVyZXMpIHsKLSAgICBpZiAoIXRoaXMtPk1ha2VmaWxlLT5BZGRSZXF1aXJlZFRhcmdldEZlYXR1cmUodGhpcy0+VGFyZ2V0LCBmLlZhbHVlKSkgeworICAgIHN0ZDo6c3RyaW5nIGxhbmc7CisgICAgaWYgKCFzdGFuZGFyZFJlc29sdmVyLkNvbXBpbGVGZWF0dXJlS25vd24odGhpcy0+VGFyZ2V0LT5HZXROYW1lKCksIGYuVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZywgbnVsbHB0cikpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSwgJy0nLCBsYW5nKTsKKyAgICBjbVByb3AgY3VycmVudExhbmd1YWdlU3RhbmRhcmQgPSB0aGlzLT5HZXRMYW5ndWFnZVN0YW5kYXJkKGxhbmcsIGNvbmZpZyk7CisKKyAgICBzdGQ6OnN0cmluZyBuZXdSZXF1aXJlZFN0YW5kYXJkOworICAgIGlmICghc3RhbmRhcmRSZXNvbHZlci5HZXROZXdSZXF1aXJlZFN0YW5kYXJkKAorICAgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0TmFtZSgpLCBmLlZhbHVlLCBjdXJyZW50TGFuZ3VhZ2VTdGFuZGFyZCwKKyAgICAgICAgICBuZXdSZXF1aXJlZFN0YW5kYXJkKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbmV3UmVxdWlyZWRTdGFuZGFyZC5lbXB0eSgpKSB7CisgICAgICBCVHM8c3RkOjpzdHJpbmc+JiBsYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkgPQorICAgICAgICB0aGlzLT5MYW5ndWFnZVN0YW5kYXJkTWFwW2tleV07CisgICAgICBpZiAobGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlICE9IG5ld1JlcXVpcmVkU3RhbmRhcmQpIHsKKyAgICAgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlID0gbmV3UmVxdWlyZWRTdGFuZGFyZDsKKyAgICAgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LkJhY2t0cmFjZXMuY2xlYXIoKTsKKyAgICAgIH0KKyAgICAgIGxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0eS5CYWNrdHJhY2VzLmVtcGxhY2VfYmFjayhmLkJhY2t0cmFjZSk7CisgICAgfQogICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVDb21waWxlRmVhdHVyZXMoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsIHN0ZDo6c2V0PExhbmd1YWdlUGFpcj4gY29uc3QmIGxhbmd1YWdlUGFpcnMpIGNvbnN0Cit7CisgIGZvciAoY29uc3QgYXV0byYgbGFuZ3VhZ2UgOiBsYW5ndWFnZVBhaXJzKSB7CisgICAgQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogZ2VuZXJhdG9yVGFyZ2V0TGFuZ3VhZ2VTdGFuZGFyZCA9CisgICAgICB0aGlzLT5HZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkobGFuZ3VhZ2UuZmlyc3QsIGNvbmZpZyk7CisgICAgaWYgKCFnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkKSB7CisgICAgICAvLyBJZiB0aGUgc3RhbmRhcmQgaXNuJ3QgZXhwbGljaXRseSBzZXQgd2UgY29weSBpdCBvdmVyIGZyb20gdGhlCisgICAgICAvLyBzcGVjaWZpZWQgcGFpcmVkIGxhbmd1YWdlLgorICAgICAgc3RkOjpzdHJpbmcga2V5ID0KKyAgICAgICAgY21TdHJDYXQoY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyksICctJywgbGFuZ3VhZ2UuZmlyc3QpOworICAgICAgQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogc3RhbmRhcmRUb0NvcHkgPQorICAgICAgICB0aGlzLT5HZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkobGFuZ3VhZ2Uuc2Vjb25kLCBjb25maWcpOworICAgICAgaWYgKHN0YW5kYXJkVG9Db3B5ICE9IG51bGxwdHIpIHsKKyAgICAgICAgdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcFtrZXldID0gKnN0YW5kYXJkVG9Db3B5OworICAgICAgICBnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkID0gJnRoaXMtPkxhbmd1YWdlU3RhbmRhcmRNYXBba2V5XTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNtUHJvcCBkZWZhdWx0U3RhbmRhcmQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKAorICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5ndWFnZS5zZWNvbmQsICJfU1RBTkRBUkRfREVGQVVMVCIpKTsKKyAgICAgICAgaWYgKGRlZmF1bHRTdGFuZGFyZCAhPSBudWxscHRyKSB7CisgICAgICAgICAgdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcFtrZXldID0gQlRzPHN0ZDo6c3RyaW5nPigqZGVmYXVsdFN0YW5kYXJkKTsKKyAgICAgICAgICBnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkID0gJnRoaXMtPkxhbmd1YWdlU3RhbmRhcmRNYXBba2V5XTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBDdXN0b20gdXBkYXRlcyBmb3IgdGhlIENVREEgc3RhbmRhcmQuCisgICAgICBpZiAoZ2VuZXJhdG9yVGFyZ2V0TGFuZ3VhZ2VTdGFuZGFyZCAhPSBudWxscHRyICYmCisgICAgICAgICAgbGFuZ3VhZ2UuZmlyc3QgPT0gIkNVREEiKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkLT5WYWx1ZSA9PSAiOTgiKSB7CisgICAgICAgICAgdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcFtrZXldLlZhbHVlID0gIjAzIjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCiAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MTUyLDggKzQ2MjEsOCBAQAogICB9CiAKICAgLy8gQ2hlY2sgZm9yIGxpYnJhcnkgdmVyc2lvbiBwcm9wZXJ0aWVzLgotICBjb25zdCBjaGFyKiB2ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlZFUlNJT04iKTsKLSAgY29uc3QgY2hhciogc292ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpOworICBjbVByb3AgdmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJWRVJTSU9OIik7CisgIGNtUHJvcCBzb3ZlcnNpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiU09WRVJTSU9OIik7CiAgIGlmICghdGhpcy0+SGFzU09OYW1lKGNvbmZpZykgfHwKICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QTEFURk9STV9OT19WRVJTSU9ORURfU09OQU1FIikgfHwKICAgICAgIHRoaXMtPklzRnJhbWV3b3JrT25BcHBsZSgpKSB7CkBAIC00MTg4LDE3ICs0NjU3LDE4IEBACiAgICAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRoaXMtPkdldEZyYW1ld29ya1ZlcnNpb24oKTsKICAgICAgIHRhcmdldE5hbWVzLlJlYWwgKz0gIi8iOwogICAgIH0KLSAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRhcmdldE5hbWVzLkJhc2U7Ci0gICAgdGFyZ2V0TmFtZXMuU2hhcmVkT2JqZWN0ID0gdGFyZ2V0TmFtZXMuUmVhbDsKKyAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRhcmdldE5hbWVzLkJhc2UgKyBzdWZmaXg7CisgICAgdGFyZ2V0TmFtZXMuU2hhcmVkT2JqZWN0ID0gdGFyZ2V0TmFtZXMuUmVhbCArIHN1ZmZpeDsKICAgfSBlbHNlIHsKICAgICAvLyBUaGUgbGlicmFyeSdzIHNvbmFtZS4KICAgICB0aGlzLT5Db21wdXRlVmVyc2lvbmVkTmFtZSh0YXJnZXROYW1lcy5TaGFyZWRPYmplY3QsIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lcy5CYXNlLCBzdWZmaXgsIHRhcmdldE5hbWVzLk91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3ZlcnNpb24gPyBzb3ZlcnNpb24tPmNfc3RyKCkgOiBudWxscHRyKSk7CiAKICAgICAvLyBUaGUgbGlicmFyeSdzIHJlYWwgbmFtZSBvbiBkaXNrLgogICAgIHRoaXMtPkNvbXB1dGVWZXJzaW9uZWROYW1lKHRhcmdldE5hbWVzLlJlYWwsIHByZWZpeCwgdGFyZ2V0TmFtZXMuQmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXgsIHRhcmdldE5hbWVzLk91dHB1dCwgdmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LCB0YXJnZXROYW1lcy5PdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24gPyB2ZXJzaW9uLT5jX3N0cigpIDogbnVsbHB0cikpOwogICB9CiAKICAgLy8gVGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUuCkBAIC00MjMxLDEwICs0NzAxLDEzIEBACiAvLyBUaGlzIHZlcnNpb25pbmcgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIGV4ZWN1dGFibGVzIGFuZCB0aGVuIG9ubHkKIC8vIHdoZW4gdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHN5bWJvbGljIGxpbmtzLgogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQotICBjb25zdCBjaGFyKiB2ZXJzaW9uID0gMDsKKyAgY29uc3QgY2hhciogdmVyc2lvbiA9IG51bGxwdHI7CiAjZWxzZQogICAvLyBDaGVjayBmb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIHByb3BlcnRpZXMuCi0gIGNvbnN0IGNoYXIqIHZlcnNpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiVkVSU0lPTiIpOworICBjb25zdCBjaGFyKiB2ZXJzaW9uID0gbnVsbHB0cjsKKyAgaWYgKGNtUHJvcCBwID0gdGhpcy0+R2V0UHJvcGVydHkoIlZFUlNJT04iKSkgeworICAgIHZlcnNpb24gPSBwLT5jX3N0cigpOworICB9CiAgIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFIHx8CiAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNPbigiWENPREUiKSkgewogICAgIHZlcnNpb24gPSBudWxscHRyOwpAQCAtNDM2NCwxNSArNDgzNywyMyBAQAogICBvdXRCYXNlICs9IHRoaXMtPkdldE91dHB1dE5hbWUoY29uZmlnLCBhcnRpZmFjdCk7CiAKICAgLy8gQXBwZW5kIHRoZSBwZXItY29uZmlndXJhdGlvbiBwb3N0Zml4LgotICBvdXRCYXNlICs9IGNvbmZpZ1Bvc3RmaXg7CisgIC8vIFdoZW4gdXNpbmcgWGNvZGUsIHRoZSBwb3N0Zml4IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdWZmaXggcmF0aGVyIHRoYW4KKyAgLy8gdGhlIGJhc2UsIGJlY2F1c2UgdGhlIHN1ZmZpeCBlbmRzIHVwIGJlaW5nIHVzZWQgaW4gWGNvZGUncworICAvLyBFWEVDVVRBQkxFX1NVRkZJWCBhdHRyaWJ1dGUuCisgIGlmICh0aGlzLT5Jc0ZyYW1ld29ya09uQXBwbGUoKSAmJgorICAgICAgR2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE5hbWUoKSA9PSAiWGNvZGUiKSB7CisgICAgdGFyZ2V0U3VmZml4ID0gY29uZmlnUG9zdGZpeC5jX3N0cigpOworICB9IGVsc2UgeworICAgIG91dEJhc2UgKz0gY29uZmlnUG9zdGZpeDsKKyAgfQogCiAgIC8vIE5hbWUgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZWlyIHZlcnNpb24gbnVtYmVyIG9uIHNvbWUgcGxhdGZvcm1zLgotICBpZiAoY29uc3QgY2hhciogc292ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpKSB7CisgIGlmIChjbVByb3Agc292ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpKSB7CiAgICAgaWYgKHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZICYmCiAgICAgICAgICFpc0ltcG9ydGVkTGlicmFyeUFydGlmYWN0ICYmCiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9TSEFSRURfTElCUkFSWV9OQU1FX1dJVEhfVkVSU0lPTiIpKSB7CiAgICAgICBvdXRCYXNlICs9ICItIjsKLSAgICAgIG91dEJhc2UgKz0gc292ZXJzaW9uOworICAgICAgb3V0QmFzZSArPSAqc292ZXJzaW9uOwogICAgIH0KICAgfQogCkBAIC00NDAzLDggKzQ4ODQsOCBAQAogICBwcm9wcy5lbXBsYWNlX2JhY2soIlBEQl9OQU1FIik7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IHByb3BzKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIG91dE5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwKSkgewotICAgICAgYmFzZSA9IG91dE5hbWU7CisgICAgaWYgKGNtUHJvcCBvdXROYW1lID0gdGhpcy0+R2V0UHJvcGVydHkocCkpIHsKKyAgICAgIGJhc2UgPSAqb3V0TmFtZTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgfQpAQCAtNDQzMCw4ICs0OTExLDggQEAKICAgcHJvcHMuZW1wbGFjZV9iYWNrKCJQREJfTkFNRSIpOwogCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiBwcm9wcykgewotICAgIGlmIChjb25zdCBjaGFyKiBvdXROYW1lID0gdGhpcy0+R2V0UHJvcGVydHkocCkpIHsKLSAgICAgIGJhc2UgPSBvdXROYW1lOworICAgIGlmIChjbVByb3Agb3V0TmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KHApKSB7CisgICAgICBiYXNlID0gKm91dE5hbWU7CiAgICAgICBicmVhazsKICAgICB9CiAgIH0KQEAgLTQ1MDMsMTYgKzQ5ODQsMTYgQEAKICAgfSBlbHNlIHsKICAgICAvLyBIYW5kbGUgdGhlIE1BQ09TWF9QQUNLQUdFX0xPQ0FUSU9OIHByb3BlcnR5IG9uIHNvdXJjZSBmaWxlcyB0aGF0CiAgICAgLy8gd2VyZSBub3QgbGlzdGVkIGluIG9uZSBvZiB0aGUgb3RoZXIgbGlzdHMuCi0gICAgaWYgKGNvbnN0IGNoYXIqIGxvY2F0aW9uID0gc2YtPkdldFByb3BlcnR5KCJNQUNPU1hfUEFDS0FHRV9MT0NBVElPTiIpKSB7Ci0gICAgICBmbGFncy5NYWNGb2xkZXIgPSBsb2NhdGlvbjsKKyAgICBpZiAoY21Qcm9wIGxvY2F0aW9uID0gc2YtPkdldFByb3BlcnR5KCJNQUNPU1hfUEFDS0FHRV9MT0NBVElPTiIpKSB7CisgICAgICBmbGFncy5NYWNGb2xkZXIgPSBsb2NhdGlvbi0+Y19zdHIoKTsKICAgICAgIGNvbnN0IGJvb2wgc3RyaXBSZXNvdXJjZXMgPQogICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlNob3VsZFN0cmlwUmVzb3VyY2VQYXRoKHRoaXMtPk1ha2VmaWxlKTsKLSAgICAgIGlmIChzdHJjbXAobG9jYXRpb24sICJSZXNvdXJjZXMiKSA9PSAwKSB7CisgICAgICBpZiAoKmxvY2F0aW9uID09ICJSZXNvdXJjZXMiKSB7CiAgICAgICAgIGZsYWdzLlR5cGUgPSBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlRmlsZVR5cGVSZXNvdXJjZTsKICAgICAgICAgaWYgKHN0cmlwUmVzb3VyY2VzKSB7CiAgICAgICAgICAgZmxhZ3MuTWFjRm9sZGVyID0gIiI7CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxvY2F0aW9uLCAiUmVzb3VyY2VzLyIpKSB7CisgICAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeCgqbG9jYXRpb24sICJSZXNvdXJjZXMvIikpIHsKICAgICAgICAgZmxhZ3MuVHlwZSA9IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlVHlwZURlZXBSZXNvdXJjZTsKICAgICAgICAgaWYgKHN0cmlwUmVzb3VyY2VzKSB7CiAgICAgICAgICAgZmxhZ3MuTWFjRm9sZGVyICs9IHN0cmxlbigiUmVzb3VyY2VzLyIpOwpAQCAtNDUzMyw4ICs1MDE0LDggQEAKICAgdGhpcy0+U291cmNlRmlsZUZsYWdzQ29uc3RydWN0ZWQgPSB0cnVlOwogCiAgIC8vIFByb2Nlc3MgcHVibGljIGhlYWRlcnMgdG8gbWFyayB0aGUgc291cmNlIGZpbGVzLgotICBpZiAoY29uc3QgY2hhciogZmlsZXMgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiUFVCTElDX0hFQURFUiIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlbEZpbGVzID0gY21FeHBhbmRlZExpc3QoZmlsZXMpOworICBpZiAoY21Qcm9wIGZpbGVzID0gdGhpcy0+R2V0UHJvcGVydHkoIlBVQkxJQ19IRUFERVIiKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KCpmaWxlcyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcmVsRmlsZSA6IHJlbEZpbGVzKSB7CiAgICAgICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTb3VyY2UocmVsRmlsZSkpIHsKICAgICAgICAgU291cmNlRmlsZUZsYWdzJiBmbGFncyA9IHRoaXMtPlNvdXJjZUZsYWdzTWFwW3NmXTsKQEAgLTQ1NDYsOCArNTAyNyw4IEBACiAKICAgLy8gUHJvY2VzcyBwcml2YXRlIGhlYWRlcnMgYWZ0ZXIgcHVibGljIGhlYWRlcnMgc28gdGhhdCB0aGV5IHRha2UKICAgLy8gcHJlY2VkZW5jZSBpZiBhIGZpbGUgaXMgbGlzdGVkIGluIGJvdGguCi0gIGlmIChjb25zdCBjaGFyKiBmaWxlcyA9IHRoaXMtPkdldFByb3BlcnR5KCJQUklWQVRFX0hFQURFUiIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlbEZpbGVzID0gY21FeHBhbmRlZExpc3QoZmlsZXMpOworICBpZiAoY21Qcm9wIGZpbGVzID0gdGhpcy0+R2V0UHJvcGVydHkoIlBSSVZBVEVfSEVBREVSIikpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHJlbEZpbGUgOiByZWxGaWxlcykgewogICAgICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlKHJlbEZpbGUpKSB7CiAgICAgICAgIFNvdXJjZUZpbGVGbGFncyYgZmxhZ3MgPSB0aGlzLT5Tb3VyY2VGbGFnc01hcFtzZl07CkBAIC00NTU4LDggKzUwMzksOCBAQAogICB9CiAKICAgLy8gTWFyayBzb3VyY2VzIGxpc3RlZCBhcyByZXNvdXJjZXMuCi0gIGlmIChjb25zdCBjaGFyKiBmaWxlcyA9IHRoaXMtPkdldFByb3BlcnR5KCJSRVNPVVJDRSIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlbEZpbGVzID0gY21FeHBhbmRlZExpc3QoZmlsZXMpOworICBpZiAoY21Qcm9wIGZpbGVzID0gdGhpcy0+R2V0UHJvcGVydHkoIlJFU09VUkNFIikpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHJlbEZpbGUgOiByZWxGaWxlcykgewogICAgICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlKHJlbEZpbGUpKSB7CiAgICAgICAgIFNvdXJjZUZpbGVGbGFncyYgZmxhZ3MgPSB0aGlzLT5Tb3VyY2VGbGFnc01hcFtzZl07CkBAIC00NTg2LDkgKzUwNjcsOSBAQAogICAgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uQ2xvc3VyZShjb25maWcpOwogICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGxpIDogZGVwcykgewogI2RlZmluZSBDTV9SRUFEX0NPTVBBVElCTEVfSU5URVJGQUNFKFgsIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoY29uc3QgY2hhciogcHJvcCA9IGxpLT5HZXRQcm9wZXJ0eSgiQ09NUEFUSUJMRV9JTlRFUkZBQ0VfIiAjWCkpIHsgICAgICAgXAorICBpZiAoY21Qcm9wIHByb3AgPSBsaS0+R2V0UHJvcGVydHkoIkNPTVBBVElCTEVfSU5URVJGQUNFXyIgI1gpKSB7ICAgICAgICAgICAgXAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNtRXhwYW5kTGlzdChwcm9wLCBwcm9wcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNtRXhwYW5kTGlzdCgqcHJvcCwgcHJvcHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvbXBhdC5Qcm9wcyMjeC5pbnNlcnQocHJvcHMuYmVnaW4oKSwgcHJvcHMuZW5kKCkpOyAgICAgICAgICAgICAgICAgICAgICAgXAogICB9CiAgICAgICBDTV9SRUFEX0NPTVBBVElCTEVfSU5URVJGQUNFKEJPT0wsIEJvb2wpCkBAIC00Njk2LDEyICs1MTc3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBDb21wYXRpYmxlVHlwZSB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlUeXBlKiAvKnVudXNlZCovKQogewotICBjb25zdCBjaGFyKiBwcm9wID0gZGVwZW5kZWUtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgY21Qcm9wIHByb3AgPSBkZXBlbmRlZS0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogICBpZiAoIXByb3ApIHsKICAgICByZXR1cm47CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QoKnByb3ApOwogICBzdGQ6OnN0cmluZyBwZGlyID0KICAgICBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZVJvb3QoKSwgIi9IZWxwL3Byb3BfdGd0LyIpOwogCkBAIC00ODU1LDcgKzUzMzYsOCBAQAogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwogICAgIGUgPDwgIlByb3BlcnR5IFwiIiA8PCBwcm9wIDw8ICJcIiBhcHBlYXJzIGluIGJvdGggdGhlICIgPDwgcHJvcHNTdHJpbmcKICAgICAgIDw8ICIgcHJvcGVydHkgaW4gdGhlIGRlcGVuZGVuY2llcyBvZiB0YXJnZXQgXCIiIDw8IHRoaXMtPkdldE5hbWUoKQotICAgICAgPDwgIlwiLiAgVGhpcyBpcyBub3QgYWxsb3dlZC4gQSBwcm9wZXJ0eSBtYXkgb25seSByZXF1aXJlIGNvbXBhdGliaWxpdHkgIgorICAgICAgPDwgIlwiLiAgVGhpcyBpcyBub3QgYWxsb3dlZC4gQSBwcm9wZXJ0eSBtYXkgb25seSByZXF1aXJlICIKKyAgICAgICAgICJjb21wYXRpYmlsaXR5ICIKICAgICAgICAgICJpbiBhIGJvb2xlYW4gaW50ZXJwcmV0YXRpb24sIGEgbnVtZXJpYyBtaW5pbXVtLCBhIG51bWVyaWMgbWF4aW11bSAiCiAgICAgICAgICAib3IgYSAiCiAgICAgICAgICAic3RyaW5nIGludGVycHJldGF0aW9uLCBidXQgbm90IGEgbWl4dHVyZS4iOwpAQCAtNDkzMCw4ICs1NDEyLDggQEAKICAgICByZXR1cm4gdGd0LT5HZXRQcm9wZXJ0eUFzQm9vbChwcm9wKTsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wKTsKLSAgcmV0dXJuIGNtSXNPbihnZW5leEludGVycHJldGVyLT5FdmFsdWF0ZSh2YWx1ZSwgcHJvcCkpOworICBjbVByb3AgdmFsdWUgPSB0Z3QtPkdldFByb3BlcnR5KHByb3ApOworICByZXR1cm4gY21Jc09uKGdlbmV4SW50ZXJwcmV0ZXItPkV2YWx1YXRlKHZhbHVlID8gKnZhbHVlIDogIiIsIHByb3ApKTsKIH0KIAogdGVtcGxhdGUgPD4KQEAgLTQ5MzksMTMgKzU0MjEsMTMgQEAKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyKiBnZW5leEludGVycHJldGVyKQogewotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHRndC0+R2V0UHJvcGVydHkocHJvcCk7CisgIGNtUHJvcCB2YWx1ZSA9IHRndC0+R2V0UHJvcGVydHkocHJvcCk7CiAKICAgaWYgKGdlbmV4SW50ZXJwcmV0ZXIgPT0gbnVsbHB0cikgewotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+Y19zdHIoKSA6IG51bGxwdHI7CiAgIH0KIAotICByZXR1cm4gZ2VuZXhJbnRlcnByZXRlci0+RXZhbHVhdGUodmFsdWUsIHByb3ApLmNfc3RyKCk7CisgIHJldHVybiBnZW5leEludGVycHJldGVyLT5FdmFsdWF0ZSh2YWx1ZSA/ICp2YWx1ZSA6ICIiLCBwcm9wKS5jX3N0cigpOwogfQogCiB0ZW1wbGF0ZSA8PgpAQCAtNDk1MywxMyArNTQzNSwxMyBAQAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXIqIGdlbmV4SW50ZXJwcmV0ZXIpCiB7Ci0gIGNvbnN0IGNoYXIqIHZhbHVlID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgY21Qcm9wIHZhbHVlID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wKTsKIAogICBpZiAoZ2VuZXhJbnRlcnByZXRlciA9PSBudWxscHRyKSB7Ci0gICAgcmV0dXJuIHZhbHVlQXNTdHJpbmcodmFsdWUpOworICAgIHJldHVybiB2YWx1ZUFzU3RyaW5nKHZhbHVlID8gdmFsdWUtPmNfc3RyKCkgOiBudWxscHRyKTsKICAgfQogCi0gIHJldHVybiBnZW5leEludGVycHJldGVyLT5FdmFsdWF0ZSh2YWx1ZSwgcHJvcCk7CisgIHJldHVybiBnZW5leEludGVycHJldGVyLT5FdmFsdWF0ZSh2YWx1ZSA/ICp2YWx1ZSA6ICIiLCBwcm9wKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFByb3BlcnR5VHlwZT4KQEAgLTUxMDQsNyArNTU4Niw3IEBACiAgIFByb3BlcnR5VHlwZSBwcm9wQ29udGVudCA9IGdldFR5cGVkUHJvcGVydHk8UHJvcGVydHlUeXBlPih0Z3QsIHApOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBoZWFkUHJvcEtleXMgPSB0Z3QtPkdldFByb3BlcnR5S2V5cygpOwotICBjb25zdCBib29sIGV4cGxpY2l0bHlTZXQgPSBjbUNvbnRhaW5zKGhlYWRQcm9wS2V5cywgcCk7CisgIGNvbnN0IGJvb2wgZXhwbGljaXRseVNldCA9IGNtOjpjb250YWlucyhoZWFkUHJvcEtleXMsIHApOwogCiAgIGNvbnN0IGJvb2wgaW1wbGllZEJ5VXNlID0gdGd0LT5Jc051bGxJbXBsaWVkQnlMaW5rTGlicmFyaWVzKHApOwogICBhc3NlcnQoKGltcGxpZWRCeVVzZSBeIGV4cGxpY2l0bHlTZXQpIHx8ICghaW1wbGllZEJ5VXNlICYmICFleHBsaWNpdGx5U2V0KSk7CkBAIC01MTQ0LDcgKzU2MjYsNyBAQAogCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BLZXlzID0gdGhlVGFyZ2V0LT5HZXRQcm9wZXJ0eUtleXMoKTsKIAotICAgIGNvbnN0IGJvb2wgaWZhY2VJc1NldCA9IGNtQ29udGFpbnMocHJvcEtleXMsIGludGVyZmFjZVByb3BlcnR5KTsKKyAgICBjb25zdCBib29sIGlmYWNlSXNTZXQgPSBjbTo6Y29udGFpbnMocHJvcEtleXMsIGludGVyZmFjZVByb3BlcnR5KTsKICAgICBQcm9wZXJ0eVR5cGUgaWZhY2VQcm9wQ29udGVudCA9IGdldFR5cGVkUHJvcGVydHk8UHJvcGVydHlUeXBlPigKICAgICAgIHRoZVRhcmdldCwgaW50ZXJmYWNlUHJvcGVydHksIGdlbmV4SW50ZXJwcmV0ZXIuZ2V0KCkpOwogCkBAIC01MjM3LDYgKzU3MTksMTMgQEAKICAgcmV0dXJuIHByb3BDb250ZW50OwogfQogCitib29sIGNtR2VuZXJhdG9yVGFyZ2V0OjpTZXREZXZpY2VMaW5rKGJvb2wgZGV2aWNlTGluaykKK3sKKyAgYm9vbCBwcmV2aW91cyA9IHRoaXMtPkRldmljZUxpbms7CisgIHRoaXMtPkRldmljZUxpbmsgPSBkZXZpY2VMaW5rOworICByZXR1cm4gcHJldmlvdXM7Cit9CisKIGJvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkdldExpbmtJbnRlcmZhY2VEZXBlbmRlbnRCb29sUHJvcGVydHkoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewpAQCAtNTMyMywxMyArNTgxMiwxMyBAQAogCiAgIGFzc2VydCh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSk7CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHZlcnNpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wZXJ0eSkpIHsKKyAgaWYgKGNtUHJvcCB2ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcGVydHkpKSB7CiAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgdGhhdCB3ZXJlCiAgICAgLy8gc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KICAgICBpbnQgcGFyc2VkX21ham9yOwogICAgIGludCBwYXJzZWRfbWlub3I7CiAgICAgaW50IHBhcnNlZF9wYXRjaDsKLSAgICBzd2l0Y2ggKHNzY2FuZih2ZXJzaW9uLCAiJWQuJWQuJWQiLCAmcGFyc2VkX21ham9yLCAmcGFyc2VkX21pbm9yLAorICAgIHN3aXRjaCAoc3NjYW5mKHZlcnNpb24tPmNfc3RyKCksICIlZC4lZC4lZCIsICZwYXJzZWRfbWFqb3IsICZwYXJzZWRfbWlub3IsCiAgICAgICAgICAgICAgICAgICAgJnBhcnNlZF9wYXRjaCkpIHsKICAgICAgIGNhc2UgMzoKICAgICAgICAgcGF0Y2ggPSBwYXJzZWRfcGF0Y2g7CkBAIC01MzQ2LDYgKzU4MzUsMjUgQEAKICAgfQogfQogCitzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0UnVudGltZUxpbmtMaWJyYXJ5KAorICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykgY29uc3QKK3sKKyAgLy8gVGhpcyBpcyBhY3RpdmF0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIGEgZGVmYXVsdCBzZWxlY3Rpb24gd2hldGhlciBvcgorICAvLyBub3QgaXQgaXMgb3ZlcnJpZGRlbiBieSBhIHByb3BlcnR5LgorICBjbVByb3AgcnVudGltZUxpYnJhcnlEZWZhdWx0ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZigKKyAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9SVU5USU1FX0xJQlJBUllfREVGQVVMVCIpKTsKKyAgaWYgKCFjbU5vbmVtcHR5KHJ1bnRpbWVMaWJyYXJ5RGVmYXVsdCkpIHsKKyAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgfQorICBjbVByb3AgcnVudGltZUxpYnJhcnlWYWx1ZSA9CisgICAgdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1JVTlRJTUVfTElCUkFSWSIpKTsKKyAgaWYgKCFydW50aW1lTGlicmFyeVZhbHVlKSB7CisgICAgcnVudGltZUxpYnJhcnlWYWx1ZSA9IHJ1bnRpbWVMaWJyYXJ5RGVmYXVsdDsKKyAgfQorICByZXR1cm4gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCisgICAgKnJ1bnRpbWVMaWJyYXJ5VmFsdWUsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIHRoaXMpKTsKK30KKwogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEZvcnRyYW5Nb2R1bGVEaXJlY3RvcnkoCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB3b3JraW5nX2RpcikgY29uc3QKIHsKQEAgLTUzNjMsOCArNTg3MSw4IEBACiB7CiAgIHN0ZDo6c3RyaW5nIG1vZF9kaXI7CiAgIHN0ZDo6c3RyaW5nIHRhcmdldF9tb2RfZGlyOwotICBpZiAoY29uc3QgY2hhciogcHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KCJGb3J0cmFuX01PRFVMRV9ESVJFQ1RPUlkiKSkgewotICAgIHRhcmdldF9tb2RfZGlyID0gcHJvcDsKKyAgaWYgKGNtUHJvcCBwcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoIkZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWSIpKSB7CisgICAgdGFyZ2V0X21vZF9kaXIgPSAqcHJvcDsKICAgfSBlbHNlIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVmYXVsdF9tb2RfZGlyID0KICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CkBAIC01Mzk1LDExICs1OTAzLDExIEBACiB7CiAgIGFzc2VydCh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSk7CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGZ2ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIkZSQU1FV09SS19WRVJTSU9OIikpIHsKLSAgICByZXR1cm4gZnZlcnNpb247CisgIGlmIChjbVByb3AgZnZlcnNpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRlJBTUVXT1JLX1ZFUlNJT04iKSkgeworICAgIHJldHVybiAqZnZlcnNpb247CiAgIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHR2ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlZFUlNJT04iKSkgewotICAgIHJldHVybiB0dmVyc2lvbjsKKyAgaWYgKGNtUHJvcCB0dmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJWRVJTSU9OIikpIHsKKyAgICByZXR1cm4gKnR2ZXJzaW9uOwogICB9CiAgIHJldHVybiAiQSI7CiB9CkBAIC01NDI5LDE0ICs1OTM3LDExIEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21wYXRpYmlsaXR5VHlwZSkgY29uc3QKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlYnVnUHJvcGVydGllczsKLSAgY29uc3QgY2hhciogZGVidWdQcm9wID0gdGhpcy0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKAotICAgICJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIpOwotICBpZiAoZGVidWdQcm9wKSB7Ci0gICAgY21FeHBhbmRMaXN0KGRlYnVnUHJvcCwgZGVidWdQcm9wZXJ0aWVzKTsKLSAgfQorICB0aGlzLT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZkV4cGFuZExpc3QoCisgICAgIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIiwgZGVidWdQcm9wZXJ0aWVzKTsKIAotICBib29sIGRlYnVnT3JpZ2luID0KLSAgICAhdGhpcy0+RGVidWdDb21wYXRpYmxlUHJvcGVydGllc0RvbmVbcF0gJiYgY21Db250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsIHApOworICBib29sIGRlYnVnT3JpZ2luID0gIXRoaXMtPkRlYnVnQ29tcGF0aWJsZVByb3BlcnRpZXNEb25lW3BdICYmCisgICAgY206OmNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgcCk7CiAKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0Q29uZmlndXJlRG9uZUNNUDAwMjYoKSkgewogICAgIHRoaXMtPkRlYnVnQ29tcGF0aWJsZVByb3BlcnRpZXNEb25lW3BdID0gdHJ1ZTsKQEAgLTU0OTIsMzEgKzU5OTcsNDQgQEAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkV4cGFuZExpbmtJdGVtcygKICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQsIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksCi0gIHN0ZDo6dmVjdG9yPGNtTGlua0l0ZW0+JiBpdGVtcywgYm9vbCYgaGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgY29uc3QKKyAgc3RkOjp2ZWN0b3I8Y21MaW5rSXRlbT4mIGl0ZW1zLCBib29sJiBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uLAorICBib29sJiBoYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uLAorICBib29sJiBoYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24pIGNvbnN0CiB7CiAgIC8vIEtlZXAgdGhpcyBsb2dpYyBpbiBzeW5jIHdpdGggQ29tcHV0ZUxpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcy4KICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlOwogICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyIGRhZ0NoZWNrZXIodGhpcywgcHJvcCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gIC8vIFRoZSAkPExJTktfT05MWT4gZXhwcmVzc2lvbiBtYXkgYmUgaW4gYSBsaW5rIGludGVyZmFjZSB0byBzcGVjaWZ5IHByaXZhdGUKLSAgLy8gbGluayBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgb3RoZXJ3aXNlIGV4Y2x1ZGVkIGZyb20gdXNhZ2UgcmVxdWlyZW1lbnRzLgorICAvLyBUaGUgJDxMSU5LX09OTFk+IGV4cHJlc3Npb24gbWF5IGJlIGluIGEgbGluayBpbnRlcmZhY2UgdG8gc3BlY2lmeQorICAvLyBwcml2YXRlIGxpbmsgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG90aGVyd2lzZSBleGNsdWRlZCBmcm9tIHVzYWdlCisgIC8vIHJlcXVpcmVtZW50cy4KICAgaWYgKHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSB7CiAgICAgZGFnQ2hlY2tlci5TZXRUcmFuc2l0aXZlUHJvcGVydGllc09ubHkoKTsKICAgfQogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGliczsKICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPSBnZS5QYXJzZSh2YWx1ZSk7Ci0gIGNtRXhwYW5kTGlzdCgKLSAgICBjZ2UtPkV2YWx1YXRlKHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIGhlYWRUYXJnZXQsICZkYWdDaGVja2VyLCB0aGlzKSwKLSAgICBsaWJzKTsKKyAgY21FeHBhbmRMaXN0KGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgaGVhZFRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIHRoaXMsIGhlYWRUYXJnZXQtPkxpbmtlckxhbmd1YWdlKSwKKyAgICAgICAgICAgICAgIGxpYnMpOwogICB0aGlzLT5Mb29rdXBMaW5rSXRlbXMobGlicywgY2dlLT5HZXRCYWNrdHJhY2UoKSwgaXRlbXMpOwogICBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uID0gY2dlLT5HZXRIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKCk7CisgIGhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24gPSBjZ2UtPkdldEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24oKTsKKyAgaGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0KKyAgICBjZ2UtPkdldEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbigpOwogfQogCiBjbUxpbmtJbnRlcmZhY2UgY29uc3QqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMaW5rSW50ZXJmYWNlKAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZCkgY29uc3QKIHsKKyAgcmV0dXJuIHRoaXMtPkdldExpbmtJbnRlcmZhY2UoY29uZmlnLCBoZWFkLCBmYWxzZSk7Cit9CisKK2NtTGlua0ludGVyZmFjZSBjb25zdCogY21HZW5lcmF0b3JUYXJnZXQ6OkdldExpbmtJbnRlcmZhY2UoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkLAorICBib29sIHNlY29uZFBhc3MpIGNvbnN0Cit7CiAgIC8vIEltcG9ydGVkIHRhcmdldHMgaGF2ZSB0aGVpciBvd24gbGluayBpbnRlcmZhY2UuCiAgIGlmICh0aGlzLT5Jc0ltcG9ydGVkKCkpIHsKLSAgICByZXR1cm4gdGhpcy0+R2V0SW1wb3J0TGlua0ludGVyZmFjZShjb25maWcsIGhlYWQsIGZhbHNlKTsKKyAgICByZXR1cm4gdGhpcy0+R2V0SW1wb3J0TGlua0ludGVyZmFjZShjb25maWcsIGhlYWQsIGZhbHNlLCBzZWNvbmRQYXNzKTsKICAgfQogCiAgIC8vIExpbmsgaW50ZXJmYWNlcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZXhlY3V0YWJsZXMgdGhhdCBkbyBub3QKQEAgLTU1MjksNiArNjA0NywxMCBAQAogICAvLyBMb29rdXAgYW55IGV4aXN0aW5nIGxpbmsgaW50ZXJmYWNlIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uCiAgIGNtSGVhZFRvTGlua0ludGVyZmFjZU1hcCYgaG0gPSB0aGlzLT5HZXRIZWFkVG9MaW5rSW50ZXJmYWNlTWFwKGNvbmZpZyk7CiAKKyAgaWYgKHNlY29uZFBhc3MpIHsKKyAgICBobS5lcmFzZShoZWFkKTsKKyAgfQorCiAgIC8vIElmIHRoZSBsaW5rIGludGVyZmFjZSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGhlYWQgdGFyZ2V0CiAgIC8vIHRoZW4gcmV0dXJuIHRoZSBvbmUgd2UgY29tcHV0ZWQgZmlyc3QuCiAgIGlmICghaG0uZW1wdHkoKSAmJiAhaG0uYmVnaW4oKS0+c2Vjb25kLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24pIHsKQEAgLTU1NDMsNyArNjA2NSw3IEBACiAgIGlmICghaWZhY2UuQWxsRG9uZSkgewogICAgIGlmYWNlLkFsbERvbmUgPSB0cnVlOwogICAgIGlmIChpZmFjZS5FeGlzdHMpIHsKLSAgICAgIHRoaXMtPkNvbXB1dGVMaW5rSW50ZXJmYWNlKGNvbmZpZywgaWZhY2UsIGhlYWQpOworICAgICAgdGhpcy0+Q29tcHV0ZUxpbmtJbnRlcmZhY2UoY29uZmlnLCBpZmFjZSwgaGVhZCwgc2Vjb25kUGFzcyk7CiAgICAgfQogICB9CiAKQEAgLTU1NTQsNiArNjA3NiwxMyBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbU9wdGlvbmFsTGlua0ludGVyZmFjZSYgaWZhY2UsCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0KSBjb25zdAogeworICB0aGlzLT5Db21wdXRlTGlua0ludGVyZmFjZShjb25maWcsIGlmYWNlLCBoZWFkVGFyZ2V0LCBmYWxzZSk7Cit9CisKK3ZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVMaW5rSW50ZXJmYWNlKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbU9wdGlvbmFsTGlua0ludGVyZmFjZSYgaWZhY2UsCisgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LCBib29sIHNlY29uZFBhc3MpIGNvbnN0Cit7CiAgIGlmIChpZmFjZS5FeHBsaWNpdCkgewogICAgIGlmICh0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSB8fAogICAgICAgICB0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSB8fApAQCAtNTU2NSw3ICs2MDk0LDggQEAKICAgICAgICAgZW1pdHRlZC5pbnNlcnQobGliKTsKICAgICAgIH0KICAgICAgIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewotICAgICAgICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogaW1wbCA9IHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbihjb25maWcpOworICAgICAgICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogaW1wbCA9CisgICAgICAgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZywgc2Vjb25kUGFzcyk7CiAgICAgICAgIGZvciAoY21MaW5rSW1wbEl0ZW0gY29uc3QmIGxpYiA6IGltcGwtPkxpYnJhcmllcykgewogICAgICAgICAgIGlmIChlbWl0dGVkLmluc2VydChsaWIpLnNlY29uZCkgewogICAgICAgICAgICAgaWYgKGxpYi5UYXJnZXQpIHsKQEAgLTU1NzUsOSArNjEwNSw5IEBACiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC8vIFRPRE86IFJlY29nbml6ZSBzaGFyZWQgbGlicmFyeSBmaWxlIG5hbWVzLiAgUGVyaGFwcyB0aGlzCi0gICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBtb3ZlZCB0byBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24sIGJ1dCB0aGF0IGNyZWF0ZXMKLSAgICAgICAgICAgICAgLy8gYSBjaGlja2VuLWFuZC1lZ2cgcHJvYmxlbSBzaW5jZSB0aGlzIGxpc3QgaXMgbmVlZGVkIGZvciBpdHMKLSAgICAgICAgICAgICAgLy8gY29uc3RydWN0aW9uLgorICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgbW92ZWQgdG8gY21Db21wdXRlTGlua0luZm9ybWF0aW9uLCBidXQgdGhhdAorICAgICAgICAgICAgICAvLyBjcmVhdGVzIGEgY2hpY2tlbi1hbmQtZWdnIHByb2JsZW0gc2luY2UgdGhpcyBsaXN0IGlzIG5lZWRlZAorICAgICAgICAgICAgICAvLyBmb3IgaXRzIGNvbnN0cnVjdGlvbi4KICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU1OTUsNyArNjEyNSw3IEBACiAgIGlmICh0aGlzLT5MaW5rTGFuZ3VhZ2VQcm9wYWdhdGVzVG9EZXBlbmRlbnRzKCkpIHsKICAgICAvLyBUYXJnZXRzIHVzaW5nIHRoaXMgYXJjaGl2ZSBuZWVkIGl0cyBsYW5ndWFnZSBydW50aW1lIGxpYnJhcmllcy4KICAgICBpZiAoY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIGltcGwgPQotICAgICAgICAgIHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbihjb25maWcpKSB7CisgICAgICAgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZywgc2Vjb25kUGFzcykpIHsKICAgICAgIGlmYWNlLkxhbmd1YWdlcyA9IGltcGwtPkxhbmd1YWdlczsKICAgICB9CiAgIH0KQEAgLTU2MTIsMTEgKzYxNDIsMTEgQEAKICAgICAvLyBIb3cgbWFueSByZXBldGl0aW9ucyBhcmUgbmVlZGVkIGlmIHRoaXMgbGlicmFyeSBoYXMgY3ljbGljCiAgICAgLy8gZGVwZW5kZW5jaWVzPwogICAgIHN0ZDo6c3RyaW5nIHByb3BOYW1lID0gY21TdHJDYXQoIkxJTktfSU5URVJGQUNFX01VTFRJUExJQ0lUWSIsIHN1ZmZpeCk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19yZXBzID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcE5hbWUpKSB7Ci0gICAgICBzc2NhbmYoY29uZmlnX3JlcHMsICIldSIsICZpZmFjZS5NdWx0aXBsaWNpdHkpOwotICAgIH0gZWxzZSBpZiAoY29uc3QgY2hhciogcmVwcyA9CisgICAgaWYgKGNtUHJvcCBjb25maWdfcmVwcyA9IHRoaXMtPkdldFByb3BlcnR5KHByb3BOYW1lKSkgeworICAgICAgc3NjYW5mKGNvbmZpZ19yZXBzLT5jX3N0cigpLCAiJXUiLCAmaWZhY2UuTXVsdGlwbGljaXR5KTsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCByZXBzID0KICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfSU5URVJGQUNFX01VTFRJUExJQ0lUWSIpKSB7Ci0gICAgICBzc2NhbmYocmVwcywgIiV1IiwgJmlmYWNlLk11bHRpcGxpY2l0eSk7CisgICAgICBzc2NhbmYocmVwcy0+Y19zdHIoKSwgIiV1IiwgJmlmYWNlLk11bHRpcGxpY2l0eSk7CiAgICAgfQogICB9CiB9CkBAIC01NjM4LDcgKzYxNjgsNiBAQAogICB9CiAKICAgLy8gTG9va3VwIGFueSBleGlzdGluZyBsaW5rIGludGVyZmFjZSBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgotICBzdGQ6OnN0cmluZyBDT05GSUcgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgY21IZWFkVG9MaW5rSW50ZXJmYWNlTWFwJiBobSA9CiAgICAgKHVzYWdlX3JlcXVpcmVtZW50c19vbmx5CiAgICAgICAgPyB0aGlzLT5HZXRIZWFkVG9MaW5rSW50ZXJmYWNlVXNhZ2VSZXF1aXJlbWVudHNNYXAoY29uZmlnKQpAQCAtNTc2NywyMSArNjI5NiwyMSBAQAogICB9CiAKICAgLy8gU2VsZWN0IGFuIG91dHB1dCBkaXJlY3RvcnkuCi0gIGlmIChjb25zdCBjaGFyKiBjb25maWdfb3V0ZGlyID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcCkpIHsKKyAgaWYgKGNtUHJvcCBjb25maWdfb3V0ZGlyID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcCkpIHsKICAgICAvLyBVc2UgdGhlIHVzZXItc3BlY2lmaWVkIHBlci1jb25maWd1cmF0aW9uIG91dHB1dCBkaXJlY3RvcnkuCi0gICAgb3V0ID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShjb25maWdfb3V0ZGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKKyAgICBvdXQgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpjb25maWdfb3V0ZGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAKICAgICAvLyBTa2lwIHBlci1jb25maWd1cmF0aW9uIHN1YmRpcmVjdG9yeS4KICAgICBjb25mLmNsZWFyKCk7Ci0gIH0gZWxzZSBpZiAoY29uc3QgY2hhciogb3V0ZGlyID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSkgeworICB9IGVsc2UgaWYgKGNtUHJvcCBvdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7CiAgICAgLy8gVXNlIHRoZSB1c2VyLXNwZWNpZmllZCBvdXRwdXQgZGlyZWN0b3J5LgogICAgIG91dCA9Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKG91dGRpciwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpvdXRkaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcpOwogCiAgICAgLy8gU2tpcCBwZXItY29uZmlndXJhdGlvbiBzdWJkaXJlY3RvcnkgaWYgdGhlIHZhbHVlIGNvbnRhaW5lZCBhCiAgICAgLy8gZ2VuZXJhdG9yIGV4cHJlc3Npb24uCi0gICAgaWYgKG91dCAhPSBvdXRkaXIpIHsKKyAgICBpZiAob3V0ICE9ICpvdXRkaXIpIHsKICAgICAgIGNvbmYuY2xlYXIoKTsKICAgICB9CiAgIH0gZWxzZSBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgewpAQCAtNTg0MywyMSArNjM3MiwyMSBAQAogICB9CiAKICAgLy8gU2VsZWN0IGFuIG91dHB1dCBkaXJlY3RvcnkuCi0gIGlmIChjb25zdCBjaGFyKiBjb25maWdfb3V0ZGlyID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcCkpIHsKKyAgaWYgKGNtUHJvcCBjb25maWdfb3V0ZGlyID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcCkpIHsKICAgICAvLyBVc2UgdGhlIHVzZXItc3BlY2lmaWVkIHBlci1jb25maWd1cmF0aW9uIG91dHB1dCBkaXJlY3RvcnkuCi0gICAgb3V0ID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShjb25maWdfb3V0ZGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKKyAgICBvdXQgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpjb25maWdfb3V0ZGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAKICAgICAvLyBTa2lwIHBlci1jb25maWd1cmF0aW9uIHN1YmRpcmVjdG9yeS4KICAgICBjb25mLmNsZWFyKCk7Ci0gIH0gZWxzZSBpZiAoY29uc3QgY2hhciogb3V0ZGlyID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSkgeworICB9IGVsc2UgaWYgKGNtUHJvcCBvdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7CiAgICAgLy8gVXNlIHRoZSB1c2VyLXNwZWNpZmllZCBvdXRwdXQgZGlyZWN0b3J5LgogICAgIG91dCA9Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKG91dGRpciwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpvdXRkaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcpOwogCiAgICAgLy8gU2tpcCBwZXItY29uZmlndXJhdGlvbiBzdWJkaXJlY3RvcnkgaWYgdGhlIHZhbHVlIGNvbnRhaW5lZCBhCiAgICAgLy8gZ2VuZXJhdG9yIGV4cHJlc3Npb24uCi0gICAgaWYgKG91dCAhPSBvdXRkaXIpIHsKKyAgICBpZiAob3V0ICE9ICpvdXRkaXIpIHsKICAgICAgIGNvbmYuY2xlYXIoKTsKICAgICB9CiAgIH0KQEAgLTU5MDMsMTIgKzY0MzIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHJwYXRoKSBjb25zdAogewotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOworICBjbVByb3AgdmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKTsKICAgaWYgKCF2YWx1ZSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIHJwYXRoID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSh2YWx1ZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisgIHJwYXRoID0KKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCp2YWx1ZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CiAKICAgcmV0dXJuIHRydWU7CiB9CkBAIC01OTI3LDcgKzY0NTcsNyBAQAogCiAgIC8vIEFuIGV4cGxpY2l0IGxpc3Qgb2YgaW50ZXJmYWNlIGxpYnJhcmllcyBtYXkgYmUgc2V0IGZvciBzaGFyZWQKICAgLy8gbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyB0aGF0IGV4cG9ydCBzeW1ib2xzLgotICBjb25zdCBjaGFyKiBleHBsaWNpdExpYnJhcmllcyA9IG51bGxwdHI7CisgIGNtUHJvcCBleHBsaWNpdExpYnJhcmllcyA9IG51bGxwdHI7CiAgIHN0ZDo6c3RyaW5nIGxpbmtJZmFjZVByb3A7CiAgIGJvb2wgY29uc3QgY21wMDAyMk5FVyA9ICh0aGlzLT5HZXRQb2xpY3lTdGF0dXNDTVAwMDIyKCkgIT0gY21Qb2xpY2llczo6T0xEICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQb2xpY3lTdGF0dXNDTVAwMDIyKCkgIT0gY21Qb2xpY2llczo6V0FSTik7CkBAIC01OTU2LDEwICs2NDg2LDEwIEBACiAgICAgICAhdGhpcy0+UG9saWN5V2FybmVkQ01QMDAyMikgewogICAgIC8vIENvbXBhcmUgdGhlIGV4cGxpY2l0bHkgc2V0IG9sZCBsaW5rIGludGVyZmFjZSBwcm9wZXJ0aWVzIHRvIHRoZQogICAgIC8vIHByZWZlcnJlZCBuZXcgbGluayBpbnRlcmZhY2UgcHJvcGVydHkgb25lIGFuZCB3YXJuIGlmIGRpZmZlcmVudC4KLSAgICBjb25zdCBjaGFyKiBuZXdFeHBsaWNpdExpYnJhcmllcyA9CisgICAgY21Qcm9wIG5ld0V4cGxpY2l0TGlicmFyaWVzID0KICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKTsKICAgICBpZiAobmV3RXhwbGljaXRMaWJyYXJpZXMgJiYKLSAgICAgICAgc3RyY21wKG5ld0V4cGxpY2l0TGlicmFyaWVzLCBleHBsaWNpdExpYnJhcmllcykgIT0gMCkgeworICAgICAgICAoKm5ld0V4cGxpY2l0TGlicmFyaWVzICE9ICpleHBsaWNpdExpYnJhcmllcykpIHsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSB3OwogICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgICAgdyA8PCBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAwMjIpIDw8ICJcbiIKQEAgLTU5NjgsOSArNjQ5OCw5IEBACiAgICAgICAgIGxpbmtJZmFjZVByb3AgPDwgIiBwcm9wZXJ0aWVzLiIKICAgICAgICAgIlxuIgogICAgICAgICAiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTOlxuIgotICAgICAgICAiICAiIDw8IG5ld0V4cGxpY2l0TGlicmFyaWVzIDw8ICJcbiIgPDwKKyAgICAgICAgIiAgIiA8PCAqbmV3RXhwbGljaXRMaWJyYXJpZXMgPDwgIlxuIiA8PAogICAgICAgICBsaW5rSWZhY2VQcm9wIDw8ICI6XG4iCi0gICAgICAgICIgICIgPDwgZXhwbGljaXRMaWJyYXJpZXMgPDwgIlxuIjsKKyAgICAgICAgIiAgIiA8PCAqZXhwbGljaXRMaWJyYXJpZXMgPDwgIlxuIjsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsIHcuc3RyKCkpOwogICAgICAgdGhpcy0+UG9saWN5V2FybmVkQ01QMDAyMiA9IHRydWU7CkBAIC01OTg5LDkgKzY1MTksMTEgQEAKIAogICBpZiAoZXhwbGljaXRMaWJyYXJpZXMpIHsKICAgICAvLyBUaGUgaW50ZXJmYWNlIGxpYnJhcmllcyBoYXZlIGJlZW4gZXhwbGljaXRseSBzZXQuCi0gICAgdGhpcy0+RXhwYW5kTGlua0l0ZW1zKGxpbmtJZmFjZVByb3AsIGV4cGxpY2l0TGlicmFyaWVzLCBjb25maWcsIGhlYWRUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5LCBpZmFjZS5MaWJyYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24pOworICAgIHRoaXMtPkV4cGFuZExpbmtJdGVtcyhsaW5rSWZhY2VQcm9wLCAqZXhwbGljaXRMaWJyYXJpZXMsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFRhcmdldCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGlmYWNlLkxpYnJhcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKTsKICAgfSBlbHNlIGlmICghY21wMDAyMk5FVykKICAgLy8gSWYgQ01QMDAyMiBpcyBORVcgdGhlbiB0aGUgcGxhaW4gdGxsIHNpZ25hdHVyZSBzZXRzIHRoZQogICAvLyBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMsIHNvIGlmIHdlIGdldCBoZXJlIHRoZW4gdGhlIHByb2plY3QKQEAgLTYwMDksMTEgKzY1NDEsMTUgQEAKICAgICAgIC8vIHByZWZlcnJlZCBuZXcgbGluayBpbnRlcmZhY2UgcHJvcGVydHkgYW5kIHdhcm4gaWYgZGlmZmVyZW50LgogICAgICAgc3RkOjp2ZWN0b3I8Y21MaW5rSXRlbT4gaWZhY2VMaWJzOwogICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIG5ld1Byb3AgPSAiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIjsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBuZXdFeHBsaWNpdExpYnJhcmllcyA9IHRoaXMtPkdldFByb3BlcnR5KG5ld1Byb3ApKSB7CisgICAgICBpZiAoY21Qcm9wIG5ld0V4cGxpY2l0TGlicmFyaWVzID0gdGhpcy0+R2V0UHJvcGVydHkobmV3UHJvcCkpIHsKICAgICAgICAgYm9vbCBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uRHVtbXkgPSBmYWxzZTsKLSAgICAgICAgdGhpcy0+RXhwYW5kTGlua0l0ZW1zKG5ld1Byb3AsIG5ld0V4cGxpY2l0TGlicmFyaWVzLCBjb25maWcsCisgICAgICAgIGJvb2wgaGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbkR1bW15ID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uRHVtbXkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy0+RXhwYW5kTGlua0l0ZW1zKG5ld1Byb3AsICpuZXdFeHBsaWNpdExpYnJhcmllcywgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFRhcmdldCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGlmYWNlTGlicywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb25EdW1teSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uRHVtbXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uRHVtbXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb25EdW1teSk7CiAgICAgICB9CiAgICAgICBpZiAoaWZhY2VMaWJzICE9IGlmYWNlLkxpYnJhcmllcykgewogICAgICAgICBzdGQ6OnN0cmluZyBvbGRMaWJyYXJpZXMgPSBjbUpvaW4oaW1wbC0+TGlicmFyaWVzLCAiOyIpOwpAQCAtNjA1MCwxOSArNjU4NiwyMiBAQAogCiBjb25zdCBjbUxpbmtJbnRlcmZhY2UqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRJbXBvcnRMaW5rSW50ZXJmYWNlKAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCwKLSAgYm9vbCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSkgY29uc3QKKyAgYm9vbCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSwgYm9vbCBzZWNvbmRQYXNzKSBjb25zdAogewogICBjbUdlbmVyYXRvclRhcmdldDo6SW1wb3J0SW5mbyBjb25zdCogaW5mbyA9IHRoaXMtPkdldEltcG9ydEluZm8oY29uZmlnKTsKICAgaWYgKCFpbmZvKSB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAotICBzdGQ6OnN0cmluZyBDT05GSUcgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgY21IZWFkVG9MaW5rSW50ZXJmYWNlTWFwJiBobSA9CiAgICAgKHVzYWdlX3JlcXVpcmVtZW50c19vbmx5CiAgICAgICAgPyB0aGlzLT5HZXRIZWFkVG9MaW5rSW50ZXJmYWNlVXNhZ2VSZXF1aXJlbWVudHNNYXAoY29uZmlnKQogICAgICAgIDogdGhpcy0+R2V0SGVhZFRvTGlua0ludGVyZmFjZU1hcChjb25maWcpKTsKIAorICBpZiAoc2Vjb25kUGFzcykgeworICAgIGhtLmVyYXNlKGhlYWRUYXJnZXQpOworICB9CisKICAgLy8gSWYgdGhlIGxpbmsgaW50ZXJmYWNlIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgaGVhZCB0YXJnZXQKICAgLy8gdGhlbiByZXR1cm4gdGhlIG9uZSB3ZSBjb21wdXRlZCBmaXJzdC4KICAgaWYgKCFobS5lbXB0eSgpICYmICFobS5iZWdpbigpLT5zZWNvbmQuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgewpAQCAtNjA3Niw3ICs2NjE1LDkgQEAKICAgICBjbUV4cGFuZExpc3QoaW5mby0+TGFuZ3VhZ2VzLCBpZmFjZS5MYW5ndWFnZXMpOwogICAgIHRoaXMtPkV4cGFuZExpbmtJdGVtcyhpbmZvLT5MaWJyYXJpZXNQcm9wLCBpbmZvLT5MaWJyYXJpZXMsIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFRhcmdldCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGlmYWNlLkxpYnJhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbik7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcHMgPSBjbUV4cGFuZGVkTGlzdChpbmZvLT5TaGFyZWREZXBzKTsKICAgICB0aGlzLT5Mb29rdXBMaW5rSXRlbXMoZGVwcywgY21MaXN0RmlsZUJhY2t0cmFjZSgpLCBpZmFjZS5TaGFyZWREZXBzKTsKICAgfQpAQCAtNjEzMiwxNyArNjY3MywxNyBAQAogICAvLyBJbml0aWFsaXplIG1lbWJlcnMuCiAgIGluZm8uTm9TT05hbWUgPSBmYWxzZTsKIAotICBjb25zdCBjaGFyKiBsb2MgPSBudWxscHRyOwotICBjb25zdCBjaGFyKiBpbXAgPSBudWxscHRyOworICBjbVByb3AgbG9jID0gbnVsbHB0cjsKKyAgY21Qcm9wIGltcCA9IG51bGxwdHI7CiAgIHN0ZDo6c3RyaW5nIHN1ZmZpeDsKLSAgaWYgKCF0aGlzLT5UYXJnZXQtPkdldE1hcHBlZENvbmZpZyhkZXNpcmVkX2NvbmZpZywgJmxvYywgJmltcCwgc3VmZml4KSkgeworICBpZiAoIXRoaXMtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGRlc2lyZWRfY29uZmlnLCBsb2MsIGltcCwgc3VmZml4KSkgewogICAgIHJldHVybjsKICAgfQogCiAgIC8vIEdldCB0aGUgbGluayBpbnRlcmZhY2UuCiAgIHsKICAgICBzdGQ6OnN0cmluZyBsaW5rUHJvcCA9ICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiOwotICAgIGNvbnN0IGNoYXIqIHByb3BlcnR5TGlicyA9IHRoaXMtPkdldFByb3BlcnR5KGxpbmtQcm9wKTsKKyAgICBjbVByb3AgcHJvcGVydHlMaWJzID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApOwogCiAgICAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgICBpZiAoIXByb3BlcnR5TGlicykgewpAQCAtNjE1NywxMiArNjY5OCwxMiBAQAogICAgIH0KICAgICBpZiAocHJvcGVydHlMaWJzKSB7CiAgICAgICBpbmZvLkxpYnJhcmllc1Byb3AgPSBsaW5rUHJvcDsKLSAgICAgIGluZm8uTGlicmFyaWVzID0gcHJvcGVydHlMaWJzOworICAgICAgaW5mby5MaWJyYXJpZXMgPSAqcHJvcGVydHlMaWJzOwogICAgIH0KICAgfQogICBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICBpZiAobG9jKSB7Ci0gICAgICBpbmZvLkxpYk5hbWUgPSBsb2M7CisgICAgICBpbmZvLkxpYk5hbWUgPSAqbG9jOwogICAgIH0KICAgICByZXR1cm47CiAgIH0KQEAgLTYxNzIsNDcgKzY3MTMsNDYgQEAKIAogICAvLyBHZXQgdGhlIGxvY2F0aW9uLgogICBpZiAobG9jKSB7Ci0gICAgaW5mby5Mb2NhdGlvbiA9IGxvYzsKKyAgICBpbmZvLkxvY2F0aW9uID0gKmxvYzsKICAgfSBlbHNlIHsKICAgICBzdGQ6OnN0cmluZyBpbXBQcm9wID0gY21TdHJDYXQoIklNUE9SVEVEX0xPQ0FUSU9OIiwgc3VmZml4KTsKLSAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX2xvY2F0aW9uID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCkpIHsKLSAgICAgIGluZm8uTG9jYXRpb24gPSBjb25maWdfbG9jYXRpb247Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBsb2NhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9MT0NBVElPTiIpKSB7Ci0gICAgICBpbmZvLkxvY2F0aW9uID0gbG9jYXRpb247CisgICAgaWYgKGNtUHJvcCBjb25maWdfbG9jYXRpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKSkgeworICAgICAgaW5mby5Mb2NhdGlvbiA9ICpjb25maWdfbG9jYXRpb247CisgICAgfSBlbHNlIGlmIChjbVByb3AgbG9jYXRpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfTE9DQVRJT04iKSkgeworICAgICAgaW5mby5Mb2NhdGlvbiA9ICpsb2NhdGlvbjsKICAgICB9CiAgIH0KIAogICAvLyBHZXQgdGhlIHNvbmFtZS4KICAgaWYgKHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB7CiAgICAgc3RkOjpzdHJpbmcgc29Qcm9wID0gY21TdHJDYXQoIklNUE9SVEVEX1NPTkFNRSIsIHN1ZmZpeCk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19zb25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShzb1Byb3ApKSB7Ci0gICAgICBpbmZvLlNPTmFtZSA9IGNvbmZpZ19zb25hbWU7Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBzb25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfU09OQU1FIikpIHsKLSAgICAgIGluZm8uU09OYW1lID0gc29uYW1lOworICAgIGlmIChjbVByb3AgY29uZmlnX3NvbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KHNvUHJvcCkpIHsKKyAgICAgIGluZm8uU09OYW1lID0gKmNvbmZpZ19zb25hbWU7CisgICAgfSBlbHNlIGlmIChjbVByb3Agc29uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX1NPTkFNRSIpKSB7CisgICAgICBpbmZvLlNPTmFtZSA9ICpzb25hbWU7CiAgICAgfQogICB9CiAKICAgLy8gR2V0IHRoZSAibm8tc29uYW1lIiBtYXJrLgogICBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHsKICAgICBzdGQ6OnN0cmluZyBzb1Byb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfTk9fU09OQU1FIiwgc3VmZml4KTsKLSAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX25vX3NvbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KHNvUHJvcCkpIHsKLSAgICAgIGluZm8uTm9TT05hbWUgPSBjbUlzT24oY29uZmlnX25vX3NvbmFtZSk7Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBub19zb25hbWUgPQotICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfTk9fU09OQU1FIikpIHsKLSAgICAgIGluZm8uTm9TT05hbWUgPSBjbUlzT24obm9fc29uYW1lKTsKKyAgICBpZiAoY21Qcm9wIGNvbmZpZ19ub19zb25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShzb1Byb3ApKSB7CisgICAgICBpbmZvLk5vU09OYW1lID0gY21Jc09uKCpjb25maWdfbm9fc29uYW1lKTsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCBub19zb25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfTk9fU09OQU1FIikpIHsKKyAgICAgIGluZm8uTm9TT05hbWUgPSBjbUlzT24oKm5vX3NvbmFtZSk7CiAgICAgfQogICB9CiAKICAgLy8gR2V0IHRoZSBpbXBvcnQgbGlicmFyeS4KICAgaWYgKGltcCkgewotICAgIGluZm8uSW1wb3J0TGlicmFyeSA9IGltcDsKKyAgICBpbmZvLkltcG9ydExpYnJhcnkgPSAqaW1wOwogICB9IGVsc2UgaWYgKHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CiAgICAgICAgICAgICAgdGhpcy0+SXNFeGVjdXRhYmxlV2l0aEV4cG9ydHMoKSkgewogICAgIHN0ZDo6c3RyaW5nIGltcFByb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfSU1QTElCIiwgc3VmZml4KTsKLSAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX2ltcGxpYiA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApKSB7Ci0gICAgICBpbmZvLkltcG9ydExpYnJhcnkgPSBjb25maWdfaW1wbGliOwotICAgIH0gZWxzZSBpZiAoY29uc3QgY2hhciogaW1wbGliID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0lNUExJQiIpKSB7Ci0gICAgICBpbmZvLkltcG9ydExpYnJhcnkgPSBpbXBsaWI7CisgICAgaWYgKGNtUHJvcCBjb25maWdfaW1wbGliID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCkpIHsKKyAgICAgIGluZm8uSW1wb3J0TGlicmFyeSA9ICpjb25maWdfaW1wbGliOworICAgIH0gZWxzZSBpZiAoY21Qcm9wIGltcGxpYiA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9JTVBMSUIiKSkgeworICAgICAgaW5mby5JbXBvcnRMaWJyYXJ5ID0gKmltcGxpYjsKICAgICB9CiAgIH0KIApAQCAtNjIyMCwxMSArNjc2MCwxMSBAQAogICB7CiAgICAgc3RkOjpzdHJpbmcgbGlua1Byb3AgPQogICAgICAgY21TdHJDYXQoIklNUE9SVEVEX0xJTktfREVQRU5ERU5UX0xJQlJBUklFUyIsIHN1ZmZpeCk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19saWJzID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApKSB7Ci0gICAgICBpbmZvLlNoYXJlZERlcHMgPSBjb25maWdfbGliczsKLSAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxpYnMgPQorICAgIGlmIChjbVByb3AgY29uZmlnX2xpYnMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCkpIHsKKyAgICAgIGluZm8uU2hhcmVkRGVwcyA9ICpjb25maWdfbGliczsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCBsaWJzID0KICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0xJTktfREVQRU5ERU5UX0xJQlJBUklFUyIpKSB7Ci0gICAgICBpbmZvLlNoYXJlZERlcHMgPSBsaWJzOworICAgICAgaW5mby5TaGFyZWREZXBzID0gKmxpYnM7CiAgICAgfQogICB9CiAKQEAgLTYyMzIsMjEgKzY3NzIsMjEgQEAKICAgaWYgKHRoaXMtPkxpbmtMYW5ndWFnZVByb3BhZ2F0ZXNUb0RlcGVuZGVudHMoKSkgewogICAgIHN0ZDo6c3RyaW5nIGxpbmtQcm9wID0KICAgICAgIGNtU3RyQ2F0KCJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MQU5HVUFHRVMiLCBzdWZmaXgpOwotICAgIGlmIChjb25zdCBjaGFyKiBjb25maWdfbGlicyA9IHRoaXMtPkdldFByb3BlcnR5KGxpbmtQcm9wKSkgewotICAgICAgaW5mby5MYW5ndWFnZXMgPSBjb25maWdfbGliczsKLSAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxpYnMgPQorICAgIGlmIChjbVByb3AgY29uZmlnX2xpYnMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCkpIHsKKyAgICAgIGluZm8uTGFuZ3VhZ2VzID0gKmNvbmZpZ19saWJzOworICAgIH0gZWxzZSBpZiAoY21Qcm9wIGxpYnMgPQogICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTIikpIHsKLSAgICAgIGluZm8uTGFuZ3VhZ2VzID0gbGliczsKKyAgICAgIGluZm8uTGFuZ3VhZ2VzID0gKmxpYnM7CiAgICAgfQogICB9CiAKICAgLy8gR2V0IGluZm9ybWF0aW9uIGlmIHRhcmdldCBpcyBtYW5hZ2VkIGFzc2VtYmx5LgogICB7CiAgICAgc3RkOjpzdHJpbmcgbGlua1Byb3AgPSAiSU1QT1JURURfQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUiOwotICAgIGlmIChhdXRvIHBjID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3AgKyBzdWZmaXgpKSB7Ci0gICAgICBpbmZvLk1hbmFnZWQgPSB0aGlzLT5DaGVja01hbmFnZWRUeXBlKHBjKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8gcCA9IHRoaXMtPkdldFByb3BlcnR5KGxpbmtQcm9wKSkgewotICAgICAgaW5mby5NYW5hZ2VkID0gdGhpcy0+Q2hlY2tNYW5hZ2VkVHlwZShwKTsKKyAgICBpZiAoY21Qcm9wIHBjID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3AgKyBzdWZmaXgpKSB7CisgICAgICBpbmZvLk1hbmFnZWQgPSB0aGlzLT5DaGVja01hbmFnZWRUeXBlKCpwYyk7CisgICAgfSBlbHNlIGlmIChjbVByb3AgcCA9IHRoaXMtPkdldFByb3BlcnR5KGxpbmtQcm9wKSkgeworICAgICAgaW5mby5NYW5hZ2VkID0gdGhpcy0+Q2hlY2tNYW5hZ2VkVHlwZSgqcCk7CiAgICAgfQogICB9CiAKQEAgLTYyNTQsMTEgKzY3OTQsMTEgQEAKICAgaWYgKHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSB7CiAgICAgc3RkOjpzdHJpbmcgbGlua1Byb3AgPQogICAgICAgY21TdHJDYXQoIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX01VTFRJUExJQ0lUWSIsIHN1ZmZpeCk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19yZXBzID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApKSB7Ci0gICAgICBzc2NhbmYoY29uZmlnX3JlcHMsICIldSIsICZpbmZvLk11bHRpcGxpY2l0eSk7Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiByZXBzID0KKyAgICBpZiAoY21Qcm9wIGNvbmZpZ19yZXBzID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApKSB7CisgICAgICBzc2NhbmYoY29uZmlnX3JlcHMtPmNfc3RyKCksICIldSIsICZpbmZvLk11bHRpcGxpY2l0eSk7CisgICAgfSBlbHNlIGlmIChjbVByb3AgcmVwcyA9CiAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9NVUxUSVBMSUNJVFkiKSkgewotICAgICAgc3NjYW5mKHJlcHMsICIldSIsICZpbmZvLk11bHRpcGxpY2l0eSk7CisgICAgICBzc2NhbmYocmVwcy0+Y19zdHIoKSwgIiV1IiwgJmluZm8uTXVsdGlwbGljaXR5KTsKICAgICB9CiAgIH0KIH0KQEAgLTYyNjYsMjggKzY4MDYsMzYgQEAKIGNtSGVhZFRvTGlua0ludGVyZmFjZU1hcCYgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEhlYWRUb0xpbmtJbnRlcmZhY2VNYXAoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHN0ZDo6c3RyaW5nIENPTkZJRyA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwotICByZXR1cm4gdGhpcy0+TGlua0ludGVyZmFjZU1hcFtDT05GSUddOworICByZXR1cm4gdGhpcy0+TGlua0ludGVyZmFjZU1hcFtjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKV07CiB9CiAKIGNtSGVhZFRvTGlua0ludGVyZmFjZU1hcCYKIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRIZWFkVG9MaW5rSW50ZXJmYWNlVXNhZ2VSZXF1aXJlbWVudHNNYXAoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHN0ZDo6c3RyaW5nIENPTkZJRyA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwotICByZXR1cm4gdGhpcy0+TGlua0ludGVyZmFjZVVzYWdlUmVxdWlyZW1lbnRzT25seU1hcFtDT05GSUddOworICByZXR1cm4gdGhpcworICAgIC0+TGlua0ludGVyZmFjZVVzYWdlUmVxdWlyZW1lbnRzT25seU1hcFtjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKV07CiB9CiAKIGNvbnN0IGNtTGlua0ltcGxlbWVudGF0aW9uKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TGlua0ltcGxlbWVudGF0aW9uKAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogeworICByZXR1cm4gdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZywgZmFsc2UpOworfQorCitjb25zdCBjbUxpbmtJbXBsZW1lbnRhdGlvbiogY21HZW5lcmF0b3JUYXJnZXQ6OkdldExpbmtJbXBsZW1lbnRhdGlvbigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgYm9vbCBzZWNvbmRQYXNzKSBjb25zdAorewogICAvLyBUaGVyZSBpcyBubyBsaW5rIGltcGxlbWVudGF0aW9uIGZvciBpbXBvcnRlZCB0YXJnZXRzLgogICBpZiAodGhpcy0+SXNJbXBvcnRlZCgpKSB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAotICBzdGQ6OnN0cmluZyBDT05GSUcgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKLSAgY21PcHRpb25hbExpbmtJbXBsZW1lbnRhdGlvbiYgaW1wbCA9IHRoaXMtPkxpbmtJbXBsTWFwW0NPTkZJR11bdGhpc107CisgIGNtT3B0aW9uYWxMaW5rSW1wbGVtZW50YXRpb24mIGltcGwgPQorICAgIHRoaXMtPkxpbmtJbXBsTWFwW2NtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpXVt0aGlzXTsKKyAgaWYgKHNlY29uZFBhc3MpIHsKKyAgICBpbXBsID0gY21PcHRpb25hbExpbmtJbXBsZW1lbnRhdGlvbigpOworICB9CiAgIGlmICghaW1wbC5MaWJyYXJpZXNEb25lKSB7CiAgICAgaW1wbC5MaWJyYXJpZXNEb25lID0gdHJ1ZTsKICAgICB0aGlzLT5Db21wdXRlTGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzKGNvbmZpZywgaW1wbCwgdGhpcyk7CkBAIC02MzAzLDcgKzY4NTEsNyBAQAogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiYgZmlsZXMpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlncyA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogCiAgIGF1dG8gaXQgPSBjb25maWdzLmJlZ2luKCk7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaXJzdENvbmZpZyA9ICppdDsKQEAgLTY0MjYsMTUgKzY5NzQsMTUgQEAKIAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNEZXByZWNhdGVkKCkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogZGVwcmVjYXRpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiREVQUkVDQVRJT04iKTsKLSAgcmV0dXJuIGRlcHJlY2F0aW9uICYmICpkZXByZWNhdGlvbjsKKyAgY21Qcm9wIGRlcHJlY2F0aW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIkRFUFJFQ0FUSU9OIik7CisgIHJldHVybiBjbU5vbmVtcHR5KGRlcHJlY2F0aW9uKTsKIH0KIAogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldERlcHJlY2F0aW9uKCkgY29uc3QKIHsKICAgLy8gZmluZCBERVBSRUNBVElPTiBwcm9wZXJ0eQotICBpZiAoY29uc3QgY2hhciogZGVwcmVjYXRpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiREVQUkVDQVRJT04iKSkgewotICAgIHJldHVybiBkZXByZWNhdGlvbjsKKyAgaWYgKGNtUHJvcCBkZXByZWNhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJERVBSRUNBVElPTiIpKSB7CisgICAgcmV0dXJuICpkZXByZWNhdGlvbjsKICAgfQogICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKIH0KQEAgLTY0OTEsOSArNzAzOSw5IEBACiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXMgPSB0aGlzLT5HZXRBbGxDb25maWdDb21waWxlTGFuZ3VhZ2VzKCk7CiAgIC8vIENvbnNpZGVyIGFuIGV4cGxpY2l0IGxpbmtlciBsYW5ndWFnZSBwcm9wZXJ0eSwgYnV0ICpub3QqIHRoZQogICAvLyBjb21wdXRlZCBsaW5rZXIgbGFuZ3VhZ2UgdGhhdCBtYXkgZGVwZW5kIG9uIGxpbmtlZCB0YXJnZXRzLgotICBjb25zdCBjaGFyKiBsaW5rTGFuZyA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LRVJfTEFOR1VBR0UiKTsKLSAgaWYgKGxpbmtMYW5nICYmICpsaW5rTGFuZykgewotICAgIGxhbmd1YWdlcy5pbnNlcnQobGlua0xhbmcpOworICBjbVByb3AgbGlua0xhbmcgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS0VSX0xBTkdVQUdFIik7CisgIGlmIChjbU5vbmVtcHR5KGxpbmtMYW5nKSkgeworICAgIGxhbmd1YWdlcy5pbnNlcnQoKmxpbmtMYW5nKTsKICAgfQogICByZXR1cm4gbGFuZ3VhZ2VzLnNpemUoKSA9PSAxICYmIGxhbmd1YWdlcy5jb3VudCgiQ1NoYXJwIikgPiAwOwogfQpAQCAtNjU0Myw4ICs3MDkxLDggQEAKICAgfQogCiAgIC8vIFBvcHVsYXRlIHRoZSBsaW5rIGltcGxlbWVudGF0aW9uIGxpYnJhcmllcyBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgotICBzdGQ6OnN0cmluZyBDT05GSUcgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKLSAgSGVhZFRvTGlua0ltcGxlbWVudGF0aW9uTWFwJiBobSA9IHRoaXMtPkxpbmtJbXBsTWFwW0NPTkZJR107CisgIEhlYWRUb0xpbmtJbXBsZW1lbnRhdGlvbk1hcCYgaG0gPQorICAgIHRoaXMtPkxpbmtJbXBsTWFwW2NtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpXTsKIAogICAvLyBJZiB0aGUgbGluayBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGhlYWQgdGFyZ2V0CiAgIC8vIHRoZW4gcmV0dXJuIHRoZSBvbmUgd2UgY29tcHV0ZWQgZmlyc3QuCkBAIC02NTYzLDcgKzcxMTEsNyBAQAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNOdWxsSW1wbGllZEJ5TGlua0xpYnJhcmllcygKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHApIGNvbnN0CiB7Ci0gIHJldHVybiBjbUNvbnRhaW5zKHRoaXMtPkxpbmtJbXBsaWNpdE51bGxQcm9wZXJ0aWVzLCBwKTsKKyAgcmV0dXJuIGNtOjpjb250YWlucyh0aGlzLT5MaW5rSW1wbGljaXROdWxsUHJvcGVydGllcywgcCk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoCkBAIC02NTg1LDExICs3MTMzLDE4IEBACiAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlKCpidEl0KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNvbnN0IGNnZSA9IGdlLlBhcnNlKCpsZSk7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGV2YWx1YXRlZCA9Ci0gICAgICBjZ2UtPkV2YWx1YXRlKHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIGhlYWQsICZkYWdDaGVja2VyKTsKKyAgICAgIGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgaGVhZCwgJmRhZ0NoZWNrZXIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxpbmtlckxhbmd1YWdlKTsKICAgICBjbUV4cGFuZExpc3QoZXZhbHVhdGVkLCBsbGlicyk7CiAgICAgaWYgKGNnZS0+R2V0SGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbigpKSB7CiAgICAgICBpbXBsLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOwogICAgIH0KKyAgICBpZiAoY2dlLT5HZXRIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKKyAgICAgIGltcGwuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgICAgfQorICAgIGlmIChjZ2UtPkdldEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbigpKSB7CisgICAgICBpbXBsLkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgICAgfQogCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGliIDogbGxpYnMpIHsKICAgICAgIGlmICh0aGlzLT5Jc0xpbmtMb29rdXBTY29wZShsaWIsIGxnKSkgewpAQCAtNjU5OCw2ICs3MTUzLDEzIEBACiAKICAgICAgIC8vIFNraXAgZW50cmllcyB0aGF0IHJlc29sdmUgdG8gdGhlIHRhcmdldCBpdHNlbGYgb3IgYXJlIGVtcHR5LgogICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IHRoaXMtPkNoZWNrQ01QMDAwNChsaWIpOworICAgICAgaWYgKHRoaXMtPkdldFBvbGljeVN0YXR1c0NNUDAxMDgoKSA9PSBjbVBvbGljaWVzOjpORVcpIHsKKyAgICAgICAgLy8gcmVzb2x2ZSBhbGlhcyBuYW1lCisgICAgICAgIGF1dG8gdGFyZ2V0ID0gdGhpcy0+TWFrZWZpbGUtPkZpbmRUYXJnZXRUb1VzZShuYW1lKTsKKyAgICAgICAgaWYgKHRhcmdldCkgeworICAgICAgICAgIG5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKTsKKyAgICAgICAgfQorICAgICAgfQogICAgICAgaWYgKG5hbWUgPT0gdGhpcy0+R2V0TmFtZSgpIHx8IG5hbWUuZW1wdHkoKSkgewogICAgICAgICBpZiAobmFtZSA9PSB0aGlzLT5HZXROYW1lKCkpIHsKICAgICAgICAgICBib29sIG5vTWVzc2FnZSA9IGZhbHNlOwpAQCAtNjg2Nyw4ICs3NDI5LDggQEAKICAgfQogCiAgIC8vIENoZWNrIGZvciBleHBsaWNpdGx5IHNldCBjbHIgdGFyZ2V0IHByb3BlcnR5LgotICBpZiAoYXV0byogY2xyID0gdGhpcy0+R2V0UHJvcGVydHkoIkNPTU1PTl9MQU5HVUFHRV9SVU5USU1FIikpIHsKLSAgICByZXR1cm4gdGhpcy0+Q2hlY2tNYW5hZ2VkVHlwZShjbHIpOworICBpZiAoY21Qcm9wIGNsciA9IHRoaXMtPkdldFByb3BlcnR5KCJDT01NT05fTEFOR1VBR0VfUlVOVElNRSIpKSB7CisgICAgcmV0dXJuIHRoaXMtPkNoZWNrTWFuYWdlZFR5cGUoKmNscik7CiAgIH0KIAogICAvLyBDIyB0YXJnZXRzIGFyZSBhbHdheXMgbWFuYWdlZC4gVGhpcyBsYW5ndWFnZSBzcGVjaWZpYyBjaGVjawpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmggYi9Tb3VyY2UvY21HZW5lcmF0b3JUYXJnZXQuaAppbmRleCBkODFiYjNkLi4wOGFhMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JUYXJnZXQuaAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JUYXJnZXQuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogCiBjbGFzcyBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb247CkBAIC03Niw5ICs3Nyw5IEBACiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFByb3BlcnR5S2V5cygpIGNvbnN0OwogICAvLyEgTWlnaHQgcmV0dXJuIGEgbnVsbHB0ciBpZiB0aGUgcHJvcGVydHkgaXMgbm90IHNldCBvciBpbnZhbGlkCi0gIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKKyAgY21Qcm9wIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgLy8hIEFsd2F5cyByZXR1cm5zIGEgdmFsaWQgcG9pbnRlcgotICBjb25zdCBjaGFyKiBHZXRTYWZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OworICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0U2FmZVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wKSBjb25zdDsKICAgYm9vbCBHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CiAgIHZvaWQgR2V0U291cmNlRmlsZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4mIGZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwpAQCAtMTE1LDkgKzExNiw2IEBACiAgIHN0cnVjdCBLaW5kZWRTb3VyY2VzCiAgIHsKICAgICBzdGQ6OnZlY3RvcjxTb3VyY2VBbmRLaW5kPiBTb3VyY2VzOwotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFJlc3hIZWFkZXJzOwotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFhhbWxIZWFkZXJzOwotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFhhbWxTb3VyY2VzOwogICAgIGJvb2wgSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgfTsKIApAQCAtMTM1LDYgKzEzMyw5IEBACiAgICAgICBwZXItc291cmNlIGNvbmZpZ3VyYXRpb25zIGFzc2lnbmVkLiAgKi8KICAgc3RkOjp2ZWN0b3I8QWxsQ29uZmlnU291cmNlPiBjb25zdCYgR2V0QWxsQ29uZmlnU291cmNlcygpIGNvbnN0OwogCisgIC8qKiBHZXQgYWxsIHNvdXJjZXMgbmVlZGVkIGZvciBhbGwgY29uZmlndXJhdGlvbnMgd2l0aCBnaXZlbiBraW5kLiAgKi8KKyAgc3RkOjp2ZWN0b3I8QWxsQ29uZmlnU291cmNlPiBHZXRBbGxDb25maWdTb3VyY2VzKFNvdXJjZUtpbmQga2luZCkgY29uc3Q7CisKICAgLyoqIEdldCBhbGwgbGFuZ3VhZ2VzIHVzZWQgdG8gY29tcGlsZSBzb3VyY2VzIGluIGFueSBjb25maWd1cmF0aW9uLgogICAgICAgVGhpcyBleGNsdWRlcyB0aGUgbGFuZ3VhZ2VzIG9mIG9iamVjdHMgZnJvbSBvYmplY3QgbGlicmFyaWVzLiAgKi8KICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKSBjb25zdDsKQEAgLTE0NywxMCArMTQ4LDE4IEBACiAgIGJvb2wgSGFzRXhwbGljaXRPYmplY3ROYW1lKGNtU291cmNlRmlsZSBjb25zdCogZmlsZSkgY29uc3Q7CiAgIHZvaWQgQWRkRXhwbGljaXRPYmplY3ROYW1lKGNtU291cmNlRmlsZSBjb25zdCogc2YpOwogCisgIEJUczxzdGQ6OnN0cmluZz4gY29uc3QqIEdldExhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0eSgKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykgY29uc3Q7CisKKyAgY21Qcm9wIEdldExhbmd1YWdlU3RhbmRhcmQoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OworCisgIGNtUHJvcCBHZXRMYW5ndWFnZUV4dGVuc2lvbnMoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OworCisgIGJvb2wgR2V0TGFuZ3VhZ2VTdGFuZGFyZFJlcXVpcmVkKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKKwogICB2b2lkIEdldE1vZHVsZURlZmluaXRpb25Tb3VyY2VzKHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKLSAgdm9pZCBHZXRSZXN4U291cmNlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAgIHZvaWQgR2V0RXh0ZXJuYWxPYmplY3RzKHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAgIHZvaWQgR2V0SGVhZGVyU291cmNlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCkBAIC0xNTksMjcgKzE2OCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKICAgdm9pZCBHZXRDdXN0b21Db21tYW5kcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7Ci0gIHZvaWQgR2V0RXhwZWN0ZWRSZXN4SGVhZGVycyhzdGQ6OnNldDxzdGQ6OnN0cmluZz4mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7Ci0gIHZvaWQgR2V0QXBwTWFuaWZlc3Qoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogICB2b2lkIEdldE1hbmlmZXN0cyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwotICB2b2lkIEdldENlcnRpZmljYXRlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwotICB2b2lkIEdldFhhbWxTb3VyY2VzKHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+JiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKLSAgdm9pZCBHZXRFeHBlY3RlZFhhbWxIZWFkZXJzKHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKLSAgdm9pZCBHZXRFeHBlY3RlZFhhbWxTb3VyY2VzKHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICBzdGQ6OnNldDxjbUxpbmtJdGVtPiBjb25zdCYgR2V0VXRpbGl0eUl0ZW1zKCkgY29uc3Q7CiAKICAgdm9pZCBDb21wdXRlT2JqZWN0TWFwcGluZygpOwogCi0gIGNvbnN0IGNoYXIqIEdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CisgIGNtUHJvcCBHZXRGZWF0dXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICBjb25zdCBjaGFyKiBHZXRMaW5rUElFUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKQEAgLTIwNCw2ICsyMDEsMjQgQEAKICAgY29uc3QgY2hhciogR2V0TGlua0ludGVyZmFjZURlcGVuZGVudE51bWJlck1heFByb3BlcnR5KAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAorICBjbGFzcyBEZXZpY2VMaW5rU2V0dGVyCisgIHsKKyAgcHVibGljOgorICAgIERldmljZUxpbmtTZXR0ZXIoY21HZW5lcmF0b3JUYXJnZXQmIHRhcmdldCkKKyAgICAgIDogVGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgICB0aGlzLT5QcmV2aW91c1N0YXRlID0gdGFyZ2V0LlNldERldmljZUxpbmsodHJ1ZSk7CisgICAgfQorICAgIH5EZXZpY2VMaW5rU2V0dGVyKCkgeyB0aGlzLT5UYXJnZXQuU2V0RGV2aWNlTGluayh0aGlzLT5QcmV2aW91c1N0YXRlKTsgfTsKKworICBwcml2YXRlOgorICAgIGNtR2VuZXJhdG9yVGFyZ2V0JiBUYXJnZXQ7CisgICAgYm9vbCBQcmV2aW91c1N0YXRlOworICB9OworCisgIGJvb2wgU2V0RGV2aWNlTGluayhib29sIGRldmljZUxpbmspOworICBib29sIElzRGV2aWNlTGluaygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkRldmljZUxpbms7IH0KKwogICBjbUxpbmtJbnRlcmZhY2UgY29uc3QqIEdldExpbmtJbnRlcmZhY2UoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIGhlYWRUYXJnZXQpIGNvbnN0OwogICB2b2lkIENvbXB1dGVMaW5rSW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCkBAIC0yMjUsNyArMjQwLDcgQEAKICAgLyoqIEdldCB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbiBpdHMKICAgICAgIG1ha2VmaWxlIGFuZCB0aGUgY29uZmlndXJhdGlvbiB0eXBlLiAgKi8KICAgc3RkOjpzdHJpbmcgR2V0RnVsbFBhdGgoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9ICIiLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgICAgY21TdGF0ZUVudW1zOjpBcnRpZmFjdFR5cGUgYXJ0aWZhY3QgPSBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCwKICAgICBib29sIHJlYWxuYW1lID0gZmFsc2UpIGNvbnN0OwogICBzdGQ6OnN0cmluZyBOb3JtYWxHZXRGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLApAQCAtMjYzLDcgKzI3OCw3IEBACiAKICAgLyoqIEdldCB0aGUgZnVsbCBuYW1lIG9mIHRoZSB0YXJnZXQgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbiBpdHMKICAgICAgIG1ha2VmaWxlLiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0RnVsbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9ICIiLAorICBzdGQ6OnN0cmluZyBHZXRGdWxsTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkFydGlmYWN0VHlwZSBhcnRpZmFjdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpIGNvbnN0OwogCkBAIC0zMDYsOCArMzIxLDcgQEAKICAgc3RkOjpzdHJpbmcgR2V0U09OYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIHZvaWQgR2V0RnVsbE5hbWVDb21wb25lbnRzKHN0ZDo6c3RyaW5nJiBwcmVmaXgsIHN0ZDo6c3RyaW5nJiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgc3VmZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBzdWZmaXgsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6QXJ0aWZhY3RUeXBlIGFydGlmYWN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCkgY29uc3Q7CiAKQEAgLTM1Nyw3ICszNzEsNiBAQAogICB9OwogCiAgIExpbmtDbG9zdXJlIGNvbnN0KiBHZXRMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKLSAgdm9pZCBDb21wdXRlTGlua0Nsb3N1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgTGlua0Nsb3N1cmUmIGxjKSBjb25zdDsKIAogICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogR2V0TGlua0ltcGxlbWVudGF0aW9uKAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwpAQCAtNDIyLDYgKzQzNSw5IEBACiAgIHZvaWQgR2V0QXBwbGVBcmNocyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmNoVmVjKSBjb25zdDsKIAorICB2b2lkIEFkZENVREFBcmNoaXRlY3R1cmVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MpIGNvbnN0OworICB2b2lkIEFkZENVREFUb29sa2l0RmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzKSBjb25zdDsKKwogICBzdGQ6OnN0cmluZyBHZXRGZWF0dXJlU3BlY2lmaWNMaW5rUnVsZVZhcmlhYmxlKAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OwpAQCAtNDc5LDE3ICs0OTUsMjMgQEAKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIGNvbnN0OwogCiAgIHN0ZDo6c3RyaW5nIEdldFBjaEhlYWRlcihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoID0gc3RkOjpzdHJpbmcoKSkgY29uc3Q7CiAgIHN0ZDo6c3RyaW5nIEdldFBjaFNvdXJjZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoID0gc3RkOjpzdHJpbmcoKSkgY29uc3Q7CiAgIHN0ZDo6c3RyaW5nIEdldFBjaEZpbGVPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA9IHN0ZDo6c3RyaW5nKCkpOwogICBzdGQ6OnN0cmluZyBHZXRQY2hGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKLSAgc3RkOjpzdHJpbmcgR2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggPSBzdGQ6OnN0cmluZygpKTsKKyAgc3RkOjpzdHJpbmcgR2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoID0gc3RkOjpzdHJpbmcoKSk7CiAgIHN0ZDo6c3RyaW5nIEdldFBjaFVzZUNvbXBpbGVPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggPSBzdGQ6OnN0cmluZygpKTsKIAogICB2b2lkIEFkZFNvdXJjZUZpbGVUb1VuaXR5QmF0Y2goY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZUZpbGVuYW1lKTsKICAgYm9vbCBJc1NvdXJjZUZpbGVQYXJ0T2ZVbml0eUJhdGNoKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VGaWxlbmFtZSkgY29uc3Q7CkBAIC01MDMsNiArNTI1LDExIEBACiAKICAgYm9vbCBDb21wdXRlQ29tcGlsZUZlYXR1cmVzKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OwogCisgIHVzaW5nIExhbmd1YWdlUGFpciA9IHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OworICBib29sIENvbXB1dGVDb21waWxlRmVhdHVyZXMoCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKKyAgICBzdGQ6OnNldDxMYW5ndWFnZVBhaXI+IGNvbnN0JiBsYW5ndWFnZVBhaXJzKSBjb25zdDsKKwogICAvKioKICAgICogVHJhY2UgdGhyb3VnaCB0aGUgc291cmNlIGZpbGVzIGluIHRoaXMgdGFyZ2V0IGFuZCBhZGQgYWwgc291cmNlIGZpbGVzCiAgICAqIHRoYXQgdGhleSBkZXBlbmQgb24sIHVzZWQgYnkgYWxsIGdlbmVyYXRvcnMKQEAgLTUxMyw3ICs1NDAsNyBAQAogICAgICAgY29uZmlndXJhdGlvbiBuYW1lIGlzIGdpdmVuIHRoZW4gdGhlIGdlbmVyYXRvciB3aWxsIGFkZCBpdHMKICAgICAgIHN1YmRpcmVjdG9yeSBmb3IgdGhhdCBjb25maWd1cmF0aW9uLiAgT3RoZXJ3aXNlIGp1c3QgdGhlIGNhbm9uaWNhbAogICAgICAgb3V0cHV0IGRpcmVjdG9yeSBpcyBnaXZlbi4gICovCi0gIHN0ZDo6c3RyaW5nIEdldERpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIsCisgIHN0ZDo6c3RyaW5nIEdldERpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpBcnRpZmFjdFR5cGUgYXJ0aWZhY3QgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCkgY29uc3Q7CiAKQEAgLTUyMSw3ICs1NDgsNyBAQAogICAgICAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBpcyBnaXZlbiB0aGVuIHRoZSBnZW5lcmF0b3Igd2lsbCBhZGQgaXRzCiAgICAgICBzdWJkaXJlY3RvcnkgZm9yIHRoYXQgY29uZmlndXJhdGlvbi4gIE90aGVyd2lzZSBqdXN0IHRoZSBjYW5vbmljYWwKICAgICAgIGNvbXBpbGVyIHBkYiBvdXRwdXQgZGlyZWN0b3J5IGlzIGdpdmVuLiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZVBEQkRpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRDb21waWxlUERCRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8qKiBHZXQgc291cmNlcyB0aGF0IG11c3QgYmUgYnVpbHQgYmVmb3JlIHRoZSBnaXZlbiBzb3VyY2UuICAqLwogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBjb25zdCogR2V0U291cmNlRGVwZW5kcygKQEAgLTU1MCw3ICs1NzcsNyBAQAogICBzdGQ6OnN0cmluZyBHZXRQREJPdXRwdXROYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8qKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHBkYiBmaWxlIGZvciB0aGUgdGFyZ2V0LiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0UERCTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRQREJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8qKiBXaGV0aGVyIHRoaXMgbGlicmFyeSBoYXMgc29uYW1lIGVuYWJsZWQgYW5kIHBsYXRmb3JtIHN1cHBvcnRzIGl0LiAgKi8KICAgYm9vbCBIYXNTT05hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CkBAIC01NjgsMTAgKzU5NSwxMCBAQAogICBib29sIElzTnVsbEltcGxpZWRCeUxpbmtMaWJyYXJpZXMoY29uc3Qgc3RkOjpzdHJpbmcmIHApIGNvbnN0OwogCiAgIC8qKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGNvbXBpbGVyIHBkYiBmaWxlIGZvciB0aGUgdGFyZ2V0LiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZVBEQk5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9ICIiKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZVBEQk5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgLyoqIEdldCB0aGUgcGF0aCBmb3IgdGhlIE1TVkMgL0ZkIG9wdGlvbiBmb3IgdGhpcyB0YXJnZXQuICAqLwotICBzdGQ6OnN0cmluZyBHZXRDb21waWxlUERCUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRDb21waWxlUERCUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICAvLyBHZXQgdGhlIHRhcmdldCBiYXNlIG5hbWUuCiAgIHN0ZDo6c3RyaW5nIEdldE91dHB1dE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKQEAgLTU4OSw2ICs2MTYsOSBAQAogICAvKiogR2V0IHRhcmdldCBmaWxlIHBvc3RmaXggKi8KICAgc3RkOjpzdHJpbmcgR2V0RmlsZVBvc3RmaXgoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKKyAgLyoqIEdldCBmcmFtZXdvcmsgbXVsdGktY29uZmlnLXNwZWNpZmljIHBvc3RmaXggKi8KKyAgc3RkOjpzdHJpbmcgR2V0RnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworCiAgIC8qKiBDbGVhcnMgY2FjaGVkIG1ldGEgZGF0YSBmb3IgbG9jYWwgYW5kIGV4dGVybmFsIHNvdXJjZSBmaWxlcy4KICAgICogVGhlIG1ldGEgZGF0YSB3aWxsIGJlIHJlY29tcHV0ZWQgb24gZGVtYW5kLgogICAgKi8KQEAgLTc2OCw2ICs3OTgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmFsbGJhY2tfcHJvcGVydHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWFqb3IsIGludCYgbWlub3IsIGludCYgcGF0Y2gpIGNvbnN0OwogCisgIHN0ZDo6c3RyaW5nIEdldFJ1bnRpbWVMaW5rTGlicmFyeShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OworCiAgIHN0ZDo6c3RyaW5nIEdldEZvcnRyYW5Nb2R1bGVEaXJlY3Rvcnkoc3RkOjpzdHJpbmcgY29uc3QmIHdvcmtpbmdfZGlyKSBjb25zdDsKIAogICBjb25zdCBzdGQ6OnN0cmluZyYgR2V0U291cmNlc1Byb3BlcnR5KCkgY29uc3Q7CkBAIC04MTYsOCArODQ5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgb3V0UHJlZml4LCBzdGQ6OnN0cmluZyYgb3V0QmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBvdXRTdWZmaXgpIGNvbnN0OwogCisgIG11dGFibGUgc3RkOjpzdHJpbmcgTGlua2VyTGFuZ3VhZ2U7CiAgIHVzaW5nIExpbmtDbG9zdXJlTWFwVHlwZSA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMaW5rQ2xvc3VyZT47CiAgIG11dGFibGUgTGlua0Nsb3N1cmVNYXBUeXBlIExpbmtDbG9zdXJlTWFwOworICBib29sIERldmljZUxpbmsgPSBmYWxzZTsKIAogICAvLyBSZXR1cm5zIEFSQ0hJVkUsIExJQlJBUlksIG9yIFJVTlRJTUUgYmFzZWQgb24gcGxhdGZvcm0gYW5kIHR5cGUuCiAgIGNvbnN0IGNoYXIqIEdldE91dHB1dFRhcmdldFR5cGUoY21TdGF0ZUVudW1zOjpBcnRpZmFjdFR5cGUgYXJ0aWZhY3QpIGNvbnN0OwpAQCAtODUwLDYgKzg4NSwxMCBAQAogICB2b2lkIENoZWNrUHJvcGVydHlDb21wYXRpYmlsaXR5KGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiYgaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAorICB2b2lkIENvbXB1dGVMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBMaW5rQ2xvc3VyZSYgbGMpIGNvbnN0OworICBib29sIENvbXB1dGVMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBMaW5rQ2xvc3VyZSYgbGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcykgY29uc3Q7CisKICAgc3RydWN0IExpbmtJbXBsQ2xvc3VyZSA6IHB1YmxpYyBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+CiAgIHsKICAgICBib29sIERvbmUgPSBmYWxzZTsKQEAgLTg2OCw2ICs5MDcsMTcgQEAKICAgc3RkOjpzdHJpbmcgR2V0TGlua0ludGVyZmFjZURlcGVuZGVudFN0cmluZ0FzQm9vbFByb3BlcnR5KAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAorICBmcmllbmQgY2xhc3MgY21UYXJnZXRDb2xsZWN0TGlua0xhbmd1YWdlczsKKyAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBHZXRMaW5rSW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZFRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcykgY29uc3Q7CisgIHZvaWQgQ29tcHV0ZUxpbmtJbnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU9wdGlvbmFsTGlua0ludGVyZmFjZSYgaWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIGhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWNvbmRQYXNzKSBjb25zdDsKKyAgY21MaW5rSW1wbGVtZW50YXRpb24gY29uc3QqIEdldExpbmtJbXBsZW1lbnRhdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcykgY29uc3Q7CisKICAgLy8gQ2FjaGUgaW1wb3J0IGluZm9ybWF0aW9uIGZyb20gcHJvcGVydGllcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uLgogICBzdHJ1Y3QgSW1wb3J0SW5mbwogICB7CkBAIC04OTQsOSArOTQ0LDEwIEBACiAgICAgICB0aGUgbGluayBkZXBlbmRlbmNpZXMgb2YgdGhpcyB0YXJnZXQuICAqLwogICBzdGQ6OnN0cmluZyBDaGVja0NNUDAwMDQoc3RkOjpzdHJpbmcgY29uc3QmIGl0ZW0pIGNvbnN0OwogCi0gIGNtTGlua0ludGVyZmFjZSBjb25zdCogR2V0SW1wb3J0TGlua0ludGVyZmFjZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZCwKLSAgICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSBjb25zdDsKKyAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBHZXRJbXBvcnRMaW5rSW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlY29uZFBhc3MgPSBmYWxzZSkgY29uc3Q7CiAKICAgdXNpbmcgS2luZGVkU291cmNlc01hcFR5cGUgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgS2luZGVkU291cmNlcz47CiAgIG11dGFibGUgS2luZGVkU291cmNlc01hcFR5cGUgS2luZGVkU291cmNlc01hcDsKQEAgLTk0MCw3ICs5OTEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21MaW5rSXRlbT4mIGl0ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKSBjb25zdDsKICAgdm9pZCBMb29rdXBMaW5rSXRlbXMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgYnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTGlua0l0ZW0+JiBpdGVtcykgY29uc3Q7CkBAIC0xMDAwLDYgKzEwNTMsMTEgQEAKICAgYm9vbCBHZXRSUEFUSChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcnBhdGgpIGNvbnN0OwogCisgIG11dGFibGUgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEJUczxzdGQ6OnN0cmluZz4+IExhbmd1YWdlU3RhbmRhcmRNYXA7CisKKyAgY21Qcm9wIEdldFByb3BlcnR5V2l0aFBhaXJlZExhbmd1YWdlU3VwcG9ydChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdWZmaXgpIGNvbnN0OworCiBwdWJsaWM6CiAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIEdldExpbmtJbXBsZW1lbnRhdGlvbkNsb3N1cmUoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZXRDTWFrZVByb3BlcnR5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21HZXRDTWFrZVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggZmY0ZTMxMi4uNzljYmU0NCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0Q01ha2VQcm9wZXJ0eUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUdldENNYWtlUHJvcGVydHlDb21tYW5kLmN4eApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAKQEAgLTIzLDI1ICsyNCwyNSBAQAogICBzdGQ6OnN0cmluZyBvdXRwdXQgPSAiTk9URk9VTkQiOwogCiAgIGlmIChhcmdzWzFdID09ICJWQVJJQUJMRVMiKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZhcnNQcm9wID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0UHJvcGVydHkoIlZBUklBQkxFUyIpKSB7Ci0gICAgICBvdXRwdXQgPSB2YXJzUHJvcDsKKyAgICBpZiAoY21Qcm9wIHZhcnNQcm9wID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0UHJvcGVydHkoIlZBUklBQkxFUyIpKSB7CisgICAgICBvdXRwdXQgPSAqdmFyc1Byb3A7CiAgICAgfQogICB9IGVsc2UgaWYgKGFyZ3NbMV0gPT0gIk1BQ1JPUyIpIHsKICAgICBvdXRwdXQuY2xlYXIoKTsKLSAgICBpZiAoY29uc3QgY2hhciogbWFjcm9zUHJvcCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFByb3BlcnR5KCJNQUNST1MiKSkgewotICAgICAgb3V0cHV0ID0gbWFjcm9zUHJvcDsKKyAgICBpZiAoY21Qcm9wIG1hY3Jvc1Byb3AgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRQcm9wZXJ0eSgiTUFDUk9TIikpIHsKKyAgICAgIG91dHB1dCA9ICptYWNyb3NQcm9wOwogICAgIH0KICAgfSBlbHNlIGlmIChhcmdzWzFdID09ICJDT01QT05FTlRTIikgewogICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiogY29tcG9uZW50cyA9CiAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0SW5zdGFsbENvbXBvbmVudHMoKTsKICAgICBvdXRwdXQgPSBjbUpvaW4oKmNvbXBvbmVudHMsICI7Iik7CiAgIH0gZWxzZSB7Ci0gICAgY29uc3QgY2hhciogcHJvcCA9IG51bGxwdHI7CisgICAgY21Qcm9wIHByb3AgPSBudWxscHRyOwogICAgIGlmICghYXJnc1sxXS5lbXB0eSgpKSB7CiAgICAgICBwcm9wID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoYXJnc1sxXSk7CiAgICAgfQogICAgIGlmIChwcm9wKSB7Ci0gICAgICBvdXRwdXQgPSBwcm9wOworICAgICAgb3V0cHV0ID0gKnByb3A7CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdldERpcmVjdG9yeVByb3BlcnR5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21HZXREaXJlY3RvcnlQcm9wZXJ0eUNvbW1hbmQuY3h4CmluZGV4IDY0NDM4ZDUuLmZhNGE0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdldERpcmVjdG9yeVByb3BlcnR5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtR2V0RGlyZWN0b3J5UHJvcGVydHlDb21tYW5kLmN4eApAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKLSNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBuYW1lc3BhY2UgewpAQCAtMzcsMTQgKzM3LDggQEAKICAgICAgICAgIkRJUkVDVE9SWSBhcmd1bWVudCBwcm92aWRlZCB3aXRob3V0IHN1YnNlcXVlbnQgYXJndW1lbnRzIik7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHN0ZDo6c3RyaW5nIHNkID0gKmk7Ci0gICAgLy8gbWFrZSBzdXJlIHRoZSBzdGFydCBkaXIgaXMgYSBmdWxsIHBhdGgKLSAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHNkKSkgewotICAgICAgc2QgPSBjbVN0ckNhdChzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICcvJywgKmkpOwotICAgIH0KLQotICAgIC8vIFRoZSBsb2NhbCBnZW5lcmF0b3JzIGFyZSBhc3NvY2lhdGVkIHdpdGggY29sbGFwc2VkIHBhdGhzLgotICAgIHNkID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzZCk7CisgICAgc3RkOjpzdHJpbmcgc2QgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgKmksIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CiAKICAgICAvLyBsb29rdXAgdGhlIG1ha2VmaWxlIGZyb20gdGhlIGRpcmVjdG9yeSBuYW1lCiAgICAgZGlyID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRNYWtlZmlsZShzZCk7CkBAIC05Miw3ICs4Niw5IEBACiAgICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQotICAgIHByb3AgPSBkaXItPkdldFByb3BlcnR5KCppKTsKKyAgICBpZiAoY21Qcm9wIHAgPSBkaXItPkdldFByb3BlcnR5KCppKSkgeworICAgICAgcHJvcCA9IHAtPmNfc3RyKCk7CisgICAgfQogICB9CiAgIFN0b3JlUmVzdWx0KHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwgcHJvcCk7CiAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2V0RmlsZW5hbWVDb21wb25lbnRDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUdldEZpbGVuYW1lQ29tcG9uZW50Q29tbWFuZC5jeHgKaW5kZXggN2Q5MWE3NS4uMzhiZmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0RmlsZW5hbWVDb21wb25lbnRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21HZXRGaWxlbmFtZUNvbXBvbmVudENvbW1hbmQuY3h4CkBAIC0xNCw2ICsxNCw3IEBACiB7CiAgIGlmIChhcmdzLnNpemUoKSA8IDMpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtMTE0LDE3ICsxMTUsMTggQEAKICAgfSBlbHNlIHsKICAgICBzdGQ6OnN0cmluZyBlcnIgPSAidW5rbm93biBjb21wb25lbnQgIiArIGFyZ3NbMl07CiAgICAgc3RhdHVzLlNldEVycm9yKGVycik7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBpZiAoYXJncy5zaXplKCkgPj0gNCAmJiBhcmdzLmJhY2soKSA9PSAiQ0FDSEUiKSB7CiAgICAgaWYgKCFwcm9ncmFtQXJncy5lbXB0eSgpICYmICFzdG9yZUFyZ3MuZW1wdHkoKSkgewogICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKAotICAgICAgICBzdG9yZUFyZ3MsIHByb2dyYW1BcmdzLmNfc3RyKCksICIiLAorICAgICAgICBzdG9yZUFyZ3MsIHByb2dyYW1BcmdzLCAiIiwKICAgICAgICAgYXJnc1syXSA9PSAiUEFUSCIgPyBjbVN0YXRlRW51bXM6OkZJTEVQQVRIIDogY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogICAgIH0KICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgICBhcmdzLmZyb250KCksIHJlc3VsdC5jX3N0cigpLCAiIiwKKyAgICAgIGFyZ3MuZnJvbnQoKSwgcmVzdWx0LCAiIiwKICAgICAgIGFyZ3NbMl0gPT0gIlBBVEgiID8gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCA6IGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgfSBlbHNlIHsKICAgICBpZiAoIXByb2dyYW1BcmdzLmVtcHR5KCkgJiYgIXN0b3JlQXJncy5lbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZXRQaXBlcy5jeHggYi9Tb3VyY2UvY21HZXRQaXBlcy5jeHgKaW5kZXggNGVkYTFjNS4uYTViNjQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0UGlwZXMuY3h4CisrKyBiL1NvdXJjZS9jbUdldFBpcGVzLmN4eApAQCAtMiwxMCArMiw5IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdldFBpcGVzLmgiCiAKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KIAotI2luY2x1ZGUgImNtX3V2LmgiCi0KICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICMgIGluY2x1ZGUgPGlvLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdldFByb3BlcnR5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21HZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CmluZGV4IDk0N2Q4OTMuLmNiYTc3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdldFByb3BlcnR5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtR2V0UHJvcGVydHlDb21tYW5kLmN4eApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKICNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJjbVNldFByb3BlcnR5Q29tbWFuZC5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ4LDcgKzQ5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lKTsKIGJvb2wgSGFuZGxlU291cmNlTW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBPdXRUeXBlIGluZm9UeXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlJiBkaXJlY3RvcnlfbWFrZWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpOwogYm9vbCBIYW5kbGVUZXN0TW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgT3V0VHlwZSBpbmZvVHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lKTsKQEAgLTc4LDYgKzgxLDExIEBACiAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgIHN0ZDo6c3RyaW5nIHByb3BlcnR5TmFtZTsKIAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlX2ZpbGVfZGlyZWN0b3JpZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXM7CisgIGJvb2wgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkID0gZmFsc2U7CisgIGJvb2wgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkID0gZmFsc2U7CisKICAgLy8gR2V0IHRoZSBzY29wZSBmcm9tIHdoaWNoIHRvIGdldCB0aGUgcHJvcGVydHkuCiAgIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZTsKICAgaWYgKGFyZ3NbMV0gPT0gIkdMT0JBTCIpIHsKQEAgLTExMSw3ICsxMTksOSBAQAogICAgIERvaW5nTm9uZSwKICAgICBEb2luZ05hbWUsCiAgICAgRG9pbmdQcm9wZXJ0eSwKLSAgICBEb2luZ1R5cGUKKyAgICBEb2luZ1R5cGUsCisgICAgRG9pbmdTb3VyY2VEaXJlY3RvcnksCisgICAgRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkKICAgfTsKICAgRG9pbmcgZG9pbmcgPSBEb2luZ05hbWU7CiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAyOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewpAQCAtMTMyLDYgKzE0MiwyMCBAQAogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdOYW1lKSB7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICAgIG5hbWUgPSBhcmdzW2ldOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdOb25lICYmIHNjb3BlID09IGNtUHJvcGVydHk6OlNPVVJDRV9GSUxFICYmCisgICAgICAgICAgICAgICBhcmdzW2ldID09ICJESVJFQ1RPUlkiKSB7CisgICAgICBkb2luZyA9IERvaW5nU291cmNlRGlyZWN0b3J5OworICAgICAgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nTm9uZSAmJiBzY29wZSA9PSBjbVByb3BlcnR5OjpTT1VSQ0VfRklMRSAmJgorICAgICAgICAgICAgICAgYXJnc1tpXSA9PSAiVEFSR0VUX0RJUkVDVE9SWSIpIHsKKyAgICAgIGRvaW5nID0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3Rvcnk7CisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VEaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLnB1c2hfYmFjayhhcmdzW2ldKTsKKyAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcy5wdXNoX2JhY2soYXJnc1tpXSk7CisgICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUHJvcGVydHkpIHsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOwogICAgICAgcHJvcGVydHlOYW1lID0gYXJnc1tpXTsKQEAgLTE0Nyw2ICsxNzEsMTYgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAorICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4gc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlczsKKyAgYm9vbCBmaWxlX3Njb3Blc19oYW5kbGVkID0KKyAgICBTZXRQcm9wZXJ0eUNvbW1hbmQ6OkhhbmRsZUFuZFZhbGlkYXRlU291cmNlRmlsZURpcmVjdG9ydG9yeVNjb3BlcygKKyAgICAgIHN0YXR1cywgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkLCBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcywKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcywgc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlcyk7CisgIGlmICghZmlsZV9zY29wZXNfaGFuZGxlZCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIC8vIENvbXB1dGUgcmVxdWVzdGVkIG91dHB1dC4KICAgaWYgKGluZm9UeXBlID09IE91dEJyaWVmRG9jKSB7CiAgICAgLy8gTG9va3VwIGJyaWVmIGRvY3VtZW50YXRpb24uCkBAIC0xODAsNiArMjE0LDExIEBACiAgICAgfQogICB9IGVsc2UgewogICAgIC8vIERpc3BhdGNoIHByb3BlcnR5IGdldHRpbmcuCisgICAgY21NYWtlZmlsZSYgZGlyZWN0b3J5X3Njb3BlX21mID0gKihzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzWzBdKTsKKyAgICBib29sIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSA9CisgICAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQgfHwKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZDsKKwogICAgIHN3aXRjaCAoc2NvcGUpIHsKICAgICAgIGNhc2UgY21Qcm9wZXJ0eTo6R0xPQkFMOgogICAgICAgICByZXR1cm4gSGFuZGxlR2xvYmFsTW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwKQEAgLTE5MSw4ICsyMzAsOSBAQAogICAgICAgICByZXR1cm4gSGFuZGxlVGFyZ2V0TW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lKTsKICAgICAgIGNhc2UgY21Qcm9wZXJ0eTo6U09VUkNFX0ZJTEU6Ci0gICAgICAgIHJldHVybiBIYW5kbGVTb3VyY2VNb2RlKHN0YXR1cywgbmFtZSwgaW5mb1R5cGUsIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gSGFuZGxlU291cmNlTW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfc2NvcGVfbWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSk7CiAgICAgICBjYXNlIGNtUHJvcGVydHk6OlRFU1Q6CiAgICAgICAgIHJldHVybiBIYW5kbGVUZXN0TW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwgcHJvcGVydHlOYW1lKTsKICAgICAgIGNhc2UgY21Qcm9wZXJ0eTo6VkFSSUFCTEU6CkBAIC0yNDEsOCArMjgxLDkgQEAKIAogICAvLyBHZXQgdGhlIHByb3BlcnR5LgogICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7CisgIGNtUHJvcCBwID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgIHJldHVybiBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyKTsKIH0KIAogYm9vbCBIYW5kbGVEaXJlY3RvcnlNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLApAQCAtMjU2LDE0ICsyOTcsOCBAQAogICBpZiAoIW5hbWUuZW1wdHkoKSkgewogICAgIC8vIENvbnN0cnVjdCB0aGUgZGlyZWN0b3J5IG5hbWUuICBJbnRlcnByZXQgcmVsYXRpdmUgcGF0aHMgd2l0aAogICAgIC8vIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotICAgIHN0ZDo6c3RyaW5nIGRpciA9IG5hbWU7Ci0gICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChkaXIpKSB7Ci0gICAgICBkaXIgPQotICAgICAgICBjbVN0ckNhdChzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICcvJywgbmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxvY2FsIGdlbmVyYXRvcnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBjb2xsYXBzZWQgcGF0aHMuCi0gICAgZGlyID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChkaXIpOworICAgIHN0ZDo6c3RyaW5nIGRpciA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICBuYW1lLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogCiAgICAgLy8gTG9va3VwIHRoZSBnZW5lcmF0b3IuCiAgICAgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZE1ha2VmaWxlKGRpcik7CkBAIC0yOTQsOCArMzI5LDkgQEAKICAgfQogCiAgIC8vIEdldCB0aGUgcHJvcGVydHkuCisgIGNtUHJvcCBwID0gbWYtPkdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgIHJldHVybiBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgbWYtPkdldFByb3BlcnR5KHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyKTsKIH0KIAogYm9vbCBIYW5kbGVUYXJnZXRNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLApAQCAtMzA4LDE0ICszNDQsMjQgQEAKICAgfQogCiAgIGlmIChjbVRhcmdldCogdGFyZ2V0ID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuRmluZFRhcmdldFRvVXNlKG5hbWUpKSB7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNFRF9UQVJHRVQiKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNFRF9UQVJHRVQiIHx8IHByb3BlcnR5TmFtZSA9PSAiQUxJQVNfR0xPQkFMIikgewogICAgICAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzQWxpYXMobmFtZSkpIHsKLSAgICAgICAgcmV0dXJuIFN0b3JlUmVzdWx0KGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNFRF9UQVJHRVQiKSB7CisKKyAgICAgICAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNfR0xPQkFMIikgeworICAgICAgICAgIHJldHVybiBTdG9yZVJlc3VsdCgKKyAgICAgICAgICAgIGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsCisgICAgICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNBbGlhcyhuYW1lKQorICAgICAgICAgICAgICA/ICJUUlVFIgorICAgICAgICAgICAgICA6ICJGQUxTRSIpOworICAgICAgICB9CiAgICAgICB9CiAgICAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwgbnVsbHB0cik7CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIHByb3BfY3N0ciA9IG51bGxwdHI7CisgICAgY21Qcm9wIHByb3BfY3N0ciA9IG51bGxwdHI7CiAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBidCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEJhY2t0cmFjZSgpOwogICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRNZXNzZW5nZXIoKTsKICAgICBpZiAoY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpQYXNzZXNXaGl0ZWxpc3QoCkBAIC0zMjUsNyArMzcxLDggQEAKICAgICAgICAgcHJvcF9jc3RyID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwgcHJvcF9jc3RyKTsKKyAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9jc3RyID8gcHJvcF9jc3RyLT5jX3N0cigpIDogbnVsbHB0cik7CiAgIH0KICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJjb3VsZCBub3QgZmluZCBUQVJHRVQgIiwgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuICBQZXJoYXBzIGl0IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZC4iKSk7CkBAIC0zMzQsNyArMzgxLDkgQEAKIAogYm9vbCBIYW5kbGVTb3VyY2VNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIE91dFR5cGUgaW5mb1R5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSYgZGlyZWN0b3J5X21ha2VmaWxlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgc291cmNlX2ZpbGVfcGF0aHNfc2hvdWxkX2JlX2Fic29sdXRlKQogewogICBpZiAobmFtZS5lbXB0eSgpKSB7CiAgICAgc3RhdHVzLlNldEVycm9yKCJub3QgZ2l2ZW4gbmFtZSBmb3IgU09VUkNFIHNjb3BlLiIpOwpAQCAtMzQyLDEyICszOTEsMTcgQEAKICAgfQogCiAgIC8vIEdldCB0aGUgc291cmNlIGZpbGUuCi0gIGlmIChjbVNvdXJjZUZpbGUqIHNmID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0T3JDcmVhdGVTb3VyY2UobmFtZSkpIHsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgc291cmNlX2ZpbGVfYWJzb2x1dGVfcGF0aCA9CisgICAgU2V0UHJvcGVydHlDb21tYW5kOjpNYWtlU291cmNlRmlsZVBhdGhBYnNvbHV0ZUlmTmVlZGVkKAorICAgICAgc3RhdHVzLCBuYW1lLCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpOworICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9CisgICAgICAgIGRpcmVjdG9yeV9tYWtlZmlsZS5HZXRPckNyZWF0ZVNvdXJjZShzb3VyY2VfZmlsZV9hYnNvbHV0ZV9wYXRoKSkgewogICAgIHJldHVybiBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICBzZi0+R2V0UHJvcGVydHlGb3JVc2VyKHByb3BlcnR5TmFtZSkpOwogICB9CiAgIHN0YXR1cy5TZXRFcnJvcigKLSAgICBjbVN0ckNhdCgiZ2l2ZW4gU09VUkNFIG5hbWUgdGhhdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgY3JlYXRlZDogIiwgbmFtZSkpOworICAgIGNtU3RyQ2F0KCJnaXZlbiBTT1VSQ0UgbmFtZSB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBjcmVhdGVkOiAiLAorICAgICAgICAgICAgIHNvdXJjZV9maWxlX2Fic29sdXRlX3BhdGgpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zOTMsMTIgKzQ0NywxMyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gbnVsbHB0cjsKKyAgY21Qcm9wIHZhbHVlID0gbnVsbHB0cjsKICAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShuYW1lKSkgewogICAgIHZhbHVlID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KAogICAgICAgbmFtZSwgcHJvcGVydHlOYW1lKTsKICAgfQotICBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLCB2YWx1ZSk7CisgIFN0b3JlUmVzdWx0KGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsCisgICAgICAgICAgICAgIHZhbHVlID8gdmFsdWUtPmNfc3RyKCkgOiBudWxscHRyKTsKICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdldFNvdXJjZUZpbGVQcm9wZXJ0eUNvbW1hbmQuY3h4IGIvU291cmNlL2NtR2V0U291cmNlRmlsZVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggZWVmZGM2Yy4uNTM5NWJjOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0U291cmNlRmlsZVByb3BlcnR5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtR2V0U291cmNlRmlsZVByb3BlcnR5Q29tbWFuZC5jeHgKQEAgLTQsMzUgKzQsNzEgQEAKIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtU2V0UHJvcGVydHlDb21tYW5kLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAKIGJvb2wgY21HZXRTb3VyY2VGaWxlUHJvcGVydHlDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7Ci0gIGlmIChhcmdzLnNpemUoKSAhPSAzKSB7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6c2l6ZV90eXBlIGFyZ3Nfc2l6ZSA9IGFyZ3Muc2l6ZSgpOworICBpZiAoYXJnc19zaXplICE9IDMgJiYgYXJnc19zaXplICE9IDUpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzOworICBib29sIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworICBib29sIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworCisgIGludCBwcm9wZXJ0eV9hcmdfaW5kZXggPSAyOworICBpZiAoYXJnc1syXSA9PSAiRElSRUNUT1JZIiAmJiBhcmdzX3NpemUgPT0gNSkgeworICAgIHByb3BlcnR5X2FyZ19pbmRleCA9IDQ7CisgICAgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkID0gdHJ1ZTsKKyAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5wdXNoX2JhY2soYXJnc1szXSk7CisgIH0gZWxzZSBpZiAoYXJnc1syXSA9PSAiVEFSR0VUX0RJUkVDVE9SWSIgJiYgYXJnc19zaXplID09IDUpIHsKKyAgICBwcm9wZXJ0eV9hcmdfaW5kZXggPSA0OworICAgIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCA9IHRydWU7CisgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLnB1c2hfYmFjayhhcmdzWzNdKTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzOworICBib29sIGZpbGVfc2NvcGVzX2hhbmRsZWQgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6SGFuZGxlQW5kVmFsaWRhdGVTb3VyY2VGaWxlRGlyZWN0b3J0b3J5U2NvcGVzKAorICAgICAgc3RhdHVzLCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQsCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQsIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLCBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKTsKKyAgaWYgKCFmaWxlX3Njb3Blc19oYW5kbGVkKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgc3RkOjpzdHJpbmcgY29uc3QmIHZhciA9IGFyZ3NbMF07Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlID0gYXJnc1sxXTsKLSAgY21NYWtlZmlsZSYgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKKyAgYm9vbCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUgPQorICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCB8fCBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQ7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IGZpbGUgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6TWFrZVNvdXJjZUZpbGVQYXRoQWJzb2x1dGVJZk5lZWRlZCgKKyAgICAgIHN0YXR1cywgYXJnc1sxXSwgc291cmNlX2ZpbGVfcGF0aHNfc2hvdWxkX2JlX2Fic29sdXRlKTsKKyAgY21NYWtlZmlsZSYgbWYgPSAqc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlc1swXTsKICAgY21Tb3VyY2VGaWxlKiBzZiA9IG1mLkdldFNvdXJjZShmaWxlKTsKIAogICAvLyBmb3IgdGhlIGxvY2F0aW9uIHdlIG11c3QgY3JlYXRlIGEgc291cmNlIGZpbGUgZmlyc3QKLSAgaWYgKCFzZiAmJiBhcmdzWzJdID09ICJMT0NBVElPTiIpIHsKKyAgaWYgKCFzZiAmJiBhcmdzW3Byb3BlcnR5X2FyZ19pbmRleF0gPT0gIkxPQ0FUSU9OIikgewogICAgIHNmID0gbWYuQ3JlYXRlU291cmNlKGZpbGUpOwogICB9CisKICAgaWYgKHNmKSB7CiAgICAgY29uc3QgY2hhciogcHJvcCA9IG51bGxwdHI7Ci0gICAgaWYgKCFhcmdzWzJdLmVtcHR5KCkpIHsKLSAgICAgIHByb3AgPSBzZi0+R2V0UHJvcGVydHlGb3JVc2VyKGFyZ3NbMl0pOworICAgIGlmICghYXJnc1twcm9wZXJ0eV9hcmdfaW5kZXhdLmVtcHR5KCkpIHsKKyAgICAgIHByb3AgPSBzZi0+R2V0UHJvcGVydHlGb3JVc2VyKGFyZ3NbcHJvcGVydHlfYXJnX2luZGV4XSk7CiAgICAgfQogICAgIGlmIChwcm9wKSB7Ci0gICAgICBtZi5BZGREZWZpbml0aW9uKHZhciwgcHJvcCk7CisgICAgICAvLyBTZXQgdGhlIHZhbHVlIG9uIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSBzY29wZSwgbm90IHRoZSBzY29wZSBvZiB0aGUKKyAgICAgIC8vIHJlcXVlc3RlZCBkaXJlY3RvcnkuCisgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGREZWZpbml0aW9uKHZhciwgcHJvcCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KIAotICBtZi5BZGREZWZpbml0aW9uKHZhciwgIk5PVEZPVU5EIik7CisgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZERlZmluaXRpb24odmFyLCAiTk9URk9VTkQiKTsKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZXRUYXJnZXRQcm9wZXJ0eUNvbW1hbmQuY3h4IGIvU291cmNlL2NtR2V0VGFyZ2V0UHJvcGVydHlDb21tYW5kLmN4eAppbmRleCA3ZjVkZjljLi44YTMwNGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZXRUYXJnZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUdldFRhcmdldFByb3BlcnR5Q29tbWFuZC5jeHgKQEAgLTUsMTAgKzUsMTIgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKKyNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgogI2luY2x1ZGUgImNtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5oIgogCkBAIC0yOCwxMyArMzAsMjAgQEAKICAgY21NYWtlZmlsZSYgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKIAogICBpZiAoY21UYXJnZXQqIHRndCA9IG1mLkZpbmRUYXJnZXRUb1VzZSh0YXJnZXROYW1lKSkgewotICAgIGlmIChhcmdzWzJdID09ICJBTElBU0VEX1RBUkdFVCIpIHsKKyAgICBpZiAoYXJnc1syXSA9PSAiQUxJQVNFRF9UQVJHRVQiIHx8IGFyZ3NbMl0gPT0gIkFMSUFTX0dMT0JBTCIpIHsKICAgICAgIGlmIChtZi5Jc0FsaWFzKHRhcmdldE5hbWUpKSB7Ci0gICAgICAgIHByb3AgPSB0Z3QtPkdldE5hbWUoKTsKICAgICAgICAgcHJvcF9leGlzdHMgPSB0cnVlOworICAgICAgICBpZiAoYXJnc1syXSA9PSAiQUxJQVNFRF9UQVJHRVQiKSB7CisKKyAgICAgICAgICBwcm9wID0gdGd0LT5HZXROYW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZ3NbMl0gPT0gIkFMSUFTX0dMT0JBTCIpIHsKKyAgICAgICAgICBwcm9wID0KKyAgICAgICAgICAgIG1mLkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc0FsaWFzKHRhcmdldE5hbWUpID8gIlRSVUUiIDogIkZBTFNFIjsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0gZWxzZSBpZiAoIWFyZ3NbMl0uZW1wdHkoKSkgewotICAgICAgY29uc3QgY2hhciogcHJvcF9jc3RyID0gbnVsbHB0cjsKKyAgICAgIGNtUHJvcCBwcm9wX2NzdHIgPSBudWxscHRyOwogICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBidCA9IG1mLkdldEJhY2t0cmFjZSgpOwogICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciA9IG1mLkdldE1lc3NlbmdlcigpOwogICAgICAgaWYgKGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6UGFzc2VzV2hpdGVsaXN0KHRndC0+R2V0VHlwZSgpLCBhcmdzWzJdLApAQCAtNDUsNyArNTQsNyBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBpZiAocHJvcF9jc3RyKSB7Ci0gICAgICAgIHByb3AgPSBwcm9wX2NzdHI7CisgICAgICAgIHByb3AgPSAqcHJvcF9jc3RyOwogICAgICAgICBwcm9wX2V4aXN0cyA9IHRydWU7CiAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDVlMjI0OGUuLjE1ODljNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdoc011bHRpVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTE0LDExICsxNCwxMiBAQAogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5oIgotI2luY2x1ZGUgImNtTGlua0xpbmVDb21wdXRlci5oIgorI2luY2x1ZGUgImNtTGlua0xpbmVDb21wdXRlci5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsR2hzTXVsdGlHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlTG9jYXRpb24uaCIKICNpbmNsdWRlICJjbVNvdXJjZUdyb3VwLmgiCkBAIC0xNjUsMTMgKzE2NiwxNSBAQAogICAgIG91dHBhdGggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldERpcmVjdG9yeShjb25maWcpOwogICAgIG91dHBhdGggPQogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKHJvb3RwYXRoLCBvdXRwYXRoKTsKLSAgICBmb3V0IDw8ICIgICAgOmJpbkRpclJlbGF0aXZlPVwiIiA8PCBvdXRwYXRoIDw8ICJcIiIgPDwgc3RkOjplbmRsOwotICAgIGZvdXQgPDwgIiAgICAtbyBcIiIgPDwgdGhpcy0+VGFyZ2V0TmFtZVJlYWwgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGZvdXQgPDwgIiAgICA6YmluRGlyUmVsYXRpdmU9XCIiIDw8IG91dHBhdGggPDwgIlwiXG4iCisgICAgICAgICAgICAiICAgIC1vIFwiIiA8PCB0aGlzLT5UYXJnZXROYW1lUmVhbCA8PCAiXCJcbiI7CisgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgIH0KIAogICAvLyBzZXQgdGFyZ2V0IG9iamVjdCBmaWxlIGRlc3RpbmF0aW9uCiAgIG91dHBhdGggPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCk7Ci0gIGZvdXQgPDwgIiAgICA6b3V0cHV0RGlyUmVsYXRpdmU9XCIiIDw8IG91dHBhdGggPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIiAgICA6b3V0cHV0RGlyUmVsYXRpdmU9XCIiIDw8IG91dHBhdGggPDwgIlwiXG4iOwogfQogCiB2b2lkIGNtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3I6OlNldENvbXBpbGVyRmxhZ3Moc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKQEAgLTE4MCwxNSArMTgzLDEyIEBACiAgIGF1dG8gaSA9IHRoaXMtPkZsYWdzQnlMYW5ndWFnZS5maW5kKGxhbmd1YWdlKTsKICAgaWYgKGkgPT0gdGhpcy0+RmxhZ3NCeUxhbmd1YWdlLmVuZCgpKSB7CiAgICAgc3RkOjpzdHJpbmcgZmxhZ3M7Ci0gICAgY29uc3QgY2hhciogbGFuZyA9IGxhbmd1YWdlLmNfc3RyKCk7Ci0KLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFncyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7Ci0KLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQ01QMDAxOEZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRMYW5ndWFnZUZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGNvbmZpZyk7CisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENNUDAwMThGbGFncyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGNvbmZpZyk7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZFZpc2liaWxpdHlQcmVzZXRGbGFncygKLSAgICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcpOworICAgICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UpOwogCiAgICAgLy8gQXBwZW5kIG9sZC1zdHlsZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiBmbGFncy4KICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPkdldERlZmluZUZsYWdzKCkgIT0gIiAiKSB7CkBAIC0xOTcsOCArMTk3LDggQEAKICAgICB9CiAKICAgICAvLyBBZGQgdGFyZ2V0LXNwZWNpZmljIGZsYWdzLgotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDb21waWxlT3B0aW9ucyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDb21waWxlT3B0aW9ucyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgY29uZmlnKTsKIAogICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZhbHVlX3R5cGUgZW50cnkobGFuZ3VhZ2UsIGZsYWdzKTsKICAgICBpID0gdGhpcy0+RmxhZ3NCeUxhbmd1YWdlLmluc2VydChlbnRyeSkuZmlyc3Q7CkBAIC0yMTEsMTMgKzIxMSwxMiBAQAogICBhdXRvIGkgPSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5maW5kKGxhbmd1YWdlKTsKICAgaWYgKGkgPT0gdGhpcy0+RGVmaW5lc0J5TGFuZ3VhZ2UuZW5kKCkpIHsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZGVmaW5lczsKLSAgICBjb25zdCBjaGFyKiBsYW5nID0gbGFuZ3VhZ2UuY19zdHIoKTsKICAgICAvLyBBZGQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIGZvciB0aGlzIHRhcmdldCBhbmQgY29uZmlndXJhdGlvbi4KICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGVmaW5lcyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgZGVmaW5lcyk7CiAKICAgICBzdGQ6OnN0cmluZyBkZWZpbmVzU3RyaW5nOwotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Kb2luRGVmaW5lcyhkZWZpbmVzLCBkZWZpbmVzU3RyaW5nLCBsYW5nKTsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Sm9pbkRlZmluZXMoZGVmaW5lcywgZGVmaW5lc1N0cmluZywgbGFuZ3VhZ2UpOwogCiAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjo6dmFsdWVfdHlwZSBlbnRyeShsYW5ndWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXNTdHJpbmcpOwpAQCAtMjM1LDggKzIzNCw4IEBACiAgICAgaWYgKCFmbGFnc0J5TGFuZ0ktPnNlY29uZC5lbXB0eSgpKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ2hzQ29tcEZsYWdzID0KICAgICAgICAgY21TeXN0ZW1Ub29sczo6UGFyc2VBcmd1bWVudHMoZmxhZ3NCeUxhbmdJLT5zZWNvbmQpOwotICAgICAgZm9yIChhdXRvJiBmIDogZ2hzQ29tcEZsYWdzKSB7Ci0gICAgICAgIGZvdXQgPDwgIiAgICAiIDw8IGYgPDwgc3RkOjplbmRsOworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZiA6IGdoc0NvbXBGbGFncykgeworICAgICAgICBmb3V0IDw8ICIgICAgIiA8PCBmIDw8ICdcbic7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0yNDksNyArMjQ4LDcgQEAKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDb21waWxlRGVmaW5pdGlvbnMoY29tcGlsZURlZmluaXRpb25zLCBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29tcGlsZURlZmluaXRpb24gOiBjb21waWxlRGVmaW5pdGlvbnMpIHsKLSAgICBmb3V0IDw8ICIgICAgLUQiIDw8IGNvbXBpbGVEZWZpbml0aW9uIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICIgICAgLUQiIDw8IGNvbXBpbGVEZWZpbml0aW9uIDw8ICdcbic7CiAgIH0KIH0KIApAQCAtMjYyLDcgKzI2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGNvbmZpZyk7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaW5jbHVkZSA6IGluY2x1ZGVzKSB7Ci0gICAgZm91dCA8PCAiICAgIC1JXCIiIDw8IGluY2x1ZGUgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAiICAgIC1JXCIiIDw8IGluY2x1ZGUgPDwgIlwiXG4iOwogICB9CiB9CiAKQEAgLTI5MCwxNSArMjg5LDE1IEBACiAKICAgLy8gd3JpdGUgb3V0IGxpbmsgb3B0aW9ucwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbG9wdHMgPSBjbVN5c3RlbVRvb2xzOjpQYXJzZUFyZ3VtZW50cyhsaW5rRmxhZ3MpOwotICBmb3IgKGF1dG8mIGwgOiBsb3B0cykgewotICAgIGZvdXQgPDwgIiAgICAiIDw8IGwgPDwgc3RkOjplbmRsOworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBsIDogbG9wdHMpIHsKKyAgICBmb3V0IDw8ICIgICAgIiA8PCBsIDw8ICdcbic7CiAgIH0KIAogICAvLyB3cml0ZSBvdXQgbGluayBzZWFyY2ggcGF0aHMKICAgLy8gbXVzdCBiZSBxdW90ZWQgZm9yIHBhdGhzIHRoYXQgY29udGFpbiBzcGFjZXMKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxwYXRoID0gY21TeXN0ZW1Ub29sczo6UGFyc2VBcmd1bWVudHMobGlua1BhdGgpOwotICBmb3IgKGF1dG8mIGwgOiBscGF0aCkgewotICAgIGZvdXQgPDwgIiAgICAtTFwiIiA8PCBsIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBsIDogbHBhdGgpIHsKKyAgICBmb3V0IDw8ICIgICAgLUxcIiIgPDwgbCA8PCAiXCJcbiI7CiAgIH0KIAogICAvLyB3cml0ZSBvdXQgbGluayBsaWJzCkBAIC0zMDcsMTIgKzMwNiwxMiBAQAogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsbGlicyA9CiAgICAgY21TeXN0ZW1Ub29sczo6UGFyc2VBcmd1bWVudHMobGlua0xpYnJhcmllcyk7Ci0gIGZvciAoYXV0byYgbCA6IGxsaWJzKSB7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGwgOiBsbGlicykgewogICAgIGlmIChsLmNvbXBhcmUoMCwgMiwgIi1sIikgPT0gMCkgewotICAgICAgZm91dCA8PCAiICAgIFwiIiA8PCBsIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgICAgZm91dCA8PCAiICAgIFwiIiA8PCBsIDw8ICJcIlxuIjsKICAgICB9IGVsc2UgewogICAgICAgc3RkOjpzdHJpbmcgcmwgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGwsIGNiZCk7Ci0gICAgICBmb3V0IDw8ICIgICAgLWxcIiIgPDwgcmwgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8ICIgICAgLWxcIiIgPDwgcmwgPDwgIlwiXG4iOwogICAgIH0KICAgfQogfQpAQCAtMzUzLDEzICszNTIsMTIgQEAKICAgICB0aGlzLT5Xcml0ZUN1c3RvbUNvbW1hbmRzSGVscGVyKGYsIGNjZyk7CiAgICAgZi5DbG9zZSgpOwogICAgIGlmICh0aGlzLT5UYWdUeXBlICE9IEdoc011bHRpR3BqOjpDVVNUT01fVEFSR0VUKSB7Ci0gICAgICBmb3V0IDw8ICIgICAgOiIgPDwgY21kIDw8ICI9XCIiIDw8IGZuYW1lIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgICAgZm91dCA8PCAiICAgIDoiIDw8IGNtZCA8PCAiPVwiIiA8PCBmbmFtZSA8PCAiXCJcbiI7CiAgICAgfSBlbHNlIHsKLSAgICAgIGZvdXQgPDwgZm5hbWUgPDwgc3RkOjplbmRsOwotICAgICAgZm91dCA8PCAiICAgIDpvdXRwdXROYW1lPVwiIiA8PCBmbmFtZSA8PCAiLnJ1bGVcIiIgPDwgc3RkOjplbmRsOworICAgICAgZm91dCA8PCBmbmFtZSA8PCAiXG4gICAgOm91dHB1dE5hbWU9XCIiIDw8IGZuYW1lIDw8ICIucnVsZVwiXG4iOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGJ5cCA6IGNjZy5HZXRCeXByb2R1Y3RzKCkpIHsKLSAgICAgIGZvdXQgPDwgIiAgICA6ZXh0cmFPdXRwdXRGaWxlPVwiIiA8PCBieXAgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8ICIgICAgOmV4dHJhT3V0cHV0RmlsZT1cIiIgPDwgYnlwIDw8ICJcIlxuIjsKICAgICB9CiAgIH0KIH0KQEAgLTQ1MSw4ICs0NDksNyBAQAogCiAgIC8vIHB1c2ggYmFjayB0aGUgY3VzdG9tIGNvbW1hbmRzCiAgIGZvciAoYXV0byBjb25zdCYgYyA6IGNtZExpbmVzKSB7Ci0gICAgZm91dCA8PCBjIDw8IHN0ZDo6ZW5kbDsKLSAgICBmb3V0IDw8IGNoZWNrX2Vycm9yIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8IGMgPDwgJ1xuJyA8PCBjaGVja19lcnJvciA8PCAnXG4nOwogICB9CiB9CiAKQEAgLTQ2MCwxMSArNDU3LDExIEBACiAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3QgY21Tb3VyY2VGaWxlKiBzZiwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lLAogICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcEZsYWcpCiB7Ci0gIGNvbnN0IGNoYXIqIHByb3AgPSBzZi0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICBjbVByb3AgcHJvcCA9IHNmLT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CiAgIGlmIChwcm9wKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpc3QgPSBjbUV4cGFuZGVkTGlzdChwcm9wKTsKLSAgICBmb3IgKGF1dG8mIHAgOiBsaXN0KSB7Ci0gICAgICBmb3V0IDw8ICIgICAgIiA8PCBwcm9wRmxhZyA8PCBwIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlzdCA9IGNtRXhwYW5kZWRMaXN0KCpwcm9wKTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBwIDogbGlzdCkgeworICAgICAgZm91dCA8PCAiICAgICIgPDwgcHJvcEZsYWcgPDwgcCA8PCAnXG4nOwogICAgIH0KICAgfQogfQpAQCAtNDgzLDcgKzQ4MCw3IEBACiAgIC8qIGZvciBlYWNoIHNvdXJjZSBmaWxlIGFzc2lnbiBpdCB0byBpdHMgZ3JvdXAgKi8KICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+PiBncm91cEZpbGVzOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZ3JvdXBOYW1lczsKLSAgZm9yIChhdXRvJiBzZiA6IHNvdXJjZXMpIHsKKyAgZm9yIChjbVNvdXJjZUZpbGUqIHNmIDogc291cmNlcykgewogICAgIGNtU291cmNlR3JvdXAqIHNvdXJjZUdyb3VwID0KICAgICAgIHRoaXMtPk1ha2VmaWxlLT5GaW5kU291cmNlR3JvdXAoc2YtPlJlc29sdmVGdWxsUGF0aCgpLCBzb3VyY2VHcm91cHMpOwogICAgIHN0ZDo6c3RyaW5nIGduID0gc291cmNlR3JvdXAtPkdldEZ1bGxOYW1lKCk7CkBAIC01NTUsNyArNTUyLDcgQEAKICAgICBzdGQ6Om9zdHJlYW0qIGZvdXQ7CiAgICAgYm9vbCB1c2VQcm9qZWN0RmlsZSA9CiAgICAgICBjbUlzT24odGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0hTX05PX1NPVVJDRV9HUk9VUF9GSUxFIikpIHx8Ci0gICAgICBjbUlzT24odGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRSIpKTsKKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9HSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUiKTsKICAgICBpZiAodXNlUHJvamVjdEZpbGUgfHwgc2cuZW1wdHkoKSkgewogICAgICAgZm91dCA9ICZmb3V0X3Byb2o7CiAgICAgfSBlbHNlIHsKQEAgLTU3OSwxMiArNTc2LDEyIEBACiAKICAgICBpZiAodXNlUHJvamVjdEZpbGUpIHsKICAgICAgIGlmIChzZy5lbXB0eSgpKSB7Ci0gICAgICAgICpmb3V0IDw8ICJ7Y29tbWVudH0gT3RoZXJzIiA8PCBzdGQ6OmVuZGw7CisgICAgICAgICpmb3V0IDw8ICJ7Y29tbWVudH0gT3RoZXJzIiA8PCAnXG4nOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgKmZvdXQgPDwgIntjb21tZW50fSAiIDw8IHNnIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgKmZvdXQgPDwgIntjb21tZW50fSAiIDw8IHNnIDw8ICdcbic7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmIChzZy5lbXB0eSgpKSB7Ci0gICAgICAqZm91dCA8PCAie2NvbW1lbnR9IE90aGVycyIgPDwgc3RkOjplbmRsOworICAgICAgKmZvdXQgPDwgIntjb21tZW50fSBPdGhlcnNcbiI7CiAgICAgfQogCiAgICAgaWYgKHNnICE9ICJDTWFrZSBSdWxlcyIpIHsKQEAgLTYxMiw3ICs2MDksNyBAQAogICAgICAgICAgIGNvbXBpbGUgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgICpmb3V0IDw8IGNvbW1lbnQgPDwgZm5hbWUgPDwgc3RkOjplbmRsOworICAgICAgICAqZm91dCA8PCBjb21tZW50IDw8IGZuYW1lIDw8ICdcbic7CiAgICAgICAgIGlmIChjb21waWxlKSB7CiAgICAgICAgICAgaWYgKCJsZCIgIT0gc2ktPkdldEV4dGVuc2lvbigpICYmICJpbnQiICE9IHNpLT5HZXRFeHRlbnNpb24oKSAmJgogICAgICAgICAgICAgICAiYnNwIiAhPSBzaS0+R2V0RXh0ZW5zaW9uKCkpIHsKQEAgLTYyOCw3ICs2MjUsNyBAQAogICAgICAgICAgIHN0ZDo6c3RyaW5nIG9iamVjdE5hbWUgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE9iamVjdE5hbWUoc2kpOwogICAgICAgICAgIGlmICghb2JqZWN0TmFtZS5lbXB0eSgpICYmCiAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SGFzRXhwbGljaXRPYmplY3ROYW1lKHNpKSkgewotICAgICAgICAgICAgKmZvdXQgPDwgIiAgICAtbyAiIDw8IG9iamVjdE5hbWUgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgKmZvdXQgPDwgIiAgICAtbyAiIDw8IG9iamVjdE5hbWUgPDwgJ1xuJzsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTY5NSwxNCArNjkyLDE0IEBACiAgICAqLwogICBib29sIHNwZWNpZnlFeHRyYSA9IHRydWU7CiAgIGZvciAoYXV0byYgb3V0IDogY2NnLkdldE91dHB1dHMoKSkgewotICAgIGZvdXQgPDwgZm5hbWUgPDwgc3RkOjplbmRsOwotICAgIGZvdXQgPDwgIiAgICA6b3V0cHV0TmFtZT1cIiIgPDwgb3V0IDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgZm5hbWUgPDwgJ1xuJzsKKyAgICBmb3V0IDw8ICIgICAgOm91dHB1dE5hbWU9XCIiIDw8IG91dCA8PCAiXCJcbiI7CiAgICAgaWYgKHNwZWNpZnlFeHRyYSkgewogICAgICAgZm9yIChhdXRvJiBieXAgOiBjY2cuR2V0Qnlwcm9kdWN0cygpKSB7Ci0gICAgICAgIGZvdXQgPDwgIiAgICA6ZXh0cmFPdXRwdXRGaWxlPVwiIiA8PCBieXAgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGZvdXQgPDwgIiAgICA6ZXh0cmFPdXRwdXRGaWxlPVwiIiA8PCBieXAgPDwgIlwiXG4iOwogICAgICAgfQogICAgICAgZm9yIChhdXRvJiBkZXAgOiBjY2cuR2V0RGVwZW5kcygpKSB7Ci0gICAgICAgIGZvdXQgPDwgIiAgICA6ZGVwZW5kcz1cIiIgPDwgZGVwIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgICAgICBmb3V0IDw8ICIgICAgOmRlcGVuZHM9XCIiIDw8IGRlcCA8PCAiXCJcbiI7CiAgICAgICB9CiAgICAgICBzcGVjaWZ5RXh0cmEgPSBmYWxzZTsKICAgICB9CkBAIC03MTIsMjUgKzcwOSwyNSBAQAogdm9pZCBjbUdoc011bHRpVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZU9iamVjdExhbmdPdmVycmlkZSgKICAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBjbVNvdXJjZUZpbGUqIHNvdXJjZUZpbGUpCiB7Ci0gIGNvbnN0IGNoYXIqIHJhd0xhbmdQcm9wID0gc291cmNlRmlsZS0+R2V0UHJvcGVydHkoIkxBTkdVQUdFIik7CisgIGNtUHJvcCByYXdMYW5nUHJvcCA9IHNvdXJjZUZpbGUtPkdldFByb3BlcnR5KCJMQU5HVUFHRSIpOwogICBpZiAobnVsbHB0ciAhPSByYXdMYW5nUHJvcCkgewotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZUxhbmdQcm9wKHJhd0xhbmdQcm9wKTsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2VMYW5nUHJvcCgqcmF3TGFuZ1Byb3ApOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBleHRlbnNpb24gPSBzb3VyY2VGaWxlLT5HZXRFeHRlbnNpb24oKTsKICAgICBpZiAoIkNYWCIgPT0gc291cmNlTGFuZ1Byb3AgJiYgKCJjIiA9PSBleHRlbnNpb24gfHwgIkMiID09IGV4dGVuc2lvbikpIHsKLSAgICAgIGZvdXQgPDwgIiAgICAtZG90Y2lzY3h4IiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8ICIgICAgLWRvdGNpc2N4eFxuIjsKICAgICB9CiAgIH0KIH0KIAogYm9vbCBjbUdoc011bHRpVGFyZ2V0R2VuZXJhdG9yOjpEZXRlcm1pbmVJZkludGVncml0eUFwcCgpCiB7Ci0gIGNvbnN0IGNoYXIqIHAgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJnaHNfaW50ZWdyaXR5X2FwcCIpOworICBjbVByb3AgcCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoImdoc19pbnRlZ3JpdHlfYXBwIik7CiAgIGlmIChwKSB7Ci0gICAgcmV0dXJuIGNtSXNPbih0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJnaHNfaW50ZWdyaXR5X2FwcCIpKTsKKyAgICByZXR1cm4gY21Jc09uKCpwKTsKICAgfQogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBzb3VyY2VzOwogICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFNvdXJjZUZpbGVzKHNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOwotICBmb3IgKGF1dG8mIHNmIDogc291cmNlcykgeworICBmb3IgKGNvbnN0IGNtU291cmNlRmlsZSogc2YgOiBzb3VyY2VzKSB7CiAgICAgaWYgKCJpbnQiID09IHNmLT5HZXRFeHRlbnNpb24oKSkgewogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuaAppbmRleCA5YWYwZWFjLi4zYzk3OTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuaApAQCAtNDYsNiArNDYsNyBAQAogCiAgIGJvb2wgQWxsb3dOb3RQYXJhbGxlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wgQWxsb3dEZWxldGVPbkVycm9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgYm9vbCBDYW5Fc2NhcGVPY3RvdGhvcnBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcm90ZWN0ZWQ6CiAgIHN0ZDo6dmVjdG9yPEdlbmVyYXRlZE1ha2VDb21tYW5kPiBHZW5lcmF0ZUJ1aWxkQ29tbWFuZCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbENvbW1vbkdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxDb21tb25HZW5lcmF0b3IuY3h4CmluZGV4IGUwNGVlZjEuLjlkYzg2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbENvbW1vbkdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmN4eApAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC00NSw4ICs0Niw4IEBACiAgICAgICB9CiAgICAgICBEaXJlY3RvcnlUYXJnZXQ6OlRhcmdldCB0OwogICAgICAgdC5HVCA9IGd0LmdldCgpOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGV4Y2x1ZGUgPSBndC0+R2V0UHJvcGVydHkoIkVYQ0xVREVfRlJPTV9BTEwiKSkgewotICAgICAgICBpZiAoY21Jc09uKGV4Y2x1ZGUpKSB7CisgICAgICBpZiAoY21Qcm9wIGV4Y2x1ZGUgPSBndC0+R2V0UHJvcGVydHkoIkVYQ0xVREVfRlJPTV9BTEwiKSkgeworICAgICAgICBpZiAoY21Jc09uKCpleGNsdWRlKSkgewogICAgICAgICAgIC8vIFRoaXMgdGFyZ2V0IGhhcyBiZWVuIGV4cGxpY2l0bHkgZXhjbHVkZWQuCiAgICAgICAgICAgdC5FeGNsdWRlRnJvbUFsbCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsR2VuZXJhdG9yLmN4eAppbmRleCAyMzgwOTdkLi40OWI3M2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5jeHgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC00MSw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC01MSw4ICs1Myw4IEBACiAjaW5jbHVkZSAiY21ha2UuaCIKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKLSMgIGluY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLSMgIGluY2x1ZGUgImNtX2pzb25jcHBfd3JpdGVyLmgiCisjICBpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyMgIGluY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAogIyAgaW5jbHVkZSAiY21DcnlwdG9IYXNoLmgiCiAjICBpbmNsdWRlICJjbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyLmgiCkBAIC0yMzEsNyArMjMzLDcgQEAKICAgaWYgKCFvcHRpb25hbCAmJiAocGF0aC5lbXB0eSgpIHx8ICFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHBhdGgpKSkgewogICAgIHJldHVybjsKICAgfQotICBjb25zdCBzdGQ6OnN0cmluZyogY25hbWUgPQorICBjbVByb3AgY25hbWUgPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGxhbmdDb21wKTsKICAgc3RkOjpzdHJpbmcgY2hhbmdlVmFyczsKICAgaWYgKGNuYW1lICYmICFvcHRpb25hbCkgewpAQCAtMjQ2LDExICsyNDgsMTAgQEAKICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhjbmFtZVN0cmluZyk7CiAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMocGF0aFN0cmluZyk7CiAgICAgaWYgKGNuYW1lU3RyaW5nICE9IHBhdGhTdHJpbmcpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGN2YXJzID0KLSAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKLSAgICAgICAgICAiX19DTUFLRV9ERUxFVEVfQ0FDSEVfQ0hBTkdFX1ZBUlNfIik7CisgICAgICBjbVByb3AgY3ZhcnMgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAorICAgICAgICAiX19DTUFLRV9ERUxFVEVfQ0FDSEVfQ0hBTkdFX1ZBUlNfIik7CiAgICAgICBpZiAoY3ZhcnMpIHsKLSAgICAgICAgY2hhbmdlVmFycyArPSBjdmFyczsKKyAgICAgICAgY2hhbmdlVmFycyArPSAqY3ZhcnM7CiAgICAgICAgIGNoYW5nZVZhcnMgKz0gIjsiOwogICAgICAgfQogICAgICAgY2hhbmdlVmFycyArPSBsYW5nQ29tcDsKQEAgLTMwOCwxOSArMzA5LDE2IEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgICAgIHRhcmdldC0+TWFrZWZpbGUtPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MpOworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3MgPQorICAgICAgICB0YXJnZXQtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBzcmNzOwotICAgICAgaWYgKGNvbmZpZ3MuZW1wdHkoKSkgewotICAgICAgICB0YXJnZXQtPkdldFNvdXJjZUZpbGVzKHNyY3MsICIiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKLSAgICAgICAgICB0YXJnZXQtPkdldFNvdXJjZUZpbGVzKHNyY3MsIGNvbmZpZyk7Ci0gICAgICAgICAgaWYgKHNyY3MuZW1wdHkoKSkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQorICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlncykgeworICAgICAgICB0YXJnZXQtPkdldFNvdXJjZUZpbGVzKHNyY3MsIGNvbmZpZyk7CisgICAgICAgIGlmICghc3Jjcy5lbXB0eSgpKSB7CisgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KKwogICAgICAgaWYgKHNyY3MuZW1wdHkoKSkgewogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKICAgICAgICAgZSA8PCAiTm8gU09VUkNFUyBnaXZlbiB0byB0YXJnZXQ6ICIgPDwgdGFyZ2V0LT5HZXROYW1lKCk7CkBAIC0zNDQsNyArMzQyLDggQEAKICAgICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgJiYKICAgICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJXSU4zMl9FWEVDVVRBQkxFIikpIHsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICAgICAgICB0YXJnZXQtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKCk7CisgICAgICAgICAgdGFyZ2V0LT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKICAgICAgICAgICBpZiAodGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcpID09ICJTd2lmdCIpIHsKICAgICAgICAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKApAQCAtMzc2LDkgKzM3NSw5IEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyByZXVzZUZyb20gPQorICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHJldXNlRnJvbSA9CiAgICAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJQUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTSIpOwotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgY29tcGlsZVBkYiA9CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcGlsZVBkYiA9CiAgICAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJDT01QSUxFX1BEQl9OQU1FIik7CiAKICAgICAgIGlmICghcmV1c2VGcm9tLmVtcHR5KCkgJiYgcmV1c2VGcm9tICE9IGNvbXBpbGVQZGIpIHsKQEAgLTQwNCw3ICs0MDMsNyBAQAogICBpZiAoaXQgPT0gdGhpcy0+QnVpbGRFeHBvcnRTZXRzLmVuZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHJldHVybiAhY21Db250YWlucyh0aGlzLT5CdWlsZEV4cG9ydEV4cG9ydFNldHMsIGZpbGVuYW1lKTsKKyAgcmV0dXJuICFjbTo6Y29udGFpbnModGhpcy0+QnVpbGRFeHBvcnRFeHBvcnRTZXRzLCBmaWxlbmFtZSk7CiB9CiAKIC8vIEZpbmQgdGhlIG1ha2UgcHJvZ3JhbSBmb3IgdGhlIGdlbmVyYXRvciwgcmVxdWlyZWQgZm9yIHRyeSBjb21waWxlcwpAQCAtNDQ1LDggKzQ0NCw4IEBACiAgICAgY21TeXN0ZW1Ub29sczo6R2V0U2hvcnRQYXRoKG1ha2VQcm9ncmFtLCBtYWtlUHJvZ3JhbSk7CiAgICAgY21TeXN0ZW1Ub29sczo6U3BsaXRQcm9ncmFtUGF0aChtYWtlUHJvZ3JhbSwgZGlyLCBmaWxlKTsKICAgICBtYWtlUHJvZ3JhbSA9IGNtU3RyQ2F0KGRpciwgJy8nLCBzYXZlRmlsZSk7Ci0gICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIiwgbWFrZVByb2dyYW0uY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlIHByb2dyYW0iLCBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iLCBtYWtlUHJvZ3JhbSwgIm1ha2UgcHJvZ3JhbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUzMCw3ICs1MjksNyBAQAogICAgICAgaWYgKGxhbmcgPT0gIk5PTkUiKSB7CiAgICAgICAgIHRoaXMtPlNldExhbmd1YWdlRW5hYmxlZCgiTk9ORSIsIG1mKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY21Db250YWlucyh0aGlzLT5MYW5ndWFnZXNSZWFkeSwgbGFuZykpIHsKKyAgICAgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+TGFuZ3VhZ2VzUmVhZHksIGxhbmcpKSB7CiAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICAgICAgZSA8PCAiVGhlIHRlc3QgcHJvamVjdCBuZWVkcyBsYW5ndWFnZSAiIDw8IGxhbmcKICAgICAgICAgICAgIDw8ICIgd2hpY2ggaXMgbm90IGVuYWJsZWQuIjsKQEAgLTU4Nyw2ICs1ODYsMTYgQEAKICAgICAgIG1mLT5SZWFkTGlzdEZpbGUoZnBhdGgpOwogICAgIH0KICAgfQorCisgIGlmIChyZWFkQ01ha2VTeXN0ZW0pIHsKKyAgICAvLyBGaW5kIHRoZSBuYXRpdmUgYnVpbGQgdG9vbCBmb3IgdGhpcyBnZW5lcmF0b3IuCisgICAgLy8gVGhpcyBoYXMgdG8gYmUgZG9uZSBlYXJseSBzbyB0aGF0IE1TQnVpbGQgY2FuIGJlIHVzZWQgdG8gZXhhbWluZSB0aGUKKyAgICAvLyBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudC4KKyAgICBpZiAoIXRoaXMtPkZpbmRNYWtlUHJvZ3JhbShtZikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKwogICAvLyAgTG9hZCB0aGUgQ01ha2VEZXRlcm1pbmVTeXN0ZW0uY21ha2UgZmlsZSBhbmQgZmluZCBvdXQKICAgLy8gd2hhdCBwbGF0Zm9ybSB3ZSBhcmUgcnVubmluZyBvbgogICBpZiAoIW1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TWVNURU0iKSkgewpAQCAtNjU4LDExICs2NjcsNiBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBGaW5kIHRoZSBuYXRpdmUgYnVpbGQgdG9vbCBmb3IgdGhpcyBnZW5lcmF0b3IuCi0gICAgaWYgKCF0aGlzLT5GaW5kTWFrZVByb2dyYW0obWYpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQogICB9CiAKICAgLy8gQ2hlY2sgdGhhdCB0aGUgbGFuZ3VhZ2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGdlbmVyYXRvciBhbmQgaXRzCkBAIC0xMDk1LDcgKzEwOTksNyBAQAogewogICAvLyB1c2UgTGFuZ3VhZ2VUb0xpbmtlclByZWZlcmVuY2UgdG8gZGV0ZWN0IHdoZXRoZXIgdGhpcyBmdW5jdGlvbnMgaGFzCiAgIC8vIHJ1biBiZWZvcmUKLSAgaWYgKGNtQ29udGFpbnModGhpcy0+TGFuZ3VhZ2VUb0xpbmtlclByZWZlcmVuY2UsIGwpKSB7CisgIGlmIChjbTo6Y29udGFpbnModGhpcy0+TGFuZ3VhZ2VUb0xpbmtlclByZWZlcmVuY2UsIGwpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTE0MTgsMTMgKzE0MjIsMTMgQEAKICAgLy8gc28gY3JlYXRlIHRoZSBtYXAgZnJvbSBwcm9qZWN0IG5hbWUgdG8gdmVjdG9yIG9mIGxvY2FsIGdlbmVyYXRvcnMKICAgdGhpcy0+RmlsbFByb2plY3RNYXAoKTsKIAotICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHRhcmdldHMgYW5kIHNldCB1cCBBVVRPTU9DLCBBVVRPVUlDIGFuZCBBVVRPUkNDCi0gIGlmICghdGhpcy0+UXRBdXRvR2VuKCkpIHsKKyAgLy8gQWRkIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHNvdXJjZXMgKGUuZy4gdW5pdHkgYnVpbGQpLgorICBpZiAoIXRoaXMtPkFkZEF1dG9tYXRpY1NvdXJjZXMoKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIC8vIEFkZCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBzb3VyY2VzIChlLmcuIHVuaXR5IGJ1aWxkKS4KLSAgaWYgKCF0aGlzLT5BZGRBdXRvbWF0aWNTb3VyY2VzKCkpIHsKKyAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCB0YXJnZXRzIGFuZCBzZXQgdXAgQVVUT01PQywgQVVUT1VJQyBhbmQgQVVUT1JDQworICBpZiAoIXRoaXMtPlF0QXV0b0dlbigpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKQEAgLTE0MzMsMTIgKzE0MzcsMTAgQEAKICAgICBsb2NhbEdlbi0+QWRkSGVscGVyQ29tbWFuZHMoKTsKICAgfQogCi0gIC8vIEZpbmFsaXplIHRoZSBzZXQgb2YgY29tcGlsZSBmZWF0dXJlcyBmb3IgZWFjaCB0YXJnZXQuCi0gIC8vIEZJWE1FOiBUaGlzIHR1cm5zIGludG8gY2FsbHMgdG8gY21NYWtlZmlsZTo6QWRkUmVxdWlyZWRUYXJnZXRGZWF0dXJlCi0gIC8vIHdoaWNoIGFjdHVhbGx5IG1vZGlmaWVzIHRoZSA8bGFuZz5fU1RBTkRBUkQgdGFyZ2V0IHByb3BlcnR5Ci0gIC8vIG9uIHRoZSBvcmlnaW5hbCBjbVRhcmdldCBpbnN0YW5jZS4gIEl0IGFjY3VtdWxhdGVzIGZlYXR1cmVzCi0gIC8vIGFjcm9zcyBhbGwgY29uZmlndXJhdGlvbnMuICBTb21lIHJlZmFjdG9yaW5nIGlzIG5lZWRlZCB0bwotICAvLyBjb21wdXRlIGEgcGVyLWNvbmZpZyByZXN1bHRhIHB1cmVseSBkdXJpbmcgZ2VuZXJhdGlvbi4KKyAgLy8gUGVyZm9ybSB1cC1mcm9udCBjb21wdXRhdGlvbiBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIChzdWNoIGFzIHVua25vd24KKyAgLy8gZmVhdHVyZXMpIGF0IHRoaXMgcG9pbnQuIFdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbXBpbGUgZmVhdHVyZXMgd2UgYWxzbworICAvLyBjYWxjdWxhdGUgYW5kIGNhY2hlIHRoZSBsYW5ndWFnZSBzdGFuZGFyZCByZXF1aXJlZCBieSB0aGUgY29tcGlsZQorICAvLyBmZWF0dXJlcy4KICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIGlmICghbG9jYWxHZW4tPkNvbXB1dGVUYXJnZXRDb21waWxlRmVhdHVyZXMoKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY4OSwxNCArMTY5MSwxNCBAQAogICAgICAgY21Qb2xpY2llczo6UG9saWN5U3RhdHVzIHBvbFN0ID0KICAgICAgICAgbWYtPkdldFBvbGljeVN0YXR1cyhjbVBvbGljaWVzOjpDTVAwMDQzKTsKICAgICAgIGlmIChwb2xTdCA9PSBjbVBvbGljaWVzOjpXQVJOIHx8IHBvbFN0ID09IGNtUG9saWNpZXM6Ok9MRCkgewotICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgICAgICAgbWYtPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MpOworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgICAgICAgbWYtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6RXhjbHVkZUVtcHR5Q29uZmlnKTsKIAogICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogY29uZmlncykgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIGRlZlByb3BOYW1lID0KICAgICAgICAgICAgIGNtU3RyQ2F0KCJDT01QSUxFX0RFRklOSVRJT05TXyIsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjKSk7Ci0gICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIHZhbCA9IG1mLT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKLSAgICAgICAgICAgIHQtPkFwcGVuZFByb3BlcnR5KGRlZlByb3BOYW1lLCB2YWwpOworICAgICAgICAgIGlmIChjbVByb3AgdmFsID0gbWYtPkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgeworICAgICAgICAgICAgdC0+QXBwZW5kUHJvcGVydHkoZGVmUHJvcE5hbWUsICp2YWwpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtMTgwNywxNCArMTgwOSwxMyBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jczsKLSAgICAgIGNvbnN0IGNoYXIqIGluY0RpclByb3AgPQotICAgICAgICB0YXJnZXQuc2Vjb25kLkdldFByb3BlcnR5KCJJTkNMVURFX0RJUkVDVE9SSUVTIik7CisgICAgICBjbVByb3AgaW5jRGlyUHJvcCA9IHRhcmdldC5zZWNvbmQuR2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKICAgICAgIGlmICghaW5jRGlyUHJvcCkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAogICAgICAgc3RkOjpzdHJpbmcgaW5jRGlycyA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcygKLSAgICAgICAgaW5jRGlyUHJvcCwgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpTdHJpcEFsbEdlbmVyYXRvckV4cHJlc3Npb25zKTsKKyAgICAgICAgKmluY0RpclByb3AsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBBbGxHZW5lcmF0b3JFeHByZXNzaW9ucyk7CiAKICAgICAgIGNtRXhwYW5kTGlzdChpbmNEaXJzLCBpbmNzKTsKIApAQCAtMTk4MCw4ICsxOTgxLDkgQEAKICAgc3RkOjpzdHJpbmcgbWFrZUNvbW1hbmRTdHI7CiAgIG91dHB1dCArPSAiXG5SdW4gQnVpbGQgQ29tbWFuZChzKToiOwogCi0gIGZvciAoYXV0byBjb21tYW5kID0gbWFrZUNvbW1hbmQuYmVnaW4oKTsgY29tbWFuZCAhPSBtYWtlQ29tbWFuZC5lbmQoKTsKLSAgICAgICArK2NvbW1hbmQpIHsKKyAgcmV0VmFsID0gMDsKKyAgZm9yIChhdXRvIGNvbW1hbmQgPSBtYWtlQ29tbWFuZC5iZWdpbigpOworICAgICAgIGNvbW1hbmQgIT0gbWFrZUNvbW1hbmQuZW5kKCkgJiYgcmV0VmFsID09IDA7ICsrY29tbWFuZCkgewogICAgIG1ha2VDb21tYW5kU3RyID0gY29tbWFuZC0+UHJpbnRhYmxlKCk7CiAgICAgaWYgKGNvbW1hbmQgIT0gbWFrZUNvbW1hbmQuZW5kKCkpIHsKICAgICAgIG1ha2VDb21tYW5kU3RyICs9ICIgJiYgIjsKQEAgLTIwNjYsOSArMjA2OCw4IEBACiAKICAgLy8gdXBkYXRlIHByb2dyZXNzCiAgIC8vIGVzdGltYXRlIGhvdyBtYW55IGxnIHRoZXJlIHdpbGwgYmUKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIG51bUdlbkMgPQotICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgKLSAgICAgICJDTUFLRV9OVU1CRVJfT0ZfTUFLRUZJTEVTIik7CisgIGNtUHJvcCBudW1HZW5DID0gdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKAorICAgICJDTUFLRV9OVU1CRVJfT0ZfTUFLRUZJTEVTIik7CiAKICAgaWYgKCFudW1HZW5DKSB7CiAgICAgLy8gSWYgQ01BS0VfTlVNQkVSX09GX01BS0VGSUxFUyBpcyBub3Qgc2V0CkBAIC0yMTc3LDggKzIxNzgsOCBAQAogICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgIHJldHVybiB0cnVlOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBleGNsdWRlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIpKSB7Ci0gICAgcmV0dXJuIGNtSXNPbihleGNsdWRlKTsKKyAgaWYgKGNtUHJvcCBleGNsdWRlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIpKSB7CisgICAgcmV0dXJuIGNtSXNPbigqZXhjbHVkZSk7CiAgIH0KICAgLy8gVGhpcyB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gaXRzIGRpcmVjdG9yeS4gIENoZWNrIHdoZXRoZXIgdGhlCiAgIC8vIGRpcmVjdG9yeSBpcyBleGNsdWRlZC4KQEAgLTIyNDUsNyArMjI0Niw3IEBACiAKIGJvb2wgY21HbG9iYWxHZW5lcmF0b3I6OklzQWxpYXMoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gIHJldHVybiBjbUNvbnRhaW5zKHRoaXMtPkFsaWFzVGFyZ2V0cywgbmFtZSk7CisgIHJldHVybiBjbTo6Y29udGFpbnModGhpcy0+QWxpYXNUYXJnZXRzLCBuYW1lKTsKIH0KIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6SW5kZXhUYXJnZXQoY21UYXJnZXQqIHQpCkBAIC0yMjcxLDEwICsyMjcyLDEyIEBACiAgIC8vIFVzZSBhICI6IiBwcmVmaXggdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBwcm9qZWN0LWRlZmluZWQgdGFyZ2V0cy4KICAgLy8gV2UgbXVzdCBzYXRpc2Z5IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6SXNWYWxpZFRhcmdldE5hbWUgc28gdXNlIG5vCiAgIC8vIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycy4KLSAgY2hhciBidWZbMSArIHNpemVvZihndCkgKiAyXTsKKyAgY29uc3RleHByIHNpemVfdCBzaXplb2ZfcHRyID0KKyAgICBzaXplb2YoZ3QpOyAvLyBOT0xJTlQoYnVncHJvbmUtc2l6ZW9mLWV4cHJlc3Npb24pCisgIGNoYXIgYnVmWzEgKyBzaXplb2ZfcHRyICogMl07CiAgIGNoYXIqIGIgPSBidWY7CiAgICpiKysgPSAnOic7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGd0KTsgKytpKSB7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mX3B0cjsgKytpKSB7CiAgICAgdW5zaWduZWQgY2hhciBjb25zdCBjID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyIGNvbnN0Kj4oJmd0KVtpXTsKICAgICAqYisrID0gaGV4RGlnaXRzWyhjICYgMHhmMCkgPj4gNF07CiAgICAgKmIrKyA9IGhleERpZ2l0c1soYyAmIDB4MGYpXTsKQEAgLTI1MTUsOSArMjUxOCw4IEBACiAgIGNtQ3VzdG9tQ29tbWFuZExpbmUgc2luZ2xlTGluZTsKICAgc2luZ2xlTGluZS5wdXNoX2JhY2soY21TeXN0ZW1Ub29sczo6R2V0Q1Rlc3RDb21tYW5kKCkpOwogICBzaW5nbGVMaW5lLnB1c2hfYmFjaygiLS1mb3JjZS1uZXctY3Rlc3QtcHJvY2VzcyIpOwotICBpZiAoYXV0byB0ZXN0QXJncyA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9DVEVTVF9BUkdVTUVOVFMiKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzOwotICAgIGNtRXhwYW5kTGlzdCh0ZXN0QXJncywgYXJncyk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzOworICBpZiAobWYtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0NURVNUX0FSR1VNRU5UUyIsIGFyZ3MpKSB7CiAgICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBhcmdzKSB7CiAgICAgICBzaW5nbGVMaW5lLnB1c2hfYmFjayhhcmcpOwogICAgIH0KQEAgLTI1NDMsNyArMjU0NSw3IEBACiAgIH0KICAgR2xvYmFsVGFyZ2V0SW5mbyBndGk7CiAgIGd0aS5OYW1lID0gZWRpdENhY2hlVGFyZ2V0TmFtZTsKLSAgZ3RpLlBlckNvbmZpZyA9IGZhbHNlOworICBndGkuUGVyQ29uZmlnID0gY21UYXJnZXQ6OlBlckNvbmZpZzo6Tm87CiAgIGNtQ3VzdG9tQ29tbWFuZExpbmUgc2luZ2xlTGluZTsKIAogICAvLyBVc2UgZ2VuZXJhdG9yIHByZWZlcmVuY2UgZm9yIHRoZSBlZGl0X2NhY2hlIHJ1bGUgaWYgaXQgaXMgZGVmaW5lZC4KQEAgLTI1NjEsNiArMjU2Myw3IEBACiAgICAgc2luZ2xlTGluZS5wdXNoX2JhY2soIk5vIGludGVyYWN0aXZlIENNYWtlIGRpYWxvZyBhdmFpbGFibGUuIik7CiAgICAgZ3RpLk1lc3NhZ2UgPSAiTm8gaW50ZXJhY3RpdmUgQ01ha2UgZGlhbG9nIGF2YWlsYWJsZS4uLiI7CiAgICAgZ3RpLlVzZXNUZXJtaW5hbCA9IGZhbHNlOworICAgIGd0aS5TdGRQaXBlc1VURjggPSB0cnVlOwogICB9CiAgIGd0aS5Db21tYW5kTGluZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShzaW5nbGVMaW5lKSk7CiAKQEAgLTI1NzgsMTMgKzI1ODEsMTQgQEAKICAgZ3RpLk5hbWUgPSByZWJ1aWxkQ2FjaGVUYXJnZXROYW1lOwogICBndGkuTWVzc2FnZSA9ICJSdW5uaW5nIENNYWtlIHRvIHJlZ2VuZXJhdGUgYnVpbGQgc3lzdGVtLi4uIjsKICAgZ3RpLlVzZXNUZXJtaW5hbCA9IHRydWU7Ci0gIGd0aS5QZXJDb25maWcgPSBmYWxzZTsKKyAgZ3RpLlBlckNvbmZpZyA9IGNtVGFyZ2V0OjpQZXJDb25maWc6Ok5vOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lIHNpbmdsZUxpbmU7CiAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKTsKICAgc2luZ2xlTGluZS5wdXNoX2JhY2soIi0tcmVnZW5lcmF0ZS1kdXJpbmctYnVpbGQiKTsKICAgc2luZ2xlTGluZS5wdXNoX2JhY2soIi1TJChDTUFLRV9TT1VSQ0VfRElSKSIpOwogICBzaW5nbGVMaW5lLnB1c2hfYmFjaygiLUIkKENNQUtFX0JJTkFSWV9ESVIpIik7CiAgIGd0aS5Db21tYW5kTGluZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShzaW5nbGVMaW5lKSk7CisgIGd0aS5TdGRQaXBlc1VURjggPSB0cnVlOwogICB0YXJnZXRzLnB1c2hfYmFjayhzdGQ6Om1vdmUoZ3RpKSk7CiB9CiAKQEAgLTI2MjEsNiArMjYyNSw3IEBACiAgICAgZ3RpLk5hbWUgPSB0aGlzLT5HZXRJbnN0YWxsVGFyZ2V0TmFtZSgpOwogICAgIGd0aS5NZXNzYWdlID0gIkluc3RhbGwgdGhlIHByb2plY3QuLi4iOwogICAgIGd0aS5Vc2VzVGVybWluYWwgPSB0cnVlOworICAgIGd0aS5TdGRQaXBlc1VURjggPSB0cnVlOwogICAgIGNtQ3VzdG9tQ29tbWFuZExpbmUgc2luZ2xlTGluZTsKICAgICBpZiAodGhpcy0+R2V0UHJlaW5zdGFsbFRhcmdldE5hbWUoKSkgewogICAgICAgZ3RpLkRlcGVuZHMuZW1wbGFjZV9iYWNrKHRoaXMtPkdldFByZWluc3RhbGxUYXJnZXROYW1lKCkpOwpAQCAtMjY5MCwxMyArMjY5NSwxMyBAQAogICB9CiB9CiAKLWNvbnN0IGNoYXIqIGNtR2xvYmFsR2VuZXJhdG9yOjpHZXRQcmVkZWZpbmVkVGFyZ2V0c0ZvbGRlcigpCitzdGQ6OnN0cmluZyBjbUdsb2JhbEdlbmVyYXRvcjo6R2V0UHJlZGVmaW5lZFRhcmdldHNGb2xkZXIoKQogewotICBjb25zdCBjaGFyKiBwcm9wID0gdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKKyAgY21Qcm9wIHByb3AgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAogICAgICJQUkVERUZJTkVEX1RBUkdFVFNfRk9MREVSIik7CiAKICAgaWYgKHByb3ApIHsKLSAgICByZXR1cm4gcHJvcDsKKyAgICByZXR1cm4gKnByb3A7CiAgIH0KIAogICByZXR1cm4gIkNNYWtlUHJlZGVmaW5lZFRhcmdldHMiOwpAQCAtMjcwNCwxMyArMjcwOSwxMyBAQAogCiBib29sIGNtR2xvYmFsR2VuZXJhdG9yOjpVc2VGb2xkZXJQcm9wZXJ0eSgpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIHByb3AgPQorICBjbVByb3AgcHJvcCA9CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiVVNFX0ZPTERFUlMiKTsKIAogICAvLyBJZiB0aGlzIHByb3BlcnR5IGlzIGRlZmluZWQsIGxldCB0aGUgc2V0dGVyIHR1cm4gdGhpcyBvbiBvciBvZmYuLi4KICAgLy8KICAgaWYgKHByb3ApIHsKLSAgICByZXR1cm4gY21Jc09uKHByb3ApOworICAgIHJldHVybiBjbUlzT24oKnByb3ApOwogICB9CiAKICAgLy8gQnkgZGVmYXVsdCwgdGhpcyBmZWF0dXJlIGlzIE9GRiwgc2luY2UgaXQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUKQEAgLTI3MzIsNyArMjczNyw4IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19kZXBlbmRzOwogICAvLyBTdG9yZSB0aGUgY3VzdG9tIGNvbW1hbmQgaW4gdGhlIHRhcmdldC4KICAgY21DdXN0b21Db21tYW5kIGNjKG5vX291dHB1dHMsIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsIGd0aS5Db21tYW5kTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlKCksIG51bGxwdHIsIGd0aS5Xb3JraW5nRGlyLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSgpLCBudWxscHRyLCBndGkuV29ya2luZ0Rpci5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgZ3RpLlN0ZFBpcGVzVVRGOCk7CiAgIGNjLlNldFVzZXNUZXJtaW5hbChndGkuVXNlc1Rlcm1pbmFsKTsKICAgdGFyZ2V0LkFkZFBvc3RCdWlsZENvbW1hbmQoc3RkOjptb3ZlKGNjKSk7CiAgIGlmICghZ3RpLk1lc3NhZ2UuZW1wdHkoKSkgewpAQCAtMjgwNCw3ICsyODEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGVhbiIsICAgICAiZWRpdF9jYWNoZSIsICJyZWJ1aWxkX2NhY2hlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJaRVJPX0NIRUNLIiB9OwogCi0gIHJldHVybiBjbUNvbnRhaW5zKHJlc2VydmVkVGFyZ2V0cywgbmFtZSk7CisgIHJldHVybiBjbTo6Y29udGFpbnMocmVzZXJ2ZWRUYXJnZXRzLCBuYW1lKTsKIH0KIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6U2V0RXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IoCkBAIC0zMDUxLDggKzMwNTcsOCBAQAogCiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAogICAvLyBDaGVjayB3aGV0aGVyIGxhYmVscyBhcmUgZW5hYmxlZCBmb3IgdGhpcyB0YXJnZXQuCi0gIGNvbnN0IGNoYXIqIHRhcmdldExhYmVscyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkxBQkVMUyIpOwotICBjb25zdCBjaGFyKiBkaXJlY3RvcnlMYWJlbHMgPQorICBjbVByb3AgdGFyZ2V0TGFiZWxzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTEFCRUxTIik7CisgIGNtUHJvcCBkaXJlY3RvcnlMYWJlbHMgPQogICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXRQcm9wZXJ0eSgiTEFCRUxTIik7CiAgIGNvbnN0IGNoYXIqIGNtYWtlRGlyZWN0b3J5TGFiZWxzID0KICAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfRElSRUNUT1JZX0xBQkVMUyIpOwpAQCAtMzA3MSw3ICszMDc3LDcgQEAKICAgICAvLyBMaXN0IHRoZSB0YXJnZXQtd2lkZSBsYWJlbHMuICBBbGwgc291cmNlcyBpbiB0aGUgdGFyZ2V0IGdldAogICAgIC8vIHRoZXNlIGxhYmVscy4KICAgICBpZiAodGFyZ2V0TGFiZWxzKSB7Ci0gICAgICBjbUV4cGFuZExpc3QodGFyZ2V0TGFiZWxzLCBsYWJlbHMpOworICAgICAgY21FeHBhbmRMaXN0KCp0YXJnZXRMYWJlbHMsIGxhYmVscyk7CiAgICAgICBpZiAoIWxhYmVscy5lbXB0eSgpKSB7CiAgICAgICAgIGZvdXQgPDwgIiMgVGFyZ2V0IGxhYmVsc1xuIjsKICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbCA6IGxhYmVscykgewpAQCAtMzA4Niw3ICszMDkyLDcgQEAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21ha2VEaXJlY3RvcnlMYWJlbHNMaXN0OwogCiAgICAgaWYgKGRpcmVjdG9yeUxhYmVscykgewotICAgICAgY21FeHBhbmRMaXN0KGRpcmVjdG9yeUxhYmVscywgZGlyZWN0b3J5TGFiZWxzTGlzdCk7CisgICAgICBjbUV4cGFuZExpc3QoKmRpcmVjdG9yeUxhYmVscywgZGlyZWN0b3J5TGFiZWxzTGlzdCk7CiAgICAgfQogCiAgICAgaWYgKGNtYWtlRGlyZWN0b3J5TGFiZWxzKSB7CkBAIC0zMTExLDcgKzMxMTcsOCBAQAogICAgIGZvdXQgPDwgIiMgU291cmNlIGZpbGVzIGFuZCB0aGVpciBsYWJlbHNcbiI7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQotICAgICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKKyAgICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICBjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiBjb25maWdzKSB7CiAgICAgICB0YXJnZXQtPkdldFNvdXJjZUZpbGVzKHNvdXJjZXMsIGMpOwogICAgIH0KQEAgLTMxMjEsMTAgKzMxMjgsMTAgQEAKICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBzZnAgPSBzZi0+UmVzb2x2ZUZ1bGxQYXRoKCk7CiAgICAgICBmb3V0IDw8IHNmcCA8PCAiXG4iOwogICAgICAgbGpfc291cmNlWyJmaWxlIl0gPSBzZnA7Ci0gICAgICBpZiAoY29uc3QgY2hhciogc3ZhbHVlID0gc2YtPkdldFByb3BlcnR5KCJMQUJFTFMiKSkgeworICAgICAgaWYgKGNtUHJvcCBzdmFsdWUgPSBzZi0+R2V0UHJvcGVydHkoIkxBQkVMUyIpKSB7CiAgICAgICAgIGxhYmVscy5jbGVhcigpOwogICAgICAgICBKc29uOjpWYWx1ZSYgbGpfc291cmNlX2xhYmVscyA9IGxqX3NvdXJjZVsibGFiZWxzIl0gPSBKc29uOjphcnJheVZhbHVlOwotICAgICAgICBjbUV4cGFuZExpc3Qoc3ZhbHVlLCBsYWJlbHMpOworICAgICAgICBjbUV4cGFuZExpc3QoKnN2YWx1ZSwgbGFiZWxzKTsKICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGFiZWwgOiBsYWJlbHMpIHsKICAgICAgICAgICBmb3V0IDw8ICIgIiA8PCBsYWJlbCA8PCAiXG4iOwogICAgICAgICAgIGxqX3NvdXJjZV9sYWJlbHMuYXBwZW5kKGxhYmVsKTsKQEAgLTMyMTAsOCArMzIxNyw5IEBACiAgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOwogICBjbU1ha2VmaWxlKiBtZiA9IGxnLT5HZXRNYWtlZmlsZSgpOwogCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOwotICBzdGQ6OnN0cmluZyBjb25maWcgPSBtZi0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlncywgZmFsc2UpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgbWYtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6T25seU11bHRpQ29uZmlnKTsKKyAgc3RkOjpzdHJpbmcgY29uZmlnID0gbWYtPkdldERlZmF1bHRDb25maWd1cmF0aW9uKCk7CiAKICAgc3RkOjpzdHJpbmcgcGF0aCA9IGNtU3RyQ2F0KHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvQ1BhY2tQcm9wZXJ0aWVzLmNtYWtlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCmluZGV4IDdkYzQ4MjIuLjU3Yzc4MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY21UYXJnZXREZXBlbmQuaCIKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKLSMgIGluY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyMgIGluY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogCiAjICBpbmNsdWRlICJjbUZpbGVMb2NrUG9vbC5oIgogI2VuZGlmCkBAIC01NTMsNyArNTUzLDggQEAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gRGVwZW5kczsKICAgICBzdGQ6OnN0cmluZyBXb3JraW5nRGlyOwogICAgIGJvb2wgVXNlc1Rlcm1pbmFsID0gZmFsc2U7Ci0gICAgYm9vbCBQZXJDb25maWcgPSB0cnVlOworICAgIGNtVGFyZ2V0OjpQZXJDb25maWcgUGVyQ29uZmlnID0gY21UYXJnZXQ6OlBlckNvbmZpZzo6WWVzOworICAgIGJvb2wgU3RkUGlwZXNVVEY4ID0gZmFsc2U7CiAgIH07CiAKICAgdm9pZCBDcmVhdGVEZWZhdWx0R2xvYmFsVGFyZ2V0cyhzdGQ6OnZlY3RvcjxHbG9iYWxUYXJnZXRJbmZvPiYgdGFyZ2V0cyk7CkBAIC01ODgsNyArNTg5LDcgQEAKIAogICBjbUdlbmVyYXRvclRhcmdldCogRmluZEdlbmVyYXRvclRhcmdldEltcGwoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpIGNvbnN0OwogCi0gIGNvbnN0IGNoYXIqIEdldFByZWRlZmluZWRUYXJnZXRzRm9sZGVyKCk7CisgIHN0ZDo6c3RyaW5nIEdldFByZWRlZmluZWRUYXJnZXRzRm9sZGVyKCk7CiAKIHByaXZhdGU6CiAgIHVzaW5nIFRhcmdldE1hcCA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgY21UYXJnZXQqPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmN4eAppbmRleCBiYjlkZDM3Li4yZmNiYTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuY3h4CkBAIC05LDggKzksOSBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y20vc3RyaW5nPgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKQEAgLTE4LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdoc011bHRpR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC05MCw3ICs5Miw3IEBACiAgICAgLyogc3RvcmUgdGhlIGZ1bGwgdG9vbHNldCBmb3IgbGF0ZXIgdXNlCiAgICAgICogLS0gYWxyZWFkeSBkb25lIGlmIC1UPHRvb2xzZXQ+IHdhcyBzcGVjaWZpZWQKICAgICAgKi8KLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIsIHRzcC5jX3N0cigpLAorICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIiwgdHNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2F0aW9uIG9mIGdlbmVyYXRvciB0b29sc2V0LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKICAgfQpAQCAtMTEyLDggKzExNCw4IEBACiAgIH0KIAogICAvKiBzdG9yZSB0aGUgdG9vbHNldCB0aGF0IGlzIGJlaW5nIHVzZWQgZm9yIHRoaXMgYnVpbGQgKi8KLSAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIiwgZ2J1aWxkLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWxkIHByb2dyYW0gdG8gdXNlIiwgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCwgdHJ1ZSk7CisgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX01BS0VfUFJPR1JBTSIsIGdidWlsZCwgImJ1aWxkIHByb2dyYW0gdG8gdXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMLCB0cnVlKTsKIAogICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfU1lTVEVNX1ZFUlNJT04iLCB0c3ApOwogCkBAIC0xMzIsNyArMTM0LDcgQEAKICAgICAvKiBzdG9yZSB0aGUgcGxhdGZvcm0gbmFtZSBmb3IgbGF0ZXIgdXNlCiAgICAgICogLS0gYWxyZWFkeSBkb25lIGlmIC1BPGFyY2g+IHdhcyBzcGVjaWZpZWQKICAgICAgKi8KLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0iLCBhcmNoLmNfc3RyKCksCisgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIiwgYXJjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lIG9mIGdlbmVyYXRvciBwbGF0Zm9ybS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiAgIH0gZWxzZSB7CkBAIC0xNjYsNyArMTY4LDcgQEAKICAgaWYgKGNtSXNPZmYoYnNwTmFtZSkgJiYgcGxhdGZvcm0uZmluZCgiaW50ZWdyaXR5IikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBic3BOYW1lID0gInNpbSIgKyBhcmNoOwogICAgIC8qIHdyaXRlIGJhY2sgdGhlIGNhbGN1bGF0ZSBuYW1lIGZvciBuZXh0IHRpbWUgKi8KLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJHSFNfQlNQX05BTUUiLCBic3BOYW1lLmNfc3RyKCksCisgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiR0hTX0JTUF9OQU1FIiwgYnNwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lIG9mIEdIUyB0YXJnZXQgcGxhdGZvcm0uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HLCB0cnVlKTsKICAgICBzdGQ6OnN0cmluZyBtID0gY21TdHJDYXQoCkBAIC0yNTMsMTQgKzI1NSwxNSBAQAogCiB2b2lkIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OldyaXRlRmlsZUhlYWRlcihzdGQ6Om9zdHJlYW0mIGZvdXQpCiB7Ci0gIGZvdXQgPDwgIiMhZ2J1aWxkIiA8PCBzdGQ6OmVuZGw7Ci0gIGZvdXQgPDwgIiMiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIENNQUtFIGdlbmVyYXRlZCBmaWxlOiBETyBOT1QgRURJVCEiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIEdlbmVyYXRlZCBieSBcIiIgPDwgR2V0QWN0dWFsTmFtZSgpIDw8ICJcIiIKLSAgICAgICA8PCAiIEdlbmVyYXRvciwgQ01ha2UgVmVyc2lvbiAiIDw8IGNtVmVyc2lvbjo6R2V0TWFqb3JWZXJzaW9uKCkgPDwgIi4iCi0gICAgICAgPDwgY21WZXJzaW9uOjpHZXRNaW5vclZlcnNpb24oKSA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgc3RkOjplbmRsOworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIGZvdXQgPDwgIiMhZ2J1aWxkXG4iCisgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAiIyBDTUFLRSBnZW5lcmF0ZWQgZmlsZTogRE8gTk9UIEVESVQhXG4iCisgICAgICAgICAgIiMgR2VuZXJhdGVkIGJ5IFwiIiA8PCBHZXRBY3R1YWxOYW1lKCkgPDwgIlwiIgorICAgICAgICAgICIgR2VuZXJhdG9yLCBDTWFrZSBWZXJzaW9uICIgPDwgY21WZXJzaW9uOjpHZXRNYWpvclZlcnNpb24oKSA8PCAnLicKKyAgICAgICA8PCBjbVZlcnNpb246OkdldE1pbm9yVmVyc2lvbigpIDw8ICJcbiIKKyAgICAgICAgICAiI1xuXG4iOworICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KIH0KIAogdm9pZCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpXcml0ZUN1c3RvbVJ1bGVCT0Qoc3RkOjpvc3RyZWFtJiBmb3V0KQpAQCAtMjY4LDM2ICsyNzEsMzYgQEAKICAgZm91dCA8PCAiQ29tbWFuZHMge1xuIgogICAgICAgICAgICIgIEN1c3RvbV9SdWxlX0NvbW1hbmQge1xuIgogICAgICAgICAgICIgICAgbmFtZSA9IFwiQ3VzdG9tIFJ1bGUgQ29tbWFuZFwiXG4iCi0gICAgICAgICAgIiAgICBleGVjID0gXCIiOworICAgICAgICAgICIgICAgZXhlYyA9IFwiIgogI2lmZGVmIF9XSU4zMgotICBmb3V0IDw8ICJjbWQuZXhlIjsKKyAgICAgICAgICAiY21kLmV4ZSIKICNlbHNlCi0gIGZvdXQgPDwgIi9iaW4vc2giOworICAgICAgICAgICIvYmluL3NoIgogI2VuZGlmCi0gIGZvdXQgPDwgIlwiXG4iCisgICAgICAgICAgIlwiXG4iCiAgICAgICAgICAgIiAgICBvcHRpb25zID0ge1wiU3BlY2lhbE9wdGlvbnNcIn1cbiIKICAgICAgICAgICAiICB9XG4iCi0gICAgICAgICAgIn1cbiI7CisgICAgICAgICAgIn1cbiIKIAotICBmb3V0IDw8ICJcblxuIjsKLSAgZm91dCA8PCAiRmlsZVR5cGVzIHtcbiIKKyAgICAgICAgICAiXG5cbiIKKyAgICAgICAgICAiRmlsZVR5cGVzIHtcbiIKICAgICAgICAgICAiICBDbWFrZVJ1bGUge1xuIgogICAgICAgICAgICIgICAgbmFtZSA9IFwiQ3VzdG9tIFJ1bGVcIlxuIgogICAgICAgICAgICIgICAgYWN0aW9uID0gXCImUnVuXCJcbiIKLSAgICAgICAgICAiICAgIGV4dGVuc2lvbnMgPSB7XCIiOworICAgICAgICAgICIgICAgZXh0ZW5zaW9ucyA9IHtcIiIKICNpZmRlZiBfV0lOMzIKLSAgZm91dCA8PCAiYmF0IjsKKyAgICAgICAgICAiYmF0IgogI2Vsc2UKLSAgZm91dCA8PCAic2giOworICAgICAgICAgICJzaCIKICNlbmRpZgotICBmb3V0IDw8ICJcIn1cbiIKKyAgICAgICAgICAiXCJ9XG4iCiAgICAgICAgICAgIiAgICBncmVwYWJsZSA9IGZhbHNlXG4iCiAgICAgICAgICAgIiAgICBjb21tYW5kID0gXCJDdXN0b20gUnVsZSBDb21tYW5kXCJcbiIKLSAgICAgICAgICAiICAgIGNvbW1hbmRMaW5lID0gXCIkQ09NTUFORCAiOworICAgICAgICAgICIgICAgY29tbWFuZExpbmUgPSBcIiRDT01NQU5EICIKICNpZmRlZiBfV0lOMzIKLSAgZm91dCA8PCAiL2MiOworICAgICAgICAgICIvYyIKICNlbmRpZgotICBmb3V0IDw8ICIgJElOUFVURklMRVwiXG4iCisgICAgICAgICAgIiAkSU5QVVRGSUxFXCJcbiIKICAgICAgICAgICAiICAgIHByb2dyZXNzID0gXCJQcm9jZXNzaW5nIEN1c3RvbSBSdWxlXCJcbiIKICAgICAgICAgICAiICAgIHByb21vdGVUb0ZpcnN0UGFzcyA9IHRydWVcbiIKICAgICAgICAgICAiICAgIG91dHB1dFR5cGUgPSBcIk5vbmVcIlxuIgpAQCAtMzI3LDEzICszMzAsMTMgQEAKICAgdGhpcy0+V3JpdGVIaWdoTGV2ZWxEaXJlY3RpdmVzKHJvb3QsIGZvdXQpOwogICBHaHNNdWx0aUdwajo6V3JpdGVHcGpUYWcoR2hzTXVsdGlHcGo6OlBST0pFQ1QsIGZvdXQpOwogCi0gIGZvdXQgPDwgIiMgVG9wIExldmVsIFByb2plY3QgRmlsZSIgPDwgc3RkOjplbmRsOworICBmb3V0IDw8ICIjIFRvcCBMZXZlbCBQcm9qZWN0IEZpbGVcbiI7CiAKICAgLy8gU3BlY2lmeSBCU1Agb3B0aW9uIGlmIHN1cHBsaWVkIGJ5IHVzZXIKICAgY29uc3QgY2hhciogYnNwTmFtZSA9CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRDYWNoZURlZmluaXRpb24oIkdIU19CU1BfTkFNRSIpOwogICBpZiAoIWNtSXNPZmYoYnNwTmFtZSkpIHsKLSAgICBmb3V0IDw8ICIgICAgLWJzcCAiIDw8IGJzcE5hbWUgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgIiAgICAtYnNwICIgPDwgYnNwTmFtZSA8PCAnXG4nOwogICB9CiAKICAgLy8gU3BlY2lmeSBPUyBESVIgaWYgc3VwcGxpZWQgYnkgdXNlcgpAQCAtMzQ4LDE0ICszNTEsMTQgQEAKICAgICB9IGVsc2UgewogICAgICAgZm91dCA8PCBvc0Rpck9wdGlvbjsKICAgICB9Ci0gICAgZm91dCA8PCAiXCIiIDw8IHRoaXMtPk9zRGlyIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgIlwiIiA8PCB0aGlzLT5Pc0RpciA8PCAiXCJcbiI7CiAgIH0KIH0KIAogdm9pZCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpXcml0ZVN1YlByb2plY3RzKHN0ZDo6b3N0cmVhbSYgZm91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgYWxsX3RhcmdldCkKIHsKLSAgZm91dCA8PCAiQ01ha2VGaWxlcy8iIDw8IGFsbF90YXJnZXQgPDwgIiBbUHJvamVjdF0iIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAiQ01ha2VGaWxlcy8iIDw8IGFsbF90YXJnZXQgPDwgIiBbUHJvamVjdF1cbiI7CiAgIC8vIEFsbCBrbm93biB0YXJnZXRzCiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCA6IHRoaXMtPlByb2plY3RUYXJnZXRzKSB7CiAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgfHwKQEAgLTM2Niw3ICszNjksNyBAQAogICAgICAgY29udGludWU7CiAgICAgfQogICAgIGZvdXQgPDwgIkNNYWtlRmlsZXMvIiA8PCB0YXJnZXQtPkdldE5hbWUoKSArICIudGd0IiArIEZJTEVfRVhURU5TSU9OCi0gICAgICAgICA8PCAiIFtQcm9qZWN0XSIgPDwgc3RkOjplbmRsOworICAgICAgICAgPDwgIiBbUHJvamVjdF1cbiI7CiAgIH0KIH0KIApAQCAtMzc0LDggKzM3Nyw4IEBACiAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKICAgc3RkOjpzdHJpbmcmIHJvb3RCaW5hcnlEaXIpCiB7Ci0gIGNvbnN0IGNoYXIqIHByb2pOYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIpOwotICBjb25zdCBjaGFyKiBwcm9qVHlwZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUVfRVhUIik7CisgIGNtUHJvcCBwcm9qTmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiKTsKKyAgY21Qcm9wIHByb2pUeXBlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRV9FWFQiKTsKICAgaWYgKHByb2pOYW1lICYmIHByb2pUeXBlKSB7CiAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgc3RkOjpzdHJpbmcgZGlyID0gbGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKQEAgLTM4OCw5ICszOTEsOSBAQAogICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIHByb2pGaWxlID0gZGlyICsgcHJvak5hbWUgKyBGSUxFX0VYVEVOU0lPTjsKKyAgICBzdGQ6OnN0cmluZyBwcm9qRmlsZSA9IGRpciArICpwcm9qTmFtZSArIEZJTEVfRVhURU5TSU9OOwogICAgIGZvdXQgPDwgcHJvakZpbGU7Ci0gICAgZm91dCA8PCAiICIgPDwgcHJvalR5cGUgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgJyAnIDw8ICpwcm9qVHlwZSA8PCAnXG4nOwogICB9IGVsc2UgewogICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlID0KQEAgLTU4MywxNCArNTg2LDE0IEBACiAgICAgLyogaWYgbXVsdGlwbGUgdG9wLXByb2plY3RzIGFyZSBmb3VuZCBpbiBidWlsZCBkaXJlY3RvcnkKICAgICAgKiB0aGVuIHByZWZlciBwcm9qZWN0TmFtZSB0b3AtcHJvamVjdC4KICAgICAgKi8KLSAgICBpZiAoIWNtQ29udGFpbnMoZmlsZXMsIHByb2opKSB7CisgICAgaWYgKCFjbTo6Y29udGFpbnMoZmlsZXMsIHByb2opKSB7CiAgICAgICBwcm9qID0gZmlsZXMuYXQoMCk7CiAgICAgfQogICB9CiAKICAgbWFrZUNvbW1hbmQuQWRkKCItdG9wIiwgcHJvaik7CiAgIGlmICghdGFyZ2V0TmFtZXMuZW1wdHkoKSkgewotICAgIGlmIChjbUNvbnRhaW5zKHRhcmdldE5hbWVzLCAiY2xlYW4iKSkgeworICAgIGlmIChjbTo6Y29udGFpbnModGFyZ2V0TmFtZXMsICJjbGVhbiIpKSB7CiAgICAgICBtYWtlQ29tbWFuZC5BZGQoIi1jbGVhbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRuYW1lIDogdGFyZ2V0TmFtZXMpIHsKQEAgLTYxMiwxNCArNjE1LDE0IEBACiB2b2lkIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OldyaXRlTWFjcm9zKHN0ZDo6b3N0cmVhbSYgZm91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciogcm9vdCkKIHsKLSAgZm91dCA8PCAibWFjcm8gUFJPSl9OQU1FPSIgPDwgcm9vdC0+R2V0UHJvamVjdE5hbWUoKSA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIm1hY3JvIFBST0pfTkFNRT0iIDw8IHJvb3QtPkdldFByb2plY3ROYW1lKCkgPDwgJ1xuJzsKICAgY2hhciBjb25zdCogZ2hzR3BqTWFjcm9zID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldENhY2hlRGVmaW5pdGlvbigiR0hTX0dQSl9NQUNST1MiKTsKICAgaWYgKG51bGxwdHIgIT0gZ2hzR3BqTWFjcm9zKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGFuZGVkTGlzdCA9CiAgICAgICBjbUV4cGFuZGVkTGlzdChzdGQ6OnN0cmluZyhnaHNHcGpNYWNyb3MpKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgOiBleHBhbmRlZExpc3QpIHsKLSAgICAgIGZvdXQgPDwgIm1hY3JvICIgPDwgYXJnIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgIm1hY3JvICIgPDwgYXJnIDw8ICdcbic7CiAgICAgfQogICB9CiB9CkBAIC02MzEsNyArNjM0LDcgQEAKICAgc3RkOjpzdHJpbmcgdGd0OwogICBjb25zdCBjaGFyKiB0ID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldENhY2hlRGVmaW5pdGlvbigiR0hTX1BSSU1BUllfVEFSR0VUIik7Ci0gIGlmICh0ICYmICp0ICE9ICdcMCcpIHsKKyAgaWYgKGNtTm9uZW1wdHkodCkpIHsKICAgICB0Z3QgPSB0OwogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+TWFya0NsaUFzVXNlZCgiR0hTX1BSSU1BUllfVEFSR0VUIik7CiAgIH0gZWxzZSB7CkBAIC02NDIsMzAgKzY0NSwyNyBAQAogICAgIHRndCA9IGNtU3RyQ2F0KChhID8gYSA6ICIiKSwgJ18nLCAocCA/IHAgOiAiIiksICIudGd0Iik7CiAgIH0KIAotICBmb3V0IDw8ICJwcmltYXJ5VGFyZ2V0PSIgPDwgdGd0IDw8IHN0ZDo6ZW5kbDsKLSAgZm91dCA8PCAiY3VzdG9taXphdGlvbj0iIDw8IHJvb3QtPkdldEJpbmFyeURpcmVjdG9yeSgpCi0gICAgICAgPDwgIi9DTWFrZUZpbGVzL2N1c3RvbV9ydWxlLmJvZCIgPDwgc3RkOjplbmRsOwotICBmb3V0IDw8ICJjdXN0b21pemF0aW9uPSIgPDwgcm9vdC0+R2V0QmluYXJ5RGlyZWN0b3J5KCkKLSAgICAgICA8PCAiL0NNYWtlRmlsZXMvY3VzdG9tX3RhcmdldC5ib2QiIDw8IHN0ZDo6ZW5kbDsKKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICBmb3V0IDw8ICJwcmltYXJ5VGFyZ2V0PSIgPDwgdGd0IDw8ICJcbiIKKyAgICAgICAgICAiY3VzdG9taXphdGlvbj0iIDw8IHJvb3QtPkdldEJpbmFyeURpcmVjdG9yeSgpCisgICAgICAgPDwgIi9DTWFrZUZpbGVzL2N1c3RvbV9ydWxlLmJvZFxuIgorICAgICAgICAgICJjdXN0b21pemF0aW9uPSIgPDwgcm9vdC0+R2V0QmluYXJ5RGlyZWN0b3J5KCkKKyAgICAgICA8PCAiL0NNYWtlRmlsZXMvY3VzdG9tX3RhcmdldC5ib2QiIDw8ICdcbic7CisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAgIGNoYXIgY29uc3QqIGNvbnN0IGN1c3RvbWl6YXRpb24gPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0Q2FjaGVEZWZpbml0aW9uKCJHSFNfQ1VTVE9NSVpBVElPTiIpOwogICBpZiAobnVsbHB0ciAhPSBjdXN0b21pemF0aW9uICYmIHN0cmxlbihjdXN0b21pemF0aW9uKSA+IDApIHsKLSAgICBmb3V0IDw8ICJjdXN0b21pemF0aW9uPSIgPDwgdGhpcy0+VHJpbVF1b3RlcyhjdXN0b21pemF0aW9uKSA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAiY3VzdG9taXphdGlvbj0iCisgICAgICAgICA8PCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpUcmltUXVvdGVzKGN1c3RvbWl6YXRpb24pIDw8ICdcbic7CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5NYXJrQ2xpQXNVc2VkKCJHSFNfQ1VTVE9NSVpBVElPTiIpOwogICB9CiB9CiAKLXN0ZDo6c3RyaW5nIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OlRyaW1RdW90ZXMoc3RkOjpzdHJpbmcgY29uc3QmIHN0cikKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OlRyaW1RdW90ZXMoc3RkOjpzdHJpbmcgc3RyKQogewotICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNlcnZlKHN0ci5zaXplKCkpOwotICBmb3IgKGNvbnN0IGNoYXIqIGNoID0gc3RyLmNfc3RyKCk7ICpjaCAhPSAnXDAnOyArK2NoKSB7Ci0gICAgaWYgKCpjaCAhPSAnIicpIHsKLSAgICAgIHJlc3VsdCArPSAqY2g7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7CisgIGNtOjplcmFzZShzdHIsICciJyk7CisgIHJldHVybiBzdHI7CiB9CiAKIGJvb2wgY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6VGFyZ2V0Q29tcGFyZTo6b3BlcmF0b3IoKSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5oCmluZGV4IGI4MmU5ZjUuLjEyY2E4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuaApAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBnZW5lcmF0b3JzLAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBhbGxfdGFyZ2V0KTsKIAotICBzdGQ6OnN0cmluZyBUcmltUXVvdGVzKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpOworICBzdGF0aWMgc3RkOjpzdHJpbmcgVHJpbVF1b3RlcyhzdGQ6OnN0cmluZyBzdHIpOwogCiAgIHN0ZDo6c3RyaW5nIE9zRGlyOwogICBzdGF0aWMgY29uc3QgY2hhciogREVGQVVMVF9CVUlMRF9QUk9HUkFNOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuY3h4CmluZGV4IGI2YzM0M2MuLjQ4ZWI0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbE5pbmphR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxOaW5qYUdlbmVyYXRvci5jeHgKQEAgLTUsMjAgKzUsMTkgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2N0eXBlPgogI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDxzc3RyZWFtPgogCisjaW5jbHVkZSA8Y20vaXRlcmF0b3I+CiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KICNpbmNsdWRlIDxjbWV4dC9tZW1vcnk+CiAKKyNpbmNsdWRlIDxjbTNwL2pzb24vcmVhZGVyLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3dyaXRlci5oPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3JlYWRlci5oIgotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3dyaXRlci5oIgotCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uRW50cnkuaCIKICNpbmNsdWRlICJjbUZvcnRyYW5QYXJzZXIuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKQEAgLTQ2LDcgKzQ1LDggQEAKICNpbmNsdWRlICJjbWFrZS5oIgogCiBjb25zdCBjaGFyKiBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9CVUlMRF9GSUxFID0gImJ1aWxkLm5pbmphIjsKLWNvbnN0IGNoYXIqIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok5JTkpBX1JVTEVTX0ZJTEUgPSAicnVsZXMubmluamEiOworY29uc3QgY2hhciogY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfUlVMRVNfRklMRSA9CisgICJDTWFrZUZpbGVzL3J1bGVzLm5pbmphIjsKIGNvbnN0IGNoYXIqIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OklOREVOVCA9ICIgICI7CiAjaWZkZWYgX1dJTjMyCiBzdGQ6OnN0cmluZyBjb25zdCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpTSEVMTF9OT09QID0gImNkIC4iOwpAQCAtMTQ3LDE1ICsxNDcsMTUgQEAKIHsKICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGEgcnVsZS4KICAgaWYgKGJ1aWxkLlJ1bGUuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBydWxlIGZvciBXcml0ZUJ1aWxkISBjYWxsZWQgd2l0aCBjb21tZW50OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZC5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihjbVN0ckNhdCgKKyAgICAgICJObyBydWxlIGZvciBXcml0ZUJ1aWxkISBjYWxsZWQgd2l0aCBjb21tZW50OiAiLCBidWlsZC5Db21tZW50KSk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdXRwdXQgZmlsZS4KICAgaWYgKGJ1aWxkLk91dHB1dHMuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAotICAgICAgIk5vIG91dHB1dCBmaWxlcyBmb3IgV3JpdGVCdWlsZCEgY2FsbGVkIHdpdGggY29tbWVudDogIiArIGJ1aWxkLkNvbW1lbnQpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGNtU3RyQ2F0KAorICAgICAgIk5vIG91dHB1dCBmaWxlcyBmb3IgV3JpdGVCdWlsZCEgY2FsbGVkIHdpdGggY29tbWVudDogIiwgYnVpbGQuQ29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgewogICAgIC8vIFdyaXRlIGV4cGxpY2l0IG91dHB1dHMKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQgOiBidWlsZC5PdXRwdXRzKSB7Ci0gICAgICBidWlsZFN0ciArPSAiICIgKyBFbmNvZGVQYXRoKG91dHB1dCk7CisgICAgICBidWlsZFN0ciArPSBjbVN0ckNhdCgnICcsIEVuY29kZVBhdGgob3V0cHV0KSk7CiAgICAgICBpZiAodGhpcy0+Q29tcHV0aW5nVW5rbm93bkRlcGVuZGVuY2llcykgewogICAgICAgICB0aGlzLT5Db21iaW5lZEJ1aWxkT3V0cHV0cy5pbnNlcnQob3V0cHV0KTsKICAgICAgIH0KQEAgLTE3NSwxNCArMTc1LDEzIEBACiAgICAgaWYgKCFidWlsZC5JbXBsaWNpdE91dHMuZW1wdHkoKSkgewogICAgICAgYnVpbGRTdHIgKz0gIiB8IjsKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGltcGxpY2l0T3V0IDogYnVpbGQuSW1wbGljaXRPdXRzKSB7Ci0gICAgICAgIGJ1aWxkU3RyICs9ICIgIiArIEVuY29kZVBhdGgoaW1wbGljaXRPdXQpOworICAgICAgICBidWlsZFN0ciArPSBjbVN0ckNhdCgnICcsIEVuY29kZVBhdGgoaW1wbGljaXRPdXQpKTsKICAgICAgIH0KICAgICB9Ci0gICAgYnVpbGRTdHIgKz0gIjoiOworICAgIGJ1aWxkU3RyICs9ICc6JzsKIAogICAgIC8vIFdyaXRlIHRoZSBydWxlLgotICAgIGJ1aWxkU3RyICs9ICIgIjsKLSAgICBidWlsZFN0ciArPSBidWlsZC5SdWxlOworICAgIGJ1aWxkU3RyICs9IGNtU3RyQ2F0KCcgJywgYnVpbGQuUnVsZSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBhcmd1bWVudHM7CkBAIC0xOTEsMTQgKzE5MCwxNCBAQAogCiAgICAgLy8gV3JpdGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzLgogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGV4cGxpY2l0RGVwIDogYnVpbGQuRXhwbGljaXREZXBzKSB7Ci0gICAgICBhcmd1bWVudHMgKz0gIiAiICsgRW5jb2RlUGF0aChleHBsaWNpdERlcCk7CisgICAgICBhcmd1bWVudHMgKz0gY21TdHJDYXQoJyAnLCBFbmNvZGVQYXRoKGV4cGxpY2l0RGVwKSk7CiAgICAgfQogCiAgICAgLy8gV3JpdGUgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgogICAgIGlmICghYnVpbGQuSW1wbGljaXREZXBzLmVtcHR5KCkpIHsKICAgICAgIGFyZ3VtZW50cyArPSAiIHwiOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaW1wbGljaXREZXAgOiBidWlsZC5JbXBsaWNpdERlcHMpIHsKLSAgICAgICAgYXJndW1lbnRzICs9ICIgIiArIEVuY29kZVBhdGgoaW1wbGljaXREZXApOworICAgICAgICBhcmd1bWVudHMgKz0gY21TdHJDYXQoJyAnLCBFbmNvZGVQYXRoKGltcGxpY2l0RGVwKSk7CiAgICAgICB9CiAgICAgfQogCkBAIC0yMDYsMTEgKzIwNSwxMSBAQAogICAgIGlmICghYnVpbGQuT3JkZXJPbmx5RGVwcy5lbXB0eSgpKSB7CiAgICAgICBhcmd1bWVudHMgKz0gIiB8fCI7CiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvcmRlck9ubHlEZXAgOiBidWlsZC5PcmRlck9ubHlEZXBzKSB7Ci0gICAgICAgIGFyZ3VtZW50cyArPSAiICIgKyBFbmNvZGVQYXRoKG9yZGVyT25seURlcCk7CisgICAgICAgIGFyZ3VtZW50cyArPSBjbVN0ckNhdCgnICcsIEVuY29kZVBhdGgob3JkZXJPbmx5RGVwKSk7CiAgICAgICB9CiAgICAgfQogCi0gICAgYXJndW1lbnRzICs9ICJcbiI7CisgICAgYXJndW1lbnRzICs9ICdcbic7CiAgIH0KIAogICAvLyBXcml0ZSB0aGUgdmFyaWFibGVzIGJvdW5kIHRvIHRoaXMgYnVpbGQgc3RhdGVtZW50LgpAQCAtMzA5LDcgKzMwOCw3IEBACiB2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkFkZE1hY09TWENvbnRlbnRSdWxlKCkKIHsKICAgY21OaW5qYVJ1bGUgcnVsZSgiQ09QWV9PU1hfQ09OVEVOVCIpOwotICBydWxlLkNvbW1hbmQgPSBDTWFrZUNtZCgpICsgIiAtRSBjb3B5ICRpbiAkb3V0IjsKKyAgcnVsZS5Db21tYW5kID0gY21TdHJDYXQoQ01ha2VDbWQoKSwgIiAtRSBjb3B5ICRpbiAkb3V0Iik7CiAgIHJ1bGUuRGVzY3JpcHRpb24gPSAiQ29weWluZyBPUyBYIENvbnRlbnQgJG91dCI7CiAgIHJ1bGUuQ29tbWVudCA9ICJSdWxlIGZvciBjb3B5aW5nIE9TIFggYnVuZGxlIGNvbnRlbnQgZmlsZS4iOwogICB0aGlzLT5BZGRSdWxlKHJ1bGUpOwpAQCAtMzM0LDIzICszMzMsMjQgQEAKICAgLy8gLS0gUGFyYW1ldGVyIGNoZWNrcwogICAvLyBNYWtlIHN1cmUgdGhlIHJ1bGUgaGFzIGEgbmFtZS4KICAgaWYgKHJ1bGUuTmFtZS5lbXB0eSgpKSB7Ci0gICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIG5hbWUgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgY2FsbGVkIHdpdGggY29tbWVudDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihjbVN0ckNhdCgKKyAgICAgICJObyBuYW1lIGdpdmVuIGZvciBXcml0ZVJ1bGUhIGNhbGxlZCB3aXRoIGNvbW1lbnQ6ICIsIHJ1bGUuQ29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCiAgIC8vIE1ha2Ugc3VyZSBhIGNvbW1hbmQgaXMgZ2l2ZW4uCiAgIGlmIChydWxlLkNvbW1hbmQuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAotICAgICAgIk5vIGNvbW1hbmQgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgY2FsbGVkIHdpdGggY29tbWVudDogIiArIHJ1bGUuQ29tbWVudCk7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoY21TdHJDYXQoCisgICAgICAiTm8gY29tbWFuZCBnaXZlbiBmb3IgV3JpdGVSdWxlISBjYWxsZWQgd2l0aCBjb21tZW50OiAiLCBydWxlLkNvbW1lbnQpKTsKICAgICByZXR1cm47CiAgIH0KIAogICAvLyBNYWtlIHN1cmUgcmVzcG9uc2UgZmlsZSBjb250ZW50IGlzIGdpdmVuCiAgIGlmICghcnVsZS5Sc3BGaWxlLmVtcHR5KCkgJiYgcnVsZS5Sc3BDb250ZW50LmVtcHR5KCkpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigicnNwZmlsZSBidXQgbm8gcnNwZmlsZV9jb250ZW50IGdpdmVuIGZvciBXcml0ZVJ1bGUhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGVkIHdpdGggY29tbWVudDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCJyc3BmaWxlIGJ1dCBubyByc3BmaWxlX2NvbnRlbnQgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgIgorICAgICAgICAgICAgICAgImNhbGxlZCB3aXRoIGNvbW1lbnQ6ICIsCisgICAgICAgICAgICAgICBydWxlLkNvbW1lbnQpKTsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMzkyLDkgKzM5Miw5IEBACiB7CiAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgbmFtZS4KICAgaWYgKG5hbWUuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBuYW1lIGdpdmVuIGZvciBXcml0ZVZhcmlhYmxlISBjYWxsZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGNvbW1lbnQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGNtU3RyQ2F0KCJObyBuYW1lIGdpdmVuIGZvciBXcml0ZVZhcmlhYmxlISBjYWxsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGNvbW1lbnQ6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCkBAIC00MzUsOCArNDM1LDYgQEAKICNpZmRlZiBfV0lOMzIKICAgY20tPkdldFN0YXRlKCktPlNldFdpbmRvd3NTaGVsbCh0cnVlKTsKICNlbmRpZgotICAvLyAvLyBOaW5qYSBpcyBub3QgcG9ydGVkIHRvIG5vbi1Vbml4IE9TIHlldC4KLSAgLy8gdGhpcy0+Rm9yY2VVbml4UGF0aHMgPSB0cnVlOwogICB0aGlzLT5GaW5kTWFrZVByb2dyYW1GaWxlID0gIkNNYWtlTmluamFGaW5kTWFrZS5jbWFrZSI7CiB9CiAKQEAgLTUyMCw3ICs1MTgsOCBAQAogCiAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFcnJvck9jY3VyZWRGbGFnKCkpIHsKICAgICB0aGlzLT5SdWxlc0ZpbGVTdHJlYW0tPnNldHN0YXRlKHN0ZDo6aW9zOjpmYWlsYml0KTsKLSAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPk1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygpKSB7CisgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5NYWtlZmlsZXNbMF0tPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKICAgICAgIHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGNvbmZpZyktPnNldHN0YXRlKHN0ZDo6aW9zOjpmYWlsYml0KTsKICAgICAgIHRoaXMtPkdldENvbmZpZ0ZpbGVTdHJlYW0oY29uZmlnKS0+c2V0c3RhdGUoc3RkOjppb3M6OmZhaWxiaXQpOwogICAgIH0KQEAgLTU1OCwxMSArNTU3LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Ok9VVFBVVF9OT05FKSkgewogICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bm5pbmdcbiAnIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtSm9pbihjb21tYW5kLCAiJyAnIikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHdpdGg6XG4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJSdW5uaW5nXG4gJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUpvaW4oY29tbWFuZCwgIicgJyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgd2l0aDpcbiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CiAgICAgfQogICB9OwpAQCAtNjI2LDEwICs2MjUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6T1VUUFVUX05PTkUpKSB7CiAgICAgICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIlJ1bm5pbmdcbiAnIiArIGNtSm9pbihjb21tYW5kLCAiJyAnIikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICInXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB3aXRoOlxuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIlJ1bm5pbmdcbiAnIiwgY21Kb2luKGNvbW1hbmQsICInICciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB3aXRoOlxuICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKSk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTY4NiwxMCArNjg1LDEwIEBACiBib29sIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkNoZWNrTGFuZ3VhZ2VzKAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxhbmd1YWdlcywgY21NYWtlZmlsZSogbWYpIGNvbnN0CiB7Ci0gIGlmIChjbUNvbnRhaW5zKGxhbmd1YWdlcywgIkZvcnRyYW4iKSkgeworICBpZiAoY206OmNvbnRhaW5zKGxhbmd1YWdlcywgIkZvcnRyYW4iKSkgewogICAgIHJldHVybiB0aGlzLT5DaGVja0ZvcnRyYW4obWYpOwogICB9Ci0gIGlmIChjbUNvbnRhaW5zKGxhbmd1YWdlcywgIlN3aWZ0IikpIHsKKyAgaWYgKGNtOjpjb250YWlucyhsYW5ndWFnZXMsICJTd2lmdCIpKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgYXJjaGl0ZWN0dXJlcyA9CiAgICAgICBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX09TWF9BUkNISVRFQ1RVUkVTIik7CiAgICAgaWYgKGFyY2hpdGVjdHVyZXMuZmluZF9maXJzdF9vZignOycpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CkBAIC03MTMsNyArNzEyLDcgQEAKICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICBlIDw8CiAgICAgIlRoZSBOaW5qYSBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBGb3J0cmFuIHVzaW5nIE5pbmphIHZlcnNpb25cbiIKLSAgICAiICAiICsgdGhpcy0+TmluamFWZXJzaW9uICsgIlxuIgorICAgICIgICIgPDwgdGhpcy0+TmluamFWZXJzaW9uIDw8ICJcbiIKICAgICAiZHVlIHRvIGxhY2sgb2YgcmVxdWlyZWQgZmVhdHVyZXMuICBOaW5qYSAxLjEwIG9yIGhpZ2hlciBpcyByZXF1aXJlZC4iCiAgICAgOwogICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KQEAgLTk5MSw3ICs5OTAsOCBAQAogICBzdGQ6OnN0cmluZyBidWlsZEZpbGVEaXIgPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpOwogICBpZiAoIXRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSkgewotICAgIHN0ZDo6c3RyaW5nIGJ1aWxkRmlsZVBhdGggPSBidWlsZEZpbGVEaXIgKyAiL2NvbXBpbGVfY29tbWFuZHMuanNvbiI7CisgICAgc3RkOjpzdHJpbmcgYnVpbGRGaWxlUGF0aCA9CisgICAgICBjbVN0ckNhdChidWlsZEZpbGVEaXIsICIvY29tcGlsZV9jb21tYW5kcy5qc29uIik7CiAgICAgaWYgKHRoaXMtPkNvbXB1dGluZ1Vua25vd25EZXBlbmRlbmNpZXMpIHsKICAgICAgIHRoaXMtPkNvbWJpbmVkQnVpbGRPdXRwdXRzLmluc2VydCgKICAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKCJjb21waWxlX2NvbW1hbmRzLmpzb24iKSk7CkBAIC0xMDAwLDkgKzEwMDAsOSBAQAogICAgIC8vIEdldCBhIHN0cmVhbSB3aGVyZSB0byBnZW5lcmF0ZSB0aGluZ3MuCiAgICAgdGhpcy0+Q29tcGlsZUNvbW1hbmRzU3RyZWFtID0KICAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KGJ1aWxkRmlsZVBhdGgpOwotICAgICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIlsiOworICAgICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIltcbiI7CiAgIH0gZWxzZSB7Ci0gICAgKnRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSA8PCAiLCIgPDwgc3RkOjplbmRsOworICAgICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIixcbiI7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBzb3VyY2VGaWxlTmFtZSA9IHNvdXJjZUZpbGU7CkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogICB9CiAKICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwotICAqdGhpcy0+Q29tcGlsZUNvbW1hbmRzU3RyZWFtIDw8ICJcbntcbiIKKyAgKnRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSA8PCAie1xuIgogICAgICA8PCBSIiggICJkaXJlY3RvcnkiOiAiKSIKICAgICAgPDwgY21HbG9iYWxHZW5lcmF0b3I6OkVzY2FwZUpTT04oYnVpbGRGaWxlRGlyKSA8PCAiXCIsXG4iCiAgICAgIDw8IFIiKCAgImNvbW1hbmQiOiAiKSIKQEAgLTEwOTUsOCArMTA5NSw4IEBACiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6IHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPQotICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSArCi0gICAgICAgIHN0ZDo6c3RyaW5nKCIvIikgKyB0YXJnZXQtPkdldE5hbWUoKTsKKyAgICAgICAgY21TdHJDYXQodGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICcvJywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCkpOwogICAgICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHBhdGgpOwogICAgICAgaWYgKHRhcmdldC0+VGFyZ2V0LT5Jc1BlckNvbmZpZygpKSB7CiAgICAgICAgIG91dHB1dCA9IHRoaXMtPkJ1aWxkQWxpYXMob3V0cHV0LCBjb25maWcpOwpAQCAtMTEyMCw4ICsxMTIwLDggQEAKICAgICBmb3IgKEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+IGNvbnN0JiB1dGlsIDoKICAgICAgICAgIHRhcmdldC0+R2V0VXRpbGl0aWVzKCkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGQgPQotICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSArICIvIiArCi0gICAgICAgIHV0aWwuVmFsdWUuZmlyc3Q7CisgICAgICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAnLycsCisgICAgICAgICAgICAgICAgIHV0aWwuVmFsdWUuZmlyc3QpOwogICAgICAgb3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+QnVpbGRBbGlhcyh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoZCksIGNvbmZpZykpOwogICAgIH0KICAgfSBlbHNlIHsKQEAgLTEyMDgsNyArMTIwOCw4IEBACiAgICAgdGhpcy0+VGFyZ2V0QWxpYXNlc1tvdXRwdXRdLkdlbmVyYXRvclRhcmdldCA9IG51bGxwdHI7CiAgICAgdGhpcy0+RGVmYXVsdFRhcmdldEFsaWFzZXNbb3V0cHV0XS5HZW5lcmF0b3JUYXJnZXQgPSBudWxscHRyOwogICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZzIgOgotICAgICAgICAgdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICAgICAgICAgdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKICAgICAgIHRoaXMtPkNvbmZpZ3NbY29uZmlnMl0uVGFyZ2V0QWxpYXNlc1tvdXRwdXRdLkdlbmVyYXRvclRhcmdldCA9IG51bGxwdHI7CiAgICAgfQogICB9CkBAIC0xMjgxLDcgKzEyODIsOCBAQAogICB9CiAKICAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgewotICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKICAgICAgIGZvciAoYXV0byBjb25zdCYgdGEgOiB0aGlzLT5Db25maWdzW2NvbmZpZ10uVGFyZ2V0QWxpYXNlcykgewogICAgICAgICAvLyBEb24ndCB3cml0ZSBhbWJpZ3VvdXMgYWxpYXNlcy4KICAgICAgICAgaWYgKCF0YS5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0KSB7CkBAIC0xMzQwLDIwICsxMzQyLDE5IEBACiAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY3VycmVudEJpbmFyeURpciA9IGl0LmZpcnN0OwogICAgIERpcmVjdG9yeVRhcmdldCBjb25zdCYgZHQgPSBpdC5zZWNvbmQ7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gICAgZHQuTEctPkdldE1ha2VmaWxlKCktPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MsIHRydWUpOwotICAgIGlmIChjb25maWdzLmVtcHR5KCkpIHsKLSAgICAgIGNvbmZpZ3MuZW1wbGFjZV9iYWNrKCk7Ci0gICAgfQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICAgIGR0LkxHLT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICBjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogCiAgICAgLy8gU2V0dXAgdGFyZ2V0CiAgICAgY21OaW5qYURlcHMgY29uZmlnRGVwczsKLSAgICBidWlsZC5Db21tZW50ID0gIkZvbGRlcjogIiArIGN1cnJlbnRCaW5hcnlEaXI7CisgICAgYnVpbGQuQ29tbWVudCA9IGNtU3RyQ2F0KCJGb2xkZXI6ICIsIGN1cnJlbnRCaW5hcnlEaXIpOwogICAgIGJ1aWxkLk91dHB1dHMuZW1wbGFjZV9iYWNrKCk7CisgICAgc3RkOjpzdHJpbmcgY29uc3QgYnVpbGREaXJBbGxUYXJnZXQgPQorICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKGNtU3RyQ2F0KGN1cnJlbnRCaW5hcnlEaXIsICIvYWxsIikpOwogICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgewogICAgICAgYnVpbGQuRXhwbGljaXREZXBzLmNsZWFyKCk7Ci0gICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0aGlzLT5CdWlsZEFsaWFzKAotICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoY3VycmVudEJpbmFyeURpciArICIvYWxsIiksIGNvbmZpZyk7CisgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0aGlzLT5CdWlsZEFsaWFzKGJ1aWxkRGlyQWxsVGFyZ2V0LCBjb25maWcpOwogICAgICAgY29uZmlnRGVwcy5lbXBsYWNlX2JhY2soYnVpbGQuT3V0cHV0cy5mcm9udCgpKTsKICAgICAgIGZvciAoRGlyZWN0b3J5VGFyZ2V0OjpUYXJnZXQgY29uc3QmIHQgOiBkdC5UYXJnZXRzKSB7CiAgICAgICAgIGlmICghdC5FeGNsdWRlRnJvbUFsbCkgewpAQCAtMTM2Myw3ICsxMzY0LDcgQEAKICAgICAgIGZvciAoRGlyZWN0b3J5VGFyZ2V0OjpEaXIgY29uc3QmIGQgOiBkdC5DaGlsZHJlbikgewogICAgICAgICBpZiAoIWQuRXhjbHVkZUZyb21BbGwpIHsKICAgICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMuZW1wbGFjZV9iYWNrKHRoaXMtPkJ1aWxkQWxpYXMoCi0gICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoZC5QYXRoICsgIi9hbGwiKSwgY29uZmlnKSk7CisgICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoY21TdHJDYXQoZC5QYXRoLCAiL2FsbCIpKSwgY29uZmlnKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIC8vIFdyaXRlIHRhcmdldApAQCAtMTM3NywyMSArMTM3OCwxOCBAQAogICAgIC8vIEFkZCBzaG9ydGN1dCB0YXJnZXQKICAgICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CiAgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKLSAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzID0geyB0aGlzLT5CdWlsZEFsaWFzKAotICAgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChjdXJyZW50QmluYXJ5RGlyICsgIi9hbGwiKSwgY29uZmlnKSB9OwotICAgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPQotICAgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChjdXJyZW50QmluYXJ5RGlyICsgIi9hbGwiKTsKKyAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzID0geyB0aGlzLT5CdWlsZEFsaWFzKGJ1aWxkRGlyQWxsVGFyZ2V0LCBjb25maWcpIH07CisgICAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IGJ1aWxkRGlyQWxsVGFyZ2V0OwogICAgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXRDb25maWdGaWxlU3RyZWFtKGNvbmZpZyksIGJ1aWxkKTsKICAgICAgIH0KIAogICAgICAgaWYgKCF0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZy5lbXB0eSgpKSB7CiAgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOwogICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkRlZmF1bHRDb25maWdzKSB7Ci0gICAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjayh0aGlzLT5CdWlsZEFsaWFzKAotICAgICAgICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKGN1cnJlbnRCaW5hcnlEaXIgKyAiL2FsbCIpLCBjb25maWcpKTsKKyAgICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKAorICAgICAgICAgICAgdGhpcy0+QnVpbGRBbGlhcyhidWlsZERpckFsbFRhcmdldCwgY29uZmlnKSk7CiAgICAgICAgIH0KLSAgICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0KLSAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoY3VycmVudEJpbmFyeURpciArICIvYWxsIik7CisgICAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IGJ1aWxkRGlyQWxsVGFyZ2V0OwogICAgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXREZWZhdWx0RmlsZVN0cmVhbSgpLCBidWlsZCk7CiAgICAgICB9CiAgICAgfQpAQCAtMTQwMCwxMSArMTM5OCwxMCBAQAogICAgIGlmICh0aGlzLT5FbmFibGVDcm9zc0NvbmZpZ0J1aWxkKCkpIHsKICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOwogICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5Dcm9zc0NvbmZpZ3MpIHsKLSAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjayh0aGlzLT5CdWlsZEFsaWFzKAotICAgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChjdXJyZW50QmluYXJ5RGlyICsgIi9hbGwiKSwgY29uZmlnKSk7CisgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2soCisgICAgICAgICAgdGhpcy0+QnVpbGRBbGlhcyhidWlsZERpckFsbFRhcmdldCwgY29uZmlnKSk7CiAgICAgICB9Ci0gICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0aGlzLT5CdWlsZEFsaWFzKAotICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoY3VycmVudEJpbmFyeURpciArICIvYWxsIiksICJhbGwiKTsKKyAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IHRoaXMtPkJ1aWxkQWxpYXMoYnVpbGREaXJBbGxUYXJnZXQsICJhbGwiKTsKICAgICAgIHRoaXMtPldyaXRlQnVpbGQob3MsIGJ1aWxkKTsKICAgICB9CiAgIH0KQEAgLTE1NDIsNyArMTUzOSw4IEBACiAgIHRoaXMtPldyaXRlVGFyZ2V0Q2xlYW4ob3MpOwogICB0aGlzLT5Xcml0ZVRhcmdldEhlbHAob3MpOwogCi0gIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKCkpIHsKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5NYWtlZmlsZXNbMF0tPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICAgICBjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpKSB7CiAgICAgdGhpcy0+V3JpdGVUYXJnZXREZWZhdWx0KCp0aGlzLT5HZXRDb25maWdGaWxlU3RyZWFtKGNvbmZpZykpOwogICB9CiAKQEAgLTE2MTYsNyArMTYxNCw4IEBACiAKICAgICBjbU5pbmphQnVpbGQgcGhvbnlCdWlsZCgicGhvbnkiKTsKICAgICBwaG9ueUJ1aWxkLkNvbW1lbnQgPSAiUGhvbnkgdGFyZ2V0IHRvIGZvcmNlIGdsb2IgdmVyaWZpY2F0aW9uIHJ1bi4iOwotICAgIHBob255QnVpbGQuT3V0cHV0cy5wdXNoX2JhY2soY20tPkdldEdsb2JWZXJpZnlTY3JpcHQoKSArICJfZm9yY2UiKTsKKyAgICBwaG9ueUJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKAorICAgICAgY21TdHJDYXQoY20tPkdldEdsb2JWZXJpZnlTY3JpcHQoKSwgIl9mb3JjZSIpKTsKICAgICB0aGlzLT5Xcml0ZUJ1aWxkKG9zLCBwaG9ueUJ1aWxkKTsKIAogICAgIHJlQnVpbGQuVmFyaWFibGVzWyJyZXN0YXQiXSA9ICIxIjsKQEAgLTE3MTUsMTEgKzE3MTQsOCBAQAogICBzdGQ6OnN0cmluZyBjbGVhblNjcmlwdFJlbCA9ICJDTWFrZUZpbGVzL2NsZWFuX2FkZGl0aW9uYWwuY21ha2UiOwogICBzdGQ6OnN0cmluZyBjbGVhblNjcmlwdEFicyA9CiAgICAgY21TdHJDYXQobGdyLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLCBjbGVhblNjcmlwdFJlbCk7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOwotICB0aGlzLT5NYWtlZmlsZXNbMF0tPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MsIHRydWUpOwotICBpZiAoY29uZmlncy5lbXB0eSgpKSB7Ci0gICAgY29uZmlncy5lbXBsYWNlX2JhY2soKTsKLSAgfQorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFkZGl0aW9uYWwgZmlsZXMgdG8gY2xlYW4KICAgYm9vbCBlbXB0eSA9IHRydWU7CkBAIC0xODA3LDEzICsxODAzLDE0IEBACiAgIC8vIFdyaXRlIHJ1bGUKICAgewogICAgIGNtTmluamFSdWxlIHJ1bGUoIkNMRUFOIik7Ci0gICAgcnVsZS5Db21tYW5kID0gTmluamFDbWQoKSArICIgJEZJTEVfQVJHIC10IGNsZWFuICRUQVJHRVRTIjsKKyAgICBydWxlLkNvbW1hbmQgPSBjbVN0ckNhdChOaW5qYUNtZCgpLCAiICRGSUxFX0FSRyAtdCBjbGVhbiAkVEFSR0VUUyIpOwogICAgIHJ1bGUuRGVzY3JpcHRpb24gPSAiQ2xlYW5pbmcgYWxsIGJ1aWx0IGZpbGVzLi4uIjsKICAgICBydWxlLkNvbW1lbnQgPSAiUnVsZSBmb3IgY2xlYW5pbmcgYWxsIGJ1aWx0IGZpbGVzLiI7CiAgICAgV3JpdGVSdWxlKCp0aGlzLT5SdWxlc0ZpbGVTdHJlYW0sIHJ1bGUpOwogICB9CiAKLSAgYXV0byBjb25zdCBjb25maWdzID0gdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKKyAgYXV0byBjb25zdCBjb25maWdzID0gdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICAvLyBXcml0ZSBidWlsZAogICB7CkBAIC0xOTIxLDcgKzE5MTgsNyBAQAogewogICB7CiAgICAgY21OaW5qYVJ1bGUgcnVsZSgiSEVMUCIpOwotICAgIHJ1bGUuQ29tbWFuZCA9IE5pbmphQ21kKCkgKyAiIC10IHRhcmdldHMiOworICAgIHJ1bGUuQ29tbWFuZCA9IGNtU3RyQ2F0KE5pbmphQ21kKCksICIgLXQgdGFyZ2V0cyIpOwogICAgIHJ1bGUuRGVzY3JpcHRpb24gPSAiQWxsIHByaW1hcnkgdGFyZ2V0cyBhdmFpbGFibGU6IjsKICAgICBydWxlLkNvbW1lbnQgPSAiUnVsZSBmb3IgcHJpbnRpbmcgYWxsIHByaW1hcnkgdGFyZ2V0cyBhdmFpbGFibGUuIjsKICAgICBXcml0ZVJ1bGUoKnRoaXMtPlJ1bGVzRmlsZVN0cmVhbSwgcnVsZSk7CkBAIC0xOTQ4LDcgKzE5NDUsNyBAQAogICBpZiAoIXRoaXMtPkhhc091dHB1dFBhdGhQcmVmaXgoKSB8fCBjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChwYXRoKSkgewogICAgIHJldHVybiBwYXRoOwogICB9Ci0gIHJldHVybiB0aGlzLT5PdXRwdXRQYXRoUHJlZml4ICsgcGF0aDsKKyAgcmV0dXJuIGNtU3RyQ2F0KHRoaXMtPk91dHB1dFBhdGhQcmVmaXgsIHBhdGgpOwogfQogCiB2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OlN0cmlwTmluamFPdXRwdXRQYXRoUHJlZml4QXNTdWZmaXgoCkBAIC0yMDc2LDcgKzIwNzMsOCBAQAogICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tbGFuZz0iKSkgewogICAgICAgYXJnX2xhbmcgPSBhcmcuc3Vic3RyKDcpOwogICAgIH0gZWxzZSB7Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiLUUgY21ha2VfbmluamFfZGVwZW5kcyB1bmtub3duIGFyZ3VtZW50OiAiICsgYXJnKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgICBjbVN0ckNhdCgiLUUgY21ha2VfbmluamFfZGVwZW5kcyB1bmtub3duIGFyZ3VtZW50OiAiLCBhcmcpKTsKICAgICAgIHJldHVybiAxOwogICAgIH0KICAgfQpAQCAtMjE0Nyw3ICsyMTQ1LDggQEAKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGRkaWYoYXJnX2RkaSk7CiAgIGRkaWYgPDwgZGRpOwogICBpZiAoIWRkaWYpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiLUUgY21ha2VfbmluamFfZGVwZW5kcyBmYWlsZWQgdG8gd3JpdGUgIiArIGFyZ19kZGkpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgY21TdHJDYXQoIi1FIGNtYWtlX25pbmphX2RlcGVuZHMgZmFpbGVkIHRvIHdyaXRlICIsIGFyZ19kZGkpKTsKICAgICByZXR1cm4gMTsKICAgfQogICByZXR1cm4gMDsKQEAgLTIxOTMsNyArMjE5Miw4IEBACiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBkZWZpbmVzOwogICBjbUZvcnRyYW5QYXJzZXIgcGFyc2VyKGZjLCBpbmNsdWRlcywgZGVmaW5lcywgZmluZm8pOwogICBpZiAoIWNtRm9ydHJhblBhcnNlcl9GaWxlUHVzaCgmcGFyc2VyLCBhcmdfcHAuY19zdHIoKSkpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiLUUgY21ha2VfbmluamFfZGVwZW5kcyBmYWlsZWQgdG8gb3BlbiAiICsgYXJnX3BwKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCItRSBjbWFrZV9uaW5qYV9kZXBlbmRzIGZhaWxlZCB0byBvcGVuICIsIGFyZ19wcCkpOwogICAgIHJldHVybiBudWxscHRyOwogICB9CiAgIGlmIChjbUZvcnRyYW5feXlwYXJzZShwYXJzZXIuU2Nhbm5lcikgIT0gMCkgewpAQCAtMjI5Niw3ICsyMjk2LDcgQEAKICAgSnNvbjo6VmFsdWUgdG0gPSBKc29uOjpvYmplY3RWYWx1ZTsKICAgZm9yIChjbUR5bmRlcE9iamVjdEluZm8gY29uc3QmIG9iamVjdCA6IG9iamVjdHMpIHsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBwIDogb2JqZWN0LlByb3ZpZGVzKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBjb25zdCBtb2QgPSBtb2R1bGVfZGlyICsgcDsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IG1vZCA9IGNtU3RyQ2F0KG1vZHVsZV9kaXIsIHApOwogICAgICAgbW9kX2ZpbGVzW3BdID0gbW9kOwogICAgICAgdG1bcF0gPSBtb2Q7CiAgICAgfQpAQCAtMjMzMiw4ICsyMzMyLDggQEAKIAogICAvLyBTdG9yZSB0aGUgbWFwIG9mIG1vZHVsZXMgcHJvdmlkZWQgYnkgdGhpcyB0YXJnZXQgaW4gYSBmaWxlIGZvcgogICAvLyB1c2UgYnkgZGVwZW5kZW50cyB0aGF0IHJlZmVyZW5jZSB0aGlzIHRhcmdldCBpbiBsaW5rZWQtdGFyZ2V0LWRpcnMuCi0gIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldF9tb2RzX2ZpbGUgPQotICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChhcmdfZGQpICsgIi8iICsgYXJnX2xhbmcgKyAiTW9kdWxlcy5qc29uIjsKKyAgc3RkOjpzdHJpbmcgY29uc3QgdGFyZ2V0X21vZHNfZmlsZSA9IGNtU3RyQ2F0KAorICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChhcmdfZGQpLCAnLycsIGFyZ19sYW5nLCAiTW9kdWxlcy5qc29uIik7CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSB0bWYodGFyZ2V0X21vZHNfZmlsZSk7CiAgIHRtZiA8PCB0bTsKIApAQCAtMjM2Niw3ICsyMzY2LDggQEAKICAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFN1ZmZpeChhcmcsICIuZGRpIikpIHsKICAgICAgIGFyZ19kZGlzLnB1c2hfYmFjayhhcmcpOwogICAgIH0gZWxzZSB7Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiLUUgY21ha2VfbmluamFfZHluZGVwIHVua25vd24gYXJndW1lbnQ6ICIgKyBhcmcpOworICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCItRSBjbWFrZV9uaW5qYV9keW5kZXAgdW5rbm93biBhcmd1bWVudDogIiwgYXJnKSk7CiAgICAgICByZXR1cm4gMTsKICAgICB9CiAgIH0KQEAgLTI0MDIsNyArMjQwMyw3IEBACiAgIHN0ZDo6c3RyaW5nIGNvbnN0IGRpcl90b3Bfc3JjID0gdGRpWyJkaXItdG9wLXNyYyJdLmFzU3RyaW5nKCk7CiAgIHN0ZDo6c3RyaW5nIG1vZHVsZV9kaXIgPSB0ZGlbIm1vZHVsZS1kaXIiXS5hc1N0cmluZygpOwogICBpZiAoIW1vZHVsZV9kaXIuZW1wdHkoKSAmJiAhY21IYXNMaXRlcmFsU3VmZml4KG1vZHVsZV9kaXIsICIvIikpIHsKLSAgICBtb2R1bGVfZGlyICs9ICIvIjsKKyAgICBtb2R1bGVfZGlyICs9ICcvJzsKICAgfQogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua2VkX3RhcmdldF9kaXJzOwogICBKc29uOjpWYWx1ZSBjb25zdCYgdGRpX2xpbmtlZF90YXJnZXRfZGlycyA9IHRkaVsibGlua2VkLXRhcmdldC1kaXJzIl07CkBAIC0yNDMwLDkgKzI0MzEsNyBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgc3VmZml4LCBzdGQ6OnN0cmluZyYgZGlyKQogewogICBpZiAoIWNvbmZpZy5lbXB0eSgpICYmIHRoaXMtPklzTXVsdGlDb25maWcoKSkgewotICAgIGRpciArPSBwcmVmaXg7Ci0gICAgZGlyICs9IGNvbmZpZzsKLSAgICBkaXIgKz0gc3VmZml4OworICAgIGRpciArPSBjbVN0ckNhdChwcmVmaXgsIGNvbmZpZywgc3VmZml4KTsKICAgfQogfQogCkBAIC0yNDkwLDcgKzI0ODksOCBAQAogICAgIDw8ICIjIFRoaXMgZmlsZSBjb250YWlucyBidWlsZCBzdGF0ZW1lbnRzIGNvbW1vbiB0byBhbGwgIgogICAgICAgICJjb25maWd1cmF0aW9ucy5cblxuIjsKIAotICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPk1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygpKSB7CisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKSkgewogICAgIC8vIE9wZW4gaW1wbCBmaWxlLgogICAgIGlmICghdGhpcy0+T3BlbkZpbGVTdHJlYW0odGhpcy0+SW1wbEZpbGVTdHJlYW1zW2NvbmZpZ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXROaW5qYUltcGxGaWxlbmFtZShjb25maWcpKSkgewpAQCAtMjUzMCw3ICsyNTMwLDggQEAKICAgICB0aGlzLT5EZWZhdWx0RmlsZVN0cmVhbS5yZXNldCgpOwogICB9IC8vIE5vIGVycm9yIGlmIGl0IHdhc24ndCBvcGVuCiAKLSAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5NYWtlZmlsZXNbMF0tPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPk1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKICAgICBpZiAodGhpcy0+SW1wbEZpbGVTdHJlYW1zW2NvbmZpZ10pIHsKICAgICAgIHRoaXMtPkltcGxGaWxlU3RyZWFtc1tjb25maWddLnJlc2V0KCk7CiAgICAgfSBlbHNlIHsKQEAgLTI1NzIsNyArMjU3Myw4IEBACiB2b2lkIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6QWRkUmVidWlsZE1hbmlmZXN0T3V0cHV0cygKICAgY21OaW5qYURlcHMmIG91dHB1dHMpIGNvbnN0CiB7Ci0gIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzLmZyb250KCktPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKSkgewogICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk5pbmphT3V0cHV0UGF0aChHZXROaW5qYUltcGxGaWxlbmFtZShjb25maWcpKSk7CiAgICAgb3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+TmluamFPdXRwdXRQYXRoKEdldE5pbmphQ29uZmlnRmlsZW5hbWUoY29uZmlnKSkpOwogICB9CkBAIC0yNTg0LDExICsyNTg2LDkgQEAKIHZvaWQgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpHZXRRdEF1dG9HZW5Db25maWdzKAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvbmZpZ3MpIGNvbnN0CiB7Ci0gIGF1dG8gY29uc3Qgb2xkU2l6ZSA9IGNvbmZpZ3Muc2l6ZSgpOwotICB0aGlzLT5NYWtlZmlsZXMuZnJvbnQoKS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlncyk7Ci0gIGlmIChjb25maWdzLnNpemUoKSA9PSBvbGRTaXplKSB7Ci0gICAgY29uZmlncy5lbXBsYWNlX2JhY2soKTsKLSAgfQorICBhdXRvIGFsbENvbmZpZ3MgPQorICAgIHRoaXMtPk1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOworICBjb25maWdzLmluc2VydChjb25maWdzLmVuZCgpLCBjbTo6Y2JlZ2luKGFsbENvbmZpZ3MpLCBjbTo6Y2VuZChhbGxDb25maWdzKSk7CiB9CiAKIGJvb2wgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpJbnNwZWN0Q29uZmlnVHlwZVZhcmlhYmxlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CmluZGV4IDkwYzllZjAuLmMzMTk4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZURpcmVjdG9yeS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgpAQCAtNDEsNyArNDIsNiBAQAogI2Vsc2UKICAgdGhpcy0+VXNlTGlua1NjcmlwdCA9IHRydWU7CiAjZW5kaWYKLSAgdGhpcy0+Q29tbWFuZERhdGFiYXNlID0gbnVsbHB0cjsKIAogICB0aGlzLT5JbmNsdWRlRGlyZWN0aXZlID0gImluY2x1ZGUiOwogICB0aGlzLT5EZWZpbmVXaW5kb3dzTlVMTCA9IGZhbHNlOwpAQCAtNDksNiArNDksOCBAQAogICB0aGlzLT5Vbml4Q0QgPSB0cnVlOwogfQogCitjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6On5jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMoKSA9IGRlZmF1bHQ7CisKIHZvaWQgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpFbmFibGVMYW5ndWFnZSgKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBsYW5ndWFnZXMsIGNtTWFrZWZpbGUqIG1mLCBib29sIG9wdGlvbmFsKQogewpAQCAtMTE2LDYgKzExOCwxMiBAQAogICBndC0+T2JqZWN0RGlyZWN0b3J5ID0gZGlyOwogfQogCitib29sIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q2FuRXNjYXBlT2N0b3Rob3JwZSgpIGNvbnN0Cit7CisgIC8vIE1ha2UgdG9vbHMgdGhhdCB1c2UgVU5JWC1zdHlsZSAnLycgcGF0aHMgYWxzbyBzdXBwb3J0ICdcJyBlc2NhcGluZy4KKyAgcmV0dXJuIHRoaXMtPkZvcmNlVW5peFBhdGhzOworfQorCiB2b2lkIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q29uZmlndXJlKCkKIHsKICAgLy8gSW5pdGlhbGl6ZSBDTUFLRV9FRElUX0NPTU1BTkQgY2FjaGUgZW50cnkuCkBAIC0xNTcsMTAgKzE2NSw5IEBACiAgIHRoaXMtPldyaXRlTWFpbk1ha2VmaWxlMigpOwogICB0aGlzLT5Xcml0ZU1haW5DTWFrZWZpbGUoKTsKIAotICBpZiAodGhpcy0+Q29tbWFuZERhdGFiYXNlICE9IG51bGxwdHIpIHsKLSAgICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8IHN0ZDo6ZW5kbCA8PCAiXSI7Ci0gICAgZGVsZXRlIHRoaXMtPkNvbW1hbmREYXRhYmFzZTsKLSAgICB0aGlzLT5Db21tYW5kRGF0YWJhc2UgPSBudWxscHRyOworICBpZiAodGhpcy0+Q29tbWFuZERhdGFiYXNlKSB7CisgICAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCAiXG5dIjsKKyAgICB0aGlzLT5Db21tYW5kRGF0YWJhc2UucmVzZXQoKTsKICAgfQogfQogCkBAIC0xNjgsMjYgKzE3NSwyNiBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlRmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHdvcmtpbmdEaXJlY3RvcnksCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21waWxlQ29tbWFuZCkKIHsKLSAgaWYgKHRoaXMtPkNvbW1hbmREYXRhYmFzZSA9PSBudWxscHRyKSB7CisgIGlmICghdGhpcy0+Q29tbWFuZERhdGFiYXNlKSB7CiAgICAgc3RkOjpzdHJpbmcgY29tbWFuZERhdGFiYXNlTmFtZSA9CiAgICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSArCiAgICAgICAiL2NvbXBpbGVfY29tbWFuZHMuanNvbiI7Ci0gICAgdGhpcy0+Q29tbWFuZERhdGFiYXNlID0gbmV3IGNtR2VuZXJhdGVkRmlsZVN0cmVhbShjb21tYW5kRGF0YWJhc2VOYW1lKTsKLSAgICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8ICJbIiA8PCBzdGQ6OmVuZGw7CisgICAgdGhpcy0+Q29tbWFuZERhdGFiYXNlID0KKyAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KGNvbW1hbmREYXRhYmFzZU5hbWUpOworICAgICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgIltcbiI7CiAgIH0gZWxzZSB7Ci0gICAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCAiLCIgPDwgc3RkOjplbmRsOworICAgICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgIixcbiI7CiAgIH0KLSAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCAieyIgPDwgc3RkOjplbmRsCisgICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgIntcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBSIiggICJkaXJlY3RvcnkiOiAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjbUdsb2JhbEdlbmVyYXRvcjo6RXNjYXBlSlNPTih3b3JraW5nRGlyZWN0b3J5KQotICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcIiwiIDw8IHN0ZDo6ZW5kbAorICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcIixcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBSIiggICJjb21tYW5kIjogIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgY21HbG9iYWxHZW5lcmF0b3I6OkVzY2FwZUpTT04oY29tcGlsZUNvbW1hbmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiLCIgPDwgc3RkOjplbmRsCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFIiKCAgImZpbGUiOiAiKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjbUdsb2JhbEdlbmVyYXRvcjo6RXNjYXBlSlNPTihzb3VyY2VGaWxlKSA8PCAiXCIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsCi0gICAgICAgICAgICAgICAgICAgICAgICAgPDwgIn0iOworICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNtR2xvYmFsR2VuZXJhdG9yOjpFc2NhcGVKU09OKHNvdXJjZUZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiXG59IjsKIH0KIAogdm9pZCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OldyaXRlTWFpbk1ha2VmaWxlMigpCkBAIC0zNDMsMTkgKzM1MCwxOCBAQAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiaW5EaXIgPSBsZy5HZXRCaW5hcnlEaXJlY3RvcnkoKTsKIAogICAgIC8vIENNYWtlIG11c3QgcmVydW4gaWYgYSBieXByb2R1Y3QgaXMgbWlzc2luZy4KLSAgICB7Ci0gICAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiMgQnlwcm9kdWN0cyBvZiBDTWFrZSBnZW5lcmF0ZSBzdGVwOlxuIgotICAgICAgICAgICAgICAgICAgICAgIDw8ICJzZXQoQ01BS0VfTUFLRUZJTEVfUFJPRFVDVFNcbiI7Ci0gICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRmaWxlIDogbGcuR2V0TWFrZWZpbGUoKS0+R2V0T3V0cHV0RmlsZXMoKSkgeworICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiIyBCeXByb2R1Y3RzIG9mIENNYWtlIGdlbmVyYXRlIHN0ZXA6XG4iCisgICAgICAgICAgICAgICAgICAgIDw8ICJzZXQoQ01BS0VfTUFLRUZJTEVfUFJPRFVDVFNcbiI7CisKKyAgICAvLyBhZGQgaW4gYW55IGJ5cHJvZHVjdHMgYW5kIGFsbCB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGZpbGVzCisgICAgc3RkOjpzdHJpbmcgdG1wU3RyOworICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG91dGZpbGUgOgorICAgICAgICAgICBsb2NhbEdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0T3V0cHV0RmlsZXMoKSkgewogICAgICAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgXCIiCiAgICAgICAgICAgICAgICAgICAgICAgICA8PCBsZy5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIG91dGZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbiI7CiAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gYWRkIGluIGFsbCB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGZpbGVzCi0gICAgc3RkOjpzdHJpbmcgdG1wU3RyOwotICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICAgIHRtcFN0ciA9IGNtU3RyQ2F0KGxvY2FsR2VuLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiL0NNYWtlRmlsZXMvQ01ha2VEaXJlY3RvcnlJbmZvcm1hdGlvbi5jbWFrZSIpOwogICAgICAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIFwiIgpAQCAtNDgxLDYgKzQ4Nyw3OCBAQAogICB9CiB9CiAKK25hbWVzcGFjZSB7CitzdGQ6OnN0cmluZyBDb252ZXJ0VG9NYWtlZmlsZVBhdGhGb3JVbml4KHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoKQoreworICBzdGQ6OnN0cmluZyByZXN1bHQ7CisgIHJlc3VsdC5yZXNlcnZlKHBhdGguc2l6ZSgpKTsKKyAgZm9yIChjaGFyIGMgOiBwYXRoKSB7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlICc9JzoKKyAgICAgICAgLy8gV2UgcHJvdmlkZSAnRVFVQUxTID0gPScgdG8gZW5jb2RlICc9JyBpbiBhIG5vbi1hc3NpZ25tZW50IGNhc2UuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiQoRVFVQUxTKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJyQnOgorICAgICAgICByZXN1bHQuYXBwZW5kKCIkJCIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ1xcJzoKKyAgICAgIGNhc2UgJyAnOgorICAgICAgY2FzZSAnIyc6CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soJ1xcJyk7CisgICAgICAgIENNX0ZBTExUSFJPVUdIOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKK3N0ZDo6c3RyaW5nIENvbnZlcnRUb01ha2VmaWxlUGF0aEZvcldpbmRvd3Moc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgpCit7CisgIGJvb2wgY29uc3QgcXVvdGUgPSBwYXRoLmZpbmRfZmlyc3Rfb2YoIiAjIikgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgcmVzdWx0LnJlc2VydmUocGF0aC5zaXplKCkgKyAocXVvdGUgPyAyIDogMCkpOworICBpZiAocXVvdGUpIHsKKyAgICByZXN1bHQucHVzaF9iYWNrKCciJyk7CisgIH0KKyAgZm9yIChjaGFyIGMgOiBwYXRoKSB7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlICc9JzoKKyAgICAgICAgLy8gV2UgcHJvdmlkZSAnRVFVQUxTID0gPScgdG8gZW5jb2RlICc9JyBpbiBhIG5vbi1hc3NpZ25tZW50IGNhc2UuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiQoRVFVQUxTKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJyQnOgorICAgICAgICByZXN1bHQuYXBwZW5kKCIkJCIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJy8nOgorICAgICAgICByZXN1bHQucHVzaF9iYWNrKCdcXCcpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAocXVvdGUpIHsKKyAgICByZXN1bHQucHVzaF9iYWNrKCciJyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorfQorCitzdGQ6OnN0cmluZyBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkNvbnZlcnRUb01ha2VmaWxlUGF0aCgKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgpIGNvbnN0Cit7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisgIGlmICghdGhpcy0+Rm9yY2VVbml4UGF0aHMpIHsKKyAgICByZXR1cm4gQ29udmVydFRvTWFrZWZpbGVQYXRoRm9yV2luZG93cyhwYXRoKTsKKyAgfQorI2VuZGlmCisgIHJldHVybiBDb252ZXJ0VG9NYWtlZmlsZVBhdGhGb3JVbml4KHBhdGgpOworfQorCiBzdGQ6OnZlY3RvcjxjbUdsb2JhbEdlbmVyYXRvcjo6R2VuZXJhdGVkTWFrZUNvbW1hbmQ+CiBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkdlbmVyYXRlQnVpbGRDb21tYW5kKAogICBjb25zdCBzdGQ6OnN0cmluZyYgbWFrZVByb2dyYW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKnByb2plY3ROYW1lKi8sCkBAIC02NzQsMTAgKzc1MiwxMCBAQAogICAgICAgfQogCiAgICAgICBib29sIHRhcmdldE1lc3NhZ2VzID0gdHJ1ZTsKLSAgICAgIGlmIChjb25zdCBjaGFyKiB0Z3RNc2cgPQorICAgICAgaWYgKGNtUHJvcCB0Z3RNc2cgPQogICAgICAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKICAgICAgICAgICAgICAgIlRBUkdFVF9NRVNTQUdFUyIpKSB7Ci0gICAgICAgIHRhcmdldE1lc3NhZ2VzID0gY21Jc09uKHRndE1zZyk7CisgICAgICAgIHRhcmdldE1lc3NhZ2VzID0gY21Jc09uKCp0Z3RNc2cpOwogICAgICAgfQogCiAgICAgICBpZiAodGFyZ2V0TWVzc2FnZXMpIHsKQEAgLTY5Nyw5ICs3NzUsOCBAQAogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ0NtZDsKICAgICAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOwogICAgICAgICAvLyAjIGluIHRhcmdldAotICAgICAgICBwcm9nQ21kIDw8IGxnLkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHByb2dyZXNzLkRpciksCi0gICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgICAgcHJvZ0NtZCA8PCBsZy5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocHJvZ3Jlc3MuRGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgICAgICAvLwogICAgICAgICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IGVtaXR0ZWQ7CiAgICAgICAgIHByb2dDbWQgPDwgIiAiCkBAIC03MTEsOSArNzg4LDggQEAKICAgICAgIHsKICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHByb2dDbWQ7CiAgICAgICAgIHByb2dDbWQgPDwgIiQoQ01BS0VfQ09NTUFORCkgLUUgY21ha2VfcHJvZ3Jlc3Nfc3RhcnQgIjsgLy8gIyAwCi0gICAgICAgIHByb2dDbWQgPDwgbGcuQ29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3MuRGlyKSwKLSAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICBwcm9nQ21kIDw8IGxnLkNvbnZlcnRUb091dHB1dEZvcm1hdChwcm9ncmVzcy5EaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgICAgIHByb2dDbWQgPDwgIiAwIjsKICAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIGIvU291cmNlL2NtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oCmluZGV4IDM0MGE3ZWYuLjFjYWE0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKQEAgLTY4LDYgKzY4LDEzIEBACiAgICAgICBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4oKSk7CiAgIH0KIAorICB+Y21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKCkgb3ZlcnJpZGU7CisKKyAgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKGNvbnN0IGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyYpID0KKyAgICBkZWxldGU7CisgIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyYgb3BlcmF0b3I9KAorICAgIGNvbnN0IGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyYpID0gZGVsZXRlOworCiAgIC8vISBHZXQgdGhlIG5hbWUgZm9yIHRoZSBnZW5lcmF0b3IuCiAgIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCBvdmVycmlkZQogICB7CkBAIC0xMjksNiArMTM2LDEyIEBACiAgICAgICBvciBkZXBlbmRlbmNpZXMuICAqLwogICBzdGQ6OnN0cmluZyBHZXRFbXB0eVJ1bGVIYWNrRGVwZW5kcygpIHsgcmV0dXJuIHRoaXMtPkVtcHR5UnVsZUhhY2tEZXBlbmRzOyB9CiAKKyAgLyoqCisgICAqIENvbnZlcnQgYSBmaWxlIHBhdGggdG8gYSBNYWtlZmlsZSB0YXJnZXQgb3IgZGVwZW5kZW5jeSB3aXRoCisgICAqIGVzY2FwaW5nIGFuZCBxdW90aW5nIHN1aXRhYmxlIGZvciB0aGUgZ2VuZXJhdG9yJ3MgbWFrZSB0b29sLgorICAgKi8KKyAgc3RkOjpzdHJpbmcgQ29udmVydFRvTWFrZWZpbGVQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoKSBjb25zdDsKKwogICAvLyBjaGFuZ2UgdGhlIGJ1aWxkIGNvbW1hbmQgZm9yIHNwZWVkCiAgIHN0ZDo6dmVjdG9yPEdlbmVyYXRlZE1ha2VDb21tYW5kPiBHZW5lcmF0ZUJ1aWxkQ29tbWFuZCgKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFrZVByb2dyYW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9qZWN0TmFtZSwKQEAgLTE1MCw2ICsxNjMsOSBAQAogICAvKiogRG9lcyB0aGUgbWFrZSB0b29sIHRvbGVyYXRlIC5ERUxFVEVfT05fRVJST1I/ICovCiAgIHZpcnR1YWwgYm9vbCBBbGxvd0RlbGV0ZU9uRXJyb3IoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgLyoqIERvZXMgdGhlIG1ha2UgdG9vbCBpbnRlcnByZXQgJ1wjJyBhcyAnIyc/ICAqLworICB2aXJ0dWFsIGJvb2wgQ2FuRXNjYXBlT2N0b3Rob3JwZSgpIGNvbnN0OworCiAgIGJvb2wgSXNJUE9TdXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgdm9pZCBDb21wdXRlVGFyZ2V0T2JqZWN0RGlyZWN0b3J5KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0yMzIsNyArMjQ4LDcgQEAKICAgICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+JiBlbWl0dGVkKTsKICAgc2l6ZV90IENvdW50UHJvZ3Jlc3NNYXJrc0luQWxsKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKTsKIAotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIENvbW1hbmREYXRhYmFzZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4gQ29tbWFuZERhdGFiYXNlOwogCiBwcml2YXRlOgogICBjb25zdCBjaGFyKiBHZXRCdWlsZElnbm9yZUVycm9yc0ZsYWcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiLWkiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHgKaW5kZXggY2NiNmM1MC4uMzgwNTU0NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmN4eApAQCAtNiwxMiArNiwxMiBAQAogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogCisjaW5jbHVkZSA8Y20zcC9qc29uL3JlYWRlci5oPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKLQogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtVmVyc2lvbi5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvU2xuRGF0YS5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmgiCkBAIC0xMzcsOSArMTM4LDYgQEAKICAgICAiUHJvZHVjdERpciIsCiAgICAgdmMxMEV4cHJlc3MsIGNtU3lzdGVtVG9vbHM6OktleVdPVzY0XzMyKTsKICAgdGhpcy0+Q3VkYUVuYWJsZWQgPSBmYWxzZTsKLSAgdGhpcy0+U3lzdGVtSXNXaW5kb3dzQ0UgPSBmYWxzZTsKLSAgdGhpcy0+U3lzdGVtSXNXaW5kb3dzUGhvbmUgPSBmYWxzZTsKLSAgdGhpcy0+U3lzdGVtSXNXaW5kb3dzU3RvcmUgPSBmYWxzZTsKICAgdGhpcy0+TVNCdWlsZENvbW1hbmRJbml0aWFsaXplZCA9IGZhbHNlOwogICB7CiAgICAgc3RkOjpzdHJpbmcgZW52UGxhdGZvcm1Ub29sc2V0OwpAQCAtMzEzLDcgKzMxMSw3IEBACiAgICAgICB2ZXJzaW9uLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKHZlcnNpb24uZmluZCh0aGlzLT5HZXRQbGF0Zm9ybVRvb2xzZXRTdHJpbmcoKSkgIT0gMCkgeworICAgIGlmICghY21IYXNQcmVmaXgodmVyc2lvbiwgdGhpcy0+R2V0UGxhdGZvcm1Ub29sc2V0U3RyaW5nKCkpKSB7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgICAgIGUgPDwKQEAgLTUxMCwxOCArNTA4LDE2IEBACiAgICAgICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHN0ZDo6c3RyaW5nIHYgPSB0aGlzLT5HZXRJbnN0YWxsZWROc2lnaHRUZWdyYVZlcnNpb24oKTsKLSAgICBpZiAodi5lbXB0eSgpKSB7Ci0gICAgICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIkNNQUtFX1NZU1RFTV9OQU1FIGlzICdBbmRyb2lkJyBidXQgIgotICAgICAgICAgICAgICAgICAgICAgICAiJ05WSURJQSBOc2lnaHQgVGVncmEgVmlzdWFsIFN0dWRpbyBFZGl0aW9uJyAiCi0gICAgICAgICAgICAgICAgICAgICAgICJpcyBub3QgaW5zdGFsbGVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0dFTkVSQVRPUl9QTEFURk9STSIpID09ICJUZWdyYS1BbmRyb2lkIikgeworICAgICAgaWYgKCF0aGlzLT5Jbml0aWFsaXplVGVncmFBbmRyb2lkKG1mKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPlN5c3RlbUlzQW5kcm9pZCA9IHRydWU7CisgICAgICBpZiAoIXRoaXMtPkluaXRpYWxpemVBbmRyb2lkKG1mKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CiAgICAgfQotICAgIHRoaXMtPkRlZmF1bHRQbGF0Zm9ybU5hbWUgPSAiVGVncmEtQW5kcm9pZCI7Ci0gICAgdGhpcy0+RGVmYXVsdFBsYXRmb3JtVG9vbHNldCA9ICJEZWZhdWx0IjsKLSAgICB0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb24gPSB2OwotICAgIG1mLT5BZGREZWZpbml0aW9uKCJDTUFLRV9WU19Oc2lnaHRUZWdyYV9WRVJTSU9OIiwgdik7CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKQEAgLTU2Myw2ICs1NTksMzEgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkluaXRpYWxpemVUZWdyYUFuZHJvaWQoY21NYWtlZmlsZSogbWYpCit7CisgIHN0ZDo6c3RyaW5nIHYgPSB0aGlzLT5HZXRJbnN0YWxsZWROc2lnaHRUZWdyYVZlcnNpb24oKTsKKyAgaWYgKHYuZW1wdHkoKSkgeworICAgIG1mLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgIkNNQUtFX1NZU1RFTV9OQU1FIGlzICdBbmRyb2lkJyBidXQgIgorICAgICAgICAgICAgICAgICAgICAgIidOVklESUEgTnNpZ2h0IFRlZ3JhIFZpc3VhbCBTdHVkaW8gRWRpdGlvbicgIgorICAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBpbnN0YWxsZWQuIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHRoaXMtPkRlZmF1bHRQbGF0Zm9ybU5hbWUgPSAiVGVncmEtQW5kcm9pZCI7CisgIHRoaXMtPkRlZmF1bHRQbGF0Zm9ybVRvb2xzZXQgPSAiRGVmYXVsdCI7CisgIHRoaXMtPk5zaWdodFRlZ3JhVmVyc2lvbiA9IHY7CisgIG1mLT5BZGREZWZpbml0aW9uKCJDTUFLRV9WU19Oc2lnaHRUZWdyYV9WRVJTSU9OIiwgdik7CisgIHJldHVybiB0cnVlOworfQorCitib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkluaXRpYWxpemVBbmRyb2lkKGNtTWFrZWZpbGUqIG1mKQoreworICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKKyAgZSA8PCB0aGlzLT5HZXROYW1lKCkgPDwgIiBkb2VzIG5vdCBzdXBwb3J0IEFuZHJvaWQuIjsKKyAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOworICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6U2VsZWN0V2luZG93c1Bob25lVG9vbHNldCgKICAgc3RkOjpzdHJpbmcmIHRvb2xzZXQpIGNvbnN0CiB7CkBAIC01OTcsNiArNjE4LDI4IEBACiB7CiAgIHRoaXMtPkxvbmdlc3RTb3VyY2UgPSBMb25nZXN0U291cmNlUGF0aCgpOwogICB0aGlzLT5jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6OkdlbmVyYXRlKCk7CisgIGlmICghdGhpcy0+QW5kcm9pZEV4ZWN1dGFibGVXYXJuaW5ncy5lbXB0eSgpICYmCisgICAgICAhdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0SXNJblRyeUNvbXBpbGUoKSkgeworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOworICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICBlIDw8CisgICAgICAiWW91IGFyZSB1c2luZyBWaXN1YWwgU3R1ZGlvIHRvb2xzIGZvciBBbmRyb2lkLCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0ICIKKyAgICAgICJzdGFuZGFsb25lIGV4ZWN1dGFibGVzLiBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyAiCisgICAgICAibm90IGhhdmUgdGhlIEFORFJPSURfR1VJIHByb3BlcnR5IHNldCwgYW5kIHRodXMgd2lsbCBub3QgYmUgYnVpbHQgYXMgIgorICAgICAgImV4cGVjdGVkLiBUaGV5IHdpbGwgYmUgYnVpbHQgYXMgc2hhcmVkIGxpYnJhcmllcyB3aXRoIGV4ZWN1dGFibGUgIgorICAgICAgImZpbGVuYW1lczpcbiIKKyAgICAgICIgICI7CisgICAgLyogY2xhbmctZm9ybWF0IG9uICovCisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChhdXRvIGNvbnN0JiBuYW1lIDogdGhpcy0+QW5kcm9pZEV4ZWN1dGFibGVXYXJuaW5ncykgeworICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICBlIDw8ICIsICI7CisgICAgICB9CisgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgZSA8PCBuYW1lOworICAgIH0KKyAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OldBUk5JTkcsIGUuc3RyKCkpOworICB9CiAgIGlmICh0aGlzLT5Mb25nZXN0U291cmNlLkxlbmd0aCA+IDApIHsKICAgICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkxvbmdlc3RTb3VyY2UuVGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpOwogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwpAQCAtNjYzLDggKzcwNiwxNCBAQAogICBpZiAoIXRoaXMtPkdlbmVyYXRvclRvb2xzZXQuZW1wdHkoKSkgewogICAgIHJldHVybiB0aGlzLT5HZW5lcmF0b3JUb29sc2V0OwogICB9Ci0gIGlmICghdGhpcy0+RGVmYXVsdFBsYXRmb3JtVG9vbHNldC5lbXB0eSgpKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkRlZmF1bHRQbGF0Zm9ybVRvb2xzZXQ7CisgIGlmICh0aGlzLT5TeXN0ZW1Jc0FuZHJvaWQpIHsKKyAgICBpZiAoIXRoaXMtPkRlZmF1bHRBbmRyb2lkVG9vbHNldC5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gdGhpcy0+RGVmYXVsdEFuZHJvaWRUb29sc2V0OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIXRoaXMtPkRlZmF1bHRQbGF0Zm9ybVRvb2xzZXQuZW1wdHkoKSkgeworICAgICAgcmV0dXJuIHRoaXMtPkRlZmF1bHRQbGF0Zm9ybVRvb2xzZXQ7CisgICAgfQogICB9CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBlbXB0eTsKICAgcmV0dXJuIGVtcHR5OwpAQCAtODc4LDcgKzkyNywxMCBAQAogICAgICAgZXBnLkF0dHJpYnV0ZSgiTGFiZWwiLCAiR2xvYmFscyIpOwogICAgICAgY21YTUxFbGVtZW50KGVwZywgIlByb2plY3RHdWlkIikKICAgICAgICAgLkNvbnRlbnQoIntGM0ZDNkQ4Ni01MDhELTNGQjEtOTZEMi05OTVGMDhCMTQyRUN9Iik7Ci0gICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiS2V5d29yZCIpLkNvbnRlbnQoIldpbjMyUHJvaiIpOworICAgICAgY21YTUxFbGVtZW50KGVwZywgIktleXdvcmQiKQorICAgICAgICAuQ29udGVudChtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX1NZU1RFTV9OQU1FIikgPT0gIkFuZHJvaWQiCisgICAgICAgICAgICAgICAgICAgPyAiQW5kcm9pZCIKKyAgICAgICAgICAgICAgICAgICA6ICJXaW4zMlByb2oiKTsKICAgICAgIGNtWE1MRWxlbWVudChlcGcsICJQbGF0Zm9ybSIpLkNvbnRlbnQodGhpcy0+R2V0UGxhdGZvcm1OYW1lKCkpOwogICAgICAgaWYgKHRoaXMtPkdldFN5c3RlbU5hbWUoKSA9PSAiV2luZG93c1Bob25lIikgewogICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiQXBwbGljYXRpb25UeXBlIikuQ29udGVudCgiV2luZG93cyBQaG9uZSIpOwpAQCAtODg4LDE1ICs5NDAsMjEgQEAKICAgICAgICAgY21YTUxFbGVtZW50KGVwZywgIkFwcGxpY2F0aW9uVHlwZSIpLkNvbnRlbnQoIldpbmRvd3MgU3RvcmUiKTsKICAgICAgICAgY21YTUxFbGVtZW50KGVwZywgIkFwcGxpY2F0aW9uVHlwZVJldmlzaW9uIikKICAgICAgICAgICAuQ29udGVudCh0aGlzLT5HZXRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy0+R2V0U3lzdGVtTmFtZSgpID09ICJBbmRyb2lkIikgeworICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiQXBwbGljYXRpb25UeXBlIikuQ29udGVudCgiQW5kcm9pZCIpOworICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiQXBwbGljYXRpb25UeXBlUmV2aXNpb24iKQorICAgICAgICAgIC5Db250ZW50KHRoaXMtPkdldEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uKCkpOwogICAgICAgfQogICAgICAgaWYgKCF0aGlzLT5XaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uLmVtcHR5KCkpIHsKICAgICAgICAgY21YTUxFbGVtZW50KGVwZywgIldpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24iKQogICAgICAgICAgIC5Db250ZW50KHRoaXMtPldpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24pOwogICAgICAgfQotICAgICAgaWYgKHRoaXMtPkdldFBsYXRmb3JtTmFtZSgpID09ICJBUk02NCIpIHsKLSAgICAgICAgY21YTUxFbGVtZW50KGVwZywgIldpbmRvd3NTREtEZXNrdG9wQVJNNjRTdXBwb3J0IikuQ29udGVudCgidHJ1ZSIpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLT5HZXRQbGF0Zm9ybU5hbWUoKSA9PSAiQVJNIikgewotICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0IikuQ29udGVudCgidHJ1ZSIpOworICAgICAgaWYgKHRoaXMtPkdldFN5c3RlbU5hbWUoKSAhPSAiQW5kcm9pZCIpIHsKKyAgICAgICAgaWYgKHRoaXMtPkdldFBsYXRmb3JtTmFtZSgpID09ICJBUk02NCIpIHsKKyAgICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiV2luZG93c1NES0Rlc2t0b3BBUk02NFN1cHBvcnQiKS5Db250ZW50KCJ0cnVlIik7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy0+R2V0UGxhdGZvcm1OYW1lKCkgPT0gIkFSTSIpIHsKKyAgICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0IikuQ29udGVudCgidHJ1ZSIpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICAgIGNtWE1MRWxlbWVudChlcHJqLCAiSW1wb3J0IikKQEAgLTEyMDgsNiArMTI2NiwxMCBAQAogCiBzdGQ6OnN0cmluZyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpHZXRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpIGNvbnN0CiB7CisgIGlmICh0aGlzLT5HZXRTeXN0ZW1OYW1lKCkgPT0gIkFuZHJvaWQiKSB7CisgICAgcmV0dXJuIHRoaXMtPkdldEFuZHJvaWRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpOworICB9CisKICAgLy8gUmV0dXJuIHRoZSBmaXJzdCB0d28gJy4nLXNlcGFyYXRlZCBjb21wb25lbnRzIG9mIHRoZSBXaW5kb3dzIHZlcnNpb24uCiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kMSA9IHRoaXMtPlN5c3RlbVZlcnNpb24uZmluZCgnLicpOwogICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZDIgPQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmgKaW5kZXggZjY1OWZmMy4uMGM1MzUzNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yX2gKIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzZXQ+CiAKICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbVZpc3VhbFN0dWRpbzEwVG9vbHNldE9wdGlvbnMuaCIKQEAgLTQzLDYgKzQ0LDExIEBACiAgIHZvaWQgRW5hYmxlTGFuZ3VhZ2Uoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBsYW5ndWFnZXMsIGNtTWFrZWZpbGUqLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb3B0aW9uYWwpIG92ZXJyaWRlOwogCisgIHZvaWQgQWRkQW5kcm9pZEV4ZWN1dGFibGVXYXJuaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQorICB7CisgICAgdGhpcy0+QW5kcm9pZEV4ZWN1dGFibGVXYXJuaW5ncy5pbnNlcnQobmFtZSk7CisgIH0KKwogICBib29sIElzQ3VkYUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5DdWRhRW5hYmxlZDsgfQogCiAgIC8qKiBHZW5lcmF0aW5nIGZvciBOc2lnaHQgVGVncmEgVlMgcGx1Z2luPyAgKi8KQEAgLTEwMCw2ICsxMDYsOSBAQAogICAvKiogUmV0dXJuIHRydWUgaWYgYnVpbGRpbmcgZm9yIFdpbmRvd3NTdG9yZSAqLwogICBib29sIFRhcmdldHNXaW5kb3dzU3RvcmUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5TeXN0ZW1Jc1dpbmRvd3NTdG9yZTsgfQogCisgIC8qKiBSZXR1cm4gdHJ1ZSBpZiBidWlsZGluZyBmb3IgQW5kcm9pZCAqLworICBib29sIFRhcmdldHNBbmRyb2lkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3lzdGVtSXNBbmRyb2lkOyB9CisKICAgY29uc3QgY2hhciogR2V0Q01ha2VDRkdJbnREaXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiJChDb25maWd1cmF0aW9uKSI7IH0KICAgYm9vbCBGaW5kNjRCaXRUb29scyhjbU1ha2VmaWxlKiBtZik7CiAKQEAgLTEyMSwxMSArMTMwLDE1IEBACiAKICAgYm9vbCBJc0lQT1N1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICB2aXJ0dWFsIGJvb2wgSXNTdGRPdXRFbmNvZGluZ1N1cHBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldEluc3RhbGxlZE5zaWdodFRlZ3JhVmVyc2lvbigpOwogCiAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IHR3byBjb21wb25lbnRzIG9mIENNQUtFX1NZU1RFTV9WRVJTSU9OLiAgKi8KICAgc3RkOjpzdHJpbmcgR2V0QXBwbGljYXRpb25UeXBlUmV2aXNpb24oKSBjb25zdDsKIAorICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldEFuZHJvaWRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisKICAgY21JREVGbGFnVGFibGUgY29uc3QqIEdldENsRmxhZ1RhYmxlKCkgY29uc3Q7CiAgIGNtSURFRmxhZ1RhYmxlIGNvbnN0KiBHZXRDU2hhcnBGbGFnVGFibGUoKSBjb25zdDsKICAgY21JREVGbGFnVGFibGUgY29uc3QqIEdldFJjRmxhZ1RhYmxlKCkgY29uc3Q7CkBAIC0xNDYsNiArMTU5LDggQEAKICAgdmlydHVhbCBib29sIEluaXRpYWxpemVXaW5kb3dzQ0UoY21NYWtlZmlsZSogbWYpOwogICB2aXJ0dWFsIGJvb2wgSW5pdGlhbGl6ZVdpbmRvd3NQaG9uZShjbU1ha2VmaWxlKiBtZik7CiAgIHZpcnR1YWwgYm9vbCBJbml0aWFsaXplV2luZG93c1N0b3JlKGNtTWFrZWZpbGUqIG1mKTsKKyAgdmlydHVhbCBib29sIEluaXRpYWxpemVUZWdyYUFuZHJvaWQoY21NYWtlZmlsZSogbWYpOworICB2aXJ0dWFsIGJvb2wgSW5pdGlhbGl6ZUFuZHJvaWQoY21NYWtlZmlsZSogbWYpOwogCiAgIHZpcnR1YWwgYm9vbCBQcm9jZXNzR2VuZXJhdG9yVG9vbHNldEZpZWxkKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSk7CkBAIC0xNjksNiArMTg0LDcgQEAKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9yVG9vbHNldEN1ZGFDdXN0b21EaXI7CiAgIHN0ZDo6c3RyaW5nIERlZmF1bHRQbGF0Zm9ybVRvb2xzZXQ7CiAgIHN0ZDo6c3RyaW5nIERlZmF1bHRQbGF0Zm9ybVRvb2xzZXRIb3N0QXJjaGl0ZWN0dXJlOworICBzdGQ6OnN0cmluZyBEZWZhdWx0QW5kcm9pZFRvb2xzZXQ7CiAgIHN0ZDo6c3RyaW5nIFdpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb247CiAgIHN0ZDo6c3RyaW5nIFN5c3RlbU5hbWU7CiAgIHN0ZDo6c3RyaW5nIFN5c3RlbVZlcnNpb247CkBAIC0xODMsOSArMTk5LDEwIEBACiAgIHN0ZDo6c3RyaW5nIERlZmF1bHROYXNtRmxhZ1RhYmxlTmFtZTsKICAgc3RkOjpzdHJpbmcgRGVmYXVsdFJDRmxhZ1RhYmxlTmFtZTsKICAgYm9vbCBTdXBwb3J0c1VuaXR5QnVpbGRzID0gZmFsc2U7Ci0gIGJvb2wgU3lzdGVtSXNXaW5kb3dzQ0U7Ci0gIGJvb2wgU3lzdGVtSXNXaW5kb3dzUGhvbmU7Ci0gIGJvb2wgU3lzdGVtSXNXaW5kb3dzU3RvcmU7CisgIGJvb2wgU3lzdGVtSXNXaW5kb3dzQ0UgPSBmYWxzZTsKKyAgYm9vbCBTeXN0ZW1Jc1dpbmRvd3NQaG9uZSA9IGZhbHNlOworICBib29sIFN5c3RlbUlzV2luZG93c1N0b3JlID0gZmFsc2U7CisgIGJvb2wgU3lzdGVtSXNBbmRyb2lkID0gZmFsc2U7CiAKIHByaXZhdGU6CiAgIGNsYXNzIEZhY3Rvcnk7CkBAIC0yMDksNiArMjI2LDcgQEAKICAgc3RkOjpzdHJpbmcgTVNCdWlsZENvbW1hbmQ7CiAgIGJvb2wgTVNCdWlsZENvbW1hbmRJbml0aWFsaXplZDsKICAgY21WaXN1YWxTdHVkaW8xMFRvb2xzZXRPcHRpb25zIFRvb2xzZXRPcHRpb25zOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gQW5kcm9pZEV4ZWN1dGFibGVXYXJuaW5nczsKICAgdmlydHVhbCBzdGQ6OnN0cmluZyBGaW5kTVNCdWlsZENvbW1hbmQoKTsKICAgc3RkOjpzdHJpbmcgRmluZERldkVudkNvbW1hbmQoKSBvdmVycmlkZTsKICAgc3RkOjpzdHJpbmcgR2V0VlNNYWtlUHJvZ3JhbSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXMtPkdldE1TQnVpbGRDb21tYW5kKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmN4eAppbmRleCBmNTQ5YjZhLi40NTFkNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IuY3h4CkBAIC0xMDksNiArMTA5LDcgQEAKICAgICAiUHJvZHVjdERpciIsCiAgICAgdmMxNEV4cHJlc3MsIGNtU3lzdGVtVG9vbHM6OktleVdPVzY0XzMyKTsKICAgdGhpcy0+RGVmYXVsdFBsYXRmb3JtVG9vbHNldCA9ICJ2MTQwIjsKKyAgdGhpcy0+RGVmYXVsdEFuZHJvaWRUb29sc2V0ID0gIkNsYW5nXzNfOCI7CiAgIHRoaXMtPkRlZmF1bHRDTEZsYWdUYWJsZU5hbWUgPSAidjE0MCI7CiAgIHRoaXMtPkRlZmF1bHRDU2hhcnBGbGFnVGFibGVOYW1lID0gInYxNDAiOwogICB0aGlzLT5EZWZhdWx0TGliRmxhZ1RhYmxlTmFtZSA9ICJ2MTQiOwpAQCAtMTU5LDYgKzE2MCwxMSBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yOjpJbml0aWFsaXplQW5kcm9pZChjbU1ha2VmaWxlKikKK3sKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvcjo6U2VsZWN0V2luZG93czEwU0RLKGNtTWFrZWZpbGUqIG1mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXF1aXJlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5oCmluZGV4IGNjYzI5MTcuLjM5MzUzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IuaApAQCAtMjMsMTIgKzIzLDE4IEBACiAKICAgYm9vbCBNYXRjaGVzR2VuZXJhdG9yTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgY29uc3QgY2hhciogR2V0QW5kcm9pZEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uKCkgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIHJldHVybiAiMi4wIjsKKyAgfQorCiBwcm90ZWN0ZWQ6CiAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IoY21ha2UqIGNtLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcGxhdGZvcm1JbkdlbmVyYXRvck5hbWUpOwogCiAgIGJvb2wgSW5pdGlhbGl6ZVdpbmRvd3MoY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogICBib29sIEluaXRpYWxpemVXaW5kb3dzU3RvcmUoY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBib29sIEluaXRpYWxpemVBbmRyb2lkKGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKICAgYm9vbCBTZWxlY3RXaW5kb3dzU3RvcmVUb29sc2V0KHN0ZDo6c3RyaW5nJiB0b29sc2V0KSBjb25zdCBvdmVycmlkZTsKIAogICAvLyBUaGVzZSBhcmVuJ3QgdmlydHVhbCBiZWNhdXNlIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNlbGVjdGVkIHZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmN4eAppbmRleCBkMGFlYzYxLi4wMDgzYzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvNzFHZW5lcmF0b3IuY3h4CkBAIC0xOSw4ICsxOSw4IEBACiAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKICAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBnZW5lcmF0b3JzKQogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgcm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlncyk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICByb290LT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gV3JpdGUgb3V0IHRoZSBoZWFkZXIgZm9yIGEgU0xOIGZpbGUKICAgdGhpcy0+V3JpdGVTTE5IZWFkZXIoZm91dCk7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdCkKIHsKICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSBmb3J0cmFuIGJ1aWxkCi0gIGNvbnN0IGNoYXIqIGV4dCA9ICIudmNwcm9qIjsKKyAgc3RkOjpzdHJpbmcgZXh0ID0gIi52Y3Byb2oiOwogICBjb25zdCBjaGFyKiBwcm9qZWN0ID0KICAgICAiUHJvamVjdChcIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9XCIpID0gXCIiOwogICBpZiAodGhpcy0+VGFyZ2V0SXNGb3J0cmFuT25seSh0KSkgewpAQCAtMTAyLDkgKzEwMiw5IEBACiAgICAgZXh0ID0gIi5jc3Byb2oiOwogICAgIHByb2plY3QgPSAiUHJvamVjdChcIntGQUUwNEVDMC0zMDFGLTExRDMtQkY0Qi0wMEMwNEY3OUVGQkN9XCIpID0gXCIiOwogICB9Ci0gIGNvbnN0IGNoYXIqIHRhcmdldEV4dCA9IHQtPkdldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FX0VYVCIpOworICBjbVByb3AgdGFyZ2V0RXh0ID0gdC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUVfRVhUIik7CiAgIGlmICh0YXJnZXRFeHQpIHsKLSAgICBleHQgPSB0YXJnZXRFeHQ7CisgICAgZXh0ID0gKnRhcmdldEV4dDsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGd1aWQgPSB0aGlzLT5HZXRHVUlEKGRzcG5hbWUpOwpAQCAtMTk4LDkgKzE5OCw5IEBACiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1hcENvbmZpZzsKICAgICBjb25zdCBjaGFyKiBkc3RDb25maWcgPSBpLmNfc3RyKCk7CiAgICAgaWYgKHRhcmdldC5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIikpIHsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBtID0gdGFyZ2V0LkdldFByb3BlcnR5KCJNQVBfSU1QT1JURURfQ09ORklHXyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGkpKSkgewotICAgICAgICBjbUV4cGFuZExpc3QobSwgbWFwQ29uZmlnKTsKKyAgICAgIGlmIChjbVByb3AgbSA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiTUFQX0lNUE9SVEVEX0NPTkZJR18iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoaSkpKSB7CisgICAgICAgIGNtRXhwYW5kTGlzdCgqbSwgbWFwQ29uZmlnKTsKICAgICAgICAgaWYgKCFtYXBDb25maWcuZW1wdHkoKSkgewogICAgICAgICAgIGRzdENvbmZpZyA9IG1hcENvbmZpZ1swXS5jX3N0cigpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CmluZGV4IDk3OTkxMjQuLmM4NTFlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgLy8gZG9lcyBub3Qga25vdyBhYm91dC4KICAgc3RkOjpzdHJpbmcgZXh0cmFQYXRoOwogICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RW52KCJDTUFLRV9NU1ZDSURFX1JVTl9QQVRIIiwgZXh0cmFQYXRoKSkgewotICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX01TVkNJREVfUlVOX1BBVEgiLCBleHRyYVBhdGguY19zdHIoKSwKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9NU1ZDSURFX1JVTl9QQVRIIiwgZXh0cmFQYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlIENNQUtFX01TVkNJREVfUlVOX1BBVEgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpTVEFUSUMpOwogICB9CkBAIC0zNDIsMTkgKzM0MiwxOSBAQAogICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgY29uc3QgY2hhciogZXhwYXRoID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIik7CisgICAgY21Qcm9wIGV4cGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpOwogICAgIGlmIChleHBhdGgpIHsKICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBhbGxDb25maWd1cmF0aW9ucyhjb25maWdzLmJlZ2luKCksIGNvbmZpZ3MuZW5kKCkpOwotICAgICAgY29uc3QgY2hhciogbWFwcGluZyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1BMQVRGT1JNX01BUFBJTkciKTsKKyAgICAgIGNtUHJvcCBtYXBwaW5nID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUExBVEZPUk1fTUFQUElORyIpOwogICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0Q29uZmlndXJhdGlvbnMoZm91dCwgdGFyZ2V0LT5HZXROYW1lKCksICp0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLCBhbGxDb25maWd1cmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPyBtYXBwaW5nIDogIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA/ICptYXBwaW5nIDogIiIpOwogICAgIH0gZWxzZSB7CiAgICAgICBjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGNvbmZpZ3NQYXJ0T2ZEZWZhdWx0QnVpbGQgPQogICAgICAgICB0aGlzLT5Jc1BhcnRPZkRlZmF1bHRCdWlsZChjb25maWdzLCBwcm9qZWN0VGFyZ2V0cywgdGFyZ2V0KTsKLSAgICAgIGNvbnN0IGNoYXIqIHZjcHJvak5hbWUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIik7CisgICAgICBjbVByb3AgdmNwcm9qTmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiKTsKICAgICAgIGlmICh2Y3Byb2pOYW1lKSB7Ci0gICAgICAgIHRoaXMtPldyaXRlUHJvamVjdENvbmZpZ3VyYXRpb25zKGZvdXQsIHZjcHJvak5hbWUsICp0YXJnZXQsIGNvbmZpZ3MsCisgICAgICAgIHRoaXMtPldyaXRlUHJvamVjdENvbmZpZ3VyYXRpb25zKGZvdXQsICp2Y3Byb2pOYW1lLCAqdGFyZ2V0LCBjb25maWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzUGFydE9mRGVmYXVsdEJ1aWxkKTsKICAgICAgIH0KICAgICB9CkBAIC0zNzUsMTcgKzM3NSwxOCBAQAogICAgIGJvb2wgd3JpdHRlbiA9IGZhbHNlOwogCiAgICAgLy8gaGFuZGxlIGV4dGVybmFsIHZjIHByb2plY3QgZmlsZXMKLSAgICBjb25zdCBjaGFyKiBleHBhdGggPSB0YXJnZXQtPkdldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiKTsKKyAgICBjbVByb3AgZXhwYXRoID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIik7CiAgICAgaWYgKGV4cGF0aCkgewogICAgICAgc3RkOjpzdHJpbmcgcHJvamVjdCA9IHRhcmdldC0+R2V0TmFtZSgpOwotICAgICAgc3RkOjpzdHJpbmcgbG9jYXRpb24gPSBleHBhdGg7CisgICAgICBzdGQ6OnN0cmluZyBsb2NhdGlvbiA9ICpleHBhdGg7CiAKKyAgICAgIGNtUHJvcCBwID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUFJPSkVDVF9UWVBFIik7CiAgICAgICB0aGlzLT5Xcml0ZUV4dGVybmFsUHJvamVjdChmb3V0LCBwcm9qZWN0LCBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1BST0pFQ1RfVFlQRSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRVdGlsaXRpZXMoKSk7CiAgICAgICB3cml0dGVuID0gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgY29uc3QgY2hhciogdmNwcm9qTmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiKTsKKyAgICAgIGNtUHJvcCB2Y3Byb2pOYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIpOwogICAgICAgaWYgKHZjcHJvak5hbWUpIHsKICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGRpciA9IGxnLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CkBAIC0zOTMsNyArMzk0LDcgQEAKICAgICAgICAgaWYgKGRpciA9PSAiLiIpIHsKICAgICAgICAgICBkaXIuY2xlYXIoKTsgLy8gbXNidWlsZCBjYW5ub3QgaGFuZGxlICIuXCIgcHJlZml4CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0KGZvdXQsIHZjcHJvak5hbWUsIGRpciwgdGFyZ2V0KTsKKyAgICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0KGZvdXQsICp2Y3Byb2pOYW1lLCBkaXIsIHRhcmdldCk7CiAgICAgICAgIHdyaXR0ZW4gPSB0cnVlOwogICAgICAgfQogICAgIH0KQEAgLTQzOCwxMSArNDM5LDExIEBACiAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBjb25zdCBjaGFyKiB2Y3Byb2pOYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIpOworICAgIGNtUHJvcCB2Y3Byb2pOYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIpOwogICAgIGlmICh2Y3Byb2pOYW1lKSB7CiAgICAgICBzdGQ6OnN0cmluZyBkaXIgPQogICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKTsKLSAgICAgIHRoaXMtPldyaXRlUHJvamVjdERlcGVuZHMoZm91dCwgdmNwcm9qTmFtZSwgZGlyLmNfc3RyKCksIHRhcmdldCk7CisgICAgICB0aGlzLT5Xcml0ZVByb2plY3REZXBlbmRzKGZvdXQsICp2Y3Byb2pOYW1lLCBkaXIsIHRhcmdldCk7CiAgICAgfQogICB9CiB9CkBAIC01MDUsMTMgKzUwNiwxMyBAQAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcEtleXMgPQogICAgIHJvb3QtPkdldE1ha2VmaWxlKCktPkdldFByb3BlcnR5S2V5cygpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdCA6IHByb3BLZXlzKSB7Ci0gICAgaWYgKGl0LmZpbmQoIlZTX0dMT0JBTF9TRUNUSU9OXyIpID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGl0LCAiVlNfR0xPQkFMX1NFQ1RJT05fIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHNlY3Rpb25UeXBlOwogICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGl0LnN1YnN0cigxOCk7Ci0gICAgICBpZiAobmFtZS5maW5kKCJQUkVfIikgPT0gMCkgeworICAgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChuYW1lLCAiUFJFXyIpKSB7CiAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cig0KTsKICAgICAgICAgc2VjdGlvblR5cGUgPSAicHJlU29sdXRpb24iOwotICAgICAgfSBlbHNlIGlmIChuYW1lLmZpbmQoIlBPU1RfIikgPT0gMCkgeworICAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobmFtZSwgIlBPU1RfIikpIHsKICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDUpOwogICAgICAgICBzZWN0aW9uVHlwZSA9ICJwb3N0U29sdXRpb24iOwogICAgICAgfSBlbHNlCkBAIC01MjYsOCArNTI3LDggQEAKICAgICAgICAgICBleHRlbnNpYmlsaXR5QWRkSW5zT3ZlcnJpZGRlbiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZm91dCA8PCAiXHRHbG9iYWxTZWN0aW9uKCIgPDwgbmFtZSA8PCAiKSA9ICIgPDwgc2VjdGlvblR5cGUgPDwgIlxuIjsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtleVZhbHVlUGFpcnMgPQotICAgICAgICAgIGNtRXhwYW5kZWRMaXN0KHJvb3QtPkdldE1ha2VmaWxlKCktPkdldFByb3BlcnR5KGl0KSk7CisgICAgICAgIGNtUHJvcCBwID0gcm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0UHJvcGVydHkoaXQpOworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5VmFsdWVQYWlycyA9IGNtRXhwYW5kZWRMaXN0KHAgPyAqcCA6ICIiKTsKICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXRQYWlyIDoga2V5VmFsdWVQYWlycykgewogICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zRXF1YWwgPSBpdFBhaXIuZmluZCgnPScpOwogICAgICAgICAgIGlmIChwb3NFcXVhbCAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewpAQCAtNTY3LDggKzU2OCw5IEBACiBzdGQ6OnN0cmluZyBjbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I6OldyaXRlVXRpbGl0eURlcGVuZCgKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCkKIHsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3MgPQorICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgY21NYWtlZmlsZTo6RXhjbHVkZUVtcHR5Q29uZmlnKTsKICAgc3RkOjpzdHJpbmcgcG5hbWUgPSBjbVN0ckNhdCh0YXJnZXQtPkdldE5hbWUoKSwgIl9VVElMSVRZIik7CiAgIHN0ZDo6c3RyaW5nIGZuYW1lID0KICAgICBjbVN0ckNhdCh0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLApAQCAtNjc2LDcgKzY3OCw4IEBACiAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBjb25maWdzKSB7CiAgICAgICAgICAgY29uc3QgY2hhciogcHJvcGVydHlWYWx1ZSA9CiAgICAgICAgICAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbihwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgIGlmIChjbUlzT24oY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKKyAgICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAmJgorICAgICAgICAgICAgICBjbUlzT24oY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlLCB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCksIGkpKSkgewogICAgICAgICAgICAgYWN0aXZlQ29uZmlncy5pbnNlcnQoaSk7CiAgICAgICAgICAgfQpAQCAtNjkxLDkgKzY5NCw3IEBACiAgIH0KICAgLy8gaW5zcGVjdCBFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRFtfPENPTkZJRz5dIHByb3BlcnRpZXMKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGNvbmZpZ3MpIHsKLSAgICBjb25zdCBjaGFyKiBwcm9wZXJ0eVZhbHVlID0KLSAgICAgIHRhcmdldC0+R2V0RmVhdHVyZSgiRVhDTFVERV9GUk9NX0RFRkFVTFRfQlVJTEQiLCBpKTsKLSAgICBpZiAoY21Jc09mZihwcm9wZXJ0eVZhbHVlKSkgeworICAgIGlmIChjbUlzT2ZmKHRhcmdldC0+R2V0RmVhdHVyZSgiRVhDTFVERV9GUk9NX0RFRkFVTFRfQlVJTEQiLCBpKSkpIHsKICAgICAgIGFjdGl2ZUNvbmZpZ3MuaW5zZXJ0KGkpOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmN4eAppbmRleCAxYzYyZmJkLi4yOWNhMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmN4eApAQCAtMTQyLDYgKzE0Miw5IEBACiAKICAgLy8gQWRkIGEgY3VzdG9tIHJ1bGUgdG8gcmUtcnVuIENNYWtlIGlmIGFueSBpbnB1dCBmaWxlcyBjaGFuZ2VkLgogICB7CisgICAgLy8gVGhlIGN1c3RvbSBydWxlIHJ1bnMgY21ha2Ugc28gc2V0IFVURi04IHBpcGVzLgorICAgIGJvb2wgc3RkUGlwZXNVVEY4ID0gdHJ1ZTsKKwogICAgIC8vIENvbGxlY3QgdGhlIGlucHV0IGZpbGVzIHVzZWQgdG8gZ2VuZXJhdGUgYWxsIHRhcmdldHMgaW4gdGhpcwogICAgIC8vIHByb2plY3QuCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpc3RGaWxlczsKQEAgLTE2MCw3ICsxNjMsNyBAQAogICAgICAgbGcuQWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAogICAgICAgICBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VULCBieXByb2R1Y3RzLCBub19kZXBlbmRzLAogICAgICAgICB2ZXJpZnlDb21tYW5kTGluZXMsIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBSRV9CVUlMRCwKLSAgICAgICAgIkNoZWNraW5nIEZpbGUgR2xvYnMiLCBub193b3JraW5nX2RpcmVjdG9yeSwgZmFsc2UpOworICAgICAgICAiQ2hlY2tpbmcgRmlsZSBHbG9icyIsIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCBzdGRQaXBlc1VURjgpOwogCiAgICAgICAvLyBFbnN1cmUgWkVST19DSEVDSyBhbHdheXMgcnVucyBpbiBWaXN1YWwgU3R1ZGlvIHVzaW5nIE1TQnVpbGQsCiAgICAgICAvLyBvdGhlcndpc2UgdGhlIHByZWJ1aWxkIGNvbW1hbmQgd2lsbCBub3QgYmUgcnVuLgpAQCAtMTkyLDcgKzE5NSw4IEBACiAgICAgaWYgKGNtU291cmNlRmlsZSogZmlsZSA9IGxnLkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKICAgICAgICAgICBzdGFtcHMsIG5vX2J5cHJvZHVjdHMsIGxpc3RGaWxlcywgbm9fbWFpbl9kZXBlbmRlbmN5LAogICAgICAgICAgIG5vX2ltcGxpY2l0X2RlcGVuZHMsIGNvbW1hbmRMaW5lcywgIkNoZWNraW5nIEJ1aWxkIFN5c3RlbSIsCi0gICAgICAgICAgbm9fd29ya2luZ19kaXJlY3RvcnksIHRydWUsIGZhbHNlKSkgeworICAgICAgICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiIiwgIiIsCisgICAgICAgICAgc3RkUGlwZXNVVEY4KSkgewogICAgICAgZ3QtPkFkZFNvdXJjZShmaWxlLT5SZXNvbHZlRnVsbFBhdGgoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJFcnJvciBhZGRpbmcgcnVsZSBmb3IgIiArIHN0YW1wc1swXSk7CkBAIC0yNDAsOSArMjQ0LDkgQEAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbWFwQ29uZmlnOwogICAgIGNvbnN0IGNoYXIqIGRzdENvbmZpZyA9IGkuY19zdHIoKTsKICAgICBpZiAodGFyZ2V0LkdldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiKSkgewotICAgICAgaWYgKGNvbnN0IGNoYXIqIG0gPSB0YXJnZXQuR2V0UHJvcGVydHkoIk1BUF9JTVBPUlRFRF9DT05GSUdfIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoaSkpKSB7Ci0gICAgICAgIGNtRXhwYW5kTGlzdChtLCBtYXBDb25maWcpOworICAgICAgaWYgKGNtUHJvcCBtID0gdGFyZ2V0LkdldFByb3BlcnR5KCJNQVBfSU1QT1JURURfQ09ORklHXyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShpKSkpIHsKKyAgICAgICAgY21FeHBhbmRMaXN0KCptLCBtYXBDb25maWcpOwogICAgICAgICBpZiAoIW1hcENvbmZpZy5lbXB0eSgpKSB7CiAgICAgICAgICAgZHN0Q29uZmlnID0gbWFwQ29uZmlnWzBdLmNfc3RyKCk7CiAgICAgICAgIH0KQEAgLTI3NSwyMyArMjc5LDMxIEBACiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvcjo6TmVlZHNEZXBsb3koCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0JiB0YXJnZXQsIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3QKIHsKLSAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUgPSB0YXJnZXQuR2V0VHlwZSgpOwotICBib29sIG5vRGVwbG95ID0gRGVwbG95SW5oaWJpdGVkKHRhcmdldCwgY29uZmlnKTsKLSAgcmV0dXJuICFub0RlcGxveSAmJgotICAgICh0eXBlID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSB8fAotICAgICB0eXBlID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpICYmCi0gICAgdGhpcy0+VGFyZ2V0U3lzdGVtU3VwcG9ydHNEZXBsb3ltZW50KCk7Ci19Ci0KLWJvb2wgY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yOjpEZXBsb3lJbmhpYml0ZWQoCi0gIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0JiB0YXJnZXQsIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3QKLXsKLSAgYm9vbCByVmFsID0gZmFsc2U7Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wID0gdGFyZ2V0LkdldFByb3BlcnR5KCJWU19OT19TT0xVVElPTl9ERVBMT1kiKSkgewotICAgIHJWYWwgPSBjbUlzT24oCi0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKHByb3AsIHRhcmdldC5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKSk7CisgIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSBjb25zdCB0eXBlID0gdGFyZ2V0LkdldFR5cGUoKTsKKyAgaWYgKHR5cGUgIT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFICYmCisgICAgICB0eXBlICE9IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHsKKyAgICAvLyBkZXBsb3ltZW50IG9ubHkgdmFsaWQgb24gZXhlY3V0YWJsZXMgYW5kIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHJldHVybiByVmFsOworCisgIGlmIChjbVByb3AgcHJvcCA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiVlNfU09MVVRJT05fREVQTE9ZIikpIHsKKyAgICAvLyBJZiBzZXQsIGl0IGRpY3RhdGVzIGJlaGF2aW9yCisgICAgcmV0dXJuIGNtSXNPbigKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKnByb3AsIHRhcmdldC5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKSk7CisgIH0KKworICAvLyBUbyBiZSBkZXByZWNhdGVkLCBkaXNhYmxlIGRlcGxveW1lbnQgZXZlbiBpZiB0YXJnZXQgc3VwcG9ydHMgaXQuCisgIGlmIChjbVByb3AgcHJvcCA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiVlNfTk9fU09MVVRJT05fREVQTE9ZIikpIHsKKyAgICBpZiAoY21Jc09uKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKnByb3AsIHRhcmdldC5Mb2NhbEdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKSkpIHsKKyAgICAgIC8vIElmIHRydWUsIGFsd2F5cyBkaXNhYmxlIGRlcGxveW1lbnQKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICAvLyBMZWdhY3kgYmVoYXZpb3IsIGVuYWJsZWQgZGVwbG95bWVudCBiYXNlZCBvbiAnaGFyZC1jb2RlZCcgdGFyZ2V0CisgIC8vIHBsYXRmb3Jtcy4KKyAgcmV0dXJuIHRoaXMtPlRhcmdldFN5c3RlbVN1cHBvcnRzRGVwbG95bWVudCgpOwogfQogCiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvcjo6VGFyZ2V0U3lzdGVtU3VwcG9ydHNEZXBsb3ltZW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuaAppbmRleCA4ZjhlMzNiLi42Y2U2N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5oCkBAIC01NywxMCArNTcsNiBAQAogICB2aXJ0dWFsIGJvb2wgTmVlZHNEZXBsb3koY21HZW5lcmF0b3JUYXJnZXQgY29uc3QmIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3Q7CiAKLSAgLyoqIFJldHVybnMgdHJ1ZSBpZiBkZXBsb3ltZW50IGhhcyBiZWVuIGRpc2FibGVkIGluIGNtYWtlIGZpbGUuICovCi0gIGJvb2wgRGVwbG95SW5oaWJpdGVkKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0JiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3Q7Ci0KICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN5c3RlbSBzdXBwb3J0IGRlYnVnZ2luZyBkZXBsb3ltZW50LiAqLwogICB2aXJ0dWFsIGJvb2wgVGFyZ2V0U3lzdGVtU3VwcG9ydHNEZXBsb3ltZW50KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuY3h4CmluZGV4IDI5ZDNmMWEuLmIzMWQwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmN4eApAQCAtNTA4LDkgKzUwOCw5IEBACiBzdGQ6OnN0cmluZyBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6R2V0U3RhcnR1cFByb2plY3ROYW1lKAogICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiByb290KSBjb25zdAogewotICBjb25zdCBjaGFyKiBuID0gcm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0UHJvcGVydHkoIlZTX1NUQVJUVVBfUFJPSkVDVCIpOwotICBpZiAobiAmJiAqbikgewotICAgIHN0ZDo6c3RyaW5nIHN0YXJ0dXAgPSBuOworICBjbVByb3AgbiA9IHJvb3QtPkdldE1ha2VmaWxlKCktPkdldFByb3BlcnR5KCJWU19TVEFSVFVQX1BST0pFQ1QiKTsKKyAgaWYgKGNtTm9uZW1wdHkobikpIHsKKyAgICBzdGQ6OnN0cmluZyBzdGFydHVwID0gKm47CiAgICAgaWYgKHRoaXMtPkZpbmRUYXJnZXQoc3RhcnR1cCkpIHsKICAgICAgIHJldHVybiBzdGFydHVwOwogICAgIH0gZWxzZSB7CkBAIC04MDksOSArODA5LDkgQEAKICAgLy8gVGhpcyBhbGxvd3MgdGhlIHByb2plY3QgdG8gY29udHJvbCB0aGUgbGFuZ3VhZ2UgY2hvaWNlIGluCiAgIC8vIGEgdGFyZ2V0IHdpdGggbm9uZSBvZiBpdHMgb3duIHNvdXJjZXMsIGUuZy4gd2hlbiBhbHNvIHVzaW5nCiAgIC8vIG9iamVjdCBsaWJyYXJpZXMuCi0gIGNvbnN0IGNoYXIqIGxpbmtMYW5nID0gZ3QtPkdldFByb3BlcnR5KCJMSU5LRVJfTEFOR1VBR0UiKTsKLSAgaWYgKGxpbmtMYW5nICYmICpsaW5rTGFuZykgewotICAgIGxhbmd1YWdlcy5pbnNlcnQobGlua0xhbmcpOworICBjbVByb3AgbGlua0xhbmcgPSBndC0+R2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIpOworICBpZiAoY21Ob25lbXB0eShsaW5rTGFuZykpIHsKKyAgICBsYW5ndWFnZXMuaW5zZXJ0KCpsaW5rTGFuZyk7CiAgIH0KIAogICAvLyBJbnRlbCBGb3J0cmFuIC52ZnByb2ogZmlsZXMgZG8gc3VwcG9ydCB0aGUgcmVzb3VyY2UgY29tcGlsZXIuCkBAIC05MzMsNyArOTMzLDcgQEAKICAgICB7IGNtYWtlQ29tbWFuZCwgIi1FIiwgIl9fY3JlYXRlX2RlZiIsIG1kaS0+RGVmRmlsZSwgb2Jqc19maWxlIH0pOwogICBjbUN1c3RvbUNvbW1hbmQgY29tbWFuZChvdXRwdXRzLCBlbXB0eSwgZW1wdHksIGNvbW1hbmRMaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3QtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0QmFja3RyYWNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJBdXRvIGJ1aWxkIGRsbCBleHBvcnRzIiwgIi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkF1dG8gYnVpbGQgZGxsIGV4cG9ydHMiLCAiLiIsIHRydWUpOwogICBjb21tYW5kcy5wdXNoX2JhY2soc3RkOjptb3ZlKGNvbW1hbmQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5jeHgKaW5kZXggMTNhZTMyYS4uZTJlMDQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IuY3h4CkBAIC0xMDAsNiArMTAwLDI0IEBACiAgIHJldHVybiAiIjsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIFZTVmVyc2lvblRvQW5kcm9pZFRvb2xzZXQoCisgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWU1ZlcnNpb24gdikKK3sKKyAgc3dpdGNoICh2KSB7CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlM5OgorICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTA6CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxMToKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEyOgorICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTQ6CisgICAgICByZXR1cm4gIkNsYW5nXzNfOCI7CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNToKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE2OgorICAgICAgcmV0dXJuICJDbGFuZ181XzAiOworICB9CisgIHJldHVybiAiIjsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgdnMxNWdlbmVyYXRvck5hbWVbXSA9ICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTciOwogCiAvLyBNYXAgZ2VuZXJhdG9yIG5hbWUgd2l0aG91dCB5ZWFyIHRvIG5hbWUgd2l0aCB5ZWFyLgpAQCAtMjg0LDYgKzMwMiw3IEBACiAgIHRoaXMtPlZlcnNpb24gPSB2ZXJzaW9uOwogICB0aGlzLT5FeHByZXNzRWRpdGlvbiA9IGZhbHNlOwogICB0aGlzLT5EZWZhdWx0UGxhdGZvcm1Ub29sc2V0ID0gVlNWZXJzaW9uVG9Ub29sc2V0KHRoaXMtPlZlcnNpb24pOworICB0aGlzLT5EZWZhdWx0QW5kcm9pZFRvb2xzZXQgPSBWU1ZlcnNpb25Ub0FuZHJvaWRUb29sc2V0KHRoaXMtPlZlcnNpb24pOwogICB0aGlzLT5EZWZhdWx0Q0xGbGFnVGFibGVOYW1lID0gVlNWZXJzaW9uVG9Ub29sc2V0KHRoaXMtPlZlcnNpb24pOwogICB0aGlzLT5EZWZhdWx0Q1NoYXJwRmxhZ1RhYmxlTmFtZSA9IFZTVmVyc2lvblRvVG9vbHNldCh0aGlzLT5WZXJzaW9uKTsKICAgdGhpcy0+RGVmYXVsdExpbmtGbGFnVGFibGVOYW1lID0gVlNWZXJzaW9uVG9Ub29sc2V0KHRoaXMtPlZlcnNpb24pOwpAQCAtMzY2LDYgKzM4NSwxMiBAQAogICByZXR1cm4gdnNTZXR1cEFQSUhlbHBlci5HZXRWU0luc3RhbmNlSW5mbyhkaXIpOwogfQogCitib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpHZXRWU0luc3RhbmNlVmVyc2lvbigKKyAgdW5zaWduZWQgbG9uZyBsb25nJiB2c0luc3RhbmNlVmVyc2lvbikgY29uc3QKK3sKKyAgcmV0dXJuIHZzU2V0dXBBUElIZWxwZXIuR2V0VlNJbnN0YW5jZVZlcnNpb24odnNJbnN0YW5jZVZlcnNpb24pOworfQorCiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpJc0RlZmF1bHRUb29sc2V0KAogICBjb25zdCBzdGQ6OnN0cmluZyYgdmVyc2lvbikgY29uc3QKIHsKQEAgLTM4Nyw2ICs0MTIsNDAgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpJc1N0ZE91dEVuY29kaW5nU3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgLy8gU3VwcG9ydGVkIGZyb20gVmlzdWFsIFN0dWRpbyAxNi43IFByZXZpZXcgMy4KKyAgaWYgKHRoaXMtPlZlcnNpb24gPiBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlNWZXJzaW9uOjpWUzE2KSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKHRoaXMtPlZlcnNpb24gPCBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlNWZXJzaW9uOjpWUzE2KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCB2c0luc3RhbmNlVmVyc2lvbjE2XzdfUDIgPSA0NTAzNjMxNjY2NjEwMjEyOworICB1bnNpZ25lZCBsb25nIGxvbmcgdnNJbnN0YW5jZVZlcnNpb247CisgIHJldHVybiAodGhpcy0+R2V0VlNJbnN0YW5jZVZlcnNpb24odnNJbnN0YW5jZVZlcnNpb24pICYmCisgICAgICAgICAgdnNJbnN0YW5jZVZlcnNpb24gPiB2c0luc3RhbmNlVmVyc2lvbjE2XzdfUDIpOworfQorCitjb25zdCBjaGFyKgorY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3I6OkdldEFuZHJvaWRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpCisgIGNvbnN0Cit7CisgIHN3aXRjaCAodGhpcy0+VmVyc2lvbikgeworICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTOToKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEwOgorICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTE6CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxMjoKKyAgICAgIHJldHVybiAiIjsKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE0OgorICAgICAgcmV0dXJuICIyLjAiOworICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTU6CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNjoKKyAgICAgIHJldHVybiAiMy4wIjsKKyAgfQorICByZXR1cm4gIiI7Cit9CisKIHN0ZDo6c3RyaW5nIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpHZXRBdXhpbGlhcnlUb29sc2V0KCkgY29uc3QKIHsKICAgY29uc3QgY2hhciogdmVyc2lvbiA9IHRoaXMtPkdldFBsYXRmb3JtVG9vbHNldFZlcnNpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKaW5kZXggYWJiNjA5NS4uZDViODMzNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKQEAgLTI5LDkgKzI5LDE1IEBACiAKICAgYm9vbCBHZXRWU0luc3RhbmNlKHN0ZDo6c3RyaW5nJiBkaXIpIGNvbnN0OwogCisgIGJvb2wgR2V0VlNJbnN0YW5jZVZlcnNpb24odW5zaWduZWQgbG9uZyBsb25nJiB2c0luc3RhbmNlVmVyc2lvbikgY29uc3Q7CisKICAgYm9vbCBJc0RlZmF1bHRUb29sc2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB2ZXJzaW9uKSBjb25zdCBvdmVycmlkZTsKICAgc3RkOjpzdHJpbmcgR2V0QXV4aWxpYXJ5VG9vbHNldCgpIGNvbnN0IG92ZXJyaWRlOwogCisgIGJvb2wgSXNTdGRPdXRFbmNvZGluZ1N1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgIGNvbnN0IGNoYXIqIEdldEFuZHJvaWRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpIGNvbnN0IG92ZXJyaWRlOworCiBwcm90ZWN0ZWQ6CiAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKAogICAgIFZTVmVyc2lvbiB2ZXJzaW9uLCBjbWFrZSogY20sIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3IuY3h4CmluZGV4IDMwOGRkZGEuLmQ2YTdhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvci5jeHgKQEAgLTE5LDcgKzE5LDcgQEAKICNlbmRpZgogICB0aGlzLT5Ub29sU3VwcG9ydHNDb2xvciA9IHRydWU7CiAgIHRoaXMtPk5lZWRTeW1ib2xpY01hcmsgPSB0cnVlOwotICB0aGlzLT5FbXB0eVJ1bGVIYWNrQ29tbWFuZCA9ICJAY2QgLiI7CisgIHRoaXMtPkVtcHR5UnVsZUhhY2tDb21tYW5kID0gIkAlbnVsbCI7CiAjaWZkZWYgX1dJTjMyCiAgIGNtLT5HZXRTdGF0ZSgpLT5TZXRXaW5kb3dzU2hlbGwodHJ1ZSk7CiAjZW5kaWYKQEAgLTQ0LDYgKzQ0LDE2IEBACiAgIHRoaXMtPmNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6RW5hYmxlTGFuZ3VhZ2UobCwgbWYsIG9wdGlvbmFsKTsKIH0KIAorYm9vbCBjbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yOjpTZXRTeXN0ZW1OYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKQoreworICBpZiAobWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9TWVNURU1fUFJPQ0VTU09SIikgPT0gIkk4NiIpIHsKKyAgICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX0NDIiwgIndjbCIpOworICAgIG1mLT5BZGREZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfQ1hYIiwgIndjbCIpOworICB9CisgIHJldHVybiB0aGlzLT5jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OlNldFN5c3RlbU5hbWUocywgbWYpOworfQorCiB2b2lkIGNtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3I6OkdldERvY3VtZW50YXRpb24oCiAgIGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvci5oCmluZGV4IGMwZGFmOGEuLmM0NzEyN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3IuaApAQCAtNDEsNiArNDEsOSBAQAogICAvKiogR2V0IHRoZSBkb2N1bWVudGF0aW9uIGVudHJ5IGZvciB0aGlzIGdlbmVyYXRvci4gICovCiAgIHN0YXRpYyB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KTsKIAorICAvKiogVGVsbCB0aGUgZ2VuZXJhdG9yIGFib3V0IHRoZSB0YXJnZXQgc3lzdGVtLiAgKi8KKyAgYm9vbCBTZXRTeXN0ZW1OYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBzLCBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisKICAgLyoqCiAgICAqIFRyeSB0byBkZXRlcm1pbmUgc3lzdGVtIGluZm9ybWF0aW9uIHN1Y2ggYXMgc2hhcmVkIGxpYnJhcnkKICAgICogZXh0ZW5zaW9uLCBwdGhyZWFkcywgYnl0ZSBvcmRlciBldGMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5jeHgKaW5kZXggZTAwMDVhNC4uZTU0ZGU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsWENvZGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmN4eApAQCAtOCwxMyArOCwxNCBAQAogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW9tYW5pcD4KICNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiY21Tb3VyY2VHcm91cC5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21UYXJnZXQuaCIKICNpbmNsdWRlICJjbVhDb2RlMjFPYmplY3QuaCIKQEAgLTE3MSw2ICsxNzMsNyBAQAogCiAgIHRoaXMtPlJvb3RPYmplY3QgPSBudWxscHRyOwogICB0aGlzLT5NYWluR3JvdXBDaGlsZHJlbiA9IG51bGxwdHI7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwID0gbnVsbHB0cjsKICAgdGhpcy0+Q3VycmVudE1ha2VmaWxlID0gbnVsbHB0cjsKICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yID0gbnVsbHB0cjsKICAgdGhpcy0+WGNvZGVCdWlsZENvbW1hbmRJbml0aWFsaXplZCA9IGZhbHNlOwpAQCAtMjcwLDYgKzI3MywxMyBAQAogICByZXR1cm4gbWFrZVByb2dyYW07CiB9CiAKK2Jvb2wgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6U2V0U3lzdGVtTmFtZShzdGQ6OnN0cmluZyBjb25zdCYgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBtZikKK3sKKyAgdGhpcy0+U3lzdGVtTmFtZSA9IHM7CisgIHJldHVybiB0aGlzLT5jbUdsb2JhbEdlbmVyYXRvcjo6U2V0U3lzdGVtTmFtZShzLCBtZik7Cit9CisKIGJvb2wgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6U2V0R2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBidWlsZCwgY21NYWtlZmlsZSogbWYpCiB7CkBAIC0zNjEsNyArMzcxLDcgQEAKICAgICBzdGQ6OnN0cmluZyBwcm9qZWN0QXJnID0gY21TdHJDYXQocHJvamVjdE5hbWUsICIueGNvZGVwcm9qIik7CiAgICAgbWFrZUNvbW1hbmQuQWRkKHByb2plY3RBcmcpOwogICB9Ci0gIGlmIChjbUNvbnRhaW5zKHRhcmdldE5hbWVzLCAiY2xlYW4iKSkgeworICBpZiAoY206OmNvbnRhaW5zKHRhcmdldE5hbWVzLCAiY2xlYW4iKSkgewogICAgIG1ha2VDb21tYW5kLkFkZCgiY2xlYW4iKTsKICAgICBtYWtlQ29tbWFuZC5BZGQoIi10YXJnZXQiLCAiQUxMX0JVSUxEIik7CiAgIH0gZWxzZSB7CkBAIC00NjcsNiArNDc3LDkgQEAKICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBjYWNoZSB0aGUgZW5hYmxlZCBsYW5ndWFnZXMgZm9yIHNvdXJjZSBmaWxlIHR5cGUgcXVlcmllcworICAgIHRoaXMtPkdldEVuYWJsZWRMYW5ndWFnZXModGhpcy0+RW5hYmxlZExhbmdzKTsKKwogICAgIHRoaXMtPlNldEdlbmVyYXRpb25Sb290KHJvb3QpOwogICAgIC8vIG5vdyBjcmVhdGUgdGhlIHByb2plY3QKICAgICB0aGlzLT5PdXRwdXRYQ29kZVByb2plY3Qocm9vdCwga2V5VmFsLnNlY29uZCk7CkBAIC02NDIsNyArNjU1LDggQEAKICAgICAgICAgICAgICAgICAgPDwgIlxuIjsKIH0KIAotc3RhdGljIGJvb2wgb2JqZWN0SWRMZXNzVGhhbihjbVhDb2RlT2JqZWN0KiBsLCBjbVhDb2RlT2JqZWN0KiByKQorc3RhdGljIGJvb2wgb2JqZWN0SWRMZXNzVGhhbihjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4mIGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0PiYgcikKIHsKICAgcmV0dXJuIGwtPkdldElkKCkgPCByLT5HZXRJZCgpOwogfQpAQCAtNjU2LDkgKzY3MCw2IEBACiB2b2lkIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNsZWFyWENvZGVPYmplY3RzKCkKIHsKICAgdGhpcy0+VGFyZ2V0RG9uZVNldC5jbGVhcigpOwotICBmb3IgKGF1dG8mIG9iaiA6IHRoaXMtPlhDb2RlT2JqZWN0cykgewotICAgIGRlbGV0ZSBvYmo7Ci0gIH0KICAgdGhpcy0+WENvZGVPYmplY3RzLmNsZWFyKCk7CiAgIHRoaXMtPlhDb2RlT2JqZWN0SURzLmNsZWFyKCk7CiAgIHRoaXMtPlhDb2RlT2JqZWN0TWFwLmNsZWFyKCk7CkBAIC02NjYsOSArNjc3LDEwIEBACiAgIHRoaXMtPkdyb3VwTmFtZU1hcC5jbGVhcigpOwogICB0aGlzLT5UYXJnZXRHcm91cC5jbGVhcigpOwogICB0aGlzLT5GaWxlUmVmcy5jbGVhcigpOworICB0aGlzLT5FeHRlcm5hbExpYlJlZnMuY2xlYXIoKTsKIH0KIAotdm9pZCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjphZGRPYmplY3QoY21YQ29kZU9iamVjdCogb2JqKQordm9pZCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjphZGRPYmplY3Qoc3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+IG9iaikKIHsKICAgaWYgKG9iai0+R2V0VHlwZSgpID09IGNtWENvZGVPYmplY3Q6Ok9CSkVDVCkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCA9IG9iai0+R2V0SWQoKTsKQEAgLTY4MywyMiArNjk1LDI0IEBACiAgICAgdGhpcy0+WENvZGVPYmplY3RJRHMuaW5zZXJ0KGlkKTsKICAgfQogCi0gIHRoaXMtPlhDb2RlT2JqZWN0cy5wdXNoX2JhY2sob2JqKTsKKyAgdGhpcy0+WENvZGVPYmplY3RzLnB1c2hfYmFjayhzdGQ6Om1vdmUob2JqKSk7CiB9CiAKIGNtWENvZGVPYmplY3QqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZU9iamVjdCgKICAgY21YQ29kZU9iamVjdDo6UEJYVHlwZSBwdHlwZSkKIHsKLSAgY21YQ29kZU9iamVjdCogb2JqID0gbmV3IGNtWENvZGUyMU9iamVjdChwdHlwZSwgY21YQ29kZU9iamVjdDo6T0JKRUNUKTsKLSAgdGhpcy0+YWRkT2JqZWN0KG9iaik7Ci0gIHJldHVybiBvYmo7CisgIGF1dG8gb2JqID0gY206Om1ha2VfdW5pcXVlPGNtWENvZGUyMU9iamVjdD4ocHR5cGUsIGNtWENvZGVPYmplY3Q6Ok9CSkVDVCk7CisgIGF1dG8gcHRyID0gb2JqLmdldCgpOworICB0aGlzLT5hZGRPYmplY3Qoc3RkOjptb3ZlKG9iaikpOworICByZXR1cm4gcHRyOwogfQogCiBjbVhDb2RlT2JqZWN0KiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpDcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6VHlwZSB0eXBlKQogewotICBjbVhDb2RlT2JqZWN0KiBvYmogPSBuZXcgY21YQ29kZU9iamVjdChjbVhDb2RlT2JqZWN0OjpOb25lLCB0eXBlKTsKLSAgdGhpcy0+YWRkT2JqZWN0KG9iaik7Ci0gIHJldHVybiBvYmo7CisgIGF1dG8gb2JqID0gY206Om1ha2VfdW5pcXVlPGNtWENvZGVPYmplY3Q+KGNtWENvZGVPYmplY3Q6Ok5vbmUsIHR5cGUpOworICBhdXRvIHB0ciA9IG9iai5nZXQoKTsKKyAgdGhpcy0+YWRkT2JqZWN0KHN0ZDo6bW92ZShvYmopKTsKKyAgcmV0dXJuIHB0cjsKIH0KIAogY21YQ29kZU9iamVjdCogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q3JlYXRlU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQpAQCAtNzMyLDcgKzc0Niw3IEBACiAgIHJldHVybiBrZXk7CiB9CiAKLWNtWENvZGVPYmplY3QqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZVhDb2RlU291cmNlRmlsZUZyb21QYXRoKAorY21YQ29kZU9iamVjdCogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q3JlYXRlWENvZGVCdWlsZEZpbGVGcm9tUGF0aCgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxwYXRoLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAogICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY21Tb3VyY2VGaWxlKiBzZikKIHsKQEAgLTc2OCwxMSArNzgyLDE1IEBACiAgIFhDb2RlR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyJiBvcGVyYXRvcj0oCiAgICAgWENvZGVHZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXIgY29uc3QmKSA9IGRlbGV0ZTsKIAotICB1c2luZyBjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlcjo6RXZhbHVhdGU7Ci0KICAgY29uc3Qgc3RkOjpzdHJpbmcmIEV2YWx1YXRlKGNvbnN0IGNoYXIqIGV4cHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHkpCiAgIHsKKyAgICByZXR1cm4gdGhpcy0+RXZhbHVhdGUoc3RkOjpzdHJpbmcoZXhwcmVzc2lvbiA/IGV4cHJlc3Npb24gOiAiIiksIHByb3BlcnR5KTsKKyAgfQorCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBFdmFsdWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSkKKyAgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9jZXNzZWQgPQogICAgICAgdGhpcy0+Y21HZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXI6OkV2YWx1YXRlKGV4cHJlc3Npb24sIHByb3BlcnR5KTsKICAgICBpZiAodGhpcy0+Q29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uLT5HZXRIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKQEAgLTgwMyw3ICs4MjEsNyBAQAogCiAgIC8vIEFkZCBmbGFncyBmcm9tIHRhcmdldCBhbmQgc291cmNlIGZpbGUgcHJvcGVydGllcy4KICAgc3RkOjpzdHJpbmcgZmxhZ3M7Ci0gIGNvbnN0IGNoYXIqIHNyY2ZtdCA9IHNmLT5HZXRQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHNyY2ZtdCA9IHNmLT5HZXRTYWZlUHJvcGVydHkoIkZvcnRyYW5fRk9STUFUIik7CiAgIHN3aXRjaCAoY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5Gb3JtYXQoc3JjZm10KSkgewogICAgIGNhc2UgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5Gb3JtYXRGaXhlZDoKICAgICAgIGZsYWdzID0gIi1maXhlZCAiICsgZmxhZ3M7CkBAIC04MTQsMjMgKzgzMiwzMSBAQAogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQorCisgIC8vIGV4cGxpY2l0bHkgYWRkIHRoZSBleHBsaWNpdCBsYW5ndWFnZSBmbGFnIGJlZm9yZSBhbnkgb3RoZXIgZmxhZworICAvLyB0aGlzIHdheSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXIgZmxhZ3MgaXMgbWFpbnRhaW5lZAorICBpZiAoc2YtPkdldFByb3BlcnR5KCJMQU5HVUFHRSIpKSB7CisgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5BcHBlbmRGZWF0dXJlT3B0aW9ucyhmbGFncywgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFWFBMSUNJVF9MQU5HVUFHRSIpOworICB9CisKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9GTEFHUygiQ09NUElMRV9GTEFHUyIpOwotICBpZiAoY29uc3QgY2hhciogY2ZsYWdzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7Ci0gICAgbGctPkFwcGVuZEZsYWdzKGZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUykpOworICBpZiAoY21Qcm9wIGNmbGFncyA9IHNmLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgeworICAgIGxnLT5BcHBlbmRGbGFncyhmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2ZsYWdzLCBDT01QSUxFX0ZMQUdTKSk7CiAgIH0KICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvcHRpb25zID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKKyAgaWYgKGNtUHJvcCBjb3B0aW9ucyA9IHNmLT5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CiAgICAgbGctPkFwcGVuZENvbXBpbGVPcHRpb25zKAotICAgICAgZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOworICAgICAgZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvcHRpb25zLCBDT01QSUxFX09QVElPTlMpKTsKICAgfQogCiAgIC8vIEFkZCBwZXItc291cmNlIGRlZmluaXRpb25zLgogICBCdWlsZE9iamVjdExpc3RPclN0cmluZyBmbGFnc0J1aWxkKHRoaXMsIGZhbHNlKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9ERUZJTklUSU9OUygiQ09NUElMRV9ERUZJTklUSU9OUyIpOwotICBpZiAoY29uc3QgY2hhciogY29tcGlsZV9kZWZzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CisgIGlmIChjbVByb3AgY29tcGlsZV9kZWZzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CiAgICAgdGhpcy0+QXBwZW5kRGVmaW5lcygKICAgICAgIGZsYWdzQnVpbGQsCi0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykuY19zdHIoKSwKKyAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykuY19zdHIoKSwKICAgICAgIHRydWUpOwogICB9CiAKQEAgLTg0OCwxNSArODc0LDE1IEBACiAgIC8vIEFkZCBwZXItc291cmNlIGluY2x1ZGUgZGlyZWN0b3JpZXMuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKICAgY29uc3Qgc3RkOjpzdHJpbmcgSU5DTFVERV9ESVJFQ1RPUklFUygiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwotICBpZiAoY29uc3QgY2hhciogY2luY2x1ZGVzID0gc2YtPkdldFByb3BlcnR5KElOQ0xVREVfRElSRUNUT1JJRVMpKSB7CisgIGlmIChjbVByb3AgY2luY2x1ZGVzID0gc2YtPkdldFByb3BlcnR5KElOQ0xVREVfRElSRUNUT1JJRVMpKSB7CiAgICAgbGctPkFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcygKLSAgICAgIGluY2x1ZGVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNpbmNsdWRlcywgSU5DTFVERV9ESVJFQ1RPUklFUyksCisgICAgICBpbmNsdWRlcywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKSwKICAgICAgICpzZik7CiAgIH0KICAgbGctPkFwcGVuZEZsYWdzKGZsYWdzLCBsZy0+R2V0SW5jbHVkZUZsYWdzKGluY2x1ZGVzLCBndGd0LCBsYW5nLCB0cnVlKSk7CiAKICAgY21YQ29kZU9iamVjdCogYnVpbGRGaWxlID0KLSAgICB0aGlzLT5DcmVhdGVYQ29kZVNvdXJjZUZpbGVGcm9tUGF0aChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCksIGd0Z3QsIGxhbmcsIHNmKTsKKyAgICB0aGlzLT5DcmVhdGVYQ29kZUJ1aWxkRmlsZUZyb21QYXRoKHNmLT5SZXNvbHZlRnVsbFBhdGgoKSwgZ3RndCwgbGFuZywgc2YpOwogCiAgIGNtWENvZGVPYmplY3QqIHNldHRpbmdzID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6OkFUVFJJQlVURV9HUk9VUCk7CiAgIHNldHRpbmdzLT5BZGRBdHRyaWJ1dGVJZk5vdEVtcHR5KCJDT01QSUxFUl9GTEFHUyIsCkBAIC04NzksMTAgKzkwNSwxMCBAQAogICB9CiAKICAgLy8gQWRkIHVzZXItc3BlY2lmaWVkIGZpbGUgYXR0cmlidXRlcy4KLSAgY29uc3QgY2hhciogZXh0cmFGaWxlQXR0cmlidXRlcyA9IHNmLT5HZXRQcm9wZXJ0eSgiWENPREVfRklMRV9BVFRSSUJVVEVTIik7CisgIGNtUHJvcCBleHRyYUZpbGVBdHRyaWJ1dGVzID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9GSUxFX0FUVFJJQlVURVMiKTsKICAgaWYgKGV4dHJhRmlsZUF0dHJpYnV0ZXMpIHsKICAgICAvLyBFeHBhbmQgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcy4KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXR0cmlidXRlcyA9IGNtRXhwYW5kZWRMaXN0KGV4dHJhRmlsZUF0dHJpYnV0ZXMpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdHRyaWJ1dGVzID0gY21FeHBhbmRlZExpc3QoKmV4dHJhRmlsZUF0dHJpYnV0ZXMpOwogCiAgICAgLy8gU3RvcmUgdGhlIGF0dHJpYnV0ZXMuCiAgICAgZm9yIChjb25zdCBhdXRvJiBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKSB7CkBAIC05MDQsMTkgKzkzMCw0NSBAQAogICAgICAgICAgICAgICIvQ01ha2VMaXN0cy50eHQiKTsKICAgY21Tb3VyY2VGaWxlKiBzcmNDTWFrZUxpc3RzID0gdGFyZ2V0LT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVTb3VyY2UoCiAgICAgbGlzdGZpbGUsIGZhbHNlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLSAgaWYgKCFjbUNvbnRhaW5zKHNvdXJjZXMsIHNyY0NNYWtlTGlzdHMpKSB7CisgIGlmICghY206OmNvbnRhaW5zKHNvdXJjZXMsIHNyY0NNYWtlTGlzdHMpKSB7CiAgICAgc291cmNlcy5wdXNoX2JhY2soc3JjQ01ha2VMaXN0cyk7CiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgR2V0U291cmNlY29kZVZhbHVlRnJvbUZpbGVFeHRlbnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIF9leHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGtlZXBMYXN0S25vd25GaWxlVHlwZSkKK2Jvb2wgSXNMaWJyYXJ5RXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlRXh0KQoreworICByZXR1cm4gKGZpbGVFeHQgPT0gIi5mcmFtZXdvcmsiIHx8IGZpbGVFeHQgPT0gIi5hIiB8fCBmaWxlRXh0ID09ICIubyIgfHwKKyAgICAgICAgICBmaWxlRXh0ID09ICIuZHlsaWIiIHx8IGZpbGVFeHQgPT0gIi50YmQiKTsKK30KK2Jvb2wgSXNMaWJyYXJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZVR5cGUpCit7CisgIHJldHVybiAoZmlsZVR5cGUgPT0gIndyYXBwZXIuZnJhbWV3b3JrIiB8fCBmaWxlVHlwZSA9PSAiYXJjaGl2ZS5hciIgfHwKKyAgICAgICAgICBmaWxlVHlwZSA9PSAiY29tcGlsZWQubWFjaC1vLm9iamZpbGUiIHx8CisgICAgICAgICAgZmlsZVR5cGUgPT0gImNvbXBpbGVkLm1hY2gtby5keWxpYiIgfHwKKyAgICAgICAgICBmaWxlVHlwZSA9PSAic291cmNlY29kZS50ZXh0LWJhc2VkLWR5bGliLWRlZmluaXRpb24iKTsKK30KKworc3RkOjpzdHJpbmcgR2V0RGlyZWN0b3J5VmFsdWVGcm9tRmlsZUV4dGVuc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZGlyRXh0KQoreworICBzdGQ6OnN0cmluZyBleHQgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UoZGlyRXh0KTsKKyAgaWYgKGV4dCA9PSAiZnJhbWV3b3JrIikgeworICAgIHJldHVybiAid3JhcHBlci5mcmFtZXdvcmsiOworICB9CisgIGlmIChleHQgPT0gInhjYXNzZXRzIikgeworICAgIHJldHVybiAiZm9sZGVyLmFzc2V0Y2F0YWxvZyI7CisgIH0KKyAgcmV0dXJuICJmb2xkZXIiOworfQorCitzdGQ6OnN0cmluZyBHZXRTb3VyY2Vjb2RlVmFsdWVGcm9tRmlsZUV4dGVuc2lvbigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIF9leHQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAorICBib29sJiBrZWVwTGFzdEtub3duRmlsZVR5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZW5hYmxlZF9sYW5ncykKIHsKICAgc3RkOjpzdHJpbmcgZXh0ID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKF9leHQpOwogICBzdGQ6OnN0cmluZyBzb3VyY2Vjb2RlID0gInNvdXJjZWNvZGUiOwogCiAgIGlmIChleHQgPT0gIm8iKSB7CisgICAga2VlcExhc3RLbm93bkZpbGVUeXBlID0gdHJ1ZTsKICAgICBzb3VyY2Vjb2RlID0gImNvbXBpbGVkLm1hY2gtby5vYmpmaWxlIjsKICAgfSBlbHNlIGlmIChleHQgPT0gInhjdGVzdCIpIHsKICAgICBzb3VyY2Vjb2RlID0gIndyYXBwZXIuY2ZidW5kbGUiOwpAQCAtOTI2LDkgKzk3OCw5IEBACiAgIH0gZWxzZSBpZiAoZXh0ID09ICJzdG9yeWJvYXJkIikgewogICAgIGtlZXBMYXN0S25vd25GaWxlVHlwZSA9IHRydWU7CiAgICAgc291cmNlY29kZSA9ICJmaWxlLnN0b3J5Ym9hcmQiOwotICB9IGVsc2UgaWYgKGV4dCA9PSAibW0iKSB7CisgIH0gZWxzZSBpZiAoZXh0ID09ICJtbSIgJiYgIWNtOjpjb250YWlucyhlbmFibGVkX2xhbmdzLCAiT0JKQ1hYIikpIHsKICAgICBzb3VyY2Vjb2RlICs9ICIuY3BwLm9iamNwcCI7Ci0gIH0gZWxzZSBpZiAoZXh0ID09ICJtIikgeworICB9IGVsc2UgaWYgKGV4dCA9PSAibSIgJiYgIWNtOjpjb250YWlucyhlbmFibGVkX2xhbmdzLCAiT0JKQyIpKSB7CiAgICAgc291cmNlY29kZSArPSAiLmMub2JqYyI7CiAgIH0gZWxzZSBpZiAoZXh0ID09ICJzd2lmdCIpIHsKICAgICBzb3VyY2Vjb2RlICs9ICIuc3dpZnQiOwpAQCAtOTYwLDYgKzEwMTIsMTQgQEAKICAgICBzb3VyY2Vjb2RlICs9ICIubWV0YWwiOwogICB9IGVsc2UgaWYgKGV4dCA9PSAibWlnIikgewogICAgIHNvdXJjZWNvZGUgKz0gIi5taWciOworICB9IGVsc2UgaWYgKGV4dCA9PSAidGJkIikgeworICAgIHNvdXJjZWNvZGUgKz0gIi50ZXh0LWJhc2VkLWR5bGliLWRlZmluaXRpb24iOworICB9IGVsc2UgaWYgKGV4dCA9PSAiYSIpIHsKKyAgICBrZWVwTGFzdEtub3duRmlsZVR5cGUgPSB0cnVlOworICAgIHNvdXJjZWNvZGUgPSAiYXJjaGl2ZS5hciI7CisgIH0gZWxzZSBpZiAoZXh0ID09ICJkeWxpYiIpIHsKKyAgICBrZWVwTGFzdEtub3duRmlsZVR5cGUgPSB0cnVlOworICAgIHNvdXJjZWNvZGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsKICAgfQogICAvLyBlbHNlCiAgIC8vICB7CkBAIC05NzYsNjIgKzEwMzYsODAgQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxwYXRoLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAogICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY21Tb3VyY2VGaWxlKiBzZikKIHsKLSAgc3RkOjpzdHJpbmcga2V5ID0gR2V0R3JvdXBNYXBLZXlGcm9tUGF0aCh0YXJnZXQsIGZ1bGxwYXRoKTsKLSAgY21YQ29kZU9iamVjdCogZmlsZVJlZiA9IHRoaXMtPkZpbGVSZWZzW2tleV07Ci0gIGlmICghZmlsZVJlZikgewotICAgIGZpbGVSZWYgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6UEJYRmlsZVJlZmVyZW5jZSk7Ci0gICAgZmlsZVJlZi0+U2V0Q29tbWVudChmdWxscGF0aCk7Ci0gICAgdGhpcy0+RmlsZVJlZnNba2V5XSA9IGZpbGVSZWY7Ci0gIH0KLSAgY21YQ29kZU9iamVjdCogZ3JvdXAgPSB0aGlzLT5Hcm91cE1hcFtrZXldOwotICBjbVhDb2RlT2JqZWN0KiBjaGlsZHJlbiA9IGdyb3VwLT5HZXRPYmplY3QoImNoaWxkcmVuIik7Ci0gIGlmICghY2hpbGRyZW4tPkhhc09iamVjdChmaWxlUmVmKSkgewotICAgIGNoaWxkcmVuLT5BZGRPYmplY3QoZmlsZVJlZik7Ci0gIH0KLSAgZmlsZVJlZi0+QWRkQXR0cmlidXRlKCJmaWxlRW5jb2RpbmciLCB0aGlzLT5DcmVhdGVTdHJpbmcoIjQiKSk7Ci0KICAgYm9vbCB1c2VMYXN0S25vd25GaWxlVHlwZSA9IGZhbHNlOwogICBzdGQ6OnN0cmluZyBmaWxlVHlwZTsKICAgaWYgKHNmKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGUgPSBzZi0+R2V0UHJvcGVydHkoIlhDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRSIpKSB7Ci0gICAgICBmaWxlVHlwZSA9IGU7Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBsID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRSIpKSB7CisgICAgaWYgKGNtUHJvcCBlID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUiKSkgeworICAgICAgZmlsZVR5cGUgPSAqZTsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCBsID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRSIpKSB7CiAgICAgICB1c2VMYXN0S25vd25GaWxlVHlwZSA9IHRydWU7Ci0gICAgICBmaWxlVHlwZSA9IGw7CisgICAgICBmaWxlVHlwZSA9ICpsOwogICAgIH0KICAgfQorICAvLyBNYWtlIGEgY29weSBzbyB0aGF0IHdlIGNhbiBvdmVycmlkZSBpdCBsYXRlcgorICBzdGQ6OnN0cmluZyBwYXRoID0gZnVsbHBhdGg7CisgIC8vIENvbXB1dGUgdGhlIGV4dGVuc2lvbiB3aXRob3V0IGxlYWRpbmcgJy4nLgorICBzdGQ6OnN0cmluZyBleHQgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24ocGF0aCk7CisgIGlmICghZXh0LmVtcHR5KCkpIHsKKyAgICBleHQgPSBleHQuc3Vic3RyKDEpOworICB9CiAgIGlmIChmaWxlVHlwZS5lbXB0eSgpKSB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgZXh0ZW5zaW9uIHdpdGhvdXQgbGVhZGluZyAnLicuCi0gICAgc3RkOjpzdHJpbmcgZXh0ID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVMYXN0RXh0ZW5zaW9uKGZ1bGxwYXRoKTsKLSAgICBpZiAoIWV4dC5lbXB0eSgpKSB7Ci0gICAgICBleHQgPSBleHQuc3Vic3RyKDEpOworICAgIC8vIElmIGZpbGUgaGFzIG5vIGV4dGVuc2lvbiBpdCdzIGVpdGhlciBhIHJhdyBleGVjdXRhYmxlIG9yIG1pZ2h0CisgICAgLy8gYmUgYSBkaXJlY3QgcmVmZXJlbmNlIHRvIGJpbmFyeSB3aXRoaW4gYSBmcmFtZXdvcmsgKGJhZCBwcmFjdGljZSEpCisgICAgLy8gc28gdGhpcyBpcyB3aGVyZSB3ZSBjaGFuZ2UgdGhlIHBhdGggdG8gdGhlIHBvaW50IHRvIGZyYW1ld29yaworICAgIC8vIGRpcmVjdG9yeS4KKyAgICBpZiAoZXh0LmVtcHR5KCkpIHsKKyAgICAgIGF1dG8gcGFyZW50RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0UGFyZW50RGlyZWN0b3J5KHBhdGgpOworICAgICAgYXV0byBwYXJlbnRFeHQgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24ocGFyZW50RGlyKTsKKyAgICAgIGlmIChwYXJlbnRFeHQgPT0gIi5mcmFtZXdvcmsiKSB7CisgICAgICAgIHBhdGggPSBwYXJlbnREaXI7CisgICAgICAgIGV4dCA9IHBhcmVudEV4dC5zdWJzdHIoMSk7CisgICAgICB9CiAgICAgfQotCiAgICAgLy8gSWYgZnVsbHBhdGggcmVmZXJlbmNlcyBhIGRpcmVjdG9yeSwgdGhlbiB3ZSBuZWVkIHRvIHNwZWNpZnkKICAgICAvLyBsYXN0S25vd25GaWxlVHlwZSBhcyBmb2xkZXIgaW4gb3JkZXIgZm9yIFhjb2RlIHRvIGJlIGFibGUgdG8KICAgICAvLyBvcGVuIHRoZSBjb250ZW50cyBvZiB0aGUgZm9sZGVyLgogICAgIC8vIChYY29kZSA0LjYgZG9lcyBub3QgbGlrZSBleHBsaWNpdEZpbGVUeXBlPWZvbGRlcikuCi0gICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShmdWxscGF0aCkpIHsKLSAgICAgIGZpbGVUeXBlID0gKGV4dCA9PSAieGNhc3NldHMiID8gImZvbGRlci5hc3NldGNhdGFsb2ciIDogImZvbGRlciIpOworICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkocGF0aCkpIHsKKyAgICAgIGZpbGVUeXBlID0gR2V0RGlyZWN0b3J5VmFsdWVGcm9tRmlsZUV4dGVuc2lvbihleHQpOwogICAgICAgdXNlTGFzdEtub3duRmlsZVR5cGUgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICBmaWxlVHlwZSA9Ci0gICAgICAgIEdldFNvdXJjZWNvZGVWYWx1ZUZyb21GaWxlRXh0ZW5zaW9uKGV4dCwgbGFuZywgdXNlTGFzdEtub3duRmlsZVR5cGUpOworICAgICAgZmlsZVR5cGUgPSBHZXRTb3VyY2Vjb2RlVmFsdWVGcm9tRmlsZUV4dGVuc2lvbigKKyAgICAgICAgZXh0LCBsYW5nLCB1c2VMYXN0S25vd25GaWxlVHlwZSwgdGhpcy0+RW5hYmxlZExhbmdzKTsKICAgICB9CiAgIH0KIAorICBzdGQ6OnN0cmluZyBrZXkgPSBHZXRHcm91cE1hcEtleUZyb21QYXRoKHRhcmdldCwgcGF0aCk7CisgIGNtWENvZGVPYmplY3QqIGZpbGVSZWYgPSB0aGlzLT5GaWxlUmVmc1trZXldOworICBpZiAoIWZpbGVSZWYpIHsKKyAgICBmaWxlUmVmID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6OlBCWEZpbGVSZWZlcmVuY2UpOworICAgIGZpbGVSZWYtPlNldENvbW1lbnQocGF0aCk7CisgICAgdGhpcy0+RmlsZVJlZnNba2V5XSA9IGZpbGVSZWY7CisgIH0KKyAgZmlsZVJlZi0+QWRkQXR0cmlidXRlKCJmaWxlRW5jb2RpbmciLCB0aGlzLT5DcmVhdGVTdHJpbmcoIjQiKSk7CiAgIGZpbGVSZWYtPkFkZEF0dHJpYnV0ZSh1c2VMYXN0S25vd25GaWxlVHlwZSA/ICJsYXN0S25vd25GaWxlVHlwZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImV4cGxpY2l0RmlsZVR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGZpbGVUeXBlKSk7Ci0KICAgLy8gU3RvcmUgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPlJlbGF0aXZlVG9Tb3VyY2UoZnVsbHBhdGgpOworICBpZiAoIUlzTGlicmFyeVR5cGUoZmlsZVR5cGUpKSB7CisgICAgcGF0aCA9IHRoaXMtPlJlbGF0aXZlVG9Tb3VyY2UocGF0aCk7CisgIH0KICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShwYXRoKTsKICAgY29uc3QgY2hhciogc291cmNlVHJlZSA9CiAgICAgY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkgPyAiPGFic29sdXRlPiIgOiAiU09VUkNFX1JPT1QiOwogICBmaWxlUmVmLT5BZGRBdHRyaWJ1dGUoIm5hbWUiLCB0aGlzLT5DcmVhdGVTdHJpbmcobmFtZSkpOwogICBmaWxlUmVmLT5BZGRBdHRyaWJ1dGUoInBhdGgiLCB0aGlzLT5DcmVhdGVTdHJpbmcocGF0aCkpOwogICBmaWxlUmVmLT5BZGRBdHRyaWJ1dGUoInNvdXJjZVRyZWUiLCB0aGlzLT5DcmVhdGVTdHJpbmcoc291cmNlVHJlZSkpOworCisgIGNtWENvZGVPYmplY3QqIGdyb3VwID0gdGhpcy0+R3JvdXBNYXBba2V5XTsKKyAgaWYgKCFncm91cCAmJiBJc0xpYnJhcnlUeXBlKGZpbGVUeXBlKSkgeworICAgIGdyb3VwID0gdGhpcy0+RnJhbWV3b3JrR3JvdXA7CisgICAgdGhpcy0+R3JvdXBNYXBba2V5XSA9IGdyb3VwOworICB9CisgIGNtWENvZGVPYmplY3QqIGNoaWxkcmVuID0gZ3JvdXAtPkdldE9iamVjdCgiY2hpbGRyZW4iKTsKKyAgaWYgKCFjaGlsZHJlbi0+SGFzT2JqZWN0KGZpbGVSZWYpKSB7CisgICAgY2hpbGRyZW4tPkFkZE9iamVjdChmaWxlUmVmKTsKKyAgfQogICByZXR1cm4gZmlsZVJlZjsKIH0KIApAQCAtMTA2NCwxMSArMTE0Miw4IEBACiAgIHRoaXMtPkN1cnJlbnRNYWtlZmlsZSA9IGdlbi0+R2V0TWFrZWZpbGUoKTsKIAogICAvLyBTZWxlY3QgdGhlIGN1cnJlbnQgc2V0IG9mIGNvbmZpZ3VyYXRpb24gdHlwZXMuCi0gIHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMuY2xlYXIoKTsKLSAgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyh0aGlzLT5DdXJyZW50Q29uZmlndXJhdGlvblR5cGVzKTsKLSAgaWYgKHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMuZW1wdHkoKSkgewotICAgIHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMuZW1wbGFjZV9iYWNrKCk7Ci0gIH0KKyAgdGhpcy0+Q3VycmVudENvbmZpZ3VyYXRpb25UeXBlcyA9CisgICAgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiB9CiAKIHN0cnVjdCBjbVNvdXJjZUZpbGVQYXRoQ29tcGFyZQpAQCAtMTEzOSwyMyArMTIxNCwyNCBAQAogICB9CiAKICAgLy8gb3JnYW5pemUgdGhlIHNvdXJjZXMKLSAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gY2xhc3NlczsKLSAgaWYgKCFndGd0LT5HZXRDb25maWdDb21tb25Tb3VyY2VGaWxlcyhjbGFzc2VzKSkgeworICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBjb21tb25Tb3VyY2VGaWxlczsKKyAgaWYgKCFndGd0LT5HZXRDb25maWdDb21tb25Tb3VyY2VGaWxlcyhjb21tb25Tb3VyY2VGaWxlcykpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICAvLyBBZGQgQ01ha2VMaXN0cy50eHQgZmlsZSBmb3IgdXNlciBjb252ZW5pZW5jZS4KLSAgdGhpcy0+QWRkWENvZGVQcm9qQnVpbGRSdWxlKGd0Z3QsIGNsYXNzZXMpOworICB0aGlzLT5BZGRYQ29kZVByb2pCdWlsZFJ1bGUoZ3RndCwgY29tbW9uU291cmNlRmlsZXMpOwogCiAgIC8vIEFkZCB0aGUgSW5mby5wbGlzdCB3ZSBhcmUgYWJvdXQgdG8gZ2VuZXJhdGUgZm9yIGFuIEFwcCBCdW5kbGUuCiAgIGlmIChndGd0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiTUFDT1NYX0JVTkRMRSIpKSB7CiAgICAgc3RkOjpzdHJpbmcgcGxpc3QgPSB0aGlzLT5Db21wdXRlSW5mb1BMaXN0TG9jYXRpb24oZ3RndCk7CiAgICAgY21Tb3VyY2VGaWxlKiBzZiA9IGd0Z3QtPk1ha2VmaWxlLT5HZXRPckNyZWF0ZVNvdXJjZSgKICAgICAgIHBsaXN0LCB0cnVlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLSAgICBjbGFzc2VzLnB1c2hfYmFjayhzZik7CisgICAgY29tbW9uU291cmNlRmlsZXMucHVzaF9iYWNrKHNmKTsKICAgfQogCi0gIHN0ZDo6c29ydChjbGFzc2VzLmJlZ2luKCksIGNsYXNzZXMuZW5kKCksIGNtU291cmNlRmlsZVBhdGhDb21wYXJlKCkpOworICBzdGQ6OnNvcnQoY29tbW9uU291cmNlRmlsZXMuYmVnaW4oKSwgY29tbW9uU291cmNlRmlsZXMuZW5kKCksCisgICAgICAgICAgICBjbVNvdXJjZUZpbGVQYXRoQ29tcGFyZSgpKTsKIAogICBndGd0LT5Db21wdXRlT2JqZWN0TWFwcGluZygpOwogCkBAIC0xMTYzLDE2ICsxMjM5LDE5IEBACiAgIHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiBoZWFkZXJGaWxlczsKICAgc3RkOjp2ZWN0b3I8Y21YQ29kZU9iamVjdCo+IHJlc291cmNlRmlsZXM7CiAgIHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiBzb3VyY2VGaWxlczsKLSAgZm9yIChhdXRvIHNvdXJjZUZpbGUgOiBjbGFzc2VzKSB7CisgIGZvciAoYXV0byBzb3VyY2VGaWxlIDogY29tbW9uU291cmNlRmlsZXMpIHsKICAgICBjbVhDb2RlT2JqZWN0KiB4c2YgPSB0aGlzLT5DcmVhdGVYQ29kZVNvdXJjZUZpbGUoCiAgICAgICB0aGlzLT5DdXJyZW50TG9jYWxHZW5lcmF0b3IsIHNvdXJjZUZpbGUsIGd0Z3QpOwogICAgIGNtWENvZGVPYmplY3QqIGZyID0geHNmLT5HZXRPYmplY3QoImZpbGVSZWYiKTsKICAgICBjbVhDb2RlT2JqZWN0KiBmaWxldHlwZSA9IGZyLT5HZXRPYmplY3QoKS0+R2V0T2JqZWN0KCJleHBsaWNpdEZpbGVUeXBlIik7CisgICAgaWYgKCFmaWxldHlwZSkgeworICAgICAgZmlsZXR5cGUgPSBmci0+R2V0T2JqZWN0KCktPkdldE9iamVjdCgibGFzdEtub3duRmlsZVR5cGUiKTsKKyAgICB9CiAKICAgICBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlRmlsZUZsYWdzIHRzRmxhZ3MgPQogICAgICAgZ3RndC0+R2V0VGFyZ2V0U291cmNlRmlsZUZsYWdzKHNvdXJjZUZpbGUpOwogCi0gICAgaWYgKGZpbGV0eXBlICYmIGZpbGV0eXBlLT5HZXRTdHJpbmcoKSA9PSAiY29tcGlsZWQubWFjaC1vLm9iamZpbGUiKSB7CisgICAgaWYgKGZpbGV0eXBlICYmIElzTGlicmFyeVR5cGUoZmlsZXR5cGUtPkdldFN0cmluZygpKSkgewogICAgICAgaWYgKHNvdXJjZUZpbGUtPkdldE9iamVjdExpYnJhcnkoKS5lbXB0eSgpKSB7CiAgICAgICAgIGV4dGVybmFsT2JqRmlsZXMucHVzaF9iYWNrKHhzZik7CiAgICAgICB9CkBAIC0xMjYyLDcgKzEzNDEsNyBAQAogICAgIHVzaW5nIG1hcE9mVmVjdG9yT2ZTb3VyY2VGaWxlcyA9CiAgICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4+OwogICAgIG1hcE9mVmVjdG9yT2ZTb3VyY2VGaWxlcyBidW5kbGVGaWxlczsKLSAgICBmb3IgKGF1dG8gc291cmNlRmlsZSA6IGNsYXNzZXMpIHsKKyAgICBmb3IgKGF1dG8gc291cmNlRmlsZSA6IGNvbW1vblNvdXJjZUZpbGVzKSB7CiAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlRmlsZUZsYWdzIHRzRmxhZ3MgPQogICAgICAgICBndGd0LT5HZXRUYXJnZXRTb3VyY2VGaWxlRmxhZ3Moc291cmNlRmlsZSk7CiAgICAgICBpZiAodHNGbGFncy5UeXBlID09IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlVHlwZU1hY0NvbnRlbnQpIHsKQEAgLTEzMTAsNyArMTM4OSw3IEBACiAgICAgdXNpbmcgbWFwT2ZWZWN0b3JPZlNvdXJjZUZpbGVzID0KICAgICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPj47CiAgICAgbWFwT2ZWZWN0b3JPZlNvdXJjZUZpbGVzIGJ1bmRsZUZpbGVzOwotICAgIGZvciAoYXV0byBzb3VyY2VGaWxlIDogY2xhc3NlcykgeworICAgIGZvciAoYXV0byBzb3VyY2VGaWxlIDogY29tbW9uU291cmNlRmlsZXMpIHsKICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlRmxhZ3MgdHNGbGFncyA9CiAgICAgICAgIGd0Z3QtPkdldFRhcmdldFNvdXJjZUZpbGVGbGFncyhzb3VyY2VGaWxlKTsKICAgICAgIGlmICh0c0ZsYWdzLlR5cGUgPT0gY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUZpbGVUeXBlRGVlcFJlc291cmNlKSB7CkBAIC0xMzQwLDIyICsxNDE5LDIwIEBACiAgICAgfQogICB9CiAKLSAgLy8gY3JlYXRlIGZyYW1ld29yayBidWlsZCBwaGFzZQorICAvLyBhbHdheXMgY3JlYXRlIGZyYW1ld29yayBidWlsZCBwaGFzZQogICBjbVhDb2RlT2JqZWN0KiBmcmFtZXdvcmtCdWlsZFBoYXNlID0gbnVsbHB0cjsKLSAgaWYgKCFleHRlcm5hbE9iakZpbGVzLmVtcHR5KCkpIHsKLSAgICBmcmFtZXdvcmtCdWlsZFBoYXNlID0KLSAgICAgIHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSk7Ci0gICAgZnJhbWV3b3JrQnVpbGRQaGFzZS0+U2V0Q29tbWVudCgiRnJhbWV3b3JrcyIpOwotICAgIGZyYW1ld29ya0J1aWxkUGhhc2UtPkFkZEF0dHJpYnV0ZSgiYnVpbGRBY3Rpb25NYXNrIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCIyMTQ3NDgzNjQ3IikpOwotICAgIGJ1aWxkRmlsZXMgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6T0JKRUNUX0xJU1QpOwotICAgIGZyYW1ld29ya0J1aWxkUGhhc2UtPkFkZEF0dHJpYnV0ZSgiZmlsZXMiLCBidWlsZEZpbGVzKTsKLSAgICBmb3IgKGF1dG8mIGV4dGVybmFsT2JqRmlsZSA6IGV4dGVybmFsT2JqRmlsZXMpIHsKLSAgICAgIGJ1aWxkRmlsZXMtPkFkZE9iamVjdChleHRlcm5hbE9iakZpbGUpOwotICAgIH0KLSAgICBmcmFtZXdvcmtCdWlsZFBoYXNlLT5BZGRBdHRyaWJ1dGUoInJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoIjAiKSk7CisgIGZyYW1ld29ya0J1aWxkUGhhc2UgPQorICAgIHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSk7CisgIGZyYW1ld29ya0J1aWxkUGhhc2UtPlNldENvbW1lbnQoIkZyYW1ld29ya3MiKTsKKyAgZnJhbWV3b3JrQnVpbGRQaGFzZS0+QWRkQXR0cmlidXRlKCJidWlsZEFjdGlvbk1hc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCIyMTQ3NDgzNjQ3IikpOworICBidWlsZEZpbGVzID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok9CSkVDVF9MSVNUKTsKKyAgZnJhbWV3b3JrQnVpbGRQaGFzZS0+QWRkQXR0cmlidXRlKCJmaWxlcyIsIGJ1aWxkRmlsZXMpOworICBmb3IgKGF1dG8mIGV4dGVybmFsT2JqRmlsZSA6IGV4dGVybmFsT2JqRmlsZXMpIHsKKyAgICBidWlsZEZpbGVzLT5BZGRPYmplY3QoZXh0ZXJuYWxPYmpGaWxlKTsKICAgfQorICBmcmFtZXdvcmtCdWlsZFBoYXNlLT5BZGRBdHRyaWJ1dGUoInJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCIwIikpOwogCiAgIC8vIGNyZWF0ZSBsaXN0IG9mIGJ1aWxkIHBoYXNlcyBhbmQgY3JlYXRlIHRoZSBYY29kZSB0YXJnZXQKICAgY21YQ29kZU9iamVjdCogYnVpbGRQaGFzZXMgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6T0JKRUNUX0xJU1QpOwpAQCAtMTQyMCw4ICsxNDk3LDggQEAKIAogYm9vbCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpJc0hlYWRlckZpbGUoY21Tb3VyY2VGaWxlKiBzZikKIHsKLSAgcmV0dXJuIGNtQ29udGFpbnModGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0SGVhZGVyRXh0ZW5zaW9ucygpLAotICAgICAgICAgICAgICAgICAgICBzZi0+R2V0RXh0ZW5zaW9uKCkpOworICByZXR1cm4gY206OmNvbnRhaW5zKHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldEhlYWRlckV4dGVuc2lvbnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICBzZi0+R2V0RXh0ZW5zaW9uKCkpOwogfQogCiBjbVhDb2RlT2JqZWN0KiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpDcmVhdGVCdWlsZFBoYXNlKApAQCAtMTQ2Miw2ICsxNTM5LDcgQEAKICAgICAgIGNtU3RyQ2F0KCIkPFRBUkdFVF9TT05BTUVfRklMRToiLCBndGd0LT5HZXROYW1lKCksICc+Jyk7CiAgICAgc3RkOjpzdHJpbmcgc3RyX2xpbmtfZmlsZSA9CiAgICAgICBjbVN0ckNhdCgiJDxUQVJHRVRfTElOS0VSX0ZJTEU6IiwgZ3RndC0+R2V0TmFtZSgpLCAnPicpOworICAgIGJvb2wgc3RkUGlwZXNVVEY4ID0gdHJ1ZTsKICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjbWQgPSBjbU1ha2VTaW5nbGVDb21tYW5kTGluZSgKICAgICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksICItRSIsICJjbWFrZV9zeW1saW5rX2xpYnJhcnkiLAogICAgICAgICBzdHJfZmlsZSwgc3RyX3NvX2ZpbGUsIHN0cl9saW5rX2ZpbGUgfSk7CkBAIC0xNDY5LDcgKzE1NDcsNyBAQAogICAgIGNtQ3VzdG9tQ29tbWFuZCBjb21tYW5kKAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksIGNtZCwgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKSwKLSAgICAgICJDcmVhdGluZyBzeW1saW5rcyIsICIiKTsKKyAgICAgICJDcmVhdGluZyBzeW1saW5rcyIsICIiLCBzdGRQaXBlc1VURjgpOwogCiAgICAgcG9zdGJ1aWxkLnB1c2hfYmFjayhzdGQ6Om1vdmUoY29tbWFuZCkpOwogICB9CkBAIC0xODU5LDE4ICsxOTM3LDE4IEBACiAgIGlmIChndGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSB8fAogICAgICAgZ3RndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHsKICAgICB0aGlzLT5DdXJyZW50TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRpY0xpYnJhcnlGbGFncygKLSAgICAgIGV4dHJhTGlua09wdGlvbnMsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWdOYW1lKSwgbGxhbmcsIGd0Z3QpOworICAgICAgZXh0cmFMaW5rT3B0aW9ucywgY29uZmlnTmFtZSwgbGxhbmcsIGd0Z3QpOwogICB9IGVsc2UgewotICAgIGNvbnN0IGNoYXIqIHRhcmdldExpbmtGbGFncyA9IGd0Z3QtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CisgICAgY21Qcm9wIHRhcmdldExpbmtGbGFncyA9IGd0Z3QtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CiAgICAgaWYgKHRhcmdldExpbmtGbGFncykgewogICAgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhleHRyYUxpbmtPcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rRmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFyZ2V0TGlua0ZsYWdzKTsKICAgICB9CiAgICAgaWYgKCFjb25maWdOYW1lLmVtcHR5KCkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtGbGFnc1ZhciA9CiAgICAgICAgIGNtU3RyQ2F0KCJMSU5LX0ZMQUdTXyIsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWdOYW1lKSk7Ci0gICAgICBpZiAoY29uc3QgY2hhciogbGlua0ZsYWdzID0gZ3RndC0+R2V0UHJvcGVydHkobGlua0ZsYWdzVmFyKSkgewotICAgICAgICB0aGlzLT5DdXJyZW50TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKGV4dHJhTGlua09wdGlvbnMsIGxpbmtGbGFncyk7CisgICAgICBpZiAoY21Qcm9wIGxpbmtGbGFncyA9IGd0Z3QtPkdldFByb3BlcnR5KGxpbmtGbGFnc1ZhcikpIHsKKyAgICAgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhleHRyYUxpbmtPcHRpb25zLCAqbGlua0ZsYWdzKTsKICAgICAgIH0KICAgICB9CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdHM7CkBAIC0xOTA2LDggKzE5ODQsOCBAQAogICBzdGQ6OnN0cmluZyBwbnN1ZmZpeDsKICAgZ3RndC0+R2V0RnVsbE5hbWVDb21wb25lbnRzKHBucHJlZml4LCBwbmJhc2UsIHBuc3VmZml4LCBjb25maWdOYW1lKTsKIAotICBjb25zdCBjaGFyKiB2ZXJzaW9uID0gZ3RndC0+R2V0UHJvcGVydHkoIlZFUlNJT04iKTsKLSAgY29uc3QgY2hhciogc292ZXJzaW9uID0gZ3RndC0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpOworICBjbVByb3AgdmVyc2lvbiA9IGd0Z3QtPkdldFByb3BlcnR5KCJWRVJTSU9OIik7CisgIGNtUHJvcCBzb3ZlcnNpb24gPSBndGd0LT5HZXRQcm9wZXJ0eSgiU09WRVJTSU9OIik7CiAgIGlmICghZ3RndC0+SGFzU09OYW1lKGNvbmZpZ05hbWUpIHx8IGd0Z3QtPklzRnJhbWV3b3JrT25BcHBsZSgpKSB7CiAgICAgdmVyc2lvbiA9IG51bGxwdHI7CiAgICAgc292ZXJzaW9uID0gbnVsbHB0cjsKQEAgLTE5MjMsOSArMjAwMSw5IEBACiAgIHN0ZDo6c3RyaW5nIHNvTmFtZSA9IHBuYmFzZTsKICAgaWYgKHZlcnNpb24gJiYgc292ZXJzaW9uKSB7CiAgICAgcmVhbE5hbWUgKz0gIi4iOwotICAgIHJlYWxOYW1lICs9IHZlcnNpb247CisgICAgcmVhbE5hbWUgKz0gKnZlcnNpb247CiAgICAgc29OYW1lICs9ICIuIjsKLSAgICBzb05hbWUgKz0gc292ZXJzaW9uOworICAgIHNvTmFtZSArPSAqc292ZXJzaW9uOwogICB9CiAKICAgLy8gU2V0IGF0dHJpYnV0ZXMgdG8gc3BlY2lmeSB0aGUgcHJvcGVyIG5hbWUgZm9yIHRoZSB0YXJnZXQuCkBAIC0xOTcxLDEwICsyMDQ5LDEwIEBACiAgICAgICAgIHN0ZDo6c3RyaW5nIGZ3X3ZlcnNpb24gPSBndGd0LT5HZXRGcmFtZXdvcmtWZXJzaW9uKCk7CiAgICAgICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiRlJBTUVXT1JLX1ZFUlNJT04iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGZ3X3ZlcnNpb24pKTsKLSAgICAgICAgY29uc3QgY2hhciogZXh0ID0gZ3RndC0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKKyAgICAgICAgY21Qcm9wIGV4dCA9IGd0Z3QtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7CiAgICAgICAgIGlmIChleHQpIHsKICAgICAgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIldSQVBQRVJfRVhURU5TSU9OIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoKmV4dCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3RkOjpzdHJpbmcgcGxpc3QgPSB0aGlzLT5Db21wdXRlSW5mb1BMaXN0TG9jYXRpb24oZ3RndCk7CkBAIC0yMDEyLDEwICsyMDkwLDEwIEBACiAgICAgICAgICAgZXh0cmFMaW5rT3B0aW9ucyArPSAiICI7CiAgICAgICAgICAgZXh0cmFMaW5rT3B0aW9ucyArPSBjcmVhdGVGbGFnczsKICAgICAgICAgfQotICAgICAgICBjb25zdCBjaGFyKiBleHQgPSBndGd0LT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpOworICAgICAgICBjbVByb3AgZXh0ID0gZ3RndC0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKICAgICAgICAgaWYgKGV4dCkgewogICAgICAgICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiV1JBUFBFUl9FWFRFTlNJT04iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZygqZXh0KSk7CiAgICAgICAgIH0KICAgICAgICAgc3RkOjpzdHJpbmcgcGxpc3QgPSB0aGlzLT5Db21wdXRlSW5mb1BMaXN0TG9jYXRpb24oZ3RndCk7CiAgICAgICAgIC8vIFhjb2RlIHdpbGwgY3JlYXRlIHRoZSBmaW5hbCB2ZXJzaW9uIG9mIEluZm8ucGxpc3QgYXQgYnVpbGQgdGltZSwKQEAgLTIwNDYsMTAgKzIxMjQsMTAgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgZndfdmVyc2lvbiA9IGd0Z3QtPkdldEZyYW1ld29ya1ZlcnNpb24oKTsKICAgICAgICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKCJGUkFNRVdPUktfVkVSU0lPTiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoZndfdmVyc2lvbikpOwotICAgICAgICBjb25zdCBjaGFyKiBleHQgPSBndGd0LT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpOworICAgICAgICBjbVByb3AgZXh0ID0gZ3RndC0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKICAgICAgICAgaWYgKGV4dCkgewogICAgICAgICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiV1JBUFBFUl9FWFRFTlNJT04iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZygqZXh0KSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGQ6OnN0cmluZyBwbGlzdCA9IHRoaXMtPkNvbXB1dGVJbmZvUExpc3RMb2NhdGlvbihndGd0KTsKQEAgLTIwODUsMTAgKzIxNjMsMTAgQEAKIAogICAgICAgLy8gSGFuZGxlIGJ1bmRsZXMgYW5kIG5vcm1hbCBleGVjdXRhYmxlcyBzZXBhcmF0ZWx5LgogICAgICAgaWYgKGd0Z3QtPkdldFByb3BlcnR5QXNCb29sKCJNQUNPU1hfQlVORExFIikpIHsKLSAgICAgICAgY29uc3QgY2hhciogZXh0ID0gZ3RndC0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKKyAgICAgICAgY21Qcm9wIGV4dCA9IGd0Z3QtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7CiAgICAgICAgIGlmIChleHQpIHsKICAgICAgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIldSQVBQRVJfRVhURU5TSU9OIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoKmV4dCkpOwogICAgICAgICB9CiAgICAgICAgIHN0ZDo6c3RyaW5nIHBsaXN0ID0gdGhpcy0+Q29tcHV0ZUluZm9QTGlzdExvY2F0aW9uKGd0Z3QpOwogICAgICAgICAvLyBYY29kZSB3aWxsIGNyZWF0ZSB0aGUgZmluYWwgdmVyc2lvbiBvZiBJbmZvLnBsaXN0IGF0IGJ1aWxkIHRpbWUsCkBAIC0yMjgzLDcgKzIzNjEsNyBAQAogCiAgIC8vIEFkZCBGb3J0cmFuIHNvdXJjZSBmb3JtYXQgYXR0cmlidXRlIGlmIHByb3BlcnR5IGlzIHNldC4KICAgY29uc3QgY2hhciogZm9ybWF0ID0gbnVsbHB0cjsKLSAgY29uc3QgY2hhciogdGd0Zm10ID0gZ3RndC0+R2V0UHJvcGVydHkoIkZvcnRyYW5fRk9STUFUIik7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0Z3RmbXQgPSBndGd0LT5HZXRTYWZlUHJvcGVydHkoIkZvcnRyYW5fRk9STUFUIik7CiAgIHN3aXRjaCAoY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5Gb3JtYXQodGd0Zm10KSkgewogICAgIGNhc2UgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5Gb3JtYXRGaXhlZDoKICAgICAgIGZvcm1hdCA9ICJmaXhlZCI7CkBAIC0yNDA2LDEyICsyNDg0LDEzIEBACiAgIC8vIENvbnZlcnQgIlhDT0RFX0FUVFJJQlVURV8qIiBwcm9wZXJ0aWVzIGRpcmVjdGx5LgogICB7CiAgICAgZm9yIChhdXRvIGNvbnN0JiBwcm9wIDogZ3RndC0+R2V0UHJvcGVydHlLZXlzKCkpIHsKLSAgICAgIGlmIChwcm9wLmZpbmQoIlhDT0RFX0FUVFJJQlVURV8iKSA9PSAwKSB7CisgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJYQ09ERV9BVFRSSUJVVEVfIikpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgYXR0cmlidXRlID0gcHJvcC5zdWJzdHIoMTYpOwogICAgICAgICB0aGlzLT5GaWx0ZXJDb25maWd1cmF0aW9uQXR0cmlidXRlKGNvbmZpZ05hbWUsIGF0dHJpYnV0ZSk7CiAgICAgICAgIGlmICghYXR0cmlidXRlLmVtcHR5KCkpIHsKKyAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHIgPSBndGd0LT5HZXRTYWZlUHJvcGVydHkocHJvcCk7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgcHJvY2Vzc2VkID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICAgIGd0Z3QtPkdldFByb3BlcnR5KHByb3ApLCB0aGlzLT5DdXJyZW50TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUpOworICAgICAgICAgICAgcHIsIHRoaXMtPkN1cnJlbnRMb2NhbEdlbmVyYXRvciwgY29uZmlnTmFtZSk7CiAgICAgICAgICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKGF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKHByb2Nlc3NlZCkpOwogICAgICAgICB9CkBAIC0yNTMwLDggKzI2MDksOCBAQAogY29uc3QgY2hhciogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6R2V0VGFyZ2V0RmlsZVR5cGUoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiB7Ci0gIGlmIChjb25zdCBjaGFyKiBlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiWENPREVfRVhQTElDSVRfRklMRV9UWVBFIikpIHsKLSAgICByZXR1cm4gZTsKKyAgaWYgKGNtUHJvcCBlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiWENPREVfRVhQTElDSVRfRklMRV9UWVBFIikpIHsKKyAgICByZXR1cm4gZS0+Y19zdHIoKTsKICAgfQogCiAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKQEAgLTI1NjMsOCArMjY0Miw4IEBACiBjb25zdCBjaGFyKiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpHZXRUYXJnZXRQcm9kdWN0VHlwZSgKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKIHsKLSAgaWYgKGNvbnN0IGNoYXIqIGUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJYQ09ERV9QUk9EVUNUX1RZUEUiKSkgewotICAgIHJldHVybiBlOworICBpZiAoY21Qcm9wIGUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJYQ09ERV9QUk9EVUNUX1RZUEUiKSkgeworICAgIHJldHVybiBlLT5jX3N0cigpOwogICB9CiAKICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewpAQCAtMjc1Myw2ICsyODMyLDE5MCBAQAogICAgIH0KICAgfQogCisgIC8vIFNlcGFyYXRlIGxpYnJhcmllcyBpbnRvIG9uZXMgdGhhdCBjYW4gYmUgbGlua2VkIHVzaW5nICJMaW5rIEJpbmFyeSBXaXRoCisgIC8vIExpYnJhcmllcyIgYnVpbGQgcGhhc2UgYW5kIHRoZSBvbmVzIHRoYXQgY2FuJ3QuIE9ubHkgdGFyZ2V0cyB0aGF0IGJ1aWxkCisgIC8vIEFwcGxlIGJ1bmRsZXMgKC5hcHAsIC5mcmFtZXdvcmssIC5idW5kbGUpIGNhbiB1c2UgdGhpcyBmZWF0dXJlIGFuZCBvbmx5CisgIC8vIHRhcmdldHMgdGhhdCByZXByZXNlbnQgYWN0dWFsIGxpYnJhcmllcyAoc3RhdGljIG9yIGR5bmFtaWMsIGxvY2FsIG9yCisgIC8vIGltcG9ydGVkKSBub3Qgb2JqZWN0cyBhbmQgbm90IGV4ZWN1dGFibGVzIHdpbGwgYmUgdXNlZC4gVGhlc2UgYXJlCisgIC8vIGxpbWl0YXRpb25zIGltcG9zZWQgYnkgQ01ha2UgdXNlLWNhc2VzIC0gb3RoZXJ3aXNlIGEgbG90IG9mIHRoaW5ncyBicmVhay4KKyAgLy8gVGhlIHJlc3Qgd2lsbCBiZSBsaW5rZWQgdXNpbmcgbGlua2VyIGZsYWdzIChPVEhFUl9MREZMQUdTIHNldHRpbmcgaW4gWGNvZGUKKyAgLy8gcHJvamVjdCkuCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Okl0ZW0gY29uc3QqPj4KKyAgICBjb25maWdJdGVtTWFwOworICBhdXRvIGFkZFRvTGlua2VyQXJndW1lbnRzID0KKyAgICBbJmNvbmZpZ0l0ZW1NYXBdKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWdOYW1lLAorICAgICAgICAgICAgICAgICAgICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpJdGVtIGNvbnN0KiBsaWJJdGVtUHRyKSB7CisgICAgICBhdXRvJiBsaW5rVmVjdG9yID0gY29uZmlnSXRlbU1hcFtjb25maWdOYW1lXTsKKyAgICAgIGlmIChzdGQ6OmZpbmRfaWYobGlua1ZlY3Rvci5iZWdpbigpLCBsaW5rVmVjdG9yLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICBbbGliSXRlbVB0cl0oY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpJdGVtIGNvbnN0KiBwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAgPT0gbGliSXRlbVB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgfSkgPT0gbGlua1ZlY3Rvci5lbmQoKSkgeworICAgICAgICBsaW5rVmVjdG9yLnB1c2hfYmFjayhsaWJJdGVtUHRyKTsKKyAgICAgIH0KKyAgICB9OworICBzdGQ6OnZlY3RvcjxjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Okl0ZW0gY29uc3QqPiBsaW5rUGhhc2VUYXJnZXRWZWN0b3I7CisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IHRhcmdldENvbmZpZ01hcDsKKyAgdXNpbmcgQ29uZmlnSXRlbVBhaXIgPQorICAgIHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpJdGVtIGNvbnN0Kj47CisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxDb25maWdJdGVtUGFpcj4+IHRhcmdldEl0ZW1NYXA7CisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IHRhcmdldFByb2R1Y3ROYW1lTWFwOworICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZ05hbWUgOiB0aGlzLT5DdXJyZW50Q29uZmlndXJhdGlvblR5cGVzKSB7CisgICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBjbGkgPSBndC0+R2V0TGlua0luZm9ybWF0aW9uKGNvbmZpZ05hbWUpOworICAgIGlmICghY2xpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZm9yIChhdXRvIGNvbnN0JiBsaWJJdGVtIDogY2xpLT5HZXRJdGVtcygpKSB7CisgICAgICBpZiAoZ3QtPklzQnVuZGxlT25BcHBsZSgpICYmCisgICAgICAgICAgKGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFIHx8CisgICAgICAgICAgIGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSB8fAorICAgICAgICAgICBndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlkgfHwKKyAgICAgICAgICAgZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlVOS05PV05fTElCUkFSWSkgJiYKKyAgICAgICAgICAoKGxpYkl0ZW0uVGFyZ2V0ICYmCisgICAgICAgICAgICAobGliSXRlbS5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZIHx8CisgICAgICAgICAgICAgbGliSXRlbS5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CisgICAgICAgICAgICAgbGliSXRlbS5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZKSkgfHwKKyAgICAgICAgICAgKCFsaWJJdGVtLlRhcmdldCAmJiBsaWJJdGVtLklzUGF0aCkpKSB7CisgICAgICAgIC8vIEFkZCB1bmlxdWUgY29uZmlndXJhdGlvbiBuYW1lIHRvIHRhcmdldC1jb25maWcgbWFwIGZvciBsYXRlcgorICAgICAgICAvLyBjaGVja3MKKyAgICAgICAgc3RkOjpzdHJpbmcgbGliTmFtZTsKKyAgICAgICAgaWYgKGxpYkl0ZW0uVGFyZ2V0KSB7CisgICAgICAgICAgbGliTmFtZSA9IGxpYkl0ZW0uVGFyZ2V0LT5HZXROYW1lKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbGliTmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShsaWJJdGVtLlZhbHVlLlZhbHVlKTsKKyAgICAgICAgICBjb25zdCBhdXRvIGxpYkV4dCA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lRXh0ZW5zaW9uKGxpYk5hbWUpOworICAgICAgICAgIGlmICghSXNMaWJyYXJ5RXh0ZW5zaW9uKGxpYkV4dCkpIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGlzIGxpYnJhcnkgaXRlbSB0byBhIHJlZ3VsYXIgbGlua2VyIGZsYWcgbGlzdAorICAgICAgICAgICAgYWRkVG9MaW5rZXJBcmd1bWVudHMoY29uZmlnTmFtZSwgJmxpYkl0ZW0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGF1dG8mIGNvbmZpZ1ZlY3RvciA9IHRhcmdldENvbmZpZ01hcFtsaWJOYW1lXTsKKyAgICAgICAgaWYgKHN0ZDo6ZmluZChjb25maWdWZWN0b3IuYmVnaW4oKSwgY29uZmlnVmVjdG9yLmVuZCgpLCBjb25maWdOYW1lKSA9PQorICAgICAgICAgICAgY29uZmlnVmVjdG9yLmVuZCgpKSB7CisgICAgICAgICAgY29uZmlnVmVjdG9yLnB1c2hfYmFjayhjb25maWdOYW1lKTsKKyAgICAgICAgfQorICAgICAgICAvLyBBZGQgYSBwYWlyIG9mIGNvbmZpZyBhbmQgaXRlbSB0byB0YXJnZXQtaXRlbSBtYXAKKyAgICAgICAgYXV0byYgaXRlbVZlY3RvciA9IHRhcmdldEl0ZW1NYXBbbGliTmFtZV07CisgICAgICAgIGl0ZW1WZWN0b3IuZW1wbGFjZV9iYWNrKENvbmZpZ0l0ZW1QYWlyKGNvbmZpZ05hbWUsICZsaWJJdGVtKSk7CisgICAgICAgIC8vIEFkZCBwcm9kdWN0IGZpbGUtbmFtZSB0byBhIGxpYi1wcm9kdWN0IG1hcAorICAgICAgICBhdXRvIHByb2R1Y3ROYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGxpYkl0ZW0uVmFsdWUuVmFsdWUpOworICAgICAgICBhdXRvJiBwcm9kdWN0VmVjdG9yID0gdGFyZ2V0UHJvZHVjdE5hbWVNYXBbbGliTmFtZV07CisgICAgICAgIGlmIChzdGQ6OmZpbmQocHJvZHVjdFZlY3Rvci5iZWdpbigpLCBwcm9kdWN0VmVjdG9yLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3ROYW1lKSA9PSBwcm9kdWN0VmVjdG9yLmVuZCgpKSB7CisgICAgICAgICAgcHJvZHVjdFZlY3Rvci5wdXNoX2JhY2socHJvZHVjdE5hbWUpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBBZGQgdGhpcyBsaWJyYXJ5IGl0ZW0gdG8gYSByZWd1bGFyIGxpbmtlciBmbGFnIGxpc3QKKyAgICAgICAgYWRkVG9MaW5rZXJBcmd1bWVudHMoY29uZmlnTmFtZSwgJmxpYkl0ZW0pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIEdvIHRocm91Z2ggdGFyZ2V0IGxpYnJhcnkgbWFwIGFuZCBzZXBhcmF0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlua2VkCisgIC8vIGluIGFsbCBjb25maWd1cmF0aW9ucyBhbmQgcHJvZHVjZSBvbmx5IHNpbmdsZSBwcm9kdWN0LCBmcm9tIHRoZSByZXN0LgorICAvLyBPbmx5IHRoZXNlIHdpbGwgYmUgbGlua2VkIHRocm91Z2ggIkxpbmsgQmluYXJ5IFdpdGggTGlicmFyaWVzIiBidWlsZAorICAvLyBwaGFzZS4KKyAgZm9yIChhdXRvIGNvbnN0JiB0YXJnZXRMaWJDb25maWdzIDogdGFyZ2V0Q29uZmlnTWFwKSB7CisgICAgLy8gQWRkIHRoaXMgbGlicmFyeSB0byAiTGluayBCaW5hcnkgV2l0aCBMaWJyYXJpZXMiIGJ1aWxkIHBoYXNlIGlmIGl0J3MKKyAgICAvLyBsaW5rZWQgaW4gYWxsIGNvbmZpZ3VyYXRpb25zIGFuZCBpdCBoYXMgb25seSBvbmUgcHJvZHVjdCBuYW1lCisgICAgYXV0byYgaXRlbVZlY3RvciA9IHRhcmdldEl0ZW1NYXBbdGFyZ2V0TGliQ29uZmlncy5maXJzdF07CisgICAgYXV0byYgcHJvZHVjdFZlY3RvciA9IHRhcmdldFByb2R1Y3ROYW1lTWFwW3RhcmdldExpYkNvbmZpZ3MuZmlyc3RdOworICAgIGlmICh0YXJnZXRMaWJDb25maWdzLnNlY29uZCA9PSB0aGlzLT5DdXJyZW50Q29uZmlndXJhdGlvblR5cGVzICYmCisgICAgICAgIHByb2R1Y3RWZWN0b3Iuc2l6ZSgpID09IDEpIHsKKyAgICAgIC8vIEFkZCB0aGlzIGxpYnJhcnkgdG8gIkxpbmsgQmluYXJ5IFdpdGggTGlicmFyaWVzIiBsaXN0CisgICAgICBsaW5rUGhhc2VUYXJnZXRWZWN0b3IucHVzaF9iYWNrKGl0ZW1WZWN0b3JbMF0uc2Vjb25kKTsKKyAgICB9IGVsc2UgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiBsaWJJdGVtIDogdGFyZ2V0SXRlbU1hcFt0YXJnZXRMaWJDb25maWdzLmZpcnN0XSkgeworICAgICAgICAvLyBBZGQgdGhpcyBsaWJyYXJ5IGl0ZW0gdG8gYSByZWd1bGFyIGxpbmtlciBmbGFnIGxpc3QKKyAgICAgICAgYWRkVG9MaW5rZXJBcmd1bWVudHMobGliSXRlbS5maXJzdCwgbGliSXRlbS5zZWNvbmQpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIEFkZCBsaWJyYXJpZXMgdG8gIkxpbmsgQmluYXJ5IFdpdGggTGlicmFyaWVzIiBidWlsZCBwaGFzZSBhbmQgY29sbGVjdAorICAvLyB0aGVpciBzZWFyY2ggcGF0aHMuIFhjb2RlIGRvZXMgbm90IHN1cHBvcnQgcGVyLWNvbmZpZ3VyYXRpb24gbGlua2luZworICAvLyBpbiB0aGlzIGJ1aWxkIHBoYXNlIHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uCisgIC8vIHNlcGFyYXRlbHkuCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rU2VhcmNoUGF0aHM7CisgIGZvciAoYXV0byBjb25zdCYgbGliSXRlbSA6IGxpbmtQaGFzZVRhcmdldFZlY3RvcikgeworICAgIC8vIEFkZCB0YXJnZXQgb3V0cHV0IGRpcmVjdG9yeSBhcyBhIGxpYnJhcnkgc2VhcmNoIHBhdGgKKyAgICBzdGQ6OnN0cmluZyBsaW5rRGlyOworICAgIGlmIChsaWJJdGVtLT5UYXJnZXQpIHsKKyAgICAgIGxpbmtEaXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRQYXJlbnREaXJlY3RvcnkoCisgICAgICAgIGxpYkl0ZW0tPlRhcmdldC0+R2V0TG9jYXRpb25Gb3JCdWlsZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgbGlua0RpciA9IGNtU3lzdGVtVG9vbHM6OkdldFBhcmVudERpcmVjdG9yeShsaWJJdGVtLT5WYWx1ZS5WYWx1ZSk7CisgICAgfQorICAgIGlmIChzdGQ6OmZpbmQobGlua1NlYXJjaFBhdGhzLmJlZ2luKCksIGxpbmtTZWFyY2hQYXRocy5lbmQoKSwgbGlua0RpcikgPT0KKyAgICAgICAgbGlua1NlYXJjaFBhdGhzLmVuZCgpKSB7CisgICAgICBsaW5rU2VhcmNoUGF0aHMucHVzaF9iYWNrKGxpbmtEaXIpOworICAgIH0KKyAgICAvLyBBZGQgdGFyZ2V0IGRlcGVuZGVuY3kKKyAgICBpZiAobGliSXRlbS0+VGFyZ2V0ICYmICFsaWJJdGVtLT5UYXJnZXQtPklzSW1wb3J0ZWQoKSkgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWdOYW1lIDogdGhpcy0+Q3VycmVudENvbmZpZ3VyYXRpb25UeXBlcykgeworICAgICAgICB0YXJnZXQtPkFkZERlcGVuZFRhcmdldChjb25maWdOYW1lLCBsaWJJdGVtLT5UYXJnZXQtPkdldE5hbWUoKSk7CisgICAgICB9CisgICAgfQorICAgIC8vIEdldCB0aGUgbGlicmFyeSB0YXJnZXQKKyAgICBhdXRvKiBsaWJUYXJnZXQgPSBGaW5kWENvZGVUYXJnZXQobGliSXRlbS0+VGFyZ2V0KTsKKyAgICBjbVhDb2RlT2JqZWN0KiBidWlsZEZpbGU7CisgICAgaWYgKCFsaWJUYXJnZXQpIHsKKyAgICAgIGlmIChsaWJJdGVtLT5Jc1BhdGgpIHsKKyAgICAgICAgLy8gR2V0IG9yIGNyZWF0ZSBhIGRpcmVjdCBmaWxlIHJlZiBpbiB0aGUgcm9vdCBwcm9qZWN0CisgICAgICAgIGF1dG8gaXQgPSB0aGlzLT5FeHRlcm5hbExpYlJlZnMuZmluZChsaWJJdGVtLT5WYWx1ZS5WYWx1ZSk7CisgICAgICAgIGlmIChpdCA9PSB0aGlzLT5FeHRlcm5hbExpYlJlZnMuZW5kKCkpIHsKKyAgICAgICAgICBidWlsZEZpbGUgPSBDcmVhdGVYQ29kZUJ1aWxkRmlsZUZyb21QYXRoKGxpYkl0ZW0tPlZhbHVlLlZhbHVlLCBndCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCBudWxscHRyKTsKKyAgICAgICAgICB0aGlzLT5FeHRlcm5hbExpYlJlZnMuZW1wbGFjZShsaWJJdGVtLT5WYWx1ZS5WYWx1ZSwgYnVpbGRGaWxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBidWlsZEZpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBBZGQgdGhpcyBsaWJyYXJ5IGl0ZW0gYmFjayB0byBhIHJlZ3VsYXIgbGlua2VyIGZsYWcgbGlzdAorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbmYgOiBjb25maWdJdGVtTWFwKSB7CisgICAgICAgICAgYWRkVG9MaW5rZXJBcmd1bWVudHMoY29uZi5maXJzdCwgbGliSXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIEFkZCB0aGUgdGFyZ2V0IG91dHB1dCBmaWxlIGFzIGEgYnVpbGQgcmVmZXJlbmNlIGZvciBvdGhlciB0YXJnZXRzCisgICAgICAvLyB0byBsaW5rIGFnYWluc3QKKyAgICAgIGF1dG8qIGZpbGVSZWZPYmplY3QgPSBsaWJUYXJnZXQtPkdldE9iamVjdCgicHJvZHVjdFJlZmVyZW5jZSIpOworICAgICAgaWYgKCFmaWxlUmVmT2JqZWN0KSB7CisgICAgICAgIC8vIEFkZCB0aGlzIGxpYnJhcnkgaXRlbSBiYWNrIHRvIGEgcmVndWxhciBsaW5rZXIgZmxhZyBsaXN0CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29uZiA6IGNvbmZpZ0l0ZW1NYXApIHsKKyAgICAgICAgICBhZGRUb0xpbmtlckFyZ3VtZW50cyhjb25mLmZpcnN0LCBsaWJJdGVtKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGF1dG8gaXQgPSBGaWxlUmVmVG9CdWlsZEZpbGVNYXAuZmluZChmaWxlUmVmT2JqZWN0KTsKKyAgICAgIGlmIChpdCA9PSBGaWxlUmVmVG9CdWlsZEZpbGVNYXAuZW5kKCkpIHsKKyAgICAgICAgYnVpbGRGaWxlID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6OlBCWEJ1aWxkRmlsZSk7CisgICAgICAgIGJ1aWxkRmlsZS0+QWRkQXR0cmlidXRlKCJmaWxlUmVmIiwgZmlsZVJlZk9iamVjdCk7CisgICAgICAgIEZpbGVSZWZUb0J1aWxkRmlsZU1hcFtmaWxlUmVmT2JqZWN0XSA9IGJ1aWxkRmlsZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkRmlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICB9CisgICAgfQorICAgIC8vIEFkZCB0aGlzIHJlZmVyZW5jZSB0byBjdXJyZW50IHRhcmdldAorICAgIGF1dG8qIGJ1aWxkUGhhc2VzID0gdGFyZ2V0LT5HZXRPYmplY3QoImJ1aWxkUGhhc2VzIik7CisgICAgaWYgKCFidWlsZFBoYXNlcykgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGF1dG8qIGZyYW1ld29ya0J1aWxkUGhhc2UgPQorICAgICAgYnVpbGRQaGFzZXMtPkdldE9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSk7CisgICAgaWYgKCFmcmFtZXdvcmtCdWlsZFBoYXNlKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgYXV0byogYnVpbGRGaWxlcyA9IGZyYW1ld29ya0J1aWxkUGhhc2UtPkdldE9iamVjdCgiZmlsZXMiKTsKKyAgICBpZiAoIWJ1aWxkRmlsZXMpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoIWJ1aWxkRmlsZXMtPkhhc09iamVjdChidWlsZEZpbGUpKSB7CisgICAgICBidWlsZEZpbGVzLT5BZGRPYmplY3QoYnVpbGRGaWxlKTsKKyAgICB9CisgIH0KKwogICAvLyBMb29wIG92ZXIgY29uZmlndXJhdGlvbiB0eXBlcyBhbmQgc2V0IHBlci1jb25maWd1cmF0aW9uIGluZm8uCiAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnTmFtZSA6IHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMpIHsKICAgICB7CkBAIC0yNzgwLDIxICszMDQzLDIwIEBACiAgICAgfQogCiAgICAgLy8gQ29tcHV0ZSB0aGUgbGluayBsaWJyYXJ5IGFuZCBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCi0gICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBwY2xpID0gZ3QtPkdldExpbmtJbmZvcm1hdGlvbihjb25maWdOYW1lKTsKLSAgICBpZiAoIXBjbGkpIHsKKyAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGNsaSA9IGd0LT5HZXRMaW5rSW5mb3JtYXRpb24oY29uZmlnTmFtZSk7CisgICAgaWYgKCFjbGkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24mIGNsaSA9ICpwY2xpOwogCiAgICAgLy8gQWRkIGRlcGVuZGVuY2llcyBkaXJlY3RseSBvbiBsaWJyYXJ5IGZpbGVzLgotICAgIGZvciAoYXV0byBjb25zdCYgbGliRGVwIDogY2xpLkdldERlcGVuZHMoKSkgeworICAgIGZvciAoYXV0byBjb25zdCYgbGliRGVwIDogY2xpLT5HZXREZXBlbmRzKCkpIHsKICAgICAgIHRhcmdldC0+QWRkRGVwZW5kTGlicmFyeShjb25maWdOYW1lLCBsaWJEZXApOwogICAgIH0KIAogICAgIC8vIGFkZCB0aGUgbGlicmFyeSBzZWFyY2ggcGF0aHMKICAgICB7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5rRGlyczsKLSAgICAgIGZvciAoYXV0byBjb25zdCYgbGliRGlyIDogY2xpLkdldERpcmVjdG9yaWVzKCkpIHsKKyAgICAgIGZvciAoYXV0byBjb25zdCYgbGliRGlyIDogY2xpLT5HZXREaXJlY3RvcmllcygpKSB7CiAgICAgICAgIGlmICghbGliRGlyLmVtcHR5KCkgJiYgbGliRGlyICE9ICIvdXNyL2xpYiIpIHsKICAgICAgICAgICAvLyBOb3cgYWRkIHRoZSBzYW1lIG9uZSBidXQgYXBwZW5kCiAgICAgICAgICAgLy8gJChDT05GSUdVUkFUSU9OKSQoRUZGRUNUSVZFX1BMQVRGT1JNX05BTUUpIHRvIGl0OgpAQCAtMjgwNSwxNSArMzA2NywyMiBAQAogICAgICAgICAgIGxpbmtEaXJzICs9IHRoaXMtPlhDb2RlRXNjYXBlUGF0aChsaWJEaXIpOwogICAgICAgICB9CiAgICAgICB9CisgICAgICAvLyBBZGQgcHJldmlvdXNseSBjb2xsZWN0ZWQgcGF0aHMgd2hlcmUgdG8gbG9vayBmb3IgbGlicmFyaWVzCisgICAgICAvLyB0aGF0IHdlcmUgYWRkZWQgdG8gIkxpbmsgQmluYXJ5IFdpdGggTGlicmFyaWVzIgorICAgICAgZm9yIChhdXRvJiBsaW5rRGlyIDogbGlua1NlYXJjaFBhdGhzKSB7CisgICAgICAgIGxpbmtEaXJzICs9ICIgIjsKKyAgICAgICAgbGlua0RpcnMgKz0gdGhpcy0+WENvZGVFc2NhcGVQYXRoKGxpbmtEaXIpOworICAgICAgfQogICAgICAgdGhpcy0+QXBwZW5kQnVpbGRTZXR0aW5nQXR0cmlidXRlKHRhcmdldCwgIkxJQlJBUllfU0VBUkNIX1BBVEhTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rRGlycy5jX3N0cigpLCBjb25maWdOYW1lKTsKICAgICB9CiAKLSAgICAvLyBub3cgYWRkIHRoZSBsaW5rIGxpYnJhcmllcworICAgIC8vIG5vdyBhZGQgdGhlIGxlZnQtb3ZlciBsaW5rIGxpYnJhcmllcwogICAgIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtMaWJzOwogICAgICAgY29uc3QgY2hhciogc2VwID0gIiI7Ci0gICAgICBmb3IgKGF1dG8gY29uc3QmIGxpYk5hbWUgOiBjbGkuR2V0SXRlbXMoKSkgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiBsaWJJdGVtIDogY29uZmlnSXRlbU1hcFtjb25maWdOYW1lXSkgeworICAgICAgICBhdXRvIGNvbnN0JiBsaWJOYW1lID0gKmxpYkl0ZW07CiAgICAgICAgIGxpbmtMaWJzICs9IHNlcDsKICAgICAgICAgc2VwID0gIiAiOwogICAgICAgICBpZiAobGliTmFtZS5Jc1BhdGgpIHsKQEAgLTI5OTQsNiArMzI2Myw3IEBACiAgIHRoaXMtPkNsZWFyWENvZGVPYmplY3RzKCk7CiAgIHRoaXMtPlJvb3RPYmplY3QgPSBudWxscHRyOwogICB0aGlzLT5NYWluR3JvdXBDaGlsZHJlbiA9IG51bGxwdHI7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwID0gbnVsbHB0cjsKICAgY21YQ29kZU9iamVjdCogZ3JvdXAgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6QVRUUklCVVRFX0dST1VQKTsKICAgZ3JvdXAtPkFkZEF0dHJpYnV0ZSgiQ09QWV9QSEFTRV9TVFJJUCIsIHRoaXMtPkNyZWF0ZVN0cmluZygiTk8iKSk7CiAgIGNtWENvZGVPYmplY3QqIGxpc3RPYmpzID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok9CSkVDVF9MSVNUKTsKQEAgLTMwMjgsNiArMzI5OCwxNSBAQAogICBwcm9kdWN0R3JvdXAtPkFkZEF0dHJpYnV0ZSgiY2hpbGRyZW4iLCBwcm9kdWN0R3JvdXBDaGlsZHJlbik7CiAgIHRoaXMtPk1haW5Hcm91cENoaWxkcmVuLT5BZGRPYmplY3QocHJvZHVjdEdyb3VwKTsKIAorICB0aGlzLT5GcmFtZXdvcmtHcm91cCA9IHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhHcm91cCk7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwLT5BZGRBdHRyaWJ1dGUoIm5hbWUiLCB0aGlzLT5DcmVhdGVTdHJpbmcoIkZyYW1ld29ya3MiKSk7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwLT5BZGRBdHRyaWJ1dGUoInNvdXJjZVRyZWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZygiPGdyb3VwPiIpKTsKKyAgY21YQ29kZU9iamVjdCogZnJhbWV3b3JrR3JvdXBDaGlsZHJlbiA9CisgICAgdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok9CSkVDVF9MSVNUKTsKKyAgdGhpcy0+RnJhbWV3b3JrR3JvdXAtPkFkZEF0dHJpYnV0ZSgiY2hpbGRyZW4iLCBmcmFtZXdvcmtHcm91cENoaWxkcmVuKTsKKyAgdGhpcy0+TWFpbkdyb3VwQ2hpbGRyZW4tPkFkZE9iamVjdCh0aGlzLT5GcmFtZXdvcmtHcm91cCk7CisKICAgdGhpcy0+Um9vdE9iamVjdCA9IHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhQcm9qZWN0KTsKICAgdGhpcy0+Um9vdE9iamVjdC0+U2V0Q29tbWVudCgiUHJvamVjdCBvYmplY3QiKTsKIApAQCAtMzEwNCw2ICszMzgzLDE0IEBACiAgIGlmIChhcmNocy5lbXB0eSgpKSB7CiAgICAgLy8gVGVsbCBYY29kZSB0byB1c2UgTkFUSVZFX0FSQ0ggaW5zdGVhZCBvZiBBUkNIUy4KICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIk9OTFlfQUNUSVZFX0FSQ0giLCB0aGlzLT5DcmVhdGVTdHJpbmcoIllFUyIpKTsKKyAgICAvLyBXaGVuIHRhcmdldGluZyBtYWNPUywgdXNlIG9ubHkgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLgorICAgIGlmICh0aGlzLT5TeXN0ZW1OYW1lID09ICJEYXJ3aW4iX3MgJiYKKyAgICAgICAgKCFzeXNyb290IHx8ICEqc3lzcm9vdCB8fAorICAgICAgICAgY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN5c3Jvb3QpLmZpbmQoIm1hY29zIikgIT0KKyAgICAgICAgICAgc3RkOjpzdHJpbmc6Om5wb3MpKSB7CisgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIkFSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoIiQoTkFUSVZFX0FSQ0hfQUNUVUFMKSIpKTsKKyAgICB9CiAgIH0gZWxzZSB7CiAgICAgLy8gVGVsbCBYY29kZSB0byB1c2UgQVJDSFMgKE9OTFlfQUNUSVZFX0FSQ0ggZGVmYXVsdHMgdG8gTk8pLgogICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiQVJDSFMiLCB0aGlzLT5DcmVhdGVTdHJpbmcoYXJjaHMpKTsKQEAgLTMxMzUsMTggKzM0MjIsMjQgQEAKICAgc3RkOjpzdHJpbmcgc3ltcm9vdCA9IGNtU3RyQ2F0KHJvb3QtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9idWlsZCIpOwogICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIlNZTVJPT1QiLCB0aGlzLT5DcmVhdGVTdHJpbmcoc3ltcm9vdCkpOwogCisgIC8vIEluc2lkZSBhIHRyeV9jb21waWxlIHByb2plY3QsIGRvIG5vdCByZXF1aXJlIHNpZ25pbmcgb24gYW55IHBsYXRmb3JtLgorICBpZiAodGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0SXNJblRyeUNvbXBpbGUoKSkgeworICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiQ09ERV9TSUdOSU5HX0FMTE9XRUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoIk5PIikpOworICB9CisKICAgZm9yIChhdXRvJiBjb25maWcgOiBjb25maWdzKSB7CiAgICAgY21YQ29kZU9iamVjdCogYnVpbGRTZXR0aW5nc0ZvckNmZyA9IHRoaXMtPkNyZWF0ZUZsYXRDbG9uZShidWlsZFNldHRpbmdzKTsKIAogICAgIC8vIFB1dCB0aGlzIGxhc3Qgc28gaXQgY2FuIG92ZXJyaWRlIGV4aXN0aW5nIHNldHRpbmdzCiAgICAgLy8gQ29udmVydCAiQ01BS0VfWENPREVfQVRUUklCVVRFXyoiIHZhcmlhYmxlcyBkaXJlY3RseS4KICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhciA6IHRoaXMtPkN1cnJlbnRNYWtlZmlsZS0+R2V0RGVmaW5pdGlvbnMoKSkgewotICAgICAgaWYgKHZhci5maW5kKCJDTUFLRV9YQ09ERV9BVFRSSUJVVEVfIikgPT0gMCkgeworICAgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeCh2YXIsICJDTUFLRV9YQ09ERV9BVFRSSUJVVEVfIikpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgYXR0cmlidXRlID0gdmFyLnN1YnN0cigyMik7CiAgICAgICAgIHRoaXMtPkZpbHRlckNvbmZpZ3VyYXRpb25BdHRyaWJ1dGUoY29uZmlnLmZpcnN0LCBhdHRyaWJ1dGUpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZS5lbXB0eSgpKSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgcHJvY2Vzc2VkID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICAgIHRoaXMtPkN1cnJlbnRNYWtlZmlsZS0+R2V0RGVmaW5pdGlvbih2YXIpLAorICAgICAgICAgICAgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbih2YXIpLAogICAgICAgICAgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLCBjb25maWcuZmlyc3QpOwogICAgICAgICAgIGJ1aWxkU2V0dGluZ3NGb3JDZmctPkFkZEF0dHJpYnV0ZShhdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZyhwcm9jZXNzZWQpKTsKQEAgLTMxOTcsMTQgKzM0OTAsMTQgQEAKIHZvaWQgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q29tcHV0ZUFyY2hpdGVjdHVyZXMoY21NYWtlZmlsZSogbWYpCiB7CiAgIHRoaXMtPkFyY2hpdGVjdHVyZXMuY2xlYXIoKTsKLSAgY29uc3QgY2hhciogb3N4QXJjaCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIpOwogICBjb25zdCBjaGFyKiBzeXNyb290ID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX09TWF9TWVNST09UIik7Ci0gIGlmIChvc3hBcmNoICYmIHN5c3Jvb3QpIHsKLSAgICBjbUV4cGFuZExpc3Qoc3RkOjpzdHJpbmcob3N4QXJjaCksIHRoaXMtPkFyY2hpdGVjdHVyZXMpOworICBpZiAoc3lzcm9vdCkgeworICAgIG1mLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIsIHRoaXMtPkFyY2hpdGVjdHVyZXMpOwogICB9CiAKICAgaWYgKHRoaXMtPkFyY2hpdGVjdHVyZXMuZW1wdHkoKSkgewotICAgIC8vIFdpdGggbm8gQVJDSFMgd2UgdXNlIE9OTFlfQUNUSVZFX0FSQ0guCisgICAgLy8gV2l0aCBubyBBUkNIUyB3ZSB1c2UgT05MWV9BQ1RJVkVfQVJDSCBhbmQgcG9zc2libHkgYQorICAgIC8vIHBsYXRmb3JtLXNwZWNpZmljIGRlZmF1bHQgQVJDSFMgcGxhY2Vob2xkZXIgdmFsdWUuCiAgICAgLy8gTG9vayB1cCB0aGUgYXJjaCB0aGF0IFhjb2RlIGNob29zZXMgaW4gdGhpcyBjYXNlLgogICAgIGlmIChjb25zdCBjaGFyKiBhcmNoID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX1hDT0RFX0FSQ0hTIikpIHsKICAgICAgIHRoaXMtPk9iamVjdERpckFyY2hEZWZhdWx0ID0gYXJjaDsKQEAgLTMzOTAsNyArMzY4Myw3IEBACiAgIC8vIGNvbGxlY3QgYWxsIHRlc3RzIGZvciB0aGUgdGFyZ2V0cwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21YQ29kZVNjaGVtZTo6VGVzdE9iamVjdHM+IHRlc3RhYmxlczsKIAotICBmb3IgKGF1dG8gb2JqIDogdGhpcy0+WENvZGVPYmplY3RzKSB7CisgIGZvciAoY29uc3QgYXV0byYgb2JqIDogdGhpcy0+WENvZGVPYmplY3RzKSB7CiAgICAgaWYgKG9iai0+R2V0VHlwZSgpICE9IGNtWENvZGVPYmplY3Q6Ok9CSkVDVCB8fAogICAgICAgICBvYmotPkdldElzQSgpICE9IGNtWENvZGVPYmplY3Q6OlBCWE5hdGl2ZVRhcmdldCkgewogICAgICAgY29udGludWU7CkBAIC0zNDAwLDEyICszNjkzLDEyIEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICBjb25zdCBjaGFyKiB0ZXN0ZWUgPSBvYmotPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiWENURVNUX1RFU1RFRSIpOworICAgIGNtUHJvcCB0ZXN0ZWUgPSBvYmotPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiWENURVNUX1RFU1RFRSIpOwogICAgIGlmICghdGVzdGVlKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICB0ZXN0YWJsZXNbdGVzdGVlXS5wdXNoX2JhY2sob2JqKTsKKyAgICB0ZXN0YWJsZXNbKnRlc3RlZV0ucHVzaF9iYWNrKG9iai5nZXQoKSk7CiAgIH0KIAogICAvLyBnZW5lcmF0ZSBzY2hlbWUKQEAgLTM0MTQsMTQgKzM3MDcsMTQgQEAKICAgLy8gU2luY2UgdGhlIGxvd2VzdCBhdmFpbGFibGUgWGNvZGUgdmVyc2lvbiBmb3IgdGVzdGluZyB3YXMgNi40LAogICAvLyBJJ20gc2V0dGluZyB0aGlzIGFzIGEgbGltaXQgdGhlbgogICBpZiAodGhpcy0+WGNvZGVWZXJzaW9uID49IDY0KSB7Ci0gICAgZm9yIChhdXRvIG9iaiA6IHRoaXMtPlhDb2RlT2JqZWN0cykgeworICAgIGZvciAoY29uc3QgYXV0byYgb2JqIDogdGhpcy0+WENvZGVPYmplY3RzKSB7CiAgICAgICBpZiAob2JqLT5HZXRUeXBlKCkgPT0gY21YQ29kZU9iamVjdDo6T0JKRUNUICYmCiAgICAgICAgICAgKG9iai0+R2V0SXNBKCkgPT0gY21YQ29kZU9iamVjdDo6UEJYTmF0aXZlVGFyZ2V0IHx8CiAgICAgICAgICAgIG9iai0+R2V0SXNBKCkgPT0gY21YQ29kZU9iamVjdDo6UEJYQWdncmVnYXRlVGFyZ2V0KSAmJgogICAgICAgICAgIChyb290LT5HZXRNYWtlZmlsZSgpLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldElzSW5UcnlDb21waWxlKCkgfHwKICAgICAgICAgICAgb2JqLT5HZXRUYXJnZXQoKS0+R2V0UHJvcGVydHlBc0Jvb2woIlhDT0RFX0dFTkVSQVRFX1NDSEVNRSIpKSkgewogICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSA9IG9iai0+R2V0VGFyZ2V0KCktPkdldE5hbWUoKTsKLSAgICAgICAgY21YQ29kZVNjaGVtZSBzY2htKHJvb3QsIG9iaiwgdGVzdGFibGVzW3RhcmdldE5hbWVdLAorICAgICAgICBjbVhDb2RlU2NoZW1lIHNjaG0ocm9vdCwgb2JqLmdldCgpLCB0ZXN0YWJsZXNbdGFyZ2V0TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DdXJyZW50Q29uZmlndXJhdGlvblR5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+WGNvZGVWZXJzaW9uKTsKICAgICAgICAgc2NobS5Xcml0ZVhDb2RlU2hhcmVkU2NoZW1lKHhjUHJvakRpciwKQEAgLTM1NDcsNyArMzg0MCw3IEBACiAKIHN0ZDo6c3RyaW5nIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OlhDb2RlRXNjYXBlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcCkKIHsKLSAgaWYgKHAuZmluZCgnICcpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgIGlmIChwLmZpbmRfZmlyc3Rfb2YoIiBbXSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgc3RkOjpzdHJpbmcgdCA9IGNtU3RyQ2F0KCciJywgcCwgJyInKTsKICAgICByZXR1cm4gdDsKICAgfQpAQCAtMzY5MywxNSArMzk4NiwxNCBAQAogCiBib29sIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OlVzZUVmZmVjdGl2ZVBsYXRmb3JtTmFtZShjbU1ha2VmaWxlKiBtZikgY29uc3QKIHsKLSAgY29uc3QgY2hhciogZXBuVmFsdWUgPQotICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoCi0gICAgICAiWENPREVfRU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRSIpOworICBjbVByb3AgZXBuVmFsdWUgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAorICAgICJYQ09ERV9FTUlUX0VGRkVDVElWRV9QTEFURk9STV9OQU1FIik7CiAKICAgaWYgKCFlcG5WYWx1ZSkgewogICAgIHJldHVybiBtZi0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKTsKICAgfQogCi0gIHJldHVybiBjbUlzT24oZXBuVmFsdWUpOworICByZXR1cm4gY21Jc09uKCplcG5WYWx1ZSk7CiB9CiAKIGJvb2wgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6U2hvdWxkU3RyaXBSZXNvdXJjZVBhdGgoY21NYWtlZmlsZSopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsWENvZGVHZW5lcmF0b3IuaAppbmRleCBkZjY4ZjgwLi43MDE4ZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmgKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKiBcY2xhc3MgY21HbG9iYWxYQ29kZUdlbmVyYXRvcgogICogXGJyaWVmIFdyaXRlIGEgVW5peCBtYWtlZmlsZXMuCiAgKgotICogY21HbG9iYWxYQ29kZUdlbmVyYXRvciBtYW5hZ2VzIFVOSVggYnVpbGQgcHJvY2VzcyBmb3IgYSB0cmVlCisgKiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yIG1hbmFnZXMgWGNvZGUgYnVpbGQgcHJvY2VzcyBmb3IgYSB0cmVlCiAgKi8KIGNsYXNzIGNtR2xvYmFsWENvZGVHZW5lcmF0b3IgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3IKIHsKQEAgLTM3LDYgKzM3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlcnNpb25fbnVtYmVyKTsKICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKTsKIAorICBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yKGNvbnN0IGNtR2xvYmFsWENvZGVHZW5lcmF0b3ImKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21HbG9iYWxYQ29kZUdlbmVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGNtR2xvYmFsWENvZGVHZW5lcmF0b3ImKSA9CisgICAgZGVsZXRlOworCiAgIC8vISBHZXQgdGhlIG5hbWUgZm9yIHRoZSBnZW5lcmF0b3IuCiAgIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCBvdmVycmlkZQogICB7CkBAIC0xMDUsNiArMTA5LDcgQEAKIAogICBib29sIFNob3VsZFN0cmlwUmVzb3VyY2VQYXRoKGNtTWFrZWZpbGUqKSBjb25zdCBvdmVycmlkZTsKIAorICBib29sIFNldFN5c3RlbU5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIHMsIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKICAgYm9vbCBTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgYm9vbCBidWlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKICAgdm9pZCBBcHBlbmRGbGFnKHN0ZDo6c3RyaW5nJiBmbGFncywgc3RkOjpzdHJpbmcgY29uc3QmIGZsYWcpIGNvbnN0OwpAQCAtMTk5LDEwICsyMDQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU291cmNlRmlsZSogc2YpOwotICBjbVhDb2RlT2JqZWN0KiBDcmVhdGVYQ29kZVNvdXJjZUZpbGVGcm9tUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgZnVsbHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVNvdXJjZUZpbGUqIHNmKTsKKyAgY21YQ29kZU9iamVjdCogQ3JlYXRlWENvZGVCdWlsZEZpbGVGcm9tUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgZnVsbHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVNvdXJjZUZpbGUqIHNmKTsKICAgY21YQ29kZU9iamVjdCogQ3JlYXRlWENvZGVGaWxlUmVmZXJlbmNlKGNtU291cmNlRmlsZSogc2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KTsKICAgY21YQ29kZU9iamVjdCogQ3JlYXRlWENvZGVTb3VyY2VGaWxlKGNtTG9jYWxHZW5lcmF0b3IqIGdlbiwgY21Tb3VyY2VGaWxlKiBzZiwKQEAgLTI0OSw3ICsyNTQsNyBAQAogICB1bnNpZ25lZCBpbnQgWGNvZGVWZXJzaW9uOwogICBzdGQ6OnN0cmluZyBWZXJzaW9uU3RyaW5nOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gWENvZGVPYmplY3RJRHM7Ci0gIHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiBYQ29kZU9iamVjdHM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0Pj4gWENvZGVPYmplY3RzOwogICBjbVhDb2RlT2JqZWN0KiBSb290T2JqZWN0OwogCiBwcml2YXRlOgpAQCAtMjczLDEwICsyNzgsMTEgQEAKICAgdm9pZCBDb21wdXRlQXJjaGl0ZWN0dXJlcyhjbU1ha2VmaWxlKiBtZik7CiAgIHZvaWQgQ29tcHV0ZU9iamVjdERpckFyY2goY21NYWtlZmlsZSogbWYpOwogCi0gIHZvaWQgYWRkT2JqZWN0KGNtWENvZGVPYmplY3QqIG9iaik7CisgIHZvaWQgYWRkT2JqZWN0KHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0PiBvYmopOwogICBzdGQ6OnN0cmluZyBQb3N0QnVpbGRNYWtlVGFyZ2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnTmFtZSk7CiAgIGNtWENvZGVPYmplY3QqIE1haW5Hcm91cENoaWxkcmVuOworICBjbVhDb2RlT2JqZWN0KiBGcmFtZXdvcmtHcm91cDsKICAgY21NYWtlZmlsZSogQ3VycmVudE1ha2VmaWxlOwogICBjbUxvY2FsR2VuZXJhdG9yKiBDdXJyZW50TG9jYWxHZW5lcmF0b3I7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBDdXJyZW50Q29uZmlndXJhdGlvblR5cGVzOwpAQCAtMjkwLDEyICsyOTYsMTYgQEAKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtWENvZGVPYmplY3QqPiBHcm91cE5hbWVNYXA7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbVhDb2RlT2JqZWN0Kj4gVGFyZ2V0R3JvdXA7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbVhDb2RlT2JqZWN0Kj4gRmlsZVJlZnM7CisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbVhDb2RlT2JqZWN0Kj4gRXh0ZXJuYWxMaWJSZWZzOwogICBzdGQ6Om1hcDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCosIGNtWENvZGVPYmplY3QqPiBYQ29kZU9iamVjdE1hcDsKKyAgc3RkOjptYXA8Y21YQ29kZU9iamVjdCosIGNtWENvZGVPYmplY3QqPiBGaWxlUmVmVG9CdWlsZEZpbGVNYXA7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBBcmNoaXRlY3R1cmVzOwogICBzdGQ6OnN0cmluZyBPYmplY3REaXJBcmNoRGVmYXVsdDsKICAgc3RkOjpzdHJpbmcgT2JqZWN0RGlyQXJjaDsKKyAgc3RkOjpzdHJpbmcgU3lzdGVtTmFtZTsKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9yVG9vbHNldDsKICAgc3RkOjptYXA8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqLCBzaXplX3Q+IFRhcmdldE9yZGVySW5kZXg7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBFbmFibGVkTGFuZ3M7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdyYXBoVml6V3JpdGVyLmN4eCBiL1NvdXJjZS9jbUdyYXBoVml6V3JpdGVyLmN4eAppbmRleCBlMDNiMmNhLi5jMjMxNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HcmFwaFZpeldyaXRlci5jeHgKKysrIGIvU291cmNlL2NtR3JhcGhWaXpXcml0ZXIuY3h4CkBAIC00MDIsMTMgKzQwMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKIHsKICAgYXV0byBjb25zdCBlc2NhcGVkR3JhcGhOYW1lID0gRXNjYXBlRm9yRG90RmlsZShuYW1lKTsKLSAgZnMgPDwgImRpZ3JhcGggXCIiIDw8IGVzY2FwZWRHcmFwaE5hbWUgPDwgIlwiIHsiIDw8IHN0ZDo6ZW5kbDsKLSAgZnMgPDwgdGhpcy0+R3JhcGhIZWFkZXIgPDwgc3RkOjplbmRsOworICBmcyA8PCAiZGlncmFwaCBcIiIgPDwgZXNjYXBlZEdyYXBoTmFtZSA8PCAiXCIge1xuIgorICAgICA8PCB0aGlzLT5HcmFwaEhlYWRlciA8PCAnXG4nOwogfQogCiB2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlRm9vdGVyKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpCiB7Ci0gIGZzIDw8ICJ9IiA8PCBzdGQ6OmVuZGw7CisgIGZzIDw8ICJ9XG4iOwogfQogCiB2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlTGVnZW5kKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpCkBAIC00MTYsNTIgKzQxNiw0NiBAQAogICAvLyBOb3RlIHRoYXQgdGhlIHN1YmdyYXBoIG5hbWUgbXVzdCBzdGFydCB3aXRoICJjbHVzdGVyIiwgYXMgZG9uZSBoZXJlLCB0bwogICAvLyBtYWtlIEdyYXBodml6IGxheW91dCBlbmdpbmVzIGRvIHRoZSByaWdodCB0aGluZyBhbmQga2VlcCB0aGUgbm9kZXMKICAgLy8gdG9nZXRoZXIuCi0gIGZzIDw8ICJzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsiIDw8IHN0ZDo6ZW5kbDsKLSAgZnMgPDwgIiAgbGFiZWwgPSBcIkxlZ2VuZFwiOyIgPDwgc3RkOjplbmRsOwotICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBib3ggc3Vycm91bmRpbmcgdGhlIGxlZ2VuZC4KLSAgZnMgPDwgIiAgY29sb3IgPSBibGFjazsiIDw8IHN0ZDo6ZW5kbDsKLSAgLy8gV2UgdXNlIGludmlzaWJsZSBlZGdlcyBqdXN0IHRvIGVuZm9yY2UgdGhlIGxheW91dC4KLSAgZnMgPDwgIiAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsiIDw8IHN0ZDo6ZW5kbDsKLQotICAvLyBOb2Rlcy4KLSAgZnMgPDwgIiAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9IFwiRXhlY3V0YWJsZVwiLCBzaGFwZSA9ICIKLSAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9FWEVDVVRBQkxFIDw8ICIgXTsiIDw8IHN0ZDo6ZW5kbDsKLQotICBmcyA8PCAiICBsZWdlbmROb2RlMSBbIGxhYmVsID0gXCJTdGF0aWMgTGlicmFyeVwiLCBzaGFwZSA9ICIKLSAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX1NUQVRJQyA8PCAiIF07IiA8PCBzdGQ6OmVuZGw7Ci0gIGZzIDw8ICIgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSBcIlNoYXJlZCBMaWJyYXJ5XCIsIHNoYXBlID0gIgotICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU0hBUkVEIDw8ICIgXTsiIDw8IHN0ZDo6ZW5kbDsKLSAgZnMgPDwgIiAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9IFwiTW9kdWxlIExpYnJhcnlcIiwgc2hhcGUgPSAiCi0gICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9NT0RVTEUgPDwgIiBdOyIgPDwgc3RkOjplbmRsOwotCi0gIGZzIDw8ICIgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSBcIkludGVyZmFjZSBMaWJyYXJ5XCIsIHNoYXBlID0gIgotICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfSU5URVJGQUNFIDw8ICIgXTsiIDw8IHN0ZDo6ZW5kbDsKLSAgZnMgPDwgIiAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9IFwiT2JqZWN0IExpYnJhcnlcIiwgc2hhcGUgPSAiCi0gICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9PQkpFQ1QgPDwgIiBdOyIgPDwgc3RkOjplbmRsOwotICBmcyA8PCAiICBsZWdlbmROb2RlNiBbIGxhYmVsID0gXCJVbmtub3duIExpYnJhcnlcIiwgc2hhcGUgPSAiCi0gICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9VTktOT1dOIDw8ICIgXTsiIDw8IHN0ZDo6ZW5kbDsKLQotICBmcyA8PCAiICBsZWdlbmROb2RlNyBbIGxhYmVsID0gXCJDdXN0b20gVGFyZ2V0XCIsIHNoYXBlID0gIgotICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX1VUSUxJVFkgPDwgIiBdOyIgPDwgc3RkOjplbmRsOwotCi0gIC8vIEVkZ2VzLgotICAvLyBTb21lIG9mIHRob3NlIGFyZSBkdW1teSAoaW52aXNpYmxlKSBlZGdlcyB0byBlbmZvcmNlIGEgbGF5b3V0LgotICBmcyA8PCAiICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gIiA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX1BVQkxJQwotICAgICA8PCAiIF07IiA8PCBzdGQ6OmVuZGw7Ci0gIGZzIDw8ICIgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSAiIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFVCTElDCi0gICAgIDw8ICIgXTsiIDw8IHN0ZDo6ZW5kbDsKLSAgZnMgPDwgIiAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7IiA8PCBzdGQ6OmVuZGw7Ci0KLSAgZnMgPDwgIiAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9IFwiSW50ZXJmYWNlXCIsIHN0eWxlID0gIgotICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX0lOVEVSRkFDRSA8PCAiIF07IiA8PCBzdGQ6OmVuZGw7Ci0gIGZzIDw8ICIgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSBcIlByaXZhdGVcIiwgc3R5bGUgPSAiCi0gICAgIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFJJVkFURSA8PCAiIF07IiA8PCBzdGQ6OmVuZGw7Ci0gIGZzIDw8ICIgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSAiIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFVCTElDCi0gICAgIDw8ICIgXTsiIDw8IHN0ZDo6ZW5kbDsKLQotICBmcyA8PCAiICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsiIDw8IHN0ZDo6ZW5kbDsKLQotICBmcyA8PCAifSIgPDwgc3RkOjplbmRsOworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIGZzIDw8ICJzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHtcbiIKKyAgICAgICAgIiAgbGFiZWwgPSBcIkxlZ2VuZFwiO1xuIgorICAgICAgICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBib3ggc3Vycm91bmRpbmcgdGhlIGxlZ2VuZC4KKyAgICAgICAgIiAgY29sb3IgPSBibGFjaztcbiIKKyAgICAgICAgLy8gV2UgdXNlIGludmlzaWJsZSBlZGdlcyBqdXN0IHRvIGVuZm9yY2UgdGhlIGxheW91dC4KKyAgICAgICAgIiAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTtcbiIKKyAgICAgICAgLy8gTm9kZXMuCisgICAgICAgICIgIGxlZ2VuZE5vZGUwIFsgbGFiZWwgPSBcIkV4ZWN1dGFibGVcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfRVhFQ1VUQUJMRSA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUxIFsgbGFiZWwgPSBcIlN0YXRpYyBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU1RBVElDIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTIgWyBsYWJlbCA9IFwiU2hhcmVkIExpYnJhcnlcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9TSEFSRUQgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMyBbIGxhYmVsID0gXCJNb2R1bGUgTGlicmFyeVwiLCBzaGFwZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX01PRFVMRSA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSBcIkludGVyZmFjZSBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfSU5URVJGQUNFIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9IFwiT2JqZWN0IExpYnJhcnlcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9PQkpFQ1QgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlNiBbIGxhYmVsID0gXCJVbmtub3duIExpYnJhcnlcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9VTktOT1dOIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9IFwiQ3VzdG9tIFRhcmdldFwiLCBzaGFwZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9VVElMSVRZIDw8ICIgXTtcbiIKKyAgICAgICAgLy8gRWRnZXMuCisgICAgICAgIC8vIFNvbWUgb2YgdGhvc2UgYXJlIGR1bW15IChpbnZpc2libGUpIGVkZ2VzIHRvIGVuZm9yY2UgYSBsYXlvdXQuCisgICAgICAgICIgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUxIFsgc3R5bGUgPSAiCisgICAgIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFVCTElDIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfRURHRV9TVFlMRV9QVUJMSUMgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMztcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9IFwiSW50ZXJmYWNlXCIsIHN0eWxlID0gIgorICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX0lOVEVSRkFDRSA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSBcIlByaXZhdGVcIiwgc3R5bGUgPSAiCisgICAgIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFJJVkFURSA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSAiCisgICAgIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFVCTElDIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7XG4iCisgICAgICAgICJ9XG4iOworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiB9CiAKIHZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVOb2RlKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMsCkBAIC00NzQsNyArNDY4LDcgQEAKICAgYXV0byBjb25zdCBlc2NhcGVkTGFiZWwgPSBFc2NhcGVGb3JEb3RGaWxlKGl0ZW1OYW1lV2l0aEFsaWFzZXMpOwogCiAgIGZzIDw8ICIgICAgXCIiIDw8IG5vZGVOYW1lIDw8ICJcIiBbIGxhYmVsID0gXCIiIDw8IGVzY2FwZWRMYWJlbAotICAgICA8PCAiXCIsIHNoYXBlID0gIiA8PCBnZXRTaGFwZUZvclRhcmdldChpdGVtKSA8PCAiIF07IiA8PCBzdGQ6OmVuZGw7CisgICAgIDw8ICJcIiwgc2hhcGUgPSAiIDw8IGdldFNoYXBlRm9yVGFyZ2V0KGl0ZW0pIDw8ICIgXTtcbiI7CiB9CiAKIHZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVDb25uZWN0aW9uKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMsCkBAIC00ODYsMTEgKzQ4MCw5IEBACiAgIGF1dG8gY29uc3QmIGRlcGVuZGVlTmFtZSA9IGRlcGVuZGVlLkFzU3RyKCk7CiAKICAgZnMgPDwgIiAgICBcIiIgPDwgdGhpcy0+Tm9kZU5hbWVzW2RlcGVuZGVyTmFtZV0gPDwgIlwiIC0+IFwiIgotICAgICA8PCB0aGlzLT5Ob2RlTmFtZXNbZGVwZW5kZWVOYW1lXSA8PCAiXCIgIjsKLQotICBmcyA8PCBlZGdlU3R5bGU7Ci0KLSAgZnMgPDwgIiAvLyAiIDw8IGRlcGVuZGVyTmFtZSA8PCAiIC0+ICIgPDwgZGVwZW5kZWVOYW1lIDw8IHN0ZDo6ZW5kbDsKKyAgICAgPDwgdGhpcy0+Tm9kZU5hbWVzW2RlcGVuZGVlTmFtZV0gPDwgIlwiICIKKyAgICAgPDwgZWRnZVN0eWxlCisgICAgIDw8ICIgLy8gIiA8PCBkZXBlbmRlck5hbWUgPDwgIiAtPiAiIDw8IGRlcGVuZGVlTmFtZSA8PCAnXG4nOwogfQogCiBib29sIGNtR3JhcGhWaXpXcml0ZXI6Okl0ZW1FeGNsdWRlZChjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKQpAQCAtNTA2LDkgKzQ5OCw5IEBACiAgIH0KIAogICBpZiAoaXRlbS5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKLSAgICBpZiAoKGl0ZW1OYW1lLmZpbmQoIk5pZ2h0bHkiKSA9PSAwKSB8fAotICAgICAgICAoaXRlbU5hbWUuZmluZCgiQ29udGludW91cyIpID09IDApIHx8Ci0gICAgICAgIChpdGVtTmFtZS5maW5kKCJFeHBlcmltZW50YWwiKSA9PSAwKSkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoaXRlbU5hbWUsICJOaWdodGx5IikgfHwKKyAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KGl0ZW1OYW1lLCAiQ29udGludW91cyIpIHx8CisgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChpdGVtTmFtZSwgIkV4cGVyaW1lbnRhbCIpKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUlmQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21JZkNvbW1hbmQuY3h4CmluZGV4IDI5MGUwNjQuLjU4MDhmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUlmQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtSWZDb21tYW5kLmN4eApAQCAtNyw4ICs3LDcgQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUNvbmRpdGlvbkV2YWx1YXRvci5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbmNsdWRlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21JbmNsdWRlQ29tbWFuZC5jeHgKaW5kZXggMTQyNjRmNC4uYWU4MDFiYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5jbHVkZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUluY2x1ZGVDb21tYW5kLmN4eApAQCAtMiw3ICsyLDkgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtSW5jbHVkZUNvbW1hbmQuaCIKIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCkBAIC0xNiw2ICsxOCwxMSBAQAogYm9vbCBjbUluY2x1ZGVDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQogeworICBzdGF0aWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtUG9saWNpZXM6OlBvbGljeUlEPiBEZXByZWNhdGVkTW9kdWxlczsKKyAgaWYgKERlcHJlY2F0ZWRNb2R1bGVzLmVtcHR5KCkpIHsKKyAgICBEZXByZWNhdGVkTW9kdWxlc1siRG9jdW1lbnRhdGlvbiJdID0gY21Qb2xpY2llczo6Q01QMDEwNjsKKyAgfQorCiAgIGlmIChhcmdzLmVtcHR5KCkgfHwgYXJncy5zaXplKCkgPiA0KSB7CiAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiAgIgogICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSgpIG9ubHkgdGFrZXMgb25lIGZpbGUuIik7CkBAIC02NSw5ICs3MiwzNSBAQAogICB9CiAKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChmbmFtZSkpIHsKKyAgICBib29sIHN5c3RlbSA9IGZhbHNlOwogICAgIC8vIE5vdCBhIHBhdGguIE1heWJlIG1vZHVsZS4KICAgICBzdGQ6OnN0cmluZyBtb2R1bGUgPSBjbVN0ckNhdChmbmFtZSwgIi5jbWFrZSIpOwotICAgIHN0ZDo6c3RyaW5nIG1maWxlID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0TW9kdWxlc0ZpbGUobW9kdWxlKTsKKyAgICBzdGQ6OnN0cmluZyBtZmlsZSA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldE1vZHVsZXNGaWxlKG1vZHVsZSwgc3lzdGVtKTsKKworICAgIGlmIChzeXN0ZW0pIHsKKyAgICAgIGF1dG8gTW9kdWxlUG9saWN5ID0gRGVwcmVjYXRlZE1vZHVsZXMuZmluZChmbmFtZSk7CisgICAgICBpZiAoTW9kdWxlUG9saWN5ICE9IERlcHJlY2F0ZWRNb2R1bGVzLmVuZCgpKSB7CisgICAgICAgIGNtUG9saWNpZXM6OlBvbGljeVN0YXR1cyBQb2xpY3lTdGF0dXMgPQorICAgICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFBvbGljeVN0YXR1cyhNb2R1bGVQb2xpY3ktPnNlY29uZCk7CisgICAgICAgIHN3aXRjaCAoUG9saWN5U3RhdHVzKSB7CisgICAgICAgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOiB7CisgICAgICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywKKyAgICAgICAgICAgICAgY21TdHJDYXQoY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhNb2R1bGVQb2xpY3ktPnNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICJcbiIpKTsKKyAgICAgICAgICAgIENNX0ZBTExUSFJPVUdIOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIGNtUG9saWNpZXM6Ok9MRDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKKyAgICAgICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0FMV0FZUzoKKyAgICAgICAgICBjYXNlIGNtUG9saWNpZXM6Ok5FVzoKKyAgICAgICAgICAgIG1maWxlID0gIiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAgIGlmICghbWZpbGUuZW1wdHkoKSkgewogICAgICAgZm5hbWUgPSBtZmlsZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZC5jeHgKaW5kZXggZDY2OWVkNy4uZGRkNmMyMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxDb21tYW5kLmN4eApAQCAtOCwxMSArOCwxMCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCi0KICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUV4cG9ydFNldC5oIgpAQCAtMjksNiArMjgsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN1YmNvbW1hbmRUYWJsZS5oIgpAQCAtNjYxLDcgKzY2MSw2IEBACiAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uIEFuIElOVEVSRkFDRV9MSUJSQVJZIGNhbiBiZSBpbnN0YWxsZWQsIGJ1dCB0aGUKICAgICAgICAgLy8gb25seSBlZmZlY3Qgb2YgdGhhdCBpcyB0byBtYWtlIGl0IGV4cG9ydGFibGUuIEl0IGluc3RhbGxzIG5vCiAgICAgICAgIC8vIG90aGVyIGZpbGVzIGl0c2VsZi4KLSAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gZHVlIHRvIHRoZSBhYm92ZSB0eXBlIGNoZWNrLgogICAgICAgICAvLyBJZ25vcmUgdGhlIGNhc2UuCkBAIC02ODAsOSArNjc5LDkgQEAKICAgICB9CiAKICAgICBpZiAoY3JlYXRlSW5zdGFsbEdlbmVyYXRvcnNGb3JUYXJnZXRGaWxlU2V0cyAmJiAhbmFtZWxpbmtPbmx5KSB7Ci0gICAgICBjb25zdCBjaGFyKiBmaWxlcyA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiUFJJVkFURV9IRUFERVIiKTsKLSAgICAgIGlmICgoZmlsZXMpICYmICgqZmlsZXMpKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KGZpbGVzKTsKKyAgICAgIGNtUHJvcCBmaWxlcyA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiUFJJVkFURV9IRUFERVIiKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGZpbGVzKSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWJzRmlsZXM7CiAgICAgICAgIGlmICghaGVscGVyLk1ha2VGaWxlc0Z1bGxQYXRoKCJQUklWQVRFX0hFQURFUiIsIHJlbEZpbGVzLCBhYnNGaWxlcykpIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MDMsOCArNzAyLDggQEAKICAgICAgIH0KIAogICAgICAgZmlsZXMgPSB0YXJnZXQuR2V0UHJvcGVydHkoIlBVQkxJQ19IRUFERVIiKTsKLSAgICAgIGlmICgoZmlsZXMpICYmICgqZmlsZXMpKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KGZpbGVzKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGZpbGVzKSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWJzRmlsZXM7CiAgICAgICAgIGlmICghaGVscGVyLk1ha2VGaWxlc0Z1bGxQYXRoKCJQVUJMSUNfSEVBREVSIiwgcmVsRmlsZXMsIGFic0ZpbGVzKSkgewogICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTcyNSw4ICs3MjQsOCBAQAogICAgICAgfQogCiAgICAgICBmaWxlcyA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiUkVTT1VSQ0UiKTsKLSAgICAgIGlmICgoZmlsZXMpICYmICgqZmlsZXMpKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KGZpbGVzKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGZpbGVzKSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWJzRmlsZXM7CiAgICAgICAgIGlmICghaGVscGVyLk1ha2VGaWxlc0Z1bGxQYXRoKCJSRVNPVVJDRSIsIHJlbEZpbGVzLCBhYnNGaWxlcykpIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZEFyZ3VtZW50cy5jeHggYi9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZEFyZ3VtZW50cy5jeHgKaW5kZXggMzFiYTYzZi4uYTAzNDY4OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbENvbW1hbmRBcmd1bWVudHMuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxDb21tYW5kQXJndW1lbnRzLmN4eApAQCAtNCw3ICs0LDcgQEAKIAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5jeHgKaW5kZXggMmM1M2EyOC4uNmUzNTA4YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5jeHgKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAogIyAgaW5jbHVkZSAiY21FeHBvcnRJbnN0YWxsQW5kcm9pZE1LR2VuZXJhdG9yLmgiCiAjZW5kaWYKQEAgLTMzLDE4ICszNSwxNSBAQAogewogICBpZiAoYW5kcm9pZCkgewogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKLSAgICB0aGlzLT5FRkdlbiA9IG5ldyBjbUV4cG9ydEluc3RhbGxBbmRyb2lkTUtHZW5lcmF0b3IodGhpcyk7CisgICAgdGhpcy0+RUZHZW4gPSBjbTo6bWFrZV91bmlxdWU8Y21FeHBvcnRJbnN0YWxsQW5kcm9pZE1LR2VuZXJhdG9yPih0aGlzKTsKICNlbmRpZgogICB9IGVsc2UgewotICAgIHRoaXMtPkVGR2VuID0gbmV3IGNtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3IodGhpcyk7CisgICAgdGhpcy0+RUZHZW4gPSBjbTo6bWFrZV91bmlxdWU8Y21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvcj4odGhpcyk7CiAgIH0KICAgZXhwb3J0U2V0LT5BZGRJbnN0YWxsYXRpb24odGhpcyk7CiB9CiAKLWNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcjo6fmNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcigpCi17Ci0gIGRlbGV0ZSB0aGlzLT5FRkdlbjsKLX0KK2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcjo6fmNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogYm9vbCBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3I6OkNvbXB1dGUoY21Mb2NhbEdlbmVyYXRvciogbGcpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yLmgKaW5kZXggY2YyOGIzNS4uNDNkZDAwZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuaApAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC0zMCw4ICszMSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBzdGQ6OnN0cmluZyBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWVfc3BhY2UsIGJvb2wgZXhwb3J0T2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbmRyb2lkKTsKKyAgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKGNvbnN0IGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvciYpID0gZGVsZXRlOwogICB+Y21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKKyAgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yJikgPQorICAgIGRlbGV0ZTsKKwogICBjbUV4cG9ydFNldCogR2V0RXhwb3J0U2V0KCkgeyByZXR1cm4gdGhpcy0+RXhwb3J0U2V0OyB9CiAKICAgYm9vbCBDb21wdXRlKGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBvdmVycmlkZTsKQEAgLTYxLDcgKzY2LDcgQEAKIAogICBzdGQ6OnN0cmluZyBUZW1wRGlyOwogICBzdGQ6OnN0cmluZyBNYWluSW1wb3J0RmlsZTsKLSAgY21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvciogRUZHZW47CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yPiBFRkdlbjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbFRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCBlMDVkYWE4Li4xNzhkNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtMTMzLDggKzEzNCwxMCBAQAogICAgICAgICBjbU1ha2VmaWxlIGNvbnN0KiBtZiA9IHRoaXMtPlRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpOwogCiAgICAgICAgIC8vIEdldCBBcHAgQnVuZGxlIEV4dGVuc2lvbgotICAgICAgICBjb25zdCBjaGFyKiBleHQgPSB0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7Ci0gICAgICAgIGlmICghZXh0KSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dDsKKyAgICAgICAgaWYgKGNtUHJvcCBwID0gdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpKSB7CisgICAgICAgICAgZXh0ID0gKnA7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgZXh0ID0gImFwcCI7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5jeHggYi9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmN4eAppbmRleCBhNjVhZTAzLi4zMjM5NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmN4eApAQCAtNDIsNyArNDIsOCBAQAogfQogCiB2b2lkIGNtSW5zdGFsbGVkRmlsZTo6U2V0UHJvcGVydHkoY21NYWtlZmlsZSBjb25zdCogbWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKIHsKICAgdGhpcy0+UmVtb3ZlUHJvcGVydHkocHJvcCk7CiAgIHRoaXMtPkFwcGVuZFByb3BlcnR5KG1mLCBwcm9wLCB2YWx1ZSk7CkBAIC01MCw3ICs1MSw4IEBACiAKIHZvaWQgY21JbnN0YWxsZWRGaWxlOjpBcHBlbmRQcm9wZXJ0eShjbU1ha2VmaWxlIGNvbnN0KiBtZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSwgYm9vbCAvKmFzU3RyaW5nKi8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLyphc1N0cmluZyovKQogewogICBjbUxpc3RGaWxlQmFja3RyYWNlIGJhY2t0cmFjZSA9IG1mLT5HZXRCYWNrdHJhY2UoKTsKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlKGJhY2t0cmFjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmggYi9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmgKaW5kZXggNjk4MTUxZS4uMDdmNzA4MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5oCisrKyBiL1NvdXJjZS9jbUluc3RhbGxlZEZpbGUuaApAQCAtNDksMTAgKzQ5LDEwIEBACiAgIHZvaWQgUmVtb3ZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApOwogCiAgIHZvaWQgU2V0UHJvcGVydHkoY21NYWtlZmlsZSBjb25zdCogbWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwogCiAgIHZvaWQgQXBwZW5kUHJvcGVydHkoY21NYWtlZmlsZSBjb25zdCogbWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLCBib29sIGFzU3RyaW5nID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKIAogICBib29sIEhhc1Byb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtSnNvbk9iamVjdHMuY3h4IGIvU291cmNlL2NtSnNvbk9iamVjdHMuY3h4CmluZGV4IGRkMzYzODYuLjNhMmUzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUpzb25PYmplY3RzLmN4eAorKysgYi9Tb3VyY2UvY21Kc29uT2JqZWN0cy5jeHgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjbUxpbmtMaW5lQ29tcHV0ZXIuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVByb3BlcnR5TWFwLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgpAQCAtNTAsMTEgKzUxLDcgQEAKICAgICByZXR1cm4gY29uZmlndXJhdGlvbnM7CiAgIH0KIAotICBtYWtlZmlsZXNbMF0tPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25zKTsKLSAgaWYgKGNvbmZpZ3VyYXRpb25zLmVtcHR5KCkpIHsKLSAgICBjb25maWd1cmF0aW9ucy5lbXBsYWNlX2JhY2soKTsKLSAgfQotICByZXR1cm4gY29uZmlndXJhdGlvbnM7CisgIHJldHVybiBtYWtlZmlsZXNbMF0tPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIH0KIAogYm9vbCBoYXNTdHJpbmcoY29uc3QgSnNvbjo6VmFsdWUmIHYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQpAQCAtOTAsNyArODcsOCBAQAogCiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBzdGFydE9mRmlsZSA9IGxmLnN1YnN0cigwLCBjbWFrZVJvb3REaXIuc2l6ZSgpKTsKICAgICAgIGNvbnN0IGJvb2wgaXNJbnRlcm5hbCA9IChzdGFydE9mRmlsZSA9PSBjbWFrZVJvb3REaXIpOwotICAgICAgY29uc3QgYm9vbCBpc1RlbXBvcmFyeSA9ICFpc0ludGVybmFsICYmIChsZi5maW5kKGJ1aWxkRGlyICsgJy8nKSA9PSAwKTsKKyAgICAgIGNvbnN0IGJvb2wgaXNUZW1wb3JhcnkgPQorICAgICAgICAhaXNJbnRlcm5hbCAmJiAoY21IYXNQcmVmaXgobGYsIGJ1aWxkRGlyICsgJy8nKSk7CiAKICAgICAgIHN0ZDo6c3RyaW5nIHRvQWRkID0gbGY7CiAgICAgICBpZiAoIXNvdXJjZURpci5lbXB0eSgpKSB7CkBAIC0yNzQsMTQgKzI3MiwxNCBAQAogCiAgICAgICBzdGQ6OnN0cmluZyBjb21waWxlRmxhZ3MgPSBsZC5GbGFnczsKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfRkxBR1MoIkNPTVBJTEVfRkxBR1MiKTsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBjZmxhZ3MgPSBmaWxlLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgeworICAgICAgaWYgKGNtUHJvcCBjZmxhZ3MgPSBmaWxlLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgewogICAgICAgICBsZy0+QXBwZW5kRmxhZ3MoY29tcGlsZUZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjZmxhZ3MsIENPTVBJTEVfRkxBR1MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNmbGFncywgQ09NUElMRV9GTEFHUykpOwogICAgICAgfQogICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBjb3B0aW9ucyA9IGZpbGUtPkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKKyAgICAgIGlmIChjbVByb3AgY29wdGlvbnMgPSBmaWxlLT5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CiAgICAgICAgIGxnLT5BcHBlbmRDb21waWxlT3B0aW9ucygKLSAgICAgICAgICBjb21waWxlRmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOworICAgICAgICAgIGNvbXBpbGVGbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOwogICAgICAgfQogICAgICAgZmlsZURhdGEuRmxhZ3MgPSBjb21waWxlRmxhZ3M7CiAKQEAgLTI4OSw5ICsyODcsOSBAQAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogCiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBJTkNMVURFX0RJUkVDVE9SSUVTKCJJTkNMVURFX0RJUkVDVE9SSUVTIik7Ci0gICAgICBpZiAoY29uc3QgY2hhciogY2luY2x1ZGVzID0gZmlsZS0+R2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKKyAgICAgIGlmIChjbVByb3AgY2luY2x1ZGVzID0gZmlsZS0+R2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV2YWx1YXRlZEluY2x1ZGVzID0KLSAgICAgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNpbmNsdWRlcywgSU5DTFVERV9ESVJFQ1RPUklFUyk7CisgICAgICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKTsKICAgICAgICAgbGctPkFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlcywgZXZhbHVhdGVkSW5jbHVkZXMsICpmaWxlKTsKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGluY2x1ZGUgOiBpbmNsdWRlcykgewpAQCAtMzA4LDE3ICszMDYsMTcgQEAKIAogICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9ERUZJTklUSU9OUygiQ09NUElMRV9ERUZJTklUSU9OUyIpOwogICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGRlZmluZXM7Ci0gICAgICBpZiAoY29uc3QgY2hhciogZGVmcyA9IGZpbGUtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CisgICAgICBpZiAoY21Qcm9wIGRlZnMgPSBmaWxlLT5HZXRQcm9wZXJ0eShDT01QSUxFX0RFRklOSVRJT05TKSkgewogICAgICAgICBsZy0+QXBwZW5kRGVmaW5lcygKLSAgICAgICAgICBkZWZpbmVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGRlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKKyAgICAgICAgICBkZWZpbmVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpkZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgICAgICB9CiAKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGRlZlByb3BOYW1lID0KICAgICAgICAgIkNPTVBJTEVfREVGSU5JVElPTlNfIiArIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19kZWZzID0gZmlsZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CisgICAgICBpZiAoY21Qcm9wIGNvbmZpZ19kZWZzID0gZmlsZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgICAgIGxnLT5BcHBlbmREZWZpbmVzKAogICAgICAgICAgIGRlZmluZXMsCi0gICAgICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb25maWdfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykpOworICAgICAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvbmZpZ19kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgICAgICB9CiAKICAgICAgIGRlZmluZXMuaW5zZXJ0KGxkLkRlZmluZXMuYmVnaW4oKSwgbGQuRGVmaW5lcy5lbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Kc29uT2JqZWN0cy5oIGIvU291cmNlL2NtSnNvbk9iamVjdHMuaAppbmRleCA2NDI5MWNjLi4yZmQ0YjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Kc29uT2JqZWN0cy5oCisrKyBiL1NvdXJjZS9jbUpzb25PYmplY3RzLmgKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogY2xhc3MgY21ha2U7CiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpbmtJdGVtLmggYi9Tb3VyY2UvY21MaW5rSXRlbS5oCmluZGV4IDBlYTI1YzAuLjNkOTI5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxpbmtJdGVtLmgKKysrIGIvU291cmNlL2NtTGlua0l0ZW0uaApAQCAtMTAsNyArMTAsOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21UYXJnZXRMaW5rTGlicmFyeVR5cGUuaCIKQEAgLTUzLDYgKzU0LDkgQEAKICAgLy8gTGlicmFyaWVzIGxpbmtlZCBkaXJlY3RseSBpbiBvdGhlciBjb25maWd1cmF0aW9ucy4KICAgLy8gTmVlZGVkIG9ubHkgZm9yIE9MRCBiZWhhdmlvciBvZiBDTVAwMDAzLgogICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiBXcm9uZ0NvbmZpZ0xpYnJhcmllczsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBnZW5leCByZWZlcmVuY2luZyB0aGUgY29uZmlndXJhdGlvbi4KKyAgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7CiB9OwogCiBzdHJ1Y3QgY21MaW5rSW50ZXJmYWNlTGlicmFyaWVzCkBAIC02Miw2ICs2Niw5IEBACiAKICAgLy8gV2hldGhlciB0aGUgbGlzdCBkZXBlbmRzIG9uIGEgZ2VuZXggcmVmZXJlbmNpbmcgdGhlIGhlYWQgdGFyZ2V0LgogICBib29sIEhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSBmYWxzZTsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBnZW5leCByZWZlcmVuY2luZyB0aGUgY29uZmlndXJhdGlvbi4KKyAgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7CiB9OwogCiBzdHJ1Y3QgY21MaW5rSW50ZXJmYWNlIDogcHVibGljIGNtTGlua0ludGVyZmFjZUxpYnJhcmllcwpAQCAtODEsNiArODgsOSBAQAogICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiBXcm9uZ0NvbmZpZ0xpYnJhcmllczsKIAogICBib29sIEltcGxlbWVudGF0aW9uSXNJbnRlcmZhY2UgPSBmYWxzZTsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBsaW5rIGxhbmd1YWdlIGdlbmV4LgorICBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IGZhbHNlOwogfTsKIAogc3RydWN0IGNtT3B0aW9uYWxMaW5rSW50ZXJmYWNlIDogcHVibGljIGNtTGlua0ludGVyZmFjZQpAQCAtMTAwLDYgKzExMCw5IEBACiB7CiAgIC8vIExhbmd1YWdlcyB3aG9zZSBydW50aW1lIGxpYnJhcmllcyBtdXN0IGJlIGxpbmtlZC4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IExhbmd1YWdlczsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBsaW5rIGxhbmd1YWdlIGdlbmV4LgorICBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IGZhbHNlOwogfTsKIAogLy8gQ2FjaGUgbGluayBpbXBsZW1lbnRhdGlvbiBjb21wdXRhdGlvbiBmcm9tIGVhY2ggY29uZmlndXJhdGlvbi4KQEAgLTEyMSw3ICsxMzQsNyBAQAogCiAgIC8vIENoZWNrIGlmIGFueSBlbnRyeSBpbiB0aGUgbGlzdCBtYXRjaGVzIHRoaXMgY29uZmlndXJhdGlvbi4KICAgc3RkOjpzdHJpbmcgY29uZmlnVXBwZXIgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKLSAgaWYgKGNtQ29udGFpbnMoZGVidWdDb25maWdzLCBjb25maWdVcHBlcikpIHsKKyAgaWYgKGNtOjpjb250YWlucyhkZWJ1Z0NvbmZpZ3MsIGNvbmZpZ1VwcGVyKSkgewogICAgIHJldHVybiBERUJVR19MaWJyYXJ5VHlwZTsKICAgfQogICAvLyBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIG5vdCBhIGRlYnVnIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21MaW5rSXRlbUdyYXBoVmlzaXRvci5jeHggYi9Tb3VyY2UvY21MaW5rSXRlbUdyYXBoVmlzaXRvci5jeHgKaW5kZXggYWNjMjNjOC4uZGZkZDNmZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTGlua0l0ZW1HcmFwaFZpc2l0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxpbmtJdGVtR3JhcGhWaXNpdG9yLmN4eApAQCAtMjQsMTUgKzI0LDEyIEBACiB2b2lkIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6OlZpc2l0TGlua3MoY21MaW5rSXRlbSBjb25zdCYgaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiByb290SXRlbSkKIHsKLSAgaWYgKHRoaXMtPkxpbmtWaXNpdGVkKGl0ZW0sIHJvb3RJdGVtKSkgewotICAgIHJldHVybjsKLSAgfQotCiAgIGlmIChpdGVtLlRhcmdldCA9PSBudWxscHRyKSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBpdGVtLlRhcmdldC0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoKSkgeworICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGl0ZW0uVGFyZ2V0LT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKICAgICB0aGlzLT5WaXNpdExpbmtzKGl0ZW0sIHJvb3RJdGVtLCBjb25maWcpOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21MaW5rTGluZURldmljZUNvbXB1dGVyLmN4eCBiL1NvdXJjZS9jbUxpbmtMaW5lRGV2aWNlQ29tcHV0ZXIuY3h4CmluZGV4IDY1ZWQzNGMuLjU3MzlmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxpbmtMaW5lRGV2aWNlQ29tcHV0ZXIuY3h4CisrKyBiL1NvdXJjZS9jbUxpbmtMaW5lRGV2aWNlQ29tcHV0ZXIuY3h4CkBAIC02LDcgKzYsOCBAQAogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtMTQsNiArMTUsNyBAQAogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJjbVN0YXRlU25hcHNob3QuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKQEAgLTE3NiwxMSArMTc4LDExIEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHJlc29sdmVEZXZpY2VTeW1ib2xzID0KKyAgaWYgKGNtUHJvcCByZXNvbHZlRGV2aWNlU3ltYm9scyA9CiAgICAgICAgIHRhcmdldC5HZXRQcm9wZXJ0eSgiQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTIikpIHsKICAgICAvLyBJZiBDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgd2UgbmVlZAogICAgIC8vIHRvIGhvbm9yIHRoZSB2YWx1ZSBubyBtYXR0ZXIgd2hhdCBpdCBpcy4KLSAgICByZXR1cm4gY21Jc09uKHJlc29sdmVEZXZpY2VTeW1ib2xzKTsKKyAgICByZXR1cm4gY21Jc09uKCpyZXNvbHZlRGV2aWNlU3ltYm9scyk7CiAgIH0KIAogICAvLyBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgcmVxdWlyZQpAQCAtMTg4LDIyICsxOTAsMTkgQEAKICAgY21HZW5lcmF0b3JUYXJnZXQ6OkxpbmtDbG9zdXJlIGNvbnN0KiBjbG9zdXJlID0KICAgICB0YXJnZXQuR2V0TGlua0Nsb3N1cmUoY29uZmlnKTsKIAotICBpZiAoY21Db250YWlucyhjbG9zdXJlLT5MYW5ndWFnZXMsICJDVURBIikpIHsKLSAgICBpZiAoY29uc3QgY2hhciogc2VwYXJhYmxlQ29tcGlsYXRpb24gPQotICAgICAgICAgIHRhcmdldC5HZXRQcm9wZXJ0eSgiQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04iKSkgewotICAgICAgaWYgKGNtSXNPbihzZXBhcmFibGVDb21waWxhdGlvbikpIHsKLSAgICAgICAgYm9vbCBkb0RldmljZUxpbmtpbmcgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQuR2V0VHlwZSgpKSB7Ci0gICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgotICAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKLSAgICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKLSAgICAgICAgICAgIGRvRGV2aWNlTGlua2luZyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvRGV2aWNlTGlua2luZzsKKyAgaWYgKGNtOjpjb250YWlucyhjbG9zdXJlLT5MYW5ndWFnZXMsICJDVURBIikpIHsKKyAgICBpZiAoY21Jc09uKHRhcmdldC5HZXRQcm9wZXJ0eSgiQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04iKSkpIHsKKyAgICAgIGJvb2wgZG9EZXZpY2VMaW5raW5nID0gZmFsc2U7CisgICAgICBzd2l0Y2ggKHRhcmdldC5HZXRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgorICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6CisgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgorICAgICAgICAgIGRvRGV2aWNlTGlua2luZyA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CiAgICAgICB9CisgICAgICByZXR1cm4gZG9EZXZpY2VMaW5raW5nOwogICAgIH0KIAogICAgIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiogcGNsaSA9IHRhcmdldC5HZXRMaW5rSW5mb3JtYXRpb24oY29uZmlnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpc3RDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUxpc3RDb21tYW5kLmN4eAppbmRleCA1MjAwYTE2Li5lZGVjNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtTGlzdENvbW1hbmQuY3h4CkBAIC0xNiwxMSArMTYsMTEgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKLQogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCkBAIC02Niw3ICs2Niw3IEBACiAgIC8vIGV4cGFuZCB0aGUgdmFyaWFibGUgaW50byBhIGxpc3QKICAgY21FeHBhbmRMaXN0KGxpc3RTdHJpbmcsIGxpc3QsIHRydWUpOwogICAvLyBpZiBubyBlbXB0eSBlbGVtZW50cyB0aGVuIGp1c3QgcmV0dXJuCi0gIGlmICghY21Db250YWlucyhsaXN0LCBzdGQ6OnN0cmluZygpKSkgeworICBpZiAoIWNtOjpjb250YWlucyhsaXN0LCBzdGQ6OnN0cmluZygpKSkgewogICAgIHJldHVybiB0cnVlOwogICB9CiAgIC8vIGlmIHdlIGhhdmUgZW1wdHkgZWxlbWVudHMgd2UgbmVlZCB0byBjaGVjayBwb2xpY3kgQ01QMDAwNwpAQCAtMTA1MSw2ICsxMDUxLDcgQEAKICAgICBVTklOSVRJQUxJWkVELAogICAgIFNUUklORywKICAgICBGSUxFX0JBU0VOQU1FLAorICAgIE5BVFVSQUwsCiAgIH07CiAgIGVudW0gY2xhc3MgQ2FzZVNlbnNpdGl2aXR5CiAgIHsKQEAgLTEwNzQsMTAgKzEwNzUsMjUgQEAKICAgICAgIDogbnVsbHB0cjsKICAgfQogCisgIHVzaW5nIENvbXBhcmlzb25GdW5jdGlvbiA9CisgICAgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3Qgc3RkOjpzdHJpbmcmKT47CisgIENvbXBhcmlzb25GdW5jdGlvbiBHZXRDb21wYXJpc29uRnVuY3Rpb24oQ29tcGFyZSBjb21wYXJlKQorICB7CisgICAgaWYgKGNvbXBhcmUgPT0gQ29tcGFyZTo6TkFUVVJBTCkgeworICAgICAgcmV0dXJuIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IHN0ZDo6c3RyaW5nJik+KAorICAgICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyYgeCwgY29uc3Qgc3RkOjpzdHJpbmcmIHkpIHsKKyAgICAgICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6c3RydmVyc2NtcCh4LCB5KSA8IDA7CisgICAgICAgIH0pOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3Qgc3RkOjpzdHJpbmcmKT4oCisgICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyYgeCwgY29uc3Qgc3RkOjpzdHJpbmcmIHkpIHsgcmV0dXJuIHggPCB5OyB9KTsKKyAgfQorCiBwdWJsaWM6CiAgIGNtU3RyaW5nU29ydGVyKENvbXBhcmUgY29tcGFyZSwgQ2FzZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRpdml0eSwKICAgICAgICAgICAgICAgICAgT3JkZXIgZGVzYyA9IE9yZGVyOjpBU0NFTkRJTkcpCiAgICAgOiBmaWx0ZXJzeyBHZXRDb21wYXJlRmlsdGVyKGNvbXBhcmUpLCBHZXRDYXNlRmlsdGVyKGNhc2VTZW5zaXRpdml0eSkgfQorICAgICwgc29ydE1ldGhvZChHZXRDb21wYXJpc29uRnVuY3Rpb24oY29tcGFyZSkpCiAgICAgLCBkZXNjZW5kaW5nKGRlc2MgPT0gT3JkZXI6OkRFU0NFTkRJTkcpCiAgIHsKICAgfQpAQCAtMTA5OSwxNSArMTExNSwxNiBAQAogICAgIHN0ZDo6c3RyaW5nIGJmID0gQXBwbHlGaWx0ZXIoYik7CiAgICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKGRlc2NlbmRpbmcpIHsKLSAgICAgIHJlc3VsdCA9IGJmIDwgYWY7CisgICAgICByZXN1bHQgPSBzb3J0TWV0aG9kKGJmLCBhZik7CiAgICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IGFmIDwgYmY7CisgICAgICByZXN1bHQgPSBzb3J0TWV0aG9kKGFmLCBiZik7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAogcHJvdGVjdGVkOgogICBTdHJpbmdGaWx0ZXIgZmlsdGVyc1syXSA9IHsgbnVsbHB0ciwgbnVsbHB0ciB9OworICBDb21wYXJpc29uRnVuY3Rpb24gc29ydE1ldGhvZDsKICAgYm9vbCBkZXNjZW5kaW5nOwogfTsKIApAQCAtMTE0Miw2ICsxMTU5LDggQEAKICAgICAgICAgICBzb3J0Q29tcGFyZSA9IGNtU3RyaW5nU29ydGVyOjpDb21wYXJlOjpTVFJJTkc7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0gIkZJTEVfQkFTRU5BTUUiKSB7CiAgICAgICAgICAgc29ydENvbXBhcmUgPSBjbVN0cmluZ1NvcnRlcjo6Q29tcGFyZTo6RklMRV9CQVNFTkFNRTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCA9PSAiTkFUVVJBTCIpIHsKKyAgICAgICAgICBzb3J0Q29tcGFyZSA9IGNtU3RyaW5nU29ydGVyOjpDb21wYXJlOjpOQVRVUkFMOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIGVycm9yID0KICAgICAgICAgICAgIGNtU3RyQ2F0KG1lc3NhZ2VIaW50LCAidmFsdWUgXCIiLCBhcmd1bWVudCwgIlwiIGZvciBvcHRpb24gXCIiLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlzdEZpbGVDYWNoZS5jeHggYi9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eAppbmRleCA0NzY3OWM5Li43ZWJiMDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eAorKysgYi9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eApAQCAtMjYsMTMgKzI2LDE1IEBACiBzdHJ1Y3QgY21MaXN0RmlsZVBhcnNlcgogewogICBjbUxpc3RGaWxlUGFyc2VyKGNtTGlzdEZpbGUqIGxmLCBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQsCi0gICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwgY29uc3QgY2hhciogZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpOwogICB+Y21MaXN0RmlsZVBhcnNlcigpOwogICBjbUxpc3RGaWxlUGFyc2VyKGNvbnN0IGNtTGlzdEZpbGVQYXJzZXImKSA9IGRlbGV0ZTsKICAgY21MaXN0RmlsZVBhcnNlciYgb3BlcmF0b3I9KGNvbnN0IGNtTGlzdEZpbGVQYXJzZXImKSA9IGRlbGV0ZTsKICAgdm9pZCBJc3N1ZUZpbGVPcGVuRXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIHRleHQpIGNvbnN0OwogICB2b2lkIElzc3VlRXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIHRleHQpIGNvbnN0OwotICBib29sIFBhcnNlRmlsZSgpOworICBib29sIFBhcnNlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSk7CisgIGJvb2wgUGFyc2VTdHJpbmcoY29uc3QgY2hhciogc3RyLCBjb25zdCBjaGFyKiB2aXJ0dWFsX2ZpbGVuYW1lKTsKKyAgYm9vbCBQYXJzZSgpOwogICBib29sIFBhcnNlRnVuY3Rpb24oY29uc3QgY2hhciogbmFtZSwgbG9uZyBsaW5lKTsKICAgYm9vbCBBZGRBcmd1bWVudChjbUxpc3RGaWxlTGV4ZXJfVG9rZW4qIHRva2VuLAogICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVBcmd1bWVudDo6RGVsaW1pdGVyIGRlbGltKTsKQEAgLTUxLDEyICs1MywxMSBAQAogfTsKIAogY21MaXN0RmlsZVBhcnNlcjo6Y21MaXN0RmlsZVBhcnNlcihjbUxpc3RGaWxlKiBsZiwgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlcikKICAgOiBMaXN0RmlsZShsZikKICAgLCBCYWNrdHJhY2Uoc3RkOjptb3ZlKGxmYnQpKQogICAsIE1lc3NlbmdlcihtZXNzZW5nZXIpCi0gICwgRmlsZU5hbWUoZmlsZW5hbWUpCisgICwgRmlsZU5hbWUobnVsbHB0cikKICAgLCBMZXhlcihjbUxpc3RGaWxlTGV4ZXJfTmV3KCkpCiB7CiB9CkBAIC04Myw4ICs4NCwxMCBAQAogICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOwogfQogCi1ib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlRmlsZSgpCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkKIHsKKyAgdGhpcy0+RmlsZU5hbWUgPSBmaWxlbmFtZTsKKwogICAvLyBPcGVuIHRoZSBmaWxlLgogICBjbUxpc3RGaWxlTGV4ZXJfQk9NIGJvbTsKICAgaWYgKCFjbUxpc3RGaWxlTGV4ZXJfU2V0RmlsZU5hbWUodGhpcy0+TGV4ZXIsIHRoaXMtPkZpbGVOYW1lLCAmYm9tKSkgewpAQCAtMTA3LDYgKzExMCwyNCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIHJldHVybiBQYXJzZSgpOworfQorCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSkKK3sKKyAgdGhpcy0+RmlsZU5hbWUgPSB2aXJ0dWFsX2ZpbGVuYW1lOworCisgIGlmICghY21MaXN0RmlsZUxleGVyX1NldFN0cmluZyh0aGlzLT5MZXhlciwgc3RyKSkgeworICAgIHRoaXMtPklzc3VlRmlsZU9wZW5FcnJvcigiY21MaXN0RmlsZUNhY2hlOiBjYW5ub3QgYWxsb2NhdGUgYnVmZmVyLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiBQYXJzZSgpOworfQorCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlKCkKK3sKICAgLy8gVXNlIGEgc2ltcGxlIHJlY3Vyc2l2ZS1kZXNjZW50IHBhcnNlciB0byBwcm9jZXNzIHRoZSB0b2tlbgogICAvLyBzdHJlYW0uCiAgIGJvb2wgaGF2ZU5ld2xpbmUgPSB0cnVlOwpAQCAtMTU1LDggKzE3NiwyMiBAQAogICBib29sIHBhcnNlRXJyb3IgPSBmYWxzZTsKIAogICB7Ci0gICAgY21MaXN0RmlsZVBhcnNlciBwYXJzZXIodGhpcywgbGZidCwgbWVzc2VuZ2VyLCBmaWxlbmFtZSk7Ci0gICAgcGFyc2VFcnJvciA9ICFwYXJzZXIuUGFyc2VGaWxlKCk7CisgICAgY21MaXN0RmlsZVBhcnNlciBwYXJzZXIodGhpcywgbGZidCwgbWVzc2VuZ2VyKTsKKyAgICBwYXJzZUVycm9yID0gIXBhcnNlci5QYXJzZUZpbGUoZmlsZW5hbWUpOworICB9CisKKyAgcmV0dXJuICFwYXJzZUVycm9yOworfQorCitib29sIGNtTGlzdEZpbGU6OlBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkKK3sKKyAgYm9vbCBwYXJzZUVycm9yID0gZmFsc2U7CisKKyAgeworICAgIGNtTGlzdEZpbGVQYXJzZXIgcGFyc2VyKHRoaXMsIGxmYnQsIG1lc3Nlbmdlcik7CisgICAgcGFyc2VFcnJvciA9ICFwYXJzZXIuUGFyc2VTdHJpbmcoc3RyLCB2aXJ0dWFsX2ZpbGVuYW1lKTsKICAgfQogCiAgIHJldHVybiAhcGFyc2VFcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpc3RGaWxlQ2FjaGUuaCBiL1NvdXJjZS9jbUxpc3RGaWxlQ2FjaGUuaAppbmRleCA5Y2FlODI3Li4wYjQ0MTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmgKKysrIGIvU291cmNlL2NtTGlzdEZpbGVDYWNoZS5oCkBAIC0xNzUsNiArMTc1LDMyIEBACiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBCVDxzdGQ6OnN0cmluZz4gY29uc3QmIHMpOwogCisvLyBXcmFwIHR5cGUgVCBhcyBhIHZhbHVlIHdpdGggcG90ZW50aWFsbHkgbXVsdGlwbGUgYmFja3RyYWNlcy4gIEZvciBwdXJwb3NlcworLy8gb2Ygb3JkZXJpbmcgYW5kIGVxdWFsaXR5IGNvbXBhcmlzb24sIG9ubHkgdGhlIG9yaWdpbmFsIHZhbHVlIGlzIHVzZWQuICBUaGUKKy8vIGJhY2t0cmFjZSBpcyBjb25zaWRlcmVkIGluY2lkZW50YWwuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIEJUcworeworcHVibGljOgorICBCVHMoVCB2ID0gVCgpLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0ID0gY21MaXN0RmlsZUJhY2t0cmFjZSgpKQorICAgIDogVmFsdWUoc3RkOjptb3ZlKHYpKQorICB7CisgICAgQmFja3RyYWNlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGJ0KSk7CisgIH0KKyAgVCBWYWx1ZTsKKyAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUJhY2t0cmFjZT4gQmFja3RyYWNlczsKKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShCVHM8VD4gY29uc3QmIGwsIEJUczxUPiBjb25zdCYgcikKKyAgeworICAgIHJldHVybiBsLlZhbHVlID09IHIuVmFsdWU7CisgIH0KKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KEJUczxUPiBjb25zdCYgbCwgQlRzPFQ+IGNvbnN0JiByKQorICB7CisgICAgcmV0dXJuIGwuVmFsdWUgPCByLlZhbHVlOworICB9CisgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oQlRzPFQ+IGNvbnN0JiBsLCBUIGNvbnN0JiByKSB7IHJldHVybiBsLlZhbHVlID09IHI7IH0KKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShUIGNvbnN0JiBsLCBCVHM8VD4gY29uc3QmIHIpIHsgcmV0dXJuIGwgPT0gci5WYWx1ZTsgfQorfTsKKwogc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBFeHBhbmRMaXN0V2l0aEJhY2t0cmFjZSgKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpc3QsCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0ID0gY21MaXN0RmlsZUJhY2t0cmFjZSgpKTsKQEAgLTE4NCw2ICsyMTAsOSBAQAogICBib29sIFBhcnNlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAogICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKIAorICBib29sIFBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLCBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKKwogICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvYWRDb21tYW5kQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21Mb2FkQ29tbWFuZENvbW1hbmQuY3h4CmluZGV4IDkyMjU4ZTIuLjU3OTBlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvYWRDb21tYW5kQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtTG9hZENvbW1hbmRDb21tYW5kLmN4eApAQCAtMSw1ICsxLDE1IEBACiAvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fc3VuKQorLy8gUE9TSVggQVBJcyBhcmUgbmVlZGVkCisjICBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDIwMDgwOUwKKyNlbmRpZgorI2lmIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKy8vIEZvciBpc2FzY2lpCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA3MDAKKyNlbmRpZgorCiAjaW5jbHVkZSAiY21Mb2FkQ29tbWFuZENvbW1hbmQuaCIKIAogI2luY2x1ZGUgPGNzaWduYWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbENvbW1vbkdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21Mb2NhbENvbW1vbkdlbmVyYXRvci5jeHgKaW5kZXggMDI1ZWY3ZS4uNDRkYjg0MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxDb21tb25HZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmN4eApAQCAtMTcsMTAgKzE3LDggQEAKICAgOiBjbUxvY2FsR2VuZXJhdG9yKGdnLCBtZikKICAgLCBXb3JraW5nRGlyZWN0b3J5KHN0ZDo6bW92ZSh3ZCkpCiB7Ci0gIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyh0aGlzLT5Db25maWdOYW1lcyk7Ci0gIGlmICh0aGlzLT5Db25maWdOYW1lcy5lbXB0eSgpKSB7Ci0gICAgdGhpcy0+Q29uZmlnTmFtZXMuZW1wbGFjZV9iYWNrKCk7Ci0gIH0KKyAgdGhpcy0+Q29uZmlnTmFtZXMgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiB9CiAKIGNtTG9jYWxDb21tb25HZW5lcmF0b3I6On5jbUxvY2FsQ29tbW9uR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwpAQCAtNTAsNiArNDgsMTUgQEAKICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRSZXF1aXJlZERlZmluaXRpb24oIkNNQUtFX0ZvcnRyYW5fTU9ERElSX0ZMQUciKSwKICAgICAgIG1vZF9kaXIpOwogICAgIHRoaXMtPkFwcGVuZEZsYWdzKGZsYWdzLCBtb2RmbGFnKTsKKyAgICAvLyBTb21lIGNvbXBpbGVycyBkbyBub3Qgc2VhcmNoIHRoZWlyIG93biBtb2R1bGUgb3V0cHV0IGRpcmVjdG9yeQorICAgIC8vIGZvciB1c2luZyBvdGhlciBtb2R1bGVzLiAgQWRkIGFuIGluY2x1ZGUgZGlyZWN0b3J5IGV4cGxpY2l0bHkKKyAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBjb21waWxlcnMgdGhhdCBkbyBzZWFyY2ggaXQuCisgICAgc3RkOjpzdHJpbmcgaW5jZmxhZyA9CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0ZvcnRyYW5fTU9ERElSX0lOQ0xVREVfRkxBRyIpOworICAgIGlmICghaW5jZmxhZy5lbXB0eSgpKSB7CisgICAgICBpbmNmbGFnID0gY21TdHJDYXQoaW5jZmxhZywgbW9kX2Rpcik7CisgICAgICB0aGlzLT5BcHBlbmRGbGFncyhmbGFncywgaW5jZmxhZyk7CisgICAgfQogICB9CiAKICAgLy8gSWYgdGhlcmUgaXMgYSBzZXBhcmF0ZSBtb2R1bGUgcGF0aCBmbGFnIHRoZW4gZHVwbGljYXRlIHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTG9jYWxHZW5lcmF0b3IuY3h4CmluZGV4IGY1OTJiN2IuLmZlMGQwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5jeHgKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8c3N0cmVhbT4KQEAgLTIwLDcgKzE5LDYgQEAKIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5oIgpAQCAtMzUsMTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21MaW5rTGluZUNvbXB1dGVyLmgiCi0jaW5jbHVkZSAiY21MaW5rTGluZURldmljZUNvbXB1dGVyLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlTG9jYXRpb24uaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQuaCIKKyNpbmNsdWRlICJjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC0xMzEsNyArMTMwLDcgQEAKICAgICB0aGlzLT5MaW5rZXJTeXNyb290ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9TWVNST09UIik7CiAgIH0KIAotICBpZiAoc3RkOjpzdHJpbmcgY29uc3QqIGFwcGxlQXJjaFN5c3Jvb3RzID0KKyAgaWYgKGNtUHJvcCBhcHBsZUFyY2hTeXNyb290cyA9CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoIkNNQUtFX0FQUExFX0FSQ0hfU1lTUk9PVFMiKSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcHBsZUFyY2hzID0KICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMiKTsKQEAgLTI5OSw5ICsyOTgsOSBAQAogICB9CiAKICAgLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIGNvbmZpZ3VyYXRpb25zLgotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlndXJhdGlvblR5cGVzOwotICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlndXJhdGlvblR5cGVzLCBmYWxzZSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWd1cmF0aW9uVHlwZXMgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6Ok9ubHlNdWx0aUNvbmZpZyk7CisgIHN0ZDo6c3RyaW5nIGNvbmZpZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZhdWx0Q29uZmlndXJhdGlvbigpOwogCiAgIHN0ZDo6c3RyaW5nIGZpbGUgPQogICAgIGNtU3RyQ2F0KHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudEJpbmFyeSgpLApAQCAtMzEwLDI5ICszMDksMzUgQEAKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZvdXQoZmlsZSk7CiAgIGZvdXQuU2V0Q29weUlmRGlmZmVyZW50KHRydWUpOwogCi0gIGZvdXQgPDwgIiMgQ01ha2UgZ2VuZXJhdGVkIFRlc3RmaWxlIGZvciAiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIFNvdXJjZSBkaXJlY3Rvcnk6ICIKLSAgICAgICA8PCB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKSA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyBCdWlsZCBkaXJlY3Rvcnk6ICIKLSAgICAgICA8PCB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRCaW5hcnkoKSA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyAiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcmVsZXZhbnQgdGVzdGluZyBjb21tYW5kcyAiCi0gICAgICAgPDwgInJlcXVpcmVkIGZvciAiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIHRlc3RpbmcgdGhpcyBkaXJlY3RvcnkgYW5kIGxpc3RzIHN1YmRpcmVjdG9yaWVzIHRvICIKLSAgICAgICA8PCAiYmUgdGVzdGVkIGFzIHdlbGwuIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIiMgQ01ha2UgZ2VuZXJhdGVkIFRlc3RmaWxlIGZvciBcbiIKKyAgICAgICAgICAiIyBTb3VyY2UgZGlyZWN0b3J5OiAiCisgICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCkKKyAgICAgICA8PCAiXG4iCisgICAgICAgICAgIiMgQnVpbGQgZGlyZWN0b3J5OiAiCisgICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50QmluYXJ5KCkKKyAgICAgICA8PCAiXG4iCisgICAgICAgICAgIiMgXG4iCisgICAgICAgICAgIiMgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSByZWxldmFudCB0ZXN0aW5nIGNvbW1hbmRzICIKKyAgICAgICAgICAicmVxdWlyZWQgZm9yIFxuIgorICAgICAgICAgICIjIHRlc3RpbmcgdGhpcyBkaXJlY3RvcnkgYW5kIGxpc3RzIHN1YmRpcmVjdG9yaWVzIHRvICIKKyAgICAgICAgICAiYmUgdGVzdGVkIGFzIHdlbGwuXG4iOwogCi0gIGNvbnN0IGNoYXIqIHRlc3RJbmNsdWRlRmlsZSA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJURVNUX0lOQ0xVREVfRklMRSIpOwotICBpZiAodGVzdEluY2x1ZGVGaWxlKSB7Ci0gICAgZm91dCA8PCAiaW5jbHVkZShcIiIgPDwgdGVzdEluY2x1ZGVGaWxlIDw8ICJcIikiIDw8IHN0ZDo6ZW5kbDsKKyAgc3RkOjpzdHJpbmcgcmVzb3VyY2VTcGVjRmlsZSA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEUiKTsKKyAgaWYgKCFyZXNvdXJjZVNwZWNGaWxlLmVtcHR5KCkpIHsKKyAgICBmb3V0IDw8ICJzZXQoQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFIFwiIiA8PCByZXNvdXJjZVNwZWNGaWxlIDw8ICJcIilcbiI7CiAgIH0KIAotICBjb25zdCBjaGFyKiB0ZXN0SW5jbHVkZUZpbGVzID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIlRFU1RfSU5DTFVERV9GSUxFUyIpOworICBjbVByb3AgdGVzdEluY2x1ZGVGaWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJURVNUX0lOQ0xVREVfRklMRSIpOworICBpZiAodGVzdEluY2x1ZGVGaWxlKSB7CisgICAgZm91dCA8PCAiaW5jbHVkZShcIiIgPDwgKnRlc3RJbmNsdWRlRmlsZSA8PCAiXCIpXG4iOworICB9CisKKyAgY21Qcm9wIHRlc3RJbmNsdWRlRmlsZXMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIlRFU1RfSU5DTFVERV9GSUxFUyIpOwogICBpZiAodGVzdEluY2x1ZGVGaWxlcykgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlc0xpc3QgPSBjbUV4cGFuZGVkTGlzdCh0ZXN0SW5jbHVkZUZpbGVzKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZXNMaXN0ID0gY21FeHBhbmRlZExpc3QoKnRlc3RJbmNsdWRlRmlsZXMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBpbmNsdWRlc0xpc3QpIHsKLSAgICAgIGZvdXQgPDwgImluY2x1ZGUoXCIiIDw8IGkgPDwgIlwiKSIgPDwgc3RkOjplbmRsOworICAgICAgZm91dCA8PCAiaW5jbHVkZShcIiIgPDwgaSA8PCAiXCIpXG4iOwogICAgIH0KICAgfQogCkBAIC0zNDksMTggKzM1NCwxOCBAQAogICAgIHN0ZDo6c3RyaW5nIG91dFAgPSBpLkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRCaW5hcnkoKTsKICAgICBvdXRQID0gdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgocGFyZW50QmluRGlyLCBvdXRQKTsKICAgICBvdXRQID0gY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKG91dFApOwotICAgIGZvdXQgPDwgInN1YmRpcnMoIiA8PCBvdXRQIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAic3ViZGlycygiIDw8IG91dFAgPDwgIilcbiI7CiAgIH0KIAogICAvLyBBZGQgZGlyZWN0b3J5IGxhYmVscyBwcm9wZXJ0eQogICBjb25zdCBjaGFyKiBkaXJlY3RvcnlMYWJlbHMgPQogICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ESVJFQ1RPUllfTEFCRUxTIik7Ci0gIGNvbnN0IGNoYXIqIGxhYmVscyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiTEFCRUxTIik7CisgIGNtUHJvcCBsYWJlbHMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIkxBQkVMUyIpOwogCiAgIGlmIChsYWJlbHMgfHwgZGlyZWN0b3J5TGFiZWxzKSB7CiAgICAgZm91dCA8PCAic2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzKFBST1BFUlRJRVMgTEFCRUxTICI7CiAgICAgaWYgKGxhYmVscykgewotICAgICAgZm91dCA8PCBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2UobGFiZWxzKTsKKyAgICAgIGZvdXQgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKCpsYWJlbHMpOwogICAgIH0KICAgICBpZiAobGFiZWxzICYmIGRpcmVjdG9yeUxhYmVscykgewogICAgICAgZm91dCA8PCAiOyI7CkBAIC0zNjgsMTQgKzM3MywxNCBAQAogICAgIGlmIChkaXJlY3RvcnlMYWJlbHMpIHsKICAgICAgIGZvdXQgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKGRpcmVjdG9yeUxhYmVscyk7CiAgICAgfQotICAgIGZvdXQgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICIpXG4iOwogICB9CiB9CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6Q3JlYXRlRXZhbHVhdGlvbkZpbGVPdXRwdXRzKCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOworICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiBjb25maWdzKSB7CiAgICAgdGhpcy0+Q3JlYXRlRXZhbHVhdGlvbkZpbGVPdXRwdXRzKGMpOwogICB9CkBAIC00NTgsOSArNDYzLDkgQEAKICAgfQogCiAgIC8vIENvbXB1dGUgdGhlIHNldCBvZiBjb25maWd1cmF0aW9ucy4KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3VyYXRpb25UeXBlczsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25UeXBlcywgZmFsc2UpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlndXJhdGlvblR5cGVzID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpPbmx5TXVsdGlDb25maWcpOworICBzdGQ6OnN0cmluZyBjb25maWcgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKIAogICAvLyBDaG9vc2UgYSBkZWZhdWx0IGluc3RhbGwgY29uZmlndXJhdGlvbi4KICAgc3RkOjpzdHJpbmcgZGVmYXVsdF9jb25maWcgPSBjb25maWc7CkBAIC00ODksMTYgKzQ5NCwxNyBAQAogICBmb3V0LlNldENvcHlJZkRpZmZlcmVudCh0cnVlKTsKIAogICAvLyBXcml0ZSB0aGUgaGVhZGVyLgorICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIGZvdXQgPDwgIiMgSW5zdGFsbCBzY3JpcHQgZm9yIGRpcmVjdG9yeTogIgotICAgICAgIDw8IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudFNvdXJjZSgpIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgZm91dCA8PCAiIyBTZXQgdGhlIGluc3RhbGwgcHJlZml4IiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiaWYoTk9UIERFRklORUQgQ01BS0VfSU5TVEFMTF9QUkVGSVgpIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVggXCIiIDw8IHByZWZpeCA8PCAiXCIpIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiZW5kaWYoKSIgPDwgc3RkOjplbmRsCisgICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCkKKyAgICAgICA8PCAiXG5cbiIKKyAgICAgICAgICAiIyBTZXQgdGhlIGluc3RhbGwgcHJlZml4XG4iCisgICAgICAgICAgImlmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfUFJFRklYKVxuIgorICAgICAgICAgICIgIHNldChDTUFLRV9JTlNUQUxMX1BSRUZJWCBcIiIgPDwgcHJlZml4IDw8ICJcIilcbiIKKyAgICAgICAgICAiZW5kaWYoKVxuIgogICAgICAgIDw8IFIiKHN0cmluZyhSRUdFWCBSRVBMQUNFICIvJCIgIiIgQ01BS0VfSU5TVEFMTF9QUkVGSVggKSIKLSAgICAgICA8PCAiXCIke0NNQUtFX0lOU1RBTExfUFJFRklYfVwiKSIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgc3RkOjplbmRsOworICAgICAgIDw8ICJcIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9XCIpXG5cbiI7CisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAgIC8vIFdyaXRlIHN1cHBvcnQgY29kZSBmb3IgZ2VuZXJhdGluZyBwZXItY29uZmlndXJhdGlvbiBpbnN0YWxsIHJ1bGVzLgogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCkBAIC01NzIsNiArNTc4LDcxIEBACiAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgIH0KIAorICAvLyBXcml0ZSBvdXQgQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1BMQVRGT1JNIHNvIHRoYXQKKyAgLy8gaW5zdGFsbGVkIGNvZGUgdGhhdCB1c2VzIGBmaWxlKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUylgCisgIC8vIGhhcyBzYW1lIHBsYXRmb3JtIHZhcmlhYmxlIGFzIHdoZW4gcnVubmluZyBjbWFrZQorICBpZiAoY29uc3QgY2hhciogcGxhdGZvcm0gPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKKyAgICAgICAgIkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19QTEFURk9STSIpKSB7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGZvdXQgPDwKKyAgICAgICIjIFNldCBkZWZhdWx0IGluc3RhbGwgZGlyZWN0b3J5IHBlcm1pc3Npb25zLlxuIgorICAgICAgImlmKE5PVCBERUZJTkVEIENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19QTEFURk9STSlcbiIKKyAgICAgICIgIHNldChDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk0gXCIiCisgICAgICAgICA8PCBwbGF0Zm9ybSA8PCAiXCIpXG4iCisgICAgICAiZW5kaWYoKVxuIgorICAgICAgIlxuIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyAgfQorCisgIC8vIFdyaXRlIG91dCBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfVE9PTCBzbyB0aGF0CisgIC8vIGluc3RhbGxlZCBjb2RlIHRoYXQgdXNlcyBgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMpYAorICAvLyBoYXMgc2FtZSB0b29sIHNlbGVjdGVkIGFzIHdoZW4gcnVubmluZyBjbWFrZQorICBpZiAoY29uc3QgY2hhciogY29tbWFuZCA9CisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfVE9PTCIpKSB7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGZvdXQgPDwKKyAgICAgICIjIFNldCBkZWZhdWx0IGluc3RhbGwgZGlyZWN0b3J5IHBlcm1pc3Npb25zLlxuIgorICAgICAgImlmKE5PVCBERUZJTkVEIENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MKVxuIgorICAgICAgIiAgc2V0KENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MIFwiIgorICAgICAgICAgPDwgY29tbWFuZCA8PCAiXCIpXG4iCisgICAgICAiZW5kaWYoKVxuIgorICAgICAgIlxuIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyAgfQorCisgIC8vIFdyaXRlIG91dCBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORCBzbyB0aGF0CisgIC8vIGluc3RhbGxlZCBjb2RlIHRoYXQgdXNlcyBgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMpYAorICAvLyBoYXMgc2FtZSBwYXRoIHRvIHRoZSB0b29sIGFzIHdoZW4gcnVubmluZyBjbWFrZQorICBpZiAoY29uc3QgY2hhciogY29tbWFuZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAorICAgICAgICAiQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX0NPTU1BTkQiKSkgeworICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICBmb3V0IDw8CisgICAgICAiIyBTZXQgZGVmYXVsdCBpbnN0YWxsIGRpcmVjdG9yeSBwZXJtaXNzaW9ucy5cbiIKKyAgICAgICJpZihOT1QgREVGSU5FRCBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORClcbiIKKyAgICAgICIgIHNldChDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORCBcIiIKKyAgICAgICAgIDw8IGNvbW1hbmQgPDwgIlwiKVxuIgorICAgICAgImVuZGlmKClcbiIKKyAgICAgICJcbiI7CisgICAgLyogY2xhbmctZm9ybWF0IG9uICovCisgIH0KKworICAvLyBXcml0ZSBvdXQgQ01BS0VfT0JKRFVNUCBzbyB0aGF0IGluc3RhbGxlZCBjb2RlIHRoYXQgdXNlcworICAvLyBgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMpYCBhbmQgaGFzbid0IHNwZWNpZmllZAorICAvLyBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORCBoYXMgY29uc2lzdGVudAorICAvLyBsb2dpYyB0byBmYWxsYmFjayB0byBDTUFLRV9PQkpEVU1QIHdoZW4gYG9iamR1bXBgIGlzCisgIC8vIG5vdCBvbiB0aGUgcGF0aAorICBpZiAoY29uc3QgY2hhciogY29tbWFuZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9PQkpEVU1QIikpIHsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgZm91dCA8PAorICAgICAgIiMgU2V0IGRlZmF1bHQgaW5zdGFsbCBkaXJlY3RvcnkgcGVybWlzc2lvbnMuXG4iCisgICAgICAiaWYoTk9UIERFRklORUQgQ01BS0VfT0JKRFVNUClcbiIKKyAgICAgICIgIHNldChDTUFLRV9PQkpEVU1QIFwiIgorICAgICAgICAgPDwgY29tbWFuZCA8PCAiXCIpXG4iCisgICAgICAiZW5kaWYoKVxuIgorICAgICAgIlxuIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyAgfQorCiAgIC8vIEFzayBlYWNoIGluc3RhbGwgZ2VuZXJhdG9yIHRvIHdyaXRlIGl0cyBjb2RlLgogICBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgc3RhdHVzID0gdGhpcy0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwODIpOwogICBhdXRvIGNvbnN0JiBpbnN0YWxsZXJzID0gdGhpcy0+TWFrZWZpbGUtPkdldEluc3RhbGxHZW5lcmF0b3JzKCk7CkBAIC02MTMsOCArNjg0LDcgQEAKICAgICAgICAgICBpZiAoIWMuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHlBc0Jvb2woIkVYQ0xVREVfRlJPTV9BTEwiKSkgewogICAgICAgICAgICAgc3RkOjpzdHJpbmcgb2RpciA9IGMuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudEJpbmFyeSgpOwogICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMob2Rpcik7Ci0gICAgICAgICAgICBmb3V0IDw8ICIgIGluY2x1ZGUoXCIiIDw8IG9kaXIgPDwgIi9jbWFrZV9pbnN0YWxsLmNtYWtlXCIpIgotICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICBmb3V0IDw8ICIgIGluY2x1ZGUoXCIiIDw8IG9kaXIgPDwgIi9jbWFrZV9pbnN0YWxsLmNtYWtlXCIpXG4iOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3V0IDw8ICJcbiI7CkBAIC02ODQsMTEgKzc1NCw4IEBACiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkNvbXB1dGVUYXJnZXRNYW5pZmVzdCgpCiB7CiAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiBjb25maWd1cmF0aW9uIHR5cGVzLgotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnTmFtZXM7Ci0gIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdOYW1lcyk7Ci0gIGlmIChjb25maWdOYW1lcy5lbXB0eSgpKSB7Ci0gICAgY29uZmlnTmFtZXMuZW1wbGFjZV9iYWNrKCk7Ci0gIH0KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogCiAgIC8vIEFkZCBvdXIgdGFyZ2V0cyB0byB0aGUgbWFuaWZlc3QgZm9yIGVhY2ggY29uZmlndXJhdGlvbi4KICAgY29uc3QgYXV0byYgdGFyZ2V0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKQEAgLTcwNSwxMSArNzcyLDggQEAKIGJvb2wgY21Mb2NhbEdlbmVyYXRvcjo6Q29tcHV0ZVRhcmdldENvbXBpbGVGZWF0dXJlcygpCiB7CiAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiBjb25maWd1cmF0aW9uIHR5cGVzLgotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnTmFtZXM7Ci0gIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdOYW1lcyk7Ci0gIGlmIChjb25maWdOYW1lcy5lbXB0eSgpKSB7Ci0gICAgY29uZmlnTmFtZXMuZW1wbGFjZV9iYWNrKCk7Ci0gIH0KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogCiAgIHVzaW5nIExhbmd1YWdlUGFpciA9IHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OwogICBzdGQ6OnZlY3RvcjxMYW5ndWFnZVBhaXI+IHBhaXJlZExhbmd1YWdlc3sgeyAiT0JKQyIsICJDIiB9LApAQCAtNzM0LDM5ICs3OTgsOCBAQAogICAgIC8vIE5vdyB0aGF0IEMvQysrIF9TVEFOREFSRCB2YWx1ZXMgaGF2ZSBiZWVuIGNvbXB1dGVkCiAgICAgLy8gc2V0IHRoZSB2YWx1ZXMgdG8gT2JqQy9PYmpDWFggX1NUQU5EQVJEIHZhcmlhYmxlcwogICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7Ci0gICAgICBhdXRvIGNvcHlTdGFuZGFyZFRvT2JqTGFuZyA9IFsmXShMYW5ndWFnZVBhaXIgY29uc3QmIGxhbmcpIC0+IGJvb2wgewotICAgICAgICBpZiAoIXRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZy5maXJzdCwgIl9TVEFOREFSRCIpKSkgewotICAgICAgICAgIGF1dG8qIHN0YW5kYXJkID0KLSAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZy5zZWNvbmQsICJfU1RBTkRBUkQiKSk7Ci0gICAgICAgICAgaWYgKCFzdGFuZGFyZCkgewotICAgICAgICAgICAgc3RhbmRhcmQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcuc2Vjb25kLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLmZpcnN0LCAiX1NUQU5EQVJEIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9OwotICAgICAgYXV0byBjb3B5UHJvcGVydHlUb09iakxhbmcgPSBbJl0oTGFuZ3VhZ2VQYWlyIGNvbnN0JiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvcGVydHkpIHsKLSAgICAgICAgaWYgKCF0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcuZmlyc3QsIHByb3BlcnR5KSkgJiYKLSAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZy5zZWNvbmQsIHByb3BlcnR5KSkpIHsKLSAgICAgICAgICB0YXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoCi0gICAgICAgICAgICBjbVN0ckNhdChsYW5nLmZpcnN0LCBwcm9wZXJ0eSksCi0gICAgICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcuc2Vjb25kLCBwcm9wZXJ0eSkpKTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIGZvciAoYXV0byBjb25zdCYgbGFuZyA6IHBhaXJlZExhbmd1YWdlcykgewotICAgICAgICBpZiAoY29weVN0YW5kYXJkVG9PYmpMYW5nKGxhbmcpKSB7Ci0gICAgICAgICAgY29weVByb3BlcnR5VG9PYmpMYW5nKGxhbmcsICJfU1RBTkRBUkRfUkVRVUlSRUQiKTsKLSAgICAgICAgICBjb3B5UHJvcGVydHlUb09iakxhbmcobGFuZywgIl9FWFRFTlNJT05TIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChjb25zdCBjaGFyKiBzdGFuZGFyZCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNVREFfU1RBTkRBUkQiKSkgewotICAgICAgICBpZiAoc3RkOjpzdHJpbmd7IHN0YW5kYXJkIH0gPT0gIjk4IikgewotICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ1VEQV9TVEFOREFSRCIsICIwMyIpOwotICAgICAgICB9CisgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogY29uZmlnTmFtZXMpIHsKKyAgICAgICAgdGFyZ2V0LT5Db21wdXRlQ29tcGlsZUZlYXR1cmVzKGMsIGluZmVycmVkRW5hYmxlZExhbmd1YWdlcyk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC03OTIsMTAgKzgyNSwxMyBAQAogY29uc3QgY2hhciogY21Mb2NhbEdlbmVyYXRvcjo6R2V0UnVsZUxhdW5jaGVyKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApCiB7CisgIGNtUHJvcCBwOwogICBpZiAodGFyZ2V0KSB7Ci0gICAgcmV0dXJuIHRhcmdldC0+R2V0UHJvcGVydHkocHJvcCk7CisgICAgcCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcCk7CisgIH0gZWxzZSB7CisgICAgcCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eShwcm9wKTsKICAgfQotICByZXR1cm4gdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KHByb3ApOworICByZXR1cm4gcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyOwogfQogCiBzdGQ6OnN0cmluZyBjbUxvY2FsR2VuZXJhdG9yOjpDb252ZXJ0VG9JbmNsdWRlUmVmZXJlbmNlKApAQCAtODk5LDcgKzkzNSw3IEBACiAgIGlmICgoc2VwWzBdICE9ICcgJykgJiYgIWZsYWdzLmVtcHR5KCkgJiYgZmxhZ3MuYmFjaygpID09IHNlcFswXSkgewogICAgIGZsYWdzLmJhY2soKSA9ICcgJzsKICAgfQotICByZXR1cm4gZmxhZ3M7CisgIHJldHVybiBjbVRyaW1XaGl0ZXNwYWNlKGZsYWdzKTsKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBZGRDb21waWxlT3B0aW9ucyhzdGQ6OnN0cmluZyYgZmxhZ3MsCkBAIC05MjIsOSArOTU4LDkgQEAKICAgaWYgKGNvbnN0IGNoYXIqIGxhbmdGbGFnUmVnZXhTdHIgPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihsYW5nRmxhZ1JlZ2V4VmFyKSkgewogICAgIC8vIEZpbHRlciBmbGFncyBhY2NlcHRhYmxlIHRvIHRoaXMgbGFuZ3VhZ2UuCi0gICAgaWYgKGNvbnN0IGNoYXIqIHRhcmdldEZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9GTEFHUyIpKSB7CisgICAgaWYgKGNtUHJvcCB0YXJnZXRGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNPTVBJTEVfRkxBR1MiKSkgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdHM7Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZVdpbmRvd3NDb21tYW5kTGluZSh0YXJnZXRGbGFncywgb3B0cyk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZVdpbmRvd3NDb21tYW5kTGluZSh0YXJnZXRGbGFncy0+Y19zdHIoKSwgb3B0cyk7CiAgICAgICAvLyBSZS1lc2NhcGUgdGhlc2UgZmxhZ3Mgc2luY2UgQ09NUElMRV9GTEFHUyB3ZXJlIGFscmVhZHkgcGFyc2VkCiAgICAgICAvLyBhcyBhIGNvbW1hbmQgbGluZSBhYm92ZS4KICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVPcHRzOwpAQCAtOTM5LDEwICs5NzUsMTAgQEAKICAgICB0aGlzLT5BcHBlbmRDb21waWxlT3B0aW9ucyhmbGFncywgdGFyZ2V0Q29tcGlsZU9wdHMsIGxhbmdGbGFnUmVnZXhTdHIpOwogICB9IGVsc2UgewogICAgIC8vIFVzZSBhbGwgZmxhZ3MuCi0gICAgaWYgKGNvbnN0IGNoYXIqIHRhcmdldEZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9GTEFHUyIpKSB7CisgICAgaWYgKGNtUHJvcCB0YXJnZXRGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNPTVBJTEVfRkxBR1MiKSkgewogICAgICAgLy8gQ09NUElMRV9GTEFHUyBhcmUgbm90IGVzY2FwZWQgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVGbGFnczsKLSAgICAgIHRoaXMtPkFwcGVuZEZsYWdzKGNvbXBpbGVGbGFncywgdGFyZ2V0RmxhZ3MpOworICAgICAgdGhpcy0+QXBwZW5kRmxhZ3MoY29tcGlsZUZsYWdzLCAqdGFyZ2V0RmxhZ3MpOwogICAgICAgaWYgKCFjb21waWxlRmxhZ3MuZW1wdHkoKSkgewogICAgICAgICBmbGFncy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGNvbXBpbGVGbGFncykpOwogICAgICAgfQpAQCAtOTUzLDEyICs5ODksMTMgQEAKICAgICB0aGlzLT5BcHBlbmRDb21waWxlT3B0aW9ucyhmbGFncywgdGFyZ2V0Q29tcGlsZU9wdHMpOwogICB9CiAKKyAgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIgc3RhbmRhcmRSZXNvbHZlcih0aGlzLT5NYWtlZmlsZSk7CiAgIGZvciAoYXV0byBjb25zdCYgaXQgOiB0YXJnZXQtPkdldE1heExhbmd1YWdlU3RhbmRhcmRzKCkpIHsKLSAgICBjb25zdCBjaGFyKiBzdGFuZGFyZCA9IHRhcmdldC0+R2V0UHJvcGVydHkoaXQuZmlyc3QgKyAiX1NUQU5EQVJEIik7CisgICAgY21Qcm9wIHN0YW5kYXJkID0gdGFyZ2V0LT5HZXRMYW5ndWFnZVN0YW5kYXJkKGl0LmZpcnN0LCBjb25maWcpOwogICAgIGlmICghc3RhbmRhcmQpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzTGF0ZXJTdGFuZGFyZChpdC5maXJzdCwgc3RhbmRhcmQsIGl0LnNlY29uZCkpIHsKKyAgICBpZiAoc3RhbmRhcmRSZXNvbHZlci5Jc0xhdGVyU3RhbmRhcmQoaXQuZmlyc3QsICpzdGFuZGFyZCwgaXQuc2Vjb25kKSkgewogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICBlIDw8ICJUaGUgQ09NUElMRV9GRUFUVVJFUyBwcm9wZXJ0eSBvZiB0YXJnZXQgXCIiIDw8IHRhcmdldC0+R2V0TmFtZSgpCiAgICAgICAgIDw8ICJcIiB3YXMgZXZhbHVhdGVkIHdoZW4gY29tcHV0aW5nIHRoZSBsaW5rICIKQEAgLTk2NywxOSArMTAwNCwxOCBAQAogICAgICAgICA8PCAiXCIgZm9yIHRoYXQgY29tcHV0YXRpb24uICBDb21wdXRpbmcgdGhlICIKICAgICAgICAgICAgIkNPTVBJTEVfRkVBVFVSRVMgYmFzZWQgb24gdGhlIGxpbmsgaW1wbGVtZW50YXRpb24gcmVzdWx0ZWQgaW4gYSAiCiAgICAgICAgICAgICJoaWdoZXIgXCIiCi0gICAgICAgIDw8IGl0LmZpcnN0IDw8ICJfU1RBTkRBUkRcIiBcIiIgPDwgc3RhbmRhcmQKKyAgICAgICAgPDwgaXQuZmlyc3QgPDwgIl9TVEFOREFSRFwiIFwiIiA8PCAqc3RhbmRhcmQKICAgICAgICAgPDwgIlwiLiAgIgogICAgICAgICAgICAiVGhpcyBpcyBub3QgcGVybWl0dGVkLiBUaGUgQ09NUElMRV9GRUFUVVJFUyBtYXkgbm90IGJvdGggZGVwZW5kICIKICAgICAgICAgICAgIm9uICIKLSAgICAgICAgICAgImFuZCBiZSBkZXBlbmRlZCBvbiBieSB0aGUgbGluayBpbXBsZW1lbnRhdGlvbi4iCi0gICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgImFuZCBiZSBkZXBlbmRlZCBvbiBieSB0aGUgbGluayBpbXBsZW1lbnRhdGlvbi5cbiI7CiAgICAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKICAgICAgIHJldHVybjsKICAgICB9CiAgIH0KIAogICBzdGQ6OnN0cmluZyBjb21wUmVxRmxhZzsKLSAgdGhpcy0+QWRkQ29tcGlsZXJSZXF1aXJlbWVudEZsYWcoY29tcFJlcUZsYWcsIHRhcmdldCwgbGFuZyk7CisgIHRoaXMtPkFkZENvbXBpbGVyUmVxdWlyZW1lbnRGbGFnKGNvbXBSZXFGbGFnLCB0YXJnZXQsIGxhbmcsIGNvbmZpZyk7CiAgIGlmICghY29tcFJlcUZsYWcuZW1wdHkoKSkgewogICAgIGZsYWdzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoY29tcFJlcUZsYWcpKTsKICAgfQpAQCAtOTk1LDEwICsxMDMxLDEwIEBACiAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNYW5hZ2VkVHlwZTo6TWFuYWdlZCkgewogICAgICAgLy8gYWRkIC9KTUMgZmxhZ3MgaWYgdGFyZ2V0IHByb3BlcnR5IFZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcgaXMgc2V0CiAgICAgICAvLyB0byBPTgotICAgICAgaWYgKGNoYXIgY29uc3QqIGptY0V4cHJHZW4gPQorICAgICAgaWYgKGNtUHJvcCBqbWNFeHByR2VuID0KICAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkciKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBpc0pNQ0VuYWJsZWQgPQotICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoam1jRXhwckdlbiwgdGhpcywgY29uZmlnKTsKKyAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpqbWNFeHByR2VuLCB0aGlzLCBjb25maWcpOwogICAgICAgICBpZiAoY21Jc09uKGlzSk1DRW5hYmxlZCkpIHsKICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0VmVjID0gY21FeHBhbmRlZExpc3Qoam1jKTsKICAgICAgICAgICBzdGQ6OnN0cmluZyBqbWNGbGFnczsKQEAgLTEwMTgsNyArMTA1NCw4IEBACiAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNtQ3VzdG9tQ29tbWFuZFR5cGUgdHlwZSwKICAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKICAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLAotICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjbU9iamVjdExpYnJhcnlDb21tYW5kcyBvYmpMaWJDb21tYW5kcykKKyAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHMgb2JqTGliQ29tbWFuZHMsCisgIGJvb2wgc3RkUGlwZXNVVEY4KQogewogICBjbVRhcmdldCogdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXN0b21Db21tYW5kVGFyZ2V0KAogICAgIHRhcmdldCwgb2JqTGliQ29tbWFuZHMsIHRoaXMtPkRpcmVjdG9yeUJhY2t0cmFjZSk7CkBAIC0xMDI5LDcgKzEwNjYsNyBAQAogICBkZXRhaWw6OkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKICAgICAqdGhpcywgdGhpcy0+RGlyZWN0b3J5QmFja3RyYWNlLCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgdCwgYnlwcm9kdWN0cywKICAgICBkZXBlbmRzLCBjb21tYW5kTGluZXMsIHR5cGUsIGNvbW1lbnQsIHdvcmtpbmdEaXIsIGVzY2FwZU9sZFN0eWxlLAotICAgIHVzZXNfdGVybWluYWwsIGRlcGZpbGUsIGpvYl9wb29sLCBjb21tYW5kX2V4cGFuZF9saXN0cyk7CisgICAgdXNlc190ZXJtaW5hbCwgZGVwZmlsZSwgam9iX3Bvb2wsIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBzdGRQaXBlc1VURjgpOwogCiAgIHJldHVybiB0OwogfQpAQCAtMTAzOSwxNCArMTA3NiwxNCBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgbWFpbl9kZXBlbmRlbmN5LCBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLAogICBjb25zdCBjaGFyKiBjb21tZW50LCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsCiAgIGJvb2wgZXNjYXBlT2xkU3R5bGUsIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOwogICBjbUltcGxpY2l0RGVwZW5kc0xpc3Qgbm9faW1wbGljaXRfZGVwZW5kczsKICAgcmV0dXJuIHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKICAgICB7IG91dHB1dCB9LCBub19ieXByb2R1Y3RzLCBkZXBlbmRzLCBtYWluX2RlcGVuZGVuY3ksIG5vX2ltcGxpY2l0X2RlcGVuZHMsCiAgICAgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nRGlyLCByZXBsYWNlLCBlc2NhcGVPbGRTdHlsZSwgdXNlc190ZXJtaW5hbCwKLSAgICBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wpOworICAgIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBkZXBmaWxlLCBqb2JfcG9vbCwgc3RkUGlwZXNVVEY4KTsKIH0KIAogY21Tb3VyY2VGaWxlKiBjbUxvY2FsR2VuZXJhdG9yOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCkBAIC0xMDU3LDcgKzEwOTQsNyBAQAogICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAogICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCiAgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLCBib29sIHN0ZFBpcGVzVVRGOCkKIHsKICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdXRwdXQuCiAgIGlmIChvdXRwdXRzLmVtcHR5KCkpIHsKQEAgLTEwNjksNyArMTEwNiw3IEBACiAgICAgKnRoaXMsIHRoaXMtPkRpcmVjdG9yeUJhY2t0cmFjZSwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIG91dHB1dHMsCiAgICAgYnlwcm9kdWN0cywgZGVwZW5kcywgbWFpbl9kZXBlbmRlbmN5LCBpbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsCiAgICAgY29tbWVudCwgd29ya2luZ0RpciwgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsCi0gICAgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sKTsKKyAgICBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wsIHN0ZFBpcGVzVVRGOCk7CiB9CiAKIGNtVGFyZ2V0KiBjbUxvY2FsR2VuZXJhdG9yOjpBZGRVdGlsaXR5Q29tbWFuZCgKQEAgLTEwNzgsNyArMTExNSw3IEBACiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSwKICAgY29uc3QgY2hhciogY29tbWVudCwgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAotICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIGNtVGFyZ2V0KiB0YXJnZXQgPQogICAgIHRoaXMtPk1ha2VmaWxlLT5BZGROZXdVdGlsaXR5VGFyZ2V0KHV0aWxpdHlOYW1lLCBleGNsdWRlRnJvbUFsbCk7CkBAIC0xMDkyLDcgKzExMjksNyBAQAogICAgICp0aGlzLCB0aGlzLT5EaXJlY3RvcnlCYWNrdHJhY2UsIGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yLCB0YXJnZXQsCiAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFV0aWxpdHlPdXRwdXQodGFyZ2V0KSwgd29ya2luZ0RpciwgYnlwcm9kdWN0cywgZGVwZW5kcywKICAgICBjb21tYW5kTGluZXMsIGVzY2FwZU9sZFN0eWxlLCBjb21tZW50LCB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywKLSAgICBqb2JfcG9vbCk7CisgICAgam9iX3Bvb2wsIHN0ZFBpcGVzVVRGOCk7CiAKICAgcmV0dXJuIHRhcmdldDsKIH0KQEAgLTExNjQsMTEgKzEyMDEsMTAgQEAKICAgICAvLyAqIENvbXBpbGVycyBsaWtlIGdmb3J0cmFuIGRvIG5vdCBzZWFyY2ggdGhlaXIgb3duIGltcGxpY2l0IGluY2x1ZGUKICAgICAvLyAgIGRpcmVjdG9yaWVzIGZvciBtb2R1bGVzICgnLm1vZCcgZmlsZXMpLgogICAgIGlmIChsYW5nICE9ICJGb3J0cmFuIikgewotICAgICAgY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKLSAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfSU1QTElDSVRfSU5DTFVERV9ESVJFQ1RPUklFUyIpKTsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxscHRyKSB7Ci0gICAgICAgIHNpemVfdCBjb25zdCBpbXBEaXJWZWNPbGRTaXplID0gaW1wRGlyVmVjLnNpemUoKTsKLSAgICAgICAgY21FeHBhbmRMaXN0KHZhbHVlLCBpbXBEaXJWZWMpOworICAgICAgc2l6ZV90IGNvbnN0IGltcERpclZlY09sZFNpemUgPSBpbXBEaXJWZWMuc2l6ZSgpOworICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KAorICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfSU1QTElDSVRfSU5DTFVERV9ESVJFQ1RPUklFUyIpLAorICAgICAgICAgICAgaW1wRGlyVmVjKSkgewogICAgICAgICAvLyBGSVhNRTogVXNlIGNtUmFuZ2Ugd2l0aCAnYWR2YW5jZSgpJyB3aGVuIGl0IHN1cHBvcnRzIG5vbi1jb25zdC4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IGltcERpclZlY09sZFNpemU7IGkgPCBpbXBEaXJWZWMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhpbXBEaXJWZWNbaV0pOwpAQCAtMTE4Myw3ICsxMjE5LDcgQEAKICAgICAvLyBkaXJlY3RseS4gIEluIHRoaXMgY2FzZSBhZGRpbmcgLUkvdXNyL2luY2x1ZGUgY2FuIGhpZGUgU0RLIGhlYWRlcnMgc28gd2UKICAgICAvLyBtdXN0IHN0aWxsIGV4Y2x1ZGUgaXQuCiAgICAgaWYgKChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiIHx8IGxhbmcgPT0gIkNVREEiKSAmJgotICAgICAgICAhY21Db250YWlucyhpbXBEaXJWZWMsICIvdXNyL2luY2x1ZGUiKSAmJgorICAgICAgICAhY206OmNvbnRhaW5zKGltcERpclZlYywgIi91c3IvaW5jbHVkZSIpICYmCiAgICAgICAgIHN0ZDo6ZmluZF9pZihpbXBEaXJWZWMuYmVnaW4oKSwgaW1wRGlyVmVjLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgW10oc3RkOjpzdHJpbmcgY29uc3QmIGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNtSGFzTGl0ZXJhbFN1ZmZpeChkLCAiL3Vzci9pbmNsdWRlIik7CkBAIC0xMjA0LDEzICsxMjQwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgJmxhbmddKHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXIpIHsKICAgICByZXR1cm4gKAogICAgICAgLy8gRG8gbm90IGV4Y2x1ZGUgZGlyZWN0b3JpZXMgdGhhdCBhcmUgbm90IGluIGFuIGV4Y2x1ZGVkIHNldC4KLSAgICAgICgoIWNtQ29udGFpbnMoaW1wbGljaXRTZXQsIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0UmVhbFBhdGgoZGlyKSkpICYmCi0gICAgICAgKCFjbUNvbnRhaW5zKGltcGxpY2l0RXhjbHVkZSwgZGlyKSkpCisgICAgICAoKCFjbTo6Y29udGFpbnMoaW1wbGljaXRTZXQsIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0UmVhbFBhdGgoZGlyKSkpICYmCisgICAgICAgKCFjbTo6Y29udGFpbnMoaW1wbGljaXRFeGNsdWRlLCBkaXIpKSkKICAgICAgIC8vIERvIG5vdCBleGNsdWRlIGVudHJpZXMgb2YgdGhlIENQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGV2ZW4gdGhvdWdoCiAgICAgICAvLyB0aGV5IGFyZSBpbXBsaWNpdGx5IHNlYXJjaGVkIGJ5IHRoZSBjb21waWxlci4gIFRoZXkgYXJlIG1lYW50IHRvIGJlCiAgICAgICAvLyB1c2VyLXNwZWNpZmllZCBkaXJlY3RvcmllcyB0aGF0IGNhbiBiZSByZS1vcmRlcmVkIG9yIGNvbnZlcnRlZCB0bwogICAgICAgLy8gLWlzeXN0ZW0gd2l0aG91dCBicmVha2luZyByZWFsIGNvbXBpbGVyIGJ1aWx0aW4gaGVhZGVycy4KLSAgICAgIHx8ICgobGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiQ1hYIikgJiYgY21Db250YWlucyh0aGlzLT5FbnZDUEFUSCwgZGlyKSkpOworICAgICAgfHwKKyAgICAgICgobGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiQ1hYIikgJiYgY206OmNvbnRhaW5zKHRoaXMtPkVudkNQQVRILCBkaXIpKSk7CiAgIH07CiAKICAgLy8gR2V0IHRoZSB0YXJnZXQtc3BlY2lmaWMgaW5jbHVkZSBkaXJlY3Rvcmllcy4KQEAgLTEyNTcsNyArMTI5NCw3IEBACiAgIGlmICghc3RyaXBJbXBsaWNpdERpcnMpIHsKICAgICAvLyBBcHBlbmQgaW1wbGljaXQgZGlyZWN0b3JpZXMgdGhhdCB3ZXJlIHJlcXVlc3RlZCBieSB0aGUgdXNlciBvbmx5CiAgICAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIHVkciA6IHVzZXJEaXJzKSB7Ci0gICAgICBpZiAoY21Db250YWlucyhpbXBsaWNpdFNldCwgY21TeXN0ZW1Ub29sczo6R2V0UmVhbFBhdGgodWRyLlZhbHVlKSkpIHsKKyAgICAgIGlmIChjbTo6Y29udGFpbnMoaW1wbGljaXRTZXQsIGNtU3lzdGVtVG9vbHM6OkdldFJlYWxQYXRoKHVkci5WYWx1ZSkpKSB7CiAgICAgICAgIGVtaXRCVCh1ZHIpOwogICAgICAgfQogICAgIH0KQEAgLTEzMTQsMTQgKzEzNTEsMTUgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywgc3RkOjpzdHJpbmcgY29uc3QmIGxpbmtMYW5ndWFnZSwKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKIHsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgY29uZmlnVXBwZXIgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBmbGFnczsKICAgaWYgKGxpbmtMYW5ndWFnZSAhPSAiU3dpZnQiKSB7CiAgICAgc3RkOjpzdHJpbmcgc3RhdGljTGliRmxhZ3M7CiAgICAgdGhpcy0+QXBwZW5kRmxhZ3MoCiAgICAgICBzdGF0aWNMaWJGbGFncywKICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHUyIpKTsKLSAgICBpZiAoIWNvbmZpZy5lbXB0eSgpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBuYW1lID0gIkNNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NfIiArIGNvbmZpZzsKKyAgICBpZiAoIWNvbmZpZ1VwcGVyLmVtcHR5KCkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSAiQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU18iICsgY29uZmlnVXBwZXI7CiAgICAgICB0aGlzLT5BcHBlbmRGbGFncyhzdGF0aWNMaWJGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihuYW1lKSk7CiAgICAgfQpAQCAtMTMzMyw4ICsxMzcxLDggQEAKICAgc3RkOjpzdHJpbmcgc3RhdGljTGliRmxhZ3M7CiAgIHRoaXMtPkFwcGVuZEZsYWdzKHN0YXRpY0xpYkZsYWdzLAogICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiU1RBVElDX0xJQlJBUllfRkxBR1MiKSk7Ci0gIGlmICghY29uZmlnLmVtcHR5KCkpIHsKLSAgICBzdGQ6OnN0cmluZyBuYW1lID0gIlNUQVRJQ19MSUJSQVJZX0ZMQUdTXyIgKyBjb25maWc7CisgIGlmICghY29uZmlnVXBwZXIuZW1wdHkoKSkgeworICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSAiU1RBVElDX0xJQlJBUllfRkxBR1NfIiArIGNvbmZpZ1VwcGVyOwogICAgIHRoaXMtPkFwcGVuZEZsYWdzKHN0YXRpY0xpYkZsYWdzLCB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eShuYW1lKSk7CiAgIH0KIApAQCAtMTM1MCw2ICsxMzg4LDMwIEBACiAgIHJldHVybiBmbGFnczsKIH0KIAordm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpHZXREZXZpY2VMaW5rRmxhZ3MoCisgIGNtTGlua0xpbmVDb21wdXRlciogbGlua0xpbmVDb21wdXRlciwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgc3RkOjpzdHJpbmcmIGxpbmtMaWJzLCBzdGQ6OnN0cmluZyYgbGlua0ZsYWdzLCBzdGQ6OnN0cmluZyYgZnJhbWV3b3JrUGF0aCwKKyAgc3RkOjpzdHJpbmcmIGxpbmtQYXRoLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQoreworICBjbUdlbmVyYXRvclRhcmdldDo6RGV2aWNlTGlua1NldHRlciBzZXR0ZXIoKnRhcmdldCk7CisKKyAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBwY2xpID0gdGFyZ2V0LT5HZXRMaW5rSW5mb3JtYXRpb24oY29uZmlnKTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KKyAgICBsaW5rTGluZUNvbXB1dGVyLT5HZXRMaW5rZXJMYW5ndWFnZSh0YXJnZXQsIGNvbmZpZyk7CisKKyAgaWYgKHBjbGkpIHsKKyAgICAvLyBDb21wdXRlIHRoZSByZXF1aXJlZCBjdWRhIGRldmljZSBsaW5rIGxpYnJhcmllcyB3aGVuCisgICAgLy8gcmVzb2x2aW5nIGN1ZGEgZGV2aWNlIHN5bWJvbHMKKyAgICB0aGlzLT5PdXRwdXRMaW5rTGlicmFyaWVzKHBjbGksIGxpbmtMaW5lQ29tcHV0ZXIsIGxpbmtMaWJzLCBmcmFtZXdvcmtQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1BhdGgpOworICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtPcHRzOworICB0YXJnZXQtPkdldExpbmtPcHRpb25zKGxpbmtPcHRzLCBjb25maWcsIGxpbmtMYW5ndWFnZSk7CisgIC8vIExJTktfT1BUSU9OUyBhcmUgZXNjYXBlZC4KKyAgdGhpcy0+QXBwZW5kQ29tcGlsZU9wdGlvbnMobGlua0ZsYWdzLCBsaW5rT3B0cyk7Cit9CisKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6R2V0VGFyZ2V0RmxhZ3MoCiAgIGNtTGlua0xpbmVDb21wdXRlciogbGlua0xpbmVDb21wdXRlciwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKICAgc3RkOjpzdHJpbmcmIGxpbmtMaWJzLCBzdGQ6OnN0cmluZyYgZmxhZ3MsIHN0ZDo6c3RyaW5nJiBsaW5rRmxhZ3MsCkBAIC0xMzcxLDIzICsxNDMzLDE3IEBACiAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIGxpbmtGbGFncywgc3RkOjpzdHJpbmcmIGZyYW1ld29ya1BhdGgsCiAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIGxpbmtQYXRoLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogewotICBjb25zdCBzdGQ6OnN0cmluZyBidWlsZFR5cGUgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgY29uZmlnVXBwZXIgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBwY2xpID0gdGFyZ2V0LT5HZXRMaW5rSW5mb3JtYXRpb24oY29uZmlnKTsKICAgY29uc3QgY2hhciogbGlicmFyeUxpbmtWYXJpYWJsZSA9CiAgICAgIkNNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MiOyAvLyBkZWZhdWx0IHRvIHNoYXJlZCBsaWJyYXJ5CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KLSAgICBsaW5rTGluZUNvbXB1dGVyLT5HZXRMaW5rZXJMYW5ndWFnZSh0YXJnZXQsIGJ1aWxkVHlwZSk7CisgICAgbGlua0xpbmVDb21wdXRlci0+R2V0TGlua2VyTGFuZ3VhZ2UodGFyZ2V0LCBjb25maWcpOwogCiAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6Ci0gICAgICBsaW5rRmxhZ3MgPSB0aGlzLT5HZXRTdGF0aWNMaWJyYXJ5RmxhZ3MoYnVpbGRUeXBlLCBsaW5rTGFuZ3VhZ2UsIHRhcmdldCk7Ci0gICAgICBpZiAocGNsaSAmJiBkeW5hbWljX2Nhc3Q8Y21MaW5rTGluZURldmljZUNvbXB1dGVyKj4obGlua0xpbmVDb21wdXRlcikpIHsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcmVxdWlyZWQgY3VkYSBkZXZpY2UgbGluayBsaWJyYXJpZXMgd2hlbgotICAgICAgICAvLyByZXNvbHZpbmcgY3VkYSBkZXZpY2Ugc3ltYm9scwotICAgICAgICB0aGlzLT5PdXRwdXRMaW5rTGlicmFyaWVzKHBjbGksIGxpbmtMaW5lQ29tcHV0ZXIsIGxpbmtMaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29ya1BhdGgsIGxpbmtQYXRoKTsKLSAgICAgIH0KKyAgICAgIGxpbmtGbGFncyA9IHRoaXMtPkdldFN0YXRpY0xpYnJhcnlGbGFncyhjb25maWcsIGxpbmtMYW5ndWFnZSwgdGFyZ2V0KTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKICAgICAgIGxpYnJhcnlMaW5rVmFyaWFibGUgPSAiQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHUyI7CkBAIC0xMzk3LDggKzE0NTMsOCBAQAogICAgICAgaWYgKGxpbmtMYW5ndWFnZSAhPSAiU3dpZnQiKSB7CiAgICAgICAgIHNoYXJlZExpYkZsYWdzID0gY21TdHJDYXQoCiAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKGxpYnJhcnlMaW5rVmFyaWFibGUpLCAnICcpOwotICAgICAgICBpZiAoIWJ1aWxkVHlwZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgYnVpbGQgPSBjbVN0ckNhdChsaWJyYXJ5TGlua1ZhcmlhYmxlLCAnXycsIGJ1aWxkVHlwZSk7CisgICAgICAgIGlmICghY29uZmlnVXBwZXIuZW1wdHkoKSkgeworICAgICAgICAgIHN0ZDo6c3RyaW5nIGJ1aWxkID0gY21TdHJDYXQobGlicmFyeUxpbmtWYXJpYWJsZSwgJ18nLCBjb25maWdVcHBlcik7CiAgICAgICAgICAgc2hhcmVkTGliRmxhZ3MgKz0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKGJ1aWxkKTsKICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSAiICI7CiAgICAgICAgIH0KQEAgLTE0MDYsMzAgKzE0NjIsMzAgQEAKICAgICAgICAgICAgICEodGhpcy0+TWFrZWZpbGUtPklzT24oIkNZR1dJTiIpIHx8CiAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJNSU5HVyIpKSkgewogICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7Ci0gICAgICAgICAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBidWlsZFR5cGUpOworICAgICAgICAgIHRhcmdldC0+R2V0U291cmNlRmlsZXMoc291cmNlcywgY29uZmlnKTsKICAgICAgICAgICBzdGQ6OnN0cmluZyBkZWZGbGFnID0KICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfTElOS19ERUZfRklMRV9GTEFHIik7CiAgICAgICAgICAgZm9yIChjbVNvdXJjZUZpbGUqIHNmIDogc291cmNlcykgewogICAgICAgICAgICAgaWYgKHNmLT5HZXRFeHRlbnNpb24oKSA9PSAiZGVmIikgewogICAgICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSBkZWZGbGFnOwotICAgICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCkpLCBTSEVMTCk7CisgICAgICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9CisgICAgICAgICAgICAgICAgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHNmLT5SZXNvbHZlRnVsbFBhdGgoKSwgU0hFTEwpOwogICAgICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSAiICI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGNvbnN0IGNoYXIqIHRhcmdldExpbmtGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfRkxBR1MiKTsKKyAgICAgIGNtUHJvcCB0YXJnZXRMaW5rRmxhZ3MgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CiAgICAgICBpZiAodGFyZ2V0TGlua0ZsYWdzKSB7Ci0gICAgICAgIHNoYXJlZExpYkZsYWdzICs9IHRhcmdldExpbmtGbGFnczsKKyAgICAgICAgc2hhcmVkTGliRmxhZ3MgKz0gKnRhcmdldExpbmtGbGFnczsKICAgICAgICAgc2hhcmVkTGliRmxhZ3MgKz0gIiAiOwogICAgICAgfQotICAgICAgaWYgKCFidWlsZFR5cGUuZW1wdHkoKSkgeworICAgICAgaWYgKCFjb25maWdVcHBlci5lbXB0eSgpKSB7CiAgICAgICAgIHRhcmdldExpbmtGbGFncyA9Ci0gICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdCgiTElOS19GTEFHU18iLCBidWlsZFR5cGUpKTsKKyAgICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KCJMSU5LX0ZMQUdTXyIsIGNvbmZpZ1VwcGVyKSk7CiAgICAgICAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKLSAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSB0YXJnZXRMaW5rRmxhZ3M7CisgICAgICAgICAgc2hhcmVkTGliRmxhZ3MgKz0gKnRhcmdldExpbmtGbGFnczsKICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSAiICI7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTE0NTIsOSArMTUwOCw5IEBACiAgICAgICBpZiAobGlua0xhbmd1YWdlICE9ICJTd2lmdCIpIHsKICAgICAgICAgZXhlRmxhZ3MgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0VYRV9MSU5LRVJfRkxBR1MiKTsKICAgICAgICAgZXhlRmxhZ3MgKz0gIiAiOwotICAgICAgICBpZiAoIWJ1aWxkVHlwZS5lbXB0eSgpKSB7CisgICAgICAgIGlmICghY29uZmlnVXBwZXIuZW1wdHkoKSkgewogICAgICAgICAgIGV4ZUZsYWdzICs9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV9FWEVfTElOS0VSX0ZMQUdTXyIsIGJ1aWxkVHlwZSkpOworICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFX0VYRV9MSU5LRVJfRkxBR1NfIiwgY29uZmlnVXBwZXIpKTsKICAgICAgICAgICBleGVGbGFncyArPSAiICI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxpbmtMYW5ndWFnZS5lbXB0eSgpKSB7CkBAIC0xNDgxLDE1ICsxNTM3LDE0IEBACiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgdGhpcy0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoZmxhZ3MsIHRhcmdldCwgbGlua0xhbmd1YWdlLCBidWlsZFR5cGUpOworICAgICAgdGhpcy0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoZmxhZ3MsIHRhcmdldCwgbGlua0xhbmd1YWdlLCBjb25maWcpOwogICAgICAgaWYgKHBjbGkpIHsKICAgICAgICAgdGhpcy0+T3V0cHV0TGlua0xpYnJhcmllcyhwY2xpLCBsaW5rTGluZUNvbXB1dGVyLCBsaW5rTGlicywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtQYXRoLCBsaW5rUGF0aCk7CiAgICAgICB9CiAKLSAgICAgIGlmIChjbUlzT24odGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkJVSUxEX1NIQVJFRF9MSUJTIikpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHNGbGFnVmFyID0gc3RkOjpzdHJpbmcoIkNNQUtFX1NIQVJFRF9CVUlMRF8iKSArCi0gICAgICAgICAgbGlua0xhbmd1YWdlICsgc3RkOjpzdHJpbmcoIl9GTEFHUyIpOworICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJCVUlMRF9TSEFSRURfTElCUyIpKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHNGbGFnVmFyID0gIkNNQUtFX1NIQVJFRF9CVUlMRF8iICsgbGlua0xhbmd1YWdlICsgIl9GTEFHUyI7CiAgICAgICAgIGV4ZUZsYWdzICs9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihzRmxhZ1Zhcik7CiAgICAgICAgIGV4ZUZsYWdzICs9ICIgIjsKICAgICAgIH0KQEAgLTE1MDEsMTYgKzE1NTYsMTYgQEAKICAgICAgICAgZXhlRmxhZ3MgKz0gIiAiOwogICAgICAgfQogCi0gICAgICBjb25zdCBjaGFyKiB0YXJnZXRMaW5rRmxhZ3MgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CisgICAgICBjbVByb3AgdGFyZ2V0TGlua0ZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19GTEFHUyIpOwogICAgICAgaWYgKHRhcmdldExpbmtGbGFncykgewotICAgICAgICBleGVGbGFncyArPSB0YXJnZXRMaW5rRmxhZ3M7CisgICAgICAgIGV4ZUZsYWdzICs9ICp0YXJnZXRMaW5rRmxhZ3M7CiAgICAgICAgIGV4ZUZsYWdzICs9ICIgIjsKICAgICAgIH0KLSAgICAgIGlmICghYnVpbGRUeXBlLmVtcHR5KCkpIHsKKyAgICAgIGlmICghY29uZmlnVXBwZXIuZW1wdHkoKSkgewogICAgICAgICB0YXJnZXRMaW5rRmxhZ3MgPQotICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQoIkxJTktfRkxBR1NfIiwgYnVpbGRUeXBlKSk7CisgICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdCgiTElOS19GTEFHU18iLCBjb25maWdVcHBlcikpOwogICAgICAgICBpZiAodGFyZ2V0TGlua0ZsYWdzKSB7Ci0gICAgICAgICAgZXhlRmxhZ3MgKz0gdGFyZ2V0TGlua0ZsYWdzOworICAgICAgICAgIGV4ZUZsYWdzICs9ICp0YXJnZXRMaW5rRmxhZ3M7CiAgICAgICAgICAgZXhlRmxhZ3MgKz0gIiAiOwogICAgICAgICB9CiAgICAgICB9CkBAIC0xNTQxLDE2ICsxNTk2LDE3IEBACiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkdldFRhcmdldENvbXBpbGVGbGFncyhjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFyY2gpCiB7CiAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gdG1wRmxhZ3MgPQotICAgIHRoaXMtPkdldFRhcmdldENvbXBpbGVGbGFncyh0YXJnZXQsIGNvbmZpZywgbGFuZyk7CisgICAgdGhpcy0+R2V0VGFyZ2V0Q29tcGlsZUZsYWdzKHRhcmdldCwgY29uZmlnLCBsYW5nLCBhcmNoKTsKICAgdGhpcy0+QXBwZW5kRmxhZ3MoZmxhZ3MsIHRtcEZsYWdzKTsKIH0KIAogc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBjbUxvY2FsR2VuZXJhdG9yOjpHZXRUYXJnZXRDb21waWxlRmxhZ3MoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKQorICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgc3RkOjpzdHJpbmcgY29uc3QmIGFyY2gpCiB7CiAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gZmxhZ3M7CiAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVGbGFnczsKQEAgLTE1NjQsNyArMTYyMCw3IEBACiAgICAgdGhpcy0+QXBwZW5kRmVhdHVyZU9wdGlvbnMoY29tcGlsZUZsYWdzLCBsYW5nLCAiSVBPIik7CiAgIH0KIAotICB0aGlzLT5BZGRBcmNoaXRlY3R1cmVGbGFncyhjb21waWxlRmxhZ3MsIHRhcmdldCwgbGFuZywgY29uZmlnKTsKKyAgdGhpcy0+QWRkQXJjaGl0ZWN0dXJlRmxhZ3MoY29tcGlsZUZsYWdzLCB0YXJnZXQsIGxhbmcsIGNvbmZpZywgYXJjaCk7CiAKICAgaWYgKGxhbmcgPT0gIkZvcnRyYW4iKSB7CiAgICAgdGhpcy0+QXBwZW5kRmxhZ3MoY29tcGlsZUZsYWdzLApAQCAtMTc1MywxMCArMTgwOSwxMCBAQAogICAgICAgICAgICAgICAiQ01BS0VfUE9MSUNZX1dBUk5JTkdfQ01QMDA2NSIpKSB7CiAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHc7CiAgICAgICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwotICAgICAgICAgIHcgPDwgY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhjbVBvbGljaWVzOjpDTVAwMDY1KSA8PCAiXG4iCi0gICAgICAgICAgICAiRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBDTWFrZSwgIgotICAgICAgICAgICAgImFkZGl0aW9uYWwgZmxhZ3MgbWF5IGJlIGFkZGVkIHRvIGV4cG9ydCBzeW1ib2xzIG9uIGFsbCAiCi0gICAgICAgICAgICAiZXhlY3V0YWJsZXMgcmVnYXJkbGVzcyBvZiB0aGVpciBFTkFCTEVfRVhQT1JUUyBwcm9wZXJ0eS4iOworICAgICAgICAgICAgdyA8PCBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAwNjUpIDw8ICJcbiIKKyAgICAgICAgICAgICAgIkZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgQ01ha2UsICIKKyAgICAgICAgICAgICAgImFkZGl0aW9uYWwgZmxhZ3MgbWF5IGJlIGFkZGVkIHRvIGV4cG9ydCBzeW1ib2xzIG9uIGFsbCAiCisgICAgICAgICAgICAgICJleGVjdXRhYmxlcyByZWdhcmRsZXNzIG9mIHRoZWlyIEVOQUJMRV9FWFBPUlRTIHByb3BlcnR5LiI7CiAgICAgICAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgICAgICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywgdy5zdHIoKSk7CiAgICAgICAgIH0KQEAgLTE4MTIsNyArMTg2OCw4IEBACiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkFkZEFyY2hpdGVjdHVyZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWx0ZXJBcmNoKQogewogICAvLyBPbmx5IGFkZCBBcHBsZSBzcGVjaWZpYyBmbGFncyBvbiBBcHBsZSBwbGF0Zm9ybXMKICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJBUFBMRSIpICYmIHRoaXMtPkVtaXRVbml2ZXJzYWxCaW5hcnlGbGFncykgewpAQCAtMTgyMSw4ICsxODc4LDEwIEBACiAgICAgaWYgKCFhcmNocy5lbXB0eSgpICYmICFsYW5nLmVtcHR5KCkgJiYKICAgICAgICAgKGxhbmdbMF0gPT0gJ0MnIHx8IGxhbmdbMF0gPT0gJ0YnIHx8IGxhbmdbMF0gPT0gJ08nKSkgewogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJjaCA6IGFyY2hzKSB7Ci0gICAgICAgIGZsYWdzICs9ICIgLWFyY2ggIjsKLSAgICAgICAgZmxhZ3MgKz0gYXJjaDsKKyAgICAgICAgaWYgKGZpbHRlckFyY2guZW1wdHkoKSB8fCBmaWx0ZXJBcmNoID09IGFyY2gpIHsKKyAgICAgICAgICBmbGFncyArPSAiIC1hcmNoICI7CisgICAgICAgICAgZmxhZ3MgKz0gYXJjaDsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIApAQCAtMTg0MSwxMCArMTkwMCwxMiBAQAogICAgICAgICAgIGlmIChjbUlzT2ZmKGFyY2hTeXNyb290KSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgfQotICAgICAgICAgIGZsYWdzICs9ICIgLVhhcmNoXyIgKyBhcmNoICsgIiAiOwotICAgICAgICAgIC8vIENvbWJpbmUgc3lzcm9vdCBmbGFnIGFuZCBwYXRoIHRvIHdvcmsgd2l0aCAtWGFyY2gKLSAgICAgICAgICBzdGQ6OnN0cmluZyBhcmNoX3N5c3Jvb3QgPSBzeXNyb290RmxhZyArIGFyY2hTeXNyb290OwotICAgICAgICAgIGZsYWdzICs9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChhcmNoX3N5c3Jvb3QsIFNIRUxMKTsKKyAgICAgICAgICBpZiAoZmlsdGVyQXJjaC5lbXB0eSgpIHx8IGZpbHRlckFyY2ggPT0gYXJjaCkgeworICAgICAgICAgICAgZmxhZ3MgKz0gIiAtWGFyY2hfIiArIGFyY2ggKyAiICI7CisgICAgICAgICAgICAvLyBDb21iaW5lIHN5c3Jvb3QgZmxhZyBhbmQgcGF0aCB0byB3b3JrIHdpdGggLVhhcmNoCisgICAgICAgICAgICBzdGQ6OnN0cmluZyBhcmNoX3N5c3Jvb3QgPSBzeXNyb290RmxhZyArIGFyY2hTeXNyb290OworICAgICAgICAgICAgZmxhZ3MgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KGFyY2hfc3lzcm9vdCwgU0hFTEwpOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfSBlbHNlIGlmIChzeXNyb290ICYmICpzeXNyb290KSB7CiAgICAgICAgIGZsYWdzICs9ICIgIjsKQEAgLTE4NzksMjggKzE5NDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogCiAgIGlmIChsYW5nID09ICJTd2lmdCIpIHsKLSAgICBpZiAoY29uc3QgY2hhciogdiA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlN3aWZ0X0xBTkdVQUdFX1ZFUlNJT04iKSkgeworICAgIGlmIChjbVByb3AgdiA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlN3aWZ0X0xBTkdVQUdFX1ZFUlNJT04iKSkgewogICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OlZlcnNpb25Db21wYXJlKAogICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6T1BfR1JFQVRFUl9FUVVBTCwKICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9Td2lmdF9DT01QSUxFUl9WRVJTSU9OIiksCiAgICAgICAgICAgICAiNC4yIikpIHsKLSAgICAgICAgdGhpcy0+QXBwZW5kRmxhZ3MoZmxhZ3MsICItc3dpZnQtdmVyc2lvbiAiICsgc3RkOjpzdHJpbmcodikpOworICAgICAgICB0aGlzLT5BcHBlbmRGbGFncyhmbGFncywgIi1zd2lmdC12ZXJzaW9uICIgKyAqdik7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKGxhbmcgPT0gIkNVREEiKSB7CisgICAgdGFyZ2V0LT5BZGRDVURBQXJjaGl0ZWN0dXJlRmxhZ3MoZmxhZ3MpOworICAgIHRhcmdldC0+QWRkQ1VEQVRvb2xraXRGbGFncyhmbGFncyk7CisKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcGlsZXIgPQorICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DVURBX0NPTVBJTEVSX0lEIik7CisKKyAgICBpZiAoY29tcGlsZXIgPT0gIkNsYW5nIikgeworICAgICAgYm9vbCBzZXBhcmFibGUgPSB0YXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiIpOworCisgICAgICBpZiAoc2VwYXJhYmxlKSB7CisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBpc24ndCBzdXBwb3J0ZWQgb24gQ2xhbmcuICIKKyAgICAgICAgICAiU2VlIENNYWtlIGlzc3VlICMyMDcyNi4iKTsKICAgICAgIH0KICAgICB9CiAgIH0KIAogICAvLyBBZGQgTVNWQyBydW50aW1lIGxpYnJhcnkgZmxhZ3MuICBUaGlzIGlzIGFjdGl2YXRlZCBieSB0aGUgcHJlc2VuY2UKICAgLy8gb2YgYSBkZWZhdWx0IHNlbGVjdGlvbiB3aGV0aGVyIG9yIG5vdCBpdCBpcyBvdmVycmlkZGVuIGJ5IGEgcHJvcGVydHkuCi0gIGNvbnN0IGNoYXIqIG1zdmNSdW50aW1lTGlicmFyeURlZmF1bHQgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUIik7Ci0gIGlmIChtc3ZjUnVudGltZUxpYnJhcnlEZWZhdWx0ICYmICptc3ZjUnVudGltZUxpYnJhcnlEZWZhdWx0KSB7Ci0gICAgY29uc3QgY2hhciogbXN2Y1J1bnRpbWVMaWJyYXJ5VmFsdWUgPQorICBjbVByb3AgbXN2Y1J1bnRpbWVMaWJyYXJ5RGVmYXVsdCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZigiQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUllfREVGQVVMVCIpOworICBpZiAoY21Ob25lbXB0eShtc3ZjUnVudGltZUxpYnJhcnlEZWZhdWx0KSkgeworICAgIGNtUHJvcCBtc3ZjUnVudGltZUxpYnJhcnlWYWx1ZSA9CiAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJNU1ZDX1JVTlRJTUVfTElCUkFSWSIpOwogICAgIGlmICghbXN2Y1J1bnRpbWVMaWJyYXJ5VmFsdWUpIHsKICAgICAgIG1zdmNSdW50aW1lTGlicmFyeVZhbHVlID0gbXN2Y1J1bnRpbWVMaWJyYXJ5RGVmYXVsdDsKICAgICB9CiAgICAgc3RkOjpzdHJpbmcgY29uc3QgbXN2Y1J1bnRpbWVMaWJyYXJ5ID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgIG1zdmNSdW50aW1lTGlicmFyeVZhbHVlLCB0aGlzLCBjb25maWcsIHRhcmdldCk7CisgICAgICAqbXN2Y1J1bnRpbWVMaWJyYXJ5VmFsdWUsIHRoaXMsIGNvbmZpZywgdGFyZ2V0KTsKICAgICBpZiAoIW1zdmNSdW50aW1lTGlicmFyeS5lbXB0eSgpKSB7CiAgICAgICBpZiAoY29uc3QgY2hhciogbXN2Y1J1bnRpbWVMaWJyYXJ5T3B0aW9ucyA9CiAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKQEAgLTE5MzIsNyArMjAxMCw3IEBACiAgICAgLy8gd2hlbiBsaW5raW5nIGluIG9yZGVyIHRvIHVzZSB0aGUgbWF0Y2hpbmcgc3RhbmRhcmQgbGlicmFyeS4KICAgICAvLyBGSVhNRTogSWYgQ01ha2UgZ2FpbnMgYW4gYWJzdHJhY3Rpb24gZm9yIHN0YW5kYXJkIGxpYnJhcnkKICAgICAvLyBzZWxlY3Rpb24sIHRoaXMgd2lsbCBoYXZlIHRvIGJlIHJlY29uY2lsZWQgd2l0aCBpdC4KLSAgICB0aGlzLT5BZGRDb21waWxlclJlcXVpcmVtZW50RmxhZyhmbGFncywgdGFyZ2V0LCBsYW5nKTsKKyAgICB0aGlzLT5BZGRDb21waWxlclJlcXVpcmVtZW50RmxhZyhmbGFncywgdGFyZ2V0LCBsYW5nLCBjb25maWcpOwogICB9CiAKICAgdGhpcy0+QWRkTGFuZ3VhZ2VGbGFncyhmbGFncywgdGFyZ2V0LCBsYW5nLCBjb25maWcpOwpAQCAtMTk1MCw2ICsyMDI4LDE1IEBACiAgICAgcmV0dXJuIGltcG9ydGVkLT5zZWNvbmQ7CiAgIH0KIAorICAvLyBmaW5kIGxvY2FsIGFsaWFzIHRvIGltcG9ydGVkIHRhcmdldAorICBhdXRvIGFsaWFzZWQgPSB0aGlzLT5BbGlhc1RhcmdldHMuZmluZChuYW1lKTsKKyAgaWYgKGFsaWFzZWQgIT0gdGhpcy0+QWxpYXNUYXJnZXRzLmVuZCgpKSB7CisgICAgaW1wb3J0ZWQgPSB0aGlzLT5JbXBvcnRlZEdlbmVyYXRvclRhcmdldHMuZmluZChhbGlhc2VkLT5zZWNvbmQpOworICAgIGlmIChpbXBvcnRlZCAhPSB0aGlzLT5JbXBvcnRlZEdlbmVyYXRvclRhcmdldHMuZW5kKCkpIHsKKyAgICAgIHJldHVybiBpbXBvcnRlZC0+c2Vjb25kOworICAgIH0KKyAgfQorCiAgIGlmIChjbUdlbmVyYXRvclRhcmdldCogdCA9IHRoaXMtPkZpbmRMb2NhbE5vbkFsaWFzR2VuZXJhdG9yVGFyZ2V0KG5hbWUpKSB7CiAgICAgcmV0dXJuIHQ7CiAgIH0KQEAgLTE5NzMsNyArMjA2MCw2IEBACiAgIGlmIChuYW1lLmVtcHR5KCkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLQogICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVMYXN0RXh0ZW5zaW9uKG5hbWUpID09ICIuZXhlIikgewogICAgIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG5hbWUpOwogICB9CkBAIC0yMDEzLDExICsyMDk5LDkgQEAKICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWToKICAgICAgICAgLy8gQW4gb2JqZWN0IGxpYnJhcnkgaGFzIG5vIHNpbmdsZSBmaWxlIG9uIHdoaWNoIHRvIGRlcGVuZC4KICAgICAgICAgLy8gVGhpcyB3YXMgbGlzdGVkIHRvIGdldCB0aGUgdGFyZ2V0LWxldmVsIGRlcGVuZGVuY3kuCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWToKICAgICAgICAgLy8gQW4gaW50ZXJmYWNlIGxpYnJhcnkgaGFzIG5vIGZpbGUgb24gd2hpY2ggdG8gZGVwZW5kLgogICAgICAgICAvLyBUaGlzIHdhcyBsaXN0ZWQgdG8gZ2V0IHRoZSB0YXJnZXQtbGV2ZWwgZGVwZW5kZW5jeS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDoKICAgICAgICAgLy8gQSB1dGlsaXR5IHRhcmdldCBoYXMgbm8gZmlsZSBvbiB3aGljaCB0byBkZXBlbmQuICBUaGlzIHdhcyBsaXN0ZWQKQEAgLTIwNjksMTU3ICsyMTUzLDIxIEBACiB9CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkQ29tcGlsZXJSZXF1aXJlbWVudEZsYWcoCi0gIHN0ZDo6c3RyaW5nJiBmbGFncywgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpCisgIHN0ZDo6c3RyaW5nJiBmbGFncywgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGlmIChsYW5nLmVtcHR5KCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgY29uc3QgY2hhciogZGVmYXVsdFN0ZCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9TVEFOREFSRF9ERUZBVUxUIik7Ci0gIGlmICghZGVmYXVsdFN0ZCB8fCAhKmRlZmF1bHRTdGQpIHsKLSAgICAvLyBUaGlzIGNvbXBpbGVyIGhhcyBubyBub3Rpb24gb2YgbGFuZ3VhZ2Ugc3RhbmRhcmQgbGV2ZWxzLgotICAgIHJldHVybjsKLSAgfQotICBzdGQ6OnN0cmluZyBleHRQcm9wID0gbGFuZyArICJfRVhURU5TSU9OUyI7Ci0gIGJvb2wgZXh0ID0gdHJ1ZTsKLSAgaWYgKGNvbnN0IGNoYXIqIGV4dFByb3BWYWx1ZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoZXh0UHJvcCkpIHsKLSAgICBpZiAoY21Jc09mZihleHRQcm9wVmFsdWUpKSB7Ci0gICAgICBleHQgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgc3RkOjpzdHJpbmcgc3RkUHJvcCA9IGxhbmcgKyAiX1NUQU5EQVJEIjsKLSAgY29uc3QgY2hhciogc3RhbmRhcmRQcm9wID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShzdGRQcm9wKTsKLSAgaWYgKCFzdGFuZGFyZFByb3ApIHsKLSAgICBpZiAoZXh0KSB7Ci0gICAgICAvLyBObyBsYW5ndWFnZSBzdGFuZGFyZCBpcyBzcGVjaWZpZWQgYW5kIGV4dGVuc2lvbnMgYXJlIG5vdCBkaXNhYmxlZC4KLSAgICAgIC8vIENoZWNrIGlmIHRoaXMgY29tcGlsZXIgbmVlZHMgYSBmbGFnIHRvIGVuYWJsZSBleHRlbnNpb25zLgotICAgICAgc3RkOjpzdHJpbmcgY29uc3Qgb3B0aW9uX2ZsYWcgPQotICAgICAgICAiQ01BS0VfIiArIGxhbmcgKyAiX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiI7Ci0gICAgICBpZiAoY29uc3QgY2hhciogb3B0ID0KLSAgICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKG9wdGlvbl9mbGFnKSkgewotICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0VmVjID0gY21FeHBhbmRlZExpc3Qob3B0KTsKLSAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IG9wdFZlYykgewotICAgICAgICAgIHRoaXMtPkFwcGVuZEZsYWdFc2NhcGUoZmxhZ3MsIGkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQorICBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlciBzdGFuZGFyZFJlc29sdmVyKHRoaXMtPk1ha2VmaWxlKTsKIAotICBzdGQ6OnN0cmluZyBjb25zdCB0eXBlID0gZXh0ID8gIkVYVEVOU0lPTiIgOiAiU1RBTkRBUkQiOwotCi0gIGlmICh0YXJnZXQtPkdldFByb3BlcnR5QXNCb29sKGxhbmcgKyAiX1NUQU5EQVJEX1JFUVVJUkVEIikpIHsKLSAgICBzdGQ6OnN0cmluZyBvcHRpb25fZmxhZyA9Ci0gICAgICAiQ01BS0VfIiArIGxhbmcgKyBzdGFuZGFyZFByb3AgKyAiXyIgKyB0eXBlICsgIl9DT01QSUxFX09QVElPTiI7Ci0KLSAgICBjb25zdCBjaGFyKiBvcHQgPQotICAgICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24ob3B0aW9uX2ZsYWcpOwotICAgIGlmICghb3B0KSB7Ci0gICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKLSAgICAgIGUgPDwgIlRhcmdldCBcIiIgPDwgdGFyZ2V0LT5HZXROYW1lKCkKLSAgICAgICAgPDwgIlwiIHJlcXVpcmVzIHRoZSBsYW5ndWFnZSAiCi0gICAgICAgICAgICJkaWFsZWN0IFwiIgotICAgICAgICA8PCBsYW5nIDw8IHN0YW5kYXJkUHJvcCA8PCAiXCIgIgotICAgICAgICA8PCAoZXh0ID8gIih3aXRoIGNvbXBpbGVyIGV4dGVuc2lvbnMpIiA6ICIiKQotICAgICAgICA8PCAiLCBidXQgQ01ha2UgIgotICAgICAgICAgICAiZG9lcyBub3Qga25vdyB0aGUgY29tcGlsZSBmbGFncyB0byB1c2UgdG8gZW5hYmxlIGl0LiI7Ci0gICAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKLSAgICB9IGVsc2UgeworICBzdGQ6OnN0cmluZyBjb25zdCYgb3B0aW9uRmxhZ0RlZiA9CisgICAgc3RhbmRhcmRSZXNvbHZlci5HZXRDb21waWxlT3B0aW9uRGVmKHRhcmdldCwgbGFuZywgY29uZmlnKTsKKyAgaWYgKCFvcHRpb25GbGFnRGVmLmVtcHR5KCkpIHsKKyAgICBhdXRvIG9wdCA9IHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKG9wdGlvbkZsYWdEZWYpOworICAgIGlmIChvcHQpIHsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRWZWMgPSBjbUV4cGFuZGVkTGlzdChvcHQpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IG9wdFZlYykgewogICAgICAgICB0aGlzLT5BcHBlbmRGbGFnRXNjYXBlKGZsYWdzLCBpKTsKICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3RhdGljIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IGxhbmdTdGRNYXA7Ci0gIGlmIChsYW5nU3RkTWFwLmVtcHR5KCkpIHsKLSAgICAvLyBNYWludGFpbiBzb3J0ZWQgb3JkZXIsIG1vc3QgcmVjZW50IGZpcnN0LgotICAgIGxhbmdTdGRNYXBbIkNYWCJdLmVtcGxhY2VfYmFjaygiMjAiKTsKLSAgICBsYW5nU3RkTWFwWyJDWFgiXS5lbXBsYWNlX2JhY2soIjE3Iik7Ci0gICAgbGFuZ1N0ZE1hcFsiQ1hYIl0uZW1wbGFjZV9iYWNrKCIxNCIpOwotICAgIGxhbmdTdGRNYXBbIkNYWCJdLmVtcGxhY2VfYmFjaygiMTEiKTsKLSAgICBsYW5nU3RkTWFwWyJDWFgiXS5lbXBsYWNlX2JhY2soIjk4Iik7Ci0KLSAgICBsYW5nU3RkTWFwWyJPQkpDWFgiXS5lbXBsYWNlX2JhY2soIjIwIik7Ci0gICAgbGFuZ1N0ZE1hcFsiT0JKQ1hYIl0uZW1wbGFjZV9iYWNrKCIxNyIpOwotICAgIGxhbmdTdGRNYXBbIk9CSkNYWCJdLmVtcGxhY2VfYmFjaygiMTQiKTsKLSAgICBsYW5nU3RkTWFwWyJPQkpDWFgiXS5lbXBsYWNlX2JhY2soIjExIik7Ci0gICAgbGFuZ1N0ZE1hcFsiT0JKQ1hYIl0uZW1wbGFjZV9iYWNrKCI5OCIpOwotCi0gICAgbGFuZ1N0ZE1hcFsiQyJdLmVtcGxhY2VfYmFjaygiMTEiKTsKLSAgICBsYW5nU3RkTWFwWyJDIl0uZW1wbGFjZV9iYWNrKCI5OSIpOwotICAgIGxhbmdTdGRNYXBbIkMiXS5lbXBsYWNlX2JhY2soIjkwIik7Ci0KLSAgICBsYW5nU3RkTWFwWyJPQkpDIl0uZW1wbGFjZV9iYWNrKCIxMSIpOwotICAgIGxhbmdTdGRNYXBbIk9CSkMiXS5lbXBsYWNlX2JhY2soIjk5Iik7Ci0gICAgbGFuZ1N0ZE1hcFsiT0JKQyJdLmVtcGxhY2VfYmFjaygiOTAiKTsKLQotICAgIGxhbmdTdGRNYXBbIkNVREEiXS5lbXBsYWNlX2JhY2soIjIwIik7Ci0gICAgbGFuZ1N0ZE1hcFsiQ1VEQSJdLmVtcGxhY2VfYmFjaygiMTciKTsKLSAgICBsYW5nU3RkTWFwWyJDVURBIl0uZW1wbGFjZV9iYWNrKCIxNCIpOwotICAgIGxhbmdTdGRNYXBbIkNVREEiXS5lbXBsYWNlX2JhY2soIjExIik7Ci0gICAgbGFuZ1N0ZE1hcFsiQ1VEQSJdLmVtcGxhY2VfYmFjaygiMDMiKTsKLSAgfQotCi0gIHN0ZDo6c3RyaW5nIHN0YW5kYXJkKHN0YW5kYXJkUHJvcCk7Ci0gIGlmIChsYW5nID09ICJDVURBIiAmJiBzdGFuZGFyZCA9PSAiOTgiKSB7Ci0gICAgc3RhbmRhcmQgPSAiMDMiOwotICB9Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc3RkcyA9IGxhbmdTdGRNYXBbbGFuZ107Ci0KLSAgYXV0byBzdGRJdCA9IHN0ZDo6ZmluZChzdGRzLmJlZ2luKCksIHN0ZHMuZW5kKCksIHN0YW5kYXJkKTsKLSAgaWYgKHN0ZEl0ID09IHN0ZHMuZW5kKCkpIHsKLQotICAgIHN0ZDo6c3RyaW5nIGUgPQotICAgICAgbGFuZyArICJfU1RBTkRBUkQgaXMgc2V0IHRvIGludmFsaWQgdmFsdWUgJyIgKyBzdGFuZGFyZCArICInIjsKLSAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUsIHRhcmdldC0+R2V0QmFja3RyYWNlKCkpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGF1dG8gZGVmYXVsdFN0ZEl0ID0gc3RkOjpmaW5kKHN0ZHMuYmVnaW4oKSwgc3Rkcy5lbmQoKSwgZGVmYXVsdFN0ZCk7Ci0gIGlmIChkZWZhdWx0U3RkSXQgPT0gc3Rkcy5lbmQoKSkgewotICAgIHN0ZDo6c3RyaW5nIGUgPSAiQ01BS0VfIiArIGxhbmcgKwotICAgICAgIl9TVEFOREFSRF9ERUZBVUxUIGlzIHNldCB0byBpbnZhbGlkIHZhbHVlICciICsgc3RkOjpzdHJpbmcoZGVmYXVsdFN0ZCkgKwotICAgICAgIiciOwotICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsIGUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIElmIHRoZSBzdGFuZGFyZCByZXF1ZXN0ZWQgaXMgb2xkZXIgdGhhbiB0aGUgY29tcGlsZXIncyBkZWZhdWx0Ci0gIC8vIHRoZW4gd2UgbmVlZCB0byB1c2UgYSBmbGFnIHRvIGNoYW5nZSBpdC4gIFRoZSBjb21wYXJpc29uIGlzCi0gIC8vIGdyZWF0ZXItb3ItZXF1YWwgYmVjYXVzZSB0aGUgc3RhbmRhcmRzIGFyZSBzdG9yZWQgaW4gYmFja3dhcmQKLSAgLy8gY2hyb25vbG9naWNhbCBvcmRlci4KLSAgaWYgKHN0ZEl0ID49IGRlZmF1bHRTdGRJdCkgewotICAgIHN0ZDo6c3RyaW5nIG9wdGlvbl9mbGFnID0KLSAgICAgICJDTUFLRV8iICsgbGFuZyArICpzdGRJdCArICJfIiArIHR5cGUgKyAiX0NPTVBJTEVfT1BUSU9OIjsKLQotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvcHQgPQotICAgICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldFJlcXVpcmVkRGVmaW5pdGlvbihvcHRpb25fZmxhZyk7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdFZlYyA9IGNtRXhwYW5kZWRMaXN0KG9wdCk7Ci0gICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IG9wdFZlYykgewotICAgICAgdGhpcy0+QXBwZW5kRmxhZ0VzY2FwZShmbGFncywgaSk7Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIFRoZSBzdGFuZGFyZCByZXF1ZXN0ZWQgaXMgYXQgbGVhc3QgYXMgbmV3IGFzIHRoZSBjb21waWxlcidzIGRlZmF1bHQsCi0gIC8vIGFuZCB0aGUgc3RhbmRhcmQgcmVxdWVzdCBpcyBub3QgcmVxdWlyZWQuICBEZWNheSB0byB0aGUgbmV3ZXN0IHN0YW5kYXJkCi0gIC8vIGZvciB3aGljaCBhIGZsYWcgaXMgZGVmaW5lZC4KLSAgZm9yICg7IHN0ZEl0IDwgZGVmYXVsdFN0ZEl0OyArK3N0ZEl0KSB7Ci0gICAgc3RkOjpzdHJpbmcgb3B0aW9uX2ZsYWcgPQotICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICpzdGRJdCwgIl8iLCB0eXBlLCAiX0NPTVBJTEVfT1BUSU9OIik7Ci0KLSAgICBpZiAoY29uc3QgY2hhciogb3B0ID0KLSAgICAgICAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbihvcHRpb25fZmxhZykpIHsKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRWZWMgPSBjbUV4cGFuZGVkTGlzdChvcHQpOwotICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IG9wdFZlYykgewotICAgICAgICB0aGlzLT5BcHBlbmRGbGFnRXNjYXBlKGZsYWdzLCBpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9CiAgIH0KIH0KIApAQCAtMjIzNiw3ICsyMTg0LDcgQEAKICAgfQogICBzdGQ6OnN0cmluZyBmbGFnRGVmaW5lID0gbGFuZyArICJfVklTSUJJTElUWV9QUkVTRVQiOwogCi0gIGNvbnN0IGNoYXIqIHByb3AgPSB0YXJnZXQtPkdldFByb3BlcnR5KGZsYWdEZWZpbmUpOworICBjbVByb3AgcHJvcCA9IHRhcmdldC0+R2V0UHJvcGVydHkoZmxhZ0RlZmluZSk7CiAgIGlmICghcHJvcCkgewogICAgIHJldHVybjsKICAgfQpAQCAtMjI0NCwxNyArMjE5MiwxNyBAQAogICAgICp3YXJuQ01QMDA2MyArPSAiICAiICsgZmxhZ0RlZmluZSArICJcbiI7CiAgICAgcmV0dXJuOwogICB9Ci0gIGlmIChzdHJjbXAocHJvcCwgImhpZGRlbiIpICE9IDAgJiYgc3RyY21wKHByb3AsICJkZWZhdWx0IikgIT0gMCAmJgotICAgICAgc3RyY21wKHByb3AsICJwcm90ZWN0ZWQiKSAhPSAwICYmIHN0cmNtcChwcm9wLCAiaW50ZXJuYWwiKSAhPSAwKSB7CisgIGlmICgoKnByb3AgIT0gImhpZGRlbiIpICYmICgqcHJvcCAhPSAiZGVmYXVsdCIpICYmICgqcHJvcCAhPSAicHJvdGVjdGVkIikgJiYKKyAgICAgICgqcHJvcCAhPSAiaW50ZXJuYWwiKSkgewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgIGUgPDwgIlRhcmdldCAiIDw8IHRhcmdldC0+R2V0TmFtZSgpIDw8ICIgdXNlcyB1bnN1cHBvcnRlZCB2YWx1ZSBcIiIgPDwgcHJvcAotICAgICAgPDwgIlwiIGZvciAiIDw8IGZsYWdEZWZpbmUgPDwgIi4iCisgICAgZSA8PCAiVGFyZ2V0ICIgPDwgdGFyZ2V0LT5HZXROYW1lKCkgPDwgIiB1c2VzIHVuc3VwcG9ydGVkIHZhbHVlIFwiIgorICAgICAgPDwgKnByb3AgPDwgIlwiIGZvciAiIDw8IGZsYWdEZWZpbmUgPDwgIi4iCiAgICAgICA8PCAiIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTogZGVmYXVsdCwgaGlkZGVuLCBwcm90ZWN0ZWQsIGFuZCAiCiAgICAgICAgICAiaW50ZXJuYWwuIjsKICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihlLnN0cigpKTsKICAgICByZXR1cm47CiAgIH0KLSAgc3RkOjpzdHJpbmcgb3B0aW9uID0gc3RkOjpzdHJpbmcob3B0KSArIHByb3A7CisgIHN0ZDo6c3RyaW5nIG9wdGlvbiA9IG9wdCArICpwcm9wOwogICBsZy0+QXBwZW5kRmxhZ3MoZmxhZ3MsIG9wdGlvbik7CiB9CiAKQEAgLTIzNzIsNyArMjMyMCw4IEBACiAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICAgICAgZSA8PCAiVmFyaWFibGUgIiA8PCBmbGFnc1ZhcgogICAgICAgICAgICAgPDwgIiBoYXMgYmVlbiBtb2RpZmllZC4gQ01ha2UgIgotICAgICAgICAgICAgICAgIndpbGwgaWdub3JlIHRoZSBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIHRhcmdldCBwcm9wZXJ0eSBmb3IgIgorICAgICAgICAgICAgICAgIndpbGwgaWdub3JlIHRoZSBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIHRhcmdldCBwcm9wZXJ0eSAiCisgICAgICAgICAgICAgICAiZm9yICIKICAgICAgICAgICAgICAgICJzaGFyZWQgbGlicmFyaWVzIGFuZCB3aWxsIHVzZSB0aGUgIgogICAgICAgICAgICAgPDwgZmxhZ3NWYXIKICAgICAgICAgICAgIDw8ICIgdmFyaWFibGUgIgpAQCAtMjQzNCw3ICsyMzgzLDkgQEAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QXBwZW5kRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmV3RmxhZ3MpIGNvbnN0CiB7Ci0gIGlmICghbmV3RmxhZ3MuZW1wdHkoKSkgeworICBib29sIGFsbFNwYWNlcyA9IHN0ZDo6YWxsX29mKG5ld0ZsYWdzLmJlZ2luKCksIG5ld0ZsYWdzLmVuZCgpLCBjbUlzU3BhY2UpOworCisgIGlmICghbmV3RmxhZ3MuZW1wdHkoKSAmJiAhYWxsU3BhY2VzKSB7CiAgICAgaWYgKCFmbGFncy5lbXB0eSgpKSB7CiAgICAgICBmbGFncyArPSAiICI7CiAgICAgfQpAQCAtMjQ2MCwxNyArMjQxMSwxNyBAQAogCiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkFkZFBjaERlcGVuZGVuY2llcyhjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnc0xpc3Q7Ci0gIHN0ZDo6c3RyaW5nIGNvbmZpZ0RlZmF1bHQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlnc0xpc3QpOwotICBpZiAoY29uZmlnc0xpc3QuZW1wdHkoKSkgewotICAgIGNvbmZpZ3NMaXN0LnB1c2hfYmFjayhjb25maWdEZWZhdWx0KTsKLSAgfQorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnc0xpc3QgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlnc0xpc3QpIHsKLSAgICAvLyBGSVhNRTogUmVmYWN0b3IgY29sbGVjdGlvbiBvZiBzb3VyY2VzIHRvIG5vdCBldmFsdWF0ZSBvYmplY3QgbGlicmFyaWVzLgorICAgIC8vIEZJWE1FOiBSZWZhY3RvciBjb2xsZWN0aW9uIG9mIHNvdXJjZXMgdG8gbm90IGV2YWx1YXRlIG9iamVjdAorICAgIC8vIGxpYnJhcmllcy4KICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBzb3VyY2VzOwogICAgIHRhcmdldC0+R2V0U291cmNlRmlsZXMoc291cmNlcywgY29uZmlnKTsKIAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbmZpZ1VwcGVyID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7CisKICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nIDogeyAiQyIsICJDWFgiLCAiT0JKQyIsICJPQkpDWFgiIH0pIHsKICAgICAgIGF1dG8gbGFuZ1NvdXJjZXMgPSBzdGQ6OmNvdW50X2lmKAogICAgICAgICBzb3VyY2VzLmJlZ2luKCksIHNvdXJjZXMuZW5kKCksIFtsYW5nXShjbVNvdXJjZUZpbGUqIHNmKSB7CkBAIC0yNDgxLDE1MyArMjQzMiwzNTUgQEAKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9IHRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZyk7Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0YXJnZXQtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmcpOwotCi0gICAgICBpZiAocGNoU291cmNlLmVtcHR5KCkgfHwgcGNoSGVhZGVyLmVtcHR5KCkpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEV4dGVuc2lvbiA9Ci0gICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfUENIX0VYVEVOU0lPTiIpOwotCi0gICAgICBpZiAocGNoRXh0ZW5zaW9uLmVtcHR5KCkpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGNvbnN0IGNoYXIqIHBjaFJldXNlRnJvbSA9Ci0gICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlBSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NIik7Ci0KLSAgICAgIGF1dG8gcGNoX3NmID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKAotICAgICAgICBwY2hTb3VyY2UsIGZhbHNlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLQorICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyY2hpdGVjdHVyZXM7CiAgICAgICBpZiAoIXRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1hjb2RlKCkpIHsKLSAgICAgICAgaWYgKCFwY2hSZXVzZUZyb20pIHsKLSAgICAgICAgICB0YXJnZXQtPkFkZFNvdXJjZShwY2hTb3VyY2UsIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRhcmdldC0+R2V0UGNoRmlsZShjb25maWcsIGxhbmcpOwotCi0gICAgICAgIC8vIEV4Y2x1ZGUgdGhlIHBjaCBmaWxlcyBmcm9tIGxpbmtpbmcKLSAgICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9MSU5LX1BDSCIpKSB7Ci0gICAgICAgICAgaWYgKCFwY2hSZXVzZUZyb20pIHsKLSAgICAgICAgICAgIHBjaF9zZi0+U2V0UHJvcGVydHkoIk9CSkVDVF9PVVRQVVRTIiwgcGNoRmlsZS5jX3N0cigpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byByZXVzZVRhcmdldCA9Ci0gICAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+RmluZEdlbmVyYXRvclRhcmdldChwY2hSZXVzZUZyb20pOwotCi0gICAgICAgICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX1BDSF9DT1BZX0NPTVBJTEVfUERCIikpIHsKLQotICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwZGJfcHJlZml4ID0KLSAgICAgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpCi0gICAgICAgICAgICAgICAgPyBjbVN0ckNhdCh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENNYWtlQ0ZHSW50RGlyKCksICIvIikKLSAgICAgICAgICAgICAgICA6ICIiOwotCi0gICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRhcmdldF9jb21waWxlX3BkYl9kaXIgPSBjbVN0ckNhdCgKLSAgICAgICAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi8iLAotICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCAiLmRpci8iKTsKLQotICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb3B5X3NjcmlwdCA9Ci0gICAgICAgICAgICAgICAgY21TdHJDYXQodGFyZ2V0X2NvbXBpbGVfcGRiX2RpciwgImNvcHlfaWRiX3BkYi5jbWFrZSIpOwotICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZmlsZShjb3B5X3NjcmlwdCk7Ci0KLSAgICAgICAgICAgICAgZmlsZSA8PCAiIyBDTWFrZSBnZW5lcmF0ZWQgZmlsZVxuIjsKLSAgICAgICAgICAgICAgZm9yIChhdXRvIGV4dGVuc2lvbiA6IHsgIi5wZGIiLCAiLmlkYiIgfSkgewotICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZyb21fZmlsZSA9Ci0gICAgICAgICAgICAgICAgICBjbVN0ckNhdChyZXVzZVRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiwgcGNoUmV1c2VGcm9tLCAiLmRpci8ke1BEQl9QUkVGSVh9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaFJldXNlRnJvbSwgZXh0ZW5zaW9uKTsKLQotICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRvX2RpciA9IGNtU3RyQ2F0KAotICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCi0gICAgICAgICAgICAgICAgICAiLyIsIHRhcmdldC0+R2V0TmFtZSgpLCAiLmRpci8ke1BEQl9QUkVGSVh9Iik7Ci0KLSAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyB0b19maWxlID0KLSAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KHRvX2RpciwgcGNoUmV1c2VGcm9tLCBleHRlbnNpb24pOwotCi0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZGVzdF9maWxlID0gdG9fZmlsZTsKLQotICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHByZWZpeCA9IHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJQUkVGSVgiKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICBkZXN0X2ZpbGUgPQotICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdCh0b19kaXIsIHByZWZpeCwgcGNoUmV1c2VGcm9tLCBleHRlbnNpb24pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZpbGUgPDwgImlmIChFWElTVFMgXCIiIDw8IGZyb21fZmlsZSA8PCAiXCIgQU5EIFwiIgotICAgICAgICAgICAgICAgICAgICAgPDwgZnJvbV9maWxlIDw8ICJcIiBJU19ORVdFUl9USEFOIFwiIiA8PCBkZXN0X2ZpbGUKLSAgICAgICAgICAgICAgICAgICAgIDw8ICJcIilcbiI7Ci0gICAgICAgICAgICAgICAgZmlsZSA8PCAiICBmaWxlKENPUFkgXCIiIDw8IGZyb21fZmlsZSA8PCAiXCIiCi0gICAgICAgICAgICAgICAgICAgICA8PCAiIERFU1RJTkFUSU9OIFwiIiA8PCB0b19kaXIgPDwgIlwiKVxuIjsKLSAgICAgICAgICAgICAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICBmaWxlIDw8ICIgIGZpbGUoUkVNT1ZFIFwiIiA8PCBkZXN0X2ZpbGUgPDwgIlwiKVxuIjsKLSAgICAgICAgICAgICAgICAgIGZpbGUgPDwgIiAgZmlsZShSRU5BTUUgXCIiIDw8IHRvX2ZpbGUgPDwgIlwiIFwiIiA8PCBkZXN0X2ZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiKVxuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmlsZSA8PCAiZW5kaWYoKVxuIjsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRMaW5lcyA9IGNtTWFrZVNpbmdsZUNvbW1hbmRMaW5lKAotICAgICAgICAgICAgICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksCi0gICAgICAgICAgICAgICAgICBjbVN0ckNhdCgiLURQREJfUFJFRklYPSIsIHBkYl9wcmVmaXgpLCAiLVAiLCBjb3B5X3NjcmlwdCB9KTsKLQotICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBub19tYWluX2RlcGVuZGVuY3k7Ci0gICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19kZXBzOwotICAgICAgICAgICAgICBjb25zdCBjaGFyKiBub19tZXNzYWdlID0gIiI7Ci0gICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5vX2N1cnJlbnRfZGlyID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2J5cHJvZHVjdHM7Ci0KLSAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHM7Ci0gICAgICAgICAgICAgIG91dHB1dHMucHVzaF9iYWNrKGNtU3RyQ2F0KHRhcmdldF9jb21waWxlX3BkYl9kaXIsIHBkYl9wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaFJldXNlRnJvbSwgIi5wZGIiKSk7Ci0KLSAgICAgICAgICAgICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1Zpc3VhbFN0dWRpbygpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAotICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksIG91dHB1dHMsIG5vX2RlcHMsIGNvbW1hbmRMaW5lcywKLSAgICAgICAgICAgICAgICAgIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBSRV9CVUlMRCwgbm9fbWVzc2FnZSwgbm9fY3VycmVudF9kaXIpOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICAgICAgICAgICAgICAgIGNtU291cmNlRmlsZSogY29weV9ydWxlID0gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgICAgICAgICAgICAgICAgb3V0cHV0cywgbm9fYnlwcm9kdWN0cywgbm9fZGVwcywgbm9fbWFpbl9kZXBlbmRlbmN5LAotICAgICAgICAgICAgICAgICAgbm9faW1wbGljaXRfZGVwZW5kcywgY29tbWFuZExpbmVzLCBub19tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgbm9fY3VycmVudF9kaXIpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvcHlfcnVsZSkgewotICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UoY29weV9ydWxlLT5SZXNvbHZlRnVsbFBhdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJDT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9jb21waWxlX3BkYl9kaXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6OnN0cmluZyBwY2hTb3VyY2VPYmogPQotICAgICAgICAgICAgICByZXVzZVRhcmdldC0+R2V0UGNoRmlsZU9iamVjdChjb25maWcsIGxhbmcpOwotCi0gICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwotCi0gICAgICAgICAgICAvLyBMaW5rIHRvIHRoZSBwY2ggb2JqZWN0IGZpbGUKLSAgICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgY21TdHJDYXQoIkxJTktfRkxBR1NfIiwgY29uZmlnVXBwZXIpLAotICAgICAgICAgICAgICBjbVN0ckNhdCgiICIsIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChwY2hTb3VyY2VPYmosIFNIRUxMKSksCi0gICAgICAgICAgICAgIHRydWUpOworICAgICAgICB0YXJnZXQtPkdldEFwcGxlQXJjaHMoY29uZmlnLCBhcmNoaXRlY3R1cmVzKTsKKyAgICAgIH0KKyAgICAgIGlmIChhcmNoaXRlY3R1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgYXJjaGl0ZWN0dXJlcy5lbXBsYWNlX2JhY2soKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHVzZU11bHRpQXJjaFBjaDsKKyAgICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPQorICAgICAgICAgICAgdGFyZ2V0LT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5nLCBhcmNoKTsKKyAgICAgICAgICBpZiAoIXBjaEhlYWRlci5lbXB0eSgpKSB7CisgICAgICAgICAgICB1c2VNdWx0aUFyY2hQY2ggPSBjbVN0ckNhdCh1c2VNdWx0aUFyY2hQY2gsICI7LVhhcmNoXyIsIGFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOy1pbmNsdWRlIiwgcGNoSGVhZGVyKTsKICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcGNoX3NmLT5TZXRQcm9wZXJ0eSgiUENIX0VYVEVOU0lPTiIsIHBjaEV4dGVuc2lvbi5jX3N0cigpKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEFkZCBwY2hIZWFkZXIgdG8gc291cmNlIGZpbGVzLCB3aGljaCB3aWxsCi0gICAgICAgIC8vIGJlIGdyb3VwZWQgYXMgIlByZWNvbXBpbGUgSGVhZGVyIEZpbGUiCi0gICAgICAgIGF1dG8gcGNoSGVhZGVyX3NmID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKAotICAgICAgICAgIHBjaEhlYWRlciwgZmFsc2UsIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pOwotICAgICAgICBzdGQ6OnN0cmluZyBlcnI7Ci0gICAgICAgIHBjaEhlYWRlcl9zZi0+UmVzb2x2ZUZ1bGxQYXRoKCZlcnIpOwotICAgICAgICB0YXJnZXQtPkFkZFNvdXJjZShwY2hIZWFkZXIpOworICAgICAgICBpZiAoIXVzZU11bHRpQXJjaFBjaC5lbXB0eSgpKSB7CisgICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KAorICAgICAgICAgICAgY21TdHJDYXQobGFuZywgIl9DT01QSUxFX09QVElPTlNfVVNFX1BDSCIpLCB1c2VNdWx0aUFyY2hQY2gpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggOiBhcmNoaXRlY3R1cmVzKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9IHRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZywgYXJjaCk7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEhlYWRlciA9IHRhcmdldC0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZywgYXJjaCk7CisKKyAgICAgICAgaWYgKHBjaFNvdXJjZS5lbXB0eSgpIHx8IHBjaEhlYWRlci5lbXB0eSgpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hFeHRlbnNpb24gPQorICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfUENIX0VYVEVOU0lPTiIpOworCisgICAgICAgIGlmIChwY2hFeHRlbnNpb24uZW1wdHkoKSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgY21Qcm9wIFJldXNlRnJvbSA9CisgICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iKTsKKworICAgICAgICBhdXRvIHBjaF9zZiA9IHRoaXMtPk1ha2VmaWxlLT5HZXRPckNyZWF0ZVNvdXJjZSgKKyAgICAgICAgICBwY2hTb3VyY2UsIGZhbHNlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKKworICAgICAgICBpZiAoIXRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1hjb2RlKCkpIHsKKyAgICAgICAgICBpZiAoIVJldXNlRnJvbSkgeworICAgICAgICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UocGNoU291cmNlLCB0cnVlKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hGaWxlID0gdGFyZ2V0LT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZywgYXJjaCk7CisKKyAgICAgICAgICAvLyBFeGNsdWRlIHRoZSBwY2ggZmlsZXMgZnJvbSBsaW5raW5nCisgICAgICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9MSU5LX1BDSCIpKSB7CisgICAgICAgICAgICBpZiAoIVJldXNlRnJvbSkgeworICAgICAgICAgICAgICBwY2hfc2YtPkFwcGVuZFByb3BlcnR5KAorICAgICAgICAgICAgICAgICJPQkpFQ1RfT1VUUFVUUyIsCisgICAgICAgICAgICAgICAgY21TdHJDYXQoIiQ8JDxDT05GSUc6IiwgY29uZmlnLCAiPjoiLCBwY2hGaWxlLCAiPiIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGF1dG8gcmV1c2VUYXJnZXQgPQorICAgICAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+RmluZEdlbmVyYXRvclRhcmdldCgqUmV1c2VGcm9tKTsKKworICAgICAgICAgICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX1BDSF9DT1BZX0NPTVBJTEVfUERCIikpIHsKKworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbXBpbGVySWQgPQorICAgICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9DT01QSUxFUl9JRCIpKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbXBpbGVyVmVyc2lvbiA9CisgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCisgICAgICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX0NPTVBJTEVSX1ZFUlNJT04iKSk7CisKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBsYW5nRmxhZ3MgPQorICAgICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9GTEFHU18iLCBjb25maWdVcHBlcikpOworCisgICAgICAgICAgICAgICAgLy8gTVNWQyAyMDA4IGlzIHByb2R1Y2luZyBib3RoIC5wZGIgYW5kIC5pZGIgZmlsZXMgd2l0aCAvWmkuCisgICAgICAgICAgICAgICAgaWYgKChsYW5nRmxhZ3MuZmluZCgiL1pJIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwKKyAgICAgICAgICAgICAgICAgICAgIGxhbmdGbGFncy5maW5kKCItWkkiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgfHwKKyAgICAgICAgICAgICAgICAgICAgKGNtU3lzdGVtVG9vbHM6OlZlcnNpb25Db21wYXJlKGNtU3lzdGVtVG9vbHM6Ok9QX0xFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlclZlcnNpb24uY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNi4wIikgJiYKKyAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVySWQgPT0gIk1TVkMiKSkgeworICAgICAgICAgICAgICAgICAgQ29weVBjaENvbXBpbGVQZGIoY29uZmlnLCB0YXJnZXQsICpSZXVzZUZyb20sIHJldXNlVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiLnBkYiIsICIuaWRiIiB9KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChsYW5nRmxhZ3MuZmluZCgiL1ppIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nRmxhZ3MuZmluZCgiLVppIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpKSB7CisgICAgICAgICAgICAgICAgICBDb3B5UGNoQ29tcGlsZVBkYihjb25maWcsIHRhcmdldCwgKlJldXNlRnJvbSwgcmV1c2VUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICIucGRiIiB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAocmV1c2VUYXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZKSB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcGNoU291cmNlT2JqID0KKyAgICAgICAgICAgICAgICAgIHJldXNlVGFyZ2V0LT5HZXRQY2hGaWxlT2JqZWN0KGNvbmZpZywgbGFuZywgYXJjaCk7CisKKyAgICAgICAgICAgICAgICAvLyBMaW5rIHRvIHRoZSBwY2ggb2JqZWN0IGZpbGUKKyAgICAgICAgICAgICAgICB0YXJnZXQtPlRhcmdldC0+QXBwZW5kUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICBjbVN0ckNhdCgiTElOS19GTEFHU18iLCBjb25maWdVcHBlciksCisgICAgICAgICAgICAgICAgICBjbVN0ckNhdCgiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocGNoU291cmNlT2JqLCBTSEVMTCkpLAorICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGNoX3NmLT5TZXRQcm9wZXJ0eSgiUENIX0VYVEVOU0lPTiIsIHBjaEV4dGVuc2lvbi5jX3N0cigpKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBBZGQgcGNoSGVhZGVyIHRvIHNvdXJjZSBmaWxlcywgd2hpY2ggd2lsbAorICAgICAgICAgIC8vIGJlIGdyb3VwZWQgYXMgIlByZWNvbXBpbGUgSGVhZGVyIEZpbGUiCisgICAgICAgICAgYXV0byBwY2hIZWFkZXJfc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVTb3VyY2UoCisgICAgICAgICAgICBwY2hIZWFkZXIsIHRydWUsIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pOworICAgICAgICAgIHN0ZDo6c3RyaW5nIGVycjsKKyAgICAgICAgICBwY2hIZWFkZXJfc2YtPlJlc29sdmVGdWxsUGF0aCgmZXJyKTsKKworICAgICAgICAgIC8vIFRoZSBwY2ggZmlsZSBpcyBnZW5lcmF0ZWQsIGJ1dCBtYXJrIGl0IGFzIG5vdCBnZW5lcmF0ZWQKKyAgICAgICAgICAvLyBzbyB0aGF0IGEgY2xlYW4gb3BlcmF0aW9uIHdpbGwgbm90IHJlbW92ZSBpdCBmcm9tIGRpc2sKKyAgICAgICAgICBwY2hIZWFkZXJfc2YtPlNldFByb3BlcnR5KCJHRU5FUkFURUQiLCAiMCIpOworCisgICAgICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UocGNoSGVhZGVyKTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQogfQogCit2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkNvcHlQY2hDb21waWxlUGRiKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAorICBjb25zdCBzdGQ6OnN0cmluZyYgUmV1c2VGcm9tLCBjbUdlbmVyYXRvclRhcmdldCogcmV1c2VUYXJnZXQsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZXh0ZW5zaW9ucykKK3sKKyAgY29uc3Qgc3RkOjpzdHJpbmcgcGRiX3ByZWZpeCA9CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSA/IGNtU3RyQ2F0KGNvbmZpZywgIi8iKSA6ICIiOworCisgIGNvbnN0IHN0ZDo6c3RyaW5nIHRhcmdldF9jb21waWxlX3BkYl9kaXIgPQorICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiLyIsCisgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksICIuZGlyLyIpOworCisgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvcHlfc2NyaXB0ID0KKyAgICBjbVN0ckNhdCh0YXJnZXRfY29tcGlsZV9wZGJfZGlyLCAiY29weV9pZGJfcGRiLmNtYWtlIik7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmaWxlKGNvcHlfc2NyaXB0KTsKKworICBmaWxlIDw8ICIjIENNYWtlIGdlbmVyYXRlZCBmaWxlXG4iOworCisgIGZpbGUgPDwgIiMgVGhlIGNvbXBpbGVyIGdlbmVyYXRlZCBwZGIgZmlsZSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIGRpc2tcbiIKKyAgICAgICA8PCAiIyBieSBtc3BkYnNydi4gVGhlIGZvcmVhY2ggcmV0cnkgbG9vcCBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlXG4iCisgICAgICAgPDwgIiMgdGhlIHBkYiBmaWxlIGlzIHJlYWR5IHRvIGJlIGNvcGllZC5cblxuIjsKKworICBmb3IgKGF1dG8gY29uc3QmIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnMpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmcm9tX2ZpbGUgPQorICAgICAgY21TdHJDYXQocmV1c2VUYXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICIvIiwgUmV1c2VGcm9tLCAiLmRpci8ke1BEQl9QUkVGSVh9IiwgUmV1c2VGcm9tLCBleHRlbnNpb24pOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG9fZGlyID0KKyAgICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiLyIsCisgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSwgIi5kaXIvJHtQREJfUFJFRklYfSIpOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG9fZmlsZSA9IGNtU3RyQ2F0KHRvX2RpciwgUmV1c2VGcm9tLCBleHRlbnNpb24pOworCisgICAgc3RkOjpzdHJpbmcgZGVzdF9maWxlID0gdG9fZmlsZTsKKworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcmVmaXggPSB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiUFJFRklYIik7CisgICAgaWYgKCFwcmVmaXguZW1wdHkoKSkgeworICAgICAgZGVzdF9maWxlID0gY21TdHJDYXQodG9fZGlyLCBwcmVmaXgsIFJldXNlRnJvbSwgZXh0ZW5zaW9uKTsKKyAgICB9CisKKyAgICBmaWxlIDw8ICJmb3JlYWNoKHJldHJ5IFJBTkdFIDEgMzApXG4iOworICAgIGZpbGUgPDwgIiAgaWYgKEVYSVNUUyBcIiIgPDwgZnJvbV9maWxlIDw8ICJcIiBBTkQgXCIiIDw8IGZyb21fZmlsZQorICAgICAgICAgPDwgIiAgXCIgSVNfTkVXRVJfVEhBTiBcIiIgPDwgZGVzdF9maWxlIDw8ICJcIilcbiI7CisgICAgZmlsZSA8PCAiICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSI7CisgICAgZmlsZSA8PCAiIFwiIiA8PCBmcm9tX2ZpbGUgPDwgIlwiIgorICAgICAgICAgPDwgIiBcIiIgPDwgdG9fZGlyIDw8ICJcIiBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0ICIKKyAgICAgICAgIDw8ICIgRVJST1JfUVVJRVQpXG4iOworICAgIGZpbGUgPDwgIiAgICBpZiAoTk9UIHJlc3VsdCBFUVVBTCAwKVxuIgorICAgICAgICAgPDwgIiAgICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0iCisgICAgICAgICA8PCAiIC1FIHNsZWVwIDEpXG4iCisgICAgICAgICA8PCAiICAgIGVsc2UoKVxuIjsKKyAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7CisgICAgICBmaWxlIDw8ICIgIGZpbGUoUkVNT1ZFIFwiIiA8PCBkZXN0X2ZpbGUgPDwgIlwiKVxuIjsKKyAgICAgIGZpbGUgPDwgIiAgZmlsZShSRU5BTUUgXCIiIDw8IHRvX2ZpbGUgPDwgIlwiIFwiIiA8PCBkZXN0X2ZpbGUgPDwgIlwiKVxuIjsKKyAgICB9CisgICAgZmlsZSA8PCAiICAgICAgYnJlYWsoKVxuIgorICAgICAgICAgPDwgIiAgICBlbmRpZigpXG4iOworICAgIGZpbGUgPDwgIiAgZWxzZSgpXG4iCisgICAgICAgICA8PCAiICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0iCisgICAgICAgICA8PCAiIC1FIHNsZWVwIDEpXG4iCisgICAgICAgICA8PCAiICBlbmRpZigpXG4iOworICAgIGZpbGUgPDwgImVuZGZvcmVhY2goKVxuIjsKKyAgfQorCisgIGJvb2wgc3RkUGlwZXNVVEY4ID0gdHJ1ZTsKKworICBhdXRvIGNvbmZpZ0dlbmV4ID0gWyZdKGNtOjpzdHJpbmdfdmlldyBleHByKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1Zpc3VhbFN0dWRpbygpKSB7CisgICAgICByZXR1cm4gY21TdHJDYXQoIiQ8JDxDT05GSUc6IiwgY29uZmlnLCAiPjoiLCBleHByLCAiPiIpOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpzdHJpbmcoZXhwcik7CisgIH07CisKKyAgY21DdXN0b21Db21tYW5kTGluZXMgY29tbWFuZExpbmVzID0gY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoCisgICAgeyBjb25maWdHZW5leChjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSksCisgICAgICBjb25maWdHZW5leChjbVN0ckNhdCgiLURQREJfUFJFRklYPSIsIHBkYl9wcmVmaXgpKSwgY29uZmlnR2VuZXgoIi1QIiksCisgICAgICBjb25maWdHZW5leChjb3B5X3NjcmlwdCkgfSk7CisKKyAgY29uc3Qgc3RkOjpzdHJpbmcgbm9fbWFpbl9kZXBlbmRlbmN5OworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwczsKKyAgY29uc3QgY2hhciogbm9fbWVzc2FnZSA9ICIiOworICBjb25zdCBjaGFyKiBub19jdXJyZW50X2RpciA9IG51bGxwdHI7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdXRwdXRzOworICBvdXRwdXRzLnB1c2hfYmFjaygKKyAgICBjbVN0ckNhdCh0YXJnZXRfY29tcGlsZV9wZGJfZGlyLCBwZGJfcHJlZml4LCBSZXVzZUZyb20sICIucGRiIikpOworCisgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNWaXN1YWxTdHVkaW8oKSkgeworICAgIHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKKyAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCBvdXRwdXRzLCBub19kZXBzLCBjb21tYW5kTGluZXMsCisgICAgICBjbUN1c3RvbUNvbW1hbmRUeXBlOjpQUkVfQlVJTEQsIG5vX21lc3NhZ2UsIG5vX2N1cnJlbnRfZGlyLCB0cnVlLCBmYWxzZSwKKyAgICAgICIiLCAiIiwgZmFsc2UsIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzOjpSZWplY3QsIHN0ZFBpcGVzVVRGOCk7CisgIH0gZWxzZSB7CisgICAgY21JbXBsaWNpdERlcGVuZHNMaXN0IG5vX2ltcGxpY2l0X2RlcGVuZHM7CisgICAgY21Tb3VyY2VGaWxlKiBjb3B5X3J1bGUgPSB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgICBvdXRwdXRzLCBub19ieXByb2R1Y3RzLCBub19kZXBzLCBub19tYWluX2RlcGVuZGVuY3ksIG5vX2ltcGxpY2l0X2RlcGVuZHMsCisgICAgICBjb21tYW5kTGluZXMsIG5vX21lc3NhZ2UsIG5vX2N1cnJlbnRfZGlyLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAiIiwKKyAgICAgICIiLCBzdGRQaXBlc1VURjgpOworCisgICAgaWYgKGNvcHlfcnVsZSkgeworICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UoY29weV9ydWxlLT5SZXNvbHZlRnVsbFBhdGgoKSk7CisgICAgfQorICB9CisKKyAgdGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJDT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9jb21waWxlX3BkYl9kaXIpOworfQorCituYW1lc3BhY2UgeworCitpbmxpbmUgdm9pZCBSZWdpc3RlclVuaXR5U291cmNlcyhjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjbVNvdXJjZUZpbGUqIHNmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVuYW1lKQoreworICB0YXJnZXQtPkFkZFNvdXJjZUZpbGVUb1VuaXR5QmF0Y2goc2YtPlJlc29sdmVGdWxsUGF0aCgpKTsKKyAgc2YtPlNldFByb3BlcnR5KCJVTklUWV9TT1VSQ0VfRklMRSIsIGZpbGVuYW1lLmNfc3RyKCkpOworICBzZi0+U2V0UHJvcGVydHkoIlNLSVBfQVVUT0dFTiIsICJPTiIpOworfQorCitpbmxpbmUgdm9pZCBJbmNsdWRlRmlsZUluVW5pdHlTb3VyY2VzKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgdW5pdHlfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHNmX2Z1bGxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wIGJlZm9yZUluY2x1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtUHJvcCBhZnRlckluY2x1ZGUpCit7CisgIGlmIChiZWZvcmVJbmNsdWRlKSB7CisgICAgdW5pdHlfZmlsZSA8PCAqYmVmb3JlSW5jbHVkZSA8PCAiXG4iOworICB9CisKKyAgdW5pdHlfZmlsZSA8PCAiI2luY2x1ZGUgXCIiIDw8IHNmX2Z1bGxfcGF0aCA8PCAiXCJcbiI7CisKKyAgaWYgKGFmdGVySW5jbHVkZSkgeworICAgIHVuaXR5X2ZpbGUgPDwgKmFmdGVySW5jbHVkZSA8PCAiXG4iOworICB9Cit9CisKK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBBZGRVbml0eUZpbGVzTW9kZUF1dG8oCisgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBjb25zdCYgZmlsdGVyZWRfc291cmNlcywgY21Qcm9wIGJlZm9yZUluY2x1ZGUsCisgIGNtUHJvcCBhZnRlckluY2x1ZGUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlbmFtZV9iYXNlLCBzaXplX3QgYmF0Y2hTaXplKQoreworICBpZiAoYmF0Y2hTaXplID09IDApIHsKKyAgICBiYXRjaFNpemUgPSBmaWx0ZXJlZF9zb3VyY2VzLnNpemUoKTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bml0eV9maWxlczsKKyAgZm9yIChzaXplX3QgaXRlbXNMZWZ0ID0gZmlsdGVyZWRfc291cmNlcy5zaXplKCksIGNodW5rLCBiYXRjaCA9IDA7CisgICAgICAgaXRlbXNMZWZ0ID4gMDsgaXRlbXNMZWZ0IC09IGNodW5rLCArK2JhdGNoKSB7CisKKyAgICBjaHVuayA9IHN0ZDo6bWluKGl0ZW1zTGVmdCwgYmF0Y2hTaXplKTsKKworICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gY21TdHJDYXQoZmlsZW5hbWVfYmFzZSwgInVuaXR5XyIsIGJhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbmcgPT0gIkMiKSA/ICJfYy5jIiA6ICJfY3h4LmN4eCIpOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZW5hbWVfdG1wID0gY21TdHJDYXQoZmlsZW5hbWUsICIudG1wIik7CisgICAgeworICAgICAgc2l6ZV90IGJlZ2luID0gYmF0Y2ggKiBiYXRjaFNpemU7CisgICAgICBzaXplX3QgZW5kID0gYmVnaW4gKyBjaHVuazsKKworICAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZpbGUoCisgICAgICAgIGZpbGVuYW1lX3RtcCwgZmFsc2UsCisgICAgICAgIHRhcmdldC0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CisgICAgICBmaWxlIDw8ICIvKiBnZW5lcmF0ZWQgYnkgQ01ha2UgKi9cblxuIjsKKworICAgICAgZm9yICg7IGJlZ2luICE9IGVuZDsgKytiZWdpbikgeworICAgICAgICBjbVNvdXJjZUZpbGUqIHNmID0gZmlsdGVyZWRfc291cmNlc1tiZWdpbl07CisgICAgICAgIFJlZ2lzdGVyVW5pdHlTb3VyY2VzKHRhcmdldCwgc2YsIGZpbGVuYW1lKTsKKyAgICAgICAgSW5jbHVkZUZpbGVJblVuaXR5U291cmNlcyhmaWxlLCBzZi0+UmVzb2x2ZUZ1bGxQYXRoKCksIGJlZm9yZUluY2x1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbmNsdWRlKTsKKyAgICAgIH0KKyAgICB9CisgICAgY21TeXN0ZW1Ub29sczo6TW92ZUZpbGVJZkRpZmZlcmVudChmaWxlbmFtZV90bXAsIGZpbGVuYW1lKTsKKyAgICB1bml0eV9maWxlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGZpbGVuYW1lKSk7CisgIH0KKyAgcmV0dXJuIHVuaXR5X2ZpbGVzOworfQorCitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQWRkVW5pdHlGaWxlc01vZGVHcm91cCgKKyAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IGNvbnN0JiBmaWx0ZXJlZF9zb3VyY2VzLCBjbVByb3AgYmVmb3JlSW5jbHVkZSwKKyAgY21Qcm9wIGFmdGVySW5jbHVkZSwgc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVuYW1lX2Jhc2UpCit7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bml0eV9maWxlczsKKworICAvLyBzb3VyY2VzIG9yZ2FuaXplZCBieSBncm91cCBuYW1lLiBEcm9wIGFueSBzb3VyY2UKKyAgLy8gd2l0aG91dCBhIGdyb3VwCisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4+IGV4cGxpY2l0X21hcHBpbmc7CisgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IGZpbHRlcmVkX3NvdXJjZXMpIHsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gc2YtPkdldFByb3BlcnR5KCJVTklUWV9HUk9VUCIpKSB7CisgICAgICBhdXRvIGkgPSBleHBsaWNpdF9tYXBwaW5nLmZpbmQoKnZhbHVlKTsKKyAgICAgIGlmIChpID09IGV4cGxpY2l0X21hcHBpbmcuZW5kKCkpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlc3sgc2YgfTsKKyAgICAgICAgZXhwbGljaXRfbWFwcGluZy5lbXBsYWNlKCp2YWx1ZSwgc291cmNlcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpLT5zZWNvbmQuZW1wbGFjZV9iYWNrKHNmKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBmb3IgKGF1dG8gY29uc3QmIGl0ZW0gOiBleHBsaWNpdF9tYXBwaW5nKSB7CisgICAgYXV0byBjb25zdCYgbmFtZSA9IGl0ZW0uZmlyc3Q7CisgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSBjbVN0ckNhdChmaWxlbmFtZV9iYXNlLCAidW5pdHlfIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW5nID09ICJDIikgPyAiX2MuYyIgOiAiX2N4eC5jeHgiKTsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lX3RtcCA9IGNtU3RyQ2F0KGZpbGVuYW1lLCAiLnRtcCIpOworICAgIHsKKyAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmaWxlKAorICAgICAgICBmaWxlbmFtZV90bXAsIGZhbHNlLAorICAgICAgICB0YXJnZXQtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRNYWtlZmlsZUVuY29kaW5nKCkpOworICAgICAgZmlsZSA8PCAiLyogZ2VuZXJhdGVkIGJ5IENNYWtlICovXG5cbiI7CisKKyAgICAgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IGl0ZW0uc2Vjb25kKSB7CisgICAgICAgIFJlZ2lzdGVyVW5pdHlTb3VyY2VzKHRhcmdldCwgc2YsIGZpbGVuYW1lKTsKKyAgICAgICAgSW5jbHVkZUZpbGVJblVuaXR5U291cmNlcyhmaWxlLCBzZi0+UmVzb2x2ZUZ1bGxQYXRoKCksIGJlZm9yZUluY2x1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbmNsdWRlKTsKKyAgICAgIH0KKyAgICB9CisgICAgY21TeXN0ZW1Ub29sczo6TW92ZUZpbGVJZkRpZmZlcmVudChmaWxlbmFtZV90bXAsIGZpbGVuYW1lKTsKKyAgICB1bml0eV9maWxlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGZpbGVuYW1lKSk7CisgIH0KKworICByZXR1cm4gdW5pdHlfZmlsZXM7Cit9Cit9CisKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkVW5pdHlCdWlsZChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogewogICBpZiAoIXRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIlVOSVRZX0JVSUxEIikpIHsKQEAgLTI2NDgsMTIgKzI4MDEsMTUgQEAKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKICAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBjb25maWcpOwogCi0gIGF1dG8gYmF0Y2hTaXplU3RyaW5nID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVU5JVFlfQlVJTERfQkFUQ0hfU0laRSIpOwotICBjb25zdCBzaXplX3QgdW5pdHlCYXRjaFNpemUgPQotICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjphdG9pKGJhdGNoU2l6ZVN0cmluZykpOworICBjbVByb3AgYmF0Y2hTaXplU3RyaW5nID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVU5JVFlfQlVJTERfQkFUQ0hfU0laRSIpOworICBjb25zdCBzaXplX3QgdW5pdHlCYXRjaFNpemUgPSBiYXRjaFNpemVTdHJpbmcKKyAgICA/IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjphdG9pKGJhdGNoU2l6ZVN0cmluZy0+Y19zdHIoKSkpCisgICAgOiAwOwogCi0gIGF1dG8gYmVmb3JlSW5jbHVkZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlVOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUiKTsKLSAgYXV0byBhZnRlckluY2x1ZGUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJVTklUWV9CVUlMRF9DT0RFX0FGVEVSX0lOQ0xVREUiKTsKKyAgY21Qcm9wIGJlZm9yZUluY2x1ZGUgPQorICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlVOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUiKTsKKyAgY21Qcm9wIGFmdGVySW5jbHVkZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlVOSVRZX0JVSUxEX0NPREVfQUZURVJfSU5DTFVERSIpOworICBjbVByb3AgdW5pdHlNb2RlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVU5JVFlfQlVJTERfTU9ERSIpOwogCiAgIGZvciAoc3RkOjpzdHJpbmcgbGFuZyA6IHsgIkMiLCAiQ1hYIiB9KSB7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gZmlsdGVyZWRfc291cmNlczsKQEAgLTI2NjgsNTMgKzI4MjQsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICFzZi0+R2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKICAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICBzaXplX3QgYmF0Y2hTaXplID0gdW5pdHlCYXRjaFNpemU7Ci0gICAgaWYgKHVuaXR5QmF0Y2hTaXplID09IDApIHsKLSAgICAgIGJhdGNoU2l6ZSA9IGZpbHRlcmVkX3NvdXJjZXMuc2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bml0eV9maWxlczsKKyAgICBpZiAoIXVuaXR5TW9kZSB8fCAqdW5pdHlNb2RlID09ICJCQVRDSCIpIHsKKyAgICAgIHVuaXR5X2ZpbGVzID0KKyAgICAgICAgQWRkVW5pdHlGaWxlc01vZGVBdXRvKHRhcmdldCwgbGFuZywgZmlsdGVyZWRfc291cmNlcywgYmVmb3JlSW5jbHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVySW5jbHVkZSwgZmlsZW5hbWVfYmFzZSwgdW5pdHlCYXRjaFNpemUpOworICAgIH0gZWxzZSBpZiAodW5pdHlNb2RlICYmICp1bml0eU1vZGUgPT0gIkdST1VQIikgeworICAgICAgdW5pdHlfZmlsZXMgPQorICAgICAgICBBZGRVbml0eUZpbGVzTW9kZUdyb3VwKHRhcmdldCwgbGFuZywgZmlsdGVyZWRfc291cmNlcywgYmVmb3JlSW5jbHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckluY2x1ZGUsIGZpbGVuYW1lX2Jhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAvLyB1bml0eSBtb2RlIGlzIHNldCB0byBhbiB1bnN1cHBvcnRlZCB2YWx1ZQorICAgICAgc3RkOjpzdHJpbmcgZSgiSW52YWxpZCBVTklUWV9CVUlMRF9NT0RFIHZhbHVlIG9mICIgKyAqdW5pdHlNb2RlICsKKyAgICAgICAgICAgICAgICAgICAgIiBhc3NpZ25lZCB0byB0YXJnZXQgIiArIHRhcmdldC0+R2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgICAgICAgIi4gQWNjZXB0YWJsZSB2YWx1ZXMgYXJlIEJBVENIIGFuZCBHUk9VUC4iKTsKKyAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUpOwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGl0ZW1zTGVmdCA9IGZpbHRlcmVkX3NvdXJjZXMuc2l6ZSgpLCBjaHVuaywgYmF0Y2ggPSAwOwotICAgICAgICAgaXRlbXNMZWZ0ID4gMDsgaXRlbXNMZWZ0IC09IGNodW5rLCArK2JhdGNoKSB7Ci0KLSAgICAgIGNodW5rID0gc3RkOjptaW4oaXRlbXNMZWZ0LCBiYXRjaFNpemUpOwotCi0gICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IGNtU3RyQ2F0KGZpbGVuYW1lX2Jhc2UsICJ1bml0eV8iLCBiYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbmcgPT0gIkMiKSA/ICJfYy5jIiA6ICJfY3h4LmN4eCIpOwotCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZV90bXAgPSBjbVN0ckNhdChmaWxlbmFtZSwgIi50bXAiKTsKLSAgICAgIHsKLSAgICAgICAgc2l6ZV90IGJlZ2luID0gYmF0Y2ggKiBiYXRjaFNpemU7Ci0gICAgICAgIHNpemVfdCBlbmQgPSBiZWdpbiArIGNodW5rOwotCi0gICAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmaWxlKAotICAgICAgICAgIGZpbGVuYW1lX3RtcCwgZmFsc2UsCi0gICAgICAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7Ci0gICAgICAgIGZpbGUgPDwgIi8qIGdlbmVyYXRlZCBieSBDTWFrZSAqL1xuXG4iOwotCi0gICAgICAgIGZvciAoOyBiZWdpbiAhPSBlbmQ7ICsrYmVnaW4pIHsKLSAgICAgICAgICBjbVNvdXJjZUZpbGUqIHNmID0gZmlsdGVyZWRfc291cmNlc1tiZWdpbl07Ci0KLSAgICAgICAgICB0YXJnZXQtPkFkZFNvdXJjZUZpbGVUb1VuaXR5QmF0Y2goc2YtPlJlc29sdmVGdWxsUGF0aCgpKTsKLSAgICAgICAgICBzZi0+U2V0UHJvcGVydHkoIlVOSVRZX1NPVVJDRV9GSUxFIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICBpZiAoYmVmb3JlSW5jbHVkZSkgewotICAgICAgICAgICAgZmlsZSA8PCBiZWZvcmVJbmNsdWRlIDw8ICJcbiI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgZmlsZSA8PCAiI2luY2x1ZGUgXCIiIDw8IHNmLT5SZXNvbHZlRnVsbFBhdGgoKSA8PCAiXCJcbiI7Ci0KLSAgICAgICAgICBpZiAoYWZ0ZXJJbmNsdWRlKSB7Ci0gICAgICAgICAgICBmaWxlIDw8IGFmdGVySW5jbHVkZSA8PCAiXG4iOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY21TeXN0ZW1Ub29sczo6TW92ZUZpbGVJZkRpZmZlcmVudChmaWxlbmFtZV90bXAsIGZpbGVuYW1lKTsKLQotICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UoZmlsZW5hbWUsIHRydWUpOwotCi0gICAgICBhdXRvIHVuaXR5ID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKGZpbGVuYW1lKTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGZpbGUgOiB1bml0eV9maWxlcykgeworICAgICAgYXV0byB1bml0eSA9IHRoaXMtPkdldE1ha2VmaWxlKCktPkdldE9yQ3JlYXRlU291cmNlKGZpbGUpOworICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UoZmlsZSwgdHJ1ZSk7CiAgICAgICB1bml0eS0+U2V0UHJvcGVydHkoIlNLSVBfVU5JVFlfQlVJTERfSU5DTFVTSU9OIiwgIk9OIik7Ci0gICAgICB1bml0eS0+U2V0UHJvcGVydHkoIlVOSVRZX1NPVVJDRV9GSUxFIiwgZmlsZW5hbWUuY19zdHIoKSk7CisgICAgICB1bml0eS0+U2V0UHJvcGVydHkoIlVOSVRZX1NPVVJDRV9GSUxFIiwgZmlsZS5jX3N0cigpKTsKICAgICB9CiAgIH0KIH0KQEAgLTI5NTAsMTEgKzMwODEsMTEgQEAKICAgICAgIC8vIGNvbW1hbmQgbGluZSB3aXRob3V0IGFueSBlc2NhcGVzLiAgSG93ZXZlciB3ZSBzdGlsbCBoYXZlIHRvCiAgICAgICAvLyBnZXQgdGhlICckJyBhbmQgJyMnIGNoYXJhY3RlcnMgdGhyb3VnaCBXTWFrZSBhcyAnJCQnIGFuZAogICAgICAgLy8gJyQjJy4KLSAgICAgIGZvciAoY29uc3QgY2hhciogYyA9IGRlZmluZS5jX3N0cigpOyAqYzsgKytjKSB7Ci0gICAgICAgIGlmICgqYyA9PSAnJCcgfHwgKmMgPT0gJyMnKSB7CisgICAgICBmb3IgKGNoYXIgYyA6IGRlZmluZSkgeworICAgICAgICBpZiAoYyA9PSAnJCcgfHwgYyA9PSAnIycpIHsKICAgICAgICAgICBkZWYgKz0gJyQnOwogICAgICAgICB9Ci0gICAgICAgIGRlZiArPSAqYzsKKyAgICAgICAgZGVmICs9IGM7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIE1ha2UgdGhlIGRlZmluaXRpb24gYXBwZWFyIHByb3Blcmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuICBVc2UKQEAgLTI5ODYsMTkgKzMxMTcsMTkgQEAKICAgfQogfQogCi1jb25zdCBjaGFyKiBjbUxvY2FsR2VuZXJhdG9yOjpHZXRGZWF0dXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQorY21Qcm9wIGNtTG9jYWxHZW5lcmF0b3I6OkdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBzdGQ6OnN0cmluZyBmZWF0dXJlTmFtZSA9IGZlYXR1cmU7Ci0gIC8vIFRPRE86IERlZmluZSBhY2N1bXVsYXRpb24gcG9saWN5IGZvciBmZWF0dXJlcyAocHJlcGVuZCwgYXBwZW5kLCByZXBsYWNlKS4KLSAgLy8gQ3VycmVudGx5IHdlIGFsd2F5cyByZXBsYWNlLgorICAvLyBUT0RPOiBEZWZpbmUgYWNjdW11bGF0aW9uIHBvbGljeSBmb3IgZmVhdHVyZXMgKHByZXBlbmQsIGFwcGVuZCwKKyAgLy8gcmVwbGFjZSkuIEN1cnJlbnRseSB3ZSBhbHdheXMgcmVwbGFjZS4KICAgaWYgKCFjb25maWcuZW1wdHkoKSkgewogICAgIGZlYXR1cmVOYW1lICs9ICJfIjsKICAgICBmZWF0dXJlTmFtZSArPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgfQogICBjbVN0YXRlU25hcHNob3Qgc25wID0gdGhpcy0+U3RhdGVTbmFwc2hvdDsKICAgd2hpbGUgKHNucC5Jc1ZhbGlkKCkpIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSBzbnAuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHkoZmVhdHVyZU5hbWUpKSB7CisgICAgaWYgKGNtUHJvcCB2YWx1ZSA9IHNucC5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eShmZWF0dXJlTmFtZSkpIHsKICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAgICAgc25wID0gc25wLkdldEJ1aWxkc3lzdGVtRGlyZWN0b3J5UGFyZW50KCk7CkBAIC0zMDY0LDggKzMxOTUsOCBAQAogICAgIH0KIAogICAgIC8vIEluY2x1ZGUgdGhlIHVzZXItc3BlY2lmaWVkIHByZS1pbnN0YWxsIHNjcmlwdCBmb3IgdGhpcyB0YXJnZXQuCi0gICAgaWYgKGNvbnN0IGNoYXIqIHByZWluc3RhbGwgPSBsLT5HZXRQcm9wZXJ0eSgiUFJFX0lOU1RBTExfU0NSSVBUIikpIHsKLSAgICAgIGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvciBnKHByZWluc3RhbGwsIGZhbHNlLCAiIiwgZmFsc2UpOworICAgIGlmIChjbVByb3AgcHJlaW5zdGFsbCA9IGwtPkdldFByb3BlcnR5KCJQUkVfSU5TVEFMTF9TQ1JJUFQiKSkgeworICAgICAgY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yIGcoKnByZWluc3RhbGwsIGZhbHNlLCAiIiwgZmFsc2UpOwogICAgICAgZy5HZW5lcmF0ZShvcywgY29uZmlnLCBjb25maWd1cmF0aW9uVHlwZXMpOwogICAgIH0KIApAQCAtMzExNyw4ICszMjQ4LDggQEAKICAgICB9CiAKICAgICAvLyBJbmNsdWRlIHRoZSB1c2VyLXNwZWNpZmllZCBwb3N0LWluc3RhbGwgc2NyaXB0IGZvciB0aGlzIHRhcmdldC4KLSAgICBpZiAoY29uc3QgY2hhciogcG9zdGluc3RhbGwgPSBsLT5HZXRQcm9wZXJ0eSgiUE9TVF9JTlNUQUxMX1NDUklQVCIpKSB7Ci0gICAgICBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IgZyhwb3N0aW5zdGFsbCwgZmFsc2UsICIiLCBmYWxzZSk7CisgICAgaWYgKGNtUHJvcCBwb3N0aW5zdGFsbCA9IGwtPkdldFByb3BlcnR5KCJQT1NUX0lOU1RBTExfU0NSSVBUIikpIHsKKyAgICAgIGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvciBnKCpwb3N0aW5zdGFsbCwgZmFsc2UsICIiLCBmYWxzZSk7CiAgICAgICBnLkdlbmVyYXRlKG9zLCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAgICAgfQogICB9CkBAIC0zMzA0LDExICszNDM1LDEyIEBACiAgIC8vIFNlbGVjdCBhIG5pY2UtbG9va2luZyByZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBmaWxlIHRvIGNvbnN0cnVjdAogICAvLyB0aGUgb2JqZWN0IGZpbGUgbmFtZS4KICAgc3RkOjpzdHJpbmcgb2JqZWN0TmFtZTsKKyAgLy8gWFhYKGNsYW5nLXRpZHkpOiBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTY1CisgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgaWYgKChyZWxTb3VyY2UgJiYgIXJlbEJpbmFyeSkgfHwgKHN1YlNvdXJjZSAmJiAhc3ViQmluYXJ5KSkgewogICAgIG9iamVjdE5hbWUgPSByZWxGcm9tU291cmNlOwotICB9IGVsc2UgaWYgKChyZWxCaW5hcnkgJiYgIXJlbFNvdXJjZSkgfHwgKHN1YkJpbmFyeSAmJiAhc3ViU291cmNlKSkgewotICAgIG9iamVjdE5hbWUgPSByZWxGcm9tQmluYXJ5OwotICB9IGVsc2UgaWYgKHJlbEZyb21CaW5hcnkubGVuZ3RoKCkgPCByZWxGcm9tU291cmNlLmxlbmd0aCgpKSB7CisgIH0gZWxzZSBpZiAoKHJlbEJpbmFyeSAmJiAhcmVsU291cmNlKSB8fCAoc3ViQmluYXJ5ICYmICFzdWJTb3VyY2UpIHx8CisgICAgICAgICAgICAgcmVsRnJvbUJpbmFyeS5sZW5ndGgoKSA8IHJlbEZyb21Tb3VyY2UubGVuZ3RoKCkpIHsKICAgICBvYmplY3ROYW1lID0gcmVsRnJvbUJpbmFyeTsKICAgfSBlbHNlIHsKICAgICBvYmplY3ROYW1lID0gcmVsRnJvbVNvdXJjZTsKQEAgLTMzMjYsMTIgKzM0NTgsMTIgQEAKICAgLy8gRW5zdXJlIHRoYXQgZm9yIHRoZSBDTWFrZUZpbGVzLzx0YXJnZXQ+LmRpci9nZW5lcmF0ZWRfc291cmNlX2ZpbGUKICAgLy8gd2UgZG9uJ3QgZW5kIHVwIGhhdmluZzoKICAgLy8gQ01ha2VGaWxlcy88dGFyZ2V0Pi5kaXIvQ01ha2VGaWxlcy88dGFyZ2V0Pi5kaXIvZ2VuZXJhdGVkX3NvdXJjZV9maWxlLm9iagotICBjb25zdCBjaGFyKiB1bml0eVNvdXJjZUZpbGUgPSBzb3VyY2UuR2V0UHJvcGVydHkoIlVOSVRZX1NPVVJDRV9GSUxFIik7Ci0gIGNvbnN0IGNoYXIqIHBjaEV4dGVuc2lvbiA9IHNvdXJjZS5HZXRQcm9wZXJ0eSgiUENIX0VYVEVOU0lPTiIpOworICBjbVByb3AgdW5pdHlTb3VyY2VGaWxlID0gc291cmNlLkdldFByb3BlcnR5KCJVTklUWV9TT1VSQ0VfRklMRSIpOworICBjbVByb3AgcHNFeHRlbnNpb24gPSBzb3VyY2UuR2V0UHJvcGVydHkoIlBDSF9FWFRFTlNJT04iKTsKICAgY29uc3QgYm9vbCBpc1BjaE9iamVjdCA9IG9iamVjdE5hbWUuZmluZCgiY21ha2VfcGNoIikgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Ci0gIGlmICh1bml0eVNvdXJjZUZpbGUgfHwgcGNoRXh0ZW5zaW9uIHx8IGlzUGNoT2JqZWN0KSB7Ci0gICAgaWYgKHBjaEV4dGVuc2lvbikgewotICAgICAgY3VzdG9tT3V0cHV0RXh0ZW5zaW9uID0gcGNoRXh0ZW5zaW9uOworICBpZiAodW5pdHlTb3VyY2VGaWxlIHx8IHBzRXh0ZW5zaW9uIHx8IGlzUGNoT2JqZWN0KSB7CisgICAgaWYgKHBzRXh0ZW5zaW9uKSB7CisgICAgICBjdXN0b21PdXRwdXRFeHRlbnNpb24gPSBwc0V4dGVuc2lvbi0+Y19zdHIoKTsKICAgICB9CiAKICAgICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gdmFyKCIoQ01ha2VGaWxlcy9bXi9dKy5kaXIvKSIpOwpAQCAtMzQ2Nyw3ICszNTk5LDYgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgogICAgICAgLy8gTmV3IGJlaGF2aW9yIGlzIHRvIGlnbm9yZSB0aGUgdmFyaWFibGUuCi0gICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9JRl9VU0VEOgogICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgogICAgICAgLy8gVGhpcyB3aWxsIG5ldmVyIGJlIHRoZSBjYXNlIGJlY2F1c2UgdGhlIG9ubHkgd2F5IHRvIHJlcXVpcmUKQEAgLTM1MjksOCArMzY2MCw4IEBACiBzdGF0aWMgdm9pZCBjbUxHSW5mb1Byb3AoY21NYWtlZmlsZSogbWYsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApCiB7Ci0gIGlmIChjb25zdCBjaGFyKiB2YWwgPSB0YXJnZXQtPkdldFByb3BlcnR5KHByb3ApKSB7Ci0gICAgbWYtPkFkZERlZmluaXRpb24ocHJvcCwgdmFsKTsKKyAgaWYgKGNtUHJvcCB2YWwgPSB0YXJnZXQtPkdldFByb3BlcnR5KHByb3ApKSB7CisgICAgbWYtPkFkZERlZmluaXRpb24ocHJvcCwgKnZhbCk7CiAgIH0KIH0KIApAQCAtMzUzOSw4ICszNjcwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpCiB7CiAgIC8vIEZpbmQgdGhlIEluZm8ucGxpc3QgdGVtcGxhdGUuCi0gIGNvbnN0IGNoYXIqIGluID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTUFDT1NYX0JVTkRMRV9JTkZPX1BMSVNUIik7Ci0gIHN0ZDo6c3RyaW5nIGluRmlsZSA9IChpbiAmJiAqaW4pID8gaW4gOiAiTWFjT1NYQnVuZGxlSW5mby5wbGlzdC5pbiI7CisgIGNtUHJvcCBpbiA9IHRhcmdldC0+R2V0UHJvcGVydHkoIk1BQ09TWF9CVU5ETEVfSU5GT19QTElTVCIpOworICBzdGQ6OnN0cmluZyBpbkZpbGUgPSBjbU5vbmVtcHR5KGluKSA/ICppbiA6ICJNYWNPU1hCdW5kbGVJbmZvLnBsaXN0LmluIjsKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChpbkZpbGUpKSB7CiAgICAgc3RkOjpzdHJpbmcgaW5Nb2QgPSB0aGlzLT5NYWtlZmlsZS0+R2V0TW9kdWxlc0ZpbGUoaW5GaWxlKTsKICAgICBpZiAoIWluTW9kLmVtcHR5KCkpIHsKQEAgLTM1NzAsNyArMzcwMSw3IEBACiAgIGNtTEdJbmZvUHJvcChtZiwgdGFyZ2V0LCAiTUFDT1NYX0JVTkRMRV9TSE9SVF9WRVJTSU9OX1NUUklORyIpOwogICBjbUxHSW5mb1Byb3AobWYsIHRhcmdldCwgIk1BQ09TWF9CVU5ETEVfQlVORExFX1ZFUlNJT04iKTsKICAgY21MR0luZm9Qcm9wKG1mLCB0YXJnZXQsICJNQUNPU1hfQlVORExFX0NPUFlSSUdIVCIpOwotICBtZi0+Q29uZmlndXJlRmlsZShpbkZpbGUsIGZuYW1lLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgbWYtPkNvbmZpZ3VyZUZpbGUoaW5GaWxlLCBmbmFtZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6R2VuZXJhdGVGcmFtZXdvcmtJbmZvUExpc3QoCkBAIC0zNTc4LDggKzM3MDksOCBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpCiB7CiAgIC8vIEZpbmQgdGhlIEluZm8ucGxpc3QgdGVtcGxhdGUuCi0gIGNvbnN0IGNoYXIqIGluID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTUFDT1NYX0ZSQU1FV09SS19JTkZPX1BMSVNUIik7Ci0gIHN0ZDo6c3RyaW5nIGluRmlsZSA9IChpbiAmJiAqaW4pID8gaW4gOiAiTWFjT1NYRnJhbWV3b3JrSW5mby5wbGlzdC5pbiI7CisgIGNtUHJvcCBpbiA9IHRhcmdldC0+R2V0UHJvcGVydHkoIk1BQ09TWF9GUkFNRVdPUktfSU5GT19QTElTVCIpOworICBzdGQ6OnN0cmluZyBpbkZpbGUgPSBjbU5vbmVtcHR5KGluKSA/ICppbiA6ICJNYWNPU1hGcmFtZXdvcmtJbmZvLnBsaXN0LmluIjsKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChpbkZpbGUpKSB7CiAgICAgc3RkOjpzdHJpbmcgaW5Nb2QgPSB0aGlzLT5NYWtlZmlsZS0+R2V0TW9kdWxlc0ZpbGUoaW5GaWxlKTsKICAgICBpZiAoIWluTW9kLmVtcHR5KCkpIHsKQEAgLTM2MDUsNyArMzczNiw3IEBACiAgIGNtTEdJbmZvUHJvcChtZiwgdGFyZ2V0LCAiTUFDT1NYX0ZSQU1FV09SS19JREVOVElGSUVSIik7CiAgIGNtTEdJbmZvUHJvcChtZiwgdGFyZ2V0LCAiTUFDT1NYX0ZSQU1FV09SS19TSE9SVF9WRVJTSU9OX1NUUklORyIpOwogICBjbUxHSW5mb1Byb3AobWYsIHRhcmdldCwgIk1BQ09TWF9GUkFNRVdPUktfQlVORExFX1ZFUlNJT04iKTsKLSAgbWYtPkNvbmZpZ3VyZUZpbGUoaW5GaWxlLCBmbmFtZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIG1mLT5Db25maWd1cmVGaWxlKGluRmlsZSwgZm5hbWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMzY0Nyw3ICszNzc4LDcgQEAKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLCBib29sIGVzY2FwZU9sZFN0eWxlLAogICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAotICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIGNtTWFrZWZpbGUqIG1mID0gbGcuR2V0TWFrZWZpbGUoKTsKIApAQCAtMzcwOSw3ICszODQwLDggQEAKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21DdXN0b21Db21tYW5kPiBjYyA9IGNtOjptYWtlX3VuaXF1ZTxjbUN1c3RvbUNvbW1hbmQ+KAotICAgICAgb3V0cHV0cywgYnlwcm9kdWN0cywgZGVwZW5kczIsIGNvbW1hbmRMaW5lcywgbGZidCwgY29tbWVudCwgd29ya2luZ0Rpcik7CisgICAgICBvdXRwdXRzLCBieXByb2R1Y3RzLCBkZXBlbmRzMiwgY29tbWFuZExpbmVzLCBsZmJ0LCBjb21tZW50LCB3b3JraW5nRGlyLAorICAgICAgc3RkUGlwZXNVVEY4KTsKICAgICBjYy0+U2V0RXNjYXBlT2xkU3R5bGUoZXNjYXBlT2xkU3R5bGUpOwogICAgIGNjLT5TZXRFc2NhcGVBbGxvd01ha2VWYXJzKHRydWUpOwogICAgIGNjLT5TZXRJbXBsaWNpdERlcGVuZHMoaW1wbGljaXRfZGVwZW5kcyk7CkBAIC0zNzM2LDcgKzM4NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlc190ZXJtaW5hbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIGNtTWFrZWZpbGUqIG1mID0gbGcuR2V0TWFrZWZpbGUoKTsKIApAQCAtMzc0Niw3ICszODc4LDcgQEAKICAgLy8gQWRkIHRoZSBjb21tYW5kIHRvIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBzdGVwIGZvciB0aGUgdGFyZ2V0LgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fb3V0cHV0OwogICBjbUN1c3RvbUNvbW1hbmQgY2Mobm9fb3V0cHV0LCBieXByb2R1Y3RzLCBkZXBlbmRzLCBjb21tYW5kTGluZXMsIGxmYnQsCi0gICAgICAgICAgICAgICAgICAgICBjb21tZW50LCB3b3JraW5nRGlyKTsKKyAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQsIHdvcmtpbmdEaXIsIHN0ZFBpcGVzVVRGOCk7CiAgIGNjLlNldEVzY2FwZU9sZFN0eWxlKGVzY2FwZU9sZFN0eWxlKTsKICAgY2MuU2V0RXNjYXBlQWxsb3dNYWtlVmFycyh0cnVlKTsKICAgY2MuU2V0VXNlc1Rlcm1pbmFsKHVzZXNfdGVybWluYWwpOwpAQCAtMzc3Nyw3ICszOTA5LDcgQEAKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLCBib29sIGVzY2FwZU9sZFN0eWxlLAogICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAotICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIC8vIEFsd2F5cyBjcmVhdGUgdGhlIG91dHB1dCBzb3VyY2VzIGFuZCBtYXJrIHRoZW0gZ2VuZXJhdGVkLgogICBDcmVhdGVHZW5lcmF0ZWRTb3VyY2VzKGxnLCBvdXRwdXRzLCBvcmlnaW4sIGxmYnQpOwpAQCAtMzc4Niw3ICszOTE4LDcgQEAKICAgcmV0dXJuIEFkZEN1c3RvbUNvbW1hbmQoCiAgICAgbGcsIGxmYnQsIG91dHB1dHMsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIG1haW5fZGVwZW5kZW5jeSwgaW1wbGljaXRfZGVwZW5kcywKICAgICBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXIsIHJlcGxhY2UsIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLAotICAgIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBkZXBmaWxlLCBqb2JfcG9vbCk7CisgICAgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sLCBzdGRQaXBlc1VURjgpOwogfQogCiB2b2lkIEFwcGVuZEN1c3RvbUNvbW1hbmRUb091dHB1dChjbUxvY2FsR2VuZXJhdG9yJiBsZywKQEAgLTM4MjIsNyArMzk1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXNjYXBlT2xkU3R5bGUsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgc3RkUGlwZXNVVEY4KQogewogICAvLyBBbHdheXMgY3JlYXRlIHRoZSBieXByb2R1Y3Qgc291cmNlcyBhbmQgbWFyayB0aGVtIGdlbmVyYXRlZC4KICAgQ3JlYXRlR2VuZXJhdGVkU291cmNlKGxnLCBmb3JjZS5OYW1lLCBvcmlnaW4sIGxmYnQpOwpAQCAtMzgzNyw5ICszOTY5LDkgQEAKICAgY21JbXBsaWNpdERlcGVuZHNMaXN0IG5vX2ltcGxpY2l0X2RlcGVuZHM7CiAgIGNtU291cmNlRmlsZSogcnVsZSA9IEFkZEN1c3RvbUNvbW1hbmQoCiAgICAgbGcsIGxmYnQsIHsgZm9yY2UuTmFtZSB9LCBieXByb2R1Y3RzLCBkZXBlbmRzLCBub19tYWluX2RlcGVuZGVuY3ksCi0gICAgbm9faW1wbGljaXRfZGVwZW5kcywgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nRGlyLCAvKnJlcGxhY2U9Ki9mYWxzZSwKLSAgICBlc2NhcGVPbGRTdHlsZSwgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIC8qZGVwZmlsZT0qLyIiLAotICAgIGpvYl9wb29sKTsKKyAgICBub19pbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXIsCisgICAgLypyZXBsYWNlPSovZmFsc2UsIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywKKyAgICAvKmRlcGZpbGU9Ki8iIiwgam9iX3Bvb2wsIHN0ZFBpcGVzVVRGOCk7CiAgIGlmIChydWxlKSB7CiAgICAgbGcuR2V0TWFrZWZpbGUoKS0+QWRkVGFyZ2V0Qnlwcm9kdWN0cyh0YXJnZXQsIGJ5cHJvZHVjdHMpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5oIGIvU291cmNlL2NtTG9jYWxHZW5lcmF0b3IuaAppbmRleCBhNDU5Mzg0Li4wYzUxYTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUxvY2FsR2VuZXJhdG9yLmgKQEAgLTEzLDEzICsxMywxNCBAQAogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2ludC5oPgogCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kVHlwZXMuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogCiBjbGFzcyBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb247CkBAIC0xMDUsOCArMTA2LDggQEAKIAogICB2b2lkIEFkZEFyY2hpdGVjdHVyZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWx0ZXJBcmNoID0gc3RkOjpzdHJpbmcoKSk7CiAKICAgdm9pZCBBZGRMYW5ndWFnZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKQEAgLTEyMyw3ICsxMjQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIHZvaWQgQWRkQ29tcGlsZXJSZXF1aXJlbWVudEZsYWcoc3RkOjpzdHJpbmcmIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogICAvLyEgQXBwZW5kIGZsYWdzIHRvIGEgc3RyaW5nLgogICB2aXJ0dWFsIHZvaWQgQXBwZW5kRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5ld0ZsYWdzKSBjb25zdDsKQEAgLTIwOCw4ICsyMTAsNyBAQAogICB2b2lkIEFwcGVuZEZlYXR1cmVPcHRpb25zKHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmVhdHVyZSk7CiAKLSAgY29uc3QgY2hhciogR2V0RmVhdHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgY21Qcm9wIEdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIC8qKiBcYnJpZWYgR2V0IGFic29sdXRlIHBhdGggdG8gZGVwZW5kZW5jeSBcYSBuYW1lCiAgICAqCkBAIC0yOTcsNyArMjk4LDggQEAKICAgICBjb25zdCBjaGFyKiBjb21tZW50LCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIGVzY2FwZU9sZFN0eWxlID0gdHJ1ZSwKICAgICBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUgPSAiIiwKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyA9IGZhbHNlLAotICAgIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzIG9iakxpYkNvbW1hbmRzID0gY21PYmplY3RMaWJyYXJ5Q29tbWFuZHM6OlJlamVjdCk7CisgICAgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHMgb2JqTGliQ29tbWFuZHMgPSBjbU9iamVjdExpYnJhcnlDb21tYW5kczo6UmVqZWN0LAorICAgIGJvb2wgc3RkUGlwZXNVVEY4ID0gZmFsc2UpOwogCiAgIC8qKgogICAgKiBBZGQgYSBjdXN0b20gY29tbWFuZCB0byBhIHNvdXJjZSBmaWxlLgpAQCAtMzA4LDcgKzMxMCw4IEBACiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKICAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCiAgICAgYm9vbCB1c2VzX3Rlcm1pbmFsID0gZmFsc2UsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIik7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUgPSAiIiwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIsCisgICAgYm9vbCBzdGRQaXBlc1VURjggPSBmYWxzZSk7CiAgIGNtU291cmNlRmlsZSogQWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cywKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCkBAIC0zMTgsNyArMzIxLDggQEAKICAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAogICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGVzY2FwZU9sZFN0eWxlID0gdHJ1ZSwKICAgICBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyA9IGZhbHNlLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlID0gIiIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlKTsKIAogICAvKioKICAgICogQWRkIGEgdXRpbGl0eSB0byB0aGUgYnVpbGQuICBBIHV0aWxpdHkgdGFyZ2V0IGlzIGEgY29tbWFuZCB0aGF0IGlzIHJ1bgpAQCAtMzMwLDcgKzMzNCw4IEBACiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAogICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQgPSBudWxscHRyLCBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwKLSAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiKTsKKyAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiLAorICAgIGJvb2wgc3RkUGlwZXNVVEY4ID0gZmFsc2UpOwogCiAgIHN0ZDo6c3RyaW5nIEdldFByb2plY3ROYW1lKCkgY29uc3Q7CiAKQEAgLTQxNyw2ICs0MjIsMTEgQEAKIAogICAvKiogRmlsbCBvdXQgdGhlc2Ugc3RyaW5ncyBmb3IgdGhlIGdpdmVuIHRhcmdldC4gIExpYnJhcmllcyB0byBsaW5rLAogICAgKiAgZmxhZ3MsIGFuZCBsaW5rZmxhZ3MuICovCisgIHZvaWQgR2V0RGV2aWNlTGlua0ZsYWdzKGNtTGlua0xpbmVDb21wdXRlciogbGlua0xpbmVDb21wdXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgc3RkOjpzdHJpbmcmIGxpbmtMaWJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgbGlua0ZsYWdzLCBzdGQ6OnN0cmluZyYgZnJhbWV3b3JrUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxpbmtQYXRoLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KTsKKwogICB2b2lkIEdldFRhcmdldEZsYWdzKGNtTGlua0xpbmVDb21wdXRlciogbGlua0xpbmVDb21wdXRlciwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBzdGQ6OnN0cmluZyYgbGlua0xpYnMsCiAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGZsYWdzLCBzdGQ6OnN0cmluZyYgbGlua0ZsYWdzLApAQCAtNDM1LDEwICs0NDUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKICAgdm9pZCBHZXRUYXJnZXRDb21waWxlRmxhZ3MoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIHN0ZDo6c3RyaW5nJiBmbGFncyk7Ci0gIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gR2V0VGFyZ2V0Q29tcGlsZUZsYWdzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIHN0ZDo6c3RyaW5nJiBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFyY2ggPSBzdGQ6OnN0cmluZygpKTsKKyAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBHZXRUYXJnZXRDb21waWxlRmxhZ3MoCisgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgc3RkOjpzdHJpbmcgY29uc3QmIGFyY2ggPSBzdGQ6OnN0cmluZygpKTsKIAogICBzdGQ6OnN0cmluZyBHZXRGcmFtZXdvcmtGbGFncyhzdGQ6OnN0cmluZyBjb25zdCYgbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKQEAgLTUzMCw2ICs1NDEsMTEgQEAKICAgdm9pZCBDb21wdXRlT2JqZWN0TWF4UGF0aCgpOwogICBib29sIEFsbEFwcGxlQXJjaFN5c3Jvb3RzQXJlVGhlU2FtZShjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGFyY2hzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzeXNyb290KTsKKworICB2b2lkIENvcHlQY2hDb21waWxlUGRiKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIFJldXNlRnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogcmV1c2VUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBleHRlbnNpb25zKTsKIH07CiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCkBAIC01NDksNyArNTY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNfdGVybWluYWwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBib29sIHN0ZFBpcGVzVVRGOCk7CiAKIGNtU291cmNlRmlsZSogQWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAogICBjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCwKQEAgLTU2MCw3ICs1NzYsNyBAQAogICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAogICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCiAgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCk7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpOwogCiB2b2lkIEFwcGVuZEN1c3RvbUNvbW1hbmRUb091dHB1dChjbUxvY2FsR2VuZXJhdG9yJiBsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQsCkBAIC01NzcsNyArNTkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlc2NhcGVPbGRTdHlsZSwgY29uc3QgY2hhciogY29tbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpOworICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgc3RkUGlwZXNVVEY4KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbE5pbmphR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsTmluamFHZW5lcmF0b3IuY3h4CmluZGV4IDU2ZTlmODEuLmFlZTdmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsTmluamFHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsTmluamFHZW5lcmF0b3IuY3h4CkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC0xODEsOCArMTgyLDkgQEAKICAgYm9vbCBmb3JjZUZ1bGxQYXRocykKIHsKICAgaWYgKGZvcmNlRnVsbFBhdGhzKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KTsKKyAgICByZXR1cm4gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAorICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoLCB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpLAorICAgICAgZm9ybWF0KTsKICAgfQogICByZXR1cm4gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAogICAgIHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpLCBwYXRoKSwKQEAgLTI0Myw5ICsyNDUsOCBAQAogdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlUHJvamVjdEhlYWRlcihzdGQ6Om9zdHJlYW0mIG9zKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwotICBvcyA8PCAiIyBQcm9qZWN0OiAiIDw8IHRoaXMtPkdldFByb2plY3ROYW1lKCkgPDwgc3RkOjplbmRsCi0gICAgIDw8ICIjIENvbmZpZ3VyYXRpb25zOiAiIDw8IGNtSm9pbih0aGlzLT5HZXRDb25maWdOYW1lcygpLCAiLCAiKQotICAgICA8PCBzdGQ6OmVuZGw7CisgIG9zIDw8ICIjIFByb2plY3Q6ICIgPDwgdGhpcy0+R2V0UHJvamVjdE5hbWUoKSA8PCAnXG4nCisgICAgIDw8ICIjIENvbmZpZ3VyYXRpb25zOiAiIDw8IGNtSm9pbih0aGlzLT5HZXRDb25maWdOYW1lcygpLCAiLCAiKSA8PCAnXG4nOwogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwogfQogCkBAIC0yNzIsOCArMjczLDcgQEAKIAogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZUNvbW1lbnQoCiAgICAgb3MsICJNaW5pbWFsIHZlcnNpb24gb2YgTmluamEgcmVxdWlyZWQgYnkgdGhpcyBmaWxlIik7Ci0gIG9zIDw8ICJuaW5qYV9yZXF1aXJlZF92ZXJzaW9uID0gIiA8PCByZXF1aXJlZFZlcnNpb24gPDwgc3RkOjplbmRsCi0gICAgIDw8IHN0ZDo6ZW5kbDsKKyAgb3MgPDwgIm5pbmphX3JlcXVpcmVkX3ZlcnNpb24gPSAiIDw8IHJlcXVpcmVkVmVyc2lvbiA8PCAiXG5cbiI7CiB9CiAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZU5pbmphQ29uZmlndXJhdGlvblZhcmlhYmxlKApAQCAtMjg4LDIzICsyODgsMjIgQEAKIHsKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKIAotICBjb25zdCBjaGFyKiBqb2Jwb29scyA9CisgIGNtUHJvcCBqb2Jwb29scyA9CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiSk9CX1BPT0xTIik7CiAgIGlmICgham9icG9vbHMpIHsKLSAgICBqb2Jwb29scyA9IHRoaXMtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24oIkNNQUtFX0pPQl9QT09MUyIpOworICAgIGpvYnBvb2xzID0gdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmKCJDTUFLRV9KT0JfUE9PTFMiKTsKICAgfQogICBpZiAoam9icG9vbHMpIHsKICAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZUNvbW1lbnQoCiAgICAgICBvcywgIlBvb2xzIGRlZmluZWQgYnkgZ2xvYmFsIHByb3BlcnR5IEpPQl9QT09MUyIpOwotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwb29scyA9IGNtRXhwYW5kZWRMaXN0KGpvYnBvb2xzKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcG9vbHMgPSBjbUV4cGFuZGVkTGlzdCgqam9icG9vbHMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHBvb2wgOiBwb29scykgewogICAgICAgY29uc3Qgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlcSA9IHBvb2wuZmluZCgnPScpOwogICAgICAgdW5zaWduZWQgaW50IGpvYnM7CiAgICAgICBpZiAoZXEgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKICAgICAgICAgICBzc2NhbmYocG9vbC5jX3N0cigpICsgZXEsICI9JXUiLCAmam9icykgPT0gMSkgewotICAgICAgICBvcyA8PCAicG9vbCAiIDw8IHBvb2wuc3Vic3RyKDAsIGVxKSA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zIDw8ICIgIGRlcHRoID0gIiA8PCBqb2JzIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgb3MgPDwgc3RkOjplbmRsOworICAgICAgICBvcyA8PCAicG9vbCAiIDw8IHBvb2wuc3Vic3RyKDAsIGVxKSA8PCAiXG4gIGRlcHRoID0gIiA8PCBqb2JzCisgICAgICAgICAgIDw8ICJcblxuIjsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJJbnZhbGlkIHBvb2wgZGVmaW5lZCBieSBwcm9wZXJ0eSAnSk9CX1BPT0xTJzogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wpOwpAQCAtMzE2LDggKzMxNSw3IEBACiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVOaW5qYUZpbGVzSW5jbHVzaW9uQ29uZmlnKHN0ZDo6b3N0cmVhbSYgb3MpCiB7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcihvcyk7Ci0gIG9zIDw8ICIjIEluY2x1ZGUgYXV4aWxpYXJ5IGZpbGVzLlxuIgotICAgICA8PCAiXG4iOworICBvcyA8PCAiIyBJbmNsdWRlIGF1eGlsaWFyeSBmaWxlcy5cblxuIjsKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvciogbmcgPSB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpOwogICBzdGQ6OnN0cmluZyBjb25zdCBuaW5qYUNvbW1vbkZpbGUgPQogICAgIG5nLT5OaW5qYU91dHB1dFBhdGgoY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpOSU5KQV9DT01NT05fRklMRSk7CkBAIC0zMzAsOCArMzI4LDcgQEAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZU5pbmphRmlsZXNJbmNsdXNpb25Db21tb24oc3RkOjpvc3RyZWFtJiBvcykKIHsKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKLSAgb3MgPDwgIiMgSW5jbHVkZSBhdXhpbGlhcnkgZmlsZXMuXG4iCi0gICAgIDw8ICJcbiI7CisgIG9zIDw8ICIjIEluY2x1ZGUgYXV4aWxpYXJ5IGZpbGVzLlxuXG4iOwogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yKiBuZyA9IHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0IG5pbmphUnVsZXNGaWxlID0KICAgICBuZy0+TmluamFPdXRwdXRQYXRoKGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok5JTkpBX1JVTEVTX0ZJTEUpOwpAQCAtMzQ0LDE0ICszNDEsMTQgQEAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZVByb2Nlc3NlZE1ha2VmaWxlKHN0ZDo6b3N0cmVhbSYgb3MpCiB7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcihvcyk7Ci0gIG9zIDw8ICIjIFdyaXRlIHN0YXRlbWVudHMgZGVjbGFyZWQgaW4gQ01ha2VMaXN0cy50eHQ6IiA8PCBzdGQ6OmVuZGwKKyAgb3MgPDwgIiMgV3JpdGUgc3RhdGVtZW50cyBkZWNsYXJlZCBpbiBDTWFrZUxpc3RzLnR4dDpcbiIKICAgICAgPDwgIiMgIiA8PCB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEUiKQotICAgICA8PCBzdGQ6OmVuZGw7CisgICAgIDw8ICdcbic7CiAgIGlmICh0aGlzLT5Jc1Jvb3RNYWtlZmlsZSgpKSB7Ci0gICAgb3MgPDwgIiMgV2hpY2ggaXMgdGhlIHJvb3QgZmlsZS4iIDw8IHN0ZDo6ZW5kbDsKKyAgICBvcyA8PCAiIyBXaGljaCBpcyB0aGUgcm9vdCBmaWxlLlxuIjsKICAgfQogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwotICBvcyA8PCBzdGQ6OmVuZGw7CisgIG9zIDw8ICdcbic7CiB9CiAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpBcHBlbmRUYXJnZXRPdXRwdXRzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCkBAIC02NjksMTAgKzY2Niw5IEBACiBzdGQ6OnN0cmluZyBjbUxvY2FsTmluamFHZW5lcmF0b3I6Ok1ha2VDdXN0b21MYXVuY2hlcigKICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNvbnN0JiBjY2cpCiB7Ci0gIGNvbnN0IGNoYXIqIHByb3BlcnR5X3ZhbHVlID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIlJVTEVfTEFVTkNIX0NVU1RPTSIpOworICBjbVByb3AgcHJvcGVydHlfdmFsdWUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIlJVTEVfTEFVTkNIX0NVU1RPTSIpOwogCi0gIGlmICghcHJvcGVydHlfdmFsdWUgfHwgISpwcm9wZXJ0eV92YWx1ZSkgeworICBpZiAoIWNtTm9uZW1wdHkocHJvcGVydHlfdmFsdWUpKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgIH0KIApAQCAtNjk0LDcgKzY5MCw3IEBACiAgIHN0ZDo6dW5pcXVlX3B0cjxjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyPiBydWxlUGxhY2Vob2xkZXJFeHBhbmRlcigKICAgICB0aGlzLT5DcmVhdGVSdWxlUGxhY2Vob2xkZXJFeHBhbmRlcigpKTsKIAotICBzdGQ6OnN0cmluZyBsYXVuY2hlciA9IHByb3BlcnR5X3ZhbHVlOworICBzdGQ6OnN0cmluZyBsYXVuY2hlciA9ICpwcm9wZXJ0eV92YWx1ZTsKICAgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXItPkV4cGFuZFJ1bGVWYXJpYWJsZXModGhpcywgbGF1bmNoZXIsIHZhcnMpOwogICBpZiAoIWxhdW5jaGVyLmVtcHR5KCkpIHsKICAgICBsYXVuY2hlciArPSAiICI7CkBAIC03MDUsMTEgKzcwMSwxMSBAQAogCiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6QWRkaXRpb25hbENsZWFuRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BfdmFsdWUgPQorICBpZiAoY21Qcm9wIHByb3BfdmFsdWUgPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIkFERElUSU9OQUxfQ0xFQU5fRklMRVMiKSkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbGVhbkZpbGVzOwogICAgIHsKLSAgICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKHByb3BfdmFsdWUsIHRoaXMsIGNvbmZpZyksCisgICAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgqcHJvcF92YWx1ZSwgdGhpcywgY29uZmlnKSwKICAgICAgICAgICAgICAgICAgICBjbGVhbkZpbGVzKTsKICAgICB9CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGJpbmFyeURpciA9IHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5jeHggYi9Tb3VyY2UvY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CmluZGV4IGM5YzY1NmMuLjg2YTg4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmN4eApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKQEAgLTQ4LDM3ICs0OSw2IEBACiAjICBpbmNsdWRlICJjbURlcGVuZHNKYXZhLmgiCiAjZW5kaWYKIAotLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBNYWtlZmlsZSBkZXBlbmRlbmN5IGxpbmVzCi1jbGFzcyBjbU1ha2VTYWZlCi17Ci1wdWJsaWM6Ci0gIGNtTWFrZVNhZmUoY29uc3QgY2hhciogcykKLSAgICA6IERhdGEocykKLSAgewotICB9Ci0gIGNtTWFrZVNhZmUoc3RkOjpzdHJpbmcgY29uc3QmIHMpCi0gICAgOiBEYXRhKHMuY19zdHIoKSkKLSAgewotICB9Ci0KLXByaXZhdGU6Ci0gIGNvbnN0IGNoYXIqIERhdGE7Ci0gIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY21NYWtlU2FmZSBjb25zdCYgc2VsZikKLSAgewotICAgIGZvciAoY29uc3QgY2hhciogYyA9IHNlbGYuRGF0YTsgKmM7ICsrYykgewotICAgICAgc3dpdGNoICgqYykgewotICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICBvcyA8PCAiJChFUVVBTFMpIjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBvcyA8PCAqYzsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9zOwotICB9Ci19OwotCiAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBiZWxvdy4KIHN0YXRpYyBzdGQ6OnN0cmluZyBjbVNwbGl0RXh0ZW5zaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbiwgc3RkOjpzdHJpbmcmIGJhc2UpCiB7CkBAIC00OTgsNiArNDY4LDE0IEBACiAgIHJldHVybiB0aGlzLT5Ib21lUmVsYXRpdmVPdXRwdXRQYXRoOwogfQogCitzdGQ6OnN0cmluZyBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q29udmVydFRvTWFrZWZpbGVQYXRoKAorICBzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkgY29uc3QKK3sKKyAgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBnZyA9CisgICAgc3RhdGljX2Nhc3Q8Y21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4odGhpcy0+R2xvYmFsR2VuZXJhdG9yKTsKKyAgcmV0dXJuIGdnLT5Db252ZXJ0VG9NYWtlZmlsZVBhdGgocGF0aCk7Cit9CisKIHZvaWQgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OldyaXRlTWFrZVJ1bGUoCiAgIHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKQEAgLTUyOCw3ICs1MDYsNyBAQAogICB9CiAKICAgLy8gQ29uc3RydWN0IHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiB0aGUgcnVsZS4KLSAgc3RkOjpzdHJpbmcgdGd0ID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCgKKyAgc3RkOjpzdHJpbmcgdGd0ID0gdGhpcy0+Q29udmVydFRvTWFrZWZpbGVQYXRoKAogICAgIHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpLCB0YXJnZXQpKTsKIAogICBjb25zdCBjaGFyKiBzcGFjZSA9ICIiOwpAQCAtNTQyLDMwICs1MjAsMzAgQEAKICAgaWYgKHN5bWJvbGljKSB7CiAgICAgaWYgKGNvbnN0IGNoYXIqIHN5bSA9CiAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX01BS0VfU1lNQk9MSUNfUlVMRSIpKSB7Ci0gICAgICBvcyA8PCBjbU1ha2VTYWZlKHRndCkgPDwgc3BhY2UgPDwgIjogIiA8PCBzeW0gPDwgIlxuIjsKKyAgICAgIG9zIDw8IHRndCA8PCBzcGFjZSA8PCAiOiAiIDw8IHN5bSA8PCAiXG4iOwogICAgIH0KICAgfQogCiAgIC8vIFdyaXRlIHRoZSBydWxlLgogICBpZiAoZGVwZW5kcy5lbXB0eSgpKSB7CiAgICAgLy8gTm8gZGVwZW5kZW5jaWVzLiAgVGhlIGNvbW1hbmRzIHdpbGwgYWx3YXlzIHJ1bi4KLSAgICBvcyA8PCBjbU1ha2VTYWZlKHRndCkgPDwgc3BhY2UgPDwgIjpcbiI7CisgICAgb3MgPDwgdGd0IDw8IHNwYWNlIDw8ICI6XG4iOwogICB9IGVsc2UgewogICAgIC8vIFNwbGl0IGRlcGVuZGVuY2llcyBpbnRvIG11bHRpcGxlIHJ1bGUgbGluZXMuICBUaGlzIGFsbG93cyBmb3IKICAgICAvLyB2ZXJ5IGxvbmcgZGVwZW5kZW5jeSBsaXN0cyBldmVuIG9uIG9sZGVyIG1ha2UgaW1wbGVtZW50YXRpb25zLgogICAgIHN0ZDo6c3RyaW5nIGJpbkRpciA9IHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGRlcGVuZCA6IGRlcGVuZHMpIHsKLSAgICAgIHJlcGxhY2UgPSBkZXBlbmQ7Ci0gICAgICByZXBsYWNlID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCgKLSAgICAgICAgdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluRGlyLCByZXBsYWNlKSk7Ci0gICAgICBvcyA8PCBjbU1ha2VTYWZlKHRndCkgPDwgc3BhY2UgPDwgIjogIiA8PCBjbU1ha2VTYWZlKHJlcGxhY2UpIDw8ICJcbiI7CisgICAgICBvcyA8PCB0Z3QgPDwgc3BhY2UgPDwgIjogIgorICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvTWFrZWZpbGVQYXRoKAorICAgICAgICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIGRlcGVuZCkpCisgICAgICAgICA8PCAnXG4nOwogICAgIH0KICAgfQogCiAgIC8vIFdyaXRlIHRoZSBsaXN0IG9mIGNvbW1hbmRzLgogICBvcyA8PCBjbVdyYXAoIlx0IiwgY29tbWFuZHMsICIiLCAiXG4iKSA8PCAiXG4iOwogICBpZiAoc3ltYm9saWMgJiYgIXRoaXMtPklzV2F0Y29tV01ha2UoKSkgewotICAgIG9zIDw8ICIuUEhPTlkgOiAiIDw8IGNtTWFrZVNhZmUodGd0KSA8PCAiXG4iOworICAgIG9zIDw8ICIuUEhPTlkgOiAiIDw8IHRndCA8PCAiXG4iOwogICB9CiAgIG9zIDw8ICJcbiI7CiAgIC8vIEFkZCB0aGUgb3V0cHV0IHRvIHRoZSBsb2NhbCBoZWxwIGlmIHJlcXVlc3RlZC4KQEAgLTYyMyw4ICs2MDEsNyBAQAogICAgIHRoaXMtPk1heWJlQ29udmVydFdhdGNvbVNoZWxsQ29tbWFuZChjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSk7CiAgIGlmIChjbWFrZVNoZWxsQ29tbWFuZC5lbXB0eSgpKSB7CiAgICAgY21ha2VTaGVsbENvbW1hbmQgPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKSwKLSAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgfQogCiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KQEAgLTY0OCwxNiArNjI1LDE0IEBACiAgICAgPDwgIiMgVGhlIHRvcC1sZXZlbCBzb3VyY2UgZGlyZWN0b3J5IG9uIHdoaWNoIENNYWtlIHdhcyBydW4uXG4iCiAgICAgPDwgIkNNQUtFX1NPVVJDRV9ESVIgPSAiCiAgICAgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0aGlzLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSksCi0gICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpCisgICAgICB0aGlzLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQogICAgIDw8ICJcbiIKICAgICA8PCAiXG4iOwogICBtYWtlZmlsZVN0cmVhbQogICAgIDw8ICIjIFRoZSB0b3AtbGV2ZWwgYnVpbGQgZGlyZWN0b3J5IG9uIHdoaWNoIENNYWtlIHdhcyBydW4uXG4iCiAgICAgPDwgIkNNQUtFX0JJTkFSWV9ESVIgPSAiCiAgICAgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0aGlzLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSksCi0gICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpCisgICAgICB0aGlzLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQogICAgIDw8ICJcbiIKICAgICA8PCAiXG4iOwogICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KQEAgLTczOCw5ICs3MTMsMTAgQEAKICAgICAvLyAiVkVSQk9TRT0xIiB0byBiZSBhZGRlZCBhcyBhIG1ha2UgdmFyaWFibGUgd2hpY2ggd2lsbCBjaGFuZ2UgdGhlCiAgICAgLy8gbmFtZSBvZiB0aGlzIHNwZWNpYWwgdGFyZ2V0LiAgVGhpcyBnaXZlcyBhIG1ha2UtdGltZSBjaG9pY2UgdG8KICAgICAvLyB0aGUgdXNlci4KLSAgICB0aGlzLT5Xcml0ZU1ha2VSdWxlKG1ha2VmaWxlU3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgIlN1cHByZXNzIGRpc3BsYXkgb2YgZXhlY3V0ZWQgY29tbWFuZHMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIkKFZFUkJPU0UpLlNJTEVOVCIsIG5vX2RlcGVuZHMsIG5vX2NvbW1hbmRzLCBmYWxzZSk7CisgICAgLy8gV3JpdGUgZGlyZWN0bHkgdG8gdGhlIHN0cmVhbSBzaW5jZSBXcml0ZU1ha2VSdWxlIGVzY2FwZXMgJyQnLgorICAgIG1ha2VmaWxlU3RyZWFtIDw8ICIjU3VwcHJlc3MgZGlzcGxheSBvZiBleGVjdXRlZCBjb21tYW5kcy5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAiJChWRVJCT1NFKS5TSUxFTlQ6XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgfQogCiAgIC8vIFdvcmstYXJvdW5kIGZvciBtYWtlcyB0aGF0IGRyb3AgcnVsZXMgdGhhdCBoYXZlIG5vIGRlcGVuZGVuY2llcwpAQCAtOTc0LDExICs5NTAsMTIgQEAKICAgICAgIHN0ZDo6c3RyaW5nIGxhdW5jaGVyOwogICAgICAgLy8gU2hvcnQtY2lyY3VpdCBpZiB0aGVyZSBpcyBubyBsYXVuY2hlci4KICAgICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkdldFJ1bGVMYXVuY2hlcih0YXJnZXQsICJSVUxFX0xBVU5DSF9DVVNUT00iKTsKLSAgICAgIGlmICh2YWwgJiYgKnZhbCkgeworICAgICAgaWYgKGNtTm9uZW1wdHkodmFsKSkgewogICAgICAgICAvLyBFeHBhbmQgcnVsZSB2YXJpYWJsZXMgcmVmZXJlbmNlZCBpbiB0aGUgZ2l2ZW4gbGF1bmNoZXIgY29tbWFuZC4KICAgICAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgICAgICB2YXJzLkNNVGFyZ2V0TmFtZSA9IHRhcmdldC0+R2V0TmFtZSgpLmNfc3RyKCk7Ci0gICAgICAgIHZhcnMuQ01UYXJnZXRUeXBlID0gY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGFyZ2V0LT5HZXRUeXBlKCkpOworICAgICAgICB2YXJzLkNNVGFyZ2V0VHlwZSA9CisgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGFyZ2V0LT5HZXRUeXBlKCkpLmNfc3RyKCk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzID0gY2NnLkdldE91dHB1dHMoKTsKICAgICAgICAgaWYgKCFvdXRwdXRzLmVtcHR5KCkpIHsKQEAgLTEwNTcsMTAgKzEwMzQsOSBAQAogICAgIGNsZWFuZmlsZSArPSBmaWxlbmFtZTsKICAgfQogICBjbGVhbmZpbGUgKz0gIi5jbWFrZSI7Ci0gIHN0ZDo6c3RyaW5nIGNsZWFuZmlsZVBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNsZWFuZmlsZSk7Ci0gIGNtc3lzOjpvZnN0cmVhbSBmb3V0KGNsZWFuZmlsZVBhdGguY19zdHIoKSk7CisgIGNtc3lzOjpvZnN0cmVhbSBmb3V0KGNsZWFuZmlsZS5jX3N0cigpKTsKICAgaWYgKCFmb3V0KSB7Ci0gICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgIiArIGNsZWFuZmlsZVBhdGgpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb3VsZCBub3QgY3JlYXRlICIgKyBjbGVhbmZpbGUpOwogICB9CiAgIGlmICghZmlsZXMuZW1wdHkoKSkgewogICAgIGZvdXQgPDwgImZpbGUoUkVNT1ZFX1JFQ1VSU0VcbiI7CkBAIC0xMTAyLDEwICsxMDc4LDEwIEBACiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbGVhbkZpbGVzOwogICAvLyBMb29rIGZvciBhZGRpdGlvbmFsIGZpbGVzIHJlZ2lzdGVyZWQgZm9yIGNsZWFuaW5nIGluIHRoaXMgZGlyZWN0b3J5LgotICBpZiAoY29uc3QgY2hhciogcHJvcF92YWx1ZSA9CisgIGlmIChjbVByb3AgcHJvcF92YWx1ZSA9CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiQURESVRJT05BTF9DTEVBTl9GSUxFUyIpKSB7CiAgICAgY21FeHBhbmRMaXN0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgICAgICAgICAgICAgcHJvcF92YWx1ZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAqcHJvcF92YWx1ZSwgdGhpcywKICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSksCiAgICAgICAgICAgICAgICAgIGNsZWFuRmlsZXMpOwogICB9CkBAIC0xMTIwLDEwICsxMDk2LDkgQEAKICAgICBjbVN0ckNhdChjdXJyZW50QmluYXJ5RGlyLCAiL0NNYWtlRmlsZXMvY21ha2VfZGlyZWN0b3J5X2NsZWFuLmNtYWtlIik7CiAgIC8vIFdyaXRlIGNsZWFuIHNjcmlwdAogICB7Ci0gICAgc3RkOjpzdHJpbmcgY2xlYW5maWxlUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY2xlYW5maWxlKTsKLSAgICBjbXN5czo6b2ZzdHJlYW0gZm91dChjbGVhbmZpbGVQYXRoLmNfc3RyKCkpOworICAgIGNtc3lzOjpvZnN0cmVhbSBmb3V0KGNsZWFuZmlsZS5jX3N0cigpKTsKICAgICBpZiAoIWZvdXQpIHsKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb3VsZCBub3QgY3JlYXRlICIgKyBjbGVhbmZpbGVQYXRoKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb3VsZCBub3QgY3JlYXRlICIgKyBjbGVhbmZpbGUpOwogICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3V0IDw8ICJmaWxlKFJFTU9WRV9SRUNVUlNFXG4iOwpAQCAtMTE5NCw5ICsxMTY5LDggQEAKICAgICAgICAgICAgIGNvbG9yX25hbWUpOwogICAgICAgICAgIGlmIChwcm9ncmVzcykgewogICAgICAgICAgICAgY21kICs9ICItLXByb2dyZXNzLWRpcj0iOwotICAgICAgICAgICAgY21kICs9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwcm9ncmVzcy0+RGlyKSwKLSAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgICAgICAgIGNtZCArPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocHJvZ3Jlc3MtPkRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICAgICAgICAgIGNtZCArPSAiICI7CiAgICAgICAgICAgICBjbWQgKz0gIi0tcHJvZ3Jlc3MtbnVtPSI7CiAgICAgICAgICAgICBjbWQgKz0gcHJvZ3Jlc3MtPkFyZzsKQEAgLTEzMzEsMTAgKzEzMDUsOSBAQAogICAgIGludCByZXN1bHQ7CiAgICAgaWYgKCFmdGMtPkNvbXBhcmUoaW50ZXJuYWxEZXBlbmRGaWxlLCB0Z3RJbmZvLCAmcmVzdWx0KSB8fCByZXN1bHQgPCAwKSB7CiAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICBtc2cgPDwgIkRlcGVuZGVlIFwiIiA8PCB0Z3RJbmZvIDw8ICJcIiBpcyBuZXdlciB0aGFuIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgPDwgaW50ZXJuYWxEZXBlbmRGaWxlIDw8ICJcIi4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChjbVN0ckNhdCgiRGVwZW5kZWUgXCIiLCB0Z3RJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGlzIG5ld2VyIHRoYW4gZGVwZW5kZXIgXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxEZXBlbmRGaWxlLCAiXCIuXG4iKSk7CiAgICAgICB9CiAgICAgICBuZWVkUmVzY2FuRGVwZW5kSW5mbyA9IHRydWU7CiAgICAgfQpAQCAtMTM1MSwxMCArMTMyNCw5IEBACiAgICAgaWYgKCFmdGMtPkNvbXBhcmUoaW50ZXJuYWxEZXBlbmRGaWxlLCBkaXJJbmZvRmlsZSwgJnJlc3VsdCkgfHwKICAgICAgICAgcmVzdWx0IDwgMCkgewogICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKLSAgICAgICAgbXNnIDw8ICJEZXBlbmRlZSBcIiIgPDwgZGlySW5mb0ZpbGUgPDwgIlwiIGlzIG5ld2VyIHRoYW4gZGVwZW5kZXIgXCIiCi0gICAgICAgICAgICA8PCBpbnRlcm5hbERlcGVuZEZpbGUgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQobXNnLnN0cigpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRpckluZm9GaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGlzIG5ld2VyIHRoYW4gZGVwZW5kZXIgXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxEZXBlbmRGaWxlLCAiXCIuXG4iKSk7CiAgICAgICB9CiAgICAgICBuZWVkUmVzY2FuRGlySW5mbyA9IHRydWU7CiAgICAgfQpAQCAtMTUyMCwxMSArMTQ5Miw5IEBACiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGVwZW5kZWUpICYmCiAgICAgICAgICFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGRlcGVuZGVyKSkgewogICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKLSAgICAgICAgbXNnIDw8ICJEZWxldGluZyBwcmltYXJ5IGN1c3RvbSBjb21tYW5kIG91dHB1dCBcIiIgPDwgZGVwZW5kZWUKLSAgICAgICAgICAgIDw8ICJcIiBiZWNhdXNlIGFub3RoZXIgb3V0cHV0IFwiIiA8PCBkZXBlbmRlcgotICAgICAgICAgICAgPDwgIlwiIGRvZXMgbm90IGV4aXN0LiIgPDwgc3RkOjplbmRsOwotICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQobXNnLnN0cigpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KAorICAgICAgICAgICJEZWxldGluZyBwcmltYXJ5IGN1c3RvbSBjb21tYW5kIG91dHB1dCBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICJcIiBiZWNhdXNlIGFub3RoZXIgb3V0cHV0IFwiIiwgZGVwZW5kZXIsICJcIiBkb2VzIG5vdCBleGlzdC5cbiIpKTsKICAgICAgIH0KICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZGVwZW5kZWUpOwogICAgIH0KQEAgLTE1NzgsMTAgKzE1NDgsOCBAQAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbW1hbmRzOwogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHM7CiAKLSAgICAgIGNvbnN0IGNoYXIqIHRleHQgPSBndC0+R2V0UHJvcGVydHkoIkVjaG9TdHJpbmciKTsKLSAgICAgIGlmICghdGV4dCkgewotICAgICAgICB0ZXh0ID0gIlJ1bm5pbmcgZXh0ZXJuYWwgY29tbWFuZCAuLi4iOwotICAgICAgfQorICAgICAgY21Qcm9wIHAgPSBndC0+R2V0UHJvcGVydHkoIkVjaG9TdHJpbmciKTsKKyAgICAgIGNvbnN0IGNoYXIqIHRleHQgPSBwID8gcC0+Y19zdHIoKSA6ICJSdW5uaW5nIGV4dGVybmFsIGNvbW1hbmQgLi4uIjsKICAgICAgIGRlcGVuZHMucmVzZXJ2ZShndC0+R2V0VXRpbGl0aWVzKCkuc2l6ZSgpKTsKICAgICAgIGZvciAoQlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4gY29uc3QmIHUgOiBndC0+R2V0VXRpbGl0aWVzKCkpIHsKICAgICAgICAgZGVwZW5kcy5wdXNoX2JhY2sodS5WYWx1ZS5maXJzdCk7CkBAIC0xNjM2LDE1ICsxNjA0LDE0IEBACiAgIHsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ0NtZDsKICAgICBwcm9nQ21kIDw8ICIkKENNQUtFX0NPTU1BTkQpIC1FIGNtYWtlX3Byb2dyZXNzX3N0YXJ0ICI7Ci0gICAgcHJvZ0NtZCA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHByb2dyZXNzRGlyKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICBwcm9nQ21kIDw8IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChwcm9ncmVzc0RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogCiAgICAgc3RkOjpzdHJpbmcgcHJvZ3Jlc3NGaWxlID0gIi9DTWFrZUZpbGVzL3Byb2dyZXNzLm1hcmtzIjsKICAgICBzdGQ6OnN0cmluZyBwcm9ncmVzc0ZpbGVOYW1lRnVsbCA9IHRoaXMtPkNvbnZlcnRUb0Z1bGxQYXRoKHByb2dyZXNzRmlsZSk7CiAgICAgcHJvZ0NtZCA8PCAiICIKLSAgICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwcm9ncmVzc0ZpbGVOYW1lRnVsbCksCi0gICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocHJvZ3Jlc3NGaWxlTmFtZUZ1bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICBjb21tYW5kcy5wdXNoX2JhY2socHJvZ0NtZC5zdHIoKSk7CiAgIH0KICAgc3RkOjpzdHJpbmcgbWYyRGlyID0gIkNNYWtlRmlsZXMvTWFrZWZpbGUyIjsKQEAgLTE2NTQsOCArMTYyMSw4IEBACiAgIHsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ0NtZDsKICAgICBwcm9nQ21kIDw8ICIkKENNQUtFX0NPTU1BTkQpIC1FIGNtYWtlX3Byb2dyZXNzX3N0YXJ0ICI7IC8vICMgMAotICAgIHByb2dDbWQgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwcm9ncmVzc0RpciksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgcHJvZ0NtZCA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocHJvZ3Jlc3NEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICBwcm9nQ21kIDw8ICIgMCI7CiAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICB9CkBAIC0xNzg4LDcgKzE3NTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0RGlyKQogICB7CiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIHRlc3QgZGlyZWN0b3J5ICJzdGFydHMgd2l0aCIgdGhlIGJhc2UgZGlyZWN0b3J5OgotICAgIGlmICh0ZXN0RGlyLmZpbmQoYmFzZURpcikgIT0gMCkgeworICAgIGlmICghY21IYXNQcmVmaXgodGVzdERpciwgYmFzZURpcikpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gSWYgaXQgZG9lcywgdGhlbiBjaGVjayB0aGF0IGl0J3MgZWl0aGVyIHRoZSBzYW1lIHN0cmluZywgb3IgdGhhdCB0aGUKQEAgLTE4OTksMTMgKzE4NjYsMTMgQEAKICAgLy8gU3RvcmUgaW5jbHVkZSB0cmFuc2Zvcm0gcnVsZSBwcm9wZXJ0aWVzLiAgV3JpdGUgdGhlIGRpcmVjdG9yeQogICAvLyBydWxlcyBmaXJzdCBiZWNhdXNlIHRoZXkgbWF5IGJlIG92ZXJyaWRkZW4gYnkgbGF0ZXIgdGFyZ2V0IHJ1bGVzLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdHJhbnNmb3JtUnVsZXM7Ci0gIGlmIChjb25zdCBjaGFyKiB4Zm9ybSA9CisgIGlmIChjbVByb3AgeGZvcm0gPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIklNUExJQ0lUX0RFUEVORFNfSU5DTFVERV9UUkFOU0ZPUk0iKSkgewotICAgIGNtRXhwYW5kTGlzdCh4Zm9ybSwgdHJhbnNmb3JtUnVsZXMpOworICAgIGNtRXhwYW5kTGlzdCgqeGZvcm0sIHRyYW5zZm9ybVJ1bGVzKTsKICAgfQotICBpZiAoY29uc3QgY2hhciogeGZvcm0gPQorICBpZiAoY21Qcm9wIHhmb3JtID0KICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiSU1QTElDSVRfREVQRU5EU19JTkNMVURFX1RSQU5TRk9STSIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KHhmb3JtLCB0cmFuc2Zvcm1SdWxlcyk7CisgICAgY21FeHBhbmRMaXN0KCp4Zm9ybSwgdHJhbnNmb3JtUnVsZXMpOwogICB9CiAgIGlmICghdHJhbnNmb3JtUnVsZXMuZW1wdHkoKSkgewogICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAic2V0KENNQUtFX0lOQ0xVREVfVFJBTlNGT1JNU1xuIjsKQEAgLTE5NzIsNyArMTkzOSw3IEBACiB2b2lkIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpXcml0ZURpdmlkZXIoc3RkOjpvc3RyZWFtJiBvcykKIHsKICAgb3MgPDwgIiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLSAgICAgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKKyAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKIH0KIAogdm9pZCBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6V3JpdGVDTWFrZUFyZ3VtZW50KHN0ZDo6b3N0cmVhbSYgb3MsCkBAIC0xOTgwLDcgKzE5NDcsNyBAQAogewogICAvLyBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBzdHJlYW0gd2l0aCBlc2NhcGluZyB0byBnZXQgaXQgYmFjawogICAvLyBpbnRvIENNYWtlIHRocm91Z2ggdGhlIGxleGljYWwgc2Nhbm5lci4KLSAgb3MgPDwgIlwiIjsKKyAgb3MgPDwgJyInOwogICBmb3IgKGNoYXIgYyA6IHMpIHsKICAgICBpZiAoYyA9PSAnXFwnKSB7CiAgICAgICBvcyA8PCAiXFxcXCI7CkBAIC0xOTkwLDcgKzE5NTcsNyBAQAogICAgICAgb3MgPDwgYzsKICAgICB9CiAgIH0KLSAgb3MgPDwgIlwiIjsKKyAgb3MgPDwgJyInOwogfQogCiBzdGQ6OnN0cmluZyBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q29udmVydFRvUXVvdGVkT3V0cHV0UGF0aCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIGIvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKaW5kZXggNjhlZWIyOS4uMmIwNzk1MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKKysrIGIvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKQEAgLTQ2LDYgKzQ2LDEyIEBACiAgIC8vIGxvY2FsIGdlbmVyYXRvcnMgU3RhcnRPdXRwdXREaXJlY3RvcnkKICAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldEhvbWVSZWxhdGl2ZU91dHB1dFBhdGgoKTsKIAorICAvKioKKyAgICogQ29udmVydCBhIGZpbGUgcGF0aCB0byBhIE1ha2VmaWxlIHRhcmdldCBvciBkZXBlbmRlbmN5IHdpdGgKKyAgICogZXNjYXBpbmcgYW5kIHF1b3Rpbmcgc3VpdGFibGUgZm9yIHRoZSBnZW5lcmF0b3IncyBtYWtlIHRvb2wuCisgICAqLworICBzdGQ6OnN0cmluZyBDb252ZXJ0VG9NYWtlZmlsZVBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgpIGNvbnN0OworCiAgIC8vIFdyaXRlIG91dCBhIG1ha2UgcnVsZQogICB2b2lkIFdyaXRlTWFrZVJ1bGUoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgY2hhciogY29tbWVudCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CmluZGV4IDAyZTJjNmQuLjkwNzZlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CkBAIC00LDcgKzQsNyBAQAogCiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCi0jaW5jbHVkZSAiY21fZXhwYXQuaCIKKyNpbmNsdWRlIDxjbTNwL2V4cGF0Lmg+CiAKICNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5jeHgKaW5kZXggOWFhMzk5MS4uYWQ2MWFkMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CkBAIC0yLDEyICsyLDE0IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAorI2luY2x1ZGUgPGNtM3AvZXhwYXQuaD4KICNpbmNsdWRlIDxjdHlwZS5oPiAvLyBmb3IgaXNzcGFjZQogCi0jaW5jbHVkZSAiY21fZXhwYXQuaCIKLQogI2luY2x1ZGUgImNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5oIgpAQCAtMTgsNiArMjAsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogI2luY2x1ZGUgImNtWE1MUGFyc2VyLmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKQEAgLTUyLDE0ICs1NSwxMSBAQAogY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I6OmNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKAogICBjbUdsb2JhbEdlbmVyYXRvciogZ2csIGNtTWFrZWZpbGUqIG1mKQogICA6IGNtTG9jYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IoZ2csIG1mKQorICAsIEludGVybmFsKGNtOjptYWtlX3VuaXF1ZTxjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvckludGVybmFscz4odGhpcykpCiB7Ci0gIHRoaXMtPkludGVybmFsID0gbmV3IGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9ySW50ZXJuYWxzKHRoaXMpOwogfQogCi1jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6fmNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKCkKLXsKLSAgZGVsZXRlIHRoaXMtPkludGVybmFsOwotfQorY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I6On5jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogdm9pZCBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6QWRkSGVscGVyQ29tbWFuZHMoKQogewpAQCAtNjksOSArNjksOSBAQAogICAgIGlmIChsLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIHBhdGggPSBsLT5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIik7CisgICAgY21Qcm9wIHBhdGggPSBsLT5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIik7CiAgICAgaWYgKHBhdGgpIHsKLSAgICAgIHRoaXMtPlJlYWRBbmRTdG9yZUV4dGVybmFsR1VJRChsLT5HZXROYW1lKCksIHBhdGgpOworICAgICAgdGhpcy0+UmVhZEFuZFN0b3JlRXh0ZXJuYWxHVUlEKGwtPkdldE5hbWUoKSwgcGF0aC0+Y19zdHIoKSk7CiAgICAgfQogICB9CiAKQEAgLTIyNiw3ICsyMjYsNiBAQAogCiAgIHN0ZDo6c3RyaW5nIG1ha2VmaWxlSW4gPQogICAgIGNtU3RyQ2F0KHRoaXMtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSwgIi9DTWFrZUxpc3RzLnR4dCIpOwotICBtYWtlZmlsZUluID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChtYWtlZmlsZUluKTsKICAgaWYgKGNtU291cmNlRmlsZSogZmlsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTb3VyY2UobWFrZWZpbGVJbikpIHsKICAgICBpZiAoZmlsZS0+R2V0Q3VzdG9tQ29tbWFuZCgpKSB7CiAgICAgICByZXR1cm4gZmlsZTsKQEAgLTI1MiwxNSArMjUxLDE1IEBACiAgIHN0ZDo6c3RyaW5nIGFyZ0IgPSBjbVN0ckNhdCgiLUIiLCB0aGlzLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7CiAgIHN0ZDo6c3RyaW5nIHN0YW1wTmFtZSA9CiAgICAgY21TdHJDYXQodGhpcy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiL0NNYWtlRmlsZXMvZ2VuZXJhdGUuc3RhbXAiKTsKKyAgYm9vbCBzdGRQaXBlc1VURjggPSB0cnVlOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMgPQogICAgIGNtTWFrZVNpbmdsZUNvbW1hbmRMaW5lKHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksIGFyZ1MsIGFyZ0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1jaGVjay1zdGFtcC1maWxlIiwgc3RhbXBOYW1lIH0pOwogICBzdGQ6OnN0cmluZyBjb21tZW50ID0gY21TdHJDYXQoIkJ1aWxkaW5nIEN1c3RvbSBSdWxlICIsIG1ha2VmaWxlSW4pOwogICBjb25zdCBjaGFyKiBub193b3JraW5nX2RpcmVjdG9yeSA9IG51bGxwdHI7Ci0gIHN0ZDo6c3RyaW5nIGZ1bGxwYXRoU3RhbXBOYW1lID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzdGFtcE5hbWUpOwotICB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoZnVsbHBhdGhTdGFtcE5hbWUsIGxpc3RGaWxlcywgbWFrZWZpbGVJbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lcywgY29tbWVudC5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fd29ya2luZ19kaXJlY3RvcnksIHRydWUsIGZhbHNlKTsKKyAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgIHN0YW1wTmFtZSwgbGlzdEZpbGVzLCBtYWtlZmlsZUluLCBjb21tYW5kTGluZXMsIGNvbW1lbnQuY19zdHIoKSwKKyAgICBub193b3JraW5nX2RpcmVjdG9yeSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIiIsICIiLCBzdGRQaXBlc1VURjgpOwogICBpZiAoY21Tb3VyY2VGaWxlKiBmaWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZShtYWtlZmlsZUluKSkgewogICAgIC8vIEZpbmFsaXplIHRoZSBzb3VyY2UgZmlsZSBwYXRoIG5vdyBzaW5jZSB3ZSdyZSBhZGRpbmcgdGhpcyBhZnRlcgogICAgIC8vIHRoZSBnZW5lcmF0b3IgdmFsaWRhdGVkIGFsbCBwcm9qZWN0LW5hbWVkIHNvdXJjZXMuCkBAIC0yODQsNiArMjgzLDcgQEAKIH0KIGNtVlM3RmxhZ1RhYmxlIGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yRm9ydHJhbkZsYWdUYWJsZVtdID0gewogICB7ICJQcmVwcm9jZXNzIiwgImZwcCIsICJSdW4gUHJlcHJvY2Vzc29yIG9uIGZpbGVzIiwgInByZXByb2Nlc3NZZXMiLCAwIH0sCisgIHsgIlByZXByb2Nlc3MiLCAibm9mcHAiLCAiUnVuIFByZXByb2Nlc3NvciBvbiBmaWxlcyIsICJwcmVwcm9jZXNzTm8iLCAwIH0sCiAgIHsgIlN1cHByZXNzU3RhcnR1cEJhbm5lciIsICJub2xvZ28iLCAiU3VwcHJlc3NTdGFydHVwQmFubmVyIiwgInRydWUiLCAwIH0sCiAgIHsgIlNvdXJjZUZpbGVGb3JtYXQiLCAiZml4ZWQiLCAiVXNlIEZpeGVkIEZvcm1hdCIsICJmaWxlRm9ybWF0Rml4ZWQiLCAwIH0sCiAgIHsgIlNvdXJjZUZpbGVGb3JtYXQiLCAiZnJlZSIsICJVc2UgRnJlZSBGb3JtYXQiLCAiZmlsZUZvcm1hdEZyZWUiLCAwIH0sCkBAIC02NzIsNyArNjcyLDcgQEAKIAogICBpZiAodGhpcy0+Rm9ydHJhblByb2plY3QpIHsKICAgICBzd2l0Y2ggKGNtT3V0cHV0Q29udmVydGVyOjpHZXRGb3J0cmFuRm9ybWF0KAotICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKSkpIHsKKyAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX0ZPUk1BVCIpKSkgewogICAgICAgY2FzZSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhbkZvcm1hdEZpeGVkOgogICAgICAgICBmbGFncyArPSAiIC1maXhlZCI7CiAgICAgICAgIGJyZWFrOwpAQCAtNjgyLDYgKzY4MiwxOCBAQAogICAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgc3dpdGNoIChjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhblByZXByb2Nlc3MoCisgICAgICB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9QUkVQUk9DRVNTIikpKSB7CisgICAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2Vzczo6TmVlZGVkOgorICAgICAgICBmbGFncyArPSAiIC1mcHAiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5QcmVwcm9jZXNzOjpOb3ROZWVkZWQ6CisgICAgICAgIGZsYWdzICs9ICIgLW5vZnBwIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiAgIH0KIAogICAvLyBHZXQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIGZvciB0aGlzIGRpcmVjdG9yeS4KQEAgLTc3OCwxMiArNzkwLDExIEBACiAgIGZvdXQgPDwgIlx0XHRcdDxUb29sXG4iCiAgICAgICAgPDwgIlx0XHRcdFx0TmFtZT1cIiIgPDwgdG9vbCA8PCAiXCJcbiI7CiAgIGlmICh0aGlzLT5Gb3J0cmFuUHJvamVjdCkgewotICAgIGNvbnN0IGNoYXIqIHRhcmdldF9tb2RfZGlyID0KLSAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIkZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWSIpOworICAgIGNtUHJvcCB0YXJnZXRfbW9kX2RpciA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWSIpOwogICAgIHN0ZDo6c3RyaW5nIG1vZERpcjsKICAgICBpZiAodGFyZ2V0X21vZF9kaXIpIHsKICAgICAgIG1vZERpciA9IHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKAotICAgICAgICB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksIHRhcmdldF9tb2RfZGlyKTsKKyAgICAgICAgdGhpcy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAqdGFyZ2V0X21vZF9kaXIpOwogICAgIH0gZWxzZSB7CiAgICAgICBtb2REaXIgPSAiLiI7CiAgICAgfQpAQCAtOTM3LDE3ICs5NDgsMTcgQEAKICAgICAgICIgIiArIEdldEJ1aWxkVHlwZUxpbmtlckZsYWdzKCJDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTIiwgY29uZmlnTmFtZSk7CiAgIH0KIAotICBjb25zdCBjaGFyKiB0YXJnZXRMaW5rRmxhZ3MgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CisgIGNtUHJvcCB0YXJnZXRMaW5rRmxhZ3MgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CiAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKICAgICBleHRyYUxpbmtPcHRpb25zICs9ICIgIjsKLSAgICBleHRyYUxpbmtPcHRpb25zICs9IHRhcmdldExpbmtGbGFnczsKKyAgICBleHRyYUxpbmtPcHRpb25zICs9ICp0YXJnZXRMaW5rRmxhZ3M7CiAgIH0KICAgc3RkOjpzdHJpbmcgY29uZmlnVHlwZVVwcGVyID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZ05hbWUpOwogICBzdGQ6OnN0cmluZyBsaW5rRmxhZ3NDb25maWcgPSBjbVN0ckNhdCgiTElOS19GTEFHU18iLCBjb25maWdUeXBlVXBwZXIpOwogICB0YXJnZXRMaW5rRmxhZ3MgPSB0YXJnZXQtPkdldFByb3BlcnR5KGxpbmtGbGFnc0NvbmZpZyk7CiAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKICAgICBleHRyYUxpbmtPcHRpb25zICs9ICIgIjsKLSAgICBleHRyYUxpbmtPcHRpb25zICs9IHRhcmdldExpbmtGbGFnczsKKyAgICBleHRyYUxpbmtPcHRpb25zICs9ICp0YXJnZXRMaW5rRmxhZ3M7CiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0czsKQEAgLTEwMDYsOSArMTAxNyw4IEBACiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIHN0ZDo6c3RyaW5nIGxpYmZsYWdzOwotICAgICAgdGhpcy0+R2V0U3RhdGljTGlicmFyeUZsYWdzKGxpYmZsYWdzLCBjb25maWdUeXBlVXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWdOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQpOworICAgICAgdGhpcy0+R2V0U3RhdGljTGlicmFyeUZsYWdzKAorICAgICAgICBsaWJmbGFncywgY29uZmlnTmFtZSwgdGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWdOYW1lKSwgdGFyZ2V0KTsKICAgICAgIGlmICghbGliZmxhZ3MuZW1wdHkoKSkgewogICAgICAgICBmb3V0IDw8ICJcdFx0XHRcdEFkZGl0aW9uYWxPcHRpb25zPVwiIiA8PCBsaWJmbGFncyA8PCAiXCJcbiI7CiAgICAgICB9CkBAIC0xMjA2LDggKzEyMTYsOCBAQAogICBzdGQ6Om9zdHJlYW0mIGZvdXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiB7CiAgIGlmICh0aGlzLT5XaW5kb3dzQ0VQcm9qZWN0KSB7Ci0gICAgY29uc3QgY2hhciogZGlyID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiREVQTE9ZTUVOVF9SRU1PVEVfRElSRUNUT1JZIik7Ci0gICAgY29uc3QgY2hhciogYWRkaXRpb25hbEZpbGVzID0KKyAgICBjbVByb3AgZGlyID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiREVQTE9ZTUVOVF9SRU1PVEVfRElSRUNUT1JZIik7CisgICAgY21Qcm9wIGFkZGl0aW9uYWxGaWxlcyA9CiAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVMiKTsKIAogICAgIGlmIChkaXIgPT0gbnVsbHB0ciAmJiBhZGRpdGlvbmFsRmlsZXMgPT0gbnVsbHB0cikgewpAQCAtMTIxNywxNSArMTIyNywxNSBAQAogICAgIGZvdXQgPDwgIlx0XHRcdDxEZXBsb3ltZW50VG9vbFxuIgogICAgICAgICAgICAgIlx0XHRcdFx0Rm9yY2VEaXJ0eT1cIi0xXCJcbiIKICAgICAgICAgICAgICJcdFx0XHRcdFJlbW90ZURpcmVjdG9yeT1cIiIKLSAgICAgICAgIDw8IEdldEVzY2FwZWRQcm9wZXJ0eUlmVmFsdWVOb3ROVUxMKGRpcikKKyAgICAgICAgIDw8IEdldEVzY2FwZWRQcm9wZXJ0eUlmVmFsdWVOb3ROVUxMKGRpci0+Y19zdHIoKSkKICAgICAgICAgIDw8ICJcIlxuIgogICAgICAgICAgICAgIlx0XHRcdFx0UmVnaXN0ZXJPdXRwdXQ9XCIwXCJcbiIKICAgICAgICAgICAgICJcdFx0XHRcdEFkZGl0aW9uYWxGaWxlcz1cIiIKLSAgICAgICAgIDw8IEdldEVzY2FwZWRQcm9wZXJ0eUlmVmFsdWVOb3ROVUxMKGFkZGl0aW9uYWxGaWxlcykgPDwgIlwiLz5cbiI7CisgICAgICAgICA8PCBHZXRFc2NhcGVkUHJvcGVydHlJZlZhbHVlTm90TlVMTChhZGRpdGlvbmFsRmlsZXMtPmNfc3RyKCkpCisgICAgICAgICA8PCAiXCIvPlxuIjsKIAogICAgIGlmIChkaXIgIT0gbnVsbHB0cikgewotICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZXhlID0KLSAgICAgICAgZGlyICsgc3RkOjpzdHJpbmcoIlxcIikgKyB0YXJnZXQtPkdldEZ1bGxOYW1lKGNvbmZpZyk7CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCBleGUgPSAqZGlyICsgIlxcIiArIHRhcmdldC0+R2V0RnVsbE5hbWUoY29uZmlnKTsKIAogICAgICAgZm91dCA8PCAiXHRcdFx0PERlYnVnZ2VyVG9vbFxuIgogICAgICAgICAgICAgICAiXHRcdFx0XHRSZW1vdGVFeGVjdXRhYmxlPVwiIgpAQCAtMTMyMSw4ICsxMzMxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGliTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgdGhpcy0+TWFrZWZpbGUtPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6RXhjbHVkZUVtcHR5Q29uZmlnKTsKIAogICAvLyBXZSBtYXkgYmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgZ3JvdXBzIHRlbXBvcmFyaWx5LCBzbyBtYWtlIGEgY29weS4KICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VHcm91cD4gc291cmNlR3JvdXBzID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZUdyb3VwcygpOwpAQCAtMTQ0OCwxNCArMTQ1OCwxNSBAQAogICAgICAgbmVlZGZjID0gdHJ1ZTsKICAgICB9CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9GTEFHUygiQ09NUElMRV9GTEFHUyIpOwotICAgIGlmIChjb25zdCBjaGFyKiBjZmxhZ3MgPSBzZi5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgewotICAgICAgZmMuQ29tcGlsZUZsYWdzID0gZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjZmxhZ3MsIENPTVBJTEVfRkxBR1MpOworICAgIGlmIChjbVByb3AgY2ZsYWdzID0gc2YuR2V0UHJvcGVydHkoQ09NUElMRV9GTEFHUykpIHsKKyAgICAgIGZjLkNvbXBpbGVGbGFncyA9IGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNmbGFncywgQ09NUElMRV9GTEFHUyk7CiAgICAgICBuZWVkZmMgPSB0cnVlOwogICAgIH0KICAgICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX09QVElPTlMoIkNPTVBJTEVfT1BUSU9OUyIpOwotICAgIGlmIChjb25zdCBjaGFyKiBjb3B0aW9ucyA9IHNmLkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKKyAgICBpZiAoY21Qcm9wIGNvcHRpb25zID0gc2YuR2V0UHJvcGVydHkoQ09NUElMRV9PUFRJT05TKSkgewogICAgICAgbGctPkFwcGVuZENvbXBpbGVPcHRpb25zKAotICAgICAgICBmYy5Db21waWxlRmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOworICAgICAgICBmYy5Db21waWxlRmxhZ3MsCisgICAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvcHRpb25zLCBDT01QSUxFX09QVElPTlMpKTsKICAgICAgIG5lZWRmYyA9IHRydWU7CiAgICAgfQogICAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgY29tcGlsZSBvcHRpb25zLgpAQCAtMTQ3NSw4ICsxNDg2LDIyIEBACiAgICAgfQogCiAgICAgaWYgKGxnLT5Gb3J0cmFuUHJvamVjdCkgeworICAgICAgc3dpdGNoIChjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhblByZXByb2Nlc3MoCisgICAgICAgIHNmLkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9QUkVQUk9DRVNTIikpKSB7CisgICAgICAgIGNhc2UgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5QcmVwcm9jZXNzOjpOZWVkZWQ6CisgICAgICAgICAgZmMuQ29tcGlsZUZsYWdzID0gY21TdHJDYXQoIi1mcHAgIiwgZmMuQ29tcGlsZUZsYWdzKTsKKyAgICAgICAgICBuZWVkZmMgPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2Vzczo6Tm90TmVlZGVkOgorICAgICAgICAgIGZjLkNvbXBpbGVGbGFncyA9IGNtU3RyQ2F0KCItbm9mcHAgIiwgZmMuQ29tcGlsZUZsYWdzKTsKKyAgICAgICAgICBuZWVkZmMgPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCiAgICAgICBzd2l0Y2ggKGNtT3V0cHV0Q29udmVydGVyOjpHZXRGb3J0cmFuRm9ybWF0KAotICAgICAgICBzZi5HZXRQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKSkpIHsKKyAgICAgICAgc2YuR2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX0ZPUk1BVCIpKSkgewogICAgICAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuRm9ybWF0Rml4ZWQ6CiAgICAgICAgICAgZmMuQ29tcGlsZUZsYWdzID0gIi1maXhlZCAiICsgZmMuQ29tcGlsZUZsYWdzOwogICAgICAgICAgIG5lZWRmYyA9IHRydWU7CkBAIC0xNDkwLDMxICsxNTE1LDMwIEBACiAgICAgICB9CiAgICAgfQogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfREVGSU5JVElPTlMoIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKLSAgICBpZiAoY29uc3QgY2hhciogY2RlZnMgPSBzZi5HZXRQcm9wZXJ0eShDT01QSUxFX0RFRklOSVRJT05TKSkgewotICAgICAgZmMuQ29tcGlsZURlZnMgPSBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNkZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKTsKKyAgICBpZiAoY21Qcm9wIGNkZWZzID0gc2YuR2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKKyAgICAgIGZjLkNvbXBpbGVEZWZzID0gZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpOwogICAgICAgbmVlZGZjID0gdHJ1ZTsKICAgICB9CiAgICAgc3RkOjpzdHJpbmcgZGVmUHJvcE5hbWUgPSBjbVN0ckNhdCgiQ09NUElMRV9ERUZJTklUSU9OU18iLCBjb25maWdVcHBlcik7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNjZGVmcyA9IHNmLkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgeworICAgIGlmIChjbVByb3AgY2NkZWZzID0gc2YuR2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgICBmYy5Db21waWxlRGVmc0NvbmZpZyA9Ci0gICAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY2NkZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKTsKKyAgICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2NkZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKTsKICAgICAgIG5lZWRmYyA9IHRydWU7CiAgICAgfQogCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgSU5DTFVERV9ESVJFQ1RPUklFUygiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwotICAgIGlmIChjb25zdCBjaGFyKiBjaW5jcyA9IHNmLkdldFByb3BlcnR5KElOQ0xVREVfRElSRUNUT1JJRVMpKSB7Ci0gICAgICBmYy5JbmNsdWRlRGlycyA9IGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY2luY3MsIElOQ0xVREVfRElSRUNUT1JJRVMpOworICAgIGlmIChjbVByb3AgY2luY3MgPSBzZi5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgeworICAgICAgZmMuSW5jbHVkZURpcnMgPSBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjaW5jcywgSU5DTFVERV9ESVJFQ1RPUklFUyk7CiAgICAgICBuZWVkZmMgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIENoZWNrIGZvciBleHRyYSBvYmplY3QtZmlsZSBkZXBlbmRlbmNpZXMuCi0gICAgaWYgKGNvbnN0IGNoYXIqIGRlcHMgPSBzZi5HZXRQcm9wZXJ0eSgiT0JKRUNUX0RFUEVORFMiKSkgewotICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMgPSBjbUV4cGFuZGVkTGlzdChkZXBzKTsKKyAgICBpZiAoY21Qcm9wIGRlcHMgPSBzZi5HZXRQcm9wZXJ0eSgiT0JKRUNUX0RFUEVORFMiKSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMgPSBjbUV4cGFuZGVkTGlzdCgqZGVwcyk7CiAgICAgICBjb25zdCBjaGFyKiBzZXAgPSAiIjsKLSAgICAgIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRvciBqID0gZGVwZW5kcy5iZWdpbigpOwotICAgICAgICAgICBqICE9IGRlcGVuZHMuZW5kKCk7ICsraikgeworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZCA6IGRlcGVuZHMpIHsKICAgICAgICAgZmMuQWRkaXRpb25hbERlcHMgKz0gc2VwOwotICAgICAgICBmYy5BZGRpdGlvbmFsRGVwcyArPSBsZy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aCgqaik7CisgICAgICAgIGZjLkFkZGl0aW9uYWxEZXBzICs9IGxnLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKGQpOwogICAgICAgICBzZXAgPSAiOyI7CiAgICAgICAgIG5lZWRmYyA9IHRydWU7CiAgICAgICB9CkBAIC0xNTI0LDcgKzE1NDgsNyBAQAogICAgIC8vIElmIEhFQURFUl9GSUxFX09OTFkgaXMgc2V0LCB3ZSBtdXN0IHN1cHByZXNzIHRoaXMgZ2VuZXJhdGlvbiBpbgogICAgIC8vIHRoZSBwcm9qZWN0IGZpbGUKICAgICBmYy5FeGNsdWRlZEZyb21CdWlsZCA9IHNmLkdldFByb3BlcnR5QXNCb29sKCJIRUFERVJfRklMRV9PTkxZIikgfHwKLSAgICAgICFjbUNvbnRhaW5zKGFjcy5Db25maWdzLCBjaSkgfHwKKyAgICAgICFjbTo6Y29udGFpbnMoYWNzLkNvbmZpZ3MsIGNpKSB8fAogICAgICAgKGd0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiVU5JVFlfQlVJTEQiKSAmJgogICAgICAgIHNmLkdldFByb3BlcnR5KCJVTklUWV9TT1VSQ0VfRklMRSIpICYmCiAgICAgICAgIXNmLkdldFByb3BlcnR5QXNCb29sKCJTS0lQX1VOSVRZX0JVSUxEX0lOQ0xVU0lPTiIpKTsKQEAgLTE1NTYsOCArMTU4MCw5IEBACiBzdGQ6OnN0cmluZyBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Q29tcHV0ZUxvbmdlc3RPYmplY3REaXJlY3RvcnkoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQpIGNvbnN0CiB7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOwotICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlncyk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgIGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBsZW5ndGggY29uZmlndXJhdGlvbiBuYW1lLgogICBzdGQ6OnN0cmluZyBjb25maWdfbWF4OwpAQCAtMTg3NywyMCArMTkwMiwyMCBAQAogewogICAvLyBpZiB3ZSBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgU291cmNlIGNvZGUgY29udHJvbCB0YWdzCiAgIC8vIHRoZW4gYWRkIHRoYXQgdG8gdGhlIHByb2plY3QKLSAgY29uc3QgY2hhciogdnNQcm9qZWN0bmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19QUk9KRUNUTkFNRSIpOwotICBjb25zdCBjaGFyKiB2c0xvY2FscGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19MT0NBTFBBVEgiKTsKLSAgY29uc3QgY2hhciogdnNQcm92aWRlciA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19QUk9WSURFUiIpOworICBjbVByb3AgdnNQcm9qZWN0bmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19QUk9KRUNUTkFNRSIpOworICBjbVByb3AgdnNMb2NhbHBhdGggPSB0YXJnZXQtPkdldFByb3BlcnR5KCJWU19TQ0NfTE9DQUxQQVRIIik7CisgIGNtUHJvcCB2c1Byb3ZpZGVyID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfU0NDX1BST1ZJREVSIik7CiAKICAgaWYgKHZzUHJvdmlkZXIgJiYgdnNMb2NhbHBhdGggJiYgdnNQcm9qZWN0bmFtZSkgewogICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgICBmb3V0IDw8ICJcdFNjY1Byb2plY3ROYW1lPVwiIiA8PCB2c1Byb2plY3RuYW1lIDw8ICJcIlxuIgotICAgICAgICAgPDwgIlx0U2NjTG9jYWxQYXRoPVwiIiA8PCB2c0xvY2FscGF0aCA8PCAiXCJcbiIKLSAgICAgICAgIDw8ICJcdFNjY1Byb3ZpZGVyPVwiIiA8PCB2c1Byb3ZpZGVyIDw8ICJcIlxuIjsKKyAgICBmb3V0IDw8ICJcdFNjY1Byb2plY3ROYW1lPVwiIiA8PCAqdnNQcm9qZWN0bmFtZSA8PCAiXCJcbiIKKyAgICAgICAgIDw8ICJcdFNjY0xvY2FsUGF0aD1cIiIgPDwgKnZzTG9jYWxwYXRoIDw8ICJcIlxuIgorICAgICAgICAgPDwgIlx0U2NjUHJvdmlkZXI9XCIiIDw8ICp2c1Byb3ZpZGVyIDw8ICJcIlxuIjsKICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotICAgIGNvbnN0IGNoYXIqIHZzQXV4UGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19BVVhQQVRIIik7CisgICAgY21Qcm9wIHZzQXV4UGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19BVVhQQVRIIik7CiAgICAgaWYgKHZzQXV4UGF0aCkgewotICAgICAgZm91dCA8PCAiXHRTY2NBdXhQYXRoPVwiIiA8PCB2c0F1eFBhdGggPDwgIlwiXG4iOworICAgICAgZm91dCA8PCAiXHRTY2NBdXhQYXRoPVwiIiA8PCAqdnNBdXhQYXRoIDw8ICJcIlxuIjsKICAgICB9CiAgIH0KIH0KQEAgLTE5MDgsMTAgKzE5MzMsOCBAQAogICAgICAgIDw8ICJcdFByb2plY3RDcmVhdG9yPVwiSW50ZWwgRm9ydHJhblwiXG4iCiAgICAgICAgPDwgIlx0VmVyc2lvbj1cIiIgPDwgZ2ctPkdldEludGVsUHJvamVjdFZlcnNpb24oKSA8PCAiXCJcbiI7CiAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICBjb25zdCBjaGFyKiBrZXl3b3JkID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfS0VZV09SRCIpOwotICBpZiAoIWtleXdvcmQpIHsKLSAgICBrZXl3b3JkID0gIkNvbnNvbGUgQXBwbGljYXRpb24iOwotICB9CisgIGNtUHJvcCBwID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfS0VZV09SRCIpOworICBjb25zdCBjaGFyKiBrZXl3b3JkID0gcCA/IHAtPmNfc3RyKCkgOiAiQ29uc29sZSBBcHBsaWNhdGlvbiI7CiAgIGNvbnN0IGNoYXIqIHByb2plY3RUeXBlID0gMDsKICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKQEAgLTE5NzAsMjAgKzE5OTMsMTYgQEAKICAgICAgICA8PCAiXHRQcm9qZWN0VHlwZT1cIlZpc3VhbCBDKytcIlxuIjsKICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgIGZvdXQgPDwgIlx0VmVyc2lvbj1cIiIgPDwgKGdnLT5HZXRWZXJzaW9uKCkgLyAxMCkgPDwgIi4wMFwiXG4iOwotICBjb25zdCBjaGFyKiBwcm9qTGFiZWwgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJQUk9KRUNUX0xBQkVMIik7Ci0gIGlmICghcHJvakxhYmVsKSB7Ci0gICAgcHJvakxhYmVsID0gbGliTmFtZS5jX3N0cigpOwotICB9Ci0gIGNvbnN0IGNoYXIqIGtleXdvcmQgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJWU19LRVlXT1JEIik7Ci0gIGlmICgha2V5d29yZCkgewotICAgIGtleXdvcmQgPSAiV2luMzJQcm9qIjsKLSAgfQorICBjbVByb3AgcCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlBST0pFQ1RfTEFCRUwiKTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgcHJvakxhYmVsID0gcCA/ICpwIDogbGliTmFtZTsKKyAgcCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0tFWVdPUkQiKTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcga2V5d29yZCA9IHAgPyAqcCA6ICJXaW4zMlByb2oiOwogICBmb3V0IDw8ICJcdE5hbWU9XCIiIDw8IHByb2pMYWJlbCA8PCAiXCJcbiI7CiAgIGZvdXQgPDwgIlx0UHJvamVjdEdVSUQ9XCJ7IiA8PCBnZy0+R2V0R1VJRChsaWJOYW1lKSA8PCAifVwiXG4iOwogICB0aGlzLT5Xcml0ZVByb2plY3RTQ0MoZm91dCwgdGFyZ2V0KTsKLSAgaWYgKGNvbnN0IGNoYXIqIHRhcmdldEZyYW1ld29ya1ZlcnNpb24gPQorICBpZiAoY21Qcm9wIHRhcmdldEZyYW1ld29ya1ZlcnNpb24gPQogICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJWU19ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OIikpIHsKLSAgICBmb3V0IDw8ICJcdFRhcmdldEZyYW1ld29ya1ZlcnNpb249XCIiIDw8IHRhcmdldEZyYW1ld29ya1ZlcnNpb24gPDwgIlwiXG4iOworICAgIGZvdXQgPDwgIlx0VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj1cIiIgPDwgKnRhcmdldEZyYW1ld29ya1ZlcnNpb24gPDwgIlwiXG4iOwogICB9CiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgZm91dCA8PCAiXHRLZXl3b3JkPVwiIiA8PCBrZXl3b3JkIDw8ICJcIj5cbiIKQEAgLTIwMTAsNyArMjAyOSw3IEBACiAgIGZvdXQgPDwgIlx0PEdsb2JhbHM+XG4iOwogCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGtleSA6IHRhcmdldC0+R2V0UHJvcGVydHlLZXlzKCkpIHsKLSAgICBpZiAoa2V5LmZpbmQoIlZTX0dMT0JBTF8iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChrZXksICJWU19HTE9CQUxfIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBrZXkuc3Vic3RyKDEwKTsKICAgICAgIGlmICghbmFtZS5lbXB0eSgpKSB7CiAgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oIGIvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgKaW5kZXggNzQ1NzY2Yy4uOGI5YjhhZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIApAQCAtNDgsNiArNDksMTAgQEAKIAogICB2aXJ0dWFsIH5jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcigpOwogCisgIGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKGNvbnN0IGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yJikgPSBkZWxldGU7CisgIGNvbnN0IGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yJiBvcGVyYXRvcj0oCisgICAgY29uc3QgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3ImKSA9IGRlbGV0ZTsKKwogICB2b2lkIEFkZEhlbHBlckNvbW1hbmRzKCkgb3ZlcnJpZGU7CiAKICAgLyoqCkBAIC0xNDQsNyArMTQ5LDcgQEAKIAogICBib29sIEZvcnRyYW5Qcm9qZWN0OwogICBib29sIFdpbmRvd3NDRVByb2plY3Q7Ci0gIGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9ySW50ZXJuYWxzKiBJbnRlcm5hbDsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9ySW50ZXJuYWxzPiBJbnRlcm5hbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuY3h4CmluZGV4IDhkNTA4OTguLmViZDRmOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHgKQEAgLTEwMiwxMCArMTAyLDEyIEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19vdXRwdXQ7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwZW5kczsKKyAgYm9vbCBzdGRQaXBlc1VURjggPSB0cnVlOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kcyA9IGNtTWFrZVNpbmdsZUNvbW1hbmRMaW5lKAogICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksICItRSIsICJtYWtlX2RpcmVjdG9yeSIsIGltcERpciB9KTsKICAgcGNjLnJlc2V0KG5ldyBjbUN1c3RvbUNvbW1hbmQobm9fb3V0cHV0LCBub19ieXByb2R1Y3RzLCBub19kZXBlbmRzLCBjb21tYW5kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSwgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkUGlwZXNVVEY4KSk7CiAgIHBjYy0+U2V0RXNjYXBlT2xkU3R5bGUoZmFsc2UpOwogICBwY2MtPlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CiAgIHJldHVybiBwY2M7CkBAIC0xNTQsOCArMTU2LDcgQEAKICAgICBzY3JpcHQgKz0gbmV3bGluZTsKICAgICBuZXdsaW5lID0gbmV3bGluZV90ZXh0OwogICAgIHNjcmlwdCArPSAiY2QgIjsKLSAgICBzY3JpcHQgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh3b3JraW5nRGlyZWN0b3J5KSwgU0hFTEwpOworICAgIHNjcmlwdCArPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQod29ya2luZ0RpcmVjdG9yeSwgU0hFTEwpOwogICAgIHNjcmlwdCArPSBjaGVja19lcnJvcjsKIAogICAgIC8vIENoYW5nZSB0aGUgd29ya2luZyBkcml2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1hY2hPLmN4eCBiL1NvdXJjZS9jbU1hY2hPLmN4eAppbmRleCA2Y2JlZDM2Li41MzExMmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWNoTy5jeHgKKysrIGIvU291cmNlL2NtTWFjaE8uY3h4CkBAIC03OSwxNCArNzksMTQgQEAKICAgLy8gQSBsb2FkX2NvbW1hbmQgYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEKICAgc3RydWN0IFJhd0xvYWRDb21tYW5kCiAgIHsKLSAgICB1aW50MzJfdCB0eXBlKGNvbnN0IGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHMqIG0pIGNvbnN0CisgICAgdWludDMyX3QgdHlwZShjb25zdCBjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzJiBtKSBjb25zdAogICAgIHsKICAgICAgIGlmICh0aGlzLT5Mb2FkQ29tbWFuZC5zaXplKCkgPCBzaXplb2YobG9hZF9jb21tYW5kKSkgewogICAgICAgICByZXR1cm4gMDsKICAgICAgIH0KICAgICAgIGNvbnN0IGxvYWRfY29tbWFuZCogY21kID0KICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBsb2FkX2NvbW1hbmQqPigmdGhpcy0+TG9hZENvbW1hbmRbMF0pOwotICAgICAgcmV0dXJuIG0tPnN3YXAoY21kLT5jbWQpOworICAgICAgcmV0dXJuIG0uc3dhcChjbWQtPmNtZCk7CiAgICAgfQogICAgIHN0ZDo6dmVjdG9yPGNoYXI+IExvYWRDb21tYW5kOwogICB9OwpAQCAtMTg2LDggKzE4NiwxMSBAQAogewogcHVibGljOgogICBjbU1hY2hPSW50ZXJuYWwoY29uc3QgY2hhciogZm5hbWUpOworICBjbU1hY2hPSW50ZXJuYWwoY29uc3QgY21NYWNoT0ludGVybmFsJikgPSBkZWxldGU7CiAgIH5jbU1hY2hPSW50ZXJuYWwoKTsKIAorICBjbU1hY2hPSW50ZXJuYWwmIG9wZXJhdG9yPShjb25zdCBjbU1hY2hPSW50ZXJuYWwmKSA9IGRlbGV0ZTsKKwogICAvLyByZWFkIGEgTWFjaC1PIGZpbGUKICAgYm9vbCByZWFkX21hY2hfbyh1aW50MzJfdCBmaWxlX29mZnNldCk7CiAKQEAgLTIwMiw3ICsyMDUsNyBAQAogICBzdGQ6OnN0cmluZyBFcnJvck1lc3NhZ2U7CiAKICAgLy8gdGhlIGxpc3Qgb2YgTWFjaC1PJ3MKLSAgc3RkOjp2ZWN0b3I8Y21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcyo+IE1hY2hPTGlzdDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHM+PiBNYWNoT0xpc3Q7CiB9OwogCiBjbU1hY2hPSW50ZXJuYWw6OmNtTWFjaE9JbnRlcm5hbChjb25zdCBjaGFyKiBmbmFtZSkKQEAgLTI2MCwxMiArMjYzLDcgQEAKICAgfQogfQogCi1jbU1hY2hPSW50ZXJuYWw6On5jbU1hY2hPSW50ZXJuYWwoKQotewotICBmb3IgKGF1dG8mIGkgOiB0aGlzLT5NYWNoT0xpc3QpIHsKLSAgICBkZWxldGUgaTsKLSAgfQotfQorY21NYWNoT0ludGVybmFsOjp+Y21NYWNoT0ludGVybmFsKCkgPSBkZWZhdWx0OwogCiBib29sIGNtTWFjaE9JbnRlcm5hbDo6cmVhZF9tYWNoX28odWludDMyX3QgZmlsZV9vZmZzZXQpCiB7CkBAIC0yODAsMjUgKzI3OCwyNSBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHMqIGYgPSBudWxscHRyOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcz4gZjsKICAgaWYgKG1hZ2ljID09IE1IX0NJR0FNIHx8IG1hZ2ljID09IE1IX01BR0lDKSB7CiAgICAgYm9vbCBzd2FwID0gZmFsc2U7CiAgICAgaWYgKG1hZ2ljID09IE1IX0NJR0FNKSB7CiAgICAgICBzd2FwID0gdHJ1ZTsKICAgICB9Ci0gICAgZiA9IG5ldyBjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzSW1wbDxtYWNoX2hlYWRlcj4oc3dhcCk7CisgICAgZiA9IGNtOjptYWtlX3VuaXF1ZTxjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzSW1wbDxtYWNoX2hlYWRlcj4+KHN3YXApOwogICB9IGVsc2UgaWYgKG1hZ2ljID09IE1IX0NJR0FNXzY0IHx8IG1hZ2ljID09IE1IX01BR0lDXzY0KSB7CiAgICAgYm9vbCBzd2FwID0gZmFsc2U7CiAgICAgaWYgKG1hZ2ljID09IE1IX0NJR0FNXzY0KSB7CiAgICAgICBzd2FwID0gdHJ1ZTsKICAgICB9Ci0gICAgZiA9IG5ldyBjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzSW1wbDxtYWNoX2hlYWRlcl82ND4oc3dhcCk7CisgICAgZiA9CisgICAgICBjbTo6bWFrZV91bmlxdWU8Y21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kc0ltcGw8bWFjaF9oZWFkZXJfNjQ+Pihzd2FwKTsKICAgfQogCiAgIGlmIChmICYmIGYtPnJlYWRfbWFjaF9vKHRoaXMtPkZpbikpIHsKLSAgICB0aGlzLT5NYWNoT0xpc3QucHVzaF9iYWNrKGYpOworICAgIHRoaXMtPk1hY2hPTGlzdC5wdXNoX2JhY2soc3RkOjptb3ZlKGYpKTsKICAgfSBlbHNlIHsKLSAgICBkZWxldGUgZjsKICAgICB0aGlzLT5FcnJvck1lc3NhZ2UgPSAiRmFpbGVkIHRvIHJlYWQgTWFjaC1PIGhlYWRlci4iOwogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtMzMzLDExICszMzEsMTIgQEAKICAgfQogCiAgIC8vIGdyYWIgdGhlIGZpcnN0IE1hY2gtTyBhbmQgZ2V0IHRoZSBpbnN0YWxsIG5hbWUgZnJvbSB0aGF0IG9uZQotICBjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzKiBtYWNobyA9IHRoaXMtPkludGVybmFsLT5NYWNoT0xpc3RbMF07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzPiYgbWFjaG8gPQorICAgIHRoaXMtPkludGVybmFsLT5NYWNoT0xpc3RbMF07CiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFjaG8tPmxvYWRfY29tbWFuZHMoKS5zaXplKCk7IGkrKykgewogICAgIGNvbnN0IGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHM6OlJhd0xvYWRDb21tYW5kJiBjbWQgPQogICAgICAgbWFjaG8tPmxvYWRfY29tbWFuZHMoKVtpXTsKLSAgICB1aW50MzJfdCBsY19jbWQgPSBjbWQudHlwZShtYWNobyk7CisgICAgdWludDMyX3QgbGNfY21kID0gY21kLnR5cGUoKm1hY2hvKTsKICAgICBpZiAobGNfY21kID09IExDX0lEX0RZTElCIHx8IGxjX2NtZCA9PSBMQ19MT0FEX1dFQUtfRFlMSUIgfHwKICAgICAgICAgbGNfY21kID09IExDX0xPQURfRFlMSUIpIHsKICAgICAgIGlmIChzaXplb2YoZHlsaWJfY29tbWFuZCkgPCBjbWQuTG9hZENvbW1hbmQuc2l6ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWNyb0NvbW1hbmQuY3h4IGIvU291cmNlL2NtTWFjcm9Db21tYW5kLmN4eAppbmRleCAwYjBkOWFjLi5jODhiMzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWNyb0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbU1hY3JvQ29tbWFuZC5jeHgKQEAgLTgsOCArOCw3IEBACiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtRnVuY3Rpb25CbG9ja2VyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZS5jeHggYi9Tb3VyY2UvY21NYWtlZmlsZS5jeHgKaW5kZXggMTg2ODlmYS4uYWNhNDBmYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGUuY3h4CisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlLmN4eApAQCAtMTgsMjEgKzE4LDIzIEBACiAjaW5jbHVkZSA8Y20vb3B0aW9uYWw+CiAjaW5jbHVkZSA8Y20vdmVjdG9yPgogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KKworI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3dyaXRlci5oIgogI2luY2x1ZGUgImNtX3N5c19zdGF0LmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUV4cGFuZGVkQ29tbWFuZEFyZ3VtZW50LmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSAiY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUZTUGVybWlzc2lvbnMuaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrUG9vbC5oIgogI2luY2x1ZGUgImNtRnVuY3Rpb25CbG9ja2VyLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCkBAIC02MSwxMSArNjMsMTQgQEAKICNpbmNsdWRlICJjbWFrZS5oIgogCiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAorIyAgaW5jbHVkZSAiY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEuaCIKICMgIGluY2x1ZGUgImNtVmFyaWFibGVXYXRjaC5oIgogI2VuZGlmCiAKIGNsYXNzIGNtTWVzc2VuZ2VyOwogCit1c2luZyBuYW1lc3BhY2UgY21GU1Blcm1pc3Npb25zOworCiBjbURpcmVjdG9yeUlkOjpjbURpcmVjdG9yeUlkKHN0ZDo6c3RyaW5nIHMpCiAgIDogU3RyaW5nKHN0ZDo6bW92ZShzKSkKIHsKQEAgLTgwLDcgKzg1LDYgQEAKIHsKICAgdGhpcy0+SXNTb3VyY2VGaWxlVHJ5Q29tcGlsZSA9IGZhbHNlOwogCi0gIHRoaXMtPldhcm5VbnVzZWQgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFdhcm5VbnVzZWQoKTsKICAgdGhpcy0+Q2hlY2tTeXN0ZW1WYXJzID0gdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRDaGVja1N5c3RlbVZhcnMoKTsKIAogICB0aGlzLT5TdXBwcmVzc1NpZGVFZmZlY3RzID0gZmFsc2U7CkBAIC0zNzMsMTkgKzM3NywzMCBAQAogY2xhc3MgY21NYWtlZmlsZUNhbGwKIHsKIHB1YmxpYzoKLSAgY21NYWtlZmlsZUNhbGwoY21NYWtlZmlsZSogbWYsIGNtQ29tbWFuZENvbnRleHQgY29uc3QmIGNjLAorICBjbU1ha2VmaWxlQ2FsbChjbU1ha2VmaWxlKiBtZiwgY21MaXN0RmlsZUZ1bmN0aW9uIGNvbnN0JiBsZmYsCiAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiAgICAgOiBNYWtlZmlsZShtZikKICAgewogICAgIGNtTGlzdEZpbGVDb250ZXh0IGNvbnN0JiBsZmMgPSBjbUxpc3RGaWxlQ29udGV4dDo6RnJvbUNvbW1hbmRDb250ZXh0KAotICAgICAgY2MsIHRoaXMtPk1ha2VmaWxlLT5TdGF0ZVNuYXBzaG90LkdldEV4ZWN1dGlvbkxpc3RGaWxlKCkpOworICAgICAgbGZmLCB0aGlzLT5NYWtlZmlsZS0+U3RhdGVTbmFwc2hvdC5HZXRFeGVjdXRpb25MaXN0RmlsZSgpKTsKICAgICB0aGlzLT5NYWtlZmlsZS0+QmFja3RyYWNlID0gdGhpcy0+TWFrZWZpbGUtPkJhY2t0cmFjZS5QdXNoKGxmYyk7CiAgICAgKyt0aGlzLT5NYWtlZmlsZS0+UmVjdXJzaW9uRGVwdGg7CiAgICAgdGhpcy0+TWFrZWZpbGUtPkV4ZWN1dGlvblN0YXR1c1N0YWNrLnB1c2hfYmFjaygmc3RhdHVzKTsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPklzUHJvZmlsaW5nRW5hYmxlZCgpKSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRQcm9maWxpbmdPdXRwdXQoKS5TdGFydEVudHJ5KGxmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGZjKTsKKyAgICB9CisjZW5kaWYKICAgfQogCiAgIH5jbU1ha2VmaWxlQ2FsbCgpCiAgIHsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPklzUHJvZmlsaW5nRW5hYmxlZCgpKSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRQcm9maWxpbmdPdXRwdXQoKS5TdG9wRW50cnkoKTsKKyAgICB9CisjZW5kaWYKICAgICB0aGlzLT5NYWtlZmlsZS0+RXhlY3V0aW9uU3RhdHVzU3RhY2sucG9wX2JhY2soKTsKICAgICAtLXRoaXMtPk1ha2VmaWxlLT5SZWN1cnNpb25EZXB0aDsKICAgICB0aGlzLT5NYWtlZmlsZS0+QmFja3RyYWNlID0gdGhpcy0+TWFrZWZpbGUtPkJhY2t0cmFjZS5Qb3AoKTsKQEAgLTY4NSw2ICs3MDAsMjcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgY21NYWtlZmlsZTo6UmVhZExpc3RGaWxlQXNTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aXJ0dWFsRmlsZU5hbWUpCit7CisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1ldG9yZWFkID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICB2aXJ0dWFsRmlsZU5hbWUsIHRoaXMtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CisKKyAgTGlzdEZpbGVTY29wZSBzY29wZSh0aGlzLCBmaWxlbmFtZXRvcmVhZCk7CisKKyAgY21MaXN0RmlsZSBsaXN0RmlsZTsKKyAgaWYgKCFsaXN0RmlsZS5QYXJzZVN0cmluZyhjb250ZW50LmNfc3RyKCksIHZpcnR1YWxGaWxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldE1lc3NlbmdlcigpLCB0aGlzLT5CYWNrdHJhY2UpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgdGhpcy0+UmVhZExpc3RGaWxlKGxpc3RGaWxlLCBmaWxlbmFtZXRvcmVhZCk7CisgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGYXRhbEVycm9yT2NjdXJlZCgpKSB7CisgICAgc2NvcGUuUXVpZXQoKTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBjbU1ha2VmaWxlOjpSZWFkTGlzdEZpbGUoY21MaXN0RmlsZSBjb25zdCYgbGlzdEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmlsZW5hbWV0b3JlYWQpCiB7CkBAIC03MTYsNyArNzUyLDYgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICB0aGlzLT5DaGVja0ZvclVudXNlZFZhcmlhYmxlcygpOwogCiAgIHRoaXMtPkFkZERlZmluaXRpb24oIkNNQUtFX1BBUkVOVF9MSVNUX0ZJTEUiLCBjdXJyZW50UGFyZW50RmlsZSk7CiAgIHRoaXMtPkFkZERlZmluaXRpb24oIkNNQUtFX0NVUlJFTlRfTElTVF9GSUxFIiwgY3VycmVudEZpbGUpOwpAQCAtOTg4LDcgKzEwMjMsNyBAQAogICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsCiAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCiAgIGJvb2wgdXNlc190ZXJtaW5hbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwKLSAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cykKKyAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIGNtVGFyZ2V0KiB0ID0gdGhpcy0+R2V0Q3VzdG9tQ29tbWFuZFRhcmdldCgKICAgICB0YXJnZXQsIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzOjpSZWplY3QsIHRoaXMtPkJhY2t0cmFjZSk7CkBAIC0xMDA2LDE0ICsxMDQxLDE1IEBACiAgIGNtOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gd29ya2luZ1N0ciA9IE1ha2VPcHRpb25hbFN0cmluZyh3b3JraW5nRGlyKTsKIAogICAvLyBEaXNwYXRjaCBjb21tYW5kIGNyZWF0aW9uIHRvIGFsbG93IGdlbmVyYXRvciBleHByZXNzaW9ucyBpbiBvdXRwdXRzLgotICB0aGlzLT5BZGRHZW5lcmF0b3JBY3Rpb24oWz1dKGNtTG9jYWxHZW5lcmF0b3ImIGxnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpIHsKLSAgICBCYWNrdHJhY2VHdWFyZCBndWFyZCh0aGlzLT5CYWNrdHJhY2UsIGxmYnQpOwotICAgIGRldGFpbDo6QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAotICAgICAgbGcsIGxmYnQsIGNtQ29tbWFuZE9yaWdpbjo6UHJvamVjdCwgdCwgYnlwcm9kdWN0cywgZGVwZW5kcywgY29tbWFuZExpbmVzLAotICAgICAgdHlwZSwgR2V0Q1N0ck9yTnVsbChjb21tZW50U3RyKSwgR2V0Q1N0ck9yTnVsbCh3b3JraW5nU3RyKSwKLSAgICAgIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLCBkZXBmaWxlLCBqb2JfcG9vbCwgY29tbWFuZF9leHBhbmRfbGlzdHMpOwotICB9KTsKKyAgdGhpcy0+QWRkR2VuZXJhdG9yQWN0aW9uKAorICAgIFs9XShjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkgeworICAgICAgQmFja3RyYWNlR3VhcmQgZ3VhcmQodGhpcy0+QmFja3RyYWNlLCBsZmJ0KTsKKyAgICAgIGRldGFpbDo6QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAorICAgICAgICBsZywgbGZidCwgY21Db21tYW5kT3JpZ2luOjpQcm9qZWN0LCB0LCBieXByb2R1Y3RzLCBkZXBlbmRzLAorICAgICAgICBjb21tYW5kTGluZXMsIHR5cGUsIEdldENTdHJPck51bGwoY29tbWVudFN0ciksCisgICAgICAgIEdldENTdHJPck51bGwod29ya2luZ1N0ciksIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLCBkZXBmaWxlLAorICAgICAgICBqb2JfcG9vbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIHN0ZFBpcGVzVVRGOCk7CisgICAgfSk7CiAKICAgcmV0dXJuIHQ7CiB9CkBAIC0xMDI0LDE0ICsxMDYwLDE0IEBACiAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsCiAgIGNvbnN0IENvbW1hbmRTb3VyY2VDYWxsYmFjayYgY2FsbGJhY2ssIGJvb2wgcmVwbGFjZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKICAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQorICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgc3RkUGlwZXNVVEY4KQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKICAgY21JbXBsaWNpdERlcGVuZHNMaXN0IG5vX2ltcGxpY2l0X2RlcGVuZHM7CiAgIHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKICAgICB7IG91dHB1dCB9LCBub19ieXByb2R1Y3RzLCBkZXBlbmRzLCBtYWluX2RlcGVuZGVuY3ksIG5vX2ltcGxpY2l0X2RlcGVuZHMsCiAgICAgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nRGlyLCBjYWxsYmFjaywgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsCi0gICAgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sKTsKKyAgICB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wsIHN0ZFBpcGVzVVRGOCk7CiB9CiAKIHZvaWQgY21NYWtlZmlsZTo6QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KApAQCAtMTA0Miw3ICsxMDc4LDcgQEAKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgY29uc3QgQ29tbWFuZFNvdXJjZUNhbGxiYWNrJiBjYWxsYmFjaywgYm9vbCByZXBsYWNlLAogICBib29sIGVzY2FwZU9sZFN0eWxlLCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgc3RkUGlwZXNVVEY4KQogewogICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG91dHB1dC4KICAgaWYgKG91dHB1dHMuZW1wdHkoKSkgewpAQCAtMTA2NCwxOCArMTEwMCwxOSBAQAogICBjbTo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+IHdvcmtpbmdTdHIgPSBNYWtlT3B0aW9uYWxTdHJpbmcod29ya2luZ0Rpcik7CiAKICAgLy8gRGlzcGF0Y2ggY29tbWFuZCBjcmVhdGlvbiB0byBhbGxvdyBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgaW4gb3V0cHV0cy4KLSAgdGhpcy0+QWRkR2VuZXJhdG9yQWN0aW9uKFs9XShjbUxvY2FsR2VuZXJhdG9yJiBsZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSB7Ci0gICAgQmFja3RyYWNlR3VhcmQgZ3VhcmQodGhpcy0+QmFja3RyYWNlLCBsZmJ0KTsKLSAgICBjbVNvdXJjZUZpbGUqIHNmID0gZGV0YWlsOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCi0gICAgICBsZywgbGZidCwgY21Db21tYW5kT3JpZ2luOjpQcm9qZWN0LCBvdXRwdXRzLCBieXByb2R1Y3RzLCBkZXBlbmRzLAotICAgICAgbWFpbl9kZXBlbmRlbmN5LCBpbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsCi0gICAgICBHZXRDU3RyT3JOdWxsKGNvbW1lbnRTdHIpLCBHZXRDU3RyT3JOdWxsKHdvcmtpbmdTdHIpLCByZXBsYWNlLAotICAgICAgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBkZXBmaWxlLCBqb2JfcG9vbCk7Ci0gICAgaWYgKGNhbGxiYWNrICYmIHNmKSB7Ci0gICAgICBjYWxsYmFjayhzZik7Ci0gICAgfQotICB9KTsKKyAgdGhpcy0+QWRkR2VuZXJhdG9yQWN0aW9uKAorICAgIFs9XShjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkgeworICAgICAgQmFja3RyYWNlR3VhcmQgZ3VhcmQodGhpcy0+QmFja3RyYWNlLCBsZmJ0KTsKKyAgICAgIGNtU291cmNlRmlsZSogc2YgPSBkZXRhaWw6OkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgICAgICAgbGcsIGxmYnQsIGNtQ29tbWFuZE9yaWdpbjo6UHJvamVjdCwgb3V0cHV0cywgYnlwcm9kdWN0cywgZGVwZW5kcywKKyAgICAgICAgbWFpbl9kZXBlbmRlbmN5LCBpbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsCisgICAgICAgIEdldENTdHJPck51bGwoY29tbWVudFN0ciksIEdldENTdHJPck51bGwod29ya2luZ1N0ciksIHJlcGxhY2UsCisgICAgICAgIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wsCisgICAgICAgIHN0ZFBpcGVzVVRGOCk7CisgICAgICBpZiAoY2FsbGJhY2sgJiYgc2YpIHsKKyAgICAgICAgY2FsbGJhY2soc2YpOworICAgICAgfQorICAgIH0pOwogfQogCiB2b2lkIGNtTWFrZWZpbGU6OkFkZEN1c3RvbUNvbW1hbmRPbGRTdHlsZSgKQEAgLTExOTEsNyArMTIyOCw3IEBACiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSwKICAgY29uc3QgY2hhciogY29tbWVudCwgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAotICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIGNtVGFyZ2V0KiB0YXJnZXQgPSB0aGlzLT5BZGROZXdVdGlsaXR5VGFyZ2V0KHV0aWxpdHlOYW1lLCBleGNsdWRlRnJvbUFsbCk7CiAKQEAgLTEyMjAsNyArMTI1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlLCBHZXRDU3RyT3JOdWxsKHdvcmtpbmdTdHIpLCBieXByb2R1Y3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLCBjb21tYW5kTGluZXMsIGVzY2FwZU9sZFN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDU3RyT3JOdWxsKGNvbW1lbnRTdHIpLCB1c2VzX3Rlcm1pbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2V4cGFuZF9saXN0cywgam9iX3Bvb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2V4cGFuZF9saXN0cywgam9iX3Bvb2wsIHN0ZFBpcGVzVVRGOCk7CiAgICAgfSk7CiAKICAgcmV0dXJuIHRhcmdldDsKQEAgLTEzNTgsOSArMTM5NSw5IEBACiAgIGNvbnN0IGNoYXIqIGRlZmluZSA9IGRlZi5jX3N0cigpICsgMjsKIAogICBpZiAocmVtb3ZlKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNkZWZzID0gdGhpcy0+R2V0UHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiKSkgeworICAgIGlmIChjbVByb3AgY2RlZnMgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9ERUZJTklUSU9OUyIpKSB7CiAgICAgICAvLyBFeHBhbmQgdGhlIGxpc3QuCi0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVmcyA9IGNtRXhwYW5kZWRMaXN0KGNkZWZzKTsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZzID0gY21FeHBhbmRlZExpc3QoKmNkZWZzKTsKIAogICAgICAgLy8gUmVjb21wb3NlIHRoZSBsaXN0IHdpdGhvdXQgdGhlIGRlZmluaXRpb24uCiAgICAgICBhdXRvIGRlZkVuZCA9IHN0ZDo6cmVtb3ZlKGRlZnMuYmVnaW4oKSwgZGVmcy5lbmQoKSwgZGVmaW5lKTsKQEAgLTEzODksMjkgKzE0MjYsMzIgQEAKICAgLy8gSW5jbHVkZSB0cmFuc2Zvcm0gcHJvcGVydHkuICBUaGVyZSBpcyBubyBwZXItY29uZmlnIHZlcnNpb24uCiAgIHsKICAgICBjb25zdCBjaGFyKiBwcm9wID0gIklNUExJQ0lUX0RFUEVORFNfSU5DTFVERV9UUkFOU0ZPUk0iOwotICAgIHRoaXMtPlNldFByb3BlcnR5KHByb3AsIHBhcmVudC0+R2V0UHJvcGVydHkocHJvcCkpOworICAgIGNtUHJvcCBwID0gcGFyZW50LT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgICB0aGlzLT5TZXRQcm9wZXJ0eShwcm9wLCBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHIpOwogICB9CiAKICAgLy8gY29tcGlsZSBkZWZpbml0aW9ucyBwcm9wZXJ0eSBhbmQgcGVyLWNvbmZpZyB2ZXJzaW9ucwogICBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgcG9sU3QgPSB0aGlzLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA0Myk7CiAgIGlmIChwb2xTdCA9PSBjbVBvbGljaWVzOjpXQVJOIHx8IHBvbFN0ID09IGNtUG9saWNpZXM6Ok9MRCkgewotICAgIHRoaXMtPlNldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIiwKLSAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPkdldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIikpOwotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOwotICAgIHRoaXMtPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MpOworICAgIGNtUHJvcCBwID0gcGFyZW50LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9ERUZJTklUSU9OUyIpOworICAgIHRoaXMtPlNldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIiwgcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlncykgewogICAgICAgc3RkOjpzdHJpbmcgZGVmUHJvcE5hbWUgPQogICAgICAgICBjbVN0ckNhdCgiQ09NUElMRV9ERUZJTklUSU9OU18iLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7Ci0gICAgICBjb25zdCBjaGFyKiBwcm9wID0gcGFyZW50LT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSk7Ci0gICAgICB0aGlzLT5TZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSwgcHJvcCk7CisgICAgICBjbVByb3AgcHJvcCA9IHBhcmVudC0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpOworICAgICAgdGhpcy0+U2V0UHJvcGVydHkoZGVmUHJvcE5hbWUsIHByb3AgPyBwcm9wLT5jX3N0cigpIDogbnVsbHB0cik7CiAgICAgfQogICB9CiAKICAgLy8gbGFiZWxzCi0gIHRoaXMtPlNldFByb3BlcnR5KCJMQUJFTFMiLCBwYXJlbnQtPkdldFByb3BlcnR5KCJMQUJFTFMiKSk7CisgIGNtUHJvcCBwID0gcGFyZW50LT5HZXRQcm9wZXJ0eSgiTEFCRUxTIik7CisgIHRoaXMtPlNldFByb3BlcnR5KCJMQUJFTFMiLCBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHIpOwogCiAgIC8vIGxpbmsgbGlicmFyaWVzCi0gIHRoaXMtPlNldFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIsIHBhcmVudC0+R2V0UHJvcGVydHkoIkxJTktfTElCUkFSSUVTIikpOworICBwID0gcGFyZW50LT5HZXRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiKTsKKyAgdGhpcy0+U2V0UHJvcGVydHkoIkxJTktfTElCUkFSSUVTIiwgcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyKTsKIAogICAvLyB0aGUgaW5pdGlhbCBwcm9qZWN0IG5hbWUKICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5TZXRQcm9qZWN0TmFtZShwYXJlbnQtPlN0YXRlU25hcHNob3QuR2V0UHJvamVjdE5hbWUoKSk7CkBAIC0xNDIyLDYgKzE0NjIsOSBAQAogICAvLyBJbXBvcnRlZCB0YXJnZXRzLgogICB0aGlzLT5JbXBvcnRlZFRhcmdldHMgPSBwYXJlbnQtPkltcG9ydGVkVGFyZ2V0czsKIAorICAvLyBOb24tZ2xvYmFsIEFsaWFzIHRhcmdldHMuCisgIHRoaXMtPkFsaWFzVGFyZ2V0cyA9IHBhcmVudC0+QWxpYXNUYXJnZXRzOworCiAgIC8vIFJlY3Vyc2lvbiBkZXB0aC4KICAgdGhpcy0+UmVjdXJzaW9uRGVwdGggPSBwYXJlbnQtPlJlY3Vyc2lvbkRlcHRoOwogfQpAQCAtMTQ3MSw4ICsxNTE0LDYgQEAKICNlbmRpZgogCiAgIHRoaXMtPlBvcExvb3BCbG9ja0JhcnJpZXIoKTsKLQotICB0aGlzLT5DaGVja0ZvclVudXNlZFZhcmlhYmxlcygpOwogfQogCiB2b2lkIGNtTWFrZWZpbGU6OlB1c2hNYWNyb1Njb3BlKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlTmFtZSwKQEAgLTE2MDYsNyArMTY0Nyw3IEBACiAgICAgICAgIGFsbG93ZWRDb21tYW5kcy5pbnNlcnQoIm1lc3NhZ2UiKTsKICAgICAgICAgaXNQcm9ibGVtID0gZmFsc2U7CiAgICAgICAgIGZvciAoY21MaXN0RmlsZUZ1bmN0aW9uIGNvbnN0JiBmdW5jIDogbGlzdEZpbGUuRnVuY3Rpb25zKSB7Ci0gICAgICAgICAgaWYgKCFjbUNvbnRhaW5zKGFsbG93ZWRDb21tYW5kcywgZnVuYy5OYW1lLkxvd2VyKSkgeworICAgICAgICAgIGlmICghY206OmNvbnRhaW5zKGFsbG93ZWRDb21tYW5kcywgZnVuYy5OYW1lLkxvd2VyKSkgewogICAgICAgICAgICAgaXNQcm9ibGVtID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTE2MTksNyArMTY2MCw4IEBACiAgICAgICAgIHRoaXMtPlNldENoZWNrQ01QMDAwMCh0cnVlKTsKIAogICAgICAgICAvLyBJbXBsaWNpdGx5IHNldCB0aGUgdmVyc2lvbiBmb3IgdGhlIHVzZXIuCi0gICAgICAgIHRoaXMtPlNldFBvbGljeVZlcnNpb24oIjIuNCIsIHN0ZDo6c3RyaW5nKCkpOworICAgICAgICBjbVBvbGljaWVzOjpBcHBseVBvbGljeVZlcnNpb24odGhpcywgMiwgNCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtUG9saWNpZXM6Oldhcm5Db21wYXQ6Ok9mZik7CiAgICAgICB9CiAgICAgfQogICAgIGJvb2wgaGFzUHJvamVjdCA9IGZhbHNlOwpAQCAtMTgxOCw5ICsxODYwLDYgQEAKIAogdm9pZCBjbU1ha2VmaWxlOjpBZGREZWZpbml0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbTo6c3RyaW5nX3ZpZXcgdmFsdWUpCiB7Ci0gIGlmICh0aGlzLT5WYXJpYWJsZUluaXRpYWxpemVkKG5hbWUpKSB7Ci0gICAgdGhpcy0+TG9nVW51c2VkKCJjaGFuZ2luZyBkZWZpbml0aW9uIiwgbmFtZSk7Ci0gIH0KICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5TZXREZWZpbml0aW9uKG5hbWUsIHZhbHVlKTsKIAogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKQEAgLTE4NDIsOCArMTg4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlKQogewotICBjb25zdCBzdGQ6OnN0cmluZyogZXhpc3RpbmdWYWx1ZSA9Ci0gICAgdGhpcy0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKG5hbWUpOworICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9IHRoaXMtPkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShuYW1lKTsKICAgLy8gbXVzdCBiZSBvdXRzaWRlIHRoZSBmb2xsb3dpbmcgaWYoKSB0byBrZWVwIGl0IGFsaXZlIGxvbmcgZW5vdWdoCiAgIHN0ZDo6c3RyaW5nIG52YWx1ZTsKIApAQCAtMTg4MiwxNiArMTkyMCw2IEBACiAgIHRoaXMtPlN0YXRlU25hcHNob3QuUmVtb3ZlRGVmaW5pdGlvbihuYW1lKTsKIH0KIAotdm9pZCBjbU1ha2VmaWxlOjpDaGVja0ZvclVudXNlZFZhcmlhYmxlcygpIGNvbnN0Ci17Ci0gIGlmICghdGhpcy0+V2FyblVudXNlZCkgewotICAgIHJldHVybjsKLSAgfQotICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkgOiB0aGlzLT5TdGF0ZVNuYXBzaG90LlVudXNlZEtleXMoKSkgewotICAgIHRoaXMtPkxvZ1VudXNlZCgib3V0IG9mIHNjb3BlIiwga2V5KTsKLSAgfQotfQotCiB2b2lkIGNtTWFrZWZpbGU6Ok1hcmtWYXJpYWJsZUFzVXNlZChjb25zdCBzdGQ6OnN0cmluZyYgdmFyKQogewogICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERlZmluaXRpb24odmFyKTsKQEAgLTE5MTksMjkgKzE5NDcsOCBAQAogICB9CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6TG9nVW51c2VkKGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gIGlmICh0aGlzLT5XYXJuVW51c2VkKSB7Ci0gICAgc3RkOjpzdHJpbmcgcGF0aDsKLSAgICBpZiAoIXRoaXMtPkV4ZWN1dGlvblN0YXR1c1N0YWNrLmVtcHR5KCkpIHsKLSAgICAgIHBhdGggPSB0aGlzLT5HZXRFeGVjdXRpb25Db250ZXh0KCkuRmlsZVBhdGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBhdGggPSBjbVN0ckNhdCh0aGlzLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICIvQ01ha2VMaXN0cy50eHQiKTsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy0+Q2hlY2tTeXN0ZW1WYXJzIHx8IHRoaXMtPklzUHJvamVjdEZpbGUocGF0aC5jX3N0cigpKSkgewotICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKLSAgICAgIG1zZyA8PCAidW51c2VkIHZhcmlhYmxlICgiIDw8IHJlYXNvbiA8PCAiKSBcJyIgPDwgbmFtZSA8PCAiXCciOwotICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywgbXNnLnN0cigpKTsKLSAgICB9Ci0gIH0KLX0KLQogdm9pZCBjbU1ha2VmaWxlOjpSZW1vdmVEZWZpbml0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQogewotICBpZiAodGhpcy0+VmFyaWFibGVJbml0aWFsaXplZChuYW1lKSkgewotICAgIHRoaXMtPkxvZ1VudXNlZCgidW5zZXR0aW5nIiwgbmFtZSk7Ci0gIH0KICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5SZW1vdmVEZWZpbml0aW9uKG5hbWUpOwogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKICAgY21WYXJpYWJsZVdhdGNoKiB2diA9IHRoaXMtPkdldFZhcmlhYmxlV2F0Y2goKTsKQEAgLTE5NzMsOCArMTk4MCw4IEBACiAgICAgZGVmYXVsdDo7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogbGlua0xpYnNQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfTElCUkFSSUVTIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua0xpYnMgPSBjbUV4cGFuZGVkTGlzdChsaW5rTGlic1Byb3ApOworICBpZiAoY21Qcm9wIGxpbmtMaWJzUHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtMaWJzID0gY21FeHBhbmRlZExpc3QoKmxpbmtMaWJzUHJvcCk7CiAKICAgICBmb3IgKGF1dG8gaiA9IGxpbmtMaWJzLmJlZ2luKCk7IGogIT0gbGlua0xpYnMuZW5kKCk7ICsraikgewogICAgICAgc3RkOjpzdHJpbmcgbGlicmFyeU5hbWUgPSAqajsKQEAgLTE5OTcsMTAgKzIwMDQsMTMgQEAKICAgfQogfQogCi12b2lkIGNtTWFrZWZpbGU6OkFkZEFsaWFzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsbmFtZSwgc3RkOjpzdHJpbmcgY29uc3QmIHRndE5hbWUpCit2b2lkIGNtTWFrZWZpbGU6OkFkZEFsaWFzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsbmFtZSwgc3RkOjpzdHJpbmcgY29uc3QmIHRndE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2xvYmFsbHlWaXNpYmxlKQogewogICB0aGlzLT5BbGlhc1RhcmdldHNbbG5hbWVdID0gdGd0TmFtZTsKLSAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZEFsaWFzKGxuYW1lLCB0Z3ROYW1lKTsKKyAgaWYgKGdsb2JhbGx5VmlzaWJsZSkgeworICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRBbGlhcyhsbmFtZSwgdGd0TmFtZSk7CisgIH0KIH0KIAogY21UYXJnZXQqIGNtTWFrZWZpbGU6OkFkZExpYnJhcnkoY29uc3Qgc3RkOjpzdHJpbmcmIGxuYW1lLApAQCAtMjA0MywxMSArMjA1MywxMSBAQAogY21UYXJnZXQqIGNtTWFrZWZpbGU6OkFkZE5ld1RhcmdldChjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCiB7Ci0gIGF1dG8gaXQgPQotICAgIHRoaXMtPlRhcmdldHMKLSAgICAgIC5lbXBsYWNlKG5hbWUsCi0gICAgICAgICAgICAgICBjbVRhcmdldChuYW1lLCB0eXBlLCBjbVRhcmdldDo6VmlzaWJpbGl0eU5vcm1hbCwgdGhpcywgdHJ1ZSkpCi0gICAgICAuZmlyc3Q7CisgIGF1dG8gaXQgPSB0aGlzLT5UYXJnZXRzCisgICAgICAgICAgICAgIC5lbXBsYWNlKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0KG5hbWUsIHR5cGUsIGNtVGFyZ2V0OjpWaXNpYmlsaXR5Tm9ybWFsLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVRhcmdldDo6UGVyQ29uZmlnOjpZZXMpKQorICAgICAgICAgICAgICAuZmlyc3Q7CiAgIHRoaXMtPk9yZGVyZWRUYXJnZXRzLnB1c2hfYmFjaygmaXQtPnNlY29uZCk7CiAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5JbmRleFRhcmdldCgmaXQtPnNlY29uZCk7CiAgIHRoaXMtPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKS5BZGROb3JtYWxUYXJnZXROYW1lKG5hbWUpOwpAQCAtMjM2NiwxMSArMjM3NiwxMSBAQAogCiBjbVNvdXJjZUdyb3VwKiBjbU1ha2VmaWxlOjpHZXRPckNyZWF0ZVNvdXJjZUdyb3VwKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQogewotICBjb25zdCBjaGFyKiBkZWxpbWl0ZXIgPSB0aGlzLT5HZXREZWZpbml0aW9uKCJTT1VSQ0VfR1JPVVBfREVMSU1JVEVSIik7Ci0gIGlmIChkZWxpbWl0ZXIgPT0gbnVsbHB0cikgewotICAgIGRlbGltaXRlciA9ICJcXCI7CisgIGNvbnN0IGNoYXIqIGRlbGltaXRlcnMgPSB0aGlzLT5HZXREZWZpbml0aW9uKCJTT1VSQ0VfR1JPVVBfREVMSU1JVEVSIik7CisgIGlmIChkZWxpbWl0ZXJzID09IG51bGxwdHIpIHsKKyAgICBkZWxpbWl0ZXJzID0gIi9cXCI7CiAgIH0KLSAgcmV0dXJuIHRoaXMtPkdldE9yQ3JlYXRlU291cmNlR3JvdXAoY21Ub2tlbml6ZShuYW1lLCBkZWxpbWl0ZXIpKTsKKyAgcmV0dXJuIHRoaXMtPkdldE9yQ3JlYXRlU291cmNlR3JvdXAoY21Ub2tlbml6ZShuYW1lLCBkZWxpbWl0ZXJzKSk7CiB9CiAKIC8qKgpAQCAtMjQxOCwxNCArMjQyOCwxNCBAQAogICB9CiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSB3OwogCi0gIGNvbnN0IGNoYXIqIGluY2x1ZGVEaXJzID0gdGhpcy0+R2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKLSAgaWYgKG1pZ2h0RXhwYW5kVmFyaWFibGVzQ01QMDAxOShpbmNsdWRlRGlycykpIHsKLSAgICBzdGQ6OnN0cmluZyBkaXJzID0gaW5jbHVkZURpcnM7CisgIGNtUHJvcCBpbmNsdWRlRGlycyA9IHRoaXMtPkdldFByb3BlcnR5KCJJTkNMVURFX0RJUkVDVE9SSUVTIik7CisgIGlmIChpbmNsdWRlRGlycyAmJiBtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkoaW5jbHVkZURpcnMtPmNfc3RyKCkpKSB7CisgICAgc3RkOjpzdHJpbmcgZGlycyA9ICppbmNsdWRlRGlyczsKICAgICB0aGlzLT5FeHBhbmRWYXJpYWJsZXNJblN0cmluZyhkaXJzLCB0cnVlLCB0cnVlKTsKLSAgICBpZiAocG9sID09IGNtUG9saWNpZXM6OldBUk4gJiYgZGlycyAhPSBpbmNsdWRlRGlycykgeworICAgIGlmIChwb2wgPT0gY21Qb2xpY2llczo6V0FSTiAmJiBkaXJzICE9ICppbmNsdWRlRGlycykgewogICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgICAgdyA8PCAiRXZhbHVhdGVkIGRpcmVjdG9yeSBJTkNMVURFX0RJUkVDVE9SSUVTXG4iCi0gICAgICAgIDw8ICIgICIgPDwgaW5jbHVkZURpcnMgPDwgIlxuIgorICAgICAgICA8PCAiICAiIDw8ICppbmNsdWRlRGlycyA8PCAiXG4iCiAgICAgICAgIDw8ICJhc1xuIgogICAgICAgICA8PCAiICAiIDw8IGRpcnMgPDwgIlxuIjsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwpAQCAtMjQ0MSwxMyArMjQ1MSwxMyBAQAogICAgICAgY29udGludWU7CiAgICAgfQogICAgIGluY2x1ZGVEaXJzID0gdC5HZXRQcm9wZXJ0eSgiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwotICAgIGlmIChtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkoaW5jbHVkZURpcnMpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBkaXJzID0gaW5jbHVkZURpcnM7CisgICAgaWYgKGluY2x1ZGVEaXJzICYmIG1pZ2h0RXhwYW5kVmFyaWFibGVzQ01QMDAxOShpbmNsdWRlRGlycy0+Y19zdHIoKSkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGRpcnMgPSAqaW5jbHVkZURpcnM7CiAgICAgICB0aGlzLT5FeHBhbmRWYXJpYWJsZXNJblN0cmluZyhkaXJzLCB0cnVlLCB0cnVlKTsKLSAgICAgIGlmIChwb2wgPT0gY21Qb2xpY2llczo6V0FSTiAmJiBkaXJzICE9IGluY2x1ZGVEaXJzKSB7CisgICAgICBpZiAocG9sID09IGNtUG9saWNpZXM6OldBUk4gJiYgZGlycyAhPSAqaW5jbHVkZURpcnMpIHsKICAgICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgICAgICB3IDw8ICJFdmFsdWF0ZWQgdGFyZ2V0ICIgPDwgdC5HZXROYW1lKCkgPDwgIiBJTkNMVURFX0RJUkVDVE9SSUVTXG4iCi0gICAgICAgICAgPDwgIiAgIiA8PCBpbmNsdWRlRGlycyA8PCAiXG4iCisgICAgICAgICAgPDwgIiAgIiA8PCAqaW5jbHVkZURpcnMgPDwgIlxuIgogICAgICAgICAgIDw8ICJhc1xuIgogICAgICAgICAgIDw8ICIgICIgPDwgZGlycyA8PCAiXG4iOwogICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KQEAgLTI0NTYsMTAgKzI0NjYsMTAgQEAKICAgICB9CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogbGlua0RpcnNQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfRElSRUNUT1JJRVMiKSkgewotICAgIGlmIChtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkobGlua0RpcnNQcm9wKSkgewotICAgICAgc3RkOjpzdHJpbmcgZCA9IGxpbmtEaXJzUHJvcDsKLSAgICAgIHN0ZDo6c3RyaW5nIG9yaWcgPSBsaW5rRGlyc1Byb3A7CisgIGlmIChjbVByb3AgbGlua0RpcnNQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfRElSRUNUT1JJRVMiKSkgeworICAgIGlmIChtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkobGlua0RpcnNQcm9wLT5jX3N0cigpKSkgeworICAgICAgc3RkOjpzdHJpbmcgZCA9ICpsaW5rRGlyc1Byb3A7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmlnID0gZDsKICAgICAgIHRoaXMtPkV4cGFuZFZhcmlhYmxlc0luU3RyaW5nKGQsIHRydWUsIHRydWUpOwogICAgICAgaWYgKHBvbCA9PSBjbVBvbGljaWVzOjpXQVJOICYmIGQgIT0gb3JpZykgewogICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCkBAIC0yNDcyLDIwICsyNDgyLDE3IEBACiAgICAgfQogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGxpbmtMaWJzUHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtMaWJzID0gY21FeHBhbmRlZExpc3QobGlua0xpYnNQcm9wKTsKKyAgaWYgKGNtUHJvcCBsaW5rTGlic1Byb3AgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rTGlicyA9IGNtRXhwYW5kZWRMaXN0KCpsaW5rTGlic1Byb3ApOwogCiAgICAgZm9yIChhdXRvIGwgPSBsaW5rTGlicy5iZWdpbigpOyBsICE9IGxpbmtMaWJzLmVuZCgpOyArK2wpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpYk5hbWUgPSAqbDsKLSAgICAgIGlmIChsaWJOYW1lID09ICJvcHRpbWl6ZWQiKSB7Ci0gICAgICAgICsrbDsKLSAgICAgICAgbGliTmFtZSA9ICpsOwotICAgICAgfSBlbHNlIGlmIChsaWJOYW1lID09ICJkZWJ1ZyIpIHsKKyAgICAgIGlmIChsaWJOYW1lID09ICJvcHRpbWl6ZWQiX3MgfHwgbGliTmFtZSA9PSAiZGVidWciX3MpIHsKICAgICAgICAgKytsOwogICAgICAgICBsaWJOYW1lID0gKmw7CiAgICAgICB9CiAgICAgICBpZiAobWlnaHRFeHBhbmRWYXJpYWJsZXNDTVAwMDE5KGxpYk5hbWUuY19zdHIoKSkpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgb3JpZyA9IGxpYk5hbWU7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG9yaWcgPSBsaWJOYW1lOwogICAgICAgICB0aGlzLT5FeHBhbmRWYXJpYWJsZXNJblN0cmluZyhsaWJOYW1lLCB0cnVlLCB0cnVlKTsKICAgICAgICAgaWYgKHBvbCA9PSBjbVBvbGljaWVzOjpXQVJOICYmIGxpYk5hbWUgIT0gb3JpZykgewogICAgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KQEAgLTI1MTQsOCArMjUyMSw3IEBACiAKIGJvb2wgY21NYWtlZmlsZTo6SXNPbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5HZXREZWZpbml0aW9uKG5hbWUpOwotICByZXR1cm4gY21Jc09uKHZhbHVlKTsKKyAgcmV0dXJuIGNtSXNPbih0aGlzLT5HZXREZWYobmFtZSkpOwogfQogCiBib29sIGNtTWFrZWZpbGU6OklzU2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMjU4OSw3ICsyNTk1LDcgQEAKICAgfTsKIAogICBmb3IgKGF1dG8gY29uc3QmIGVudHJ5IDogc2RrRGF0YWJhc2UpIHsKLSAgICBpZiAoc2RrUm9vdC5maW5kKGVudHJ5Lm5hbWUpID09IDAgfHwKKyAgICBpZiAoY21IYXNQcmVmaXgoc2RrUm9vdCwgZW50cnkubmFtZSkgfHwKICAgICAgICAgc2RrUm9vdC5maW5kKHN0ZDo6c3RyaW5nKCIvIikgKyBlbnRyeS5uYW1lKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgcmV0dXJuIGVudHJ5LnNkazsKICAgICB9CkBAIC0yNjQ3LDcgKzI2NTMsNyBAQAogCiBib29sIGNtTWFrZWZpbGU6OklzRGVmaW5pdGlvblNldChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIGRlZiA9IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGVmaW5pdGlvbihuYW1lKTsKKyAgY21Qcm9wIGRlZiA9IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGVmaW5pdGlvbihuYW1lKTsKICAgaWYgKCFkZWYpIHsKICAgICBkZWYgPSB0aGlzLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUobmFtZSk7CiAgIH0KQEAgLTI2NjQsNyArMjY3MCw3IEBACiAKIGNvbnN0IHN0ZDo6c3RyaW5nKiBjbU1ha2VmaWxlOjpHZXREZWYoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBkZWYgPSB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERlZmluaXRpb24obmFtZSk7CisgIGNtUHJvcCBkZWYgPSB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERlZmluaXRpb24obmFtZSk7CiAgIGlmICghZGVmKSB7CiAgICAgZGVmID0gdGhpcy0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKG5hbWUpOwogICB9CkBAIC0yNzEwLDYgKzI3MTYsMTggQEAKICAgcmV0dXJuICpkZWY7CiB9CiAKK2Jvb2wgY21NYWtlZmlsZTo6R2V0RGVmRXhwYW5kTGlzdChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVtcHR5QXJncykgY29uc3QKK3sKKyAgY21Qcm9wIGRlZiA9IHRoaXMtPkdldERlZihuYW1lKTsKKyAgaWYgKCFkZWYpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgY21FeHBhbmRMaXN0KCpkZWYsIG91dCwgZW1wdHlBcmdzKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbU1ha2VmaWxlOjpHZXREZWZpbml0aW9ucygpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXMgPSB0aGlzLT5TdGF0ZVNuYXBzaG90LkNsb3N1cmVLZXlzKCk7CkBAIC0yOTk4LDcgKzMwMTYsNyBAQAogICAgICAgICAgIG9wZW5zdGFjay5wb3BfYmFjaygpOwogICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGFzdCwgaW4gLSBsYXN0KTsKICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbG9va3VwID0gcmVzdWx0LnN1YnN0cih2YXIubG9jKTsKLSAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IG51bGxwdHI7CisgICAgICAgICAgY21Qcm9wIHZhbHVlID0gbnVsbHB0cjsKICAgICAgICAgICBzdGQ6OnN0cmluZyB2YXJyZXN1bHQ7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgc3ZhbHVlOwogICAgICAgICAgIHN3aXRjaCAodmFyLmRvbWFpbikgewpAQCAtMzAwNiwxMiArMzAyNCwxMiBAQAogICAgICAgICAgICAgICBpZiAoZmlsZW5hbWUgJiYgbG9va3VwID09IGxpbmVWYXIpIHsKICAgICAgICAgICAgICAgICB2YXJyZXN1bHQgPSBzdGQ6OnRvX3N0cmluZyhsaW5lKTsKICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMtPkdldERlZmluaXRpb24obG9va3VwKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMtPkdldERlZihsb29rdXApOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFTlZJUk9OTUVOVDoKICAgICAgICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVudihsb29rdXAsIHN2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN2YWx1ZS5jX3N0cigpOworICAgICAgICAgICAgICAgIHZhbHVlID0gJnN2YWx1ZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ0FDSEU6CkBAIC0zMDIxLDkgKzMwMzksOSBAQAogICAgICAgICAgIC8vIEdldCB0aGUgc3RyaW5nIHdlJ3JlIG1lYW50IHRvIGFwcGVuZCB0by4KICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgIGlmIChlc2NhcGVRdW90ZXMpIHsKLSAgICAgICAgICAgICAgdmFycmVzdWx0ID0gY21Fc2NhcGVRdW90ZXModmFsdWUpOworICAgICAgICAgICAgICB2YXJyZXN1bHQgPSBjbUVzY2FwZVF1b3RlcygqdmFsdWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgdmFycmVzdWx0ID0gdmFsdWU7CisgICAgICAgICAgICAgIHZhcnJlc3VsdCA9ICp2YWx1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLT5TdXBwcmVzc1NpZGVFZmZlY3RzKSB7CiAgICAgICAgICAgICB0aGlzLT5NYXliZVdhcm5VbmluaXRpYWxpemVkKGxvb2t1cCwgZmlsZW5hbWUpOwpAQCAtMzIzNCwyOCArMzI1MiwyOCBAQAogICB9CiB9CiAKLXN0ZDo6c3RyaW5nIGNtTWFrZWZpbGU6OkdldENvbmZpZ3VyYXRpb25zKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29uZmlncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2luZ2xlQ29uZmlnKSBjb25zdAorc3RkOjpzdHJpbmcgY21NYWtlZmlsZTo6R2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKSBjb25zdAogewogICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSkgewotICAgIGlmIChjb25zdCBjaGFyKiBjb25maWdUeXBlcyA9Ci0gICAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUyIpKSB7Ci0gICAgICBjbUV4cGFuZExpc3QoY29uZmlnVHlwZXMsIGNvbmZpZ3MpOwotICAgIH0KLSAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIHN0ZDo6c3RyaW5ne307CiAgIH0KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGJ1aWxkVHlwZSA9IHRoaXMtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7Ci0gIGlmIChzaW5nbGVDb25maWcgJiYgIWJ1aWxkVHlwZS5lbXB0eSgpKSB7Ci0gICAgY29uZmlncy5wdXNoX2JhY2soYnVpbGRUeXBlKTsKLSAgfQotICByZXR1cm4gYnVpbGRUeXBlOworICByZXR1cm4gdGhpcy0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKTsKIH0KIAotc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtTWFrZWZpbGU6OkdldEdlbmVyYXRvckNvbmZpZ3MoKSBjb25zdAorc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtTWFrZWZpbGU6OkdldEdlbmVyYXRvckNvbmZpZ3MoCisgIEdlbmVyYXRvckNvbmZpZ1F1ZXJ5IG1vZGUpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOwotICBHZXRDb25maWd1cmF0aW9ucyhjb25maWdzKTsKLSAgaWYgKGNvbmZpZ3MuZW1wdHkoKSkgeworICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSB8fAorICAgICAgbW9kZSA9PSBjbU1ha2VmaWxlOjpPbmx5TXVsdGlDb25maWcpIHsKKyAgICB0aGlzLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTIiwgY29uZmlncyk7CisgIH0gZWxzZSB7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJ1aWxkVHlwZSA9IHRoaXMtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7CisgICAgaWYgKCFidWlsZFR5cGUuZW1wdHkoKSkgeworICAgICAgY29uZmlncy5lbXBsYWNlX2JhY2soYnVpbGRUeXBlKTsKKyAgICB9CisgIH0KKyAgaWYgKG1vZGUgPT0gY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnICYmIGNvbmZpZ3MuZW1wdHkoKSkgewogICAgIGNvbmZpZ3MuZW1wbGFjZV9iYWNrKCk7CiAgIH0KICAgcmV0dXJuIGNvbmZpZ3M7CkBAIC0zNjc1LDcgKzM2OTMsNyBAQAogICBpZiAoY21ha2VBcmdzKSB7CiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgdG8gaWdub3JlIHVudXNlZCBDTEkgdmFyaWFibGVzIGluIHRyeS1jb21waWxlLgogICAgIC8vCi0gICAgLy8gSWRlYWxseSB3ZSBzaG91bGQgdXNlIFNldEFyZ3MgdG8gaG9ub3Igb3B0aW9ucyBsaWtlIC0td2Fybi11bnVzZWQtdmFycy4KKyAgICAvLyBJZGVhbGx5IHdlIHNob3VsZCB1c2UgU2V0QXJncyBmb3Igb3B0aW9ucyBsaWtlIC0tbm8td2Fybi11bnVzZWQtY2xpLgogICAgIC8vIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3VidGxlIHByb2JsZW0gd2hlbiBjZXJ0YWluIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvCiAgICAgLy8gYSBtYWNybyB3cmFwcGluZyBhcm91bmQgdHJ5X2NvbXBpbGUgb3IgdHJ5X3J1biB0aGF0IGRvZXMgbm90IGVzY2FwZQogICAgIC8vIHNlbWljb2xvbnMgaW4gaXRzIHBhcmFtZXRlcnMgYnV0IGp1c3QgcGFzc2VzICR7QVJHVn0gb3IgJHtBUkdOfS4gIEluCkBAIC0zNjk0LDcgKzM3MTIsNyBAQAogICAgIC8vIHRoZSB2YWx1ZSBWQVI9YSBpcyBzdWZmaWNpZW50IGZvciB0aGUgdHJ5X2NvbXBpbGUgb3IgdHJ5X3J1biB0byBnZXQgdGhlCiAgICAgLy8gY29ycmVjdCByZXN1bHQuICBDYWxsaW5nIFNldEFyZ3MgaGVyZSB3b3VsZCBicmVhayBzdWNoIHByb2plY3RzIHRoYXQKICAgICAvLyBwcmV2aW91c2x5IGJ1aWx0LiAgSW5zdGVhZCB3ZSB3b3JrIGFyb3VuZCB0aGUgaXNzdWUgYnkgbmV2ZXIgcmVwb3J0aW5nCi0gICAgLy8gdW51c2VkIGFyZ3VtZW50cyBhbmQgaWdub3Jpbmcgb3B0aW9ucyBzdWNoIGFzIC0td2Fybi11bnVzZWQtdmFycy4KKyAgICAvLyB1bnVzZWQgYXJndW1lbnRzIGFuZCBpZ25vcmluZyBvcHRpb25zIHN1Y2ggYXMgLS1uby13YXJuLXVudXNlZC1jbGkuCiAgICAgY20uU2V0V2FyblVudXNlZENsaShmYWxzZSk7CiAgICAgLy8gY20uU2V0QXJncygqY21ha2VBcmdzLCB0cnVlKTsKIApAQCAtMzk0OCw2ICszOTY2LDcgQEAKIGludCBjbU1ha2VmaWxlOjpDb25maWd1cmVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb3V0ZmlsZSwgYm9vbCBjb3B5b25seSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXRPbmx5LCBib29sIGVzY2FwZVF1b3RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX3NvdXJjZV9wZXJtaXNzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmV3TGluZVN0eWxlIG5ld0xpbmUpCiB7CiAgIGludCByZXMgPSAxOwpAQCAtMzk3MSw3ICszOTkwLDEzIEBACiAgIHRoaXMtPkFkZENNYWtlT3V0cHV0RmlsZShzb3V0ZmlsZSk7CiAKICAgbW9kZV90IHBlcm0gPSAwOwotICBjbVN5c3RlbVRvb2xzOjpHZXRQZXJtaXNzaW9ucyhzaW5maWxlLCBwZXJtKTsKKyAgaWYgKCF1c2Vfc291cmNlX3Blcm1pc3Npb25zKSB7CisgICAgcGVybSA9IHBlcm0gfCBtb2RlX293bmVyX3JlYWQgfCBtb2RlX293bmVyX3dyaXRlIHwgbW9kZV9ncm91cF9yZWFkIHwKKyAgICAgIG1vZGVfd29ybGRfcmVhZDsKKyAgfSBlbHNlIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpHZXRQZXJtaXNzaW9ucyhzaW5maWxlLCBwZXJtKTsKKyAgfQorCiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gc291dGZpbGUucmZpbmQoJy8nKTsKICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBzb3V0ZmlsZS5zdWJzdHIoMCwgcG9zKTsKQEAgLTM5ODAsNiArNDAwNSwxMyBAQAogCiAgIGlmIChjb3B5b25seSkgewogICAgIGlmICghY21TeXN0ZW1Ub29sczo6Q29weUZpbGVJZkRpZmZlcmVudChzaW5maWxlLCBzb3V0ZmlsZSkpIHsKKyAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0TGFzdFN5c3RlbUVycm9yKCkpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghY21TeXN0ZW1Ub29sczo6U2V0UGVybWlzc2lvbnMoc291dGZpbGUsIHBlcm0pKSB7CisgICAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldExhc3RTeXN0ZW1FcnJvcigpKTsKICAgICAgIHJldHVybiAwOwogICAgIH0KICAgfSBlbHNlIHsKQEAgLTQwMzAsOSArNDA2MiwxNSBAQAogICAgIGZpbi5jbG9zZSgpOwogICAgIGZvdXQuY2xvc2UoKTsKICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkNvcHlGaWxlSWZEaWZmZXJlbnQodGVtcE91dHB1dEZpbGUsIHNvdXRmaWxlKSkgeworICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRMYXN0U3lzdGVtRXJyb3IoKSk7CiAgICAgICByZXMgPSAwOwogICAgIH0gZWxzZSB7Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpTZXRQZXJtaXNzaW9ucyhzb3V0ZmlsZSwgcGVybSk7CisgICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OlNldFBlcm1pc3Npb25zKHNvdXRmaWxlLCBwZXJtKSkgeworICAgICAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0TGFzdFN5c3RlbUVycm9yKCkpOworICAgICAgICByZXMgPSAwOworICAgICAgfQogICAgIH0KICAgICBjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKHRlbXBPdXRwdXRGaWxlKTsKICAgfQpAQCAtNDA1MSw3ICs0MDg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwogfQogCi1jb25zdCBjaGFyKiBjbU1ha2VmaWxlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKK2NtUHJvcCBjbU1ha2VmaWxlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgLy8gQ2hlY2sgZm9yIGNvbXB1dGVkIHByb3BlcnRpZXMuCiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CkBAIC00MDY0LDEzICs0MTAyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci5maXJzdDsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICBvdXRwdXQgPSBjbUpvaW4oa2V5cywgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KIAogICByZXR1cm4gdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eShwcm9wKTsKIH0KIAotY29uc3QgY2hhciogY21NYWtlZmlsZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGJvb2wgY2hhaW4pIGNvbnN0CitjbVByb3AgY21NYWtlZmlsZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGJvb2wgY2hhaW4pIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldFByb3BlcnR5KHByb3AsIGNoYWluKTsKIH0KQEAgLTQxMjksOCArNDE2Nyw4IEBACiB2b2lkIGNtTWFrZWZpbGU6OkFkZENNYWtlRGVwZW5kRmlsZXNGcm9tVXNlcigpCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBzOwotICBpZiAoY29uc3QgY2hhciogZGVwc19zdHIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQ01BS0VfQ09ORklHVVJFX0RFUEVORFMiKSkgewotICAgIGNtRXhwYW5kTGlzdChkZXBzX3N0ciwgZGVwcyk7CisgIGlmIChjbVByb3AgZGVwc19zdHIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQ01BS0VfQ09ORklHVVJFX0RFUEVORFMiKSkgeworICAgIGNtRXhwYW5kTGlzdCgqZGVwc19zdHIsIGRlcHMpOwogICB9CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGRlcCA6IGRlcHMpIHsKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgoZGVwKSkgewpAQCAtNDE4OSw4ICs0MjI3LDYgQEAKIAogICB0aGlzLT5Qb3BMb29wQmxvY2tCYXJyaWVyKCk7CiAKLSAgdGhpcy0+Q2hlY2tGb3JVbnVzZWRWYXJpYWJsZXMoKTsKLQogICB0aGlzLT5Qb3BTbmFwc2hvdCgpOwogfQogCkBAIC00MjI1LDcgKzQyNjEsNyBAQAogICAgIG5ldyBjbVRhcmdldChuYW1lLCB0eXBlLAogICAgICAgICAgICAgICAgICBnbG9iYWwgPyBjbVRhcmdldDo6VmlzaWJpbGl0eUltcG9ydGVkR2xvYmFsbHkKICAgICAgICAgICAgICAgICAgICAgICAgIDogY21UYXJnZXQ6OlZpc2liaWxpdHlJbXBvcnRlZCwKLSAgICAgICAgICAgICAgICAgdGhpcywgdHJ1ZSkpOworICAgICAgICAgICAgICAgICB0aGlzLCBjbVRhcmdldDo6UGVyQ29uZmlnOjpZZXMpKTsKIAogICAvLyBBZGQgdG8gdGhlIHNldCBvZiBhdmFpbGFibGUgaW1wb3J0ZWQgdGFyZ2V0cy4KICAgdGhpcy0+SW1wb3J0ZWRUYXJnZXRzW25hbWVdID0gdGFyZ2V0LmdldCgpOwpAQCAtNDI0MSw3ICs0Mjc3LDE1IEBACiB7CiAgIC8vIExvb2sgZm9yIGFuIGltcG9ydGVkIHRhcmdldC4gIFRoZXNlIHRha2UgcHJpb3JpdHkgYmVjYXVzZSB0aGV5CiAgIC8vIGFyZSBtb3JlIGxvY2FsIGluIHNjb3BlIGFuZCBkbyBub3QgaGF2ZSB0byBiZSBnbG9iYWxseSB1bmlxdWUuCi0gIGF1dG8gaW1wb3J0ZWQgPSB0aGlzLT5JbXBvcnRlZFRhcmdldHMuZmluZChuYW1lKTsKKyAgYXV0byB0YXJnZXROYW1lID0gbmFtZTsKKyAgaWYgKCFleGNsdWRlQWxpYXNlcykgeworICAgIC8vIExvb2sgZm9yIGxvY2FsIGFsaWFzIHRhcmdldHMuCisgICAgYXV0byBhbGlhcyA9IHRoaXMtPkFsaWFzVGFyZ2V0cy5maW5kKG5hbWUpOworICAgIGlmIChhbGlhcyAhPSB0aGlzLT5BbGlhc1RhcmdldHMuZW5kKCkpIHsKKyAgICAgIHRhcmdldE5hbWUgPSBhbGlhcy0+c2Vjb25kOworICAgIH0KKyAgfQorICBhdXRvIGltcG9ydGVkID0gdGhpcy0+SW1wb3J0ZWRUYXJnZXRzLmZpbmQodGFyZ2V0TmFtZSk7CiAgIGlmIChpbXBvcnRlZCAhPSB0aGlzLT5JbXBvcnRlZFRhcmdldHMuZW5kKCkpIHsKICAgICByZXR1cm4gaW1wb3J0ZWQtPnNlY29uZDsKICAgfQpAQCAtNDI1Nyw3ICs0MzAxLDcgQEAKIAogYm9vbCBjbU1ha2VmaWxlOjpJc0FsaWFzKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAogewotICBpZiAoY21Db250YWlucyh0aGlzLT5BbGlhc1RhcmdldHMsIG5hbWUpKSB7CisgIGlmIChjbTo6Y29udGFpbnModGhpcy0+QWxpYXNUYXJnZXRzLCBuYW1lKSkgewogICAgIHJldHVybiB0cnVlOwogICB9CiAgIHJldHVybiB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNBbGlhcyhuYW1lKTsKQEAgLTQ0OTgsNyArNDU0Miw3IEBACiAKICAgLy8gRGVwcmVjYXRlIG9sZCBwb2xpY2llcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IHJlcXVpcmUgYSBsb3QKICAgLy8gb2YgY29kZSB0byBtYWludGFpbiB0aGUgb2xkIGJlaGF2aW9yLgotICBpZiAoc3RhdHVzID09IGNtUG9saWNpZXM6Ok9MRCAmJiBpZCA8PSBjbVBvbGljaWVzOjpDTVAwMDY5ICYmCisgIGlmIChzdGF0dXMgPT0gY21Qb2xpY2llczo6T0xEICYmIGlkIDw9IGNtUG9saWNpZXM6OkNNUDAwNzIgJiYKICAgICAgICEodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRJc0luVHJ5Q29tcGlsZSgpICYmCiAgICAgICAgICgKICAgICAgICAgICAvLyBQb2xpY2llcyBzZXQgYnkgY21Db3JlVHJ5Q29tcGlsZTo6VHJ5Q29tcGlsZUNvZGUuCkBAIC00NTQwLDcgKzQ1ODQsNyBAQAogICAvLyBjbVN0YXRlU25hcHNob3QgbWFuYWdlcyBuZXN0ZWQgcG9saWN5IHNjb3BlcyB3aXRoaW4gaXQuCiAgIC8vIFNpbmNlIHRoZSBzY29wZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzbmFwc2hvdCBpcyBjbG9zaW5nLAogICAvLyByZWplY3QgYW55IHN0aWxsLW9wZW4gbmVzdGVkIHBvbGljeSBzY29wZXMgd2l0aCBhbiBlcnJvci4KLSAgd2hpbGUgKCF0aGlzLT5TdGF0ZVNuYXBzaG90LkNhblBvcFBvbGljeVNjb3BlKCkpIHsKKyAgd2hpbGUgKHRoaXMtPlN0YXRlU25hcHNob3QuQ2FuUG9wUG9saWN5U2NvcGUoKSkgewogICAgIGlmIChyZXBvcnRFcnJvcikgewogICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiY21ha2VfcG9saWN5IFBVU0ggd2l0aG91dCBtYXRjaGluZyBQT1AiKTsKQEAgLTQ1NTYsNyArNDYwMCw4IEBACiBib29sIGNtTWFrZWZpbGU6OlNldFBvbGljeVZlcnNpb24oc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2ZXJzaW9uX21heCkKIHsKLSAgcmV0dXJuIGNtUG9saWNpZXM6OkFwcGx5UG9saWN5VmVyc2lvbih0aGlzLCB2ZXJzaW9uX21pbiwgdmVyc2lvbl9tYXgpOworICByZXR1cm4gY21Qb2xpY2llczo6QXBwbHlQb2xpY3lWZXJzaW9uKHRoaXMsIHZlcnNpb25fbWluLCB2ZXJzaW9uX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVBvbGljaWVzOjpXYXJuQ29tcGF0OjpPbik7CiB9CiAKIGJvb2wgY21NYWtlZmlsZTo6SGFzQ01QMDA1NEFscmVhZHlCZWVuUmVwb3J0ZWQoCkBAIC00NTkyLDY3NiArNDYzNyw2IEBACiAgIHJldHVybiBpZ25vcmVFcnJvcnM7CiB9CiAKLSNkZWZpbmUgRkVBVFVSRV9TVFJJTkcoRikgLCAjRgotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENfRkVBVFVSRVNbXSA9IHsgbnVsbHB0ciBGT1JfRUFDSF9DX0ZFQVRVUkUoCi0gIEZFQVRVUkVfU1RSSU5HKSB9OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1hYX0ZFQVRVUkVTW10gPSB7IG51bGxwdHIgRk9SX0VBQ0hfQ1hYX0ZFQVRVUkUoCi0gIEZFQVRVUkVfU1RSSU5HKSB9OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1VEQV9GRUFUVVJFU1tdID0geyBudWxscHRyIEZPUl9FQUNIX0NVREFfRkVBVFVSRSgKLSAgRkVBVFVSRV9TVFJJTkcpIH07Ci0jdW5kZWYgRkVBVFVSRV9TVFJJTkcKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENfU1RBTkRBUkRTW10gPSB7ICI5MCIsICI5OSIsICIxMSIgfTsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDWFhfU1RBTkRBUkRTW10gPSB7ICI5OCIsICIxMSIsICIxNCIsICIxNyIsICIyMCIgfTsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDVURBX1NUQU5EQVJEU1tdID0geyAiMDMiLCAiMTEiLCAiMTQiLCAiMTciLCAiMjAiIH07Ci0KLWJvb2wgY21NYWtlZmlsZTo6QWRkUmVxdWlyZWRUYXJnZXRGZWF0dXJlKGNtVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKLXsKLSAgaWYgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChmZWF0dXJlKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfRkVBVFVSRVMiLCBmZWF0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHN0ZDo6c3RyaW5nIGxhbmc7Ci0gIGlmICghdGhpcy0+Q29tcGlsZUZlYXR1cmVLbm93bih0YXJnZXQsIGZlYXR1cmUsIGxhbmcsIGVycm9yKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGNvbnN0IGNoYXIqIGZlYXR1cmVzID0gdGhpcy0+Q29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKGxhbmcsIGVycm9yKTsKLSAgaWYgKCFmZWF0dXJlcykgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdmFpbGFibGVGZWF0dXJlcyA9IGNtRXhwYW5kZWRMaXN0KGZlYXR1cmVzKTsKLSAgaWYgKCFjbUNvbnRhaW5zKGF2YWlsYWJsZUZlYXR1cmVzLCBmZWF0dXJlKSkgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgIGUgPDwgIlRoZSBjb21waWxlciBmZWF0dXJlIFwiIiA8PCBmZWF0dXJlIDw8ICJcIiBpcyBub3Qga25vd24gdG8gIiA8PCBsYW5nCi0gICAgICA8PCAiIGNvbXBpbGVyXG5cIiIKLSAgICAgIDw8IHRoaXMtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpCi0gICAgICA8PCAiXCJcbnZlcnNpb24gIgotICAgICAgPDwgdGhpcy0+R2V0RGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKyAiX0NPTVBJTEVSX1ZFUlNJT04iKSA8PCAiLiI7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAqZXJyb3IgPSBlLnN0cigpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX0ZFQVRVUkVTIiwgZmVhdHVyZSk7Ci0KLSAgaWYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIk9CSkMiKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q0ZlYXR1cmUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nLCBlcnJvcik7Ci0gIH0KLSAgaWYgKGxhbmcgPT0gIkNVREEiKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q3VkYUZlYXR1cmUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nLCBlcnJvcik7Ci0gIH0KLSAgcmV0dXJuIHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q3h4RmVhdHVyZSh0YXJnZXQsIGZlYXR1cmUsIGxhbmcsIGVycm9yKTsKLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpDb21waWxlRmVhdHVyZUtub3duKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKSBjb25zdAotewotICBhc3NlcnQoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGZlYXR1cmUpID09IHN0ZDo6c3RyaW5nOjpucG9zKTsKLQotICBib29sIGlzQ0ZlYXR1cmUgPQotICAgIHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfRkVBVFVSRVMpICsgMSwgY206OmNlbmQoQ19GRUFUVVJFUyksCi0gICAgICAgICAgICAgICAgIGNtU3RyQ21wKGZlYXR1cmUpKSAhPSBjbTo6Y2VuZChDX0ZFQVRVUkVTKTsKLSAgaWYgKGlzQ0ZlYXR1cmUpIHsKLSAgICBsYW5nID0gIkMiOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGJvb2wgaXNDeHhGZWF0dXJlID0KLSAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDWFhfRkVBVFVSRVMpICsgMSwgY206OmNlbmQoQ1hYX0ZFQVRVUkVTKSwKLSAgICAgICAgICAgICAgICAgY21TdHJDbXAoZmVhdHVyZSkpICE9IGNtOjpjZW5kKENYWF9GRUFUVVJFUyk7Ci0gIGlmIChpc0N4eEZlYXR1cmUpIHsKLSAgICBsYW5nID0gIkNYWCI7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgYm9vbCBpc0N1ZGFGZWF0dXJlID0KLSAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDVURBX0ZFQVRVUkVTKSArIDEsIGNtOjpjZW5kKENVREFfRkVBVFVSRVMpLAotICAgICAgICAgICAgICAgICBjbVN0ckNtcChmZWF0dXJlKSkgIT0gY206OmNlbmQoQ1VEQV9GRUFUVVJFUyk7Ci0gIGlmIChpc0N1ZGFGZWF0dXJlKSB7Ci0gICAgbGFuZyA9ICJDVURBIjsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKLSAgaWYgKGVycm9yKSB7Ci0gICAgZSA8PCAic3BlY2lmaWVkIjsKLSAgfSBlbHNlIHsKLSAgICBlIDw8ICJTcGVjaWZpZWQiOwotICB9Ci0gIGUgPDwgIiB1bmtub3duIGZlYXR1cmUgXCIiIDw8IGZlYXR1cmUKLSAgICA8PCAiXCIgZm9yICIKLSAgICAgICAidGFyZ2V0IFwiIgotICAgIDw8IHRhcmdldC0+R2V0TmFtZSgpIDw8ICJcIi4iOwotICBpZiAoZXJyb3IpIHsKLSAgICAqZXJyb3IgPSBlLnN0cigpOwotICB9IGVsc2UgewotICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotY29uc3QgY2hhciogY21NYWtlZmlsZTo6Q29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKLXsKLSAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExhbmd1YWdlRW5hYmxlZChsYW5nKSkgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgIGlmIChlcnJvcikgewotICAgICAgZSA8PCAiY2Fubm90IjsKLSAgICB9IGVsc2UgewotICAgICAgZSA8PCAiQ2Fubm90IjsKLSAgICB9Ci0gICAgZSA8PCAiIHVzZSBmZWF0dXJlcyBmcm9tIG5vbi1lbmFibGVkIGxhbmd1YWdlICIgPDwgbGFuZzsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICplcnJvciA9IGUuc3RyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkJhY2t0cmFjZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotICB9Ci0KLSAgY29uc3QgY2hhciogZmVhdHVyZXNLbm93biA9Ci0gICAgdGhpcy0+R2V0RGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKyAiX0NPTVBJTEVfRkVBVFVSRVMiKTsKLQotICBpZiAoIWZlYXR1cmVzS25vd24gfHwgISpmZWF0dXJlc0tub3duKSB7Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICBlIDw8ICJubyI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGUgPDwgIk5vIjsKLSAgICB9Ci0gICAgZSA8PCAiIGtub3duIGZlYXR1cmVzIGZvciAiIDw8IGxhbmcgPDwgIiBjb21waWxlclxuXCIiCi0gICAgICA8PCB0aGlzLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKyAiX0NPTVBJTEVSX0lEIikKLSAgICAgIDw8ICJcIlxudmVyc2lvbiAiCi0gICAgICA8PCB0aGlzLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKyAiX0NPTVBJTEVSX1ZFUlNJT04iKSA8PCAiLiI7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAqZXJyb3IgPSBlLnN0cigpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICByZXR1cm4gZmVhdHVyZXNLbm93bjsKLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpIYXZlU3RhbmRhcmRBdmFpbGFibGUoY21UYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUpIGNvbnN0Ci17Ci0gIGlmIChsYW5nID09ICJDIiB8fCBsYW5nID09ICJPQkpDIikgewotICAgIHJldHVybiB0aGlzLT5IYXZlQ1N0YW5kYXJkQXZhaWxhYmxlKHRhcmdldCwgZmVhdHVyZSwgbGFuZyk7Ci0gIH0KLSAgaWYgKGxhbmcgPT0gIkNVREEiKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkhhdmVDdWRhU3RhbmRhcmRBdmFpbGFibGUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nKTsKLSAgfQotICByZXR1cm4gdGhpcy0+SGF2ZUN4eFN0YW5kYXJkQXZhaWxhYmxlKHRhcmdldCwgZmVhdHVyZSwgbGFuZyk7Ci19Ci0KLWJvb2wgY21NYWtlZmlsZTo6SGF2ZUNTdGFuZGFyZEF2YWlsYWJsZShjbVRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdAotewotICBjb25zdCBjaGFyKiBkZWZhdWx0Q1N0YW5kYXJkID0KLSAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7Ci0gIGlmICghZGVmYXVsdENTdGFuZGFyZCkgewotICAgIHRoaXMtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwKLSAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLAotICAgICAgICAgICAgICAgIl9TVEFOREFSRF9ERUZBVUxUIGlzIG5vdCBzZXQuICBDT01QSUxFX0ZFQVRVUkVTIHN1cHBvcnQgIgotICAgICAgICAgICAgICAgIm5vdCBmdWxseSBjb25maWd1cmVkIGZvciB0aGlzIGNvbXBpbGVyLiIpKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IHRyeSB0byBsb29rdXAgdGhlIGRlZmF1bHQgc3RhbmRhcmQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgaWYgKHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGRlZmF1bHRDU3RhbmRhcmQpKSA9PSBjbTo6Y2VuZChDX1NUQU5EQVJEUykpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoIlRoZSBDTUFLRV8iLCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgdmFyaWFibGUgY29udGFpbnMgYW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZTogXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q1N0YW5kYXJkLCAiXCIuIik7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwgZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgYm9vbCBuZWVkQzkwID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEM5OSA9IGZhbHNlOwotICBib29sIG5lZWRDMTEgPSBmYWxzZTsKLQotICB0aGlzLT5DaGVja05lZWRlZENMYW5ndWFnZShmZWF0dXJlLCBsYW5nLCBuZWVkQzkwLCBuZWVkQzk5LCBuZWVkQzExKTsKLQotICBjb25zdCBjaGFyKiBleGlzdGluZ0NTdGFuZGFyZCA9Ci0gICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOwotICBpZiAoIWV4aXN0aW5nQ1N0YW5kYXJkKSB7Ci0gICAgZXhpc3RpbmdDU3RhbmRhcmQgPSBkZWZhdWx0Q1N0YW5kYXJkOwotICB9Ci0KLSAgaWYgKHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ1N0YW5kYXJkKSkgPT0gY206OmNlbmQoQ19TVEFOREFSRFMpKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgZSA9IGNtU3RyQ2F0KAotICAgICAgIlRoZSAiLCBsYW5nLCAiX1NUQU5EQVJEIHByb3BlcnR5IG9uIHRhcmdldCBcIiIsIHRhcmdldC0+R2V0TmFtZSgpLAotICAgICAgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsIGV4aXN0aW5nQ1N0YW5kYXJkLCAiXCIuIik7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ0l0ID0gZXhpc3RpbmdDU3RhbmRhcmQKLSAgICA/IHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ1N0YW5kYXJkKSkKLSAgICA6IGNtOjpjZW5kKENfU1RBTkRBUkRTKTsKLQotICBpZiAobmVlZEMxMSAmJiBleGlzdGluZ0NTdGFuZGFyZCAmJgotICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKCIxMSIpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAobmVlZEM5OSAmJiBleGlzdGluZ0NTdGFuZGFyZCAmJgotICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKCI5OSIpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAobmVlZEM5MCAmJiBleGlzdGluZ0NTdGFuZGFyZCAmJgotICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKCI5MCIpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpJc0xhdGVyU3RhbmRhcmQoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHJocykKLXsKLSAgaWYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIk9CSkMiKSB7Ci0gICAgY29uc3QgY2hhciogY29uc3QqIHJoc0l0ID0gc3RkOjpmaW5kX2lmKAotICAgICAgY206OmNiZWdpbihDX1NUQU5EQVJEUyksIGNtOjpjZW5kKENfU1RBTkRBUkRTKSwgY21TdHJDbXAocmhzKSk7Ci0KLSAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHJoc0l0LCBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKGxocykpICE9Ci0gICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyk7Ci0gIH0KLSAgaWYgKGxhbmcgPT0gIkNVREEiKSB7Ci0gICAgY29uc3QgY2hhciogY29uc3QqIHJoc0l0ID0gc3RkOjpmaW5kX2lmKAotICAgICAgY206OmNiZWdpbihDVURBX1NUQU5EQVJEUyksIGNtOjpjZW5kKENVREFfU1RBTkRBUkRTKSwgY21TdHJDbXAocmhzKSk7Ci0KLSAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHJoc0l0LCBjbTo6Y2VuZChDVURBX1NUQU5EQVJEUyksIGNtU3RyQ21wKGxocykpICE9Ci0gICAgICBjbTo6Y2VuZChDVURBX1NUQU5EQVJEUyk7Ci0gIH0KLQotICBjb25zdCBjaGFyKiBjb25zdCogcmhzSXQgPSBzdGQ6OmZpbmRfaWYoCi0gICAgY206OmNiZWdpbihDWFhfU1RBTkRBUkRTKSwgY206OmNlbmQoQ1hYX1NUQU5EQVJEUyksIGNtU3RyQ21wKHJocykpOwotCi0gIHJldHVybiBzdGQ6OmZpbmRfaWYocmhzSXQsIGNtOjpjZW5kKENYWF9TVEFOREFSRFMpLCBjbVN0ckNtcChsaHMpKSAhPQotICAgIGNtOjpjZW5kKENYWF9TVEFOREFSRFMpOwotfQotCi1ib29sIGNtTWFrZWZpbGU6OkhhdmVDeHhTdGFuZGFyZEF2YWlsYWJsZShjbVRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3QKLXsKLSAgY29uc3QgY2hhciogZGVmYXVsdEN4eFN0YW5kYXJkID0KLSAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7Ci0gIGlmICghZGVmYXVsdEN4eFN0YW5kYXJkKSB7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OklOVEVSTkFMX0VSUk9SLAotICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsCi0gICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgaXMgbm90IHNldC4gIENPTVBJTEVfRkVBVFVSRVMgc3VwcG9ydCAiCi0gICAgICAgICAgICAgICAibm90IGZ1bGx5IGNvbmZpZ3VyZWQgZm9yIHRoaXMgY29tcGlsZXIuIikpOwotICAgIC8vIFJldHVybiB0cnVlIHNvIHRoZSBjYWxsZXIgZG9lcyBub3QgdHJ5IHRvIGxvb2t1cCB0aGUgZGVmYXVsdCBzdGFuZGFyZC4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAoc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1hYX1NUQU5EQVJEUyksIGNtOjpjZW5kKENYWF9TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGRlZmF1bHRDeHhTdGFuZGFyZCkpID09IGNtOjpjZW5kKENYWF9TVEFOREFSRFMpKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgZSA9Ci0gICAgICBjbVN0ckNhdCgiVGhlIENNQUtFXyIsIGxhbmcsICJfU1RBTkRBUkRfREVGQVVMVCB2YXJpYWJsZSBjb250YWlucyBhbiAiLAotICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWU6IFwiIiwgZGVmYXVsdEN4eFN0YW5kYXJkLCAiXCIuIik7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwgZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgYm9vbCBuZWVkQ3h4OTggPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MTEgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MTQgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MTcgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MjAgPSBmYWxzZTsKLSAgdGhpcy0+Q2hlY2tOZWVkZWRDeHhMYW5ndWFnZShmZWF0dXJlLCBsYW5nLCBuZWVkQ3h4OTgsIG5lZWRDeHgxMSwgbmVlZEN4eDE0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRDeHgxNywgbmVlZEN4eDIwKTsKLQotICBjb25zdCBjaGFyKiBleGlzdGluZ0N4eFN0YW5kYXJkID0KLSAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkQiKSk7Ci0gIGlmICghZXhpc3RpbmdDeHhTdGFuZGFyZCkgewotICAgIGV4aXN0aW5nQ3h4U3RhbmRhcmQgPSBkZWZhdWx0Q3h4U3RhbmRhcmQ7Ci0gIH0KLQotICBjb25zdCBjaGFyKiBjb25zdCogZXhpc3RpbmdDeHhMZXZlbCA9Ci0gICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1hYX1NUQU5EQVJEUyksIGNtOjpjZW5kKENYWF9TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICBjbVN0ckNtcChleGlzdGluZ0N4eFN0YW5kYXJkKSk7Ci0gIGlmIChleGlzdGluZ0N4eExldmVsID09IGNtOjpjZW5kKENYWF9TVEFOREFSRFMpKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgZSA9IGNtU3RyQ2F0KAotICAgICAgIlRoZSAiLCBsYW5nLCAiX1NUQU5EQVJEIHByb3BlcnR5IG9uIHRhcmdldCBcIiIsIHRhcmdldC0+R2V0TmFtZSgpLAotICAgICAgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsIGV4aXN0aW5nQ3h4U3RhbmRhcmQsICJcIi4iKTsKLSAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCi0gIGNvbnN0IGNoYXIqIGNvbnN0KiBuZWVkQ3h4TGV2ZWwgPQotICAgIG5lZWRDeHgyMCA/ICZDWFhfU1RBTkRBUkRTWzRdCi0gICAgOiBuZWVkQ3h4MTcgPyAmQ1hYX1NUQU5EQVJEU1szXQotICAgIDogbmVlZEN4eDE0ID8gJkNYWF9TVEFOREFSRFNbMl0KLSAgICA6IG5lZWRDeHgxMSA/ICZDWFhfU1RBTkRBUkRTWzFdCi0gICAgOiBuZWVkQ3h4OTggPyAmQ1hYX1NUQU5EQVJEU1swXQotICAgIDogbnVsbHB0cjsKLSAgLyogY2xhbmctZm9ybWF0IG9uICovCi0KLSAgcmV0dXJuICFuZWVkQ3h4TGV2ZWwgfHwgbmVlZEN4eExldmVsIDw9IGV4aXN0aW5nQ3h4TGV2ZWw7Ci19Ci0KLXZvaWQgY21NYWtlZmlsZTo6Q2hlY2tOZWVkZWRDeHhMYW5ndWFnZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBuZWVkQ3h4OTgsIGJvb2wmIG5lZWRDeHgxMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBuZWVkQ3h4MTQsIGJvb2wmIG5lZWRDeHgxNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBuZWVkQ3h4MjApIGNvbnN0Ci17Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQ3h4OTggPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiOThfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDeHg5OCk7Ci0gICAgbmVlZEN4eDk4ID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BDeHgxMSA9Ci0gICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICIxMV9DT01QSUxFX0ZFQVRVUkVTIikpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEN4eDExKTsKLSAgICBuZWVkQ3h4MTEgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKLSAgfQotICBpZiAoY29uc3QgY2hhciogcHJvcEN4eDE0ID0KLSAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjE0X0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQ3h4MTQpOwotICAgIG5lZWRDeHgxNCA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOwotICB9Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQ3h4MTcgPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiMTdfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDeHgxNyk7Ci0gICAgbmVlZEN4eDE3ID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BDeHgyMCA9Ci0gICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICIyMF9DT01QSUxFX0ZFQVRVUkVTIikpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEN4eDIwKTsKLSAgICBuZWVkQ3h4MjAgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKLSAgfQotfQotCi1ib29sIGNtTWFrZWZpbGU6OkFkZFJlcXVpcmVkVGFyZ2V0Q3h4RmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKLXsKLSAgYm9vbCBuZWVkQ3h4OTggPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MTEgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MTQgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MTcgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3h4MjAgPSBmYWxzZTsKLQotICB0aGlzLT5DaGVja05lZWRlZEN4eExhbmd1YWdlKGZlYXR1cmUsIGxhbmcsIG5lZWRDeHg5OCwgbmVlZEN4eDExLCBuZWVkQ3h4MTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZEN4eDE3LCBuZWVkQ3h4MjApOwotCi0gIGNvbnN0IGNoYXIqIGV4aXN0aW5nQ3h4U3RhbmRhcmQgPQotICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpKTsKLSAgaWYgKGV4aXN0aW5nQ3h4U3RhbmRhcmQgPT0gbnVsbHB0cikgewotICAgIGNvbnN0IGNoYXIqIGRlZmF1bHRDeHhTdGFuZGFyZCA9Ci0gICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7Ci0gICAgaWYgKGRlZmF1bHRDeHhTdGFuZGFyZCAmJiAqZGVmYXVsdEN4eFN0YW5kYXJkKSB7Ci0gICAgICBleGlzdGluZ0N4eFN0YW5kYXJkID0gZGVmYXVsdEN4eFN0YW5kYXJkOwotICAgIH0KLSAgfQotICBjb25zdCBjaGFyKiBjb25zdCogZXhpc3RpbmdDeHhMZXZlbCA9IG51bGxwdHI7Ci0gIGlmIChleGlzdGluZ0N4eFN0YW5kYXJkKSB7Ci0gICAgZXhpc3RpbmdDeHhMZXZlbCA9Ci0gICAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDWFhfU1RBTkRBUkRTKSwgY206OmNlbmQoQ1hYX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgY21TdHJDbXAoZXhpc3RpbmdDeHhTdGFuZGFyZCkpOwotICAgIGlmIChleGlzdGluZ0N4eExldmVsID09IGNtOjpjZW5kKENYWF9TVEFOREFSRFMpKSB7Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoCi0gICAgICAgICJUaGUgIiwgbGFuZywgIl9TVEFOREFSRCBwcm9wZXJ0eSBvbiB0YXJnZXQgXCIiLCB0YXJnZXQtPkdldE5hbWUoKSwKLSAgICAgICAgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsIGV4aXN0aW5nQ3h4U3RhbmRhcmQsICJcIi4iKTsKLSAgICAgIGlmIChlcnJvcikgewotICAgICAgICAqZXJyb3IgPSBlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgY29uc3QgY2hhciogY29uc3QqIG5lZWRDeHhMZXZlbCA9Ci0gICAgbmVlZEN4eDIwID8gJkNYWF9TVEFOREFSRFNbNF0KLSAgICA6IG5lZWRDeHgxNyA/ICZDWFhfU1RBTkRBUkRTWzNdCi0gICAgOiBuZWVkQ3h4MTQgPyAmQ1hYX1NUQU5EQVJEU1syXQotICAgIDogbmVlZEN4eDExID8gJkNYWF9TVEFOREFSRFNbMV0KLSAgICA6IG5lZWRDeHg5OCA/ICZDWFhfU1RBTkRBUkRTWzBdCi0gICAgOiBudWxscHRyOwotICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KLQotICBpZiAobmVlZEN4eExldmVsKSB7Ci0gICAgLy8gRW5zdXJlIHRoZSBDKysgbGFuZ3VhZ2UgbGV2ZWwgaXMgaGlnaCBlbm91Z2ggdG8gc3VwcG9ydAotICAgIC8vIHRoZSBuZWVkZWQgQysrIGZlYXR1cmVzLgotICAgIGlmICghZXhpc3RpbmdDeHhMZXZlbCB8fCBleGlzdGluZ0N4eExldmVsIDwgbmVlZEN4eExldmVsKSB7Ci0gICAgICB0YXJnZXQtPlNldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkQiKSwgKm5lZWRDeHhMZXZlbCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgY21NYWtlZmlsZTo6SGF2ZUN1ZGFTdGFuZGFyZEF2YWlsYWJsZShjbVRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdAotewotICBjb25zdCBjaGFyKiBkZWZhdWx0Q3VkYVN0YW5kYXJkID0KLSAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7Ci0gIGlmICghZGVmYXVsdEN1ZGFTdGFuZGFyZCkgewotICAgIHRoaXMtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwKLSAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLAotICAgICAgICAgICAgICAgIl9TVEFOREFSRF9ERUZBVUxUIGlzIG5vdCBzZXQuICBDT01QSUxFX0ZFQVRVUkVTIHN1cHBvcnQgIgotICAgICAgICAgICAgICAgIm5vdCBmdWxseSBjb25maWd1cmVkIGZvciB0aGlzIGNvbXBpbGVyLiIpKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IHRyeSB0byBsb29rdXAgdGhlIGRlZmF1bHQgc3RhbmRhcmQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgaWYgKHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENVREFfU1RBTkRBUkRTKSwgY206OmNlbmQoQ1VEQV9TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGRlZmF1bHRDdWRhU3RhbmRhcmQpKSA9PQotICAgICAgY206OmNlbmQoQ1VEQV9TVEFOREFSRFMpKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgZSA9Ci0gICAgICBjbVN0ckNhdCgiVGhlIENNQUtFXyIsIGxhbmcsICJfU1RBTkRBUkRfREVGQVVMVCB2YXJpYWJsZSBjb250YWlucyBhbiAiLAotICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWU6IFwiIiwgZGVmYXVsdEN1ZGFTdGFuZGFyZCwgIlwiLiIpOwotICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsIGUpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgbmVlZEN1ZGEwMyA9IGZhbHNlOwotICBib29sIG5lZWRDdWRhMTEgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3VkYTE0ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN1ZGExNyA9IGZhbHNlOwotICBib29sIG5lZWRDdWRhMjAgPSBmYWxzZTsKLSAgdGhpcy0+Q2hlY2tOZWVkZWRDdWRhTGFuZ3VhZ2UoZmVhdHVyZSwgbGFuZywgbmVlZEN1ZGEwMywgbmVlZEN1ZGExMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZEN1ZGExNCwgbmVlZEN1ZGExNywgbmVlZEN1ZGEyMCk7Ci0KLSAgY29uc3QgY2hhciogZXhpc3RpbmdDdWRhU3RhbmRhcmQgPQotICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpKTsKLSAgaWYgKCFleGlzdGluZ0N1ZGFTdGFuZGFyZCkgewotICAgIGV4aXN0aW5nQ3VkYVN0YW5kYXJkID0gZGVmYXVsdEN1ZGFTdGFuZGFyZDsKLSAgfQotCi0gIGNvbnN0IGNoYXIqIGNvbnN0KiBleGlzdGluZ0N1ZGFMZXZlbCA9Ci0gICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1VEQV9TVEFOREFSRFMpLCBjbTo6Y2VuZChDVURBX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ3VkYVN0YW5kYXJkKSk7Ci0gIGlmIChleGlzdGluZ0N1ZGFMZXZlbCA9PSBjbTo6Y2VuZChDVURBX1NUQU5EQVJEUykpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoCi0gICAgICAiVGhlICIsIGxhbmcsICJfU1RBTkRBUkQgcHJvcGVydHkgb24gdGFyZ2V0IFwiIiwgdGFyZ2V0LT5HZXROYW1lKCksCi0gICAgICAiXCIgY29udGFpbmVkIGFuIGludmFsaWQgdmFsdWU6IFwiIiwgZXhpc3RpbmdDdWRhU3RhbmRhcmQsICJcIi4iKTsKLSAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCi0gIGNvbnN0IGNoYXIqIGNvbnN0KiBuZWVkQ3VkYUxldmVsID0KLSAgICBuZWVkQ3VkYTIwID8gJkNVREFfU1RBTkRBUkRTWzRdCi0gICAgOiBuZWVkQ3VkYTE3ID8gJkNVREFfU1RBTkRBUkRTWzNdCi0gICAgOiBuZWVkQ3VkYTE0ID8gJkNVREFfU1RBTkRBUkRTWzJdCi0gICAgOiBuZWVkQ3VkYTExID8gJkNVREFfU1RBTkRBUkRTWzFdCi0gICAgOiBuZWVkQ3VkYTAzID8gJkNVREFfU1RBTkRBUkRTWzBdCi0gICAgOiBudWxscHRyOwotICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KLQotICByZXR1cm4gIW5lZWRDdWRhTGV2ZWwgfHwgbmVlZEN1ZGFMZXZlbCA8PSBleGlzdGluZ0N1ZGFMZXZlbDsKLX0KLQotdm9pZCBjbU1ha2VmaWxlOjpDaGVja05lZWRlZEN1ZGFMYW5ndWFnZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDdWRhMDMsIGJvb2wmIG5lZWRDdWRhMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDdWRhMTQsIGJvb2wmIG5lZWRDdWRhMTcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDdWRhMjApIGNvbnN0Ci17Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQ3VkYTAzID0KLSAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjAzX0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQ3VkYTAzKTsKLSAgICBuZWVkQ3VkYTAzID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BDdWRhMTEgPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiMTFfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDdWRhMTEpOwotICAgIG5lZWRDdWRhMTEgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKLSAgfQotICBpZiAoY29uc3QgY2hhciogcHJvcEN1ZGExNCA9Ci0gICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICIxNF9DT01QSUxFX0ZFQVRVUkVTIikpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEN1ZGExNCk7Ci0gICAgbmVlZEN1ZGExNCA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOwotICB9Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQ3VkYTE3ID0KLSAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjE3X0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQ3VkYTE3KTsKLSAgICBuZWVkQ3VkYTE3ID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BDdWRhMjAgPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiMjBfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDdWRhMjApOwotICAgIG5lZWRDdWRhMjAgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKLSAgfQotfQotCi1ib29sIGNtTWFrZWZpbGU6OkFkZFJlcXVpcmVkVGFyZ2V0Q3VkYUZlYXR1cmUoY21UYXJnZXQqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Ci17Ci0gIGJvb2wgbmVlZEN1ZGEwMyA9IGZhbHNlOwotICBib29sIG5lZWRDdWRhMTEgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQ3VkYTE0ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN1ZGExNyA9IGZhbHNlOwotICBib29sIG5lZWRDdWRhMjAgPSBmYWxzZTsKLQotICB0aGlzLT5DaGVja05lZWRlZEN1ZGFMYW5ndWFnZShmZWF0dXJlLCBsYW5nLCBuZWVkQ3VkYTAzLCBuZWVkQ3VkYTExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkQ3VkYTE0LCBuZWVkQ3VkYTE3LCBuZWVkQ3VkYTIwKTsKLQotICBjb25zdCBjaGFyKiBleGlzdGluZ0N1ZGFTdGFuZGFyZCA9Ci0gICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOwotICBpZiAoZXhpc3RpbmdDdWRhU3RhbmRhcmQgPT0gbnVsbHB0cikgewotICAgIGNvbnN0IGNoYXIqIGRlZmF1bHRDdWRhU3RhbmRhcmQgPQotICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9TVEFOREFSRF9ERUZBVUxUIikpOwotICAgIGlmIChkZWZhdWx0Q3VkYVN0YW5kYXJkICYmICpkZWZhdWx0Q3VkYVN0YW5kYXJkKSB7Ci0gICAgICBleGlzdGluZ0N1ZGFTdGFuZGFyZCA9IGRlZmF1bHRDdWRhU3RhbmRhcmQ7Ci0gICAgfQotICB9Ci0gIGNvbnN0IGNoYXIqIGNvbnN0KiBleGlzdGluZ0N1ZGFMZXZlbCA9IG51bGxwdHI7Ci0gIGlmIChleGlzdGluZ0N1ZGFTdGFuZGFyZCkgewotICAgIGV4aXN0aW5nQ3VkYUxldmVsID0KLSAgICAgIHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENVREFfU1RBTkRBUkRTKSwgY206OmNlbmQoQ1VEQV9TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ3VkYVN0YW5kYXJkKSk7Ci0gICAgaWYgKGV4aXN0aW5nQ3VkYUxldmVsID09IGNtOjpjZW5kKENVREFfU1RBTkRBUkRTKSkgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZSA9IGNtU3RyQ2F0KAotICAgICAgICAiVGhlICIsIGxhbmcsICJfU1RBTkRBUkQgcHJvcGVydHkgb24gdGFyZ2V0IFwiIiwgdGFyZ2V0LT5HZXROYW1lKCksCi0gICAgICAgICJcIiBjb250YWluZWQgYW4gaW52YWxpZCB2YWx1ZTogXCIiLCBleGlzdGluZ0N1ZGFTdGFuZGFyZCwgIlwiLiIpOwotICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICplcnJvciA9IGU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkJhY2t0cmFjZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwotICBjb25zdCBjaGFyKiBjb25zdCogbmVlZEN1ZGFMZXZlbCA9Ci0gICAgbmVlZEN1ZGEyMCA/ICZDVURBX1NUQU5EQVJEU1s0XQotICAgIDogbmVlZEN1ZGExNyA/ICZDVURBX1NUQU5EQVJEU1szXQotICAgIDogbmVlZEN1ZGExNCA/ICZDVURBX1NUQU5EQVJEU1syXQotICAgIDogbmVlZEN1ZGExMSA/ICZDVURBX1NUQU5EQVJEU1sxXQotICAgIDogbmVlZEN1ZGEwMyA/ICZDVURBX1NUQU5EQVJEU1swXQotICAgIDogbnVsbHB0cjsKLSAgLyogY2xhbmctZm9ybWF0IG9uICovCi0KLSAgaWYgKG5lZWRDdWRhTGV2ZWwpIHsKLSAgICAvLyBFbnN1cmUgdGhlIENVREEgbGFuZ3VhZ2UgbGV2ZWwgaXMgaGlnaCBlbm91Z2ggdG8gc3VwcG9ydAotICAgIC8vIHRoZSBuZWVkZWQgQ1VEQSBmZWF0dXJlcy4KLSAgICBpZiAoIWV4aXN0aW5nQ3VkYUxldmVsIHx8IGV4aXN0aW5nQ3VkYUxldmVsIDwgbmVlZEN1ZGFMZXZlbCkgewotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ1VEQV9TVEFOREFSRCIsICpuZWVkQ3VkYUxldmVsKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBjbU1ha2VmaWxlOjpDaGVja05lZWRlZENMYW5ndWFnZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGJvb2wmIG5lZWRDOTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDOTksIGJvb2wmIG5lZWRDMTEpIGNvbnN0Ci17Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQzkwID0KLSAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjkwX0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQzkwKTsKLSAgICBuZWVkQzkwID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BDOTkgPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiOTlfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDOTkpOwotICAgIG5lZWRDOTkgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKLSAgfQotICBpZiAoY29uc3QgY2hhciogcHJvcEMxMSA9Ci0gICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICIxMV9DT01QSUxFX0ZFQVRVUkVTIikpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEMxMSk7Ci0gICAgbmVlZEMxMSA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOwotICB9Ci19Ci0KLWJvb2wgY21NYWtlZmlsZTo6QWRkUmVxdWlyZWRUYXJnZXRDRmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKLXsKLSAgYm9vbCBuZWVkQzkwID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEM5OSA9IGZhbHNlOwotICBib29sIG5lZWRDMTEgPSBmYWxzZTsKLQotICB0aGlzLT5DaGVja05lZWRlZENMYW5ndWFnZShmZWF0dXJlLCBsYW5nLCBuZWVkQzkwLCBuZWVkQzk5LCBuZWVkQzExKTsKLQotICBjb25zdCBjaGFyKiBleGlzdGluZ0NTdGFuZGFyZCA9Ci0gICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOwotICBpZiAoZXhpc3RpbmdDU3RhbmRhcmQgPT0gbnVsbHB0cikgewotICAgIGNvbnN0IGNoYXIqIGRlZmF1bHRDU3RhbmRhcmQgPQotICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9TVEFOREFSRF9ERUZBVUxUIikpOwotICAgIGlmIChkZWZhdWx0Q1N0YW5kYXJkICYmICpkZWZhdWx0Q1N0YW5kYXJkKSB7Ci0gICAgICBleGlzdGluZ0NTdGFuZGFyZCA9IGRlZmF1bHRDU3RhbmRhcmQ7Ci0gICAgfQotICB9Ci0gIGlmIChleGlzdGluZ0NTdGFuZGFyZCkgewotICAgIGlmIChzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksIGNtOjpjZW5kKENfU1RBTkRBUkRTKSwKLSAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ1N0YW5kYXJkKSkgPT0gY206OmNlbmQoQ19TVEFOREFSRFMpKSB7Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoCi0gICAgICAgICJUaGUgIiwgbGFuZywgIl9TVEFOREFSRCBwcm9wZXJ0eSBvbiB0YXJnZXQgXCIiLCB0YXJnZXQtPkdldE5hbWUoKSwKLSAgICAgICAgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsIGV4aXN0aW5nQ1N0YW5kYXJkLCAiXCIuIik7Ci0gICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgKmVycm9yID0gZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QmFja3RyYWNlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ0l0ID0gZXhpc3RpbmdDU3RhbmRhcmQKLSAgICA/IHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ1N0YW5kYXJkKSkKLSAgICA6IGNtOjpjZW5kKENfU1RBTkRBUkRTKTsKLQotICBib29sIHNldEM5MCA9IG5lZWRDOTAgJiYgIWV4aXN0aW5nQ1N0YW5kYXJkOwotICBib29sIHNldEM5OSA9IG5lZWRDOTkgJiYgIWV4aXN0aW5nQ1N0YW5kYXJkOwotICBib29sIHNldEMxMSA9IG5lZWRDMTEgJiYgIWV4aXN0aW5nQ1N0YW5kYXJkOwotCi0gIGlmIChuZWVkQzExICYmIGV4aXN0aW5nQ1N0YW5kYXJkICYmCi0gICAgICBleGlzdGluZ0NJdCA8IHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtOjpjZW5kKENfU1RBTkRBUkRTKSwgY21TdHJDbXAoIjExIikpKSB7Ci0gICAgc2V0QzExID0gdHJ1ZTsKLSAgfSBlbHNlIGlmIChuZWVkQzk5ICYmIGV4aXN0aW5nQ1N0YW5kYXJkICYmCi0gICAgICAgICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKCI5OSIpKSkgewotICAgIHNldEM5OSA9IHRydWU7Ci0gIH0gZWxzZSBpZiAobmVlZEM5MCAmJiBleGlzdGluZ0NTdGFuZGFyZCAmJgotICAgICAgICAgICAgIGV4aXN0aW5nQ0l0IDwgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtOjpjZW5kKENfU1RBTkRBUkRTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0ckNtcCgiOTAiKSkpIHsKLSAgICBzZXRDOTAgPSB0cnVlOwotICB9Ci0KLSAgaWYgKHNldEMxMSkgewotICAgIHRhcmdldC0+U2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpLCAiMTEiKTsKLSAgfSBlbHNlIGlmIChzZXRDOTkpIHsKLSAgICB0YXJnZXQtPlNldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkQiKSwgIjk5Iik7Ci0gIH0gZWxzZSBpZiAoc2V0QzkwKSB7Ci0gICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIiksICI5MCIpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCiBjbU1ha2VmaWxlOjpGdW5jdGlvblB1c2hQb3A6OkZ1bmN0aW9uUHVzaFBvcChjbU1ha2VmaWxlKiBtZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtUG9saWNpZXM6OlBvbGljeU1hcCBjb25zdCYgcG0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZS5oIGIvU291cmNlL2NtTWFrZWZpbGUuaAppbmRleCBkOTE4YWJlLi44MGQ4MGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWtlZmlsZS5oCisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21OZXdMaW5lU3R5bGUuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZUxvY2F0aW9uS2luZC5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgpAQCAtMTE3LDYgKzExOCw5IEBACiAKICAgYm9vbCBSZWFkTGlzdEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKTsKIAorICBib29sIFJlYWRMaXN0RmlsZUFzU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aXJ0dWFsRmlsZU5hbWUpOworCiAgIGJvb2wgUmVhZERlcGVuZGVudEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9Qb2xpY3lTY29wZSA9IHRydWUpOwogCkBAIC0xODMsNyArMTg3LDggQEAKICAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsCiAgICAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCiAgICAgYm9vbCB1c2VzX3Rlcm1pbmFsID0gZmFsc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlID0gIiIsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlKTsKIAogICAvKioKICAgICogQ2FsbGVkIGZvciBlYWNoIGZpbGUgd2l0aCBjdXN0b20gY29tbWFuZC4KQEAgLTIwMCw3ICsyMDUsOCBAQAogICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGNvbnN0IENvbW1hbmRTb3VyY2VDYWxsYmFjayYgY2FsbGJhY2sgPSBudWxscHRyLAogICAgIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGVzY2FwZU9sZFN0eWxlID0gdHJ1ZSwKICAgICBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyA9IGZhbHNlLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlID0gIiIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlKTsKICAgdm9pZCBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKQEAgLTIxMSw3ICsyMTcsOCBAQAogICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGNvbnN0IENvbW1hbmRTb3VyY2VDYWxsYmFjayYgY2FsbGJhY2sgPSBudWxscHRyLAogICAgIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGVzY2FwZU9sZFN0eWxlID0gdHJ1ZSwKICAgICBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cyA9IGZhbHNlLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlID0gIiIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlKTsKICAgdm9pZCBBZGRDdXN0b21Db21tYW5kT2xkU3R5bGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCkBAIC0yNzksNyArMjg2LDggQEAKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCiAgICAgY29uc3QgY2hhciogY29tbWVudCA9IG51bGxwdHIsIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLAotICAgIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIpOworICAgIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIsCisgICAgYm9vbCBzdGRQaXBlc1VURjggPSBmYWxzZSk7CiAKICAgLyoqCiAgICAqIEFkZCBhIHN1YmRpcmVjdG9yeSB0byB0aGUgYnVpbGQuCkBAIC0zMTQsNiArMzIyLDEyIEBACiAgIHZvaWQgQWRkQ2FjaGVEZWZpbml0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZG9jLCBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2UgPSBmYWxzZSk7CisgIHZvaWQgQWRkQ2FjaGVEZWZpbml0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRvYywgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlID0gZmFsc2UpCisgIHsKKyAgICBBZGRDYWNoZURlZmluaXRpb24obmFtZSwgdmFsdWUuY19zdHIoKSwgZG9jLCB0eXBlLCBmb3JjZSk7CisgIH0KIAogICAvKioKICAgICogUmVtb3ZlIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBidWlsZC4gIFRoaXMgaXMgbm90IHZhbGlkCkBAIC0zMjgsMTIgKzM0MiwxOSBAQAogICAgKi8KICAgdm9pZCBTZXRQcm9qZWN0TmFtZShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSk7CiAKLSAgLyoqIEdldCB0aGUgY29uZmlndXJhdGlvbnMgdG8gYmUgZ2VuZXJhdGVkLiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0Q29uZmlndXJhdGlvbnMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb25maWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpbmdsZSA9IHRydWUpIGNvbnN0OworICAvKiBHZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLworICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0Q29uZmlndXJhdGlvbigpIGNvbnN0OworCisgIGVudW0gR2VuZXJhdG9yQ29uZmlnUXVlcnkKKyAgeworICAgIEluY2x1ZGVFbXB0eUNvbmZpZywgLy8gSW5jbHVkZSAiIiBha2Egbm9jb25maWcKKyAgICBFeGNsdWRlRW1wdHlDb25maWcsIC8vIEV4Y2x1ZGUgIiIgYWthIG5vY29uZmlnCisgICAgT25seU11bHRpQ29uZmlnLAorICB9OwogCiAgIC8qKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBkZXBlbmRlbmN5IGNoZWNraW5nLiAgKi8KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldEdlbmVyYXRvckNvbmZpZ3MoKSBjb25zdDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgR2VuZXJhdG9yQ29uZmlnUXVlcnkgbW9kZSkgY29uc3Q7CiAKICAgLyoqCiAgICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeS4KQEAgLTM0Miw3ICszNjMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzcmNzLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVGcm9tQWxsID0gZmFsc2UpOwotICB2b2lkIEFkZEFsaWFzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWJuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdGd0KTsKKyAgdm9pZCBBZGRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgbGlibmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHRndCwKKyAgICAgICAgICAgICAgICBib29sIGdsb2JhbGx5VmlzaWJsZSA9IHRydWUpOwogCiAgIC8vQHsKICAgLyoqCkBAIC00MDgsNyArNDMwLDggQEAKICAgfQogICBjb25zdCBjaGFyKiBHZXRJbmNsdWRlUmVndWxhckV4cHJlc3Npb24oKSBjb25zdAogICB7Ci0gICAgcmV0dXJuIHRoaXMtPkdldFByb3BlcnR5KCJJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTiIpOworICAgIGNtUHJvcCBwID0gdGhpcy0+R2V0UHJvcGVydHkoIklOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OIik7CisgICAgcmV0dXJuIHAgPyBwLT5jX3N0cigpIDogbnVsbHB0cjsKICAgfQogCiAgIC8qKgpAQCAtNDk3LDYgKzUyMCw4IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRTYWZlRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OwogICBjb25zdCBzdGQ6OnN0cmluZyYgR2V0UmVxdWlyZWREZWZpbml0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdDsKICAgYm9vbCBJc0RlZmluaXRpb25TZXQoY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdDsKKyAgYm9vbCBHZXREZWZFeHBhbmRMaXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW1wdHlBcmdzID0gZmFsc2UpIGNvbnN0OwogICAvKioKICAgICogR2V0IHRoZSBsaXN0IG9mIGFsbCB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgc3BhY2UuIElmIGFyZ3VtZW50CiAgICAqIGNhY2hlb25seSBpcyBzcGVjaWZpZWQgYW5kIGlzIGdyZWF0ZXIgdGhhbiAwLCB0aGVuIG9ubHkgY2FjaGUKQEAgLTY2OCw2ICs2OTMsNyBAQAogICAgKi8KICAgaW50IENvbmZpZ3VyZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGluZmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIG91dGZpbGUsCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29weW9ubHksIGJvb2wgYXRPbmx5LCBib29sIGVzY2FwZVF1b3RlcywKKyAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc291cmNlX3Blcm1pc3Npb25zLAogICAgICAgICAgICAgICAgICAgICBjbU5ld0xpbmVTdHlsZSA9IGNtTmV3TGluZVN0eWxlKCkpOwogCiAgIC8qKgpAQCAtNzg2LDggKzgxMiw4IEBACiAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKTsKICAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7Ci0gIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGJvb2wgY2hhaW4pIGNvbnN0OworICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OworICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGJvb2wgY2hhaW4pIGNvbnN0OwogICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFByb3BlcnR5S2V5cygpIGNvbnN0OwogCkBAIC05MDcsMjEgKzkzMyw2IEBACiAKICAgYm9vbCBQb2xpY3lPcHRpb25hbFdhcm5pbmdFbmFibGVkKHN0ZDo6c3RyaW5nIGNvbnN0JiB2YXIpOwogCi0gIGJvb2wgQWRkUmVxdWlyZWRUYXJnZXRGZWF0dXJlKGNtVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IgPSBudWxscHRyKSBjb25zdDsKLQotICBib29sIENvbXBpbGVGZWF0dXJlS25vd24oY21UYXJnZXQgY29uc3QqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgbGFuZywgc3RkOjpzdHJpbmcqIGVycm9yKSBjb25zdDsKLQotICBjb25zdCBjaGFyKiBDb21waWxlRmVhdHVyZXNBdmFpbGFibGUoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0OwotCi0gIGJvb2wgSGF2ZVN0YW5kYXJkQXZhaWxhYmxlKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSkgY29uc3Q7Ci0KLSAgYm9vbCBJc0xhdGVyU3RhbmRhcmQoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiByaHMpOwotCiAgIHZvaWQgUHVzaExvb3BCbG9jaygpOwogICB2b2lkIFBvcExvb3BCbG9jaygpOwogICBib29sIElzTG9vcEJsb2NrKCkgY29uc3Q7CkBAIC05NjcsOSArOTc4LDYgQEAKICAgLy8gYWRkIGxpbmsgbGlicmFyaWVzIGFuZCBkaXJlY3RvcmllcyB0byB0aGUgdGFyZ2V0CiAgIHZvaWQgQWRkR2xvYmFsTGlua0luZm9ybWF0aW9uKGNtVGFyZ2V0JiB0YXJnZXQpOwogCi0gIC8vIENoZWNrIGZvciBhIGFuIHVudXNlZCB2YXJpYWJsZQotICB2b2lkIExvZ1VudXNlZChjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdDsKLQogICBtdXRhYmxlIHN0ZDo6c2V0PGNtTGlzdEZpbGVDb250ZXh0PiBDTVAwMDU0UmVwb3J0ZWRJZHM7CiAKICAgLy8gbGlicmFyaWVzLCBjbGFzc2VzLCBhbmQgZXhlY3V0YWJsZXMKQEAgLTExNDQsNDQgKzExNTIsNiBAQAogICAgKi8KICAgYm9vbCBNaWdodEhhdmVDdXN0b21Db21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdDsKIAotICBib29sIEFkZFJlcXVpcmVkVGFyZ2V0Q0ZlYXR1cmUoY21UYXJnZXQqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvciA9IG51bGxwdHIpIGNvbnN0OwotICBib29sIEFkZFJlcXVpcmVkVGFyZ2V0Q3h4RmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvciA9IG51bGxwdHIpIGNvbnN0OwotICBib29sIEFkZFJlcXVpcmVkVGFyZ2V0Q3VkYUZlYXR1cmUoY21UYXJnZXQqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IgPSBudWxscHRyKSBjb25zdDsKLQotICB2b2lkIENoZWNrTmVlZGVkQ0xhbmd1YWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBib29sJiBuZWVkQzkwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDOTksIGJvb2wmIG5lZWRDMTEpIGNvbnN0OwotICB2b2lkIENoZWNrTmVlZGVkQ3h4TGFuZ3VhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgYm9vbCYgbmVlZEN4eDk4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN4eDExLCBib29sJiBuZWVkQ3h4MTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBuZWVkQ3h4MTcsIGJvb2wmIG5lZWRDeHgyMCkgY29uc3Q7Ci0gIHZvaWQgQ2hlY2tOZWVkZWRDdWRhTGFuZ3VhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGJvb2wmIG5lZWRDdWRhMDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN1ZGExMSwgYm9vbCYgbmVlZEN1ZGExNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBuZWVkQ3VkYTE3LCBib29sJiBuZWVkQ3VkYTIwKSBjb25zdDsKLQotICBib29sIEhhdmVDU3RhbmRhcmRBdmFpbGFibGUoY21UYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OwotICBib29sIEhhdmVDeHhTdGFuZGFyZEF2YWlsYWJsZShjbVRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OwotICBib29sIEhhdmVDdWRhU3RhbmRhcmRBdmFpbGFibGUoY21UYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OwotCi0gIHZvaWQgQ2hlY2tGb3JVbnVzZWRWYXJpYWJsZXMoKSBjb25zdDsKLQotICAvLyBVbnVzZWQgdmFyaWFibGUgZmxhZ3MKLSAgYm9vbCBXYXJuVW51c2VkOwogICBib29sIENoZWNrU3lzdGVtVmFyczsKICAgYm9vbCBDaGVja0NNUDAwMDA7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBXYXJuZWRDTVAwMDc0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGVFeGVjdXRhYmxlVGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbU1ha2VmaWxlRXhlY3V0YWJsZVRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggMDQ3MWE0NS4uYmMyODhhYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGVFeGVjdXRhYmxlVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC0xMjIsMzEgKzEyMiwxNSBAQAogICB9CiAKICAgLy8gQnVpbGQgYSBsaXN0IG9mIGNvbXBpbGVyIGZsYWdzIGFuZCBsaW5rZXIgZmxhZ3MuCi0gIHN0ZDo6c3RyaW5nIGZsYWdzOworICBzdGQ6OnN0cmluZyBsYW5nRmxhZ3M7CiAgIHN0ZDo6c3RyaW5nIGxpbmtGbGFnczsKIAotICAvLyBBZGQgZmxhZ3MgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUuCi0gIC8vIEFkZCBzeW1ib2wgZXhwb3J0IGZsYWdzIGlmIG5lY2Vzc2FyeS4KLSAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SXNFeGVjdXRhYmxlV2l0aEV4cG9ydHMoKSkgewotICAgIHN0ZDo6c3RyaW5nIGV4cG9ydF9mbGFnX3ZhciA9Ci0gICAgICBjbVN0ckNhdCgiQ01BS0VfRVhFX0VYUE9SVFNfIiwgbGlua0xhbmd1YWdlLCAiX0ZMQUciKTsKLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MoCi0gICAgICBsaW5rRmxhZ3MsIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihleHBvcnRfZmxhZ192YXIpKTsKLSAgfQotCi0gIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhsaW5rRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0TGlua0xpYnNDTVAwMDY1KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rTGFuZ3VhZ2UsICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQpKTsKLQogICAvLyBBZGQgbGFuZ3VhZ2UgZmVhdHVyZSBmbGFncy4KICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZExhbmd1YWdlRmxhZ3NGb3JMaW5raW5nKAotICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCi0gIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRBcmNoaXRlY3R1cmVGbGFncygKLSAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7Ci0KLSAgLy8gQWRkIHRhcmdldC1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MuCi0gIHRoaXMtPkdldFRhcmdldExpbmtGbGFncyhsaW5rRmxhZ3MsIGxpbmtMYW5ndWFnZSk7CisgIC8vIEFkZCBkZXZpY2Utc3BlY2lmaWMgbGlua2VyIGZsYWdzLgorICB0aGlzLT5HZXREZXZpY2VMaW5rRmxhZ3MobGlua0ZsYWdzLCBsaW5rTGFuZ3VhZ2UpOwogCiAgIC8vIENvbnN0cnVjdCBhIGxpc3Qgb2YgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXhlY3V0YWJsZSB0aGF0CiAgIC8vIG1heSBuZWVkIHRvIGJlIGNsZWFuZWQuCkBAIC0yMjYsNyArMjEwLDcgQEAKICAgICB2YXJzLk9iamVjdERpciA9IG9iamVjdERpci5jX3N0cigpOwogICAgIHZhcnMuVGFyZ2V0ID0gdGFyZ2V0LmNfc3RyKCk7CiAgICAgdmFycy5MaW5rTGlicmFyaWVzID0gbGlua0xpYnMuY19zdHIoKTsKLSAgICB2YXJzLkZsYWdzID0gZmxhZ3MuY19zdHIoKTsKKyAgICB2YXJzLkxhbmd1YWdlQ29tcGlsZUZsYWdzID0gbGFuZ0ZsYWdzLmNfc3RyKCk7CiAgICAgdmFycy5MaW5rRmxhZ3MgPSBsaW5rRmxhZ3MuY19zdHIoKTsKICAgICB2YXJzLlRhcmdldENvbXBpbGVQREIgPSB0YXJnZXRPdXRQYXRoQ29tcGlsZVBEQi5jX3N0cigpOwogCkBAIC0yMzQsNyArMjE4LDcgQEAKIAogICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRSdWxlTGF1bmNoZXIoCiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICJSVUxFX0xBVU5DSF9MSU5LIik7Ci0gICAgaWYgKHZhbCAmJiAqdmFsKSB7CisgICAgaWYgKGNtTm9uZW1wdHkodmFsKSkgewogICAgICAgbGF1bmNoZXIgPSBjbVN0ckNhdCh2YWwsICcgJyk7CiAgICAgfQogCkBAIC00OTQsOSArNDc4LDcgQEAKICAgICAvLyBhZGQgaXQgbm93LgogICAgIHN0ZDo6c3RyaW5nIGltcGxpYlJ1bGVWYXIgPQogICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxpbmtMYW5ndWFnZSwgIl9DUkVBVEVfSU1QT1JUX0xJQlJBUlkiKTsKLSAgICBpZiAoY29uc3QgY2hhciogcnVsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGltcGxpYlJ1bGVWYXIpKSB7Ci0gICAgICBjbUV4cGFuZExpc3QocnVsZSwgcmVhbF9saW5rX2NvbW1hbmRzKTsKLSAgICB9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoaW1wbGliUnVsZVZhciwgcmVhbF9saW5rX2NvbW1hbmRzKTsKICAgfQogCiAgIGJvb2wgdXNlUmVzcG9uc2VGaWxlRm9yT2JqZWN0cyA9CkBAIC01NDcsNyArNTI5LDcgQEAKICAgICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgICAgdmFycy5DTVRhcmdldE5hbWUgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKS5jX3N0cigpOwogICAgIHZhcnMuQ01UYXJnZXRUeXBlID0KLSAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKTsKKyAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKS5jX3N0cigpOwogICAgIHZhcnMuTGFuZ3VhZ2UgPSBsaW5rTGFuZ3VhZ2UuY19zdHIoKTsKICAgICB2YXJzLk9iamVjdHMgPSBidWlsZE9ianMuY19zdHIoKTsKICAgICBzdGQ6OnN0cmluZyBvYmplY3REaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKTsKQEAgLTYwMSw3ICs1ODMsNyBAQAogCiAgICAgY29uc3QgY2hhciogdmFsID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFJ1bGVMYXVuY2hlcigKICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgIlJVTEVfTEFVTkNIX0xJTksiKTsKLSAgICBpZiAodmFsICYmICp2YWwpIHsKKyAgICBpZiAoY21Ob25lbXB0eSh2YWwpKSB7CiAgICAgICBsYXVuY2hlciA9IGNtU3RyQ2F0KHZhbCwgJyAnKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IGQzZjNhNGYuLjFjMjVmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtMTQxLDggKzE0MSw3IEBACiAKICAgc3RkOjpzdHJpbmcgZXh0cmFGbGFnczsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRpY0xpYnJhcnlGbGFncygKLSAgICBleHRyYUZsYWdzLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKSwgbGlua0xhbmd1YWdlLAotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCk7CisgICAgZXh0cmFGbGFncywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdlbmVyYXRvclRhcmdldCk7CiAgIHRoaXMtPldyaXRlTGlicmFyeVJ1bGVzKGxpbmtSdWxlVmFyLCBleHRyYUZsYWdzLCBmYWxzZSk7CiB9CiAKQEAgLTI1MCw5ICsyNDksMTQgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHM7CiAgIHRoaXMtPkFwcGVuZExpbmtEZXBlbmRzKGRlcGVuZHMsIGxpbmtMYW5ndWFnZSk7CiAKKyAgLy8gQWRkIGxhbmd1YWdlLXNwZWNpZmljIGZsYWdzLgorICBzdGQ6OnN0cmluZyBsYW5nRmxhZ3M7CisgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZygKKyAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworCiAgIC8vIENyZWF0ZSBzZXQgb2YgbGlua2luZyBmbGFncy4KICAgc3RkOjpzdHJpbmcgbGlua0ZsYWdzOwotICB0aGlzLT5HZXRUYXJnZXRMaW5rRmxhZ3MobGlua0ZsYWdzLCBsaW5rTGFuZ3VhZ2UpOworICB0aGlzLT5HZXREZXZpY2VMaW5rRmxhZ3MobGlua0ZsYWdzLCBsaW5rTGFuZ3VhZ2UpOwogCiAgIC8vIEdldCB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIG9iamVjdCB0byBnZW5lcmF0ZS4KICAgc3RkOjpzdHJpbmcgY29uc3QgdGFyZ2V0T3V0cHV0UmVhbCA9CkBAIC0zNDUsMjAgKzM0OSwxNCBAQAogICAgIHZhcnMuVGFyZ2V0ID0gdGFyZ2V0LmNfc3RyKCk7CiAgICAgdmFycy5MaW5rTGlicmFyaWVzID0gbGlua0xpYnMuY19zdHIoKTsKICAgICB2YXJzLk9iamVjdHNRdW90ZWQgPSBidWlsZE9ianMuY19zdHIoKTsKKyAgICB2YXJzLkxhbmd1YWdlQ29tcGlsZUZsYWdzID0gbGFuZ0ZsYWdzLmNfc3RyKCk7CiAgICAgdmFycy5MaW5rRmxhZ3MgPSBsaW5rRmxhZ3MuY19zdHIoKTsKICAgICB2YXJzLlRhcmdldENvbXBpbGVQREIgPSB0YXJnZXRPdXRQYXRoQ29tcGlsZVBEQi5jX3N0cigpOwogCi0gICAgLy8gQWRkIGxhbmd1YWdlLXNwZWNpZmljIGZsYWdzLgotICAgIHN0ZDo6c3RyaW5nIGxhbmdGbGFnczsKLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCi0gICAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwotCi0gICAgdmFycy5MYW5ndWFnZUNvbXBpbGVGbGFncyA9IGxhbmdGbGFncy5jX3N0cigpOwotCiAgICAgc3RkOjpzdHJpbmcgbGF1bmNoZXI7CiAgICAgY29uc3QgY2hhciogdmFsID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFJ1bGVMYXVuY2hlcigKICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgIlJVTEVfTEFVTkNIX0xJTksiKTsKLSAgICBpZiAodmFsICYmICp2YWwpIHsKKyAgICBpZiAoY21Ob25lbXB0eSh2YWwpKSB7CiAgICAgICBsYXVuY2hlciA9IGNtU3RyQ2F0KHZhbCwgJyAnKTsKICAgICB9CiAKQEAgLTY0NCwyNyArNjQyLDIxIEBACiAgICAgYXJDcmVhdGVWYXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEZlYXR1cmVTcGVjaWZpY0xpbmtSdWxlVmFyaWFibGUoCiAgICAgICBhckNyZWF0ZVZhciwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCi0gICAgaWYgKGNvbnN0IGNoYXIqIHJ1bGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihhckNyZWF0ZVZhcikpIHsKLSAgICAgIGNtRXhwYW5kTGlzdChydWxlLCBhcmNoaXZlQ3JlYXRlQ29tbWFuZHMpOwotICAgIH0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdChhckNyZWF0ZVZhciwgYXJjaGl2ZUNyZWF0ZUNvbW1hbmRzKTsKICAgICBzdGQ6OnN0cmluZyBhckFwcGVuZFZhciA9CiAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX0FSQ0hJVkVfQVBQRU5EIik7CiAKICAgICBhckFwcGVuZFZhciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RmVhdHVyZVNwZWNpZmljTGlua1J1bGVWYXJpYWJsZSgKICAgICAgIGFyQXBwZW5kVmFyLCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKLSAgICBpZiAoY29uc3QgY2hhciogcnVsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGFyQXBwZW5kVmFyKSkgewotICAgICAgY21FeHBhbmRMaXN0KHJ1bGUsIGFyY2hpdmVBcHBlbmRDb21tYW5kcyk7Ci0gICAgfQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KGFyQXBwZW5kVmFyLCBhcmNoaXZlQXBwZW5kQ29tbWFuZHMpOwogICAgIHN0ZDo6c3RyaW5nIGFyRmluaXNoVmFyID0KICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsaW5rTGFuZ3VhZ2UsICJfQVJDSElWRV9GSU5JU0giKTsKIAogICAgIGFyRmluaXNoVmFyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlU3BlY2lmaWNMaW5rUnVsZVZhcmlhYmxlKAogICAgICAgYXJGaW5pc2hWYXIsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAotICAgIGlmIChjb25zdCBjaGFyKiBydWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oYXJGaW5pc2hWYXIpKSB7Ci0gICAgICBjbUV4cGFuZExpc3QocnVsZSwgYXJjaGl2ZUZpbmlzaENvbW1hbmRzKTsKLSAgICB9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoYXJGaW5pc2hWYXIsIGFyY2hpdmVGaW5pc2hDb21tYW5kcyk7CiAgIH0KIAogICAvLyBEZWNpZGUgd2hldGhlciB0byB1c2UgYXJjaGl2aW5nIHJ1bGVzLgpAQCAtNzU2LDcgKzc0OCw3IEBACiAKICAgICB2YXJzLkNNVGFyZ2V0TmFtZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpLmNfc3RyKCk7CiAgICAgdmFycy5DTVRhcmdldFR5cGUgPQotICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkpOworICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkpLmNfc3RyKCk7CiAgICAgdmFycy5MYW5ndWFnZSA9IGxpbmtMYW5ndWFnZS5jX3N0cigpOwogICAgIHZhcnMuQUlYRXhwb3J0cyA9IGFpeEV4cG9ydHMuY19zdHIoKTsKICAgICB2YXJzLk9iamVjdHMgPSBidWlsZE9ianMuY19zdHIoKTsKQEAgLTgxNyw3ICs4MDksNyBAQAogICAgIHN0ZDo6c3RyaW5nIGxhdW5jaGVyOwogICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRSdWxlTGF1bmNoZXIoCiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICJSVUxFX0xBVU5DSF9MSU5LIik7Ci0gICAgaWYgKHZhbCAmJiAqdmFsKSB7CisgICAgaWYgKGNtTm9uZW1wdHkodmFsKSkgewogICAgICAgbGF1bmNoZXIgPSBjbVN0ckNhdCh2YWwsICcgJyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEuY3h4IGIvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWZkNDQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmN4eApAQCAtMCwwICsxLDExNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2luY2x1ZGUgImNtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmgiCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KKworI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgorI2luY2x1ZGUgImNtc3lzL1N5c3RlbUluZm9ybWF0aW9uLmh4eCIKKworI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKworY21NYWtlZmlsZVByb2ZpbGluZ0RhdGE6OmNtTWFrZWZpbGVQcm9maWxpbmdEYXRhKAorICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvZmlsZVN0cmVhbSkKK3sKKyAgc3RkOjppb3M6Om9wZW5tb2RlIG9tb2RlID0gc3RkOjppb3M6Om91dCB8IHN0ZDo6aW9zOjp0cnVuYzsKKyAgdGhpcy0+UHJvZmlsZVN0cmVhbS5vcGVuKHByb2ZpbGVTdHJlYW0uY19zdHIoKSwgb21vZGUpOworICBKc29uOjpTdHJlYW1Xcml0ZXJCdWlsZGVyIHdidWlsZGVyOworICB0aGlzLT5Kc29uV3JpdGVyID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SnNvbjo6U3RyZWFtV3JpdGVyPih3YnVpbGRlci5uZXdTdHJlYW1Xcml0ZXIoKSk7CisgIGlmICghdGhpcy0+UHJvZmlsZVN0cmVhbS5nb29kKCkpIHsKKyAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3Ioc3RkOjpzdHJpbmcoIlVuYWJsZSB0byBvcGVuOiAiKSArIHByb2ZpbGVTdHJlYW0pOworICB9CisKKyAgdGhpcy0+UHJvZmlsZVN0cmVhbSA8PCAiWyI7Cit9OworCitjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YTo6fmNtTWFrZWZpbGVQcm9maWxpbmdEYXRhKCkgbm9leGNlcHQKK3sKKyAgaWYgKHRoaXMtPlByb2ZpbGVTdHJlYW0uZ29vZCgpKSB7CisgICAgdHJ5IHsKKyAgICAgIHRoaXMtPlByb2ZpbGVTdHJlYW0gPDwgIl0iOworICAgICAgdGhpcy0+UHJvZmlsZVN0cmVhbS5jbG9zZSgpOworICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkVycm9yIHdyaXRpbmcgcHJvZmlsaW5nIG91dHB1dCEiKTsKKyAgICB9CisgIH0KK30KKwordm9pZCBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YTo6U3RhcnRFbnRyeShjb25zdCBjbUxpc3RGaWxlRnVuY3Rpb24mIGxmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUNvbnRleHQgY29uc3QmIGxmYykKK3sKKyAgLyogRG8gbm90IHRyeSBhZ2FpbiBpZiB3ZSBwcmV2aW91c2x5IGZhaWxlZCB0byB3cml0ZSB0byBvdXRwdXQuICovCisgIGlmICghdGhpcy0+UHJvZmlsZVN0cmVhbS5nb29kKCkpIHsKKyAgICByZXR1cm47CisgIH0KKworICB0cnkgeworICAgIGlmICh0aGlzLT5Qcm9maWxlU3RyZWFtLnRlbGxwKCkgPiAxKSB7CisgICAgICB0aGlzLT5Qcm9maWxlU3RyZWFtIDw8ICIsIjsKKyAgICB9CisgICAgY21zeXM6OlN5c3RlbUluZm9ybWF0aW9uIGluZm87CisgICAgSnNvbjo6VmFsdWUgdjsKKyAgICB2WyJwaCJdID0gIkIiOworICAgIHZbIm5hbWUiXSA9IGxmZi5OYW1lLkxvd2VyOworICAgIHZbImNhdCJdID0gImNtYWtlIjsKKyAgICB2WyJ0cyJdID0gSnNvbjo6VmFsdWU6OlVJbnQ2NCgKKyAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KAorICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkpCisgICAgICAgIC5jb3VudCgpKTsKKyAgICB2WyJwaWQiXSA9IHN0YXRpY19jYXN0PGludD4oaW5mby5HZXRQcm9jZXNzSWQoKSk7CisgICAgdlsidGlkIl0gPSAwOworICAgIEpzb246OlZhbHVlIGFyZ3NWYWx1ZTsKKyAgICBpZiAoIWxmZi5Bcmd1bWVudHMuZW1wdHkoKSkgeworICAgICAgc3RkOjpzdHJpbmcgYXJnczsKKyAgICAgIGZvciAoY29uc3QgYXV0byYgYSA6IGxmZi5Bcmd1bWVudHMpIHsKKyAgICAgICAgYXJncyArPSAoYXJncy5lbXB0eSgpID8gIiIgOiAiICIpICsgYS5WYWx1ZTsKKyAgICAgIH0KKyAgICAgIGFyZ3NWYWx1ZVsiZnVuY3Rpb25BcmdzIl0gPSBhcmdzOworICAgIH0KKyAgICBhcmdzVmFsdWVbImxvY2F0aW9uIl0gPSBsZmMuRmlsZVBhdGggKyAiOiIgKyBzdGQ6OnRvX3N0cmluZyhsZmMuTGluZSk7CisgICAgdlsiYXJncyJdID0gYXJnc1ZhbHVlOworCisgICAgdGhpcy0+SnNvbldyaXRlci0+d3JpdGUodiwgJnRoaXMtPlByb2ZpbGVTdHJlYW0pOworICB9IGNhdGNoIChzdGQ6Omlvc19iYXNlOjpmYWlsdXJlJiBmYWlsKSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICBjbVN0ckNhdCgiRmFpbGVkIHRvIHdyaXRlIHRvIHByb2ZpbGluZyBvdXRwdXQ6ICIsIGZhaWwud2hhdCgpKSk7CisgIH0gY2F0Y2ggKC4uLikgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJFcnJvciB3cml0aW5nIHByb2ZpbGluZyBvdXRwdXQhIik7CisgIH0KK30KKwordm9pZCBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YTo6U3RvcEVudHJ5KCkKK3sKKyAgLyogRG8gbm90IHRyeSBhZ2FpbiBpZiB3ZSBwcmV2aW91c2x5IGZhaWxlZCB0byB3cml0ZSB0byBvdXRwdXQuICovCisgIGlmICghdGhpcy0+UHJvZmlsZVN0cmVhbS5nb29kKCkpIHsKKyAgICByZXR1cm47CisgIH0KKworICB0cnkgeworICAgIHRoaXMtPlByb2ZpbGVTdHJlYW0gPDwgIiwiOworICAgIGNtc3lzOjpTeXN0ZW1JbmZvcm1hdGlvbiBpbmZvOworICAgIEpzb246OlZhbHVlIHY7CisgICAgdlsicGgiXSA9ICJFIjsKKyAgICB2WyJ0cyJdID0gSnNvbjo6VmFsdWU6OlVJbnQ2NCgKKyAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KAorICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkpCisgICAgICAgIC5jb3VudCgpKTsKKyAgICB2WyJwaWQiXSA9IHN0YXRpY19jYXN0PGludD4oaW5mby5HZXRQcm9jZXNzSWQoKSk7CisgICAgdlsidGlkIl0gPSAwOworICAgIHRoaXMtPkpzb25Xcml0ZXItPndyaXRlKHYsICZ0aGlzLT5Qcm9maWxlU3RyZWFtKTsKKyAgfSBjYXRjaCAoc3RkOjppb3NfYmFzZTo6ZmFpbHVyZSYgZmFpbCkgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgY21TdHJDYXQoIkZhaWxlZCB0byB3cml0ZSB0byBwcm9maWxpbmcgb3V0cHV0OiIsIGZhaWwud2hhdCgpKSk7CisgIH0gY2F0Y2ggKC4uLikgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJFcnJvciB3cml0aW5nIHByb2ZpbGluZyBvdXRwdXQhIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5oIGIvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhYmQ5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGFfaAorI2RlZmluZSBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YV9oCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgorCituYW1lc3BhY2UgSnNvbiB7CitjbGFzcyBTdHJlYW1Xcml0ZXI7Cit9CisKK2NsYXNzIGNtTGlzdEZpbGVDb250ZXh0Oworc3RydWN0IGNtTGlzdEZpbGVGdW5jdGlvbjsKKworY2xhc3MgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEKK3sKK3B1YmxpYzoKKyAgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEoY29uc3Qgc3RkOjpzdHJpbmcmKTsKKyAgfmNtTWFrZWZpbGVQcm9maWxpbmdEYXRhKCkgbm9leGNlcHQ7CisgIHZvaWQgU3RhcnRFbnRyeShjb25zdCBjbUxpc3RGaWxlRnVuY3Rpb24mIGxmZiwgY21MaXN0RmlsZUNvbnRleHQgY29uc3QmIGxmYyk7CisgIHZvaWQgU3RvcEVudHJ5KCk7CisKK3ByaXZhdGU6CisgIGNtc3lzOjpvZnN0cmVhbSBQcm9maWxlU3RyZWFtOworICBzdGQ6OnVuaXF1ZV9wdHI8SnNvbjo6U3RyZWFtV3JpdGVyPiBKc29uV3JpdGVyOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IGE4NzY5ZDguLjI4NmEzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CkBAIC0xNyw3ICsxOCw3IEBACiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKLSNpbmNsdWRlICJjbUxpbmtMaW5lQ29tcHV0ZXIuaCIKKyNpbmNsdWRlICJjbUxpbmtMaW5lQ29tcHV0ZXIuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlICJjbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC0yNSw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlVXRpbGl0eVRhcmdldEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCkBAIC00Niw5ICs0OCw4IEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEdsb2JhbEdlbmVyYXRvcigpKTsKICAgY21ha2UqIGNtID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDTWFrZUluc3RhbmNlKCk7CiAgIHRoaXMtPk5vUnVsZU1lc3NhZ2VzID0gZmFsc2U7Ci0gIGlmIChjb25zdCBjaGFyKiBydWxlU3RhdHVzID0KLSAgICAgICAgY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJSVUxFX01FU1NBR0VTIikpIHsKLSAgICB0aGlzLT5Ob1J1bGVNZXNzYWdlcyA9IGNtSXNPZmYocnVsZVN0YXR1cyk7CisgIGlmIChjbVByb3AgcnVsZVN0YXR1cyA9IGNtLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiUlVMRV9NRVNTQUdFUyIpKSB7CisgICAgdGhpcy0+Tm9SdWxlTWVzc2FnZXMgPSBjbUlzT2ZmKCpydWxlU3RhdHVzKTsKICAgfQogICBNYWNPU1hDb250ZW50R2VuZXJhdG9yID0gY206Om1ha2VfdW5pcXVlPE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlPih0aGlzKTsKIH0KQEAgLTg3LDYgKzg4LDE4IEBACiAgIHJldHVybiBjb25maWdOYW1lcy5mcm9udCgpOwogfQogCit2b2lkIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OkdldERldmljZUxpbmtGbGFncygKKyAgc3RkOjpzdHJpbmcmIGxpbmtGbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSkKK3sKKyAgY21HZW5lcmF0b3JUYXJnZXQ6OkRldmljZUxpbmtTZXR0ZXIgc2V0dGVyKCp0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSk7CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtPcHRzOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtPcHRpb25zKGxpbmtPcHRzLCB0aGlzLT5HZXRDb25maWdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0xhbmd1YWdlKTsKKyAgLy8gTElOS19PUFRJT05TIGFyZSBlc2NhcGVkLgorICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kQ29tcGlsZU9wdGlvbnMobGlua0ZsYWdzLCBsaW5rT3B0cyk7Cit9CisKIHZvaWQgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6R2V0VGFyZ2V0TGlua0ZsYWdzKAogICBzdGQ6OnN0cmluZyYgZmxhZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5rTGFuZ3VhZ2UpCiB7CkBAIC0xNTUsNyArMTY4LDcgQEAKIAogICAvLyBFdmFsdWF0ZXMgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGFuZCBleHBhbmRzIHByb3BfdmFsdWUKICAgYXV0byBldmFsdWF0ZWRGaWxlcyA9Ci0gICAgW3RoaXNdKGNvbnN0IGNoYXIqIHByb3BfdmFsdWUpIC0+IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB7CisgICAgW3RoaXNdKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wX3ZhbHVlKSAtPiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlczsKICAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKICAgICAgICAgICAgICAgICAgICBwcm9wX3ZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLApAQCAtMTY1LDE2ICsxNzgsMTYgQEAKICAgfTsKIAogICAvLyBMb29rIGZvciBhZGRpdGlvbmFsIGZpbGVzIHJlZ2lzdGVyZWQgZm9yIGNsZWFuaW5nIGluIHRoaXMgZGlyZWN0b3J5LgotICBpZiAoY29uc3QgY2hhciogcHJvcF92YWx1ZSA9CisgIGlmIChjbVByb3AgcHJvcF92YWx1ZSA9CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiQURESVRJT05BTF9NQUtFX0NMRUFOX0ZJTEVTIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgZmlsZXMgPSBldmFsdWF0ZWRGaWxlcyhwcm9wX3ZhbHVlKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgZmlsZXMgPSBldmFsdWF0ZWRGaWxlcygqcHJvcF92YWx1ZSk7CiAgICAgdGhpcy0+Q2xlYW5GaWxlcy5pbnNlcnQoZmlsZXMuYmVnaW4oKSwgZmlsZXMuZW5kKCkpOwogICB9CiAKICAgLy8gTG9vayBmb3IgYWRkaXRpb25hbCBmaWxlcyByZWdpc3RlcmVkIGZvciBjbGVhbmluZyBpbiB0aGlzIHRhcmdldC4KLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BfdmFsdWUgPQorICBpZiAoY21Qcm9wIHByb3BfdmFsdWUgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBRERJVElPTkFMX0NMRUFOX0ZJTEVTIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgZmlsZXMgPSBldmFsdWF0ZWRGaWxlcyhwcm9wX3ZhbHVlKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgZmlsZXMgPSBldmFsdWF0ZWRGaWxlcygqcHJvcF92YWx1ZSk7CiAgICAgLy8gRm9yIHJlbGF0aXZlIHBhdGggc3VwcG9ydAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5hcnlEaXIgPQogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKQEAgLTE4NCw4ICsxOTcsNyBAQAogICB9CiAKICAgLy8gYWRkIGN1c3RvbSBjb21tYW5kcyB0byB0aGUgY2xlYW4gcnVsZXM/Ci0gIGNvbnN0IGNoYXIqIGNsZWFuX25vX2N1c3RvbSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiQ0xFQU5fTk9fQ1VTVE9NIik7Ci0gIGJvb2wgY2xlYW4gPSBjbUlzT2ZmKGNsZWFuX25vX2N1c3RvbSk7CisgIGJvb2wgY2xlYW4gPSBjbUlzT2ZmKHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiQ0xFQU5fTk9fQ1VTVE9NIikpOwogCiAgIC8vIEZpcnN0IGdlbmVyYXRlIHRoZSBvYmplY3QgcnVsZSBmaWxlcy4gIFNhdmUgYSBsaXN0IG9mIGFsbCBvYmplY3QKICAgLy8gZmlsZXMgZm9yIHRoaXMgdGFyZ2V0LgpAQCAtMzAwLDggKzMxMiw3IEBACiAgICAgICBkZXBlbmRGaWxlTmFtZUZ1bGwsIGZhbHNlLCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CiAgICAgZGVwRmlsZVN0cmVhbSA8PCAiIyBFbXB0eSBkZXBlbmRlbmNpZXMgZmlsZSBmb3IgIgogICAgICAgICAgICAgICAgICAgPDwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkgPDwgIi5cbiIKLSAgICAgICAgICAgICAgICAgIDw8ICIjIFRoaXMgbWF5IGJlIHJlcGxhY2VkIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSBidWlsdC4iCi0gICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgICAgICA8PCAiIyBUaGlzIG1heSBiZSByZXBsYWNlZCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgYnVpbHQuXG4iOwogICB9CiAKICAgLy8gT3BlbiB0aGUgZmxhZ3MgZmlsZS4gIFRoaXMgc2hvdWxkIGJlIGNvcHktaWYtZGlmZmVyZW50IGJlY2F1c2UgdGhlCkBAIC0zNDIsMTcgKzM1MywzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iOwogICB9CiAKKyAgYm9vbCBjb25zdCBlc2NhcGVPY3RvdGhvcnBlID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5DYW5Fc2NhcGVPY3RvdGhvcnBlKCk7CisKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZ3VhZ2UgOiBsYW5ndWFnZXMpIHsKLSAgICBzdGQ6OnN0cmluZyBmbGFncyA9IHRoaXMtPkdldEZsYWdzKGxhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIHN0ZDo6c3RyaW5nIGRlZmluZXMgPSB0aGlzLT5HZXREZWZpbmVzKGxhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzID0gdGhpcy0+R2V0SW5jbHVkZXMobGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7Ci0gICAgLy8gRXNjYXBlIGNvbW1lbnQgY2hhcmFjdGVycyBzbyB0aGV5IGRvIG5vdCB0ZXJtaW5hdGUgYXNzaWdubWVudC4KLSAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGZsYWdzLCAiIyIsICJcXCMiKTsKLSAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGRlZmluZXMsICIjIiwgIlxcIyIpOwotICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoaW5jbHVkZXMsICIjIiwgIlxcIyIpOwotICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCBsYW5ndWFnZSA8PCAiX0ZMQUdTID0gIiA8PCBmbGFncyA8PCAiXG5cbiI7CisgICAgaWYgKGVzY2FwZU9jdG90aG9ycGUpIHsKKyAgICAgIC8vIEVzY2FwZSBjb21tZW50IGNoYXJhY3RlcnMgc28gdGhleSBkbyBub3QgdGVybWluYXRlIGFzc2lnbm1lbnQuCisgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGRlZmluZXMsICIjIiwgIlxcIyIpOworICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhpbmNsdWRlcywgIiMiLCAiXFwjIik7CisgICAgfQogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCBsYW5ndWFnZSA8PCAiX0RFRklORVMgPSAiIDw8IGRlZmluZXMgPDwgIlxuXG4iOwogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCBsYW5ndWFnZSA8PCAiX0lOQ0xVREVTID0gIiA8PCBpbmNsdWRlcyA8PCAiXG5cbiI7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJjaGl0ZWN0dXJlczsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFwcGxlQXJjaHModGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBhcmNoaXRlY3R1cmVzKTsKKyAgICBhcmNoaXRlY3R1cmVzLmVtcGxhY2VfYmFjaygpOworCisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGZsYWdzID0KKyAgICAgICAgdGhpcy0+R2V0RmxhZ3MobGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgYXJjaCk7CisgICAgICBpZiAoZXNjYXBlT2N0b3Rob3JwZSkgeworICAgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGZsYWdzLCAiIyIsICJcXCMiKTsKKyAgICAgIH0KKyAgICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCBsYW5ndWFnZSA8PCAiX0ZMQUdTIiA8PCBhcmNoIDw8ICIgPSAiIDw8IGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlxuXG4iOworICAgIH0KICAgfQogfQogCkBAIC00NjUsMTcgKzQ5MSwzNyBAQAogICBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogCiAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgZGVwZW5kZW5jaWVzCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hTb3VyY2UoY29uZmlnLCBsYW5nKTsKLSAgaWYgKCFwY2hTb3VyY2UuZW1wdHkoKSAmJiAhc291cmNlLkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpKSB7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QmIHBjaEhlYWRlciA9Ci0gICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmcpOwotICAgIGRlcGVuZHMucHVzaF9iYWNrKHBjaEhlYWRlcik7Ci0gICAgaWYgKHNvdXJjZS5HZXRGdWxsUGF0aCgpICE9IHBjaFNvdXJjZSkgewotICAgICAgZGVwZW5kcy5wdXNoX2JhY2sodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZykpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJjaGl0ZWN0dXJlczsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRBcHBsZUFyY2hzKGNvbmZpZywgYXJjaGl0ZWN0dXJlcyk7CisgIGlmIChhcmNoaXRlY3R1cmVzLmVtcHR5KCkpIHsKKyAgICBhcmNoaXRlY3R1cmVzLmVtcGxhY2VfYmFjaygpOworICB9CisKKyAgc3RkOjpzdHJpbmcgZmlsdGVyQXJjaDsKKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gcGNoU291cmNlczsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPQorICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hTb3VyY2UoY29uZmlnLCBsYW5nLCBhcmNoKTsKKyAgICBpZiAocGNoU291cmNlID09IHNvdXJjZS5HZXRGdWxsUGF0aCgpKSB7CisgICAgICBmaWx0ZXJBcmNoID0gYXJjaDsKICAgICB9Ci0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZEltcGxpY2l0RGVwZW5kcyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpGdWxsUGF0aCwgcGNoSGVhZGVyKTsKKyAgICBpZiAoIXBjaFNvdXJjZS5lbXB0eSgpKSB7CisgICAgICBwY2hTb3VyY2VzLmluc2VydChzdGQ6Om1ha2VfcGFpcihwY2hTb3VyY2UsIGFyY2gpKTsKKyAgICB9CisgIH0KKworICBpZiAoIXBjaFNvdXJjZXMuZW1wdHkoKSAmJiAhc291cmNlLkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpKSB7CisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwY2hIZWFkZXIgPQorICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmcsIGFyY2gpOworICAgICAgZGVwZW5kcy5wdXNoX2JhY2socGNoSGVhZGVyKTsKKyAgICAgIGlmIChwY2hTb3VyY2VzLmZpbmQoc291cmNlLkdldEZ1bGxQYXRoKCkpID09IHBjaFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgZGVwZW5kcy5wdXNoX2JhY2soCisgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZywgYXJjaCkpOworICAgICAgfQorICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZEltcGxpY2l0RGVwZW5kcyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iakZ1bGxQYXRoLCBwY2hIZWFkZXIpOworICAgIH0KICAgfQogCiAgIHN0ZDo6c3RyaW5nIHJlbGF0aXZlT2JqID0KQEAgLTQ4NSw4ICs1MzEsMTUgQEAKICAgLy8gQnVpbGQgdGhlIHNldCBvZiBjb21waWxlciBmbGFncy4KICAgc3RkOjpzdHJpbmcgZmxhZ3M7CiAKKyAgLy8gZXhwbGljaXRseSBhZGQgdGhlIGV4cGxpY2l0IGxhbmd1YWdlIGZsYWcgYmVmb3JlIGFueSBvdGhlciBmbGFnCisgIC8vIHRoaXMgd2F5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdXNlciBmbGFncyBpcyBtYWludGFpbmVkCisgIGlmIChzb3VyY2UuR2V0UHJvcGVydHkoIkxBTkdVQUdFIikpIHsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmVhdHVyZU9wdGlvbnMoZmxhZ3MsIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFWFBMSUNJVF9MQU5HVUFHRSIpOworICB9CisKICAgLy8gQWRkIGxhbmd1YWdlLXNwZWNpZmljIGZsYWdzLgotICBzdGQ6OnN0cmluZyBsYW5nRmxhZ3MgPSBjbVN0ckNhdCgiJCgiLCBsYW5nLCAiX0ZMQUdTKSIpOworICBzdGQ6OnN0cmluZyBsYW5nRmxhZ3MgPSBjbVN0ckNhdCgiJCgiLCBsYW5nLCAiX0ZMQUdTIiwgZmlsdGVyQXJjaCwgIikiKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKGZsYWdzLCBsYW5nRmxhZ3MpOwogCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyIGdlbmV4SW50ZXJwcmV0ZXIoCkBAIC00OTUsMTMgKzU0OCwxNCBAQAogICAvLyBBZGQgRm9ydHJhbiBmb3JtYXQgZmxhZ3MuCiAgIGlmIChsYW5nID09ICJGb3J0cmFuIikgewogICAgIHRoaXMtPkFwcGVuZEZvcnRyYW5Gb3JtYXRGbGFncyhmbGFncywgc291cmNlKTsKKyAgICB0aGlzLT5BcHBlbmRGb3J0cmFuUHJlcHJvY2Vzc0ZsYWdzKGZsYWdzLCBzb3VyY2UpOwogICB9CiAKICAgLy8gQWRkIGZsYWdzIGZyb20gc291cmNlIGZpbGUgcHJvcGVydGllcy4KICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9GTEFHUygiQ09NUElMRV9GTEFHUyIpOwotICBpZiAoY29uc3QgY2hhciogY2ZsYWdzID0gc291cmNlLkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7CisgIGlmIChjbVByb3AgY2ZsYWdzID0gc291cmNlLkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV2YWx1YXRlZEZsYWdzID0KLSAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY2ZsYWdzLCBDT01QSUxFX0ZMQUdTKTsKKyAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNmbGFncywgQ09NUElMRV9GTEFHUyk7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKGZsYWdzLCBldmFsdWF0ZWRGbGFncyk7CiAgICAgKnRoaXMtPkZsYWdGaWxlU3RyZWFtIDw8ICIjIEN1c3RvbSBmbGFnczogIiA8PCByZWxhdGl2ZU9iagogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiX0ZMQUdTID0gIiA8PCBldmFsdWF0ZWRGbGFncyA8PCAiXG4iCkBAIC01MDksOSArNTYzLDkgQEAKICAgfQogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfT1BUSU9OUygiQ09NUElMRV9PUFRJT05TIik7Ci0gIGlmIChjb25zdCBjaGFyKiBjb3B0aW9ucyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CisgIGlmIChjbVByb3AgY29wdGlvbnMgPSBzb3VyY2UuR2V0UHJvcGVydHkoQ09NUElMRV9PUFRJT05TKSkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBldmFsdWF0ZWRPcHRpb25zID0KLSAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUyk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb3B0aW9ucywgQ09NUElMRV9PUFRJT05TKTsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kQ29tcGlsZU9wdGlvbnMoZmxhZ3MsIGV2YWx1YXRlZE9wdGlvbnMpOwogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCAiIyBDdXN0b20gb3B0aW9uczogIiA8PCByZWxhdGl2ZU9iagogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiX09QVElPTlMgPSAiIDw8IGV2YWx1YXRlZE9wdGlvbnMgPDwgIlxuIgpAQCAtNTE5LDExICs1NzMsMTIgQEAKICAgfQogCiAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgY29tcGlsZSBvcHRpb25zLgotICBpZiAoIXBjaFNvdXJjZS5lbXB0eSgpICYmICFzb3VyY2UuR2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKKyAgaWYgKCFwY2hTb3VyY2VzLmVtcHR5KCkgJiYgIXNvdXJjZS5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgewogICAgIHN0ZDo6c3RyaW5nIHBjaE9wdGlvbnM7Ci0gICAgaWYgKHNvdXJjZS5HZXRGdWxsUGF0aCgpID09IHBjaFNvdXJjZSkgewotICAgICAgcGNoT3B0aW9ucyA9Ci0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoY29uZmlnLCBsYW5nKTsKKyAgICBhdXRvIHBjaEl0ID0gcGNoU291cmNlcy5maW5kKHNvdXJjZS5HZXRGdWxsUGF0aCgpKTsKKyAgICBpZiAocGNoSXQgIT0gcGNoU291cmNlcy5lbmQoKSkgeworICAgICAgcGNoT3B0aW9ucyA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoCisgICAgICAgIGNvbmZpZywgbGFuZywgcGNoSXQtPnNlY29uZCk7CiAgICAgfSBlbHNlIHsKICAgICAgIHBjaE9wdGlvbnMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaFVzZUNvbXBpbGVPcHRpb25zKGNvbmZpZywgbGFuZyk7CkBAIC01NDIsOSArNTk3LDkgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIElOQ0xVREVfRElSRUNUT1JJRVMoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNpbmNsdWRlcyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgeworICBpZiAoY21Qcm9wIGNpbmNsdWRlcyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBldmFsdWF0ZWRJbmNsdWRlcyA9Ci0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNpbmNsdWRlcywgSU5DTFVERV9ESVJFQ1RPUklFUyk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjaW5jbHVkZXMsIElOQ0xVREVfRElSRUNUT1JJRVMpOwogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoaW5jbHVkZXMsIGV2YWx1YXRlZEluY2x1ZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlKTsKICAgICAqdGhpcy0+RmxhZ0ZpbGVTdHJlYW0gPDwgIiMgQ3VzdG9tIGluY2x1ZGUgZGlyZWN0b3JpZXM6ICIgPDwgcmVsYXRpdmVPYmoKQEAgLTU1OCwxOCArNjEzLDE4IEBACiAKICAgLy8gQWRkIHNvdXJjZS1zcGVjaWZpYyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfREVGSU5JVElPTlMoIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvbXBpbGVfZGVmcyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShDT01QSUxFX0RFRklOSVRJT05TKSkgeworICBpZiAoY21Qcm9wIGNvbXBpbGVfZGVmcyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShDT01QSUxFX0RFRklOSVRJT05TKSkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBldmFsdWF0ZWREZWZzID0KLSAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKTsKKyAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUyk7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZERlZmluZXMoZGVmaW5lcywgZXZhbHVhdGVkRGVmcyk7CiAgICAgKnRoaXMtPkZsYWdGaWxlU3RyZWFtIDw8ICIjIEN1c3RvbSBkZWZpbmVzOiAiIDw8IHJlbGF0aXZlT2JqCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJfREVGSU5FUyA9ICIgPDwgZXZhbHVhdGVkRGVmcyA8PCAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcbiI7CiAgIH0KICAgc3RkOjpzdHJpbmcgZGVmUHJvcE5hbWUgPSBjbVN0ckNhdCgiQ09NUElMRV9ERUZJTklUSU9OU18iLCBjb25maWdVcHBlcik7Ci0gIGlmIChjb25zdCBjaGFyKiBjb25maWdfY29tcGlsZV9kZWZzID0gc291cmNlLkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgeworICBpZiAoY21Qcm9wIGNvbmZpZ19jb21waWxlX2RlZnMgPSBzb3VyY2UuR2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV2YWx1YXRlZERlZnMgPQotICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKTsKKyAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvbmZpZ19jb21waWxlX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpOwogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmREZWZpbmVzKGRlZmluZXMsIGV2YWx1YXRlZERlZnMpOwogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCAiIyBDdXN0b20gZGVmaW5lczogIiA8PCByZWxhdGl2ZU9iaiA8PCAiX0RFRklORVNfIgogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjb25maWdVcHBlciA8PCAiID0gIiA8PCBldmFsdWF0ZWREZWZzIDw8ICJcbiIKQEAgLTYzOSw3ICs2OTQsNyBAQAogICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKTsKICAgdmFycy5DTVRhcmdldFR5cGUgPQotICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKTsKKyAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkuY19zdHIoKTsKICAgdmFycy5MYW5ndWFnZSA9IGxhbmcuY19zdHIoKTsKICAgdmFycy5UYXJnZXQgPSB0YXJnZXRPdXRQYXRoUmVhbC5jX3N0cigpOwogICB2YXJzLlRhcmdldFBEQiA9IHRhcmdldE91dFBhdGhQREIuY19zdHIoKTsKQEAgLTcxNyw4ICs3NzIsOCBAQAogICAgICAgLy8gbm8gbGF1bmNoZXIgZm9yIENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTCiAgICAgICBydWxlUGxhY2Vob2xkZXJFeHBhbmRlci0+RXhwYW5kUnVsZVZhcmlhYmxlcyh0aGlzLT5Mb2NhbEdlbmVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVDb21tYW5kLCB2YXJzKTsKLSAgICAgIHN0ZDo6c3RyaW5nIHdvcmtpbmdEaXJlY3RvcnkgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAotICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIHdvcmtpbmdEaXJlY3RvcnkgPQorICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICAgICAgY29tcGlsZUNvbW1hbmQucmVwbGFjZShjb21waWxlQ29tbWFuZC5maW5kKGxhbmdGbGFncyksIGxhbmdGbGFncy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldEZsYWdzKGxhbmcsIHRoaXMtPkdldENvbmZpZ05hbWUoKSkpOwogICAgICAgc3RkOjpzdHJpbmcgbGFuZ0RlZmluZXMgPSBzdGQ6OnN0cmluZygiJCgiKSArIGxhbmcgKyAiX0RFRklORVMpIjsKQEAgLTc1MCwyNSArODA1LDI0IEBACiAgICAgICAgIChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiIHx8IGxhbmcgPT0gIkZvcnRyYW4iIHx8IGxhbmcgPT0gIkNVREEiIHx8CiAgICAgICAgICBsYW5nID09ICJPQkpDIiB8fCBsYW5nID09ICJPQkpDWFgiKSkgewogICAgICAgc3RkOjpzdHJpbmcgY29uc3QgY2xhdW5jaGVyX3Byb3AgPSBsYW5nICsgIl9DT01QSUxFUl9MQVVOQ0hFUiI7Ci0gICAgICBjb25zdCBjaGFyKiBjbGF1bmNoZXIgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNsYXVuY2hlcl9wcm9wKTsKLSAgICAgIGlmIChjbGF1bmNoZXIgJiYgKmNsYXVuY2hlcikgewotICAgICAgICBjb21waWxlckxhdW5jaGVyID0gY2xhdW5jaGVyOworICAgICAgY21Qcm9wIGNsYXVuY2hlciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY2xhdW5jaGVyX3Byb3ApOworICAgICAgaWYgKGNtTm9uZW1wdHkoY2xhdW5jaGVyKSkgeworICAgICAgICBjb21waWxlckxhdW5jaGVyID0gKmNsYXVuY2hlcjsKICAgICAgIH0KICAgICB9CiAKICAgICAvLyBNYXliZSBpbnNlcnQgYW4gaW5jbHVkZS13aGF0LXlvdS11c2UgcnVubmVyLgogICAgIGlmICghY29tcGlsZUNvbW1hbmRzLmVtcHR5KCkgJiYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIkNYWCIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCBpd3l1X3Byb3AgPSBsYW5nICsgIl9JTkNMVURFX1dIQVRfWU9VX1VTRSI7Ci0gICAgICBjb25zdCBjaGFyKiBpd3l1ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShpd3l1X3Byb3ApOworICAgICAgY21Qcm9wIGl3eXUgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGl3eXVfcHJvcCk7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCB0aWR5X3Byb3AgPSBsYW5nICsgIl9DTEFOR19USURZIjsKLSAgICAgIGNvbnN0IGNoYXIqIHRpZHkgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KHRpZHlfcHJvcCk7CisgICAgICBjbVByb3AgdGlkeSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkodGlkeV9wcm9wKTsKICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGxhbmcgKyAiX0NQUExJTlQiOwotICAgICAgY29uc3QgY2hhciogY3BwbGludCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY3BwbGludF9wcm9wKTsKKyAgICAgIGNtUHJvcCBjcHBsaW50ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBsaW50X3Byb3ApOwogICAgICAgc3RkOjpzdHJpbmcgY29uc3QgY3BwY2hlY2tfcHJvcCA9IGxhbmcgKyAiX0NQUENIRUNLIjsKLSAgICAgIGNvbnN0IGNoYXIqIGNwcGNoZWNrID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBjaGVja19wcm9wKTsKLSAgICAgIGlmICgoaXd5dSAmJiAqaXd5dSkgfHwgKHRpZHkgJiYgKnRpZHkpIHx8IChjcHBsaW50ICYmICpjcHBsaW50KSB8fAotICAgICAgICAgIChjcHBjaGVjayAmJiAqY3BwY2hlY2spKSB7CisgICAgICBjbVByb3AgY3BwY2hlY2sgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNwcGNoZWNrX3Byb3ApOworICAgICAgaWYgKGNtTm9uZW1wdHkoaXd5dSkgfHwgY21Ob25lbXB0eSh0aWR5KSB8fCBjbU5vbmVtcHR5KGNwcGxpbnQpIHx8CisgICAgICAgICAgY21Ob25lbXB0eShjcHBjaGVjaykpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgcnVuX2l3eXUgPSAiJChDTUFLRV9DT01NQU5EKSAtRSBfX3J1bl9jb19jb21waWxlIjsKICAgICAgICAgaWYgKCFjb21waWxlckxhdW5jaGVyLmVtcHR5KCkpIHsKICAgICAgICAgICAvLyBJbiBfX3J1bl9jb19jb21waWxlIGNhc2UgdGhlIGxhdW5jaGVyIGNvbW1hbmQgaXMgc3VwcGxpZWQKQEAgLTc3NywxMSArODMxLDExIEBACiAgICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKGNvbXBpbGVyTGF1bmNoZXIpOwogICAgICAgICAgIGNvbXBpbGVyTGF1bmNoZXIuY2xlYXIoKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaXd5dSAmJiAqaXd5dSkgeworICAgICAgICBpZiAoY21Ob25lbXB0eShpd3l1KSkgewogICAgICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1pd3l1PSI7Ci0gICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKGl3eXUpOworICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbCgqaXd5dSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRpZHkgJiYgKnRpZHkpIHsKKyAgICAgICAgaWYgKGNtTm9uZW1wdHkodGlkeSkpIHsKICAgICAgICAgICBydW5faXd5dSArPSAiIC0tdGlkeT0iOwogICAgICAgICAgIGNvbnN0IGNoYXIqIGRyaXZlck1vZGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKICAgICAgICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSIpOwpAQCAtNzg5LDE4ICs4NDMsMTggQEAKICAgICAgICAgICAgIGRyaXZlck1vZGUgPSBsYW5nID09ICJDIiA/ICJnY2MiIDogImcrKyI7CiAgICAgICAgICAgfQogICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbCgKLSAgICAgICAgICAgIGNtU3RyQ2F0KHRpZHksICI7LS1leHRyYS1hcmctYmVmb3JlPS0tZHJpdmVyLW1vZGU9IiwgZHJpdmVyTW9kZSkpOworICAgICAgICAgICAgY21TdHJDYXQoKnRpZHksICI7LS1leHRyYS1hcmctYmVmb3JlPS0tZHJpdmVyLW1vZGU9IiwgZHJpdmVyTW9kZSkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjcHBsaW50ICYmICpjcHBsaW50KSB7CisgICAgICAgIGlmIChjbU5vbmVtcHR5KGNwcGxpbnQpKSB7CiAgICAgICAgICAgcnVuX2l3eXUgKz0gIiAtLWNwcGxpbnQ9IjsKLSAgICAgICAgICBydW5faXd5dSArPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RXNjYXBlRm9yU2hlbGwoY3BwbGludCk7CisgICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKCpjcHBsaW50KTsKICAgICAgICAgfQotICAgICAgICBpZiAoY3BwY2hlY2sgJiYgKmNwcGNoZWNrKSB7CisgICAgICAgIGlmIChjbU5vbmVtcHR5KGNwcGNoZWNrKSkgewogICAgICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1jcHBjaGVjaz0iOwotICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbChjcHBjaGVjayk7CisgICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKCpjcHBjaGVjayk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCh0aWR5ICYmICp0aWR5KSB8fCAoY3BwbGludCAmJiAqY3BwbGludCkgfHwKLSAgICAgICAgICAgIChjcHBjaGVjayAmJiAqY3BwY2hlY2spKSB7CisgICAgICAgIGlmIChjbU5vbmVtcHR5KHRpZHkpIHx8IChjbU5vbmVtcHR5KGNwcGxpbnQpKSB8fAorICAgICAgICAgICAgKGNtTm9uZW1wdHkoY3BwY2hlY2spKSkgewogICAgICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1zb3VyY2U9IjsKICAgICAgICAgICBydW5faXd5dSArPSBzb3VyY2VGaWxlOwogICAgICAgICB9CkBAIC04MjcsNyArODgxLDcgQEAKICAgICB7CiAgICAgICBjb25zdCBjaGFyKiB2YWwgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0UnVsZUxhdW5jaGVyKAogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICJSVUxFX0xBVU5DSF9DT01QSUxFIik7Ci0gICAgICBpZiAodmFsICYmICp2YWwpIHsKKyAgICAgIGlmIChjbU5vbmVtcHR5KHZhbCkpIHsKICAgICAgICAgbGF1bmNoZXIgPSBjbVN0ckNhdCh2YWwsICcgJyk7CiAgICAgICB9CiAgICAgfQpAQCAtODQ4LDEwICs5MDIsMTUgQEAKIAogICAvLyBDaGVjayBmb3IgZXh0cmEgb3V0cHV0cyBjcmVhdGVkIGJ5IHRoZSBjb21waWxhdGlvbi4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHMoMSwgcmVsYXRpdmVPYmopOwotICBpZiAoY29uc3QgY2hhciogZXh0cmFfb3V0cHV0c19zdHIgPSBzb3VyY2UuR2V0UHJvcGVydHkoIk9CSkVDVF9PVVRQVVRTIikpIHsKLSAgICAvLyBSZWdpc3RlciB0aGVzZSBhcyBleHRyYSBmaWxlcyB0byBjbGVhbi4KLSAgICBjbUV4cGFuZExpc3QoZXh0cmFfb3V0cHV0c19zdHIsIG91dHB1dHMpOwotICAgIHRoaXMtPkNsZWFuRmlsZXMuaW5zZXJ0KG91dHB1dHMuYmVnaW4oKSArIDEsIG91dHB1dHMuZW5kKCkpOworICBpZiAoY21Qcm9wIGV4dHJhX291dHB1dHNfc3RyID0gc291cmNlLkdldFByb3BlcnR5KCJPQkpFQ1RfT1VUUFVUUyIpKSB7CisgICAgc3RkOjpzdHJpbmcgZXZhbHVhdGVkX291dHB1dHMgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAorICAgICAgKmV4dHJhX291dHB1dHNfc3RyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKworICAgIGlmICghZXZhbHVhdGVkX291dHB1dHMuZW1wdHkoKSkgeworICAgICAgLy8gUmVnaXN0ZXIgdGhlc2UgYXMgZXh0cmEgZmlsZXMgdG8gY2xlYW4uCisgICAgICBjbUV4cGFuZExpc3QoZXZhbHVhdGVkX291dHB1dHMsIG91dHB1dHMpOworICAgICAgdGhpcy0+Q2xlYW5GaWxlcy5pbnNlcnQob3V0cHV0cy5iZWdpbigpICsgMSwgb3V0cHV0cy5lbmQoKSk7CisgICAgfQogICB9CiAKICAgLy8gV3JpdGUgdGhlIHJ1bGUuCkBAIC0xMTMwLDggKzExODksNyBAQAogICAvLyB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgdGhlIGRlcGVuZGVuY3kgc2Nhbm5pbmcgcHJvY2Vzcy4KICAgZGVwQ21kIDw8ICJjZCAiCiAgICAgICAgICA8PCAodGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpLAorICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkpCiAgICAgICAgICA8PCAiICYmICI7CiAjZW5kaWYKQEAgLTExNDcsMjMgKzEyMDUsMTkgQEAKICAgZGVwQ21kIDw8ICIkKENNQUtFX0NPTU1BTkQpIC1FIGNtYWtlX2RlcGVuZHMgXCIiCiAgICAgICAgICA8PCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE5hbWUoKSA8PCAiXCIgIgogICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U291cmNlRGlyZWN0b3J5KCkpLAorICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U291cmNlRGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKICAgICAgICAgIDw8ICIgIgogICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpKSwKKyAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQogICAgICAgICAgPDwgIiAiCiAgICAgICAgICA8PCB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAotICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSksCisgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQogICAgICAgICAgPDwgIiAiCiAgICAgICAgICA8PCB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAotICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpLAorICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpCiAgICAgICAgICA8PCAiICIKICAgICAgICAgIDw8IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCkBAIC0xMjA2LDggKzEyNjAsOCBAQAogICAvLyBDcmVhdGUgdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGtub3duIGF0IGNtYWtlIHRpbWUuICBUaGVzZSBhcmUKICAgLy8gc2hhcmVkIGJldHdlZW4gdGhlIG9iamVjdCBmaWxlIGFuZCBkZXBlbmRlbmN5IHNjYW5uaW5nIHJ1bGUuCiAgIGRlcGVuZHMucHVzaF9iYWNrKHNvdXJjZS5HZXRGdWxsUGF0aCgpKTsKLSAgaWYgKGNvbnN0IGNoYXIqIG9iamVjdERlcHMgPSBzb3VyY2UuR2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKLSAgICBjbUV4cGFuZExpc3Qob2JqZWN0RGVwcywgZGVwZW5kcyk7CisgIGlmIChjbVByb3Agb2JqZWN0RGVwcyA9IHNvdXJjZS5HZXRQcm9wZXJ0eSgiT0JKRUNUX0RFUEVORFMiKSkgeworICAgIGNtRXhwYW5kTGlzdCgqb2JqZWN0RGVwcywgZGVwZW5kcyk7CiAgIH0KIH0KIApAQCAtMTI1MSw4ICsxMzA1LDEwIEBACiAKICAgLy8gU2V0dXAgaW1wbGljaXQgZGVwZW5kZW5jeSBzY2FubmluZy4KICAgZm9yIChhdXRvIGNvbnN0JiBpZGkgOiBjY2cuR2V0Q0MoKS5HZXRJbXBsaWNpdERlcGVuZHMoKSkgewotICAgIHN0ZDo6c3RyaW5nIG9iakZ1bGxQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChvdXRwdXRzWzBdKTsKLSAgICBzdGQ6OnN0cmluZyBzcmNGdWxsUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoaWRpLnNlY29uZCk7CisgICAgc3RkOjpzdHJpbmcgb2JqRnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgb3V0cHV0c1swXSwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgc3RkOjpzdHJpbmcgc3JjRnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgaWRpLnNlY29uZCwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZEltcGxpY2l0RGVwZW5kcyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGlkaS5maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iakZ1bGxQYXRoLCBzcmNGdWxsUGF0aCk7CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5oCmluZGV4IGVjNmIzMTQuLmYzOGY4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuaApAQCAtNjAsNiArNjAsOCBAQAogICBzdGQ6OnN0cmluZyBHZXRDb25maWdOYW1lKCk7CiAKIHByb3RlY3RlZDoKKyAgdm9pZCBHZXREZXZpY2VMaW5rRmxhZ3Moc3RkOjpzdHJpbmcmIGxpbmtGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSk7CiAgIHZvaWQgR2V0VGFyZ2V0TGlua0ZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSk7CiAKICAgLy8gY3JlYXRlIHRoZSBmaWxlIGFuZCBkaXJlY3RvcnkgZXRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYXRoQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21NYXRoQ29tbWFuZC5jeHgKaW5kZXggZjExYjkwNi4uNTYyMjFiZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWF0aENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbU1hdGhDb21tYW5kLmN4eApAQCAtNCw3ICs0LDcgQEAKIAogI2luY2x1ZGUgPGNzdGRpbz4KIAotI2luY2x1ZGUgImNtX2t3aW1sLmgiCisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21FeHByUGFyc2VySGVscGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NZXNzYWdlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21NZXNzYWdlQ29tbWFuZC5jeHgKaW5kZXggYmY4MTgzYi4uYzdiYjlhNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWVzc2FnZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbU1lc3NhZ2VDb21tYW5kLmN4eApAQCAtNiw4ICs2LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+Ci0KLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggZWVkNDYzZC4uZGU2ODM3MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNtTmluamFUeXBlcy5oIgogI2luY2x1ZGUgImNtT1NYQnVuZGxlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKQEAgLTE1NiwyMyArMTU3LDI1IEBACiBzdGQ6OnN0cmluZyBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZUxpbmtlclJ1bGUoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSArICJfIiArCi0gICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkgKwotICAgICJfTElOS0VSX18iICsKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAiXyIsCisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSksCisgICAgIl9MSU5LRVJfXyIsCiAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUoCi0gICAgICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXROYW1lKCkpICsKLSAgICAiXyIgKyBjb25maWc7CisgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpKSwKKyAgICAiXyIsIGNvbmZpZyk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6Okxhbmd1YWdlTGlua2VyRGV2aWNlUnVsZSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpICsgIl8iICsKLSAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0VHlwZSgpKSArCi0gICAgIl9ERVZJQ0VfTElOS0VSX18iICsKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAiXyIsCisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSksCisgICAgIl9ERVZJQ0VfTElOS0VSX18iLAogICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKAotICAgICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpKSArCi0gICAgIl8iICsgY29uZmlnOworICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKSksCisgICAgIl8iLCBjb25maWcpOwogfQogCiBzdHJ1Y3QgY21OaW5qYVJlbW92ZU5vT3BDb21tYW5kcwpAQCAtMTkxLDcgKzE5NCw4IEBACiAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKS5jX3N0cigpOwogICAgIHZhcnMuQ01UYXJnZXRUeXBlID0KLSAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRUeXBlKCkpOworICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkKKyAgICAgICAgLmNfc3RyKCk7CiAKICAgICB2YXJzLkxhbmd1YWdlID0gIkNVREEiOwogCkBAIC0yMzAsMTYgKzIzNCwxMiBAQAogICAgIHZhcnMuTGlua0ZsYWdzID0gIiRMSU5LX0ZMQUdTIjsKICAgICB2YXJzLk1hbmlmZXN0cyA9ICIkTUFOSUZFU1RTIjsKIAotICAgIHN0ZDo6c3RyaW5nIGxhbmdGbGFnczsKLSAgICBpZiAodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHsKLSAgICAgIGxhbmdGbGFncyArPSAiJExBTkdVQUdFX0NPTVBJTEVfRkxBR1MgJEFSQ0hfRkxBR1MiOwotICAgICAgdmFycy5MYW5ndWFnZUNvbXBpbGVGbGFncyA9IGxhbmdGbGFncy5jX3N0cigpOwotICAgIH0KKyAgICB2YXJzLkxhbmd1YWdlQ29tcGlsZUZsYWdzID0gIiRMQU5HVUFHRV9DT01QSUxFX0ZMQUdTIjsKIAogICAgIHN0ZDo6c3RyaW5nIGxhdW5jaGVyOwogICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFJ1bGVMYXVuY2hlcigKICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLCAiUlVMRV9MQVVOQ0hfTElOSyIpOwotICAgIGlmICh2YWwgJiYgKnZhbCkgeworICAgIGlmIChjbU5vbmVtcHR5KHZhbCkpIHsKICAgICAgIGxhdW5jaGVyID0gY21TdHJDYXQodmFsLCAnICcpOwogICAgIH0KIApAQCAtMjgyLDcgKzI4Miw3IEBACiAgICAgY21OaW5qYVJ1bGUgcnVsZShzdGQ6Om1vdmUobGlua1J1bGVOYW1lKSk7CiAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKS5jX3N0cigpOwotICAgIHZhcnMuQ01UYXJnZXRUeXBlID0gY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGFyZ2V0VHlwZSk7CisgICAgdmFycy5DTVRhcmdldFR5cGUgPSBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0YXJnZXRUeXBlKS5jX3N0cigpOwogCiAgICAgc3RkOjpzdHJpbmcgbGFuZyA9IHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpOwogICAgIHZhcnMuTGFuZ3VhZ2UgPSBjb25maWcuY19zdHIoKTsKQEAgLTM3Niw3ICszNzYsNyBAQAogICAgIHN0ZDo6c3RyaW5nIGxhdW5jaGVyOwogICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFJ1bGVMYXVuY2hlcigKICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLCAiUlVMRV9MQVVOQ0hfTElOSyIpOwotICAgIGlmICh2YWwgJiYgKnZhbCkgeworICAgIGlmIChjbU5vbmVtcHR5KHZhbCkpIHsKICAgICAgIGxhdW5jaGVyID0gY21TdHJDYXQodmFsLCAnICcpOwogICAgIH0KIApAQCAtNDU0LDE0ICs0NTQsMTIgQEAKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWTogewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgY3VkYUxpbmtDbWQoCi0gICAgICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24oIkNNQUtFX0NVREFfREVWSUNFX0xJTktfTElCUkFSWSIpKTsKLSAgICAgIGNtRXhwYW5kTGlzdChjdWRhTGlua0NtZCwgbGlua0NtZHMpOworICAgICAgdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0NtZHMpOwogICAgIH0gYnJlYWs7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU6IHsKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGN1ZGFMaW5rQ21kKHRoaXMtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24oCi0gICAgICAgICJDTUFLRV9DVURBX0RFVklDRV9MSU5LX0VYRUNVVEFCTEUiKSk7Ci0gICAgICBjbUV4cGFuZExpc3QoY3VkYUxpbmtDbWQsIGxpbmtDbWRzKTsKKyAgICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldERlZkV4cGFuZExpc3QoCisgICAgICAgICJDTUFLRV9DVURBX0RFVklDRV9MSU5LX0VYRUNVVEFCTEUiLCBsaW5rQ21kcyk7CiAgICAgfSBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CkBAIC01NTgsOSArNTU2LDggQEAKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKICAgICAgIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiU3dpZnQiKSB7CiAgICAgICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPklzRXhlY3V0YWJsZVdpdGhFeHBvcnRzKCkpIHsKLSAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmbGFncyA9Ci0gICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0VYRV9FWFBPUlRTX1N3aWZ0X0ZMQUciKTsKLSAgICAgICAgICBjbUV4cGFuZExpc3QoZmxhZ3MsIGxpbmtDbWRzKTsKKyAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfRVhFX0VYUE9SVFNfU3dpZnRfRkxBRyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0NtZHMpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTU4Nyw4ICs1ODQsNiBAQAogICAgIHJldHVybjsKICAgfQogCi0gIC8vIE5vdyB3ZSBjYW4gZG8gZGV2aWNlIGxpbmtpbmcKLQogICAvLyBGaXJzdCBhbmQgdmVyeSBpbXBvcnRhbnQgc3RlcCBpcyB0byBtYWtlIHN1cmUgd2hpbGUgaW5zaWRlIHRoaXMKICAgLy8gc3RlcCBvdXIgbGluayBsYW5ndWFnZSBpcyBzZXQgdG8gQ1VEQQogICBzdGQ6OnN0cmluZyBjdWRhTGlua0xhbmd1YWdlID0gIkNVREEiOwpAQCAtNjc0LDkgKzY2OSw5IEBACiAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFVzZVdhdGNvbVF1b3RlKHVzZVdhdGNvbVF1b3RlKTsKICAgbGlua0xpbmVDb21wdXRlci0+U2V0VXNlTmluamFNdWx0aShnbG9iYWxHZW4tPklzTXVsdGlDb25maWcoKSk7CiAKLSAgbG9jYWxHZW4uR2V0VGFyZ2V0RmxhZ3MoCi0gICAgbGlua0xpbmVDb21wdXRlci5nZXQoKSwgY29uZmlnLCB2YXJzWyJMSU5LX0xJQlJBUklFUyJdLCB2YXJzWyJGTEFHUyJdLAotICAgIHZhcnNbIkxJTktfRkxBR1MiXSwgZnJhbWV3b3JrUGF0aCwgbGlua1BhdGgsIGdlblRhcmdldCk7CisgIGxvY2FsR2VuLkdldERldmljZUxpbmtGbGFncyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzWyJMSU5LX0xJQlJBUklFUyJdLCB2YXJzWyJMSU5LX0ZMQUdTIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtQYXRoLCBsaW5rUGF0aCwgZ2VuVGFyZ2V0KTsKIAogICB0aGlzLT5hZGRQb29sTmluamFWYXJpYWJsZSgiSk9CX1BPT0xfTElOSyIsIGdlblRhcmdldCwgdmFycyk7CiAKQEAgLTY4NiwyMiArNjgxLDEyIEBACiAKICAgdmFyc1siTElOS19QQVRIIl0gPSBmcmFtZXdvcmtQYXRoICsgbGlua1BhdGg7CiAKLSAgLy8gQ29tcHV0ZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbGluayBmbGFncy4gIFllcywgdGhlc2UgZ28gaW50byBhIGRpZmZlcmVudAotICAvLyB2YXJpYWJsZSBmb3IgZXhlY3V0YWJsZXMsIHByb2JhYmx5IGR1ZSB0byBhIG1pc3Rha2UgbWFkZSB3aGVuIGR1cGxpY2F0aW5nCi0gIC8vIGNvZGUgYmV0d2VlbiB0aGUgTWFrZWZpbGUgZXhlY3V0YWJsZSBhbmQgbGlicmFyeSBnZW5lcmF0b3JzLgotICBpZiAodGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHsKLSAgICBzdGQ6OnN0cmluZyB0ID0gdmFyc1siRkxBR1MiXTsKLSAgICBsb2NhbEdlbi5BZGRBcmNoaXRlY3R1cmVGbGFncyh0LCBnZW5UYXJnZXQsIGN1ZGFMaW5rTGFuZ3VhZ2UsIGNvbmZpZyk7Ci0gICAgdmFyc1siRkxBR1MiXSA9IHQ7Ci0gIH0gZWxzZSB7Ci0gICAgc3RkOjpzdHJpbmcgdCA9IHZhcnNbIkFSQ0hfRkxBR1MiXTsKLSAgICBsb2NhbEdlbi5BZGRBcmNoaXRlY3R1cmVGbGFncyh0LCBnZW5UYXJnZXQsIGN1ZGFMaW5rTGFuZ3VhZ2UsIGNvbmZpZyk7Ci0gICAgdmFyc1siQVJDSF9GTEFHUyJdID0gdDsKLSAgICB0LmNsZWFyKCk7Ci0gICAgbG9jYWxHZW4uQWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcodCwgZ2VuVGFyZ2V0LCBjdWRhTGlua0xhbmd1YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7Ci0gICAgdmFyc1siTEFOR1VBR0VfQ09NUElMRV9GTEFHUyJdID0gdDsKLSAgfQorICAvLyBDb21wdXRlIGxhbmd1YWdlIHNwZWNpZmljIGxpbmsgZmxhZ3MuCisgIHN0ZDo6c3RyaW5nIGxhbmdGbGFnczsKKyAgbG9jYWxHZW4uQWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcobGFuZ0ZsYWdzLCBnZW5UYXJnZXQsIGN1ZGFMaW5rTGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CisgIHZhcnNbIkxBTkdVQUdFX0NPTVBJTEVfRkxBR1MiXSA9IGxhbmdGbGFnczsKKwogICBhdXRvIGNvbnN0IHRndE5hbWVzID0gdGhpcy0+VGFyZ2V0TmFtZXMoY29uZmlnKTsKICAgaWYgKGdlblRhcmdldC0+SGFzU09OYW1lKGNvbmZpZykpIHsKICAgICB2YXJzWyJTT05BTUVfRkxBRyJdID0KQEAgLTgxNyw4ICs4MDIsMjAgQEAKICAgICB0YXJnZXRPdXRwdXRSZWFsID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRhcmdldE91dHB1dFJlYWwpOwogICB9IGVsc2UgaWYgKGd0LT5Jc0ZyYW1ld29ya09uQXBwbGUoKSkgewogICAgIC8vIENyZWF0ZSB0aGUgbGlicmFyeSBmcmFtZXdvcmsuCisKKyAgICBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6U2tpcFBhcnRzIGJ1bmRsZVNraXBQYXJ0czsKKyAgICBpZiAoZ2xvYmFsR2VuLT5HZXROYW1lKCkgPT0gIk5pbmphIE11bHRpLUNvbmZpZyIpIHsKKyAgICAgIGNvbnN0IGF1dG8gcG9zdEZpeCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RmlsZVBvc3RmaXgoY29uZmlnKTsKKyAgICAgIC8vIFNraXAgY3JlYXRpbmcgSW5mby5wbGlzdCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucywgYW5kCisgICAgICAvLyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGhhcyBhIHBvc3RmaXguIFRoZSBub24tcG9zdGZpeCBjb25maWd1cmF0aW9uCisgICAgICAvLyBJbmZvLnBsaXN0IGNhbiBiZSB1c2VkIGJ5IGFsbCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMuCisgICAgICBpZiAoIXBvc3RGaXguZW1wdHkoKSkgeworICAgICAgICBidW5kbGVTa2lwUGFydHMuaW5mb1BsaXN0ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisKICAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUZyYW1ld29yaygKLSAgICAgIHRndE5hbWVzLk91dHB1dCwgZ3QtPkdldERpcmVjdG9yeShjb25maWcpLCBjb25maWcpOworICAgICAgdGd0TmFtZXMuT3V0cHV0LCBndC0+R2V0RGlyZWN0b3J5KGNvbmZpZyksIGNvbmZpZywgYnVuZGxlU2tpcFBhcnRzKTsKICAgfSBlbHNlIGlmIChndC0+SXNDRkJ1bmRsZU9uQXBwbGUoKSkgewogICAgIC8vIENyZWF0ZSB0aGUgY29yZSBmb3VuZGF0aW9uIGJ1bmRsZS4KICAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUNGQnVuZGxlKHRndE5hbWVzLk91dHB1dCwKQEAgLTg1Myw4ICs4NTAsOCBAQAogICAgIH0oKTsKIAogICAgIHZhcnNbIlNXSUZUX01PRFVMRV9OQU1FIl0gPSBbZ3RdKCkgLT4gc3RkOjpzdHJpbmcgewotICAgICAgaWYgKGNvbnN0IGNoYXIqIG5hbWUgPSBndC0+R2V0UHJvcGVydHkoIlN3aWZ0X01PRFVMRV9OQU1FIikpIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICBpZiAoY21Qcm9wIG5hbWUgPSBndC0+R2V0UHJvcGVydHkoIlN3aWZ0X01PRFVMRV9OQU1FIikpIHsKKyAgICAgICAgcmV0dXJuICpuYW1lOwogICAgICAgfQogICAgICAgcmV0dXJuIGd0LT5HZXROYW1lKCk7CiAgICAgfSgpOwpAQCAtODYyLDE1ICs4NTksMTUgQEAKICAgICB2YXJzWyJTV0lGVF9NT0RVTEUiXSA9IFt0aGlzXShjb25zdCBzdGQ6OnN0cmluZyYgbW9kdWxlKSAtPiBzdGQ6OnN0cmluZyB7CiAgICAgICBzdGQ6OnN0cmluZyBkaXJlY3RvcnkgPQogICAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7Ci0gICAgICBpZiAoY29uc3QgY2hhciogcHJvcCA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRQcm9wZXJ0eSgKKyAgICAgIGlmIChjbVByb3AgcHJvcCA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRQcm9wZXJ0eSgKICAgICAgICAgICAgICJTd2lmdF9NT0RVTEVfRElSRUNUT1JZIikpIHsKLSAgICAgICAgZGlyZWN0b3J5ID0gcHJvcDsKKyAgICAgICAgZGlyZWN0b3J5ID0gKnByb3A7CiAgICAgICB9CiAKICAgICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBtb2R1bGUgKyAiLnN3aWZ0bW9kdWxlIjsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBwcm9wID0KKyAgICAgIGlmIChjbVByb3AgcHJvcCA9CiAgICAgICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0UHJvcGVydHkoIlN3aWZ0X01PRFVMRSIpKSB7Ci0gICAgICAgIG5hbWUgPSBwcm9wOworICAgICAgICBuYW1lID0gKnByb3A7CiAgICAgICB9CiAKICAgICAgIHJldHVybiB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCkBAIC0xMDMwLDExICsxMDI3LDExIEBACiAgICAgc3RkOjpzdHJpbmcgcHJlZml4OwogICAgIHN0ZDo6c3RyaW5nIGJhc2U7CiAgICAgc3RkOjpzdHJpbmcgc3VmZml4OwotICAgIGd0LT5HZXRGdWxsTmFtZUNvbXBvbmVudHMocHJlZml4LCBiYXNlLCBzdWZmaXgpOworICAgIGd0LT5HZXRGdWxsTmFtZUNvbXBvbmVudHMocHJlZml4LCBiYXNlLCBzdWZmaXgsIGNvbmZpZyk7CiAgICAgc3RkOjpzdHJpbmcgZGJnX3N1ZmZpeCA9ICIuZGJnIjsKICAgICAvLyBUT0RPOiBXaGVyZSB0byBkb2N1bWVudD8KLSAgICBpZiAobWYtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1NZTUJPTF9TVUZGSVgiKSkgewotICAgICAgZGJnX3N1ZmZpeCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19TWU1CT0xfU1VGRklYIik7CisgICAgaWYgKGF1dG8gZCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19TWU1CT0xfU1VGRklYIikpIHsKKyAgICAgIGRiZ19zdWZmaXggPSBkOwogICAgIH0KICAgICB2YXJzWyJUQVJHRVRfUERCIl0gPSBiYXNlICsgc3VmZml4ICsgZGJnX3N1ZmZpeDsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDQ4NmVkOGQuLmRlMTg1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTcsMTMgKzcsMTUgQEAKICNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vd3JpdGVyLmg+CiAKICNpbmNsdWRlICJjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuaCIKQEAgLTI3LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21OaW5qYVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgpAQCAtNjIsNyArNjUsOCBAQAogICAsIExvY2FsR2VuZXJhdG9yKAogICAgICAgc3RhdGljX2Nhc3Q8Y21Mb2NhbE5pbmphR2VuZXJhdG9yKj4odGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpKSkKIHsKLSAgZm9yIChhdXRvIGNvbnN0JiBmaWxlQ29uZmlnIDogdGFyZ2V0LT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygpKSB7CisgIGZvciAoYXV0byBjb25zdCYgZmlsZUNvbmZpZyA6CisgICAgICAgdGFyZ2V0LT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpKSB7CiAgICAgdGhpcy0+Q29uZmlnc1tmaWxlQ29uZmlnXS5NYWNPU1hDb250ZW50R2VuZXJhdG9yID0KICAgICAgIGNtOjptYWtlX3VuaXF1ZTxNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZT4odGhpcywgZmlsZUNvbmZpZyk7CiAgIH0KQEAgLTk0LDE3ICs5OCwyOCBAQAogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VDb21waWxlclJ1bGUoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewotICByZXR1cm4gbGFuZyArICJfQ09NUElMRVJfXyIgKwotICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpKSArCi0gICAgIl8iICsgY29uZmlnOworICByZXR1cm4gY21TdHJDYXQoCisgICAgbGFuZywgIl9DT01QSUxFUl9fIiwKKyAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSksCisgICAgJ18nLCBjb25maWcpOwogfQogCiBzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZVByZXByb2Nlc3NSdWxlKAogICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuIGxhbmcgKyAiX1BSRVBST0NFU1NfXyIgKwotICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpKSArCi0gICAgIl8iICsgY29uZmlnOworICByZXR1cm4gY21TdHJDYXQoCisgICAgbGFuZywgIl9QUkVQUk9DRVNTX1NDQU5fXyIsCisgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpLAorICAgICdfJywgY29uZmlnKTsKK30KKworc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VEZXBlbmRlbmN5UnVsZSgKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Cit7CisgIHJldHVybiBjbVN0ckNhdCgKKyAgICBsYW5nLCAiX1NDQU5fXyIsCisgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpLAorICAgICdfJywgY29uZmlnKTsKIH0KIAogYm9vbCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpOZWVkRXhwbGljaXRQcmVwcm9jZXNzaW5nKApAQCAtMTI5LDkgKzE0NCwxMCBAQAogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VEeW5kZXBSdWxlKAogICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuIGxhbmcgKyAiX0RZTkRFUF9fIiArCi0gICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpICsKLSAgICAiXyIgKyBjb25maWc7CisgIHJldHVybiBjbVN0ckNhdCgKKyAgICBsYW5nLCAiX0RZTkRFUF9fIiwKKyAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSksCisgICAgJ18nLCBjb25maWcpOwogfQogCiBib29sIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Ok5lZWREeW5kZXAoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0CkBAIC0xNTQsMTEgKzE3MCw0MCBAQAogICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICBzdGQ6OnN0cmluZyBmbGFncyA9IHRoaXMtPkdldEZsYWdzKGxhbmd1YWdlLCBjb25maWcpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJjaGl0ZWN0dXJlczsKKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gcGNoU291cmNlczsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRBcHBsZUFyY2hzKGNvbmZpZywgYXJjaGl0ZWN0dXJlcyk7CisgIGlmIChhcmNoaXRlY3R1cmVzLmVtcHR5KCkpIHsKKyAgICBhcmNoaXRlY3R1cmVzLmVtcGxhY2VfYmFjaygpOworICB9CisKKyAgc3RkOjpzdHJpbmcgZmlsdGVyQXJjaDsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPQorICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hTb3VyY2UoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CisgICAgaWYgKHBjaFNvdXJjZSA9PSBzb3VyY2UtPkdldEZ1bGxQYXRoKCkpIHsKKyAgICAgIGZpbHRlckFyY2ggPSBhcmNoOworICAgIH0KKyAgICBpZiAoIXBjaFNvdXJjZS5lbXB0eSgpKSB7CisgICAgICBwY2hTb3VyY2VzLmluc2VydChzdGQ6Om1ha2VfcGFpcihwY2hTb3VyY2UsIGFyY2gpKTsKKyAgICB9CisgIH0KKworICBzdGQ6OnN0cmluZyBmbGFnczsKKyAgLy8gZXhwbGljaXRseSBhZGQgdGhlIGV4cGxpY2l0IGxhbmd1YWdlIGZsYWcgYmVmb3JlIGFueSBvdGhlciBmbGFnCisgIC8vIHRoaXMgd2F5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdXNlciBmbGFncyBpcyBtYWludGFpbmVkCisgIGlmIChzb3VyY2UtPkdldFByb3BlcnR5KCJMQU5HVUFHRSIpKSB7CisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZlYXR1cmVPcHRpb25zKGZsYWdzLCBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVYUExJQ0lUX0xBTkdVQUdFIik7CisgICAgZmxhZ3MgKz0gIiAiOworICB9CisKKyAgZmxhZ3MgKz0gdGhpcy0+R2V0RmxhZ3MobGFuZ3VhZ2UsIGNvbmZpZywgZmlsdGVyQXJjaCk7CiAKICAgLy8gQWRkIEZvcnRyYW4gZm9ybWF0IGZsYWdzLgogICBpZiAobGFuZ3VhZ2UgPT0gIkZvcnRyYW4iKSB7CiAgICAgdGhpcy0+QXBwZW5kRm9ydHJhbkZvcm1hdEZsYWdzKGZsYWdzLCAqc291cmNlKTsKKyAgICB0aGlzLT5BcHBlbmRGb3J0cmFuUHJlcHJvY2Vzc0ZsYWdzKGZsYWdzLCAqc291cmNlKTsKICAgfQogCiAgIC8vIEFkZCBzb3VyY2UgZmlsZSBzcGVjaWZpYyBmbGFncy4KQEAgLTE2NiwyNiArMjExLDI0IEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5ndWFnZSk7CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9GTEFHUygiQ09NUElMRV9GTEFHUyIpOwotICBpZiAoY29uc3QgY2hhciogY2ZsYWdzID0gc291cmNlLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgeworICBpZiAoY21Qcm9wIGNmbGFncyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9GTEFHUykpIHsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MoCi0gICAgICBmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjZmxhZ3MsIENPTVBJTEVfRkxBR1MpKTsKKyAgICAgIGZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjZmxhZ3MsIENPTVBJTEVfRkxBR1MpKTsKICAgfQogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfT1BUSU9OUygiQ09NUElMRV9PUFRJT05TIik7Ci0gIGlmIChjb25zdCBjaGFyKiBjb3B0aW9ucyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9PUFRJT05TKSkgeworICBpZiAoY21Qcm9wIGNvcHRpb25zID0gc291cmNlLT5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZENvbXBpbGVPcHRpb25zKAotICAgICAgZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOworICAgICAgZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvcHRpb25zLCBDT01QSUxFX09QVElPTlMpKTsKICAgfQogCiAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgY29tcGlsZSBvcHRpb25zLgotICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZ3VhZ2UpOwotCi0gIGlmICghcGNoU291cmNlLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKKyAgaWYgKCFwY2hTb3VyY2VzLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKICAgICBzdGQ6OnN0cmluZyBwY2hPcHRpb25zOwotICAgIGlmIChzb3VyY2UtPkdldEZ1bGxQYXRoKCkgPT0gcGNoU291cmNlKSB7Ci0gICAgICBwY2hPcHRpb25zID0KLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hDcmVhdGVDb21waWxlT3B0aW9ucyhjb25maWcsIGxhbmd1YWdlKTsKKyAgICBhdXRvIHBjaEl0ID0gcGNoU291cmNlcy5maW5kKHNvdXJjZS0+R2V0RnVsbFBhdGgoKSk7CisgICAgaWYgKHBjaEl0ICE9IHBjaFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgIHBjaE9wdGlvbnMgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaENyZWF0ZUNvbXBpbGVPcHRpb25zKAorICAgICAgICBjb25maWcsIGxhbmd1YWdlLCBwY2hJdC0+c2Vjb25kKTsKICAgICB9IGVsc2UgewogICAgICAgcGNoT3B0aW9ucyA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoVXNlQ29tcGlsZU9wdGlvbnMoY29uZmlnLCBsYW5ndWFnZSk7CkBAIC0yMTksOCArMjYyLDggQEAKIAogYm9vbCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpOZWVkRGVwVHlwZU1TVkMoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpIGNvbnN0CiB7Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXB0eXBlID0KLSAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfTklOSkFfREVQVFlQRV8iICsgbGFuZyk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXB0eXBlID0gdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0U2FmZURlZmluaXRpb24oCisgICAgY21TdHJDYXQoIkNNQUtFX05JTkpBX0RFUFRZUEVfIiwgbGFuZykpOwogICBpZiAoZGVwdHlwZSA9PSAibXN2YyIpIHsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpAQCAtMjU5LDE3ICszMDIsMTcgQEAKICAgfQogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfREVGSU5JVElPTlMoIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKKyAgaWYgKGNtUHJvcCBjb21waWxlX2RlZnMgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZERlZmluZXMoCi0gICAgICBkZWZpbmVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykpOworICAgICAgZGVmaW5lcywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBkZWZQcm9wTmFtZSA9CiAgICAgY21TdHJDYXQoIkNPTVBJTEVfREVGSU5JVElPTlNfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZykpOwotICBpZiAoY29uc3QgY2hhciogY29uZmlnX2NvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CisgIGlmIChjbVByb3AgY29uZmlnX2NvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZERlZmluZXMoCiAgICAgICBkZWZpbmVzLAotICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBkZWZpbmVzU3RyaW5nID0gdGhpcy0+R2V0RGVmaW5lcyhsYW5ndWFnZSwgY29uZmlnKTsKQEAgLTI4Nyw5ICszMzAsOSBAQAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UpOwogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIElOQ0xVREVfRElSRUNUT1JJRVMoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNpbmNsdWRlcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKKyAgaWYgKGNtUHJvcCBjaW5jbHVkZXMgPSBzb3VyY2UtPkdldFByb3BlcnR5KElOQ0xVREVfRElSRUNUT1JJRVMpKSB7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcygKLSAgICAgIGluY2x1ZGVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNpbmNsdWRlcywgSU5DTFVERV9ESVJFQ1RPUklFUyksCisgICAgICBpbmNsdWRlcywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKSwKICAgICAgICpzb3VyY2UpOwogICB9CiAKQEAgLTM1NSwxMyArMzk4LDEyIEBACiB7CiAgIHN0ZDo6c3RyaW5nIHBhdGggPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SG9tZVJlbGF0aXZlT3V0cHV0UGF0aCgpOwogICBpZiAoIXBhdGguZW1wdHkoKSkgewotICAgIHBhdGggKz0gIi8iOworICAgIHBhdGggKz0gJy8nOwogICB9CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvYmplY3ROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPYmplY3ROYW1lKHNvdXJjZSk7Ci0gIHBhdGggKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOwotICBwYXRoICs9IHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Db25maWdEaXJlY3RvcnkoY29uZmlnKTsKLSAgcGF0aCArPSAiLyI7Ci0gIHBhdGggKz0gb2JqZWN0TmFtZTsKKyAgcGF0aCArPSBjbVN0ckNhdCgKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCksCisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpLCAnLycsIG9iamVjdE5hbWUpOwogICByZXR1cm4gcGF0aDsKIH0KIApAQCAtMzg5LDE2ICs0MzEsMTUgQEAKICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TGFuZ3VhZ2VPdXRwdXRFeHRlbnNpb24oKnNvdXJjZSk7CiAgIGFzc2VydChvYmpOYW1lLnNpemUoKSA+PSBvYmpFeHQuc2l6ZSgpKTsKICAgc3RkOjpzdHJpbmcgY29uc3QgcHBOYW1lID0KLSAgICBvYmpOYW1lLnN1YnN0cigwLCBvYmpOYW1lLnNpemUoKSAtIG9iakV4dC5zaXplKCkpICsgIi1wcC4iICsgcHBFeHQ7CisgICAgY21TdHJDYXQob2JqTmFtZS5zdWJzdHIoMCwgb2JqTmFtZS5zaXplKCkgLSBvYmpFeHQuc2l6ZSgpKSwgIi1wcC4iLCBwcEV4dCk7CiAKICAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRIb21lUmVsYXRpdmVPdXRwdXRQYXRoKCk7CiAgIGlmICghcGF0aC5lbXB0eSgpKSB7Ci0gICAgcGF0aCArPSAiLyI7CisgICAgcGF0aCArPSAnLyc7CiAgIH0KLSAgcGF0aCArPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCk7Ci0gIHBhdGggKz0gdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpOwotICBwYXRoICs9ICIvIjsKLSAgcGF0aCArPSBwcE5hbWU7CisgIHBhdGggKz0KKyAgICBjbVN0ckNhdCh0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCksCisgICAgICAgICAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpLCAnLycsIHBwTmFtZSk7CiAgIHJldHVybiBwYXRoOwogfQogCkBAIC00MDcsMTMgKzQ0OCwxMSBAQAogewogICBzdGQ6OnN0cmluZyBwYXRoID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEhvbWVSZWxhdGl2ZU91dHB1dFBhdGgoKTsKICAgaWYgKCFwYXRoLmVtcHR5KCkpIHsKLSAgICBwYXRoICs9ICIvIjsKKyAgICBwYXRoICs9ICcvJzsKICAgfQotICBwYXRoICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKLSAgcGF0aCArPSB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZyk7Ci0gIHBhdGggKz0gIi8iOwotICBwYXRoICs9IGxhbmc7Ci0gIHBhdGggKz0gIi5kZCI7CisgIHBhdGggKz0gY21TdHJDYXQoCisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpLAorICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Db25maWdEaXJlY3RvcnkoY29uZmlnKSwgJy8nLCBsYW5nLCAiLmRkIik7CiAgIHJldHVybiBwYXRoOwogfQogCkBAIC00NDIsOCArNDgxLDcgQEAKICAgaWYgKHBhdGguZW1wdHkoKSB8fCBwYXRoID09ICIuIikgewogICAgIHJldHVybiBuYW1lOwogICB9Ci0gIHBhdGggKz0gIi8iOwotICBwYXRoICs9IG5hbWU7CisgIHBhdGggKz0gY21TdHJDYXQoJy8nLCBuYW1lKTsKICAgcmV0dXJuIHBhdGg7CiB9CiAKQEAgLTQ5MSwxMyArNTI5LDk4IEBACiAgIHRoaXMtPldyaXRlQ29tcGlsZVJ1bGUobGFuZ3VhZ2UsIGNvbmZpZyk7CiB9CiAKK25hbWVzcGFjZSB7CisvLyBDcmVhdGUgdGhlIGNvbW1hbmQgdG8gcnVuIHRoZSBkZXBlbmRlbmN5IHNjYW5uZXIKK3N0ZDo6c3RyaW5nIEdldFNjYW5Db21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBjbWFrZUNtZCwgY29uc3Qgc3RkOjpzdHJpbmcmIHRkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBjb25zdCBzdGQ6OnN0cmluZyYgcHBGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkRHluZGVwLCBjb25zdCBzdGQ6OnN0cmluZyYgZGRpRmlsZSkKK3sKKyAgc3RkOjpzdHJpbmcgY2NtZCA9CisgICAgY21TdHJDYXQoY21ha2VDbWQsICIgLUUgY21ha2VfbmluamFfZGVwZW5kcyAtLXRkaT0iLCB0ZGksICIgLS1sYW5nPSIsIGxhbmcsCisgICAgICAgICAgICAgIiAtLXBwPSIsIHBwRmlsZSwgIiAtLWRlcD0kREVQX0ZJTEUiKTsKKyAgaWYgKG5lZWREeW5kZXApIHsKKyAgICBjY21kID0gY21TdHJDYXQoY2NtZCwgIiAtLW9iaj0kT0JKX0ZJTEUgLS1kZGk9IiwgZGRpRmlsZSk7CisgIH0KKyAgcmV0dXJuIGNjbWQ7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgZGVwZW5kZW5jeSBzY2FubmluZyBydWxlLCB3aXRoIG9wdGlvbmFsCisvLyBleHBsaWNpdCBwcmVwcm9jZXNzaW5nIHN0ZXAgaWYgcHJlcHJvY2Vzc0NvbW1hbmQgaXMgbm9uLWVtcHR5CitjbU5pbmphUnVsZSBHZXRQcmVwcm9jZXNzU2NhblJ1bGUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBydWxlTmFtZSwgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyYgdmFycywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlc3BvbnNlRmxhZywgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdzLAorICBjb25zdCBzdGQ6OnN0cmluZyYgbGF1bmNoZXIsCisgIGNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIqIGNvbnN0IHJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLAorICBzdGQ6OnN0cmluZyBzY2FuQ29tbWFuZCwgY21Mb2NhbE5pbmphR2VuZXJhdG9yKiBnZW5lcmF0b3IsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcmVwcm9jZXNzQ29tbWFuZCA9ICIiKQoreworICBjbU5pbmphUnVsZSBydWxlKHJ1bGVOYW1lKTsKKyAgLy8gRXhwbGljaXQgcHJlcHJvY2Vzc2luZyBhbHdheXMgdXNlcyBhIGRlcGZpbGUuCisgIHJ1bGUuRGVwVHlwZSA9ICIiOyAvLyBubyBkZXBzPSBmb3IgbXVsdGlwbGUgb3V0cHV0cworICBydWxlLkRlcEZpbGUgPSAiJERFUF9GSUxFIjsKKworICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHBwVmFyczsKKyAgcHBWYXJzLkNNVGFyZ2V0TmFtZSA9IHZhcnMuQ01UYXJnZXROYW1lOworICBwcFZhcnMuQ01UYXJnZXRUeXBlID0gdmFycy5DTVRhcmdldFR5cGU7CisgIHBwVmFycy5MYW5ndWFnZSA9IHZhcnMuTGFuZ3VhZ2U7CisgIHBwVmFycy5PYmplY3QgPSAiJG91dCI7IC8vIGZvciBSVUxFX0xBVU5DSF9DT01QSUxFCisgIHBwVmFycy5QcmVwcm9jZXNzZWRTb3VyY2UgPSAiJG91dCI7CisgIHBwVmFycy5EZXBlbmRlbmN5RmlsZSA9IHJ1bGUuRGVwRmlsZS5jX3N0cigpOworCisgIC8vIFByZXByb2Nlc3NpbmcgdXNlcyB0aGUgb3JpZ2luYWwgc291cmNlLCBjb21waWxhdGlvbiB1c2VzCisgIC8vIHByZXByb2Nlc3NlZCBvdXRwdXQgb3Igb3JpZ2luYWwgc291cmNlCisgIHBwVmFycy5Tb3VyY2UgPSB2YXJzLlNvdXJjZTsKKyAgdmFycy5Tb3VyY2UgPSAiJGluIjsKKworICAvLyBDb3B5IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIHJ1bGUuCisgIHBwVmFycy5EZWZpbmVzID0gdmFycy5EZWZpbmVzOworCisgIC8vIENvcHkgaW5jbHVkZSBkaXJlY3RvcmllcyB0byB0aGUgcHJlcHJvY2Vzc29yIHJ1bGUuICBUaGUgRm9ydHJhbgorICAvLyBjb21waWxhdGlvbiBydWxlIHN0aWxsIG5lZWRzIHRoZW0gZm9yIHRoZSBJTkNMVURFIGRpcmVjdGl2ZS4KKyAgcHBWYXJzLkluY2x1ZGVzID0gdmFycy5JbmNsdWRlczsKKworICAvLyBQcmVwcm9jZXNzaW5nIGFuZCBjb21waWxhdGlvbiB1c2UgdGhlIHNhbWUgZmxhZ3MuCisgIHN0ZDo6c3RyaW5nIHBwRmxhZ3MgPSBmbGFnczsKKworICAvLyBJZiB1c2luZyBhIHJlc3BvbnNlIGZpbGUsIG1vdmUgZGVmaW5lcywgaW5jbHVkZXMsIGFuZCBmbGFncyBpbnRvIGl0LgorICBpZiAoIXJlc3BvbnNlRmxhZy5lbXB0eSgpKSB7CisgICAgcnVsZS5Sc3BGaWxlID0gIiRSU1BfRklMRSI7CisgICAgcnVsZS5Sc3BDb250ZW50ID0KKyAgICAgIGNtU3RyQ2F0KCcgJywgcHBWYXJzLkRlZmluZXMsICcgJywgcHBWYXJzLkluY2x1ZGVzLCAnICcsIHBwRmxhZ3MpOworICAgIHBwRmxhZ3MgPSBjbVN0ckNhdChyZXNwb25zZUZsYWcsIHJ1bGUuUnNwRmlsZSk7CisgICAgcHBWYXJzLkRlZmluZXMgPSAiIjsKKyAgICBwcFZhcnMuSW5jbHVkZXMgPSAiIjsKKyAgfQorCisgIHBwVmFycy5GbGFncyA9IHBwRmxhZ3MuY19zdHIoKTsKKworICAvLyBSdWxlIGZvciBwcmVwcm9jZXNzaW5nIHNvdXJjZSBmaWxlLgorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHBDbWRzOworCisgIGlmICghcHJlcHJvY2Vzc0NvbW1hbmQuZW1wdHkoKSkgeworICAgIC8vIExvb2t1cCB0aGUgZXhwbGljaXQgcHJlcHJvY2Vzc2luZyBydWxlLgorICAgIGNtRXhwYW5kTGlzdChwcmVwcm9jZXNzQ29tbWFuZCwgcHBDbWRzKTsKKyAgICBmb3IgKHN0ZDo6c3RyaW5nJiBpIDogcHBDbWRzKSB7CisgICAgICBpID0gY21TdHJDYXQobGF1bmNoZXIsIGkpOworICAgICAgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXItPkV4cGFuZFJ1bGVWYXJpYWJsZXMoZ2VuZXJhdG9yLCBpLCBwcFZhcnMpOworICAgIH0KKyAgfQorCisgIC8vIFJ1biBDTWFrZSBkZXBlbmRlbmN5IHNjYW5uZXIgb24gZWl0aGVyIHByZXByb2Nlc3NlZCBvdXRwdXQgb3Igc291cmNlIGZpbGUKKyAgcHBDbWRzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoc2NhbkNvbW1hbmQpKTsKKyAgcnVsZS5Db21tYW5kID0gZ2VuZXJhdG9yLT5CdWlsZENvbW1hbmRMaW5lKHBwQ21kcyk7CisKKyAgcmV0dXJuIHJ1bGU7Cit9Cit9CisKIHZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6V3JpdGVDb21waWxlUnVsZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKS5jX3N0cigpOwogICB2YXJzLkNNVGFyZ2V0VHlwZSA9Ci0gICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSk7CisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkuY19zdHIoKTsKICAgdmFycy5MYW5ndWFnZSA9IGxhbmcuY19zdHIoKTsKICAgdmFycy5Tb3VyY2UgPSAiJGluIjsKICAgdmFycy5PYmplY3QgPSAiJG91dCI7CkBAIC01MjIsNyArNjQ1LDcgQEAKICAgYm9vbCBjb25zdCBsYW5nX3N1cHBvcnRzX3Jlc3BvbnNlID0gbGFuZyAhPSAiUkMiOwogICBpZiAobGFuZ19zdXBwb3J0c19yZXNwb25zZSAmJiB0aGlzLT5Gb3JjZVJlc3BvbnNlRmlsZSgpKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QgcmVzcG9uc2VGbGFnVmFyID0KLSAgICAgICJDTUFLRV8iICsgbGFuZyArICJfUkVTUE9OU0VfRklMRV9GTEFHIjsKKyAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1JFU1BPTlNFX0ZJTEVfRkxBRyIpOwogICAgIHJlc3BvbnNlRmxhZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihyZXNwb25zZUZsYWdWYXIpOwogICAgIGlmIChyZXNwb25zZUZsYWcuZW1wdHkoKSAmJiBsYW5nICE9ICJDVURBIikgewogICAgICAgcmVzcG9uc2VGbGFnID0gIkAiOwpAQCAtNTM5LDcgKzY2Miw3IEBACiAgIHN0ZDo6c3RyaW5nIGxhdW5jaGVyOwogICBjb25zdCBjaGFyKiB2YWwgPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRSdWxlTGF1bmNoZXIoCiAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksICJSVUxFX0xBVU5DSF9DT01QSUxFIik7Ci0gIGlmICh2YWwgJiYgKnZhbCkgeworICBpZiAoY21Ob25lbXB0eSh2YWwpKSB7CiAgICAgbGF1bmNoZXIgPSBjbVN0ckNhdCh2YWwsICcgJyk7CiAgIH0KIApAQCAtNTQ4LDgyICs2NzEsNDIgQEAKICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCBjbUxvY2FsR2VuZXJhdG9yOjpTSEVMTCk7CiAKICAgaWYgKGV4cGxpY2l0UFApIHsKLSAgICBjbU5pbmphUnVsZSBydWxlKHRoaXMtPkxhbmd1YWdlUHJlcHJvY2Vzc1J1bGUobGFuZywgY29uZmlnKSk7Ci0gICAgLy8gRXhwbGljaXQgcHJlcHJvY2Vzc2luZyBhbHdheXMgdXNlcyBhIGRlcGZpbGUuCi0gICAgcnVsZS5EZXBUeXBlID0gIiI7IC8vIG5vIGRlcHM9IGZvciBtdWx0aXBsZSBvdXRwdXRzCi0gICAgcnVsZS5EZXBGaWxlID0gIiRERVBfRklMRSI7CisgICAgLy8gQ29tYmluZWQgcHJlcHJvY2Vzc2luZyBhbmQgZGVwZW5kZW5jeSBzY2FubmluZworICAgIGNvbnN0IGF1dG8gcHBTY2FuQ29tbWFuZCA9IEdldFNjYW5Db21tYW5kKAorICAgICAgY21ha2VDbWQsIHRkaSwgbGFuZywgIiRvdXQiLCBuZWVkRHluZGVwLCAiJERZTkRFUF9JTlRFUk1FRElBVEVfRklMRSIpOworICAgIGNvbnN0IGF1dG8gcHBWYXIgPSBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9QUkVQUk9DRVNTX1NPVVJDRSIpOwogCi0gICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyBwcFZhcnM7Ci0gICAgcHBWYXJzLkNNVGFyZ2V0TmFtZSA9IHZhcnMuQ01UYXJnZXROYW1lOwotICAgIHBwVmFycy5DTVRhcmdldFR5cGUgPSB2YXJzLkNNVGFyZ2V0VHlwZTsKLSAgICBwcFZhcnMuTGFuZ3VhZ2UgPSB2YXJzLkxhbmd1YWdlOwotICAgIHBwVmFycy5PYmplY3QgPSAiJG91dCI7IC8vIGZvciBSVUxFX0xBVU5DSF9DT01QSUxFCi0gICAgcHBWYXJzLlByZXByb2Nlc3NlZFNvdXJjZSA9ICIkb3V0IjsKLSAgICBwcFZhcnMuRGVwZW5kZW5jeUZpbGUgPSBydWxlLkRlcEZpbGUuY19zdHIoKTsKLQotICAgIC8vIFByZXByb2Nlc3NpbmcgdXNlcyB0aGUgb3JpZ2luYWwgc291cmNlLAotICAgIC8vIGNvbXBpbGF0aW9uIHVzZXMgcHJlcHJvY2Vzc2VkIG91dHB1dC4KLSAgICBwcFZhcnMuU291cmNlID0gdmFycy5Tb3VyY2U7Ci0gICAgdmFycy5Tb3VyY2UgPSAiJGluIjsKLQotICAgIC8vIFByZXByb2Nlc3NpbmcgYW5kIGNvbXBpbGF0aW9uIHVzZSB0aGUgc2FtZSBmbGFncy4KLSAgICBzdGQ6OnN0cmluZyBwcEZsYWdzID0gZmxhZ3M7Ci0KLSAgICBpZiAoIWNvbXBpbGVQUFdpdGhEZWZpbmVzKSB7Ci0gICAgICAvLyBNb3ZlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIHJ1bGUuCi0gICAgICBwcFZhcnMuRGVmaW5lcyA9IHZhcnMuRGVmaW5lczsKLSAgICAgIHZhcnMuRGVmaW5lcyA9ICIiOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBDb3B5IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIHJ1bGUuCi0gICAgICBwcFZhcnMuRGVmaW5lcyA9IHZhcnMuRGVmaW5lczsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IGluY2x1ZGUgZGlyZWN0b3JpZXMgdG8gdGhlIHByZXByb2Nlc3NvciBydWxlLiAgVGhlIEZvcnRyYW4KLSAgICAvLyBjb21waWxhdGlvbiBydWxlIHN0aWxsIG5lZWRzIHRoZW0gZm9yIHRoZSBJTkNMVURFIGRpcmVjdGl2ZS4KLSAgICBwcFZhcnMuSW5jbHVkZXMgPSB2YXJzLkluY2x1ZGVzOwotCi0gICAgLy8gSWYgdXNpbmcgYSByZXNwb25zZSBmaWxlLCBtb3ZlIGRlZmluZXMsIGluY2x1ZGVzLCBhbmQgZmxhZ3MgaW50byBpdC4KLSAgICBpZiAoIXJlc3BvbnNlRmxhZy5lbXB0eSgpKSB7Ci0gICAgICBydWxlLlJzcEZpbGUgPSAiJFJTUF9GSUxFIjsKLSAgICAgIHJ1bGUuUnNwQ29udGVudCA9Ci0gICAgICAgIGNtU3RyQ2F0KCcgJywgcHBWYXJzLkRlZmluZXMsICcgJywgcHBWYXJzLkluY2x1ZGVzLCAnICcsIHBwRmxhZ3MpOwotICAgICAgcHBGbGFncyA9IHJlc3BvbnNlRmxhZyArIHJ1bGUuUnNwRmlsZTsKLSAgICAgIHBwVmFycy5EZWZpbmVzID0gIiI7Ci0gICAgICBwcFZhcnMuSW5jbHVkZXMgPSAiIjsKLSAgICB9Ci0KLSAgICBwcFZhcnMuRmxhZ3MgPSBwcEZsYWdzLmNfc3RyKCk7Ci0KLSAgICAvLyBSdWxlIGZvciBwcmVwcm9jZXNzaW5nIHNvdXJjZSBmaWxlLgotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcENtZHM7Ci0gICAgewotICAgICAgLy8gTG9va3VwIHRoZSBleHBsaWNpdCBwcmVwcm9jZXNzaW5nIHJ1bGUuCi0gICAgICBzdGQ6OnN0cmluZyBwcFZhciA9IGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1BSRVBST0NFU1NfU09VUkNFIik7Ci0gICAgICBjbUV4cGFuZExpc3QodGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0UmVxdWlyZWREZWZpbml0aW9uKHBwVmFyKSwgcHBDbWRzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHN0ZDo6c3RyaW5nJiBpIDogcHBDbWRzKSB7Ci0gICAgICBpID0gY21TdHJDYXQobGF1bmNoZXIsIGkpOwotICAgICAgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXItPkV4cGFuZFJ1bGVWYXJpYWJsZXModGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHBwVmFycyk7Ci0gICAgfQotCi0gICAgLy8gUnVuIENNYWtlIGRlcGVuZGVuY3kgc2Nhbm5lciBvbiBwcmVwcm9jZXNzZWQgb3V0cHV0LgotICAgIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGNjbWQgPQotICAgICAgICBjbVN0ckNhdChjbWFrZUNtZCwgIiAtRSBjbWFrZV9uaW5qYV9kZXBlbmRzIC0tdGRpPSIsIHRkaSwKLSAgICAgICAgICAgICAgICAgIiAtLWxhbmc9IiwgbGFuZywgIiAtLXBwPSRvdXQgLS1kZXA9JERFUF9GSUxFIik7Ci0gICAgICBpZiAobmVlZER5bmRlcCkgewotICAgICAgICBjY21kICs9ICIgLS1vYmo9JE9CSl9GSUxFIC0tZGRpPSREWU5ERVBfSU5URVJNRURJQVRFX0ZJTEUiOwotICAgICAgfQotICAgICAgcHBDbWRzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoY2NtZCkpOwotICAgIH0KLSAgICBydWxlLkNvbW1hbmQgPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5CdWlsZENvbW1hbmRMaW5lKHBwQ21kcyk7CisgICAgYXV0byBwcFJ1bGUgPSBHZXRQcmVwcm9jZXNzU2NhblJ1bGUoCisgICAgICB0aGlzLT5MYW5ndWFnZVByZXByb2Nlc3NSdWxlKGxhbmcsIGNvbmZpZyksIHZhcnMsIHJlc3BvbnNlRmxhZywgZmxhZ3MsCisgICAgICBsYXVuY2hlciwgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuZ2V0KCksIHBwU2NhbkNvbW1hbmQsCisgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLCBtZi0+R2V0UmVxdWlyZWREZWZpbml0aW9uKHBwVmFyKSk7CiAKICAgICAvLyBXcml0ZSB0aGUgcnVsZSBmb3IgcHJlcHJvY2Vzc2luZyBmaWxlIG9mIHRoZSBnaXZlbiBsYW5ndWFnZS4KLSAgICBydWxlLkNvbW1lbnQgPSBjbVN0ckNhdCgiUnVsZSBmb3IgcHJlcHJvY2Vzc2luZyAiLCBsYW5nLCAiIGZpbGVzLiIpOwotICAgIHJ1bGUuRGVzY3JpcHRpb24gPSBjbVN0ckNhdCgiQnVpbGRpbmcgIiwgbGFuZywgIiBwcmVwcm9jZXNzZWQgJG91dCIpOwotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRSdWxlKHJ1bGUpOworICAgIHBwUnVsZS5Db21tZW50ID0gY21TdHJDYXQoIlJ1bGUgZm9yIHByZXByb2Nlc3NpbmcgIiwgbGFuZywgIiBmaWxlcy4iKTsKKyAgICBwcFJ1bGUuRGVzY3JpcHRpb24gPSBjbVN0ckNhdCgiQnVpbGRpbmcgIiwgbGFuZywgIiBwcmVwcm9jZXNzZWQgJG91dCIpOworCisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFJ1bGUocHBSdWxlKTsKKworICAgIGlmICghY29tcGlsZVBQV2l0aERlZmluZXMpIHsKKyAgICAgIC8vIFJlbW92ZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgZnJvbSBjb21waWxhdGlvbiBzdGVwCisgICAgICB2YXJzLkRlZmluZXMgPSAiIjsKKyAgICB9CisKKyAgICAvLyBKdXN0IGRlcGVuZGVuY3kgc2Nhbm5pbmcgZm9yIGZpbGVzIHRoYXQgaGF2ZSBwcmVwcm9jZXNzaW5nIHR1cm5lZCBvZmYKKyAgICBjb25zdCBhdXRvIHNjYW5Db21tYW5kID0KKyAgICAgIEdldFNjYW5Db21tYW5kKGNtYWtlQ21kLCB0ZGksIGxhbmcsICIkaW4iLCBuZWVkRHluZGVwLCAiJG91dCIpOworCisgICAgYXV0byBzY2FuUnVsZSA9IEdldFByZXByb2Nlc3NTY2FuUnVsZSgKKyAgICAgIHRoaXMtPkxhbmd1YWdlRGVwZW5kZW5jeVJ1bGUobGFuZywgY29uZmlnKSwgdmFycywgIiIsIGZsYWdzLCBsYXVuY2hlciwKKyAgICAgIHJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmdldCgpLCBzY2FuQ29tbWFuZCwgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSk7CisKKyAgICAvLyBXcml0ZSB0aGUgcnVsZSBmb3IgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS4KKyAgICBzY2FuUnVsZS5Db21tZW50ID0gY21TdHJDYXQoIlJ1bGUgZm9yIGdlbmVyYXRpbmcgIiwgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZXBlbmRlbmNpZXMgb24gbm9uLXByZXByb2Nlc3NlZCBmaWxlcy4iKTsKKyAgICBzY2FuUnVsZS5EZXNjcmlwdGlvbiA9CisgICAgICBjbVN0ckNhdCgiR2VuZXJhdGluZyAiLCBsYW5nLCAiIGRlcGVuZGVuY2llcyBmb3IgJGluIik7CisKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkUnVsZShzY2FuUnVsZSk7CiAgIH0KIAogICBpZiAobmVlZER5bmRlcCkgewpAQCAtNjU4LDcgKzc0MSw3IEBACiAgICAgcnVsZS5Sc3BGaWxlID0gIiRSU1BfRklMRSI7CiAgICAgcnVsZS5Sc3BDb250ZW50ID0KICAgICAgIGNtU3RyQ2F0KCcgJywgdmFycy5EZWZpbmVzLCAnICcsIHZhcnMuSW5jbHVkZXMsICcgJywgZmxhZ3MpOwotICAgIGZsYWdzID0gcmVzcG9uc2VGbGFnICsgcnVsZS5Sc3BGaWxlOworICAgIGZsYWdzID0gY21TdHJDYXQocmVzcG9uc2VGbGFnLCBydWxlLlJzcEZpbGUpOwogICAgIHZhcnMuRGVmaW5lcyA9ICIiOwogICAgIHZhcnMuSW5jbHVkZXMgPSAiIjsKICAgfQpAQCAtNjcxLDE1ICs3NTQsMTUgQEAKICAgICBydWxlLkRlcFR5cGUgPSAibXN2YyI7CiAgICAgcnVsZS5EZXBGaWxlLmNsZWFyKCk7CiAgICAgZmxhZ3MgKz0gIiAvc2hvd0luY2x1ZGVzIjsKLSAgfSBlbHNlIGlmIChtZi0+SXNPbigiQ01BS0VfTklOSkFfQ01DTERFUFNfIiArIGxhbmcpKSB7CisgIH0gZWxzZSBpZiAobWYtPklzT24oY21TdHJDYXQoIkNNQUtFX05JTkpBX0NNQ0xERVBTXyIsIGxhbmcpKSkgewogICAgIC8vIEZvciB0aGUgTVMgcmVzb3VyY2UgY29tcGlsZXIgd2UgbmVlZCBjbWNsZGVwcywgYnV0IHNraXAgZGVwZW5kZW5jaWVzCiAgICAgLy8gZm9yIHNvdXJjZS1maWxlIHRyeV9jb21waWxlIGNhc2VzIGJlY2F1c2UgdGhleSBhcmUgYWx3YXlzIGZyZXNoLgogICAgIGlmICghbWYtPkdldElzU291cmNlRmlsZVRyeUNvbXBpbGUoKSkgewogICAgICAgcnVsZS5EZXBUeXBlID0gImdjYyI7CiAgICAgICBydWxlLkRlcEZpbGUgPSAiJERFUF9GSUxFIjsKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNsID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NfQ09NUElMRVIiKQotICAgICAgICA/IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQ19DT01QSUxFUiIpCi0gICAgICAgIDogbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DWFhfQ09NUElMRVIiKTsKKyAgICAgIGF1dG8gZCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9DX0NPTVBJTEVSIik7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjbCA9CisgICAgICAgIGQgPyBkIDogbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DWFhfQ09NUElMRVIiKTsKICAgICAgIGNsZGVwcyA9IGNtU3RyQ2F0KCciJywgY21TeXN0ZW1Ub29sczo6R2V0Q01DbERlcHNDb21tYW5kKCksICJcIiAiLCBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgJyAnLCB2YXJzLlNvdXJjZSwgIiAkREVQX0ZJTEUgJG91dCBcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0NMX1NIT1dJTkNMVURFU19QUkVGSVgiKSwKQEAgLTY4OCwxNCArNzcxLDE0IEBACiAgIH0gZWxzZSB7CiAgICAgcnVsZS5EZXBUeXBlID0gImdjYyI7CiAgICAgcnVsZS5EZXBGaWxlID0gIiRERVBfRklMRSI7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgZmxhZ3NOYW1lID0gIkNNQUtFX0RFUEZJTEVfRkxBR1NfIiArIGxhbmc7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmxhZ3NOYW1lID0gY21TdHJDYXQoIkNNQUtFX0RFUEZJTEVfRkxBR1NfIiwgbGFuZyk7CiAgICAgc3RkOjpzdHJpbmcgZGVwZmlsZUZsYWdzID0gbWYtPkdldFNhZmVEZWZpbml0aW9uKGZsYWdzTmFtZSk7CiAgICAgaWYgKCFkZXBmaWxlRmxhZ3MuZW1wdHkoKSkgewogICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhkZXBmaWxlRmxhZ3MsICI8REVQRklMRT4iLCAiJERFUF9GSUxFIik7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGRlcGZpbGVGbGFncywgIjxPQkpFQ1Q+IiwgIiRvdXQiKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoZGVwZmlsZUZsYWdzLCAiPENNQUtFX0NfQ09NUElMRVI+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NfQ09NUElMRVIiKSk7Ci0gICAgICBmbGFncyArPSAiICIgKyBkZXBmaWxlRmxhZ3M7CisgICAgICBmbGFncyArPSBjbVN0ckNhdCgnICcsIGRlcGZpbGVGbGFncyk7CiAgICAgfQogICB9CiAKQEAgLTcxOCw3ICs4MDEsNyBAQAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21waWxlQ21kID0gbWYtPkdldFJlcXVpcmVkRGVmaW5pdGlvbihjbWRWYXIpOwogICAgIGNtRXhwYW5kTGlzdChjb21waWxlQ21kLCBjb21waWxlQ21kcyk7CiAgIH0gZWxzZSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgY21kVmFyID0gIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFX09CSkVDVCI7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgY21kVmFyID0gY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfQ09NUElMRV9PQkpFQ1QiKTsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcGlsZUNtZCA9IG1mLT5HZXRSZXF1aXJlZERlZmluaXRpb24oY21kVmFyKTsKICAgICBjbUV4cGFuZExpc3QoY29tcGlsZUNtZCwgY29tcGlsZUNtZHMpOwogICB9CkBAIC03MjgsNTcgKzgxMSw1OCBAQAogICBpZiAoIWNvbXBpbGVDbWRzLmVtcHR5KCkgJiYKICAgICAgIChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiIHx8IGxhbmcgPT0gIkZvcnRyYW4iIHx8IGxhbmcgPT0gIkNVREEiIHx8CiAgICAgICAgbGFuZyA9PSAiT0JKQyIgfHwgbGFuZyA9PSAiT0JKQ1hYIikpIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCBjbGF1bmNoZXJfcHJvcCA9IGxhbmcgKyAiX0NPTVBJTEVSX0xBVU5DSEVSIjsKLSAgICBjb25zdCBjaGFyKiBjbGF1bmNoZXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNsYXVuY2hlcl9wcm9wKTsKLSAgICBpZiAoY2xhdW5jaGVyICYmICpjbGF1bmNoZXIpIHsKLSAgICAgIGNvbXBpbGVyTGF1bmNoZXIgPSBjbGF1bmNoZXI7CisgICAgc3RkOjpzdHJpbmcgY29uc3QgY2xhdW5jaGVyX3Byb3AgPSBjbVN0ckNhdChsYW5nLCAiX0NPTVBJTEVSX0xBVU5DSEVSIik7CisgICAgY21Qcm9wIGNsYXVuY2hlciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY2xhdW5jaGVyX3Byb3ApOworICAgIGlmIChjbU5vbmVtcHR5KGNsYXVuY2hlcikpIHsKKyAgICAgIGNvbXBpbGVyTGF1bmNoZXIgPSAqY2xhdW5jaGVyOwogICAgIH0KICAgfQogCiAgIC8vIE1heWJlIGluc2VydCBhbiBpbmNsdWRlLXdoYXQteW91LXVzZSBydW5uZXIuCiAgIGlmICghY29tcGlsZUNtZHMuZW1wdHkoKSAmJiAobGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiQ1hYIikpIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCBpd3l1X3Byb3AgPSBsYW5nICsgIl9JTkNMVURFX1dIQVRfWU9VX1VTRSI7Ci0gICAgY29uc3QgY2hhciogaXd5dSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoaXd5dV9wcm9wKTsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCB0aWR5X3Byb3AgPSBsYW5nICsgIl9DTEFOR19USURZIjsKLSAgICBjb25zdCBjaGFyKiB0aWR5ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSh0aWR5X3Byb3ApOwotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGxhbmcgKyAiX0NQUExJTlQiOwotICAgIGNvbnN0IGNoYXIqIGNwcGxpbnQgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNwcGxpbnRfcHJvcCk7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QgY3BwY2hlY2tfcHJvcCA9IGxhbmcgKyAiX0NQUENIRUNLIjsKLSAgICBjb25zdCBjaGFyKiBjcHBjaGVjayA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY3BwY2hlY2tfcHJvcCk7Ci0gICAgaWYgKChpd3l1ICYmICppd3l1KSB8fCAodGlkeSAmJiAqdGlkeSkgfHwgKGNwcGxpbnQgJiYgKmNwcGxpbnQpIHx8Ci0gICAgICAgIChjcHBjaGVjayAmJiAqY3BwY2hlY2spKSB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QgaXd5dV9wcm9wID0gY21TdHJDYXQobGFuZywgIl9JTkNMVURFX1dIQVRfWU9VX1VTRSIpOworICAgIGNtUHJvcCBpd3l1ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShpd3l1X3Byb3ApOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHRpZHlfcHJvcCA9IGNtU3RyQ2F0KGxhbmcsICJfQ0xBTkdfVElEWSIpOworICAgIGNtUHJvcCB0aWR5ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSh0aWR5X3Byb3ApOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGNtU3RyQ2F0KGxhbmcsICJfQ1BQTElOVCIpOworICAgIGNtUHJvcCBjcHBsaW50ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBsaW50X3Byb3ApOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGNoZWNrX3Byb3AgPSBjbVN0ckNhdChsYW5nLCAiX0NQUENIRUNLIik7CisgICAgY21Qcm9wIGNwcGNoZWNrID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBjaGVja19wcm9wKTsKKyAgICBpZiAoY21Ob25lbXB0eShpd3l1KSB8fCBjbU5vbmVtcHR5KHRpZHkpIHx8IGNtTm9uZW1wdHkoY3BwbGludCkgfHwKKyAgICAgICAgY21Ob25lbXB0eShjcHBjaGVjaykpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHJ1bl9pd3l1ID0gY21TdHJDYXQoY21ha2VDbWQsICIgLUUgX19ydW5fY29fY29tcGlsZSIpOwogICAgICAgaWYgKCFjb21waWxlckxhdW5jaGVyLmVtcHR5KCkpIHsKICAgICAgICAgLy8gSW4gX19ydW5fY29fY29tcGlsZSBjYXNlIHRoZSBsYXVuY2hlciBjb21tYW5kIGlzIHN1cHBsaWVkCiAgICAgICAgIC8vIHZpYSAtLWxhdW5jaGVyPTxtYXliZS1saXN0PiBhbmQgY29uc3VtZWQKLSAgICAgICAgcnVuX2l3eXUgKz0gIiAtLWxhdW5jaGVyPSI7Ci0gICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbChjb21waWxlckxhdW5jaGVyKTsKKyAgICAgICAgcnVuX2l3eXUgKz0KKyAgICAgICAgICBjbVN0ckNhdCgiIC0tbGF1bmNoZXI9IiwKKyAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RXNjYXBlRm9yU2hlbGwoY29tcGlsZXJMYXVuY2hlcikpOwogICAgICAgICBjb21waWxlckxhdW5jaGVyLmNsZWFyKCk7CiAgICAgICB9Ci0gICAgICBpZiAoaXd5dSAmJiAqaXd5dSkgewotICAgICAgICBydW5faXd5dSArPSAiIC0taXd5dT0iOwotICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChpd3l1KTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGl3eXUpKSB7CisgICAgICAgIHJ1bl9pd3l1ICs9IGNtU3RyQ2F0KCIgLS1pd3l1PSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKCppd3l1KSk7CiAgICAgICB9Ci0gICAgICBpZiAodGlkeSAmJiAqdGlkeSkgeworICAgICAgaWYgKGNtTm9uZW1wdHkodGlkeSkpIHsKICAgICAgICAgcnVuX2l3eXUgKz0gIiAtLXRpZHk9IjsKICAgICAgICAgY29uc3QgY2hhciogZHJpdmVyTW9kZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAotICAgICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSIpOworICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX0NMQU5HX1RJRFlfRFJJVkVSX01PREUiKSk7CiAgICAgICAgIGlmICghKGRyaXZlck1vZGUgJiYgKmRyaXZlck1vZGUpKSB7CiAgICAgICAgICAgZHJpdmVyTW9kZSA9IGxhbmcgPT0gIkMiID8gImdjYyIgOiAiZysrIjsKICAgICAgICAgfQogICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbCgKLSAgICAgICAgICBjbVN0ckNhdCh0aWR5LCAiOy0tZXh0cmEtYXJnLWJlZm9yZT0tLWRyaXZlci1tb2RlPSIsIGRyaXZlck1vZGUpKTsKKyAgICAgICAgICBjbVN0ckNhdCgqdGlkeSwgIjstLWV4dHJhLWFyZy1iZWZvcmU9LS1kcml2ZXItbW9kZT0iLCBkcml2ZXJNb2RlKSk7CiAgICAgICB9Ci0gICAgICBpZiAoY3BwbGludCAmJiAqY3BwbGludCkgewotICAgICAgICBydW5faXd5dSArPSAiIC0tY3BwbGludD0iOwotICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChjcHBsaW50KTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGNwcGxpbnQpKSB7CisgICAgICAgIHJ1bl9pd3l1ICs9IGNtU3RyQ2F0KAorICAgICAgICAgICIgLS1jcHBsaW50PSIsIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKCpjcHBsaW50KSk7CiAgICAgICB9Ci0gICAgICBpZiAoY3BwY2hlY2sgJiYgKmNwcGNoZWNrKSB7Ci0gICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1jcHBjaGVjaz0iOwotICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChjcHBjaGVjayk7CisgICAgICBpZiAoY21Ob25lbXB0eShjcHBjaGVjaykpIHsKKyAgICAgICAgcnVuX2l3eXUgKz0KKyAgICAgICAgICBjbVN0ckNhdCgiIC0tY3BwY2hlY2s9IiwKKyAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbCgqY3BwY2hlY2spKTsKICAgICAgIH0KLSAgICAgIGlmICgodGlkeSAmJiAqdGlkeSkgfHwgKGNwcGxpbnQgJiYgKmNwcGxpbnQpIHx8Ci0gICAgICAgICAgKGNwcGNoZWNrICYmICpjcHBjaGVjaykpIHsKKyAgICAgIGlmIChjbU5vbmVtcHR5KHRpZHkpIHx8IGNtTm9uZW1wdHkoY3BwbGludCkgfHwgY21Ob25lbXB0eShjcHBjaGVjaykpIHsKICAgICAgICAgcnVuX2l3eXUgKz0gIiAtLXNvdXJjZT0kaW4iOwogICAgICAgfQogICAgICAgcnVuX2l3eXUgKz0gIiAtLSAiOwpAQCAtNzk3LDcgKzg4MSw3IEBACiAgICAgICAgIGkgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RXNjYXBlRm9yU2hlbGwoaSk7CiAgICAgICB9CiAgICAgfQotICAgIGNvbXBpbGVDbWRzLmZyb250KCkuaW5zZXJ0KDAsIGNtSm9pbihhcmdzLCAiICIpICsgIiAiKTsKKyAgICBjb21waWxlQ21kcy5mcm9udCgpLmluc2VydCgwLCBjbVN0ckNhdChjbUpvaW4oYXJncywgIiAiKSwgJyAnKSk7CiAgIH0KIAogICBpZiAoIWNvbXBpbGVDbWRzLmVtcHR5KCkpIHsKQEAgLTg3Miw3ICs5NTYsOCBAQAogCiAgIHsKICAgICBjbU5pbmphQnVpbGQgYnVpbGQoInBob255Iik7Ci0gICAgYnVpbGQuQ29tbWVudCA9ICJPcmRlci1vbmx5IHBob255IHRhcmdldCBmb3IgIiArIHRoaXMtPkdldFRhcmdldE5hbWUoKTsKKyAgICBidWlsZC5Db21tZW50ID0KKyAgICAgIGNtU3RyQ2F0KCJPcmRlci1vbmx5IHBob255IHRhcmdldCBmb3IgIiwgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpKTsKICAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5PcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoY29uZmlnKSk7CiAKICAgICBjbU5pbmphRGVwcyYgb3JkZXJPbmx5RGVwcyA9IGJ1aWxkLk9yZGVyT25seURlcHM7CkBAIC05NTcsMTIgKzEwNDIsMTIgQEAKICAgICAgICAgICAgICAgICJvdXRwdXQtZmlsZS1tYXAuanNvbiIpOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldFN3aWZ0RGVwc1BhdGggPSBbdGhpcywgY29uZmlnXSgpIC0+IHN0ZDo6c3RyaW5nIHsKICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQ7Ci0gICAgICBpZiAoY29uc3QgY2hhciogbmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlN3aWZ0X0RFUEVOREVOQ0lFU19GSUxFIikpIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICBpZiAoY21Qcm9wIG5hbWUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJTd2lmdF9ERVBFTkRFTkNJRVNfRklMRSIpKSB7CisgICAgICAgIHJldHVybiAqbmFtZTsKICAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGFyZ2V0LT5HZXRTdXBwb3J0RGlyZWN0b3J5KCkgKyAiLyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgKyAiLyIgKyB0YXJnZXQtPkdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuc3dpZnRkZXBzIik7CisgICAgICByZXR1cm4gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKAorICAgICAgICBjbVN0ckNhdCh0YXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSwgJy8nLCBjb25maWcsICcvJywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksICIuc3dpZnRkZXBzIikpOwogICAgIH0oKTsKIAogICAgIC8vIGJ1aWxkIHRoZSBnbG9iYWwgdGFyZ2V0IGRlcGVuZGVuY2llcwpAQCAtOTc2LDYgKzEwNjEsODIgQEAKICAgfQogfQogCituYW1lc3BhY2UgeworY21OaW5qYUJ1aWxkIEdldFByZXByb2Nlc3NPclNjYW5CdWlsZCgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHJ1bGVOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgcHBGaWxlTmFtZSwgYm9vbCBjb21waWxlUFAsCisgIGJvb2wgY29tcGlsZVBQV2l0aERlZmluZXMsIGNtTmluamFCdWlsZCYgb2JqQnVpbGQsIGNtTmluamFWYXJzJiB2YXJzLAorICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwRmlsZU5hbWUsIGJvb2wgbmVlZER5bmRlcCwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG9iamVjdEZpbGVOYW1lKQoreworICAvLyBFeHBsaWNpdCBwcmVwcm9jZXNzaW5nIGFuZCBkZXBlbmRlbmN5CisgIGNtTmluamFCdWlsZCBwcEJ1aWxkKHJ1bGVOYW1lKTsKKworICBpZiAoIXBwRmlsZU5hbWUuZW1wdHkoKSkgeworICAgIHBwQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2socHBGaWxlTmFtZSk7CisgICAgcHBCdWlsZC5Sc3BGaWxlID0gY21TdHJDYXQocHBGaWxlTmFtZSwgIi5yc3AiKTsKKyAgfSBlbHNlIHsKKyAgICBwcEJ1aWxkLlJzcEZpbGUgPSAiJG91dC5yc3AiOworICB9CisKKyAgaWYgKGNvbXBpbGVQUCkgeworICAgIC8vIE1vdmUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIHRvIHRoZSBwcmVwcm9jZXNzaW5nIGJ1aWxkIHN0YXRlbWVudC4KKyAgICBzdGQ6OnN3YXAocHBCdWlsZC5FeHBsaWNpdERlcHMsIG9iakJ1aWxkLkV4cGxpY2l0RGVwcyk7CisgICAgc3RkOjpzd2FwKHBwQnVpbGQuSW1wbGljaXREZXBzLCBvYmpCdWlsZC5JbXBsaWNpdERlcHMpOworICAgIHN0ZDo6c3dhcChwcEJ1aWxkLk9yZGVyT25seURlcHMsIG9iakJ1aWxkLk9yZGVyT25seURlcHMpOworICAgIHN0ZDo6c3dhcChwcEJ1aWxkLlZhcmlhYmxlc1siSU5fQUJTIl0sIHZhcnNbIklOX0FCUyJdKTsKKworICAgIC8vIFRoZSBhY3R1YWwgY29tcGlsYXRpb24gd2lsbCBub3cgdXNlIHRoZSBwcmVwcm9jZXNzZWQgc291cmNlLgorICAgIG9iakJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2socHBGaWxlTmFtZSk7CisgIH0gZWxzZSB7CisgICAgLy8gQ29weSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgdG8gdGhlIHByZXByb2Nlc3NpbmcgYnVpbGQgc3RhdGVtZW50LgorICAgIHBwQnVpbGQuRXhwbGljaXREZXBzID0gb2JqQnVpbGQuRXhwbGljaXREZXBzOworICAgIHBwQnVpbGQuSW1wbGljaXREZXBzID0gb2JqQnVpbGQuSW1wbGljaXREZXBzOworICAgIHBwQnVpbGQuT3JkZXJPbmx5RGVwcyA9IG9iakJ1aWxkLk9yZGVyT25seURlcHM7CisgICAgcHBCdWlsZC5WYXJpYWJsZXNbIklOX0FCUyJdID0gdmFyc1siSU5fQUJTIl07CisgIH0KKworICAvLyBQcmVwcm9jZXNzaW5nIGFuZCBjb21waWxhdGlvbiBnZW5lcmFsbHkgdXNlIHRoZSBzYW1lIGZsYWdzLgorICBwcEJ1aWxkLlZhcmlhYmxlc1siRkxBR1MiXSA9IHZhcnNbIkZMQUdTIl07CisKKyAgaWYgKGNvbXBpbGVQUCAmJiAhY29tcGlsZVBQV2l0aERlZmluZXMpIHsKKyAgICAvLyBNb3ZlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIGJ1aWxkIHN0YXRlbWVudC4KKyAgICBzdGQ6OnN3YXAocHBCdWlsZC5WYXJpYWJsZXNbIkRFRklORVMiXSwgdmFyc1siREVGSU5FUyJdKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBDb3B5IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIGJ1aWxkIHN0YXRlbWVudC4KKyAgICBwcEJ1aWxkLlZhcmlhYmxlc1siREVGSU5FUyJdID0gdmFyc1siREVGSU5FUyJdOworICB9CisKKyAgLy8gQ29weSBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIHRoZSBwcmVwcm9jZXNzb3IgYnVpbGQgc3RhdGVtZW50LiAgVGhlCisgIC8vIEZvcnRyYW4gY29tcGlsYXRpb24gYnVpbGQgc3RhdGVtZW50IHN0aWxsIG5lZWRzIHRoZW0gZm9yIHRoZSBJTkNMVURFCisgIC8vIGRpcmVjdGl2ZS4KKyAgcHBCdWlsZC5WYXJpYWJsZXNbIklOQ0xVREVTIl0gPSB2YXJzWyJJTkNMVURFUyJdOworCisgIC8vIEV4cGxpY2l0IHByZXByb2Nlc3NpbmcgYWx3YXlzIHVzZXMgYSBkZXBmaWxlLgorICBwcEJ1aWxkLlZhcmlhYmxlc1siREVQX0ZJTEUiXSA9IGRlcEZpbGVOYW1lOworICBpZiAoY29tcGlsZVBQKSB7CisgICAgLy8gVGhlIGFjdHVhbCBjb21waWxhdGlvbiBkb2VzIG5vdCBuZWVkIGEgZGVwZmlsZSBiZWNhdXNlIGl0CisgICAgLy8gZGVwZW5kcyBvbiB0aGUgYWxyZWFkeS1wcmVwcm9jZXNzZWQgc291cmNlLgorICAgIHZhcnMuZXJhc2UoIkRFUF9GSUxFIik7CisgIH0KKworICBpZiAobmVlZER5bmRlcCkgeworICAgIC8vIFRlbGwgZGVwZW5kZW5jeSBzY2FubmVyIHRoZSBvYmplY3QgZmlsZSB0aGF0IHdpbGwgcmVzdWx0IGZyb20KKyAgICAvLyBjb21waWxpbmcgdGhlIHNvdXJjZS4KKyAgICBwcEJ1aWxkLlZhcmlhYmxlc1siT0JKX0ZJTEUiXSA9IG9iamVjdEZpbGVOYW1lOworCisgICAgLy8gVGVsbCBkZXBlbmRlbmN5IHNjYW5uZXIgd2hlcmUgdG8gc3RvcmUgZHluZGVwIGludGVybWVkaWF0ZSByZXN1bHRzLgorICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGRkaUZpbGUgPSBjbVN0ckNhdChvYmplY3RGaWxlTmFtZSwgIi5kZGkiKTsKKyAgICBpZiAocHBGaWxlTmFtZS5lbXB0eSgpKSB7CisgICAgICBwcEJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKGRkaUZpbGUpOworICAgIH0gZWxzZSB7CisgICAgICBwcEJ1aWxkLlZhcmlhYmxlc1siRFlOREVQX0lOVEVSTUVESUFURV9GSUxFIl0gPSBkZGlGaWxlOworICAgICAgcHBCdWlsZC5JbXBsaWNpdE91dHMucHVzaF9iYWNrKGRkaUZpbGUpOworICAgIH0KKyAgfQorICByZXR1cm4gcHBCdWlsZDsKK30KK30KKwogdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50KAogICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsIGJvb2wgZmlyc3RGb3JDb25maWcpCkBAIC05OTQsNyArMTE1NSw3IEBACiAgIHN0ZDo6c3RyaW5nIGNtYWtlVmFyTGFuZyA9IGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5ndWFnZSk7CiAKICAgLy8gYnVpbGQgcmVzcG9uc2UgZmlsZSBuYW1lCi0gIHN0ZDo6c3RyaW5nIGNtYWtlTGlua1ZhciA9IGNtYWtlVmFyTGFuZyArICJfUkVTUE9OU0VfRklMRV9GTEFHIjsKKyAgc3RkOjpzdHJpbmcgY21ha2VMaW5rVmFyID0gY21TdHJDYXQoY21ha2VWYXJMYW5nLCAiX1JFU1BPTlNFX0ZJTEVfRkxBRyIpOwogCiAgIGNvbnN0IGNoYXIqIGZsYWcgPSBHZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKGNtYWtlTGlua1Zhcik7CiAKQEAgLTEwMTksMTQgKzExODAsMTUgQEAKICAgICBpZiAoIXJlcGxhY2VFeHQpIHsKICAgICAgIC8vIHVzZSBvcmlnaW5hbCBjb2RlCiAgICAgICB2YXJzWyJERVBfRklMRSJdID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICBvYmplY3RGaWxlTmFtZSArICIuZCIsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICAgIGNtU3RyQ2F0KG9iamVjdEZpbGVOYW1lLCAiLmQiKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICB9IGVsc2UgewogICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgZXh0ZW5zaW9uIHdpdGggdGhlCiAgICAgICAvLyBkZXBlbmQgZmlsZSBleHRlbnNpb24uCi0gICAgICBzdGQ6OnN0cmluZyBkZXBlbmRGaWxlTmFtZSA9Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lV2l0aG91dExhc3RFeHRlbnNpb24ob2JqZWN0RmlsZU5hbWUpICsgIi5kIjsKKyAgICAgIHN0ZDo6c3RyaW5nIGRlcGVuZEZpbGVOYW1lID0gY21TdHJDYXQoCisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lV2l0aG91dExhc3RFeHRlbnNpb24ob2JqZWN0RmlsZU5hbWUpLCAiLmQiKTsKICAgICAgIHZhcnNbIkRFUF9GSUxFIl0gPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgIG9iamVjdEZpbGVEaXIgKyAiLyIgKyBkZXBlbmRGaWxlTmFtZSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgICAgY21TdHJDYXQob2JqZWN0RmlsZURpciwgJy8nLCBkZXBlbmRGaWxlTmFtZSksCisgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgfQogICB9CiAKQEAgLTEwNDksMTcgKzEyMTEsMzUgQEAKICAgLy8gQWRkIHByZWNvbXBpbGUgaGVhZGVycyBkZXBlbmRlbmNpZXMKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcExpc3Q7CiAKLSAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaFNvdXJjZShjb25maWcsIGxhbmd1YWdlKTsKLSAgaWYgKCFwY2hTb3VyY2UuZW1wdHkoKSAmJiAhc291cmNlLT5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgewotICAgIGRlcExpc3QucHVzaF9iYWNrKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZ3VhZ2UpKTsKLSAgICBpZiAoc291cmNlLT5HZXRGdWxsUGF0aCgpICE9IHBjaFNvdXJjZSkgewotICAgICAgZGVwTGlzdC5wdXNoX2JhY2sodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZ3VhZ2UpKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyY2hpdGVjdHVyZXM7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0QXBwbGVBcmNocyhjb25maWcsIGFyY2hpdGVjdHVyZXMpOworICBpZiAoYXJjaGl0ZWN0dXJlcy5lbXB0eSgpKSB7CisgICAgYXJjaGl0ZWN0dXJlcy5lbXBsYWNlX2JhY2soKTsKKyAgfQorCisgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gcGNoU291cmNlczsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPQorICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hTb3VyY2UoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CisKKyAgICBpZiAoIXBjaFNvdXJjZS5lbXB0eSgpKSB7CisgICAgICBwY2hTb3VyY2VzLmluc2VydChwY2hTb3VyY2UpOwogICAgIH0KICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBvYmplY3REZXBzID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiT0JKRUNUX0RFUEVORFMiKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvYmpEZXBMaXN0ID0gY21FeHBhbmRlZExpc3Qob2JqZWN0RGVwcyk7CisgIGlmICghcGNoU291cmNlcy5lbXB0eSgpICYmICFzb3VyY2UtPkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpKSB7CisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICAgIGRlcExpc3QucHVzaF9iYWNrKAorICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmd1YWdlLCBhcmNoKSk7CisgICAgICBpZiAocGNoU291cmNlcy5maW5kKHNvdXJjZS0+R2V0RnVsbFBhdGgoKSkgPT0gcGNoU291cmNlcy5lbmQoKSkgeworICAgICAgICBkZXBMaXN0LnB1c2hfYmFjaygKKyAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCkpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChjbVByb3Agb2JqZWN0RGVwcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb2JqRGVwTGlzdCA9IGNtRXhwYW5kZWRMaXN0KCpvYmplY3REZXBzKTsKICAgICBzdGQ6OmNvcHkob2JqRGVwTGlzdC5iZWdpbigpLCBvYmpEZXBMaXN0LmVuZCgpLAogICAgICAgICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZGVwTGlzdCkpOwogICB9CkBAIC0xMDk1LDU5ICsxMjc1LDQ3IEBACiAgIC8vIEZvciBzb21lIGNhc2VzIHdlIGRvIGFuIGV4cGxpY2l0IHByZXByb2Nlc3NvciBpbnZvY2F0aW9uLgogICBib29sIGNvbnN0IGV4cGxpY2l0UFAgPSB0aGlzLT5OZWVkRXhwbGljaXRQcmVwcm9jZXNzaW5nKGxhbmd1YWdlKTsKICAgaWYgKGV4cGxpY2l0UFApIHsKLSAgICBjbU5pbmphQnVpbGQgcHBCdWlsZCh0aGlzLT5MYW5ndWFnZVByZXByb2Nlc3NSdWxlKGxhbmd1YWdlLCBjb25maWcpKTsKIAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHBwRmlsZU5hbWUgPQotICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldFByZXByb2Nlc3NlZEZpbGVQYXRoKHNvdXJjZSwgY29uZmlnKSk7Ci0gICAgcHBCdWlsZC5PdXRwdXRzLnB1c2hfYmFjayhwcEZpbGVOYW1lKTsKLQotICAgIHBwQnVpbGQuUnNwRmlsZSA9IHBwRmlsZU5hbWUgKyAiLnJzcCI7Ci0KLSAgICBib29sIGNvbnN0IGNvbXBpbGVQUCA9IHRoaXMtPlVzZVByZXByb2Nlc3NlZFNvdXJjZShsYW5ndWFnZSk7Ci0gICAgYm9vbCBjb25zdCBjb21waWxlUFBXaXRoRGVmaW5lcyA9Ci0gICAgICBjb21waWxlUFAgJiYgdGhpcy0+Q29tcGlsZVByZXByb2Nlc3NlZFNvdXJjZVdpdGhEZWZpbmVzKGxhbmd1YWdlKTsKLSAgICBpZiAoY29tcGlsZVBQKSB7Ci0gICAgICAvLyBNb3ZlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcyB0byB0aGUgcHJlcHJvY2Vzc2luZyBidWlsZCBzdGF0ZW1lbnQuCi0gICAgICBzdGQ6OnN3YXAocHBCdWlsZC5FeHBsaWNpdERlcHMsIG9iakJ1aWxkLkV4cGxpY2l0RGVwcyk7Ci0gICAgICBzdGQ6OnN3YXAocHBCdWlsZC5JbXBsaWNpdERlcHMsIG9iakJ1aWxkLkltcGxpY2l0RGVwcyk7Ci0gICAgICBzdGQ6OnN3YXAocHBCdWlsZC5PcmRlck9ubHlEZXBzLCBvYmpCdWlsZC5PcmRlck9ubHlEZXBzKTsKLSAgICAgIHN0ZDo6c3dhcChwcEJ1aWxkLlZhcmlhYmxlc1siSU5fQUJTIl0sIHZhcnNbIklOX0FCUyJdKTsKLQotICAgICAgLy8gVGhlIGFjdHVhbCBjb21waWxhdGlvbiB3aWxsIG5vdyB1c2UgdGhlIHByZXByb2Nlc3NlZCBzb3VyY2UuCi0gICAgICBvYmpCdWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHBwRmlsZU5hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBDb3B5IGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcyB0byB0aGUgcHJlcHJvY2Vzc2luZyBidWlsZCBzdGF0ZW1lbnQuCi0gICAgICBwcEJ1aWxkLkV4cGxpY2l0RGVwcyA9IG9iakJ1aWxkLkV4cGxpY2l0RGVwczsKLSAgICAgIHBwQnVpbGQuSW1wbGljaXREZXBzID0gb2JqQnVpbGQuSW1wbGljaXREZXBzOwotICAgICAgcHBCdWlsZC5PcmRlck9ubHlEZXBzID0gb2JqQnVpbGQuT3JkZXJPbmx5RGVwczsKLSAgICAgIHBwQnVpbGQuVmFyaWFibGVzWyJJTl9BQlMiXSA9IHZhcnNbIklOX0FCUyJdOworICAgIC8vIElmIHNvdXJjZS90YXJnZXQgaGFzIHByZXByb2Nlc3NpbmcgdHVybmVkIG9mZiwgd2Ugc3RpbGwgbmVlZCB0bworICAgIC8vIGdlbmVyYXRlIGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kgc3RlcAorICAgIGNvbnN0IGF1dG8gc3JjcHAgPSBzb3VyY2UtPkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9QUkVQUk9DRVNTIik7CisgICAgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5QcmVwcm9jZXNzIHByZXByb2Nlc3MgPQorICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5QcmVwcm9jZXNzKHNyY3BwKTsKKyAgICBpZiAocHJlcHJvY2VzcyA9PSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3M6OlVuc2V0KSB7CisgICAgICBjb25zdCBhdXRvJiB0Z3RwcCA9CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX1BSRVBST0NFU1MiKTsKKyAgICAgIHByZXByb2Nlc3MgPSBjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhblByZXByb2Nlc3ModGd0cHApOwogICAgIH0KIAotICAgIC8vIFByZXByb2Nlc3NpbmcgYW5kIGNvbXBpbGF0aW9uIGdlbmVyYWxseSB1c2UgdGhlIHNhbWUgZmxhZ3MuCi0gICAgcHBCdWlsZC5WYXJpYWJsZXNbIkZMQUdTIl0gPSB2YXJzWyJGTEFHUyJdOworICAgIGJvb2wgY29uc3QgY29tcGlsZVBQID0gdGhpcy0+VXNlUHJlcHJvY2Vzc2VkU291cmNlKGxhbmd1YWdlKSAmJgorICAgICAgKHByZXByb2Nlc3MgIT0gY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5QcmVwcm9jZXNzOjpOb3ROZWVkZWQpOworICAgIGJvb2wgY29uc3QgY29tcGlsZVBQV2l0aERlZmluZXMgPQorICAgICAgY29tcGlsZVBQICYmIHRoaXMtPkNvbXBpbGVQcmVwcm9jZXNzZWRTb3VyY2VXaXRoRGVmaW5lcyhsYW5ndWFnZSk7CisKKyAgICBzdGQ6OnN0cmluZyBjb25zdCBwcEZpbGVOYW1lID0gY29tcGlsZVBQCisgICAgICA/IHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRQcmVwcm9jZXNzZWRGaWxlUGF0aChzb3VyY2UsIGNvbmZpZykpCisgICAgICA6ICIiOworCisgICAgc3RkOjpzdHJpbmcgY29uc3QgYnVpbGROYW1lID0gY29tcGlsZVBQCisgICAgICA/IHRoaXMtPkxhbmd1YWdlUHJlcHJvY2Vzc1J1bGUobGFuZ3VhZ2UsIGNvbmZpZykKKyAgICAgIDogdGhpcy0+TGFuZ3VhZ2VEZXBlbmRlbmN5UnVsZShsYW5ndWFnZSwgY29uZmlnKTsKKworICAgIGNvbnN0IGF1dG8gZGVwRXh0ZW5zaW9uID0gY29tcGlsZVBQID8gIi5wcC5kIiA6ICIuZCI7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgZGVwRmlsZU5hbWUgPQorICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAorICAgICAgICBjbVN0ckNhdChvYmplY3RGaWxlTmFtZSwgZGVwRXh0ZW5zaW9uKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKworICAgIGNtTmluamFCdWlsZCBwcEJ1aWxkID0gR2V0UHJlcHJvY2Vzc09yU2NhbkJ1aWxkKAorICAgICAgYnVpbGROYW1lLCBwcEZpbGVOYW1lLCBjb21waWxlUFAsIGNvbXBpbGVQUFdpdGhEZWZpbmVzLCBvYmpCdWlsZCwgdmFycywKKyAgICAgIGRlcEZpbGVOYW1lLCBuZWVkRHluZGVwLCBvYmplY3RGaWxlTmFtZSk7CiAKICAgICBpZiAoY29tcGlsZVBQKSB7CiAgICAgICAvLyBJbiBjYXNlIGNvbXBpbGF0aW9uIHJlcXVpcmVzIGZsYWdzIHRoYXQgYXJlIGluY29tcGF0aWJsZSB3aXRoCiAgICAgICAvLyBwcmVwcm9jZXNzaW5nLCBpbmNsdWRlIHRoZW0gaGVyZS4KICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwb3N0RmxhZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAgICAgIkNNQUtFXyIgKyBsYW5ndWFnZSArICJfUE9TVFBST0NFU1NfRkxBRyIpOworICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfUE9TVFBST0NFU1NfRkxBRyIpKTsKICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyh2YXJzWyJGTEFHUyJdLCBwb3N0RmxhZyk7Ci0gICAgfQogCi0gICAgaWYgKGNvbXBpbGVQUCAmJiAhY29tcGlsZVBQV2l0aERlZmluZXMpIHsKLSAgICAgIC8vIE1vdmUgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRvIHRoZSBwcmVwcm9jZXNzb3IgYnVpbGQgc3RhdGVtZW50LgotICAgICAgc3RkOjpzd2FwKHBwQnVpbGQuVmFyaWFibGVzWyJERUZJTkVTIl0sIHZhcnNbIkRFRklORVMiXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIENvcHkgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRvIHRoZSBwcmVwcm9jZXNzb3IgYnVpbGQgc3RhdGVtZW50LgotICAgICAgcHBCdWlsZC5WYXJpYWJsZXNbIkRFRklORVMiXSA9IHZhcnNbIkRFRklORVMiXTsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IGluY2x1ZGUgZGlyZWN0b3JpZXMgdG8gdGhlIHByZXByb2Nlc3NvciBidWlsZCBzdGF0ZW1lbnQuICBUaGUKLSAgICAvLyBGb3J0cmFuIGNvbXBpbGF0aW9uIGJ1aWxkIHN0YXRlbWVudCBzdGlsbCBuZWVkcyB0aGVtIGZvciB0aGUgSU5DTFVERQotICAgIC8vIGRpcmVjdGl2ZS4KLSAgICBwcEJ1aWxkLlZhcmlhYmxlc1siSU5DTFVERVMiXSA9IHZhcnNbIklOQ0xVREVTIl07Ci0KLSAgICBpZiAoY29tcGlsZVBQKSB7CiAgICAgICAvLyBQcmVwZW5kIHNvdXJjZSBmaWxlJ3Mgb3JpZ2luYWwgZGlyZWN0b3J5IGFzIGFuIGluY2x1ZGUgZGlyZWN0b3J5CiAgICAgICAvLyBzbyBlLmcuIEZvcnRyYW4gSU5DTFVERSBzdGF0ZW1lbnRzIGNhbiBsb29rIGZvciBmaWxlcyBpbiBpdC4KICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb3VyY2VEaXJlY3Rvcnk7CkBAIC0xMTU4LDMxICsxMzI2LDEyIEBACiAgICAgICAgIHNvdXJjZURpcmVjdG9yeSwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5ndWFnZSwgZmFsc2UsIGZhbHNlLAogICAgICAgICBjb25maWcpOwogCi0gICAgICB2YXJzWyJJTkNMVURFUyJdID0gc291cmNlRGlyZWN0b3J5RmxhZyArICIgIiArIHZhcnNbIklOQ0xVREVTIl07CisgICAgICB2YXJzWyJJTkNMVURFUyJdID0gY21TdHJDYXQoc291cmNlRGlyZWN0b3J5RmxhZywgJyAnLCB2YXJzWyJJTkNMVURFUyJdKTsKICAgICB9CiAKLSAgICAvLyBFeHBsaWNpdCBwcmVwcm9jZXNzaW5nIGFsd2F5cyB1c2VzIGEgZGVwZmlsZS4KLSAgICBwcEJ1aWxkLlZhcmlhYmxlc1siREVQX0ZJTEUiXSA9Ci0gICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgIG9iamVjdEZpbGVOYW1lICsgIi5wcC5kIiwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKLSAgICBpZiAoY29tcGlsZVBQKSB7Ci0gICAgICAvLyBUaGUgYWN0dWFsIGNvbXBpbGF0aW9uIGRvZXMgbm90IG5lZWQgYSBkZXBmaWxlIGJlY2F1c2UgaXQKLSAgICAgIC8vIGRlcGVuZHMgb24gdGhlIGFscmVhZHktcHJlcHJvY2Vzc2VkIHNvdXJjZS4KLSAgICAgIHZhcnMuZXJhc2UoIkRFUF9GSUxFIik7Ci0gICAgfQotCi0gICAgaWYgKG5lZWREeW5kZXApIHsKLSAgICAgIC8vIFRlbGwgZGVwZW5kZW5jeSBzY2FubmVyIHRoZSBvYmplY3QgZmlsZSB0aGF0IHdpbGwgcmVzdWx0IGZyb20KLSAgICAgIC8vIGNvbXBpbGluZyB0aGUgc291cmNlLgotICAgICAgcHBCdWlsZC5WYXJpYWJsZXNbIk9CSl9GSUxFIl0gPSBvYmplY3RGaWxlTmFtZTsKLQotICAgICAgLy8gVGVsbCBkZXBlbmRlbmN5IHNjYW5uZXIgd2hlcmUgdG8gc3RvcmUgZHluZGVwIGludGVybWVkaWF0ZSByZXN1bHRzLgotICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZGRpRmlsZSA9IG9iamVjdEZpbGVOYW1lICsgIi5kZGkiOwotICAgICAgcHBCdWlsZC5WYXJpYWJsZXNbIkRZTkRFUF9JTlRFUk1FRElBVEVfRklMRSJdID0gZGRpRmlsZTsKLSAgICAgIHBwQnVpbGQuSW1wbGljaXRPdXRzLnB1c2hfYmFjayhkZGlGaWxlKTsKLSAgICAgIGlmIChmaXJzdEZvckNvbmZpZykgewotICAgICAgICB0aGlzLT5Db25maWdzW2NvbmZpZ10uRERJRmlsZXNbbGFuZ3VhZ2VdLnB1c2hfYmFjayhkZGlGaWxlKTsKLSAgICAgIH0KKyAgICBpZiAoZmlyc3RGb3JDb25maWcgJiYgbmVlZER5bmRlcCkgeworICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZGRpRmlsZSA9IGNtU3RyQ2F0KG9iamVjdEZpbGVOYW1lLCAiLmRkaSIpOworICAgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLkRESUZpbGVzW2xhbmd1YWdlXS5wdXNoX2JhY2soZGRpRmlsZSk7CiAgICAgfQogCiAgICAgdGhpcy0+YWRkUG9vbE5pbmphVmFyaWFibGUoIkpPQl9QT09MX0NPTVBJTEUiLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwKQEAgLTEyMDcsOCArMTM1Niw5IEBACiAgIHRoaXMtPmFkZFBvb2xOaW5qYVZhcmlhYmxlKCJKT0JfUE9PTF9DT01QSUxFIiwgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpOwogCi0gIGlmICghcGNoU291cmNlLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKLSAgICBpZiAoc291cmNlLT5HZXRGdWxsUGF0aCgpID09IHBjaFNvdXJjZSkgeworICBpZiAoIXBjaFNvdXJjZXMuZW1wdHkoKSAmJiAhc291cmNlLT5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgeworICAgIGF1dG8gcGNoSXQgPSBwY2hTb3VyY2VzLmZpbmQoc291cmNlLT5HZXRGdWxsUGF0aCgpKTsKKyAgICBpZiAocGNoSXQgIT0gcGNoU291cmNlcy5lbmQoKSkgewogICAgICAgdGhpcy0+YWRkUG9vbE5pbmphVmFyaWFibGUoIkpPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLCB2YXJzKTsKICAgICB9CkBAIC0xMjE2LDcgKzEzNjYsNyBAQAogCiAgIHRoaXMtPlNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZSh2YXJzLCBjb25maWcpOwogCi0gIG9iakJ1aWxkLlJzcEZpbGUgPSBvYmplY3RGaWxlTmFtZSArICIucnNwIjsKKyAgb2JqQnVpbGQuUnNwRmlsZSA9IGNtU3RyQ2F0KG9iamVjdEZpbGVOYW1lLCAiLnJzcCIpOwogCiAgIGlmIChsYW5ndWFnZSA9PSAiU3dpZnQiKSB7CiAgICAgdGhpcy0+RW1pdFN3aWZ0RGVwZW5kZW5jeUluZm8oc291cmNlLCBjb25maWcpOwpAQCAtMTIyNSwxNSArMTM3NSwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iakJ1aWxkLCBjb21tYW5kTGluZUxlbmd0aExpbWl0KTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBvYmplY3RPdXRwdXRzID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiT0JKRUNUX09VVFBVVFMiKSkgewotICAgIGNtTmluamFCdWlsZCBidWlsZCgicGhvbnkiKTsKLSAgICBidWlsZC5Db21tZW50ID0gIkFkZGl0aW9uYWwgb3V0cHV0IGZpbGVzLiI7Ci0gICAgYnVpbGQuT3V0cHV0cyA9IGNtRXhwYW5kZWRMaXN0KG9iamVjdE91dHB1dHMpOwotICAgIHN0ZDo6dHJhbnNmb3JtKGJ1aWxkLk91dHB1dHMuYmVnaW4oKSwgYnVpbGQuT3V0cHV0cy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICBidWlsZC5PdXRwdXRzLmJlZ2luKCksIE1hcFRvTmluamFQYXRoKCkpOwotICAgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IG9iakJ1aWxkLk91dHB1dHM7Ci0gICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQpOworICBpZiAoY21Qcm9wIG9iamVjdE91dHB1dHMgPSBzb3VyY2UtPkdldFByb3BlcnR5KCJPQkpFQ1RfT1VUUFVUUyIpKSB7CisgICAgc3RkOjpzdHJpbmcgZXZhbHVhdGVkT2JqZWN0T3V0cHV0cyA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCisgICAgICAqb2JqZWN0T3V0cHV0cywgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisKKyAgICBpZiAoIWV2YWx1YXRlZE9iamVjdE91dHB1dHMuZW1wdHkoKSkgeworICAgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKCJwaG9ueSIpOworICAgICAgYnVpbGQuQ29tbWVudCA9ICJBZGRpdGlvbmFsIG91dHB1dCBmaWxlcy4iOworICAgICAgYnVpbGQuT3V0cHV0cyA9IGNtRXhwYW5kZWRMaXN0KGV2YWx1YXRlZE9iamVjdE91dHB1dHMpOworICAgICAgc3RkOjp0cmFuc2Zvcm0oYnVpbGQuT3V0cHV0cy5iZWdpbigpLCBidWlsZC5PdXRwdXRzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgYnVpbGQuT3V0cHV0cy5iZWdpbigpLCBNYXBUb05pbmphUGF0aCgpKTsKKyAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IG9iakJ1aWxkLk91dHB1dHM7CisgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCgKKyAgICAgICAgdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksIGJ1aWxkKTsKKyAgICB9CiAgIH0KIH0KIApAQCAtMTI0Miw4ICsxMzk3LDggQEAKIHsKICAgSnNvbjo6VmFsdWUgdGRpKEpzb246Om9iamVjdFZhbHVlKTsKICAgdGRpWyJsYW5ndWFnZSJdID0gbGFuZzsKLSAgdGRpWyJjb21waWxlci1pZCJdID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpOworICB0ZGlbImNvbXBpbGVyLWlkIl0gPSB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCisgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfQ09NUElMRVJfSUQiKSk7CiAKICAgaWYgKGxhbmcgPT0gIkZvcnRyYW4iKSB7CiAgICAgc3RkOjpzdHJpbmcgbW9kX2RpciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Rm9ydHJhbk1vZHVsZURpcmVjdG9yeSgKQEAgLTEyOTIsMTYgKzE0NDcsMTYgQEAKICAgc3RkOjpzdHJpbmcgY29uc3Qgb2JqZWN0RmlsZVBhdGggPQogICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UsIGNvbmZpZykpOwogICBzdGQ6OnN0cmluZyBjb25zdCBzd2lmdERlcHNQYXRoID0gW3NvdXJjZSwgb2JqZWN0RmlsZVBhdGhdKCkgLT4gc3RkOjpzdHJpbmcgewotICAgIGlmIChjb25zdCBjaGFyKiBuYW1lID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUiKSkgewotICAgICAgcmV0dXJuIG5hbWU7CisgICAgaWYgKGNtUHJvcCBuYW1lID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUiKSkgeworICAgICAgcmV0dXJuICpuYW1lOwogICAgIH0KLSAgICByZXR1cm4gb2JqZWN0RmlsZVBhdGggKyAiLnN3aWZ0ZGVwcyI7CisgICAgcmV0dXJuIGNtU3RyQ2F0KG9iamVjdEZpbGVQYXRoLCAiLnN3aWZ0ZGVwcyIpOwogICB9KCk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0IHN3aWZ0RGlhUGF0aCA9IFtzb3VyY2UsIG9iamVjdEZpbGVQYXRoXSgpIC0+IHN0ZDo6c3RyaW5nIHsKLSAgICBpZiAoY29uc3QgY2hhciogbmFtZSA9IHNvdXJjZS0+R2V0UHJvcGVydHkoIlN3aWZ0X0RJQUdOT1NUSUNTX0ZJTEUiKSkgewotICAgICAgcmV0dXJuIG5hbWU7CisgICAgaWYgKGNtUHJvcCBuYW1lID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiU3dpZnRfRElBR05PU1RJQ1NfRklMRSIpKSB7CisgICAgICByZXR1cm4gKm5hbWU7CiAgICAgfQotICAgIHJldHVybiBvYmplY3RGaWxlUGF0aCArICIuZGlhIjsKKyAgICByZXR1cm4gY21TdHJDYXQob2JqZWN0RmlsZVBhdGgsICIuZGlhIik7CiAgIH0oKTsKICAgc3RkOjpzdHJpbmcgY29uc3QgbWFrZURlcHNQYXRoID0gW3RoaXMsIHNvdXJjZSwgY29uZmlnXSgpIC0+IHN0ZDo6c3RyaW5nIHsKICAgICBjbUxvY2FsTmluamFHZW5lcmF0b3IgY29uc3QqIGxvY2FsID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKTsKQEAgLTEzMTEsMTIgKzE0NjYsMTMgQEAKICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChvYmplY3RGaWxlTmFtZSk7CiAKICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX1N3aWZ0X0RFUEZMRV9FWFROU0lPTl9SRVBMQUNFIikpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGRlcGVuZEZpbGVOYW1lID0KLSAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVXaXRob3V0TGFzdEV4dGVuc2lvbihvYmplY3RGaWxlTmFtZSkgKyAiLmQiOwotICAgICAgcmV0dXJuIGxvY2FsLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQob2JqZWN0RmlsZURpciArICIvIiArIGRlcGVuZEZpbGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGRlcGVuZEZpbGVOYW1lID0gY21TdHJDYXQoCisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lV2l0aG91dExhc3RFeHRlbnNpb24ob2JqZWN0RmlsZU5hbWUpLCAiLmQiKTsKKyAgICAgIHJldHVybiBsb2NhbC0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAorICAgICAgICBjbVN0ckNhdChvYmplY3RGaWxlRGlyLCAnLycsIGRlcGVuZEZpbGVOYW1lKSwKKyAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICB9Ci0gICAgcmV0dXJuIGxvY2FsLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQob2JqZWN0RmlsZU5hbWUgKyAiLmQiLAorICAgIHJldHVybiBsb2NhbC0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KGNtU3RyQ2F0KG9iamVjdEZpbGVOYW1lLCAiLmQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICB9KCk7CiAKQEAgLTEzODEsNyArMTUzNyw3IEBACiAgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRSZXF1aXJlZERlZmluaXRpb24oY21kVmFyKTsKICAgICBjbUV4cGFuZExpc3QoY29tcGlsZUNtZCwgY29tcGlsZUNtZHMpOwogICB9IGVsc2UgewotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNtZFZhciA9ICJDTUFLRV8iICsgbGFuZ3VhZ2UgKyAiX0NPTVBJTEVfT0JKRUNUIjsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBjbWRWYXIgPSBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PQkpFQ1QiKTsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcGlsZUNtZCA9CiAgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRSZXF1aXJlZERlZmluaXRpb24oY21kVmFyKTsKICAgICBjbUV4cGFuZExpc3QoY29tcGlsZUNtZCwgY29tcGlsZUNtZHMpOwpAQCAtMTQwNCwxMSArMTU2MCwxMSBAQAogCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkFkZGl0aW9uYWxDbGVhbkZpbGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wX3ZhbHVlID0KKyAgaWYgKGNtUHJvcCBwcm9wX3ZhbHVlID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQURESVRJT05BTF9DTEVBTl9GSUxFUyIpKSB7CiAgICAgY21Mb2NhbE5pbmphR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbGVhbkZpbGVzOwotICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKHByb3BfdmFsdWUsIGxnLCBjb25maWcsCisgICAgY21FeHBhbmRMaXN0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKnByb3BfdmFsdWUsIGxnLCBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KSwKICAgICAgICAgICAgICAgICAgY2xlYW5GaWxlcyk7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGJpbmFyeURpciA9IGxnLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CkBAIC0xNDk0LDkgKzE2NTAsOSBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgcG9vbF9wcm9wZXJ0eSwgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKICAgY21OaW5qYVZhcnMmIHZhcnMpCiB7Ci0gIGNvbnN0IGNoYXIqIHBvb2wgPSB0YXJnZXQtPkdldFByb3BlcnR5KHBvb2xfcHJvcGVydHkpOworICBjbVByb3AgcG9vbCA9IHRhcmdldC0+R2V0UHJvcGVydHkocG9vbF9wcm9wZXJ0eSk7CiAgIGlmIChwb29sKSB7Ci0gICAgdmFyc1sicG9vbCJdID0gcG9vbDsKKyAgICB2YXJzWyJwb29sIl0gPSAqcG9vbDsKICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5oIGIvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuaAppbmRleCA4Njc4ZGMzLi44ZDQzNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogI2luY2x1ZGUgImNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxOaW5qYUdlbmVyYXRvci5oIgpAQCAtNzAsNiArNzAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKICAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VQcmVwcm9jZXNzUnVsZShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VEZXBlbmRlbmN5UnVsZShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKICAgYm9vbCBOZWVkRXhwbGljaXRQcmVwcm9jZXNzaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKICAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VEeW5kZXBSdWxlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21OaW5qYVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCA2ZTM5MjQyLi44ZDg2M2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21OaW5qYVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJjbUxvY2FsTmluamFHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU5pbmphVHlwZXMuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTExMCw5ICsxMTEsOSBAQAogICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPQogICAgICAgbGctPkJ1aWxkQ29tbWFuZExpbmUoY29tbWFuZHMsICJ1dGlsaXR5IiwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKICAgICBzdGQ6OnN0cmluZyBkZXNjOwotICAgIGNvbnN0IGNoYXIqIGVjaG9TdHIgPSBnZW5UYXJnZXQtPkdldFByb3BlcnR5KCJFY2hvU3RyaW5nIik7CisgICAgY21Qcm9wIGVjaG9TdHIgPSBnZW5UYXJnZXQtPkdldFByb3BlcnR5KCJFY2hvU3RyaW5nIik7CiAgICAgaWYgKGVjaG9TdHIpIHsKLSAgICAgIGRlc2MgPSBlY2hvU3RyOworICAgICAgZGVzYyA9ICplY2hvU3RyOwogICAgIH0gZWxzZSB7CiAgICAgICBkZXNjID0gIlJ1bm5pbmcgdXRpbGl0eSBjb21tYW5kIGZvciAiICsgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU9TWEJ1bmRsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuY3h4CmluZGV4IDM4MmI1NjMuLjdlZWE0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU9TWEJ1bmRsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmN4eApAQCAtNTYsOSArNTYsOSBAQAogICBvdXRwYXRoID0gb3V0OwogfQogCi12b2lkIGNtT1NYQnVuZGxlR2VuZXJhdG9yOjpDcmVhdGVGcmFtZXdvcmsoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKK3ZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkNyZWF0ZUZyYW1ld29yaygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdXRwYXRoLAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6U2tpcFBhcnRzJiBza2lwUGFydHMpCiB7CiAgIGlmICh0aGlzLT5NdXN0U2tpcCgpKSB7CiAgICAgcmV0dXJuOwpAQCAtNzcsMTYgKzc3LDE4IEBACiAKICAgc3RkOjpzdHJpbmcgZnJhbWV3b3JrVmVyc2lvbiA9IHRoaXMtPkdULT5HZXRGcmFtZXdvcmtWZXJzaW9uKCk7CiAKLSAgLy8gQ29uZmlndXJlIHRoZSBJbmZvLnBsaXN0IGZpbGUKLSAgc3RkOjpzdHJpbmcgcGxpc3QgPSBuZXdvdXRwYXRoOwotICBpZiAoIXRoaXMtPk1ha2VmaWxlLT5QbGF0Zm9ybUlzQXBwbGVFbWJlZGRlZCgpKSB7Ci0gICAgLy8gUHV0IHRoZSBJbmZvLnBsaXN0IGZpbGUgaW50byB0aGUgUmVzb3VyY2VzIGRpcmVjdG9yeS4KLSAgICB0aGlzLT5NYWNDb250ZW50Rm9sZGVycy0+aW5zZXJ0KCJSZXNvdXJjZXMiKTsKLSAgICBwbGlzdCArPSAiL1Jlc291cmNlcyI7Ci0gIH0KLSAgcGxpc3QgKz0gIi9JbmZvLnBsaXN0IjsKICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZSh0YXJnZXROYW1lKTsKLSAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdlbmVyYXRlRnJhbWV3b3JrSW5mb1BMaXN0KHRoaXMtPkdULCBuYW1lLCBwbGlzdCk7CisgIGlmICghc2tpcFBhcnRzLmluZm9QbGlzdCkgeworICAgIC8vIENvbmZpZ3VyZSB0aGUgSW5mby5wbGlzdCBmaWxlCisgICAgc3RkOjpzdHJpbmcgcGxpc3QgPSBuZXdvdXRwYXRoOworICAgIGlmICghdGhpcy0+TWFrZWZpbGUtPlBsYXRmb3JtSXNBcHBsZUVtYmVkZGVkKCkpIHsKKyAgICAgIC8vIFB1dCB0aGUgSW5mby5wbGlzdCBmaWxlIGludG8gdGhlIFJlc291cmNlcyBkaXJlY3RvcnkuCisgICAgICB0aGlzLT5NYWNDb250ZW50Rm9sZGVycy0+aW5zZXJ0KCJSZXNvdXJjZXMiKTsKKyAgICAgIHBsaXN0ICs9ICIvUmVzb3VyY2VzIjsKKyAgICB9CisgICAgcGxpc3QgKz0gIi9JbmZvLnBsaXN0IjsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2VuZXJhdGVGcmFtZXdvcmtJbmZvUExpc3QodGhpcy0+R1QsIG5hbWUsIHBsaXN0KTsKKyAgfQogCiAgIC8vIEdlbmVyYXRlIFZlcnNpb25zIGRpcmVjdG9yeSBvbmx5IGZvciBNYWNPU1ggZnJhbWV3b3JrcwogICBpZiAodGhpcy0+TWFrZWZpbGUtPlBsYXRmb3JtSXNBcHBsZUVtYmVkZGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU9TWEJ1bmRsZUdlbmVyYXRvci5oIGIvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmgKaW5kZXggMjMyYmU0OC4uNWJmMWQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmgKQEAgLTE5LDYgKzE5LDE1IEBACiBwdWJsaWM6CiAgIGNtT1NYQnVuZGxlR2VuZXJhdG9yKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpOwogCisgIHN0cnVjdCBTa2lwUGFydHMKKyAgeworICAgIFNraXBQYXJ0cygpCisgICAgICA6IGluZm9QbGlzdChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIGJvb2wgaW5mb1BsaXN0OyAvLyBOT0xJTlQobW9kZXJuaXplLXVzZS1kZWZhdWx0LW1lbWJlci1pbml0KQorICB9OworCiAgIC8vIGNyZWF0ZSBhbiBhcHAgYnVuZGxlIGF0IGEgZ2l2ZW4gcm9vdCwgYW5kIHJldHVybgogICAvLyB0aGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgYnVuZGxlIHRoYXQgY29udGFpbnMgdGhlIGV4ZWN1dGFibGUKICAgdm9pZCBDcmVhdGVBcHBCdW5kbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIHN0ZDo6c3RyaW5nJiByb290LApAQCAtMjYsNyArMzUsOCBAQAogCiAgIC8vIGNyZWF0ZSBhIGZyYW1ld29yayBhdCBhIGdpdmVuIHJvb3QKICAgdm9pZCBDcmVhdGVGcmFtZXdvcmsoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tpcFBhcnRzJiBza2lwUGFydHMgPSBTa2lwUGFydHMoKSk7CiAKICAgLy8gY3JlYXRlIGEgY2YgYnVuZGxlIGF0IGEgZ2l2ZW4gcm9vdAogICB2b2lkIENyZWF0ZUNGQnVuZGxlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgcm9vdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU9wdGlvbkNvbW1hbmQuY3h4IGIvU291cmNlL2NtT3B0aW9uQ29tbWFuZC5jeHgKaW5kZXggMjJlNTlhYy4uYTU4ZTJmOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtT3B0aW9uQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtT3B0aW9uQ29tbWFuZC5jeHgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlU25hcHNob3QuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKQEAgLTUyLDcgKzUzLDcgQEAKICAgLy8gU2VlIGlmIGEgY2FjaGUgdmFyaWFibGUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgLy8gSWYgc28ganVzdCBtYWtlIHN1cmUgdGhlIGRvYyBzdGF0ZSBpcyBjb3JyZWN0CiAgIGNtU3RhdGUqIHN0YXRlID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKTsKLSAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoYXJnc1swXSk7CisgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShhcmdzWzBdKTsKICAgaWYgKGV4aXN0aW5nVmFsdWUgJiYKICAgICAgIChzdGF0ZS0+R2V0Q2FjaGVFbnRyeVR5cGUoYXJnc1swXSkgIT0gY21TdGF0ZUVudW1zOjpVTklOSVRJQUxJWkVEKSkgewogICAgIHN0YXRlLT5TZXRDYWNoZUVudHJ5UHJvcGVydHkoYXJnc1swXSwgIkhFTFBTVFJJTkciLCBhcmdzWzFdKTsKQEAgLTYwLDcgKzYxLDcgQEAKICAgfQogCiAgIC8vIE5vdGhpbmcgaW4gdGhlIGNhY2hlIHNvIGFkZCBpdAotICBzdGQ6OnN0cmluZyBpbml0aWFsVmFsdWUgPSBleGlzdGluZ1ZhbHVlID8gZXhpc3RpbmdWYWx1ZSA6ICJPZmYiOworICBzdGQ6OnN0cmluZyBpbml0aWFsVmFsdWUgPSBleGlzdGluZ1ZhbHVlID8gKmV4aXN0aW5nVmFsdWUgOiAiT2ZmIjsKICAgaWYgKGFyZ3Muc2l6ZSgpID09IDMpIHsKICAgICBpbml0aWFsVmFsdWUgPSBhcmdzWzJdOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuY3h4IGIvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmN4eAppbmRleCAxYzZmYWQxLi4zNTllOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuY3h4CisrKyBiL1NvdXJjZS9jbU91dHB1dENvbnZlcnRlci5jeHgKQEAgLTI2LDcgKzI2LDcgQEAKICAgLy8gYWxyZWFkeSBleGlzdHMsIHdlIGNhbiB1c2UgYSBzaG9ydC1wYXRoIHRvIHJlZmVyZW5jZSBpdCB3aXRob3V0IGEKICAgLy8gc3BhY2UuCiAgIGlmICh0aGlzLT5HZXRTdGF0ZSgpLT5Vc2VXaW5kb3dzU2hlbGwoKSAmJgotICAgICAgcmVtb3RlLmZpbmQoJyAnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgcmVtb3RlLmZpbmRfZmlyc3Rfb2YoIiAjIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMocmVtb3RlKSkgewogICAgIHN0ZDo6c3RyaW5nIHRtcDsKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0U2hvcnRQYXRoKHJlbW90ZSwgdG1wKSkgewpAQCAtMTcwLDEzICsxNzAsMTUgQEAKICAgcmV0dXJuIGZvcm1hdDsKIH0KIAotY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5Gb3JtYXQgY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5Gb3JtYXQoCi0gIGNvbnN0IGNoYXIqIHZhbHVlKQorY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5QcmVwcm9jZXNzIGNtT3V0cHV0Q29udmVydGVyOjpHZXRGb3J0cmFuUHJlcHJvY2VzcygKKyAgY206OnN0cmluZ192aWV3IHZhbHVlKQogewotICBpZiAoIXZhbHVlKSB7Ci0gICAgcmV0dXJuIEZvcnRyYW5Gb3JtYXROb25lOworICBpZiAodmFsdWUuZW1wdHkoKSkgeworICAgIHJldHVybiBGb3J0cmFuUHJlcHJvY2Vzczo6VW5zZXQ7CiAgIH0KLSAgcmV0dXJuIEdldEZvcnRyYW5Gb3JtYXQoY206OnN0cmluZ192aWV3KHZhbHVlKSk7CisKKyAgcmV0dXJuIGNtSXNPbih2YWx1ZSkgPyBGb3J0cmFuUHJlcHJvY2Vzczo6TmVlZGVkCisgICAgICAgICAgICAgICAgICAgICAgIDogRm9ydHJhblByZXByb2Nlc3M6Ok5vdE5lZWRlZDsKIH0KIAogdm9pZCBjbU91dHB1dENvbnZlcnRlcjo6U2V0TGlua1NjcmlwdFNoZWxsKGJvb2wgbGlua1NjcmlwdFNoZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmggYi9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuaAppbmRleCA2NTgzYWI1Li5hOGI0NTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuaApAQCAtOTQsNyArOTQsMTQgQEAKICAgICBGb3J0cmFuRm9ybWF0RnJlZQogICB9OwogICBzdGF0aWMgRm9ydHJhbkZvcm1hdCBHZXRGb3J0cmFuRm9ybWF0KGNtOjpzdHJpbmdfdmlldyB2YWx1ZSk7Ci0gIHN0YXRpYyBGb3J0cmFuRm9ybWF0IEdldEZvcnRyYW5Gb3JtYXQoY29uc3QgY2hhciogdmFsdWUpOworCisgIGVudW0gY2xhc3MgRm9ydHJhblByZXByb2Nlc3MKKyAgeworICAgIFVuc2V0LAorICAgIE5vdE5lZWRlZCwKKyAgICBOZWVkZWQKKyAgfTsKKyAgc3RhdGljIEZvcnRyYW5QcmVwcm9jZXNzIEdldEZvcnRyYW5QcmVwcm9jZXNzKGNtOjpzdHJpbmdfdmlldyB2YWx1ZSk7CiAKIHByaXZhdGU6CiAgIGNtU3RhdGUqIEdldFN0YXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21PdXRwdXRSZXF1aXJlZEZpbGVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21PdXRwdXRSZXF1aXJlZEZpbGVzQ29tbWFuZC5jeHgKaW5kZXggMTQ3Zjk3Zi4uYWE1YWJjYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtT3V0cHV0UmVxdWlyZWRGaWxlc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbU91dHB1dFJlcXVpcmVkRmlsZXNDb21tYW5kLmN4eApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0xMTcsMTQgKzExOCwxMyBAQAogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiB1bmlxdWVJbmNsdWRlczsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3JkZXJlZEFuZFVuaXF1ZUluY2x1ZGVzOwogICAgIGZvciAoYXV0byBjb25zdCYgdGFyZ2V0IDogdGhpcy0+TWFrZWZpbGUtPkdldFRhcmdldHMoKSkgewotICAgICAgY29uc3QgY2hhciogaW5jRGlyUHJvcCA9Ci0gICAgICAgIHRhcmdldC5zZWNvbmQuR2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKKyAgICAgIGNtUHJvcCBpbmNEaXJQcm9wID0gdGFyZ2V0LnNlY29uZC5HZXRQcm9wZXJ0eSgiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwogICAgICAgaWYgKCFpbmNEaXJQcm9wKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCiAgICAgICBzdGQ6OnN0cmluZyBpbmNEaXJzID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKAotICAgICAgICBpbmNEaXJQcm9wLCBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwQWxsR2VuZXJhdG9yRXhwcmVzc2lvbnMpOworICAgICAgICAqaW5jRGlyUHJvcCwgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpTdHJpcEFsbEdlbmVyYXRvckV4cHJlc3Npb25zKTsKIAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzID0gY21FeHBhbmRlZExpc3QoaW5jRGlycyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVBpcGVDb25uZWN0aW9uLmggYi9Tb3VyY2UvY21QaXBlQ29ubmVjdGlvbi5oCmluZGV4IDgxZjhhNDkuLjEyMTU3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVBpcGVDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL2NtUGlwZUNvbm5lY3Rpb24uaApAQCAtNiw3ICs2LDcgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21Db25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUG9saWNpZXMuY3h4IGIvU291cmNlL2NtUG9saWNpZXMuY3h4CmluZGV4IDVjOGJjOTguLjAxZThjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVBvbGljaWVzLmN4eAorKysgYi9Tb3VyY2UvY21Qb2xpY2llcy5jeHgKQEAgLTcsOSArNywxMSBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCisjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtNzIsNiArNzQsNyBAQAogI2RlZmluZSBQT0xJQ1lfQ0FTRShJRCwgVl9NQUpPUiwgVl9NSU5PUiwgVl9QQVRDSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBjYXNlIGNtUG9saWNpZXM6OklEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHJldHVybiAjVl9NQUpPUiAiLiIgI1ZfTUlOT1IgIi4iICNWX1BBVENIOworICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICBDTV9GT1JfRUFDSF9QT0xJQ1lfSURfVkVSU0lPTihQT0xJQ1lfQ0FTRSkKICN1bmRlZiBQT0xJQ1lfQ0FTRQogICAgIGNhc2UgY21Qb2xpY2llczo6Q01QQ09VTlQ6CkBAIC05MCw2ICs5Myw3IEBACiAgICAgICAgICAgICAobWFqb3JWID09IChWX01BSk9SKSAmJiBtaW5vclYgKyAxIDwgKFZfTUlOT1IpICsgMSkgfHwgICAgICAgICAgICBcCiAgICAgICAgICAgICAobWFqb3JWID09IChWX01BSk9SKSAmJiBtaW5vclYgPT0gKFZfTUlOT1IpICYmICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgcGF0Y2hWICsgMSA8IChWX1BBVENIKSArIDEpKTsKKyAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgQ01fRk9SX0VBQ0hfUE9MSUNZX0lEX1ZFUlNJT04oUE9MSUNZX0NBU0UpCiAjdW5kZWYgUE9MSUNZX0NBU0UKICAgICBjYXNlIGNtUG9saWNpZXM6OkNNUENPVU5UOgpAQCAtMTU1LDcgKzE1OSw4IEBACiAKIGJvb2wgY21Qb2xpY2llczo6QXBwbHlQb2xpY3lWZXJzaW9uKGNtTWFrZWZpbGUqIG1mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FybkNvbXBhdCB3YXJuQ29tcGF0KQogewogICAvLyBQYXJzZSBjb21wb25lbnRzIG9mIHRoZSBtaW5pbXVtIHZlcnNpb24uCiAgIHVuc2lnbmVkIGludCBtaW5NYWpvciA9IDI7CkBAIC0yNDIsMTMgKzI0NywzNCBAQAogICAgIHBvbFBhdGNoID0gbWF4UGF0Y2g7CiAgIH0KIAotICByZXR1cm4gY21Qb2xpY2llczo6QXBwbHlQb2xpY3lWZXJzaW9uKG1mLCBwb2xNYWpvciwgcG9sTWlub3IsIHBvbFBhdGNoKTsKKyAgcmV0dXJuIGNtUG9saWNpZXM6OkFwcGx5UG9saWN5VmVyc2lvbihtZiwgcG9sTWFqb3IsIHBvbE1pbm9yLCBwb2xQYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuQ29tcGF0KTsKIH0KIAogYm9vbCBjbVBvbGljaWVzOjpBcHBseVBvbGljeVZlcnNpb24oY21NYWtlZmlsZSogbWYsIHVuc2lnbmVkIGludCBtYWpvclZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtaW5vclZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYXRjaFZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYXRjaFZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhcm5Db21wYXQgd2FybkNvbXBhdCkKIHsKKyAgLy8gV2FybiBhYm91dCBwb2xpY3kgdmVyc2lvbnMgZm9yIHdoaWNoIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkLgorICBpZiAod2FybkNvbXBhdCA9PSBXYXJuQ29tcGF0OjpPbiAmJgorICAgICAgKG1ham9yVmVyIDwgMiB8fCAobWFqb3JWZXIgPT0gMiAmJiBtaW5vclZlciA8IDgpIHx8CisgICAgICAgKG1ham9yVmVyID09IDIgJiYgbWlub3JWZXIgPT0gOCAmJiBwYXRjaFZlciA8IDEyKSkgJiYKKyAgICAgIC8vIEF2b2lkIHdhcm5pbmcgb24gY2FsbHMgZ2VuZXJhdGVkIGJ5IGluc3RhbGwoRVhQT1JUKQorICAgICAgLy8gaW4gQ01ha2UgdmVyc2lvbnMgcHJpb3IgdG8gMy4xOC4KKyAgICAgICEobWFqb3JWZXIgPT0gMiAmJiBtaW5vclZlciA9PSA2ICYmIHBhdGNoVmVyID09IDAgJiYKKyAgICAgICAgbWYtPkdldFN0YXRlU25hcHNob3QoKS5DYW5Qb3BQb2xpY3lTY29wZSgpICYmCisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0cnVjbXAobWYtPkdldEJhY2t0cmFjZSgpLlRvcCgpLk5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY21ha2VfcG9saWN5IikgPT0gMCkpIHsKKyAgICBtZi0+SXNzdWVNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OkRFUFJFQ0FUSU9OX1dBUk5JTkcsCisgICAgICAiQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tICIKKyAgICAgICJhIGZ1dHVyZSB2ZXJzaW9uIG9mIENNYWtlLlxuIgorICAgICAgIlVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggIgorICAgICAgInRvIHRlbGwgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCAiCisgICAgICAib2xkZXIgdmVyc2lvbnMuIik7CisgIH0KKwogICAvLyBub3cgbG9vcCBvdmVyIGFsbCB0aGUgcG9saWNpZXMgYW5kIHNldCB0aGVtIGFzIGFwcHJvcHJpYXRlCiAgIHN0ZDo6dmVjdG9yPGNtUG9saWNpZXM6OlBvbGljeUlEPiBhbmNpZW50UG9saWNpZXM7CiAgIGZvciAoUG9saWN5SUQgcGlkID0gY21Qb2xpY2llczo6Q01QMDAwMDsgcGlkICE9IGNtUG9saWNpZXM6OkNNUENPVU5UOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUG9saWNpZXMuaCBiL1NvdXJjZS9jbVBvbGljaWVzLmgKaW5kZXggMTM2NmZmMC4uYmJhOGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtUG9saWNpZXMuaAorKysgYi9Tb3VyY2UvY21Qb2xpY2llcy5oCkBAIC0zMDUsNyArMzA1LDI1IEBACiAgICAgICAgICAxNywgMCwgY21Qb2xpY2llczo6V0FSTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIFNFTEVDVChQT0xJQ1ksIENNUDAxMDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAibWFya19hc19hZHZhbmNlZCgpIGRvZXMgbm90aGluZyBpZiBhIGNhY2hlIGVudHJ5IGRvZXMgbm90IGV4aXN0LiIsICBcCi0gICAgICAgICAzLCAxNywgMCwgY21Qb2xpY2llczo6V0FSTikKKyAgICAgICAgIDMsIDE3LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJNdWx0aXBsZSBleHBvcnQoKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORCBpcyBub3QgYWxsb3dlZC4iLCAgIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgbm93IGRldGVjdGVkIGZvciBOVkNDLCBlbXB0eSAiICAgICAgICAgICAgIFwKKyAgICAgICAgICJDVURBX0FSQ0hJVEVDVFVSRVMgbm90IGFsbG93ZWQuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNSwgIkRldmljZSBsaW5rIHN0ZXAgdXNlcyB0aGUgbGluayBvcHRpb25zLiIsIDMsIDE4LCAgIFwKKyAgICAgICAgIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNiwgIlRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiIsIDMsIDE4LCAwLCAgIFwKKyAgICAgICAgIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNywgIkFuIEFMSUFTIHRhcmdldCBjYW5ub3Qgb3ZlcndyaXRlIGFub3RoZXIgdGFyZ2V0LiIsIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwOCwgIkEgdGFyZ2V0IGNhbm5vdCBsaW5rIHRvIGl0c2VsZiB0aHJvdWdoIGFuIGFsaWFzLiIsIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJmaW5kX3Byb2dyYW0oKSByZXF1aXJlcyBwZXJtaXNzaW9uIHRvIGV4ZWN1dGUgYnV0IG5vdCB0byByZWFkLiIsIDMsIFwKKyAgICAgICAgIDE5LCAwLCBjbVBvbGljaWVzOjpXQVJOKQogCiAjZGVmaW5lIENNX1NFTEVDVF9JRChGLCBBMSwgQTIsIEEzLCBBNCwgQTUsIEE2KSBGKEExKQogI2RlZmluZSBDTV9GT1JfRUFDSF9QT0xJQ1lfSUQoUE9MSUNZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzM1LDcgKzM1MywxMCBAQAogICBGKENNUDAwODEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGKENNUDAwODMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGKENNUDAwOTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGKENNUDAwOTkpCisgIEYoQ01QMDA5OSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoQ01QMDEwNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoQ01QMDEwNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoQ01QMDEwOCkKIAogLyoqIFxjbGFzcyBjbVBvbGljaWVzCiAgKiBcYnJpZWYgSGFuZGxlcyBjaGFuZ2VzIGluIENNYWtlIGJlaGF2aW9yIGFuZCBwb2xpY2llcwpAQCAtMzc4LDEyICszOTksMjAgQEAKICAgLy8hIEdldCB0aGUgZGVmYXVsdCBzdGF0dXMgZm9yIGEgcG9saWN5CiAgIHN0YXRpYyBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OlBvbGljeUlEIGlkKTsKIAorICBlbnVtIGNsYXNzIFdhcm5Db21wYXQKKyAgeworICAgIE9mZiwKKyAgICBPbgorICB9OworCiAgIC8vISBTZXQgYSBwb2xpY3kgbGV2ZWwgZm9yIHRoaXMgbGlzdGZpbGUKICAgc3RhdGljIGJvb2wgQXBwbHlQb2xpY3lWZXJzaW9uKGNtTWFrZWZpbGUqIG1mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2ZXJzaW9uX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhcm5Db21wYXQgd2FybkNvbXBhdCk7CiAgIHN0YXRpYyBib29sIEFwcGx5UG9saWN5VmVyc2lvbihjbU1ha2VmaWxlKiBtZiwgdW5zaWduZWQgaW50IG1ham9yVmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1pbm9yVmVyLCB1bnNpZ25lZCBpbnQgcGF0Y2hWZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1pbm9yVmVyLCB1bnNpZ25lZCBpbnQgcGF0Y2hWZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXJuQ29tcGF0IHdhcm5Db21wYXQpOwogCiAgIC8vISByZXR1cm4gYSB3YXJuaW5nIHN0cmluZyBmb3IgYSBnaXZlbiBwb2xpY3kKICAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldFBvbGljeVdhcm5pbmcoY21Qb2xpY2llczo6UG9saWN5SUQgaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvY2Vzc091dHB1dC5jeHggYi9Tb3VyY2UvY21Qcm9jZXNzT3V0cHV0LmN4eAppbmRleCBlODBlYTVjLi4wZmI0ZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qcm9jZXNzT3V0cHV0LmN4eAorKysgYi9Tb3VyY2UvY21Qcm9jZXNzT3V0cHV0LmN4eApAQCAtNCw3ICs0LDEwIEBACiAjaW5jbHVkZSAiY21Qcm9jZXNzT3V0cHV0LmgiCiAKICNpZiBkZWZpbmVkKF9XSU4zMikKKyMgIGluY2x1ZGUgPGNtL21lbW9yeT4KKwogIyAgaW5jbHVkZSA8d2luZG93cy5oPgorCiB1bnNpZ25lZCBpbnQgY21Qcm9jZXNzT3V0cHV0OjpkZWZhdWx0Q29kZXBhZ2UgPQogICBLV1NZU19FTkNPRElOR19ERUZBVUxUX0NPREVQQUdFOwogI2VuZGlmCkBAIC0xNDMsOSArMTQ2LDkgQEAKICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgIGNvbnN0IGludCB3bGVuZ3RoID0KICAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyKGNvZGVwYWdlLCAwLCByYXcuY19zdHIoKSwgaW50KHJhdy5zaXplKCkpLCBOVUxMLCAwKTsKLSAgd2NoYXJfdCogd2RhdGEgPSBuZXcgd2NoYXJfdFt3bGVuZ3RoXTsKLSAgaW50IHIgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKGNvZGVwYWdlLCAwLCByYXcuY19zdHIoKSwgaW50KHJhdy5zaXplKCkpLCB3ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdsZW5ndGgpOworICBhdXRvIHdkYXRhID0gY206Om1ha2VfdW5pcXVlPHdjaGFyX3RbXT4od2xlbmd0aCk7CisgIGludCByID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlcGFnZSwgMCwgcmF3LmNfc3RyKCksIGludChyYXcuc2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkYXRhLmdldCgpLCB3bGVuZ3RoKTsKICAgaWYgKHIgPiAwKSB7CiAgICAgaWYgKGxhc3RDaGFyKSB7CiAgICAgICAqbGFzdENoYXIgPSAwOwpAQCAtMTU0LDE4ICsxNTcsMTYgQEAKICAgICAgICAgKmxhc3RDaGFyID0gd2RhdGFbd2xlbmd0aCAtIDFdOwogICAgICAgfQogICAgIH0KLSAgICBpbnQgbGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShkZWZhdWx0Q29kZXBhZ2UsIDAsIHdkYXRhLCB3bGVuZ3RoLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIE5VTEwpOwotICAgIGNoYXIqIGRhdGEgPSBuZXcgY2hhcltsZW5ndGhdOwotICAgIHIgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGRlZmF1bHRDb2RlcGFnZSwgMCwgd2RhdGEsIHdsZW5ndGgsIGRhdGEsIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICBpbnQgbGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShkZWZhdWx0Q29kZXBhZ2UsIDAsIHdkYXRhLmdldCgpLCB3bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworICAgIGF1dG8gZGF0YSA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KGxlbmd0aCk7CisgICAgciA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoZGVmYXVsdENvZGVwYWdlLCAwLCB3ZGF0YS5nZXQoKSwgd2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdldCgpLCBsZW5ndGgsIE5VTEwsIE5VTEwpOwogICAgIGlmIChyID4gMCkgewotICAgICAgZGVjb2RlZCA9IHN0ZDo6c3RyaW5nKGRhdGEsIGxlbmd0aCk7CisgICAgICBkZWNvZGVkID0gc3RkOjpzdHJpbmcoZGF0YS5nZXQoKSwgbGVuZ3RoKTsKICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgIH0KLSAgICBkZWxldGVbXSBkYXRhOwogICB9Ci0gIGRlbGV0ZVtdIHdkYXRhOwogICByZXR1cm4gc3VjY2VzczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvamVjdENvbW1hbmQuY3h4IGIvU291cmNlL2NtUHJvamVjdENvbW1hbmQuY3h4CmluZGV4IGEyNWZkNDIuLjJlYzY2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVByb2plY3RDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21Qcm9qZWN0Q29tbWFuZC5jeHgKQEAgLTQ3LDEwICs0NywxMCBAQAogICBtZi5TZXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZSk7CiAKICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKHByb2plY3ROYW1lICsgIl9CSU5BUllfRElSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1mLkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbWYuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIlZhbHVlIENvbXB1dGVkIGJ5IENNYWtlIiwgY21TdGF0ZUVudW1zOjpTVEFUSUMpOwogICBtZi5BZGRDYWNoZURlZmluaXRpb24ocHJvamVjdE5hbWUgKyAiX1NPVVJDRV9ESVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgbWYuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBtZi5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsdWUgQ29tcHV0ZWQgYnkgQ01ha2UiLCBjbVN0YXRlRW51bXM6OlNUQVRJQyk7CiAKICAgbWYuQWRkRGVmaW5pdGlvbigiUFJPSkVDVF9CSU5BUllfRElSIiwgbWYuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKQEAgLTY2LDcgKzY2LDcgQEAKICAgLy8gd2lsbCB3b3JrLgogICBpZiAoIW1mLkdldERlZmluaXRpb24oIkNNQUtFX1BST0pFQ1RfTkFNRSIpIHx8IG1mLklzUm9vdE1ha2VmaWxlKCkpIHsKICAgICBtZi5BZGREZWZpbml0aW9uKCJDTUFLRV9QUk9KRUNUX05BTUUiLCBwcm9qZWN0TmFtZSk7Ci0gICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9QUk9KRUNUX05BTUUiLCBwcm9qZWN0TmFtZS5jX3N0cigpLAorICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfUFJPSkVDVF9OQU1FIiwgcHJvamVjdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYWx1ZSBDb21wdXRlZCBieSBDTWFrZSIsIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKICAgfQogCkBAIC0zNzksNyArMzc5LDcgQEAKICAgLy8gQ01ha2VMaXN0cy50eHQgZmlsZSwgdGhlbiBnbyB3aXRoIHRoZSBsYXN0IG9uZS4KICAgaWYgKCFtZi5HZXREZWZpbml0aW9uKG5hbWUpIHx8IG1mLklzUm9vdE1ha2VmaWxlKCkpIHsKICAgICBtZi5BZGREZWZpbml0aW9uKG5hbWUsIHZhbHVlKTsKLSAgICBtZi5BZGRDYWNoZURlZmluaXRpb24obmFtZSwgdmFsdWUuY19zdHIoKSwgIlZhbHVlIENvbXB1dGVkIGJ5IENNYWtlIiwKKyAgICBtZi5BZGRDYWNoZURlZmluaXRpb24obmFtZSwgdmFsdWUsICJWYWx1ZSBDb21wdXRlZCBieSBDTWFrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvcGVydHkuaCBiL1NvdXJjZS9jbVByb3BlcnR5LmgKaW5kZXggODBmMTMxYS4uYjBmY2NlNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvcGVydHkuaAorKysgYi9Tb3VyY2UvY21Qcm9wZXJ0eS5oCkBAIC01LDYgKzUsOCBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPHN0cmluZz4KKwogY2xhc3MgY21Qcm9wZXJ0eQogewogcHVibGljOgpAQCAtMjIsNCArMjQsNiBAQAogICB9OwogfTsKIAordXNpbmcgY21Qcm9wID0gY29uc3Qgc3RkOjpzdHJpbmcqOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbi5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uY3h4CmluZGV4IDZhMzE3NGMuLjE3OTZiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbi5jeHgKKysrIGIvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uLmN4eApAQCAtMiwxOSArMiwzOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb24uaCIKIAotdm9pZCBjbVByb3BlcnR5RGVmaW5pdGlvbjo6RGVmaW5lUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzaG9ydERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnVsbERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGFpbikKKyNpbmNsdWRlIDx0dXBsZT4KKworY21Qcm9wZXJ0eURlZmluaXRpb246OmNtUHJvcGVydHlEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIHNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZnVsbERlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW5lZCkKKyAgOiBTaG9ydERlc2NyaXB0aW9uKHN0ZDo6bW92ZShzaG9ydERlc2NyaXB0aW9uKSkKKyAgLCBGdWxsRGVzY3JpcHRpb24oc3RkOjptb3ZlKGZ1bGxEZXNjcmlwdGlvbikpCisgICwgQ2hhaW5lZChjaGFpbmVkKQogewotICB0aGlzLT5OYW1lID0gbmFtZTsKLSAgdGhpcy0+U2NvcGUgPSBzY29wZTsKLSAgdGhpcy0+Q2hhaW5lZCA9IGNoYWluOwotICBpZiAoc2hvcnREZXNjcmlwdGlvbikgewotICAgIHRoaXMtPlNob3J0RGVzY3JpcHRpb24gPSBzaG9ydERlc2NyaXB0aW9uOworfQorCit2b2lkIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwOjpEZWZpbmVQcm9wZXJ0eSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBGdWxsRGVzY3JpcHRpb24sCisgIGJvb2wgY2hhaW4pCit7CisgIGF1dG8gaXQgPSB0aGlzLT5NYXBfLmZpbmQoa2V5X3R5cGUobmFtZSwgc2NvcGUpKTsKKyAgaWYgKGl0ID09IHRoaXMtPk1hcF8uZW5kKCkpIHsKKyAgICAvLyB0cnlfZW1wbGFjZSgpIHNpbmNlIEMrKzE3CisgICAgdGhpcy0+TWFwXy5lbXBsYWNlKAorICAgICAgc3RkOjpwaWVjZXdpc2VfY29uc3RydWN0LCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUobmFtZSwgc2NvcGUpLAorICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKFNob3J0RGVzY3JpcHRpb24sIEZ1bGxEZXNjcmlwdGlvbiwgY2hhaW4pKTsKICAgfQotICBpZiAoZnVsbERlc2NyaXB0aW9uKSB7Ci0gICAgdGhpcy0+RnVsbERlc2NyaXB0aW9uID0gZnVsbERlc2NyaXB0aW9uOworfQorCitjbVByb3BlcnR5RGVmaW5pdGlvbiBjb25zdCogY21Qcm9wZXJ0eURlZmluaXRpb25NYXA6OkdldFByb3BlcnR5RGVmaW5pdGlvbigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3QKK3sKKyAgYXV0byBpdCA9IHRoaXMtPk1hcF8uZmluZChrZXlfdHlwZShuYW1lLCBzY29wZSkpOworICBpZiAoaXQgIT0gdGhpcy0+TWFwXy5lbmQoKSkgeworICAgIHJldHVybiAmaXQtPnNlY29uZDsKICAgfQorCisgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uLmggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaAppbmRleCAwZDY4YzMyLi5mODNiYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaApAQCAtNSw3ICs1LDkgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAKQEAgLTEzLDI4ICsxNSwxOSBAQAogICogXGJyaWVmIFByb3BlcnR5IG1ldGEtaW5mb3JtYXRpb24KICAqCiAgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCBwcm9wZXJ0eToKLSAqIC0gTmFtZTsKICAqIC0gVmFyaW91cyBkb2N1bWVudGF0aW9uIHN0cmluZ3M7Ci0gKiAtIFRoZSBzY29wZSBvZiB0aGUgcHJvcGVydHk7CiAgKiAtIElmIHRoZSBwcm9wZXJ0eSBpcyBjaGFpbmVkLgogICovCiBjbGFzcyBjbVByb3BlcnR5RGVmaW5pdGlvbgogewogcHVibGljOgotICAvLy8gRGVmaW5lIHRoaXMgcHJvcGVydHkKLSAgdm9pZCBEZWZpbmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIFNob3J0RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogRnVsbERlc2NyaXB0aW9uLCBib29sIGNoYWluZWQpOwotCi0gIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yCi0gIGNtUHJvcGVydHlEZWZpbml0aW9uKCkgeyB0aGlzLT5DaGFpbmVkID0gZmFsc2U7IH0KKyAgLy8vIENvbnN0cnVjdG9yCisgIGNtUHJvcGVydHlEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIHNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbmVkKTsKIAogICAvLy8gSXMgdGhlIHByb3BlcnR5IGNoYWluZWQ/CiAgIGJvb2wgSXNDaGFpbmVkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q2hhaW5lZDsgfQogCi0gIC8vLyBHZXQgdGhlIHNjb3BlCi0gIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBHZXRTY29wZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlNjb3BlOyB9Ci0KICAgLy8vIEdldCB0aGUgZG9jdW1lbnRhdGlvbiAoc2hvcnQgdmVyc2lvbikKICAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldFNob3J0RGVzY3JpcHRpb24oKSBjb25zdAogICB7CkBAIC00NywxMiArNDAsMzAgQEAKICAgICByZXR1cm4gdGhpcy0+RnVsbERlc2NyaXB0aW9uOwogICB9CiAKLXByb3RlY3RlZDoKLSAgc3RkOjpzdHJpbmcgTmFtZTsKK3ByaXZhdGU6CiAgIHN0ZDo6c3RyaW5nIFNob3J0RGVzY3JpcHRpb247CiAgIHN0ZDo6c3RyaW5nIEZ1bGxEZXNjcmlwdGlvbjsKLSAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIFNjb3BlOwogICBib29sIENoYWluZWQ7CiB9OwogCisvKiogXGNsYXNzIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwCisgKiBcYnJpZWYgTWFwIHByb3BlcnR5IG5hbWUgYW5kIHNjb3BlIHRvIHRoZWlyIGRlZmluaXRpb24KKyAqLworY2xhc3MgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAKK3sKK3B1YmxpYzoKKyAgLy8gZGVmaW5lIHRoZSBwcm9wZXJ0eQorICB2b2lkIERlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbik7CisKKyAgLy8gZ2V0IHRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uIGlmIHByZXNlbnQsIG90aGVyd2lzZSBudWxscHRyCisgIGNtUHJvcGVydHlEZWZpbml0aW9uIGNvbnN0KiBHZXRQcm9wZXJ0eURlZmluaXRpb24oCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgIHVzaW5nIGtleV90eXBlID0gc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBjbVByb3BlcnR5OjpTY29wZVR5cGU+OworICBzdGQ6Om1hcDxrZXlfdHlwZSwgY21Qcm9wZXJ0eURlZmluaXRpb24+IE1hcF87Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuY3h4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzUyZWQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5jeHgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuaCIKLQotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLXZvaWQgY21Qcm9wZXJ0eURlZmluaXRpb25NYXA6OkRlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogU2hvcnREZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIEZ1bGxEZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW4pCi17Ci0gIGF1dG8gaXQgPSB0aGlzLT5maW5kKG5hbWUpOwotICBjbVByb3BlcnR5RGVmaW5pdGlvbiogcHJvcDsKLSAgaWYgKGl0ID09IHRoaXMtPmVuZCgpKSB7Ci0gICAgcHJvcCA9ICYoKnRoaXMpW25hbWVdOwotICAgIHByb3AtPkRlZmluZVByb3BlcnR5KG5hbWUsIHNjb3BlLCBTaG9ydERlc2NyaXB0aW9uLCBGdWxsRGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhaW4pOwotICB9Ci19Ci0KLWJvb2wgY21Qcm9wZXJ0eURlZmluaXRpb25NYXA6OklzUHJvcGVydHlEZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAotewotICByZXR1cm4gdGhpcy0+ZmluZChuYW1lKSAhPSB0aGlzLT5lbmQoKTsKLX0KLQotYm9vbCBjbVByb3BlcnR5RGVmaW5pdGlvbk1hcDo6SXNQcm9wZXJ0eUNoYWluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gIGF1dG8gaXQgPSB0aGlzLT5maW5kKG5hbWUpOwotICBpZiAoaXQgPT0gdGhpcy0+ZW5kKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gaXQtPnNlY29uZC5Jc0NoYWluZWQoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5oIGIvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uTWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYzc5MTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uTWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwX2gKLSNkZWZpbmUgY21Qcm9wZXJ0eURlZmluaXRpb25NYXBfaAotCi0jaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjbVByb3BlcnR5LmgiCi0jaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb24uaCIKLQotY2xhc3MgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAKLSAgOiBwdWJsaWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtUHJvcGVydHlEZWZpbml0aW9uPgotewotcHVibGljOgotICAvLyBkZWZpbmUgdGhlIHByb3BlcnR5Ci0gIHZvaWQgRGVmaW5lUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBTaG9ydERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbik7Ci0KLSAgLy8gaGFzIGEgbmFtZWQgcHJvcGVydHkgYmVlbiBkZWZpbmVkCi0gIGJvb2wgSXNQcm9wZXJ0eURlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gIC8vIGlzIGEgbmFtZWQgcHJvcGVydHkgc2V0IHRvIGNoYWluCi0gIGJvb2wgSXNQcm9wZXJ0eUNoYWluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5jeHgKaW5kZXggZDRiMzU1Mi4uZjIyZjM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvcGVydHlNYXAuY3h4CisrKyBiL1NvdXJjZS9jbVByb3BlcnR5TWFwLmN4eApAQCAtNDIsMTMgKzQyLDExIEBACiAgIE1hcF8uZXJhc2UobmFtZSk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtUHJvcGVydHlNYXA6OkdldFByb3BlcnR5VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0CitjbVByb3AgY21Qcm9wZXJ0eU1hcDo6R2V0UHJvcGVydHlWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgewotICAgIGF1dG8gaXQgPSBNYXBfLmZpbmQobmFtZSk7Ci0gICAgaWYgKGl0ICE9IE1hcF8uZW5kKCkpIHsKLSAgICAgIHJldHVybiBpdC0+c2Vjb25kLmNfc3RyKCk7Ci0gICAgfQorICBhdXRvIGl0ID0gTWFwXy5maW5kKG5hbWUpOworICBpZiAoaXQgIT0gTWFwXy5lbmQoKSkgeworICAgIHJldHVybiAmaXQtPnNlY29uZDsKICAgfQogICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5TWFwLmggYi9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5oCmluZGV4IGJlYTQzNzIuLjVmYzQ2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVByb3BlcnR5TWFwLmgKKysrIGIvU291cmNlL2NtUHJvcGVydHlNYXAuaApAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgorCiAvKiogXGNsYXNzIGNtUHJvcGVydHlNYXAKICAqIFxicmllZiBTdHJpbmcgcHJvcGVydHkgbWFwLgogICovCkBAIC0zMSw3ICszMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKIAogICAvLyEgR2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZQotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgY21Qcm9wIEdldFByb3BlcnR5VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwogCiAgIC8vISBSZW1vdmUgdGhlIHByb3BlcnR5IEBhIG5hbWUgZnJvbSB0aGUgbWFwCiAgIHZvaWQgUmVtb3ZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUVRXcmFwQ1BQQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21RVFdyYXBDUFBDb21tYW5kLmN4eAppbmRleCBjYzRkZjhmLi43OTVjMmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21RVFdyYXBDUFBDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21RVFdyYXBDUFBDb21tYW5kLmN4eApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC0zOSw3ICs0MCw4IEBACiAgICAgICAgIGNtU3RyQ2F0KG1mLkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9tb2NfIiwgc3JjTmFtZSwgIi5jeHgiKTsKICAgICAgIGNtU291cmNlRmlsZSogc2YgPSBtZi5HZXRPckNyZWF0ZVNvdXJjZShuZXdOYW1lLCB0cnVlKTsKICAgICAgIGlmIChjdXJyKSB7Ci0gICAgICAgIHNmLT5TZXRQcm9wZXJ0eSgiQUJTVFJBQ1QiLCBjdXJyLT5HZXRQcm9wZXJ0eSgiQUJTVFJBQ1QiKSk7CisgICAgICAgIGNtUHJvcCBwID0gY3Vyci0+R2V0UHJvcGVydHkoIkFCU1RSQUNUIik7CisgICAgICAgIHNmLT5TZXRQcm9wZXJ0eSgiQUJTVFJBQ1QiLCBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHIpOwogICAgICAgfQogCiAgICAgICAvLyBDb21wdXRlIHRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgZnJvbSB3aGljaCB0byBnZW5lcmF0ZSB0aGUgZmlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVF0QXV0b0dlbi5jeHggYi9Tb3VyY2UvY21RdEF1dG9HZW4uY3h4CmluZGV4IGQ1ODkxYzQuLjU3ZmNkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVF0QXV0b0dlbi5jeHgKKysrIGIvU291cmNlL2NtUXRBdXRvR2VuLmN4eApAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbVByb2Nlc3NPdXRwdXQuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTU1LDcgKzU0LDcgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gVGVzdCBpZiB0aGlzIGlzIGEgdmFsdWUgb3B0aW9uIGFuZCBjaGFuZ2UgdGhlIGV4aXN0aW5nIHZhbHVlCi0gICAgICAgIGlmICghb3B0TmFtZS5lbXB0eSgpICYmIGNtQ29udGFpbnModmFsdWVPcHRzLCBvcHROYW1lKSkgeworICAgICAgICBpZiAoIW9wdE5hbWUuZW1wdHkoKSAmJiBjbTo6Y29udGFpbnModmFsdWVPcHRzLCBvcHROYW1lKSkgewogICAgICAgICAgIGNvbnN0IGF1dG8gZXhpc3RJdE5leHQoZXhpc3RJdCArIDEpOwogICAgICAgICAgIGNvbnN0IGF1dG8gZml0TmV4dChmaXQgKyAxKTsKICAgICAgICAgICBpZiAoKGV4aXN0SXROZXh0ICE9IGJhc2VPcHRzLmVuZCgpKSAmJiAoZml0TmV4dCAhPSBmaXRFbmQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5jeHggYi9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5jeHgKaW5kZXggN2E2Y2I0Mi4uZmFjMmJiZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyLmN4eApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzT3V0cHV0LmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUXRBdXRvR2VuLmgiCiAjaW5jbHVkZSAiY21RdEF1dG9HZW5Jbml0aWFsaXplci5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKQEAgLTQ5LDcgKzUwLDcgQEAKICAgICB7CiAgICAgICBjbU1ha2VmaWxlKiBtYWtlZmlsZSA9IGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpOwogICAgICAgLy8gRGV0ZWN0IGdsb2JhbCBhdXRvZ2VuIHRhcmdldCBuYW1lCi0gICAgICBpZiAoY21Jc09uKG1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUIikpKSB7CisgICAgICBpZiAobWFrZWZpbGUtPklzT24oIkNNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVCIpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUgPQogICAgICAgICAgIG1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUiKTsKICAgICAgICAgaWYgKHRhcmdldE5hbWUuZW1wdHkoKSkgewpAQCAtNjAsNyArNjEsNyBAQAogICAgICAgfQogCiAgICAgICAvLyBEZXRlY3QgZ2xvYmFsIGF1dG9yY2MgdGFyZ2V0IG5hbWUKLSAgICAgIGlmIChjbUlzT24obWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVQiKSkpIHsKKyAgICAgIGlmIChtYWtlZmlsZS0+SXNPbigiQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUIikpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSA9CiAgICAgICAgICAgbWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRfTkFNRSIpOwogICAgICAgICBpZiAodGFyZ2V0TmFtZS5lbXB0eSgpKSB7CkBAIC05NSwxMSArOTYsMTEgQEAKICAgICAgIGJvb2wgY29uc3QgdWljID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eUFzQm9vbChrdygpLkFVVE9VSUMpOwogICAgICAgYm9vbCBjb25zdCByY2MgPSB0YXJnZXQtPkdldFByb3BlcnR5QXNCb29sKGt3KCkuQVVUT1JDQyk7CiAgICAgICBpZiAobW9jIHx8IHVpYyB8fCByY2MpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgbW9jRXhlYyA9CisgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBtb2NFeGVjID0KICAgICAgICAgICB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eShrdygpLkFVVE9NT0NfRVhFQ1VUQUJMRSk7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHVpY0V4ZWMgPQorICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdWljRXhlYyA9CiAgICAgICAgICAgdGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoa3coKS5BVVRPVUlDX0VYRUNVVEFCTEUpOwotICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCByY2NFeGVjID0KKyAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHJjY0V4ZWMgPQogICAgICAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KGt3KCkuQVVUT1JDQ19FWEVDVVRBQkxFKTsKIAogICAgICAgICAvLyBXZSBzdXBwb3J0IFF0NCwgUXQ1IGFuZCBRdDYKQEAgLTE2NCwxMCArMTY1LDEwIEBACiAKICAgICAvLyBTZXQgRk9MREVSIHByb3BlcnR5IGluIHRoZSB0YXJnZXQKICAgICB7Ci0gICAgICBjaGFyIGNvbnN0KiBmb2xkZXIgPQorICAgICAgY21Qcm9wIGZvbGRlciA9CiAgICAgICAgIG1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiQVVUT0dFTl9UQVJHRVRTX0ZPTERFUiIpOwogICAgICAgaWYgKGZvbGRlciAhPSBudWxscHRyKSB7Ci0gICAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIkZPTERFUiIsIGZvbGRlcik7CisgICAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIkZPTERFUiIsICpmb2xkZXIpOwogICAgICAgfQogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvR2VuSW5pdGlhbGl6ZXIuY3h4IGIvU291cmNlL2NtUXRBdXRvR2VuSW5pdGlhbGl6ZXIuY3h4CmluZGV4IDYyOTM2N2QuLjIxOGJkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVF0QXV0b0dlbkluaXRpYWxpemVyLmN4eAorKysgYi9Tb3VyY2UvY21RdEF1dG9HZW5Jbml0aWFsaXplci5jeHgKQEAgLTE2LDEzICsxNiwxMyBAQAogI2luY2x1ZGUgPGNtL2FsZ29yaXRobT4KICNpbmNsdWRlIDxjbS9pdGVyYXRvcj4KICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3dyaXRlci5oPgogCiAjaW5jbHVkZSAiY21zeXMvU3lzdGVtSW5mb3JtYXRpb24uaHh4IgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgotI2luY2x1ZGUgImNtX2pzb25jcHBfd3JpdGVyLmgiCi0KLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmQuaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVF0QXV0b0dlbi5oIgogI2luY2x1ZGUgImNtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKQEAgLTMxNCwxMCArMzE1LDkgQEAKIHsKICAgLy8gQ29uZmlndXJhdGlvbnMKICAgdGhpcy0+TXVsdGlDb25maWcgPSB0aGlzLT5HbG9iYWxHZW4tPklzTXVsdGlDb25maWcoKTsKLSAgdGhpcy0+Q29uZmlnRGVmYXVsdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyh0aGlzLT5Db25maWdzTGlzdCk7Ci0gIGlmICh0aGlzLT5Db25maWdzTGlzdC5lbXB0eSgpKSB7Ci0gICAgdGhpcy0+Q29uZmlnc0xpc3QucHVzaF9iYWNrKHRoaXMtPkNvbmZpZ0RlZmF1bHQpOwotICB9CisgIHRoaXMtPkNvbmZpZ0RlZmF1bHQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKKyAgdGhpcy0+Q29uZmlnc0xpc3QgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gVmVyYm9zaXR5CiAgIHsKQEAgLTMzOSw3ICszMzksNyBAQAogCiAgIC8vIFRhcmdldHMgRk9MREVSCiAgIHsKLSAgICBjb25zdCBjaGFyKiBmb2xkZXIgPQorICAgIGNtUHJvcCBmb2xkZXIgPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJBVVRPTU9DX1RBUkdFVFNfRk9MREVSIik7CiAgICAgaWYgKGZvbGRlciA9PSBudWxscHRyKSB7CiAgICAgICBmb2xkZXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoCkBAIC0zNTAsNyArMzUwLDcgQEAKICAgICAgIGZvbGRlciA9IHRoaXMtPkdlblRhcmdldC0+R2V0UHJvcGVydHkoIkZPTERFUiIpOwogICAgIH0KICAgICBpZiAoZm9sZGVyICE9IG51bGxwdHIpIHsKLSAgICAgIHRoaXMtPlRhcmdldHNGb2xkZXIgPSBmb2xkZXI7CisgICAgICB0aGlzLT5UYXJnZXRzRm9sZGVyID0gKmZvbGRlcjsKICAgICB9CiAgIH0KIApAQCAtNDQwLDcgKzQ0MCw4IEBACiAKICAgICAvLyBBdXRvZ2VuIHRhcmdldCBwYXJhbGxlbCBwcm9jZXNzaW5nCiAgICAgewotICAgICAgc3RkOjpzdHJpbmcgcHJvcCA9IHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPR0VOX1BBUkFMTEVMIik7CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCA9CisgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPR0VOX1BBUkFMTEVMIik7CiAgICAgICBpZiAocHJvcC5lbXB0eSgpIHx8IChwcm9wID09ICJBVVRPIikpIHsKICAgICAgICAgLy8gQXV0b2RldGVjdCBudW1iZXIgb2YgQ1BVcwogICAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LlBhcmFsbGVsID0gR2V0UGFyYWxsZWxDUFVDb3VudCgpOwpAQCAtNDcxLDcgKzQ3Miw3IEBACiAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZE9yaWdpbiA9CiAgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIkFVVE9HRU5fT1JJR0lOX0RFUEVORFMiKTsKIAotICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZGVwcyA9CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVwcyA9CiAgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPR0VOX1RBUkdFVF9ERVBFTkRTIik7CiAgICAgICBpZiAoIWRlcHMuZW1wdHkoKSkgewogICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXBOYW1lIDogY21FeHBhbmRlZExpc3QoZGVwcykpIHsKQEAgLTQ4OCw3ICs0ODksNyBAQAogCiAgICAgaWYgKHRoaXMtPk1vYy5FbmFibGVkKSB7CiAgICAgICAvLyBQYXRoIHByZWZpeAotICAgICAgaWYgKGNtSXNPbih0aGlzLT5HZW5UYXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiQVVUT01PQ19QQVRIX1BSRUZJWCIpKSkgeworICAgICAgaWYgKGNtSXNPbih0aGlzLT5HZW5UYXJnZXQtPkdldFByb3BlcnR5KCJBVVRPTU9DX1BBVEhfUFJFRklYIikpKSB7CiAgICAgICAgIHRoaXMtPk1vYy5QYXRoUHJlZml4ID0gdHJ1ZTsKICAgICAgIH0KIApAQCAtNTY5LDkgKzU3MCw4IEBACiAgIGlmICh0aGlzLT5HZW5UYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJBVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMiKSAmJgogICAgICAgKHRoaXMtPlF0VmVyc2lvbiA+PSBJbnRlZ2VyVmVyc2lvbig1LCA4KSkpIHsKICAgICAvLyBDb21tYW5kCi0gICAgY21FeHBhbmRMaXN0KHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICAgICAiQ01BS0VfQ1hYX0NPTVBJTEVSX1BSRURFRklORVNfQ09NTUFORCIpLAotICAgICAgICAgICAgICAgICB0aGlzLT5Nb2MuUHJlZGVmc0NtZCk7CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0NYWF9DT01QSUxFUl9QUkVERUZJTkVTX0NPTU1BTkQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1vYy5QcmVkZWZzQ21kKTsKICAgICAvLyBIZWFkZXIKICAgICBpZiAoIXRoaXMtPk1vYy5QcmVkZWZzQ21kLmVtcHR5KCkpIHsKICAgICAgIENvbmZpZ0ZpbGVOYW1lcyh0aGlzLT5Nb2MuUHJlZGVmc0ZpbGUsCkBAIC02NTQsNyArNjU0LDcgQEAKIHsKICAgLy8gVWljIHNlYXJjaCBwYXRocwogICB7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QgdXNwID0KKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgdXNwID0KICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPVUlDX1NFQVJDSF9QQVRIUyIpOwogICAgIGlmICghdXNwLmVtcHR5KCkpIHsKICAgICAgIHRoaXMtPlVpYy5TZWFyY2hQYXRocyA9CkBAIC03ODgsOSArNzg4LDkgQEAKIAogICAgICAgLy8gUmVnaXN0ZXIgZmlsZXMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgYnkgbW9jIG9yIHVpYwogICAgICAgaWYgKHRoaXMtPk1vY09yVWljRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChjbS0+SXNIZWFkZXJFeHRlbnNpb24oZXh0TG93ZXIpKSB7CisgICAgICAgIGlmIChjbS0+SXNBSGVhZGVyRXh0ZW5zaW9uKGV4dExvd2VyKSkgewogICAgICAgICAgIGFkZE1VSGVhZGVyKG1ha2VNVUZpbGUoc2YsIGZ1bGxQYXRoLCB0cnVlKSwgZXh0TG93ZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjbS0+SXNBQ0xpa2VTb3VyY2VFeHRlbnNpb24oZXh0TG93ZXIpKSB7CiAgICAgICAgICAgYWRkTVVTb3VyY2UobWFrZU1VRmlsZShzZiwgZnVsbFBhdGgsIHRydWUpKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtODQ3LDcgKzg0Nyw3IEBACiAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTb3VyY2UoZnVsbFBhdGgsIGxvY2F0aW9uS2luZCk7CiAgICAgICAgICAgICBpZiAoc2YgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBrbm93IGFib3V0IHRoaXMgaGVhZGVyIGFscmVhZHkKLSAgICAgICAgICAgICAgaWYgKGNtQ29udGFpbnModGhpcy0+QXV0b2dlblRhcmdldC5IZWFkZXJzLCBzZikpIHsKKyAgICAgICAgICAgICAgaWYgKGNtOjpjb250YWlucyh0aGlzLT5BdXRvZ2VuVGFyZ2V0LkhlYWRlcnMsIHNmKSkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWNjZXB0IG5vdC1HRU5FUkFURUQgZmlsZXMgdGhhdCBkbyBleGlzdC4KQEAgLTg5NCwxNSArODk0LDE1IEBACiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZXh0TG93ZXIgPQogICAgICAgICBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc2YtPkdldEV4dGVuc2lvbigpKTsKIAotICAgICAgaWYgKGNtLT5Jc0hlYWRlckV4dGVuc2lvbihleHRMb3dlcikpIHsKLSAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycywgc2YuZ2V0KCkpKSB7CisgICAgICBpZiAoY20tPklzQUhlYWRlckV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+QXV0b2dlblRhcmdldC5IZWFkZXJzLCBzZi5nZXQoKSkpIHsKICAgICAgICAgICBhdXRvIG11ZiA9IG1ha2VNVUZpbGUoc2YuZ2V0KCksIGZ1bGxQYXRoLCBmYWxzZSk7CiAgICAgICAgICAgaWYgKG11Zi0+U2tpcE1vYyB8fCBtdWYtPlNraXBVaWMpIHsKICAgICAgICAgICAgIGFkZE1VSGVhZGVyKHN0ZDo6bW92ZShtdWYpLCBleHRMb3dlcik7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHRMb3dlcikpIHsKLSAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkF1dG9nZW5UYXJnZXQuU291cmNlcywgc2YuZ2V0KCkpKSB7CisgICAgICB9IGVsc2UgaWYgKGNtLT5Jc0FDTGlrZVNvdXJjZUV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+QXV0b2dlblRhcmdldC5Tb3VyY2VzLCBzZi5nZXQoKSkpIHsKICAgICAgICAgICBhdXRvIG11ZiA9IG1ha2VNVUZpbGUoc2YuZ2V0KCksIGZ1bGxQYXRoLCBmYWxzZSk7CiAgICAgICAgICAgaWYgKG11Zi0+U2tpcE1vYyB8fCBtdWYtPlNraXBVaWMpIHsKICAgICAgICAgICAgIGFkZE1VU291cmNlKHN0ZDo6bW92ZShtdWYpKTsKQEAgLTEwOTQsNiArMTA5NCw3IEBACiAgIC8vIG9mIGZpZGRsaW5nIHdpdGggdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7CiAgIHRoaXMtPkdsb2JhbEdlbi0+R2V0UXRBdXRvR2VuQ29uZmlncyhjb25maWdzKTsKKyAgYm9vbCBzdGRQaXBlc1VURjggPSB0cnVlOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXM7CiAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgewogICAgIGNvbW1hbmRMaW5lcy5wdXNoX2JhY2soY21NYWtlQ29tbWFuZExpbmUoCkBAIC0xMTM4LDcgKzExMzksNyBAQAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19kZXBzOwogICAgIGNtQ3VzdG9tQ29tbWFuZCBjYyhub19vdXRwdXQsIGF1dG9nZW5Qcm92aWRlcywgbm9fZGVwcywgY29tbWFuZExpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCksIGF1dG9nZW5Db21tZW50LmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5EaXIuV29yay5jX3N0cigpLCBzdGRQaXBlc1VURjgpOwogICAgIGNjLlNldEVzY2FwZU9sZFN0eWxlKGZhbHNlKTsKICAgICBjYy5TZXRFc2NhcGVBbGxvd01ha2VWYXJzKHRydWUpOwogICAgIHRoaXMtPkdlblRhcmdldC0+VGFyZ2V0LT5BZGRQcmVCdWlsZENvbW1hbmQoc3RkOjptb3ZlKGNjKSk7CkBAIC0xMjA4LDcgKzEyMDksOCBAQAogICAgICAgICBhdXRvZ2VuQ29tbWVudC5jX3N0cigpLCB0aGlzLT5EaXIuV29yay5jX3N0cigpLCAvKnJlcGxhY2U9Ki9mYWxzZSwKICAgICAgICAgLyplc2NhcGVPbGRTdHlsZT0qL2ZhbHNlLAogICAgICAgICAvKnVzZXNfdGVybWluYWw9Ki9mYWxzZSwKLSAgICAgICAgLypjb21tYW5kX2V4cGFuZF9saXN0cz0qL2ZhbHNlLCB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcEZpbGUpOworICAgICAgICAvKmNvbW1hbmRfZXhwYW5kX2xpc3RzPSovZmFsc2UsIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwRmlsZSwgIiIsCisgICAgICAgIHN0ZFBpcGVzVVRGOCk7CiAKICAgICAgIC8vIEFsdGVyIHZhcmlhYmxlcyBmb3IgdGhlIGF1dG9nZW4gdGFyZ2V0IHdoaWNoIG5vdyBtZXJlbHkgd3JhcHMgdGhlCiAgICAgICAvLyBjdXN0b20gY29tbWFuZApAQCAtMTI3OSw2ICsxMjgxLDcgQEAKICAgICBjY0RlcGVuZHMucHVzaF9iYWNrKHFyYy5RcmNGaWxlKTsKICAgICBjY0RlcGVuZHMucHVzaF9iYWNrKHFyYy5JbmZvRmlsZSk7CiAKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IHRydWU7CiAgICAgY21DdXN0b21Db21tYW5kTGluZXMgY29tbWFuZExpbmVzOwogICAgIGlmICh0aGlzLT5NdWx0aUNvbmZpZykgewogICAgICAgLy8gQnVpbGQgZm9yIGFsbCBjb25maWd1cmF0aW9ucwpAQCAtMTMwNyw3ICsxMzEwLDggQEAKIAogICAgICAgICBjbVRhcmdldCogYXV0b1JjY1RhcmdldCA9IHRoaXMtPkxvY2FsR2VuLT5BZGRVdGlsaXR5Q29tbWFuZCgKICAgICAgICAgICBjY05hbWUsIHRydWUsIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIGNjT3V0cHV0LCBjY0RlcGVuZHMsCi0gICAgICAgICAgY29tbWFuZExpbmVzLCBmYWxzZSwgY2NDb21tZW50LmNfc3RyKCkpOworICAgICAgICAgIGNvbW1hbmRMaW5lcywgZmFsc2UsIGNjQ29tbWVudC5jX3N0cigpLCBmYWxzZSwgZmFsc2UsICIiLAorICAgICAgICAgIHN0ZFBpcGVzVVRGOCk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGF1dG9nZW4gZ2VuZXJhdG9yIHRhcmdldAogICAgICAgICB0aGlzLT5Mb2NhbEdlbi0+QWRkR2VuZXJhdG9yVGFyZ2V0KApAQCAtMTM0Nyw3ICsxMzUxLDggQEAKICAgICAgICAgdGhpcy0+TG9jYWxHZW4tPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKICAgICAgICAgICBjY091dHB1dCwgY2NCeXByb2R1Y3RzLCBjY0RlcGVuZHMsIG5vX21haW5fZGVwZW5kZW5jeSwKICAgICAgICAgICBub19pbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsIGNjQ29tbWVudC5jX3N0cigpLAotICAgICAgICAgIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCkpOworICAgICAgICAgIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsICIiLCAiIiwKKyAgICAgICAgICBzdGRQaXBlc1VURjgpOwogICAgICAgfQogICAgICAgLy8gUmVjb25maWd1cmUgd2hlbiAucXJjIGZpbGUgY2hhbmdlcwogICAgICAgdGhpcy0+TWFrZWZpbGUtPkFkZENNYWtlRGVwZW5kRmlsZShxcmMuUXJjRmlsZSk7CkBAIC0xNjA0LDEwICsxNjA5LDkgQEAKICAgICAgICAgY21TdHJDYXQoZ2VuTmFtZVVwcGVyLCAiX1NPVVJDRV9HUk9VUCIpLCAiQVVUT0dFTl9TT1VSQ0VfR1JPVVAiCiAgICAgICB9OwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCA6IHByb3BzKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHByb3BOYW1lID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcCk7Ci0gICAgICAgIGlmICgocHJvcE5hbWUgIT0gbnVsbHB0cikgJiYgKCpwcm9wTmFtZSAhPSAnXDAnKSkgewotICAgICAgICAgIGdyb3VwTmFtZSA9IHByb3BOYW1lOworICAgICAgICBjbVByb3AgcHJvcE5hbWUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcCk7CisgICAgICAgIGlmIChjbU5vbmVtcHR5KHByb3BOYW1lKSkgeworICAgICAgICAgIGdyb3VwTmFtZSA9ICpwcm9wTmFtZTsKICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3A7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE2NjgsNiArMTY3MiwxMyBAQAogICAgIH0KICAgICByZXR1cm4gMHU7CiAgIH07CisgIGF1dG8gdG9VSW50MiA9IFtdKGNtUHJvcCBpbnB1dCkgLT4gdW5zaWduZWQgaW50IHsKKyAgICB1bnNpZ25lZCBsb25nIHRtcCA9IDA7CisgICAgaWYgKGlucHV0ICE9IG51bGxwdHIgJiYgY21TdHJUb1VMb25nKCppbnB1dCwgJnRtcCkpIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHRtcCk7CisgICAgfQorICAgIHJldHVybiAwdTsKKyAgfTsKIAogICAvLyBJbml0aWFsaXplIHJldHVybiB2YWx1ZSB0byBhIGRlZmF1bHQKICAgc3RkOjpwYWlyPEludGVnZXJWZXJzaW9uLCB1bnNpZ25lZCBpbnQ+IHJlcygKQEAgLTE2ODksOSArMTcwMCw5IEBACiAgICAga25vd25RdFZlcnNpb25zLnJlc2VydmUoa2V5cy5zaXplKCkgKiAyKTsKIAogICAgIC8vIEFkZHMgYSB2ZXJzaW9uIHRvIHRoZSByZXN1bHQgKG51bGxwdHIgc2FmZSkKLSAgICBhdXRvIGFkZFZlcnNpb24gPSBbJmtub3duUXRWZXJzaW9ucywgJnRvVUludF0oY29uc3QgY2hhciogbWFqb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1pbm9yKSB7Ci0gICAgICBjbVF0QXV0b0dlbjo6SW50ZWdlclZlcnNpb24gdmVyKHRvVUludChtYWpvciksIHRvVUludChtaW5vcikpOworICAgIGF1dG8gYWRkVmVyc2lvbiA9IFsma25vd25RdFZlcnNpb25zLCAmdG9VSW50Ml0oY21Qcm9wIG1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wIG1pbm9yKSB7CisgICAgICBjbVF0QXV0b0dlbjo6SW50ZWdlclZlcnNpb24gdmVyKHRvVUludDIobWFqb3IpLCB0b1VJbnQyKG1pbm9yKSk7CiAgICAgICBpZiAodmVyLk1ham9yICE9IDApIHsKICAgICAgICAga25vd25RdFZlcnNpb25zLmVtcGxhY2VfYmFjayh2ZXIpOwogICAgICAgfQpAQCAtMTY5OSw4ICsxNzEwLDggQEAKIAogICAgIC8vIFJlYWQgdmVyc2lvbnMgZnJvbSB2YXJpYWJsZXMKICAgICBmb3IgKGF1dG8gY29uc3QmIGtleVBhaXIgOiBrZXlzKSB7Ci0gICAgICBhZGRWZXJzaW9uKHRhcmdldC0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oc3RkOjpzdHJpbmcoa2V5UGFpci5maXJzdCkpLAotICAgICAgICAgICAgICAgICB0YXJnZXQtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHN0ZDo6c3RyaW5nKGtleVBhaXIuc2Vjb25kKSkpOworICAgICAgYWRkVmVyc2lvbih0YXJnZXQtPk1ha2VmaWxlLT5HZXREZWYoc3RkOjpzdHJpbmcoa2V5UGFpci5maXJzdCkpLAorICAgICAgICAgICAgICAgICB0YXJnZXQtPk1ha2VmaWxlLT5HZXREZWYoc3RkOjpzdHJpbmcoa2V5UGFpci5zZWNvbmQpKSk7CiAgICAgfQogCiAgICAgLy8gUmVhZCB2ZXJzaW9ucyBmcm9tIGRpcmVjdG9yeSBwcm9wZXJ0aWVzCkBAIC0xNzgzLDcgKzE3OTQsNyBAQAogICAvLyBDdXN0b20gZXhlY3V0YWJsZQogICB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QgcHJvcCA9IGNtU3RyQ2F0KGdlblZhcnMuR2VuTmFtZVVwcGVyLCAiX0VYRUNVVEFCTEUiKTsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCB2YWwgPSB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+R2V0U2FmZVByb3BlcnR5KHByb3ApOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWwgPSB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+R2V0U2FmZVByb3BlcnR5KHByb3ApOwogICAgIGlmICghdmFsLmVtcHR5KCkpIHsKICAgICAgIC8vIEV2YWx1YXRlIGdlbmVyYXRvciBleHByZXNzaW9uCiAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9HZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtUXRBdXRvR2VuZXJhdG9yLmN4eAppbmRleCBkYTk2MzA1Li5lZTJiYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21RdEF1dG9HZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbVF0QXV0b0dlbmVyYXRvci5jeHgKQEAgLTIsOSArMiw5IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbVF0QXV0b0dlbmVyYXRvci5oIgogCi0jaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3JlYWRlci5oPgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogI2luY2x1ZGUgImNtUXRBdXRvR2VuLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9HZW5lcmF0b3IuaCBiL1NvdXJjZS9jbVF0QXV0b0dlbmVyYXRvci5oCmluZGV4IGJiZTZkZDAuLjgzZmIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVF0QXV0b0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbVF0QXV0b0dlbmVyYXRvci5oCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogI2luY2x1ZGUgImNtRmlsZVRpbWUuaCIKICNpbmNsdWRlICJjbVF0QXV0b0dlbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvTW9jVWljLmN4eCBiL1NvdXJjZS9jbVF0QXV0b01vY1VpYy5jeHgKaW5kZXggODkzYmQ2Yi4uOWFkY2FiYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvTW9jVWljLmN4eAorKysgYi9Tb3VyY2UvY21RdEF1dG9Nb2NVaWMuY3h4CkBAIC0xOCwxMSArMTgsMTEgQEAKICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KICNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKwogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLQogI2luY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgogI2luY2x1ZGUgImNtRmlsZVRpbWUuaCIKICNpbmNsdWRlICJjbUdjY0RlcGZpbGVSZWFkZXIuaCIKQEAgLTcwMCwyNyArNzAwLDI3IEBACiAgIGlmICghb2ZzKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIG9mcyA8PCAiIyBHZW5lcmF0ZWQgYnkgQ01ha2UuIENoYW5nZXMgd2lsbCBiZSBvdmVyd3JpdHRlbi4iIDw8IHN0ZDo6ZW5kbDsKKyAgb2ZzIDw8ICIjIEdlbmVyYXRlZCBieSBDTWFrZS4gQ2hhbmdlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIjsKICAgZm9yIChhdXRvIGNvbnN0JiBwYWlyIDogTWFwXykgewotICAgIG9mcyA8PCBwYWlyLmZpcnN0IDw8IHN0ZDo6ZW5kbDsKKyAgICBvZnMgPDwgcGFpci5maXJzdCA8PCAnXG4nOwogICAgIEZpbGVUIGNvbnN0JiBmaWxlID0gKnBhaXIuc2Vjb25kOwogICAgIGlmICghZmlsZS5Nb2MuTWFjcm8uZW1wdHkoKSkgewotICAgICAgb2ZzIDw8ICIgbW1jOiIgPDwgZmlsZS5Nb2MuTWFjcm8gPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgbW1jOiIgPDwgZmlsZS5Nb2MuTWFjcm8gPDwgJ1xuJzsKICAgICB9CiAgICAgZm9yIChJbmNsdWRlS2V5VCBjb25zdCYgaXRlbSA6IGZpbGUuTW9jLkluY2x1ZGUuVW5kZXJzY29yZSkgewotICAgICAgb2ZzIDw8ICIgbWl1OiIgPDwgaXRlbS5LZXkgPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgbWl1OiIgPDwgaXRlbS5LZXkgPDwgJ1xuJzsKICAgICB9CiAgICAgZm9yIChJbmNsdWRlS2V5VCBjb25zdCYgaXRlbSA6IGZpbGUuTW9jLkluY2x1ZGUuRG90KSB7Ci0gICAgICBvZnMgPDwgIiBtaWQ6IiA8PCBpdGVtLktleSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiBtaWQ6IiA8PCBpdGVtLktleSA8PCAnXG4nOwogICAgIH0KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtIDogZmlsZS5Nb2MuRGVwZW5kcykgewotICAgICAgb2ZzIDw8ICIgbWRwOiIgPDwgaXRlbSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiBtZHA6IiA8PCBpdGVtIDw8ICdcbic7CiAgICAgfQogICAgIGZvciAoSW5jbHVkZUtleVQgY29uc3QmIGl0ZW0gOiBmaWxlLlVpYy5JbmNsdWRlKSB7Ci0gICAgICBvZnMgPDwgIiB1aWM6IiA8PCBpdGVtLktleSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiB1aWM6IiA8PCBpdGVtLktleSA8PCAnXG4nOwogICAgIH0KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtIDogZmlsZS5VaWMuRGVwZW5kcykgewotICAgICAgb2ZzIDw8ICIgdWRwOiIgPDwgaXRlbSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiB1ZHA6IiA8PCBpdGVtIDw8ICdcbic7CiAgICAgfQogICB9CiAgIHJldHVybiBvZnMuQ2xvc2UoKTsKQEAgLTIyMTEsOSArMjIxMSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgIiBmb3Igd3JpdGluZy4iKSk7CiAgICAgcmV0dXJuOwogICB9Ci0gIG9mcyA8PCBCYXNlQ29uc3QoKS5EZXBGaWxlUnVsZU5hbWUgPDwgIjogXFwiIDw8IHN0ZDo6ZW5kbDsKKyAgb2ZzIDw8IEJhc2VDb25zdCgpLkRlcEZpbGVSdWxlTmFtZSA8PCAiOiBcXFxuIjsKICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSA6IGRlcGVuZGVuY2llcykgewotICAgIG9mcyA8PCAnXHQnIDw8IGVzY2FwZURlcGVuZGVuY3lQYXRoKGZpbGUpIDw8ICIgXFwiIDw8IHN0ZDo6ZW5kbDsKKyAgICBvZnMgPDwgJ1x0JyA8PCBlc2NhcGVEZXBlbmRlbmN5UGF0aChmaWxlKSA8PCAiIFxcXG4iOwogICAgIGlmICghb2ZzLmdvb2QoKSkgewogICAgICAgTG9nRXJyb3IoR2VuVDo6R0VOLAogICAgICAgICAgICAgICAgY21TdHJDYXQoIldyaXRpbmcgZGVwZmlsZSIsIE1lc3NhZ2VQYXRoKEJhc2VDb25zdCgpLkRlcEZpbGUpLApAQCAtMjIyNCw4ICsyMjI0LDcgQEAKIAogICAvLyBBZGQgdGhlIENNYWtlIGV4ZWN1dGFibGUgdG8gcmUtbmV3IGNhY2hlIGRhdGEgaWYgbmVjZXNzYXJ5LgogICAvLyBBbHNvLCB0aGlzIGlzIHRoZSBsYXN0IGVudHJ5LCBzbyBkb24ndCBhZGQgYSBiYWNrc2xhc2guCi0gIG9mcyA8PCAnXHQnIDw8IGVzY2FwZURlcGVuZGVuY3lQYXRoKEJhc2VDb25zdCgpLkNNYWtlRXhlY3V0YWJsZSkKLSAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgb2ZzIDw8ICdcdCcgPDwgZXNjYXBlRGVwZW5kZW5jeVBhdGgoQmFzZUNvbnN0KCkuQ01ha2VFeGVjdXRhYmxlKSA8PCAnXG4nOwogfQogCiB2b2lkIGNtUXRBdXRvTW9jVWljVDo6Sm9iRmluaXNoVDo6UHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21SU1QuY3h4IGIvU291cmNlL2NtUlNULmN4eAppbmRleCA3ZjRhYmY5Li4yNmU5M2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21SU1QuY3h4CisrKyBiL1NvdXJjZS9jbVJTVC5jeHgKQEAgLTg5LDcgKzg5LDggQEAKICAgICAgICAgdGhpcy0+UHJvY2Vzc0xpbmUobGluZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAobGluZVswXSAhPSAnIycpIHsKLSAgICAgICAgICB0aGlzLT5Qcm9jZXNzTGluZShsaW5lLnN1YnN0cigwLCBwb3MpKTsKKyAgICAgICAgICBsaW5lLnJlc2l6ZShwb3MpOworICAgICAgICAgIHRoaXMtPlByb2Nlc3NMaW5lKGxpbmUpOwogICAgICAgICB9CiAgICAgICAgIHJzdC5jbGVhcigpOwogICAgICAgICB0aGlzLT5SZXNldCgpOwpAQCAtMTAyLDggKzEwMyw5IEBACiAgICAgICAgICAgdGhpcy0+UHJvY2Vzc0xpbmUoIiIpOwogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5lLnN1YnN0cigwLCAyKSA9PSAiIyAiKSB7Ci0gICAgICAgICAgdGhpcy0+UHJvY2Vzc0xpbmUobGluZS5zdWJzdHIoMikpOworICAgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxpbmUsICIjICIpKSB7CisgICAgICAgICAgbGluZS5lcmFzZSgwLCAyKTsKKyAgICAgICAgICB0aGlzLT5Qcm9jZXNzTGluZShsaW5lKTsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICByc3QuY2xlYXIoKTsKQEAgLTE2NCw2ICsxNjYsOCBAQAogICAgIHRoaXMtPk1hcmt1cCA9CiAgICAgICAobGluZS5maW5kX2ZpcnN0X25vdF9vZigiIFx0IiwgMikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBNYXJrdXBFbXB0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTWFya3VwTm9ybWFsKTsKKyAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgaWYgKHRoaXMtPkNNYWtlRGlyZWN0aXZlLmZpbmQobGluZSkpIHsKICAgICAgIC8vIE91dHB1dCBjbWFrZSBkb21haW4gZGlyZWN0aXZlcyBhbmQgdGhlaXIgY29udGVudCBub3JtYWxseS4KICAgICAgIHRoaXMtPk5vcm1hbExpbmUobGluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5jeHggYi9Tb3VyY2UvY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5jeHgKaW5kZXggNWFiMWIzYS4uMjU0MTMxYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuY3h4CisrKyBiL1NvdXJjZS9jbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmN4eApAQCAtMjM2LDggKzIzNiw3IEBACiAgIH0KICAgaWYgKHZhcmlhYmxlID09ICJDTUFLRV9DT01NQU5EIikgewogICAgIHJldHVybiBvdXRwdXRDb252ZXJ0ZXItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCkpLAotICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICB9CiAKICAgYXV0byBjb21wSXQgPSB0aGlzLT5Db21waWxlcnMuZmluZCh2YXJpYWJsZSk7CkBAIC0zMzQsNyArMzMzLDE3IEBACiAgICAgICBzdGQ6OnN0cmluZyByZXBsYWNlID0KICAgICAgICAgdGhpcy0+RXhwYW5kUnVsZVZhcmlhYmxlKG91dHB1dENvbnZlcnRlciwgdmFyLCByZXBsYWNlVmFsdWVzKTsKICAgICAgIGV4cGFuZGVkSW5wdXQgKz0gcy5zdWJzdHIocG9zLCBzdGFydCAtIHBvcyk7CisKKyAgICAgIC8vIFByZXZlbnQgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBpbiB0aGUgb3V0cHV0IGlmIHRoZSBydWxlIHZhcmlhYmxlCisgICAgICAvLyBleHBhbmRzIHRvIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgIGJvb2wgY29uc2VjdXRpdmUgPSByZXBsYWNlLmVtcHR5KCkgJiYgc3RhcnQgPiAwICYmIHNbc3RhcnQgLSAxXSA9PSAnICcgJiYKKyAgICAgICAgZW5kICsgMSA8IHMuc2l6ZSgpICYmIHNbZW5kICsgMV0gPT0gJyAnOworICAgICAgaWYgKGNvbnNlY3V0aXZlKSB7CisgICAgICAgIGV4cGFuZGVkSW5wdXQucG9wX2JhY2soKTsKKyAgICAgIH0KKwogICAgICAgZXhwYW5kZWRJbnB1dCArPSByZXBsYWNlOworCiAgICAgICAvLyBtb3ZlIHRvIG5leHQgb25lCiAgICAgICBzdGFydCA9IHMuZmluZCgnPCcsIHN0YXJ0ICsgdmFyLnNpemUoKSArIDIpOwogICAgICAgcG9zID0gZW5kICsgMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVJ1bnRpbWVEZXBlbmRlbmN5QXJjaGl2ZS5jeHggYi9Tb3VyY2UvY21SdW50aW1lRGVwZW5kZW5jeUFyY2hpdmUuY3h4CmluZGV4IDdhOTg3YzIuLjA3ODFkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVJ1bnRpbWVEZXBlbmRlbmN5QXJjaGl2ZS5jeHgKKysrIGIvU291cmNlL2NtUnVudGltZURlcGVuZGVuY3lBcmNoaXZlLmN4eApAQCAtMzksNyArMzksNyBAQAogICBzdGQ6OnN0cmluZyB2c2xvYzsKICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogIyAgaWZuZGVmIENNQUtFX0JPT1RTVFJBUAotICBpZiAoZ2ctPkdldE5hbWUoKS5maW5kKHByZWZpeCkgPT0gMCkgeworICBpZiAoY21IYXNQcmVmaXgoZ2ctPkdldE5hbWUoKSwgcHJlZml4KSkgewogICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKiB2c2dlbiA9CiAgICAgICBzdGF0aWNfY2FzdDxjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcio+KGdnKTsKICAgICBpZiAodnNnZW4tPkdldFZTSW5zdGFuY2UodnNsb2MpKSB7CkBAIC0yMTgsNiArMjE4LDkgQEAKICAgLy8gRmlyc3Qgc2VlIGlmIGl0IHdhcyBzdXBwbGllZCBieSB0aGUgdXNlcgogICBzdGQ6OnN0cmluZyB0b29sQ29tbWFuZCA9IHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKAogICAgICJDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORCIpOworICBpZiAodG9vbENvbW1hbmQuZW1wdHkoKSAmJiBzZWFyY2ggPT0gIm9iamR1bXAiKSB7CisgICAgdG9vbENvbW1hbmQgPSB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfT0JKRFVNUCIpOworICB9CiAgIGlmICghdG9vbENvbW1hbmQuZW1wdHkoKSkgewogICAgIGNtRXhwYW5kTGlzdCh0b29sQ29tbWFuZCwgY29tbWFuZCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXBhcmF0ZUFyZ3VtZW50c0NvbW1hbmQuY3h4IGIvU291cmNlL2NtU2VwYXJhdGVBcmd1bWVudHNDb21tYW5kLmN4eAppbmRleCA1MmJkZTdjLi5jZmUzMDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXBhcmF0ZUFyZ3VtZW50c0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNlcGFyYXRlQXJndW1lbnRzQ29tbWFuZC5jeHgKQEAgLTM5LDYgKzM5LDggQEAKICAgICBpZiAoZG9pbmcgPT0gRG9pbmdWYXJpYWJsZSkgewogICAgICAgdmFyID0gYXJnOwogICAgICAgZG9pbmcgPSBEb2luZ01vZGU7CisgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGNsb25lIG9uZSBvZiB0aGUgb3RoZXIgYmxvY2tzLgorICAgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtYnJhbmNoLWNsb25lKQogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdNb2RlICYmIGFyZyA9PSAiTkFUSVZFX0NPTU1BTkQiKSB7CiAjaWZkZWYgX1dJTjMyCiAgICAgICBtb2RlID0gTW9kZVdpbmRvd3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXJ2ZXIuY3h4IGIvU291cmNlL2NtU2VydmVyLmN4eAppbmRleCAzYjJlNWYzLi43Zjk3NDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXJ2ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVNlcnZlci5jeHgKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc2lnbmFsPgogI2luY2x1ZGUgPGNzdGRpbnQ+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8bXV0ZXg+CkBAIC0xMiwxMCArMTMsMTAgQEAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc2hhcmVkX211dGV4PgogCi0jaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3JlYWRlci5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogI2luY2x1ZGUgImNtQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgImNtRmlsZU1vbml0b3IuaCIKQEAgLTU5LDE2ICs2MCwxMiBAQAogICAsIFN1cHBvcnRFeHBlcmltZW50YWwoc3VwcG9ydEV4cGVyaW1lbnRhbCkKIHsKICAgLy8gUmVnaXN0ZXIgc3VwcG9ydGVkIHByb3RvY29sczoKLSAgdGhpcy0+UmVnaXN0ZXJQcm90b2NvbChuZXcgY21TZXJ2ZXJQcm90b2NvbDEpOworICB0aGlzLT5SZWdpc3RlclByb3RvY29sKGNtOjptYWtlX3VuaXF1ZTxjbVNlcnZlclByb3RvY29sMT4oKSk7CiB9CiAKIGNtU2VydmVyOjp+Y21TZXJ2ZXIoKQogewogICBDbG9zZSgpOwotCi0gIGZvciAoY21TZXJ2ZXJQcm90b2NvbCogcCA6IHRoaXMtPlN1cHBvcnRlZFByb3RvY29scykgewotICAgIGRlbGV0ZSBwOwotICB9CiB9CiAKIHZvaWQgY21TZXJ2ZXI6OlByb2Nlc3NSZXF1ZXN0KGNtQ29ubmVjdGlvbiogY29ubmVjdGlvbiwKQEAgLTExNywyMiArMTE0LDIyIEBACiAgIH0KIH0KIAotdm9pZCBjbVNlcnZlcjo6UmVnaXN0ZXJQcm90b2NvbChjbVNlcnZlclByb3RvY29sKiBwcm90b2NvbCkKK3ZvaWQgY21TZXJ2ZXI6OlJlZ2lzdGVyUHJvdG9jb2woc3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+IHByb3RvY29sKQogewogICBpZiAocHJvdG9jb2wtPklzRXhwZXJpbWVudGFsKCkgJiYgIXRoaXMtPlN1cHBvcnRFeHBlcmltZW50YWwpIHsKLSAgICBkZWxldGUgcHJvdG9jb2w7CisgICAgcHJvdG9jb2wucmVzZXQoKTsKICAgICByZXR1cm47CiAgIH0KICAgYXV0byB2ZXJzaW9uID0gcHJvdG9jb2wtPlByb3RvY29sVmVyc2lvbigpOwogICBhc3NlcnQodmVyc2lvbi5maXJzdCA+PSAwKTsKICAgYXNzZXJ0KHZlcnNpb24uc2Vjb25kID49IDApOwotICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbdmVyc2lvbl0oY21TZXJ2ZXJQcm90b2NvbCogcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAtPlByb3RvY29sVmVyc2lvbigpID09IHZlcnNpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYoCisgICAgdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLmJlZ2luKCksIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5lbmQoKSwKKyAgICBbdmVyc2lvbl0oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+JiBwKSB7CisgICAgICByZXR1cm4gcC0+UHJvdG9jb2xWZXJzaW9uKCkgPT0gdmVyc2lvbjsKKyAgICB9KTsKICAgaWYgKGl0ID09IHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5lbmQoKSkgewotICAgIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5wdXNoX2JhY2socHJvdG9jb2wpOworICAgIHRoaXMtPlN1cHBvcnRlZFByb3RvY29scy5wdXNoX2JhY2soc3RkOjptb3ZlKHByb3RvY29sKSk7CiAgIH0KIH0KIApAQCAtMjk3LDE5ICsyOTQsMjAgQEAKIH0KIAogY21TZXJ2ZXJQcm90b2NvbCogY21TZXJ2ZXI6OkZpbmRNYXRjaGluZ1Byb3RvY29sKAotICBjb25zdCBzdGQ6OnZlY3RvcjxjbVNlcnZlclByb3RvY29sKj4mIHByb3RvY29scywgaW50IG1ham9yLCBpbnQgbWlub3IpCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVNlcnZlclByb3RvY29sPj4mIHByb3RvY29scywgaW50IG1ham9yLAorICBpbnQgbWlub3IpCiB7CiAgIGNtU2VydmVyUHJvdG9jb2wqIGJlc3RNYXRjaCA9IG51bGxwdHI7Ci0gIGZvciAoYXV0byBwcm90b2NvbCA6IHByb3RvY29scykgeworICBmb3IgKGNvbnN0IGF1dG8mIHByb3RvY29sIDogcHJvdG9jb2xzKSB7CiAgICAgYXV0byB2ZXJzaW9uID0gcHJvdG9jb2wtPlByb3RvY29sVmVyc2lvbigpOwogICAgIGlmIChtYWpvciAhPSB2ZXJzaW9uLmZpcnN0KSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgaWYgKG1pbm9yID09IHZlcnNpb24uc2Vjb25kKSB7Ci0gICAgICByZXR1cm4gcHJvdG9jb2w7CisgICAgICByZXR1cm4gcHJvdG9jb2wuZ2V0KCk7CiAgICAgfQogICAgIGlmICghYmVzdE1hdGNoIHx8IGJlc3RNYXRjaC0+UHJvdG9jb2xWZXJzaW9uKCkuc2Vjb25kIDwgdmVyc2lvbi5zZWNvbmQpIHsKLSAgICAgIGJlc3RNYXRjaCA9IHByb3RvY29sOworICAgICAgYmVzdE1hdGNoID0gcHJvdG9jb2wuZ2V0KCk7CiAgICAgfQogICB9CiAgIHJldHVybiBtaW5vciA8IDAgPyBiZXN0TWF0Y2ggOiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2VydmVyLmggYi9Tb3VyY2UvY21TZXJ2ZXIuaAppbmRleCAzZDcwMjdiLi45NTQzMzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXJ2ZXIuaAorKysgYi9Tb3VyY2UvY21TZXJ2ZXIuaApAQCAtMTAsOCArMTAsOCBAQAogCiAjaW5jbHVkZSA8Y20vc2hhcmVkX211dGV4PgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgogCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgY21GaWxlTW9uaXRvciogRmlsZU1vbml0b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgdm9pZCBSZWdpc3RlclByb3RvY29sKGNtU2VydmVyUHJvdG9jb2wqIHByb3RvY29sKTsKKyAgdm9pZCBSZWdpc3RlclByb3RvY29sKHN0ZDo6dW5pcXVlX3B0cjxjbVNlcnZlclByb3RvY29sPiBwcm90b2NvbCk7CiAKICAgLy8gQ2FsbGJhY2tzIGZyb20gY21TZXJ2ZXJDb25uZWN0aW9uOgogCkBAIC0xNDksMTIgKzE0OSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZWJ1Z0luZm8qIGRlYnVnKSBjb25zdDsKIAogICBzdGF0aWMgY21TZXJ2ZXJQcm90b2NvbCogRmluZE1hdGNoaW5nUHJvdG9jb2woCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21TZXJ2ZXJQcm90b2NvbCo+JiBwcm90b2NvbHMsIGludCBtYWpvciwgaW50IG1pbm9yKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21TZXJ2ZXJQcm90b2NvbD4+JiBwcm90b2NvbHMsIGludCBtYWpvciwKKyAgICBpbnQgbWlub3IpOwogCiAgIGNvbnN0IGJvb2wgU3VwcG9ydEV4cGVyaW1lbnRhbDsKIAogICBjbVNlcnZlclByb3RvY29sKiBQcm90b2NvbCA9IG51bGxwdHI7Ci0gIHN0ZDo6dmVjdG9yPGNtU2VydmVyUHJvdG9jb2wqPiBTdXBwb3J0ZWRQcm90b2NvbHM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVNlcnZlclByb3RvY29sPj4gU3VwcG9ydGVkUHJvdG9jb2xzOwogCiAgIGZyaWVuZCBjbGFzcyBjbVNlcnZlclByb3RvY29sOwogICBmcmllbmQgY2xhc3MgY21TZXJ2ZXJSZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2VydmVyQ29ubmVjdGlvbi5jeHggYi9Tb3VyY2UvY21TZXJ2ZXJDb25uZWN0aW9uLmN4eAppbmRleCAyNzkxOTcyLi5iNGY0MWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXJ2ZXJDb25uZWN0aW9uLmN4eAorKysgYi9Tb3VyY2UvY21TZXJ2ZXJDb25uZWN0aW9uLmN4eApAQCAtNCw3ICs0LDcgQEAKIAogI2luY2x1ZGUgImNtU2VydmVyQ29ubmVjdGlvbi5oIgogCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKICNpbmNsdWRlICJjbVNlcnZlci5oIgogI2luY2x1ZGUgImNtU2VydmVyRGljdGlvbmFyeS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2VydmVyUHJvdG9jb2wuY3h4IGIvU291cmNlL2NtU2VydmVyUHJvdG9jb2wuY3h4CmluZGV4IDFkNGVhMDEuLmU1ODZmZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNlcnZlclByb3RvY29sLmN4eAorKysgYi9Tb3VyY2UvY21TZXJ2ZXJQcm90b2NvbC5jeHgKQEAgLTEwLDE2ICsxMCwxNyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUZpbGVNb25pdG9yLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUpzb25PYmplY3REaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiY21Kc29uT2JqZWN0cy5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TZXJ2ZXIuaCIKICNpbmNsdWRlICJjbVNlcnZlckRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC0xMzUsNiArMTM2LDcgQEAKICAgdGhpcy0+bV9TZXJ2ZXIgPSBzZXJ2ZXI7CiAgIHRoaXMtPm1fQ01ha2VJbnN0YW5jZSA9CiAgICAgY206Om1ha2VfdW5pcXVlPGNtYWtlPihjbWFrZTo6Um9sZVByb2plY3QsIGNtU3RhdGU6OlByb2plY3QpOworICB0aGlzLT5tX1dhcm5VbnVzZWQgPSBmYWxzZTsKICAgY29uc3QgYm9vbCByZXN1bHQgPSB0aGlzLT5Eb0FjdGl2YXRlKHJlcXVlc3QsIGVycm9yTWVzc2FnZSk7CiAgIGlmICghcmVzdWx0KSB7CiAgICAgdGhpcy0+bV9DTWFrZUluc3RhbmNlID0gbnVsbHB0cjsKQEAgLTE4Miw3ICsxODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlKQogewogICBjb25zdCBzdGQ6OnN0cmluZyBjYWNoZWRWYWx1ZSA9Ci0gICAgc3RkOjpzdHJpbmcoc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfSE9NRV9ESVJFQ1RPUlkiKSk7CisgICAgKnN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIik7CiAgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgdmFsdWUgPSBjYWNoZWRWYWx1ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwNSw5ICsyMDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleURlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yTWVzc2FnZSkKIHsKLSAgY29uc3QgY2hhciogZW50cnkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGtleSk7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGNhY2hlZFZhbHVlID0KLSAgICBlbnRyeSA9PSBudWxscHRyID8gc3RkOjpzdHJpbmcoKSA6IHN0ZDo6c3RyaW5nKGVudHJ5KTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgY2FjaGVkVmFsdWUgPSBzdGF0ZS0+R2V0U2FmZUNhY2hlRW50cnlWYWx1ZShrZXkpOwogICBpZiAodmFsdWUuZW1wdHkoKSkgewogICAgIHZhbHVlID0gY2FjaGVkVmFsdWU7CiAgIH0KQEAgLTQzNSw3ICs0MzUsNyBAQAogICAgIGtleXMgPSBhbGxLZXlzOwogICB9IGVsc2UgewogICAgIGZvciAoYXV0byBjb25zdCYgaSA6IGtleXMpIHsKLSAgICAgIGlmICghY21Db250YWlucyhhbGxLZXlzLCBpKSkgeworICAgICAgaWYgKCFjbTo6Y29udGFpbnMoYWxsS2V5cywgaSkpIHsKICAgICAgICAgcmV0dXJuIHJlcXVlc3QuUmVwb3J0RXJyb3IoIktleSBcIiIgKyBpICsgIlwiIG5vdCBmb3VuZCBpbiBjYWNoZS4iKTsKICAgICAgIH0KICAgICB9CkBAIC00NDYsMTMgKzQ0NiwxMyBAQAogICAgIGVudHJ5W2tLRVlfS0VZXSA9IGtleTsKICAgICBlbnRyeVtrVFlQRV9LRVldID0KICAgICAgIGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcoc3RhdGUtPkdldENhY2hlRW50cnlUeXBlKGtleSkpOwotICAgIGVudHJ5W2tWQUxVRV9LRVldID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOworICAgIGVudHJ5W2tWQUxVRV9LRVldID0gKnN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KTsKIAogICAgIEpzb246OlZhbHVlIHByb3BzID0gSnNvbjo6b2JqZWN0VmFsdWU7CiAgICAgYm9vbCBoYXZlUHJvcGVydGllcyA9IGZhbHNlOwogICAgIGZvciAoYXV0byBjb25zdCYgcHJvcCA6IHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlMaXN0KGtleSkpIHsKICAgICAgIGhhdmVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgIHByb3BzW3Byb3BdID0gc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksIHByb3ApOworICAgICAgcHJvcHNbcHJvcF0gPSAqc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksIHByb3ApOwogICAgIH0KICAgICBpZiAoaGF2ZVByb3BlcnRpZXMpIHsKICAgICAgIGVudHJ5W2tQUk9QRVJUSUVTX0tFWV0gPSBwcm9wczsKQEAgLTU2NCw3ICs1NjQsNyBAQAogCiAgIGlmIChjbS0+TG9hZENhY2hlKGJ1aWxkRGlyKSkgewogICAgIC8vIGJ1aWxkIGRpcmVjdG9yeSBoYXMgYmVlbiBzZXQgdXAgYmVmb3JlCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGNhY2hlZFNvdXJjZURpciA9CisgICAgY21Qcm9wIGNhY2hlZFNvdXJjZURpciA9CiAgICAgICBjbS0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9IT01FX0RJUkVDVE9SWSIpOwogICAgIGlmICghY2FjaGVkU291cmNlRGlyKSB7CiAgICAgICByZXR1cm4gcmVxdWVzdC5SZXBvcnRFcnJvcigiTm8gQ01BS0VfSE9NRV9ESVJFQ1RPUlkgZm91bmQgaW4gY2FjaGUuIik7CkBAIC01NzQsNyArNTc0LDcgQEAKICAgICAgIGNtLT5TZXRIb21lRGlyZWN0b3J5KHNvdXJjZURpcik7CiAgICAgfQogCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGNhY2hlZEdlbmVyYXRvciA9CisgICAgY21Qcm9wIGNhY2hlZEdlbmVyYXRvciA9CiAgICAgICBjbS0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1IiKTsKICAgICBpZiAoY2FjaGVkR2VuZXJhdG9yKSB7CiAgICAgICBpZiAoZ2cgJiYgZ2ctPkdldE5hbWUoKSAhPSAqY2FjaGVkR2VuZXJhdG9yKSB7CkBAIC02MzcsNyArNjM3LDcgQEAKICAgb2JqW2tUUkFDRV9LRVldID0gY20tPkdldFRyYWNlKCk7CiAgIG9ialtrVFJBQ0VfRVhQQU5EX0tFWV0gPSBjbS0+R2V0VHJhY2VFeHBhbmQoKTsKICAgb2JqW2tXQVJOX1VOSU5JVElBTElaRURfS0VZXSA9IGNtLT5HZXRXYXJuVW5pbml0aWFsaXplZCgpOwotICBvYmpba1dBUk5fVU5VU0VEX0tFWV0gPSBjbS0+R2V0V2FyblVudXNlZCgpOworICBvYmpba1dBUk5fVU5VU0VEX0tFWV0gPSBtX1dhcm5VbnVzZWQ7CiAgIG9ialtrV0FSTl9VTlVTRURfQ0xJX0tFWV0gPSBjbS0+R2V0V2FyblVudXNlZENsaSgpOwogICBvYmpba0NIRUNLX1NZU1RFTV9WQVJTX0tFWV0gPSBjbS0+R2V0Q2hlY2tTeXN0ZW1WYXJzKCk7CiAKQEAgLTY4Myw3ICs2ODMsNyBAQAogICBzZXRCb29sKHJlcXVlc3QsIGtUUkFDRV9FWFBBTkRfS0VZLCBbY21dKGJvb2wgZSkgeyBjbS0+U2V0VHJhY2VFeHBhbmQoZSk7IH0pOwogICBzZXRCb29sKHJlcXVlc3QsIGtXQVJOX1VOSU5JVElBTElaRURfS0VZLAogICAgICAgICAgIFtjbV0oYm9vbCBlKSB7IGNtLT5TZXRXYXJuVW5pbml0aWFsaXplZChlKTsgfSk7Ci0gIHNldEJvb2wocmVxdWVzdCwga1dBUk5fVU5VU0VEX0tFWSwgW2NtXShib29sIGUpIHsgY20tPlNldFdhcm5VbnVzZWQoZSk7IH0pOworICBzZXRCb29sKHJlcXVlc3QsIGtXQVJOX1VOVVNFRF9LRVksIFt0aGlzXShib29sIGUpIHsgbV9XYXJuVW51c2VkID0gZTsgfSk7CiAgIHNldEJvb2wocmVxdWVzdCwga1dBUk5fVU5VU0VEX0NMSV9LRVksCiAgICAgICAgICAgW2NtXShib29sIGUpIHsgY20tPlNldFdhcm5VbnVzZWRDbGkoZSk7IH0pOwogICBzZXRCb29sKHJlcXVlc3QsIGtDSEVDS19TWVNURU1fVkFSU19LRVksCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXJ2ZXJQcm90b2NvbC5oIGIvU291cmNlL2NtU2VydmVyUHJvdG9jb2wuaAppbmRleCA4NDQ2YzNlLi42MDA5ZTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXJ2ZXJQcm90b2NvbC5oCisrKyBiL1NvdXJjZS9jbVNlcnZlclByb3RvY29sLmgKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKICNpbmNsdWRlICJjbWFrZS5oIgogCkBAIC05NCw2ICs5NCw3IEBACiAgIC8vIEltcGxlbWVudCBwcm90b2NvbCBzcGVjaWZpYyBhY3RpdmF0aW9uIHRhc2tzIGhlcmUuIENhbGxlZCBmcm9tIEFjdGl2YXRlKCkuCiAgIHZpcnR1YWwgYm9vbCBEb0FjdGl2YXRlKGNvbnN0IGNtU2VydmVyUmVxdWVzdCYgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yTWVzc2FnZSk7CisgIGJvb2wgbV9XYXJuVW51c2VkID0gZmFsc2U7IC8vIHN0b3JhZ2UgZm9yIGxlZ2FjeSBvcHRpb24KIAogcHJpdmF0ZToKICAgc3RkOjp1bmlxdWVfcHRyPGNtYWtlPiBtX0NNYWtlSW5zdGFuY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVNldENvbW1hbmQuY3h4CmluZGV4IDVlMmExNDYuLjM1NGI0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNldENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldENvbW1hbmQuY3h4CkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKQEAgLTEzNSw3ICsxMzYsNyBAQAogCiAgIC8vIHNlZSBpZiB0aGlzIGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlCiAgIGNtU3RhdGUqIHN0YXRlID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKTsKLSAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUodmFyaWFibGUpOworICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUodmFyaWFibGUpOwogICBpZiAoZXhpc3RpbmdWYWx1ZSAmJgogICAgICAgKHN0YXRlLT5HZXRDYWNoZUVudHJ5VHlwZSh2YXJpYWJsZSkgIT0gY21TdGF0ZUVudW1zOjpVTklOSVRJQUxJWkVEKSkgewogICAgIC8vIGlmIHRoZSBzZXQgaXMgdHJ5aW5nIHRvIENBQ0hFIHRoZSB2YWx1ZSBidXQgdGhlIHZhbHVlCkBAIC0xNDksOCArMTUwLDggQEAKIAogICAvLyBpZiBpdCBpcyBtZWFudCB0byBiZSBpbiB0aGUgY2FjaGUgdGhlbiBkZWZpbmUgaXQgaW4gdGhlIGNhY2hlCiAgIGlmIChjYWNoZSkgewotICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZENhY2hlRGVmaW5pdGlvbih2YXJpYWJsZSwgdmFsdWUuY19zdHIoKSwgZG9jc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBmb3JjZSk7CisgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKHZhcmlhYmxlLCB2YWx1ZSwgZG9jc3RyaW5nLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZSk7CiAgIH0gZWxzZSB7CiAgICAgLy8gYWRkIHRoZSBkZWZpbml0aW9uCiAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkRGVmaW5pdGlvbih2YXJpYWJsZSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2V0RGlyZWN0b3J5UHJvcGVydGllc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtU2V0RGlyZWN0b3J5UHJvcGVydGllc0NvbW1hbmQuY3h4CmluZGV4IDM1ZGFjYTYuLjA3YWQyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNldERpcmVjdG9yeVByb3BlcnRpZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21TZXREaXJlY3RvcnlQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKQEAgLTUsMTIgKzUsNiBAQAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogCi1uYW1lc3BhY2UgewotYm9vbCBSdW5Db21tYW5kKGNtTWFrZWZpbGUmIG1mLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFpdCwKLSAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFpdGVuZCwKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZXJyb3JzKTsKLX0KLQogLy8gY21TZXREaXJlY3RvcnlQcm9wZXJ0aWVzQ29tbWFuZAogYm9vbCBjbVNldERpcmVjdG9yeVByb3BlcnRpZXNDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQpAQCAtMjAsMzggKzE0LDI2IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgc3RkOjpzdHJpbmcgZXJyb3JzOwotICBib29sIHJldCA9Ci0gICAgUnVuQ29tbWFuZChzdGF0dXMuR2V0TWFrZWZpbGUoKSwgYXJncy5iZWdpbigpICsgMSwgYXJncy5lbmQoKSwgZXJyb3JzKTsKLSAgaWYgKCFyZXQpIHsKLSAgICBzdGF0dXMuU2V0RXJyb3IoZXJyb3JzKTsKKyAgLy8gUFJPUEVSVElFUyBmb2xsb3dlZCBieSBwcm9wIHZhbHVlIHBhaXJzCisgIGlmIChhcmdzLnNpemUoKSAlIDIgIT0gMSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgIHJldHVybiBmYWxzZTsKICAgfQotICByZXR1cm4gcmV0OwotfQogCi1uYW1lc3BhY2UgewotYm9vbCBSdW5Db21tYW5kKGNtTWFrZWZpbGUmIG1mLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFpdCwKLSAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFpdGVuZCwKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZXJyb3JzKQotewotICBmb3IgKDsgYWl0ICE9IGFpdGVuZDsgYWl0ICs9IDIpIHsKLSAgICBpZiAoYWl0ICsgMSA9PSBhaXRlbmQpIHsKLSAgICAgIGVycm9ycyA9ICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AgPSAqYWl0OwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSA9ICooYWl0ICsgMSk7CisgIGZvciAoYXV0byBpdGVyID0gYXJncy5iZWdpbigpICsgMTsgaXRlciAhPSBhcmdzLmVuZCgpOyBpdGVyICs9IDIpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCA9ICppdGVyOwogICAgIGlmIChwcm9wID09ICJWQVJJQUJMRVMiKSB7Ci0gICAgICBlcnJvcnMgPSAiVmFyaWFibGVzIGFuZCBjYWNoZSB2YXJpYWJsZXMgc2hvdWxkIGJlIHNldCB1c2luZyBTRVQgY29tbWFuZCI7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAgICJWYXJpYWJsZXMgYW5kIGNhY2hlIHZhcmlhYmxlcyBzaG91bGQgYmUgc2V0IHVzaW5nIFNFVCBjb21tYW5kIik7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChwcm9wID09ICJNQUNST1MiKSB7Ci0gICAgICBlcnJvcnMgPSAiQ29tbWFuZHMgYW5kIG1hY3JvcyBjYW5ub3QgYmUgc2V0IHVzaW5nIFNFVF9DTUFLRV9QUk9QRVJUSUVTIjsKKyAgICAgIHN0YXR1cy5TZXRFcnJvcigKKyAgICAgICAgIkNvbW1hbmRzIGFuZCBtYWNyb3MgY2Fubm90IGJlIHNldCB1c2luZyBTRVRfQ01BS0VfUFJPUEVSVElFUyIpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtZi5TZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZS5jX3N0cigpKTsKKyAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5TZXRQcm9wZXJ0eShwcm9wLCAoaXRlciArIDEpLT5jX3N0cigpKTsKICAgfQogCiAgIHJldHVybiB0cnVlOwogfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2V0UHJvcGVydHlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggMzcwNTcyNy4uNmNhNzYzYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0UHJvcGVydHlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21TZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKQEAgLTQzLDcgKzQ0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIG5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSk7CisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIGRpcmVjdG9yeV9tYWtlZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpOwogYm9vbCBIYW5kbGVTb3VyY2UoY21Tb3VyY2VGaWxlKiBzZiwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAogICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSk7CkBAIC03NCw2ICs3NywxNDcgQEAKICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKTsKIH0KIAorbmFtZXNwYWNlIFNldFByb3BlcnR5Q29tbWFuZCB7Citib29sIEhhbmRsZVNvdXJjZUZpbGVEaXJlY3RvcnlTY29wZXMoCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLAorICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIGRpcmVjdG9yeV9tYWtlZmlsZXMpCit7CisgIHN0ZDo6dW5vcmRlcmVkX3NldDxjbU1ha2VmaWxlKj4gZGlyZWN0b3J5X21ha2VmaWxlc19zZXQ7CisKKyAgY21NYWtlZmlsZSogY3VycmVudF9kaXJfbWYgPSAmc3RhdHVzLkdldE1ha2VmaWxlKCk7CisgIGlmICghc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMuZW1wdHkoKSkgeworICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcl9wYXRoIDogc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMpIHsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGFic29sdXRlX2Rpcl9wYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICAgZGlyX3BhdGgsIGN1cnJlbnRfZGlyX21mLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOworICAgICAgY21NYWtlZmlsZSogZGlyX21mID0KKyAgICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRNYWtlZmlsZSgKKyAgICAgICAgICBhYnNvbHV0ZV9kaXJfcGF0aCk7CisgICAgICBpZiAoIWRpcl9tZikgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImdpdmVuIG5vbi1leGlzdGVudCBESVJFQ1RPUlkgIiwgZGlyX3BhdGgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgaWYgKGRpcmVjdG9yeV9tYWtlZmlsZXNfc2V0LmZpbmQoZGlyX21mKSA9PQorICAgICAgICAgIGRpcmVjdG9yeV9tYWtlZmlsZXNfc2V0LmVuZCgpKSB7CisgICAgICAgIGRpcmVjdG9yeV9tYWtlZmlsZXMucHVzaF9iYWNrKGRpcl9tZik7CisgICAgICAgIGRpcmVjdG9yeV9tYWtlZmlsZXNfc2V0Lmluc2VydChkaXJfbWYpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICghc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLmVtcHR5KCkpIHsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXRfbmFtZSA6IHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3RvcmllcykgeworICAgICAgY21UYXJnZXQqIHRhcmdldCA9IGN1cnJlbnRfZGlyX21mLT5GaW5kVGFyZ2V0VG9Vc2UodGFyZ2V0X25hbWUpOworICAgICAgaWYgKCF0YXJnZXQpIHsKKyAgICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KAorICAgICAgICAgICJnaXZlbiBub24tZXhpc3RlbnQgdGFyZ2V0IGZvciBUQVJHRVRfRElSRUNUT1JZICIsIHRhcmdldF9uYW1lKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIGNtUHJvcCB0YXJnZXRfc291cmNlX2RpciA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlNPVVJDRV9ESVIiKTsKKyAgICAgIGNtTWFrZWZpbGUqIHRhcmdldF9kaXJfbWYgPQorICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZE1ha2VmaWxlKAorICAgICAgICAgICp0YXJnZXRfc291cmNlX2Rpcik7CisKKyAgICAgIGlmIChkaXJlY3RvcnlfbWFrZWZpbGVzX3NldC5maW5kKHRhcmdldF9kaXJfbWYpID09CisgICAgICAgICAgZGlyZWN0b3J5X21ha2VmaWxlc19zZXQuZW5kKCkpIHsKKyAgICAgICAgZGlyZWN0b3J5X21ha2VmaWxlcy5wdXNoX2JhY2sodGFyZ2V0X2Rpcl9tZik7CisgICAgICAgIGRpcmVjdG9yeV9tYWtlZmlsZXNfc2V0Lmluc2VydCh0YXJnZXRfZGlyX21mKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMuZW1wdHkoKSAmJgorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLmVtcHR5KCkpIHsKKyAgICBkaXJlY3RvcnlfbWFrZWZpbGVzLnB1c2hfYmFjayhjdXJyZW50X2Rpcl9tZik7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGFuZGxlU291cmNlRmlsZURpcmVjdG9yeVNjb3BlVmFsaWRhdGlvbigKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywgYm9vbCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQsCisgIGJvb2wgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3RvcmllcykKK3sKKyAgLy8gVmFsaWRhdGUgc291cmNlIGZpbGUgZGlyZWN0b3J5IHNjb3Blcy4KKyAgaWYgKHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCAmJgorICAgICAgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMuZW1wdHkoKSkgeworICAgIHN0ZDo6c3RyaW5nIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSBESVJFQ1RPUlkgb3B0aW9uIjsKKyAgICBzdGF0dXMuU2V0RXJyb3IoZXJyb3JzKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCAmJgorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnN0cmluZyBlcnJvcnMgPSAiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJubyB2YWx1ZSBwcm92aWRlZCB0byB0aGUgVEFSR0VUX0RJUkVDVE9SWSBvcHRpb24iOworICAgIHN0YXR1cy5TZXRFcnJvcihlcnJvcnMpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIYW5kbGVBbmRWYWxpZGF0ZVNvdXJjZUZpbGVEaXJlY3RvcnRvcnlTY29wZXMoCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGJvb2wgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkLAorICBib29sIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMsCisgIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiYgc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlcykKK3sKKyAgYm9vbCBzY29wZV9vcHRpb25zX3ZhbGlkID0KKyAgICBTZXRQcm9wZXJ0eUNvbW1hbmQ6OkhhbmRsZVNvdXJjZUZpbGVEaXJlY3RvcnlTY29wZVZhbGlkYXRpb24oCisgICAgICBzdGF0dXMsIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCwKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCwgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMsCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMpOworICBpZiAoIXNjb3BlX29wdGlvbnNfdmFsaWQpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzY29wZV9vcHRpb25zX3ZhbGlkID0gU2V0UHJvcGVydHlDb21tYW5kOjpIYW5kbGVTb3VyY2VGaWxlRGlyZWN0b3J5U2NvcGVzKAorICAgIHN0YXR1cywgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMsIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3RvcmllcywKKyAgICBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKTsKKyAgcmV0dXJuIHNjb3BlX29wdGlvbnNfdmFsaWQ7Cit9CisKK3N0ZDo6c3RyaW5nIE1ha2VTb3VyY2VGaWxlUGF0aEFic29sdXRlSWZOZWVkZWQoCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfZmlsZV9wYXRoLAorICBjb25zdCBib29sIG5lZWRlZCkKK3sKKyAgaWYgKCFuZWVkZWQpIHsKKyAgICByZXR1cm4gc291cmNlX2ZpbGVfcGF0aDsKKyAgfQorICBjb25zdCBzdGQ6OnN0cmluZyBhYnNvbHV0ZV9maWxlX3BhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgIHNvdXJjZV9maWxlX3BhdGgsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CisgIHJldHVybiBhYnNvbHV0ZV9maWxlX3BhdGg7Cit9CisKK3ZvaWQgTWFrZVNvdXJjZUZpbGVQYXRoc0Fic29sdXRlSWZOZWVkZWQoCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVzX2Fic29sdXRlX3BhdGhzLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGVzX2l0X2JlZ2luLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGVzX2l0X2VuZCwgY29uc3QgYm9vbCBuZWVkZWQpCit7CisKKyAgLy8gTWFrZSB0aGUgZmlsZSBwYXRocyBhYnNvbHV0ZSwgc28gdGhhdCByZWxhdGl2ZSBzb3VyY2UgZmlsZSBwYXRocyBhcmUKKyAgLy8gcGlja2VkIHVwIHJlbGF0aXZlIHRvIHRoZSBjb21tYW5kIGNhbGxpbmcgc2l0ZSwgcmVnYXJkbGVzcyBvZiB0aGUKKyAgLy8gZGlyZWN0b3J5IHNjb3BlLgorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmRpZmZlcmVuY2VfdHlwZSBudW1fZmlsZXMgPQorICAgIGZpbGVzX2l0X2VuZCAtIGZpbGVzX2l0X2JlZ2luOworICBzb3VyY2VfZmlsZXNfYWJzb2x1dGVfcGF0aHMucmVzZXJ2ZShudW1fZmlsZXMpOworCisgIGlmICghbmVlZGVkKSB7CisgICAgc291cmNlX2ZpbGVzX2Fic29sdXRlX3BhdGhzLmFzc2lnbihmaWxlc19pdF9iZWdpbiwgZmlsZXNfaXRfZW5kKTsKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKDsgZmlsZXNfaXRfYmVnaW4gIT0gZmlsZXNfaXRfZW5kOyArK2ZpbGVzX2l0X2JlZ2luKSB7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgYWJzb2x1dGVfZmlsZV9wYXRoID0KKyAgICAgIE1ha2VTb3VyY2VGaWxlUGF0aEFic29sdXRlSWZOZWVkZWQoc3RhdHVzLCAqZmlsZXNfaXRfYmVnaW4sIHRydWUpOworICAgIHNvdXJjZV9maWxlc19hYnNvbHV0ZV9wYXRocy5wdXNoX2JhY2soYWJzb2x1dGVfZmlsZV9wYXRoKTsKKyAgfQorfQorfQorCiBib29sIGNtU2V0UHJvcGVydHlDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKIHsKQEAgLTExNCwxMyArMjU4LDIwIEBACiAgIHN0ZDo6c3RyaW5nIHByb3BlcnR5TmFtZTsKICAgc3RkOjpzdHJpbmcgcHJvcGVydHlWYWx1ZTsKIAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlX2ZpbGVfZGlyZWN0b3JpZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXM7CisgIGJvb2wgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkID0gZmFsc2U7CisgIGJvb2wgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkID0gZmFsc2U7CisKICAgLy8gUGFyc2UgdGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyB1cCB0byB0aGUgdmFsdWVzLgogICBlbnVtIERvaW5nCiAgIHsKICAgICBEb2luZ05vbmUsCiAgICAgRG9pbmdOYW1lcywKICAgICBEb2luZ1Byb3BlcnR5LAotICAgIERvaW5nVmFsdWVzCisgICAgRG9pbmdWYWx1ZXMsCisgICAgRG9pbmdTb3VyY2VEaXJlY3RvcnksCisgICAgRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkKICAgfTsKICAgRG9pbmcgZG9pbmcgPSBEb2luZ05hbWVzOwogICBjb25zdCBjaGFyKiBzZXAgPSAiIjsKQEAgLTEzNyw4ICsyODgsMjAgQEAKICAgICAgIGFwcGVuZE1vZGUgPSB0cnVlOwogICAgICAgcmVtb3ZlID0gZmFsc2U7CiAgICAgICBhcHBlbmRBc1N0cmluZyA9IHRydWU7CisgICAgfSBlbHNlIGlmIChkb2luZyAhPSBEb2luZ1Byb3BlcnR5ICYmIGRvaW5nICE9IERvaW5nVmFsdWVzICYmCisgICAgICAgICAgICAgICBzY29wZSA9PSBjbVByb3BlcnR5OjpTT1VSQ0VfRklMRSAmJiBhcmcgPT0gIkRJUkVDVE9SWSIpIHsKKyAgICAgIGRvaW5nID0gRG9pbmdTb3VyY2VEaXJlY3Rvcnk7CisgICAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZG9pbmcgIT0gRG9pbmdQcm9wZXJ0eSAmJiBkb2luZyAhPSBEb2luZ1ZhbHVlcyAmJgorICAgICAgICAgICAgICAgc2NvcGUgPT0gY21Qcm9wZXJ0eTo6U09VUkNFX0ZJTEUgJiYgYXJnID09ICJUQVJHRVRfRElSRUNUT1JZIikgeworICAgICAgZG9pbmcgPSBEb2luZ1NvdXJjZVRhcmdldERpcmVjdG9yeTsKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ05hbWVzKSB7CiAgICAgICBuYW1lcy5pbnNlcnQoYXJnKTsKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nU291cmNlRGlyZWN0b3J5KSB7CisgICAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5wdXNoX2JhY2soYXJnKTsKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nU291cmNlVGFyZ2V0RGlyZWN0b3J5KSB7CisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMucHVzaF9iYWNrKGFyZyk7CiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ1Byb3BlcnR5KSB7CiAgICAgICBwcm9wZXJ0eU5hbWUgPSBhcmc7CiAgICAgICBkb2luZyA9IERvaW5nVmFsdWVzOwpAQCAtMTU5LDYgKzMyMiwxOCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzOworICBib29sIGZpbGVfc2NvcGVzX2hhbmRsZWQgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6SGFuZGxlQW5kVmFsaWRhdGVTb3VyY2VGaWxlRGlyZWN0b3J0b3J5U2NvcGVzKAorICAgICAgc3RhdHVzLCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQsCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQsIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLCBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKTsKKyAgaWYgKCFmaWxlX3Njb3Blc19oYW5kbGVkKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGJvb2wgc291cmNlX2ZpbGVfcGF0aHNfc2hvdWxkX2JlX2Fic29sdXRlID0KKyAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQgfHwgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkOworCiAgIC8vIERpc3BhdGNoIHByb3BlcnR5IHNldHRpbmcuCiAgIHN3aXRjaCAoc2NvcGUpIHsKICAgICBjYXNlIGNtUHJvcGVydHk6OkdMT0JBTDoKQEAgLTE3Miw3ICszNDcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXNTdHJpbmcsIGFwcGVuZE1vZGUsIHJlbW92ZSk7CiAgICAgY2FzZSBjbVByb3BlcnR5OjpTT1VSQ0VfRklMRToKICAgICAgIHJldHVybiBIYW5kbGVTb3VyY2VNb2RlKHN0YXR1cywgbmFtZXMsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEFzU3RyaW5nLCBhcHBlbmRNb2RlLCByZW1vdmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXNTdHJpbmcsIGFwcGVuZE1vZGUsIHJlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9tYWtlZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpOwogICAgIGNhc2UgY21Qcm9wZXJ0eTo6VEVTVDoKICAgICAgIHJldHVybiBIYW5kbGVUZXN0TW9kZShzdGF0dXMsIG5hbWVzLCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXNTdHJpbmcsIGFwcGVuZE1vZGUsIHJlbW92ZSk7CkBAIC0yMzUsMTQgKzQxMiw4IEBACiAgIGlmICghbmFtZXMuZW1wdHkoKSkgewogICAgIC8vIENvbnN0cnVjdCB0aGUgZGlyZWN0b3J5IG5hbWUuICBJbnRlcnByZXQgcmVsYXRpdmUgcGF0aHMgd2l0aAogICAgIC8vIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotICAgIHN0ZDo6c3RyaW5nIGRpciA9ICpuYW1lcy5iZWdpbigpOwotICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgoZGlyKSkgewotICAgICAgZGlyID0gY21TdHJDYXQoc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAnLycsCi0gICAgICAgICAgICAgICAgICAgICAqbmFtZXMuYmVnaW4oKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxvY2FsIGdlbmVyYXRvcnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBjb2xsYXBzZWQgcGF0aHMuCi0gICAgZGlyID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChkaXIpOworICAgIHN0ZDo6c3RyaW5nIGRpciA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICAqbmFtZXMuYmVnaW4oKSwgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpKTsKIAogICAgIG1mID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRNYWtlZmlsZShkaXIpOwogICAgIGlmICghbWYpIHsKQEAgLTMwNyw3ICs0NzgsNyBAQAogICAgIGlmIChyZW1vdmUpIHsKICAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKICAgICB9IGVsc2UgewotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUuY19zdHIoKSk7CisgICAgICB0YXJnZXQtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSk7CiAgICAgfQogICB9CiAKQEAgLTMyMSwyMSArNDkyLDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXBwZW5kTW9kZSwgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIGRpcmVjdG9yeV9tYWtlZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpCiB7Ci0gIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiBuYW1lcykgewotICAgIC8vIEdldCB0aGUgc291cmNlIGZpbGUuCi0gICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRPckNyZWF0ZVNvdXJjZShuYW1lKSkgewotICAgICAgaWYgKCFIYW5kbGVTb3VyY2Uoc2YsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgYXBwZW5kQXNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRNb2RlLCByZW1vdmUpKSB7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlc19hYnNvbHV0ZTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHVuaXF1ZV9maWxlcyhuYW1lcy5iZWdpbigpLCBuYW1lcy5lbmQoKSk7CisgIFNldFByb3BlcnR5Q29tbWFuZDo6TWFrZVNvdXJjZUZpbGVQYXRoc0Fic29sdXRlSWZOZWVkZWQoCisgICAgc3RhdHVzLCBmaWxlc19hYnNvbHV0ZSwgdW5pcXVlX2ZpbGVzLmJlZ2luKCksIHVuaXF1ZV9maWxlcy5lbmQoKSwKKyAgICBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpOworCisgIGZvciAoY29uc3QgYXV0byBtZiA6IGRpcmVjdG9yeV9tYWtlZmlsZXMpIHsKKyAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lIDogZmlsZXNfYWJzb2x1dGUpIHsKKyAgICAgIC8vIEdldCB0aGUgc291cmNlIGZpbGUuCisgICAgICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IG1mLT5HZXRPckNyZWF0ZVNvdXJjZShuYW1lKSkgeworICAgICAgICBpZiAoIUhhbmRsZVNvdXJjZShzZiwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTW9kZSwgcmVtb3ZlKSkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KAorICAgICAgICAgICJnaXZlbiBTT1VSQ0UgbmFtZSB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBjcmVhdGVkOiAiLCBuYW1lKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KAotICAgICAgICAiZ2l2ZW4gU09VUkNFIG5hbWUgdGhhdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgY3JlYXRlZDogIiwgbmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQorCiAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzgsNyArNjIwLDcgQEAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG5hbWVzKSB7CiAgICAgLy8gR2V0IHRoZSBzb3VyY2UgZmlsZS4KICAgICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7Ci0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9IGNtLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUobmFtZSk7CisgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPSBjbS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKG5hbWUpOwogICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7CiAgICAgICBpZiAoIUhhbmRsZUNhY2hlRW50cnkobmFtZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlLCBhcHBlbmRBc1N0cmluZywgYXBwZW5kTW9kZSwKQEAgLTQ2MCwxNiArNjQyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgLy8gU2V0IG9yIGFwcGVuZCB0aGUgcHJvcGVydHkuCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gcHJvcGVydHlWYWx1ZS5jX3N0cigpOwogICBjbVN0YXRlKiBzdGF0ZSA9IG1ha2VmaWxlLkdldFN0YXRlKCk7CiAgIGlmIChyZW1vdmUpIHsKICAgICBzdGF0ZS0+UmVtb3ZlQ2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUpOwogICB9CiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgc3RhdGUtPkFwcGVuZENhY2hlRW50cnlQcm9wZXJ0eShjYWNoZUtleSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwKKyAgICBzdGF0ZS0+QXBwZW5kQ2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRBc1N0cmluZyk7CiAgIH0gZWxzZSB7Ci0gICAgc3RhdGUtPlNldENhY2hlRW50cnlQcm9wZXJ0eShjYWNoZUtleSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgc3RhdGUtPlNldENhY2hlRW50cnlQcm9wZXJ0eShjYWNoZUtleSwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlKTsKICAgfQogCiAgIHJldHVybiB0cnVlOwpAQCAtNTA1LDEzICs2ODYsMTMgQEAKICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICAvLyBTZXQgb3IgYXBwZW5kIHRoZSBwcm9wZXJ0eS4KLSAgY29uc3QgY2hhciogdmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmNfc3RyKCk7CiAgIGlmIChyZW1vdmUpIHsKICAgICBmaWxlLT5SZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICB9IGVsc2UgaWYgKGFwcGVuZE1vZGUpIHsKLSAgICBmaWxlLT5BcHBlbmRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKKyAgICBmaWxlLT5BcHBlbmRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRBc1N0cmluZyk7CiAgIH0gZWxzZSB7Ci0gICAgZmlsZS0+U2V0UHJvcGVydHkoJm1ha2VmaWxlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBmaWxlLT5TZXRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRQcm9wZXJ0eUNvbW1hbmQuaCBiL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5oCmluZGV4IGVjMzZmODQuLmFmNTY2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5oCkBAIC04LDkgKzgsMzggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCitjbGFzcyBjbU1ha2VmaWxlOwogY2xhc3MgY21FeGVjdXRpb25TdGF0dXM7CiAKIGJvb2wgY21TZXRQcm9wZXJ0eUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKTsKIAorbmFtZXNwYWNlIFNldFByb3BlcnR5Q29tbWFuZCB7Citib29sIEhhbmRsZVNvdXJjZUZpbGVEaXJlY3RvcnlTY29wZXMoCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLAorICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIGRpcmVjdG9yeV9tYWtlZmlsZXMpOworCitib29sIEhhbmRsZVNvdXJjZUZpbGVEaXJlY3RvcnlTY29wZVZhbGlkYXRpb24oCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGJvb2wgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkLAorICBib29sIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMpOworCitib29sIEhhbmRsZUFuZFZhbGlkYXRlU291cmNlRmlsZURpcmVjdG9ydG9yeVNjb3BlcygKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywgYm9vbCBzb3VyY2VfZGlyZWN0b3JpZXNfb3B0aW9uX2VuY291bnRlcmVkLAorICBib29sIHNvdXJjZV90YXJnZXRfZGlyZWN0b3JpZXNfb3B0aW9uX2VuY291bnRlcmVkLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHNvdXJjZV9kaXJlY3RvcmllcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfdGFyZ2V0X2RpcmVjdG9yaWVzLAorICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9tYWtlZmlsZXMpOworCitzdGQ6OnN0cmluZyBNYWtlU291cmNlRmlsZVBhdGhBYnNvbHV0ZUlmTmVlZGVkKAorICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlX2ZpbGVfcGF0aCwgYm9vbCBuZWVkZWQpOwordm9pZCBNYWtlU291cmNlRmlsZVBhdGhzQWJzb2x1dGVJZk5lZWRlZCgKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZXNfYWJzb2x1dGVfcGF0aHMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZXNfaXRfYmVnaW4sCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZXNfaXRfZW5kLCBib29sIG5lZWRlZCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2V0U291cmNlRmlsZXNQcm9wZXJ0aWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmN4eAppbmRleCA3ZmY2MDRiLi5jMWIwYzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmN4eApAQCAtMiwxNyArMiwyMyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVNldFByb3BlcnR5Q29tbWFuZC5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogCi1zdGF0aWMgYm9vbCBSdW5Db21tYW5kKGNtTWFrZWZpbGUqIG1mLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGViZWcsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZWVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwcm9wYmVnLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBlcnJvcnMpOworc3RhdGljIGJvb2wgUnVuQ29tbWFuZEZvclNjb3BlKAorICBjbU1ha2VmaWxlKiBtZiwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBmaWxlX2JlZ2luLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGVfZW5kLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BfYmVnaW4sCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcHJvcF9lbmQsIHN0ZDo6c3RyaW5nJiBlcnJvcnMpOwogCiBib29sIGNtU2V0U291cmNlRmlsZXNQcm9wZXJ0aWVzQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQpAQCAtMjMsNTYgKzI5LDEwNiBAQAogICB9CiAKICAgLy8gYnJlYWsgdGhlIGFyZ3VtZW50cyBpbnRvIHNvdXJjZSBmaWxlIG5hbWVzIGFuZCBwcm9wZXJ0aWVzCi0gIGludCBudW1GaWxlcyA9IDA7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgajsKLSAgaiA9IGFyZ3MuYmVnaW4oKTsKICAgLy8gb2xkIHN0eWxlIGFsbG93cyBmb3Igc3BlY2lmaWVyIGJlZm9yZSBQUk9QRVJUSUVTIGtleXdvcmQKLSAgd2hpbGUgKGogIT0gYXJncy5lbmQoKSAmJiAqaiAhPSAiQUJTVFJBQ1QiICYmICpqICE9ICJXUkFQX0VYQ0xVREUiICYmCi0gICAgICAgICAqaiAhPSAiR0VORVJBVEVEIiAmJiAqaiAhPSAiQ09NUElMRV9GTEFHUyIgJiYKLSAgICAgICAgICpqICE9ICJPQkpFQ1RfREVQRU5EUyIgJiYgKmogIT0gIlBST1BFUlRJRVMiKSB7Ci0gICAgbnVtRmlsZXMrKzsKLSAgICArK2o7CisgIHN0YXRpYyBjb25zdCBjbTo6c3RyaW5nX3ZpZXcgcHJvcF9uYW1lc1tdID0geworICAgICJBQlNUUkFDVCIsICAgICAgICJHRU5FUkFURUQiLCAgIldSQVBfRVhDTFVERSIsICJDT01QSUxFX0ZMQUdTIiwKKyAgICAiT0JKRUNUX0RFUEVORFMiLCAiUFJPUEVSVElFUyIsICJESVJFQ1RPUlkiLCAgICAiVEFSR0VUX0RJUkVDVE9SWSIKKyAgfTsKKworICBhdXRvIGlzQVByb3BlcnR5S2V5d29yZCA9CisgICAgW10oY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciYgYXJnX2l0KSB7CisgICAgICByZXR1cm4gc3RkOjphbnlfb2YoCisgICAgICAgIHN0ZDo6YmVnaW4ocHJvcF9uYW1lcyksIHN0ZDo6ZW5kKHByb3BfbmFtZXMpLAorICAgICAgICBbJmFyZ19pdF0oY206OnN0cmluZ192aWV3IHByb3BfbmFtZSkgeyByZXR1cm4gKmFyZ19pdCA9PSBwcm9wX25hbWU7IH0pOworICAgIH07CisKKyAgYXV0byBvcHRpb25zX2JlZ2luID0gc3RkOjpmaW5kX2ZpcnN0X29mKAorICAgIGFyZ3MuYmVnaW4oKSwgYXJncy5lbmQoKSwgc3RkOjpiZWdpbihwcm9wX25hbWVzKSwgc3RkOjplbmQocHJvcF9uYW1lcykpOworICBhdXRvIG9wdGlvbnNfaXQgPSBvcHRpb25zX2JlZ2luOworCisgIC8vIEhhbmRsZSBkaXJlY3Rvcnkgb3B0aW9ucy4KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzOworICBib29sIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworICBib29sIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4gc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlczsKKworICBlbnVtIERvaW5nCisgIHsKKyAgICBEb2luZ05vbmUsCisgICAgRG9pbmdTb3VyY2VEaXJlY3RvcnksCisgICAgRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkKKyAgfTsKKyAgRG9pbmcgZG9pbmcgPSBEb2luZ05vbmU7CisgIGZvciAoOyBvcHRpb25zX2l0ICE9IGFyZ3MuZW5kKCk7ICsrb3B0aW9uc19pdCkgeworICAgIGlmICgqb3B0aW9uc19pdCA9PSAiRElSRUNUT1JZIikgeworICAgICAgZG9pbmcgPSBEb2luZ1NvdXJjZURpcmVjdG9yeTsKKyAgICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmICgqb3B0aW9uc19pdCA9PSAiVEFSR0VUX0RJUkVDVE9SWSIpIHsKKyAgICAgIGRvaW5nID0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3Rvcnk7CisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaXNBUHJvcGVydHlLZXl3b3JkKG9wdGlvbnNfaXQpKSB7CisgICAgICBicmVhazsKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nU291cmNlRGlyZWN0b3J5KSB7CisgICAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5wdXNoX2JhY2soKm9wdGlvbnNfaXQpOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcy5wdXNoX2JhY2soKm9wdGlvbnNfaXQpOworICAgIH0gZWxzZSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCJnaXZlbiBpbnZhbGlkIGFyZ3VtZW50IFwiIiwgKm9wdGlvbnNfaXQsICJcIi4iKSk7CisgICAgfQogICB9CiAKLSAgY21NYWtlZmlsZSYgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKKyAgY29uc3QgYXV0byBwcm9wc19iZWdpbiA9IG9wdGlvbnNfaXQ7CiAKLSAgLy8gbm93IGNhbGwgdGhlIHdvcmtlciBmdW5jdGlvbgorICBib29sIGZpbGVfc2NvcGVzX2hhbmRsZWQgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6SGFuZGxlQW5kVmFsaWRhdGVTb3VyY2VGaWxlRGlyZWN0b3J0b3J5U2NvcGVzKAorICAgICAgc3RhdHVzLCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQsCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQsIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLCBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKTsKKyAgaWYgKCFmaWxlX3Njb3Blc19oYW5kbGVkKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOworICBib29sIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSA9CisgICAgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkIHx8IHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZDsKKyAgU2V0UHJvcGVydHlDb21tYW5kOjpNYWtlU291cmNlRmlsZVBhdGhzQWJzb2x1dGVJZk5lZWRlZCgKKyAgICBzdGF0dXMsIGZpbGVzLCBhcmdzLmJlZ2luKCksIG9wdGlvbnNfYmVnaW4sCisgICAgc291cmNlX2ZpbGVfcGF0aHNfc2hvdWxkX2JlX2Fic29sdXRlKTsKKworICAvLyBOb3cgY2FsbCB0aGUgd29ya2VyIGZ1bmN0aW9uIGZvciBlYWNoIGRpcmVjdG9yeSBzY29wZSByZXByZXNlbnRlZCBieSBhCisgIC8vIGNtTWFrZWZpbGUgaW5zdGFuY2UuCiAgIHN0ZDo6c3RyaW5nIGVycm9yczsKLSAgYm9vbCByZXQgPSBSdW5Db21tYW5kKCZtZiwgYXJncy5iZWdpbigpLCBhcmdzLmJlZ2luKCkgKyBudW1GaWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYmVnaW4oKSArIG51bUZpbGVzLCBhcmdzLmVuZCgpLCBlcnJvcnMpOwotICBpZiAoIXJldCkgewotICAgIHN0YXR1cy5TZXRFcnJvcihlcnJvcnMpOworICBmb3IgKGNvbnN0IGF1dG8gbWYgOiBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKSB7CisgICAgYm9vbCByZXQgPSBSdW5Db21tYW5kRm9yU2NvcGUobWYsIGZpbGVzLmJlZ2luKCksIGZpbGVzLmVuZCgpLCBwcm9wc19iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmVuZCgpLCBlcnJvcnMpOworICAgIGlmICghcmV0KSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoZXJyb3JzKTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQogICB9Ci0gIHJldHVybiByZXQ7CisKKyAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIFJ1bkNvbW1hbmQoY21NYWtlZmlsZSogbWYsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZWJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBmaWxlZW5kLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BiZWcsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcHJvcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGVycm9ycykKK3N0YXRpYyBib29sIFJ1bkNvbW1hbmRGb3JTY29wZSgKKyAgY21NYWtlZmlsZSogbWYsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZV9iZWdpbiwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBmaWxlX2VuZCwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwcm9wX2JlZ2luLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BfZW5kLCBzdGQ6OnN0cmluZyYgZXJyb3JzKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcGVydHlQYWlyczsKLSAgYm9vbCBnZW5lcmF0ZWQgPSBmYWxzZTsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBqOwogICAvLyBidWlsZCB0aGUgcHJvcGVydHkgcGFpcnMKLSAgZm9yIChqID0gcHJvcGJlZzsgaiAhPSBwcm9wZW5kOyArK2opIHsKLSAgICAvLyBvbGQgc3R5bGUgYWxsb3dzIGZvciBzcGVjaWZpZXIgYmVmb3JlIFBST1BFUlRJRVMga2V5d29yZAotICAgIGlmICgqaiA9PSAiQUJTVFJBQ1QiKSB7Ci0gICAgICBwcm9wZXJ0eVBhaXJzLmVtcGxhY2VfYmFjaygiQUJTVFJBQ1QiKTsKLSAgICAgIHByb3BlcnR5UGFpcnMuZW1wbGFjZV9iYWNrKCIxIik7Ci0gICAgfSBlbHNlIGlmICgqaiA9PSAiV1JBUF9FWENMVURFIikgewotICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIldSQVBfRVhDTFVERSIpOwotICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIjEiKTsKLSAgICB9IGVsc2UgaWYgKCpqID09ICJHRU5FUkFURUQiKSB7Ci0gICAgICBnZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIkdFTkVSQVRFRCIpOworICBmb3IgKGF1dG8gaiA9IHByb3BfYmVnaW47IGogIT0gcHJvcF9lbmQ7ICsraikgeworICAgIC8vIGNvbnN1bWUgb2xkIHN0eWxlIG9wdGlvbnMKKyAgICBpZiAoKmogPT0gIkFCU1RSQUNUIiB8fCAqaiA9PSAiR0VORVJBVEVEIiB8fCAqaiA9PSAiV1JBUF9FWENMVURFIikgeworICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soKmopOwogICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIjEiKTsKICAgICB9IGVsc2UgaWYgKCpqID09ICJDT01QSUxFX0ZMQUdTIikgewogICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIkNPTVBJTEVfRkxBR1MiKTsKICAgICAgICsrajsKLSAgICAgIGlmIChqID09IHByb3BlbmQpIHsKKyAgICAgIGlmIChqID09IHByb3BfZW5kKSB7CiAgICAgICAgIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyAiCiAgICAgICAgICAgICAgICAgICJDT01QSUxFX0ZMQUdTIHdpdGggbm8gZmxhZ3MiOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04MSwzMyArMTM3LDIyIEBACiAgICAgfSBlbHNlIGlmICgqaiA9PSAiT0JKRUNUX0RFUEVORFMiKSB7CiAgICAgICBwcm9wZXJ0eVBhaXJzLmVtcGxhY2VfYmFjaygiT0JKRUNUX0RFUEVORFMiKTsKICAgICAgICsrajsKLSAgICAgIGlmIChqID09IHByb3BlbmQpIHsKKyAgICAgIGlmIChqID09IHByb3BfZW5kKSB7CiAgICAgICAgIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyAiCiAgICAgICAgICAgICAgICAgICJPQkpFQ1RfREVQRU5EUyB3aXRoIG5vIGRlcGVuZGVuY2llcyI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICAgIHByb3BlcnR5UGFpcnMucHVzaF9iYWNrKCpqKTsKICAgICB9IGVsc2UgaWYgKCpqID09ICJQUk9QRVJUSUVTIikgewotICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLCBuZXcgc3R5bGUKLSAgICAgICsrajsKLSAgICAgIHdoaWxlIChqICE9IHByb3BlbmQpIHsKLSAgICAgICAgcHJvcGVydHlQYWlycy5wdXNoX2JhY2soKmopOwotICAgICAgICBpZiAoKmogPT0gIkdFTkVSQVRFRCIpIHsKLSAgICAgICAgICArK2o7Ci0gICAgICAgICAgaWYgKGogIT0gcHJvcGVuZCAmJiBjbUlzT24oKmopKSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICArK2o7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGogPT0gcHJvcGVuZCkgewotICAgICAgICAgIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4iOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0eVBhaXJzLnB1c2hfYmFjaygqaik7Ci0gICAgICAgICsrajsKKyAgICAgIC8vIFBST1BFUlRJRVMgaXMgZm9sbG93ZWQgYnkgbmV3IHN0eWxlIHByb3AgdmFsdWUgcGFpcnMKKyAgICAgIGNtU3RyaW5nUmFuZ2UgbmV3U3R5bGVQcm9wc3sgaiArIDEsIHByb3BfZW5kIH07CisgICAgICBpZiAobmV3U3R5bGVQcm9wcy5zaXplKCkgJSAyICE9IDApIHsKKyAgICAgICAgZXJyb3JzID0gImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICAgIC8vIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBiZWNhdXNlIGogaXMgYWxyZWFkeSA9PSBlbmQKKyAgICAgIC8vIHNldCBuZXdTdHlsZVByb3BzIGFzIGlzLgorICAgICAgY206OmFwcGVuZChwcm9wZXJ0eVBhaXJzLCBuZXdTdHlsZVByb3BzKTsKKyAgICAgIC8vIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAgIGJyZWFrOwogICAgIH0gZWxzZSB7CiAgICAgICBlcnJvcnMgPSAiY2FsbGVkIHdpdGggaWxsZWdhbCBhcmd1bWVudHMsIG1heWJlIG1pc3NpbmcgYSAiCkBAIC0xMTYsMTUgKzE2MSwxMyBAQAogICAgIH0KICAgfQogCi0gIC8vIG5vdyBsb29wIG92ZXIgYWxsIHRoZSBmaWxlcwotICBmb3IgKGogPSBmaWxlYmVnOyBqICE9IGZpbGVlbmQ7ICsraikgeworICAvLyBsb29wIG92ZXIgYWxsIHRoZSBmaWxlcworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBzZm5hbWUgOiBjbVN0cmluZ1JhbmdleyBmaWxlX2JlZ2luLCBmaWxlX2VuZCB9KSB7CiAgICAgLy8gZ2V0IHRoZSBzb3VyY2UgZmlsZQotICAgIGNtU291cmNlRmlsZSogc2YgPSBtZi0+R2V0T3JDcmVhdGVTb3VyY2UoKmosIGdlbmVyYXRlZCk7Ci0gICAgaWYgKHNmKSB7Ci0gICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIGFsbCB0aGUgcHJvcHMgYW5kIHNldCB0aGVtCi0gICAgICB1bnNpZ25lZCBpbnQgazsKLSAgICAgIGZvciAoayA9IDA7IGsgPCBwcm9wZXJ0eVBhaXJzLnNpemUoKTsgayA9IGsgKyAyKSB7Ci0gICAgICAgIHNmLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eVBhaXJzW2tdLCBwcm9wZXJ0eVBhaXJzW2sgKyAxXS5jX3N0cigpKTsKKyAgICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IG1mLT5HZXRPckNyZWF0ZVNvdXJjZShzZm5hbWUpKSB7CisgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIHByb3BzIGFuZCBzZXQgdGhlbQorICAgICAgZm9yIChhdXRvIGsgPSBwcm9wZXJ0eVBhaXJzLmJlZ2luKCk7IGsgIT0gcHJvcGVydHlQYWlycy5lbmQoKTsgayArPSAyKSB7CisgICAgICAgIHNmLT5TZXRQcm9wZXJ0eSgqaywgKGsgKyAxKS0+Y19zdHIoKSk7CiAgICAgICB9CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKaW5kZXggY2QwZmE0MC4uYmRjODRhZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0VGFyZ2V0UHJvcGVydGllc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldFRhcmdldFByb3BlcnRpZXNDb21tYW5kLmN4eApAQCAtMiwxOSArMiwxNCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgogCi0jaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgotCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21UYXJnZXQuaCIKIAotc3RhdGljIGJvb2wgU2V0T25lVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHByb3BlcnR5UGFpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpOwotCiBib29sIGNtU2V0VGFyZ2V0UHJvcGVydGllc0NvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CkBAIC0yMyw2MSArMTgsMzggQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICAvLyBmaXJzdCBjb2xsZWN0IHVwIHRoZSBsaXN0IG9mIGZpbGVzCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wZXJ0eVBhaXJzOwotICBpbnQgbnVtRmlsZXMgPSAwOwotICBmb3IgKGF1dG8gaiA9IGFyZ3MuYmVnaW4oKTsgaiAhPSBhcmdzLmVuZCgpOyArK2opIHsKLSAgICBpZiAoKmogPT0gIlBST1BFUlRJRVMiKSB7Ci0gICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMsIG5ldyBzdHlsZQotICAgICAgKytqOwotICAgICAgaWYgKHN0ZDo6ZGlzdGFuY2UoaiwgYXJncy5lbmQoKSkgJSAyICE9IDApIHsKLSAgICAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY206OmFwcGVuZChwcm9wZXJ0eVBhaXJzLCBqLCBhcmdzLmVuZCgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBudW1GaWxlcysrOworICAvLyBmaXJzdCBpZGVudGlmeSB0aGUgcHJvcGVydGllcyBhcmd1bWVudHMKKyAgYXV0byBwcm9wc0l0ZXIgPSBzdGQ6OmZpbmQoYXJncy5iZWdpbigpLCBhcmdzLmVuZCgpLCAiUFJPUEVSVElFUyIpOworICBpZiAocHJvcHNJdGVyID09IGFyZ3MuZW5kKCkgfHwgcHJvcHNJdGVyICsgMSA9PSBhcmdzLmVuZCgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbGxlZ2FsIGFyZ3VtZW50cywgbWF5YmUgbWlzc2luZyBhICIKKyAgICAgICAgICAgICAgICAgICAgIlBST1BFUlRJRVMgc3BlY2lmaWVyPyIpOworICAgIHJldHVybiBmYWxzZTsKICAgfQotICBpZiAocHJvcGVydHlQYWlycy5lbXB0eSgpKSB7Ci0gICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbGxlZ2FsIGFyZ3VtZW50cywgbWF5YmUgbWlzc2luZyAiCi0gICAgICAgICAgICAgICAgICAgICJhIFBST1BFUlRJRVMgc3BlY2lmaWVyPyIpOworCisgIGlmIChzdGQ6OmRpc3RhbmNlKHByb3BzSXRlciwgYXJncy5lbmQoKSkgJSAyICE9IDEpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIGNtTWFrZWZpbGUmIG1mID0gc3RhdHVzLkdldE1ha2VmaWxlKCk7CiAKLSAgLy8gbm93IGxvb3Agb3ZlciBhbGwgdGhlIHRhcmdldHMKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GaWxlczsgKytpKSB7Ci0gICAgaWYgKG1mLklzQWxpYXMoYXJnc1tpXSkpIHsKKyAgLy8gbG9vcCBvdmVyIGFsbCB0aGUgdGFyZ2V0cworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiB0bmFtZSA6IGNtU3RyaW5nUmFuZ2V7IGFyZ3MuYmVnaW4oKSwgcHJvcHNJdGVyIH0pIHsKKyAgICBpZiAobWYuSXNBbGlhcyh0bmFtZSkpIHsKICAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FuIG5vdCBiZSB1c2VkIG9uIGFuIEFMSUFTIHRhcmdldC4iKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYm9vbCByZXQgPSBTZXRPbmVUYXJnZXQoYXJnc1tpXSwgcHJvcGVydHlQYWlycywgJm1mKTsKLSAgICBpZiAoIXJldCkgeworICAgIGlmIChjbVRhcmdldCogdGFyZ2V0ID0gbWYuRmluZFRhcmdldFRvVXNlKHRuYW1lKSkgeworICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCB0aGUgcHJvcHMgYW5kIHNldCB0aGVtCisgICAgICBmb3IgKGF1dG8gayA9IHByb3BzSXRlciArIDE7IGsgIT0gYXJncy5lbmQoKTsgayArPSAyKSB7CisgICAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoKmssICooayArIDEpKTsKKyAgICAgICAgdGFyZ2V0LT5DaGVja1Byb3BlcnR5KCprLCAmbWYpOworICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICBzdGF0dXMuU2V0RXJyb3IoCi0gICAgICAgIGNtU3RyQ2F0KCJDYW4gbm90IGZpbmQgdGFyZ2V0IHRvIGFkZCBwcm9wZXJ0aWVzIHRvOiAiLCBhcmdzW2ldKSk7CisgICAgICAgIGNtU3RyQ2F0KCJDYW4gbm90IGZpbmQgdGFyZ2V0IHRvIGFkZCBwcm9wZXJ0aWVzIHRvOiAiLCB0bmFtZSkpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KLQotc3RhdGljIGJvb2wgU2V0T25lVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHByb3BlcnR5UGFpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpCi17Ci0gIGlmIChjbVRhcmdldCogdGFyZ2V0ID0gbWYtPkZpbmRUYXJnZXRUb1VzZSh0bmFtZSkpIHsKLSAgICAvLyBub3cgbG9vcCB0aHJvdWdoIGFsbCB0aGUgcHJvcHMgYW5kIHNldCB0aGVtCi0gICAgdW5zaWduZWQgaW50IGs7Ci0gICAgZm9yIChrID0gMDsgayA8IHByb3BlcnR5UGFpcnMuc2l6ZSgpOyBrID0gayArIDIpIHsKLSAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkocHJvcGVydHlQYWlyc1trXSwgcHJvcGVydHlQYWlyc1trICsgMV0pOwotICAgICAgdGFyZ2V0LT5DaGVja1Byb3BlcnR5KHByb3BlcnR5UGFpcnNba10sIG1mKTsKLSAgICB9Ci0gIH0KLSAgLy8gaWYgZmlsZSBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbWFrZWZpbGUsIHRoZW4gYWRkIGl0Ci0gIGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNldFRlc3RzUHJvcGVydGllc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKaW5kZXggMmU3YWVjYS4uYzRiZmY3NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKQEAgLTIsMTkgKzIsMTQgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgogCi0jaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgotCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21UZXN0LmgiCiAKLXN0YXRpYyBib29sIFNldE9uZVRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHByb3BlcnR5UGFpcnMsIGNtTWFrZWZpbGUqIG1mLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZXJyb3JzKTsKLQogYm9vbCBjbVNldFRlc3RzUHJvcGVydGllc0NvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKIHsKQEAgLTIzLDYxICsxOCwzMyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNtTWFrZWZpbGUmIG1mID0gc3RhdHVzLkdldE1ha2VmaWxlKCk7Ci0KLSAgLy8gZmlyc3QgY29sbGVjdCB1cCB0aGUgbGlzdCBvZiBmaWxlcwotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcGVydHlQYWlyczsKLSAgaW50IG51bUZpbGVzID0gMDsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBqOwotICBmb3IgKGogPSBhcmdzLmJlZ2luKCk7IGogIT0gYXJncy5lbmQoKTsgKytqKSB7Ci0gICAgaWYgKCpqID09ICJQUk9QRVJUSUVTIikgewotICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLCBuZXcgc3R5bGUKLSAgICAgICsrajsKLSAgICAgIGlmIChzdGQ6OmRpc3RhbmNlKGosIGFyZ3MuZW5kKCkpICUgMiAhPSAwKSB7Ci0gICAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNtOjphcHBlbmQocHJvcGVydHlQYWlycywgaiwgYXJncy5lbmQoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgbnVtRmlsZXMrKzsKLSAgfQotICBpZiAocHJvcGVydHlQYWlycy5lbXB0eSgpKSB7Ci0gICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbGxlZ2FsIGFyZ3VtZW50cywgbWF5YmUgIgotICAgICAgICAgICAgICAgICAgICAibWlzc2luZyBhIFBST1BFUlRJRVMgc3BlY2lmaWVyPyIpOworICAvLyBmaXJzdCBpZGVudGlmeSB0aGUgcHJvcGVydGllcyBhcmd1bWVudHMKKyAgYXV0byBwcm9wc0l0ZXIgPSBzdGQ6OmZpbmQoYXJncy5iZWdpbigpLCBhcmdzLmVuZCgpLCAiUFJPUEVSVElFUyIpOworICBpZiAocHJvcHNJdGVyID09IGFyZ3MuZW5kKCkgfHwgcHJvcHNJdGVyICsgMSA9PSBhcmdzLmVuZCgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbGxlZ2FsIGFyZ3VtZW50cywgbWF5YmUgbWlzc2luZyBhICIKKyAgICAgICAgICAgICAgICAgICAgIlBST1BFUlRJRVMgc3BlY2lmaWVyPyIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIC8vIG5vdyBsb29wIG92ZXIgYWxsIHRoZSB0YXJnZXRzCi0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgbnVtRmlsZXM7ICsraSkgewotICAgIHN0ZDo6c3RyaW5nIGVycm9yczsKLSAgICBib29sIHJldCA9IFNldE9uZVRlc3QoYXJnc1tpXSwgcHJvcGVydHlQYWlycywgJm1mLCBlcnJvcnMpOwotICAgIGlmICghcmV0KSB7Ci0gICAgICBzdGF0dXMuU2V0RXJyb3IoZXJyb3JzKTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIFNldE9uZVRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHByb3BlcnR5UGFpcnMsIGNtTWFrZWZpbGUqIG1mLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZXJyb3JzKQotewotICBpZiAoY21UZXN0KiB0ZXN0ID0gbWYtPkdldFRlc3QodG5hbWUpKSB7Ci0gICAgLy8gbm93IGxvb3AgdGhyb3VnaCBhbGwgdGhlIHByb3BzIGFuZCBzZXQgdGhlbQotICAgIHVuc2lnbmVkIGludCBrOwotICAgIGZvciAoayA9IDA7IGsgPCBwcm9wZXJ0eVBhaXJzLnNpemUoKTsgayA9IGsgKyAyKSB7Ci0gICAgICBpZiAoIXByb3BlcnR5UGFpcnNba10uZW1wdHkoKSkgewotICAgICAgICB0ZXN0LT5TZXRQcm9wZXJ0eShwcm9wZXJ0eVBhaXJzW2tdLCBwcm9wZXJ0eVBhaXJzW2sgKyAxXS5jX3N0cigpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZXJyb3JzID0gY21TdHJDYXQoIkNhbiBub3QgZmluZCB0ZXN0IHRvIGFkZCBwcm9wZXJ0aWVzIHRvOiAiLCB0bmFtZSk7CisgIGlmIChzdGQ6OmRpc3RhbmNlKHByb3BzSXRlciwgYXJncy5lbmQoKSkgJSAyICE9IDEpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIC8vIGxvb3Agb3ZlciBhbGwgdGhlIHRlc3RzCisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHRuYW1lIDogY21TdHJpbmdSYW5nZXsgYXJncy5iZWdpbigpLCBwcm9wc0l0ZXIgfSkgeworICAgIGlmIChjbVRlc3QqIHRlc3QgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRUZXN0KHRuYW1lKSkgeworICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCB0aGUgcHJvcHMgYW5kIHNldCB0aGVtCisgICAgICBmb3IgKGF1dG8gayA9IHByb3BzSXRlciArIDE7IGsgIT0gYXJncy5lbmQoKTsgayArPSAyKSB7CisgICAgICAgIGlmICghay0+ZW1wdHkoKSkgeworICAgICAgICAgIHRlc3QtPlNldFByb3BlcnR5KCprLCAoayArIDEpLT5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCJDYW4gbm90IGZpbmQgdGVzdCB0byBhZGQgcHJvcGVydGllcyB0bzogIiwgdG5hbWUpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TaXRlTmFtZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtU2l0ZU5hbWVDb21tYW5kLmN4eAppbmRleCBkNDdmMTIxLi5iMmQ5MDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TaXRlTmFtZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNpdGVOYW1lQ29tbWFuZC5jeHgKQEAgLTcyLDggKzcyLDcgQEAKICAgfQogI2VuZGlmCiAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZENhY2hlRGVmaW5pdGlvbigKLSAgICBhcmdzWzBdLCBzaXRlTmFtZS5jX3N0cigpLAotICAgICJOYW1lIG9mIHRoZSBjb21wdXRlci9zaXRlIHdoZXJlIGNvbXBpbGUgaXMgYmVpbmcgcnVuIiwKKyAgICBhcmdzWzBdLCBzaXRlTmFtZSwgIk5hbWUgb2YgdGhlIGNvbXB1dGVyL3NpdGUgd2hlcmUgY29tcGlsZSBpcyBiZWluZyBydW4iLAogICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKIAogICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNvdXJjZUZpbGUuY3h4IGIvU291cmNlL2NtU291cmNlRmlsZS5jeHgKaW5kZXggZmQ5Y2FjZC4uZWY0NGE1NyAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlRmlsZS5jeHgKKysrIGIvU291cmNlL2NtU291cmNlRmlsZS5jeHgKQEAgLTIsNyArMiw2IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKIAotI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtNDgsOSArNDcsOSBAQAogc3RkOjpzdHJpbmcgY29uc3QmIGNtU291cmNlRmlsZTo6R2V0T3JEZXRlcm1pbmVMYW5ndWFnZSgpCiB7CiAgIC8vIElmIHRoZSBsYW5ndWFnZSB3YXMgc2V0IGV4cGxpY2l0bHkgYnkgdGhlIHVzZXIgdGhlbiB1c2UgaXQuCi0gIGlmIChjb25zdCBjaGFyKiBsYW5nID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcExBTkdVQUdFKSkgeworICBpZiAoY21Qcm9wIGxhbmcgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wTEFOR1VBR0UpKSB7CiAgICAgLy8gQXNzaWduIHRvIG1lbWJlciBpbiBvcmRlciB0byByZXR1cm4gYSByZWZlcmVuY2UuCi0gICAgdGhpcy0+TGFuZ3VhZ2UgPSBsYW5nOworICAgIHRoaXMtPkxhbmd1YWdlID0gKmxhbmc7CiAgICAgcmV0dXJuIHRoaXMtPkxhbmd1YWdlOwogICB9CiAKQEAgLTgxLDggKzgwLDggQEAKIHN0ZDo6c3RyaW5nIGNtU291cmNlRmlsZTo6R2V0TGFuZ3VhZ2UoKSBjb25zdAogewogICAvLyBJZiB0aGUgbGFuZ3VhZ2Ugd2FzIHNldCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyIHRoZW4gdXNlIGl0LgotICBpZiAoY29uc3QgY2hhciogbGFuZyA9IHRoaXMtPkdldFByb3BlcnR5KHByb3BMQU5HVUFHRSkpIHsKLSAgICByZXR1cm4gbGFuZzsKKyAgaWYgKGNtUHJvcCBsYW5nID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcExBTkdVQUdFKSkgeworICAgIHJldHVybiAqbGFuZzsKICAgfQogCiAgIC8vIFVzZSB0aGUgbGFuZ3VhZ2UgZGV0ZXJtaW5lZCBmcm9tIHRoZSBmaWxlIGV4dGVuc2lvbi4KQEAgLTEzMCwxMyArMTI5LDExIEBACiAgIC8vIExvY2F0aW9uIHBhdGgKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxQYXRoID0gdGhpcy0+TG9jYXRpb24uR2V0RnVsbFBhdGgoKTsKICAgLy8gTGlzdCBvZiBleHRlbnNpb24gbGlzdHMKLSAgc3RkOjphcnJheTxzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QqLCAyPiBjb25zdCBleHRzTGlzdHMgPSB7Ci0gICAgeyAmbWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U291cmNlRXh0ZW5zaW9ucygpLAotICAgICAgJm1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhlYWRlckV4dGVuc2lvbnMoKSB9Ci0gIH07CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHRzID0KKyAgICBtYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRBbGxFeHRlbnNpb25zKCk7CiAKICAgLy8gVHJpZXMgdG8gZmluZCB0aGUgZmlsZSBpbiBhIGdpdmVuIGRpcmVjdG9yeQotICBhdXRvIGZpbmRJbkRpciA9IFt0aGlzLCAmZXh0c0xpc3RzLCAmbFBhdGhdKHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXIpIC0+IGJvb2wgeworICBhdXRvIGZpbmRJbkRpciA9IFt0aGlzLCAmZXh0cywgJmxQYXRoXShzdGQ6OnN0cmluZyBjb25zdCYgZGlyKSAtPiBib29sIHsKICAgICAvLyBDb21wdXRlIGZ1bGwgcGF0aAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGZ1bGxQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChsUGF0aCwgZGlyKTsKICAgICAvLyBUcnkgZnVsbCBwYXRoCkBAIC0xNDUsMTQgKzE0MiwxMiBAQAogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIFRyeSBmdWxsIHBhdGggd2l0aCBleHRlbnNpb24KLSAgICBmb3IgKGF1dG8mIGV4dHMgOiBleHRzTGlzdHMpIHsKLSAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGV4dCA6ICpleHRzKSB7Ci0gICAgICAgIGlmICghZXh0LmVtcHR5KCkpIHsKLSAgICAgICAgICBzdGQ6OnN0cmluZyBleHRQYXRoID0gY21TdHJDYXQoZnVsbFBhdGgsICcuJywgZXh0KTsKLSAgICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhleHRQYXRoKSkgewotICAgICAgICAgICAgdGhpcy0+RnVsbFBhdGggPSBleHRQYXRoOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQorICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGV4dCA6IGV4dHMpIHsKKyAgICAgIGlmICghZXh0LmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0UGF0aCA9IGNtU3RyQ2F0KGZ1bGxQYXRoLCAnLicsIGV4dCk7CisgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGV4dFBhdGgpKSB7CisgICAgICAgICAgdGhpcy0+RnVsbFBhdGggPSBleHRQYXRoOworICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMTc1LDExICsxNzAsOSBAQAogICAvLyBDb21wb3NlIGVycm9yCiAgIHN0ZDo6c3RyaW5nIGVyciA9CiAgICAgY21TdHJDYXQoIkNhbm5vdCBmaW5kIHNvdXJjZSBmaWxlOlxuICAiLCBsUGF0aCwgIlxuVHJpZWQgZXh0ZW5zaW9ucyIpOwotICBmb3IgKGF1dG8gZXh0cyA6IGV4dHNMaXN0cykgewotICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGV4dCA6ICpleHRzKSB7Ci0gICAgICBlcnIgKz0gIiAuIjsKLSAgICAgIGVyciArPSBleHQ7Ci0gICAgfQorICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgOiBleHRzKSB7CisgICAgZXJyICs9ICIgLiI7CisgICAgZXJyICs9IGV4dDsKICAgfQogICBpZiAoZXJyb3IgIT0gbnVsbHB0cikgewogICAgICplcnJvciA9IHN0ZDo6bW92ZShlcnIpOwpAQCAtMzE3LDE3ICszMTAsMTggQEAKICAgfQogCiAgIC8vIFBlcmZvcm0gdGhlIG5vcm1hbCBwcm9wZXJ0eSBsb29rdXAuCi0gIHJldHVybiB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgY21Qcm9wIHAgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgcmV0dXJuIHAgPyBwLT5jX3N0cigpIDogbnVsbHB0cjsKIH0KIAotY29uc3QgY2hhciogY21Tb3VyY2VGaWxlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKK2NtUHJvcCBjbVNvdXJjZUZpbGU6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAogewogICAvLyBDaGVjayBmb3IgY29tcHV0ZWQgcHJvcGVydGllcy4KICAgaWYgKHByb3AgPT0gcHJvcExPQ0FUSU9OKSB7CiAgICAgaWYgKHRoaXMtPkZ1bGxQYXRoLmVtcHR5KCkpIHsKICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gdGhpcy0+RnVsbFBhdGguY19zdHIoKTsKKyAgICByZXR1cm4gJnRoaXMtPkZ1bGxQYXRoOwogICB9CiAKICAgLy8gQ2hlY2sgZm9yIHRoZSBwcm9wZXJ0aWVzIHdpdGggYmFja3RyYWNlcy4KQEAgLTMzOCw3ICszMzIsNyBAQAogCiAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+SW5jbHVkZURpcmVjdG9yaWVzLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogCiAgIGlmIChwcm9wID09IHByb3BDT01QSUxFX09QVElPTlMpIHsKQEAgLTM0OCw3ICszNDIsNyBAQAogCiAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+Q29tcGlsZU9wdGlvbnMsICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAKICAgaWYgKHByb3AgPT0gcHJvcENPTVBJTEVfREVGSU5JVElPTlMpIHsKQEAgLTM1OCwxMCArMzUyLDEwIEBACiAKICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwogICAgIG91dHB1dCA9IGNtSm9pbih0aGlzLT5Db21waWxlRGVmaW5pdGlvbnMsICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAKLSAgY29uc3QgY2hhciogcmV0VmFsID0gdGhpcy0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICBjbVByb3AgcmV0VmFsID0gdGhpcy0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOwogICBpZiAoIXJldFZhbCkgewogICAgIGNtTWFrZWZpbGUgY29uc3QqIG1mID0gdGhpcy0+TG9jYXRpb24uR2V0TWFrZWZpbGUoKTsKICAgICBjb25zdCBib29sIGNoYWluID0KQEAgLTM2OSw2ICszNjMsNyBAQAogICAgIGlmIChjaGFpbikgewogICAgICAgcmV0dXJuIG1mLT5HZXRQcm9wZXJ0eShwcm9wLCBjaGFpbik7CiAgICAgfQorICAgIHJldHVybiBudWxscHRyOwogICB9CiAKICAgcmV0dXJuIHJldFZhbDsKQEAgLTM3NiwxMSArMzcxLDExIEBACiAKIGNvbnN0IGNoYXIqIGNtU291cmNlRmlsZTo6R2V0U2FmZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAogewotICBjb25zdCBjaGFyKiByZXQgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgY21Qcm9wIHJldCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOwogICBpZiAoIXJldCkgewogICAgIHJldHVybiAiIjsKICAgfQotICByZXR1cm4gcmV0OworICByZXR1cm4gcmV0LT5jX3N0cigpOwogfQogCiBib29sIGNtU291cmNlRmlsZTo6R2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Tb3VyY2VGaWxlLmggYi9Tb3VyY2UvY21Tb3VyY2VGaWxlLmgKaW5kZXggZTIyODI5Zi4uZTY2OTAxNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlRmlsZS5oCisrKyBiL1NvdXJjZS9jbVNvdXJjZUZpbGUuaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUHJvcGVydHlNYXAuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZUxvY2F0aW9uS2luZC5oIgpAQCAtNDUsNyArNDYsNyBAQAogICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKICAgLy8hIE1pZ2h0IHJldHVybiBhIG51bGxwdHIgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQgb3IgaW52YWxpZAotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CiAgIC8vISBBbHdheXMgcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIKICAgY29uc3QgY2hhciogR2V0U2FmZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgYm9vbCBHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CkBAIC0xNTcsNyArMTU4LDcgQEAKICAgIlxcLihDfEZ8TXxjfGNcXCtcXCt8Y2N8Y3BwfGN4eHxjdXxmfGY5MHxmb3J8ZnBwfGZ0bnxtfG1tfCIgICAgICAgICAgICAgICAgIFwKICAgInJjfGRlZnxyfG9kbHxpZGx8aHBqfGJhdCkkIgogCi0jZGVmaW5lIENNX1BDSF9SRUdFWCAiY21ha2VfcGNoXFwuKGh8aHh4KSQiCisjZGVmaW5lIENNX1BDSF9SRUdFWCAiY21ha2VfcGNoKF9bXi5dKyk/XFwuKGh8aHh4KSQiCiAKICNkZWZpbmUgQ01fUkVTT1VSQ0VfUkVHRVggIlxcLihwZGZ8cGxpc3R8cG5nfGpwZWd8anBnfHN0b3J5Ym9hcmR8eGNhc3NldHMpJCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlRmlsZUxvY2F0aW9uLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUZpbGVMb2NhdGlvbi5jeHgKaW5kZXggNWY4MDdiOC4uMjIyYmFmYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlRmlsZUxvY2F0aW9uLmN4eAorKysgYi9Tb3VyY2UvY21Tb3VyY2VGaWxlTG9jYXRpb24uY3h4CkBAIC00LDYgKzQsOCBAQAogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgpAQCAtOTksNyArMTAxLDcgQEAKICAgY21NYWtlZmlsZSBjb25zdCogbWYgPSB0aGlzLT5NYWtlZmlsZTsKICAgYXV0byBjbSA9IG1mLT5HZXRDTWFrZUluc3RhbmNlKCk7CiAgIGlmICghZ2ctPkdldExhbmd1YWdlRnJvbUV4dGVuc2lvbihleHQuY19zdHIoKSkuZW1wdHkoKSB8fAotICAgICAgY20tPklzU291cmNlRXh0ZW5zaW9uKGV4dCkgfHwgY20tPklzSGVhZGVyRXh0ZW5zaW9uKGV4dCkpIHsKKyAgICAgIGNtLT5Jc0FLbm93bkV4dGVuc2lvbihleHQpKSB7CiAgICAgLy8gVGhpcyBpcyBhIGtub3duIGV4dGVuc2lvbi4gIFVzZSB0aGUgZ2l2ZW4gZmlsZW5hbWUgd2l0aCBleHRlbnNpb24uCiAgICAgdGhpcy0+TmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShuYW1lKTsKICAgICB0aGlzLT5BbWJpZ3VvdXNFeHRlbnNpb24gPSBmYWxzZTsKQEAgLTE1MiwxMCArMTU0LDEwIEBACiAKICAgLy8gT25seSBhIGZpeGVkIHNldCBvZiBleHRlbnNpb25zIHdpbGwgYmUgdHJpZWQgdG8gbWF0Y2ggYSBmaWxlIG9uCiAgIC8vIGRpc2suICBPbmUgb2YgdGhlc2UgbXVzdCBtYXRjaCBpZiBsb2MgcmVmZXJzIHRvIHRoaXMgc291cmNlIGZpbGUuCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgPSB0aGlzLT5OYW1lLnN1YnN0cihsb2MuTmFtZS5zaXplKCkgKyAxKTsKKyAgYXV0byBleHQgPSBjbTo6c3RyaW5nX3ZpZXcodGhpcy0+TmFtZSkuc3Vic3RyKGxvYy5OYW1lLnNpemUoKSArIDEpOwogICBjbU1ha2VmaWxlIGNvbnN0KiBtZiA9IHRoaXMtPk1ha2VmaWxlOwogICBhdXRvIGNtID0gbWYtPkdldENNYWtlSW5zdGFuY2UoKTsKLSAgcmV0dXJuIGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHQpIHx8IGNtLT5Jc0hlYWRlckV4dGVuc2lvbihleHQpOworICByZXR1cm4gY20tPklzQUtub3duRXh0ZW5zaW9uKGV4dCk7CiB9CiAKIGJvb2wgY21Tb3VyY2VGaWxlTG9jYXRpb246Ok1hdGNoZXMoY21Tb3VyY2VGaWxlTG9jYXRpb24gY29uc3QmIGxvYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmN4eAppbmRleCA4YzNlYzlmLi4xNTUwNjhjYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlR3JvdXAuY3h4CisrKyBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmN4eApAQCAtNCw2ICs0LDggQEAKIAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKIAogY2xhc3MgY21Tb3VyY2VHcm91cEludGVybmFscwpAQCAtMTYsNyArMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXJlbnROYW1lKQogICA6IE5hbWUoc3RkOjptb3ZlKG5hbWUpKQogewotICB0aGlzLT5JbnRlcm5hbCA9IG5ldyBjbVNvdXJjZUdyb3VwSW50ZXJuYWxzOworICB0aGlzLT5JbnRlcm5hbCA9IGNtOjptYWtlX3VuaXF1ZTxjbVNvdXJjZUdyb3VwSW50ZXJuYWxzPigpOwogICB0aGlzLT5TZXRHcm91cFJlZ2V4KHJlZ2V4KTsKICAgaWYgKHBhcmVudE5hbWUpIHsKICAgICB0aGlzLT5GdWxsTmFtZSA9IGNtU3RyQ2F0KHBhcmVudE5hbWUsICdcXCcpOwpAQCAtMjQsMTAgKzI2LDcgQEAKICAgdGhpcy0+RnVsbE5hbWUgKz0gdGhpcy0+TmFtZTsKIH0KIAotY21Tb3VyY2VHcm91cDo6fmNtU291cmNlR3JvdXAoKQotewotICBkZWxldGUgdGhpcy0+SW50ZXJuYWw7Ci19CitjbVNvdXJjZUdyb3VwOjp+Y21Tb3VyY2VHcm91cCgpID0gZGVmYXVsdDsKIAogY21Tb3VyY2VHcm91cDo6Y21Tb3VyY2VHcm91cChjbVNvdXJjZUdyb3VwIGNvbnN0JiByKQogewpAQCAtMzYsNyArMzUsNyBAQAogICB0aGlzLT5Hcm91cFJlZ2V4ID0gci5Hcm91cFJlZ2V4OwogICB0aGlzLT5Hcm91cEZpbGVzID0gci5Hcm91cEZpbGVzOwogICB0aGlzLT5Tb3VyY2VGaWxlcyA9IHIuU291cmNlRmlsZXM7Ci0gIHRoaXMtPkludGVybmFsID0gbmV3IGNtU291cmNlR3JvdXBJbnRlcm5hbHMoKnIuSW50ZXJuYWwpOworICB0aGlzLT5JbnRlcm5hbCA9IGNtOjptYWtlX3VuaXF1ZTxjbVNvdXJjZUdyb3VwSW50ZXJuYWxzPigqci5JbnRlcm5hbCk7CiB9CiAKIGNtU291cmNlR3JvdXAmIGNtU291cmNlR3JvdXA6Om9wZXJhdG9yPShjbVNvdXJjZUdyb3VwIGNvbnN0JiByKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlR3JvdXAuaCBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmgKaW5kZXggNTgxZGM1ZC4uNjIzY2RlZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlR3JvdXAuaAorKysgYi9Tb3VyY2UvY21Tb3VyY2VHcm91cC5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTEyMiw3ICsxMjMsNyBAQAogICAgKi8KICAgc3RkOjp2ZWN0b3I8Y29uc3QgY21Tb3VyY2VGaWxlKj4gU291cmNlRmlsZXM7CiAKLSAgY21Tb3VyY2VHcm91cEludGVybmFscyogSW50ZXJuYWw7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbVNvdXJjZUdyb3VwSW50ZXJuYWxzPiBJbnRlcm5hbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlR3JvdXBDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUdyb3VwQ29tbWFuZC5jeHgKaW5kZXggY2M2Mjk1Mi4uYmI3NWExNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlR3JvdXBDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21Tb3VyY2VHcm91cENvbW1hbmQuY3h4CkBAIC03LDcgKzcsOCBAQAogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VHcm91cC5oIgpAQCAtMzAsMTggKzMxLDYgQEAKICAgcmV0dXJuIGNtVG9rZW5pemUocGF0aCwgIlxcLyIpOwogfQogCi1zdGQ6OnN0cmluZyBnZXRGdWxsRmlsZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGN1cnJlbnRQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKQotewotICBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9IHBhdGg7Ci0KLSAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChwYXRoKSkgewotICAgIGZ1bGxQYXRoID0gY21TdHJDYXQoY3VycmVudFBhdGgsICcvJywgcGF0aCk7Ci0gIH0KLQotICByZXR1cm4gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChmdWxsUGF0aCk7Ci19Ci0KIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBnZXRTb3VyY2VHcm91cEZpbGVzUGF0aHMoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGZpbGVzKQogewpAQCAtMTI0LDcgKzExMyw4IEBACiAgICAgICAgIGVycm9yTXNnID0gIkNvdWxkIG5vdCBjcmVhdGUgc291cmNlIGdyb3VwIGZvciBmaWxlOiAiICsgc2dGaWxlc1BhdGg7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZ1bGxQYXRoID0gZ2V0RnVsbEZpbGVQYXRoKHJvb3QsIHNnRmlsZXNQYXRoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZ1bGxQYXRoID0KKyAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzZ0ZpbGVzUGF0aCwgcm9vdCk7CiAgICAgICBzZy0+QWRkR3JvdXBGaWxlKGZ1bGxQYXRoKTsKICAgICB9CiAgIH0KQEAgLTE0Nyw3ICsxMzcsNyBAQAogYm9vbCBpc0V4cGVjdGVkT3B0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmd1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFeHBlY3RlZE9wdGlvbnMmIGV4cGVjdGVkT3B0aW9ucykKIHsKLSAgcmV0dXJuIGNtQ29udGFpbnMoZXhwZWN0ZWRPcHRpb25zLCBhcmd1bWVudCk7CisgIHJldHVybiBjbTo6Y29udGFpbnMoZXhwZWN0ZWRPcHRpb25zLCBhcmd1bWVudCk7CiB9CiAKIHZvaWQgcGFyc2VBcmd1bWVudHMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmdzLApAQCAtMjU1LDEwICsyNDUsOCBAQAogICAgICAgcGFyc2VkQXJndW1lbnRzW2tGaWxlc09wdGlvbk5hbWVdOwogICAgIGZvciAoYXV0byBjb25zdCYgZmlsZXNBcmcgOiBmaWxlc0FyZ3VtZW50cykgewogICAgICAgc3RkOjpzdHJpbmcgc3JjID0gZmlsZXNBcmc7Ci0gICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHNyYykpIHsKLSAgICAgICAgc3JjID0gY21TdHJDYXQobWYuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAnLycsIGZpbGVzQXJnKTsKLSAgICAgIH0KLSAgICAgIHNyYyA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3JjKTsKKyAgICAgIHNyYyA9CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3JjLCBtZi5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogICAgICAgc2ctPkFkZEdyb3VwRmlsZShzcmMpOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmN4eCBiL1NvdXJjZS9jbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViODY5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5jeHgKQEAgLTAsMCArMSw1MzggQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKworI2luY2x1ZGUgImNtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlIDxjbS9pdGVyYXRvcj4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKKyNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgorI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiY21UYXJnZXQuaCIKKyNpbmNsdWRlICJjbWFrZS5oIgorCituYW1lc3BhY2UgeworCisjZGVmaW5lIEZFQVRVUkVfU1RSSU5HKEYpICwgI0YKK2NvbnN0IGNoYXIqIGNvbnN0IENfRkVBVFVSRVNbXSA9IHsgbnVsbHB0ciBGT1JfRUFDSF9DX0ZFQVRVUkUoCisgIEZFQVRVUkVfU1RSSU5HKSB9OworCitjb25zdCBjaGFyKiBjb25zdCBDWFhfRkVBVFVSRVNbXSA9IHsgbnVsbHB0ciBGT1JfRUFDSF9DWFhfRkVBVFVSRSgKKyAgRkVBVFVSRV9TVFJJTkcpIH07CisKK2NvbnN0IGNoYXIqIGNvbnN0IENVREFfRkVBVFVSRVNbXSA9IHsgbnVsbHB0ciBGT1JfRUFDSF9DVURBX0ZFQVRVUkUoCisgIEZFQVRVUkVfU1RSSU5HKSB9OworI3VuZGVmIEZFQVRVUkVfU1RSSU5HCisKK3N0cnVjdCBTdGFuZGFyZE5lZWRlZAoreworICBpbnQgaW5kZXg7CisgIGludCB2YWx1ZTsKK307CisKK3N0cnVjdCBTdGFuYXJkTGV2ZWxDb21wdXRlcgoreworICBleHBsaWNpdCBTdGFuYXJkTGV2ZWxDb21wdXRlcihzdGQ6OnN0cmluZyBsYW5nLCBzdGQ6OnZlY3RvcjxpbnQ+IGxldmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxldmVsc1N0cikKKyAgICA6IExhbmd1YWdlKHN0ZDo6bW92ZShsYW5nKSkKKyAgICAsIExldmVscyhzdGQ6Om1vdmUobGV2ZWxzKSkKKyAgICAsIExldmVsc0FzU3RyaW5ncyhzdGQ6Om1vdmUobGV2ZWxzU3RyKSkKKyAgeworICAgIGFzc2VydChsZXZlbHMuc2l6ZSgpID09IGxldmVsc1N0ci5zaXplKCkpOworICB9CisKKyAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZU9wdGlvbkRlZihjbU1ha2VmaWxlKiBtYWtlZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0CisgIHsKKworICAgIGNvbnN0IGF1dG8mIHN0ZHMgPSB0aGlzLT5MZXZlbHM7CisgICAgY29uc3QgYXV0byYgc3Rkc1N0cmluZ3MgPSB0aGlzLT5MZXZlbHNBc1N0cmluZ3M7CisKKyAgICBjb25zdCBjaGFyKiBkZWZhdWx0U3RkID0gbWFrZWZpbGUtPkdldERlZmluaXRpb24oCisgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+TGFuZ3VhZ2UsICJfU1RBTkRBUkRfREVGQVVMVCIpKTsKKyAgICBpZiAoIWRlZmF1bHRTdGQgfHwgISpkZWZhdWx0U3RkKSB7CisgICAgICAvLyB0aGlzIGNvbXBpbGVyIGhhcyBubyBub3Rpb24gb2YgbGFuZ3VhZ2Ugc3RhbmRhcmQgbGV2ZWxzCisgICAgICByZXR1cm4gc3RkOjpzdHJpbmd7fTsKKyAgICB9CisKKyAgICBib29sIGV4dCA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBleHRQcm9wVmFsdWUgPSB0YXJnZXQtPkdldExhbmd1YWdlRXh0ZW5zaW9ucyh0aGlzLT5MYW5ndWFnZSkpIHsKKyAgICAgIGlmIChjbUlzT2ZmKCpleHRQcm9wVmFsdWUpKSB7CisgICAgICAgIGV4dCA9IGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIGNtUHJvcCBzdGFuZGFyZFByb3AgPSB0YXJnZXQtPkdldExhbmd1YWdlU3RhbmRhcmQodGhpcy0+TGFuZ3VhZ2UsIGNvbmZpZyk7CisgICAgaWYgKCFzdGFuZGFyZFByb3ApIHsKKyAgICAgIGlmIChleHQpIHsKKyAgICAgICAgLy8gTm8gbGFuZ3VhZ2Ugc3RhbmRhcmQgaXMgc3BlY2lmaWVkIGFuZCBleHRlbnNpb25zIGFyZSBub3QgZGlzYWJsZWQuCisgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgY29tcGlsZXIgbmVlZHMgYSBmbGFnIHRvIGVuYWJsZSBleHRlbnNpb25zLgorICAgICAgICByZXR1cm4gY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLCAiX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5ne307CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgY29uc3QgdHlwZSA9IGV4dCA/ICJFWFRFTlNJT04iIDogIlNUQU5EQVJEIjsKKworICAgIGlmICh0YXJnZXQtPkdldExhbmd1YWdlU3RhbmRhcmRSZXF1aXJlZCh0aGlzLT5MYW5ndWFnZSkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIG9wdGlvbl9mbGFnID0gY21TdHJDYXQoCisgICAgICAgICJDTUFLRV8iLCB0aGlzLT5MYW5ndWFnZSwgKnN0YW5kYXJkUHJvcCwgIl8iLCB0eXBlLCAiX0NPTVBJTEVfT1BUSU9OIik7CisKKyAgICAgIGNvbnN0IGNoYXIqIG9wdCA9CisgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKG9wdGlvbl9mbGFnKTsKKyAgICAgIGlmICghb3B0KSB7CisgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOworICAgICAgICBlIDw8ICJUYXJnZXQgXCIiIDw8IHRhcmdldC0+R2V0TmFtZSgpCisgICAgICAgICAgPDwgIlwiIHJlcXVpcmVzIHRoZSBsYW5ndWFnZSAiCisgICAgICAgICAgICAgImRpYWxlY3QgXCIiCisgICAgICAgICAgPDwgdGhpcy0+TGFuZ3VhZ2UgPDwgKnN0YW5kYXJkUHJvcCA8PCAiXCIgIgorICAgICAgICAgIDw8IChleHQgPyAiKHdpdGggY29tcGlsZXIgZXh0ZW5zaW9ucykiIDogIiIpCisgICAgICAgICAgPDwgIiwgYnV0IENNYWtlICIKKyAgICAgICAgICAgICAiZG9lcyBub3Qga25vdyB0aGUgY29tcGlsZSBmbGFncyB0byB1c2UgdG8gZW5hYmxlIGl0LiI7CisgICAgICAgIG1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBvcHRpb25fZmxhZzsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBzdGFuZGFyZFN0cigqc3RhbmRhcmRQcm9wKTsKKyAgICBpZiAodGhpcy0+TGFuZ3VhZ2UgPT0gIkNVREEiICYmIHN0YW5kYXJkU3RyID09ICI5OCIpIHsKKyAgICAgIHN0YW5kYXJkU3RyID0gIjAzIjsKKyAgICB9CisKKyAgICBpbnQgc3RhbmRhcmRWYWx1ZSA9IC0xOworICAgIGludCBkZWZhdWx0VmFsdWUgPSAtMTsKKyAgICB0cnkgeworICAgICAgc3RhbmRhcmRWYWx1ZSA9IHN0ZDo6c3RvaShzdGFuZGFyZFN0cik7CisgICAgICBkZWZhdWx0VmFsdWUgPSBzdGQ6OnN0b2koZGVmYXVsdFN0ZCk7CisgICAgfSBjYXRjaCAoc3RkOjppbnZhbGlkX2FyZ3VtZW50JikgeworICAgICAgLy8gZmFsbCB0aHJvdWdoIGFzIHdlIHdhbnQgYW4gZXJyb3IKKyAgICAgIC8vIHdoZW4gd2UgY2FuJ3QgZmluZCB0aGUgYmFkIHZhbHVlIGluIHRoZSBgc3Rkc2AgdmVjdG9yCisgICAgfQorCisgICAgYXV0byBzdGRJdCA9IHN0ZDo6ZmluZChjbTo6Y2JlZ2luKHN0ZHMpLCBjbTo6Y2VuZChzdGRzKSwgc3RhbmRhcmRWYWx1ZSk7CisgICAgaWYgKHN0ZEl0ID09IGNtOjpjZW5kKHN0ZHMpKSB7CisgICAgICBzdGQ6OnN0cmluZyBlID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+TGFuZ3VhZ2UsICJfU1RBTkRBUkQgaXMgc2V0IHRvIGludmFsaWQgdmFsdWUgJyIsCisgICAgICAgICAgICAgICAgIHN0YW5kYXJkU3RyLCAiJyIpOworICAgICAgbWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldEJhY2t0cmFjZSgpKTsKKyAgICAgIHJldHVybiBzdGQ6OnN0cmluZ3t9OworICAgIH0KKworICAgIGF1dG8gZGVmYXVsdFN0ZEl0ID0KKyAgICAgIHN0ZDo6ZmluZChjbTo6Y2JlZ2luKHN0ZHMpLCBjbTo6Y2VuZChzdGRzKSwgZGVmYXVsdFZhbHVlKTsKKyAgICBpZiAoZGVmYXVsdFN0ZEl0ID09IGNtOjpjZW5kKHN0ZHMpKSB7CisgICAgICBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfU1RBTkRBUkRfREVGQVVMVCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RkLCAiJyIpOworICAgICAgbWFrZWZpbGUtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsIGUpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5ne307CisgICAgfQorCisgICAgLy8gSWYgdGhlIHN0YW5kYXJkIHJlcXVlc3RlZCBpcyBvbGRlciB0aGFuIHRoZSBjb21waWxlcidzIGRlZmF1bHQKKyAgICAvLyB0aGVuIHdlIG5lZWQgdG8gdXNlIGEgZmxhZyB0byBjaGFuZ2UgaXQuCisgICAgaWYgKHN0ZEl0IDw9IGRlZmF1bHRTdGRJdCkgeworICAgICAgYXV0byBvZmZzZXQgPSBzdGQ6OmRpc3RhbmNlKGNtOjpjYmVnaW4oc3RkcyksIHN0ZEl0KTsKKyAgICAgIHJldHVybiBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+TGFuZ3VhZ2UsIHN0ZHNTdHJpbmdzW29mZnNldF0sICJfIiwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAiX0NPTVBJTEVfT1BUSU9OIik7CisgICAgfQorCisgICAgLy8gVGhlIHN0YW5kYXJkIHJlcXVlc3RlZCBpcyBhdCBsZWFzdCBhcyBuZXcgYXMgdGhlIGNvbXBpbGVyJ3MgZGVmYXVsdCwKKyAgICAvLyBhbmQgdGhlIHN0YW5kYXJkIHJlcXVlc3QgaXMgbm90IHJlcXVpcmVkLiAgRGVjYXkgdG8gdGhlIG5ld2VzdCBzdGFuZGFyZAorICAgIC8vIGZvciB3aGljaCBhIGZsYWcgaXMgZGVmaW5lZC4KKyAgICBmb3IgKDsgZGVmYXVsdFN0ZEl0IDwgc3RkSXQ7IC0tc3RkSXQpIHsKKyAgICAgIGF1dG8gb2Zmc2V0ID0gc3RkOjpkaXN0YW5jZShjbTo6Y2JlZ2luKHN0ZHMpLCBzdGRJdCk7CisgICAgICBzdGQ6OnN0cmluZyBvcHRpb25fZmxhZyA9CisgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5MYW5ndWFnZSwgc3Rkc1N0cmluZ3Nbb2Zmc2V0XSwgIl8iLCB0eXBlLAorICAgICAgICAgICAgICAgICAiX0NPTVBJTEVfT1BUSU9OIik7CisgICAgICBpZiAodGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24ob3B0aW9uX2ZsYWcpKSB7CisgICAgICAgIHJldHVybiBvcHRpb25fZmxhZzsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpzdHJpbmd7fTsKKyAgfQorCisgIGJvb2wgR2V0TmV3UmVxdWlyZWRTdGFuZGFyZChjbU1ha2VmaWxlKiBtYWtlZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YXJnZXROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3AgY3VycmVudExhbmdTdGFuZGFyZFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIG5ld1JlcXVpcmVkU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0CisgIHsKKyAgICBpZiAoY3VycmVudExhbmdTdGFuZGFyZFZhbHVlKSB7CisgICAgICBuZXdSZXF1aXJlZFN0YW5kYXJkID0gKmN1cnJlbnRMYW5nU3RhbmRhcmRWYWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgbmV3UmVxdWlyZWRTdGFuZGFyZC5jbGVhcigpOworICAgIH0KKworICAgIGF1dG8gbmVlZGVkID0gdGhpcy0+SGlnaGVzdFN0YW5kYXJkTmVlZGVkKG1ha2VmaWxlLCBmZWF0dXJlKTsKKworICAgIGNtUHJvcCBleGlzdGluZ1N0YW5kYXJkID0gY3VycmVudExhbmdTdGFuZGFyZFZhbHVlOworICAgIGlmIChleGlzdGluZ1N0YW5kYXJkID09IG51bGxwdHIpIHsKKyAgICAgIGNtUHJvcCBkZWZhdWx0U3RhbmRhcmQgPSBtYWtlZmlsZS0+R2V0RGVmKAorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+TGFuZ3VhZ2UsICJfU1RBTkRBUkRfREVGQVVMVCIpKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGRlZmF1bHRTdGFuZGFyZCkpIHsKKyAgICAgICAgZXhpc3RpbmdTdGFuZGFyZCA9IGRlZmF1bHRTdGFuZGFyZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGV4aXN0aW5nTGV2ZWxJdGVyID0gY206OmNlbmQodGhpcy0+TGV2ZWxzKTsKKyAgICBpZiAoZXhpc3RpbmdTdGFuZGFyZCkgeworICAgICAgZXhpc3RpbmdMZXZlbEl0ZXIgPQorICAgICAgICBzdGQ6OmZpbmQoY206OmNiZWdpbih0aGlzLT5MZXZlbHMpLCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLAorICAgICAgICAgICAgICAgICAgc3RkOjpzdG9pKCpleGlzdGluZ1N0YW5kYXJkKSk7CisgICAgICBpZiAoZXhpc3RpbmdMZXZlbEl0ZXIgPT0gY206OmNlbmQodGhpcy0+TGV2ZWxzKSkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0KKyAgICAgICAgICBjbVN0ckNhdCgiVGhlICIsIHRoaXMtPkxhbmd1YWdlLCAiX1NUQU5EQVJEIHByb3BlcnR5IG9uIHRhcmdldCBcIiIsCisgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZSwgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsCisgICAgICAgICAgICAgICAgICAgKmV4aXN0aW5nU3RhbmRhcmQsICJcIi4iKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgKmVycm9yID0gZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuZWVkZWQuaW5kZXggIT0gLTEpIHsKKyAgICAgIC8vIEVuc3VyZSB0aGUgQysrIGxhbmd1YWdlIGxldmVsIGlzIGhpZ2ggZW5vdWdoIHRvIHN1cHBvcnQKKyAgICAgIC8vIHRoZSBuZWVkZWQgQysrIGZlYXR1cmVzLgorICAgICAgaWYgKGV4aXN0aW5nTGV2ZWxJdGVyID09IGNtOjpjZW5kKHRoaXMtPkxldmVscykgfHwKKyAgICAgICAgICBleGlzdGluZ0xldmVsSXRlciA8IHRoaXMtPkxldmVscy5iZWdpbigpICsgbmVlZGVkLmluZGV4KSB7CisgICAgICAgIG5ld1JlcXVpcmVkU3RhbmRhcmQgPSB0aGlzLT5MZXZlbHNBc1N0cmluZ3NbbmVlZGVkLmluZGV4XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGJvb2wgSGF2ZVN0YW5kYXJkQXZhaWxhYmxlKGNtTWFrZWZpbGUqIG1ha2VmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmVhdHVyZSkgY29uc3QKKyAgeworICAgIGNtUHJvcCBkZWZhdWx0U3RhbmRhcmQgPSBtYWtlZmlsZS0+R2V0RGVmKAorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7CisgICAgaWYgKCFkZWZhdWx0U3RhbmRhcmQpIHsKKyAgICAgIG1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgIE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgaXMgbm90IHNldC4gIENPTVBJTEVfRkVBVFVSRVMgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICJub3QgZnVsbHkgY29uZmlndXJlZCBmb3IgdGhpcyBjb21waWxlci4iKSk7CisgICAgICAvLyBSZXR1cm4gdHJ1ZSBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IHRyeSB0byBsb29rdXAgdGhlIGRlZmF1bHQgc3RhbmRhcmQuCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gY29udmVydCBkZWZhdWx0U3RhbmRhcmQgdG8gYW4gaW50ZWdlcgorICAgIGlmIChzdGQ6OmZpbmQoY206OmNiZWdpbih0aGlzLT5MZXZlbHMpLCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLAorICAgICAgICAgICAgICAgICAgc3RkOjpzdG9pKCpkZWZhdWx0U3RhbmRhcmQpKSA9PSBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpKSB7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoIlRoZSBDTUFLRV8iLCB0aGlzLT5MYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgdmFyaWFibGUgY29udGFpbnMgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlOiBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlZmF1bHRTdGFuZGFyZCwgIlwiLiIpOworICAgICAgbWFrZWZpbGUtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsIGUpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNtUHJvcCBleGlzdGluZ1N0YW5kYXJkID0KKyAgICAgIHRhcmdldC0+R2V0TGFuZ3VhZ2VTdGFuZGFyZCh0aGlzLT5MYW5ndWFnZSwgY29uZmlnKTsKKyAgICBpZiAoIWV4aXN0aW5nU3RhbmRhcmQpIHsKKyAgICAgIGV4aXN0aW5nU3RhbmRhcmQgPSBkZWZhdWx0U3RhbmRhcmQ7CisgICAgfQorCisgICAgYXV0byBleGlzdGluZ0xldmVsSXRlciA9CisgICAgICBzdGQ6OmZpbmQoY206OmNiZWdpbih0aGlzLT5MZXZlbHMpLCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLAorICAgICAgICAgICAgICAgIHN0ZDo6c3RvaSgqZXhpc3RpbmdTdGFuZGFyZCkpOworICAgIGlmIChleGlzdGluZ0xldmVsSXRlciA9PSBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpKSB7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0KKyAgICAgICAgY21TdHJDYXQoIlRoZSAiLCB0aGlzLT5MYW5ndWFnZSwgIl9TVEFOREFSRCBwcm9wZXJ0eSBvbiB0YXJnZXQgXCIiLAorICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSwgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsCisgICAgICAgICAgICAgICAgICpleGlzdGluZ1N0YW5kYXJkLCAiXCIuIik7CisgICAgICBtYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYXV0byBuZWVkZWQgPSB0aGlzLT5IaWdoZXN0U3RhbmRhcmROZWVkZWQobWFrZWZpbGUsIGZlYXR1cmUpOworCisgICAgcmV0dXJuIChuZWVkZWQuaW5kZXggPT0gLTEpIHx8CisgICAgICAodGhpcy0+TGV2ZWxzLmJlZ2luKCkgKyBuZWVkZWQuaW5kZXgpIDw9IGV4aXN0aW5nTGV2ZWxJdGVyOworICB9CisKKyAgU3RhbmRhcmROZWVkZWQgSGlnaGVzdFN0YW5kYXJkTmVlZGVkKGNtTWFrZWZpbGUqIG1ha2VmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZlYXR1cmUpIGNvbnN0CisgIHsKKyAgICBzdGQ6OnN0cmluZyBwcmVmaXggPSBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+TGFuZ3VhZ2UpOworICAgIFN0YW5kYXJkTmVlZGVkIG1heExldmVsID0geyAtMSwgLTEgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRoaXMtPkxldmVscy5zaXplKCk7ICsraSkgeworICAgICAgaWYgKGNvbnN0IGNoYXIqIHByb3AgPSBtYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKKyAgICAgICAgICAgIGNtU3RyQ2F0KHByZWZpeCwgdGhpcy0+TGV2ZWxzQXNTdHJpbmdzW2ldLCAiX0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcCk7CisgICAgICAgIGlmIChjbTo6Y29udGFpbnMocHJvcHMsIGZlYXR1cmUpKSB7CisgICAgICAgICAgbWF4TGV2ZWwgPSB7IHN0YXRpY19jYXN0PGludD4oaSksIHRoaXMtPkxldmVsc1tpXSB9OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYXhMZXZlbDsKKyAgfQorCisgIGJvb2wgSXNMYXRlclN0YW5kYXJkKGludCBsaHMsIGludCByaHMpIGNvbnN0CisgIHsKKyAgICBhdXRvIHJoc0l0ID0KKyAgICAgIHN0ZDo6ZmluZChjbTo6Y2JlZ2luKHRoaXMtPkxldmVscyksIGNtOjpjZW5kKHRoaXMtPkxldmVscyksIHJocyk7CisKKyAgICByZXR1cm4gc3RkOjpmaW5kKHJoc0l0LCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLCBsaHMpICE9CisgICAgICBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpOworICB9CisKKyAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2U7CisgIHN0ZDo6dmVjdG9yPGludD4gTGV2ZWxzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGV2ZWxzQXNTdHJpbmdzOworfTsKKworc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBTdGFuYXJkTGV2ZWxDb21wdXRlcj4gU3RhbmRhcmRDb21wdXRlck1hcHBpbmcgPQorICB7CisgICAgeyAiQyIsCisgICAgICBTdGFuYXJkTGV2ZWxDb21wdXRlcnsgIkMiLCBzdGQ6OnZlY3RvcjxpbnQ+eyA5MCwgOTksIDExIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+eyAiOTAiLCAiOTkiLCAiMTEiIH0gfSB9LAorICAgIHsgIkNYWCIsCisgICAgICBTdGFuYXJkTGV2ZWxDb21wdXRlcnsKKyAgICAgICAgIkNYWCIsIHN0ZDo6dmVjdG9yPGludD57IDk4LCAxMSwgMTQsIDE3LCAyMCB9LAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz57ICI5OCIsICIxMSIsICIxNCIsICIxNyIsICIyMCIgfSB9IH0sCisgICAgeyAiQ1VEQSIsCisgICAgICBTdGFuYXJkTGV2ZWxDb21wdXRlcnsKKyAgICAgICAgIkNVREEiLCBzdGQ6OnZlY3RvcjxpbnQ+eyAwMywgMTEsIDE0LCAxNywgMjAgfSwKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+eyAiMDMiLCAiMTEiLCAiMTQiLCAiMTciLCAiMjAiIH0gfSB9LAorICAgIHsgIk9CSkMiLAorICAgICAgU3RhbmFyZExldmVsQ29tcHV0ZXJ7ICJPQkpDIiwgc3RkOjp2ZWN0b3I8aW50PnsgOTAsIDk5LCAxMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPnsgIjkwIiwgIjk5IiwgIjExIiB9IH0gfSwKKyAgICB7ICJPQkpDWFgiLAorICAgICAgU3RhbmFyZExldmVsQ29tcHV0ZXJ7CisgICAgICAgICJPQkpDWFgiLCBzdGQ6OnZlY3RvcjxpbnQ+eyA5OCwgMTEsIDE0LCAxNywgMjAgfSwKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+eyAiOTgiLCAiMTEiLCAiMTQiLCAiMTciLCAiMjAiIH0gfSB9LAorICB9OworfQorCitzdGQ6OnN0cmluZyBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcjo6R2V0Q29tcGlsZU9wdGlvbkRlZigKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0Cit7CisgIGNvbnN0IGF1dG8mIG1hcHBpbmcgPSBTdGFuZGFyZENvbXB1dGVyTWFwcGluZy5maW5kKGxhbmcpOworICBpZiAobWFwcGluZyA9PSBjbTo6Y2VuZChTdGFuZGFyZENvbXB1dGVyTWFwcGluZykpIHsKKyAgICByZXR1cm4gc3RkOjpzdHJpbmd7fTsKKyAgfQorCisgIHJldHVybiBtYXBwaW5nLT5zZWNvbmQuR2V0Q29tcGlsZU9wdGlvbkRlZih0aGlzLT5NYWtlZmlsZSwgdGFyZ2V0LCBjb25maWcpOworfQorCitib29sIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyOjpBZGRSZXF1aXJlZFRhcmdldEZlYXR1cmUoCisgIGNtVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLCBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Cit7CisgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoZmVhdHVyZSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX0ZFQVRVUkVTIiwgZmVhdHVyZSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBzdGQ6OnN0cmluZyBsYW5nOworICBpZiAoIXRoaXMtPkNoZWNrQ29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKHRhcmdldC0+R2V0TmFtZSgpLCBmZWF0dXJlLCBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfRkVBVFVSRVMiLCBmZWF0dXJlKTsKKworICAvLyBGSVhNRTogQWRkIGEgcG9saWN5IHRvIGF2b2lkIHVwZGF0aW5nIHRoZSA8TEFORz5fU1RBTkRBUkQgdGFyZ2V0CisgIC8vIHByb3BlcnR5IGR1ZSB0byBDT01QSUxFX0ZFQVRVUkVTLiAgVGhlIGxhbmd1YWdlIHN0YW5kYXJkIHNlbGVjdGlvbgorICAvLyBzaG91bGQgYmUgZG9uZSBwdXJlbHkgYXQgZ2VuZXJhdGUgdGltZSBiYXNlZCBvbiB3aGF0ZXZlciB0aGUgcHJvamVjdAorICAvLyBjb2RlIHB1dCBpbiB0aGVzZSBwcm9wZXJ0aWVzIGV4cGxpY2l0bHkuICBUaGF0IGlzIG1vc3RseSB0cnVlIG5vdywKKyAgLy8gYnV0IGZvciBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gY29udGludWUgdXBkYXRpbmcgdGhlIHByb3BlcnR5IGhlcmUuCisgIHN0ZDo6c3RyaW5nIG5ld1JlcXVpcmVkU3RhbmRhcmQ7CisgIGJvb2wgbmV3UmVxdWlyZWQgPSB0aGlzLT5HZXROZXdSZXF1aXJlZFN0YW5kYXJkKAorICAgIHRhcmdldC0+R2V0TmFtZSgpLCBmZWF0dXJlLAorICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpKSwgbmV3UmVxdWlyZWRTdGFuZGFyZCwKKyAgICBlcnJvcik7CisgIGlmICghbmV3UmVxdWlyZWRTdGFuZGFyZC5lbXB0eSgpKSB7CisgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIiksIG5ld1JlcXVpcmVkU3RhbmRhcmQpOworICB9CisgIHJldHVybiBuZXdSZXF1aXJlZDsKK30KKworYm9vbCBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcjo6Q2hlY2tDb21waWxlRmVhdHVyZXNBdmFpbGFibGUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwgc3RkOjpzdHJpbmcmIGxhbmcsCisgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKK3sKKyAgaWYgKCF0aGlzLT5Db21waWxlRmVhdHVyZUtub3duKHRhcmdldE5hbWUsIGZlYXR1cmUsIGxhbmcsIGVycm9yKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNvbnN0IGNoYXIqIGZlYXR1cmVzID0gdGhpcy0+Q29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKGxhbmcsIGVycm9yKTsKKyAgaWYgKCFmZWF0dXJlcykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdmFpbGFibGVGZWF0dXJlcyA9IGNtRXhwYW5kZWRMaXN0KGZlYXR1cmVzKTsKKyAgaWYgKCFjbTo6Y29udGFpbnMoYXZhaWxhYmxlRmVhdHVyZXMsIGZlYXR1cmUpKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgZSA8PCAiVGhlIGNvbXBpbGVyIGZlYXR1cmUgXCIiIDw8IGZlYXR1cmUgPDwgIlwiIGlzIG5vdCBrbm93biB0byAiIDw8IGxhbmcKKyAgICAgIDw8ICIgY29tcGlsZXJcblwiIgorICAgICAgPDwgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpCisgICAgICA8PCAiXCJcbnZlcnNpb24gIgorICAgICAgPDwgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9WRVJTSU9OIikKKyAgICAgIDw8ICIuIjsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICplcnJvciA9IGUuc3RyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY21TdGFuZGFyZExldmVsUmVzb2x2ZXI6OkNvbXBpbGVGZWF0dXJlS25vd24oCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwgc3RkOjpzdHJpbmcmIGxhbmcsCisgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKK3sKKyAgYXNzZXJ0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChmZWF0dXJlKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyk7CisKKyAgYm9vbCBpc0NGZWF0dXJlID0KKyAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX0ZFQVRVUkVTKSArIDEsIGNtOjpjZW5kKENfRkVBVFVSRVMpLAorICAgICAgICAgICAgICAgICBjbVN0ckNtcChmZWF0dXJlKSkgIT0gY206OmNlbmQoQ19GRUFUVVJFUyk7CisgIGlmIChpc0NGZWF0dXJlKSB7CisgICAgbGFuZyA9ICJDIjsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBib29sIGlzQ3h4RmVhdHVyZSA9CisgICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1hYX0ZFQVRVUkVTKSArIDEsIGNtOjpjZW5kKENYWF9GRUFUVVJFUyksCisgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGZlYXR1cmUpKSAhPSBjbTo6Y2VuZChDWFhfRkVBVFVSRVMpOworICBpZiAoaXNDeHhGZWF0dXJlKSB7CisgICAgbGFuZyA9ICJDWFgiOworICAgIHJldHVybiB0cnVlOworICB9CisgIGJvb2wgaXNDdWRhRmVhdHVyZSA9CisgICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1VEQV9GRUFUVVJFUykgKyAxLCBjbTo6Y2VuZChDVURBX0ZFQVRVUkVTKSwKKyAgICAgICAgICAgICAgICAgY21TdHJDbXAoZmVhdHVyZSkpICE9IGNtOjpjZW5kKENVREFfRkVBVFVSRVMpOworICBpZiAoaXNDdWRhRmVhdHVyZSkgeworICAgIGxhbmcgPSAiQ1VEQSI7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgIGlmIChlcnJvcikgeworICAgIGUgPDwgInNwZWNpZmllZCI7CisgIH0gZWxzZSB7CisgICAgZSA8PCAiU3BlY2lmaWVkIjsKKyAgfQorICBlIDw8ICIgdW5rbm93biBmZWF0dXJlIFwiIiA8PCBmZWF0dXJlCisgICAgPDwgIlwiIGZvciAiCisgICAgICAgInRhcmdldCBcIiIKKyAgICA8PCB0YXJnZXROYW1lIDw8ICJcIi4iOworICBpZiAoZXJyb3IpIHsKKyAgICAqZXJyb3IgPSBlLnN0cigpOworICB9IGVsc2UgeworICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IGNoYXIqIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyOjpDb21waWxlRmVhdHVyZXNBdmFpbGFibGUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Cit7CisgIGlmICghdGhpcy0+TWFrZWZpbGUtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRMYW5ndWFnZUVuYWJsZWQobGFuZykpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIGUgPDwgImNhbm5vdCI7CisgICAgfSBlbHNlIHsKKyAgICAgIGUgPDwgIkNhbm5vdCI7CisgICAgfQorICAgIGUgPDwgIiB1c2UgZmVhdHVyZXMgZnJvbSBub24tZW5hYmxlZCBsYW5ndWFnZSAiIDw8IGxhbmc7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAqZXJyb3IgPSBlLnN0cigpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworICB9CisKKyAgY29uc3QgY2hhciogZmVhdHVyZXNLbm93biA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFX0ZFQVRVUkVTIik7CisKKyAgaWYgKCFmZWF0dXJlc0tub3duIHx8ICEqZmVhdHVyZXNLbm93bikgeworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOworICAgIGlmIChlcnJvcikgeworICAgICAgZSA8PCAibm8iOworICAgIH0gZWxzZSB7CisgICAgICBlIDw8ICJObyI7CisgICAgfQorICAgIGUgPDwgIiBrbm93biBmZWF0dXJlcyBmb3IgIiA8PCBsYW5nIDw8ICIgY29tcGlsZXJcblwiIgorICAgICAgPDwgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV8iICsgbGFuZyArICJfQ09NUElMRVJfSUQiKQorICAgICAgPDwgIlwiXG52ZXJzaW9uICIKKyAgICAgIDw8IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ09NUElMRVJfVkVSU0lPTiIpCisgICAgICA8PCAiLiI7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAqZXJyb3IgPSBlLnN0cigpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworICB9CisgIHJldHVybiBmZWF0dXJlc0tub3duOworfQorCitib29sIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyOjpHZXROZXdSZXF1aXJlZFN0YW5kYXJkKAorICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgIGNtUHJvcCBjdXJyZW50TGFuZ1N0YW5kYXJkVmFsdWUsIHN0ZDo6c3RyaW5nJiBuZXdSZXF1aXJlZFN0YW5kYXJkLAorICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Cit7CisgIHN0ZDo6c3RyaW5nIGxhbmc7CisgIGlmICghdGhpcy0+Q2hlY2tDb21waWxlRmVhdHVyZXNBdmFpbGFibGUodGFyZ2V0TmFtZSwgZmVhdHVyZSwgbGFuZywgZXJyb3IpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYXV0byBtYXBwaW5nID0gU3RhbmRhcmRDb21wdXRlck1hcHBpbmcuZmluZChsYW5nKTsKKyAgaWYgKG1hcHBpbmcgIT0gY206OmNlbmQoU3RhbmRhcmRDb21wdXRlck1hcHBpbmcpKSB7CisgICAgcmV0dXJuIG1hcHBpbmctPnNlY29uZC5HZXROZXdSZXF1aXJlZFN0YW5kYXJkKAorICAgICAgdGhpcy0+TWFrZWZpbGUsIHRhcmdldE5hbWUsIGZlYXR1cmUsIGN1cnJlbnRMYW5nU3RhbmRhcmRWYWx1ZSwKKyAgICAgIG5ld1JlcXVpcmVkU3RhbmRhcmQsIGVycm9yKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgY21TdGFuZGFyZExldmVsUmVzb2x2ZXI6OkhhdmVTdGFuZGFyZEF2YWlsYWJsZSgKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKSBjb25zdAoreworICBhdXRvIG1hcHBpbmcgPSBTdGFuZGFyZENvbXB1dGVyTWFwcGluZy5maW5kKGxhbmcpOworICBpZiAobWFwcGluZyAhPSBjbTo6Y2VuZChTdGFuZGFyZENvbXB1dGVyTWFwcGluZykpIHsKKyAgICByZXR1cm4gbWFwcGluZy0+c2Vjb25kLkhhdmVTdGFuZGFyZEF2YWlsYWJsZSh0aGlzLT5NYWtlZmlsZSwgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywgZmVhdHVyZSk7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyOjpJc0xhdGVyU3RhbmRhcmQoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcmhzKSBjb25zdAoreworICBhdXRvIG1hcHBpbmcgPSBTdGFuZGFyZENvbXB1dGVyTWFwcGluZy5maW5kKGxhbmcpOworICBpZiAobWFwcGluZyAhPSBjbTo6Y2VuZChTdGFuZGFyZENvbXB1dGVyTWFwcGluZykpIHsKKyAgICByZXR1cm4gbWFwcGluZy0+c2Vjb25kLklzTGF0ZXJTdGFuZGFyZChzdGQ6OnN0b2kobGhzKSwgc3RkOjpzdG9pKHJocykpOworICB9CisgIHJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5oIGIvU291cmNlL2NtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5YTVmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21TdGFuZGFyZExldmVsUmVzb2x2ZXJfaAorI2RlZmluZSBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcl9oCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCisKK2NsYXNzIGNtTWFrZWZpbGU7CitjbGFzcyBjbUdlbmVyYXRvclRhcmdldDsKK2NsYXNzIGNtVGFyZ2V0OworCitjbGFzcyBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcgoreworCitwdWJsaWM6CisgIGV4cGxpY2l0IGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyKGNtTWFrZWZpbGUqIG1ha2VmaWxlKQorICAgIDogTWFrZWZpbGUobWFrZWZpbGUpCisgIHsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEdldENvbXBpbGVPcHRpb25EZWYoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKSBjb25zdDsKKworICBib29sIEFkZFJlcXVpcmVkVGFyZ2V0RmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yID0gbnVsbHB0cikgY29uc3Q7CisKKyAgYm9vbCBDb21waWxlRmVhdHVyZUtub3duKGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsIHN0ZDo6c3RyaW5nJiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKSBjb25zdDsKKworICBjb25zdCBjaGFyKiBDb21waWxlRmVhdHVyZXNBdmFpbGFibGUoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0OworCisgIGJvb2wgR2V0TmV3UmVxdWlyZWRTdGFuZGFyZChjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wIGN1cnJlbnRMYW5nU3RhbmRhcmRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBuZXdSZXF1aXJlZFN0YW5kYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yID0gbnVsbHB0cikgY29uc3Q7CisKKyAgYm9vbCBIYXZlU3RhbmRhcmRBdmFpbGFibGUoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKSBjb25zdDsKKworICBib29sIElzTGF0ZXJTdGFuZGFyZChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgc3RkOjpzdHJpbmcgY29uc3QmIGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHJocykgY29uc3Q7CisKK3ByaXZhdGU6CisgIGJvb2wgQ2hlY2tDb21waWxlRmVhdHVyZXNBdmFpbGFibGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKSBjb25zdDsKKworICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YW5kYXJkTGV4ZXIuaCBiL1NvdXJjZS9jbVN0YW5kYXJkTGV4ZXIuaAppbmRleCAxM2Y3NjIyLi5lMGIyMTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdGFuZGFyZExleGVyLmgKKysrIGIvU291cmNlL2NtU3RhbmRhcmRMZXhlci5oCkBAIC0zLDYgKzMsMjMgQEAKICNpZm5kZWYgY21TdGFuZGFyZExleGVyX2gKICNkZWZpbmUgY21TdGFuZGFyZExleGVyX2gKIAorI2lmIGRlZmluZWQoX19saW51eCkKKy8qIE5lZWRlZCBmb3IgZ2xpYmMgPCAyLjEyICovCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19zdW4pCisvKiBQT1NJWCBBUElzIGFyZSBuZWVkZWQgKi8KKyMgIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMjAwODA5TAorI2VuZGlmCisjaWYgZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisvKiBDIHNvdXJjZXM6IGZvciBmaWxlbm8gYW5kIHN0cmR1cCAqLworIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisvKiBGb3IgaXNhc2NpaSAqLworIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNzAwCisjZW5kaWYKKwogI2luY2x1ZGUgImNtc3lzL0NvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAvKiBEaXNhYmxlIHNvbWUgd2FybmluZ3MuICAqLwpAQCAtNTAsNyArNjcsNyBAQAogI2RlZmluZSBZWV9OT19VTlBVVCAxCiAjZGVmaW5lIEVDSE8KIAotI2luY2x1ZGUgImNtX2t3aW1sLmgiCisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIHR5cGVkZWYgS1dJTUxfSU5UX2ludDhfdCBmbGV4X2ludDhfdDsKIHR5cGVkZWYgS1dJTUxfSU5UX3VpbnQ4X3QgZmxleF91aW50OF90OwogdHlwZWRlZiBLV0lNTF9JTlRfaW50MTZfdCBmbGV4X2ludDE2X3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdGF0ZS5jeHggYi9Tb3VyY2UvY21TdGF0ZS5jeHgKaW5kZXggOWZjNzYxNS4uNzNmMTY2YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGUuY3h4CisrKyBiL1NvdXJjZS9jbVN0YXRlLmN4eApAQCAtMzQsMzAgKzM0LDQ0IEBACiAKIGNtU3RhdGU6On5jbVN0YXRlKCkgPSBkZWZhdWx0OwogCi1jb25zdCBjaGFyKiBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSgKKyAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUpCiB7CisjZGVmaW5lIE1BS0VfU1RBVElDX1BST1AoUFJPUCkgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3AjI1BST1AgPSAjUFJPUAorICBNQUtFX1NUQVRJQ19QUk9QKFNUQVRJQ19MSUJSQVJZKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChNT0RVTEVfTElCUkFSWSk7CisgIE1BS0VfU1RBVElDX1BST1AoU0hBUkVEX0xJQlJBUlkpOworICBNQUtFX1NUQVRJQ19QUk9QKE9CSkVDVF9MSUJSQVJZKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChFWEVDVVRBQkxFKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChVVElMSVRZKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChHTE9CQUxfVEFSR0VUKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChJTlRFUkZBQ0VfTElCUkFSWSk7CisgIE1BS0VfU1RBVElDX1BST1AoVU5LTk9XTl9MSUJSQVJZKTsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BFbXB0eTsKKyN1bmRlZiBNQUtFX1NUQVRJQ19QUk9QCisKICAgc3dpdGNoICh0YXJnZXRUeXBlKSB7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZOgotICAgICAgcmV0dXJuICJTVEFUSUNfTElCUkFSWSI7CisgICAgICByZXR1cm4gcHJvcFNUQVRJQ19MSUJSQVJZOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKLSAgICAgIHJldHVybiAiTU9EVUxFX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BNT0RVTEVfTElCUkFSWTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gIlNIQVJFRF9MSUJSQVJZIjsKKyAgICAgIHJldHVybiBwcm9wU0hBUkVEX0xJQlJBUlk7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZOgotICAgICAgcmV0dXJuICJPQkpFQ1RfTElCUkFSWSI7CisgICAgICByZXR1cm4gcHJvcE9CSkVDVF9MSUJSQVJZOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgotICAgICAgcmV0dXJuICJFWEVDVVRBQkxFIjsKKyAgICAgIHJldHVybiBwcm9wRVhFQ1VUQUJMRTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKLSAgICAgIHJldHVybiAiVVRJTElUWSI7CisgICAgICByZXR1cm4gcHJvcFVUSUxJVFk7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6Ci0gICAgICByZXR1cm4gIkdMT0JBTF9UQVJHRVQiOworICAgICAgcmV0dXJuIHByb3BHTE9CQUxfVEFSR0VUOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWToKLSAgICAgIHJldHVybiAiSU5URVJGQUNFX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BJTlRFUkZBQ0VfTElCUkFSWTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VU5LTk9XTl9MSUJSQVJZOgotICAgICAgcmV0dXJuICJVTktOT1dOX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BVTktOT1dOX0xJQlJBUlk7CiAgIH0KICAgYXNzZXJ0KGZhbHNlICYmICJVbmV4cGVjdGVkIHRhcmdldCB0eXBlIik7Ci0gIHJldHVybiBudWxscHRyOworICByZXR1cm4gcHJvcEVtcHR5OwogfQogCiBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTxzdGQ6OnN0cmluZywgNz4gY21DYWNoZUVudHJ5VHlwZXMgPSB7CkBAIC0xMjMsMzYgKzEzNywyMyBAQAogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeUtleXMoKSBjb25zdAogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVmaW5pdGlvbnM7Ci0gIGRlZmluaXRpb25zLnJlc2VydmUodGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRTaXplKCkpOwotICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBjaXQgPSB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3IoKTsKLSAgZm9yIChjaXQuQmVnaW4oKTsgIWNpdC5Jc0F0RW5kKCk7IGNpdC5OZXh0KCkpIHsKLSAgICBkZWZpbml0aW9ucy5wdXNoX2JhY2soY2l0LkdldE5hbWUoKSk7Ci0gIH0KLSAgcmV0dXJuIGRlZmluaXRpb25zOworICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUVudHJ5S2V5cygpOwogfQogCi1jb25zdCBjaGFyKiBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKK2NtUHJvcCBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKIHsKLSAgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnkqIGUgPSB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlRW50cnkoa2V5KTsKLSAgaWYgKCFlKSB7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgcmV0dXJuIGUtPlZhbHVlLmNfc3RyKCk7CisgIHJldHVybiB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOwogfQogCiBzdGQ6OnN0cmluZyBjbVN0YXRlOjpHZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0CiB7Ci0gIHN0ZDo6c3RyaW5nIHJldHZhbDsKLSAgYXV0byB2YWwgPSB0aGlzLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KTsKLSAgaWYgKHZhbCkgewotICAgIHJldHZhbCA9IHZhbDsKKyAgaWYgKGNtUHJvcCB2YWwgPSB0aGlzLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KSkgeworICAgIHJldHVybiAqdmFsOwogICB9Ci0gIHJldHVybiByZXR2YWw7CisgIHJldHVybiBzdGQ6OnN0cmluZygpOwogfQogCi1jb25zdCBzdGQ6OnN0cmluZyogY21TdGF0ZTo6R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKAotICBzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdAorY21Qcm9wIGNtU3RhdGU6OkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoa2V5KTsKIH0KQEAgLTE2MCw4ICsxNjEsNyBAQAogY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5VHlwZSgKICAgc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKIHsKLSAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgaXQgPSB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5KTsKLSAgcmV0dXJuIGl0LkdldFR5cGUoKTsKKyAgcmV0dXJuIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVFbnRyeVR5cGUoa2V5KTsKIH0KIAogdm9pZCBjbVN0YXRlOjpTZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKQEAgLTE3NCw0MCArMTc0LDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKQogewotICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9IHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpOwotICBpdC5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlLmNfc3RyKCkpOworICB0aGlzLT5DYWNoZU1hbmFnZXItPlNldENhY2hlRW50cnlQcm9wZXJ0eShrZXksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIGNtU3RhdGU6OlNldENhY2hlRW50cnlCb29sUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmFsdWUpCiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7Ci0gIGl0LlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICB0aGlzLT5DYWNoZU1hbmFnZXItPlNldENhY2hlRW50cnlCb29sUHJvcGVydHkoa2V5LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKIH0KIAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtU3RhdGU6OkdldENhY2hlRW50cnlQcm9wZXJ0eUxpc3QoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpCiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleSk7Ci0gIHJldHVybiBpdC5HZXRQcm9wZXJ0eUxpc3QoKTsKKyAgcmV0dXJuIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5TGlzdChrZXkpOwogfQogCi1jb25zdCBjaGFyKiBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKQorY21Qcm9wIGNtU3RhdGU6OkdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKQogewotICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9IHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpOwotICBpZiAoIWl0LlByb3BlcnR5RXhpc3RzKHByb3BlcnR5TmFtZSkpIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICByZXR1cm4gaXQuR2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgcmV0dXJuIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgcHJvcGVydHlOYW1lKTsKIH0KIAogYm9vbCBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gIHJldHVybiB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5KS5HZXRQcm9wZXJ0eUFzQm9vbCgKLSAgICBwcm9wZXJ0eU5hbWUpOworICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woa2V5LCBwcm9wZXJ0eU5hbWUpOwogfQogCiB2b2lkIGNtU3RhdGU6OkFkZENhY2hlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgY29uc3QgY2hhciogdmFsdWUsCkBAIC0yNTksMjAgKzI1MSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBib29sIGFzU3RyaW5nKQogewotICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5KS5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzU3RyaW5nKTsKKyAgdGhpcy0+Q2FjaGVNYW5hZ2VyLT5BcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCBwcm9wZXJ0eSwgdmFsdWUsIGFzU3RyaW5nKTsKIH0KIAogdm9pZCBjbVN0YXRlOjpSZW1vdmVDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkpLlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbnVsbHB0cik7CisgIHRoaXMtPkNhY2hlTWFuYWdlci0+UmVtb3ZlQ2FjaGVFbnRyeVByb3BlcnR5KGtleSwgcHJvcGVydHlOYW1lKTsKIH0KIAogY21TdGF0ZVNuYXBzaG90IGNtU3RhdGU6OlJlc2V0KCkKIHsKICAgdGhpcy0+R2xvYmFsUHJvcGVydGllcy5DbGVhcigpOwotICB0aGlzLT5Qcm9wZXJ0eURlZmluaXRpb25zLmNsZWFyKCk7CisgIHRoaXMtPlByb3BlcnR5RGVmaW5pdGlvbnMgPSB7fTsKICAgdGhpcy0+R2xvYlZlcmlmaWNhdGlvbk1hbmFnZXItPlJlc2V0KCk7CiAKICAgY21TdGF0ZURldGFpbDo6UG9zaXRpb25UeXBlIHBvcyA9IHRoaXMtPlNuYXBzaG90RGF0YS5UcnVuY2F0ZSgpOwpAQCAtMzM1LDQyICszMjYsMjYgQEAKIAogdm9pZCBjbVN0YXRlOjpEZWZpbmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBTaG9ydERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBGdWxsRGVzY3JpcHRpb24sIGJvb2wgY2hhaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBGdWxsRGVzY3JpcHRpb24sIGJvb2wgY2hhaW5lZCkKIHsKLSAgdGhpcy0+UHJvcGVydHlEZWZpbml0aW9uc1tzY29wZV0uRGVmaW5lUHJvcGVydHkoCi0gICAgbmFtZSwgc2NvcGUsIFNob3J0RGVzY3JpcHRpb24sIEZ1bGxEZXNjcmlwdGlvbiwgY2hhaW5lZCk7CisgIHRoaXMtPlByb3BlcnR5RGVmaW5pdGlvbnMuRGVmaW5lUHJvcGVydHkobmFtZSwgc2NvcGUsIFNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVsbERlc2NyaXB0aW9uLCBjaGFpbmVkKTsKIH0KIAogY21Qcm9wZXJ0eURlZmluaXRpb24gY29uc3QqIGNtU3RhdGU6OkdldFByb3BlcnR5RGVmaW5pdGlvbigKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3QKIHsKLSAgaWYgKHRoaXMtPklzUHJvcGVydHlEZWZpbmVkKG5hbWUsIHNjb3BlKSkgewotICAgIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwIGNvbnN0JiBkZWZzID0KLSAgICAgIHRoaXMtPlByb3BlcnR5RGVmaW5pdGlvbnMuZmluZChzY29wZSktPnNlY29uZDsKLSAgICByZXR1cm4gJmRlZnMuZmluZChuYW1lKS0+c2Vjb25kOwotICB9Ci0gIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIGNtU3RhdGU6OklzUHJvcGVydHlEZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUpIGNvbnN0Ci17Ci0gIGF1dG8gaXQgPSB0aGlzLT5Qcm9wZXJ0eURlZmluaXRpb25zLmZpbmQoc2NvcGUpOwotICBpZiAoaXQgPT0gdGhpcy0+UHJvcGVydHlEZWZpbml0aW9ucy5lbmQoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gaXQtPnNlY29uZC5Jc1Byb3BlcnR5RGVmaW5lZChuYW1lKTsKKyAgcmV0dXJuIHRoaXMtPlByb3BlcnR5RGVmaW5pdGlvbnMuR2V0UHJvcGVydHlEZWZpbml0aW9uKG5hbWUsIHNjb3BlKTsKIH0KIAogYm9vbCBjbVN0YXRlOjpJc1Byb3BlcnR5Q2hhaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlKSBjb25zdAogewotICBhdXRvIGl0ID0gdGhpcy0+UHJvcGVydHlEZWZpbml0aW9ucy5maW5kKHNjb3BlKTsKLSAgaWYgKGl0ID09IHRoaXMtPlByb3BlcnR5RGVmaW5pdGlvbnMuZW5kKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7CisgIGlmIChhdXRvIGRlZiA9IHRoaXMtPkdldFByb3BlcnR5RGVmaW5pdGlvbihuYW1lLCBzY29wZSkpIHsKKyAgICByZXR1cm4gZGVmLT5Jc0NoYWluZWQoKTsKICAgfQotICByZXR1cm4gaXQtPnNlY29uZC5Jc1Byb3BlcnR5Q2hhaW5lZChuYW1lKTsKKyAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIGNtU3RhdGU6OlNldExhbmd1YWdlRW5hYmxlZChzdGQ6OnN0cmluZyBjb25zdCYgbCkKQEAgLTU3Myw3ICs1NDgsNyBAQAogICB0aGlzLT5HbG9iYWxQcm9wZXJ0aWVzLkFwcGVuZFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZyk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtU3RhdGU6OkdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKQorY21Qcm9wIGNtU3RhdGU6OkdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKQogewogICBpZiAocHJvcCA9PSAiQ0FDSEVfVkFSSUFCTEVTIikgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjYWNoZUtleXMgPSB0aGlzLT5HZXRDYWNoZUVudHJ5S2V5cygpOwpAQCAtNTk3LDMxICs1NzIsNDkgQEAKICAgfQogI2RlZmluZSBTVFJJTkdfTElTVF9FTEVNRU5UKEYpICI7IiAjRgogICBpZiAocHJvcCA9PSAiQ01BS0VfQ19LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0NfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQ19GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DOTBfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DOTBfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQzkwX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNNQUtFX0M5OV9LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0M5OV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzX291dCgKKyAgICAgICZGT1JfRUFDSF9DOTlfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ01BS0VfQzExX0tOT1dOX0ZFQVRVUkVTIikgewotICAgIHJldHVybiAmRk9SX0VBQ0hfQzExX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0MxMV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DWFhfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DWFhfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQ1hYX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNNQUtFX0NYWDk4X0tOT1dOX0ZFQVRVUkVTIikgewotICAgIHJldHVybiAmRk9SX0VBQ0hfQ1hYOThfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQ1hYOThfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ01BS0VfQ1hYMTFfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DWFgxMV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzX291dCgKKyAgICAgICZGT1JfRUFDSF9DWFgxMV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DWFgxNF9LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0NYWDE0X0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0NYWDE0X0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNNQUtFX0NVREFfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DVURBX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0NVREFfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogCiAjdW5kZWYgU1RSSU5HX0xJU1RfRUxFTUVOVApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhdGUuaCBiL1NvdXJjZS9jbVN0YXRlLmgKaW5kZXggNmVlMmIwYy4uODg1NDk2YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGUuaAorKysgYi9Tb3VyY2UvY21TdGF0ZS5oCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKLSNpbmNsdWRlICJjbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5oIgorI2luY2x1ZGUgImNtUHJvcGVydHlEZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eU1hcC5oIgogI2luY2x1ZGUgImNtU3RhdGVQcml2YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC0yNSw3ICsyNSw2IEBACiBjbGFzcyBjbUNhY2hlTWFuYWdlcjsKIGNsYXNzIGNtQ29tbWFuZDsKIGNsYXNzIGNtR2xvYlZlcmlmaWNhdGlvbk1hbmFnZXI7Ci1jbGFzcyBjbVByb3BlcnR5RGVmaW5pdGlvbjsKIGNsYXNzIGNtU3RhdGVTbmFwc2hvdDsKIGNsYXNzIGNtTWVzc2VuZ2VyOwogY2xhc3MgY21FeGVjdXRpb25TdGF0dXM7CkBAIC01MSw3ICs1MCw4IEBACiAgICAgQ1BhY2ssCiAgIH07CiAKLSAgc3RhdGljIGNvbnN0IGNoYXIqIEdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKTsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRUYXJnZXRUeXBlTmFtZSgKKyAgICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSk7CiAKICAgY21TdGF0ZVNuYXBzaG90IENyZWF0ZUJhc2VTbmFwc2hvdCgpOwogICBjbVN0YXRlU25hcHNob3QgQ3JlYXRlQnVpbGRzeXN0ZW1EaXJlY3RvcnlTbmFwc2hvdCgKQEAgLTg3LDEyICs4NywxMSBAQAogICBib29sIERlbGV0ZUNhY2hlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0Q2FjaGVFbnRyeUtleXMoKSBjb25zdDsKLSAgY29uc3QgY2hhciogR2V0Q2FjaGVFbnRyeVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0OworICBjbVByb3AgR2V0Q2FjaGVFbnRyeVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0OwogICBzdGQ6OnN0cmluZyBHZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0OwotICBjb25zdCBzdGQ6OnN0cmluZyogR2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0OworICBjbVByb3AgR2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0OwogICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIEdldENhY2hlRW50cnlUeXBlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0OwogICB2b2lkIFNldENhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5LCBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpOwotICB2b2lkIFNldENhY2hlVmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKTsKIAogICB2b2lkIFJlbW92ZUNhY2hlRW50cnkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSk7CiAKQEAgLTEwMiw4ICsxMDEsOCBAQAogICB2b2lkIFNldENhY2hlRW50cnlCb29sUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUsIGJvb2wgdmFsdWUpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0Q2FjaGVFbnRyeVByb3BlcnR5TGlzdChzdGQ6OnN0cmluZyBjb25zdCYga2V5KTsKLSAgY29uc3QgY2hhciogR2V0Q2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKTsKKyAgY21Qcm9wIEdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpOwogICBib29sIEdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChzdGQ6OnN0cmluZyBjb25zdCYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKTsKICAgdm9pZCBBcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKQEAgLTEyMSwxNiArMTIwLDEzIEBACiAgIGNtU3RhdGVTbmFwc2hvdCBSZXNldCgpOwogICAvLyBEZWZpbmUgYSBwcm9wZXJ0eQogICB2b2lkIERlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogU2hvcnREZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBGdWxsRGVzY3JpcHRpb24sIGJvb2wgY2hhaW4gPSBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbiA9IGZhbHNlKTsKIAogICAvLyBnZXQgcHJvcGVydHkgZGVmaW5pdGlvbgogICBjbVByb3BlcnR5RGVmaW5pdGlvbiBjb25zdCogR2V0UHJvcGVydHlEZWZpbml0aW9uKAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUpIGNvbnN0OwogCi0gIC8vIElzIGEgcHJvcGVydHkgZGVmaW5lZD8KLSAgYm9vbCBJc1Byb3BlcnR5RGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUpIGNvbnN0OwogICBib29sIElzUHJvcGVydHlDaGFpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3Q7CiAKQEAgLTE3MSw3ICsxNjcsNyBAQAogICB2b2lkIFNldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAgIHZvaWQgQXBwZW5kR2xvYmFsUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwotICBjb25zdCBjaGFyKiBHZXRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CisgIGNtUHJvcCBHZXRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CiAgIGJvb2wgR2V0R2xvYmFsUHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApOwogCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXRTb3VyY2VEaXJlY3RvcnkoKSBjb25zdDsKQEAgLTIyMiw3ICsyMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBidCk7CiAKLSAgc3RkOjptYXA8Y21Qcm9wZXJ0eTo6U2NvcGVUeXBlLCBjbVByb3BlcnR5RGVmaW5pdGlvbk1hcD4gUHJvcGVydHlEZWZpbml0aW9uczsKKyAgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAgUHJvcGVydHlEZWZpbml0aW9uczsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEVuYWJsZWRMYW5ndWFnZXM7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDb21tYW5kPiBCdWlsdGluQ29tbWFuZHM7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDb21tYW5kPiBTY3JpcHRlZENvbW1hbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuY3h4IGIvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuY3h4CmluZGV4IDRmMDAzZWQuLjc5NmJiMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0YXRlRGlyZWN0b3J5LmN4eAorKysgYi9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5jeHgKQEAgLTU0OCwzMiArNTQ4LDMxIEBACiAgIHRoaXMtPkRpcmVjdG9yeVN0YXRlLT5Qcm9wZXJ0aWVzLkFwcGVuZFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZyk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtU3RhdGVEaXJlY3Rvcnk6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAorY21Qcm9wIGNtU3RhdGVEaXJlY3Rvcnk6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAogewogICBjb25zdCBib29sIGNoYWluID0KICAgICB0aGlzLT5TbmFwc2hvdF8uU3RhdGUtPklzUHJvcGVydHlDaGFpbmVkKHByb3AsIGNtUHJvcGVydHk6OkRJUkVDVE9SWSk7CiAgIHJldHVybiB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wLCBjaGFpbik7CiB9CiAKLWNvbnN0IGNoYXIqIGNtU3RhdGVEaXJlY3Rvcnk6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGFpbikgY29uc3QKK2NtUHJvcCBjbVN0YXRlRGlyZWN0b3J5OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3QKIHsKICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgb3V0cHV0LmNsZWFyKCk7CiAgIGlmIChwcm9wID09ICJQQVJFTlRfRElSRUNUT1JZIikgewogICAgIGNtU3RhdGVTbmFwc2hvdCBwYXJlbnQgPSB0aGlzLT5TbmFwc2hvdF8uR2V0QnVpbGRzeXN0ZW1EaXJlY3RvcnlQYXJlbnQoKTsKICAgICBpZiAocGFyZW50LklzVmFsaWQoKSkgewotICAgICAgcmV0dXJuIHBhcmVudC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCkuY19zdHIoKTsKKyAgICAgIHJldHVybiAmcGFyZW50LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKTsKICAgICB9Ci0gICAgcmV0dXJuICIiOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09IGtCSU5BUllfRElSKSB7CiAgICAgb3V0cHV0ID0gdGhpcy0+R2V0Q3VycmVudEJpbmFyeSgpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSBrU09VUkNFX0RJUikgewogICAgIG91dHB1dCA9IHRoaXMtPkdldEN1cnJlbnRTb3VyY2UoKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0ga1NVQkRJUkVDVE9SSUVTKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNoaWxkX2RpcnM7CkBAIC01ODQsMTEgKzU4MywxMSBAQAogICAgICAgY2hpbGRfZGlycy5wdXNoX2JhY2soY2kuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudFNvdXJjZSgpKTsKICAgICB9CiAgICAgb3V0cHV0ID0gY21Kb2luKGNoaWxkX2RpcnMsICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09IGtCVUlMRFNZU1RFTV9UQVJHRVRTKSB7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkRpcmVjdG9yeVN0YXRlLT5Ob3JtYWxUYXJnZXROYW1lcywgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KIAogICBpZiAocHJvcCA9PSAiTElTVEZJTEVfU1RBQ0siKSB7CkBAIC02MDAsNDEgKzU5OSw0MSBAQAogICAgIH0KICAgICBzdGQ6OnJldmVyc2UobGlzdEZpbGVzLmJlZ2luKCksIGxpc3RGaWxlcy5lbmQoKSk7CiAgICAgb3V0cHV0ID0gY21Kb2luKGxpc3RGaWxlcywgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNBQ0hFX1ZBUklBQkxFUyIpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+U25hcHNob3RfLlN0YXRlLT5HZXRDYWNoZUVudHJ5S2V5cygpLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSAiVkFSSUFCTEVTIikgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXMgPSB0aGlzLT5TbmFwc2hvdF8uQ2xvc3VyZUtleXMoKTsKICAgICBjbTo6YXBwZW5kKHJlcywgdGhpcy0+U25hcHNob3RfLlN0YXRlLT5HZXRDYWNoZUVudHJ5S2V5cygpKTsKICAgICBzdGQ6OnNvcnQocmVzLmJlZ2luKCksIHJlcy5lbmQoKSk7CiAgICAgb3V0cHV0ID0gY21Kb2luKHJlcywgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIklOQ0xVREVfRElSRUNUT1JJRVMiKSB7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkdldEluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMoKSwgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNPTVBJTEVfT1BUSU9OUyIpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+R2V0Q29tcGlsZU9wdGlvbnNFbnRyaWVzKCksICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09ICJDT01QSUxFX0RFRklOSVRJT05TIikgewogICAgIG91dHB1dCA9IGNtSm9pbih0aGlzLT5HZXRDb21waWxlRGVmaW5pdGlvbnNFbnRyaWVzKCksICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09ICJMSU5LX09QVElPTlMiKSB7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkdldExpbmtPcHRpb25zRW50cmllcygpLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSAiTElOS19ESVJFQ1RPUklFUyIpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+R2V0TGlua0RpcmVjdG9yaWVzRW50cmllcygpLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHJldFZhbCA9IHRoaXMtPkRpcmVjdG9yeVN0YXRlLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSB0aGlzLT5EaXJlY3RvcnlTdGF0ZS0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOwogICBpZiAoIXJldFZhbCAmJiBjaGFpbikgewogICAgIGNtU3RhdGVTbmFwc2hvdCBwYXJlbnRTbmFwc2hvdCA9CiAgICAgICB0aGlzLT5TbmFwc2hvdF8uR2V0QnVpbGRzeXN0ZW1EaXJlY3RvcnlQYXJlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YXRlRGlyZWN0b3J5LmggYi9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5oCmluZGV4IDUzYTJkNTQuLjc2NWFmNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0YXRlRGlyZWN0b3J5LmgKKysrIGIvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtTGlua2VkVHJlZS5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlUHJpdmF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtODYsOCArODcsOCBAQAogICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGxmYnQpOwogICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZywgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgbGZidCk7Ci0gIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGJvb2wgY2hhaW4pIGNvbnN0OworICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OworICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGJvb2wgY2hhaW4pIGNvbnN0OwogICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFByb3BlcnR5S2V5cygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdGF0ZVNuYXBzaG90LmN4eCBiL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuY3h4CmluZGV4IDgzMmU3NGUuLmJmOGUzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuY3h4CisrKyBiL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuY3h4CkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlICJjbURlZmluaXRpb25zLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUHJvcGVydHlNYXAuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZURpcmVjdG9yeS5oIgpAQCAtMTQ3LDcgKzE0OCw3IEBACiAKIGJvb2wgY21TdGF0ZVNuYXBzaG90OjpDYW5Qb3BQb2xpY3lTY29wZSgpCiB7Ci0gIHJldHVybiB0aGlzLT5Qb3NpdGlvbi0+UG9saWNpZXMgPT0gdGhpcy0+UG9zaXRpb24tPlBvbGljeVNjb3BlOworICByZXR1cm4gdGhpcy0+UG9zaXRpb24tPlBvbGljaWVzICE9IHRoaXMtPlBvc2l0aW9uLT5Qb2xpY3lTY29wZTsKIH0KIAogdm9pZCBjbVN0YXRlU25hcHNob3Q6OlNldFBvbGljeShjbVBvbGljaWVzOjpQb2xpY3lJRCBpZCwKQEAgLTIzMSwxMSArMjMyLDYgQEAKICAgdGhpcy0+UG9zaXRpb24tPlZhcnMtPlVuc2V0KG5hbWUpOwogfQogCi1zdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21TdGF0ZVNuYXBzaG90OjpVbnVzZWRLZXlzKCkgY29uc3QKLXsKLSAgcmV0dXJuIHRoaXMtPlBvc2l0aW9uLT5WYXJzLT5VbnVzZWRLZXlzKCk7Ci19Ci0KIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbVN0YXRlU25hcHNob3Q6OkNsb3N1cmVLZXlzKCkgY29uc3QKIHsKICAgcmV0dXJuIGNtRGVmaW5pdGlvbnM6OkNsb3N1cmVLZXlzKHRoaXMtPlBvc2l0aW9uLT5WYXJzLApAQCAtMzI3LDcgKzMyMyw3IEBACiAjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQogICBzdGQ6OnN0cmluZyBsZWdhY3k7CiAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFbnYoIkNNQUtFX0xFR0FDWV9DWUdXSU5fV0lOMzIiLCBsZWdhY3kpICYmCi0gICAgICBjbUlzT24obGVnYWN5LmNfc3RyKCkpKSB7CisgICAgICBjbUlzT24obGVnYWN5KSkgewogICAgIHRoaXMtPlNldERlZmluaXRpb24oIldJTjMyIiwgIjEiKTsKICAgICB0aGlzLT5TZXREZWZpbml0aW9uKCJDTUFLRV9IT1NUX1dJTjMyIiwgIjEiKTsKICAgfQpAQCAtNDExLDExICs0MDcsMTIgQEAKICAgICB0aGlzLT5Qb3NpdGlvbi0+QnVpbGRTeXN0ZW1EaXJlY3RvcnktPkxpbmtEaXJlY3Rvcmllc0JhY2t0cmFjZXMsCiAgICAgdGhpcy0+UG9zaXRpb24tPkxpbmtEaXJlY3Rvcmllc1Bvc2l0aW9uKTsKIAotICBjb25zdCBjaGFyKiBpbmNsdWRlX3JlZ2V4ID0KKyAgY21Qcm9wIGluY2x1ZGVfcmVnZXggPQogICAgIHBhcmVudC0+QnVpbGRTeXN0ZW1EaXJlY3RvcnktPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZSgKICAgICAgICJJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTiIpOwogICB0aGlzLT5Qb3NpdGlvbi0+QnVpbGRTeXN0ZW1EaXJlY3RvcnktPlByb3BlcnRpZXMuU2V0UHJvcGVydHkoCi0gICAgIklOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OIiwgaW5jbHVkZV9yZWdleCk7CisgICAgIklOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OIiwKKyAgICBpbmNsdWRlX3JlZ2V4ID8gaW5jbHVkZV9yZWdleC0+Y19zdHIoKSA6IG51bGxwdHIpOwogfQogCiBjbVN0YXRlKiBjbVN0YXRlU25hcHNob3Q6OkdldFN0YXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuaCBiL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuaAppbmRleCAwMjFmZDUzLi5jMTlmMTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdGF0ZVNuYXBzaG90LmgKKysrIGIvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5oCkBAIC0yOCw3ICsyOCw2IEBACiAgIGJvb2wgSXNJbml0aWFsaXplZChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgY29uc3Q7CiAgIHZvaWQgU2V0RGVmaW5pdGlvbihzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY206OnN0cmluZ192aWV3IHZhbHVlKTsKICAgdm9pZCBSZW1vdmVEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKTsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFVudXNlZEtleXMoKSBjb25zdDsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENsb3N1cmVLZXlzKCkgY29uc3Q7CiAgIGJvb2wgUmFpc2VTY29wZShzdGQ6OnN0cmluZyBjb25zdCYgdmFyLCBjb25zdCBjaGFyKiB2YXJEZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdHJpbmcuaHh4IGIvU291cmNlL2NtU3RyaW5nLmh4eAppbmRleCA5ZTkxOTg2Li44N2JmZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdHJpbmcuaHh4CisrKyBiL1NvdXJjZS9jbVN0cmluZy5oeHgKQEAgLTE2LDggKzE2LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+Ci0KLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiBuYW1lc3BhY2UgY20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdHJpbmdBbGdvcml0aG1zLmN4eCBiL1NvdXJjZS9jbVN0cmluZ0FsZ29yaXRobXMuY3h4CmluZGV4IGJiNmRjZDcuLjcxZDI4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0cmluZ0FsZ29yaXRobXMuY3h4CisrKyBiL1NvdXJjZS9jbVN0cmluZ0FsZ29yaXRobXMuY3h4CkBAIC00LDcgKzQsNyBAQAogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNlcnJubz4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGNzdGRsaWI+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0cmluZ0FsZ29yaXRobXMuaCBiL1NvdXJjZS9jbVN0cmluZ0FsZ29yaXRobXMuaAppbmRleCAwZTQwNWRlLi40YjAwOTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdHJpbmdBbGdvcml0aG1zLmgKKysrIGIvU291cmNlL2NtU3RyaW5nQWxnb3JpdGhtcy5oCkBAIC0yMCw2ICsyMCwyMCBAQAogLyoqIFN0cmluZyByYW5nZSB0eXBlLiAgKi8KIHVzaW5nIGNtU3RyaW5nUmFuZ2UgPSBjbVJhbmdlPHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3I+OwogCisvKiogQ2hlY2sgZm9yIG5vbi1lbXB0eSBzdHJpbmcuICAqLworaW5saW5lIGJvb2wgY21Ob25lbXB0eShjb25zdCBjaGFyKiBzdHIpCit7CisgIHJldHVybiBzdHIgJiYgKnN0cjsKK30KK2lubGluZSBib29sIGNtTm9uZW1wdHkoY206OnN0cmluZ192aWV3IHN0cikKK3sKKyAgcmV0dXJuICFzdHIuZW1wdHkoKTsKK30KK2lubGluZSBib29sIGNtTm9uZW1wdHkoc3RkOjpzdHJpbmcgY29uc3QqIHN0cikKK3sKKyAgcmV0dXJuIHN0ciAmJiAhc3RyLT5lbXB0eSgpOworfQorCiAvKiogQ2FsbGFibGUgc3RyaW5nIGNvbXBhcmlzb24gc3RydWN0LiAgKi8KIHN0cnVjdCBjbVN0ckNtcAogewpAQCAtODcsNyArMTAxLDcgQEAKICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGFyZ3NPdXQpCiB7CiAgIGZvciAoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KSB7Ci0gICAgRXhwYW5kTGlzdCgqZmlyc3QsIGFyZ3NPdXQpOworICAgIGNtRXhwYW5kTGlzdCgqZmlyc3QsIGFyZ3NPdXQpOwogICB9CiB9CiAKQEAgLTIwNSwxMCArMjE5LDExIEBACiBib29sIGNtSXNPbihjbTo6c3RyaW5nX3ZpZXcgdmFsKTsKIGlubGluZSBib29sIGNtSXNPbihjb25zdCBjaGFyKiB2YWwpCiB7Ci0gIGlmICghdmFsKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiBjbUlzT24oY206OnN0cmluZ192aWV3KHZhbCkpOworICByZXR1cm4gdmFsICYmIGNtSXNPbihjbTo6c3RyaW5nX3ZpZXcodmFsKSk7Cit9CitpbmxpbmUgYm9vbCBjbUlzT24oc3RkOjpzdHJpbmcgY29uc3QqIHZhbCkKK3sKKyAgcmV0dXJuIHZhbCAmJiBjbUlzT24oKnZhbCk7CiB9CiAKIC8qKgpAQCAtMjIxLDEwICsyMzYsMTEgQEAKIGJvb2wgY21Jc09mZihjbTo6c3RyaW5nX3ZpZXcgdmFsKTsKIGlubGluZSBib29sIGNtSXNPZmYoY29uc3QgY2hhciogdmFsKQogewotICBpZiAoIXZhbCkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBjbUlzT2ZmKGNtOjpzdHJpbmdfdmlldyh2YWwpKTsKKyAgcmV0dXJuICF2YWwgfHwgY21Jc09mZihjbTo6c3RyaW5nX3ZpZXcodmFsKSk7Cit9CitpbmxpbmUgYm9vbCBjbUlzT2ZmKHN0ZDo6c3RyaW5nIGNvbnN0KiB2YWwpCit7CisgIHJldHVybiAhdmFsIHx8IGNtSXNPZmYoKnZhbCk7CiB9CiAKIC8qKiBSZXR1cm5zIHRydWUgaWYgc3RyaW5nIEBhIHN0ciBzdGFydHMgd2l0aCB0aGUgY2hhcmFjdGVyIEBhIHByZWZpeC4gICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdHJpbmdDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVN0cmluZ0NvbW1hbmQuY3h4CmluZGV4IDkyMTIxOTUuLmE3YzIxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0cmluZ0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVN0cmluZ0NvbW1hbmQuY3h4CkBAIC0xMSwxMSArMTEsMTAgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAKICNpbmNsdWRlIDxjbS9pdGVyYXRvcj4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCi0KICNpbmNsdWRlICJjbUNyeXB0b0hhc2guaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgpAQCAtMTI0LDYgKzEyMywyNyBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBIYW5kbGVIZXhDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQoreworICBpZiAoYXJncy5zaXplKCkgIT0gMykgeworICAgIHN0YXR1cy5TZXRFcnJvcigiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgYXV0byBjb25zdCYgaW5zdHIgPSBhcmdzWzFdOworICBhdXRvIGNvbnN0JiBvdXR2YXIgPSBhcmdzWzJdOworICBzdGQ6OnN0cmluZyBvdXRwdXQoaW5zdHIuc2l6ZSgpICogMiwgJyAnKTsKKworICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGhleEluZGV4ID0gMDsKKyAgZm9yIChhdXRvIGNvbnN0JiBjIDogaW5zdHIpIHsKKyAgICBzcHJpbnRmKCZvdXRwdXRbaGV4SW5kZXhdLCAiJS4yeCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpICYgMHhGRik7CisgICAgaGV4SW5kZXggKz0gMjsKKyAgfQorCisgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZERlZmluaXRpb24ob3V0dmFyLCBvdXRwdXQpOworICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBIYW5kbGVDb25maWd1cmVDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQogewpAQCAtOTM2LDYgKzk1Niw3IEBACiAgICAgeyAiVE9VUFBFUiJfcywgSGFuZGxlVG9VcHBlckNvbW1hbmQgfSwKICAgICB7ICJDT01QQVJFIl9zLCBIYW5kbGVDb21wYXJlQ29tbWFuZCB9LAogICAgIHsgIkFTQ0lJIl9zLCBIYW5kbGVBc2NpaUNvbW1hbmQgfSwKKyAgICB7ICJIRVgiX3MsIEhhbmRsZUhleENvbW1hbmQgfSwKICAgICB7ICJDT05GSUdVUkUiX3MsIEhhbmRsZUNvbmZpZ3VyZUNvbW1hbmQgfSwKICAgICB7ICJMRU5HVEgiX3MsIEhhbmRsZUxlbmd0aENvbW1hbmQgfSwKICAgICB7ICJBUFBFTkQiX3MsIEhhbmRsZUFwcGVuZENvbW1hbmQgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN1YmNvbW1hbmRUYWJsZS5oIGIvU291cmNlL2NtU3ViY29tbWFuZFRhYmxlLmgKaW5kZXggNjVlYjhjNy4uN2RlYWFlZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3ViY29tbWFuZFRhYmxlLmgKKysrIGIvU291cmNlL2NtU3ViY29tbWFuZFRhYmxlLmgKQEAgLTExLDggKzExLDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKIGNsYXNzIGNtRXhlY3V0aW9uU3RhdHVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TeXN0ZW1Ub29scy5jeHggYi9Tb3VyY2UvY21TeXN0ZW1Ub29scy5jeHgKaW5kZXggOTEyN2M1MC4uNzk4YzI5YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3lzdGVtVG9vbHMuY3h4CisrKyBiL1NvdXJjZS9jbVN5c3RlbVRvb2xzLmN4eApAQCAtMSwxMCArMSwyMCBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX3N1bikKKy8vIFBPU0lYIEFQSXMgYXJlIG5lZWRlZAorIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDA4MDlMCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisvLyBGb3IgaXNhc2NpaQorIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNzAwCisjZW5kaWYKKwogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAogI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgpAQCAtMTIsNyArMjIsOCBAQAogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQotIyAgaW5jbHVkZSAiY21fbGliYXJjaGl2ZS5oIgorIyAgaW5jbHVkZSA8Y20zcC9hcmNoaXZlLmg+CisjICBpbmNsdWRlIDxjbTNwL2FyY2hpdmVfZW50cnkuaD4KIAogIyAgaW5jbHVkZSAiY21BcmNoaXZlV3JpdGUuaCIKICMgIGluY2x1ZGUgImNtTG9jYWxlLmgiCkBAIC0yNSw2ICszNiw5IEBACiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyMgIGlmIGRlZmluZWQoX1dJTjMyKQorIyAgICBpbmNsdWRlIDxjbS9tZW1vcnk+CisjICBlbmRpZgogIyAgaW5jbHVkZSAiY21DcnlwdG9IYXNoLmgiCiAjZW5kaWYKIApAQCAtODA5LDcgKzgyMyw5IEBACiAgIC8vIFBlcmZvcm0gbGlidXYgb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gbm93LCBhbmQgdGhlbiB1bi1kbyBpdHMKICAgLy8gZ2xvYmFsIF9mbW9kZSBzZXR0aW5nIHNvIHRoYXQgdXNpbmcgbGlidXYgZG9lcyBub3QgY2hhbmdlIHRoZQogICAvLyBkZWZhdWx0IGZpbGUgdGV4dC9iaW5hcnkgbW9kZS4gIFNlZSBsaWJ1diBpc3N1ZSA4NDAuCi0gIHV2X2xvb3BfY2xvc2UodXZfZGVmYXVsdF9sb29wKCkpOworICBpZiAodXZfbG9vcF90KiBsb29wID0gdXZfZGVmYXVsdF9sb29wKCkpIHsKKyAgICB1dl9sb29wX2Nsb3NlKGxvb3ApOworICB9CiAjICBpZmRlZiBfTVNDX1ZFUgogICBfc2V0X2Ztb2RlKF9PX1RFWFQpOwogIyAgZWxzZQpAQCAtOTA4LDcgKzkyNCw2IEBACiAgIHN0ZDo6c3RyaW5nIHRodW1icHJpbnQ7CiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApICYmIGRlZmluZWQoX1dJTjMyKQotICBCWVRFKiBjZXJ0RGF0YSA9IE5VTEw7CiAgIENSWVBUX0lOVEVHRVJfQkxPQiBjcnlwdEJsb2I7CiAgIEhDRVJUU1RPUkUgY2VydFN0b3JlID0gTlVMTDsKICAgUENDRVJUX0NPTlRFWFQgY2VydENvbnRleHQgPSBOVUxMOwpAQCAtOTIwLDEyICs5MzUsMTIgQEAKICAgaWYgKGNlcnRGaWxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFICYmIGNlcnRGaWxlICE9IE5VTEwpIHsKICAgICBEV09SRCBmaWxlU2l6ZSA9IEdldEZpbGVTaXplKGNlcnRGaWxlLCBOVUxMKTsKICAgICBpZiAoZmlsZVNpemUgIT0gSU5WQUxJRF9GSUxFX1NJWkUpIHsKLSAgICAgIGNlcnREYXRhID0gbmV3IEJZVEVbZmlsZVNpemVdOworICAgICAgYXV0byBjZXJ0RGF0YSA9IGNtOjptYWtlX3VuaXF1ZTxCWVRFW10+KGZpbGVTaXplKTsKICAgICAgIGlmIChjZXJ0RGF0YSAhPSBOVUxMKSB7CiAgICAgICAgIERXT1JEIGR3UmVhZCA9IDA7Ci0gICAgICAgIGlmIChSZWFkRmlsZShjZXJ0RmlsZSwgY2VydERhdGEsIGZpbGVTaXplLCAmZHdSZWFkLCBOVUxMKSkgeworICAgICAgICBpZiAoUmVhZEZpbGUoY2VydEZpbGUsIGNlcnREYXRhLmdldCgpLCBmaWxlU2l6ZSwgJmR3UmVhZCwgTlVMTCkpIHsKICAgICAgICAgICBjcnlwdEJsb2IuY2JEYXRhID0gZmlsZVNpemU7Ci0gICAgICAgICAgY3J5cHRCbG9iLnBiRGF0YSA9IGNlcnREYXRhOworICAgICAgICAgIGNyeXB0QmxvYi5wYkRhdGEgPSBjZXJ0RGF0YS5nZXQoKTsKIAogICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBjZXJ0CiAgICAgICAgICAgaWYgKFBGWElzUEZYQmxvYigmY3J5cHRCbG9iKSkgewpAQCAtOTYxLDcgKzk3Niw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZVtdIGNlcnREYXRhOwogICAgICAgfQogICAgIH0KICAgICBDbG9zZUhhbmRsZShjZXJ0RmlsZSk7CkBAIC0xMDU0LDggKzEwNjgsNyBAQAogICAgICAgICBpZiAodHlwZSA8IDAgJiYgIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShmbmFtZSkpIHsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2ZuYW1lLnNpemUoKSA+PSBwcGF0aC5zaXplKCkgJiYKLSAgICAgICAgICAgIHNmbmFtZS5zdWJzdHIoMCwgcHBhdGguc2l6ZSgpKSA9PSBwcGF0aCkgeworICAgICAgICBpZiAoY21IYXNQcmVmaXgoc2ZuYW1lLCBwcGF0aCkpIHsKICAgICAgICAgICBmaWxlcy5wdXNoX2JhY2soZm5hbWUpOwogICAgICAgICAgIHJlcyA9IHRydWU7CiAgICAgICAgIH0KQEAgLTEyMDAsNyArMTIxMyw3IEBACiB7CiAjICBpZiAhZGVmaW5lZChIQVZFX1VOU0VURU5WKQogICBzdGQ6OnN0cmluZyB2YXIgPSBjbVN0ckNhdCh2YWx1ZSwgJz0nKTsKLSAgcmV0dXJuIGNtU3lzdGVtVG9vbHM6OlB1dEVudih2YXIuY19zdHIoKSk7CisgIHJldHVybiBjbVN5c3RlbVRvb2xzOjpQdXRFbnYodmFyKTsKICMgIGVsc2UKICAgdW5zZXRlbnYodmFsdWUpOwogICByZXR1cm4gdHJ1ZTsKQEAgLTEzMTEsNiArMTMyNCw3IEBACiAKICAgY21BcmNoaXZlV3JpdGUgYShmb3V0LCBjb21wcmVzcywgZm9ybWF0LmVtcHR5KCkgPyAicGF4ciIgOiBmb3JtYXQpOwogCisgIGEuT3BlbigpOwogICBhLlNldE1UaW1lKG10aW1lKTsKICAgYS5TZXRWZXJib3NlKHZlcmJvc2UpOwogICBib29sIHRhckNyZWF0ZWRTdWNjZXNzZnVsbHkgPSB0cnVlOwpAQCAtMjA2OCw2ICsyMDgyLDEyIEBACiAgIHJldHVybiBjbVN5c3RlbVRvb2xzQ01ha2VSb290OwogfQogCitzdGQ6OnN0cmluZyBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpCit7CisgIHJldHVybiBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgIGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKSk7Cit9CisKIHZvaWQgY21TeXN0ZW1Ub29sczo6TWFrZWZpbGVDb2xvckVjaG8oaW50IGNvbG9yLCBjb25zdCBjaGFyKiBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5ld2xpbmUsIGJvb2wgZW5hYmxlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN5c3RlbVRvb2xzLmggYi9Tb3VyY2UvY21TeXN0ZW1Ub29scy5oCmluZGV4IGVlMTQ5YTAuLmI4ODZjNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN5c3RlbVRvb2xzLmgKKysrIGIvU291cmNlL2NtU3lzdGVtVG9vbHMuaApAQCAtMzkwLDYgKzM5MCw5IEBACiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCYgR2V0Q01DbERlcHNDb21tYW5kKCk7CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCYgR2V0Q01ha2VSb290KCk7CiAKKyAgLyoqIEdldCB0aGUgQ1dEIG1hcHBlZCB0aHJvdWdoIHRoZSBLV1N5cyB0cmFuc2xhdGlvbiBtYXAuICAqLworICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKKwogICAvKiogRWNobyBhIG1lc3NhZ2UgaW4gY29sb3IgdXNpbmcgS1dTeXMncyBUZXJtaW5hbCBjcHJpbnRmLiAgKi8KICAgc3RhdGljIHZvaWQgTWFrZWZpbGVDb2xvckVjaG8oaW50IGNvbG9yLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBib29sIG5ld0xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXQuY3h4IGIvU291cmNlL2NtVGFyZ2V0LmN4eAppbmRleCAxYWQ5ZmQxLi5hZWM5YWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXQuY3h4CisrKyBiL1NvdXJjZS9jbVRhcmdldC5jeHgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgogI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgpAQCAtNzgsNyArNzksNyBAQAogfQogCiB0ZW1wbGF0ZSA8PgotY29uc3QgY2hhciogY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpHZXRTb3VyY2VzPGNtVGFyZ2V0PigKK2NtUHJvcCBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFNvdXJjZXM8Y21UYXJnZXQ+KAogICBjbVRhcmdldCBjb25zdCogdGd0LCBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAogICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KQogewpAQCAtMTU2LDcgKzE1Nyw3IEBACiAgIH0KICAgc3RhdGljIHN0ZDo6c3RyaW5nIHNyY3M7CiAgIHNyY3MgPSBzcy5zdHIoKTsKLSAgcmV0dXJuIHNyY3MuY19zdHIoKTsKKyAgcmV0dXJuICZzcmNzOwogfQogCiBjbGFzcyBjbVRhcmdldEludGVybmFscwpAQCAtMTg1LDYgKzE4Niw3IEBACiAgIHN0ZDo6dmVjdG9yPGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcio+IEluc3RhbGxHZW5lcmF0b3JzOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gU3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzOwogICBjbVRhcmdldDo6TGlua0xpYnJhcnlWZWN0b3JUeXBlIE9yaWdpbmFsTGlua0xpYnJhcmllczsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEJUczxzdGQ6OnN0cmluZz4+IExhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gSW5jbHVkZURpcmVjdG9yaWVzRW50cmllczsKICAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUJhY2t0cmFjZT4gSW5jbHVkZURpcmVjdG9yaWVzQmFja3RyYWNlczsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENvbXBpbGVPcHRpb25zRW50cmllczsKQEAgLTIxNSw3ICsyMTcsNyBAQAogfTsKIAogY21UYXJnZXQ6OmNtVGFyZ2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICBWaXNpYmlsaXR5IHZpcywgY21NYWtlZmlsZSogbWYsIGJvb2wgcGVyQ29uZmlnKQorICAgICAgICAgICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZiwgUGVyQ29uZmlnIHBlckNvbmZpZykKICAgOiBpbXBsKGNtOjptYWtlX3VuaXF1ZTxjbVRhcmdldEludGVybmFscz4oKSkKIHsKICAgYXNzZXJ0KG1mKTsKQEAgLTIzMSw3ICsyMzMsNyBAQAogICAgICh2aXMgPT0gVmlzaWJpbGl0eUltcG9ydGVkIHx8IHZpcyA9PSBWaXNpYmlsaXR5SW1wb3J0ZWRHbG9iYWxseSk7CiAgIGltcGwtPkltcG9ydGVkR2xvYmFsbHlWaXNpYmxlID0gdmlzID09IFZpc2liaWxpdHlJbXBvcnRlZEdsb2JhbGx5OwogICBpbXBsLT5CdWlsZEludGVyZmFjZUluY2x1ZGVzQXBwZW5kZWQgPSBmYWxzZTsKLSAgaW1wbC0+UGVyQ29uZmlnID0gcGVyQ29uZmlnOworICBpbXBsLT5QZXJDb25maWcgPSAocGVyQ29uZmlnID09IFBlckNvbmZpZzo6WWVzKTsKIAogICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBETEwgcGxhdGZvcm0uCiAgIGltcGwtPklzRExMUGxhdGZvcm0gPQpAQCAtMzAzLDkgKzMwNSwxMSBAQAogICAgIGluaXRQcm9wKCJQREJfT1VUUFVUX0RJUkVDVE9SWSIpOwogICAgIGluaXRQcm9wKCJDT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZIik7CiAgICAgaW5pdFByb3AoIkZSQU1FV09SSyIpOworICAgIGluaXRQcm9wKCJGUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVgiKTsKICAgICBpbml0UHJvcCgiRm9ydHJhbl9GT1JNQVQiKTsKICAgICBpbml0UHJvcCgiRm9ydHJhbl9NT0RVTEVfRElSRUNUT1JZIik7CiAgICAgaW5pdFByb3AoIkZvcnRyYW5fQ09NUElMRVJfTEFVTkNIRVIiKTsKKyAgICBpbml0UHJvcCgiRm9ydHJhbl9QUkVQUk9DRVNTIik7CiAgICAgaW5pdFByb3AoIkdOVXRvTVMiKTsKICAgICBpbml0UHJvcCgiT1NYX0FSQ0hJVEVDVFVSRVMiKTsKICAgICBpbml0UHJvcCgiSU9TX0lOU1RBTExfQ09NQklORUQiKTsKQEAgLTM2Miw2ICszNjYsNyBAQAogICAgIGluaXRQcm9wKCJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiIpOwogICAgIGluaXRQcm9wKCJDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMiKTsKICAgICBpbml0UHJvcCgiQ1VEQV9SVU5USU1FX0xJQlJBUlkiKTsKKyAgICBpbml0UHJvcCgiQ1VEQV9BUkNISVRFQ1RVUkVTIik7CiAgICAgaW5pdFByb3AoIkxJTktfU0VBUkNIX1NUQVJUX1NUQVRJQyIpOwogICAgIGluaXRQcm9wKCJMSU5LX1NFQVJDSF9FTkRfU1RBVElDIik7CiAgICAgaW5pdFByb3AoIlN3aWZ0X0xBTkdVQUdFX1ZFUlNJT04iKTsKQEAgLTM3MCw2ICszNzUsOCBAQAogICAgIGluaXRQcm9wKCJESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUyIpOwogICAgIGluaXRQcm9wKCJVTklUWV9CVUlMRCIpOwogICAgIGluaXRQcm9wVmFsdWUoIlVOSVRZX0JVSUxEX0JBVENIX1NJWkUiLCAiOCIpOworICAgIGluaXRQcm9wVmFsdWUoIlVOSVRZX0JVSUxEX01PREUiLCAiQkFUQ0giKTsKKyAgICBpbml0UHJvcFZhbHVlKCJQQ0hfV0FSTl9JTlZBTElEIiwgIk9OIik7CiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1hjb2RlKCkpIHsKICAgICAgIGluaXRQcm9wKCJYQ09ERV9TQ0hFTUVfQUREUkVTU19TQU5JVElaRVIiKTsKQEAgLTQxMiw4ICs0MTksOCBAQAogICAgICAgIklOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fIgogICAgIH07CiAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIGNvbmZpZ3VyYXRpb24gdHlwZXMuCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzOwotICAgIG1mLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdOYW1lcyk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzID0KKyAgICAgIG1mLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnTmFtZSA6IGNvbmZpZ05hbWVzKSB7CiAgICAgICBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWdOYW1lKTsKICAgICAgIGZvciAoYXV0byBjb25zdCYgcHJvcCA6IGNvbmZpZ1Byb3BzKSB7CkBAIC00MzgsNiArNDQ1LDEzIEBACiAgICAgICAgICAgY21TdHJDYXQoY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZ05hbWUpLCAiX1BPU1RGSVgiKTsKICAgICAgICAgaW5pdFByb3AocHJvcGVydHkpOwogICAgICAgfQorCisgICAgICBpZiAoaW1wbC0+VGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CisgICAgICAgICAgaW1wbC0+VGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHByb3BlcnR5ID0gY21TdHJDYXQoIkZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWdOYW1lKSk7CisgICAgICAgIGluaXRQcm9wKHByb3BlcnR5KTsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtNTIxLDcgKzUzNSw3IEBACiAgICAgaW5pdFByb3AoIkpPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSIik7CiAgIH0KIAotICBpZiAoaW1wbC0+VGFyZ2V0VHlwZSA8PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKKyAgaWYgKGltcGwtPlRhcmdldFR5cGUgPD0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUKSB7CiAgICAgaW5pdFByb3AoIkRPVE5FVF9UQVJHRVRfRlJBTUVXT1JLIik7CiAgICAgaW5pdFByb3AoIkRPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04iKTsKICAgfQpAQCAtNTg2LDYgKzYwMCw0MCBAQAogICByZXR1cm4gaW1wbC0+TWFrZWZpbGUtPkdldEdsb2JhbEdlbmVyYXRvcigpOwogfQogCitCVHM8c3RkOjpzdHJpbmc+IGNvbnN0KiBjbVRhcmdldDo6R2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KAorICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lKSBjb25zdAoreworICBhdXRvIGVudHJ5ID0gaW1wbC0+TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnRpZXMuZmluZChwcm9wZXJ0eU5hbWUpOworICBpZiAoZW50cnkgIT0gaW1wbC0+TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnRpZXMuZW5kKCkpIHsKKyAgICByZXR1cm4gJmVudHJ5LT5zZWNvbmQ7CisgIH0KKworICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBjbVRhcmdldDo6U2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSkKK3sKKyAgY21MaXN0RmlsZUJhY2t0cmFjZSBmZWF0dXJlQmFja3RyYWNlOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcGwtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBpZiAoaW1wbC0+Q29tcGlsZUZlYXR1cmVzRW50cmllc1tpXSA9PSBmZWF0dXJlKSB7CisgICAgICBpZiAoaSA8IGltcGwtPkNvbXBpbGVGZWF0dXJlc0JhY2t0cmFjZXMuc2l6ZSgpKSB7CisgICAgICAgIGZlYXR1cmVCYWNrdHJhY2UgPSBpbXBsLT5Db21waWxlRmVhdHVyZXNCYWNrdHJhY2VzW2ldOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgQlRzPHN0ZDo6c3RyaW5nPiYgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5ID0KKyAgICBpbXBsLT5MYW5ndWFnZVN0YW5kYXJkUHJvcGVydGllc1tjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIildOworICBpZiAobGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlICE9IHZhbHVlKSB7CisgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlID0gdmFsdWU7CisgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LkJhY2t0cmFjZXMuY2xlYXIoKTsKKyAgfQorICBsYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkuQmFja3RyYWNlcy5lbXBsYWNlX2JhY2soZmVhdHVyZUJhY2t0cmFjZSk7Cit9CisKIHZvaWQgY21UYXJnZXQ6OkFkZFV0aWxpdHkoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIGJvb2wgY3Jvc3MsIGNtTWFrZWZpbGUqIG1mKQogewogICBpbXBsLT5VdGlsaXRpZXMuaW5zZXJ0KEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+KApAQCAtNjI0LDYgKzY3MiwxMiBAQAogICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5QXNCb29sKCJNQUNPU1hfQlVORExFIikpOwogfQogCitib29sIGNtVGFyZ2V0OjpJc0FuZHJvaWRHdWlFeGVjdXRhYmxlKCkgY29uc3QKK3sKKyAgcmV0dXJuICh0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFICYmIGltcGwtPklzQW5kcm9pZCAmJgorICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5QXNCb29sKCJBTkRST0lEX0dVSSIpKTsKK30KKwogc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBjb25zdCYgY21UYXJnZXQ6OkdldFByZUJ1aWxkQ29tbWFuZHMoKSBjb25zdAogewogICByZXR1cm4gaW1wbC0+UHJlQnVpbGRDb21tYW5kczsKQEAgLTg4Myw3ICs5MzcsNyBAQAogICAgICAgY21MaXN0RmlsZUNvbnRleHQgbGZjID0gY21kLnNlY29uZDsKICAgICAgIGxmYy5GaWxlUGF0aCA9IGNtRGlyLkNvbnZlcnRUb1JlbFBhdGhJZk5vdENvbnRhaW5lZCgKICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldFNvdXJjZURpcmVjdG9yeSgpLCBsZmMuRmlsZVBhdGgpOwotICAgICAgcyA8PCAiICogIiA8PCBsZmMgPDwgc3RkOjplbmRsOworICAgICAgcyA8PCAiICogIiA8PCBsZmMgPDwgJ1xuJzsKICAgICB9CiAgIH0KIH0KQEAgLTEwMDIsNyArMTA1Niw3IEBACiAgICAgZGVwZW5kZW5jaWVzICs9ICI7IjsKICAgICBkZXBlbmRlbmNpZXMgKz0gbGliOwogICAgIGRlcGVuZGVuY2llcyArPSAiOyI7Ci0gICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKHRhcmdldEVudHJ5LCBkZXBlbmRlbmNpZXMuY19zdHIoKSwKKyAgICBtZi5BZGRDYWNoZURlZmluaXRpb24odGFyZ2V0RW50cnksIGRlcGVuZGVuY2llcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlcGVuZGVuY2llcyBmb3IgdGhlIHRhcmdldCIsIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKICAgfQogfQpAQCAtMTExNSw2ICsxMTY5LDExIEBACiAgICAgcmV0dXJuOwogICB9CiAjZGVmaW5lIE1BS0VfU1RBVElDX1BST1AoUFJPUCkgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3AjI1BST1AgPSAjUFJPUAorICBNQUtFX1NUQVRJQ19QUk9QKENfU1RBTkRBUkQpOworICBNQUtFX1NUQVRJQ19QUk9QKENYWF9TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoQ1VEQV9TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoT0JKQ19TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoT0JKQ1hYX1NUQU5EQVJEKTsKICAgTUFLRV9TVEFUSUNfUFJPUChDT01QSUxFX0RFRklOSVRJT05TKTsKICAgTUFLRV9TVEFUSUNfUFJPUChDT01QSUxFX0ZFQVRVUkVTKTsKICAgTUFLRV9TVEFUSUNfUFJPUChDT01QSUxFX09QVElPTlMpOwpAQCAtMTI5NSw5ICsxMzU0LDE4IEBACiAgICAgcmV1c2VkVGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdChyZXVzZWRGcm9tLCAiLmRpci8iKSk7CiAKLSAgICB0aGlzLT5TZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIsCi0gICAgICAgICAgICAgICAgICAgICAgcmV1c2VkVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIpKTsKKyAgICBjbVByb3AgdG1wID0gcmV1c2VkVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIpOworICAgIHRoaXMtPlNldFByb3BlcnR5KCJDT01QSUxFX1BEQl9OQU1FIiwgdG1wID8gdG1wLT5jX3N0cigpIDogbnVsbHB0cik7CiAgICAgdGhpcy0+QWRkVXRpbGl0eShyZXVzZWRGcm9tLCBmYWxzZSwgaW1wbC0+TWFrZWZpbGUpOworICB9IGVsc2UgaWYgKHByb3AgPT0gcHJvcENfU1RBTkRBUkQgfHwgcHJvcCA9PSBwcm9wQ1hYX1NUQU5EQVJEIHx8CisgICAgICAgICAgICAgcHJvcCA9PSBwcm9wQ1VEQV9TVEFOREFSRCB8fCBwcm9wID09IHByb3BPQkpDX1NUQU5EQVJEIHx8CisgICAgICAgICAgICAgcHJvcCA9PSBwcm9wT0JKQ1hYX1NUQU5EQVJEKSB7CisgICAgaWYgKHZhbHVlKSB7CisgICAgICBpbXBsLT5MYW5ndWFnZVN0YW5kYXJkUHJvcGVydGllc1twcm9wXSA9CisgICAgICAgIEJUczxzdGQ6OnN0cmluZz4odmFsdWUsIGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGltcGwtPkxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzLmVyYXNlKHByb3ApOworICAgIH0KICAgfSBlbHNlIHsKICAgICBpbXBsLT5Qcm9wZXJ0aWVzLlNldFByb3BlcnR5KHByb3AsIHZhbHVlKTsKICAgfQpAQCAtMTQwMSw2ICsxNDY5LDExIEBACiAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJJTVBPUlRFRF9MSUJOQU1FIikpIHsKICAgICBpbXBsLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgKyAiIHByb3BlcnR5IG1heSBub3QgYmUgQVBQRU5EZWQuIik7CisgIH0gZWxzZSBpZiAocHJvcCA9PSAiQ19TVEFOREFSRCIgfHwgcHJvcCA9PSAiQ1hYX1NUQU5EQVJEIiB8fAorICAgICAgICAgICAgIHByb3AgPT0gIkNVREFfU1RBTkRBUkQiIHx8IHByb3AgPT0gIk9CSkNfU1RBTkRBUkQiIHx8CisgICAgICAgICAgICAgcHJvcCA9PSAiT0JKQ1hYX1NUQU5EQVJEIikgeworICAgIGltcGwtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCArICIgcHJvcGVydHkgbWF5IG5vdCBiZSBhcHBlbmRlZC4iKTsKICAgfSBlbHNlIHsKICAgICBpbXBsLT5Qcm9wZXJ0aWVzLkFwcGVuZFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZyk7CiAgIH0KQEAgLTE1MDAsNyArMTU3Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNtVGFyZ2V0Q2hlY2tMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1wb3J0ZWQpCiB7CkBAIC0xNTM4LDcgKzE2MTEsNyBAQAogICBjb250ZXh0LT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKIH0KIAotc3RhdGljIHZvaWQgY21UYXJnZXRDaGVja0lOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyhjb25zdCBjaGFyKiB2YWx1ZSwKK3N0YXRpYyB2b2lkIGNtVGFyZ2V0Q2hlY2tJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBjb250ZXh0KQogewogICAvLyBMb29rIGZvciBsaW5rLXR5cGUga2V5d29yZHMgaW4gdGhlIHZhbHVlLgpAQCAtMTU4MywxOCArMTY1NiwxOCBAQAogewogICAvLyBDZXJ0YWluIHByb3BlcnRpZXMgbmVlZCBjaGVja2luZy4KICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChwcm9wLCAiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIikpIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSkgewotICAgICAgY21UYXJnZXRDaGVja0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyhwcm9wLCB2YWx1ZSwgY29udGV4dCwgZmFsc2UpOworICAgIGlmIChjbVByb3AgdmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSkgeworICAgICAgY21UYXJnZXRDaGVja0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyhwcm9wLCAqdmFsdWUsIGNvbnRleHQsIGZhbHNlKTsKICAgICB9CiAgIH0KICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChwcm9wLCAiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIikpIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSkgewotICAgICAgY21UYXJnZXRDaGVja0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyhwcm9wLCB2YWx1ZSwgY29udGV4dCwgdHJ1ZSk7CisgICAgaWYgKGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CisgICAgICBjbVRhcmdldENoZWNrTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTKHByb3AsICp2YWx1ZSwgY29udGV4dCwgdHJ1ZSk7CiAgICAgfQogICB9CiAgIGlmIChwcm9wID09ICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCkpIHsKLSAgICAgIGNtVGFyZ2V0Q2hlY2tJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVModmFsdWUsIGNvbnRleHQpOworICAgIGlmIChjbVByb3AgdmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSkgeworICAgICAgY21UYXJnZXRDaGVja0lOVEVSRkFDRV9MSU5LX0xJQlJBUklFUygqdmFsdWUsIGNvbnRleHQpOwogICAgIH0KICAgfQogICBpZiAocHJvcCA9PSAiSU1QT1JURURfR0xPQkFMIikgewpAQCAtMTYwNCwxNiArMTY3NywyMSBAQAogICB9CiB9CiAKLWNvbnN0IGNoYXIqIGNtVGFyZ2V0OjpHZXRDb21wdXRlZFByb3BlcnR5KAotICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKLSAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkgY29uc3QKK2NtUHJvcCBjbVRhcmdldDo6R2V0Q29tcHV0ZWRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpIGNvbnN0CiB7CiAgIHJldHVybiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFByb3BlcnR5KHRoaXMsIHByb3AsIG1lc3NlbmdlciwgY29udGV4dCk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtVGFyZ2V0OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKK2NtUHJvcCBjbVRhcmdldDo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CiB7CiAjZGVmaW5lIE1BS0VfU1RBVElDX1BST1AoUFJPUCkgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3AjI1BST1AgPSAjUFJPUAorICBNQUtFX1NUQVRJQ19QUk9QKENfU1RBTkRBUkQpOworICBNQUtFX1NUQVRJQ19QUk9QKENYWF9TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoQ1VEQV9TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoT0JKQ19TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoT0JKQ1hYX1NUQU5EQVJEKTsKICAgTUFLRV9TVEFUSUNfUFJPUChMSU5LX0xJQlJBUklFUyk7CiAgIE1BS0VfU1RBVElDX1BST1AoVFlQRSk7CiAgIE1BS0VfU1RBVElDX1BST1AoSU5DTFVERV9ESVJFQ1RPUklFUyk7CkBAIC0xNjMwLDggKzE3MDgsMTUgQEAKICAgTUFLRV9TVEFUSUNfUFJPUChCSU5BUllfRElSKTsKICAgTUFLRV9TVEFUSUNfUFJPUChTT1VSQ0VfRElSKTsKICAgTUFLRV9TVEFUSUNfUFJPUChTT1VSQ0VTKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChGQUxTRSk7CisgIE1BS0VfU1RBVElDX1BST1AoVFJVRSk7CiAjdW5kZWYgTUFLRV9TVEFUSUNfUFJPUAogICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiBjb25zdCBzcGVjaWFsUHJvcHN7CisgICAgcHJvcENfU1RBTkRBUkQsCisgICAgcHJvcENYWF9TVEFOREFSRCwKKyAgICBwcm9wQ1VEQV9TVEFOREFSRCwKKyAgICBwcm9wT0JKQ19TVEFOREFSRCwKKyAgICBwcm9wT0JKQ1hYX1NUQU5EQVJELAogICAgIHByb3BMSU5LX0xJQlJBUklFUywKICAgICBwcm9wVFlQRSwKICAgICBwcm9wSU5DTFVERV9ESVJFQ1RPUklFUywKQEAgLTE2NTAsNiArMTczNSwxNSBAQAogICAgIHByb3BTT1VSQ0VTCiAgIH07CiAgIGlmIChzcGVjaWFsUHJvcHMuY291bnQocHJvcCkpIHsKKyAgICBpZiAocHJvcCA9PSBwcm9wQ19TVEFOREFSRCB8fCBwcm9wID09IHByb3BDWFhfU1RBTkRBUkQgfHwKKyAgICAgICAgcHJvcCA9PSBwcm9wQ1VEQV9TVEFOREFSRCB8fCBwcm9wID09IHByb3BPQkpDX1NUQU5EQVJEIHx8CisgICAgICAgIHByb3AgPT0gcHJvcE9CSkNYWF9TVEFOREFSRCkgeworICAgICAgYXV0byBwcm9wZXJ0eUl0ZXIgPSBpbXBsLT5MYW5ndWFnZVN0YW5kYXJkUHJvcGVydGllcy5maW5kKHByb3ApOworICAgICAgaWYgKHByb3BlcnR5SXRlciA9PSBpbXBsLT5MYW5ndWFnZVN0YW5kYXJkUHJvcGVydGllcy5lbmQoKSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgIH0KKyAgICAgIHJldHVybiAmKHByb3BlcnR5SXRlci0+c2Vjb25kLlZhbHVlKTsKKyAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcExJTktfTElCUkFSSUVTKSB7CiAgICAgICBpZiAoaW1wbC0+TGlua0ltcGxlbWVudGF0aW9uUHJvcGVydHlFbnRyaWVzLmVtcHR5KCkpIHsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNjU3LDExICsxNzUxLDExIEBACiAKICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4oaW1wbC0+TGlua0ltcGxlbWVudGF0aW9uUHJvcGVydHlFbnRyaWVzLCAiOyIpOwotICAgICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgICAgcmV0dXJuICZvdXRwdXQ7CiAgICAgfQogICAgIC8vIHRoZSB0eXBlIHByb3BlcnR5IHJldHVybnMgd2hhdCB0eXBlIHRoZSB0YXJnZXQgaXMKICAgICBpZiAocHJvcCA9PSBwcm9wVFlQRSkgewotICAgICAgcmV0dXJuIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdldFR5cGUoKSk7CisgICAgICByZXR1cm4gJmNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdldFR5cGUoKSk7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BJTkNMVURFX0RJUkVDVE9SSUVTKSB7CiAgICAgICBpZiAoaW1wbC0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcy5lbXB0eSgpKSB7CkBAIC0xNjcwLDcgKzE3NjQsNyBAQAogCiAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwogICAgICAgb3V0cHV0ID0gY21Kb2luKGltcGwtPkluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMsICI7Iik7Ci0gICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgICByZXR1cm4gJm91dHB1dDsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcENPTVBJTEVfRkVBVFVSRVMpIHsKICAgICAgIGlmIChpbXBsLT5Db21waWxlRmVhdHVyZXNFbnRyaWVzLmVtcHR5KCkpIHsKQEAgLTE2NzksNyArMTc3Myw3IEBACiAKICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4oaW1wbC0+Q29tcGlsZUZlYXR1cmVzRW50cmllcywgIjsiKTsKLSAgICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICAgIHJldHVybiAmb3V0cHV0OwogICAgIH0KICAgICBpZiAocHJvcCA9PSBwcm9wQ09NUElMRV9PUFRJT05TKSB7CiAgICAgICBpZiAoaW1wbC0+Q29tcGlsZU9wdGlvbnNFbnRyaWVzLmVtcHR5KCkpIHsKQEAgLTE2ODgsNyArMTc4Miw3IEBACiAKICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4oaW1wbC0+Q29tcGlsZU9wdGlvbnNFbnRyaWVzLCAiOyIpOwotICAgICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgICAgcmV0dXJuICZvdXRwdXQ7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BDT01QSUxFX0RFRklOSVRJT05TKSB7CiAgICAgICBpZiAoaW1wbC0+Q29tcGlsZURlZmluaXRpb25zRW50cmllcy5lbXB0eSgpKSB7CkBAIC0xNjk3LDcgKzE3OTEsNyBAQAogCiAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwogICAgICAgb3V0cHV0ID0gY21Kb2luKGltcGwtPkNvbXBpbGVEZWZpbml0aW9uc0VudHJpZXMsICI7Iik7Ci0gICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgICByZXR1cm4gJm91dHB1dDsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcExJTktfT1BUSU9OUykgewogICAgICAgaWYgKGltcGwtPkxpbmtPcHRpb25zRW50cmllcy5lbXB0eSgpKSB7CkBAIC0xNzA2LDcgKzE4MDAsNyBAQAogCiAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwogICAgICAgb3V0cHV0ID0gY21Kb2luKGltcGwtPkxpbmtPcHRpb25zRW50cmllcywgIjsiKTsKLSAgICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICAgIHJldHVybiAmb3V0cHV0OwogICAgIH0KICAgICBpZiAocHJvcCA9PSBwcm9wTElOS19ESVJFQ1RPUklFUykgewogICAgICAgaWYgKGltcGwtPkxpbmtEaXJlY3Rvcmllc0VudHJpZXMuZW1wdHkoKSkgewpAQCAtMTcxNiw3ICsxODEwLDcgQEAKICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4oaW1wbC0+TGlua0RpcmVjdG9yaWVzRW50cmllcywgIjsiKTsKIAotICAgICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgICAgcmV0dXJuICZvdXRwdXQ7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BNQU5VQUxMWV9BRERFRF9ERVBFTkRFTkNJRVMpIHsKICAgICAgIGlmIChpbXBsLT5VdGlsaXRpZXMuZW1wdHkoKSkgewpAQCAtMTczMiw3ICsxODI2LDcgQEAKICAgICAgICAgICByZXR1cm4gaXRlbS5WYWx1ZS5maXJzdDsKICAgICAgICAgfSk7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4odXRpbGl0aWVzLCAiOyIpOwotICAgICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgICAgcmV0dXJuICZvdXRwdXQ7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BQUkVDT01QSUxFX0hFQURFUlMpIHsKICAgICAgIGlmIChpbXBsLT5QcmVjb21waWxlSGVhZGVyc0VudHJpZXMuZW1wdHkoKSkgewpAQCAtMTc0MSwzMiArMTgzNSwzMCBAQAogCiAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwogICAgICAgb3V0cHV0ID0gY21Kb2luKGltcGwtPlByZWNvbXBpbGVIZWFkZXJzRW50cmllcywgIjsiKTsKLSAgICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICAgIHJldHVybiAmb3V0cHV0OwogICAgIH0KICAgICBpZiAocHJvcCA9PSBwcm9wSU1QT1JURUQpIHsKLSAgICAgIHJldHVybiB0aGlzLT5Jc0ltcG9ydGVkKCkgPyAiVFJVRSIgOiAiRkFMU0UiOworICAgICAgcmV0dXJuIHRoaXMtPklzSW1wb3J0ZWQoKSA/ICZwcm9wVFJVRSA6ICZwcm9wRkFMU0U7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BJTVBPUlRFRF9HTE9CQUwpIHsKLSAgICAgIHJldHVybiB0aGlzLT5Jc0ltcG9ydGVkR2xvYmFsbHlWaXNpYmxlKCkgPyAiVFJVRSIgOiAiRkFMU0UiOworICAgICAgcmV0dXJuIHRoaXMtPklzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSA/ICZwcm9wVFJVRSA6ICZwcm9wRkFMU0U7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BOQU1FKSB7Ci0gICAgICByZXR1cm4gdGhpcy0+R2V0TmFtZSgpLmNfc3RyKCk7CisgICAgICByZXR1cm4gJnRoaXMtPkdldE5hbWUoKTsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcEJJTkFSWV9ESVIpIHsKLSAgICAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCi0gICAgICAgIC5HZXREaXJlY3RvcnkoKQotICAgICAgICAuR2V0Q3VycmVudEJpbmFyeSgpCi0gICAgICAgIC5jX3N0cigpOworICAgICAgcmV0dXJuICZpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCisgICAgICAgICAgICAgICAgLkdldERpcmVjdG9yeSgpCisgICAgICAgICAgICAgICAgLkdldEN1cnJlbnRCaW5hcnkoKTsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcFNPVVJDRV9ESVIpIHsKLSAgICAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCi0gICAgICAgIC5HZXREaXJlY3RvcnkoKQotICAgICAgICAuR2V0Q3VycmVudFNvdXJjZSgpCi0gICAgICAgIC5jX3N0cigpOworICAgICAgcmV0dXJuICZpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCisgICAgICAgICAgICAgICAgLkdldERpcmVjdG9yeSgpCisgICAgICAgICAgICAgICAgLkdldEN1cnJlbnRTb3VyY2UoKTsKICAgICB9CiAgIH0KIAotICBjb25zdCBjaGFyKiByZXRWYWwgPSBpbXBsLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSBpbXBsLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgIGlmICghcmV0VmFsKSB7CiAgICAgY29uc3QgYm9vbCBjaGFpbiA9CiAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+SXNQcm9wZXJ0eUNoYWluZWQocHJvcCwgY21Qcm9wZXJ0eTo6VEFSR0VUKTsKQEAgLTE3NzQsMTcgKzE4NjYsMjAgQEAKICAgICAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpLkdldFByb3BlcnR5KAogICAgICAgICBwcm9wLCBjaGFpbik7CiAgICAgfQorICAgIHJldHVybiBudWxscHRyOwogICB9CiAgIHJldHVybiByZXRWYWw7CiB9CiAKLWNvbnN0IGNoYXIqIGNtVGFyZ2V0OjpHZXRTYWZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitzdGQ6OnN0cmluZyBjb25zdCYgY21UYXJnZXQ6OkdldFNhZmVQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogcmV0ID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7Ci0gIGlmICghcmV0KSB7Ci0gICAgcmV0dXJuICIiOworICBjbVByb3AgcmV0ID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7CisgIGlmIChyZXQpIHsKKyAgICByZXR1cm4gKnJldDsKICAgfQotICByZXR1cm4gcmV0OworCisgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBzX2VtcHR5OworICByZXR1cm4gc19lbXB0eTsKIH0KIAogYm9vbCBjbVRhcmdldDo6R2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CkBAIC0xODQ5LDcgKzE5NDQsNyBAQAogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0OgogICAgICAgICAgIC8vIEFuZHJvaWQgR1VJIGFwcGxpY2F0aW9uIHBhY2thZ2VzIHN0b3JlIHRoZSBuYXRpdmUKICAgICAgICAgICAvLyBiaW5hcnkgYXMgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICAgICByZXR1cm4gKGltcGwtPklzQW5kcm9pZCAmJiB0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiQU5EUk9JRF9HVUkiKQorICAgICAgICAgIHJldHVybiAodGhpcy0+SXNBbmRyb2lkR3VpRXhlY3V0YWJsZSgpCiAgICAgICAgICAgICAgICAgICAgID8gIkNNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWCIKICAgICAgICAgICAgICAgICAgICAgOiAiQ01BS0VfRVhFQ1VUQUJMRV9TVUZGSVgiKTsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdDoKQEAgLTE4OTAsNyArMTk4NSw3IEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3Q6CiAgICAgICAgICAgLy8gQW5kcm9pZCBHVUkgYXBwbGljYXRpb24gcGFja2FnZXMgc3RvcmUgdGhlIG5hdGl2ZQogICAgICAgICAgIC8vIGJpbmFyeSBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgICAgIHJldHVybiAoaW1wbC0+SXNBbmRyb2lkICYmIHRoaXMtPkdldFByb3BlcnR5QXNCb29sKCJBTkRST0lEX0dVSSIpCisgICAgICAgICAgcmV0dXJuICh0aGlzLT5Jc0FuZHJvaWRHdWlFeGVjdXRhYmxlKCkKICAgICAgICAgICAgICAgICAgICAgPyAiQ01BS0VfU0hBUkVEX0xJQlJBUllfUFJFRklYIgogICAgICAgICAgICAgICAgICAgICA6ICIiKTsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdDoKQEAgLTE5MTgsMzggKzIwMTMsMzcgQEAKIAogICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAKLSAgY29uc3QgY2hhciogbG9jID0gbnVsbHB0cjsKLSAgY29uc3QgY2hhciogaW1wID0gbnVsbHB0cjsKKyAgY21Qcm9wIGxvYyA9IG51bGxwdHI7CisgIGNtUHJvcCBpbXAgPSBudWxscHRyOwogICBzdGQ6OnN0cmluZyBzdWZmaXg7CiAKICAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZICYmCi0gICAgICB0aGlzLT5HZXRNYXBwZWRDb25maWcoZGVzaXJlZF9jb25maWcsICZsb2MsICZpbXAsIHN1ZmZpeCkpIHsKKyAgICAgIHRoaXMtPkdldE1hcHBlZENvbmZpZyhkZXNpcmVkX2NvbmZpZywgbG9jLCBpbXAsIHN1ZmZpeCkpIHsKICAgICBzd2l0Y2ggKGFydGlmYWN0KSB7CiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0OgogICAgICAgICBpZiAobG9jKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gbG9jOworICAgICAgICAgIHJlc3VsdCA9ICpsb2M7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgaW1wUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9MT0NBVElPTiIsIHN1ZmZpeCk7Ci0gICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19sb2NhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25maWdfbG9jYXRpb247Ci0gICAgICAgICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBsb2NhdGlvbiA9CisgICAgICAgICAgaWYgKGNtUHJvcCBjb25maWdfbG9jYXRpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gKmNvbmZpZ19sb2NhdGlvbjsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNtUHJvcCBsb2NhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9MT0NBVElPTiIpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBsb2NhdGlvbjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICpsb2NhdGlvbjsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3Q6CiAgICAgICAgIGlmIChpbXApIHsKLSAgICAgICAgICByZXN1bHQgPSBpbXA7CisgICAgICAgICAgcmVzdWx0ID0gKmltcDsKICAgICAgICAgfSBlbHNlIGlmICh0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSB8fAogICAgICAgICAgICAgICAgICAgIHRoaXMtPklzRXhlY3V0YWJsZVdpdGhFeHBvcnRzKCkpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBpbXBQcm9wID0gY21TdHJDYXQoIklNUE9SVEVEX0lNUExJQiIsIHN1ZmZpeCk7Ci0gICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19pbXBsaWIgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gY29uZmlnX2ltcGxpYjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGltcGxpYiA9Ci0gICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9JTVBMSUIiKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gaW1wbGliOworICAgICAgICAgIGlmIChjbVByb3AgY29uZmlnX2ltcGxpYiA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApKSB7CisgICAgICAgICAgICByZXN1bHQgPSAqY29uZmlnX2ltcGxpYjsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNtUHJvcCBpbXBsaWIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIikpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICppbXBsaWI7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTk5Miw5ICsyMDg2LDggQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgY21UYXJnZXQ6OkdldE1hcHBlZENvbmZpZyhzdGQ6OnN0cmluZyBjb25zdCYgZGVzaXJlZF9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIGxvYywgY29uc3QgY2hhcioqIGltcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgc3VmZml4KSBjb25zdAorYm9vbCBjbVRhcmdldDo6R2V0TWFwcGVkQ29uZmlnKHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXNpcmVkX2NvbmZpZywgY21Qcm9wJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wJiBpbXAsIHN0ZDo6c3RyaW5nJiBzdWZmaXgpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIGNvbmZpZ191cHBlcjsKICAgaWYgKCFkZXNpcmVkX2NvbmZpZy5lbXB0eSgpKSB7CkBAIC0yMDE2LDggKzIxMDksOCBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbWFwcGVkQ29uZmlnczsKICAgewogICAgIHN0ZDo6c3RyaW5nIG1hcFByb3AgPSBjbVN0ckNhdCgiTUFQX0lNUE9SVEVEX0NPTkZJR18iLCBjb25maWdfdXBwZXIpOwotICAgIGlmIChjb25zdCBjaGFyKiBtYXBWYWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KG1hcFByb3ApKSB7Ci0gICAgICBjbUV4cGFuZExpc3QobWFwVmFsdWUsIG1hcHBlZENvbmZpZ3MsIHRydWUpOworICAgIGlmIChjbVByb3AgbWFwVmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShtYXBQcm9wKSkgeworICAgICAgY21FeHBhbmRMaXN0KCptYXBWYWx1ZSwgbWFwcGVkQ29uZmlncywgdHJ1ZSk7CiAgICAgfQogICB9CiAKQEAgLTIwMzEsMzAgKzIxMjQsMzAgQEAKIAogICAvLyBJZiBhIG1hcHBpbmcgd2FzIGZvdW5kLCBjaGVjayBpdHMgY29uZmlndXJhdGlvbnMuCiAgIGZvciAoYXV0byBtY2kgPSBtYXBwZWRDb25maWdzLmJlZ2luKCk7Ci0gICAgICAgISpsb2MgJiYgISppbXAgJiYgbWNpICE9IG1hcHBlZENvbmZpZ3MuZW5kKCk7ICsrbWNpKSB7CisgICAgICAgIWxvYyAmJiAhaW1wICYmIG1jaSAhPSBtYXBwZWRDb25maWdzLmVuZCgpOyArK21jaSkgewogICAgIC8vIExvb2sgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KICAgICBpZiAobWNpLT5lbXB0eSgpKSB7CiAgICAgICAvLyBBbiBlbXB0eSBzdHJpbmcgaW4gdGhlIG1hcHBpbmcgaGFzIGEgc3BlY2lhbCBtZWFuaW5nOgogICAgICAgLy8gbG9vayB1cCB0aGUgY29uZmlnLWxlc3MgcHJvcGVydGllcy4KLSAgICAgICpsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wQmFzZSk7CisgICAgICBsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wQmFzZSk7CiAgICAgICBpZiAoYWxsb3dJbXApIHsKLSAgICAgICAgKmltcCA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9JTVBMSUIiKTsKKyAgICAgICAgaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0lNUExJQiIpOwogICAgICAgfQogICAgICAgLy8gSWYgaXQgd2FzIGZvdW5kLCBzZXQgdGhlIHN1ZmZpeC4KLSAgICAgIGlmICgqbG9jIHx8ICppbXApIHsKKyAgICAgIGlmIChsb2MgfHwgaW1wKSB7CiAgICAgICAgIHN1ZmZpeC5jbGVhcigpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBzdGQ6OnN0cmluZyBtY1VwcGVyID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKCptY2kpOwogICAgICAgc3RkOjpzdHJpbmcgbG9jUHJvcCA9IGNtU3RyQ2F0KGxvY1Byb3BCYXNlLCAnXycsIG1jVXBwZXIpOwotICAgICAgKmxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOworICAgICAgbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcCk7CiAgICAgICBpZiAoYWxsb3dJbXApIHsKICAgICAgICAgc3RkOjpzdHJpbmcgaW1wUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9JTVBMSUJfIiwgbWNVcHBlcik7Ci0gICAgICAgICppbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKTsKKyAgICAgICAgaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCk7CiAgICAgICB9CiAKICAgICAgIC8vIElmIGl0IHdhcyBmb3VuZCwgdXNlIGl0IGZvciBhbGwgcHJvcGVydGllcyBiZWxvdy4KLSAgICAgIGlmICgqbG9jIHx8ICppbXApIHsKKyAgICAgIGlmIChsb2MgfHwgaW1wKSB7CiAgICAgICAgIHN1ZmZpeCA9IGNtU3RyQ2F0KCdfJywgbWNVcHBlcik7CiAgICAgICB9CiAgICAgfQpAQCAtMjA2Myw1OSArMjE1Niw1OSBAQAogICAvLyBJZiB3ZSBuZWVkZWQgdG8gZmluZCBvbmUgb2YgdGhlIG1hcHBlZCBjb25maWd1cmF0aW9ucyBidXQgZGlkIG5vdAogICAvLyB0aGVuIHRoZSB0YXJnZXQgbG9jYXRpb24gaXMgbm90IGZvdW5kLiAgVGhlIHByb2plY3QgZG9lcyBub3Qgd2FudAogICAvLyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbi4KLSAgaWYgKCFtYXBwZWRDb25maWdzLmVtcHR5KCkgJiYgISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFtYXBwZWRDb25maWdzLmVtcHR5KCkgJiYgIWxvYyAmJiAhaW1wKSB7CiAgICAgLy8gSW50ZXJmYWNlIGxpYnJhcmllcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSBiZWNhdXNlIHRoZWlyCi0gICAgLy8gbGlicmFyeSBuYW1lIGlzIG9wdGlvbmFsIHNvIGl0IGlzIG9rYXkgdG8gbGVhdmUgKmxvYyBlbXB0eS4KKyAgICAvLyBsaWJyYXJ5IG5hbWUgaXMgb3B0aW9uYWwgc28gaXQgaXMgb2theSB0byBsZWF2ZSBsb2MgZW1wdHkuCiAgICAgcmV0dXJuIHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZOwogICB9CiAKICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IGZvdW5kIGl0IHRoZW4gdGhlcmUgYXJlIG5vIG1hcHBlZAogICAvLyBjb25maWd1cmF0aW9ucy4gIExvb2sgZm9yIGFuIGV4YWN0LW1hdGNoLgotICBpZiAoISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFsb2MgJiYgIWltcCkgewogICAgIHN0ZDo6c3RyaW5nIGxvY1Byb3AgPSBjbVN0ckNhdChsb2NQcm9wQmFzZSwgc3VmZml4KTsKLSAgICAqbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcCk7CisgICAgbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcCk7CiAgICAgaWYgKGFsbG93SW1wKSB7CiAgICAgICBzdGQ6OnN0cmluZyBpbXBQcm9wID0gY21TdHJDYXQoIklNUE9SVEVEX0lNUExJQiIsIHN1ZmZpeCk7Ci0gICAgICAqaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCk7CisgICAgICBpbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKTsKICAgICB9CiAgIH0KIAogICAvLyBJZiB3ZSBoYXZlIG5vdCB5ZXQgZm91bmQgaXQgdGhlbiB0aGVyZSBhcmUgbm8gbWFwcGVkCiAgIC8vIGNvbmZpZ3VyYXRpb25zIGFuZCBubyBleGFjdCBtYXRjaC4KLSAgaWYgKCEqbG9jICYmICEqaW1wKSB7CisgIGlmICghbG9jICYmICFpbXApIHsKICAgICAvLyBUaGUgc3VmZml4IGNvbXB1dGVkIGFib3ZlIGlzIG5vdCB1c2VmdWwuCiAgICAgc3VmZml4LmNsZWFyKCk7CiAKICAgICAvLyBMb29rIGZvciBhIGNvbmZpZ3VyYXRpb24tbGVzcyBsb2NhdGlvbi4gIFRoaXMgbWF5IGJlIHNldCBieQogICAgIC8vIG1hbnVhbGx5LXdyaXR0ZW4gY29kZS4KLSAgICAqbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcEJhc2UpOworICAgIGxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3BCYXNlKTsKICAgICBpZiAoYWxsb3dJbXApIHsKLSAgICAgICppbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIik7CisgICAgICBpbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIik7CiAgICAgfQogICB9CiAKICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IGZvdW5kIGl0IHRoZW4gdGhlIHByb2plY3QgaXMgd2lsbGluZyB0byB0cnkKICAgLy8gYW55IGF2YWlsYWJsZSBjb25maWd1cmF0aW9uLgotICBpZiAoISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFsb2MgJiYgIWltcCkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdmFpbGFibGVDb25maWdzOwotICAgIGlmIChjb25zdCBjaGFyKiBpY29uZmlncyA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9DT05GSUdVUkFUSU9OUyIpKSB7Ci0gICAgICBjbUV4cGFuZExpc3QoaWNvbmZpZ3MsIGF2YWlsYWJsZUNvbmZpZ3MpOworICAgIGlmIChjbVByb3AgaWNvbmZpZ3MgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfQ09ORklHVVJBVElPTlMiKSkgeworICAgICAgY21FeHBhbmRMaXN0KCppY29uZmlncywgYXZhaWxhYmxlQ29uZmlncyk7CiAgICAgfQogICAgIGZvciAoYXV0byBhY2kgPSBhdmFpbGFibGVDb25maWdzLmJlZ2luKCk7Ci0gICAgICAgICAhKmxvYyAmJiAhKmltcCAmJiBhY2kgIT0gYXZhaWxhYmxlQ29uZmlncy5lbmQoKTsgKythY2kpIHsKKyAgICAgICAgICFsb2MgJiYgIWltcCAmJiBhY2kgIT0gYXZhaWxhYmxlQ29uZmlncy5lbmQoKTsgKythY2kpIHsKICAgICAgIHN1ZmZpeCA9IGNtU3RyQ2F0KCdfJywgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKCphY2kpKTsKICAgICAgIHN0ZDo6c3RyaW5nIGxvY1Byb3AgPSBjbVN0ckNhdChsb2NQcm9wQmFzZSwgc3VmZml4KTsKLSAgICAgICpsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wKTsKKyAgICAgIGxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOwogICAgICAgaWYgKGFsbG93SW1wKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGltcFByb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfSU1QTElCIiwgc3VmZml4KTsKLSAgICAgICAgKmltcCA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApOworICAgICAgICBpbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKTsKICAgICAgIH0KICAgICB9CiAgIH0KICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IGZvdW5kIGl0IHRoZW4gdGhlIHRhcmdldCBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlLgotICBpZiAoISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFsb2MgJiYgIWltcCkgewogICAgIC8vIEludGVyZmFjZSBsaWJyYXJpZXMgYXJlIGFsd2F5cyBhdmFpbGFibGUgYmVjYXVzZSB0aGVpcgotICAgIC8vIGxpYnJhcnkgbmFtZSBpcyBvcHRpb25hbCBzbyBpdCBpcyBva2F5IHRvIGxlYXZlICpsb2MgZW1wdHkuCisgICAgLy8gbGlicmFyeSBuYW1lIGlzIG9wdGlvbmFsIHNvIGl0IGlzIG9rYXkgdG8gbGVhdmUgbG9jIGVtcHR5LgogICAgIHJldHVybiB0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWTsKICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXQuaCBiL1NvdXJjZS9jbVRhcmdldC5oCmluZGV4IDI4NjkzM2IuLjdhMTZkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRhcmdldC5oCisrKyBiL1NvdXJjZS9jbVRhcmdldC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVRhcmdldExpbmtMaWJyYXJ5VHlwZS5oIgpAQCAtNDMsOCArNDQsMTQgQEAKICAgICBWaXNpYmlsaXR5SW1wb3J0ZWRHbG9iYWxseQogICB9OwogCisgIGVudW0gY2xhc3MgUGVyQ29uZmlnCisgIHsKKyAgICBZZXMsCisgICAgTm8KKyAgfTsKKwogICBjbVRhcmdldChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUsCi0gICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZiwgYm9vbCBwZXJDb25maWcpOworICAgICAgICAgICBWaXNpYmlsaXR5IHZpcywgY21NYWtlZmlsZSogbWYsIFBlckNvbmZpZyBwZXJDb25maWcpOwogCiAgIGNtVGFyZ2V0KGNtVGFyZ2V0IGNvbnN0JikgPSBkZWxldGU7CiAgIGNtVGFyZ2V0KGNtVGFyZ2V0JiYpIG5vZXhjZXB0OwpAQCAtMTcwLDE0ICsxNzcsMTMgQEAKICAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7CiAgIC8vISBNaWdodCByZXR1cm4gYSBudWxscHRyIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3Qgc2V0IG9yIGludmFsaWQKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OworICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwogICAvLyEgQWx3YXlzIHJldHVybnMgYSB2YWxpZCBwb2ludGVyCi0gIGNvbnN0IGNoYXIqIEdldFNhZmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXRTYWZlUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIHByb3ApIGNvbnN0OwogICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgdm9pZCBDaGVja1Byb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjbU1ha2VmaWxlKiBjb250ZXh0KSBjb25zdDsKLSAgY29uc3QgY2hhciogR2V0Q29tcHV0ZWRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpIGNvbnN0OworICBjbVByb3AgR2V0Q29tcHV0ZWRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkgY29uc3Q7CiAgIC8vISBHZXQgYWxsIHByb3BlcnRpZXMKICAgY21Qcm9wZXJ0eU1hcCBjb25zdCYgR2V0UHJvcGVydGllcygpIGNvbnN0OwogCkBAIC0xOTEsOCArMTk3LDggQEAKICAgYm9vbCBJc0ltcG9ydGVkR2xvYmFsbHlWaXNpYmxlKCkgY29uc3Q7CiAgIGJvb2wgSXNQZXJDb25maWcoKSBjb25zdDsKIAotICBib29sIEdldE1hcHBlZENvbmZpZyhzdGQ6OnN0cmluZyBjb25zdCYgZGVzaXJlZF9jb25maWcsIGNvbnN0IGNoYXIqKiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBpbXAsIHN0ZDo6c3RyaW5nJiBzdWZmaXgpIGNvbnN0OworICBib29sIEdldE1hcHBlZENvbmZpZyhzdGQ6OnN0cmluZyBjb25zdCYgZGVzaXJlZF9jb25maWcsIGNtUHJvcCYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICBjbVByb3AmIGltcCwgc3RkOjpzdHJpbmcmIHN1ZmZpeCkgY29uc3Q7CiAKICAgLy8hIFJldHVybiB3aGV0aGVyIHRoaXMgdGFyZ2V0IGlzIGFuIGV4ZWN1dGFibGUgd2l0aCBzeW1ib2wgZXhwb3J0cyBlbmFibGVkLgogICBib29sIElzRXhlY3V0YWJsZVdpdGhFeHBvcnRzKCkgY29uc3Q7CkBAIC0yMDMsNiArMjA5LDkgQEAKICAgLy8hIFJldHVybiB3aGV0aGVyIHRoaXMgdGFyZ2V0IGlzIGFuIGV4ZWN1dGFibGUgQnVuZGxlIG9uIEFwcGxlLgogICBib29sIElzQXBwQnVuZGxlT25BcHBsZSgpIGNvbnN0OwogCisgIC8vISBSZXR1cm4gd2hldGhlciB0aGlzIHRhcmdldCBpcyBhIEdVSSBleGVjdXRhYmxlIG9uIEFuZHJvaWQuCisgIGJvb2wgSXNBbmRyb2lkR3VpRXhlY3V0YWJsZSgpIGNvbnN0OworCiAgIC8vISBHZXQgYSBiYWNrdHJhY2UgZnJvbSB0aGUgY3JlYXRpb24gb2YgdGhlIHRhcmdldC4KICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgR2V0QmFja3RyYWNlKCkgY29uc3Q7CiAKQEAgLTIyNyw2ICsyMzYsMTMgQEAKICAgdm9pZCBBZGRTeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMoc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBpbmNzKTsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBHZXRTeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMoKSBjb25zdDsKIAorICBCVHM8c3RkOjpzdHJpbmc+IGNvbnN0KiBHZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSkgY29uc3Q7CisKKyAgdm9pZCBTZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUpOworCiAgIGNtU3RyaW5nUmFuZ2UgR2V0SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcygpIGNvbnN0OwogICBjbUJhY2t0cmFjZVJhbmdlIEdldEluY2x1ZGVEaXJlY3Rvcmllc0JhY2t0cmFjZXMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZUZlYXR1cmVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21UYXJnZXRDb21waWxlRmVhdHVyZXNDb21tYW5kLmN4eAppbmRleCAwNmJlNGYwLi5hYTFhYmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXRDb21waWxlRmVhdHVyZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRDb21waWxlRmVhdHVyZXNDb21tYW5kLmN4eApAQCAtNCw2ICs0LDcgQEAKIAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVRhcmdldFByb3BDb21tYW5kQmFzZS5oIgogCkBAIC0yOSw5ICszMCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKnByZXBlbmQqLywgYm9vbCAvKnN5c3RlbSovKSBvdmVycmlkZQogICB7CisgICAgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIgc3RhbmRhcmRSZXNvbHZlcih0aGlzLT5NYWtlZmlsZSk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXQgOiBjb250ZW50KSB7CiAgICAgICBzdGQ6OnN0cmluZyBlcnJvcjsKLSAgICAgIGlmICghdGhpcy0+TWFrZWZpbGUtPkFkZFJlcXVpcmVkVGFyZ2V0RmVhdHVyZSh0Z3QsIGl0LCAmZXJyb3IpKSB7CisgICAgICBpZiAoIXN0YW5kYXJkUmVzb2x2ZXIuQWRkUmVxdWlyZWRUYXJnZXRGZWF0dXJlKHRndCwgaXQsICZlcnJvcikpIHsKICAgICAgICAgdGhpcy0+U2V0RXJyb3IoZXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCAoc3VjY2Vzc2Z1bGx5KSBoYW5kbGVkLgogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0UHJvcENvbW1hbmRCYXNlLmN4eCBiL1NvdXJjZS9jbVRhcmdldFByb3BDb21tYW5kQmFzZS5jeHgKaW5kZXggMGRlOGQ2ZC4uZTcxNDcyMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0UHJvcENvbW1hbmRCYXNlLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRQcm9wQ29tbWFuZEJhc2UuY3h4CkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKQEAgLTE1Nyw5ICsxNTgsOSBAQAogewogICBpZiAocHJlcGVuZCkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BOYW1lID0gc3RkOjpzdHJpbmcoIklOVEVSRkFDRV8iKSArIHRoaXMtPlByb3BlcnR5OwotICAgIGNvbnN0IGNoYXIqIHByb3BWYWx1ZSA9IHRndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRvdGFsQ29udGVudCA9IHRoaXMtPkpvaW4oY29udGVudCkgKwotICAgICAgKHByb3BWYWx1ZSA/IHN0ZDo6c3RyaW5nKCI7IikgKyBwcm9wVmFsdWUgOiBzdGQ6OnN0cmluZygpKTsKKyAgICBjbVByb3AgcHJvcFZhbHVlID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG90YWxDb250ZW50ID0KKyAgICAgIHRoaXMtPkpvaW4oY29udGVudCkgKyAocHJvcFZhbHVlID8gKCI7IiArICpwcm9wVmFsdWUpIDogc3RkOjpzdHJpbmcoKSk7CiAgICAgdGd0LT5TZXRQcm9wZXJ0eShwcm9wTmFtZSwgdG90YWxDb250ZW50KTsKICAgfSBlbHNlIHsKICAgICB0Z3QtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfIiArIHRoaXMtPlByb3BlcnR5LCB0aGlzLT5Kb2luKGNvbnRlbnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuaCBiL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuaAppbmRleCBkZjM0ZjE4Li5mODdiN2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyLmgKKysrIGIvU291cmNlL2NtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5oCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZz4KIAogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0xOCwxMSArMTksMTEgQEAKIHsKIHB1YmxpYzoKICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldD4KLSAgc3RhdGljIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KFRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KQorICBzdGF0aWMgY21Qcm9wIEdldFByb3BlcnR5KFRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpCiAgIHsKLSAgICBpZiAoY29uc3QgY2hhciogbG9jID0gR2V0TG9jYXRpb24odGd0LCBwcm9wLCBtZXNzZW5nZXIsIGNvbnRleHQpKSB7CisgICAgaWYgKGNtUHJvcCBsb2MgPSBHZXRMb2NhdGlvbih0Z3QsIHByb3AsIG1lc3NlbmdlciwgY29udGV4dCkpIHsKICAgICAgIHJldHVybiBsb2M7CiAgICAgfQogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGYXRhbEVycm9yT2NjdXJlZCgpKSB7CkBAIC01Miw5ICs1Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpOwogCiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQ+Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBHZXRMb2NhdGlvbihUYXJnZXQgY29uc3QqIHRndCwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkKKyAgc3RhdGljIGNtUHJvcCBHZXRMb2NhdGlvbihUYXJnZXQgY29uc3QqIHRndCwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KQogCiAgIHsKICAgICAvLyBXYXRjaCBmb3Igc3BlY2lhbCAiY29tcHV0ZWQiIHByb3BlcnRpZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uCkBAIC03MSw3ICs3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KSkgewogICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDb21wdXRlTG9jYXRpb25Gb3JCdWlsZCh0Z3QpLmNfc3RyKCk7CisgICAgICAgIHJldHVybiAmQ29tcHV0ZUxvY2F0aW9uRm9yQnVpbGQodGd0KTsKICAgICAgIH0KIAogICAgICAgLy8gU3VwcG9ydCAiTE9DQVRJT05fPENPTkZJRz4iLgpAQCAtODIsNyArODMsNyBAQAogICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ05hbWUgPSBwcm9wLnN1YnN0cig5KTsKLSAgICAgICAgcmV0dXJuIENvbXB1dGVMb2NhdGlvbih0Z3QsIGNvbmZpZ05hbWUpLmNfc3RyKCk7CisgICAgICAgIHJldHVybiAmQ29tcHV0ZUxvY2F0aW9uKHRndCwgY29uZmlnTmFtZSk7CiAgICAgICB9CiAKICAgICAgIC8vIFN1cHBvcnQgIjxDT05GSUc+X0xPQ0FUSU9OIi4KQEAgLTk1LDcgKzk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkpIHsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ29tcHV0ZUxvY2F0aW9uKHRndCwgY29uZmlnTmFtZSkuY19zdHIoKTsKKyAgICAgICAgICByZXR1cm4gJkNvbXB1dGVMb2NhdGlvbih0Z3QsIGNvbmZpZ05hbWUpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMTAzLDggKzEwNCw4IEBACiAgIH0KIAogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0PgotICBzdGF0aWMgY29uc3QgY2hhciogR2V0U291cmNlcyhUYXJnZXQgY29uc3QqIHRndCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCk7CisgIHN0YXRpYyBjbVByb3AgR2V0U291cmNlcyhUYXJnZXQgY29uc3QqIHRndCwgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UZXN0LmN4eCBiL1NvdXJjZS9jbVRlc3QuY3h4CmluZGV4IDNiNzMxY2MuLmEyNmJlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRlc3QuY3h4CisrKyBiL1NvdXJjZS9jbVRlc3QuY3h4CkBAIC0zNCwxNSArMzQsMTggQEAKIAogY29uc3QgY2hhciogY21UZXN0OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogcmV0VmFsID0gdGhpcy0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICBjbVByb3AgcmV0VmFsID0gdGhpcy0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOwogICBpZiAoIXJldFZhbCkgewogICAgIGNvbnN0IGJvb2wgY2hhaW4gPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPklzUHJvcGVydHlDaGFpbmVkKHByb3AsIGNtUHJvcGVydHk6OlRFU1QpOwogICAgIGlmIChjaGFpbikgewotICAgICAgcmV0dXJuIHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eShwcm9wLCBjaGFpbik7CisgICAgICBpZiAoY21Qcm9wIHAgPSB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkocHJvcCwgY2hhaW4pKSB7CisgICAgICAgIHJldHVybiBwLT5jX3N0cigpOworICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKICAgfQotICByZXR1cm4gcmV0VmFsOworICByZXR1cm4gcmV0VmFsLT5jX3N0cigpOwogfQogCiBib29sIGNtVGVzdDo6R2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UZXN0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbVRlc3RHZW5lcmF0b3IuY3h4CmluZGV4IDMzM2Q0ZDUuLjdjMGNlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRlc3RHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbVRlc3RHZW5lcmF0b3IuY3h4CkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUHJvcGVydHlNYXAuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC03Niw3ICs3Nyw3IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZSh0aGlzLT5UZXN0LT5HZXRCYWNrdHJhY2UoKSk7CiAKICAgLy8gU3RhcnQgdGhlIHRlc3QgY29tbWFuZC4KLSAgb3MgPDwgaW5kZW50IDw8ICJhZGRfdGVzdCgiIDw8IHRoaXMtPlRlc3QtPkdldE5hbWUoKSA8PCAiICI7CisgIG9zIDw8IGluZGVudCA8PCAiYWRkX3Rlc3QoXCIiIDw8IHRoaXMtPlRlc3QtPkdldE5hbWUoKSA8PCAiXCIgIjsKIAogICAvLyBFdmFsdWF0ZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmd2ID0KQEAgLTEwMCw5ICsxMDEsOSBAQAogICAgIGV4ZSA9IHRhcmdldC0+R2V0RnVsbFBhdGgoY29uZmlnKTsKIAogICAgIC8vIFByZXBlbmQgd2l0aCB0aGUgZW11bGF0b3Igd2hlbiBjcm9zcyBjb21waWxpbmcgaWYgcmVxdWlyZWQuCi0gICAgY29uc3QgY2hhciogZW11bGF0b3IgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJDUk9TU0NPTVBJTElOR19FTVVMQVRPUiIpOwotICAgIGlmIChlbXVsYXRvciAhPSBudWxscHRyICYmICplbXVsYXRvcikgewotICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGVtdWxhdG9yV2l0aEFyZ3MgPSBjbUV4cGFuZGVkTGlzdChlbXVsYXRvcik7CisgICAgY21Qcm9wIGVtdWxhdG9yID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IiKTsKKyAgICBpZiAoY21Ob25lbXB0eShlbXVsYXRvcikpIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbXVsYXRvcldpdGhBcmdzID0gY21FeHBhbmRlZExpc3QoKmVtdWxhdG9yKTsKICAgICAgIHN0ZDo6c3RyaW5nIGVtdWxhdG9yRXhlKGVtdWxhdG9yV2l0aEFyZ3NbMF0pOwogICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZW11bGF0b3JFeGUpOwogICAgICAgb3MgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKGVtdWxhdG9yRXhlKSA8PCAiICI7CkBAIC0xMjYsMjAgKzEyNywyMSBAQAogICBvcyA8PCAiKVxuIjsKIAogICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgdGhlIHRlc3QuCi0gIG9zIDw8IGluZGVudCA8PCAic2V0X3Rlc3RzX3Byb3BlcnRpZXMoIiA8PCB0aGlzLT5UZXN0LT5HZXROYW1lKCkKLSAgICAgPDwgIiBQUk9QRVJUSUVTICI7CisgIG9zIDw8IGluZGVudCA8PCAic2V0X3Rlc3RzX3Byb3BlcnRpZXMoXCIiIDw8IHRoaXMtPlRlc3QtPkdldE5hbWUoKQorICAgICA8PCAiXCIgUFJPUEVSVElFUyAiOwogICBmb3IgKGF1dG8gY29uc3QmIGkgOiB0aGlzLT5UZXN0LT5HZXRQcm9wZXJ0aWVzKCkuR2V0TGlzdCgpKSB7CiAgICAgb3MgPDwgIiAiIDw8IGkuZmlyc3QgPDwgIiAiCiAgICAgICAgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKAogICAgICAgICAgICAgZ2UuUGFyc2UoaS5zZWNvbmQpLT5FdmFsdWF0ZSh0aGlzLT5MRywgY29uZmlnKSk7CiAgIH0KICAgdGhpcy0+R2VuZXJhdGVJbnRlcm5hbFByb3BlcnRpZXMob3MpOwotICBvcyA8PCAiKSIgPDwgc3RkOjplbmRsOworICBvcyA8PCAiKVxuIjsKIH0KIAogdm9pZCBjbVRlc3RHZW5lcmF0b3I6OkdlbmVyYXRlU2NyaXB0Tm9Db25maWcoc3RkOjpvc3RyZWFtJiBvcywgSW5kZW50IGluZGVudCkKIHsKLSAgb3MgPDwgaW5kZW50IDw8ICJhZGRfdGVzdCgiIDw8IHRoaXMtPlRlc3QtPkdldE5hbWUoKSA8PCAiIE5PVF9BVkFJTEFCTEUpXG4iOworICBvcyA8PCBpbmRlbnQgPDwgImFkZF90ZXN0KFwiIiA8PCB0aGlzLT5UZXN0LT5HZXROYW1lKCkKKyAgICAgPDwgIlwiIE5PVF9BVkFJTEFCTEUpXG4iOwogfQogCiBib29sIGNtVGVzdEdlbmVyYXRvcjo6TmVlZHNTY3JpcHROb0NvbmZpZygpIGNvbnN0CkBAIC0xNTksOSArMTYxLDggQEAKIAogICBzdGQ6OnN0cmluZyBleGUgPSBjb21tYW5kWzBdOwogICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhleGUpOwotICBmb3V0IDw8IGluZGVudDsKLSAgZm91dCA8PCAiYWRkX3Rlc3QoIjsKLSAgZm91dCA8PCB0aGlzLT5UZXN0LT5HZXROYW1lKCkgPDwgIiBcIiIgPDwgZXhlIDw8ICJcIiI7CisgIGZvdXQgPDwgaW5kZW50IDw8ICJhZGRfdGVzdChcIiIgPDwgdGhpcy0+VGVzdC0+R2V0TmFtZSgpIDw8ICJcIiBcIiIgPDwgZXhlCisgICAgICAgPDwgIlwiIjsKIAogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZShjb21tYW5kKS5hZHZhbmNlKDEpKSB7CiAgICAgLy8gSnVzdCBkb3VibGUtcXVvdGUgYWxsIGFyZ3VtZW50cyBzbyB0aGV5IGFyZSByZS1wYXJzZWQKQEAgLTE3Niw5ICsxNzcsOSBAQAogICAgICAgfQogICAgICAgZm91dCA8PCBjOwogICAgIH0KLSAgICBmb3V0IDw8ICJcIiI7CisgICAgZm91dCA8PCAnIic7CiAgIH0KLSAgZm91dCA8PCAiKSIgPDwgc3RkOjplbmRsOworICBmb3V0IDw8ICIpXG4iOwogCiAgIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciB0aGUgdGVzdC4KICAgZm91dCA8PCBpbmRlbnQgPDwgInNldF90ZXN0c19wcm9wZXJ0aWVzKCIgPDwgdGhpcy0+VGVzdC0+R2V0TmFtZSgpCkBAIC0xODgsNyArMTg5LDcgQEAKICAgICAgICAgIDw8IGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZShpLnNlY29uZCk7CiAgIH0KICAgdGhpcy0+R2VuZXJhdGVJbnRlcm5hbFByb3BlcnRpZXMoZm91dCk7Ci0gIGZvdXQgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAiKVxuIjsKIH0KIAogdm9pZCBjbVRlc3RHZW5lcmF0b3I6OkdlbmVyYXRlSW50ZXJuYWxQcm9wZXJ0aWVzKHN0ZDo6b3N0cmVhbSYgb3MpCkBAIC0yMTMsNyArMjE0LDcgQEAKICAgICBwcmVwZW5kVHJpcGxlU2VwYXJhdG9yID0gdHJ1ZTsKICAgfQogCi0gIG9zIDw8ICJcIiI7CisgIG9zIDw8ICciJzsKIH0KIAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtVGVzdEdlbmVyYXRvcjo6RXZhbHVhdGVDb21tYW5kTGluZUFyZ3VtZW50cygKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRpbWVzdGFtcC5jeHggYi9Tb3VyY2UvY21UaW1lc3RhbXAuY3h4CmluZGV4IDM5MGZkMTYuLjEzZjczZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRpbWVzdGFtcC5jeHgKKysrIGIvU291cmNlL2NtVGltZXN0YW1wLmN4eApAQCAtMSw1ICsxLDE1IEBACiAvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fc3VuKQorLy8gUE9TSVggQVBJcyBhcmUgbmVlZGVkCisjICBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDIwMDgwOUwKKyNlbmRpZgorI2lmIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKy8vIEZvciBpc2FzY2lpCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA3MDAKKyNlbmRpZgorCiAjaW5jbHVkZSAiY21UaW1lc3RhbXAuaCIKIAogI2luY2x1ZGUgPGNzdGRsaWI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UcnlSdW5Db21tYW5kLmN4eCBiL1NvdXJjZS9jbVRyeVJ1bkNvbW1hbmQuY3h4CmluZGV4IDBlOGU5ODYuLjY0ZDcxYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRyeVJ1bkNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVRyeVJ1bkNvbW1hbmQuY3h4CkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgpAQCAtMjQyLDggKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LmNfc3RyKCksIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKIAogICAgIGNtU3RhdGUqIHN0YXRlID0gdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCk7Ci0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9Ci0gICAgICBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlJ1blJlc3VsdFZhcmlhYmxlKTsKKyAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUodGhpcy0+UnVuUmVzdWx0VmFyaWFibGUpOwogICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7CiAgICAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KHRoaXMtPlJ1blJlc3VsdFZhcmlhYmxlLCAiQURWQU5DRUQiLCAiMSIpOwogICAgIH0KQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgICAgICBpbnRlcm5hbFJ1bk91dHB1dE5hbWUsICJQTEVBU0VfRklMTF9PVVQtTk9URk9VTkQiLCBjb21tZW50LmNfc3RyKCksCiAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgICAgIGNtU3RhdGUqIHN0YXRlID0gdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCk7Ci0gICAgICBjb25zdCBjaGFyKiBleGlzdGluZyA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoaW50ZXJuYWxSdW5PdXRwdXROYW1lKTsKKyAgICAgIGNtUHJvcCBleGlzdGluZyA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoaW50ZXJuYWxSdW5PdXRwdXROYW1lKTsKICAgICAgIGlmIChleGlzdGluZykgewogICAgICAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KGludGVybmFsUnVuT3V0cHV0TmFtZSwgIkFEVkFOQ0VEIiwgIjEiKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVVWSGFuZGxlUHRyLmN4eCBiL1NvdXJjZS9jbVVWSGFuZGxlUHRyLmN4eAppbmRleCAyM2RhYmI3Li5kZjJmNjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21VVkhhbmRsZVB0ci5jeHgKKysrIGIvU291cmNlL2NtVVZIYW5kbGVQdHIuY3h4CkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8bXV0ZXg+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogbmFtZXNwYWNlIGNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVVZIYW5kbGVQdHIuaCBiL1NvdXJjZS9jbVVWSGFuZGxlUHRyLmgKaW5kZXggMzA4M2I2MC4uZDlkZTdmMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtVVZIYW5kbGVQdHIuaAorKysgYi9Tb3VyY2UvY21VVkhhbmRsZVB0ci5oCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaWYgZGVmaW5lZChfX1NVTlBST19DQykKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVVZQcm9jZXNzQ2hhaW4uY3h4IGIvU291cmNlL2NtVVZQcm9jZXNzQ2hhaW4uY3h4CmluZGV4IDU0M2MzMzAuLjYwNDBmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVVWUHJvY2Vzc0NoYWluLmN4eAorKysgYi9Tb3VyY2UvY21VVlByb2Nlc3NDaGFpbi5jeHgKQEAgLTksNyArOSw3IEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogI2luY2x1ZGUgImNtR2V0UGlwZXMuaCIKICNpbmNsdWRlICJjbVVWSGFuZGxlUHRyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21VVlByb2Nlc3NDaGFpbi5oIGIvU291cmNlL2NtVVZQcm9jZXNzQ2hhaW4uaAppbmRleCAwNWE3Y2M4Li5iNWNjYjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21VVlByb2Nlc3NDaGFpbi5oCisrKyBiL1NvdXJjZS9jbVVWUHJvY2Vzc0NoYWluLmgKQEAgLTQsMTQgKzQsMTQgQEAKICNkZWZpbmUgY21VVlByb2Nlc3NDaGFpbl9oCiAKICNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxpb3Nmd2Q+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogY2xhc3MgY21VVlByb2Nlc3NDaGFpbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVVZTaWduYWxIYWNrUkFJSS5oIGIvU291cmNlL2NtVVZTaWduYWxIYWNrUkFJSS5oCmluZGV4IDYzNTk5ZGIuLjYwZTRjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVVWU2lnbmFsSGFja1JBSUkuaAorKysgYi9Tb3VyY2UvY21VVlNpZ25hbEhhY2tSQUlJLmgKQEAgLTMsNyArMyw3IEBACiAjcHJhZ21hIG9uY2UKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKICNpZiBkZWZpbmVkKENNQUtFX1VTRV9TWVNURU1fTElCVVYpICYmICFkZWZpbmVkKF9XSU4zMikgJiYgICAgICAgICAgICAgICAgICAgIFwKICAgVVZfVkVSU0lPTl9NQUpPUiA9PSAxICYmIFVWX1ZFUlNJT05fTUlOT1IgPCAxOQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVVZTdHJlYW1idWYuaCBiL1NvdXJjZS9jbVVWU3RyZWFtYnVmLmgKaW5kZXggMWM4YTc3MS4uNTBmYWVkZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVVZTdHJlYW1idWYuaAorKysgYi9Tb3VyY2UvY21VVlN0cmVhbWJ1Zi5oCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPHN0cmVhbWJ1Zj4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogI2luY2x1ZGUgImNtVVZIYW5kbGVQdHIuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVXRpbGl0eVNvdXJjZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtVXRpbGl0eVNvdXJjZUNvbW1hbmQuY3h4CmluZGV4IGE0MzE2NWMuLjZkZTc4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVV0aWxpdHlTb3VyY2VDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21VdGlsaXR5U291cmNlQ29tbWFuZC5jeHgKQEAgLTg0LDggKzg0LDggQEAKICAgc3RkOjpzdHJpbmcgdXRpbGl0eURpcmVjdG9yeSA9CiAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICBzdGQ6OnN0cmluZyBleGVQYXRoOwotICBpZiAoc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0RGVmaW5pdGlvbigiRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCIpKSB7Ci0gICAgZXhlUGF0aCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldERlZmluaXRpb24oIkVYRUNVVEFCTEVfT1VUUFVUX1BBVEgiKTsKKyAgaWYgKGF1dG8gZCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldERlZmluaXRpb24oIkVYRUNVVEFCTEVfT1VUUFVUX1BBVEgiKSkgeworICAgIGV4ZVBhdGggPSBkOwogICB9CiAgIGlmICghZXhlUGF0aC5lbXB0eSgpKSB7CiAgICAgdXRpbGl0eURpcmVjdG9yeSA9IGV4ZVBhdGg7CkBAIC0xMDIsMTUgKzEwMiwxNSBAQAogICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHV0aWxpdHlFeGVjdXRhYmxlLCAiLy4vIiwgIi8iKTsKIAogICAvLyBFbnRlciB0aGUgdmFsdWUgaW50byB0aGUgY2FjaGUuCi0gIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZENhY2hlRGVmaW5pdGlvbigKLSAgICBjYWNoZUVudHJ5LCB1dGlsaXR5RXhlY3V0YWJsZS5jX3N0cigpLCAiUGF0aCB0byBhbiBpbnRlcm5hbCBwcm9ncmFtLiIsCi0gICAgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CisgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZENhY2hlRGVmaW5pdGlvbihjYWNoZUVudHJ5LCB1dGlsaXR5RXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXRoIHRvIGFuIGludGVybmFsIHByb2dyYW0uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6RklMRVBBVEgpOwogICAvLyBhZGQgYSB2YWx1ZSBpbnRvIHRoZSBjYWNoZSB0aGF0IG1hcHMgZnJvbSB0aGUKICAgLy8gZnVsbCBwYXRoIHRvIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0CiAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHV0aWxpdHlFeGVjdXRhYmxlKTsKLSAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKAotICAgIHV0aWxpdHlFeGVjdXRhYmxlLCB1dGlsaXR5TmFtZS5jX3N0cigpLCAiRXhlY3V0YWJsZSB0byBwcm9qZWN0IG5hbWUuIiwKLSAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKKyAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKHV0aWxpdHlFeGVjdXRhYmxlLCB1dGlsaXR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGVjdXRhYmxlIHRvIHByb2plY3QgbmFtZS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiAKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WU1NldHVwSGVscGVyLmN4eCBiL1NvdXJjZS9jbVZTU2V0dXBIZWxwZXIuY3h4CmluZGV4IGRkOWYwNTguLjk2MjY1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZTU2V0dXBIZWxwZXIuY3h4CisrKyBiL1NvdXJjZS9jbVZTU2V0dXBIZWxwZXIuY3h4CkBAIC0yNTgsNiArMjU4LDIwIEBACiAgIHJldHVybiBpc0luc3RhbGxlZDsKIH0KIAorYm9vbCBjbVZTU2V0dXBBUElIZWxwZXI6OkdldFZTSW5zdGFuY2VWZXJzaW9uKAorICB1bnNpZ25lZCBsb25nIGxvbmcmIHZzSW5zdGFuY2VWZXJzaW9uKQoreworICB2c0luc3RhbmNlVmVyc2lvbiA9IDA7CisgIGJvb2wgaXNJbnN0YWxsZWQgPSB0aGlzLT5FbnVtZXJhdGVBbmRDaG9vc2VWU0luc3RhbmNlKCk7CisKKyAgaWYgKGlzSW5zdGFsbGVkKSB7CisgICAgdnNJbnN0YW5jZVZlcnNpb24gPQorICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihjaG9zZW5JbnN0YW5jZUluZm8udWxsVmVyc2lvbik7CisgIH0KKworICByZXR1cm4gaXNJbnN0YWxsZWQ7Cit9CisKIGJvb2wgY21WU1NldHVwQVBJSGVscGVyOjpHZXRWQ1Rvb2xzZXRWZXJzaW9uKHN0ZDo6c3RyaW5nJiB2c1Rvb2xzZXRWZXJzaW9uKQogewogICB2c1Rvb2xzZXRWZXJzaW9uLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WU1NldHVwSGVscGVyLmggYi9Tb3VyY2UvY21WU1NldHVwSGVscGVyLmgKaW5kZXggMDk4MGNlZi4uYTkyNmVlZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVlNTZXR1cEhlbHBlci5oCisrKyBiL1NvdXJjZS9jbVZTU2V0dXBIZWxwZXIuaApAQCAtOCwxMyArOCwxMiBAQAogI2VuZGlmCiAKIC8vIFB1Ymxpc2hlZCBieSBWaXN1YWwgU3R1ZGlvIFNldHVwIHRlYW0KKyNpbmNsdWRlIDxjbTNwL1NldHVwLkNvbmZpZ3VyYXRpb24uaD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCi0jaW5jbHVkZSAiY212c3NldHVwL1NldHVwLkNvbmZpZ3VyYXRpb24uaCIKLQogdGVtcGxhdGUgPGNsYXNzIFQ+CiBjbGFzcyBTbWFydENPTVB0cgogewpAQCAtMTA3LDYgKzEwNiw3IEBACiAKICAgYm9vbCBJc1ZTSW5zdGFsbGVkKCk7CiAgIGJvb2wgR2V0VlNJbnN0YW5jZUluZm8oc3RkOjpzdHJpbmcmIHZzSW5zdGFsbExvY2F0aW9uKTsKKyAgYm9vbCBHZXRWU0luc3RhbmNlVmVyc2lvbih1bnNpZ25lZCBsb25nIGxvbmcmIHZzSW5zdGFuY2VWZXJzaW9uKTsKICAgYm9vbCBHZXRWQ1Rvb2xzZXRWZXJzaW9uKHN0ZDo6c3RyaW5nJiB2c1Rvb2xzZXRWZXJzaW9uKTsKICAgYm9vbCBJc1dpbjEwU0RLSW5zdGFsbGVkKCk7CiAgIGJvb2wgSXNXaW44MVNES0luc3RhbGxlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmFyaWFibGVXYXRjaENvbW1hbmQuY3h4IGIvU291cmNlL2NtVmFyaWFibGVXYXRjaENvbW1hbmQuY3h4CmluZGV4IDM1YjlhMWQuLmVjYWUxNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2hDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoQ29tbWFuZC5jeHgKQEAgLTQyLDcgKzQyLDcgQEAKICAgLy8vIFVsdHJhIGJhZCEhCiAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gY29uc3RfY2FzdDxjbU1ha2VmaWxlKj4obWYpOwogCi0gIHN0ZDo6c3RyaW5nIHN0YWNrID0gbWFrZWZpbGUtPkdldFByb3BlcnR5KCJMSVNURklMRV9TVEFDSyIpOworICBzdGQ6OnN0cmluZyBzdGFjayA9ICptZi0+R2V0UHJvcGVydHkoIkxJU1RGSUxFX1NUQUNLIik7CiAgIGlmICghZGF0YS0+Q29tbWFuZC5lbXB0eSgpKSB7CiAgICAgY21MaXN0RmlsZUZ1bmN0aW9uIG5ld0xGRjsKICAgICBjb25zdCBjaGFyKiBjb25zdCBjdXJyZW50TGlzdEZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmVyc2lvbi5oIGIvU291cmNlL2NtVmVyc2lvbi5oCmluZGV4IGJmZDk5NGQuLjkzMmVmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZlcnNpb24uaAorKysgYi9Tb3VyY2UvY21WZXJzaW9uLmgKQEAgLTMsNyArMyw3IEBACiAjaWZuZGVmIGNtVmVyc2lvbl9oCiAjZGVmaW5lIGNtVmVyc2lvbl9oCiAKLSNpbmNsdWRlICJjbV9rd2ltbC5oIgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKIC8qKiBcY2xhc3MgY21WZXJzaW9uCiAgKiBcYnJpZWYgSGVscGVyIGNsYXNzIGZvciBwcm92aWRpbmcgQ01ha2UgYW5kIENUZXN0IHZlcnNpb24gaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggMTYzZmYxOS4uNWQ5MTk5YiAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtNiwxMSArNiwxMiBAQAogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KICNpbmNsdWRlIDxjbS92ZWN0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAid2luZG93cy5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCkBAIC0xOCwxMCArMTksMTIgQEAKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTGlua0xpbmVEZXZpY2VDb21wdXRlci5oIgogI2luY2x1ZGUgImNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmgiCiAKQEAgLTYxLDEwICs2NCwxMCBAQAogICAgIHRoaXMtPlN0YXJ0RWxlbWVudCgpOwogICB9CiAgIEVsZW0oY29uc3QgRWxlbSYpID0gZGVsZXRlOwotICBFbGVtKEVsZW0mIHBhciwgY29uc3Qgc3RkOjpzdHJpbmcmIHRhZykKKyAgRWxlbShFbGVtJiBwYXIsIGNtOjpzdHJpbmdfdmlldyB0YWcpCiAgICAgOiBTKHBhci5TKQogICAgICwgSW5kZW50KHBhci5JbmRlbnQgKyAxKQotICAgICwgVGFnKHRhZykKKyAgICAsIFRhZyhzdGQ6OnN0cmluZyh0YWcpKQogICB7CiAgICAgcGFyLlNldEhhc0VsZW1lbnRzKCk7CiAgICAgdGhpcy0+U3RhcnRFbGVtZW50KCk7CkBAIC03OCwyMiArODEsMjIgQEAKICAgfQogICBzdGQ6Om9zdHJlYW0mIFdyaXRlU3RyaW5nKGNvbnN0IGNoYXIqIGxpbmUpOwogICB2b2lkIFN0YXJ0RWxlbWVudCgpIHsgdGhpcy0+V3JpdGVTdHJpbmcoIjwiKSA8PCB0aGlzLT5UYWc7IH0KLSAgdm9pZCBFbGVtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiB0YWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWwpCisgIHZvaWQgRWxlbWVudChjbTo6c3RyaW5nX3ZpZXcgdGFnLCBzdGQ6OnN0cmluZyB2YWwpCiAgIHsKLSAgICBFbGVtKCp0aGlzLCB0YWcpLkNvbnRlbnQodmFsKTsKKyAgICBFbGVtKCp0aGlzLCB0YWcpLkNvbnRlbnQoc3RkOjptb3ZlKHZhbCkpOwogICB9Ci0gIEVsZW0mIEF0dHJpYnV0ZShjb25zdCBjaGFyKiBhbiwgY29uc3Qgc3RkOjpzdHJpbmcmIGF2KQorICBFbGVtJiBBdHRyaWJ1dGUoY29uc3QgY2hhciogYW4sIHN0ZDo6c3RyaW5nIGF2KQogICB7Ci0gICAgdGhpcy0+UyA8PCAiICIgPDwgYW4gPDwgIj1cIiIgPDwgY21WUzEwRXNjYXBlQXR0cihhdikgPDwgIlwiIjsKKyAgICB0aGlzLT5TIDw8ICIgIiA8PCBhbiA8PCAiPVwiIiA8PCBjbVZTMTBFc2NhcGVBdHRyKHN0ZDo6bW92ZShhdikpIDw8ICJcIiI7CiAgICAgcmV0dXJuICp0aGlzOwogICB9Ci0gIHZvaWQgQ29udGVudChjb25zdCBzdGQ6OnN0cmluZyYgdmFsKQorICB2b2lkIENvbnRlbnQoc3RkOjpzdHJpbmcgdmFsKQogICB7CiAgICAgaWYgKCF0aGlzLT5IYXNDb250ZW50KSB7CiAgICAgICB0aGlzLT5TIDw8ICI+IjsKICAgICAgIHRoaXMtPkhhc0NvbnRlbnQgPSB0cnVlOwogICAgIH0KLSAgICB0aGlzLT5TIDw8IGNtVlMxMEVzY2FwZVhNTCh2YWwpOworICAgIHRoaXMtPlMgPDwgY21WUzEwRXNjYXBlWE1MKHN0ZDo6bW92ZSh2YWwpKTsKICAgfQogICB+RWxlbSgpCiAgIHsKQEAgLTIyOSwxNSArMjMyLDE3IEBACiAgICwgTG9jYWxHZW5lcmF0b3IoCiAgICAgICAoY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yKil0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCkpCiB7Ci0gIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyh0aGlzLT5Db25maWd1cmF0aW9ucyk7CisgIHRoaXMtPkNvbmZpZ3VyYXRpb25zID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpFeGNsdWRlRW1wdHlDb25maWcpOwogICB0aGlzLT5Oc2lnaHRUZWdyYSA9IGdnLT5Jc05zaWdodFRlZ3JhKCk7CisgIHRoaXMtPkFuZHJvaWQgPSBnZy0+VGFyZ2V0c0FuZHJvaWQoKTsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICB0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb25baV0gPSAwOwogICB9CiAgIHNzY2FuZihnZy0+R2V0TnNpZ2h0VGVncmFWZXJzaW9uKCkuY19zdHIoKSwgIiV1LiV1LiV1LiV1IiwKICAgICAgICAgICZ0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb25bMF0sICZ0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb25bMV0sCiAgICAgICAgICAmdGhpcy0+TnNpZ2h0VGVncmFWZXJzaW9uWzJdLCAmdGhpcy0+TnNpZ2h0VGVncmFWZXJzaW9uWzNdKTsKLSAgdGhpcy0+TVNUb29scyA9ICF0aGlzLT5Oc2lnaHRUZWdyYTsKKyAgdGhpcy0+TVNUb29scyA9ICF0aGlzLT5Oc2lnaHRUZWdyYSAmJiAhdGhpcy0+QW5kcm9pZDsKICAgdGhpcy0+TWFuYWdlZCA9IGZhbHNlOwogICB0aGlzLT5UYXJnZXRDb21waWxlQXNXaW5SVCA9IGZhbHNlOwogICB0aGlzLT5Jc01pc3NpbmdGaWxlcyA9IGZhbHNlOwpAQCAtMjQ2LDYgKzI1MSw3IEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOwogICB0aGlzLT5JblNvdXJjZUJ1aWxkID0gKHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkgPT0KICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKKyAgdGhpcy0+Q2xhc3NpZnlBbGxDb25maWdTb3VyY2VzKCk7CiB9CiAKIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6On5jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yKCkKQEAgLTMyOSw2ICszMzUsMTMgQEAKICAgICB0aGlzLT5Qcm9qZWN0VHlwZSA9IGNzcHJvajsKICAgICB0aGlzLT5NYW5hZ2VkID0gdHJ1ZTsKICAgfQorCisgIGlmICh0aGlzLT5BbmRyb2lkICYmCisgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgJiYKKyAgICAgICF0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+SXNBbmRyb2lkR3VpRXhlY3V0YWJsZSgpKSB7CisgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5BZGRBbmRyb2lkRXhlY3V0YWJsZVdhcm5pbmcodGhpcy0+TmFtZSk7CisgIH0KKwogICAvLyBUZWxsIHRoZSBnbG9iYWwgZ2VuZXJhdG9yIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IGZpbGUKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk5hbWUpOwpAQCAtNDIzLDM4ICs0MzYsMzggQEAKICAgICAgIGUxLkF0dHJpYnV0ZSgiTGFiZWwiLCAiR2xvYmFscyIpOwogICAgICAgZTEuRWxlbWVudCgiUHJvamVjdEd1aWQiLCAieyIgKyB0aGlzLT5HVUlEICsgIn0iKTsKIAotICAgICAgaWYgKHRoaXMtPk1TVG9vbHMgJiYKKyAgICAgIGlmICgodGhpcy0+TVNUb29scyB8fCB0aGlzLT5BbmRyb2lkKSAmJgogICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpIDw9IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgewogICAgICAgICB0aGlzLT5Xcml0ZUFwcGxpY2F0aW9uVHlwZVNldHRpbmdzKGUxKTsKICAgICAgICAgdGhpcy0+VmVyaWZ5TmVjZXNzYXJ5RmlsZXMoKTsKICAgICAgIH0KIAotICAgICAgY29uc3QgY2hhciogdnNQcm9qZWN0VHlwZXMgPQorICAgICAgY21Qcm9wIHZzUHJvamVjdFR5cGVzID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfR0xPQkFMX1BST0pFQ1RfVFlQRVMiKTsKICAgICAgIGlmICh2c1Byb2plY3RUeXBlcykgewogICAgICAgICBjb25zdCBjaGFyKiB0YWdOYW1lID0gIlByb2plY3RUeXBlcyI7CiAgICAgICAgIGlmICh0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2opIHsKICAgICAgICAgICB0YWdOYW1lID0gIlByb2plY3RUeXBlR3VpZHMiOwogICAgICAgICB9Ci0gICAgICAgIGUxLkVsZW1lbnQodGFnTmFtZSwgdnNQcm9qZWN0VHlwZXMpOworICAgICAgICBlMS5FbGVtZW50KHRhZ05hbWUsICp2c1Byb2plY3RUeXBlcyk7CiAgICAgICB9CiAKLSAgICAgIGNvbnN0IGNoYXIqIHZzUHJvamVjdE5hbWUgPQorICAgICAgY21Qcm9wIHZzUHJvamVjdE5hbWUgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19TQ0NfUFJPSkVDVE5BTUUiKTsKLSAgICAgIGNvbnN0IGNoYXIqIHZzTG9jYWxQYXRoID0KKyAgICAgIGNtUHJvcCB2c0xvY2FsUGF0aCA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19MT0NBTFBBVEgiKTsKLSAgICAgIGNvbnN0IGNoYXIqIHZzUHJvdmlkZXIgPQorICAgICAgY21Qcm9wIHZzUHJvdmlkZXIgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19TQ0NfUFJPVklERVIiKTsKIAogICAgICAgaWYgKHZzUHJvamVjdE5hbWUgJiYgdnNMb2NhbFBhdGggJiYgdnNQcm92aWRlcikgewotICAgICAgICBlMS5FbGVtZW50KCJTY2NQcm9qZWN0TmFtZSIsIHZzUHJvamVjdE5hbWUpOwotICAgICAgICBlMS5FbGVtZW50KCJTY2NMb2NhbFBhdGgiLCB2c0xvY2FsUGF0aCk7Ci0gICAgICAgIGUxLkVsZW1lbnQoIlNjY1Byb3ZpZGVyIiwgdnNQcm92aWRlcik7CisgICAgICAgIGUxLkVsZW1lbnQoIlNjY1Byb2plY3ROYW1lIiwgKnZzUHJvamVjdE5hbWUpOworICAgICAgICBlMS5FbGVtZW50KCJTY2NMb2NhbFBhdGgiLCAqdnNMb2NhbFBhdGgpOworICAgICAgICBlMS5FbGVtZW50KCJTY2NQcm92aWRlciIsICp2c1Byb3ZpZGVyKTsKIAotICAgICAgICBjb25zdCBjaGFyKiB2c0F1eFBhdGggPQorICAgICAgICBjbVByb3AgdnNBdXhQYXRoID0KICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19TQ0NfQVVYUEFUSCIpOwogICAgICAgICBpZiAodnNBdXhQYXRoKSB7Ci0gICAgICAgICAgZTEuRWxlbWVudCgiU2NjQXV4UGF0aCIsIHZzQXV4UGF0aCk7CisgICAgICAgICAgZTEuRWxlbWVudCgiU2NjQXV4UGF0aCIsICp2c0F1eFBhdGgpOwogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTQ2Miw0NSArNDc1LDQ4IEBACiAgICAgICAgIGUxLkVsZW1lbnQoIldpbk1EQXNzZW1ibHkiLCAidHJ1ZSIpOwogICAgICAgfQogCi0gICAgICBjb25zdCBjaGFyKiB2c0dsb2JhbEtleXdvcmQgPQorICAgICAgY21Qcm9wIHZzR2xvYmFsS2V5d29yZCA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0dMT0JBTF9LRVlXT1JEIik7CiAgICAgICBpZiAoIXZzR2xvYmFsS2V5d29yZCkgewotICAgICAgICBlMS5FbGVtZW50KCJLZXl3b3JkIiwgIldpbjMyUHJvaiIpOworICAgICAgICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzQW5kcm9pZCgpKSB7CisgICAgICAgICAgZTEuRWxlbWVudCgiS2V5d29yZCIsICJBbmRyb2lkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZTEuRWxlbWVudCgiS2V5d29yZCIsICJXaW4zMlByb2oiKTsKKyAgICAgICAgfQogICAgICAgfSBlbHNlIHsKLSAgICAgICAgZTEuRWxlbWVudCgiS2V5d29yZCIsIHZzR2xvYmFsS2V5d29yZCk7CisgICAgICAgIGUxLkVsZW1lbnQoIktleXdvcmQiLCAqdnNHbG9iYWxLZXl3b3JkKTsKICAgICAgIH0KIAotICAgICAgY29uc3QgY2hhciogdnNHbG9iYWxSb290TmFtZXNwYWNlID0KKyAgICAgIGNtUHJvcCB2c0dsb2JhbFJvb3ROYW1lc3BhY2UgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19HTE9CQUxfUk9PVE5BTUVTUEFDRSIpOwogICAgICAgaWYgKHZzR2xvYmFsUm9vdE5hbWVzcGFjZSkgewotICAgICAgICBlMS5FbGVtZW50KCJSb290TmFtZXNwYWNlIiwgdnNHbG9iYWxSb290TmFtZXNwYWNlKTsKKyAgICAgICAgZTEuRWxlbWVudCgiUm9vdE5hbWVzcGFjZSIsICp2c0dsb2JhbFJvb3ROYW1lc3BhY2UpOwogICAgICAgfQogCiAgICAgICBlMS5FbGVtZW50KCJQbGF0Zm9ybSIsIHRoaXMtPlBsYXRmb3JtKTsKLSAgICAgIGNvbnN0IGNoYXIqIHByb2pMYWJlbCA9Ci0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlBST0pFQ1RfTEFCRUwiKTsKKyAgICAgIGNtUHJvcCBwcm9qTGFiZWwgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJQUk9KRUNUX0xBQkVMIik7CiAgICAgICBpZiAoIXByb2pMYWJlbCkgewotICAgICAgICBwcm9qTGFiZWwgPSB0aGlzLT5OYW1lLmNfc3RyKCk7CisgICAgICAgIHByb2pMYWJlbCA9ICZ0aGlzLT5OYW1lOwogICAgICAgfQotICAgICAgZTEuRWxlbWVudCgiUHJvamVjdE5hbWUiLCBwcm9qTGFiZWwpOworICAgICAgZTEuRWxlbWVudCgiUHJvamVjdE5hbWUiLCAqcHJvakxhYmVsKTsKICAgICAgIHsKLSAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0RnJhbWV3b3JrID0KKyAgICAgICAgY21Qcm9wIHRhcmdldEZyYW1ld29yayA9CiAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksiKTsKICAgICAgICAgaWYgKHRhcmdldEZyYW1ld29yaykgewotICAgICAgICAgIGlmIChzdGQ6OnN0cmNocih0YXJnZXRGcmFtZXdvcmssICc7JykgIT0gbnVsbHB0cikgewotICAgICAgICAgICAgZTEuRWxlbWVudCgiVGFyZ2V0RnJhbWV3b3JrcyIsIHRhcmdldEZyYW1ld29yayk7CisgICAgICAgICAgaWYgKHN0ZDo6c3RyY2hyKHRhcmdldEZyYW1ld29yay0+Y19zdHIoKSwgJzsnKSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBlMS5FbGVtZW50KCJUYXJnZXRGcmFtZXdvcmtzIiwgKnRhcmdldEZyYW1ld29yayk7CiAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29yayIsIHRhcmdldEZyYW1ld29yayk7CisgICAgICAgICAgICBlMS5FbGVtZW50KCJUYXJnZXRGcmFtZXdvcmsiLCAqdGFyZ2V0RnJhbWV3b3JrKTsKICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgLy8gVE9ETzogYWRkIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIFZTXyogcHJvcGVydHk/Ci0gICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA9Ci0gICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAotICAgICAgICAgICAgICAiVlNfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTiIpOwotICAgICAgICAgIGlmICghdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbikgewotICAgICAgICAgICAgdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCisgICAgICAgICAgY21Qcm9wIHAgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAorICAgICAgICAgICAgIlZTX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04iKTsKKyAgICAgICAgICBpZiAoIXApIHsKKyAgICAgICAgICAgIHAgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAogICAgICAgICAgICAgICAiRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTiIpOwogICAgICAgICAgIH0KKyAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0gcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyOwogICAgICAgICAgIGlmICghdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiAmJiB0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2ogJiYKICAgICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c0NFKCkgJiYKICAgICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRWZXJzaW9uKCkgPT0KQEAgLTUxOSwxOCArNTM1LDE1IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJgogICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c0NFKCkpIHsKLSAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXRGcmFtZXdvcmtJZCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCisgICAgICAgICAgY21Qcm9wIHRhcmdldEZyYW1ld29ya0lkID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKICAgICAgICAgICAgICJWU19UQVJHRVRfRlJBTUVXT1JLX0lERU5USUZJRVIiKTsKLSAgICAgICAgICBpZiAoIXRhcmdldEZyYW1ld29ya0lkKSB7Ci0gICAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtJZCA9ICJXaW5kb3dzRW1iZWRkZWRDb21wYWN0IjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZTEuRWxlbWVudCgiVGFyZ2V0RnJhbWV3b3JrSWRlbnRpZmllciIsIHRhcmdldEZyYW1ld29ya0lkKTsKLSAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXRGcmFtZXdvcmtWZXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAorICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29ya0lkZW50aWZpZXIiLAorICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RnJhbWV3b3JrSWQgPyAqdGFyZ2V0RnJhbWV3b3JrSWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIldpbmRvd3NFbWJlZGRlZENvbXBhY3QiKTsKKyAgICAgICAgICBjbVByb3AgdGFyZ2V0RnJhbWV3b3JrVmVyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKICAgICAgICAgICAgICJWU19UQVJHRVRfRlJBTUVXT1JLU19UQVJHRVRfVkVSU0lPTiIpOwotICAgICAgICAgIGlmICghdGFyZ2V0RnJhbWV3b3JrVmVyKSB7Ci0gICAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtWZXIgPSAidjguMCI7Ci0gICAgICAgICAgfQotICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29ya1RhcmdldHNWZXJzaW9uIiwgdGFyZ2V0RnJhbWV3b3JrVmVyKTsKKyAgICAgICAgICBlMS5FbGVtZW50KCJUYXJnZXRGcmFtZXdvcmtUYXJnZXRzVmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtWZXIgPyAqdGFyZ2V0RnJhbWV3b3JrVmVyIDogInY4LjAiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0UGxhdGZvcm1Ub29sc2V0Q3VkYUN1c3RvbURpclN0cmluZygpCiAgICAgICAgICAgICAgICAuZW1wdHkoKSkgewpAQCAtNTU2LDE5ICs1NjksMjAgQEAKIAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtleXMgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5S2V5cygpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYga2V5SXQgOiBrZXlzKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcmVmaXggPSAiVlNfR0xPQkFMXyI7Ci0gICAgICAgIGlmIChrZXlJdC5maW5kKHByZWZpeCkgIT0gMCkKKyAgICAgICAgc3RhdGljIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBwcmVmaXggPSAiVlNfR0xPQkFMXyI7CisgICAgICAgIGlmICghY21IYXNQcmVmaXgoa2V5SXQsIHByZWZpeCkpCiAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGdsb2JhbEtleSA9IGtleUl0LnN1YnN0cihzdHJsZW4ocHJlZml4KSk7CisgICAgICAgIGNtOjpzdHJpbmdfdmlldyBnbG9iYWxLZXkgPQorICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhrZXlJdCkuc3Vic3RyKHByZWZpeC5sZW5ndGgoKSk7CiAgICAgICAgIC8vIFNraXAgaW52YWxpZCBvciBzZXBhcmF0ZWx5LWhhbmRsZWQgcHJvcGVydGllcy4KICAgICAgICAgaWYgKGdsb2JhbEtleS5lbXB0eSgpIHx8IGdsb2JhbEtleSA9PSAiUFJPSkVDVF9UWVBFUyIgfHwKICAgICAgICAgICAgIGdsb2JhbEtleSA9PSAiUk9PVE5BTUVTUEFDRSIgfHwgZ2xvYmFsS2V5ID09ICJLRVlXT1JEIikgewogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShrZXlJdCk7CisgICAgICAgIGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoa2V5SXQpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBlMS5FbGVtZW50KGdsb2JhbEtleSwgdmFsdWUpOworICAgICAgICBlMS5FbGVtZW50KGdsb2JhbEtleSwgKnZhbHVlKTsKICAgICAgIH0KIAogICAgICAgaWYgKHRoaXMtPk1hbmFnZWQpIHsKQEAgLTY1Nyw3ICs2NzEsNyBAQAogICAgICAgICAgIGNtU3RyQ2F0KHRoaXMtPkRlZmF1bHRBcnRpZmFjdERpciwgIlxcbmFzbS5wcm9wcyIpOwogICAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gocHJvcHNMb2NhbCk7CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Db25maWd1cmVGaWxlKHByb3BzVGVtcGxhdGUsIHByb3BzTG9jYWwsIGZhbHNlLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgIEVsZW0oZTEsICJJbXBvcnQiKS5BdHRyaWJ1dGUoIlByb2plY3QiLCBwcm9wc0xvY2FsKTsKICAgICAgIH0KICAgICB9CkBAIC02NzMsOSArNjg3LDggQEAKICAgICAgICAgICBwcm9wcyA9IFZTMTBfQ1NoYXJwX1VTRVJfUFJPUFM7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBpZiAoY29uc3QgY2hhciogcCA9Ci0gICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19VU0VSX1BST1BTIikpIHsKLSAgICAgICAgcHJvcHMgPSBwOworICAgICAgaWYgKGNtUHJvcCBwID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfVVNFUl9QUk9QUyIpKSB7CisgICAgICAgIHByb3BzID0gKnA7CiAgICAgICB9CiAgICAgICBpZiAoIXByb3BzLmVtcHR5KCkpIHsKICAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHByb3BzKTsKQEAgLTc4MSw1MCArNzk0LDQxIEBACiB2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlUGFja2FnZVJlZmVyZW5jZXMoRWxlbSYgZTApCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYWNrYWdlUmVmZXJlbmNlczsKLSAgaWYgKGNvbnN0IGNoYXIqIHZzUGFja2FnZVJlZmVyZW5jZXMgPQorICBpZiAoY21Qcm9wIHZzUGFja2FnZVJlZmVyZW5jZXMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19QQUNLQUdFX1JFRkVSRU5DRVMiKSkgewotICAgIGNtRXhwYW5kTGlzdCh2c1BhY2thZ2VSZWZlcmVuY2VzLCBwYWNrYWdlUmVmZXJlbmNlcyk7CisgICAgY21FeHBhbmRMaXN0KCp2c1BhY2thZ2VSZWZlcmVuY2VzLCBwYWNrYWdlUmVmZXJlbmNlcyk7CiAgIH0KICAgaWYgKCFwYWNrYWdlUmVmZXJlbmNlcy5lbXB0eSgpKSB7CiAgICAgRWxlbSBlMShlMCwgIkl0ZW1Hcm91cCIpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHJpIDogcGFja2FnZVJlZmVyZW5jZXMpIHsKICAgICAgIHNpemVfdCB2ZXJzaW9uSW5kZXggPSByaS5maW5kX2xhc3Rfb2YoJ18nKTsKICAgICAgIGlmICh2ZXJzaW9uSW5kZXggIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgV3JpdGVQYWNrYWdlUmVmZXJlbmNlKGUxLCByaS5zdWJzdHIoMCwgdmVyc2lvbkluZGV4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpLnN1YnN0cih2ZXJzaW9uSW5kZXggKyAxKSk7CisgICAgICAgIEVsZW0gZTIoZTEsICJQYWNrYWdlUmVmZXJlbmNlIik7CisgICAgICAgIGUyLkF0dHJpYnV0ZSgiSW5jbHVkZSIsIHJpLnN1YnN0cigwLCB2ZXJzaW9uSW5kZXgpKTsKKyAgICAgICAgZTIuQXR0cmlidXRlKCJWZXJzaW9uIiwgcmkuc3Vic3RyKHZlcnNpb25JbmRleCArIDEpKTsKICAgICAgIH0KICAgICB9CiAgIH0KIH0KIAotdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVBhY2thZ2VSZWZlcmVuY2UoCi0gIEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgcmVmLCBzdGQ6OnN0cmluZyBjb25zdCYgdmVyc2lvbikKLXsKLSAgRWxlbSBlMihlMSwgIlBhY2thZ2VSZWZlcmVuY2UiKTsKLSAgZTIuQXR0cmlidXRlKCJJbmNsdWRlIiwgcmVmKTsKLSAgZTIuQXR0cmlidXRlKCJWZXJzaW9uIiwgdmVyc2lvbik7Ci19Ci0KIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEb3ROZXRSZWZlcmVuY2VzKEVsZW0mIGUwKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVmZXJlbmNlczsKLSAgaWYgKGNvbnN0IGNoYXIqIHZzRG90TmV0UmVmZXJlbmNlcyA9CisgIGlmIChjbVByb3AgdnNEb3ROZXRSZWZlcmVuY2VzID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfRE9UTkVUX1JFRkVSRU5DRVMiKSkgewotICAgIGNtRXhwYW5kTGlzdCh2c0RvdE5ldFJlZmVyZW5jZXMsIHJlZmVyZW5jZXMpOworICAgIGNtRXhwYW5kTGlzdCgqdnNEb3ROZXRSZWZlcmVuY2VzLCByZWZlcmVuY2VzKTsKICAgfQogICBjbVByb3BlcnR5TWFwIGNvbnN0JiBwcm9wcyA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5HZXRQcm9wZXJ0aWVzKCk7CiAgIGZvciAoYXV0byBjb25zdCYgaSA6IHByb3BzLkdldExpc3QoKSkgewotICAgIGlmIChpLmZpcnN0LmZpbmQoIlZTX0RPVE5FVF9SRUZFUkVOQ0VfIikgPT0gMCkgewotICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGkuZmlyc3Quc3Vic3RyKDIwKTsKLSAgICAgIGlmICghbmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBpLnNlY29uZDsKLSAgICAgICAgaWYgKCFjbXN5czo6U3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHBhdGgpKSB7Ci0gICAgICAgICAgcGF0aCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkgKyAiLyIgKyBwYXRoOwotICAgICAgICB9Ci0gICAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChwYXRoKTsKLSAgICAgICAgdGhpcy0+RG90TmV0SGludFJlZmVyZW5jZXNbIiJdLnB1c2hfYmFjaygKLSAgICAgICAgICBEb3ROZXRIaW50UmVmZXJlbmNlKG5hbWUsIHBhdGgpKTsKKyAgICBzdGF0aWMgY29uc3QgY206OnN0cmluZ192aWV3IHZzRG5SZWYgPSAiVlNfRE9UTkVUX1JFRkVSRU5DRV8iOworICAgIGlmIChjbUhhc1ByZWZpeChpLmZpcnN0LCB2c0RuUmVmKSkgeworICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGkuc2Vjb25kOworICAgICAgaWYgKCFjbXN5czo6U3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHBhdGgpKSB7CisgICAgICAgIHBhdGggPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpICsgIi8iICsgcGF0aDsKICAgICAgIH0KKyAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChwYXRoKTsKKyAgICAgIHRoaXMtPkRvdE5ldEhpbnRSZWZlcmVuY2VzWyIiXS5lbXBsYWNlX2JhY2soCisgICAgICAgIERvdE5ldEhpbnRSZWZlcmVuY2UoaS5maXJzdC5zdWJzdHIodnNEblJlZi5sZW5ndGgoKSksIHBhdGgpKTsKICAgICB9CiAgIH0KICAgaWYgKCFyZWZlcmVuY2VzLmVtcHR5KCkgfHwgIXRoaXMtPkRvdE5ldEhpbnRSZWZlcmVuY2VzLmVtcHR5KCkpIHsKQEAgLTgzNyw3ICs4NDEsNyBAQAogICAgICAgICAgIGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVXaXRob3V0TGFzdEV4dGVuc2lvbihyaSk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSByaTsKICAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHBhdGgpOwotICAgICAgICB0aGlzLT5Eb3ROZXRIaW50UmVmZXJlbmNlc1siIl0ucHVzaF9iYWNrKAorICAgICAgICB0aGlzLT5Eb3ROZXRIaW50UmVmZXJlbmNlc1siIl0uZW1wbGFjZV9iYWNrKAogICAgICAgICAgIERvdE5ldEhpbnRSZWZlcmVuY2UobmFtZSwgcGF0aCkpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgdGhpcy0+V3JpdGVEb3ROZXRSZWZlcmVuY2UoZTEsIHJpLCAiIiwgIiIpOwpAQCAtODY5LDkgKzg3Myw5IEBACiAgIGUyLkVsZW1lbnQoIlJlZmVyZW5jZU91dHB1dEFzc2VtYmx5IiwgInRydWUiKTsKICAgaWYgKCFoaW50LmVtcHR5KCkpIHsKICAgICBjb25zdCBjaGFyKiBwcml2YXRlUmVmZXJlbmNlID0gIlRydWUiOwotICAgIGlmIChjb25zdCBjaGFyKiB2YWx1ZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCisgICAgaWYgKGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgICAgICAgIlZTX0RPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUwiKSkgewotICAgICAgaWYgKGNtSXNPZmYodmFsdWUpKSB7CisgICAgICBpZiAoY21Jc09mZigqdmFsdWUpKSB7CiAgICAgICAgIHByaXZhdGVSZWZlcmVuY2UgPSAiRmFsc2UiOwogICAgICAgfQogICAgIH0KQEAgLTg4MywxMSArODg3LDEwIEBACiAKIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVJbXBvcnRzKEVsZW0mIGUwKQogewotICBjb25zdCBjaGFyKiBpbXBvcnRzID0KKyAgY21Qcm9wIGltcG9ydHMgPQogICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUFJPSkVDVF9JTVBPUlQiKTsKICAgaWYgKGltcG9ydHMpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJnc1NwbGl0ID0KLSAgICAgIGNtRXhwYW5kZWRMaXN0KHN0ZDo6c3RyaW5nKGltcG9ydHMpLCBmYWxzZSk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyZ3NTcGxpdCA9IGNtRXhwYW5kZWRMaXN0KCppbXBvcnRzLCBmYWxzZSk7CiAgICAgZm9yIChhdXRvJiBwYXRoIDogYXJnc1NwbGl0KSB7CiAgICAgICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkpIHsKICAgICAgICAgcGF0aCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkgKyAiLyIgKyBwYXRoOwpAQCAtOTEwLDEyICs5MTMsOCBAQAogICBDdXN0b21UYWdzIHRhZ3M7CiAgIGNtUHJvcGVydHlNYXAgY29uc3QmIHByb3BzID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnRpZXMoKTsKICAgZm9yIChjb25zdCBhdXRvJiBpIDogcHJvcHMuR2V0TGlzdCgpKSB7Ci0gICAgaWYgKGkuZmlyc3QuZmluZChyZWZQcm9wRnVsbFByZWZpeCkgPT0gMCkgewotICAgICAgc3RkOjpzdHJpbmcgcmVmVGFnID0gaS5maXJzdC5zdWJzdHIocmVmUHJvcEZ1bGxQcmVmaXgubGVuZ3RoKCkpOwotICAgICAgc3RkOjpzdHJpbmcgcmVmVmFsID0gaS5zZWNvbmQ7Ci0gICAgICBpZiAoIXJlZlRhZy5lbXB0eSgpICYmICFyZWZWYWwuZW1wdHkoKSkgewotICAgICAgICB0YWdzW3JlZlRhZ10gPSByZWZWYWw7Ci0gICAgICB9CisgICAgaWYgKGNtSGFzUHJlZml4KGkuZmlyc3QsIHJlZlByb3BGdWxsUHJlZml4KSAmJiAhaS5zZWNvbmQuZW1wdHkoKSkgeworICAgICAgdGFnc1tpLmZpcnN0LnN1YnN0cihyZWZQcm9wRnVsbFByZWZpeC5sZW5ndGgoKSldID0gaS5zZWNvbmQ7CiAgICAgfQogICB9CiAgIGZvciAoYXV0byBjb25zdCYgdGFnIDogdGFncykgewpAQCAtOTI1LDcgKzkyNCw3IEBACiAKIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEb3ROZXREb2N1bWVudGF0aW9uRmlsZShFbGVtJiBlMCkKIHsKLSAgc3RkOjpzdHJpbmcgY29uc3QgZG9jdW1lbnRhdGlvbkZpbGUgPQorICBzdGQ6OnN0cmluZyBjb25zdCYgZG9jdW1lbnRhdGlvbkZpbGUgPQogICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJWU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFIik7CiAKICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJiAhZG9jdW1lbnRhdGlvbkZpbGUuZW1wdHkoKSkgewpAQCAtOTM3LDEzICs5MzYsMTEgQEAKIAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUVtYmVkZGVkUmVzb3VyY2VHcm91cChFbGVtJiBlMCkKIHsKLSAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gcmVzeE9ianM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UmVzeFNvdXJjZXMocmVzeE9ianMsICIiKTsKLSAgaWYgKCFyZXN4T2Jqcy5lbXB0eSgpKSB7CisgIGlmICghdGhpcy0+UmVzeE9ianMuZW1wdHkoKSkgewogICAgIEVsZW0gZTEoZTAsICJJdGVtR3JvdXAiKTsKICAgICBzdGQ6OnN0cmluZyBzcmNEaXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwogICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChzcmNEaXIpOwotICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBvaSA6IHJlc3hPYmpzKSB7CisgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG9pIDogdGhpcy0+UmVzeE9ianMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIG9iaiA9IG9pLT5HZXRGdWxsUGF0aCgpOwogICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKG9iaik7CiAgICAgICBib29sIHVzZVJlbGF0aXZlUGF0aCA9IGZhbHNlOwpAQCAtOTUyLDcgKzk0OSw3IEBACiAgICAgICAgIC8vIHN1YmRpcmVjdG9yeQogICAgICAgICAvLyBvZiB0aGUgLmNzcHJvaiBmaWxlLCB3ZSBoYXZlIHRvIHVzZSByZWxhdGl2ZSBwYXRobmFtZXMsIG90aGVyd2lzZQogICAgICAgICAvLyB2aXN1YWwgc3R1ZGlvIGRvZXMgbm90IHNob3cgdGhlIGZpbGUgaW4gdGhlIElERS4gU29ycnkuCi0gICAgICAgIGlmIChvYmouZmluZChzcmNEaXIpID09IDApIHsKKyAgICAgICAgaWYgKGNtSGFzUHJlZml4KG9iaiwgc3JjRGlyKSkgewogICAgICAgICAgIG9iaiA9IHRoaXMtPkNvbnZlcnRQYXRoKG9iaiwgdHJ1ZSk7CiAgICAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKG9iaik7CiAgICAgICAgICAgdXNlUmVsYXRpdmVQYXRoID0gdHJ1ZTsKQEAgLTk4MSwxNyArOTc4LDExIEBACiAgICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSB3YXMgTk9UIGFkZGVkIHVzaW5nIGEgcmVsYXRpdmUgcGF0aCAod2hpY2ggc2hvdWxkCiAgICAgICAgIC8vIGJlIHRoZSBkZWZhdWx0KSwgd2UgaGF2ZSB0byBwcm92aWRlIGEgbGluayBoZXJlCiAgICAgICAgIGlmICghdXNlUmVsYXRpdmVQYXRoKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgbGluazsKLSAgICAgICAgICBpZiAob2JqLmZpbmQoc3JjRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgICBsaW5rID0gb2JqLnN1YnN0cihzcmNEaXIubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG9iai5maW5kKGJpbkRpcikgPT0gMCkgewotICAgICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoYmluRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGQ6OnN0cmluZyBsaW5rID0gdGhpcy0+R2V0Q1NoYXJwU291cmNlTGluayhvaSk7CisgICAgICAgICAgaWYgKGxpbmsuZW1wdHkoKSkgewogICAgICAgICAgICAgbGluayA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKG9iaik7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmICghbGluay5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBlMi5FbGVtZW50KCJMaW5rIiwgbGluayk7Ci0gICAgICAgICAgfQorICAgICAgICAgIGUyLkVsZW1lbnQoIkxpbmsiLCBsaW5rKTsKICAgICAgICAgfQogICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGdlbmVyYXRlZCByZXNvdXJjZSBmcm9tIGEgLkRlc2lnbmVyLmNzIGZpbGUKICAgICAgICAgc3RkOjpzdHJpbmcgZGVzaWduZXJSZXNvdXJjZSA9CkBAIC0xMDAwLDE1ICs5OTEsMTUgQEAKICAgICAgICAgICAiLkRlc2lnbmVyLmNzIjsKICAgICAgICAgaWYgKGNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhkZXNpZ25lclJlc291cmNlKSkgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRvciA9ICJQdWJsaWNSZXNYRmlsZUNvZGVHZW5lcmF0b3IiOwotICAgICAgICAgIGlmIChjb25zdCBjaGFyKiBnID0gb2ktPkdldFByb3BlcnR5KCJWU19SRVNPVVJDRV9HRU5FUkFUT1IiKSkgewotICAgICAgICAgICAgZ2VuZXJhdG9yID0gZzsKKyAgICAgICAgICBpZiAoY21Qcm9wIGcgPSBvaS0+R2V0UHJvcGVydHkoIlZTX1JFU09VUkNFX0dFTkVSQVRPUiIpKSB7CisgICAgICAgICAgICBnZW5lcmF0b3IgPSAqZzsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKCFnZW5lcmF0b3IuZW1wdHkoKSkgewogICAgICAgICAgICAgZTIuRWxlbWVudCgiR2VuZXJhdG9yIiwgZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgIGlmIChkZXNpZ25lclJlc291cmNlLmZpbmQoc3JjRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgIGRlc2lnbmVyUmVzb3VyY2UgPSBkZXNpZ25lclJlc291cmNlLnN1YnN0cihzcmNEaXIubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzaWduZXJSZXNvdXJjZS5maW5kKGJpbkRpcikgPT0gMCkgewotICAgICAgICAgICAgICBkZXNpZ25lclJlc291cmNlID0gZGVzaWduZXJSZXNvdXJjZS5zdWJzdHIoYmluRGlyLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAoY21IYXNQcmVmaXgoZGVzaWduZXJSZXNvdXJjZSwgc3JjRGlyKSkgeworICAgICAgICAgICAgICBkZXNpZ25lclJlc291cmNlLmVyYXNlKDAsIHNyY0Rpci5sZW5ndGgoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNtSGFzUHJlZml4KGRlc2lnbmVyUmVzb3VyY2UsIGJpbkRpcikpIHsKKyAgICAgICAgICAgICAgZGVzaWduZXJSZXNvdXJjZS5lcmFzZSgwLCBiaW5EaXIubGVuZ3RoKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgZGVzaWduZXJSZXNvdXJjZSA9CiAgICAgICAgICAgICAgICAgY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZGVzaWduZXJSZXNvdXJjZSk7CkBAIC0xMDE5LDExICsxMDEwLDEyIEBACiAgICAgICAgIH0KICAgICAgICAgY29uc3QgY21Qcm9wZXJ0eU1hcCYgcHJvcHMgPSBvaS0+R2V0UHJvcGVydGllcygpOwogICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBwIDogcHJvcHMuR2V0S2V5cygpKSB7Ci0gICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BOYW1lUHJlZml4ID0gIlZTX0NTSEFSUF8iOwotICAgICAgICAgIGlmIChwLmZpbmQocHJvcE5hbWVQcmVmaXgpID09IDApIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRhZ05hbWUgPSBwLnN1YnN0cihwcm9wTmFtZVByZWZpeC5sZW5ndGgoKSk7CisgICAgICAgICAgc3RhdGljIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBwcm9wTmFtZVByZWZpeCA9ICJWU19DU0hBUlBfIjsKKyAgICAgICAgICBpZiAoY21IYXNQcmVmaXgocCwgcHJvcE5hbWVQcmVmaXgpKSB7CisgICAgICAgICAgICBjbTo6c3RyaW5nX3ZpZXcgdGFnTmFtZSA9CisgICAgICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhwKS5zdWJzdHIocHJvcE5hbWVQcmVmaXgubGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCF0YWdOYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBwcm9wcy5HZXRQcm9wZXJ0eVZhbHVlKHApOworICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUgPSAqcHJvcHMuR2V0UHJvcGVydHlWYWx1ZShwKTsKICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgZTIuRWxlbWVudCh0YWdOYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICAgIH0KQEAgLTEwMzcsMTYgKzEwMjksMTQgQEAKIAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVhhbWxGaWxlc0dyb3VwKEVsZW0mIGUwKQogewotICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiB4YW1sT2JqczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRYYW1sU291cmNlcyh4YW1sT2JqcywgIiIpOwotICBpZiAoIXhhbWxPYmpzLmVtcHR5KCkpIHsKKyAgaWYgKCF0aGlzLT5YYW1sT2Jqcy5lbXB0eSgpKSB7CiAgICAgRWxlbSBlMShlMCwgIkl0ZW1Hcm91cCIpOwotICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBvaSA6IHhhbWxPYmpzKSB7CisgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG9pIDogdGhpcy0+WGFtbE9ianMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIG9iaiA9IG9pLT5HZXRGdWxsUGF0aCgpOwotICAgICAgY29uc3QgY2hhciogeGFtbFR5cGU7Ci0gICAgICBjb25zdCBjaGFyKiB4YW1sVHlwZVByb3BlcnR5ID0gb2ktPkdldFByb3BlcnR5KCJWU19YQU1MX1RZUEUiKTsKKyAgICAgIHN0ZDo6c3RyaW5nIHhhbWxUeXBlOworICAgICAgY21Qcm9wIHhhbWxUeXBlUHJvcGVydHkgPSBvaS0+R2V0UHJvcGVydHkoIlZTX1hBTUxfVFlQRSIpOwogICAgICAgaWYgKHhhbWxUeXBlUHJvcGVydHkpIHsKLSAgICAgICAgeGFtbFR5cGUgPSB4YW1sVHlwZVByb3BlcnR5OworICAgICAgICB4YW1sVHlwZSA9ICp4YW1sVHlwZVByb3BlcnR5OwogICAgICAgfSBlbHNlIHsKICAgICAgICAgeGFtbFR5cGUgPSAiUGFnZSI7CiAgICAgICB9CkBAIC0xMDU0LDI1ICsxMDQ0LDYgQEAKICAgICAgIEVsZW0gZTIoZTEsIHhhbWxUeXBlKTsKICAgICAgIHRoaXMtPldyaXRlU291cmNlKGUyLCBvaSk7CiAgICAgICBlMi5TZXRIYXNFbGVtZW50cygpOwotICAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJiAhdGhpcy0+SW5Tb3VyY2VCdWlsZCkgewotICAgICAgICAvLyBhZGQgPExpbms+IHRhZyB0byB3cml0dGVuIFhBTUwgc291cmNlIGlmIG5lY2Vzc2FyeQotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc3JjRGlyID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmluRGlyID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwotICAgICAgICBzdGQ6OnN0cmluZyBsaW5rOwotICAgICAgICBpZiAob2JqLmZpbmQoc3JjRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoc3JjRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqLmZpbmQoYmluRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoYmluRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbGluayA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFsaW5rLmVtcHR5KCkpIHsKLSAgICAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gobGluayk7Ci0gICAgICAgICAgZTIuRWxlbWVudCgiTGluayIsIGxpbmspOwotICAgICAgICB9Ci0gICAgICB9CiAgICAgICBlMi5FbGVtZW50KCJTdWJUeXBlIiwgIkRlc2lnbmVyIik7CiAgICAgfQogICB9CkBAIC0xMTE3LDkgKzEwODgsOSBAQAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVdpblJUUmVmZXJlbmNlcyhFbGVtJiBlMCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlZmVyZW5jZXM7Ci0gIGlmIChjb25zdCBjaGFyKiB2c1dpblJUUmVmZXJlbmNlcyA9CisgIGlmIChjbVByb3AgdnNXaW5SVFJlZmVyZW5jZXMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19XSU5SVF9SRUZFUkVOQ0VTIikpIHsKLSAgICBjbUV4cGFuZExpc3QodnNXaW5SVFJlZmVyZW5jZXMsIHJlZmVyZW5jZXMpOworICAgIGNtRXhwYW5kTGlzdCgqdnNXaW5SVFJlZmVyZW5jZXMsIHJlZmVyZW5jZXMpOwogICB9CiAKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NQaG9uZSgpICYmCkBAIC0xMTYwLDkgKzExMzEsOSBAQAogCiAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlICE9IGNzcHJvaikgewogICAgICAgc3RkOjpzdHJpbmcgY29uZmlnVHlwZTsKLSAgICAgIGlmIChjb25zdCBjaGFyKiB2c0NvbmZpZ3VyYXRpb25UeXBlID0KKyAgICAgIGlmIChjbVByb3AgdnNDb25maWd1cmF0aW9uVHlwZSA9CiAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19DT05GSUdVUkFUSU9OX1RZUEUiKSkgewotICAgICAgICBjb25maWdUeXBlID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSh2c0NvbmZpZ3VyYXRpb25UeXBlLAorICAgICAgICBjb25maWdUeXBlID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgqdnNDb25maWd1cmF0aW9uVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGMpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3dpdGNoICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkgewpAQCAtMTE3Niw5ICsxMTQ3LDExIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKICAgICAgICAgICAgIGlmICh0aGlzLT5Oc2lnaHRUZWdyYSAmJgotICAgICAgICAgICAgICAgICF0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJBTkRST0lEX0dVSSIpKSB7CisgICAgICAgICAgICAgICAgIXRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5Jc0FuZHJvaWRHdWlFeGVjdXRhYmxlKCkpIHsKICAgICAgICAgICAgICAgLy8gQW5kcm9pZCBleGVjdXRhYmxlcyBhcmUgLnNvIHRvby4KICAgICAgICAgICAgICAgY29uZmlnVHlwZSA9ICJEeW5hbWljTGlicmFyeSI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPkFuZHJvaWQpIHsKKyAgICAgICAgICAgICAgY29uZmlnVHlwZSA9ICJEeW5hbWljTGlicmFyeSI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjb25maWdUeXBlID0gIkFwcGxpY2F0aW9uIjsKICAgICAgICAgICAgIH0KQEAgLTEyMDgsNiArMTE4MSw4IEBACiAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0aGlzLT5Oc2lnaHRUZWdyYSkgewogICAgICAgdGhpcy0+V3JpdGVOc2lnaHRUZWdyYUNvbmZpZ3VyYXRpb25WYWx1ZXMoZTEsIGMpOworICAgIH0gZWxzZSBpZiAodGhpcy0+QW5kcm9pZCkgeworICAgICAgdGhpcy0+V3JpdGVBbmRyb2lkQ29uZmlndXJhdGlvblZhbHVlcyhlMSwgYyk7CiAgICAgfQogICB9CiB9CkBAIC0xMjE4LDkgKzExOTMsOSBAQAogICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NDRSgpKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGNvbnN0IGNoYXIqIGFkZGl0aW9uYWxGaWxlcyA9CisgIGNtUHJvcCBhZGRpdGlvbmFsRmlsZXMgPQogICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkRFUExPWU1FTlRfQURESVRJT05BTF9GSUxFUyIpOwotICBjb25zdCBjaGFyKiByZW1vdGVEaXJlY3RvcnkgPQorICBjbVByb3AgcmVtb3RlRGlyZWN0b3J5ID0KICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkiKTsKICAgaWYgKCEoYWRkaXRpb25hbEZpbGVzIHx8IHJlbW90ZURpcmVjdG9yeSkpIHsKICAgICByZXR1cm47CkBAIC0xMjMwLDEwICsxMjA1LDEwIEBACiAgICAgZTEuQXR0cmlidXRlKCJDb25kaXRpb24iLCB0aGlzLT5DYWxjQ29uZGl0aW9uKGMpKTsKIAogICAgIGlmIChyZW1vdGVEaXJlY3RvcnkpIHsKLSAgICAgIGUxLkVsZW1lbnQoIlJlbW90ZURpcmVjdG9yeSIsIHJlbW90ZURpcmVjdG9yeSk7CisgICAgICBlMS5FbGVtZW50KCJSZW1vdGVEaXJlY3RvcnkiLCAqcmVtb3RlRGlyZWN0b3J5KTsKICAgICB9CiAgICAgaWYgKGFkZGl0aW9uYWxGaWxlcykgewotICAgICAgZTEuRWxlbWVudCgiQ0VBZGRpdGlvbmFsRmlsZXMiLCBhZGRpdGlvbmFsRmlsZXMpOworICAgICAgZTEuRWxlbWVudCgiQ0VBZGRpdGlvbmFsRmlsZXMiLCAqYWRkaXRpb25hbEZpbGVzKTsKICAgICB9CiAgIH0KIH0KQEAgLTEyNzEsNyArMTI0NiwxMCBAQAogICB9IGVsc2UgewogICAgIGUxLkVsZW1lbnQoIkNoYXJhY3RlclNldCIsICJNdWx0aUJ5dGUiKTsKICAgfQotICBpZiAoY29uc3QgY2hhciogdG9vbHNldCA9IGdnLT5HZXRQbGF0Zm9ybVRvb2xzZXQoKSkgeworICBpZiAoY21Qcm9wIHByb2plY3RUb29sc2V0T3ZlcnJpZGUgPQorICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19QTEFURk9STV9UT09MU0VUIikpIHsKKyAgICBlMS5FbGVtZW50KCJQbGF0Zm9ybVRvb2xzZXQiLCAqcHJvamVjdFRvb2xzZXRPdmVycmlkZSk7CisgIH0gZWxzZSBpZiAoY29uc3QgY2hhciogdG9vbHNldCA9IGdnLT5HZXRQbGF0Zm9ybVRvb2xzZXQoKSkgewogICAgIGUxLkVsZW1lbnQoIlBsYXRmb3JtVG9vbHNldCIsIHRvb2xzZXQpOwogICB9CiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJWU19XSU5SVF9DT01QT05FTlQiKSB8fApAQCAtMTMxNCw3ICsxMjkyLDEwIEBACiAgICAgby5SZW1vdmVGbGFnKCJQbGF0Zm9ybSIpOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHRvb2xzZXQgPSBnZy0+R2V0UGxhdGZvcm1Ub29sc2V0KCkpIHsKKyAgaWYgKGNtUHJvcCBwcm9qZWN0VG9vbHNldE92ZXJyaWRlID0KKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUExBVEZPUk1fVE9PTFNFVCIpKSB7CisgICAgZTEuRWxlbWVudCgiUGxhdGZvcm1Ub29sc2V0IiwgKnByb2plY3RUb29sc2V0T3ZlcnJpZGUpOworICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIHRvb2xzZXQgPSBnZy0+R2V0UGxhdGZvcm1Ub29sc2V0KCkpIHsKICAgICBlMS5FbGVtZW50KCJQbGF0Zm9ybVRvb2xzZXQiLCB0b29sc2V0KTsKICAgfQogCkBAIC0xMzIyLDggKzEzMDMsOCBAQAogICAgIGNtU3RyQ2F0KGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpLCAiX1BPU1RGSVgiKTsKICAgc3RkOjpzdHJpbmcgYXNzZW1ibHlOYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPdXRwdXROYW1lKAogICAgIGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpOwotICBpZiAoY29uc3QgY2hhciogcG9zdGZpeCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkocG9zdGZpeE5hbWUpKSB7Ci0gICAgYXNzZW1ibHlOYW1lICs9IHBvc3RmaXg7CisgIGlmIChjbVByb3AgcG9zdGZpeCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkocG9zdGZpeE5hbWUpKSB7CisgICAgYXNzZW1ibHlOYW1lICs9ICpwb3N0Zml4OwogICB9CiAgIGUxLkVsZW1lbnQoIkFzc2VtYmx5TmFtZSIsIGFzc2VtYmx5TmFtZSk7CiAKQEAgLTEzNDMsNDMgKzEzMjQsNjUgQEAKICAgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvciogZ2cgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7CiAgIGNvbnN0IGNoYXIqIHRvb2xzZXQgPSBnZy0+R2V0UGxhdGZvcm1Ub29sc2V0KCk7CiAgIGUxLkVsZW1lbnQoIk5ka1Rvb2xjaGFpblZlcnNpb24iLCB0b29sc2V0ID8gdG9vbHNldCA6ICJEZWZhdWx0Iik7Ci0gIGlmIChjb25zdCBjaGFyKiBtaW5BcGkgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FQSV9NSU4iKSkgewotICAgIGUxLkVsZW1lbnQoIkFuZHJvaWRNaW5BUEkiLCAiYW5kcm9pZC0iICsgc3RkOjpzdHJpbmcobWluQXBpKSk7CisgIGlmIChjbVByb3AgbWluQXBpID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9BUElfTUlOIikpIHsKKyAgICBlMS5FbGVtZW50KCJBbmRyb2lkTWluQVBJIiwgImFuZHJvaWQtIiArICptaW5BcGkpOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBhcGkgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FQSSIpKSB7Ci0gICAgZTEuRWxlbWVudCgiQW5kcm9pZFRhcmdldEFQSSIsICJhbmRyb2lkLSIgKyBzdGQ6OnN0cmluZyhhcGkpKTsKKyAgaWYgKGNtUHJvcCBhcGkgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FQSSIpKSB7CisgICAgZTEuRWxlbWVudCgiQW5kcm9pZFRhcmdldEFQSSIsICJhbmRyb2lkLSIgKyAqYXBpKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBjcHVBcmNoID0KLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9BUkNIIikpIHsKLSAgICBlMS5FbGVtZW50KCJBbmRyb2lkQXJjaCIsIGNwdUFyY2gpOworICBpZiAoY21Qcm9wIGNwdUFyY2ggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FSQ0giKSkgeworICAgIGUxLkVsZW1lbnQoIkFuZHJvaWRBcmNoIiwgKmNwdUFyY2gpOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHN0bFR5cGUgPQorICBpZiAoY21Qcm9wIHN0bFR5cGUgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX1NUTF9UWVBFIikpIHsKLSAgICBlMS5FbGVtZW50KCJBbmRyb2lkU3RsVHlwZSIsIHN0bFR5cGUpOworICAgIGUxLkVsZW1lbnQoIkFuZHJvaWRTdGxUeXBlIiwgKnN0bFR5cGUpOworICB9Cit9CisKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVBbmRyb2lkQ29uZmlndXJhdGlvblZhbHVlcygKKyAgRWxlbSYgZTEsIHN0ZDo6c3RyaW5nIGNvbnN0JikKK3sKKyAgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvciogZ2cgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7CisgIGlmIChjbVByb3AgcHJvamVjdFRvb2xzZXRPdmVycmlkZSA9CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1BMQVRGT1JNX1RPT0xTRVQiKSkgeworICAgIGUxLkVsZW1lbnQoIlBsYXRmb3JtVG9vbHNldCIsICpwcm9qZWN0VG9vbHNldE92ZXJyaWRlKTsKKyAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiB0b29sc2V0ID0gZ2ctPkdldFBsYXRmb3JtVG9vbHNldCgpKSB7CisgICAgZTEuRWxlbWVudCgiUGxhdGZvcm1Ub29sc2V0IiwgdG9vbHNldCk7CisgIH0KKyAgaWYgKGNtUHJvcCBzdGxUeXBlID0KKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9TVExfVFlQRSIpKSB7CisgICAgaWYgKCpzdGxUeXBlICE9ICJub25lIikgeworICAgICAgZTEuRWxlbWVudCgiVXNlT2ZTdGwiLCAqc3RsVHlwZSk7CisgICAgfQogICB9CiB9CiAKIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVDdXN0b21Db21tYW5kcyhFbGVtJiBlMCkKIHsKICAgdGhpcy0+Q1NoYXJwQ3VzdG9tQ29tbWFuZE5hbWVzLmNsZWFyKCk7Ci0gIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGN1c3RvbUNvbW1hbmRzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEN1c3RvbUNvbW1hbmRzKGN1c3RvbUNvbW1hbmRzLCAiIik7Ci0gIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzaSA6IGN1c3RvbUNvbW1hbmRzKSB7Ci0gICAgdGhpcy0+V3JpdGVDdXN0b21Db21tYW5kKGUwLCBzaSk7CisKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzcmNDTWFrZUxpc3RzID0KKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlVkNQcm9qQnVpbGRSdWxlKCk7CisKKyAgZm9yIChjbUdlbmVyYXRvclRhcmdldDo6QWxsQ29uZmlnU291cmNlIGNvbnN0JiBzaSA6CisgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRBbGxDb25maWdTb3VyY2VzKCkpIHsKKyAgICBpZiAoc2kuU291cmNlID09IHNyY0NNYWtlTGlzdHMpIHsKKyAgICAgIC8vIFNraXAgZXhwbGljaXQgcmVmZXJlbmNlIHRvIENNYWtlTGlzdHMudHh0IHNvdXJjZS4KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB0aGlzLT5Xcml0ZUN1c3RvbUNvbW1hbmQoZTAsIHNpLlNvdXJjZSk7CiAgIH0KIAogICAvLyBBZGQgQ01ha2VMaXN0cy50eHQgZmlsZSB3aXRoIHJ1bGUgdG8gcmUtcnVuIENNYWtlIGZvciB1c2VyIGNvbnZlbmllbmNlLgogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUICYmCiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSAhPSBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VUKSB7Ci0gICAgaWYgKGNtU291cmNlRmlsZSBjb25zdCogc2YgPQotICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVWQ1Byb2pCdWlsZFJ1bGUoKSkgeworICAgIGlmIChzcmNDTWFrZUxpc3RzKSB7CiAgICAgICAvLyBXcml0ZSBkaXJlY3RseSByYXRoZXIgdGhhbiB0aHJvdWdoIFdyaXRlQ3VzdG9tQ29tbWFuZCBiZWNhdXNlCiAgICAgICAvLyB3ZSBkbyBub3Qgd2FudCB0aGUgZGUtZHVwbGljYXRpb24gYW5kIGl0IGhhcyBubyBkZXBlbmRlbmNpZXMuCi0gICAgICBpZiAoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjb21tYW5kID0gc2YtPkdldEN1c3RvbUNvbW1hbmQoKSkgewotICAgICAgICB0aGlzLT5Xcml0ZUN1c3RvbVJ1bGUoZTAsIHNmLCAqY29tbWFuZCk7CisgICAgICBpZiAoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjb21tYW5kID0gc3JjQ01ha2VMaXN0cy0+R2V0Q3VzdG9tQ29tbWFuZCgpKSB7CisgICAgICAgIHRoaXMtPldyaXRlQ3VzdG9tUnVsZShlMCwgc3JjQ01ha2VMaXN0cywgKmNvbW1hbmQpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMTQzOSwxNiArMTQ0MiwxNCBAQAogICAgIHNwZTIgPSBjbTo6bWFrZV91bmlxdWU8RWxlbT4oKnNwZTEsICJDdXN0b21CdWlsZCIpOwogICAgIHRoaXMtPldyaXRlU291cmNlKCpzcGUyLCBzb3VyY2UpOwogICAgIHNwZTItPlNldEhhc0VsZW1lbnRzKCk7CisgICAgaWYgKGNvbW1hbmQuR2V0U3RkUGlwZXNVVEY4KCkpIHsKKyAgICAgIHRoaXMtPldyaXRlU3RkT3V0RW5jb2RpbmdVdGY4KCpzcGUyKTsKKyAgICB9CiAgIH0gZWxzZSB7CiAgICAgRWxlbSBlMShlMCwgIkl0ZW1Hcm91cCIpOwogICAgIEVsZW0gZTIoZTEsICJOb25lIik7Ci0gICAgc3RkOjpzdHJpbmcgbGluazsKLSAgICB0aGlzLT5HZXRDU2hhcnBTb3VyY2VMaW5rKHNvdXJjZSwgbGluayk7CiAgICAgdGhpcy0+V3JpdGVTb3VyY2UoZTIsIHNvdXJjZSk7CiAgICAgZTIuU2V0SGFzRWxlbWVudHMoKTsKLSAgICBpZiAoIWxpbmsuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiTGluayIsIGxpbmspOwotICAgIH0KICAgfQogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNvbW1hbmQsIGMsIGxnKTsKQEAgLTE2NjIsMTEgKzE2NjMsOSBAQAogICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IHJlc3hPYmpzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UmVzeFNvdXJjZXMocmVzeE9ianMsICIiKTsKLSAgICBpZiAoIXJlc3hPYmpzLmVtcHR5KCkpIHsKKyAgICBpZiAoIXRoaXMtPlJlc3hPYmpzLmVtcHR5KCkpIHsKICAgICAgIEVsZW0gZTEoZTAsICJJdGVtR3JvdXAiKTsKLSAgICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBvaSA6IHJlc3hPYmpzKSB7CisgICAgICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogb2kgOiB0aGlzLT5SZXN4T2JqcykgewogICAgICAgICBzdGQ6OnN0cmluZyBvYmogPSBvaS0+R2V0RnVsbFBhdGgoKTsKICAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKG9iaik7CiAgICAgICAgIEVsZW0gZTIoZTEsICJFbWJlZGRlZFJlc291cmNlIik7CkBAIC0xNjk0LDcgKzE2OTMsNyBAQAogICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGlmICghcmVzeE9ianMuZW1wdHkoKSB8fCAhdGhpcy0+QWRkZWRGaWxlcy5lbXB0eSgpKSB7CisgICAgICBpZiAoIXRoaXMtPlJlc3hPYmpzLmVtcHR5KCkgfHwgIXRoaXMtPkFkZGVkRmlsZXMuZW1wdHkoKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBndWlkTmFtZSA9ICJTR19GaWx0ZXJfUmVzb3VyY2UgRmlsZXMiOwogICAgICAgICBzdGQ6OnN0cmluZyBndWlkID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRHVUlEKGd1aWROYW1lKTsKICAgICAgICAgRWxlbSBlMihlMSwgIkZpbHRlciIpOwpAQCAtMTc3OSwyNSArMTc3OCw3MCBAQAogICBpZiAodGhpcy0+SXNSZXN4SGVhZGVyKGZpbGVOYW1lKSkgewogICAgIGUyLkVsZW1lbnQoIkZpbGVUeXBlIiwgIkNwcEZvcm0iKTsKICAgfSBlbHNlIGlmICh0aGlzLT5Jc1hhbWxIZWFkZXIoZmlsZU5hbWUpKSB7Ci0gICAgc3RkOjpzdHJpbmcgeGFtbEZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmZpbmRfbGFzdF9vZigiLiIpKTsKLSAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwgeGFtbEZpbGVOYW1lKTsKKyAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwKKyAgICAgICAgICAgICAgIGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5maW5kX2xhc3Rfb2YoIi4iKSkpOwogICB9CiB9CiAKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6UGFyc2VTZXR0aW5nc1Byb3BlcnR5KAorICBjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3NQcm9wZXJ0eVZhbHVlLCBDb25maWdUb1NldHRpbmdzJiB0b29sU2V0dGluZ3MpCit7CisgIGlmICghc2V0dGluZ3NQcm9wZXJ0eVZhbHVlLmVtcHR5KCkpIHsKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9CisgICAgICBnZS5QYXJzZShzZXR0aW5nc1Byb3BlcnR5VmFsdWUpOworCisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZCA9IGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXR0aW5ncyA9IGNtRXhwYW5kZWRMaXN0KGV2YWx1YXRlZCk7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR0aW5nIDogc2V0dGluZ3MpIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBhc3NpZ25tZW50ID0gc2V0dGluZy5maW5kKCc9Jyk7CisgICAgICAgIGlmIChhc3NpZ25tZW50ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcHJvcE5hbWUgPSBzZXR0aW5nLnN1YnN0cigwLCBhc3NpZ25tZW50KTsKKyAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwcm9wVmFsdWUgPSBzZXR0aW5nLnN1YnN0cihhc3NpZ25tZW50ICsgMSk7CisKKyAgICAgICAgICBpZiAoIXByb3BWYWx1ZS5lbXB0eSgpKSB7CisgICAgICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Jvb2wgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6UHJvcGVydHlJc1NhbWVJbkFsbENvbmZpZ3MoCisgIGNvbnN0IENvbmZpZ1RvU2V0dGluZ3MmIHRvb2xTZXR0aW5ncywgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BOYW1lKQoreworICBzdGQ6OnN0cmluZyBmaXJzdFByb3BWYWx1ZSA9ICIiOworICBmb3IgKGNvbnN0IGF1dG8mIGNvbmZpZ1RvU2V0dGluZ3MgOiB0b29sU2V0dGluZ3MpIHsKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiYgc2V0dGluZ3MgPQorICAgICAgY29uZmlnVG9TZXR0aW5ncy5zZWNvbmQ7CisKKyAgICBpZiAoZmlyc3RQcm9wVmFsdWUuZW1wdHkoKSkgeworICAgICAgaWYgKHNldHRpbmdzLmZpbmQocHJvcE5hbWUpICE9IHNldHRpbmdzLmVuZCgpKSB7CisgICAgICAgIGZpcnN0UHJvcFZhbHVlID0gc2V0dGluZ3MuZmluZChwcm9wTmFtZSktPnNlY29uZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2V0dGluZ3MuZmluZChwcm9wTmFtZSkgPT0gc2V0dGluZ3MuZW5kKCkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0dGluZ3MuZmluZChwcm9wTmFtZSktPnNlY29uZCAhPSBmaXJzdFByb3BWYWx1ZSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiB2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlRXh0cmFTb3VyY2UoRWxlbSYgZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzZikKIHsKICAgYm9vbCB0b29sSGFzU2V0dGluZ3MgPSBmYWxzZTsKICAgY29uc3QgY2hhciogdG9vbCA9ICJOb25lIjsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyVHlwZTsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyRW50cnlQb2ludDsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyTW9kZWw7Ci0gIHN0ZDo6c3RyaW5nIHNoYWRlckFkZGl0aW9uYWxGbGFnczsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyRGlzYWJsZU9wdGltaXphdGlvbnM7Ci0gIHN0ZDo6c3RyaW5nIHNoYWRlckVuYWJsZURlYnVnOwotICBzdGQ6OnN0cmluZyBzaGFkZXJPYmplY3RGaWxlTmFtZTsKLSAgc3RkOjpzdHJpbmcgb3V0cHV0SGVhZGVyRmlsZTsKLSAgc3RkOjpzdHJpbmcgdmFyaWFibGVOYW1lOwogICBzdGQ6OnN0cmluZyBzZXR0aW5nc0dlbmVyYXRvcjsKICAgc3RkOjpzdHJpbmcgc2V0dGluZ3NMYXN0R2VuT3V0cHV0OwogICBzdGQ6OnN0cmluZyBzb3VyY2VMaW5rOwpAQCAtMTgwNSw3NiArMTg0OSw4NCBAQAogICBzdGQ6OnN0cmluZyBjb3B5VG9PdXREaXI7CiAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVJblZzaXg7CiAgIHN0ZDo6c3RyaW5nIGV4dCA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzZi0+R2V0RXh0ZW5zaW9uKCkpOwotICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qKSB7Ci0gICAgLy8gRVZFUlkgZXh0cmEgc291cmNlIGZpbGUgbXVzdCBoYXZlIGEgPExpbms+LCBvdGhlcndpc2UgaXQgbWlnaHQgbm90Ci0gICAgLy8gYmUgdmlzaWJsZSBpbiBWaXN1YWwgU3R1ZGlvIGF0IGFsbC4gVGhlIHBhdGggcmVsYXRpdmUgdG8gY3VycmVudAotICAgIC8vIHNvdXJjZS0gb3IgYmluYXJ5LWRpciBpcyB1c2VkIHdpdGhpbiB0aGUgbGluaywgaWYgdGhlIGZpbGUgaXMKLSAgICAvLyBpbiBub25lIG9mIHRoZXNlIHBhdGhzLCBpdCBpcyBhZGRlZCB3aXRoIHRoZSBwbGFpbiBmaWxlbmFtZSB3aXRob3V0Ci0gICAgLy8gYW55IHBhdGguIFRoaXMgbWVhbnMgdGhlIGZpbGUgd2lsbCBzaG93IHVwIGF0IHJvb3QtbGV2ZWwgb2YgdGhlIGNzcHJvagotICAgIC8vICh3aGVyZSBDTWFrZUxpc3RzLnR4dCBldGMuIGFyZSkuCi0gICAgaWYgKCF0aGlzLT5JblNvdXJjZUJ1aWxkKSB7Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOwotICAgICAgc3RkOjpzdHJpbmcgZnVsbEZpbGVOYW1lID0gc2YtPkdldEZ1bGxQYXRoKCk7Ci0gICAgICBzdGQ6OnN0cmluZyBzcmNEaXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwotICAgICAgc3RkOjpzdHJpbmcgYmluRGlyID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKLSAgICAgIGlmIChmdWxsRmlsZU5hbWUuZmluZChiaW5EaXIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHNvdXJjZUxpbmsuY2xlYXIoKTsKLSAgICAgIH0gZWxzZSBpZiAoZnVsbEZpbGVOYW1lLmZpbmQoc3JjRGlyKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBzb3VyY2VMaW5rID0gZnVsbEZpbGVOYW1lLnN1YnN0cihzcmNEaXIubGVuZ3RoKCkgKyAxKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIGZhbGxiYWNrOiBhZGQgcGxhaW4gZmlsZW5hbWUgd2l0aG91dCBhbnkgcGF0aAotICAgICAgICBzb3VyY2VMaW5rID0gY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZnVsbEZpbGVOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmICghc291cmNlTGluay5lbXB0eSgpKSB7Ci0gICAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChzb3VyY2VMaW5rKTsKLSAgICAgIH0KLSAgICB9CisgIENvbmZpZ1RvU2V0dGluZ3MgdG9vbFNldHRpbmdzOworICBmb3IgKGNvbnN0IGF1dG8mIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgdG9vbFNldHRpbmdzW2NvbmZpZ107CisgIH0KKworICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qICYmICF0aGlzLT5JblNvdXJjZUJ1aWxkKSB7CisgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKICAgfQogICBpZiAoZXh0ID09ICJobHNsIikgewogICAgIHRvb2wgPSAiRlhDb21waWxlIjsKICAgICAvLyBGaWd1cmUgb3V0IHRoZSB0eXBlIG9mIHNoYWRlciBjb21waWxlciB0byB1c2UuCi0gICAgaWYgKGNvbnN0IGNoYXIqIHN0ID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfVFlQRSIpKSB7Ci0gICAgICBzaGFkZXJUeXBlID0gc3Q7Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc3QgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9UWVBFIikpIHsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJTaGFkZXJUeXBlIl0gPSAqc3Q7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggZW50cnkgcG9pbnQgdG8gdXNlIGlmIGFueQotICAgIGlmIChjb25zdCBjaGFyKiBzZSA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0VOVFJZUE9JTlQiKSkgewotICAgICAgc2hhZGVyRW50cnlQb2ludCA9IHNlOwotICAgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgICBpZiAoY21Qcm9wIHNlID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfRU5UUllQT0lOVCIpKSB7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiRW50cnlQb2ludE5hbWUiXSA9ICpzZTsKKyAgICAgIH0KICAgICB9CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCBzaGFkZXIgbW9kZWwgdG8gdXNlIGlmIGFueQotICAgIGlmIChjb25zdCBjaGFyKiBzbSA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX01PREVMIikpIHsKLSAgICAgIHNoYWRlck1vZGVsID0gc207Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc20gPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9NT0RFTCIpKSB7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiU2hhZGVyTW9kZWwiXSA9ICpzbTsKKyAgICAgIH0KICAgICB9CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCBvdXRwdXQgaGVhZGVyIGZpbGUgdG8gdXNlIGlmIGFueQotICAgIGlmIChjb25zdCBjaGFyKiBvaGYgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUiKSkgewotICAgICAgb3V0cHV0SGVhZGVyRmlsZSA9IG9oZjsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBvaGYgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUiKSkgeworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIkhlYWRlckZpbGVPdXRwdXQiXSA9ICpvaGY7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmFyaWFibGUgbmFtZSB0byB1c2UgaWYgYW55Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZuID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfVkFSSUFCTEVfTkFNRSIpKSB7Ci0gICAgICB2YXJpYWJsZU5hbWUgPSB2bjsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCB2biA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX1ZBUklBQkxFX05BTUUiKSkgeworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIlZhcmlhYmxlTmFtZSJdID0gKnZuOworICAgICAgfQogICAgIH0KICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGFkZGl0aW9uYWwgZmxhZ3MgdG8gdXNlCi0gICAgaWYgKGNvbnN0IGNoYXIqIHNhZiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0ZMQUdTIikpIHsKLSAgICAgIHNoYWRlckFkZGl0aW9uYWxGbGFncyA9IHNhZjsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBzYWYgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9GTEFHUyIpKSB7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiQWRkaXRpb25hbE9wdGlvbnMiXSA9ICpzYWY7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgaWYgZGVidWcgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGdlbmVyYXRlZAotICAgIGlmIChjb25zdCBjaGFyKiBzZWQgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9FTkFCTEVfREVCVUciKSkgewotICAgICAgc2hhZGVyRW5hYmxlRGVidWcgPSBzZWQ7Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc2VkID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfRU5BQkxFX0RFQlVHIikpIHsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKKyAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0gZ2UuUGFyc2UoKnNlZCk7CisKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZCA9IGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisKKyAgICAgICAgaWYgKCFldmFsdWF0ZWQuZW1wdHkoKSkgeworICAgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJFbmFibGVEZWJ1Z2dpbmdJbmZvcm1hdGlvbiJdID0KKyAgICAgICAgICAgIGNtSXNPbihldmFsdWF0ZWQpID8gInRydWUiIDogImZhbHNlIjsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KICAgICAvLyBGaWd1cmUgb3V0IGlmIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIGRpc2FibGVkCi0gICAgaWYgKGNvbnN0IGNoYXIqIHNkbyA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUyIpKSB7Ci0gICAgICBzaGFkZXJEaXNhYmxlT3B0aW1pemF0aW9ucyA9IHNkbzsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBzZG8gPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9ESVNBQkxFX09QVElNSVpBVElPTlMiKSkgeworICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlOworICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPSBnZS5QYXJzZSgqc2RvKTsKKworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXZhbHVhdGVkID0gY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKworICAgICAgICBpZiAoIWV2YWx1YXRlZC5lbXB0eSgpKSB7CisgICAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIkRpc2FibGVPcHRpbWl6YXRpb25zIl0gPQorICAgICAgICAgICAgY21Jc09uKGV2YWx1YXRlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiOworICAgICAgICB9CisgICAgICB9CiAgICAgfQotICAgIGlmIChjb25zdCBjaGFyKiBzb2ZuID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfT0JKRUNUX0ZJTEVfTkFNRSIpKSB7Ci0gICAgICBzaGFkZXJPYmplY3RGaWxlTmFtZSA9IHNvZm47Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc29mbiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX09CSkVDVF9GSUxFX05BTUUiKSkgeworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIk9iamVjdEZpbGVPdXRwdXQiXSA9ICpzb2ZuOworICAgICAgfQogICAgIH0KICAgfSBlbHNlIGlmIChleHQgPT0gImpwZyIgfHwgZXh0ID09ICJwbmciKSB7CiAgICAgdG9vbCA9ICJJbWFnZSI7CkBAIC0xODk0LDkgKzE5NDYsOSBAQAogICB9IGVsc2UgaWYgKGV4dCA9PSAidnNpeG1hbmlmZXN0IikgewogICAgIHN1YlR5cGUgPSAiRGVzaWduZXIiOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBjID0gc2YtPkdldFByb3BlcnR5KCJWU19DT1BZX1RPX09VVF9ESVIiKSkgeworICBpZiAoY21Qcm9wIGMgPSBzZi0+R2V0UHJvcGVydHkoIlZTX0NPUFlfVE9fT1VUX0RJUiIpKSB7CiAgICAgdG9vbCA9ICJDb250ZW50IjsKLSAgICBjb3B5VG9PdXREaXIgPSBjOworICAgIGNvcHlUb091dERpciA9ICpjOwogICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CiAgIH0KICAgaWYgKHNmLT5HZXRQcm9wZXJ0eUFzQm9vbCgiVlNfSU5DTFVERV9JTl9WU0lYIikpIHsKQEAgLTE5MjMsMzIgKzE5NzUsNzkgQEAKICAgICB9CiAgIH0KIAotICBjb25zdCBjaGFyKiB0b29sT3ZlcnJpZGUgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1RPT0xfT1ZFUlJJREUiKTsKLSAgaWYgKHRvb2xPdmVycmlkZSAmJiAqdG9vbE92ZXJyaWRlKSB7Ci0gICAgdG9vbCA9IHRvb2xPdmVycmlkZTsKKyAgY21Qcm9wIHRvb2xPdmVycmlkZSA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfVE9PTF9PVkVSUklERSIpOworICBpZiAoY21Ob25lbXB0eSh0b29sT3ZlcnJpZGUpKSB7CisgICAgdG9vbCA9IHRvb2xPdmVycmlkZS0+Y19zdHIoKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGRlcGxveUNvbnRlbnQ7CiAgIHN0ZDo6c3RyaW5nIGRlcGxveUxvY2F0aW9uOwogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1Bob25lKCkgfHwKICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NTdG9yZSgpKSB7Ci0gICAgY29uc3QgY2hhciogY29udGVudCA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfREVQTE9ZTUVOVF9DT05URU5UIik7Ci0gICAgaWYgKGNvbnRlbnQgJiYgKmNvbnRlbnQpIHsKKyAgICBjbVByb3AgY29udGVudCA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfREVQTE9ZTUVOVF9DT05URU5UIik7CisgICAgaWYgKGNtTm9uZW1wdHkoY29udGVudCkpIHsKICAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7Ci0gICAgICBkZXBsb3lDb250ZW50ID0gY29udGVudDsKKyAgICAgIGRlcGxveUNvbnRlbnQgPSAqY29udGVudDsKIAotICAgICAgY29uc3QgY2hhciogbG9jYXRpb24gPSBzZi0+R2V0UHJvcGVydHkoIlZTX0RFUExPWU1FTlRfTE9DQVRJT04iKTsKLSAgICAgIGlmIChsb2NhdGlvbiAmJiAqbG9jYXRpb24pIHsKLSAgICAgICAgZGVwbG95TG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAgIGNtUHJvcCBsb2NhdGlvbiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfREVQTE9ZTUVOVF9MT0NBVElPTiIpOworICAgICAgaWYgKGNtTm9uZW1wdHkobG9jYXRpb24pKSB7CisgICAgICAgIGRlcGxveUxvY2F0aW9uID0gKmxvY2F0aW9uOwogICAgICAgfQogICAgIH0KICAgfQogCisgIGlmIChQYXJzZWRUb29sVGFyZ2V0U2V0dGluZ3MuZmluZCh0b29sKSA9PSBQYXJzZWRUb29sVGFyZ2V0U2V0dGluZ3MuZW5kKCkpIHsKKyAgICBjbVByb3AgdG9vbFRhcmdldFByb3BlcnR5ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnR5KAorICAgICAgIlZTX1NPVVJDRV9TRVRUSU5HU18iICsgc3RkOjpzdHJpbmcodG9vbCkpOworICAgIENvbmZpZ1RvU2V0dGluZ3MgdG9vbFRhcmdldFNldHRpbmdzOworICAgIGlmICh0b29sVGFyZ2V0UHJvcGVydHkpIHsKKyAgICAgIFBhcnNlU2V0dGluZ3NQcm9wZXJ0eSgqdG9vbFRhcmdldFByb3BlcnR5LCB0b29sVGFyZ2V0U2V0dGluZ3MpOworICAgIH0KKworICAgIFBhcnNlZFRvb2xUYXJnZXRTZXR0aW5nc1t0b29sXSA9IHRvb2xUYXJnZXRTZXR0aW5nczsKKyAgfQorCisgIGZvciAoY29uc3QgYXV0byYgY29uZmlnVG9TZXR0aW5nIDogUGFyc2VkVG9vbFRhcmdldFNldHRpbmdzW3Rvb2xdKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXR0aW5nIDogY29uZmlnVG9TZXR0aW5nLnNlY29uZCkgeworICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ1RvU2V0dGluZy5maXJzdF1bc2V0dGluZy5maXJzdF0gPSBzZXR0aW5nLnNlY29uZDsKKyAgICB9CisgIH0KKworICBpZiAoY21Qcm9wIHAgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NFVFRJTkdTIikpIHsKKyAgICBQYXJzZVNldHRpbmdzUHJvcGVydHkoKnAsIHRvb2xTZXR0aW5ncyk7CisgIH0KKworICBpZiAoIXRvb2xTZXR0aW5ncy5lbXB0eSgpKSB7CisgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgfQorCiAgIEVsZW0gZTIoZTEsIHRvb2wpOwogICB0aGlzLT5Xcml0ZVNvdXJjZShlMiwgc2YpOwogICBpZiAodG9vbEhhc1NldHRpbmdzKSB7CiAgICAgZTIuU2V0SGFzRWxlbWVudHMoKTsKIAorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB3cml0dGVuU2V0dGluZ3M7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb25maWdTZXR0aW5ncyA6IHRvb2xTZXR0aW5ncykgeworICAgICAgZm9yIChjb25zdCBhdXRvJiBzZXR0aW5nIDogY29uZmlnU2V0dGluZ3Muc2Vjb25kKSB7CisKKyAgICAgICAgaWYgKHN0ZDo6ZmluZCh3cml0dGVuU2V0dGluZ3MuYmVnaW4oKSwgd3JpdHRlblNldHRpbmdzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuZmlyc3QpICE9IHdyaXR0ZW5TZXR0aW5ncy5lbmQoKSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFByb3BlcnR5SXNTYW1lSW5BbGxDb25maWdzKHRvb2xTZXR0aW5ncywgc2V0dGluZy5maXJzdCkpIHsKKyAgICAgICAgICBlMi5FbGVtZW50KHNldHRpbmcuZmlyc3QsIHNldHRpbmcuc2Vjb25kKTsKKyAgICAgICAgICB3cml0dGVuU2V0dGluZ3MucHVzaF9iYWNrKHNldHRpbmcuZmlyc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGUyLldyaXRlUGxhdGZvcm1Db25maWdUYWcoc2V0dGluZy5maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSciICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnU2V0dGluZ3MuZmlyc3QgKyAifCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5QbGF0Zm9ybSArICInIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuc2Vjb25kKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAgIGlmICghZGVwbG95Q29udGVudC5lbXB0eSgpKSB7CiAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7CiAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9CkBAIC0xOTc0LDgyICsyMDczLDEzIEBACiAgICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFzaGFkZXJUeXBlLmVtcHR5KCkpIHsKLSAgICAgIGUyLkVsZW1lbnQoIlNoYWRlclR5cGUiLCBzaGFkZXJUeXBlKTsKLSAgICB9Ci0gICAgaWYgKCFzaGFkZXJFbnRyeVBvaW50LmVtcHR5KCkpIHsKLSAgICAgIGUyLkVsZW1lbnQoIkVudHJ5UG9pbnROYW1lIiwgc2hhZGVyRW50cnlQb2ludCk7Ci0gICAgfQotICAgIGlmICghc2hhZGVyTW9kZWwuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiU2hhZGVyTW9kZWwiLCBzaGFkZXJNb2RlbCk7Ci0gICAgfQotICAgIGlmICghb3V0cHV0SGVhZGVyRmlsZS5lbXB0eSgpKSB7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSB0aGlzLT5Db25maWd1cmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBlMi5Xcml0ZVBsYXRmb3JtQ29uZmlnVGFnKCJIZWFkZXJGaWxlT3V0cHV0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSArICJ8IiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5QbGF0Zm9ybSArICInIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRIZWFkZXJGaWxlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCF2YXJpYWJsZU5hbWUuZW1wdHkoKSkgewotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gdGhpcy0+Q29uZmlndXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZTIuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZygiVmFyaWFibGVOYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSArICJ8IiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5QbGF0Zm9ybSArICInIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoIXNoYWRlckVuYWJsZURlYnVnLmVtcHR5KCkpIHsKLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0KLSAgICAgICAgZ2UuUGFyc2Uoc2hhZGVyRW5hYmxlRGVidWcpOwogCi0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSB0aGlzLT5Db25maWd1cmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZW5hYmxlRGVidWcgPQotICAgICAgICAgIGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkNvbmZpZ3VyYXRpb25zW2ldKTsKLSAgICAgICAgaWYgKCFlbmFibGVEZWJ1Zy5lbXB0eSgpKSB7Ci0gICAgICAgICAgZTIuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZygiRW5hYmxlRGVidWdnaW5nSW5mb3JtYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09JyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSArICJ8IiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlBsYXRmb3JtICsgIiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Jc09uKGVuYWJsZURlYnVnKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghc2hhZGVyRGlzYWJsZU9wdGltaXphdGlvbnMuZW1wdHkoKSkgewotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlOwotICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPQotICAgICAgICBnZS5QYXJzZShzaGFkZXJEaXNhYmxlT3B0aW1pemF0aW9ucyk7Ci0KLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHRoaXMtPkNvbmZpZ3VyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXNhYmxlT3B0aW1pemF0aW9ucyA9Ci0gICAgICAgICAgY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+Q29uZmlndXJhdGlvbnNbaV0pOwotICAgICAgICBpZiAoIWRpc2FibGVPcHRpbWl6YXRpb25zLmVtcHR5KCkpIHsKLSAgICAgICAgICBlMi5Xcml0ZVBsYXRmb3JtQ29uZmlnVGFnKAotICAgICAgICAgICAgIkRpc2FibGVPcHRpbWl6YXRpb25zIiwKLSAgICAgICAgICAgICInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSciICsgdGhpcy0+Q29uZmlndXJhdGlvbnNbaV0gKwotICAgICAgICAgICAgICAifCIgKyB0aGlzLT5QbGF0Zm9ybSArICInIiwKLSAgICAgICAgICAgIChjbUlzT24oZGlzYWJsZU9wdGltaXphdGlvbnMpID8gInRydWUiIDogImZhbHNlIikpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghc2hhZGVyT2JqZWN0RmlsZU5hbWUuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiT2JqZWN0RmlsZU91dHB1dCIsIHNoYWRlck9iamVjdEZpbGVOYW1lKTsKLSAgICB9Ci0gICAgaWYgKCFzaGFkZXJBZGRpdGlvbmFsRmxhZ3MuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiQWRkaXRpb25hbE9wdGlvbnMiLCBzaGFkZXJBZGRpdGlvbmFsRmxhZ3MpOwotICAgIH0KICAgICBpZiAoIXNldHRpbmdzR2VuZXJhdG9yLmVtcHR5KCkpIHsKICAgICAgIGUyLkVsZW1lbnQoIkdlbmVyYXRvciIsIHNldHRpbmdzR2VuZXJhdG9yKTsKICAgICB9CiAgICAgaWYgKCFzZXR0aW5nc0xhc3RHZW5PdXRwdXQuZW1wdHkoKSkgewogICAgICAgZTIuRWxlbWVudCgiTGFzdEdlbk91dHB1dCIsIHNldHRpbmdzTGFzdEdlbk91dHB1dCk7CiAgICAgfQotICAgIGlmICghc291cmNlTGluay5lbXB0eSgpKSB7Ci0gICAgICBlMi5FbGVtZW50KCJMaW5rIiwgc291cmNlTGluayk7Ci0gICAgfQogICAgIGlmICghc3ViVHlwZS5lbXB0eSgpKSB7CiAgICAgICBlMi5FbGVtZW50KCJTdWJUeXBlIiwgc3ViVHlwZSk7CiAgICAgfQpAQCAtMjEwMiw2ICsyMTMyLDIwIEBACiAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChzb3VyY2VGaWxlKTsKICAgZTIuQXR0cmlidXRlKCJJbmNsdWRlIiwgc291cmNlRmlsZSk7CiAKKyAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJiAhdGhpcy0+SW5Tb3VyY2VCdWlsZCkgeworICAgIC8vIEZvciBvdXQgb2Ygc291cmNlIHByb2plY3RzIHdlIGhhdmUgdG8gcHJvdmlkZSBhIGxpbmsgKGlmIG5vdCBzcGVjaWZpZWQKKyAgICAvLyB2aWEgcHJvcGVydHkpIGZvciBldmVyeSBzb3VyY2UgZmlsZSAoYmVzaWRlcyAuY3MgZmlsZXMpIG90aGVyd2lzZSB0aGV5CisgICAgLy8gd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBWUyBhdCBhbGwuCisgICAgLy8gRmlyc3Qgd2UgY2hlY2sgaWYgdGhlIGZpbGUgaXMgaW4gYSBzb3VyY2UgZ3JvdXAsIHRoZW4gd2UgY2hlY2sgaWYgdGhlCisgICAgLy8gZmlsZSBwYXRoIGlzIHJlbGF0aXZlIHRvIGN1cnJlbnQgc291cmNlLSBvciBiaW5hcnktZGlyLCBvdGhlcndpc2UgaXQgaXMKKyAgICAvLyBhZGRlZCB3aXRoIHRoZSBwbGFpbiBmaWxlbmFtZSB3aXRob3V0IGFueSBwYXRoLiBUaGlzIG1lYW5zIHRoZSBmaWxlIHdpbGwKKyAgICAvLyBzaG93IHVwIGF0IHJvb3QtbGV2ZWwgb2YgdGhlIGNzcHJvaiAod2hlcmUgQ01ha2VMaXN0cy50eHQgZXRjLiBhcmUpLgorICAgIHN0ZDo6c3RyaW5nIGxpbmsgPSB0aGlzLT5HZXRDU2hhcnBTb3VyY2VMaW5rKHNmKTsKKyAgICBpZiAobGluay5lbXB0eSgpKQorICAgICAgbGluayA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKHNmLT5HZXRGdWxsUGF0aCgpKTsKKyAgICBlMi5FbGVtZW50KCJMaW5rIiwgbGluayk7CisgIH0KKwogICBUb29sU291cmNlIHRvb2xTb3VyY2UgPSB7IHNmLCBmb3JjZVJlbGF0aXZlIH07CiAgIHRoaXMtPlRvb2xzW2UyLlRhZ10ucHVzaF9iYWNrKHRvb2xTb3VyY2UpOwogfQpAQCAtMjIwMiwxMCArMjI0NiwxMCBAQAogICAgICAgICB9CiAgICAgICB9IGJyZWFrOwogICAgICAgY2FzZSBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlS2luZFJlc3g6Ci0gICAgICAgIC8vIEhhbmRsZWQgZWxzZXdoZXJlLgorICAgICAgICB0aGlzLT5SZXN4T2Jqcy5wdXNoX2JhY2soc2kuU291cmNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kWGFtbDoKLSAgICAgICAgLy8gSGFuZGxlZCBlbHNld2hlcmUuCisgICAgICAgIHRoaXMtPlhhbWxPYmpzLnB1c2hfYmFjayhzaS5Tb3VyY2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIyNDUsNyArMjI4OSw3IEBACiAgICAgICAgICAgZTIuQXR0cmlidXRlKCJDdXN0b21Vbml0eUZpbGUiLCAidHJ1ZSIpOwogCiAgICAgICAgICAgc3RkOjpzdHJpbmcgdW5pdHlEaXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoCi0gICAgICAgICAgICBzaS5Tb3VyY2UtPkdldFByb3BlcnR5KCJVTklUWV9TT1VSQ0VfRklMRSIpKTsKKyAgICAgICAgICAgICpzaS5Tb3VyY2UtPkdldFByb3BlcnR5KCJVTklUWV9TT1VSQ0VfRklMRSIpKTsKICAgICAgICAgICBlMi5BdHRyaWJ1dGUoIlVuaXR5RmlsZXNEaXJlY3RvcnkiLCB1bml0eURpcik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgLy8gVmlzdWFsIFN0dWRpbyB2ZXJzaW9ucyBwcmlvciB0byAyMDE3IDE1LjggZG8gbm90IGtub3cgYWJvdXQgdW5pdHkKQEAgLTIyOTAsNDEgKzIzMzQsMzYgQEAKICAgYm9vbCBjb25maWdEZXBlbmRlbnREZWZpbmVzID0gZmFsc2U7CiAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzOwogICBib29sIGNvbmZpZ0RlcGVuZGVudEluY2x1ZGVzID0gZmFsc2U7Ci0gIGlmIChjb25zdCBjaGFyKiBjZmxhZ3MgPSBzZi5HZXRQcm9wZXJ0eSgiQ09NUElMRV9GTEFHUyIpKSB7CisgIGlmIChjbVByb3AgY2ZsYWdzID0gc2YuR2V0UHJvcGVydHkoIkNPTVBJTEVfRkxBR1MiKSkgewogICAgIGNvbmZpZ0RlcGVuZGVudEZsYWdzID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChjZmxhZ3MpICE9IHN0ZDo6c3RyaW5nOjpucG9zOwotICAgIGZsYWdzICs9IGNmbGFnczsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZCgqY2ZsYWdzKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICBmbGFncyArPSAqY2ZsYWdzOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBjb3B0aW9ucyA9IHNmLkdldFByb3BlcnR5KCJDT01QSUxFX09QVElPTlMiKSkgeworICBpZiAoY21Qcm9wIGNvcHRpb25zID0gc2YuR2V0UHJvcGVydHkoIkNPTVBJTEVfT1BUSU9OUyIpKSB7CiAgICAgY29uZmlnRGVwZW5kZW50T3B0aW9ucyA9Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoY29wdGlvbnMpICE9IHN0ZDo6c3RyaW5nOjpucG9zOwotICAgIG9wdGlvbnMgKz0gY29wdGlvbnM7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoKmNvcHRpb25zKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICBvcHRpb25zICs9ICpjb3B0aW9uczsKICAgfQotICBpZiAoY29uc3QgY2hhciogY2RlZnMgPSBzZi5HZXRQcm9wZXJ0eSgiQ09NUElMRV9ERUZJTklUSU9OUyIpKSB7CisgIGlmIChjbVByb3AgY2RlZnMgPSBzZi5HZXRQcm9wZXJ0eSgiQ09NUElMRV9ERUZJTklUSU9OUyIpKSB7CiAgICAgY29uZmlnRGVwZW5kZW50RGVmaW5lcyA9Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoY2RlZnMpICE9IHN0ZDo6c3RyaW5nOjpucG9zOwotICAgIGRlZmluZXMgKz0gY2RlZnM7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoKmNkZWZzKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICBkZWZpbmVzICs9ICpjZGVmczsKICAgfQotICBpZiAoY29uc3QgY2hhciogY2luY2x1ZGVzID0gc2YuR2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKSkgeworICBpZiAoY21Qcm9wIGNpbmNsdWRlcyA9IHNmLkdldFByb3BlcnR5KCJJTkNMVURFX0RJUkVDVE9SSUVTIikpIHsKICAgICBjb25maWdEZXBlbmRlbnRJbmNsdWRlcyA9Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoY2luY2x1ZGVzKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKLSAgICBpbmNsdWRlcyArPSBjaW5jbHVkZXM7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoKmNpbmNsdWRlcykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgaW5jbHVkZXMgKz0gKmNpbmNsdWRlczsKICAgfQotICBzdGQ6OnN0cmluZyBsYW5nID0KLSAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExhbmd1YWdlRnJvbUV4dGVuc2lvbihzZi5HZXRFeHRlbnNpb24oKS5jX3N0cigpKTsKLSAgc3RkOjpzdHJpbmcgc291cmNlTGFuZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTb3VyY2VGaWxlTGFuZ3VhZ2Uoc2YpOwotICBjb25zdCBzdGQ6OnN0cmluZyYgbGlua0xhbmd1YWdlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKCIiKTsKLSAgYm9vbCBuZWVkRm9yY2VMYW5nID0gZmFsc2U7Ci0gIC8vIHNvdXJjZSBmaWxlIGRvZXMgbm90IG1hdGNoIGl0cyBleHRlbnNpb24gbGFuZ3VhZ2UKLSAgaWYgKGxhbmcgIT0gc291cmNlTGFuZykgewotICAgIG5lZWRGb3JjZUxhbmcgPSB0cnVlOwotICAgIGxhbmcgPSBzb3VyY2VMYW5nOwotICB9Ci0gIC8vIGlmIHRoZSBzb3VyY2UgZmlsZSBkb2VzIG5vdCBtYXRjaCB0aGUgbGlua2VyIGxhbmd1YWdlCi0gIC8vIHRoZW4gZm9yY2UgYyBvciBjKysKKworICAvLyBGb3JjZSBsYW5ndWFnZSBpZiB0aGUgZmlsZSBleHRlbnNpb24gZG9lcyBub3QgbWF0Y2guCisgIC8vIE5vdGUgdGhhdCBNU1ZDIHRyZWF0cyB0aGUgdXBwZXItY2FzZSAnLkMnIGV4dGVuc2lvbiBhcyBDIGFuZCBub3QgQysrLgorICBzdGQ6OnN0cmluZyBjb25zdCBleHQgPSBzZi5HZXRFeHRlbnNpb24oKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QgZXh0TGFuZyA9IGV4dCA9PSAiQyIKKyAgICA/ICJDIgorICAgIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMYW5ndWFnZUZyb21FeHRlbnNpb24oZXh0LmNfc3RyKCkpOworICBzdGQ6OnN0cmluZyBsYW5nID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFNvdXJjZUZpbGVMYW5ndWFnZShzZik7CiAgIGNvbnN0IGNoYXIqIGNvbXBpbGVBcyA9IDA7Ci0gIGlmIChuZWVkRm9yY2VMYW5nIHx8IChsaW5rTGFuZ3VhZ2UgIT0gbGFuZykpIHsKKyAgaWYgKGxhbmcgIT0gZXh0TGFuZykgewogICAgIGlmIChsYW5nID09ICJDWFgiKSB7CiAgICAgICAvLyBmb3JjZSBhIEMrKyBmaWxlIHR5cGUKICAgICAgIGNvbXBpbGVBcyA9ICJDb21waWxlQXNDcHAiOwpAQCAtMjMzMyw2ICsyMzcyLDcgQEAKICAgICAgIGNvbXBpbGVBcyA9ICJDb21waWxlQXNDIjsKICAgICB9CiAgIH0KKwogICBib29sIG5vV2luUlQgPSB0aGlzLT5UYXJnZXRDb21waWxlQXNXaW5SVCAmJiBsYW5nID09ICJDIjsKICAgLy8gZm9yIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgYSBuZXcgbGluZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcKICAgLy8gcHJvZHVjZWQgaGVyZS4KQEAgLTIzNDcsMTMgKzIzODcsMTMgQEAKICAgICBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ0RlZmluZXMgPSBkZWZpbmVzOwogICAgIHN0ZDo6c3RyaW5nIGRlZlByb3BOYW1lID0gY21TdHJDYXQoIkNPTVBJTEVfREVGSU5JVElPTlNfIiwgY29uZmlnVXBwZXIpOwotICAgIGlmIChjb25zdCBjaGFyKiBjY2RlZnMgPSBzZi5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKKyAgICBpZiAoY21Qcm9wIGNjZGVmcyA9IHNmLkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgewogICAgICAgaWYgKCFjb25maWdEZWZpbmVzLmVtcHR5KCkpIHsKICAgICAgICAgY29uZmlnRGVmaW5lcyArPSAiOyI7CiAgICAgICB9CiAgICAgICBjb25maWdEZXBlbmRlbnREZWZpbmVzIHw9Ci0gICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChjY2RlZnMpICE9IHN0ZDo6c3RyaW5nOjpucG9zOwotICAgICAgY29uZmlnRGVmaW5lcyArPSBjY2RlZnM7CisgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZCgqY2NkZWZzKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgIGNvbmZpZ0RlZmluZXMgKz0gKmNjZGVmczsKICAgICB9CiAKICAgICAvLyBBZGQgcHJlY29tcGlsZSBoZWFkZXJzIGNvbXBpbGUgb3B0aW9ucy4KQEAgLTI0NTQsMTkgKzI0OTQsMTMgQEAKICAgfQogICBpZiAodGhpcy0+SXNYYW1sU291cmNlKHNvdXJjZS0+R2V0RnVsbFBhdGgoKSkpIHsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUgPSBzb3VyY2UtPkdldEZ1bGxQYXRoKCk7Ci0gICAgc3RkOjpzdHJpbmcgeGFtbEZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmZpbmRfbGFzdF9vZigiLiIpKTsKLSAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwgeGFtbEZpbGVOYW1lKTsKKyAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwKKyAgICAgICAgICAgICAgIGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5maW5kX2xhc3Rfb2YoIi4iKSkpOwogICB9CiAgIGlmICh0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2opIHsKICAgICBzdGQ6OnN0cmluZyBmID0gc291cmNlLT5HZXRGdWxsUGF0aCgpOwogICAgIHVzaW5nIENzUHJvcE1hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz47CiAgICAgQ3NQcm9wTWFwIHNvdXJjZUZpbGVUYWdzOwotICAgIC8vIHNldCA8TGluaz4gdGFnIGlmIG5lY2Vzc2FyeQotICAgIHN0ZDo6c3RyaW5nIGxpbms7Ci0gICAgdGhpcy0+R2V0Q1NoYXJwU291cmNlTGluayhzb3VyY2UsIGxpbmspOwotICAgIGlmICghbGluay5lbXB0eSgpKSB7Ci0gICAgICBzb3VyY2VGaWxlVGFnc1siTGluayJdID0gbGluazsKLSAgICB9CiAgICAgdGhpcy0+R2V0Q1NoYXJwU291cmNlUHJvcGVydGllcygmc2YsIHNvdXJjZUZpbGVUYWdzKTsKICAgICAvLyB3cml0ZSBzb3VyY2UgZmlsZSBzcGVjaWZpYyB0YWdzCiAgICAgaWYgKCFzb3VyY2VGaWxlVGFncy5lbXB0eSgpKSB7CkBAIC0yNTA0LDM0ICsyNTM4LDM0IEBACiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgY29uZCA9IHRoaXMtPkNhbGNDb25kaXRpb24oY29uZmlnKTsKIAogICAgIGlmICh0dHlwZSA8PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKLSAgICAgIGlmIChjb25zdCBjaGFyKiB3b3JraW5nRGlyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKKyAgICAgIGlmIChjbVByb3Agd29ya2luZ0RpciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgICAgICAgICAiVlNfREVCVUdHRVJfV09SS0lOR19ESVJFQ1RPUlkiKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBnZW5Xb3JraW5nRGlyID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICB3b3JraW5nRGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKyAgICAgICAgICAqd29ya2luZ0RpciwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CiAgICAgICAgIGUxLldyaXRlUGxhdGZvcm1Db25maWdUYWcoIkxvY2FsRGVidWdnZXJXb3JraW5nRGlyZWN0b3J5IiwgY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5Xb3JraW5nRGlyKTsKICAgICAgIH0KIAotICAgICAgaWYgKGNvbnN0IGNoYXIqIGVudmlyb25tZW50ID0KKyAgICAgIGlmIChjbVByb3AgZW52aXJvbm1lbnQgPQogICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQiKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBnZW5FbnZpcm9ubWVudCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgICAgZW52aXJvbm1lbnQsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcpOworICAgICAgICAgICplbnZpcm9ubWVudCwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CiAgICAgICAgIGUxLldyaXRlUGxhdGZvcm1Db25maWdUYWcoIkxvY2FsRGVidWdnZXJFbnZpcm9ubWVudCIsIGNvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuRW52aXJvbm1lbnQpOwogICAgICAgfQogCi0gICAgICBpZiAoY29uc3QgY2hhciogZGVidWdnZXJDb21tYW5kID0KKyAgICAgIGlmIChjbVByb3AgZGVidWdnZXJDb21tYW5kID0KICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0RFQlVHR0VSX0NPTU1BTkQiKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBnZW5EZWJ1Z2dlckNvbW1hbmQgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICAgICAgICAgIGRlYnVnZ2VyQ29tbWFuZCwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisgICAgICAgICAgKmRlYnVnZ2VyQ29tbWFuZCwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CiAgICAgICAgIGUxLldyaXRlUGxhdGZvcm1Db25maWdUYWcoIkxvY2FsRGVidWdnZXJDb21tYW5kIiwgY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5EZWJ1Z2dlckNvbW1hbmQpOwogICAgICAgfQogCi0gICAgICBpZiAoY29uc3QgY2hhciogY29tbWFuZEFyZ3VtZW50cyA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCisgICAgICBpZiAoY21Qcm9wIGNvbW1hbmRBcmd1bWVudHMgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAogICAgICAgICAgICAgIlZTX0RFQlVHR0VSX0NPTU1BTkRfQVJHVU1FTlRTIikpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgZ2VuQ29tbWFuZEFyZ3VtZW50cyA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgICAgY29tbWFuZEFyZ3VtZW50cywgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisgICAgICAgICAgKmNvbW1hbmRBcmd1bWVudHMsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcpOwogICAgICAgICBlMS5Xcml0ZVBsYXRmb3JtQ29uZmlnVGFnKCJMb2NhbERlYnVnZ2VyQ29tbWFuZEFyZ3VtZW50cyIsIGNvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuQ29tbWFuZEFyZ3VtZW50cyk7CiAgICAgICB9CkBAIC0yNzE2LDcgKzI3NTAsNyBAQAogICBzdGQ6OnN0cmluZyBsYW5nRm9yQ2xDb21waWxlOwogICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qKSB7CiAgICAgbGFuZ0ZvckNsQ29tcGlsZSA9ICJDU2hhcnAiOwotICB9IGVsc2UgaWYgKGNtQ29udGFpbnMoY2xMYW5ncywgbGlua0xhbmd1YWdlKSkgeworICB9IGVsc2UgaWYgKGNtOjpjb250YWlucyhjbExhbmdzLCBsaW5rTGFuZ3VhZ2UpKSB7CiAgICAgbGFuZ0ZvckNsQ29tcGlsZSA9IGxpbmtMYW5ndWFnZTsKICAgfSBlbHNlIHsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VzOwpAQCAtMjczNSwxMyArMjc2OSw2IEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENvbXBpbGVPcHRpb25zKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdGb3JDbENvbXBpbGUsIGNvbmZpZ05hbWUpOwogICB9Ci0gIC8vIHNldCB0aGUgY29ycmVjdCBsYW5ndWFnZQotICBpZiAobGlua0xhbmd1YWdlID09ICJDIikgewotICAgIGNsT3B0aW9ucy5BZGRGbGFnKCJDb21waWxlQXMiLCAiQ29tcGlsZUFzQyIpOwotICB9Ci0gIGlmIChsaW5rTGFuZ3VhZ2UgPT0gIkNYWCIpIHsKLSAgICBjbE9wdGlvbnMuQWRkRmxhZygiQ29tcGlsZUFzIiwgIkNvbXBpbGVBc0NwcCIpOwotICB9CiAKICAgLy8gUHV0IHRoZSBJUE8gZW5hYmxlZCBjb25maWd1cmF0aW9ucyBpbnRvIGEgc2V0LgogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5Jc0lQT0VuYWJsZWQobGlua0xhbmd1YWdlLCBjb25maWdOYW1lKSkgewpAQCAtMjc5MSw5ICsyODE4LDkgQEAKICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6V0FSTklORywgbWVzc2FnZSk7CiAgICAgICB9CiAgICAgfQotICAgIGlmIChhdXRvKiBjbHIgPQorICAgIGlmIChjbVByb3AgY2xyID0KICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJDT01NT05fTEFOR1VBR0VfUlVOVElNRSIpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBjbHJTdHJpbmcgPSBjbHI7CisgICAgICBzdGQ6OnN0cmluZyBjbHJTdHJpbmcgPSAqY2xyOwogICAgICAgaWYgKCFjbHJTdHJpbmcuZW1wdHkoKSkgewogICAgICAgICBjbHJTdHJpbmcgPSAiOiIgKyBjbHJTdHJpbmc7CiAgICAgICB9CkBAIC0yOTExLDEzICsyOTM4LDE1IEBACiAgIG9oLk91dHB1dFByZXByb2Nlc3NvckRlZmluaXRpb25zKHRoaXMtPkxhbmdGb3JDbENvbXBpbGUpOwogCiAgIGlmICh0aGlzLT5Oc2lnaHRUZWdyYSkgewotICAgIGlmIChjb25zdCBjaGFyKiBwcm9jZXNzTWF4ID0KKyAgICBpZiAoY21Qcm9wIHByb2Nlc3NNYXggPQogICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkFORFJPSURfUFJPQ0VTU19NQVgiKSkgewotICAgICAgZTIuRWxlbWVudCgiUHJvY2Vzc01heCIsIHByb2Nlc3NNYXgpOworICAgICAgZTIuRWxlbWVudCgiUHJvY2Vzc01heCIsICpwcm9jZXNzTWF4KTsKICAgICB9CiAgIH0KIAotICBpZiAodGhpcy0+TVNUb29scykgeworICBpZiAodGhpcy0+QW5kcm9pZCkgeworICAgIGUyLkVsZW1lbnQoIk9iamVjdEZpbGVOYW1lIiwgIiQoSW50RGlyKSUoZmlsZW5hbWUpLm8iKTsKKyAgfSBlbHNlIGlmICh0aGlzLT5NU1Rvb2xzKSB7CiAgICAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIGNsYW5nVG9vbHNldCgidlswLTldK19jbGFuZ18uKiIpOwogICAgIGNvbnN0IGNoYXIqIHRvb2xzZXQgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFBsYXRmb3JtVG9vbHNldCgpOwogICAgIGlmICh0b29sc2V0ICYmIGNsYW5nVG9vbHNldC5maW5kKHRvb2xzZXQpKSB7CkBAIC0zMTQyLDYgKzMxNzEsMTcgQEAKICAgY3VkYU9wdGlvbnMuQWRkSW5jbHVkZXModGhpcy0+R2V0SW5jbHVkZXMoY29uZmlnTmFtZSwgIkNVREEiKSk7CiAgIGN1ZGFPcHRpb25zLkFkZEZsYWcoIlVzZUhvc3RJbmNsdWRlIiwgImZhbHNlIik7CiAKKyAgLy8gQWRkIHJ1bnRpbWUgbGlicmFyeSBzZWxlY3Rpb24gZmxhZy4KKyAgc3RkOjpzdHJpbmcgY29uc3QmIGN1ZGFSdW50aW1lID0KKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFJ1bnRpbWVMaW5rTGlicmFyeSgiQ1VEQSIsIGNvbmZpZ05hbWUpOworICBpZiAoY3VkYVJ1bnRpbWUgPT0gIlNUQVRJQyIpIHsKKyAgICBjdWRhT3B0aW9ucy5BZGRGbGFnKCJDdWRhUnVudGltZSIsICJTdGF0aWMiKTsKKyAgfSBlbHNlIGlmIChjdWRhUnVudGltZSA9PSAiU0hBUkVEIikgeworICAgIGN1ZGFPcHRpb25zLkFkZEZsYWcoIkN1ZGFSdW50aW1lIiwgIlNoYXJlZCIpOworICB9IGVsc2UgaWYgKGN1ZGFSdW50aW1lID09ICJOT05FIikgeworICAgIGN1ZGFPcHRpb25zLkFkZEZsYWcoIkN1ZGFSdW50aW1lIiwgIk5vbmUiKTsKKyAgfQorCiAgIHRoaXMtPkN1ZGFPcHRpb25zW2NvbmZpZ05hbWVdID0gc3RkOjptb3ZlKHBPcHRpb25zKTsKICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMTgyLDYgKzMyMjIsOCBAQAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBPcHRpb25zOjpDdWRhQ29tcGlsZXIsIGdnLT5HZXRDdWRhRmxhZ1RhYmxlKCkpOwogICBPcHRpb25zJiBjdWRhTGlua09wdGlvbnMgPSAqcE9wdGlvbnM7CiAKKyAgY21HZW5lcmF0b3JUYXJnZXQ6OkRldmljZUxpbmtTZXR0ZXIgc2V0dGVyKCp0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOworCiAgIC8vIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIGRvIGEgZGV2aWNlIGxpbmsKICAgY29uc3QgYm9vbCBkb0RldmljZUxpbmtpbmcgPSByZXF1aXJlRGV2aWNlTGlua2luZygKICAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUpOwpAQCAtMzE4OSwxMiArMzIzMSwyMCBAQAogICBjdWRhTGlua09wdGlvbnMuQWRkRmxhZygiUGVyZm9ybURldmljZUxpbmsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb0RldmljZUxpbmtpbmcgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKIAotICAvLyBTdXBwcmVzcyBkZXByZWNhdGlvbiB3YXJuaW5ncyBmb3IgZGVmYXVsdCBHUFUgdGFyZ2V0cyBkdXJpbmcgZGV2aWNlIGxpbmsuCi0gIGlmIChjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZUdyZWF0ZXJFcSgKLSAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRQbGF0Zm9ybVRvb2xzZXRDdWRhU3RyaW5nKCksICI4LjAiKSkgewotICAgIGN1ZGFMaW5rT3B0aW9ucy5BcHBlbmRGbGFnU3RyaW5nKCJBZGRpdGlvbmFsT3B0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1Xbm8tZGVwcmVjYXRlZC1ncHUtdGFyZ2V0cyIpOwotICB9CisgIC8vIEFkZCBleHRyYSBmbGFncyBmb3IgZGV2aWNlIGxpbmtpbmcKKyAgY3VkYUxpbmtPcHRpb25zLkFwcGVuZEZsYWdTdHJpbmcoCisgICAgIkFkZGl0aW9uYWxPcHRpb25zIiwKKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIl9DTUFLRV9DVURBX0VYVFJBX0ZMQUdTIikpOworICBjdWRhTGlua09wdGlvbnMuQXBwZW5kRmxhZ1N0cmluZygKKyAgICAiQWRkaXRpb25hbE9wdGlvbnMiLAorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiX0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1MiKSk7CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtPcHRzOworICBzdGQ6OnN0cmluZyBsaW5rRmxhZ3M7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua09wdGlvbnMobGlua09wdHMsIGNvbmZpZ05hbWUsICJDVURBIik7CisgIC8vIExJTktfT1BUSU9OUyBhcmUgZXNjYXBlZC4KKyAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZENvbXBpbGVPcHRpb25zKGxpbmtGbGFncywgbGlua09wdHMpOworICBjdWRhTGlua09wdGlvbnMuQXBwZW5kRmxhZ1N0cmluZygiQWRkaXRpb25hbE9wdGlvbnMiLCBsaW5rRmxhZ3MpOwogCiAgIC8vIEZvciBzdGF0aWMgbGlicmFyaWVzIHRoYXQgaGF2ZSBkZXZpY2UgbGlua2luZyBlbmFibGVkIGNvbXB1dGUKICAgLy8gdGhlICBsaWJyYXJpZXMKQEAgLTM0MTIsOSArMzQ2Miw4IEBACiAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rQ2xvc3VyZShjb25maWcpLT5MaW5rZXJMYW5ndWFnZTsKIAogICBzdGQ6OnN0cmluZyBsaWJmbGFnczsKLSAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRpY0xpYnJhcnlGbGFncygKLSAgICBsaWJmbGFncywgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyksIGxpbmtMYW5ndWFnZSwKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOworICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGljTGlicmFyeUZsYWdzKGxpYmZsYWdzLCBjb25maWcsIGxpbmtMYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOwogICBpZiAoIWxpYmZsYWdzLmVtcHR5KCkpIHsKICAgICBFbGVtIGUyKGUxLCAiTGliIik7CiAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvciogZ2cgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7CkBAIC0zNDQ5LDcgKzM0OTgsNyBAQAogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBtYW5pZmVzdF9zcmNzOwogICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE1hbmlmZXN0cyhtYW5pZmVzdF9zcmNzLCBjb25maWcpOwogCi0gIGNvbnN0IGNoYXIqIGRwaUF3YXJlID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfRFBJX0FXQVJFIik7CisgIGNtUHJvcCBkcGlBd2FyZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0RQSV9BV0FSRSIpOwogCiAgIGlmICghbWFuaWZlc3Rfc3Jjcy5lbXB0eSgpIHx8IGRwaUF3YXJlKSB7CiAgICAgRWxlbSBlMihlMSwgIk1hbmlmZXN0Iik7CkBAIC0zNDYzLDE1ICszNTEyLDE0IEBACiAgICAgICBlMi5FbGVtZW50KCJBZGRpdGlvbmFsTWFuaWZlc3RGaWxlcyIsIG9zcy5zdHIoKSk7CiAgICAgfQogICAgIGlmIChkcGlBd2FyZSkgewotICAgICAgaWYgKCFzdHJjbXAoZHBpQXdhcmUsICJQZXJNb25pdG9yIikpIHsKKyAgICAgIGlmICgqZHBpQXdhcmUgPT0gIlBlck1vbml0b3IiKSB7CiAgICAgICAgIGUyLkVsZW1lbnQoIkVuYWJsZURwaUF3YXJlbmVzcyIsICJQZXJNb25pdG9ySGlnaERQSUF3YXJlIik7Ci0gICAgICB9IGVsc2UgaWYgKGNtSXNPbihkcGlBd2FyZSkpIHsKKyAgICAgIH0gZWxzZSBpZiAoY21Jc09uKCpkcGlBd2FyZSkpIHsKICAgICAgICAgZTIuRWxlbWVudCgiRW5hYmxlRHBpQXdhcmVuZXNzIiwgInRydWUiKTsKLSAgICAgIH0gZWxzZSBpZiAoY21Jc09mZihkcGlBd2FyZSkpIHsKKyAgICAgIH0gZWxzZSBpZiAoY21Jc09mZigqZHBpQXdhcmUpKSB7CiAgICAgICAgIGUyLkVsZW1lbnQoIkVuYWJsZURwaUF3YXJlbmVzcyIsICJmYWxzZSIpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkJhZCBwYXJhbWV0ZXIgZm9yIFZTX0RQSV9BV0FSRTogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGRwaUF3YXJlKSk7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJCYWQgcGFyYW1ldGVyIGZvciBWU19EUElfQVdBUkU6ICIgKyAqZHBpQXdhcmUpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMzQ4NCwxMiArMzUzMiwxMiBAQAogICAvLyBpdHMgbG9jYXRpb24gYXMgdGhlIHJvb3Qgc291cmNlIGRpcmVjdG9yeS4KICAgc3RkOjpzdHJpbmcgcm9vdERpciA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCk7CiAgIHsKLSAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBleHRyYVNvdXJjZXM7Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHRyYVNvdXJjZXMoZXh0cmFTb3VyY2VzLCAiIik7Ci0gICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNpIDogZXh0cmFTb3VyY2VzKSB7Ci0gICAgICBpZiAoImFuZHJvaWRtYW5pZmVzdC54bWwiID09Ci0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHNpLT5HZXRMb2NhdGlvbigpLkdldE5hbWUoKSkpIHsKLSAgICAgICAgcm9vdERpciA9IHNpLT5HZXRMb2NhdGlvbigpLkdldERpcmVjdG9yeSgpOworICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZSBjb25zdCYgc291cmNlIDoKKyAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0QWxsQ29uZmlnU291cmNlcygpKSB7CisgICAgICBpZiAoc291cmNlLktpbmQgPT0gY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUtpbmRFeHRyYSAmJgorICAgICAgICAgICJhbmRyb2lkbWFuaWZlc3QueG1sIiA9PQorICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHNvdXJjZS5Tb3VyY2UtPkdldExvY2F0aW9uKCkuR2V0TmFtZSgpKSkgeworICAgICAgICByb290RGlyID0gc291cmNlLlNvdXJjZS0+R2V0TG9jYXRpb24oKS5HZXREaXJlY3RvcnkoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQpAQCAtMzUxMSw1MSArMzU1OSw1MSBAQAogICAgIGUyLkVsZW1lbnQoIkVuYWJsZVByb0d1YXJkIiwgInRydWUiKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBwcm9HdWFyZENvbmZpZ0xvY2F0aW9uID0KKyAgaWYgKGNtUHJvcCBwcm9HdWFyZENvbmZpZ0xvY2F0aW9uID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSCIpKSB7Ci0gICAgZTIuRWxlbWVudCgiUHJvR3VhcmRDb25maWdMb2NhdGlvbiIsIHByb0d1YXJkQ29uZmlnTG9jYXRpb24pOworICAgIGUyLkVsZW1lbnQoIlByb0d1YXJkQ29uZmlnTG9jYXRpb24iLCAqcHJvR3VhcmRDb25maWdMb2NhdGlvbik7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogc2VjdXJlUHJvcGVydGllc0xvY2F0aW9uID0KKyAgaWYgKGNtUHJvcCBzZWN1cmVQcm9wZXJ0aWVzTG9jYXRpb24gPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRIIikpIHsKLSAgICBlMi5FbGVtZW50KCJTZWN1cmVQcm9wZXJ0aWVzTG9jYXRpb24iLCBzZWN1cmVQcm9wZXJ0aWVzTG9jYXRpb24pOworICAgIGUyLkVsZW1lbnQoIlNlY3VyZVByb3BlcnRpZXNMb2NhdGlvbiIsICpzZWN1cmVQcm9wZXJ0aWVzTG9jYXRpb24pOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIG5hdGl2ZUxpYkRpcmVjdG9yaWVzRXhwcmVzc2lvbiA9CisgIGlmIChjbVByb3AgbmF0aXZlTGliRGlyZWN0b3JpZXNFeHByZXNzaW9uID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTIikpIHsKICAgICBzdGQ6OnN0cmluZyBuYXRpdmVMaWJEaXJzID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgIG5hdGl2ZUxpYkRpcmVjdG9yaWVzRXhwcmVzc2lvbiwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUpOworICAgICAgKm5hdGl2ZUxpYkRpcmVjdG9yaWVzRXhwcmVzc2lvbiwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUpOwogICAgIGUyLkVsZW1lbnQoIk5hdGl2ZUxpYkRpcmVjdG9yaWVzIiwgbmF0aXZlTGliRGlycyk7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogbmF0aXZlTGliRGVwZW5kZW5jaWVzRXhwcmVzc2lvbiA9CisgIGlmIChjbVByb3AgbmF0aXZlTGliRGVwZW5kZW5jaWVzRXhwcmVzc2lvbiA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgICAgICAgIkFORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMiKSkgewogICAgIHN0ZDo6c3RyaW5nIG5hdGl2ZUxpYkRlcHMgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICAgICAgbmF0aXZlTGliRGVwZW5kZW5jaWVzRXhwcmVzc2lvbiwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUpOworICAgICAgKm5hdGl2ZUxpYkRlcGVuZGVuY2llc0V4cHJlc3Npb24sIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKICAgICBlMi5FbGVtZW50KCJOYXRpdmVMaWJEZXBlbmRlbmNpZXMiLCBuYXRpdmVMaWJEZXBzKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBqYXZhU291cmNlRGlyID0KKyAgaWYgKGNtUHJvcCBqYXZhU291cmNlRGlyID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9KQVZBX1NPVVJDRV9ESVIiKSkgewotICAgIGUyLkVsZW1lbnQoIkphdmFTb3VyY2VEaXIiLCBqYXZhU291cmNlRGlyKTsKKyAgICBlMi5FbGVtZW50KCJKYXZhU291cmNlRGlyIiwgKmphdmFTb3VyY2VEaXIpOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGphckRpcmVjdG9yaWVzRXhwcmVzc2lvbiA9CisgIGlmIChjbVByb3AgamFyRGlyZWN0b3JpZXNFeHByZXNzaW9uID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMiKSkgewogICAgIHN0ZDo6c3RyaW5nIGphckRpcmVjdG9yaWVzID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgIGphckRpcmVjdG9yaWVzRXhwcmVzc2lvbiwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUpOworICAgICAgKmphckRpcmVjdG9yaWVzRXhwcmVzc2lvbiwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ05hbWUpOwogICAgIGUyLkVsZW1lbnQoIkphckRpcmVjdG9yaWVzIiwgamFyRGlyZWN0b3JpZXMpOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGphckRlcHMgPQorICBpZiAoY21Qcm9wIGphckRlcHMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0pBUl9ERVBFTkRFTkNJRVMiKSkgewotICAgIGUyLkVsZW1lbnQoIkphckRlcGVuZGVuY2llcyIsIGphckRlcHMpOworICAgIGUyLkVsZW1lbnQoIkphckRlcGVuZGVuY2llcyIsICpqYXJEZXBzKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBhc3NldHNEaXJlY3RvcmllcyA9CisgIGlmIChjbVByb3AgYXNzZXRzRGlyZWN0b3JpZXMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FTU0VUU19ESVJFQ1RPUklFUyIpKSB7Ci0gICAgZTIuRWxlbWVudCgiQXNzZXRzRGlyZWN0b3JpZXMiLCBhc3NldHNEaXJlY3Rvcmllcyk7CisgICAgZTIuRWxlbWVudCgiQXNzZXRzRGlyZWN0b3JpZXMiLCAqYXNzZXRzRGlyZWN0b3JpZXMpOwogICB9CiAKICAgewpAQCAtMzU2NCwxMCArMzYxMiwxMCBAQAogICAgIGUyLkVsZW1lbnQoIkFuZHJvaWRNYW5pZmVzdExvY2F0aW9uIiwgbWFuaWZlc3RfeG1sKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBhbnRBZGRpdGlvbmFsT3B0aW9ucyA9CisgIGlmIChjbVByb3AgYW50QWRkaXRpb25hbE9wdGlvbnMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMiKSkgewogICAgIGUyLkVsZW1lbnQoIkFkZGl0aW9uYWxPcHRpb25zIiwKLSAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGFudEFkZGl0aW9uYWxPcHRpb25zKSArICIgJShBZGRpdGlvbmFsT3B0aW9ucykiKTsKKyAgICAgICAgICAgICAgICphbnRBZGRpdGlvbmFsT3B0aW9ucyArICIgJShBZGRpdGlvbmFsT3B0aW9ucykiKTsKICAgfQogfQogCkBAIC0zNjE5LDE3ICszNjY3LDE1IEBACiAgIHN0ZDo6c3RyaW5nIGxpbmtGbGFnVmFyID0gbGlua0ZsYWdWYXJCYXNlICsgIl8iICsgQ09ORklHOwogICBmbGFncyArPSAiICI7CiAgIGZsYWdzICs9IHRoaXMtPk1ha2VmaWxlLT5HZXRSZXF1aXJlZERlZmluaXRpb24obGlua0ZsYWdWYXIpOwotICBjb25zdCBjaGFyKiB0YXJnZXRMaW5rRmxhZ3MgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfRkxBR1MiKTsKKyAgY21Qcm9wIHRhcmdldExpbmtGbGFncyA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfRkxBR1MiKTsKICAgaWYgKHRhcmdldExpbmtGbGFncykgewogICAgIGZsYWdzICs9ICIgIjsKLSAgICBmbGFncyArPSB0YXJnZXRMaW5rRmxhZ3M7CisgICAgZmxhZ3MgKz0gKnRhcmdldExpbmtGbGFnczsKICAgfQogICBzdGQ6OnN0cmluZyBmbGFnc1Byb3AgPSBjbVN0ckNhdCgiTElOS19GTEFHU18iLCBDT05GSUcpOwotICBpZiAoY29uc3QgY2hhciogZmxhZ3NDb25maWcgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGZsYWdzUHJvcCkpIHsKKyAgaWYgKGNtUHJvcCBmbGFnc0NvbmZpZyA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoZmxhZ3NQcm9wKSkgewogICAgIGZsYWdzICs9ICIgIjsKLSAgICBmbGFncyArPSBmbGFnc0NvbmZpZzsKKyAgICBmbGFncyArPSAqZmxhZ3NDb25maWc7CiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0czsKQEAgLTM2NTAsMTAgKzM2OTYsNiBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGliVmVjOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdnNUYXJnZXRWZWM7CiAgIHRoaXMtPkFkZExpYnJhcmllcyhjbGksIGxpYlZlYywgdnNUYXJnZXRWZWMsIGNvbmZpZyk7Ci0gIGlmIChjbUNvbnRhaW5zKGxpbmtDbG9zdXJlLT5MYW5ndWFnZXMsICJDVURBIikgJiYKLSAgICAgIHRoaXMtPkN1ZGFPcHRpb25zW2NvbmZpZ10gIT0gbnVsbHB0cikgewotICAgIHRoaXMtPkN1ZGFPcHRpb25zW2NvbmZpZ10tPkZpeEN1ZGFSdW50aW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldCk7Ci0gIH0KICAgc3RkOjpzdHJpbmcgc3RhbmRhcmRMaWJzVmFyID0KICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX1NUQU5EQVJEX0xJQlJBUklFUyIpOwogICBzdGQ6OnN0cmluZyBjb25zdCYgbGlicyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihzdGFuZGFyZExpYnNWYXIpOwpAQCAtMzkyNCw3ICszOTY2LDcgQEAKIHsKICAgZm9yIChUYXJnZXRzRmlsZUFuZENvbmZpZ3MmIGkgOiB0aGlzLT5UYXJnZXRzRmlsZUFuZENvbmZpZ3NWZWMpIHsKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6Q29tcGFyZVBhdGgodGFyZ2V0c0ZpbGUsIGkuRmlsZSkpIHsKLSAgICAgIGlmICghY21Db250YWlucyhpLkNvbmZpZ3MsIGNvbmZpZykpIHsKKyAgICAgIGlmICghY206OmNvbnRhaW5zKGkuQ29uZmlncywgY29uZmlnKSkgewogICAgICAgICBpLkNvbmZpZ3MucHVzaF9iYWNrKGNvbmZpZyk7CiAgICAgICB9CiAgICAgICByZXR1cm47CkBAIC00MDEwLDggKzQwNTIsNyBAQAogICAgIC8vICAgIG91dHB1dCBtYW5pZmVzdCBmbGFncyAgPE1hbmlmZXN0PjwvTWFuaWZlc3Q+CiAgICAgdGhpcy0+V3JpdGVNYW5pZmVzdE9wdGlvbnMoZTEsIGMpOwogICAgIGlmICh0aGlzLT5Oc2lnaHRUZWdyYSAmJgotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgJiYKLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiQU5EUk9JRF9HVUkiKSkgeworICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+SXNBbmRyb2lkR3VpRXhlY3V0YWJsZSgpKSB7CiAgICAgICB0aGlzLT5Xcml0ZUFudEJ1aWxkT3B0aW9ucyhlMSwgYyk7CiAgICAgfQogICB9CkBAIC00MDUyLDYgKzQwOTMsNyBAQAogICBzdGQ6OnN0cmluZyBzY3JpcHQ7CiAgIGNvbnN0IGNoYXIqIHByZSA9ICIiOwogICBzdGQ6OnN0cmluZyBjb21tZW50OworICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlOwogICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2MgOiBjb21tYW5kcykgewogICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coY2MsIGNvbmZpZ05hbWUsIGxnKTsKICAgICBpZiAoIWNjZy5IYXNPbmx5RW1wdHlDb21tYW5kTGluZXMoKSkgewpAQCAtNDA2MCwxMSArNDEwMiwxNiBAQAogICAgICAgc2NyaXB0ICs9IHByZTsKICAgICAgIHByZSA9ICJcbiI7CiAgICAgICBzY3JpcHQgKz0gbGctPkNvbnN0cnVjdFNjcmlwdChjY2cpOworCisgICAgICBzdGRQaXBlc1VURjggPSBzdGRQaXBlc1VURjggfHwgY2MuR2V0U3RkUGlwZXNVVEY4KCk7CiAgICAgfQogICB9CiAgIGNvbW1lbnQgPSBjbVZTMTBFc2NhcGVDb21tZW50KGNvbW1lbnQpOwogICBpZiAodGhpcy0+UHJvamVjdFR5cGUgIT0gY3Nwcm9qKSB7CiAgICAgRWxlbSBlMihlMSwgbmFtZSk7CisgICAgaWYgKHN0ZFBpcGVzVVRGOCkgeworICAgICAgdGhpcy0+V3JpdGVTdGRPdXRFbmNvZGluZ1V0ZjgoZTIpOworICAgIH0KICAgICBlMi5FbGVtZW50KCJNZXNzYWdlIiwgY29tbWVudCk7CiAgICAgZTIuRWxlbWVudCgiQ29tbWFuZCIsIHNjcmlwdCk7CiAgIH0gZWxzZSB7CkBAIC00MTAyLDkgKzQxNDksOSBAQAogICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gZHQtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGR0LT5HZXROYW1lKCk7CiAgICAgc3RkOjpzdHJpbmcgcGF0aDsKLSAgICBjb25zdCBjaGFyKiBwID0gZHQtPkdldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiKTsKKyAgICBjbVByb3AgcCA9IGR0LT5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIik7CiAgICAgaWYgKHApIHsKLSAgICAgIHBhdGggPSBwOworICAgICAgcGF0aCA9ICpwOwogICAgIH0gZWxzZSB7CiAgICAgICBwYXRoID0gY21TdHJDYXQobGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLCBkdC0+R2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVQcm9qZWN0RmlsZUV4dGVuc2lvbihkdCkpOwpAQCAtNDEyMCw3ICs0MTY3LDkgQEAKICAgICB9CiAKICAgICAvLyBEb24ndCByZWZlcmVuY2UgdGFyZ2V0cyB0aGF0IGRvbid0IHByb2R1Y2UgYW55IG91dHB1dC4KLSAgICBpZiAoZHQtPkdldE1hbmFnZWRUeXBlKCIiKSA9PSBjbUdlbmVyYXRvclRhcmdldDo6TWFuYWdlZFR5cGU6OlVuZGVmaW5lZCkgeworICAgIGlmICh0aGlzLT5Db25maWd1cmF0aW9ucy5lbXB0eSgpIHx8CisgICAgICAgIGR0LT5HZXRNYW5hZ2VkVHlwZSh0aGlzLT5Db25maWd1cmF0aW9uc1swXSkgPT0KKyAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6TWFuYWdlZFR5cGU6OlVuZGVmaW5lZCkgewogICAgICAgZTIuRWxlbWVudCgiUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHkiLCAiZmFsc2UiKTsKICAgICAgIGUyLkVsZW1lbnQoIkNvcHlUb091dHB1dERpcmVjdG9yeSIsICJOZXZlciIpOwogICAgIH0KQEAgLTQxMzIsMTcgKzQxODEsMTcgQEAKICAgLy8gVGhpcyBvbmx5IGFwcGxpZXMgdG8gV2luZG93cyAxMCBhcHBzCiAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzU3RvcmUoKSAmJgogICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0U3lzdGVtVmVyc2lvbigpLCAiMTAuMCIpKSB7Ci0gICAgY29uc3QgY2hhciogZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uID0KKyAgICBjbVByb3AgZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uID0KICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0RFU0tUT1BfRVhURU5TSU9OU19WRVJTSU9OIik7CiAgICAgaWYgKGRlc2t0b3BFeHRlbnNpb25zVmVyc2lvbikgewogICAgICAgdGhpcy0+V3JpdGVTaW5nbGVQbGF0Zm9ybUV4dGVuc2lvbihlMSwgIldpbmRvd3NEZXNrdG9wIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc2t0b3BFeHRlbnNpb25zVmVyc2lvbik7CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIG1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uID0KKyAgICBjbVByb3AgbW9iaWxlRXh0ZW5zaW9uc1ZlcnNpb24gPQogICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfTU9CSUxFX0VYVEVOU0lPTlNfVkVSU0lPTiIpOwogICAgIGlmIChtb2JpbGVFeHRlbnNpb25zVmVyc2lvbikgewogICAgICAgdGhpcy0+V3JpdGVTaW5nbGVQbGF0Zm9ybUV4dGVuc2lvbihlMSwgIldpbmRvd3NNb2JpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGVFeHRlbnNpb25zVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2JpbGVFeHRlbnNpb25zVmVyc2lvbik7CiAgICAgfQogICB9CiB9CkBAIC00MTY3LDkgKzQyMTYsOSBAQAogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2RrUmVmZXJlbmNlczsKICAgc3RkOjp1bmlxdWVfcHRyPEVsZW0+IHNwZTE7Ci0gIGlmIChjb25zdCBjaGFyKiB2c1NES1JlZmVyZW5jZXMgPQorICBpZiAoY21Qcm9wIHZzU0RLUmVmZXJlbmNlcyA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NES19SRUZFUkVOQ0VTIikpIHsKLSAgICBjbUV4cGFuZExpc3QodnNTREtSZWZlcmVuY2VzLCBzZGtSZWZlcmVuY2VzKTsKKyAgICBjbUV4cGFuZExpc3QoKnZzU0RLUmVmZXJlbmNlcywgc2RrUmVmZXJlbmNlcyk7CiAgICAgc3BlMSA9IGNtOjptYWtlX3VuaXF1ZTxFbGVtPihlMCwgIkl0ZW1Hcm91cCIpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHJpIDogc2RrUmVmZXJlbmNlcykgewogICAgICAgRWxlbSgqc3BlMSwgIlNES1JlZmVyZW5jZSIpLkF0dHJpYnV0ZSgiSW5jbHVkZSIsIHJpKTsKQEAgLTQxNzksMTEgKzQyMjgsMTEgQEAKICAgLy8gVGhpcyBvbmx5IGFwcGxpZXMgdG8gV2luZG93cyAxMCBhcHBzCiAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzU3RvcmUoKSAmJgogICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0U3lzdGVtVmVyc2lvbigpLCAiMTAuMCIpKSB7Ci0gICAgY29uc3QgY2hhciogZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uID0KKyAgICBjbVByb3AgZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uID0KICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0RFU0tUT1BfRVhURU5TSU9OU19WRVJTSU9OIik7Ci0gICAgY29uc3QgY2hhciogbW9iaWxlRXh0ZW5zaW9uc1ZlcnNpb24gPQorICAgIGNtUHJvcCBtb2JpbGVFeHRlbnNpb25zVmVyc2lvbiA9CiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19NT0JJTEVfRVhURU5TSU9OU19WRVJTSU9OIik7Ci0gICAgY29uc3QgY2hhciogaW90RXh0ZW5zaW9uc1ZlcnNpb24gPQorICAgIGNtUHJvcCBpb3RFeHRlbnNpb25zVmVyc2lvbiA9CiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19JT1RfRVhURU5TSU9OU19WRVJTSU9OIik7CiAKICAgICBpZiAoZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uIHx8IG1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uIHx8CkBAIC00MTkzLDE1ICs0MjQyLDE1IEBACiAgICAgICB9CiAgICAgICBpZiAoZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uKSB7CiAgICAgICAgIHRoaXMtPldyaXRlU2luZ2xlU0RLUmVmZXJlbmNlKCpzcGUxLCAiV2luZG93c0Rlc2t0b3AiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uKTsKICAgICAgIH0KICAgICAgIGlmIChtb2JpbGVFeHRlbnNpb25zVmVyc2lvbikgewogICAgICAgICB0aGlzLT5Xcml0ZVNpbmdsZVNES1JlZmVyZW5jZSgqc3BlMSwgIldpbmRvd3NNb2JpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGVFeHRlbnNpb25zVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2JpbGVFeHRlbnNpb25zVmVyc2lvbik7CiAgICAgICB9CiAgICAgICBpZiAoaW90RXh0ZW5zaW9uc1ZlcnNpb24pIHsKICAgICAgICAgdGhpcy0+V3JpdGVTaW5nbGVTREtSZWZlcmVuY2UoKnNwZTEsICJXaW5kb3dzSW9UIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW90RXh0ZW5zaW9uc1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaW90RXh0ZW5zaW9uc1ZlcnNpb24pOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtNDIyMSwxMiArNDI3MCwxMyBAQAogICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NQaG9uZSgpKSAmJgogICAgICAgKGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSA9PSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkpIHsKICAgICBzdGQ6OnN0cmluZyBwZnhGaWxlOwotICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGNlcnRpZmljYXRlczsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENlcnRpZmljYXRlcyhjZXJ0aWZpY2F0ZXMsICIiKTsKLSAgICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogc2kgOiBjZXJ0aWZpY2F0ZXMpIHsKLSAgICAgIHBmeEZpbGUgPSB0aGlzLT5Db252ZXJ0UGF0aChzaS0+R2V0RnVsbFBhdGgoKSwgZmFsc2UpOwotICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHBmeEZpbGUpOwotICAgICAgYnJlYWs7CisgICAgZm9yIChjbUdlbmVyYXRvclRhcmdldDo6QWxsQ29uZmlnU291cmNlIGNvbnN0JiBzb3VyY2UgOgorICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRBbGxDb25maWdTb3VyY2VzKCkpIHsKKyAgICAgIGlmIChzb3VyY2UuS2luZCA9PSBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlS2luZENlcnRpZmljYXRlKSB7CisgICAgICAgIHBmeEZpbGUgPSB0aGlzLT5Db252ZXJ0UGF0aChzb3VyY2UuU291cmNlLT5HZXRGdWxsUGF0aCgpLCBmYWxzZSk7CisgICAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChwZnhGaWxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHRoaXMtPklzTWlzc2luZ0ZpbGVzICYmCkBAIC00MjcyLDI4ICs0MzIyLDYxIEBACiAgIH0KIH0KIAordm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpDbGFzc2lmeUFsbENvbmZpZ1NvdXJjZXMoKQoreworICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0OjpBbGxDb25maWdTb3VyY2UgY29uc3QmIHNvdXJjZSA6CisgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRBbGxDb25maWdTb3VyY2VzKCkpIHsKKyAgICB0aGlzLT5DbGFzc2lmeUFsbENvbmZpZ1NvdXJjZShzb3VyY2UpOworICB9Cit9CisKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6Q2xhc3NpZnlBbGxDb25maWdTb3VyY2UoCisgIGNtR2VuZXJhdG9yVGFyZ2V0OjpBbGxDb25maWdTb3VyY2UgY29uc3QmIGFjcykKK3sKKyAgc3dpdGNoIChhY3MuS2luZCkgeworICAgIGNhc2UgY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUtpbmRSZXN4OiB7CisgICAgICAvLyBCdWlsZCBhbmQgc2F2ZSB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyAuaCBmaWxlCisgICAgICAvLyBUaGlzIHJlbGF0aW9uc2hpcCB3aWxsIGJlIHVzZWQgbGF0ZXIgd2hlbiBidWlsZGluZyB0aGUgcHJvamVjdCBmaWxlcy4KKyAgICAgIC8vIEJvdGggbmFtZXMgd291bGQgaGF2ZSBiZWVuIGF1dG8gZ2VuZXJhdGVkIGZyb20gVmlzdWFsIFN0dWRpbworICAgICAgLy8gd2hlcmUgdGhlIHVzZXIgc3VwcGxpZWQgdGhlIGZpbGUgbmFtZSBhbmQgVmlzdWFsIFN0dWRpbworICAgICAgLy8gYXBwZW5kZWQgdGhlIHN1ZmZpeC4KKyAgICAgIHN0ZDo6c3RyaW5nIHJlc3ggPSBhY3MuU291cmNlLT5SZXNvbHZlRnVsbFBhdGgoKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGhGaWxlTmFtZSA9IHJlc3guc3Vic3RyKDAsIHJlc3guZmluZF9sYXN0X29mKCcuJykpICsgIi5oIjsKKyAgICAgIHRoaXMtPkV4cGVjdGVkUmVzeEhlYWRlcnMuaW5zZXJ0KGhGaWxlTmFtZSk7CisgICAgfSBicmVhazsKKyAgICBjYXNlIGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kWGFtbDogeworICAgICAgLy8gQnVpbGQgYW5kIHNhdmUgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgLmggYW5kIC5jcHAgZmlsZQorICAgICAgLy8gVGhpcyByZWxhdGlvbnNoaXAgd2lsbCBiZSB1c2VkIGxhdGVyIHdoZW4gYnVpbGRpbmcgdGhlIHByb2plY3QgZmlsZXMuCisgICAgICAvLyBCb3RoIG5hbWVzIHdvdWxkIGhhdmUgYmVlbiBhdXRvIGdlbmVyYXRlZCBmcm9tIFZpc3VhbCBTdHVkaW8KKyAgICAgIC8vIHdoZXJlIHRoZSB1c2VyIHN1cHBsaWVkIHRoZSBmaWxlIG5hbWUgYW5kIFZpc3VhbCBTdHVkaW8KKyAgICAgIC8vIGFwcGVuZGVkIHRoZSBzdWZmaXguCisgICAgICBzdGQ6OnN0cmluZyB4YW1sID0gYWNzLlNvdXJjZS0+UmVzb2x2ZUZ1bGxQYXRoKCk7CisgICAgICBzdGQ6OnN0cmluZyBoRmlsZU5hbWUgPSB4YW1sICsgIi5oIjsKKyAgICAgIHN0ZDo6c3RyaW5nIGNwcEZpbGVOYW1lID0geGFtbCArICIuY3BwIjsKKyAgICAgIHRoaXMtPkV4cGVjdGVkWGFtbEhlYWRlcnMuaW5zZXJ0KGhGaWxlTmFtZSk7CisgICAgICB0aGlzLT5FeHBlY3RlZFhhbWxTb3VyY2VzLmluc2VydChjcHBGaWxlTmFtZSk7CisgICAgfSBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KK30KKwogYm9vbCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpJc1Jlc3hIZWFkZXIoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBoZWFkZXJGaWxlKQogewotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZXhwZWN0ZWRSZXN4SGVhZGVyczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHBlY3RlZFJlc3hIZWFkZXJzKGV4cGVjdGVkUmVzeEhlYWRlcnMsICIiKTsKLSAgcmV0dXJuIGV4cGVjdGVkUmVzeEhlYWRlcnMuY291bnQoaGVhZGVyRmlsZSkgPiAwOworICByZXR1cm4gdGhpcy0+RXhwZWN0ZWRSZXN4SGVhZGVycy5jb3VudChoZWFkZXJGaWxlKSA+IDA7CiB9CiAKIGJvb2wgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6SXNYYW1sSGVhZGVyKAogICBjb25zdCBzdGQ6OnN0cmluZyYgaGVhZGVyRmlsZSkKIHsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGV4cGVjdGVkWGFtbEhlYWRlcnM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXhwZWN0ZWRYYW1sSGVhZGVycyhleHBlY3RlZFhhbWxIZWFkZXJzLCAiIik7Ci0gIHJldHVybiBleHBlY3RlZFhhbWxIZWFkZXJzLmNvdW50KGhlYWRlckZpbGUpID4gMDsKKyAgcmV0dXJuIHRoaXMtPkV4cGVjdGVkWGFtbEhlYWRlcnMuY291bnQoaGVhZGVyRmlsZSkgPiAwOwogfQogCiBib29sIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OklzWGFtbFNvdXJjZSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZUZpbGUpCiB7Ci0gIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBleHBlY3RlZFhhbWxTb3VyY2VzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4cGVjdGVkWGFtbFNvdXJjZXMoZXhwZWN0ZWRYYW1sU291cmNlcywgIiIpOwotICByZXR1cm4gZXhwZWN0ZWRYYW1sU291cmNlcy5jb3VudChzb3VyY2VGaWxlKSA+IDA7CisgIHJldHVybiB0aGlzLT5FeHBlY3RlZFhhbWxTb3VyY2VzLmNvdW50KHNvdXJjZUZpbGUpID4gMDsKIH0KIAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUFwcGxpY2F0aW9uVHlwZVNldHRpbmdzKEVsZW0mIGUxKQpAQCAtNDMwMiw2ICs0Mzg1LDcgQEAKICAgYm9vbCBpc0FwcENvbnRhaW5lciA9IGZhbHNlOwogICBib29sIGNvbnN0IGlzV2luZG93c1Bob25lID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1Bob25lKCk7CiAgIGJvb2wgY29uc3QgaXNXaW5kb3dzU3RvcmUgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzU3RvcmUoKTsKKyAgYm9vbCBjb25zdCBpc0FuZHJvaWQgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNBbmRyb2lkKCk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiByZXYgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uKCk7CiAgIGlmIChpc1dpbmRvd3NQaG9uZSB8fCBpc1dpbmRvd3NTdG9yZSkgewogICAgIGUxLkVsZW1lbnQoIkFwcGxpY2F0aW9uVHlwZSIsCkBAIC00MzM5LDIzICs0NDIzLDI5IEBACiAgICAgICAgICAgICAgICAgICAgdGhpcy0+TmFtZSArICJfJChDb25maWd1cmF0aW9uKV8kKFBsYXRmb3JtKS54YXAiKTsKICAgICAgIH0KICAgICB9CisgIH0gZWxzZSBpZiAoaXNBbmRyb2lkKSB7CisgICAgZTEuRWxlbWVudCgiQXBwbGljYXRpb25UeXBlIiwgIkFuZHJvaWQiKTsKKyAgICBlMS5FbGVtZW50KCJBcHBsaWNhdGlvblR5cGVSZXZpc2lvbiIsCisgICAgICAgICAgICAgICBnZy0+R2V0QW5kcm9pZEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uKCkpOwogICB9CiAgIGlmIChpc0FwcENvbnRhaW5lcikgewogICAgIGUxLkVsZW1lbnQoIkFwcENvbnRhaW5lckFwcGxpY2F0aW9uIiwgInRydWUiKTsKLSAgfSBlbHNlIGlmICh0aGlzLT5QbGF0Zm9ybSA9PSAiQVJNNjQiKSB7Ci0gICAgZTEuRWxlbWVudCgiV2luZG93c1NES0Rlc2t0b3BBUk02NFN1cHBvcnQiLCAidHJ1ZSIpOwotICB9IGVsc2UgaWYgKHRoaXMtPlBsYXRmb3JtID09ICJBUk0iKSB7Ci0gICAgZTEuRWxlbWVudCgiV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0IiwgInRydWUiKTsKKyAgfSBlbHNlIGlmICghaXNBbmRyb2lkKSB7CisgICAgaWYgKHRoaXMtPlBsYXRmb3JtID09ICJBUk02NCIpIHsKKyAgICAgIGUxLkVsZW1lbnQoIldpbmRvd3NTREtEZXNrdG9wQVJNNjRTdXBwb3J0IiwgInRydWUiKTsKKyAgICB9IGVsc2UgaWYgKHRoaXMtPlBsYXRmb3JtID09ICJBUk0iKSB7CisgICAgICBlMS5FbGVtZW50KCJXaW5kb3dzU0RLRGVza3RvcEFSTVN1cHBvcnQiLCAidHJ1ZSIpOworICAgIH0KICAgfQogICBzdGQ6OnN0cmluZyBjb25zdCYgdGFyZ2V0UGxhdGZvcm1WZXJzaW9uID0KICAgICBnZy0+R2V0V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbigpOwogICBpZiAoIXRhcmdldFBsYXRmb3JtVmVyc2lvbi5lbXB0eSgpKSB7CiAgICAgZTEuRWxlbWVudCgiV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbiIsIHRhcmdldFBsYXRmb3JtVmVyc2lvbik7CiAgIH0KLSAgY29uc3QgY2hhciogdGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKKyAgY21Qcm9wIHRhcmdldFBsYXRmb3JtTWluVmVyc2lvbiA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgIlZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX01JTl9WRVJTSU9OIik7CiAgIGlmICh0YXJnZXRQbGF0Zm9ybU1pblZlcnNpb24pIHsKLSAgICBlMS5FbGVtZW50KCJXaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uIiwgdGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uKTsKKyAgICBlMS5FbGVtZW50KCJXaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uIiwgKnRhcmdldFBsYXRmb3JtTWluVmVyc2lvbik7CiAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzU3RvcmUgJiYgcmV2ID09ICIxMC4wIikgewogICAgIC8vIElmIHRoZSBtaW4gdmVyc2lvbiBpcyBub3Qgc2V0LCB0aGVuIHVzZSB0aGUgVGFyZ2V0UGxhdGZvcm1WZXJzaW9uCiAgICAgaWYgKCF0YXJnZXRQbGF0Zm9ybVZlcnNpb24uZW1wdHkoKSkgewpAQCAtNDM3NCwzOSArNDQ2NCwzOCBAQAogICAvLyBGb3IgV2luZG93cyBhbmQgV2luZG93cyBQaG9uZSBleGVjdXRhYmxlcywgd2Ugd2lsbCBhc3N1bWUgdGhhdCBpZiBhCiAgIC8vIG1hbmlmZXN0IGlzIG5vdCBwcmVzZW50IHRoYXQgd2UgbmVlZCB0byBhZGQgYWxsIHRoZSBuZWNlc3NhcnkgZmlsZXMKICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgewotICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IG1hbmlmZXN0U291cmNlczsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFwcE1hbmlmZXN0KG1hbmlmZXN0U291cmNlcywgIiIpOwotICAgIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2ID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRTeXN0ZW1WZXJzaW9uKCk7Ci0gICAgICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1Bob25lKCkpIHsKLSAgICAgICAgaWYgKHYgPT0gIjguMCIpIHsKLSAgICAgICAgICAvLyBMb29rIHRocm91Z2ggdGhlIHNvdXJjZXMgZm9yIFdNQXBwTWFuaWZlc3QueG1sCi0gICAgICAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gZXh0cmFTb3VyY2VzOwotICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0cmFTb3VyY2VzKGV4dHJhU291cmNlcywgIiIpOwotICAgICAgICAgIGJvb2wgZm91bmRNYW5pZmVzdCA9IGZhbHNlOwotICAgICAgICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzaSA6IGV4dHJhU291cmNlcykgewotICAgICAgICAgICAgLy8gTmVlZCB0byBkbyBhIGxvd2VyY2FzZSBjb21wYXJpc29uIG9uIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgaWYgKCJ3bWFwcG1hbmlmZXN0LnhtbCIgPT0KLSAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc2ktPkdldExvY2F0aW9uKCkuR2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICBmb3VuZE1hbmlmZXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghZm91bmRNYW5pZmVzdCkgewotICAgICAgICAgICAgdGhpcy0+SXNNaXNzaW5nRmlsZXMgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2ID09ICI4LjEiKSB7Ci0gICAgICAgICAgaWYgKG1hbmlmZXN0U291cmNlcy5lbXB0eSgpKSB7Ci0gICAgICAgICAgICB0aGlzLT5Jc01pc3NpbmdGaWxlcyA9IHRydWU7CisgICAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZT4gbWFuaWZlc3RTb3VyY2VzID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0QWxsQ29uZmlnU291cmNlcygKKyAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUtpbmRBcHBNYW5pZmVzdCk7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIHYgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFN5c3RlbVZlcnNpb24oKTsKKyAgICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1Bob25lKCkpIHsKKyAgICAgIGlmICh2ID09ICI4LjAiKSB7CisgICAgICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgc291cmNlcyBmb3IgV01BcHBNYW5pZmVzdC54bWwKKyAgICAgICAgYm9vbCBmb3VuZE1hbmlmZXN0ID0gZmFsc2U7CisgICAgICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZSBjb25zdCYgc291cmNlIDoKKyAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFsbENvbmZpZ1NvdXJjZXMoKSkgeworICAgICAgICAgIGlmIChzb3VyY2UuS2luZCA9PSBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlS2luZEV4dHJhICYmCisgICAgICAgICAgICAgICJ3bWFwcG1hbmlmZXN0LnhtbCIgPT0KKyAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UoCisgICAgICAgICAgICAgICAgICBzb3VyY2UuU291cmNlLT5HZXRMb2NhdGlvbigpLkdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgIGZvdW5kTWFuaWZlc3QgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NTdG9yZSgpKSB7CisgICAgICAgIGlmICghZm91bmRNYW5pZmVzdCkgeworICAgICAgICAgIHRoaXMtPklzTWlzc2luZ0ZpbGVzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICh2ID09ICI4LjEiKSB7CiAgICAgICAgIGlmIChtYW5pZmVzdFNvdXJjZXMuZW1wdHkoKSkgewotICAgICAgICAgIGlmICh2ID09ICI4LjAiKSB7Ci0gICAgICAgICAgICB0aGlzLT5Jc01pc3NpbmdGaWxlcyA9IHRydWU7Ci0gICAgICAgICAgfSBlbHNlIGlmICh2ID09ICI4LjEiIHx8IGNtSGFzTGl0ZXJhbFByZWZpeCh2LCAiMTAuMCIpKSB7Ci0gICAgICAgICAgICB0aGlzLT5Jc01pc3NpbmdGaWxlcyA9IHRydWU7Ci0gICAgICAgICAgfQorICAgICAgICAgIHRoaXMtPklzTWlzc2luZ0ZpbGVzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1N0b3JlKCkpIHsKKyAgICAgIGlmIChtYW5pZmVzdFNvdXJjZXMuZW1wdHkoKSkgeworICAgICAgICBpZiAodiA9PSAiOC4wIikgeworICAgICAgICAgIHRoaXMtPklzTWlzc2luZ0ZpbGVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICh2ID09ICI4LjEiIHx8IGNtSGFzTGl0ZXJhbFByZWZpeCh2LCAiMTAuMCIpKSB7CisgICAgICAgICAgdGhpcy0+SXNNaXNzaW5nRmlsZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNDg0NSwxMSArNDkzNCwxMSBAQAogICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qKSB7CiAgICAgY29uc3QgY21Qcm9wZXJ0eU1hcCYgcHJvcHMgPSBzZi0+R2V0UHJvcGVydGllcygpOwogICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHAgOiBwcm9wcy5HZXRLZXlzKCkpIHsKLSAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBwcm9wTmFtZVByZWZpeCA9ICJWU19DU0hBUlBfIjsKLSAgICAgIGlmIChwLmZpbmQocHJvcE5hbWVQcmVmaXgpID09IDApIHsKKyAgICAgIHN0YXRpYyBjb25zdCBjbTo6c3RyaW5nX3ZpZXcgcHJvcE5hbWVQcmVmaXggPSAiVlNfQ1NIQVJQXyI7CisgICAgICBpZiAoY21IYXNQcmVmaXgocCwgcHJvcE5hbWVQcmVmaXgpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIHRhZ05hbWUgPSBwLnN1YnN0cihwcm9wTmFtZVByZWZpeC5sZW5ndGgoKSk7CiAgICAgICAgIGlmICghdGFnTmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgdmFsID0gcHJvcHMuR2V0UHJvcGVydHlWYWx1ZShwKTsKKyAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsID0gKnByb3BzLkdldFByb3BlcnR5VmFsdWUocCk7CiAgICAgICAgICAgaWYgKCF2YWwuZW1wdHkoKSkgewogICAgICAgICAgICAgdGFnc1t0YWdOYW1lXSA9IHZhbDsKICAgICAgICAgICB9IGVsc2UgewpAQCAtNDg2OSwyNCArNDk1OCwzNCBAQAogICB9CiB9CiAKLXZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6R2V0Q1NoYXJwU291cmNlTGluaygKLSAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiwgc3RkOjpzdHJpbmcmIGxpbmspCitzdGQ6OnN0cmluZyBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpHZXRDU2hhcnBTb3VyY2VMaW5rKAorICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSkKIHsKLSAgc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZUZpbGVQYXRoID0gc2YtPkdldEZ1bGxQYXRoKCk7Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5hcnlEaXIgPSBMb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwotCi0gIGlmICghY21TeXN0ZW1Ub29sczo6SXNTdWJEaXJlY3Rvcnkoc291cmNlRmlsZVBhdGgsIGJpbmFyeURpcikpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyaXBGcm9tUGF0aCA9Ci0gICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwotICAgIGlmIChzb3VyY2VGaWxlUGF0aC5maW5kKHN0cmlwRnJvbVBhdGgpID09IDApIHsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBsID0gc2YtPkdldFByb3BlcnR5KCJWU19DU0hBUlBfTGluayIpKSB7Ci0gICAgICAgIGxpbmsgPSBsOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGluayA9IHNvdXJjZUZpbGVQYXRoLnN1YnN0cihzdHJpcEZyb21QYXRoLmxlbmd0aCgpICsgMSk7Ci0gICAgICB9Ci0gICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gobGluayk7Ci0gICAgfQorICAvLyBGb3Igb3V0IG9mIHNvdXJjZSBmaWxlcywgd2UgZmlyc3QgY2hlY2sgaWYgYSBtYXRjaGluZyBzb3VyY2UgZ3JvdXAKKyAgLy8gZm9yIHRoaXMgZmlsZSBleGlzdHMsIG90aGVyd2lzZSB3ZSBjaGVjayBpZiB0aGUgcGF0aCByZWxhdGl2ZSB0byBjdXJyZW50CisgIC8vIHNvdXJjZS0gb3IgYmluYXJ5LWRpciBpcyB1c2VkIHdpdGhpbiB0aGUgbGluayBhbmQgcmV0dXJuIHRoYXQKKyAgc3RkOjpzdHJpbmcgbGluazsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGZ1bGxGaWxlTmFtZSA9IHNvdXJjZS0+R2V0RnVsbFBhdGgoKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHNyY0RpciA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5EaXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOworICAvLyB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gY29weSB0aGUgc291cmNlIGdyb3VwcywgYmVjYXVzZQorICAvLyBGaW5kU291cmNlR3JvdXAgdXNlcyBhIHJlZ2V4IHdoaWNoIGlzIG1vZGlmeWluZyB0aGUgZ3JvdXAKKyAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VHcm91cD4gc291cmNlR3JvdXBzID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZUdyb3VwcygpOworICBjbVNvdXJjZUdyb3VwKiBzb3VyY2VHcm91cCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkZpbmRTb3VyY2VHcm91cChmdWxsRmlsZU5hbWUsIHNvdXJjZUdyb3Vwcyk7CisgIGlmIChzb3VyY2VHcm91cCAmJiAhc291cmNlR3JvdXAtPkdldEZ1bGxOYW1lKCkuZW1wdHkoKSkgeworICAgIGxpbmsgPSBzb3VyY2VHcm91cC0+R2V0RnVsbE5hbWUoKSArICIvIiArCisgICAgICBjbXN5czo6U3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmdWxsRmlsZU5hbWUpOworICB9IGVsc2UgaWYgKGNtSGFzUHJlZml4KGZ1bGxGaWxlTmFtZSwgc3JjRGlyKSkgeworICAgIGxpbmsgPSBmdWxsRmlsZU5hbWUuc3Vic3RyKHNyY0Rpci5sZW5ndGgoKSArIDEpOworICB9IGVsc2UgaWYgKGNtSGFzUHJlZml4KGZ1bGxGaWxlTmFtZSwgYmluRGlyKSkgeworICAgIGxpbmsgPSBmdWxsRmlsZU5hbWUuc3Vic3RyKGJpbkRpci5sZW5ndGgoKSArIDEpOworICB9IGVsc2UgaWYgKGNtUHJvcCBsID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiVlNfQ1NIQVJQX0xpbmsiKSkgeworICAgIGxpbmsgPSAqbDsKICAgfQorCisgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChsaW5rKTsKKyAgcmV0dXJuIGxpbms7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OkdldENNYWtlRmlsZVBhdGgoCkBAIC00ODk5LDMgKzQ5OTgsMTAgQEAKIAogICByZXR1cm4gcGF0aDsKIH0KKwordm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVN0ZE91dEVuY29kaW5nVXRmOChFbGVtJiBlMSkKK3sKKyAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+SXNTdGRPdXRFbmNvZGluZ1N1cHBvcnRlZCgpKSB7CisgICAgZTEuRWxlbWVudCgiU3RkT3V0RW5jb2RpbmciLCAiVVRGLTgiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmgKaW5kZXggMzAwMjdjOS4uYzU0MDU3YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5oCkBAIC0xMCwxMiArMTAsMTQgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCisKIGNsYXNzIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjsKIGNsYXNzIGNtQ3VzdG9tQ29tbWFuZDsKIGNsYXNzIGNtR2VuZXJhdGVkRmlsZVN0cmVhbTsKLWNsYXNzIGNtR2VuZXJhdG9yVGFyZ2V0OwogY2xhc3MgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjsKIGNsYXNzIGNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjsKIGNsYXNzIGNtTWFrZWZpbGU7CkBAIC02OCwxMyArNzAsMTIgQEAKICAgdm9pZCBXcml0ZUV4dHJhU291cmNlKEVsZW0mIGUxLCBjbVNvdXJjZUZpbGUgY29uc3QqIHNmKTsKICAgdm9pZCBXcml0ZU5zaWdodFRlZ3JhQ29uZmlndXJhdGlvblZhbHVlcyhFbGVtJiBlMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKKyAgdm9pZCBXcml0ZUFuZHJvaWRDb25maWd1cmF0aW9uVmFsdWVzKEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKICAgdm9pZCBXcml0ZVNvdXJjZShFbGVtJiBlMiwgY21Tb3VyY2VGaWxlIGNvbnN0KiBzZik7CiAgIHZvaWQgV3JpdGVFeGNsdWRlRnJvbUJ1aWxkKEVsZW0mIGUyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IGNvbnN0JiBleGNsdWRlX2NvbmZpZ3MpOwogICB2b2lkIFdyaXRlQWxsU291cmNlcyhFbGVtJiBlMCk7CiAgIHZvaWQgV3JpdGVQYWNrYWdlUmVmZXJlbmNlcyhFbGVtJiBlMCk7Ci0gIHZvaWQgV3JpdGVQYWNrYWdlUmVmZXJlbmNlKEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmVyc2lvbik7CiAgIHZvaWQgV3JpdGVEb3ROZXRSZWZlcmVuY2VzKEVsZW0mIGUwKTsKICAgdm9pZCBXcml0ZURvdE5ldFJlZmVyZW5jZShFbGVtJiBlMSwgc3RkOjpzdHJpbmcgY29uc3QmIHJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgaGludCwKQEAgLTE4Myw3ICsxODQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiYgdGFncyk7CiAgIHZvaWQgV3JpdGVDU2hhcnBTb3VyY2VQcm9wZXJ0aWVzKAogICAgIEVsZW0mIGUyLCBjb25zdCBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiB0YWdzKTsKLSAgdm9pZCBHZXRDU2hhcnBTb3VyY2VMaW5rKGNtU291cmNlRmlsZSBjb25zdCogc2YsIHN0ZDo6c3RyaW5nJiBsaW5rKTsKKyAgc3RkOjpzdHJpbmcgR2V0Q1NoYXJwU291cmNlTGluayhjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSk7CisKKyAgdm9pZCBXcml0ZVN0ZE91dEVuY29kaW5nVXRmOChFbGVtJiBlMSk7CiAKIHByaXZhdGU6CiAgIGZyaWVuZCBjbGFzcyBjbVZTMTBHZW5lcmF0b3JPcHRpb25zOwpAQCAtMjEzLDYgKzIxNiw3IEBACiAgIGJvb2wgTVNUb29sczsKICAgYm9vbCBNYW5hZ2VkOwogICBib29sIE5zaWdodFRlZ3JhOworICBib29sIEFuZHJvaWQ7CiAgIHVuc2lnbmVkIGludCBOc2lnaHRUZWdyYVZlcnNpb25bNF07CiAgIGJvb2wgVGFyZ2V0Q29tcGlsZUFzV2luUlQ7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBJUE9FbmFibGVkQ29uZmlndXJhdGlvbnM7CkBAIC0yMzYsNiArMjQwLDIzIEBACiAKICAgdXNpbmcgVG9vbFNvdXJjZU1hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUb29sU291cmNlcz47CiAgIFRvb2xTb3VyY2VNYXAgVG9vbHM7CisKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEV4cGVjdGVkUmVzeEhlYWRlcnM7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFhhbWxIZWFkZXJzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gRXhwZWN0ZWRYYW1sU291cmNlczsKKyAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gUmVzeE9ianM7CisgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IFhhbWxPYmpzOworICB2b2lkIENsYXNzaWZ5QWxsQ29uZmlnU291cmNlcygpOworICB2b2lkIENsYXNzaWZ5QWxsQ29uZmlnU291cmNlKGNtR2VuZXJhdG9yVGFyZ2V0OjpBbGxDb25maWdTb3VyY2UgY29uc3QmIGFjcyk7CisKKyAgdXNpbmcgQ29uZmlnVG9TZXR0aW5ncyA9CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPj47CisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgQ29uZmlnVG9TZXR0aW5ncz4gUGFyc2VkVG9vbFRhcmdldFNldHRpbmdzOworICBib29sIFByb3BlcnR5SXNTYW1lSW5BbGxDb25maWdzKGNvbnN0IENvbmZpZ1RvU2V0dGluZ3MmIHRvb2xTZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcE5hbWUpOworICB2b2lkIFBhcnNlU2V0dGluZ3NQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3NQcm9wZXJ0eVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdUb1NldHRpbmdzJiB0b29sU2V0dGluZ3MpOwogICBzdGQ6OnN0cmluZyBHZXRDTWFrZUZpbGVQYXRoKGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9ucy5jeHggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmN4eAppbmRleCA0MDA0YjY2Li45MzdiNGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmN4eAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmN4eApAQCAtMTUxLDM1ICsxNTEsNiBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zOjpGaXhDdWRhUnVudGltZShjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQotewotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgRmxhZ1ZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaSA9Ci0gICAgdGhpcy0+RmxhZ01hcC5maW5kKCJDdWRhUnVudGltZSIpOwotICBpZiAoaSA9PSB0aGlzLT5GbGFnTWFwLmVuZCgpKSB7Ci0gICAgLy8gVXNlciBkaWRuJ3QgcHJvdmlkZSBhbSBvdmVycmlkZSBzbyBnZXQgdGhlIHByb3BlcnR5IHZhbHVlCi0gICAgY29uc3QgY2hhciogcnVudGltZUxpYnJhcnlWYWx1ZSA9Ci0gICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJDVURBX1JVTlRJTUVfTElCUkFSWSIpOwotICAgIGlmIChydW50aW1lTGlicmFyeVZhbHVlKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBjdWRhUnVudGltZSA9Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICAgICAgICAgIHJ1bnRpbWVMaWJyYXJ5VmFsdWUsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5Db25maWd1cmF0aW9uLAotICAgICAgICAgIHRhcmdldCkpOwotICAgICAgaWYgKGN1ZGFSdW50aW1lID09ICJTVEFUSUMiKSB7Ci0gICAgICAgIHRoaXMtPkFkZEZsYWcoIkN1ZGFSdW50aW1lIiwgIlN0YXRpYyIpOwotICAgICAgfQotICAgICAgaWYgKGN1ZGFSdW50aW1lID09ICJTSEFSRUQiKSB7Ci0gICAgICAgIHRoaXMtPkFkZEZsYWcoIkN1ZGFSdW50aW1lIiwgIlNoYXJlZCIpOwotICAgICAgfQotICAgICAgaWYgKGN1ZGFSdW50aW1lID09ICJOT05FIikgewotICAgICAgICB0aGlzLT5BZGRGbGFnKCJDdWRhUnVudGltZSIsICJOb25lIik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIG52Y2MgZGVmYXVsdCBpcyBzdGF0aWMKLSAgICAgIHRoaXMtPkFkZEZsYWcoIkN1ZGFSdW50aW1lIiwgIlN0YXRpYyIpOwotICAgIH0KLSAgfQotfQotCiB2b2lkIGNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9uczo6Rml4Q3VkYUNvZGVHZW5lcmF0aW9uKCkKIHsKICAgLy8gRXh0cmFjdCB0ZW1wb3JhcnkgdmFsdWVzIHN0b3JlZCBieSBvdXIgZmxhZyB0YWJsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuaCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuaAppbmRleCBiMzM1Njk0Li5mOWI1MGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmgKKysrIGIvU291cmNlL2NtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9ucy5oCkBAIC02Myw3ICs2Myw2IEBACiAgIGJvb2wgVXNpbmdTQkNTKCkgY29uc3Q7CiAKICAgdm9pZCBGaXhDdWRhQ29kZUdlbmVyYXRpb24oKTsKLSAgdm9pZCBGaXhDdWRhUnVudGltZShjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KTsKIAogICB2b2lkIEZpeE1hbmlmZXN0VUFDRmxhZ3MoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmN4eCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpb1NsblBhcnNlci5jeHgKaW5kZXggNDUzM2U5Yi4uZDc4MjJiMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmN4eAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuY3h4CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSYgc3RhdGUpCiB7CiAgIHNpemVfdCBpZHhFcXVhbFNpZ24gPSBsaW5lLmZpbmQoJz0nKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxUYWcgPSBsaW5lLnN1YnN0cigwLCBpZHhFcXVhbFNpZ24pOworICBhdXRvIGZ1bGxUYWcgPSBjbTo6c3RyaW5nX3ZpZXcobGluZSkuc3Vic3RyKDAsIGlkeEVxdWFsU2lnbik7CiAgIGlmICghdGhpcy0+UGFyc2VUYWcoZnVsbFRhZywgcGFyc2VkTGluZSwgc3RhdGUpKQogICAgIHJldHVybiBmYWxzZTsKICAgaWYgKGlkeEVxdWFsU2lnbiAhPSBsaW5lLm5wb3MpIHsKQEAgLTU2MCw3ICs1NjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSYgc3RhdGUpCiB7CiAgIHNpemVfdCBpZHhFcXVhbFNpZ24gPSBsaW5lLmZpbmQoJz0nKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxUYWcgPSBsaW5lLnN1YnN0cigwLCBpZHhFcXVhbFNpZ24pOworICBhdXRvIGZ1bGxUYWcgPSBjbTo6c3RyaW5nX3ZpZXcobGluZSkuc3Vic3RyKDAsIGlkeEVxdWFsU2lnbik7CiAgIGlmICghdGhpcy0+UGFyc2VUYWcoZnVsbFRhZywgcGFyc2VkTGluZSwgc3RhdGUpKQogICAgIHJldHVybiBmYWxzZTsKICAgaWYgKGlkeEVxdWFsU2lnbiAhPSBsaW5lLm5wb3MpIHsKQEAgLTU4NiwxNyArNTg2LDE3IEBACiAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGNtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyOjpQYXJzZVRhZyhjb25zdCBzdGQ6OnN0cmluZyYgZnVsbFRhZywKK2Jvb2wgY21WaXN1YWxTdHVkaW9TbG5QYXJzZXI6OlBhcnNlVGFnKGNtOjpzdHJpbmdfdmlldyBmdWxsVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VkTGluZSYgcGFyc2VkTGluZSwgU3RhdGUmIHN0YXRlKQogewogICBzaXplX3QgaWR4TGVmdFBhcmVuID0gZnVsbFRhZy5maW5kKCcoJyk7Ci0gIGlmIChpZHhMZWZ0UGFyZW4gPT0gZnVsbFRhZy5ucG9zKSB7CisgIGlmIChpZHhMZWZ0UGFyZW4gPT0gY206OnN0cmluZ192aWV3OjpucG9zKSB7CiAgICAgcGFyc2VkTGluZS5TZXRUYWcoY21UcmltV2hpdGVzcGFjZShmdWxsVGFnKSk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgcGFyc2VkTGluZS5TZXRUYWcoY21UcmltV2hpdGVzcGFjZShmdWxsVGFnLnN1YnN0cigwLCBpZHhMZWZ0UGFyZW4pKSk7CiAgIHNpemVfdCBpZHhSaWdodFBhcmVuID0gZnVsbFRhZy5yZmluZCgnKScpOwotICBpZiAoaWR4UmlnaHRQYXJlbiA9PSBmdWxsVGFnLm5wb3MpIHsKKyAgaWYgKGlkeFJpZ2h0UGFyZW4gPT0gY206OnN0cmluZ192aWV3OjpucG9zKSB7CiAgICAgdGhpcy0+TGFzdFJlc3VsdC5TZXRFcnJvcihSZXN1bHRFcnJvcklucHV0U3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuR2V0Q3VycmVudExpbmUoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuaAppbmRleCA2YzA1NjMzLi40NTU3Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuaAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuaApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxpb3Nmd2Q+CiAjaW5jbHVkZSA8c3RyaW5nPgogCisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisKICNpbmNsdWRlIDxzdGRkZWYuaD4KIAogY2xhc3MgY21TbG5EYXRhOwpAQCAtOTcsOCArOTksNyBAQAogICBib29sIFBhcnNlS2V5VmFsdWVQYWlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5lLCBQYXJzZWRMaW5lJiBwYXJzZWRMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlJiBzdGF0ZSk7CiAKLSAgYm9vbCBQYXJzZVRhZyhjb25zdCBzdGQ6OnN0cmluZyYgZnVsbFRhZywgUGFyc2VkTGluZSYgcGFyc2VkTGluZSwKLSAgICAgICAgICAgICAgICBTdGF0ZSYgc3RhdGUpOworICBib29sIFBhcnNlVGFnKGNtOjpzdHJpbmdfdmlldyBmdWxsVGFnLCBQYXJzZWRMaW5lJiBwYXJzZWRMaW5lLCBTdGF0ZSYgc3RhdGUpOwogCiAgIGJvb2wgUGFyc2VWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIFBhcnNlZExpbmUmIHBhcnNlZExpbmUpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVdoaWxlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21XaGlsZUNvbW1hbmQuY3h4CmluZGV4IDI2ZTdjNzUuLjBkOGU4OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVdoaWxlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtV2hpbGVDb21tYW5kLmN4eApAQCAtNyw4ICs3LDcgQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUNvbmRpdGlvbkV2YWx1YXRvci5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Xb3JrZXJQb29sLmN4eCBiL1NvdXJjZS9jbVdvcmtlclBvb2wuY3h4CmluZGV4IGFhMGQ2YjMuLjEyYWJhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVdvcmtlclBvb2wuY3h4CisrKyBiL1NvdXJjZS9jbVdvcmtlclBvb2wuY3h4CkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ2OSwxMSArNDY5LDkgQEAKIAogdm9pZCBjbVdvcmtlclBvb2xXb3JrZXI6OlVWUHJvY2Vzc0ZpbmlzaGVkKCkKIHsKLSAgewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKFByb2NfLk11dGV4KTsKLSAgICBpZiAoUHJvY18uUk9QICYmIChQcm9jXy5ST1AtPklzRmluaXNoZWQoKSB8fCAhUHJvY18uUk9QLT5Jc1N0YXJ0ZWQoKSkpIHsKLSAgICAgIFByb2NfLlJPUC5yZXNldCgpOwotICAgIH0KKyAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soUHJvY18uTXV0ZXgpOworICBpZiAoUHJvY18uUk9QICYmIChQcm9jXy5ST1AtPklzRmluaXNoZWQoKSB8fCAhUHJvY18uUk9QLT5Jc1N0YXJ0ZWQoKSkpIHsKKyAgICBQcm9jXy5ST1AucmVzZXQoKTsKICAgfQogICAvLyBOb3RpZnkgaWRsaW5nIHRocmVhZAogICBQcm9jXy5Db25kaXRpb24ubm90aWZ5X29uZSgpOwpAQCAtNTMyLDYgKzUzMCw3IEBACiAgIHVuc2lnbmVkIGludCBKb2JzUHJvY2Vzc2luZyA9IDA7CiAgIHN0ZDo6ZGVxdWU8Y21Xb3JrZXJQb29sOjpKb2JIYW5kbGVUPiBRdWV1ZTsKICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgQ29uZGl0aW9uOworICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBDb25kaXRpb25GZW5jZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtV29ya2VyUG9vbFdvcmtlcj4+IFdvcmtlcnM7CiAKICAgLy8gLS0gUmVmZXJlbmNlcwpAQCAtNTkzLDE5ICs1OTIsMTIgQEAKIAogdm9pZCBjbVdvcmtlclBvb2xJbnRlcm5hbDo6QWJvcnQoKQogewotICBib29sIG5vdGlmeVRocmVhZHMgPSBmYWxzZTsKICAgLy8gQ2xlYXIgYWxsIGpvYnMgYW5kIHNldCBhYm9ydCBmbGFnCi0gIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gZ3VhcmQoTXV0ZXgpOwotICAgIGlmIChQcm9jZXNzaW5nICYmICFBYm9ydGluZykgewotICAgICAgLy8gUmVnaXN0ZXIgYWJvcnQgYW5kIGNsZWFyIHF1ZXVlCi0gICAgICBBYm9ydGluZyA9IHRydWU7Ci0gICAgICBRdWV1ZS5jbGVhcigpOwotICAgICAgbm90aWZ5VGhyZWFkcyA9IHRydWU7Ci0gICAgfQotICB9Ci0gIGlmIChub3RpZnlUaHJlYWRzKSB7Ci0gICAgLy8gV2FrZSB0aHJlYWRzCisgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBndWFyZChNdXRleCk7CisgIGlmICghQWJvcnRpbmcpIHsKKyAgICAvLyBSZWdpc3RlciBhYm9ydCBhbmQgY2xlYXIgcXVldWUKKyAgICBBYm9ydGluZyA9IHRydWU7CisgICAgUXVldWUuY2xlYXIoKTsKICAgICBDb25kaXRpb24ubm90aWZ5X2FsbCgpOwogICB9CiB9CkBAIC02NjksNyArNjYxLDcgQEAKICAgICBpZiAoQWJvcnRpbmcpIHsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAvLyBXYWl0IGZvciBuZXcgam9icworICAgIC8vIFdhaXQgZm9yIG5ldyBqb2JzIG9uIHRoZSBtYWluIENWCiAgICAgaWYgKFF1ZXVlLmVtcHR5KCkpIHsKICAgICAgICsrV29ya2Vyc0lkbGU7CiAgICAgICBDb25kaXRpb24ud2FpdCh1TG9jayk7CkBAIC02NzcsMjAgKzY2OSwzNCBAQAogICAgICAgY29udGludWU7CiAgICAgfQogCi0gICAgLy8gQ2hlY2sgZm9yIGZlbmNlIGpvYnMKLSAgICBpZiAoRmVuY2VQcm9jZXNzaW5nIHx8IFF1ZXVlLmZyb250KCktPklzRmVuY2UoKSkgewotICAgICAgaWYgKEpvYnNQcm9jZXNzaW5nICE9IDApIHsKLSAgICAgICAgQ29uZGl0aW9uLndhaXQodUxvY2spOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIE5vIGpvYnMgZ2V0IHByb2Nlc3NlZC4gU2V0IHRoZSBmZW5jZSBqb2IgcHJvY2Vzc2luZyBmbGFnLgotICAgICAgRmVuY2VQcm9jZXNzaW5nID0gdHJ1ZTsKKyAgICAvLyBJZiB0aGVyZSBpcyBhIGZlbmNlIGN1cnJlbnRseSBhY3RpdmUgb3Igd2FpdGluZywKKyAgICAvLyBzbGVlcCBvbiB0aGUgbWFpbiBDViBhbmQgdHJ5IGFnYWluLgorICAgIGlmIChGZW5jZVByb2Nlc3NpbmcpIHsKKyAgICAgIENvbmRpdGlvbi53YWl0KHVMb2NrKTsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0KIAogICAgIC8vIFBvcCBuZXh0IGpvYiBmcm9tIHF1ZXVlCiAgICAgam9iSGFuZGxlID0gc3RkOjptb3ZlKFF1ZXVlLmZyb250KCkpOwogICAgIFF1ZXVlLnBvcF9mcm9udCgpOwogCisgICAgLy8gQ2hlY2sgZm9yIGZlbmNlIGpvYnMKKyAgICBib29sIHJhaXNlZEZlbmNlID0gZmFsc2U7CisgICAgaWYgKGpvYkhhbmRsZS0+SXNGZW5jZSgpKSB7CisgICAgICBGZW5jZVByb2Nlc3NpbmcgPSB0cnVlOworICAgICAgcmFpc2VkRmVuY2UgPSB0cnVlOworICAgICAgLy8gV2FpdCBvbiB0aGUgRmVuY2UgQ1YgdW50aWwgYWxsIHBlbmRpbmcgam9icyBhcmUgZG9uZS4KKyAgICAgIHdoaWxlIChKb2JzUHJvY2Vzc2luZyAhPSAwICYmICFBYm9ydGluZykgeworICAgICAgICBDb25kaXRpb25GZW5jZS53YWl0KHVMb2NrKTsKKyAgICAgIH0KKyAgICAgIC8vIFdoZW4gYWJvcnRpbmcsIGV4cGxpY2l0bHkga2ljayBhbGwgdGhyZWFkcyBhbGl2ZSBvbmNlIG1vcmUuCisgICAgICBpZiAoQWJvcnRpbmcpIHsKKyAgICAgICAgRmVuY2VQcm9jZXNzaW5nID0gZmFsc2U7CisgICAgICAgIENvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKwogICAgIC8vIFVubG9ja2VkIHNjb3BlIGZvciBqb2IgcHJvY2Vzc2luZwogICAgICsrSm9ic1Byb2Nlc3Npbmc7CiAgICAgewpAQCAtNzAxLDExICs3MDcsMTggQEAKICAgICB9CiAgICAgLS1Kb2JzUHJvY2Vzc2luZzsKIAotICAgIC8vIFdhcyB0aGlzIGEgZmVuY2Ugam9iPwotICAgIGlmIChGZW5jZVByb2Nlc3NpbmcpIHsKKyAgICAvLyBJZiB0aGlzIHdhcyB0aGUgdGhyZWFkIHRoYXQgZW50ZXJlZCBmZW5jZSBwcm9jZXNzaW5nCisgICAgLy8gb3JpZ2luYWxseSwgbm90aWZ5IGFsbCBpZGxpbmcgd29ya2VycyB0aGF0IHRoZSBmZW5jZQorICAgIC8vIGlzIGRvbmUuCisgICAgaWYgKHJhaXNlZEZlbmNlKSB7CiAgICAgICBGZW5jZVByb2Nlc3NpbmcgPSBmYWxzZTsKICAgICAgIENvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CiAgICAgfQorICAgIC8vIElmIGZlbmNlIHByb2Nlc3NpbmcgaXMgc3RpbGwgbm90IGRvbmUsIG5vdGlmeSB0aGUKKyAgICAvLyB0aGUgZmVuY2luZyB3b3JrZXIgd2hlbiBhbGwgYWN0aXZlIGpvYnMgYXJlIGRvbmUuCisgICAgaWYgKEZlbmNlUHJvY2Vzc2luZyAmJiBKb2JzUHJvY2Vzc2luZyA9PSAwKSB7CisgICAgICBDb25kaXRpb25GZW5jZS5ub3RpZnlfYWxsKCk7CisgICAgfQogICB9CiAKICAgLy8gRGVjcmVtZW50IHJ1bm5pbmcgd29ya2VycyBjb3VudApkaWZmIC0tZ2l0IGEvU291cmNlL2NtV29ya2luZ0RpcmVjdG9yeS5oIGIvU291cmNlL2NtV29ya2luZ0RpcmVjdG9yeS5oCmluZGV4IGQ0YTE2NGQuLjRjNzU3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVdvcmtpbmdEaXJlY3RvcnkuaAorKysgYi9Tb3VyY2UvY21Xb3JraW5nRGlyZWN0b3J5LmgKQEAgLTM3LDYgKzM3LDggQEAKICAgICovCiAgIGludCBHZXRMYXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gUmVzdWx0Q29kZTsgfQogCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXRPbGREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5PbGREaXI7IH0KKwogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgT2xkRGlyOwogICBpbnQgUmVzdWx0Q29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVdyaXRlRmlsZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtV3JpdGVGaWxlQ29tbWFuZC5jeHgKaW5kZXggMzRlMjFiMi4uNjY2YmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL2NtV3JpdGVGaWxlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtV3JpdGVGaWxlQ29tbWFuZC5jeHgKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBzdGF0dXMuU2V0RXJyb3IoZXJyb3IpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBmaWxlIDw8IG1lc3NhZ2UgPDwgc3RkOjplbmRsOworICBmaWxlIDw8IG1lc3NhZ2UgPDwgJ1xuJzsKICAgZmlsZS5jbG9zZSgpOwogICBpZiAobW9kZSAmJiAhd3JpdGFibGUpIHsKICAgICBjbVN5c3RlbVRvb2xzOjpTZXRQZXJtaXNzaW9ucyhmaWxlTmFtZS5jX3N0cigpLCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuY3h4IGIvU291cmNlL2NtWENvZGUyMU9iamVjdC5jeHgKaW5kZXggYTliYjJlZi4uNmIxMzNhOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtWENvZGUyMU9iamVjdC5jeHgKKysrIGIvU291cmNlL2NtWENvZGUyMU9iamVjdC5jeHgKQEAgLTMwLDExICszMCwxMiBAQAogICBvdXQgPDwgIiAqLyI7CiB9CiAKLXZvaWQgY21YQ29kZTIxT2JqZWN0OjpQcmludExpc3Qoc3RkOjp2ZWN0b3I8Y21YQ29kZU9iamVjdCo+IGNvbnN0JiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0mIG91dCwgUEJYVHlwZSB0KQordm9pZCBjbVhDb2RlMjFPYmplY3Q6OlByaW50TGlzdCgKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+PiBjb25zdCYgdiwgc3RkOjpvc3RyZWFtJiBvdXQsCisgIFBCWFR5cGUgdCkKIHsKICAgYm9vbCBoYXNPbmUgPSBmYWxzZTsKLSAgZm9yIChhdXRvIG9iaiA6IHYpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBvYmogOiB2KSB7CiAgICAgaWYgKG9iai0+R2V0VHlwZSgpID09IE9CSkVDVCAmJiBvYmotPkdldElzQSgpID09IHQpIHsKICAgICAgIGhhc09uZSA9IHRydWU7CiAgICAgICBicmVhazsKQEAgLTQ0LDcgKzQ1LDcgQEAKICAgICByZXR1cm47CiAgIH0KICAgb3V0IDw8ICJcbi8qIEJlZ2luICIgPDwgUEJYVHlwZU5hbWVzW3RdIDw8ICIgc2VjdGlvbiAqL1xuIjsKLSAgZm9yIChhdXRvIG9iaiA6IHYpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBvYmogOiB2KSB7CiAgICAgaWYgKG9iai0+R2V0VHlwZSgpID09IE9CSkVDVCAmJiBvYmotPkdldElzQSgpID09IHQpIHsKICAgICAgIG9iai0+UHJpbnQob3V0KTsKICAgICB9CkBAIC01Miw4ICs1Myw4IEBACiAgIG91dCA8PCAiLyogRW5kICIgPDwgUEJYVHlwZU5hbWVzW3RdIDw8ICIgc2VjdGlvbiAqL1xuIjsKIH0KIAotdm9pZCBjbVhDb2RlMjFPYmplY3Q6OlByaW50TGlzdChzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4gY29uc3QmIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgb3V0KQordm9pZCBjbVhDb2RlMjFPYmplY3Q6OlByaW50TGlzdCgKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+PiBjb25zdCYgdiwgc3RkOjpvc3RyZWFtJiBvdXQpCiB7CiAgIGNtWENvZGVPYmplY3Q6OkluZGVudCgxLCBvdXQpOwogICBvdXQgPDwgIm9iamVjdHMgPSB7XG4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtWENvZGUyMU9iamVjdC5oIGIvU291cmNlL2NtWENvZGUyMU9iamVjdC5oCmluZGV4IDhlNGI4MGYuLjc2ZmFkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuaAorKysgYi9Tb3VyY2UvY21YQ29kZTIxT2JqZWN0LmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiY21YQ29kZU9iamVjdC5oIgpAQCAtMTUsOCArMTYsOSBAQAogcHVibGljOgogICBjbVhDb2RlMjFPYmplY3QoUEJYVHlwZSBwdHlwZSwgVHlwZSB0eXBlKTsKICAgdm9pZCBQcmludENvbW1lbnQoc3RkOjpvc3RyZWFtJikgb3ZlcnJpZGU7Ci0gIHN0YXRpYyB2b2lkIFByaW50TGlzdChzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4gY29uc3QmLCBzdGQ6Om9zdHJlYW0mIG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBCWFR5cGUgdCk7Ci0gIHN0YXRpYyB2b2lkIFByaW50TGlzdChzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4gY29uc3QmLCBzdGQ6Om9zdHJlYW0mIG91dCk7CisgIHN0YXRpYyB2b2lkIFByaW50TGlzdChzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4+IGNvbnN0JiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgb3V0LCBQQlhUeXBlIHQpOworICBzdGF0aWMgdm9pZCBQcmludExpc3Qoc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+PiBjb25zdCYsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0mIG91dCk7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21YQ29kZU9iamVjdC5oIGIvU291cmNlL2NtWENvZGVPYmplY3QuaAppbmRleCBkOWJlM2QyLi4yNGVjYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21YQ29kZU9iamVjdC5oCisrKyBiL1NvdXJjZS9jbVhDb2RlT2JqZWN0LmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogY2xhc3MgY21HZW5lcmF0b3JUYXJnZXQ7CiAKQEAgLTgyLDEwICs4MiwxMyBAQAogICB2b2lkIFNldE9iamVjdChjbVhDb2RlT2JqZWN0KiB2YWx1ZSkgeyB0aGlzLT5PYmplY3QgPSB2YWx1ZTsgfQogICBjbVhDb2RlT2JqZWN0KiBHZXRPYmplY3QoKSB7IHJldHVybiB0aGlzLT5PYmplY3Q7IH0KICAgdm9pZCBBZGRPYmplY3QoY21YQ29kZU9iamVjdCogdmFsdWUpIHsgdGhpcy0+TGlzdC5wdXNoX2JhY2sodmFsdWUpOyB9Ci0gIGJvb2wgSGFzT2JqZWN0KGNtWENvZGVPYmplY3QqIG8pIGNvbnN0IHsgcmV0dXJuIGNtQ29udGFpbnModGhpcy0+TGlzdCwgbyk7IH0KKyAgYm9vbCBIYXNPYmplY3QoY21YQ29kZU9iamVjdCogbykgY29uc3QKKyAgeworICAgIHJldHVybiBjbTo6Y29udGFpbnModGhpcy0+TGlzdCwgbyk7CisgIH0KICAgdm9pZCBBZGRVbmlxdWVPYmplY3QoY21YQ29kZU9iamVjdCogdmFsdWUpCiAgIHsKLSAgICBpZiAoIWNtQ29udGFpbnModGhpcy0+TGlzdCwgdmFsdWUpKSB7CisgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+TGlzdCwgdmFsdWUpKSB7CiAgICAgICB0aGlzLT5MaXN0LnB1c2hfYmFjayh2YWx1ZSk7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21YQ29kZVNjaGVtZS5jeHggYi9Tb3VyY2UvY21YQ29kZVNjaGVtZS5jeHgKaW5kZXggYjM0YzJmNi4uNTVlOTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtWENvZGVTY2hlbWUuY3h4CisrKyBiL1NvdXJjZS9jbVhDb2RlU2NoZW1lLmN4eApAQCAtNyw2ICs3LDggQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtMzEsNyArMzMsNyBAQAogICAvLyBDcmVhdGUgc2hhcmVkIHNjaGVtZSBzdWItZGlyZWN0b3J5IHRyZWUKICAgLy8KICAgc3RkOjpzdHJpbmcgeGNvZGVTY2hlbWVEaXIgPSBjbVN0ckNhdCh4Y1Byb2pEaXIsICIveGNzaGFyZWRkYXRhL3hjc2NoZW1lcyIpOwotICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHhjb2RlU2NoZW1lRGlyLmNfc3RyKCkpOworICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHhjb2RlU2NoZW1lRGlyKTsKIAogICBzdGQ6OnN0cmluZyB4Y29kZVNjaGVtZUZpbGUgPQogICAgIGNtU3RyQ2F0KHhjb2RlU2NoZW1lRGlyLCAnLycsIHRoaXMtPlRhcmdldE5hbWUsICIueGNzY2hlbWUiKTsKQEAgLTIwMiwxNCArMjA0LDE0IEBACiAKICAgLy8gSW5mbyB0YWIgYmVnaW4KIAotICBpZiAoY29uc3QgY2hhciogZXhlID0KKyAgaWYgKGNtUHJvcCBleGUgPQogICAgICAgICB0aGlzLT5UYXJnZXQtPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiWENPREVfU0NIRU1FX0VYRUNVVEFCTEUiKSkgewogCiAgICAgeG91dC5TdGFydEVsZW1lbnQoIlBhdGhSdW5uYWJsZSIpOwogICAgIHhvdXQuQnJlYWtBdHRyaWJ1dGVzKCk7CiAKICAgICB4b3V0LkF0dHJpYnV0ZSgicnVubmFibGVEZWJ1Z2dpbmdNb2RlIiwgIjAiKTsKLSAgICB4b3V0LkF0dHJpYnV0ZSgiRmlsZVBhdGgiLCBleGUpOworICAgIHhvdXQuQXR0cmlidXRlKCJGaWxlUGF0aCIsICpleGUpOwogCiAgICAgeG91dC5FbmRFbGVtZW50KCk7IC8vIFBhdGhSdW5uYWJsZQogICB9CkBAIC0yMTgsOSArMjIwLDkgQEAKIAogICAvLyBBcmd1bWVudHMgdGFiIGJlZ2luCiAKLSAgaWYgKGNvbnN0IGNoYXIqIGFyZ0xpc3QgPQorICBpZiAoY21Qcm9wIGFyZ0xpc3QgPQogICAgICAgICB0aGlzLT5UYXJnZXQtPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiWENPREVfU0NIRU1FX0FSR1VNRU5UUyIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyZ3VtZW50cyA9IGNtRXhwYW5kZWRMaXN0KGFyZ0xpc3QpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmd1bWVudHMgPSBjbUV4cGFuZGVkTGlzdCgqYXJnTGlzdCk7CiAgICAgaWYgKCFhcmd1bWVudHMuZW1wdHkoKSkgewogICAgICAgeG91dC5TdGFydEVsZW1lbnQoIkNvbW1hbmRMaW5lQXJndW1lbnRzIik7CiAKQEAgLTIzOCw5ICsyNDAsOSBAQAogICAgIH0KICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBlbnZMaXN0ID0KKyAgaWYgKGNtUHJvcCBlbnZMaXN0ID0KICAgICAgICAgdGhpcy0+VGFyZ2V0LT5HZXRUYXJnZXQoKS0+R2V0UHJvcGVydHkoIlhDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVCIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGVudnMgPSBjbUV4cGFuZGVkTGlzdChlbnZMaXN0KTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZW52cyA9IGNtRXhwYW5kZWRMaXN0KCplbnZMaXN0KTsKICAgICBpZiAoIWVudnMuZW1wdHkoKSkgewogICAgICAgeG91dC5TdGFydEVsZW1lbnQoIkVudmlyb25tZW50VmFyaWFibGVzIik7CiAKQEAgLTMyMSw3ICszMjMsNyBAQAogICBjbVhNTFdyaXRlciYgeG91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFyTmFtZSwKICAgYm9vbCBkZWZhdWx0VmFsdWUpCiB7Ci0gIGF1dG8gcHJvcGVydHkgPSBUYXJnZXQtPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSh2YXJOYW1lKTsKKyAgY21Qcm9wIHByb3BlcnR5ID0gVGFyZ2V0LT5HZXRUYXJnZXQoKS0+R2V0UHJvcGVydHkodmFyTmFtZSk7CiAgIGJvb2wgaXNPbiA9IChwcm9wZXJ0eSA9PSBudWxscHRyICYmIGRlZmF1bHRWYWx1ZSkgfHwgY21Jc09uKHByb3BlcnR5KTsKIAogICBpZiAoaXNPbikgewpAQCAtMzkzLDcgKzM5NSw4IEBACiAgIHhvdXQuQnJlYWtBdHRyaWJ1dGVzKCk7CiAgIHhvdXQuQXR0cmlidXRlKCJCdWlsZGFibGVJZGVudGlmaWVyIiwgInByaW1hcnkiKTsKICAgeG91dC5BdHRyaWJ1dGUoIkJsdWVwcmludElkZW50aWZpZXIiLCB4Y09iai0+R2V0SWQoKSk7Ci0gIHhvdXQuQXR0cmlidXRlKCJCdWlsZGFibGVOYW1lIiwgeGNPYmotPkdldFRhcmdldCgpLT5HZXRGdWxsTmFtZSgpKTsKKyAgc3RkOjpzdHJpbmcgY29uc3Qgbm9Db25maWc7IC8vIEZJWE1FOiBXaGF0IGNvbmZpZyB0byB1c2UgaGVyZT8KKyAgeG91dC5BdHRyaWJ1dGUoIkJ1aWxkYWJsZU5hbWUiLCB4Y09iai0+R2V0VGFyZ2V0KCktPkdldEZ1bGxOYW1lKG5vQ29uZmlnKSk7CiAgIHhvdXQuQXR0cmlidXRlKCJCbHVlcHJpbnROYW1lIiwgeGNPYmotPkdldFRhcmdldCgpLT5HZXROYW1lKCkpOwogICB4b3V0LkF0dHJpYnV0ZSgiUmVmZXJlbmNlZENvbnRhaW5lciIsICJjb250YWluZXI6IiArIGNvbnRhaW5lcik7CiAgIHhvdXQuRW5kRWxlbWVudCgpOwpAQCAtNDAyLDggKzQwNSw5IEBACiB2b2lkIGNtWENvZGVTY2hlbWU6OldyaXRlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeSgKICAgY21YTUxXcml0ZXImIHhvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWd1cmF0aW9uKQogewotICBzdGQ6OnN0cmluZyBwcm9wZXJ0eVZhbHVlID0gdGhpcy0+VGFyZ2V0LT5HZXRUYXJnZXQoKS0+R2V0U2FmZVByb3BlcnR5KAotICAgICJYQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkiKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BlcnR5VmFsdWUgPQorICAgIHRoaXMtPlRhcmdldC0+R2V0VGFyZ2V0KCktPkdldFNhZmVQcm9wZXJ0eSgKKyAgICAgICJYQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkiKTsKICAgaWYgKHByb3BlcnR5VmFsdWUuZW1wdHkoKSkgewogICAgIHhvdXQuQXR0cmlidXRlKCJ1c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5IiwgIk5PIik7CiAgIH0gZWxzZSB7CkBAIC00MjcsNyArNDMxLDcgQEAKICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbiBieSBuYW1lLAogICAvLyBhbmQgaWYgaXQncyBub3QgZm91bmQgcmV0dXJuIGZpcnN0IGZyb20gdGhlIGxpc3QKICAgLy8KLSAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkNvbmZpZ0xpc3QsIG5hbWUpICYmICF0aGlzLT5Db25maWdMaXN0LmVtcHR5KCkpIHsKKyAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+Q29uZmlnTGlzdCwgbmFtZSkgJiYgIXRoaXMtPkNvbmZpZ0xpc3QuZW1wdHkoKSkgewogICAgIHJldHVybiB0aGlzLT5Db25maWdMaXN0WzBdOwogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVhNTFBhcnNlci5jeHggYi9Tb3VyY2UvY21YTUxQYXJzZXIuY3h4CmluZGV4IGFkNWM0YmEuLjI0ZGE4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhNTFBhcnNlci5jeHgKKysrIGIvU291cmNlL2NtWE1MUGFyc2VyLmN4eApAQCAtNyw5ICs3LDkgQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzc3RyZWFtPgogCi0jaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCisjaW5jbHVkZSA8Y20zcC9leHBhdC5oPgogCi0jaW5jbHVkZSAiY21fZXhwYXQuaCIKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogY21YTUxQYXJzZXI6OmNtWE1MUGFyc2VyKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVhNTFdyaXRlci5oIGIvU291cmNlL2NtWE1MV3JpdGVyLmgKaW5kZXggYmM0NDVhYS4uMDBlYTA4YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtWE1MV3JpdGVyLmgKKysrIGIvU291cmNlL2NtWE1MV3JpdGVyLmgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGNocm9ubz4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8Y3RpbWU+CiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdGFjaz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbV9nZXRfZGF0ZS5jIGIvU291cmNlL2NtX2dldF9kYXRlLmMKaW5kZXggNGJlZjgwMy4uNDlmNTU3NyAxMDA2NDQKLS0tIGEvU291cmNlL2NtX2dldF9kYXRlLmMKKysrIGIvU291cmNlL2NtX2dldF9kYXRlLmMKQEAgLTIsNiArMiwxMCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21fZ2V0X2RhdGUuaCIKIAorLy8gRklYTUU6IFRoaXMgc3VwcHJlc3NlcyB1c2Ugb2YgbG9jYWx0aW1lX3IgYmVjYXVzZSBhcmNoaXZlX2dldGRhdGUuYworLy8gZGVwZW5kcyB0aGUgcmVzdCBvZiBsaWJhcmNoaXZlJ3MgY2hlY2tzIGZvciB0aGF0LgorI2RlZmluZSBDTV9HRVRfREFURQorCiAjZGVmaW5lIF9fYXJjaGl2ZV9nZXRfZGF0ZSBjbV9nZXRfZGF0ZQogCiAjaW5jbHVkZSAiLi4vVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtX3N0YXRpY19zdHJpbmdfdmlldy5oeHggYi9Tb3VyY2UvY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA4YWM5NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fc3RhdGljX3N0cmluZ192aWV3X2h4eAotI2RlZmluZSBjbV9zdGF0aWNfc3RyaW5nX3ZpZXdfaHh4Ci0KLSNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgotCi1uYW1lc3BhY2UgY20gewotCi0vKiogQSBzdHJpbmdfdmlldyB0aGF0IG9ubHkgYmluZHMgdG8gc3RhdGljIHN0b3JhZ2UuCi0gKgotICogVGhpcyBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIGAiIl9zYCB1c2VyLWRlZmluZWQgbGl0ZXJhbCBvcGVyYXRvcgotICogdG8gY29uc3RydWN0IGEgdHlwZS1zYWZlIGFic3RyYWN0aW9uIG9mIGEgc3RyaW5nX3ZpZXcgdGhhdCBvbmx5IHZpZXdzCi0gKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJpbmdzLiAgVGhlc2Ugc3RyaW5ncyBhcmUgY29uc3QgYW5kIGF2YWlsYWJsZQotICogZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YgdGhlIHByb2dyYW0uCi0gKi8KLWNsYXNzIHN0YXRpY19zdHJpbmdfdmlldyA6IHB1YmxpYyBzdHJpbmdfdmlldwotewotICBzdGF0aWNfc3RyaW5nX3ZpZXcoc3RyaW5nX3ZpZXcgdikKLSAgICA6IHN0cmluZ192aWV3KHYpCi0gIHsKLSAgfQotCi0gIGZyaWVuZCBzdGF0aWNfc3RyaW5nX3ZpZXcgb3BlcmF0b3IiIiBfcyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7Ci19OwotCi0vKiogQ3JlYXRlIGEgc3RhdGljX3N0cmluZ192aWV3IHVzaW5nIGAiIl9zYCBsaXRlcmFsIHN5bnRheC4gICovCi1pbmxpbmUgc3RhdGljX3N0cmluZ192aWV3IG9wZXJhdG9yIiIgX3MoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gIHJldHVybiBzdHJpbmdfdmlldyhkYXRhLCBzaXplKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgY20KLQotdXNpbmcgY206Om9wZXJhdG9yIiIgX3M7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlLmN4eCBiL1NvdXJjZS9jbWFrZS5jeHgKaW5kZXggYTk5ZDlhNi4uNDVmYTQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlLmN4eAorKysgYi9Tb3VyY2UvY21ha2UuY3h4CkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdGRleGNlcHQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KQEAgLTE4LDYgKzE5LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCkBAIC0yNSw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJjbV9zeXNfc3RhdC5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Db21tYW5kcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCkBAIC0zOSw2ICs0MCw5IEBACiAjaW5jbHVkZSAiY21MaW5rTGluZUNvbXB1dGVyLmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisjICBpbmNsdWRlICJjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5oIgorI2VuZGlmCiAjaW5jbHVkZSAiY21NZXNzZW5nZXIuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZURpcmVjdG9yeS5oIgpAQCAtNTMsMTcgKzU3LDEzIEBACiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogIyAgaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KIAotIyAgaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKKyMgIGluY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAogIyAgaW5jbHVkZSAiY21GaWxlQVBJLmgiCiAjICBpbmNsdWRlICJjbUdyYXBoVml6V3JpdGVyLmgiCiAjICBpbmNsdWRlICJjbVZhcmlhYmxlV2F0Y2guaCIKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQotIyAgZGVmaW5lIENNQUtFX1VTRV9FQ0xJUFNFCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19NSU5HVzMyX18pICYmIGRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogIyAgZGVmaW5lIENNQUtFX0JPT1RfTUlOR1cKICNlbmRpZgpAQCAtOTcsMTYgKzk3LDEzIEBACiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogIyAgaW5jbHVkZSAiY21HbG9iYWxOaW5qYUdlbmVyYXRvci5oIgogI2VuZGlmCi0jaW5jbHVkZSAiY21FeHRyYUNvZGVMaXRlR2VuZXJhdG9yLmgiCiAKLSNpZiAhZGVmaW5lZChDTUFLRV9CT09UX01JTkdXKQorI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICMgIGluY2x1ZGUgImNtRXh0cmFDb2RlQmxvY2tzR2VuZXJhdG9yLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJjbUV4dHJhS2F0ZUdlbmVyYXRvci5oIgotI2luY2x1ZGUgImNtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5oIgotCi0jaWZkZWYgQ01BS0VfVVNFX0VDTElQU0UKKyMgIGluY2x1ZGUgImNtRXh0cmFDb2RlTGl0ZUdlbmVyYXRvci5oIgogIyAgaW5jbHVkZSAiY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yLmgiCisjICBpbmNsdWRlICJjbUV4dHJhS2F0ZUdlbmVyYXRvci5oIgorIyAgaW5jbHVkZSAiY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmgiCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9XSU4zMikKQEAgLTEzNCw2ICsxMzEsNyBAQAogc3RhdGljIGJvb2wgY21ha2VDaGVja1N0YW1wRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgc3RhbXBOYW1lKTsKIHN0YXRpYyBib29sIGNtYWtlQ2hlY2tTdGFtcExpc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHN0YW1wTGlzdCk7CiAKKyNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiBzdGF0aWMgdm9pZCBjbVdhcm5VbnVzZWRDbGlXYXJuaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSwgaW50IC8qdW51c2VkKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eCwgY29uc3QgY2hhciogLyp1bnVzZWQqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21NYWtlZmlsZSogLyp1bnVzZWQqLykKQEAgLTE0MSw2ICsxMzksNyBAQAogICBjbWFrZSogY20gPSByZWludGVycHJldF9jYXN0PGNtYWtlKj4oY3R4KTsKICAgY20tPk1hcmtDbGlBc1VzZWQodmFyaWFibGUpOwogfQorI2VuZGlmCiAKIGNtYWtlOjpjbWFrZShSb2xlIHJvbGUsIGNtU3RhdGU6Ok1vZGUgbW9kZSkKICAgOiBGaWxlVGltZUNhY2hlKGNtOjptYWtlX3VuaXF1ZTxjbUZpbGVUaW1lQ2FjaGU+KCkpCkBAIC0xOTUsNyArMTk0LDcgQEAKICAgICB9OwogCiAgICAgLy8gVGhlICJjIiBleHRlbnNpb24gTVVTVCBwcmVjZWRlIHRoZSAiQyIgZXh0ZW5zaW9uLgotICAgIHNldHVwRXh0cyh0aGlzLT5Tb3VyY2VGaWxlRXh0ZW5zaW9ucywKKyAgICBzZXR1cEV4dHModGhpcy0+Q0xpa2VTb3VyY2VGaWxlRXh0ZW5zaW9ucywKICAgICAgICAgICAgICAgeyAiYyIsICJDIiwgImMrKyIsICJjYyIsICJjcHAiLCAiY3h4IiwgImN1IiwgIm0iLCAiTSIsICJtbSIgfSk7CiAgICAgc2V0dXBFeHRzKHRoaXMtPkhlYWRlckZpbGVFeHRlbnNpb25zLAogICAgICAgICAgICAgICB7ICJoIiwgImhoIiwgImgrKyIsICJobSIsICJocHAiLCAiaHh4IiwgImluIiwgInR4eCIgfSk7CkBAIC0yODUsMTAgKzI4NCwxMSBAQAogLy8gUGFyc2UgdGhlIGFyZ3MKIGJvb2wgY21ha2U6OlNldENhY2hlQXJncyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGFyZ3MpCiB7Ci0gIGJvb2wgZmluZFBhY2thZ2VNb2RlID0gZmFsc2U7CisgIGF1dG8gZmluZFBhY2thZ2VNb2RlID0gZmFsc2U7CisgIGF1dG8gc2VlblNjcmlwdE9wdGlvbiA9IGZhbHNlOwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJnID0gYXJnc1tpXTsKLSAgICBpZiAoYXJnLmZpbmQoIi1EIiwgMCkgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUQiKSkgewogICAgICAgc3RkOjpzdHJpbmcgZW50cnkgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKGVudHJ5LmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtMzA5LDggKzMwOSw3IEBACiAgICAgICAgIGJvb2wgaGF2ZVZhbHVlID0gZmFsc2U7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGNhY2hlZFZhbHVlOwogICAgICAgICBpZiAodGhpcy0+V2FyblVudXNlZENsaSkgewotICAgICAgICAgIGlmIChjb25zdCBzdGQ6OnN0cmluZyogdiA9Ci0gICAgICAgICAgICAgICAgdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSh2YXIpKSB7CisgICAgICAgICAgaWYgKGNtUHJvcCB2ID0gdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSh2YXIpKSB7CiAgICAgICAgICAgICBoYXZlVmFsdWUgPSB0cnVlOwogICAgICAgICAgICAgY2FjaGVkVmFsdWUgPSAqdjsKICAgICAgICAgICB9CkBAIC0zNzcsNyArMzc2LDcgQEAKICAgICAgICAgLy8gLVduby1lcnJvcj08bmFtZT4KICAgICAgICAgdGhpcy0+RGlhZ0xldmVsc1tuYW1lXSA9IHN0ZDo6bWluKHRoaXMtPkRpYWdMZXZlbHNbbmFtZV0sIERJQUdfV0FSTik7CiAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLVUiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLVUiKSkgewogICAgICAgc3RkOjpzdHJpbmcgZW50cnlQYXR0ZXJuID0gYXJnLnN1YnN0cigyKTsKICAgICAgIGlmIChlbnRyeVBhdHRlcm4uZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC00MDcsNyArNDA2LDcgQEAKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGN1cnJlbnRFbnRyeSA6IGVudHJpZXNUb0RlbGV0ZSkgewogICAgICAgICB0aGlzLT5TdGF0ZS0+UmVtb3ZlQ2FjaGVFbnRyeShjdXJyZW50RW50cnkpOwogICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1DIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1DIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC00MjIsNyArNDIxLDcgQEAKICAgICAgIC8vIFJlc29sdmUgc2NyaXB0IHBhdGggc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZSByZWxhdGl2ZSB0byAkUFdELgogICAgICAgcGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCk7CiAgICAgICB0aGlzLT5SZWFkTGlzdEZpbGUoYXJncywgcGF0aCk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLVAiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLVAiKSkgewogICAgICAgaSsrOwogICAgICAgaWYgKGkgPj0gYXJncy5zaXplKCkpIHsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIi1QIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBmaWxlIG5hbWUuIik7CkBAIC00NDEsNyArNDQwLDEyIEBACiAgICAgICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KAogICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpKTsKICAgICAgIHRoaXMtPlJlYWRMaXN0RmlsZShhcmdzLCBwYXRoKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWZpbmQtcGFja2FnZSIsIDApID09IDApIHsKKyAgICAgIHNlZW5TY3JpcHRPcHRpb24gPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJnID09ICItLSIgJiYgc2VlblNjcmlwdE9wdGlvbikgeworICAgICAgLy8gU3RvcCBwcm9jZXNzaW5nIENNYWtlIGFyZ3MgYW5kIGF2b2lkIHBvc3NpYmxlIGVycm9ycworICAgICAgLy8gd2hlbiBhcmJpdHJhcnkgYXJncyBhcmUgZ2l2ZW4gdG8gQ01ha2Ugc2NyaXB0LgorICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1maW5kLXBhY2thZ2UiKSkgewogICAgICAgZmluZFBhY2thZ2VNb2RlID0gdHJ1ZTsKICAgICB9CiAgIH0KQEAgLTUyMCwxMSArNTI0LDExIEBACiAgICAgaWYgKCFxdWlldCkgewogICAgICAgcHJpbnRmKCIlcyBub3QgZm91bmQuXG4iLCBwYWNrYWdlTmFtZS5jX3N0cigpKTsKICAgICB9Ci0gIH0gZWxzZSBpZiAobW9kZSA9PSAiRVhJU1QiKSB7CisgIH0gZWxzZSBpZiAobW9kZSA9PSAiRVhJU1QiX3MpIHsKICAgICBpZiAoIXF1aWV0KSB7CiAgICAgICBwcmludGYoIiVzIGZvdW5kLlxuIiwgcGFja2FnZU5hbWUuY19zdHIoKSk7CiAgICAgfQotICB9IGVsc2UgaWYgKG1vZGUgPT0gIkNPTVBJTEUiKSB7CisgIH0gZWxzZSBpZiAobW9kZSA9PSAiQ09NUElMRSJfcykgewogICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzID0gbWYtPkdldFNhZmVEZWZpbml0aW9uKCJQQUNLQUdFX0lOQ0xVREVfRElSUyIpOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlRGlycyA9IGNtRXhwYW5kZWRMaXN0KGluY2x1ZGVzKTsKIApAQCAtNTM1LDcgKzUzOSw3IEBACiAKICAgICBzdGQ6OnN0cmluZyBkZWZpbml0aW9ucyA9IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiUEFDS0FHRV9ERUZJTklUSU9OUyIpOwogICAgIHByaW50ZigiJXMgJXNcbiIsIGluY2x1ZGVGbGFncy5jX3N0cigpLCBkZWZpbml0aW9ucy5jX3N0cigpKTsKLSAgfSBlbHNlIGlmIChtb2RlID09ICJMSU5LIikgeworICB9IGVsc2UgaWYgKG1vZGUgPT0gIkxJTksiX3MpIHsKICAgICBjb25zdCBjaGFyKiB0YXJnZXROYW1lID0gImR1bW15IjsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3JjczsKICAgICBjbVRhcmdldCogdGd0ID0gbWYtPkFkZEV4ZWN1dGFibGUodGFyZ2V0TmFtZSwgc3JjcywgdHJ1ZSk7CkBAIC02MTMsOSArNjE3LDEzIEBACiB7CiAgIGJvb2wgaGF2ZVRvb2xzZXQgPSBmYWxzZTsKICAgYm9vbCBoYXZlUGxhdGZvcm0gPSBmYWxzZTsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIHN0ZDo6c3RyaW5nIHByb2ZpbGluZ0Zvcm1hdDsKKyAgc3RkOjpzdHJpbmcgcHJvZmlsaW5nT3V0cHV0OworI2VuZGlmCiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgPSBhcmdzW2ldOwotICAgIGlmIChhcmcuZmluZCgiLUgiLCAwKSA9PSAwIHx8IGFyZy5maW5kKCItUyIsIDApID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1IIikgfHwgY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1TIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC02MzMsOSArNjQxLDExIEBACiAgICAgICBwYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHBhdGgpOwogICAgICAgdGhpcy0+U2V0SG9tZURpcmVjdG9yeShwYXRoKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItTyIsIDApID09IDApIHsKKyAgICAgIC8vIFhYWChjbGFuZy10aWR5KTogaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NQorICAgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtYnJhbmNoLWNsb25lKQorICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1PIikpIHsKICAgICAgIC8vIFRoZXJlIGlzIG5vIGxvY2FsIGdlbmVyYXRlIGFueW1vcmUuICBJZ25vcmUgLU8gb3B0aW9uLgotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1CIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1CIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC02NTQsNTQgKzY2NCw0MyBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMocGF0aCk7CiAgICAgICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KHBhdGgpOwogICAgIH0gZWxzZSBpZiAoKGkgPCBhcmdzLnNpemUoKSAtIDIpICYmCi0gICAgICAgICAgICAgICAoYXJnLmZpbmQoIi0tY2hlY2stYnVpbGQtc3lzdGVtIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLWJ1aWxkLXN5c3RlbSIpKSB7CiAgICAgICB0aGlzLT5DaGVja0J1aWxkU3lzdGVtQXJndW1lbnQgPSBhcmdzWysraV07CiAgICAgICB0aGlzLT5DbGVhckJ1aWxkU3lzdGVtID0gKGF0b2koYXJnc1srK2ldLmNfc3RyKCkpID4gMCk7CiAgICAgfSBlbHNlIGlmICgoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgJiYKLSAgICAgICAgICAgICAgIChhcmcuZmluZCgiLS1jaGVjay1zdGFtcC1maWxlIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN0YW1wLWZpbGUiKSkgewogICAgICAgdGhpcy0+Q2hlY2tTdGFtcEZpbGUgPSBhcmdzWysraV07CiAgICAgfSBlbHNlIGlmICgoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgJiYKLSAgICAgICAgICAgICAgIChhcmcuZmluZCgiLS1jaGVjay1zdGFtcC1saXN0IiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN0YW1wLWxpc3QiKSkgewogICAgICAgdGhpcy0+Q2hlY2tTdGFtcExpc3QgPSBhcmdzWysraV07Ci0gICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tcmVnZW5lcmF0ZS1kdXJpbmctYnVpbGQiKSB7CisgICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tcmVnZW5lcmF0ZS1kdXJpbmctYnVpbGQiX3MpIHsKICAgICAgIHRoaXMtPlJlZ2VuZXJhdGVEdXJpbmdCdWlsZCA9IHRydWU7CiAgICAgfQogI2lmIGRlZmluZWQoQ01BS0VfSEFWRV9WU19HRU5FUkFUT1JTKQogICAgIGVsc2UgaWYgKChpIDwgYXJncy5zaXplKCkgLSAxKSAmJgotICAgICAgICAgICAgIChhcmcuZmluZCgiLS12cy1zb2x1dGlvbi1maWxlIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS12cy1zb2x1dGlvbi1maWxlIikpIHsKICAgICAgIHRoaXMtPlZTU29sdXRpb25GaWxlID0gYXJnc1srK2ldOwogICAgIH0KICNlbmRpZgotICAgIGVsc2UgaWYgKGFyZy5maW5kKCItRCIsIDApID09IDApIHsKKyAgICBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUQiKSB8fCBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLVUiKSB8fAorICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItQyIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKLSAgICAgIC8vIGluIGNhc2UgJy1EIHZhcj12YWwnIGlzIGdpdmVuLCBhbHNvIHNraXAgdGhlIG5leHQKLSAgICAgIC8vIGluIGNhc2UgJy1EdmFyPXZhbCcgaXMgZ2l2ZW4sIGRvbid0IHNraXAgdGhlIG5leHQKKyAgICAgIC8vIGluIGNhc2UgJy1bRFVDXSBhcmd2YWwnIHZhcicgaXMgZ2l2ZW4sIGFsc28gc2tpcCB0aGUgbmV4dAorICAgICAgLy8gaW4gY2FzZSAnLVtEVUNdYXJndmFsJyBpcyBnaXZlbiwgZG9uJ3Qgc2tpcCB0aGUgbmV4dAogICAgICAgaWYgKGFyZy5zaXplKCkgPT0gMikgewogICAgICAgICArK2k7CiAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLVUiLCAwKSA9PSAwKSB7Ci0gICAgICAvLyBza2lwIGZvciBub3cKLSAgICAgIC8vIGluIGNhc2UgJy1VIHZhcicgaXMgZ2l2ZW4sIGFsc28gc2tpcCB0aGUgbmV4dAotICAgICAgLy8gaW4gY2FzZSAnLVV2YXInIGlzIGdpdmVuLCBkb24ndCBza2lwIHRoZSBuZXh0Ci0gICAgICBpZiAoYXJnLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgICsraTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItQyIsIDApID09IDApIHsKLSAgICAgIC8vIHNraXAgZm9yIG5vdwotICAgICAgLy8gaW4gY2FzZSAnLUMgcGF0aCcgaXMgZ2l2ZW4sIGFsc28gc2tpcCB0aGUgbmV4dAotICAgICAgLy8gaW4gY2FzZSAnLUNwYXRoJyBpcyBnaXZlbiwgZG9uJ3Qgc2tpcCB0aGUgbmV4dAotICAgICAgaWYgKGFyZy5zaXplKCkgPT0gMikgewotICAgICAgICArK2k7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLVAiLCAwKSA9PSAwKSB7CisgICAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItUCIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKICAgICAgIGkrKzsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWZpbmQtcGFja2FnZSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWZpbmQtcGFja2FnZSIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKICAgICAgIGkrKzsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItVyIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItVyIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWdyYXBodml6PSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWdyYXBodml6PSIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBwYXRoID0gYXJnLnN1YnN0cihzdHJsZW4oIi0tZ3JhcGh2aXo9IikpOwogICAgICAgcGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhwYXRoKTsKQEAgLTcxMCwxMyArNzA5LDEzIEBACiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBmaWxlIHNwZWNpZmllZCBmb3IgLS1ncmFwaHZpeiIpOwogICAgICAgICByZXR1cm47CiAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1kZWJ1Zy10cnljb21waWxlIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZGVidWctdHJ5Y29tcGlsZSIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgImRlYnVnIHRyeWNvbXBpbGUgb25cbiI7CiAgICAgICB0aGlzLT5EZWJ1Z1RyeUNvbXBpbGVPbigpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tZGVidWctb3V0cHV0IiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZGVidWctb3V0cHV0IikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiUnVubmluZyB3aXRoIGRlYnVnIG91dHB1dCBvbi5cbiI7CiAgICAgICB0aGlzLT5TZXREZWJ1Z091dHB1dE9uKHRydWUpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tbG9nLWxldmVsPSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWxvZy1sZXZlbD0iKSkgewogICAgICAgY29uc3QgYXV0byBsb2dMZXZlbCA9CiAgICAgICAgIFN0cmluZ1RvTG9nTGV2ZWwoYXJnLnN1YnN0cihzaXplb2YoIi0tbG9nLWxldmVsPSIpIC0gMSkpOwogICAgICAgaWYgKGxvZ0xldmVsID09IExvZ0xldmVsOjpMT0dfVU5ERUZJTkVEKSB7CkBAIC03MjUsNyArNzI0LDcgQEAKICAgICAgIH0KICAgICAgIHRoaXMtPlNldExvZ0xldmVsKGxvZ0xldmVsKTsKICAgICAgIHRoaXMtPkxvZ0xldmVsV2FzU2V0VmlhQ0xJID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWxvZ2xldmVsPSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWxvZ2xldmVsPSIpKSB7CiAgICAgICAvLyBUaGlzIGlzIHN1cHBvcnRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gVGhpcyBvcHRpb24gb25seQogICAgICAgLy8gYXBwZWFyZWQgaW4gdGhlIDMuMTUueCByZWxlYXNlIHNlcmllcyBhbmQgd2FzIHJlbmFtZWQgdG8KICAgICAgIC8vIC0tbG9nLWxldmVsIGluIDMuMTYuMApAQCAtNzM3LDE2ICs3MzYsMTYgQEAKICAgICAgIH0KICAgICAgIHRoaXMtPlNldExvZ0xldmVsKGxvZ0xldmVsKTsKICAgICAgIHRoaXMtPkxvZ0xldmVsV2FzU2V0VmlhQ0xJID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1sb2ctY29udGV4dCIpIHsKKyAgICB9IGVsc2UgaWYgKGFyZyA9PSAiLS1sb2ctY29udGV4dCJfcykgewogICAgICAgdGhpcy0+U2V0U2hvd0xvZ0NvbnRleHQodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1kZWJ1Zy1maW5kIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZGVidWctZmluZCIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIlJ1bm5pbmcgd2l0aCBkZWJ1ZyBvdXRwdXQgb24gZm9yIHRoZSBgZmluZGAgY29tbWFuZHMuXG4iOwogICAgICAgdGhpcy0+U2V0RGVidWdGaW5kT3V0cHV0T24odHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZS1leHBhbmQiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS10cmFjZS1leHBhbmQiKSkgewogICAgICAgc3RkOjpjb3V0IDw8ICJSdW5uaW5nIHdpdGggZXhwYW5kZWQgdHJhY2Ugb3V0cHV0IG9uLlxuIjsKICAgICAgIHRoaXMtPlNldFRyYWNlKHRydWUpOwogICAgICAgdGhpcy0+U2V0VHJhY2VFeHBhbmQodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZS1mb3JtYXQ9IiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tdHJhY2UtZm9ybWF0PSIpKSB7CiAgICAgICB0aGlzLT5TZXRUcmFjZSh0cnVlKTsKICAgICAgIGNvbnN0IGF1dG8gdHJhY2VGb3JtYXQgPQogICAgICAgICBTdHJpbmdUb1RyYWNlRm9ybWF0KGFyZy5zdWJzdHIoc3RybGVuKCItLXRyYWNlLWZvcm1hdD0iKSkpOwpAQCAtNzU2LDM1ICs3NTUsMzQgQEAKICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgICAgdGhpcy0+U2V0VHJhY2VGb3JtYXQodHJhY2VGb3JtYXQpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tdHJhY2Utc291cmNlPSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXRyYWNlLXNvdXJjZT0iKSkgewogICAgICAgc3RkOjpzdHJpbmcgZmlsZSA9IGFyZy5zdWJzdHIoc3RybGVuKCItLXRyYWNlLXNvdXJjZT0iKSk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhmaWxlKTsKICAgICAgIHRoaXMtPkFkZFRyYWNlU291cmNlKGZpbGUpOwogICAgICAgdGhpcy0+U2V0VHJhY2UodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZS1yZWRpcmVjdD0iLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS10cmFjZS1yZWRpcmVjdD0iKSkgewogICAgICAgc3RkOjpzdHJpbmcgZmlsZSA9IGFyZy5zdWJzdHIoc3RybGVuKCItLXRyYWNlLXJlZGlyZWN0PSIpKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKGZpbGUpOwogICAgICAgdGhpcy0+U2V0VHJhY2VGaWxlKGZpbGUpOwogICAgICAgdGhpcy0+U2V0VHJhY2UodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXRyYWNlIikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiUnVubmluZyB3aXRoIHRyYWNlIG91dHB1dCBvbi5cbiI7CiAgICAgICB0aGlzLT5TZXRUcmFjZSh0cnVlKTsKICAgICAgIHRoaXMtPlNldFRyYWNlRXhwYW5kKGZhbHNlKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLXdhcm4tdW5pbml0aWFsaXplZCIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXdhcm4tdW5pbml0aWFsaXplZCIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIldhcm4gYWJvdXQgdW5pbml0aWFsaXplZCB2YWx1ZXMuXG4iOwogICAgICAgdGhpcy0+U2V0V2FyblVuaW5pdGlhbGl6ZWQodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS13YXJuLXVudXNlZC12YXJzIiwgMCkgPT0gMCkgewotICAgICAgc3RkOjpjb3V0IDw8ICJGaW5kaW5nIHVudXNlZCB2YXJpYWJsZXMuXG4iOwotICAgICAgdGhpcy0+U2V0V2FyblVudXNlZCh0cnVlKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLW5vLXdhcm4tdW51c2VkLWNsaSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXdhcm4tdW51c2VkLXZhcnMiKSkgeworICAgICAgLy8gT3B0aW9uIHdhcyByZW1vdmVkLgorICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tbm8td2Fybi11bnVzZWQtY2xpIikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiTm90IHNlYXJjaGluZyBmb3IgdW51c2VkIHZhcmlhYmxlcyBnaXZlbiBvbiB0aGUgIgogICAgICAgICAgICAgICAgIDw8ICJjb21tYW5kIGxpbmUuXG4iOwogICAgICAgdGhpcy0+U2V0V2FyblVudXNlZENsaShmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1jaGVjay1zeXN0ZW0tdmFycyIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN5c3RlbS12YXJzIikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiQWxzbyBjaGVjayBzeXN0ZW0gZmlsZXMgd2hlbiB3YXJuaW5nIGFib3V0IHVudXNlZCBhbmQgIgogICAgICAgICAgICAgICAgIDw8ICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiI7CiAgICAgICB0aGlzLT5TZXRDaGVja1N5c3RlbVZhcnModHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLUEiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUEiKSkgewogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtODAwLDcgKzc5OCw3IEBACiAgICAgICB9CiAgICAgICB0aGlzLT5TZXRHZW5lcmF0b3JQbGF0Zm9ybSh2YWx1ZSk7CiAgICAgICBoYXZlUGxhdGZvcm0gPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1UIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1UIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cigyKTsKICAgICAgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICAgICsraTsKQEAgLTgxNiw3ICs4MTQsNyBAQAogICAgICAgfQogICAgICAgdGhpcy0+U2V0R2VuZXJhdG9yVG9vbHNldCh2YWx1ZSk7CiAgICAgICBoYXZlVG9vbHNldCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLUciLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUciKSkgewogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtODQwLDYgKzgzOCwyMCBAQAogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbikpOworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXByb2ZpbGluZy1mb3JtYXQiKSkgeworICAgICAgcHJvZmlsaW5nRm9ybWF0ID0gYXJnLnN1YnN0cihzdHJsZW4oIi0tcHJvZmlsaW5nLWZvcm1hdD0iKSk7CisgICAgICBpZiAocHJvZmlsaW5nRm9ybWF0LmVtcHR5KCkpIHsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIGZvcm1hdCBzcGVjaWZpZWQgZm9yIC0tcHJvZmlsaW5nLWZvcm1hdCIpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tcHJvZmlsaW5nLW91dHB1dCIpKSB7CisgICAgICBwcm9maWxpbmdPdXRwdXQgPSBhcmcuc3Vic3RyKHN0cmxlbigiLS1wcm9maWxpbmctb3V0cHV0PSIpKTsKKyAgICAgIHByb2ZpbGluZ091dHB1dCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZmlsaW5nT3V0cHV0KTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHByb2ZpbGluZ091dHB1dCk7CisgICAgICBpZiAocHJvZmlsaW5nT3V0cHV0LmVtcHR5KCkpIHsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIHBhdGggc3BlY2lmaWVkIGZvciAtLXByb2ZpbGluZy1vdXRwdXQiKTsKKyAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgICAvLyBubyBvcHRpb24gYXNzdW1lIGl0IGlzIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2Ugb3IgYW4gZXhpc3RpbmcgYnVpbGQKICAgICBlbHNlIHsKQEAgLTg1Nyw2ICs4NjksMjkgQEAKICAgICB9CiAgIH0KIAorI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgaWYgKCFwcm9maWxpbmdPdXRwdXQuZW1wdHkoKSB8fCAhcHJvZmlsaW5nRm9ybWF0LmVtcHR5KCkpIHsKKyAgICBpZiAocHJvZmlsaW5nT3V0cHV0LmVtcHR5KCkpIHsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgICAiLS1wcm9maWxpbmctZm9ybWF0IHNwZWNpZmllZCBidXQgbm8gLS1wcm9maWxpbmctb3V0cHV0ISIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocHJvZmlsaW5nRm9ybWF0ID09ICJnb29nbGUtdHJhY2UiX3MpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHRoaXMtPlByb2ZpbGluZ091dHB1dCA9CisgICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhPihwcm9maWxpbmdPdXRwdXQpOworICAgICAgfSBjYXRjaCAoc3RkOjpydW50aW1lX2Vycm9yJiBlKSB7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgICAgIGNtU3RyQ2F0KCJDb3VsZCBub3Qgc3RhcnQgcHJvZmlsaW5nOiAiLCBlLndoYXQoKSkpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIC0tcHJvZmlsaW5nLWZvcm1hdCIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorI2VuZGlmCisKICAgY29uc3QgYm9vbCBoYXZlU291cmNlRGlyID0gIXRoaXMtPkdldEhvbWVEaXJlY3RvcnkoKS5lbXB0eSgpOwogICBjb25zdCBib29sIGhhdmVCaW5hcnlEaXIgPSAhdGhpcy0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLmVtcHR5KCk7CiAKQEAgLTk5Miw5ICsxMDI3LDkgQEAKICAgICBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoYXJnKTsKICAgICBzdGQ6OnN0cmluZyBuYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZ1bGxQYXRoKTsKICAgICBuYW1lID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKG5hbWUpOwotICAgIGlmIChuYW1lID09ICJjbWFrZWNhY2hlLnR4dCIpIHsKKyAgICBpZiAobmFtZSA9PSAiY21ha2VjYWNoZS50eHQiX3MpIHsKICAgICAgIGNhY2hlUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChmdWxsUGF0aCk7Ci0gICAgfSBlbHNlIGlmIChuYW1lID09ICJjbWFrZWxpc3RzLnR4dCIpIHsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImNtYWtlbGlzdHMudHh0Il9zKSB7CiAgICAgICBsaXN0UGF0aCA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChmdWxsUGF0aCk7CiAgICAgfQogICB9IGVsc2UgewpAQCAtMTAwMyw3ICsxMDM4LDcgQEAKICAgICBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoYXJnKTsKICAgICBzdGQ6OnN0cmluZyBuYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZ1bGxQYXRoKTsKICAgICBuYW1lID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKG5hbWUpOwotICAgIGlmIChuYW1lID09ICJjbWFrZWNhY2hlLnR4dCIgfHwgbmFtZSA9PSAiY21ha2VsaXN0cy50eHQiKSB7CisgICAgaWYgKG5hbWUgPT0gImNtYWtlY2FjaGUudHh0Il9zIHx8IG5hbWUgPT0gImNtYWtlbGlzdHMudHh0Il9zKSB7CiAgICAgICBhcmdJc0ZpbGUgPSB0cnVlOwogICAgICAgbGlzdFBhdGggPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoZnVsbFBhdGgpOwogICAgIH0gZWxzZSB7CkBAIC0xMDE0LDExICsxMDQ5LDExIEBACiAgIC8vIElmIHRoZXJlIGlzIGEgQ01ha2VDYWNoZS50eHQgZmlsZSwgdXNlIGl0cyBzZXR0aW5ncy4KICAgaWYgKCFjYWNoZVBhdGguZW1wdHkoKSkgewogICAgIGlmICh0aGlzLT5Mb2FkQ2FjaGUoY2FjaGVQYXRoKSkgewotICAgICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9CisgICAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIik7CiAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkgewogICAgICAgICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KGNhY2hlUGF0aCk7Ci0gICAgICAgIHRoaXMtPlNldEhvbWVEaXJlY3RvcnkoZXhpc3RpbmdWYWx1ZSk7CisgICAgICAgIHRoaXMtPlNldEhvbWVEaXJlY3RvcnkoKmV4aXN0aW5nVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQpAQCAtMTA5NCwxMyArMTEyOSw5IEBACiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogICB0aGlzLT5FeHRyYUdlbmVyYXRvcnMucHVzaF9iYWNrKGNtRXh0cmFDb2RlQmxvY2tzR2VuZXJhdG9yOjpHZXRGYWN0b3J5KCkpOwogICB0aGlzLT5FeHRyYUdlbmVyYXRvcnMucHVzaF9iYWNrKGNtRXh0cmFDb2RlTGl0ZUdlbmVyYXRvcjo6R2V0RmFjdG9yeSgpKTsKLSAgdGhpcy0+RXh0cmFHZW5lcmF0b3JzLnB1c2hfYmFjayhjbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3I6OkdldEZhY3RvcnkoKSk7Ci0gIHRoaXMtPkV4dHJhR2VuZXJhdG9ycy5wdXNoX2JhY2soY21FeHRyYUthdGVHZW5lcmF0b3I6OkdldEZhY3RvcnkoKSk7Ci0KLSMgIGlmZGVmIENNQUtFX1VTRV9FQ0xJUFNFCiAgIHRoaXMtPkV4dHJhR2VuZXJhdG9ycy5wdXNoX2JhY2soY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yOjpHZXRGYWN0b3J5KCkpOwotIyAgZW5kaWYKLQorICB0aGlzLT5FeHRyYUdlbmVyYXRvcnMucHVzaF9iYWNrKGNtRXh0cmFLYXRlR2VuZXJhdG9yOjpHZXRGYWN0b3J5KCkpOworICB0aGlzLT5FeHRyYUdlbmVyYXRvcnMucHVzaF9iYWNrKGNtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvcjo6R2V0RmFjdG9yeSgpKTsKICNlbmRpZgogfQogCkBAIC0xMzQwLDcgKzEzNzEsNyBAQAogCiBpbnQgY21ha2U6OkhhbmRsZURlbGV0ZUNhY2hlVmFyaWFibGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXIpCiB7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzU3BsaXQgPSBjbUV4cGFuZGVkTGlzdChzdGQ6OnN0cmluZyh2YXIpLCB0cnVlKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyZ3NTcGxpdCA9IGNtRXhwYW5kZWRMaXN0KHZhciwgdHJ1ZSk7CiAgIC8vIGVyYXNlIHRoZSBwcm9wZXJ0eSB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24KICAgdGhpcy0+U3RhdGUtPlNldEdsb2JhbFByb3BlcnR5KCJfX0NNQUtFX0RFTEVURV9DQUNIRV9DSEFOR0VfVkFSU18iLCAiIik7CiAgIGlmICh0aGlzLT5TdGF0ZS0+R2V0SXNJblRyeUNvbXBpbGUoKSkgewpAQCAtMTM2MSwxMiArMTM5MiwxMiBAQAogICAgIGkrKzsKICAgICBzYXZlLnZhbHVlID0gKmk7CiAgICAgd2FybmluZyA8PCAqaSA8PCAiXG4iOwotICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHNhdmUua2V5KTsKKyAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoc2F2ZS5rZXkpOwogICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7CiAgICAgICBzYXZlLnR5cGUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVR5cGUoc2F2ZS5rZXkpOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGhlbHAgPQorICAgICAgaWYgKGNtUHJvcCBoZWxwID0KICAgICAgICAgICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoc2F2ZS5rZXksICJIRUxQU1RSSU5HIikpIHsKLSAgICAgICAgc2F2ZS5oZWxwID0gaGVscDsKKyAgICAgICAgc2F2ZS5oZWxwID0gKmhlbHA7CiAgICAgICB9CiAgICAgfQogICAgIHNhdmVkLnB1c2hfYmFjayhzdGQ6Om1vdmUoc2F2ZSkpOwpAQCAtMTQxMSw5ICsxNDQyLDkgQEAKICAgaWYgKHRoaXMtPkRpYWdMZXZlbHMuY291bnQoImRldiIpID09IDEpIHsKICAgICBib29sIHNldERlcHJlY2F0ZWRWYXJpYWJsZXMgPSBmYWxzZTsKIAotICAgIGNvbnN0IGNoYXIqIGNhY2hlZFdhcm5EZXByZWNhdGVkID0KKyAgICBjbVByb3AgY2FjaGVkV2FybkRlcHJlY2F0ZWQgPQogICAgICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIik7Ci0gICAgY29uc3QgY2hhciogY2FjaGVkRXJyb3JEZXByZWNhdGVkID0KKyAgICBjbVByb3AgY2FjaGVkRXJyb3JEZXByZWNhdGVkID0KICAgICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0VSUk9SX0RFUFJFQ0FURUQiKTsKIAogICAgIC8vIGRvbid0IG92ZXJ3cml0ZSBkZXByZWNhdGVkIHdhcm5pbmcgc2V0dGluZyBmcm9tIGEgcHJldmlvdXMgaW52b2NhdGlvbgpAQCAtMTQ1Miw4ICsxNDgzLDggQEAKICAgLy8gQ2FjaGUgdmFyaWFibGVzIG1heSBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYnkgYSBwcmV2aW91cyBpbnZvY2F0aW9uLAogICAvLyBzbyB3ZSBjYW5ub3QgcmVseSBvbiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhbG9uZS4gQWx3YXlzIGVuc3VyZSBvdXIKICAgLy8gbWVzc2VuZ2VyIGlzIGluIHN5bmMgd2l0aCB0aGUgY2FjaGUuCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIik7Ci0gIHRoaXMtPk1lc3Nlbmdlci0+U2V0U3VwcHJlc3NEZXByZWNhdGVkV2FybmluZ3ModmFsdWUgJiYgY21Jc09mZih2YWx1ZSkpOworICBjbVByb3AgdmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiKTsKKyAgdGhpcy0+TWVzc2VuZ2VyLT5TZXRTdXBwcmVzc0RlcHJlY2F0ZWRXYXJuaW5ncyh2YWx1ZSAmJiBjbUlzT2ZmKCp2YWx1ZSkpOwogCiAgIHZhbHVlID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfRVJST1JfREVQUkVDQVRFRCIpOwogICB0aGlzLT5NZXNzZW5nZXItPlNldERlcHJlY2F0ZWRXYXJuaW5nc0FzRXJyb3JzKGNtSXNPbih2YWx1ZSkpOwpAQCAtMTQ2MiwxMyArMTQ5MywxMyBAQAogICB0aGlzLT5NZXNzZW5nZXItPlNldFN1cHByZXNzRGV2V2FybmluZ3MoY21Jc09uKHZhbHVlKSk7CiAKICAgdmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9TVVBQUkVTU19ERVZFTE9QRVJfRVJST1JTIik7Ci0gIHRoaXMtPk1lc3Nlbmdlci0+U2V0RGV2V2FybmluZ3NBc0Vycm9ycyh2YWx1ZSAmJiBjbUlzT2ZmKHZhbHVlKSk7CisgIHRoaXMtPk1lc3Nlbmdlci0+U2V0RGV2V2FybmluZ3NBc0Vycm9ycyh2YWx1ZSAmJiBjbUlzT2ZmKCp2YWx1ZSkpOwogCiAgIGludCByZXQgPSB0aGlzLT5BY3R1YWxDb25maWd1cmUoKTsKLSAgY29uc3QgY2hhciogZGVsQ2FjaGVWYXJzID0KKyAgY21Qcm9wIGRlbENhY2hlVmFycyA9CiAgICAgdGhpcy0+U3RhdGUtPkdldEdsb2JhbFByb3BlcnR5KCJfX0NNQUtFX0RFTEVURV9DQUNIRV9DSEFOR0VfVkFSU18iKTsKLSAgaWYgKGRlbENhY2hlVmFycyAmJiBkZWxDYWNoZVZhcnNbMF0gIT0gMCkgewotICAgIHJldHVybiB0aGlzLT5IYW5kbGVEZWxldGVDYWNoZVZhcmlhYmxlcyhkZWxDYWNoZVZhcnMpOworICBpZiAoZGVsQ2FjaGVWYXJzICYmICFkZWxDYWNoZVZhcnMtPmVtcHR5KCkpIHsKKyAgICByZXR1cm4gdGhpcy0+SGFuZGxlRGVsZXRlQ2FjaGVWYXJpYWJsZXMoKmRlbENhY2hlVmFycyk7CiAgIH0KICAgcmV0dXJuIHJldDsKIH0KQEAgLTE0OTMsOSArMTUyNCw4IEBACiAKICAgLy8gbm8gZ2VuZXJhdG9yIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lCiAgIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGdlbk5hbWUgPQotICAgICAgdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGV4dHJhR2VuTmFtZSA9CisgICAgY21Qcm9wIGdlbk5hbWUgPSB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1IiKTsKKyAgICBjbVByb3AgZXh0cmFHZW5OYW1lID0KICAgICAgIHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0VYVFJBX0dFTkVSQVRPUiIpOwogICAgIGlmIChnZW5OYW1lKSB7CiAgICAgICBzdGQ6OnN0cmluZyBmdWxsTmFtZSA9CkBAIC0xNTE4LDggKzE1NDgsNyBAQAogICAgIH0KICAgfQogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBnZW5OYW1lID0KLSAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1IiKTsKKyAgY21Qcm9wIGdlbk5hbWUgPSB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1IiKTsKICAgaWYgKGdlbk5hbWUpIHsKICAgICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+TWF0Y2hlc0dlbmVyYXRvck5hbWUoKmdlbk5hbWUpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlID0KQEAgLTE1NDEsNyArMTU3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKICAgfQogCi0gIGlmIChjb25zdCBzdGQ6OnN0cmluZyogaW5zdGFuY2UgPQorICBpZiAoY21Qcm9wIGluc3RhbmNlID0KICAgICAgICAgdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFIikpIHsKICAgICBpZiAodGhpcy0+R2VuZXJhdG9ySW5zdGFuY2VTZXQgJiYgdGhpcy0+R2VuZXJhdG9ySW5zdGFuY2UgIT0gKmluc3RhbmNlKSB7CiAgICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlID0KQEAgLTE1NTgsNyArMTU4Nyw3IEBACiAgICAgICAiR2VuZXJhdG9yIGluc3RhbmNlIGlkZW50aWZpZXIuIiwgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiAgIH0KIAotICBpZiAoY29uc3Qgc3RkOjpzdHJpbmcqIHBsYXRmb3JtTmFtZSA9CisgIGlmIChjbVByb3AgcGxhdGZvcm1OYW1lID0KICAgICAgICAgdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIikpIHsKICAgICBpZiAodGhpcy0+R2VuZXJhdG9yUGxhdGZvcm1TZXQgJiYKICAgICAgICAgdGhpcy0+R2VuZXJhdG9yUGxhdGZvcm0gIT0gKnBsYXRmb3JtTmFtZSkgewpAQCAtMTU3Niw3ICsxNjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lIG9mIGdlbmVyYXRvciBwbGF0Zm9ybS4iLCBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKICAgfQogCi0gIGlmIChjb25zdCBzdGQ6OnN0cmluZyogdHNOYW1lID0KKyAgaWYgKGNtUHJvcCB0c05hbWUgPQogICAgICAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIpKSB7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRvb2xzZXRTZXQgJiYgdGhpcy0+R2VuZXJhdG9yVG9vbHNldCAhPSAqdHNOYW1lKSB7CiAgICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlID0KQEAgLTE4OTEsMTMgKzE5MjAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSh0eXBlKSk7CiAgIHRoaXMtPlVud2F0Y2hVbnVzZWRDbGkoa2V5KTsKIAotICBpZiAoa2V5ID09ICJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiKSB7CisgIGlmIChrZXkgPT0gIkNNQUtFX1dBUk5fREVQUkVDQVRFRCJfcykgewogICAgIHRoaXMtPk1lc3Nlbmdlci0+U2V0U3VwcHJlc3NEZXByZWNhdGVkV2FybmluZ3ModmFsdWUgJiYgY21Jc09mZih2YWx1ZSkpOwotICB9IGVsc2UgaWYgKGtleSA9PSAiQ01BS0VfRVJST1JfREVQUkVDQVRFRCIpIHsKKyAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX0VSUk9SX0RFUFJFQ0FURUQiX3MpIHsKICAgICB0aGlzLT5NZXNzZW5nZXItPlNldERlcHJlY2F0ZWRXYXJuaW5nc0FzRXJyb3JzKGNtSXNPbih2YWx1ZSkpOwotICB9IGVsc2UgaWYgKGtleSA9PSAiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX1dBUk5JTkdTIikgeworICB9IGVsc2UgaWYgKGtleSA9PSAiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX1dBUk5JTkdTIl9zKSB7CiAgICAgdGhpcy0+TWVzc2VuZ2VyLT5TZXRTdXBwcmVzc0Rldldhcm5pbmdzKGNtSXNPbih2YWx1ZSkpOwotICB9IGVsc2UgaWYgKGtleSA9PSAiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX0VSUk9SUyIpIHsKKyAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiX3MpIHsKICAgICB0aGlzLT5NZXNzZW5nZXItPlNldERldldhcm5pbmdzQXNFcnJvcnModmFsdWUgJiYgY21Jc09mZih2YWx1ZSkpOwogICB9CiB9CkBAIC0xOTI5LDE1ICsxOTU4LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrdHJhY2UpOwogfQogCitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21ha2U6OkdldEFsbEV4dGVuc2lvbnMoKSBjb25zdAoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWxsRXh0ID0gdGhpcy0+Q0xpa2VTb3VyY2VGaWxlRXh0ZW5zaW9ucy5vcmRlcmVkOworICBhbGxFeHQuaW5zZXJ0KGFsbEV4dC5lbmQoKSwgdGhpcy0+SGVhZGVyRmlsZUV4dGVuc2lvbnMub3JkZXJlZC5iZWdpbigpLAorICAgICAgICAgICAgICAgIHRoaXMtPkhlYWRlckZpbGVFeHRlbnNpb25zLm9yZGVyZWQuZW5kKCkpOworICAvLyBjdWRhIGV4dGVuc2lvbnMgYXJlIGFsc28gaW4gU291cmNlRmlsZUV4dGVuc2lvbnMgc28gd2UgaWdub3JlIGl0IGhlcmUKKyAgYWxsRXh0Lmluc2VydChhbGxFeHQuZW5kKCksIHRoaXMtPkZvcnRyYW5GaWxlRXh0ZW5zaW9ucy5vcmRlcmVkLmJlZ2luKCksCisgICAgICAgICAgICAgICAgdGhpcy0+Rm9ydHJhbkZpbGVFeHRlbnNpb25zLm9yZGVyZWQuZW5kKCkpOworICByZXR1cm4gYWxsRXh0OworfQorCiBzdGQ6OnN0cmluZyBjbWFrZTo6U3RyaXBFeHRlbnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGUpIGNvbnN0CiB7CiAgIGF1dG8gZG90cG9zID0gZmlsZS5yZmluZCgnLicpOwogICBpZiAoZG90cG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgYXV0byBleHQgPSBmaWxlLnN1YnN0cihkb3Rwb3MgKyAxKTsKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0FQUExFX18pCi0gICAgZXh0ID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKGV4dCk7CisgICAgYXV0byBleHQgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UoZmlsZS5zdWJzdHIoZG90cG9zICsgMSkpOworI2Vsc2UKKyAgICBhdXRvIGV4dCA9IGNtOjpzdHJpbmdfdmlldyhmaWxlKS5zdWJzdHIoZG90cG9zICsgMSk7CiAjZW5kaWYKLSAgICBpZiAodGhpcy0+SXNTb3VyY2VFeHRlbnNpb24oZXh0KSB8fCB0aGlzLT5Jc0hlYWRlckV4dGVuc2lvbihleHQpKSB7CisgICAgaWYgKHRoaXMtPklzQUtub3duRXh0ZW5zaW9uKGV4dCkpIHsKICAgICAgIHJldHVybiBmaWxlLnN1YnN0cigwLCBkb3Rwb3MpOwogICAgIH0KICAgfQpAQCAtMTk0Niw3ICsxOTg3LDcgQEAKIAogY29uc3QgY2hhciogY21ha2U6OkdldENhY2hlRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIHAgPSB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKG5hbWUpOworICBjbVByb3AgcCA9IHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUobmFtZSk7CiAgIHJldHVybiBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHI7CiB9CiAKQEAgLTIxNTMsNyArMjE5NCw3IEBACiB2b2lkIGNtYWtlOjpVcGRhdGVDb252ZXJzaW9uUGF0aFRhYmxlKCkKIHsKICAgLy8gVXBkYXRlIHRoZSBwYXRoIGNvbnZlcnNpb24gdGFibGUgd2l0aCBhbnkgc3BlY2lmaWVkIGZpbGU6Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiB0YWJsZXBhdGggPQorICBjbVByb3AgdGFibGVwYXRoID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9QQVRIX1RSQU5TTEFUSU9OX0ZJTEUiKTsKIAogICBpZiAodGFibGVwYXRoKSB7CkBAIC0yMjQ0LDkgKzIyODUsNyBAQAogCiAgIC8vIElmIGFueSBieXByb2R1Y3Qgb2YgbWFrZWZpbGUgZ2VuZXJhdGlvbiBpcyBtaXNzaW5nIHdlIG11c3QgcmUtcnVuLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvZHVjdHM7Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9kdWN0U3RyID0gbWYuR2V0RGVmaW5pdGlvbigiQ01BS0VfTUFLRUZJTEVfUFJPRFVDVFMiKSkgewotICAgIGNtRXhwYW5kTGlzdChwcm9kdWN0U3RyLCBwcm9kdWN0cyk7Ci0gIH0KKyAgbWYuR2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfTUFLRUZJTEVfUFJPRFVDVFMiLCBwcm9kdWN0cyk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiBwcm9kdWN0cykgewogICAgIGlmICghKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMocCkgfHwgY21TeXN0ZW1Ub29sczo6RmlsZUlzU3ltbGluayhwKSkpIHsKICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC0yMjYxLDExICsyMzAwLDggQEAKICAgLy8gR2V0IHRoZSBzZXQgb2YgZGVwZW5kZW5jaWVzIGFuZCBvdXRwdXRzLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kczsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHM7Ci0gIGNvbnN0IGNoYXIqIGRlcGVuZHNTdHIgPSBtZi5HZXREZWZpbml0aW9uKCJDTUFLRV9NQUtFRklMRV9ERVBFTkRTIik7Ci0gIGNvbnN0IGNoYXIqIG91dHB1dHNTdHIgPSBtZi5HZXREZWZpbml0aW9uKCJDTUFLRV9NQUtFRklMRV9PVVRQVVRTIik7Ci0gIGlmIChkZXBlbmRzU3RyICYmIG91dHB1dHNTdHIpIHsKLSAgICBjbUV4cGFuZExpc3QoZGVwZW5kc1N0ciwgZGVwZW5kcyk7Ci0gICAgY21FeHBhbmRMaXN0KG91dHB1dHNTdHIsIG91dHB1dHMpOworICBpZiAobWYuR2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfTUFLRUZJTEVfREVQRU5EUyIsIGRlcGVuZHMpKSB7CisgICAgbWYuR2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfTUFLRUZJTEVfT1VUUFVUUyIsIG91dHB1dHMpOwogICB9CiAgIGlmIChkZXBlbmRzLmVtcHR5KCkgfHwgb3V0cHV0cy5lbXB0eSgpKSB7CiAgICAgLy8gTm90IGVub3VnaCBpbmZvcm1hdGlvbiB3YXMgcHJvdmlkZWQgdG8gZG8gdGhlIHRlc3QuICBKdXN0IHJlcnVuLgpAQCAtMjM4Myw3ICsyNDE5LDcgQEAKICAgdGhpcy0+U3RhdGUtPkFwcGVuZEdsb2JhbFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZyk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtYWtlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkKK2NtUHJvcCBjbWFrZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApCiB7CiAgIHJldHVybiB0aGlzLT5TdGF0ZS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcCk7CiB9CkBAIC0yNDM1LDcgKzI0NzEsNyBAQAogICBib29sIHdyaXRlVG9TdGRvdXQgPSB0cnVlOwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJnID0gYXJnc1tpXTsKLSAgICBpZiAoYXJnLmZpbmQoIi1HIiwgMCkgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUciKSkgewogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtMjYyNCwxMCArMjY2MCwxMCBAQAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtYWtlOjpHZXREZWJ1Z0NvbmZpZ3MoKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19saXN0ID0KKyAgaWYgKGNtUHJvcCBjb25maWdfbGlzdCA9CiAgICAgICAgIHRoaXMtPlN0YXRlLT5HZXRHbG9iYWxQcm9wZXJ0eSgiREVCVUdfQ09ORklHVVJBVElPTlMiKSkgewogICAgIC8vIEV4cGFuZCB0aGUgc3BlY2lmaWVkIGxpc3QgYW5kIGNvbnZlcnQgdG8gdXBwZXItY2FzZS4KLSAgICBjbUV4cGFuZExpc3QoY29uZmlnX2xpc3QsIGNvbmZpZ3MpOworICAgIGNtRXhwYW5kTGlzdCgqY29uZmlnX2xpc3QsIGNvbmZpZ3MpOwogICAgIHN0ZDo6dHJhbnNmb3JtKGNvbmZpZ3MuYmVnaW4oKSwgY29uZmlncy5lbmQoKSwgY29uZmlncy5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSk7CiAgIH0KQEAgLTI2NTcsNTkgKzI2OTMsNTYgQEAKICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBub3QgbG9hZCBjYWNoZVxuIjsKICAgICByZXR1cm4gMTsKICAgfQotICBjb25zdCBjaGFyKiBjYWNoZWRHZW5lcmF0b3IgPQotICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOworICBjbVByb3AgY2FjaGVkR2VuZXJhdG9yID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CiAgIGlmICghY2FjaGVkR2VuZXJhdG9yKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgbm90IGZpbmQgQ01BS0VfR0VORVJBVE9SIGluIENhY2hlXG4iOwogICAgIHJldHVybiAxOwogICB9Ci0gIGF1dG8gZ2VuID0gdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKGNhY2hlZEdlbmVyYXRvcik7CisgIGF1dG8gZ2VuID0gdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKCpjYWNoZWRHZW5lcmF0b3IpOwogICBpZiAoIWdlbikgewotICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIGNyZWF0ZSBDTUFLRV9HRU5FUkFUT1IgXCIiIDw8IGNhY2hlZEdlbmVyYXRvcgorICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIGNyZWF0ZSBDTUFLRV9HRU5FUkFUT1IgXCIiIDw8ICpjYWNoZWRHZW5lcmF0b3IKICAgICAgICAgICAgICAgPDwgIlwiXG4iOwogICAgIHJldHVybiAxOwogICB9CiAgIHRoaXMtPlNldEdsb2JhbEdlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuKSk7Ci0gIGNvbnN0IGNoYXIqIGNhY2hlZEdlbmVyYXRvckluc3RhbmNlID0KKyAgY21Qcm9wIGNhY2hlZEdlbmVyYXRvckluc3RhbmNlID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UiKTsKICAgaWYgKGNhY2hlZEdlbmVyYXRvckluc3RhbmNlKSB7CiAgICAgY21NYWtlZmlsZSBtZih0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKSwgdGhpcy0+R2V0Q3VycmVudFNuYXBzaG90KCkpOwotICAgIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5TZXRHZW5lcmF0b3JJbnN0YW5jZShjYWNoZWRHZW5lcmF0b3JJbnN0YW5jZSwKKyAgICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+U2V0R2VuZXJhdG9ySW5zdGFuY2UoKmNhY2hlZEdlbmVyYXRvckluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWYpKSB7CiAgICAgICByZXR1cm4gMTsKICAgICB9CiAgIH0KLSAgY29uc3QgY2hhciogY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0gPQorICBjbVByb3AgY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0gPQogICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9QTEFURk9STSIpOwogICBpZiAoY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0pIHsKICAgICBjbU1ha2VmaWxlIG1mKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLCB0aGlzLT5HZXRDdXJyZW50U25hcHNob3QoKSk7Ci0gICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlNldEdlbmVyYXRvclBsYXRmb3JtKGNhY2hlZEdlbmVyYXRvclBsYXRmb3JtLAorICAgIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5TZXRHZW5lcmF0b3JQbGF0Zm9ybSgqY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZikpIHsKICAgICAgIHJldHVybiAxOwogICAgIH0KICAgfQotICBjb25zdCBjaGFyKiBjYWNoZWRHZW5lcmF0b3JUb29sc2V0ID0KKyAgY21Qcm9wIGNhY2hlZEdlbmVyYXRvclRvb2xzZXQgPQogICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIik7CiAgIGlmIChjYWNoZWRHZW5lcmF0b3JUb29sc2V0KSB7CiAgICAgY21NYWtlZmlsZSBtZih0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKSwgdGhpcy0+R2V0Q3VycmVudFNuYXBzaG90KCkpOwotICAgIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5TZXRHZW5lcmF0b3JUb29sc2V0KGNhY2hlZEdlbmVyYXRvclRvb2xzZXQsCisgICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlNldEdlbmVyYXRvclRvb2xzZXQoKmNhY2hlZEdlbmVyYXRvclRvb2xzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgJm1mKSkgewogICAgICAgcmV0dXJuIDE7CiAgICAgfQogICB9CiAgIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgc3RkOjpzdHJpbmcgcHJvak5hbWU7Ci0gIGNvbnN0IGNoYXIqIGNhY2hlZFByb2plY3ROYW1lID0KKyAgY21Qcm9wIGNhY2hlZFByb2plY3ROYW1lID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9QUk9KRUNUX05BTUUiKTsKICAgaWYgKCFjYWNoZWRQcm9qZWN0TmFtZSkgewogICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIG5vdCBmaW5kIENNQUtFX1BST0pFQ1RfTkFNRSBpbiBDYWNoZVxuIjsKICAgICByZXR1cm4gMTsKICAgfQotICBwcm9qTmFtZSA9IGNhY2hlZFByb2plY3ROYW1lOworICBwcm9qTmFtZSA9ICpjYWNoZWRQcm9qZWN0TmFtZTsKIAotICBjb25zdCBjaGFyKiBjYWNoZWRWZXJib3NlID0KLSAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9WRVJCT1NFX01BS0VGSUxFIik7Ci0gIGlmIChjbUlzT24oY2FjaGVkVmVyYm9zZSkpIHsKKyAgaWYgKGNtSXNPbih0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9WRVJCT1NFX01BS0VGSUxFIikpKSB7CiAgICAgdmVyYm9zZSA9IHRydWU7CiAgIH0KIApAQCAtMjc5MywxNiArMjgyNiwxNiBAQAogICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIG5vdCBsb2FkIGNhY2hlXG4iOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBjb25zdCBjaGFyKiBnZW5OYW1lID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CisgIGNtUHJvcCBnZW5OYW1lID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CiAgIGlmICghZ2VuTmFtZSkgewogICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIG5vdCBmaW5kIENNQUtFX0dFTkVSQVRPUiBpbiBDYWNoZVxuIjsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgY29uc3Qgc3RkOjpzdHJpbmcqIGV4dHJhR2VuTmFtZSA9CisgIGNtUHJvcCBleHRyYUdlbk5hbWUgPQogICAgIHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0VYVFJBX0dFTkVSQVRPUiIpOwogICBzdGQ6OnN0cmluZyBmdWxsTmFtZSA9CiAgICAgY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcjo6Q3JlYXRlRnVsbEdlbmVyYXRvck5hbWUoCi0gICAgICBnZW5OYW1lLCBleHRyYUdlbk5hbWUgPyAqZXh0cmFHZW5OYW1lIDogIiIpOworICAgICAgKmdlbk5hbWUsIGV4dHJhR2VuTmFtZSA/ICpleHRyYUdlbk5hbWUgOiAiIik7CiAKICAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBnZW4gPQogICAgIHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihmdWxsTmFtZSk7CkBAIC0yODEyLDIxICsyODQ1LDIxIEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgY29uc3QgY2hhciogY2FjaGVkUHJvamVjdE5hbWUgPQorICBjbVByb3AgY2FjaGVkUHJvamVjdE5hbWUgPQogICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX1BST0pFQ1RfTkFNRSIpOwogICBpZiAoIWNhY2hlZFByb2plY3ROYW1lKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgbm90IGZpbmQgQ01BS0VfUFJPSkVDVF9OQU1FIGluIENhY2hlXG4iOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIHJldHVybiBnZW4tPk9wZW4oZGlyLCBjYWNoZWRQcm9qZWN0TmFtZSwgZHJ5UnVuKTsKKyAgcmV0dXJuIGdlbi0+T3BlbihkaXIsICpjYWNoZWRQcm9qZWN0TmFtZSwgZHJ5UnVuKTsKIH0KIAogdm9pZCBjbWFrZTo6V2F0Y2hVbnVzZWRDbGkoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcikKIHsKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiAgIHRoaXMtPlZhcmlhYmxlV2F0Y2gtPkFkZFdhdGNoKHZhciwgY21XYXJuVW51c2VkQ2xpV2FybmluZywgdGhpcyk7Ci0gIGlmICghY21Db250YWlucyh0aGlzLT5Vc2VkQ2xpVmFyaWFibGVzLCB2YXIpKSB7CisgIGlmICghY206OmNvbnRhaW5zKHRoaXMtPlVzZWRDbGlWYXJpYWJsZXMsIHZhcikpIHsKICAgICB0aGlzLT5Vc2VkQ2xpVmFyaWFibGVzW3Zhcl0gPSBmYWxzZTsKICAgfQogI2VuZGlmCkBAIC0yOTUzLDMgKzI5ODYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCBmdW5jdGlvbnMuIiwKICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKIH0KKworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKK2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhJiBjbWFrZTo6R2V0UHJvZmlsaW5nT3V0cHV0KCkKK3sKKyAgcmV0dXJuICoodGhpcy0+UHJvZmlsaW5nT3V0cHV0KTsKK30KKworYm9vbCBjbWFrZTo6SXNQcm9maWxpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHRoaXMtPlByb2ZpbGluZ091dHB1dCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS5oIGIvU291cmNlL2NtYWtlLmgKaW5kZXggMzU0MjVlYy4uMGM0ZjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlLmgKKysrIGIvU291cmNlL2NtYWtlLmgKQEAgLTE2LDE2ICsxNiwxOSBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUluc3RhbGxlZEZpbGUuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlU25hcHNob3QuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKLSMgIGluY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyMgIGluY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogI2VuZGlmCiAKIGNsYXNzIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3JGYWN0b3J5OwpAQCAtMzQsNiArMzcsOSBAQAogY2xhc3MgY21HbG9iYWxHZW5lcmF0b3I7CiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk7CiBjbGFzcyBjbU1ha2VmaWxlOworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKK2NsYXNzIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhOworI2VuZGlmCiBjbGFzcyBjbU1lc3NlbmdlcjsKIGNsYXNzIGNtVmFyaWFibGVXYXRjaDsKIHN0cnVjdCBjbURvY3VtZW50YXRpb25FbnRyeTsKQEAgLTEzNSwxMyArMTQxLDEzIEBACiAKICAgc3RydWN0IEZpbGVFeHRlbnNpb25zCiAgIHsKLSAgICBib29sIFRlc3Qoc3RkOjpzdHJpbmcgY29uc3QmIGV4dCkgY29uc3QKKyAgICBib29sIFRlc3QoY206OnN0cmluZ192aWV3IGV4dCkgY29uc3QKICAgICB7CiAgICAgICByZXR1cm4gKHRoaXMtPnVub3JkZXJlZC5maW5kKGV4dCkgIT0gdGhpcy0+dW5vcmRlcmVkLmVuZCgpKTsKICAgICB9CiAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3JkZXJlZDsKLSAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+IHVub3JkZXJlZDsKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y206OnN0cmluZ192aWV3PiB1bm9yZGVyZWQ7CiAgIH07CiAKICAgdXNpbmcgSW5zdGFsbGVkRmlsZXNNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21JbnN0YWxsZWRGaWxlPjsKQEAgLTI1OCw0NiArMjY0LDM1IEBACiAgICAgdGhpcy0+R2VuZXJhdG9yVG9vbHNldFNldCA9IHRydWU7CiAgIH0KIAotICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldFNvdXJjZUV4dGVuc2lvbnMoKSBjb25zdAorICBib29sIElzQUtub3duU291cmNlRXh0ZW5zaW9uKGNtOjpzdHJpbmdfdmlldyBleHQpIGNvbnN0CiAgIHsKLSAgICByZXR1cm4gdGhpcy0+U291cmNlRmlsZUV4dGVuc2lvbnMub3JkZXJlZDsKKyAgICByZXR1cm4gdGhpcy0+Q0xpa2VTb3VyY2VGaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCkgfHwKKyAgICAgIHRoaXMtPkN1ZGFGaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCkgfHwKKyAgICAgIHRoaXMtPkZvcnRyYW5GaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCk7CiAgIH0KIAotICBib29sIElzU291cmNlRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHQpIGNvbnN0CisgIGJvb2wgSXNBQ0xpa2VTb3VyY2VFeHRlbnNpb24oY206OnN0cmluZ192aWV3IGV4dCkgY29uc3QKICAgewotICAgIHJldHVybiB0aGlzLT5Tb3VyY2VGaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCk7CisgICAgcmV0dXJuIHRoaXMtPkNMaWtlU291cmNlRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpOwogICB9CiAKKyAgYm9vbCBJc0FLbm93bkV4dGVuc2lvbihjbTo6c3RyaW5nX3ZpZXcgZXh0KSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPklzQUtub3duU291cmNlRXh0ZW5zaW9uKGV4dCkgfHwgdGhpcy0+SXNBSGVhZGVyRXh0ZW5zaW9uKGV4dCk7CisgIH0KKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0QWxsRXh0ZW5zaW9ucygpIGNvbnN0OworCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgR2V0SGVhZGVyRXh0ZW5zaW9ucygpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+SGVhZGVyRmlsZUV4dGVuc2lvbnMub3JkZXJlZDsKICAgfQogCi0gIGJvb2wgSXNIZWFkZXJFeHRlbnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGV4dCkgY29uc3QKKyAgYm9vbCBJc0FIZWFkZXJFeHRlbnNpb24oY206OnN0cmluZ192aWV3IGV4dCkgY29uc3QKICAgewogICAgIHJldHVybiB0aGlzLT5IZWFkZXJGaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCk7CiAgIH0KIAotICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldEN1ZGFFeHRlbnNpb25zKCkgY29uc3QKLSAgewotICAgIHJldHVybiB0aGlzLT5DdWRhRmlsZUV4dGVuc2lvbnMub3JkZXJlZDsKLSAgfQotCi0gIGJvb2wgSXNDdWRhRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHQpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gdGhpcy0+Q3VkYUZpbGVFeHRlbnNpb25zLlRlc3QoZXh0KTsKLSAgfQotCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgR2V0Rm9ydHJhbkV4dGVuc2lvbnMoKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIHRoaXMtPkZvcnRyYW5GaWxlRXh0ZW5zaW9ucy5vcmRlcmVkOwotICB9Ci0KLSAgYm9vbCBJc0ZvcnRyYW5FeHRlbnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGV4dCkgY29uc3QKLSAgewotICAgIHJldHVybiB0aGlzLT5Gb3J0cmFuRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpOwotICB9Ci0KICAgLy8gU3RyaXBzIHRoZSBleHRlbnNpb24gKGlmIHByZXNlbnQgYW5kIGtub3duKSBmcm9tIGEgZmlsZW5hbWUKICAgc3RkOjpzdHJpbmcgU3RyaXBFeHRlbnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGUpIGNvbnN0OwogCkBAIC0zNjEsNyArMzU2LDcgQEAKICAgdm9pZCBTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUpOwogICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApOworICBjbVByb3AgR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApOwogICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKTsKIAogICAvLyEgR2V0IG9yIGNyZWF0ZSBhbiBjbUluc3RhbGxlZEZpbGUgaW5zdGFuY2UgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQKQEAgLTQ1NSw4ICs0NTAsNiBAQAogCiAgIGJvb2wgR2V0V2FyblVuaW5pdGlhbGl6ZWQoKSB7IHJldHVybiB0aGlzLT5XYXJuVW5pbml0aWFsaXplZDsgfQogICB2b2lkIFNldFdhcm5VbmluaXRpYWxpemVkKGJvb2wgYikgeyB0aGlzLT5XYXJuVW5pbml0aWFsaXplZCA9IGI7IH0KLSAgYm9vbCBHZXRXYXJuVW51c2VkKCkgeyByZXR1cm4gdGhpcy0+V2FyblVudXNlZDsgfQotICB2b2lkIFNldFdhcm5VbnVzZWQoYm9vbCBiKSB7IHRoaXMtPldhcm5VbnVzZWQgPSBiOyB9CiAgIGJvb2wgR2V0V2FyblVudXNlZENsaSgpIHsgcmV0dXJuIHRoaXMtPldhcm5VbnVzZWRDbGk7IH0KICAgdm9pZCBTZXRXYXJuVW51c2VkQ2xpKGJvb2wgYikgeyB0aGlzLT5XYXJuVW51c2VkQ2xpID0gYjsgfQogICBib29sIEdldENoZWNrU3lzdGVtVmFycygpIHsgcmV0dXJuIHRoaXMtPkNoZWNrU3lzdGVtVmFyczsgfQpAQCAtNTQ5LDYgKzU0MiwxMSBAQAogCiAgIGJvb2wgR2V0UmVnZW5lcmF0ZUR1cmluZ0J1aWxkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+UmVnZW5lcmF0ZUR1cmluZ0J1aWxkOyB9CiAKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhJiBHZXRQcm9maWxpbmdPdXRwdXQoKTsKKyAgYm9vbCBJc1Byb2ZpbGluZ0VuYWJsZWQoKSBjb25zdDsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgIHZvaWQgUnVuQ2hlY2tGb3JVbnVzZWRWYXJpYWJsZXMoKTsKICAgaW50IEhhbmRsZURlbGV0ZUNhY2hlVmFyaWFibGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXIpOwpAQCAtNjA1LDcgKzYwMyw2IEBACiAgIFRyYWNlRm9ybWF0IFRyYWNlRm9ybWF0VmFyID0gVFJBQ0VfSFVNQU47CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBUcmFjZUZpbGU7CiAgIGJvb2wgV2FyblVuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgYm9vbCBXYXJuVW51c2VkID0gZmFsc2U7CiAgIGJvb2wgV2FyblVudXNlZENsaSA9IHRydWU7CiAgIGJvb2wgQ2hlY2tTeXN0ZW1WYXJzID0gZmFsc2U7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBib29sPiBVc2VkQ2xpVmFyaWFibGVzOwpAQCAtNjE3LDcgKzYxNCw3IEBACiAgIHN0ZDo6c3RyaW5nIENoZWNrU3RhbXBMaXN0OwogICBzdGQ6OnN0cmluZyBWU1NvbHV0aW9uRmlsZTsKICAgc3RkOjpzdHJpbmcgRW52aXJvbm1lbnRHZW5lcmF0b3I7Ci0gIEZpbGVFeHRlbnNpb25zIFNvdXJjZUZpbGVFeHRlbnNpb25zOworICBGaWxlRXh0ZW5zaW9ucyBDTGlrZVNvdXJjZUZpbGVFeHRlbnNpb25zOwogICBGaWxlRXh0ZW5zaW9ucyBIZWFkZXJGaWxlRXh0ZW5zaW9uczsKICAgRmlsZUV4dGVuc2lvbnMgQ3VkYUZpbGVFeHRlbnNpb25zOwogICBGaWxlRXh0ZW5zaW9ucyBGb3J0cmFuRmlsZUV4dGVuc2lvbnM7CkBAIC02NTcsNiArNjU0LDEwIEBACiAKICAgdm9pZCBBcHBlbmRHbG9iYWxHZW5lcmF0b3JzRG9jdW1lbnRhdGlvbihzdGQ6OnZlY3RvcjxjbURvY3VtZW50YXRpb25FbnRyeT4mKTsKICAgdm9pZCBBcHBlbmRFeHRyYUdlbmVyYXRvcnNEb2N1bWVudGF0aW9uKHN0ZDo6dmVjdG9yPGNtRG9jdW1lbnRhdGlvbkVudHJ5PiYpOworCisjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZVByb2ZpbGluZ0RhdGE+IFByb2ZpbGluZ091dHB1dDsKKyNlbmRpZgogfTsKIAogI2RlZmluZSBDTUFLRV9TVEFOREFSRF9PUFRJT05TX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlbWFpbi5jeHggYi9Tb3VyY2UvY21ha2VtYWluLmN4eAppbmRleCA0OTRkNWQ5Li43YzY2YzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2VtYWluLmN4eAorKysgYi9Tb3VyY2UvY21ha2VtYWluLmN4eApAQCAtMSwxOSArMSwyNiBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogCisjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNjdHlwZT4KICNpbmNsdWRlIDxjbGltaXRzPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCisjaW5jbHVkZSA8Y20zcC91di5oPgorCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uRW50cnkuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMjcsOCArMzQsNiBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCi0KLSNpbmNsdWRlICJjbV91di5oIgogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAjICBpbmNsdWRlICJjbXN5cy9Db25zb2xlQnVmLmh4eCIKICNlbmRpZgpAQCAtODgsMTEgKzkzLDE4IEBACiAgIHsgIi0tdHJhY2UtcmVkaXJlY3Q9PGZpbGU+IiwKICAgICAiUmVkaXJlY3QgdHJhY2Ugb3V0cHV0IHRvIGEgZmlsZSBpbnN0ZWFkIG9mIHN0ZGVyci4iIH0sCiAgIHsgIi0td2Fybi11bmluaXRpYWxpemVkIiwgIldhcm4gYWJvdXQgdW5pbml0aWFsaXplZCB2YWx1ZXMuIiB9LAotICB7ICItLXdhcm4tdW51c2VkLXZhcnMiLCAiV2FybiBhYm91dCB1bnVzZWQgdmFyaWFibGVzLiIgfSwKICAgeyAiLS1uby13YXJuLXVudXNlZC1jbGkiLCAiRG9uJ3Qgd2FybiBhYm91dCBjb21tYW5kIGxpbmUgb3B0aW9ucy4iIH0sCiAgIHsgIi0tY2hlY2stc3lzdGVtLXZhcnMiLAogICAgICJGaW5kIHByb2JsZW1zIHdpdGggdmFyaWFibGUgdXNhZ2UgaW4gc3lzdGVtICIKICAgICAiZmlsZXMuIiB9LAorIyAgaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQorICB7ICItLXByb2ZpbGluZy1mb3JtYXQ9PGZtdD4iLAorICAgICJPdXRwdXQgZGF0YSBmb3IgcHJvZmlsaW5nIENNYWtlIHNjcmlwdHMuIFN1cHBvcnRlZCBmb3JtYXRzOiAiCisgICAgImdvb2dsZS10cmFjZSIgfSwKKyAgeyAiLS1wcm9maWxpbmctb3V0cHV0PTxmaWxlPiIsCisgICAgIlNlbGVjdCBhbiBvdXRwdXQgcGF0aCBmb3IgdGhlIHByb2ZpbGluZyBkYXRhIGVuYWJsZWQgdGhyb3VnaCAiCisgICAgIi0tcHJvZmlsaW5nLWZvcm1hdC4iIH0sCisjICBlbmRpZgogICB7IG51bGxwdHIsIG51bGxwdHIgfQogfTsKIApAQCAtMjg2LDE2ICsyOTgsMTYgQEAKICAgICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdCA9IGNtLkdldFN0YXRlKCktPkdldENhY2hlRW50cnlUeXBlKGspOwogICAgICAgaWYgKHQgIT0gY21TdGF0ZUVudW1zOjpJTlRFUk5BTCAmJiB0ICE9IGNtU3RhdGVFbnVtczo6U1RBVElDICYmCiAgICAgICAgICAgdCAhPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQpIHsKLSAgICAgICAgY29uc3QgY2hhciogYWR2YW5jZWRQcm9wID0KKyAgICAgICAgY21Qcm9wIGFkdmFuY2VkUHJvcCA9CiAgICAgICAgICAgY20uR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGssICJBRFZBTkNFRCIpOwogICAgICAgICBpZiAobGlzdF9hbGxfY2FjaGVkIHx8ICFhZHZhbmNlZFByb3ApIHsKICAgICAgICAgICBpZiAobGlzdF9oZWxwKSB7Ci0gICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIi8vICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBjbS5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoaywgIkhFTFBTVFJJTkciKQotICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgIGNtUHJvcCBoZWxwID0KKyAgICAgICAgICAgICAgY20uR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGssICJIRUxQU1RSSU5HIik7CisgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIi8vICIgPDwgKGhlbHAgPyAqaGVscCA6ICIiKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgfQogICAgICAgICAgIHN0ZDo6Y291dCA8PCBrIDw8ICI6IiA8PCBjbVN0YXRlOjpDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKHQpIDw8ICI9IgotICAgICAgICAgICAgICAgICAgICA8PCBjbS5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoaykgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgICAgICA8PCBjbS5HZXRTdGF0ZSgpLT5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKGspIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICBpZiAobGlzdF9oZWxwKSB7CiAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgIH0KQEAgLTMxMiw2ICszMjQsNyBAQAogICByZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKIGludCBleHRyYWN0X2pvYl9udW1iZXIoaW50JiBpbmRleCwgY2hhciBjb25zdCogY3VycmVudCwgY2hhciBjb25zdCogbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbl9vZl9mbGFnKQogewpAQCAtMzQxLDYgKzM1NCw3IEBACiAgIH0KICAgcmV0dXJuIGpvYnM7CiB9CisjZW5kaWYKIAogaW50IGRvX2J1aWxkKGludCBhYywgY2hhciBjb25zdCogY29uc3QqIGF2KQogewpAQCAtNTA2LDYgKzUyMCwxMjEgQEAKICNlbmRpZgogfQogCitib29sIHBhcnNlX2RlZmF1bHRfZGlyZWN0b3J5X3Blcm1pc3Npb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBhcnNlZFBlcm1pc3Npb25zVmFyKQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGFyc2VkUGVybWlzc2lvbnM7CisgIGVudW0gRG9pbmcKKyAgeworICAgIERvaW5nTm9uZSwKKyAgICBEb2luZ093bmVyLAorICAgIERvaW5nR3JvdXAsCisgICAgRG9pbmdXb3JsZCwKKyAgICBEb2luZ093bmVyQXNzaWdubWVudCwKKyAgICBEb2luZ0dyb3VwQXNzaWdubWVudCwKKyAgICBEb2luZ1dvcmxkQXNzaWdubWVudCwKKyAgfTsKKyAgRG9pbmcgZG9pbmcgPSBEb2luZ05vbmU7CisKKyAgYXV0byB1bmlxdWVQdXNoQmFjayA9IFsmcGFyc2VkUGVybWlzc2lvbnNdKGNvbnN0IHN0ZDo6c3RyaW5nJiBlKSB7CisgICAgaWYgKHN0ZDo6ZmluZChwYXJzZWRQZXJtaXNzaW9ucy5iZWdpbigpLCBwYXJzZWRQZXJtaXNzaW9ucy5lbmQoKSwgZSkgPT0KKyAgICAgICAgcGFyc2VkUGVybWlzc2lvbnMuZW5kKCkpIHsKKyAgICAgIHBhcnNlZFBlcm1pc3Npb25zLnB1c2hfYmFjayhlKTsKKyAgICB9CisgIH07CisKKyAgZm9yIChhdXRvIGNvbnN0JiBlIDogcGVybWlzc2lvbnMpIHsKKyAgICBzd2l0Y2ggKGRvaW5nKSB7CisgICAgICBjYXNlIERvaW5nTm9uZToKKyAgICAgICAgaWYgKGUgPT0gJ3UnKSB7CisgICAgICAgICAgZG9pbmcgPSBEb2luZ093bmVyOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJ2cnKSB7CisgICAgICAgICAgZG9pbmcgPSBEb2luZ0dyb3VwOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJ28nKSB7CisgICAgICAgICAgZG9pbmcgPSBEb2luZ1dvcmxkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRG9pbmdPd25lcjoKKyAgICAgICAgaWYgKGUgPT0gJz0nKSB7CisgICAgICAgICAgZG9pbmcgPSBEb2luZ093bmVyQXNzaWdubWVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERvaW5nR3JvdXA6CisgICAgICAgIGlmIChlID09ICc9JykgeworICAgICAgICAgIGRvaW5nID0gRG9pbmdHcm91cEFzc2lnbm1lbnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEb2luZ1dvcmxkOgorICAgICAgICBpZiAoZSA9PSAnPScpIHsKKyAgICAgICAgICBkb2luZyA9IERvaW5nV29ybGRBc3NpZ25tZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRG9pbmdPd25lckFzc2lnbm1lbnQ6CisgICAgICAgIGlmIChlID09ICdyJykgeworICAgICAgICAgIHVuaXF1ZVB1c2hCYWNrKCJPV05FUl9SRUFEIik7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAndycpIHsKKyAgICAgICAgICB1bmlxdWVQdXNoQmFjaygiT1dORVJfV1JJVEUiKTsKKyAgICAgICAgfSBlbHNlIGlmIChlID09ICd4JykgeworICAgICAgICAgIHVuaXF1ZVB1c2hCYWNrKCJPV05FUl9FWEVDVVRFIik7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAnLCcpIHsKKyAgICAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERvaW5nR3JvdXBBc3NpZ25tZW50OgorICAgICAgICBpZiAoZSA9PSAncicpIHsKKyAgICAgICAgICB1bmlxdWVQdXNoQmFjaygiR1JPVVBfUkVBRCIpOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJ3cnKSB7CisgICAgICAgICAgdW5pcXVlUHVzaEJhY2soIkdST1VQX1dSSVRFIik7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAneCcpIHsKKyAgICAgICAgICB1bmlxdWVQdXNoQmFjaygiR1JPVVBfRVhFQ1VURSIpOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJywnKSB7CisgICAgICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEb2luZ1dvcmxkQXNzaWdubWVudDoKKyAgICAgICAgaWYgKGUgPT0gJ3InKSB7CisgICAgICAgICAgdW5pcXVlUHVzaEJhY2soIldPUkxEX1JFQUQiKTsKKyAgICAgICAgfSBlbHNlIGlmIChlID09ICd3JykgeworICAgICAgICAgIHVuaXF1ZVB1c2hCYWNrKCJXT1JMRF9XUklURSIpOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJ3gnKSB7CisgICAgICAgICAgdW5pcXVlUHVzaEJhY2soIldPUkxEX0VYRUNVVEUiKTsKKyAgICAgICAgfSBlbHNlIGlmIChlID09ICcsJykgeworICAgICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKGRvaW5nICE9IERvaW5nT3duZXJBc3NpZ25tZW50ICYmIGRvaW5nICE9IERvaW5nR3JvdXBBc3NpZ25tZW50ICYmCisgICAgICBkb2luZyAhPSBEb2luZ1dvcmxkQXNzaWdubWVudCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7CisgIGZvciAoYXV0byBpID0gMHU7IGkgPCBwYXJzZWRQZXJtaXNzaW9ucy5zaXplKCk7IGkrKykgeworICAgIGlmIChpICE9IDApIHsKKyAgICAgIG9zcyA8PCAiOyI7CisgICAgfQorICAgIG9zcyA8PCBwYXJzZWRQZXJtaXNzaW9uc1tpXTsKKyAgfQorCisgIHBhcnNlZFBlcm1pc3Npb25zVmFyID0gb3NzLnN0cigpOworICByZXR1cm4gdHJ1ZTsKK30KKwogaW50IGRvX2luc3RhbGwoaW50IGFjLCBjaGFyIGNvbnN0KiBjb25zdCogYXYpCiB7CiAjaWZkZWYgQ01BS0VfQk9PVFNUUkFQCkBAIC01MTYsNiArNjQ1LDcgQEAKIAogICBzdGQ6OnN0cmluZyBjb25maWc7CiAgIHN0ZDo6c3RyaW5nIGNvbXBvbmVudDsKKyAgc3RkOjpzdHJpbmcgZGVmYXVsdERpcmVjdG9yeVBlcm1pc3Npb25zOwogICBzdGQ6OnN0cmluZyBwcmVmaXg7CiAgIHN0ZDo6c3RyaW5nIGRpcjsKICAgYm9vbCBzdHJpcCA9IGZhbHNlOwpAQCAtNTI4LDYgKzY1OCw3IEBACiAgICAgRG9pbmdDb25maWcsCiAgICAgRG9pbmdDb21wb25lbnQsCiAgICAgRG9pbmdQcmVmaXgsCisgICAgRG9pbmdEZWZhdWx0RGlyZWN0b3J5UGVybWlzc2lvbnMsCiAgIH07CiAKICAgRG9pbmcgZG9pbmcgPSBEb2luZ0RpcjsKQEAgLTU0Niw2ICs2NzcsOCBAQAogICAgICAgICAgICAgICAgKHN0cmNtcChhdltpXSwgIi12IikgPT0gMCkpIHsKICAgICAgIHZlcmJvc2UgPSB0cnVlOwogICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoYXZbaV0sICItLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIikgPT0gMCkgeworICAgICAgZG9pbmcgPSBEb2luZ0RlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9uczsKICAgICB9IGVsc2UgewogICAgICAgc3dpdGNoIChkb2luZykgewogICAgICAgICBjYXNlIERvaW5nRGlyOgpAQCAtNTY0LDYgKzY5NywxMCBAQAogICAgICAgICAgIHByZWZpeCA9IGF2W2ldOwogICAgICAgICAgIGRvaW5nID0gRG9pbmdOb25lOwogICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvaW5nRGVmYXVsdERpcmVjdG9yeVBlcm1pc3Npb25zOgorICAgICAgICAgIGRlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9ucyA9IGF2W2ldOworICAgICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiVW5rbm93biBhcmd1bWVudCAiIDw8IGF2W2ldIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICBkaXIuY2xlYXIoKTsKQEAgLTU4MCw2ICs3MTcsOCBAQAogICAgICAgIiAgPGRpcj4gICAgICAgICAgICAgID0gUHJvamVjdCBiaW5hcnkgZGlyZWN0b3J5IHRvIGluc3RhbGwuXG4iCiAgICAgICAiICAtLWNvbmZpZyA8Y2ZnPiAgICAgPSBGb3IgbXVsdGktY29uZmlndXJhdGlvbiB0b29scywgY2hvb3NlIDxjZmc+LlxuIgogICAgICAgIiAgLS1jb21wb25lbnQgPGNvbXA+ID0gQ29tcG9uZW50LWJhc2VkIGluc3RhbGwuIE9ubHkgaW5zdGFsbCA8Y29tcD4uXG4iCisgICAgICAiICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIDxwZXJtaXNzaW9uPiBcbiIKKyAgICAgICIgICAgIERlZmF1bHQgaW5zdGFsbCBwZXJtaXNzaW9uLiBVc2UgZGVmYXVsdCBwZXJtaXNzaW9uIDxwZXJtaXNzaW9uPi5cbiIKICAgICAgICIgIC0tcHJlZml4IDxwcmVmaXg+ICA9IFRoZSBpbnN0YWxsYXRpb24gcHJlZml4IENNQUtFX0lOU1RBTExfUFJFRklYLlxuIgogICAgICAgIiAgLS1zdHJpcCAgICAgICAgICAgID0gUGVyZm9ybWluZyBpbnN0YWxsL3N0cmlwLlxuIgogICAgICAgIiAgLXYgLS12ZXJib3NlICAgICAgID0gRW5hYmxlIHZlcmJvc2Ugb3V0cHV0LlxuIgpAQCAtNjIwLDYgKzc1OSwxOCBAQAogICAgIGFyZ3MuZW1wbGFjZV9iYWNrKCItRENNQUtFX0lOU1RBTExfQ09ORklHX05BTUU9IiArIGNvbmZpZyk7CiAgIH0KIAorICBpZiAoIWRlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9ucy5lbXB0eSgpKSB7CisgICAgc3RkOjpzdHJpbmcgcGFyc2VkUGVybWlzc2lvbnNWYXI7CisgICAgaWYgKCFwYXJzZV9kZWZhdWx0X2RpcmVjdG9yeV9wZXJtaXNzaW9ucyhkZWZhdWx0RGlyZWN0b3J5UGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRQZXJtaXNzaW9uc1ZhcikpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiLS1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucyBpcyBpbiBpbmNvcnJlY3QgZm9ybWF0IgorICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBhcmdzLmVtcGxhY2VfYmFjaygiLURDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TPSIgKworICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zVmFyKTsKKyAgfQorCiAgIGFyZ3MuZW1wbGFjZV9iYWNrKCItUCIpOwogICBhcmdzLmVtcGxhY2VfYmFjayhkaXIgKyAiL2NtYWtlX2luc3RhbGwuY21ha2UiKTsKIApAQCAtNzA2LDYgKzg1Nyw4IEBACiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAogICBjbUR5bmFtaWNMb2FkZXI6OkZsdXNoQ2FjaGUoKTsKICNlbmRpZgotICB1dl9sb29wX2Nsb3NlKHV2X2RlZmF1bHRfbG9vcCgpKTsKKyAgaWYgKHV2X2xvb3BfdCogbG9vcCA9IHV2X2RlZmF1bHRfbG9vcCgpKSB7CisgICAgdXZfbG9vcF9jbG9zZShsb29wKTsKKyAgfQogICByZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtY2xkZXBzLmN4eCBiL1NvdXJjZS9jbWNsZGVwcy5jeHgKaW5kZXggY2FmNjQ1My4uNWMyN2FjMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtY2xkZXBzLmN4eAorKysgYi9Tb3VyY2UvY21jbGRlcHMuY3h4CkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCiAKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKIC8vIFdlIGRvbid0IHdhbnQgYW55IHdpbGRjYXJkIGV4cGFuc2lvbi4KQEAgLTYzLDcgKzY0LDcgQEAKICAgICAgICAgbXNnKTsKIH0KIAotc3RhdGljIHN0ZDo6c3RyaW5nIHRyaW1MZWFkaW5nU3BhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIGNtZGxpbmUpCitzdGF0aWMgY206OnN0cmluZ192aWV3IHRyaW1MZWFkaW5nU3BhY2UoY206OnN0cmluZ192aWV3IGNtZGxpbmUpCiB7CiAgIGludCBpID0gMDsKICAgZm9yICg7IGNtZGxpbmVbaV0gPT0gJyAnOyArK2kpCkBAIC04MSwzNCArODIsMzAgQEAKICAgfQogfQogCi1ib29sIHN0YXJ0c1dpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgY29uc3Qgc3RkOjpzdHJpbmcmIHdoYXQpCi17Ci0gIHJldHVybiBzdHIuY29tcGFyZSgwLCB3aGF0LnNpemUoKSwgd2hhdCkgPT0gMDsKLX0KLQogLy8gU3RyaXBzIG9uZSBhcmd1bWVudCBmcm9tIHRoZSBjbWRsaW5lIGFuZCByZXR1cm5zIGl0LiAic3Vycm91bmRpbmcgcXVvdGVzIgogLy8gYXJlIHJlbW92ZWQgZnJvbSB0aGUgYXJndW1lbnQgaWYgdGhlcmUgd2VyZSBhbnkuCiBzdGF0aWMgc3RkOjpzdHJpbmcgZ2V0QXJnKHN0ZDo6c3RyaW5nJiBjbWRsaW5lKQogewotICBzdGQ6OnN0cmluZyByZXQ7CiAgIGJvb2wgaW5fcXVvdGVkID0gZmFsc2U7CiAgIHVuc2lnbmVkIGludCBpID0gMDsKIAotICBjbWRsaW5lID0gdHJpbUxlYWRpbmdTcGFjZShjbWRsaW5lKTsKKyAgY206OnN0cmluZ192aWV3IGNtZHZpZXcgPSB0cmltTGVhZGluZ1NwYWNlKGNtZGxpbmUpOworICBzaXplX3Qgc3BhY2VDbnQgPSBjbWRsaW5lLnNpemUoKSAtIGNtZHZpZXcuc2l6ZSgpOwogCiAgIGZvciAoOzsgKytpKSB7Ci0gICAgaWYgKGkgPj0gY21kbGluZS5zaXplKCkpCisgICAgaWYgKGkgPj0gY21kdmlldy5zaXplKCkpCiAgICAgICB1c2FnZSgiQ291bGRuJ3QgcGFyc2UgYXJndW1lbnRzLiIpOwotICAgIGlmICghaW5fcXVvdGVkICYmIGNtZGxpbmVbaV0gPT0gJyAnKQorICAgIGlmICghaW5fcXVvdGVkICYmIGNtZHZpZXdbaV0gPT0gJyAnKQogICAgICAgYnJlYWs7IC8vICJhIGIiICJ4IHkiCi0gICAgaWYgKGNtZGxpbmVbaV0gPT0gJyInKQorICAgIGlmIChjbWR2aWV3W2ldID09ICciJykKICAgICAgIGluX3F1b3RlZCA9ICFpbl9xdW90ZWQ7CiAgIH0KIAotICByZXQgPSBjbWRsaW5lLnN1YnN0cigwLCBpKTsKLSAgaWYgKHJldFswXSA9PSAnIicgJiYgcmV0W2kgLSAxXSA9PSAnIicpCi0gICAgcmV0ID0gcmV0LnN1YnN0cigxLCByZXQuc2l6ZSgpIC0gMik7Ci0gIGNtZGxpbmUgPSBjbWRsaW5lLnN1YnN0cihpKTsKKyAgY21kdmlldyA9IGNtZHZpZXcuc3Vic3RyKDAsIGkpOworICBpZiAoY21kdmlld1swXSA9PSAnIicgJiYgY21kdmlld1tpIC0gMV0gPT0gJyInKQorICAgIGNtZHZpZXcgPSBjbWR2aWV3LnN1YnN0cigxLCBpIC0gMik7CisgIHN0ZDo6c3RyaW5nIHJldChjbWR2aWV3KTsKKyAgY21kbGluZS5lcmFzZSgwLCBzcGFjZUNudCArIGkpOwogICByZXR1cm4gcmV0OwogfQogCkBAIC0xMjcsNyArMTI0LDcgQEAKICAgcHJlZml4ID0gZ2V0QXJnKGNtZGxpbmUpOwogICBjbHBhdGggPSBnZXRBcmcoY21kbGluZSk7CiAgIGJpbnBhdGggPSBnZXRBcmcoY21kbGluZSk7Ci0gIHJlc3QgPSB0cmltTGVhZGluZ1NwYWNlKGNtZGxpbmUpOworICByZXN0ID0gc3RkOjpzdHJpbmcodHJpbUxlYWRpbmdTcGFjZShjbWRsaW5lKSk7CiB9CiAKIC8vIE5vdCBhbGwgYmFja3NsYXNoZXMgbmVlZCB0byBiZSBlc2NhcGVkIGluIGEgZGVwZmlsZSwgYnV0IGl0J3MgZWFzaWVyIHRoYXQKQEAgLTE2OSw4ICsxNjYsOCBAQAogICAgIC8vIGJ1aWxkLm5pbmphIGZpbGUuICBUaGVyZWZvcmUgd2UgbmVlZCB0byBjYW5vbmljYWxpemUgdGhlIHBhdGggdG8gdXNlCiAgICAgLy8gYmFja3dhcmQgc2xhc2hlcyBhbmQgcmVsYXRpdml6ZSB0aGUgcGF0aCB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LgogICAgIHJlcGxhY2VBbGwodG1wLCAiLyIsICJcXCIpOwotICAgIGlmIChzdGFydHNXaXRoKHRtcCwgY3dkKSkKLSAgICAgIHRtcCA9IHRtcC5zdWJzdHIoY3dkLnNpemUoKSk7CisgICAgaWYgKGNtSGFzUHJlZml4KHRtcCwgY3dkKSkKKyAgICAgIHRtcC5lcmFzZSgwLCBjd2Quc2l6ZSgpKTsKICAgICBlc2NhcGVQYXRoKHRtcCk7CiAgICAgZnByaW50ZihvdXQsICIlcyBcXFxuIiwgdG1wLmNfc3RyKCkpOwogICB9CkBAIC0xOTQsNyArMTkxLDcgQEAKICAgcmV0dXJuIHJlcGxhY2VkLnJlcGxhY2UocG9zLCB3aGF0LnNpemUoKSwgcmVwbGFjZW1lbnQpOwogfQogCi1zdGF0aWMgaW50IHByb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIHNyY2ZpbGVuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZGZpbGUsCitzdGF0aWMgaW50IHByb2Nlc3MoY206OnN0cmluZ192aWV3IHNyY2ZpbGVuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZGZpbGUsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG9iamZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNtZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRpciA9ICIiLAogICAgICAgICAgICAgICAgICAgIGJvb2wgcXVpZXQgPSBmYWxzZSkKQEAgLTIyMSwxMyArMjE4LDE0IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKICAgYm9vbCBpc0ZpcnN0TGluZSA9IHRydWU7IC8vIGNsIHByaW50cyBhbHdheXMgZmlyc3QgdGhlIHNvdXJjZSBmaWxlbmFtZQogICB3aGlsZSAoc3RkOjpnZXRsaW5lKHNzLCBsaW5lKSkgewotICAgIGlmIChzdGFydHNXaXRoKGxpbmUsIHByZWZpeCkpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGluYyA9IHRyaW1MZWFkaW5nU3BhY2UobGluZS5zdWJzdHIocHJlZml4LnNpemUoKSkuY19zdHIoKSk7CisgICAgY206OnN0cmluZ192aWV3IGluYyhsaW5lKTsKKyAgICBpZiAoY21IYXNQcmVmaXgoaW5jLCBwcmVmaXgpKSB7CisgICAgICBpbmMgPSB0cmltTGVhZGluZ1NwYWNlKGluYy5zdWJzdHIocHJlZml4LnNpemUoKSkpOwogICAgICAgaWYgKGluYy5iYWNrKCkgPT0gJ1xyJykgLy8gYmxlY2gsIHN0dXBpZCBcclxuCiAgICAgICAgIGluYyA9IGluYy5zdWJzdHIoMCwgaW5jLnNpemUoKSAtIDEpOwotICAgICAgaW5jbHVkZXMucHVzaF9iYWNrKGluYyk7CisgICAgICBpbmNsdWRlcy5lbXBsYWNlX2JhY2soc3RkOjpzdHJpbmcoaW5jKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmICghaXNGaXJzdExpbmUgfHwgIXN0YXJ0c1dpdGgobGluZSwgc3JjZmlsZW5hbWUpKSB7CisgICAgICBpZiAoIWlzRmlyc3RMaW5lIHx8ICFjbUhhc1ByZWZpeChpbmMsIHNyY2ZpbGVuYW1lKSkgewogICAgICAgICBpZiAoIXF1aWV0IHx8IGV4aXRfY29kZSAhPSAwKSB7CiAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlc1xuIiwgbGluZS5jX3N0cigpKTsKICAgICAgICAgfQpAQCAtMjU4LDE0ICsyNTYsMTAgQEAKICAgICAgICAgICAgICAgICAgICBjbCwgYmlucGF0aCwgcmVzdCk7CiAKICAgLy8gbmVlZGVkIHRvIHN1cHByZXNzIGZpbGVuYW1lIG91dHB1dCBvZiBtc3ZjIHRvb2xzCi0gIHN0ZDo6c3RyaW5nIHNyY2ZpbGVuYW1lOwotICB7Ci0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBzcmNmaWxlLnJmaW5kKCdcXCcpOwotICAgIGlmIChwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgIHNyY2ZpbGVuYW1lID0gc3JjZmlsZTsKLSAgICB9IGVsc2UgewotICAgICAgc3JjZmlsZW5hbWUgPSBzcmNmaWxlLnN1YnN0cihwb3MgKyAxKTsKLSAgICB9CisgIGNtOjpzdHJpbmdfdmlldyBzcmNmaWxlbmFtZShzcmNmaWxlKTsKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBzcmNmaWxlLnJmaW5kKCdcXCcpOworICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgc3JjZmlsZW5hbWUgPSBzcmNmaWxlbmFtZS5zdWJzdHIocG9zICsgMSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBub2wgPSAiIC9ub2xvZ28gIjsKQEAgLTI4Niw3ICsyODAsNyBAQAogICAgIC8vIGNhbGwgY2wgaW4gb2JqZWN0IGRpciBzbyB0aGUgLmkgaXMgZ2VuZXJhdGVkIHRoZXJlCiAgICAgc3RkOjpzdHJpbmcgb2JqZGlyOwogICAgIHsKLSAgICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gb2JqZmlsZS5yZmluZCgiXFwiKTsKKyAgICAgIHBvcyA9IG9iamZpbGUucmZpbmQoIlxcIik7CiAgICAgICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICAgIG9iamRpciA9IG9iamZpbGUuc3Vic3RyKDAsIHBvcyk7CiAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21jbWQuY3h4IGIvU291cmNlL2NtY21kLmN4eAppbmRleCAyYjhlYTI0Li4xYTVmZWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21jbWQuY3h4CisrKyBiL1NvdXJjZS9jbWNtZC5jeHgKQEAgLTQsMTEgKzQsOSBAQAogCiAjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCisjaW5jbHVkZSA8Y20zcC91di5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKLSNpbmNsdWRlICJjbV91di5oIgotCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgpAQCAtOTAsNiArODgsNyBAQAogICAgIDw8ICJBdmFpbGFibGUgY29tbWFuZHM6IFxuIgogICAgIDw8ICIgIGNhcGFiaWxpdGllcyAgICAgICAgICAgICAgLSBSZXBvcnQgY2FwYWJpbGl0aWVzIGJ1aWx0IGludG8gY21ha2UgIgogICAgICAgICJpbiBKU09OIGZvcm1hdFxuIgorICAgIDw8ICIgIGNhdCA8ZmlsZXM+Li4uICAgICAgICAgICAgLSBjb25jYXQgdGhlIGZpbGVzIGFuZCBwcmludCB0aGVtIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXRcbiIKICAgICA8PCAiICBjaGRpciBkaXIgY21kIFthcmdzLi4uXSAgIC0gcnVuIGNvbW1hbmQgaW4gYSBnaXZlbiBkaXJlY3RvcnlcbiIKICAgICA8PCAiICBjb21wYXJlX2ZpbGVzIFstLWlnbm9yZS1lb2xdIGZpbGUxIGZpbGUyXG4iCiAgICAgPDwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2hlY2sgaWYgZmlsZTEgaXMgc2FtZSBhcyBmaWxlMlxuIgpAQCAtMTI3LDYgKzEyNiw3IEBACiAgICAgPDwgIiAgdG91Y2ggPGZpbGU+Li4uICAgICAgICAgICAtIHRvdWNoIGEgPGZpbGU+LlxuIgogICAgIDw8ICIgIHRvdWNoX25vY3JlYXRlIDxmaWxlPi4uLiAgLSB0b3VjaCBhIDxmaWxlPiBidXQgZG8gbm90IGNyZWF0ZSBpdC5cbiIKICAgICA8PCAiICBjcmVhdGVfc3ltbGluayBvbGQgbmV3ICAgIC0gY3JlYXRlIGEgc3ltYm9saWMgbGluayBuZXcgLT4gb2xkXG4iCisgICAgPDwgIiAgY3JlYXRlX2hhcmRsaW5rIG9sZCBuZXcgICAtIGNyZWF0ZSBhIGhhcmQgbGluayBuZXcgLT4gb2xkXG4iCiAgICAgPDwgIiAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAtIGRvIG5vdGhpbmcgd2l0aCBhbiBleGl0IGNvZGUgb2YgMFxuIgogICAgIDw8ICIgIGZhbHNlICAgICAgICAgICAgICAgICAgICAgLSBkbyBub3RoaW5nIHdpdGggYW4gZXhpdCBjb2RlIG9mIDFcbiIKICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKQEAgLTE4MCw2ICsxODAsMTMgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGNtQ2F0RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZVRvQXBwZW5kKQoreworICBjbXN5czo6aWZzdHJlYW0gc291cmNlKGZpbGVUb0FwcGVuZC5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzdGQ6Omlvczo6YmluYXJ5IHwgc3RkOjppb3M6OmluKSk7CisgIHN0ZDo6Y291dCA8PCBzb3VyY2UucmRidWYoKTsKK30KKwogc3RhdGljIGJvb2wgY21SZW1vdmVEaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgYm9vbCByZWN1cnNpdmUgPSB0cnVlKQogewogICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzU3ltbGluayhkaXIpKSB7CkBAIC01NzYsMTIgKzU4MywxMCBAQAogICAgICAgICBmaWxlc0RpZmZlciA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6VGV4dEZpbGVzRGlmZmVyKGFyZ3NbM10sIGFyZ3NbNF0pOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgOjpDTWFrZUNvbW1hbmRVc2FnZShhcmdzWzBdLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIDI7CiAgICAgICB9CiAKICAgICAgIGlmIChmaWxlc0RpZmZlcikgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIkZpbGVzIFwiIiA8PCBhcmdzW2FyZ3Muc2l6ZSgpIC0gMl0gPDwgIlwiIHRvIFwiIgotICAgICAgICAgICAgICAgICAgPDwgYXJnc1thcmdzLnNpemUoKSAtIDFdIDw8ICJcIiBhcmUgZGlmZmVyZW50LlxuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICByZXR1cm4gMDsKQEAgLTU5Niw4ICs2MDEsNyBAQAogICAgICAgfQogICAgICAgY21zeXM6Omlmc3RyZWFtIGZpbihhcmdzWzNdLmNfc3RyKCksIHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9zOjpiaW5hcnkpOwogICAgICAgaWYgKCFmaW4pIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvYmplY3QgbGlzdCBmaWxlOiAiIDw8IGFyZ3NbM10uY19zdHIoKQotICAgICAgICAgICAgICAgICAgPDwgIlxuIjsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvYmplY3QgbGlzdCBmaWxlOiAiIDw8IGFyZ3NbM10gPDwgIlxuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXM7CkBAIC02MjAsMTMgKzYyNCwxMiBAQAogICAgICAgfQogICAgICAgRklMRSogZm91dCA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6Rm9wZW4oYXJnc1syXSwgIncrIik7CiAgICAgICBpZiAoIWZvdXQpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgLmRlZiBmaWxlOiAiIDw8IGFyZ3NbMl0uY19zdHIoKQotICAgICAgICAgICAgICAgICAgPDwgIlxuIjsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgLmRlZiBmaWxlOiAiIDw8IGFyZ3NbMl0gPDwgIlxuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBiaW5kZXhwbGliIGRlZmZpbGU7CiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAgICAgICBhdXRvIGEgPSBhcmdzWzRdOworICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYSA9IGFyZ3NbNF07CiAgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYSwgIi0tbm09IikpIHsKICAgICAgICAgICBkZWZmaWxlLlNldE5tUGF0aChhLnN1YnN0cig1KSk7CiAgICAgICAgICAgc3RkOjpjZXJyIDw8IGEuc3Vic3RyKDUpIDw8ICJcbiI7CkBAIC02MzQsNyArNjM3LDcgQEAKICAgICAgICAgICBzdGQ6OmNlcnIgPDwgInVua25vd24gYXJndW1lbnQ6ICIgPDwgYSA8PCAiXG4iOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBmb3IgKGF1dG8gY29uc3QmIGZpbGUgOiBmaWxlcykgeworICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSA6IGZpbGVzKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24oZmlsZSk7CiAgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UoZXh0KSA9PSAiLmRlZiIpIHsKICAgICAgICAgICBpZiAoIWRlZmZpbGUuQWRkRGVmaW5pdGlvbkZpbGUoZmlsZS5jX3N0cigpKSkgewpAQCAtNjc4LDcgKzY4MSw3IEBACiAgICAgICAgIH0gZWxzZSBpZiAoIWEuZW1wdHkoKSAmJiBhWzBdID09ICctJykgewogICAgICAgICAgIC8vIEVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBjb21tYW5kIG5hbWVzIGNhbm5vdCBzdGFydCBpbiAnLScsCiAgICAgICAgICAgLy8gc28gdGhpcyBtdXN0IGJlIGFuIHVua25vd24gb3B0aW9uLgotICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiY21ha2UgLUUgZW52OiB1bmtub3duIG9wdGlvbiAnIiA8PCBhIDw8ICInIgorICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiY21ha2UgLUUgZW52OiB1bmtub3duIG9wdGlvbiAnIiA8PCBhIDw8ICdcJycKICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9IGVsc2UgaWYgKGEuZmluZCgnPScpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CkBAIC05MjcsNiArOTMwLDMzIEBACiAgICAgICByZXR1cm4gSGFzaFN1bUZpbGUoYXJncywgY21DcnlwdG9IYXNoOjpBbGdvU0hBNTEyKTsKICAgICB9CiAKKyAgICAvLyBDb21tYW5kIHRvIGNvbmNhdCBmaWxlcyBpbnRvIG9uZQorICAgIGlmIChhcmdzWzFdID09ICJjYXQiICYmIGFyZ3Muc2l6ZSgpID49IDMpIHsKKyAgICAgIGludCByZXR1cm5fdmFsdWUgPSAwOworICAgICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDIpKSB7CisgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLSIpKSB7CisgICAgICAgICAgaWYgKGFyZyAhPSAiLS0iKSB7CisgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihhcmcgKyAiOiBvcHRpb24gbm90IGhhbmRsZWQiKTsKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDE7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFjbVN5c3RlbVRvb2xzOjpUZXN0RmlsZUFjY2VzcyhhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc3lzOjpURVNUX0ZJTEVfUkVBRCkgJiYKKyAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpUZXN0RmlsZUFjY2VzcyhhcmcsIGNtc3lzOjpURVNUX0ZJTEVfT0spKSB7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoYXJnICsgIjogcGVybWlzc2lvbiBkZW5pZWQgKGlnbm9yaW5nKSIpOworICAgICAgICAgIHJldHVybl92YWx1ZSA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KGFyZykpIHsKKyAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihhcmcgKyAiOiBpcyBhIGRpcmVjdG9yeSAoaWdub3JpbmcpIik7CisgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMTsKKyAgICAgICAgfSBlbHNlIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhhcmcpKSB7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoYXJnICsgIjogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSAoaWdub3JpbmcpIik7CisgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjbUNhdEZpbGUoYXJnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICB9CisKICAgICAvLyBDb21tYW5kIHRvIGNoYW5nZSBkaXJlY3RvcnkgYW5kIHJ1biBhIHByb2dyYW0uCiAgICAgaWYgKGFyZ3NbMV0gPT0gImNoZGlyIiAmJiBhcmdzLnNpemUoKSA+PSA0KSB7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGlyZWN0b3J5ID0gYXJnc1syXTsKQEAgLTk4OSw3ICsxMDE5LDcgQEAKICAgICAvLyBDb21tYW5kIHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsuICBGYWlscyBvbiBwbGF0Zm9ybXMgbm90CiAgICAgLy8gc3VwcG9ydGluZyB0aGVtLgogICAgIGlmIChhcmdzWzFdID09ICJjcmVhdGVfc3ltbGluayIgJiYgYXJncy5zaXplKCkgPT0gNCkgewotICAgICAgY29uc3QgY2hhciogZGVzdGluYXRpb25GaWxlTmFtZSA9IGFyZ3NbM10uY19zdHIoKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXN0aW5hdGlvbkZpbGVOYW1lID0gYXJnc1szXTsKICAgICAgIGlmICgoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhkZXN0aW5hdGlvbkZpbGVOYW1lKSB8fAogICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpGaWxlSXNTeW1saW5rKGRlc3RpbmF0aW9uRmlsZU5hbWUpKSAmJgogICAgICAgICAgICFjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGRlc3RpbmF0aW9uRmlsZU5hbWUpKSB7CkBAIC0xMDA1LDYgKzEwMzUsMzQgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIC8vIENvbW1hbmQgdG8gY3JlYXRlIGEgaGFyZCBsaW5rLiAgRmFpbHMgb24gcGxhdGZvcm1zIG5vdAorICAgIC8vIHN1cHBvcnRpbmcgdGhlbS4KKyAgICBpZiAoYXJnc1sxXSA9PSAiY3JlYXRlX2hhcmRsaW5rIiAmJiBhcmdzLnNpemUoKSA9PSA0KSB7CisgICAgICBjb25zdCBjaGFyKiBTb3VjZUZpbGVOYW1lID0gYXJnc1syXS5jX3N0cigpOworICAgICAgY29uc3QgY2hhciogZGVzdGluYXRpb25GaWxlTmFtZSA9IGFyZ3NbM10uY19zdHIoKTsKKworICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKFNvdWNlRmlsZU5hbWUpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiZmFpbGVkIHRvIGNyZWF0ZSBoYXJkIGxpbmsgYmVjYXVzZSBzb3VyY2UgcGF0aCAnIgorICAgICAgICAgICAgICAgICAgPDwgU291Y2VGaWxlTmFtZSA8PCAiJyBkb2VzIG5vdCBleGlzdCBcbiI7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBpZiAoKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGVzdGluYXRpb25GaWxlTmFtZSkgfHwKKyAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RmlsZUlzU3ltbGluayhkZXN0aW5hdGlvbkZpbGVOYW1lKSkgJiYKKyAgICAgICAgICAhY21TeXN0ZW1Ub29sczo6UmVtb3ZlRmlsZShkZXN0aW5hdGlvbkZpbGVOYW1lKSkgeworICAgICAgICBzdGQ6OnN0cmluZyBlbXNnID0gY21TeXN0ZW1Ub29sczo6R2V0TGFzdFN5c3RlbUVycm9yKCk7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiZmFpbGVkIHRvIGNyZWF0ZSBoYXJkIGxpbmsgJyIgPDwgZGVzdGluYXRpb25GaWxlTmFtZQorICAgICAgICAgICAgICAgICAgPDwgIicgYmVjYXVzZSBleGlzdGluZyBwYXRoIGNhbm5vdCBiZSByZW1vdmVkOiAiIDw8IGVtc2cKKyAgICAgICAgICAgICAgICAgIDw8ICJcbiI7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkNyZWF0ZUxpbmsoYXJnc1syXSwgYXJnc1szXSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICAvLyBDb21tYW5kIHRvIGRvIG5vdGhpbmcgd2l0aCBhbiBleGl0IGNvZGUgb2YgMC4KICAgICBpZiAoYXJnc1sxXSA9PSAidHJ1ZSIpIHsKICAgICAgIHJldHVybiAwOwpAQCAtMTA1NCw4ICsxMTEyLDcgQEAKICAgICAgICAgaG9tZU91dERpciA9IGFyZ3NbNV07CiAgICAgICAgIHN0YXJ0T3V0RGlyID0gYXJnc1s2XTsKICAgICAgICAgZGVwSW5mbyA9IGFyZ3NbN107Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA5ICYmIGFyZ3NbOF0ubGVuZ3RoKCkgPj0gOCAmJgotICAgICAgICAgICAgYXJnc1s4XS5zdWJzdHIoMCwgOCkgPT0gIi0tY29sb3I9IikgeworICAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gOSAmJiBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnc1s4XSwgIi0tY29sb3I9IikpIHsKICAgICAgICAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBjb2xvciBiYXNlZCBvbiB0aGUgc3dpdGNoIHZhbHVlLgogICAgICAgICAgIGNvbG9yID0gKGFyZ3NbOF0uc2l6ZSgpID09IDggfHwgY21Jc09uKGFyZ3NbOF0uc3Vic3RyKDgpKSk7CiAgICAgICAgIH0KQEAgLTExODYsNyArMTI0Myw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1mb3JtYXQ9IikpIHsKICAgICAgICAgICAgIGZvcm1hdCA9IGFyZy5zdWJzdHIoOSk7Ci0gICAgICAgICAgICBpZiAoIWNtQ29udGFpbnMoa25vd25Gb3JtYXRzLCBmb3JtYXQpKSB7CisgICAgICAgICAgICBpZiAoIWNtOjpjb250YWlucyhrbm93bkZvcm1hdHMsIGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIlVua25vd24gLUUgdGFyIC0tZm9ybWF0PSBhcmd1bWVudDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCk7CiAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMTMwNCw3ICsxMzYxLDcgQEAKICAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tZGVidWciKSB7CiAgICAgICAgICAgcGlwZS5jbGVhcigpOwogICAgICAgICAgIGlzRGVidWcgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGFyZy5zdWJzdHIoMCwgcGlwZVByZWZpeC5zaXplKCkpID09IHBpcGVQcmVmaXgpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChhcmcsIHBpcGVQcmVmaXgpKSB7CiAgICAgICAgICAgaXNEZWJ1ZyA9IGZhbHNlOwogICAgICAgICAgIHBpcGUgPSBhcmcuc3Vic3RyKHBpcGVQcmVmaXguc2l6ZSgpKTsKICAgICAgICAgICBpZiAocGlwZS5lbXB0eSgpKSB7CkBAIC0xMzQ3LDE1ICsxNDA0LDEyIEBACiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgICAgLy8gV3JpdGUgcmVnaXN0cnkgdmFsdWUKICAgICBpZiAoYXJnc1sxXSA9PSAid3JpdGVfcmVndiIgJiYgYXJncy5zaXplKCkgPiAzKSB7Ci0gICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6V3JpdGVSZWdpc3RyeVZhbHVlKGFyZ3NbMl0uY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1szXS5jX3N0cigpKQotICAgICAgICA/IDAKLSAgICAgICAgOiAxOworICAgICAgcmV0dXJuIGNtU3lzdGVtVG9vbHM6OldyaXRlUmVnaXN0cnlWYWx1ZShhcmdzWzJdLCBhcmdzWzNdKSA/IDAgOiAxOwogICAgIH0KIAogICAgIC8vIERlbGV0ZSByZWdpc3RyeSB2YWx1ZQogICAgIGlmIChhcmdzWzFdID09ICJkZWxldGVfcmVndiIgJiYgYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RGVsZXRlUmVnaXN0cnlWYWx1ZShhcmdzWzJdLmNfc3RyKCkpID8gMCA6IDE7CisgICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RGVsZXRlUmVnaXN0cnlWYWx1ZShhcmdzWzJdKSA/IDAgOiAxOwogICAgIH0KIAogICAgIC8vIFJlbW92ZSBmaWxlCkBAIC0xNTExLDcgKzE1NjUsNyBAQAogICBib29sIG5ld2xpbmUgPSB0cnVlOwogICBzdGQ6OnN0cmluZyBwcm9ncmVzc0RpcjsKICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDIpKSB7Ci0gICAgaWYgKGFyZy5maW5kKCItLXN3aXRjaD0iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXN3aXRjaD0iKSkgewogICAgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgY29sb3IgYmFzZWQgb24gdGhlIHN3aXRjaCB2YWx1ZS4KICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cig5KTsKICAgICAgIGlmICghdmFsdWUuZW1wdHkoKSkgewpAQCAtMTU2Niw3ICsxNjIwLDcgQEAKICAgLy8gICBhcmdzWzNdID09IC0tdmVyYm9zZT0/CiAgIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICBpZiAoYXJncy5zaXplKCkgPj0gNCkgewotICAgIGlmIChhcmdzWzNdLmZpbmQoIi0tdmVyYm9zZT0iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmdzWzNdLCAiLS12ZXJib3NlPSIpKSB7CiAgICAgICBpZiAoIWNtSXNPZmYoYXJnc1szXS5zdWJzdHIoMTApKSkgewogICAgICAgICB2ZXJib3NlID0gdHJ1ZTsKICAgICAgIH0KQEAgLTE2NTQsMTEgKzE3MDgsMTMgQEAKICAgY21WaXN1YWxTdHVkaW9XQ0VQbGF0Zm9ybVBhcnNlciBwYXJzZXIobmFtZS5jX3N0cigpKTsKICAgcGFyc2VyLlBhcnNlVmVyc2lvbih2ZXJzaW9uKTsKICAgaWYgKHBhcnNlci5Gb3VuZCgpKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJAZWNobyBvZmYiIDw8IHN0ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgImVjaG8gRW52aXJvbm1lbnQgU2VsZWN0aW9uOiAiIDw8IG5hbWUgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IFBBVEg9IiA8PCBwYXJzZXIuR2V0UGF0aERpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IElOQ0xVREU9IiA8PCBwYXJzZXIuR2V0SW5jbHVkZURpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IExJQj0iIDw8IHBhcnNlci5HZXRMaWJyYXJ5RGlyZWN0b3JpZXMoKSA8PCBzdGQ6OmVuZGw7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIHN0ZDo6Y291dCA8PCAiQGVjaG8gb2ZmXG4iCisgICAgICAgICAgICAgICAgICJlY2hvIEVudmlyb25tZW50IFNlbGVjdGlvbjogIiA8PCBuYW1lIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBQQVRIPSIgPDwgcGFyc2VyLkdldFBhdGhEaXJlY3RvcmllcygpIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBJTkNMVURFPSIgPDwgcGFyc2VyLkdldEluY2x1ZGVEaXJlY3RvcmllcygpIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBMSUI9IiA8PCBwYXJzZXIuR2V0TGlicmFyeURpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICAgIHJldHVybiAwOwogICB9CiAjZWxzZQpAQCAtMTg0NSw3ICsxOTAxLDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGFuZGVkQXJnczsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGFyZ3MpIHsKICAgICAvLyBjaGVjayBmb3Igbm1ha2UgdGVtcG9yYXJ5IGZpbGVzCi0gICAgaWYgKGlbMF0gPT0gJ0AnICYmIGkuZmluZCgiQENNYWtlRmlsZXMiKSAhPSAwKSB7CisgICAgaWYgKGlbMF0gPT0gJ0AnICYmICFjbUhhc0xpdGVyYWxQcmVmaXgoaSwgIkBDTWFrZUZpbGVzIikpIHsKICAgICAgIGNtc3lzOjppZnN0cmVhbSBmaW4oaS5zdWJzdHIoMSkuY19zdHIoKSk7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5lOwogICAgICAgd2hpbGUgKGNtU3lzdGVtVG9vbHM6OkdldExpbmVGcm9tU3RyZWFtKGZpbiwgbGluZSkpIHsKQEAgLTE5NzEsOSArMjAyNyw4IEBACiAKICAgLy8gUGFyc2UgdGhlIGxpbmsgY29tbWFuZCB0byBleHRyYWN0IGluZm9ybWF0aW9uIHdlIG5lZWQuCiAgIGZvciAoOyBhcmcgIT0gYXJnRW5kOyArK2FyZykgewotICAgIGlmIChjbVN5c3RlbVRvb2xzOjpTdHJ1Y21wKGFyZy0+Y19zdHIoKSwgIi9JTkNSRU1FTlRBTDpZRVMiKSA9PSAwKSB7Ci0gICAgICB0aGlzLT5JbmNyZW1lbnRhbCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpTdHJ1Y21wKGFyZy0+Y19zdHIoKSwgIi9JTkNSRU1FTlRBTCIpID09IDApIHsKKyAgICBpZiAoY21TeXN0ZW1Ub29sczo6U3RydWNtcChhcmctPmNfc3RyKCksICIvSU5DUkVNRU5UQUw6WUVTIikgPT0gMCB8fAorICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdHJ1Y21wKGFyZy0+Y19zdHIoKSwgIi9JTkNSRU1FTlRBTCIpID09IDApIHsKICAgICAgIHRoaXMtPkluY3JlbWVudGFsID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6OlN0cnVjbXAoYXJnLT5jX3N0cigpLCAiL01BTklGRVNUOk5PIikgPT0gMCkgewogICAgICAgdGhpcy0+TGlua0dlbmVyYXRlc01hbmlmZXN0ID0gZmFsc2U7CkBAIC0yMDgzLDEyICsyMTM4LDE4IEBACiAgIH0KIAogICAvLyBJZiB3ZSBoYXZlIG5vdCBwcmV2aW91c2x5IGdlbmVyYXRlZCBhIG1hbmlmZXN0IGZpbGUsCi0gIC8vIGdlbmVyYXRlIGFuIGVtcHR5IG9uZSBzbyB0aGUgcmVzb3VyY2UgY29tcGlsZXIgc3VjY2VlZHMuCisgIC8vIGdlbmVyYXRlIGEgbWFuaWZlc3QgZmlsZSBzbyB0aGUgcmVzb3VyY2UgY29tcGlsZXIgc3VjY2VlZHMuCiAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0aGlzLT5NYW5pZmVzdEZpbGUpKSB7CiAgICAgaWYgKHRoaXMtPlZlcmJvc2UpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiQ3JlYXRlIGVtcHR5OiAiIDw8IHRoaXMtPk1hbmlmZXN0RmlsZSA8PCAiXG4iOwogICAgIH0KLSAgICBjbXN5czo6b2ZzdHJlYW0gZm91dFRtcCh0aGlzLT5NYW5pZmVzdEZpbGUuY19zdHIoKSk7CisgICAgaWYgKHRoaXMtPlVzZXJNYW5pZmVzdHMuZW1wdHkoKSkgeworICAgICAgLy8gZ2VuZXJhdGUgYW4gZW1wdHkgbWFuaWZlc3QgYmVjYXVzZSB0aGVyZSBhcmUgbm8gdXNlciBwcm92aWRlZAorICAgICAgLy8gbWFuaWZlc3QgZmlsZXMuCisgICAgICBjbXN5czo6b2ZzdHJlYW0gZm91dFRtcCh0aGlzLT5NYW5pZmVzdEZpbGUuY19zdHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPlJ1bk1UKCIvb3V0OiIgKyB0aGlzLT5NYW5pZmVzdEZpbGUsIGZhbHNlKTsKKyAgICB9CiAgIH0KIAogICAvLyBDb21waWxlIHRoZSByZXNvdXJjZSBmaWxlLgpAQCAtMjE1Niw3ICsyMjE3LDEwIEBACiAgIG10Q29tbWFuZC5wdXNoX2JhY2sodGhpcy0+TXRQYXRoLmVtcHR5KCkgPyAibXQiIDogdGhpcy0+TXRQYXRoKTsKICAgbXRDb21tYW5kLmVtcGxhY2VfYmFjaygiL25vbG9nbyIpOwogICBtdENvbW1hbmQuZW1wbGFjZV9iYWNrKCIvbWFuaWZlc3QiKTsKLSAgaWYgKHRoaXMtPkxpbmtHZW5lcmF0ZXNNYW5pZmVzdCkgeworCisgIC8vIGFkZCB0aGUgbGlua2VyIGdlbmVyYXRlZCBtYW5pZmVzdCBpZiB0aGUgZmlsZSBleGlzdHMuCisgIGlmICh0aGlzLT5MaW5rR2VuZXJhdGVzTWFuaWZlc3QgJiYKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHModGhpcy0+TGlua2VyTWFuaWZlc3RGaWxlKSkgewogICAgIG10Q29tbWFuZC5wdXNoX2JhY2sodGhpcy0+TGlua2VyTWFuaWZlc3RGaWxlKTsKICAgfQogICBjbTo6YXBwZW5kKG10Q29tbWFuZCwgdGhpcy0+VXNlck1hbmlmZXN0cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY3Rlc3QuY3h4IGIvU291cmNlL2N0ZXN0LmN4eAppbmRleCBmYmRmNzVhLi4zYjViZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY3Rlc3QuY3h4CisrKyBiL1NvdXJjZS9jdGVzdC5jeHgKQEAgLTM1LDYgKzM1LDcgQEAKICAgeyAiLS1vdXRwdXQtb24tZmFpbHVyZSIsCiAgICAgIk91dHB1dCBhbnl0aGluZyBvdXRwdXR0ZWQgYnkgdGhlIHRlc3QgcHJvZ3JhbSAiCiAgICAgImlmIHRoZSB0ZXN0IHNob3VsZCBmYWlsLiIgfSwKKyAgeyAiLS1zdG9wLW9uLWZhaWx1cmUiLCAiU3RvcCBydW5uaW5nIHRoZSB0ZXN0cyBhZnRlciBvbmUgaGFzIGZhaWxlZC4iIH0sCiAgIHsgIi0tdGVzdC1vdXRwdXQtc2l6ZS1wYXNzZWQgPHNpemU+IiwKICAgICAiTGltaXQgdGhlIG91dHB1dCBmb3IgcGFzc2VkIHRlc3RzICIKICAgICAidG8gPHNpemU+IGJ5dGVzIiB9LApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0Jhc2U2NC5jIGIvU291cmNlL2t3c3lzL0Jhc2U2NC5jCmluZGV4IGJmODc2ZjIuLjQyNjUwMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9CYXNlNjQuYworKysgYi9Tb3VyY2Uva3dzeXMvQmFzZTY0LmMKQEAgLTEzMCw3ICsxMzAsMTAgQEAKIC8qIERlY29kZSA0IGJ5dGVzIGludG8gYSAzIGJ5dGUgc3RyaW5nLiAqLwogaW50IGt3c3lzQmFzZTY0X0RlY29kZTMoY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCB1bnNpZ25lZCBjaGFyKiBkZXN0KQogewotICB1bnNpZ25lZCBjaGFyIGQwLCBkMSwgZDIsIGQzOworICB1bnNpZ25lZCBjaGFyIGQwOworICB1bnNpZ25lZCBjaGFyIGQxOworICB1bnNpZ25lZCBjaGFyIGQyOworICB1bnNpZ25lZCBjaGFyIGQzOwogCiAgIGQwID0ga3dzeXNCYXNlNjREZWNvZGVDaGFyKHNyY1swXSk7CiAgIGQxID0ga3dzeXNCYXNlNjREZWNvZGVDaGFyKHNyY1sxXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uva3dzeXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMDliY2RiOS4uYjBhODU0MiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9rd3N5cy9DTWFrZUxpc3RzLnR4dApAQCAtMTEsOSArMTEsOSBAQAogIyBiZSB1c2VkLiAgQWxsIGNsYXNzZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUaGUgQ01ha2UgbGlzdGZpbGUKICMgYWJvdmUgdGhpcyBvbmUgY29uZmlndXJlcyB0aGUgbGlicmFyeSBhcyBmb2xsb3dzOgogIwotIyAgU0VUKEtXU1lTX05BTUVTUEFDRSBmb29zeXMpCi0jICBTRVQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKSAgICAjIEVuYWJsZSBEaXJlY3RvcnkgY2xhc3MuCi0jICBTVUJESVJTKGt3c3lzKQorIyAgc2V0KEtXU1lTX05BTUVTUEFDRSBmb29zeXMpCisjICBzZXQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKSAgICAjIEVuYWJsZSBEaXJlY3RvcnkgY2xhc3MuCisjICBhZGRfc3ViZGlyZWN0b3J5KGt3c3lzKQogIwogIyBPcHRpb25hbCBzZXR0aW5ncyBhcmUgYXMgZm9sbG93czoKICMKQEAgLTM5LDggKzM5LDggQEAKICMKICMgICAgRXhhbXBsZToKICMKLSMgICAgICBTRVQoS1dTWVNfSEVBREVSX1JPT1QgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQotIyAgICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQorIyAgICAgIHNldChLV1NZU19IRUFERVJfUk9PVCAke1BST0pFQ1RfQklOQVJZX0RJUn0pCisjICAgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke1BST0pFQ1RfQklOQVJZX0RJUn0pCiAjCiAjICBLV1NZU19DWFhfU1RBTkRBUkQgICAgICAgICA9IEEgdmFsdWUgZm9yIENNQUtFX0NYWF9TVEFOREFSRCB3aXRoaW4gS1dTeXMuCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byBlbXB0eSBzdHJpbmcgdG8gdXNlIG5vIGRlZmF1bHQgdmFsdWUuCkBAIC02NSwxMSArNjUsMTEgQEAKICMKICMgICAgRXhhbXBsZToKICMKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9CSU5fRElSIGJpbikKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJfRElSIGxpYikKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUiBpbmNsdWRlKQotIyAgICAgIFNFVChLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUgUnVudGltZSkKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCBEZXZlbG9wbWVudCkKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9CSU5fRElSIGJpbikKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJfRElSIGxpYikKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUiBpbmNsdWRlKQorIyAgICAgIHNldChLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUgUnVudGltZSkKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCBEZXZlbG9wbWVudCkKIAogIyBPbmNlIGNvbmZpZ3VyZWQsIGt3c3lzIHNob3VsZCBiZSB1c2VkIGFzIGZvbGxvd3MgZnJvbSBDIG9yIEMrKyBjb2RlOgogIwpAQCAtODYsMzMgKzg2LDMzIEBACiAjIGFueSBvdXRzaWRlIG1haWxpbmcgbGlzdCBhbmQgbm8gZG9jdW1lbnRhdGlvbiBvZiB0aGUgY2hhbmdlIHdpbGwgYmUKICMgd3JpdHRlbi4KIAotQ01BS0VfTUlOSU1VTV9SRVFVSVJFRChWRVJTSU9OIDMuMSBGQVRBTF9FUlJPUikKLUZPUkVBQ0gocAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSBGQVRBTF9FUlJPUikKK2ZvcmVhY2gocAogICAgIENNUDAwNTYgIyBDTWFrZSAzLjIsIEhvbm9yIGxpbmsgZmxhZ3MgaW4gdHJ5X2NvbXBpbGUoKSBzb3VyY2UtZmlsZSBzaWduYXR1cmUuCiAgICAgQ01QMDA2MyAjIENNYWtlIDMuMywgSG9ub3IgdmlzaWJpbGl0eSBwcm9wZXJ0aWVzIGZvciBhbGwgdGFyZ2V0IHR5cGVzLgogICAgIENNUDAwNjcgIyBDTWFrZSAzLjgsIEhvbm9yIGxhbmd1YWdlIHN0YW5kYXJkIGluIHRyeV9jb21waWxlIHNvdXJjZS1maWxlIHNpZ25hdHVyZS4KICAgICBDTVAwMDY5ICMgQ01ha2UgMy45LCBJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OIGlzIGVuZm9yY2VkIHdoZW4gZW5hYmxlZC4KICAgICApCi0gIElGKFBPTElDWSAke3B9KQotICAgIENNQUtFX1BPTElDWShTRVQgJHtwfSBORVcpCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorICBpZihQT0xJQ1kgJHtwfSkKKyAgICBjbWFrZV9wb2xpY3koU0VUICR7cH0gTkVXKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIElmIGEgbmFtZXNwYWNlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSAia3dzeXMiIGFuZCBlbmFibGUgdGVzdGluZy4KICMgVGhpcyBzaG91bGQgYmUgdGhlIGNhc2Ugb25seSB3aGVuIGt3c3lzIGlzIG5vdCBpbmNsdWRlZCBpbnNpZGUKICMgYW5vdGhlciBwcm9qZWN0IGFuZCBpcyBiZWluZyB0ZXN0ZWQuCi1JRihOT1QgS1dTWVNfTkFNRVNQQUNFKQotICBTRVQoS1dTWVNfTkFNRVNQQUNFICJrd3N5cyIpCi0gIFNFVChLV1NZU19TVEFOREFMT05FIDEpCi1FTkRJRigpCitpZihOT1QgS1dTWVNfTkFNRVNQQUNFKQorICBzZXQoS1dTWVNfTkFNRVNQQUNFICJrd3N5cyIpCisgIHNldChLV1NZU19TVEFOREFMT05FIDEpCitlbmRpZigpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgcHJvamVjdCBuYW1lIGlzIHRoYXQgb2YgdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UuCi1QUk9KRUNUKCR7S1dTWVNfTkFNRVNQQUNFfSkKK3Byb2plY3QoJHtLV1NZU19OQU1FU1BBQ0V9KQogCiAjIFRlbGwgQ01ha2UgaG93IHRvIGZvbGxvdyBkZXBlbmRlbmNpZXMgb2Ygc291cmNlcyBpbiB0aGlzIGRpcmVjdG9yeS4KLVNFVF9QUk9QRVJUWShESVJFQ1RPUlkKK3NldF9wcm9wZXJ0eShESVJFQ1RPUlkKICAgUFJPUEVSVFkgSU1QTElDSVRfREVQRU5EU19JTkNMVURFX1RSQU5TRk9STQogICAiS1dTWVNfSEVBREVSKCUpPTwke0tXU1lTX05BTUVTUEFDRX0vJT4iCiAgICkKQEAgLTEzMSwzMDkgKzEzMSwyNTMgQEAKIGVuZGlmKCkKIAogIyBTZWxlY3QgbGlicmFyeSBjb21wb25lbnRzLgotSUYoS1dTWVNfU1RBTkRBTE9ORSBPUiBDTWFrZV9TT1VSQ0VfRElSKQotICBTRVQoS1dTWVNfRU5BQkxFX0MgMSkKK2lmKEtXU1lTX1NUQU5EQUxPTkUgT1IgQ01ha2VfU09VUkNFX0RJUikKKyAgc2V0KEtXU1lTX0VOQUJMRV9DIDEpCiAgICMgRW5hYmxlIGFsbCBjb21wb25lbnRzLgotICBTRVQoS1dTWVNfVVNFX0Jhc2U2NCAxKQotICBTRVQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQotICBTRVQoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIgMSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotICBTRVQoS1dTWVNfVVNFX0dsb2IgMSkKLSAgU0VUKEtXU1lTX1VTRV9NRDUgMSkKLSAgU0VUKEtXU1lTX1VTRV9Qcm9jZXNzIDEpCi0gIFNFVChLV1NZU19VU0VfUmVndWxhckV4cHJlc3Npb24gMSkKLSAgU0VUKEtXU1lTX1VTRV9TeXN0ZW0gMSkKLSAgU0VUKEtXU1lTX1VTRV9TeXN0ZW1Ub29scyAxKQotICBTRVQoS1dTWVNfVVNFX0NvbW1hbmRMaW5lQXJndW1lbnRzIDEpCi0gIFNFVChLV1NZU19VU0VfVGVybWluYWwgMSkKLSAgU0VUKEtXU1lTX1VTRV9JT1N0cmVhbSAxKQotICBTRVQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKLSAgU0VUKEtXU1lTX1VTRV9TdHJpbmcgMSkKLSAgU0VUKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbiAxKQotICBTRVQoS1dTWVNfVVNFX0NvbnNvbGVCdWYgMSkKLUVORElGKCkKKyAgc2V0KEtXU1lTX1VTRV9CYXNlNjQgMSkKKyAgc2V0KEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkKKyAgc2V0KEtXU1lTX1VTRV9EeW5hbWljTG9hZGVyIDEpCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKKyAgc2V0KEtXU1lTX1VTRV9HbG9iIDEpCisgIHNldChLV1NZU19VU0VfTUQ1IDEpCisgIHNldChLV1NZU19VU0VfUHJvY2VzcyAxKQorICBzZXQoS1dTWVNfVVNFX1JlZ3VsYXJFeHByZXNzaW9uIDEpCisgIHNldChLV1NZU19VU0VfU3lzdGVtIDEpCisgIHNldChLV1NZU19VU0VfU3lzdGVtVG9vbHMgMSkKKyAgc2V0KEtXU1lTX1VTRV9Db21tYW5kTGluZUFyZ3VtZW50cyAxKQorICBzZXQoS1dTWVNfVVNFX1Rlcm1pbmFsIDEpCisgIHNldChLV1NZU19VU0VfRlN0cmVhbSAxKQorICBzZXQoS1dTWVNfVVNFX1N0cmluZyAxKQorICBzZXQoS1dTWVNfVVNFX1N5c3RlbUluZm9ybWF0aW9uIDEpCisgIHNldChLV1NZU19VU0VfQ29uc29sZUJ1ZiAxKQorZW5kaWYoKQogCiAjIEVuZm9yY2UgY29tcG9uZW50IGRlcGVuZGVuY2llcy4KLUlGKEtXU1lTX1VTRV9TeXN0ZW1Ub29scykKLSAgU0VUKEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkKLSAgU0VUKEtXU1lTX1VTRV9GU3RyZWFtIDEpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9HbG9iKQotICBTRVQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQotICBTRVQoS1dTWVNfVVNFX1N5c3RlbVRvb2xzIDEpCi0gIFNFVChLV1NZU19VU0VfUmVndWxhckV4cHJlc3Npb24gMSkKLSAgU0VUKEtXU1lTX1VTRV9GU3RyZWFtIDEpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQotICBTRVQoS1dTWVNfVVNFX1N5c3RlbSAxKQotICBTRVQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCi1FTkRJRigpCi1JRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gIFNFVChLV1NZU19VU0VfUHJvY2VzcyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX1N5c3RlbSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX0RpcmVjdG9yeSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9GU3RyZWFtKQotICBTRVQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCi1FTkRJRigpCi1JRihLV1NZU19VU0VfQ29uc29sZUJ1ZikKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQoraWYoS1dTWVNfVVNFX1N5c3RlbVRvb2xzKQorICBzZXQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQorICBzZXQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX0dsb2IpCisgIHNldChLV1NZU19VU0VfRGlyZWN0b3J5IDEpCisgIHNldChLV1NZU19VU0VfU3lzdGVtVG9vbHMgMSkKKyAgc2V0KEtXU1lTX1VTRV9SZWd1bGFyRXhwcmVzc2lvbiAxKQorICBzZXQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX1Byb2Nlc3MpCisgIHNldChLV1NZU19VU0VfU3lzdGVtIDEpCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKK2VuZGlmKCkKK2lmKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKKyAgc2V0KEtXU1lTX1VTRV9Qcm9jZXNzIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfU3lzdGVtKQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfRGlyZWN0b3J5KQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX0ZTdHJlYW0pCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKK2VuZGlmKCkKK2lmKEtXU1lTX1VTRV9Db25zb2xlQnVmKQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCiAKICMgU3BlY2lmeSBkZWZhdWx0IDggYml0IGVuY29kaW5nIGZvciBXaW5kb3dzCi1JRihOT1QgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRSkKLSAgU0VUKEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0UgQ1BfQUNQKQotRU5ESUYoKQoraWYoTk9UIEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0UpCisgIHNldChLV1NZU19FTkNPRElOR19ERUZBVUxUX0NPREVQQUdFIENQX0FDUCkKK2VuZGlmKCkKIAogIyBFbmFibGUgdGVzdGluZyBpZiBidWlsZGluZyBzdGFuZGFsb25lLgotSUYoS1dTWVNfU1RBTkRBTE9ORSkKLSAgSU5DTFVERShEYXJ0KQotICBNQVJLX0FTX0FEVkFOQ0VEKEJVSUxEX1RFU1RJTkcgREFSVF9ST09UIFRDTF9UQ0xTSCkKLSAgSUYoQlVJTERfVEVTVElORykKLSAgICBFTkFCTEVfVEVTVElORygpCi0gIEVORElGKCkKLUVORElGKCkKK2lmKEtXU1lTX1NUQU5EQUxPTkUpCisgIGluY2x1ZGUoRGFydCkKKyAgbWFya19hc19hZHZhbmNlZChCVUlMRF9URVNUSU5HIERBUlRfUk9PVCBUQ0xfVENMU0gpCisgIGlmKEJVSUxEX1RFU1RJTkcpCisgICAgZW5hYmxlX3Rlc3RpbmcoKQorICBlbmRpZigpCitlbmRpZigpCiAKICMgQ2hvb3NlIGRlZmF1bHQgc2hhcmVkL3N0YXRpYyBidWlsZCBpZiBub3Qgc3BlY2lmaWVkLgotSUYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfU0hBUkVEKQotICBTRVQoS1dTWVNfQlVJTERfU0hBUkVEICR7QlVJTERfU0hBUkVEX0xJQlN9KQotRU5ESUYoKQoraWYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfU0hBUkVEKQorICBzZXQoS1dTWVNfQlVJTERfU0hBUkVEICR7QlVJTERfU0hBUkVEX0xJQlN9KQorZW5kaWYoKQogCiAjIEluY2x1ZGUgaGVscGVyIG1hY3Jvcy4KLUlOQ0xVREUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZSkKLUlOQ0xVREUoQ2hlY2tUeXBlU2l6ZSkKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZSkKK2luY2x1ZGUoQ2hlY2tUeXBlU2l6ZSkKIAogIyBEbyBmdWxsIGRlcGVuZGVuY3kgaGVhZGVycy4KLUlOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OKCJeLiokIikKK2luY2x1ZGVfcmVndWxhcl9leHByZXNzaW9uKCJeLiokIikKIAogIyBVc2UgbmV3IEtXU1lTX0lOU1RBTExfKl9ESVIgdmFyaWFibGUgbmFtZXMgdG8gY29udHJvbCBpbnN0YWxsYXRpb24uCiAjIFRha2UgZGVmYXVsdHMgZnJvbSB0aGUgb2xkIG5hbWVzLiAgTm90ZSB0aGF0IHRoZXJlIHdhcyBubyBvbGQgbmFtZQogIyBmb3IgdGhlIGJpbiBkaXIsIHNvIHdlIHRha2UgdGhlIG9sZCBsaWIgZGlyIG5hbWUgc28gRExMcyB3aWxsIGJlCiAjIGluc3RhbGxlZCBpbiBhIGNvbXBhdGlibGUgd2F5IGZvciBvbGQgY29kZS4KLUlGKE5PVCBLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICBTVFJJTkcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIKK2lmKE5PVCBLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIKICAgICAiJHtLV1NZU19IRUFERVJfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKLUlGKE5PVCBLV1NZU19JTlNUQUxMX0xJQl9ESVIpCi0gIFNUUklORyhSRUdFWCBSRVBMQUNFICJeLyIgIiIgS1dTWVNfSU5TVEFMTF9MSUJfRElSCitlbmRpZigpCitpZihOT1QgS1dTWVNfSU5TVEFMTF9MSUJfRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfTElCX0RJUgogICAgICIke0tXU1lTX0xJQlJBUllfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKLUlGKE5PVCBLV1NZU19JTlNUQUxMX0JJTl9ESVIpCi0gIFNUUklORyhSRUdFWCBSRVBMQUNFICJeLyIgIiIgS1dTWVNfSU5TVEFMTF9CSU5fRElSCitlbmRpZigpCitpZihOT1QgS1dTWVNfSU5TVEFMTF9CSU5fRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfQklOX0RJUgogICAgICIke0tXU1lTX0xJQlJBUllfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKK2VuZGlmKCkKIAogIyBTZXR1cCBoZWFkZXIgaW5zdGFsbCBydWxlcy4KLVNFVChLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OUykKLUlGKEtXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlQpCi0gIFNFVChLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OUyAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TfQorc2V0KEtXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TKQoraWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgc2V0KEtXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX09QVElPTlN9CiAgICAgQ09NUE9ORU5UICR7S1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVH0KICAgICApCi1FTkRJRigpCitlbmRpZigpCiAKICMgU2V0dXAgbGlicmFyeSBpbnN0YWxsIHJ1bGVzLgotU0VUKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQotU0VUKEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKLUlGKEtXU1lTX0lOU1RBTExfTElCX0RJUikKLSAgSUYoS1dTWVNfSU5TVEFMTF9FWFBPUlRfTkFNRSkKLSAgICBMSVNUKEFQUEVORCBLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSBFWFBPUlQgJHtLV1NZU19JTlNUQUxMX0VYUE9SVF9OQU1FfSkKLSAgRU5ESUYoKQorc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQorc2V0KEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKK2lmKEtXU1lTX0lOU1RBTExfTElCX0RJUikKKyAgaWYoS1dTWVNfSU5TVEFMTF9FWFBPUlRfTkFNRSkKKyAgICBsaXN0KEFQUEVORCBLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSBFWFBPUlQgJHtLV1NZU19JTlNUQUxMX0VYUE9SVF9OQU1FfSkKKyAgZW5kaWYoKQogICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IHRvIHRoZSBsaWIgZGlyZWN0b3J5LgotICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KKyAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgTElCUkFSWSBERVNUSU5BVElPTiAke0tXU1lTX0lOU1RBTExfTElCX0RJUn0gTkFNRUxJTktfU0tJUAogICAgICkKICAgIyBBc3NpZ24gdGhlIHNoYXJlZCBsaWJyYXJ5IHRvIHRoZSBydW50aW1lIGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FKQotICAgIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBpZihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCisgICAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgICBDT01QT05FTlQgJHtLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUV9CiAgICAgICApCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfQlVJTERfU0hBUkVEKQotICAgIFNFVChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CisgIGVuZGlmKCkKKyAgaWYoS1dTWVNfQlVJTERfU0hBUkVEKQorICAgIHNldChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CiAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9MSUJfRElSfSBOQU1FTElOS19PTkxZCiAgICAgICApCiAgICAgIyBBc3NpZ24gdGhlIG5hbWVsaW5rIHRvIHRoZSBkZXZlbG9wbWVudCBjb21wb25lbnQuCi0gICAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKLSAgICAgIFNFVChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CisgICAgaWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgICAgIHNldChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CiAgICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlR9CiAgICAgICAgICkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIAogICAjIEluc3RhbGwgdGhlIGFyY2hpdmUgdG8gdGhlIGxpYiBkaXJlY3RvcnkuCi0gIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KICAgICBBUkNISVZFIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9MSUJfRElSfQogICAgICkKICAgIyBBc3NpZ24gdGhlIGFyY2hpdmUgdG8gdGhlIGRldmVsb3BtZW50IGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKLSAgICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KKyAgaWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlR9CiAgICAgICApCi0gIEVORElGKCkKLUVORElGKCkKLUlGKEtXU1lTX0lOU1RBTExfQklOX0RJUikKKyAgZW5kaWYoKQorZW5kaWYoKQoraWYoS1dTWVNfSU5TVEFMTF9CSU5fRElSKQogICAjIEluc3RhbGwgdGhlIHJ1bnRpbWUgbGlicmFyeSB0byB0aGUgYmluIGRpcmVjdG9yeS4KLSAgU0VUKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CisgIHNldChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQogICAgIFJVTlRJTUUgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0JJTl9ESVJ9CiAgICAgKQogICAjIEFzc2lnbiB0aGUgcnVudGltZSBsaWJyYXJ5IHRvIHRoZSBydW50aW1lIGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FKQotICAgIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBpZihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCisgICAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgICBDT01QT05FTlQgJHtLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUV9CiAgICAgICApCi0gIEVORElGKCkKLUVORElGKCkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIERvIG5vdCBzdXBwb3J0IG9sZCBLV1NZU18qYV9JTlNUQUxMX0RJUiB2YXJpYWJsZSBuYW1lcy4KLVNFVChLV1NZU19IRUFERVJfSU5TVEFMTF9ESVIpCi1TRVQoS1dTWVNfTElCUkFSWV9JTlNUQUxMX0RJUikKK3NldChLV1NZU19IRUFERVJfSU5TVEFMTF9ESVIpCitzZXQoS1dTWVNfTElCUkFSWV9JTlNUQUxMX0RJUikKIAogIyBHZW5lcmF0ZWQgc291cmNlIGZpbGVzIHdpbGwgbmVlZCB0aGlzIGhlYWRlci4KLVNUUklORyhDT01QQVJFIEVRVUFMICIke1BST0pFQ1RfU09VUkNFX0RJUn0iICIke1BST0pFQ1RfQklOQVJZX0RJUn0iCitzdHJpbmcoQ09NUEFSRSBFUVVBTCAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9IiAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IgogICBLV1NZU19JTl9TT1VSQ0VfQlVJTEQpCi1JRihOT1QgS1dTWVNfSU5fU09VUkNFX0JVSUxEKQotICBDT05GSUdVUkVfRklMRSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXNQcml2YXRlLmgKK2lmKE5PVCBLV1NZU19JTl9TT1VSQ0VfQlVJTEQpCisgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5c1ByaXZhdGUuaAogICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9rd3N5c1ByaXZhdGUuaCBDT1BZT05MWSBJTU1FRElBVEUpCi1FTkRJRigpCitlbmRpZigpCiAKICMgU2VsZWN0IHBsdWdpbiBtb2R1bGUgZmlsZSBuYW1lIGNvbnZlbnRpb24uCi1JRihOT1QgS1dTWVNfRHluYW1pY0xvYWRlcl9QUkVGSVgpCi0gIFNFVChLV1NZU19EeW5hbWljTG9hZGVyX1BSRUZJWCAke0NNQUtFX1NIQVJFRF9NT0RVTEVfUFJFRklYfSkKLUVORElGKCkKLUlGKE5PVCBLV1NZU19EeW5hbWljTG9hZGVyX1NVRkZJWCkKLSAgU0VUKEtXU1lTX0R5bmFtaWNMb2FkZXJfU1VGRklYICR7Q01BS0VfU0hBUkVEX01PRFVMRV9TVUZGSVh9KQotRU5ESUYoKQoraWYoTk9UIEtXU1lTX0R5bmFtaWNMb2FkZXJfUFJFRklYKQorICBzZXQoS1dTWVNfRHluYW1pY0xvYWRlcl9QUkVGSVggJHtDTUFLRV9TSEFSRURfTU9EVUxFX1BSRUZJWH0pCitlbmRpZigpCitpZihOT1QgS1dTWVNfRHluYW1pY0xvYWRlcl9TVUZGSVgpCisgIHNldChLV1NZU19EeW5hbWljTG9hZGVyX1NVRkZJWCAke0NNQUtFX1NIQVJFRF9NT0RVTEVfU1VGRklYfSkKK2VuZGlmKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFdlIHJlcXVpcmUgQU5TSSBzdXBwb3J0IGZyb20gdGhlIEMgY29tcGlsZXIuICBBZGQgYW55IG5lZWRlZCBmbGFncy4KLUlGKENNQUtFX0FOU0lfQ0ZMQUdTKQotICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAke0NNQUtFX0FOU0lfQ0ZMQUdTfSIpCi1FTkRJRigpCitpZihDTUFLRV9BTlNJX0NGTEFHUykKKyAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gJHtDTUFLRV9BTlNJX0NGTEFHU30iKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQWRqdXN0IGNvbXBpbGVyIGZsYWdzIGZvciBzb21lIHBsYXRmb3Jtcy4KLUlGKE5PVCBDTUFLRV9DT01QSUxFUl9JU19HTlVDWFgpCi0gIElGKENNQUtFX1NZU1RFTSBNQVRDSEVTICJPU0YxLVYuKiIpCi0gICAgU1RSSU5HKFJFR0VYIE1BVENIICItdGltcGxpY2l0X2xvY2FsIgoraWYoTk9UIENNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWCkKKyAgaWYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIk9TRjEtVi4qIikKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIi10aW1wbGljaXRfbG9jYWwiCiAgICAgICBLV1NZU19DWFhfRkxBR1NfSEFWRV9JTVBMSUNJVF9MT0NBTCAiJHtDTUFLRV9DWFhfRkxBR1N9IikKLSAgICBTVFJJTkcoUkVHRVggTUFUQ0ggIi1ub19pbXBsaWNpdF9pbmNsdWRlIgorICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiLW5vX2ltcGxpY2l0X2luY2x1ZGUiCiAgICAgICBLV1NZU19DWFhfRkxBR1NfSEFWRV9OT19JTVBMSUNJVF9JTkNMVURFICIke0NNQUtFX0NYWF9GTEFHU30iKQotICAgIElGKE5PVCBLV1NZU19DWFhfRkxBR1NfSEFWRV9JTVBMSUNJVF9MT0NBTCkKLSAgICAgIFNFVChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtdGltcGxpY2l0X2xvY2FsIikKLSAgICBFTkRJRigpCi0gICAgSUYoTk9UIEtXU1lTX0NYWF9GTEFHU19IQVZFX05PX0lNUExJQ0lUX0lOQ0xVREUpCi0gICAgICBTRVQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLW5vX2ltcGxpY2l0X2luY2x1ZGUiKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihDTUFLRV9TWVNURU0gTUFUQ0hFUyAiSFAtVVgiKQotICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9FWFRSQV9GTEFHUyAiK3AiKQotICAgIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRDSEVTICJIUCIpCisgICAgaWYoTk9UIEtXU1lTX0NYWF9GTEFHU19IQVZFX0lNUExJQ0lUX0xPQ0FMKQorICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC10aW1wbGljaXRfbG9jYWwiKQorICAgIGVuZGlmKCkKKyAgICBpZihOT1QgS1dTWVNfQ1hYX0ZMQUdTX0hBVkVfTk9fSU1QTElDSVRfSU5DTFVERSkKKyAgICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtbm9faW1wbGljaXRfaW5jbHVkZSIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCisgICAgc2V0KEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0VYVFJBX0ZMQUdTICIrcCIpCisgICAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkhQIikKICAgICAgICMgaXQgaXMga25vd24gdGhhdCB2ZXJzaW9uIDMuODUgZmFpbHMgYW5kIDYuMjUgd29ya3Mgd2l0aG91dCB0aGVzZSBmbGFncwotICAgICAgSUYoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQpCisgICAgICBpZihDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNCkKICAgICAgICAgIyB1c2UgbmV3IEMrKyBsaWJyYXJ5IGFuZCBpbXByb3ZlZCB0ZW1wbGF0ZSBzdXBwb3J0Ci0gICAgICAgIFNFVChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtQUEgK2hweHN0ZDk4IikKLSAgICAgIEVORElGKCkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKLUlGKEtXU1lTX1NUQU5EQUxPTkUpCi0gIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCBTdW5Qcm8pCi0gICAgSUYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA1LjEzKQotICAgICAgU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1zdGQ9YysrMDMiKQotICAgIEVMU0UoKQotICAgICAgU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1saWJyYXJ5PXN0bHBvcnQ0IikKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKKyAgICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1BQSAraHB4c3RkOTgiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQoraWYoS1dTWVNfU1RBTkRBTE9ORSkKKyAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIFNUUkVRVUFMIFN1blBybykKKyAgICBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDUuMTMpCisgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLXN0ZD1jKyswMyIpCisgICAgZWxzZSgpCisgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLWxpYnJhcnk9c3RscG9ydDQiKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29uZmlndXJlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGhlYWRlciB3cmFwcGVycyBiYXNlZCBvbiBjb21waWxlcidzCiAjIGNhcGFiaWxpdGllcyBhbmQgcGFyZW50IHByb2plY3QncyByZXF1ZXN0LiAgRW5mb3JjZSAwLzEgYXMgb25seQogIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIGNvbmZpZ3VyYXRpb24gaW50byBDb25maWd1cmUuaHh4LgogCi0jIENoZWNrIGV4aXN0ZW5jZSBhbmQgdW5pcXVlbmVzcyBvZiBsb25nIGxvbmcgYW5kIF9faW50NjQuCi1LV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0xPTkdfTE9ORwotICAiQ2hlY2tpbmcgd2hldGhlciBDKysgY29tcGlsZXIgaGFzICdsb25nIGxvbmcnIiBESVJFQ1QpCi1LV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX19fSU5UNjQKLSAgIkNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhcyAnX19pbnQ2NCciIERJUkVDVCkKLUlGKEtXU1lTX0NYWF9IQVNfX19JTlQ2NCkKLSAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX1NBTUVfTE9OR19BTkRfX19JTlQ2NAotICAgICJDaGVja2luZyB3aGV0aGVyIGxvbmcgYW5kIF9faW50NjQgYXJlIHRoZSBzYW1lIHR5cGUiIERJUkVDVCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19MT05HX0xPTkcpCi0gICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX1NBTUVfTE9OR19MT05HX0FORF9fX0lOVDY0Ci0gICAgICAiQ2hlY2tpbmcgd2hldGhlciBsb25nIGxvbmcgYW5kIF9faW50NjQgYXJlIHRoZSBzYW1lIHR5cGUiIERJUkVDVCkKLSAgRU5ESUYoKQotRU5ESUYoKQotCi0jIEVuYWJsZSB0aGUgImxvbmcgbG9uZyIgdHlwZSBpZiBpdCBpcyBhdmFpbGFibGUuICBJdCBpcyBzdGFuZGFyZCBpbgotIyBDOTkgYW5kIEMrKzAzIGJ1dCBub3QgaW4gZWFybGllciBzdGFuZGFyZHMuCi1JRihLV1NZU19DWFhfSEFTX0xPTkdfTE9ORykKLSAgU0VUKEtXU1lTX1VTRV9MT05HX0xPTkcgMSkKLUVMU0UoKQotICBTRVQoS1dTWVNfVVNFX0xPTkdfTE9ORyAwKQotRU5ESUYoKQotCi0jIEVuYWJsZSB0aGUgIl9faW50NjQiIHR5cGUgaWYgaXQgaXMgYXZhaWxhYmxlIGFuZCB1bmlxdWUuICBJdCBpcyBub3QKLSMgc3RhbmRhcmQuCi1TRVQoS1dTWVNfVVNFX19fSU5UNjQgMCkKLUlGKEtXU1lTX0NYWF9IQVNfX19JTlQ2NCkKLSAgSUYoTk9UIEtXU1lTX0NYWF9TQU1FX0xPTkdfQU5EX19fSU5UNjQpCi0gICAgSUYoTk9UIEtXU1lTX0NYWF9TQU1FX0xPTkdfTE9OR19BTkRfX19JTlQ2NCkKLSAgICAgIFNFVChLV1NZU19VU0VfX19JTlQ2NCAxKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotRU5ESUYoKQotCi1JRihLV1NZU19VU0VfRW5jb2RpbmcpCitpZihLV1NZU19VU0VfRW5jb2RpbmcpCiAgICMgTG9vayBmb3IgdHlwZSBzaXplIGhlbHBlciBtYWNyb3MuCiAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX1NUTF9IQVNfV1NUUklORwogICAgICJDaGVja2luZyB3aGV0aGVyIHdzdHJpbmcgaXMgYXZhaWxhYmxlIiBESVJFQ1QpCi1FTkRJRigpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9JT1N0cmVhbSkKLSAgIyBEZXRlcm1pbmUgd2hldGhlciBpb3N0cmVhbXMgc3VwcG9ydCBsb25nIGxvbmcuCi0gIElGKEtXU1lTX0NYWF9IQVNfTE9OR19MT05HKQotICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9MT05HX0xPTkcKLSAgICAgICJDaGVja2luZyBpZiBpc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZyIgRElSRUNUKQotICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcKLSAgICAgICJDaGVja2luZyBpZiBvc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZyIgRElSRUNUKQotICBFTFNFKCkKLSAgICBTRVQoS1dTWVNfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORyAwKQotICAgIFNFVChLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HIDApCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19fX0lOVDY0KQotICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0Ci0gICAgICAiQ2hlY2tpbmcgaWYgaXN0cmVhbSBzdXBwb3J0cyBfX2ludDY0IiBESVJFQ1QpCi0gICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQKLSAgICAgICJDaGVja2luZyBpZiBvc3RyZWFtIHN1cHBvcnRzIF9faW50NjQiIERJUkVDVCkKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0IDApCi0gICAgU0VUKEtXU1lTX0lPU19IQVNfT1NUUkVBTV9fX0lOVDY0IDApCi0gIEVORElGKCkKLUVORElGKCkKK2lmKEtXU1lTX05BTUVTUEFDRSBNQVRDSEVTICJea3dzeXMkIikKKyAgc2V0KEtXU1lTX05BTUVfSVNfS1dTWVMgMSkKK2Vsc2UoKQorICBzZXQoS1dTWVNfTkFNRV9JU19LV1NZUyAwKQorZW5kaWYoKQogCi1JRihLV1NZU19OQU1FU1BBQ0UgTUFUQ0hFUyAiXmt3c3lzJCIpCi0gIFNFVChLV1NZU19OQU1FX0lTX0tXU1lTIDEpCi1FTFNFKCkKLSAgU0VUKEtXU1lTX05BTUVfSVNfS1dTWVMgMCkKLUVORElGKCkKLQotSUYoS1dTWVNfQlVJTERfU0hBUkVEKQotICBTRVQoS1dTWVNfQlVJTERfU0hBUkVEIDEpCi0gIFNFVChLV1NZU19MSUJSQVJZX1RZUEUgU0hBUkVEKQotRUxTRSgpCi0gIFNFVChLV1NZU19CVUlMRF9TSEFSRUQgMCkKLSAgU0VUKEtXU1lTX0xJQlJBUllfVFlQRSBTVEFUSUMpCi1FTkRJRigpCitpZihLV1NZU19CVUlMRF9TSEFSRUQpCisgIHNldChLV1NZU19CVUlMRF9TSEFSRUQgMSkKKyAgc2V0KEtXU1lTX0xJQlJBUllfVFlQRSBTSEFSRUQpCitlbHNlKCkKKyAgc2V0KEtXU1lTX0JVSUxEX1NIQVJFRCAwKQorICBzZXQoS1dTWVNfTElCUkFSWV9UWVBFIFNUQVRJQykKK2VuZGlmKCkKIAogaWYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfUElDKQogICBzZXQoS1dTWVNfQlVJTERfUElDIDApCkBAIC00NDYsMzIgKzM5MCwzMiBAQAogICAiQ2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhcyBwdHJkaWZmX3QgaW4gc3RkZGVmLmgiIERJUkVDVCkKIEtXU1lTX1BMQVRGT1JNX0NfVEVTVChLV1NZU19DX0hBU19TU0laRV9UCiAgICJDaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFzIHNzaXplX3QgaW4gdW5pc3RkLmgiIERJUkVDVCkKLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQoraWYoS1dTWVNfVVNFX1Byb2Nlc3MpCiAgIEtXU1lTX1BMQVRGT1JNX0NfVEVTVChLV1NZU19DX0hBU19DTE9DS19HRVRUSU1FX01PTk9UT05JQwogICAgICJDaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFzIGNsb2NrX2dldHRpbWUiIERJUkVDVCkKLUVORElGKCkKK2VuZGlmKCkKIAotU0VUX1NPVVJDRV9GSUxFU19QUk9QRVJUSUVTKFByb2Nlc3NVTklYLmMgU3lzdGVtLmMgUFJPUEVSVElFUworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKFByb2Nlc3NVTklYLmMgU3lzdGVtLmMgUFJPUEVSVElFUwogICBDT01QSUxFX0ZMQUdTICItREtXU1lTX0NfSEFTX1BUUkRJRkZfVD0ke0tXU1lTX0NfSEFTX1BUUkRJRkZfVH0gLURLV1NZU19DX0hBU19TU0laRV9UPSR7S1dTWVNfQ19IQVNfU1NJWkVfVH0gLURLV1NZU19DX0hBU19DTE9DS19HRVRUSU1FX01PTk9UT05JQz0ke0tXU1lTX0NfSEFTX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDfSIKICAgKQogCi1JRihERUZJTkVEIEtXU1lTX1BST0NFU1NfVVNFX1NFTEVDVCkKLSAgR0VUX1BST1BFUlRZKFByb2Nlc3NVTklYX0ZMQUdTIFNPVVJDRSBQcm9jZXNzVU5JWC5jIFBST1BFUlRZIENPTVBJTEVfRkxBR1MpCi0gIFNFVF9QUk9QRVJUWShTT1VSQ0UgUHJvY2Vzc1VOSVguYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICIke1Byb2Nlc3NVTklYX0ZMQUdTfSAtREtXU1lTUEVfVVNFX1NFTEVDVD0ke0tXU1lTUEVfVVNFX1NFTEVDVH0iKQotRU5ESUYoKQoraWYoREVGSU5FRCBLV1NZU19QUk9DRVNTX1VTRV9TRUxFQ1QpCisgIGdldF9wcm9wZXJ0eShQcm9jZXNzVU5JWF9GTEFHUyBTT1VSQ0UgUHJvY2Vzc1VOSVguYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTKQorICBzZXRfcHJvcGVydHkoU09VUkNFIFByb2Nlc3NVTklYLmMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAiJHtQcm9jZXNzVU5JWF9GTEFHU30gLURLV1NZU1BFX1VTRV9TRUxFQ1Q9JHtLV1NZU1BFX1VTRV9TRUxFQ1R9IikKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCi0gIEdFVF9QUk9QRVJUWShLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUyBHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTKQotICBJRihLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUykKLSAgICBTRVQoS1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlMgMSkKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTIDApCi0gIEVORElGKCkKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBEeW5hbWljTG9hZGVyLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworaWYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCisgIGdldF9wcm9wZXJ0eShLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUyBHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTKQorICBpZihLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUykKKyAgICBzZXQoS1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlMgMSkKKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTIDApCisgIGVuZGlmKCkKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBEeW5hbWljTG9hZGVyLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgIEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTPSR7S1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlN9KQotRU5ESUYoKQorZW5kaWYoKQogCi1JRihLV1NZU19VU0VfU3lzdGVtVG9vbHMpCitpZihLV1NZU19VU0VfU3lzdGVtVG9vbHMpCiAgIGlmIChOT1QgREVGSU5FRCBLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQKQogICAgIHNldChLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQIDEpCiAgIGVuZGlmICgpCkBAIC00OTQsNyArNDM4LDcgQEAKICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgc3RydWN0IHN0YXQgaGFzIHN0X210aW0gbWVtYmVyIiBESVJFQ1QpCiAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNRVNQRUMKICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgc3RydWN0IHN0YXQgaGFzIHN0X210aW1lc3BlYyBtZW1iZXIiIERJUkVDVCkKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKICAgICBLV1NZU19DWFhfSEFTX1NFVEVOVj0ke0tXU1lTX0NYWF9IQVNfU0VURU5WfQogICAgIEtXU1lTX0NYWF9IQVNfVU5TRVRFTlY9JHtLV1NZU19DWFhfSEFTX1VOU0VURU5WfQogICAgIEtXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSD0ke0tXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSH0KQEAgLTUwMyw2MjMgKzQ0Nyw1NjQgQEAKICAgICBLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTT0ke0tXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNfQogICAgIEtXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNRVNQRUM9JHtLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTUVTUEVDfQogICAgICkKLSAgSUYoTk9UIFdJTjMyKQotICAgIElGKEtXU1lTX1NUQU5EQUxPTkUpCi0gICAgICBPUFRJT04oS1dTWVNfU1lTVEVNVE9PTFNfU1VQUE9SVF9XSU5ET1dTX1NMQVNIRVMgIklmIHRydWUsIFdpbmRvd3MgcGF0aHMgd2lsbCBiZSBzdXBwb3J0ZWQgb24gVW5peCBhcyB3ZWxsIiBPTikKLSAgICBFTkRJRigpCi0gICAgSUYoS1dTWVNfU1lTVEVNVE9PTFNfU1VQUE9SVF9XSU5ET1dTX1NMQVNIRVMpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbVRvb2xzLmN4eCB0ZXN0U3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCisgIGlmKE5PVCBXSU4zMikKKyAgICBpZihLV1NZU19TVEFOREFMT05FKQorICAgICAgb3B0aW9uKEtXU1lTX1NZU1RFTVRPT0xTX1NVUFBPUlRfV0lORE9XU19TTEFTSEVTICJJZiB0cnVlLCBXaW5kb3dzIHBhdGhzIHdpbGwgYmUgc3VwcG9ydGVkIG9uIFVuaXggYXMgd2VsbCIgT04pCisgICAgZW5kaWYoKQorICAgIGlmKEtXU1lTX1NZU1RFTVRPT0xTX1NVUFBPUlRfV0lORE9XU19TTEFTSEVTKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggdGVzdFN5c3RlbVRvb2xzLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgICAgICBLV1NZU19TWVNURU1UT09MU19TVVBQT1JUX1dJTkRPV1NfU0xBU0hFUwogICAgICAgICApCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgIyBEaXNhYmxlIGdldHB3bmFtIGZvciBzdGF0aWMgbGludXggYnVpbGRzIHNpbmNlIGl0IGRlcGVuZHMgb24gc2hhcmVkIGdsaWJjCi0gIEdFVF9QUk9QRVJUWShTSEFSRURfTElCU19TVVBQT1JURUQgR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUykKLSAgSUYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiIEFORCBOT1QgU0hBUkVEX0xJQlNfU1VQUE9SVEVEKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCisgIGdldF9wcm9wZXJ0eShTSEFSRURfTElCU19TVVBQT1JURUQgR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUykKKyAgaWYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiIEFORCBOT1QgU0hBUkVEX0xJQlNfU1VQUE9SVEVEKQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCiAgICAgICBIQVZFX0dFVFBXTkFNPTAKICAgICAgICkKLSAgRU5ESUYoKQotRU5ESUYoKQorICBlbmRpZigpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCitpZihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgIENPTVBJTEVfREVGSU5JVElPTlMgU0laRU9GX1ZPSURfUD0ke0NNQUtFX1NJWkVPRl9WT0lEX1B9KQotICBJRihOT1QgQ1lHV0lOKQotICAgIElOQ0xVREUoQ2hlY2tJbmNsdWRlRmlsZXMpCisgIGlmKE5PVCBDWUdXSU4pCisgICAgaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlcykKICAgICBDSEVDS19JTkNMVURFX0ZJTEVTKCJzeXMvdHlwZXMuaDtpZmFkZHJzLmgiIEtXU1lTX1NZU19IQVNfSUZBRERSU19IKQotICAgIElGKEtXU1lTX1NZU19IQVNfSUZBRERSU19IKQotICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgaWYoS1dTWVNfU1lTX0hBU19JRkFERFJTX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX0lGQUREUlNfSD0xKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihXSU4zMikKLSAgICBJTkNMVURFKENoZWNrU3ltYm9sRXhpc3RzKQotICAgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgUHNhcGkpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKFdJTjMyKQorICAgIGluY2x1ZGUoQ2hlY2tTeW1ib2xFeGlzdHMpCisgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBwc2FwaSkKICAgICBDSEVDS19TWU1CT0xfRVhJU1RTKEdldFByb2Nlc3NNZW1vcnlJbmZvICJ3aW5kb3dzLmg7cHNhcGkuaCIgS1dTWVNfU1lTX0hBU19QU0FQSSkKLSAgICBVTlNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCi0gICAgSUYoS1dTWVNfU1lTX0hBU19QU0FQSSkKLSAgICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICAgIHVuc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKKyAgICBpZihLV1NZU19TWVNfSEFTX1BTQVBJKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfU1lTX0hBU19QU0FQST0xKQotICAgICAgSUYoTVNWQzcwIE9SIE1TVkM3MSkKKyAgICAgIGlmKE1TVkM3MCBPUiBNU1ZDNzEpCiAgICAgICAgICMgU3VwcHJlc3MgTE5LNDA4OTogYWxsIHJlZmVyZW5jZXMgdG8gJ1BTQVBJLkRMTCcgZGlzY2FyZGVkIGJ5IC9PUFQ6UkVGCi0gICAgICAgIFNFVChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9JR05PUkU6NDA4OSIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCisgICAgICAgIHNldChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9JR05PUkU6NDA4OSIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCiAgICAgQ0hFQ0tfSU5DTFVERV9GSUxFUygic3lzL21wY3RsLmgiIEtXU1lTX1NZU19IQVNfTVBDVExfSCkKLSAgICBJRihLV1NZU19TWVNfSEFTX01QQ1RMX0gpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19TWVNfSEFTX01QQ1RMX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX01QQ1RMX0g9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLSAgSUYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkJTRCIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJCU0QiKQogICAgIENIRUNLX0lOQ0xVREVfRklMRVMoIm1hY2hpbmUvY3B1LmgiIEtXU1lTX1NZU19IQVNfTUFDSElORV9DUFVfSCkKLSAgICBJRihLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0gpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0g9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19STElNSVQ2NAogICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgcmxpbWl0NjQiIERJUkVDVCkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0RFRklORVMpCi0gIElGKEtXU1lTX0NYWF9IQVNfUkxJTUlUNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9ERUZJTkVTKQorICBpZihLV1NZU19DWFhfSEFTX1JMSU1JVDY0KQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX1JMSU1JVDY0PTEpCi0gIEVORElGKCkKLSAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19BVE9MCi0gICAgIkNoZWNraW5nIHdoZXRoZXIgQ1hYIGNvbXBpbGVyIGhhcyBhdG9sIiBESVJFQ1QpCi0gIElGKEtXU1lTX0NYWF9IQVNfQVRPTCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQ1hYX0hBU19BVE9MPTEpCi0gIEVORElGKCkKLSAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19BVE9MTAotICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgYXRvbGwiIERJUkVDVCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19BVE9MTCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQ1hYX0hBU19BVE9MTD0xKQotICBFTkRJRigpCi0gIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9IQVNfX0FUT0k2NAotICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgX2F0b2k2NCIgRElSRUNUKQotICBJRihLV1NZU19DWFhfSEFTX19BVE9JNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCi0gICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX0NYWF9IQVNfX0FUT0k2ND0xKQotICBFTkRJRigpCi0gIElGKFVOSVgpCi0gICAgSU5DTFVERShDaGVja0luY2x1ZGVGaWxlQ1hYKQorICBlbmRpZigpCisgIGlmKFVOSVgpCisgICAgaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlQ1hYKQogICAgICMgY2hlY2sgZm9yIHNpbXBsZSBzdGFjayB0cmFjZQogICAgICMgdXN1YWxseSBpdCdzIGluIGxpYmMgYnV0IG9uIEZyZWVCU0QKICAgICAjIGl0J3MgaW4gbGliZXhlY2luZm8KLSAgICBGSU5EX0xJQlJBUlkoRVhFQ0lORk9fTElCICJleGVjaW5mbyIpCi0gICAgTUFSS19BU19BRFZBTkNFRChFWEVDSU5GT19MSUIpCi0gICAgSUYgKE5PVCBFWEVDSU5GT19MSUIpCi0gICAgICBTRVQoRVhFQ0lORk9fTElCICIiKQotICAgIEVORElGKCkKKyAgICBmaW5kX2xpYnJhcnkoRVhFQ0lORk9fTElCICJleGVjaW5mbyIpCisgICAgbWFya19hc19hZHZhbmNlZChFWEVDSU5GT19MSUIpCisgICAgaWYgKE5PVCBFWEVDSU5GT19MSUIpCisgICAgICBzZXQoRVhFQ0lORk9fTElCICIiKQorICAgIGVuZGlmKCkKICAgICBDSEVDS19JTkNMVURFX0ZJTEVfQ1hYKCJleGVjaW5mby5oIiBLV1NZU19DWFhfSEFTX0VYRUNJTkZPSCkKLSAgICBJRiAoS1dTWVNfQ1hYX0hBU19FWEVDSU5GT0gpCisgICAgaWYgKEtXU1lTX0NYWF9IQVNfRVhFQ0lORk9IKQogICAgICAgIyB3ZSBoYXZlIHRoZSBiYWNrdHJhY2UgaGVhZGVyIGNoZWNrIGlmIGl0CiAgICAgICAjIGNhbiBiZSB1c2VkIHdpdGggdGhpcyBjb21waWxlcgotICAgICAgU0VUKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0xJTktfTElCUkFSSUVTICR7RVhFQ0lORk9fTElCfSkKKyAgICAgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUyAke0VYRUNJTkZPX0xJQn0pCiAgICAgICBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0JBQ0tUUkFDRQogICAgICAgICAgIkNoZWNraW5nIHdoZXRoZXIgYmFja3RyYWNlIHdvcmtzIHdpdGggdGhpcyBDKysgY29tcGlsZXIiIERJUkVDVCkKLSAgICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUykKLSAgICAgIElGIChLV1NZU19DWFhfSEFTX0JBQ0tUUkFDRSkKKyAgICAgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUykKKyAgICAgIGlmIChLV1NZU19DWFhfSEFTX0JBQ0tUUkFDRSkKICAgICAgICAgIyBiYWNrdHJhY2UgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgc3lzdGVtIGFuZCBjb21waWxlci4KICAgICAgICAgIyBub3cgY2hlY2sgZm9yIHRoZSBtb3JlIGFkdmFuY2VkIGNhcGFiaWxpdGllcy4KLSAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfU1lTVEVNSU5GT1JNQVRJT05fSEFTX0JBQ0tUUkFDRT0xKQogICAgICAgICAjIGNoZWNrIGZvciBzeW1ib2wgbG9va3VwIHVzaW5nIGRsYWRkcgogICAgICAgICBDSEVDS19JTkNMVURFX0ZJTEVfQ1hYKCJkbGZjbi5oIiBLV1NZU19DWFhfSEFTX0RMRkNOSCkKLSAgICAgICAgSUYgKEtXU1lTX0NYWF9IQVNfRExGQ05IKQorICAgICAgICBpZiAoS1dTWVNfQ1hYX0hBU19ETEZDTkgpCiAgICAgICAgICAgIyB3ZSBoYXZlIHN5bWJvbCBsb29rdXAgbGlicmFyaWVzIGFuZCBoZWFkZXJzCiAgICAgICAgICAgIyBjaGVjayBpZiB0aGV5IGNhbiBiZSB1c2VkIHdpdGggdGhpcyBjb21waWxlcgotICAgICAgICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUyAke0NNQUtFX0RMX0xJQlN9KQorICAgICAgICAgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUyAke0NNQUtFX0RMX0xJQlN9KQogICAgICAgICAgICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19ETEFERFIKICAgICAgICAgICAgICJDaGVja2luZyB3aGV0aGVyIGRsYWRkciB3b3JrcyB3aXRoIHRoaXMgQysrIGNvbXBpbGVyIiBESVJFQ1QpCi0gICAgICAgICAgU0VUKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0xJTktfTElCUkFSSUVTKQotICAgICAgICAgIElGIChLV1NZU19DWFhfSEFTX0RMQUREUikKKyAgICAgICAgICBzZXQoS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVMpCisgICAgICAgICAgaWYgKEtXU1lTX0NYWF9IQVNfRExBRERSKQogICAgICAgICAgICAgIyBzeW1ib2wgbG9va3VwIGlzIHN1cHBvcnRlZCBieSB0aGlzIHN5c3RlbQogICAgICAgICAgICAgIyBhbmQgY29tcGlsZXIuCi0gICAgICAgICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICAgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX1NZU1RFTUlORk9STUFUSU9OX0hBU19TWU1CT0xfTE9PS1VQPTEpCi0gICAgICAgICAgRU5ESUYoKQotICAgICAgICBFTkRJRigpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCiAgICAgICAgICMgYysrIGRlbWFuZ2xpbmcgc3VwcG9ydAogICAgICAgICAjIGNoZWNrIGZvciBjeHhhYmkgaGVhZGVycwogICAgICAgICBDSEVDS19JTkNMVURFX0ZJTEVfQ1hYKCJjeHhhYmkuaCIgS1dTWVNfQ1hYX0hBU19DWFhBQklIKQotICAgICAgICBJRiAoS1dTWVNfQ1hYX0hBU19DWFhBQklIKQorICAgICAgICBpZiAoS1dTWVNfQ1hYX0hBU19DWFhBQklIKQogICAgICAgICAgICMgY2hlY2sgaWYgY3h4YWJpIGNhbiBiZSB1c2VkIHdpdGggdGhpcwogICAgICAgICAgICMgc3lzdGVtIGFuZCBjb21waWxlci4KICAgICAgICAgICBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0NYWEFCSQogICAgICAgICAgICAgIkNoZWNraW5nIHdoZXRoZXIgY3h4YWJpIHdvcmtzIHdpdGggdGhpcyBDKysgY29tcGlsZXIiIERJUkVDVCkKLSAgICAgICAgICBJRiAoS1dTWVNfQ1hYX0hBU19DWFhBQkkpCisgICAgICAgICAgaWYgKEtXU1lTX0NYWF9IQVNfQ1hYQUJJKQogICAgICAgICAgICAgIyBjKysgZGVtYW5nbGUgdXNpbmcgY3h4YWJpIGlzIHN1cHBvcnRlZCB3aXRoCiAgICAgICAgICAgICAjIHRoaXMgc3lzdGVtIGFuZCBjb21waWxlcgotICAgICAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNURU1JTkZPUk1BVElPTl9IQVNfQ1BQX0RFTUFOR0xFPTEpCi0gICAgICAgICAgRU5ESUYoKQotICAgICAgICBFTkRJRigpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCiAgICAgICAgICMgYmFzaWMgYmFja3RyYWNlIHdvcmtzIGJldHRlciB3aXRoIHJlbGVhc2UgYnVpbGQKICAgICAgICAgIyBkb24ndCBib3RoZXIgd2l0aCBhZHZhbmNlZCBmZWF0dXJlcyBmb3IgcmVsZWFzZQotICAgICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OU19ERUJVRyBLV1NZU19TWVNURU1JTkZPUk1BVElPTl9IQVNfREVCVUdfQlVJTEQ9MSkKLSAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlNfUkVMV0lUSERFQklORk8gS1dTWVNfU1lTVEVNSU5GT1JNQVRJT05fSEFTX0RFQlVHX0JVSUxEPTEpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKEJPUkxBTkQpCi0gICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTQotICAgICAgIkNoZWNraW5nIHdoZXRoZXIgQm9ybGFuZCBDWFggY29tcGlsZXIgc3VwcG9ydHMgYXNzZW1ibGVyIGluc3RydWN0aW9ucyIgRElSRUNUKQotICAgIElGKEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU00pCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNPTEpCi0gICAgICBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNX0NQVUlECi0gICAgICAgICJDaGVja2luZyB3aGV0aGVyIEJvcmxhbmQgQ1hYIGNvbXBpbGVyIHN1cHBvcnRzIENQVUlEIGFzc2VtYmxlciBpbnN0cnVjdGlvbiIgRElSRUNUKQotICAgICAgSUYoS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTV9DUFVJRCkKLSAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCi0gICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNX0NQVUlEPTEpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKEtXU1lTX1VTRV9fX0lOVDY0KQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IHRlc3RTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCi0gICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX1VTRV9fX0lOVDY0PTEpCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfVVNFX0xPTkdfTE9ORykKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQotICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19VU0VfTE9OR19MT05HPTEpCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORykKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQotICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HPTEpCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQ9MSkKLSAgRU5ESUYoKQotICBJRihLV1NZU19CVUlMRF9TSEFSRUQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKEtXU1lTX0JVSUxEX1NIQVJFRCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQlVJTERfU0hBUkVEPTEpCi0gIEVORElGKCkKKyAgZW5kaWYoKQogCi0gIElGKFVOSVggQU5EIE5PVCBDWUdXSU4pCisgIGlmKFVOSVggQU5EIE5PVCBDWUdXSU4pCiAgICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19HRVRMT0FEQVZHCiAgICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgaGFzIGdldGxvYWRhdmciIERJUkVDVCkKLSAgICBJRihLV1NZU19DWFhfSEFTX0dFVExPQURBVkcpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19DWFhfSEFTX0dFVExPQURBVkcpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX0dFVExPQURBVkc9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0ZTdHJlYW0pCitpZihLV1NZU19VU0VfRlN0cmVhbSkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19FWFRfU1RESU9fRklMRUJVRl9ICiAgICAgIkNoZWNraW5nIHdoZXRoZXIgPGV4dC9zdGRpb19maWxlYnVmLmg+IGlzIGF2YWlsYWJsZSIgRElSRUNUKQotRU5ESUYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ2hvb3NlIGEgZGlyZWN0b3J5IGZvciB0aGUgZ2VuZXJhdGVkIGhlYWRlcnMuCi1JRihOT1QgS1dTWVNfSEVBREVSX1JPT1QpCi0gIFNFVChLV1NZU19IRUFERVJfUk9PVCAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IikKLUVORElGKCkKLVNFVChLV1NZU19IRUFERVJfRElSICIke0tXU1lTX0hFQURFUl9ST09UfS8ke0tXU1lTX05BTUVTUEFDRX0iKQotSU5DTFVERV9ESVJFQ1RPUklFUygke0tXU1lTX0hFQURFUl9ST09UfSkKK2lmKE5PVCBLV1NZU19IRUFERVJfUk9PVCkKKyAgc2V0KEtXU1lTX0hFQURFUl9ST09UICIke1BST0pFQ1RfQklOQVJZX0RJUn0iKQorZW5kaWYoKQorc2V0KEtXU1lTX0hFQURFUl9ESVIgIiR7S1dTWVNfSEVBREVSX1JPT1R9LyR7S1dTWVNfTkFNRVNQQUNFfSIpCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7S1dTWVNfSEVBREVSX1JPT1R9KQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlGKEtXU1lTX0lOU1RBTExfRE9DX0RJUikKK2lmKEtXU1lTX0lOU1RBTExfRE9DX0RJUikKICAgIyBBc3NpZ24gdGhlIGxpY2Vuc2UgdG8gdGhlIHJ1bnRpbWUgY29tcG9uZW50IHNpbmNlIGl0IG11c3QgYmUKICAgIyBkaXN0cmlidXRlZCB3aXRoIGJpbmFyeSBmb3JtcyBvZiB0aGlzIHNvZnR3YXJlLgotICBJRihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCi0gICAgU0VUKEtXU1lTX0lOU1RBTExfTElDRU5TRV9PUFRJT05TICR7S1dTWVNfSU5TVEFMTF9MSUNFTlNFX09QVElPTlN9CisgIGlmKEtXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfUlVOVElNRSkKKyAgICBzZXQoS1dTWVNfSU5TVEFMTF9MSUNFTlNFX09QVElPTlMgJHtLV1NZU19JTlNUQUxMX0xJQ0VOU0VfT1BUSU9OU30KICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfUlVOVElNRX0KICAgICAgICkKLSAgRU5ESUYoKQorICBlbmRpZigpCiAKICAgIyBJbnN0YWxsIHRoZSBsaWNlbnNlIHVuZGVyIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4KLSAgSU5TVEFMTChGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ29weXJpZ2h0LnR4dAorICBpbnN0YWxsKEZJTEVTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Db3B5cmlnaHQudHh0CiAgICAgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0RPQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfQogICAgICR7S1dTWVNfSU5TVEFMTF9MSUNFTlNFX09QVElPTlN9KQotRU5ESUYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQnVpbGQgYSBsaXN0IG9mIGNsYXNzZXMgYW5kIGhlYWRlcnMgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhlCiAjIHNlbGVjdGVkIGNvbXBvbmVudHMuICBJbml0aWFsaXplIHdpdGggcmVxdWlyZWQgY29tcG9uZW50cy4KLVNFVChLV1NZU19DTEFTU0VTKQotU0VUKEtXU1lTX0hfRklMRVMgQ29uZmlndXJlIFNoYXJlZEZvcndhcmQpCi1TRVQoS1dTWVNfSFhYX0ZJTEVTIENvbmZpZ3VyZSBTdHJpbmcpCi0KLUlGKE5PVCBDTWFrZV9TT1VSQ0VfRElSKQotICBTRVQoS1dTWVNfSFhYX0ZJTEVTICR7S1dTWVNfSFhYX0ZJTEVTfQotICAgIGhhc2h0YWJsZSBoYXNoX2Z1biBoYXNoX21hcCBoYXNoX3NldAotICAgICkKLUVORElGKCkKK3NldChLV1NZU19DTEFTU0VTKQorc2V0KEtXU1lTX0hfRklMRVMgQ29uZmlndXJlIFNoYXJlZEZvcndhcmQpCitzZXQoS1dTWVNfSFhYX0ZJTEVTIENvbmZpZ3VyZSBTdHJpbmcpCiAKICMgQWRkIHNlbGVjdGVkIEMrKyBjbGFzc2VzLgotU0VUKGNwcGNsYXNzZXMKK3NldChjcHBjbGFzc2VzCiAgIERpcmVjdG9yeSBEeW5hbWljTG9hZGVyIEVuY29kaW5nIEdsb2IgUmVndWxhckV4cHJlc3Npb24gU3lzdGVtVG9vbHMKLSAgQ29tbWFuZExpbmVBcmd1bWVudHMgSU9TdHJlYW0gRlN0cmVhbSBTeXN0ZW1JbmZvcm1hdGlvbiBDb25zb2xlQnVmCisgIENvbW1hbmRMaW5lQXJndW1lbnRzIEZTdHJlYW0gU3lzdGVtSW5mb3JtYXRpb24gQ29uc29sZUJ1ZgogICApCi1GT1JFQUNIKGNwcCAke2NwcGNsYXNzZXN9KQotICBJRihLV1NZU19VU0VfJHtjcHB9KQorZm9yZWFjaChjcHAgJHtjcHBjbGFzc2VzfSkKKyAgaWYoS1dTWVNfVVNFXyR7Y3BwfSkKICAgICAjIFVzZSB0aGUgY29ycmVzcG9uZGluZyBjbGFzcy4KLSAgICBTRVQoS1dTWVNfQ0xBU1NFUyAke0tXU1lTX0NMQVNTRVN9ICR7Y3BwfSkKKyAgICBzZXQoS1dTWVNfQ0xBU1NFUyAke0tXU1lTX0NMQVNTRVN9ICR7Y3BwfSkKIAogICAgICMgTG9hZCBjb21wb25lbnQtc3BlY2lmaWMgQ01ha2UgY29kZS4KLSAgICBJRihFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjcHB9LmNtYWtlKQotICAgICAgSU5DTFVERSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2NwcH0uY21ha2UpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgICBpZihFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjcHB9LmNtYWtlKQorICAgICAgaW5jbHVkZSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2NwcH0uY21ha2UpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIyBBZGQgc2VsZWN0ZWQgQyBjb21wb25lbnRzLgotRk9SRUFDSChjCitmb3JlYWNoKGMKICAgICBQcm9jZXNzIEJhc2U2NCBFbmNvZGluZyBNRDUgVGVybWluYWwgU3lzdGVtIFN0cmluZwogICAgICkKLSAgSUYoS1dTWVNfVVNFXyR7Y30pCisgIGlmKEtXU1lTX1VTRV8ke2N9KQogICAgICMgVXNlIHRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlLgotICAgIFNFVChLV1NZU19IX0ZJTEVTICR7S1dTWVNfSF9GSUxFU30gJHtjfSkKKyAgICBzZXQoS1dTWVNfSF9GSUxFUyAke0tXU1lTX0hfRklMRVN9ICR7Y30pCiAKICAgICAjIExvYWQgY29tcG9uZW50LXNwZWNpZmljIENNYWtlIGNvZGUuCi0gICAgSUYoRVhJU1RTICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5cyR7Y30uY21ha2UpCi0gICAgICBJTkNMVURFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5cyR7Y30uY21ha2UpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgICBpZihFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjfS5jbWFrZSkKKyAgICAgIGluY2x1ZGUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjfS5jbWFrZSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQnVpbGQgYSBsaXN0IG9mIHNvdXJjZXMgZm9yIHRoZSBsaWJyYXJ5IGJhc2VkIG9uIGNvbXBvbmVudHMgdGhhdCBhcmUKICMgaW5jbHVkZWQuCi1TRVQoS1dTWVNfQ19TUkNTKQotU0VUKEtXU1lTX0NYWF9TUkNTKQorc2V0KEtXU1lTX0NfU1JDUykKK3NldChLV1NZU19DWFhfU1JDUykKIAogIyBBZGQgdGhlIHByb3BlciBzb3VyY2VzIGZvciB0aGlzIHBsYXRmb3JtJ3MgUHJvY2VzcyBpbXBsZW1lbnRhdGlvbi4KLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQotICBJRihOT1QgVU5JWCkKK2lmKEtXU1lTX1VTRV9Qcm9jZXNzKQorICBpZihOT1QgVU5JWCkKICAgICAjIFVzZSB0aGUgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KLSAgICBTRVQoS1dTWVNfQ19TUkNTICR7S1dTWVNfQ19TUkNTfSBQcm9jZXNzV2luMzIuYykKLSAgRUxTRSgpCisgICAgc2V0KEtXU1lTX0NfU1JDUyAke0tXU1lTX0NfU1JDU30gUHJvY2Vzc1dpbjMyLmMpCisgIGVsc2UoKQogICAgICMgVXNlIHRoZSBVTklYIGltcGxlbWVudGF0aW9uLgotICAgIFNFVChLV1NZU19DX1NSQ1MgJHtLV1NZU19DX1NSQ1N9IFByb2Nlc3NVTklYLmMpCi0gIEVORElGKCkKLUVORElGKCkKKyAgICBzZXQoS1dTWVNfQ19TUkNTICR7S1dTWVNfQ19TUkNTfSBQcm9jZXNzVU5JWC5jKQorICBlbmRpZigpCitlbmRpZigpCiAKICMgQWRkIHNlbGVjdGVkIEMgc291cmNlcy4KLUZPUkVBQ0goYyBCYXNlNjQgRW5jb2RpbmcgTUQ1IFRlcm1pbmFsIFN5c3RlbSBTdHJpbmcpCi0gIElGKEtXU1lTX1VTRV8ke2N9KQotICAgIElGKEVYSVNUUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtjfUMuYykKLSAgICAgIExJU1QoQVBQRU5EIEtXU1lTX0NfU1JDUyAke2N9Qy5jKQotICAgIEVMU0UoKQotICAgICAgTElTVChBUFBFTkQgS1dTWVNfQ19TUkNTICR7Y30uYykKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorZm9yZWFjaChjIEJhc2U2NCBFbmNvZGluZyBNRDUgVGVybWluYWwgU3lzdGVtIFN0cmluZykKKyAgaWYoS1dTWVNfVVNFXyR7Y30pCisgICAgaWYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9Qy5jKQorICAgICAgbGlzdChBUFBFTkQgS1dTWVNfQ19TUkNTICR7Y31DLmMpCisgICAgZWxzZSgpCisgICAgICBsaXN0KEFQUEVORCBLV1NZU19DX1NSQ1MgJHtjfS5jKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCiAKICMgQ29uZmlndXJlIGhlYWRlcnMgb2YgQysrIGNsYXNzZXMgYW5kIGNvbnN0cnVjdCB0aGUgbGlzdCBvZiBzb3VyY2VzLgotRk9SRUFDSChjICR7S1dTWVNfQ0xBU1NFU30pCitmb3JlYWNoKGMgJHtLV1NZU19DTEFTU0VTfSkKICAgIyBBZGQgdGhpcyBzb3VyY2UgdG8gdGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIGZvciB0aGUgbGlicmFyeS4KLSAgSUYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9Q1hYLmN4eCkKLSAgICBMSVNUKEFQUEVORCBLV1NZU19DWFhfU1JDUyAke2N9Q1hYLmN4eCkKLSAgRUxTRUlGKEVYSVNUUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtjfS5jeHgpCi0gICAgTElTVChBUFBFTkQgS1dTWVNfQ1hYX1NSQ1MgJHtjfS5jeHgpCi0gIEVORElGKCkKKyAgaWYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9Q1hYLmN4eCkKKyAgICBsaXN0KEFQUEVORCBLV1NZU19DWFhfU1JDUyAke2N9Q1hYLmN4eCkKKyAgZWxzZWlmKEVYSVNUUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtjfS5jeHgpCisgICAgbGlzdChBUFBFTkQgS1dTWVNfQ1hYX1NSQ1MgJHtjfS5jeHgpCisgIGVuZGlmKCkKIAogICAjIENvbmZpZ3VyZSB0aGUgaGVhZGVyIGZvciB0aGlzIGNsYXNzLgotICBDT05GSUdVUkVfRklMRSgke1BST0pFQ1RfU09VUkNFX0RJUn0vJHtjfS5oeHguaW4gJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eAorICBjb25maWd1cmVfZmlsZSgke1BST0pFQ1RfU09VUkNFX0RJUn0vJHtjfS5oeHguaW4gJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eAogICAgICAgICAgICAgICAgICBAT05MWSBJTU1FRElBVEUpCi0gIFNFVChLV1NZU19DWFhfU1JDUyAke0tXU1lTX0NYWF9TUkNTfSAke0tXU1lTX0hFQURFUl9ESVJ9LyR7Y30uaHh4KQorICBzZXQoS1dTWVNfQ1hYX1NSQ1MgJHtLV1NZU19DWFhfU1JDU30gJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eCkKIAogICAjIENyZWF0ZSBhbiBpbnN0YWxsIHRhcmdldCBmb3IgdGhlIGhlYWRlci4KLSAgSUYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKLSAgICBJTlNUQUxMKEZJTEVTICR7S1dTWVNfSEVBREVSX0RJUn0vJHtjfS5oeHgKKyAgaWYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKKyAgICBpbnN0YWxsKEZJTEVTICR7S1dTWVNfSEVBREVSX0RJUn0vJHtjfS5oeHgKICAgICAgIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9CiAgICAgICAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TfSkKLSAgRU5ESUYoKQotRU5ERk9SRUFDSCgpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQogCiAjIENvbmZpZ3VyZSBDIGhlYWRlcnMuCi1GT1JFQUNIKGggJHtLV1NZU19IX0ZJTEVTfSkKK2ZvcmVhY2goaCAke0tXU1lTX0hfRklMRVN9KQogICAjIENvbmZpZ3VyZSB0aGUgaGVhZGVyIGludG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4KLSAgQ09ORklHVVJFX0ZJTEUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9LyR7aH0uaC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaAorICBjb25maWd1cmVfZmlsZSgke1BST0pFQ1RfU09VUkNFX0RJUn0vJHtofS5oLmluICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oCiAgICAgICAgICAgICAgICAgIEBPTkxZIElNTUVESUFURSkKLSAgU0VUKEtXU1lTX0NfU1JDUyAke0tXU1lTX0NfU1JDU30gJHtLV1NZU19IRUFERVJfRElSfS8ke2h9LmgpCisgIHNldChLV1NZU19DX1NSQ1MgJHtLV1NZU19DX1NSQ1N9ICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oKQogCiAgICMgQ3JlYXRlIGFuIGluc3RhbGwgdGFyZ2V0IGZvciB0aGUgaGVhZGVyLgotICBJRihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICAgIElOU1RBTEwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2h9LmgKKyAgaWYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKKyAgICBpbnN0YWxsKEZJTEVTICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oCiAgICAgICBERVNUSU5BVElPTiAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfQogICAgICAgJHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OU30pCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIyBDb25maWd1cmUgb3RoZXIgQysrIGhlYWRlcnMuCi1GT1JFQUNIKGggJHtLV1NZU19IWFhfRklMRVN9KQorZm9yZWFjaChoICR7S1dTWVNfSFhYX0ZJTEVTfSkKICAgIyBDb25maWd1cmUgdGhlIGhlYWRlciBpbnRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuCi0gIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS8ke2h9Lmh4eC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4CisgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS8ke2h9Lmh4eC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4CiAgICAgICAgICAgICAgICAgIEBPTkxZIElNTUVESUFURSkKLSAgU0VUKEtXU1lTX0NYWF9TUkNTICR7S1dTWVNfQ1hYX1NSQ1N9ICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oeHgpCisgIHNldChLV1NZU19DWFhfU1JDUyAke0tXU1lTX0NYWF9TUkNTfSAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4KQogCiAgICMgQ3JlYXRlIGFuIGluc3RhbGwgdGFyZ2V0IGZvciB0aGUgaGVhZGVyLgotICBJRihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICAgIElOU1RBTEwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2h9Lmh4eAorICBpZihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQorICAgIGluc3RhbGwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2h9Lmh4eAogICAgICAgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSfS8ke0tXU1lTX05BTUVTUEFDRX0KICAgICAgICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX09QVElPTlN9KQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBBZGQgdGhlIGxpYnJhcnkgd2l0aCB0aGUgY29uZmlndXJlZCBuYW1lIGFuZCBsaXN0IG9mIHNvdXJjZXMuCi1JRihLV1NZU19DX1NSQ1MgT1IgS1dTWVNfQ1hYX1NSQ1MpCi0gIElGKEtXU1lTX1NQTElUX09CSkVDVFNfRlJPTV9JTlRFUkZBQ0UpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9KQotICAgIFNFVChLV1NZU19UQVJHRVRfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9vYmplY3RzKQotICAgIFNFVChLV1NZU19UQVJHRVRfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fcHJpdmF0ZSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0lOU1RBTEwgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX1RBUkdFVF9MSU5LfSkKLSAgICBTRVQoS1dTWVNfTElOS19ERVBFTkRFTkNZIElOVEVSRkFDRSkKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IE9CSkVDVAoraWYoS1dTWVNfQ19TUkNTIE9SIEtXU1lTX0NYWF9TUkNTKQorICBpZihLV1NZU19TUExJVF9PQkpFQ1RTX0ZST01fSU5URVJGQUNFKQorICAgIHNldChLV1NZU19UQVJHRVRfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX09CSkVDVCAke0tXU1lTX05BTUVTUEFDRX1fb2JqZWN0cykKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9X3ByaXZhdGUpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9JTlNUQUxMICR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19UQVJHRVRfTElOS30pCisgICAgc2V0KEtXU1lTX0xJTktfREVQRU5ERU5DWSBJTlRFUkZBQ0UpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfT0JKRUNUfSBPQkpFQ1QKICAgICAgICR7S1dTWVNfQ19TUkNTfSAke0tXU1lTX0NYWF9TUkNTfSkKLSAgICBJRihLV1NZU19CVUlMRF9TSEFSRUQgT1IgS1dTWVNfQlVJTERfUElDKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCAke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBST1BFUlRZCisgICAgaWYoS1dTWVNfQlVJTERfU0hBUkVEIE9SIEtXU1lTX0JVSUxEX1BJQykKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19UQVJHRVRfT0JKRUNUfSBQUk9QRVJUWQogICAgICAgICBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIFRSVUUpCi0gICAgRU5ESUYoKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gSU5URVJGQUNFKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRSkKLSAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFCisgICAgZW5kaWYoKQorICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gSU5URVJGQUNFKQorICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFCiAgICAgICAke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9KQotICAgIFRBUkdFVF9TT1VSQ0VTKCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRQorICAgIHRhcmdldF9zb3VyY2VzKCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRQogICAgICAgJDxUQVJHRVRfT0JKRUNUUzoke0tXU1lTX1RBUkdFVF9PQkpFQ1R9PikKICAgICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcygke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBSSVZBVEUgJHtLV1NZU19DWFhfQ09NUElMRV9GRUFUVVJFU30pCiAgICAgdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBJTlRFUkZBQ0UgJHtLV1NZU19DWFhfQ09NUElMRV9GRUFUVVJFU30pCi0gIEVMU0UoKQotICAgIFNFVChLV1NZU19UQVJHRVRfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX09CSkVDVCAke0tXU1lTX05BTUVTUEFDRX0pCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9MSU5LICR7S1dTWVNfTkFNRVNQQUNFfSkKKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9KQorICAgIHNldChLV1NZU19UQVJHRVRfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9KQogICAgIHNldChLV1NZU19UQVJHRVRfSU5TVEFMTCAke0tXU1lTX1RBUkdFVF9MSU5LfSkKLSAgICBTRVQoS1dTWVNfTElOS19ERVBFTkRFTkNZIFBVQkxJQykKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElCUkFSWV9UWVBFfQorICAgIHNldChLV1NZU19MSU5LX0RFUEVOREVOQ1kgUFVCTElDKQorICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSUJSQVJZX1RZUEV9CiAgICAgICAke0tXU1lTX0NfU1JDU30gJHtLV1NZU19DWFhfU1JDU30pCiAgICAgdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBQVUJMSUMgJHtLV1NZU19DWFhfQ09NUElMRV9GRUFUVVJFU30pCi0gIEVORElGKCkKKyAgZW5kaWYoKQogICBpZiAoS1dTWVNfQUxJQVNfVEFSR0VUKQogICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfQUxJQVNfVEFSR0VUfSBBTElBUyAke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9KQogICBlbmRpZiAoKQotICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoJHtLV1NZU19UQVJHRVRfT0JKRUNUfSBQUk9QRVJUSUVTCisgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBST1BFUlRJRVMKICAgICBDX0NMQU5HX1RJRFkgIiIKICAgICBDWFhfQ0xBTkdfVElEWSAiIgogICAgIENfSU5DTFVERV9XSEFUX1lPVV9VU0UgIiIKICAgICBDWFhfSU5DTFVERV9XSEFUX1lPVV9VU0UgIiIKICAgICBMQUJFTFMgIiR7S1dTWVNfTEFCRUxTX0xJQn0iKQotICBJRihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKLSAgICBJRihVTklYKQotICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgIGlmKEtXU1lTX1VTRV9EeW5hbWljTG9hZGVyKQorICAgIGlmKFVOSVgpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KICAgICAgICAgJHtDTUFLRV9ETF9MSUJTfSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIAotICBJRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gICAgSUYoV0lOMzIpCi0gICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0gd3MyXzMyKQorICBpZihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCisgICAgaWYoV0lOMzIpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0gd3MyXzMyKQogICAgICAgIyBsaW5rIGluIGRiZ2hlbHAuZGxsIGZvciBzeW1ib2wgbG9va3VwIGlmIE1TVkMgMTgwMCBvciBsYXRlcgogICAgICAgIyBOb3RlIHRoYXQgdGhlIGRiZ2hlbHAgcnVudGltZSBpcyBwYXJ0IG9mIE1TIFdpbmRvd3MgT1MKLSAgICAgIElGKE1TVkNfVkVSU0lPTiBBTkQgTk9UIE1TVkNfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTgwMCkKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9IGRiZ2hlbHApCi0gICAgICBFTkRJRigpCi0gICAgICBJRihLV1NZU19TWVNfSEFTX1BTQVBJKQotICAgICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KLSAgICAgICAgICBQc2FwaSkKLSAgICAgIEVORElGKCkKLSAgICBFTFNFSUYoVU5JWCkKLSAgICAgIElGIChFWEVDSU5GT19MSUIgQU5EIEtXU1lTX0NYWF9IQVNfQkFDS1RSQUNFKQorICAgICAgaWYoTVNWQ19WRVJTSU9OIEFORCBOT1QgTVNWQ19WRVJTSU9OIFZFUlNJT05fTEVTUyAxODAwKQorICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0gZGJnaGVscCkKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKEtXU1lTX1NZU19IQVNfUFNBUEkpCisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQorICAgICAgICAgIHBzYXBpKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihVTklYKQorICAgICAgaWYgKEVYRUNJTkZPX0xJQiBBTkQgS1dTWVNfQ1hYX0hBU19CQUNLVFJBQ0UpCiAgICAgICAgICMgYmFja3RyYWNlIG9uIEZyZWVCU0QgaXMgbm90IGluIGxpYmMKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQogICAgICAgICAgICR7RVhFQ0lORk9fTElCfSkKLSAgICAgIEVORElGKCkKLSAgICAgIElGIChLV1NZU19DWFhfSEFTX0RMQUREUikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmIChLV1NZU19DWFhfSEFTX0RMQUREUikKICAgICAgICAgIyBmb3Igc3ltYm9sIGxvb2t1cCB1c2luZyBkbGFkZHIKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQogICAgICAgICAgICR7Q01BS0VfRExfTElCU30pCi0gICAgICBFTkRJRigpCi0gICAgICBJRiAoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIlN1bk9TIikKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgICAgICBlbmRpZigpCisgICAgICBpZiAoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIlN1bk9TIikKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CiAgICAgICAgICAgc29ja2V0KQotICAgICAgRU5ESUYoKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogCiAgICMgQXBwbHkgdXNlci1kZWZpbmVkIHRhcmdldCBwcm9wZXJ0aWVzIHRvIHRoZSBsaWJyYXJ5LgotICBJRihLV1NZU19QUk9QRVJUSUVTX0NYWCkKLSAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBQUk9QRVJUSUVTCisgIGlmKEtXU1lTX1BST1BFUlRJRVNfQ1hYKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IFBST1BFUlRJRVMKICAgICAgICR7S1dTWVNfUFJPUEVSVElFU19DWFh9KQotICBFTkRJRigpCisgIGVuZGlmKCkKIAogICAjIFNldCB1cCBpbmNsdWRlIHVzYWdlIHJlcXVpcmVtZW50Ci0gIElGKENPTU1BTkQgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMpCi0gICAgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBJTlRFUkZBQ0UKKyAgaWYoQ09NTUFORCBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRQogICAgICAgJDxCVUlMRF9JTlRFUkZBQ0U6JHtLV1NZU19IRUFERVJfUk9PVH0+KQotICAgIElGKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCi0gICAgICBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRQorICAgIGlmKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCisgICAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRQogICAgICAgICAkPElOU1RBTExfSU5URVJGQUNFOiR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUn0+KQotICAgIEVORElGKCkKLSAgRU5ESUYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogCiAgICMgQ3JlYXRlIGFuIGluc3RhbGwgdGFyZ2V0IGZvciB0aGUgbGlicmFyeS4KLSAgSUYoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUpCi0gICAgSU5TVEFMTChUQVJHRVRTICR7S1dTWVNfVEFSR0VUX0lOU1RBTEx9ICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9KQotICBFTkRJRigpCi0gIElGKEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKLSAgICBJTlNUQUxMKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfSU5TVEFMTH0gJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9KQotICBFTkRJRigpCi1FTkRJRigpCisgIGlmKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQorICAgIGluc3RhbGwoVEFSR0VUUyAke0tXU1lTX1RBUkdFVF9JTlNUQUxMfSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfSkKKyAgZW5kaWYoKQorICBpZihLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUpCisgICAgaW5zdGFsbChUQVJHRVRTICR7S1dTWVNfVEFSR0VUX0lOU1RBTEx9ICR7S1dTWVNfSU5TVEFMTF9OQU1FTElOS19SVUxFfSkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIEFkZCBhIEMtb25seSBsaWJyYXJ5IGlmIHJlcXVlc3RlZC4KLUlGKEtXU1lTX0VOQUJMRV9DIEFORCBLV1NZU19DX1NSQ1MpCi0gSUYoS1dTWVNfU1BMSVRfT0JKRUNUU19GUk9NX0lOVEVSRkFDRSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfV9jKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19PQkpFQ1QgJHtLV1NZU19OQU1FU1BBQ0V9X2Nfb2JqZWN0cykKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fY19wcml2YXRlKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19JTlNUQUxMCitpZihLV1NZU19FTkFCTEVfQyBBTkQgS1dTWVNfQ19TUkNTKQorIGlmKEtXU1lTX1NQTElUX09CSkVDVFNfRlJPTV9JTlRFUkZBQ0UpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRSAke0tXU1lTX05BTUVTUEFDRX1fYykKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9jX29iamVjdHMpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9X2NfcHJpdmF0ZSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfSU5TVEFMTAogICAgICAgJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9ICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCi0gICAgU0VUKEtXU1lTX0xJTktfREVQRU5ERU5DWSBJTlRFUkZBQ0UpCi0gICAgQUREX0xJQlJBUlkoJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IE9CSkVDVCAke0tXU1lTX0NfU1JDU30pCi0gICAgSUYoS1dTWVNfQlVJTERfU0hBUkVEIE9SIEtXU1lTX0JVSUxEX1BJQykKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IFBST1BFUlRZCisgICAgc2V0KEtXU1lTX0xJTktfREVQRU5ERU5DWSBJTlRFUkZBQ0UpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IE9CSkVDVCAke0tXU1lTX0NfU1JDU30pCisgICAgaWYoS1dTWVNfQlVJTERfU0hBUkVEIE9SIEtXU1lTX0JVSUxEX1BJQykKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IFBST1BFUlRZCiAgICAgICAgIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgVFJVRSkKLSAgICBFTkRJRigpCi0gICAgQUREX0xJQlJBUlkoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRSkKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRSkKLSAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfQ19MSU5LfSBJTlRFUkZBQ0UKKyAgICBlbmRpZigpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRSkKKyAgICBhZGRfbGlicmFyeSgke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfQ19MSU5LfSBJTlRFUkZBQ0UKICAgICAgICR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSkKLSAgICBUQVJHRVRfU09VUkNFUygke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRQorICAgIHRhcmdldF9zb3VyY2VzKCR7S1dTWVNfVEFSR0VUX0NfTElOS30gSU5URVJGQUNFCiAgICAgICAkPFRBUkdFVF9PQkpFQ1RTOiR7S1dTWVNfVEFSR0VUX0NfT0JKRUNUfT4pCi0gIEVMU0UoKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9X2MpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9DX09CSkVDVCAke0tXU1lTX05BTUVTUEFDRX1fYykKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fYykKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfSU5TVEFMTCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIFNFVChLV1NZU19MSU5LX0RFUEVOREVOQ1kgUFVCTElDKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSAke0tXU1lTX0xJQlJBUllfVFlQRX0KKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRSAke0tXU1lTX05BTUVTUEFDRX1fYykKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9jKQorICAgIHNldChLV1NZU19UQVJHRVRfQ19MSU5LICR7S1dTWVNfTkFNRVNQQUNFfV9jKQorICAgIHNldChLV1NZU19UQVJHRVRfQ19JTlNUQUxMICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCisgICAgc2V0KEtXU1lTX0xJTktfREVQRU5ERU5DWSBQVUJMSUMpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9ICR7S1dTWVNfTElCUkFSWV9UWVBFfQogICAgICAgJHtLV1NZU19DX1NSQ1N9KQotICBFTkRJRigpCi0gIFNFVF9UQVJHRVRfUFJPUEVSVElFUygke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gUFJPUEVSVElFUworICBlbmRpZigpCisgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gUFJPUEVSVElFUwogICAgIExBQkVMUyAiJHtLV1NZU19MQUJFTFNfTElCfSIpCiAKICAgIyBBcHBseSB1c2VyLWRlZmluZWQgdGFyZ2V0IHByb3BlcnRpZXMgdG8gdGhlIGxpYnJhcnkuCi0gIElGKEtXU1lTX1BST1BFUlRJRVNfQykKLSAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IFBST1BFUlRJRVMKKyAgaWYoS1dTWVNfUFJPUEVSVElFU19DKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gUFJPUEVSVElFUwogICAgICAgJHtLV1NZU19QUk9QRVJUSUVTX0N9KQotICBFTkRJRigpCisgIGVuZGlmKCkKIAogICAjIFNldCB1cCBpbmNsdWRlIHVzYWdlIHJlcXVpcmVtZW50Ci0gIElGKENPTU1BTkQgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMpCi0gICAgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRQorICBpZihDT01NQU5EIFRBUkdFVF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKCR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSBJTlRFUkZBQ0UKICAgICAgICQ8QlVJTERfSU5URVJGQUNFOiR7S1dTWVNfSEVBREVSX1JPT1R9PikKLSAgICBJRihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICAgICAgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRQorICAgIGlmKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCisgICAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gSU5URVJGQUNFCiAgICAgICAgICQ8SU5TVEFMTF9JTlRFUkZBQ0U6JHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSfT4pCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgIyBDcmVhdGUgYW4gaW5zdGFsbCB0YXJnZXQgZm9yIHRoZSBsaWJyYXJ5LgotICBJRihLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSkKLSAgICBJTlNUQUxMKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfQ19JTlNUQUxMfSkKLSAgRU5ESUYoKQotRU5ESUYoKQorICBpZihLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSkKKyAgICBpbnN0YWxsKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfQ19JTlNUQUxMfSkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIEZvciBidWlsZGluZyBrd3N5cyBpdHNlbGYsIHdlIHVzZSBhIG1hY3JvIGRlZmluZWQgb24gdGhlIGNvbW1hbmQKICMgbGluZSB0byBjb25maWd1cmUgdGhlIG5hbWVzcGFjZSBpbiB0aGUgQyBhbmQgQysrIHNvdXJjZSBmaWxlcy4KLUFERF9ERUZJTklUSU9OUygiLURLV1NZU19OQU1FU1BBQ0U9JHtLV1NZU19OQU1FU1BBQ0V9IikKK2FkZF9kZWZpbml0aW9ucygiLURLV1NZU19OQU1FU1BBQ0U9JHtLV1NZU19OQU1FU1BBQ0V9IikKIAogIyBEaXNhYmxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciBzdGFuZGFyZCBDIGZ1bmN0aW9ucy4KLUlGKE1TVkMgT1IgKFdJTjMyIEFORCAoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiSW50ZWwiIE9SCitpZihNU1ZDIE9SIChXSU4zMiBBTkQgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkludGVsIiBPUgogICAgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIiBBTkQgQ01BS0VfQ1hYX1NJTVVMQVRFX0lEIFNUUkVRVUFMICJNU1ZDIikpKSkKLSAgQUREX0RFRklOSVRJT05TKAorICBhZGRfZGVmaW5pdGlvbnMoCiAgICAgLURfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFCiAgICAgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKICAgICAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCiAgICAgLURfU0NMX1NFQ1VSRV9OT19ERVBSRUNBVEUKICAgICApCi1FTkRJRigpCitlbmRpZigpCiAKLUlGKFdJTjMyKQoraWYoV0lOMzIpCiAgICMgSGVscCBlbmZvcmNlIHRoZSB1c2Ugb2Ygd2lkZSBXaW5kb3dzIGFwaXMuCi0gIEFERF9ERUZJTklUSU9OUygtRFVOSUNPREUgLURfVU5JQ09ERSkKLUVORElGKCkKKyAgYWRkX2RlZmluaXRpb25zKC1EVU5JQ09ERSAtRF9VTklDT0RFKQorZW5kaWYoKQogCi1JRihLV1NZU19VU0VfU3RyaW5nKQoraWYoS1dTWVNfVVNFX1N0cmluZykKICAgIyBBY3RpdmF0ZSBjb2RlIGluICJTdHJpbmcuYyIuICBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlIHNvdXJjZS4KLSAgU0VUX1NPVVJDRV9GSUxFU19QUk9QRVJUSUVTKFN0cmluZy5jIFBST1BFUlRJRVMKKyAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKFN0cmluZy5jIFBST1BFUlRJRVMKICAgICBDT01QSUxFX0ZMQUdTICItREtXU1lTX1NUUklOR19DIikKLUVORElGKCkKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0VuY29kaW5nKQoraWYoS1dTWVNfVVNFX0VuY29kaW5nKQogICAjIFNldCBkZWZhdWx0IDggYml0IGVuY29kaW5nIGluICJFbmRjb2RpbmdDLmMiLgotICBTRVRfUFJPUEVSVFkoU09VUkNFIEVuY29kaW5nQy5jIEVuY29kaW5nQ1hYLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworICBzZXRfcHJvcGVydHkoU09VUkNFIEVuY29kaW5nQy5jIEVuY29kaW5nQ1hYLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgIEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0U9JHtLV1NZU19FTkNPRElOR19ERUZBVUxUX0NPREVQQUdFfSkKLUVORElGKCkKK2VuZGlmKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFNldHVwIHRlc3RpbmcgaWYgbm90IGJlaW5nIGJ1aWx0IGFzIHBhcnQgb2YgYW5vdGhlciBwcm9qZWN0LgotSUYoS1dTWVNfU1RBTkRBTE9ORSBPUiBDTWFrZV9TT1VSQ0VfRElSKQotICBJRihCVUlMRF9URVNUSU5HKQoraWYoS1dTWVNfU1RBTkRBTE9ORSBPUiBDTWFrZV9TT1VSQ0VfRElSKQorICBpZihCVUlMRF9URVNUSU5HKQogICAgICMgQ29tcHV0ZSB0aGUgbG9jYXRpb24gb2YgZXhlY3V0YWJsZXMuCi0gICAgU0VUKEVYRUNfRElSICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iKQotICAgIElGKEVYRUNVVEFCTEVfT1VUUFVUX1BBVEgpCi0gICAgICBTRVQoRVhFQ19ESVIgIiR7RVhFQ1VUQUJMRV9PVVRQVVRfUEFUSH0iKQotICAgIEVORElGKCkKKyAgICBzZXQoRVhFQ19ESVIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIpCisgICAgaWYoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZKQorICAgICAgc2V0KEVYRUNfRElSICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0iKQorICAgIGVuZGlmKCkKIAogICAgICMgQyB0ZXN0cwotICAgIFNFVChLV1NZU19DX1RFU1RTCisgICAgc2V0KEtXU1lTX0NfVEVTVFMKICAgICAgIHRlc3RFbmNvZGUuYwogICAgICAgdGVzdFRlcm1pbmFsLmMKICAgICAgICkKLSAgICBJRihLV1NZU19TVEFOREFMT05FKQotICAgICAgU0VUKEtXU1lTX0NfVEVTVFMgJHtLV1NZU19DX1RFU1RTfSB0ZXN0RmFpbC5jKQotICAgIEVORElGKCkKLSAgICBDUkVBVEVfVEVTVF9TT1VSQ0VMSVNUKAorICAgIGlmKEtXU1lTX1NUQU5EQUxPTkUpCisgICAgICBzZXQoS1dTWVNfQ19URVNUUyAke0tXU1lTX0NfVEVTVFN9IHRlc3RGYWlsLmMpCisgICAgZW5kaWYoKQorICAgIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QoCiAgICAgICBLV1NZU19DX1RFU1RfU1JDUyAke0tXU1lTX05BTUVTUEFDRX1UZXN0c0MuYwogICAgICAgJHtLV1NZU19DX1RFU1RTfQogICAgICAgKQotICAgIEFERF9FWEVDVVRBQkxFKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyAke0tXU1lTX0NfVEVTVF9TUkNTfSkKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKLSAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCi0gICAgRk9SRUFDSCh0ZXN0ZmlsZSAke0tXU1lTX0NfVEVTVFN9KQorICAgIGFkZF9leGVjdXRhYmxlKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyAke0tXU1lTX0NfVEVTVF9TUkNTfSkKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCisgICAgZm9yZWFjaCh0ZXN0ZmlsZSAke0tXU1lTX0NfVEVTVFN9KQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0ICIke3Rlc3RmaWxlfSIgTkFNRV9XRSkKLSAgICAgIEFERF9URVNUKGt3c3lzLiR7dGVzdH0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7dGVzdH0gJHtLV1NZU19URVNUX0FSR1NfJHt0ZXN0fX0pCi0gICAgICBTRVRfUFJPUEVSVFkoVEVTVCBrd3N5cy4ke3Rlc3R9IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19URVNUfSkKLSAgICBFTkRGT1JFQUNIKCkKKyAgICAgIGFkZF90ZXN0KGt3c3lzLiR7dGVzdH0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7dGVzdH0gJHtLV1NZU19URVNUX0FSR1NfJHt0ZXN0fX0pCisgICAgICBzZXRfcHJvcGVydHkoVEVTVCBrd3N5cy4ke3Rlc3R9IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19URVNUfSkKKyAgICBlbmRmb3JlYWNoKCkKIAogICAgICMgQysrIHRlc3RzCi0gICAgSUYoTk9UIFdBVENPTSBBTkQgTk9UIENNYWtlX1NPVVJDRV9ESVIpCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTCi0gICAgICAgIHRlc3RIYXNoU1RMLmN4eAotICAgICAgICApCi0gICAgRU5ESUYoKQotICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CisgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgIHRlc3RDb25maWd1cmUuY3h4CiAgICAgICB0ZXN0U3lzdGVtVG9vbHMuY3h4CiAgICAgICB0ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMuY3h4CiAgICAgICB0ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eAogICAgICAgdGVzdERpcmVjdG9yeS5jeHgKICAgICAgICkKLSAgICBJRihLV1NZU19TVExfSEFTX1dTVFJJTkcpCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfQorICAgIGlmKEtXU1lTX1NUTF9IQVNfV1NUUklORykKKyAgICAgIHNldChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CiAgICAgICAgIHRlc3RFbmNvZGluZy5jeHgKICAgICAgICAgKQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfRlN0cmVhbSkKLSAgICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CisgICAgZW5kaWYoKQorICAgIGlmKEtXU1lTX1VTRV9GU3RyZWFtKQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgICAgdGVzdEZTdHJlYW0uY3h4CiAgICAgICAgICkKLSAgICBFTkRJRigpCi0gICAgSUYoS1dTWVNfVVNFX0NvbnNvbGVCdWYpCi0gICAgICBBRERfRVhFQ1VUQUJMRSh0ZXN0Q29uc29sZUJ1ZkNoaWxkIHRlc3RDb25zb2xlQnVmQ2hpbGQuY3h4KQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDWFhfQ0xBTkdfVElEWSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKLSAgICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUyh0ZXN0Q29uc29sZUJ1ZkNoaWxkICR7S1dTWVNfVEFSR0VUX0xJTkt9KQotICAgICAgU0VUKEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX0NvbnNvbGVCdWYpCisgICAgICBhZGRfZXhlY3V0YWJsZSh0ZXN0Q29uc29sZUJ1ZkNoaWxkIHRlc3RDb25zb2xlQnVmQ2hpbGQuY3h4KQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDWFhfQ0xBTkdfVElEWSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0Q29uc29sZUJ1ZkNoaWxkICR7S1dTWVNfVEFSR0VUX0xJTkt9KQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgICAgdGVzdENvbnNvbGVCdWYuY3h4CiAgICAgICAgICkKLSAgICAgIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTVNWQyIgQU5ECisgICAgICBpZihDTUFLRV9DWFhfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk1TVkMiIEFORAogICAgICAgICAgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSICIxOS4wLjIzNTA2IikKICAgICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSB0ZXN0Q29uc29sZUJ1Zi5jeHggdGVzdENvbnNvbGVCdWZDaGlsZC5jeHggUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAvdXRmLTgpCi0gICAgICBFTkRJRigpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIHRlc3RDb25zb2xlQnVmLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworICAgICAgZW5kaWYoKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSB0ZXN0Q29uc29sZUJ1Zi5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKICAgICAgICAgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRT0ke0tXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0V9KQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfSB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4KQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKLSAgICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9IHRlc3REeW5hbWljTG9hZGVyLmN4eCkKKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX1N5c3RlbUluZm9ybWF0aW9uKQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30gdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCkKKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCisgICAgICBzZXQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfSB0ZXN0RHluYW1pY0xvYWRlci5jeHgpCiAgICAgICAjIElmIGt3c3lzIGNvbnRhaW5zIHRoZSBEeW5hbWljTG9hZGVyLCBuZWVkIGV4dHJhIGxpYnJhcnkKLSAgICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkIE1PRFVMRSB0ZXN0RHlubG9hZC5jKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfTElCfSkKLSAgICAgIEFERF9ERVBFTkRFTkNJRVMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdER5bmxvYWQgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSkKKyAgICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkIE1PRFVMRSB0ZXN0RHlubG9hZC5jKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfTElCfSkKKyAgICAgIGFkZF9kZXBlbmRlbmNpZXMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdER5bmxvYWQgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSkKIAogICAgICAgaWYgKFdJTjMyKQogICAgICAgICAjIFdpbmRvd3MgdGVzdHMgc3VwcG9ydGVkIGZsYWdzLgpAQCAtMTEzNCwzMyArMTAxOSwzMyBAQAogICAgICAgICBhZGRfZGVwZW5kZW5jaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkVXNlICR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0pCiAgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZFVzZSBQUklWQVRFICR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkSW1wbCkKICAgICAgIGVuZGlmICgpCi0gICAgRU5ESUYoKQotICAgIENSRUFURV9URVNUX1NPVVJDRUxJU1QoCisgICAgZW5kaWYoKQorICAgIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QoCiAgICAgICBLV1NZU19DWFhfVEVTVF9TUkNTICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4LmN4eAogICAgICAgJHtLV1NZU19DWFhfVEVTVFN9CiAgICAgICApCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggJHtLV1NZU19DWFhfVEVTVF9TUkNTfSkKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENYWF9DTEFOR19USURZICIiKQotICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ19JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke0tXU1lTX1RBUkdFVF9MSU5LfSkKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke0tXU1lTX0NYWF9URVNUX1NSQ1N9KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ19DTEFOR19USURZICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ1hYX0NMQU5HX1RJRFkgIiIpCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ1hYX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4ICR7S1dTWVNfVEFSR0VUX0xJTkt9KQogCi0gICAgU0VUKFRFU1RfU1lTVEVNVE9PTFNfU09VUkNFX0RJUiAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IikKLSAgICBTRVQoVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iKQotICAgIENPTkZJR1VSRV9GSUxFKAorICAgIHNldChURVNUX1NZU1RFTVRPT0xTX1NPVVJDRV9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSIpCisgICAgc2V0KFRFU1RfU1lTVEVNVE9PTFNfQklOQVJZX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKKyAgICBjb25maWd1cmVfZmlsZSgKICAgICAgICR7UFJPSkVDVF9TT1VSQ0VfRElSfS90ZXN0U3lzdGVtVG9vbHMuaC5pbgogICAgICAgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3Rlc3RTeXN0ZW1Ub29scy5oKQotICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQogCi0gICAgSUYoQ1RFU1RfVEVTVF9LV1NZUykKLSAgICAgIENPTkZJR1VSRV9GSUxFKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vRXh0cmFUZXN0LmNtYWtlLmluIgorICAgIGlmKENURVNUX1RFU1RfS1dTWVMpCisgICAgICBjb25maWd1cmVfZmlsZSgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0V4dHJhVGVzdC5jbWFrZS5pbiIKICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9FeHRyYVRlc3QuY21ha2UiKQotICAgICAgU0VUX0RJUkVDVE9SWV9QUk9QRVJUSUVTKFBST1BFUlRJRVMgVEVTVF9JTkNMVURFX0ZJTEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9FeHRyYVRlc3QuY21ha2UiKQotICAgIEVORElGKCkKKyAgICAgIHNldF9kaXJlY3RvcnlfcHJvcGVydGllcyhQUk9QRVJUSUVTIFRFU1RfSU5DTFVERV9GSUxFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRXh0cmFUZXN0LmNtYWtlIikKKyAgICBlbmRpZigpCiAKLSAgICBTRVQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50cworICAgIHNldChLV1NZU19URVNUX0FSR1NfdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzCiAgICAgICAtLWFub3RoZXItYm9vbC12YXJpYWJsZQogICAgICAgLS1sb25nMz1vcHQKICAgICAgIC0tc2V0LWJvb2wtYXJnMQpAQCAtMTE3OSw3ICsxMDY0LDcgQEAKICAgICAgIC1DPXRlc3QKICAgICAgIC0tbG9uZzIgaGVsbG8KICAgICAgICkKLSAgICBTRVQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEKKyAgICBzZXQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEKICAgICAgIC0taWdub3JlZAogICAgICAgLW4gMjQKICAgICAgIC0tc2Vjb25kLWlnbm9yZWQKQEAgLTExODgsNzMgKzEwNzMsNzEgQEAKICAgICAgIC1wCiAgICAgICBzb21lIGp1bmsgYXQgdGhlIGVuZAogICAgICAgKQotICAgIEZPUkVBQ0godGVzdGZpbGUgJHtLV1NZU19DWFhfVEVTVFN9KQorICAgIGZvcmVhY2godGVzdGZpbGUgJHtLV1NZU19DWFhfVEVTVFN9KQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0ICIke3Rlc3RmaWxlfSIgTkFNRV9XRSkKLSAgICAgIEFERF9URVNUKGt3c3lzLiR7dGVzdH0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggJHt0ZXN0fSAke0tXU1lTX1RFU1RfQVJHU18ke3Rlc3R9fSkKLSAgICAgIFNFVF9QUk9QRVJUWShURVNUIGt3c3lzLiR7dGVzdH0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQotICAgIEVOREZPUkVBQ0goKQorICAgICAgYWRkX3Rlc3Qoa3dzeXMuJHt0ZXN0fSAke0VYRUNfRElSfS8ke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke3Rlc3R9ICR7S1dTWVNfVEVTVF9BUkdTXyR7dGVzdH19KQorICAgICAgc2V0X3Byb3BlcnR5KFRFU1Qga3dzeXMuJHt0ZXN0fSBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfVEVTVH0pCisgICAgZW5kZm9yZWFjaCgpCiAKICAgICAjIFByb2Nlc3MgdGVzdHMuCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgdGVzdFByb2Nlc3MuYykKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzIFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0UHJvY2VzcyAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIElGKE5PVCBDWUdXSU4pCi0gICAgICBTRVQoS1dTWVNfVEVTVF9QUk9DRVNTXzcgNykKLSAgICBFTkRJRigpCi0gICAgRk9SRUFDSChuIDEgMiAzIDQgNSA2ICR7S1dTWVNfVEVTVF9QUk9DRVNTXzd9IDkgMTApCi0gICAgICBBRERfVEVTVChrd3N5cy50ZXN0UHJvY2Vzcy0ke259ICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzICR7bn0pCi0gICAgICBTRVRfUFJPUEVSVFkoVEVTVCBrd3N5cy50ZXN0UHJvY2Vzcy0ke259IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19URVNUfSkKLSAgICAgIFNFVF9URVNUU19QUk9QRVJUSUVTKGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gUFJPUEVSVElFUyBUSU1FT1VUIDEyMCkKLSAgICBFTkRGT1JFQUNIKCkKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0UHJvY2VzcyB0ZXN0UHJvY2Vzcy5jKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCisgICAgI3NldChLV1NZU19URVNUX1BST0NFU1NfNyA3KSAjIHVuY29tbWVudCB0byBydW4gdGltaW5nLXNlbnNpdGl2ZSB0ZXN0IGxvY2FsbHkKKyAgICBmb3JlYWNoKG4gMSAyIDMgNCA1IDYgJHtLV1NZU19URVNUX1BST0NFU1NfN30gOSAxMCkKKyAgICAgIGFkZF90ZXN0KGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgJHtufSkKKyAgICAgIHNldF9wcm9wZXJ0eShURVNUIGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQorICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoa3dzeXMudGVzdFByb2Nlc3MtJHtufSBQUk9QRVJUSUVTIFRJTUVPVVQgMTIwKQorICAgIGVuZGZvcmVhY2goKQogCi0gICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiIpCisgICAgc2V0KHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiIpCiAgICAgIyBTb21lIEFwcGxlIGNvbXBpbGVycyBwcm9kdWNlIGJhZCBvcHRpbWl6YXRpb25zIGluIHRoaXMgc291cmNlLgotICAgIElGKEFQUExFIEFORCBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl4oR05VfExMVk0pJCIpCi0gICAgICBTRVQodGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSAtTzAiKQotICAgIEVMU0VJRihDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJYTCIpCisgICAgaWYoQVBQTEUgQU5EIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXihHTlV8TExWTSkkIikKKyAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1PMCIpCisgICAgZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIlhMIikKICAgICAgICMgVGVsbCBJQk0gWEwgbm90IHRvIHdhcm4gYWJvdXQgb3VyIHRlc3QgaW5maW5pdGUgbG9vcAotICAgICAgSUYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkxpbnV4LipwcGM2NGxlIgorICAgICAgaWYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkxpbnV4LipwcGM2NGxlIgogICAgICAgICAgQU5EIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjE2LjEuMCIKICAgICAgICAgIEFORCBOT1QgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiMTMuMS4xIikKICAgICAgICAgIyB2MTMuMS5bMS02XSBvbiBMaW51eCBwcGM2NGxlIGlzIGNsYW5nIGJhc2VkIGFuZCBkb2VzIG5vdCBhY2NlcHQKICAgICAgICAgIyB0aGUgLXFzdXBwcmVzcyBvcHRpb24sIHNvIGp1c3Qgc3VwcHJlc3MgYWxsIHdhcm5pbmdzLgotICAgICAgICBTRVQodGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSAtdyIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLXFzdXBwcmVzcz0xNTAwLTAxMCIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICAgIElGKENNQUtFX0NfRkxBR1MgTUFUQ0hFUyAiLWZzYW5pdGl6ZT0iKQotICAgICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLURDUkFTSF9VU0lOR19BQk9SVCIpCi0gICAgRU5ESUYoKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgdGVzdFByb2Nlc3MuYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IikKKyAgICAgICAgc2V0KHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLXciKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1xc3VwcHJlc3M9MTUwMC0wMTAiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgICBpZihDTUFLRV9DX0ZMQUdTIE1BVENIRVMgIi1mc2FuaXRpemU9IikKKyAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1EQ1JBU0hfVVNJTkdfQUJPUlQiKQorICAgIGVuZGlmKCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIHRlc3RQcm9jZXNzLmMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSIpCiAKICAgICAjIFRlc3QgU2hhcmVkRm9yd2FyZAotICAgIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS90ZXN0U2hhcmVkRm9yd2FyZC5jLmluCisgICAgY29uZmlndXJlX2ZpbGUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3Rlc3RTaGFyZWRGb3J3YXJkLmMuaW4KICAgICAgICAgICAgICAgICAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vdGVzdFNoYXJlZEZvcndhcmQuYyBAT05MWSBJTU1FRElBVEUpCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZAogICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS90ZXN0U2hhcmVkRm9yd2FyZC5jKQotICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCi0gICAgQUREX0RFUEVOREVOQ0lFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIEFERF9URVNUKGt3c3lzLnRlc3RTaGFyZWRGb3J3YXJkICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RTaGFyZWRGb3J3YXJkIDEpCi0gICAgU0VUX1BST1BFUlRZKFRFU1Qga3dzeXMudGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgYWRkX2RlcGVuZGVuY2llcygke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQorICAgIGFkZF90ZXN0KGt3c3lzLnRlc3RTaGFyZWRGb3J3YXJkICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RTaGFyZWRGb3J3YXJkIDEpCisgICAgc2V0X3Byb3BlcnR5KFRFU1Qga3dzeXMudGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQogCiAgICAgIyBDb25maWd1cmUgc29tZSB0ZXN0IHByb3BlcnRpZXMuCi0gICAgSUYoS1dTWVNfU1RBTkRBTE9ORSkKKyAgICBpZihLV1NZU19TVEFOREFMT05FKQogICAgICAgIyBXZSBleHBlY3QgdGVzdCB0byBmYWlsCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKLSAgICAgIEdFVF9URVNUX1BST1BFUlRZKGt3c3lzLnRlc3RGYWlsIFdJTExfRkFJTCB3ZnYpCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIE1FQVNVUkVNRU5UICJTb21lIEtleT1Tb21lIFZhbHVlIikKLSAgICAgIE1FU1NBR0UoU1RBVFVTICJHRVRfVEVTVF9QUk9QRVJUWSByZXR1cm5lZDogJHt3ZnZ9IikKLSAgICBFTkRJRigpCisgICAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKKyAgICAgIGdldF90ZXN0X3Byb3BlcnR5KGt3c3lzLnRlc3RGYWlsIFdJTExfRkFJTCB3ZnYpCisgICAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIE1FQVNVUkVNRU5UICJTb21lIEtleT1Tb21lIFZhbHVlIikKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJHRVRfVEVTVF9QUk9QRVJUWSByZXR1cm5lZDogJHt3ZnZ9IikKKyAgICBlbmRpZigpCiAKICAgICAjIFNldCB1cCBjdGVzdCBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlLgotICAgIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9DVGVzdEN1c3RvbS5jbWFrZS5pbgorICAgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9DVGVzdEN1c3RvbS5jbWFrZS5pbgogICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9DVGVzdEN1c3RvbS5jbWFrZSBAT05MWSkKIAogICAgICMgU3VwcHJlc3Mga25vd24gY29uc2lzdGVudCBmYWlsdXJlcyBvbiBidWdneSBzeXN0ZW1zLgotICAgIElGKEtXU1lTX1RFU1RfQk9HVVNfRkFJTFVSRVMpCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUygke0tXU1lTX1RFU1RfQk9HVVNfRkFJTFVSRVN9IFBST1BFUlRJRVMgV0lMTF9GQUlMIE9OKQotICAgIEVORElGKCkKKyAgICBpZihLV1NZU19URVNUX0JPR1VTX0ZBSUxVUkVTKQorICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoJHtLV1NZU19URVNUX0JPR1VTX0ZBSUxVUkVTfSBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKKyAgICBlbmRpZigpCiAKLSAgRU5ESUYoKQotRU5ESUYoKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvQ29tbWFuZExpbmVBcmd1bWVudHMuY3h4IGIvU291cmNlL2t3c3lzL0NvbW1hbmRMaW5lQXJndW1lbnRzLmN4eAppbmRleCAzZmQxOTU1Li5lNDVkYjM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvQ29tbWFuZExpbmVBcmd1bWVudHMuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9Db21tYW5kTGluZUFyZ3VtZW50cy5jeHgKQEAgLTIwLDkgKzIwLDkgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KIAogI2lmZGVmIF9NU0NfVkVSCiAjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDc4NikKQEAgLTY2LDI2ICs2NiwyMSBAQAogY2xhc3MgQ29tbWFuZExpbmVBcmd1bWVudHNJbnRlcm5hbAogewogcHVibGljOgotICBDb21tYW5kTGluZUFyZ3VtZW50c0ludGVybmFsKCkKLSAgICA6IFVua25vd25Bcmd1bWVudENhbGxiYWNreyBudWxscHRyIH0KLSAgICAsIENsaWVudERhdGF7IG51bGxwdHIgfQotICAgICwgTGFzdEFyZ3VtZW50eyAwIH0KLSAgewotICB9CisgIENvbW1hbmRMaW5lQXJndW1lbnRzSW50ZXJuYWwoKSA9IGRlZmF1bHQ7CiAKLSAgdHlwZWRlZiBDb21tYW5kTGluZUFyZ3VtZW50c1ZlY3Rvck9mU3RyaW5ncyBWZWN0b3JPZlN0cmluZ3M7Ci0gIHR5cGVkZWYgQ29tbWFuZExpbmVBcmd1bWVudHNNYXBPZlN0cnVjcyBDYWxsYmFja3NNYXA7Ci0gIHR5cGVkZWYga3dzeXM6OlN0cmluZyBTdHJpbmc7Ci0gIHR5cGVkZWYgQ29tbWFuZExpbmVBcmd1bWVudHNTZXRPZlN0cmluZ3MgU2V0T2ZTdHJpbmdzOworICB1c2luZyBWZWN0b3JPZlN0cmluZ3MgPSBDb21tYW5kTGluZUFyZ3VtZW50c1ZlY3Rvck9mU3RyaW5nczsKKyAgdXNpbmcgQ2FsbGJhY2tzTWFwID0gQ29tbWFuZExpbmVBcmd1bWVudHNNYXBPZlN0cnVjczsKKyAgdXNpbmcgU3RyaW5nID0ga3dzeXM6OlN0cmluZzsKKyAgdXNpbmcgU2V0T2ZTdHJpbmdzID0gQ29tbWFuZExpbmVBcmd1bWVudHNTZXRPZlN0cmluZ3M7CiAKICAgVmVjdG9yT2ZTdHJpbmdzIEFyZ3Y7CiAgIFN0cmluZyBBcmd2MDsKICAgQ2FsbGJhY2tzTWFwIENhbGxiYWNrczsKIAotICBDb21tYW5kTGluZUFyZ3VtZW50czo6RXJyb3JDYWxsYmFja1R5cGUgVW5rbm93bkFyZ3VtZW50Q2FsbGJhY2s7Ci0gIHZvaWQqIENsaWVudERhdGE7CisgIENvbW1hbmRMaW5lQXJndW1lbnRzOjpFcnJvckNhbGxiYWNrVHlwZSBVbmtub3duQXJndW1lbnRDYWxsYmFja3sgbnVsbHB0ciB9OworICB2b2lkKiBDbGllbnREYXRheyBudWxscHRyIH07CiAKLSAgVmVjdG9yT2ZTdHJpbmdzOjpzaXplX3R5cGUgTGFzdEFyZ3VtZW50OworICBWZWN0b3JPZlN0cmluZ3M6OnNpemVfdHlwZSBMYXN0QXJndW1lbnR7IDAgfTsKIAogICBWZWN0b3JPZlN0cmluZ3MgVW51c2VkQXJndW1lbnRzOwogfTsKQEAgLTQyNCw4ICs0MTksNyBAQAogCiBjb25zdCBjaGFyKiBDb21tYW5kTGluZUFyZ3VtZW50czo6R2V0SGVscChjb25zdCBjaGFyKiBhcmcpCiB7Ci0gIENvbW1hbmRMaW5lQXJndW1lbnRzOjpJbnRlcm5hbDo6Q2FsbGJhY2tzTWFwOjppdGVyYXRvciBpdCA9Ci0gICAgdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZmluZChhcmcpOworICBhdXRvIGl0ID0gdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZmluZChhcmcpOwogICBpZiAoaXQgPT0gdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZW5kKCkpIHsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQpAQCAtNDM0LDggKzQyOCw3IEBACiAgIC8vIG9uZSBwb2ludCB0byBpZiB0aGlzIG9uZSBpcyBwb2ludGluZyB0byBhbm90aGVyIGFyZ3VtZW50LgogICBDb21tYW5kTGluZUFyZ3VtZW50c0NhbGxiYWNrU3RydWN0dXJlKiBjcyA9ICYoaXQtPnNlY29uZCk7CiAgIGZvciAoOzspIHsKLSAgICBDb21tYW5kTGluZUFyZ3VtZW50czo6SW50ZXJuYWw6OkNhbGxiYWNrc01hcDo6aXRlcmF0b3IgaGl0ID0KLSAgICAgIHRoaXMtPkludGVybmFscy0+Q2FsbGJhY2tzLmZpbmQoY3MtPkhlbHApOworICAgIGF1dG8gaGl0ID0gdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZmluZChjcy0+SGVscCk7CiAgICAgaWYgKGhpdCA9PSB0aGlzLT5JbnRlcm5hbHMtPkNhbGxiYWNrcy5lbmQoKSkgewogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDcwLDkgKzQ2Myw4IEBACiAgIC8vIENvbGxhcHNlIGFsbCBhcmd1bWVudHMgaW50byB0aGUgbWFwIG9mIHZlY3RvcnMgb2YgYWxsIGFyZ3VtZW50cyB0aGF0IGRvCiAgIC8vIHRoZSBzYW1lIHRoaW5nLgogICBDb21tYW5kTGluZUFyZ3VtZW50czo6SW50ZXJuYWw6OkNhbGxiYWNrc01hcDo6aXRlcmF0b3IgaXQ7Ci0gIHR5cGVkZWYgc3RkOjptYXA8Q29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgQ29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpTZXRPZlN0cmluZ3M+Ci0gICAgTWFwQXJnczsKKyAgdXNpbmcgTWFwQXJncyA9IHN0ZDo6bWFwPENvbW1hbmRMaW5lQXJndW1lbnRzOjpJbnRlcm5hbDo6U3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpTZXRPZlN0cmluZ3M+OwogICBNYXBBcmdzIG1wOwogICBNYXBBcmdzOjppdGVyYXRvciBtcGl0LCBzbXBpdDsKICAgZm9yIChpdCA9IHRoaXMtPkludGVybmFscy0+Q2FsbGJhY2tzLmJlZ2luKCk7CkBAIC03MDksNyArNzAxLDcgQEAKICAgaWYgKGNzLT5DYWxsYmFjaykgewogICAgIGlmICghY3MtPkNhbGxiYWNrKGNzLT5Bcmd1bWVudCwgdmFsdWUsIGNzLT5DYWxsRGF0YSkpIHsKICAgICAgIHRoaXMtPkludGVybmFscy0+TGFzdEFyZ3VtZW50LS07Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KICAgQ29tbWFuZExpbmVBcmd1bWVudHNfREVCVUcoIlNldCBhcmd1bWVudDogIiA8PCBjcy0+QXJndW1lbnQgPDwgIiB0byAiCkBAIC03NTksMTAgKzc1MSwxMCBAQAogICAgICAgICBzdGQ6OmNlcnIgPDwgIkdvdCB1bmtub3duIHZhcmlhYmxlIHR5cGU6IFwiIiA8PCBjcy0+VmFyaWFibGVUeXBlCiAgICAgICAgICAgICAgICAgICA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgdGhpcy0+SW50ZXJuYWxzLT5MYXN0QXJndW1lbnQtLTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KLSAgcmV0dXJuIDE7CisgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9Db25maWd1cmUuaC5pbiBiL1NvdXJjZS9rd3N5cy9Db25maWd1cmUuaC5pbgppbmRleCA1MzIzYzU3Li44YTIzN2NlIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvQ29uZmlndXJlLmguaW4KKysrIGIvU291cmNlL2t3c3lzL0NvbmZpZ3VyZS5oLmluCkBAIC0xMyw5ICsxMyw2IEBACiAKIC8qIERpc2FibGUgc29tZSB3YXJuaW5ncyBpbnNpZGUga3dzeXMgc291cmNlIGZpbGVzLiAgKi8KICNpZiBkZWZpbmVkKEtXU1lTX05BTUVTUEFDRSkKLSMgIGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyAgICBwcmFnbWEgd2FybiAtIDgwMjcgLyogZnVuY3Rpb24gbm90IGlubGluZWQuICAqLwotIyAgZW5kaWYKICMgIGlmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKICMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDE1NzIpIC8qIGZsb2F0aW5nLXBvaW50IGVxdWFsaXR5IHRlc3QgKi8KICMgIGVuZGlmCkBAIC02OCwxMSArNjUsNiBAQAogIyAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDcxMCkgLyogZnVuY3Rpb24gbm90IGlubGluZWQgKi8KICMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ3ODYpIC8qIGlkZW50aWZpZXIgdHJ1bmNhdGVkIGluIGRlYnVnIGluZm8gKi8KICMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCi0vKiBDb2RlIGhhcyBubyBlZmZlY3Q7IHJhaXNlZCBieSB3aW5udC5oIGluIEMgKG5vdCBDKyspIHdoZW4gaWdub3JpbmcgYW4KLSAgIHVudXNlZCBwYXJhbWV0ZXIgdXNpbmcgIihwYXJhbSkiIHN5bnRheCAoaS5lLiBubyBjYXN0IHRvIHZvaWQpLiAgKi8KLSMgICAgcHJhZ21hIHdhcm4gLSA4MDE5Ci0jICBlbmRpZgogI2VuZGlmCiAKIC8qIE1TVkMgNi4wIGluIHJlbGVhc2UgbW9kZSB3aWxsIHdhcm4gYWJvdXQgY29kZSBpdCBwcm9kdWNlcyB3aXRoIGl0cwpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0RpcmVjdG9yeS5jeHggYi9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5LmN4eAppbmRleCBlMzc5MTgyLi4wYzIxOTBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5LmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5LmN4eApAQCAtMzUsNiArMzUsMTggQEAKICAgdGhpcy0+SW50ZXJuYWwgPSBuZXcgRGlyZWN0b3J5SW50ZXJuYWxzOwogfQogCitEaXJlY3Rvcnk6OkRpcmVjdG9yeShEaXJlY3RvcnkmJiBvdGhlcikKK3sKKyAgdGhpcy0+SW50ZXJuYWwgPSBvdGhlci5JbnRlcm5hbDsKKyAgb3RoZXIuSW50ZXJuYWwgPSBudWxscHRyOworfQorCitEaXJlY3RvcnkmIERpcmVjdG9yeTo6b3BlcmF0b3I9KERpcmVjdG9yeSYmIG90aGVyKQoreworICBzdGQ6OnN3YXAodGhpcy0+SW50ZXJuYWwsIG90aGVyLkludGVybmFsKTsKKyAgcmV0dXJuICp0aGlzOworfQorCiBEaXJlY3Rvcnk6On5EaXJlY3RvcnkoKQogewogICBkZWxldGUgdGhpcy0+SW50ZXJuYWw7CkBAIC04MCwyNiArOTIsMTIgQEAKICMgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotLy8gV2lkZSBmdW5jdGlvbiBuYW1lcyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gY29tcGlsZXI6Ci0jICBpZmRlZiBfX0JPUkxBTkRDX18KLSMgICAgZGVmaW5lIF93ZmluZGZpcnN0X2Z1bmMgX193ZmluZGZpcnN0Ci0jICAgIGRlZmluZSBfd2ZpbmRuZXh0X2Z1bmMgX193ZmluZG5leHQKLSMgIGVsc2UKLSMgICAgZGVmaW5lIF93ZmluZGZpcnN0X2Z1bmMgX3dmaW5kZmlyc3QKLSMgICAgZGVmaW5lIF93ZmluZG5leHRfZnVuYyBfd2ZpbmRuZXh0Ci0jICBlbmRpZgotCiBuYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFIHsKIAotYm9vbCBEaXJlY3Rvcnk6OkxvYWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCitib29sIERpcmVjdG9yeTo6TG9hZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgc3RkOjpzdHJpbmcqIGVycm9yTWVzc2FnZSkKIHsKICAgdGhpcy0+Q2xlYXIoKTsKLSMgIGlmIChkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDEzMDApIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQotICAvLyBPbGRlciBWaXN1YWwgQysrIGFuZCBFbWJhcmNhZGVybyBjb21waWxlcnMuCi0gIGxvbmcgc3JjaEhhbmRsZTsKLSMgIGVsc2UgLy8gTmV3ZXIgVmlzdWFsIEMrKwogICBpbnRwdHJfdCBzcmNoSGFuZGxlOwotIyAgZW5kaWYKICAgY2hhciogYnVmOwogICBzaXplX3QgbiA9IG5hbWUuc2l6ZSgpOwogICBpZiAobmFtZS5iYWNrKCkgPT0gJy8nIHx8IG5hbWUuYmFjaygpID09ICdcXCcpIHsKQEAgLTExOCw4ICsxMTYsOCBAQAogICBzdHJ1Y3QgX3dmaW5kZGF0YV90IGRhdGE7IC8vIGRhdGEgb2YgY3VycmVudCBmaWxlCiAKICAgLy8gTm93IHB1dCB0aGVtIGludG8gdGhlIGZpbGUgYXJyYXkKLSAgc3JjaEhhbmRsZSA9IF93ZmluZGZpcnN0X2Z1bmMoCi0gICAgKHdjaGFyX3QqKUVuY29kaW5nOjpUb1dpbmRvd3NFeHRlbmRlZFBhdGgoYnVmKS5jX3N0cigpLCAmZGF0YSk7CisgIHNyY2hIYW5kbGUgPQorICAgIF93ZmluZGZpcnN0KCh3Y2hhcl90KilFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGJ1ZikuY19zdHIoKSwgJmRhdGEpOwogICBkZWxldGVbXSBidWY7CiAKICAgaWYgKHNyY2hIYW5kbGUgPT0gLTEpIHsKQEAgLTEyOSwxOSArMTI3LDE1IEBACiAgIC8vIExvb3AgdGhyb3VnaCBuYW1lcwogICBkbyB7CiAgICAgdGhpcy0+SW50ZXJuYWwtPkZpbGVzLnB1c2hfYmFjayhFbmNvZGluZzo6VG9OYXJyb3coZGF0YS5uYW1lKSk7Ci0gIH0gd2hpbGUgKF93ZmluZG5leHRfZnVuYyhzcmNoSGFuZGxlLCAmZGF0YSkgIT0gLTEpOworICB9IHdoaWxlIChfd2ZpbmRuZXh0KHNyY2hIYW5kbGUsICZkYXRhKSAhPSAtMSk7CiAgIHRoaXMtPkludGVybmFsLT5QYXRoID0gbmFtZTsKICAgcmV0dXJuIF9maW5kY2xvc2Uoc3JjaEhhbmRsZSkgIT0gLTE7CiB9CiAKLXVuc2lnbmVkIGxvbmcgRGlyZWN0b3J5OjpHZXROdW1iZXJPZkZpbGVzSW5EaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit1bnNpZ25lZCBsb25nIERpcmVjdG9yeTo6R2V0TnVtYmVyT2ZGaWxlc0luRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlKQogewotIyAgaWYgKGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTMwMCkgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0gIC8vIE9sZGVyIFZpc3VhbCBDKysgYW5kIEVtYmFyY2FkZXJvIGNvbXBpbGVycy4KLSAgbG9uZyBzcmNoSGFuZGxlOwotIyAgZWxzZSAvLyBOZXdlciBWaXN1YWwgQysrCiAgIGludHB0cl90IHNyY2hIYW5kbGU7Ci0jICBlbmRpZgogICBjaGFyKiBidWY7CiAgIHNpemVfdCBuID0gbmFtZS5zaXplKCk7CiAgIGlmIChuYW1lLmJhY2soKSA9PSAnLycpIHsKQEAgLTE1NCw4ICsxNDgsNyBAQAogICBzdHJ1Y3QgX3dmaW5kZGF0YV90IGRhdGE7IC8vIGRhdGEgb2YgY3VycmVudCBmaWxlCiAKICAgLy8gTm93IHB1dCB0aGVtIGludG8gdGhlIGZpbGUgYXJyYXkKLSAgc3JjaEhhbmRsZSA9Ci0gICAgX3dmaW5kZmlyc3RfZnVuYygod2NoYXJfdCopRW5jb2Rpbmc6OlRvV2lkZShidWYpLmNfc3RyKCksICZkYXRhKTsKKyAgc3JjaEhhbmRsZSA9IF93ZmluZGZpcnN0KCh3Y2hhcl90KilFbmNvZGluZzo6VG9XaWRlKGJ1ZikuY19zdHIoKSwgJmRhdGEpOwogICBkZWxldGVbXSBidWY7CiAKICAgaWYgKHNyY2hIYW5kbGUgPT0gLTEpIHsKQEAgLTE2Niw3ICsxNTksNyBAQAogICB1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKICAgZG8gewogICAgIGNvdW50Kys7Ci0gIH0gd2hpbGUgKF93ZmluZG5leHRfZnVuYyhzcmNoSGFuZGxlLCAmZGF0YSkgIT0gLTEpOworICB9IHdoaWxlIChfd2ZpbmRuZXh0KHNyY2hIYW5kbGUsICZkYXRhKSAhPSAtMSk7CiAgIF9maW5kY2xvc2Uoc3JjaEhhbmRsZSk7CiAgIHJldHVybiBjb3VudDsKIH0KQEAgLTE4MCw2ICsxNzMsOCBAQAogIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKICMgIGluY2x1ZGUgPGRpcmVudC5oPgorIyAgaW5jbHVkZSA8ZXJybm8uaD4KKyMgIGluY2x1ZGUgPHN0cmluZy5oPgogCiAvLyBQR0kgd2l0aCBnbGliYyBoYXMgdHJvdWJsZSB3aXRoIGRpcmVudCBhbmQgbGFyZ2UgZmlsZSBzdXBwb3J0OgogLy8gIGh0dHA6Ly93d3cucGdyb3VwLmNvbS91c2VyZm9ydW0vdmlld3RvcGljLnBocD8KQEAgLTE5NywyOSArMTkyLDQ2IEBACiAKIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UgewogCi1ib29sIERpcmVjdG9yeTo6TG9hZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKK2Jvb2wgRGlyZWN0b3J5OjpMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlKQogewogICB0aGlzLT5DbGVhcigpOwogCisgIGVycm5vID0gMDsKICAgRElSKiBkaXIgPSBvcGVuZGlyKG5hbWUuY19zdHIoKSk7CiAKICAgaWYgKCFkaXIpIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoZXJyb3JNZXNzYWdlICE9IG51bGxwdHIpIHsKKyAgICAgICplcnJvck1lc3NhZ2UgPSBzdGQ6OnN0cmluZyhzdHJlcnJvcihlcnJubykpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAorICBlcnJubyA9IDA7CiAgIGZvciAoa3dzeXNfZGlyZW50KiBkID0gcmVhZGRpcihkaXIpOyBkOyBkID0gcmVhZGRpcihkaXIpKSB7Ci0gICAgdGhpcy0+SW50ZXJuYWwtPkZpbGVzLnB1c2hfYmFjayhkLT5kX25hbWUpOworICAgIHRoaXMtPkludGVybmFsLT5GaWxlcy5lbXBsYWNlX2JhY2soZC0+ZF9uYW1lKTsKICAgfQorICBpZiAoZXJybm8gIT0gMCkgeworICAgIGlmIChlcnJvck1lc3NhZ2UgIT0gbnVsbHB0cikgeworICAgICAgKmVycm9yTWVzc2FnZSA9IHN0ZDo6c3RyaW5nKHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIHRoaXMtPkludGVybmFsLT5QYXRoID0gbmFtZTsKICAgY2xvc2VkaXIoZGlyKTsKLSAgcmV0dXJuIDE7CisgIHJldHVybiB0cnVlOwogfQogCi11bnNpZ25lZCBsb25nIERpcmVjdG9yeTo6R2V0TnVtYmVyT2ZGaWxlc0luRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQordW5zaWduZWQgbG9uZyBEaXJlY3Rvcnk6OkdldE51bWJlck9mRmlsZXNJbkRpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yTWVzc2FnZSkKIHsKKyAgZXJybm8gPSAwOwogICBESVIqIGRpciA9IG9wZW5kaXIobmFtZS5jX3N0cigpKTsKIAogICBpZiAoIWRpcikgeworICAgIGlmIChlcnJvck1lc3NhZ2UgIT0gbnVsbHB0cikgeworICAgICAgKmVycm9yTWVzc2FnZSA9IHN0ZDo6c3RyaW5nKHN0cmVycm9yKGVycm5vKSk7CisgICAgfQogICAgIHJldHVybiAwOwogICB9CiAKQEAgLTIyNyw2ICsyMzksMTMgQEAKICAgZm9yIChrd3N5c19kaXJlbnQqIGQgPSByZWFkZGlyKGRpcik7IGQ7IGQgPSByZWFkZGlyKGRpcikpIHsKICAgICBjb3VudCsrOwogICB9CisgIGlmIChlcnJubyAhPSAwKSB7CisgICAgaWYgKGVycm9yTWVzc2FnZSAhPSBudWxscHRyKSB7CisgICAgICAqZXJyb3JNZXNzYWdlID0gc3RkOjpzdHJpbmcoc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgY2xvc2VkaXIoZGlyKTsKICAgcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0RpcmVjdG9yeS5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5Lmh4eC5pbgppbmRleCBhZDhjNTFiLi43YmM5ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5Lmh4eC5pbgorKysgYi9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5Lmh4eC5pbgpAQCAtMjMsNiArMjMsMTEgQEAKIHsKIHB1YmxpYzoKICAgRGlyZWN0b3J5KCk7CisgIERpcmVjdG9yeShEaXJlY3RvcnkmJiBvdGhlcik7CisgIERpcmVjdG9yeShjb25zdCBEaXJlY3RvcnkmKSA9IGRlbGV0ZTsKKyAgRGlyZWN0b3J5JiBvcGVyYXRvcj0oY29uc3QgRGlyZWN0b3J5JikgPSBkZWxldGU7CisgIERpcmVjdG9yeSYgb3BlcmF0b3I9KERpcmVjdG9yeSYmIG90aGVyKTsKKyAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERpcmVjdG9yeSYpID0gZGVsZXRlOwogICB+RGlyZWN0b3J5KCk7CiAKICAgLyoqCkBAIC0zMCw3ICszNSw3IEBACiAgICAqIGluIHRoYXQgZGlyZWN0b3J5LiAwIGlzIHJldHVybmVkIGlmIHRoZSBkaXJlY3RvcnkgY2FuIG5vdCBiZQogICAgKiBvcGVuZWQsIDEgaWYgaXQgaXMgb3BlbmVkLgogICAgKi8KLSAgYm9vbCBMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgIGJvb2wgTG9hZChjb25zdCBzdGQ6OnN0cmluZyYsIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UgPSBudWxscHRyKTsKIAogICAvKioKICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgpAQCAtNDEsNyArNDYsOCBAQAogICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KICAgICogQSBoaWdoZXIgcGVyZm9ybWFuY2Ugc3RhdGljIG1ldGhvZC4KICAgICovCi0gIHN0YXRpYyB1bnNpZ25lZCBsb25nIEdldE51bWJlck9mRmlsZXNJbkRpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYpOworICBzdGF0aWMgdW5zaWduZWQgbG9uZyBHZXROdW1iZXJPZkZpbGVzSW5EaXJlY3RvcnkoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmLCBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlID0gbnVsbHB0cik7CiAKICAgLyoqCiAgICAqIFJldHVybiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gaW5kZXgsIHRoZSBpbmRleGluZyBpcyAwIGJhc2VkCkBAIC02MiwxMCArNjgsNyBAQAogcHJpdmF0ZToKICAgLy8gUHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgogICBEaXJlY3RvcnlJbnRlcm5hbHMqIEludGVybmFsOwotCi0gIERpcmVjdG9yeShjb25zdCBEaXJlY3RvcnkmKTsgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IERpcmVjdG9yeSYpOyAvLyBOb3QgaW1wbGVtZW50ZWQuCi19OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmQgQ2xhc3M6IERpcmVjdG9yeQorfTsgLy8gRW5kIENsYXNzOiBEaXJlY3RvcnkKIAogfSAvLyBuYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAKIApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0R5bmFtaWNMb2FkZXIuY3h4IGIvU291cmNlL2t3c3lzL0R5bmFtaWNMb2FkZXIuY3h4CmluZGV4IGE0Yjg2NDEuLjY2ZWU5ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9EeW5hbWljTG9hZGVyLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvRHluYW1pY0xvYWRlci5jeHgKQEAgLTI0NiwxNyArMjQ2LDYgQEAKICAgLy8gc2hvdWxkIGhhdmUgYSB0b29sIHRvIGhlbHAgZ2V0IHRoZSBzeW1ib2wgd2l0aCB0aGUgZGVzaXJlZAogICAvLyBjYWxsaW5nIGNvbnZlbnRpb24uICBDdXJyZW50bHkgd2UgYXNzdW1lIGNkZWNsLgogICAvLwotICAvLyBCb3JsYW5kOgotICAvLyAgIF9fY2RlY2wgICAgPSAiX2Z1bmMiIChkZWZhdWx0KQotICAvLyAgIF9fZmFzdGNhbGwgPSAiQF9mdW5jIgotICAvLyAgIF9fc3RkY2FsbCAgPSAiZnVuYyIKLSAgLy8KLSAgLy8gV2F0Y29tOgotICAvLyAgIF9fY2RlY2wgICAgPSAiX2Z1bmMiCi0gIC8vICAgX19mYXN0Y2FsbCA9ICJAX2Z1bmNAWCIKLSAgLy8gICBfX3N0ZGNhbGwgID0gIl9mdW5jQFgiCi0gIC8vICAgX193YXRjYWxsICA9ICJmdW5jXyIgKGRlZmF1bHQpCi0gIC8vCiAgIC8vIE1TVkM6CiAgIC8vICAgX19jZGVjbCAgICA9ICJmdW5jIiAoZGVmYXVsdCkKICAgLy8gICBfX2Zhc3RjYWxsID0gIkBfZnVuY0BYIgpAQCAtMjY1LDIwICsyNTQsOSBAQAogICAvLyBOb3RlIHRoYXQgdGhlICJAWCIgcGFydCBvZiB0aGUgbmFtZSBhYm92ZSBpcyB0aGUgdG90YWwgc2l6ZSAoaW4KICAgLy8gYnl0ZXMpIG9mIHRoZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgogICB2b2lkKiByZXN1bHQ7Ci0jICBpZiBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykKLSAgLy8gTmVlZCB0byBwcmVwZW5kIHN5bWJvbHMgd2l0aCAnXycKLSAgc3RkOjpzdHJpbmcgc3N5bSA9ICdfJyArIHN5bTsKLSAgY29uc3QgY2hhciogcnN5bSA9IHNzeW0uY19zdHIoKTsKLSMgIGVsc2UKICAgY29uc3QgY2hhciogcnN5bSA9IHN5bS5jX3N0cigpOwotIyAgZW5kaWYKICAgcmVzdWx0ID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGxpYiwgcnN5bSk7Ci0vLyBIYWNrIHRvIGNhc3QgcG9pbnRlci10by1kYXRhIHRvIHBvaW50ZXItdG8tZnVuY3Rpb24uCi0jICBpZmRlZiBfX1dBVENPTUNfXwotICByZXR1cm4gKihEeW5hbWljTG9hZGVyOjpTeW1ib2xQb2ludGVyKikoJnJlc3VsdCk7Ci0jICBlbHNlCiAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxEeW5hbWljTG9hZGVyOjpTeW1ib2xQb2ludGVyKj4oJnJlc3VsdCk7Ci0jICBlbmRpZgogfQogCiAjICBkZWZpbmUgRFlOTE9BRF9FUlJPUl9CVUZGRVJfU0laRSAxMDI0CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRW5jb2RpbmdDWFguY3h4IGIvU291cmNlL2t3c3lzL0VuY29kaW5nQ1hYLmN4eAppbmRleCA1Y2FkOTM0Li5jNjhjNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRW5jb2RpbmdDWFguY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9FbmNvZGluZ0NYWC5jeHgKQEAgLTE3LDggKzE3LDggQEAKICMgIGluY2x1ZGUgIkVuY29kaW5nLmh4eC5pbiIKICNlbmRpZgogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2lmZGVmIF9NU0NfVkVSCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRXh0cmFUZXN0LmNtYWtlLmluIGIvU291cmNlL2t3c3lzL0V4dHJhVGVzdC5jbWFrZS5pbgppbmRleCBlOGMwYTFjLi40Y2VjOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRXh0cmFUZXN0LmNtYWtlLmluCisrKyBiL1NvdXJjZS9rd3N5cy9FeHRyYVRlc3QuY21ha2UuaW4KQEAgLTEgKzEgQEAKLU1FU1NBR0UoIioqKiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IG1lc3NhZ2UgaW5zaWRlIGEgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGluIERhcnRUZXN0ZmlsZS50eHQgKioqIikKK21lc3NhZ2UoIioqKiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IG1lc3NhZ2UgaW5zaWRlIGEgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGluIERhcnRUZXN0ZmlsZS50eHQgKioqIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9HbG9iLmN4eCBiL1NvdXJjZS9rd3N5cy9HbG9iLmN4eAppbmRleCAzNGJiMGQwLi41NDUyZjczIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvR2xvYi5jeHgKKysrIGIvU291cmNlL2t3c3lzL0dsb2IuY3h4CkBAIC0yMyw5ICsyMyw5IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjY3R5cGU+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdHJpbmc+CiBuYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19DWUdXSU5fXykKIC8vIE9uIFdpbmRvd3MgYW5kIEFwcGxlLCBubyBkaWZmZXJlbmNlIGJldHdlZW4gbG93ZXIgYW5kIHVwcGVyIGNhc2UKQEAgLTE4Miw3ICsxODIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGlyLCBHbG9iTWVzc2FnZXMqIG1lc3NhZ2VzKQogewogICBrd3N5czo6RGlyZWN0b3J5IGQ7Ci0gIGlmICghZC5Mb2FkKGRpcikpIHsKKyAgc3RkOjpzdHJpbmcgZXJyb3JNZXNzYWdlOworICBpZiAoIWQuTG9hZChkaXIsICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKG1lc3NhZ2VzKSB7CisgICAgICBpZiAoIWVycm9yTWVzc2FnZS5lbXB0eSgpKSB7CisgICAgICAgIG1lc3NhZ2VzLT5wdXNoX2JhY2soTWVzc2FnZShHbG9iOjp3YXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGxpc3RpbmcgZGlyZWN0b3J5ICciICsgZGlyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIichIFJlYXNvbjogJyIgKyBlcnJvck1lc3NhZ2UgKyAiJyIpKTsKKyAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgdW5zaWduZWQgbG9uZyBjYzsKQEAgLTI3OCw3ICsyODYsOSBAQAogICAvLyBzdGQ6OmNvdXQgPDwgIlByb2Nlc3NEaXJlY3Rvcnk6ICIgPDwgZGlyIDw8IHN0ZDo6ZW5kbDsKICAgYm9vbCBsYXN0ID0gKHN0YXJ0ID09IHRoaXMtPkludGVybmFscy0+RXhwcmVzc2lvbnMuc2l6ZSgpIC0gMSk7CiAgIGlmIChsYXN0ICYmIHRoaXMtPlJlY3Vyc2UpIHsKLSAgICB0aGlzLT5SZWN1cnNlRGlyZWN0b3J5KHN0YXJ0LCBkaXIsIG1lc3NhZ2VzKTsKKyAgICBpZiAoa3dzeXM6OlN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoZGlyKSkgeworICAgICAgdGhpcy0+UmVjdXJzZURpcmVjdG9yeShzdGFydCwgZGlyLCBtZXNzYWdlcyk7CisgICAgfQogICAgIHJldHVybjsKICAgfQogCkBAIC0zODUsMTAgKzM5NSw5IEBACiAgIH0KIAogICBpZiAoc2tpcCA+IDApIHsKLSAgICBleHByID0gZXhwci5zdWJzdHIoc2tpcCk7CisgICAgZXhwci5lcmFzZSgwLCBza2lwKTsKICAgfQogCi0gIGNleHByID0gIiI7CiAgIGZvciAoY2MgPSAwOyBjYyA8IGV4cHIuc2l6ZSgpOyBjYysrKSB7CiAgICAgaW50IGNoID0gZXhwcltjY107CiAgICAgaWYgKGNoID09ICcvJykgewpAQCAtNDE1LDggKzQyNCw3IEBACiAKIHZvaWQgR2xvYjo6QWRkRXhwcmVzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZXhwcikKIHsKLSAgdGhpcy0+SW50ZXJuYWxzLT5FeHByZXNzaW9ucy5wdXNoX2JhY2soCi0gICAga3dzeXM6OlJlZ3VsYXJFeHByZXNzaW9uKHRoaXMtPlBhdHRlcm5Ub1JlZ2V4KGV4cHIpKSk7CisgIHRoaXMtPkludGVybmFscy0+RXhwcmVzc2lvbnMuZW1wbGFjZV9iYWNrKHRoaXMtPlBhdHRlcm5Ub1JlZ2V4KGV4cHIpKTsKIH0KIAogdm9pZCBHbG9iOjpTZXRSZWxhdGl2ZShjb25zdCBjaGFyKiBkaXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvR2xvYi5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvR2xvYi5oeHguaW4KaW5kZXggMTcwNzY2Zi4uYjVhMzRkNSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL0dsb2IuaHh4LmluCisrKyBiL1NvdXJjZS9rd3N5cy9HbG9iLmh4eC5pbgpAQCAtMjgsNiArMjgsNyBAQAogICBlbnVtIE1lc3NhZ2VUeXBlCiAgIHsKICAgICBlcnJvciwKKyAgICB3YXJuaW5nLAogICAgIGN5Y2xpY1JlY3Vyc2lvbgogICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvSU9TdHJlYW0uY3h4IGIvU291cmNlL2t3c3lzL0lPU3RyZWFtLmN4eApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIxZjg3ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uva3dzeXMvSU9TdHJlYW0uY3h4CisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLiAgKi8KLSNpbmNsdWRlICJrd3N5c1ByaXZhdGUuaCIKLSNpbmNsdWRlIEtXU1lTX0hFQURFUihDb25maWd1cmUuaHh4KQotCi0vLyBJbmNsdWRlIHRoZSBzdHJlYW1zIGxpYnJhcnkuCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSBLV1NZU19IRUFERVIoSU9TdHJlYW0uaHh4KQotCi0vLyBXb3JrLWFyb3VuZCBDTWFrZSBkZXBlbmRlbmN5IHNjYW5uaW5nIGxpbWl0YXRpb24uICBUaGlzIG11c3QKLS8vIGR1cGxpY2F0ZSB0aGUgYWJvdmUgbGlzdCBvZiBoZWFkZXJzLgotI2lmIDAKLSMgIGluY2x1ZGUgIkNvbmZpZ3VyZS5oeHguaW4iCi0jICBpbmNsdWRlICJJT1N0cmVhbS5oeHguaW4iCi0jZW5kaWYKLQotLy8gSW1wbGVtZW50IHRoZSByZXN0IG9mIHRoaXMgZmlsZSBvbmx5IGlmIGl0IGlzIG5lZWRlZC4KLSNpZiBLV1NZU19JT1NfTkVFRF9PUEVSQVRPUlNfTEwKLQotIyAgaW5jbHVkZSA8c3RkaW8uaD4gIC8vIHNzY2FuZiwgc3ByaW50ZgotIyAgaW5jbHVkZSA8c3RyaW5nLmg+IC8vIG1lbWNocgotCi0jICBpZiBkZWZpbmVkKF9NQVhfSU5UX0RJRykKLSMgICAgZGVmaW5lIEtXU1lTX0lPU19JTlQ2NF9NQVhfRElHIF9NQVhfSU5UX0RJRwotIyAgZWxzZQotIyAgICBkZWZpbmUgS1dTWVNfSU9TX0lOVDY0X01BWF9ESUcgMzIKLSMgIGVuZGlmCi0KLW5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UgewotCi0vLyBTY2FuIGFuIGlucHV0IHN0cmVhbSBmb3IgYW4gaW50ZWdlciB2YWx1ZS4KLXN0YXRpYyBpbnQgSU9TdHJlYW1TY2FuU3RyZWFtKHN0ZDo6aXN0cmVhbSYgaXMsIGNoYXIqIGJ1ZmZlcikKLXsKLSAgLy8gUHJlcGFyZSB0byB3cml0ZSB0byBidWZmZXIuCi0gIGNoYXIqIG91dCA9IGJ1ZmZlcjsKLSAgY2hhciogZW5kID0gYnVmZmVyICsgS1dTWVNfSU9TX0lOVDY0X01BWF9ESUcgLSAxOwotCi0gIC8vIExvb2sgZm9yIGxlYWRpbmcgc2lnbi4KLSAgaWYgKGlzLnBlZWsoKSA9PSAnKycpIHsKLSAgICAqb3V0KysgPSAnKyc7Ci0gICAgaXMuaWdub3JlKCk7Ci0gIH0gZWxzZSBpZiAoaXMucGVlaygpID09ICctJykgewotICAgICpvdXQrKyA9ICctJzsKLSAgICBpcy5pZ25vcmUoKTsKLSAgfQotCi0gIC8vIERldGVybWluZSB0aGUgYmFzZS4gIElmIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0cmVhbSwgdHJ5IHRvCi0gIC8vIGRldGVjdCBpdCBmcm9tIHRoZSBpbnB1dC4gIEEgbGVhZGluZyAweCBtZWFucyBoZXgsIGFuZCBhIGxlYWRpbmcKLSAgLy8gMCBhbG9uZSBtZWFucyBvY3RhbC4KLSAgaW50IGJhc2UgPSAwOwotICBpbnQgZmxhZ3MgPSBpcy5mbGFncygpICYgc3RkOjppb3NfYmFzZTo6YmFzZWZpZWxkOwotICBpZiAoZmxhZ3MgPT0gc3RkOjppb3NfYmFzZTo6b2N0KSB7Ci0gICAgYmFzZSA9IDg7Ci0gIH0gZWxzZSBpZiAoZmxhZ3MgPT0gc3RkOjppb3NfYmFzZTo6ZGVjKSB7Ci0gICAgYmFzZSA9IDEwOwotICB9IGVsc2UgaWYgKGZsYWdzID09IHN0ZDo6aW9zX2Jhc2U6OmhleCkgewotICAgIGJhc2UgPSAxNjsKLSAgfQotICBib29sIGZvdW5kRGlnaXQgPSBmYWxzZTsKLSAgYm9vbCBmb3VuZE5vblplcm8gPSBmYWxzZTsKLSAgaWYgKGlzLnBlZWsoKSA9PSAnMCcpIHsKLSAgICBmb3VuZERpZ2l0ID0gdHJ1ZTsKLSAgICBpcy5pZ25vcmUoKTsKLSAgICBpZiAoKGlzLnBlZWsoKSA9PSAneCcgfHwgaXMucGVlaygpID09ICdYJykgJiYgKGJhc2UgPT0gMCB8fCBiYXNlID09IDE2KSkgewotICAgICAgYmFzZSA9IDE2OwotICAgICAgZm91bmREaWdpdCA9IGZhbHNlOwotICAgICAgaXMuaWdub3JlKCk7Ci0gICAgfSBlbHNlIGlmIChiYXNlID09IDApIHsKLSAgICAgIGJhc2UgPSA4OwotICAgIH0KLSAgfQotCi0gIC8vIERldGVybWluZSB0aGUgcmFuZ2Ugb2YgZGlnaXRzIGFsbG93ZWQgZm9yIHRoaXMgbnVtYmVyLgotICBjb25zdCBjaGFyKiBkaWdpdHMgPSAiMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRiI7Ci0gIGludCBtYXhEaWdpdEluZGV4ID0gMTA7Ci0gIGlmIChiYXNlID09IDgpIHsKLSAgICBtYXhEaWdpdEluZGV4ID0gODsKLSAgfSBlbHNlIGlmIChiYXNlID09IDE2KSB7Ci0gICAgbWF4RGlnaXRJbmRleCA9IDEwICsgNiArIDY7Ci0gIH0KLQotICAvLyBTY2FuIHVudGlsIGFuIGludmFsaWQgZGlnaXQgaXMgZm91bmQuCi0gIGZvciAoOyBpcy5wZWVrKCkgIT0gRU9GOyBpcy5pZ25vcmUoKSkgewotICAgIGlmIChtZW1jaHIoZGlnaXRzLCAqb3V0ID0gKGNoYXIpaXMucGVlaygpLCBtYXhEaWdpdEluZGV4KSAhPSAwKSB7Ci0gICAgICBpZiAoKGZvdW5kTm9uWmVybyB8fCAqb3V0ICE9ICcwJykgJiYgb3V0IDwgZW5kKSB7Ci0gICAgICAgICsrb3V0OwotICAgICAgICBmb3VuZE5vblplcm8gPSB0cnVlOwotICAgICAgfQotICAgICAgZm91bmREaWdpdCA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8vIENvcnJlY3QgdGhlIGJ1ZmZlciBjb250ZW50cyBmb3IgZGVnZW5lcmF0ZSBjYXNlcy4KLSAgaWYgKGZvdW5kRGlnaXQgJiYgIWZvdW5kTm9uWmVybykgewotICAgICpvdXQrKyA9ICcwJzsKLSAgfSBlbHNlIGlmICghZm91bmREaWdpdCkgewotICAgIG91dCA9IGJ1ZmZlcjsKLSAgfQotCi0gIC8vIFRlcm1pbmF0ZSB0aGUgc3RyaW5nIGluIHRoZSBidWZmZXIuCi0gICpvdXQgPSAnXDAnOwotCi0gIHJldHVybiBiYXNlOwotfQotCi0vLyBSZWFkIGFuIGludGVnZXIgdmFsdWUgZnJvbSBhbiBpbnB1dCBzdHJlYW0uCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0ZDo6aXN0cmVhbSYgSU9TdHJlYW1TY2FuVGVtcGxhdGUoc3RkOjppc3RyZWFtJiBpcywgVCYgdmFsdWUsIGNoYXIgdHlwZSkKLXsKLSAgaW50IHN0YXRlID0gc3RkOjppb3NfYmFzZTo6Z29vZGJpdDsKLQotICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgc3RkOjppc3RyZWFtOjpzZW50cnkgb2theShpcyk7Ci0KLSAgaWYgKG9rYXkpIHsKLSAgICB0cnkgewotICAgICAgLy8gQ29weSB0aGUgc3RyaW5nIHRvIGEgYnVmZmVyIGFuZCBjb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcuCi0gICAgICBjaGFyIGJ1ZmZlcltLV1NZU19JT1NfSU5UNjRfTUFYX0RJR107Ci0jICBpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAgY2hhciBmb3JtYXRbXSA9ICIlSTY0XyI7Ci0gICAgICBjb25zdCBpbnQgdHlwZUluZGV4ID0gNDsKLSMgIGVsc2UKLSAgICAgIGNoYXIgZm9ybWF0W10gPSAiJWxsXyI7Ci0gICAgICBjb25zdCBpbnQgdHlwZUluZGV4ID0gMzsKLSMgIGVuZGlmCi0gICAgICBzd2l0Y2ggKElPU3RyZWFtU2NhblN0cmVhbShpcywgYnVmZmVyKSkgewotICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgZm9ybWF0W3R5cGVJbmRleF0gPSAnbyc7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMDogLy8gRGVmYXVsdCB0byBkZWNpbWFsIGlmIG5vdCB0b2xkIG90aGVyd2lzZS4KLSAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICBmb3JtYXRbdHlwZUluZGV4XSA9IHR5cGU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICAgZm9ybWF0W3R5cGVJbmRleF0gPSAneCc7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9OwotCi0gICAgICAvLyBVc2Ugc3NjYW5mIHRvIHBhcnNlIHRoZSBudW1iZXIgZnJvbSB0aGUgYnVmZmVyLgotICAgICAgVCByZXN1bHQ7Ci0gICAgICBpbnQgc3VjY2VzcyA9IChzc2NhbmYoYnVmZmVyLCBmb3JtYXQsICZyZXN1bHQpID09IDEpID8gMSA6IDA7Ci0KLSAgICAgIC8vIFNldCBmbGFncyBmb3IgcmVzdWx0aW5nIHN0YXRlLgotICAgICAgaWYgKGlzLnBlZWsoKSA9PSBFT0YpIHsKLSAgICAgICAgc3RhdGUgfD0gc3RkOjppb3NfYmFzZTo6ZW9mYml0OwotICAgICAgfQotICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIHN0YXRlIHw9IHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YWx1ZSA9IHJlc3VsdDsKLSAgICAgIH0KLSAgICB9IGNhdGNoICguLi4pIHsKLSAgICAgIHN0YXRlIHw9IHN0ZDo6aW9zX2Jhc2U6OmJhZGJpdDsKLSAgICB9Ci0gIH0KLQotICBpcy5zZXRzdGF0ZShzdGQ6Omlvc19iYXNlOjppb3N0YXRlKHN0YXRlKSk7Ci0gIHJldHVybiBpczsKLX0KLQotLy8gUHJpbnQgYW4gaW50ZWdlciB2YWx1ZSB0byBhbiBvdXRwdXQgc3RyZWFtLgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdGQ6Om9zdHJlYW0mIElPU3RyZWFtUHJpbnRUZW1wbGF0ZShzdGQ6Om9zdHJlYW0mIG9zLCBUIHZhbHVlLCBjaGFyIHR5cGUpCi17Ci0gIHN0ZDo6b3N0cmVhbTo6c2VudHJ5IG9rYXkob3MpOwotICBpZiAob2theSkgewotICAgIHRyeSB7Ci0gICAgICAvLyBDb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcuCi0gICAgICBjaGFyIGZvcm1hdFs4XTsKLSAgICAgIGNoYXIqIGYgPSBmb3JtYXQ7Ci0gICAgICAqZisrID0gJyUnOwotICAgICAgaWYgKG9zLmZsYWdzKCkgJiBzdGQ6Omlvc19iYXNlOjpzaG93cG9zKSB7Ci0gICAgICAgICpmKysgPSAnKyc7Ci0gICAgICB9Ci0gICAgICBpZiAob3MuZmxhZ3MoKSAmIHN0ZDo6aW9zX2Jhc2U6OnNob3diYXNlKSB7Ci0gICAgICAgICpmKysgPSAnIyc7Ci0gICAgICB9Ci0jICBpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAgKmYrKyA9ICdJJzsKLSAgICAgICpmKysgPSAnNic7Ci0gICAgICAqZisrID0gJzQnOwotIyAgZWxzZQotICAgICAgKmYrKyA9ICdsJzsKLSAgICAgICpmKysgPSAnbCc7Ci0jICBlbmRpZgotICAgICAgbG9uZyBiZmxhZ3MgPSBvcy5mbGFncygpICYgc3RkOjppb3NfYmFzZTo6YmFzZWZpZWxkOwotICAgICAgaWYgKGJmbGFncyA9PSBzdGQ6Omlvc19iYXNlOjpvY3QpIHsKLSAgICAgICAgKmYrKyA9ICdvJzsKLSAgICAgIH0gZWxzZSBpZiAoYmZsYWdzICE9IHN0ZDo6aW9zX2Jhc2U6OmhleCkgewotICAgICAgICAqZisrID0gdHlwZTsKLSAgICAgIH0gZWxzZSBpZiAob3MuZmxhZ3MoKSAmIHN0ZDo6aW9zX2Jhc2U6OnVwcGVyY2FzZSkgewotICAgICAgICAqZisrID0gJ1gnOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgKmYrKyA9ICd4JzsKLSAgICAgIH0KLSAgICAgICpmID0gJ1wwJzsKLQotICAgICAgLy8gVXNlIHNwcmludGYgdG8gcHJpbnQgdG8gYSBidWZmZXIgYW5kIHRoZW4gd3JpdGUgdGhlCi0gICAgICAvLyBidWZmZXIgdG8gdGhlIHN0cmVhbS4KLSAgICAgIGNoYXIgYnVmZmVyWzIgKiBLV1NZU19JT1NfSU5UNjRfTUFYX0RJR107Ci0gICAgICBzcHJpbnRmKGJ1ZmZlciwgZm9ybWF0LCB2YWx1ZSk7Ci0gICAgICBvcyA8PCBidWZmZXI7Ci0gICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICBvcy5jbGVhcihvcy5yZHN0YXRlKCkgfCBzdGQ6Omlvc19iYXNlOjpiYWRiaXQpOwotICAgIH0KLSAgfQotICByZXR1cm4gb3M7Ci19Ci0KLSMgIGlmICFLV1NZU19JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HCi0vLyBJbXBsZW1lbnQgaW5wdXQgc3RyZWFtIG9wZXJhdG9yIGZvciBJT1N0cmVhbVNMTC4KLXN0ZDo6aXN0cmVhbSYgSU9TdHJlYW1TY2FuKHN0ZDo6aXN0cmVhbSYgaXMsIElPU3RyZWFtU0xMJiB2YWx1ZSkKLXsKLSAgcmV0dXJuIElPU3RyZWFtU2NhblRlbXBsYXRlKGlzLCB2YWx1ZSwgJ2QnKTsKLX0KLQotLy8gSW1wbGVtZW50IGlucHV0IHN0cmVhbSBvcGVyYXRvciBmb3IgSU9TdHJlYW1VTEwuCi1zdGQ6OmlzdHJlYW0mIElPU3RyZWFtU2NhbihzdGQ6OmlzdHJlYW0mIGlzLCBJT1N0cmVhbVVMTCYgdmFsdWUpCi17Ci0gIHJldHVybiBJT1N0cmVhbVNjYW5UZW1wbGF0ZShpcywgdmFsdWUsICd1Jyk7Ci19Ci0jICBlbmRpZgotCi0jICBpZiAhS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORwotLy8gSW1wbGVtZW50IG91dHB1dCBzdHJlYW0gb3BlcmF0b3IgZm9yIElPU3RyZWFtU0xMLgotc3RkOjpvc3RyZWFtJiBJT1N0cmVhbVByaW50KHN0ZDo6b3N0cmVhbSYgb3MsIElPU3RyZWFtU0xMIHZhbHVlKQotewotICByZXR1cm4gSU9TdHJlYW1QcmludFRlbXBsYXRlKG9zLCB2YWx1ZSwgJ2QnKTsKLX0KLQotLy8gSW1wbGVtZW50IG91dHB1dCBzdHJlYW0gb3BlcmF0b3IgZm9yIElPU3RyZWFtVUxMLgotc3RkOjpvc3RyZWFtJiBJT1N0cmVhbVByaW50KHN0ZDo6b3N0cmVhbSYgb3MsIElPU3RyZWFtVUxMIHZhbHVlKQotewotICByZXR1cm4gSU9TdHJlYW1QcmludFRlbXBsYXRlKG9zLCB2YWx1ZSwgJ3UnKTsKLX0KLSMgIGVuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRQotCi0jZWxzZQotCi1uYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFIHsKLQotLy8gQ3JlYXRlIG9uZSBwdWJsaWMgc3ltYm9sIGluIHRoaXMgb2JqZWN0IGZpbGUgdG8gYXZvaWQgd2FybmluZ3MgZnJvbQotLy8gYXJjaGl2ZXJzLgotdm9pZCBJT1N0cmVhbVN5bWJvbFRvQXZvaWRXYXJuaW5nKCk7Ci12b2lkIElPU3RyZWFtU3ltYm9sVG9Bdm9pZFdhcm5pbmcoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UKLQotI2VuZGlmIC8vIEtXU1lTX0lPU19ORUVEX09QRVJBVE9SU19MTApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0lPU3RyZWFtLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9JT1N0cmVhbS5oeHguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOGEyM2UuLjAwMDAwMDAKLS0tIGEvU291cmNlL2t3c3lzL0lPU3RyZWFtLmh4eC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyNrd3N5cyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIEBLV1NZU19OQU1FU1BBQ0VAX0lPU3RyZWFtX2h4eAotI2RlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9JT1N0cmVhbV9oeHgKLQotI2luY2x1ZGUgPGlvc2Z3ZD4KLQotLyogRGVmaW5lIHRoZXNlIG1hY3JvcyB0ZW1wb3JhcmlseSB0byBrZWVwIHRoZSBjb2RlIHJlYWRhYmxlLiAgKi8KLSNpZiAhZGVmaW5lZChLV1NZU19OQU1FU1BBQ0UpICYmICFAS1dTWVNfTkFNRVNQQUNFQF9OQU1FX0lTX0tXU1lTCi0jICBkZWZpbmUga3dzeXNFWFBPUlQgQEtXU1lTX05BTUVTUEFDRUBfRVhQT1JUCi0jZW5kaWYKLQotLyogV2hldGhlciBpc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZy4gICovCi0jZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19IQVNfSVNUUkVBTV9MT05HX0xPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEBLV1NZU19JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HQAotCi0vKiBXaGV0aGVyIG9zdHJlYW0gc3VwcG9ydHMgbG9uZyBsb25nLiAgKi8KLSNkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQEtXU1lTX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkdACi0KLS8qIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gZGVmaW5lIHRoZSBzdHJlYW1pbmcgb3BlcmF0b3JzIGZvcgotICAgbG9uZyBsb25nIG9yIF9faW50NjQuICAqLwotI2lmIEBLV1NZU19VU0VfTE9OR19MT05HQAotIyAgaWYgIUBLV1NZU19OQU1FU1BBQ0VAX0lPU19IQVNfSVNUUkVBTV9MT05HX0xPTkcgfHwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICFAS1dTWVNfTkFNRVNQQUNFQF9JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HCi0jICAgIGRlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9JT1NfTkVFRF9PUEVSQVRPUlNfTEwgMQotbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VAIHsKLXR5cGVkZWYgbG9uZyBsb25nIElPU3RyZWFtU0xMOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgSU9TdHJlYW1VTEw7Ci19Ci0jICBlbmRpZgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxMzAwCi0jICBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TX05FRURfT1BFUkFUT1JTX0xMIDEKLW5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQCB7Ci10eXBlZGVmIF9faW50NjQgSU9TdHJlYW1TTEw7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgSU9TdHJlYW1VTEw7Ci19Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChAS1dTWVNfTkFNRVNQQUNFQF9JT1NfTkVFRF9PUEVSQVRPUlNfTEwpCi0jICBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TX05FRURfT1BFUkFUT1JTX0xMIDAKLSNlbmRpZgotCi0jaWYgQEtXU1lTX05BTUVTUEFDRUBfSU9TX05FRURfT1BFUkFUT1JTX0xMCi0jICBpZiAhQEtXU1lTX05BTUVTUEFDRUBfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORwotCi0vKiBJbnB1dCBzdHJlYW0gb3BlcmF0b3IgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zLiAgKi8KLW5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQCB7Ci1rd3N5c0VYUE9SVCBzdGQ6OmlzdHJlYW0mIElPU3RyZWFtU2NhbihzdGQ6OmlzdHJlYW0mLCBJT1N0cmVhbVNMTCYpOwota3dzeXNFWFBPUlQgc3RkOjppc3RyZWFtJiBJT1N0cmVhbVNjYW4oc3RkOjppc3RyZWFtJiwgSU9TdHJlYW1VTEwmKTsKLX0KLQotLyogUHJvdmlkZSBpbnB1dCBzdHJlYW0gb3BlcmF0b3IgZm9yIGxvbmcgbG9uZy4gICovCi0jICAgIGlmICFkZWZpbmVkKEBLV1NZU19OQU1FU1BBQ0VAX0lPU19OT19JU1RSRUFNX0xPTkdfTE9ORykgJiYgICAgICAgICAgICAgICBcCi0gICAgICAhZGVmaW5lZChLV1NZU19JT1NfSVNUUkVBTV9MT05HX0xPTkdfREVGSU5FRCkKLSMgICAgICBkZWZpbmUgS1dTWVNfSU9TX0lTVFJFQU1fTE9OR19MT05HX0RFRklORUQKLSMgICAgICBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TX0lTVFJFQU1fTE9OR19MT05HX0RFRklORUQKLWlubGluZSBzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtJiBpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEtXU1lTX05BTUVTUEFDRUA6OklPU3RyZWFtU0xMJiB2YWx1ZSkKLXsKLSAgcmV0dXJuIEBLV1NZU19OQU1FU1BBQ0VAOjpJT1N0cmVhbVNjYW4oaXMsIHZhbHVlKTsKLX0KLSMgICAgZW5kaWYKLQotLyogUHJvdmlkZSBpbnB1dCBzdHJlYW0gb3BlcmF0b3IgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZy4gICovCi0jICAgIGlmICFkZWZpbmVkKEBLV1NZU19OQU1FU1BBQ0VAX0lPU19OT19JU1RSRUFNX1VOU0lHTkVEX0xPTkdfTE9ORykgJiYgICAgICBcCi0gICAgICAhZGVmaW5lZChLV1NZU19JT1NfSVNUUkVBTV9VTlNJR05FRF9MT05HX0xPTkdfREVGSU5FRCkKLSMgICAgICBkZWZpbmUgS1dTWVNfSU9TX0lTVFJFQU1fVU5TSUdORURfTE9OR19MT05HX0RFRklORUQKLSMgICAgICBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TX0lTVFJFQU1fVU5TSUdORURfTE9OR19MT05HX0RFRklORUQKLWlubGluZSBzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtJiBpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEtXU1lTX05BTUVTUEFDRUA6OklPU3RyZWFtVUxMJiB2YWx1ZSkKLXsKLSAgcmV0dXJuIEBLV1NZU19OQU1FU1BBQ0VAOjpJT1N0cmVhbVNjYW4oaXMsIHZhbHVlKTsKLX0KLSMgICAgZW5kaWYKLSMgIGVuZGlmIC8qICFAS1dTWVNfTkFNRVNQQUNFQF9JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HICovCi0KLSMgIGlmICFAS1dTWVNfTkFNRVNQQUNFQF9JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HCi0KLS8qIE91dHB1dCBzdHJlYW0gb3BlcmF0b3IgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zLiAgKi8KLW5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQCB7Ci1rd3N5c0VYUE9SVCBzdGQ6Om9zdHJlYW0mIElPU3RyZWFtUHJpbnQoc3RkOjpvc3RyZWFtJiwgSU9TdHJlYW1TTEwpOwota3dzeXNFWFBPUlQgc3RkOjpvc3RyZWFtJiBJT1N0cmVhbVByaW50KHN0ZDo6b3N0cmVhbSYsIElPU3RyZWFtVUxMKTsKLX0KLQotLyogUHJvdmlkZSBvdXRwdXQgc3RyZWFtIG9wZXJhdG9yIGZvciBsb25nIGxvbmcuICAqLwotIyAgICBpZiAhZGVmaW5lZChAS1dTWVNfTkFNRVNQQUNFQF9JT1NfTk9fT1NUUkVBTV9MT05HX0xPTkcpICYmICAgICAgICAgICAgICAgXAotICAgICAgIWRlZmluZWQoS1dTWVNfSU9TX09TVFJFQU1fTE9OR19MT05HX0RFRklORUQpCi0jICAgICAgZGVmaW5lIEtXU1lTX0lPU19PU1RSRUFNX0xPTkdfTE9OR19ERUZJTkVECi0jICAgICAgZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19PU1RSRUFNX0xPTkdfTE9OR19ERUZJTkVECi1pbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBLV1NZU19OQU1FU1BBQ0VAOjpJT1N0cmVhbVNMTCB2YWx1ZSkKLXsKLSAgcmV0dXJuIEBLV1NZU19OQU1FU1BBQ0VAOjpJT1N0cmVhbVByaW50KG9zLCB2YWx1ZSk7Ci19Ci0jICAgIGVuZGlmCi0KLS8qIFByb3ZpZGUgb3V0cHV0IHN0cmVhbSBvcGVyYXRvciBmb3IgdW5zaWduZWQgbG9uZyBsb25nLiAgKi8KLSMgICAgaWYgIWRlZmluZWQoQEtXU1lTX05BTUVTUEFDRUBfSU9TX05PX09TVFJFQU1fVU5TSUdORURfTE9OR19MT05HKSAmJiAgICAgIFwKLSAgICAgICFkZWZpbmVkKEtXU1lTX0lPU19PU1RSRUFNX1VOU0lHTkVEX0xPTkdfTE9OR19ERUZJTkVEKQotIyAgICAgIGRlZmluZSBLV1NZU19JT1NfT1NUUkVBTV9VTlNJR05FRF9MT05HX0xPTkdfREVGSU5FRAotIyAgICAgIGRlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9JT1NfT1NUUkVBTV9VTlNJR05FRF9MT05HX0xPTkdfREVGSU5FRAotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAS1dTWVNfTkFNRVNQQUNFQDo6SU9TdHJlYW1VTEwgdmFsdWUpCi17Ci0gIHJldHVybiBAS1dTWVNfTkFNRVNQQUNFQDo6SU9TdHJlYW1QcmludChvcywgdmFsdWUpOwotfQotIyAgICBlbmRpZgotIyAgZW5kaWYgLyogIUBLV1NZU19OQU1FU1BBQ0VAX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcgKi8KLSNlbmRpZiAgIC8qIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19ORUVEX09QRVJBVE9SU19MTCAqLwotCi0vKiBVbmRlZmluZSB0ZW1wb3JhcnkgbWFjcm9zLiAgKi8KLSNpZiAhZGVmaW5lZChLV1NZU19OQU1FU1BBQ0UpICYmICFAS1dTWVNfTkFNRVNQQUNFQF9OQU1FX0lTX0tXU1lTCi0jICB1bmRlZiBrd3N5c0VYUE9SVAotI2VuZGlmCi0KLS8qIElmIGJ1aWxkaW5nIGEgQysrIGZpbGUgaW4ga3dzeXMgaXRzZWxmLCBnaXZlIHRoZSBzb3VyY2UgZmlsZQotICAgYWNjZXNzIHRvIHRoZSBtYWNyb3Mgd2l0aG91dCBhIGNvbmZpZ3VyZWQgbmFtZXNwYWNlLiAgKi8KLSNpZiBkZWZpbmVkKEtXU1lTX05BTUVTUEFDRSkKLSMgIGRlZmluZSBLV1NZU19JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBAS1dTWVNfTkFNRVNQQUNFQF9JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HCi0jICBkZWZpbmUgS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQEtXU1lTX05BTUVTUEFDRUBfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORwotIyAgZGVmaW5lIEtXU1lTX0lPU19ORUVEX09QRVJBVE9SU19MTCBAS1dTWVNfTkFNRVNQQUNFQF9JT1NfTkVFRF9PUEVSQVRPUlNfTEwKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9NRDUuYyBiL1NvdXJjZS9rd3N5cy9NRDUuYwppbmRleCA5N2NmOWJhLi5mYjE4YTViIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvTUQ1LmMKKysrIGIvU291cmNlL2t3c3lzL01ENS5jCkBAIC0xNzEsOCArMTcxLDEwIEBACiAKIHN0YXRpYyB2b2lkIG1kNV9wcm9jZXNzKG1kNV9zdGF0ZV90KiBwbXMsIGNvbnN0IG1kNV9ieXRlX3QqIGRhdGEgLypbNjRdKi8pCiB7Ci0gIG1kNV93b3JkX3QgYSA9IHBtcy0+YWJjZFswXSwgYiA9IHBtcy0+YWJjZFsxXSwgYyA9IHBtcy0+YWJjZFsyXSwKLSAgICAgICAgICAgICBkID0gcG1zLT5hYmNkWzNdOworICBtZDVfd29yZF90IGEgPSBwbXMtPmFiY2RbMF07CisgIG1kNV93b3JkX3QgYiA9IHBtcy0+YWJjZFsxXTsKKyAgbWQ1X3dvcmRfdCBjID0gcG1zLT5hYmNkWzJdOworICBtZDVfd29yZF90IGQgPSBwbXMtPmFiY2RbM107CiAgIG1kNV93b3JkX3QgdDsKICNpZiBCWVRFX09SREVSID4gMAogICAvKiBEZWZpbmUgc3RvcmFnZSBvbmx5IGZvciBiaWctZW5kaWFuIENQVXMuICovCkBAIC0yMjcsOSArMjI5LDEwIEBACiAjICBlbHNlCiAjICAgIGRlZmluZSB4YnVmIFggLyogKHN0YXRpYyBvbmx5KSAqLwogIyAgZW5kaWYKLSAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpLCB4cCArPSA0KQorICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyArK2ksIHhwICs9IDQpIHsKICAgICAgICAgeGJ1ZltpXSA9CiAgICAgICAgICAgKG1kNV93b3JkX3QpKHhwWzBdICsgKHhwWzFdIDw8IDgpICsgKHhwWzJdIDw8IDE2KSArICh4cFszXSA8PCAyNCkpOworICAgICAgfQogICAgIH0KICNlbmRpZgogICB9CkBAIC0zNjcsMzQgKzM3MCwzOSBAQAogICBzaXplX3Qgb2Zmc2V0ID0gKHBtcy0+Y291bnRbMF0gPj4gMykgJiA2MzsKICAgbWQ1X3dvcmRfdCBuYml0cyA9IChtZDVfd29yZF90KShuYnl0ZXMgPDwgMyk7CiAKLSAgaWYgKG5ieXRlcyA8PSAwKQorICBpZiAobmJ5dGVzIDw9IDApIHsKICAgICByZXR1cm47CisgIH0KIAogICAvKiBVcGRhdGUgdGhlIG1lc3NhZ2UgbGVuZ3RoLiAqLwogICBwbXMtPmNvdW50WzFdICs9IChtZDVfd29yZF90KShuYnl0ZXMgPj4gMjkpOwogICBwbXMtPmNvdW50WzBdICs9IG5iaXRzOwotICBpZiAocG1zLT5jb3VudFswXSA8IG5iaXRzKQorICBpZiAocG1zLT5jb3VudFswXSA8IG5iaXRzKSB7CiAgICAgcG1zLT5jb3VudFsxXSsrOworICB9CiAKICAgLyogUHJvY2VzcyBhbiBpbml0aWFsIHBhcnRpYWwgYmxvY2suICovCiAgIGlmIChvZmZzZXQpIHsKICAgICBzaXplX3QgY29weSA9IChvZmZzZXQgKyBuYnl0ZXMgPiA2NCA/IDY0IC0gb2Zmc2V0IDogbmJ5dGVzKTsKIAogICAgIG1lbWNweShwbXMtPmJ1ZiArIG9mZnNldCwgcCwgY29weSk7Ci0gICAgaWYgKG9mZnNldCArIGNvcHkgPCA2NCkKKyAgICBpZiAob2Zmc2V0ICsgY29weSA8IDY0KSB7CiAgICAgICByZXR1cm47CisgICAgfQogICAgIHAgKz0gY29weTsKICAgICBsZWZ0IC09IGNvcHk7CiAgICAgbWQ1X3Byb2Nlc3MocG1zLCBwbXMtPmJ1Zik7CiAgIH0KIAogICAvKiBQcm9jZXNzIGZ1bGwgYmxvY2tzLiAqLwotICBmb3IgKDsgbGVmdCA+PSA2NDsgcCArPSA2NCwgbGVmdCAtPSA2NCkKKyAgZm9yICg7IGxlZnQgPj0gNjQ7IHAgKz0gNjQsIGxlZnQgLT0gNjQpIHsKICAgICBtZDVfcHJvY2VzcyhwbXMsIHApOworICB9CiAKICAgLyogUHJvY2VzcyBhIGZpbmFsIHBhcnRpYWwgYmxvY2suICovCi0gIGlmIChsZWZ0KQorICBpZiAobGVmdCkgewogICAgIG1lbWNweShwbXMtPmJ1ZiwgcCwgbGVmdCk7CisgIH0KIH0KIAogLyogRmluaXNoIHRoZSBtZXNzYWdlIGFuZCByZXR1cm4gdGhlIGRpZ2VzdC4gKi8KQEAgLTQwOSwxNCArNDE3LDE2IEBACiAgIGludCBpOwogCiAgIC8qIFNhdmUgdGhlIGxlbmd0aCBiZWZvcmUgcGFkZGluZy4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKyAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkgewogICAgIGRhdGFbaV0gPSAobWQ1X2J5dGVfdCkocG1zLT5jb3VudFtpID4+IDJdID4+ICgoaSAmIDMpIDw8IDMpKTsKKyAgfQogICAvKiBQYWQgdG8gNTYgYnl0ZXMgbW9kIDY0LiAqLwogICBtZDVfYXBwZW5kKHBtcywgcGFkLCAoKDU1IC0gKHBtcy0+Y291bnRbMF0gPj4gMykpICYgNjMpICsgMSk7CiAgIC8qIEFwcGVuZCB0aGUgbGVuZ3RoLiAqLwogICBtZDVfYXBwZW5kKHBtcywgZGF0YSwgOCk7Ci0gIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQorICBmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewogICAgIGRpZ2VzdFtpXSA9IChtZDVfYnl0ZV90KShwbXMtPmFiY2RbaSA+PiAyXSA+PiAoKGkgJiAzKSA8PCAzKSk7CisgIH0KIH0KIAogI2lmIGRlZmluZWQoX19jbGFuZ19fKSAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1Byb2Nlc3MuaC5pbiBiL1NvdXJjZS9rd3N5cy9Qcm9jZXNzLmguaW4KaW5kZXggNzNlYTlkYi4uOWYyMTYyYiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1Byb2Nlc3MuaC5pbgorKysgYi9Tb3VyY2Uva3dzeXMvUHJvY2Vzcy5oLmluCkBAIC0xODAsOCArMTgwLDggQEAKICAqIHdyaXRlIGVuZCBvZiB0aGUgcGlwZSB3aWxsIGJlIGNsb3NlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MgYW5kIHRoZQogICogcmVhZCBlbmQgd2lsbCBiZSBjbG9zZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCiAgKi8KLWt3c3lzRVhQT1JUIHZvaWQga3dzeXNQcm9jZXNzX1NldFBpcGVOYXRpdmUoa3dzeXNQcm9jZXNzKiBjcCwgaW50IHBpcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3c3lzUHJvY2Vzc19QaXBlX0hhbmRsZSBwWzJdKTsKK2t3c3lzRVhQT1JUIHZvaWQga3dzeXNQcm9jZXNzX1NldFBpcGVOYXRpdmUoCisgIGt3c3lzUHJvY2VzcyogY3AsIGludCBwaXBlLCBjb25zdCBrd3N5c1Byb2Nlc3NfUGlwZV9IYW5kbGUgcFsyXSk7CiAKIC8qKgogICogR2V0L1NldCBhIHBvc3NpYmx5IHBsYXRmb3JtLXNwZWNpZmljIG9wdGlvbi4gIFBvc3NpYmxlIG9wdGlvbnMgYXJlOgpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1Byb2Nlc3NVTklYLmMgYi9Tb3VyY2Uva3dzeXMvUHJvY2Vzc1VOSVguYwppbmRleCBmNjU2OTBiLi5jYzQ1NTI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvUHJvY2Vzc1VOSVguYworKysgYi9Tb3VyY2Uva3dzeXMvUHJvY2Vzc1VOSVguYwpAQCAtMTUyLDEwICsxNTIsMTEgQEAKIHN0YXRpYyB2b2lkIGt3c3lzUHJvY2Vzc0Rlc3Ryb3koa3dzeXNQcm9jZXNzKiBjcCk7CiBzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc1NldHVwT3V0cHV0UGlwZUZpbGUoaW50KiBwLCBjb25zdCBjaGFyKiBuYW1lKTsKIHN0YXRpYyBpbnQga3dzeXNQcm9jZXNzU2V0dXBPdXRwdXRQaXBlTmF0aXZlKGludCogcCwgaW50IGRlc1syXSk7Ci1zdGF0aWMgaW50IGt3c3lzUHJvY2Vzc0dldFRpbWVvdXRUaW1lKGt3c3lzUHJvY2VzcyogY3AsIGRvdWJsZSogdXNlclRpbWVvdXQsCitzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc0dldFRpbWVvdXRUaW1lKGt3c3lzUHJvY2VzcyogY3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSogdXNlclRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3c3lzUHJvY2Vzc1RpbWUqIHRpbWVvdXRUaW1lKTsKIHN0YXRpYyBpbnQga3dzeXNQcm9jZXNzR2V0VGltZW91dExlZnQoa3dzeXNQcm9jZXNzVGltZSogdGltZW91dFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSogdXNlclRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSogdXNlclRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3c3lzUHJvY2Vzc1RpbWVOYXRpdmUqIHRpbWVvdXRMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB6ZXJvSXNFeHBpcmVkKTsKIHN0YXRpYyBrd3N5c1Byb2Nlc3NUaW1lIGt3c3lzUHJvY2Vzc1RpbWVHZXRDdXJyZW50KHZvaWQpOwpAQCAtNDMxLDggKzQzMiw4IEBACiAgICAgY2hhciBjb25zdCogY29uc3QqIGMgPSBjb21tYW5kOwogICAgIGt3c3lzUHJvY2Vzc19wdHJkaWZmX3QgbiA9IDA7CiAgICAga3dzeXNQcm9jZXNzX3B0cmRpZmZfdCBpID0gMDsKLSAgICB3aGlsZSAoKmMrKykKLSAgICAgIDsKKyAgICB3aGlsZSAoKmMrKykgeworICAgIH0KICAgICBuID0gYyAtIGNvbW1hbmQgLSAxOwogICAgIG5ld0NvbW1hbmRzW2NwLT5OdW1iZXJPZkNvbW1hbmRzXSA9CiAgICAgICAoY2hhcioqKW1hbGxvYygoc2l6ZV90KShuICsgMSkgKiBzaXplb2YoY2hhciopKTsKQEAgLTU3MSw3ICs1NzIsNyBAQAogICB9CiB9CiAKLXZvaWQga3dzeXNQcm9jZXNzX1NldFBpcGVOYXRpdmUoa3dzeXNQcm9jZXNzKiBjcCwgaW50IHByUGlwZSwgaW50IHBbMl0pCit2b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwclBpcGUsIGNvbnN0IGludCBwWzJdKQogewogICBpbnQqIHBQaXBlTmF0aXZlID0gMDsKIApAQCAtNjg0LDcgKzY4NSw4IEBACiB7CiAgIGlmICghY3ApIHsKICAgICByZXR1cm4gIlByb2Nlc3MgbWFuYWdlbWVudCBzdHJ1Y3R1cmUgY291bGQgbm90IGJlIGFsbG9jYXRlZCI7Ci0gIH0gZWxzZSBpZiAoY3AtPlN0YXRlID09IGt3c3lzUHJvY2Vzc19TdGF0ZV9FcnJvcikgeworICB9CisgIGlmIChjcC0+U3RhdGUgPT0ga3dzeXNQcm9jZXNzX1N0YXRlX0Vycm9yKSB7CiAgICAgcmV0dXJuIGNwLT5FcnJvck1lc3NhZ2U7CiAgIH0KICAgcmV0dXJuICJTdWNjZXNzIjsKQEAgLTY5NCw3ICs2OTYsOCBAQAogewogICBpZiAoIShjcCAmJiBjcC0+UHJvY2Vzc1Jlc3VsdHMgJiYgKGNwLT5OdW1iZXJPZkNvbW1hbmRzID4gMCkpKSB7CiAgICAgcmV0dXJuICJHZXRFeGNlcHRpb25TdHJpbmcgY2FsbGVkIHdpdGggTlVMTCBwcm9jZXNzIG1hbmFnZW1lbnQgc3RydWN0dXJlIjsKLSAgfSBlbHNlIGlmIChjcC0+U3RhdGUgPT0ga3dzeXNQcm9jZXNzX1N0YXRlX0V4Y2VwdGlvbikgeworICB9CisgIGlmIChjcC0+U3RhdGUgPT0ga3dzeXNQcm9jZXNzX1N0YXRlX0V4Y2VwdGlvbikgewogICAgIHJldHVybiBjcC0+UHJvY2Vzc1Jlc3VsdHNbY3AtPk51bWJlck9mQ29tbWFuZHMgLSAxXS5FeGl0RXhjZXB0aW9uU3RyaW5nOwogICB9CiAgIHJldHVybiAiTm8gZXhjZXB0aW9uIjsKQEAgLTc4Niw4ICs3ODksOCBAQAogCiAgICAgLyogU29tZSBwbGF0Zm9ybXMgc3BlY2lmeSB0aGF0IHRoZSBjaGRpciBjYWxsIG1heSBiZQogICAgICAgIGludGVycnVwdGVkLiAgUmVwZWF0IHRoZSBjYWxsIHVudGlsIGl0IGZpbmlzaGVzLiAgKi8KLSAgICB3aGlsZSAoKChyID0gY2hkaXIoY3AtPldvcmtpbmdEaXJlY3RvcnkpKSA8IDApICYmIChlcnJubyA9PSBFSU5UUikpCi0gICAgICA7CisgICAgd2hpbGUgKCgociA9IGNoZGlyKGNwLT5Xb3JraW5nRGlyZWN0b3J5KSkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgfQogICAgIGlmIChyIDwgMCkgewogICAgICAga3dzeXNQcm9jZXNzQ2xlYW51cChjcCwgMSk7CiAgICAgICByZXR1cm47CkBAIC0xMDEzLDggKzEwMTYsOCBAQAogICBpZiAoY3AtPlJlYWxXb3JraW5nRGlyZWN0b3J5KSB7CiAgICAgLyogU29tZSBwbGF0Zm9ybXMgc3BlY2lmeSB0aGF0IHRoZSBjaGRpciBjYWxsIG1heSBiZQogICAgICAgIGludGVycnVwdGVkLiAgUmVwZWF0IHRoZSBjYWxsIHVudGlsIGl0IGZpbmlzaGVzLiAgKi8KLSAgICB3aGlsZSAoKGNoZGlyKGNwLT5SZWFsV29ya2luZ0RpcmVjdG9yeSkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgOworICAgIHdoaWxlICgoY2hkaXIoY3AtPlJlYWxXb3JraW5nRGlyZWN0b3J5KSA8IDApICYmIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICB9CiAgICAgZnJlZShjcC0+UmVhbFdvcmtpbmdEaXJlY3RvcnkpOwogICAgIGNwLT5SZWFsV29ya2luZ0RpcmVjdG9yeSA9IDA7CiAgIH0KQEAgLTEwOTksMjIgKzExMDIsMjIgQEAKICAgaWYgKHdkLlBpcGVJZCkgewogICAgIC8qIERhdGEgYXJlIHJlYWR5IG9uIGEgcGlwZS4gICovCiAgICAgcmV0dXJuIHdkLlBpcGVJZDsKLSAgfSBlbHNlIGlmICh3ZC5FeHBpcmVkKSB7CisgIH0KKyAgaWYgKHdkLkV4cGlyZWQpIHsKICAgICAvKiBBIHRpbWVvdXQgaGFzIGV4cGlyZWQuICAqLwogICAgIGlmICh3ZC5Vc2VyKSB7CiAgICAgICAvKiBUaGUgdXNlciB0aW1lb3V0IGhhcyBleHBpcmVkLiAgSXQgaGFzIG5vIHRpbWUgbGVmdC4gICovCiAgICAgICByZXR1cm4ga3dzeXNQcm9jZXNzX1BpcGVfVGltZW91dDsKLSAgICB9IGVsc2UgewotICAgICAgLyogVGhlIHByb2Nlc3MgdGltZW91dCBoYXMgZXhwaXJlZC4gIEtpbGwgdGhlIGNoaWxkcmVuIG5vdy4gICovCi0gICAgICBrd3N5c1Byb2Nlc3NfS2lsbChjcCk7Ci0gICAgICBjcC0+S2lsbGVkID0gMDsKLSAgICAgIGNwLT5UaW1lb3V0RXhwaXJlZCA9IDE7Ci0gICAgICByZXR1cm4ga3dzeXNQcm9jZXNzX1BpcGVfTm9uZTsKICAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogTm8gcGlwZXMgYXJlIGxlZnQgb3Blbi4gICovCisKKyAgICAvKiBUaGUgcHJvY2VzcyB0aW1lb3V0IGhhcyBleHBpcmVkLiAgS2lsbCB0aGUgY2hpbGRyZW4gbm93LiAgKi8KKyAgICBrd3N5c1Byb2Nlc3NfS2lsbChjcCk7CisgICAgY3AtPktpbGxlZCA9IDA7CisgICAgY3AtPlRpbWVvdXRFeHBpcmVkID0gMTsKICAgICByZXR1cm4ga3dzeXNQcm9jZXNzX1BpcGVfTm9uZTsKICAgfQorICAvKiBObyBwaXBlcyBhcmUgbGVmdCBvcGVuLiAgKi8KKyAgcmV0dXJuIGt3c3lzUHJvY2Vzc19QaXBlX05vbmU7CiB9CiAKIHN0YXRpYyBpbnQga3dzeXNQcm9jZXNzV2FpdEZvclBpcGUoa3dzeXNQcm9jZXNzKiBjcCwgY2hhcioqIGRhdGEsIGludCogbGVuZ3RoLApAQCAtMTE0NCw4ICsxMTQ3LDggQEAKICAgICAgICAgIHJlYWQgdW50aWwgdGhlIG9wZXJhdGlvbiBpcyBub3QgaW50ZXJydXB0ZWQuICAqLwogICAgICAgd2hpbGUgKCgobiA9IHJlYWQoY3AtPlBpcGVSZWFkRW5kc1tpXSwgY3AtPlBpcGVCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBLV1NZU1BFX1BJUEVfQlVGRkVSX1NJWkUpKSA8IDApICYmCi0gICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkKLSAgICAgICAgOworICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgIH0KICAgICAgIGlmIChuID4gMCkgewogICAgICAgICAvKiBXZSBoYXZlIGRhdGEgb24gdGhpcyBwaXBlLiAgKi8KICAgICAgICAgaWYgKGkgPT0gS1dTWVNQRV9QSVBFX1NJR05BTCkgewpAQCAtMTE4Myw3ICsxMTg2LDcgQEAKIAogICAvKiBNYWtlIHN1cmUgdGhlIHNldCBpcyBlbXB0eSAoaXQgc2hvdWxkIGFsd2F5cyBiZSBlbXB0eSBoZXJlCiAgICAgIGFueXdheSkuICAqLwotICBGRF9aRVJPKCZjcC0+UGlwZVNldCk7CisgIEZEX1pFUk8oJmNwLT5QaXBlU2V0KTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5LWlzb2xhdGUtZGVjbGFyYXRpb24pCiAKICAgLyogU2V0dXAgYSB0aW1lb3V0IGlmIHJlcXVpcmVkLiAgKi8KICAgaWYgKHdkLT5UaW1lb3V0VGltZS50dl9zZWMgPCAwKSB7CkBAIC0xMjE4LDE1ICsxMjIxLDE2IEBACiAgIC8qIFJ1biBzZWxlY3QgdG8gYmxvY2sgdW50aWwgZGF0YSBhcmUgYXZhaWxhYmxlLiAgUmVwZWF0IGNhbGwKICAgICAgdW50aWwgaXQgaXMgbm90IGludGVycnVwdGVkLiAgKi8KICAgd2hpbGUgKCgobnVtUmVhZHkgPSBzZWxlY3QobWF4ICsgMSwgJmNwLT5QaXBlU2V0LCAwLCAwLCB0aW1lb3V0KSkgPCAwKSAmJgotICAgICAgICAgKGVycm5vID09IEVJTlRSKSkKLSAgICA7CisgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgIH0KIAogICAvKiBDaGVjayByZXN1bHQgb2Ygc2VsZWN0LiAgKi8KICAgaWYgKG51bVJlYWR5ID09IDApIHsKICAgICAvKiBTZWxlY3QncyB0aW1lb3V0IGV4cGlyZWQuICAqLwogICAgIHdkLT5FeHBpcmVkID0gMTsKICAgICByZXR1cm4gMTsKLSAgfSBlbHNlIGlmIChudW1SZWFkeSA8IDApIHsKKyAgfQorICBpZiAobnVtUmVhZHkgPCAwKSB7CiAgICAgLyogU2VsZWN0IHJldHVybmVkIGFuIGVycm9yLiAgTGVhdmUgdGhlIGVycm9yIGRlc2NyaXB0aW9uIGluIHRoZQogICAgICAgIHBpcGUgYnVmZmVyLiAgKi8KICAgICBzdHJuY3B5KGNwLT5FcnJvck1lc3NhZ2UsIHN0cmVycm9yKGVycm5vKSwgS1dTWVNQRV9QSVBFX0JVRkZFUl9TSVpFKTsKQEAgLTEzNjYsMTEgKzEzNzAsMTMgQEAKICAgICAgICAgY3AtPlByb2Nlc3NSZXN1bHRzW3ByUGlwZV0uU3RhdGUgPSBrd3N5c1Byb2Nlc3NfU3RhdGVCeUluZGV4X0V4aXRlZDsKICAgICAgICAgY3AtPlByb2Nlc3NSZXN1bHRzW3ByUGlwZV0uRXhpdEV4Y2VwdGlvbiA9IGt3c3lzUHJvY2Vzc19FeGNlcHRpb25fTm9uZTsKICAgICAgICAgY3AtPlByb2Nlc3NSZXN1bHRzW3ByUGlwZV0uRXhpdFZhbHVlID0KKyAgICAgICAgICAvLyBOT0xJTlRORVhUTElORShnb29nbGUtcmVhZGFiaWxpdHktY2FzdGluZykKICAgICAgICAgICAoaW50KVdFWElUU1RBVFVTKGNwLT5Qcm9jZXNzUmVzdWx0c1twclBpcGVdLkV4aXRDb2RlKTsKICAgICAgIH0gZWxzZSBpZiAoV0lGU0lHTkFMRUQoY3AtPlByb2Nlc3NSZXN1bHRzW3ByUGlwZV0uRXhpdENvZGUpKSB7CiAgICAgICAgIC8qIFRoZSBjaGlsZCByZWNlaXZlZCBhbiB1bmhhbmRsZWQgc2lnbmFsLiAgKi8KICAgICAgICAgY3AtPlByb2Nlc3NSZXN1bHRzW3ByUGlwZV0uU3RhdGUgPSBrd3N5c1Byb2Nlc3NfU3RhdGVfRXhjZXB0aW9uOwogICAgICAgICBrd3N5c1Byb2Nlc3NTZXRFeGl0RXhjZXB0aW9uQnlJbmRleCgKKyAgICAgICAgICAvLyBOT0xJTlRORVhUTElORShnb29nbGUtcmVhZGFiaWxpdHktY2FzdGluZykKICAgICAgICAgICBjcCwgKGludClXVEVSTVNJRyhjcC0+UHJvY2Vzc1Jlc3VsdHNbcHJQaXBlXS5FeGl0Q29kZSksIHByUGlwZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICAvKiBFcnJvciBnZXR0aW5nIHRoZSBjaGlsZCByZXR1cm4gY29kZS4gICovCkBAIC0xNDQ5LDggKzE0NTUsOCBAQAogCiAgICAgICAvKiBSZWFwIHRoZSBjaGlsZC4gIEtlZXAgdHJ5aW5nIHVudGlsIHRoZSBjYWxsIGlzIG5vdAogICAgICAgICAgaW50ZXJydXB0ZWQuICAqLwotICAgICAgd2hpbGUgKCh3YWl0cGlkKGNwLT5Gb3JrUElEc1tpXSwgJnN0YXR1cywgMCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7CisgICAgICB3aGlsZSAoKHdhaXRwaWQoY3AtPkZvcmtQSURzW2ldLCAmc3RhdHVzLCAwKSA8IDApICYmIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtMTUwMSw3ICsxNTA3LDcgQEAKICAgY3AtPlBpcGVzTGVmdCA9IDA7CiAgIGNwLT5Db21tYW5kc0xlZnQgPSAwOwogI2lmIEtXU1lTUEVfVVNFX1NFTEVDVAotICBGRF9aRVJPKCZjcC0+UGlwZVNldCk7CisgIEZEX1pFUk8oJmNwLT5QaXBlU2V0KTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5LWlzb2xhdGUtZGVjbGFyYXRpb24pCiAjZW5kaWYKICAgY3AtPlN0YXRlID0ga3dzeXNQcm9jZXNzX1N0YXRlX1N0YXJ0aW5nOwogICBjcC0+S2lsbGVkID0gMDsKQEAgLTE1OTAsMTYgKzE1OTYsMTYgQEAKICAgICAgICAgICAvKiBSZWFwIHRoZSBjaGlsZC4gIEtlZXAgdHJ5aW5nIHVudGlsIHRoZSBjYWxsIGlzIG5vdAogICAgICAgICAgICAgIGludGVycnVwdGVkLiAgKi8KICAgICAgICAgICB3aGlsZSAoKHdhaXRwaWQoY3AtPkZvcmtQSURzW2ldLCAmc3RhdHVzLCAwKSA8IDApICYmCi0gICAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKICAgICAvKiBSZXN0b3JlIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gICovCiAgICAgaWYgKGNwLT5SZWFsV29ya2luZ0RpcmVjdG9yeSkgewotICAgICAgd2hpbGUgKChjaGRpcihjcC0+UmVhbFdvcmtpbmdEaXJlY3RvcnkpIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkKLSAgICAgICAgOworICAgICAgd2hpbGUgKChjaGRpcihjcC0+UmVhbFdvcmtpbmdEaXJlY3RvcnkpIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0xNjM1LDggKzE2NDEsOCBAQAogICBpZiAocGZkICYmICpwZmQgPiAyKSB7CiAgICAgLyogS2VlcCB0cnlpbmcgdG8gY2xvc2UgdW50aWwgaXQgaXMgbm90IGludGVycnVwdGVkIGJ5IGEKICAgICAgKiBzaWduYWwuICAqLwotICAgIHdoaWxlICgoY2xvc2UoKnBmZCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgOworICAgIHdoaWxlICgoY2xvc2UoKnBmZCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgfQogICAgICpwZmQgPSAtMTsKICAgfQogfQpAQCAtMTY2MSw4ICsxNjY3LDggQEAKICAgICAgICAgICAgcmVhZCB1bnRpbCB0aGUgb3BlcmF0aW9uIGlzIG5vdCBpbnRlcnJ1cHRlZC4gICovCiAgICAgICAgIHdoaWxlICgocmVhZChjcC0+UGlwZVJlYWRFbmRzW2ldLCBjcC0+UGlwZUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIEtXU1lTUEVfUElQRV9CVUZGRVJfU0laRSkgPCAwKSAmJgotICAgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkKLSAgICAgICAgICA7CisgICAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICAgIH0KICAgICAgIH0KICNlbmRpZgogCkBAIC0xNjg5LDcgKzE2OTUsOCBAQAogc3RhdGljIGludCBrd3N5c1Byb2Nlc3NDcmVhdGUoa3dzeXNQcm9jZXNzKiBjcCwgaW50IHBySW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NDcmVhdGVJbmZvcm1hdGlvbiogc2kpCiB7Ci0gIHNpZ3NldF90IG1hc2ssIG9sZF9tYXNrOworICBzaWdzZXRfdCBtYXNrOworICBzaWdzZXRfdCBvbGRfbWFzazsKICAgaW50IHBnaWRQaXBlWzJdOwogICBjaGFyIHRtcDsKICAgc3NpemVfdCByZWFkUmVzOwpAQCAtMTgxNyw4ICsxODI0LDggQEAKICAgLyogTWFrZSBzdXJlIHRoZSBjaGlsZCBpcyBpbiB0aGUgcHJvY2VzcyBncm91cCBiZWZvcmUgd2UgcHJvY2VlZC4gIFRoaXMKICAgICAgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIGNhbGxzIHRvIHRoZSBraWxsIGZ1bmN0aW9uIHRoYXQgd2UgbWFrZSBmb3IKICAgICAgc2lnbmFsbGluZyBwcm9jZXNzIGdyb3Vwcy4gICovCi0gIHdoaWxlICgocmVhZFJlcyA9IHJlYWQocGdpZFBpcGVbMF0sICZ0bXAsIDEpKSA+IDApCi0gICAgOworICB3aGlsZSAoKHJlYWRSZXMgPSByZWFkKHBnaWRQaXBlWzBdLCAmdG1wLCAxKSkgPiAwKSB7CisgIH0KICAgaWYgKHJlYWRSZXMgPCAwKSB7CiAgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbGRfbWFzaywgMCk7CiAgICAga3dzeXNQcm9jZXNzQ2xlYW51cERlc2NyaXB0b3IoJnNpLT5FcnJvclBpcGVbMF0pOwpAQCAtMTg0Niw4ICsxODUzLDggQEAKICAgICAgIC8qIEtlZXAgdHJ5aW5nIHRvIHJlYWQgdW50aWwgdGhlIG9wZXJhdGlvbiBpcyBub3QgaW50ZXJydXB0ZWQuICAqLwogICAgICAgd2hpbGUgKCgobiA9IHJlYWQoc2ktPkVycm9yUGlwZVswXSwgY3AtPkVycm9yTWVzc2FnZSArIHRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkoS1dTWVNQRV9QSVBFX0JVRkZFUl9TSVpFIC0gdG90YWwpKSkgPCAwKSAmJgotICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKKyAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICB9CiAgICAgICBpZiAobiA+IDApIHsKICAgICAgICAgdG90YWwgKz0gbjsKICAgICAgIH0KQEAgLTE4NzIsNyArMTg3OSw4IEBACiAgIGludCBpOwogICAvKiBUZW1wb3JhcmlseSBkaXNhYmxlIHNpZ25hbHMgdGhhdCBhY2Nlc3MgRm9ya1BJRHMuICBXZSBkb24ndCB3YW50IHRoZW0gdG8KICAgICAgcmVhZCBhIHJlYXBlZCBQSUQsIGFuZCB3cml0ZXMgdG8gRm9ya1BJRHMgYXJlIG5vdCBhdG9taWMuICAqLwotICBzaWdzZXRfdCBtYXNrLCBvbGRfbWFzazsKKyAgc2lnc2V0X3QgbWFzazsKKyAgc2lnc2V0X3Qgb2xkX21hc2s7CiAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKICAgc2lnYWRkc2V0KCZtYXNrLCBTSUdJTlQpOwogICBzaWdhZGRzZXQoJm1hc2ssIFNJR1RFUk0pOwpAQCAtMTg4NSw4ICsxODkzLDggQEAKICAgICAgIGludCByZXN1bHQ7CiAgICAgICB3aGlsZSAoKChyZXN1bHQgPSB3YWl0cGlkKGNwLT5Gb3JrUElEc1tpXSwgJmNwLT5Db21tYW5kRXhpdENvZGVzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTk9IQU5HKSkgPCAwKSAmJgotICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKKyAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICB9CiAgICAgICBpZiAocmVzdWx0ID4gMCkgewogICAgICAgICAvKiBUaGlzIGNoaWxkIGhhcyB0ZXJtaWFudGVkLiAgKi8KICAgICAgICAgY3AtPkZvcmtQSURzW2ldID0gMDsKQEAgLTE5NTksNyArMTk2Nyw4IEBACiAKIC8qIEdldCB0aGUgdGltZSBhdCB3aGljaCBlaXRoZXIgdGhlIHByb2Nlc3Mgb3IgdXNlciB0aW1lb3V0IHdpbGwKICAgIGV4cGlyZS4gIFJldHVybnMgMSBpZiB0aGUgdXNlciB0aW1lb3V0IGlzIGZpcnN0LCBhbmQgMCBvdGhlcndpc2UuICAqLwotc3RhdGljIGludCBrd3N5c1Byb2Nlc3NHZXRUaW1lb3V0VGltZShrd3N5c1Byb2Nlc3MqIGNwLCBkb3VibGUqIHVzZXJUaW1lb3V0LAorc3RhdGljIGludCBrd3N5c1Byb2Nlc3NHZXRUaW1lb3V0VGltZShrd3N5c1Byb2Nlc3MqIGNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUqIHVzZXJUaW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NUaW1lKiB0aW1lb3V0VGltZSkKIHsKICAgLyogVGhlIGZpcnN0IHRpbWUgdGhpcyBpcyBjYWxsZWQsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSB0aW1lIGF0CkBAIC0xOTkxLDM1ICsyMDAwLDMzIEBACiAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aW1lIGJlZm9yZSB0aGUgZ2l2ZW4gdGltZW91dCB0aW1lIGFycml2ZXMuCiAgICBSZXR1cm5zIDEgaWYgdGhlIHRpbWUgaGFzIGFscmVhZHkgYXJyaXZlZCwgYW5kIDAgb3RoZXJ3aXNlLiAgKi8KIHN0YXRpYyBpbnQga3dzeXNQcm9jZXNzR2V0VGltZW91dExlZnQoa3dzeXNQcm9jZXNzVGltZSogdGltZW91dFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSogdXNlclRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSogdXNlclRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3c3lzUHJvY2Vzc1RpbWVOYXRpdmUqIHRpbWVvdXRMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB6ZXJvSXNFeHBpcmVkKQogewogICBpZiAodGltZW91dFRpbWUtPnR2X3NlYyA8IDApIHsKICAgICAvKiBObyB0aW1lb3V0IHRpbWUgaGFzIGJlZW4gcmVxdWVzdGVkLiAgKi8KICAgICByZXR1cm4gMDsKLSAgfSBlbHNlIHsKLSAgICAvKiBDYWxjdWxhdGUgdGhlIHJlbWFpbmluZyB0aW1lLiAgKi8KLSAgICBrd3N5c1Byb2Nlc3NUaW1lIGN1cnJlbnRUaW1lID0ga3dzeXNQcm9jZXNzVGltZUdldEN1cnJlbnQoKTsKLSAgICBrd3N5c1Byb2Nlc3NUaW1lIHRpbWVMZWZ0ID0KLSAgICAgIGt3c3lzUHJvY2Vzc1RpbWVTdWJ0cmFjdCgqdGltZW91dFRpbWUsIGN1cnJlbnRUaW1lKTsKLSAgICBpZiAodGltZUxlZnQudHZfc2VjIDwgMCAmJiB1c2VyVGltZW91dCAmJiAqdXNlclRpbWVvdXQgPD0gMCkgewotICAgICAgLyogQ2FsbGVyIGhhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCBhIHplcm8gdGltZW91dC4gICovCi0gICAgICB0aW1lTGVmdC50dl9zZWMgPSAwOwotICAgICAgdGltZUxlZnQudHZfdXNlYyA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHRpbWVMZWZ0LnR2X3NlYyA8IDAgfHwKLSAgICAgICAgKHRpbWVMZWZ0LnR2X3NlYyA9PSAwICYmIHRpbWVMZWZ0LnR2X3VzZWMgPT0gMCAmJiB6ZXJvSXNFeHBpcmVkKSkgewotICAgICAgLyogVGltZW91dCBoYXMgYWxyZWFkeSBleHBpcmVkLiAgKi8KLSAgICAgIHJldHVybiAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBUaGVyZSBpcyBzb21lIHRpbWUgbGVmdC4gICovCi0gICAgICB0aW1lb3V0TGVuZ3RoLT50dl9zZWMgPSB0aW1lTGVmdC50dl9zZWM7Ci0gICAgICB0aW1lb3V0TGVuZ3RoLT50dl91c2VjID0gdGltZUxlZnQudHZfdXNlYzsKLSAgICAgIHJldHVybiAwOwotICAgIH0KICAgfQorICAvKiBDYWxjdWxhdGUgdGhlIHJlbWFpbmluZyB0aW1lLiAgKi8KKyAga3dzeXNQcm9jZXNzVGltZSBjdXJyZW50VGltZSA9IGt3c3lzUHJvY2Vzc1RpbWVHZXRDdXJyZW50KCk7CisgIGt3c3lzUHJvY2Vzc1RpbWUgdGltZUxlZnQgPQorICAgIGt3c3lzUHJvY2Vzc1RpbWVTdWJ0cmFjdCgqdGltZW91dFRpbWUsIGN1cnJlbnRUaW1lKTsKKyAgaWYgKHRpbWVMZWZ0LnR2X3NlYyA8IDAgJiYgdXNlclRpbWVvdXQgJiYgKnVzZXJUaW1lb3V0IDw9IDApIHsKKyAgICAvKiBDYWxsZXIgaGFzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGEgemVybyB0aW1lb3V0LiAgKi8KKyAgICB0aW1lTGVmdC50dl9zZWMgPSAwOworICAgIHRpbWVMZWZ0LnR2X3VzZWMgPSAwOworICB9CisKKyAgaWYgKHRpbWVMZWZ0LnR2X3NlYyA8IDAgfHwKKyAgICAgICh0aW1lTGVmdC50dl9zZWMgPT0gMCAmJiB0aW1lTGVmdC50dl91c2VjID09IDAgJiYgemVyb0lzRXhwaXJlZCkpIHsKKyAgICAvKiBUaW1lb3V0IGhhcyBhbHJlYWR5IGV4cGlyZWQuICAqLworICAgIHJldHVybiAxOworICB9CisgIC8qIFRoZXJlIGlzIHNvbWUgdGltZSBsZWZ0LiAgKi8KKyAgdGltZW91dExlbmd0aC0+dHZfc2VjID0gdGltZUxlZnQudHZfc2VjOworICB0aW1lb3V0TGVuZ3RoLT50dl91c2VjID0gdGltZUxlZnQudHZfdXNlYzsKKyAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBrd3N5c1Byb2Nlc3NUaW1lIGt3c3lzUHJvY2Vzc1RpbWVHZXRDdXJyZW50KHZvaWQpCkBAIC0yNDI0LDQxICsyNDMxLDM5IEBACiAgICAgaWYgKG1pZGRsZV9waWQgPCAwKSB7CiAgICAgICAvKiBGb3JrIGZhaWxlZC4gIFJldHVybiBhcyBpZiB3ZSB3ZXJlIG5vdCBkZXRhY2hpbmcuICAqLwogICAgICAgcmV0dXJuIG1pZGRsZV9waWQ7Ci0gICAgfSBlbHNlIGlmIChtaWRkbGVfcGlkID09IDApIHsKKyAgICB9CisgICAgaWYgKG1pZGRsZV9waWQgPT0gMCkgewogICAgICAgLyogVGhpcyBpcyB0aGUgaW50ZXJtZWRpYXRlIHByb2Nlc3MuICBDcmVhdGUgdGhlIHJlYWwgY2hpbGQuICAqLwogICAgICAgcGlkX3QgY2hpbGRfcGlkID0gZm9yaygpOwogICAgICAgaWYgKGNoaWxkX3BpZCA9PSAwKSB7CiAgICAgICAgIC8qIFRoaXMgaXMgdGhlIHJlYWwgY2hpbGQgcHJvY2Vzcy4gIFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZS4gICovCiAgICAgICAgIHJldHVybiAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogVXNlIHRoZSBlcnJvciBwaXBlIHRvIHJlcG9ydCB0aGUgcGlkIHRvIHRoZSByZWFsIHBhcmVudC4gICovCi0gICAgICAgIHdoaWxlICgod3JpdGUoc2ktPkVycm9yUGlwZVsxXSwgJmNoaWxkX3BpZCwgc2l6ZW9mKGNoaWxkX3BpZCkpIDwgMCkgJiYKLSAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgICAgOwotCi0gICAgICAgIC8qIEV4aXQgd2l0aG91dCBjbGVhbnVwLiAgVGhlIHBhcmVudCBob2xkcyBhbGwgcmVzb3VyY2VzLiAgKi8KLSAgICAgICAga3dzeXNQcm9jZXNzRXhpdCgpOwotICAgICAgICByZXR1cm4gMDsgLyogTmV2ZXIgcmVhY2hlZCwgYnV0IGF2b2lkcyBTdW5DQyB3YXJuaW5nLiAgKi8KICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogVGhpcyBpcyB0aGUgb3JpZ2luYWwgcGFyZW50IHByb2Nlc3MuICBUaGUgaW50ZXJtZWRpYXRlCi0gICAgICAgICBwcm9jZXNzIHdpbGwgdXNlIHRoZSBlcnJvciBwaXBlIHRvIHJlcG9ydCB0aGUgcGlkIG9mIHRoZQotICAgICAgICAgZGV0YWNoZWQgY2hpbGQuICAqLwotICAgICAgcGlkX3QgY2hpbGRfcGlkOwotICAgICAgaW50IHN0YXR1czsKLSAgICAgIHdoaWxlICgocmVhZChzaS0+RXJyb3JQaXBlWzBdLCAmY2hpbGRfcGlkLCBzaXplb2YoY2hpbGRfcGlkKSkgPCAwKSAmJgotICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKKyAgICAgIC8qIFVzZSB0aGUgZXJyb3IgcGlwZSB0byByZXBvcnQgdGhlIHBpZCB0byB0aGUgcmVhbCBwYXJlbnQuICAqLworICAgICAgd2hpbGUgKCh3cml0ZShzaS0+RXJyb3JQaXBlWzFdLCAmY2hpbGRfcGlkLCBzaXplb2YoY2hpbGRfcGlkKSkgPCAwKSAmJgorICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgIH0KIAotICAgICAgLyogV2FpdCBmb3IgdGhlIGludGVybWVkaWF0ZSBwcm9jZXNzIHRvIGV4aXQgYW5kIGNsZWFuIGl0IHVwLiAgKi8KLSAgICAgIHdoaWxlICgod2FpdHBpZChtaWRkbGVfcGlkLCAmc3RhdHVzLCAwKSA8IDApICYmIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKLSAgICAgIHJldHVybiBjaGlsZF9waWQ7CisgICAgICAvKiBFeGl0IHdpdGhvdXQgY2xlYW51cC4gIFRoZSBwYXJlbnQgaG9sZHMgYWxsIHJlc291cmNlcy4gICovCisgICAgICBrd3N5c1Byb2Nlc3NFeGl0KCk7CisgICAgICByZXR1cm4gMDsgLyogTmV2ZXIgcmVhY2hlZCwgYnV0IGF2b2lkcyBTdW5DQyB3YXJuaW5nLiAgKi8KICAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogTm90IGNyZWF0aW5nIGEgZGV0YWNoZWQgcHJvY2Vzcy4gIFVzZSBub3JtYWwgZm9yay4gICovCi0gICAgcmV0dXJuIGZvcmsoKTsKKyAgICAvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwYXJlbnQgcHJvY2Vzcy4gIFRoZSBpbnRlcm1lZGlhdGUKKyAgICAgICAgcHJvY2VzcyB3aWxsIHVzZSB0aGUgZXJyb3IgcGlwZSB0byByZXBvcnQgdGhlIHBpZCBvZiB0aGUKKyAgICAgICAgZGV0YWNoZWQgY2hpbGQuICAqLworICAgIHBpZF90IGNoaWxkX3BpZDsKKyAgICBpbnQgc3RhdHVzOworICAgIHdoaWxlICgocmVhZChzaS0+RXJyb3JQaXBlWzBdLCAmY2hpbGRfcGlkLCBzaXplb2YoY2hpbGRfcGlkKSkgPCAwKSAmJgorICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgfQorCisgICAgLyogV2FpdCBmb3IgdGhlIGludGVybWVkaWF0ZSBwcm9jZXNzIHRvIGV4aXQgYW5kIGNsZWFuIGl0IHVwLiAgKi8KKyAgICB3aGlsZSAoKHdhaXRwaWQobWlkZGxlX3BpZCwgJnN0YXR1cywgMCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgfQorICAgIHJldHVybiBjaGlsZF9waWQ7CiAgIH0KKyAgLyogTm90IGNyZWF0aW5nIGEgZGV0YWNoZWQgcHJvY2Vzcy4gIFVzZSBub3JtYWwgZm9yay4gICovCisgIHJldHVybiBmb3JrKCk7CiB9CiAjZW5kaWYKIApAQCAtMjU2Myw3ICsyNTY4LDggQEAKICAgICAvKiBNYWtlIHN1cmUgdGhlIHByb2Nlc3Mgc3RhcnRlZCBhbmQgcHJvdmlkZWQgYSB2YWxpZCBoZWFkZXIuICAqLwogICAgIGlmIChwcyAmJiBmc2NhbmYocHMsICIlKlteXG5dXG4iKSAhPSBFT0YpIHsKICAgICAgIC8qIExvb2sgZm9yIHByb2Nlc3NlcyB3aG9zZSBwYXJlbnQgaXMgdGhlIHByb2Nlc3MgYmVpbmcga2lsbGVkLiAgKi8KLSAgICAgIGludCBwaWQsIHBwaWQ7CisgICAgICBpbnQgcGlkOworICAgICAgaW50IHBwaWQ7CiAgICAgICB3aGlsZSAoZnNjYW5mKHBzLCBLV1NZU1BFX1BTX0ZPUk1BVCwgJnBpZCwgJnBwaWQpID09IDIpIHsKICAgICAgICAgaWYgKHBwaWQgPT0gcHJvY2Vzc19pZCkgewogICAgICAgICAgIC8qIFJlY3Vyc2l2ZWx5IGtpbGwgdGhpcyBjaGlsZCBhbmQgaXRzIGNoaWxkcmVuLiAgKi8KQEAgLTI3MjUsOCArMjczMSw4IEBACiAgICAgICBzaWdlbXB0eXNldCgmbmV3U2lnQWN0aW9uLnNhX21hc2spOwogICAgICAgd2hpbGUgKChzaWdhY3Rpb24oU0lHQ0hMRCwgJm5ld1NpZ0FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICZrd3N5c1Byb2Nlc3Nlc09sZFNpZ0NobGRBY3Rpb24pIDwgMCkgJiYKLSAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7CisgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgfQogCiAgICAgICAvKiBJbnN0YWxsIG91ciBoYW5kbGVyIGZvciBTSUdJTlQgLyBTSUdURVJNLiAgUmVwZWF0IGNhbGwgdW50aWwKICAgICAgICAgIGl0IGlzIG5vdCBpbnRlcnJ1cHRlZC4gICovCkBAIC0yNzM0LDE1ICsyNzQwLDE1IEBACiAgICAgICBzaWdhZGRzZXQoJm5ld1NpZ0FjdGlvbi5zYV9tYXNrLCBTSUdURVJNKTsKICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKFNJR0lOVCwgJm5ld1NpZ0FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICZrd3N5c1Byb2Nlc3Nlc09sZFNpZ0ludEFjdGlvbikgPCAwKSAmJgotICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKKyAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICB9CiAKICAgICAgIHNpZ2VtcHR5c2V0KCZuZXdTaWdBY3Rpb24uc2FfbWFzayk7CiAgICAgICBzaWdhZGRzZXQoJm5ld1NpZ0FjdGlvbi5zYV9tYXNrLCBTSUdJTlQpOwogICAgICAgd2hpbGUgKChzaWdhY3Rpb24oU0lHVEVSTSwgJm5ld1NpZ0FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICZrd3N5c1Byb2Nlc3Nlc09sZFNpZ0ludEFjdGlvbikgPCAwKSAmJgotICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKKyAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTI3NzMsMTQgKzI3NzksMTQgQEAKICAgICAgICAgLyogUmVzdG9yZSB0aGUgc2lnbmFsIGhhbmRsZXJzLiAgUmVwZWF0IGNhbGwgdW50aWwgaXQgaXMgbm90CiAgICAgICAgICAgIGludGVycnVwdGVkLiAgKi8KICAgICAgICAgd2hpbGUgKChzaWdhY3Rpb24oU0lHQ0hMRCwgJmt3c3lzUHJvY2Vzc2VzT2xkU2lnQ2hsZEFjdGlvbiwgMCkgPCAwKSAmJgotICAgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkKLSAgICAgICAgICA7CisgICAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICAgIH0KICAgICAgICAgd2hpbGUgKChzaWdhY3Rpb24oU0lHSU5ULCAma3dzeXNQcm9jZXNzZXNPbGRTaWdJbnRBY3Rpb24sIDApIDwgMCkgJiYKLSAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgICAgOworICAgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgICB9CiAgICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKFNJR1RFUk0sICZrd3N5c1Byb2Nlc3Nlc09sZFNpZ1Rlcm1BY3Rpb24sIDApIDwgMCkgJiYKLSAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgICAgOworICAgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgICB9CiAKICAgICAgICAgLyogRnJlZSB0aGUgdGFibGUgb2YgcHJvY2VzcyBwb2ludGVycyBzaW5jZSBpdCBpcyBub3cgZW1wdHkuCiAgICAgICAgICAgIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHRoZSBzaWduYWwgaGFuZGxlciBoYXMgYmVlbiByZW1vdmVkLiAgKi8KQEAgLTI4MDYsNyArMjgxMiwxMCBAQAogI2VuZGlmCiApCiB7Ci0gIGludCBpLCBqLCBwcm9jU3RhdHVzLCBvbGRfZXJybm8gPSBlcnJubzsKKyAgaW50IGk7CisgIGludCBqOworICBpbnQgcHJvY1N0YXR1czsKKyAgaW50IG9sZF9lcnJubyA9IGVycm5vOwogI2lmIEtXU1lTUEVfVVNFX1NJR0lORk8KICAgKHZvaWQpaW5mbzsKICAgKHZvaWQpdWNvbnRleHQ7CkBAIC0yODYzLDggKzI4NzIsOCBAQAogICAgICAgICBtZW1zZXQoJmRlZlNpZ0FjdGlvbiwgMCwgc2l6ZW9mKGRlZlNpZ0FjdGlvbikpOwogICAgICAgICBkZWZTaWdBY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7CiAgICAgICAgIHNpZ2VtcHR5c2V0KCZkZWZTaWdBY3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKHNpZ251bSwgJmRlZlNpZ0FjdGlvbiwgMCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICAgIDsKKyAgICAgICAgd2hpbGUgKChzaWdhY3Rpb24oc2lnbnVtLCAmZGVmU2lnQWN0aW9uLCAwKSA8IDApICYmIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgICAgfQogICAgICAgICAvKiBVbm1hc2sgdGhlIHNpZ25hbC4gICovCiAgICAgICAgIHNpZ2VtcHR5c2V0KCZ1bmJsb2NrU2V0KTsKICAgICAgICAgc2lnYWRkc2V0KCZ1bmJsb2NrU2V0LCBzaWdudW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1Byb2Nlc3NXaW4zMi5jIGIvU291cmNlL2t3c3lzL1Byb2Nlc3NXaW4zMi5jCmluZGV4IDY4YzUyMTguLjEyNjcwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzV2luMzIuYworKysgYi9Tb3VyY2Uva3dzeXMvUHJvY2Vzc1dpbjMyLmMKQEAgLTMxLDkgKzMxLDYgQEAKICNpbmNsdWRlIDxpby5oPiAgICAgLyogX3VubGluayAqLwogI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBzcHJpbnRmICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIHN0cmxlbiwgc3RyZHVwICovCi0jaWZkZWYgX19XQVRDT01DX18KLSMgIGRlZmluZSBfdW5saW5rIHVubGluawotI2VuZGlmCiAKICNpZm5kZWYgX01BWF9GTkFNRQogIyAgZGVmaW5lIF9NQVhfRk5BTUUgNDA5NgpAQCAtNDgsMTEgKzQ1LDYgQEAKICMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0NzA2KQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgIHByYWdtYSB3YXJuIC0gODAwNCAvKiBhc3NpZ25lZCBhIHZhbHVlIHRoYXQgaXMgbmV2ZXIgdXNlZCAgKi8KLSMgIHByYWdtYSB3YXJuIC0gODA2MCAvKiBBc3NpZ25tZW50IGluc2lkZSBpZigpIGNvbmRpdGlvbi4gICovCi0jZW5kaWYKLQogLyogVGhlcmUgYXJlIHBpcGVzIGZvciB0aGUgcHJvY2VzcyBwaXBlbGluZSdzIHN0ZG91dCBhbmQgc3RkZXJyLiAgKi8KICNkZWZpbmUgS1dTWVNQRV9QSVBFX0NPVU5UIDIKICNkZWZpbmUgS1dTWVNQRV9QSVBFX1NURE9VVCAwCkBAIC03NjEsNyArNzUzLDcgQEAKICAgfQogfQogCi12b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwaXBlLCBIQU5ETEUgcFsyXSkKK3ZvaWQga3dzeXNQcm9jZXNzX1NldFBpcGVOYXRpdmUoa3dzeXNQcm9jZXNzKiBjcCwgaW50IHBpcGUsIGNvbnN0IEhBTkRMRSBwWzJdKQogewogICBIQU5ETEUqIHBQaXBlTmF0aXZlID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1JlZ3VsYXJFeHByZXNzaW9uLmN4eCBiL1NvdXJjZS9rd3N5cy9SZWd1bGFyRXhwcmVzc2lvbi5jeHgKaW5kZXggNWU2ZjhkYS4uNGY3NGViYSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1JlZ3VsYXJFeHByZXNzaW9uLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvUmVndWxhckV4cHJlc3Npb24uY3h4CkBAIC0yOCw4ICsyOCw4IEBACiAjICBpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oeHguaW4iCiAjZW5kaWYKIAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdHJpbmc+CiAKIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UgewogCkBAIC0zNjcsOCArMzY3LDcgQEAKIAogICAvLyBBbGxvY2F0ZSBzcGFjZS4KICAgLy8jaWZuZGVmIF9XSU4zMgotICBpZiAodGhpcy0+cHJvZ3JhbSAhPSBudWxscHRyKQotICAgIGRlbGV0ZVtdIHRoaXMtPnByb2dyYW07CisgIGRlbGV0ZVtdIHRoaXMtPnByb2dyYW07CiAgIC8vI2VuZGlmCiAgIHRoaXMtPnByb2dyYW0gPSBuZXcgY2hhcltjb21wLnJlZ3NpemVdOwogICB0aGlzLT5wcm9nc2l6ZSA9IHN0YXRpY19jYXN0PGludD4oY29tcC5yZWdzaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvUmVndWxhckV4cHJlc3Npb24uaHh4LmluCmluZGV4IGQxMWRiODguLjI3MDljZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eC5pbgpAQCAtMjYsMTIgKzI2LDYgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotLyogRGlzYWJsZSB1c2VsZXNzIEJvcmxhbmQgd2FybmluZ3MuICBLV1N5cyB0cmllcyBub3QgdG8gZm9yY2UgdGhpbmdzCi0gICBvbiBpdHMgaW5jbHVkZXJzLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGhlcmUuICAqLwotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyAgcHJhZ21hIHdhcm4gLSA4MDI3IC8qIGZ1bmN0aW9uIG5vdCBpbmxpbmVkLiAgKi8KLSNlbmRpZgotCiBuYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAgewogCiAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvU2hhcmVkRm9yd2FyZC5oLmluIGIvU291cmNlL2t3c3lzL1NoYXJlZEZvcndhcmQuaC5pbgppbmRleCA1NzE2Y2Q0Li4wOTEzMzRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvU2hhcmVkRm9yd2FyZC5oLmluCisrKyBiL1NvdXJjZS9rd3N5cy9TaGFyZWRGb3J3YXJkLmguaW4KQEAgLTY2LDEyICs2Niw2IEBACiAjICAgIGVuZGlmCiAjICBlbmRpZgogCi0jICBpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCi0vKiBDb2RlIGhhcyBubyBlZmZlY3Q7IHJhaXNlZCBieSB3aW5udC5oIGluIEMgKG5vdCBDKyspIHdoZW4gaWdub3JpbmcgYW4KLSAgIHVudXNlZCBwYXJhbWV0ZXIgdXNpbmcgIihwYXJhbSkiIHN5bnRheCAoaS5lLiBubyBjYXN0IHRvIHZvaWQpLiAgKi8KLSMgICAgcHJhZ21hIHdhcm4gLSA4MDE5Ci0jICBlbmRpZgotCiAvKiBGdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGlzIGV4ZWN1dGFibGUgaXMgYnVpbHQuICBEbwogICAgbm90IGluY2x1ZGUgYSB0cmFpbGluZyBzbGFzaC4gICovCiAjICBpZiAhZGVmaW5lZChAS1dTWVNfTkFNRVNQQUNFQF9TSEFSRURfRk9SV0FSRF9ESVJfQlVJTEQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvU3RyaW5nLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9TdHJpbmcuaHh4LmluCmluZGV4IGRiMWNmMjIuLmMzNmY0Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9TdHJpbmcuaHh4LmluCisrKyBiL1NvdXJjZS9rd3N5cy9TdHJpbmcuaHh4LmluCkBAIC01MiwxNCArNTIsNiBAQAogICB9CiB9OyAvLyBFbmQgQ2xhc3M6IFN0cmluZwogCi0jaWYgZGVmaW5lZChfX1dBVENPTUNfXykKLWlubGluZSBib29sIG9wZXJhdG9yPChTdHJpbmcgY29uc3QmIGwsIFN0cmluZyBjb25zdCYgcikKLXsKLSAgcmV0dXJuIChzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZyBjb25zdCY+KGwpIDwKLSAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZyBjb25zdCY+KHIpKTsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9TeXN0ZW0uYyBiL1NvdXJjZS9rd3N5cy9TeXN0ZW0uYwppbmRleCBkNDNjYzZmLi5kYmZkMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvU3lzdGVtLmMKKysrIGIvU291cmNlL2t3c3lzL1N5c3RlbS5jCkBAIC0yMiw3ICsyMiw3IEBACiB0eXBlZGVmIGludCBrd3N5c1N5c3RlbV9wdHJkaWZmX3Q7CiAjZW5kaWYKIAotc3RhdGljIGludCBrd3N5c1N5c3RlbV9fQXBwZW5kQnl0ZShjaGFyKiBsb2NhbCwgY2hhcioqIGJlZ2luLCBjaGFyKiogZW5kLAorc3RhdGljIGludCBrd3N5c1N5c3RlbV9fQXBwZW5kQnl0ZShjb25zdCBjaGFyKiBsb2NhbCwgY2hhcioqIGJlZ2luLCBjaGFyKiogZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpemUsIGNoYXIgYykKIHsKICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBjaGFyYWN0ZXIuICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1N5c3RlbUluZm9ybWF0aW9uLmN4eCBiL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5jeHgKaW5kZXggNmVjNmU0OC4uZWQxY2RjMCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N5c3RlbUluZm9ybWF0aW9uLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtSW5mb3JtYXRpb24uY3h4CkBAIC02NCw5ICs2NCw5IEBACiAjZWxzZQogIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKLSMgIGluY2x1ZGUgPGVycm5vLmg+IC8vIGV4dGVybiBpbnQgZXJybm87CisjICBpbmNsdWRlIDxjZXJybm8+IC8vIGV4dGVybiBpbnQgZXJybm87CisjICBpbmNsdWRlIDxjc2lnbmFsPgogIyAgaW5jbHVkZSA8ZmNudGwuaD4KLSMgIGluY2x1ZGUgPHNpZ25hbC5oPgogIyAgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+IC8vIGdldHJsaW1pdAogIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+IC8vIGludCB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqYnVmKTsKQEAgLTEzMiw3ICsxMzIsNyBAQAogIyAgICBlbmRpZgogIyAgZW5kaWYKICMgIGlmIGRlZmluZWQoS1dTWVNfQ1hYX0hBU19STElNSVQ2NCkKLXR5cGVkZWYgc3RydWN0IHJsaW1pdDY0IFJlc291cmNlTGltaXRUeXBlOwordXNpbmcgUmVzb3VyY2VMaW1pdFR5cGUgPSBzdHJ1Y3QgcmxpbWl0NjQ7CiAjICAgIGRlZmluZSBHZXRSZXNvdXJjZUxpbWl0IGdldHJsaW1pdDY0CiAjICBlbHNlCiB0eXBlZGVmIHN0cnVjdCBybGltaXQgUmVzb3VyY2VMaW1pdFR5cGU7CkBAIC0xNjMsMzkgKzE2MywxMSBAQAogIyAgdW5kZWYgS1dTWVNfU1lTVEVNSU5GT1JNQVRJT05fSEFTX1NZTUJPTF9MT09LVVAKICNlbmRpZgogCi0jaW5jbHVkZSA8Y3R5cGUuaD4gLy8gaW50IGlzZGlnaXQoaW50IGMpOworI2luY2x1ZGUgPGNjdHlwZT4gLy8gaW50IGlzZGlnaXQoaW50IGMpOworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIGRlZmluZWQoS1dTWVNfVVNFX0xPTkdfTE9ORykKLSMgIGlmIGRlZmluZWQoS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORykKLSMgICAgZGVmaW5lIGlvc3RyZWFtTG9uZ0xvbmcoeCkgKHgpCi0jICBlbHNlCi0jICAgIGRlZmluZSBpb3N0cmVhbUxvbmdMb25nKHgpICgobG9uZykoeCkpCi0jICBlbmRpZgotI2VsaWYgZGVmaW5lZChLV1NZU19VU0VfX19JTlQ2NCkKLSMgIGlmIGRlZmluZWQoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQpCi0jICAgIGRlZmluZSBpb3N0cmVhbUxvbmdMb25nKHgpICh4KQotIyAgZWxzZQotIyAgICBkZWZpbmUgaW9zdHJlYW1Mb25nTG9uZyh4KSAoKGxvbmcpKHgpKQotIyAgZW5kaWYKLSNlbHNlCi0jICBlcnJvciAiTm8gTG9uZyBMb25nIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEtXU1lTX0NYWF9IQVNfQVRPTEwpCi0jICBkZWZpbmUgYXRvTG9uZ0xvbmcgYXRvbGwKLSNlbHNlCi0jICBpZiBkZWZpbmVkKEtXU1lTX0NYWF9IQVNfX0FUT0k2NCkKLSMgICAgZGVmaW5lIGF0b0xvbmdMb25nIF9hdG9pNjQKLSMgIGVsaWYgZGVmaW5lZChLV1NZU19DWFhfSEFTX0FUT0wpCi0jICAgIGRlZmluZSBhdG9Mb25nTG9uZyBhdG9sCi0jICBlbHNlCi0jICAgIGRlZmluZSBhdG9Mb25nTG9uZyBhdG9pCi0jICBlbmRpZgotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTMwMCkgJiYgIWRlZmluZWQoX1dJTjY0KSAmJiAgICAgICAgICAgIFwKICAgIWRlZmluZWQoX19jbGFuZ19fKQpAQCAtMjA0LDE1ICsxNzYsMTUgQEAKICMgIGRlZmluZSBVU0VfQVNNX0lOU1RSVUNUSU9OUyAwCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApICYmICFkZWZpbmVkKF9fY2xhbmdfXykgJiYgICAgICAgICBcCisgICFkZWZpbmVkKF9NX0FSTTY0KQogIyAgaW5jbHVkZSA8aW50cmluLmg+CiAjICBkZWZpbmUgVVNFX0NQVUlEX0lOVFJJTlNJQ1MgMQogI2Vsc2UKICMgIGRlZmluZSBVU0VfQ1BVSURfSU5UUklOU0lDUyAwCiAjZW5kaWYKIAotI2lmIFVTRV9BU01fSU5TVFJVQ1RJT05TIHx8IFVTRV9DUFVJRF9JTlRSSU5TSUNTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkZWZpbmVkKEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU01fQ1BVSUQpCisjaWYgVVNFX0FTTV9JTlNUUlVDVElPTlMgfHwgVVNFX0NQVUlEX0lOVFJJTlNJQ1MKICMgIGRlZmluZSBVU0VfQ1BVSUQgMQogI2Vsc2UKICMgIGRlZmluZSBVU0VfQ1BVSUQgMApAQCAtMjcyLDIxICsyNDQsNiBAQAogICB9CiAKICAgbWVtY3B5KHJlc3VsdCwgdG1wLCBzaXplb2YodG1wKSk7Ci0jICAgIGVsaWYgZGVmaW5lZChLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNX0NQVUlEKQotICB1bnNpZ25lZCBpbnQgYSwgYiwgYywgZDsKLSAgX19hc20gewotICAgIG1vdiBFQVgsIHNlbGVjdDsKLSAgICBjcHVpZAotICAgIG1vdiBhLCBFQVg7Ci0gICAgbW92IGIsIEVCWDsKLSAgICBtb3YgYywgRUNYOwotICAgIG1vdiBkLCBFRFg7Ci0gIH0KLQotICByZXN1bHRbMF0gPSBhOwotICByZXN1bHRbMV0gPSBiOwotICByZXN1bHRbMl0gPSBjOwotICByZXN1bHRbM10gPSBkOwogIyAgICBlbmRpZgogCiAgIC8vIFRoZSBjcHVpZCBpbnN0cnVjdGlvbiBzdWNjZWVkZWQuCkBAIC0zMDMsMzQgKzI2MCwzMyBAQAogfQogCiBleHRlcm4gIkMiIHsKLXR5cGVkZWYgdm9pZCAoKlNpZ0FjdGlvbikoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7Cit1c2luZyBTaWdBY3Rpb24gPSB2b2lkICgqKShpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKIH0KIAogLy8gIERlZmluZSBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uIGNsYXNzCi10eXBlZGVmIHZvaWQgKCpERUxBWV9GVU5DKSh1bnNpZ25lZCBpbnQgdWlNUyk7Cit1c2luZyBERUxBWV9GVU5DID0gdm9pZCAoKikodW5zaWduZWQgaW50KTsKIAogY2xhc3MgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbgogewogcHVibGljOgotICB0eXBlZGVmIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyBMb25nTG9uZzsKICAgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbigpOwotICB+U3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbigpOworICB+U3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbigpID0gZGVmYXVsdDsKIAotICBjb25zdCBjaGFyKiBHZXRWZW5kb3JTdHJpbmcoKTsKKyAgY29uc3QgY2hhciogR2V0VmVuZG9yU3RyaW5nKCkgY29uc3Q7CiAgIGNvbnN0IGNoYXIqIEdldFZlbmRvcklEKCk7Ci0gIHN0ZDo6c3RyaW5nIEdldFR5cGVJRCgpOwotICBzdGQ6OnN0cmluZyBHZXRGYW1pbHlJRCgpOwotICBzdGQ6OnN0cmluZyBHZXRNb2RlbElEKCk7Ci0gIHN0ZDo6c3RyaW5nIEdldE1vZGVsTmFtZSgpOwotICBzdGQ6OnN0cmluZyBHZXRTdGVwcGluZ0NvZGUoKTsKLSAgY29uc3QgY2hhciogR2V0RXh0ZW5kZWRQcm9jZXNzb3JOYW1lKCk7Ci0gIGNvbnN0IGNoYXIqIEdldFByb2Nlc3NvclNlcmlhbE51bWJlcigpOwotICBpbnQgR2V0UHJvY2Vzc29yQ2FjaGVTaXplKCk7Ci0gIHVuc2lnbmVkIGludCBHZXRMb2dpY2FsUHJvY2Vzc29yc1BlclBoeXNpY2FsKCk7Ci0gIGZsb2F0IEdldFByb2Nlc3NvckNsb2NrRnJlcXVlbmN5KCk7Ci0gIGludCBHZXRQcm9jZXNzb3JBUElDSUQoKTsKLSAgaW50IEdldFByb2Nlc3NvckNhY2hlWFNpemUobG9uZyBpbnQpOwotICBib29sIERvZXNDUFVTdXBwb3J0RmVhdHVyZShsb25nIGludCk7CisgIHN0ZDo6c3RyaW5nIEdldFR5cGVJRCgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRGYW1pbHlJRCgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRNb2RlbElEKCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldE1vZGVsTmFtZSgpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRTdGVwcGluZ0NvZGUoKSBjb25zdDsKKyAgY29uc3QgY2hhciogR2V0RXh0ZW5kZWRQcm9jZXNzb3JOYW1lKCkgY29uc3Q7CisgIGNvbnN0IGNoYXIqIEdldFByb2Nlc3NvclNlcmlhbE51bWJlcigpIGNvbnN0OworICBpbnQgR2V0UHJvY2Vzc29yQ2FjaGVTaXplKCkgY29uc3Q7CisgIHVuc2lnbmVkIGludCBHZXRMb2dpY2FsUHJvY2Vzc29yc1BlclBoeXNpY2FsKCkgY29uc3Q7CisgIGZsb2F0IEdldFByb2Nlc3NvckNsb2NrRnJlcXVlbmN5KCkgY29uc3Q7CisgIGludCBHZXRQcm9jZXNzb3JBUElDSUQoKSBjb25zdDsKKyAgaW50IEdldFByb2Nlc3NvckNhY2hlWFNpemUobG9uZyBpbnQpIGNvbnN0OworICBib29sIERvZXNDUFVTdXBwb3J0RmVhdHVyZShsb25nIGludCkgY29uc3Q7CiAKICAgY29uc3QgY2hhciogR2V0T1NOYW1lKCk7CiAgIGNvbnN0IGNoYXIqIEdldEhvc3RuYW1lKCk7CkBAIC0zMzksMjkgKzI5NSwyOSBAQAogICBjb25zdCBjaGFyKiBHZXRPU1ZlcnNpb24oKTsKICAgY29uc3QgY2hhciogR2V0T1NQbGF0Zm9ybSgpOwogCi0gIGJvb2wgSXM2NEJpdHMoKTsKKyAgYm9vbCBJczY0Qml0cygpIGNvbnN0OwogCi0gIHVuc2lnbmVkIGludCBHZXROdW1iZXJPZkxvZ2ljYWxDUFUoKTsgLy8gcGVyIHBoeXNpY2FsIGNwdQotICB1bnNpZ25lZCBpbnQgR2V0TnVtYmVyT2ZQaHlzaWNhbENQVSgpOworICB1bnNpZ25lZCBpbnQgR2V0TnVtYmVyT2ZMb2dpY2FsQ1BVKCkgY29uc3Q7IC8vIHBlciBwaHlzaWNhbCBjcHUKKyAgdW5zaWduZWQgaW50IEdldE51bWJlck9mUGh5c2ljYWxDUFUoKSBjb25zdDsKIAogICBib29sIERvZXNDUFVTdXBwb3J0Q1BVSUQoKTsKIAogICAvLyBSZXRyaWV2ZSBtZW1vcnkgaW5mb3JtYXRpb24gaW4gTWlCLgotICBzaXplX3QgR2V0VG90YWxWaXJ0dWFsTWVtb3J5KCk7Ci0gIHNpemVfdCBHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCk7Ci0gIHNpemVfdCBHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCk7Ci0gIHNpemVfdCBHZXRBdmFpbGFibGVQaHlzaWNhbE1lbW9yeSgpOworICBzaXplX3QgR2V0VG90YWxWaXJ0dWFsTWVtb3J5KCkgY29uc3Q7CisgIHNpemVfdCBHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCkgY29uc3Q7CisgIHNpemVfdCBHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCkgY29uc3Q7CisgIHNpemVfdCBHZXRBdmFpbGFibGVQaHlzaWNhbE1lbW9yeSgpIGNvbnN0OwogCi0gIExvbmdMb25nIEdldFByb2Nlc3NJZCgpOworICBsb25nIGxvbmcgR2V0UHJvY2Vzc0lkKCk7CiAKICAgLy8gUmV0cmlldmUgbWVtb3J5IGluZm9ybWF0aW9uIGluIEtpQi4KLSAgTG9uZ0xvbmcgR2V0SG9zdE1lbW9yeVRvdGFsKCk7Ci0gIExvbmdMb25nIEdldEhvc3RNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogZW52VmFyTmFtZSk7Ci0gIExvbmdMb25nIEdldEhvc3RNZW1vcnlVc2VkKCk7CisgIGxvbmcgbG9uZyBHZXRIb3N0TWVtb3J5VG90YWwoKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSk7CisgIGxvbmcgbG9uZyBHZXRIb3N0TWVtb3J5VXNlZCgpOwogCi0gIExvbmdMb25nIEdldFByb2NNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwcm9jTGltaXRFbnZWYXJOYW1lKTsKLSAgTG9uZ0xvbmcgR2V0UHJvY01lbW9yeVVzZWQoKTsKKyAgbG9uZyBsb25nIEdldFByb2NNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyTmFtZSk7CisgIGxvbmcgbG9uZyBHZXRQcm9jTWVtb3J5VXNlZCgpOwogCiAgIGRvdWJsZSBHZXRMb2FkQXZlcmFnZSgpOwogCkBAIC0zNzcsNjAgKzMzMywxMDMgQEAKICAgdm9pZCBSdW5NZW1vcnlDaGVjaygpOwogCiBwdWJsaWM6Ci0gIHR5cGVkZWYgc3RydWN0IHRhZ0lECisgIHVzaW5nIElEID0gc3RydWN0IHRhZ0lECisKICAgeworCiAgICAgaW50IFR5cGU7CisKICAgICBpbnQgRmFtaWx5OworCiAgICAgaW50IE1vZGVsOworCiAgICAgaW50IFJldmlzaW9uOworCiAgICAgaW50IEV4dGVuZGVkRmFtaWx5OworCiAgICAgaW50IEV4dGVuZGVkTW9kZWw7CisKICAgICBzdGQ6OnN0cmluZyBQcm9jZXNzb3JOYW1lOworCiAgICAgc3RkOjpzdHJpbmcgVmVuZG9yOworCiAgICAgc3RkOjpzdHJpbmcgU2VyaWFsTnVtYmVyOworCiAgICAgc3RkOjpzdHJpbmcgTW9kZWxOYW1lOwotICB9IElEOworICB9OwogCi0gIHR5cGVkZWYgc3RydWN0IHRhZ0NQVVBvd2VyTWFuYWdlbWVudAorICB1c2luZyBDUFVQb3dlck1hbmFnZW1lbnQgPSBzdHJ1Y3QgdGFnQ1BVUG93ZXJNYW5hZ2VtZW50CisKICAgeworCiAgICAgYm9vbCBIYXNWb2x0YWdlSUQ7CisKICAgICBib29sIEhhc0ZyZXF1ZW5jeUlEOworCiAgICAgYm9vbCBIYXNUZW1wU2Vuc2VEaW9kZTsKLSAgfSBDUFVQb3dlck1hbmFnZW1lbnQ7CisgIH07CiAKLSAgdHlwZWRlZiBzdHJ1Y3QgdGFnQ1BVRXh0ZW5kZWRGZWF0dXJlcworICB1c2luZyBDUFVFeHRlbmRlZEZlYXR1cmVzID0gc3RydWN0IHRhZ0NQVUV4dGVuZGVkRmVhdHVyZXMKKwogICB7CisKICAgICBib29sIEhhczNETm93OwotICAgIGJvb2wgSGFzM0ROb3dQbHVzOwotICAgIGJvb2wgU3VwcG9ydHNNUDsKLSAgICBib29sIEhhc01NWFBsdXM7Ci0gICAgYm9vbCBIYXNTU0VNTVg7Ci0gICAgdW5zaWduZWQgaW50IExvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWw7Ci0gICAgaW50IEFQSUNfSUQ7Ci0gICAgQ1BVUG93ZXJNYW5hZ2VtZW50IFBvd2VyTWFuYWdlbWVudDsKLSAgfSBDUFVFeHRlbmRlZEZlYXR1cmVzOwogCi0gIHR5cGVkZWYgc3RydWN0IENQVXRhZ0ZlYXR1cmVzCisgICAgYm9vbCBIYXMzRE5vd1BsdXM7CisKKyAgICBib29sIFN1cHBvcnRzTVA7CisKKyAgICBib29sIEhhc01NWFBsdXM7CisKKyAgICBib29sIEhhc1NTRU1NWDsKKworICAgIHVuc2lnbmVkIGludCBMb2dpY2FsUHJvY2Vzc29yc1BlclBoeXNpY2FsOworCisgICAgaW50IEFQSUNfSUQ7CisKKyAgICBDUFVQb3dlck1hbmFnZW1lbnQgUG93ZXJNYW5hZ2VtZW50OworICB9OworCisgIHVzaW5nIENQVUZlYXR1cmVzID0gc3RydWN0IENQVXRhZ0ZlYXR1cmVzCisKICAgeworCiAgICAgYm9vbCBIYXNGUFU7CisKICAgICBib29sIEhhc1RTQzsKKwogICAgIGJvb2wgSGFzTU1YOworCiAgICAgYm9vbCBIYXNTU0U7CisKICAgICBib29sIEhhc1NTRUZQOworCiAgICAgYm9vbCBIYXNTU0UyOworCiAgICAgYm9vbCBIYXNJQTY0OworCiAgICAgYm9vbCBIYXNBUElDOworCiAgICAgYm9vbCBIYXNDTU9WOworCiAgICAgYm9vbCBIYXNNVFJSOworCiAgICAgYm9vbCBIYXNBQ1BJOworCiAgICAgYm9vbCBIYXNTZXJpYWw7CisKICAgICBib29sIEhhc1RoZXJtYWw7CisKICAgICBpbnQgQ1BVU3BlZWQ7CisKICAgICBpbnQgTDFDYWNoZVNpemU7CisKICAgICBpbnQgTDJDYWNoZVNpemU7CisKICAgICBpbnQgTDNDYWNoZVNpemU7CisKICAgICBDUFVFeHRlbmRlZEZlYXR1cmVzIEV4dGVuZGVkRmVhdHVyZXM7Ci0gIH0gQ1BVRmVhdHVyZXM7CisgIH07CiAKICAgZW51bSBNYW51ZmFjdHVyZXIKICAgewpAQCAtNDc2LDggKzQ3NSw5IEBACiAKICAgdm9pZCBDUFVDb3VudFdpbmRvd3MoKTsgICAgLy8gRm9yIHdpbmRvd3MKICAgdW5zaWduZWQgY2hhciBHZXRBUElDSWQoKTsgLy8gRm9yIHdpbmRvd3MKLSAgYm9vbCBJc1NNVFN1cHBvcnRlZCgpOwotICBzdGF0aWMgTG9uZ0xvbmcgR2V0Q3ljbGVzRGlmZmVyZW5jZShERUxBWV9GVU5DLCB1bnNpZ25lZCBpbnQpOyAvLyBGb3Igd2luZG93cworICBib29sIElzU01UU3VwcG9ydGVkKCkgY29uc3Q7CisgIHN0YXRpYyBsb25nIGxvbmcgR2V0Q3ljbGVzRGlmZmVyZW5jZShERUxBWV9GVU5DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KTsgLy8gRm9yIHdpbmRvd3MKIAogICAvLyBGb3IgTGludXggYW5kIEN5Z3dpbiwgL3Byb2MvY3B1aW5mbyBmb3JtYXRzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQKICAgYm9vbCBSZXRyZWl2ZUluZm9ybWF0aW9uRnJvbUNwdUluZm9GaWxlKCk7CkBAIC03NjgsNDIgKzc2OCw0MSBAQAogICBjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lLCBjb25zdCBjaGFyKiBwcm9jTGltaXRFbnZWYXJOYW1lKQogewogICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3NzOwotICBvc3MgPDwgIkhvc3QgVG90YWw6ICIgPDwgaW9zdHJlYW1Mb25nTG9uZyh0aGlzLT5HZXRIb3N0TWVtb3J5VG90YWwoKSkKKyAgb3NzIDw8ICJIb3N0IFRvdGFsOiAiIDw8IHRoaXMtPkdldEhvc3RNZW1vcnlUb3RhbCgpCiAgICAgICA8PCAiIEtpQiwgSG9zdCBBdmFpbGFibGU6ICIKLSAgICAgIDw8IGlvc3RyZWFtTG9uZ0xvbmcodGhpcy0+R2V0SG9zdE1lbW9yeUF2YWlsYWJsZShob3N0TGltaXRFbnZWYXJOYW1lKSkKKyAgICAgIDw8IHRoaXMtPkdldEhvc3RNZW1vcnlBdmFpbGFibGUoaG9zdExpbWl0RW52VmFyTmFtZSkKICAgICAgIDw8ICIgS2lCLCBQcm9jZXNzIEF2YWlsYWJsZTogIgotICAgICAgPDwgaW9zdHJlYW1Mb25nTG9uZyh0aGlzLT5HZXRQcm9jTWVtb3J5QXZhaWxhYmxlKGhvc3RMaW1pdEVudlZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY0xpbWl0RW52VmFyTmFtZSkpCisgICAgICA8PCB0aGlzLT5HZXRQcm9jTWVtb3J5QXZhaWxhYmxlKGhvc3RMaW1pdEVudlZhck5hbWUsIHByb2NMaW1pdEVudlZhck5hbWUpCiAgICAgICA8PCAiIEtpQiI7CiAgIHJldHVybiBvc3Muc3RyKCk7CiB9CiAKIC8vIGhvc3QgbWVtb3J5IGluZm8gaW4gdW5pdHMgb2YgS2lCLgotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRIb3N0TWVtb3J5VG90YWwoKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRIb3N0TWVtb3J5VG90YWwoKQogewogICByZXR1cm4gdGhpcy0+SW1wbGVtZW50YXRpb24tPkdldEhvc3RNZW1vcnlUb3RhbCgpOwogfQogCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldEhvc3RNZW1vcnlBdmFpbGFibGUoCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldEhvc3RNZW1vcnlBdmFpbGFibGUoCiAgIGNvbnN0IGNoYXIqIGhvc3RMaW1pdEVudlZhck5hbWUpCiB7CiAgIHJldHVybiB0aGlzLT5JbXBsZW1lbnRhdGlvbi0+R2V0SG9zdE1lbW9yeUF2YWlsYWJsZShob3N0TGltaXRFbnZWYXJOYW1lKTsKIH0KIAotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRIb3N0TWVtb3J5VXNlZCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldEhvc3RNZW1vcnlVc2VkKCkKIHsKICAgcmV0dXJuIHRoaXMtPkltcGxlbWVudGF0aW9uLT5HZXRIb3N0TWVtb3J5VXNlZCgpOwogfQogCiAvLyBwcm9jZXNzIG1lbW9yeSBpbmZvIGluIHVuaXRzIG9mIEtpQi4KLVN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyBTeXN0ZW1JbmZvcm1hdGlvbjo6R2V0UHJvY01lbW9yeUF2YWlsYWJsZSgKK2xvbmcgbG9uZyBTeXN0ZW1JbmZvcm1hdGlvbjo6R2V0UHJvY01lbW9yeUF2YWlsYWJsZSgKICAgY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSwgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyTmFtZSkKIHsKICAgcmV0dXJuIHRoaXMtPkltcGxlbWVudGF0aW9uLT5HZXRQcm9jTWVtb3J5QXZhaWxhYmxlKGhvc3RMaW1pdEVudlZhck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jTGltaXRFbnZWYXJOYW1lKTsKIH0KIAotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRQcm9jTWVtb3J5VXNlZCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldFByb2NNZW1vcnlVc2VkKCkKIHsKICAgcmV0dXJuIHRoaXMtPkltcGxlbWVudGF0aW9uLT5HZXRQcm9jTWVtb3J5VXNlZCgpOwogfQpAQCAtODEzLDcgKzgxMiw3IEBACiAgIHJldHVybiB0aGlzLT5JbXBsZW1lbnRhdGlvbi0+R2V0TG9hZEF2ZXJhZ2UoKTsKIH0KIAotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRQcm9jZXNzSWQoKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRQcm9jZXNzSWQoKQogewogICByZXR1cm4gdGhpcy0+SW1wbGVtZW50YXRpb24tPkdldFByb2Nlc3NJZCgpOwogfQpAQCAtODg1LDcgKzg4NCw3IEBACiAgICAgICAgICpwQnVmID0gJ1wwJzsKICAgICAgIHBCdWYgKz0gMTsKICAgICB9Ci0gICAgbGluZXMucHVzaF9iYWNrKGJ1Zik7CisgICAgbGluZXMuZW1wbGFjZV9iYWNrKGJ1Zik7CiAgICAgKytuUmVhZDsKICAgfQogICBpZiAoZmVycm9yKGZpbGUpKSB7CkBAIC04OTksNyArODk4LDcgQEAKIGludCBMb2FkTGluZXMoY29uc3QgY2hhciogZmlsZU5hbWUsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGluZXMpCiB7CiAgIEZJTEUqIGZpbGUgPSBmb3BlbihmaWxlTmFtZSwgInIiKTsKLSAgaWYgKGZpbGUgPT0gMCkgeworICBpZiAoZmlsZSA9PSBudWxscHRyKSB7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgaW50IG5SZWFkID0gTG9hZExpbmVzKGZpbGUsIGxpbmVzKTsKQEAgLTEzMjIsOSArMTMyMSw5IEBACiB7CiAgIHN0ZDo6c3RyaW5nIGZpbGUocGF0aCk7CiAgIGlmICghdGhpcy0+UmVwb3J0UGF0aCkgewotICAgIHNpemVfdCBhdCA9IGZpbGUucmZpbmQoIi8iKTsKKyAgICBzaXplX3QgYXQgPSBmaWxlLnJmaW5kKCcvJyk7CiAgICAgaWYgKGF0ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICBmaWxlID0gZmlsZS5zdWJzdHIoYXQgKyAxKTsKKyAgICAgIGZpbGUuZXJhc2UoMCwgYXQgKyAxKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIGZpbGU7CkBAIC0xNDY0LDEwICsxNDYzLDYgQEAKICAgdGhpcy0+T1NJczY0Qml0ID0gKHNpemVvZih2b2lkKikgPT0gOCk7CiB9CiAKLVN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246On5TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uKCkKLXsKLX0KLQogdm9pZCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpSdW5DUFVDaGVjaygpCiB7CiAjaWZkZWYgX1dJTjMyCkBAIC0xNTY0LDcgKzE1NTksNyBAQAogfQogCiAvKiogR2V0IHRoZSB2ZW5kb3Igc3RyaW5nICovCi1jb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRWZW5kb3JTdHJpbmcoKQorY29uc3QgY2hhciogU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VmVuZG9yU3RyaW5nKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkNoaXBJRC5WZW5kb3IuY19zdHIoKTsKIH0KQEAgLTE3NjAsNyArMTc1NSw3IEBACiB9CiAKIC8qKiBSZXR1cm4gdGhlIHR5cGUgSUQgb2YgdGhlIENQVSAqLwotc3RkOjpzdHJpbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VHlwZUlEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFR5cGVJRCgpIGNvbnN0CiB7CiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHI7CiAgIHN0ciA8PCB0aGlzLT5DaGlwSUQuVHlwZTsKQEAgLTE3NjgsNyArMTc2Myw3IEBACiB9CiAKIC8qKiBSZXR1cm4gdGhlIGZhbWlseSBvZiB0aGUgQ1BVIHByZXNlbnQgKi8KLXN0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEZhbWlseUlEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEZhbWlseUlEKCkgY29uc3QKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsKICAgc3RyIDw8IHRoaXMtPkNoaXBJRC5GYW1pbHk7CkBAIC0xNzc2LDcgKzE3NzEsNyBAQAogfQogCiAvLyBSZXR1cm4gdGhlIG1vZGVsIG9mIENQVSBwcmVzZW50ICovCi1zdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRNb2RlbElEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE1vZGVsSUQoKSBjb25zdAogewogICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyOwogICBzdHIgPDwgdGhpcy0+Q2hpcElELk1vZGVsOwpAQCAtMTc4NCwxMyArMTc3OSwxMyBAQAogfQogCiAvLyBSZXR1cm4gdGhlIG1vZGVsIG5hbWUgb2YgQ1BVIHByZXNlbnQgKi8KLXN0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE1vZGVsTmFtZSgpCitzdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRNb2RlbE5hbWUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2hpcElELk1vZGVsTmFtZTsKIH0KIAogLyoqIFJldHVybiB0aGUgc3RlcHBpbmcgY29kZSBvZiB0aGUgQ1BVIHByZXNlbnQuICovCi1zdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRTdGVwcGluZ0NvZGUoKQorc3RkOjpzdHJpbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0U3RlcHBpbmdDb2RlKCkgY29uc3QKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsKICAgc3RyIDw8IHRoaXMtPkNoaXBJRC5SZXZpc2lvbjsKQEAgLTE3OTgsNDQgKzE3OTMsNDYgQEAKIH0KIAogLyoqIFJldHVybiB0aGUgc3RlcHBpbmcgY29kZSBvZiB0aGUgQ1BVIHByZXNlbnQuICovCi1jb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRFeHRlbmRlZFByb2Nlc3Nvck5hbWUoKQorY29uc3QgY2hhciogU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0RXh0ZW5kZWRQcm9jZXNzb3JOYW1lKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkNoaXBJRC5Qcm9jZXNzb3JOYW1lLmNfc3RyKCk7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIHByb2Nlc3NvcgogICogIGluIGhleGFkZWNpbWFsOiB4eHh4LXh4eHgteHh4eC14eHh4LXh4eHgteHh4eC4gKi8KLWNvbnN0IGNoYXIqIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvclNlcmlhbE51bWJlcigpCitjb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JTZXJpYWxOdW1iZXIoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2hpcElELlNlcmlhbE51bWJlci5jX3N0cigpOwogfQogCiAvKiogUmV0dXJuIHRoZSBsb2dpY2FsIHByb2Nlc3NvcnMgcGVyIHBoeXNpY2FsICovCiB1bnNpZ25lZCBpbnQgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0TG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbCgpCisgIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5GZWF0dXJlcy5FeHRlbmRlZEZlYXR1cmVzLkxvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWw7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIHByb2Nlc3NvciBjbG9jayBmcmVxdWVuY3kuICovCi1mbG9hdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDbG9ja0ZyZXF1ZW5jeSgpCitmbG9hdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDbG9ja0ZyZXF1ZW5jeSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5DUFVTcGVlZEluTUh6OwogfQogCiAvKiogIFJldHVybiB0aGUgQVBJQyBJRC4gKi8KLWludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JBUElDSUQoKQoraW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckFQSUNJRCgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5GZWF0dXJlcy5FeHRlbmRlZEZlYXR1cmVzLkFQSUNfSUQ7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIEwxIGNhY2hlIHNpemUuICovCi1pbnQgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY2Vzc29yQ2FjaGVTaXplKCkKK2ludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDYWNoZVNpemUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+RmVhdHVyZXMuTDFDYWNoZVNpemU7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIGNob3NlbiBjYWNoZSBzaXplLiAqLwotaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckNhY2hlWFNpemUobG9uZyBpbnQgZHdDYWNoZUlEKQoraW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckNhY2hlWFNpemUoCisgIGxvbmcgaW50IGR3Q2FjaGVJRCkgY29uc3QKIHsKICAgc3dpdGNoIChkd0NhY2hlSUQpIHsKICAgICBjYXNlIFN5c3RlbUluZm9ybWF0aW9uOjpDUFVfRkVBVFVSRV9MMUNBQ0hFOgpAQCAtMTg0OCw3ICsxODQ1LDggQEAKICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkRvZXNDUFVTdXBwb3J0RmVhdHVyZShsb25nIGludCBkd0ZlYXR1cmUpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkRvZXNDUFVTdXBwb3J0RmVhdHVyZSgKKyAgbG9uZyBpbnQgZHdGZWF0dXJlKSBjb25zdAogewogICBib29sIGJIYXNGZWF0dXJlID0gZmFsc2U7CiAKQEAgLTIxMjgsNyArMjEyNiw3IEBACiAgICAgdGhpcy0+Q2hpcE1hbnVmYWN0dXJlciA9IEhQOyAvLyBIZXdsZXR0LVBhY2thcmQKICAgZWxzZSBpZiAodGhpcy0+Q2hpcElELlZlbmRvciA9PSAiTW90b3JvbGEiKQogICAgIHRoaXMtPkNoaXBNYW51ZmFjdHVyZXIgPSBNb3Rvcm9sYTsgLy8gTW90b3JvbGEgTWljcm9lbGVjdHJvbmljcwotICBlbHNlIGlmIChmYW1pbHkuc3Vic3RyKDAsIDcpID09ICJQQS1SSVNDIikKKyAgZWxzZSBpZiAoZmFtaWx5LmNvbXBhcmUoMCwgNywgIlBBLVJJU0MiKSA9PSAwKQogICAgIHRoaXMtPkNoaXBNYW51ZmFjdHVyZXIgPSBIUDsgLy8gSGV3bGV0dC1QYWNrYXJkCiAgIGVsc2UKICAgICB0aGlzLT5DaGlwTWFudWZhY3R1cmVyID0gVW5rbm93bk1hbnVmYWN0dXJlcjsgLy8gVW5rbm93biBtYW51ZmFjdHVyZXIKQEAgLTI4NDMsNyArMjg0MSw3IEBACiAgIC8vIHBvc3QtcHJvY2VzcyB0aGUgbmFtZS4KICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBzdHIuZmluZF9maXJzdF9ub3Rfb2YoIiAiKTsKICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHN0ciA9IHN0ci5zdWJzdHIocG9zKTsKKyAgICBzdHIuZXJhc2UoMCwgcG9zKTsKICAgfQogfQogI2VuZGlmCkBAIC0zMzQ0LDggKzMzNDIsOCBAQAogICBzaXplX3QgcG9zID0gYnVmZmVyLmZpbmQod29yZCwgaW5pdCk7CiAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICB0aGlzLT5DdXJyZW50UG9zaXRpb25JbkZpbGUgPSBwb3M7Ci0gICAgcG9zID0gYnVmZmVyLmZpbmQoIjoiLCBwb3MpOwotICAgIHNpemVfdCBwb3MyID0gYnVmZmVyLmZpbmQoIlxuIiwgcG9zKTsKKyAgICBwb3MgPSBidWZmZXIuZmluZCgnOicsIHBvcyk7CisgICAgc2l6ZV90IHBvczIgPSBidWZmZXIuZmluZCgnXG4nLCBwb3MpOwogICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgcG9zMiAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgLy8gSXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBiZWdpbm5pbmcgbWF0Y2hlcywgYnV0IHRoaXMgaXMgc3RpbGwgbm90IHRoZQogICAgICAgLy8gcmVxdWVzdGVkIGtleS4KQEAgLTMzNTgsNyArMzM1Niw5IEBACiAgICAgICAgICAgcmV0dXJuIHRoaXMtPkV4dHJhY3RWYWx1ZUZyb21DcHVJbmZvRmlsZShidWZmZXIsIHdvcmQsIHBvczIpOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICByZXR1cm4gYnVmZmVyLnN1YnN0cihwb3MgKyAyLCBwb3MyIC0gcG9zIC0gMik7CisgICAgICBidWZmZXIuZXJhc2UoMCwgcG9zICsgMik7CisgICAgICBidWZmZXIucmVzaXplKHBvczIgLSBwb3MgLSAyKTsKKyAgICAgIHJldHVybiBidWZmZXI7CiAgICAgfQogICB9CiAgIHRoaXMtPkN1cnJlbnRQb3NpdGlvbkluRmlsZSA9IHN0ZDo6c3RyaW5nOjpucG9zOwpAQCAtMzQwOSw3ICszNDA5LDcgQEAKICAgLy8gV2Ugd2FudCB0byByZWNvcmQgdGhlIHRvdGFsIG51bWJlciBvZiBjb3JlcyBpbiB0aGlzLT5OdW1iZXJPZlBoeXNpY2FsQ1BVCiAgIC8vIChjaGVja2luZyBvbmx5IHRoZSBmaXJzdCBwcm9jKQogICBzdGQ6OnN0cmluZyBDb3JlcyA9IHRoaXMtPkV4dHJhY3RWYWx1ZUZyb21DcHVJbmZvRmlsZShidWZmZXIsICJjcHUgY29yZXMiKTsKLSAgdW5zaWduZWQgaW50IE51bWJlck9mQ29yZXNQZXJTb2NrZXQgPSAodW5zaWduZWQgaW50KWF0b2koQ29yZXMuY19zdHIoKSk7CisgIGF1dG8gTnVtYmVyT2ZDb3Jlc1BlclNvY2tldCA9ICh1bnNpZ25lZCBpbnQpYXRvaShDb3Jlcy5jX3N0cigpKTsKICAgTnVtYmVyT2ZDb3Jlc1BlclNvY2tldCA9IHN0ZDo6bWF4KE51bWJlck9mQ29yZXNQZXJTb2NrZXQsIDF1KTsKICAgdGhpcy0+TnVtYmVyT2ZQaHlzaWNhbENQVSA9CiAgICAgTnVtYmVyT2ZDb3Jlc1BlclNvY2tldCAqICh1bnNpZ25lZCBpbnQpTnVtYmVyT2ZTb2NrZXRzOwpAQCAtMzQ0MSw3ICszNDQxLDcgQEAKICAgICAvLyBMaW51eCBTcGFyYzogQ1BVIHNwZWVkIGlzIGluIEh6IGFuZCBlbmNvZGVkIGluIGhleGFkZWNpbWFsCiAgICAgQ1BVU3BlZWQgPSB0aGlzLT5FeHRyYWN0VmFsdWVGcm9tQ3B1SW5mb0ZpbGUoYnVmZmVyLCAiQ3B1MENsa1RjayIpOwogICAgIHRoaXMtPkNQVVNwZWVkSW5NSHogPQotICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0cnRvdWxsKENQVVNwZWVkLmNfc3RyKCksIDAsIDE2KSkgLyAxMDAwMDAwLjBmOworICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0cnRvdWxsKENQVVNwZWVkLmNfc3RyKCksIG51bGxwdHIsIDE2KSkgLyAxMDAwMDAwLjBmOwogICB9CiAjZW5kaWYKIApAQCAtMzUwMiwxMyArMzUwMiwxMiBAQAogICBjYWNoZW5hbWUucHVzaF9iYWNrKCJELWNhY2hlIik7ICAgIC8vIGUuZy4gUEEtUklTQwogCiAgIHRoaXMtPkZlYXR1cmVzLkwxQ2FjaGVTaXplID0gMDsKLSAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGNhY2hlbmFtZS5zaXplKCk7IGluZGV4KyspIHsKLSAgICBzdGQ6OnN0cmluZyBjYWNoZVNpemUgPQotICAgICAgdGhpcy0+RXh0cmFjdFZhbHVlRnJvbUNwdUluZm9GaWxlKGJ1ZmZlciwgY2FjaGVuYW1lW2luZGV4XSk7CisgIGZvciAoYXV0byYgaW5kZXggOiBjYWNoZW5hbWUpIHsKKyAgICBzdGQ6OnN0cmluZyBjYWNoZVNpemUgPSB0aGlzLT5FeHRyYWN0VmFsdWVGcm9tQ3B1SW5mb0ZpbGUoYnVmZmVyLCBpbmRleCk7CiAgICAgaWYgKCFjYWNoZVNpemUuZW1wdHkoKSkgewogICAgICAgcG9zID0gY2FjaGVTaXplLmZpbmQoIiBLQiIpOwogICAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBjYWNoZVNpemUgPSBjYWNoZVNpemUuc3Vic3RyKDAsIHBvcyk7CisgICAgICAgIGNhY2hlU2l6ZS5yZXNpemUocG9zKTsKICAgICAgIH0KICAgICAgIHRoaXMtPkZlYXR1cmVzLkwxQ2FjaGVTaXplICs9IGF0b2koY2FjaGVTaXplLmNfc3RyKCkpOwogICAgIH0KQEAgLTM1ODQsOCArMzU4Myw3IEBACiAvKioKIEdldCB0b3RhbCBzeXN0ZW0gUkFNIGluIHVuaXRzIG9mIEtpQi4KICovCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcKLVN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEhvc3RNZW1vcnlUb3RhbCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0SG9zdE1lbW9yeVRvdGFsKCkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikKICMgIGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTMwMApAQCAtMzYwMCw3ICszNTk4LDcgQEAKICAgcmV0dXJuIHN0YXRleC51bGxUb3RhbFBoeXMgLyAxMDI0OwogIyAgZW5kaWYKICNlbGlmIGRlZmluZWQoX19saW51eCkKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIG1lbVRvdGFsID0gMDsKKyAgbG9uZyBsb25nIG1lbVRvdGFsID0gMDsKICAgaW50IGllcnIgPSBHZXRGaWVsZEZyb21GaWxlKCIvcHJvYy9tZW1pbmZvIiwgIk1lbVRvdGFsOiIsIG1lbVRvdGFsKTsKICAgaWYgKGllcnIpIHsKICAgICByZXR1cm4gLTE7CkBAIC0zNjIzLDExICszNjIxLDEwIEBACiBHZXQgdG90YWwgc3lzdGVtIFJBTSBpbiB1bml0cyBvZiBLaUIuIFRoaXMgbWF5IGRpZmZlciBmcm9tIHRoZQogaG9zdCB0b3RhbCBpZiBhIGhvc3Qtd2lkZSByZXNvdXJjZSBsaW1pdCBpcyBhcHBsaWVkLgogKi8KLVN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZwotU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0SG9zdE1lbW9yeUF2YWlsYWJsZSgKK2xvbmcgbG9uZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRIb3N0TWVtb3J5QXZhaWxhYmxlKAogICBjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lKQogewotICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgbWVtVG90YWwgPSB0aGlzLT5HZXRIb3N0TWVtb3J5VG90YWwoKTsKKyAgbG9uZyBsb25nIG1lbVRvdGFsID0gdGhpcy0+R2V0SG9zdE1lbW9yeVRvdGFsKCk7CiAKICAgLy8gdGhlIGZvbGxvd2luZyBtZWNoYW5pc20gaXMgcHJvdmlkZWQgZm9yIHN5c3RlbXMgdGhhdAogICAvLyBhcHBseSByZXNvdXJjZSBsaW1pdHMgYWNyb3NzIGdyb3VwcyBvZiBwcm9jZXNzZXMuCkBAIC0zNjM4LDggKzM2MzUsNyBAQAogICBpZiAoaG9zdExpbWl0RW52VmFyTmFtZSkgewogICAgIGNvbnN0IGNoYXIqIGhvc3RMaW1pdEVudlZhclZhbHVlID0gZ2V0ZW52KGhvc3RMaW1pdEVudlZhck5hbWUpOwogICAgIGlmIChob3N0TGltaXRFbnZWYXJWYWx1ZSkgewotICAgICAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIGhvc3RMaW1pdCA9Ci0gICAgICAgIGF0b0xvbmdMb25nKGhvc3RMaW1pdEVudlZhclZhbHVlKTsKKyAgICAgIGxvbmcgbG9uZyBob3N0TGltaXQgPSBzdGQ6OmF0b2xsKGhvc3RMaW1pdEVudlZhclZhbHVlKTsKICAgICAgIGlmIChob3N0TGltaXQgPiAwKSB7CiAgICAgICAgIG1lbVRvdGFsID0gbWluKGhvc3RMaW1pdCwgbWVtVG90YWwpOwogICAgICAgfQpAQCAtMzY1MywyMCArMzY0OSwxNyBAQAogR2V0IHRvdGFsIHN5c3RlbSBSQU0gaW4gdW5pdHMgb2YgS2lCLiBUaGlzIG1heSBkaWZmZXIgZnJvbSB0aGUKIGhvc3QgdG90YWwgaWYgYSBwZXItcHJvY2VzcyByZXNvdXJjZSBsaW1pdCBpcyBhcHBsaWVkLgogKi8KLVN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZwotU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY01lbW9yeUF2YWlsYWJsZSgKK2xvbmcgbG9uZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jTWVtb3J5QXZhaWxhYmxlKAogICBjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lLCBjb25zdCBjaGFyKiBwcm9jTGltaXRFbnZWYXJOYW1lKQogewotICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgbWVtQXZhaWwgPQotICAgIHRoaXMtPkdldEhvc3RNZW1vcnlBdmFpbGFibGUoaG9zdExpbWl0RW52VmFyTmFtZSk7CisgIGxvbmcgbG9uZyBtZW1BdmFpbCA9IHRoaXMtPkdldEhvc3RNZW1vcnlBdmFpbGFibGUoaG9zdExpbWl0RW52VmFyTmFtZSk7CiAKICAgLy8gdGhlIGZvbGxvd2luZyBtZWNoYW5pc20gaXMgcHJvdmlkZSBmb3Igc3lzdGVtcyB3aGVyZSBybGltaXRzCiAgIC8vIGFyZSBub3QgZW1wbG95ZWQuIFVuaXRzIGFyZSBpbiBLaUIuCiAgIGlmIChwcm9jTGltaXRFbnZWYXJOYW1lKSB7CiAgICAgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyVmFsdWUgPSBnZXRlbnYocHJvY0xpbWl0RW52VmFyTmFtZSk7CiAgICAgaWYgKHByb2NMaW1pdEVudlZhclZhbHVlKSB7Ci0gICAgICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgcHJvY0xpbWl0ID0KLSAgICAgICAgYXRvTG9uZ0xvbmcocHJvY0xpbWl0RW52VmFyVmFsdWUpOworICAgICAgbG9uZyBsb25nIHByb2NMaW1pdCA9IHN0ZDo6YXRvbGwocHJvY0xpbWl0RW52VmFyVmFsdWUpOwogICAgICAgaWYgKHByb2NMaW1pdCA+IDApIHsKICAgICAgICAgbWVtQXZhaWwgPSBtaW4ocHJvY0xpbWl0LCBtZW1BdmFpbCk7CiAgICAgICB9CkBAIC0zNjc4LDI4ICszNjcxLDI0IEBACiAgIFJlc291cmNlTGltaXRUeXBlIHJsaW07CiAgIGllcnIgPSBHZXRSZXNvdXJjZUxpbWl0KFJMSU1JVF9EQVRBLCAmcmxpbSk7CiAgIGlmICgoaWVyciA9PSAwKSAmJiAocmxpbS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSkgewotICAgIG1lbUF2YWlsID0KLSAgICAgIG1pbigoU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nKXJsaW0ucmxpbV9jdXIgLyAxMDI0LCBtZW1BdmFpbCk7CisgICAgbWVtQXZhaWwgPSBtaW4oKGxvbmcgbG9uZylybGltLnJsaW1fY3VyIC8gMTAyNCwgbWVtQXZhaWwpOwogICB9CiAKICAgaWVyciA9IEdldFJlc291cmNlTGltaXQoUkxJTUlUX0FTLCAmcmxpbSk7CiAgIGlmICgoaWVyciA9PSAwKSAmJiAocmxpbS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSkgewotICAgIG1lbUF2YWlsID0KLSAgICAgIG1pbigoU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nKXJsaW0ucmxpbV9jdXIgLyAxMDI0LCBtZW1BdmFpbCk7CisgICAgbWVtQXZhaWwgPSBtaW4oKGxvbmcgbG9uZylybGltLnJsaW1fY3VyIC8gMTAyNCwgbWVtQXZhaWwpOwogICB9CiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgc3RydWN0IHJsaW1pdCBybGltOwogICBpbnQgaWVycjsKICAgaWVyciA9IGdldHJsaW1pdChSTElNSVRfREFUQSwgJnJsaW0pOwogICBpZiAoKGllcnIgPT0gMCkgJiYgKHJsaW0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkpIHsKLSAgICBtZW1BdmFpbCA9Ci0gICAgICBtaW4oKFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZylybGltLnJsaW1fY3VyIC8gMTAyNCwgbWVtQXZhaWwpOworICAgIG1lbUF2YWlsID0gbWluKChsb25nIGxvbmcpcmxpbS5ybGltX2N1ciAvIDEwMjQsIG1lbUF2YWlsKTsKICAgfQogCiAgIGllcnIgPSBnZXRybGltaXQoUkxJTUlUX1JTUywgJnJsaW0pOwogICBpZiAoKGllcnIgPT0gMCkgJiYgKHJsaW0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkpIHsKLSAgICBtZW1BdmFpbCA9Ci0gICAgICBtaW4oKFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZylybGltLnJsaW1fY3VyIC8gMTAyNCwgbWVtQXZhaWwpOworICAgIG1lbUF2YWlsID0gbWluKChsb25nIGxvbmcpcmxpbS5ybGltX2N1ciAvIDEwMjQsIG1lbUF2YWlsKTsKICAgfQogI2VuZGlmCiAKQEAgLTM3MDksOCArMzY5OCw3IEBACiAvKioKIEdldCBSQU0gdXNlZCBieSBhbGwgcHJvY2Vzc2VzIGluIHRoZSBob3N0LCBpbiB1bml0cyBvZiBLaUIuCiAqLwotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nCi1TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRIb3N0TWVtb3J5VXNlZCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0SG9zdE1lbW9yeVVzZWQoKQogewogI2lmIGRlZmluZWQoX1dJTjMyKQogIyAgaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxMzAwCkBAIC0zNzI3LDM5ICszNzE1LDM4IEBACiAjZWxpZiBkZWZpbmVkKF9fbGludXgpCiAgIC8vIEZpcnN0IHRyeSB0byB1c2UgTWVtQXZhaWxhYmxlLCBidXQgaXQgb25seSB3b3JrcyBvbiBuZXdlciBrZXJuZWxzCiAgIGNvbnN0IGNoYXIqIG5hbWVzMlszXSA9IHsgIk1lbVRvdGFsOiIsICJNZW1BdmFpbGFibGU6IiwgbnVsbHB0ciB9OwotICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgdmFsdWVzMlsyXSA9IHsgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nKDApIH07CisgIGxvbmcgbG9uZyB2YWx1ZXMyWzJdID0geyAwIH07CiAgIGludCBpZXJyID0gR2V0RmllbGRzRnJvbUZpbGUoIi9wcm9jL21lbWluZm8iLCBuYW1lczIsIHZhbHVlczIpOwogICBpZiAoaWVycikgewogICAgIGNvbnN0IGNoYXIqIG5hbWVzNFs1XSA9IHsgIk1lbVRvdGFsOiIsICJNZW1GcmVlOiIsICJCdWZmZXJzOiIsICJDYWNoZWQ6IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIgfTsKLSAgICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgdmFsdWVzNFs0XSA9IHsgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nKAotICAgICAgMCkgfTsKKyAgICBsb25nIGxvbmcgdmFsdWVzNFs0XSA9IHsgMCB9OwogICAgIGllcnIgPSBHZXRGaWVsZHNGcm9tRmlsZSgiL3Byb2MvbWVtaW5mbyIsIG5hbWVzNCwgdmFsdWVzNCk7CiAgICAgaWYgKGllcnIpIHsKICAgICAgIHJldHVybiBpZXJyOwogICAgIH0KLSAgICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcmIG1lbVRvdGFsID0gdmFsdWVzNFswXTsKLSAgICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcmIG1lbUZyZWUgPSB2YWx1ZXM0WzFdOwotICAgIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyYgbWVtQnVmZmVycyA9IHZhbHVlczRbMl07Ci0gICAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nJiBtZW1DYWNoZWQgPSB2YWx1ZXM0WzNdOworICAgIGxvbmcgbG9uZyYgbWVtVG90YWwgPSB2YWx1ZXM0WzBdOworICAgIGxvbmcgbG9uZyYgbWVtRnJlZSA9IHZhbHVlczRbMV07CisgICAgbG9uZyBsb25nJiBtZW1CdWZmZXJzID0gdmFsdWVzNFsyXTsKKyAgICBsb25nIGxvbmcmIG1lbUNhY2hlZCA9IHZhbHVlczRbM107CiAgICAgcmV0dXJuIG1lbVRvdGFsIC0gbWVtRnJlZSAtIG1lbUJ1ZmZlcnMgLSBtZW1DYWNoZWQ7CiAgIH0KLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nJiBtZW1Ub3RhbCA9IHZhbHVlczJbMF07Ci0gIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyYgbWVtQXZhaWwgPSB2YWx1ZXMyWzFdOworICBsb25nIGxvbmcmIG1lbVRvdGFsID0gdmFsdWVzMlswXTsKKyAgbG9uZyBsb25nJiBtZW1BdmFpbCA9IHZhbHVlczJbMV07CiAgIHJldHVybiBtZW1Ub3RhbCAtIG1lbUF2YWlsOwogI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0gIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyBwc3ogPSBnZXRwYWdlc2l6ZSgpOworICBsb25nIGxvbmcgcHN6ID0gZ2V0cGFnZXNpemUoKTsKICAgaWYgKHBzeiA8IDEpIHsKICAgICByZXR1cm4gLTE7CiAgIH0KICAgY29uc3QgY2hhciogbmFtZXNbM10gPSB7ICJQYWdlcyB3aXJlZCBkb3duOiIsICJQYWdlcyBhY3RpdmU6IiwgbnVsbHB0ciB9OwotICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgdmFsdWVzWzJdID0geyBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcoMCkgfTsKKyAgbG9uZyBsb25nIHZhbHVlc1syXSA9IHsgMCB9OwogICBpbnQgaWVyciA9IEdldEZpZWxkc0Zyb21Db21tYW5kKCJ2bV9zdGF0IiwgbmFtZXMsIHZhbHVlcyk7CiAgIGlmIChpZXJyKSB7CiAgICAgcmV0dXJuIC0xOwogICB9Ci0gIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyYgdm1XaXJlZCA9IHZhbHVlc1swXTsKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nJiB2bUFjdGl2ZSA9IHZhbHVlc1sxXTsKKyAgbG9uZyBsb25nJiB2bVdpcmVkID0gdmFsdWVzWzBdOworICBsb25nIGxvbmcmIHZtQWN0aXZlID0gdmFsdWVzWzFdOwogICByZXR1cm4gKCh2bUFjdGl2ZSArIHZtV2lyZWQpICogcHN6KSAvIDEwMjQ7CiAjZWxzZQogICByZXR1cm4gMDsKQEAgLTM3NzAsOCArMzc1Nyw3IEBACiBHZXQgc3lzdGVtIFJBTSB1c2VkIGJ5IHRoZSBwcm9jZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KIHByb2Nlc3MgaWQgaW4gdW5pdHMgb2YgS2lCLgogKi8KLVN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZwotU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY01lbW9yeVVzZWQoKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2NNZW1vcnlVc2VkKCkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChLV1NZU19TWVNfSEFTX1BTQVBJKQogICBsb25nIHBpZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKQEAgLTM3ODgsMTQgKzM3NzQsMTQgQEAKICAgfQogICByZXR1cm4gcG1jLldvcmtpbmdTZXRTaXplIC8gMTAyNDsKICNlbGlmIGRlZmluZWQoX19saW51eCkKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIG1lbVVzZWQgPSAwOworICBsb25nIGxvbmcgbWVtVXNlZCA9IDA7CiAgIGludCBpZXJyID0gR2V0RmllbGRGcm9tRmlsZSgiL3Byb2Mvc2VsZi9zdGF0dXMiLCAiVm1SU1M6IiwgbWVtVXNlZCk7CiAgIGlmIChpZXJyKSB7CiAgICAgcmV0dXJuIC0xOwogICB9CiAgIHJldHVybiBtZW1Vc2VkOwogI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0gIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyBtZW1Vc2VkID0gMDsKKyAgbG9uZyBsb25nIG1lbVVzZWQgPSAwOwogICBwaWRfdCBwaWQgPSBnZXRwaWQoKTsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKICAgb3NzIDw8ICJwcyAtbyByc3M9IC1wICIgPDwgcGlkOwpAQCAtMzg1OSw3ICszODQ1LDcgQEAKIC8qKgogR2V0IHRoZSBwcm9jZXNzIGlkIG9mIHRoZSBydW5uaW5nIHByb2Nlc3MuCiAqLwotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NJZCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY2Vzc0lkKCkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikKICAgcmV0dXJuIEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKQEAgLTM4OTMsNyArMzg3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdob2xlUGF0aCkKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKLSAgc3RkOjpzdHJpbmcgcHJvZ3JhbVN0YWNrID0gIiI7CisgIHN0ZDo6c3RyaW5nIHByb2dyYW1TdGFjazsKIAogI2lmZGVmIEtXU1lTX1NZU1RFTUlORk9STUFUSU9OX0hBU19EQkdIRUxQCiAgICh2b2lkKXdob2xlUGF0aDsKQEAgLTQyNDksMzkgKzQyMzUsNDQgQEAKIH0KIAogLyoqICovCi1zaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VG90YWxWaXJ0dWFsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRUb3RhbFZpcnR1YWxNZW1vcnkoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+VG90YWxWaXJ0dWFsTWVtb3J5OwogfQogCiAvKiogKi8KLXNpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkF2YWlsYWJsZVZpcnR1YWxNZW1vcnk7CiB9CiAKLXNpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPlRvdGFsUGh5c2ljYWxNZW1vcnk7CiB9CiAKIC8qKiAqLwotc2l6ZV90IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEF2YWlsYWJsZVBoeXNpY2FsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRBdmFpbGFibGVQaHlzaWNhbE1lbW9yeSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5BdmFpbGFibGVQaHlzaWNhbE1lbW9yeTsKIH0KIAogLyoqIEdldCBDeWNsZSBkaWZmZXJlbmNlcyAqLwotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nCi1TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRDeWNsZXNEaWZmZXJlbmNlKERFTEFZX0ZVTkMgRGVsYXlGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVpUGFyYW1ldGVyKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEN5Y2xlc0RpZmZlcmVuY2UoCisgIERFTEFZX0ZVTkMgRGVsYXlGdW5jdGlvbiwgdW5zaWduZWQgaW50IHVpUGFyYW1ldGVyKQogewogI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQogICB1bnNpZ25lZCBfX2ludDY0IHN0YW1wMSwgc3RhbXAyOwogCisjICBpZmRlZiBfTV9BUk02NAorICBzdGFtcDEgPSBfUmVhZFN0YXR1c1JlZyhBUk02NF9QTUNDTlRSX0VMMCk7CisgIERlbGF5RnVuY3Rpb24odWlQYXJhbWV0ZXIpOworICBzdGFtcDIgPSBfUmVhZFN0YXR1c1JlZyhBUk02NF9QTUNDTlRSX0VMMCk7CisjICBlbHNlCiAgIHN0YW1wMSA9IF9fcmR0c2MoKTsKICAgRGVsYXlGdW5jdGlvbih1aVBhcmFtZXRlcik7CiAgIHN0YW1wMiA9IF9fcmR0c2MoKTsKKyMgIGVuZGlmCiAKICAgcmV0dXJuIHN0YW1wMiAtIHN0YW1wMTsKICNlbGlmIFVTRV9BU01fSU5TVFJVQ1RJT05TCkBAIC00MzUwLDcgKzQzNDEsNyBAQAogfQogCiAvKiogV29ya3Mgb25seSBmb3Igd2luZG93cyAqLwotYm9vbCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpJc1NNVFN1cHBvcnRlZCgpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OklzU01UU3VwcG9ydGVkKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkZlYXR1cmVzLkV4dGVuZGVkRmVhdHVyZXMuTG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbCA+IDE7CiB9CkBAIC00Mzk5LDEyICs0MzkwLDEyIEBACiAgICAgRFdPUkQgTGVuZ3RoID0gMDsKICAgICBEV09SRCByYyA9IHBHZXRMb2dpY2FsUHJvY2Vzc29ySW5mb3JtYXRpb24obnVsbHB0ciwgJkxlbmd0aCk7CiAgICAgYXNzZXJ0KEZBTFNFID09IHJjKTsKLSAgICAodm9pZClyYzsgLy8gU2lsZW5jZSB1bnVzZWQgdmFyaWFibGUgd2FybmluZyBpbiBCb3JsYW5kIEMrKyA1LjgxCisgICAgKHZvaWQpcmM7IC8vIFNpbGVuY2UgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcKICAgICBhc3NlcnQoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUik7CiAgICAgUHJvY0luZm8ucmVzaXplKExlbmd0aCAvIHNpemVvZihTWVNURU1fTE9HSUNBTF9QUk9DRVNTT1JfSU5GT1JNQVRJT04pKTsKICAgICByYyA9IHBHZXRMb2dpY2FsUHJvY2Vzc29ySW5mb3JtYXRpb24oJlByb2NJbmZvWzBdLCAmTGVuZ3RoKTsKICAgICBhc3NlcnQocmMgIT0gRkFMU0UpOwotICAgICh2b2lkKXJjOyAvLyBTaWxlbmNlIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nIGluIEJvcmxhbmQgQysrIDUuODEKKyAgICAodm9pZClyYzsgLy8gU2lsZW5jZSB1bnVzZWQgdmFyaWFibGUgd2FybmluZwogICB9CiAKICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxTWVNURU1fTE9HSUNBTF9QUk9DRVNTT1JfSU5GT1JNQVRJT04+OjppdGVyYXRvcgpAQCAtNDQzMiwxMyArNDQyMywxMyBAQAogfQogCiAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzIG9uIHRoZSBzeXN0ZW0gKi8KLXVuc2lnbmVkIGludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXROdW1iZXJPZkxvZ2ljYWxDUFUoKQordW5zaWduZWQgaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE51bWJlck9mTG9naWNhbENQVSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5OdW1iZXJPZkxvZ2ljYWxDUFU7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwaHlzaWNhbCBDUFVzIG9uIHRoZSBzeXN0ZW0gKi8KLXVuc2lnbmVkIGludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXROdW1iZXJPZlBoeXNpY2FsQ1BVKCkKK3Vuc2lnbmVkIGludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXROdW1iZXJPZlBoeXNpY2FsQ1BVKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPk51bWJlck9mUGh5c2ljYWxDUFU7CiB9CkBAIC00NjM4LDcgKzQ2MjksNyBAQAogICBzaXplX3QgcG9zID0gdGhpcy0+U3lzQ3RsQnVmZmVyLmZpbmQod29yZCk7CiAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBwb3MgPSB0aGlzLT5TeXNDdGxCdWZmZXIuZmluZCgiOiAiLCBwb3MpOwotICAgIHNpemVfdCBwb3MyID0gdGhpcy0+U3lzQ3RsQnVmZmVyLmZpbmQoIlxuIiwgcG9zKTsKKyAgICBzaXplX3QgcG9zMiA9IHRoaXMtPlN5c0N0bEJ1ZmZlci5maW5kKCdcbicsIHBvcyk7CiAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBwb3MyICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICByZXR1cm4gdGhpcy0+U3lzQ3RsQnVmZmVyLnN1YnN0cihwb3MgKyAyLCBwb3MyIC0gcG9zIC0gMik7CiAgICAgfQpAQCAtNDczMywxNCArNDcyNCwxNSBAQAogICAgIH0KICAgICBwb3MgPSBjb21tYW5kLmZpbmQoJyAnLCBwb3MgKyAxKTsKICAgfQotICBhcmdzX3N0cmluZy5wdXNoX2JhY2soY29tbWFuZC5zdWJzdHIoc3RhcnQgKyAxLCBjb21tYW5kLnNpemUoKSAtIHN0YXJ0IC0gMSkpOworICBjb21tYW5kLmVyYXNlKDAsIHN0YXJ0ICsgMSk7CisgIGFyZ3Nfc3RyaW5nLnB1c2hfYmFjayhjb21tYW5kKTsKIAogICBzdGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4gYXJnczsKICAgYXJncy5yZXNlcnZlKDMgKyBhcmdzX3N0cmluZy5zaXplKCkpOwogICBhcmdzLnB1c2hfYmFjaygia3N0YXQiKTsKICAgYXJncy5wdXNoX2JhY2soIi1wIik7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnc19zdHJpbmcuc2l6ZSgpOyArK2kpIHsKLSAgICBhcmdzLnB1c2hfYmFjayhhcmdzX3N0cmluZ1tpXS5jX3N0cigpKTsKKyAgZm9yIChhdXRvJiBpIDogYXJnc19zdHJpbmcpIHsKKyAgICBhcmdzLnB1c2hfYmFjayhpLmNfc3RyKCkpOwogICB9CiAgIGFyZ3MucHVzaF9iYWNrKG51bGxwdHIpOwogCkBAIC00OTIyLDcgKzQ5MTQsOSBAQAogICB3aGlsZSAoYnVmZmVyW3Bvc10gPT0gJyAnKQogICAgIHBvcysrOwogCi0gIHRoaXMtPlRvdGFsUGh5c2ljYWxNZW1vcnkgPSBhdG9pKGJ1ZmZlci5zdWJzdHIocG9zLCBwb3MyIC0gcG9zKS5jX3N0cigpKTsKKyAgYnVmZmVyLmVyYXNlKDAsIHBvcyk7CisgIGJ1ZmZlci5yZXNpemUocG9zMik7CisgIHRoaXMtPlRvdGFsUGh5c2ljYWxNZW1vcnkgPSBhdG9pKGJ1ZmZlci5jX3N0cigpKTsKICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0NywxOSArNTQ0MSwxOSBAQAogewogICAvLyByZW1vdmUgXHIKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSAwOwotICB3aGlsZSAoKHBvcyA9IG91dHB1dC5maW5kKCJcciIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgIHdoaWxlICgocG9zID0gb3V0cHV0LmZpbmQoJ1xyJywgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBvdXRwdXQuZXJhc2UocG9zKTsKICAgfQogCiAgIC8vIHJlbW92ZSBcbgogICBwb3MgPSAwOwotICB3aGlsZSAoKHBvcyA9IG91dHB1dC5maW5kKCJcbiIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgIHdoaWxlICgocG9zID0gb3V0cHV0LmZpbmQoJ1xuJywgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBvdXRwdXQuZXJhc2UocG9zKTsKICAgfQogfQogCiAvKiogUmV0dXJuIHRydWUgaWYgdGhlIG1hY2hpbmUgaXMgNjQgYml0cyAqLwotYm9vbCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpJczY0Qml0cygpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OklzNjRCaXRzKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPk9TSXM2NEJpdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvU3lzdGVtSW5mb3JtYXRpb24uaHh4LmluCmluZGV4IGZjNDJlOWQuLmM4ZWZkNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL1N5c3RlbUluZm9ybWF0aW9uLmh4eC5pbgpAQCAtMTUsMTMgKzE1LDYgQEAKIAogY2xhc3MgQEtXU1lTX05BTUVTUEFDRUBfRVhQT1JUIFN5c3RlbUluZm9ybWF0aW9uCiB7Ci0jaWYgQEtXU1lTX1VTRV9MT05HX0xPTkdACi0gIHR5cGVkZWYgbG9uZyBsb25nIExvbmdMb25nOwotI2VsaWYgQEtXU1lTX1VTRV9fX0lOVDY0QAotICB0eXBlZGVmIF9faW50NjQgTG9uZ0xvbmc7Ci0jZWxzZQotIyAgZXJyb3IgIk5vIExvbmcgTG9uZyIKLSNlbmRpZgogICBmcmllbmQgY2xhc3MgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjsKICAgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbiogSW1wbGVtZW50YXRpb247CiAKQEAgLTEwNCw3ICs5Nyw3IEBACiAgIGJvb2wgRG9lc0NQVVN1cHBvcnRDUFVJRCgpOwogCiAgIC8vIFJldHJpZXZlIGlkIG9mIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2VzcwotICBMb25nTG9uZyBHZXRQcm9jZXNzSWQoKTsKKyAgbG9uZyBsb25nIEdldFByb2Nlc3NJZCgpOwogCiAgIC8vIFJldHJpZXZlIG1lbW9yeSBpbmZvcm1hdGlvbiBpbiBNaUIuCiAgIHNpemVfdCBHZXRUb3RhbFZpcnR1YWxNZW1vcnkoKTsKQEAgLTEyMCw3ICsxMTMsNyBAQAogCiAgIC8vIFJldHJpZXZlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnkgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gaW4gS2lCCiAgIC8vIHVuaXRzLgotICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5VG90YWwoKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlUb3RhbCgpOwogCiAgIC8vIEdldCB0b3RhbCBzeXN0ZW0gUkFNIGluIHVuaXRzIG9mIEtpQiBhdmFpbGFibGUgY29sZWN0aXZsZXkgdG8gYWxsCiAgIC8vIHByb2Nlc3NlcyBpbiBhIHByb2Nlc3MgZ3JvdXAuIEFuIGV4YW1wbGUgb2YgYSBwcm9jZXNzIGdyb3VwCkBAIC0xMjgsNyArMTIxLDcgQEAKICAgLy8gcGFyYWxsZWwuIFRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcG9ydGVkIG1heSBkaWZmZXIgZnJvbSB0aGUgaG9zdAogICAvLyB0b3RhbCBpZiBhIGhvc3Qgd2lkZSByZXNvdXJjZSBsaW1pdCBpcyBhcHBsaWVkLiBTdWNoIHJlb3VyY2UgbGltaXRzCiAgIC8vIGFyZSByZXBvcnRlZCB0byB1cyB2aWEgYW4gYXBwbGljYXRpb24gc3BlY2lmaWVkIGVudmlyb25tZW50IHZhcmlhYmxlLgotICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGNvbnN0IGNoYXIqIGhvc3RMaW1pdEVudlZhck5hbWUgPSBudWxscHRyKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIpOwogCiAgIC8vIEdldCB0b3RhbCBzeXN0ZW0gUkFNIGluIHVuaXRzIG9mIEtpQiBhdmFpbGFibGUgdG8gdGhpcyBwcm9jZXNzLgogICAvLyBUaGlzIG1heSBkaWZmZXIgZnJvbSB0aGUgaG9zdCBhdmFpbGFibGUgaWYgYSBwZXItcHJvY2VzcyByZXNvdXJjZQpAQCAtMTM2LDE0ICsxMjksMTQgQEAKICAgLy8gc3lzdGVtIHZpYSBybGltaXQgQVBJLiBSZXNvdXJjZSBsaW1pdHMgdGhhdCBhcmUgbm90IGltcG9zZWQgdmlhCiAgIC8vIHJsaW1pdCBBUEkgbWF5IGJlIHJlcG9ydGVkIHRvIHVzIHZpYSBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpZWQKICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gIExvbmdMb25nIEdldFByb2NNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIpOworICBsb25nIGxvbmcgR2V0UHJvY01lbW9yeUF2YWlsYWJsZShjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lID0gbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIpOwogCiAgIC8vIEdldCB0aGUgc3lzdGVtIFJBTSB1c2VkIGJ5IGFsbCBwcm9jZXNzZXMgb24gdGhlIGhvc3QsIGluIHVuaXRzIG9mIEtpQi4KLSAgTG9uZ0xvbmcgR2V0SG9zdE1lbW9yeVVzZWQoKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlVc2VkKCk7CiAKICAgLy8gR2V0IHN5c3RlbSBSQU0gdXNlZCBieSB0aGlzIHByb2Nlc3MgaWQgaW4gdW5pdHMgb2YgS2lCLgotICBMb25nTG9uZyBHZXRQcm9jTWVtb3J5VXNlZCgpOworICBsb25nIGxvbmcgR2V0UHJvY01lbW9yeVVzZWQoKTsKIAogICAvLyBSZXR1cm4gdGhlIGxvYWQgYXZlcmFnZSBvZiB0aGUgbWFjaGluZSBvciAtMC4wIGlmIGl0IGNhbm5vdAogICAvLyBiZSBkZXRlcm1pbmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmN4eCBiL1NvdXJjZS9rd3N5cy9TeXN0ZW1Ub29scy5jeHgKaW5kZXggZDI3MDgxYi4uMjU3MDVlYSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtVG9vbHMuY3h4CkBAIC02LDkgKzYsNyBAQAogIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgICAgICBcCi0gICBkZWZpbmVkKF9fTUlOR1czMl9fKSkKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgKGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pKQogIyAgZGVmaW5lIEtXU1lTX1dJTkRPV1NfRElSUwogI2Vsc2UKICMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCkBAIC0yNCw2ICsyMiw3IEBACiAjaW5jbHVkZSBLV1NZU19IRUFERVIoRW5jb2RpbmcuaCkKICNpbmNsdWRlIEtXU1lTX0hFQURFUihFbmNvZGluZy5oeHgpCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8ZnN0cmVhbT4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzZXQ+CkBAIC00OSwyNyArNDgsMjcgQEAKICMgIHByYWdtYSBzZXQgd29mZiAxMzc1IC8qIGJhc2UgY2xhc3MgZGVzdHJ1Y3RvciBub3QgdmlydHVhbCAqLwogI2VuZGlmCiAKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUgPGNlcnJubz4KICNpZmRlZiBfX1FOWF9fCiAjICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogZm9yIG1hbGxvYy9mcmVlIG9uIFFOWCAqLwogI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxjdGltZT4KIAogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfX0dOVUNfXykKICMgIGluY2x1ZGUgPHN0cmluZ3MuaD4gLyogZm9yIHN0cmNhc2VjbXAgKi8KICNlbmRpZgogCiAjaWZkZWYgX01TQ19WRVIKLSMgIGRlZmluZSB1bWFzayBfdW1hc2sgLy8gTm90ZSB0aGlzIGlzIHN0aWxsIHVtYXNrIG9uIEJvcmxhbmQKKyMgIGRlZmluZSB1bWFzayBfdW1hc2sKICNlbmRpZgogCiAvLyBzdXBwb3J0IGZvciByZWFscGF0aCBjYWxsCiAjaWZuZGVmIF9XSU4zMgotIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpbmNsdWRlIDxjbGltaXRzPgogIyAgaW5jbHVkZSA8cHdkLmg+CiAjICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CkBAIC04MCw3ICs3OSw3IEBACiAjICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgogIyAgICBpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjICBlbmRpZgotIyAgaW5jbHVkZSA8c2lnbmFsLmg+IC8qIHNpZ3Byb2NtYXNrICovCisjICBpbmNsdWRlIDxjc2lnbmFsPiAvKiBzaWdwcm9jbWFzayAqLwogI2VuZGlmCiAKICNpZmRlZiBfX2xpbnV4CkBAIC0xMjMsOSArMTIyLDkgQEAKIAogI2RlZmluZSBWVEtfVVJMX1BST1RPQ09MX1JFR0VYICIoW2EtekEtWjAtOV0qKTovLyguKikiCiAjZGVmaW5lIFZUS19VUkxfUkVHRVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICIoW2EtekEtWjAtOV0qKTovLygoW0EtWmEtejAtOV0rKSg6KFteOkBdKykpP0ApPyhbXjpAL10rKSg6KFswLTldKykpPy8iICAgICBcCisgICIoW2EtekEtWjAtOV0qKTovLygoW0EtWmEtejAtOV0rKSg6KFteOkBdKykpP0ApPyhbXjpAL10qKSg6KFswLTldKykpPy8iICAgICBcCiAgICIoLispPyIKLQorI2RlZmluZSBWVEtfVVJMX0JZVEVfUkVHRVggIiVbMC05YS1mQS1GXVswLTlhLWZBLUZdIgogI2lmZGVmIF9NU0NfVkVSCiAjICBpbmNsdWRlIDxzeXMvdXRpbWUuaD4KICNlbHNlCkBAIC0xNTMsOSArMTUyLDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgICAgICBcCi0gICBkZWZpbmVkKF9fTUlOR1czMl9fKSkKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgKGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pKQogIyAgaW5jbHVkZSA8ZGlyZWN0Lmg+CiAjICBpbmNsdWRlIDxpby5oPgogIyAgZGVmaW5lIF91bmxpbmsgdW5saW5rCkBAIC0xNjksMTMgKzE2Niw2IEBACiAjZWxzZQogIyAgZGVmaW5lIEtXU1lTX1NZU1RFTVRPT0xTX01BWFBBVEggMTYzODQKICNlbmRpZgotI2lmIGRlZmluZWQoX19XQVRDT01DX18pCi0jICBpbmNsdWRlIDxkaXJlY3QuaD4KLSMgIGRlZmluZSBfbWtkaXIgbWtkaXIKLSMgIGRlZmluZSBfcm1kaXIgcm1kaXIKLSMgIGRlZmluZSBfZ2V0Y3dkIGdldGN3ZAotIyAgZGVmaW5lIF9jaGRpciBjaGRpcgotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fQkVPU19fKSAmJiAhZGVmaW5lZChfX1pFVEFfXykKICMgIGluY2x1ZGUgPGJlL2tlcm5lbC9PUy5oPgpAQCAtMjIxLDExICsyMTEsMTcgQEAKIAogI2lmZGVmIEtXU1lTX1dJTkRPV1NfRElSUwogIyAgaW5jbHVkZSA8d2N0eXBlLmg+CisjICBpZmRlZiBfTVNDX1ZFUgordHlwZWRlZiBLV1NZU19OQU1FU1BBQ0U6OlN5c3RlbVRvb2xzOjptb2RlX3QgbW9kZV90OworIyAgZW5kaWYKIAotaW5saW5lIGludCBNa2Rpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyKQoraW5saW5lIGludCBNa2Rpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyLCBjb25zdCBtb2RlX3QqIG1vZGUpCiB7Ci0gIHJldHVybiBfd21rZGlyKAotICAgIEtXU1lTX05BTUVTUEFDRTo6RW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChkaXIpLmNfc3RyKCkpOworICBpbnQgcmV0ID0KKyAgICBfd21rZGlyKEtXU1lTX05BTUVTUEFDRTo6RW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChkaXIpLmNfc3RyKCkpOworICBpZiAocmV0ID09IDAgJiYgbW9kZSkKKyAgICBLV1NZU19OQU1FU1BBQ0U6OlN5c3RlbVRvb2xzOjpTZXRQZXJtaXNzaW9ucyhkaXIsICptb2RlKTsKKyAgcmV0dXJuIHJldDsKIH0KIGlubGluZSBpbnQgUm1kaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcikKIHsKQEAgLTI1MiwxMSArMjQ4LDcgQEAKIH0KIGlubGluZSBpbnQgQ2hkaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcikKIHsKLSMgIGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotICByZXR1cm4gY2hkaXIoZGlyLmNfc3RyKCkpOwotIyAgZWxzZQogICByZXR1cm4gX3djaGRpcihLV1NZU19OQU1FU1BBQ0U6OkVuY29kaW5nOjpUb1dpZGUoZGlyKS5jX3N0cigpKTsKLSMgIGVuZGlmCiB9CiBpbmxpbmUgdm9pZCBSZWFscGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwgc3RkOjpzdHJpbmcmIHJlc29sdmVkX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkKQEAgLTI5NSw5ICsyODcsOSBAQAogCiAjICBpbmNsdWRlIDxmY250bC5oPgogIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci1pbmxpbmUgaW50IE1rZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIpCitpbmxpbmUgaW50IE1rZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIsIGNvbnN0IG1vZGVfdCogbW9kZSkKIHsKLSAgcmV0dXJuIG1rZGlyKGRpci5jX3N0cigpLCAwMDc3Nyk7CisgIHJldHVybiBta2RpcihkaXIuY19zdHIoKSwgbW9kZSA/ICptb2RlIDogMDA3NzcpOwogfQogaW5saW5lIGludCBSbWRpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyKQogewpAQCAtMzUwLDcgKzM0Miw3IEBACiAKIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UgewogCi1kb3VibGUgU3lzdGVtVG9vbHM6OkdldFRpbWUodm9pZCkKK2RvdWJsZSBTeXN0ZW1Ub29sczo6R2V0VGltZSgpCiB7CiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgIEZJTEVUSU1FIGZ0OwpAQCAtMzY4LDcgKzM2MCw3IEBACiAjaWYgZGVmaW5lZChfV0lOMzIpCiB0eXBlZGVmIHdjaGFyX3QgZW52Y2hhcjsKICNlbHNlCi10eXBlZGVmIGNoYXIgZW52Y2hhcjsKK3VzaW5nIGVudmNoYXIgPSBjaGFyOwogI2VuZGlmCiAKIC8qIE9yZGVyIGJ5IGVudmlyb25tZW50IGtleSBvbmx5IChWQVIgZnJvbSBWQVI9VkFMVUUpLiAgKi8KQEAgLTQyMSw3ICs0MTMsNyBAQAogICBjb25zdCBlbnZjaGFyKiBSZWxlYXNlKGNvbnN0IGVudmNoYXIqIGVudikKICAgewogICAgIGNvbnN0IGVudmNoYXIqIG9sZCA9IG51bGxwdHI7Ci0gICAgaXRlcmF0b3IgaSA9IHRoaXMtPmZpbmQoZW52KTsKKyAgICBhdXRvIGkgPSB0aGlzLT5maW5kKGVudik7CiAgICAgaWYgKGkgIT0gdGhpcy0+ZW5kKCkpIHsKICAgICAgIG9sZCA9ICppOwogICAgICAgdGhpcy0+ZXJhc2UoaSk7CkBAIC00NTIsNyArNDQ0LDcgQEAKIGNsYXNzIFN5c3RlbVRvb2xzU3RhdGljCiB7CiBwdWJsaWM6Ci0gIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBTdHJpbmdNYXA7CisgIHVzaW5nIFN0cmluZ01hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz47CiAjaWYgS1dTWVNfU1lTVEVNVE9PTFNfVVNFX1RSQU5TTEFUSU9OX01BUAogICAvKioKICAgICogUGF0aCB0cmFuc2xhdGlvbiB0YWJsZSBmcm9tIGRpciB0byByZWZkaXIKQEAgLTQ4OCwxMCArNDgwLDEzIEBACiAgICAqLwogICBzdGF0aWMgc3RkOjpzdHJpbmcgRmluZE5hbWUoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXRoID0gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB1c2VyUGF0aHMgPSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwKICAgICBib29sIG5vX3N5c3RlbV9wYXRoID0gZmFsc2UpOwogfTsKIAorLy8gRG8gTk9UIGluaXRpYWxpemUuICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIHRvIHplcm8gaXMgbmVjZXNzYXJ5Lgorc3RhdGljIFN5c3RlbVRvb2xzU3RhdGljKiBTeXN0ZW1Ub29sc1N0YXRpY3M7CisKICNpZmRlZiBfV0lOMzIKIHN0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzU3RhdGljOjpHZXRDYXNlUGF0aE5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIHBhdGhJbikKIHsKQEAgLTU2Niw3ICs1NjEsNyBAQAogewogICAvLyBDaGVjayB0byBzZWUgaWYgYWN0dWFsIGNhc2UgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKICAgLy8gZm9yIHRoaXMgcGF0aCwgYW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSBQYXRoQ2FzZU1hcAotICBhdXRvJiBwY20gPSBTeXN0ZW1Ub29sczo6U3RhdGljcy0+UGF0aENhc2VNYXA7CisgIGF1dG8mIHBjbSA9IFN5c3RlbVRvb2xzU3RhdGljcy0+UGF0aENhc2VNYXA7CiAgIHsKICAgICBhdXRvIGl0ciA9IHBjbS5maW5kKHApOwogICAgIGlmIChpdHIgIT0gcGNtLmVuZCgpKSB7CkBAIC02MTMsOCArNjA4LDcgQEAKICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH0KICAgfQotICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6aXRlcmF0b3IgaSA9IHBhdGguYmVnaW4oKSArIG9sZF9zaXplOwotICAgICAgIGkgIT0gcGF0aC5lbmQoKTsgKytpKSB7CisgIGZvciAoYXV0byBpID0gcGF0aC5iZWdpbigpICsgb2xkX3NpemU7IGkgIT0gcGF0aC5lbmQoKTsgKytpKSB7CiAgICAgU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKCppKTsKICAgfQogfQpAQCAtNjI0LDcgKzYxOCw3IEBACiB7CiAgIHN0ZDo6c3RyaW5nIGVudjsKICAgaWYgKFN5c3RlbVRvb2xzOjpHZXRFbnYoa2V5LCBlbnYpKSB7Ci0gICAgc3RkOjpzdHJpbmcmIG1lbnYgPSBTeXN0ZW1Ub29sczo6U3RhdGljcy0+RW52TWFwW2tleV07CisgICAgc3RkOjpzdHJpbmcmIG1lbnYgPSBTeXN0ZW1Ub29sc1N0YXRpY3MtPkVudk1hcFtrZXldOwogICAgIGlmIChtZW52ICE9IGVudikgewogICAgICAgbWVudiA9IHN0ZDo6bW92ZShlbnYpOwogICAgIH0KQEAgLTg4NCw4ICs4NzgsMTIgQEAKIEZJTEUqIFN5c3RlbVRvb2xzOjpGb3Blbihjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSwgY29uc3QgY2hhciogbW9kZSkKIHsKICNpZmRlZiBfV0lOMzIKKyAgLy8gUmVtb3ZlIGFueSAnZScsIHdoaWNoIGlzIHN1cHBvcnRlZCBvbiBVTklYLCBidXQgbm90IFdpbmRvd3MuCisgIHN0ZDo6d3N0cmluZyB0cmltbWVkTW9kZSA9IEVuY29kaW5nOjpUb1dpZGUobW9kZSk7CisgIHRyaW1tZWRNb2RlLmVyYXNlKHN0ZDo6cmVtb3ZlKHRyaW1tZWRNb2RlLmJlZ2luKCksIHRyaW1tZWRNb2RlLmVuZCgpLCBMJ2UnKSwKKyAgICAgICAgICAgICAgICAgICAgdHJpbW1lZE1vZGUuZW5kKCkpOwogICByZXR1cm4gX3dmb3BlbihFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGZpbGUpLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgIEVuY29kaW5nOjpUb1dpZGUobW9kZSkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgIHRyaW1tZWRNb2RlLmNfc3RyKCkpOwogI2Vsc2UKICAgcmV0dXJuIGZvcGVuKGZpbGUuY19zdHIoKSwgbW9kZSk7CiAjZW5kaWYKQEAgLTkxMywyOSArOTExLDIyIEBACiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gMDsKICAgc3RkOjpzdHJpbmcgdG9wZGlyOwogICB3aGlsZSAoKHBvcyA9IGRpci5maW5kKCcvJywgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICB0b3BkaXIgPSBkaXIuc3Vic3RyKDAsIHBvcyk7CisgICAgLy8gYWxsIHVuZGVybHlpbmcgZnVuY3Rpb25zIHVzZSBDIHN0cmluZ3MsIHNvIHRlbXBvcmFyaWx5CisgICAgLy8gZW5kIHRoZSBzdHJpbmcgaGVyZQorICAgIGRpcltwb3NdID0gJ1wwJzsKIAotICAgIGlmIChNa2Rpcih0b3BkaXIpID09IDAgJiYgbW9kZSAhPSBudWxscHRyKSB7Ci0gICAgICBTeXN0ZW1Ub29sczo6U2V0UGVybWlzc2lvbnModG9wZGlyLCAqbW9kZSk7Ci0gICAgfQorICAgIE1rZGlyKGRpciwgbW9kZSk7CisgICAgZGlyW3Bvc10gPSAnLyc7CiAKICAgICArK3BvczsKICAgfQogICB0b3BkaXIgPSBkaXI7Ci0gIGlmIChNa2Rpcih0b3BkaXIpICE9IDApIHsKLSAgICAvLyBUaGVyZSBpcyBhIGJ1ZyBpbiB0aGUgQm9ybGFuZCBSdW4gdGltZSBsaWJyYXJ5IHdoaWNoIG1ha2VzIE1LRElSCi0gICAgLy8gcmV0dXJuIEVBQ0NFUyB3aGVuIGl0IHNob3VsZCByZXR1cm4gRUVYSVNUUworICBpZiAoTWtkaXIodG9wZGlyLCBtb2RlKSAhPSAwKSB7CiAgICAgLy8gaWYgaXQgaXMgc29tZSBvdGhlciBlcnJvciBiZXNpZGVzIGRpcmVjdG9yeSBleGlzdHMKICAgICAvLyB0aGVuIHJldHVybiBmYWxzZQotICAgIGlmICgoZXJybm8gIT0gRUVYSVNUKQotI2lmZGVmIF9fQk9STEFORENfXwotICAgICAgICAmJiAoZXJybm8gIT0gRUFDQ0VTKQotI2VuZGlmCi0gICAgKSB7CisgICAgaWYgKGVycm5vICE9IEVFWElTVCkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgfSBlbHNlIGlmIChtb2RlICE9IG51bGxwdHIpIHsKLSAgICBTeXN0ZW1Ub29sczo6U2V0UGVybWlzc2lvbnModG9wZGlyLCAqbW9kZSk7CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKQEAgLTEwMTEsMzggKzEwMDIsNDAgQEAKICMgICAgZGVmaW5lIEtXU1lTX1NUX0tFWV9XT1c2NF82NEtFWSAweDAxMDAKICMgIGVuZGlmCiAKLXN0YXRpYyBib29sIFN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShjb25zdCBzdGQ6OnN0cmluZyYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhLRVkmIHByaW1hcnlLZXksIHN0ZDo6c3RyaW5nJiBzZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHZhbHVlbmFtZSkKK3N0YXRpYyBib29sIGhhc1ByZWZpeChjb25zdCBzdGQ6OnN0cmluZyYgcywgY29uc3QgY2hhciogcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwb3MpCiB7Ci0gIHN0ZDo6c3RyaW5nIHByaW1hcnkgPSBrZXk7CisgIHNpemVfdCBwbGVuID0gc3RybGVuKHBhdHRlcm4pOworICBpZiAoc3BvcyAhPSBwbGVuKQorICAgIHJldHVybiBmYWxzZTsKKyAgcmV0dXJuIHMuY29tcGFyZSgwLCBwbGVuLCBwYXR0ZXJuKSA9PSAwOworfQogCi0gIHNpemVfdCBzdGFydCA9IHByaW1hcnkuZmluZCgnXFwnKTsKK3N0YXRpYyBib29sIFN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShjb25zdCBzdGQ6OnN0cmluZyYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhLRVkmIHByaW1hcnlLZXksIHN0ZDo6d3N0cmluZyYgc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiB2YWx1ZW5hbWUpCit7CisgIHNpemVfdCBzdGFydCA9IGtleS5maW5kKCdcXCcpOwogICBpZiAoc3RhcnQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBzaXplX3QgdmFsdWVuYW1lcG9zID0gcHJpbWFyeS5maW5kKCc7Jyk7Ci0gIGlmICh2YWx1ZW5hbWVwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICB2YWx1ZW5hbWUgPSBwcmltYXJ5LnN1YnN0cih2YWx1ZW5hbWVwb3MgKyAxKTsKKyAgc2l6ZV90IHZhbHVlbmFtZXBvcyA9IGtleS5maW5kKCc7Jyk7CisgIGlmICh2YWx1ZW5hbWVwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgdmFsdWVuYW1lKSB7CisgICAgKnZhbHVlbmFtZSA9IGtleS5zdWJzdHIodmFsdWVuYW1lcG9zICsgMSk7CiAgIH0KIAotICBzZWNvbmQgPSBwcmltYXJ5LnN1YnN0cihzdGFydCArIDEsIHZhbHVlbmFtZXBvcyAtIHN0YXJ0IC0gMSk7Ci0gIHByaW1hcnkgPSBwcmltYXJ5LnN1YnN0cigwLCBzdGFydCk7CisgIHNlY29uZCA9IEVuY29kaW5nOjpUb1dpZGUoa2V5LnN1YnN0cihzdGFydCArIDEsIHZhbHVlbmFtZXBvcyAtIHN0YXJ0IC0gMSkpOwogCi0gIGlmIChwcmltYXJ5ID09ICJIS0VZX0NVUlJFTlRfVVNFUiIpIHsKKyAgaWYgKGhhc1ByZWZpeChrZXksICJIS0VZX0NVUlJFTlRfVVNFUiIsIHN0YXJ0KSkgewogICAgIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfVVNFUjsKLSAgfQotICBpZiAocHJpbWFyeSA9PSAiSEtFWV9DVVJSRU5UX0NPTkZJRyIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9DVVJSRU5UX0NPTkZJRyIsIHN0YXJ0KSkgewogICAgIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfQ09ORklHOwotICB9Ci0gIGlmIChwcmltYXJ5ID09ICJIS0VZX0NMQVNTRVNfUk9PVCIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9DTEFTU0VTX1JPT1QiLCBzdGFydCkpIHsKICAgICBwcmltYXJ5S2V5ID0gSEtFWV9DTEFTU0VTX1JPT1Q7Ci0gIH0KLSAgaWYgKHByaW1hcnkgPT0gIkhLRVlfTE9DQUxfTUFDSElORSIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9MT0NBTF9NQUNISU5FIiwgc3RhcnQpKSB7CiAgICAgcHJpbWFyeUtleSA9IEhLRVlfTE9DQUxfTUFDSElORTsKLSAgfQotICBpZiAocHJpbWFyeSA9PSAiSEtFWV9VU0VSUyIpIHsKKyAgfSBlbHNlIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9VU0VSUyIsIHN0YXJ0KSkgewogICAgIHByaW1hcnlLZXkgPSBIS0VZX1VTRVJTOwogICB9CiAKQEAgLTEwNzQsMTQgKzEwNjcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlXT1c2NCB2aWV3KQogewogICBIS0VZIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfVVNFUjsKLSAgc3RkOjpzdHJpbmcgc2Vjb25kOwotICBzdGQ6OnN0cmluZyB2YWx1ZW5hbWU7Ci0gIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCB2YWx1ZW5hbWUpKSB7CisgIHN0ZDo6d3N0cmluZyBzZWNvbmQ7CisgIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCBudWxscHRyKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIEhLRVkgaEtleTsKLSAgaWYgKFJlZ09wZW5LZXlFeFcocHJpbWFyeUtleSwgRW5jb2Rpbmc6OlRvV2lkZShzZWNvbmQpLmNfc3RyKCksIDAsCisgIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIHNlY29uZC5jX3N0cigpLCAwLAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Ub29sc01ha2VSZWdpc3RyeU1vZGUoS0VZX1JFQUQsIHZpZXcpLAogICAgICAgICAgICAgICAgICAgICAmaEtleSkgIT0gRVJST1JfU1VDQ0VTUykgewogICAgIHJldHVybiBmYWxzZTsKQEAgLTExMjEsMTQgKzExMTMsMTQgQEAKIHsKICAgYm9vbCB2YWx1ZXNldCA9IGZhbHNlOwogICBIS0VZIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfVVNFUjsKLSAgc3RkOjpzdHJpbmcgc2Vjb25kOworICBzdGQ6OndzdHJpbmcgc2Vjb25kOwogICBzdGQ6OnN0cmluZyB2YWx1ZW5hbWU7Ci0gIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCB2YWx1ZW5hbWUpKSB7CisgIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCAmdmFsdWVuYW1lKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIEhLRVkgaEtleTsKLSAgaWYgKFJlZ09wZW5LZXlFeFcocHJpbWFyeUtleSwgRW5jb2Rpbmc6OlRvV2lkZShzZWNvbmQpLmNfc3RyKCksIDAsCisgIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIHNlY29uZC5jX3N0cigpLCAwLAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Ub29sc01ha2VSZWdpc3RyeU1vZGUoS0VZX1JFQUQsIHZpZXcpLAogICAgICAgICAgICAgICAgICAgICAmaEtleSkgIT0gRVJST1JfU1VDQ0VTUykgewogICAgIHJldHVybiBmYWxzZTsKQEAgLTExNzUsMTYgKzExNjcsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIEtleVdPVzY0IHZpZXcpCiB7CiAgIEhLRVkgcHJpbWFyeUtleSA9IEhLRVlfQ1VSUkVOVF9VU0VSOwotICBzdGQ6OnN0cmluZyBzZWNvbmQ7CisgIHN0ZDo6d3N0cmluZyBzZWNvbmQ7CiAgIHN0ZDo6c3RyaW5nIHZhbHVlbmFtZTsKLSAgaWYgKCFTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoa2V5LCBwcmltYXJ5S2V5LCBzZWNvbmQsIHZhbHVlbmFtZSkpIHsKKyAgaWYgKCFTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoa2V5LCBwcmltYXJ5S2V5LCBzZWNvbmQsICZ2YWx1ZW5hbWUpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgSEtFWSBoS2V5OwogICBEV09SRCBkd0R1bW15OwogICB3Y2hhcl90IGxwQ2xhc3NbXSA9IEwiIjsKLSAgaWYgKFJlZ0NyZWF0ZUtleUV4VyhwcmltYXJ5S2V5LCBFbmNvZGluZzo6VG9XaWRlKHNlY29uZCkuY19zdHIoKSwgMCwgbHBDbGFzcywKKyAgaWYgKFJlZ0NyZWF0ZUtleUV4VyhwcmltYXJ5S2V5LCBzZWNvbmQuY19zdHIoKSwgMCwgbHBDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICBSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwKICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Ub29sc01ha2VSZWdpc3RyeU1vZGUoS0VZX1dSSVRFLCB2aWV3KSwgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAmaEtleSwgJmR3RHVtbXkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKQEAgLTEyMTksMTQgKzEyMTEsMTQgQEAKIGJvb2wgU3lzdGVtVG9vbHM6OkRlbGV0ZVJlZ2lzdHJ5VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgS2V5V09XNjQgdmlldykKIHsKICAgSEtFWSBwcmltYXJ5S2V5ID0gSEtFWV9DVVJSRU5UX1VTRVI7Ci0gIHN0ZDo6c3RyaW5nIHNlY29uZDsKKyAgc3RkOjp3c3RyaW5nIHNlY29uZDsKICAgc3RkOjpzdHJpbmcgdmFsdWVuYW1lOwotICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgdmFsdWVuYW1lKSkgeworICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgJnZhbHVlbmFtZSkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBIS0VZIGhLZXk7Ci0gIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIEVuY29kaW5nOjpUb1dpZGUoc2Vjb25kKS5jX3N0cigpLCAwLAorICBpZiAoUmVnT3BlbktleUV4VyhwcmltYXJ5S2V5LCBzZWNvbmQuY19zdHIoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVG9vbHNNYWtlUmVnaXN0cnlNb2RlKEtFWV9XUklURSwgdmlldyksCiAgICAgICAgICAgICAgICAgICAgICZoS2V5KSAhPSBFUlJPUl9TVUNDRVNTKSB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQzNSwxMSArMTQyNyw3IEBACiAgIC8vIGxvbmcgcGF0aHMsIGJ1dCBfd3N0YXQ2NCByZWplY3RzIHBhdGhzIHdpdGggJz8nIGluIHRoZW0sIHRoaW5raW5nCiAgIC8vIHRoZXkgYXJlIHdpbGRjYXJkcy4KICAgc3RkOjp3c3RyaW5nIGNvbnN0JiB3cGF0aCA9IEVuY29kaW5nOjpUb1dpZGUocGF0aCk7Ci0jICBpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSAgcmV0dXJuIF93c3RhdGk2NCh3cGF0aC5jX3N0cigpLCBidWYpOwotIyAgZWxzZQogICByZXR1cm4gX3dzdGF0NjQod3BhdGguY19zdHIoKSwgYnVmKTsKLSMgIGVuZGlmCiAjZWxzZQogICByZXR1cm4gc3RhdChwYXRoLmNfc3RyKCksIGJ1Zik7CiAjZW5kaWYKQEAgLTE0NDgsMTUgKzE0MzYsMTUgQEAKICNpZmRlZiBfX0NZR1dJTl9fCiBib29sIFN5c3RlbVRvb2xzOjpQYXRoQ3lnd2luVG9XaW4zMihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiB3aW4zMl9wYXRoKQogewotICBhdXRvIGl0ciA9IFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5DeWcyV2luMzJNYXAuZmluZChwYXRoKTsKLSAgaWYgKGl0ciAhPSBTeXN0ZW1Ub29sczo6U3RhdGljcy0+Q3lnMldpbjMyTWFwLmVuZCgpKSB7CisgIGF1dG8gaXRyID0gU3lzdGVtVG9vbHNTdGF0aWNzLT5DeWcyV2luMzJNYXAuZmluZChwYXRoKTsKKyAgaWYgKGl0ciAhPSBTeXN0ZW1Ub29sc1N0YXRpY3MtPkN5ZzJXaW4zMk1hcC5lbmQoKSkgewogICAgIHN0cm5jcHkod2luMzJfcGF0aCwgaXRyLT5zZWNvbmQuY19zdHIoKSwgTUFYX1BBVEgpOwogICB9IGVsc2UgewogICAgIGlmIChjeWd3aW5fY29udl9wYXRoKENDUF9QT1NJWF9UT19XSU5fQSwgcGF0aCwgd2luMzJfcGF0aCwgTUFYX1BBVEgpICE9CiAgICAgICAgIDApIHsKICAgICAgIHdpbjMyX3BhdGhbMF0gPSAwOwogICAgIH0KLSAgICBTeXN0ZW1Ub29sczo6U3RhdGljcy0+Q3lnMldpbjMyTWFwLmluc2VydCgKKyAgICBTeXN0ZW1Ub29sc1N0YXRpY3MtPkN5ZzJXaW4zMk1hcC5pbnNlcnQoCiAgICAgICBTeXN0ZW1Ub29sc1N0YXRpYzo6U3RyaW5nTWFwOjp2YWx1ZV90eXBlKHBhdGgsIHdpbjMyX3BhdGgpKTsKICAgfQogICByZXR1cm4gd2luMzJfcGF0aFswXSAhPSAwOwpAQCAtMTg1OCw3ICsxODQ2LDcgQEAKIC8vIFJldHVybiBhIGNyb3BwZWQgc3RyaW5nCiBzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q3JvcFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgcywgc2l6ZV90IG1heF9sZW4pCiB7Ci0gIGlmICghcy5zaXplKCkgfHwgbWF4X2xlbiA9PSAwIHx8IG1heF9sZW4gPj0gcy5zaXplKCkpIHsKKyAgaWYgKHMuZW1wdHkoKSB8fCBtYXhfbGVuID09IDAgfHwgbWF4X2xlbiA+PSBzLnNpemUoKSkgewogICAgIHJldHVybiBzOwogICB9CiAKQEAgLTE4NjcsNyArMTg1NSw3IEBACiAKICAgc2l6ZV90IG1pZGRsZSA9IG1heF9sZW4gLyAyOwogCi0gIG4gKz0gcy5zdWJzdHIoMCwgbWlkZGxlKTsKKyAgbi5hc3NpZ24ocywgMCwgbWlkZGxlKTsKICAgbiArPSBzLnN1YnN0cihzLnNpemUoKSAtIChtYXhfbGVuIC0gbWlkZGxlKSk7CiAKICAgaWYgKG1heF9sZW4gPiAyKSB7CkBAIC0xODkzLDEwICsxODgxLDEwIEBACiAgIH0KICAgaWYgKGlzUGF0aCAmJiBwYXRoWzBdID09ICcvJykgewogICAgIHBhdGguZXJhc2UocGF0aC5iZWdpbigpKTsKLSAgICBwYXRocy5wdXNoX2JhY2soIi8iKTsKKyAgICBwYXRocy5lbXBsYWNlX2JhY2soIi8iKTsKICAgfQogICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvczEgPSAwOwotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvczIgPSBwYXRoLmZpbmQoc2VwLCBwb3MxICsgMSk7CisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zMiA9IHBhdGguZmluZChzZXAsIHBvczEpOwogICB3aGlsZSAocG9zMiAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHBhdGhzLnB1c2hfYmFjayhwYXRoLnN1YnN0cihwb3MxLCBwb3MyIC0gcG9zMSkpOwogICAgIHBvczEgPSBwb3MyICsgMTsKQEAgLTIwNjUsOCArMjA1MywxMCBAQAogI2lmZGVmIEhBVkVfR0VUUFdOQU0KICAgZWxzZSBpZiAocGF0aENTdHJpbmdbMF0gPT0gJ34nKSB7CiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBpZHggPSBwYXRoLmZpbmRfZmlyc3Rfb2YoIi9cMCIpOwotICAgIHN0ZDo6c3RyaW5nIHVzZXIgPSBwYXRoLnN1YnN0cigxLCBpZHggLSAxKTsKLSAgICBwYXNzd2QqIHB3ID0gZ2V0cHduYW0odXNlci5jX3N0cigpKTsKKyAgICBjaGFyIG9sZGNoID0gcGF0aFtpZHhdOworICAgIHBhdGhbaWR4XSA9ICdcMCc7CisgICAgcGFzc3dkKiBwdyA9IGdldHB3bmFtKHBhdGguY19zdHIoKSArIDEpOworICAgIHBhdGhbaWR4XSA9IG9sZGNoOwogICAgIGlmIChwdykgewogICAgICAgcGF0aC5yZXBsYWNlKDAsIGlkeCwgcHctPnB3X2Rpcik7CiAgICAgfQpAQCAtMjEwMyw3ICsyMDkzLDcgQEAKICAgICByZXQuZXJhc2UocG9zLCAxKTsKICAgfQogICAvLyBlc2NhcGUgc3BhY2VzIGFuZCAoKSBpbiB0aGUgcGF0aAotICBpZiAocmV0LmZpbmRfZmlyc3Rfb2YoIiAiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICBpZiAocmV0LmZpbmRfZmlyc3Rfb2YoJyAnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKICAgICBjaGFyIGxhc3RjaCA9IDE7CiAgICAgZm9yIChjb25zdCBjaGFyKiBjaCA9IHJldC5jX3N0cigpOyAqY2ggIT0gJ1wwJzsgKytjaCkgewpAQCAtMjUwMSw4ICsyNDkxLDggQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgZm9yIChmaWxlTnVtID0gMDsgZmlsZU51bSA8IGRpci5HZXROdW1iZXJPZkZpbGVzKCk7ICsrZmlsZU51bSkgewotICAgIGlmIChzdHJjbXAoZGlyLkdldEZpbGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZmlsZU51bSkpLCAiLiIpICYmCi0gICAgICAgIHN0cmNtcChkaXIuR2V0RmlsZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihmaWxlTnVtKSksICIuLiIpKSB7CisgICAgaWYgKHN0cmNtcChkaXIuR2V0RmlsZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihmaWxlTnVtKSksICIuIikgIT0gMCAmJgorICAgICAgICBzdHJjbXAoZGlyLkdldEZpbGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZmlsZU51bSkpLCAiLi4iKSAhPSAwKSB7CiAgICAgICBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9IHNvdXJjZTsKICAgICAgIGZ1bGxQYXRoICs9ICIvIjsKICAgICAgIGZ1bGxQYXRoICs9IGRpci5HZXRGaWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGZpbGVOdW0pKTsKQEAgLTI2NjQsOCArMjY1NCw4IEBACiAgIGRpci5Mb2FkKHNvdXJjZSk7CiAgIHNpemVfdCBmaWxlTnVtOwogICBmb3IgKGZpbGVOdW0gPSAwOyBmaWxlTnVtIDwgZGlyLkdldE51bWJlck9mRmlsZXMoKTsgKytmaWxlTnVtKSB7Ci0gICAgaWYgKHN0cmNtcChkaXIuR2V0RmlsZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihmaWxlTnVtKSksICIuIikgJiYKLSAgICAgICAgc3RyY21wKGRpci5HZXRGaWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGZpbGVOdW0pKSwgIi4uIikpIHsKKyAgICBpZiAoc3RyY21wKGRpci5HZXRGaWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGZpbGVOdW0pKSwgIi4iKSAhPSAwICYmCisgICAgICAgIHN0cmNtcChkaXIuR2V0RmlsZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihmaWxlTnVtKSksICIuLiIpICE9IDApIHsKICAgICAgIHN0ZDo6c3RyaW5nIGZ1bGxQYXRoID0gc291cmNlOwogICAgICAgZnVsbFBhdGggKz0gIi8iOwogICAgICAgZnVsbFBhdGggKz0gZGlyLkdldEZpbGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZmlsZU51bSkpOwpAQCAtMjc5Nyw3ICsyNzg3LDcgQEAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgOiBleHRlbnNpb25zKSB7CiAgICAgICB0cnlQYXRoID0gbmFtZTsKICAgICAgIHRyeVBhdGggKz0gZXh0OwotICAgICAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRyeVBhdGgsIHRydWUpKSB7CisgICAgICBpZiAoU3lzdGVtVG9vbHM6OkZpbGVJc0V4ZWN1dGFibGUodHJ5UGF0aCkpIHsKICAgICAgICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRyeVBhdGgpOwogICAgICAgfQogICAgIH0KQEAgLTI4MDUsNyArMjc5NSw3IEBACiAjZW5kaWYKIAogICAvLyBub3cgdHJ5IGp1c3QgdGhlIG5hbWUKLSAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKG5hbWUsIHRydWUpKSB7CisgIGlmIChTeXN0ZW1Ub29sczo6RmlsZUlzRXhlY3V0YWJsZShuYW1lKSkgewogICAgIHJldHVybiBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChuYW1lKTsKICAgfQogICAvLyBub3cgY29uc3RydWN0IHRoZSBwYXRoCkBAIC0yODM1LDcgKzI4MjUsNyBAQAogICAgICAgdHJ5UGF0aCA9IHA7CiAgICAgICB0cnlQYXRoICs9IG5hbWU7CiAgICAgICB0cnlQYXRoICs9IGV4dDsKLSAgICAgIGlmIChTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0cnlQYXRoLCB0cnVlKSkgeworICAgICAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKHRyeVBhdGgpKSB7CiAgICAgICAgIHJldHVybiBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0cnlQYXRoKTsKICAgICAgIH0KICAgICB9CkBAIC0yODQzLDcgKzI4MzMsNyBAQAogICAgIC8vIG5vdyB0cnkgaXQgd2l0aG91dCB0aGVtCiAgICAgdHJ5UGF0aCA9IHA7CiAgICAgdHJ5UGF0aCArPSBuYW1lOwotICAgIGlmIChTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0cnlQYXRoLCB0cnVlKSkgeworICAgIGlmIChTeXN0ZW1Ub29sczo6RmlsZUlzRXhlY3V0YWJsZSh0cnlQYXRoKSkgewogICAgICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRyeVBhdGgpOwogICAgIH0KICAgfQpAQCAtMjk5OCw2ICsyOTg4LDE1IEBACiAgIH0KIH0KIAorYm9vbCBTeXN0ZW1Ub29sczo6RmlsZUlzRXhlY3V0YWJsZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgcmV0dXJuIFN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKG5hbWUsIHRydWUpOworI2Vsc2UKKyAgcmV0dXJuICFGaWxlSXNEaXJlY3RvcnkobmFtZSkgJiYgVGVzdEZpbGVBY2Nlc3MobmFtZSwgVEVTVF9GSUxFX0VYRUNVVEUpOworI2VuZGlmCit9CisKIGJvb2wgU3lzdGVtVG9vbHM6OkZpbGVJc1N5bWxpbmsoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCiB7CiAjaWYgZGVmaW5lZChfV0lOMzIpCkBAIC0zMTA3LDE2ICszMTA2LDE0IEBACiAgIHJldHVybiBDaGRpcihkaXIpOwogfQogCi1zdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoYm9vbCBjb2xsYXBzZSkKK3N0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpCiB7CiAgIGNoYXIgYnVmWzIwNDhdOwogICBjb25zdCBjaGFyKiBjd2QgPSBHZXRjd2QoYnVmLCAyMDQ4KTsKICAgc3RkOjpzdHJpbmcgcGF0aDsKICAgaWYgKGN3ZCkgewogICAgIHBhdGggPSBjd2Q7Ci0gIH0KLSAgaWYgKGNvbGxhcHNlKSB7Ci0gICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHBhdGgpOworICAgIFN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhwYXRoKTsKICAgfQogICByZXR1cm4gcGF0aDsKIH0KQEAgLTMxMzIsMTcgKzMxMjksMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRpciwgc3RkOjpzdHJpbmcmIGZpbGUsIGJvb2wpCiB7CiAgIGRpciA9IGluX25hbWU7Ci0gIGZpbGUgPSAiIjsKKyAgZmlsZS5jbGVhcigpOwogICBTeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZGlyKTsKIAogICBpZiAoIVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoZGlyKSkgewotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc2xhc2hQb3MgPSBkaXIucmZpbmQoIi8iKTsKKyAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNsYXNoUG9zID0gZGlyLnJmaW5kKCcvJyk7CiAgICAgaWYgKHNsYXNoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICBmaWxlID0gZGlyLnN1YnN0cihzbGFzaFBvcyArIDEpOwotICAgICAgZGlyID0gZGlyLnN1YnN0cigwLCBzbGFzaFBvcyk7CisgICAgICBkaXIucmVzaXplKHNsYXNoUG9zKTsKICAgICB9IGVsc2UgewogICAgICAgZmlsZSA9IGRpcjsKLSAgICAgIGRpciA9ICIiOworICAgICAgZGlyLmNsZWFyKCk7CiAgICAgfQogICB9CiAgIGlmICghKGRpci5lbXB0eSgpKSAmJiAhU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShkaXIpKSB7CkBAIC0zMTY0LDcgKzMxNjEsNyBAQAogICBmYWlsdXJlcy5wdXNoX2JhY2soc2VsZik7CiAgIFN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhzZWxmKTsKICAgc2VsZiA9IFN5c3RlbVRvb2xzOjpGaW5kUHJvZ3JhbShzZWxmKTsKLSAgaWYgKCFTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhzZWxmKSkgeworICBpZiAoIVN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKHNlbGYpKSB7CiAgICAgaWYgKGJ1aWxkRGlyKSB7CiAgICAgICBzdGQ6OnN0cmluZyBpbnRkaXIgPSAiLiI7CiAjaWZkZWYgQ01BS0VfSU5URElSCkBAIC0zMTc5LDE0ICszMTc2LDE0IEBACiAgICAgfQogICB9CiAgIGlmIChpbnN0YWxsUHJlZml4KSB7Ci0gICAgaWYgKCFTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhzZWxmKSkgeworICAgIGlmICghU3lzdGVtVG9vbHM6OkZpbGVJc0V4ZWN1dGFibGUoc2VsZikpIHsKICAgICAgIGZhaWx1cmVzLnB1c2hfYmFjayhzZWxmKTsKICAgICAgIHNlbGYgPSBpbnN0YWxsUHJlZml4OwogICAgICAgc2VsZiArPSAiL2Jpbi8iOwogICAgICAgc2VsZiArPSBleGVOYW1lOwogICAgIH0KICAgfQotICBpZiAoIVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHNlbGYpKSB7CisgIGlmICghU3lzdGVtVG9vbHM6OkZpbGVJc0V4ZWN1dGFibGUoc2VsZikpIHsKICAgICBmYWlsdXJlcy5wdXNoX2JhY2soc2VsZik7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKICAgICBtc2cgPDwgIkNhbiBub3QgZmluZCB0aGUgY29tbWFuZCBsaW5lIHByb2dyYW0gIjsKQEAgLTMyMDgsMTEgKzMyMDUsNiBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RkOjpzdHJpbmcgU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGluX3JlbGF0aXZlKQotewotICByZXR1cm4gU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoaW5fcmVsYXRpdmUsIG51bGxwdHIpOwotfQotCiAjaWYgS1dTWVNfU1lTVEVNVE9PTFNfVVNFX1RSQU5TTEFUSU9OX01BUAogdm9pZCBTeXN0ZW1Ub29sczo6QWRkVHJhbnNsYXRpb25QYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiKQpAQCAtMzIzNyw3ICszMjI5LDcgQEAKICAgICAgICAgcGF0aF9iICs9ICcvJzsKICAgICAgIH0KICAgICAgIGlmICghKHBhdGhfYSA9PSBwYXRoX2IpKSB7Ci0gICAgICAgIFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5UcmFuc2xhdGlvbk1hcC5pbnNlcnQoCisgICAgICAgIFN5c3RlbVRvb2xzU3RhdGljcy0+VHJhbnNsYXRpb25NYXAuaW5zZXJ0KAogICAgICAgICAgIFN5c3RlbVRvb2xzU3RhdGljOjpTdHJpbmdNYXA6OnZhbHVlX3R5cGUoc3RkOjptb3ZlKHBhdGhfYSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUocGF0aF9iKSkpOwogICAgICAgfQpAQCAtMzI2Nyw5ICszMjU5LDkgQEAKIAogICAvLyBJbiBjYXNlIGEgZmlsZSB3YXMgc3BlY2lmaWVkIHdlIHN0aWxsIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGlzOgogICAvLyBOb3cgY29udmVydCBhbnkgcGF0aCBmb3VuZCBpbiB0aGUgdGFibGUgYmFjayB0byB0aGUgb25lIGRlc2lyZWQ6Ci0gIGZvciAoYXV0byBjb25zdCYgcGFpciA6IFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5UcmFuc2xhdGlvbk1hcCkgeworICBmb3IgKGF1dG8gY29uc3QmIHBhaXIgOiBTeXN0ZW1Ub29sc1N0YXRpY3MtPlRyYW5zbGF0aW9uTWFwKSB7CiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBvZiB0aGUgcGF0aCBpcyBhIHN1YnN0cmluZyBvZiB0aGUgb3RoZXIgcGF0aAotICAgIGlmIChwYXRoLmZpbmQocGFpci5maXJzdCkgPT0gMCkgeworICAgIGlmIChwYXRoLmNvbXBhcmUoMCwgcGFpci5maXJzdC5zaXplKCksIHBhaXIuZmlyc3QpID09IDApIHsKICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoMCwgcGFpci5maXJzdC5zaXplKCksIHBhaXIuc2Vjb25kKTsKICAgICB9CiAgIH0KQEAgLTMzMDIsMjUgKzMyOTQsMTAgQEAKICAgfQogfQogCi1zdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgaW5fcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluX2Jhc2UpCi17Ci0gIC8vIFVzZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhcyBhIGJhc2UgcGF0aC4KLSAgY2hhciBidWZbMjA0OF07Ci0gIGNvbnN0IGNoYXIqIHJlc19pbl9iYXNlID0gaW5fYmFzZTsKLSAgaWYgKCFyZXNfaW5fYmFzZSkgewotICAgIGlmIChjb25zdCBjaGFyKiBjd2QgPSBHZXRjd2QoYnVmLCAyMDQ4KSkgewotICAgICAgcmVzX2luX2Jhc2UgPSBjd2Q7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc19pbl9iYXNlID0gIiI7Ci0gICAgfQotICB9CituYW1lc3BhY2UgewogCi0gIHJldHVybiBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChpbl9wYXRoLCBzdGQ6OnN0cmluZyhyZXNfaW5fYmFzZSkpOwotfQotCi1zdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgaW5fcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbl9iYXNlKQorc3RkOjpzdHJpbmcgQ29sbGFwc2VGdWxsUGF0aEltcGwoc3RkOjpzdHJpbmcgY29uc3QmIGluX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCogaW5fYmFzZSkKIHsKICAgLy8gQ29sbGVjdCB0aGUgb3V0cHV0IHBhdGggY29tcG9uZW50cy4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dF9jb21wb25lbnRzOwpAQCAtMzMzMyw4ICszMzEwLDE1IEBACiAgIC8vIElmIHRoZSBpbnB1dCBwYXRoIGlzIHJlbGF0aXZlLCBzdGFydCB3aXRoIGEgYmFzZSBwYXRoLgogICBpZiAocGF0aF9jb21wb25lbnRzWzBdLmVtcHR5KCkpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYmFzZV9jb21wb25lbnRzOwotICAgIC8vIFVzZSB0aGUgZ2l2ZW4gYmFzZSBwYXRoLgotICAgIFN5c3RlbVRvb2xzOjpTcGxpdFBhdGgoaW5fYmFzZSwgYmFzZV9jb21wb25lbnRzKTsKKworICAgIGlmIChpbl9iYXNlKSB7CisgICAgICAvLyBVc2UgdGhlIGdpdmVuIGJhc2UgcGF0aC4KKyAgICAgIFN5c3RlbVRvb2xzOjpTcGxpdFBhdGgoKmluX2Jhc2UsIGJhc2VfY29tcG9uZW50cyk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFVzZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhcyBhIGJhc2UgcGF0aC4KKyAgICAgIHN0ZDo6c3RyaW5nIGN3ZCA9IFN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOworICAgICAgU3lzdGVtVG9vbHM6OlNwbGl0UGF0aChjd2QsIGJhc2VfY29tcG9uZW50cyk7CisgICAgfQogCiAgICAgLy8gQXBwZW5kIGJhc2UgcGF0aCBjb21wb25lbnRzIHRvIHRoZSBvdXRwdXQgcGF0aC4KICAgICBvdXRfY29tcG9uZW50cy5wdXNoX2JhY2soYmFzZV9jb21wb25lbnRzWzBdKTsKQEAgLTMzNjcsMTIgKzMzNTEsMzQgQEAKICAgU3lzdGVtVG9vbHM6OkNoZWNrVHJhbnNsYXRpb25QYXRoKG5ld1BhdGgpOwogI2VuZGlmCiAjaWZkZWYgX1dJTjMyCi0gIG5ld1BhdGggPSBTeXN0ZW1Ub29sczo6U3RhdGljcy0+R2V0QWN0dWFsQ2FzZUZvclBhdGhDYWNoZWQobmV3UGF0aCk7CisgIG5ld1BhdGggPSBTeXN0ZW1Ub29sc1N0YXRpY3MtPkdldEFjdHVhbENhc2VGb3JQYXRoQ2FjaGVkKG5ld1BhdGgpOwogICBTeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMobmV3UGF0aCk7CiAjZW5kaWYKICAgLy8gUmV0dXJuIHRoZSByZWNvbnN0cnVjdGVkIHBhdGguCiAgIHJldHVybiBuZXdQYXRoOwogfQorfQorCitzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgaW5fcGF0aCkKK3sKKyAgcmV0dXJuIENvbGxhcHNlRnVsbFBhdGhJbXBsKGluX3BhdGgsIG51bGxwdHIpOworfQorCitzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgaW5fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluX2Jhc2UpCit7CisgIGlmICghaW5fYmFzZSkgeworICAgIHJldHVybiBDb2xsYXBzZUZ1bGxQYXRoSW1wbChpbl9wYXRoLCBudWxscHRyKTsKKyAgfQorICBzdGQ6OnN0cmluZyB0bXBfYmFzZSA9IGluX2Jhc2U7CisgIHJldHVybiBDb2xsYXBzZUZ1bGxQYXRoSW1wbChpbl9wYXRoLCAmdG1wX2Jhc2UpOworfQorCitzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgaW5fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBpbl9iYXNlKQoreworICByZXR1cm4gQ29sbGFwc2VGdWxsUGF0aEltcGwoaW5fcGF0aCwgJmluX2Jhc2UpOworfQogCiAvLyBjb21wdXRlIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gaGVyZSB0byB0aGVyZQogc3RkOjpzdHJpbmcgU3lzdGVtVG9vbHM6OlJlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgbG9jYWwsCkBAIC0zNTQxLDcgKzM1NDcsNyBAQAogICAgIC8vIEV4cGFuZCBob21lIGRpcmVjdG9yeSByZWZlcmVuY2VzIGlmIHJlcXVlc3RlZC4KICAgICBpZiAoZXhwYW5kX2hvbWVfZGlyICYmICFyb290LmVtcHR5KCkgJiYgcm9vdFswXSA9PSAnficpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGhvbWVkaXI7Ci0gICAgICByb290ID0gcm9vdC5zdWJzdHIoMCwgcm9vdC5zaXplKCkgLSAxKTsKKyAgICAgIHJvb3QucmVzaXplKHJvb3Quc2l6ZSgpIC0gMSk7CiAgICAgICBpZiAocm9vdC5zaXplKCkgPT0gMSkgewogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQogICAgICAgICBpZiAoIVN5c3RlbVRvb2xzOjpHZXRFbnYoIlVTRVJQUk9GSUxFIiwgaG9tZWRpcikpCkBAIC0zNTcxLDE0ICszNTc3LDE0IEBACiAgIGZvciAoOyAqbGFzdDsgKytsYXN0KSB7CiAgICAgaWYgKCpsYXN0ID09ICcvJyB8fCAqbGFzdCA9PSAnXFwnKSB7CiAgICAgICAvLyBFbmQgb2YgYSBjb21wb25lbnQuICBTYXZlIGl0LgotICAgICAgY29tcG9uZW50cy5wdXNoX2JhY2soc3RkOjpzdHJpbmcoZmlyc3QsIGxhc3QpKTsKKyAgICAgIGNvbXBvbmVudHMuZW1wbGFjZV9iYWNrKGZpcnN0LCBsYXN0KTsKICAgICAgIGZpcnN0ID0gbGFzdCArIDE7CiAgICAgfQogICB9CiAKICAgLy8gU2F2ZSB0aGUgbGFzdCBjb21wb25lbnQgdW5sZXNzIHRoZXJlIHdlcmUgbm8gY29tcG9uZW50cy4KICAgaWYgKGxhc3QgIT0gYykgewotICAgIGNvbXBvbmVudHMucHVzaF9iYWNrKHN0ZDo6c3RyaW5nKGZpcnN0LCBsYXN0KSk7CisgICAgY29tcG9uZW50cy5lbXBsYWNlX2JhY2soZmlyc3QsIGxhc3QpOwogICB9CiB9CiAKQEAgLTM1OTQsNyArMzYwMCw3IEBACiAgIC8vIENvbnN0cnVjdCByZXN1bHQgaW4gYSBzaW5nbGUgc3RyaW5nLgogICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAgIHNpemVfdCBsZW4gPSAwOwotICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGZpcnN0OyBpICE9IGxhc3Q7ICsraSkgeworICBmb3IgKGF1dG8gaSA9IGZpcnN0OyBpICE9IGxhc3Q7ICsraSkgewogICAgIGxlbiArPSAxICsgaS0+c2l6ZSgpOwogICB9CiAgIHJlc3VsdC5yZXNlcnZlKGxlbik7CkBAIC0zNjg1LDE5ICszNjkxLDIwIEBACiAgIHN0ZDo6c3RyaW5nIGZuID0gZmlsZW5hbWU7CiAgIFN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhmbik7CiAKLSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzbGFzaF9wb3MgPSBmbi5yZmluZCgiLyIpOwotICBpZiAoc2xhc2hfcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgc3RkOjpzdHJpbmcgcmV0ID0gZm4uc3Vic3RyKDAsIHNsYXNoX3Bvcyk7Ci0gICAgaWYgKHJldC5zaXplKCkgPT0gMiAmJiByZXRbMV0gPT0gJzonKSB7Ci0gICAgICByZXR1cm4gcmV0ICsgJy8nOwotICAgIH0KLSAgICBpZiAocmV0LmVtcHR5KCkpIHsKLSAgICAgIHJldHVybiAiLyI7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci0gIH0gZWxzZSB7CisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc2xhc2hfcG9zID0gZm4ucmZpbmQoJy8nKTsKKyAgaWYgKHNsYXNoX3BvcyA9PSAwKSB7CisgICAgcmV0dXJuICIvIjsKKyAgfQorICBpZiAoc2xhc2hfcG9zID09IDIgJiYgZm5bMV0gPT0gJzonKSB7CisgICAgLy8ga2VlcCB0aGUgLyBhZnRlciBhIGRyaXZlIGxldHRlcgorICAgIGZuLnJlc2l6ZSgzKTsKKyAgICByZXR1cm4gZm47CisgIH0KKyAgaWYgKHNsYXNoX3BvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHJldHVybiAiIjsKICAgfQorICBmbi5yZXNpemUoc2xhc2hfcG9zKTsKKyAgcmV0dXJuIGZuOwogfQogCiAvKioKQEAgLTM3MjcsNyArMzczNCw4IEBACiAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZpbGVuYW1lKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBkb3RfcG9zID0gbmFtZS5maW5kKCcuJyk7CiAgIGlmIChkb3RfcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgcmV0dXJuIG5hbWUuc3Vic3RyKGRvdF9wb3MpOworICAgIG5hbWUuZXJhc2UoMCwgZG90X3Bvcyk7CisgICAgcmV0dXJuIG5hbWU7CiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuICIiOwogICB9CkBAIC0zNzQyLDcgKzM3NTAsOCBAQAogICBzdGQ6OnN0cmluZyBuYW1lID0gU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmaWxlbmFtZSk7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZG90X3BvcyA9IG5hbWUucmZpbmQoJy4nKTsKICAgaWYgKGRvdF9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICByZXR1cm4gbmFtZS5zdWJzdHIoZG90X3Bvcyk7CisgICAgbmFtZS5lcmFzZSgwLCBkb3RfcG9zKTsKKyAgICByZXR1cm4gbmFtZTsKICAgfSBlbHNlIHsKICAgICByZXR1cm4gIiI7CiAgIH0KQEAgLTM3NTgsMTAgKzM3NjcsOSBAQAogICBzdGQ6OnN0cmluZyBuYW1lID0gU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmaWxlbmFtZSk7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZG90X3BvcyA9IG5hbWUuZmluZCgnLicpOwogICBpZiAoZG90X3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCBkb3RfcG9zKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gbmFtZTsKKyAgICBuYW1lLnJlc2l6ZShkb3RfcG9zKTsKICAgfQorICByZXR1cm4gbmFtZTsKIH0KIAogLyoqCkBAIC0zNzc1LDEwICszNzgzLDkgQEAKICAgc3RkOjpzdHJpbmcgbmFtZSA9IFN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZW5hbWUpOwogICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGRvdF9wb3MgPSBuYW1lLnJmaW5kKCcuJyk7CiAgIGlmIChkb3RfcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgcmV0dXJuIG5hbWUuc3Vic3RyKDAsIGRvdF9wb3MpOwotICB9IGVsc2UgewotICAgIHJldHVybiBuYW1lOworICAgIG5hbWUucmVzaXplKGRvdF9wb3MpOwogICB9CisgIHJldHVybiBuYW1lOwogfQogCiBib29sIFN5c3RlbVRvb2xzOjpGaWxlSGFzU2lnbmF0dXJlKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBzaWduYXR1cmUsCkBAIC0zODI4LDcgKzM4MzUsNyBAQAogCiAgIC8vIEFsbG9jYXRlIGJ1ZmZlciBhbmQgcmVhZCBieXRlcwogCi0gIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFyW2xlbmd0aF07CisgIGF1dG8qIGJ1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFyW2xlbmd0aF07CiAgIHNpemVfdCByZWFkX2xlbmd0aCA9IGZyZWFkKGJ1ZmZlciwgMSwgbGVuZ3RoLCBmcCk7CiAgIGZjbG9zZShmcCk7CiAgIGlmIChyZWFkX2xlbmd0aCA9PSAwKSB7CkBAIC00MDAwLDcgKzQwMDcsOCBAQAogCiAgIC8vIGlmIHRoZSBwYXRoIHBhc3NlZCBpbiBoYXMgcXVvdGVzIGFyb3VuZCBpdCwgZmlyc3QgcmVtb3ZlIHRoZSBxdW90ZXMKICAgaWYgKCFwYXRoLmVtcHR5KCkgJiYgcGF0aFswXSA9PSAnIicgJiYgcGF0aC5iYWNrKCkgPT0gJyInKSB7Ci0gICAgdGVtcFBhdGggPSBwYXRoLnN1YnN0cigxLCBwYXRoLmxlbmd0aCgpIC0gMik7CisgICAgdGVtcFBhdGgucmVzaXplKHBhdGgubGVuZ3RoKCkgLSAxKTsKKyAgICB0ZW1wUGF0aC5lcmFzZSgwLCAxKTsKICAgfQogCiAgIHN0ZDo6d3N0cmluZyB3dGVtcFBhdGggPSBFbmNvZGluZzo6VG9XaWRlKHRlbXBQYXRoKTsKQEAgLTQyMTksOCArNDIyNyw4IEBACiAgIGlmIChzdWJkaXJbZXhwZWN0ZWRTbGFzaFBvc2l0aW9uXSAhPSAnLycpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgc3RkOjpzdHJpbmcgcyA9IHN1YmRpci5zdWJzdHIoMCwgZGlyLnNpemUoKSk7Ci0gIHJldHVybiBTeXN0ZW1Ub29sczo6Q29tcGFyZVBhdGgocywgZGlyKTsKKyAgc3ViZGlyLnJlc2l6ZShkaXIuc2l6ZSgpKTsKKyAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb21wYXJlUGF0aChzdWJkaXIsIGRpcik7CiB9CiAKIHZvaWQgU3lzdGVtVG9vbHM6OkRlbGF5KHVuc2lnbmVkIGludCBtc2VjKQpAQCAtNDUxNiw3ICs0NTI0LDcgQEAKIAogYm9vbCBTeXN0ZW1Ub29sczo6UGFyc2VVUkxQcm90b2NvbChjb25zdCBzdGQ6OnN0cmluZyYgVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkYXRhZ2xvbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRhdGFnbG9tLCBib29sIGRlY29kZSkKIHsKICAgLy8gbWF0Y2ggMCBlbnRpcmUgdXJsCiAgIC8vIG1hdGNoIDEgcHJvdG9jb2wKQEAgLTQ1MjksMTMgKzQ1MzcsMTcgQEAKICAgcHJvdG9jb2wgPSB1cmxSZS5tYXRjaCgxKTsKICAgZGF0YWdsb20gPSB1cmxSZS5tYXRjaCgyKTsKIAorICBpZiAoZGVjb2RlKSB7CisgICAgZGF0YWdsb20gPSBEZWNvZGVVUkwoZGF0YWdsb20pOworICB9CisKICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU3lzdGVtVG9vbHM6OlBhcnNlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBVUkwsIHN0ZDo6c3RyaW5nJiBwcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiB1c2VybmFtZSwgc3RkOjpzdHJpbmcmIHBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGhvc3RuYW1lLCBzdGQ6OnN0cmluZyYgZGF0YXBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YWJhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YWJhc2UsIGJvb2wgZGVjb2RlKQogewogICBrd3N5czo6UmVndWxhckV4cHJlc3Npb24gdXJsUmUoVlRLX1VSTF9SRUdFWCk7CiAgIGlmICghdXJsUmUuZmluZChVUkwpKQpAQCAtNDU1OSwxMyArNDU3MSwzNyBAQAogICBkYXRhcG9ydCA9IHVybFJlLm1hdGNoKDgpOwogICBkYXRhYmFzZSA9IHVybFJlLm1hdGNoKDkpOwogCisgIGlmIChkZWNvZGUpIHsKKyAgICB1c2VybmFtZSA9IERlY29kZVVSTCh1c2VybmFtZSk7CisgICAgcGFzc3dvcmQgPSBEZWNvZGVVUkwocGFzc3dvcmQpOworICAgIGhvc3RuYW1lID0gRGVjb2RlVVJMKGhvc3RuYW1lKTsKKyAgICBkYXRhcG9ydCA9IERlY29kZVVSTChkYXRhcG9ydCk7CisgICAgZGF0YWJhc2UgPSBEZWNvZGVVUkwoZGF0YWJhc2UpOworICB9CisKICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoZXNlIG11c3QgTk9UIGJlIGluaXRpYWxpemVkLiAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGlzCi0vLyBuZWNlc3NhcnkuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6RGVjb2RlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpCit7CisgIGt3c3lzOjpSZWd1bGFyRXhwcmVzc2lvbiB1cmxCeXRlUmUoVlRLX1VSTF9CWVRFX1JFR0VYKTsKKyAgc3RkOjpzdHJpbmcgcmV0OworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVybC5sZW5ndGgoKTsgaSsrKSB7CisgICAgaWYgKHVybEJ5dGVSZS5maW5kKHVybC5zdWJzdHIoaSwgMykpKSB7CisgICAgICBjaGFyIGJ5dGVzW10gPSB7IHVybFtpICsgMV0sIHVybFtpICsgMl0sICdcMCcgfTsKKyAgICAgIHJldCArPSBzdGF0aWNfY2FzdDxjaGFyPihzdHJ0b3VsKGJ5dGVzLCBudWxscHRyLCAxNikpOworICAgICAgaSArPSAyOworICAgIH0gZWxzZSB7CisgICAgICByZXQgKz0gdXJsW2ldOworICAgIH0KKyAgfQorICByZXR1cm4gcmV0OworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEbyBOT1QgaW5pdGlhbGl6ZS4gIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gdG8gemVybyBpcyBuZWNlc3NhcnkuCiBzdGF0aWMgdW5zaWduZWQgaW50IFN5c3RlbVRvb2xzTWFuYWdlckNvdW50OwotU3lzdGVtVG9vbHNTdGF0aWMqIFN5c3RlbVRvb2xzOjpTdGF0aWNzOwogCiAvLyBTeXN0ZW1Ub29sc01hbmFnZXIgbWFuYWdlcyB0aGUgU3lzdGVtVG9vbHMgc2luZ2xldG9uLgogLy8gU3lzdGVtVG9vbHNNYW5hZ2VyIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBhbnkgdHJhbnNsYXRpb24gdW5pdApAQCAtNDYwOCw3ICs0NjQ0LDcgQEAKICNlbmRpZgogCiAgIC8vIENyZWF0ZSBzdGF0aWNzIHNpbmdsZXRvbiBpbnN0YW5jZQotICBTeXN0ZW1Ub29sczo6U3RhdGljcyA9IG5ldyBTeXN0ZW1Ub29sc1N0YXRpYzsKKyAgU3lzdGVtVG9vbHNTdGF0aWNzID0gbmV3IFN5c3RlbVRvb2xzU3RhdGljOwogCiAjaWYgS1dTWVNfU1lTVEVNVE9PTFNfVVNFX1RSQU5TTEFUSU9OX01BUAogLy8gQWRkIHNvbWUgc3BlY2lhbCB0cmFuc2xhdGlvbiBwYXRocyBmb3IgdW5peC4gIFRoZXNlIGFyZSBub3QgYWRkZWQKQEAgLTQ2NTgsNyArNDY5NCw3IEBACiAKIHZvaWQgU3lzdGVtVG9vbHM6OkNsYXNzRmluYWxpemUoKQogewotICBkZWxldGUgU3lzdGVtVG9vbHM6OlN0YXRpY3M7CisgIGRlbGV0ZSBTeXN0ZW1Ub29sc1N0YXRpY3M7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9TeXN0ZW1Ub29scy5oeHguaW4KaW5kZXggYzRhYjlkNC4uNWRiYjcyNiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmh4eC5pbgorKysgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtVG9vbHMuaHh4LmluCkBAIC02Nyw3ICs2Nyw3IEBACiAvLyBjb21iaW5lZCB1c2luZyB0aGUgfCBvcGVyYXRvci4KIHR5cGVkZWYgaW50IFRlc3RGaWxlUGVybWlzc2lvbnM7CiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0vLyBPbiBXaW5kb3dzIChWQyBhbmQgQm9ybGFuZCksIG5vIHN5c3RlbSBoZWFkZXIgZGVmaW5lcyB0aGVzZSBjb25zdGFudHMuLi4KKy8vIE9uIFdpbmRvd3MgKFZDKSwgbm8gc3lzdGVtIGhlYWRlciBkZWZpbmVzIHRoZXNlIGNvbnN0YW50cy4uLgogc3RhdGljIGNvbnN0IFRlc3RGaWxlUGVybWlzc2lvbnMgVEVTVF9GSUxFX09LID0gMDsKIHN0YXRpYyBjb25zdCBUZXN0RmlsZVBlcm1pc3Npb25zIFRFU1RfRklMRV9SRUFEID0gNDsKIHN0YXRpYyBjb25zdCBUZXN0RmlsZVBlcm1pc3Npb25zIFRFU1RfRklMRV9XUklURSA9IDI7CkBAIC0zMTcsMTEgKzMxNyw3IEBACiAgKiBDcm9zcyBwbGF0Zm9ybSB3cmFwcGVyIGZvciBzdGF0IHN0cnVjdAogICovCiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0jICBpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSAgdHlwZWRlZiBzdHJ1Y3Qgc3RhdGk2NCBTdGF0X3Q7Ci0jICBlbHNlCiAgIHR5cGVkZWYgc3RydWN0IF9zdGF0NjQgU3RhdF90OwotIyAgZW5kaWYKICNlbHNlCiAgIHR5cGVkZWYgc3RydWN0IHN0YXQgU3RhdF90OwogI2VuZGlmCkBAIC00MTEsMTEgKzQwNywxMSBAQAogICAgKiAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpLiAgVGhlIGZ1bGwgcGF0aAogICAgKiBpcyByZXR1cm5lZC4KICAgICovCi0gIHN0YXRpYyBzdGQ6OnN0cmluZyBDb2xsYXBzZUZ1bGxQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbl9yZWxhdGl2ZSk7Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBDb2xsYXBzZUZ1bGxQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbl9yZWxhdGl2ZSwKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIENvbGxhcHNlRnVsbFBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGluX3BhdGgpOworICBzdGF0aWMgc3RkOjpzdHJpbmcgQ29sbGFwc2VGdWxsUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgaW5fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5fYmFzZSk7Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBDb2xsYXBzZUZ1bGxQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbl9yZWxhdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGluX2Jhc2UpOworICBzdGF0aWMgc3RkOjpzdHJpbmcgQ29sbGFwc2VGdWxsUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgaW5fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGluX2Jhc2UpOwogCiAgIC8qKgogICAgKiBHZXQgdGhlIHJlYWwgcGF0aCBmb3IgYSBnaXZlbiBwYXRoLCByZW1vdmluZyBhbGwgc3ltbGlua3MuICBJbgpAQCAtNTQ5LDEyICs1NDUsMTMgQEAKICAgICovCiAKICAgLyoqCi0gICAqIE9wZW4gYSBmaWxlIGNvbnNpZGVyaW5nIHVuaWNvZGUuCisgICAqIE9wZW4gYSBmaWxlIGNvbnNpZGVyaW5nIHVuaWNvZGUuIE9uIFdpbmRvd3MsIGlmICdlJyBpcyBwcmVzZW50IGluCisgICAqIG1vZGUgaXQgaXMgZmlyc3QgZGlzY2FyZGVkLgogICAgKi8KICAgc3RhdGljIEZJTEUqIEZvcGVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlLCBjb25zdCBjaGFyKiBtb2RlKTsKIAogLyoqCi0gKiBWaXN1YWwgQysrIGRvZXMgbm90IGRlZmluZSBtb2RlX3QgKG5vdGUgdGhhdCBCb3JsYW5kIGRvZXMsIGhvd2V2ZXIpLgorICogVmlzdWFsIEMrKyBkb2VzIG5vdCBkZWZpbmUgbW9kZV90LgogICovCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7CkBAIC02NzcsNiArNjc0LDExIEBACiAgIHN0YXRpYyBib29sIEZpbGVJc0RpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAKICAgLyoqCisgICAqIFJldHVybiB0cnVlIGlmIHRoZSBmaWxlIGlzIGFuIGV4ZWN1dGFibGUKKyAgICovCisgIHN0YXRpYyBib29sIEZpbGVJc0V4ZWN1dGFibGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOworCisgIC8qKgogICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZSBpcyBhIHN5bWxpbmsKICAgICovCiAgIHN0YXRpYyBib29sIEZpbGVJc1N5bWxpbmsoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwpAQCAtODY5LDcgKzg3MSw3IEBACiAgIC8qKgogICAgKiBHZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBDV0QKICAgICovCi0gIHN0YXRpYyBzdGQ6OnN0cmluZyBHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeShib29sIGNvbGxhcHNlID0gdHJ1ZSk7CisgIHN0YXRpYyBzdGQ6OnN0cmluZyBHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOwogCiAgIC8qKgogICAgKiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkCkBAIC05MzUsMjIgKzkzNywzMiBAQAogICAgKiBQYXJzZSBhIGNoYXJhY3RlciBzdHJpbmcgOgogICAgKiAgICAgICBwcm90b2NvbDovL2RhdGFnbG9tCiAgICAqIGFuZCBmaWxsIHByb3RvY29sIGFzIGFwcHJvcHJpYXRlLgorICAgKiBkZWNvZGUgdGhlIGRhdGFnbG9tIHVzaW5nIERlY29kZVVSTCBpZiBzZXQgdG8gdHJ1ZS4KICAgICogUmV0dXJuIGZhbHNlIGlmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSB0aGUgcmVxdWlyZWQgZm9ybSwgdHJ1ZSBvdGhlcndpc2UuCiAgICAqLwogICBzdGF0aWMgYm9vbCBQYXJzZVVSTFByb3RvY29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBVUkwsIHN0ZDo6c3RyaW5nJiBwcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YWdsb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkYXRhZ2xvbSwgYm9vbCBkZWNvZGUgPSBmYWxzZSk7CiAKICAgLyoqCiAgICAqIFBhcnNlIGEgc3RyaW5nIChhIFVSTCB3aXRob3V0IHByb3RvY29sIHByZWZpeCkgd2l0aCB0aGUgZm9ybToKICAgICogIHByb3RvY29sOi8vW1t1c2VybmFtZVsnOidwYXNzd29yZF0nQCddaG9zdG5hbWVbJzonZGF0YXBvcnRdXScvJ1tkYXRhcGF0aF0KICAgICogYW5kIGZpbGwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsIGRhdGFwb3J0LCBhbmQgZGF0YXBhdGgKICAgICogd2hlbiB2YWx1ZXMgYXJlIGZvdW5kLgorICAgKiBkZWNvZGUgYWxsIHN0cmluZyBleGNlcHQgdGhlIHByb3RvY29sIHVzaW5nIERlY29kZVVybCBpZiBzZXQgdG8gdHJ1ZS4KICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBtYXRjaGVzIHRoZSBmb3JtYXQ7IGZhbHNlIG90aGVyd2lzZS4KICAgICovCiAgIHN0YXRpYyBib29sIFBhcnNlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBVUkwsIHN0ZDo6c3RyaW5nJiBwcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OnN0cmluZyYgcGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBob3N0bmFtZSwgc3RkOjpzdHJpbmcmIGRhdGFwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YXBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YXBhdGgsIGJvb2wgZGVjb2RlID0gZmFsc2UpOworCisgIC8qKgorICAgKiBEZWNvZGUgdGhlIHBlcmNlbnQtZW5jb2RlZCBzdHJpbmcgZnJvbSBhbiBVUkwgb3IgYW4gVVJJCisgICAqIGludG8gdGhlaXIgY29ycmVjdCBjaGFyIHZhbHVlcy4KKyAgICogRG9lcyBub3QgcGVyZm9ybSBhbnkgb3RoZXIgc29ydCBvZiB2YWxpZGF0aW9uLgorICAgKiBSZXR1cm4gdGhlIGRlY29kZWQgc3RyaW5nCisgICAqLworICBzdGF0aWMgc3RkOjpzdHJpbmcgRGVjb2RlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpOwogCiBwcml2YXRlOgogICAvKioKQEAgLTk3MSw3ICs5ODMsNiBAQAogICAgIHJldHVybiAmU3lzdGVtVG9vbHNNYW5hZ2VySW5zdGFuY2U7CiAgIH0KIAotICBzdGF0aWMgU3lzdGVtVG9vbHNTdGF0aWMqIFN0YXRpY3M7CiAgIGZyaWVuZCBjbGFzcyBTeXN0ZW1Ub29sc1N0YXRpYzsKICAgZnJpZW5kIGNsYXNzIFN5c3RlbVRvb2xzTWFuYWdlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvaGFzaF9mdW4uaHh4LmluIGIvU291cmNlL2t3c3lzL2hhc2hfZnVuLmh4eC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYyNmMyYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uva3dzeXMvaGFzaF9mdW4uaHh4LmluCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLiAgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYKLSAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQotICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKLSAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCi0gKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgotICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTQKLSAqIEhld2xldHQtUGFja2FyZCBDb21wYW55Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCi0gKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKLSAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCi0gKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqLwotI2lmbmRlZiBAS1dTWVNfTkFNRVNQQUNFQF9oYXNoX2Z1bl9oeHgKLSNkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfaGFzaF9mdW5faHh4Ci0KLSNpbmNsdWRlIDxAS1dTWVNfTkFNRVNQQUNFQC9Db25maWd1cmUuaHh4PgotCi0jaW5jbHVkZSA8c3RkZGVmLmg+IC8vIHNpemVfdAotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VAIHsKLQotdGVtcGxhdGUgPGNsYXNzIF9LZXk+Ci1zdHJ1Y3QgaGFzaAotewotfTsKLQotaW5saW5lIHNpemVfdCBfc3RsX2hhc2hfc3RyaW5nKGNvbnN0IGNoYXIqIF9fcykKLXsKLSAgdW5zaWduZWQgbG9uZyBfX2ggPSAwOwotICBmb3IgKDsgKl9fczsgKytfX3MpCi0gICAgX19oID0gNSAqIF9faCArICpfX3M7Ci0KLSAgcmV0dXJuIHNpemVfdChfX2gpOwotfQotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8Y2hhcio+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QgeyByZXR1cm4gX3N0bF9oYXNoX3N0cmluZyhfX3MpOyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8Y29uc3QgY2hhcio+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QgeyByZXR1cm4gX3N0bF9oYXNoX3N0cmluZyhfX3MpOyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8c3RkOjpzdHJpbmc+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6c3RyaW5nJiBfX3MpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX3N0bF9oYXNoX3N0cmluZyhfX3MuY19zdHIoKSk7Ci0gIH0KLX07Ci0KLSNpZiAhZGVmaW5lZChfX0JPUkxBTkRDX18pCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8Y29uc3Qgc3RkOjpzdHJpbmc+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6c3RyaW5nJiBfX3MpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX3N0bF9oYXNoX3N0cmluZyhfX3MuY19zdHIoKSk7Ci0gIH0KLX07Ci0jZW5kaWYKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPGNoYXI+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGNoYXIgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDx1bnNpZ25lZCBjaGFyPgotewotICBzaXplX3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8c2lnbmVkIGNoYXI+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVkIGNoYXIgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDxzaG9ydD4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoc2hvcnQgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDx1bnNpZ25lZCBzaG9ydD4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQgc2hvcnQgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDxpbnQ+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGludCBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPHVuc2lnbmVkIGludD4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8bG9uZz4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkobG9uZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPHVuc2lnbmVkIGxvbmc+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVkIGxvbmcgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLS8vIHVzZSBsb25nIGxvbmcgb3IgX19pbnQ2NAotI2lmIEBLV1NZU19VU0VfTE9OR19MT05HQAotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPGxvbmcgbG9uZz4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkobG9uZyBsb25nIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8dW5zaWduZWQgbG9uZyBsb25nPgotewotICBzaXplX3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBsb25nIGxvbmcgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0jZWxpZiBAS1dTWVNfVVNFX19fSU5UNjRACi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8X19pbnQ2ND4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoX19pbnQ2NCBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDx1bnNpZ25lZCBfX2ludDY0PgotewotICBzaXplX3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBfX2ludDY0IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotI2VuZGlmIC8vIHVzZSBsb25nIGxvbmcgb3IgX19pbnQ2NAotCi19IC8vIG5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9oYXNoX21hcC5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvaGFzaF9tYXAuaHh4LmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA0ZTljLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9rd3N5cy9oYXNoX21hcC5oeHguaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MjMgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcja3dzeXMgZm9yIGRldGFpbHMuICAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NgotICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCi0gKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKLSAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCi0gKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCi0gKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCi0gKgotICoKLSAqIENvcHlyaWdodCAoYykgMTk5NAotICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKLSAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCi0gKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAotICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKLSAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCi0gKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCi0gKgotICovCi0jaWZuZGVmIEBLV1NZU19OQU1FU1BBQ0VAX2hhc2hfbWFwX2h4eAotI2RlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9oYXNoX21hcF9oeHgKLQotI2luY2x1ZGUgPEBLV1NZU19OQU1FU1BBQ0VAL2hhc2h0YWJsZS5oeHg+Ci0KLSNpbmNsdWRlIDxAS1dTWVNfTkFNRVNQQUNFQC9oYXNoX2Z1bi5oeHg+Ci0KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPiAvLyBlcXVhbF90bwotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCi0jICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDI4NCkKLSMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0Nzg2KQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fc2dpKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgKF9NSVBTX1NJTSAhPSBfTUlQU19TSU1fQUJJMzIpCi0jICBwcmFnbWEgc2V0IHdvZmYgMTE3NAotIyAgcHJhZ21hIHNldCB3b2ZmIDEzNzUKLSNlbmRpZgotCi1uYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAgewotCi0vLyBzZWxlY3Qxc3QgaXMgYW4gZXh0ZW5zaW9uOiBpdCBpcyBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQuCi10ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotc3RydWN0IGhhc2hfc2VsZWN0MXN0Ci17Ci0gIGNvbnN0IFQxJiBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6cGFpcjxUMSwgVDI+JiBfX3gpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX194LmZpcnN0OwotICB9Ci19OwotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGVxdWFsaXR5IG9wZXJhdG9yOyBuZWVkZWQgZm9yIGZyaWVuZCBkZWNsYXJhdGlvbi4KLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24gPSBoYXNoPF9LZXk+LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCi0gICAgICAgICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgotY2xhc3MgaGFzaF9tYXA7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxS2V5LCBfQWxsb2M+JiwKLSAgICAgICAgICAgICAgICBjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcUtleSwgX0FsbG9jPiYpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1jbGFzcyBoYXNoX21hcAotewotcHJpdmF0ZToKLSAgdHlwZWRlZiBoYXNodGFibGU8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9LZXksIF9IYXNoRmNuLAotICAgICAgICAgICAgICAgICAgICBoYXNoX3NlbGVjdDFzdDxjb25zdCBfS2V5LCBfVHA+LCBfRXF1YWxLZXksIF9BbGxvYz4KLSAgICBfSHQ7Ci0gIF9IdCBfTV9odDsKLQotcHVibGljOgotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7Ci0gIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKLSAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpwb2ludGVyIHBvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Ci0KLSAgaGFzaGVyIGhhc2hfZnVuY3QoKSBjb25zdCB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KLSAga2V5X2VxdWFsIGtleV9lcSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9Ci0gIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KLQotcHVibGljOgotICBoYXNoX21hcCgpCi0gICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGV4cGxpY2l0IGhhc2hfbWFwKHNpemVfdHlwZSBfX24pCi0gICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGhhc2hfbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX21hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCi0gICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQotICB7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAotICAgICAgICAgICBjb25zdCBoYXNoZXImIF9faGYpCi0gICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKLSAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICAgIF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOwotICB9Ci0KLXB1YmxpYzoKLSAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KLSAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQotICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01faHQuZW1wdHkoKTsgfQotICB2b2lkIHN3YXAoaGFzaF9tYXAmIF9faHMpIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQotCi0gIGZyaWVuZCBib29sIG9wZXJhdG9yPT08Pihjb25zdCBoYXNoX21hcCYsIGNvbnN0IGhhc2hfbWFwJik7Ci0KLSAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9Ci0gIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9Ci0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQotICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9odC5lbmQoKTsgfQotCi1wdWJsaWM6Ci0gIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgcmV0dXJuIF9NX2h0Lmluc2VydF91bmlxdWUoX19vYmopOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLSAgewotICAgIHJldHVybiBfTV9odC5pbnNlcnRfdW5pcXVlX25vcmVzaXplKF9fb2JqKTsKLSAgfQotCi0gIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQotICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsKLSAgfQotCi0gIF9UcCYgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rZXkpCi0gIHsKLSAgICByZXR1cm4gX01faHQuZmluZF9vcl9pbnNlcnQodmFsdWVfdHlwZShfX2tleSwgX1RwKCkpKS5zZWNvbmQ7Ci0gIH0KLQotICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdCB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KLQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCi0gIHsKLSAgICByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOwotICB9Ci0gIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKAotICAgIGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7Ci0gIH0KLQotICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7IHJldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KLSAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2l0KSB7IF9NX2h0LmVyYXNlKF9faXQpOyB9Ci0gIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9Ci0gIHZvaWQgY2xlYXIoKSB7IF9NX2h0LmNsZWFyKCk7IH0KLQotICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KSB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9Ci0gIHNpemVfdHlwZSBidWNrZXRfY291bnQoKSBjb25zdCB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQotICBzaXplX3R5cGUgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQotICBzaXplX3R5cGUgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZjbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZjbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCi17Ci0gIHJldHVybiBfX2htMS5fTV9odCA9PSBfX2htMi5fTV9odDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oCi0gIGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGY24sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0xLAotICBjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRmNuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMikKLXsKLSAgcmV0dXJuICEoX19obTEgPT0gX19obTIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgotaW5saW5lIHZvaWQgc3dhcChoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRmNuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKLSAgICAgICAgICAgICAgICAgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZjbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCi17Ci0gIF9faG0xLnN3YXAoX19obTIpOwotfQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGVxdWFsaXR5IG9wZXJhdG9yOyBuZWVkZWQgZm9yIGZyaWVuZCBkZWNsYXJhdGlvbi4KLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24gPSBoYXNoPF9LZXk+LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCi0gICAgICAgICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgotY2xhc3MgaGFzaF9tdWx0aW1hcDsKLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0xLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTIpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1jbGFzcyBoYXNoX211bHRpbWFwCi17Ci1wcml2YXRlOgotICB0eXBlZGVmIGhhc2h0YWJsZTxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiwgX0tleSwgX0hhc2hGY24sCi0gICAgICAgICAgICAgICAgICAgIGhhc2hfc2VsZWN0MXN0PGNvbnN0IF9LZXksIF9UcD4sIF9FcXVhbEtleSwgX0FsbG9jPgotICAgIF9IdDsKLSAgX0h0IF9NX2h0OwotCi1wdWJsaWM6Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKLSAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwotICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOwotCi0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnBvaW50ZXIgcG9pbnRlcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwotCi0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotCi0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKLQotICBoYXNoZXIgaGFzaF9mdW5jdCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQotICBrZXlfZXF1YWwga2V5X2VxKCkgY29uc3QgeyByZXR1cm4gX01faHQua2V5X2VxKCk7IH0KLSAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQotCi1wdWJsaWM6Ci0gIGhhc2hfbXVsdGltYXAoKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBleHBsaWNpdCBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24pCi0gICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGhhc2hfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmKQotICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGhhc2hfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQotICB7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCi0gICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgaGFzaF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKLSAgICAgICAgICAgICAgICBjb25zdCBoYXNoZXImIF9faGYpCi0gICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsKLSAgfQotCi1wdWJsaWM6Ci0gIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9Ci0gIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KLSAgdm9pZCBzd2FwKGhhc2hfbXVsdGltYXAmIF9faHMpIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQotCi0gIGZyaWVuZCBib29sIG9wZXJhdG9yPT08Pihjb25zdCBoYXNoX211bHRpbWFwJiwgY29uc3QgaGFzaF9tdWx0aW1hcCYpOwotCi0gIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQotICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9odC5lbmQoKTsgfQotICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KLQotcHVibGljOgotICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi0gIHsKLSAgICByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsKF9fb2JqKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsKLSAgfQotICBpdGVyYXRvciBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi0gIHsKLSAgICByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsX25vcmVzaXplKF9fb2JqKTsKLSAgfQotCi0gIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQotICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsKLSAgfQotCi0gIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQotCi0gIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKLSAgewotICAgIHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7Ci0gIH0KLSAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoCi0gICAgY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsKLSAgfQotCi0gIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIHsgcmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQotICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9faXQpIHsgX01faHQuZXJhc2UoX19pdCk7IH0KLSAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2YsIGl0ZXJhdG9yIF9fbCkgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KLSAgdm9pZCBjbGVhcigpIHsgX01faHQuY2xlYXIoKTsgfQotCi1wdWJsaWM6Ci0gIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpIHsgX01faHQucmVzaXplKF9faGludCk7IH0KLSAgc2l6ZV90eXBlIGJ1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9Ci0gIHNpemVfdHlwZSBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9Ci0gIHNpemVfdHlwZSBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0xLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTIpCi17Ci0gIHJldHVybiBfX2htMS5fTV9odCA9PSBfX2htMi5fTV9odDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oCi0gIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTEsCi0gIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTIpCi17Ci0gIHJldHVybiAhKF9faG0xID09IF9faG0yKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KLWlubGluZSB2b2lkIHN3YXAoaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoRmNuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKLSAgICAgICAgICAgICAgICAgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoRmNuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMikKLXsKLSAgX19obTEuc3dhcChfX2htMik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VACi0KLSNpZiBkZWZpbmVkKF9fc2dpKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgKF9NSVBTX1NJTSAhPSBfTUlQU19TSU1fQUJJMzIpCi0jICBwcmFnbWEgcmVzZXQgd29mZiAxMTc0Ci0jICBwcmFnbWEgcmVzZXQgd29mZiAxMzc1Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jICBwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvaGFzaF9zZXQuaHh4LmluIGIvU291cmNlL2t3c3lzL2hhc2hfc2V0Lmh4eC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRhMzdlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uva3dzeXMvaGFzaF9zZXQuaHh4LmluCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLiAgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYKLSAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQotICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKLSAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCi0gKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgotICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTQKLSAqIEhld2xldHQtUGFja2FyZCBDb21wYW55Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCi0gKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKLSAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCi0gKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqLwotI2lmbmRlZiBAS1dTWVNfTkFNRVNQQUNFQF9oYXNoX3NldF9oeHgKLSNkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfaGFzaF9zZXRfaHh4Ci0KLSNpbmNsdWRlIDxAS1dTWVNfTkFNRVNQQUNFQC9oYXNodGFibGUuaHh4PgotCi0jaW5jbHVkZSA8QEtXU1lTX05BTUVTUEFDRUAvaGFzaF9mdW4uaHh4PgotCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4gLy8gZXF1YWxfdG8KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jICBwcmFnbWEgd2FybmluZyhwdXNoKQotIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQyODQpCi0jICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDc4NikKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX3NnaSkgJiYgIWRlZmluZWQoX19HTlVDX18pICYmIChfTUlQU19TSU0gIT0gX01JUFNfU0lNX0FCSTMyKQotIyAgcHJhZ21hIHNldCB3b2ZmIDExNzQKLSMgIHByYWdtYSBzZXQgd29mZiAxMzc1Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VAIHsKLQotLy8gaWRlbnRpdHkgaXMgYW4gZXh0ZW5zaW9uOiBpdCBpcyBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQuCi10ZW1wbGF0ZSA8Y2xhc3MgX1RwPgotc3RydWN0IF9JZGVudGl0eQotewotICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBlcXVhbGl0eSBvcGVyYXRvcjsgbmVlZGVkIGZvciBmcmllbmQgZGVjbGFyYXRpb24uCi0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuID0gaGFzaDxfVmFsdWU+LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKLSAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+Ci1jbGFzcyBoYXNoX3NldDsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMik7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWNsYXNzIGhhc2hfc2V0Ci17Ci1wcml2YXRlOgotICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsdWUsIF9WYWx1ZSwgX0hhc2hGY24sIF9JZGVudGl0eTxfVmFsdWU+LCBfRXF1YWxLZXksCi0gICAgICAgICAgICAgICAgICAgIF9BbGxvYz4KLSAgICBfSHQ7Ci0gIF9IdCBfTV9odDsKLQotcHVibGljOgotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIHBvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Ci0KLSAgaGFzaGVyIGhhc2hfZnVuY3QoKSBjb25zdCB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KLSAga2V5X2VxdWFsIGtleV9lcSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9Ci0gIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KLQotcHVibGljOgotICBoYXNoX3NldCgpCi0gICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGV4cGxpY2l0IGhhc2hfc2V0KHNpemVfdHlwZSBfX24pCi0gICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGhhc2hfc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX3NldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCi0gICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQotICB7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAotICAgICAgICAgICBjb25zdCBoYXNoZXImIF9faGYpCi0gICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKLSAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICAgIF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOwotICB9Ci0KLXB1YmxpYzoKLSAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KLSAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQotICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01faHQuZW1wdHkoKTsgfQotICB2b2lkIHN3YXAoaGFzaF9zZXQmIF9faHMpIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQotCi0gIGZyaWVuZCBib29sIG9wZXJhdG9yPT08Pihjb25zdCBoYXNoX3NldCYsIGNvbnN0IGhhc2hfc2V0Jik7Ci0KLSAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9Ci0gIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9Ci0KLXB1YmxpYzoKLSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi0gIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgX0h0X2l0ZXJhdG9yOwotICAgIHN0ZDo6cGFpcjxfSHRfaXRlcmF0b3IsIGJvb2w+IF9fcCA9IF9NX2h0Lmluc2VydF91bmlxdWUoX19vYmopOwotICAgIHJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+KF9fcC5maXJzdCwgX19wLnNlY29uZCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKLSAgewotICAgIF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOwotICB9Ci0gIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yIF9IdF9pdGVyYXRvcjsKLSAgICBzdGQ6OnBhaXI8X0h0X2l0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV9odC5pbnNlcnRfdW5pcXVlX25vcmVzaXplKF9fb2JqKTsKLSAgICByZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwotICB9Ci0KLSAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9Ci0KLSAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9Ci0KLSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsKLSAgfQotCi0gIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIHsgcmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQotICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9faXQpIHsgX01faHQuZXJhc2UoX19pdCk7IH0KLSAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2YsIGl0ZXJhdG9yIF9fbCkgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KLSAgdm9pZCBjbGVhcigpIHsgX01faHQuY2xlYXIoKTsgfQotCi1wdWJsaWM6Ci0gIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpIHsgX01faHQucmVzaXplKF9faGludCk7IH0KLSAgc2l6ZV90eXBlIGJ1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9Ci0gIHNpemVfdHlwZSBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9Ci0gIHNpemVfdHlwZSBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKLXsKLSAgcmV0dXJuIF9faHMxLl9NX2h0ID09IF9faHMyLl9NX2h0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KAotICBjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAotICBjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQotewotICByZXR1cm4gIShfX2hzMSA9PSBfX2hzMik7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1pbmxpbmUgdm9pZCBzd2FwKGhhc2hfc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAotICAgICAgICAgICAgICAgICBoYXNoX3NldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKLXsKLSAgX19oczEuc3dhcChfX2hzMik7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuID0gaGFzaDxfVmFsdWU+LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKLSAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+Ci1jbGFzcyBoYXNoX211bHRpc2V0OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMik7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWNsYXNzIGhhc2hfbXVsdGlzZXQKLXsKLXByaXZhdGU6Ci0gIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfSGFzaEZjbiwgX0lkZW50aXR5PF9WYWx1ZT4sIF9FcXVhbEtleSwKLSAgICAgICAgICAgICAgICAgICAgX0FsbG9jPgotICAgIF9IdDsKLSAgX0h0IF9NX2h0OwotCi1wdWJsaWM6Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOwotCi0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwotCi0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotCi0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKLQotICBoYXNoZXIgaGFzaF9mdW5jdCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQotICBrZXlfZXF1YWwga2V5X2VxKCkgY29uc3QgeyByZXR1cm4gX01faHQua2V5X2VxKCk7IH0KLSAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQotCi1wdWJsaWM6Ci0gIGhhc2hfbXVsdGlzZXQoKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBleHBsaWNpdCBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24pCi0gICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGhhc2hfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmKQotICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICB9Ci0gIGhhc2hfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQotICB7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCi0gICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKLSAgICAgICAgICAgICAgICBjb25zdCBoYXNoZXImIF9faGYpCi0gICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsKLSAgfQotCi1wdWJsaWM6Ci0gIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9Ci0gIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KLSAgdm9pZCBzd2FwKGhhc2hfbXVsdGlzZXQmIGhzKSB7IF9NX2h0LnN3YXAoaHMuX01faHQpOyB9Ci0KLSAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PTw+KGNvbnN0IGhhc2hfbXVsdGlzZXQmLCBjb25zdCBoYXNoX211bHRpc2V0Jik7Ci0KLSAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9Ci0gIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9Ci0KLXB1YmxpYzoKLSAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbChfX29iaik7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLSAgaXRlcmF0b3IgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbF9ub3Jlc2l6ZShfX29iaik7Ci0gIH0KLQotICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KLQotICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdCB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KLQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOwotICB9Ci0KLSAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgeyByZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9Ci0gIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19pdCkgeyBfTV9odC5lcmFzZShfX2l0KTsgfQotICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKSB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQotICB2b2lkIGNsZWFyKCkgeyBfTV9odC5jbGVhcigpOyB9Ci0KLXB1YmxpYzoKLSAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9faGludCkgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQotICBzaXplX3R5cGUgYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KLSAgc2l6ZV90eXBlIG1heF9idWNrZXRfY291bnQoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KLSAgc2l6ZV90eXBlIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19uKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKLXsKLSAgcmV0dXJuIF9faHMxLl9NX2h0ID09IF9faHMyLl9NX2h0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKLSAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKLSAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKLXsKLSAgcmV0dXJuICEoX19oczEgPT0gX19oczIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotaW5saW5lIHZvaWQgc3dhcChoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAotICAgICAgICAgICAgICAgICBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQotewotICBfX2hzMS5zd2FwKF9faHMyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAKLQotI2lmIGRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAoX01JUFNfU0lNICE9IF9NSVBTX1NJTV9BQkkzMikKLSMgIHByYWdtYSByZXNldCB3b2ZmIDExNzQKLSMgIHByYWdtYSByZXNldCB3b2ZmIDEzNzUKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgIHByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9oYXNodGFibGUuaHh4LmluIGIvU291cmNlL2t3c3lzL2hhc2h0YWJsZS5oeHguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNGIwMDIuLjAwMDAwMDAKLS0tIGEvU291cmNlL2t3c3lzL2hhc2h0YWJsZS5oeHguaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5OTUgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcja3dzeXMgZm9yIGRldGFpbHMuICAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NgotICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCi0gKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKLSAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCi0gKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCi0gKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCi0gKgotICoKLSAqIENvcHlyaWdodCAoYykgMTk5NAotICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKLSAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCi0gKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAotICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKLSAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCi0gKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCi0gKgotICovCi0jaWZkZWYgX19CT1JMQU5EQ19fCi0jICBwcmFnbWEgd2FybiAtIDgwMjcgLyogJ2Zvcicgbm90IGlubGluZWQuICAqLwotIyAgcHJhZ21hIHdhcm4gLSA4MDI2IC8qICdleGNlcHRpb24nIG5vdCBpbmxpbmVkLiAgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEBLV1NZU19OQU1FU1BBQ0VAX2hhc2h0YWJsZV9oeHgKLSMgIGRlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9oYXNodGFibGVfaHh4Ci0KLSMgIGluY2x1ZGUgPEBLV1NZU19OQU1FU1BBQ0VAL0NvbmZpZ3VyZS5oeHg+Ci0KLSMgIGluY2x1ZGUgPGFsZ29yaXRobT4gLy8gbG93ZXJfYm91bmQKLSMgIGluY2x1ZGUgPGl0ZXJhdG9yPiAgLy8gaXRlcmF0b3JfdHJhaXRzCi0jICBpbmNsdWRlIDxtZW1vcnk+ICAgIC8vIGFsbG9jYXRvcgotIyAgaW5jbHVkZSA8c3RkZGVmLmg+ICAvLyBzaXplX3QKLSMgIGluY2x1ZGUgPHV0aWxpdHk+ICAgLy8gcGFpcgotIyAgaW5jbHVkZSA8dmVjdG9yPiAgICAvLyB2ZWN0b3IKLQotIyAgaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgICAgcHJhZ21hIHdhcm5pbmcocHVzaCkKLSMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQyODQpCi0jICAgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0Nzg2KQotIyAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDUxMikgLyogbm8gYXNzaWdubWVudCBvcGVyYXRvciBmb3IgY2xhc3MgKi8KLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fc2dpKSAmJiAhZGVmaW5lZChfX0dOVUNfXykKLSMgICAgcHJhZ21hIHNldCB3b2ZmIDM5NzAgLyogcG9pbnRlciB0byBpbnQgY29udmVyc2lvbiAqLyAzMzIxIDM5NjgKLSMgIGVuZGlmCi0KLS8vIEluIEMrKzExLCBjbGFuZyB3aWxsIHdhcm4gYWJvdXQgdXNpbmcgZHluYW1pYyBleGNlcHRpb24gc3BlY2lmaWNhdGlvbnMKLS8vIGFzIHRoZXkgYXJlIGRlcHJlY2F0ZWQuICBCdXQgYXMgdGhpcyBjbGFzcyBpcyB0cnlpbmcgdG8gZmFpdGhmdWxseQotLy8gbWltaWMgdW5vcmRlcmVkX3NldCBhbmQgdW5vcmRlcmVkX21hcCwgd2Ugd2FudCB0byBrZWVwIHRoZSAndGhyb3coKScKLS8vIGRlY29yYXRpb25zIGJlbG93LiAgU28gd2Ugc3VwcHJlc3MgdGhlIHdhcm5pbmcuCi0jICBpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX2hhc193YXJuaW5nKQotIyAgICBpZiBfX2hhc193YXJuaW5nKCItV2RlcHJlY2F0ZWQiKQotIyAgICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSMgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQiCi0jICAgIGVuZGlmCi0jICBlbmRpZgotCi1uYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAgewotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbD4KLXN0cnVjdCBfSGFzaHRhYmxlX25vZGUKLXsKLSAgX0hhc2h0YWJsZV9ub2RlKiBfTV9uZXh0OwotICBfVmFsIF9NX3ZhbDsKLSAgdm9pZCBwdWJsaWNfbWV0aG9kX3RvX3F1aWV0X3dhcm5pbmdfYWJvdXRfYWxsX21ldGhvZHNfcHJpdmF0ZSgpOwotCi1wcml2YXRlOgotICB2b2lkIG9wZXJhdG9yPShfSGFzaHRhYmxlX25vZGU8X1ZhbD4gY29uc3QmKSA9IGRlbGV0ZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0V4dHJhY3RLZXksCi0gICAgICAgICAgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+Ci1jbGFzcyBoYXNodGFibGU7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0V4dHJhY3RLZXksCi0gICAgICAgICAgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1zdHJ1Y3QgX0hhc2h0YWJsZV9pdGVyYXRvcjsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXh0cmFjdEtleSwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLXN0cnVjdCBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FeHRyYWN0S2V5LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3IKLXsKLSAgdHlwZWRlZiBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LCBfRXF1YWxLZXksIF9BbGxvYz4KLSAgICBfSGFzaHRhYmxlOwotICB0eXBlZGVmIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LCBfRXF1YWxLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2M+Ci0gICAgaXRlcmF0b3I7Ci0gIHR5cGVkZWYgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXF1YWxLZXksIF9BbGxvYz4KLSAgICBjb25zdF9pdGVyYXRvcjsKLSAgdHlwZWRlZiBfSGFzaHRhYmxlX25vZGU8X1ZhbD4gX05vZGU7Ci0KLSAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwotICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKLSAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwotICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7Ci0gIHR5cGVkZWYgX1ZhbCYgcmVmZXJlbmNlOwotICB0eXBlZGVmIF9WYWwqIHBvaW50ZXI7Ci0KLSAgX05vZGUqIF9NX2N1cjsKLSAgX0hhc2h0YWJsZSogX01faHQ7Ci0KLSAgX0hhc2h0YWJsZV9pdGVyYXRvcihfTm9kZSogX19uLCBfSGFzaHRhYmxlKiBfX3RhYikKLSAgICA6IF9NX2N1cihfX24pCi0gICAgLCBfTV9odChfX3RhYikKLSAgewotICB9Ci0gIF9IYXNodGFibGVfaXRlcmF0b3IoKSB7fQotICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fY3VyLT5fTV92YWw7IH0KLSAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KLSAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKLSAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpOwotICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIF9faXQpIGNvbnN0IHsgcmV0dXJuIF9NX2N1ciA9PSBfX2l0Ll9NX2N1cjsgfQotICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIF9faXQpIGNvbnN0IHsgcmV0dXJuIF9NX2N1ciAhPSBfX2l0Ll9NX2N1cjsgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXh0cmFjdEtleSwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLXN0cnVjdCBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yCi17Ci0gIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwgX0VxdWFsS2V5LCBfQWxsb2M+Ci0gICAgX0hhc2h0YWJsZTsKLSAgdHlwZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwgX0VxdWFsS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jPgotICAgIGl0ZXJhdG9yOwotICB0eXBlZGVmIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0VxdWFsS2V5LCBfQWxsb2M+Ci0gICAgY29uc3RfaXRlcmF0b3I7Ci0gIHR5cGVkZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOwotCi0gIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKLSAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLSAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwotICB0eXBlZGVmIGNvbnN0IF9WYWwmIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiBjb25zdCBfVmFsKiBwb2ludGVyOwotCi0gIGNvbnN0IF9Ob2RlKiBfTV9jdXI7Ci0gIGNvbnN0IF9IYXNodGFibGUqIF9NX2h0OwotCi0gIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoY29uc3QgX05vZGUqIF9fbiwgY29uc3QgX0hhc2h0YWJsZSogX190YWIpCi0gICAgOiBfTV9jdXIoX19uKQotICAgICwgX01faHQoX190YWIpCi0gIHsKLSAgfQotICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKCkge30KLSAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkKLSAgICA6IF9NX2N1cihfX2l0Ll9NX2N1cikKLSAgICAsIF9NX2h0KF9faXQuX01faHQpCi0gIHsKLSAgfQotICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fY3VyLT5fTV92YWw7IH0KLSAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KLSAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKLSAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpOwotICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01fY3VyID09IF9faXQuX01fY3VyOwotICB9Ci0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCkgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9jdXIgIT0gX19pdC5fTV9jdXI7Ci0gIH0KLX07Ci0KLS8vIE5vdGU6IGFzc3VtZXMgbG9uZyBpcyBhdCBsZWFzdCAzMiBiaXRzLgotZW51bQotewotICBfc3RsX251bV9wcmltZXMgPSAzMQotfTsKLQotLy8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIHN0YXRpYyBsb2NhbCB0byB0aGF0IGZ1bmN0aW9uIHRoYXQgcmV0dXJucwotLy8gdGhlIHN0YXRpYwotc3RhdGljIGlubGluZSBjb25zdCB1bnNpZ25lZCBsb25nKiBnZXRfc3RsX3ByaW1lX2xpc3QoKQotewotCi0gIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIF9zdGxfcHJpbWVfbGlzdFtfc3RsX251bV9wcmltZXNdID0gewotICAgIDV1bCwgICAgICAgICAxMXVsLCAgICAgICAgMjN1bCwgICAgICAgIDUzdWwsICAgICAgICAgOTd1bCwKLSAgICAxOTN1bCwgICAgICAgMzg5dWwsICAgICAgIDc2OXVsLCAgICAgICAxNTQzdWwsICAgICAgIDMwNzl1bCwKLSAgICA2MTUxdWwsICAgICAgMTIyODl1bCwgICAgIDI0NTkzdWwsICAgICA0OTE1N3VsLCAgICAgIDk4MzE3dWwsCi0gICAgMTk2NjEzdWwsICAgIDM5MzI0MXVsLCAgICA3ODY0MzN1bCwgICAgMTU3Mjg2OXVsLCAgICAzMTQ1NzM5dWwsCi0gICAgNjI5MTQ2OXVsLCAgIDEyNTgyOTE3dWwsICAyNTE2NTg0M3VsLCAgNTAzMzE2NTN1bCwgICAxMDA2NjMzMTl1bCwKLSAgICAyMDEzMjY2MTF1bCwgNDAyNjUzMTg5dWwsIDgwNTMwNjQ1N3VsLCAxNjEwNjEyNzQxdWwsIDMyMjEyMjU0NzN1bCwKLSAgICA0Mjk0OTY3MjkxdWwKLSAgfTsKLQotICByZXR1cm4gJl9zdGxfcHJpbWVfbGlzdFswXTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QgX3N0bF9uZXh0X3ByaW1lKHNpemVfdCBfX24pCi17Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fZmlyc3QgPSBnZXRfc3RsX3ByaW1lX2xpc3QoKTsKLSAgY29uc3QgdW5zaWduZWQgbG9uZyogX19sYXN0ID0gZ2V0X3N0bF9wcmltZV9saXN0KCkgKyAoaW50KV9zdGxfbnVtX3ByaW1lczsKLSAgY29uc3QgdW5zaWduZWQgbG9uZyogcG9zID0gc3RkOjpsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fbik7Ci0gIHJldHVybiBwb3MgPT0gX19sYXN0ID8gKihfX2xhc3QgLSAxKSA6ICpwb3M7Ci19Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb24gb2Ygb3BlcmF0b3I9PS4KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci1jbGFzcyBoYXNodGFibGU7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDEsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+JiBfX2h0Mik7Ci0KLS8vIEhhc2h0YWJsZXMgaGFuZGxlIGFsbG9jYXRvcnMgYSBiaXQgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBjb250YWluZXJzCi0vLyAgZG8uICBJZiB3ZSdyZSB1c2luZyBzdGFuZGFyZC1jb25mb3JtaW5nIGFsbG9jYXRvcnMsIHRoZW4gYSBoYXNodGFibGUKLS8vICB1bmNvbmRpdGlvbmFsbHkgaGFzIGEgbWVtYmVyIHZhcmlhYmxlIHRvIGhvbGQgaXRzIGFsbG9jYXRvciwgZXZlbiBpZgotLy8gIGl0IHNvIGhhcHBlbnMgdGhhdCBhbGwgaW5zdGFuY2VzIG9mIHRoZSBhbGxvY2F0b3IgdHlwZSBhcmUgaWRlbnRpY2FsLgotLy8gVGhpcyBpcyBiZWNhdXNlLCBmb3IgaGFzaHRhYmxlcywgdGhpcyBleHRyYSBzdG9yYWdlIGlzIG5lZ2xpZ2libGUuCi0vLyAgQWRkaXRpb25hbGx5LCBhIGJhc2UgY2xhc3Mgd291bGRuJ3Qgc2VydmUgYW55IG90aGVyIHB1cnBvc2VzOyBpdAotLy8gIHdvdWxkbid0LCBmb3IgZXhhbXBsZSwgc2ltcGxpZnkgdGhlIGV4Y2VwdGlvbi1oYW5kbGluZyBjb2RlLgotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FeHRyYWN0S2V5LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotY2xhc3MgaGFzaHRhYmxlCi17Ci1wdWJsaWM6Ci0gIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKLSAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgX0hhc2hGY24gaGFzaGVyOwotICB0eXBlZGVmIF9FcXVhbEtleSBrZXlfZXF1YWw7Ci0KLSAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwotICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKLSAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwotICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7Ci0KLSAgaGFzaGVyIGhhc2hfZnVuY3QoKSBjb25zdCB7IHJldHVybiBfTV9oYXNoOyB9Ci0gIGtleV9lcXVhbCBrZXlfZXEoKSBjb25zdCB7IHJldHVybiBfTV9lcXVhbHM7IH0KLQotcHJpdmF0ZToKLSAgdHlwZWRlZiBfSGFzaHRhYmxlX25vZGU8X1ZhbD4gX05vZGU7Ci0KLXB1YmxpYzoKLSAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfVmFsPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7Ci0gIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQotCi1wcml2YXRlOgotICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X05vZGU+OjpvdGhlciBfTV9ub2RlX2FsbG9jYXRvcl90eXBlOwotICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X05vZGUqPjo6b3RoZXIgX01fbm9kZV9wdHJfYWxsb2NhdG9yX3R5cGU7Ci0gIHR5cGVkZWYgc3RkOjp2ZWN0b3I8X05vZGUqLCBfTV9ub2RlX3B0cl9hbGxvY2F0b3JfdHlwZT4gX01fYnVja2V0c190eXBlOwotCi1wcml2YXRlOgotICBfTV9ub2RlX2FsbG9jYXRvcl90eXBlIF9NX25vZGVfYWxsb2NhdG9yOwotICBoYXNoZXIgX01faGFzaDsKLSAga2V5X2VxdWFsIF9NX2VxdWFsczsKLSAgX0V4dHJhY3RLZXkgX01fZ2V0X2tleTsKLSAgX01fYnVja2V0c190eXBlIF9NX2J1Y2tldHM7Ci0gIHNpemVfdHlwZSBfTV9udW1fZWxlbWVudHM7Ci0KLSAgX05vZGUqIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KLSAgdm9pZCBfTV9wdXRfbm9kZShfTm9kZSogX19wKSB7IF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQotCi1wdWJsaWM6Ci0gIHR5cGVkZWYgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvYz4KLSAgICBpdGVyYXRvcjsKLSAgdHlwZWRlZiBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FcXVhbEtleSwgX0FsbG9jPgotICAgIGNvbnN0X2l0ZXJhdG9yOwotCi0gIGZyaWVuZCBzdHJ1Y3QgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXF1YWxLZXksIF9BbGxvYz47Ci0gIGZyaWVuZCBzdHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXF1YWxLZXksIF9BbGxvYz47Ci0KLXB1YmxpYzoKLSAgaGFzaHRhYmxlKHNpemVfdHlwZSBfX24sIGNvbnN0IF9IYXNoRmNuJiBfX2hmLCBjb25zdCBfRXF1YWxLZXkmIF9fZXFsLAotICAgICAgICAgICAgY29uc3QgX0V4dHJhY3RLZXkmIF9fZXh0LAotICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCi0gICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpCi0gICAgLCBfTV9oYXNoKF9faGYpCi0gICAgLCBfTV9lcXVhbHMoX19lcWwpCi0gICAgLCBfTV9nZXRfa2V5KF9fZXh0KQotICAgICwgX01fYnVja2V0cyhfX2EpCi0gICAgLCBfTV9udW1fZWxlbWVudHMoMCkKLSAgewotICAgIF9NX2luaXRpYWxpemVfYnVja2V0cyhfX24pOwotICB9Ci0KLSAgaGFzaHRhYmxlKHNpemVfdHlwZSBfX24sIGNvbnN0IF9IYXNoRmNuJiBfX2hmLCBjb25zdCBfRXF1YWxLZXkmIF9fZXFsLAotICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCi0gICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpCi0gICAgLCBfTV9oYXNoKF9faGYpCi0gICAgLCBfTV9lcXVhbHMoX19lcWwpCi0gICAgLCBfTV9nZXRfa2V5KF9FeHRyYWN0S2V5KCkpCi0gICAgLCBfTV9idWNrZXRzKF9fYSkKLSAgICAsIF9NX251bV9lbGVtZW50cygwKQotICB7Ci0gICAgX01faW5pdGlhbGl6ZV9idWNrZXRzKF9fbik7Ci0gIH0KLQotICBoYXNodGFibGUoY29uc3QgaGFzaHRhYmxlJiBfX2h0KQotICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19odC5nZXRfYWxsb2NhdG9yKCkpCi0gICAgLCBfTV9oYXNoKF9faHQuX01faGFzaCkKLSAgICAsIF9NX2VxdWFscyhfX2h0Ll9NX2VxdWFscykKLSAgICAsIF9NX2dldF9rZXkoX19odC5fTV9nZXRfa2V5KQotICAgICwgX01fYnVja2V0cyhfX2h0LmdldF9hbGxvY2F0b3IoKSkKLSAgICAsIF9NX251bV9lbGVtZW50cygwKQotICB7Ci0gICAgX01fY29weV9mcm9tKF9faHQpOwotICB9Ci0KLSAgaGFzaHRhYmxlJiBvcGVyYXRvcj0oY29uc3QgaGFzaHRhYmxlJiBfX2h0KQotICB7Ci0gICAgaWYgKCZfX2h0ICE9IHRoaXMpIHsKLSAgICAgIGNsZWFyKCk7Ci0gICAgICBfTV9oYXNoID0gX19odC5fTV9oYXNoOwotICAgICAgX01fZXF1YWxzID0gX19odC5fTV9lcXVhbHM7Ci0gICAgICBfTV9nZXRfa2V5ID0gX19odC5fTV9nZXRfa2V5OwotICAgICAgX01fY29weV9mcm9tKF9faHQpOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB+aGFzaHRhYmxlKCkgeyBjbGVhcigpOyB9Ci0KLSAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9udW1fZWxlbWVudHM7IH0KLSAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQotICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KLQotICB2b2lkIHN3YXAoaGFzaHRhYmxlJiBfX2h0KQotICB7Ci0gICAgc3RkOjpzd2FwKF9NX2hhc2gsIF9faHQuX01faGFzaCk7Ci0gICAgc3RkOjpzd2FwKF9NX2VxdWFscywgX19odC5fTV9lcXVhbHMpOwotICAgIHN0ZDo6c3dhcChfTV9nZXRfa2V5LCBfX2h0Ll9NX2dldF9rZXkpOwotICAgIF9NX2J1Y2tldHMuc3dhcChfX2h0Ll9NX2J1Y2tldHMpOwotICAgIHN0ZDo6c3dhcChfTV9udW1fZWxlbWVudHMsIF9faHQuX01fbnVtX2VsZW1lbnRzKTsKLSAgfQotCi0gIGl0ZXJhdG9yIGJlZ2luKCkKLSAgewotICAgIGZvciAoc2l6ZV90eXBlIF9fbiA9IDA7IF9fbiA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKLSAgICAgIGlmIChfTV9idWNrZXRzW19fbl0pCi0gICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9idWNrZXRzW19fbl0sIHRoaXMpOwotICAgIHJldHVybiBlbmQoKTsKLSAgfQotCi0gIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKG51bGxwdHIsIHRoaXMpOyB9Ci0KLSAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICB7Ci0gICAgZm9yIChzaXplX3R5cGUgX19uID0gMDsgX19uIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19uKQotICAgICAgaWYgKF9NX2J1Y2tldHNbX19uXSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2J1Y2tldHNbX19uXSwgdGhpcyk7Ci0gICAgcmV0dXJuIGVuZCgpOwotICB9Ci0KLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IobnVsbHB0ciwgdGhpcyk7IH0KLQotICBmcmllbmQgYm9vbCBvcGVyYXRvcj09PD4oY29uc3QgaGFzaHRhYmxlJiwgY29uc3QgaGFzaHRhYmxlJik7Ci0KLXB1YmxpYzoKLSAgc2l6ZV90eXBlIGJ1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2J1Y2tldHMuc2l6ZSgpOyB9Ci0KLSAgc2l6ZV90eXBlIG1heF9idWNrZXRfY291bnQoKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIGdldF9zdGxfcHJpbWVfbGlzdCgpWyhpbnQpX3N0bF9udW1fcHJpbWVzIC0gMV07Ci0gIH0KLQotICBzaXplX3R5cGUgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX2J1Y2tldCkgY29uc3QKLSAgewotICAgIHNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7Ci0gICAgZm9yIChfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fYnVja2V0XTsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCi0gICAgICBfX3Jlc3VsdCArPSAxOwotICAgIHJldHVybiBfX3Jlc3VsdDsKLSAgfQotCi0gIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLSAgewotICAgIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyAxKTsKLSAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShfX29iaik7Ci0gIH0KLQotICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi0gIHsKLSAgICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgMSk7Ci0gICAgcmV0dXJuIGluc2VydF9lcXVhbF9ub3Jlc2l6ZShfX29iaik7Ci0gIH0KLQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydF91bmlxdWVfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopOwotICBpdGVyYXRvciBpbnNlcnRfZXF1YWxfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICB7Ci0gICAgaW5zZXJ0X3VuaXF1ZSgKLSAgICAgIF9fZiwgX19sLAotICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCi0gIHsKLSAgICBpbnNlcnRfZXF1YWwoCi0gICAgICBfX2YsIF9fbCwKLSAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIHZvaWQgaW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQotICB7Ci0gICAgZm9yICg7IF9fZiAhPSBfX2w7ICsrX19mKQotICAgICAgaW5zZXJ0X3VuaXF1ZSgqX19mKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQotICB7Ci0gICAgZm9yICg7IF9fZiAhPSBfX2w7ICsrX19mKQotICAgICAgaW5zZXJ0X2VxdWFsKCpfX2YpOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+Ci0gIHZvaWQgaW5zZXJ0X3VuaXF1ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX2wsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQotICB7Ci0gICAgc2l6ZV90eXBlIF9fbiA9IDA7Ci0gICAgc3RkOjpkaXN0YW5jZShfX2YsIF9fbCwgX19uKTsKLSAgICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgX19uKTsKLSAgICBmb3IgKDsgX19uID4gMDsgLS1fX24sICsrX19mKQotICAgICAgaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZSgqX19mKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgotICB2b2lkIGluc2VydF9lcXVhbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX2wsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCi0gIHsKLSAgICBzaXplX3R5cGUgX19uID0gMDsKLSAgICBzdGQ6OmRpc3RhbmNlKF9fZiwgX19sLCBfX24pOwotICAgIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyBfX24pOwotICAgIGZvciAoOyBfX24gPiAwOyAtLV9fbiwgKytfX2YpCi0gICAgICBpbnNlcnRfZXF1YWxfbm9yZXNpemUoKl9fZik7Ci0gIH0KLQotICByZWZlcmVuY2UgZmluZF9vcl9pbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopOwotCi0gIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQotICB7Ci0gICAgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsKLSAgICBfTm9kZSogX19maXJzdDsKLSAgICBmb3IgKF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07Ci0gICAgICAgICBfX2ZpcnN0ICYmICFfTV9lcXVhbHMoX01fZ2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBfX2tleSk7Ci0gICAgICAgICBfX2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkgewotICAgIH0KLSAgICByZXR1cm4gaXRlcmF0b3IoX19maXJzdCwgdGhpcyk7Ci0gIH0KLQotICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLSAgewotICAgIHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7Ci0gICAgY29uc3QgX05vZGUqIF9fZmlyc3Q7Ci0gICAgZm9yIChfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOwotICAgICAgICAgX19maXJzdCAmJiAhX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpOwotICAgICAgICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpIHsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpOwotICB9Ci0KLSAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLSAgewotICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7Ci0gICAgc2l6ZV90eXBlIF9fcmVzdWx0ID0gMDsKLQotICAgIGZvciAoY29uc3QgX05vZGUqIF9fY3VyID0gX01fYnVja2V0c1tfX25dOyBfX2N1cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKLSAgICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX19rZXkpKQotICAgICAgICArK19fcmVzdWx0OwotICAgIHJldHVybiBfX3Jlc3VsdDsKLSAgfQotCi0gIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSk7Ci0KLSAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoCi0gICAgY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdDsKLQotICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KTsKLSAgdm9pZCBlcmFzZShjb25zdCBpdGVyYXRvciYgX19pdCk7Ci0gIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKLQotICB2b2lkIGVyYXNlKGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2l0KTsKLSAgdm9pZCBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpOwotCi0gIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX251bV9lbGVtZW50c19oaW50KTsKLSAgdm9pZCBjbGVhcigpOwotCi1wcml2YXRlOgotICBzaXplX3R5cGUgX01fbmV4dF9zaXplKHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuIF9zdGxfbmV4dF9wcmltZShfX24pOyB9Ci0KLSAgdm9pZCBfTV9pbml0aWFsaXplX2J1Y2tldHMoc2l6ZV90eXBlIF9fbikKLSAgewotICAgIGNvbnN0IHNpemVfdHlwZSBfX25fYnVja2V0cyA9IF9NX25leHRfc2l6ZShfX24pOwotICAgIF9NX2J1Y2tldHMucmVzZXJ2ZShfX25fYnVja2V0cyk7Ci0gICAgX01fYnVja2V0cy5pbnNlcnQoX01fYnVja2V0cy5lbmQoKSwgX19uX2J1Y2tldHMsIChfTm9kZSopbnVsbHB0cik7Ci0gICAgX01fbnVtX2VsZW1lbnRzID0gMDsKLSAgfQotCi0gIHNpemVfdHlwZSBfTV9ia3RfbnVtX2tleShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01fYmt0X251bV9rZXkoX19rZXksIF9NX2J1Y2tldHMuc2l6ZSgpKTsKLSAgfQotCi0gIHNpemVfdHlwZSBfTV9ia3RfbnVtKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2JrdF9udW1fa2V5KF9NX2dldF9rZXkoX19vYmopKTsKLSAgfQotCi0gIHNpemVfdHlwZSBfTV9ia3RfbnVtX2tleShjb25zdCBrZXlfdHlwZSYgX19rZXksIHNpemVfdCBfX24pIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faGFzaChfX2tleSkgJSBfX247Ci0gIH0KLQotICBzaXplX3R5cGUgX01fYmt0X251bShjb25zdCB2YWx1ZV90eXBlJiBfX29iaiwgc2l6ZV90IF9fbikgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9ia3RfbnVtX2tleShfTV9nZXRfa2V5KF9fb2JqKSwgX19uKTsKLSAgfQotCi0gIHZvaWQgY29uc3RydWN0KF9WYWwqIHAsIGNvbnN0IF9WYWwmIHYpIHsgbmV3IChwKSBfVmFsKHYpOyB9Ci0gIHZvaWQgZGVzdHJveShfVmFsKiBwKQotICB7Ci0gICAgKHZvaWQpcDsKLSAgICBwLT5+X1ZhbCgpOwotICB9Ci0KLSAgX05vZGUqIF9NX25ld19ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgX05vZGUqIF9fbiA9IF9NX2dldF9ub2RlKCk7Ci0gICAgX19uLT5fTV9uZXh0ID0gbnVsbHB0cjsKLSAgICB0cnkgewotICAgICAgY29uc3RydWN0KCZfX24tPl9NX3ZhbCwgX19vYmopOwotICAgICAgcmV0dXJuIF9fbjsKLSAgICB9IGNhdGNoICguLi4pIHsKLSAgICAgIF9NX3B1dF9ub2RlKF9fbik7Ci0gICAgICB0aHJvdzsKLSAgICB9Ci0gIH0KLQotICB2b2lkIF9NX2RlbGV0ZV9ub2RlKF9Ob2RlKiBfX24pCi0gIHsKLSAgICBkZXN0cm95KCZfX24tPl9NX3ZhbCk7Ci0gICAgX01fcHV0X25vZGUoX19uKTsKLSAgfQotCi0gIHZvaWQgX01fZXJhc2VfYnVja2V0KGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2ZpcnN0LCBfTm9kZSogX19sYXN0KTsKLSAgdm9pZCBfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fbGFzdCk7Ci0KLSAgdm9pZCBfTV9jb3B5X2Zyb20oY29uc3QgaGFzaHRhYmxlJiBfX2h0KTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeEssIGNsYXNzIF9FcUssCi0gICAgICAgICAgY2xhc3MgX0FsbD4KLV9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPiYKLV9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPjo6b3BlcmF0b3IrKygpCi17Ci0gIGNvbnN0IF9Ob2RlKiBfX29sZCA9IF9NX2N1cjsKLSAgX01fY3VyID0gX01fY3VyLT5fTV9uZXh0OwotICBpZiAoIV9NX2N1cikgewotICAgIHNpemVfdHlwZSBfX2J1Y2tldCA9IF9NX2h0LT5fTV9ia3RfbnVtKF9fb2xkLT5fTV92YWwpOwotICAgIHdoaWxlICghX01fY3VyICYmICsrX19idWNrZXQgPCBfTV9odC0+X01fYnVja2V0cy5zaXplKCkpCi0gICAgICBfTV9jdXIgPSBfTV9odC0+X01fYnVja2V0c1tfX2J1Y2tldF07Ci0gIH0KLSAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAotICAgICAgICAgIGNsYXNzIF9BbGw+Ci1pbmxpbmUgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+Ci1fSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46Om9wZXJhdG9yKysoaW50KQotewotICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwotICArKyp0aGlzOwotICByZXR1cm4gX190bXA7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeEssIGNsYXNzIF9FcUssCi0gICAgICAgICAgY2xhc3MgX0FsbD4KLV9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPiYKLV9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPjo6b3BlcmF0b3IrKygpCi17Ci0gIGNvbnN0IF9Ob2RlKiBfX29sZCA9IF9NX2N1cjsKLSAgX01fY3VyID0gX01fY3VyLT5fTV9uZXh0OwotICBpZiAoIV9NX2N1cikgewotICAgIHNpemVfdHlwZSBfX2J1Y2tldCA9IF9NX2h0LT5fTV9ia3RfbnVtKF9fb2xkLT5fTV92YWwpOwotICAgIHdoaWxlICghX01fY3VyICYmICsrX19idWNrZXQgPCBfTV9odC0+X01fYnVja2V0cy5zaXplKCkpCi0gICAgICBfTV9jdXIgPSBfTV9odC0+X01fYnVja2V0c1tfX2J1Y2tldF07Ci0gIH0KLSAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAotICAgICAgICAgIGNsYXNzIF9BbGw+Ci1pbmxpbmUgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+Ci1fSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46Om9wZXJhdG9yKysoaW50KQotewotICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwotICArKyp0aGlzOwotICByZXR1cm4gX190bXA7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDEsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+JiBfX2h0MikKLXsKLSAgdHlwZWRlZiB0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Ol9Ob2RlIF9Ob2RlOwotICBpZiAoX19odDEuX01fYnVja2V0cy5zaXplKCkgIT0gX19odDIuX01fYnVja2V0cy5zaXplKCkpCi0gICAgcmV0dXJuIGZhbHNlOwotICBmb3IgKGludCBfX24gPSAwOyBfX24gPCBfX2h0MS5fTV9idWNrZXRzLnNpemUoKTsgKytfX24pIHsKLSAgICBfTm9kZSogX19jdXIxID0gX19odDEuX01fYnVja2V0c1tfX25dOwotICAgIF9Ob2RlKiBfX2N1cjIgPSBfX2h0Mi5fTV9idWNrZXRzW19fbl07Ci0gICAgZm9yICg7IF9fY3VyMSAmJiBfX2N1cjIgJiYgX19jdXIxLT5fTV92YWwgPT0gX19jdXIyLT5fTV92YWw7Ci0gICAgICAgICBfX2N1cjEgPSBfX2N1cjEtPl9NX25leHQsIF9fY3VyMiA9IF9fY3VyMi0+X01fbmV4dCkgewotICAgIH0KLSAgICBpZiAoX19jdXIxIHx8IF9fY3VyMikKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDEsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDIpCi17Ci0gIHJldHVybiAhKF9faHQxID09IF9faHQyKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4dHJhY3QsIGNsYXNzIF9FcUtleSwKLSAgICAgICAgICBjbGFzcyBfQWxsPgotaW5saW5lIHZvaWQgc3dhcChoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXh0cmFjdCwgX0VxS2V5LCBfQWxsPiYgX19odDEsCi0gICAgICAgICAgICAgICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeHRyYWN0LCBfRXFLZXksIF9BbGw+JiBfX2h0MikKLXsKLSAgX19odDEuc3dhcChfX2h0Mik7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotc3RkOjpwYWlyPHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6aXRlcmF0b3IsIGJvb2w+Ci1oYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Omluc2VydF91bmlxdWVfbm9yZXNpemUoCi0gIGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotewotICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bShfX29iaik7Ci0gIF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOwotCi0gIGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCi0gICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfTV9nZXRfa2V5KF9fb2JqKSkpCi0gICAgICByZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX2N1ciwgdGhpcyksIGZhbHNlKTsKLQotICBfTm9kZSogX190bXAgPSBfTV9uZXdfbm9kZShfX29iaik7Ci0gIF9fdG1wLT5fTV9uZXh0ID0gX19maXJzdDsKLSAgX01fYnVja2V0c1tfX25dID0gX190bXA7Ci0gICsrX01fbnVtX2VsZW1lbnRzOwotICByZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3RtcCwgdGhpcyksIHRydWUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLXR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6aXRlcmF0b3IKLWhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6aW5zZXJ0X2VxdWFsX25vcmVzaXplKAotICBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLXsKLSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19vYmopOwotICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKLQotICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3Q7IF9fY3VyOyBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQotICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX01fZ2V0X2tleShfX29iaikpKSB7Ci0gICAgICBfTm9kZSogX190bXAgPSBfTV9uZXdfbm9kZShfX29iaik7Ci0gICAgICBfX3RtcC0+X01fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwotICAgICAgX19jdXItPl9NX25leHQgPSBfX3RtcDsKLSAgICAgICsrX01fbnVtX2VsZW1lbnRzOwotICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9fdG1wLCB0aGlzKTsKLSAgICB9Ci0KLSAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOwotICBfX3RtcC0+X01fbmV4dCA9IF9fZmlyc3Q7Ci0gIF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOwotICArK19NX251bV9lbGVtZW50czsKLSAgcmV0dXJuIGl0ZXJhdG9yKF9fdG1wLCB0aGlzKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci10eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OnJlZmVyZW5jZQotaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpmaW5kX29yX2luc2VydCgKLSAgY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi17Ci0gIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyAxKTsKLQotICBzaXplX3R5cGUgX19uID0gX01fYmt0X251bShfX29iaik7Ci0gIF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOwotCi0gIGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCi0gICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfTV9nZXRfa2V5KF9fb2JqKSkpCi0gICAgICByZXR1cm4gX19jdXItPl9NX3ZhbDsKLQotICBfTm9kZSogX190bXAgPSBfTV9uZXdfbm9kZShfX29iaik7Ci0gIF9fdG1wLT5fTV9uZXh0ID0gX19maXJzdDsKLSAgX01fYnVja2V0c1tfX25dID0gX190bXA7Ci0gICsrX01fbnVtX2VsZW1lbnRzOwotICByZXR1cm4gX190bXAtPl9NX3ZhbDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci1zdGQ6OnBhaXI8dHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjppdGVyYXRvciwKLSAgICAgICAgICB0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Oml0ZXJhdG9yPgotaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjplcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCi17Ci0gIHR5cGVkZWYgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gX1BpaTsKLSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsKLQotICBmb3IgKF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOyBfX2ZpcnN0OyBfX2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkKLSAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpKSB7Ci0gICAgICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3QtPl9NX25leHQ7IF9fY3VyOyBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQotICAgICAgICBpZiAoIV9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfX2tleSkpCi0gICAgICAgICAgcmV0dXJuIF9QaWkoaXRlcmF0b3IoX19maXJzdCwgdGhpcyksIGl0ZXJhdG9yKF9fY3VyLCB0aGlzKSk7Ci0gICAgICBmb3IgKHNpemVfdHlwZSBfX20gPSBfX24gKyAxOyBfX20gPCBfTV9idWNrZXRzLnNpemUoKTsgKytfX20pCi0gICAgICAgIGlmIChfTV9idWNrZXRzW19fbV0pCi0gICAgICAgICAgcmV0dXJuIF9QaWkoaXRlcmF0b3IoX19maXJzdCwgdGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoX01fYnVja2V0c1tfX21dLCB0aGlzKSk7Ci0gICAgICByZXR1cm4gX1BpaShpdGVyYXRvcihfX2ZpcnN0LCB0aGlzKSwgZW5kKCkpOwotICAgIH0KLSAgcmV0dXJuIF9QaWkoZW5kKCksIGVuZCgpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci1zdGQ6OnBhaXI8dHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+Ojpjb25zdF9pdGVyYXRvciwKLSAgICAgICAgICB0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OmNvbnN0X2l0ZXJhdG9yPgotaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjplcXVhbF9yYW5nZSgKLSAgY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAotewotICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9QaWk7Ci0gIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7Ci0KLSAgZm9yIChjb25zdCBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsgX19maXJzdDsKLSAgICAgICBfX2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkgewotICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBfX2tleSkpIHsKLSAgICAgIGZvciAoY29uc3QgX05vZGUqIF9fY3VyID0gX19maXJzdC0+X01fbmV4dDsgX19jdXI7Ci0gICAgICAgICAgIF9fY3VyID0gX19jdXItPl9NX25leHQpCi0gICAgICAgIGlmICghX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9fa2V5KSkKLSAgICAgICAgICByZXR1cm4gX1BpaShjb25zdF9pdGVyYXRvcihfX2ZpcnN0LCB0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcihfX2N1ciwgdGhpcykpOwotICAgICAgZm9yIChzaXplX3R5cGUgX19tID0gX19uICsgMTsgX19tIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19tKQotICAgICAgICBpZiAoX01fYnVja2V0c1tfX21dKQotICAgICAgICAgIHJldHVybiBfUGlpKGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yKF9NX2J1Y2tldHNbX19tXSwgdGhpcykpOwotICAgICAgcmV0dXJuIF9QaWkoY29uc3RfaXRlcmF0b3IoX19maXJzdCwgdGhpcyksIGVuZCgpKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIF9QaWkoZW5kKCksIGVuZCgpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci10eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OnNpemVfdHlwZQotaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjplcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCi17Ci0gIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7Ci0gIF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOwotICBzaXplX3R5cGUgX19lcmFzZWQgPSAwOwotCi0gIGlmIChfX2ZpcnN0KSB7Ci0gICAgX05vZGUqIF9fY3VyID0gX19maXJzdDsKLSAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25leHQ7Ci0gICAgd2hpbGUgKF9fbmV4dCkgewotICAgICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fbmV4dC0+X01fdmFsKSwgX19rZXkpKSB7Ci0gICAgICAgIF9fY3VyLT5fTV9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OwotICAgICAgICBfTV9kZWxldGVfbm9kZShfX25leHQpOwotICAgICAgICBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKLSAgICAgICAgKytfX2VyYXNlZDsKLSAgICAgICAgLS1fTV9udW1fZWxlbWVudHM7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBfX2N1ciA9IF9fbmV4dDsKLSAgICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBfX2tleSkpIHsKLSAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fZmlyc3QtPl9NX25leHQ7Ci0gICAgICBfTV9kZWxldGVfbm9kZShfX2ZpcnN0KTsKLSAgICAgICsrX19lcmFzZWQ7Ci0gICAgICAtLV9NX251bV9lbGVtZW50czsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIF9fZXJhc2VkOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLXZvaWQgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjplcmFzZShjb25zdCBpdGVyYXRvciYgX19pdCkKLXsKLSAgX05vZGUqIF9fcCA9IF9faXQuX01fY3VyOwotICBpZiAoX19wKSB7Ci0gICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19wLT5fTV92YWwpOwotICAgIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsKLQotICAgIGlmIChfX2N1ciA9PSBfX3ApIHsKLSAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fY3VyLT5fTV9uZXh0OwotICAgICAgX01fZGVsZXRlX25vZGUoX19jdXIpOwotICAgICAgLS1fTV9udW1fZWxlbWVudHM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKLSAgICAgIHdoaWxlIChfX25leHQpIHsKLSAgICAgICAgaWYgKF9fbmV4dCA9PSBfX3ApIHsKLSAgICAgICAgICBfX2N1ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKLSAgICAgICAgICBfTV9kZWxldGVfbm9kZShfX25leHQpOwotICAgICAgICAgIC0tX01fbnVtX2VsZW1lbnRzOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIF9fY3VyID0gX19uZXh0OwotICAgICAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotdm9pZCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0KQotewotICBzaXplX3R5cGUgX19mX2J1Y2tldCA9Ci0gICAgX19maXJzdC5fTV9jdXIgPyBfTV9ia3RfbnVtKF9fZmlyc3QuX01fY3VyLT5fTV92YWwpIDogX01fYnVja2V0cy5zaXplKCk7Ci0gIHNpemVfdHlwZSBfX2xfYnVja2V0ID0KLSAgICBfX2xhc3QuX01fY3VyID8gX01fYmt0X251bShfX2xhc3QuX01fY3VyLT5fTV92YWwpIDogX01fYnVja2V0cy5zaXplKCk7Ci0KLSAgaWYgKF9fZmlyc3QuX01fY3VyID09IF9fbGFzdC5fTV9jdXIpCi0gICAgcmV0dXJuOwotICBlbHNlIGlmIChfX2ZfYnVja2V0ID09IF9fbF9idWNrZXQpCi0gICAgX01fZXJhc2VfYnVja2V0KF9fZl9idWNrZXQsIF9fZmlyc3QuX01fY3VyLCBfX2xhc3QuX01fY3VyKTsKLSAgZWxzZSB7Ci0gICAgX01fZXJhc2VfYnVja2V0KF9fZl9idWNrZXQsIF9fZmlyc3QuX01fY3VyLCBudWxscHRyKTsKLSAgICBmb3IgKHNpemVfdHlwZSBfX24gPSBfX2ZfYnVja2V0ICsgMTsgX19uIDwgX19sX2J1Y2tldDsgKytfX24pCi0gICAgICBfTV9lcmFzZV9idWNrZXQoX19uLCBudWxscHRyKTsKLSAgICBpZiAoX19sX2J1Y2tldCAhPSBfTV9idWNrZXRzLnNpemUoKSkKLSAgICAgIF9NX2VyYXNlX2J1Y2tldChfX2xfYnVja2V0LCBfX2xhc3QuX01fY3VyKTsKLSAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLWlubGluZSB2b2lkIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6ZXJhc2UoCi0gIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKLXsKLSAgZXJhc2UoaXRlcmF0b3IoY29uc3RfY2FzdDxfTm9kZSo+KF9fZmlyc3QuX01fY3VyKSwKLSAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxoYXNodGFibGUqPihfX2ZpcnN0Ll9NX2h0KSksCi0gICAgICAgIGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGUqPihfX2xhc3QuX01fY3VyKSwKLSAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxoYXNodGFibGUqPihfX2xhc3QuX01faHQpKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotaW5saW5lIHZvaWQgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjplcmFzZSgKLSAgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpCi17Ci0gIGVyYXNlKGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGUqPihfX2l0Ll9NX2N1ciksCi0gICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8aGFzaHRhYmxlKj4oX19pdC5fTV9odCkpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci12b2lkIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6cmVzaXplKAotICBzaXplX3R5cGUgX19udW1fZWxlbWVudHNfaGludCkKLXsKLSAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX24gPSBfTV9idWNrZXRzLnNpemUoKTsKLSAgaWYgKF9fbnVtX2VsZW1lbnRzX2hpbnQgPiBfX29sZF9uKSB7Ci0gICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX25leHRfc2l6ZShfX251bV9lbGVtZW50c19oaW50KTsKLSAgICBpZiAoX19uID4gX19vbGRfbikgewotICAgICAgX01fYnVja2V0c190eXBlIF9fdG1wKF9fbiwgKF9Ob2RlKikobnVsbHB0ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fYnVja2V0cy5nZXRfYWxsb2NhdG9yKCkpOwotICAgICAgdHJ5IHsKLSAgICAgICAgZm9yIChzaXplX3R5cGUgX19idWNrZXQgPSAwOyBfX2J1Y2tldCA8IF9fb2xkX247ICsrX19idWNrZXQpIHsKLSAgICAgICAgICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19idWNrZXRdOwotICAgICAgICAgIHdoaWxlIChfX2ZpcnN0KSB7Ci0gICAgICAgICAgICBzaXplX3R5cGUgX19uZXdfYnVja2V0ID0gX01fYmt0X251bShfX2ZpcnN0LT5fTV92YWwsIF9fbik7Ci0gICAgICAgICAgICBfTV9idWNrZXRzW19fYnVja2V0XSA9IF9fZmlyc3QtPl9NX25leHQ7Ci0gICAgICAgICAgICBfX2ZpcnN0LT5fTV9uZXh0ID0gX190bXBbX19uZXdfYnVja2V0XTsKLSAgICAgICAgICAgIF9fdG1wW19fbmV3X2J1Y2tldF0gPSBfX2ZpcnN0OwotICAgICAgICAgICAgX19maXJzdCA9IF9NX2J1Y2tldHNbX19idWNrZXRdOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBfTV9idWNrZXRzLnN3YXAoX190bXApOwotICAgICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90eXBlIF9fYnVja2V0ID0gMDsgX19idWNrZXQgPCBfX3RtcC5zaXplKCk7ICsrX19idWNrZXQpIHsKLSAgICAgICAgICB3aGlsZSAoX190bXBbX19idWNrZXRdKSB7Ci0gICAgICAgICAgICBfTm9kZSogX19uZXh0ID0gX190bXBbX19idWNrZXRdLT5fTV9uZXh0OwotICAgICAgICAgICAgX01fZGVsZXRlX25vZGUoX190bXBbX19idWNrZXRdKTsKLSAgICAgICAgICAgIF9fdG1wW19fYnVja2V0XSA9IF9fbmV4dDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3c7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotdm9pZCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Ol9NX2VyYXNlX2J1Y2tldCgKLSAgY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fZmlyc3QsIF9Ob2RlKiBfX2xhc3QpCi17Ci0gIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsKLSAgaWYgKF9fY3VyID09IF9fZmlyc3QpCi0gICAgX01fZXJhc2VfYnVja2V0KF9fbiwgX19sYXN0KTsKLSAgZWxzZSB7Ci0gICAgX05vZGUqIF9fbmV4dDsKLSAgICBmb3IgKF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OyBfX25leHQgIT0gX19maXJzdDsKLSAgICAgICAgIF9fY3VyID0gX19uZXh0LCBfX25leHQgPSBfX2N1ci0+X01fbmV4dCkKLSAgICAgIDsKLSAgICB3aGlsZSAoX19uZXh0ICE9IF9fbGFzdCkgewotICAgICAgX19jdXItPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7Ci0gICAgICBfTV9kZWxldGVfbm9kZShfX25leHQpOwotICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7Ci0gICAgICAtLV9NX251bV9lbGVtZW50czsKLSAgICB9Ci0gIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci12b2lkIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6X01fZXJhc2VfYnVja2V0KAotICBjb25zdCBzaXplX3R5cGUgX19uLCBfTm9kZSogX19sYXN0KQotewotICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07Ci0gIHdoaWxlIChfX2N1ciAhPSBfX2xhc3QpIHsKLSAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25leHQ7Ci0gICAgX01fZGVsZXRlX25vZGUoX19jdXIpOwotICAgIF9fY3VyID0gX19uZXh0OwotICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fY3VyOwotICAgIC0tX01fbnVtX2VsZW1lbnRzOwotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotdm9pZCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OmNsZWFyKCkKLXsKLSAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19pKSB7Ci0gICAgX05vZGUqIF9fY3VyID0gX01fYnVja2V0c1tfX2ldOwotICAgIHdoaWxlIChfX2N1ciAhPSBudWxscHRyKSB7Ci0gICAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25leHQ7Ci0gICAgICBfTV9kZWxldGVfbm9kZShfX2N1cik7Ci0gICAgICBfX2N1ciA9IF9fbmV4dDsKLSAgICB9Ci0gICAgX01fYnVja2V0c1tfX2ldID0gbnVsbHB0cjsKLSAgfQotICBfTV9udW1fZWxlbWVudHMgPSAwOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLXZvaWQgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpfTV9jb3B5X2Zyb20oCi0gIGNvbnN0IGhhc2h0YWJsZSYgX19odCkKLXsKLSAgX01fYnVja2V0cy5jbGVhcigpOwotICBfTV9idWNrZXRzLnJlc2VydmUoX19odC5fTV9idWNrZXRzLnNpemUoKSk7Ci0gIF9NX2J1Y2tldHMuaW5zZXJ0KF9NX2J1Y2tldHMuZW5kKCksIF9faHQuX01fYnVja2V0cy5zaXplKCksIChfTm9kZSopbnVsbHB0cik7Ci0gIHRyeSB7Ci0gICAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX19odC5fTV9idWNrZXRzLnNpemUoKTsgKytfX2kpIHsKLSAgICAgIGNvbnN0IF9Ob2RlKiBfX2N1ciA9IF9faHQuX01fYnVja2V0c1tfX2ldOwotICAgICAgaWYgKF9fY3VyKSB7Ci0gICAgICAgIF9Ob2RlKiBfX2NvcHkgPSBfTV9uZXdfbm9kZShfX2N1ci0+X01fdmFsKTsKLSAgICAgICAgX01fYnVja2V0c1tfX2ldID0gX19jb3B5OwotCi0gICAgICAgIGZvciAoX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OyBfX25leHQ7Ci0gICAgICAgICAgICAgX19jdXIgPSBfX25leHQsIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0KSB7Ci0gICAgICAgICAgX19jb3B5LT5fTV9uZXh0ID0gX01fbmV3X25vZGUoX19uZXh0LT5fTV92YWwpOwotICAgICAgICAgIF9fY29weSA9IF9fY29weS0+X01fbmV4dDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBfTV9udW1fZWxlbWVudHMgPSBfX2h0Ll9NX251bV9lbGVtZW50czsKLSAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgY2xlYXIoKTsKLSAgICB0aHJvdzsKLSAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQAotCi0vLyBVbmRvIHdhcm5pbmcgc3VwcHJlc3Npb24uCi0jICBpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX2hhc193YXJuaW5nKQotIyAgICBpZiBfX2hhc193YXJuaW5nKCItV2RlcHJlY2F0ZWQiKQotIyAgICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotIyAgICBlbmRpZgotIyAgZW5kaWYKLQotIyAgaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgICAgcHJhZ21hIHdhcm5pbmcocG9wKQotIyAgZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzLmNtYWtlIGIvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZQppbmRleCAyOGQzZjY4Li44OWJlNGI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzLmNtYWtlCisrKyBiL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHMuY21ha2UKQEAgLTEsMTg1ICsxLDE4NSBAQAogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLgogCi1TRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9GSUxFX0Mga3dzeXNQbGF0Zm9ybVRlc3RzQy5jKQotU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRklMRV9DWFgga3dzeXNQbGF0Zm9ybVRlc3RzQ1hYLmN4eCkKK3NldChLV1NZU19QTEFURk9STV9URVNUX0ZJTEVfQyBrd3N5c1BsYXRmb3JtVGVzdHNDLmMpCitzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9GSUxFX0NYWCBrd3N5c1BsYXRmb3JtVGVzdHNDWFguY3h4KQogCi1NQUNSTyhLV1NZU19QTEFURk9STV9URVNUIGxhbmcgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKLSAgSUYoTk9UIERFRklORUQgJHt2YXJ9X0NPTVBJTEVEKQotICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSIpCittYWNybyhLV1NZU19QTEFURk9STV9URVNUIGxhbmcgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKKyAgaWYoTk9UIERFRklORUQgJHt2YXJ9X0NPTVBJTEVEKQorICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSIpCiAgICAgc2V0KG1heWJlX2N4eF9zdGFuZGFyZCAiIikKICAgICBpZihDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjggQU5EIENNQUtFX0NYWF9TVEFOREFSRCkKICAgICAgIHNldChtYXliZV9jeHhfc3RhbmRhcmQgIi1EQ01BS0VfQ1hYX1NUQU5EQVJEPSR7Q01BS0VfQ1hYX1NUQU5EQVJEfSIpCiAgICAgZW5kaWYoKQotICAgIFRSWV9DT01QSUxFKCR7dmFyfV9DT01QSUxFRAorICAgIHRyeV9jb21waWxlKCR7dmFyfV9DT01QSUxFRAogICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtLV1NZU19QTEFURk9STV9URVNUX0ZJTEVfJHtsYW5nfX0KICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgLURURVNUXyR7dmFyfSAke0tXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FU30gJHtLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTfQogICAgICAgQ01BS0VfRkxBR1MgIi1ETElOS19MSUJSQVJJRVM6U1RSSU5HPSR7S1dTWVNfUExBVEZPUk1fVEVTVF9MSU5LX0xJQlJBUklFU30iCiAgICAgICAgICAgICAgICAgICAke21heWJlX2N4eF9zdGFuZGFyZH0KICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCi0gICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgRklMRShBUFBFTkQKKyAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICBmaWxlKEFQUEVORAogICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiJHtkZXNjcmlwdGlvbn0gY29tcGlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgIEVMU0UoKQotICAgICAgRklMRShBUFBFTkQKKyAgICBlbHNlKCkKKyAgICAgIGZpbGUoQVBQRU5ECiAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIiR7ZGVzY3JpcHRpb259IGZhaWxlZCB0byBjb21waWxlIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICBFTkRJRigpCi0gICAgSUYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQotICAgICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKLSAgICAgIEVORElGKCkKLSAgICBFTFNFKCkKLSAgICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKLSAgICAgIEVMU0UoKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKLSAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICBTRVQoJHt2YXJ9IDApCi0gICAgRUxTRSgpCi0gICAgICBTRVQoJHt2YXJ9IDEpCi0gICAgRU5ESUYoKQotICBFTFNFKCkKLSAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICBTRVQoJHt2YXJ9IDEpCi0gICAgRUxTRSgpCi0gICAgICBTRVQoJHt2YXJ9IDApCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi1FTkRNQUNSTygpCisgICAgZW5kaWYoKQorICAgIGlmKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKKyAgICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQorICAgICAgZWxzZSgpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCisgICAgICBlbHNlKCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorICBpZigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCisgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgc2V0KCR7dmFyfSAwKQorICAgIGVsc2UoKQorICAgICAgc2V0KCR7dmFyfSAxKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgc2V0KCR7dmFyfSAxKQorICAgIGVsc2UoKQorICAgICAgc2V0KCR7dmFyfSAwKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQogCi1NQUNSTyhLV1NZU19QTEFURk9STV9URVNUX1JVTiBsYW5nIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCi0gIElGKE5PVCBERUZJTkVEICR7dmFyfSkKLSAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0iKQotICAgIFRSWV9SVU4oJHt2YXJ9ICR7dmFyfV9DT01QSUxFRAorbWFjcm8oS1dTWVNfUExBVEZPUk1fVEVTVF9SVU4gbGFuZyB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQorICBpZihOT1QgREVGSU5FRCAke3Zhcn0pCisgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IikKKyAgICB0cnlfcnVuKCR7dmFyfSAke3Zhcn1fQ09NUElMRUQKICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7S1dTWVNfUExBVEZPUk1fVEVTVF9GSUxFXyR7bGFuZ319CiAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIC1EVEVTVF8ke3Zhcn0gJHtLV1NZU19QTEFURk9STV9URVNUX0RFRklORVN9ICR7S1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHU30KICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAKICAgICAjIE5vdGUgdGhhdCAke3Zhcn0gd2lsbCBiZSBhIDAgcmV0dXJuIHZhbHVlIG9uIHN1Y2Nlc3MuCi0gICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgSUYoJHt2YXJ9KQotICAgICAgICBGSUxFKEFQUEVORAorICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgIGlmKCR7dmFyfSkKKyAgICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICAgIiR7ZGVzY3JpcHRpb259IGNvbXBpbGVkIGJ1dCBmYWlsZWQgdG8gcnVuIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICAgIEVMU0UoKQotICAgICAgICBGSUxFKEFQUEVORAorICAgICAgZWxzZSgpCisgICAgICAgIGZpbGUoQVBQRU5ECiAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgICAiJHtkZXNjcmlwdGlvbn0gY29tcGlsZWQgYW5kIHJhbiB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgICBFTkRJRigpCi0gICAgRUxTRSgpCi0gICAgICBGSUxFKEFQUEVORAorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiJHtkZXNjcmlwdGlvbn0gZmFpbGVkIHRvIGNvbXBpbGUgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgICAgU0VUKCR7dmFyfSAtMSBDQUNIRSBJTlRFUk5BTCAiJHtkZXNjcmlwdGlvbn0gZmFpbGVkIHRvIGNvbXBpbGUuIikKLSAgICBFTkRJRigpCisgICAgICBzZXQoJHt2YXJ9IC0xIENBQ0hFIElOVEVSTkFMICIke2Rlc2NyaXB0aW9ufSBmYWlsZWQgdG8gY29tcGlsZS4iKQorICAgIGVuZGlmKCkKIAotICAgIElGKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKLSAgICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgICAgSUYoJHt2YXJ9KQotICAgICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCi0gICAgICAgIEVMU0UoKQotICAgICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKLSAgICAgICAgRU5ESUYoKQotICAgICAgRUxTRSgpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGZhaWxlZCB0byBjb21waWxlIikKLSAgICAgIEVORElGKCkKLSAgICBFTFNFKCkKLSAgICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgICAgSUYoJHt2YXJ9KQotICAgICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKLSAgICAgICAgRUxTRSgpCi0gICAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKLSAgICAgICAgRU5ESUYoKQotICAgICAgRUxTRSgpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGZhaWxlZCB0byBjb21waWxlIikKLSAgICAgIEVORElGKCkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBpZigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCisgICAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICAgIGlmKCR7dmFyfSkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVsc2UoKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBmYWlsZWQgdG8gY29tcGlsZSIpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICAgIGlmKCR7dmFyfSkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVsc2UoKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBmYWlsZWQgdG8gY29tcGlsZSIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKLSAgSUYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQotICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgIElGKCR7dmFyfSkKLSAgICAgICAgU0VUKCR7dmFyfSAxKQotICAgICAgRUxTRSgpCi0gICAgICAgIFNFVCgke3Zhcn0gMCkKLSAgICAgIEVORElGKCkKLSAgICBFTFNFKCkKLSAgICAgIFNFVCgke3Zhcn0gMSkKLSAgICBFTkRJRigpCi0gIEVMU0UoKQotICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgIElGKCR7dmFyfSkKLSAgICAgICAgU0VUKCR7dmFyfSAwKQotICAgICAgRUxTRSgpCi0gICAgICAgIFNFVCgke3Zhcn0gMSkKLSAgICAgIEVORElGKCkKLSAgICBFTFNFKCkKLSAgICAgIFNFVCgke3Zhcn0gMCkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORE1BQ1JPKCkKKyAgaWYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQorICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgIGlmKCR7dmFyfSkKKyAgICAgICAgc2V0KCR7dmFyfSAxKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCgke3Zhcn0gMCkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIHNldCgke3Zhcn0gMSkKKyAgICBlbmRpZigpCisgIGVsc2UoKQorICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgIGlmKCR7dmFyfSkKKyAgICAgICAgc2V0KCR7dmFyfSAwKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCgke3Zhcn0gMSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIHNldCgke3Zhcn0gMCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKIAotTUFDUk8oS1dTWVNfUExBVEZPUk1fQ19URVNUIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfREVGSU5FU30pCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0VYVFJBX0ZMQUdTfSkKK21hY3JvKEtXU1lTX1BMQVRGT1JNX0NfVEVTVCB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0RFRklORVN9KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9FWFRSQV9GTEFHU30pCiAgIEtXU1lTX1BMQVRGT1JNX1RFU1QoQyAiJHt2YXJ9IiAiJHtkZXNjcmlwdGlvbn0iICIke2ludmVydH0iKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKLUVORE1BQ1JPKCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCitlbmRtYWNybygpCiAKLU1BQ1JPKEtXU1lTX1BMQVRGT1JNX0NfVEVTVF9SVU4gdmFyIGRlc2NyaXB0aW9uIGludmVydCkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9ERUZJTkVTfSkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfRVhUUkFfRkxBR1N9KQorbWFjcm8oS1dTWVNfUExBVEZPUk1fQ19URVNUX1JVTiB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0RFRklORVN9KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9FWFRSQV9GTEFHU30pCiAgIEtXU1lTX1BMQVRGT1JNX1RFU1RfUlVOKEMgIiR7dmFyfSIgIiR7ZGVzY3JpcHRpb259IiAiJHtpbnZlcnR9IikKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCi1FTkRNQUNSTygpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQorZW5kbWFjcm8oKQogCi1NQUNSTyhLV1NZU19QTEFURk9STV9DWFhfVEVTVCB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfREVGSU5FU30pCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfRVhUUkFfRkxBR1N9KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9MSU5LX0xJQlJBUklFUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0xJTktfTElCUkFSSUVTfSkKK21hY3JvKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9ERUZJTkVTfSkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9FWFRSQV9GTEFHU30pCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0xJTktfTElCUkFSSUVTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVN9KQogICBLV1NZU19QTEFURk9STV9URVNUKENYWCAiJHt2YXJ9IiAiJHtkZXNjcmlwdGlvbn0iICIke2ludmVydH0iKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfTElOS19MSUJSQVJJRVMpCi1FTkRNQUNSTygpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9MSU5LX0xJQlJBUklFUykKK2VuZG1hY3JvKCkKIAotTUFDUk8oS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfUlVOIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9ERUZJTkVTfSkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9FWFRSQV9GTEFHU30pCittYWNybyhLV1NZU19QTEFURk9STV9DWFhfVEVTVF9SVU4gdmFyIGRlc2NyaXB0aW9uIGludmVydCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0RFRklORVN9KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0VYVFJBX0ZMQUdTfSkKICAgS1dTWVNfUExBVEZPUk1fVEVTVF9SVU4oQ1hYICIke3Zhcn0iICIke2Rlc2NyaXB0aW9ufSIgIiR7aW52ZXJ0fSIpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQotRU5ETUFDUk8oKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKK2VuZG1hY3JvKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEtXU1lTX1BMQVRGT1JNX0lORk9fVEVTVChsYW5nIHZhciBkZXNjcmlwdGlvbikKICMKICMgQ29tcGlsZSB0ZXN0IG5hbWVkIGJ5ICR7dmFyfSBhbmQgc3RvcmUgSU5GTyBzdHJpbmdzIGV4dHJhY3RlZCBmcm9tIGJpbmFyeS4KLU1BQ1JPKEtXU1lTX1BMQVRGT1JNX0lORk9fVEVTVCBsYW5nIHZhciBkZXNjcmlwdGlvbikKK21hY3JvKEtXU1lTX1BMQVRGT1JNX0lORk9fVEVTVCBsYW5nIHZhciBkZXNjcmlwdGlvbikKICAgIyBXZSBjYW4gaW1wbGVtZW50IHRoaXMgbWFjcm8gb24gQ01ha2UgMi42IGFuZCBhYm92ZS4KLSAgSUYoIiR7Q01BS0VfTUFKT1JfVkVSU0lPTn0uJHtDTUFLRV9NSU5PUl9WRVJTSU9OfSIgTEVTUyAyLjYpCi0gICAgU0VUKCR7dmFyfSAiIikKLSAgRUxTRSgpCisgIGlmKCIke0NNQUtFX01BSk9SX1ZFUlNJT059LiR7Q01BS0VfTUlOT1JfVkVSU0lPTn0iIExFU1MgMi42KQorICAgIHNldCgke3Zhcn0gIiIpCisgIGVsc2UoKQogICAgICMgQ2hvb3NlIGEgbG9jYXRpb24gZm9yIHRoZSByZXN1bHQgYmluYXJ5LgotICAgIFNFVChLV1NZU19QTEFURk9STV9JTkZPX0ZJTEUKKyAgICBzZXQoS1dTWVNfUExBVEZPUk1fSU5GT19GSUxFCiAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9LyR7dmFyfS5iaW4pCiAKICAgICAjIENvbXBpbGUgdGhlIHRlc3QgYmluYXJ5LgotICAgIElGKE5PVCBFWElTVFMgJHtLV1NZU19QTEFURk9STV9JTkZPX0ZJTEV9KQotICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IikKLSAgICAgIFRSWV9DT01QSUxFKCR7dmFyfV9DT01QSUxFRAorICAgIGlmKE5PVCBFWElTVFMgJHtLV1NZU19QTEFURk9STV9JTkZPX0ZJTEV9KQorICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IikKKyAgICAgIHRyeV9jb21waWxlKCR7dmFyfV9DT01QSUxFRAogICAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7S1dTWVNfUExBVEZPUk1fVEVTVF9GSUxFXyR7bGFuZ319CiAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgLURURVNUXyR7dmFyfQpAQCAtMTg4LDI5ICsxODgsMjkgQEAKICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVAogICAgICAgICBDT1BZX0ZJTEUgJHtLV1NZU19QTEFURk9STV9JTkZPX0ZJTEV9CiAgICAgICAgICkKLSAgICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgICAgRklMRShBUFBFTkQKKyAgICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAgICIke2Rlc2NyaXB0aW9ufSBjb21waWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgRklMRShBUFBFTkQKKyAgICAgIGVsc2UoKQorICAgICAgICBmaWxlKEFQUEVORAogICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgICAiJHtkZXNjcmlwdGlvbn0gZmFpbGVkIHRvIGNvbXBpbGUgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgICAgRU5ESUYoKQotICAgICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBjb21waWxlZCIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gZmFpbGVkIikKLSAgICAgIEVORElGKCkKLSAgICBFTkRJRigpCisgICAgICBlbmRpZigpCisgICAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGNvbXBpbGVkIikKKyAgICAgIGVsc2UoKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBmYWlsZWQiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKIAogICAgICMgUGFyc2UgaW5mbyBzdHJpbmdzIG91dCBvZiB0aGUgY29tcGlsZWQgYmluYXJ5LgotICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgIEZJTEUoU1RSSU5HUyAke0tXU1lTX1BMQVRGT1JNX0lORk9fRklMRX0gJHt2YXJ9IFJFR0VYICJJTkZPOltBLVphLXowLTldK1xcW1teXV0qXFxdIikKLSAgICBFTFNFKCkKLSAgICAgIFNFVCgke3Zhcn0gIiIpCi0gICAgRU5ESUYoKQorICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgIGZpbGUoU1RSSU5HUyAke0tXU1lTX1BMQVRGT1JNX0lORk9fRklMRX0gJHt2YXJ9IFJFR0VYICJJTkZPOltBLVphLXowLTldK1xcW1teXV0qXFxdIikKKyAgICBlbHNlKCkKKyAgICAgIHNldCgke3Zhcn0gIiIpCisgICAgZW5kaWYoKQogCi0gICAgU0VUKEtXU1lTX1BMQVRGT1JNX0lORk9fRklMRSkKLSAgRU5ESUYoKQotRU5ETUFDUk8oKQorICAgIHNldChLV1NZU19QTEFURk9STV9JTkZPX0ZJTEUpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHNDLmMgYi9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzQy5jCmluZGV4IGIwY2Y3YWQuLmQ0NGY3ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHNDLmMKKysrIGIvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0c0MuYwpAQCAtNjksNDAgKzY5LDMgQEAKICAgcmV0dXJuIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOwogfQogI2VuZGlmCi0KLSNpZmRlZiBURVNUX0tXU1lTX0NfVFlQRV9NQUNST1MKLWNoYXIqIGluZm9fbWFjcm9zID0KLSMgIGlmIGRlZmluZWQoX19TSVpFT0ZfU0hPUlRfXykKLSAgIklORk86bWFjcm9bX19TSVpFT0ZfU0hPUlRfX11cbiIKLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fU0laRU9GX0lOVF9fKQotICAiSU5GTzptYWNyb1tfX1NJWkVPRl9JTlRfX11cbiIKLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fU0laRU9GX0xPTkdfXykKLSAgIklORk86bWFjcm9bX19TSVpFT0ZfTE9OR19fXVxuIgotIyAgZW5kaWYKLSMgIGlmIGRlZmluZWQoX19TSVpFT0ZfTE9OR19MT05HX18pCi0gICJJTkZPOm1hY3JvW19fU0laRU9GX0xPTkdfTE9OR19fXVxuIgotIyAgZW5kaWYKLSMgIGlmIGRlZmluZWQoX19TSE9SVF9NQVhfXykKLSAgIklORk86bWFjcm9bX19TSE9SVF9NQVhfX11cbiIKLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fSU5UX01BWF9fKQotICAiSU5GTzptYWNyb1tfX0lOVF9NQVhfX11cbiIKLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fTE9OR19NQVhfXykKLSAgIklORk86bWFjcm9bX19MT05HX01BWF9fXVxuIgotIyAgZW5kaWYKLSMgIGlmIGRlZmluZWQoX19MT05HX0xPTkdfTUFYX18pCi0gICJJTkZPOm1hY3JvW19fTE9OR19MT05HX01BWF9fXVxuIgotIyAgZW5kaWYKLSAgIiI7Ci0KLWludCBLV1NZU19QTEFURk9STV9URVNUX0NfTUFJTl9BUkdTKGFyZ2MsIGFyZ3YpCi17Ci0gIGludCByZXF1aXJlID0gMDsKLSAgcmVxdWlyZSArPSBpbmZvX21hY3Jvc1thcmdjXTsKLSAgKHZvaWQpYXJndjsKLSAgcmV0dXJuIHJlcXVpcmU7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHNDWFguY3h4IGIvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0c0NYWC5jeHgKaW5kZXggY2ZkNTY2Ni4uMGJmYTIwZSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0c0NYWC5jeHgKKysrIGIvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0c0NYWC5jeHgKQEAgLTEsMzYgKzEsNSBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcja3dzeXMgZm9yIGRldGFpbHMuICAqLwotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19DU1RESU8KLSMgIGluY2x1ZGUgPGNzdGRpbz4KLWludCBtYWluKCkKLXsKLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19MT05HX0xPTkcKLWxvbmcgbG9uZyBmKGxvbmcgbG9uZyBuKQotewotICByZXR1cm4gbjsKLX0KLWludCBtYWluKCkKLXsKLSAgbG9uZyBsb25nIG4gPSAwOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihmKG4pKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19DWFhfSEFTX19fSU5UNjQKLV9faW50NjQgZihfX2ludDY0IG4pCi17Ci0gIHJldHVybiBuOwotfQotaW50IG1haW4oKQotewotICBfX2ludDY0IG4gPSAwOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihmKG4pKTsKLX0KLSNlbmRpZgogCiAjaWZkZWYgVEVTVF9LV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTQogIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC02MCw4MiArMjksNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBURVNUX0tXU1lTX0NYWF9TQU1FX0xPTkdfQU5EX19fSU5UNjQKLXZvaWQgZnVuY3Rpb24obG9uZyoqKQotewotfQotaW50IG1haW4oKQotewotICBfX2ludDY0KiogcCA9IDA7Ci0gIGZ1bmN0aW9uKHApOwotICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19DWFhfU0FNRV9MT05HX0xPTkdfQU5EX19fSU5UNjQKLXZvaWQgZnVuY3Rpb24obG9uZyBsb25nKiopCi17Ci19Ci1pbnQgbWFpbigpCi17Ci0gIF9faW50NjQqKiBwID0gMDsKLSAgZnVuY3Rpb24ocCk7Ci0gIHJldHVybiAwOwotfQotI2VuZGlmCi0KLSNpZmRlZiBURVNUX0tXU1lTX0lPU19IQVNfSVNUUkVBTV9MT05HX0xPTkcKLSMgIGluY2x1ZGUgPGlvc3RyZWFtPgotaW50IHRlc3RfaXN0cmVhbShzdGQ6OmlzdHJlYW0mIGlzLCBsb25nIGxvbmcmIHgpCi17Ci0gIHJldHVybiAoaXMgPj4geCkgPyAxIDogMDsKLX0KLWludCBtYWluKCkKLXsKLSAgbG9uZyBsb25nIHggPSAwOwotICByZXR1cm4gdGVzdF9pc3RyZWFtKHN0ZDo6Y2luLCB4KTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HCi0jICBpbmNsdWRlIDxpb3N0cmVhbT4KLWludCB0ZXN0X29zdHJlYW0oc3RkOjpvc3RyZWFtJiBvcywgbG9uZyBsb25nIHgpCi17Ci0gIHJldHVybiAob3MgPDwgeCkgPyAxIDogMDsKLX0KLWludCBtYWluKCkKLXsKLSAgbG9uZyBsb25nIHggPSAwOwotICByZXR1cm4gdGVzdF9vc3RyZWFtKHN0ZDo6Y291dCwgeCk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfSU9TX0hBU19JU1RSRUFNX19fSU5UNjQKLSMgIGluY2x1ZGUgPGlvc3RyZWFtPgotaW50IHRlc3RfaXN0cmVhbShzdGQ6OmlzdHJlYW0mIGlzLCBfX2ludDY0JiB4KQotewotICByZXR1cm4gKGlzID4+IHgpID8gMSA6IDA7Ci19Ci1pbnQgbWFpbigpCi17Ci0gIF9faW50NjQgeCA9IDA7Ci0gIHJldHVybiB0ZXN0X2lzdHJlYW0oc3RkOjpjaW4sIHgpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBURVNUX0tXU1lTX0lPU19IQVNfT1NUUkVBTV9fX0lOVDY0Ci0jICBpbmNsdWRlIDxpb3N0cmVhbT4KLWludCB0ZXN0X29zdHJlYW0oc3RkOjpvc3RyZWFtJiBvcywgX19pbnQ2NCB4KQotewotICByZXR1cm4gKG9zIDw8IHgpID8gMSA6IDA7Ci19Ci1pbnQgbWFpbigpCi17Ci0gIF9faW50NjQgeCA9IDA7Ci0gIHJldHVybiB0ZXN0X29zdHJlYW0oc3RkOjpjb3V0LCB4KTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgVEVTVF9LV1NZU19DWFhfSEFTX1NFVEVOVgogIyAgaW5jbHVkZSA8c3RkbGliLmg+CiBpbnQgbWFpbigpCkBAIC0xODQsMzMgKzc3LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgVEVTVF9LV1NZU19DWFhfSEFTX0FUT0xMCi0jICBpbmNsdWRlIDxzdGRsaWIuaD4KLWludCBtYWluKCkKLXsKLSAgY29uc3QgY2hhciogc3RyID0gIjEwMjQiOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihhdG9sbChzdHIpKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19DWFhfSEFTX0FUT0wKLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgotaW50IG1haW4oKQotewotICBjb25zdCBjaGFyKiBzdHIgPSAiMTAyNCI7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGF0b2woc3RyKSk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19fQVRPSTY0Ci0jICBpbmNsdWRlIDxzdGRsaWIuaD4KLWludCBtYWluKCkKLXsKLSAgY29uc3QgY2hhciogc3RyID0gIjEwMjQiOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihfYXRvaTY0KHN0cikpOwotfQotI2VuZGlmCi0KICNpZmRlZiBURVNUX0tXU1lTX0NYWF9IQVNfVVRJTUVTCiAjICBpbmNsdWRlIDxzeXMvdGltZS5oPgogaW50IG1haW4oKQpAQCAtMjg4LDMzICsxNTQsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBURVNUX0tXU1lTX0NYWF9IQVNfQk9STEFORF9BU00KLWludCBtYWluKCkKLXsKLSAgaW50IGEgPSAxOwotICBfX2FzbSB7Ci0gICAgeG9yIEVCWCwgRUJYOwotICAgIG1vdiBhLCBFQlg7Ci0gIH0KLQotICByZXR1cm4gYTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNX0NQVUlECi1pbnQgbWFpbigpCi17Ci0gIGludCBhID0gMDsKLSAgX19hc20gewotICAgIHhvciBFQVgsIEVBWDsKLSAgICBjcHVpZDsKLSAgICBtb3YgYSwgRUFYOwotICB9Ci0KLSAgcmV0dXJuIGE7Ci19Ci0jZW5kaWYKLQogI2lmZGVmIFRFU1RfS1dTWVNfU1RMX0hBU19XU1RSSU5HCiAjICBpbmNsdWRlIDxzdHJpbmc+CiB2b2lkIGYoc3RkOjp3c3RyaW5nKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50cy5jeHgKaW5kZXggMTc3OGE5Yi4uMDc4Njc1MSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50cy5jeHgKKysrIGIvU291cmNlL2t3c3lzL3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50cy5jeHgKQEAgLTEyLDggKzEyLDggQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlIDxzdGRkZWYuaD4gLyogc2l6ZV90ICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+IC8qIHN0cmNtcCAqLworI2luY2x1ZGUgPGNzdGRkZWY+IC8qIHNpemVfdCAqLworI2luY2x1ZGUgPGNzdHJpbmc+IC8qIHN0cmNtcCAqLwogCiBzdGF0aWMgdm9pZCogcmFuZG9tX3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4MTIzKTsKIApAQCAtOTgsNyArOTgsNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3RsX3N0cmluZ3NfYXJndW1lbnQ7CiAgIHN0ZDo6c3RyaW5nIHZhbGlkX3N0bF9zdHJpbmdzW10gPSB7ICJrZW4iLCAiYnJhZCIsICJiaWxsIiwgImFuZHkiIH07CiAKLSAgdHlwZWRlZiBrd3N5czo6Q29tbWFuZExpbmVBcmd1bWVudHMgYXJnVDsKKyAgdXNpbmcgYXJnVCA9IGt3c3lzOjpDb21tYW5kTGluZUFyZ3VtZW50czsKIAogICBhcmcuQWRkQXJndW1lbnQoIi0tc29tZS1pbnQtdmFyaWFibGUiLCBhcmdUOjpTUEFDRV9BUkdVTUVOVCwKICAgICAgICAgICAgICAgICAgICZzb21lX2ludF92YXJpYWJsZSwgIlNldCBzb21lIHJhbmRvbSBpbnQgdmFyaWFibGUiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eAppbmRleCA2NDU2MWIxLi4yZjZiNzM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzMS5jeHgKKysrIGIvU291cmNlL2t3c3lzL3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEuY3h4CkBAIC0xMiw4ICsxMiw4IEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+IC8qIGFzc2VydCAqLwotI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBzdHJjbXAgKi8KKyNpbmNsdWRlIDxjYXNzZXJ0PiAvKiBhc3NlcnQgKi8KKyNpbmNsdWRlIDxjc3RyaW5nPiAvKiBzdHJjbXAgKi8KIAogaW50IHRlc3RDb21tYW5kTGluZUFyZ3VtZW50czEoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIHsKQEAgLTI1LDcgKzI1LDcgQEAKICAgc3RkOjpzdHJpbmcgcDsKICAgaW50IHJlcyA9IDA7CiAKLSAgdHlwZWRlZiBrd3N5czo6Q29tbWFuZExpbmVBcmd1bWVudHMgYXJnVDsKKyAgdXNpbmcgYXJnVCA9IGt3c3lzOjpDb21tYW5kTGluZUFyZ3VtZW50czsKICAgYXJnLkFkZEFyZ3VtZW50KCItbiIsIGFyZ1Q6OlNQQUNFX0FSR1VNRU5ULCAmbiwgIkFyZ3VtZW50IE4iKTsKICAgYXJnLkFkZEFyZ3VtZW50KCItbSIsIGFyZ1Q6OkVRVUFMX0FSR1VNRU5ULCAmbSwgIkFyZ3VtZW50IE0iKTsKICAgYXJnLkFkZEJvb2xlYW5Bcmd1bWVudCgiLXAiLCAmcCwgIkFyZ3VtZW50IFAiKTsKQEAgLTUxLDkgKzUxLDcgQEAKICAgc3RkOjpjb3V0IDw8ICJWYWx1ZSBvZiBOOiAiIDw8IG4gPDwgc3RkOjplbmRsOwogICBzdGQ6OmNvdXQgPDwgIlZhbHVlIG9mIE06ICIgPDwgbSA8PCBzdGQ6OmVuZGw7CiAgIHN0ZDo6Y291dCA8PCAiVmFsdWUgb2YgUDogIiA8PCBwIDw8IHN0ZDo6ZW5kbDsKLSAgaWYgKG0pIHsKLSAgICBkZWxldGVbXSBtOwotICB9CisgIGRlbGV0ZVtdIG07CiAKICAgY2hhcioqIG5ld0FyZ3YgPSBudWxscHRyOwogICBpbnQgbmV3QXJnYyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdERpcmVjdG9yeS5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdERpcmVjdG9yeS5jeHgKaW5kZXggYjFhYjBjOC4uZWIzY2EzMiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3REaXJlY3RvcnkuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0RGlyZWN0b3J5LmN4eApAQCAtNTcsNyArNTcsMTEgQEAKIAogICAgIERpcmVjdG9yeSB0ZXN0ZGlyOwogICAgIC8vIFNldCByZXMgdG8gZmFpbHVyZSBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgbG9hZAotICAgIHJlcyArPSAhdGVzdGRpci5Mb2FkKHRlc3RkaXJwYXRoKTsKKyAgICBzdGQ6OnN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKKyAgICByZXMgKz0gIXRlc3RkaXIuTG9hZCh0ZXN0ZGlycGF0aCwgJmVycm9yTWVzc2FnZSk7CisgICAgaWYgKGVycm9yTWVzc2FnZSAhPSAiIikgeworICAgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gbGlzdCBkaXJlY3Rvcnk6ICIgPDwgZXJyb3JNZXNzYWdlIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CiAgICAgLy8gSW5jcmVtZW50IHJlcyBmYWlsdXJlIGlmIHRoZSBkaXJlY3RvcnkgYXBwZWFycyBlbXB0eQogICAgIHJlcyArPSB0ZXN0ZGlyLkdldE51bWJlck9mRmlsZXMoKSA9PSAwOwogICAgIC8vIEluY3JlbWVudCByZXMgZmFpbHVyZXMgaWYgdGhlIHBhdGggaGFzIGNoYW5nZWQgZnJvbQpAQCAtNzMsNiArNzcsMzQgQEAKICAgcmV0dXJuIHJlczsKIH0KIAoraW50IF9ub25FeGlzdGVudERpcmVjdG9yeVRlc3QoKQoreworICB1c2luZyBuYW1lc3BhY2Uga3dzeXM7CisgIGludCByZXMgPSAwOworICBzdGQ6OnN0cmluZyB0ZXN0ZGlycGF0aChURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi9kaXJlY3RvcnlfdGVzdGluZy9kb2VzbnRfZXhpc3QvIik7CisgIHN0ZDo6c3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgRGlyZWN0b3J5IHRlc3RkaXI7CisKKyAgZXJyb3JNZXNzYWdlID0gImZvbyI7CisgIC8vIEluY3JlbWVudCByZXMgZmFpbHVyZSBpZiBkaXJlY3RvcnkgbGlzdHMKKyAgcmVzICs9IHRlc3RkaXIuTG9hZCh0ZXN0ZGlycGF0aCwgJmVycm9yTWVzc2FnZSk7CisjaWYgIWRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisgIC8vIEluY3JlbWVudCByZXMgZmFpbHVyZSBpZiBlcnJvck1lc3NhZ2UgaXMgdW5tb2RpZmllZAorICByZXMgKz0gKGVycm9yTWVzc2FnZSA9PSAiZm9vIik7CisjZW5kaWYKKworICBlcnJvck1lc3NhZ2UgPSAiZm9vIjsKKyAgLy8gSW5jcmVtZW50IHJlcyBmYWlsdXJlIGlmIGRpcmVjdG9yeSBoYXMgZmlsZXMKKyAgcmVzICs9ICh0ZXN0ZGlyLkdldE51bWJlck9mRmlsZXNJbkRpcmVjdG9yeSh0ZXN0ZGlycGF0aCwgJmVycm9yTWVzc2FnZSkgPiAwKTsKKyNpZiAhZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKKyAgLy8gSW5jcmVtZW50IHJlcyBmYWlsdXJlIGlmIGVycm9yTWVzc2FnZSBpcyB1bm1vZGlmaWVkCisgIHJlcyArPSAoZXJyb3JNZXNzYWdlID09ICJmb28iKTsKKyNlbmRpZgorCisgIHJldHVybiByZXM7Cit9CisKIGludCBfY29weURpcmVjdG9yeVRlc3QoKQogewogICB1c2luZyBuYW1lc3BhY2Uga3dzeXM7CkBAIC0xMDYsNSArMTM4LDYgQEAKIAogaW50IHRlc3REaXJlY3RvcnkoaW50LCBjaGFyKiBbXSkKIHsKLSAgcmV0dXJuIF9kb0xvbmdQYXRoVGVzdCgpICsgX2NvcHlEaXJlY3RvcnlUZXN0KCk7CisgIHJldHVybiBfZG9Mb25nUGF0aFRlc3QoKSArIF9ub25FeGlzdGVudERpcmVjdG9yeVRlc3QoKSArCisgICAgX2NvcHlEaXJlY3RvcnlUZXN0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdER5bmFtaWNMb2FkZXIuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3REeW5hbWljTG9hZGVyLmN4eAppbmRleCAyNDIxYWMwLi43MDNhZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdER5bmFtaWNMb2FkZXIuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0RHluYW1pY0xvYWRlci5jeHgKQEAgLTI1LDcgKzI1LDcgQEAKIHsKICAgLy8gQ29uc3RydWN0IHByb3BlciBuYW1lIG9mIGxpYgogICBzdGQ6OnN0cmluZyBzbG5hbWU7Ci0gIHNsbmFtZSA9IEVYRUNVVEFCTEVfT1VUUFVUX1BBVEg7CisgIHNsbmFtZSA9IFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWTsKICAgaWYgKHN1YmRpcikgewogICAgIHNsbmFtZSArPSAiLyI7CiAgICAgc2xuYW1lICs9IHN1YmRpcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0RHlubG9hZC5jIGIvU291cmNlL2t3c3lzL3Rlc3REeW5sb2FkLmMKaW5kZXggYzQ5Zjc0Ny4uMzNhNDMxZSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3REeW5sb2FkLmMKKysrIGIvU291cmNlL2t3c3lzL3Rlc3REeW5sb2FkLmMKQEAgLTgsNiArOCw2IEBACiAKIERMX0VYUE9SVCBpbnQgVGVzdER5bmFtaWNMb2FkZXJEYXRhID0gMDsKIAotRExfRVhQT1JUIHZvaWQgVGVzdER5bmFtaWNMb2FkZXJTeW1ib2xQb2ludGVyKCkKK0RMX0VYUE9SVCB2b2lkIFRlc3REeW5hbWljTG9hZGVyU3ltYm9sUG9pbnRlcih2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RFbmNvZGluZy5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdEVuY29kaW5nLmN4eAppbmRleCA5ODg2OTdiLi5lZTkzZThkIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdEVuY29kaW5nLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdEVuY29kaW5nLmN4eApAQCAtMTAsMTAgKzEwLDEwIEBACiAjaW5jbHVkZSBLV1NZU19IRUFERVIoRW5jb2RpbmcuaCkKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjbG9jYWxlPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxsb2NhbGUuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KIAogLy8gV29yay1hcm91bmQgQ01ha2UgZGVwZW5kZW5jeSBzY2FubmluZyBsaW1pdGF0aW9uLiAgVGhpcyBtdXN0CiAvLyBkdXBsaWNhdGUgdGhlIGFib3ZlIGxpc3Qgb2YgaGVhZGVycy4KQEAgLTU5LDcgKzU5LDcgQEAKICAgICBzdGQ6OnN0cmluZyBzdHIyID0ga3dzeXM6OkVuY29kaW5nOjpUb05hcnJvdyh3c3RyKTsKICAgICB3Y2hhcl90KiBjX3dzdHIgPSBrd3N5c0VuY29kaW5nX0R1cFRvV2lkZShzdHIuY19zdHIoKSk7CiAgICAgY2hhciogY19zdHIyID0ga3dzeXNFbmNvZGluZ19EdXBUb05hcnJvdyhjX3dzdHIpOwotICAgIGlmICghd3N0ci5lbXB0eSgpICYmIChzdHIgIT0gc3RyMiB8fCBzdHJjbXAoY19zdHIyLCBzdHIuY19zdHIoKSkpKSB7CisgICAgaWYgKCF3c3RyLmVtcHR5KCkgJiYgKHN0ciAhPSBzdHIyIHx8IHN0cmNtcChjX3N0cjIsIHN0ci5jX3N0cigpKSAhPSAwKSkgewogICAgICAgc3RkOjpjb3V0IDw8ICJjb252ZXJ0ZWQgc3RyaW5nIHdhcyBkaWZmZXJlbnQ6ICIgPDwgc3RyMiA8PCBzdGQ6OmVuZGw7CiAgICAgICBzdGQ6OmNvdXQgPDwgImNvbnZlcnRlZCBzdHJpbmcgd2FzIGRpZmZlcmVudDogIiA8PCBjX3N0cjIgPDwgc3RkOjplbmRsOwogICAgICAgcmV0Kys7CkBAIC04NSw3ICs4NSw3IEBACiAgIHN0ZDo6d3N0cmluZyB3c3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb1dpZGUoY3N0cik7CiAKICAgd3N0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9XaWRlKG51bGxwdHIpOwotICBpZiAod3N0ciAhPSBMIiIpIHsKKyAgaWYgKCF3c3RyLmVtcHR5KCkpIHsKICAgICBjb25zdCB3Y2hhcl90KiB3Y3N0ciA9IHdzdHIuY19zdHIoKTsKICAgICBzdGQ6OmNvdXQgPDwgIlRvV2lkZShOVUxMKSByZXR1cm5lZCI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3c3RyLnNpemUoKTsgaSsrKSB7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgcmV0Kys7CiAgIH0KICAgd3N0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9XaWRlKCIiKTsKLSAgaWYgKHdzdHIgIT0gTCIiKSB7CisgIGlmICghd3N0ci5lbXB0eSgpKSB7CiAgICAgY29uc3Qgd2NoYXJfdCogd2NzdHIgPSB3c3RyLmNfc3RyKCk7CiAgICAgc3RkOjpjb3V0IDw8ICJUb1dpZGUoXCJcIikgcmV0dXJuZWQiOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd3N0ci5zaXplKCk7IGkrKykgewpAQCAtMTEzLDEzICsxMTMsMTMgQEAKICNlbmRpZgogCiAgIHN0ZDo6c3RyaW5nIHN0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9OYXJyb3cobnVsbHB0cik7Ci0gIGlmIChzdHIgIT0gIiIpIHsKKyAgaWYgKCFzdHIuZW1wdHkoKSkgewogICAgIHN0ZDo6Y291dCA8PCAiVG9OYXJyb3coTlVMTCkgcmV0dXJuZWQgIiA8PCBzdHIgPDwgc3RkOjplbmRsOwogICAgIHJldCsrOwogICB9CiAKICAgc3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb05hcnJvdyhMIiIpOwotICBpZiAod3N0ciAhPSBMIiIpIHsKKyAgaWYgKCF3c3RyLmVtcHR5KCkpIHsKICAgICBzdGQ6OmNvdXQgPDwgIlRvTmFycm93KFwiXCIpIHJldHVybmVkICIgPDwgc3RyIDw8IHN0ZDo6ZW5kbDsKICAgICByZXQrKzsKICAgfQpAQCAtMTQwLDE0ICsxNDAsMTMgQEAKICAgc3RyaW5ncy5wdXNoX2JhY2soc3RkOjpzdHJpbmcoImsiKSArICdcMCcgKyAnXDAnKTsKICAgc3RyaW5ncy5wdXNoX2JhY2soc3RkOjpzdHJpbmcoIlwwXDBcMFwwIiwgNCkgKyAibG1uIiArCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCJcMFwwXDBcMCIsIDQpKTsKLSAgZm9yIChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIGl0ID0gc3RyaW5ncy5iZWdpbigpOwotICAgICAgIGl0ICE9IHN0cmluZ3MuZW5kKCk7ICsraXQpIHsKLSAgICBzdGQ6OndzdHJpbmcgd3N0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9XaWRlKCppdCk7CisgIGZvciAoYXV0byYgc3RyaW5nIDogc3RyaW5ncykgeworICAgIHN0ZDo6d3N0cmluZyB3c3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb1dpZGUoc3RyaW5nKTsKICAgICBzdGQ6OnN0cmluZyBzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvTmFycm93KHdzdHIpOwotICAgIHN0ZDo6c3RyaW5nIHMoKml0KTsKKyAgICBzdGQ6OnN0cmluZyBzKHN0cmluZyk7CiAgICAgc3RkOjpyZXBsYWNlKHMuYmVnaW4oKSwgcy5lbmQoKSwgJ1wwJywgJyAnKTsKLSAgICBzdGQ6OmNvdXQgPDwgIiciIDw8IHMgPDwgIicgKCIgPDwgaXQtPnNpemUoKSA8PCAiKSIgPDwgc3RkOjplbmRsOwotICAgIGlmIChzdHIgIT0gKml0KSB7CisgICAgc3RkOjpjb3V0IDw8ICInIiA8PCBzIDw8ICInICgiIDw8IHN0cmluZy5zaXplKCkgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICBpZiAoc3RyICE9IHN0cmluZykgewogICAgICAgc3RkOjpyZXBsYWNlKHN0ci5iZWdpbigpLCBzdHIuZW5kKCksICdcMCcsICcgJyk7CiAgICAgICBzdGQ6OmNvdXQgPDwgInN0cmluZyB3aXRoIG51bGwgd2FzIGRpZmZlcmVudDogJyIgPDwgc3RyIDw8ICInICgiCiAgICAgICAgICAgICAgICAgPDwgc3RyLnNpemUoKSA8PCAiKSIgPDwgc3RkOjplbmRsOwpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RGU3RyZWFtLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0RlN0cmVhbS5jeHgKaW5kZXggNTAwOWU5OC4uYWZiYTk1MyAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RGU3RyZWFtLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdEZTdHJlYW0uY3h4CkBAIC03LDEwICs3LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSBLV1NZU19IRUFERVIoRlN0cmVhbS5oeHgpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWZkZWYgX19CT1JMQU5EQ19fCi0jICBpbmNsdWRlIDxtZW0uaD4gLyogbWVtY21wICovCi0jZW5kaWYKKyNpbmNsdWRlIDxjc3RyaW5nPgogCiAvLyBXb3JrLWFyb3VuZCBDTWFrZSBkZXBlbmRlbmN5IHNjYW5uaW5nIGxpbWl0YXRpb24uICBUaGlzIG11c3QKIC8vIGR1cGxpY2F0ZSB0aGUgYWJvdmUgbGlzdCBvZiBoZWFkZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RIYXNoU1RMLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0SGFzaFNUTC5jeHgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDJmODkuLjAwMDAwMDAKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RIYXNoU1RMLmN4eAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLiAgKi8KLSNpbmNsdWRlICJrd3N5c1ByaXZhdGUuaCIKLSNpbmNsdWRlIEtXU1lTX0hFQURFUihoYXNoX21hcC5oeHgpCi0jaW5jbHVkZSBLV1NZU19IRUFERVIoaGFzaF9zZXQuaHh4KQotCi0vLyBXb3JrLWFyb3VuZCBDTWFrZSBkZXBlbmRlbmN5IHNjYW5uaW5nIGxpbWl0YXRpb24uICBUaGlzIG11c3QKLS8vIGR1cGxpY2F0ZSB0aGUgYWJvdmUgbGlzdCBvZiBoZWFkZXJzLgotI2lmIDAKLSMgIGluY2x1ZGUgImhhc2hfbWFwLmh4eC5pbiIKLSMgIGluY2x1ZGUgImhhc2hfc2V0Lmh4eC5pbiIKLSNlbmRpZgotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ3ODYpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVkKF9fR05VQ19fKQotIyAgcHJhZ21hIHNldCB3b2ZmIDE0NjggLyogaW5saW5lIGZ1bmN0aW9uIGNhbm5vdCBiZSBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZW5kaWYKLQotdGVtcGxhdGUgY2xhc3Mga3dzeXM6Omhhc2hfbWFwPGNvbnN0IGNoYXIqLCBpbnQ+OwotdGVtcGxhdGUgY2xhc3Mga3dzeXM6Omhhc2hfc2V0PGludD47Ci0KLXN0YXRpYyBib29sIHRlc3RfaGFzaF9tYXAoKQotewotICB0eXBlZGVmIGt3c3lzOjpoYXNoX21hcDxjb25zdCBjaGFyKiwgaW50PiBtdHlwZTsKLSAgbXR5cGUgbTsKLSAgY29uc3QgY2hhcioga2V5c1tdID0geyAiaGVsbG8iLCAid29ybGQiIH07Ci0gIG1ba2V5c1swXV0gPSAxOwotICBtLmluc2VydChtdHlwZTo6dmFsdWVfdHlwZShrZXlzWzFdLCAyKSk7Ci0gIGludCBzdW0gPSAwOwotICBmb3IgKG10eXBlOjppdGVyYXRvciBtaSA9IG0uYmVnaW4oKTsgbWkgIT0gbS5lbmQoKTsgKyttaSkgewotICAgIHN0ZDo6Y291dCA8PCAiRm91bmQgZW50cnkgWyIgPDwgbWktPmZpcnN0IDw8ICIsIiA8PCBtaS0+c2Vjb25kIDw8ICJdIgotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgc3VtICs9IG1pLT5zZWNvbmQ7Ci0gIH0KLSAgcmV0dXJuIHN1bSA9PSAzOwotfQotCi1zdGF0aWMgYm9vbCB0ZXN0X2hhc2hfc2V0KCkKLXsKLSAgdHlwZWRlZiBrd3N5czo6aGFzaF9zZXQ8aW50PiBzdHlwZTsKLSAgc3R5cGUgczsKLSAgcy5pbnNlcnQoMSk7Ci0gIHMuaW5zZXJ0KDIpOwotICBpbnQgc3VtID0gMDsKLSAgZm9yIChzdHlwZTo6aXRlcmF0b3Igc2kgPSBzLmJlZ2luKCk7IHNpICE9IHMuZW5kKCk7ICsrc2kpIHsKLSAgICBzdGQ6OmNvdXQgPDwgIkZvdW5kIGVudHJ5IFsiIDw8ICpzaSA8PCAiXSIgPDwgc3RkOjplbmRsOwotICAgIHN1bSArPSAqc2k7Ci0gIH0KLSAgcmV0dXJuIHN1bSA9PSAzOwotfQotCi1pbnQgdGVzdEhhc2hTVEwoaW50LCBjaGFyKiBbXSkKLXsKLSAgYm9vbCByZXN1bHQgPSB0cnVlOwotICByZXN1bHQgPSB0ZXN0X2hhc2hfbWFwKCkgJiYgcmVzdWx0OwotICByZXN1bHQgPSB0ZXN0X2hhc2hfc2V0KCkgJiYgcmVzdWx0OwotICByZXR1cm4gcmVzdWx0ID8gMCA6IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdFByb2Nlc3MuYyBiL1NvdXJjZS9rd3N5cy90ZXN0UHJvY2Vzcy5jCmluZGV4IDM5YWFhMjMuLjBjNjU4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0UHJvY2Vzcy5jCisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0UHJvY2Vzcy5jCkBAIC0yNCwxMCArMjQsNiBAQAogIyAgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyAgcHJhZ21hIHdhcm4gLSA4MDYwIC8qIHBvc3NpYmx5IGluY29ycmVjdCBhc3NpZ25tZW50ICovCi0jZW5kaWYKLQogLyogUGxhdGZvcm0tc3BlY2lmaWMgc2xlZXAgZnVuY3Rpb25zLiAqLwogCiAjaWYgZGVmaW5lZChfX0JFT1NfXykgJiYgIWRlZmluZWQoX19aRVRBX18pCkBAIC02MzEsNyArNjI3LDggQEAKICAgICB9CiAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHRlc3QgbnVtYmVyICVkLlxuIiwgbik7CiAgICAgcmV0dXJuIDE7Ci0gIH0gZWxzZSBpZiAobiA+PSAxICYmIG4gPD0gMTApIHsKKyAgfQorICBpZiAobiA+PSAxICYmIG4gPD0gMTApIHsKICAgICAvKiBUaGlzIGlzIHRoZSBwYXJlbnQgcHJvY2VzcyBmb3IgYSByZXF1ZXN0ZWQgdGVzdCBudW1iZXIuICAqLwogICAgIGludCBzdGF0ZXNbMTBdID0gewogICAgICAga3dzeXNQcm9jZXNzX1N0YXRlX0V4aXRlZCwgICBrd3N5c1Byb2Nlc3NfU3RhdGVfRXhpdGVkLApAQCAtNzA5LDcgKzcwNiw4IEBACiAgICAgZnJlZShhcmd2MCk7CiAjZW5kaWYKICAgICByZXR1cm4gcjsKLSAgfSBlbHNlIGlmIChhcmdjID4gMiAmJiBzdHJjbXAoYXJndlsxXSwgIjAiKSA9PSAwKSB7CisgIH0KKyAgaWYgKGFyZ2MgPiAyICYmIHN0cmNtcChhcmd2WzFdLCAiMCIpID09IDApIHsKICAgICAvKiBUaGlzIGlzIHRoZSBzcGVjaWFsIGRlYnVnZ2luZyB0ZXN0IHRvIHJ1biBhIGdpdmVuIGNvbW1hbmQKICAgICAgICBsaW5lLiAgKi8KICAgICBjb25zdCBjaGFyKiogY21kID0gYXJndiArIDI7CkBAIC03MjAsOSArNzE4LDggQEAKICAgICBpbnQgciA9CiAgICAgICBydW5DaGlsZChjbWQsIHN0YXRlLCBleGNlcHRpb24sIHZhbHVlLCAwLCAxLCAwLCB0aW1lb3V0LCAwLCAxLCAwLCAwLCAwKTsKICAgICByZXR1cm4gcjsKLSAgfSBlbHNlIHsKLSAgICAvKiBJbXByb3BlciB1c2FnZS4gICovCi0gICAgZnByaW50ZihzdGRvdXQsICJVc2FnZTogJXMgPHRlc3QgbnVtYmVyPlxuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIDE7CiAgIH0KKyAgLyogSW1wcm9wZXIgdXNhZ2UuICAqLworICBmcHJpbnRmKHN0ZG91dCwgIlVzYWdlOiAlcyA8dGVzdCBudW1iZXI+XG4iLCBhcmd2WzBdKTsKKyAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4CmluZGV4IDE1NDUxN2UuLjRmMGM1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4CkBAIC0xMSwyOSArMTEsMTMgQEAKIAogI2luY2x1ZGUgPGlvc3RyZWFtPgogCi0jaWYgZGVmaW5lZChLV1NZU19VU0VfTE9OR19MT05HKQotIyAgaWYgZGVmaW5lZChLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HKQotIyAgICBkZWZpbmUgaW9zdHJlYW1Mb25nTG9uZyh4KSAoeCkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIGlvc3RyZWFtTG9uZ0xvbmcoeCkgKChsb25nKXgpCi0jICBlbmRpZgotI2VsaWYgZGVmaW5lZChLV1NZU19VU0VfX19JTlQ2NCkKLSMgIGlmIGRlZmluZWQoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQpCi0jICAgIGRlZmluZSBpb3N0cmVhbUxvbmdMb25nKHgpICh4KQotIyAgZWxzZQotIyAgICBkZWZpbmUgaW9zdHJlYW1Mb25nTG9uZyh4KSAoKGxvbmcpeCkKLSMgIGVuZGlmCi0jZWxzZQotIyAgZXJyb3IgIk5vIExvbmcgTG9uZyIKLSNlbmRpZgotCiAjZGVmaW5lIHByaW50TWV0aG9kKGluZm8sIG0pIHN0ZDo6Y291dCA8PCAjbSA8PCAiOiAiIDw8IGluZm8ubSgpIDw8ICJcbiIKIAogI2RlZmluZSBwcmludE1ldGhvZDIoaW5mbywgbSwgdW5pdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBzdGQ6OmNvdXQgPDwgI20gPDwgIjogIiA8PCBpbmZvLm0oKSA8PCAiICIgPDwgdW5pdCA8PCAiXG4iCiAKICNkZWZpbmUgcHJpbnRNZXRob2QzKGluZm8sIG0sIHVuaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3RkOjpjb3V0IDw8ICNtIDw8ICI6ICIgPDwgaW9zdHJlYW1Mb25nTG9uZyhpbmZvLm0pIDw8ICIgIiA8PCB1bml0IDw8ICJcbiIKKyAgc3RkOjpjb3V0IDw8ICNtIDw8ICI6ICIgPDwgaW5mby5tIDw8ICIgIiA8PCB1bml0IDw8ICJcbiIKIAogaW50IHRlc3RTeXN0ZW1JbmZvcm1hdGlvbihpbnQsIGNoYXIqIFtdKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmN4eAppbmRleCAzZjZlZWI4Li4xZDM0NjE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmN4eApAQCAtMjAsMTggKzIwLDE4IEBACiAvLyBsZWZ0IG9uIGRpc2suCiAjaW5jbHVkZSA8dGVzdFN5c3RlbVRvb2xzLmg+CiAKKyNpbmNsdWRlIDxjc3RkbGliPiAvKiBmcmVlICovCisjaW5jbHVkZSA8Y3N0cmluZz4gLyogc3RyY21wICovCiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxzdGRsaWIuaD4gLyogZnJlZSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBzdHJjbXAgKi8KICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKLSMgIGluY2x1ZGUgPGlvLmg+IC8qIF91bWFzayAoTVNWQykgLyB1bWFzayAoQm9ybGFuZCkgKi8KKyMgIGluY2x1ZGUgPGlvLmg+IC8qIF91bWFzayAoTVNWQykgKi8KICMgIGlmZGVmIF9NU0NfVkVSCi0jICAgIGRlZmluZSB1bWFzayBfdW1hc2sgLy8gTm90ZSB0aGlzIGlzIHN0aWxsIHVtYXNrIG9uIEJvcmxhbmQKKyMgICAgZGVmaW5lIHVtYXNrIF91bWFzawogIyAgZW5kaWYKICNlbmRpZgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+IC8qIHVtYXNrIChQT1NJWCksIF9TX0kqIGNvbnN0YW50cyAoV2luZG93cykgKi8KLS8vIFZpc3VhbCBDKysgZG9lcyBub3QgZGVmaW5lIG1vZGVfdCAobm90ZSB0aGF0IEJvcmxhbmQgZG9lcywgaG93ZXZlcikuCisvLyBWaXN1YWwgQysrIGRvZXMgbm90IGRlZmluZSBtb2RlX3QuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OwogI2VuZGlmCkBAIC0zMjgsNyArMzI4LDE0IEBACiAgIH0KIAogICAvLyBXaGlsZSB3ZSdyZSBhdCBpdCwgY2hlY2sgcHJvcGVyIFRlc3RGaWxlQWNjZXNzIGZ1bmN0aW9uYWxpdHkuCi0gIGlmIChrd3N5czo6U3lzdGVtVG9vbHM6OlRlc3RGaWxlQWNjZXNzKHRlc3ROZXdGaWxlLAorICBib29sIGRvX3dyaXRlX3Rlc3QgPSB0cnVlOworI2lmIGRlZmluZWQoX19saW51eF9fKQorICAvLyBJZiB3ZSBhcmUgcnVubmluZyBhcyByb290IG9uIGxpbnV4IGlnbm9yZSB0aGlzIGNoZWNrLCBhcworICAvLyByb290IGNhbiBhbHdheXMgd3JpdGUgdG8gZmlsZXMKKyAgZG9fd3JpdGVfdGVzdCA9IChnZXR1aWQoKSAhPSAwKTsKKyNlbmRpZgorICBpZiAoZG9fd3JpdGVfdGVzdCAmJgorICAgICAga3dzeXM6OlN5c3RlbVRvb2xzOjpUZXN0RmlsZUFjY2Vzcyh0ZXN0TmV3RmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dzeXM6OlRFU1RfRklMRV9XUklURSkpIHsKICAgICBzdGQ6OmNlcnIKICAgICAgIDw8ICJUZXN0RmlsZUFjY2VzcyBpbmNvcnJlY3RseSBpbmRpY2F0ZWQgdGhhdCB0aGlzIGlzIGEgd3JpdGFibGUgZmlsZToiCkBAIC01MDAsNyArNTA3LDcgQEAKIAogICBjaGFyKiBjcmVzID0KICAgICBrd3N5czo6U3lzdGVtVG9vbHM6OkFwcGVuZFN0cmluZ3MoIk1hcnkgSGFkIEEiLCAiIExpdHRsZSBMYW1iLiIpOwotICBpZiAoc3RyY21wKGNyZXMsICJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLiIpKSB7CisgIGlmIChzdHJjbXAoY3JlcywgIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuIikgIT0gMCkgewogICAgIHN0ZDo6Y2VyciA8PCAiUHJvYmxlbSB3aXRoIEFwcGVuZFN0cmluZ3MgIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBXCIgXCIgTGl0dGxlIExhbWIuXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXMgPSBmYWxzZTsKQEAgLTUwOCw3ICs1MTUsNyBAQAogICBkZWxldGVbXSBjcmVzOwogCiAgIGNyZXMgPSBrd3N5czo6U3lzdGVtVG9vbHM6OkFwcGVuZFN0cmluZ3MoIk1hcnkgSGFkIiwgIiBBICIsICJMaXR0bGUgTGFtYi4iKTsKLSAgaWYgKHN0cmNtcChjcmVzLCAiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKSkgeworICBpZiAoc3RyY21wKGNyZXMsICJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBBcHBlbmRTdHJpbmdzICIKICAgICAgICAgICAgICAgPDwgIlwiTWFyeSBIYWRcIiBcIiBBIFwiIFwiTGl0dGxlIExhbWIuXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXMgPSBmYWxzZTsKQEAgLTUyMiw3ICs1MjksNyBAQAogICB9CiAKICAgY3JlcyA9IGt3c3lzOjpTeXN0ZW1Ub29sczo6UmVtb3ZlQ2hhcnMoIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuIiwgImFlaW91Iik7Ci0gIGlmIChzdHJjbXAoY3JlcywgIk1yeSBIZCBBIEx0dGwgTG1iLiIpKSB7CisgIGlmIChzdHJjbXAoY3JlcywgIk1yeSBIZCBBIEx0dGwgTG1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBSZW1vdmVDaGFycyAiCiAgICAgICAgICAgICAgIDw8ICJcIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXMgPSBmYWxzZTsKQEAgLTUzMCw3ICs1MzcsNyBAQAogICBkZWxldGVbXSBjcmVzOwogCiAgIGNyZXMgPSBrd3N5czo6U3lzdGVtVG9vbHM6OlJlbW92ZUNoYXJzQnV0VXBwZXJIZXgoIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuIik7Ci0gIGlmIChzdHJjbXAoY3JlcywgIkEiKSkgeworICBpZiAoc3RyY21wKGNyZXMsICJBIikgIT0gMCkgewogICAgIHN0ZDo6Y2VyciA8PCAiUHJvYmxlbSB3aXRoIFJlbW92ZUNoYXJzQnV0VXBwZXJIZXggIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLlwiIiA8PCBzdGQ6OmVuZGw7CiAgICAgcmVzID0gZmFsc2U7CkBAIC01MzksNyArNTQ2LDcgQEAKIAogICBjaGFyKiBjcmVzMiA9IHN0cmR1cCgiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKTsKICAga3dzeXM6OlN5c3RlbVRvb2xzOjpSZXBsYWNlQ2hhcnMoY3JlczIsICJhZWlvdSIsICdYJyk7Ci0gIGlmIChzdHJjbXAoY3JlczIsICJNWHJ5IEhYZCBBIExYdHRsWCBMWG1iLiIpKSB7CisgIGlmIChzdHJjbXAoY3JlczIsICJNWHJ5IEhYZCBBIExYdHRsWCBMWG1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBSZXBsYWNlQ2hhcnMgIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLlwiIiA8PCBzdGQ6OmVuZGw7CiAgICAgcmVzID0gZmFsc2U7CkBAIC01NjEsNyArNTY4LDcgQEAKICAgfQogCiAgIGNyZXMgPSBrd3N5czo6U3lzdGVtVG9vbHM6OkR1cGxpY2F0ZVN0cmluZygiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKTsKLSAgaWYgKHN0cmNtcChjcmVzLCAiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKSkgeworICBpZiAoc3RyY21wKGNyZXMsICJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBEdXBsaWNhdGVTdHJpbmcgIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLlwiIiA8PCBzdGQ6OmVuZGw7CiAgICAgcmVzID0gZmFsc2U7CkBAIC03MjEsOCArNzI4LDcgQEAKIHsKICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CiAgIHNzIDw8ICJ2ZWN0b3IoIjsKLSAgZm9yIChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSB2ZWMuYmVnaW4oKTsKLSAgICAgICBpICE9IHZlYy5lbmQoKTsgKytpKSB7CisgIGZvciAoYXV0byBpID0gdmVjLmJlZ2luKCk7IGkgIT0gdmVjLmVuZCgpOyArK2kpIHsKICAgICBpZiAoaSAhPSB2ZWMuYmVnaW4oKSkgewogICAgICAgc3MgPDwgIiwgIjsKICAgICB9CkBAIC03NDMsMTYgKzc0OSwxNiBAQAogICBjb25zdCBjaGFyKiByZWdpc3RyeVBhdGggPSAiW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXE15QXBwOyBNeUtleV0iOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcmlnaW5hbFBhdGhzOwotICBvcmlnaW5hbFBhdGhzLnB1c2hfYmFjayhyZWdpc3RyeVBhdGgpOworICBvcmlnaW5hbFBhdGhzLmVtcGxhY2VfYmFjayhyZWdpc3RyeVBhdGgpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBlY3RlZFBhdGhzOwotICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjayhyZWdpc3RyeVBhdGgpOworICBleHBlY3RlZFBhdGhzLmVtcGxhY2VfYmFjayhyZWdpc3RyeVBhdGgpOwogI2lmZGVmIF9XSU4zMgogICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjaygiQzovU29tZXdoZXJlL3NvbWV0aGluZyIpOwogICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjaygiRDovVGVtcCIpOwogI2Vsc2UKLSAgZXhwZWN0ZWRQYXRocy5wdXNoX2JhY2soIi9Tb21ld2hlcmUvc29tZXRoaW5nIik7Ci0gIGV4cGVjdGVkUGF0aHMucHVzaF9iYWNrKCIvdG1wIik7CisgIGV4cGVjdGVkUGF0aHMuZW1wbGFjZV9iYWNrKCIvU29tZXdoZXJlL3NvbWV0aGluZyIpOworICBleHBlY3RlZFBhdGhzLmVtcGxhY2VfYmFjaygiL3RtcCIpOwogI2VuZGlmCiAKICAgYm9vbCByZXMgPSB0cnVlOwpAQCAtODE3LDcgKzgyMyw3IEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VhcmNoUGF0aHM7Ci0gIHNlYXJjaFBhdGhzLnB1c2hfYmFjayhURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVIpOworICBzZWFyY2hQYXRocy5lbXBsYWNlX2JhY2soVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSKTsKICAgaWYgKGt3c3lzOjpTeXN0ZW1Ub29sczo6RmluZEZpbGUodGVzdEZpbmRGaWxlTmFtZSwgc2VhcmNoUGF0aHMsIHRydWUpCiAgICAgICAgIC5lbXB0eSgpKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJQcm9ibGVtIHdpdGggRmluZEZpbGUgd2l0aG91dCBzeXN0ZW0gcGF0aHMgZm9yOiAiCkBAIC0xMDg2LDYgKzEwOTIsNzAgQEAKICAgcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGJvb2wgQ2hlY2tVUkxQYXJzaW5nKCkKK3sKKyAgYm9vbCByZXQgPSB0cnVlOworICBzdGQ6OnN0cmluZyB1cmwgPSAiaHR0cDovL3VzZXI6cHdAaG9zdG5hbWU6NDIvZnVsbC91cmwuY29tIjsKKworICBzdGQ6OnN0cmluZyBwcm90b2NvbCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBob3N0bmFtZSwgZGF0YXBvcnQsIGRhdGFiYXNlOworICBrd3N5czo6U3lzdGVtVG9vbHM6OlBhcnNlVVJMKHVybCwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXBvcnQsIGRhdGFiYXNlKTsKKyAgaWYgKHByb3RvY29sICE9ICJodHRwIiB8fCB1c2VybmFtZSAhPSAidXNlciIgfHwgcGFzc3dvcmQgIT0gInB3IiB8fAorICAgICAgaG9zdG5hbWUgIT0gImhvc3RuYW1lIiB8fCBkYXRhcG9ydCAhPSAiNDIiIHx8CisgICAgICBkYXRhYmFzZSAhPSAiZnVsbC91cmwuY29tIikgeworICAgIHN0ZDo6Y2VyciA8PCAiSW5jb3JyZWN0IFVSTCBwYXJzaW5nIiA8PCBzdGQ6OmVuZGw7CisgICAgcmV0ID0gZmFsc2U7CisgIH0KKworICBzdGQ6OnN0cmluZyB1cmkgPQorICAgICJmaWxlOi8vaG9zdG5hbWUvcGF0aC90by8iCisgICAgImElMjBmaWxlJTIwd2l0aCUyMHN0ciVDMyVBMG5nJUMzJUE4JTIwY2glNDByJTIwYW5kJTIwcyVDMiVCNWFjZXMiOworICBrd3N5czo6U3lzdGVtVG9vbHM6OlBhcnNlVVJMKHVyaSwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXBvcnQsIGRhdGFiYXNlLCB0cnVlKTsKKyAgaWYgKHByb3RvY29sICE9ICJmaWxlIiB8fCBob3N0bmFtZSAhPSAiaG9zdG5hbWUiIHx8CisgICAgICBkYXRhYmFzZSAhPSAicGF0aC90by9hIGZpbGUgd2l0aCBzdHLDoG5nw6ggY2hAciBhbmQgc8K1YWNlcyIpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkluY29ycmVjdCBVUkwgcGFyc2luZyBvciBkZWNvZGluZyIgPDwgc3RkOjplbmRsOworICAgIHJldCA9IGZhbHNlOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIENoZWNrU3BsaXRTdHJpbmcoKQoreworICBib29sIHJldCA9IHRydWU7CisKKyAgYXV0byBjaGVja19zcGxpdCA9IFtdKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gZXhwZWN0ZWQpIC0+IGJvb2wgeworICAgIGF1dG8gY29uc3QgY29tcG9uZW50cyA9IGt3c3lzOjpTeXN0ZW1Ub29sczo6U3BsaXRTdHJpbmcoaW5wdXQsICcvJyk7CisgICAgaWYgKGNvbXBvbmVudHMuc2l6ZSgpICE9IGV4cGVjdGVkLnNpemUoKSkgeworICAgICAgc3RkOjpjZXJyIDw8ICJJbmNvcnJlY3Qgc3BsaXQgY291bnQgZm9yICIgPDwgaW5wdXQgPDwgIjogIgorICAgICAgICAgICAgICAgIDw8IGNvbXBvbmVudHMuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGV4cGVjdGVkKSB7CisgICAgICBpZiAoY29tcG9uZW50c1tpXSAhPSBwYXJ0KSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiSW5jb3JyZWN0IHNwbGl0IGNvbXBvbmVudCAiIDw8IGkgPDwgIiBmb3IgIiA8PCBpbnB1dAorICAgICAgICAgICAgICAgICAgPDwgIjogIiA8PCBjb21wb25lbnRzW2ldIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgKytpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICAvLyBObyBzZXBhcmF0b3JzCisgIHJldCAmPSBjaGVja19zcGxpdCgibm9zZXAiLCB7ICJub3NlcCIgfSk7CisgIC8vIFNpbXBsZQorICByZXQgJj0gY2hlY2tfc3BsaXQoImZpcnN0L3NlY29uZCIsIHsgImZpcnN0IiwgInNlY29uZCIgfSk7CisgIC8vIFNlcGFyYXRvciBhdCBiZWdpbm5pbmcKKyAgcmV0ICY9IGNoZWNrX3NwbGl0KCIvc3RhcnRzL3NlcCIsIHsgIiIsICJzdGFydHMiLCAic2VwIiB9KTsKKyAgLy8gU2VwYXJhdG9yIGF0IGVuZAorICByZXQgJj0gY2hlY2tfc3BsaXQoImVuZHMvc2VwLyIsIHsgImVuZHMiLCAic2VwIiwgIiIgfSk7CisKKyAgcmV0dXJuIHJldDsKK30KKwogaW50IHRlc3RTeXN0ZW1Ub29scyhpbnQsIGNoYXIqIFtdKQogewogICBib29sIHJlcyA9IHRydWU7CkBAIC0xMTMzLDUgKzEyMDMsOSBAQAogCiAgIHJlcyAmPSBDaGVja0NvcHlGaWxlSWZEaWZmZXJlbnQoKTsKIAorICByZXMgJj0gQ2hlY2tVUkxQYXJzaW5nKCk7CisKKyAgcmVzICY9IENoZWNrU3BsaXRTdHJpbmcoKTsKKwogICByZXR1cm4gcmVzID8gMCA6IDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmguaW4gYi9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmguaW4KaW5kZXggMDIyZTM2ZS4uZTRiODlhNyAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5oLmluCisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtVG9vbHMuaC5pbgpAQCAtMyw3ICszLDcgQEAKICNpZm5kZWYgQEtXU1lTX05BTUVTUEFDRUBfdGVzdFN5c3RlbXRvb2xzX2gKICNkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfdGVzdFN5c3RlbXRvb2xzX2gKIAotI2RlZmluZSBFWEVDVVRBQkxFX09VVFBVVF9QQVRIICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQCIKKyNkZWZpbmUgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQCIKIAogI2RlZmluZSBURVNUX1NZU1RFTVRPT0xTX1NPVVJDRV9ESVIgIkBURVNUX1NZU1RFTVRPT0xTX1NPVVJDRV9ESVJAIgogI2RlZmluZSBURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVIgIkBURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVJAIgpkaWZmIC0tZ2l0IGEvVGVtcGxhdGVzL1Rlc3REcml2ZXIuY3h4LmluIGIvVGVtcGxhdGVzL1Rlc3REcml2ZXIuY3h4LmluCmluZGV4IDg0NmE4MjguLjA1M2YxZWUgMTAwNjQ0Ci0tLSBhL1RlbXBsYXRlcy9UZXN0RHJpdmVyLmN4eC5pbgorKysgYi9UZW1wbGF0ZXMvVGVzdERyaXZlci5jeHguaW4KQEAgLTQ1LDcgKzQ1LDggQEAKICAgIChub3RlIHRoYXQgaXQgaGFzIHRvIGJlIGZyZWUnZCBtYW51YWxseSkgKi8KIHN0YXRpYyBjaGFyKiBsb3dlcmNhc2UoY29uc3QgY2hhciogc3RyaW5nKQogewotICBjaGFyICpuZXdfc3RyaW5nLCAqcDsKKyAgY2hhciAqbmV3X3N0cmluZzsKKyAgY2hhciAqcDsKICAgc2l6ZV90IHN0cmluZ1NpemU7CiAKICAgc3RyaW5nU2l6ZSA9IENNX0NBU1Qoc2l6ZV90LCBzdHJsZW4oc3RyaW5nKSArIDEpOwpAQCAtNjMsNyArNjQsOSBAQAogCiBpbnQgbWFpbihpbnQgYWMsIGNoYXIqIGF2W10pCiB7Ci0gIGludCBpLCB0ZXN0TnVtID0gMCwgcGFydGlhbF9tYXRjaDsKKyAgaW50IGk7CisgIGludCB0ZXN0TnVtID0gMDsKKyAgaW50IHBhcnRpYWxfbWF0Y2g7CiAgIGNoYXIgKmFyZzsKICAgaW50IHRlc3RUb1J1biA9IC0xOwogCmRpZmYgLS1naXQgYS9UZXN0cy9CdWlsZERlcGVuZHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9CdWlsZERlcGVuZHMvQ01ha2VMaXN0cy50eHQKaW5kZXggYzFhZDE3Yy4uNWRkYWU4MyAxMDA2NDQKLS0tIGEvVGVzdHMvQnVpbGREZXBlbmRzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0J1aWxkRGVwZW5kcy9DTWFrZUxpc3RzLnR4dApAQCAtMzY4LDYgKzM2OCwyOCBAQAogICAke1RFU1RfTElOS19ERVBFTkRTfQogIikKICAgZW5kaWYoKQorCisgIHNldChsaW5rZGVwMyAke0J1aWxkRGVwZW5kc19CSU5BUllfRElSfS9Qcm9qZWN0L2xpbmtkZXAzJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0pCisgIGlmKCR7bGlua2RlcDN9IElTX05FV0VSX1RIQU4gJHtURVNUX0xJTktfREVQRU5EU30pCisgICAgbWVzc2FnZSgiJDxMSU5LX0xBTkdVQUdFPiBpbiBMSU5LX0RFUEVORFMgd29ya2VkIikKKyAgZWxzZSgpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICIkPExJTktfTEFOR1VBR0U+IGluIExJTktfREVQRU5EUyBmYWlsZWQuICBFeGVjdXRhYmxlCisgICR7bGlua2RlcDN9CitpcyBub3QgbmV3ZXIgdGhhbiBkZXBlbmRlbmN5CisgICR7VEVTVF9MSU5LX0RFUEVORFN9CisiKQorICBlbmRpZigpCisKKyAgc2V0KGxpbmtkZXA0ICR7QnVpbGREZXBlbmRzX0JJTkFSWV9ESVJ9L1Byb2plY3QvbGlua2RlcDQke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfSkKKyAgaWYoJHtsaW5rZGVwNH0gSVNfTkVXRVJfVEhBTiAke1RFU1RfTElOS19ERVBFTkRTfSkKKyAgICBtZXNzYWdlKCIkPExJTktfTEFOR1VBR0U+IGluIElOVEVSRkFDRV9MSU5LX0RFUEVORFMgd29ya2VkIikKKyAgZWxzZSgpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICIkPExJTktfTEFOR1VBR0U+IGluIElOVEVSRkFDRV9MSU5LX0RFUEVORFMgZmFpbGVkLiAgRXhlY3V0YWJsZQorICAke2xpbmtkZXA0fQoraXMgbm90IG5ld2VyIHRoYW4gZGVwZW5kZW5jeQorICAke1RFU1RfTElOS19ERVBFTkRTfQorIikKKyAgZW5kaWYoKQogZW5kaWYoKQogCiBpZihFWElTVFMgIiR7bGlua19kZXBlbmRzX25vX3NoYXJlZF9jaGVja190eHR9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL0J1aWxkRGVwZW5kcy9Qcm9qZWN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQnVpbGREZXBlbmRzL1Byb2plY3QvQ01ha2VMaXN0cy50eHQKaW5kZXggODMzODgwMC4uODM1ODNjOSAxMDA2NDQKLS0tIGEvVGVzdHMvQnVpbGREZXBlbmRzL1Byb2plY3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQnVpbGREZXBlbmRzL1Byb2plY3QvQ01ha2VMaXN0cy50eHQKQEAgLTExOCw2ICsxMTgsMTQgQEAKICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBmb29faW50ZXJmYWNlIFBST1BFUlRZIElOVEVSRkFDRV9MSU5LX0RFUEVORFMgJDwxOiR7VEVTVF9MSU5LX0RFUEVORFN9PikKICAgYWRkX2V4ZWN1dGFibGUobGlua2RlcDIgbGlua2RlcC5jeHgpCiAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhsaW5rZGVwMiBQUklWQVRFIGZvb19pbnRlcmZhY2UpCisKKyAgYWRkX2V4ZWN1dGFibGUobGlua2RlcDMgbGlua2RlcC5jeHgpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgbGlua2RlcDMgUFJPUEVSVFkgTElOS19ERVBFTkRTICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46JHtURVNUX0xJTktfREVQRU5EU30+KQorCisgIGFkZF9saWJyYXJ5KGZvb19pbnRlcmZhY2UyIElOVEVSRkFDRSkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBmb29faW50ZXJmYWNlMiBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19ERVBFTkRTICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46JHtURVNUX0xJTktfREVQRU5EU30+KQorICBhZGRfZXhlY3V0YWJsZShsaW5rZGVwNCBsaW5rZGVwLmN4eCkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpbmtkZXA0IFBSSVZBVEUgZm9vX2ludGVyZmFjZTIpCiBlbmRpZigpCiAKIGFkZF9saWJyYXJ5KGxpbmtfZGVwZW5kc19ub19zaGFyZWRfbGliIFNIQVJFRCBsaW5rX2RlcGVuZHNfbm9fc2hhcmVkX2xpYi5jCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlTGliL0NNYWtlTGlzdHMudHh0CmluZGV4IGJiNTBkNzYuLjBiMmM4ZjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGliL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlTGliL0NNYWtlTGlzdHMudHh0CkBAIC0yOSw2ICsyOSw5IEBACiAgIHRlc3RDTUV4dE1lbW9yeS5jeHgKICAgdGVzdENNRXh0QWxnb3JpdGhtLmN4eAogICApCitpZiAoQ01ha2VfVEVTVF9GSUxFU1lTVEVNX1BBVEggT1IgTk9UIENNYWtlX0hBVkVfQ1hYX0ZJTEVTWVNURU0pCisgIGxpc3QoQVBQRU5EIENNYWtlTGliX1RFU1RTIHRlc3RDTUZpbGVzeXN0ZW1QYXRoLmN4eCkKK2VuZGlmKCkKIAogYWRkX2V4ZWN1dGFibGUodGVzdFVWUHJvY2Vzc0NoYWluSGVscGVyIHRlc3RVVlByb2Nlc3NDaGFpbkhlbHBlci5jeHgpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL1BzZXVkb01lbWNoZWNrL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svQ01ha2VMaXN0cy50eHQKaW5kZXggN2M4NGVlMS4uNGJlZjZjNSAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svQ01ha2VMaXN0cy50eHQKQEAgLTE1LDYgKzE1LDkgQEAKIGFkZF9leGVjdXRhYmxlKHBzZXVkb19CQyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3JldDAuY3h4IikKIHNldF90YXJnZXRfcHJvcGVydGllcyhwc2V1ZG9fQkMgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBCQykKIHRhcmdldF9saW5rX2xpYnJhcmllcyhwc2V1ZG9fQkMgQ01ha2VMaWIpCithZGRfZXhlY3V0YWJsZShwc2V1ZG9fY3VkYS1tZW1jaGVjayAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3JldDAuY3h4IikKK3NldF90YXJnZXRfcHJvcGVydGllcyhwc2V1ZG9fY3VkYS1tZW1jaGVjayBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIGN1ZGEtbWVtY2hlY2spCit0YXJnZXRfbGlua19saWJyYXJpZXMocHNldWRvX2N1ZGEtbWVtY2hlY2sgQ01ha2VMaWIpCiAKICMgYmluYXJ5IHRvIGJlIHVzZWQgYXMgcHJlLSBhbmQgcG9zdC1tZW1jaGVjayBjb21tYW5kIHRoYXQgZmFpbHMKIGFkZF9leGVjdXRhYmxlKG1lbWNoZWNrX2ZhaWwgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9yZXQxLmN4eCIpCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi9Qc2V1ZG9NZW1jaGVjay9tZW10ZXN0ZXIuY3h4LmluIGIvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svbWVtdGVzdGVyLmN4eC5pbgppbmRleCAzMTgzYmMwLi5mMzdhZDU5IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi9Qc2V1ZG9NZW1jaGVjay9tZW10ZXN0ZXIuY3h4LmluCisrKyBiL1Rlc3RzL0NNYWtlTGliL1BzZXVkb01lbWNoZWNrL21lbXRlc3Rlci5jeHguaW4KQEAgLTEsOCArMSwxNCBAQAotI2luY2x1ZGUgPGNtU3lzdGVtVG9vbHMuaD4KLSNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgImNtc3lzL0VuY29kaW5nLmh4eCIKKworI2luY2x1ZGUgPGNtU3lzdGVtVG9vbHMuaD4KKworLy8gY2xhbmctZm9ybWF0IG9mZgogI2RlZmluZSBSRVRWQUwgQF9yZXR2YWxACisjZGVmaW5lIENNQUtFX0NPTU1BTkQgIkBDTUFLRV9DT01NQU5EQCIKKy8vIGNsYW5nLWZvcm1hdCBvbgogCiBpbnQgbWFpbihpbnQgYWMsIGNoYXIqKiBhdikKIHsKQEAgLTE0LDYgKzIwLDkgQEAKICAgc3RkOjpzdHJpbmcgZXhlbmFtZSA9IGFyZ3ZbMF07CiAgIHN0ZDo6c3RyaW5nIGxvZ2FyZzsKICAgYm9vbCBuZXh0YXJnID0gZmFsc2U7CisgIC8vIGV4ZWN1dGUgdGhlIHBhcnQgYWZ0ZXIgdGhlIGxhc3QgYXJndW1lbnQ/CisgIC8vIHRoZSBsb2dmaWxlIHBhdGggZ2V0cyBwYXNzZWQgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgUFNFVURPX0xPR0ZJTEUKKyAgYm9vbCBleGVjID0gZmFsc2U7CiAKICAgaWYgKGV4ZW5hbWUuZmluZCgidmFsZ3JpbmQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIGxvZ2FyZyA9ICItLWxvZy1maWxlPSI7CkBAIC0yNiw2ICszNSwxMCBAQAogICB9IGVsc2UgaWYgKGV4ZW5hbWUuZmluZCgiQkMiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIG5leHRhcmcgPSB0cnVlOwogICAgIGxvZ2FyZyA9ICIvWCI7CisgIH0gZWxzZSBpZiAoZXhlbmFtZS5maW5kKCJjdWRhLW1lbWNoZWNrIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBuZXh0YXJnID0gdHJ1ZTsKKyAgICBleGVjID0gdHJ1ZTsKKyAgICBsb2dhcmcgPSAiLS1sb2ctZmlsZSI7CiAgIH0KIAogICBpZiAoIWxvZ2FyZy5lbXB0eSgpKSB7CkBAIC00NSw4ICs1OCwyNSBAQAogICAgICAgfQogICAgIH0KIAorICAgIC8vIGZpbmQgdGhlIGxhc3QgYXJndW1lbnQgcG9zaXRpb24KKyAgICBpbnQgbGFzdGFyZ19wb3MgPSAxOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICBzdGQ6OnN0cmluZyBhcmcgPSBhcmd2W2ldOworICAgICAgaWYgKGFyZy5maW5kKCItLSIpID09IDApIHsKKyAgICAgICAgbGFzdGFyZ19wb3MgPSBpOworICAgICAgfQorICAgIH0KKwogICAgIGlmICghbG9nZmlsZS5lbXB0eSgpKSB7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpUb3VjaChsb2dmaWxlLCB0cnVlKTsKKyAgICAgIC8vIGV4ZWN1dGUgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBhcmd1bWVudCB3aXRoIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQKKyAgICAgIGludCBjYWxsYXJnX3BvcyA9IGxhc3RhcmdfcG9zICsgKG5leHRhcmcgPyAyIDogMSk7CisgICAgICBpZiAoZXhlYyAmJiBjYWxsYXJnX3BvcyA8IGFyZ2MpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNhbGxhcmdzeyBDTUFLRV9DT01NQU5ELCAiLUUiLCAiZW52IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFNFVURPX0xPR0ZJTEU9IiArIGxvZ2ZpbGUgfTsKKyAgICAgICAgY2FsbGFyZ3MuaW5zZXJ0KGNhbGxhcmdzLmVuZCgpLCAmYXJndltjYWxsYXJnX3Bvc10sICZhcmd2W2FyZ2NdKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6UnVuU2luZ2xlQ29tbWFuZChjYWxsYXJncyk7CisgICAgICB9CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RBcmd1bWVudFBhcnNlci5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0QXJndW1lbnRQYXJzZXIuY3h4CmluZGV4IDIwZjk4YzIuLjk2NTY5MGMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RBcmd1bWVudFBhcnNlci5jeHgKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEFyZ3VtZW50UGFyc2VyLmN4eApAQCAtNyw4ICs3LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RDTUZpbGVzeXN0ZW1QYXRoLmN4eCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RDTUZpbGVzeXN0ZW1QYXRoLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTg0NTIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdENNRmlsZXN5c3RlbVBhdGguY3h4CkBAIC0wLDAgKzEsMTAwNiBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGNtL2ZpbGVzeXN0ZW0+CisjaW5jbHVkZSA8Y20vaW9tYW5pcD4KKworbmFtZXNwYWNlIHsKKworbmFtZXNwYWNlIGZzID0gY206OmZpbGVzeXN0ZW07CisKK3ZvaWQgY2hlY2tSZXN1bHQoYm9vbCBzdWNjZXNzKQoreworICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICBzdGQ6OmNvdXQgPDwgIiA9PiBmYWlsZWQiOworICB9CisgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cit9CisKK2Jvb2wgdGVzdENvbnN0cnVjdG9ycygpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdENvbnN0cnVjdG9ycygpIjsKKworICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgeworICAgIGZzOjpwYXRoIHA7CisgICAgaWYgKHAgIT0gZnM6OnBhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBmczo6cGF0aCBwMSgiL2EvYi9jIik7CisgICAgZnM6OnBhdGggcDIoIi9hL2IvYyIpOworICAgIGlmIChwMSAhPSBwMikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChwMS5zdHJpbmcoKSAhPSBwMi5zdHJpbmcoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChwMS5zdHJpbmcoKSAhPSAiL2EvYi9jIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBzdGQ6OnN0cmluZyBzKCIvYS9iL2MiKTsKKyAgICBmczo6cGF0aCBwMShzKTsKKyAgICBmczo6cGF0aCBwMihzLmJlZ2luKCksIHMuZW5kKCkpOworICAgIGlmIChwMSAhPSBwMikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChwMS5zdHJpbmcoKSAhPSBzIHx8IHAyLnN0cmluZygpICE9IHMpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBDTV9GSUxFU1lTVEVNX1NPVVJDRV9UUkFJVFNfSVRFUkFUT1IKKyAgICBzdGQ6OnN0cmluZyBzMihzKTsKKyAgICBzMiArPSAnXDAnOworICAgIGZzOjpwYXRoIHAzKHMyLmJlZ2luKCkpOworICAgIGlmIChwMSAhPSBwMyB8fCBwMy5zdHJpbmcoKSAhPSBzKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorICB7CisgICAgc3RkOjp3c3RyaW5nIHMoTCIvYS9iL2MiKTsKKyAgICBmczo6cGF0aCBwMShzKTsKKyAgICBmczo6cGF0aCBwMihzLmJlZ2luKCksIHMuZW5kKCkpOworICAgIGlmIChwMSAhPSBwMikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChwMS53c3RyaW5nKCkgIT0gcyB8fCBwMi53c3RyaW5nKCkgIT0gcykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2lmIENNX0ZJTEVTWVNURU1fU09VUkNFX1RSQUlUU19JVEVSQVRPUgorICAgIHN0ZDo6d3N0cmluZyBzMihzKTsKKyAgICBzMiArPSBMJ1wwJzsKKyAgICBmczo6cGF0aCBwMyhzMi5iZWdpbigpKTsKKyAgICBpZiAocDEgIT0gcDMgfHwgcDMud3N0cmluZygpICE9IHMpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyAgICBzdGQ6OnN0cmluZyBzKCIvYS9iL2MiKTsKKyAgICBmczo6cGF0aDo6c3RyaW5nX3R5cGUgd3M7CisgICAgZm9yIChhdXRvIGMgOiBzKSB7CisgICAgICB3cyArPSBmczo6cGF0aDo6dmFsdWVfdHlwZShjKTsKKyAgICB9CisgICAgZnM6OnBhdGggcDEod3MpOworICAgIGZzOjpwYXRoIHAyKHdzLmJlZ2luKCksIHdzLmVuZCgpKTsKKyAgICBpZiAocDEgIT0gcDIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAocDEubmF0aXZlKCkgIT0gd3MgfHwgcDIubmF0aXZlKCkgIT0gd3MpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBDTV9GSUxFU1lTVEVNX1NPVVJDRV9UUkFJVFNfSVRFUkFUT1IKKyAgICBmczo6cGF0aDo6c3RyaW5nX3R5cGUgd3MyKHdzKTsKKyAgICB3czIgKz0gZnM6OnBhdGg6OnZhbHVlX3R5cGUoJ1wwJyk7CisgICAgZnM6OnBhdGggcDMod3MyLmJlZ2luKCkpOworICAgIGlmIChwMSAhPSBwMyB8fCBwMy5uYXRpdmUoKSAhPSB3cykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgdGVzdENvbmNhdGVuYXRpb24oKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RDb25jYXRlbmF0aW9uKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgZnM6OnBhdGggcCgiL2EvYiIpOworICAgIHAgLz0gImMiOworICAgIGlmICghKHAuc3RyaW5nKCkgPT0gIi9hL2IvYyIgfHwgcC5zdHJpbmcoKSA9PSAiL2EvYlxcYyIpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCArPSAiZCI7CisgICAgaWYgKCEocC5zdHJpbmcoKSA9PSAiL2EvYi9jZCIgfHwgcC5zdHJpbmcoKSA9PSAiL2EvYlxcY2QiKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGZzOjpwYXRoIHAyKCJ4L3kiKTsKKyAgICBwIC89IHAyOworICAgIGlmICghKHAuc3RyaW5nKCkgPT0gIi9hL2IvY2QveC95IiB8fCBwLnN0cmluZygpID09ICIvYS9iXFxjZFxceC95IikpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gcCAvIHAyOworICAgIGlmICghKHAuc3RyaW5nKCkgPT0gIi9hL2IvY2QveC95L3gveSIgfHwKKyAgICAgICAgICBwLnN0cmluZygpID09ICIvYS9iXFxjZFxceC95XFx4L3kiKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBmczo6cGF0aCBwKCJhIik7CisgICAgcCAvPSAiIjsKKyAgICBpZiAoIShwLnN0cmluZygpID09ICJhLyIgfHwgcC5zdHJpbmcoKSA9PSAiYVxcIikpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwIC89ICIvYiI7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gIi9iIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgIHsKKyAgICBmczo6cGF0aCBwKCJhIik7CisgICAgcCAvPSAiYzovYiI7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gImM6L2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9IGZzOjpwYXRoKCJhIikgLyAiYzoiOworICAgIGlmIChwLnN0cmluZygpICE9ICJjOiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gZnM6OnBhdGgoImM6IikgLyAiIjsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiYzoiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9IGZzOjpwYXRoKCJjOmEiKSAvICIvYiI7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gImM6L2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9IGZzOjpwYXRoKCJjOmEiKSAvICJjOmIiOworICAgIGlmIChwLnN0cmluZygpICE9ICJjOmFcXGIiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9IGZzOjpwYXRoKCIvL2hvc3QiKSAvICJiIjsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiLy9ob3N0XFxiIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSBmczo6cGF0aCgiLy9ob3N0LyIpIC8gImIiOworICAgIGlmIChwLnN0cmluZygpICE9ICIvL2hvc3QvYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgY2hlY2tSZXN1bHQocmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitib29sIHRlc3RNb2RpZmllcnMoKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RNb2RpZmllcnMoKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBzdGQ6OnN0cmluZyBzKCJhLy8vYi8iKTsKKyAgICBmczo6cGF0aCBwKHMpOworICAgIHN0ZDo6cmVwbGFjZSgKKyAgICAgIHMuYmVnaW4oKSwgcy5lbmQoKSwgJy8nLAorICAgICAgc3RhdGljX2Nhc3Q8c3RkOjpzdHJpbmc6OnZhbHVlX3R5cGU+KGZzOjpwYXRoOjpwcmVmZXJyZWRfc2VwYXJhdG9yKSk7CisgICAgcC5tYWtlX3ByZWZlcnJlZCgpOworICAgIGlmIChwLnN0cmluZygpICE9IHMpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorICB7CisgICAgZnM6OnBhdGggcCgiYS9iL2MuZS5mIik7CisgICAgcC5yZW1vdmVfZmlsZW5hbWUoKTsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiYS9iLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwLnJlbW92ZV9maWxlbmFtZSgpOworICAgIGlmIChwLnN0cmluZygpICE9ICJhL2IvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBmczo6cGF0aCBwKCJhL2IvYy5lLmYiKTsKKyAgICBwLnJlcGxhY2VfZmlsZW5hbWUoIngueSIpOworICAgIGlmIChwLnN0cmluZygpICE9ICJhL2IveC55IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBmczo6cGF0aCBwKCJhL2IvYy5lLmYiKTsKKyAgICBwLnJlcGxhY2VfZXh0ZW5zaW9uKCIueCIpOworICAgIGlmIChwLnN0cmluZygpICE9ICJhL2IvYy5lLngiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcC5yZXBsYWNlX2V4dGVuc2lvbigiLnkiKTsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiYS9iL2MuZS55IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAucmVwbGFjZV9leHRlbnNpb24oKTsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiYS9iL2MuZSIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gIi9hL2IiOworICAgIHAucmVwbGFjZV9leHRlbnNpb24oIi54Iik7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gIi9hL2IueCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gIi9hL2IvIjsKKyAgICBwLnJlcGxhY2VfZXh0ZW5zaW9uKCIueCIpOworICAgIGlmIChwLnN0cmluZygpICE9ICIvYS9iLy54IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisKKyAgY2hlY2tSZXN1bHQocmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitib29sIHRlc3RPYnNlcnZlcnMoKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RPYnNlcnZlcnMoKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBzdGQ6OnN0cmluZyBzKCJhL2IvYyIpOworICAgIGZzOjpwYXRoIHAocyk7CisgICAgZnM6OnBhdGg6OnN0cmluZ190eXBlIHN0OworICAgIGZvciAoYXV0byBjIDogcykgeworICAgICAgc3QgKz0gc3RhdGljX2Nhc3Q8ZnM6OnBhdGg6OnZhbHVlX3R5cGU+KGMpOworICAgIH0KKyAgICBpZiAocC5uYXRpdmUoKSAhPSBzdCB8fCBzdGF0aWNfY2FzdDxmczo6cGF0aDo6c3RyaW5nX3R5cGU+KHApICE9IHN0IHx8CisgICAgICAgIHAuY19zdHIoKSAhPSBzdCkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBzdGQ6OnN0cmluZyBzKCJhLy9iLy9jIik7CisgICAgc3RkOjp3c3RyaW5nIHdzKEwiYS8vYi8vYyIpOworICAgIGZzOjpwYXRoIHAocyk7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gcyB8fCBwLndzdHJpbmcoKSAhPSB3cykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBzdGQ6OnN0cmluZyBzKCJhL2IvYyIpOworICAgIHN0ZDo6d3N0cmluZyB3czsKKyAgICBmb3IgKGF1dG8gYyA6IHMpIHsKKyAgICAgIHdzICs9IHN0YXRpY19jYXN0PHN0ZDo6d3N0cmluZzo6dmFsdWVfdHlwZT4oYyk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIG5zKHMpOworICAgIHN0ZDo6cmVwbGFjZSgKKyAgICAgIG5zLmJlZ2luKCksIG5zLmVuZCgpLCAnLycsCisgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZzo6dmFsdWVfdHlwZT4oZnM6OnBhdGg6OnByZWZlcnJlZF9zZXBhcmF0b3IpKTsKKyAgICBmczo6cGF0aCBwKG5zKTsKKyAgICBpZiAocC5nZW5lcmljX3N0cmluZygpICE9IHMgfHwgcC5nZW5lcmljX3dzdHJpbmcoKSAhPSB3cykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisKKyAgY2hlY2tSZXN1bHQocmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitib29sIHRlc3RDb21wYXJlKCkKK3sKKyAgc3RkOjpjb3V0IDw8ICJ0ZXN0Q29tcGFyZSgpIjsKKworICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgeworICAgIHN0ZDo6c3RyaW5nIHMoImEvYi9jIik7CisgICAgZnM6OnBhdGggcDEocyk7CisgICAgZnM6OnBhdGggcDIocyk7CisgICAgaWYgKHAxLmNvbXBhcmUocDIpICE9IDApIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwMiA9ICJhL2IiOworICAgIGlmIChwMS5jb21wYXJlKHAyKSA8PSAwKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcDIgPSAiYS9kIjsKKyAgICBpZiAocDEuY29tcGFyZShwMikgPj0gMCkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAyID0gImEvYi9kIjsKKyAgICBpZiAocDEuY29tcGFyZShwMikgPj0gMCkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAyID0gImEvYi9hIjsKKyAgICBpZiAocDEuY29tcGFyZShwMikgPD0gMCkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAyID0gImEvYi9jL2QiOworICAgIGlmIChwMS5jb21wYXJlKHAyKSA+PSAwKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcDEgPSAiYSI7CisgICAgcDIgPSAiYiI7CisgICAgaWYgKHAxLmNvbXBhcmUocDIpID09IDApIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorICB7CisgICAgLy8gTFdHIDMwOTYgKGh0dHBzOi8vY3BsdXNwbHVzLmdpdGh1Yi5pby9MV0cvaXNzdWUzMDk2KQorICAgIC8vIGZzOjpwYXRoIHAxKCIvYS8iKTsKKyAgICAvLyBmczo6cGF0aCBwMigiL2EvLiIpOworICAgIC8vIGlmIChwMS5jb21wYXJlKHAyKSAhPSAwKSB7CisgICAgLy8gICByZXN1bHQgPSBmYWxzZTsKKyAgICAvLyB9CisgIH0KKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgdGVzdEdlbmVyYXRpb24oKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RHZW5lcmF0aW9uKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgZnM6OnBhdGggcCgiYS8uL2IvLi4iKTsKKyAgICBpZiAocC5sZXhpY2FsbHlfbm9ybWFsKCkuZ2VuZXJpY19zdHJpbmcoKSAhPSAiYS8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9ICJhLy4vLy9iLy4uLyI7CisgICAgaWYgKHAubGV4aWNhbGx5X25vcm1hbCgpLmdlbmVyaWNfc3RyaW5nKCkgIT0gImEvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgIHsKKyAgICBmczo6cGF0aCBwKCIvL2hvc3QvLi9iLy4uIik7CisgICAgaWYgKHAubGV4aWNhbGx5X25vcm1hbCgpLnN0cmluZygpICE9ICJcXFxcaG9zdFxcIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiLy9ob3N0Ly4vLy9iLy4uLyI7CisgICAgaWYgKHAubGV4aWNhbGx5X25vcm1hbCgpLnN0cmluZygpICE9ICJcXFxcaG9zdFxcIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiYzovL2EvLi8vL2IvLi4vIjsKKyAgICBpZiAocC5sZXhpY2FsbHlfbm9ybWFsKCkuc3RyaW5nKCkgIT0gImM6XFxhXFwiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIHsKKyAgICBpZiAoZnM6OnBhdGgoIi9hLy9kIikubGV4aWNhbGx5X3JlbGF0aXZlKCIvYS9iL2MiKSAhPSAiLi4vLi4vZCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hLy9iLy8vYyIpLmxleGljYWxseV9yZWxhdGl2ZSgiL2EvZCIpICE9ICIuLi9iL2MiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IvYyIpLmxleGljYWxseV9yZWxhdGl2ZSgiYSIpICE9ICJiL2MiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IvYyIpLmxleGljYWxseV9yZWxhdGl2ZSgiYS9iL2MveC95IikgIT0gIi4uLy4uIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYS9iL2MiKS5sZXhpY2FsbHlfcmVsYXRpdmUoImEvYi9jIikgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IiKS5sZXhpY2FsbHlfcmVsYXRpdmUoImMvZCIpICE9ICIuLi8uLi9hL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIGlmIChmczo6cGF0aCgiL2EvZCIpLmxleGljYWxseV9yZWxhdGl2ZSgiZS9kL2MiKSAhPSAiL2EvZCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCJjOi9hL2QiKS5sZXhpY2FsbHlfcmVsYXRpdmUoImUvZC9jIikuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9kIikubGV4aWNhbGx5X3JlbGF0aXZlKCJlL2QvYyIpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoZnM6OnBhdGgoImM6L2EvZCIpLmxleGljYWxseV9wcm94aW1hdGUoImUvZC9jIikgIT0gImM6L2EvZCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbHNlCisgICAgaWYgKGZzOjpwYXRoKCIvYS9kIikubGV4aWNhbGx5X3Byb3hpbWF0ZSgiZS9kL2MiKSAhPSAiL2EvZCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICAgIGlmIChmczo6cGF0aCgiL2EvZCIpLmxleGljYWxseV9wcm94aW1hdGUoIi9hL2IvYyIpICE9ICIuLi8uLi9kIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIC8vIExXRyAzMDcwCisgIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoIWZzOjpwYXRoKCIvYTovYjoiKS5sZXhpY2FsbHlfcmVsYXRpdmUoIi9hOi9jOiIpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImM6L2EvYiIpLmxleGljYWxseV9yZWxhdGl2ZSgiYzovYS9kIikgIT0gIi4uL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiYzovYS9iOiIpLmxleGljYWxseV9yZWxhdGl2ZSgiYzovYS9kIikuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoImM6L2EvYiIpLmxleGljYWxseV9yZWxhdGl2ZSgiYzovYS9kOiIpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbHNlCisgICAgaWYgKGZzOjpwYXRoKCIvYTovYjoiKS5sZXhpY2FsbHlfcmVsYXRpdmUoIi9hOi9jOiIpICE9ICIuLi9iOiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIC8vIExXRyAzMDk2CisgIHsKKyAgICBpZiAoZnM6OnBhdGgoIi9hIikubGV4aWNhbGx5X3JlbGF0aXZlKCIvYS8uIikgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYSIpLmxleGljYWxseV9yZWxhdGl2ZSgiL2EvIikgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IvYyIpLmxleGljYWxseV9yZWxhdGl2ZSgiYS9iL2MiKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYi9jIikubGV4aWNhbGx5X3JlbGF0aXZlKCJhL2IvYy8iKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYi9jIikubGV4aWNhbGx5X3JlbGF0aXZlKCJhL2IvYy8uIikgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IvYy8iKS5sZXhpY2FsbHlfcmVsYXRpdmUoImEvYi9jIikgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IvYy8uIikubGV4aWNhbGx5X3JlbGF0aXZlKCJhL2IvYyIpICE9ICIuIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYS9iL2MvLiIpLmxleGljYWxseV9yZWxhdGl2ZSgiYS9iL2MvIikgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgdGVzdERlY29tcG9zaXRpb24oKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3REZWNvbXBvc2l0aW9uKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgaWYgKCFmczo6cGF0aCgiL2EvYiIpLnJvb3RfbmFtZSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoZnM6OnBhdGgoImM6L2EvYiIpLnJvb3RfbmFtZSgpICE9ICJjOiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImM6YS9iIikucm9vdF9uYW1lKCkgIT0gImM6IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYzoiKS5yb290X25hbWUoKSAhPSAiYzoiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvL2hvc3QvYiIpLnJvb3RfbmFtZSgpICE9ICIvL2hvc3QiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvL2hvc3QiKS5yb290X25hbWUoKSAhPSAiLy9ob3N0IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgeworICAgIGlmICghZnM6OnBhdGgoImEvYiIpLnJvb3RfZGlyZWN0b3J5KCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYiIpLnJvb3RfZGlyZWN0b3J5KCkgIT0gIi8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKCFmczo6cGF0aCgiYzphL2IiKS5yb290X2RpcmVjdG9yeSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IiKS5yb290X2RpcmVjdG9yeSgpICE9ICIvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYzovYS9iIikucm9vdF9kaXJlY3RvcnkoKSAhPSAiLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi8vaG9zdC9iIikucm9vdF9kaXJlY3RvcnkoKSAhPSAiLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyAgICBpZiAoIWZzOjpwYXRoKCJhL2IiKS5yb290X3BhdGgoKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iIikucm9vdF9wYXRoKCkgIT0gIi8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKGZzOjpwYXRoKCJjOmEvYiIpLnJvb3RfcGF0aCgpICE9ICJjOiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IiKS5yb290X3BhdGgoKSAhPSAiLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImM6L2EvYiIpLnJvb3RfcGF0aCgpICE9ICJjOi8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvL2hvc3QvYiIpLnJvb3RfcGF0aCgpICE9ICIvL2hvc3QvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgeworICAgIGlmICghZnM6OnBhdGgoIi8iKS5yZWxhdGl2ZV9wYXRoKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYS9iIikucmVsYXRpdmVfcGF0aCgpICE9ICJhL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iIikucmVsYXRpdmVfcGF0aCgpICE9ICJhL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKGZzOjpwYXRoKCJjOmEvYiIpLnJlbGF0aXZlX3BhdGgoKSAhPSAiYS9iIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYiIpLnJlbGF0aXZlX3BhdGgoKSAhPSAiYS9iIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYzovYS9iIikucmVsYXRpdmVfcGF0aCgpICE9ICJhL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvL2hvc3QvYiIpLnJlbGF0aXZlX3BhdGgoKSAhPSAiYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IiKS5wYXJlbnRfcGF0aCgpICE9ICIvYSIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IvIikucGFyZW50X3BhdGgoKSAhPSAiL2EvYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IvLiIpLnBhcmVudF9wYXRoKCkgIT0gIi9hL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvIikucGFyZW50X3BhdGgoKSAhPSAiLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoZnM6OnBhdGgoImM6L2EvYiIpLnBhcmVudF9wYXRoKCkgIT0gImM6L2EiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJjOi8iKS5wYXJlbnRfcGF0aCgpICE9ICJjOi8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJjOiIpLnBhcmVudF9wYXRoKCkgIT0gImM6IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiLy9ob3N0LyIpLnBhcmVudF9wYXRoKCkgIT0gIi8vaG9zdC8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvL2hvc3QiKS5wYXJlbnRfcGF0aCgpICE9ICIvL2hvc3QiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorICB7CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iLnR4dCIpLmZpbGVuYW1lKCkgIT0gImIudHh0IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvLmIiKS5maWxlbmFtZSgpICE9ICIuYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9mb28vYmFyLyIpLmZpbGVuYW1lKCkgIT0gIiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9mb28vLiIpLmZpbGVuYW1lKCkgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvZm9vLy4uIikuZmlsZW5hbWUoKSAhPSAiLi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIuIikuZmlsZW5hbWUoKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi4uIikuZmlsZW5hbWUoKSAhPSAiLi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiLyIpLmZpbGVuYW1lKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIGlmIChmczo6cGF0aCgiYzphIikuZmlsZW5hbWUoKSAhPSAiYSIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImM6L2EiKS5maWxlbmFtZSgpICE9ICJhIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoImM6IikuZmlsZW5hbWUoKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiYzovIikuZmlsZW5hbWUoKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiLy9ob3N0IikuZmlsZW5hbWUoKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorICB7CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iLnR4dCIpLnN0ZW0oKSAhPSAiYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IuYy50eHQiKS5zdGVtKCkgIT0gImIuYyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hLy5iIikuc3RlbSgpICE9ICIuYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IiKS5zdGVtKCkgIT0gImIiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iLy4iKS5zdGVtKCkgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iLy4uIikuc3RlbSgpICE9ICIuLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iLyIpLnN0ZW0oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKCFmczo6cGF0aCgiYzovYS9iLyIpLnN0ZW0oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiYzovIikuc3RlbSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCJjOiIpLnN0ZW0oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiLy9ob3N0LyIpLnN0ZW0oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiLy9ob3N0Iikuc3RlbSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IudHh0IikuZXh0ZW5zaW9uKCkgIT0gIi50eHQiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iLiIpLmV4dGVuc2lvbigpICE9ICIuIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hL2IiKS5leHRlbnNpb24oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iLnR4dC9iLmNjIikuZXh0ZW5zaW9uKCkgIT0gIi5jYyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IudHh0L2IuIikuZXh0ZW5zaW9uKCkgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiL2EvYi50eHQvYiIpLmV4dGVuc2lvbigpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS8uIikuZXh0ZW5zaW9uKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hLy4uIikuZXh0ZW5zaW9uKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hLy5oaWRkZW4iKS5leHRlbnNpb24oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS8uLmIiKS5leHRlbnNpb24oKSAhPSAiLmIiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgdGVzdFF1ZXJpZXMoKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RRdWVyaWVzKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iIikuaGFzX3Jvb3RfbmFtZSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgZnM6OnBhdGggcCgiL2EvYiIpOworICAgIGlmICghcC5oYXNfcm9vdF9kaXJlY3RvcnkoKSB8fCAhcC5oYXNfcm9vdF9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iIikuaGFzX3Jvb3RfcGF0aCgpIHx8IGZzOjpwYXRoKCJhL2IiKS5oYXNfcm9vdF9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iIikuaGFzX3JlbGF0aXZlX3BhdGgoKSB8fAorICAgICAgICBmczo6cGF0aCgiLyIpLmhhc19yZWxhdGl2ZV9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iIikuaGFzX3BhcmVudF9wYXRoKCkgfHwKKyAgICAgICAgIWZzOjpwYXRoKCIvIikuaGFzX3BhcmVudF9wYXRoKCkgfHwgZnM6OnBhdGgoImEiKS5oYXNfcGFyZW50X3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hL2IiKS5oYXNfZmlsZW5hbWUoKSB8fCAhZnM6OnBhdGgoImEuYiIpLmhhc19maWxlbmFtZSgpIHx8CisgICAgICAgIGZzOjpwYXRoKCIvYS8iKS5oYXNfZmlsZW5hbWUoKSB8fCBmczo6cGF0aCgiLyIpLmhhc19maWxlbmFtZSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiL2EvYiIpLmhhc19zdGVtKCkgfHwgIWZzOjpwYXRoKCJhLmIiKS5oYXNfc3RlbSgpIHx8CisgICAgICAgICFmczo6cGF0aCgiLy5hIikuaGFzX3N0ZW0oKSB8fCBmczo6cGF0aCgiL2EvIikuaGFzX3N0ZW0oKSB8fAorICAgICAgICBmczo6cGF0aCgiLyIpLmhhc19zdGVtKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iLmMiKS5oYXNfZXh0ZW5zaW9uKCkgfHwKKyAgICAgICAgIWZzOjpwYXRoKCJhLmIiKS5oYXNfZXh0ZW5zaW9uKCkgfHwgZnM6OnBhdGgoIi8uYSIpLmhhc19leHRlbnNpb24oKSB8fAorICAgICAgICBmczo6cGF0aCgiL2EvIikuaGFzX2V4dGVuc2lvbigpIHx8IGZzOjpwYXRoKCIvIikuaGFzX2V4dGVuc2lvbigpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgcCA9ICJjOi9hL2IiOworICAgIGlmICghZnM6OnBhdGgoImM6L2EvYiIpLmhhc19yb290X25hbWUoKSB8fCAhcC5oYXNfcm9vdF9kaXJlY3RvcnkoKSB8fAorICAgICAgICAhcC5oYXNfcm9vdF9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gImM6YS9iIjsKKyAgICBpZiAoIXAuaGFzX3Jvb3RfbmFtZSgpIHx8IHAuaGFzX3Jvb3RfZGlyZWN0b3J5KCkgfHwgIXAuaGFzX3Jvb3RfcGF0aCgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9ICIvL2hvc3QvYiI7CisgICAgaWYgKCFwLmhhc19yb290X25hbWUoKSB8fCAhcC5oYXNfcm9vdF9kaXJlY3RvcnkoKSB8fCAhcC5oYXNfcm9vdF9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gIi8vaG9zdCI7CisgICAgaWYgKCFwLmhhc19yb290X25hbWUoKSB8fCBwLmhhc19yb290X2RpcmVjdG9yeSgpIHx8ICFwLmhhc19yb290X3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoImM6L2EvYiIpLmhhc19yZWxhdGl2ZV9wYXRoKCkgfHwKKyAgICAgICAgIWZzOjpwYXRoKCJjOmEvYiIpLmhhc19yZWxhdGl2ZV9wYXRoKCkgfHwKKyAgICAgICAgIWZzOjpwYXRoKCIvL2hvc3QvYiIpLmhhc19yZWxhdGl2ZV9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCJjOi9hL2IiKS5oYXNfcGFyZW50X3BhdGgoKSB8fAorICAgICAgICAhZnM6OnBhdGgoImM6LyIpLmhhc19wYXJlbnRfcGF0aCgpIHx8CisgICAgICAgICFmczo6cGF0aCgiYzoiKS5oYXNfcGFyZW50X3BhdGgoKSB8fAorICAgICAgICAhZnM6OnBhdGgoIi8vaG9zdC8iKS5oYXNfcGFyZW50X3BhdGgoKSB8fAorICAgICAgICAhZnM6OnBhdGgoIi8vaG9zdCIpLmhhc19wYXJlbnRfcGF0aCgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorICB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgZnM6OnBhdGggcCgiYzovYSIpOworI2Vsc2UKKyAgICBmczo6cGF0aCBwKCIvYSIpOworI2VuZGlmCisgICAgaWYgKCFwLmlzX2Fic29sdXRlKCkgfHwgcC5pc19yZWxhdGl2ZSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9ICJhL2IiOworICAgIGlmIChwLmlzX2Fic29sdXRlKCkgfHwgIXAuaXNfcmVsYXRpdmUoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHAgPSAiYzovYS9iIjsKKyAgICBpZiAoIXAuaXNfYWJzb2x1dGUoKSB8fCBwLmlzX3JlbGF0aXZlKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gIi8vaG9zdC9iIjsKKyAgICBpZiAoIXAuaXNfYWJzb2x1dGUoKSB8fCBwLmlzX3JlbGF0aXZlKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gIi9hIjsKKyAgICBpZiAocC5pc19hYnNvbHV0ZSgpIHx8ICFwLmlzX3JlbGF0aXZlKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gImM6YSI7CisgICAgaWYgKHAuaXNfYWJzb2x1dGUoKSB8fCAhcC5pc19yZWxhdGl2ZSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorCisgIGNoZWNrUmVzdWx0KHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCB0ZXN0SXRlcmF0b3JzKCkKK3sKKyAgc3RkOjpjb3V0IDw8ICJ0ZXN0SXRlcmF0b3JzKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgZnM6OnBhdGggcCgiL2EvYi8iKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBzdGQ6OnZlY3Rvcjxmczo6cGF0aDo6c3RyaW5nX3R5cGU+IHJlZnsgTCIvIiwgTCJhIiwgTCJiIiwgTCIiIH07CisjZWxzZQorICAgIHN0ZDo6dmVjdG9yPGZzOjpwYXRoOjpzdHJpbmdfdHlwZT4gcmVmeyAiLyIsICJhIiwgImIiLCAiIiB9OworI2VuZGlmCisgICAgc3RkOjp2ZWN0b3I8ZnM6OnBhdGg6OnN0cmluZ190eXBlPiByZXM7CisgICAgZm9yIChhdXRvIGkgPSBwLmJlZ2luKCksIGUgPSBwLmVuZCgpOyBpICE9IGU7ICsraSkgeworICAgICAgcmVzLnB1c2hfYmFjaygqaSk7CisgICAgfQorICAgIGlmIChyZXMgIT0gcmVmKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcmVzLmNsZWFyKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBlIDogcCkgeworICAgICAgcmVzLnB1c2hfYmFjayhlKTsKKyAgICB9CisgICAgaWYgKHJlcyAhPSByZWYpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorICB7CisgICAgZnM6OnBhdGggcCgiL2EvYi8iKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBzdGQ6OnZlY3Rvcjxmczo6cGF0aDo6c3RyaW5nX3R5cGU+IHJlZnsgTCIiLCBMImIiLCBMImEiLCBMIi8iIH07CisjZWxzZQorICAgIHN0ZDo6dmVjdG9yPGZzOjpwYXRoOjpzdHJpbmdfdHlwZT4gcmVmeyAiIiwgImIiLCAiYSIsICIvIiB9OworI2VuZGlmCisgICAgc3RkOjp2ZWN0b3I8ZnM6OnBhdGg6OnN0cmluZ190eXBlPiByZXM7CisgICAgYXV0byBpID0gcC5lbmQoKSwgYiA9IHAuYmVnaW4oKTsKKyAgICBkbyB7CisgICAgICByZXMucHVzaF9iYWNrKCotLWkpOworICAgIH0gd2hpbGUgKGkgIT0gYik7CisgICAgaWYgKHJlcyAhPSByZWYpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorCisgIGNoZWNrUmVzdWx0KHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCB0ZXN0Tm9uTWVtYmVyRnVuY3Rpb25zKCkKK3sKKyAgc3RkOjpjb3V0IDw8ICJ0ZXN0Tm9uTWVtYmVyRnVuY3Rpb25zKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgZnM6OnBhdGggcDEoIi9hL2IvIik7CisgICAgZnM6OnBhdGggcDIoIi9jL2QiKTsKKyAgICBmczo6c3dhcChwMSwgcDIpOworICAgIGlmIChwMS5zdHJpbmcoKSAhPSAiL2MvZCIgfHwgcDIuc3RyaW5nKCkgIT0gIi9hL2IvIikKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICB9CisgIHsKKyAgICBhdXRvIGgxID0gZnM6Omhhc2hfdmFsdWUoZnM6OnBhdGgoIi9hLy9iLy8iKSk7CisgICAgYXV0byBoMiA9IGZzOjpoYXNoX3ZhbHVlKGZzOjpwYXRoKCIvYS9iLyIpKTsKKyAgICBpZiAoaDEgIT0gaDIpCisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgfQorICB7CisgICAgZnM6OnBhdGggcDEoIi9hL2IvIik7CisgICAgZnM6OnBhdGggcDIoIi9jL2QiKTsKKyAgICBpZiAocDEgPT0gcDIpCisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICBwMSA9ICIvYS8vYi8vIjsKKyAgICBwMiA9ICIvYS9iLyI7CisgICAgaWYgKHAxICE9IHAyKQorICAgICAgcmVzdWx0ID0gZmFsc2U7CisgIH0KKyAgeworICAgIGZzOjpwYXRoIHAgPSAiL2EiOworICAgIHAgPSBwIC8gImIiIC8gImMiOworICAgIGlmIChwLmdlbmVyaWNfc3RyaW5nKCkgIT0gIi9hL2IvYyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBmczo6cGF0aDo6c3RyaW5nX3R5cGUgcmVmOworICAgIHJlZiArPSBmczo6cGF0aDo6dmFsdWVfdHlwZSgnLycpOworICAgIHJlZiArPSBmczo6cGF0aDo6dmFsdWVfdHlwZSgnYScpOworICAgIHJlZiArPSBmczo6cGF0aDo6cHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICByZWYgKz0gZnM6OnBhdGg6OnZhbHVlX3R5cGUoJ2InKTsKKyAgICByZWYgKz0gZnM6OnBhdGg6OnByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgcmVmICs9IGZzOjpwYXRoOjp2YWx1ZV90eXBlKCdjJyk7CisgICAgaWYgKHAubmF0aXZlKCkgIT0gcmVmKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIGZzOjpwYXRoIHAoIi9hIGJcXGMvIik7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKKyAgICBvc3MgPDwgcDsKKyAgICBpZiAob3NzLnN0cigpICE9ICJcIi9hIGJcXFxcYy9cIiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gaXNzKG9zcy5zdHIoKSk7CisgICAgZnM6OnBhdGggcDI7CisgICAgaXNzID4+IHAyOworICAgIGlmIChwMiAhPSBwKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9Cit9CisKK2ludCB0ZXN0Q01GaWxlc3lzdGVtUGF0aChpbnQgLyp1bnVzZWQqLywgY2hhciogLyp1bnVzZWQqLyBbXSkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgaWYgKCF0ZXN0Q29uc3RydWN0b3JzKCkpIHsKKyAgICByZXN1bHQgPSAxOworICB9CisgIGlmICghdGVzdENvbmNhdGVuYXRpb24oKSkgeworICAgIHJlc3VsdCA9IDE7CisgIH0KKyAgaWYgKCF0ZXN0TW9kaWZpZXJzKCkpIHsKKyAgICByZXN1bHQgPSAxOworICB9CisgIGlmICghdGVzdE9ic2VydmVycygpKSB7CisgICAgcmVzdWx0ID0gMTsKKyAgfQorICBpZiAoIXRlc3RDb21wYXJlKCkpIHsKKyAgICByZXN1bHQgPSAxOworICB9CisgIGlmICghdGVzdEdlbmVyYXRpb24oKSkgeworICAgIHJlc3VsdCA9IDE7CisgIH0KKyAgaWYgKCF0ZXN0RGVjb21wb3NpdGlvbigpKSB7CisgICAgcmVzdWx0ID0gMTsKKyAgfQorICBpZiAoIXRlc3RRdWVyaWVzKCkpIHsKKyAgICByZXN1bHQgPSAxOworICB9CisgIGlmICghdGVzdEl0ZXJhdG9ycygpKSB7CisgICAgcmVzdWx0ID0gMTsKKyAgfQorICBpZiAoIXRlc3ROb25NZW1iZXJGdW5jdGlvbnMoKSkgeworICAgIHJlc3VsdCA9IDE7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdENUZXN0QmluUGFja2VyLmN4eCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RDVGVzdEJpblBhY2tlci5jeHgKaW5kZXggNmYwOWFmMi4uYWJkYmVmYiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvdGVzdENUZXN0QmluUGFja2VyLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0Q1Rlc3RCaW5QYWNrZXIuY3h4CkBAIC0xLDQgKzEsNCBAQAotI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXIuY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXIuY3h4CmluZGV4IDkyNGQ4N2IuLmU3OWYwNDcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlci5jeHgKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0U3RyaW5nLmN4eCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RTdHJpbmcuY3h4CmluZGV4IDFmZDNmMzguLmFkODAwY2YgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RTdHJpbmcuY3h4CisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RTdHJpbmcuY3h4CkBAIC0xLDcgKzEsNyBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8aXRlcmF0b3I+CkBAIC0xMiw4ICsxMiw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgotCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtU3RyaW5nLmh4eCIKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVWUHJvY2Vzc0NoYWluLmN4eCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RVVlByb2Nlc3NDaGFpbi5jeHgKaW5kZXggNzFhMTc2NC4uNjFhNzdjZiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVWUHJvY2Vzc0NoYWluLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVZQcm9jZXNzQ2hhaW4uY3h4CkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKICNpbmNsdWRlICJjbUdldFBpcGVzLmgiCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVWUkFJSS5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVZSQUlJLmN4eAppbmRleCBjYjA1YWNlLi4wNjA3ZjQ0IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi90ZXN0VVZSQUlJLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVZSQUlJLmN4eApAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgogCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0VVZTdHJlYW1idWYuY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdFVWU3RyZWFtYnVmLmN4eAppbmRleCBjZDljOWQ0Li5iODZlZDc2IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi90ZXN0VVZTdHJlYW1idWYuY3h4CisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RVVlN0cmVhbWJ1Zi5jeHgKQEAgLTMsMTAgKzMsOSBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKLSNpbmNsdWRlICJjbV91di5oIgotCiAjaW5jbHVkZSAiY21HZXRQaXBlcy5oIgogI2luY2x1ZGUgImNtVVZIYW5kbGVQdHIuaCIKICNpbmNsdWRlICJjbVVWU3RyZWFtYnVmLmgiCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IGFmZjczODMuLjE5YWE0YzQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlTGlzdHMudHh0CkBAIC0yMDYsNiArMjA2LDI2IEBACiAgICAgICAgIHNldCgke3JlZ30gMCkKICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKKyAgICBpZihDT01NQU5EIGNtYWtlX2hvc3Rfc3lzdGVtX2luZm9ybWF0aW9uKQorICAgICAgc2V0KGluZm9fdnMxNSAiVlNfMTVfRElSIikKKyAgICAgIHNldChpbmZvX3ZzMTYgIlZTXzE2X0RJUiIpCisgICAgICBzZXQodnNfdmVyc2lvbnMpCisgICAgICBpZihXSU4zMikKKyAgICAgICAgaWYoTk9UIENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuMTQpCisgICAgICAgICAgc2V0KHZzX3ZlcnNpb25zIHZzMTUgdnMxNikKKyAgICAgICAgZWxzZWlmKE5PVCBDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjgpCisgICAgICAgICAgc2V0KHZzX3ZlcnNpb25zIHZzMTUpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICAgIGZvcmVhY2goaW5mbyAke3ZzX3ZlcnNpb25zfSkKKyAgICAgICAgY21ha2VfaG9zdF9zeXN0ZW1faW5mb3JtYXRpb24oUkVTVUxUIGZvdW5kIFFVRVJZICIke2luZm9fJHtpbmZvfX0iKQorICAgICAgICBpZihmb3VuZCkKKyAgICAgICAgICBzZXQoJHtpbmZvfSAxKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoJHtpbmZvfSAwKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRmb3JlYWNoKCkKKyAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAogICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNDksNyArMzY5LDYgQEAKICAgIyBhZGQgYSBidW5jaCBvZiBzdGFuZGFyZCBidWlsZC1hbmQtdGVzdCBzdHlsZSB0ZXN0cwogICBBRERfVEVTVF9NQUNSTyhDb21tYW5kTGluZVRlc3QgQ29tbWFuZExpbmVUZXN0KQogICBBRERfVEVTVF9NQUNSTyhGaW5kUGFja2FnZVRlc3QgRmluZFBhY2thZ2VUZXN0KQotICBBRERfVEVTVF9NQUNSTyhGaW5kTW9kdWxlc0V4ZWN1dGVBbGwgRmluZE1vZHVsZXNFeGVjdXRlQWxsKQogICBBRERfVEVTVF9NQUNSTyhTdHJpbmdGaWxlVGVzdCBTdHJpbmdGaWxlVGVzdCkKICAgQUREX1RFU1RfTUFDUk8oVHJ5Q29tcGlsZSBUcnlDb21waWxlKQogICBBRERfVEVTVF9NQUNSTyhTeXN0ZW1JbmZvcm1hdGlvbiBTeXN0ZW1JbmZvcm1hdGlvbikKQEAgLTM2Myw3ICszODIsMTAgQEAKICAgICAgIGFkZF90ZXN0X21hY3JvKFZTUmVzb3VyY2VOaW5qYUZvcmNlUlNQIFZTUmVzb3VyY2VOaW5qYUZvcmNlUlNQKQogICAgIGVuZGlmICgpCiAgIGVuZGlmKCkKLSAgQUREX1RFU1RfTUFDUk8oTVNNYW5pZmVzdCBNU01hbmlmZXN0KQorICBpZihfaXNNdWx0aUNvbmZpZykKKyAgICBzZXQoTVNNYW5pZmVzdF9DVEVTVF9PUFRJT05TIC1DICQ8Q09ORklHVVJBVElPTj4pCisgIGVuZGlmKCkKKyAgQUREX1RFU1RfTUFDUk8oTVNNYW5pZmVzdCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4pCiAgIEFERF9URVNUX01BQ1JPKFNpbXBsZSBTaW1wbGUpCiAgIEFERF9URVNUX01BQ1JPKFByZU9yZGVyIFByZU9yZGVyKQogICBBRERfVEVTVF9NQUNSTyhNaXNzaW5nU291cmNlRmlsZSBNaXNzaW5nU291cmNlRmlsZSkKQEAgLTQ0Nyw2ICs0NjksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURDTWFrZV9URVNUX0NVREE6Qk9PTD0ke0NNYWtlX1RFU1RfQ1VEQX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgQUREX1RFU1RfTUFDUk8oRXhwb3J0SW1wb3J0IEV4cG9ydEltcG9ydCkKKyAgc2V0X3Byb3BlcnR5KFRFU1QgRXhwb3J0SW1wb3J0IEFQUEVORAorICAgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCiAgIEFERF9URVNUX01BQ1JPKFVuc2V0IFVuc2V0KQogICBBRERfVEVTVF9NQUNSTyhQb2xpY3lTY29wZSBQb2xpY3lTY29wZSkKICAgQUREX1RFU1RfTUFDUk8oRW1wdHlMaWJyYXJ5IEVtcHR5TGlicmFyeSkKQEAgLTY5MywzOCArNzE3LDI4IEBACiAgICMgYnVpbGQgdGhlICJTaW1wbGUiIHRlc3Qgd2l0aCB0aGUgRXh0cmFHZW5lcmF0b3JzLCBpZiBhdmFpbGFibGUKICAgIyBUaGlzIGRvZXNuJ3QgdGVzdCB3aGV0aGVyIHRoZSBnZW5lcmF0ZWQgcHJvamVjdCBmaWxlcyB3b3JrICh1bmZvcnR1bmF0ZWx5KSwKICAgIyBtYWlubHkgaXQgdGVzdHMgdGhhdCBjbWFrZSBkb2Vzbid0IGNyYXNoIHdoZW4gZ2VuZXJhdGluZyB0aGVzZSBwcm9qZWN0IGZpbGVzLgotICBpZigke0NNQUtFX0dFTkVSQVRPUn0gTUFUQ0hFUyAiVW5peCBNYWtlZmlsZXMiIE9SICR7Q01BS0VfR0VORVJBVE9SfSBNQVRDSEVTICJOaW5qYSIpCi0KLSAgICAjIGNoZWNrIHdoaWNoIGdlbmVyYXRvcnMgd2UgaGF2ZQotICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ01BS0VfQ09NTUFORH0gLS1oZWxwCi0gICAgICBPVVRQVVRfVkFSSUFCTEUgY21ha2VPdXRwdXQgRVJST1JfVkFSSUFCTEUgY21ha2VPdXRwdXQpCi0KLSAgICBzZXQoZXh0cmFHZW5lcmF0b3JzCi0gICAgICAiQ29kZUJsb2NrcyIKLSAgICAgICJDb2RlTGl0ZSIKLSAgICAgICJFY2xpcHNlIENEVDQiCi0gICAgICAiS2F0ZSIKLSAgICAgICJTdWJsaW1lIFRleHQgMiIpCi0KLSAgICBmb3JlYWNoKGV4dHJhR2VuZXJhdG9yICR7ZXh0cmFHZW5lcmF0b3JzfSkKLSAgICAgIGlmICgiJHtjbWFrZU91dHB1dH0iIE1BVENIRVMgIiR7ZXh0cmFHZW5lcmF0b3J9IC0gJHtDTUFLRV9HRU5FUkFUT1J9IikKLSAgICAgICAgc2V0KGV4dHJhR2VuZXJhdG9yVGVzdE5hbWUgIlNpbXBsZV8ke2V4dHJhR2VuZXJhdG9yfUdlbmVyYXRvciIpCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICIgIiAiIiBleHRyYUdlbmVyYXRvclRlc3ROYW1lICR7ZXh0cmFHZW5lcmF0b3JUZXN0TmFtZX0pCi0KLSAgICAgICAgYWRkX3Rlc3QoJHtleHRyYUdlbmVyYXRvclRlc3ROYW1lfSAke0NNQUtFX0NURVNUX0NPTU1BTkR9Ci0gICAgICAgICAgLS1idWlsZC1hbmQtdGVzdAotICAgICAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL1NpbXBsZSIKLSAgICAgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke2V4dHJhR2VuZXJhdG9yVGVzdE5hbWV9IgotICAgICAgICAgIC0tYnVpbGQtdHdvLWNvbmZpZwotICAgICAgICAgIC0tYnVpbGQtZ2VuZXJhdG9yICIke2V4dHJhR2VuZXJhdG9yfSAtICR7Q01BS0VfR0VORVJBVE9SfSIKLSAgICAgICAgICAtLWJ1aWxkLWdlbmVyYXRvci1wbGF0Zm9ybSAiJHtDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk19IgotICAgICAgICAgIC0tYnVpbGQtZ2VuZXJhdG9yLXRvb2xzZXQgIiR7Q01BS0VfR0VORVJBVE9SX1RPT0xTRVR9IgotICAgICAgICAgIC0tYnVpbGQtcHJvamVjdCBTaW1wbGUKLSAgICAgICAgICAtLXRlc3QtY29tbWFuZCBTaW1wbGUpCi0gICAgICAgIGxpc3QoQVBQRU5EIFRFU1RfQlVJTERfRElSUyAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke2V4dHJhR2VuZXJhdG9yVGVzdE5hbWV9IikKLSAgICAgIGVuZGlmICgpCi0gICAgZW5kZm9yZWFjaChleHRyYUdlbmVyYXRvcikKLQorICBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiXihVbml4IE1ha2VmaWxlc3xOaW5qYSkkIgorICAgICAgQU5EIE5PVCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IiBTVFJFUVVBTCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IikKKyAgICBmb3JlYWNoKGV4dHJhR2VuZXJhdG9yCisgICAgICAgICJDb2RlQmxvY2tzIgorICAgICAgICAiQ29kZUxpdGUiCisgICAgICAgICJFY2xpcHNlIENEVDQiCisgICAgICAgICJLYXRlIgorICAgICAgICAiU3VibGltZSBUZXh0IDIiCisgICAgICAgICkKKyAgICAgIHN0cmluZyhSRVBMQUNFICIgIiAiIiBleHRyYUdlbmVyYXRvclRlc3ROYW1lICJTaW1wbGVfJHtleHRyYUdlbmVyYXRvcn1HZW5lcmF0b3IiKQorICAgICAgYWRkX3Rlc3QoJHtleHRyYUdlbmVyYXRvclRlc3ROYW1lfSAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgICAgICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvU2ltcGxlIgorICAgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke2V4dHJhR2VuZXJhdG9yVGVzdE5hbWV9IgorICAgICAgICAtLWJ1aWxkLXR3by1jb25maWcKKyAgICAgICAgLS1idWlsZC1nZW5lcmF0b3IgIiR7ZXh0cmFHZW5lcmF0b3J9IC0gJHtDTUFLRV9HRU5FUkFUT1J9IgorICAgICAgICAtLWJ1aWxkLWdlbmVyYXRvci1wbGF0Zm9ybSAiJHtDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk19IgorICAgICAgICAtLWJ1aWxkLWdlbmVyYXRvci10b29sc2V0ICIke0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUfSIKKyAgICAgICAgLS1idWlsZC1wcm9qZWN0IFNpbXBsZQorICAgICAgICAtLXRlc3QtY29tbWFuZCBTaW1wbGUpCisgICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvJHtleHRyYUdlbmVyYXRvclRlc3ROYW1lfSIpCisgICAgZW5kZm9yZWFjaCgpCiAgIGVuZGlmKCkKIAogICAjIHRlc3QgZm9yIGNvcnJlY3Qgc3ViLXByb2plY3QgZ2VuZXJhdGlvbgpAQCAtNzg3LDEzICs4MDEsOCBAQAogICAgIGVuZGlmKCkKICAgZW5kbWFjcm8oKQogICBpZihDTWFrZV9CVUlMRF9OSUdIVExZX1JFTEVBU0VTKQotICAgIEFERF9OSUdIVExZX0JVSUxEX1RFU1QoQ01ha2VOaWdodGx5V2luMzIKLSAgICAgIHdpbjMyX3JlbGVhc2UuY21ha2UpCi0gICAgQUREX05JR0hUTFlfQlVJTERfVEVTVChDTWFrZU5pZ2h0bHlXaW42NAotICAgICAgd2luNjRfcmVsZWFzZS5jbWFrZSkKICAgICBBRERfTklHSFRMWV9CVUlMRF9URVNUKENNYWtlTmlnaHRseU9TWAogICAgICAgb3N4X3JlbGVhc2UuY21ha2UpCi0gICAgc2V0X3Byb3BlcnR5KFRFU1QgQ01ha2VOaWdodGx5V2luNjQgUFJPUEVSVFkgREVQRU5EUyBDTWFrZU5pZ2h0bHlXaW4zMikKICAgZW5kaWYoKQogCiAgICMgYWRkIHRlc3RzIHdpdGggbW9yZSBjb21wbGV4IGludm9jYXRpb25zCkBAIC05ODAsNiArOTg5LDcgQEAKICAgICAgICAgLS1idWlsZC1vcHRpb25zCiAgICAgICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ01BS0VfQ09NTUFORH0KICAgICAgICAgICAiLURDUGFja1dpWEdlbmVyYXRvcl9CSU5BUllfRElSOlBBVEg9JHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9DUGFja1dpWEdlbmVyYXRvciIKKyAgICAgICAgICAiLURub192ZXJpZnk6Qk9PTD0ke0NNYWtlX1RFU1RfV0lYX05PX1ZFUklGWX0iCiAgICAgICAgICAgIi1EY29uZmlnPVwke0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRX0iCiAgICAgICAgICAgLVAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UiKQogCkBAIC0xNDExLDYgKzE0MjEsNyBAQAogICBmb3JlYWNoKF9tb2QgSU4gSVRFTVMKICAgICAgICAgICAgIEFMU0EKICAgICAgICAgICAgIEJvb3N0CisgICAgICAgICAgICBCTEFTCiAgICAgICAgICAgICBCWmlwMgogICAgICAgICAgICAgQ1VSTAogICAgICAgICAgICAgQ3VwcwpAQCAtMTQzMCwxMiArMTQ0MSwxNCBAQAogICAgICAgICAgICAgSUNVCiAgICAgICAgICAgICBKUEVHCiAgICAgICAgICAgICBKc29uQ3BwCisgICAgICAgICAgICBMQVBBQ0sKICAgICAgICAgICAgIExpYkFyY2hpdmUKICAgICAgICAgICAgIExpYkxaTUEKICAgICAgICAgICAgIExpYlJIYXNoCiAgICAgICAgICAgICBMaWJpbnB1dAogICAgICAgICAgICAgTGliVVYKICAgICAgICAgICAgIExpYlhtbDIKKyAgICAgICAgICAgIExpYlhzbHQKICAgICAgICAgICAgIExUVG5nVVNUCiAgICAgICAgICAgICBPREJDCiAgICAgICAgICAgICBPcGVuQUNDCkBAIC0xNDQ4LDYgKzE0NjEsNyBAQAogICAgICAgICAgICAgUGF0Y2gKICAgICAgICAgICAgIFBvc3RncmVTUUwKICAgICAgICAgICAgIFByb3RvYnVmCisgICAgICAgICAgICBTREwKICAgICAgICAgICAgIFNRTGl0ZTMKICAgICAgICAgICAgIFRJRkYKICAgICAgICAgICAgIFZ1bGthbgpAQCAtMTQ3MSw3ICsxNDg1LDcgQEAKICAgZW5kaWYoKQogCiAgIGlmKENNYWtlX1RFU1RfRmluZFB5dGhvbiBPUiBDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHkKLSAgICAgIE9SIENNYWtlX1RFU1RfRmluZFB5dGhvbl9Db25kYSBPUiBDTWFrZV9URVNUX0ZpbmRQeXRob25fSXJvblB5dGhvbikKKyAgICAgIE9SIENNYWtlX1RFU1RfRmluZFB5dGhvbl9Db25kYSBPUiBDTWFrZV9URVNUX0ZpbmRQeXRob25fSXJvblB5dGhvbiBPUiBDTWFrZV9URVNUX0ZpbmRQeXRob25fUHlQeSkKICAgICBhZGRfc3ViZGlyZWN0b3J5KEZpbmRQeXRob24pCiAgIGVuZGlmKCkKIApAQCAtMTQ3OSw2ICsxNDkzLDEwIEBACiAgICAgYWRkX3N1YmRpcmVjdG9yeShVc2VTV0lHKQogICBlbmRpZigpCiAKKyAgaWYoQ01ha2VfVEVTVF9GaW5kUnVieSkKKyAgICBhZGRfc3ViZGlyZWN0b3J5KEZpbmRSdWJ5KQorICBlbmRpZigpCisKICAgYWRkX3N1YmRpcmVjdG9yeShGaW5kVGhyZWFkcykKIAogICAjIE1hdGxhYiBtb2R1bGUKQEAgLTE2MDYsNyArMTYyNCw3IEBACiAgICAgREVQRU5EUyBFeHRlcm5hbFByb2plY3RVcGRhdGVTZXR1cCApCiAKICAgIyBkbyBlYWNoIG9mIHRoZSB0dXRvcmlhbCBzdGVwcwotICBmdW5jdGlvbihhZGRfdHV0b3JpYWxfdGVzdCBzdGVwX25hbWUgdXNlX215bWF0aCkKKyAgZnVuY3Rpb24oYWRkX3R1dG9yaWFsX3Rlc3Qgc3RlcF9uYW1lIHVzZV9teW1hdGggdHV0b3JpYWxfYXJnIHBhc3NfcmVnZXgpCiAgICAgc2V0KHR1dG9yaWFsX3Rlc3RfbmFtZSBUdXRvcmlhbCR7c3RlcF9uYW1lfSkKICAgICBzZXQodHV0b3JpYWxfYnVpbGRfZGlyICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1R1dG9yaWFsLyR7c3RlcF9uYW1lfSIpCiAgICAgaWYgKHVzZV9teW1hdGgpCkBAIC0xNjI0LDE5ICsxNjQyLDI4IEBACiAgICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQogICAgICAgLS1idWlsZC1wcm9qZWN0IFR1dG9yaWFsCiAgICAgICAtLWJ1aWxkLW9wdGlvbnMgJHt0dXRvcmlhbF9idWlsZF9vcHRpb25zfQotICAgICAgLS10ZXN0LWNvbW1hbmQgVHV0b3JpYWwgMjUuMCkKKyAgICAgIC0tdGVzdC1jb21tYW5kIFR1dG9yaWFsICR7dHV0b3JpYWxfYXJnfSkKKyAgICBzZXRfdGVzdHNfcHJvcGVydGllcygke3R1dG9yaWFsX3Rlc3RfbmFtZX0gUFJPUEVSVElFUworICAgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gJHtwYXNzX3JlZ2V4fSkKKwogICAgIGxpc3QoQVBQRU5EIFRFU1RfQlVJTERfRElSUyAiJHtDTWFrZV9CSU5BUllfRElSfS8ke3R1dG9yaWFsX2J1aWxkX2Rpcn1fQnVpbGQiKQogICBlbmRmdW5jdGlvbigpCiAKICAgaWYoTk9UIENNYWtlX1RFU1RfRVhURVJOQUxfQ01BS0UpCiAgICAgZm9yZWFjaChTVFAgUkFOR0UgMiAxMikKLSAgICAgIGFkZF90dXRvcmlhbF90ZXN0KFN0ZXAke1NUUH0gVFJVRSkKKyAgICAgIGlmIChTVFAgRVFVQUwgNikKKyAgICAgICAgc2V0KHBhc3NfcmVnZXggIi4qdXNpbmcgbG9nIGFuZCBleHAiKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldChwYXNzX3JlZ2V4ICJUaGUgc3F1YXJlIHJvb3Qgb2YgMjUgaXMgNSIpCisgICAgICBlbmRpZigpCisgICAgICBhZGRfdHV0b3JpYWxfdGVzdChTdGVwJHtTVFB9IFRSVUUgMjUgJHtwYXNzX3JlZ2V4fSkKICAgICBlbmRmb3JlYWNoKCkKLSAgICBhZGRfdHV0b3JpYWxfdGVzdChDb21wbGV0ZSBUUlVFKQorICAgIHNldChwYXNzX3JlZ2V4ICJUaGUgc3F1YXJlIHJvb3Qgb2YgMjUgaXMgNSIpCisgICAgYWRkX3R1dG9yaWFsX3Rlc3QoQ29tcGxldGUgVFJVRSAyNSAke3Bhc3NfcmVnZXh9KQogICAgIGZvcmVhY2goU1RQIFJBTkdFIDMgMTIpCi0gICAgICBhZGRfdHV0b3JpYWxfdGVzdChTdGVwJHtTVFB9IEZBTFNFKQorICAgICAgYWRkX3R1dG9yaWFsX3Rlc3QoU3RlcCR7U1RQfSBGQUxTRSAyNSAke3Bhc3NfcmVnZXh9KQogICAgIGVuZGZvcmVhY2goKQotICAgIGFkZF90dXRvcmlhbF90ZXN0KENvbXBsZXRlIEZBTFNFKQorICAgIGFkZF90dXRvcmlhbF90ZXN0KENvbXBsZXRlIEZBTFNFIDI1ICR7cGFzc19yZWdleH0pCiAgIGVuZGlmKCkKIAogICBhZGRfdGVzdCh0ZXN0aW5nICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgXCR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfQpAQCAtMTg4MSw2ICsxOTA4LDggQEAKICAgICBlbmRpZigpCiAgICAgc2V0KE1TVkNSdW50aW1lTGlicmFyeV9CVUlMRF9PUFRJT05TIC1EQ01ha2VfVEVTVF9DVURBPSR7Q01ha2VfVEVTVF9DVURBfSkKICAgICBBRERfVEVTVF9NQUNSTyhNU1ZDUnVudGltZUxpYnJhcnkpCisgICAgc2V0X3Byb3BlcnR5KFRFU1QgTVNWQ1J1bnRpbWVMaWJyYXJ5IEFQUEVORAorICAgICAgUFJPUEVSVFkgTEFCRUxTICJDVURBIikKICAgICBpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSKQogICAgICAgQUREX1RFU1RfTUFDUk8oTVNWQ1J1bnRpbWVMaWJyYXJ5LkZvcnRyYW4pCiAgICAgZW5kaWYoKQpAQCAtMjI5NywzMiArMjMyNiw0MSBAQAogICAgIGVuZGZvcmVhY2goKQogICBlbmRpZigpCiAKKyAgbWFjcm8oYWRkX3Rlc3RfVlNBbmRyb2lkIG5hbWUgZ2VuZXJhdG9yIHBsYXRmb3JtKQorICAgIGFkZF90ZXN0KE5BTUUgIlZTQW5kcm9pZC4ke25hbWV9LiR7cGxhdGZvcm19IiBDT01NQU5EICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL1ZTQW5kcm9pZCIKKyAgICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1ZTQW5kcm9pZC8ke25hbWV9LyR7cGxhdGZvcm19IgorICAgICAgLS1idWlsZC1nZW5lcmF0b3IgIiR7Z2VuZXJhdG9yfSIKKyAgICAgIC0tYnVpbGQtcHJvamVjdCBWU0FuZHJvaWQKKyAgICAgIC0tYnVpbGQtY29uZmlnICQ8Q09ORklHVVJBVElPTj4KKyAgICAgIC0tYnVpbGQtb3B0aW9ucyAtRENNQUtFX1NZU1RFTV9OQU1FPUFuZHJvaWQgIi1BJHtwbGF0Zm9ybX0iCisgICAgICApCisgICAgbGlzdChBUFBFTkQgVEVTVF9CVUlMRF9ESVJTICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1ZTQW5kcm9pZC8ke25hbWV9IikKKyAgZW5kbWFjcm8oKQogICBpZih0ZWdyYSBBTkQgTk9UICIke0NNYWtlX1NPVVJDRV9ESVJ9OyR7Q01ha2VfQklOQVJZX0RJUn0iIE1BVENIRVMgIiAiKQotICAgIG1hY3JvKGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEgbmFtZSBnZW5lcmF0b3IpCi0gICAgICBhZGRfdGVzdChOQU1FIFZTTnNpZ2h0VGVncmEuJHtuYW1lfSBDT01NQU5EICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KLSAgICAgICAgLS1idWlsZC1hbmQtdGVzdAotICAgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9WU05zaWdodFRlZ3JhIgotICAgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9WU05zaWdodFRlZ3JhLyR7bmFtZX0iCi0gICAgICAgIC0tYnVpbGQtZ2VuZXJhdG9yICIke2dlbmVyYXRvcn0iCi0gICAgICAgIC0tYnVpbGQtcHJvamVjdCBWU05zaWdodFRlZ3JhCi0gICAgICAgIC0tYnVpbGQtY29uZmlnICQ8Q09ORklHVVJBVElPTj4KLSAgICAgICAgLS1idWlsZC1vcHRpb25zIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgICAgICApCi0gICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvVlNOc2lnaHRUZWdyYS8ke25hbWV9IikKLSAgICBlbmRtYWNybygpCiAgICAgaWYodnMxMCkKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxMCAiVmlzdWFsIFN0dWRpbyAxMCAyMDEwIikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czEwICJWaXN1YWwgU3R1ZGlvIDEwIDIwMTAiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgICAgaWYodnMxMSkKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxMSAiVmlzdWFsIFN0dWRpbyAxMSAyMDEyIikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czExICJWaXN1YWwgU3R1ZGlvIDExIDIwMTIiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgICAgaWYodnMxMikKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxMiAiVmlzdWFsIFN0dWRpbyAxMiAyMDEzIikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czEyICJWaXN1YWwgU3R1ZGlvIDEyIDIwMTMiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgICAgaWYodnMxNCkKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxNCAiVmlzdWFsIFN0dWRpbyAxNCAyMDE1IikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czE0ICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKKyAgaWYodnMxNCBBTkQgQ01ha2VfVEVTVF9BTkRST0lEX1ZTMTQpCisgICAgYWRkX3Rlc3RfVlNBbmRyb2lkKHZzMTQgIlZpc3VhbCBTdHVkaW8gMTQgMjAxNSIgIkFSTSIpCisgIGVuZGlmKCkKKyAgaWYodnMxNSBBTkQgQ01ha2VfVEVTVF9BTkRST0lEX1ZTMTUpCisgICAgYWRkX3Rlc3RfVlNBbmRyb2lkKHZzMTUgIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyIgIkFSTSIpCisgIGVuZGlmKCkKKyAgaWYodnMxNiBBTkQgQ01ha2VfVEVTVF9BTkRST0lEX1ZTMTYpCisgICAgYWRkX3Rlc3RfVlNBbmRyb2lkKHZzMTYgIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSIgIkFSTSIpCisgIGVuZGlmKCkKIAogICBpZiAoQVBQTEUpCiAgICAgaWYgKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWCBPUiAiJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9IiBNQVRDSEVTICJDbGFuZyIpCkBAIC0yMzc5LDM2ICsyNDE3LDYgQEAKICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvQnVuZGxlR2VuZXJhdG9yVGVzdCIpCiAgIGVuZGlmKCkKIAotICBhZGRfdGVzdChXYXJuVW51c2VkVW51c2VkVmlhU2V0ICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KLSAgICAtLWJ1aWxkLWFuZC10ZXN0Ci0gICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFTZXQiCi0gICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvV2FyblVudXNlZFVudXNlZFZpYVNldCIKLSAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQotICAgIC0tYnVpbGQtbm9jbGVhbgotICAgIC0tYnVpbGQtcHJvamVjdCBXYXJuVW51c2VkVW51c2VkVmlhU2V0Ci0gICAgLS1idWlsZC1vcHRpb25zCi0gICAgICAiLS13YXJuLXVudXNlZC12YXJzIikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVNldCBQUk9QRVJUSUVTCi0gICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gInVudXNlZCB2YXJpYWJsZSBcXChjaGFuZ2luZyBkZWZpbml0aW9uXFwpICdVTlVTRURfVkFSSUFCTEUnIikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVNldCBQUk9QRVJUSUVTCi0gICAgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gInVudXNlZCB2YXJpYWJsZSBcXCh1bnNldHRpbmdcXCkgJ1VOVVNFRF9WQVJJQUJMRSciKQotICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvV2FyblVudXNlZFVudXNlZFZpYVNldCIpCi0KLSAgYWRkX3Rlc3QoV2FyblVudXNlZFVudXNlZFZpYVVuc2V0ICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KLSAgICAtLWJ1aWxkLWFuZC10ZXN0Ci0gICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFVbnNldCIKLSAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9XYXJuVW51c2VkVW51c2VkVmlhVW5zZXQiCi0gICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KLSAgICAtLWJ1aWxkLW5vY2xlYW4KLSAgICAtLWJ1aWxkLXByb2plY3QgV2FyblVudXNlZFVudXNlZFZpYVVuc2V0Ci0gICAgLS1idWlsZC1vcHRpb25zCi0gICAgICAiLS13YXJuLXVudXNlZC12YXJzIikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVVuc2V0IFBST1BFUlRJRVMKLSAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiQ01ha2UgV2FybmluZyBcXChkZXZcXCkgYXQgQ01ha2VMaXN0cy50eHQ6NyBcXChzZXRcXCk6IikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVVuc2V0IFBST1BFUlRJRVMKLSAgICBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAiQ01ha2VMaXN0cy50eHQ6NSBcXChzZXRcXCk6IikKLSAgbGlzdChBUFBFTkQgVEVTVF9CVUlMRF9ESVJTICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1dhcm5VbnVzZWRVbnVzZWRWaWFVbnNldCIpCi0KICAgYWRkX3Rlc3QoV2FyblVudXNlZENsaVVudXNlZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9CiAgICAgLS1idWlsZC1hbmQtdGVzdAogICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL1dhcm5VbnVzZWRDbGlVbnVzZWQiCkBAIC0yNjc2LDkgKzI2ODQsNiBAQAogICAgIC1TICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi90ZXN0LmNtYWtlIiAtVlYKICAgICAtLW91dHB1dC1sb2cgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL3Rlc3RPdXQubG9nIgogICAgICkKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WIFBST1BFUlRJRVMKLSAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTgotICAgICJQQVNTRUQgd2l0aCBjb3JyZWN0IG91dHB1dC4qVGVzdGluZy9Db3ZlcmFnZUluZm8vbWFpbi5jcHAuZ2NvdiIpCiAgIHNldF9wcm9wZXJ0eShURVNUIENUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPViBQUk9QRVJUWSBFTlZJUk9OTUVOVCBDVEVTVF9QQVJBTExFTF9MRVZFTD0pCiAKICAgY29uZmlndXJlX2ZpbGUoCkBAIC0zNDY1LDYgKzM0NzAsOCBAQAogICAgIC0tYnVpbGQtdHdvLWNvbmZpZwogICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CiAgICAgLS1idWlsZC1wcm9qZWN0IEluY2x1ZGVEaXJlY3RvcmllcworICAgIC0tYnVpbGQtb3B0aW9ucworICAgICAgLURNQUtFX1NVUFBPUlRTX1NQQUNFUz0ke01BS0VfU1VQUE9SVFNfU1BBQ0VTfQogICAgIC0tdGVzdC1jb21tYW5kIEluY2x1ZGVEaXJlY3RvcmllcykKICAgbGlzdChBUFBFTkQgVEVTVF9CVUlMRF9ESVJTICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0luY2x1ZGVEaXJlY3RvcmllcyIpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlT25seS9BbGxGaW5kTW9kdWxlcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlT25seS9BbGxGaW5kTW9kdWxlcy9DTWFrZUxpc3RzLnR4dAppbmRleCBhNTNlNDQxLi40OWE0MDQxIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZU9ubHkvQWxsRmluZE1vZHVsZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VPbmx5L0FsbEZpbmRNb2R1bGVzL0NNYWtlTGlzdHMudHh0CkBAIC04Niw3ICs4Niw3IEBACiBlbmRmb3JlYWNoKCkKIAogZm9yZWFjaChWVEVTVCBCSVNPTiBCb29zdCBDVURBIERPWFlHRU4gRkxFWCBHSUYgR1RLMgotICAgICAgICBIREY1IEpQRUcgTGliQXJjaGl2ZSBPUEVOU0NFTkVHUkFQSCBSVUJZIFNXSUcgUHJvdG9idWYpCisgICAgICAgIEhERjUgSlBFRyBMaWJBcmNoaXZlIE9QRU5TQ0VORUdSQVBIIFJ1YnkgUlVCWSBTV0lHIFByb3RvYnVmKQogICAgIGNoZWNrX3ZlcnNpb25fc3RyaW5nKCR7VlRFU1R9ICR7VlRFU1R9X1ZFUlNJT04pCiBlbmRmb3JlYWNoKCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VUZXN0cy9MaXN0VGVzdC5jbWFrZS5pbiBiL1Rlc3RzL0NNYWtlVGVzdHMvTGlzdFRlc3QuY21ha2UuaW4KaW5kZXggZjUxN2U2NC4uNzg1ZjQxZCAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VUZXN0cy9MaXN0VGVzdC5jbWFrZS5pbgorKysgYi9UZXN0cy9DTWFrZVRlc3RzL0xpc3RUZXN0LmNtYWtlLmluCkBAIC04NSw2ICs4NSw5IEBACiBsaXN0KFNPUlQgcmVzdWx0KQogVEVTVCgiU09SVCByZXN1bHQiICJhbmR5O2JpbGw7YnJhZDtrZW4iKQogCitsaXN0KFNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCkKK1RFU1QoIlNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCIgImFuZHk7YmlsbDticmFkO2tlbiIpCisKIHNldChyZXN1bHQgYW5keSBiaWxsIGJyYWQga2VuKQogbGlzdChSRVZFUlNFIHJlc3VsdCkKIFRFU1QoIlJFVkVSU0UgcmVzdWx0IiAia2VuO2JyYWQ7YmlsbDthbmR5IikKQEAgLTEwNCw2ICsxMDcsMjYgQEAKIGxpc3QoU09SVCByZXN1bHQpCiBURVNUKCJTT1JUIGVtcHR5IHJlc3VsdCIgIiIpCiAKK2xpc3QoU09SVCByZXN1bHQgQ09NUEFSRSBOQVRVUkFMKQorVEVTVCgiU09SVCByZXN1bHQgQ09NUEFSRSBOQVRVUkFMIiAiIikKKworc2V0KHJlc3VsdCAxLjEgMTAuMCAxMS4wIDEyLjAgMTIuMSAyLjAgMi4xIDMuMCAzLjEgMy4yIDguMCA5LjApCisKK2xpc3QoU09SVCByZXN1bHQgQ09NUEFSRSBOQVRVUkFMKQorVEVTVCgiU09SVCByZXN1bHQgQ09NUEFSRSBOQVRVUkFMIiAiMS4xOzIuMDsyLjE7My4wOzMuMTszLjI7OC4wOzkuMDsxMC4wOzExLjA7MTIuMDsxMi4xIikKKworbGlzdChTT1JUIHJlc3VsdCkKK1RFU1QoIlNPUlQgcmVzdWx0IiAiMS4xOzEwLjA7MTEuMDsxMi4wOzEyLjE7Mi4wOzIuMTszLjA7My4xOzMuMjs4LjA7OS4wIikKKworbGlzdChTT1JUIHJlc3VsdCBDT01QQVJFIE5BVFVSQUwgT1JERVIgREVTQ0VORElORykKK1RFU1QoIlNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCBPUkRFUiBERVNDRU5ESU5HIiAiMTIuMTsxMi4wOzExLjA7MTAuMDs5LjA7OC4wOzMuMjszLjE7My4wOzIuMTsyLjA7MS4xIikKKworc2V0KHJlc3VsdCBiLTEuMSBhLTEwLjAgYy0yLjAgZCAxIDAwIDApCisKK2xpc3QoU09SVCByZXN1bHQgQ09NUEFSRSBOQVRVUkFMKQorVEVTVCgiU09SVCByZXN1bHQgQ09NUEFSRSBOQVRVUkFMIiAiMDA7MDsxO2EtMTAuMDtiLTEuMTtjLTIuMDtkIikKKworCiAjIHRoZXNlIHRyaWdnZXIgdG9wLWxldmVsIGNvbmRpdGlvbgogZm9yZWFjaChjbWQgSU4gSVRFTVMgQXBwZW5kIEZpbmQgR2V0IEluc2VydCBMZW5ndGggUmV2ZXJzZSBSZW1vdmVfQXQgUmVtb3ZlX0R1cGxpY2F0ZXMgUmVtb3ZlX0l0ZW0gU29ydCkKICAgc2V0KCR7Y21kfS1Oby1Bcmd1bWVudHMtUkVTVUxUIDEpCmRpZmYgLS1naXQgYS9UZXN0cy9DT25seS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NPbmx5L0NNYWtlTGlzdHMudHh0CmluZGV4IDIwNjE1ZmUuLjFjMjQwMTcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NPbmx5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NPbmx5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDUgKzEsNSBAQAogIyBhIHNpbXBsZSBDIG9ubHkgdGVzdCBjYXNlCi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkIChWRVJTSU9OIDIuNikKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBwcm9qZWN0IChDT25seSBDKQogCiBzZXQoQ01BS0VfREVCVUdfUE9TVEZJWCAiX3Rlc3RfZGVidWdfcG9zdGZpeCIpCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja0NvbXBvbmVudHMvSXNzdWUgNzQ3MC5odG1sIGIvVGVzdHMvQ1BhY2tDb21wb25lbnRzL0lzc3VlIDc0NzAuaHRtbAppbmRleCBjMmExNjg4Li41OWZiZWU3IDEwMDY0NAotLS0gYS9UZXN0cy9DUGFja0NvbXBvbmVudHMvSXNzdWUgNzQ3MC5odG1sCisrKyBiL1Rlc3RzL0NQYWNrQ29tcG9uZW50cy9Jc3N1ZSA3NDcwLmh0bWwKQEAgLTMsNyArMyw3IEBACiBUaGUgaW5zdGFsbCBydWxlIGZvciB0aGlzIGZpbGUgZGVtb25zdHJhdGVzIHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBpbjxici8+CiBDTWFrZSBpc3N1ZSAjNzQ3MDo8YnIvPgogPGJyLz4KLTxhIGhyZWY9Imh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy83NDcwIj4KLWh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy83NDcwPC9hPjxici8+Cis8YSBocmVmPSJodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy83NDcwIj4KK2h0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzc0NzA8L2E+PGJyLz4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0ZvckFsbC9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0ZvckFsbC9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZQppbmRleCAyNTNkMTI4Li5mM2QzYWQwIDEwMDY0NAotLS0gYS9UZXN0cy9DUGFja0NvbXBvbmVudHNGb3JBbGwvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKKysrIGIvVGVzdHMvQ1BhY2tDb21wb25lbnRzRm9yQWxsL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC04OCwxMiArODgsMTQgQEAKICAgICBzZXQoZXhwZWN0ZWRfZmlsZV9tYXNrICIke0NQYWNrQ29tcG9uZW50c0ZvckFsbF9CSU5BUllfRElSfS9NeUxpYi0qLmRtZyIpCiAgICAgaWYoJHtDUGFja0NvbXBvbmVudFdheX0gU1RSRVFVQUwgImRlZmF1bHQiKQogICAgICAgICBzZXQoZXhwZWN0ZWRfY291bnQgMSkKKyAgICAgICAgc2V0KGV4cGVjdF9kbWdfc2xhIDEpCiAgICAgZWxzZWlmKCR7Q1BhY2tDb21wb25lbnRXYXl9IFNUUkVRVUFMICJPbmVQYWNrUGVyR3JvdXAiKQogICAgICAgICBzZXQoZXhwZWN0ZWRfY291bnQgMykKICAgICBlbHNlaWYoJHtDUGFja0NvbXBvbmVudFdheX0gU1RSRVFVQUwgIklnbm9yZUdyb3VwIikKICAgICAgICAgc2V0KGV4cGVjdGVkX2NvdW50IDQpCiAgICAgZWxzZWlmKCR7Q1BhY2tDb21wb25lbnRXYXl9IFNUUkVRVUFMICJBbGxJbk9uZSIpCiAgICAgICAgIHNldChleHBlY3RlZF9jb3VudCAxKQorICAgICAgICBzZXQoZXhwZWN0X2RtZ19zbGEgMSkKICAgICBlbmRpZigpCiBlbmRpZigpCiAKQEAgLTEzOCw2ICsxNDAsMzYgQEAKICAgaWYoTk9UIGFjdHVhbF9jb3VudCBFUVVBTCBleHBlY3RlZF9jb3VudCkKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogZXhwZWN0ZWRfY291bnQ9JHtleHBlY3RlZF9jb3VudH0gZG9lcyBub3QgbWF0Y2ggYWN0dWFsX2NvdW50PSR7YWN0dWFsX2NvdW50fTogQ1BhY2tDb21wb25lbnRzIHRlc3QgZmFpbHMuIChDUGFja19vdXRwdXQ9JHtDUGFja19vdXRwdXR9LCBDUGFja19lcnJvcj0ke0NQYWNrX2Vycm9yfSkiKQogICBlbmRpZigpCisKKyAgaWYoZXhwZWN0X2RtZ19zbGEpCisgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgaGRpdXRpbCB1ZGlmZGVyZXogLXhtbCAiJHtleHBlY3RlZF9maWxlfSIgT1VUUFVUX1ZBUklBQkxFIG91dCBFUlJPUl9WQVJJQUJMRSBlcnIgUkVTVUxUX1ZBUklBQkxFIHJlcykKKyAgICBpZihOT1QgcmVzIEVRVUFMIDApCisgICAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBlcnIgIiAgJHtlcnJ9IikKKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImVycm9yOiBydW5uaW5nICdoZGl1dGlsIHVkaWZkZXJleiAteG1sJyBvblxuICAke2V4cGVjdGVkX2ZpbGV9XG5mYWlsZWQgd2l0aDpcbiR7ZXJyfSIpCisgICAgZW5kaWYoKQorICAgIGZvcmVhY2goa2V5ICJMUGljIiAiU1RSIyIgIlRFWFQiKQorICAgICAgaWYoTk9UIG91dCBNQVRDSEVTICI8a2V5PiR7a2V5fTwva2V5PiIpCisgICAgICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIG91dCAiICAke291dH0iKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogcnVubmluZyAnaGRpdXRpbCB1ZGlmZGVyZXogLXhtbCcgb25cbiAgJHtleHBlY3RlZF9maWxlfVxuZGlkIG5vdCBzaG93ICcke2tleX0nIGtleTpcbiR7b3V0fSIpCisgICAgICBlbmRpZigpCisgICAgZW5kZm9yZWFjaCgpCisgICAgZm9yZWFjaChsaW5lCisgICAgICAgICMgTFBpYyBmaXJzdCBhbmQgbGFzdCBiYXNlNjQgbGluZXMKKyAgICAgICAgIlx0QUFJQUVRQURBQUVBQUFBQUFBSUFBQUFJQUFNQUFBQUJBQVFBQUFBRUFBVUFBQUFPQUFZQVxuIgorICAgICAgICAiXHRBQTBBQUFCYkFBUUFBQUF6QUE4QUFRQU1BQkFBQUFBTEFBNEFBQT09XG4iCisgICAgICAgICMgU1RSIyBmaXJzdCBhbmQgbGFzdCBiYXNlNjQgbGluZXMKKyAgICAgICAgIlx0QUFrSFJXNW5iR2x6YUFWQlozSmxaUWhFYVhOaFozSmxaUVZRY21sdWRBZFRZWFpsTGk0dVxuIgorICAgICAgICAiXHRkR1ZrSUdFZ2NISnBiblJsY2k0PVxuIgorICAgICAgICAjIFRFWFQgZmlyc3QgYW5kIGxhc3QgYmFzZTY0IGxpbmVzCisgICAgICAgICJcdFRFbERSVTVUUlEwdExTMHRMUzB0RFZSb2FYTWdhWE1nWVc0Z2FXNXpkR0ZzYkdWeUlHTnlcbiIKKyAgICAgICAgIlx0VG04Z2JHbGpaVzV6WlNCd2NtOTJhV1JsWkM0TkRRPT1cbiIKKyAgICAgICAgKQorICAgICAgaWYoTk9UIG91dCBNQVRDSEVTICIke2xpbmV9IikKKyAgICAgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgb3V0ICIgICR7b3V0fSIpCisgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImVycm9yOiBydW5uaW5nICdoZGl1dGlsIHVkaWZkZXJleiAteG1sJyBvblxuICAke2V4cGVjdGVkX2ZpbGV9XG5kaWQgbm90IHNob3cgJyR7bGluZX0nOlxuJHtvdXR9IikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRmb3JlYWNoKCkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiAjIFZhbGlkYXRlIGNvbnRlbnQKZGlmZiAtLWdpdCBhL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9DTWFrZUxpc3RzLnR4dAppbmRleCBiOGIyZWQ2Li44ZWQ0ZDU5IDEwMDY0NAotLS0gYS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL0NNYWtlTGlzdHMudHh0CkBAIC0xNiw1ICsxNiw2IEBACiBzZXQoQ1BBQ0tfTlNJU19NVUlfVU5JSUNPTiAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9XFxcXHVuaW5zdGFsbC5pY28iKQogc2V0KENQQUNLX0dFTkVSQVRPUiAiTlNJUyIpCiBzZXQoQ1BBQ0tfTlNJU19FTkFCTEVfVU5JTlNUQUxMX0JFRk9SRV9JTlNUQUxMIE9OKQorc2V0KENQQUNLX05TSVNfTUFOSUZFU1RfRFBJX0FXQVJFIE9OKQogCiBpbmNsdWRlKENQYWNrKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCmluZGV4IDAxYjM3YzUuLmJmYmNmOWMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZQorKysgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKQEAgLTQ0LDMgKzQ0LDExIEBACiBpZigiJHtvdXRwdXRfaW5kZXh9IiBFUVVBTCAiLTEiKQogICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNVUlfSEVBREVSSU1BR0VfQklUTUFQIG5vdCBmb3VuZCBpbiB0aGUgcHJvamVjdCIpCiBlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0X2ZpbGV9IiBsaW5lIFJFR0VYICJeTWFuaWZlc3REUElBd2FyZSB0cnVlIikKK3N0cmluZyhGSU5EICIke2xpbmV9IiAidHJ1ZSIgb3V0cHV0X2luZGV4KQoraWYoIiR7b3V0cHV0X2luZGV4fSIgRVFVQUwgIi0xIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTWFuaWZlc3REUElBd2FyZSB0cnVlIG5vdCBmb3VuZCBpbiB0aGUgcHJvamVjdCIpCitlbHNlKCkKKyAgbWVzc2FnZShTVEFUVVMgIkZvdW5kIERQSS1hd2FyZSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL0NNYWtlTGlzdHMudHh0CmluZGV4IDczZWFmNGYuLjk0MGU4NDkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL0NNYWtlTGlzdHMudHh0CkBAIC00OSw2ICs0OSw5IEBACiBzZXQoQ1BBQ0tfV0lYX1VQR1JBREVfR1VJRCAiQkYyMENFNUUtN0Y3Qy00MDFELThGN0MtQUI0NUU4RDE3MEU2IikKIHNldChDUEFDS19XSVhfVU5JTlNUQUxMICIxIikKIAorIyBTdXBwb3J0IG5vbi1pbnRlcmFjdGl2ZSBzZXNzaW9ucyAobGlrZSBDSSkuCitzZXQoQ1BBQ0tfV0lYX0xJR0hUX0VYVFJBX0ZMQUdTICItc3ZhbCIpCisKIHNldChDUEFDS19QQUNLQUdFX0VYRUNVVEFCTEVTCiAgICJteS1saWJhcHAiICJDUGFjayBXaVggVGVzdCIKICAgIm15LW90aGVyLWFwcCIgIlNlY29uZCBDUGFjayBXaVggVGVzdCIKZGlmZiAtLWdpdCBhL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlIGIvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggY2E5ZmQ5MC4uYzU0OWU2MSAxMDA2NDQKLS0tIGEvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKKysrIGIvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKQEAgLTc0LDQgKzc0LDYgQEAKICMgZXJyb3IgU01PSzEwNzYgOiBJQ0U2MTogVGhpcyBwcm9kdWN0IHNob3VsZCByZW1vdmUgb25seSBvbGRlcgogIyB2ZXJzaW9ucyBvZiBpdHNlbGYuIFRoZSBNYXhpbXVtIHZlcnNpb24gaXMgbm90IGxlc3MKICMgdGhhbiB0aGUgY3VycmVudCBwcm9kdWN0LiAoMS4wLjAgMS4wLjApCi1ydW5fd2l4X2NvbW1hbmQoc21va2UgLW5vbG9nbyAtd3ggLXN3MTA3NiAiJHtpbnN0YWxsZXJfZmlsZX0iKQoraWYgKE5PVCBub192ZXJpZnkpCisgIHJ1bl93aXhfY29tbWFuZChzbW9rZSAtbm9sb2dvIC13eCAtc3cxMDc2ICIke2luc3RhbGxlcl9maWxlfSIpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvbXlvdGhlcmFwcC5jcHAgYi9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9teW90aGVyYXBwLmNwcAppbmRleCAwZWVmYzFjLi41MDQ3YTM0IDEwMDY0NAotLS0gYS9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9teW90aGVyYXBwLmNwcAorKysgYi9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9teW90aGVyYXBwLmNwcApAQCAtMSwzICsxLDMgQEAKIGludCBtYWluKCkKIHsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9UZXN0cy9DU2hhcnBPbmx5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ1NoYXJwT25seS9DTWFrZUxpc3RzLnR4dAppbmRleCA4MjA0OWM3Li4xOTVhZjA1IDEwMDY0NAotLS0gYS9UZXN0cy9DU2hhcnBPbmx5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NTaGFycE9ubHkvQ01ha2VMaXN0cy50eHQKQEAgLTEsOCArMSwxMSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKICMgYSBzaW1wbGUgQ1NoYXJwIG9ubHkgdGVzdCBjYXNlCiBwcm9qZWN0IChDU2hhcnBPbmx5IENTaGFycCkKIAogIyBDIyBkb2VzIG5vdCBtYWtlIGFueSBkaWZmZXJlbmNlIGJldHdlZW4gU1RBVElDIGFuZCBTSEFSRUQgbGlicwotYWRkX2xpYnJhcnkobGliMSBTVEFUSUMgbGliMS5jcykKK2FkZF9saWJyYXJ5KGxpYjEgU1RBVElDIGxpYjEuY3MgbmVzdGVkL2xpYjEuY3MpCisjd2l0aG91dCB0aGUgc291cmNlIGdyb3VwIHRoaXMgdGVzdCB3aWxsIGZhaWwgdG8gY29tcGlsZQorc291cmNlX2dyb3VwKG5lc3RlZCBGSUxFUyBuZXN0ZWQvbGliMS5jcykKIGFkZF9saWJyYXJ5KGxpYjIgU0hBUkVEIGxpYjIuY3MpCiAKIGFkZF9leGVjdXRhYmxlKENTaGFycE9ubHkgY3NoYXJwb25seS5jcykKZGlmZiAtLWdpdCBhL1Rlc3RzL0NTaGFycE9ubHkvY3NoYXJwb25seS5jcyBiL1Rlc3RzL0NTaGFycE9ubHkvY3NoYXJwb25seS5jcwppbmRleCBhZDQ2NDFhLi4zODkwYzgyIDEwMDY0NAotLS0gYS9UZXN0cy9DU2hhcnBPbmx5L2NzaGFycG9ubHkuY3MKKysrIGIvVGVzdHMvQ1NoYXJwT25seS9jc2hhcnBvbmx5LmNzCkBAIC01LDEwICs1LDggQEAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgaW50IHZhbCA9IExpYjEuZ2V0UmVzdWx0KCk7Ci0KICAgICAgICAgICAgIExpYjIgbCA9IG5ldyBMaWIyKCk7Ci0gICAgICAgICAgICB2YWwgPSBsLm15VmFsOwotCisgICAgICAgICAgICB2YWwgPSB2YWwgKyAgbC5teVZhbCArIG5lc3RlZC5MaWIxLmdldFJlc3VsdCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1NoYXJwT25seS9uZXN0ZWQvbGliMS5jcyBiL1Rlc3RzL0NTaGFycE9ubHkvbmVzdGVkL2xpYjEuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmZGU0YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NTaGFycE9ubHkvbmVzdGVkL2xpYjEuY3MKQEAgLTAsMCArMSwxMyBAQAorbmFtZXNwYWNlIENTaGFycE9ubHkKK3sKKyAgICBuYW1lc3BhY2UgbmVzdGVkCisgICAgeworICAgICAgICBwdWJsaWMgY2xhc3MgTGliMQorICAgICAgICB7CisgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRSZXN1bHQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAyMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi90ZXN0LmNtYWtlLmluIGIvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL3Rlc3QuY21ha2UuaW4KaW5kZXggMmM5ODg3Ni4uMTgxODg4OCAxMDA2NDQKLS0tIGEvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL3Rlc3QuY21ha2UuaW4KKysrIGIvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL3Rlc3QuY21ha2UuaW4KQEAgLTMsMTMgKzMsMTUgQEAKIHNldChDVEVTVF9CSU5BUllfRElSRUNUT1JZICJAQ01ha2VfQklOQVJZX0RJUkAvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL1Rlc3RQcm9qZWN0IikKIHNldChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgIkBDTUFLRV9HRU5FUkFUT1JAIikKIAotY3Rlc3RfZW1wdHlfYmluYXJ5X2RpcmVjdG9yeSgke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9KQotCiBjdGVzdF9zdGFydChFeHBlcmltZW50YWwpCiBjdGVzdF9jb25maWd1cmUoKQogY3Rlc3RfYnVpbGQoKQogY3Rlc3RfdGVzdCgpCiAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjIENvbW1vbiBzZXR1cCBmb3IgYWxsIHRlc3RzLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKwogbGlzdChBUFBFTkQgQ1RFU1RfQ1VTVE9NX0NPVkVSQUdFX0VYQ0xVREUKICAgIi9mb28vc29tZXRoaW5nIgogICAiLzNyZHBhcnR5LyIKQEAgLTE3LDE1ICsxOSwyOCBAQAogICAiL0NNYWtlRmlsZXMvIgogKQogbGlzdChBUFBFTkQgQ1RFU1RfRVhUUkFfQ09WRVJBR0VfR0xPQiAiKi5jcHAiKQotCiBpbmNsdWRlKENUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVikKLXNldCh0YXJfZmlsZSAke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9L2djb3YudGFyKQorc2V0KGV4cGVjdGVkX291dAorICBDTWFrZUZpbGVzL215ZXhlY3V0YWJsZS5kaXIvTGFiZWxzLmpzb24KKyAgVGVzdGluZy9Db3ZlcmFnZUluZm8vZGF0YS5qc29uCisgIFRlc3RpbmcvQ292ZXJhZ2VJbmZvL2V4dHJhLmNwcC5nY292CisgIFRlc3RpbmcvQ292ZXJhZ2VJbmZvL21haW4uY3BwLmdjb3YKKyAgdW5jb3ZlcmVkL2V4dHJhL3VuY292ZXJlZDEuY3BwCisgIHVuY292ZXJlZC91bmNvdmVyZWQyLmNwcAorKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIyBUZXN0IDE6IHdpdGggc3RhbmRhcmQgYXJndW1lbnRzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworCitzZXQodGFyX2ZpbGUgJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS9nY292LnRieikKIGN0ZXN0X2NvdmVyYWdlX2NvbGxlY3RfZ2NvdigKICAgVEFSQkFMTCAiJHt0YXJfZmlsZX0iCiAgIFNPVVJDRSAiJHtDVEVTVF9TT1VSQ0VfRElSRUNUT1JZfSIKICAgQlVJTEQgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iCiAgIEdDT1ZfQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIKICAgR0NPVl9PUFRJT05TIC1QICJAQ01ha2VfU09VUkNFX0RJUkAvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL2Zha2VnY292LmNtYWtlIikKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vdW5jb3ZlcmVkIikKIAogZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQKICAgJHtDTUFLRV9DT01NQU5EfSAtRSB0YXIgdGYgJHt0YXJfZmlsZX0KQEAgLTM3LDE1ICs1MiwxMjYgQEAKIHN0cmluZyhSRVBMQUNFICJcbiIgIjsiIG91dCAiJHtvdXR9IikKIGxpc3QoU09SVCBvdXQpCiAKLXNldChleHBlY3RlZF9vdXQKLSAgQ01ha2VGaWxlcy9teWV4ZWN1dGFibGUuZGlyL0xhYmVscy5qc29uCi0gIFRlc3RpbmcvQ292ZXJhZ2VJbmZvL2RhdGEuanNvbgotICBUZXN0aW5nL0NvdmVyYWdlSW5mby9leHRyYS5jcHAuZ2NvdgotICBUZXN0aW5nL0NvdmVyYWdlSW5mby9tYWluLmNwcC5nY292Ci0gIHVuY292ZXJlZC9leHRyYS91bmNvdmVyZWQxLmNwcAotICB1bmNvdmVyZWQvdW5jb3ZlcmVkMi5jcHAKK2lmKCIke291dH0iIFNUUkVRVUFMICIke2V4cGVjdGVkX291dH0iKQorICBtZXNzYWdlKCJQQVNTRUQgd2l0aCBjb3JyZWN0IG91dHB1dDogJHtvdXR9IikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGQUlMRUQ6IGV4cGVjdGVkOlxuJHtleHBlY3RlZF9vdXR9XG5Hb3Q6XG4ke291dH0iKQorZW5kaWYoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIyBUZXN0IDI6IHdpdGggb3B0aW9uYWwgYXJndW1lbnQ6IFRBUkJBTExfQ09NUFJFU1NJT04gIkdaSVAiCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworCitzZXQodGFyX2ZpbGUgJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS9nY292LnRneikKK2N0ZXN0X2NvdmVyYWdlX2NvbGxlY3RfZ2NvdigKKyAgVEFSQkFMTCAiJHt0YXJfZmlsZX0iCisgIFRBUkJBTExfQ09NUFJFU1NJT04gIkdaSVAiCisgIFNPVVJDRSAiJHtDVEVTVF9TT1VSQ0VfRElSRUNUT1JZfSIKKyAgQlVJTEQgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iCisgIEdDT1ZfQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIKKyAgR0NPVl9PUFRJT05TIC1QICJAQ01ha2VfU09VUkNFX0RJUkAvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL2Zha2VnY292LmNtYWtlIikKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vdW5jb3ZlcmVkIikKKworZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSB0YXIgdGYgJHt0YXJfZmlsZX0KKyAgT1VUUFVUX1ZBUklBQkxFIG91dAorICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9CisgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCiApCiAKK3N0cmluZyhSRVBMQUNFICJcbiIgIjsiIG91dCAiJHtvdXR9IikKK2xpc3QoU09SVCBvdXQpCisKK2lmKCIke291dH0iIFNUUkVRVUFMICIke2V4cGVjdGVkX291dH0iKQorICBtZXNzYWdlKCJQQVNTRUQgd2l0aCBjb3JyZWN0IG91dHB1dDogJHtvdXR9IikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGQUlMRUQ6IGV4cGVjdGVkOlxuJHtleHBlY3RlZF9vdXR9XG5Hb3Q6XG4ke291dH0iKQorZW5kaWYoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIyBUZXN0IDM6IHdpdGggb3B0aW9uYWwgYXJndW1lbnQ6IFRBUkJBTExfQ09NUFJFU1NJT04gIkZST01fRVhUIgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKworc2V0KHRhcl9maWxlICR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vZ2Nvdi50eHopCitjdGVzdF9jb3ZlcmFnZV9jb2xsZWN0X2djb3YoCisgIFRBUkJBTEwgIiR7dGFyX2ZpbGV9IgorICBUQVJCQUxMX0NPTVBSRVNTSU9OICJGUk9NX0VYVCIKKyAgU09VUkNFICIke0NURVNUX1NPVVJDRV9ESVJFQ1RPUll9IgorICBCVUlMRCAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIKKyAgR0NPVl9DT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IgorICBHQ09WX09QVElPTlMgLVAgIkBDTWFrZV9TT1VSQ0VfRElSQC9UZXN0cy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YvZmFrZWdjb3YuY21ha2UiKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS91bmNvdmVyZWQiKQorCitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORAorICAke0NNQUtFX0NPTU1BTkR9IC1FIHRhciB0ZiAke3Rhcl9maWxlfQorICBPVVRQVVRfVkFSSUFCTEUgb3V0CisgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0KKyAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKykKKworc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgb3V0ICIke291dH0iKQorbGlzdChTT1JUIG91dCkKKworaWYoIiR7b3V0fSIgU1RSRVFVQUwgIiR7ZXhwZWN0ZWRfb3V0fSIpCisgIG1lc3NhZ2UoIlBBU1NFRCB3aXRoIGNvcnJlY3Qgb3V0cHV0OiAke291dH0iKQorZWxzZSgpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZBSUxFRDogZXhwZWN0ZWQ6XG4ke2V4cGVjdGVkX291dH1cbkdvdDpcbiR7b3V0fSIpCitlbmRpZigpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjIFRlc3QgNDogd2l0aCBvcHRpb25hbCBhcmd1bWVudDogVEFSQkFMTF9DT01QUkVTU0lPTiAiRkFMU0UiCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworCitzZXQodGFyX2ZpbGUgJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS9nY292LnRhcikKK2N0ZXN0X2NvdmVyYWdlX2NvbGxlY3RfZ2NvdigKKyAgVEFSQkFMTCAiJHt0YXJfZmlsZX0iCisgIFRBUkJBTExfQ09NUFJFU1NJT04gIkZBTFNFIgorICBTT1VSQ0UgIiR7Q1RFU1RfU09VUkNFX0RJUkVDVE9SWX0iCisgIEJVSUxEICIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9IgorICBHQ09WX0NPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iCisgIEdDT1ZfT1BUSU9OUyAtUCAiQENNYWtlX1NPVVJDRV9ESVJAL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi9mYWtlZ2Nvdi5jbWFrZSIpCitmaWxlKFJFTU9WRV9SRUNVUlNFICIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9L3VuY292ZXJlZCIpCisKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5ECisgICR7Q01BS0VfQ09NTUFORH0gLUUgdGFyIHRmICR7dGFyX2ZpbGV9CisgIE9VVFBVVF9WQVJJQUJMRSBvdXQKKyAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfQorICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQorKQorCitzdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBvdXQgIiR7b3V0fSIpCitsaXN0KFNPUlQgb3V0KQorCitpZigiJHtvdXR9IiBTVFJFUVVBTCAiJHtleHBlY3RlZF9vdXR9IikKKyAgbWVzc2FnZSgiUEFTU0VEIHdpdGggY29ycmVjdCBvdXRwdXQ6ICR7b3V0fSIpCitlbHNlKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRkFJTEVEOiBleHBlY3RlZDpcbiR7ZXhwZWN0ZWRfb3V0fVxuR290OlxuJHtvdXR9IikKK2VuZGlmKCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMgVGVzdCA1OiB3aXRoIG9wdGlvbmFsIGFyZ3VtZW50OiBUQVJCQUxMX0NPTVBSRVNTSU9OICJaU1REIgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKworc2V0KHRhcl9maWxlICR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vZ2Nvdi56c3RkKQorY3Rlc3RfY292ZXJhZ2VfY29sbGVjdF9nY292KAorICBUQVJCQUxMICIke3Rhcl9maWxlfSIKKyAgVEFSQkFMTF9DT01QUkVTU0lPTiAiWlNURCIKKyAgU09VUkNFICIke0NURVNUX1NPVVJDRV9ESVJFQ1RPUll9IgorICBCVUlMRCAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIKKyAgR0NPVl9DT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IgorICBHQ09WX09QVElPTlMgLVAgIkBDTWFrZV9TT1VSQ0VfRElSQC9UZXN0cy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YvZmFrZWdjb3YuY21ha2UiKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS91bmNvdmVyZWQiKQorCitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORAorICAke0NNQUtFX0NPTU1BTkR9IC1FIHRhciB0ZiAke3Rhcl9maWxlfQorICBPVVRQVVRfVkFSSUFCTEUgb3V0CisgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0KKyAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKykKKworc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgb3V0ICIke291dH0iKQorbGlzdChTT1JUIG91dCkKKwogaWYoIiR7b3V0fSIgU1RSRVFVQUwgIiR7ZXhwZWN0ZWRfb3V0fSIpCiAgIG1lc3NhZ2UoIlBBU1NFRCB3aXRoIGNvcnJlY3Qgb3V0cHV0OiAke291dH0iKQogZWxzZSgpCmRpZmYgLS1naXQgYS9UZXN0cy9DVGVzdExpbWl0RGFzaEovQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DVGVzdExpbWl0RGFzaEovQ01ha2VMaXN0cy50eHQKaW5kZXggOTJkNzQzZi4uNTIwOGQyZCAxMDA2NDQKLS0tIGEvVGVzdHMvQ1Rlc3RMaW1pdERhc2hKL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NUZXN0TGltaXREYXNoSi9DTWFrZUxpc3RzLnR4dApAQCAtMSw3ICsxLDcgQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjgpCiBwcm9qZWN0KENUZXN0TGltaXREYXNoSiBOT05FKQogCi0jIFRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzEyOTA0CisjIFRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTI5MDQKICMgd2hlbiBjb25maWd1cmVkIHdpdGggQ01ha2UgMi44LjEwLjIgYW5kIGVhcmxpZXIsIGFuZCB3aGVuIHJ1bm5pbmcKICMgImN0ZXN0IC1qIDQiIGluIHRoZSByZXN1bHRpbmcgYnVpbGQgdHJlZS4gVGhpcyBleGFtcGxlIGlzIGhhcmQtY29kZWQKICMgdG8gYXNzdW1lIC1qIDQganVzdCB0byByZXByb2R1Y2UgdGhlIGlzc3VlIGVhc2lseS4gQWRqdXN0IHRoZQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ2hlY2tGb3J0cmFuLmNtYWtlIGIvVGVzdHMvQ2hlY2tGb3J0cmFuLmNtYWtlCmluZGV4IDE2YThlZDIuLjMzZTFiZmIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NoZWNrRm9ydHJhbi5jbWFrZQorKysgYi9UZXN0cy9DaGVja0ZvcnRyYW4uY21ha2UKQEAgLTExLDYgKzExLDcgQEAKIHByb2plY3QoQ2hlY2tGb3J0cmFuIEZvcnRyYW4pCiBmaWxlKFdSSVRFIFwiXCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9yZXN1bHQuY21ha2VcIgogICBcInNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSIFxcXCJcJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSfVxcXCIpXFxuXCIKKyAgXCJzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBcXFwiXCR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRH1cXFwiKVxcblwiCiAgIFwic2V0KENNQUtFX0ZvcnRyYW5fRkxBR1MgXFxcIlwke0NNQUtFX0ZvcnRyYW5fRkxBR1N9XFxcIilcXG5cIgogICBcInNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MCBcXFwiXCR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTB9XFxcIilcXG5cIgogICApCkBAIC00NSw2ICs0Niw4IEBACiAgIG1lc3NhZ2UoU1RBVFVTICIke19kZXNjfSAtICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0iKQogICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUiAiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSfSIgQ0FDSEUgRklMRVBBVEggIkZvcnRyYW4gY29tcGlsZXIiKQogICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0ZvcnRyYW5fQ09NUElMRVIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEICIke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUR9IiBDQUNIRSBTVFJJTkcgIkZvcnRyYW4gY29tcGlsZXIgSWQiKQorICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQpCiAgIHNldChDTUFLRV9Gb3J0cmFuX0ZMQUdTICIke0NNQUtFX0ZvcnRyYW5fRkxBR1N9IiBDQUNIRSBTVFJJTkcgIkZvcnRyYW4gZmxhZ3MiKQogICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0ZvcnRyYW5fRkxBR1MpCiAgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MCAiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NVUFBPUlRTX0Y5MH0iIENBQ0hFIEJPT0wgIkZvcnRyYW4gY29tcGlsZXIgc3VwcG9ydHMgRjkwIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Db25maWdTb3VyY2VzL0NNYWtlTGlzdHMudHh0CmluZGV4IGY1ZGQyNzYuLjZlNjllOGIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ29uZmlnU291cmNlcy9DTWFrZUxpc3RzLnR4dApAQCAtMSw2ICsxLDE3IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4wKQorZ2V0X3Byb3BlcnR5KF9pc011bHRpQ29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQoraWYoTk9UIF9pc011bHRpQ29uZmlnIEFORCBOT1QgQ01BS0VfQlVJTERfVFlQRSkKKyAgc2V0KENNQUtFX0JVSUxEX1RZUEUgRGVidWcgQ0FDSEUgU1RSSU5HICJDaG9vc2UgdGhlIHR5cGUgb2YgYnVpbGQiKQorZW5kaWYoKQogcHJvamVjdChDb25maWdTb3VyY2VzIENYWCkKIAorIyBTb3VyY2UgZmlsZShzKSBuYW1lZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uKHMpLgorZmlsZShHRU5FUkFURQorICBPVVRQVVQgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25maWdfJDxDT05GSUc+LmNwcCIKKyAgQ09OVEVOVCAidm9pZCBjb25maWdfJDxDT05GSUc+KCkge31cbiIKKyAgKQorCisjIFBlci1jb25maWcgc291cmNlcyB2aWEgSU5URVJGQUNFX1NPVVJDRVMuCiBhZGRfbGlicmFyeShpZmFjZSBJTlRFUkZBQ0UpCiB0YXJnZXRfc291cmNlcyhpZmFjZSBJTlRFUkZBQ0UKICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pZmFjZV9zcmMuY3BwIgpAQCAtMTIsMTAgKzIzLDU2IEBACiAgICIkPCQ8Q09ORklHOkRlYnVnPjpDRkdfREVCVUc+IgogICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OkNGR19PVEhFUj4iCiAgICkKLQogYWRkX2V4ZWN1dGFibGUoQ29uZmlnU291cmNlcwogICAkPCQ8Q09ORklHOkRlYnVnPjptYWluX2RlYnVnLmNwcD4KICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+Om1haW5fb3RoZXIuY3BwPgogICAkPCQ8Q09ORklHOk5vdEFDb25maWc+OmRvZXNfbm90X2V4aXN0LmNwcD4KKyAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NvbmZpZ18kPENPTkZJRz4uY3BwCiAgICkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhDb25maWdTb3VyY2VzIGlmYWNlKQorCisjIFBlci1jb25maWcgc291cmNlcyB2aWEgTElOS19MSUJSQVJJRVMuCithZGRfbGlicmFyeShpZmFjZV9kZWJ1ZyBJTlRFUkZBQ0UpCit0YXJnZXRfc291cmNlcyhpZmFjZV9kZWJ1ZyBJTlRFUkZBQ0UKKyAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pZmFjZV9zcmMuY3BwIgorICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2lmYWNlX2RlYnVnX3NyYy5jcHAiCisgICkKK2FkZF9saWJyYXJ5KGlmYWNlX290aGVyIElOVEVSRkFDRSkKK3RhcmdldF9zb3VyY2VzKGlmYWNlX290aGVyIElOVEVSRkFDRQorICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2lmYWNlX3NyYy5jcHAiCisgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaWZhY2Vfb3RoZXJfc3JjLmNwcCIKKyAgKQorYWRkX2V4ZWN1dGFibGUoQ29uZmlnU291cmNlc0xpbmsgbWFpbi5jcHApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhDb25maWdTb3VyY2VzTGluayBQUklWQVRFCisgICIkPCQ8Q09ORklHOkRlYnVnPjpDRkdfREVCVUc+IgorICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OkNGR19PVEhFUj4iCisgICkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb25maWdTb3VyY2VzTGluayBQUklWQVRFCisgICIkPCQ8Q09ORklHOkRlYnVnPjppZmFjZV9kZWJ1Zz4iCisgICIkPCQ8Tk9UOiQ8Q09ORklHOkRlYnVnPj46aWZhY2Vfb3RoZXI+IgorICAiJDwkPENPTkZJRzpOb3RBQ29uZmlnPjppZmFjZV9kb2VzX25vdF9leGlzdD4iCisgICkKKworIyBQZXItY29uZmlnIHNvdXJjZXMgdmlhIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUy4KK2FkZF9saWJyYXJ5KENvbmZpZ1NvdXJjZXNJZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoQ29uZmlnU291cmNlc0lmYWNlIElOVEVSRkFDRQorICAiJDwkPENPTkZJRzpEZWJ1Zz46aWZhY2VfZGVidWc+IgorICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OmlmYWNlX290aGVyPiIKKyAgIiQ8JDxDT05GSUc6Tm90QUNvbmZpZz46aWZhY2VfZG9lc19ub3RfZXhpc3Q+IgorICApCithZGRfZXhlY3V0YWJsZShDb25maWdTb3VyY2VzTGlua0lmYWNlIG1haW4uY3BwKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoQ29uZmlnU291cmNlc0xpbmtJZmFjZSBQUklWQVRFCisgICIkPCQ8Q09ORklHOkRlYnVnPjpDRkdfREVCVUc+IgorICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OkNGR19PVEhFUj4iCisgICkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb25maWdTb3VyY2VzTGlua0lmYWNlIENvbmZpZ1NvdXJjZXNJZmFjZSkKKworIyBBIHRhcmdldCB3aXRoIHNvdXJjZXMgaW4gb25seSBvbmUgY29uZmlndXJhdGlvbiB0aGF0IGlzIG5vdCB0aGUKKyMgZmlyc3QgaW4gQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUy4KK2lmKENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMgTUFUQ0hFUyAiOyhbXjtdKykiKQorICBzZXQob25lX2NvbmZpZyAiJHtDTUFLRV9NQVRDSF8xfSIpCitlbHNlKCkKKyAgc2V0KG9uZV9jb25maWcgIiR7Q01BS0VfQlVJTERfVFlQRX0iKQorZW5kaWYoKQorYWRkX2xpYnJhcnkoT25lQ29uZmlnT25seSBPQkpFQ1QgIiQ8JDxDT05GSUc6JHtvbmVfY29uZmlnfT46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2lmYWNlX3NyYy5jcHA+IikKK3NldF9wcm9wZXJ0eShUQVJHRVQgT25lQ29uZmlnT25seSBQUk9QRVJUWSBMSU5LRVJfTEFOR1VBR0UgQ1hYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ29uZmlnU291cmNlcy9tYWluLmNwcCBiL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjZDNiMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvbWFpbi5jcHAKQEAgLTAsMCArMSw5IEBACisjaWYgIWRlZmluZWQoQ0ZHX0RFQlVHKSAmJiAhZGVmaW5lZChDRkdfT1RIRVIpCisjICBlcnJvciAiTmVpdGhlciBDRkdfREVCVUcgb3IgQ0ZHX09USEVSIGlzIGRlZmluZWQuIgorI2VuZGlmCisjaWZkZWYgQ0ZHX0RFQlVHCisjICBpbmNsdWRlICJtYWluX2RlYnVnLmNwcCIKKyNlbmRpZgorI2lmZGVmIENGR19PVEhFUgorIyAgaW5jbHVkZSAibWFpbl9vdGhlci5jcHAiCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbnRyYWN0cy9WVEsvRGFzaGJvYXJkLmNtYWtlLmluIGIvVGVzdHMvQ29udHJhY3RzL1ZUSy9EYXNoYm9hcmQuY21ha2UuaW4KaW5kZXggYzNkMTBmNC4uYWU3NjBiYyAxMDA2NDQKLS0tIGEvVGVzdHMvQ29udHJhY3RzL1ZUSy9EYXNoYm9hcmQuY21ha2UuaW4KKysrIGIvVGVzdHMvQ29udHJhY3RzL1ZUSy9EYXNoYm9hcmQuY21ha2UuaW4KQEAgLTI0LDggKzI0LDggQEAKIGN0ZXN0X2VtcHR5X2JpbmFyeV9kaXJlY3RvcnkoJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSkKIAogZmlsZShXUklURSAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS9DTWFrZUNhY2hlLnR4dCIgIgotICBCVUlMRF9FWEFNUExFUzpCT09MPU9OCi0gIEJVSUxEX1RFU1RJTkc6Qk9PTD1PTgorICBWVEtfQlVJTERfRVhBTVBMRVM6Qk9PTD1PTgorICBWVEtfQlVJTERfVEVTVElORzpTVFJJTkc9V0FOVAogICBWVEtfV1JBUF9QWVRIT046Qk9PTD1PTgogICBFeHRlcm5hbERhdGFfT0JKRUNUX1NUT1JFUzpGSUxFUEFUSD1AYmFzZV9kaXJAL0V4dGVybmFsRGF0YQogIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL0NNYWtlTGlzdHMudHh0CmluZGV4IDU4YjliMDMuLjM1Y2ViMzMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGEvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYS9DTWFrZUxpc3RzLnR4dApAQCAtMSwyNSArMSwzNSBAQAorbWFjcm8gKGFkZF9jdWRhX3Rlc3RfbWFjcm8gbmFtZSkKKyAgYWRkX3Rlc3RfbWFjcm8oIiR7bmFtZX0iICR7QVJHTn0pCisgIHNldF9wcm9wZXJ0eShURVNUICIke25hbWV9IiBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQorZW5kbWFjcm8gKCkKIAotQUREX1RFU1RfTUFDUk8oQ3VkYS5Db21wbGV4IEN1ZGFDb21wbGV4KQotQUREX1RFU1RfTUFDUk8oQ3VkYS5Db25zdW1lQ29tcGlsZUZlYXR1cmVzIEN1ZGFDb25zdW1lQ29tcGlsZUZlYXR1cmVzKQotQUREX1RFU1RfTUFDUk8oQ3VkYS5DWFhTdGFuZGFyZFNldFR3aWNlIENYWFN0YW5kYXJkU2V0VHdpY2UpCi1BRERfVEVTVF9NQUNSTyhDdWRhLk9iamVjdExpYnJhcnkgQ3VkYU9iamVjdExpYnJhcnkpCi1BRERfVEVTVF9NQUNSTyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHMxIE1peGVkU3RhbmRhcmRMZXZlbHMxKQotQUREX1RFU1RfTUFDUk8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzMiBNaXhlZFN0YW5kYXJkTGV2ZWxzMikKLUFERF9URVNUX01BQ1JPKEN1ZGEuTWl4ZWRTdGFuZGFyZExldmVsczMgTWl4ZWRTdGFuZGFyZExldmVsczMpCi1BRERfVEVTVF9NQUNSTyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHM0IE1peGVkU3RhbmRhcmRMZXZlbHM0KQotQUREX1RFU1RfTUFDUk8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzNSBNaXhlZFN0YW5kYXJkTGV2ZWxzNSkKLUFERF9URVNUX01BQ1JPKEN1ZGEuTm90RW5hYmxlZCBDdWRhTm90RW5hYmxlZCkKLUFERF9URVNUX01BQ1JPKEN1ZGEuU2VwYXJhYmxlQ29tcENYWE9ubHkgU2VwYXJhYmxlQ29tcENYWE9ubHkpCi1BRERfVEVTVF9NQUNSTyhDdWRhLlRvb2xraXQgVG9vbGtpdCkKLUFERF9URVNUX01BQ1JPKEN1ZGEuSW5jbHVkZVBhdGhOb1Rvb2xraXQgSW5jbHVkZVBhdGhOb1Rvb2xraXQpCi1BRERfVEVTVF9NQUNSTyhDdWRhLlByb3BlckRldmljZUxpYnJhcmllcyBQcm9wZXJEZXZpY2VMaWJyYXJpZXMpCi1BRERfVEVTVF9NQUNSTyhDdWRhLlByb3BlckxpbmtGbGFncyBQcm9wZXJMaW5rRmxhZ3MpCi1BRERfVEVTVF9NQUNSTyhDdWRhLlNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBTaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuQ29uc3VtZUNvbXBpbGVGZWF0dXJlcyBDdWRhQ29uc3VtZUNvbXBpbGVGZWF0dXJlcykKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5DWFhTdGFuZGFyZFNldFR3aWNlIENYWFN0YW5kYXJkU2V0VHdpY2UpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuT2JqZWN0TGlicmFyeSBDdWRhT2JqZWN0TGlicmFyeSkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzMSBNaXhlZFN0YW5kYXJkTGV2ZWxzMSkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzMiBNaXhlZFN0YW5kYXJkTGV2ZWxzMikKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzMyBNaXhlZFN0YW5kYXJkTGV2ZWxzMykKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzNCBNaXhlZFN0YW5kYXJkTGV2ZWxzNCkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzNSBNaXhlZFN0YW5kYXJkTGV2ZWxzNSkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5Ob3RFbmFibGVkIEN1ZGFOb3RFbmFibGVkKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLlNlcGFyYWJsZUNvbXBDWFhPbmx5IFNlcGFyYWJsZUNvbXBDWFhPbmx5KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLlRvb2xraXQgVG9vbGtpdCkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5JbmNsdWRlUGF0aE5vVG9vbGtpdCBJbmNsdWRlUGF0aE5vVG9vbGtpdCkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQgU2hhcmVkUnVudGltZVBsdXNUb29sa2l0KQorCisjIFNlcGFyYWJsZSBjb21waWxhdGlvbiBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgb24gTlZDQy4gRGlzYWJsZSB0ZXN0cworIyB1c2luZyBpdCBmb3Igb3RoZXIgY29tcGlsZXJzLgoraWYoQ01ha2VfVEVTVF9DVURBIEFORCBOT1QgQ01ha2VfVEVTVF9DVURBIFNUUkVRVUFMICJDbGFuZyIpCisgIGFkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5Db21wbGV4IEN1ZGFDb21wbGV4KQorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuUHJvcGVyRGV2aWNlTGlicmFyaWVzIFByb3BlckRldmljZUxpYnJhcmllcykKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLlByb3BlckxpbmtGbGFncyBQcm9wZXJMaW5rRmxhZ3MpCitlbmRpZigpCiAKICMgVGhlIENVREEgb25seSBzaGlwcyB0aGUgc2hhcmVkIHZlcnNpb24gb2YgdGhlIHRvb2xraXQgbGlicmFyaWVzCiAjIG9uIHdpbmRvd3MKIGlmKE5PVCBXSU4zMikKLSAgQUREX1RFU1RfTUFDUk8oQ3VkYS5TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgU3RhdGljUnVudGltZVBsdXNUb29sa2l0KQorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuU3RhdGljUnVudGltZVBsdXNUb29sa2l0IFN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCkKIGVuZGlmKCkKIAotQUREX1RFU1RfTUFDUk8oQ3VkYS5XaXRoQyBDdWRhV2l0aEMpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuV2l0aEMgQ3VkYVdpdGhDKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9DWFhTdGFuZGFyZFNldFR3aWNlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9DWFhTdGFuZGFyZFNldFR3aWNlL0NNYWtlTGlzdHMudHh0CmluZGV4IDE5NDFjNDkuLmY0YWQ4M2EgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGEvQ1hYU3RhbmRhcmRTZXRUd2ljZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhL0NYWFN0YW5kYXJkU2V0VHdpY2UvQ01ha2VMaXN0cy50eHQKQEAgLTEsOSArMSw4IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQogcHJvamVjdChDWFhTdGFuZGFyZFNldFR3aWNlIENYWCBDVURBKQogCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKLQogc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCiAKIGFkZF9leGVjdXRhYmxlKENYWFN0YW5kYXJkU2V0VHdpY2UgbWFpbi5jdSkKIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKENYWFN0YW5kYXJkU2V0VHdpY2UgUFVCTElDIGN4eF9zdGRfMTEpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL0NvbXBsZXgvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL0NvbXBsZXgvQ01ha2VMaXN0cy50eHQKaW5kZXggMDhkMWUxNi4uMjY1YmQ4NSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9Db21wbGV4L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvQ29tcGxleC9DTWFrZUxpc3RzLnR4dApAQCAtMTUsNyArMTUsNyBAQAogI2FuZCBhbHNvIGJ1aWxkaW5nIGNwcCB0YXJnZXRzIHRoYXQgbmVlZCBjdWRhIGltcGxpY2l0IGxpYnJhcmllcwogCiAjdmVyaWZ5IHRoYXQgd2UgY2FuIHBhc3MgZXhwbGljaXQgY3VkYSBhcmNoIGZsYWdzCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCiBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRCAxMSkKIHNldChDTUFLRV9DWFhfU1RBTkRBUkQgMTEpCiBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRF9SRVFVSVJFRCBUUlVFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvQ01ha2VMaXN0cy50eHQKaW5kZXggYjAzZTUxZS4uZTQwZmZhNiAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL0NNYWtlTGlzdHMudHh0CkBAIC0xLDEwICsxLDkgQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCiBwcm9qZWN0KE1peGVkU3RhbmRhcmRMZXZlbHMxIENYWCBDVURBKQogCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKLQogc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxNCkKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczEgbWFpbi5jdSBsaWIuY3BwKQogCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMi9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmRkMzI4Li43YWY4MDgxIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvQ01ha2VMaXN0cy50eHQKQEAgLTEsOSArMSw4IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQogcHJvamVjdChNaXhlZFN0YW5kYXJkTGV2ZWxzMiBDWFggQ1VEQSkKIAotc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9Y29tcHV0ZV8zMCIpCi0KIHNldChDTUFLRV9DWFhfU1RBTkRBUkQgMTcpICN0aGlzIGNhbiBkZWNheQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczIgbWFpbi5jdSBsaWIuY3BwKQogdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoTWl4ZWRTdGFuZGFyZExldmVsczIgUFVCTElDIGN1ZGFfc3RkXzExKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczMvQ01ha2VMaXN0cy50eHQKaW5kZXggMmI2MTFiZS4uMmM0MjAwMyAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDcgKzEsNyBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKIHByb2plY3QoTWl4ZWRTdGFuZGFyZExldmVsczMgQ1hYIENVREEpCiAKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPWNvbXB1dGVfMzAiKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczMgbWFpbi5jdSBsaWIuY3BwKQogdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoTWl4ZWRTdGFuZGFyZExldmVsczMgUFVCTElDIGN1ZGFfc3RkXzAzIGN4eF9zdGRfMTQpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNC9DTWFrZUxpc3RzLnR4dAppbmRleCBmYWY2ODY5Li4yMzAyMzBkIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvQ01ha2VMaXN0cy50eHQKQEAgLTEsOSArMSw4IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQogcHJvamVjdChNaXhlZFN0YW5kYXJkTGV2ZWxzNCBDWFggQ1VEQSkKIAotc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9Y29tcHV0ZV8zMCIpCi0KIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDAzKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczQgbWFpbi5jdSBsaWIuY3BwKQogdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoTWl4ZWRTdGFuZGFyZExldmVsczQgUFVCTElDIGN4eF9zdGRfMTQpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNS9DTWFrZUxpc3RzLnR4dAppbmRleCA3MjA5ZjYwLi41ZjVlZTA2IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczUvQ01ha2VMaXN0cy50eHQKQEAgLTEsOSArMSw4IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQogcHJvamVjdChNaXhlZFN0YW5kYXJkTGV2ZWxzNSBDWFggQ1VEQSkKIAotc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9Y29tcHV0ZV8zMCIpCi0KIHNldChDTUFLRV9DWFhfU1RBTkRBUkQgOTgpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDMwKQogCiBhZGRfZXhlY3V0YWJsZShNaXhlZFN0YW5kYXJkTGV2ZWxzNSBtYWluLmN1IGxpYi5jcHApCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvUHJvcGVyRGV2aWNlTGlicmFyaWVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9Qcm9wZXJEZXZpY2VMaWJyYXJpZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggY2I0N2IwOS4uZmUyOGMzZSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9Qcm9wZXJEZXZpY2VMaWJyYXJpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYS9Qcm9wZXJEZXZpY2VMaWJyYXJpZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsOCArMSw4IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMykKIHByb2plY3QoUHJvcGVyRGV2aWNlTGlicmFyaWVzIENYWCBDVURBKQogCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzUsY29kZT1jb21wdXRlXzM1IC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zNSxjb2RlPXNtXzM1IikKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzNSkKIAogc2V0KFRIUkVBRFNfUFJFRkVSX1BUSFJFQURfRkxBRyBPTikKIGZpbmRfcGFja2FnZShUaHJlYWRzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9Qcm9wZXJMaW5rRmxhZ3MvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1Byb3BlckxpbmtGbGFncy9DTWFrZUxpc3RzLnR4dAppbmRleCBiNmUwZTM5Li5kMzhkYTZkIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL1Byb3BlckxpbmtGbGFncy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhL1Byb3BlckxpbmtGbGFncy9DTWFrZUxpc3RzLnR4dApAQCAtOSwxMSArOSwxNyBAQAogCiAjU3BlY2lmeSBhIHNldCBvZiB2YWxpZCBDVURBIGZsYWdzIGFuZCBhbiBpbnZhbGlkIHNldCBvZiBDWFggZmxhZ3MgKCBmb3IgQ1VEQSApCiAjdG8gbWFrZSBzdXJlIHdlIGRvbid0IHVzZSB0aGUgQ1hYIGZsYWdzIHdoZW4gbGlua2luZyBDVURBIGV4ZWN1dGFibGVzCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtYXJjaD1zbV8zNSAtLXVzZV9mYXN0X21hdGgiKQoraWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICItLXVzZV9mYXN0X21hdGgiKQorZWxzZWlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICItZmZhc3QtbWF0aCIpCitlbmRpZigpCisKIHNldChDTUFLRV9DWFhfRkxBR1MgIi1XYWxsIikKIAogc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzNSkKIGFkZF9leGVjdXRhYmxlKFByb3BlckxpbmtGbGFncyBmaWxlMS5jdSBtYWluLmN4eCkKIAogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCBQcm9wZXJMaW5rRmxhZ3MKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvVG9vbGtpdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvVG9vbGtpdC9DTWFrZUxpc3RzLnR4dAppbmRleCA4NmI0NjUyLi4wMDEyNWUzIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0CkBAIC0xNCwxNSArMTQsMjkgQEAKIG1lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9MSUJSQVJZX0RJUjogJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0iKQogbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0iKQogCi0jIFZlcmlmeSB0aGF0IGFsbCB0aGUgQ1VEQTo6IHRhcmdldHMgZXhpc3QgZXZlbiB3aGVuIHRoZSBDVURBIGxhbmd1YWdlIGlzbid0IGVuYWJsZWQKK3NldChjdWRhX2xpYnMgY3VkYXJ0IGN1ZGFfZHJpdmVyIGN1YmxhcyBjdWZmdCBjdWZmdHcgY3VyYW5kIGN1c29sdmVyIGN1c3BhcnNlKQoraWYoQ1VEQVRvb2xraXRfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTAuMSkKKyAgbGlzdChBUFBFTkQgY3VkYV9saWJzIGN1Ymxhc0x0KQorZW5kaWYoKQoraWYoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0xFU1MgMTEpCisgIGxpc3QoQVBQRU5EIGN1ZGFfbGlicyBudmdyYXBoKQorZW5kaWYoKQogCi1mb3JlYWNoIChjdWRhX2xpYiBjdWRhcnQgY3VkYV9kcml2ZXIgY3VibGFzIGN1ZmZ0IGN1ZmZ0dyBjdXJhbmQgY3Vzb2x2ZXIgY3VzcGFyc2UgbnZncmFwaCkKKyMgVmVyaWZ5IHRoYXQgYWxsIHRoZSBDVURBOjogdGFyZ2V0cyBleGlzdCBldmVuIHdoZW4gdGhlIENVREEgbGFuZ3VhZ2UgaXNuJ3QgZW5hYmxlZAorZm9yZWFjaCAoY3VkYV9saWIgSU4gTElTVFMgY3VkYV9saWJzKQorICBpZihOT1QgQ1VEQV8ke2N1ZGFfbGlifV9MSUJSQVJZKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImV4cGVjdGVkIENVREFUb29sa2l0IHZhcmlhYmxlIENVREFfJHtjdWRhX2xpYn1fTElCUkFSWSBub3QgZm91bmQiKQorICBlbmRpZigpCiAgIGlmKE5PVCBUQVJHRVQgQ1VEQTo6JHtjdWRhX2xpYn0pCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIENVREE6OiR7Y3VkYV9saWJ9IHRhcmdldCB3YXMgZXhwZWN0ZWQgYnV0IGNvdWxkbid0IGJlIGZvdW5kIikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJleHBlY3RlZCBDVURBVG9vbGtpdCB0YXJnZXQgQ1VEQTo6JHtjdWRhX2xpYn0gbm90IGZvdW5kIikKICAgZW5kaWYoKQogZW5kZm9yZWFjaCgpCiAKLWZvcmVhY2ggKGN1ZGFfbGliIG5wcGMgbnBwaWFsIG5wcGljYyBucHBpZGVpIG5wcGlmIG5wcGlnIG5wcGltIG5wcGlzdCBucHBpdGMgbnBwcyBucHBpY29tIG5wcGlzdSkKK3NldChucHBfbGlicyBucHBjIG5wcGlhbCBucHBpY2MgbnBwaWRlaSBucHBpZiBucHBpZyBucHBpbSBucHBpc3QgbnBwaXRjIG5wcHMgbnBwaXN1KQoraWYoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0xFU1MgMTEpCisgIGxpc3QoQVBQRU5EIG5wcF9saWJzIG5wcGljb20pCitlbmRpZigpCitmb3JlYWNoIChjdWRhX2xpYiBJTiBMSVNUUyBucHBfbGlicykKICAgaWYoTk9UIFRBUkdFVCBDVURBOjoke2N1ZGFfbGlifSkKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgQ1VEQTo6JHtjdWRhX2xpYn0gdGFyZ2V0IHdhcyBleHBlY3RlZCBidXQgY291bGRuJ3QgYmUgZm91bmQiKQogICBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1dpdGhDL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9XaXRoQy9DTWFrZUxpc3RzLnR4dAppbmRleCA2OWFhM2Y5Li4wNDljYmNlIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL1dpdGhDL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvV2l0aEMvQ01ha2VMaXN0cy50eHQKQEAgLTEsNyArMSw3IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQogcHJvamVjdChXaXRoQyBDVURBIEMpCiAKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPWNvbXB1dGVfMzAiKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogYWRkX2V4ZWN1dGFibGUoQ3VkYVdpdGhDIG1haW4uYyBjdWRhLmN1KQogCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9BcmNoaXRlY3R1cmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9BcmNoaXRlY3R1cmUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlOTcyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L0FyY2hpdGVjdHVyZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xOCkKK3Byb2plY3QoQXJjaGl0ZWN0dXJlIENVREEpCisKK2FkZF9leGVjdXRhYmxlKEFyY2hpdGVjdHVyZSBtYWluLmN1KQorc2V0X3Byb3BlcnR5KFRBUkdFVCBBcmNoaXRlY3R1cmUgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIDUyKQorCisjIE1ha2Ugc3VyZSBDTWFrZSBkb2Vzbid0IHBhc3MgYXJjaGl0ZWN0dXJlcyBpZiBDVURBX0FSQ0hJVEVDVFVSRVMgaXMgT0ZGLgoraWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKKyAgc2V0KENNQUtFX0NVREFfRkxBR1MgIiR7Q01BS0VfQ1VEQV9GTEFHU30gLWFyY2g9c21fNTIiKQorZWxzZWlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgc2V0KENNQUtFX0NVREFfRkxBR1MgIiR7Q01BS0VfQ1VEQV9GTEFHU30gLS1jdWRhLWdwdS1hcmNoPXNtXzUyIikKK2VuZGlmKCkKKworYWRkX2V4ZWN1dGFibGUoQXJjaGl0ZWN0dXJlT2ZmIG1haW4uY3UpCitzZXRfcHJvcGVydHkoVEFSR0VUIEFyY2hpdGVjdHVyZU9mZiBQUk9QRVJUWSBDVURBX0FSQ0hJVEVDVFVSRVMgT0ZGKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQXJjaGl0ZWN0dXJlL21haW4uY3UgYi9UZXN0cy9DdWRhT25seS9BcmNoaXRlY3R1cmUvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzgxN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvQXJjaGl0ZWN0dXJlL21haW4uY3UKQEAgLTAsMCArMSw5IEBACisjaWZkZWYgX19DVURBX0FSQ0hfXworIyAgaWYgX19DVURBX0FSQ0hfXyAhPSA1MjAKKyMgICAgZXJyb3IgIlBhc3NlZCBhcmNoaXRlY3R1cmUgNTIsIGJ1dCBnb3Qgc29tZXRoaW5nIGVsc2UuIgorIyAgZW5kaWYKKyNlbmRpZgorCitpbnQgbWFpbigpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L0NNYWtlTGlzdHMudHh0CmluZGV4IDNlM2U0NGMuLjczNzZhNzMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDM3ICsxLDU0IEBACittYWNybyAoYWRkX2N1ZGFfdGVzdF9tYWNybyBuYW1lKQorICBhZGRfdGVzdF9tYWNybygiJHtuYW1lfSIgJHtBUkdOfSkKKyAgc2V0X3Byb3BlcnR5KFRFU1QgIiR7bmFtZX0iIEFQUEVORAorICAgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCitlbmRtYWNybyAoKQogCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5DaXJjdWxhckxpbmtMaW5lIEN1ZGFPbmx5Q2lyY3VsYXJMaW5rTGluZSkKLUFERF9URVNUX01BQ1JPKEN1ZGFPbmx5LkVuYWJsZVN0YW5kYXJkIEN1ZGFPbmx5RW5hYmxlU3RhbmRhcmQpCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5FeHBvcnRQVFggQ3VkYU9ubHlFeHBvcnRQVFgpCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5HUFVEZWJ1Z0ZsYWcgQ3VkYU9ubHlHUFVEZWJ1Z0ZsYWcpCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5SZXNvbHZlRGV2aWNlU3ltYm9scyBDdWRhT25seVJlc29sdmVEZXZpY2VTeW1ib2xzKQotQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuU2VwYXJhdGVDb21waWxhdGlvbiBDdWRhT25seVNlcGFyYXRlQ29tcGlsYXRpb24pCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQgQ3VkYU9ubHlTaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQpCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5TaGFyZWRSdW50aW1lVmlhQ1VEQUZsYWdzIEN1ZGFPbmx5U2hhcmVkUnVudGltZVZpYUNVREFGbGFncykKLUFERF9URVNUX01BQ1JPKEN1ZGFPbmx5LlN0YW5kYXJkOTggQ3VkYU9ubHlTdGFuZGFyZDk4KQotQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuVG9vbGtpdCBDdWRhT25seVRvb2xraXQpCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5XaXRoRGVmcyBDdWRhT25seVdpdGhEZWZzKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5BcmNoaXRlY3R1cmUgQXJjaGl0ZWN0dXJlKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5Db21waWxlRmxhZ3MgQ3VkYU9ubHlDb21waWxlRmxhZ3MpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LkVuYWJsZVN0YW5kYXJkIEN1ZGFPbmx5RW5hYmxlU3RhbmRhcmQpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LkV4cG9ydFBUWCBDdWRhT25seUV4cG9ydFBUWCkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuU2hhcmVkUnVudGltZVBsdXNUb29sa2l0IEN1ZGFPbmx5U2hhcmVkUnVudGltZVBsdXNUb29sa2l0KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5TdGFuZGFyZDk4IEN1ZGFPbmx5U3RhbmRhcmQ5OCkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuVG9vbGtpdCBDdWRhT25seVRvb2xraXQpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LldpdGhEZWZzIEN1ZGFPbmx5V2l0aERlZnMpCisKK2lmKENNYWtlX1RFU1RfQ1VEQSBBTkQgTk9UIENNYWtlX1RFU1RfQ1VEQSBTVFJFUVVBTCAiQ2xhbmciKQorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LlNoYXJlZFJ1bnRpbWVWaWFDVURBRmxhZ3MgQ3VkYU9ubHlTaGFyZWRSdW50aW1lVmlhQ1VEQUZsYWdzKQorCisgICMgU2VwYXJhYmxlIGNvbXBpbGF0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBvbiBOVkNDLiBEaXNhYmxlIHRlc3RzCisgICMgdXNpbmcgaXQgZm9yIG90aGVyIGNvbXBpbGVycy4KKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5DaXJjdWxhckxpbmtMaW5lIEN1ZGFPbmx5Q2lyY3VsYXJMaW5rTGluZSkKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5SZXNvbHZlRGV2aWNlU3ltYm9scyBDdWRhT25seVJlc29sdmVEZXZpY2VTeW1ib2xzKQorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LlNlcGFyYXRlQ29tcGlsYXRpb24gQ3VkYU9ubHlTZXBhcmF0ZUNvbXBpbGF0aW9uKQorCisgIGFkZF90ZXN0KE5BTUUgQ3VkYU9ubHkuRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Eb250UmVzb2x2ZURldmljZVN5bWJvbHMvIgorICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzLyIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBEb250UmVzb2x2ZURldmljZVN5bWJvbHMKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCisgIHNldF9wcm9wZXJ0eShURVNUICJDdWRhT25seS5Eb250UmVzb2x2ZURldmljZVN5bWJvbHMiIEFQUEVORAorICAgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCisKKyAgIyBPbmx5IE5WQ0MgZGVmaW5lcyBfX0NVREFDQ19ERUJVR19fIHdoZW4gY29tcGlsaW5nIGluIGRlYnVnIG1vZGUuCisgIGFkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuR1BVRGVidWdGbGFnIEN1ZGFPbmx5R1BVRGVidWdGbGFnKQorZW5kaWYoKQogCiAjIFRoZSBDVURBIG9ubHkgc2hpcHMgdGhlIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSB0b29sa2l0IGxpYnJhcmllcwogIyBvbiB3aW5kb3dzCiBpZihOT1QgV0lOMzIpCi0gIEFERF9URVNUX01BQ1JPKEN1ZGEuU3RhdGljUnVudGltZVBsdXNUb29sa2l0IFN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCkKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgQ3VkYU9ubHlTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQpCiBlbmRpZigpCiAKIGlmKE1TVkMpCi0gIEFERF9URVNUX01BQ1JPKEN1ZGFPbmx5LlBEQiBDdWRhT25seVBEQikKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5QREIgQ3VkYU9ubHlQREIpCiBlbmRpZigpCiAKLWFkZF90ZXN0KE5BTUUgQ3VkYU9ubHkuRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzIENPTU1BTkQKLSAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+Ci0gIC0tYnVpbGQtYW5kLXRlc3QKLSAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Eb250UmVzb2x2ZURldmljZVN5bWJvbHMvIgotICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0RvbnRSZXNvbHZlRGV2aWNlU3ltYm9scy8iCi0gICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9Ci0gIC0tYnVpbGQtcHJvamVjdCBEb250UmVzb2x2ZURldmljZVN5bWJvbHMKLSAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KLSAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+Ci0gICkKLQogYWRkX3Rlc3QoTkFNRSBDdWRhT25seS5SdW50aW1lQ29udHJvbHMgQ09NTUFORAogICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KICAgLS1idWlsZC1hbmQtdGVzdApAQCAtNDMsMyArNjAsNSBAQAogICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQogICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KICAgKQorc2V0X3Byb3BlcnR5KFRFU1QgIkN1ZGFPbmx5LlJ1bnRpbWVDb250cm9scyIgQVBQRU5ECisgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9DaXJjdWxhckxpbmtMaW5lL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvQ2lyY3VsYXJMaW5rTGluZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1ZTZmN2FiLi5lMTBhMzQ4IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9DaXJjdWxhckxpbmtMaW5lL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L0NpcmN1bGFyTGlua0xpbmUvQ01ha2VMaXN0cy50eHQKQEAgLTUsOSArNSw5IEBACiAjIFZlcmlmeSB0aGF0IHdlIGRlLWR1cGxpY2F0ZSB0aGUgZGV2aWNlIGxpbmsgbGluZQogIyBWZXJpZnkgdGhhdCBhIGRlLWR1cGxpY2F0ZWQgbGluayBsaW5lIHN0aWxsIHdvcmtzIHdpdGggY2lyY3VsYXIgc3RhdGljIGxpYnJhcmllcwogCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1bY29tcHV0ZV8zMF0iKQogc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogYWRkX2xpYnJhcnkoQ1VEQUNpcmN1bGFyRGV2aWNlTGlua2luZzEgU1RBVElDIGZpbGUxLmN1KQogYWRkX2xpYnJhcnkoQ1VEQUNpcmN1bGFyRGV2aWNlTGlua2luZzIgU1RBVElDIGZpbGUyLmN1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGE4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9Db21waWxlRmxhZ3MvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCitwcm9qZWN0KENvbXBpbGVGbGFncyBDVURBKQorCithZGRfZXhlY3V0YWJsZShDdWRhT25seUNvbXBpbGVGbGFncyBtYWluLmN1KQorCisjIFRyeSBwYXNzaW5nIENVREEgYXJjaGl0ZWN0dXJlIGZsYWdzIGV4cGxpY2l0bHkuCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKEN1ZGFPbmx5Q29tcGlsZUZsYWdzIFBSSVZBVEUKKyAgICAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfNTAsY29kZT1jb21wdXRlXzUwCisgICkKK2Vsc2UoKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIEN1ZGFPbmx5Q29tcGlsZUZsYWdzIFBST1BFUlRZIENVREFfQVJDSElURUNUVVJFUyA1MC1yZWFsKQorZW5kaWYoKQorCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKEN1ZGFPbmx5Q29tcGlsZUZsYWdzIFBSSVZBVEUgLURBTFdBWVNfREVGSU5FKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL21haW4uY3UgYi9UZXN0cy9DdWRhT25seS9Db21waWxlRmxhZ3MvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTljMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL21haW4uY3UKQEAgLTAsMCArMSwxMyBAQAorI2lmZGVmIF9fQ1VEQV9BUkNIX18KKyMgIGlmIF9fQ1VEQV9BUkNIX18gIT0gNTAwCisjICAgIGVycm9yICJQYXNzZWQgYXJjaGl0ZWN0dXJlIDUwLCBidXQgZ290IHNvbWV0aGluZyBlbHNlLiIKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBBTFdBWVNfREVGSU5FCisjICBlcnJvciAiQUxXQVlTX0RFRklORSBub3QgZGVmaW5lZCEiCisjZW5kaWYKKworaW50IG1haW4oKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IDZlMzY5N2YuLjEyNjU2NjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L0RvbnRSZXNvbHZlRGV2aWNlU3ltYm9scy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9Eb250UmVzb2x2ZURldmljZVN5bWJvbHMvQ01ha2VMaXN0cy50eHQKQEAgLTI0LDkgKzI0LDkgQEAKICMgRG9uJ3QgcmVzb2x2ZSB0aGUgZGV2aWNlIHN5bWJvbHMgaW4gdGhlIHN0YXRpYyBsaWJyYXJ5CiAjIERvbid0IHJlc29sdmUgdGhlIGRldmljZSBzeW1ib2xzIGluIHRoZSBleGVjdXRhYmxlIGxpYnJhcnkKICMgVmVyaWZ5IHRoYXQgd2UgY2FuJ3QgdXNlIHRob3NlIGRldmljZSBzeW1ib2xzIGZyb20gYW55dGhpbmcKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPVtjb21wdXRlXzMwXSAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfNTAsY29kZT1cXFwiY29tcHV0ZV81MFxcXCIiKQogc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCA1MCkKIHNldChDTUFLRV9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMgT0ZGKQogCiBhZGRfbGlicmFyeShDVURBTm9EZXZpY2VSZXNvbHZlIFNIQVJFRCBmaWxlMS5jdSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L0V4cG9ydFBUWC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L0V4cG9ydFBUWC9DTWFrZUxpc3RzLnR4dAppbmRleCBmZjZlNzdjLi5lZTVmNTRkIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9FeHBvcnRQVFgvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYU9ubHkvRXhwb3J0UFRYL0NNYWtlTGlzdHMudHh0CkBAIC0zNCwxNiArMzQsMTUgQEAKICMgbmVlZCB0byBhbHNvIHBhc3MgdGhlIC0tbmFtZSBvcHRpb24KIHNldChvdXRwdXRfZmlsZSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZW1iZWRkZWRfb2Jqcy5oKQogCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KGN1ZGFfY29tcGlsZXJfYmluICIke0NNQUtFX0NVREFfQ09NUElMRVJ9IiBESVJFQ1RPUlkpCitmaW5kX3BhY2thZ2UoQ1VEQVRvb2xraXQgUkVRVUlSRUQpCiBmaW5kX3Byb2dyYW0oYmluX3RvX2MKICAgTkFNRVMgYmluMmMKLSAgUEFUSFMgJHtjdWRhX2NvbXBpbGVyX2Jpbn0KKyAgUEFUSFMgJHtDVURBVG9vbGtpdF9CSU5fRElSfQogICApCiBpZihOT1QgYmluX3RvX2MpCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKICAgICAiYmluMmMgbm90IGZvdW5kOlxuIgotICAgICIgIENNQUtFX0NVREFfQ09NUElMRVI9JyR7Q01BS0VfQ1VEQV9DT01QSUxFUn0nXG4iCi0gICAgIiAgY3VkYV9jb21waWxlcl9iaW49JyR7Y3VkYV9jb21waWxlcl9iaW59J1xuIgorICAgICIgIENVREFUb29sa2l0X0JJTl9ESVI9JyR7Q1VEQVRvb2xraXRfQklOX0RJUn0nXG4iCiAgICAgKQogZW5kaWYoKQogCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9HUFVEZWJ1Z0ZsYWcvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9HUFVEZWJ1Z0ZsYWcvQ01ha2VMaXN0cy50eHQKaW5kZXggZmJlZjE1Zi4uNjY3NTY1NSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvR1BVRGVidWdGbGFnL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L0dQVURlYnVnRmxhZy9DTWFrZUxpc3RzLnR4dApAQCAtMiwxOCArMiwxOSBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKIHByb2plY3QgKEdQVURlYnVnRmxhZyBDVURBKQogCi0jR29hbCBmb3IgdGhpcyBleGFtcGxlOgotI3ZlcmlmeSB0aGF0IC1HIGVuYWJsZXMgZ3B1IGRlYnVnIGZsYWdzCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZT1hcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1HIikKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKKworIyBHb2FsIGZvciB0aGlzIGV4YW1wbGU6CisjIFZlcmlmeSB0aGF0IGVuYWJsaW5nIGRldmljZSBkZWJ1ZyB3b3Jrcy4KK3N0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1HIikKIAogYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlHUFVEZWJ1Z0ZsYWcgbWFpbi5jdSkKIAorI0NVREEncyBfX0NVREFDQ19ERUJVR19fIGRlZmluZSB3YXMgYWRkZWQgaW4gTlZDQyA5LjAKKyNzbyBpZiB3ZSBhcmUgYmVsb3cgOS4wLjAgd2Ugd2lsbCBtYW51YWxseSBhZGQgdGhlIGRlZmluZSBzbyB0aGF0IHRoZSB0ZXN0CisjcGFzc2VzCiBpZihDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDkuMC4wKQotICAjQ1VEQSdzIF9fQ1VEQUNDX0RFQlVHX18gZGVmaW5lIHdhcyBhZGRlZCBpbiA5LjAKLSAgI3NvIGlmIHdlIGFyZSBiZWxvdyA5LjAuMCB3ZSB3aWxsIG1hbnVhbGx5IGFkZCB0aGUgZGVmaW5lIHNvIHRoYXQgdGhlIHRlc3QKLSAgI3Bhc3NlcwogICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhDdWRhT25seUdQVURlYnVnRmxhZyBQUklWQVRFICJfX0NVREFDQ19ERUJVR19fIikKIGVuZGlmKCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvUmVzb2x2ZURldmljZVN5bWJvbHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9SZXNvbHZlRGV2aWNlU3ltYm9scy9DTWFrZUxpc3RzLnR4dAppbmRleCA1N2FhMGI5Li5iZDk0ZWM4IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9SZXNvbHZlRGV2aWNlU3ltYm9scy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9SZXNvbHZlRGV2aWNlU3ltYm9scy9DTWFrZUxpc3RzLnR4dApAQCAtMjEsNyArMjEsNyBAQAogIyBjb25maXJtaW5nIHRoYXQgdGhlIGZpcnN0IHN0YXRpYyBsaWJyYXJ5IGlzIG9uIHRoZSBkZXZpY2UgbGluayBsaW5lCiAjIDMuIFZlcmlmeSB0aGF0IHdlIGNhbid0IHVzZSB0aG9zZSBkZXZpY2Ugc3ltYm9scyBmcm9tIGFueXRoaW5nIHRoYXQgbGlua3MKICMgdG8gdGhlIHN0YXRpYyBsaWJyYXJ5Ci1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1bc21fMzBdIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV81MCxjb2RlPVxcXCJjb21wdXRlXzUwXFxcIiIpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDMwIDUwKQogCiBhZGRfbGlicmFyeShDVURBUmVzb2x2ZURldmljZURlcHNBIFNUQVRJQyBmaWxlMS5jdSkKIGFkZF9saWJyYXJ5KENVREFSZXNvbHZlRGV2aWNlRGVwc0IgU1RBVElDIGZpbGUyLmN1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IDhiNThmZWMuLjBkYTU3MzkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvQ01ha2VMaXN0cy50eHQKQEAgLTE1LDkgKzE1LDggQEAKICAgZW5kaWYoKQogZW5kaWYoKQogCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1bY29tcHV0ZV8zMF0iKQotCiBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRCAxMSkKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCiBzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkgc3RhdGljKQogCiBpZihOT1QgIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2VwYXJhdGVDb21waWxhdGlvbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1NlcGFyYXRlQ29tcGlsYXRpb24vQ01ha2VMaXN0cy50eHQKaW5kZXggYzFiZDY0YS4uNTg2YmU4MSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvU2VwYXJhdGVDb21waWxhdGlvbi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9TZXBhcmF0ZUNvbXBpbGF0aW9uL0NNYWtlTGlzdHMudHh0CkBAIC05LDkgKzksNyBAQAogI2FuZCBleGVjdXRhYmxlcy4KICNXZSBjb21wbGljYXRlIHRoZSBtYXR0ZXIgYnkgYWxzbyB0ZXN0aW5nIHRoYXQgbXVsdGlwbGUgc3RhdGljIGxpYnJhcmllcwogI2FsbCBjb250YWluaW5nIGN1ZGEgc2VwYXJhYmxlIGNvbXBpbGF0aW9uIGNvZGUgbGlua3MgcHJvcGVybHkKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPVxcXCJjb21wdXRlXzMwLHNtXzMwLHNtXzM1XFxcIiIpCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtLWdlbmVyYXRlLWNvZGU9YXJjaD1jb21wdXRlXzUwLGNvZGU9W2NvbXB1dGVfNTAsc21fNTAsc21fNTJdIikKLQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCAzNSA1MCA1MikKIHNldChDTUFLRV9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKIGFkZF9saWJyYXJ5KENVREFTZXBhcmF0ZUxpYkEgU1RBVElDIGZpbGUxLmN1IGZpbGUyLmN1IGZpbGUzLmN1KQogdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoQ1VEQVNlcGFyYXRlTGliQSBQUklWQVRFIGN1ZGFfc3RkXzExKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhbmRhcmQ5OC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1N0YW5kYXJkOTgvQ01ha2VMaXN0cy50eHQKaW5kZXggZWY5YTY4NS4uM2JhMDM2MCAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvU3RhbmRhcmQ5OC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9TdGFuZGFyZDk4L0NNYWtlTGlzdHMudHh0CkBAIC0xLDcgKzEsNyBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKIHByb2plY3QoQ3VkYU9ubHlTdGFuZGFyZDk4IENVREEpCiAKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPWNvbXB1dGVfMzAiKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogIyBTdXBwb3J0IHNldHRpbmcgQ1VEQSBTdGFuZGFyZCB0byA5OCB3aGljaCBpbnRlcm5hbGx5IGdldHMgdHJhbnNmb3JtZWQgdG8KICMgQ1VEQTAzCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKaW5kZXggOTdhYzIyOS4uNzA4YTM1MiAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApAQCAtMjcsMyArMjcsOSBAQAogCiBhZGRfZXhlY3V0YWJsZShDdWRhT25seVN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCBtYWluLmN1KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFPbmx5U3RhdGljUnVudGltZVBsdXNUb29sa2l0IFBSSVZBVEUgU2hhcmVkVG9vbGtpdCBTdGF0aWNUb29sa2l0IE1peGVkVG9vbGtpdCkKKworaWYoVU5JWCkKKyAgIyBIZWxwIHRoZSBzaGFyZWQgY3VkYSBydW50aW1lIGZpbmQgbGliY3VyYW5kIGFuZCBsaWJucHBpZiB3aGVuIHRoZXkgYXJlIG5vdCBsb2NhdGVkCisgICMgaW4gYSBkZWZhdWx0IHN5c3RlbSBzZWFyY2hlZCBsb2NhdGlvbgorICBzZXRfcHJvcGVydHkoVEFSR0VUIEN1ZGFPbmx5U3RhdGljUnVudGltZVBsdXNUb29sa2l0IFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDBkNWQ1NzQuLmJiMDZiYTggMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYU9ubHkvVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApAQCAtMTEsOCArMTEsMTcgQEAKIG1lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9MSUJSQVJZX0RJUjogJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0iKQogbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0iKQogCisKK3NldChjdWRhX2xpYnMgY3VkYXJ0IGN1ZGFfZHJpdmVyIGN1YmxhcyBjdWZmdCBjdWZmdHcgY3VyYW5kIGN1c29sdmVyIGN1c3BhcnNlKQoraWYoQ1VEQVRvb2xraXRfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTAuMSkKKyAgbGlzdChBUFBFTkQgY3VkYV9saWJzIGN1Ymxhc0x0KQorZW5kaWYoKQoraWYoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0xFU1MgMTEpCisgIGxpc3QoQVBQRU5EIGN1ZGFfbGlicyBudmdyYXBoKQorZW5kaWYoKQorCiAjIFZlcmlmeSB0aGF0IGFsbCB0aGUgQ1VEQTo6IHRhcmdldHMgYW5kIHZhcmlhYmxlcyBleGlzdAotZm9yZWFjaCAoY3VkYV9saWIgY3VkYXJ0IGN1ZGFfZHJpdmVyIGN1YmxhcyBjdWZmdCBjdWZmdHcgY3VyYW5kIGN1c29sdmVyIGN1c3BhcnNlIG52Z3JhcGgpCitmb3JlYWNoIChjdWRhX2xpYiBJTiBMSVNUUyBjdWRhX2xpYnMpCiAgIGlmKE5PVCBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXhwZWN0ZWQgQ1VEQVRvb2xraXQgdmFyaWFibGUgQ1VEQV8ke2N1ZGFfbGlifV9MSUJSQVJZIG5vdCBmb3VuZCIpCiAgIGVuZGlmKCkKQEAgLTIxLDcgKzMwLDExIEBACiAgIGVuZGlmKCkKIGVuZGZvcmVhY2goKQogCi1mb3JlYWNoIChjdWRhX2xpYiBucHBjIG5wcGlhbCBucHBpY2MgbnBwaWRlaSBucHBpZiBucHBpZyBucHBpbSBucHBpc3QgbnBwaXRjIG5wcHMgbnBwaWNvbSBucHBpc3UpCitzZXQobnBwX2xpYnMgbnBwYyBucHBpYWwgbnBwaWNjIG5wcGlkZWkgbnBwaWYgbnBwaWcgbnBwaW0gbnBwaXN0IG5wcGl0YyBucHBzIG5wcGlzdSkKK2lmKENVREFUb29sa2l0X1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9MRVNTIDExKQorICBsaXN0KEFQUEVORCBucHBfbGlicyBucHBpY29tKQorZW5kaWYoKQorZm9yZWFjaCAoY3VkYV9saWIgKQogICBpZihOT1QgQ1VEQV8ke2N1ZGFfbGlifV9MSUJSQVJZKQogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImV4cGVjdGVkIENVREFUb29sa2l0IHZhcmlhYmxlIENVREFfJHtjdWRhX2xpYn1fTElCUkFSWSBub3QgZm91bmQiKQogICBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1dpdGhEZWZzL0NNYWtlTGlzdHMudHh0CmluZGV4IGJhOWJmMDQuLjBlZDgxZDggMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L1dpdGhEZWZzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1dpdGhEZWZzL0NNYWtlTGlzdHMudHh0CkBAIC0zLDE3ICszLDcgQEAKIHByb2plY3QgKFdpdGhEZWZzIENVREEpCiAKICN2ZXJpZnkgdGhhdCB3ZSBjYW4gcGFzcyBleHBsaWNpdCBjdWRhIGFyY2ggZmxhZ3MKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPWNvbXB1dGVfMzAiKQotaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCA5KQotICBzZXQoZGVidWdfY29tcGlsZV9mbGFncyAtLWdlbmVyYXRlLWNvZGUgYXJjaD1jb21wdXRlXzMyLGNvZGU9c21fMzIpCi1lbHNlKCkKLSAgc2V0KGRlYnVnX2NvbXBpbGVfZmxhZ3MgLS1nZW5lcmF0ZS1jb2RlIGFyY2g9Y29tcHV0ZV8yMCxjb2RlPXNtXzIwKQotZW5kaWYoKQotaWYoQ01BS0VfQ1VEQV9TSU1VTEFURV9JRCBTVFJFUVVBTCAiTVNWQyIpCi0gIGxpc3QoQVBQRU5EIGRlYnVnX2NvbXBpbGVfZmxhZ3MgLVhjb21waWxlcj0tV1gpCi1lbHNlKCkKLSAgbGlzdChBUFBFTkQgZGVidWdfY29tcGlsZV9mbGFncyAtWGNvbXBpbGVyPS1XZXJyb3IpCi1lbmRpZigpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDMwKQogc2V0KHJlbGVhc2VfY29tcGlsZV9kZWZzIERFRlJFTCkKIAogI0dvYWwgZm9yIHRoaXMgZXhhbXBsZToKQEAgLTI4LDggKzE4LDcgQEAKICAgUFJJVkFURQogICAgIC1ERkxBR19DT01QSUxFX0xBTkdfJDxDT01QSUxFX0xBTkdVQUdFPgogICAgIC1ERkxBR19MQU5HX0lTX0NVREE9JDxDT01QSUxFX0xBTkdVQUdFOkNVREE+Ci0gICAgLS1jb21waWxlci1vcHRpb25zPS1ESE9TVF9ERUZJTkUKLSAgICAkPCQ8Q09ORklHOkRFQlVHPjokPEJVSUxEX0lOVEVSRkFDRToke2RlYnVnX2NvbXBpbGVfZmxhZ3N9Pj4KKyAgICAkPCQ8Q1VEQV9DT01QSUxFUl9JRDpOVklESUE+Oi0tY29tcGlsZXItb3B0aW9ucz0tREhPU1RfREVGSU5FPiAjIEhvc3Qtb25seSBkZWZpbmVzIGFyZSBwb3NzaWJsZSBvbmx5IG9uIE5WQ0MuCiAgICkKIAogdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoQ3VkYU9ubHlXaXRoRGVmcwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvV2l0aERlZnMvbWFpbi5ub3RjdSBiL1Rlc3RzL0N1ZGFPbmx5L1dpdGhEZWZzL21haW4ubm90Y3UKaW5kZXggYTVmNGVkNi4uOTExOWViYSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvV2l0aERlZnMvbWFpbi5ub3RjdQorKysgYi9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9tYWluLm5vdGN1CkBAIC03LDggKzcsMTAgQEAKICMgIGVycm9yICJJTkNfQ1VEQSBub3QgZGVmaW5lZCEiCiAjZW5kaWYKIAotI2lmbmRlZiBIT1NUX0RFRklORQotIyAgZXJyb3IgIkhPU1RfREVGSU5FIG5vdCBkZWZpbmVkISIKKyNpZmRlZiBfX05WQ0NfXworIyAgaWZuZGVmIEhPU1RfREVGSU5FCisjICAgIGVycm9yICJIT1NUX0RFRklORSBub3QgZGVmaW5lZCEiCisjICBlbmRpZgogI2VuZGlmCiAKICNpZm5kZWYgUEFDS0VEX0RFRklORQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3h4T25seS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N4eE9ubHkvQ01ha2VMaXN0cy50eHQKaW5kZXggZTYyZjNjNy4uMDk2ODljYiAxMDA2NDQKLS0tIGEvVGVzdHMvQ3h4T25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DeHhPbmx5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDExICsxLDEyIEBACiAjIGEgc2ltcGxlIENYWCBvbmx5IHRlc3QgY2FzZQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QgKEN4eE9ubHkgQ1hYKQogCiBzZXQoQ01BS0VfREVCVUdfUE9TVEZJWCAiX3Rlc3RfZGVidWdfcG9zdGZpeCIpCiBpZihXSU4zMikKICAgc2V0KEVYVFJBX1NSQ1MgdGVzdC5DUFApCiBlbmRpZigpCi1hZGRfbGlicmFyeSh0ZXN0Y3h4MS5teSBTVEFUSUMgbGliY3h4MS5jeHggJHtFWFRSQV9TUkNTfSkKK2FkZF9saWJyYXJ5KHRlc3RjeHgxLm15IFNUQVRJQyBsaWJjeHgxLmN4eCB0ZXN0LkMgJHtFWFRSQV9TUkNTfSkKIGFkZF9saWJyYXJ5KHRlc3RjeHgyIFNIQVJFRCBsaWJjeHgyLmN4eCkKIGFkZF9leGVjdXRhYmxlIChDeHhPbmx5IGN4eG9ubHkuY3h4KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN4eE9ubHkgdGVzdGN4eDEubXkgdGVzdGN4eDIpCmRpZmYgLS1naXQgYS9UZXN0cy9DeHhPbmx5L2N4eG9ubHkuY3h4IGIvVGVzdHMvQ3h4T25seS9jeHhvbmx5LmN4eAppbmRleCAwOTExYTA3Li44YmQxNjM3IDEwMDY0NAotLS0gYS9UZXN0cy9DeHhPbmx5L2N4eG9ubHkuY3h4CisrKyBiL1Rlc3RzL0N4eE9ubHkvY3h4b25seS5jeHgKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAibGliY3h4MS5oIgogI2luY2x1ZGUgImxpYmN4eDIuaCIKK2V4dGVybiBpbnQgdGVzdEM7CiAjaWZkZWYgX01TQ19WRVIKIGV4dGVybiBpbnQgdGVzdENQUDsKICNlbmRpZgpAQCAtOCw2ICs5LDcgQEAKIAogaW50IG1haW4oKQogeworICB0ZXN0QyA9IDE7CiAjaWZkZWYgX01TQ19WRVIKICAgdGVzdENQUCA9IDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rlc3RzL0N4eE9ubHkvdGVzdC5DIGIvVGVzdHMvQ3h4T25seS90ZXN0LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ZTZjMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N4eE9ubHkvdGVzdC5DCkBAIC0wLDAgKzEgQEAKK2ludCB0ZXN0QzsKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4dGVybmFsUHJvamVjdFVwZGF0ZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0V4dGVybmFsUHJvamVjdFVwZGF0ZS9DTWFrZUxpc3RzLnR4dAppbmRleCBkYmYyNmM4Li45ZGRkYWUyIDEwMDY0NAotLS0gYS9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlL0NNYWtlTGlzdHMudHh0CkBAIC03OCw2ICs3OCw4IEBACiAgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQogICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKICAgICBHSVRfVEFHICR7VEVTVF9HSVRfVEFHfQorICAgIEdJVF9DT05GSUcgInVzZXIuZW1haWw9dGVzdGF1dGhvckBjbWFrZS5vcmciCisgICAgICAgICAgICAgICAidXNlci5uYW1lPXRlc3RhdXRob3IiCiAgICAgQ01BS0VfR0VORVJBVE9SICIke0NNQUtFX0dFTkVSQVRPUn0iCiAgICAgQ01BS0VfQVJHUyAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9PElOU1RBTExfRElSPgogICAgIElOU1RBTExfQ09NTUFORCAiIgpkaWZmIC0tZ2l0IGEvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlL0V4dGVybmFsUHJvamVjdFVwZGF0ZVRlc3QuY21ha2UgYi9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlVGVzdC5jbWFrZQppbmRleCA4ZWE0NDUyLi5kZGM1MTNmIDEwMDY0NAotLS0gYS9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlVGVzdC5jbWFrZQpAQCAtMiw3ICsyLDcgQEAKICMgcmVzdWx0aW5nIGNoZWNrZWQgb3V0IHZlcnNpb24gaXMgcmVzdWx0aW5nX3NoYSBhbmQgcmVidWlsZC4KICMgVGhpcyBjaGVjaydzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBFeHRlcm5hbFByb2plY3QgVVBEQVRFX0NPTU1BTkQuCiAjIEFsc28gdmVyaWZ5IHRoYXQgYSBmZXRjaCBvbmx5IG9jY3VycyB3aGVuIGZldGNoX2V4cGVjdGVkIGlzIDEuCi1tYWNybyhjaGVja19hX3RhZyBkZXNpcmVkX3RhZyByZXN1bHRpbmdfc2hhIGZldGNoX2V4cGVjdGVkKQorbWFjcm8oY2hlY2tfYV90YWcgZGVzaXJlZF90YWcgcmVzdWx0aW5nX3NoYSBmZXRjaF9leHBlY3RlZCB1cGRhdGVfc3RyYXRlZ3kpCiAgIG1lc3NhZ2UoIFNUQVRVUyAiQ2hlY2tpbmcgRXh0ZXJuYWxQcm9qZWN0VXBkYXRlIHRvIHRhZzogJHtkZXNpcmVkX3RhZ30iICkKIAogICAjIFJlbW92ZSB0aGUgRkVUQ0hfSEVBRCBmaWxlLCBzbyB3ZSBjYW4gY2hlY2sgaWYgaXQgZ2V0cyByZXBsYWNlZCB3aXRoIGEgJ2dpdApAQCAtMTAsMTEgKzEwLDE2IEBACiAgIHNldCggRkVUQ0hfSEVBRF9maWxlICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9L0NNYWtlRXh0ZXJuYWxzL1NvdXJjZS9UdXRvcmlhbFN0ZXAxLUdJVC8uZ2l0L0ZFVENIX0hFQUQgKQogICBmaWxlKCBSRU1PVkUgJHtGRVRDSF9IRUFEX2ZpbGV9ICkKIAorICAjIEdpdmUgb3Vyc2VsdmVzIGEgbWFya2VyIGluIHRoZSBvdXRwdXQuIEl0IGlzIGRpZmZpY3VsdCB0byB0ZWxsIHdoZXJlIHdlCisgICMgYXJlIHVwIHRvIHdpdGhvdXQgdGhpcworICBtZXNzYWdlKFNUQVRVUyAiPT09PiBjaGVja19hX3RhZyAke2Rlc2lyZWRfdGFnfSAke3Jlc3VsdGluZ19zaGF9ICR7ZmV0Y2hfZXhwZWN0ZWR9ICR7dXBkYXRlX3N0cmF0ZWd5fSIpCisKICAgIyBDb25maWd1cmUKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQogICAgIC1HICR7Q01BS0VfR0VORVJBVE9SfSAtVCAiJHtDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVH0iCiAgICAgLUEgIiR7Q01BS0VfR0VORVJBVE9SX1BMQVRGT1JNfSIKICAgICAtRFRFU1RfR0lUX1RBRzpTVFJJTkc9JHtkZXNpcmVkX3RhZ30KKyAgICAtRENNQUtFX0VQX0dJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZOlNUUklORz0ke3VwZGF0ZV9zdHJhdGVneX0KICAgICAke0V4dGVybmFsUHJvamVjdFVwZGF0ZV9TT1VSQ0VfRElSfQogICAgIFdPUktJTkdfRElSRUNUT1JZICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9CiAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKQEAgLTE3NiwxNiArMTgxLDU1IEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAorIyBXaGVuIHJlLXJ1bm5pbmcgdGVzdHMgbG9jYWxseSwgdGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBzdGFydCBhZnJlc2gKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgJHtFeHRlcm5hbFByb2plY3RVcGRhdGVfQklOQVJZX0RJUn0vQ01ha2VFeHRlcm5hbHMpCisKIGlmKGRvX2dpdF90ZXN0cykKLSAgY2hlY2tfYV90YWcob3JpZ2luL21hc3RlciA1ODQyYjUwM2JhNDExMzk3NmQ5YmIyOGQ1N2I1YWVlMWFkMjczNmI3IDEpCi0gIGNoZWNrX2FfdGFnKHRhZzEgICAgICAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAxKQorICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSBSRUJBU0UpCisgIGNoZWNrX2FfdGFnKHRhZzEgICAgICAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAxIFJFQkFTRSkKICAgIyBXaXRoIHRoZSBHaXQgVVBEQVRFX0NPTU1BTkQgcGVyZm9ybWFuY2UgcGF0Y2gsIHRoaXMgd2lsbCBub3QgcmVxdWlyZWQgYQogICAjICdnaXQgZmV0Y2gnCi0gIGNoZWNrX2FfdGFnKHRhZzEgICAgICAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAwKQotICBjaGVja19hX3RhZyh0YWcyICAgICAgICAgIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSkKLSAgY2hlY2tfYV90YWcoZDE5NzA3MzAzICAgICBkMTk3MDczMDMxMGZlOGJjMDdlNzNmMTVkYzU3MDA3MWY5Zjk2NTRhIDEpCi0gIGNoZWNrX2FfdGFnKGQxOTcwNzMwMyAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAwKQotICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSkKKyAgY2hlY2tfYV90YWcodGFnMSAgICAgICAgICBkMTk3MDczMDMxMGZlOGJjMDdlNzNmMTVkYzU3MDA3MWY5Zjk2NTRhIDAgUkVCQVNFKQorICBjaGVja19hX3RhZyh0YWcyICAgICAgICAgIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSBSRUJBU0UpCisgIGNoZWNrX2FfdGFnKGQxOTcwNzMwMyAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAxIFJFQkFTRSkKKyAgY2hlY2tfYV90YWcoZDE5NzA3MzAzICAgICBkMTk3MDczMDMxMGZlOGJjMDdlNzNmMTVkYzU3MDA3MWY5Zjk2NTRhIDAgUkVCQVNFKQorICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSBSRUJBU0UpCiAgICMgVGhpcyBpcyBhIHJlbW90ZSBzeW1ib2xpYyByZWYsIHNvIGl0IHdpbGwgYWx3YXlzIHRyaWdnZXIgYSAnZ2l0IGZldGNoJwotICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSkKKyAgY2hlY2tfYV90YWcob3JpZ2luL21hc3RlciA1ODQyYjUwM2JhNDExMzk3NmQ5YmIyOGQ1N2I1YWVlMWFkMjczNmI3IDEgUkVCQVNFKQorCisgIGZvcmVhY2goc3RyYXRlZ3kgSU4gSVRFTVMgQ0hFQ0tPVVQgUkVCQVNFX0NIRUNLT1VUKQorICAgICMgTW92ZSBsb2NhbCBtYXN0ZXIgYmFjaywgdGhlbiBhcHBseSBhIGNoYW5nZSB0aGF0IHdpbGwgY2F1c2UgYSBjb25mbGljdAorICAgICMgZHVyaW5nIHJlYmFzZQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7R0lUX0VYRUNVVEFCTEV9IGNoZWNrb3V0IG1hc3RlcgorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtFeHRlcm5hbFByb2plY3RVcGRhdGVfQklOQVJZX0RJUn0vQ01ha2VFeHRlcm5hbHMvU291cmNlL1R1dG9yaWFsU3RlcDEtR0lUCisgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgKQorICAgIGlmKGVycm9yX2NvZGUpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgcmVzZXQgbG9jYWwgbWFzdGVyIGJhY2sgdG8gdGFnMS4iKQorICAgIGVuZGlmKCkKKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0dJVF9FWEVDVVRBQkxFfSByZXNldCAtLWhhcmQgdGFnMQorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtFeHRlcm5hbFByb2plY3RVcGRhdGVfQklOQVJZX0RJUn0vQ01ha2VFeHRlcm5hbHMvU291cmNlL1R1dG9yaWFsU3RlcDEtR0lUCisgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgKQorICAgIGlmKGVycm9yX2NvZGUpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgcmVzZXQgbG9jYWwgbWFzdGVyIGJhY2sgdG8gdGFnMS4iKQorICAgIGVuZGlmKCkKKworICAgIHNldChjbWxGaWxlICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9L0NNYWtlRXh0ZXJuYWxzL1NvdXJjZS9UdXRvcmlhbFN0ZXAxLUdJVC9DTWFrZUxpc3RzLnR4dCkKKyAgICBmaWxlKFJFQUQgJHtjbWxGaWxlfSBjb250ZW50cykKKyAgICBzdHJpbmcoUkVQTEFDRSAiZmluZCBUdXRvcmlhbENvbmZpZy5oIiAiZmluZCBUdXRvcmlhbENvbmZpZy5oIChjb25mbGljdCBoZXJlKSIKKyAgICAgIGNvbmZsaWN0aW5nQ29udGVudCAiJHtjb250ZW50c30iCisgICAgICApCisgICAgZmlsZShXUklURSAke2NtbEZpbGV9ICIke2NvbmZsaWN0aW5nQ29udGVudH0iKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7R0lUX0VYRUNVVEFCTEV9IGNvbW1pdCAtYSAtbSAiVGhpcyBzaG91bGQgY2F1c2UgYSBjb25mbGljdCIKKyAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9L0NNYWtlRXh0ZXJuYWxzL1NvdXJjZS9UdXRvcmlhbFN0ZXAxLUdJVAorICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICkKKyAgICBpZihlcnJvcl9jb2RlKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGNvbW1pdCBjb25mbGljdGluZyBjaGFuZ2UuIikKKyAgICBlbmRpZigpCisgICAgIyBUaGlzIHNob3VsZCBkaXNjYXJkIG91ciBjb21taXQgYnV0IGxlYXZlIGJlaGluZCBhbiBhbm5vdGF0ZWQgdGFnCisgICAgY2hlY2tfYV90YWcob3JpZ2luL21hc3RlciA1ODQyYjUwM2JhNDExMzk3NmQ5YmIyOGQ1N2I1YWVlMWFkMjczNmI3IDEgJHtzdHJhdGVneX0pCisgIGVuZGZvcmVhY2goKQorCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kQkxBUy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRCTEFTL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzE5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kQkxBUy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEwIEBACithZGRfdGVzdChOQU1FIEZpbmRCTEFTLlRlc3QgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kQkxBUy9UZXN0IgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kQkxBUy9UZXN0IgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEZpbmRCTEFTCisgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kQkxBUy9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZEJMQVMvVGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQxOGYzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZEJMQVMvVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy40KQorcHJvamVjdChUZXN0RmluZEJMQVMgQykKK2luY2x1ZGUoQ1Rlc3QpCisKK2ZpbmRfcGFja2FnZShCTEFTIFJFUVVJUkVEKQorCithZGRfZXhlY3V0YWJsZSh0ZXN0X3RndCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF90Z3QgQkxBUzo6QkxBUykKK2FkZF90ZXN0KE5BTUUgdGVzdF90Z3QgQ09NTUFORCB0ZXN0X3RndCkKKworYWRkX2V4ZWN1dGFibGUodGVzdF92YXIgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfdmFyIFBSSVZBVEUgJHtCTEFTX0xJQlJBUklFU30pCithZGRfdGVzdChOQU1FIHRlc3RfdmFyIENPTU1BTkQgdGVzdF92YXIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kQkxBUy9UZXN0L21haW4uYyBiL1Rlc3RzL0ZpbmRCTEFTL1Rlc3QvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNjBkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kQkxBUy9UZXN0L21haW4uYwpAQCAtMCwwICsxLDE0IEBACisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8vIGRlY2xhcmUgd2hhdCBwYXJ0cyBvZiB0aGUgYmxhcyBDLUFQSSB3ZSBuZWVkCit2b2lkIGNibGFzX2Rzd2FwKGNvbnN0IGludCBOLCBkb3VibGUqIFgsIGNvbnN0IGludCBpbmNYLCBkb3VibGUqIFksCisgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpbmNZKTsKKworaW50IG1haW4oKQoreworICBkb3VibGUgeFs0XSA9IHsgMSwgMiwgMywgNCB9OworICBkb3VibGUgeVs0XSA9IHsgOCwgNywgNywgNiB9OworICBjYmxhc19kc3dhcCg0LCB4LCAxLCB5LCAxKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kRG94eWdlbi9TaW1wbGVUZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZERveHlnZW4vU2ltcGxlVGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCAzMzJjZWNjLi5kZWVjNGZkIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kRG94eWdlbi9TaW1wbGVUZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmREb3h5Z2VuL1NpbXBsZVRlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTIyLDYgKzIyLDcgQEAKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJJbXBvcnQgdGFyZ2V0IERveHlnZW46OmRveHlnZW4gbm90IGRlZmluZWQiKQogZW5kaWYoKQogCitzZXQoRE9YWUdFTl9PVVRQVVRfRElSRUNUT1JZIG5vQXJncykKIGRveHlnZW5fYWRkX2RvY3MoZG9jc05vQXJncykKIGlmKE5PVCBFWElTVFMgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9Eb3h5ZmlsZS5kb2NzTm9BcmdzIikKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNaXNzaW5nIGdlbmVyYXRlZCBmaWxlOiBEb3h5ZmlsZS5kb2NzTm9BcmdzIikKQEAgLTMwLDYgKzMxLDcgQEAKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYXJnZXQgZG9jc05vQXJncyBub3QgY3JlYXRlZCIpCiBlbmRpZigpCiAKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgd2l0aEFyZ3MpCiBjb25maWd1cmVfZmlsZShzcGFjZXNfaW5fbmFtZS5jcHAuaW4gInNwYWNlcyBpbiBuYW1lLmNwcCIgQ09QWU9OTFkpCiBkb3h5Z2VuX2FkZF9kb2NzKGRvY3NXaXRoQXJncwogICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3BhY2VzIGluIG5hbWUuY3BwIgpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZERveHlnZW4vU3RhbXBGaWxlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZERveHlnZW4vU3RhbXBGaWxlL0NNYWtlTGlzdHMudHh0CmluZGV4IDJkMDY1NDAuLmVkMmJmYmIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmREb3h5Z2VuL1N0YW1wRmlsZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kRG94eWdlbi9TdGFtcEZpbGUvQ01ha2VMaXN0cy50eHQKQEAgLTMsMjIgKzMsNDEgQEAKIAogZmluZF9wYWNrYWdlKERveHlnZW4gUkVRVUlSRUQpCiAKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgbm9GaWxlcykKIGRveHlnZW5fYWRkX2RvY3MoZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCBVU0VfU1RBTVBfRklMRSkKIGlmKE5PVCBFWElTVFMgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9Eb3h5ZmlsZS5kb2NzV2l0aG91dEZpbGVzV2l0aFN0YW1wIikKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNaXNzaW5nIGdlbmVyYXRlZCBmaWxlOiBEb3h5ZmlsZS5kb2NzV2l0aG91dEZpbGVzV2l0aFN0YW1wIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTWlzc2luZyBnZW5lcmF0ZWQgZmlsZTogRG94eWZpbGUuZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCIpCiBlbmRpZigpCiBpZihOT1QgVEFSR0VUIGRvY3NXaXRob3V0RmlsZXNXaXRoU3RhbXApCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGFyZ2V0IGRvY3NXaXRob3V0RmlsZXNXaXRoU3RhbXAgbm90IGNyZWF0ZWQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYXJnZXQgZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCBub3QgY3JlYXRlZCIpCiBlbmRpZigpCiAKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgd2l0aEZpbGVzKQogZG94eWdlbl9hZGRfZG9jcyhkb2NzV2l0aEZpbGVzV2l0aFN0YW1wIG1haW4uY3BwIG1haW4yLmNwcCBVU0VfU1RBTVBfRklMRSkKIGlmKE5PVCBFWElTVFMgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9Eb3h5ZmlsZS5kb2NzV2l0aEZpbGVzV2l0aFN0YW1wIikKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNaXNzaW5nIGdlbmVyYXRlZCBmaWxlOiBEb3h5ZmlsZS5kb2NzV2l0aEZpbGVzV2l0aFN0YW1wIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTWlzc2luZyBnZW5lcmF0ZWQgZmlsZTogRG94eWZpbGUuZG9jc1dpdGhGaWxlc1dpdGhTdGFtcCIpCiBlbmRpZigpCiBpZihOT1QgVEFSR0VUIGRvY3NXaXRoRmlsZXNXaXRoU3RhbXApCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGFyZ2V0IGRvY3NXaXRoRmlsZXNXaXRoU3RhbXAgbm90IGNyZWF0ZWQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYXJnZXQgZG9jc1dpdGhGaWxlc1dpdGhTdGFtcCBub3QgY3JlYXRlZCIpCiBlbmRpZigpCiAKKyMgQ29uZmlybSB0aGF0IGRveHlnZW5fYWRkX2RvY3MoKSBkb2Vzbid0IGNhdXNlIGEgZmF0YWwgZXJyb3IgaWYgZ2l2ZW4gYQorIyBzb3VyY2UgZmlsZSB0aGF0IGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lCitmaWxlKFJFTU9WRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZ2VuRG94LmNwcCkKK2FkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgZ2VuRG94LmNwcAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFpbjIuY3BwIGdlbkRveC5jcHAKKyAgREVQRU5EUyBtYWluMi5jcHAKKykKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgd2l0aEdlbkZpbGVzKQorZG94eWdlbl9hZGRfZG9jcyhkb2NzV2l0aEdlbkZpbGVzV2l0aFN0YW1wCisgIG1haW4uY3BwCisgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9nZW5Eb3guY3BwCisgIFVTRV9TVEFNUF9GSUxFCispCiAKIGFkZF9jdXN0b21fdGFyZ2V0KGFsbERvY1RhcmdldHMpCi1hZGRfZGVwZW5kZW5jaWVzKGFsbERvY1RhcmdldHMgZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCBkb2NzV2l0aEZpbGVzV2l0aFN0YW1wKQorYWRkX2RlcGVuZGVuY2llcyhhbGxEb2NUYXJnZXRzCisgIGRvY3NXaXRob3V0RmlsZXNXaXRoU3RhbXAKKyAgZG9jc1dpdGhGaWxlc1dpdGhTdGFtcAorICBkb2NzV2l0aEdlbkZpbGVzV2l0aFN0YW1wCispCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTEFQQUNLL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZExBUEFDSy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDgxZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExBUEFDSy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEwIEBACithZGRfdGVzdChOQU1FIEZpbmRMQVBBQ0suVGVzdCBDT01NQU5ECisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAtLWJ1aWxkLWFuZC10ZXN0CisgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRMQVBBQ0svVGVzdCIKKyAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZExBUEFDSy9UZXN0IgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEZpbmRMQVBBQ0sKKyAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRMQVBBQ0svVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRMQVBBQ0svVGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWZhMzZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExBUEFDSy9UZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjQpCitwcm9qZWN0KFRlc3RGaW5kTEFQQUNLIEMpCitpbmNsdWRlKENUZXN0KQorCitmaW5kX3BhY2thZ2UoTEFQQUNLIFJFUVVJUkVEKQorCithZGRfZXhlY3V0YWJsZSh0ZXN0X3RndCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF90Z3QgTEFQQUNLOjpMQVBBQ0spCithZGRfdGVzdChOQU1FIHRlc3RfdGd0IENPTU1BTkQgdGVzdF90Z3QpCisKK2FkZF9leGVjdXRhYmxlKHRlc3RfdmFyIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3ZhciBQUklWQVRFICR7TEFQQUNLX0xJQlJBUklFU30pCithZGRfdGVzdChOQU1FIHRlc3RfdmFyIENPTU1BTkQgdGVzdF92YXIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTEFQQUNLL1Rlc3QvbWFpbi5jIGIvVGVzdHMvRmluZExBUEFDSy9UZXN0L21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODczZTdiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExBUEFDSy9UZXN0L21haW4uYwpAQCAtMCwwICsxLDIwIEBACisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8vIGRlY2xhcmUgd2hhdCBwYXJ0cyBvZiB0aGUgbGFwYWNrIEMtQVBJIHdlIG5lZWQKK3ZvaWQgZGdlc3ZfKGludCosIGludCosIGRvdWJsZSosIGludCosIGludCosIGRvdWJsZSosIGludCosIGludCopOworCitpbnQgbWFpbigpCit7CisgIGRvdWJsZSBBWzhdID0geworICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsCisgIH07CisgIGRvdWJsZSBCWzJdID0geyAwLCA1IH07CisgIGludCBpcGl2WzJdID0geyAwLCAwIH07CisgIGludCBpbmZvID0gMDsKKworICBpbnQgZGltID0gMjsKKyAgaW50IG51bUNvbHMgPSAxOworICBkZ2Vzdl8oJmRpbSwgJm51bUNvbHMsIEEsICZkaW0sIGlwaXYsIEIsICZkaW0sICZpbmZvKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTGliWHNsdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRMaWJYc2x0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNTUwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kTGliWHNsdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEwIEBACithZGRfdGVzdChOQU1FIEZpbmRMaWJYc2x0LlRlc3QgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kTGliWHNsdC9UZXN0IgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kTGliWHNsdC9UZXN0IgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEZpbmRMaWJYc2x0CisgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZExpYlhzbHQvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzMjY2MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw0NSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNCkKK3Byb2plY3QoVGVzdEZpbmRMaWJYc2x0IEMpCitpbmNsdWRlKENUZXN0KQorCitmaW5kX3BhY2thZ2UoSWNvbnYpCitmaW5kX3BhY2thZ2UoTGliWG1sMiBSRVFVSVJFRCkKK2ZpbmRfcGFja2FnZShMaWJYc2x0IFJFUVVJUkVEKQorCithZGRfZGVmaW5pdGlvbnMoLURDTUFLRV9FWFBFQ1RFRF9MaWJYc2x0X1ZFUlNJT049IiR7TElCWFNMVF9WRVJTSU9OX1NUUklOR30iKQorCithZGRfZXhlY3V0YWJsZShsaWJ4c2x0X3RndCBsaWJ4c2x0LmMpCitpZihJY29udl9GT1VORCkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYnhzbHRfdGd0IEljb252OjpJY29udikKK2VuZGlmKCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhsaWJ4c2x0X3RndCBMaWJYbWwyOjpMaWJYbWwyIExpYlhzbHQ6OkxpYlhzbHQpCithZGRfdGVzdChOQU1FIGxpYnhzbHRfdGd0IENPTU1BTkQgbGlieHNsdF90Z3QpCisKK2FkZF9leGVjdXRhYmxlKGxpYnhzbHRfdmFyIGxpYnhzbHQuYykKK2lmKEljb252X0ZPVU5EKQorICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhsaWJ4c2x0X3ZhciBQUklWQVRFICR7SWNvbnZfSU5DTFVERV9ESVJTfSkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYnhzbHRfdmFyIFBSSVZBVEUgJHtJY29udl9MSUJSQVJJRVN9KQorZW5kaWYoKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMobGlieHNsdF92YXIgUFJJVkFURSAke0xJQlhNTDJfSU5DTFVERV9ESVJTfSAke0xJQlhTTFRfSU5DTFVERV9ESVJ9KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYnhzbHRfdmFyIFBSSVZBVEUgJHtMSUJYTUwyX0xJQlJBUklFU30gJHtMSUJYU0xUX0xJQlJBUklFU30pCithZGRfdGVzdChOQU1FIGxpYnhzbHRfdmFyIENPTU1BTkQgbGlieHNsdF92YXIpCisKK2FkZF9leGVjdXRhYmxlKGxpYmV4c2x0X3RndCBsaWJleHNsdC5jKQoraWYoSWNvbnZfRk9VTkQpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhsaWJleHNsdF90Z3QgSWNvbnY6Okljb252KQorZW5kaWYoKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYmV4c2x0X3RndCBMaWJYbWwyOjpMaWJYbWwyIExpYlhzbHQ6OkxpYlhzbHQgTGliWHNsdDo6TGliRXhzbHQpCithZGRfdGVzdChOQU1FIGxpYmV4c2x0X3RndCBDT01NQU5EIGxpYmV4c2x0X3RndCkKKworYWRkX2V4ZWN1dGFibGUobGliZXhzbHRfdmFyIGxpYmV4c2x0LmMpCitpZihJY29udl9GT1VORCkKKyAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMobGliZXhzbHRfdmFyIFBSSVZBVEUgJHtJY29udl9JTkNMVURFX0RJUlN9KQorICB0YXJnZXRfbGlua19saWJyYXJpZXMobGliZXhzbHRfdmFyIFBSSVZBVEUgJHtJY29udl9MSUJSQVJJRVN9KQorZW5kaWYoKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMobGliZXhzbHRfdmFyIFBSSVZBVEUgJHtMSUJYTUwyX0lOQ0xVREVfRElSU30gJHtMSUJYU0xUX0lOQ0xVREVfRElSfSAke0xJQlhTTFRfRVhTTFRfSU5DTFVERV9ESVJ9KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYmV4c2x0X3ZhciBQUklWQVRFICR7TElCWE1MMl9MSUJSQVJJRVN9ICR7TElCWFNMVF9MSUJSQVJJRVN9ICR7TElCWFNMVF9FWFNMVF9MSUJSQVJJRVN9KQorYWRkX3Rlc3QoTkFNRSBsaWJleHNsdF92YXIgQ09NTUFORCBsaWJleHNsdF92YXIpCisKK2FkZF90ZXN0KE5BTUUgeHNsdHByb2NfdGd0IENPTU1BTkQgTGliWHNsdDo6eHNsdHByb2MgLS12ZXJzaW9uKQorCithZGRfdGVzdChOQU1FIHhzbHRwcm9jX3ZhciBDT01NQU5EICR7TElCWFNMVF9YU0xUUFJPQ19FWEVDVVRBQkxFfSAtLXZlcnNpb24pCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTGliWHNsdC9UZXN0L2xpYmV4c2x0LmMgYi9UZXN0cy9GaW5kTGliWHNsdC9UZXN0L2xpYmV4c2x0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2ZWIzZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QvbGliZXhzbHQuYwpAQCAtMCwwICsxLDE2IEBACisjaW5jbHVkZSA8bGliZXhzbHQvZXhzbHQuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHRJbnRlcm5hbHMuaD4KKworaW50IG1haW4oKQoreworICB4c2x0SW5pdCgpOworCisgIHhzbHRTdHlsZXNoZWV0KiBzdHlsZSA9IHhzbHROZXdTdHlsZXNoZWV0KCk7CisgIGV4c2x0UmVnaXN0ZXJBbGwoKTsKKyAgeHNsdEZyZWVTdHlsZXNoZWV0KHN0eWxlKTsKKworICB4c2x0Q2xlYW51cEdsb2JhbHMoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QvbGlieHNsdC5jIGIvVGVzdHMvRmluZExpYlhzbHQvVGVzdC9saWJ4c2x0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzZDc2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QvbGlieHNsdC5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHRJbnRlcm5hbHMuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHRjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgbWFpbigpCit7CisgIHhzbHRJbml0KCk7CisKKyAgeHNsdFN0eWxlc2hlZXQqIHN0eWxlID0geHNsdE5ld1N0eWxlc2hlZXQoKTsKKyAgeHNsdEZyZWVTdHlsZXNoZWV0KHN0eWxlKTsKKworICBpZiAoMCAhPSBzdHJjbXAoQ01BS0VfRVhQRUNURURfTGliWHNsdF9WRVJTSU9OLCBMSUJYU0xUX0RPVFRFRF9WRVJTSU9OKSkgeworICAgIHByaW50ZigiQ01BS0VfRVhQRUNURURfTGliWHNsdF9WRVJTSU9OOiAnJXMnXG4iLAorICAgICAgICAgICBDTUFLRV9FWFBFQ1RFRF9MaWJYc2x0X1ZFUlNJT04pOworICAgIHByaW50ZigiTElCWFNMVF9ET1RURURfVkVSU0lPTjogJyVzJ1xuIiwgTElCWFNMVF9ET1RURURfVkVSU0lPTik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICB4c2x0Q2xlYW51cEdsb2JhbHMoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5M2JiMy4uMDAwMDAwMAotLS0gYS9UZXN0cy9GaW5kTW9kdWxlc0V4ZWN1dGVBbGwvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIFRoaXMgZmlsZSBpbmNsdWRlcyBhbGwgRmluZFhYWC5jbWFrZSBtb2R1bGVzLCBzbyB0aGV5IGFyZSBhbGwgZXhlY3V0ZWQuCi0jIEFzIGl0IGlzIGl0IGRvZXNuJ3QgdGVzdCBhIGxvdC4KLSMgSXQgbWFrZXMgc3VyZSB0aGF0IHRoZSBtb2R1bGVzIGRvbid0IGNvbnRhaW4gYmFzaWMgc3ludGF4IGVycm9ycy4KLSMgSXQgYWxzbyBtYWtlcyBzdXJlIHRoYXQgbW9kdWxlcyBkb24ndCBmYWlsIHdpdGggYW4gZXJyb3IgaWYgc29tZXRoaW5nCi0jIHdhc24ndCBmb3VuZCBidXQgUkVRVUlSRUQgd2FzIG5vdCBnaXZlbi4KLSMKLSMgSSBndWVzcyBtb3JlIHRoaW5ncyBjb3VsZCBiZSBhZGRlZCwgbGlrZSBjaGVja2luZyB3aGV0aGVyIHZhcmlhYmxlcyBhcmUKLSMgZGVmaW5lZCBhZnRlciBydW5uaW5nIHRoZSBtb2R1bGVzIChlLmcuIEZPT19GT1VORCBldGMuKS4KLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkgIyBuZXcgZW5vdWdoIGZvciBDTVAwMDE3Ci1wcm9qZWN0KEZpbmRNb2R1bGVzRXhlY3V0ZUFsbCkKLQotZmlsZShHTE9CIGFsbF9tb2R1bGVzICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vLi4vTW9kdWxlcy9GaW5kKmNtYWtlIikKLQotZm9yZWFjaChtb2R1bGUgJHthbGxfbW9kdWxlc30pCi0gIG1lc3NhZ2UoU1RBVFVTICJtb2R1bGU6ICR7bW9kdWxlfSIpCi0gIGluY2x1ZGUoIiR7bW9kdWxlfSIpCi0KLSAgIyBnZXQgdGhlICJiYXNlbmFtZSIgb2YgdGhlIHBhY2thZ2UsIHNvIHRoZSBleGlzdGVuY2Ugb2YgdmFyaWFibGVzIGxpa2UKLSAgIyBGT09fRk9VTkQgY291bGQgYmUgdGVzdGVkIGxhdGVyIG9uLCBBbGV4Ci0gIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuK0ZpbmQoW15cXC5dKylcXC5jbWFrZSIgIlxcMSIgcGFja2FnZU5hbWUgIiR7bW9kdWxlfSIpCi0gIHN0cmluZyhUT1VQUEVSICIke3BhY2thZ2VOYW1lfSIgcGFja2FnZU5hbWVVcHBlcikKLQotIyBkaXNhYmxlZCBmb3Igbm93LCBzaW5jZSB0b28gbWFueSBtb2R1bGVzIGJyZWFrOgotIyAgaWYoTk9UIERFRklORUQgJHtwYWNrYWdlTmFtZVVwcGVyfV9GT1VORCkKLSMgICAgbWVzc2FnZShTRU5EX0VSUk9SICIke3BhY2thZ2VOYW1lVXBwZXJ9X0ZPVU5EIG5vdCBkZWZpbmVkICEiKQotIyAgZW5kaWYoKQotCi1lbmRmb3JlYWNoKCkKLQotYWRkX2V4ZWN1dGFibGUoRmluZE1vZHVsZXNFeGVjdXRlQWxsIG1haW4uYykKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9tYWluLmMgYi9UZXN0cy9GaW5kTW9kdWxlc0V4ZWN1dGVBbGwvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGI2NDNhLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWludCBtYWluKCkKLXsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUGFja2FnZU1vZGVNYWtlZmlsZVRlc3QvTWFrZWZpbGUuaW4gYi9UZXN0cy9GaW5kUGFja2FnZU1vZGVNYWtlZmlsZVRlc3QvTWFrZWZpbGUuaW4KaW5kZXggNWVmNjdkMC4uYWY5ZmE5NiAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L01ha2VmaWxlLmluCisrKyBiL1Rlc3RzL0ZpbmRQYWNrYWdlTW9kZU1ha2VmaWxlVGVzdC9NYWtlZmlsZS5pbgpAQCAtMjQsNyArMjQsNyBAQAogcG5ndGVzdDogbWFpbi5vCiAJQCQoQ01BS0VfRk9PKSAtRE1PREU9TElOSyA+JCh0bXApCiAJQGZvbz0iYGNhdCAkKHRtcClgIjsgXAotCSBwcmludGYgJyIlcyIgJXMgJXMgLW8gcG5ndGVzdCBtYWluLm8gJXNcbicgJChDTUFLRV9DWFhfQ09NUElMRVIpICIkKENNQUtFX0NYWF9GTEFHUykiICIkKExERkxBR1MpIiAiJCRmb28iID4kKHRtcCkKKwkgcHJpbnRmICciJXMiICVzICVzICVzIC1vIHBuZ3Rlc3QgbWFpbi5vICVzXG4nICQoQ01BS0VfQ1hYX0NPTVBJTEVSKSAiJChDTUFLRV9DWFhfRkxBR1MpIiAiJChfX0VYVFJBX09TWF9TWVNST09UX0ZMQUdTKSIgIiQoTERGTEFHUykiICIkJGZvbyIgPiQodG1wKQogCUBjYXQgJCh0bXApCiAJQHNoICQodG1wKQogCUBybSAtZiAkKHRtcCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vQXJ0aWZhY3RzSW50ZXJhY3RpdmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGJlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMjQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdEFydGlmYWN0c0ludGVyYWN0aXZlIExBTkdVQUdFUyBDKQorCitzZXQgKGNvbXBvbmVudHMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCitpZiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5KQorICBsaXN0IChBUFBFTkQgY29tcG9uZW50cyBOdW1QeSkKK2VuZGlmKCkKKworZmluZF9wYWNrYWdlKFB5dGhvbjMgUkVRVUlSRUQgQ09NUE9ORU5UUyAke2NvbXBvbmVudHN9KQorCitpZiAoUHl0aG9uM19BUlRJRkFDVFNfSU5URVJBQ1RJVkUpCisgIGlmIChOT1QgREVGSU5FRCBDQUNIRXtQeXRob24zX0VYRUNVVEFCTEV9CisgICAgICBPUiBOT1QgREVGSU5FRCBDQUNIRXtQeXRob24zX0xJQlJBUll9IE9SIE5PVCBERUZJTkVEIENBQ0hFe1B5dGhvbjNfSU5DTFVERV9ESVJ9CisgICAgICBPUiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5IEFORCBOT1QgREVGSU5FRCBDQUNIRXtQeXRob24zX051bVB5X0lOQ0xVREVfRElSfSkpCisgICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFPU9OIEZhaWxlZC4iKQorICBlbmRpZigpCitlbHNlKCkKKyAgaWYgKERFRklORUQgQ0FDSEV7UHl0aG9uM19FWEVDVVRBQkxFfQorICAgICAgT1IgREVGSU5FRCBDQUNIRXtQeXRob24zX0xJQlJBUll9IE9SIERFRklORUQgQ0FDSEV7UHl0aG9uM19JTkNMVURFX0RJUn0KKyAgICAgIE9SIChDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHkgQU5EIERFRklORUQgQ0FDSEV7UHl0aG9uM19OdW1QeV9JTkNMVURFX0RJUn0pKQorICAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24zX0FSVElGQUNUU19JTlRFUkFDVElWRT1PRkYgRmFpbGVkLiIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0NNYWtlTGlzdHMudHh0CmluZGV4IDliODk4MzIuLmZkZmEzNmUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQeXRob24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9DTWFrZUxpc3RzLnR4dApAQCAtMjAsNiArMjAsMTcgQEAKICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KICAgICApCiAKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbjIuRGV2ZWxvcG1lbnQuTW9kdWxlIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24yTW9kdWxlIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMk1vZHVsZSIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHl0aG9uMk1vZHVsZQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorCiAgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24yRmFpbCBDT01NQU5ECiAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CiAgICAgLS1idWlsZC1hbmQtdGVzdApAQCAtNTQsNiArNjUsMTcgQEAKICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KICAgICApCiAKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbjMuRGV2ZWxvcG1lbnQuTW9kdWxlIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24zTW9kdWxlIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uM01vZHVsZSIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHl0aG9uM01vZHVsZQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorCiAgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24zRmFpbCBDT01NQU5ECiAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CiAgICAgLS1idWlsZC1hbmQtdGVzdApAQCAtMjc3LDYgKzI5OSwzNSBAQAogICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgogICAgICkKIAorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQXJ0aWZhY3RzSW50ZXJhY3RpdmUuT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQXJ0aWZhY3RzSW50ZXJhY3RpdmUuT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEFydGlmYWN0c1Njb3BlCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gIi1EYnVpbGRfZ2VuZXJhdG9yX2FyZ3M9JHtidWlsZF9nZW5lcmF0b3JfYXJnc30iCisgICAgIi1EQ01ha2VfU09VUkNFX0RJUj0ke0NNYWtlX1NPVVJDRV9ESVJ9IgorICAgICItRENNYWtlX0JJTkFSWV9ESVI9JHtDTWFrZV9CSU5BUllfRElSfSIKKyAgICAiLURDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHk9JHtDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHl9IgorICAgICItRFB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFPU9OIgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkFydGlmYWN0c0ludGVyYWN0aXZlLk9GRiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQXJ0aWZhY3RzSW50ZXJhY3RpdmUiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9BcnRpZmFjdHNJbnRlcmFjdGl2ZS5PRkYiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEFydGlmYWN0c1Njb3BlCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gIi1EYnVpbGRfZ2VuZXJhdG9yX2FyZ3M9JHtidWlsZF9nZW5lcmF0b3JfYXJnc30iCisgICAgIi1EQ01ha2VfU09VUkNFX0RJUj0ke0NNYWtlX1NPVVJDRV9ESVJ9IgorICAgICItRENNYWtlX0JJTkFSWV9ESVI9JHtDTWFrZV9CSU5BUllfRElSfSIKKyAgICAiLURDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHk9JHtDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHl9IgorICAgICItRFB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFPU9GRiIKKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisKICAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlIENPTU1BTkQKICAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KICAgICAtLWJ1aWxkLWFuZC10ZXN0CkBAIC0zNDAsNyArMzkxLDYgQEAKICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQogICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0TnVtUHlPbmx5CiAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KLSAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KICAgKQogZW5kaWYoKQogCkBAIC0zNTcsNiArNDA3LDI5IEBACiAgICAgKQogZW5kaWYoKQogCitpZiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uIEFORCBDTWFrZV9URVNUX0ZpbmRQeXRob25fSXJvblB5dGhvbikKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkltcGxlbWVudGF0aW9uLkNQeXRob24gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0ltcGxlbWVudGF0aW9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vSW1wbGVtZW50YXRpb24uQ1B5dGhvbiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0SW1wbGVtZW50YXRpb25DUHl0aG9uCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049MiAtRFB5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT05TPUNQeXRob24KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5JbXBsZW1lbnRhdGlvbi5Jcm9uUHl0aG9uIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9JbXBsZW1lbnRhdGlvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0ltcGxlbWVudGF0aW9uLklyb25QeXRob24iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEltcGxlbWVudGF0aW9uSXJvblB5dGhvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTIgLURQeXRob25fUkVRVUVTVEVEX0lNUExFTUVOVEFUSU9OPUlyb25QeXRob24KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCitlbmRpZigpCisKIGlmKENNYWtlX1RFU1RfRmluZFB5dGhvbl9Jcm9uUHl0aG9uKQogICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uSXJvblB5dGhvbjIuTE9DQVRJT04gQ09NTUFORAogICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgpAQCAtNDIwLDMgKzQ5MywxMDggQEAKICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KICAgICApCiBlbmRpZigpCisKK2lmKENNYWtlX1RFU1RfRmluZFB5dGhvbl9QeVB5KQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHlQeTIuTE9DQVRJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkyIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeTIuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkyCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob24yX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5Mi5WRVJTSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5MiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkyLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkyCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob24yX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKworICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHlQeTMuTE9DQVRJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkzIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeTMuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkzCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob24zX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5My5WRVJTSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5MyIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkzLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkzCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob24zX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKworICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHlQeS5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPUxPQ0FUSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHlQeS5WRVJTSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5IgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeS5WRVJTSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeVB5CisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fRklORF9TVFJBVEVHWT1WRVJTSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHlQeS5WMi5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkuVjIuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0yIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5LlYyLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5LlYyLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0yIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5UHkuVjMuTE9DQVRJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5LlYzLkxPQ0FUSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeVB5CisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049MyAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPUxPQ0FUSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHlQeS5WMy5WRVJTSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5IgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeS5WMy5WRVJTSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeVB5CisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049MyAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPVZFUlNJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL0ltcGxlbWVudGF0aW9uL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9JbXBsZW1lbnRhdGlvbi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjRmYTFlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9JbXBsZW1lbnRhdGlvbi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDM3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RJbXBsZW1lbnRhdGlvbiR7UHl0aG9uX1JFUVVFU1RFRF9JTVBMRU1FTlRBVElPTn0gQykKKworCitzZXQgKFB5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfV9GSU5EX0lNUExFTUVOVEFUSU9OUyAke1B5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT059KQorCitmaW5kX3BhY2thZ2UoUHl0aG9uJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIpCitpZiAoTk9UIFB5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfV9GT1VORCBPUiBOT1QgUHl0aG9uJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059X0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0iKQorZW5kaWYoKQorCitpZiAoUHl0aG9uX1JFUVVFU1RFRF9JTVBMRU1FTlRBVElPTiBTVFJFUVVBTCAiSXJvblB5dGhvbiIKKyAgICBBTkQgTk9UIFB5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfV9JTlRFUlBSRVRFUl9JRCBTVFJFUVVBTCAiSXJvblB5dGhvbiIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJFcnJvbmVvdXMgaW50ZXJwcmV0ZXIgSUQgKCR7UHl0aG9uJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059X0lOVEVSUFJFVEVSX0lEfSkiKQorZW5kaWYoKQoraWYgKFB5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT04gU1RSRVFVQUwgIkNQeXRob24iCisgICAgQU5EIFB5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfV9JTlRFUlBSRVRFUl9JRCBTVFJFUVVBTCAiSXJvblB5dGhvbiIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJFcnJvbmVvdXMgaW50ZXJwcmV0ZXIgSUQgKCR7UHl0aG9uJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059X0lOVEVSUFJFVEVSX0lEfSkiKQorZW5kaWYoKQorCisKK3NldCAoUHl0aG9uX0ZJTkRfSU1QTEVNRU5UQVRJT05TICR7UHl0aG9uX1JFUVVFU1RFRF9JTVBMRU1FTlRBVElPTn0pCisKK2ZpbmRfcGFja2FnZShQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IFJFUVVJUkVEIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIpCitpZiAoTk9UIFB5dGhvbl9GT1VORCBPUiBOT1QgUHl0aG9uX0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IikKK2VuZGlmKCkKKworaWYgKFB5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT04gU1RSRVFVQUwgIklyb25QeXRob24iCisgICAgQU5EIE5PVCBQeXRob25fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbl9JTlRFUlBSRVRFUl9JRH0pIikKK2VuZGlmKCkKK2lmIChQeXRob25fUkVRVUVTVEVEX0lNUExFTUVOVEFUSU9OIFNUUkVRVUFMICJDUHl0aG9uIgorICAgIEFORCBQeXRob25fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbl9JTlRFUlBSRVRFUl9JRH0pIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbi9DTWFrZUxpc3RzLnR4dAppbmRleCBjOTZhM2UwLi4zNDkzYzI5IDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9Jcm9uUHl0aG9uL0NNYWtlTGlzdHMudHh0CkBAIC0yLDExICsyLDIwIEBACiAKIHByb2plY3QoVGVzdElyb25QeXRob24gQykKIAotZmluZF9wYWNrYWdlKFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gUkVRVUlSRUQgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBDb21waWxlcikKK3NldCAoUHl0aG9uX0ZJTkRfSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24pCisKK2ZpbmRfcGFja2FnZShQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIpCiBpZiAoTk9UIFB5dGhvbl9GT1VORCkKICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSIpCiBlbmRpZigpCiAKK2lmIChOT1QgUHl0aG9uX0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gSW50ZXJwcmV0ZXIiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob25fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbl9JTlRFUlBSRVRFUl9JRH0pIikKK2VuZGlmKCkKKwogaWYgKE5PVCBQeXRob25fQ29tcGlsZXJfRk9VTkQpCiAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBDb21waWxlciIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24yL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9Jcm9uUHl0aG9uMi9DTWFrZUxpc3RzLnR4dAppbmRleCA0M2VjMzA5Li4xZGI3OThjIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24yL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbjIvQ01ha2VMaXN0cy50eHQKQEAgLTIsMTEgKzIsMjAgQEAKIAogcHJvamVjdChUZXN0SXJvblB5dGhvbjIgQykKIAotZmluZF9wYWNrYWdlKFB5dGhvbjIgUkVRVUlSRUQgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBDb21waWxlcikKK3NldCAoUHl0aG9uMl9GSU5EX0lNUExFTUVOVEFUSU9OUyAiSXJvblB5dGhvbiIpCisKK2ZpbmRfcGFja2FnZShQeXRob24yIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIpCiBpZiAoTk9UIFB5dGhvbjJfRk9VTkQpCiAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAyIikKIGVuZGlmKCkKIAoraWYgKE5PVCBQeXRob24yX0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMiBJbnRlcnByZXRlciIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbjJfSU5URVJQUkVURVJfSUR9KSIpCitlbmRpZigpCisKIGlmIChOT1QgUHl0aG9uMl9Db21waWxlcl9GT1VORCkKICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDIgQ29tcGlsZXIiKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9QeVB5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9QeVB5L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YWRlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1B5UHkvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0UHlQeSBDKQorCitzZXQgKFB5dGhvbl9GSU5EX0lNUExFTUVOVEFUSU9OUyBQeVB5KQorCitmaW5kX3BhY2thZ2UoUHl0aG9uICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50KQoraWYgKE5PVCBQeXRob25fRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5ICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uX0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gUHlQeSBJbnRlcnByZXRlciIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbl9JTlRFUlBSRVRFUl9JRCBTVFJFUVVBTCAiUHlQeSIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJFcnJvbmVvdXMgaW50ZXJwcmV0ZXIgSUQgKCR7UHl0aG9uX0lOVEVSUFJFVEVSX0lEfSkiKQorZW5kaWYoKQorCitpZiAoTk9UIFB5dGhvbl9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5ICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSBEZXZlbG9wbWVudC5Nb2R1bGUiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob25fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5ICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSBEZXZlbG9wbWVudC5FbWJlZCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbl9EZXZlbG9wbWVudF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IERldmVsb3BtZW50IikKK2VuZGlmKCkKKworaWYoTk9UIFRBUkdFVCBQeXRob246OkludGVycHJldGVyKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKK2VuZGlmKCkKK2lmKE5PVCBUQVJHRVQgUHl0aG9uOjpNb2R1bGUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uOjpNb2R1bGUgbm90IGZvdW5kIikKK2VuZGlmKCkKK2lmKE5PVCBUQVJHRVQgUHl0aG9uOjpQeXRob24pCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uOjpQeXRob24gbm90IGZvdW5kIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHlQeTIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5UHkyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMGRkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1B5UHkyL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzcgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdFB5UHkyIEMpCisKK3NldCAoUHl0aG9uMl9GSU5EX0lNUExFTUVOVEFUSU9OUyAiUHlQeSIpCisKK2ZpbmRfcGFja2FnZShQeXRob24yIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCitpZiAoTk9UIFB5dGhvbjJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDIiKQorZW5kaWYoKQorCitpZiAoTk9UIFB5dGhvbjJfSW50ZXJwcmV0ZXJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDIgSW50ZXJwcmV0ZXIiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24yX0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJQeVB5IikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkVycm9uZW91cyBpbnRlcnByZXRlciBJRCAoJHtQeXRob24yX0lOVEVSUFJFVEVSX0lEfSkiKQorZW5kaWYoKQorCitpZiAoTk9UIFB5dGhvbjJfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gUHlQeSAyIERldmVsb3BtZW50Lk1vZHVsZSIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDIgRGV2ZWxvcG1lbnQuRW1iZWQiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24yX0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gUHlQeSAyIERldmVsb3BtZW50IikKK2VuZGlmKCkKKworaWYoTk9UIFRBUkdFVCBQeXRob24yOjpJbnRlcnByZXRlcikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQorZW5kaWYoKQoraWYoTk9UIFRBUkdFVCBQeXRob24yOjpNb2R1bGUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6TW9kdWxlIG5vdCBmb3VuZCIpCitlbmRpZigpCitpZihOT1QgVEFSR0VUIFB5dGhvbjI6OlB5dGhvbikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpQeXRob24gbm90IGZvdW5kIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHlQeTMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5UHkzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjJkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1B5UHkzL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzcgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdFB5UHkzIEMpCisKK3NldCAoUHl0aG9uM19GSU5EX0lNUExFTUVOVEFUSU9OUyAiUHlQeSIpCisKK2ZpbmRfcGFja2FnZShQeXRob24zIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCitpZiAoTk9UIFB5dGhvbjNfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDMiKQorZW5kaWYoKQorCitpZiAoTk9UIFB5dGhvbjNfSW50ZXJwcmV0ZXJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDMgSW50ZXJwcmV0ZXIiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24zX0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJQeVB5IikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkVycm9uZW91cyBpbnRlcnByZXRlciBJRCAoJHtQeXRob24zX0lOVEVSUFJFVEVSX0lEfSkiKQorZW5kaWYoKQorCitpZiAoTk9UIFB5dGhvbjNfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gUHlQeSAzIERldmVsb3BtZW50Lk1vZHVsZSIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjNfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDMgRGV2ZWxvcG1lbnQuRW1iZWQiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24zX0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gUHlQeSAzIERldmVsb3BtZW50IikKK2VuZGlmKCkKKworaWYoTk9UIFRBUkdFVCBQeXRob24zOjpJbnRlcnByZXRlcikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQorZW5kaWYoKQoraWYoTk9UIFRBUkdFVCBQeXRob24zOjpNb2R1bGUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6TW9kdWxlIG5vdCBmb3VuZCIpCitlbmRpZigpCitpZihOT1QgVEFSR0VUIFB5dGhvbjM6OlB5dGhvbikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpQeXRob24gbm90IGZvdW5kIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24vQ01ha2VMaXN0cy50eHQKaW5kZXggM2VlMzhlMy4uZTg4MjhhMiAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24vQ01ha2VMaXN0cy50eHQKQEAgLTgsNiArOCwxMiBAQAogaWYgKE5PVCBQeXRob25fRk9VTkQpCiAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0iKQogZW5kaWYoKQoraWYgKE5PVCBQeXRob25fRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059LCBDT01QT05FTlQgJ0RldmVsb3BtZW50Lk1vZHVsZSciKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob25fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0sIENPTVBPRU5FTlQgJ0RldmVsb3BtZW50LkVtYmVkJyIpCitlbmRpZigpCiAKIGlmKE5PVCBUQVJHRVQgUHl0aG9uOjpJbnRlcnByZXRlcikKICAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob246OkludGVycHJldGVyIG5vdCBmb3VuZCIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjIvQ01ha2VMaXN0cy50eHQKaW5kZXggY2Y3N2NhMi4uNjA5ZDgwZiAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24yL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMi9DTWFrZUxpc3RzLnR4dApAQCAtMTMsNiArMTMsMTUgQEAKIGlmIChOT1QgUHl0aG9uMl9GT1VORCkKICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDIiKQogZW5kaWYoKQoraWYgKE5PVCBQeXRob24yX0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMiAnRGV2ZWxvcG1lbnQnIGNvbXBvbmVudCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMiAnRGV2ZWxvcG1lbnQuTW9kdWxlJyBjb21wb25lbnQiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24yX0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMiAnRGV2ZWxvcG1lbnQuRW1iZWQnIGNvbXBvbmVudCIpCitlbmRpZigpCiAKIGlmKE5PVCBUQVJHRVQgUHl0aG9uMjo6SW50ZXJwcmV0ZXIpCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMkVtYmVkZGVkL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24yRW1iZWRkZWQvQ01ha2VMaXN0cy50eHQKaW5kZXggMDExNWRlYS4uMWNmNjAzNCAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24yRW1iZWRkZWQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24yRW1iZWRkZWQvQ01ha2VMaXN0cy50eHQKQEAgLTQsMTAgKzQsMjMgQEAKIAogaW5jbHVkZShDVGVzdCkKIAotZmluZF9wYWNrYWdlKFB5dGhvbjIgUkVRVUlSRUQgQ09NUE9ORU5UUyBEZXZlbG9wbWVudCkKK2ZpbmRfcGFja2FnZShQeXRob24yIFJFUVVJUkVEIENPTVBPTkVOVFMgRGV2ZWxvcG1lbnQuRW1iZWQpCiBpZiAoTk9UIFB5dGhvbjJfRk9VTkQpCiAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAyIikKIGVuZGlmKCkKK2lmIChQeXRob24yX0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uIDIsIENPTVBPTkVOVCAnRGV2ZWxvcG1lbnQnIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCitpZiAoUHl0aG9uMl9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMiwgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5Nb2R1bGUnIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMiwgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5FbWJlZCcgbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYoVEFSR0VUIFB5dGhvbjI6Ok1vZHVsZSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpNb2R1bGUgdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKIAogaWYoTk9UIFRBUkdFVCBQeXRob24yOjpQeXRob24pCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6UHl0aG9uIG5vdCBmb3VuZCIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjJNb2R1bGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjJNb2R1bGUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjMzM5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMk1vZHVsZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDM3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RQeXRob24yTW9kdWxlIEMpCisKK2luY2x1ZGUoQ1Rlc3QpCisKK2ZpbmRfcGFja2FnZShQeXRob24yIFJFUVVJUkVEIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQuTW9kdWxlKQoraWYgKE5PVCBQeXRob24yX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMiIpCitlbmRpZigpCitpZiAoUHl0aG9uMl9EZXZlbG9wbWVudF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbiAyLCBDT01QT05FTlQgJ0RldmVsb3BtZW50JyB1bmV4cGVjdGVkbHkgZm91bmQiKQorZW5kaWYoKQoraWYgKFB5dGhvbjJfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMiwgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5FbWJlZCcgdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uMl9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMiwgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5Nb2R1bGUnIG5vdCBmb3VuZCIpCitlbmRpZigpCisKK2lmKE5PVCBUQVJHRVQgUHl0aG9uMjo6SW50ZXJwcmV0ZXIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYoVEFSR0VUIFB5dGhvbjI6OlB5dGhvbikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpQeXRob24gdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKK2lmKE5PVCBUQVJHRVQgUHl0aG9uMjo6TW9kdWxlKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6Ok1vZHVsZSBub3QgZm91bmQiKQorZW5kaWYoKQorCitQeXRob24yX2FkZF9saWJyYXJ5IChzcGFtMiBNT0RVTEUgLi4vc3BhbS5jKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMgKHNwYW0yIFBSSVZBVEUgUFlUSE9OMikKKworYWRkX3Rlc3QgKE5BTUUgcHl0aG9uMl9zcGFtMgorICAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiUFlUSE9OUEFUSD0kPFRBUkdFVF9GSUxFX0RJUjpzcGFtMj4iCisgICAgICAgICAgIiR7UHl0aG9uMl9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzcGFtMjsgc3BhbTIuc3lzdGVtKFwiY2RcIikiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zL0NNYWtlTGlzdHMudHh0CmluZGV4IDY2OTFhNDguLmQ2ZTVmZGIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjMvQ01ha2VMaXN0cy50eHQKQEAgLTEzLDE2ICsxMywyNSBAQAogaWYgKE5PVCBQeXRob24zX0ZPVU5EKQogICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMyIpCiBlbmRpZigpCitpZiAoTk9UIFB5dGhvbjNfRGV2ZWxvcG1lbnRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAzICdEZXZlbG9wbWVudCcgY29tcG9uZW50IikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uM19EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAzICdEZXZlbG9wbWVudC5Nb2R1bGUnIGNvbXBvbmVudCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjNfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAzICdEZXZlbG9wbWVudC5FbWJlZCcgY29tcG9uZW50IikKK2VuZGlmKCkKIAogaWYoTk9UIFRBUkdFVCBQeXRob24zOjpJbnRlcnByZXRlcikKLSAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6OkludGVycHJldGVyIG5vdCBmb3VuZCIpCiBlbmRpZigpCiAKIGlmKE5PVCBUQVJHRVQgUHl0aG9uMzo6UHl0aG9uKQotICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6OlB5dGhvbiBub3QgZm91bmQiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6OlB5dGhvbiBub3QgZm91bmQiKQogZW5kaWYoKQogaWYoTk9UIFRBUkdFVCBQeXRob24zOjpNb2R1bGUpCi0gIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6TW9kdWxlIG5vdCBmb3VuZCIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6TW9kdWxlIG5vdCBmb3VuZCIpCiBlbmRpZigpCiAKIFB5dGhvbjNfYWRkX2xpYnJhcnkgKHNwYW0zIE1PRFVMRSAuLi9zcGFtLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjNFbWJlZGRlZC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uM0VtYmVkZGVkL0NNYWtlTGlzdHMudHh0CmluZGV4IDRlYjdlYmMuLjE4NGMwYjQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uM0VtYmVkZGVkL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uM0VtYmVkZGVkL0NNYWtlTGlzdHMudHh0CkBAIC00LDEwICs0LDIzIEBACiAKIGluY2x1ZGUoQ1Rlc3QpCiAKLWZpbmRfcGFja2FnZShQeXRob24zIFJFUVVJUkVEIENPTVBPTkVOVFMgRGV2ZWxvcG1lbnQpCitmaW5kX3BhY2thZ2UoUHl0aG9uMyBSRVFVSVJFRCBDT01QT05FTlRTIERldmVsb3BtZW50LkVtYmVkKQogaWYgKE5PVCBQeXRob24zX0ZPVU5EKQogICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMyIpCiBlbmRpZigpCitpZiAoUHl0aG9uM19EZXZlbG9wbWVudF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbiAzLCBDT01QT05FTlQgJ0RldmVsb3BtZW50JyB1bmV4cGVjdGVkbHkgZm91bmQiKQorZW5kaWYoKQoraWYgKFB5dGhvbjNfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uIDMsIENPTVBPTkVOVCAnRGV2ZWxvcG1lbnQuTW9kdWxlJyB1bmV4cGVjdGVkbHkgZm91bmQiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24zX0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uIDMsIENPTVBPTkVOVCAnRGV2ZWxvcG1lbnQuRW1iZWQnIG5vdCBmb3VuZCIpCitlbmRpZigpCisKK2lmKFRBUkdFVCBQeXRob24zOjpNb2R1bGUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6TW9kdWxlIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCiAKIGlmKE5PVCBUQVJHRVQgUHl0aG9uMzo6UHl0aG9uKQogICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6OlB5dGhvbiBub3QgZm91bmQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zTW9kdWxlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zTW9kdWxlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NmY0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjNNb2R1bGUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0UHl0aG9uM01vZHVsZSBDKQorCitpbmNsdWRlKENUZXN0KQorCitmaW5kX3BhY2thZ2UoUHl0aG9uMyBSRVFVSVJFRCBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50Lk1vZHVsZSkKK2lmIChOT1QgUHl0aG9uM19GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDMiKQorZW5kaWYoKQoraWYgKFB5dGhvbjNfRGV2ZWxvcG1lbnRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMywgQ09NUE9ORU5UICdEZXZlbG9wbWVudCcgdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKK2lmIChQeXRob24zX0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uIDMsIENPTVBPTkVOVCAnRGV2ZWxvcG1lbnQuRW1iZWQnIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjNfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uIDMsIENPTVBPTkVOVCAnRGV2ZWxvcG1lbnQuTW9kdWxlJyBub3QgZm91bmQiKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIFB5dGhvbjM6OkludGVycHJldGVyKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6OkludGVycHJldGVyIG5vdCBmb3VuZCIpCitlbmRpZigpCisKK2lmKFRBUkdFVCBQeXRob24zOjpQeXRob24pCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6UHl0aG9uIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCitpZihOT1QgVEFSR0VUIFB5dGhvbjM6Ok1vZHVsZSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpNb2R1bGUgbm90IGZvdW5kIikKK2VuZGlmKCkKKworUHl0aG9uM19hZGRfbGlicmFyeSAoc3BhbTMgTU9EVUxFIC4uL3NwYW0uYykKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zIChzcGFtMyBQUklWQVRFIFBZVEhPTjMpCisKK2FkZF90ZXN0IChOQU1FIHB5dGhvbjNfc3BhbTMKKyAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgIlBZVEhPTlBBVEg9JDxUQVJHRVRfRklMRV9ESVI6c3BhbTM+IgorICAgICAgICAgICIke1B5dGhvbjNfRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3BhbTM7IHNwYW0zLnN5c3RlbShcImNkXCIpIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFJ1YnkvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0ODA3YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNTcgQEAKK2lmKENNYWtlX1RFU1RfRmluZFJ1YnkpCisKKyAgIyBMb29rcyBmb3IgcnVieSA+PTEuOS45LCB3aGljaCBpcyB0cnVlIG9uIGFueSBVYnVudHUgKHRoYXQgaW5zdGFsbHMgaXQpIG9yIG1hY09TICg+IDEwLjkpCisgIGFkZF90ZXN0KE5BTUUgRmluZFJ1YnkuVGVzdCBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L1Rlc3QiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFJ1YnkvVGVzdCIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UnVieQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorCisgICMgTG9va3MgZm9yIHJ1YnkgPj0gNTAuMS4wLCB3aGljaCBzaG91bGQgbG9naWNhbGx5IGZhaWwKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5GYWlsIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFJ1YnkvRmFpbCIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUnVieS9GYWlsIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RSdWJ5RmFpbAorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBzZXRfdGVzdHNfcHJvcGVydGllcyhGaW5kUnVieS5GYWlsIFBST1BFUlRJRVMKKyAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiQ291bGQgTk9UIGZpbmQgUnVieS4qKFJlcXVpcmVkIGlzIGF0IGxlYXN0IHZlcnNpb24gXCJbMC05XStcXC5bMC05XStcXC5bMC05XStcIikiKQorCisgICMgTG9va3MgZm9yIDEuOS45IEVYQUNUTFksIHdoaWNoIHVubGlrZSB0aGUgIkZpbmRSdWJ5IiB0ZXN0IGFib3ZlIHdpbGwgZmFpbCBvbiBldmVyeSBtYWNoaW5lCisgICMgc2luY2UgdGhpcyB2ZXJzaW9uIGRvZXNuJ3QgZXhpc3QgKHJ1YnkgZ29lcyBmcm9tIDEuOS4zIHRvIDIuMC4wKQorICBhZGRfdGVzdChOQU1FIEZpbmRSdWJ5LkZhaWxFeGFjdCBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdCIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUnVieS9GYWlsRXhhY3QiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFJ1YnlGYWlsRXhhY3QKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmluZFJ1YnkuRmFpbEV4YWN0IFBST1BFUlRJRVMKKyAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiQ291bGQgTk9UIGZpbmQgUnVieTogRm91bmQgdW5zdWl0YWJsZSB2ZXJzaW9uIFwiLipcIiwgYnV0IHJlcXVpcmVkIGlzLipleGFjdCB2ZXJzaW9uIFwiWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rXCIgXFwoZm91bmQgLipcXCkiKQorCisgICMgUlZNIHNwZWNpZmljIHRlc3QKKyAgaWYoQ01ha2VfVEVTVF9GaW5kUnVieV9SVk0pCisgICAgYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5Sdm0gQ09NTUFORAorICAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUnVieS9Sdm0iCisgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUnVieS9Sdm0iCisgICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RSVk0KKyAgICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAgICkKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvRmFpbC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRSdWJ5L0ZhaWwvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4NWJhNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L0ZhaWwvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNykKK3Byb2plY3QoVGVzdFJ1YnlGYWlsIExBTkdVQUdFUyBOT05FKQorCisjIFNob3VsZCBhbHdheXMgZmFpbCBzaW5jZSB0aGVyZSBpcyBOTyBydWJ5IDUwLjEuMCB5ZXQuCitmaW5kX3BhY2thZ2UoUnVieSA1MC4xLjAgUkVRVUlSRUQpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUnVieS9GYWlsRXhhY3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUnVieS9GYWlsRXhhY3QvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViYzBhZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDggQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdChUZXN0UnVieUZhaWxFeGFjdCBMQU5HVUFHRVMgTk9ORSkKKworIyBTaG91bGQgYWx3YXlzIGZhaWwgc2luY2UgdGhlcmUgaXMgTk8gcnVieSAxLjkuOSAoZ29lcyBmcm9tIDEuOS4zIHRvIDIuMC4wKQorZmluZF9wYWNrYWdlKFJ1YnkgMS45LjkgRVhBQ1QgUkVRVUlSRUQpCitpZiAoTk9UIFJ1YnlfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZmluZCBSdWJ5IDEuOS45IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDVmYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvUnZtL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNzUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdChUZXN0UlZNIExBTkdVQUdFUyBOT05FKQorCitpbmNsdWRlKENUZXN0KQorCisjIFRvIHJ1biB0aGlzIHRlc3QsIHlvdSBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIFJWTSBydWJ5IGluc3RhbGxlZAorIyBhbmQgdG8gZW5zdXJlIHRoYXQgdGhlIGVudiB2YXJpYWJsZSAnTVlfUlVCWV9IT01FJyBpcyBzZXQgdG8gYSB2YWxpZCBSVk0gcnVieSB3aGVuIHlvdSBydW4gdGhlIHRlc3QKKyMgKHdoaWNoIGlzIHRoZSBjYXNlIGlmIHlvdSBoYXZlIGRvbmUgYHJ2bSB1c2UgeC55LnpgLCBidXQgY291bGQgYmUgbWFudWFsbHkgc2V0IHRvbykKKworIyBQcm9wZXJseSB1c2luZyBydm0gd291bGQgcmVxdWlyZSBzb3VyY2luZyBhIHNoZWxsIHNjcmlwdCwgZWcgYHNvdXJjZSAiJEhPTUUvLnJ2bS9zY3JpcHRzL3J2bSJgCisjIEluc3RlYWQsIEknbGwganVzdCByZWx5IG9uIHRoZSBlbnYgdmFyaWFibGUgTVlfUlVCWV9IT01FCitzZXQoTVlfUlVCWV9IT01FICIkRU5We01ZX1JVQllfSE9NRX0iKQoraWYoTk9UIE1ZX1JVQllfSE9NRSkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRW52IHZhcmlhYmxlIE1ZX1JVQllfSE9NRSBzaG91bGQgYmUgc2V0IHRvIGEgdmFsaWQgUlZNIHJ1YnkgbG9jYXRpb24sIG9yIHlvdSBzaG91bGQgY2FsbCBgcnZtIHVzZSB4LnkuemAgYmVmb3JlIikKK2VuZGlmKCkKK2V4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtNWV9SVUJZX0hPTUV9L2Jpbi9ydWJ5IiAtZSAicHV0cyBSVUJZX1ZFUlNJT04iCisgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIFJWTV9SVUJZX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCisKK2lmIChyZXN1bHQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gZGV0ZWN0IFJWTSBydWJ5IHZlcnNpb24gZnJvbSBgJHtNWV9SVUJZX0hPTUV9L2Jpbi9ydWJ5YDogJHtSVk1fUlVCWV9WRVJTSU9OfSIpCitlbmRpZigpCisKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1NWV9SVUJZX0hPTUUgLS11bnNldD1QQVRICisgICAgICAgICAgICAgICAgICAgICAgICAid2hpY2giICJydWJ5IgorICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBTWVNURU1fUlVCWQorICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworaWYgKFNZU1RFTV9SVUJZIE1BVENIRVMgIl4ke01ZX1JVQllfSE9NRX0vLisiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gZmluZCBzeXN0ZW0gcnVieSwgZm91bmQgJHtTWVNURU1fUlVCWX0gd2hpY2ggaXMgcGFydCBvZiBNWV9SVUJZX0hPTUU9JHtNWV9SVUJZX0hPTUV9IikKK2VuZGlmKCkKKworIyBDaGVjayB2ZXJzaW9uIG9mIHRoZSBzeXN0ZW0gcnVieSBleGVjdXRhYmxlLgorZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke1NZU1RFTV9SVUJZfSIgLWUgInB1dHMgUlVCWV9WRVJTSU9OIgorICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBTWVNURU1fUlVCWV9WRVJTSU9OCisgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCisgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorCitpZiAocmVzdWx0KQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiVW5hYmxlIHRvIGRldGVjdCBzeXN0ZW0gcnVieSB2ZXJzaW9uIGZyb20gJyR7U1lTVEVNX1JVQll9JzogJHtTWVNURU1fUlVCWV9WRVJTSU9OfSIpCitlbmRpZigpCisKK2lmKFNZU1RFTV9SVUJZX1ZFUlNJT04gVkVSU0lPTl9FUVVBTCBSVk1fUlVCWV9WRVJTSU9OKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJZb3VyIFJWTSBSdWJ5IFZlcnNpb24gYW5kIHlvdXIgU3lzdGVtIHJ1YnkgdmVyc2lvbiBhcmUgdGhlIHNhbWUgKCR7UlZNX1JVQllfVkVSU0lPTn0pLiIpCitlbmRpZigpCisKK21lc3NhZ2UoIkZvdW5kIFN5c3RlbSBSdWJ5ICgke1NZU1RFTV9SVUJZX1ZFUlNJT059KTogJHtTWVNURU1fUlVCWX0iKQorbWVzc2FnZSgiRm91bmQgIFJWTSAgIFJ1YnkgKCR7UlZNX1JVQllfVkVSU0lPTn0pOiAke01ZX1JVQllfSE9NRX0vYmluL3J1YnkiKQorCithZGRfdGVzdChOQU1FIEZpbmRSdWJ5LlJ2bURlZmF1bHQKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiTVlfUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFJVQllfSE9NRT0ke01ZX1JVQllfSE9NRX0iCisgICAgICAgICAgICAgICAgIC1QICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1J2bURlZmF1bHQuY21ha2UiKQorCithZGRfdGVzdChOQU1FIEZpbmRSdWJ5LlJ2bU9ubHkKKyAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52IC0tdW5zZXQ9UEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ZX1JVQllfSE9NRT0ke01ZX1JVQllfSE9NRX0iCisgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFJVQllfSE9NRT0ke01ZX1JVQllfSE9NRX0iCisgICAgICAgICAgICAgICAgICItRFJWTV9SVUJZX1ZFUlNJT049JHtSVk1fUlVCWV9WRVJTSU9OfSIgIi1EU1lTVEVNX1JVQllfVkVSU0lPTj0ke1NZU1RFTV9SVUJZX1ZFUlNJT059IgorICAgICAgICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Sdm1Pbmx5LmNtYWtlIikKK2FkZF90ZXN0KE5BTUUgRmluZFJ1YnkuVW5zZXRSdm1Pbmx5CisgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1NWV9SVUJZX0hPTUUgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iCisgICAgICAgICAgICAgICAgICIke0NNQUtFX0NPTU1BTkR9IiAiLURSVk1fUlVCWV9WRVJTSU9OPSR7UlZNX1JVQllfVkVSU0lPTn0iICItRFNZU1RFTV9SVUJZX1ZFUlNJT049JHtTWVNURU1fUlVCWV9WRVJTSU9OfSIKKyAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vUnZtT25seS5jbWFrZSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFJ1YnkuUnZtU3RhbmRhcmQKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTVlfUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFJVQllfSE9NRT0ke01ZX1JVQllfSE9NRX0iCisgICAgICAgICAgICAgICAgIC1QICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1J2bVN0YW5kYXJkLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9Sdm1EZWZhdWx0LmNtYWtlIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bURlZmF1bHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2YjkxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9Sdm1EZWZhdWx0LmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfUFJFRklYRVMgIiIpCitzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICIiKQorCitmaW5kX3BhY2thZ2UgKFJ1YnkgMi4xLjEgUkVRVUlSRUQpCitpZiAoTk9UIFJVQllfRVhFQ1VUQUJMRSBNQVRDSEVTICJeJHtSVUJZX0hPTUV9Ly4rIikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWxlZCB0byB1c2UgUlZNIGVudmlyb25tZW50OiAke1JVQllfRVhFQ1VUQUJMRX0sICR7UlVCWV9IT01FfSIpCitlbmRpZigpCisKK2ZpbmRfcGFja2FnZSAoUnVieSAyLjEgUkVRVUlSRUQpCitpZiAoTk9UIFJVQllfRVhFQ1VUQUJMRSBNQVRDSEVTICJeJHtSVUJZX0hPTUV9Ly4rIikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWxlZCB0byB1c2UgUlZNIGVudmlyb25tZW50OiAke1JVQllfRVhFQ1VUQUJMRX0sICR7UlVCWV9IT01FfSIpCitlbmRpZigpCisKK2ZpbmRfcGFja2FnZSAoUnVieSBSRVFVSVJFRCkKK2lmIChOT1QgUlVCWV9FWEVDVVRBQkxFIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIHVzZSBSVk0gZW52aXJvbm1lbnQ6ICR7UlVCWV9FWEVDVVRBQkxFfSwgJHtSVUJZX0hPTUV9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9Sdm1Pbmx5LmNtYWtlIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bU9ubHkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1MWE3YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9Sdm1Pbmx5LmNtYWtlCkBAIC0wLDAgKzEsNDEgQEAKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfUFJFRklYRVMgIiIpCitzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICIiKQorCitzZXQoUnVieV9GSU5EX1ZJUlRVQUxFTlYgT05MWSkKKworIyBUZXN0OiBGaW5kUnVieS5Sdm1Pbmx5CitpZiAoUlVCWV9IT01FKQorICAjID0+IFRyeWluZyB0byBmaW5kIGV4YWN0bHkgc3lzdGVtIHJ1YnkgdXNpbmcgT05MWSB2aXJ0dWFsIGVudmlyb25tZW50IHNob3VsZCBmYWlsCisgIGZpbmRfcGFja2FnZSAoUnVieSAke1NZU1RFTV9SVUJZX1ZFUlNJT059IEVYQUNUIFFVSUVUKQorICBpZihSdWJ5X0ZPVU5EKQorICAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJSdWJ5IHVuZXhwZWN0ZWRseSBmb3VuZC4iKQorICBlbmRpZigpCisgICMgQW5kIHNob3VsZCB3b3JrIHRvIGZpbmQgdGhlIHJ2bSB2ZXJzaW9uCisgIGZpbmRfcGFja2FnZSAoUnVieSAke1JWTV9SVUJZX1ZFUlNJT059IEVYQUNUIFFVSUVUKQorICBpZihSdWJ5X0ZPVU5EKQorICAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJSdWJ5IHVuZXhwZWN0ZWRseSBmb3VuZC4iKQorICBlbmRpZigpCitlbmRpZigpCisKKworIyBUZXN0OiBGaW5kUnVieS5VbnNldFJ2bU9ubHkKK2lmIChOT1QgUlVCWV9IT01FKQorCisgICMgSWYgRU5We01ZX1JVQllfSE9NRX0gaXNuJ3QgZGVmaW5lZCwgaXQgc2hvdWxkIGRlZmF1bHQgYmFjayB0byAiU1RBTkRBUkQiCisgICMgQXQgd2hpY2ggcG9pbnQ6CisKKyAgIyBJdCBzaG91bGRuJ3QgZmluZCB0aGUgUlZNIHJ1YnkKKyAgZmluZF9wYWNrYWdlIChSdWJ5ICR7UlZNX1JVQllfVkVSU0lPTn0gRVhBQ1QgUVVJRVQpCisgIGlmKFJ1YnlfRk9VTkQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRm91bmQgUlZNIHJ1Ynkgd2hlbiBleHBlY3Rpbmcgc3lzdGVtIikKKyAgZW5kaWYoKQorCisgICMgaXQgc2hvdWxkIGZpbmQgdGhlIHN5c3RlbSBydWJ5CisgIGZpbmRfcGFja2FnZSAoUnVieSAke1NZU1RFTV9SVUJZX1ZFUlNJT059IEVYQUNUIFFVSUVUKQorICBpZihOT1QgUnVieV9GT1VORCkKKyAgICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUnVieSBub3QgZm91bmQuIikKKyAgZW5kaWYoKQorICBpZiAoUnVieV9GT1VORCBNQVRDSEVTICJeJHtSVUJZX0hPTUV9Ly4rIikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZmluZCBzeXN0ZW0gcnVieSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9Sdm1TdGFuZGFyZC5jbWFrZSBiL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9Sdm1TdGFuZGFyZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJlZmRiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L1J2bS9Sdm1TdGFuZGFyZC5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfUFJFRklYRVMgIiIpCitzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICIiKQorCitzZXQgKFJ1YnlfRklORF9WSVJUVUFMRU5WIFNUQU5EQVJEKQorZmluZF9wYWNrYWdlIChSdWJ5IFJFUVVJUkVEKQorCitpZiAoUlVCWV9FWEVDVVRBQkxFIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUlZNIHJ1YnkgdW5leHBlY3RlZGx5IGZvdW5kIGF0ICR7UlVCWV9FWEVDVVRBQkxFfSwgbWF0Y2hlcyAke1JVQllfSE9NRX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRSdWJ5L1Rlc3QvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmM2VjMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRSdWJ5L1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxNCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCitwcm9qZWN0KFRlc3RSdWJ5IExBTkdVQUdFUyBDKQoraW5jbHVkZShDVGVzdCkKKworZmluZF9wYWNrYWdlKFJ1YnkgMS45LjkgUkVRVUlSRUQpCitpZiAoTk9UIFJ1YnlfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZmluZCBSdWJ5ID49MS45LjkiKQorZW5kaWYoKQorCithZGRfZXhlY3V0YWJsZShydWJ5X3ZlcnNpb24gcnVieV92ZXJzaW9uLmMpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhydWJ5X3ZlcnNpb24gUFJJVkFURSAke1J1YnlfSU5DTFVERV9ESVJTfSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhydWJ5X3ZlcnNpb24gUFJJVkFURSAke1J1YnlfTElCUkFSSUVTfSkKKworYWRkX3Rlc3QoTkFNRSBydWJ5X3ZlcnNpb24gQ09NTUFORCBydWJ5X3ZlcnNpb24pCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUnVieS9UZXN0L3J1YnlfdmVyc2lvbi5jIGIvVGVzdHMvRmluZFJ1YnkvVGVzdC9ydWJ5X3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODAwNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvVGVzdC9ydWJ5X3ZlcnNpb24uYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlICJydWJ5LmgiCisKK2ludCBtYWluKHZvaWQpCit7CisgIHJ1Ynlfc2hvd192ZXJzaW9uKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFNETC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRTREwvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4NjIwNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRTREwvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMCBAQAorYWRkX3Rlc3QoTkFNRSBGaW5kU0RMLlRlc3QgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kU0RML1Rlc3QiCisgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRTREwvVGVzdCIKKyAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgLS1idWlsZC1wcm9qZWN0IFRlc3RGaW5kU0RMCisgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kU0RML1Rlc3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kU0RML1Rlc3QvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkNGY0YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRTREwvVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE5IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorcHJvamVjdChUZXN0RmluZFNETCBDKQoraW5jbHVkZShDVGVzdCkKKworZmluZF9wYWNrYWdlKFNETCkKKworYWRkX2RlZmluaXRpb25zKAorICAtRENNQUtFX0VYUEVDVEVEX1NETF9WRVJTSU9OX01BSk9SPSR7U0RMX1ZFUlNJT05fTUFKT1J9CisgIC1EQ01BS0VfRVhQRUNURURfU0RMX1ZFUlNJT05fTUlOT1I9JHtTRExfVkVSU0lPTl9NSU5PUn0KKyAgLURDTUFLRV9FWFBFQ1RFRF9TRExfVkVSU0lPTl9QQVRDSD0ke1NETF9WRVJTSU9OX1BBVENIfSkKKworYWRkX2V4ZWN1dGFibGUodGVzdF9zZGxfdGd0IG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3NkbF90Z3QgU0RMOjpTREwpCithZGRfdGVzdChOQU1FIHRlc3Rfc2RsX3RndCBDT01NQU5EIHRlc3Rfc2RsX3RndCkKKworYWRkX2V4ZWN1dGFibGUodGVzdF9zZGxfdmFyIG1haW4uYykKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHRlc3Rfc2RsX3ZhciBQUklWQVRFICR7U0RMX0lOQ0xVREVfRElSU30pCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9zZGxfdmFyIFBSSVZBVEUgJHtTRExfTElCUkFSSUVTfSkKK2FkZF90ZXN0KE5BTUUgdGVzdF9zZGxfdmFyIENPTU1BTkQgdGVzdF9zZGxfdmFyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFNETC9UZXN0L21haW4uYyBiL1Rlc3RzL0ZpbmRTREwvVGVzdC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU3Mjg5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRTREwvVGVzdC9tYWluLmMKQEAgLTAsMCArMSwxOCBAQAorI2luY2x1ZGUgPFNETC5oPgorCitpbnQgbWFpbigpCit7CisgIC8vIFRlc3QgMSByZXF1aXJlcyBoZWFkZXJzIG9ubHkuCisgIFNETF92ZXJzaW9uIGNvbXBpbGVkOworICBTRExfVkVSU0lPTigmY29tcGlsZWQpOworICBpZiAoY29tcGlsZWQubWFqb3IgIT0gQ01BS0VfRVhQRUNURURfU0RMX1ZFUlNJT05fTUFKT1IgfHwKKyAgICAgIGNvbXBpbGVkLm1pbm9yICE9IENNQUtFX0VYUEVDVEVEX1NETF9WRVJTSU9OX01JTk9SIHx8CisgICAgICBjb21waWxlZC5wYXRjaCAhPSBDTUFLRV9FWFBFQ1RFRF9TRExfVkVSU0lPTl9QQVRDSCkKKyAgICByZXR1cm4gMTsKKworICAvLyBUZXN0IDIgcmVxdWlyZXMgdG8gbGluayB0byB0aGUgbGlicmFyeS4KKyAgaWYgKFNETF9XYXNJbml0KFNETF9JTklUX1ZJREVPIHwgU0RMX0lOSVRfQVVESU8pICE9IDApCisgICAgcmV0dXJuIDI7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kVElGRi9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFRJRkYvVGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCA4NTQ1M2VkLi5lMjM1ZGIzIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kVElGRi9UZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRUSUZGL1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTEsMTQgKzEsMjMgQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCi1wcm9qZWN0KFRlc3RGaW5kVElGRiBDKQorcHJvamVjdChUZXN0RmluZFRJRkYpCiBpbmNsdWRlKENUZXN0KQogCi1maW5kX3BhY2thZ2UoVElGRiBSRVFVSVJFRCkKK2ZpbmRfcGFja2FnZShUSUZGIFJFUVVJUkVEIENPTVBPTkVOVFMgQ1hYKQogCiBhZGRfZXhlY3V0YWJsZSh0ZXN0X3RpZmZfdGd0IG1haW4uYykKIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3RpZmZfdGd0IFRJRkY6OlRJRkYpCiBhZGRfdGVzdChOQU1FIHRlc3RfdGlmZl90Z3QgQ09NTUFORCB0ZXN0X3RpZmZfdGd0KQogCithZGRfZXhlY3V0YWJsZSh0ZXN0X3RpZmZ4eF90Z3QgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF90aWZmeHhfdGd0IFRJRkY6OkNYWCkKK2FkZF90ZXN0KE5BTUUgdGVzdF90aWZmeHhfdGd0IENPTU1BTkQgdGVzdF90aWZmeHhfdGd0KQorCiBhZGRfZXhlY3V0YWJsZSh0ZXN0X3RpZmZfdmFyIG1haW4uYykKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHRlc3RfdGlmZl92YXIgUFJJVkFURSAke1RJRkZfSU5DTFVERV9ESVJTfSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3RpZmZfdmFyIFBSSVZBVEUgJHtUSUZGX0xJQlJBUklFU30pCiBhZGRfdGVzdChOQU1FIHRlc3RfdGlmZl92YXIgQ09NTUFORCB0ZXN0X3RpZmZfdmFyKQorCithZGRfZXhlY3V0YWJsZSh0ZXN0X3RpZmZ4eF92YXIgbWFpbi5jeHgpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyh0ZXN0X3RpZmZ4eF92YXIgUFJJVkFURSAke1RJRkZfSU5DTFVERV9ESVJTfSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3RpZmZ4eF92YXIgUFJJVkFURSAke1RJRkZfTElCUkFSSUVTfSkKK2FkZF90ZXN0KE5BTUUgdGVzdF90aWZmeHhfdmFyIENPTU1BTkQgdGVzdF90aWZmeHhfdmFyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFRJRkYvVGVzdC9tYWluLmN4eCBiL1Rlc3RzL0ZpbmRUSUZGL1Rlc3QvbWFpbi5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwYTMxZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRUSUZGL1Rlc3QvbWFpbi5jeHgKQEAgLTAsMCArMSwxNiBAQAorI2luY2x1ZGUgPGZzdHJlYW0+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDx0aWZmaW8uaHh4PgorCitpbnQgbWFpbigpCit7CisgIC8qIFdpdGhvdXQgYW55IFRJRkYgZmlsZSB0byBvcGVuLCB0ZXN0IHRoYXQgdGhlIGNhbGwgZmFpbHMgYXMKKyAgICAgZXhwZWN0ZWQuICBUaGlzIHRlc3RzIHRoYXQgbGlua2luZyB3b3JrZWQuICovCisgIFRJRkYqIHRpZmYgPSBUSUZGT3BlbigiaW52YWxpZC50aWZmIiwgInIiKTsKKyAgYXNzZXJ0KCF0aWZmKTsKKworICBzdGQ6Omlmc3RyZWFtIHM7CisgIFRJRkYqIHRpZmZ4eCA9IFRJRkZTdHJlYW1PcGVuKCJpbnZhbGlkLnRpZmYiLCAmcyk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFZ1bGthbi9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFZ1bGthbi9UZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDBiMTNkNTMuLjlkMzZhMGQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kVnVsa2FuL1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTEzLDMgKzEzLDEyIEBACiB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyh0ZXN0X3ZhciBQUklWQVRFICR7VnVsa2FuX0lOQ0xVREVfRElSU30pCiB0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF92YXIgUFJJVkFURSAke1Z1bGthbl9MSUJSQVJJRVN9KQogYWRkX3Rlc3QoTkFNRSB0ZXN0X3ZhciBDT01NQU5EIHRlc3RfdmFyKQorCitpZihWdWxrYW5fR0xTTENfRVhFQ1VUQUJMRSkKKyAgYWRkX3Rlc3QoTkFNRSB0ZXN0X2dsc2xjCisgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CisgICAgIi1EVlVMS0FOX0dMU0xDX0VYRUNVVEFCTEU9JHtWdWxrYW5fR0xTTENfRVhFQ1VUQUJMRX0iCisgICAgIi1EVlVMS0FOX0dMU0xDX0VYRUNVVEFCTEVfVEFSR0VUPSQ8VEFSR0VUX0ZJTEU6VnVsa2FuOjpnbHNsYz4iCisgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vUnVuLWdsc2xjLmNtYWtlIgorICAgICkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9SdW4tZ2xzbGMuY21ha2UgYi9UZXN0cy9GaW5kVnVsa2FuL1Rlc3QvUnVuLWdsc2xjLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NmViOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kVnVsa2FuL1Rlc3QvUnVuLWdsc2xjLmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEyKQorCitmdW5jdGlvbihydW5fZ2xzbGMgZXhlIGV4ZV9kaXNwbGF5KQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke2V4ZX0gLS1oZWxwCisgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAorICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCisgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICkKKworICBpZihOT1QgcmVzdWx0IEVRVUFMIDApCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJSZXN1bHQgb2YgJHtleGVfZGlzcGxheX0gLS1oZWxwIGlzICR7cmVzdWx0fSwgc2hvdWxkIGJlIDAiKQorICBlbmRpZigpCisKKyAgaWYoTk9UIG91dHB1dCBNQVRDSEVTICJeZ2xzbGMgLSBDb21waWxlIHNoYWRlcnMgaW50byBTUElSLVYiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiT3V0cHV0IG9mICR7ZXhlX2Rpc3BsYXl9IC0taGVscCBpcyBcIiR7b3V0cHV0fVwiLCBzaG91bGQgYmVnaW4gd2l0aCBcImdsc2xjIC0gQ29tcGlsZSBzaGFkZXJzIGludG8gU1BJUi1WXCIiKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK3J1bl9nbHNsYygiJHtWVUxLQU5fR0xTTENfRVhFQ1VUQUJMRX0iICJcJHtWVUxLQU5fR0xTTENfRVhFQ1VUQUJMRX0iKQorcnVuX2dsc2xjKCIke1ZVTEtBTl9HTFNMQ19FWEVDVVRBQkxFX1RBUkdFVH0iICJWdWxrYW46Omdsc2xjIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9tYWluLmMgYi9UZXN0cy9GaW5kVnVsa2FuL1Rlc3QvbWFpbi5jCmluZGV4IGIyOWM5ZWMuLjFiZmY2NTEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9tYWluLmMKKysrIGIvVGVzdHMvRmluZFZ1bGthbi9UZXN0L21haW4uYwpAQCAtMiwxMCArMiwxMCBAQAogCiBpbnQgbWFpbigpCiB7Ci0gIFZrSW5zdGFuY2VDcmVhdGVJbmZvIGluc3RhbmNlQ3JlYXRlSW5mbyA9IHt9OworICBWa0luc3RhbmNlQ3JlYXRlSW5mbyBpbnN0YW5jZUNyZWF0ZUluZm8gPSB7IDAgfTsKICAgaW5zdGFuY2VDcmVhdGVJbmZvLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU5TVEFOQ0VfQ1JFQVRFX0lORk87CiAKLSAgVmtBcHBsaWNhdGlvbkluZm8gYXBwbGljYXRpb25JbmZvID0ge307CisgIFZrQXBwbGljYXRpb25JbmZvIGFwcGxpY2F0aW9uSW5mbyA9IHsgMCB9OwogICBhcHBsaWNhdGlvbkluZm8uc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9BUFBMSUNBVElPTl9JTkZPOwogICBhcHBsaWNhdGlvbkluZm8uYXBpVmVyc2lvbiA9IFZLX0FQSV9WRVJTSU9OXzFfMDsKICAgYXBwbGljYXRpb25JbmZvLmFwcGxpY2F0aW9uVmVyc2lvbiA9IFZLX01BS0VfVkVSU0lPTigxLCAwLCAwKTsKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRYMTEvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRYMTEvVGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCA3NjkyNzFmLi43MzI1YjMyIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kWDExL1Rlc3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFgxMS9UZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0yOSw2ICsyOSwxMSBAQAogc2V0KFgxMV9YMTFfRk9VTkQgJHtYMTFfRk9VTkR9KQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFgxMSkKIHRlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyBYYXUpCit0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGF3KQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhjYikKK3Rlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyBYMTFfeGNiKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhjYl9pY2NjbSkKK3Rlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyB4Y2JfeGtiKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhjb21wb3NpdGUpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGRhbWFnZSkKIHRlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyBYZG1jcCkKQEAgLTQxLDYgKzQ2LDggQEAKIHRlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50c19pZ25vcmUgWGZ0KQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhpKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhpbmVyYW1hKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhrYmNvbW1vbikKK3Rlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyB4a2Jjb21tb25fWDExKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhrYikKIHRlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyB4a2JmaWxlKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhtdSkKQEAgLTYxLDYgKzY4LDEwIEBACiAjIE5vdCBpbmNsdWRlZCBpbiBYMTFfTElCUkFSSUVTLgogZm9yZWFjaChsaWIKICAgICBYYXUKKyAgICBYYXcKKyAgICB4Y2IKKyAgICBYMTFfeGNiCisgICAgeGNiX2ljY2NtCiAgICAgWGNvbXBvc2l0ZQogICAgIFhkYW1hZ2UKICAgICBYZG1jcApAQCAtNjksNiArODAsOCBAQAogICAgIFhmaXhlcwogICAgIFhpCiAgICAgWGluZXJhbWEKKyAgICB4a2Jjb21tb24KKyAgICB4a2Jjb21tb25fWDExCiAgICAgWGtiCiAgICAgeGtiZmlsZQogICAgIFhtdQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFgxMS9UZXN0L21haW4uYyBiL1Rlc3RzL0ZpbmRYMTEvVGVzdC9tYWluLmMKaW5kZXggYzgxNDRlMC4uZjhjNzIzYyAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFgxMS9UZXN0L21haW4uYworKysgYi9UZXN0cy9GaW5kWDExL1Rlc3QvbWFpbi5jCkBAIC0zMDgsNiArMzA4LDI0IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfWDExX1hhdworIyAgaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorIyAgaW5jbHVkZSA8WDExL1hhdy9Cb3guaD4KKworc3RhdGljIHZvaWQgdGVzdF9YYXcodm9pZCkKK3sKKyAgWHJtT3B0aW9uRGVzY1JlYyBvcHRfdGFibGVbXSA9IHsgeyBOVUxMIH0gfTsKKworICBXaWRnZXQgdG9wbGV2ZWw7CisgIHRvcGxldmVsID0KKyAgICBYdEluaXRpYWxpemUoInRlc3QiLCAidGVzdCIsIG9wdF90YWJsZSwgWHROdW1iZXIob3B0X3RhYmxlKSwgTlVMTCwgTlVMTCk7CisgIFdpZGdldCBib3ggPQorICAgIFh0Q3JlYXRlTWFuYWdlZFdpZGdldCgidGVzdGJveCIsIGJveFdpZGdldENsYXNzLCB0b3BsZXZlbCwgTlVMTCwgMCk7CisgIHJldHVybjsKK30KKworI2VuZGlmCisKICNpbmNsdWRlIDxzdGRkZWYuaD4KIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKQEAgLTM5Miw2ICs0MTAsOSBAQAogI2lmZGVmIEhBVkVfWDExX1h2CiAgICAgdGVzdF9YdiwKICNlbmRpZgorI2lmZGVmIEhBVkVfWDExX1hhdworICAgIHRlc3RfWGF3LAorI2VuZGlmCiAgICAgTlVMTCwKICAgfTsKIApkaWZmIC0tZ2l0IGEvVGVzdHMvRm9ydHJhbk1vZHVsZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Gb3J0cmFuTW9kdWxlcy9DTWFrZUxpc3RzLnR4dAppbmRleCBkMDU2YjQzLi5iN2E2ZjY4IDEwMDY0NAotLS0gYS9UZXN0cy9Gb3J0cmFuTW9kdWxlcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Gb3J0cmFuTW9kdWxlcy9DTWFrZUxpc3RzLnR4dApAQCAtMjEsNyArMjEsNyBAQAogc3VibW9kdWxlICggcGFyZW50ICkgY2hpbGQKIGNvbnRhaW5zCiAgIG1vZHVsZSBwcm9jZWR1cmUgaWQKLSAgICBmID0geAorICAgIGlkID0geAogICBlbmQgcHJvY2VkdXJlIGlkCiBlbmQgc3VibW9kdWxlIGNoaWxkCiBwcm9ncmFtIG1haW4KZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRm9ydHJhbk9ubHkvQ01ha2VMaXN0cy50eHQKaW5kZXggZDk0NTM3NS4uNjM3ZjU4MSAxMDA2NDQKLS0tIGEvVGVzdHMvRm9ydHJhbk9ubHkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRm9ydHJhbk9ubHkvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkIChWRVJTSU9OIDIuOCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBwcm9qZWN0KEZvcnRyYW5Pbmx5IEZvcnRyYW4pCiBtZXNzYWdlKCJDVEVTVF9GVUxMX09VVFBVVCAiKQogCkBAIC01MSw0MCArNTEsMzYgQEAKICAgKQogYWRkX2RlcGVuZGVuY2llcyhjaGVja3NheWhlbGxvIHNheWhlbGxvKQogCi0jIEV4Y2x1ZGUgdGhpcyB0ZXN0IG9uIElCTSBYTCBmb3Igbm93IGJlY2F1c2UgdGhlIGNoZWNrIHN0cmFuZ2VseQotIyBmYWlscyB3aXRoICdsZDogMDcwNi0wMjkgVXNlIGEgbnVtYmVyIHdpdGggdGhlIC1IIGZsYWcnLgotaWYoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgWEwpCi0gIHNldChlcnJfbG9nICR7Q01BS0VfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9DTWFrZUVycm9yLmxvZykKLSAgZmlsZShSRU1PVkUgIiR7ZXJyX2xvZ30iKQotICBpbmNsdWRlKENoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzKQotICB1bnNldChIQVZFX1BSSU5UIENBQ0hFKQotICBDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFUyhbWworc2V0KGVycl9sb2cgJHtDTUFLRV9CSU5BUllfRElSfS9DTWFrZUZpbGVzL0NNYWtlRXJyb3IubG9nKQorZmlsZShSRU1PVkUgIiR7ZXJyX2xvZ30iKQoraW5jbHVkZShDaGVja0ZvcnRyYW5Tb3VyY2VDb21waWxlcykKK3Vuc2V0KEhBVkVfUFJJTlQgQ0FDSEUpCitDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFUyhbWwogICAgICAgUFJPR1JBTSBURVNUX0hBVkVfUFJJTlQKICAgICAgICAgUFJJTlQgKiwgJ0hlbGxvJwogICAgICAgRU5ECiBdXSBIQVZFX1BSSU5UKQotICBpZihOT1QgSEFWRV9QUklOVCkKLSAgICBpZihFWElTVFMgIiR7ZXJyX2xvZ30iKQotICAgICAgZmlsZShSRUFEICIke2Vycl9sb2d9IiBlcnIpCi0gICAgZW5kaWYoKQotICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIGVyciAiICAke2Vycn0iKQotICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVMgZm9yIEhBVkVfUFJJTlQgZmFpbGVkOlxuIgotICAgICAgIiR7ZXJyfSIpCitpZihOT1QgSEFWRV9QUklOVCkKKyAgaWYoRVhJU1RTICIke2Vycl9sb2d9IikKKyAgICBmaWxlKFJFQUQgIiR7ZXJyX2xvZ30iIGVycikKICAgZW5kaWYoKQorICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBlcnIgIiAgJHtlcnJ9IikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFUyBmb3IgSEFWRV9QUklOVCBmYWlsZWQ6XG4iCisgICAgIiR7ZXJyfSIpCitlbmRpZigpCiAKLSAgdW5zZXQoRm9ydHJhbl9CT0dVU19GTEFHIENBQ0hFKQotICBpbmNsdWRlKENoZWNrRm9ydHJhbkNvbXBpbGVyRmxhZykKLSAgQ0hFQ0tfRm9ydHJhbl9DT01QSUxFUl9GTEFHKC1fdGhpc19pc19ub3RfYV9mbGFnXyBGb3J0cmFuX0JPR1VTX0ZMQUcpCi0gIGlmIChGb3J0cmFuX0JPR1VTX0ZMQUcpCi0gICAgbWVzc2FnZShTRU5EX0VSUk9SICJDSEVDS19Gb3J0cmFuX0NPTVBJTEVSX0ZMQUcoKSBzdWNjZWVkZWQsIGJ1dCBzaG91bGQgaGF2ZSBmYWlsZWQiKQotICBlbmRpZigpCit1bnNldChGb3J0cmFuX0JPR1VTX0ZMQUcgQ0FDSEUpCitpbmNsdWRlKENoZWNrRm9ydHJhbkNvbXBpbGVyRmxhZykKK0NIRUNLX0ZvcnRyYW5fQ09NUElMRVJfRkxBRygtX3RoaXNfaXNfbm90X2FfZmxhZ18gRm9ydHJhbl9CT0dVU19GTEFHKQoraWYgKEZvcnRyYW5fQk9HVVNfRkxBRykKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJDSEVDS19Gb3J0cmFuX0NPTVBJTEVSX0ZMQUcoKSBzdWNjZWVkZWQsIGJ1dCBzaG91bGQgaGF2ZSBmYWlsZWQiKQorZW5kaWYoKQogCi0gIHVuc2V0KEZvcnRyYW5fUlVOX0ZMQUcgQ0FDSEUpCi0gIGluY2x1ZGUoQ2hlY2tGb3J0cmFuU291cmNlUnVucykKLSAgY2hlY2tfZm9ydHJhbl9zb3VyY2VfcnVucygicHJvZ3JhbSBhOyBlbmQgcHJvZ3JhbSIgRm9ydHJhbl9SVU5fRkxBRyBTUkNfRVhUIEY5MCkKLSAgaWYoTk9UIEZvcnRyYW5fUlVOX0ZMQUcpCi0gICAgbWVzc2FnZShTRU5EX0VSUk9SICJDSEVDS19Gb3J0cmFuX1NPVVJDRV9SVU5TKCkgZmFpbGVkIikKLSAgZW5kaWYoKQordW5zZXQoRm9ydHJhbl9SVU5fRkxBRyBDQUNIRSkKK2luY2x1ZGUoQ2hlY2tGb3J0cmFuU291cmNlUnVucykKK2NoZWNrX2ZvcnRyYW5fc291cmNlX3J1bnMoInByb2dyYW0gYTsgZW5kIHByb2dyYW0iIEZvcnRyYW5fUlVOX0ZMQUcgU1JDX0VYVCBGOTApCitpZihOT1QgRm9ydHJhbl9SVU5fRkxBRykKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJDSEVDS19Gb3J0cmFuX1NPVVJDRV9SVU5TKCkgZmFpbGVkIikKIGVuZGlmKCkKIAogIyBUZXN0IGdlbmVyYXRpb24gb2YgcHJlcHJvY2Vzc2VkIHNvdXJjZXMuCkBAIC0xMjAsMyArMTE2LDQ2IEBACiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgSW50ZWxJZkRlZiBQUk9QRVJUWSBGb3J0cmFuX0ZPUk1BVCBGSVhFRCkKICAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoSW50ZWxJZkRlZiBQUklWQVRFIFNPTUVfREVGKQogZW5kaWYoKQorCisjIFNraXAgdGhlc2UgdGVzdHMgaWYgY29tcGlsZXIvdmVyc2lvbiBkb2Vzbid0IGhhdmUgcHJlcHJvY2Vzc2luZyBmbGFncworaWYoKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIgQU5EIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNC40KQorICBPUiAoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiWEwiIEFORCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE1LjEuNikpCisgIHNldCh0ZXN0X3BwX2ZsYWdzIDApCitlbHNlKCkKKyAgc2V0KHRlc3RfcHBfZmxhZ3MgMSkKK2VuZGlmKCkKKworaWYodGVzdF9wcF9mbGFncykKKyAgIyBUZXN0IHRoYXQgd2UgY2FuIGFsd2F5cyBwcmVwcm9jZXNzIGEgdGFyZ2V0CisgIGFkZF9leGVjdXRhYmxlKHByZXByb2Nlc3NfdGFyZ2V0IHByZXByb2Nlc3MyLmYpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgcHJlcHJvY2Vzc190YXJnZXQgUFJPUEVSVFkgRm9ydHJhbl9QUkVQUk9DRVNTIE9OKQorCisgICMgVGVzdCB0aGF0IHdlIGNhbiBwcmVwcm9jZXNzIGEgc2luZ2xlIHNvdXJjZSBmaWxlCisgIGFkZF9leGVjdXRhYmxlKHByZXByb2Nlc3Nfc291cmNlIHByZXByb2Nlc3MzLmYpCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgcHJlcHJvY2VzczMuZiBQUk9QRVJUWSBGb3J0cmFuX1BSRVBST0NFU1MgT04pCitlbmRpZigpCisKKyMgVGVzdCB0aGF0IG5laXRoZXIgdGhlIGNvbXBpbGVyIG5vciBDTWFrZSBwZXJmb3JtcyB1bm5lY2Vzc2FyeSBwcmVwcm9jZXNzaW5nLgorYWRkX2xpYnJhcnkobm9fcHJlcHJvY2Vzc190YXJnZXRfbG93ZXIgU1RBVElDIG5vX3ByZXByb2Nlc3NfdGFyZ2V0X2xvd2VyLmYpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKG5vX3ByZXByb2Nlc3NfdGFyZ2V0X2xvd2VyIFBSSVZBVEUgLURJTlRFR0VSPW5vbnNlbnNlKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBub19wcmVwcm9jZXNzX3RhcmdldF9sb3dlciBQUk9QRVJUWSBGb3J0cmFuX1BSRVBST0NFU1MgT0ZGKQorYWRkX2xpYnJhcnkobm9fcHJlcHJvY2Vzc19zb3VyY2VfbG93ZXIgU1RBVElDIG5vX3ByZXByb2Nlc3Nfc291cmNlX2xvd2VyLmYpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKG5vX3ByZXByb2Nlc3Nfc291cmNlX2xvd2VyIFBSSVZBVEUgLURJTlRFR0VSPW5vbnNlbnNlKQorc2V0X3Byb3BlcnR5KFNPVVJDRSBub19wcmVwcm9jZXNzX3NvdXJjZV9sb3dlci5mIFBST1BFUlRZIEZvcnRyYW5fUFJFUFJPQ0VTUyBPRkYpCisKKyMgVGVzdCB0aGF0IHdlIGNhbiBleHBsaWNpdGx5IG5vdCBwcmVwcm9jZXNzIGEgdGFyZ2V0IG9yIHNvdXJjZS4KKyMgVGhpcyB3aWxsIG5vdCB3b3JrIG9uIGNlcnRhaW4gY29tcGlsZXJzIGR1ZSB0byBlaXRoZXIgbWlzc2luZyBhCisjICJkb24ndCBwcmVwcm9jZXNzIiBmbGFnLCBvciBkdWUgdG8gY2hvaWNlIG9mIGZpbGUgZXh0ZW5zaW9uLgoraWYodGVzdF9wcF9mbGFncyBBTkQgTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgTUFUQ0hFUyAiKEZsYW5nfE5BR3xQR0l8U3VuUHJvfFhMKSIpCisgIGFkZF9saWJyYXJ5KG5vX3ByZXByb2Nlc3NfdGFyZ2V0IFNUQVRJQyBub19wcmVwcm9jZXNzX3RhcmdldF91cHBlci5GKQorICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKG5vX3ByZXByb2Nlc3NfdGFyZ2V0IFBSSVZBVEUgLURJTlRFR0VSPW5vbnNlbnNlKQorICBhZGRfbGlicmFyeShub19wcmVwcm9jZXNzX3NvdXJjZSBTVEFUSUMgbm9fcHJlcHJvY2Vzc19zb3VyY2VfdXBwZXIuRikKKyAgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhub19wcmVwcm9jZXNzX3NvdXJjZSBQUklWQVRFIC1ESU5URUdFUj1ub25zZW5zZSkKKyAgaWYoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNyYXkiCisgICAgICBBTkQgTk9UICIke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUR9OyR7Q01BS0VfRm9ydHJhbl9TSU1VTEFURV9JRH0iIFNUUkVRVUFMICJJbnRlbDtNU1ZDIikKKyAgICB0YXJnZXRfc291cmNlcyhub19wcmVwcm9jZXNzX3RhcmdldCBQUklWQVRFIG5vX3ByZXByb2Nlc3NfdGFyZ2V0X2ZwcC5mcHApCisgICAgdGFyZ2V0X3NvdXJjZXMobm9fcHJlcHJvY2Vzc19zb3VyY2UgUFJJVkFURSBub19wcmVwcm9jZXNzX3NvdXJjZV9mcHAuZnBwKQorICBlbmRpZigpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgbm9fcHJlcHJvY2Vzc190YXJnZXQgUFJPUEVSVFkgRm9ydHJhbl9QUkVQUk9DRVNTIE9GRikKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBub19wcmVwcm9jZXNzX3NvdXJjZV91cHBlci5GIG5vX3ByZXByb2Nlc3Nfc291cmNlX2ZwcC5mcHAgUFJPUEVSVFkgRm9ydHJhbl9QUkVQUk9DRVNTIE9GRikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3Nfc291cmNlX2ZwcC5mcHAgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV9mcHAuZnBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNDg5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV9mcHAuZnBwCkBAIC0wLDAgKzEsMyBAQAorICAgICAgU1VCUk9VVElORSBOT1BSRVBST0NFU1NfU09VUkNFX0ZQUAorICAgICAgSU5URUdFUiBGCisgICAgICBFTkQKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3Nfc291cmNlX2xvd2VyLmYgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV9sb3dlci5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDg3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV9sb3dlci5mCkBAIC0wLDAgKzEsMyBAQAorICAgICAgU1VCUk9VVElORSBOT1BSRVBST0NFU1NfU09VUkNFX0xPV0VSCisgICAgICBJTlRFR0VSIEYKKyAgICAgIEVORApkaWZmIC0tZ2l0IGEvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc19zb3VyY2VfdXBwZXIuRiBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3Nfc291cmNlX3VwcGVyLkYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ODVjOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3Nfc291cmNlX3VwcGVyLkYKQEAgLTAsMCArMSwzIEBACisgICAgICBTVUJST1VUSU5FIE5PUFJFUFJPQ0VTU19TT1VSQ0VfVVBQRVIKKyAgICAgIElOVEVHRVIgRgorICAgICAgRU5ECmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3RhcmdldF9mcHAuZnBwIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfZnBwLmZwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU2ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfZnBwLmZwcApAQCAtMCwwICsxLDMgQEAKKyAgICAgIFNVQlJPVVRJTkUgTk9QUkVQUk9DRVNTX1RBUkdFVF9GUFAKKyAgICAgIElOVEVHRVIgRgorICAgICAgRU5ECmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3RhcmdldF9sb3dlci5mIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfbG93ZXIuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTIzYTcwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfbG93ZXIuZgpAQCAtMCwwICsxLDMgQEAKKyAgICAgIFNVQlJPVVRJTkUgTk9QUkVQUk9DRVNTX1RBUkdFVF9MT1dFUgorICAgICAgSU5URUdFUiBGCisgICAgICBFTkQKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3NfdGFyZ2V0X3VwcGVyLkYgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3RhcmdldF91cHBlci5GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZWUwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3RhcmdldF91cHBlci5GCkBAIC0wLDAgKzEsMyBAQAorICAgICAgU1VCUk9VVElORSBOT1BSRVBST0NFU1NfVEFSR0VUX1VQUEVSCisgICAgICBJTlRFR0VSIEYKKyAgICAgIEVORApkaWZmIC0tZ2l0IGEvVGVzdHMvRm9ydHJhbk9ubHkvcHJlcHJvY2VzczIuZiBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L3ByZXByb2Nlc3MyLmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5NWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L3ByZXByb2Nlc3MyLmYKQEAgLTAsMCArMSw0IEBACisjZGVmaW5lIGludCBJTlRFR0VSCisgICAgICAgUFJPR1JBTSBQUkVQUk8KKyAgICAgICBpbnQgZgorICAgICAgIEVORApkaWZmIC0tZ2l0IGEvVGVzdHMvRm9ydHJhbk9ubHkvcHJlcHJvY2VzczMuZiBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L3ByZXByb2Nlc3MzLmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5NWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L3ByZXByb2Nlc3MzLmYKQEAgLTAsMCArMSw0IEBACisjZGVmaW5lIGludCBJTlRFR0VSCisgICAgICAgUFJPR1JBTSBQUkVQUk8KKyAgICAgICBpbnQgZgorICAgICAgIEVORApkaWZmIC0tZ2l0IGEvVGVzdHMvR2VuZXJhdG9yRXhwcmVzc2lvbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0dlbmVyYXRvckV4cHJlc3Npb24vQ01ha2VMaXN0cy50eHQKaW5kZXggOWQ1MTM0Mi4uZWJiZTI4OCAxMDA2NDQKLS0tIGEvVGVzdHMvR2VuZXJhdG9yRXhwcmVzc2lvbi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9HZW5lcmF0b3JFeHByZXNzaW9uL0NNYWtlTGlzdHMudHh0CkBAIC00MCw5ICs0MCw5IEBACiAgICAgLUR0ZXN0X2FuZF8wX2ludmFsaWRjb250ZW50PSQ8QU5EOjAsaW52YWxpZGNvbnRlbnQ+CiAgICAgLUR0ZXN0X2NvbmZpZ18wPSQ8Q09ORklHOiQ8Q09ORklHVVJBVElPTj54PgogICAgIC1EdGVzdF9jb25maWdfMT0kPENPTkZJRzokPENPTkZJR1VSQVRJT04+PgotICAgIC1EdGVzdF9jb25maWdfZGVidWc9JDxDT05GSUc6RGVidWc+JDxDT05GSUc6REVCVUc+JDxDT05GSUc6RGVCdUc+Ci0gICAgLUR0ZXN0X2NvbmZpZ19yZWxlYXNlPSQ8Q09ORklHOlJlbGVhc2U+JDxDT05GSUc6UkVMRUFTRT4kPENPTkZJRzpSZUxlQXNFPgotICAgIC1EdGVzdF9jb25maWdfcmVsd2l0aGRlYmluZm89JDxDT05GSUc6UmVsV2l0aERlYkluZm8+JDxDT05GSUc6UkVMV0lUSERFQklORk8+JDxDT05GSUc6cmVsd2l0aGRlYmluZm8+CisgICAgLUR0ZXN0X2NvbmZpZ19kZWJ1Zz0kPENPTkZJRzpEZWJ1ZyxERUJVRyxEZUJ1Rz4KKyAgICAtRHRlc3RfY29uZmlnX3JlbGVhc2U9JDxDT05GSUc6UmVsZWFzZT4kPENPTkZJRzpSRUxFQVNFLFJlTGVBc0U+CisgICAgLUR0ZXN0X2NvbmZpZ19yZWx3aXRoZGViaW5mbz0kPENPTkZJRzpSZWxXaXRoRGViSW5mbyxSRUxXSVRIREVCSU5GTz4kPENPTkZJRzpyZWx3aXRoZGViaW5mbz4KICAgICAtRHRlc3RfY29uZmlnX21pbnNpemVyZWw9JDxDT05GSUc6TWluU2l6ZVJlbD4kPENPTkZJRzpNSU5TSVpFUkVMPiQ8Q09ORklHOm1pbnNpemVyZWw+CiAgICAgLUR0ZXN0X25vdF8wPSQ8Tk9UOjA+CiAgICAgLUR0ZXN0X25vdF8xPSQ8Tk9UOjE+CkBAIC0xODAsOSArMTgwLDcgQEAKIHNldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0ZWQzIEFQUEVORCBQUk9QRVJUWQogICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAkPCQ8Q09ORklHOkRFQlVHPjokPFRBUkdFVF9QUk9QRVJUWTppbXBvcnRlZDEsSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVM+PikKIHNldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0ZWQzIEFQUEVORCBQUk9QRVJUWQotICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAkPCQ8Q09ORklHOlJFTEVBU0U+OiQ8VEFSR0VUX1BST1BFUlRZOmltcG9ydGVkMixJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUz4+KQotc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnRlZDMgQVBQRU5EIFBST1BFUlRZCi0gIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICQ8JDxDT05GSUc6UkVMV0lUSERFQklORk8+OiQ8VEFSR0VUX1BST1BFUlRZOmltcG9ydGVkMixJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUz4+KQorICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAkPCQ8Q09ORklHOlJFTEVBU0UsUkVMV0lUSERFQklORk8+OiQ8VEFSR0VUX1BST1BFUlRZOmltcG9ydGVkMixJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUz4+KQogc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnRlZDMgQVBQRU5EIFBST1BFUlRZCiAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICQ8JDxDT05GSUc6TUlOU0laRVJFTD46JDxUQVJHRVRfUFJPUEVSVFk6aW1wb3J0ZWQyLElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTPj4pCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0dlbmVyYXRvckV4cHJlc3Npb24vY2hlY2stcGFydDMuY21ha2UgYi9UZXN0cy9HZW5lcmF0b3JFeHByZXNzaW9uL2NoZWNrLXBhcnQzLmNtYWtlCmluZGV4IDRmYjczMDguLmI1ZWFmYTYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0dlbmVyYXRvckV4cHJlc3Npb24vY2hlY2stcGFydDMuY21ha2UKKysrIGIvVGVzdHMvR2VuZXJhdG9yRXhwcmVzc2lvbi9jaGVjay1wYXJ0My5jbWFrZQpAQCAtMTMsNyArMTMsNyBAQAogICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAidGVzdF9pbXBvcnRlZF9pbmNsdWRlcyBpcyBub3QgY29ycmVjdDogJHt0ZXN0X2ltcG9ydGVkX2luY2x1ZGVzfSIpCiAgIGVuZGlmKCkKIGVsc2UoKQotICBpZihOT1QgIiR7dGVzdF9pbXBvcnRlZF9pbmNsdWRlc30iIE1BVENIRVMgIl47OzskIikKKyAgaWYoTk9UICIke3Rlc3RfaW1wb3J0ZWRfaW5jbHVkZXN9IiBNQVRDSEVTICJeOzskIikKICAgICBtZXNzYWdlKFNFTkRfRVJST1IgInRlc3RfaW1wb3J0ZWRfaW5jbHVkZXMgaXMgbm90IGFuIGVtcHR5IGxpc3Q6ICR7dGVzdF9pbXBvcnRlZF9pbmNsdWRlc30iKQogICBlbmRpZigpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9JbmNsdWRlRGlyZWN0b3JpZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9JbmNsdWRlRGlyZWN0b3JpZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggZmEzMzA5Zi4uZWIwODY3NiAxMDA2NDQKLS0tIGEvVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0luY2x1ZGVEaXJlY3Rvcmllcy9DTWFrZUxpc3RzLnR4dApAQCAtNjUsNiArNjUsMzkgQEAKICAgICBQUk9QRVJUSUVTIENPTVBJTEVfRkxBR1MgIi1JVGFyUHJvcCIpCiBlbmRpZigpCiAKKyMgVGVzdCBlc2NhcGluZyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaW5jbHVkZSBkaXJlY3RvcnkgcGF0aHMuCitzZXQoc3BlY2lhbF9jaGFycyAifkAlJnt9KCkhJyIpCitpZihOT1QgQ01BS0VfR0VORVJBVE9SIFNUUkVRVUFMICJXYXRjb20gV01ha2UiKQorICAjIFdhdGNvbSBzZWVtcyB0byBoYXZlIG5vIHdheSB0byBlbmNvZGUgdGhlc2UgY2hhcmFjdGVycy4KKyAgc3RyaW5nKEFQUEVORCBzcGVjaWFsX2NoYXJzICIjPVtdIikKK2VuZGlmKCkKK2lmKE5PVCAoTUlOR1cgQU5EIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICIoVW5peHxNU1lTKSBNYWtlZmlsZXMiKSkKKyAgIyBGSVhNRTogRGVwZW5kZW5jaWVzIHdvcmsgYnV0IGNvbW1hbmQtbGluZSBnZW5lcmF0aW9uIGRvZXMgbm90IGhhbmRsZSAnJCcuCisgIHN0cmluZyhBUFBFTkQgc3BlY2lhbF9jaGFycyAiJCIpCitlbmRpZigpCitpZihOT1QgQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIihCb3JsYW5kfE5NYWtlKSBNYWtlZmlsZXMiKQorICAjIE5NYWtlIGFuZCBCb3JsYW5kIHNlZW0gdG8gaGF2ZSBubyB3YXkgdG8gZW5jb2RlIGEgc2luZ2xlICdeJy4KKyAgc3RyaW5nKEFQUEVORCBzcGVjaWFsX2NoYXJzICJeIikKK2VuZGlmKCkKK2lmKE5PVCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyA5IDIwMDh8V2F0Y29tIFdNYWtlIikKKyAgIyBUaGUgdmNwcm9qIGZvcm1hdCBzZXBhcmF0ZXMgdmFsdWVzIHdpdGggJywnLgorICBzdHJpbmcoQVBQRU5EIHNwZWNpYWxfY2hhcnMgIiwiKQorZW5kaWYoKQoraWYoTk9UIFdJTjMyIEFORCBOT1QgQ1lHV0lOKQorICBzdHJpbmcoQVBQRU5EIHNwZWNpYWxfY2hhcnMgIio/PD4iKQorZW5kaWYoKQorc2V0KHNwZWNpYWxfZGlyICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3BlY2lhbC0ke3NwZWNpYWxfY2hhcnN9LWluY2x1ZGUiKQorZmlsZShXUklURSAiJHtzcGVjaWFsX2Rpcn0vU3BlY2lhbERpci5oIiAiI2RlZmluZSBTUEVDSUFMX0RJUl9IXG4iKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoSW5jbHVkZURpcmVjdG9yaWVzIFBSSVZBVEUgIiR7c3BlY2lhbF9kaXJ9IikKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKEluY2x1ZGVEaXJlY3RvcmllcyBQUklWQVRFIElOQ0xVREVfU1BFQ0lBTF9ESVIpCisKK2lmKE1BS0VfU1VQUE9SVFNfU1BBQ0VTKQorICBzZXQoc3BlY2lhbF9zcGFjZV9kaXIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcGVjaWFsLXNwYWNlICR7c3BlY2lhbF9jaGFyc30taW5jbHVkZSIpCisgIGZpbGUoV1JJVEUgIiR7c3BlY2lhbF9zcGFjZV9kaXJ9L1NwZWNpYWxTcGFjZURpci5oIiAiI2RlZmluZSBTUEVDSUFMX1NQQUNFX0RJUl9IXG4iKQorICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhJbmNsdWRlRGlyZWN0b3JpZXMgUFJJVkFURSAiJHtzcGVjaWFsX3NwYWNlX2Rpcn0iKQorICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhJbmNsdWRlRGlyZWN0b3JpZXMgUFJJVkFURSBJTkNMVURFX1NQRUNJQUxfU1BBQ0VfRElSKQorZW5kaWYoKQorCiBhZGRfbGlicmFyeShvcmRlcnRlc3Qgb3JkZXJ0ZXN0LmNwcCkKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKG9yZGVydGVzdCBTWVNURU0gUFVCTElDIFN5c3RlbUluY2x1ZGVEaXJlY3Rvcmllcy9zeXN0ZW1saWIpCiB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhvcmRlcnRlc3QgUFVCTElDIFN5c3RlbUluY2x1ZGVEaXJlY3Rvcmllcy91c2VybGliKQpkaWZmIC0tZ2l0IGEvVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzL21haW4uY3BwIGIvVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzL21haW4uY3BwCmluZGV4IGE1OWQyN2MuLjZkYzg4ZTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0luY2x1ZGVEaXJlY3Rvcmllcy9tYWluLmNwcAorKysgYi9UZXN0cy9JbmNsdWRlRGlyZWN0b3JpZXMvbWFpbi5jcHAKQEAgLTMsNiArMywyMCBAQAogI2luY2x1ZGUgIlNyY1Byb3AuaCIKICNpbmNsdWRlICJUYXJQcm9wLmgiCiAKKyNpZmRlZiBJTkNMVURFX1NQRUNJQUxfRElSCisjICBpbmNsdWRlICJTcGVjaWFsRGlyLmgiCisjICBpZm5kZWYgU1BFQ0lBTF9ESVJfSAorIyAgICBlcnJvciAiU1BFQ0lBTF9ESVJfSCBub3QgZGVmaW5lZCIKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIElOQ0xVREVfU1BFQ0lBTF9TUEFDRV9ESVIKKyMgIGluY2x1ZGUgIlNwZWNpYWxTcGFjZURpci5oIgorIyAgaWZuZGVmIFNQRUNJQUxfU1BBQ0VfRElSX0gKKyMgICAgZXJyb3IgIlNQRUNJQUxfU1BBQ0VfRElSX0ggbm90IGRlZmluZWQiCisjICBlbmRpZgorI2VuZGlmCisKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9UZXN0cy9NU01hbmlmZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvTVNNYW5pZmVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCAzMDBjZmE2Li42MzFjNTk4IDEwMDY0NAotLS0gYS9UZXN0cy9NU01hbmlmZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL01TTWFuaWZlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTEsNSArMSw4IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdChNU01hbmlmZXN0IEMpCiAKK2luY2x1ZGUoQ1Rlc3QpCisKIHNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9KQogYWRkX3N1YmRpcmVjdG9yeShTdWJkaXIpCithZGRfc3ViZGlyZWN0b3J5KFN1YmRpcjIpCmRpZmYgLS1naXQgYS9UZXN0cy9NU01hbmlmZXN0L1N1YmRpci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyL0NNYWtlTGlzdHMudHh0CmluZGV4IDExMjcyYmIuLjg2NjQ1NzIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyL0NNYWtlTGlzdHMudHh0CkBAIC0yLDEwICsyLDkgQEAKIGFkZF9leGVjdXRhYmxlKE1TTWFuaWZlc3QgbWFpbi5jICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90ZXN0Lm1hbmlmZXN0KQogCiBpZihNU1ZDIEFORCBOT1QgTVNWQ19WRVJTSU9OIExFU1MgMTQwMCkKLSAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBNU01hbmlmZXN0IFBPU1RfQlVJTEQgVkVSQkFUSU0KLSAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLURleGU9JDxUQVJHRVRfRklMRTpNU01hbmlmZXN0PgotICAgICAgICAgICAgLVAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2NoZWNrLmNtYWtlCi0gICAgKQorICBhZGRfdGVzdChOQU1FIE1TTWFuaWZlc3QuU2luZ2xlIENPTU1BTkQKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1EZXhlPSQ8VEFSR0VUX0ZJTEU6TVNNYW5pZmVzdD4KKyAgICAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY2hlY2suY21ha2UpCiAgIGFkZF9leGVjdXRhYmxlKE1TTWFuaWZlc3ROb25lIG1haW4uYykKICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBNU01hbmlmZXN0Tm9uZSBQUk9QRVJUWSBMSU5LX0ZMQUdTICIvTUFOSUZFU1Q6Tk8iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDhkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMyBAQAorY29uZmlndXJlX2ZpbGUodGVzdF9tYW5pZmVzdDEuaW4gdGVzdF9tYW5pZmVzdDEubWFuaWZlc3QpCitjb25maWd1cmVfZmlsZSh0ZXN0X21hbmlmZXN0Mi5pbiB0ZXN0X21hbmlmZXN0Mi5tYW5pZmVzdCkKK2NvbmZpZ3VyZV9maWxlKHRlc3RfbWFuaWZlc3QzLmluIHRlc3RfbWFuaWZlc3QzLm1hbmlmZXN0KQorYWRkX2V4ZWN1dGFibGUoTVNNdWx0aXBsZU1hbmlmZXN0IG1haW4uYworICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90ZXN0X21hbmlmZXN0MS5tYW5pZmVzdAorICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90ZXN0X21hbmlmZXN0Mi5tYW5pZmVzdAorICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90ZXN0X21hbmlmZXN0My5tYW5pZmVzdCkKKworaWYoTVNWQyBBTkQgTk9UIE1TVkNfVkVSU0lPTiBMRVNTIDE0MDApCisgIGFkZF90ZXN0KE5BTUUgTVNNYW5pZmVzdC5NdWx0aXBsZSBDT01NQU5ECisgICAgJHtDTUFLRV9DT01NQU5EfSAtRGV4ZT0kPFRBUkdFVF9GSUxFOk1TTXVsdGlwbGVNYW5pZmVzdD4KKyAgICAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY2hlY2suY21ha2UpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvY2hlY2suY21ha2UgYi9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExNzA1YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi9jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIyIEBACitmaWxlKFNUUklOR1MgIiR7ZXhlfSIgbWFuaWZlc3RfY29udGVudDEgUkVHRVggIm5hbWU9XCJLaXR3YXJlLkNNYWtlLk1TTXVsdGlwbGVNYW5pZmVzdFwiIikKK2lmKG1hbmlmZXN0X2NvbnRlbnQxKQorICBtZXNzYWdlKFNUQVRVUyAiRXhwZWN0ZWQgbWFuaWZlc3QgY29udGVudCBmb3VuZDpcbiAke21hbmlmZXN0X2NvbnRlbnQxfSIpCitlbHNlKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRXhwZWN0ZWQgbWFuaWZlc3QgY29udGVudCBub3QgZm91bmQgaW5cbiAke2V4ZX0iKQorZW5kaWYoKQorCisjIFZlcmlmeSBTZWNvbmQgTWFuaWZlc3QgQ29udGVudCBpcyBpbnNpZGUgRXhlY3V0YWJsZS4KK2ZpbGUoU1RSSU5HUyAiJHtleGV9IiBtYW5pZmVzdF9jb250ZW50MiBSRUdFWCAiOGUwZjdhMTItYmZiMy00ZmU4LWI5YTUtNDhmZDUwYTE1YTlhIikKK2lmKG1hbmlmZXN0X2NvbnRlbnQyKQorICBtZXNzYWdlKFNUQVRVUyAiRXhwZWN0ZWQgbWFuaWZlc3QgY29udGVudCBmb3VuZDpcbiAke21hbmlmZXN0X2NvbnRlbnQyfSIpCitlbHNlKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRXhwZWN0ZWQgbWFuaWZlc3QgY29udGVudCBub3QgZm91bmQgaW5cbiAke2V4ZX0iKQorZW5kaWYoKQorCisjIFZlcmlmeSBUaGlyZCBNYW5pZmVzdCBDb250ZW50IGlzIGluc2lkZSBFeGVjdXRhYmxlLgorZmlsZShTVFJJTkdTICIke2V4ZX0iIG1hbmlmZXN0X2NvbnRlbnQzIFJFR0VYICI8ZHBpQXdhcmU+dHJ1ZTwvZHBpQXdhcmU+IikKK2lmKG1hbmlmZXN0X2NvbnRlbnQzKQorICBtZXNzYWdlKFNUQVRVUyAiRXhwZWN0ZWQgbWFuaWZlc3QgY29udGVudCBmb3VuZDpcbiAke21hbmlmZXN0X2NvbnRlbnQzfSIpCitlbHNlKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRXhwZWN0ZWQgbWFuaWZlc3QgY29udGVudCBub3QgZm91bmQgaW5cbiAke2V4ZX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL21haW4uYyBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4OGY0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi9tYWluLmMKQEAgLTAsMCArMSw0IEBACitpbnQgbWFpbih2b2lkKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi90ZXN0X21hbmlmZXN0MS5pbiBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi90ZXN0X21hbmlmZXN0MS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzZlZWFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL3Rlc3RfbWFuaWZlc3QxLmluCkBAIC0wLDAgKzEsNSBAQAorPGFzc2VtYmx5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MSIgbWFuaWZlc3RWZXJzaW9uPSIxLjAiPgorICA8YXNzZW1ibHlJZGVudGl0eSB0eXBlPSJ3aW4zMiIgdmVyc2lvbj0iMS4wLjAuMCIKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0iS2l0d2FyZS5DTWFrZS5NU011bHRpcGxlTWFuaWZlc3QiLz4KKwk8ZGVzY3JpcHRpb24+Q01ha2UgTXVsdGlwbGUgTWFuaWZlc3QgVGVzdCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Cis8L2Fzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL3Rlc3RfbWFuaWZlc3QyLmluIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL3Rlc3RfbWFuaWZlc3QyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTZmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvdGVzdF9tYW5pZmVzdDIuaW4KQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorPGFzc2VtYmx5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MSIgbWFuaWZlc3RWZXJzaW9uPSIxLjAiIHhtbG5zOmFzbXYzPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MyI+CisJPGNvbXBhdGliaWxpdHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206Y29tcGF0aWJpbGl0eS52MSI+CisJCTxhcHBsaWNhdGlvbj4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0iezhlMGY3YTEyLWJmYjMtNGZlOC1iOWE1LTQ4ZmQ1MGExNWE5YX0iPjwvc3VwcG9ydGVkT1M+CisJCQk8c3VwcG9ydGVkT1MgSWQ9InsxZjY3NmM3Ni04MGUxLTQyMzktOTViYi04M2QwZjZkMGRhNzh9Ij48L3N1cHBvcnRlZE9TPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7NGEyZjI4ZTMtNTNiOS00NDQxLWJhOWMtZDY5ZDRhNGE2ZTM4fSI+PC9zdXBwb3J0ZWRPUz4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0iezM1MTM4YjlhLTVkOTYtNGZiZC04ZTJkLWEyNDQwMjI1ZjkzYX0iPjwvc3VwcG9ydGVkT1M+CisJCQk8c3VwcG9ydGVkT1MgSWQ9IntlMjAxMTQ1Ny0xNTQ2LTQzYzUtYTVmZS0wMDhkZWVlM2QzZjB9Ij48L3N1cHBvcnRlZE9TPgorCQk8L2FwcGxpY2F0aW9uPgorCTwvY29tcGF0aWJpbGl0eT4KKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvdGVzdF9tYW5pZmVzdDMuaW4gYi9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvdGVzdF9tYW5pZmVzdDMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3MGUxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi90ZXN0X21hbmlmZXN0My5pbgpAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKzxhc3NlbWJseSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjEiIG1hbmlmZXN0VmVyc2lvbj0iMS4wIiB4bWxuczphc212Mz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiID4KKyAgPGFzbXYzOmFwcGxpY2F0aW9uPgorICAgIDxhc212Mzp3aW5kb3dzU2V0dGluZ3MgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU01JLzIwMDUvV2luZG93c1NldHRpbmdzIj4KKyAgICAgIDxkcGlBd2FyZT50cnVlPC9kcGlBd2FyZT4KKyAgICAgIDxkcGlBd2FyZW5lc3MgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU01JLzIwMTYvV2luZG93c1NldHRpbmdzIj5QZXJNb25pdG9yVjI8L2RwaUF3YXJlbmVzcz4KKyAgICA8L2FzbXYzOndpbmRvd3NTZXR0aW5ncz4KKyAgPC9hc212MzphcHBsaWNhdGlvbj4KKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvT2JqZWN0TGlicmFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCA3ODk3YWI5Li5mY2E1ZjQxIDEwMDY0NAotLS0gYS9UZXN0cy9PYmplY3RMaWJyYXJ5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvQ01ha2VMaXN0cy50eHQKQEAgLTczLDMgKzczLDUgQEAKIHRhcmdldF9saW5rX2xpYnJhcmllcyhVc2VBQnN0YXRpY09ianMgQUJzdGF0aWMpCiAKIGFkZF9zdWJkaXJlY3RvcnkoRXhwb3J0TGFuZ3VhZ2VzKQorCithZGRfc3ViZGlyZWN0b3J5KFRyYW5zaXRpdmUpCmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxNmNkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEyIEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAwMjIgTkVXKQorYWRkX2xpYnJhcnkoRm9vU3RhdGljIFNUQVRJQyBGb29TdGF0aWMuYykKKworYWRkX2xpYnJhcnkoRm9vT2JqZWN0MSBPQkpFQ1QgRm9vT2JqZWN0LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoRm9vT2JqZWN0MSBQUklWQVRFIEZvb1N0YXRpYykKK2FkZF9leGVjdXRhYmxlKFRyYW5zaXRpdmUxIFRyYW5zaXRpdmUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhUcmFuc2l0aXZlMSBQUklWQVRFIEZvb09iamVjdDEpCisKK2FkZF9saWJyYXJ5KEZvb09iamVjdDIgT0JKRUNUIEZvb09iamVjdC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEZvb09iamVjdDIgSU5URVJGQUNFIEZvb1N0YXRpYykKK2FkZF9leGVjdXRhYmxlKFRyYW5zaXRpdmUyIFRyYW5zaXRpdmUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhUcmFuc2l0aXZlMiBQUklWQVRFIEZvb09iamVjdDIpCmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vT2JqZWN0LmMgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vT2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMWYyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29PYmplY3QuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBGb29PYmplY3Qodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vU3RhdGljLmMgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvRm9vU3RhdGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2NDljNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29TdGF0aWMuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBGb29TdGF0aWModm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvVHJhbnNpdGl2ZS5jIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9UcmFuc2l0aXZlL1RyYW5zaXRpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA4OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9UcmFuc2l0aXZlL1RyYW5zaXRpdmUuYwpAQCAtMCwwICsxLDcgQEAKK2V4dGVybiBpbnQgRm9vT2JqZWN0KHZvaWQpOworZXh0ZXJuIGludCBGb29TdGF0aWModm9pZCk7CisKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiBGb29PYmplY3QoKSArIEZvb1N0YXRpYygpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmMgYi9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuYwppbmRleCA5NThjNzdlLi5iMzExN2RhIDEwMDY0NAotLS0gYS9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuYworKysgYi9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuYwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgcmVzdWx0ID0gMDsKICAgfQogICBpZiAoc3RyY21wKFRBUkdFVF9TVFJJTkcsIFNUUklOR19WQUxVRSkgIT0gMCkgewotICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX1NUUklORyBoYXMgd3JvbmcgdmFsdWUgaW4gQyBbJXNdXG4iLAotICAgICAgICAgICAgVEFSR0VUX1NUUklORyk7CisgICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfU1RSSU5HIGhhcyB3cm9uZyB2YWx1ZSBpbiBDIFslc10gdnMgWyVzXVxuIiwKKyAgICAgICAgICAgIFRBUkdFVF9TVFJJTkcsIFNUUklOR19WQUxVRSk7CiAgICAgcmVzdWx0ID0gMDsKICAgfQogICB7CiAgICAgaW50IHggPSAyOwogICAgIGludCB5ID0gMzsKICAgICBpZiAoKEZJTEVfRVhQUikgIT0gKEVYUFIpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIkZJTEVfRVhQUiBkaWQgbm90IHdvcmsgaW4gQyBbJXNdXG4iLAotICAgICAgICAgICAgICBUT19TVFJJTkcoRklMRV9FWFBSKSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZJTEVfRVhQUiBkaWQgbm90IHdvcmsgaW4gQyBbJXNdIHZzIFslc11cbiIsCisgICAgICAgICAgICAgIFRPX1NUUklORyhGSUxFX0VYUFIpLCBUT19TVFJJTkcoRVhQUikpOwogICAgICAgcmVzdWx0ID0gMDsKICAgICB9CiAgICAgaWYgKChUQVJHRVRfRVhQUikgIT0gKEVYUFIpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9FWFBSIGRpZCBub3Qgd29yayBpbiBDIFslc11cbiIsCi0gICAgICAgICAgICAgIFRPX1NUUklORyhGSUxFX0VYUFIpKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX0VYUFIgZGlkIG5vdCB3b3JrIGluIEMgWyVzXSB2cyBbJXNdXG4iLAorICAgICAgICAgICAgICBUT19TVFJJTkcoVEFSR0VUX0VYUFIpLCBUT19TVFJJTkcoRVhQUikpOwogICAgICAgcmVzdWx0ID0gMDsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jeHggYi9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuY3h4CmluZGV4IDM0YTY5YzYuLmYyZmZmZWYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jeHgKKysrIGIvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmN4eApAQCAtMTIsMjUgKzEyLDI2IEBACiB7CiAgIGludCByZXN1bHQgPSAxOwogICBpZiAoc3RyY21wKEZJTEVfU1RSSU5HLCBTVFJJTkdfVkFMVUUpICE9IDApIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJTEVfU1RSSU5HIGhhcyB3cm9uZyB2YWx1ZSBpbiBDWFggWyVzXVxuIiwgRklMRV9TVFJJTkcpOworICAgIGZwcmludGYoc3RkZXJyLCAiRklMRV9TVFJJTkcgaGFzIHdyb25nIHZhbHVlIGluIENYWCBbJXNdIHZzIFslc11cbiIsCisgICAgICAgICAgICBGSUxFX1NUUklORywgU1RSSU5HX1ZBTFVFKTsKICAgICByZXN1bHQgPSAwOwogICB9CiAgIGlmIChzdHJjbXAoVEFSR0VUX1NUUklORywgU1RSSU5HX1ZBTFVFKSAhPSAwKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfU1RSSU5HIGhhcyB3cm9uZyB2YWx1ZSBpbiBDWFggWyVzXVxuIiwKLSAgICAgICAgICAgIFRBUkdFVF9TVFJJTkcpOworICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX1NUUklORyBoYXMgd3JvbmcgdmFsdWUgaW4gQ1hYIFslc10gdnMgWyVzXVxuIiwKKyAgICAgICAgICAgIFRBUkdFVF9TVFJJTkcsIFNUUklOR19WQUxVRSk7CiAgICAgcmVzdWx0ID0gMDsKICAgfQogICB7CiAgICAgaW50IHggPSAyOwogICAgIGludCB5ID0gMzsKICAgICBpZiAoKEZJTEVfRVhQUikgIT0gKEVYUFIpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIkZJTEVfRVhQUiBkaWQgbm90IHdvcmsgaW4gQ1hYIFslc11cbiIsCi0gICAgICAgICAgICAgIFRPX1NUUklORyhGSUxFX0VYUFIpKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiRklMRV9FWFBSIGRpZCBub3Qgd29yayBpbiBDWFggWyVzXSB2cyBbJXNdXG4iLAorICAgICAgICAgICAgICBUT19TVFJJTkcoRklMRV9FWFBSKSwgVE9fU1RSSU5HKEVYUFIpKTsKICAgICAgIHJlc3VsdCA9IDA7CiAgICAgfQogICAgIGlmICgoVEFSR0VUX0VYUFIpICE9IChFWFBSKSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfRVhQUiBkaWQgbm90IHdvcmsgaW4gQ1hYIFslc11cbiIsCi0gICAgICAgICAgICAgIFRPX1NUUklORyhGSUxFX0VYUFIpKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX0VYUFIgZGlkIG5vdCB3b3JrIGluIENYWCBbJXNdIHZzIFslc11cbiIsCisgICAgICAgICAgICAgIFRPX1NUUklORyhUQVJHRVRfRVhQUiksIFRPX1NUUklORyhFWFBSKSk7CiAgICAgICByZXN1bHQgPSAwOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1Byb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggYTI2MzA2MS4uMTYyYTE3OCAxMDA2NDQKLS0tIGEvVGVzdHMvUHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Qcm9wZXJ0aWVzL0NNYWtlTGlzdHMudHh0CkBAIC0xNDQsNCArMTQ0LDE4MiBAQAogc2V0X3Byb3BlcnR5KENBQ0hFIFNPTUVfRU5UUlkgUFJPUEVSVFkgU1RSSU5HUyAiJHtleHBlY3RfU1RSSU5HU30iKQogY2hlY2tfY2FjaGVfcHJvcHMoKQogCitmdW5jdGlvbihnZW5lcmF0ZV9maWxlX2Zvcl9zZXRfcHJvcGVydHlfdGVzdCBpIHRhcmdldF9uYW1lKQorICAgIHNldChzcmNfcGF0aCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3NyYyR7aX0uY3BwIikKKyAgICBmaWxlKENPTkZJR1VSRSBPVVRQVVQgIiR7c3JjX3BhdGh9IiBDT05URU5UCisgICAgICAgICIjaWZuZGVmIGRlZiR7aX1cblwKKyAgICAgICAgI2Vycm9yIEV4cGVjdGVkIGRlZiR7aX1cblwKKyAgICAgICAgI2VuZGlmXG5cCisgICAgICAgICNpZmRlZiBfV0lOMzJcblwKKyAgICAgICAgX19kZWNsc3BlYyhkbGxleHBvcnQpXG5cCisgICAgICAgICNlbmRpZlxuXAorICAgICAgICB2b2lkIGR1bW15X3N5bWJvbCR7aX0oKSB7fVxuIgorICAgICAgICBORVdMSU5FX1NUWUxFIFVOSVgpCisgICAgdGFyZ2V0X3NvdXJjZXMoJHt0YXJnZXRfbmFtZX0gUFJJVkFURSAiJHtzcmNfcGF0aH0iKQorZW5kZnVuY3Rpb24oKQorCithZGRfbGlicmFyeShtYWluZGlydGVzdCBTSEFSRUQpCisKKyMgR2VuZXJhdGUgZmlsZSB0byBiZSB1c2VkIHdpdGggYm90aCBESVJFQ1RPUlkgYW5kIFRBUkdFVF9ESVJFQ1RPUlkgb3B0aW9ucyBpbgorIyBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMgYW5kIHNldF9wcm9wZXJ0eSgpLgorZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QoMzIgbWFpbmRpcnRlc3QpCitnZW5lcmF0ZV9maWxlX2Zvcl9zZXRfcHJvcGVydHlfdGVzdCgzMyBtYWluZGlydGVzdCkKKwogYWRkX3N1YmRpcmVjdG9yeShTdWJEaXIyKQorCitzZXQoc3JjX3ByZWZpeCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvIikKKworIyBTZXQgcHJvcGVydHkgKyB0YXJnZXQgZGlyZWN0b3J5CitzZXRfcHJvcGVydHkoU09VUkNFICIke3NyY19wcmVmaXh9L3NyYzEuY3BwIgorICAgICAgICAgICAgIFRBUkdFVF9ESVJFQ1RPUlkgc2V0X3Byb3BfbGliXzEKKyAgICAgICAgICAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIGRlZjEpCisKKyMgQXBwZW5kIHByb3BlcnR5ICsgdGFyZ2V0IGRpcmVjdG9yeQorc2V0X3Byb3BlcnR5KFNPVVJDRSAiJHtzcmNfcHJlZml4fS9zcmMyLmNwcCIKKyAgICAgICAgICAgICBUQVJHRVRfRElSRUNUT1JZIHNldF9wcm9wX2xpYl8xCisgICAgICAgICAgICAgQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgZGVmMikKKworIyBTZXQgcHJvcGVydHkgKyByZWxhdGl2ZSBkaXJlY3RvcnkgcGF0aAorc2V0X3Byb3BlcnR5KFNPVVJDRSAiJHtzcmNfcHJlZml4fS9zcmMzLmNwcCIKKyAgICAgICAgICAgICBESVJFQ1RPUlkgU3ViRGlyMgorICAgICAgICAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgZGVmMykKKworIyBTZXQgcHJvcGVydHkgKyBhYnNvbHV0ZSBkaXJlY3RvcnkgcGF0aAorc2V0X3Byb3BlcnR5KFNPVVJDRSAiJHtzcmNfcHJlZml4fS9zcmM0LmNwcCIKKyAgICAgICAgICAgICBESVJFQ1RPUlkgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9TdWJEaXIyIgorICAgICAgICAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgZGVmNCkKKworIyBBcHBlbmQgcHJvcGVydHkgKyByZWxhdGl2ZSBkaXJlY3RvcnkgcGF0aAorc2V0X3Byb3BlcnR5KFNPVVJDRSAiJHtzcmNfcHJlZml4fS9zcmM1LmNwcCIKKyAgICAgICAgICAgICBESVJFQ1RPUlkgU3ViRGlyMgorICAgICAgICAgICAgIEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIGRlZjUpCisKKyMgQXBwZW5kIHByb3BlcnR5ICsgYWJzb2x1dGUgZGlyZWN0b3J5IHBhdGgKK3NldF9wcm9wZXJ0eShTT1VSQ0UgIiR7c3JjX3ByZWZpeH0vc3JjNi5jcHAiCisgICAgICAgICAgICAgRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU3ViRGlyMiIKKyAgICAgICAgICAgICBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBkZWY2KQorCisKKyMgVGFyZ2V0IGRpcmVjdG9yeQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMxMC5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9ESVJFQ1RPUlkgc2V0X3Byb3BfbGliXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TIGRlZjEwKQorCisjIFJlbGF0aXZlIGRpcmVjdG9yeSBwYXRoCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzExLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVJFQ1RPUlkgU3ViRGlyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyBkZWYxMSkKKworIyBBYnNvbHV0ZSBkaXJlY3RvcnkgcGF0aAorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMxMi5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU3ViRGlyMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgZGVmMTIpCisKKworIyBNdWx0aXBsZSBmaWxlcyArIGFic29sdXRlIGRpcmVjdG9yeSBwYXRoCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzIwLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMjEuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUkVDVE9SWSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1N1YkRpcjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJkZWYyMDtkZWYyMSIpCisKKyMgTXVsdGlwbGUgZmlsZXMgKyBtdWx0aXBsZSB0YXJnZXQgZGlyZWN0b3JpZXMKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMjIuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMyMy5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFSR0VUX0RJUkVDVE9SWSBzZXRfcHJvcF9saWJfMiBzZXRfcHJvcF9saWJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmMjI7ZGVmMjMiKQorCisKKyMgTXVsdGlwbGUgZmlsZXMgaW4gbXVsdGlwbGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKK2dlbmVyYXRlX2ZpbGVfZm9yX3NldF9wcm9wZXJ0eV90ZXN0KDMwIG1haW5kaXJ0ZXN0KQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3JjMzAuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMzMS5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSRUNUT1JZIC4gU3ViRGlyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmMzA7ZGVmMzEiKQorCisjIENoZWNrIHRoYXQgc3BlY2lmeWluZyBmaWxlcyB3aXRob3V0IGFueSBwcm9wZXJ0aWVzIGRvZXNuJ3QgY3Jhc2guCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcmMzMC5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzMxLmNwcCIpCisKKworIyBDaGVjayB0aGF0IHNwZWNpZnlpbmcgYm90aCBESVJFQ1RPUlkgYW5kIFRBUkdFVF9ESVJFQ1RPUlkgd29ya3MuCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcmMzMi5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSRUNUT1JZIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQVJHRVRfRElSRUNUT1JZIHNldF9wcm9wX2xpYl8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJkZWYzMiIpCisKK3NldF9wcm9wZXJ0eShTT1VSQ0UgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcmMzMy5jcHAiCisgICAgICAgICAgICAgRElSRUNUT1JZIFN1YkRpcjIKKyAgICAgICAgICAgICBUQVJHRVRfRElSRUNUT1JZIG1haW5kaXJ0ZXN0CisgICAgICAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmMzMiKQorCisKK2Z1bmN0aW9uKGNoZWNrX2dldF9wcm9wZXJ0eV92YWx1ZSBleHBlY3RlZCkKKyAgICBpZihOT1QgYWN0dWFsIFNUUkVRVUFMIGV4cGVjdGVkKQorICAgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkVycm9yOiBnZXRfcHJvcGVydHkgcmV0dXJuZWQgdW5leHBlY3RlZCB2YWx1ZVxuIgorICAgICAgICAgICAgICAgICJhY3R1YWw6ICR7YWN0dWFsfVxuIgorICAgICAgICAgICAgICAgICJleHBlY3RlZDogJHtleHBlY3RlZH0iKQorICAgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworIyBDaGVjayB0aGF0IHNvdXJjZSBmaWxlIGRpcmVjdG9yeSBzY29wZXMgYXJlIGRlZHVwbGljYXRlZC4KK3NldF9wcm9wZXJ0eShTT1VSQ0UgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcmMzMi5jcHAiCisgICAgRElSRUNUT1JZIFN1YkRpcjIgU3ViRGlyMiBTdWJEaXIyCisgICAgVEFSR0VUX0RJUkVDVE9SWSBzZXRfcHJvcF9saWJfMyBzZXRfcHJvcF9saWJfMyBzZXRfcHJvcF9saWJfMworICAgIEFQUEVORAorICAgIFBST1BFUlRZIE5PTl9EVVBMSUNBVEVEX0NVU1RPTV9QUk9QIDEKKykKKworZ2V0X3Byb3BlcnR5KGFjdHVhbAorICAgICAgICAgICAgIFNPVVJDRSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3NyYzMyLmNwcCIKKyAgICAgICAgICAgICBESVJFQ1RPUlkgU3ViRGlyMgorICAgICAgICAgICAgIFBST1BFUlRZIE5PTl9EVVBMSUNBVEVEX0NVU1RPTV9QUk9QKQorY2hlY2tfZ2V0X3Byb3BlcnR5X3ZhbHVlKCIxIikKKworZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KGFjdHVhbCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3NyYzMyLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICBUQVJHRVRfRElSRUNUT1JZIHNldF9wcm9wX2xpYl8zCisgICAgICAgICAgICAgICAgICAgICAgICAgTk9OX0RVUExJQ0FURURfQ1VTVE9NX1BST1ApCitjaGVja19nZXRfcHJvcGVydHlfdmFsdWUoIjEiKQorCisjIEdldCBwcm9wZXJ0eSArIHRhcmdldCBkaXJlY3RvcnkKK2dldF9wcm9wZXJ0eShhY3R1YWwKKyAgICAgICAgICAgICBTT1VSQ0UgIiR7c3JjX3ByZWZpeH0vc3JjMS5jcHAiCisgICAgICAgICAgICAgVEFSR0VUX0RJUkVDVE9SWSBzZXRfcHJvcF9saWJfMQorICAgICAgICAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMpCitjaGVja19nZXRfcHJvcGVydHlfdmFsdWUoImRlZjEiKQorCisjIEdldCBwcm9wZXJ0eSArIHJlbGF0aXZlIGRpcmVjdG9yeSBwYXRoCitnZXRfcHJvcGVydHkoYWN0dWFsCisgICAgICAgICAgICAgU09VUkNFICIke3NyY19wcmVmaXh9L3NyYzMuY3BwIgorICAgICAgICAgICAgIERJUkVDVE9SWSBTdWJEaXIyCisgICAgICAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKK2NoZWNrX2dldF9wcm9wZXJ0eV92YWx1ZSgiZGVmMyIpCisKKyMgR2V0IHByb3BlcnR5ICsgYWJzb2x1dGUgZGlyZWN0b3J5IHBhdGgKK2dldF9wcm9wZXJ0eShhY3R1YWwKKyAgICAgICAgICAgICBTT1VSQ0UgIiR7c3JjX3ByZWZpeH0vc3JjNC5jcHAiCisgICAgICAgICAgICAgRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU3ViRGlyMiIKKyAgICAgICAgICAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQorY2hlY2tfZ2V0X3Byb3BlcnR5X3ZhbHVlKCJkZWY0IikKKworCisjIEdldCBwcm9wZXJ0eSArIHRhcmdldCBkaXJlY3RvcnkKK3Vuc2V0KGFjdHVhbCkKK2dldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMTAuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9ESVJFQ1RPUlkgc2V0X3Byb3BfbGliXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TKQorY2hlY2tfZ2V0X3Byb3BlcnR5X3ZhbHVlKCJkZWYxMCIpCisKKyMgR2V0IHByb3BlcnR5ICsgcmVsYXRpdmUgZGlyZWN0b3J5IHBhdGgKK2dldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMTEuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgIERJUkVDVE9SWSBTdWJEaXIyCisgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUykKK2NoZWNrX2dldF9wcm9wZXJ0eV92YWx1ZSgiZGVmMTEiKQorCisjIEdldCBwcm9wZXJ0eSArIGFic29sdXRlIGRpcmVjdG9yeSBwYXRoCitnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkoYWN0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzEyLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICBESVJFQ1RPUlkgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9TdWJEaXIyIgorICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMpCitjaGVja19nZXRfcHJvcGVydHlfdmFsdWUoImRlZjEyIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1Byb3BlcnRpZXMvU3ViRGlyMi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1Byb3BlcnRpZXMvU3ViRGlyMi9DTWFrZUxpc3RzLnR4dAppbmRleCAzNzdkYzgzLi44OGU1NTMxIDEwMDY0NAotLS0gYS9UZXN0cy9Qcm9wZXJ0aWVzL1N1YkRpcjIvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUHJvcGVydGllcy9TdWJEaXIyL0NNYWtlTGlzdHMudHh0CkBAIC0zLDMgKzMsMzIgQEAKICAgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TIFNVQkRJUl9URVNUKQogCiBhZGRfZXhlY3V0YWJsZShzdWJkaXJ0ZXN0ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vc3ViZGlydGVzdC5jeHgiKQorCisjIEZvciBzZXRfcHJvcGVydHkKK2FkZF9saWJyYXJ5KHNldF9wcm9wX2xpYl8xIFNIQVJFRCkKK2ZvcmVhY2goaSBSQU5HRSAxIDYpCisgICAgZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QoJHtpfSBzZXRfcHJvcF9saWJfMSkKK2VuZGZvcmVhY2goKQorCisjIEZvciBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMKK2ZvcmVhY2goaSBSQU5HRSAxMCAxMikKKyAgICBnZW5lcmF0ZV9maWxlX2Zvcl9zZXRfcHJvcGVydHlfdGVzdCgke2l9IHNldF9wcm9wX2xpYl8xKQorZW5kZm9yZWFjaCgpCisKKyMgRm9yIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyArIG11bHRpcGxlIGZpbGVzICsgYWJzb2x1dGUgZGlyZWN0b3J5IHBhdGgKK2FkZF9saWJyYXJ5KHNldF9wcm9wX2xpYl8yIFNIQVJFRCkKK2ZvcmVhY2goaSBSQU5HRSAyMCAyMSkKKyAgICBnZW5lcmF0ZV9maWxlX2Zvcl9zZXRfcHJvcGVydHlfdGVzdCgke2l9IHNldF9wcm9wX2xpYl8xKQorZW5kZm9yZWFjaCgpCisKKyMgRm9yIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyArIG11bHRpcGxlIGZpbGVzICsgbXVsdGlwbGUgdGFyZ2V0IGRpcmVjdG9yaWVzCithZGRfbGlicmFyeShzZXRfcHJvcF9saWJfMyBTSEFSRUQpCitnZW5lcmF0ZV9maWxlX2Zvcl9zZXRfcHJvcGVydHlfdGVzdCgyMiBzZXRfcHJvcF9saWJfMikKK2dlbmVyYXRlX2ZpbGVfZm9yX3NldF9wcm9wZXJ0eV90ZXN0KDIzIHNldF9wcm9wX2xpYl8zKQorCisjIEZvciBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMgKyBtdWx0aXBsZSBmaWxlcyBpbiBtdWx0aXBsZSBkaXJlY3RvcmllcworZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QoMzEgc2V0X3Byb3BfbGliXzMpCisKKyMgRm9yIHNwZWNpZnlpbmcgYm90aCBESVJFQ1RPUlkgYW5kIFRBUkdFVF9ESVJFQ1RPUlkKK3RhcmdldF9zb3VyY2VzKHNldF9wcm9wX2xpYl8zIFBSSVZBVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8uLi9zcmMzMi5jcHAiKQordGFyZ2V0X3NvdXJjZXMoc2V0X3Byb3BfbGliXzMgUFJJVkFURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9Ly4uL3NyYzMzLmNwcCIpCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vQ29tcGxleC9jb2RlZWRpdG9yLmNwcCBiL1Rlc3RzL1F0QXV0b2dlbi9Db21wbGV4L2NvZGVlZGl0b3IuY3BwCmluZGV4IGJiNmY0MDUuLjgwZDZhNTUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1F0QXV0b2dlbi9Db21wbGV4L2NvZGVlZGl0b3IuY3BwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9Db21wbGV4L2NvZGVlZGl0b3IuY3BwCkBAIC00MCw3ICs0MCwxMCBAQAogCiAjaW5jbHVkZSAiY29kZWVkaXRvci5oIgogCi0jaW5jbHVkZSA8UXRHdWk+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVNpemU+CisjaW5jbHVkZSA8UVRleHRCbG9jaz4KKyNpbmNsdWRlIDxRV2lkZ2V0PgogCiBDb2RlRWRpdG9yOjpDb2RlRWRpdG9yKFFXaWRnZXQqIHBhcmVudCkKICAgOiBRUGxhaW5UZXh0RWRpdChwYXJlbnQpCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vQ01ha2VMaXN0cy50eHQKaW5kZXggZTE5NTFmMS4uYTdmYjJkNyAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9DTWFrZUxpc3RzLnR4dApAQCAtMTA0LDcgKzEwNCw3IEBACiByZXF1aXJlX2NoYW5nZShDKQogcmVxdWlyZV9jaGFuZ2UoRCkKICMgVGhlcmUncyBhIGJ1ZyBpbiBOaW5qYSBvbiBXaW5kb3dzOgotIyBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTY3NzYKKyMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTY3NzYKIGlmKE5PVCAoIiR7Q01BS0VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiTmluamEiKSkKICAgcmVxdWlyZV9jaGFuZ2UoRSkKIGVuZGlmKCkKQEAgLTEyOCw3ICsxMjgsNyBAQAogcmVxdWlyZV9jaGFuZ2UoQykKIHJlcXVpcmVfY2hhbmdlKEQpCiAjIFRoZXJlJ3MgYSBidWcgaW4gTmluamEgb24gV2luZG93cwotIyBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTY3NzYKKyMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTY3NzYKIGlmKE5PVCAoIiR7Q01BS0VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiTmluamEiKSkKICAgcmVxdWlyZV9jaGFuZ2UoRSkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNDU3OThjZS4uODFkZDA5MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTE4LDE1ICsxOCwzMyBAQAogICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQogICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQogICBydW5fY21ha2UoJHtjYXNlfSkKLSAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKKyAgc2V0KGNvbmZpZ3MgIi4iKQorICBpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgIHNldChjb25maWdzIFJlbGVhc2UgRGVidWcpCisgIGVuZGlmKCkKKyAgZm9yZWFjaChjb25maWcgSU4gTElTVFMgY29uZmlncykKKyAgICBzZXQoYnVpbGRfc3VmZml4KQorICAgIHNldChjb25maWdfYXJnKQorICAgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgICBzZXQoYnVpbGRfc3VmZml4ICItJHtjb25maWd9IikKKyAgICAgIHNldChjb25maWdfYXJnIC0tY29uZmlnICIke2NvbmZpZ30iKQorICAgIGVuZGlmKCkKKyAgICBydW5fY21ha2VfY29tbWFuZCgke2Nhc2V9LWJ1aWxkJHtidWlsZF9zdWZmaXh9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuICR7Y29uZmlnX2FyZ30pCisgIGVuZGZvcmVhY2goKQogZW5kZnVuY3Rpb24oKQogCitzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRCAiJHtSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk19IikKKworaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNICJBUk0iKQorZW5kaWYoKQogc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAtRENNQUtFX1NZU1RFTV9OQU1FPUFuZHJvaWQKICAgLURDTUFLRV9TWVNST09UPSR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfQogICApCiBydW5fY21ha2UoQmFkU1lTUk9PVCkKIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK3NldChSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk0gIiR7UnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRH0iKQogCiBmb3JlYWNoKG5kayBJTiBMSVNUUyBURVNUX0FORFJPSURfTkRLKQogICAjIExvYWQgYXZhaWxhYmxlIHRvb2xjaGFpbiB2ZXJzaW9ucyBhbmQgYWJpcy4KQEAgLTcwLDYgKzg4LDkgQEAKICAgaWYoX3ZlcnNpb25zIE1BVENIRVMgImNsYW5nIikKICAgICBzZXQoX3ZlcnNpb25zICJjbGFuZyIgJHtfdmVyc2lvbnN9KQogICBlbmRpZigpCisgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICBzZXQoX3ZlcnNpb25zICJjbGFuZyIpCisgIGVuZGlmKCkKICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfdmVyc2lvbnMpCiAgIGxpc3QoU09SVCBfdmVyc2lvbnMpCiAgIHNldChfdmVyc2lvbnMgIjske192ZXJzaW9uc30iKQpAQCAtNzcsNDQgKzk4LDU4IEBACiAgICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfYWJpc18ke3ZlcnN9KQogICBlbmRmb3JlYWNoKCkKIAorICBzZXQobmRrX2FyZyAtRENNQUtFX0FORFJPSURfTkRLPSR7bmRrfSkKKyAgaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICAgIHNldChuZGtfYXJnKQorICBlbmRpZigpCisKICAgIyBUZXN0IGZhaWx1cmUgY2FzZXMuCiAgIG1lc3NhZ2UoU1RBVFVTICJuZGs9JyR7bmRrfSciKQorICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgICAgc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUl9QTEFURk9STSAiQVJNIikKKyAgZW5kaWYoKQogICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TCiAgICAgLURDTUFLRV9TWVNURU1fTkFNRT1BbmRyb2lkCi0gICAgLURDTUFLRV9BTkRST0lEX05ESz0ke25ka30KKyAgICAke25ka19hcmd9CiAgICAgLURDTUFLRV9BTkRST0lEX0FSQ0hfQUJJPWJhZGFiaQogICAgICkKICAgcnVuX2NtYWtlKG5kay1iYWRhYmkpCisgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNICJ4ODYiKQorICBlbmRpZigpCiAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMKICAgICAtRENNQUtFX1NZU1RFTV9OQU1FPUFuZHJvaWQKLSAgICAtRENNQUtFX0FORFJPSURfTkRLPSR7bmRrfQorICAgICR7bmRrX2FyZ30KICAgICAtRENNQUtFX0FORFJPSURfQVJDSF9BQkk9eDg2CiAgICAgLURDTUFLRV9BTkRST0lEX0FSTV9NT0RFPTAKICAgICApCiAgIHJ1bl9jbWFrZShuZGstYmFkYXJtKQorICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgICAgc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUl9QTEFURk9STSAiQVJNIikKKyAgZW5kaWYoKQogICBpZigiYXJtZWFiaSIgSU5fTElTVCBfYWJpc18pCiAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgICAgLURDTUFLRV9TWVNURU1fTkFNRT1BbmRyb2lkCi0gICAgICAtRENNQUtFX0FORFJPSURfTkRLPSR7bmRrfQorICAgICAgJHtuZGtfYXJnfQogICAgICAgLURDTUFLRV9BTkRST0lEX0FSTV9ORU9OPTAKICAgICAgICkKICAgICBydW5fY21ha2UobmRrLWJhZG5lb24pCiAgIGVuZGlmKCkKICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgJHtuZGtfYXJnfQogICAgIC1EQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX1ZFUlNJT049YmFkdmVyCiAgICAgKQogICBydW5fY21ha2UobmRrLWJhZHZlcikKICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgJHtuZGtfYXJnfQogICAgIC1EQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX1ZFUlNJT049MS4wCiAgICAgKQogICBydW5fY21ha2UobmRrLWJhZHZlcm51bSkKICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgJHtuZGtfYXJnfQogICAgIC1EQ01BS0VfQU5EUk9JRF9TVExfVFlQRT1iYWRzdGwKICAgICApCiAgIHJ1bl9jbWFrZShuZGstYmFkc3RsKQpAQCAtMTMxLDYgKzE2Niw3IEBACiAgICAgcnVuX2NtYWtlKG5kay1zeXNyb290LWFybWVhYmkpCiAgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICBlbmRpZigpCisgIHNldChSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk0gIiR7UnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRH0iKQogCiAgICMgRmluZCBhdmFpbGFibGUgU1RMcy4KICAgc2V0KHN0bF90eXBlcwpAQCAtMTU3LDIzICsxOTMsNDEgQEAKICAgICBhcm1lYWJpLXY2CiAgICAgYXJtZWFiaS12N2EKICAgICBhcm02NC12OGEKLSAgICBtaXBzCi0gICAgbWlwczY0CiAgICAgeDg2CiAgICAgeDg2XzY0CiAgICAgKQorICBpZihOT1QgUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICAgIGxpc3QoQVBQRU5EIGFiaV9uYW1lcyBtaXBzIG1pcHM2NCkKKyAgZW5kaWYoKQorICBzZXQoYWJpX3RvX2FyY2hfYXJtZWFiaSBBUk0pCisgIHNldChhYmlfdG9fYXJjaF9hcm1lYWJpLXY2IEFSTSkKKyAgc2V0KGFiaV90b19hcmNoX2FybWVhYmktdjdhIEFSTSkKKyAgc2V0KGFiaV90b19hcmNoX2FybTY0LXY4YSBBUk02NCkKKyAgc2V0KGFiaV90b19hcmNoX3g4NiB4ODYpCisgIHNldChhYmlfdG9fYXJjaF94ODZfNjQgeDY0KQogCiAgICMgVGVzdCBhbGwgY29tYmluYXRpb25zLgogICBmb3JlYWNoKHZlcnMgSU4gTElTVFMgX3ZlcnNpb25zKQogICAgIGZvcmVhY2goc3RsIElOIExJU1RTIHN0bF90eXBlcykKLSAgICAgIGZvcmVhY2goY29uZmlnIFJlbGVhc2UgRGVidWcpCisgICAgICBzZXQoY29uZmlncyBSZWxlYXNlIERlYnVnKQorICAgICAgc2V0KGZvcmVhY2hfbGlzdCAiJHtjb25maWdzfSIpCisgICAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgICAgICBzZXQoZm9yZWFjaF9saXN0ICIuIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGZvcmVhY2goY29uZmlnIElOIExJU1RTIGZvcmVhY2hfbGlzdCkKICAgICAgICAgIyBUZXN0IHRoaXMgY29tYmluYXRpb24gZm9yIGFsbCBhdmFpbGFibGUgYWJpcy4KLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIm5kaz0nJHtuZGt9JyB2ZXJzPScke3ZlcnN9JyBzdGw9JyR7c3RsfScgY29uZmlnPScke2NvbmZpZ30nIikKKyAgICAgICAgc2V0KGNvbmZpZ19zdGF0dXMgIiBjb25maWc9JyR7Y29uZmlnfSciKQorICAgICAgICBzZXQoYnVpbGRfdHlwZV9hcmcgIi1EQ01BS0VfQlVJTERfVFlQRT0ke2NvbmZpZ30iKQorICAgICAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgICAgICAgIHNldChjb25maWdfc3RhdHVzKQorICAgICAgICAgIHN0cmluZyhSRVBMQUNFICI7IiAiXFxcXDsiIGJ1aWxkX3R5cGVfYXJnICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9JHtjb25maWdzfSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIm5kaz0nJHtuZGt9JyB2ZXJzPScke3ZlcnN9JyBzdGw9JyR7c3RsfScke2NvbmZpZ19zdGF0dXN9IikKICAgICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwotICAgICAgICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgICAgICAgJHtuZGtfYXJnfQogICAgICAgICAgIC1EQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX1ZFUlNJT049JHt2ZXJzfQogICAgICAgICAgIC1EQ01BS0VfQU5EUk9JRF9TVExfVFlQRT0ke3N0bH0KLSAgICAgICAgICAtRENNQUtFX0JVSUxEX1RZUEU9JHtjb25maWd9CisgICAgICAgICAgIiR7YnVpbGRfdHlwZV9hcmd9IgogICAgICAgICAgICkKICAgICAgICAgZm9yZWFjaChhYmkgSU4gTElTVFMgYWJpX25hbWVzKQogICAgICAgICAgICMgU2tpcCBBQklzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21waWxlci4KQEAgLTE4Miw2ICsyMzYsOSBAQAogICAgICAgICAgIGVuZGlmKCkKIAogICAgICAgICAgICMgUnVuIHRoZSB0ZXN0cyBmb3IgdGhpcyBjb21iaW5hdGlvbi4KKyAgICAgICAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgICAgICAgICAgICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNICIke2FiaV90b19hcmNoXyR7YWJpfX0iKQorICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICBpZigiJHthYml9IiBTVFJFUVVBTCAiYXJtZWFiaSIpCiAgICAgICAgICAgICBydW5fQW5kcm9pZChuZGstYXJtZWFiaS10aHVtYikgIyBkZWZhdWx0OiAtRENNQUtFX0FORFJPSURfQVJDSF9BQkk9YXJtZWFiaSAtRENNQUtFX0FORFJPSURfQVJNX01PREU9MAogICAgICAgICAgICAgcnVuX0FuZHJvaWQobmRrLWFybWVhYmktYXJtIC1EQ01BS0VfQU5EUk9JRF9BUk1fTU9ERT0xKSAjIGRlZmF1bHQ6IC1EQ01BS0VfQU5EUk9JRF9BUkNIX0FCST1hcm1lYWJpCkBAIC0xOTEsNiArMjQ4LDcgQEAKICAgICAgICAgICAgICAgcnVuX0FuZHJvaWQobmRrLSR7YWJpfS1uZW9uIC1EQ01BS0VfQU5EUk9JRF9BUkNIX0FCST0ke2FiaX0gLURDTUFLRV9BTkRST0lEX0FSTV9ORU9OPTEpCiAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIHNldChSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk0gIiR7UnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRH0iKQogICAgICAgICBlbmRmb3JlYWNoKCkKICAgICAgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICAgICAgZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL2NvbW1vbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvY29tbW9uLmNtYWtlCmluZGV4IGQ5NmFiODYuLjMyNDEyYWEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvY29tbW9uLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvY29tbW9uLmNtYWtlCkBAIC05Niw3ICs5Niw3IEBACiBhZGRfZXhlY3V0YWJsZShhbmRyb2lkX2N4eCBhbmRyb2lkLmN4eCkKIGFkZF9saWJyYXJ5KGFuZHJvaWRfY3h4X2xpYiBTSEFSRUQgYW5kcm9pZF9saWIuY3h4KQogCi1zZXQob2JqZHVtcCAiJHtDTUFLRV9DWFhfQU5EUk9JRF9UT09MQ0hBSU5fUFJFRklYfW9iamR1bXAiKQorc2V0KG9iamR1bXAgIiR7Q01BS0VfQ1hYX0FORFJPSURfVE9PTENIQUlOX1BSRUZJWH1vYmpkdW1wJHtDTUFLRV9DWFhfQU5EUk9JRF9UT09MQ0hBSU5fU1VGRklYfSIpCiBpZihOT1QgRVhJU1RTICIke29iamR1bXB9IikKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRXhwZWN0ZWQgdG9vbCBtaXNzaW5nOlxuICAke29iamR1bXB9IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybTY0LXY4YS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGstYXJtNjQtdjhhLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiMzYzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybTY0LXY4YS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktYXJtLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLWFybS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLWFybS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdGh1bWItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdGh1bWItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IzNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGstYXJtZWFiaS10aHVtYi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdjdhLW5lb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdjdhLW5lb24tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IzNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGstYXJtZWFiaS12N2EtbmVvbi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdjdhLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLXY3YS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLXY3YS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Ni1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGsteDg2LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiMzYzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Ni1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Nl82NC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGsteDg2XzY0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiMzYzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Nl82NC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWRUZXN0VXRpbGl0aWVzL2NoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZFRlc3RVdGlsaXRpZXMvY2hlY2suY21ha2UKaW5kZXggY2NkNGQ3NC4uYzI0YTNjZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZFRlc3RVdGlsaXRpZXMvY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZFRlc3RVdGlsaXRpZXMvY2hlY2suY21ha2UKQEAgLTEzLDcgKzEzLDcgQEAKIGVuZGZ1bmN0aW9uKCkKIAogZnVuY3Rpb24oY2hlY2tfZm9yX3NldHVwX3Rlc3QpCi0gIGZpbGUoU1RSSU5HUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NUZXN0VGVzdGZpbGUuY21ha2UiIG91dHB1dF92YXIgUkVHRVggImFkZF90ZXN0XFwoc2V0dXBfdGVzdC4qIikKKyAgZmlsZShTVFJJTkdTICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ1Rlc3RUZXN0ZmlsZS5jbWFrZSIgb3V0cHV0X3ZhciBSRUdFWCAiYWRkX3Rlc3RcXChcInNldHVwX3Rlc3RcIi4qIikKICAgaWYoTk9UIG91dHB1dF92YXIpCiAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJDb3VsZCBub3QgZmluZCB0aGUgdGVzdDogc2V0dXBfdGVzdCIgUEFSRU5UX1NDT1BFKQogICBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0F1dG9FeHBvcnQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0F1dG9FeHBvcnQuY21ha2UKaW5kZXggYTU1MDAwNS4uODVlZmY3ZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BdXRvRXhwb3J0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQXV0b0V4cG9ydC5jbWFrZQpAQCAtNSw2ICs1LDEwIEBACiBhZGRfbGlicmFyeShvYmpsaWIgT0JKRUNUIG9iamxpYi5jKQogc2V0X3Byb3BlcnR5KFRBUkdFVCBvYmpsaWIgUFJPUEVSVFkgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSAxKQogYWRkX2xpYnJhcnkoYXV0b2V4cG9ydCBTSEFSRUQgaGVsbG8uY3h4IHdvcmxkLmN4eCBmb28uYyAkPFRBUkdFVF9PQkpFQ1RTOm9iamxpYj4pCithZGRfbGlicmFyeShhdXRvZXhwb3J0MyBTSEFSRUQgY3BwQ0xJLmN4eCkKK2lmKE1TVkMgQU5EIE5PVCBNU1ZDX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE2MDApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgYXV0b2V4cG9ydDMgUFJPUEVSVFkgQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUgIiIpCitlbmRpZigpCiAKIGFkZF9leGVjdXRhYmxlKHNheSBzYXkuY3h4KQogaWYoTVNWQykKQEAgLTE4LDQgKzIyLDQgQEAKICAgICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhzYXkgUFJJVkFURSBIQVNfSlVTVE5PUCkKICAgZW5kaWYoKQogZW5kaWYoKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNheSBhdXRvZXhwb3J0IGF1dG9leHBvcnQyKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNheSBhdXRvZXhwb3J0IGF1dG9leHBvcnQyIGF1dG9leHBvcnQzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9jcHBDTEkuY3h4IGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9jcHBDTEkuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNmJiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL2NwcENMSS5jeHgKQEAgLTAsMCArMSwyMiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1c19jbGkKKyMgIGluY2x1ZGUgPG1zY2xyXG1hcnNoYWxfY3Bwc3RkLmg+CisKK3ZvaWQgY2xpRnVuY3Rpb24oKQoreworICBTeXN0ZW06OlN0cmluZyBeIHJlc3VsdCA9ICJjbGlGdW5jdGlvbiI7CisgIHJlc3VsdCA9IHJlc3VsdC0+VHJpbSgpOworICBwcmludGYobXNjbHI6OmludGVyb3A6Om1hcnNoYWxfYXM8c3RkOjpzdHJpbmc+KHJlc3VsdCkuY19zdHIoKSk7Cit9CisjZWxzZQordm9pZCBjbGlGdW5jdGlvbigpCit7CisgIHByaW50ZigiY2xpRnVuY3Rpb24gKGJ1dCAvY2xpIHdhcyBub3QgcGFzc2VkIHRvIHRoZSBjb21waWxlcikiKTsKK30KKyNlbmRpZgorCit2b2lkIG5vbkNsaUZ1bmN0aW9uKCkKK3sKKyAgcHJpbnRmKCJub25DbGlGdW5jdGlvbiIpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9zYXkuY3h4IGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9zYXkuY3h4CmluZGV4IDY1NGI1ZTAuLjhmYzc2OGEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvc2F5LmN4eAorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL3NheS5jeHgKQEAgLTE3LDkgKzE3LDExIEBACiB9CiAKIC8vIHRlc3QgYysrIGZ1bmN0aW9ucwotLy8gZm9yd2FyZCBkZWNsYXJlIGhlbGxvIGFuZCB3b3JsZAorLy8gZm9yd2FyZCBkZWNsYXJlIGhlbGxvLCB3b3JsZCwgY2xpRnVuY3Rpb24gYW5kIG5vbkNsaUZ1bmN0aW9uCiB2b2lkIGhlbGxvKCk7CiB2b2lkIHdvcmxkKCk7Cit2b2lkIGNsaUZ1bmN0aW9uKCk7Cit2b2lkIG5vbkNsaUZ1bmN0aW9uKCk7CiAKIC8vIHRlc3QgZXhwb3J0cyBmb3IgZXhlY3V0YWJsZSB0YXJnZXQKIGV4dGVybiAiQyIgewpAQCAtNDQsNiArNDYsMTAgQEAKICAgYmFyKCk7CiAgIG9iamxpYigpOwogICBwcmludGYoIlxuIik7CisgIGNsaUZ1bmN0aW9uKCk7CisgIHByaW50ZigiXG4iKTsKKyAgbm9uQ2xpRnVuY3Rpb24oKTsKKyAgcHJpbnRmKCJcbiIpOwogI2lmZGVmIEhBU19KVVNUTk9QCiAgIGp1c3Rub3AoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzI2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLXN0ZG91dC50eHQKQEAgLTAsMCArMSw0IEBACistLSBUaGUgQVNNIGNvbXBpbGVyIGlkZW50aWZpY2F0aW9uIGlzIEdOVQorLS0gRm91bmQgYXNzZW1ibGVyOiBbXgorXSovYXMoXC5leGUpPworLS0gQ01BS0VfQVNNX0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSD0nR05VIGFzc2VtYmxlcicKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNzI0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2VuYWJsZV9sYW5ndWFnZShBU00pCisKKyMgVmFsaWRhdGUgdW5kb2N1bWVudGVkIGltcGxlbWVudGF0aW9uIGRldGFpbC4KK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0g9JyR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfSURfVkVORE9SX01BVENIfSciKQorCithZGRfbGlicmFyeShnbnVfYXMgU1RBVElDIGdudV9hcy5zKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZ251X2FzIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9KQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZ251X2FzIFBSSVZBVEUgIlRFU1RfREVGPUhlbGxvIikKKworZmlsZShHRU5FUkFURSBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NoZWNrLSQ8TE9XRVJfQ0FTRTokPENPTkZJRz4+LmNtYWtlIENPTlRFTlQgIgorc2V0KGNoZWNrX3BhaXJzCisgIFwiJDxUQVJHRVRfRklMRTpnbnVfYXM+fCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9nbnVfYXMuaW5jXCIKKyAgKQorIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAxLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTVlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAxLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoV1JJVEUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nbnVfYXMuaW5jIiAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTVlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAyLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoV1JJVEUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nbnVfYXMuaW5jIiAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGU0ZDcxNzcuLjdhNjhjNGIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTA4LDMgKzEwOCw4IEBACiBpZihSdW5DTWFrZV9HRU5FUkFUT1IgU1RSRVFVQUwgIlhjb2RlIikKICAgcnVuX1JlR2VuZXJhdGlvbihyZWdlbmVyYXRlLXByb2plY3QpCiBlbmRpZigpCisKK2lmKENNYWtlX1RFU1RfQnVpbGREZXBlbmRzX0dOVV9BUykKKyAgc2V0KEVOVntBU019ICIke0NNYWtlX1RFU1RfQnVpbGREZXBlbmRzX0dOVV9BU30iKQorICBydW5fQnVpbGREZXBlbmRzKEdOVS1BUykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9nbnVfYXMucyBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9nbnVfYXMucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU3ZGZiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL2dudV9hcy5zCkBAIC0wLDAgKzEgQEAKKy5pbmNsdWRlICJnbnVfYXMuaW5jIgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LU5FVy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LU5FVy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTU4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktTkVXLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktT0xELXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktT0xELXN0ZGVyci50eHQKaW5kZXggMDQ4NzYyZC4uYTQ0NjIxMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LU9MRC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMTkvQ01QMDAxOS1PTEQtc3RkZXJyLnR4dApAQCAtMSw0ICsxLDExIEBACi1eQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTVAwMDE5LU9MRC5jbWFrZTpbMC05XSsgXChjbWFrZV9wb2xpY3lcKToKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorKworQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTVAwMDE5LU9MRC5jbWFrZTpbMC05XSsgXChjbWFrZV9wb2xpY3lcKToKICAgVGhlIE9MRCBiZWhhdmlvciBmb3IgcG9saWN5IENNUDAwMTkgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbgogICBvZiBDTWFrZS4KIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMTkvQ01QMDAxOS1XQVJOLXN0ZGVyci50eHQKaW5kZXggMWU0YjQ3ZC4uZjdiOWMwZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LVdBUk4tc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktV0FSTi1zdGRlcnIudHh0CkBAIC0xLDMgKzEsMTAgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorKwogQ01ha2UgV2FybmluZyBcKGRldlwpIGluIENNYWtlTGlzdHMudHh0OgogICBQb2xpY3kgQ01QMDAxOSBpcyBub3Qgc2V0OiBEbyBub3QgcmUtZXhwYW5kIHZhcmlhYmxlcyBpbiBpbmNsdWRlIGFuZCBsaW5rCiAgIGluZm9ybWF0aW9uLiAgUnVuICJjbWFrZSAtLWhlbHAtcG9saWN5IENNUDAwMTkiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1leGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tZXhlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tZXhlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItTk9XQVJOLXNoYXJlZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zaGFyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE1OGZiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zaGFyZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLU5FVy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtTkVXLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01ha2VMaXN0cy50eHQ6MSBcKGNtYWtlX21pbmltdW1fcmVxdWlyZWRcKToKKyAgQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gb2YKKyAgQ01ha2UuCisKKyAgVXBkYXRlIHRoZSBWRVJTSU9OIGFyZ3VtZW50IDxtaW4+IHZhbHVlIG9yIHVzZSBhIC4uLjxtYXg+IHN1ZmZpeCB0byB0ZWxsCisgIENNYWtlIHRoYXQgdGhlIHByb2plY3QgZG9lcyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtbGlua19saWJyYXJpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLWxpbmtfbGlicmFyaWVzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLWxpbmtfbGlicmFyaWVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItTk9XQVJOLXN0YXRpYy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE1OGZiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1XQVJOLWVtcHR5LW9sZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tZW1wdHktb2xkLXN0ZGVyci50eHQKaW5kZXggNmE2YTBjNy4uODc0MDRkMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tZW1wdHktb2xkLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tZW1wdHktb2xkLXN0ZGVyci50eHQKQEAgLTEsMyArMSwxMCBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01ha2VMaXN0cy50eHQ6MSBcKGNtYWtlX21pbmltdW1fcmVxdWlyZWRcKToKKyAgQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gb2YKKyAgQ01ha2UuCisKKyAgVXBkYXRlIHRoZSBWRVJTSU9OIGFyZ3VtZW50IDxtaW4+IHZhbHVlIG9yIHVzZSBhIC4uLjxtYXg+IHN1ZmZpeCB0byB0ZWxsCisgIENNYWtlIHRoYXQgdGhlIHByb2plY3QgZG9lcyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuCisrCiBDTWFrZSBXYXJuaW5nIFwoZGV2XCkgaW4gQ01ha2VMaXN0cy50eHQ6CiAgIFBvbGljeSBDTVAwMDIyIGlzIG5vdCBzZXQ6IElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyBkZWZpbmVzIHRoZSBsaW5rCiAgIGludGVyZmFjZS4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMDIyIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItV0FSTi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tc3RkZXJyLnR4dAppbmRleCAyZjdkZmJmLi41ZDc1NzIwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItV0FSTi1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1XQVJOLXN0ZGVyci50eHQKQEAgLTEsNCArMSwxMSBAQAotXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBpbiBDTWFrZUxpc3RzLnR4dDoKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorKworQ01ha2UgV2FybmluZyBcKGRldlwpIGluIENNYWtlTGlzdHMudHh0OgogICBQb2xpY3kgQ01QMDAyMiBpcyBub3Qgc2V0OiBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgZGVmaW5lcyB0aGUgbGluawogICBpbnRlcmZhY2UuICBSdW4gImNtYWtlIC0taGVscC1wb2xpY3kgQ01QMDAyMiIgZm9yIHBvbGljeSBkZXRhaWxzLiAgVXNlIHRoZQogICBjbWFrZV9wb2xpY3kgY29tbWFuZCB0byBzZXQgdGhlIHBvbGljeSBhbmQgc3VwcHJlc3MgdGhpcyB3YXJuaW5nLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLWV4cG9ydC1leGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1leHBvcnQtZXhlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1leHBvcnQtZXhlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI2L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyNi9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI2L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjYvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI3L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyNy9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI3L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjcvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI4L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyOC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNDRjZGI0Li40Zjg2N2RmIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI4L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjgvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSBOT19QT0xJQ1lfU0NPUEUpICMgcG9saWN5IHVzZWQgYXQgZW5kIG9mIGRpcgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAzNy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMzcvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNGIzZGU4NCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAzNy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDM3L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDA0MS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDEvQ01ha2VMaXN0cy50eHQKaW5kZXggZjQ1MmRiMS4uYTA2NTkxYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDA0MS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDQxL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDWFgpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDQyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCBmNDUyZGIxLi5hMDY1OTFjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDIvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDQzL0NNYWtlTGlzdHMudHh0CmluZGV4IGQwMjdmM2UuLmNjOGE2ZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA0My9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQ1hYKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlIE5PX1BPTElDWV9TQ09QRSkgIyBwb2xpY3kgdXNlZCBhdCBlbmQgb2YgZGlyCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDQ1L0NNYWtlTGlzdHMudHh0CmluZGV4IGY0NTJkYjEuLmEwNjU5MWMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA0NS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQ1hYKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTVAwMTA0LUNvbW1vbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1Db21tb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NjhmMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1Db21tb24uY21ha2UKQEAgLTAsMCArMSwyIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKK2FkZF9saWJyYXJ5KGN1ZGEgbWFpbi5jdSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1ORVcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtTkVXLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMmFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtTkVXLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTA0IE5FVykKK2luY2x1ZGUoQ01QMDEwNC1Db21tb24uY21ha2UpCisKK2lmKE5PVCBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNNQUtFX0NVREFfQVJDSElURUNUVVJFUyBpcyBlbXB0eSB3aXRoIENNUDAxMDQgZW5hYmxlZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTVAwMTA0LU9GRi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1PRkYuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNjY4MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1PRkYuY21ha2UKQEAgLTAsMCArMSwzIEBACitpbmNsdWRlKENNUDAxMDQtQ29tbW9uLmNtYWtlKQorCitzZXRfcHJvcGVydHkoVEFSR0VUIGN1ZGEgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIE9GRikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1PTEQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWVlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtT0xELmNtYWtlCkBAIC0wLDAgKzEsMTIgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwNCBPTEQpCitpbmNsdWRlKENNUDAxMDQtQ29tbW9uLmNtYWtlKQorCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICBpZihDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIGlzbid0IGVtcHR5IGZvciBOVklESUEgd2l0aCBDTVAwMTA0IE9MRC4iKQorICBlbmRpZigpCitlbHNlKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJVbmtub3duIikKKyAgaWYoTk9UIENNQUtFX0NVREFfQVJDSElURUNUVVJFUykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgaXNuJ3Qgbm9uLWVtcHR5IGZvciBub24tTlZJRElBIHdpdGggQ01QMDEwNCBPTEQuIikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTVAwMTA0LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1XQVJOLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5YjdkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1XQVJOLXN0ZGVyci50eHQKQEAgLTAsMCArMSw4IEBACitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgaW4gQ01ha2VMaXN0cy50eHQ6CisgIFBvbGljeSBDTVAwMTA0IGlzIG5vdCBzZXQ6IENNQUtFX0NVREFfQVJDSElURUNUVVJFUyBub3cgZGV0ZWN0ZWQgZm9yIE5WQ0MsCisgIGVtcHR5IENVREFfQVJDSElURUNUVVJFUyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTA0IgorICBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZAorICBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgQ1VEQV9BUkNISVRFQ1RVUkVTIGlzIGVtcHR5IGZvciB0YXJnZXQgImN1ZGEiLgorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1XQVJOLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNGE4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtV0FSTi5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoQ01QMDEwNC1Db21tb24uY21ha2UpCitzZXRfcHJvcGVydHkoVEFSR0VUIGN1ZGEgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZmNzJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw2IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoQ01QMDEwNC1PTEQpCitydW5fY21ha2UoQ01QMDEwNC1ORVcpCitydW5fY21ha2UoQ01QMDEwNC1PRkYpCitydW5fY21ha2UoQ01QMDEwNC1XQVJOKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9tYWluLmN1IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDdhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L21haW4uY3UKQEAgLTAsMCArMSwzIEBACitpbnQgbWFpbigpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtQ29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LUNvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWY3OTA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LUNvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlKERvY3VtZW50YXRpb24gT1BUSU9OQUwgUkVTVUxUX1ZBUklBQkxFIGZvdW5kKQoraWYgKE5PVCBzaG91bGRfZmluZCBBTkQgZm91bmQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlIERvY3VtZW50YXRpb24gbW9kdWxlIHNob3VsZCBub3QgaGF2ZSBiZWVuIGZvdW5kLCBidXQgaXQgd2FzLiIpCitlbmRpZiAoKQoraWYgKHNob3VsZF9maW5kIEFORCBOT1QgZm91bmQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlIERvY3VtZW50YXRpb24gbW9kdWxlIHNob3VsZCBoYXZlIGJlZW4gZm91bmQsIGJ1dCBpdCB3YXMgbm90LiIpCitlbmRpZiAoKQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvRG9jdW1lbnRhdGlvbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtTkVXLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LU5FVy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtTkVXLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtTkVXLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkNzc0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1ORVctc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IC4qL01vZHVsZXMvRG9jdW1lbnRhdGlvbi5jbWFrZToxNSBcKG1lc3NhZ2VcKToKKyAgRG9jdW1lbnRhdGlvbi5jbWFrZSBpcyBWVEstc3BlY2lmaWMgY29kZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5vbi1WVEsKKyAgcHJvamVjdHMuICBUaGlzIGxvZ2ljIGluIHRoaXMgbW9kdWxlIGlzIGJlc3Qgc2hpcHBlZCB3aXRoIHRoZSBwcm9qZWN0IHVzaW5nCisgIGl0IHJhdGhlciB0aGFuIHdpdGggQ01ha2UuICBUaGlzIGlzIG5vdyBhbiBlcnJvciBhY2NvcmRpbmcgdG8gcG9saWN5CisgIENNUDAxMDYuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTVAwMTA2LUNvbW1vbi5jbWFrZToxMCBcKGluY2x1ZGVcKQorICBDTVAwMTA2LU5FVy5jbWFrZTo0IFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjcgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1ORVcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtTkVXLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZDViZDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtTkVXLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTA2IE5FVykKKworc2V0KHNob3VsZF9maW5kIE9GRikKK2luY2x1ZGUoQ01QMDEwNi1Db21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtT0xELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LU9MRC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzBlODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LU9MRC5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwNiBPTEQpCisKK3NldChzaG91bGRfZmluZCBPTikKK2luY2x1ZGUoQ01QMDEwNi1Db21tb24uY21ha2UpCitpZiAoTk9UIERFRklORUQgQlVJTERfRE9DVU1FTlRBVElPTikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJDYWNoZSB2YXJpYWJsZXMgc2VlbSB0byBoYXZlIG5vdCBiZWVuIG1hZGUgd2l0aCBhIGBPTERgIHBvbGljeSAiCisgICAgInNldHRpbmcuIikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1QYXJhVmlldy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tUGFyYVZpZXctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE4ODliCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tUGFyYVZpZXctc3RkZXJyLnR4dApAQCAtMCwwICsxLDggQEAKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBDTVAwMTA2LUNvbW1vbi5jbWFrZToxIFwoaW5jbHVkZVwpOgorICBQb2xpY3kgQ01QMDEwNiBpcyBub3Qgc2V0OiBUaGUgRG9jdW1lbnRhdGlvbiBtb2R1bGUgaXMgcmVtb3ZlZC4gIFJ1biAiY21ha2UKKyAgLS1oZWxwLXBvbGljeSBDTVAwMTA2IiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvCisgIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIHN1YmRpci9DTWFrZUxpc3RzLnR4dDoyIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVBhcmFWaWV3LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tUGFyYVZpZXcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5YWJjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVBhcmFWaWV3LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KHNob3VsZF9maW5kIE9OKQorYWRkX3N1YmRpcmVjdG9yeShzdWJkaXIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1WVEstc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVZUSy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTc1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1WVEstc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBDTVAwMTA2LUNvbW1vbi5jbWFrZToxIFwoaW5jbHVkZVwpOgorICBQb2xpY3kgQ01QMDEwNiBpcyBub3Qgc2V0OiBUaGUgRG9jdW1lbnRhdGlvbiBtb2R1bGUgaXMgcmVtb3ZlZC4gIFJ1biAiY21ha2UKKyAgLS1oZWxwLXBvbGljeSBDTVAwMTA2IiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvCisgIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDYtV0FSTi1WVEsuY21ha2U6MiBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDo3IFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVZUSy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVZUSy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWY2YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tVlRLLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KHNob3VsZF9maW5kIE9OKQoraW5jbHVkZShDTVAwMTA2LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDQ4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMzcgQEAKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBDTVAwMTA2LUNvbW1vbi5jbWFrZToxIFwoaW5jbHVkZVwpOgorICBQb2xpY3kgQ01QMDEwNiBpcyBub3Qgc2V0OiBUaGUgRG9jdW1lbnRhdGlvbiBtb2R1bGUgaXMgcmVtb3ZlZC4gIFJ1biAiY21ha2UKKyAgLS1oZWxwLXBvbGljeSBDTVAwMTA2IiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvCisgIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDYtV0FSTi5jbWFrZToyIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjcgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgorCitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgLiovTW9kdWxlcy9Eb2N1bWVudGF0aW9uLmNtYWtlOjI3IFwobWVzc2FnZVwpOgorICBQb2xpY3kgQ01QMDEwNiBpcyBub3Qgc2V0OiBUaGUgRG9jdW1lbnRhdGlvbiBtb2R1bGUgaXMgcmVtb3ZlZC4gIFJ1biAiY21ha2UKKyAgLS1oZWxwLXBvbGljeSBDTVAwMTA2IiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvCisgIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgRG9jdW1lbnRhdGlvbi5jbWFrZSBpcyBWVEstc3BlY2lmaWMgY29kZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5vbi1WVEsKKyAgcHJvamVjdHMuICBUaGlzIGxvZ2ljIGluIHRoaXMgbW9kdWxlIGlzIGJlc3Qgc2hpcHBlZCB3aXRoIHRoZSBwcm9qZWN0IHVzaW5nCisgIGl0IHJhdGhlciB0aGFuIHdpdGggQ01ha2UuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTVAwMTA2LUNvbW1vbi5jbWFrZToxIFwoaW5jbHVkZVwpCisgIENNUDAxMDYtV0FSTi5jbWFrZToyIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjcgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgorCitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgLiovTW9kdWxlcy9Eb2N1bWVudGF0aW9uLmNtYWtlOjI3IFwobWVzc2FnZVwpOgorICBQb2xpY3kgQ01QMDEwNiBpcyBub3Qgc2V0OiBUaGUgRG9jdW1lbnRhdGlvbiBtb2R1bGUgaXMgcmVtb3ZlZC4gIFJ1biAiY21ha2UKKyAgLS1oZWxwLXBvbGljeSBDTVAwMTA2IiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvCisgIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgRG9jdW1lbnRhdGlvbi5jbWFrZSBpcyBWVEstc3BlY2lmaWMgY29kZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5vbi1WVEsKKyAgcHJvamVjdHMuICBUaGlzIGxvZ2ljIGluIHRoaXMgbW9kdWxlIGlzIGJlc3Qgc2hpcHBlZCB3aXRoIHRoZSBwcm9qZWN0IHVzaW5nCisgIGl0IHJhdGhlciB0aGFuIHdpdGggQ01ha2UuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTVAwMTA2LUNvbW1vbi5jbWFrZToxMCBcKGluY2x1ZGVcKQorICBDTVAwMTA2LVdBUk4uY21ha2U6MiBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDo3IFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmNmMzOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KHNob3VsZF9maW5kIE9OKQoraW5jbHVkZShDTVAwMTA2LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZmE2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKK2lmIChSdW5DTWFrZV9URVNUIFNUUkVRVUFMICJDTVAwMTA2LVdBUk4tVlRLIikKKyAgcHJvamVjdChWVEsgTk9ORSkKK2Vsc2UgKCkKKyAgcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitlbmRpZiAoKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VjMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw3IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoQ01QMDEwNi1PTEQpCitydW5fY21ha2UoQ01QMDEwNi1ORVcpCitydW5fY21ha2UoQ01QMDEwNi1XQVJOKQorcnVuX2NtYWtlKENNUDAxMDYtV0FSTi1WVEspCitydW5fY21ha2UoQ01QMDEwNi1XQVJOLVBhcmFWaWV3KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9zdWJkaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L3N1YmRpci9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDFkZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9zdWJkaXIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyIEBACitwcm9qZWN0KFZUSyBOT05FKQoraW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vQ01QMDEwNi1Db21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU5ZjhiY2EuLmIwMzdhNmQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CkBAIC04MSw3ICs4MSw5IEBACiAjIFRlc3QgTVNWQyBmb3Igb2xkZXIgaG9zdCBDTWFrZSB2ZXJzaW9ucywgYW5kIHRlc3QKICMgV0lOMzIvQ01BS0VfQ19DT01QSUxFUl9JRCB0byBmaXggY2hlY2sgb24gSW50ZWwgZm9yIFdpbmRvd3MuCiBpZihNU1ZDIE9SIChXSU4zMiBBTkQgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJNU1ZDfEludGVsIikpCi0gIHNldChHZW5lcmF0b3JFeHByZXNzaW9uX0FSR1MgLURMSU5LRVJfU1VQUE9SVFNfUERCPTEpCisgIHNldChMSU5LRVJfU1VQUE9SVFNfUERCIDEpCitlbHNlKCkKKyAgc2V0KExJTktFUl9TVVBQT1JUU19QREIgMCkKIGVuZGlmKCkKIAogYWRkX1J1bkNNYWtlX3Rlc3QoQ01QMDAxOSkKQEAgLTExNiw2ICsxMTgsMTIgQEAKIGFkZF9SdW5DTWFrZV90ZXN0KENNUDAwNjkpCiBhZGRfUnVuQ01ha2VfdGVzdChDTVAwMDgxKQogYWRkX1J1bkNNYWtlX3Rlc3QoQ01QMDEwMikKK2lmKENNYWtlX1RFU1RfQ1VEQSkKKyAgYWRkX1J1bkNNYWtlX3Rlc3QoQ01QMDEwNCkKKyAgc2V0X3Byb3BlcnR5KFRFU1QgUnVuQ01ha2UuQ01QMDEwNCBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQorZW5kaWYoKQorYWRkX1J1bkNNYWtlX3Rlc3QoQ01QMDEwNikKIAogIyBUaGUgdGVzdCBmb3IgUG9saWN5IDY1IHJlcXVpcmVzIHRoZSB1c2Ugb2YgdGhlCiAjIENNQUtFX1NIQVJFRF9MSUJSQVJZX0xJTktfQ1hYX0ZMQUdTIHZhcmlhYmxlLCB3aGljaCBib3RoIHRoZSBWUyBhbmQgWGNvZGUKQEAgLTE0NSw2ICsxNTMsOCBAQAogICAgIGxpc3QoQVBQRU5EIE5pbmphTXVsdGlDb25maWdfQVJHUyAtRENNYWtlX1RFU1RfQ1VEQT0ke0NNYWtlX1RFU1RfQ1VEQX0pCiAgIGVuZGlmKCkKICAgYWRkX1J1bkNNYWtlX3Rlc3QoTmluamFNdWx0aUNvbmZpZykKKyAgc2V0X3Byb3BlcnR5KFRFU1QgUnVuQ01ha2UuTmluamFNdWx0aUNvbmZpZyBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQogZW5kaWYoKQogYWRkX1J1bkNNYWtlX3Rlc3QoQ1Rlc3QpCiAKQEAgLTE1Myw2ICsxNjMsNyBAQAogICAgIC1EUFNFVURPX0JDPSQ8VEFSR0VUX0ZJTEU6cHNldWRvX0JDPgogICAgIC1EUFNFVURPX1BVUklGWT0kPFRBUkdFVF9GSUxFOnBzZXVkb19wdXJpZnk+CiAgICAgLURQU0VVRE9fVkFMR1JJTkQ9JDxUQVJHRVRfRklMRTpwc2V1ZG9fdmFsZ3JpbmQ+CisgICAgLURQU0VVRE9fQ1VEQV9NRU1DSEVDSz0kPFRBUkdFVF9GSUxFOnBzZXVkb19jdWRhLW1lbWNoZWNrPgogICAgIC1EUFNFVURPX0JDX05PTE9HPSQ8VEFSR0VUX0ZJTEU6cHNldWRvbmxfQkM+CiAgICAgLURQU0VVRE9fUFVSSUZZX05PTE9HPSQ8VEFSR0VUX0ZJTEU6cHNldWRvbmxfcHVyaWZ5PgogICAgIC1EUFNFVURPX1ZBTEdSSU5EX05PTE9HPSQ8VEFSR0VUX0ZJTEU6cHNldWRvbmxfdmFsZ3JpbmQ+CkBAIC0xNjksNyArMTgwLDIwIEBACiAgIHNldChhdXRvZ2VuX3dpdGhfcXQ1IFRSVUUpCiBlbmRpZiAoKQogYWRkX1J1bkNNYWtlX3Rlc3QoQXV0b2dlbiAtRHdpdGhfcXQ1PSR7YXV0b2dlbl93aXRoX3F0NX0pCi1hZGRfUnVuQ01ha2VfdGVzdChCdWlsZERlcGVuZHMpCitpZihOT1QgREVGSU5FRCBDTWFrZV9URVNUX0J1aWxkRGVwZW5kc19HTlVfQVMKKyAgICBBTkQgQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIgorICAgIEFORCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiXk5pbmphIgorICAgICkKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfQ19DT01QSUxFUn0iIC1wcmludC1wcm9nLW5hbWU9YXMKKyAgICBSRVNVTFRfVkFSSUFCTEUgX2dudV9yZXMKKyAgICBPVVRQVVRfVkFSSUFCTEUgX2dudV9hcyBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSBFUlJPUl9RVUlFVCkKKyAgaWYoX2dudV9yZXMgRVFVQUwgMCBBTkQgX2dudV9hcykKKyAgICBzZXQoQ01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTICIke19nbnVfYXN9IikKKyAgZW5kaWYoKQorZW5kaWYoKQorYWRkX1J1bkNNYWtlX3Rlc3QoQnVpbGREZXBlbmRzCisgIC1EQ01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTPSR7Q01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTfQorICApCiBpZihVTklYIEFORCAiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJVbml4IE1ha2VmaWxlc3xOaW5qYSIpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KEJ5cHJvZHVjdHMpCiBlbmRpZigpCkBAIC0xODAsMTkgKzIwNCwzMiBAQAogYWRkX1J1bkNNYWtlX3Rlc3QoQ29tcGlsZXJOb3RGb3VuZCkKIGFkZF9SdW5DTWFrZV90ZXN0KENvbmZpZ3VyZSAtRE1TVkNfSURFPSR7TVNWQ19JREV9KQogYWRkX1J1bkNNYWtlX3Rlc3QoRGlzYWxsb3dlZENvbW1hbmRzKQoraWYoIiR7Q01BS0VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiVW5peCBNYWtlZmlsZXN8TmluamEiKQorICBhZGRfUnVuQ01ha2VfdGVzdChFeHBvcnRDb21waWxlQ29tbWFuZHMpCitlbmRpZigpCiBhZGRfUnVuQ01ha2VfdGVzdChFeHRlcm5hbERhdGEpCiBhZGRfUnVuQ01ha2VfdGVzdChGZWF0dXJlU3VtbWFyeSkKIGFkZF9SdW5DTWFrZV90ZXN0KEZQSFNBKQotYWRkX1J1bkNNYWtlX3Rlc3QoRmlsZUFQSSAtRFBZVEhPTl9FWEVDVVRBQkxFPSR7UFlUSE9OX0VYRUNVVEFCTEV9KQorYWRkX1J1bkNNYWtlX3Rlc3QoRmlsZUFQSSAtRFBZVEhPTl9FWEVDVVRBQkxFPSR7UFlUSE9OX0VYRUNVVEFCTEV9CisgICAgICAgICAgICAgICAgICAgICAgICAgIC1EQ01BS0VfQ1hYX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfSkKIGFkZF9SdW5DTWFrZV90ZXN0KEZpbmRCb29zdCkKIGFkZF9SdW5DTWFrZV90ZXN0KEZpbmRMdWEpCiBhZGRfUnVuQ01ha2VfdGVzdChGaW5kT3BlbkdMKQogaWYoQ01ha2VfVEVTVF9Vc2VTV0lHKQorICBhZGRfUnVuQ01ha2VfdGVzdChGaW5kU1dJRykKICAgYWRkX1J1bkNNYWtlX3Rlc3QoVXNlU1dJRyAtRENNYWtlX1RFU1RfRmluZFB5dGhvbj0ke0NNYWtlX1RFU1RfRmluZFB5dGhvbn0pCiBlbmRpZigpCiBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJXYXRjb20iKQogICBhZGRfUnVuQ01ha2VfdGVzdChHZW5lcmF0ZUV4cG9ydEhlYWRlcikKIGVuZGlmKCkKK2FkZF9SdW5DTWFrZV90ZXN0KEdlbkV4LUNPTVBJTEVfTEFOR1VBR0UpCithZGRfUnVuQ01ha2VfdGVzdChHZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEKQorYWRkX1J1bkNNYWtlX3Rlc3QoR2VuRXgtTElOS19MQU5HVUFHRSkKK2FkZF9SdW5DTWFrZV90ZXN0KEdlbkV4LUxJTktfTEFOR19BTkRfSUQpCithZGRfUnVuQ01ha2VfdGVzdChHZW5FeC1IT1NUX0xJTkspCithZGRfUnVuQ01ha2VfdGVzdChHZW5FeC1ERVZJQ0VfTElOSykKK2FkZF9SdW5DTWFrZV90ZXN0KEdlbkV4LVRBUkdFVF9GSUxFIC1ETElOS0VSX1NVUFBPUlRTX1BEQj0ke0xJTktFUl9TVVBQT1JUU19QREJ9KQorYWRkX1J1bkNNYWtlX3Rlc3QoR2VuRXgtR0VORVhfRVZBTCkKIGFkZF9SdW5DTWFrZV90ZXN0KEdlbmVyYXRvckV4cHJlc3Npb24pCiBhZGRfUnVuQ01ha2VfdGVzdChHZW5lcmF0b3JJbnN0YW5jZSkKIGFkZF9SdW5DTWFrZV90ZXN0KEdlbmVyYXRvclBsYXRmb3JtKQpAQCAtMjUxLDYgKzI4OCw3IEBACiBhZGRfUnVuQ01ha2VfdGVzdChhZGRfZXhlY3V0YWJsZSkKIGFkZF9SdW5DTWFrZV90ZXN0KGFkZF9saWJyYXJ5KQogYWRkX1J1bkNNYWtlX3Rlc3QoYWRkX3N1YmRpcmVjdG9yeSkKK2FkZF9SdW5DTWFrZV90ZXN0KGFkZF90ZXN0KQogYWRkX1J1bkNNYWtlX3Rlc3QoYnVpbGRfY29tbWFuZCkKIGFkZF9leGVjdXRhYmxlKGV4aXRfY29kZSBleGl0X2NvZGUuYykKIHNldChleGVjdXRlX3Byb2Nlc3NfQVJHUyAtREVYSVRfQ09ERV9FWEU9JDxUQVJHRVRfRklMRTpleGl0X2NvZGU+KQpAQCAtMjU5LDYgKzI5Nyw3IEBACiBlbmRpZigpCiBhZGRfUnVuQ01ha2VfdGVzdChleGVjdXRlX3Byb2Nlc3MpCiBhZGRfUnVuQ01ha2VfdGVzdChleHBvcnQpCithZGRfUnVuQ01ha2VfdGVzdChjbWFrZV9sYW5ndWFnZSkKIGFkZF9SdW5DTWFrZV90ZXN0KGNtYWtlX21pbmltdW1fcmVxdWlyZWQpCiBhZGRfUnVuQ01ha2VfdGVzdChjbWFrZV9wYXJzZV9hcmd1bWVudHMpCiBhZGRfUnVuQ01ha2VfdGVzdChjb250aW51ZSkKQEAgLTI3OSw3ICszMTgsNyBAQAogYWRkX1J1bkNNYWtlX3Rlc3QoY3Rlc3RfZml4dHVyZXMpCiBhZGRfUnVuQ01ha2VfdGVzdChmaWxlKQogYWRkX1J1bkNNYWtlX3Rlc3QoZmluZF9maWxlKQotYWRkX1J1bkNNYWtlX3Rlc3QoZmluZF9saWJyYXJ5KQorYWRkX1J1bkNNYWtlX3Rlc3QoZmluZF9saWJyYXJ5IC1EQ1lHV0lOPSR7Q1lHV0lOfSkKIGFkZF9SdW5DTWFrZV90ZXN0KGZpbmRfcGFja2FnZSkKIGFkZF9SdW5DTWFrZV90ZXN0KGZpbmRfcGF0aCkKIGFkZF9SdW5DTWFrZV90ZXN0KGZpbmRfcHJvZ3JhbSAtRENNQUtFX1NZU1RFTV9OQU1FPSR7Q01BS0VfU1lTVEVNX05BTUV9KQpAQCAtMzMyLDYgKzM3MSw3IEBACiAgICAgICBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTgogICAgICAgQ01BS0VfQ1hYX1NUQU5EQVJEX0RFRkFVTFQKICAgICAgIENNYWtlX1RFU1RfQ1VEQQorICAgICAgQ01ha2VfVEVTVF9GSUxFU1lTVEVNXzFTCiAgICAgICBDTUFLRV9PQkpDX1NUQU5EQVJEX0RFRkFVTFQKICAgICAgIENNQUtFX09CSkNYWF9TVEFOREFSRF9ERUZBVUxUCiAgICAgICApCkBAIC0zNDAsNiArMzgwLDggQEAKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQogICBhZGRfUnVuQ01ha2VfdGVzdCh0cnlfY29tcGlsZSkKKyAgc2V0X3Byb3BlcnR5KFRFU1QgUnVuQ01ha2UudHJ5X2NvbXBpbGUgQVBQRU5ECisgICAgUFJPUEVSVFkgTEFCRUxTICJDVURBIikKIGVuZGZ1bmN0aW9uKCkKIGFkZF9SdW5DTWFrZV90ZXN0X3RyeV9jb21waWxlKCkKIApAQCAtMzkyLDkgKzQzNCwxMyBAQAogaWYoVEFSR0VUIGN0cmVzYWxsb2MpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KENUZXN0UmVzb3VyY2VBbGxvY2F0aW9uIC1EQ1RSRVNBTExPQ19DT01NQU5EPSQ8VEFSR0VUX0ZJTEU6Y3RyZXNhbGxvYz4pCiBlbHNlKCkKLSAgbWVzc2FnZShXQVJOSU5HICJDb3VsZCBub3QgZmluZCBvciBidWlsZCBjdHJlc2FsbG9jIikKKyAgbWVzc2FnZShTVEFUVVMgIkNvdWxkIG5vdCBmaW5kIGN0cmVzYWxsb2MiKQogZW5kaWYoKQogCitpZihOT1QgV0lOMzIpCisgIGFkZF9SdW5DTWFrZV90ZXN0KFN5bWxpbmtUcmVlcykKK2VuZGlmICgpCisKIGZpbmRfcGFja2FnZShRdDQgUVVJRVQpCiBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBRVUlFVCkKIGlmIChRVDRfRk9VTkQgQU5EIFF0NUNvcmVfRk9VTkQgQU5EIE5PVCBRdDVDb3JlX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDUuMS4wKQpAQCAtNDQ3LDEyICs0OTMsMjAgQEAKICAgYWRkX1J1bkNNYWtlX3Rlc3QoRnJhbWV3b3JrKQogZW5kaWYoKQogCithZGRfUnVuQ01ha2VfdGVzdChGaWxlX0FyY2hpdmUpCithZGRfUnVuQ01ha2VfdGVzdChGaWxlX0NvbmZpZ3VyZSkKIGFkZF9SdW5DTWFrZV90ZXN0KEZpbGVfR2VuZXJhdGUpCiBhZGRfUnVuQ01ha2VfdGVzdChFeHBvcnRXaXRob3V0TGFuZ3VhZ2UpCiBhZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfbGlua19kaXJlY3RvcmllcykKIGFkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX2xpYnJhcmllcykKK2FkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUykKK2FkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFKQorYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQpCiBhZGRfUnVuQ01ha2VfdGVzdChhZGRfbGlua19vcHRpb25zIC1EQ01BS0VfQ19DT01QSUxFUl9JRD0ke0NNQUtFX0NfQ09NUElMRVJfSUR9KQotYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2xpbmtfb3B0aW9ucyAtRENNQUtFX0NfQ09NUElMRVJfSUQ9JHtDTUFLRV9DX0NPTVBJTEVSX0lEfSkKK2FkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX29wdGlvbnMgLURDTUFLRV9DX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ19DT01QSUxFUl9JRH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURDTWFrZV9URVNUX0NVREE9JHtDTWFrZV9URVNUX0NVREF9KQorc2V0X3Byb3BlcnR5KFRFU1QgUnVuQ01ha2UudGFyZ2V0X2xpbmtfb3B0aW9ucyBBUFBFTkQKKyAgUFJPUEVSVFkgTEFCRUxTICJDVURBIikKIAogYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMpCiBhZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfY29tcGlsZV9mZWF0dXJlcykKQEAgLTQ2MSw2ICs1MTUsMTIgQEAKIGFkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9zb3VyY2VzKQogYWRkX1J1bkNNYWtlX3Rlc3QoQ2hlY2tNb2R1bGVzKQogYWRkX1J1bkNNYWtlX3Rlc3QoQ2hlY2tJUE9TdXBwb3J0ZWQpCitpZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiKExpbnV4fERhcndpbikiCisgICAgQU5EIChDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkNsYW5nfEdOVSIgT1IgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBNQVRDSEVTICJHTlUiKSkKKyAgYWRkX1J1bkNNYWtlX3Rlc3QoQ2hlY2tMaW5rZXJGbGFnIC1EQ01BS0VfQ19DT01QSUxFUl9JRD0ke0NNQUtFX0NfQ09NUElMRVJfSUR9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQ9JHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEfSkKK2VuZGlmKCkKKwogYWRkX1J1bkNNYWtlX3Rlc3QoQ29tbWFuZExpbmUgLURDTUFLRV9TWVNURU1fTkFNRT0ke0NNQUtFX1NZU1RFTV9OQU1FfSAtRENZR1dJTj0ke0NZR1dJTn0gLURQWVRIT05fRVhFQ1VUQUJMRT0ke1BZVEhPTl9FWEVDVVRBQkxFfSkKIGFkZF9SdW5DTWFrZV90ZXN0KENvbW1hbmRMaW5lVGFyKQogCkBAIC00NzAsMTEgKzUzMCwxNSBAQAogICBzZXQoTk9fTkFNRUxJTksgMCkKIGVuZGlmKCkKIAotYWRkX1J1bkNNYWtlX3Rlc3QoaW5zdGFsbCAtRE5PX05BTUVMSU5LPSR7Tk9fTkFNRUxJTkt9IC1EQ1lHV0lOPSR7Q1lHV0lOfSAtRENNQUtFX0NfQ09NUElMRVJfSUQ9JHtDTUFLRV9DX0NPTVBJTEVSX0lEfQorYWRkX1J1bkNNYWtlX3Rlc3QoaW5zdGFsbCAtRE5PX05BTUVMSU5LPSR7Tk9fTkFNRUxJTkt9IC1EQ1lHV0lOPSR7Q1lHV0lOfQogICAtRENNQUtFX1NIQVJFRF9MSUJSQVJZX1JQQVRIX09SSUdJTl9UT0tFTj0ke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1JQQVRIX09SSUdJTl9UT0tFTn0KICAgLURDTUFLRV9TWVNURU1fTkFNRT0ke0NNQUtFX1NZU1RFTV9OQU1FfQogICAtRENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfQ19GTEFHPSR7Q01BS0VfU0hBUkVEX0xJQlJBUllfUlVOVElNRV9DX0ZMQUd9CiAgIC1EQ01BS0VfRVhFQ1VUQUJMRV9GT1JNQVQ9JHtDTUFLRV9FWEVDVVRBQkxFX0ZPUk1BVH0KKyAgKQorCithZGRfUnVuQ01ha2VfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUworICAtRENNQUtFX0NfQ09NUElMRVJfSUQ9JHtDTUFLRV9DX0NPTVBJTEVSX0lEfQogICAtRENNYWtlX0lOU1RBTExfTkFNRV9UT09MX0JVRz0ke0NNYWtlX0lOU1RBTExfTkFNRV9UT09MX0JVR30KICAgKQogCkBAIC01NTYsNiArNjIwLDggQEAKICAgICBsaXN0KEFQUEVORCBDb21waWxlckxhdW5jaGVyX0FSR1MgLURDTWFrZV9URVNUX09CSkM9MSkKICAgZW5kaWYoKQogICBhZGRfUnVuQ01ha2VfdGVzdChDb21waWxlckxhdW5jaGVyKQorICBzZXRfcHJvcGVydHkoVEVTVCBSdW5DTWFrZS5Db21waWxlckxhdW5jaGVyIEFQUEVORAorICAgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KGN0ZXN0X2xhYmVsc19mb3Jfc3VicHJvamVjdHMpCiBlbmRpZigpCiAKQEAgLTYyMiw4ICs2ODgsOCBAQAogYWRkX1J1bkNNYWtlX3Rlc3QoQW5kcm9pZE1LKQogCiBpZihDTWFrZV9URVNUX0FORFJPSURfTkRLIE9SIENNYWtlX1RFU1RfQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTikKLSAgaWYoTk9UICIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIk1ha2V8TmluamEiKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkFuZHJvaWQgdGVzdHMgc3VwcG9ydGVkIG9ubHkgYnkgTWFrZWZpbGUgYW5kIE5pbmphIGdlbmVyYXRvcnMiKQorICBpZihOT1QgIiR7Q01BS0VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiTWFrZXxOaW5qYXxWaXN1YWwgU3R1ZGlvIDFbNDU2XSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQW5kcm9pZCB0ZXN0cyBzdXBwb3J0ZWQgb25seSBieSBNYWtlZmlsZSwgTmluamEsIGFuZCBWaXN1YWwgU3R1ZGlvID49IDE0IGdlbmVyYXRvcnMiKQogICBlbmRpZigpCiAgIGZvcmVhY2godiBURVNUX0FORFJPSURfTkRLIFRFU1RfQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTikKICAgICBpZihDTWFrZV8ke3Z9KQpAQCAtNjQ5LDUgKzcxNSw1IEBACiAKIGFkZF9SdW5DTWFrZV90ZXN0KCJDVGVzdENvbW1hbmRFeHBhbmRMaXN0cyIpCiAKLWFkZF9SdW5DTWFrZV90ZXN0KFByZWNvbXBpbGVIZWFkZXJzKQorYWRkX1J1bkNNYWtlX3Rlc3QoUHJlY29tcGlsZUhlYWRlcnMgLURDTUFLRV9DX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ19DT01QSUxFUl9JRH0pCiBhZGRfUnVuQ01ha2VfdGVzdCgiVW5pdHlCdWlsZCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvQWNjZXB0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9BY2NlcHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWZiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvQWNjZXB0LnR4dApAQCAtMCwwICsxIEBACit5CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvSGVscGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9IZWxwZXJzLmNtYWtlCmluZGV4IDAyM2U1OTcuLjg5NmZiYTcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9IZWxwZXJzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9IZWxwZXJzLmNtYWtlCkBAIC01LDYgKzUsNyBAQAogICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke3BhdGhffS9jb250ZW50IikKICAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtwYXRoX30vY29udGVudCIpCiAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7SERJVVRJTF9FWEVDVVRBQkxFfSBhdHRhY2ggLW1vdW50cm9vdCAke3BhdGhffS9jb250ZW50IC1ub2Jyb3dzZSAke0ZJTEV9CisgICAgICAgICAgSU5QVVRfRklMRSAiJHtzcmNfZGlyfS9EcmFnTkRyb3AvQWNjZXB0LnR4dCIKICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgYXR0YWNoX3Jlc3VsdF8KICAgICAgICAgICBFUlJPUl9WQVJJQUJMRSBhdHRhY2hfZXJyb3JfCiAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX01PTk9MSVRISUNfZGVmYXVsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9wYWNrYWdpbmdfTU9OT0xJVEhJQ19kZWZhdWx0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjc4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX01PTk9MSVRISUNfZGVmYXVsdC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldChDUEFDS19ETUdfRElTQUJMRV9BUFBMSUNBVElPTlNfU1lNTElOSyBPTikKK3NldChDUEFDS19ETUdfVk9MVU1FX05BTUUgInZvbHVtZS1uYW1lIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAzYmUxZmQwLi41MzBiY2RmIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xMCw2ICsxMCw3IEBACiBydW5fY3BhY2tfdGVzdF9zdWJ0ZXN0cyhERUZBVUxUX1BFUk1JU1NJT05TICJDTUFLRV92YXJfc2V0O0NQQUNLX3Zhcl9zZXQ7Ym90aF9zZXQ7aW52YWxpZF9DTUFLRV92YXI7aW52YWxpZF9DUEFDS192YXIiICJSUE0uREVGQVVMVF9QRVJNSVNTSU9OUztERUIuREVGQVVMVF9QRVJNSVNTSU9OUyIgZmFsc2UgIk1PTk9MSVRISUM7Q09NUE9ORU5UIikKIHJ1bl9jcGFja190ZXN0KERFUEVOREVOQ0lFUyAiUlBNLkRFUEVOREVOQ0lFUztERUIuREVQRU5ERU5DSUVTIiB0cnVlICJDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3QoRElTVCAiUlBNLkRJU1QiIGZhbHNlICJNT05PTElUSElDIikKK3J1bl9jcGFja190ZXN0KERNR19TTEEgIkRyYWdORHJvcCIgZmFsc2UgIk1PTk9MSVRISUMiKQogcnVuX2NwYWNrX3Rlc3QoRU1QVFlfRElSICJSUE0uRU1QVFlfRElSO0RFQi5FTVBUWV9ESVI7VEdaIiB0cnVlICJNT05PTElUSElDO0NPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdChWRVJTSU9OICJSUE0uVkVSU0lPTjtERUIuVkVSU0lPTiIgZmFsc2UgIk1PTk9MSVRISUM7Q09NUE9ORU5UIikKIHJ1bl9jcGFja190ZXN0KEVYVFJBICJERUIuRVhUUkEiIGZhbHNlICJDT01QT05FTlQiKQpAQCAtMjAsNiArMjEsOCBAQAogcnVuX2NwYWNrX3Rlc3Rfc3VidGVzdHMoTUFJTl9DT01QT05FTlQgImludmFsaWQ7Zm91bmQiICJSUE0uTUFJTl9DT01QT05FTlQiIGZhbHNlICJDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3QoTUlOSU1BTCAiUlBNLk1JTklNQUw7REVCLk1JTklNQUw7N1o7VEJaMjtUR1o7VFhaO1RaO1pJUDtTVEdaO0V4dGVybmFsIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3RfcGFja2FnZV90YXJnZXQoTUlOSU1BTCAiUlBNLk1JTklNQUw7REVCLk1JTklNQUw7N1o7VEJaMjtUR1o7VFhaO1RaO1pJUDtTVEdaO0V4dGVybmFsIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQorcnVuX2NwYWNrX3Rlc3RfcGFja2FnZV90YXJnZXQoVEhSRUFERURfQUxMICJUWFoiIGZhbHNlICJNT05PTElUSElDO0NPTVBPTkVOVCIpCitydW5fY3BhY2tfdGVzdF9wYWNrYWdlX3RhcmdldChUSFJFQURFRCAiVFhaIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3Rfc3VidGVzdHMoUEFDS0FHRV9DSEVDS1NVTSAiaW52YWxpZDtNRDU7U0hBMTtTSEEyMjQ7U0hBMjU2O1NIQTM4NDtTSEE1MTIiICJUR1oiIGZhbHNlICJNT05PTElUSElDIikKIHJ1bl9jcGFja190ZXN0KFBBUlRJQUxMWV9SRUxPQ0FUQUJMRV9XQVJOSU5HICJSUE0uUEFSVElBTExZX1JFTE9DQVRBQkxFX1dBUk5JTkciIGZhbHNlICJDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3QoUEVSX0NPTVBPTkVOVF9GSUVMRFMgIlJQTS5QRVJfQ09NUE9ORU5UX0ZJRUxEUztERUIuUEVSX0NPTVBPTkVOVF9GSUVMRFMiIGZhbHNlICJDT01QT05FTlQiKQpAQCAtNDQsMyArNDcsNCBAQAogICAiTU9OT0xJVEhJQztDT01QT05FTlQiCiApCiBydW5fY3BhY2tfdGVzdChQUk9KRUNUX01FVEEgIlJQTS5QUk9KRUNUX01FVEE7REVCLlBST0pFQ1RfTUVUQSIgZmFsc2UgIk1PTk9MSVRISUM7Q09NUE9ORU5UIikKK3J1bl9jcGFja190ZXN0X3BhY2thZ2VfdGFyZ2V0KFBSRV9QT1NUX1NDUklQVFMgIlpJUCIgZmFsc2UgIk1PTk9MSVRISUM7Q09NUE9ORU5UIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5saWNlbnNlLnJ0ZiBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5saWNlbnNlLnJ0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWRhNzExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9FbmdsaXNoLmxpY2Vuc2UucnRmCkBAIC0wLDAgKzEsNyBAQAore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzM3tcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQore1xjb2xvcnRibCA7XHJlZDBcZ3JlZW4wXGJsdWUyNTU7fQore1wqXGdlbmVyYXRvciBSaWNoZWQyMCAxMC4wLjE4MzYyfVx2aWV3a2luZDRcdWMxCitccGFyZFxzYTIwMFxzbDI3NlxzbG11bHQxXGJcZjBcZnMyMlxsYW5nOSBMSUNFTlNFXGIwXHBhcgorVGhpcyBpcyBhbiBpbnN0YWxsZXIgY3JlYXRlZCB1c2luZyBDUGFjayAoe3tcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgaHR0cHM6Ly9jbWFrZS5vcmcgfX17XGZsZHJzbHR7aHR0cHM6Ly9jbWFrZS5vcmdcdWwwXGNmMH19fX1cZjBcZnMyMiApLiBObyBsaWNlbnNlIHByb3ZpZGVkLlxwYXIKK1xwYXIKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5tZW51LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5tZW51LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmNiYzI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9FbmdsaXNoLm1lbnUudHh0CkBAIC0wLDAgKzEsOSBAQAorRW5nbGlzaAorQWdyZWUKK0Rpc2FncmVlCitQcmludAorU2F2ZS4uLgorWW91IGFncmVlIHRvIHRoZSBMaWNlbnNlIEFncmVlbWVudCB0ZXJtcyB3aGVuIHlvdSBjbGljayB0aGUgIkFncmVlIiBidXR0b24uCitTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudAorVGhpcyB0ZXh0IGNhbm5vdCBiZSBzYXZlZC4gVGhpcyBkaXNrIG1heSBiZSBmdWxsIG9yIGxvY2tlZCBvciB0aGUgZmlsZSBtYXkgYmUgbG9ja2VkLgorVW5hYmxlIHRvIHByaW50LiAgTWFrZSBzdXJlIHlvdSBoYXZlIHNlbGVjdGVkIGEgcHJpbnRlci4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRXhwZWN0ZWRGaWxlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRXhwZWN0ZWRGaWxlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWEzYTVmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9FeHBlY3RlZEZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KEVYUEVDVEVEX0ZJTEVTX0NPVU5UICIxIikKK3NldChFWFBFQ1RFRF9GSUxFX0NPTlRFTlRfMV9MSVNUICIvZm9vOy9mb28vQ01ha2VMaXN0cy50eHQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubGljZW5zZS50eHQgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ETUdfU0xBL0dlcm1hbi5saWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRkMWYyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubGljZW5zZS50eHQKQEAgLTAsMCArMSwzIEBACitMSVpFTloKKy0tLS0tLQorRGllcyBpc3QgZWluIEluc3RhbGxhdGlvbnNwcm9ncmFtbSwgZGFzIG1pdCBlcnN0ZWxsdCB3dXJkZSBDUGFjayAoaHR0cHM6Ly9jbWFrZS5vcmcpLiBLZWluZSBMaXplbnogYW5nZWdlYmVuLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubWVudS50eHQgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ETUdfU0xBL0dlcm1hbi5tZW51LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI0ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubWVudS50eHQKQEAgLTAsMCArMSw5IEBACitHZXJtYW4KK0FremVwdGllcmVuCitBYmxlaG5lbgorRHJ1Y2tlbgorU3BlaWNoZXJuLi4uCitLbGlja2VuIFNpZSBhdWYgIkFremVwdGllcmVuIiwgd2VubiBTaWUgbWl0IGRlbiBCZXN0aW1tdW5nZW4gZGVzIFNvZnR3YXJlLUxpemVuenZlcnRyYWdlcyBlaW52ZXJzdGFuZGVuIHNpbmQuCitTb2Z0d2FyZS1MaXplbnp2ZXJ0cmFnCitEaWVzZXIgVGV4dCBrYW5uIG5pY2h0IGdlc2ljaGVydCB3ZXJkZW4uIERpZXNlIEZlc3RwbGF0dGUgaXN0IG3CmmdsaWNoZXJ3ZWlzZSB2b2xsIG9kZXIgZ2VzY2jCn3R6dCBvZGVyIGRlciBPcmRuZXIgaXN0IGdlc2Nowp90enQuCitFcyBrYW5uIG5pY2h0IGdlZHJ1Y2t0IHdlcmRlbi4gQml0dGUgc3RlbGxlbiBTaWUgc2ljaGVyLCBkYXNzIGVpbiBEcnVja2VyIGF1c2dld8KKaGx0IGlzdC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvVmVyaWZ5UmVzdWx0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9WZXJpZnlSZXN1bHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZTE0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC0wLDAgKzEsMzMgQEAKK3NldChkbWcgIiR7YmluX2Rpcn0vJHtGT1VORF9GSUxFXzF9IikKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EIGhkaXV0aWwgdWRpZmRlcmV6IC14bWwgIiR7ZG1nfSIgT1VUUFVUX1ZBUklBQkxFIG91dCBFUlJPUl9WQVJJQUJMRSBlcnIgUkVTVUxUX1ZBUklBQkxFIHJlcykKK2lmKE5PVCByZXMgRVFVQUwgMCkKKyAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgZXJyICIgICR7ZXJyfSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJ1bm5pbmcgJ2hkaXV0aWwgdWRpZmRlcmV6IC14bWwnIG9uXG4gICR7ZG1nfVxuZmFpbGVkIHdpdGg6XG4ke2Vycn0iKQorZW5kaWYoKQorZm9yZWFjaChrZXkgIkxQaWMiICJTVFIjIiAiVEVYVCIgIlJURiAiKQorICBpZihOT1Qgb3V0IE1BVENIRVMgIjxrZXk+JHtrZXl9PC9rZXk+IikKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBvdXQgIiAgJHtvdXR9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogcnVubmluZyAnaGRpdXRpbCB1ZGlmZGVyZXogLXhtbCcgb25cbiAgJHtkbWd9XG5kaWQgbm90IHNob3cgJyR7a2V5fScga2V5OlxuJHtvdXR9IikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCitmb3JlYWNoKGxpbmUKKyAgICAjIExQaWMKKyAgICAiXHRBQUFBQWdBQUFBQUFBQUFEQUFFQUFBPT1cbiIKKyAgICAjIFNUUiMgRW5nbGlzaCBmaXJzdCBhbmQgbGFzdCBiYXNlNjQgbGluZXMKKyAgICAiXHRBQWtIUlc1bmJHbHphQVZCWjNKbFpRaEVhWE5oWjNKbFpRVlFjbWx1ZEFkVFlYWmxMaTR1XG4iCisgICAgIlx0WkNCaElIQnlhVzUwWlhJdVxuIgorICAgICMgU1RSIyBHZXJtYW4gZmlyc3QgYW5kIGxhc3QgYmFzZTY0IGxpbmVzCisgICAgIlx0QUFrR1IyVnliV0Z1QzBGcmVtVndkR2xsY21WdUNFRmliR1ZvYm1WdUIwUnlkV05yWlc0TVxuIgorICAgICJcdFlYVnpaMlYzd29wb2JIUWdhWE4wTGc9PVxuIgorICAgICMgUlRGIEVuZ2xpc2ggZmlyc3QgYW5kIGxhc3QgYmFzZTY0IGxpbmVzCisgICAgIlx0ZTF4eWRHWXhYR0Z1YzJsY1lXNXphV053WnpFeU5USmNaR1ZtWmpCY2JtOTFhV052YlhCaFxuIgorICAgICJcdGRtbGtaV1F1WEhCaGNnMWNjR0Z5RFgwTkRRPT1cbiIKKyAgICAjIFRFWFQgR2VybWFuIGZpcnN0IGFuZCBsYXN0IGJhc2U2NCBsaW5lcworICAgICJcdFRFbGFSVTVhRFMwdExTMHRMUTFFYVdWeklHbHpkQ0JsYVc0Z1NXNXpkR0ZzYkdGMGFXOXVcbiIKKyAgICAiXHRaMlZpWlc0dURRMD1cbiIKKyAgICApCisgIGlmKE5PVCBvdXQgTUFUQ0hFUyAiJHtsaW5lfSIpCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgb3V0ICIgICR7b3V0fSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXJyb3I6IHJ1bm5pbmcgJ2hkaXV0aWwgdWRpZmRlcmV6IC14bWwnIG9uXG4gICR7ZG1nfVxuZGlkIG5vdCBzaG93ICcke2xpbmV9JzpcbiR7b3V0fSIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS90ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDRiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ETUdfU0xBL3Rlc3QuY21ha2UKQEAgLTAsMCArMSwzIEBACitpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbykKK3NldChDUEFDS19ETUdfU0xBX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCitzZXQoQ1BBQ0tfRE1HX1NMQV9MQU5HVUFHRVMgRW5nbGlzaCBHZXJtYW4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC9jcmVhdGVfcGFja2FnZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2NyZWF0ZV9wYWNrYWdlLmNtYWtlCmluZGV4IDZmN2M0YzIuLjNkYjgwMTQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2NyZWF0ZV9wYWNrYWdlLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2NyZWF0ZV9wYWNrYWdlLmNtYWtlCkBAIC0yOSwzICsyOSwxMSBAQAogZXhwZWN0X2ZpbGUoJHtDUEFDS19URU1QT1JBUllfRElSRUNUT1JZfS9mNC9zaGFyZS9jcGFjay10ZXN0L2Y0LnR4dCkKIAogbWVzc2FnZShTVEFUVVMgIlRoaXMgc3RhdHVzIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgdmlzaWJsZSIpCisKK3NldCgKKyAgICBDUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUworICAgICR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0vZjEvc2hhcmUvY3BhY2stdGVzdC9mMS50eHQKKyAgICAke0NQQUNLX1RFTVBPUkFSWV9ESVJFQ1RPUll9L2YyL3NoYXJlL2NwYWNrLXRlc3QvZjIudHh0CisgICAgJHtDUEFDS19URU1QT1JBUllfRElSRUNUT1JZfS9mMy9zaGFyZS9jcGFjay10ZXN0L2YzLnR4dAorICAgICR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0vZjQvc2hhcmUvY3BhY2stdGVzdC9mNC50eHQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvc3RhZ2VfYW5kX3BhY2thZ2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML3N0YWdlX2FuZF9wYWNrYWdlLXN0ZG91dC50eHQKaW5kZXggMzdkNjM1Zi4uNTg3YjJlOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvc3RhZ2VfYW5kX3BhY2thZ2Utc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC9zdGFnZV9hbmRfcGFja2FnZS1zdGRvdXQudHh0CkBAIC0xICsxLDExIEBACiAtLSBUaGlzIHN0YXR1cyBtZXNzYWdlIGlzIGV4cGVjdGVkIHRvIGJlIHZpc2libGUKK0NQYWNrOiAtIHBhY2thZ2U6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZXh0ZXJuYWwtMFwuMVwuMS0uKlwuanNvbiBnZW5lcmF0ZWRcLgorQ1BhY2s6IC0gY2hlY2tzdW0gZmlsZTogLiovVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWwvQ1BhY2svRVhURVJOQUwtYnVpbGQtc3RhZ2VfYW5kX3BhY2thZ2Utc3VidGVzdC9leHRlcm5hbC0wXC4xXC4xLS4qXC5qc29uXC5zaGExIGdlbmVyYXRlZFwuCitDUGFjazogLSBwYWNrYWdlOiAuKi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbC9DUGFjay9FWFRFUk5BTC1idWlsZC1zdGFnZV9hbmRfcGFja2FnZS1zdWJ0ZXN0L2YxXC50eHQgZ2VuZXJhdGVkXC4KK0NQYWNrOiAtIGNoZWNrc3VtIGZpbGU6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZjFcLnR4dFwuc2hhMSBnZW5lcmF0ZWRcLgorQ1BhY2s6IC0gcGFja2FnZTogLiovVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWwvQ1BhY2svRVhURVJOQUwtYnVpbGQtc3RhZ2VfYW5kX3BhY2thZ2Utc3VidGVzdC9mMlwudHh0IGdlbmVyYXRlZFwuCitDUGFjazogLSBjaGVja3N1bSBmaWxlOiAuKi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbC9DUGFjay9FWFRFUk5BTC1idWlsZC1zdGFnZV9hbmRfcGFja2FnZS1zdWJ0ZXN0L2YyXC50eHRcLnNoYTEgZ2VuZXJhdGVkXC4KK0NQYWNrOiAtIHBhY2thZ2U6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZjNcLnR4dCBnZW5lcmF0ZWRcLgorQ1BhY2s6IC0gY2hlY2tzdW0gZmlsZTogLiovVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWwvQ1BhY2svRVhURVJOQUwtYnVpbGQtc3RhZ2VfYW5kX3BhY2thZ2Utc3VidGVzdC9mM1wudHh0XC5zaGExIGdlbmVyYXRlZFwuCitDUGFjazogLSBwYWNrYWdlOiAuKi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbC9DUGFjay9FWFRFUk5BTC1idWlsZC1zdGFnZV9hbmRfcGFja2FnZS1zdWJ0ZXN0L2Y0XC50eHQgZ2VuZXJhdGVkXC4KK0NQYWNrOiAtIGNoZWNrc3VtIGZpbGU6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZjRcLnR4dFwuc2hhMSBnZW5lcmF0ZWRcLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML3Rlc3QuY21ha2UKaW5kZXggYmM5NzY2Yi4uZDQ3ODFiYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvdGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC90ZXN0LmNtYWtlCkBAIC0xNyw2ICsxNyw3IEBACiBlbHNlaWYoUnVuQ01ha2VfU1VCVEVTVF9TVUZGSVggU1RSRVFVQUwgInN0YWdlX2FuZF9wYWNrYWdlIikKICAgc2V0KENQQUNLX0VYVEVSTkFMX0VOQUJMRV9TVEFHSU5HIDEpCiAgIHNldChDUEFDS19FWFRFUk5BTF9QQUNLQUdFX1NDUklQVCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jcmVhdGVfcGFja2FnZS5jbWFrZSIpCisgIHNldChDUEFDS19QQUNLQUdFX0NIRUNLU1VNIFNIQTEpCiBlbmRpZigpCiAKIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9mMS50eHQiIHRlc3QxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvSU5TVEFMTF9TQ1JJUFRTL1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0lOU1RBTExfU0NSSVBUUy9WZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggZDdkODJmMi4uMWExZTk4MyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvSU5TVEFMTF9TQ1JJUFRTL1ZlcmlmeVJlc3VsdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC0yNSw1ICsyNSw1IEBACiAgIGVuZGZvcmVhY2goKQogZW5kZnVuY3Rpb24oKQogCi1jaGVja1NjcmlwdHNfKCIke0ZPVU5EX0ZJTEVfMX0iICJlY2hvIFwicHJlIGluc3RhbGwgZm9vXCI7ZWNobyBcInBvc3QgaW5zdGFsbCBmb29cIjtlY2hvIFwicHJlIHVuaW5zdGFsbCBmb29cIjtlY2hvIFwicG9zdCB1bmluc3RhbGwgZm9vXCIiKQotY2hlY2tTY3JpcHRzXygiJHtGT1VORF9GSUxFXzJ9IiAiZWNobyBcInByZSBpbnN0YWxsXCI7ZWNobyBcInBvc3QgaW5zdGFsbFwiO2VjaG8gXCJwcmUgdW5pbnN0YWxsXCI7ZWNobyBcInBvc3QgdW5pbnN0YWxsXCIiKQorY2hlY2tTY3JpcHRzXygiJHtGT1VORF9GSUxFXzF9IiAiZWNobyBcInByZSBpbnN0YWxsIGZvb1wiO2VjaG8gXCJwb3N0IGluc3RhbGwgZm9vXCI7ZWNobyBcInByZSB1bmluc3RhbGwgZm9vXCI7ZWNobyBcInBvc3QgdW5pbnN0YWxsIGZvb1wiO2VjaG8gXCJwcmUgdHJhbnMgZm9vXCI7ZWNobyBcInBvc3QgdHJhbnMgZm9vXCIiKQorY2hlY2tTY3JpcHRzXygiJHtGT1VORF9GSUxFXzJ9IiAiZWNobyBcInByZSBpbnN0YWxsXCI7ZWNobyBcInBvc3QgaW5zdGFsbFwiO2VjaG8gXCJwcmUgdW5pbnN0YWxsXCI7ZWNobyBcInBvc3QgdW5pbnN0YWxsXCI7ZWNobyBcInByZSB0cmFuc1wiO2VjaG8gXCJwb3N0IHRyYW5zXCIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvSU5TVEFMTF9TQ1JJUFRTL3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvdGVzdC5jbWFrZQppbmRleCBmYjFiOGRlLi5jMjAwZmE1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvdGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvdGVzdC5jbWFrZQpAQCAtNyw2ICs3LDEwIEBACiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfdW5pbnN0YWxsLnNoIikKICAgc2V0KENQQUNLX1JQTV9QT1NUX1VOSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcG9zdF91bmluc3RhbGwuc2giKQorICBzZXQoQ1BBQ0tfUlBNX1BSRV9UUkFOU19TQ1JJUFRfRklMRQorICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcHJlX3RyYW5zLnNoIikKKyAgc2V0KENQQUNLX1JQTV9QT1NUX1RSQU5TX1NDUklQVF9GSUxFCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3RyYW5zLnNoIikKIAogICBzZXQoQ1BBQ0tfUlBNX2Zvb19QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcHJlX2luc3RhbGxfZm9vLnNoIikKQEAgLTE2LDYgKzIwLDEwIEBACiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfdW5pbnN0YWxsX2Zvby5zaCIpCiAgIHNldChDUEFDS19SUE1fZm9vX1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3VuaW5zdGFsbF9mb28uc2giKQorICBzZXQoQ1BBQ0tfUlBNX2Zvb19QUkVfVFJBTlNfU0NSSVBUX0ZJTEUKKyAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV90cmFuc19mb28uc2giKQorICBzZXQoQ1BBQ0tfUlBNX2Zvb19QT1NUX1RSQU5TX1NDUklQVF9GSUxFCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3RyYW5zX2Zvby5zaCIpCiBlbmRpZigpCiAKIHNldChDTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfUlBBVEggMSkKQEAgLTI5LDYgKzM3LDEwIEBACiAgICAgImVjaG8gXCJwcmUgdW5pbnN0YWxsXCJcbiIpCiBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcG9zdF91bmluc3RhbGwuc2giCiAgICAgImVjaG8gXCJwb3N0IHVuaW5zdGFsbFwiXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV90cmFucy5zaCIKKyAgICAiZWNobyBcInByZSB0cmFuc1wiXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdHJhbnMuc2giCisgICAgImVjaG8gXCJwb3N0IHRyYW5zXCJcbiIpCiAKICMgc3BlY2lmaWMKIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfaW5zdGFsbF9mb28uc2giCkBAIC0zOSw2ICs1MSwxMCBAQAogICAgICJlY2hvIFwicHJlIHVuaW5zdGFsbCBmb29cIlxuIikKIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3VuaW5zdGFsbF9mb28uc2giCiAgICAgImVjaG8gXCJwb3N0IHVuaW5zdGFsbCBmb29cIlxuIikKK2ZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfdHJhbnNfZm9vLnNoIgorICAgICJlY2hvIFwicHJlIHRyYW5zIGZvb1wiXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdHJhbnNfZm9vLnNoIgorICAgICJlY2hvIFwicG9zdCB0cmFucyBmb29cIlxuIikKIAogaW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBmb28gQ09NUE9ORU5UIGZvbykKIGluc3RhbGwoRklMRVMgQ01ha2VMaXN0cy50eHQgREVTVElOQVRJT04gYmFyIENPTVBPTkVOVCBiYXIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL0V4cGVjdGVkRmlsZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL0V4cGVjdGVkRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhMzZhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvRXhwZWN0ZWRGaWxlcy5jbWFrZQpAQCAtMCwwICsxLDE5IEBACitzZXQoU0FUVSAiL3NhdHU7L3NhdHUvQ01ha2VMaXN0cy50eHQiKQorc2V0KERVQSAiL2R1YTsvZHVhL0NNYWtlTGlzdHMudHh0IikKKworaWYoR0VORVJBVE9SX1RZUEUgU1RSRVFVQUwgWklQKQorICAgIHNldChfZXh0ICJ6aXAiKQorZWxzZWlmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMIFRHWikKKyAgICBzZXQoX2V4dCAidGFyLmd6IikKK2VuZGlmKCkKKworaWYoUEFDS0FHSU5HX1RZUEUgU1RSRVFVQUwgIkNPTVBPTkVOVCIpCisgICAgc2V0KEVYUEVDVEVEX0ZJTEVTX0NPVU5UICIyIikKKyAgICBzZXQoRVhQRUNURURfRklMRV8xICIqLXNhdHUuJHtfZXh0fSIpCisgICAgc2V0KEVYUEVDVEVEX0ZJTEVfQ09OVEVOVF8xX0xJU1QgJHtTQVRVfSkKKyAgICBzZXQoRVhQRUNURURfRklMRV8yICIqLWR1YS4ke19leHR9IikKKyAgICBzZXQoRVhQRUNURURfRklMRV9DT05URU5UXzJfTElTVCAke0RVQX0pCitlbHNlKCkKKyAgICBzZXQoRVhQRUNURURfRklMRVNfQ09VTlQgIjEiKQorICAgIHNldChFWFBFQ1RFRF9GSUxFX0NPTlRFTlRfMV9MSVNUICR7U0FUVX0gJHtEVUF9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9aSVBfQ09NUE9ORU5ULXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL1pJUF9DT01QT05FTlQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlkMGRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9aSVBfQ09NUE9ORU5ULXN0ZG91dC50eHQKQEAgLTAsMCArMSw0IEBACistLSBUaGUgbWVzc2FnZSBmcm9tIC4qL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcHJlXC5jbWFrZSBhbmQgZ2VuZXJhdG9yIFpJUAorLioKKy0tIFRoZSBtZXNzYWdlIGZyb20gLiovVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9wb3N0XC5jbWFrZSBhbmQgZ2VuZXJhdG9yIFpJUAorLS0gQnVpbHQgcGFja2FnZXM6IC4qL19DUGFja19QYWNrYWdlcy8uKi9wcmVfcG9zdF9zY3JpcHRzLS4qLWR1YS56aXA7LiovX0NQYWNrX1BhY2thZ2VzLy4qL3ByZV9wb3N0X3NjcmlwdHMtLiotc2F0dS56aXAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvWklQX01PTk9MSVRISUMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvWklQX01PTk9MSVRISUMtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzJjNGQxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9aSVBfTU9OT0xJVEhJQy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNCBAQAorLS0gVGhlIG1lc3NhZ2UgZnJvbSAuKi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL3ByZVwuY21ha2UgYW5kIGdlbmVyYXRvciBaSVAKKy4qCistLSBUaGUgbWVzc2FnZSBmcm9tIC4qL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcG9zdFwuY21ha2UgYW5kIGdlbmVyYXRvciBaSVAKKy0tIEJ1aWx0IHBhY2thZ2VzOiAuKi9fQ1BhY2tfUGFja2FnZXMvLiovcHJlX3Bvc3Rfc2NyaXB0cy0wXC4xXC4xLS4qXC56aXAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcG9zdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcG9zdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjBiMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9wb3N0LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorbWVzc2FnZShTVEFUVVMgIlRoZSBtZXNzYWdlIGZyb20gJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0gYW5kIGdlbmVyYXRvciAke0NQQUNLX0dFTkVSQVRPUn0iKQorbWVzc2FnZShTVEFUVVMgIkJ1aWx0IHBhY2thZ2VzOiAke0NQQUNLX1BBQ0tBR0VfRklMRVN9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcHJlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9wcmUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0YWE2YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcHJlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK21lc3NhZ2UoU1RBVFVTICJUaGUgbWVzc2FnZSBmcm9tICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IGFuZCBnZW5lcmF0b3IgJHtDUEFDS19HRU5FUkFUT1J9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI2ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy90ZXN0LmNtYWtlCkBAIC0wLDAgKzEsOSBAQAoraW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBzYXR1IENPTVBPTkVOVCBzYXR1KQoraW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBkdWEgQ09NUE9ORU5UIGR1YSkKKworc2V0KENQQUNLX1BSRV9CVUlMRF9TQ1JJUFRTICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3ByZS5jbWFrZSIpCitzZXQoQ1BBQ0tfUE9TVF9CVUlMRF9TQ1JJUFRTICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3Bvc3QuY21ha2UiKQorCitpZihQQUNLQUdJTkdfVFlQRSBTVFJFUVVBTCAiQ09NUE9ORU5UIikKKyAgc2V0KENQQUNLX0NPTVBPTkVOVFNfQUxMIHNhdHUgZHVhKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERUQvRXhwZWN0ZWRGaWxlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEL0V4cGVjdGVkRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhM2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEL0V4cGVjdGVkRmlsZXMuY21ha2UKQEAgLTAsMCArMSwyIEBACitzZXQoRVhQRUNURURfRklMRVNfQ09VTlQgIjEiKQorc2V0KEVYUEVDVEVEX0ZJTEVfQ09OVEVOVF8xX0xJU1QgIi9mb287L2Zvby9DTWFrZUxpc3RzLnR4dCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9USFJFQURFRC90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERUQvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGZjOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERUQvdGVzdC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK2luc3RhbGwoRklMRVMgQ01ha2VMaXN0cy50eHQgREVTVElOQVRJT04gZm9vIENPTVBPTkVOVCB0ZXN0KQorCitzZXQoQ1BBQ0tfQVJDSElWRV9USFJFQURTIDIpCisKK2lmKFBBQ0tBR0lOR19UWVBFIFNUUkVRVUFMICJDT01QT05FTlQiKQorICBzZXQoQ1BBQ0tfQ09NUE9ORU5UU19BTEwgdGVzdCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEX0FMTC9FeHBlY3RlZEZpbGVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERURfQUxML0V4cGVjdGVkRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhM2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEX0FMTC9FeHBlY3RlZEZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KEVYUEVDVEVEX0ZJTEVTX0NPVU5UICIxIikKK3NldChFWFBFQ1RFRF9GSUxFX0NPTlRFTlRfMV9MSVNUICIvZm9vOy9mb28vQ01ha2VMaXN0cy50eHQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERURfQUxML3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9USFJFQURFRF9BTEwvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA1MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERURfQUxML3Rlc3QuY21ha2UKQEAgLTAsMCArMSw3IEBACitpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbyBDT01QT05FTlQgdGVzdCkKKworc2V0KENQQUNLX0FSQ0hJVkVfVEhSRUFEUyAwKQorCitpZihQQUNLQUdJTkdfVFlQRSBTVFJFUVVBTCAiQ09NUE9ORU5UIikKKyAgc2V0KENQQUNLX0NPTVBPTkVOVFNfQUxMIHRlc3QpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDczZTZhNzguLmYxYTgzZTggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsNCBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIGlmKE5PVCBOb1Byb2plY3QpCiAgIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9NZW1DaGVja1Nhbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvTWVtQ2hlY2tTYW4uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyYzMwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvTWVtQ2hlY2tTYW4uY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoTUVNT1JZQ0hFQ0tfQ09NTUFORCAiIikKK2luY2x1ZGUoQ1Rlc3QpCithZGRfdGVzdCgKKyAgTkFNRSBUZXN0U2FuCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vLi4vY3Rlc3RfbWVtY2hlY2svdGVzdCR7TUVNT1JZQ0hFQ0tfVFlQRX0uY21ha2UKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA5YjlhZTY1Li5lMDVhZDc5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMjQyLDYgKzI0MiwyMCBAQAogZW5kZnVuY3Rpb24oKQogcnVuX1Rlc3RPdXRwdXRTaXplKCkKIAorIyBUZXN0IC0tc3RvcC1vbi1mYWlsdXJlCitmdW5jdGlvbihydW5fc3RvcF9vbl9mYWlsdXJlKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vc3RvcC1vbi1mYWlsdXJlKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKFdSSVRFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ1Rlc3RUZXN0ZmlsZS5jbWFrZSIgIgorYWRkX3Rlc3QodGVzdDEgXCIke0NNQUtFX0NPTU1BTkR9XCIgLUUgZmFsc2UpCithZGRfdGVzdCh0ZXN0MiBcIiR7Q01BS0VfQ09NTUFORH1cIiAtRSBlY2hvIFwibm90IHJ1bm5pbmdcIikKKyIpCisgIHJ1bl9jbWFrZV9jb21tYW5kKHN0b3Atb24tZmFpbHVyZSAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tc3RvcC1vbi1mYWlsdXJlKQorZW5kZnVuY3Rpb24oKQorcnVuX3N0b3Bfb25fZmFpbHVyZSgpCisKIGZ1bmN0aW9uKHJ1bl9UZXN0QWZmaW5pdHkpCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9UZXN0QWZmaW5pdHkpCiAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCkBAIC0zNDUsMyArMzU5LDI0IEBACiAKICMgQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdHlwZSB2YXJpYWJsZSBpcyBwYXNzZWQKIHJ1bl9jdGVzdChjaGVjay1jb25maWd1cmF0aW9uLXR5cGUpCisKK2Z1bmN0aW9uKHJ1bl9NZW1DaGVja1NhbiBjYXNlIG9wdHMpCisgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9NZW1DaGVja1NhbiR7Y2FzZX0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMKKyAgICAiLURNRU1PUllDSEVDS19UWVBFPSR7Y2FzZX1TYW5pdGl6ZXIiCisgICAgIi1ETUVNT1JZQ0hFQ0tfU0FOSVRJWkVSX09QVElPTlM9JHtvcHRzfSIKKyAgICApCisgIHJ1bl9jbWFrZShNZW1DaGVja1NhbikKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBzZXQoUnVuQ01ha2Utc3Rkb3V0LWZpbGUgIi4uL2N0ZXN0X21lbWNoZWNrL0R1bW15JHtjYXNlfVNhbml0aXplci1zdGRvdXQudHh0IikKKyAgcnVuX2NtYWtlX2NvbW1hbmQoTWVtQ2hlY2tTYW4ke2Nhc2V9LWN0ZXN0CisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZyAtTSBFeHBlcmltZW50YWwgLVQgTWVtQ2hlY2sgLVYKKyAgICApCitlbmRmdW5jdGlvbigpCitydW5fTWVtQ2hlY2tTYW4oQWRkcmVzcyAic2ltdWxhdGVfc2FuaXRpemVyPTE6cmVwb3J0X2J1Z3M9MTpoaXN0b3J5X3NpemU9NTpleGl0Y29kZT01NSIpCitydW5fTWVtQ2hlY2tTYW4oTGVhayAic2ltdWxhdGVfc2FuaXRpemVyPTE6cmVwb3J0X2J1Z3M9MTpoaXN0b3J5X3NpemU9NTpleGl0Y29kZT01NSIpCitydW5fTWVtQ2hlY2tTYW4oTWVtb3J5ICJzaW11bGF0ZV9zYW5pdGl6ZXI9MTpyZXBvcnRfYnVncz0xOmhpc3Rvcnlfc2l6ZT01OmV4aXRjb2RlPTU1IikKK3J1bl9NZW1DaGVja1NhbihUaHJlYWQgInJlcG9ydF9idWdzPTE6aGlzdG9yeV9zaXplPTU6ZXhpdGNvZGU9NTUiKQorcnVuX01lbUNoZWNrU2FuKFVuZGVmaW5lZEJlaGF2aW9yICJzaW11bGF0ZV9zYW5pdGl6ZXI9MSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3N0b3Atb24tZmFpbHVyZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE0ZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACis4CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3N0b3Atb24tZmFpbHVyZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQyMzVkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitFcnJvcnMgd2hpbGUgcnVubmluZyBDVGVzdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjNzdkMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMCBAQAorXlRlc3QgcHJvamVjdCAuKi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3N0b3Atb24tZmFpbHVyZQorICAgIFN0YXJ0IDE6IHRlc3QxCisxLzIgVGVzdCAjMTogdGVzdDEgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKkZhaWxlZCArWzAtOS5dKyBzZWMKKysKKzAlIHRlc3RzIHBhc3NlZCwgMSB0ZXN0cyBmYWlsZWQgb3V0IG9mIDEKKysKK1RvdGFsIFRlc3QgdGltZSBcKHJlYWxcKSA9ICtbMC05Ll0rIHNlYworKworVGhlIGZvbGxvd2luZyB0ZXN0cyBGQUlMRUQ6CitbCSBdKzEgLSB0ZXN0MSBcKEZhaWxlZFwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDg1ODQ3ODYuLmY1ZjA2OTkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTM4LDYgKzM4LDEzIEBACiAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7bmFtZX0gIiR7Q1RSRVNBTExPQ19DT01NQU5EfSIgdmVyaWZ5ICIke1J1bkNNYWtlX1NPVVJDRV9ESVJ9LyR7bmFtZX0ubG9nIiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yZXNzcGVjLmpzb24iICIke3Rlc3RzfSIpCiBlbmRmdW5jdGlvbigpCiAKK2Z1bmN0aW9uKHJlYWRfdGVzdGluZ19maWxlIGZpbGVuYW1lIHZhcmlhYmxlKQorICBmaWxlKFJFQUQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9UZXN0aW5nL1RBRyIgX3RhZykKKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4oW15cbl0qKVxuLiokIiAiXFwxIiBfZGF0ZSAiJHtfdGFnfSIpCisgIGZpbGUoUkVBRCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L1Rlc3RpbmcvJHtfZGF0ZX0vJHtmaWxlbmFtZX0iIF9jb250ZW50cykKKyAgc2V0KCIke3ZhcmlhYmxlfSIgIiR7X2NvbnRlbnRzfSIgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCiB1bnNldChFTlZ7Q1RFU1RfUkVTT1VSQ0VfR1JPVVBfQ09VTlR9KQogc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vY3RyZXNhbGxvYy13cml0ZS1wcm9jLWdvb2QxLWJ1aWxkIikKQEAgLTE0MCw5ICsxNDcsMTQgQEAKICMgTm93IHRlc3QgdGhlIHJlc291cmNlIGFsbG9jYXRpb24gZmVhdHVyZSBvZiBDVGVzdAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1mdW5jdGlvbihydW5fY3Rlc3RfcmVzb3VyY2UgbmFtZSBwYXJhbGxlbCByYW5kb20pCi0gIHJ1bl9jdGVzdCgiJHtuYW1lfS1jdGVzdC1zLXJlcyIgIi1EQ1RFU1RfUkVTT1VSQ0VfQUxMT0NfRU5BQkxFRD0xIiAiLURDVFJFU0FMTE9DX0NPTU1BTkQ9JHtDVFJFU0FMTE9DX0NPTU1BTkR9IiAiLURDVEVTVF9QQVJBTExFTD0ke3BhcmFsbGVsfSIgIi1EQ1RFU1RfUkFORE9NPSR7cmFuZG9tfSIpCi0gIHJ1bl9jdGVzdCgiJHtuYW1lfS1jdGVzdC1zLW5vcmVzIiAiLURDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEPTAiICItRENUUkVTQUxMT0NfQ09NTUFORD0ke0NUUkVTQUxMT0NfQ09NTUFORH0iICItRENURVNUX1BBUkFMTEVMPSR7cGFyYWxsZWx9IiAiLURDVEVTVF9SQU5ET009JHtyYW5kb219IikKK2Z1bmN0aW9uKHJ1bl9jdGVzdF9yZXNvdXJjZSBuYW1lIHBhcmFsbGVsIHJhbmRvbSBleHRyYSkKKyAgcnVuX2N0ZXN0KCIke25hbWV9LWN0ZXN0LXMtcmVzIiAiLURDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEPTEiICItRENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFPUFSRyIgIi1EQ1RSRVNBTExPQ19DT01NQU5EPSR7Q1RSRVNBTExPQ19DT01NQU5EfSIgIi1EQ1RFU1RfUEFSQUxMRUw9JHtwYXJhbGxlbH0iICItRENURVNUX1JBTkRPTT0ke3JhbmRvbX0iKQorICBydW5fY3Rlc3QoIiR7bmFtZX0tY3Rlc3Qtcy1ub3JlcyIgIi1EQ1RFU1RfUkVTT1VSQ0VfQUxMT0NfRU5BQkxFRD0wIiAiLURDVEVTVF9SRVNPVVJDRV9TUEVDX1NPVVJDRT1OT05FIiAiLURDVFJFU0FMTE9DX0NPTU1BTkQ9JHtDVFJFU0FMTE9DX0NPTU1BTkR9IiAiLURDVEVTVF9QQVJBTExFTD0ke3BhcmFsbGVsfSIgIi1EQ1RFU1RfUkFORE9NPSR7cmFuZG9tfSIpCisgIGlmKGV4dHJhKQorICAgIHJ1bl9jdGVzdCgiJHtuYW1lfS1jdGVzdC1zLXJlcy12YXJpYWJsZSIgIi1EQ1RFU1RfUkVTT1VSQ0VfQUxMT0NfRU5BQkxFRD0xIiAiLURDVEVTVF9SRVNPVVJDRV9TUEVDX1NPVVJDRT1WQVJJQUJMRSIgIi1EQ1RSRVNBTExPQ19DT01NQU5EPSR7Q1RSRVNBTExPQ19DT01NQU5EfSIgIi1EQ1RFU1RfUEFSQUxMRUw9JHtwYXJhbGxlbH0iICItRENURVNUX1JBTkRPTT0ke3JhbmRvbX0iKQorICAgIHJ1bl9jdGVzdCgiJHtuYW1lfS1jdGVzdC1zLXJlcy1jYWNoZSIgIi1EQ1RFU1RfUkVTT1VSQ0VfQUxMT0NfRU5BQkxFRD0xIiAiLURDVEVTVF9SRVNPVVJDRV9TUEVDX1NPVVJDRT1DQUNIRSIgIi1EQ1RSRVNBTExPQ19DT01NQU5EPSR7Q1RSRVNBTExPQ19DT01NQU5EfSIgIi1EQ1RFU1RfUEFSQUxMRUw9JHtwYXJhbGxlbH0iICItRENURVNUX1JBTkRPTT0ke3JhbmRvbX0iKQorICAgIHJ1bl9jdGVzdCgiJHtuYW1lfS1jdGVzdC1zLXJlcy1jbWRsaW5lIiAiLURDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEPTEiICItRENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFPUNNRExJTkUiICItRENUUkVTQUxMT0NfQ09NTUFORD0ke0NUUkVTQUxMT0NfQ09NTUFORH0iICItRENURVNUX1BBUkFMTEVMPSR7cGFyYWxsZWx9IiAiLURDVEVTVF9SQU5ET009JHtyYW5kb219IiAtLXJlc291cmNlLXNwZWMtZmlsZSAiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9yZXNzcGVjLmpzb24iKQorICBlbmRpZigpCiBlbmRmdW5jdGlvbigpCiAKIGZ1bmN0aW9uKHZlcmlmeV9jdGVzdF9yZXNvdXJjZXMpCkBAIC0xNTUsMTUgKzE2NywxNSBAQAogICBlbmRpZigpCiBlbmRmdW5jdGlvbigpCiAKLXJ1bl9jdGVzdF9yZXNvdXJjZShsb3Rzb2Z0ZXN0cyAxMCAxKQotcnVuX2N0ZXN0X3Jlc291cmNlKGNoZWNrZnJlZTEgMiAwKQotcnVuX2N0ZXN0X3Jlc291cmNlKGNoZWNrZnJlZTIgMSAwKQotcnVuX2N0ZXN0X3Jlc291cmNlKG5vdGVub3VnaDEgMSAwKQotcnVuX2N0ZXN0X3Jlc291cmNlKG5vdGVub3VnaDIgMSAwKQotcnVuX2N0ZXN0X3Jlc291cmNlKG5vdGVub3VnaDMgMSAwKQotcnVuX2N0ZXN0X3Jlc291cmNlKGNvbWJpbmUgMSAwKQotcnVuX2N0ZXN0X3Jlc291cmNlKGVuc3VyZV9wYXJhbGxlbCAyIDApCitydW5fY3Rlc3RfcmVzb3VyY2UobG90c29mdGVzdHMgMTAgMSAwKQorcnVuX2N0ZXN0X3Jlc291cmNlKGNoZWNrZnJlZTEgMiAwIDEpCitydW5fY3Rlc3RfcmVzb3VyY2UoY2hlY2tmcmVlMiAxIDAgMCkKK3J1bl9jdGVzdF9yZXNvdXJjZShub3Rlbm91Z2gxIDEgMCAxKQorcnVuX2N0ZXN0X3Jlc291cmNlKG5vdGVub3VnaDIgMSAwIDApCitydW5fY3Rlc3RfcmVzb3VyY2Uobm90ZW5vdWdoMyAxIDAgMCkKK3J1bl9jdGVzdF9yZXNvdXJjZShjb21iaW5lIDEgMCAwKQorcnVuX2N0ZXN0X3Jlc291cmNlKGVuc3VyZV9wYXJhbGxlbCAyIDAgMCkKIAogc2V0KEVOVntDVEVTVF9SRVNPVVJDRV9HUk9VUF9DT1VOVH0gMikKLXJ1bl9jdGVzdF9yZXNvdXJjZShwcm9jZXNzX2NvdW50IDEgMCkKK3J1bl9jdGVzdF9yZXNvdXJjZShwcm9jZXNzX2NvdW50IDEgMCAwKQogdW5zZXQoRU5We0NURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL2NoZWNrZnJlZTEtY3Rlc3Qtcy1yZXMtY2FjaGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLWNhY2hlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGE3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLWNhY2hlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEgQEAKK3ZlcmlmeV9jdGVzdF9yZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY2hlY2tmcmVlMS1jdGVzdC1zLXJlcy1jbWRsaW5lLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY2hlY2tmcmVlMS1jdGVzdC1zLXJlcy1jbWRsaW5lLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGE3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtY2hlY2suY21ha2UKQEAgLTAsMCArMSBAQAordmVyaWZ5X2N0ZXN0X3Jlc291cmNlcygpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY2hlY2tmcmVlMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRhNzJlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY2hlY2tmcmVlMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACit2ZXJpZnlfY3Rlc3RfcmVzb3VyY2VzKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL2N0cmVzYWxsb2MuY3h4IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY3RyZXNhbGxvYy5jeHgKaW5kZXggODBkYjA1ZS4uZGFmOGEyZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY3RyZXNhbGxvYy5jeHgKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY3RyZXNhbGxvYy5jeHgKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8bWFwPgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jYWNoZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY2FjaGUtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxZTlhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY2FjaGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9jdHJlc2FsbG9jLmxvZyIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiY3RyZXNhbGxvYy5sb2cgc2hvdWxkIG5vdCBleGlzdCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNhY2hlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNhY2hlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY2FjaGUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jYWNoZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jYWNoZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMWEzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNhY2hlLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxNCBAQAorXkluc3VmZmljaWVudCByZXNvdXJjZXMgZm9yIHRlc3QgVGVzdDE6CisKKyAgVGVzdCByZXF1ZXN0ZWQgcmVzb3VyY2VzIG9mIHR5cGUgJ2ZsdXhjYXBhY2l0b3JzJyBpbiB0aGUgZm9sbG93aW5nIGFtb3VudHM6CisgICAgMjAwIHNsb3RzCisgIGJ1dCBvbmx5IHRoZSBmb2xsb3dpbmcgdW5pdHMgd2VyZSBhdmFpbGFibGU6CisgICAgJ291dGF0aW1lJzogMTIxIHNsb3RzCisKK1Jlc291cmNlIHNwZWMgZmlsZToKKworICBbXgorXSovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vcmVzc3BlYy5qc29uCitDTWFrZSBFcnJvciBhdCBbXgorXSovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jYWNoZS90ZXN0XC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisgIFRlc3RzIGRpZCBub3QgcGFzcyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY21kbGluZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY21kbGluZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFlOWEyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoRVhJU1RTICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY3RyZXNhbGxvYy5sb2ciKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImN0cmVzYWxsb2MubG9nIHNob3VsZCBub3QgZXhpc3QiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY21kbGluZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmOWNmYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY21kbGluZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTQgQEAKK15JbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0ZXN0IFRlc3QxOgorCisgIFRlc3QgcmVxdWVzdGVkIHJlc291cmNlcyBvZiB0eXBlICdmbHV4Y2FwYWNpdG9ycycgaW4gdGhlIGZvbGxvd2luZyBhbW91bnRzOgorICAgIDIwMCBzbG90cworICBidXQgb25seSB0aGUgZm9sbG93aW5nIHVuaXRzIHdlcmUgYXZhaWxhYmxlOgorICAgICdvdXRhdGltZSc6IDEyMSBzbG90cworCitSZXNvdXJjZSBzcGVjIGZpbGU6CisKKyAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Jlc3NwZWMuanNvbgorQ01ha2UgRXJyb3IgYXQgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY21kbGluZS90ZXN0XC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisgIFRlc3RzIGRpZCBub3QgcGFzcyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMWU5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoRVhJU1RTICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY3RyZXNhbGxvYy5sb2ciKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImN0cmVzYWxsb2MubG9nIHNob3VsZCBub3QgZXhpc3QiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2UyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2YxM2UwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTQgQEAKK15JbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0ZXN0IFRlc3QxOgorCisgIFRlc3QgcmVxdWVzdGVkIHJlc291cmNlcyBvZiB0eXBlICdmbHV4Y2FwYWNpdG9ycycgaW4gdGhlIGZvbGxvd2luZyBhbW91bnRzOgorICAgIDIwMCBzbG90cworICBidXQgb25seSB0aGUgZm9sbG93aW5nIHVuaXRzIHdlcmUgYXZhaWxhYmxlOgorICAgICdvdXRhdGltZSc6IDEyMSBzbG90cworCitSZXNvdXJjZSBzcGVjIGZpbGU6CisKKyAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Jlc3NwZWMuanNvbgorQ01ha2UgRXJyb3IgYXQgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUvdGVzdFwuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgorICBUZXN0cyBkaWQgbm90IHBhc3MkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9wcm9jZXNzX2NvdW50LWN0ZXN0LXMtbm9yZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9wcm9jZXNzX2NvdW50LWN0ZXN0LXMtbm9yZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlNzJiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Byb2Nlc3NfY291bnQtY3Rlc3Qtcy1ub3Jlcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3JlYWRfdGVzdGluZ19maWxlKCJUZXN0LnhtbCIgX3Rlc3RfY29udGVudHMpCitpZihOT1QgX3Rlc3RfY29udGVudHMgTUFUQ0hFUyAiI0NURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UPSIpCisgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkNvdWxkIG5vdCBmaW5kIHVuc2V0IHZhcmlhYmxlIENURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UIGluIHRlc3QgbWVhc3VyZW1lbnRzXG4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vcHJvY2Vzc19jb3VudC1jdGVzdC1zLXJlcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Byb2Nlc3NfY291bnQtY3Rlc3Qtcy1yZXMtY2hlY2suY21ha2UKaW5kZXggY2VkYTcyZS4uNTg1YzM2YiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vcHJvY2Vzc19jb3VudC1jdGVzdC1zLXJlcy1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9wcm9jZXNzX2NvdW50LWN0ZXN0LXMtcmVzLWNoZWNrLmNtYWtlCkBAIC0xICsxLDkgQEAKIHZlcmlmeV9jdGVzdF9yZXNvdXJjZXMoKQorCityZWFkX3Rlc3RpbmdfZmlsZSgiVGVzdC54bWwiIF90ZXN0X2NvbnRlbnRzKQoraWYoTk9UIF90ZXN0X2NvbnRlbnRzIE1BVENIRVMgIlxuQ1RFU1RfUkVTT1VSQ0VfR1JPVVBfMD13aWRnZXRzIikKKyAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQ291bGQgbm90IGZpbmQgdmFyaWFibGUgQ1RFU1RfUkVTT1VSQ0VfR1JPVVBfMCBpbiB0ZXN0IG1lYXN1cmVtZW50c1xuIikKK2VuZGlmKCkKK2lmKE5PVCBfdGVzdF9jb250ZW50cyBNQVRDSEVTICJcbkNURVNUX1JFU09VUkNFX0dST1VQXzBfV0lER0VUUz1pZDoiKQorICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJDb3VsZCBub3QgZmluZCB2YXJpYWJsZSBDVEVTVF9SRVNPVVJDRV9HUk9VUF8wX1dJREdFVFMgaW4gdGVzdCBtZWFzdXJlbWVudHNcbiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi90ZXN0LmNtYWtlLmluIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vdGVzdC5jbWFrZS5pbgppbmRleCA0YjQyNmYxLi45YWQ5YWM4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi90ZXN0LmNtYWtlLmluCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Rlc3QuY21ha2UuaW4KQEAgLTgsMTUgKzgsMjYgQEAKIHNldChDVEVTVF9CVUlMRF9DT05GSUdVUkFUSU9OICIkRU5We0NNQUtFX0NPTkZJR19UWVBFfSIpCiBzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICIwMTowMDowMCBVVEMiKQogCi1jdGVzdF9zdGFydChFeHBlcmltZW50YWwgUVVJRVQpCi1jdGVzdF9jb25maWd1cmUoT1BUSU9OUworc2V0KGNvbmZpZ19vcHRpb25zCiAgICItRENURVNUX1JFU09VUkNFX0FMTE9DX0VOQUJMRUQ9JHtDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEfTstRENUUkVTQUxMT0NfQ09NTUFORD0ke0NUUkVTQUxMT0NfQ09NTUFORH0iCiAgICkKLWN0ZXN0X2J1aWxkKCkKIAotaWYoQ1RFU1RfUkVTT1VSQ0VfQUxMT0NfRU5BQkxFRCkKK2lmKENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFIFNUUkVRVUFMICJDTURMSU5FIikKKyAgbGlzdChBUFBFTkQgY29uZmlnX29wdGlvbnMgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFPUBSdW5DTWFrZV9TT1VSQ0VfRElSQC9ub2V4aXN0Lmpzb24iKQorZWxzZWlmKENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFIFNUUkVRVUFMICJBUkciKQogICBzZXQocmVzc3BlYyBSRVNPVVJDRV9TUEVDX0ZJTEUgIkBSdW5DTWFrZV9TT1VSQ0VfRElSQC9yZXNzcGVjLmpzb24iKQorICBzZXQoQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFICJAUnVuQ01ha2VfU09VUkNFX0RJUkAvbm9leGlzdC5qc29uIikKKyAgbGlzdChBUFBFTkQgY29uZmlnX29wdGlvbnMgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFPUBSdW5DTWFrZV9TT1VSQ0VfRElSQC9ub2V4aXN0Lmpzb24iKQorZWxzZWlmKENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFIFNUUkVRVUFMICJWQVJJQUJMRSIpCisgIHNldChDVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEUgIkBSdW5DTWFrZV9TT1VSQ0VfRElSQC9yZXNzcGVjLmpzb24iKQorICBsaXN0KEFQUEVORCBjb25maWdfb3B0aW9ucyAiLURDVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEU9QFJ1bkNNYWtlX1NPVVJDRV9ESVJAL25vZXhpc3QuanNvbiIpCitlbHNlaWYoQ1RFU1RfUkVTT1VSQ0VfU1BFQ19TT1VSQ0UgU1RSRVFVQUwgIkNBQ0hFIikKKyAgbGlzdChBUFBFTkQgY29uZmlnX29wdGlvbnMgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFPUBSdW5DTWFrZV9TT1VSQ0VfRElSQC9yZXNzcGVjLmpzb24iKQogZW5kaWYoKQorCitjdGVzdF9zdGFydChFeHBlcmltZW50YWwgUVVJRVQpCitjdGVzdF9jb25maWd1cmUoT1BUSU9OUyAiJHtjb25maWdfb3B0aW9uc30iKQorY3Rlc3RfYnVpbGQoKQogY3Rlc3RfdGVzdCgke3Jlc3NwZWN9IFJFVFVSTl9WQUxVRSByZXR2YWwgUEFSQUxMRUxfTEVWRUwgJHtDVEVTVF9QQVJBTExFTH0gU0NIRURVTEVfUkFORE9NICR7Q1RFU1RfUkFORE9NfSkKIGlmKHJldHZhbCkKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGVzdHMgZGlkIG5vdCBwYXNzIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIxZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTMpCisKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBMQU5HVUFHRVMgTk9ORSkKKworaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrQ0xpbmtlckZsYWcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tDTGlua2VyRmxhZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU4N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrQ0xpbmtlckZsYWcuY21ha2UKQEAgLTAsMCArMSwzIEBACisKK3NldCAoQ0hFQ0tfTEFOR1VBR0UgQykKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ2hlY2tMaW5rZXJGbGFnLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja0NYWExpbmtlckZsYWcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tDWFhMaW5rZXJGbGFnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjk5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tDWFhMaW5rZXJGbGFnLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorCitzZXQgKENIRUNLX0xBTkdVQUdFIENYWCkKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ2hlY2tMaW5rZXJGbGFnLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja0ZvcnRyYW5MaW5rZXJGbGFnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrRm9ydHJhbkxpbmtlckZsYWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhMjg4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja0ZvcnRyYW5MaW5rZXJGbGFnLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorCitzZXQgKENIRUNLX0xBTkdVQUdFIEZvcnRyYW4pCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NoZWNrTGlua2VyRmxhZy5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tMaW5rZXJGbGFnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrTGlua2VyRmxhZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JkNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrTGlua2VyRmxhZy5jbWFrZQpAQCAtMCwwICsxLDE0IEBACisKK2VuYWJsZV9sYW5ndWFnZSAoJHtDSEVDS19MQU5HVUFHRX0pCisKK2luY2x1ZGUoQ2hlY2tMaW5rZXJGbGFnKQorCitjaGVja19saW5rZXJfZmxhZygke0NIRUNLX0xBTkdVQUdFfSAiTElOS0VSOi1MLC9kaXIiIFZBTElEX0xJTktFUl9GTEFHKQoraWYoTk9UIFZBTElEX0xJTktFUl9GTEFHKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlRlc3QgZmFpbCBmb3IgdmFsaWQgbGlua2VyIGZsYWcuIikKK2VuZGlmKCkKKworY2hlY2tfbGlua2VyX2ZsYWcoJHtDSEVDS19MQU5HVUFHRX0gIkxJTktFUjotRCIgSU5WQUxJRF9MSU5LRVJfRkxBRykKK2lmKElOVkFMSURfTElOS0VSX0ZMQUcpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiVGVzdCBmYWlsIGZvciBpbnZhbGlkIGxpbmtlciBmbGFnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tPQkpDTGlua2VyRmxhZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja09CSkNMaW5rZXJGbGFnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMWQxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tPQkpDTGlua2VyRmxhZy5jbWFrZQpAQCAtMCwwICsxLDMgQEAKKworc2V0IChDSEVDS19MQU5HVUFHRSBPQkpDKQoraW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DaGVja0xpbmtlckZsYWcuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrT0JKQ1hYTGlua2VyRmxhZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja09CSkNYWExpbmtlckZsYWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0ZWZiOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja09CSkNYWExpbmtlckZsYWcuY21ha2UKQEAgLTAsMCArMSwzIEBACisKK3NldCAoQ0hFQ0tfTEFOR1VBR0UgT0JKQ1hYKQoraW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DaGVja0xpbmtlckZsYWcuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0YTJhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxNCBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworaWYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmd8R05VIikKKyAgcnVuX2NtYWtlKENoZWNrQ0xpbmtlckZsYWcpCisgIHJ1bl9jbWFrZShDaGVja0NYWExpbmtlckZsYWcpCisgIGlmIChBUFBMRSkKKyAgICBydW5fY21ha2UoQ2hlY2tPQkpDTGlua2VyRmxhZykKKyAgICBydW5fY21ha2UoQ2hlY2tPQkpDWFhMaW5rZXJGbGFnKQorICBlbmRpZigpCitlbmRpZigpCisKK2lmIChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVSIpCisgIHJ1bl9jbWFrZShDaGVja0ZvcnRyYW5MaW5rZXJGbGFnKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tNb2R1bGVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tNb2R1bGVzL0NNYWtlTGlzdHMudHh0CmluZGV4IDk4NzJkZjIuLjg0MmM1Y2YgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTW9kdWxlcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja01vZHVsZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjExKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIGNtYWtlX3BvbGljeShTRVQgQ01QMDA1NCBORVcpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtZmFpbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9CdWlsZERpci0tYnVpbGQtbXVsdGlwbGUtdGFyZ2V0cy1mYWlsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyLS1idWlsZC1tdWx0aXBsZS10YXJnZXRzLWZhaWwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyLS1idWlsZC1tdWx0aXBsZS10YXJnZXRzLWZhaWwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtZmFpbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9CdWlsZERpci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyL0NNYWtlTGlzdHMudHh0CmluZGV4IGQyYTI4MzEuLmNmMmMwODcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyL0NNYWtlTGlzdHMudHh0CkBAIC01LDMgKzUsNCBAQAogYWRkX2N1c3RvbV90YXJnZXQoQ3VzdG9tVGFyZ2V0IEFMTCBERVBFTkRTIG91dHB1dC50eHQpCiBhZGRfY3VzdG9tX3RhcmdldChDdXN0b21UYXJnZXQyIEFMTCBERVBFTkRTIG91dHB1dC50eHQpCiBhZGRfY3VzdG9tX3RhcmdldChDdXN0b21UYXJnZXQzIEFMTCBERVBFTkRTIG91dHB1dC50eHQpCithZGRfY3VzdG9tX3RhcmdldChDdXN0b21UYXJnZXRGYWlsIENPTU1BTkQgRG9lc05vdEV4aXN0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXBhYmlsaXRpZXMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2FwYWJpbGl0aWVzLXN0ZG91dC50eHQKaW5kZXggYjRiMTcwZS4uZTI0ZTEzMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXBhYmlsaXRpZXMtc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhcGFiaWxpdGllcy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi1eeyJmaWxlQXBpIjp7InJlcXVlc3RzIjpcW3sia2luZCI6ImNvZGVtb2RlbCIsInZlcnNpb24iOlxbeyJtYWpvciI6MiwibWlub3IiOjB9XX0seyJraW5kIjoiY2FjaGUiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjIsIm1pbm9yIjowfV19LHsia2luZCI6ImNtYWtlRmlsZXMiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjEsIm1pbm9yIjowfV19XX0sImdlbmVyYXRvcnMiOlxbLipcXSwic2VydmVyTW9kZSI6dHJ1ZSwidmVyc2lvbiI6ey4qfX0kCiteeyJmaWxlQXBpIjp7InJlcXVlc3RzIjpcW3sia2luZCI6ImNvZGVtb2RlbCIsInZlcnNpb24iOlxbeyJtYWpvciI6MiwibWlub3IiOjJ9XX0seyJraW5kIjoiY2FjaGUiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjIsIm1pbm9yIjowfV19LHsia2luZCI6ImNtYWtlRmlsZXMiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjEsIm1pbm9yIjowfV19XX0sImdlbmVyYXRvcnMiOlxbLipcXSwic2VydmVyTW9kZSI6dHJ1ZSwidmVyc2lvbiI6ey4qfX0kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfZGlyZWN0b3J5LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfZGlyZWN0b3J5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X2RpcmVjdG9yeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfZGlyZWN0b3J5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkMGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X2RpcmVjdG9yeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogLiogaXMgYSBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X2dvb2RfY2F0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9nb29kX2NhdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTkwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9nb29kX2NhdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMyBAQAorZmlyc3QgZmlsZSB0byBhcHBlbmQKK3NlY29uZCBmaWxlIHRvIGFwcGVuZAorw6DDqcO5w6cgLSDtlZzqta3slrQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fZXhpc3RpbmdfZmlsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X25vbl9leGlzdGluZ19maWxlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X25vbl9leGlzdGluZ19maWxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fZXhpc3RpbmdfZmlsZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOGZjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fZXhpc3RpbmdfZmlsZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogLio6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXChpZ25vcmluZ1wpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfbm9uX3JlYWRhYmxlX2ZpbGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fcmVhZGFibGVfZmlsZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fcmVhZGFibGVfZmlsZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfbm9uX3JlYWRhYmxlX2ZpbGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2VjODIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfbm9uX3JlYWRhYmxlX2ZpbGUtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6IC4qOiBwZXJtaXNzaW9uIGRlbmllZCBcKGlnbm9yaW5nXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9vcHRpb25fbm90X2hhbmRsZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9vcHRpb25fbm90X2hhbmRsZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfb3B0aW9uX25vdF9oYW5kbGVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9vcHRpb25fbm90X2hhbmRsZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY3YWNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfb3B0aW9uX25vdF9oYW5kbGVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiAtZjogb3B0aW9uIG5vdCBoYW5kbGVkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NvbXBhcmVfZmlsZXMtZGlmZmVyZW50LWVvbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jb21wYXJlX2ZpbGVzLWRpZmZlcmVudC1lb2wtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcyOWNjYi4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NvbXBhcmVfZmlsZXMtZGlmZmVyZW50LWVvbC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXkZpbGVzICIuKi9jb21wYXJlX2ZpbGVzL2xmIiB0byAiLiovY29tcGFyZV9maWxlcy9jcmxmIiBhcmUgZGlmZmVyZW50LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLW5vbmV4aXN0ZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NvbXBhcmVfZmlsZXMtaWdub3JlLWVvbC1ub25leGlzdGVudC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTljYTgxLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLW5vbmV4aXN0ZW50LXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1eRmlsZXMgIm5vbmV4aXN0ZW50X2EiIHRvICJub25leGlzdGVudF9iIiBhcmUgZGlmZmVyZW50LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jb21wYXJlX2ZpbGVzLWludmFsaWQtYXJndW1lbnRzLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmYmYwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jb21wYXJlX2ZpbGVzLWludmFsaWQtYXJndW1lbnRzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vLWFyZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkOWIwMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vLWFyZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMyBAQAorXkNNYWtlIEVycm9yOiBjbWFrZSB2ZXJzaW9uIC4qCitVc2FnZTogLiogLUUgPGNvbW1hbmQ+IFxbYXJndW1lbnRzXC5cLlwuXF0KK0F2YWlsYWJsZSBjb21tYW5kczoKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1uby1kaXJlY3RvcnktcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1uby1kaXJlY3RvcnktcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tZGlyZWN0b3J5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1uby1kaXJlY3Rvcnktc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU2MGVlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tZGlyZWN0b3J5LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiBmYWlsZWQgdG8gY3JlYXRlIGxpbmsgLiogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vbi1leGlzdGVudC1zb3VyY2UtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1ub24tZXhpc3RlbnQtc291cmNlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vbi1leGlzdGVudC1zb3VyY2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vbi1leGlzdGVudC1zb3VyY2Utc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM0NTcxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm9uLWV4aXN0ZW50LXNvdXJjZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15mYWlsZWQgdG8gY3JlYXRlIGhhcmQgbGluayBiZWNhdXNlIHNvdXJjZSBwYXRoIC4qIGRvZXMgbm90IGV4aXN0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmstcHJlcmVxLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstdW5yZXNvbHZlZC1zeW1saW5rLXByZXJlcS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjk3YWVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstdW5yZXNvbHZlZC1zeW1saW5rLXByZXJlcS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKCR7YWN0dWFsX3N0ZGVycl92YXJ9IE1BVENIRVMgIm9wZXJhdGlvbiBub3QgcGVybWl0dGVkIikKKyAgdW5zZXQobXNnKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmstc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzQ1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmstc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteZmFpbGVkIHRvIGNyZWF0ZSBoYXJkIGxpbmsgYmVjYXVzZSBzb3VyY2UgcGF0aCAuKiBkb2VzIG5vdCBleGlzdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUF9hcmJpdHJhcnlfYXJncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1BfYXJiaXRyYXJ5X2FyZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmYWFlMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1BfYXJiaXRyYXJ5X2FyZ3MuY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihOT1QgKCIke0NNQUtFX0FSR1YzfSIgU1RSRVFVQUwgIi0tIiBBTkQgIiR7Q01BS0VfQVJHVjR9IiBTVFJFUVVBTCAiLURGT08iKSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJgLURGT09gIHNob3VsZG4ndCB0cmlnZ2VyIGFuIGVycm9yIGFmdGVyIGAtLWAiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUHJvZmlsaW5nVGVzdC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4ZWFjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAoraWYgKE5PVCBFWElTVFMgJHtQcm9maWxpbmdUZXN0T3V0cHV0fSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJFeHBlY3RlZCAke1Byb2ZpbGluZ1Rlc3RPdXRwdXR9IHRvIGV4aXN0cyIpCitlbmRpZigpCisKK2ZpbGUoUkVBRCAiJHtQcm9maWxpbmdUZXN0T3V0cHV0fSIgSlNPTl9IRUFERVIgTElNSVQgMikKK2lmIChOT1QgSlNPTl9IRUFERVIgTUFUQ0hFUyAiXlxcW3siKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkV4cGVjdGVkIHZhbGlkIEpTT04gc3RhcnQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNJWkUgIiR7UHJvZmlsaW5nVGVzdE91dHB1dH0iIE9VVFBVVF9TSVpFKQorbWF0aChFWFBSIEVORF9PRkZTRVQgIiR7T1VUUFVUX1NJWkV9IC0yICIpCisKK2ZpbGUoUkVBRCAiJHtQcm9maWxpbmdUZXN0T3V0cHV0fSIgSlNPTl9UUkFJTEVSIE9GRlNFVCAke0VORF9PRkZTRVR9KQoraWYgKE5PVCBKU09OX1RSQUlMRVIgTUFUQ0hFUyAiXn1dJCIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRXhwZWN0ZWQgdmFsaWQgSlNPTiBlbmQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNUUklOR1MgJHtQcm9maWxpbmdUZXN0T3V0cHV0fSB1cHBlckNhc2VDb21tYW5kCisgIFJFR0VYIFtbIm5hbWUiWyBdKjpbIF0qIl9fVEVTVElOR19DT01NQU5EX0NBU0UiXV0pCitpZiAoTk9UICIke3VwcGVyQ2FzZUNvbW1hbmR9IiBTVFJFUVVBTCAiIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJDb21tYW5kIG5hbWUgbm90IHN0b3JlZCBpbiBsb3dlcmNhc2UiKQorZW5kaWYoKQorZmlsZShTVFJJTkdTICR7UHJvZmlsaW5nVGVzdE91dHB1dH0gbG93ZXJDYXNlQ29tbWFuZAorICBSRUdFWCBbWyJuYW1lIlsgXSo6WyBdKiJfX3Rlc3RpbmdfY29tbWFuZF9jYXNlIl1dKQorbGlzdChMRU5HVEggbG93ZXJDYXNlQ29tbWFuZCBudW1JbnZvY2F0aW9ucykKK2lmIChOT1QgbnVtSW52b2NhdGlvbnMgRVFVQUwgMSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVECisgICAgICAiVW5leHBlY3RlZCBudW1iZXIgb2YgbG93ZXJjYXNlIGNvbW1hbmQgbmFtZXM6ICR7bnVtSW52b2NhdGlvbnN9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9Qcm9maWxpbmdUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjBjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9Qcm9maWxpbmdUZXN0LmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorZnVuY3Rpb24oX190ZXN0aW5nX2NvbW1hbmRfY2FzZSkKK2VuZGZ1bmN0aW9uKCkKKworIyBUaGlzIG11c3Qgbm90IGFwcGVhciBpbiB0aGUgcHJvZmlsaW5nIG91dHB1dCBhcyB1cHBlcmNhc2UKK19fVEVTVElOR19DT01NQU5EX0NBU0UoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDg5MzA3MjEuLmIyMGU2ODMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTIyLDYgKzIyLDcgQEAKIHJ1bl9jbWFrZV9jb21tYW5kKEVfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLXNhbWUgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzIC0taWdub3JlLWVvbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2NvbXBhcmVfZmlsZXMvbGYgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9jb21wYXJlX2ZpbGVzL2NybGYpCiBydW5fY21ha2VfY29tbWFuZChFX2NvbXBhcmVfZmlsZXMtaWdub3JlLWVvbC1lbXB0eSAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgLS1pZ25vcmUtZW9sICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vY29tcGFyZV9maWxlcy9lbXB0eTEgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9jb21wYXJlX2ZpbGVzL2VtcHR5MikKIHJ1bl9jbWFrZV9jb21tYW5kKEVfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLW5vbmV4aXN0ZW50ICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAtLWlnbm9yZS1lb2wgbm9uZXhpc3RlbnRfYSBub25leGlzdGVudF9iKQorcnVuX2NtYWtlX2NvbW1hbmQoRV9jb21wYXJlX2ZpbGVzLWludmFsaWQtYXJndW1lbnRzICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyBmaWxlMS50eHQgZmlsZTIudHh0IGZpbGUzLnR4dCkKIHJ1bl9jbWFrZV9jb21tYW5kKEVfZWNob19hcHBlbmQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvX2FwcGVuZCkKIHJ1bl9jbWFrZV9jb21tYW5kKEVfcmVuYW1lLW5vLWFyZyAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbmFtZSkKIHJ1bl9jbWFrZV9jb21tYW5kKEVfc2VydmVyLWFyZyAke0NNQUtFX0NPTU1BTkR9IC1FIHNlcnZlciAtLWV4dHJhLWFyZykKQEAgLTQ2LDYgKzQ3LDcgQEAKIHJ1bl9jbWFrZV9jb21tYW5kKEdfYmFkLWFyZyAke0NNQUtFX0NPTU1BTkR9IC1CIER1bW15QnVpbGREaXIgLUcgTm9TdWNoR2VuZXJhdG9yKQogcnVuX2NtYWtlX2NvbW1hbmQoUF9uby1hcmcgJHtDTUFLRV9DT01NQU5EfSAtUCkKIHJ1bl9jbWFrZV9jb21tYW5kKFBfbm8tZmlsZSAke0NNQUtFX0NPTU1BTkR9IC1QIG5vc3VjaHNjcmlwdGZpbGUuY21ha2UpCitydW5fY21ha2VfY29tbWFuZChQX2FyYml0cmFyeV9hcmdzICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vUF9hcmJpdHJhcnlfYXJncy5jbWFrZSIgLS0gLURGT08pCiAKIHJ1bl9jbWFrZV9jb21tYW5kKGJ1aWxkLW5vLWRpcgogICAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQpCkBAIC02NSw2ICs2NywzMiBAQAogcnVuX2NtYWtlX2NvbW1hbmQoaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMKICAgJHtDTUFLRV9DT01NQU5EfSAtLWluc3RhbGwgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9kaXItaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMKICAgLS1zdHJpcCAtLXByZWZpeCAvdmFyL3Rlc3QgLS1jb25maWcgc2FtcGxlIC0tY29tcG9uZW50IHBhY2spCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbAorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LGc9cngsbz1yeCkKK3J1bl9jbWFrZV9jb21tYW5kKGluc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWZldworICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LGc9cngpCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLW5vbmUKKyAgJHtDTUFLRV9DT01NQU5EfSAtLWluc3RhbGwgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9kaXItcGVybWlzc2lvbnMtaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMpCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWExCisgICR7Q01BS0VfQ09NTUFORH0gLS1pbnN0YWxsICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vZGlyLXBlcm1pc3Npb25zLWluc3RhbGwtb3B0aW9ucy10by12YXJzCisgIC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgdT1yd3hnPSx4KQorcnVuX2NtYWtlX2NvbW1hbmQoaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMgorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4Zyw9eCkKK3J1bl9jbWFrZV9jb21tYW5kKGluc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtY29tbWEtYXQtdGhlLWVuZAorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LCkKK3J1bl9jbWFrZV9jb21tYW5kKGluc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1hc3NpZ25tZW50CisgICR7Q01BS0VfQ09NTUFORH0gLS1pbnN0YWxsICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vZGlyLXBlcm1pc3Npb25zLWluc3RhbGwtb3B0aW9ucy10by12YXJzCisgIC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgdT1yd3gsPXgpCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWVuZAorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LGc9KQorcnVuX2NtYWtlX2NvbW1hbmQoaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1iZWdpbm5pbmcKKyAgJHtDTUFLRV9DT01NQU5EfSAtLWluc3RhbGwgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9kaXItcGVybWlzc2lvbnMtaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMKKyAgLS1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucyA9dT1yd3gsZz1yeCkKIAogcnVuX2NtYWtlX2NvbW1hbmQoY2FjaGUtYmFkLWVudHJ5CiAgICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2NhY2hlLWJhZC1lbnRyeS8pCkBAIC0xMzMsNiArMTYxLDggQEAKICAgICAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgQnVpbGREaXItYnVpbGQgLS10YXJnZXQgQ3VzdG9tVGFyZ2V0KQogICBydW5fY21ha2VfY29tbWFuZChCdWlsZERpci0tYnVpbGQtbXVsdGlwbGUtdGFyZ2V0cyAke0NNQUtFX0NPTU1BTkR9IC1FIGNoZGlyIC4uCiAgICAgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIEJ1aWxkRGlyLWJ1aWxkIC10IEN1c3RvbVRhcmdldDIgLS10YXJnZXQgQ3VzdG9tVGFyZ2V0MykKKyAgcnVuX2NtYWtlX2NvbW1hbmQoQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtZmFpbCAke0NNQUtFX0NPTU1BTkR9IC1FIGNoZGlyIC4uCisgICAgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIEJ1aWxkRGlyLWJ1aWxkIC10IEN1c3RvbVRhcmdldEZhaWwgLS10YXJnZXQgQ3VzdG9tVGFyZ2V0MykKICAgcnVuX2NtYWtlX2NvbW1hbmQoQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtam9icyAke0NNQUtFX0NPTU1BTkR9IC1FIGNoZGlyIC4uCiAgICAgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIEJ1aWxkRGlyLWJ1aWxkIC0tdGFyZ2V0IEN1c3RvbVRhcmdldCBDdXN0b21UYXJnZXQyIC1qMiAtLXRhcmdldCBDdXN0b21UYXJnZXQzKQogICBydW5fY21ha2VfY29tbWFuZChCdWlsZERpci0tYnVpbGQtbXVsdGlwbGUtdGFyZ2V0cy13aXRoLWNsZWFuLWZpcnN0ICR7Q01BS0VfQ09NTUFORH0gLUUgY2hkaXIgLi4KQEAgLTMxOCw2ICszNDgsNDIgQEAKICAgJHtDTUFLRV9DT01NQU5EfSAtRSBjcmVhdGVfc3ltbGluayBUIC4KICAgKQogCisjY3JlYXRlIGhhcmQgbGluayB0ZXN0cworcnVuX2NtYWtlX2NvbW1hbmQoRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnCisgICR7Q01BS0VfQ09NTUFORH0gLUUgY3JlYXRlX2hhcmRsaW5rCisgICkKKworc2V0KGRpciAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2hhcmRsaW5rX3Rlc3RzKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtkaXJ9IikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtkaXJ9KQorCitydW5fY21ha2VfY29tbWFuZChFX2NyZWF0ZV9oYXJkbGluay1ub24tZXhpc3RlbnQtc291cmNlCisgICR7Q01BS0VfQ09NTUFORH0gLUUgY3JlYXRlX2hhcmRsaW5rICR7ZGlyfS9JX2RvbnRfZXhpc3QgJHtkaXJ9L2xpbmsKKyAgKQorCitmaWxlKFRPVUNIICR7ZGlyfS8xKQorCitydW5fY21ha2VfY29tbWFuZChFX2NyZWF0ZV9oYXJkbGluay1vaworICAke0NNQUtFX0NPTU1BTkR9IC1FIGNyZWF0ZV9oYXJkbGluayAke2Rpcn0vMSAke2Rpcn0vMS1saW5rCisgICkKKworcnVuX2NtYWtlX2NvbW1hbmQoRV9jcmVhdGVfaGFyZGxpbmstbm8tZGlyZWN0b3J5CisgICR7Q01BS0VfQ09NTUFORH0gLUUgY3JlYXRlX2hhcmRsaW5rICR7ZGlyfS8xICR7ZGlyfS9hLzEtbGluaworICApCisKKyNPbiBXaW5kb3dzLCBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQgcHJpdmlsZWdlcworI2Rvbid0IGZhaWwgdGhpcyB0ZXN0CitzZXQoUnVuQ01ha2VfREVGQVVMVF9zdGRlcnIgIihvcGVyYXRpb24gbm90IHBlcm1pdHRlZCk/IikKK3J1bl9jbWFrZV9jb21tYW5kKEVfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1wcmVyZXEKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjcmVhdGVfc3ltbGluayAke2Rpcn0vMSAke2Rpcn0vMS1zeW1saW5rCisgICkKK2ZpbGUoUkVNT1ZFICR7ZGlyfS8xKQorCitydW5fY21ha2VfY29tbWFuZChFX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmsKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjcmVhdGVfaGFyZGxpbmsgJHtkaXJ9LzEtc3ltbGluayAke2Rpcn0vMXMtbGluaworICApCit1bnNldChSdW5DTWFrZV9ERUZBVUxUX3N0ZGVycikKKwogc2V0KGluICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vY29weV9pbnB1dCkKIHNldChvdXQgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9jb3B5X291dHB1dCkKIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7b3V0fSIpCkBAIC00NTksNiArNTI1LDQ0IEBACiBlbmRpZigpCiB1bnNldChvdXQpCiAKKyMgY2F0IHRlc3RzCitzZXQob3V0ICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vY2F0X3Rlc3RzKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtvdXR9IikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtvdXR9KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9jYXRfbm9uX2V4aXN0aW5nX2ZpbGUKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjYXQgJHtvdXR9L25vbi1leGlzdGluZy1maWxlLnR4dCkKKworaWYoVU5JWCkKKyAgIyB0ZXN0IG5vbiByZWFkYWJsZSBmaWxlIG9ubHkgaWYgbm90IHJvb3QKKyAgZXhlY3V0ZV9wcm9jZXNzKAorICAgIENPTU1BTkQgaWQgLXUgJEVOVntVU0VSfQorICAgIE9VVFBVVF9WQVJJQUJMRSB1aWQKKyAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworICBpZihOT1QgIiR7dWlkfSIgU1RSRVFVQUwgIjAiKQorICAgICMgQ3JlYXRlIG5vbiByZWFkYWJsZSBmaWxlCisgICAgc2V0KGluc2lkZV9mb2xkZXIgIiR7b3V0fS9pbiIpCisgICAgZmlsZShNQUtFX0RJUkVDVE9SWSAke2luc2lkZV9mb2xkZXJ9KQorICAgIGZpbGUoV1JJVEUgIiR7aW5zaWRlX2ZvbGRlcn0vbm9uX3JlYWRhYmxlX2ZpbGUudHh0IiAiZmlyc3QgZmlsZSB0byBhcHBlbmRcbiIpCisgICAgZmlsZShDT1BZICIke2luc2lkZV9mb2xkZXJ9L25vbl9yZWFkYWJsZV9maWxlLnR4dCIgREVTVElOQVRJT04gIiR7b3V0fSIgRklMRV9QRVJNSVNTSU9OUyBPV05FUl9XUklURSkKKyAgICBydW5fY21ha2VfY29tbWFuZChFX2NhdF9ub25fcmVhZGFibGVfZmlsZQorICAgICAgJHtDTUFLRV9DT01NQU5EfSAtRSBjYXQgIiR7b3V0fS9ub25fcmVhZGFibGVfZmlsZS50eHQiKQorICBlbmRpZigpCitlbmRpZigpCisKK3J1bl9jbWFrZV9jb21tYW5kKEVfY2F0X29wdGlvbl9ub3RfaGFuZGxlZAorICAke0NNQUtFX0NPTU1BTkR9IC1FIGNhdCAtZikKKworcnVuX2NtYWtlX2NvbW1hbmQoRV9jYXRfZGlyZWN0b3J5CisgICR7Q01BS0VfQ09NTUFORH0gLUUgY2F0ICR7b3V0fSkKKworZmlsZShXUklURSAiJHtvdXR9L2ZpcnN0X2ZpbGUudHh0IiAiZmlyc3QgZmlsZSB0byBhcHBlbmRcbiIpCitmaWxlKFdSSVRFICIke291dH0vc2Vjb25kX2ZpbGUudHh0IiAic2Vjb25kIGZpbGUgdG8gYXBwZW5kXG4iKQorZmlsZShXUklURSAiJHtvdXR9L3VuaWNvZGVfZmlsZS50eHQiICLDoMOpw7nDpyAtIO2VnOq1reyWtCIpICMgS29yZWFuIGluIEtvcmVhbgorcnVuX2NtYWtlX2NvbW1hbmQoRV9jYXRfZ29vZF9jYXQKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjYXQgIiR7b3V0fS9maXJzdF9maWxlLnR4dCIgIiR7b3V0fS9zZWNvbmRfZmlsZS50eHQiICIke291dH0vdW5pY29kZV9maWxlLnR4dCIpCit1bnNldChvdXQpCisKIHJ1bl9jbWFrZV9jb21tYW5kKEVfZW52LW5vLWNvbW1hbmQwICR7Q01BS0VfQ09NTUFORH0gLUUgZW52KQogcnVuX2NtYWtlX2NvbW1hbmQoRV9lbnYtbm8tY29tbWFuZDEgJHtDTUFLRV9DT01NQU5EfSAtRSBlbnYgVEVTVF9FTlY9MSkKIHJ1bl9jbWFrZV9jb21tYW5kKEVfZW52LWJhZC1hcmcxICR7Q01BS0VfQ09NTUFORH0gLUUgZW52IC1iYWQtYXJnMSkKQEAgLTY5NiwzICs4MDAsMjUgQEAKICAgdW5zZXQoTExWTVJDX1JFU1VMVCkKIGVuZGZ1bmN0aW9uKCkKIHJ1bl9sbHZtX3JjKCkKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtLXByb2ZpbGluZy1vdXRwdXQ9L25vL3N1Y2gvZmlsZS50eHQgLS1wcm9maWxpbmctZm9ybWF0PWdvb2dsZS10cmFjZSkKK3J1bl9jbWFrZShwcm9maWxpbmctYWxsLXBhcmFtcykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtLXByb2ZpbGluZy1vdXRwdXQ9L25vL3N1Y2gvZmlsZS50eHQgLS1wcm9maWxpbmctZm9ybWF0PWludmFsaWQtZm9ybWF0KQorcnVuX2NtYWtlKHByb2ZpbGluZy1pbnZhbGlkLWZvcm1hdCkKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtLXByb2ZpbGluZy1vdXRwdXQ9L25vL3N1Y2gvZmlsZS50eHQpCitydW5fY21ha2UocHJvZmlsaW5nLW1pc3NpbmctZm9ybWF0KQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC0tcHJvZmlsaW5nLWZvcm1hdD1nb29nbGUtdHJhY2UpCitydW5fY21ha2UocHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0KQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3Byb2ZpbGluZy10ZXN0IikKK3NldChQcm9maWxpbmdUZXN0T3V0cHV0ICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9vdXRwdXQuanNvbikKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgLS1wcm9maWxpbmctZm9ybWF0PWdvb2dsZS10cmFjZSAtLXByb2ZpbGluZy1vdXRwdXQ9JHtQcm9maWxpbmdUZXN0T3V0cHV0fSkKK3J1bl9jbWFrZShQcm9maWxpbmdUZXN0KQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvY21ha2VfZGVwZW5kcy90ZXN0X1VURi0xNkxFLmggYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9jbWFrZV9kZXBlbmRzL3Rlc3RfVVRGLTE2TEUuaAppbmRleCBiZjU2ZWM2Li4yZDM5MTc4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9jbWFrZV9kZXBlbmRzL3Rlc3RfVVRGLTE2TEUuaAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9jbWFrZV9kZXBlbmRzL3Rlc3RfVVRGLTE2TEUuaApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9kaXItcGVybWlzc2lvbnMtaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMvY21ha2VfaW5zdGFsbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycy9jbWFrZV9pbnN0YWxsLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWY3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9kaXItcGVybWlzc2lvbnMtaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMvY21ha2VfaW5zdGFsbC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKENNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMpCisgIG1lc3NhZ2UoIkNNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMgaXMgJHtDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TfSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFmZXctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWZldy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFmZXctcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACiswCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFmZXctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWZldy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjRiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFmZXctc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TIGlzIE9XTkVSX1JFQUQ7T1dORVJfV1JJVEU7T1dORVJfRVhFQ1VURTtHUk9VUF9SRUFEO0dST1VQX0VYRUNVVEUKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxM2Q5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK0NNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMgaXMgT1dORVJfUkVBRDtPV05FUl9XUklURTtPV05FUl9FWEVDVVRFO0dST1VQX1JFQUQ7R1JPVVBfRVhFQ1VURTtXT1JMRF9SRUFEO1dPUkxEX0VYRUNVVEUKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWJlZ2lubmluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYXNzaWdubWVudC1hdC10aGUtYmVnaW5uaW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYXNzaWdubWVudC1hdC10aGUtYmVnaW5uaW5nLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWJlZ2lubmluZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODA5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWJlZ2lubmluZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgaXMgaW4gaW5jb3JyZWN0IGZvcm1hdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1lbmQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYXNzaWdubWVudC1hdC10aGUtZW5kLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYXNzaWdubWVudC1hdC10aGUtZW5kLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1lbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYXNzaWdubWVudC1hdC10aGUtZW5kLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4MDkzMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYXNzaWdubWVudC1hdC10aGUtZW5kLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUyBpcyBPV05FUl9SRUFEO09XTkVSX1dSSVRFO09XTkVSX0VYRUNVVEUKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtY29tbWEtYXQtdGhlLWVuZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXVuc3VwcG9ydGVkLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtY29tbWEtYXQtdGhlLWVuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWNvbW1hLWF0LXRoZS1lbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtY29tbWEtYXQtdGhlLWVuZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODA5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWNvbW1hLWF0LXRoZS1lbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACistLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIGlzIGluIGluY29ycmVjdCBmb3JtYXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtYXNzaWdubWVudC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1hc3NpZ25tZW50LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1hc3NpZ25tZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtYXNzaWdubWVudC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODA5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtYXNzaWdubWVudC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgaXMgaW4gaW5jb3JyZWN0IGZvcm1hdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1jb21tYTEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODA5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWExLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorLS1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucyBpcyBpbiBpbmNvcnJlY3QgZm9ybWF0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWEyLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczItcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWEyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWEyLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4MDk1MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1jb21tYTItc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACistLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIGlzIGluIGluY29ycmVjdCBmb3JtYXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtbm9uZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1ub25lLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtbm9uZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtbm9uZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1ub25lLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmMzI5MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtbm9uZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK14kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctYWxsLXBhcmFtcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctYWxsLXBhcmFtcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjVjMzczCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteLipDb3VsZCBub3Qgc3RhcnQgcHJvZmlsaW5nOiBVbmFibGUgdG8gb3BlbjogL25vL3N1Y2gvZmlsZS50eHQkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWludmFsaWQtZm9ybWF0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWludmFsaWQtZm9ybWF0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1pbnZhbGlkLWZvcm1hdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWludmFsaWQtZm9ybWF0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5YmMzYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1pbnZhbGlkLWZvcm1hdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK14uKkludmFsaWQgZm9ybWF0IHNwZWNpZmllZCBmb3IgLS1wcm9maWxpbmctZm9ybWF0JApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLWZvcm1hdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLWZvcm1hdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1mb3JtYXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLWZvcm1hdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWJjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1mb3JtYXQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteLipJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIC0tcHJvZmlsaW5nLWZvcm1hdCQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1vdXRwdXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1vdXRwdXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1vdXRwdXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWIwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXi4qLS1wcm9maWxpbmctZm9ybWF0IHNwZWNpZmllZCBidXQgbm8gLS1wcm9maWxpbmctb3V0cHV0ISQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY0NTJkYjEuLmViYWI3YTMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGF0aWJsZUludGVyZmFjZS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQ1hYKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGF0aWJsZUludGVyZmFjZS9EZWJ1Z1Byb3BlcnRpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0RlYnVnUHJvcGVydGllcy5jbWFrZQppbmRleCAwMTk2NjExLi42NGI1MmQ5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0RlYnVnUHJvcGVydGllcy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0RlYnVnUHJvcGVydGllcy5jbWFrZQpAQCAtMSw1ICsxLDUgQEAKIAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiAKIHByb2plY3QoQ29tcGF0aWJsZUludGVyZmFjZSkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGF0aWJsZUludGVyZmFjZS9JbnRlcmZhY2VTdHJpbmctYnVpbHRpbi1wcm9wLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGF0aWJsZUludGVyZmFjZS9JbnRlcmZhY2VTdHJpbmctYnVpbHRpbi1wcm9wLmNtYWtlCmluZGV4IDU3NzI4NTYuLmYwNzJlYjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvSW50ZXJmYWNlU3RyaW5nLWJ1aWx0aW4tcHJvcC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0ludGVyZmFjZVN0cmluZy1idWlsdGluLXByb3AuY21ha2UKQEAgLTUsNSArNSw1IEBACiBzZXRfcHJvcGVydHkoVEFSR0VUIGZvbyBBUFBFTkQgUFJPUEVSVFkgQ09NUEFUSUJMRV9JTlRFUkZBQ0VfU1RSSU5HIElOQ0xVREVfRElSRUNUT1JJRVMpCiAKIGFkZF9leGVjdXRhYmxlKHVzZXIgbWFpbi5jcHApCi1zZXRfcHJvcGVydHkoVEFSR0VUIHVzZXIgUFJPUEVSVFkgSU5DTFVERV9ESVJFQ1RPUklFUyBiYXJfaW5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCB1c2VyIFBST1BFUlRZIElOQ0xVREVfRElSRUNUT1JJRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jhcl9pbmMpCiB0YXJnZXRfbGlua19saWJyYXJpZXModXNlciBmb28gYmFyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJDaGFuZ2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckNoYW5nZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiNGIzMDE2Li4xNGM0N2FkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckNoYW5nZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckNoYW5nZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBpZihOT1QgUnVuQ01ha2VfVEVTVCkKICAgc2V0KFJ1bkNNYWtlX1RFU1QgIiRFTlZ7UnVuQ01ha2VfVEVTVH0iKSAjIG5lZWRlZCB3aGVuIGNhY2hlIGlzIGRlbGV0ZWQKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1jb21tb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtY29tbW9uLmNtYWtlCmluZGV4IDZmN2ZjODYuLmNhMjViMmEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1jb21tb24uY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLWNvbW1vbi5jbWFrZQpAQCAtMSwzICsxLDQgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwNCBORVcpCiBlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKIHNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCiBhZGRfZXhlY3V0YWJsZShtYWluIG1haW4uY3UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlck5vdEZvdW5kL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJOb3RGb3VuZC9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlck5vdEZvdW5kL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTm90Rm91bmQvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0Nyb3NzY29tcGlsaW5nRW11bGF0b3IvQWRkVGVzdC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0Nyb3NzY29tcGlsaW5nRW11bGF0b3IvQWRkVGVzdC1jaGVjay5jbWFrZQppbmRleCA1ODhiNzdiLi4zY2JiYzA3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Dcm9zc2NvbXBpbGluZ0VtdWxhdG9yL0FkZFRlc3QtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ3Jvc3Njb21waWxpbmdFbXVsYXRvci9BZGRUZXN0LWNoZWNrLmNtYWtlCkBAIC03LDIyICs3LDIyIEBACiAKIHNldChlcnJvcl9kZXRhaWxzICJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBnZW5lcmF0ZWQgdGVzdCBmaWxlOiAke3Rlc3RmaWxlfSIpCiAKLWlmKHRlc3RmaWxlX2NvbnRlbnRzIE1BVENIRVMgImFkZF90ZXN0WyhdRG9lc05vdFVzZUVtdWxhdG9yIFteXG5dK3BzZXVkb19lbXVsYXRvclteXG5dK1xuIikKK2lmKHRlc3RmaWxlX2NvbnRlbnRzIE1BVENIRVMgImFkZF90ZXN0WyhdW1wiXURvZXNOb3RVc2VFbXVsYXRvcltcIl0gW15cbl0rcHNldWRvX2VtdWxhdG9yW15cbl0rXG4iKQogICBtZXNzYWdlKFNFTkRfRVJST1IgIlVzZWQgZW11bGF0b3Igd2hlbiBpdCBzaG91bGQgbm90IGJlIHVzZWQuICR7ZXJyb3JfZGV0YWlsc30iKQogZW5kaWYoKQogCi1pZihOT1QgdGVzdGZpbGVfY29udGVudHMgTUFUQ0hFUyAiYWRkX3Rlc3RbKF1Vc2VzRW11bGF0b3IgW15cbl0rcHNldWRvX2VtdWxhdG9yW15cbl0rXG4iKQoraWYoTk9UIHRlc3RmaWxlX2NvbnRlbnRzIE1BVENIRVMgImFkZF90ZXN0WyhdW1wiXVVzZXNFbXVsYXRvcltcIl0gW15cbl0rcHNldWRvX2VtdWxhdG9yW15cbl0rXG4iKQogICBtZXNzYWdlKFNFTkRfRVJST1IgIkRpZCBub3QgdXNlIGVtdWxhdG9yIHdoZW4gaXQgc2hvdWxkIGJlIHVzZWQuICR7ZXJyb3JfZGV0YWlsc30iKQogZW5kaWYoKQogCi1pZih0ZXN0ZmlsZV9jb250ZW50cyBNQVRDSEVTICJhZGRfdGVzdFsoXURvZXNOb3RVc2VFbXVsYXRvcldpdGhHZW5leCBbXlxuXStwc2V1ZG9fZW11bGF0b3JbXlxuXStcbiIpCitpZih0ZXN0ZmlsZV9jb250ZW50cyBNQVRDSEVTICJhZGRfdGVzdFsoXVtcIl1Eb2VzTm90VXNlRW11bGF0b3JXaXRoR2VuZXhbXCJdIFteXG5dK3BzZXVkb19lbXVsYXRvclteXG5dK1xuIikKICAgbWVzc2FnZShTRU5EX0VSUk9SICJVc2VkIGVtdWxhdG9yIHdoZW4gaXQgc2hvdWxkIG5vdCBiZSB1c2VkLiAke2Vycm9yX2RldGFpbHN9IikKIGVuZGlmKCkKIAotaWYoTk9UIHRlc3RmaWxlX2NvbnRlbnRzIE1BVENIRVMgImFkZF90ZXN0WyhdVXNlc0VtdWxhdG9yV2l0aEV4ZWNUYXJnZXRGcm9tU3ViZGlyQWRkZWRXaXRob3V0R2VuZXggW15cbl0rcHNldWRvX2VtdWxhdG9yW15cbl0rXG4iKQoraWYoTk9UIHRlc3RmaWxlX2NvbnRlbnRzIE1BVENIRVMgImFkZF90ZXN0WyhdW1wiXVVzZXNFbXVsYXRvcldpdGhFeGVjVGFyZ2V0RnJvbVN1YmRpckFkZGVkV2l0aG91dEdlbmV4W1wiXSBbXlxuXStwc2V1ZG9fZW11bGF0b3JbXlxuXStcbiIpCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRGlkIG5vdCB1c2UgZW11bGF0b3Igd2hlbiBpdCBzaG91bGQgYmUgdXNlZC4gJHtlcnJvcl9kZXRhaWxzfSIpCiBlbmRpZigpCiAKLWlmKHRlc3RmaWxlX2NvbnRlbnRzIE1BVENIRVMgImFkZF90ZXN0WyhdRG9lc05vdFVzZUVtdWxhdG9yV2l0aEV4ZWNUYXJnZXRGcm9tU3ViZGlyQWRkZWRXaXRoR2VuZXggW15cbl0rcHNldWRvX2VtdWxhdG9yW15cbl0rXG4iKQoraWYodGVzdGZpbGVfY29udGVudHMgTUFUQ0hFUyAiYWRkX3Rlc3RbKF1bXCJdRG9lc05vdFVzZUVtdWxhdG9yV2l0aEV4ZWNUYXJnZXRGcm9tU3ViZGlyQWRkZWRXaXRoR2VuZXhbXCJdIFteXG5dK3BzZXVkb19lbXVsYXRvclteXG5dK1xuIikKICAgbWVzc2FnZShTRU5EX0VSUk9SICJVc2VkIGVtdWxhdG9yIHdoZW4gaXQgc2hvdWxkIG5vdCBiZSB1c2VkLiAke2Vycm9yX2RldGFpbHN9IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0Rpc2FsbG93ZWRDb21tYW5kcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0Rpc2FsbG93ZWRDb21tYW5kcy9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9EaXNhbGxvd2VkQ29tbWFuZHMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRGlzYWxsb3dlZENvbW1hbmRzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL0JlZm9yZVByb2plY3QtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA1OGUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL0JlZm9yZVByb2plY3QtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitpZihOT1QgRVhJU1RTICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY29tcGlsZV9jb21tYW5kcy5qc29uIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJjb21waWxlX2NvbW1hbmRzLmpzb24gbm90IGdlbmVyYXRlZCIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9CZWZvcmVQcm9qZWN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Y2JkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2xpYnJhcnkoZW1wdHkgU1RBVElDIGVtcHR5LmMpCittZXNzYWdlKFNUQVRVUyAiQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFM9JyR7Q01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFN9JyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdEJFRk9SRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9CZWZvcmVQcm9qZWN0QkVGT1JFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjljODcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdEJFRk9SRS5jbWFrZQpAQCAtMCwwICsxIEBACitzZXQoQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMgT04pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxMTdiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQwYTA0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZV93aXRoX29wdGlvbnMoQmVmb3JlUHJvamVjdCAtRENNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkU9QmVmb3JlUHJvamVjdEJFRk9SRS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRXaXRob3V0TGFuZ3VhZ2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRXaXRob3V0TGFuZ3VhZ2UvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRXhwb3J0V2l0aG91dExhbmd1YWdlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydFdpdGhvdXRMYW5ndWFnZS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsRGF0YS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsRGF0YS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbERhdGEvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxEYXRhL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L0FkZF9TdGVwRGVwZW5kZW5jaWVzX2lmYWNlX3N0ZXAtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9BZGRfU3RlcERlcGVuZGVuY2llc19pZmFjZV9zdGVwLXN0ZGVyci50eHQKaW5kZXggMjJlMTNiZi4uNWZhNzVlOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L0FkZF9TdGVwRGVwZW5kZW5jaWVzX2lmYWNlX3N0ZXAtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvQWRkX1N0ZXBEZXBlbmRlbmNpZXNfaWZhY2Vfc3RlcC1zdGRlcnIudHh0CkBAIC0xLDUgKzEsNSBAQAogXkNNYWtlIEVycm9yIGF0IC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKLSAgVGFyZ2V0ICJNeVByb2otSUZhY2UiIHdhcyBub3QgZ2VuZXJhdGVkIGJ5IEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFRhcmdldHMuCisgIEV4dGVybmFsIHByb2plY3QgIk15UHJvaiIgZG9lcyBub3QgaGF2ZSBhIHN0ZXAgIklGYWNlIi4KIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIEFkZF9TdGVwRGVwZW5kZW5jaWVzX2lmYWNlX3N0ZXAuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwRGVwZW5kZW5jaWVzXCkKICAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L05PX0RFUEVORFMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9OT19ERVBFTkRTLXN0ZGVyci50eHQKaW5kZXggNGNiMDUxZC4uOTI4ZDg4YSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L05PX0RFUEVORFMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvTk9fREVQRU5EUy1zdGRlcnIudHh0CkBAIC0yLDcgKzIsNyBAQAogICBVc2luZyBOT19ERVBFTkRTIGZvciAiY29uZmlndXJlIiBzdGVwIG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcwogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgLiovTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwVGFyZ2V0c1wpCi0gIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFwpCisgIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKzpFVkFMOjIgXChFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXBcKQogICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSsgXChfZXBfYWRkX2NvbmZpZ3VyZV9jb21tYW5kXCkKICAgTk9fREVQRU5EUy5jbWFrZTpbMC05XSsgXChFeHRlcm5hbFByb2plY3RfQWRkXCkKICAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCkBAIC0xMiw3ICsxMiw3IEBACiAgIFVzaW5nIE5PX0RFUEVORFMgZm9yICJidWlsZCIgc3RlcCBtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFRhcmdldHNcKQotICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSsgXChFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXBcKQorICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSs6RVZBTDoyIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwXCkKICAgLiovTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2U6WzAtOV0rIFwoX2VwX2FkZF9idWlsZF9jb21tYW5kXCkKICAgTk9fREVQRU5EUy5jbWFrZTpbMC05XSsgXChFeHRlcm5hbFByb2plY3RfQWRkXCkKICAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCkBAIC0yMiw3ICsyMiw3IEBACiAgIFVzaW5nIE5PX0RFUEVORFMgZm9yICJpbnN0YWxsIiBzdGVwIG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcwogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgLiovTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwVGFyZ2V0c1wpCi0gIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFwpCisgIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKzpFVkFMOjIgXChFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXBcKQogICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSsgXChfZXBfYWRkX2luc3RhbGxfY29tbWFuZFwpCiAgIE5PX0RFUEVORFMuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZFwpCiAgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L1ByZXNlcnZlRW1wdHlBcmdzLWJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUHJlc2VydmVFbXB0eUFyZ3MtYnVpbGQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTIxYjhmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L1ByZXNlcnZlRW1wdHlBcmdzLWJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSwyMSBAQAorLiotLSBOdW1iZXIgb2YgYXJndW1lbnRzIGZvciBkb3dubG9hZDogNgorLiotLSBkb3dubG9hZCBhcmd1bWVudCA0OiAnJworLiotLSBkb3dubG9hZCBhcmd1bWVudCA1OiAnYWZ0ZXInCisuKi0tIE51bWJlciBvZiBhcmd1bWVudHMgZm9yIHVwZGF0ZTogNgorLiotLSB1cGRhdGUgYXJndW1lbnQgNDogJycKKy4qLS0gdXBkYXRlIGFyZ3VtZW50IDU6ICdhZnRlcicKKy4qLS0gTnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgcGF0Y2g6IDYKKy4qLS0gcGF0Y2ggYXJndW1lbnQgNDogJycKKy4qLS0gcGF0Y2ggYXJndW1lbnQgNTogJ2FmdGVyJworLiotLSBOdW1iZXIgb2YgYXJndW1lbnRzIGZvciBjb25maWd1cmU6IDYKKy4qLS0gY29uZmlndXJlIGFyZ3VtZW50IDQ6ICcnCisuKi0tIGNvbmZpZ3VyZSBhcmd1bWVudCA1OiAnYWZ0ZXInCisuKi0tIE51bWJlciBvZiBhcmd1bWVudHMgZm9yIGJ1aWxkOiA2CisuKi0tIGJ1aWxkIGFyZ3VtZW50IDQ6ICcnCisuKi0tIGJ1aWxkIGFyZ3VtZW50IDU6ICdhZnRlcicKKy4qLS0gTnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgaW5zdGFsbDogNgorLiotLSBpbnN0YWxsIGFyZ3VtZW50IDQ6ICcnCisuKi0tIGluc3RhbGwgYXJndW1lbnQgNTogJ2FmdGVyJworLiotLSBOdW1iZXIgb2YgYXJndW1lbnRzIGZvciB0ZXN0OiA2CisuKi0tIHRlc3QgYXJndW1lbnQgNDogJycKKy4qLS0gdGVzdCBhcmd1bWVudCA1OiAnYWZ0ZXInCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUHJlc2VydmVFbXB0eUFyZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUHJlc2VydmVFbXB0eUFyZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkMTAwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9QcmVzZXJ2ZUVtcHR5QXJncy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlKEV4dGVybmFsUHJvamVjdCkKKworc2V0KHNjcmlwdCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb3VudEFyZ3MuY21ha2UiKQorRXh0ZXJuYWxQcm9qZWN0X0FkZCgKKyAgYmxhbmtDaGVja2VyCisgIERPV05MT0FEX0NPTU1BTkQgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgZG93bmxvYWQgICIiIGFmdGVyCisgIFVQREFURV9DT01NQU5EICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgdXBkYXRlICAgICIiIGFmdGVyCisgIFBBVENIX0NPTU1BTkQgICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgcGF0Y2ggICAgICIiIGFmdGVyCisgIENPTkZJR1VSRV9DT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgY29uZmlndXJlICIiIGFmdGVyCisgIEJVSUxEX0NPTU1BTkQgICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgYnVpbGQgICAgICIiIGFmdGVyCisgIElOU1RBTExfQ09NTUFORCAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgaW5zdGFsbCAgICIiIGFmdGVyCisgIFRFU1RfQ09NTUFORCAgICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgdGVzdCAgICAgICIiIGFmdGVyCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBjYWFmMGQyLi4wZDFkYTI2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTI5LDYgKzI5LDEwIEBACiAKIF9fZXBfdGVzdF93aXRoX2J1aWxkKE11bHRpQ29tbWFuZCkKIAorc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIDEpCitfX2VwX3Rlc3Rfd2l0aF9idWlsZChQcmVzZXJ2ZUVtcHR5QXJncykKK3NldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAwKQorCiAjIE91dHB1dCBpcyBub3QgcHJlZGljdGFibGUgZW5vdWdoIHRvIGJlIGFibGUgdG8gdmVyaWZ5IGl0IHJlbGlhYmx5CiAjIHdoZW4gdXNpbmcgdGhlIHZhcmlvdXMgZGlmZmVyZW50IFZpc3VhbCBTdHVkaW8gZ2VuZXJhdG9ycwogaWYoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9jb3VudEFyZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvY291bnRBcmdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjQyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvY291bnRBcmdzLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorbWVzc2FnZShTVEFUVVMgIk51bWJlciBvZiBhcmd1bWVudHMgZm9yICR7Q01BS0VfQVJHVjN9OiAke0NNQUtFX0FSR0N9IikKK21hdGgoRVhQUiBsYXN0ICIke0NNQUtFX0FSR0N9IC0gMSIpCitmb3JlYWNoKG4gUkFOR0UgNCAke2xhc3R9KQorICBtZXNzYWdlKFNUQVRVUyAiJHtDTUFLRV9BUkdWM30gYXJndW1lbnQgJHtufTogJyR7Q01BS0VfQVJHViR7bn19JyIpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kVXNlQ29tcG9uZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmRVc2VDb21wb25lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNjhmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kVXNlQ29tcG9uZW50cy5jbWFrZQpAQCAtMCwwICsxLDE1IEBACisjIHBzZXVkbyBmaW5kX21vZHVsZQorCitpZiAoVXNlQ29tcG9uZW50c19SRVFVSVJFX1ZBUlMpCisgIHNldChGT09CQVIgVFJVRSkKKyAgc2V0KFJFUVVJUkVEX1ZBUlMgUkVRVUlSRURfVkFSUyAgRk9PQkFSKQorZW5kaWYoKQorCitzZXQgKFVzZUNvbXBvbmVudHNfQ29tcDFfRk9VTkQgVFJVRSkKK3NldCAoVXNlQ29tcG9uZW50c19Db21wMl9GT1VORCBUUlVFKQorc2V0IChVc2VDb21wb25lbnRzX0NvbXAzX0ZPVU5EIEZBTFNFKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKFVzZUNvbXBvbmVudHMgJHtSRVFVSVJFRF9WQVJTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgUHNldWRvX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9DT01QT05FTlRTKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDI4NjkxNWQuLjhlMzkwOTAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTQ3LDMgKzQ3LDExIEBACiBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX01PRFVMRV9QQVRIPSR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0iICItRENPTkZJR19NT0RFPVRSVUUiKQogcnVuX2NtYWtlKGN1c3RvbV9tZXNzYWdlXzIpCiBydW5fY21ha2UoY3VzdG9tX21lc3NhZ2VfMykKKworIyBjaGVjayBoYW5kbGluZyBvZiBjb21wb25lbnRzCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX01PRFVMRV9QQVRIPSR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0iICItRFVzZUNvbXBvbmVudHNfVkVSU0lPTj0xLjIuMy40IikKK3J1bl9jbWFrZShyZXF1aXJlZF9jb21wb25lbnRzKQorcnVuX2NtYWtlKHJlcXVpcmVkX2FuZF9vcHRpb25hbF9jb21wb25lbnRzKQorcnVuX2NtYWtlKGFsbF9vcHRpb25hbF9jb21wb25lbnRzKQorbGlzdChBUFBFTkQgUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRFVzZUNvbXBvbmVudHNfUkVRVUlSRV9WQVJTPVRSVUUiKQorcnVuX2NtYWtlKHJlcXVpcmVkX2NvbXBvbmVudHNfd2l0aF92YXJzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvYWxsX29wdGlvbmFsX2NvbXBvbmVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9hbGxfb3B0aW9uYWxfY29tcG9uZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ4YjVlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvYWxsX29wdGlvbmFsX2NvbXBvbmVudHMuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorZmluZF9wYWNrYWdlKFVzZUNvbXBvbmVudHMgT1BUSU9OQUxfQ09NUE9ORU5UUyBDb21wMSBDb21wMiBDb21wMykKKworaWYgKE5PVCBVc2VDb21wb25lbnRzX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzIE5vdCBGb3VuZC4iKQorZW5kaWYoKQoraWYgKE5PVCBVc2VDb21wb25lbnRzX0NvbXAxX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzLCBjb21wb25lbnQgQ29tcDEgbm90IGZvdW5kLiIpCitlbmRpZigpCitpZiAoTk9UIFVzZUNvbXBvbmVudHNfQ29tcDJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMsIGNvbXBvbmVudCBDb21wMiBub3QgZm91bmQuIikKK2VuZGlmKCkKK2lmIChVc2VDb21wb25lbnRzX0NvbXAzX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzLCBjb21wb25lbnQgQ29tcDIgdW5leHBlY3RlZGx5IGZvdW5kLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9yZXF1aXJlZF9hbmRfb3B0aW9uYWxfY29tcG9uZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL3JlcXVpcmVkX2FuZF9vcHRpb25hbF9jb21wb25lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNmRjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9yZXF1aXJlZF9hbmRfb3B0aW9uYWxfY29tcG9uZW50cy5jbWFrZQpAQCAtMCwwICsxLDE0IEBACitmaW5kX3BhY2thZ2UoVXNlQ29tcG9uZW50cyBDT01QT05FTlRTIENvbXAxIENvbXAyIE9QVElPTkFMX0NPTVBPTkVOVFMgQ29tcDMpCisKK2lmIChOT1QgVXNlQ29tcG9uZW50c19GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgInBhY2thZ2UgVXNlQ29tcG9uZW50cyBOb3QgRm91bmQuIikKK2VuZGlmKCkKK2lmIChOT1QgVXNlQ29tcG9uZW50c19Db21wMV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgInBhY2thZ2UgVXNlQ29tcG9uZW50cywgY29tcG9uZW50IENvbXAxIG5vdCBmb3VuZC4iKQorZW5kaWYoKQoraWYgKE5PVCBVc2VDb21wb25lbnRzX0NvbXAyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzLCBjb21wb25lbnQgQ29tcDIgbm90IGZvdW5kLiIpCitlbmRpZigpCitpZiAoVXNlQ29tcG9uZW50c19Db21wM19GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgInBhY2thZ2UgVXNlQ29tcG9uZW50cywgY29tcG9uZW50IENvbXAyIHVuZXhwZWN0ZWRseSBmb3VuZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvcmVxdWlyZWRfY29tcG9uZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL3JlcXVpcmVkX2NvbXBvbmVudHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkOGU5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL3JlcXVpcmVkX2NvbXBvbmVudHMuY21ha2UKQEAgLTAsMCArMSwxMSBAQAorZmluZF9wYWNrYWdlKFVzZUNvbXBvbmVudHMgQ09NUE9ORU5UUyBDb21wMSBDb21wMikKKworaWYgKE5PVCBVc2VDb21wb25lbnRzX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzIE5vdCBGb3VuZC4iKQorZW5kaWYoKQoraWYgKE5PVCBVc2VDb21wb25lbnRzX0NvbXAxX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzLCBjb21wb25lbnQgQ29tcDEgTm90IEZvdW5kLiIpCitlbmRpZigpCitpZiAoTk9UIFVzZUNvbXBvbmVudHNfQ29tcDJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMsIGNvbXBvbmVudCBDb21wMiBOb3QgRm91bmQuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL3JlcXVpcmVkX2NvbXBvbmVudHNfd2l0aF92YXJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvcmVxdWlyZWRfY29tcG9uZW50c193aXRoX3ZhcnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyZWYxNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL3JlcXVpcmVkX2NvbXBvbmVudHNfd2l0aF92YXJzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUgKCJyZXF1aXJlZF9jb21wb25lbnRzLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZlYXR1cmVTdW1tYXJ5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmVhdHVyZVN1bW1hcnkvQ01ha2VMaXN0cy50eHQKaW5kZXggNzJhYmZjOC4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmVhdHVyZVN1bW1hcnkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmVhdHVyZVN1bW1hcnkvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjExKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L0Rvd25sb2FkRmlsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9Eb3dubG9hZEZpbGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxYjZkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9Eb3dubG9hZEZpbGUuY21ha2UKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlKEZldGNoQ29udGVudCkKKworRmV0Y2hDb250ZW50X0RlY2xhcmUoCisgIHQxCisgIFVSTCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2R1bW15RmlsZS50eHQKKyAgRE9XTkxPQURfTk9fRVhUUkFDVCBZRVMKKykKKworRmV0Y2hDb250ZW50X1BvcHVsYXRlKHQxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L01ha2VBdmFpbGFibGUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9NYWtlQXZhaWxhYmxlLXN0ZG91dC50eHQKaW5kZXggNmU2YzczMC4uNzExZGU2YiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L01ha2VBdmFpbGFibGUtc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvTWFrZUF2YWlsYWJsZS1zdGRvdXQudHh0CkBAIC0xLDIgKzEsMyBAQAogQ29uZmlybWF0aW9uIHByb2plY3QgaGFzIGJlZW4gYWRkZWQKKy4qQ29uZmlybWF0aW9uIHN1YnByb2plY3QgaGFzIGJlZW4gYWRkZWQKIC4qQ29uZmlybWF0aW9uIHNjcmlwdCBoYXMgYmVlbiBjYWxsZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9NYWtlQXZhaWxhYmxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L01ha2VBdmFpbGFibGUuY21ha2UKaW5kZXggYTkzZjFmNy4uZDdmYzU1YyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L01ha2VBdmFpbGFibGUuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L01ha2VBdmFpbGFibGUuY21ha2UKQEAgLTgsMTMgKzgsMjIgQEAKICAgV2l0aG91dFByb2plY3QKICAgU09VUkNFX0RJUiAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1dpdGhvdXRQcm9qZWN0CiApCitGZXRjaENvbnRlbnRfRGVjbGFyZSgKKyAgUHJvamVjdFN1YmRpcgorICBTT1VSQ0VfRElSICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vV2l0aG91dFByb2plY3QKKyAgU09VUkNFX1NVQkRJUiBQcm9qZWN0U3ViZGlyCispCiAKICMgT3JkZXIgaXMgaW1wb3J0YW50IGFuZCB3aWxsIGJlIHZlcmlmaWVkIGJ5IHRlc3Qgb3V0cHV0Ci1GZXRjaENvbnRlbnRfTWFrZUF2YWlsYWJsZShXaXRoUHJvamVjdCBXaXRob3V0UHJvamVjdCkKK0ZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlKFdpdGhQcm9qZWN0IFdpdGhvdXRQcm9qZWN0IFByb2plY3RTdWJkaXIpCiAKIGdldF9wcm9wZXJ0eShhZGRlZFdpdGggR0xPQkFMIFBST1BFUlRZIEZldGNoV2l0aFByb2plY3QgU0VUKQogaWYoTk9UIGFkZGVkV2l0aCkKLSAgbWVzc2FnZShTRU5EX0VSUk9SICJTdWJkaXIgd2l0aCBDTWFrZUxpc3RzLnR4dCBub3QgYWRkZWQiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlByb2plY3Qgd2l0aCB0b3AgbGV2ZWwgQ01ha2VMaXN0cy50eHQgbm90IGFkZGVkIikKK2VuZGlmKCkKK2dldF9wcm9wZXJ0eShhZGRlZFN1YmRpciBHTE9CQUwgUFJPUEVSVFkgRmV0Y2hXaXRoU3ViUHJvamVjdCBTRVQpCitpZihOT1QgYWRkZWRTdWJkaXIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHJvamVjdCB3aXRoIENNYWtlTGlzdHMudHh0IGluIHN1YmRpciBub3QgYWRkZWQiKQogZW5kaWYoKQogCiBpbmNsdWRlKCR7d2l0aG91dHByb2plY3RfU09VUkNFX0RJUn0vY29uZmlybU1lc3NhZ2UuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvUHJlc2VydmVFbXB0eUFyZ3Mtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9QcmVzZXJ2ZUVtcHR5QXJncy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmQ5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvUHJlc2VydmVFbXB0eUFyZ3Mtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDQgQEAKKy4qLS0gTnVtYmVyIG9mIGFyZ3VtZW50czogNgorLiotLSBBcmd1bWVudCAzOiAnYmVmb3JlJworLiotLSBBcmd1bWVudCA0OiAnJworLiotLSBBcmd1bWVudCA1OiAnYWZ0ZXInCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvUHJlc2VydmVFbXB0eUFyZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvUHJlc2VydmVFbXB0eUFyZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzNTQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9QcmVzZXJ2ZUVtcHR5QXJncy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlKEZldGNoQ29udGVudCkKKworIyBOZWVkIHRvIHNlZSB0aGUgZG93bmxvYWQgY29tbWFuZCBvdXRwdXQKK3NldChGRVRDSENPTlRFTlRfUVVJRVQgT0ZGKQorCitGZXRjaENvbnRlbnRfRGVjbGFyZSgKKyAgdDEKKyAgRE9XTkxPQURfQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QCisgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb3VudEFyZ3MuY21ha2UKKyAgICAgICAgICAgICAgICAgICBiZWZvcmUgIiIgYWZ0ZXIKKykKKworRmV0Y2hDb250ZW50X1BvcHVsYXRlKHQxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggZTI4YWU5Ni4uZjNlZDNlMiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC02LDYgKzYsNyBAQAogcnVuX2NtYWtlKERpcmVjdElnbm9yZXNEZXRhaWxzKQogcnVuX2NtYWtlKEZpcnN0RGV0YWlsc1dpbikKIHJ1bl9jbWFrZShEb3dubG9hZFR3aWNlKQorcnVuX2NtYWtlKERvd25sb2FkRmlsZSkKIHJ1bl9jbWFrZShTYW1lR2VuZXJhdG9yKQogcnVuX2NtYWtlKFZhckRlZmluaXRpb25zKQogcnVuX2NtYWtlKEdldFByb3BlcnRpZXMpCkBAIC0xNSw2ICsxNiwxMCBAQAogcnVuX2NtYWtlKE1ha2VBdmFpbGFibGVUd2ljZSkKIHJ1bl9jbWFrZShNYWtlQXZhaWxhYmxlVW5kZWNsYXJlZCkKIAorc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIDEpCitydW5fY21ha2UoUHJlc2VydmVFbXB0eUFyZ3MpCitzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgMCkKKwogIyBXZSBuZWVkIHRvIHBhc3MgdGhyb3VnaCBDTUFLRV9HRU5FUkFUT1IgYW5kIENNQUtFX01BS0VfUFJPR1JBTQogIyB0byBlbnN1cmUgdGhlIHRlc3QgY2FuIHJ1biBvbiBtYWNoaW5lcyB3aGVyZSB0aGUgYnVpbGQgdG9vbAogIyBpc24ndCBvbiB0aGUgUEFUSC4gU29tZSBidWlsZCBzbGF2ZXMgZXhwbGljaXRseSB0ZXN0IHdpdGggc3VjaApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L1dpdGhvdXRQcm9qZWN0L1Byb2plY3RTdWJkaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvV2l0aG91dFByb2plY3QvUHJvamVjdFN1YmRpci9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTZlZWIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L1dpdGhvdXRQcm9qZWN0L1Byb2plY3RTdWJkaXIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMykKK3Byb2plY3QoUHJvamVjdFN1YmRpciBMQU5HVUFHRVMgTk9ORSkKKworc2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSBGZXRjaFdpdGhTdWJQcm9qZWN0IFlFUykKK21lc3NhZ2UoU1RBVFVTICJDb25maXJtYXRpb24gc3VicHJvamVjdCBoYXMgYmVlbiBhZGRlZCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvY291bnRBcmdzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L2NvdW50QXJncy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTQyYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L2NvdW50QXJncy5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK21lc3NhZ2UoU1RBVFVTICJOdW1iZXIgb2YgYXJndW1lbnRzOiAke0NNQUtFX0FSR0N9IikKK21hdGgoRVhQUiBsYXN0ICIke0NNQUtFX0FSR0N9IC0gMSIpCitmb3JlYWNoKG4gUkFOR0UgMyAke2xhc3R9KQorICBtZXNzYWdlKFNUQVRVUyAiQXJndW1lbnQgJHtufTogJyR7Q01BS0VfQVJHViR7bn19JyIpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9kdW1teUZpbGUudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L2R1bW15RmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExMmNlMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9kdW1teUZpbGUudHh0CkBAIC0wLDAgKzEgQEAKKyMgVGhpcyBmaWxlIGlzIHVzZWQgdG8gdmVyaWZ5IGZldGNoaW5nIGEgc2luZ2xlIGZpbGUgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOGNkYzAwYy4uNDQ0OWZmMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTIzLDcgKzIzLDcgQEAKICAgZW5kaWYoKQogICBmaWxlKEdMT0IgaW5kZXggJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9Ly5jbWFrZS9hcGkvdjEvcmVwbHkvaW5kZXgtKi5qc29uKQogICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS8ke2Nhc2V9LWNoZWNrLnB5IiAiJHtpbmRleH0iCisgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS8ke2Nhc2V9LWNoZWNrLnB5IiAiJHtpbmRleH0iICIke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0iCiAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAogICAgIE9VVFBVVF9WQVJJQUJMRSBvdXRwdXQKICAgICBFUlJPUl9WQVJJQUJMRSBvdXRwdXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWNoZWNrLnB5IGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItY2hlY2sucHkKaW5kZXggZGU2MjUzZi4uYjU2N2JmMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItY2hlY2sucHkKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItY2hlY2sucHkKQEAgLTEsMTIgKzEsMTggQEAKIGZyb20gY2hlY2tfaW5kZXggaW1wb3J0ICoKIAoraW1wb3J0IGpzb24KIGltcG9ydCBzeXMKIGltcG9ydCBvcwogCitkZWYgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKGZpbGVuYW1lKToKKyAgICBhYnNfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSwgImNvZGVtb2RlbC12Mi1kYXRhIiwgZmlsZW5hbWUpCisgICAgd2l0aCBvcGVuKGFic19maWxlbmFtZSwgInIiKSBhcyBmOgorICAgICAgICByZXR1cm4ganNvbi5sb2FkKGYpCisKIGRlZiBjaGVja19vYmplY3RzKG8sIGcpOgogICAgIGFzc2VydCBpc19saXN0KG8pCiAgICAgYXNzZXJ0IGxlbihvKSA9PSAxCi0gICAgY2hlY2tfaW5kZXhfb2JqZWN0KG9bMF0sICJjb2RlbW9kZWwiLCAyLCAwLCBjaGVja19vYmplY3RfY29kZW1vZGVsKGcpKQorICAgIGNoZWNrX2luZGV4X29iamVjdChvWzBdLCAiY29kZW1vZGVsIiwgMiwgMiwgY2hlY2tfb2JqZWN0X2NvZGVtb2RlbChnKSkKIAogZGVmIGNoZWNrX2JhY2t0cmFjZSh0LCBiLCBiYWNrdHJhY2UpOgogICAgIGJ0ZyA9IHRbImJhY2t0cmFjZUdyYXBoIl0KQEAgLTM2LDYgKzQyLDE2IEBACiAKICAgICBhc3NlcnQgYiBpcyBOb25lCiAKK2RlZiBjaGVja19iYWNrdHJhY2VzKHQsIGFjdHVhbCwgZXhwZWN0ZWQpOgorICAgIGFzc2VydCBpc19saXN0KGFjdHVhbCkKKyAgICBhc3NlcnQgaXNfbGlzdChleHBlY3RlZCkKKyAgICBhc3NlcnQgbGVuKGFjdHVhbCkgPT0gbGVuKGV4cGVjdGVkKQorCisgICAgaSA9IDAKKyAgICB3aGlsZSBpIDwgbGVuKGFjdHVhbCk6CisgICAgICAgIGNoZWNrX2JhY2t0cmFjZSh0LCBhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKQorICAgICAgICBpICs9IDEKKwogZGVmIGNoZWNrX2RpcmVjdG9yeShjKToKICAgICBkZWYgX2NoZWNrKGFjdHVhbCwgZXhwZWN0ZWQpOgogICAgICAgICBhc3NlcnQgaXNfZGljdChhY3R1YWwpCkBAIC0zOTgsNiArNDE0LDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ19leGNlcHRpb249bGFtYmRhIGU6ICJJbmNsdWRlIHBhdGg6ICVzIiAlIGVbInBhdGgiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9leGNlcHRpb249bGFtYmRhIGE6ICJJbmNsdWRlIHBhdGg6ICVzIiAlIGFbInBhdGgiXSkKIAorICAgICAgICAgICAgICAgIGlmICJwcmVjb21waWxlSGVhZGVycyIgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2tleXMuYXBwZW5kKCJwcmVjb21waWxlSGVhZGVycyIpCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIGNoZWNrX3ByZWNvbXBpbGVfaGVhZGVyKGFjdHVhbCwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzX2RpY3QoYWN0dWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfa2V5cyA9IFsiYmFja3RyYWNlIiwgImhlYWRlciJdCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19iYWNrdHJhY2Uob2JqLCBhY3R1YWxbImJhY2t0cmFjZSJdLCBleHBlY3RlZFsiYmFja3RyYWNlIl0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBzb3J0ZWQoYWN0dWFsLmtleXMoKSkgPT0gc29ydGVkKGV4cGVjdGVkX2tleXMpCisKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfbGlzdF9tYXRjaChsYW1iZGEgYSwgZTogbWF0Y2hlcyhhWyJoZWFkZXIiXSwgZVsiaGVhZGVyIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbFsicHJlY29tcGlsZUhlYWRlcnMiXSwgZXhwZWN0ZWRbInByZWNvbXBpbGVIZWFkZXJzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2s9Y2hlY2tfcHJlY29tcGlsZV9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZXhjZXB0aW9uPWxhbWJkYSBhLCBlOiAiUHJlY29tcGlsZSBoZWFkZXI6ICVzIiAlIGFbImhlYWRlciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdfZXhjZXB0aW9uPWxhbWJkYSBlOiAiUHJlY29tcGlsZSBoZWFkZXI6ICVzIiAlIGVbImhlYWRlciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2V4Y2VwdGlvbj1sYW1iZGEgYTogIlByZWNvbXBpbGUgaGVhZGVyOiAlcyIgJSBhWyJoZWFkZXIiXSkKKworICAgICAgICAgICAgICAgIGlmICJsYW5ndWFnZVN0YW5kYXJkIiBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfa2V5cy5hcHBlbmQoImxhbmd1YWdlU3RhbmRhcmQiKQorCisgICAgICAgICAgICAgICAgICAgIGRlZiBjaGVja19sYW5ndWFnZV9zdGFuZGFyZChhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc19kaWN0KGFjdHVhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2tleXMgPSBbImJhY2t0cmFjZXMiLCAic3RhbmRhcmQiXQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGFjdHVhbFsic3RhbmRhcmQiXSA9PSBleHBlY3RlZFsic3RhbmRhcmQiXQorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYmFja3RyYWNlcyhvYmosIGFjdHVhbFsiYmFja3RyYWNlcyJdLCBleHBlY3RlZFsiYmFja3RyYWNlcyJdKQorCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc29ydGVkKGFjdHVhbC5rZXlzKCkpID09IHNvcnRlZChleHBlY3RlZF9rZXlzKQorCisgICAgICAgICAgICAgICAgICAgIGNoZWNrX2xhbmd1YWdlX3N0YW5kYXJkKGFjdHVhbFsibGFuZ3VhZ2VTdGFuZGFyZCJdLCBleHBlY3RlZFsibGFuZ3VhZ2VTdGFuZGFyZCJdKQorCiAgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRbImRlZmluZXMiXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfa2V5cy5hcHBlbmQoImRlZmluZXMiKQogCkBAIC00NzEsMTU0ICs1MTcsMTUgQEAKIAogZGVmIGdlbl9jaGVja19kaXJlY3RvcmllcyhjLCBnKToKICAgICBleHBlY3RlZCA9IFsKLSAgICAgICAgewotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6IE5vbmUsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeYWxpYXMkIiwKLSAgICAgICAgICAgICAgICAiXmN1c3RvbSQiLAotICAgICAgICAgICAgICAgICJeY3h4JCIsCi0gICAgICAgICAgICAgICAgIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgICAgICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICAgICAiXmRpciQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeaW50ZXJmYWNlX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IFRydWUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJjaGlsZFNvdXJjZXMiOiBOb25lLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICJeY3VzdG9tX2V4ZTo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCi0gICAgICAgICAgICAgICAgIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAotICAgICAgICAgICAgImhhc0luc3RhbGxSdWxlIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEzIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IFRydWUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmRpciQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5kaXIkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXmRpci9kaXIkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogTm9uZSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl5kaXIvZGlyJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmRpci9kaXIkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXmRpciQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogTm9uZSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL3RvcC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvYWxpYXMuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2N1c3RvbS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJkaXJlY3Rvcmllcy9pbXBvcnRlZC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvb2JqZWN0Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJkaXJlY3Rvcmllcy9kaXIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2Rpcl9kaXIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2V4dGVybmFsLmpzb24iKSwKICAgICBdCiAKICAgICBpZiBtYXRjaGVzKGdbIm5hbWUiXSwgIl5WaXN1YWwgU3R1ZGlvICIpOgpAQCAtNjQ2LDQ0MzAgKzU1Myw3NiBAQAogCiBkZWYgZ2VuX2NoZWNrX3RhcmdldHMoYywgZywgaW5Tb3VyY2UpOgogICAgIGV4cGVjdGVkID0gWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKLSAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImludGVyZmFjZV9leGUiLAotICAgICAgICAgICAgImlkIjogIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiaW50ZXJmYWNlX2V4ZV9FWFBPUlRTIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXm15X2ludGVyZmFjZV9leGVcXC5teWV4ZSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLm15ZXhlJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmxpYi9teV9pbnRlcmZhY2VfZXhlXFwuaW1wJCIsCi0gICAgICAgICAgICAgICAgICAgICJfYWl4RXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/bXlfaW50ZXJmYWNlX2V4ZVxcLihkbGxcXC5hfGxpYikkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJTVEFUSUNfTElCUkFSWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y19saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2NfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IHsKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJeY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfc2hhcmVkX2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiY19zaGFyZWRfbGliX0VYUE9SVFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jX3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2Nfc2hhcmVkX2xpYlxcLihkbGxcXC5hfGxpYikkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX3NoYXJlZF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0JCQkJCSJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY19zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX3NoYXJlZF9leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IFRydWUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX3N0YXRpY19saWIiLAotICAgICAgICAgICAgImlkIjogIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2Nfc3RhdGljX2xpYlxcLihhfGxpYikkIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y19zdGF0aWNfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IHsKLSAgICAgICAgICAgICAgICAibHRvIjogVHJ1ZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfc3RhdGljX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNCwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX3N0YXRpY19leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc3RhdGljX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN4eCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDQsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y3h4X2xpYlxcLihhfGxpYikkIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2N4eF9saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogewotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKLQkJCQkJCQkiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCQkJCQkJCQl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiAiYmluIiwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jeHhfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN4eCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiB7Ci0gICAgICAgICAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAotICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMzcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICJUYXJnZXRMaW5rT3B0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAicm9sZSIgOiAiZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19vcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICIuKlRhcmdldExpbmtEaXJcXFwiPyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgInJvbGUiIDogImxpYnJhcnlQYXRoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIi4qY3h4X2xpYi4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyb2xlIiA6ICJsaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3NoYXJlZF9saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogImN4eF9zaGFyZWRfbGliX0VYUE9SVFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGlifGN5Zyk/Y3h4X3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3NoYXJlZF9saWJcXC4oZGxsXFwuYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN4eF9zaGFyZWRfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3NoYXJlZF9leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiU1RBVElDX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2N4eF9zdGF0aWNfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3N0YXRpY19saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogewotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X3N0YXRpY19leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhdGljX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5hbGlhcyQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX2FsaWFzX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN4eF9hbGlhc19leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfYWxpYXNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmFsaWFzLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9hbGlhc19leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5hbGlhcyQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY19vYmplY3RfbGliIiwKLSAgICAgICAgICAgICJpZCI6ICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJPQkpFQ1RfTElCUkFSWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX29iamVjdF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19vYmplY3RfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiB7Ci0gICAgICAgICAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAotICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IEFkZCBhIGJhY2t0cmFjZSBoZXJlIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICMgWW91J2xsIGtub3cgd2hlbiBpdCdzIGF2YWlsYWJsZSwgYmVjYXVzZSB0aGlzIHRlc3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGZhaWwuCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X29iamVjdF9saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiT0JKRUNUX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0Ly4qL2VtcHR5KFxcLmN4eCk/XFwubyhiaik/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X29iamVjdF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvLiovZW1wdHkoXFwuY3h4KT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jeHgpP1xcLm8oYmopPyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfb2JqZWN0X2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogewotICAgICAgICAgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKLSAgICAgICAgICAgICAgICAiZGVzdGluYXRpb25zIjogWwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbnN0YWxsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQWRkIGEgYmFja3RyYWNlIGhlcmUgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgIyBZb3UnbGwga25vdyB3aGVuIGl0J3MgYXZhaWxhYmxlLCBiZWNhdXNlIHRoaXMgdGVzdCB3aWxsCi0gICAgICAgICAgICAgICAgICAgICMgZmFpbC4KLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX3NoYXJlZF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9zaGFyZWRfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX3N0YXRpY19leGUiLAotICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3N0YXRpY19leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTgsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDIzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAyMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN1c3RvbV90Z3QiLAotICAgICAgICAgICAgImlkIjogIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL2N1c3RvbV90Z3QkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfY3VzdG9tX3RhcmdldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkLyhjdXN0b20vKT9DTWFrZUZpbGVzLyhbMC05YS1mXSsvKT9jdXN0b21fdGd0XFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9jdXN0b21fdGd0JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC8oY3VzdG9tLyk/Q01ha2VGaWxlcy8oWzAtOWEtZl0rLyk/Y3VzdG9tX3RndFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfY3VzdG9tX3RhcmdldCIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN1c3RvbV9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNCwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jdXN0b21fZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN1c3RvbS8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jdXN0b21fZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN1c3RvbS8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jdXN0b21fZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2RlcGVuZGVuY2llcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZ2VuZXJhdGVkX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkV4dGVybmFsIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL2VtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL2dlbmVyYXRlZFxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3NvdXJjZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc1N5c3RlbSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzU3lzdGVtIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiRU1QVFlfQz0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJTUkNfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkdFTkVSQVRFRF9FWEU9MSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiVEdUX0RVTU1ZIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlNSQ19DT01QSUxFX09QVElPTlNfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzU3lzdGVtIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiR0VORVJBVEVEX0VYRT0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJUR1RfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmdlbmVyYXRlZF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9nZW5lcmF0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Z2VuZXJhdGVkX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja190b3AuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvaW50ZXJmYWNlX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX3NoYXJlZF9saWIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY19zaGFyZWRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2Nfc3RhdGljX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX3N0YXRpY19leGUuanNvbiIpLAorCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9hbGxfYnVpbGRfY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL3plcm9fY2hlY2tfY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9saWIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc3RhbmRhcmRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zaGFyZWRfbGliLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zaGFyZWRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zdGF0aWNfbGliLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zdGF0aWNfZXhlLmpzb24iKSwKKworICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvYWxsX2J1aWxkX2FsaWFzLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL3plcm9fY2hlY2tfYWxpYXMuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY19hbGlhc19leGUuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X2FsaWFzX2V4ZS5qc29uIiksCisKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9vYmplY3QuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja19vYmplY3QuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY19vYmplY3RfbGliLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2Nfb2JqZWN0X2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfb2JqZWN0X2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfb2JqZWN0X2V4ZS5qc29uIiksCisKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9pbXBvcnRlZC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy96ZXJvX2NoZWNrX2ltcG9ydGVkLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2xpbmtfaW1wb3J0ZWRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvbGlua19pbXBvcnRlZF9vYmplY3RfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZS5qc29uIiksCisKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9jdXN0b20uanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja19jdXN0b20uanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3VzdG9tX3RndC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jdXN0b21fZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9leHRlcm5hbC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy96ZXJvX2NoZWNrX2V4dGVybmFsLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2dlbmVyYXRlZF9leGUuanNvbiIpLAogICAgIF0KIAorICAgIGlmIGN4eF9jb21waWxlcl9pZCBpbiBbJ0NsYW5nJywgJ0FwcGxlQ2xhbmcnLCAnR05VJywgJ0ludGVsJywgJ01TVkMnLCAnRW1iYXJjYWRlcm8nXSBhbmQgZ1sibmFtZSJdICE9ICJYY29kZSI6CisgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgaWYgZVsibmFtZSJdID09ICJjeHhfZXhlIjoKKyAgICAgICAgICAgICAgICBpZiBtYXRjaGVzKGdbIm5hbWUiXSwgIl4oVmlzdWFsIFN0dWRpbyB8TmluamEgTXVsdGktQ29uZmlnKSIpOgorICAgICAgICAgICAgICAgICAgICBwcmVjb21waWxlX2hlYWRlcl9kYXRhID0gcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlcl9tdWx0aWdlbi5qc29uIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiAnOycgaW4gb3MuZW52aXJvbi5nZXQoIkNNQUtFX09TWF9BUkNISVRFQ1RVUkVTIiwgIiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJlY29tcGlsZV9oZWFkZXJfZGF0YSA9IHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXJfMmFyY2guanNvbiIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVjb21waWxlX2hlYWRlcl9kYXRhID0gcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlci5qc29uIikKKyAgICAgICAgICAgICAgICBlWyJjb21waWxlR3JvdXBzIl0gPSBwcmVjb21waWxlX2hlYWRlcl9kYXRhWyJjb21waWxlR3JvdXBzIl0KKyAgICAgICAgICAgICAgICBlWyJzb3VyY2VzIl0gPSBwcmVjb21waWxlX2hlYWRlcl9kYXRhWyJzb3VyY2VzIl0KKyAgICAgICAgICAgICAgICBlWyJzb3VyY2VHcm91cHMiXSA9IHByZWNvbXBpbGVfaGVhZGVyX2RhdGFbInNvdXJjZUdyb3VwcyJdCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocmVwbHlfZGlyLCAiLi4iLCAiLi4iLCAiLi4iLCAiLi4iLCAiY3h4IiwgImN4eF9zdGRfMTEudHh0IikpOgorICAgICAgICBmb3IgZSBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgIGlmIGVbIm5hbWUiXSA9PSAiY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGUiOgorICAgICAgICAgICAgICAgIGxhbmd1YWdlX3N0YW5kYXJkX2RhdGEgPSByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGVfbGFuZ3VhZ2VzdGFuZGFyZC5qc29uIikKKyAgICAgICAgICAgICAgICBlWyJjb21waWxlR3JvdXBzIl1bMF1bImxhbmd1YWdlU3RhbmRhcmQiXSA9IGxhbmd1YWdlX3N0YW5kYXJkX2RhdGFbImxhbmd1YWdlU3RhbmRhcmQiXQorCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihyZXBseV9kaXIsICIuLiIsICIuLiIsICIuLiIsICIuLiIsICJpcG9fZW5hYmxlZC50eHQiKSk6CiAgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgdHJ5OgpAQCAtNTE2NCwxMjYgKzcxNywxMyBAQAogCiBkZWYgZ2VuX2NoZWNrX3Byb2plY3RzKGMsIGcpOgogICAgIGV4cGVjdGVkID0gWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInBhcmVudE5hbWUiOiBOb25lLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBbCi0gICAgICAgICAgICAgICAgIkFsaWFzIiwKLSAgICAgICAgICAgICAgICAiQ3VzdG9tIiwKLSAgICAgICAgICAgICAgICAiQ3h4IiwKLSAgICAgICAgICAgICAgICAiSW1wb3J0ZWQiLAotICAgICAgICAgICAgICAgICJPYmplY3QiLAotICAgICAgICAgICAgICAgICJFeHRlcm5hbCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5cXC4kIiwKLSAgICAgICAgICAgICAgICAiXmRpciQiLAotICAgICAgICAgICAgICAgICJeZGlyL2RpciQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJjaGlsZE5hbWVzIjogTm9uZSwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeY3h4JCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5hbGlhcyQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5vYmplY3QkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAiY2hpbGROYW1lcyI6IE5vbmUsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXmN1c3RvbSQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCi0gICAgICAgICAgICAgICAgIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJjaGlsZE5hbWVzIjogTm9uZSwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgICAgICJeZ2VuZXJhdGVkX2V4ZTo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJwcm9qZWN0cy9jb2RlbW9kZWwtdjIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInByb2plY3RzL2N4eC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvYWxpYXMuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInByb2plY3RzL29iamVjdC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvaW1wb3J0ZWQuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInByb2plY3RzL2N1c3RvbS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvZXh0ZXJuYWwuanNvbiIpLAogICAgIF0KIAogICAgIGlmIG1hdGNoZXMoZ1sibmFtZSJdLCAiXlZpc3VhbCBTdHVkaW8gIik6CkBAIC01MzM3LDYgKzc3Nyw3IEBACiAgICAgICAgICAgICBjaGVja19vYmplY3RfY29kZW1vZGVsX2NvbmZpZ3VyYXRpb24oYywgZywgaW5Tb3VyY2UpCiAgICAgcmV0dXJuIF9jaGVjawogCitjeHhfY29tcGlsZXJfaWQgPSBzeXMuYXJndlsyXQogYXNzZXJ0IGlzX2RpY3QoaW5kZXgpCiBhc3NlcnQgc29ydGVkKGluZGV4LmtleXMoKSkgPT0gWyJjbWFrZSIsICJvYmplY3RzIiwgInJlcGx5Il0KIGNoZWNrX29iamVjdHMoaW5kZXhbIm9iamVjdHMiXSwgaW5kZXhbImNtYWtlIl1bImdlbmVyYXRvciJdKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9hbGlhcy5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9hbGlhcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMGM0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2FsaWFzLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgImJ1aWxkIjogIl5hbGlhcyQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBudWxsLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICJeY3h4X2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIKKyAgICBdLAorICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9jdXN0b20uanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvY3VzdG9tLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvY3VzdG9tLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCisgICAgImNoaWxkU291cmNlcyI6IG51bGwsCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAiXmN1c3RvbV90Z3Q6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2N4eC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9jeHguanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTFiNmViCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9jeHguanNvbgpAQCAtMCwwICsxLDIxIEBACit7CisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogbnVsbCwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGFuZGFyZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIgorICAgIF0sCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9kaXIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZGlyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiZDQzYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZGlyLmpzb24KQEAgLTAsMCArMSwxMiBAQAoreworICAgICJzb3VyY2UiOiAiXmRpciQiLAorICAgICJidWlsZCI6ICJeZGlyJCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCisgICAgImNoaWxkU291cmNlcyI6IFsKKyAgICAgICAgIl5kaXIvZGlyJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBudWxsLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZGlyX2Rpci5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9kaXJfZGlyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczN2FkNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZGlyX2Rpci5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAic291cmNlIjogIl5kaXIvZGlyJCIsCisgICAgImJ1aWxkIjogIl5kaXIvZGlyJCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeZGlyJCIsCisgICAgImNoaWxkU291cmNlcyI6IG51bGwsCisgICAgInRhcmdldElkcyI6IG51bGwsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9leHRlcm5hbC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9leHRlcm5hbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMWUzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2V4dGVybmFsLmpzb24KQEAgLTAsMCArMSwxNCBAQAoreworICAgICJzb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBudWxsLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAorICAgICAgICAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIgorICAgIF0sCisgICAgInByb2plY3ROYW1lIjogIkV4dGVybmFsIiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2ltcG9ydGVkLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2ltcG9ydGVkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxYjc5YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvaW1wb3J0ZWQuanNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCisgICAgImNoaWxkU291cmNlcyI6IG51bGwsCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9zaGFyZWRfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvb2JqZWN0Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL29iamVjdC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjQ3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL29iamVjdC5qc29uCkBAIC0wLDAgKzEsMTcgQEAKK3sKKyAgICAic291cmNlIjogIl5vYmplY3QkIiwKKyAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBudWxsLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIgorICAgIF0sCisgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMyIsCisgICAgImhhc0luc3RhbGxSdWxlIjogdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy90b3AuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvdG9wLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0NDk1MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvdG9wLmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInBhcmVudFNvdXJjZSI6IG51bGwsCisgICAgImNoaWxkU291cmNlcyI6IFsKKyAgICAgICAgIl5hbGlhcyQiLAorICAgICAgICAiXmN1c3RvbSQiLAorICAgICAgICAiXmN4eCQiLAorICAgICAgICAiXmltcG9ydGVkJCIsCisgICAgICAgICJeb2JqZWN0JCIsCisgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgICAgICJeZGlyJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc2hhcmVkX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3N0YXRpY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc3RhdGljX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeaW50ZXJmYWNlX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIKKyAgICBdLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IHRydWUKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvYWxpYXMuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvYWxpYXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRlNjBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9hbGlhcy5qc29uCkBAIC0wLDAgKzEsMTQgQEAKK3sKKyAgICAibmFtZSI6ICJBbGlhcyIsCisgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAiY2hpbGROYW1lcyI6IG51bGwsCisgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCisgICAgICAgICJeYWxpYXMkIgorICAgIF0sCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY29kZW1vZGVsLXYyLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2NvZGVtb2RlbC12Mi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYWFjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2NvZGVtb2RlbC12Mi5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAibmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJwYXJlbnROYW1lIjogbnVsbCwKKyAgICAiY2hpbGROYW1lcyI6IFsKKyAgICAgICAgIkFsaWFzIiwKKyAgICAgICAgIkN1c3RvbSIsCisgICAgICAgICJDeHgiLAorICAgICAgICAiSW1wb3J0ZWQiLAorICAgICAgICAiT2JqZWN0IiwKKyAgICAgICAgIkV4dGVybmFsIgorICAgIF0sCisgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCisgICAgICAgICJeXFwuJCIsCisgICAgICAgICJeZGlyJCIsCisgICAgICAgICJeZGlyL2RpciQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeaW50ZXJmYWNlX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3NoYXJlZF9saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc2hhcmVkX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3N0YXRpY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiCisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jdXN0b20uanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY3VzdG9tLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlYjcyNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY3VzdG9tLmpzb24KQEAgLTAsMCArMSwxNCBAQAoreworICAgICJuYW1lIjogIkN1c3RvbSIsCisgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAiY2hpbGROYW1lcyI6IG51bGwsCisgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCisgICAgICAgICJeY3VzdG9tJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY3h4Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2N4eC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2M2U4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2N4eC5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgICAibmFtZSI6ICJDeHgiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXmN4eCQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGFuZGFyZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zaGFyZWRfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGF0aWNfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvZXh0ZXJuYWwuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvZXh0ZXJuYWwuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzlhZmZmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9leHRlcm5hbC5qc29uCkBAIC0wLDAgKzEsMTMgQEAKK3sKKyAgICAibmFtZSI6ICJFeHRlcm5hbCIsCisgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAiY2hpbGROYW1lcyI6IG51bGwsCisgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCisgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAorICAgICAgICAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvaW1wb3J0ZWQuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvaW1wb3J0ZWQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQwYjcyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9pbXBvcnRlZC5qc29uCkBAIC0wLDAgKzEsMTcgQEAKK3sKKyAgICAibmFtZSI6ICJJbXBvcnRlZCIsCisgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAiY2hpbGROYW1lcyI6IG51bGwsCisgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCisgICAgICAgICJeaW1wb3J0ZWQkIgorICAgIF0sCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiCisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9vYmplY3QuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvb2JqZWN0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5ZjRlYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvb2JqZWN0Lmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJuYW1lIjogIk9iamVjdCIsCisgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAiY2hpbGROYW1lcyI6IG51bGwsCisgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCisgICAgICAgICJeb2JqZWN0JCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jX29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeY3h4X29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmN4eF9vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfYWxpYXMuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfYWxpYXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWJmNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9hbGlhcy5qc29uCkBAIC0wLDAgKzEsODMgQEAKK3sKKyAgICAibmFtZSI6ICJBTExfQlVJTEQiLAorICAgICJpZCI6ICJeQUxMX0JVSUxEOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5hbGlhcyQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBudWxsLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeYWxpYXMkIiwKKyAgICAic291cmNlIjogIl5hbGlhcyQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9jdXN0b20uanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3VzdG9tLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVmZjY4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3VzdG9tLmpzb24KQEAgLTAsMCArMSw3OSBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDdXN0b20iLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKKyAgICAic291cmNlIjogIl5jdXN0b20kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2N4eC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9jeHguanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQ0M2IxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9jeHguanNvbgpAQCAtMCwwICsxLDEwNyBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YW5kYXJkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGF0aWNfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2V4dGVybmFsLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2V4dGVybmFsLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3MzM1YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfZXh0ZXJuYWwuanNvbgpAQCAtMCwwICsxLDc5IEBACit7CisgICAgIm5hbWUiOiAiQUxMX0JVSUxEIiwKKyAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkJCIsCisgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2ltcG9ydGVkLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2ltcG9ydGVkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlNWIxNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfaW1wb3J0ZWQuanNvbgpAQCAtMCwwICsxLDk1IEBACit7CisgICAgIm5hbWUiOiAiQUxMX0JVSUxEIiwKKyAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9vYmplY3QuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfb2JqZWN0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4ODk5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfb2JqZWN0Lmpzb24KQEAgLTAsMCArMSw5MSBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKKyAgICAic291cmNlIjogIl5vYmplY3QkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX3RvcC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJkNzUwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbgpAQCAtMCwwICsxLDE4NyBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGFuZGFyZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfYWxpYXNfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19hbGlhc19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzdjOTRkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfYWxpYXNfZXhlLmpzb24KQEAgLTAsMCArMSwxMDcgQEAKK3sKKyAgICAibmFtZSI6ICJjX2FsaWFzX2V4ZSIsCisgICAgImlkIjogIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5hbGlhcyQiLAorICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWY3NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfZXhlLmpzb24KQEAgLTAsMCArMSwxNDMgQEAKK3sKKyAgICAibmFtZSI6ICJjX2V4ZSIsCisgICAgImlkIjogIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmNfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMTk2MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2xpYi5qc29uCkBAIC0wLDAgKzEsMTA4IEBACit7CisgICAgIm5hbWUiOiAiY19saWIiLAorICAgICJpZCI6ICJeY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y19saWJcXC4oYXxsaWIpJCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2NfbGliXFwuKGF8bGliKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IHsKKyAgICAgICAgImx0byI6IG51bGwKKyAgICB9LAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfb2JqZWN0X2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfb2JqZWN0X2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWFjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19vYmplY3RfZXhlLmpzb24KQEAgLTAsMCArMSwxNTQgQEAKK3sKKyAgICAibmFtZSI6ICJjX29iamVjdF9leGUiLAorICAgICJpZCI6ICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA3LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0Ly4qL2VtcHR5KFxcLmMpP1xcLm8oYmopPyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmNfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX29iamVjdF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImluc3RhbGwiOiB7CisgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKKyAgICAgICAgImRlc3RpbmF0aW9ucyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA3LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19vYmplY3RfbGliLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19vYmplY3RfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhMjBkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX29iamVjdF9saWIuanNvbgpAQCAtMCwwICsxLDgyIEBACit7CisgICAgIm5hbWUiOiAiY19vYmplY3RfbGliIiwKKyAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCisgICAgInR5cGUiOiAiT0JKRUNUX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAorICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDAxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zaGFyZWRfZXhlLmpzb24KQEAgLTAsMCArMSwxNDMgQEAKK3sKKyAgICAibmFtZSI6ICJjX3NoYXJlZF9leGUiLAorICAgICJpZCI6ICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmNfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zaGFyZWRfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogdHJ1ZSwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX3NoYXJlZF9saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmE4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zaGFyZWRfbGliLmpzb24KQEAgLTAsMCArMSwxMjMgQEAKK3sKKyAgICAibmFtZSI6ICJjX3NoYXJlZF9saWIiLAorICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJTSEFSRURfTElCUkFSWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJjX3NoYXJlZF9saWJfRVhQT1JUUyIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jX3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2Nfc2hhcmVkX2xpYlxcLihkbGxcXC5hfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IHRydWUsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc3RhdGljX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc3RhdGljX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDIyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zdGF0aWNfZXhlLmpzb24KQEAgLTAsMCArMSwxNDMgQEAKK3sKKyAgICAibmFtZSI6ICJjX3N0YXRpY19leGUiLAorICAgICJpZCI6ICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDE0LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jX3N0YXRpY19leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc3RhdGljX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3N0YXRpY19saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3N0YXRpY19saWIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjYzODk3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc3RhdGljX2xpYi5qc29uCkBAIC0wLDAgKzEsMTA4IEBACit7CisgICAgIm5hbWUiOiAiY19zdGF0aWNfbGliIiwKKyAgICAiaWQiOiAiXmNfc3RhdGljX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiU1RBVElDX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2Nfc3RhdGljX2xpYlxcLihhfGxpYikkIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y19zdGF0aWNfbGliXFwuKGF8bGliKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IHsKKyAgICAgICAgImx0byI6IHRydWUKKyAgICB9LAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N1c3RvbV9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jdXN0b21fZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzMDFlOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jdXN0b21fZXhlLmpzb24KQEAgLTAsMCArMSwxMDcgQEAKK3sKKyAgICAibmFtZSI6ICJjdXN0b21fZXhlIiwKKyAgICAiaWQiOiAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDdXN0b20iLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA0LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDQsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3VzdG9tX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jdXN0b20vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3VzdG9tX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jdXN0b20vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3VzdG9tX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKKyAgICAic291cmNlIjogIl5jdXN0b20kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3VzdG9tX3RndDo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2RlcGVuZGVuY2llcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jdXN0b21fdGd0Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3VzdG9tX3RndC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MTA2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3VzdG9tX3RndC5qc29uCkBAIC0wLDAgKzEsODcgQEAKK3sKKyAgICAibmFtZSI6ICJjdXN0b21fdGd0IiwKKyAgICAiaWQiOiAiXmN1c3RvbV90Z3Q6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDdXN0b20iLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL2N1c3RvbV90Z3QkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9jdXN0b21fdGFyZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC8oY3VzdG9tLyk/Q01ha2VGaWxlcy8oWzAtOWEtZl0rLyk/Y3VzdG9tX3RndFxcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9jdXN0b21fdGd0JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvKGN1c3RvbS8pP0NNYWtlRmlsZXMvKFswLTlhLWZdKy8pP2N1c3RvbV90Z3RcXC5ydWxlJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBudWxsLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2N1c3RvbV90YXJnZXQiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2FsaWFzX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9hbGlhc19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdmMjUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9hbGlhc19leGUuanNvbgpAQCAtMCwwICsxLDEwNyBAQAoreworICAgICJuYW1lIjogImN4eF9hbGlhc19leGUiLAorICAgICJpZCI6ICJeY3h4X2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X2FsaWFzX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfYWxpYXNfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmFsaWFzLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9hbGlhc19leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeYWxpYXMkIiwKKyAgICAic291cmNlIjogIl5hbGlhcyQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhYjU1YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlLmpzb24KQEAgLTAsMCArMSwyMzIgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfZXhlIiwKKyAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAicHJlY29tcGlsZUhlYWRlcnMiOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaGVhZGVyIjogIi4qZW1wdHlcXC5oJCIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMjEsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9wcmVjb21waWxlX2hlYWRlcnMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX29wdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiAiYmluIiwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IHsKKyAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAorICAgICAgICAiZGVzdGluYXRpb25zIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDM3LAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5zdGFsbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICJUYXJnZXRMaW5rT3B0aW9ucyIsCisgICAgICAgICAgICAgICAgInJvbGUiIDogImZsYWdzIiwKKyAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTgsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19vcHRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIi4qVGFyZ2V0TGlua0RpclxcXCI/JCIsCisgICAgICAgICAgICAgICAgInJvbGUiIDogImxpYnJhcnlQYXRoIiwKKyAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTksCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19kaXJlY3RvcmllcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICIuKmN4eF9saWIuKiIsCisgICAgICAgICAgICAgICAgInJvbGUiIDogImxpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTBmNzcwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlci5qc29uCkBAIC0wLDAgKzEsMTYxIEBACit7CisgICJjb21waWxlR3JvdXBzIjogWworICAgIHsKKyAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIgorICAgICAgXSwKKyAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAicHJlY29tcGlsZUhlYWRlcnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaGVhZGVyIjogIi4qZW1wdHlcXC5oJCIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMjEsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9wcmVjb21waWxlX2hlYWRlcnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZnJhZ21lbnQiOiAiVGFyZ2V0Q29tcGlsZU9wdGlvbnMiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDE3LAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICBdLAorICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICJwcmVjb21waWxlSGVhZGVycyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJoZWFkZXIiOiAiLiplbXB0eVxcLmgkIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAyMSwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmcmFnbWVudCI6ICJUYXJnZXRDb21waWxlT3B0aW9ucyIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMTcsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX29wdGlvbnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIF0sCisgICJzb3VyY2VzIjogWworICAgIHsKKyAgICAgICJwYXRoIjogIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgInBhdGgiOiAiLiovY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJQcmVjb21waWxlIEhlYWRlciBGaWxlIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0KKyAgXSwKKyAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIiwKKyAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQcmVjb21waWxlIEhlYWRlciBGaWxlIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiCisgICAgICBdCisgICAgfQorICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZV9wcmVjb21waWxlaGVhZGVyXzJhcmNoLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZV9wcmVjb21waWxlaGVhZGVyXzJhcmNoLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1NTc0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXJfMmFyY2guanNvbgpAQCAtMCwwICsxLDIzNyBAQAoreworICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICB7CisgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIKKyAgICAgIF0sCisgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgInByZWNvbXBpbGVIZWFkZXJzIjogWworICAgICAgICB7CisgICAgICAgICAgImhlYWRlciI6ICIuKmVtcHR5XFwuaCQiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDIxLAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdLAorICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgImZyYWdtZW50IjogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAxNywKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICIuKmNtYWtlX3BjaChfW14uXSspPyhcXC5oeHgpP1xcLmN4eCQiCisgICAgICBdLAorICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICJwcmVjb21waWxlSGVhZGVycyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJoZWFkZXIiOiAiLiplbXB0eVxcLmgkIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAyMSwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmcmFnbWVudCI6ICJUYXJnZXRDb21waWxlT3B0aW9ucyIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMTcsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX29wdGlvbnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgIF0sCisgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgInByZWNvbXBpbGVIZWFkZXJzIjogWworICAgICAgICB7CisgICAgICAgICAgImhlYWRlciI6ICIuKmVtcHR5XFwuaCQiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDIxLAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdLAorICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgImZyYWdtZW50IjogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAxNywKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXQorICAgIH0KKyAgXSwKKyAgInNvdXJjZXMiOiBbCisgICAgeworICAgICAgInBhdGgiOiAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICIuKmNtYWtlX3BjaChfW14uXSspPyhcXC5oeHgpP1xcLmN4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJwYXRoIjogIi4qL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJwYXRoIjogIi4qL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIF0sCisgICJzb3VyY2VHcm91cHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIsCisgICAgICAgICIuKmNtYWtlX3BjaChfW14uXSspPyhcXC5oeHgpP1xcLmN4eCQiLAorICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlByZWNvbXBpbGUgSGVhZGVyIEZpbGUiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiLiovY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIsCisgICAgICAgICIuKi9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIgorICAgICAgXQorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlcl9tdWx0aWdlbi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlcl9tdWx0aWdlbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNmZmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZV9wcmVjb21waWxlaGVhZGVyX211bHRpZ2VuLmpzb24KQEAgLTAsMCArMSwyMDYgQEAKK3sKKyAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgeworICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICIuKmNtYWtlX3BjaChfW14uXSspPyhcXC5oeHgpP1xcLmN4eCQiCisgICAgICBdLAorICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICJwcmVjb21waWxlSGVhZGVycyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJoZWFkZXIiOiAiLiplbXB0eVxcLmgkIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAyMSwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmcmFnbWVudCI6ICJUYXJnZXRDb21waWxlT3B0aW9ucyIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMTcsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX29wdGlvbnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgIF0sCisgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgInByZWNvbXBpbGVIZWFkZXJzIjogWworICAgICAgICB7CisgICAgICAgICAgImhlYWRlciI6ICIuKmVtcHR5XFwuaCQiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDIxLAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdLAorICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgImZyYWdtZW50IjogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAxNywKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXQorICAgIH0KKyAgXSwKKyAgInNvdXJjZXMiOiBbCisgICAgeworICAgICAgInBhdGgiOiAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICIuKi9EZWJ1Zy9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlByZWNvbXBpbGUgSGVhZGVyIEZpbGUiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICIuKi9SZWxlYXNlL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJwYXRoIjogIi4qL01pblNpemVSZWwvY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJQcmVjb21waWxlIEhlYWRlciBGaWxlIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgInBhdGgiOiAiLiovUmVsV2l0aERlYkluZm8vY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJQcmVjb21waWxlIEhlYWRlciBGaWxlIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0KKyAgXSwKKyAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIiwKKyAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQcmVjb21waWxlIEhlYWRlciBGaWxlIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qL0RlYnVnL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgICAiLiovUmVsZWFzZS9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIiwKKyAgICAgICAgIi4qL01pblNpemVSZWwvY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIsCisgICAgICAgICIuKi9SZWxXaXRoRGViSW5mby9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIgorICAgICAgXQorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhYzA4MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfbGliLmpzb24KQEAgLTAsMCArMSw4NCBAQAoreworICAgICJuYW1lIjogImN4eF9saWIiLAorICAgICJpZCI6ICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgInR5cGUiOiAiU1RBVElDX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA0LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2N4eF9saWJcXC4oYXxsaWIpJCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGliKT9jeHhfbGliXFwuKGF8bGliKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IHsKKyAgICAgICAgImx0byI6IG51bGwKKyAgICB9LAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9vYmplY3RfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X29iamVjdF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTljOTFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9vYmplY3RfZXhlLmpzb24KQEAgLTAsMCArMSwxNTQgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfb2JqZWN0X2V4ZSIsCisgICAgImlkIjogIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jeHgpP1xcLm8oYmopPyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiT2JqZWN0IExpYnJhcmllcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiT2JqZWN0IExpYnJhcmllcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvLiovZW1wdHkoXFwuY3h4KT9cXC5vKGJqKT8kIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X29iamVjdF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImluc3RhbGwiOiB7CisgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKKyAgICAgICAgImRlc3RpbmF0aW9ucyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfb2JqZWN0X2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9vYmplY3RfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5OWY3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfb2JqZWN0X2xpYi5qc29uCkBAIC0wLDAgKzEsODIgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfb2JqZWN0X2xpYiIsCisgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCisgICAgInR5cGUiOiAiT0JKRUNUX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvLiovZW1wdHkoXFwuY3h4KT9cXC5vKGJqKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAorICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zaGFyZWRfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3NoYXJlZF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDIxYzhmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zaGFyZWRfZXhlLmpzb24KQEAgLTAsMCArMSwxMDcgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfc2hhcmVkX2V4ZSIsCisgICAgImlkIjogIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAxMCwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jeHhfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9zaGFyZWRfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmN4eCQiLAorICAgICJzb3VyY2UiOiAiXmN4eCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zaGFyZWRfbGliLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3NoYXJlZF9saWIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFhNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zaGFyZWRfbGliLmpzb24KQEAgLTAsMCArMSw5OSBAQAoreworICAgICJuYW1lIjogImN4eF9zaGFyZWRfbGliIiwKKyAgICAiaWQiOiAiXmN4eF9zaGFyZWRfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJTSEFSRURfTElCUkFSWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJjeHhfc2hhcmVkX2xpYl9FWFBPUlRTIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogOSwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl4obGlifGN5Zyk/Y3h4X3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2N4eF9zaGFyZWRfbGliXFwuKHNvfGR5bGlifGRsbCkkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2N4eF9zaGFyZWRfbGliXFwuKGRsbFxcLmF8bGliKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGlifGN5Zyk/Y3h4X3NoYXJlZF9saWJcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQ1NzNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlLmpzb24KQEAgLTAsMCArMSwxMTAgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZSIsCisgICAgImlkIjogIl5jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAyNiwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImxhbmd1YWdlU3RhbmRhcmQiIDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFja3RyYWNlcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAic3RhbmRhcmQiIDogIjk4IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMjYsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGVfbGFuZ3VhZ2VzdGFuZGFyZC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlX2xhbmd1YWdlc3RhbmRhcmQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzRlYWJiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlX2xhbmd1YWdlc3RhbmRhcmQuanNvbgpAQCAtMCwwICsxLDM2IEBACit7CisgICAgImxhbmd1YWdlU3RhbmRhcmQiIDoKKyAgICB7CisgICAgICAiYmFja3RyYWNlcyI6IFsKKyAgICAgICAgICBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgImxpbmUiOiAyOSwKKyAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2ZlYXR1cmVzIiwKKyAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICBdLAorICAgICAgICAgIFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAibGluZSI6IDMwLAorICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMiLAorICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgIF0sCisgICAgICAic3RhbmRhcmQiIDogIjExIgorICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhbmRhcmRfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YW5kYXJkX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjI4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YW5kYXJkX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTEwIEBACit7CisgICAgIm5hbWUiOiAiY3h4X3N0YW5kYXJkX2V4ZSIsCisgICAgImlkIjogIl5jeHhfc3RhbmRhcmRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDIzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAibGFuZ3VhZ2VTdGFuZGFyZCIgOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJiYWNrdHJhY2VzIjogWworICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJzZXRfcHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJzdGFuZGFyZCIgOiAiMTciCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAyMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jeHhfc3RhbmRhcmRfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhbmRhcmRfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhbmRhcmRfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmN4eCQiLAorICAgICJzb3VyY2UiOiAiXmN4eCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGF0aWNfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjNDJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTA3IEBACit7CisgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19leGUiLAorICAgICJpZCI6ICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTQsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X3N0YXRpY19leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhdGljX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGF0aWNfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgyOThiZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2xpYi5qc29uCkBAIC0wLDAgKzEsODQgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfc3RhdGljX2xpYiIsCisgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgInR5cGUiOiAiU1RBVElDX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y3h4X3N0YXRpY19saWJcXC4oYXxsaWIpJCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGliKT9jeHhfc3RhdGljX2xpYlxcLihhfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmN4eCQiLAorICAgICJzb3VyY2UiOiAiXmN4eCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiB7CisgICAgICAgICJsdG8iOiBudWxsCisgICAgfSwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9nZW5lcmF0ZWRfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvZ2VuZXJhdGVkX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWJiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvZ2VuZXJhdGVkX2V4ZS5qc29uCkBAIC0wLDAgKzEsMzAzIEBACit7CisgICAgIm5hbWUiOiAiZ2VuZXJhdGVkX2V4ZSIsCisgICAgImlkIjogIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgInByb2plY3ROYW1lIjogIkV4dGVybmFsIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL2dlbmVyYXRlZFxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiR2VuZXJhdGVkIFNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfc291cmNlcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL2VtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9nZW5lcmF0ZWRcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL2VtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQkIiwKKyAgICAgICAgICAgICAgICAgICAgImlzU3lzdGVtIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgICAgICAgICAgICAgICAgICJpc1N5c3RlbSI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiZGVmaW5lcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiRU1QVFlfQz0xIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiU1JDX0RVTU1ZIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiR0VORVJBVEVEX0VYRT0xIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiVEdUX0RVTU1ZIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmcmFnbWVudCIgOiAiU1JDX0NPTVBJTEVfT1BUSU9OU19EVU1NWSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgICAgICAgICAgICAgICAgICJpc1N5c3RlbSI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiZGVmaW5lcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiR0VORVJBVEVEX0VYRT0xIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiVEdUX0RVTU1ZIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeZ2VuZXJhdGVkX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2dlbmVyYXRlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9nZW5lcmF0ZWRfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQkIiwKKyAgICAic291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2ludGVyZmFjZV9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9pbnRlcmZhY2VfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwNTI0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9pbnRlcmZhY2VfZXhlLmpzb24KQEAgLTAsMCArMSwxNTIgQEAKK3sKKyAgICAibmFtZSI6ICJpbnRlcmZhY2VfZXhlIiwKKyAgICAiaWQiOiAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbmNsdWRlX3Rlc3RcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiaW50ZXJmYWNlX2V4ZV9FWFBPUlRTIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbmNsdWRlX3Rlc3RcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJebXlfaW50ZXJmYWNlX2V4ZVxcLm15ZXhlJCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmJpbi8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9teV9pbnRlcmZhY2VfZXhlXFwubXlleGUkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJebGliL215X2ludGVyZmFjZV9leGVcXC5pbXAkIiwKKyAgICAgICAgICAgICJfYWl4RXh0cmEiOiB0cnVlLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/bXlfaW50ZXJmYWNlX2V4ZVxcLihkbGxcXC5hfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJmNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfZXhlLmpzb24KQEAgLTAsMCArMSw5MCBAQAoreworICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfZXhlIiwKKyAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGU2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlLmpzb24KQEAgLTAsMCArMSw5MCBAQAoreworICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZSIsCisgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAyMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMjMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX29iamVjdF9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX29iamVjdF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWVjNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZS5qc29uCkBAIC0wLDAgKzEsOTAgQEAKK3sKKyAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX29iamVjdF9leGUiLAorICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTgsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDE4LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX29iamVjdF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKKyAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zaGFyZWRfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zaGFyZWRfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4NDZlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX3NoYXJlZF9leGUuanNvbgpAQCAtMCwwICsxLDkwIEBACit7CisgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9zaGFyZWRfZXhlIiwKKyAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWExNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZS5qc29uCkBAIC0wLDAgKzEsOTAgQEAKK3sKKyAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX3N0YXRpY19leGUiLAorICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3N0YXRpY19leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKKyAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19hbGlhcy5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfYWxpYXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDFjMTcyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfYWxpYXMuanNvbgpAQCAtMCwwICsxLDcwIEBACit7CisgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCisgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5hbGlhcyQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCisgICAgInNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3VzdG9tLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19jdXN0b20uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGM2ZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3VzdG9tLmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKKyAgICAic291cmNlIjogIl5jdXN0b20kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3h4Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19jeHguanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJmZjgyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3h4Lmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfZXh0ZXJuYWwuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2V4dGVybmFsLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3MzgwNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2V4dGVybmFsLmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAorICAgICJzb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19pbXBvcnRlZC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfaW1wb3J0ZWQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM0Yzg0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfaW1wb3J0ZWQuanNvbgpAQCAtMCwwICsxLDcwIEBACit7CisgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCisgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfb2JqZWN0Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19vYmplY3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Q3NjE2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfb2JqZWN0Lmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKKyAgICAic291cmNlIjogIl5vYmplY3QkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfdG9wLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja190b3AuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzAzMGJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfdG9wLmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiVVRJTElUWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiB0cnVlLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2N4eC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY3h4L0NNYWtlTGlzdHMudHh0CmluZGV4IGIwNTY0ZjUuLjc2MjM1ZjUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY3h4L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY3h4L0NNYWtlTGlzdHMudHh0CkBAIC0xNywzICsxNywxNiBAQAogdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhjeHhfZXhlIFBVQkxJQyBUYXJnZXRDb21waWxlT3B0aW9ucykKIHRhcmdldF9saW5rX29wdGlvbnMoY3h4X2V4ZSBQVUJMSUMgVGFyZ2V0TGlua09wdGlvbnMpCiB0YXJnZXRfbGlua19kaXJlY3RvcmllcyhjeHhfZXhlIFBVQkxJQyAiJHtDTUFLRV9CSU5BUllfRElSfS9UYXJnZXRMaW5rRGlyIikKKwordGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyhjeHhfZXhlIFBVQkxJQyAuLi9lbXB0eS5oKQorCithZGRfZXhlY3V0YWJsZShjeHhfc3RhbmRhcmRfZXhlIC4uL2VtcHR5LmN4eCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgY3h4X3N0YW5kYXJkX2V4ZSBQUk9QRVJUWSBDWFhfU1RBTkRBUkQgMTcpCisKK2FkZF9leGVjdXRhYmxlKGN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlIC4uL2VtcHR5LmN4eCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGUgUFJPUEVSVFkgQ1hYX1NUQU5EQVJEIDk4KQoraWYoQ01BS0VfQ1hYX1NUQU5EQVJEX0RFRkFVTFQgQU5EIERFRklORUQgQ01BS0VfQ1hYMTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04pCisgIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKGN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlIFBSSVZBVEUgY3h4X3N0ZF8xMSkKKyAgdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGUgUFJJVkFURSBjeHhfZGVjbHR5cGUpCisgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jeHhfc3RkXzExLnR4dCIgIiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2VtcHR5LmggYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2VtcHR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvZW1wdHkuaApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlLzd6aXAtd2l0aC1iYWQtY29tcHJlc3Npb24tcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlLzd6aXAtd2l0aC1iYWQtY29tcHJlc3Npb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiZDFhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCByb3VuZHRyaXAuY21ha2U6MzggXChmaWxlXCk6CisgIGZpbGUgYXJjaGl2ZSBmb3JtYXQgN3ppcCBkb2VzIG5vdCBzdXBwb3J0IENPTVBSRVNTSU9OIGFyZ3VtZW50cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgN3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi5jbWFrZTo2IFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlLzd6aXAtd2l0aC1iYWQtY29tcHJlc3Npb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2MWViOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnppcCIpCisKK3NldChBUkNISVZFX0ZPUk1BVCA3emlwKQorc2V0KENPTVBSRVNTSU9OX1RZUEUgWFopCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMGU5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC43eiIpCisKK3NldChBUkNISVZFX0ZPUk1BVCA3emlwKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiMzc3YWJjYWYyNzFjIiBMSU1JVCA2IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODk3MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMCkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkMGNkOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxOCBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKDd6aXApCitydW5fY21ha2UoZ251dGFyKQorcnVuX2NtYWtlKGdudXRhci1neikKK3J1bl9jbWFrZShwYXgpCitydW5fY21ha2UocGF4LXh6KQorcnVuX2NtYWtlKHBheC16c3RkKQorcnVuX2NtYWtlKHBheHIpCitydW5fY21ha2UocGF4ci1iejIpCitydW5fY21ha2UoemlwKQorCisjIEV4dHJhY3Rpbmcgb25seSBzZWxlY3RlZCBmaWxlcyBvciBkaXJlY3RvcmllcworcnVuX2NtYWtlKHppcC1maWx0ZXJlZCkKKworcnVuX2NtYWtlKHVuc3VwcG9ydGVkLWZvcm1hdCkKK3J1bl9jbWFrZSh6aXAtd2l0aC1iYWQtY29tcHJlc3Npb24pCitydW5fY21ha2UoN3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9nbnV0YXItZ3ouY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvZ251dGFyLWd6LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTAyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvZ251dGFyLWd6LmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhci5neiIpCisKK3NldChBUkNISVZFX0ZPUk1BVCBnbnV0YXIpCitzZXQoQ09NUFJFU1NJT05fVFlQRSBHWmlwKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiMWY4YiIgTElNSVQgMiBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvZ251dGFyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQyNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgZ251dGFyKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiNzU3Mzc0NjE3MjIwMjAwMCIgT0ZGU0VUIDI1NyBMSU1JVCA4IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXgteHouY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LXh6LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDg1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LXh6LmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhci54eiIpCisKK3NldChBUkNISVZFX0ZPUk1BVCBwYXgpCitzZXQoQ09NUFJFU1NJT05fVFlQRSBYWikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoImZkMzc3YTU4NWEwMCIgTElNSVQgNiBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LXpzdGQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LXpzdGQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzMDM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXgtenN0ZC5jbWFrZQpAQCAtMCwwICsxLDggQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIuenN0ZCIpCisKK3NldChBUkNISVZFX0ZPUk1BVCBwYXgpCitzZXQoQ09NUFJFU1NJT05fVFlQRSBac3RkKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiMjhiNTJmZmQwMDU4IiBMSU1JVCA2IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MDAyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhciIpCisKK3NldChBUkNISVZFX0ZPUk1BVCBwYXgpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCisKK2NoZWNrX21hZ2ljKCI3NTczNzQ2MTcyMDAzMDMwIiBPRkZTRVQgMjU3IExJTUlUIDggSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheHItYnoyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheHItYnoyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGY4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4ci1iejIuY21ha2UKQEAgLTAsMCArMSw4IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QudGFyLmJ6MiIpCisKK3NldChBUkNISVZFX0ZPUk1BVCBwYXhyKQorc2V0KENPTVBSRVNTSU9OX1RZUEUgQlppcDIpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCisKK2NoZWNrX21hZ2ljKCI0MjVhNjgiIExJTUlUIDMgSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheHIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4ci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQ0ZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheHIuY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QudGFyIikKKworc2V0KEFSQ0hJVkVfRk9STUFUIHBheHIpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCisKK2NoZWNrX21hZ2ljKCI3NTczNzQ2MTcyMDAzMDMwIiBPRkZTRVQgMjU3IExJTUlUIDggSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3JvdW5kdHJpcC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9yb3VuZHRyaXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzODM2NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9yb3VuZHRyaXAuY21ha2UKQEAgLTAsMCArMSw5MiBAQAorZm9yZWFjaChwYXJhbWV0ZXIgT1VUUFVUX05BTUUgQVJDSElWRV9GT1JNQVQpCisgIGlmKE5PVCBERUZJTkVEICR7cGFyYW1ldGVyfSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciAke3BhcmFtZXRlcn0iKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworc2V0KENPTVBSRVNTX0RJUiBjb21wcmVzc19kaXIpCitzZXQoRlVMTF9DT01QUkVTU19ESVIgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7Q09NUFJFU1NfRElSfSkKKworc2V0KERFQ09NUFJFU1NfRElSIGRlY29tcHJlc3NfZGlyKQorc2V0KEZVTExfREVDT01QUkVTU19ESVIgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7REVDT01QUkVTU19ESVJ9KQorCitzZXQoRlVMTF9PVVRQVVRfTkFNRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtPVVRQVVRfTkFNRX0pCisKK3NldChDSEVDS19GSUxFUworICAiZjEudHh0IgorICAiZDEvZjEudHh0IgorICAiZCAyL2YxLnR4dCIKKyAgImQgKyAzL2YxLnR4dCIKKyAgImRfNC9mMS50eHQiCisgICJkLTQvZjEudHh0IgorICAiTXkgU3BlY2lhbCBEaXJlY3RvcnkvZjEudHh0IgorKQorCitmb3JlYWNoKGZpbGUgJHtDSEVDS19GSUxFU30pCisgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9ICR7RlVMTF9DT01QUkVTU19ESVJ9LyR7ZmlsZX0gQ09QWU9OTFkpCitlbmRmb3JlYWNoKCkKKworaWYoVU5JWCkKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgbG4gLXNmIGYxLnR4dCAke0ZVTExfQ09NUFJFU1NfRElSfS9kMS9mMi50eHQpCisgIGxpc3QoQVBQRU5EIENIRUNLX0ZJTEVTICJkMS9mMi50eHQiKQorZW5kaWYoKQorCitmaWxlKFJFTU9WRSAke0ZVTExfT1VUUFVUX05BTUV9KQorZmlsZShSRU1PVkVfUkVDVVJTRSAke0ZVTExfREVDT01QUkVTU19ESVJ9KQorZmlsZShNQUtFX0RJUkVDVE9SWSAke0ZVTExfREVDT01QUkVTU19ESVJ9KQorCitmaWxlKEFSQ0hJVkVfQ1JFQVRFCisgIE9VVFBVVCAke0ZVTExfT1VUUFVUX05BTUV9CisgIEZPUk1BVCAiJHtBUkNISVZFX0ZPUk1BVH0iCisgIENPTVBSRVNTSU9OICIke0NPTVBSRVNTSU9OX1RZUEV9IgorICBWRVJCT1NFCisgIFBBVEhTICR7Q09NUFJFU1NfRElSfSkKKworZmlsZShBUkNISVZFX0VYVFJBQ1QKKyAgSU5QVVQgJHtGVUxMX09VVFBVVF9OQU1FfQorICAke0RFQ09NUFJFU1NJT05fT1BUSU9OU30KKyAgREVTVElOQVRJT04gJHtGVUxMX0RFQ09NUFJFU1NfRElSfQorICBWRVJCT1NFKQorCitpZihDVVNUT01fQ0hFQ0tfRklMRVMpCisgIHNldChDSEVDS19GSUxFUyAke0NVU1RPTV9DSEVDS19GSUxFU30pCitlbmRpZigpCisKK2ZvcmVhY2goZmlsZSAke0NIRUNLX0ZJTEVTfSkKKyAgc2V0KGlucHV0ICR7RlVMTF9DT01QUkVTU19ESVJ9LyR7ZmlsZX0pCisgIHNldChvdXRwdXQgJHtGVUxMX0RFQ09NUFJFU1NfRElSfS8ke0NPTVBSRVNTX0RJUn0vJHtmaWxlfSkKKworICBpZihOT1QgRVhJU1RTICR7aW5wdXR9KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ2Fubm90IGZpbmQgaW5wdXQgZmlsZSAke291dHB1dH0iKQorICBlbmRpZigpCisKKyAgaWYoTk9UIEVYSVNUUyAke291dHB1dH0pCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJDYW5ub3QgZmluZCBvdXRwdXQgZmlsZSAke291dHB1dH0iKQorICBlbmRpZigpCisKKyAgZmlsZShNRDUgJHtpbnB1dH0gaW5wdXRfbWQ1KQorICBmaWxlKE1ENSAke291dHB1dH0gb3V0cHV0X21kNSkKKworICBpZihOT1QgaW5wdXRfbWQ1IFNUUkVRVUFMIG91dHB1dF9tZDUpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJGaWxlcyBcIiR7aW5wdXR9XCIgYW5kIFwiJHtvdXRwdXR9XCIgYXJlIGRpZmZlcmVudCIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKGZpbGUgJHtOT1RfRVhJU1RJTkdfRklMRVNfQ0hFQ0t9KQorICBzZXQob3V0cHV0ICR7RlVMTF9ERUNPTVBSRVNTX0RJUn0vJHtDT01QUkVTU19ESVJ9LyR7ZmlsZX0pCisKKyAgaWYoRVhJU1RTICR7b3V0cHV0fSkKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkZpbGUgJHtvdXRwdXR9IGV4aXN0cyBidXQgaXQgc2hvdWxkbid0IikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK2Z1bmN0aW9uKGNoZWNrX21hZ2ljIEVYUEVDVEVEKQorICBmaWxlKFJFQUQgJHtGVUxMX09VVFBVVF9OQU1FfSBBQ1RVQUwKKyAgICAke0FSR059CisgICkKKworICBpZihOT1QgQUNUVUFMIFNUUkVRVUFMIEVYUEVDVEVEKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJBY3R1YWwgWyR7QUNUVUFMfV0gZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgWyR7RVhQRUNURUR9XSIpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyODAyMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NNYWtlIEVycm9yIGF0IHJvdW5kdHJpcC5jbWFrZTozOCBcKGZpbGVcKToKKyAgZmlsZSBhcmNoaXZlIGZvcm1hdCByYXIgbm90IHN1cHBvcnRlZAorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgdW5zdXBwb3J0ZWQtZm9ybWF0LmNtYWtlOjUgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0MWU2NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQuY21ha2UKQEAgLTAsMCArMSw1IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QucmFyIikKKworc2V0KEFSQ0hJVkVfRk9STUFUIHJhcikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtZmlsdGVyZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLWZpbHRlcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YWFiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLWZpbHRlcmVkLmNtYWtlCkBAIC0wLDAgKzEsMjYgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC56aXAiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgemlwKQorCitzZXQoREVDT01QUkVTU0lPTl9PUFRJT05TCisgIFBBVFRFUk5TCisgICAgY29tcHJlc3NfZGlyL2YxLnR4dCAjIERlY29tcHJlc3Mgb25seSBmaWxlCisgICAgY29tcHJlc3NfKi9kPyAgICAgICAjIGFuZCB3aG9sZSBkaXJlY3RvcnkgKGhhcyBvbmx5IG9uZSBtYXRjaCkKKykKKworc2V0KENVU1RPTV9DSEVDS19GSUxFUworICAiZjEudHh0IgorICAiZDEvZjEudHh0IgorKQorCisjIFRoaXMgZmlsZXMgc2hvdWxkbid0IGV4aXN0cworc2V0KE5PVF9FWElTVElOR19GSUxFU19DSEVDSworICAiZCAyL2YxLnR4dCIKKyAgImQgKyAzL2YxLnR4dCIKKyAgImRfNC9mMS50eHQiCisgICJkLTQvZjEudHh0IgorKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiNTA0YjAzMDQiIExJTUlUIDQgSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtd2l0aC1iYWQtY29tcHJlc3Npb24tcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtd2l0aC1iYWQtY29tcHJlc3Npb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtd2l0aC1iYWQtY29tcHJlc3Npb24tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmFkOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgcm91bmR0cmlwLmNtYWtlOjM4IFwoZmlsZVwpOgorICBmaWxlIGFyY2hpdmUgZm9ybWF0IHppcCBkb2VzIG5vdCBzdXBwb3J0IENPTVBSRVNTSU9OIGFyZ3VtZW50cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLmNtYWtlOjYgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtd2l0aC1iYWQtY29tcHJlc3Npb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhZGQ1YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtd2l0aC1iYWQtY29tcHJlc3Npb24uY21ha2UKQEAgLTAsMCArMSw2IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QuemlwIikKKworc2V0KEFSQ0hJVkVfRk9STUFUIHppcCkKK3NldChDT01QUkVTU0lPTl9UWVBFIEJaaXAyKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllODRiMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAuY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QuemlwIikKKworc2V0KEFSQ0hJVkVfRk9STUFUIHppcCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjUwNGIwMzA0IiBMSU1JVCA0IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIzYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBCYWRBcmcuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIEluY29ycmVjdCBhcmd1bWVudHMgdG8gQ09ORklHVVJFIHN1YmNvbW1hbmQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3ZmNkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy5jbWFrZQpAQCAtMCwwICsxIEBACitmaWxlKENPTkZJR1VSRSBPVVRQVVQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2RhNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NNYWtlIEVycm9yIGF0IEJhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBDT05GSUdVUkUgY2FsbGVkIHdpdGggQ09OVEVOVCBjb250YWluaW5nIGEgIjwiLiAgVGhpcyBjaGFyYWN0ZXIgaXMgbm90CisgIGFsbG93ZWQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmU5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2ZpbGUoQ09ORklHVVJFCisgICAgT1VUUFVUICJmaWxlLnR4dCIKKyAgICBDT05URU5UICJmb28tJDxDT05GSUc+IgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjlkOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgQ09ORklHVVJFIGNhbGxlZCB3aXRoIE9VVFBVVCBjb250YWluaW5nIGEgIjwiLiAgVGhpcyBjaGFyYWN0ZXIgaXMgbm90CisgIGFsbG93ZWQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWE3OWE3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2ZpbGUoQ09ORklHVVJFCisgICAgT1VUUFVUICJmaWxlLSQ8Q09ORklHPi50eHQiCisgICAgQ09OVEVOVCAiZm9vIgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzExN2JkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNykKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDUxZjdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkRpck91dHB1dCB0ZXN0IGZpbGUkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwZmFkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0Rpck91dHB1dCkKK2NvbmZpZ3VyZV9maWxlKERpck91dHB1dC50eHQgRGlyT3V0cHV0KQorZmlsZShSRUFEICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9EaXJPdXRwdXQvRGlyT3V0cHV0LnR4dCBvdXQpCittZXNzYWdlKCIke291dH0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzODhhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC50eHQKQEAgLTAsMCArMSBAQAorRGlyT3V0cHV0IHRlc3QgZmlsZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtTm9Bcmctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOGVkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtTm9Bcmctc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NNYWtlIEVycm9yIGF0IE5ld0xpbmVTdHlsZS1Ob0FyZy5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgQ09ORklHVVJFIE5FV0xJTkVfU1RZTEUgbXVzdCBzZXQgYSBzdHlsZTogTEYsIENSTEYsIFVOSVgsIERPUywgb3IKKyAgV0lOMzIKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjczOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLU5vQXJnLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KGZpbGVfbmFtZSAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L05ld0xpbmVTdHlsZS50eHQpCitmaWxlKENPTkZJR1VSRQorICAgIE9VVFBVVCAke2ZpbGVfbmFtZX0KKyAgICBDT05URU5UICJEYXRhXG4iCisgICAgTkVXTElORV9TVFlMRQorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVZhbGlkQXJnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVZhbGlkQXJnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODQ4NzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtVmFsaWRBcmcuY21ha2UKQEAgLTAsMCArMSwyMCBAQAorc2V0KGZpbGVfbmFtZSAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L05ld0xpbmVTdHlsZS50eHQpCisKK2Z1bmN0aW9uKHRlc3RfZW9sIHN0eWxlIGluIG91dCkKKyAgICBmaWxlKENPTkZJR1VSRQorICAgICAgICBPVVRQVVQgJHtmaWxlX25hbWV9CisgICAgICAgIENPTlRFTlQgIkBpbkAiCisgICAgICAgIE5FV0xJTkVfU1RZTEUgJHtzdHlsZX0KKyAgICApCisgICAgZmlsZShSRUFEICR7ZmlsZV9uYW1lfSBuZXcgSEVYKQorICAgIGlmKE5PVCAiJHtuZXd9IiBTVFJFUVVBTCAiJHtvdXR9IikKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTm8gJHtzdHlsZX0gbGluZSBlbmRpbmdzIikKKyAgICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK3Rlc3RfZW9sKERPUyAgICJhIiAiNjEwZDBhIikKK3Rlc3RfZW9sKFdJTjMyICJiIiAiNjIwZDBhIikKK3Rlc3RfZW9sKENSTEYgICJjIiAiNjMwZDBhIikKKwordGVzdF9lb2woVU5JWCAgImQiICI2NDBhIikKK3Rlc3RfZW9sKExGICAgICJlIiAiNjUwYSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiYjQyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgTmV3TGluZVN0eWxlLVdyb25nQXJnLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBDT05GSUdVUkUgTkVXTElORV9TVFlMRSBzZXRzIGFuIHVua25vd24gc3R5bGUsIG9ubHkgTEYsIENSTEYsIFVOSVgsCisgIERPUywgYW5kIFdJTjMyIGFyZSBzdXBwb3J0ZWQKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDM4MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KGZpbGVfbmFtZSAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L05ld0xpbmVTdHlsZS50eHQpCitmaWxlKENPTkZJR1VSRQorICAgIE9VVFBVVCAke2ZpbGVfbmFtZX0KKyAgICBDT05URU5UICJEYXRhXG4iCisgICAgTkVXTElORV9TVFlMRSBGT08KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM3MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTAgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShCYWRBcmcpCitydW5fY21ha2UoQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQpCitydW5fY21ha2UoQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dCkKK3J1bl9jbWFrZShEaXJPdXRwdXQpCitydW5fY21ha2UoTmV3TGluZVN0eWxlLU5vQXJnKQorcnVuX2NtYWtlKE5ld0xpbmVTdHlsZS1WYWxpZEFyZykKK3J1bl9jbWFrZShOZXdMaW5lU3R5bGUtV3JvbmdBcmcpCitydW5fY21ha2UoU3ViRGlyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODI1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXItY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQoZXhwZWN0ZWQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9TdWJEaXIvb3V0LnR4dCIpCitpZihOT1QgRVhJU1RTICIke2V4cGVjdGVkfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRXhwZWN0ZWQgZmlsZSBub3QgY3JlYXRlZDpcbiAgJHtleHBlY3RlZH0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTYwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXIuY21ha2UKQEAgLTAsMCArMSBAQAorYWRkX3N1YmRpcmVjdG9yeShTdWJEaXIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkOTYyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL1N1YkRpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxIEBACitmaWxlKENPTkZJR1VSRSBPVVRQVVQgb3V0LnR4dCBDT05URU5UICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGMyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0FkamFjZW50SW5PdXQuY21ha2UKQEAgLTAsMCArMSw2IEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAwNzAgTkVXKQoraWYoRVhJU1RTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQWRqYWNlbnRJbk91dC50eHQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDTWFrZSBzaG91bGQgbm90IHJlLXJ1biBkdXJpbmcgdGhlIGJ1aWxkISIpCitlbmRpZigpCitjb25maWd1cmVfZmlsZShBZGphY2VudEluT3V0LmluICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9BZGphY2VudEluT3V0LnR4dC50bXApCitmaWxlKEdFTkVSQVRFIE9VVFBVVCBBZGphY2VudEluT3V0LnR4dCBJTlBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQWRqYWNlbnRJbk91dC50eHQudG1wKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmluIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYmJkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0FkamFjZW50SW5PdXQuaW4KQEAgLTAsMCArMSBAQAorU2FtcGxlIFRleHQgRmlsZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTVAwMDcwLU9MRC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTVAwMDcwLU9MRC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNTc4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0NNUDAwNzAtT0xELXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMCBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01QMDA3MC1PTEQuY21ha2U6WzAtOV0rIFwoY21ha2VfcG9saWN5XCk6CisgIFRoZSBPTEQgYmVoYXZpb3IgZm9yIHBvbGljeSBDTVAwMDcwIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24KKyAgb2YgQ01ha2UuCisKKyAgVGhlIGNtYWtlLXBvbGljaWVzXCg3XCkgbWFudWFsIGV4cGxhaW5zIHRoYXQgdGhlIE9MRCBiZWhhdmlvcnMgb2YgYWxsCisgIHBvbGljaWVzIGFyZSBkZXByZWNhdGVkIGFuZCB0aGF0IGEgcG9saWN5IHNob3VsZCBiZSBzZXQgdG8gT0xEIG9ubHkgdW5kZXIKKyAgc3BlY2lmaWMgc2hvcnQtdGVybSBjaXJjdW1zdGFuY2VzLiAgUHJvamVjdHMgc2hvdWxkIGJlIHBvcnRlZCB0byB0aGUgTkVXCisgIGJlaGF2aW9yIGFuZCBub3QgcmVseSBvbiBzZXR0aW5nIGEgcG9saWN5IHRvIE9MRC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfR2VuZXJhdGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0NNYWtlTGlzdHMudHh0CmluZGV4IGJjMGNmNWQuLjMxNzhkZTUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfR2VuZXJhdGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGlmKE5PVCBURVNUX0ZJTEUpCiAgIHNldChURVNUX0ZJTEUgJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfR2VuZXJhdGUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOTRhYWNhOC4uNTk4NzQxNyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTcyLDYgKzcyLDcgQEAKICAgaWYgKE5PVCBzY3JpcHRfb3V0cHV0IFNUUkVRVUFMIFNVQ0NFU1MpCiAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJHZW5lcmF0ZWQgc2NyaXB0IGRpZCBub3QgZXhlY3V0ZSBjb3JyZWN0bHk6XG4ke3NjcmlwdF9vdXRwdXR9XG49PT09XG4ke3NjcmlwdF9lcnJvcn0iKQogICBlbmRpZigpCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCiBlbmRpZigpCiAKIGlmIChSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyBNYWtlZmlsZXMpCkBAIC0xMDQsMyArMTA1LDEwIEBACiAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJGaWxlIGRpZCBub3QgcmUtZ2VuZXJhdGU6IFwiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9SZVJ1bkNNYWtlLWJ1aWxkL291dHB1dF9maWxlLnR4dFwiIikKICAgZW5kaWYoKQogZW5kaWYoKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQWRqYWNlbnRJbk91dC1idWlsZCkKK3J1bl9jbWFrZShBZGphY2VudEluT3V0KQorc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKK3J1bl9jbWFrZV9jb21tYW5kKEFkamFjZW50SW5PdXQtbm93b3JrICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQordW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQordW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRPcGVuR0wvQ01QMDA3Mi1PTEQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRPcGVuR0wvQ01QMDA3Mi1PTEQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGQyM2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZE9wZW5HTC9DTVAwMDcyLU9MRC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNUDAwNzItT0xELmNtYWtlOjEgXChjbWFrZV9wb2xpY3lcKToKKyAgVGhlIE9MRCBiZWhhdmlvciBmb3IgcG9saWN5IENNUDAwNzIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbgorICBvZiBDTWFrZS4KKworICBUaGUgY21ha2UtcG9saWNpZXNcKDdcKSBtYW51YWwgZXhwbGFpbnMgdGhhdCB0aGUgT0xEIGJlaGF2aW9ycyBvZiBhbGwKKyAgcG9saWNpZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIHRoYXQgYSBwb2xpY3kgc2hvdWxkIGJlIHNldCB0byBPTEQgb25seSB1bmRlcgorICBzcGVjaWZpYyBzaG9ydC10ZXJtIGNpcmN1bXN0YW5jZXMuICBQcm9qZWN0cyBzaG91bGQgYmUgcG9ydGVkIHRvIHRoZSBORVcKKyAgYmVoYXZpb3IgYW5kIG5vdCByZWx5IG9uIHNldHRpbmcgYSBwb2xpY3kgdG8gT0xELgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0NNYWtlTGlzdHMudHh0CmluZGV4IDcyYWJmYzguLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfQ01BS0VfQVBQQlVORExFX1BBVEguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfQ01BS0VfQVBQQlVORExFX1BBVEguY21ha2UKaW5kZXggMjY4N2VmZS4uYmY4Y2Q0ZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX0NNQUtFX0FQUEJVTkRMRV9QQVRILmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19DTUFLRV9BUFBCVU5ETEVfUEFUSC5jbWFrZQpAQCAtNCw1MyArNCwxMyBAQAogIyBQcmVwYXJlIGVudmlyb25tZW50IGFuZCB2YXJpYWJsZXMKIHNldChQS0dfQ09ORklHX1VTRV9DTUFLRV9QUkVGSVhfUEFUSCBUUlVFKQogc2V0KENNQUtFX0FQUEJVTkRMRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vIikKLWlmKFdJTjMyKQotICAgIHNldChQS0dfQ09ORklHX0VYRUNVVEFCTEUgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfVxcZHVtbXktcGtnLWNvbmZpZy5iYXQiKQotICAgIHNldChFTlZ7Q01BS0VfQVBQQlVORExFX1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn1cXHBjLWJhcjtYOlxcdGhpc1xcZGlyZWN0b3J5XFxzaG91bGRcXG5vdFxcZXhpc3RcXGluXFx0aGVcXGZpbGVzeXN0ZW0iKQotICAgIHNldChFTlZ7UEtHX0NPTkZJR19QQVRIfSAiQzpcXGJheiIpCi1lbHNlKCkKLSAgICBzZXQoUEtHX0NPTkZJR19FWEVDVVRBQkxFICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZHVtbXktcGtnLWNvbmZpZy5zaCIpCi0gICAgc2V0KEVOVntDTUFLRV9BUFBCVU5ETEVfUEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXI6L3RoaXMvZGlyZWN0b3J5L3Nob3VsZC9ub3QvZXhpc3QvaW4vdGhlL2ZpbGVzeXN0ZW0iKQotICAgIHNldChFTlZ7UEtHX0NPTkZJR19QQVRIfSAiL2JheiIpCi1lbmRpZigpCi0KK3NldChQS0dfQ09ORklHX0VYRUNVVEFCTEUgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kdW1teS1wa2ctY29uZmlnLnNoIikKK3NldChFTlZ7Q01BS0VfQVBQQlVORExFX1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyOi90aGlzL2RpcmVjdG9yeS9zaG91bGQvbm90L2V4aXN0L2luL3RoZS9maWxlc3lzdGVtIikKK3NldChFTlZ7UEtHX0NPTkZJR19QQVRIfSAiL2JheiIpCiAKIGZpbmRfcGFja2FnZShQa2dDb25maWcpCiAKLQotaWYoTk9UIERFRklORUQgQ01BS0VfU1lTVEVNX05BTUUKLSAgICBPUiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiXihMaW51eHxrRnJlZUJTRHxHTlUpJCIKLSAgICBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKSkKLSAgaWYoRVhJU1RTICIvZXRjL2RlYmlhbl92ZXJzaW9uIikgIyBpcyB0aGlzIGEgZGViaWFuIHN5c3RlbSA/Ci0gICAgaWYoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgTUFUQ0hFUyAiXihpMzg2LWxpbnV4LWdudXx4ODZfNjQtbGludXgtZ251KSQiKQotICAgICAgIyBDYW5ub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciBhbGwgdGhlIGV4aXN0aW5nIGFyY2hpdGVjdHVyZXMuLi4KLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliLyR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9L3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0vcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gICAgZWxzZSgpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbmRpZigpCi0gIGVsc2UoKQotICAgICMgbm90IGRlYmlhbiwgY2hlY2sgdGhlIEZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMgYW5kIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMgcHJvcGVydGllcwotICAgIGdldF9wcm9wZXJ0eSh1c2VsaWJ4MzIgR0xPQkFMIFBST1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTKQotICAgIGdldF9wcm9wZXJ0eSh1c2VsaWIzMiBHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUykKLSAgICBnZXRfcHJvcGVydHkodXNlbGliNjQgR0xPQkFMIFBST1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMpCi0gICAgaWYodXNlbGlieDMyIEFORCBDTUFLRV9JTlRFUk5BTF9QTEFURk9STV9BQkkgU1RSRVFVQUwgIkVMRiBYMzIiKQotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWJ4MzIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYngzMi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbHNlaWYodXNlbGliMzIgQU5EIENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgNCkKLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliMzIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYjMyL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVsc2VpZih1c2VsaWI2NCBBTkQgQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWI2NC9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliNjQvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gICAgZWxzZSgpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbmRpZigpCi0gIGVuZGlmKCkKLWVsc2UoKQotICBpZihXSU4zMikKLSAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiQzpcXGJhejske0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn1cXHBjLWZvb1xcbGliXFxwa2djb25maWc7JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9XFxwYy1iYXJcXGxpYlxccGtnY29uZmlnIikKLSAgZWxzZSgpCi0gICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gIGVuZGlmKCkKLWVuZGlmKCkKLQorc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCiAKIHBrZ19jaGVja19tb2R1bGVzKEZPTyAiJHtleHBlY3RlZF9wYXRofSIpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19DTUFLRV9GUkFNRVdPUktfUEFUSC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19DTUFLRV9GUkFNRVdPUktfUEFUSC5jbWFrZQppbmRleCA3NGNkYTI1Li4zN2MxOGZjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfQ01BS0VfRlJBTUVXT1JLX1BBVEguY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX0NNQUtFX0ZSQU1FV09SS19QQVRILmNtYWtlCkBAIC00LDUzICs0LDEzIEBACiAjIFByZXBhcmUgZW52aXJvbm1lbnQgYW5kIHZhcmlhYmxlcwogc2V0KFBLR19DT05GSUdfVVNFX0NNQUtFX1BSRUZJWF9QQVRIIFRSVUUpCiBzZXQoQ01BS0VfRlJBTUVXT1JLX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28iKQotaWYoV0lOMzIpCi0gICAgc2V0KFBLR19DT05GSUdfRVhFQ1VUQUJMRSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9XFxkdW1teS1wa2ctY29uZmlnLmJhdCIpCi0gICAgc2V0KEVOVntDTUFLRV9GUkFNRVdPUktfUEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfVxccGMtYmFyO1g6XFx0aGlzXFxkaXJlY3RvcnlcXHNob3VsZFxcbm90XFxleGlzdFxcaW5cXHRoZVxcZmlsZXN5c3RlbSIpCi0gICAgc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICJDOlxcYmF6IikKLWVsc2UoKQotICAgIHNldChQS0dfQ09ORklHX0VYRUNVVEFCTEUgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kdW1teS1wa2ctY29uZmlnLnNoIikKLSAgICBzZXQoRU5We0NNQUtFX0ZSQU1FV09SS19QQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhcjovdGhpcy9kaXJlY3Rvcnkvc2hvdWxkL25vdC9leGlzdC9pbi90aGUvZmlsZXN5c3RlbSIpCi0gICAgc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICIvYmF6IikKLWVuZGlmKCkKLQorc2V0KFBLR19DT05GSUdfRVhFQ1VUQUJMRSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2R1bW15LXBrZy1jb25maWcuc2giKQorc2V0KEVOVntDTUFLRV9GUkFNRVdPUktfUEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXI6L3RoaXMvZGlyZWN0b3J5L3Nob3VsZC9ub3QvZXhpc3QvaW4vdGhlL2ZpbGVzeXN0ZW0iKQorc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICIvYmF6IikKIAogZmluZF9wYWNrYWdlKFBrZ0NvbmZpZykKIAotCi1pZihOT1QgREVGSU5FRCBDTUFLRV9TWVNURU1fTkFNRQotICAgIE9SIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJeKExpbnV4fGtGcmVlQlNEfEdOVSkkIgotICAgIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcpKQotICBpZihFWElTVFMgIi9ldGMvZGViaWFuX3ZlcnNpb24iKSAjIGlzIHRoaXMgYSBkZWJpYW4gc3lzdGVtID8KLSAgICBpZihDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSBNQVRDSEVTICJeKGkzODYtbGludXgtZ251fHg4Nl82NC1saW51eC1nbnUpJCIpCi0gICAgICAjIENhbm5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIGFsbCB0aGUgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlcy4uLgotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0vcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi8ke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfS9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbHNlKCkKLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVuZGlmKCkKLSAgZWxzZSgpCi0gICAgIyBub3QgZGViaWFuLCBjaGVjayB0aGUgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUyBhbmQgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUyBwcm9wZXJ0aWVzCi0gICAgZ2V0X3Byb3BlcnR5KHVzZWxpYngzMiBHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFMpCi0gICAgZ2V0X3Byb3BlcnR5KHVzZWxpYjMyIEdMT0JBTCBQUk9QRVJUWSBGSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTKQotICAgIGdldF9wcm9wZXJ0eSh1c2VsaWI2NCBHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUykKLSAgICBpZih1c2VsaWJ4MzIgQU5EIENNQUtFX0lOVEVSTkFMX1BMQVRGT1JNX0FCSSBTVFJFUVVBTCAiRUxGIFgzMiIpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYngzMi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGlieDMyL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVsc2VpZih1c2VsaWIzMiBBTkQgQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA0KQotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIzMi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliMzIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gICAgZWxzZWlmKHVzZWxpYjY0IEFORCBDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYjY0L3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWI2NC9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbHNlKCkKLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVuZGlmKCkKLSAgZW5kaWYoKQotZWxzZSgpCi0gIGlmKFdJTjMyKQotICAgIHNldChleHBlY3RlZF9wYXRoICJDOlxcYmF6OyR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfVxccGMtZm9vXFxsaWJcXHBrZ2NvbmZpZzske0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn1cXHBjLWJhclxcbGliXFxwa2djb25maWciKQotICBlbHNlKCkKLSAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgZW5kaWYoKQotZW5kaWYoKQotCitzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKIAogcGtnX2NoZWNrX21vZHVsZXMoRk9PICIke2V4cGVjdGVkX3BhdGh9IikKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX2V4dHJhY3RfZnJhbWV3b3Jrcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlODg2ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3MuY21ha2UKQEAgLTAsMCArMSwxMyBAQAorZmluZF9wYWNrYWdlKFBrZ0NvbmZpZykKKworc2V0KGZvb2Jhcl9MREZMQUdTX09USEVSICItV2wseHk7LWZyYW1ld29yaztiYXI7LVdsLG90aGVyLWZyYW1ld29yazstZnJhbWV3b3JrO2JhejstV2wsYWJjOy1mcmFtZXdvcms7Z29zaDstZnJhbWV3b3JrY3JhcDstZnJhbWU7ajstZnJhbWV3b3JrO25peDstV2wsZGVmIikKK3NldChmb29iYXJfTElCUkFSSUVTICItbHo7LWxtIikKKworX3BrZ2NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3MoImZvb2JhciIpCisKK2lmIChOT1QgZm9vYmFyX0xERkxBR1NfT1RIRVIgU1RSRVFVQUwgIi1XbCx4eTstV2wsb3RoZXItZnJhbWV3b3JrOy1XbCxhYmM7LWZyYW1ld29ya2NyYXA7LWZyYW1lO2o7LVdsLGRlZiIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiZm9vYmFyX0xERkxBR1NfT1RIRVIgZGlkIG5vdCBtYXRjaDogJHtmb29iYXJfTERGTEFHU19PVEhFUn0iKQorZW5kaWYgKCkKK2lmIChOT1QgZm9vYmFyX0xJQlJBUklFUyBTVFJFUVVBTCAiLWx6Oy1sbTstZnJhbWV3b3JrIGJhcjstZnJhbWV3b3JrIGJhejstZnJhbWV3b3JrIGdvc2g7LWZyYW1ld29yayBuaXgiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgImZvb2Jhcl9MSUJSQVJJRVMgZGlkIG5vdCBtYXRjaDogJHtmb29iYXJfTElCUkFSSUVTfSIpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX2V4dHJhY3RfZnJhbWV3b3Jrc190YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfZXh0cmFjdF9mcmFtZXdvcmtzX3RhcmdldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAxZDlmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX2V4dHJhY3RfZnJhbWV3b3Jrc190YXJnZXQuY21ha2UKQEAgLTAsMCArMSwyOSBAQAorIyBQcmVwYXJlIGVudmlyb25tZW50IHRvIHJldXNlIGJsZXRjaC5wYworZmlsZShUT19OQVRJVkVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJsZXRjaC9saWIvcGtnY29uZmlnIiBQQ19QQVRIKQoraWYoVU5JWCkKKyAgc3RyaW5nKFJFUExBQ0UgIlxcICIgIiAiIFBDX1BBVEggIiR7UENfUEFUSH0iKQorZW5kaWYoKQorc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICIke1BDX1BBVEh9IikKKworZmluZF9wYWNrYWdlKFBrZ0NvbmZpZyBSRVFVSVJFRCkKK3BrZ19jaGVja19tb2R1bGVzKEJsZXRjaCBJTVBPUlRFRF9UQVJHRVQgUkVRVUlSRUQgYmxldGNoLWZyYW1ld29yaykKKworaWYgKEJsZXRjaF9MREZMQUdTX09USEVSKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkJsZXRjaF9MREZMQUdTX09USEVSIHNob3VsZCBiZSBlbXB0eSwgYnV0IGlzICcke0JsZXRjaF9MREZMQUdTX09USEVSfSciKQorZW5kaWYgKCkKKworaWYgKE5PVCBCbGV0Y2hfTElOS19MSUJSQVJJRVMgU1RSRVFVQUwgIi1mcmFtZXdvcmsgZm9vOy1mcmFtZXdvcmsgYmFyO2JsZXRjaDstZnJhbWV3b3JrIGJheiIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmxldGNoX0xJTktfTElCUkFSSUVTIGhhcyB3cm9uZyB2YWx1ZSAnJHtCbGV0Y2hfTElOS19MSUJSQVJJRVN9JyIpCitlbmRpZiAoKQorCitmb3JlYWNoIChwcm9wIElOIElURU1TIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTIElOVEVSRkFDRV9MSU5LX09QVElPTlMgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUykKKyAgZ2V0X3RhcmdldF9wcm9wZXJ0eShwcm9wX3ZhbHVlIFBrZ0NvbmZpZzo6QmxldGNoICR7cHJvcH0pCisgIGlmIChwcm9wX3ZhbHVlKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAidGFyZ2V0IHByb3BlcnR5ICR7cHJvcH0gc2hvdWxkIG5vdCBiZSBzZXQsIGJ1dCBpcyAnJHtwcm9wX3ZhbHVlfSciKQorICBlbmRpZiAoKQorZW5kZm9yZWFjaCAoKQorCitnZXRfdGFyZ2V0X3Byb3BlcnR5KHByb3BfdmFsdWUgUGtnQ29uZmlnOjpCbGV0Y2ggSU5URVJGQUNFX0xJTktfTElCUkFSSUVTKQoraWYgKE5PVCBwcm9wX3ZhbHVlIFNUUkVRVUFMIEJsZXRjaF9MSU5LX0xJQlJBUklFUykKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJ0YXJnZXQgcHJvcGVydHkgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIGhhcyB3cm9uZyB2YWx1ZSAnJHtwcm9wX3ZhbHVlfSciKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUGtnQ29uZmlnRG9lc05vdEV4aXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1BrZ0NvbmZpZ0RvZXNOb3RFeGlzdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNWY3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1BrZ0NvbmZpZ0RvZXNOb3RFeGlzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorLS0gQ291bGQgTk9UIGZpbmQgUGtnQ29uZmlnIFwobWlzc2luZzogUEtHX0NPTkZJR19FWEVDVVRBQkxFXCkgKgorICAgIFJlYXNvbiBnaXZlbiBieSBwYWNrYWdlOiBUaGUgY29tbWFuZAorICAgICAgInBrZy1jb25maWctZG9lcy1ub3QtZXhpc3QiIC0tdmVyc2lvbgorICAgIGZhaWxlZCB3aXRoIG91dHB1dC4qCistLSBQS0dfQ09ORklHX0ZPVU5EPSdGQUxTRScKKy0tIFBLR19DT05GSUdfRVhFQ1VUQUJMRT0nJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9Qa2dDb25maWdEb2VzTm90RXhpc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1BrZ0NvbmZpZ0RvZXNOb3RFeGlzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZhYmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9Qa2dDb25maWdEb2VzTm90RXhpc3QuY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQoUEtHX0NPTkZJR19FWEVDVVRBQkxFICJwa2ctY29uZmlnLWRvZXMtbm90LWV4aXN0IiBDQUNIRSBGSUxFUEFUSCAiIikKK2ZpbmRfcGFja2FnZShQa2dDb25maWcpCittZXNzYWdlKFNUQVRVUyAiUEtHX0NPTkZJR19GT1VORD0nJHtQS0dfQ09ORklHX0ZPVU5EfSciKQorbWVzc2FnZShTVEFUVVMgIlBLR19DT05GSUdfRVhFQ1VUQUJMRT0nJHtQS0dfQ09ORklHX0VYRUNVVEFCTEV9JyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGI3N2JiNTQuLmRjNzc5MTUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDExICsxLDE1IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCitydW5fY21ha2UoUGtnQ29uZmlnRG9lc05vdEV4aXN0KQorCiBydW5fY21ha2UoRmluZFBrZ0NvbmZpZ19OT19QS0dDT05GSUdfUEFUSCkKIHJ1bl9jbWFrZShGaW5kUGtnQ29uZmlnX1BLR0NPTkZJR19QQVRIKQogcnVuX2NtYWtlKEZpbmRQa2dDb25maWdfUEtHQ09ORklHX1BBVEhfTk9fQ01BS0VfUEFUSCkKIHJ1bl9jbWFrZShGaW5kUGtnQ29uZmlnX1BLR0NPTkZJR19QQVRIX05PX0NNQUtFX0VOVklST05NRU5UX1BBVEgpCitydW5fY21ha2UoRmluZFBrZ0NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3MpCiAKIGlmKEFQUExFKQorICBydW5fY21ha2UoRmluZFBrZ0NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3NfdGFyZ2V0KQogICBydW5fY21ha2UoRmluZFBrZ0NvbmZpZ19DTUFLRV9GUkFNRVdPUktfUEFUSCkKICAgcnVuX2NtYWtlKEZpbmRQa2dDb25maWdfQ01BS0VfQVBQQlVORExFX1BBVEgpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL3BjLWJsZXRjaC9saWIvcGtnY29uZmlnL2JsZXRjaC1mcmFtZXdvcmsucGMgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL3BjLWJsZXRjaC9saWIvcGtnY29uZmlnL2JsZXRjaC1mcmFtZXdvcmsucGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ODBhZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvcGMtYmxldGNoL2xpYi9wa2djb25maWcvYmxldGNoLWZyYW1ld29yay5wYwpAQCAtMCwwICsxLDkgQEAKK3ByZWZpeD0vb3B0L2JsZXRjaAorZXhlY19wcmVmaXg9JHtwcmVmaXh9CitsaWJkaXI9JHtleGVjX3ByZWZpeH0vbGliCitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IEJsZXRjaAorRGVzY3JpcHRpb246IER1bW15IHBhY2thZ2V0IHRvIHRlc3QgdmFyaWFibGUgc3VwcG9ydAorVmVyc2lvbjogMS4zCitMaWJzOiAtTCR7bGliZGlyfSAtZnJhbWV3b3JrIGZvbyAtZnJhbWV3b3JrIGJhciAtbGJsZXRjaCAtZnJhbWV3b3JrIGJhegpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWIwZDJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMCkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWY3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw0IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoY29tcG9uZW50cykKK3J1bl9jbWFrZShtaXNzaW5nLWNvbXBvbmVudHMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9jb21wb25lbnRzLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9jb21wb25lbnRzLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3N2IwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL2NvbXBvbmVudHMtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDYgQEAKKy0tIEZvdW5kIFNXSUc6IFteIF0rIFwoZm91bmQgdmVyc2lvbiAiWzAtOS5dKyJcKSBmb3VuZCBjb21wb25lbnRzOiBqYXZhIHB5dGhvbiBtaXNzaW5nIGNvbXBvbmVudHM6IFBFUkwKKy0tIFNXSUdfVkVSU0lPTj0nWzAtOS5dKycKKy0tIFNXSUdfamF2YV9GT1VORD1UUlVFCistLSBTV0lHX3B5dGhvbl9GT1VORD1UUlVFCistLSBTV0lHX1BFUkxfRk9VTkQ9CistLSBDb25maWd1cmluZyBkb25lCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9jb21wb25lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvY29tcG9uZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzlhODFlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvY29tcG9uZW50cy5jbWFrZQpAQCAtMCwwICsxLDkgQEAKKyMgTm90ZSB0aGF0ICdwZXJsJyB3aWxsIG5vdCBiZSBmb3VuZCBiZWNhdXNlIGl0IGlzIG5vdCBsb3dlcmNhc2UuCitmaW5kX3BhY2thZ2UoU1dJRyBSRVFVSVJFRAorICBDT01QT05FTlRTIGphdmEKKyAgT1BUSU9OQUxfQ09NUE9ORU5UUyBweXRob24gUEVSTCkKKworbWVzc2FnZShTVEFUVVMgIlNXSUdfVkVSU0lPTj0nJHtTV0lHX1ZFUlNJT059JyIpCitmb3JlYWNoKF9sYW5nIGphdmEgcHl0aG9uIFBFUkwpCisgIG1lc3NhZ2UoU1RBVFVTICJTV0lHXyR7X2xhbmd9X0ZPVU5EPSR7U1dJR18ke19sYW5nfV9GT1VORH0iKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzNzUzMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK0NvdWxkIE5PVCBmaW5kIFNXSUcgXChtaXNzaW5nOiBpbnZhbGlkXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDA1YWU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvbWlzc2luZy1jb21wb25lbnRzLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorZmluZF9wYWNrYWdlKFNXSUcgUkVRVUlSRUQKKyAgQ09NUE9ORU5UUyBpbnZhbGlkCisgIE9QVElPTkFMX0NPTVBPTkVOVFMgYWxzb2ludmFsaWQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4LWJ1aWxkLWZpbmFsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeC1idWlsZC1maW5hbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmZlNmI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeC1idWlsZC1maW5hbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ1IEBACitpbmNsdWRlKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4SW5mby5jbWFrZSIpCisKK2dldF9maWxlbmFtZV9jb21wb25lbnQoZnJhbWV3b3JrX2xvY2F0aW9uICIke2ZyYW1ld29ya19kaXJ9IiBESVJFQ1RPUlkpCitzZXQobm9uX2V4aXN0ZW50X2RlYnVnX2ZyYW1ld29ya19kaXIgIiR7ZnJhbWV3b3JrX2xvY2F0aW9ufS8ke3RhcmdldF9maWxlX25hbWV9X2RlYnVnLmZyYW1ld29yayIpCitzZXQoZnJhbWV3b3JrX3Jlc291cmNlcyAiJHtmcmFtZXdvcmtfZGlyfS9SZXNvdXJjZXMiKQorc2V0KHBsaXN0X2ZpbGUgIiR7ZnJhbWV3b3JrX3Jlc291cmNlc30vSW5mby5wbGlzdCIpCisKK3NldChzeW1saW5rX3JlbGVhc2VfcGF0aCAiJHtmcmFtZXdvcmtfZGlyfS8ke3RhcmdldF9maWxlX25hbWV9IikKK3NldChmcmFtZXdvcmtfcmVsZWFzZV9wYXRoICIke2ZyYW1ld29ya19kaXJ9L1ZlcnNpb25zL0EvJHt0YXJnZXRfZmlsZV9uYW1lfSIpCisKKyMgV2hlbiB1c2luZyBhIG11bHRpIGNvbmZpZyBnZW5lcmF0b3IgKGxpa2UgTmluamEgTXVsdGktQ29uZmlnIGFuZCBYY29kZSksCisjIHRoZSBwb3N0Zml4IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZGVidWcgZnJhbWV3b3JrIGxpYnJhcnkgbmFtZSBhbmQgdGhlIHN5bWxpbmsgbmFtZS4KKyMgRm9yIHNpbmdsZSBjb25maWcgZ2VuZXJhdG9ycywgdGhlIG5hbWUgc3RheXMgdGhlIHNhbWUgYXMgdGhlIHRoZSByZWxlYXNlIGZyYW1ld29yay4KK2lmKGlzX211bHRpX2NvbmZpZykKKyAgICBzZXQoc3ltbGlua19kZWJ1Z19wYXRoICIke2ZyYW1ld29ya19kaXJ9LyR7dGFyZ2V0X2ZpbGVfbmFtZX1fZGVidWciKQorICAgIHNldChmcmFtZXdvcmtfZGVidWdfcGF0aCAiJHtmcmFtZXdvcmtfZGlyfS9WZXJzaW9ucy9BLyR7dGFyZ2V0X2ZpbGVfbmFtZX1fZGVidWciKQorZWxzZSgpCisgICAgc2V0KHN5bWxpbmtfZGVidWdfcGF0aCAiJHtmcmFtZXdvcmtfZGlyfS8ke3RhcmdldF9maWxlX25hbWV9IikKKyAgICBzZXQoZnJhbWV3b3JrX2RlYnVnX3BhdGggIiR7ZnJhbWV3b3JrX2Rpcn0vVmVyc2lvbnMvQS8ke3RhcmdldF9maWxlX25hbWV9IikKK2VuZGlmKCkKKworaWYoTk9UIElTX0RJUkVDVE9SWSAke2ZyYW1ld29ya19kaXJ9KQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkZyYW1ld29yayBkaXIgbm90IGZvdW5kIGF0ICR7ZnJhbWV3b3JrX2Rpcn0iKQorZW5kaWYoKQorCitpZihJU19ESVJFQ1RPUlkgJHtub25fZXhpc3RlbnRfZGVidWdfZnJhbWV3b3JrX2Rpcn0pCisgIG1lc3NhZ2UoU0VORF9FUlJPUgorICAgICAgIkEgZnJhbWV3b3JrIGRpciB3aXRoIGEgZGVidWcgc3VmZml4IHNob3VsZCBub3QgZXhpc3QgYXQgJHtub25fZXhpc3RlbnRfZGVidWdfZnJhbWV3b3JrX2Rpcn0iKQorZW5kaWYoKQorCitpZihOT1QgSVNfU1lNTElOSyAiJHtzeW1saW5rX3JlbGVhc2VfcGF0aH0iKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlJlbGVhc2UgZnJhbWV3b3JrIHN5bWxpbmsgbm90IGZvdW5kIGF0ICR7c3ltbGlua19yZWxlYXNlX3BhdGh9IikKK2VuZGlmKCkKKworaWYoTk9UIElTX1NZTUxJTksgIiR7c3ltbGlua19kZWJ1Z19wYXRofSIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRGVidWcgZnJhbWV3b3JrIHN5bWxpbmsgbm90IGZvdW5kIGF0ICR7c3ltbGlua19kZWJ1Z19wYXRofSIpCitlbmRpZigpCisKK2lmKE5PVCBFWElTVFMgIiR7ZnJhbWV3b3JrX3JlbGVhc2VfcGF0aH0iKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlJlbGVhc2UgZnJhbWV3b3JrIG5vdCBmb3VuZCBhdCAke2ZyYW1ld29ya19yZWxlYXNlX3BhdGh9IikKK2VuZGlmKCkKKworaWYoTk9UIEVYSVNUUyAiJHtmcmFtZXdvcmtfZGVidWdfcGF0aH0iKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkRlYnVnIGZyYW1ld29yayBub3QgZm91bmQgYXQgJHtmcmFtZXdvcmtfZGVidWdfcGF0aH0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlNjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXguY21ha2UKQEAgLTAsMCArMSwyNSBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChDTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfREVCVUcgIl9kZWJ1ZyIpCisKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vYmluKQorc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vYmluKQorc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKKworc2V0KHRhcmdldF9uYW1lICJteWxpYiIpCithZGRfbGlicmFyeSgke3RhcmdldF9uYW1lfSBTSEFSRUQgZm9vLmMpCitzZXRfcHJvcGVydHkoVEFSR0VUICR7dGFyZ2V0X25hbWV9IFBST1BFUlRZIEZSQU1FV09SSyBPTikKK2dldF9wcm9wZXJ0eShpc19tdWx0aV9jb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisKK3N0cmluZyhBUFBFTkQgY29udGVudAorICAgICAgICJzZXQoaXNfbXVsdGlfY29uZmlnIFwiJHtpc19tdWx0aV9jb25maWd9XCIpXG4iCisgICAgICAgInNldChmcmFtZXdvcmtfZGlyIFwiJDxUQVJHRVRfQlVORExFX0RJUjoke3RhcmdldF9uYW1lfT5cIilcbiIKKyAgICAgICAic2V0KHRhcmdldF9maWxlX25hbWUgJHt0YXJnZXRfbmFtZX0pXG4iKQorZmlsZShHRU5FUkFURSBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeEluZm8uY21ha2UKKyAgICAgQ09OVEVOVCAiJHtjb250ZW50fSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA5NjVmYmY0Li42ZWU2MWEzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTQ1LDMgKzQ1LDM5IEBACiBmcmFtZXdvcmtfdHlwZV90ZXN0KGlvcyBTVEFUSUMgWUVTKQogZnJhbWV3b3JrX3R5cGVfdGVzdChvc3ggU0hBUkVEIFlFUykKIGZyYW1ld29ya190eXBlX3Rlc3Qob3N4IFNUQVRJQyBZRVMpCisKK2Z1bmN0aW9uKGZyYW1ld29ya19tdWx0aV9jb25maWdfcG9zdGZpeF90ZXN0KQorICAgIHNldChjb25maWd1cmVfbmFtZSAiRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4IikKKyAgICBzZXQoYnVpbGRfbmFtZSAiJHtjb25maWd1cmVfbmFtZX0tYnVpbGQtaW50ZXJtZWRpYXRlIikKKyAgICBzZXQoYnVpbGRfbmFtZV9maW5hbCAiJHtjb25maWd1cmVfbmFtZX0tYnVpbGQtZmluYWwiKQorCisgICAgaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphIE11bHRpLUNvbmZpZyIpCisgICAgICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMKKyAgICAgICAgICAgICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorICAgIGVsc2VpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiWGNvZGUiKQorICAgICAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TCisgICAgICAgICAgICAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZSIpCisgICAgZWxzZSgpCisgICAgICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyIpCisgICAgZW5kaWYoKQorCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7Y29uZmlndXJlX25hbWV9KQorICAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisKKyAgICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgICAgcnVuX2NtYWtlKCR7Y29uZmlndXJlX25hbWV9KQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworICAgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSBNdWx0aS1Db25maWciKQorICAgICAgICBydW5fY21ha2VfY29tbWFuZCgke2J1aWxkX25hbWVfZmluYWx9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0IGFsbDphbGwpCisgICAgZWxzZWlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJYY29kZSIpCisgICAgICAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7YnVpbGRfbmFtZX0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLS1jb25maWcgUmVsZWFzZSkKKyAgICAgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtidWlsZF9uYW1lfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKKyAgICAgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtidWlsZF9uYW1lX2ZpbmFsfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKKyAgICBlbHNlKCkKKyAgICAgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtidWlsZF9uYW1lX2ZpbmFsfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKKyAgICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK2ZyYW1ld29ya19tdWx0aV9jb25maWdfcG9zdGZpeF90ZXN0KCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjNmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLVRBUkdFVF9QUk9QRVJUWS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1UQVJHRVRfUFJPUEVSVFkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzZGRkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1UQVJHRVRfUFJPUEVSVFkuY21ha2UKQEAgLTAsMCArMSwxNyBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9saWJyYXJ5IChsaWIgU0hBUkVEIGVtcHR5LmMpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobGliIFBST1BFUlRJRVMKKyAgSU5DTFVERV9ESVJFQ1RPUklFUyAiJDwkPENPTVBJTEVfTEFOR1VBR0U6Qz46L3Vzci9pbmNsdWRlPiIKKyAgQ09NUElMRV9ERUZJTklUSU9OUyAiJDwkPENPTVBJTEVfTEFOR1VBR0U6Qz46REVGPiIKKyAgQ09NUElMRV9PUFRJT05TICIkPCQ8Q09NUElMRV9MQU5HVUFHRTpDPjotTz4iKQorCithZGRfY3VzdG9tX3RhcmdldChkcml2ZQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsSU5DTFVERV9ESVJFQ1RPUklFUz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxUQVJHRVRfUFJPUEVSVFk6bGliLENPTVBJTEVfREVGSU5JVElPTlM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX1BST1BFUlRZOmxpYixDT01QSUxFX09QVElPTlM+KQorCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGRyaXZlIFBSRV9CVUlMRAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsSU5DTFVERV9ESVJFQ1RPUklFUz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxUQVJHRVRfUFJPUEVSVFk6bGliLENPTVBJTEVfREVGSU5JVElPTlM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX1BST1BFUlRZOmxpYixDT01QSUxFX09QVElPTlM+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3Qtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS11bmtub3duLWxhbmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtdW5rbm93bi1sYW5nLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdW5rbm93bi1sYW5nLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtdW5rbm93bi1sYW5nLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTVlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDExIEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldCkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZCkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWluc3RhbGwpCitydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcykKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnkpCitydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdCkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLXVua25vd24tbGFuZykKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLVRBUkdFVF9QUk9QRVJUWSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvZW1wdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzAzMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtVEFSR0VUX1BST1BFUlRZLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELVRBUkdFVF9QUk9QRVJUWS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTcxOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELVRBUkdFVF9QUk9QRVJUWS5jbWFrZQpAQCAtMCwwICsxLDE3IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkgKGxpYiBTSEFSRUQgZW1wdHkuYykKK3NldF90YXJnZXRfcHJvcGVydGllcyhsaWIgUFJPUEVSVElFUworICBJTkNMVURFX0RJUkVDVE9SSUVTICIkPCQ8Q09NUElMRV9MQU5HX0FORF9JRDpDLEdOVT46L3Vzci9pbmNsdWRlPiIKKyAgQ09NUElMRV9ERUZJTklUSU9OUyAiJDwkPENPTVBJTEVfTEFOR19BTkRfSUQ6QyxHTlU+OkRFRj4iCisgIENPTVBJTEVfT1BUSU9OUyAiJDwkPENPTVBJTEVfTEFOR19BTkRfSUQ6QyxHTlU+Oi1PPiIpCisKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8VEFSR0VUX1BST1BFUlRZOmxpYixJTkNMVURFX0RJUkVDVE9SSUVTPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsQ09NUElMRV9ERUZJTklUSU9OUz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxUQVJHRVRfUFJPUEVSVFk6bGliLENPTVBJTEVfT1BUSU9OUz4pCisKK2FkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgZHJpdmUgUFJFX0JVSUxECisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8VEFSR0VUX1BST1BFUlRZOmxpYixJTkNMVURFX0RJUkVDVE9SSUVTPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsQ09NUElMRV9ERUZJTklUSU9OUz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxUQVJHRVRfUFJPUEVSVFk6bGliLENPTVBJTEVfT1BUSU9OUz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnkuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3Qtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC11bmtub3duLWxhbmcuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC11bmtub3duLWxhbmcuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC11bmtub3duLWxhbmcuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiZDA1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0KQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbCkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUpCitydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeSkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0KQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtdW5rbm93bi1sYW5nKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtVEFSR0VUX1BST1BFUlRZKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0NmM0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTgpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIxNTgzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlOlswLTldKyBcKGFkZF9jdXN0b21fY29tbWFuZFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8REVWSUNFX0xJTks+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWIzNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUpCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGRyaXZlIFBSRV9CVUlMRAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPERFVklDRV9MSU5LPgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGQzMDQzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IERFVklDRV9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlOlswLTldKyBcKGFkZF9jdXN0b21fdGFyZ2V0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxERVZJQ0VfTElOSz4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV90YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTcyOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKQEAgLTAsMCArMSwzIEBACithZGRfY3VzdG9tX3RhcmdldChkcml2ZQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPERFVklDRV9MSU5LPgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmI1OTVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IERFVklDRV9MSU5LLWFkZF9leGVjdXRhYmxlLmNtYWtlOlswLTldKyBcKGFkZF9leGVjdXRhYmxlXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxERVZJQ0VfTElOSzplbXB0eS5jPgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9leGVjdXRhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OWY4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZS5jbWFrZQpAQCAtMCwwICsxIEBACithZGRfZXhlY3V0YWJsZShlbXB0eSAkPERFVklDRV9MSU5LOmVtcHR5LmM+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfbGlicmFyeS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfbGlicmFyeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2xpYnJhcnktc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDc3ZTAwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2xpYnJhcnktc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IERFVklDRV9MSU5LLWFkZF9saWJyYXJ5LmNtYWtlOlswLTldKyBcKGFkZF9saWJyYXJ5XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxERVZJQ0VfTElOSzplbXB0eS5jPgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfbGlicmFyeS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9saWJyYXJ5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjODU0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfbGlicmFyeS5jbWFrZQpAQCAtMCwwICsxIEBACithZGRfbGlicmFyeShlbXB0eSAkPERFVklDRV9MSU5LOmVtcHR5LmM+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX3Rlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTU2MWZlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX3Rlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IERFVklDRV9MSU5LLWFkZF90ZXN0LmNtYWtlOlswLTldKyBcKGFkZF90ZXN0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxERVZJQ0VfTElOSz4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q2YmExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX3Rlc3QuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luY2x1ZGUoQ1Rlc3QpCitlbmFibGVfdGVzdGluZygpCisKK2FkZF90ZXN0KE5BTUUgZHVtbXkgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxERVZJQ0VfTElOSz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstaW5zdGFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWluc3RhbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstaW5zdGFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstaW5zdGFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjMwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1pbnN0YWxsLXN0ZGVyci50eHQKQEAgLTAsMCArMSw3IEBACitDTWFrZSBFcnJvcjoKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOmVtcHR5PgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstaW5zdGFsbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWluc3RhbGwuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2ZGJlZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWluc3RhbGwuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luc3RhbGwoRklMRVMKKyAgJDxERVZJQ0VfTElOSzplbXB0eT4KKyAgREVTVElOQVRJT04gc3JjCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWxpbmtfZGVwZW5kcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1saW5rX2RlcGVuZHMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstbGlua19kZXBlbmRzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1saW5rX2RlcGVuZHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmEwNTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstbGlua19kZXBlbmRzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw3IEBACitDTWFrZSBFcnJvcjoKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOmxpYj4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWxpbmtfZGVwZW5kcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWxpbmtfZGVwZW5kcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTI5NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstbGlua19kZXBlbmRzLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkobGliIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIGVtcHR5IFBST1BFUlRZIExJTktfREVQRU5EUyAkPERFVklDRV9MSU5LOmxpYj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTg1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOkRFRj4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhOGVmYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhlbXB0eSBQUklWQVRFICQ8REVWSUNFX0xJTks6REVGPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGNhNGYyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfY29tcGlsZV9vcHRpb25zXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxERVZJQ0VfTElOSzotT1BUPgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWNiN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhlbXB0eSBQUklWQVRFICQ8REVWSUNFX0xJTks6LU9QVD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMTY0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOi9ESVI+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNjYzQxMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhlbXB0eSBQUklWQVRFICQ8REVWSUNFX0xJTks6L0RJUj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjQ5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOi9ESVI+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwZDI3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkobGliIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyhlbXB0eSBQUklWQVRFICQ8REVWSUNFX0xJTks6L0RJUj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDM2ZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBERVZJQ0VfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxERVZJQ0VfTElOSzpsaWI+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzFmNTYyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkobGliIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZW1wdHkgUFJJVkFURSAkPERFVklDRV9MSU5LOmxpYj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjYwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X3NvdXJjZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOmVtcHR5LmM+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9zb3VyY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiYWM5ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9zb3VyY2VzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorYWRkX2xpYnJhcnkoZW1wdHkpCit0YXJnZXRfc291cmNlcyhlbXB0eSBQUklWQVRFICQ8REVWSUNFX0xJTks6ZW1wdHkuYz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0NDYwMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDE3IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoREVWSUNFX0xJTkstYWRkX2N1c3RvbV90YXJnZXQpCitydW5fY21ha2UoREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kKQorcnVuX2NtYWtlKERFVklDRV9MSU5LLWluc3RhbGwpCitydW5fY21ha2UoREVWSUNFX0xJTkstYWRkX2V4ZWN1dGFibGUpCitydW5fY21ha2UoREVWSUNFX0xJTkstYWRkX2xpYnJhcnkpCitydW5fY21ha2UoREVWSUNFX0xJTkstYWRkX3Rlc3QpCitydW5fY21ha2UoREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMpCitydW5fY21ha2UoREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMpCitydW5fY21ha2UoREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucykKK3J1bl9jbWFrZShERVZJQ0VfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcykKK3J1bl9jbWFrZShERVZJQ0VfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMpCitydW5fY21ha2UoREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMpCitpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiKE5pbmphfE1ha2VmaWxlKSIpCisgIHJ1bl9jbWFrZShERVZJQ0VfTElOSy1saW5rX2RlcGVuZHMpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvZW1wdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvZW1wdHkuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwMjVkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLWNoZWNrLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtY2hlY2suY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24xLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjIuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24yLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDRhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDExIEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnKQorcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldCkKK3J1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0KQorcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEpCitydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMikKK3J1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTCkKK3J1bl9jbWFrZShHRU5FWF9FVkFMLXJlY3Vyc2lvbjEpCitydW5fY21ha2UoR0VORVhfRVZBTC1yZWN1cnNpb24yKQorcnVuX2NtYWtlKEdFTkVYX0VWQUwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1jaGVjay5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1jaGVjay5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmcuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1uby10YXJnZXQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby10YXJnZXQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1uby10YXJnZXQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjIuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ2YzRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTgpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQ0MWI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2U6WzAtOV0rIFwoYWRkX2N1c3RvbV9jb21tYW5kXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmUzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlKQorYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBkcml2ZSBQUkVfQlVJTEQKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxIT1NUX0xJTks+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0MjAyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZTpbMC05XSsgXChhZGRfY3VzdG9tX3RhcmdldFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8SE9TVF9MSU5LPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjMDcyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKQEAgLTAsMCArMSwzIEBACithZGRfY3VzdG9tX3RhcmdldChkcml2ZQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPEhPU1RfTElOSz4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzk1NTE1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLWFkZF9leGVjdXRhYmxlLmNtYWtlOlswLTldKyBcKGFkZF9leGVjdXRhYmxlXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6ZW1wdHkuYz4KKworICBcJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9leGVjdXRhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Zjc0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9leGVjdXRhYmxlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2FkZF9leGVjdXRhYmxlKGVtcHR5ICQ8SE9TVF9MSU5LOmVtcHR5LmM+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2xpYnJhcnktcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfbGlicmFyeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfbGlicmFyeS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDI3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBIT1NUX0xJTkstYWRkX2xpYnJhcnkuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPEhPU1RfTElOSzplbXB0eS5jPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfbGlicmFyeS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2xpYnJhcnkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxMzVhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2xpYnJhcnkuY21ha2UKQEAgLTAsMCArMSBAQAorYWRkX2xpYnJhcnkoZW1wdHkgJDxIT1NUX0xJTks6ZW1wdHkuYz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX3Rlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF90ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF90ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyYWQyMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX3Rlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy1hZGRfdGVzdC5jbWFrZTpbMC05XSsgXChhZGRfdGVzdFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8SE9TVF9MSU5LPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX3Rlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0NzJhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX3Rlc3QuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luY2x1ZGUoQ1Rlc3QpCitlbmFibGVfdGVzdGluZygpCisKK2FkZF90ZXN0KE5BTUUgZHVtbXkgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxIT1NUX0xJTks+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstaW5zdGFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstaW5zdGFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWluc3RhbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstaW5zdGFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjVlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWluc3RhbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDcgQEAKK0NNYWtlIEVycm9yOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8SE9TVF9MSU5LOmVtcHR5PgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstaW5zdGFsbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstaW5zdGFsbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGRmZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1pbnN0YWxsLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitpbnN0YWxsKEZJTEVTCisgICQ8SE9TVF9MSU5LOmVtcHR5PgorICBERVNUSU5BVElPTiBzcmMKKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstbGlua19kZXBlbmRzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstbGlua19kZXBlbmRzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjhiODIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorQ01ha2UgRXJyb3I6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6bGliPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstbGlua19kZXBlbmRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1saW5rX2RlcGVuZHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwMmY0MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstbGlua19kZXBlbmRzLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkobGliIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIGVtcHR5IFBST1BFUlRZIExJTktfREVQRU5EUyAkPEhPU1RfTElOSzpsaWI+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjNjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBIT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPEhPU1RfTElOSzpERUY+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjMTMwZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKGVtcHR5IFBSSVZBVEUgJDxIT1NUX0xJTks6REVGPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNWJiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlOlswLTldKyBcKHRhcmdldF9jb21waWxlX29wdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPEhPU1RfTElOSzotT1BUPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWZlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZW1wdHkgUFJJVkFURSAkPEhPU1RfTElOSzotT1BUPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTI2MzRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLmNtYWtlOlswLTldKyBcKHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6L0RJUj4KKworICBcJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjEwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhlbXB0eSBQUklWQVRFICQ8SE9TVF9MSU5LOi9ESVI+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMjVhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBIT1NUX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPEhPU1RfTElOSzovRElSPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0ODhlZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2UKQEAgLTAsMCArMSw3IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShsaWIgZW1wdHkuYykKKworYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzKGVtcHR5IFBSSVZBVEUgJDxIT1NUX0xJTks6L0RJUj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDQ0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfbGlua19saWJyYXJpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPEhPU1RfTElOSzpsaWI+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGM5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy5jbWFrZQpAQCAtMCwwICsxLDcgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9saWJyYXJ5KGxpYiBlbXB0eS5jKQorCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGVtcHR5IFBSSVZBVEUgJDxIT1NUX0xJTks6bGliPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTI1NTY4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLXRhcmdldF9zb3VyY2VzLmNtYWtlOlswLTldKyBcKHRhcmdldF9zb3VyY2VzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6ZW1wdHkuYz4KKworICBcJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X3NvdXJjZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9zb3VyY2VzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhN2JmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9zb3VyY2VzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorYWRkX2xpYnJhcnkoZW1wdHkpCit0YXJnZXRfc291cmNlcyhlbXB0eSBQUklWQVRFICQ8SE9TVF9MSU5LOmVtcHR5LmM+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YTdjNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxNyBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKEhPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldCkKK3J1bl9jbWFrZShIT1NUX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kKQorcnVuX2NtYWtlKEhPU1RfTElOSy1pbnN0YWxsKQorcnVuX2NtYWtlKEhPU1RfTElOSy1hZGRfZXhlY3V0YWJsZSkKK3J1bl9jbWFrZShIT1NUX0xJTkstYWRkX2xpYnJhcnkpCitydW5fY21ha2UoSE9TVF9MSU5LLWFkZF90ZXN0KQorcnVuX2NtYWtlKEhPU1RfTElOSy10YXJnZXRfc291cmNlcykKK3J1bl9jbWFrZShIT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMpCitydW5fY21ha2UoSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMpCitydW5fY21ha2UoSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKQorcnVuX2NtYWtlKEhPU1RfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMpCitydW5fY21ha2UoSE9TVF9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzKQoraWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIihOaW5qYXxNYWtlZmlsZSkiKQorICBydW5fY21ha2UoSE9TVF9MSU5LLWxpbmtfZGVwZW5kcykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ2YzRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE4KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjBkNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2U6MiBcKGFkZF9jdXN0b21fY29tbWFuZFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM3OGMxYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKQEAgLTAsMCArMSw0IEBACithZGRfY3VzdG9tX3RhcmdldChkcml2ZSkKK2FkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgZHJpdmUgUFJFX0JVSUxECisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8TElOS19MQU5HVUFHRT4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZGE2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQuY21ha2U6MSBcKGFkZF9jdXN0b21fdGFyZ2V0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiNmM3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8TElOS19MQU5HVUFHRT4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZGM4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2U6MSBcKGFkZF9leGVjdXRhYmxlXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3NmIzOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS5jbWFrZQpAQCAtMCwwICsxIEBACithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS4kPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhY2RlYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZToxIFwoYWRkX2xpYnJhcnlcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTNmODJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9saWJyYXJ5LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2FkZF9saWJyYXJ5KGVtcHR5IGVtcHR5LiQ8TElOS19MQU5HVUFHRT4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF90ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjJlZmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF90ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLWFkZF90ZXN0LmNtYWtlOjUgXChhZGRfdGVzdFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF90ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDU0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3QuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luY2x1ZGUoQ1Rlc3QpCitlbmFibGVfdGVzdGluZygpCisKK2FkZF90ZXN0KE5BTUUgZHVtbXkgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxMSU5LX0xBTkdVQUdFPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkMjZkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUuY21ha2U6MyBcKGZpbGVcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWZpbGVfZ2VuZXJhdGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5Yjg4MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCBDKQorCitmaWxlKEdFTkVSQVRFCisgIE9VVFBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vb3V0cHV0LnR4dAorICBDT05URU5UICJMQU5HX0lTXyQ8TElOS19MQU5HVUFHRT5cbiIKKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1pbnN0YWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1pbnN0YWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYWZjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0NNYWtlIEVycm9yOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorCisKK0NNYWtlIEdlbmVyYXRlIHN0ZXAgZmFpbGVkLiAgQnVpbGQgZmlsZXMgY2Fubm90IGJlIHJlZ2VuZXJhdGVkIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1pbnN0YWxsLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWluc3RhbGwuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzYzBiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1pbnN0YWxsLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitpbnN0YWxsKEZJTEVTCisgIGVtcHR5LiQ8TElOS19MQU5HVUFHRT4KKyAgREVTVElOQVRJT04gc3JjCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODEyMWNjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlOjIgXCh0YXJnZXRfc291cmNlc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzRjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMuY21ha2UKQEAgLTAsMCArMSwyIEBACithZGRfbGlicmFyeShlbXB0eSkKK3RhcmdldF9zb3VyY2VzKGVtcHR5IFBSSVZBVEUgZW1wdHkuJDxMSU5LX0xBTkdVQUdFPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS11bmtub3duLWxhbmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtdW5rbm93bi1sYW5nLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTQ3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtdW5rbm93bi1sYW5nLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfbGlua19vcHRpb25zKGVtcHR5IFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjokPFRBUkdFVF9FWElTVFM6dG9vLG1hbnkscGFyYW1ldGVycz4+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTNhODNiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEuY21ha2U6NCBcKHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFOkM+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYjdjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OkRFRj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTQzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UyLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi5jbWFrZTo0IFwodGFyZ2V0X2NvbXBpbGVfb3B0aW9uc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRTpDPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzYxODk3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+Oi1PUFQ+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjBlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy5jbWFrZTo0IFwodGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U6Qz4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhNzJhMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGVtcHR5IFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46L0RJUj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzNjkxMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDggQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LmNtYWtlOjcgXCh0YXJnZXRfbGlua19saWJyYXJpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRT4gaXMgbm90IHN1cHBvcnRlZCBpbiBsaW5rIGxpYnJhcmllcyBleHByZXNzaW9uLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYWFiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQuY21ha2UKQEAgLTAsMCArMSw3IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShsaWJDIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZW1wdHkgUFJJVkFURSBsaWIkPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YwYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxNSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS1pbnN0YWxsKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZSkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWFkZF9saWJyYXJ5KQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtYWRkX3Rlc3QpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS11bmtub3duLWxhbmcpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTIpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDZjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTgpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjYyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZToyIFwoYWRkX2N1c3RvbV9jb21tYW5kXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkxBTkcsSUQ+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmOTIzMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKQEAgLTAsMCArMSw0IEBACithZGRfY3VzdG9tX3RhcmdldChkcml2ZSkKK2FkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgZHJpdmUgUFJFX0JVSUxECisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8TElOS19MQU5HX0FORF9JRDpMQU5HLElEPgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0OWM0NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZToyIFwoYWRkX2N1c3RvbV90YXJnZXRcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6TEFORyxJRD4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmNzZiYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxMSU5LX0xBTkdfQU5EX0lEOkxBTkcsSUQ+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTUzMTJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlOjEgXChhZGRfZXhlY3V0YWJsZVwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLE1TVkM+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmM2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUuY21ha2UKQEAgLTAsMCArMSw1IEBACithZGRfZXhlY3V0YWJsZShlbXB0eSBtYWluLmMKKyAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxNU1ZDPjplbXB0eS5jPgorICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT46ZW1wdHkyLmM+CisgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQ2xhbmc+OmVtcHR5My5jPgorICAgICAgICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ2ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlOjIgXChhZGRfbGlicmFyeVwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLE1TVkM+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTk5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnkuY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2FkZF9saWJyYXJ5KGVtcHR5IGVtcHR5LiQ8TElOS19MQU5HX0FORF9JRDpDLE1TVkM+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyOTQ5MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC5jbWFrZTo1IFwoYWRkX3Rlc3RcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEdOVT4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3MDBkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworaW5jbHVkZShDVGVzdCkKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX3Rlc3QoTkFNRSBkdW1teSBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEdOVT4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2I1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLmNtYWtlOjMgXChmaWxlXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWZpbGVfZ2VuZXJhdGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdjMWJkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCBDKQorCitmaWxlKEdFTkVSQVRFCisgIE9VVFBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vb3V0cHV0LnR4dAorICBDT05URU5UICJMQU5HX0lTXyQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPjpDPlxuIgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1Zjk3NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMCBAQAorQ01ha2UgRXJyb3I6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkMsTVNWQz4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCisKKworQ01ha2UgR2VuZXJhdGUgc3RlcCBmYWlsZWQuICBCdWlsZCBmaWxlcyBjYW5ub3QgYmUgcmVnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtaW5zdGFsbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY5MzIzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luc3RhbGwoRklMRVMKKyAgZW1wdHkuJDxMSU5LX0xBTkdfQU5EX0lEOkMsTVNWQz4KKyAgREVTVElOQVRJT04gc3JjCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODY2MDJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw4IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlOjIgXCh0YXJnZXRfc291cmNlc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRD4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEPiBleHByZXNzaW9uIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBwYXJhbWV0ZXJzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNWZhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMuY21ha2UKQEAgLTAsMCArMSwyIEBACithZGRfbGlicmFyeShlbXB0eSkKK3RhcmdldF9zb3VyY2VzKGVtcHR5IFBSSVZBVEUgZW1wdHkuJDxMSU5LX0xBTkdfQU5EX0lEPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC11bmtub3duLWxhbmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtdW5rbm93bi1sYW5nLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZGQzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtdW5rbm93bi1sYW5nLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfbGlua19vcHRpb25zKGVtcHR5IFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEdOVT46JDxUQVJHRVRfRVhJU1RTOnRvbyxtYW55LHBhcmFtZXRlcnM+PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2MTFjMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTEtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLmNtYWtlOjQgXCh0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9uc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThlM2I0NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTEuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKGVtcHR5IFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+OkRFRj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYmRjYjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UyLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi5jbWFrZTo0IFwodGFyZ2V0X2NvbXBpbGVfb3B0aW9uc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThkYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPjotT1BUPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzRhMmVhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMuY21ha2U6NCBcKHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDMwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPjovRElSPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiNjU5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0KQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtaW5zdGFsbCkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUpCitydW5fY21ha2UoTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeSkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0KQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtdW5rbm93bi1sYW5nKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UyKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvZW1wdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2RlODQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvT1VUUFVUX05BTUUtcmVjdXJzaW9uLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24uY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZWM2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwzMSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKFRBUkdFVF9GSUxFLXJlY3Vyc2lvbikKK3J1bl9jbWFrZShPVVRQVVRfTkFNRS1yZWN1cnNpb24pCitydW5fY21ha2UoVEFSR0VUX0ZJTEVfUFJFRklYKQorcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1BSRUZJWC1pbXBvcnRlZC10YXJnZXQpCitydW5fY21ha2UoVEFSR0VUX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQpCitydW5fY21ha2UoVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0KQorcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1NVRkZJWCkKK3J1bl9jbWFrZShUQVJHRVRfRklMRV9TVUZGSVgtaW1wb3J0ZWQtdGFyZ2V0KQorcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0KQorcnVuX2NtYWtlKFRBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldCkKK3J1bl9jbWFrZV93aXRoX29wdGlvbnMoVEFSR0VUX0ZJTEVfQkFTRV9OQU1FIC1EQ01BS0VfQlVJTERfVFlQRTpTVFJJTkc9RGVidWcpCitydW5fY21ha2Vfd2l0aF9vcHRpb25zKFRBUkdFVF9GSUxFX0JBU0VfTkFNRS1pbXBvcnRlZC10YXJnZXQgLURDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1EZWJ1ZykKK3J1bl9jbWFrZShUQVJHRVRfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldCkKK3J1bl9jbWFrZShUQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQpCitydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVIpCitydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUikKK3J1bl9jbWFrZShJbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUikKK3J1bl9jbWFrZShJbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSKQorcnVuX2NtYWtlKEltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRSkKK3J1bl9jbWFrZShJbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FKQoraWYoTElOS0VSX1NVUFBPUlRTX1BEQikKKyAgcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRSkKKyAgcnVuX2NtYWtlKFZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRSkKKyAgcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUpCisgIHJ1bl9jbWFrZShWYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FKQorZWxzZSgpCisgIHJ1bl9jbWFrZShOb25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRSkKKyAgcnVuX2NtYWtlKE5vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRS1yZWN1cnNpb24tcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRS1yZWN1cnNpb24tcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRS1yZWN1cnNpb24tc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRS1yZWN1cnNpb24tc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1jaGVjay5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1pbXBvcnRlZC10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1pbXBvcnRlZC10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1pbXBvcnRlZC10YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVgtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtY2hlY2suY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLWNoZWNrLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtY2hlY2suY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1BSRUZJWC1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVgtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVgtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVguY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVguY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLWNoZWNrLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1jaGVjay5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLWNoZWNrLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9TVUZGSVgtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLWltcG9ydGVkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLWltcG9ydGVkLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLWltcG9ydGVkLXRhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1jaGVjay5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtY2hlY2suY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1jaGVjay5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvZW1wdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvZW1wdHkuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdGVFeHBvcnRIZWFkZXIvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdGVFeHBvcnRIZWFkZXIvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDE4YzMzNDAuLmIzOTc3ZjEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRlRXhwb3J0SGVhZGVyL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0ZUV4cG9ydEhlYWRlci9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTI2LDQgKzI2LDEyIEBACiAgIGVuZGZvcmVhY2goKQogZW5kZnVuY3Rpb24oKQogCisjIHJlbW92ZSB0aGVzZSBmbGFncyBmcm9tIHRoZSBlbnZpb3JubWVudCBpZiB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc28gdGhlIHRlc3RzIHJ1biB0aGUgY29ycmVjdCBlbnYKK3NldChlbnZfY3h4X2ZsYWdzICRFTlZ7Q1hYRkxBR1N9KQoraWYoZW52X2N4eF9mbGFncykKKyAgc3RyaW5nKFJFUExBQ0UgIi1mdmlzaWJpbGl0eT1oaWRkZW4iICIiIGVudl9jeHhfZmxhZ3MgIiR7ZW52X2N4eF9mbGFnc30iKQorICBzdHJpbmcoUkVQTEFDRSAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIiAiIiBlbnZfY3h4X2ZsYWdzICIke2Vudl9jeHhfZmxhZ3N9IikKKyAgc2V0KEVOVntDWFhGTEFHU30gIiR7ZW52X2N4eF9mbGFnc30iKQorZW5kaWYoKQogcnVuX0dFSCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0ZUV4cG9ydEhlYWRlci9leHBvcnRoZWFkZXJfdGVzdC5jcHAgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0ZUV4cG9ydEhlYWRlci9leHBvcnRoZWFkZXJfdGVzdC5jcHAKaW5kZXggYmE3NzY3OS4uZGNhYTRmMiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdGVFeHBvcnRIZWFkZXIvZXhwb3J0aGVhZGVyX3Rlc3QuY3BwCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRlRXhwb3J0SGVhZGVyL2V4cG9ydGhlYWRlcl90ZXN0LmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAgICAgLy8gdHJhaWxpbmcgbnVsbCB0byB0aGUgc3RyaW5nIHRoYXQgd2UgbmVlZCB0byBzdHJpcCBiZWZvcmUgdGVzdGluZyBmb3IgYQogICAgIC8vIHRyYWlsaW5nIHNwYWNlLgogICAgIGlmIChyZWZMaW5lLnNpemUoKSAmJiByZWZMaW5lW3JlZkxpbmUuc2l6ZSgpIC0gMV0gPT0gMCkgewotICAgICAgcmVmTGluZSA9IHJlZkxpbmUuc3Vic3RyKDAsIHJlZkxpbmUuc2l6ZSgpIC0gMSk7CisgICAgICByZWZMaW5lLnJlc2l6ZShyZWZMaW5lLnNpemUoKSAtIDEpOwogICAgIH0KICAgICBpZiAodGVzdExpbmUuc2l6ZSgpICYmIHRlc3RMaW5lW3Rlc3RMaW5lLnNpemUoKSAtIDFdID09IDApIHsKLSAgICAgIHRlc3RMaW5lID0gdGVzdExpbmUuc3Vic3RyKDAsIHRlc3RMaW5lLnNpemUoKSAtIDEpOworICAgICAgdGVzdExpbmUucmVzaXplKHRlc3RMaW5lLnNpemUoKSAtIDEpOwogICAgIH0KICAgICAvLyBUaGUgcmVmZXJlbmNlIGZpbGVzIG5ldmVyIGhhdmUgdHJhaWxpbmcgc3BhY2VzOgogICAgIGlmICh0ZXN0TGluZS5zaXplKCkgJiYgdGVzdExpbmVbdGVzdExpbmUuc2l6ZSgpIC0gMV0gPT0gJyAnKSB7Ci0gICAgICB0ZXN0TGluZSA9IHRlc3RMaW5lLnN1YnN0cigwLCB0ZXN0TGluZS5zaXplKCkgLSAxKTsKKyAgICAgIHRlc3RMaW5lLnJlc2l6ZSh0ZXN0TGluZS5zaXplKCkgLSAxKTsKICAgICB9CiAgICAgaWYgKHJlZkxpbmUgIT0gdGVzdExpbmUpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiUmVmIGFuZCB0ZXN0IGFyZSBub3QgdGhlIHNhbWU6XG4gIFJlZjogIFwiIiA8PCByZWZMaW5lCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0JhZENPTkZJRy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9CYWRDT05GSUctc3RkZXJyLnR4dAppbmRleCA0MmRkMGNlLi4xMzBkZTJiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0JhZENPTkZJRy1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQmFkQ09ORklHLXN0ZGVyci50eHQKQEAgLTEwLDE1ICsxMCw2IEBACiBDTWFrZSBFcnJvciBhdCBCYWRDT05GSUcuY21ha2U6MSBcKGFkZF9jdXN0b21fdGFyZ2V0XCk6CiAgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CiAKLSAgICBcJDxDT05GSUc6Rm9vLEJhcj4KLQotICBcJDxDT05GSUc+IGV4cHJlc3Npb24gcmVxdWlyZXMgb25lIG9yIHplcm8gcGFyYW1ldGVycy4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKLSsKLUNNYWtlIEVycm9yIGF0IEJhZENPTkZJRy5jbWFrZToxIFwoYWRkX2N1c3RvbV90YXJnZXRcKToKLSAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKLQogICAgIFwkPENPTkZJRzpGb28tQmFyPgogCiAgIEV4cHJlc3Npb24gc3ludGF4IG5vdCByZWNvZ25pemVkLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9CYWRDT05GSUcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0JhZENPTkZJRy5jbWFrZQppbmRleCA1YzIyYWFhLi4xNzM1YWI3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0JhZENPTkZJRy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0JhZENPTkZJRy5jbWFrZQpAQCAtMSw2ICsxLDUgQEAKIGFkZF9jdXN0b21fdGFyZ2V0KGNoZWNrIEFMTCBDT01NQU5EIGNoZWNrCiAgICQ8Q09ORklHOi4+Ci0gICQ8Q09ORklHOkZvbyxCYXI+CiAgICQ8Q09ORklHOkZvby1CYXI+CiAgICQ8JDxDT05GSUc6Rm9vLU5lc3RlZD46Zm9vPgogICBWRVJCQVRJTSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjRiM2RlODQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09ORklHLWVtcHR5LWVudHJpZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1lbXB0eS1lbnRyaWVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzI1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1lbXB0eS1lbnRyaWVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ09ORklHLWVtcHR5LWVudHJpZXMtZ2VuZXJhdGVkLnR4dCIgY29udGVudCkKKworc2V0KGV4cGVjdGVkICIxMjM0IikKK2lmKE5PVCBjb250ZW50IFNUUkVRVUFMIGV4cGVjdGVkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImFjdHVhbCBjb250ZW50OlxuIFtbJHtjb250ZW50fV1dXG5idXQgZXhwZWN0ZWQ6XG4gW1ske2V4cGVjdGVkfV1dIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09ORklHLWVtcHR5LWVudHJpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1lbXB0eS1lbnRyaWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDUzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1lbXB0eS1lbnRyaWVzLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMDcwIE5FVykKKworc2V0KHRleHQpCitzdHJpbmcoQVBQRU5EIHRleHQgIiQ8JDxDT05GSUc6PjoxPiIpCitzdHJpbmcoQVBQRU5EIHRleHQgIiQ8JDxDT05GSUc6UmVsZWFzZSw+OjI+IikKK3N0cmluZyhBUFBFTkQgdGV4dCAiJDwkPENPTkZJRzosUmVsZWFzZT46Mz4iKQorc3RyaW5nKEFQUEVORCB0ZXh0ICIkPCQ8Q09ORklHOlJlbGVhc2UsLERlYnVnPjo0PiIpCitzdHJpbmcoQVBQRU5EIHRleHQgIiQ8JDxDT05GSUc6UmVsZWFzZSxEZWJ1Zz46NT4iKQorZmlsZShHRU5FUkFURSBPVVRQVVQgQ09ORklHLWVtcHR5LWVudHJpZXMtZ2VuZXJhdGVkLnR4dCBDT05URU5UICAke3RleHR9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT05GSUctbXVsdGlwbGUtZW50cmllcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09ORklHLW11bHRpcGxlLWVudHJpZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmNDJjNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09ORklHLW11bHRpcGxlLWVudHJpZXMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw2IEBACitmaWxlKFJFQUQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DT05GSUctbXVsdGlwbGUtZW50cmllcy1nZW5lcmF0ZWQudHh0IiBjb250ZW50KQorCitzZXQoZXhwZWN0ZWQgIjE0IikKK2lmKE5PVCBjb250ZW50IFNUUkVRVUFMIGV4cGVjdGVkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImFjdHVhbCBjb250ZW50OlxuIFtbJHtjb250ZW50fV1dXG5idXQgZXhwZWN0ZWQ6XG4gW1ske2V4cGVjdGVkfV1dIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09ORklHLW11bHRpcGxlLWVudHJpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1tdWx0aXBsZS1lbnRyaWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjkyODIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1tdWx0aXBsZS1lbnRyaWVzLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMDcwIE5FVykKKworc2V0KHRleHQpCitzdHJpbmcoQVBQRU5EIHRleHQgIiQ8JDxDT05GSUc6Q3VzdG9tQ29uZmlnPjoxPiIpCitzdHJpbmcoQVBQRU5EIHRleHQgIiQ8JDxDT05GSUc6UmVsZWFzZT46Mj4iKQorc3RyaW5nKEFQUEVORCB0ZXh0ICIkPCQ8Q09ORklHOkRlYnVnLFJlbGVhc2U+OjM+IikKK3N0cmluZyhBUFBFTkQgdGV4dCAiJDwkPENPTkZJRzpSZWxlYXNlLEN1c3RvbUNvbmZpZyxEZWJ1Zz46ND4iKQorZmlsZShHRU5FUkFURSBPVVRQVVQgQ09ORklHLW11bHRpcGxlLWVudHJpZXMtZ2VuZXJhdGVkLnR4dCBDT05URU5UICIke3RleHR9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNjhhMDE3Mi4uNjM0OTExMiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEyLDYgKzEyLDcgQEAKIHJ1bl9jbWFrZShCYWRUYXJnZXRUeXBlT2JqZWN0KQogcnVuX2NtYWtlKEJhZEluc3RhbGxQcmVmaXgpCiBydW5fY21ha2UoQmFkU0hFTExfUEFUSCkKK3J1bl9jbWFrZShCYWRDT05GSUcpCiBydW5fY21ha2UoQ01QMDA0NC1XQVJOKQogcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LUNfQ09NUElMRVJfSUQpCiBydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtQ1hYX0NPTVBJTEVSX0lEKQpAQCAtMTksNDMgKzIwLDEyIEBACiBydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtQ19DT01QSUxFUl9WRVJTSU9OKQogcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LUNYWF9DT01QSUxFUl9WRVJTSU9OKQogcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LUZvcnRyYW5fQ09NUElMRVJfVkVSU0lPTikKLXJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUikKLXJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSKQogcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LVRBUkdFVF9QUk9QRVJUWSkKIHJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1UQVJHRVRfUE9MSUNZKQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsKQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZSkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5KQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS11bmtub3duLWxhbmcpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldCkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZCkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcykKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlKQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnkpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdCkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELXVua25vd24tbGFuZykKLXJ1bl9jbWFrZShUQVJHRVRfRklMRS1yZWN1cnNpb24pCi1ydW5fY21ha2UoT1VUUFVUX05BTUUtcmVjdXJzaW9uKQotcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1BSRUZJWCkKLXJ1bl9jbWFrZShUQVJHRVRfRklMRV9QUkVGSVgtaW1wb3J0ZWQtdGFyZ2V0KQotcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0KQotcnVuX2NtYWtlKFRBUkdFVF9MSU5LRVJfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldCkKLXJ1bl9jbWFrZShUQVJHRVRfRklMRV9TVUZGSVgpCi1ydW5fY21ha2UoVEFSR0VUX0ZJTEVfU1VGRklYLWltcG9ydGVkLXRhcmdldCkKLXJ1bl9jbWFrZShUQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldCkKLXJ1bl9jbWFrZShUQVJHRVRfTElOS0VSX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQpCi1ydW5fY21ha2Vfd2l0aF9vcHRpb25zKFRBUkdFVF9GSUxFX0JBU0VfTkFNRSAtRENNQUtFX0JVSUxEX1RZUEU6U1RSSU5HPURlYnVnKQotcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhUQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0IC1EQ01BS0VfQlVJTERfVFlQRTpTVFJJTkc9RGVidWcpCi1ydW5fY21ha2UoVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQpCi1ydW5fY21ha2UoVEFSR0VUX0xJTktFUl9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0KQogcnVuX2NtYWtlKFRBUkdFVF9QUk9QRVJUWS1JTkNMVURFX0RJUkVDVE9SSUVTKQogcnVuX2NtYWtlKFRBUkdFVF9QUk9QRVJUWS1MT0NBVElPTikKIHJ1bl9jbWFrZShUQVJHRVRfUFJPUEVSVFktU09VUkNFUykKK3J1bl9jbWFrZShUQVJHRVRfUFJPUEVSVFktQUxJQVNfR0xPQkFMKQogcnVuX2NtYWtlKExJTktfT05MWS1ub3QtbGlua2luZykKIHJ1bl9jbWFrZShUQVJHRVRfRVhJU1RTLW5vLWFyZykKIHJ1bl9jbWFrZShUQVJHRVRfRVhJU1RTLWVtcHR5LWFyZykKQEAgLTY1LDE1ICszNSw2IEBACiBydW5fY21ha2UoVEFSR0VUX05BTUVfSUZfRVhJU1RTLWVtcHR5LWFyZykKIHJ1bl9jbWFrZShUQVJHRVRfTkFNRV9JRl9FWElTVFMpCiBydW5fY21ha2UoVEFSR0VUX05BTUVfSUZfRVhJU1RTLW5vdC1hLXRhcmdldCkKLXJ1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTC1uby1hcmcpCi1ydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0KQotcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQpCi1ydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMSkKLXJ1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yKQotcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMKQotcnVuX2NtYWtlKEdFTkVYX0VWQUwtcmVjdXJzaW9uMSkKLXJ1bl9jbWFrZShHRU5FWF9FVkFMLXJlY3Vyc2lvbjIpCi1ydW5fY21ha2UoR0VORVhfRVZBTCkKIHJ1bl9jbWFrZShSRU1PVkVfRFVQTElDQVRFUy1lbXB0eSkKIHJ1bl9jbWFrZShSRU1PVkVfRFVQTElDQVRFUy0xKQogcnVuX2NtYWtlKFJFTU9WRV9EVVBMSUNBVEVTLTIpCkBAIC04NCwxOSArNDUsMTggQEAKIHJ1bl9jbWFrZShGSUxURVItRXhjbHVkZSkKIHJ1bl9jbWFrZShGSUxURVItSW5jbHVkZSkKIAotcnVuX2NtYWtlKEltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSKQotcnVuX2NtYWtlKEltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVIpCi1ydW5fY21ha2UoSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFKQotcnVuX2NtYWtlKEltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUpCi1pZihMSU5LRVJfU1VQUE9SVFNfUERCKQotICBydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFKQotICBydW5fY21ha2UoVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFKQotICBydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRSkKLSAgcnVuX2NtYWtlKFZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUpCitpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIFs9PVstRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9Q3VzdG9tQ29uZmlnXT09XSkKIGVsc2UoKQotICBydW5fY21ha2UoTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUpCi0gIHJ1bl9jbWFrZShOb25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgWz09Wy1EQ01BS0VfQlVJTERfVFlQRT1DdXN0b21Db25maWddPT1dKQogZW5kaWYoKQorcnVuX2NtYWtlKENPTkZJRy1tdWx0aXBsZS1lbnRyaWVzKQoraWYoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyBbPT1bLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPV09PV0pCitlbHNlKCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyBbPT1bLURDTUFLRV9CVUlMRF9UWVBFPV09PV0pCitlbmRpZigpCitydW5fY21ha2UoQ09ORklHLWVtcHR5LWVudHJpZXMpCiAKIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9QT0xJQ1lfREVGQVVMVF9DTVAwMDg1OlNUUklORz1PTEQpCiBydW5fY21ha2UoQ01QMDA4NS1PTEQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9QUk9QRVJUWS1BTElBU19HTE9CQUwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9QUk9QRVJUWS1BTElBU19HTE9CQUwtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiZjgzNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX1BST1BFUlRZLUFMSUFTX0dMT0JBTC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2ZpbGUoU1RSSU5HUyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vYWxpYXNfZ2xvYmFsLnR4dCBhbGlhc19nbG9iYWwpCisKK3NldChleHBlY3RlZCAiVFJVRShsaWItZ2xvYmFsKTpUUlVFO0ZBTFNFKGxpYi1sb2NhbCk6RkFMU0U7VFJVRShsaWIpOkZBTFNFIikKK2lmKE5PVCBhbGlhc19nbG9iYWwgU1RSRVFVQUwgZXhwZWN0ZWQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQUxJQVNfR0xPQkFMIHdhczpcbiBbWyR7YWxpYXNfZ2xvYmFsfV1dXG5idXQgZXhwZWN0ZWQ6XG4gW1ske2V4cGVjdGVkfV1dIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX1BST1BFUlRZLUFMSUFTX0dMT0JBTC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX1BST1BFUlRZLUFMSUFTX0dMT0JBTC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJjMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfUFJPUEVSVFktQUxJQVNfR0xPQkFMLmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKKworY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCisKK2FkZF9saWJyYXJ5KGxpYi1nbG9iYWwgU0hBUkVEIElNUE9SVEVEIEdMT0JBTCkKK2FkZF9saWJyYXJ5KGFsaWFzLWxpYi1nbG9iYWwgQUxJQVMgbGliLWdsb2JhbCkKKworYWRkX2xpYnJhcnkobGliLWxvY2FsIFNIQVJFRCBJTVBPUlRFRCkKK2FkZF9saWJyYXJ5KGFsaWFzLWxpYi1sb2NhbCBBTElBUyBsaWItbG9jYWwpCisKK2FkZF9saWJyYXJ5KGxpYiBTSEFSRUQgSU1QT1JURUQpCithZGRfbGlicmFyeShhbGlhcy1saWIgQUxJQVMgbGliKQorIyBzd2l0Y2ggZnJvbSBsb2NhbCB0byBnbG9iYWwKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIGxpYiBQUk9QRVJUWSBJTVBPUlRFRF9HTE9CQUwgVFJVRSkKKworCitmaWxlKEdFTkVSQVRFIE9VVFBVVCBhbGlhc19nbG9iYWwudHh0IENPTlRFTlQgIiQ8VEFSR0VUX1BST1BFUlRZOmxpYi1nbG9iYWwsSU1QT1JURURfR0xPQkFMPigkPFRBUkdFVF9QUk9QRVJUWTphbGlhcy1saWItZ2xvYmFsLEFMSUFTRURfVEFSR0VUPik6JDxUQVJHRVRfUFJPUEVSVFk6YWxpYXMtbGliLWdsb2JhbCxBTElBU19HTE9CQUw+XG4kPFRBUkdFVF9QUk9QRVJUWTpsaWItbG9jYWwsSU1QT1JURURfR0xPQkFMPigkPFRBUkdFVF9QUk9QRVJUWTphbGlhcy1saWItbG9jYWwsQUxJQVNFRF9UQVJHRVQ+KTokPFRBUkdFVF9QUk9QRVJUWTphbGlhcy1saWItbG9jYWwsQUxJQVNfR0xPQkFMPlxuJDxUQVJHRVRfUFJPUEVSVFk6bGliLElNUE9SVEVEX0dMT0JBTD4oJDxUQVJHRVRfUFJPUEVSVFk6YWxpYXMtbGliLEFMSUFTRURfVEFSR0VUPik6JDxUQVJHRVRfUFJPUEVSVFk6YWxpYXMtbGliLEFMSUFTX0dMT0JBTD5cbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JQbGF0Zm9ybS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclBsYXRmb3JtL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclBsYXRmb3JtL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclBsYXRmb3JtL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclRvb2xzZXQvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tZGVidWctc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLWRlYnVnLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ZDFhNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLWRlYnVnLXN0ZG91dC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0IHByb2plY3QgLipHb29nbGVUZXN0LWRpc2NvdmVyeS1tdWx0aS1jb25maWcKK1sgXHRdKlRlc3QgI1swLTldKzogY29uZmlndXJhdGlvblwuY2FzZV9yZWxlYXNlIFwoRGlzYWJsZWRcKQorWyBcdF0qVGVzdCAjWzAtOV0rOiBjb25maWd1cmF0aW9uXC5jYXNlX2RlYnVnCisrCitUb3RhbCBUZXN0czogMgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tcmVsZWFzZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tcmVsZWFzZS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTE2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtY29uZmlndXJhdGlvbi1yZWxlYXNlLXN0ZG91dC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0IHByb2plY3QgLipHb29nbGVUZXN0LWRpc2NvdmVyeS1tdWx0aS1jb25maWcKK1sgXHRdKlRlc3QgI1swLTldKzogY29uZmlndXJhdGlvblwuY2FzZV9yZWxlYXNlCitbIFx0XSpUZXN0ICNbMC05XSs6IGNvbmZpZ3VyYXRpb25cLmNhc2VfZGVidWcgXChEaXNhYmxlZFwpCisrCitUb3RhbCBUZXN0czogMgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC1idWlsZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC1idWlsZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LWJ1aWxkLXN0ZG91dC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1zdGRvdXQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC1idWlsZC1zdGRvdXQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YmU5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC10ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlOiBkaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVAorRXJyb3JzIHdoaWxlIHJ1bm5pbmcgQ1Rlc3QKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3Qtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWRlM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTggQEAKK1Rlc3QgcHJvamVjdCAuKkdvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQKK1sgXHRdKlN0YXJ0IFswLTldKzogZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0NvdWxkIG5vdCBmaW5kIGV4ZWN1dGFibGUgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0xvb2tlZCBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczoKK2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUCitkaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVChcLmV4ZSk/CitEZWJ1Zy9kaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVAorRGVidWcvZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQoXC5leGUpPworRGVidWcvZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0RlYnVnL2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUKFwuZXhlKT8KK1teXG5dK2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUICtcLitcKlwqXCpOb3QgUnVuICtbMC05Ll0rIHNlYworKworMCUgdGVzdHMgcGFzc2VkLCAxIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gICArWzAtOS5dKyBzZWMKKysKK1RoZSBmb2xsb3dpbmcgdGVzdHMgRkFJTEVEOgorW15cbl0rZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQgXChOb3QgUnVuXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUFJFX1RFU1QtdGltZW91dC10ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YWZlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOCBAQAorQ01ha2UgRXJyb3IgYXQgLipHb29nbGVUZXN0QWRkVGVzdHMuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgorWyBcdF0qRXJyb3IgcnVubmluZyB0ZXN0IGV4ZWN1dGFibGUuCisrCitbIFx0XSpQYXRoOiAnLipkaXNjb3ZlcnlfdGltZW91dF90ZXN0KFwuZXhlKT8nCitbIFx0XSpSZXN1bHQ6IFByb2Nlc3MgdGVybWluYXRlZCBkdWUgdG8gdGltZW91dAorWyBcdF0qT3V0cHV0OgorWyBcdF0qdGltZW91dC4KK1sgXHRdKmNhc2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUFJFX1RFU1QtdGltZW91dC10ZXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTA2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgcHJvamVjdCAuKkdvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1za2lwLXRpbWVvdXQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1za2lwLXRpbWVvdXQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWVjYjZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LXNraXAtdGltZW91dC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgcHJvamVjdCAuKgorICAgIFN0YXJ0IDIwOiBza2lwX3Rlc3QudGVzdDEKKzEvMSBUZXN0ICMyMDogc2tpcF90ZXN0LnRlc3QxIFwuK1wqXCpcKlNraXBwZWQgK1swLTkuXSsgc2VjCisKKzEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorCitUb3RhbCBUZXN0IHRpbWUgXChyZWFsXCkgPSArWzAtOS5dKyBzZWMKKworVGhlIGZvbGxvd2luZyB0ZXN0cyBkaWQgbm90IHJ1bjoKKy4qMjAgLSBza2lwX3Rlc3RcLnRlc3QxIFwoU2tpcHBlZFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtdGVzdDEtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC10ZXN0MS1zdGRvdXQudHh0CmluZGV4IDVmNzc1M2QuLjdmYjM5MTkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC10ZXN0MS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC10ZXN0MS1zdGRvdXQudHh0CkBAIC0xLDIyICsxLDI4IEBACiBUZXN0IHByb2plY3QgLioKLSAgICBTdGFydCAxOiBURVNUOmJhc2ljXC5jYXNlX2ZvbyExCi0xLzggVGVzdCAjMTogVEVTVDpiYXNpY1wuY2FzZV9mb28hMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAyOiBURVNUOmJhc2ljXC5jYXNlX2JhciExCi0yLzggVGVzdCAjMjogVEVTVDpiYXNpY1wuY2FzZV9iYXIhMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAzOiBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITEKLTMvOCBUZXN0ICMzOiBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITEgXC4rXCorTm90IFJ1biBcKERpc2FibGVkXCkgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgNDogVEVTVDpkaXNhYmxlZFwuY2FzZSExCi00LzggVGVzdCAjNDogVEVTVDpkaXNhYmxlZFwuY2FzZSExIFwuK1wqK05vdCBSdW4gXChEaXNhYmxlZFwpICtbMC05Ll0rIHNlYwotICAgIFN0YXJ0IDU6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMQotNS84IFRlc3QgIzU6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKLSAgICBTdGFydCA2OiBURVNUOnR5cGVkL2Zsb2F0XC5jYXNlITEKLTYvOCBUZXN0ICM2OiBURVNUOnR5cGVkL2Zsb2F0XC5jYXNlITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgNzogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLzEhMQotNy84IFRlc3QgIzc6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8xITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgODogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITEKLTgvOCBUZXN0ICM4OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvImZvbyIhMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0ICAxOiBURVNUOmJhc2ljXC5jYXNlX2ZvbyExCisgMS8xMSBUZXN0ICAjMTogVEVTVDpiYXNpY1wuY2FzZV9mb28hMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0ICAyOiBURVNUOmJhc2ljXC5jYXNlX2JhciExCisgMi8xMSBUZXN0ICAjMjogVEVTVDpiYXNpY1wuY2FzZV9iYXIhMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0ICAzOiBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITEKKyAzLzExIFRlc3QgICMzOiBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITEgXC4rXCorTm90IFJ1biBcKERpc2FibGVkXCkgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgNDogVEVTVDpkaXNhYmxlZFwuY2FzZSExCisgNC8xMSBUZXN0ICAjNDogVEVTVDpkaXNhYmxlZFwuY2FzZSExIFwuK1wqK05vdCBSdW4gXChEaXNhYmxlZFwpICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgIDU6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMQorIDUvMTEgVGVzdCAgIzU6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0ICA2OiBURVNUOnR5cGVkL2Zsb2F0XC5jYXNlITEKKyA2LzExIFRlc3QgICM2OiBURVNUOnR5cGVkL2Zsb2F0XC5jYXNlITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgNzogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLzEhMQorIDcvMTEgVGVzdCAgIzc6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8xITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgODogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITEKKyA4LzExIFRlc3QgICM4OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvImZvbyIhMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0ICA5OiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvInNlbWljb2xvbjsiITEKKyA5LzExIFRlc3QgICM5OiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvInNlbWljb2xvbjsiITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxMDogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJiYWNrc2xhc2hcXCIhMQorMTAvMTEgVGVzdCAjMTA6IFRFU1Q6cGFyYW0vc3BlY2lhbFwuY2FzZS8iYmFja3NsYXNoXFwiITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxMTogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJcJFx7dmFyXH0iITEKKzExLzExIFRlc3QgIzExOiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvIlwkXHt2YXJcfSIhMSBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKIAotMTAwJSB0ZXN0cyBwYXNzZWQsIDAgdGVzdHMgZmFpbGVkIG91dCBvZiA2CisxMDAlIHRlc3RzIHBhc3NlZCwgMCB0ZXN0cyBmYWlsZWQgb3V0IG9mIDkKIAogVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC10ZXN0Mi1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LXRlc3QyLXN0ZG91dC50eHQKaW5kZXggOTYwYzBiOS4uNThjNGQxMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LXRlc3QyLXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LXRlc3QyLXN0ZG91dC50eHQKQEAgLTEsMjUgKzEsMzEgQEAKIFRlc3QgcHJvamVjdCAuKgotICAgIFN0YXJ0ICA5OiBURVNUOmJhc2ljXC5jYXNlX2ZvbyEyCi0xLzggVGVzdCAgIzk6IFRFU1Q6YmFzaWNcLmNhc2VfZm9vITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMTA6IFRFU1Q6YmFzaWNcLmNhc2VfYmFyITIKLTIvOCBUZXN0ICMxMDogVEVTVDpiYXNpY1wuY2FzZV9iYXIhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAxMTogVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSEyCi0zLzggVGVzdCAjMTE6IFRFU1Q6YmFzaWNcLmRpc2FibGVkX2Nhc2UhMiBcLitcKitOb3QgUnVuIFwoRGlzYWJsZWRcKSArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAxMjogVEVTVDpkaXNhYmxlZFwuY2FzZSEyCi00LzggVGVzdCAjMTI6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMiBcLitcKitOb3QgUnVuIFwoRGlzYWJsZWRcKSArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAxMzogVEVTVDp0eXBlZC9zaG9ydFwuY2FzZSEyCi01LzggVGVzdCAjMTM6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAxNDogVEVTVDp0eXBlZC9mbG9hdFwuY2FzZSEyCi02LzggVGVzdCAjMTQ6IFRFU1Q6dHlwZWQvZmxvYXRcLmNhc2UhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAxNTogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLzEhMgotNy84IFRlc3QgIzE1OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvMSEyIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYwotICAgIFN0YXJ0IDE2OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvImZvbyIhMgotOC84IFRlc3QgIzE2OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvImZvbyIhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0IDEyOiBURVNUOmJhc2ljXC5jYXNlX2ZvbyEyCisgMS8xMSBUZXN0ICMxMjogVEVTVDpiYXNpY1wuY2FzZV9mb28hMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0IDEzOiBURVNUOmJhc2ljXC5jYXNlX2JhciEyCisgMi8xMSBUZXN0ICMxMzogVEVTVDpiYXNpY1wuY2FzZV9iYXIhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0IDE0OiBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITIKKyAzLzExIFRlc3QgIzE0OiBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITIgXC4rXCorTm90IFJ1biBcKERpc2FibGVkXCkgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxNTogVEVTVDpkaXNhYmxlZFwuY2FzZSEyCisgNC8xMSBUZXN0ICMxNTogVEVTVDpkaXNhYmxlZFwuY2FzZSEyIFwuK1wqK05vdCBSdW4gXChEaXNhYmxlZFwpICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMTY6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMgorIDUvMTEgVGVzdCAjMTY6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0IDE3OiBURVNUOnR5cGVkL2Zsb2F0XC5jYXNlITIKKyA2LzExIFRlc3QgIzE3OiBURVNUOnR5cGVkL2Zsb2F0XC5jYXNlITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxODogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLzEhMgorIDcvMTEgVGVzdCAjMTg6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8xITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxOTogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITIKKyA4LzExIFRlc3QgIzE5OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvImZvbyIhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0IDIwOiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvInNlbWljb2xvbjsiITIKKyA5LzExIFRlc3QgIzIwOiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvInNlbWljb2xvbjsiITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAyMTogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJiYWNrc2xhc2hcXCIhMgorMTAvMTEgVGVzdCAjMjE6IFRFU1Q6cGFyYW0vc3BlY2lhbFwuY2FzZS8iYmFja3NsYXNoXFwiITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAyMjogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJcJFx7dmFyXH0iITIKKzExLzExIFRlc3QgIzIyOiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvIlwkXHt2YXJcfSIhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKIAotMTAwJSB0ZXN0cyBwYXNzZWQsIDAgdGVzdHMgZmFpbGVkIG91dCBvZiA2CisxMDAlIHRlc3RzIHBhc3NlZCwgMCB0ZXN0cyBmYWlsZWQgb3V0IG9mIDkKIAogVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjCiAKIFRoZSBmb2xsb3dpbmcgdGVzdHMgZGlkIG5vdCBydW46Ci0uKjExIC0gVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSEyIFwoRGlzYWJsZWRcKQotLioxMiAtIFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMiBcKERpc2FibGVkXCkKKy4qMTQgLSBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITIgXChEaXNhYmxlZFwpCisuKjE1IC0gVEVTVDpkaXNhYmxlZFwuY2FzZSEyIFwoRGlzYWJsZWRcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LmNtYWtlCmluZGV4IDMxODA4YzYuLjZhYTI2NTggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QuY21ha2UKQEAgLTEsNSArMSw0IEBACi1wcm9qZWN0KHRlc3RfaW5jbHVkZV9kaXJzKQotaW5jbHVkZShDVGVzdCkKK3Byb2plY3QodGVzdF9pbmNsdWRlX2RpcnMgTEFOR1VBR0VTIENYWCkKIGluY2x1ZGUoR29vZ2xlVGVzdCkKIAogZW5hYmxlX3Rlc3RpbmcoKQpAQCAtNTAsMTAgKzQ5LDggQEAKICAgUFJPUEVSVElFUyBUSU1FT1VUIDIKICkKIAotYWRkX2V4ZWN1dGFibGUoZGlzY292ZXJ5X3RpbWVvdXRfdGVzdCB0aW1lb3V0X3Rlc3QuY3BwKQotdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZGlzY292ZXJ5X3RpbWVvdXRfdGVzdCBQUklWQVRFIGRpc2NvdmVyeVNsZWVwU2VjPTEwKQorYWRkX2V4ZWN1dGFibGUoc2tpcF90ZXN0IHNraXBfdGVzdC5jcHApCisKIGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzKAotICBkaXNjb3ZlcnlfdGltZW91dF90ZXN0Ci0gIFRFU1RfUFJFRklYIGRpc2NvdmVyeV8KLSAgRElTQ09WRVJZX1RJTUVPVVQgMgorICBza2lwX3Rlc3QKICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeU11bHRpQ29uZmlnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0RGlzY292ZXJ5TXVsdGlDb25maWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3ODRmZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeU11bHRpQ29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK3Byb2plY3QodGVzdF9pbmNsdWRlX2RpcnMgTEFOR1VBR0VTIENYWCkKK2luY2x1ZGUoR29vZ2xlVGVzdCkKKworZW5hYmxlX3Rlc3RpbmcoKQorCithZGRfZXhlY3V0YWJsZShjb25maWd1cmF0aW9uX2d0ZXN0IGNvbmZpZ3VyYXRpb25fZ3Rlc3QuY3BwKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoY29uZmlndXJhdGlvbl9ndGVzdCBQUklWQVRFICQ8JDxDT05GSUc6RGVidWc+OkRFQlVHPTE+KQorCitndGVzdF9kaXNjb3Zlcl90ZXN0cygKKyAgY29uZmlndXJhdGlvbl9ndGVzdAorICBQUk9QRVJUSUVTIExBQkVMUyBDT05GSUcKKyAgRElTQ09WRVJZX01PREUgUFJFX1RFU1QKKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeVRpbWVvdXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3REaXNjb3ZlcnlUaW1lb3V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTlkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3REaXNjb3ZlcnlUaW1lb3V0LmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK3Byb2plY3QodGVzdF9pbmNsdWRlX2RpcnMgTEFOR1VBR0VTIENYWCkKK2luY2x1ZGUoR29vZ2xlVGVzdCkKKworZW5hYmxlX3Rlc3RpbmcoKQorCithZGRfZXhlY3V0YWJsZShkaXNjb3ZlcnlfdGltZW91dF90ZXN0IHRpbWVvdXRfdGVzdC5jcHApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhkaXNjb3ZlcnlfdGltZW91dF90ZXN0IFBSSVZBVEUgZGlzY292ZXJ5U2xlZXBTZWM9MTApCitndGVzdF9kaXNjb3Zlcl90ZXN0cygKKyAgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdAorICBURVNUX1BSRUZJWCBkaXNjb3ZlcnlfCisgIERJU0NPVkVSWV9USU1FT1VUIDIKKyAgRElTQ09WRVJZX01PREUgJHtESVNDT1ZFUllfTU9ERX0KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdFhNTC1yZXN1bHQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwtcmVzdWx0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZmRhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwtcmVzdWx0LWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KFJFU1VMVF9GSUxFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vR29vZ2xlVGVzdFhNTC5Gb28ueG1sIikKK2lmKE5PVCBFWElTVFMgJHtSRVNVTFRfRklMRX0pCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUmVzdWx0IFhNTCBmaWxlICR7UkVTVUxUX0ZJTEV9IHdhcyBub3QgY3JlYXRlZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwtc3BlY2lhbC1yZXN1bHQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwtc3BlY2lhbC1yZXN1bHQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhMGE2YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdFhNTC1zcGVjaWFsLXJlc3VsdC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDI4IEBACitzZXQoUkVTVUxUX0ZJTEVTCisgICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vR29vZ2xlVGVzdFhNTFNwZWNpYWwvY2FzZXMuY2FzZS8wLnhtbCIKKyAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9Hb29nbGVUZXN0WE1MU3BlY2lhbC9jYXNlcy5jYXNlLzEueG1sIgorICAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3RYTUxTcGVjaWFsL2Nhc2VzLmNhc2UvMi54bWwiCispCisKKyMgQ2hlY2sgcmVzdWx0IGZpbGVzIGV4aXN0Citmb3JlYWNoKGZpbGUgJHtSRVNVTFRfRklMRVN9KQorICBpZihOT1QgRVhJU1RTICR7ZmlsZX0pCisgICAgaWYoTk9UICR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IFNUUkVRVUFMICIiKQorICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfVxuIikKKyAgICBlbmRpZigpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfVJlc3VsdCBYTUwgZmlsZSAke2ZpbGV9IHdhcyBub3QgY3JlYXRlZCIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCisjIGFuZCBubyBvdGhlciB4bWwgZmlsZXMgYXJlIGNyZWF0ZWQKK2ZpbGUoR0xPQl9SRUNVUlNFIGZpbGVfbGlzdCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3RYTUxTcGVjaWFsLyovKi54bWwiIExJU1RfRElSRUNUT1JJRVMgZmFsc2UpCisKK2ZvcmVhY2goZmlsZSAke2ZpbGVfbGlzdH0pCisgIGxpc3QoRklORCBSRVNVTFRfRklMRVMgIiR7ZmlsZX0iIGlkeCkKKyAgaWYoLTEgRVFVQUwgJHtpZHh9KQorICAgIGlmKE5PVCAke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSBTVFJFUVVBTCAiIikKKyAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH1cbiIpCisgICAgZW5kaWYoKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH1JbnZhbGlkIGZpbGUgJHtmaWxlfSB3YXMgY3JlYXRlZCIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTFjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwuY21ha2UKQEAgLTAsMCArMSwyMSBAQAorcHJvamVjdCh0ZXN0X2luY2x1ZGVfZGlycyBMQU5HVUFHRVMgQ1hYKQoraW5jbHVkZShHb29nbGVUZXN0KQorCitlbmFibGVfdGVzdGluZygpCisKKyMgVGhpcyBjcmVhdGVzIHRoZSBmb2xkZXIgc3RydWN0dXJlIGZvciB0aGUgcGFyYW10ZXJpemVkIHRlc3RzCisjIHRvIGF2b2lkIGhhbmRsaW5nIG1pc3NpbmcgZm9sZGVycyBpbiBDKysKKyMKKyMgVGhpcyBtdXN0IG1hdGNoIHRoZSBtYXRjaCB0aGUgbmFtZSBkZWZpbmVkIGluIHhtbF9vdXRwdXQuY3BwCisjIGZvciBldmVyeSBpbnN0YW5jZSBvZiB0ZXN0cyB3aXRoIEdldFBhcmFtLgorIworIyBUaGUgZm9sZGVyIG5hbWUgaXMgY3JlYXRlZCBmb20gdGhlIHRlc3QgbmFtZSAob3V0cHV0IG9mIHRoZSBsaW5lCisjIHdpdGhvdXQgbGVhZGluZyBzcGFjZXM6ICJHb29nbGVUZXN0WE1MU3BlY2lhbC9jYXNlcy4iKSBhbmQKKyMgdGhlIHBhcnRzIHVudGlsIHRoZSBsYXN0IHNsYXNoICgiY2FzZS8iKS4gVGhlc2UgcGFydHMgYXJlIGNvbmNhdGVuYXRlZC4KK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7Q01BS0VfQklOQVJZX0RJUn0vR29vZ2xlVGVzdFhNTFNwZWNpYWwvY2FzZXMuY2FzZSIpCisKK2FkZF9leGVjdXRhYmxlKHhtbF9vdXRwdXQgeG1sX291dHB1dC5jcHApCitndGVzdF9kaXNjb3Zlcl90ZXN0cygKKyAgeG1sX291dHB1dAorICBYTUxfT1VUUFVUX0RJUiAke0NNQUtFX0JJTkFSWV9ESVJ9CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDBmYTRlMmEuLjUzMGM4YWIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDYgKzEsNiBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAotZnVuY3Rpb24ocnVuX0dvb2dsZVRlc3QpCitmdW5jdGlvbihydW5fR29vZ2xlVGVzdCBESVNDT1ZFUllfTU9ERSkKICAgIyBVc2UgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYSBmZXcgdGVzdHMgd2l0aG91dCBjbGVhbmluZy4KICAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3QtYnVpbGQpCiAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCkBAIC0xMCw3ICsxMCw3IEBACiAgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCiAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCiAKLSAgcnVuX2NtYWtlKEdvb2dsZVRlc3QpCisgIHJ1bl9jbWFrZV93aXRoX29wdGlvbnMoR29vZ2xlVGVzdCAtRENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFPSR7RElTQ09WRVJZX01PREV9KQogCiAgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtYnVpbGQKICAgICAke0NNQUtFX0NPTU1BTkR9CkBAIC0yNiwxNSArMjYsNiBAQAogICAgIC0tdGFyZ2V0IHByb3BlcnR5X3RpbWVvdXRfdGVzdAogICApCiAKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIDEpCi0gIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQKLSAgICAke0NNQUtFX0NPTU1BTkR9Ci0gICAgLS1idWlsZCAuCi0gICAgLS1jb25maWcgRGVidWcKLSAgICAtLXRhcmdldCBkaXNjb3ZlcnlfdGltZW91dF90ZXN0Ci0gICkKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIDApCi0KICAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC10ZXN0MQogICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KICAgICAtQyBEZWJ1ZwpAQCAtNjksNiArNjAsMTMwIEBACiAgICAgLVIgcHJvcGVydHlfdGltZW91dFxcLmNhc2Vfd2l0aF9kaXNjb3ZlcnkKICAgICAtLW5vLWxhYmVsLXN1bW1hcnkKICAgKQorCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtYnVpbGQKKyAgICAke0NNQUtFX0NPTU1BTkR9CisgICAgLS1idWlsZCAuCisgICAgLS1jb25maWcgRGVidWcKKyAgICAtLXRhcmdldCBza2lwX3Rlc3QKKyAgKQorCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3Qtc2tpcC10ZXN0CisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAgIC1DIERlYnVnCisgICAgLVIgc2tpcF90ZXN0CisgICAgLS1uby1sYWJlbC1zdW1tYXJ5CisgICkKIGVuZGZ1bmN0aW9uKCkKIAotcnVuX0dvb2dsZVRlc3QoKQorZnVuY3Rpb24ocnVuX0dvb2dsZVRlc3RYTUwgRElTQ09WRVJZX01PREUpCisgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Hb29nbGVUZXN0WE1MLWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBpZihOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZykKKyAgZW5kaWYoKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorCisgIHJ1bl9jbWFrZV93aXRoX29wdGlvbnMoR29vZ2xlVGVzdFhNTCAtRENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFPSR7RElTQ09WRVJZX01PREV9KQorCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3RYTUwtZGlzY292ZXJ5CisgICR7Q01BS0VfQ09NTUFORH0KKyAgLS1idWlsZCAuCisgIC0tY29uZmlnIERlYnVnCisgIC0tdGFyZ2V0IHhtbF9vdXRwdXQKKyAgKQorCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3RYTUwtcmVzdWx0CisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgLUMgRGVidWcKKyAgLVIgR29vZ2xlVGVzdFhNTAorICAtLW5vLWxhYmVsLXN1bW1hcnkKKyAgKQorCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3RYTUwtc3BlY2lhbC1yZXN1bHQKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAtQyBEZWJ1ZworICAtUiBHb29nbGVUZXN0WE1MU3BlY2lhbAorICAtLW5vLWxhYmVsLXN1bW1hcnkKKyAgKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihydW5fR29vZ2xlVGVzdF9kaXNjb3ZlcnlfdGltZW91dCBESVNDT1ZFUllfTU9ERSkKKyAgIyBVc2UgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYSBmZXcgdGVzdHMgd2l0aG91dCBjbGVhbmluZy4KKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIGlmKE5PVCBSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnKQorICBlbmRpZigpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisKKyAgcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhHb29nbGVUZXN0RGlzY292ZXJ5VGltZW91dCAtRERJU0NPVkVSWV9NT0RFPSR7RElTQ09WRVJZX01PREV9KQorCisgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAxKQorICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWRpc2NvdmVyeS0ke0RJU0NPVkVSWV9NT0RFfS10aW1lb3V0LWJ1aWxkCisgICAgJHtDTUFLRV9DT01NQU5EfQorICAgIC0tYnVpbGQgLgorICAgIC0tY29uZmlnIERlYnVnCisgICAgLS10YXJnZXQgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdAorICApCisgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAwKQorCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtZGlzY292ZXJ5LSR7RElTQ09WRVJZX01PREV9LXRpbWVvdXQtdGVzdAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgICAtQyBEZWJ1ZworICAgIC1SIGRpc2NvdmVyeV90aW1lb3V0X3Rlc3QKKyAgICAtLW5vLWxhYmVsLXN1bWFyeQorICApCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKHJ1bl9Hb29nbGVUZXN0X2Rpc2NvdmVyeV9tdWx0aV9jb25maWcpCisgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Hb29nbGVUZXN0LWRpc2NvdmVyeS1tdWx0aS1jb25maWcpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisKKyAgcnVuX2NtYWtlKEdvb2dsZVRlc3REaXNjb3ZlcnlNdWx0aUNvbmZpZykKKworICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWJ1aWxkLXJlbGVhc2UKKyAgICAke0NNQUtFX0NPTU1BTkR9CisgICAgLS1idWlsZCAuCisgICAgLS1jb25maWcgUmVsZWFzZQorICAgIC0tdGFyZ2V0IGNvbmZpZ3VyYXRpb25fZ3Rlc3QKKyAgKQorICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWJ1aWxkLWRlYnVnCisgICAgJHtDTUFLRV9DT01NQU5EfQorICAgIC0tYnVpbGQgLgorICAgIC0tY29uZmlnIERlYnVnCisgICAgLS10YXJnZXQgY29uZmlndXJhdGlvbl9ndGVzdAorICApCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtY29uZmlndXJhdGlvbi1yZWxlYXNlCisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAgIC1DIFJlbGVhc2UKKyAgICAtTCBDT05GSUcKKyAgICAtTgorICApCisgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtY29uZmlndXJhdGlvbi1kZWJ1ZworICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgICAtQyBEZWJ1ZworICAgIC1MIENPTkZJRworICAgIC1OCisgICkKKworZW5kZnVuY3Rpb24oKQorCitmb3JlYWNoKERJU0NPVkVSWV9NT0RFIFBPU1RfQlVJTEQgUFJFX1RFU1QpCisgIG1lc3NhZ2UoIlRlc3RpbmcgJHtESVNDT1ZFUllfTU9ERX0gZGlzY292ZXJ5IG1vZGUgdmlhIENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFIGdsb2JhbCBvdmVycmlkZS4uLiIpCisgIHJ1bl9Hb29nbGVUZXN0KCR7RElTQ09WRVJZX01PREV9KQorICBydW5fR29vZ2xlVGVzdFhNTCgke0RJU0NPVkVSWV9NT0RFfSkKKyAgbWVzc2FnZSgiVGVzdGluZyAke0RJU0NPVkVSWV9NT0RFfSBkaXNjb3ZlcnkgbW9kZSB2aWEgRElTQ09WRVJZX01PREUgb3B0aW9uLi4uIikKKyAgcnVuX0dvb2dsZVRlc3RfZGlzY292ZXJ5X3RpbWVvdXQoJHtESVNDT1ZFUllfTU9ERX0pCitlbmRmb3JlYWNoKCkKKworaWYoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgbWVzc2FnZSgiVGVzdGluZyBQUkVfVEVTVCBkaXNjb3ZlcnkgbXVsdGkgY29uZmlndXJhdGlvbi4uLiIpCisgIHJ1bl9Hb29nbGVUZXN0X2Rpc2NvdmVyeV9tdWx0aV9jb25maWcoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9jb25maWd1cmF0aW9uX2d0ZXN0LmNwcCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvY29uZmlndXJhdGlvbl9ndGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiYjEzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvY29uZmlndXJhdGlvbl9ndGVzdC5jcHAKQEAgLTAsMCArMSwyMyBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAvLyBOb3RlOiBHb29nbGVUZXN0LmNtYWtlIGRvZXNuJ3QgYWN0dWFsbHkgZGVwZW5kIG9uIEdvb2dsZSBUZXN0IGFzIHN1Y2g7CisgIC8vIGl0IG9ubHkgcmVxdWlyZXMgdGhhdCB3ZSBwcm9kdWNlcyBvdXRwdXQgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdCB3aGVuCisgIC8vIGludm9rZWQgd2l0aCAtLWd0ZXN0X2xpc3RfdGVzdHMuIFRodXMsIHdlIGZha2UgdGhhdCBoZXJlLiBUaGlzIGFsbG93cyB1cworICAvLyB0byB0ZXN0IHRoZSBtb2R1bGUgd2l0aG91dCBhY3R1YWxseSBuZWVkaW5nIEdvb2dsZSBUZXN0LgorICBpZiAoYXJnYyA+IDEgJiYgc3RkOjpzdHJpbmcoYXJndlsxXSkgPT0gIi0tZ3Rlc3RfbGlzdF90ZXN0cyIpIHsKKyAgICBzdGQ6OmNvdXQgPDwgImNvbmZpZ3VyYXRpb24uIiA8PCBzdGQ6OmVuZGw7CisjaWZkZWYgREVCVUcKKyAgICBzdGQ6OmNvdXQgPDwgIiAgRElTQUJMRURfY2FzZV9yZWxlYXNlIiA8PCBzdGQ6OmVuZGw7CisgICAgc3RkOjpjb3V0IDw8ICIgIGNhc2VfZGVidWciIDw8IHN0ZDo6ZW5kbDsKKyNlbHNlCisgICAgc3RkOjpjb3V0IDw8ICIgIGNhc2VfcmVsZWFzZSIgPDwgc3RkOjplbmRsOworICAgIHN0ZDo6Y291dCA8PCAiICBESVNBQkxFRF9jYXNlX2RlYnVnIiA8PCBzdGQ6OmVuZGw7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9mYWtlX2d0ZXN0LmNwcCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvZmFrZV9ndGVzdC5jcHAKaW5kZXggZjFiZDdlZi4uYTgxMjdiZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9mYWtlX2d0ZXN0LmNwcAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L2Zha2VfZ3Rlc3QuY3BwCkBAIC0yMSw2ICsyMSwxMCBAQAogICAgIHN0ZDo6Y291dCA8PCAidmFsdWUvdGVzdC4iIDw8IHN0ZDo6ZW5kbDsKICAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZS8wICAjIEdldFBhcmFtKCkgPSAxIiA8PCBzdGQ6OmVuZGw7CiAgICAgc3RkOjpjb3V0IDw8ICIgIGNhc2UvMSAgIyBHZXRQYXJhbSgpID0gXCJmb29cIiIgPDwgc3RkOjplbmRsOworICAgIHN0ZDo6Y291dCA8PCAicGFyYW0vc3BlY2lhbC4iIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZS8wICAjIEdldFBhcmFtKCkgPSBcInNlbWljb2xvbjtcIiIgPDwgc3RkOjplbmRsOworICAgIHN0ZDo6Y291dCA8PCAiICBjYXNlLzEgICMgR2V0UGFyYW0oKSA9IFwiYmFja3NsYXNoXFxcIiIgPDwgc3RkOjplbmRsOworICAgIHN0ZDo6Y291dCA8PCAiICBjYXNlLzIgICMgR2V0UGFyYW0oKSA9IFwiJHt2YXJ9XCIiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXR1cm4gMDsKICAgfQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3NraXBfdGVzdC5jcHAgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3NraXBfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjOWZlMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3Qvc2tpcF90ZXN0LmNwcApAQCAtMCwwICsxLDE4IEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIC8vIE5vdGU6IEdvb2dsZVRlc3QuY21ha2UgZG9lc24ndCBhY3R1YWxseSBkZXBlbmQgb24gR29vZ2xlIFRlc3QgYXMgc3VjaDsKKyAgLy8gaXQgb25seSByZXF1aXJlcyB0aGF0IHdlIHByb2R1Y2VzIG91dHB1dCBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHdoZW4KKyAgLy8gaW52b2tlZCB3aXRoIC0tZ3Rlc3RfbGlzdF90ZXN0cy4gVGh1cywgd2UgZmFrZSB0aGF0IGhlcmUuIFRoaXMgYWxsb3dzIHVzCisgIC8vIHRvIHRlc3QgdGhlIG1vZHVsZSB3aXRob3V0IGFjdHVhbGx5IG5lZWRpbmcgR29vZ2xlIFRlc3QuCisgIGlmIChhcmdjID4gMSAmJiBzdGQ6OnN0cmluZyhhcmd2WzFdKSA9PSAiLS1ndGVzdF9saXN0X3Rlc3RzIikgeworICAgIHN0ZDo6Y291dCA8PCAic2tpcF90ZXN0LiIgPDwgc3RkOjplbmRsOworICAgIHN0ZDo6Y291dCA8PCAiICB0ZXN0MSIgPDwgc3RkOjplbmRsOworICAgIHJldHVybiAwOworICB9CisKKyAgc3RkOjpjb3V0IDw8ICJbICBTS0lQUEVEIF0gc2tpcF90ZXN0LnRlc3QxIiA8PCBzdGQ6OmVuZGw7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC90aW1lb3V0X3Rlc3QuY3BwIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC90aW1lb3V0X3Rlc3QuY3BwCmluZGV4IGI4YWQwNTUuLjU1MDYyNjkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvdGltZW91dF90ZXN0LmNwcAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3RpbWVvdXRfdGVzdC5jcHAKQEAgLTQsOSArNCwxMCBAQAogIyAgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKIHZvaWQgc2xlZXBGb3IodW5zaWduZWQgc2Vjb25kcykKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikKQEAgLTIzLDggKzI0LDggQEAKICAgLy8gaW52b2tlZCB3aXRoIC0tZ3Rlc3RfbGlzdF90ZXN0cy4gVGh1cywgd2UgZmFrZSB0aGF0IGhlcmUuIFRoaXMgYWxsb3dzIHVzCiAgIC8vIHRvIHRlc3QgdGhlIG1vZHVsZSB3aXRob3V0IGFjdHVhbGx5IG5lZWRpbmcgR29vZ2xlIFRlc3QuCiAgIGlmIChhcmdjID4gMSAmJiBzdGQ6OnN0cmluZyhhcmd2WzFdKSA9PSAiLS1ndGVzdF9saXN0X3Rlc3RzIikgewotICAgIHN0ZDo6Y291dCA8PCAidGltZW91dC4iIDw8IHN0ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZSIgPDwgc3RkOjplbmRsOworICAgIHByaW50ZigidGltZW91dC5cbiAgY2FzZVxuIik7CisgICAgZmZsdXNoKHN0ZG91dCk7CiAjaWZkZWYgZGlzY292ZXJ5U2xlZXBTZWMKICAgICBzbGVlcEZvcihkaXNjb3ZlcnlTbGVlcFNlYyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QveG1sX291dHB1dC5jcHAgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3htbF9vdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjBkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3htbF9vdXRwdXQuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAvLyBOb3RlOiBHb29nbGVUZXN0WE1MLmNtYWtlIGRvZXNuJ3QgYWN0dWFsbHkgZGVwZW5kIG9uIEdvb2dsZSBUZXN0IGFzIHN1Y2g7CisgIC8vIGl0IG9ubHkgbWltaWNrcyB0aGUgb3V0cHV0IGZpbGUgY3JlYXRpb24gdXNpbmcgdGhlIHBhdGggcGFzc2VkIHRvIHRoaXMKKyAgLy8gdGVzdCB3aXRob3V0IGFueSBjb250ZW50CisgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgc3RkOjpzdHJpbmcgcGFyYW0oYXJndltpXSk7CisgICAgaWYgKHBhcmFtLmZpbmQoIi0tZ3Rlc3RfbGlzdF90ZXN0cyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAvLyBUaGlzIGFjdHVhbGx5IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgcGFzc2VkIGluIHRoZSAybmQgcnVuCisgICAgICBzdGQ6OmNvdXQgPDwgIkdvb2dsZVRlc3RYTUwuIiA8PCBzdGQ6OmVuZGw7CisgICAgICBzdGQ6OmNvdXQgPDwgIiAgRm9vIiA8PCBzdGQ6OmVuZGw7CisgICAgICAvLyBXaGVuIGNoYW5naW5nIHRoZXNlIG5hbWVzLCBtYWtlIHN1cmUgdG8gYWRhcHQgdGhlIGZvbGRlciBjcmVhdGlvbgorICAgICAgLy8gaW4gR29vZ2xlVGVzdFhNTC5jbWFrZQorICAgICAgc3RkOjpjb3V0IDw8ICJHb29nbGVUZXN0WE1MU3BlY2lhbC9jYXNlcy4iIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHN0ZDo6Y291dCA8PCAiICBjYXNlLzAgICMgR2V0UGFyYW0oKSA9IDQyIiA8PCBzdGQ6OmVuZGw7CisgICAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZS8xICAjIEdldFBhcmFtKCkgPSBcInN0cmluZ1wiIiA8PCBzdGQ6OmVuZGw7CisgICAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZS8yICAjIEdldFBhcmFtKCkgPSBcInBhdGgvbGlrZVwiIiA8PCBzdGQ6OmVuZGw7CisgICAgfSBlbHNlIGlmIChwYXJhbS5maW5kKCItLWd0ZXN0X291dHB1dD14bWw6IikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc3BsaXQgPSBwYXJhbS5maW5kKCI6Iik7CisgICAgICBzdGQ6OnN0cmluZyBmaWxlcGF0aCA9IHBhcmFtLnN1YnN0cihzcGxpdCArIDEpOworICAgICAgLy8gVGhlIGZ1bGwgZmlsZSBwYXRoIGlzIHBhc3NlZAorICAgICAgc3RkOjpvZnN0cmVhbSBvc3RybShmaWxlcGF0aC5jX3N0cigpLCBzdGQ6Omlvczo6YmluYXJ5KTsKKyAgICAgIGlmICghb3N0cm0pIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICIgPDwgZmlsZXBhdGguY19zdHIoKQorICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIG9zdHJtIDw8ICItLWd0ZXN0X291dHB1dD14bWw6IG1vY2t1cCBmaWxlXG4iOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovR3JhcGh2aXpUZXN0UHJvamVjdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L0dyYXBodml6VGVzdFByb2plY3QuY21ha2UKaW5kZXggNzcyZjMxMi4uNGNlNmI1YyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovR3JhcGh2aXpUZXN0UHJvamVjdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9HcmFwaHZpelRlc3RQcm9qZWN0LmNtYWtlCkBAIC05LDYgKzksNyBAQAogIyAgIC0gQWxsIGxpYnJhcnkgZGVwZW5kIG9uIGEgY29tbW9uIElOVEVSRkFDRSBsaWJyYXJ5IGhvbGRpbmcgY29tcGlsZXIgZmxhZ3MKICMgICAtIFdlIGhhdmUgYSBjdXN0b20gdGFyZ2V0IHRvIGdlbmVyYXRlIGEgbWFuIHBhZ2UKICMgICAtIFNvbWVvbmUgaGFzIGFkZGVkIGFuIFVOS05PV04sIElNUE9SVEVEIGNyeXB0byBtaW5pbmcgbGlicmFyeSEKKyMgICAtIFdlIGhhdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdHdvIGxpYnJhcmllcwogCiBhZGRfc3ViZGlyZWN0b3J5KHRlc3RfcHJvamVjdC90aGlyZF9wYXJ0eV9wcm9qZWN0KQogCkBAIC0yMyw2ICsyNCwxMyBAQAogCiB0YXJnZXRfbGlua19saWJyYXJpZXMoQ29yZUxpYnJhcnkgUFJJVkFURSBTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpCiAKK2FkZF9saWJyYXJ5KFN5c3RlbUxpYnJhcnkgU1RBVElDIHRlc3RfcHJvamVjdC9zeXN0ZW1fbGlicmFyeS5jKQorCisjIENyZWF0ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuCisjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMjA3MjAKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb3JlTGlicmFyeSBQUklWQVRFIFN5c3RlbUxpYnJhcnkpCit0YXJnZXRfbGlua19saWJyYXJpZXMoU3lzdGVtTGlicmFyeSBQUklWQVRFIENvcmVMaWJyYXJ5KQorCiBhZGRfbGlicmFyeShHcmFwaGljTGlicmFyeU9iamVjdHMgT0JKRUNUIHRlc3RfcHJvamVjdC9ncmFwaGljX2xpYnJhcnkuYykKIAogYWRkX2xpYnJhcnkoR3JhcGhpY0xpYnJhcnkgU0hBUkVEKQpAQCAtMzIsNyArNDAsNyBAQAogCiAjIFRlc3QgdGFyZ2V0IGxhYmVscyB3aXRoIHF1b3RlcyBpbiB0aGVtOyB0aGV5IHNob3VsZCBiZSBlc2NhcGVkIGluIHRoZSBkb3QKICMgZmlsZS4KLSMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xOTc0NgorIyBTZWUgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTk3NDYKIHRhcmdldF9saW5rX2xpYnJhcmllcyhHcmFwaGljTGlicmFyeSBQUklWQVRFICJcIi1sbVwiIikKIAogIyBOb3RlOiBtb2R1bGVzIGFyZSBzdGFuZGFsb25lLCBidXQgY2FuIGhhdmUgZGVwZW5kZW5jaWVzLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX2N1c3RvbV90YXJnZXRzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9jdXN0b21fdGFyZ2V0cy5kb3QKaW5kZXggOGIwMzY1YS4uMzFkODhkZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX2N1c3RvbV90YXJnZXRzLmRvdAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfY3VzdG9tX3RhcmdldHMuZG90CkBAIC0yOCwyNSArMjgsMjggQEAKICAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKICAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOwogICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CiAgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlMSIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQotICAgICJub2RlNSIgWyBsYWJlbCA9ICJHZW5lcmF0ZU1hblBhZ2UiLCBzaGFwZSA9IGJveCBdOwotICAgICJub2RlMSIgLT4gIm5vZGU1IiAgLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IEdlbmVyYXRlTWFuUGFnZQotICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwotICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU4IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGU3IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgotICAgICJub2RlNyIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNyIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07Ci0gICAgIm5vZGU3IiAtPiAibm9kZTkiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKLSAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQotICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlMTAiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTExIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTExIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTExIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR2VuZXJhdGVNYW5QYWdlIiwgc2hhcGUgPSBib3ggXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNiIgIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBHZW5lcmF0ZU1hblBhZ2UKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOSIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlOCIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTgiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTgiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTgiIC0+ICJub2RlMTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTEyIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEyIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEyIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfZGVmYXVsdF9vcHRpb25zLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9kZWZhdWx0X29wdGlvbnMuZG90CmluZGV4IDFiYmYyNWEuLjI2ZjJmNjQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9kZWZhdWx0X29wdGlvbnMuZG90CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9kZWZhdWx0X29wdGlvbnMuZG90CkBAIC0yOCwyMyArMjgsMjYgQEAKICAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKICAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOwogICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CiAgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlMSIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQotICAgICJub2RlNSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwotICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU3IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgotICAgICJub2RlNiIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKLSAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQotICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOCIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTciIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2RlcGVuZGVyc19maWxlcy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZGVwZW5kZXJzX2ZpbGVzLmRvdAppbmRleCAxYmJmMjVhLi4yNmYyZjY0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZGVwZW5kZXJzX2ZpbGVzLmRvdAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZGVwZW5kZXJzX2ZpbGVzLmRvdApAQCAtMjgsMjMgKzI4LDI2IEBACiAgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCiAgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKICAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQogICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKLSAgICAibm9kZTEiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKLSAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKLSAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOwotICAgICJub2RlNyIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKLSAgICAibm9kZTYiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOwotICAgICJub2RlNiIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCi0gICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKLSAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTUiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU3IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leGVjdXRhYmxlcy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZXhlY3V0YWJsZXMuZG90CmluZGV4IDU1OGE0NzAuLjdmMmUwMWMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leGVjdXRhYmxlcy5kb3QKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2V4ZWN1dGFibGVzLmRvdApAQCAtMjcsMTggKzI3LDIxIEBACiAgICAgIm5vZGUxIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCiAgICAgIm5vZGUyIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKICAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKLSAgICAibm9kZTMiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlNCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOwotICAgICJub2RlNSIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKLSAgICAibm9kZTQiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTQiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOwotICAgICJub2RlNCIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCi0gICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTciIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNyIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQotICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTgiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMyIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNSIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNSIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU4IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2V4dGVybmFsX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2V4dGVybmFsX2xpYnMuZG90CmluZGV4IDY2MGFmMzcuLmRiNjc1YTggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leHRlcm5hbF9saWJzLmRvdAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZXh0ZXJuYWxfbGlicy5kb3QKQEAgLTI4LDE5ICsyOCwyMiBAQAogICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwogICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CiAgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKICAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNCIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwotICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKLSAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cwotICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5Ci0gICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTciIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNyIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQotICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTgiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNiIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTgiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZ3JhcGhpY19saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19ncmFwaGljX2xpYnMuZG90CmluZGV4IDVhZjdmZWMuLjIzNGVlMzkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19ncmFwaGljX2xpYnMuZG90CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19ncmFwaGljX2xpYnMuZG90CkBAIC0yOCw4ICsyOCwxMSBAQAogICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwogICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CiAgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKICAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGUxIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Ci0gICAgIm5vZGU1IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19pbnRlcmZhY2VfbGlicy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9faW50ZXJmYWNlX2xpYnMuZG90CmluZGV4IDk0ZWM0MWMuLjZkZWE4OGMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19pbnRlcmZhY2VfbGlicy5kb3QKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2ludGVyZmFjZV9saWJzLmRvdApAQCAtMjQsMjAgKzI0LDIzIEBACiB9CiAgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CiAgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKICAgICAibm9kZTAiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlMiIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGUwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Ci0gICAgIm5vZGUzIiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07Ci0gICAgIm5vZGUzIiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTQiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKLSAgICAibm9kZTUiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKLSAgICAibm9kZTQiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCi0gICAgIm5vZGU0IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKLSAgICAibm9kZTQiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cwotICAgICJub2RlMyIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5Ci0gICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTciIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlOCIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMyIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUwIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU1IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX21vZHVsZV9saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19tb2R1bGVfbGlicy5kb3QKaW5kZXggNjViN2E3MS4uZGYzZDEwYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX21vZHVsZV9saWJzLmRvdAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fbW9kdWxlX2xpYnMuZG90CkBAIC0yOCwxNyArMjgsMjAgQEAKICAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKICAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOwogICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CiAgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlMSIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQotICAgICJub2RlNSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwotICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU3IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgotICAgICJub2RlNiIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKLSAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTUiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU3IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fb2JqZWN0X2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX29iamVjdF9saWJzLmRvdAppbmRleCA4MTE2YmM5Li44ZjgzMmE4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fb2JqZWN0X2xpYnMuZG90CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19vYmplY3RfbGlicy5kb3QKQEAgLTI4LDIxICsyOCwyNCBAQAogICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwogICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CiAgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKICAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGUxIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Ci0gICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKLSAgICAibm9kZTciIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKLSAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCi0gICAgIm5vZGU2IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNSIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5Ci0gICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTgiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlOCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQotICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlMSIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU3IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNyIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNyIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fcGVyX3RhcmdldF9maWxlcy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fcGVyX3RhcmdldF9maWxlcy5kb3QKaW5kZXggMWJiZjI1YS4uMjZmMmY2NCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Blcl90YXJnZXRfZmlsZXMuZG90CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19wZXJfdGFyZ2V0X2ZpbGVzLmRvdApAQCAtMjgsMjMgKzI4LDI2IEBACiAgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCiAgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKICAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQogICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKLSAgICAibm9kZTEiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKLSAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKLSAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOwotICAgICJub2RlNyIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKLSAgICAibm9kZTYiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOwotICAgICJub2RlNiIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCi0gICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKLSAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTUiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU3IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zaGFyZWRfbGlicy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fc2hhcmVkX2xpYnMuZG90CmluZGV4IDQzOWQxZjcuLmUxMjdkYWEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zaGFyZWRfbGlicy5kb3QKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3NoYXJlZF9saWJzLmRvdApAQCAtMjgsMTcgKzI4LDIwIEBACiAgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCiAgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKICAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQogICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKLSAgICAibm9kZTEiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKLSAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKLSAgICAibm9kZTUiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNiIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKLSAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlOCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGU4IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTUiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTAiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub191bmtub3duX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Vua25vd25fbGlicy5kb3QKaW5kZXggMWJlNjU1MC4uNGYyNDJiYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Vua25vd25fbGlicy5kb3QKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Vua25vd25fbGlicy5kb3QKQEAgLTI4LDIxICsyOCwyNCBAQAogICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwogICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CiAgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKICAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJub2RlNCIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwotICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU2IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgotICAgICJub2RlNSIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKLSAgICAibm9kZTQiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQotICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTgiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU2IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNSIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTAiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfaGVhZGVyLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfaGVhZGVyLmRvdAppbmRleCAxY2ZiZTBmLi5jNjY0YWY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X2dyYXBoX2hlYWRlci5kb3QKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9oZWFkZXIuZG90CkBAIC0yOCwyMyArMjgsMjYgQEAKICAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKICAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOwogICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CiAgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlMSIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQotICAgICJub2RlNSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwotICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU3IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgotICAgICJub2RlNiIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKLSAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQotICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOCIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTciIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9uYW1lLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfbmFtZS5kb3QKaW5kZXggOTY1M2MzMy4uNTU3OTMwNiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9uYW1lLmRvdAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X2dyYXBoX25hbWUuZG90CkBAIC0yOCwyMyArMjgsMjYgQEAKICAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKICAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOwogICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CiAgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTQiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOwotICAgICJub2RlMSIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQotICAgICJub2RlNSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwotICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU3IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgotICAgICJub2RlNiIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwotICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTgiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKLSAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQotICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKLSAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOCIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTciIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ub2RlX3ByZWZpeC5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X25vZGVfcHJlZml4LmRvdAppbmRleCA4MmQ5NmQwLi4zYmYyMGVjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X25vZGVfcHJlZml4LmRvdAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X25vZGVfcHJlZml4LmRvdApAQCAtMjgsMjMgKzI4LDI2IEBACiAgICAgInBvaW50MiIgLT4gInBvaW50MCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKICAgICAicG9pbnQzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKICAgICAicG9pbnQyIiAtPiAicG9pbnQzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJwb2ludDQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJwb2ludDQiIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgInBvaW50MiIgLT4gInBvaW50NCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKICAgICAicG9pbnQxIiAtPiAicG9pbnQyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgInBvaW50NCIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgInBvaW50MSIgLT4gInBvaW50NCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKLSAgICAicG9pbnQ1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07Ci0gICAgInBvaW50NSIgLT4gInBvaW50MiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQotICAgICJwb2ludDYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKLSAgICAicG9pbnQ3IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07Ci0gICAgInBvaW50NiIgLT4gInBvaW50NyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCi0gICAgInBvaW50NiIgLT4gInBvaW50MCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKLSAgICAicG9pbnQ2IiAtPiAicG9pbnQyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKLSAgICAicG9pbnQ4IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOwotICAgICJwb2ludDYiIC0+ICJwb2ludDgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKLSAgICAicG9pbnQ1IiAtPiAicG9pbnQ2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5Ci0gICAgInBvaW50OSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgInBvaW50OSIgLT4gInBvaW50MCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncwotICAgICJwb2ludDkiIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5Ci0gICAgInBvaW50MTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJwb2ludDEwIiAtPiAicG9pbnQwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCi0gICAgInBvaW50MTAiIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CisgICAgInBvaW50NSIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgInBvaW50MSIgLT4gInBvaW50NSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAicG9pbnQ2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgInBvaW50NiIgLT4gInBvaW50MiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJwb2ludDciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAicG9pbnQ4IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgInBvaW50NyIgLT4gInBvaW50OCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgInBvaW50NyIgLT4gInBvaW50MCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAicG9pbnQ3IiAtPiAicG9pbnQyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAicG9pbnQ5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJwb2ludDciIC0+ICJwb2ludDkiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAicG9pbnQ2IiAtPiAicG9pbnQ3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgInBvaW50MTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJwb2ludDEwIiAtPiAicG9pbnQwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgInBvaW50MTAiIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgInBvaW50MTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJwb2ludDExIiAtPiAicG9pbnQwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgInBvaW50MTEiIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVuY2llcy5kb3QuR3JhcGhpY0FwcGxpY2F0aW9uIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3RhcmdldF9kZXBlbmRlbmNpZXMuZG90LkdyYXBoaWNBcHBsaWNhdGlvbgppbmRleCA2ODkzZmQxLi45MmZlNjA5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVuY2llcy5kb3QuR3JhcGhpY0FwcGxpY2F0aW9uCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF90YXJnZXRfZGVwZW5kZW5jaWVzLmRvdC5HcmFwaGljQXBwbGljYXRpb24KQEAgLTIsMjEgKzIsMjUgQEAKIG5vZGUgWwogICBmb250c2l6ZSA9ICIxMiIKIF07Ci0gICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CiAgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQogICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOwogICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncwogICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CiAgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5Ci0gICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKLSAgICAibm9kZTciIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKLSAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCi0gICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07Ci0gICAgIm5vZGU2IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKICAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKLSAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOwotICAgICJub2RlNiIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU3IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cwogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3RhcmdldF9kZXBlbmRlcnMuZG90LkNvbXBpbGVyRmxhZ3MuZGVwZW5kZXJzIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3RhcmdldF9kZXBlbmRlcnMuZG90LkNvbXBpbGVyRmxhZ3MuZGVwZW5kZXJzCmluZGV4IDMzNTJiMWEuLjgyYTJlZmUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF90YXJnZXRfZGVwZW5kZXJzLmRvdC5Db21waWxlckZsYWdzLmRlcGVuZGVycworKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVycy5kb3QuQ29tcGlsZXJGbGFncy5kZXBlbmRlcnMKQEAgLTUsMjIgKzUsMjYgQEAKICAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKICAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKICAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQogICAgICJub2RlMSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOwogICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKLSAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5Ci0gICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07Ci0gICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKLSAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQotICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKLSAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKLSAgICAibm9kZTYiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKLSAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOwotICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCi0gICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07Ci0gICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTAiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncwogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L3N5c3RlbV9saWJyYXJ5LmMgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3Qvc3lzdGVtX2xpYnJhcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDY3MDc5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L3N5c3RlbV9saWJyYXJ5LmMKQEAgLTAsMCArMSwzIEBACit2b2lkIGluaXRpYWxpemVfc3lzdGVtKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0luY29tcGF0aWJsZVF0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW5jb21wYXRpYmxlUXQvQ01ha2VMaXN0cy50eHQKaW5kZXggZjQ1MmRiMS4uZWJhYjdhMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvSW5jb21wYXRpYmxlUXQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvSW5jb21wYXRpYmxlUXQvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9DTWFrZUxpc3RzLnR4dAppbmRleCA4OTk2ZmVmLi43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQotY21ha2VfcG9saWN5KFNFVCBDTVAwMDQyIE5FVykKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS0VSX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LRVJfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktFUl9MQU5HVUFHRS1nZW5leC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktFUl9MQU5HVUFHRS1nZW5leC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYmY3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS0VSX0xBTkdVQUdFLWdlbmV4LXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LRVJfTEFOR1VBR0UtZ2VuZXguY21ha2U6WzAtOV0rIFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxUQVJHRVRfUFJPUEVSVFk6TElOS0VSX0xBTkdVQUdFPgorCisgIExJTktFUl9MQU5HVUFHRSB0YXJnZXQgcHJvcGVydHkgY2FuIG5vdCBiZSB1c2VkIHdoaWxlIGV2YWx1YXRpbmcgbGluaworICBsaWJyYXJpZXMgZm9yIGEgc3RhdGljIGxpYnJhcnkKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS0VSX0xBTkdVQUdFLWdlbmV4LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktFUl9MQU5HVUFHRS1nZW5leC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYzAwMmUuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS1nZW5leC5jbWFrZTpbMC05XSsgXCh0YXJnZXRfbGlua19saWJyYXJpZXNcKToKLSAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKLQotICAgIFwkPFRBUkdFVF9QUk9QRVJUWTpMSU5LRVJfTEFOR1VBR0U+Ci0KLSAgTElOS0VSX0xBTkdVQUdFIHRhcmdldCBwcm9wZXJ0eSBjYW4gbm90IGJlIHVzZWQgd2hpbGUgZXZhbHVhdGluZyBsaW5rCi0gIGxpYnJhcmllcyBmb3IgYSBzdGF0aWMgbGlicmFyeQotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAyYTUzNGIzLi40ODIxNmU5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsNyArMSw3IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCiBydW5fY21ha2UoTm9MYW5nU0hBUkVEKQotcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtZ2VuZXgpCitydW5fY21ha2UoTElOS0VSX0xBTkdVQUdFLWdlbmV4KQogcnVuX2NtYWtlKGxpbmstbGlicmFyaWVzLVRBUkdFVF9GSUxFLWdlbmV4KQogcnVuX2NtYWtlKGxpbmstbGlicmFyaWVzLVRBUkdFVF9GSUxFLWdlbmV4LW9rKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMGVhZGEwOC4uOGY5YzI2MyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTmluamEvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTgsNiArMTgsMTIgQEAKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiJ25pbmphIC0tdmVyc2lvbicgcmVwb3J0ZWQ6XG4ke25pbmphX291dH0iKQogZW5kaWYoKQogCitpZihDTUFLRV9IT1NUX1dJTjMyKQorICBydW5fY21ha2UoU2VsZWN0Q29tcGlsZXJXaW5kb3dzKQorZWxzZSgpCisgIHJ1bl9jbWFrZShTZWxlY3RDb21waWxlclVOSVgpCitlbmRpZigpCisKIGZ1bmN0aW9uKHJ1bl9OaW5qYVRvb2xNaXNzaW5nKQogICBzZXQoUnVuQ01ha2VfTUFLRV9QUk9HUkFNIG5pbmphLXRvb2wtbWlzc2luZykKICAgcnVuX2NtYWtlKE5pbmphVG9vbE1pc3NpbmcpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlci8xL2djYyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyLzEvZ2NjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MWRmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlci8xL2djYwpAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorZmFsc2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyLzIvY2MgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlci8yL2NjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MWRmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlci8yL2NjCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCitmYWxzZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyVU5JWC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyVU5JWC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlclVOSVgtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyVU5JWC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYmFhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlclVOSVgtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBFcnJvciBhdCAuKi9Nb2R1bGVzL0NNYWtlVGVzdENDb21waWxlci5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisgIFRoZSBDIGNvbXBpbGVyCisKKyAgICAiW14iXSovVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXIvMi9jYyIKKworICBpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyVU5JWC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyVU5JWC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM4NDM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJVTklYLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1NlbGVjdENvbXBpbGVyLzE6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1NlbGVjdENvbXBpbGVyLzI6JEVOVntQQVRIfSIpCit1bnNldChFTlZ7Q0N9KQorZW5hYmxlX2xhbmd1YWdlKEMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyV2luZG93cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiNTA2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyV2luZG93cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorXkNNYWtlIEVycm9yIGF0IC4qL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKKyAgVGhlIEMgY29tcGlsZXIKKworICAgICJbXiJdKi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlci8xL2djYyIKKworICBpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyV2luZG93cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyV2luZG93cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWE3ZTJiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1NlbGVjdENvbXBpbGVyLzE7JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1NlbGVjdENvbXBpbGVyLzI7JEVOVntQQVRIfSIpCit1bnNldChFTlZ7Q0N9KQorZW5hYmxlX2xhbmd1YWdlKEMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUuY21ha2UKaW5kZXggMmU5YjFjYi4uMDBkOGExYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdWRhU2ltcGxlLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VkYVNpbXBsZS5jbWFrZQpAQCAtMSwzICsxLDQgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwNCBORVcpCiBlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKIGZpbGUoVE9VQ0ggJHtDTUFLRV9CSU5BUllfRElSfS9lbXB0eS5jbWFrZSkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBkNGEwOGE5Li43NmI0ODhlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMjg5LDcgKzI4OSw4IEBACiAgICItRENNQUtFX0RFRkFVTFRfQ09ORklHUz1hbGwiCiAgICkKIAotaWYoQ01ha2VfVEVTVF9DVURBKQorIyBDdWRhU2ltcGxlIHVzZXMgc2VwYXJhYmxlIGNvbXBpbGF0aW9uLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgb24gTlZDQy4KK2lmKENNYWtlX1RFU1RfQ1VEQSBBTkQgTk9UIENNYWtlX1RFU1RfQ1VEQSBTVFJFUVVBTCAiQ2xhbmciKQogICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ3VkYVNpbXBsZS1idWlsZCkKICAgcnVuX2NtYWtlX2NvbmZpZ3VyZShDdWRhU2ltcGxlKQogICBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9PYmplY3RMaWJyYXJ5L01pc3NpbmdTb3VyY2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvTWlzc2luZ1NvdXJjZS1zdGRlcnIudHh0CmluZGV4IDQxMWNkN2MuLjVjNzg4MmQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvTWlzc2luZ1NvdXJjZS1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvTWlzc2luZ1NvdXJjZS1zdGRlcnIudHh0CkBAIC0zLDcgKzMsNyBAQAogCiAgICAgbWlzc2luZy5jCiAKLSAgVHJpZWQgZXh0ZW5zaW9ucyggXC5bQS1aYS16K10rfAotICkqCisgIFRyaWVkIGV4dGVuc2lvbnMgXC5jIFwuQyAuKgorLioKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvYi5jIGIvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9iLmMKaW5kZXggMjIwY2UwMy4uMmM2NWEyYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9iLmMKKysrIGIvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9iLmMKQEAgLTUsNyArNSw3IEBACiAjZW5kaWYKIAogZXh0ZXJuIGludCBhKHZvaWQpOwotRVhQT1JUIGludCBiKCkKK0VYUE9SVCBpbnQgYih2b2lkKQogewogICByZXR1cm4gYSgpOwogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9yZXF1aXJlcy5jIGIvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9yZXF1aXJlcy5jCmluZGV4IDY4NTYzMmIuLmE1YjQyOWEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvcmVxdWlyZXMuYworKysgYi9UZXN0cy9SdW5DTWFrZS9PYmplY3RMaWJyYXJ5L3JlcXVpcmVzLmMKQEAgLTEsNSArMSw1IEBACiAjaWZkZWYgUkVRVUlSRUQKLWludCByZXF1aXJlZCgpCitpbnQgcmVxdWlyZWQodm9pZCkKIHsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9PYnNvbGV0ZVF0TWFjcm9zL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvT2Jzb2xldGVRdE1hY3Jvcy9DTWFrZUxpc3RzLnR4dAppbmRleCA2NWFjOGU4Li40NGI1ZDMwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9PYnNvbGV0ZVF0TWFjcm9zL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL09ic29sZXRlUXRNYWNyb3MvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjExKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1Bvc2l0aW9uSW5kZXBlbmRlbnRDb2RlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvUG9zaXRpb25JbmRlcGVuZGVudENvZGUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTBhZmMxMi4uYzM5MjJkNiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUG9zaXRpb25JbmRlcGVuZGVudENvZGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvUG9zaXRpb25JbmRlcGVuZGVudENvZGUvQ01ha2VMaXN0cy50eHQKQEAgLTEsNSArMSw1IEBACiAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQ1hYKQogCiAjIE1TVkMgY3JlYXRlcyBleHRyYSB0YXJnZXRzIHdoaWNoIHBvbGx1dGUgdGhlIHN0ZGVyciB1bmxlc3Mgd2Ugc2V0IHRoaXMuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaFdhcm5JbnZhbGlkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlN2ZiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIyIEBACitpZiAoTk9UIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VfEludGVsIiBPUgorICAgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkludGVsIiBBTkQgQ01BS0VfSE9TVF9XSU4zMikpCisgIHJldHVybigpCitlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY29tcGlsZV9jb21tYW5kcy5qc29uIGVtcHR5X2Rpcl9jb21tYW5kcworICAgICBSRUdFWCAiY29tbWFuZC4qLVdpbnZhbGlkLXBjaC4qZW1wdHkuZGlyL2NtYWtlX3BjaC5oIikKK2ZpbGUoU1RSSU5HUyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY29tcGlsZV9jb21tYW5kcy5qc29uIGZvb19kaXJfY29tbWFuZHMKKyAgICAgUkVHRVggImNvbW1hbmQuKi1XaW52YWxpZC1wY2guKmZvby5kaXIvY21ha2VfcGNoLmgiKQorCitsaXN0KExFTkdUSCBlbXB0eV9kaXJfY29tbWFuZHMgZW1wdHlfZGlyX2NvbW1hbmRzX3NpemUpCitsaXN0KExFTkdUSCBmb29fZGlyX2NvbW1hbmRzIGZvb19kaXJfY29tbWFuZHNfc2l6ZSkKKworaWYgKGVtcHR5X2Rpcl9jb21tYW5kc19zaXplIEVRVUFMIDApCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiZW1wdHkgdGFyZ2V0IHNob3VsZCBoYXZlIC1XaW52YWxpZC1wY2ggY29tcGlsZSBvcHRpb24gcHJlc2VudCIpCisgIHJldHVybigpCitlbmRpZigpCisKK2lmIChmb29fZGlyX2NvbW1hbmRzX3NpemUgR1JFQVRFUiAwKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImZvbyB0YXJnZXQgc2hvdWxkIG5vdCBoYXZlIC1XaW52YWxpZC1wY2ggY29tcGlsZSBvcHRpb24gcHJlc2VudCIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaFdhcm5JbnZhbGlkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjU2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTIE9OKQorCithZGRfbGlicmFyeShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyhlbXB0eSBQVUJMSUMKKyAgPHN0ZGlvLmg+CisgIDxzdHJpbmcuaD4KKykKKworYWRkX2xpYnJhcnkoZm9vIGZvby5jKQordGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyhmb28gUFVCTElDCisgIDxzdGRpby5oPgorICA8c3RyaW5nLmg+CispCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZm9vIFBST1BFUlRJRVMgUENIX1dBUk5fSU5WQUxJRCBPRkYpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggZjU4N2M3ZC4uMzgxYjgwMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNCwxMiArNCw5IEBACiBmdW5jdGlvbihydW5fdGVzdCBuYW1lKQogICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtuYW1lfS1idWlsZCkKICAgcnVuX2NtYWtlKCR7bmFtZX0pCi0gICMgUHJlY29tcGlsZWQgaGVhZGVycyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMuCi0gIGlmKE5PVCAiJEVOVntDTUFLRV9PU1hfQVJDSElURUNUVVJFU30iIE1BVENIRVMgIls7JF0iKQotICAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCi0gICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtuYW1lfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKLSAgICBydW5fY21ha2VfY29tbWFuZCgke25hbWV9LXRlc3QgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZykKLSAgZW5kaWYoKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBydW5fY21ha2VfY29tbWFuZCgke25hbWV9LWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnKQorICBydW5fY21ha2VfY29tbWFuZCgke25hbWV9LXRlc3QgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZykKIGVuZGZ1bmN0aW9uKCkKIAogcnVuX2NtYWtlKERpc2FibGVkUGNoKQpAQCAtMjEsMyArMTgsNiBAQAogcnVuX3Rlc3QoUGNoUmV1c2VGcm9tUHJlZml4ZWQpCiBydW5fdGVzdChQY2hSZXVzZUZyb21TdWJkaXIpCiBydW5fY21ha2UoUGNoTXVsdGlsYW5ndWFnZSkKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJNYWtlfE5pbmphIikKKyAgcnVuX2NtYWtlKFBjaFdhcm5JbnZhbGlkKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL2VtcHR5LmMKaW5kZXggMzBhZTFjNC4uMmE1MWViYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvZW1wdHkuYworKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9lbXB0eS5jCkBAIC0xLDMgKzEsMyBAQAotdm9pZCBub3RoaW5nKCkKK3ZvaWQgbm90aGluZyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUnVuQ01ha2UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQppbmRleCBjYjIwZmIxLi5jMTNjNjk0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQpAQCAtMTU0LDYgKzE1NCw3IEBACiAKICAgICAifFteXG5dKnhjb2RlYnVpbGRbXlxuXSp3YXJuaW5nOiBmaWxlIHR5cGVbXlxuXSppcyBiYXNlZCBvbiBtaXNzaW5nIGZpbGUgdHlwZSIKICAgICAifFteXG5dKmlzIGEgbWVtYmVyIG9mIG11bHRpcGxlIGdyb3VwcyIKKyAgICAifFteXG5dKm9mZnNldCBpbiBhcmNoaXZlIG5vdCBhIG11bHRpcGxlIG9mIDgiCiAgICAgInxbXlxuXSpmcm9tIFRpbWUgTWFjaGluZSBieSBwYXRoIgogICAgICJ8W15cbl0qQnVsbHNleWUgVGVzdGluZyBUZWNobm9sb2d5IgogICAgICIpW15cbl0qXG4pKyIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1NvdXJjZVByb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9Tb3VyY2VQcm9wZXJ0aWVzL0NNYWtlTGlzdHMudHh0CmluZGV4IGExN2M4Y2QuLmU5M2YwYjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1NvdXJjZVByb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvU291cmNlUHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQykKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZlYTJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgiJHtpbmNsdWRlX2Rpcn0vJHtSdW5DTWFrZV9URVNUfS5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvUHJpbnRUcmVlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9QcmludFRyZWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTkxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvUHJpbnRUcmVlcy5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK21lc3NhZ2UoU1RBVFVTICJzb3VyY2U6ICcke0NNQUtFX1NPVVJDRV9ESVJ9JyIpCittZXNzYWdlKFNUQVRVUyAiYmluYXJ5OiAnJHtDTUFLRV9CSU5BUllfRElSfSciKQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChyZWFsX3NvdXJjZSAiJHtDTUFLRV9TT1VSQ0VfRElSfSIgUkVBTFBBVEgpCitnZXRfZmlsZW5hbWVfY29tcG9uZW50KHJlYWxfYmluYXJ5ICIke0NNQUtFX0JJTkFSWV9ESVJ9IiBSRUFMUEFUSCkKK21lc3NhZ2UoU1RBVFVTICJyZWFsIHNvdXJjZTogJyR7cmVhbF9zb3VyY2V9JyIpCittZXNzYWdlKFNUQVRVUyAicmVhbCBiaW5hcnk6ICcke3JlYWxfYmluYXJ5fSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmMWY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwzNCBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworIyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBgYCR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtuYW1lfS9zb3VyY2VgYCBhbmQKKyMgYGAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7bmFtZX0vYmluYXJ5YGAgYXJlIHNldCB1cCBwcm9wZXJseSBwcmlvciB0bworIyBjYWxsaW5nIGl0LgorZnVuY3Rpb24gKHJ1bl9zeW1saW5rX3Rlc3QgbmFtZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gVFJVRSkKKyAgY29uZmlndXJlX2ZpbGUoCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ01ha2VMaXN0cy50eHQiCisgICAgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtuYW1lfS9zb3VyY2UvQ01ha2VMaXN0cy50eHQiCisgICAgQ09QWU9OTFkpCisgIHNldChSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVIgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtuYW1lfS9zb3VyY2UiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7bmFtZX0vYmluYXJ5IikKKyAgIyBFbXVsYXRlIGEgc2hlbGwgdXNpbmcgdGhpcyBkaXJlY3RvcnkuCisgIHNldChFTlZ7UFdEfSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUworICAgICItRGluY2x1ZGVfZGlyOlBBVEg9JHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCisgIHJ1bl9jbWFrZSgiJHtuYW1lfV9zeW1saW5rcyIpCitlbmRmdW5jdGlvbiAoKQorCisjIENyZWF0ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKyMKKyMgICAuLi4vY29tbW9uX3JlYWwvc291cmNlCisjICAgLi4uL2NvbW1vbl9yZWFsL2JpbmFyeQorIyAgIC4uLi9jb21tb24gLT4gY29tbW9uX3JlYWwKKyMKKyMgSW4gdGhpcyBjYXNlLCBDTWFrZSBzaG91bGQgYWN0IGFzIGlmIC4uLi9jb21tb24gKmlzKiAuLi4vY29tbW9uX3JlYWwgZm9yIGFsbAorIyBjb21wdXRhdGlvbnMgZXhjZXB0IGBgUkVBTFBBVEhgYC4gIFRoaXMgc3VwcG9ydHMgdGhlIGNhc2Ugd2hlcmUgYSBzeXN0ZW0gaGFzCisjIGEgc3RhYmxlICpzeW1saW5rKiwgYnV0IG5vdCBhIHN0YWJsZSB0YXJnZXQgZm9yIHRoYXQgc3ltbGluay4KK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vY29tbW9uX3JlYWwiKQorZmlsZShSRU1PVkUgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vY29tbW9uIikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vY29tbW9uX3JlYWwvc291cmNlIikKK2ZpbGUoQ1JFQVRFX0xJTksgImNvbW1vbl9yZWFsIiAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9jb21tb24iIFNZTUJPTElDKQorcnVuX3N5bWxpbmtfdGVzdChjb21tb24pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvY29tbW9uX3N5bWxpbmtzLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvY29tbW9uX3N5bWxpbmtzLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwNDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9jb21tb25fc3ltbGlua3Mtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDQgQEAKKy0tIHNvdXJjZTogJ1teJ10qL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9jb21tb24vc291cmNlJworLS0gYmluYXJ5OiAnW14nXSovVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL2NvbW1vbi9iaW5hcnknCistLSByZWFsIHNvdXJjZTogJ1teJ10qL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9jb21tb25fcmVhbC9zb3VyY2UnCistLSByZWFsIGJpbmFyeTogJ1teJ10qL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9jb21tb25fcmVhbC9iaW5hcnknCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvY29tbW9uX3N5bWxpbmtzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL2NvbW1vbl9zeW1saW5rcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWFmZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL2NvbW1vbl9zeW1saW5rcy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1ByaW50VHJlZXMuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3ludGF4L0NvbW1hbmRFT0Ytc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1N5bnRheC9Db21tYW5kRU9GLXN0ZGVyci50eHQKaW5kZXggMzFjYmMwOC4uYjlmOGZkMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvU3ludGF4L0NvbW1hbmRFT0Ytc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9TeW50YXgvQ29tbWFuZEVPRi1zdGRlcnIudHh0CkBAIC0xLDQgKzEsNCBAQAotXkNNYWtlIEVycm9yIGluIENvbW1hbmRFT0YuY21ha2U6CiteQ01ha2UgRXJyb3IgYXQgQ29tbWFuZEVPRi5jbWFrZToxOgogICBVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLgogCiAgIFBhcnNlIGVycm9yLiAgRnVuY3Rpb24gbWlzc2luZyBvcGVuaW5nICJcKCIuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRPYmplY3RzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0T2JqZWN0cy9DTWFrZUxpc3RzLnR4dAppbmRleCBiZTlkNDAzLi40NGI1ZDMwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRPYmplY3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldE9iamVjdHMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9KQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UG9saWNpZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFBvbGljaWVzL1BvbGljeUxpc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFBvbGljaWVzL1BvbGljeUxpc3Qtc3RkZXJyLnR4dAppbmRleCA5YTFlMDI3Li4yNDU0ZjI1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9Qb2xpY3lMaXN0LXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UG9saWNpZXMvUG9saWN5TGlzdC1zdGRlcnIudHh0CkBAIC0yOSw2ICsyOSw5IEBACiAgICBcKiBDTVAwMDgzCiAgICBcKiBDTVAwMDk1CiAgICBcKiBDTVAwMDk5CisgICBcKiBDTVAwMTA0CisgICBcKiBDTVAwMTA1CisgICBcKiBDTVAwMTA4CiAKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL0NNYWtlTGlzdHMudHh0CmluZGV4IGJlOWQ0MDMuLjQ0YjVkMzAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0pCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0eUdlbmVyYXRvckV4cHJlc3Npb25zL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydHlHZW5lcmF0b3JFeHByZXNzaW9ucy9DTWFrZUxpc3RzLnR4dAppbmRleCA5MGFmYzEyLi5jMzkyMmQ2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0eUdlbmVyYXRvckV4cHJlc3Npb25zL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnR5R2VuZXJhdG9yRXhwcmVzc2lvbnMvQ01ha2VMaXN0cy50eHQKQEAgLTEsNSArMSw1IEBACiAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQ1hYKQogCiAjIE1TVkMgY3JlYXRlcyBleHRyYSB0YXJnZXRzIHdoaWNoIHBvbGx1dGUgdGhlIHN0ZGVyciB1bmxlc3Mgd2Ugc2V0IHRoaXMuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRTb3VyY2VzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0U291cmNlcy9DTWFrZUxpc3RzLnR4dAppbmRleCBmNDUyZGIxLi5hMDY1OTFjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRTb3VyY2VzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFNvdXJjZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMjRkYWE2NC4uOWJhM2M4NSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsMTQgKzEsMjAgQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX2MpCitydW5fY21ha2UodW5pdHlidWlsZF9jX2JhdGNoKQorcnVuX2NtYWtlKHVuaXR5YnVpbGRfY19ncm91cCkKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX2N4eCkKK3J1bl9jbWFrZSh1bml0eWJ1aWxkX2N4eF9ncm91cCkKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX2NfYW5kX2N4eCkKK3J1bl9jbWFrZSh1bml0eWJ1aWxkX2NfYW5kX2N4eF9ncm91cCkKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX2JhdGNoc2l6ZSkKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX2RlZmF1bHRfYmF0Y2hzaXplKQogcnVuX2NtYWtlKHVuaXR5YnVpbGRfc2tpcCkKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX2NvZGVfYmVmb3JlX2FuZF9hZnRlcl9pbmNsdWRlKQogcnVuX2NtYWtlKHVuaXR5YnVpbGRfY19ub191bml0eV9idWlsZCkKK3J1bl9jbWFrZSh1bml0eWJ1aWxkX2Nfbm9fdW5pdHlfYnVpbGRfZ3JvdXApCiBydW5fY21ha2UodW5pdHlidWlsZF9vcmRlcikKK3J1bl9jbWFrZSh1bml0eWJ1aWxkX2ludmFsaWRfbW9kZSkKIAogZnVuY3Rpb24ocnVuX3Rlc3QgbmFtZSkKICAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7bmFtZX0tYnVpbGQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL2YuYyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODEzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL2YuYwpAQCAtMCwwICsxLDUgQEAKK2ludCBmKGludCB4KQoreworICAodm9pZCl4OworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2FuZF9jeHhfZ3JvdXAtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19hbmRfY3h4X2dyb3VwLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjc2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19hbmRfY3h4X2dyb3VwLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDIgQEAKK3NldCh1bml0eWJ1aWxkX2FfYyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9hX2MuYyIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYV9jfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYV9jfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZWxzZSgpCisgICN2ZXJpZnkgdGhhdCB0aGUgNCBjIGZpbGUgaXMgcGFydCBvZiB0aGlzIGdyb3VwaW5nIGFuZCB0aGVyZWZvcmUgVU5JVFlfQlVJTERfQkFUQ0hfU0laRQorICAjd2FzIGlnbm9yZWQKKyAgZmlsZShTVFJJTkdTICR7dW5pdHlidWlsZF9hX2N9IHVuaXR5YnVpbGRfYV9jX3N0cmluZ3MpCisgIHN0cmluZyhSRUdFWCBNQVRDSCAiLiojaW5jbHVkZS4qczEuYy4qI2luY2x1ZGUuKnMyLmMuKiNpbmNsdWRlLipzMy5jLiojaW5jbHVkZS4qczQuYy4qIiBtYXRjaGVkX2NvZGUgJHt1bml0eWJ1aWxkX2FfY19zdHJpbmdzfSkKKyAgaWYoTk9UIG1hdGNoZWRfY29kZSkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBmaWxlIGRvZXNuJ3QgaW5jbHVkZSBleHBlY3RlZCBzb3VyY2UgZmlsZXMiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworc2V0KHVuaXR5YnVpbGRfYl9jICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X2JfYy5jIikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9iX2N9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9iX2N9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKKworc2V0KHVuaXR5YnVpbGRfYV9jeHggIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfYV9jeHguY3h4IikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9hX2N4eH0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2FfY3h4fSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZWxzZSgpCisgICN2ZXJpZnkgdGhhdCB0aGUgNCBjeHggZmlsZSBhcmUgcGFydCBvZiB0aGlzIGdyb3VwaW5nIGFuZCB0aGVyZWZvcmUgVU5JVFlfQlVJTERfQkFUQ0hfU0laRQorICAjd2FzIGlnbm9yZWQKKyAgZmlsZShTVFJJTkdTICR7dW5pdHlidWlsZF9hX2N4eH0gdW5pdHlidWlsZF9hX2N4eF9zdHJpbmdzKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIi4qI2luY2x1ZGUuKnMxLmN4eC4qI2luY2x1ZGUuKnMyLmN4eC4qI2luY2x1ZGUuKnMzLmN4eC4qI2luY2x1ZGUuKnM0LmN4eC4qIiBtYXRjaGVkX2NvZGUgJHt1bml0eWJ1aWxkX2FfY3h4X3N0cmluZ3N9KQorICBpZihOT1QgbWF0Y2hlZF9jb2RlKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IGZpbGUgZG9lc24ndCBpbmNsdWRlIGV4cGVjdGVkIHNvdXJjZSBmaWxlcyIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCitzZXQodW5pdHlidWlsZF9iX2N4eCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9iX2N4eC5jeHgiKQoraWYoTk9UIEVYSVNUUyAiJHt1bml0eWJ1aWxkX2JfY3h4fSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYl9jeHh9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19hbmRfY3h4X2dyb3VwLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYW5kX2N4eF9ncm91cC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmYzZjRiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYW5kX2N4eF9ncm91cC5jbWFrZQpAQCAtMCwwICsxLDM5IEBACitwcm9qZWN0KHVuaXR5YnVpbGRfY19hbmRfY3h4IEMgQ1hYKQorCitzZXQoc3JjcyBmLmMpCitmb3JlYWNoKHMgUkFOR0UgMSA4KQorICBzZXQoc3JjX2MgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zJHtzfS5jIikKKyAgZmlsZShXUklURSAiJHtzcmNfY30iICIKK2ludCBmKGludCk7XG4KK2ludCBzJHtzfSh2b2lkKSB7IHJldHVybiBmKCR7c30pOyB9XG4iCisgICkKKworICBzZXQoc3JjX2N4eCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Mke3N9LmN4eCIpCisgIGZpbGUoV1JJVEUgIiR7c3JjX2N4eH0iICIKK2V4dGVybiBcIkNcIiB7IFxuCisgIGludCBmKGludCk7IFxuCit9XG4KKyAgaW50IHMke3N9KHZvaWQpIHsgcmV0dXJuIGYoJHtzfSk7IH1cbiIKKyAgKQorCisgIGxpc3QoQVBQRU5EIHNyY3MgIiR7c3JjX2N9IikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmNfY3h4fSIpCitlbmRmb3JlYWNoKCkKKworCisKK2FkZF9saWJyYXJ5KHRndCBTSEFSRUQgJHtzcmNzfSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHRndCBQUk9QRVJUSUVTIFVOSVRZX0JVSUxEIE9OCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEX01PREUgR1JPVVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgI1VOSVRZX0JVSUxEX0JBVENIX1NJWkUgd2lsbCBiZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEX0JBVENIX1NJWkUgMikKKworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHMxLmMgczIuYyBzMy5jIHM0LmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMS5jeHggczIuY3h4IHMzLmN4eCBzNC5jeHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJhIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzNS5jIHM2LmMgczcuYyBzOC5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgczUuY3h4IHM2LmN4eCBzNy5jeHggczguY3h4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAiYiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19iYXRjaC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2JhdGNoLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDI4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19iYXRjaC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK3NldCh1bml0eWJ1aWxkX2MgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfMF9jLmMiKQoraWYoTk9UIEVYSVNUUyAiJHt1bml0eWJ1aWxkX2N9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9jfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYmF0Y2guY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19iYXRjaC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg3M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYmF0Y2guY21ha2UKQEAgLTAsMCArMSwxNSBAQAorcHJvamVjdCh1bml0eWJ1aWxkX2MgQykKKworc2V0KHNyY3MgIiIpCitmb3JlYWNoKHMgUkFOR0UgMSA4KQorICBzZXQoc3JjICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcyR7c30uYyIpCisgIGZpbGUoV1JJVEUgIiR7c3JjfSIgImludCBzJHtzfSh2b2lkKSB7IHJldHVybiAwOyB9XG4iKQorICBsaXN0KEFQUEVORCBzcmNzICIke3NyY30iKQorZW5kZm9yZWFjaCgpCisKK2FkZF9saWJyYXJ5KHRndCBTSEFSRUQgJHtzcmNzfSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHRndCBQUk9QRVJUSUVTCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEIE9OCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEX01PREUgQkFUQ0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfZ3JvdXAtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19ncm91cC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjllYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfZ3JvdXAtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxMSBAQAorc2V0KHVuaXR5YnVpbGRfYV9jICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X2FfYy5jIikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9hX2N9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9hX2N9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKK3NldCh1bml0eWJ1aWxkX2JfYyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9iX2MuYyIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYl9jfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYl9jfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfZ3JvdXAuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19ncm91cC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmExN2YzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfZ3JvdXAuY21ha2UKQEAgLTAsMCArMSwxNyBAQAorcHJvamVjdCh1bml0eWJ1aWxkX2MgQykKKworc2V0KHNyY3MgIiIpCitmb3JlYWNoKHMgUkFOR0UgMSA4KQorICBzZXQoc3JjICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcyR7c30uYyIpCisgIGZpbGUoV1JJVEUgIiR7c3JjfSIgImludCBzJHtzfSh2b2lkKSB7IHJldHVybiAwOyB9XG4iKQorICBsaXN0KEFQUEVORCBzcmNzICIke3NyY30iKQorZW5kZm9yZWFjaCgpCisKK2FkZF9saWJyYXJ5KHRndCBTSEFSRUQgJHtzcmNzfSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHRndCBQUk9QRVJUSUVTIFVOSVRZX0JVSUxEIE9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JVFlfQlVJTERfTU9ERSBHUk9VUCkKKworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHMxLmMgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAiYSIpCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoczIuYyBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJhIikKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzMy5jIHM0LmMgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAiYiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19ub191bml0eV9idWlsZF9ncm91cC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX25vX3VuaXR5X2J1aWxkX2dyb3VwLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDQ2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19ub191bml0eV9idWlsZF9ncm91cC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK3NldCh1bml0eWJ1aWxkX2MgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfYV9jLmMiKQoraWYoRVhJU1RTICIke3VuaXR5YnVpbGRfY30iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2N9IHNob3VsZCBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX25vX3VuaXR5X2J1aWxkX2dyb3VwLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2Nfbm9fdW5pdHlfYnVpbGRfZ3JvdXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyNmRjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX25vX3VuaXR5X2J1aWxkX2dyb3VwLmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKK3Byb2plY3QodW5pdHlidWlsZF9jX25vX3VuaXR5X2J1aWxkIEMpCisKK3NldChzcmNzICIiKQorZm9yZWFjaChzIFJBTkdFIDEgOCkKKyAgc2V0KHNyYyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Mke3N9LmMiKQorICBmaWxlKFdSSVRFICIke3NyY30iICJpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gMDsgfVxuIikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmN9IikKK2VuZGZvcmVhY2goKQorCithZGRfbGlicmFyeSh0Z3QgU0hBUkVEICR7c3Jjc30pCisKKyNUaGVzZSBzaG91bGQgYmUgaWdub3JlZCBhcyBVTklUWV9CVUlMRCBpcyBvZmYKK3NldF90YXJnZXRfcHJvcGVydGllcyh0Z3QgUFJPUEVSVElFUyBVTklUWV9CVUlMRF9NT0RFIEdST1VQKQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHMxLmMgczIuYyBzMy5jIHM0LmMgczUuYyBzNi5jIHM3LmMgczguYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgImEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2N4eF9ncm91cC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jeHhfZ3JvdXAtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlZjNhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jeHhfZ3JvdXAtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyNyBAQAorc2V0KHVuaXR5YnVpbGRfYV9jeHggIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfYV9jeHguY3h4IikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9hX2N4eH0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2FfY3h4fSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZWxzZSgpCisgICN2ZXJpZnkgdGhhdCBvZHIyIGlzIG5vdCBwYXJ0IG9mIHRoaXMgc291cmNlIHNldAorICBmaWxlKFNUUklOR1MgJHt1bml0eWJ1aWxkX2FfY3h4fSB1bml0eWJ1aWxkX2FfY3h4X3N0cmluZ3MpCisgIHN0cmluZyhSRUdFWCBNQVRDSCAiLiojaW5jbHVkZS4qb2RyMi5jeHgiIG1hdGNoZWRfY29kZSAke3VuaXR5YnVpbGRfYV9jeHhfc3RyaW5nc30pCisgIGlmKG1hdGNoZWRfY29kZSkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBmaWxlIGluY2x1ZGVzIHVuLWV4cGVjdGVkIG9yZDIuY3h4IHNvdXJjZSBmaWxlIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCitlbmRpZigpCisKK3NldCh1bml0eWJ1aWxkX2JfY3h4ICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X2JfY3h4LmN4eCIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYl9jeHh9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9iX2N4eH0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2Vsc2UoKQorICAjdmVyaWZ5IHRoYXQgb2RyMSBpcyBub3QgcGFydCBvZiB0aGlzIHNvdXJjZSBzZXQKKyAgZmlsZShTVFJJTkdTICR7dW5pdHlidWlsZF9iX2N4eH0gdW5pdHlidWlsZF9iX2N4eF9zdHJpbmdzKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIi4qI2luY2x1ZGUuKm9kcjEuY3h4IiBtYXRjaGVkX2NvZGUgJHt1bml0eWJ1aWxkX2JfY3h4X3N0cmluZ3N9KQorICBpZihtYXRjaGVkX2NvZGUpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgZmlsZSBpbmNsdWRlcyB1bi1leHBlY3RlZCBvcmQxLmN4eCBzb3VyY2UgZmlsZSIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2N4eF9ncm91cC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jeHhfZ3JvdXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwNDI4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jeHhfZ3JvdXAuY21ha2UKQEAgLTAsMCArMSwyNyBAQAorcHJvamVjdCh1bml0eWJ1aWxkX2N4eCBDWFgpCisKK3NldChzcmNzICIiKQorZm9yZWFjaChzIFJBTkdFIDEgNCkKKyAgc2V0KHNyYyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Mke3N9LmN4eCIpCisgIGZpbGUoV1JJVEUgIiR7c3JjfSIgImludCBzJHtzfSh2b2lkKSB7IHJldHVybiAwOyB9XG4iKQorICBsaXN0KEFQUEVORCBzcmNzICIke3NyY30iKQorZW5kZm9yZWFjaCgpCisKK2ZvcmVhY2gocyBSQU5HRSAxIDIpCisgIHNldChzcmMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9vZHIke3N9LmN4eCIpCisgIGZpbGUoV1JJVEUgIiR7c3JjfSIgIm5hbWVzcGFjZSBvZHIgeyBpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gMDsgfSB9XG4iKQorICBsaXN0KEFQUEVORCBzcmNzICIke3NyY30iKQorZW5kZm9yZWFjaCgpCisKK2FkZF9saWJyYXJ5KHRndCBTSEFSRUQgJHtzcmNzfSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHRndCBQUk9QRVJUSUVTIFVOSVRZX0JVSUxEIE9OCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEX01PREUgR1JPVVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoczEuY3h4IHMyLmN4eCBvZHIxLmN4eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgImEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHMzLmN4eCBzNC5jeHggb2RyMi5jeHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfaW52YWxpZF9tb2RlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2ludmFsaWRfbW9kZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfaW52YWxpZF9tb2RlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfaW52YWxpZF9tb2RlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiMTdhMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9pbnZhbGlkX21vZGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK15DTWFrZSBFcnJvciBpbiBDTWFrZUxpc3RzLnR4dDoKKyAgSW52YWxpZCBVTklUWV9CVUlMRF9NT0RFIHZhbHVlIG9mIElOVkFMSUQgYXNzaWduZWQgdG8gdGFyZ2V0IHRndFwuCisgIEFjY2VwdGFibGUgdmFsdWVzIGFyZSBCQVRDSCBhbmQgR1JPVVBcLgorLioKK0NNYWtlIEdlbmVyYXRlIHN0ZXAgZmFpbGVkXC4gIEJ1aWxkIGZpbGVzIGNhbm5vdCBiZSByZWdlbmVyYXRlZCBjb3JyZWN0bHlcLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9pbnZhbGlkX21vZGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfaW52YWxpZF9tb2RlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTIyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfaW52YWxpZF9tb2RlLmNtYWtlCkBAIC0wLDAgKzEsMTIgQEAKK3Byb2plY3QodW5pdHlidWlsZF9jIEMpCisKK3NldChzcmNzICIiKQorZm9yZWFjaChzIFJBTkdFIDEgOCkKKyAgc2V0KHNyYyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Mke3N9LmMiKQorICBmaWxlKFdSSVRFICIke3NyY30iICJpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gMDsgfVxuIikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmN9IikKK2VuZGZvcmVhY2goKQorCithZGRfbGlicmFyeSh0Z3QgU0hBUkVEICR7c3Jjc30pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyh0Z3QgUFJPUEVSVElFUyBVTklUWV9CVUlMRCBPTiBVTklUWV9CVUlMRF9NT0RFIElOVkFMSUQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9mb28uY3MgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9mb28uY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5NWRjOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL2Zvby5jcwpAQCAtMCwwICsxLDMgQEAKK3ZvaWQgZm9vKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL2ltYWdlcy9lbXB0eS5ibXAgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9pbWFnZXMvZW1wdHkuYm1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9pbWFnZXMvZW1wdHkuYm1wCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9uZXN0ZWQvYmF6LmNzIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkL2Jhei5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQzMzRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkL2Jhei5jcwpAQCAtMCwwICsxLDMgQEAKK3ZvaWQgYmF6KCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA4YTA0Zjc4Li45M2VmNjAzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0zLDEyICszLDEyIEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogY21ha2VfcG9saWN5KFNFVCBDTVAwMDU0IE5FVykKIAorcnVuX2NtYWtlKFZzQ3NoYXJwU291cmNlR3JvdXApCiBydW5fY21ha2UoVnNDU2hhcnBDb21waWxlck9wdHMpCiBydW5fY21ha2UoRXhwbGljaXRDTWFrZUxpc3RzKQogcnVuX2NtYWtlKFJ1bnRpbWVMaWJyYXJ5KQogcnVuX2NtYWtlKFNvdXJjZUdyb3VwQ01ha2VMaXN0cykKIHJ1bl9jbWFrZShTb3VyY2VHcm91cFRyZWVDTWFrZUxpc3RzKQotCiBydW5fY21ha2UoVnNDb25maWd1cmF0aW9uVHlwZSkKIHJ1bl9jbWFrZShWc1RhcmdldHNGaWxlUmVmZXJlbmNlcykKIHJ1bl9jbWFrZShWc0N1c3RvbVByb3BzKQpAQCAtMzAsNiArMzAsMTAgQEAKIHJ1bl9jbWFrZShWc0RwaUF3YXJlQmFkUGFyYW0pCiBydW5fY21ha2UoVnNQcmVjb21waWxlSGVhZGVycykKIHJ1bl9jbWFrZShWc1ByZWNvbXBpbGVIZWFkZXJzUmV1c2VGcm9tQ29tcGlsZVBEQk5hbWUpCitydW5fY21ha2UoVnNEZXBsb3lFbmFibGVkKQorcnVuX2NtYWtlKFZzU2V0dGluZ3MpCitydW5fY21ha2UoVnNTb3VyY2VTZXR0aW5nc1Rvb2wpCitydW5fY21ha2UoVnNQbGF0Zm9ybVRvb2xzZXQpCiAKIHJ1bl9jbWFrZShWc1dpblJUQnlEZWZhdWx0KQogCkBAIC01Miw2ICs1Niw3IEBACiAgIHJ1bl9jbWFrZShVbml0eUJ1aWxkUHJlMjAxNykKIGVsc2UoKQogICBydW5fY21ha2UoVW5pdHlCdWlsZE5hdGl2ZSkKKyAgcnVuX2NtYWtlKFVuaXR5QnVpbGROYXRpdmVHcm91cGVkKQogZW5kaWYoKQogCiBydW5fY21ha2UoVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmspCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkTmF0aXZlR3JvdXBlZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1VuaXR5QnVpbGROYXRpdmVHcm91cGVkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MzgwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkTmF0aXZlR3JvdXBlZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDU2IEBACitzZXQodW5pdHlidWlsZF9jMCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9wb29sQV9jLmMiKQoraWYoTk9UIEVYSVNUUyAiJHt1bml0eWJ1aWxkX2MwfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYzB9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKK3NldCh1bml0eWJ1aWxkX2MxICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X3Bvb2xCX2MuYyIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYzF9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9jMX0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworc2V0KHRndF9wcm9qZWN0ICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGd0LnZjeHByb2oiKQoraWYgKE5PVCBFWElTVFMgIiR7dGd0X3Byb2plY3R9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgcHJvamVjdCBmaWxlICR7dGd0X3Byb2plY3R9IGRvZXNuJ3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworZmlsZShTVFJJTkdTICR7dGd0X3Byb2plY3R9IHRndF9wcm9qZWN0c19zdHJpbmdzKQorCitmb3JlYWNoKGxpbmUgSU4gTElTVFMgdGd0X3Byb2plY3RzX3N0cmluZ3MpCisgIGlmIChsaW5lIE1BVENIRVMgIjxFbmFibGVVbml0eVN1cHBvcnQ+dHJ1ZTwvRW5hYmxlVW5pdHlTdXBwb3J0PiIpCisgICAgc2V0KGhhdmVfdW5pdHlfc3VwcG9ydCBPTikKKyAgZW5kaWYoKQorCisgIGlmIChsaW5lIE1BVENIRVMgIjxDbENvbXBpbGUgSW5jbHVkZT0uKkluY2x1ZGVJblVuaXR5RmlsZT1cImZhbHNlXCIgQ3VzdG9tVW5pdHlGaWxlPVwidHJ1ZVwiIikKKyAgICBsaXN0KEFQUEVORCB1bml0eV9zb3VyY2VfbGluZXMgJHtsaW5lfSkKKyAgZW5kaWYoKQorCisgIGlmIChsaW5lIE1BVENIRVMgIjxDbENvbXBpbGUgSW5jbHVkZT0uKkluY2x1ZGVJblVuaXR5RmlsZT1cInRydWVcIiBDdXN0b21Vbml0eUZpbGU9XCJ0cnVlXCIiKQorICAgIGxpc3QoQVBQRU5EIHNvdXJjZXNfbGlzdCAke2xpbmV9KQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworaWYgKE5PVCBoYXZlX3VuaXR5X3N1cHBvcnQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHByb2plY3Qgc2hvdWxkIGluY2x1ZGUgdGhlIDxFbmFibGVVbml0eVN1cHBvcnQ+IGJsb2NrLiIpCisgIHJldHVybigpCitlbmRpZigpCisKK3N0cmluZyhSRVBMQUNFICJcXCIgIi8iIHVuaXR5X3NvdXJjZV9saW5lcyAiJHt1bml0eV9zb3VyY2VfbGluZXN9IikKK3N0cmluZyhGSU5EICIke3VuaXR5X3NvdXJjZV9saW5lc30iICJDTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfcG9vbEFfYy5jIiB1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbikKK2lmICh1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbiBFUVVBTCAiLTEiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBwcm9qZWN0IHNob3VsZCBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGUgJ3Bvb2xBJy4iKQorICByZXR1cm4oKQorZW5kaWYoKQorc3RyaW5nKEZJTkQgIiR7dW5pdHlfc291cmNlX2xpbmVzfSIgIkNNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9wb29sQl9jLmMiIHVuaXR5X3NvdXJjZV9maWxlX3Bvc2l0aW9uKQoraWYgKHVuaXR5X3NvdXJjZV9maWxlX3Bvc2l0aW9uIEVRVUFMICItMSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHByb2plY3Qgc2hvdWxkIGluY2x1ZGUgdGhlIGdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZSAncG9vbEInLiIpCisgIHJldHVybigpCitlbmRpZigpCisKK2xpc3QoTEVOR1RIIHNvdXJjZXNfbGlzdCBudW1iZXJfb2Zfc291cmNlcykKK2lmKE5PVCBudW1iZXJfb2Zfc291cmNlcyBFUVVBTCA3KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBwcm9qZWN0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgZXhwZWN0IG51bWJlciBvZiBmaWxlcy4iKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZE5hdGl2ZUdyb3VwZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkTmF0aXZlR3JvdXBlZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQwZTNiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZE5hdGl2ZUdyb3VwZWQuY21ha2UKQEAgLTAsMCArMSwyMCBAQAorcHJvamVjdCh1bml0eWJ1aWxkX2MgQykKKworc2V0KHNyY3MgIiIpCitmb3JlYWNoKHMgUkFOR0UgMSA4KQorICBzZXQoc3JjICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcyR7c30uYyIpCisgIGZpbGUoV1JJVEUgIiR7c3JjfSIgImludCBzJHtzfSh2b2lkKSB7IHJldHVybiAwOyB9XG4iKQorICBsaXN0KEFQUEVORCBzcmNzICIke3NyY30iKQorZW5kZm9yZWFjaCgpCisKK2FkZF9saWJyYXJ5KHRndCBTSEFSRUQgJHtzcmNzfSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHRndCBQUk9QRVJUSUVTIFVOSVRZX0JVSUxEIE9OIFVOSVRZX0JVSUxEX01PREUgR1JPVVApCisKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzMS5jIHMyLmMgczMuYyBzNC5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAicG9vbEEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoczUuYyBzNi5jIHM3LmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJwb29sQiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkUHJlMjAxN0dyb3VwZWQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkUHJlMjAxN0dyb3VwZWQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliOGMwMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1VuaXR5QnVpbGRQcmUyMDE3R3JvdXBlZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDU5IEBACitzZXQodW5pdHlidWlsZF9jMCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9wb29sQS5jIikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9jMH0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2MwfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQodW5pdHlidWlsZF9jMSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9wb29sQi5jIikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9jMX0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2MxfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQodGd0X3Byb2plY3QgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90Z3QudmN4cHJvaiIpCitpZiAoTk9UIEVYSVNUUyAiJHt0Z3RfcHJvamVjdH0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBwcm9qZWN0IGZpbGUgJHt0Z3RfcHJvamVjdH0gZG9lc24ndCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNUUklOR1MgJHt0Z3RfcHJvamVjdH0gdGd0X3Byb2plY3RzX3N0cmluZ3MpCisKK2ZvcmVhY2gobGluZSBJTiBMSVNUUyB0Z3RfcHJvamVjdHNfc3RyaW5ncykKKyAgaWYgKGxpbmUgTUFUQ0hFUyAiPENsQ29tcGlsZSBJbmNsdWRlPS4qLz4iKQorICAgIHNldCh1bml0eV9zb3VyY2VfbGluZSAke2xpbmV9KQorICBlbmRpZigpCisKKyAgaWYgKGxpbmUgTUFUQ0hFUyAiPENsQ29tcGlsZSBJbmNsdWRlPVwiW15cIl0qXCI+IikKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIjxDbENvbXBpbGUgSW5jbHVkZT1cIihbXlwiXSopXCI+IiBzb3VyY2VfZmlsZSAke2xpbmV9KQorICAgIGxpc3QoQVBQRU5EIHNvdXJjZXNfbGlzdCAke3NvdXJjZV9maWxlfSkKKyAgZW5kaWYoKQorCisgIGlmIChsaW5lIE1BVENIRVMgIjxFeGNsdWRlZEZyb21CdWlsZC4qPC9FeGNsdWRlZEZyb21CdWlsZD4iKQorICAgIGxpc3QoQVBQRU5EIGV4Y2x1ZGVkX3NvdXJjZXNfbGlzdCAke3NvdXJjZV9maWxlfSkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK3N0cmluZyhSRVBMQUNFICJcXCIgIi8iIHVuaXR5X3NvdXJjZV9saW5lICR7dW5pdHlfc291cmNlX2xpbmV9KQorc3RyaW5nKEZJTkQgIiR7dW5pdHlfc291cmNlX2xpbmV9IiAiQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X3Bvb2xBLmMiIHVuaXR5X3NvdXJjZV9maWxlX3Bvc2l0aW9uKQoraWYgKHVuaXR5X3NvdXJjZV9maWxlX3Bvc2l0aW9uIEVRVUFMICItMSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHByb2plY3Qgc2hvdWxkIGluY2x1ZGUgdGhlIGdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZS4iKQorICByZXR1cm4oKQorZW5kaWYoKQorc3RyaW5nKEZJTkQgIiR7dW5pdHlfc291cmNlX2xpbmV9IiAiQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X3Bvb2xCLmMiIHVuaXR5X3NvdXJjZV9maWxlX3Bvc2l0aW9uKQoraWYgKHVuaXR5X3NvdXJjZV9maWxlX3Bvc2l0aW9uIEVRVUFMICItMSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHByb2plY3Qgc2hvdWxkIGluY2x1ZGUgdGhlIGdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZS4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitsaXN0KExFTkdUSCBzb3VyY2VzX2xpc3QgbnVtYmVyX29mX3NvdXJjZXMpCitpZihOT1QgbnVtYmVyX29mX3NvdXJjZXMgRVFVQUwgNykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgcHJvamVjdCBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4cGVjdCBudW1iZXIgb2YgZmlsZXMuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworIyBFeGNsdXNpb25zIGZvciBEZWJ1Z3xSZWxlYXNlfE1pblNpemVSZWx8UmVsV2l0aERlYkluZm8KK2xpc3QoTEVOR1RIIGV4Y2x1ZGVkX3NvdXJjZXNfbGlzdCBudW1iZXJfb2ZfZXhjbHVkZWRfc291cmNlcykKK2lmKE5PVCBudW1iZXJfb2ZfZXhjbHVkZWRfc291cmNlcyBFUVVBTCAyOCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgcHJvamVjdCBkb2Vzbid0IGV4Y2x1ZGUgdGhlIHNvdXJjZSBmaWxlcyBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLiIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkUHJlMjAxN0dyb3VwZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkUHJlMjAxN0dyb3VwZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0MGUzYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1VuaXR5QnVpbGRQcmUyMDE3R3JvdXBlZC5jbWFrZQpAQCAtMCwwICsxLDIwIEBACitwcm9qZWN0KHVuaXR5YnVpbGRfYyBDKQorCitzZXQoc3JjcyAiIikKK2ZvcmVhY2gocyBSQU5HRSAxIDgpCisgIHNldChzcmMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zJHtzfS5jIikKKyAgZmlsZShXUklURSAiJHtzcmN9IiAiaW50IHMke3N9KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiIpCisgIGxpc3QoQVBQRU5EIHNyY3MgIiR7c3JjfSIpCitlbmRmb3JlYWNoKCkKKworYWRkX2xpYnJhcnkodGd0IFNIQVJFRCAke3NyY3N9KQorCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXModGd0IFBST1BFUlRJRVMgVU5JVFlfQlVJTEQgT04gVU5JVFlfQlVJTERfTU9ERSBHUk9VUCkKKworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHMxLmMgczIuYyBzMy5jIHM0LmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJwb29sQSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzNS5jIHM2LmMgczcuYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgInBvb2xCIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXAtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWM3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjIgQEAKK3NldChjc1Byb2pGaWxlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vVnNDc2hhcnBTb3VyY2VHcm91cC5jc3Byb2oiKQoraWYoTk9UIEVYSVNUUyAiJHtjc1Byb2pGaWxlfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7Y3NQcm9qRmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworZmlsZShTVFJJTkdTICIke2NzUHJvakZpbGV9IiBsaW5lcykKKworaW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vVnNDc2hhcnBTb3VyY2VHcm91cEhlbHBlcnMuY21ha2UpCisKK3NldChTT1VSQ0VfR1JPVVBTX1RPX0ZJTkQKKyAgIkNTaGFycFNvdXJjZUdyb3VwIgorICAiQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkIgorICAiSW1hZ2VzIgorKQorCitmb3JlYWNoKEdST1VQX05BTUUgSU4gTElTVFMgJHtTT1VSQ0VfR1JPVVBTX1RPX0ZJTkR9KQorICBmaW5kX3NvdXJjZV9ncm91cCgiJHtsaW5lc30iICR7R1JPVVBfTkFNRX0pCisgIGlmKE5PVCAke1NPVVJDRV9HUk9VUF9GT1VORH0pCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ5OTNjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cC5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitlbmFibGVfbGFuZ3VhZ2UoQ1NoYXJwKQorc2V0KENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMgRGVidWcpCisKK3NldChTUkNfRklMRVMKKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL2Zvby5jcworICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkL2Jhei5jcworKQorCitzZXQoSU1BR0VfRklMRVMKKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL0ltYWdlcy9lbXB0eS5ibXAKKykKKworYWRkX2xpYnJhcnkoVnNDc2hhcnBTb3VyY2VHcm91cCBTSEFSRUQgJHtTUkNfRklMRVN9ICR7SU1BR0VfRklMRVN9KQorc291cmNlX2dyb3VwKCJDU2hhcnBTb3VyY2VHcm91cCIgRklMRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL2Zvby5jcykKK3NvdXJjZV9ncm91cCgiQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkIiBGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkL2Jhei5jcykKK3NvdXJjZV9ncm91cCgiSW1hZ2VzIiBGSUxFUyAke0lNQUdFX0ZJTEVTfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXBIZWxwZXJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cEhlbHBlcnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhOWE2NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXBIZWxwZXJzLmNtYWtlCkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0aW9uKGZpbmRfc291cmNlX2dyb3VwIExJTkVTIE5BTUUpCisgIHNldChmb3VuZFNvdXJjZUdyb3VwTGluayAwKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgTElORVMpCisgICAgaWYobGluZSBNQVRDSEVTICI8TGluaz4ke05BTUV9PC9MaW5rPiIpCisgICAgICBzZXQoZm91bmRTb3VyY2VHcm91cExpbmsgMSkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIGlmKE5PVCBmb3VuZFNvdXJjZUdyb3VwTGluaykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlNvdXJjZSBncm91cCBsaW5rIGZvciAke05BTUV9IG5vdCBmb3VuZC4iIFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoU09VUkNFX0dST1VQX0ZPVU5EIDAgUEFSRU5UX1NDT1BFKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKyAgc2V0KFNPVVJDRV9HUk9VUF9GT1VORCAxIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmY4Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEZXBsb3lFbmFibGVkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNTggQEAKK3NldCh2Y1Byb2plY3RGaWxlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZm9vLnZjeHByb2oiKQoraWYoTk9UIEVYSVNUUyAiJHt2Y1Byb2plY3RGaWxlfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7dmNQcm9qZWN0RmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKyMKKyMgVGVzdCBzb2x1dGlvbiBmaWxlIGZvciBkZXBsb3ltZW50LgorIworCitzZXQodmNTbG5GaWxlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vVnNEZXBsb3lFbmFibGVkLnNsbiIpCitpZihOT1QgRVhJU1RTICIke3ZjU2xuRmlsZX0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlNvbHV0aW9uIGZpbGUgJHt2Y1NsbkZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKKworCitzZXQoRm9vUHJvakdVSUQgIiIpCitzZXQoRm91bmRGb29Qcm9qIEZBTFNFKQorc2V0KEluRm9vUHJvaiBGQUxTRSkKK3NldChGb3VuZFJlbGVhc2VEZXBsb3kgRkFMU0UpCitzZXQoRGVwbG95Q29uZmlncyBEZWJ1ZyBNaW5TaXplUmVsIFJlbFdpdGhEZWJJbmZvICkKKworZmlsZShTVFJJTkdTICIke3ZjU2xuRmlsZX0iIGxpbmVzKQorZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorI21lc3NhZ2UoU1RBVFVTICIke2xpbmV9IikKKyAgaWYoIChOT1QgSW5Gb29Qcm9qICkgQU5EIChsaW5lIE1BVENIRVMgIl5bIFxcdF0qUHJvamVjdFxcKFwie1tBLUYwLTktXSt9XCJcXCkgPSBcImZvb1wiLCBcImZvby52Y3hwcm9qXCIsIFwiKHtbQS1GMC05LV0rfSlcIlsgXFx0XSokIikpCisgICAgIyBGaXJzdCwgaWRlbnRpZnkgdGhlIEdVSUQgZm9yIHRoZSBmb28gcHJvamVjdCwgYW5kIHJlY29yZCBpdC4KKyAgICBzZXQoRm91bmRGb29Qcm9qIFRSVUUpCisgICAgc2V0KEluRm9vUHJvaiBUUlVFKQorICAgIHNldChGb29Qcm9qR1VJRCAke0NNQUtFX01BVENIXzF9KQorICBlbHNlaWYoSW5Gb29Qcm9qIEFORCBsaW5lIE1BVENIRVMgIkVuZFByb2plY3QiKQorICAgIHNldChJbkZvb1Byb2ogRkFMU0UpCisgIGVsc2VpZigoTk9UIEluRm9vUHJvaikgQU5EIGxpbmUgTUFUQ0hFUyAiJHtGb29Qcm9qR1VJRH1cXC5SZWxlYXNlLipcXC5EZXBsb3lcXC4wIikKKyAgICAjIElmIGZvbydzIFJlbGVhc2UgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gZGVwbG95LCB0aGlzIGlzIHRoZSBlcnJvci4KKyAgICBzZXQoRm91bmRSZWxlYXNlRGVwbG95IFRSVUUpCisgIGVuZGlmKCkKKyAgaWYoIGxpbmUgTUFUQ0hFUyAie1tBLUYwLTktXSt9XFwuKFteXFx8XSspLipcXC5EZXBsb3lcXC4wIiApCisgICAgIyBDaGVjayB0aGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9ucyBBUkUgc2V0IHRvIGRlcGxveS4KKyAgICBsaXN0KCBSRU1PVkVfSVRFTSBEZXBsb3lDb25maWdzICR7Q01BS0VfTUFUQ0hfMX0pCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitpZihGb3VuZFJlbGVhc2VEZXBsb3kpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUmVsZWFzZSBkZXBsb3ltZW50IGVuYWJsZWQuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworaWYoTk9UIEZvdW5kRm9vUHJvaikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGYWlsZWQgdG8gZmluZCBmb28gcHJvamVjdCBpbiB0aGUgc29sdXRpb24uIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworbGlzdChMRU5HVEggRGVwbG95Q29uZmlncyBsZW5ndGgpCitpZiggIGxlbmd0aCBHUkVBVEVSIDAgKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZhaWxlZCB0byBmaW5kIERlcGxveSBsaW5lcyBmb3Igbm9uLVJlbGVhc2UgY29uZmlndXJhdGlvbnMuICgke2xlbmd0aH0pIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmI0MmIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEZXBsb3lFbmFibGVkLmNtYWtlCkBAIC0wLDAgKzEsMTIgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK3NldChERVBMT1lfRElSCisgICAidGVtcFxcZm9vZGlyIgorKQorCithZGRfbGlicmFyeShmb28gU0hBUkVEIGZvby5jcHApCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhmb28KKyBQUk9QRVJUSUVTCisgIFZTX1NPTFVUSU9OX0RFUExPWSAkPE5PVDokPENPTkZJRzpSZWxlYXNlPj4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGFja2FnZVJlZmVyZW5jZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BhY2thZ2VSZWZlcmVuY2VzLWNoZWNrLmNtYWtlCmluZGV4IDUxMmExYzkuLjljMGY2ZTYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGFja2FnZVJlZmVyZW5jZXMtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQYWNrYWdlUmVmZXJlbmNlcy1jaGVjay5jbWFrZQpAQCAtNCw2ICs0LDEyIEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKK3NldChpbnN0YWxsUHJvamVjdEZpbGUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9JTlNUQUxMLnZjeHByb2oiKQoraWYoTk9UIEVYSVNUUyAiJHtpbnN0YWxsUHJvamVjdEZpbGV9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJJbnN0YWxsIGZpbGUgSU5TVEFMTC52Y3hwcm9qIGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKIAogc2V0KHRlc3QxTGlicmFyeSAiYm9vc3QiKQogc2V0KHRlc3QxVmVyc2lvbiAiMS43LjAiKQpAQCAtMzcsMyArNDMsMTkgQEAKICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGYWlsZWQgdG8gZmluZCBwYWNrYWdlIHJlZmVyZW5jZXMiKQogICByZXR1cm4oKQogZW5kaWYoKQorCitzZXQoRE9UX05FVF9GUkFNRVdPUktfVkVSU0lPTl9GT1VORCBGQUxTRSkKKworZmlsZShTVFJJTkdTICIke2luc3RhbGxQcm9qZWN0RmlsZX0iIGluc3RhbGxsaW5lcykKK2ZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgaWYobGluZSBNQVRDSEVTICJeICo8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC43LjI8L1RhcmdldEZyYW1ld29ya1ZlcnNpb24+JCIpCisgICAgc2V0KERPVF9ORVRfRlJBTUVXT1JLX1ZFUlNJT05fRk9VTkQgVFJVRSkKKyAgICBtZXNzYWdlKFNUQVRVUyAiVGhlIGluc3RhbGwgdGFyZ2V0IGNvbnRhaW5zIHRoZSBjb3JyZWN0IFRhcmdldEZyYW1ld29ya1ZlcnNpb24uIikKKyAgICBicmVhaygpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitpZihOT1QgRE9UX05FVF9GUkFNRVdPUktfVkVSU0lPTl9GT1VORCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGYWlsZWQgdG8gZmluZCBUYXJnZXRGcmFtZXdvcmtWZXJzaW9uIGluIHRoZSBpbnN0YWxsIHRhcmdldCIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BhY2thZ2VSZWZlcmVuY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQYWNrYWdlUmVmZXJlbmNlcy5jbWFrZQppbmRleCAyMjRhYjE4Li4zMGU4ZmQ0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BhY2thZ2VSZWZlcmVuY2VzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGFja2FnZVJlZmVyZW5jZXMuY21ha2UKQEAgLTEsNCArMSwxMyBAQAogZW5hYmxlX2xhbmd1YWdlKENYWCkKK3NldChDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OICJ2NC43LjIiKQorCiBhZGRfbGlicmFyeShmb28gZm9vLmNwcCkKIAogc2V0X3Byb3BlcnR5KFRBUkdFVCBmb28gUFJPUEVSVFkgVlNfUEFDS0FHRV9SRUZFUkVOQ0VTICJib29zdF8xLjcuMDtTRk1MXzIuMi4wIikKKworIyBpbnN0YWxsIGFuZCBleHBvcnQgdGhlIHRhcmdldHMgdG8gdGVzdCB0aGUgY29ycmVjdCBiZWhhdmlvcgorIyBudWdldCByZXN0b3JlIHdpbGwgb25seSB3b3JrIHdpdGggYW4gaW5zdGFsbCB0YXJnZXQgd2hlbiB0aGUgY29ycmVjdAorIyB0YXJnZXQgZnJhbWV3b3JrIHZlcnNpb24gaXMgc2V0CitzZXQoSU5TVEFMTF9DTUFLRV9ESVIgQ01ha2UpCitpbnN0YWxsKFRBUkdFVFMgZm9vIEVYUE9SVCBmb29fRXhwb3J0X1RhcmdldCkKK2luc3RhbGwoRVhQT1JUIGZvb19FeHBvcnRfVGFyZ2V0IERFU1RJTkFUSU9OICR7SU5TVEFMTF9DTUFLRV9ESVJ9IEZJTEUgZm9vQ29uZmlnLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQbGF0Zm9ybVRvb2xzZXQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BsYXRmb3JtVG9vbHNldC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTYyMjBiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQbGF0Zm9ybVRvb2xzZXQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNiBAQAorbWFjcm8oUmVhZFBsYXRmb3JtVG9vbHNldCB0Z3Qgb3V0dmFyKQorICBzZXQodmNQcm9qZWN0RmlsZSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9LyR7dGd0fS52Y3hwcm9qIikKKyAgaWYoTk9UIEVYSVNUUyAiJHt2Y1Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHt0Z3R9LnZjeHByb2ogZG9lcyBub3QgZXhpc3QuIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgc2V0KEhBVkVfUGxhdGZvcm1Ub29sc2V0IDApCisKKyAgZmlsZShTVFJJTkdTICIke3ZjUHJvamVjdEZpbGV9IiBsaW5lcykKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICAgIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPFBsYXRmb3JtVG9vbHNldD4oW148Pl0rKTwvUGxhdGZvcm1Ub29sc2V0PiIpCisgICAgICBzZXQoJHtvdXR2YXJ9ICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgIHNldChIQVZFX1BsYXRmb3JtVG9vbHNldCAxKQorICAgICAgYnJlYWsoKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYoTk9UIEhBVkVfUGxhdGZvcm1Ub29sc2V0KQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7dGd0fS52Y3hwcm9qIGRvZXMgbm90IGhhdmUgYSA8UGxhdGZvcm1Ub29sc2V0PiBmaWVsZC4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworUmVhZFBsYXRmb3JtVG9vbHNldChOb3JtYWxQbGF0Zm9ybVRvb2xzZXQgTk9STUFMX1RPT0xTRVQpCitSZWFkUGxhdGZvcm1Ub29sc2V0KE92ZXJyaWRlblBsYXRmb3JtVG9vbHNldCBPVkVSUklERU5fVE9PTFNFVCkKKworaWYgKE5PVCAiJHtPVkVSUklERU5fVE9PTFNFVH0iIFNUUkVRVUFMICJNeUN1c3RvbVRvb2xzZXQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZhaWxlZCB0byBvdmVycmlkZSB0aGUgcGxhdGZvcm0gdG9vbHNldCIpCisgIHJldHVybigpCitlbmRpZigpCisKK2lmICgiJHtOT1JNQUxfVE9PTFNFVH0iIFNUUkVRVUFMICJNeUN1c3RvbVRvb2xzZXQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk1haW4gdG9vbHNldCB3YXMgb3ZlcnJpZGVuIChpdCBzaG91bGRuJ3QpIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGxhdGZvcm1Ub29sc2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQbGF0Zm9ybVRvb2xzZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlOTcxNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGxhdGZvcm1Ub29sc2V0LmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworYWRkX2xpYnJhcnkoTm9ybWFsUGxhdGZvcm1Ub29sc2V0IGZvby5jcHApCithZGRfbGlicmFyeShPdmVycmlkZW5QbGF0Zm9ybVRvb2xzZXQgZm9vLmNwcCkKK3NldF90YXJnZXRfcHJvcGVydGllcyhPdmVycmlkZW5QbGF0Zm9ybVRvb2xzZXQKKyAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFZTX1BMQVRGT1JNX1RPT0xTRVQgTXlDdXN0b21Ub29sc2V0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTZXR0aW5ncy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU2V0dGluZ3MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4YjI2YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU2V0dGluZ3MtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyMyBAQAorbWFjcm8oZW5zdXJlX3Byb3BzX3NldCBwcm9qZWN0RmlsZSkKKyAgaWYoTk9UIEVYSVNUUyAiJHtwcm9qZWN0RmlsZX0iKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7cHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIHNldChTZXR0aW5nRm91bmQgRkFMU0UpCisKKyAgZmlsZShTVFJJTkdTICIke3Byb2plY3RGaWxlfSIgbGluZXMpCisgIGZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgICBpZihsaW5lIE1BVENIRVMgIjxTb3VyY2VQcm9wZXJ0eTEuKkRlYnVnLio+U291cmNlUHJvcGVydHkxVmFsdWU8L1NvdXJjZVByb3BlcnR5MT4iKQorICAgICAgbWVzc2FnZSgiU291cmNlUHJvcGVydHkxIHNldHRpbmcgZm91bmQiKQorICAgICAgc2V0KFNldHRpbmdGb3VuZCBUUlVFKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYgKE5PVCBTZXR0aW5nRm91bmQpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJTb3VyY2VQcm9wZXJ0eTEgc2V0dGluZyB3YXMgbm90IGZvdW5kIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCitlbmRtYWNybygpCisKK2Vuc3VyZV9wcm9wc19zZXQoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mb28udmN4cHJvaiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NldHRpbmdzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTZXR0aW5ncy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGIzMjFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTZXR0aW5ncy5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2FkZF9saWJyYXJ5KGZvbyBmb28uY3BwIHNoYWRlci5obHNsKQorc2V0X3Byb3BlcnR5KFNPVVJDRSBzaGFkZXIuaGxzbCBQUk9QRVJUWSBWU19TRVRUSU5HUworICAiJDwkPENPTkZJRzpERUJVRz46U291cmNlUHJvcGVydHkxPVNvdXJjZVByb3BlcnR5MVZhbHVlPiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NvdXJjZVNldHRpbmdzVG9vbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU291cmNlU2V0dGluZ3NUb29sLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YTg5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NvdXJjZVNldHRpbmdzVG9vbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDM0IEBACittYWNybyhlbnN1cmVfcHJvcHNfc2V0IHByb2plY3RGaWxlKQorICBpZihOT1QgRVhJU1RTICIke3Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHtwcm9qZWN0RmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgc2V0KEZpcnN0U2V0dGluZ0ZvdW5kIEZBTFNFKQorICBzZXQoU2Vjb25kU2V0dGluZ0ZvdW5kIEZBTFNFKQorCisgIGZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0RmlsZX0iIGxpbmVzKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgICAgaWYobGluZSBNQVRDSEVTICI8VGFyZ2V0UHJvcGVydHkxLipEZWJ1Zy4qPlRhcmdldFByb3BlcnR5MVZhbHVlRGVidWc8L1RhcmdldFByb3BlcnR5MT4iKQorICAgICAgaWYgKEZpcnN0U2V0dGluZ0ZvdW5kKQorICAgICAgICBtZXNzYWdlKCJUYXJnZXRQcm9wZXJ0eTEgc2V0dGluZyBmb3VuZCB0d2ljZSIpCisgICAgICAgIHNldChTZWNvbmRTZXR0aW5nRm91bmQgVFJVRSkKKyAgICAgIGVsc2UoKQorICAgICAgICBtZXNzYWdlKCJUYXJnZXRQcm9wZXJ0eTEgc2V0dGluZyBmb3VuZCBvbmNlIikKKyAgICAgICAgc2V0KEZpcnN0U2V0dGluZ0ZvdW5kIFRSVUUpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZiAoTk9UIEZpcnN0U2V0dGluZ0ZvdW5kKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgbm90IGZvdW5kIGF0IGFsbCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGlmIChOT1QgU2Vjb25kU2V0dGluZ0ZvdW5kKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgZm91bmQgb25jZSB3aGVuIGl0IHNob3VsZCBiZSBmb3VuZCB0d2ljZSIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCitlbnN1cmVfcHJvcHNfc2V0KCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZm9vLnZjeHByb2oiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTb3VyY2VTZXR0aW5nc1Rvb2wuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NvdXJjZVNldHRpbmdzVG9vbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTg5NjJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTb3VyY2VTZXR0aW5nc1Rvb2wuY21ha2UKQEAgLTAsMCArMSw1IEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShmb28gZm9vLmNwcCBzaGFkZXIuaGxzbCBzaGFkZXIyLmhsc2wpCitzZXRfcHJvcGVydHkoVEFSR0VUIGZvbyBQUk9QRVJUWSBWU19TT1VSQ0VfU0VUVElOR1NfRlhDb21waWxlCisgICIkPCQ8Q09ORklHOkRFQlVHPjpUYXJnZXRQcm9wZXJ0eTE9VGFyZ2V0UHJvcGVydHkxVmFsdWVEZWJ1Zz4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3Qvc2hhZGVyLmhsc2wgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9zaGFkZXIuaGxzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3Qvc2hhZGVyLmhsc2wKQEAgLTAsMCArMSBAQAorCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9zaGFkZXIyLmhsc2wgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9zaGFkZXIyLmhsc2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMzc4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L3NoYWRlcjIuaGxzbApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTU29sdXRpb24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9WU1NvbHV0aW9uL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ZTU29sdXRpb24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlNTb2x1dGlvbi9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlSW5zdGFsbElPUy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZUluc3RhbGxJT1MuY21ha2UKaW5kZXggYWIzMTM4Ny4uNzVkYTdiMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlSW5zdGFsbElPUy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVJbnN0YWxsSU9TLmNtYWtlCkBAIC0xLDQgKzEsNCBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC41KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIAogcHJvamVjdChYY29kZUluc3RhbGxJT1MpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9kZXBlbmRlbmNpZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfZGVwZW5kZW5jaWVzL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9kZXBlbmRlbmNpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2RlcGVuZGVuY2llcy9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvR0VORVhfTElOS19MQU5HLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9HRU5FWF9MSU5LX0xBTkcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0Y2U0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvR0VORVhfTElOS19MQU5HLmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saW5rX29wdGlvbnMgKCQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfTEFOR19DJHtvYmp9PgorICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHX0xBTkdfQ1hYJHtvYmp9PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkIFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19tb2QgTU9EVUxFIExpbmtPcHRpb25zTGliLmMpCisKK2FkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2V4ZSBMaW5rT3B0aW9uc0V4ZS5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LRVJfZXhwYW5zaW9uLXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tdmFsaWRhdGlvbi5jbWFrZQppbmRleCBiZWJkNmM3Li5lY2UzYmEwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tdmFsaWRhdGlvbi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tdmFsaWRhdGlvbi5jbWFrZQpAQCAtMTEsNSArMTEsOCBAQAogZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vTElOS0VSLnR4dCIgbGlua2VyX2ZsYWcpCiAKIGlmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICIke2xpbmtlcl9mbGFnfSIpCi0gIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkxJTktFUjogd2FzIG5vdCBleHBhbmRlZCBjb3JyZWN0bHkuIikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkxJTktFUjogd2FzIG5vdCBleHBhbmRlZCBjb3JyZWN0bHkuIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLWV4ZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLWV4ZS1jaGVjay5jbWFrZQppbmRleCA0YTIyZDdlLi4xMjdhMmY1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1leGUtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtZXhlLWNoZWNrLmNtYWtlCkBAIC0zLDUgKzMsOCBAQAogICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfRVhFQ1VUQUJMRV9SRUxFQVNFJy4iKQogZW5kaWYoKQogaWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18oU0hBUkVEfE1PRFVMRSlfUkVMRUFTRSIpCi0gIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfKFNIQVJFRHxNT0RVTEUpX1JFTEVBU0UnLiIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyhTSEFSRUR8TU9EVUxFKV9SRUxFQVNFJy4iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtbW9kLWNoZWNrLmNtYWtlCmluZGV4IGQ2OTU3NjEuLjg3NGUwYWQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLW1vZC1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1tb2QtY2hlY2suY21ha2UKQEAgLTMsNSArMyw4IEBACiAgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR19NT0RVTEVfUkVMRUFTRScuIikKIGVuZGlmKCkKIGlmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfKFNIQVJFRHxFWEVDVVRBQkxFKV9SRUxFQVNFIikKLSAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oU0hBUkVEfEVYRUNVVEFCTEUpX1JFTEVBU0UnLiIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyhTSEFSRUR8RVhFQ1VUQUJMRSlfUkVMRUFTRScuIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLXNoYXJlZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLXNoYXJlZC1jaGVjay5jbWFrZQppbmRleCBlYWFjOGUzLi5lY2JhMTdlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1zaGFyZWQtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtc2hhcmVkLWNoZWNrLmNtYWtlCkBAIC0zLDUgKzMsOCBAQAogICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfU0hBUkVEX1JFTEVBU0UnLiIpCiBlbmRpZigpCiBpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyhNT0RVTEV8RVhFQ1VUQUJMRSlfUkVMRUFTRSIpCi0gIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfKE1PRFVMRXxFWEVDVVRBQkxFKV9SRUxFQVNFJy4iKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oTU9EVUxFfEVYRUNVVEFCTEUpX1JFTEVBU0UnLiIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zTGliLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTGlua09wdGlvbnNMaWIuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zTGliLmN4eApAQCAtMCwwICsxLDcgQEAKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIGludCBmbGFnc19saWIodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDRmNWRmNzIuLjQ2NWZmODUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yMyw2ICsyMywyMSBAQAogICBydW5fY21ha2VfdGFyZ2V0KExJTktfT1BUSU9OUyBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCiAgIHJ1bl9jbWFrZV90YXJnZXQoTElOS19PUFRJT05TIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKIAorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdVQUdFKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBzaGFyZWRfYyBMaW5rT3B0aW9uc19zaGFyZWRfYyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0Ugc2hhcmVkX2N4eCBMaW5rT3B0aW9uc19zaGFyZWRfY3h4IC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBleGUgTGlua09wdGlvbnNfZXhlIC0tY29uZmlnIFJlbGVhc2UpCisKKyAgcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR19BTkRfSUQpCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIHNoYXJlZF9jIExpbmtPcHRpb25zX3NoYXJlZF9jIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBzaGFyZWRfY3h4IExpbmtPcHRpb25zX3NoYXJlZF9jeHggLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIG1vZCBMaW5rT3B0aW9uc19tb2QgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKKwogICB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCiAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmNjQxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmNjQxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDEyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDKQorc2V0IChJTlZBTElEX0xBTkcgQ1hYKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jeHgtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzOTgxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQ1hYKQorc2V0IChJTlZBTElEX0xBTkcgQykKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2N4eC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2N4eC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjM3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDE3IEBACisKK2lmIChOT1QgREVGSU5FRCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgREVGSU5FRCBJTlZBTElEX0xBTkcpCisgIHNldCAoSU5WQUxJRF9MQU5HIENYWCkKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtWQUxJRF9MQU5HfV9MQU5HIikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdCQURGTEFHXyR7VkFMSURfTEFOR31fTEFORycuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtJTlZBTElEX0xBTkd9X0xBTkciKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFORycuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRkNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saW5rX29wdGlvbnMgKCQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR1VBR0U6Q1hYPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2MgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19zaGFyZWRfY3h4IFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jeHgpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX21vZCBNT0RVTEUgTGlua09wdGlvbnNMaWIuYykKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0OThkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2N4eC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRmODUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfY3h4LXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfY3h4LXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkYzI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKKworaWYgKE5PVCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7VkFMSURfTEFOR31fTEFOR19JRCIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR18ke1ZBTElEX0xBTkd9X0xBTkdfSUQnLlxuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtJTlZBTElEX0xBTkd9X0xBTkdfSUQiKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFOR19JRCAnLiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESUQiKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oJHtWQUxJRF9MQU5HfXwke0lOVkFMSURfTEFOR30pX0JBRElEJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDcwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKQEAgLTAsMCArMSwxOSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2lmKEJPUkxBTkQpCisgIHNldChwcmUgLSkKK2VuZGlmKCkKKworYWRkX2xpbmtfb3B0aW9ucyAoJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NfTEFOR19JRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ1hYX0xBTkdfSUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxCQURJRD46JHtwcmV9QkFERkxBR19DWFhfQkFESUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9jIFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQorYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2N4eCBTSEFSRUQgTGlua09wdGlvbnNMaWIuY3h4KQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19tb2QgTU9EVUxFIExpbmtPcHRpb25zTGliLmMpCisKK2FkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2V4ZSBMaW5rT3B0aW9uc0V4ZS5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvQ01ha2VMaXN0cy50eHQuaW4gYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9DTWFrZUxpc3RzLnR4dC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTUyNDBkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvQ01ha2VMaXN0cy50eHQuaW4KQEAgLTAsMCArMSwyNyBAQAoraWYgKE5PVCBERUZJTkVEIFJVTl9BU19TQ1JJUFQpCisKKyAgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKKyAgcHJvamVjdChAQ0FTRV9OQU1FQCBOT05FKQorICBpbmNsdWRlKENUZXN0KQorCisgICMgVHdvIGZhbGxiYWNrIHRlc3RzIGZvciBzZXRfdGVzdHNfcHJvcGVydGllcy4KKyAgYWRkX3Rlc3QoTkFNRSBQcmVmaXhUZXN0IENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC0tdmVyc2lvbikKKyAgYWRkX3Rlc3QoTkFNRSBTdWZmaXhUZXN0IENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC0tdmVyc2lvbikKKworICBhZGRfdGVzdCgKKyAgICBOQU1FIEBDQVNFX0NNQUtFTElTVFNfTkFNRV8xQAorICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1EIFJVTl9BU19TQ1JJUFQ9MSAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iCisgICkKKyAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoCisgICAgQENBU0VfQ01BS0VMSVNUU19OQU1FXzJACisgICAgUFJPUEVSVElFUworICAgICAgRU5WSVJPTk1FTlQgQ01BS0VfYWRkX3Rlc3RfRU5WVkFSPTEKKyAgKQorCitlbHNlKCkKKworICBpZihOT1QgREVGSU5FRCBFTlZ7Q01BS0VfYWRkX3Rlc3RfRU5WVkFSfSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJTZXR0aW5nIHByb3BlcnR5IG9uIHRlc3QgZGlkIG5vdCBzdWNjZWVkISIpCisgIGVuZGlmKCkKKworZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50MS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50MS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODY1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQxLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBcWz1cW0JyYWNrZXRBcmd1bWVudDtTdWZmaXhUZXN0XF09XF0gXC4rWyBdK1Bhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50Mi1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50Mi1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NDRiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQyLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBCcmFja2V0QXJndW1lbnQ7U3VmZml4VGVzdCBcLitbIF0rUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQzLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDMtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50My1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50My1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzIxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQzLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitFcnJvclwoc1wpIHdoZW4gY29uZmlndXJpbmcgdGhlIHByb2plY3QKK05vIHRlc3RzIHdlcmUgZm91bmQhISEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDQtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50NC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQ0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQ0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjMjExMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0Vycm9yXChzXCkgd2hlbiBjb25maWd1cmluZyB0aGUgcHJvamVjdAorTm8gdGVzdHMgd2VyZSBmb3VuZCEhIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2UyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUxLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjYxOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK1VuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGU6IFN1ZmZpeFRlc3QKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTEtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTEtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc1NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMS1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogRXNjYXBlZFF1b3RlIFwuK1wqXCpcKk5vdCBSdW4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTItcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMi1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUyLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2MTk0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTItc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlOiBTdWZmaXhUZXN0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUyLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUyLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3NTQwOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTItc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0ICNbMC05XSs6IEVzY2FwZWRRdW90ZSBcLitcKlwqXCpOb3QgUnVuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUzLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTMtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjE5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUzLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZTogU3VmZml4VGVzdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzU0MDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUzLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBFc2NhcGVkUXVvdGUgXC4rXCpcKlwqTm90IFJ1bgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlNC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlNC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2UyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGU0LXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjYxOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlNC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK1VuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGU6IFN1ZmZpeFRlc3QKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRRdW90ZTQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc1NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlNC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogRXNjYXBlZFF1b3RlIFwuK1wqXCpcKk5vdCBSdW4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRTcGVjaWFsQ2hhcnMxLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMS1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogXChcKSAjIFwuK1sgXSpQYXNzZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRTcGVjaWFsQ2hhcnMyLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMi1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMi1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogXChcKSAjIFwuK1sgXSpQYXNzZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRTcGVjaWFsQ2hhcnMzLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMy1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogXChcKSAjIFwuK1sgXSpQYXNzZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0VzY2FwZWRTcGVjaWFsQ2hhcnM0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzNC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzNC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogXChcKSAjIFwuK1sgXSpQYXNzZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgxLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNHZW5lcmF0b3JFeHByZXNzaW9uU3ludGF4MS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MmZmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNHZW5lcmF0b3JFeHByZXNzaW9uU3ludGF4MS1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogXCQ8Qk9PTDowPiBcLitbIF0qUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNHZW5lcmF0b3JFeHByZXNzaW9uU3ludGF4Mi1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zR2VuZXJhdG9yRXhwcmVzc2lvblN5bnRheDItc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzJmZjk5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zR2VuZXJhdG9yRXhwcmVzc2lvblN5bnRheDItc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0ICNbMC05XSs6IFwkPEJPT0w6MD4gXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zR2VuZXJhdG9yRXhwcmVzc2lvblN5bnRheDMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgzLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyZmY5OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgzLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBcJDxCT09MOjA+IFwuK1sgXSpQYXNzZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXg0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNHZW5lcmF0b3JFeHByZXNzaW9uU3ludGF4NC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MmZmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNHZW5lcmF0b3JFeHByZXNzaW9uU3ludGF4NC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogXCQ8Qk9PTDowPiBcLitbIF0qUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczEtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzMS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTNmODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczEtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0ICNbMC05XSs6ICHCp1wkJSYvw7w6XCrwn5ikfiBcLitbIF0qUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczItc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzMi1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTNmODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczItc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0ICNbMC05XSs6ICHCp1wkJSYvw7w6XCrwn5ikfiBcLitbIF0qUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzMy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTNmODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczMtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0ICNbMC05XSs6ICHCp1wkJSYvw7w6XCrwn5ikfiBcLitbIF0qUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzNC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTNmODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0ICNbMC05XSs6ICHCp1wkJSYvw7w6XCrwn5ikfiBcLitbIF0qUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb24xLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb24xLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiZjQ4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NlbWljb2xvbjEtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0ICNbMC05XSs6IFByZWZpeFRlc3Q7U3VmZml4VGVzdCBcLitbIF0qUGFzc2VkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb24yLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb24yLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NlbWljb2xvbjItcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU2VtaWNvbG9uMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU2VtaWNvbG9uMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzIxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb24yLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitFcnJvclwoc1wpIHdoZW4gY29uZmlndXJpbmcgdGhlIHByb2plY3QKK05vIHRlc3RzIHdlcmUgZm91bmQhISEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NlbWljb2xvbjMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NlbWljb2xvbjMtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWFiMWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU2VtaWNvbG9uMy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMyBAQAorMy8zIFRlc3QgIzM6IFByZWZpeFRlc3Q7U3VmZml4VGVzdCBcLitcKlwqXCpGYWlsZWQuKgorQ01ha2UgRXJyb3IgYXQgLisvQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwobWVzc2FnZVwpOgorWyBdKlNldHRpbmcgcHJvcGVydHkgb24gdGVzdCBkaWQgbm90IHN1Y2NlZWQhCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb240LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb240LXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NlbWljb2xvbjQtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU2VtaWNvbG9uNC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU2VtaWNvbG9uNC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzIxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTZW1pY29sb240LXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitFcnJvclwoc1wpIHdoZW4gY29uZmlndXJpbmcgdGhlIHByb2plY3QKK05vIHRlc3RzIHdlcmUgZm91bmQhISEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczEtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczEtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjU1ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU3BhY2VzMS1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3QgI1swLTldKzogUHJlZml4VGVzdCBTdWZmaXhUZXN0IFwuK1sgXSpQYXNzZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczItcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU3BhY2VzMi1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTcGFjZXMyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTcGFjZXMyLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjMjExMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczItc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0Vycm9yXChzXCkgd2hlbiBjb25maWd1cmluZyB0aGUgcHJvamVjdAorTm8gdGVzdHMgd2VyZSBmb3VuZCEhIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU3BhY2VzMy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU3BhY2VzMy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTcGFjZXMzLXN0ZG91dC50eHQKQEAgLTAsMCArMSwzIEBACiszLzMgVGVzdCAjMzogUHJlZml4VGVzdCBTdWZmaXhUZXN0IFwuK1wqXCpcKkZhaWxlZC4qCitDTWFrZSBFcnJvciBhdCAuKy9DTWFrZUxpc3RzLnR4dDpbMC05XSsgXChtZXNzYWdlXCk6CitbIF0qU2V0dGluZyBwcm9wZXJ0eSBvbiB0ZXN0IGRpZCBub3Qgc3VjY2VlZCEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczQtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zU3BhY2VzNC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTcGFjZXM0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNTcGFjZXM0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjMjExMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L05hbWVDb250YWluc1NwYWNlczQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0Vycm9yXChzXCkgd2hlbiBjb25maWd1cmluZyB0aGUgcHJvamVjdAorTm8gdGVzdHMgd2VyZSBmb3VuZCEhIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMxLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczEtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFhMGIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMxLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNfXC5cKy0wMTIgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMyLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczItc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFhMGIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMyLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNfXC5cKy0wMTIgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMzLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczMtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFhMGIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMzLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNfXC5cKy0wMTIgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnM0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFhMGIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnM0LXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNfXC5cKy0wMTIgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljMS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljMS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTM5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lSXNBbHBoYU51bWVyaWMxLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljMi1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljMi1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTM5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lSXNBbHBoYU51bWVyaWMyLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljMy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljMy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTM5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lSXNBbHBoYU51bWVyaWMzLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljNC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvTmFtZUlzQWxwaGFOdW1lcmljNC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTM5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9OYW1lSXNBbHBoYU51bWVyaWM0LXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorVGVzdCAjWzAtOV0rOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkgXC4rWyBdKlBhc3NlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX3Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOWVkZGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwyNjMgQEAKK2luY2x1ZGUoUnVuQ1Rlc3QpCisKK3NldChFTlZ7Q1RFU1RfT1VUUFVUX09OX0ZBSUxVUkV9IDEpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lSXNBbHBoYU51bWVyaWMxX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IF09PV0pCisgIHJ1bl9jdGVzdChOYW1lSXNBbHBoYU51bWVyaWMxKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVJc0FscGhhTnVtZXJpYzFfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lSXNBbHBoYU51bWVyaWMyX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Il09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Il09PV0pCisgIHJ1bl9jdGVzdChOYW1lSXNBbHBoYU51bWVyaWMyKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVJc0FscGhhTnVtZXJpYzJfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lSXNBbHBoYU51bWVyaWMzX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Il09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IF09PV0pCisgIHJ1bl9jdGVzdChOYW1lSXNBbHBoYU51bWVyaWMzKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVJc0FscGhhTnVtZXJpYzNfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lSXNBbHBoYU51bWVyaWM0X3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Il09PV0pCisgIHJ1bl9jdGVzdChOYW1lSXNBbHBoYU51bWVyaWM0KQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVJc0FscGhhTnVtZXJpYzRfdGVzdCgpCisKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc1ZhbGlkU3BlY2lhbENoYXJzMV90ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIGFiY18uKy0wMTIgXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyBhYmNfListMDEyIF09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczEpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMxX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMyX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiYWJjXy4rLTAxMiJdPT1dKQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMiBbPT1bImFiY18uKy0wMTIiXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc1ZhbGlkU3BlY2lhbENoYXJzMikKK2VuZGZ1bmN0aW9uKCkKK3J1bl9OYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczJfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczNfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyJhYmNfListMDEyIl09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsgYWJjXy4rLTAxMiBdPT1dKQorICBydW5fY3Rlc3QoTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnMzKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc1ZhbGlkU3BlY2lhbENoYXJzM190ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc1ZhbGlkU3BlY2lhbENoYXJzNF90ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIGFiY18uKy0wMTIgXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyJhYmNfListMDEyIl09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNWYWxpZFNwZWNpYWxDaGFyczQpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zVmFsaWRTcGVjaWFsQ2hhcnM0X3Rlc3QoKQorCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczFfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyAhwqckJSYvw7w6KvCfmKR+IF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsgIcKnJCUmL8O8Oirwn5ikfiBdPT1dKQorICBydW5fY3Rlc3QoTmFtZUNvbnRhaW5zT3RoZXJTcGVjaWFsQ2hhcnMxKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzMV90ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzMl90ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIiHCpyQlJi/DvDoq8J+YpH4iXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyIhwqckJSYvw7w6KvCfmKR+Il09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczIpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zT3RoZXJTcGVjaWFsQ2hhcnMyX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zT3RoZXJTcGVjaWFsQ2hhcnMzX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiIcKnJCUmL8O8Oirwn5ikfiJdPT1dKQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMiBbPT1bICHCpyQlJi/DvDoq8J+YpH4gXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzMykKK2VuZGZ1bmN0aW9uKCkKK3J1bl9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczNfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNPdGhlclNwZWNpYWxDaGFyczRfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyAhwqckJSYvw7w6KvCfmKR+IF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiIcKnJCUmL8O8Oirwn5ikfiJdPT1dKQorICBydW5fY3Rlc3QoTmFtZUNvbnRhaW5zT3RoZXJTcGVjaWFsQ2hhcnM0KQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc090aGVyU3BlY2lhbENoYXJzNF90ZXN0KCkKKworCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zRXNjYXBlZFNwZWNpYWxDaGFyczFfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyBcKFwpXCBcIyBdPT1dKQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMiBbPT1bIFwoXClcIFwjIF09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMSkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzMV90ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc0VzY2FwZWRTcGVjaWFsQ2hhcnMyX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiXChcKVwgXCMiXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyJcKFwpXCBcIyJdPT1dKQorICBydW5fY3Rlc3QoTmFtZUNvbnRhaW5zRXNjYXBlZFNwZWNpYWxDaGFyczIpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zRXNjYXBlZFNwZWNpYWxDaGFyczJfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzM190ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIlwoXClcIFwjIl09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsgXChcKVwgXCMgXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0VzY2FwZWRTcGVjaWFsQ2hhcnMzKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc0VzY2FwZWRTcGVjaWFsQ2hhcnMzX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zRXNjYXBlZFNwZWNpYWxDaGFyczRfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyBcKFwpXCBcIyBdPT1dKQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMiBbPT1bIlwoXClcIFwjIl09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzNCkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9OYW1lQ29udGFpbnNFc2NhcGVkU3BlY2lhbENoYXJzNF90ZXN0KCkKKworCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zR2VuZXJhdG9yRXhwcmVzc2lvblN5bnRheDFfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyAkPEJPT0w6MD4gXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyAkPEJPT0w6MD4gXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgxKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgxX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zR2VuZXJhdG9yRXhwcmVzc2lvblN5bnRheDJfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyIkPEJPT0w6MD4iXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyIkPEJPT0w6MD4iXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgyKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgyX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zR2VuZXJhdG9yRXhwcmVzc2lvblN5bnRheDNfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyIkPEJPT0w6MD4iXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyAkPEJPT0w6MD4gXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgzKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXgzX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zR2VuZXJhdG9yRXhwcmVzc2lvblN5bnRheDRfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyAkPEJPT0w6MD4gXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyIkPEJPT0w6MD4iXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXg0KQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc0dlbmVyYXRvckV4cHJlc3Npb25TeW50YXg0X3Rlc3QoKQorCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNTcGFjZXMxX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiUHJlZml4VGVzdCBTdWZmaXhUZXN0Il09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiUHJlZml4VGVzdCBTdWZmaXhUZXN0Il09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNTcGFjZXMxKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc1NwYWNlczFfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNTcGFjZXMyX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsgUHJlZml4VGVzdCBTdWZmaXhUZXN0IF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsgUHJlZml4VGVzdCBTdWZmaXhUZXN0IF09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNTcGFjZXMyKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc1NwYWNlczJfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNTcGFjZXMzX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiUHJlZml4VGVzdCBTdWZmaXhUZXN0Il09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsgUHJlZml4VGVzdCBTdWZmaXhUZXN0IF09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNTcGFjZXMzKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc1NwYWNlczNfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNTcGFjZXM0X3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsgUHJlZml4VGVzdCBTdWZmaXhUZXN0IF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiUHJlZml4VGVzdCBTdWZmaXhUZXN0Il09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNTcGFjZXM0KQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc1NwYWNlczRfdGVzdCgpCisKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc1NlbWljb2xvbjFfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyJQcmVmaXhUZXN0O1N1ZmZpeFRlc3QiXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyJQcmVmaXhUZXN0O1N1ZmZpeFRlc3QiXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc1NlbWljb2xvbjEpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zU2VtaWNvbG9uMV90ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc1NlbWljb2xvbjJfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyBQcmVmaXhUZXN0O1N1ZmZpeFRlc3QgXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyBQcmVmaXhUZXN0O1N1ZmZpeFRlc3QgXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc1NlbWljb2xvbjIpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zU2VtaWNvbG9uMl90ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc1NlbWljb2xvbjNfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyJQcmVmaXhUZXN0O1N1ZmZpeFRlc3QiXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyBQcmVmaXhUZXN0O1N1ZmZpeFRlc3QgXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc1NlbWljb2xvbjMpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zU2VtaWNvbG9uM190ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc1NlbWljb2xvbjRfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyBQcmVmaXhUZXN0O1N1ZmZpeFRlc3QgXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyJQcmVmaXhUZXN0O1N1ZmZpeFRlc3QiXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc1NlbWljb2xvbjQpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zU2VtaWNvbG9uNF90ZXN0KCkKKworCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMV90ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIkVzY2FwZWRRdW90ZVwiXCJTdWZmaXhUZXN0Il09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiRXNjYXBlZFF1b3RlXCJcIlN1ZmZpeFRlc3QiXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0VzY2FwZWRRdW90ZTEpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMV90ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc0VzY2FwZWRRdW90ZTJfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyBFc2NhcGVkUXVvdGVcIlwiU3VmZml4VGVzdCBdPT1dKQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMiBbPT1bIEVzY2FwZWRRdW90ZVwiXCJTdWZmaXhUZXN0IF09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUyKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc0VzY2FwZWRRdW90ZTJfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUzX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiRXNjYXBlZFF1b3RlXCJcIlN1ZmZpeFRlc3QiXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyBFc2NhcGVkUXVvdGVcIlwiU3VmZml4VGVzdCBdPT1dKQorICBydW5fY3Rlc3QoTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlMykKK2VuZGZ1bmN0aW9uKCkKK3J1bl9OYW1lQ29udGFpbnNFc2NhcGVkUXVvdGUzX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlNF90ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIEVzY2FwZWRRdW90ZVwiXCJTdWZmaXhUZXN0IF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiRXNjYXBlZFF1b3RlXCJcIlN1ZmZpeFRlc3QiXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0VzY2FwZWRRdW90ZTQpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zRXNjYXBlZFF1b3RlNF90ZXN0KCkKKworCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50MV90ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIls9W0JyYWNrZXRBcmd1bWVudDtTdWZmaXhUZXN0XT1dIl09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiWz1bQnJhY2tldEFyZ3VtZW50O1N1ZmZpeFRlc3RdPV0iXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDEpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50MV90ZXN0KCkKKworZnVuY3Rpb24ocnVuX05hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDJfdGVzdCkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzEgWz09WyBbPVtCcmFja2V0QXJndW1lbnQ7U3VmZml4VGVzdF09XSBdPT1dKQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMiBbPT1bIFs9W0JyYWNrZXRBcmd1bWVudDtTdWZmaXhUZXN0XT1dIF09PV0pCisgIHJ1bl9jdGVzdChOYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQyKQorZW5kZnVuY3Rpb24oKQorcnVuX05hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDJfdGVzdCgpCisKK2Z1bmN0aW9uKHJ1bl9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQzX3Rlc3QpCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8xIFs9PVsiWz1bQnJhY2tldEFyZ3VtZW50O1N1ZmZpeFRlc3RdPV0iXT09XSkKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19OQU1FXzIgWz09WyBbPVtCcmFja2V0QXJndW1lbnQ7U3VmZml4VGVzdF09XSBdPT1dKQorICBydW5fY3Rlc3QoTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50MykKK2VuZGZ1bmN0aW9uKCkKK3J1bl9OYW1lQ29udGFpbnNCcmFja2V0QXJndW1lbnQzX3Rlc3QoKQorCitmdW5jdGlvbihydW5fTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50NF90ZXN0KQorICBzZXQoQ0FTRV9DTUFLRUxJU1RTX05BTUVfMSBbPT1bIFs9W0JyYWNrZXRBcmd1bWVudDtTdWZmaXhUZXN0XT1dIF09PV0pCisgIHNldChDQVNFX0NNQUtFTElTVFNfTkFNRV8yIFs9PVsiWz1bQnJhY2tldEFyZ3VtZW50O1N1ZmZpeFRlc3RdPV0iXT09XSkKKyAgcnVuX2N0ZXN0KE5hbWVDb250YWluc0JyYWNrZXRBcmd1bWVudDQpCitlbmRmdW5jdGlvbigpCitydW5fTmFtZUNvbnRhaW5zQnJhY2tldEFyZ3VtZW50NF90ZXN0KCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF90ZXN0L3Rlc3QuY21ha2UuaW4gYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC90ZXN0LmNtYWtlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjFjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfdGVzdC90ZXN0LmNtYWtlLmluCkBAIC0wLDAgKzEsMTYgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorCitzZXQoQ1RFU1RfU0lURSAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Qtc2l0ZSIpCitzZXQoQ1RFU1RfQlVJTERfTkFNRSAgICAgICAgICAgICAgICAgICAgInRlc3QtYnVpbGQtbmFtZSIpCitzZXQoQ1RFU1RfU09VUkNFX0RJUkVDVE9SWSAgICAgICAgICAgICAgIkBSdW5DTWFrZV9CSU5BUllfRElSQC9AQ0FTRV9OQU1FQCIpCitzZXQoQ1RFU1RfQklOQVJZX0RJUkVDVE9SWSAgICAgICAgICAgICAgIkBSdW5DTWFrZV9CSU5BUllfRElSQC9AQ0FTRV9OQU1FQC1idWlsZCIpCitzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SICAgICAgICAgICAgICAgIkBSdW5DTWFrZV9HRU5FUkFUT1JAIikKK3NldChDVEVTVF9DTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0gICAgICAiQFJ1bkNNYWtlX0dFTkVSQVRPUl9QTEFURk9STUAiKQorc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUICAgICAgICJAUnVuQ01ha2VfR0VORVJBVE9SX1RPT0xTRVRAIikKK3NldChDVEVTVF9CVUlMRF9DT05GSUdVUkFUSU9OICAgICAgICAgICAiJEVOVntDTUFLRV9DT05GSUdfVFlQRX0iKQorCitzZXQoY3Rlc3RfdGVzdF9hcmdzICJAQ0FTRV9DVEVTVF9URVNUX0FSR1NAIikKK2N0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCkKK2N0ZXN0X2NvbmZpZ3VyZSgpCisjY3Rlc3RfYnVpbGQoKQorY3Rlc3RfdGVzdCgke2N0ZXN0X3Rlc3RfYXJnc30pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGRkZWQyNDguLjRiZTFiOWQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yLDYgKzIsOCBAQAogCiBydW5fY21ha2Uobm8tdGFyZ2V0cykKIHJ1bl9jbWFrZShtdWx0aXBsZS10YXJnZXRzKQorcnVuX2NtYWtlKGR1cGxpY2F0ZS10YXJnZXQtQ01QMDEwNy1PTEQpCitydW5fY21ha2UoZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVykKIHJ1bl9jbWFrZShleGNsdWRlLWZyb20tYWxsKQogcnVuX2NtYWtlKGltcG9ydGVkKQogcnVuX2NtYWtlKGludmFsaWQtbmFtZSkKQEAgLTEwLDYgKzEyLDcgQEAKIHJ1bl9jbWFrZShpbXBvcnRlZC10YXJnZXQpCiBydW5fY21ha2UoYWxpYXMtdGFyZ2V0KQogcnVuX2NtYWtlKHNldF9wcm9wZXJ0eSkKK3J1bl9jbWFrZShnZXRfcHJvcGVydHkpCiBydW5fY21ha2Uoc2V0X3RhcmdldF9wcm9wZXJ0aWVzKQogcnVuX2NtYWtlKHRhcmdldF9saW5rX2xpYnJhcmllcykKIHJ1bl9jbWFrZSh0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2R1cGxpY2F0ZS10YXJnZXQtQ01QMDEwNy1ORVctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiYTVhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0NNYWtlIEVycm9yIGF0IGR1cGxpY2F0ZS10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKKyAgYWRkX2xpYnJhcnkgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgImFsaWFzMSIgYmVjYXVzZSBhbm90aGVyIHRhcmdldCB3aXRoCisgIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBkdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLmNtYWtlOlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKworCitDTWFrZSBFcnJvciBhdCBkdXBsaWNhdGUtdGFyZ2V0LmNtYWtlOlswLTldKyBcKGFkZF9saWJyYXJ5XCk6CisgIGFkZF9saWJyYXJ5IGNhbm5vdCBjcmVhdGUgQUxJQVMgdGFyZ2V0ICJhbGlhczEiIGJlY2F1c2UgYW5vdGhlciB0YXJnZXQgd2l0aAorICB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy5jbWFrZTpbMC05XSsgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisKKworQ01ha2UgRXJyb3IgYXQgZHVwbGljYXRlLXRhcmdldC5jbWFrZTpbMC05XSsgXChhZGRfbGlicmFyeVwpOgorICBhZGRfbGlicmFyeSBjYW5ub3QgY3JlYXRlIEFMSUFTIHRhcmdldCAiYWxpYXMyIiBiZWNhdXNlIGFub3RoZXIgdGFyZ2V0IHdpdGgKKyAgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGR1cGxpY2F0ZS10YXJnZXQtQ01QMDEwNy1ORVcuY21ha2U6WzAtOV0rIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQorCisKK0NNYWtlIEVycm9yIGF0IGR1cGxpY2F0ZS10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKKyAgYWRkX2xpYnJhcnkgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgImFsaWFzMiIgYmVjYXVzZSBhbm90aGVyIHRhcmdldCB3aXRoCisgIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBkdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLmNtYWtlOlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk4NTdmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3kgKFNFVCBDTVAwMTA3IE5FVykKKworaW5jbHVkZSAoZHVwbGljYXRlLXRhcmdldC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU9MRC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU9MRC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWJjOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctT0xELmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3kgKFNFVCBDTVAwMTA3IE9MRCkKKworaW5jbHVkZSAoZHVwbGljYXRlLXRhcmdldC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODE5MjFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKKworYWRkX2xpYnJhcnkgKGZvbzEgSU5URVJGQUNFKQorYWRkX2xpYnJhcnkgKGZvbzIgSU5URVJGQUNFKQorCithZGRfbGlicmFyeSAoaW1wMSBTSEFSRUQgSU1QT1JURUQgR0xPQkFMKQorYWRkX2xpYnJhcnkgKGltcDIgU0hBUkVEIElNUE9SVEVEIEdMT0JBTCkKKworCithZGRfbGlicmFyeSAoYWxpYXMxIEFMSUFTIGZvbzEpCisjIHNhbWUgYWxpYXMgdG8gZGlmZmVyZW50IGxpYnJhcnkKK2FkZF9saWJyYXJ5IChhbGlhczEgQUxJQVMgZm9vMikKKyMgc2FtZSBhbGlhcyB0byBkaWZmZXJlbnQgaW1wb3J0ZWQgbGlicmFyeQorYWRkX2xpYnJhcnkgKGFsaWFzMSBBTElBUyBpbXAxKQorCisKK2FkZF9saWJyYXJ5IChhbGlhczIgQUxJQVMgaW1wMSkKKyMgc2FtZSBhbGlhcyB0byBkaWZmZXJlbnQgaW1wb3J0ZWQgbGlicmFyeQorYWRkX2xpYnJhcnkgKGFsaWFzMiBBTElBUyBpbXAyKQorIyBzYW1lIGFsaWFzIHRvIGRpZmZlcmVudCBsaWJyYXJ5CithZGRfbGlicmFyeSAoYWxpYXMyIEFMSUFTIGZvbzEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2dldF9wcm9wZXJ0eS1zdWJkaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2dldF9wcm9wZXJ0eS1zdWJkaXIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExNGI3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZ2V0X3Byb3BlcnR5LXN1YmRpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE1IEBACisKKworYWRkX2xpYnJhcnkoYWxpYXM6OmltcG9ydC1sb2NhbC1zdWJkaXIgQUxJQVMgaW1wb3J0LWxvY2FsKQorCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbC1zdWJkaXIgQUxJQVNFRF9UQVJHRVQgImltcG9ydC1sb2NhbCIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbC1zdWJkaXIgSU1QT1JURUQgIlRSVUUiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwtc3ViZGlyIEFMSUFTX0dMT0JBTCAiRkFMU0UiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwtc3ViZGlyIElNUE9SVF9MT0NBTF9QUk9QRVJUWSAiSU1QT1JUX0xPQ0FMIikKKworCisjIG5vbi1nbG9iYWwgYWxpYXMgZGVmaW5lZCBpbiBwYXJlbnQgZGlyZWN0b3J5IG11c3QgYmUgdmlzaWJsZSBpbiBzdWItZGlyZWN0b3J5CitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbCBBTElBU0VEX1RBUkdFVCAiaW1wb3J0LWxvY2FsIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIElNUE9SVEVEICJUUlVFIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIEFMSUFTX0dMT0JBTCAiRkFMU0UiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwgSU1QT1JUX0xPQ0FMX1BST1BFUlRZICJJTVBPUlRfTE9DQUwiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9nZXRfcHJvcGVydHkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2dldF9wcm9wZXJ0eS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTAxYzZmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9nZXRfcHJvcGVydHkuY21ha2UKQEAgLTAsMCArMSw1OSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitmdW5jdGlvbiAoY2hlY2tfcHJvcGVydHkgYWxpYXMgcHJvcGVydHkgdmFsdWUpCisgIGdldF9wcm9wZXJ0eSAoZGF0YSBUQVJHRVQgJHthbGlhc30gUFJPUEVSVFkgJHtwcm9wZXJ0eX0pCisgIGlmIChOT1QgIiR7dmFsdWV9IiBTVFJFUVVBTCAiJHtkYXRhfSIpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZ2V0X3Byb3BlcnR5KCk6IFRhcmdldCBwcm9wZXJ0eSAnJHtwcm9wZXJ0eX0nIGZyb20gQUxJQVMgJyR7YWxpYXN9JyBoYXMgd3JvbmcgdmFsdWU6ICcke2RhdGF9JyBpbnN0ZWFkIG9mICcke3ZhbHVlfScuIikKKyAgZW5kaWYoKQorICBnZXRfdGFyZ2V0X3Byb3BlcnR5IChkYXRhICR7YWxpYXN9ICR7cHJvcGVydHl9KQorICBpZiAoTk9UICIke3ZhbHVlfSIgU1RSRVFVQUwgIiR7ZGF0YX0iKQorICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImdldF90YXJnZXRfcHJvcGVydHkoKTogVGFyZ2V0IHByb3BlcnR5ICcke3Byb3BlcnR5fScgZnJvbSBBTElBUyAnJHthbGlhc30nIGhhcyB3cm9uZyB2YWx1ZTogJyR7ZGF0YX0nIGluc3RlYWQgb2YgJyR7dmFsdWV9Jy4iKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKKworYWRkX2xpYnJhcnkobGliIGVtcHR5LmNwcCkKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIGxpYiBQUk9QRVJUWSBMSUJfUFJPUEVSVFkgIkxJQiIpCisKK2FkZF9saWJyYXJ5KGFsaWFzOjpsaWIgQUxJQVMgbGliKQorCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmxpYiBBTElBU0VEX1RBUkdFVCAibGliIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6bGliIElNUE9SVEVEICJGQUxTRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmxpYiBBTElBU19HTE9CQUwgIlRSVUUiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjpsaWIgTElCX1BST1BFUlRZICJMSUIiKQorCisKK2FkZF9saWJyYXJ5KGltcG9ydC1nbG9iYWwgU0hBUkVEIElNUE9SVEVEIEdMT0JBTCkKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIGltcG9ydC1nbG9iYWwgUFJPUEVSVFkgSU1QT1JUX0dMT0JBTF9QUk9QRVJUWSAiSU1QT1JUX0dMT0JBTCIpCisKK2FkZF9saWJyYXJ5KGFsaWFzOjppbXBvcnQtZ2xvYmFsIEFMSUFTIGltcG9ydC1nbG9iYWwpCisKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWdsb2JhbCBBTElBU0VEX1RBUkdFVCAiaW1wb3J0LWdsb2JhbCIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1nbG9iYWwgSU1QT1JURUQgIlRSVUUiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtZ2xvYmFsIEFMSUFTX0dMT0JBTCAiVFJVRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1nbG9iYWwgSU1QT1JUX0dMT0JBTF9QUk9QRVJUWSAiSU1QT1JUX0dMT0JBTCIpCisKKworYWRkX2xpYnJhcnkoaW1wb3J0LWxvY2FsIFNIQVJFRCBJTVBPUlRFRCkKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIGltcG9ydC1sb2NhbCBQUk9QRVJUWSBJTVBPUlRfTE9DQUxfUFJPUEVSVFkgIklNUE9SVF9MT0NBTCIpCisKK2FkZF9saWJyYXJ5KGFsaWFzOjppbXBvcnQtbG9jYWwgQUxJQVMgaW1wb3J0LWxvY2FsKQorCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbCBBTElBU0VEX1RBUkdFVCAiaW1wb3J0LWxvY2FsIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIElNUE9SVEVEICJUUlVFIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIEFMSUFTX0dMT0JBTCAiRkFMU0UiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwgSU1QT1JUX0xPQ0FMX1BST1BFUlRZICJJTVBPUlRfTE9DQUwiKQorCisKKyMjIHVwZ3JhZGUgaW1wb3J0ZWQgdGFyZ2V0IGZyb20gbG9jYWwgdG8gZ2xvYmFsLCBhbGlhcyBzdGF5IGxvY2FsCithZGRfbGlicmFyeShpbXBvcnQtbGliIFNIQVJFRCBJTVBPUlRFRCkKK2FkZF9saWJyYXJ5KGFsaWFzOjppbXBvcnQtbGliIEFMSUFTIGltcG9ydC1saWIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1saWIgSU1QT1JURURfR0xPQkFMICJGQUxTRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1saWIgQUxJQVNfR0xPQkFMICJGQUxTRSIpCitzZXRfcHJvcGVydHkgKFRBUkdFVCBpbXBvcnQtbGliIFBST1BFUlRZIElNUE9SVEVEX0dMT0JBTCAiVFJVRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1saWIgSU1QT1JURURfR0xPQkFMICJUUlVFIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxpYiBBTElBU19HTE9CQUwgIkZBTFNFIikKKworCithZGRfc3ViZGlyZWN0b3J5IChnZXRfcHJvcGVydHktc3ViZGlyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN0ZGVyci50eHQKaW5kZXggNDY1ZGUwMy4uODI1OWM4MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1zdGRlcnIudHh0CkBAIC0xLDE1ICsxLDIgQEAKLV5DTWFrZSBFcnJvciBhdCBpbXBvcnRlZC10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKLSAgYWRkX2V4ZWN1dGFibGUgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgXCJhbGlhcy10ZXN0LWV4ZVwiIGJlY2F1c2UgdGFyZ2V0Ci0gIFwidGVzdC1leGVcIiBpcyBpbXBvcnRlZCBidXQgbm90IGdsb2JhbGx5IHZpc2libGUuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKLSsKLSdhbGlhcy10ZXN0LWV4ZScgZG9lcyBub3QgZXhpc3QhWz9dCi0qCi1DTWFrZSBFcnJvciBhdCBpbXBvcnRlZC10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKLSAgYWRkX2xpYnJhcnkgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgImFsaWFzLXRlc3QtbGliIiBiZWNhdXNlIHRhcmdldAotICAidGVzdC1saWIiIGlzIGltcG9ydGVkIGJ1dCBub3QgZ2xvYmFsbHkgdmlzaWJsZS4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQotKwotJ2FsaWFzLXRlc3QtbGliJyBkb2VzIG5vdCBleGlzdCFbP10kCiteJ2FsaWFzLXRlc3QtZXhlJyBpcyBhbiBhbGlhcyBmb3IgJ3Rlc3QtZXhlJyBhbmQgaXRzIG5hbWUtcHJvcGVydHkgY29udGFpbnMgJ3Rlc3QtZXhlJy4KKydhbGlhcy10ZXN0LWxpYicgaXMgYW4gYWxpYXMgZm9yICd0ZXN0LWxpYicgYW5kIGl0cyBuYW1lLXByb3BlcnR5IGNvbnRhaW5zICd0ZXN0LWxpYicuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3ViZGlyMS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjEvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjMDViMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjEvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw2IEBACisKK2FkZF9leGVjdXRhYmxlKGFsaWFzLXRlc3QtZXhlLXN1YmRpcjEgQUxJQVMgdGVzdC1leGUpCithZGRfZXhlY3V0YWJsZShhbGlhcy10ZXN0LWV4ZS1sb2NhbCBBTElBUyB0ZXN0LWV4ZSkKKworYWRkX2xpYnJhcnkoYWxpYXMtdGVzdC1saWItc3ViZGlyMSBBTElBUyB0ZXN0LWxpYikKK2FkZF9saWJyYXJ5KGFsaWFzLXRlc3QtbGliLWxvY2FsIEFMSUFTIHRlc3QtbGliKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3ViZGlyMi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjODViYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyMCBAQAorCithZGRfZXhlY3V0YWJsZShhbGlhcy10ZXN0LWV4ZS1zdWJkaXIyIEFMSUFTIHRlc3QtZXhlKQorYWRkX2V4ZWN1dGFibGUoYWxpYXMtdGVzdC1leGUtbG9jYWwgQUxJQVMgdGVzdC1leGUpCisKK2FkZF9saWJyYXJ5KGFsaWFzLXRlc3QtbGliLXN1YmRpcjIgQUxJQVMgdGVzdC1saWIpCithZGRfbGlicmFyeShhbGlhcy10ZXN0LWxpYi1sb2NhbCBBTElBUyB0ZXN0LWxpYikKKworCitmb3JlYWNoIChpdGVtIElOIElURU1TIGV4ZSBsaWIpCisgIGdldF9wcm9wZXJ0eSAoYWxpYXNlZFRhcmdldCBUQVJHRVQgYWxpYXMtdGVzdC0ke2l0ZW19LWxvY2FsIFBST1BFUlRZIEFMSUFTRURfVEFSR0VUKQorICBpZiAoTk9UIGFsaWFzZWRUYXJnZXQgU1RSRVFVQUwgInRlc3QtJHtpdGVtfSIpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiV3JvbmcgYWxpYXNlZCB0YXJnZXQgJyR7YWxpYXNlZFRhcmdldH0nIGZvciBBTElBUyAnYWxpYXMtdGVzdC0ke2l0ZW19LWxvY2FsJy4iKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCAoaXRlbSBJTiBJVEVNUyBleGUgbGliKQorICBpZiAoVEFSR0VUIGFsaWFzLXRlc3QtJHtpdGVtfS1zdWJkaXIxKQorICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgIkFMSUFTICdhbGlhcy10ZXN0LSR7aXRlbX0tc3ViZGlyMScgdW5leHBlY3RlZGx5IGRlZmluZWQuIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCmluZGV4IGJiNjgyZmUuLmZhNmY4ZDMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCkBAIC00NCwzICs0NCwxNCBAQAogZWxzZSgpCiAgICAgbWVzc2FnZSgiJ2FsaWFzLXRlc3QtbGliJyBkb2VzIG5vdCBleGlzdCE/IikKIGVuZGlmKCkKKworYWRkX3N1YmRpcmVjdG9yeSAoaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjEpCithZGRfc3ViZGlyZWN0b3J5IChpbXBvcnRlZC10YXJnZXQtc3ViZGlyMikKKworZm9yZWFjaCAoYWxpYXMgSU4gSVRFTVMgZXhlLWxvY2FsIGxpYi1sb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgZXhlLXN1YmRpcjEgbGliLXN1YmRpcjEKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZS1zdWJkaXIyIGxpYi1zdWJkaXIyKQorICBpZiAoVEFSR0VUIGFsaWFzLXRlc3QtJHthbGlhc30pCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiQUxJQVMgJ2FsaWFzLXRlc3QtJHthbGlhc30nIHVuZXhwZWN0ZWRseSBkZWZpbmVkLiIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbnZhbGlkLW5hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ludmFsaWQtbmFtZS5jbWFrZQppbmRleCBiYmQzOWUzLi4wMTk4M2U1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ludmFsaWQtbmFtZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ludmFsaWQtbmFtZS5jbWFrZQpAQCAtMSw0ICsxLDQgQEAKLQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIGVuYWJsZV9sYW5ndWFnZShDWFgpCiAKIGFkZF9saWJyYXJ5KGZvbyBlbXB0eS5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9idWlsZF9jb21tYW5kL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvYnVpbGRfY29tbWFuZC9DTWFrZUxpc3RzLnR4dAppbmRleCA3M2U2YTc4Li5mMWE4M2U4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9idWlsZF9jb21tYW5kL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2J1aWxkX2NvbW1hbmQvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogaWYoTk9UIE5vUHJvamVjdCkKICAgcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzJmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DYWxsSW52YWxpZENvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DYWxsSW52YWxpZENvbW1hbmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlZTZmMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL0NhbGxJbnZhbGlkQ29tbWFuZC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworY21ha2VfbGFuZ3VhZ2UoQ0FMTCAke0NPTU1BTkR9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tJbmNsdWRlR3VhcmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DaGVja0luY2x1ZGVHdWFyZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDJjMWU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tJbmNsdWRlR3VhcmQuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2NtYWtlX2xhbmd1YWdlIChDQUxMICJpbmNsdWRlX2d1YXJkIikKKworc2V0IChHVUFSRF9WQUxVRSAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMjc2OTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DaGVja1Byb2plY3QvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxOSBAQAorCitjbWFrZV9sYW5ndWFnZSAoQ0FMTCBjbWFrZV9taW5pbXVtX3JlcXVpcmVkIFZFUlNJT04gMy4xNy4uLjMuMTgpCisKK2NtYWtlX2xhbmd1YWdlIChDQUxMIHByb2plY3QgQ2hlY2tQcm9qZWN0IFZFUlNJT04gMS4yLjMgTEFOR1VBR0VTIEMpCisKK2lmIChOT1QgUFJPSkVDVF9OQU1FIFNUUkVRVUFMICJDaGVja1Byb2plY3QiKQorICBtZXNzYWdlIChTRU5EX0VSUk9SICJlcnJvciBvbiBwcm9qZWN0KCkgdXNhZ2UuIikKK2VuZGlmKCkKKworaWYgKE5PVCBDaGVja1Byb2plY3RfVkVSU0lPTiBWRVJTSU9OX0VRVUFMICIxLjIuMyIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIHByb2plY3QoKSB1c2FnZS4iKQorZW5kaWYoKQorCitnZXRfcHJvcGVydHkgKGxhbmd1YWdlcyBHTE9CQUwgUFJPUEVSVFkgRU5BQkxFRF9MQU5HVUFHRVMpCitpZiAoTk9UICJDIiBJTl9MSVNUIGxhbmd1YWdlcykKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gcHJvamVjdCgpIHVzYWdlLiIpCitlbmRpZigpCisKK2FkZF9saWJyYXJ5IChsaWIgU0hBUkVEIGxpYi5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L2xpYi5jIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DaGVja1Byb2plY3QvbGliLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI5M2M4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMjUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShub19wYXJhbWV0ZXJzKQorcnVuX2NtYWtlKHVua25vd25fbWV0YV9vcGVyYXRpb24pCitydW5fY21ha2UoY2FsbF9pbnZhbGlkX2NvbW1hbmQpCitydW5fY21ha2UoY2FsbF92YWxpZF9jb21tYW5kKQorcnVuX2NtYWtlKGNhbGxfZG91YmxlX2V2YWx1YXRpb24pCitydW5fY21ha2UoY2FsbF9leHBhbmRlZF9jb21tYW5kKQorcnVuX2NtYWtlKGNhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzKQorcnVuX2NtYWtlKGNhbGxfZXhwYW5kZWRfY29tbWFuZF93aXRoX2V4cGxpY2l0X2FyZ3VtZW50KQorcnVuX2NtYWtlKGNhbGxfZXhwYW5kX2NvbW1hbmRfbmFtZSkKK3J1bl9jbWFrZShjYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lKQorcnVuX2NtYWtlKGNhbGxfbWVzc2FnZSkKK3J1bl9jbWFrZShjYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3IpCitydW5fY21ha2UoY2FsbF9ub19wYXJhbWV0ZXJzKQorcnVuX2NtYWtlKGNhbGxfcHJlc2VydmVfYXJndW1lbnRzKQorcnVuX2NtYWtlKGNhbGxfdW5rbm93bl9mdW5jdGlvbikKK3J1bl9jbWFrZShldmFsX2V4cGFuZF9jb21tYW5kX25hbWUpCitydW5fY21ha2UoZXZhbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMpCitydW5fY21ha2UoZXZhbF9leHRyYV9wYXJhbWV0ZXJzX2JldHdlZW5fZXZhbF9hbmRfY29kZSkKK3J1bl9jbWFrZShldmFsX21lc3NhZ2UpCitydW5fY21ha2UoZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yKQorcnVuX2NtYWtlKGV2YWxfbm9fY29kZSkKK3J1bl9jbWFrZShldmFsX25vX3BhcmFtZXRlcnMpCitydW5fY21ha2UoZXZhbF92YXJpYWJsZV9vdXRzaWRlX21lc3NhZ2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2RvdWJsZV9ldmFsdWF0aW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2RvdWJsZV9ldmFsdWF0aW9uLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhNzBiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZG91YmxlX2V2YWx1YXRpb24tc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACit2YXI9J1wke2Zvb30nCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2RvdWJsZV9ldmFsdWF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9kb3VibGVfZXZhbHVhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjhmYzkxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9kb3VibGVfZXZhbHVhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldCh2YXIgW1ske2Zvb31dXSkKK2NtYWtlX2xhbmd1YWdlKENBTEwgY21ha2VfbGFuZ3VhZ2UgQ0FMTCBtZXNzYWdlICJ2YXI9JyR7dmFyfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRfY29tbWFuZF9uYW1lLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9jb21tYW5kX25hbWUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRfY29tbWFuZF9uYW1lLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorT0shCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9jb21tYW5kX25hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9jb21tYW5kX25hbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzYmIxZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kX2NvbW1hbmRfbmFtZS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldCAobXlfY2FsbCAiQ0FMTCIpCitjbWFrZV9sYW5ndWFnZSAoJHtteV9jYWxsfSBtZXNzYWdlICJPSyEiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kX2Z1bmN0aW9uX25hbWUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kX2Z1bmN0aW9uX25hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NWE3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2Z1bmN0aW9uKHNvbWVfZnVuY3Rpb25fMSkKKyAgbWVzc2FnZSgxKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihzb21lX2Z1bmN0aW9uXzIpCisgIG1lc3NhZ2UoMikKK2VuZGZ1bmN0aW9uKCkKKworc2V0KGZ1bmN0aW9uX3ZlcnNpb24gMSkKKworY21ha2VfbGFuZ3VhZ2UoQ0FMTCBzb21lX2Z1bmN0aW9uXyR7ZnVuY3Rpb25fdmVyc2lvbn0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitPSyEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzZlNjEyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRlZF9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZnVuY3Rpb24gKGl0c29rKQorICBtZXNzYWdlKE9LISkKK2VuZGZ1bmN0aW9uKCkKKworc2V0IChjbWQgQ0FMTCBpdHNvaykKK2NtYWtlX2xhbmd1YWdlICgke2NtZH0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2U5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorQ01ha2UgRXJyb3IgYXQgY2FsbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMuY21ha2U6MiBcKGNtYWtlX2xhbmd1YWdlXCk6CisgIGNtYWtlX2xhbmd1YWdlIGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZTZiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldChjYWxsX21lc3NhZ2UgQ0FMTCBtZXNzYWdlIGEgYikKK2NtYWtlX2xhbmd1YWdlKCR7Y2FsbF9tZXNzYWdlfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF93aXRoX2V4cGxpY2l0X2FyZ3VtZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfd2l0aF9leHBsaWNpdF9hcmd1bWVudC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfd2l0aF9leHBsaWNpdF9hcmd1bWVudC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK09LIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRlZF9jb21tYW5kX3dpdGhfZXhwbGljaXRfYXJndW1lbnQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfd2l0aF9leHBsaWNpdF9hcmd1bWVudC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTYzNDAwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRlZF9jb21tYW5kX3dpdGhfZXhwbGljaXRfYXJndW1lbnQuY21ha2UKQEAgLTAsMCArMSwyIEBACitzZXQgKGNtZCBDQUxMIG1lc3NhZ2UpCitjbWFrZV9sYW5ndWFnZSAoJHtjbWR9ICJPSyEiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9pbnZhbGlkX2NvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2ludmFsaWRfY29tbWFuZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJmMDhjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9pbnZhbGlkX2NvbW1hbmQuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorCitmb3JlYWNoIChjb21tYW5kIElOIElURU1TICJmdW5jdGlvbiIgIkVOREZVTkNUSU9OIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibWFjcm8iICJlbmRNQUNSTyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIiAiZWxzZWlmIiAiZWxzZSIgImVuZGlmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUiICJlbmR3aGlsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcmVhY2giICJlbmRmb3JlYWNoIikKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1EQ09NTUFORD0ke2NvbW1hbmR9CisgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DYWxsSW52YWxpZENvbW1hbmQuY21ha2UiCisgICAgT1VUUFVUX1FVSUVUIEVSUk9SX1FVSUVUCisgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdCkKKyAgaWYgKE5PVCByZXN1bHQpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiY21ha2VfbGFuZ3VhZ2UoQ0FMTCAke2NvbW1hbmR9KSB1bmV4cGVjdGVkbHkgc3VjY2Vzc2Z1bGwuIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX21lc3NhZ2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzg2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX21lc3NhZ2Utc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitXT1JLUyEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWFlZmRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKENBTEwgbWVzc2FnZSBXT1JLUyEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlYjNkOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlOjEgXChtZXNzYWdlXCk6CisgIGVycm9yIQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlOjEgXChjbWFrZV9sYW5ndWFnZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzViNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKENBTEwgbWVzc2FnZSBGQVRBTF9FUlJPUiBlcnJvciEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9ub19wYXJhbWV0ZXJzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9ub19wYXJhbWV0ZXJzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbm9fcGFyYW1ldGVycy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyYzA4ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbm9fcGFyYW1ldGVycy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorQ01ha2UgRXJyb3IgYXQgY2FsbF9ub19wYXJhbWV0ZXJzLmNtYWtlOjEgXChjbWFrZV9sYW5ndWFnZVwpOgorICBjbWFrZV9sYW5ndWFnZSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9ub19wYXJhbWV0ZXJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9ub19wYXJhbWV0ZXJzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNTNlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX25vX3BhcmFtZXRlcnMuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoQ0FMTCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfcHJlc2VydmVfYXJndW1lbnRzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3ByZXNlcnZlX2FyZ3VtZW50cy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzU0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3ByZXNlcnZlX2FyZ3VtZW50cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorZm9vXCguLi5cKQorXFthO2JcXQorXFtjO2RcXQorY21ha2VfbGFuZ3VhZ2VcKENBTEwgZm9vIC4uLlwpCitcW2E7YlxdCitcW2M7ZFxdCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3ByZXNlcnZlX2FyZ3VtZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfcHJlc2VydmVfYXJndW1lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWYwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3ByZXNlcnZlX2FyZ3VtZW50cy5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitmdW5jdGlvbihmb28gYXJnMSBhcmcyKQorICBtYXRoKEVYUFIgbGFzdCAiJHtBUkdDfSAtIDEiKQorICBmb3JlYWNoKGkgUkFOR0UgMCAke2xhc3R9KQorICAgIG1lc3NhZ2UoIlske0FSR1Yke2l9fV0iKQorICBlbmRmb3JlYWNoKCkKK2VuZGZ1bmN0aW9uKCkKKworbWVzc2FnZSgiZm9vKC4uLikiKQorZm9vKCJhO2IiICJjO2QiKQorCittZXNzYWdlKCJjbWFrZV9sYW5ndWFnZShDQUxMIGZvbyAuLi4pIikKK2NtYWtlX2xhbmd1YWdlKENBTEwgZm9vICJhO2IiICJjO2QiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfdW5rbm93bl9mdW5jdGlvbi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfdW5rbm93bl9mdW5jdGlvbi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3Vua25vd25fZnVuY3Rpb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfdW5rbm93bl9mdW5jdGlvbi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWU3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3Vua25vd25fZnVuY3Rpb24tc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGNhbGxfdW5rbm93bl9mdW5jdGlvbi5jbWFrZToxIFwodW5rbm93blwpOgorICBVbmtub3duIENNYWtlIGNvbW1hbmQgInVua25vd24iLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF91bmtub3duX2Z1bmN0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF91bmtub3duX2Z1bmN0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZDZiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3Vua25vd25fZnVuY3Rpb24uY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoQ0FMTCB1bmtub3duKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF92YWxpZF9jb21tYW5kLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF92YWxpZF9jb21tYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTY1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3ZhbGlkX2NvbW1hbmQuY21ha2UKQEAgLTAsMCArMSw5OSBAQAorCisjIyBjaGVjayBjb250aW51ZSgpIHVzYWdlCitzZXQgKFZBTFVFIDApCitmb3JlYWNoIChpIFJBTkdFIDEgNCkKKyAgc2V0IChWQUxVRSAiJHtpfSIpCisgIGNtYWtlX2xhbmd1YWdlIChDQUxMICJjb250aW51ZSIpCisgIHNldCAoVkFMVUUgIjAiKQorZW5kZm9yZWFjaCgpCitpZiAoTk9UIFZBTFVFIEVRVUFMICI0IikKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gY29udGludWUoKSB1c2FnZS4iKQorZW5kaWYoKQorCisKKyMjIGNoZWNrIGJyZWFrKCkgdXNhZ2UKK3NldCAoVkFMVUUgMCkKK2ZvcmVhY2ggKGkgUkFOR0UgMSA0KQorICBzZXQgKFZBTFVFICIke2l9IikKKyAgY21ha2VfbGFuZ3VhZ2UgKENBTEwgImJyZWFrIikKKyAgc2V0IChWQUxVRSAwKQorZW5kZm9yZWFjaCgpCitpZiAoTk9UIFZBTFVFIEVRVUFMICIxIikKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gYnJlYWsoKSB1c2FnZS4iKQorZW5kaWYoKQorCisKKyMjIGNoZWNrIHJldHVybigpIHVzYWdlIGluIG1hY3JvCittYWNybyAoY2FsbF9yZXR1cm5faW5fbWFjcm8pCisgIGNtYWtlX2xhbmd1YWdlIChDQUxMICJyZXR1cm4iKQorICBzZXQgKFZBTFVFIDEpCitlbmRtYWNybygpCitmdW5jdGlvbiAod3JhcHBlcikKKyAgY2FsbF9yZXR1cm5faW5fbWFjcm8oKQorICBzZXQgKFZBTFVFIDEgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCitzZXQgKFZBTFVFIDApCit3cmFwcGVyKCkKK2lmIChOT1QgVkFMVUUgRVFVQUwgIjAiKQorICBtZXNzYWdlIChTRU5EX0VSUk9SICJlcnJvciBvbiByZXR1cm4oKSB1c2FnZSBpbiBtYWNyby4iKQorZW5kaWYoKQorCitzZXQgKFZBTFVFIDApCitjbWFrZV9sYW5ndWFnZSAoQ0FMTCAid3JhcHBlciIpCitpZiAoTk9UIFZBTFVFIEVRVUFMICIwIikKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gcmV0dXJuKCkgdXNhZ2UgaW4gbWFjcm8uIikKK2VuZGlmKCkKKworZnVuY3Rpb24gKHdyYXBwZXIyKQorICBjbWFrZV9sYW5ndWFnZSAoQ0FMTCAiY2FsbF9yZXR1cm5faW5fbWFjcm8iKQorICBzZXQgKFZBTFVFIDEgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCitzZXQgKFZBTFVFIDApCit3cmFwcGVyMigpCitpZiAoTk9UIFZBTFVFIEVRVUFMICIwIikKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gcmV0dXJuKCkgdXNhZ2UgaW4gbWFjcm8uIikKK2VuZGlmKCkKKworc2V0IChWQUxVRSAwKQorY21ha2VfbGFuZ3VhZ2UgKENBTEwgIndyYXBwZXIyIikKK2lmIChOT1QgVkFMVUUgRVFVQUwgIjAiKQorICBtZXNzYWdlIChTRU5EX0VSUk9SICJlcnJvciBvbiByZXR1cm4oKSB1c2FnZSBpbiBtYWNyby4iKQorZW5kaWYoKQorCisjIyBjaGVjayByZXR1cm4oKSB1c2FnZSBpbiBmdW5jdGlvbgorZnVuY3Rpb24gKGNhbGxfcmV0dXJuX2luX2Z1bmN0aW9uKQorICBjbWFrZV9sYW5ndWFnZSAoQ0FMTCAicmV0dXJuIikKKyAgc2V0IChWQUxVRSAxIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworc2V0IChWQUxVRSAwKQorY2FsbF9yZXR1cm5faW5fZnVuY3Rpb24oKQoraWYgKE5PVCBWQUxVRSBFUVVBTCAiMCIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIHJldHVybigpIHVzYWdlIGluIGZ1bmN0aW9uLiIpCitlbmRpZigpCisKK3NldCAoVkFMVUUgMCkKK2NtYWtlX2xhbmd1YWdlIChDQUxMICJjYWxsX3JldHVybl9pbl9mdW5jdGlvbiIpCitpZiAoTk9UIFZBTFVFIEVRVUFMICIwIikKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gcmV0dXJuKCkgdXNhZ2UgaW4gZnVuY3Rpb24uIikKK2VuZGlmKCkKKworCisjIyBjaGVjayB1c2FnZSBvZiBpbmNsdWRlX2d1YXJkKCkKK3NldCAoR1VBUkRfVkFMVUUgMCkKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ2hlY2tJbmNsdWRlR3VhcmQuY21ha2UiKQoraWYgKE5PVCBHVUFSRF9WQUxVRSBFUVVBTCAiMSIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIGluY2x1ZGVfZ3VhcmQoKSBvbiBmaXJzdCBpbmNsdWRlLiIpCitlbmRpZigpCisKK3NldCAoR1VBUkRfVkFMVUUgMCkKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ2hlY2tJbmNsdWRlR3VhcmQuY21ha2UiKQoraWYgKE5PVCBHVUFSRF9WQUxVRSBFUVVBTCAiMCIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIGluY2x1ZGVfZ3VhcmQoKSBvbiBzZWNvbmQgaW5jbHVkZS4iKQorZW5kaWYoKQorCisKKyMjIGNoZWNrIHVzYWdlIG9mIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoKSBhbmQgcHJvamVjdCgpCithZGRfc3ViZGlyZWN0b3J5IChDaGVja1Byb2plY3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZF9jb21tYW5kX25hbWUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kX2NvbW1hbmRfbmFtZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZF9jb21tYW5kX25hbWUtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitPSyEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kX2NvbW1hbmRfbmFtZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kX2NvbW1hbmRfbmFtZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk3MjMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHBhbmRfY29tbWFuZF9uYW1lLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0IChteV9ldmFsICJFVkFMIikKK2NtYWtlX2xhbmd1YWdlICgke215X2V2YWx9IENPREUgbWVzc2FnZSgiT0shIikpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitPSyEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkMmQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KGNtZCBFVkFMIENPREUgW1ttZXNzYWdlKCJPSyEiKV1dKQorY21ha2VfbGFuZ3VhZ2UoJHtjbWR9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXh0cmFfcGFyYW1ldGVyc19iZXR3ZWVuX2V2YWxfYW5kX2NvZGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4dHJhX3BhcmFtZXRlcnNfYmV0d2Vlbl9ldmFsX2FuZF9jb2RlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXh0cmFfcGFyYW1ldGVyc19iZXR3ZWVuX2V2YWxfYW5kX2NvZGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXh0cmFfcGFyYW1ldGVyc19iZXR3ZWVuX2V2YWxfYW5kX2NvZGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzIwNTRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHRyYV9wYXJhbWV0ZXJzX2JldHdlZW5fZXZhbF9hbmRfY29kZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgZXZhbF9leHRyYV9wYXJhbWV0ZXJzX2JldHdlZW5fZXZhbF9hbmRfY29kZS5jbWFrZToxIFwoY21ha2VfbGFuZ3VhZ2VcKToKKyAgY21ha2VfbGFuZ3VhZ2UgY2FsbGVkIHdpdGggdW5zdXBwb3J0ZWQgYXJndW1lbnRzIGJldHdlZW4gRVZBTCBhbmQgQ09ERQorICBhcmd1bWVudHMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXh0cmFfcGFyYW1ldGVyc19iZXR3ZWVuX2V2YWxfYW5kX2NvZGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4dHJhX3BhcmFtZXRlcnNfYmV0d2Vlbl9ldmFsX2FuZF9jb2RlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDA0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4dHJhX3BhcmFtZXRlcnNfYmV0d2Vlbl9ldmFsX2FuZF9jb2RlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKEVWQUwgQkFEIENPREUgIm1lc3NhZ2UoQkFEIENPREUpIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjODY5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK1dPUktTIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZWRjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2UuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFIG1lc3NhZ2UoV09SS1MhKSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3ItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3ItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3Itc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2YxMWUzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCBldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2U6MTpFVkFMOjIgXChtZXNzYWdlXCk6CisgIGVycm9yIQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlOjEgXChjbWFrZV9sYW5ndWFnZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmUxNTVkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFCisiCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgZXJyb3IhKQorIgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fY29kZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fY29kZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX2NvZGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fY29kZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGJhODgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX2NvZGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGV2YWxfbm9fY29kZS5jbWFrZToxIFwoY21ha2VfbGFuZ3VhZ2VcKToKKyAgY21ha2VfbGFuZ3VhZ2UgY2FsbGVkIHdpdGhvdXQgQ09ERSBhcmd1bWVudApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19jb2RlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19jb2RlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNWJjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX2NvZGUuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoRVZBTCBtZXNzYWdlICJ0b28gbWFueSBwYXJhbWV0ZXJzIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX3BhcmFtZXRlcnMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX3BhcmFtZXRlcnMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTY2ODk4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvciBhdCBldmFsX25vX3BhcmFtZXRlcnMuY21ha2U6MSBcKGNtYWtlX2xhbmd1YWdlXCk6CisgIGNtYWtlX2xhbmd1YWdlIGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX3BhcmFtZXRlcnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX3BhcmFtZXRlcnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhZTgwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fcGFyYW1ldGVycy5jbWFrZQpAQCAtMCwwICsxIEBACitjbWFrZV9sYW5ndWFnZShFVkFMKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF92YXJpYWJsZV9vdXRzaWRlX21lc3NhZ2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjODY5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorV09SS1MhCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX3ZhcmlhYmxlX291dHNpZGVfbWVzc2FnZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjA0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX3ZhcmlhYmxlX291dHNpZGVfbWVzc2FnZS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2NtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAic2V0KHBocmFzZSBcIldPUktTIVwiKSIpCittZXNzYWdlKCR7cGhyYXNlfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ub19wYXJhbWV0ZXJzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2Uvbm9fcGFyYW1ldGVycy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0YmJlMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IG5vX3BhcmFtZXRlcnMuY21ha2U6MSBcKGNtYWtlX2xhbmd1YWdlXCk6CisgIGNtYWtlX2xhbmd1YWdlIGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ub19wYXJhbWV0ZXJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2Uvbm9fcGFyYW1ldGVycy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzUzZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2Uvbm9fcGFyYW1ldGVycy5jbWFrZQpAQCAtMCwwICsxIEBACitjbWFrZV9sYW5ndWFnZShDQUxMKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL3Vua25vd25fbWV0YV9vcGVyYXRpb24tcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS91bmtub3duX21ldGFfb3BlcmF0aW9uLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL3Vua25vd25fbWV0YV9vcGVyYXRpb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL3Vua25vd25fbWV0YV9vcGVyYXRpb24tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTFkNGZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvdW5rbm93bl9tZXRhX29wZXJhdGlvbi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorQ01ha2UgRXJyb3IgYXQgdW5rbm93bl9tZXRhX29wZXJhdGlvbi5jbWFrZToxIFwoY21ha2VfbGFuZ3VhZ2VcKToKKyAgY21ha2VfbGFuZ3VhZ2UgY2FsbGVkIHdpdGggdW5rbm93biBtZXRhLW9wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvdW5rbm93bl9tZXRhX29wZXJhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL3Vua25vd25fbWV0YV9vcGVyYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5ZjM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL3Vua25vd25fbWV0YV9vcGVyYXRpb24uY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoVU5LTk9XTikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQmVmb3JlMjgxMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9CZWZvcmUyODEyLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0MGRjYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQmVmb3JlMjgxMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjYgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IEJlZm9yZTI4MTIuY21ha2U6MSBcKGNtYWtlX21pbmltdW1fcmVxdWlyZWRcKToKKyAgQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gb2YKKyAgQ01ha2UuCisKKyAgVXBkYXRlIHRoZSBWRVJTSU9OIGFyZ3VtZW50IDxtaW4+IHZhbHVlIG9yIHVzZSBhIC4uLjxtYXg+IHN1ZmZpeCB0byB0ZWxsCisgIENNYWtlIHRoYXQgdGhlIHByb2plY3QgZG9lcyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCisrCitDTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IEJlZm9yZTI4MTIuY21ha2U6MiBcKGNtYWtlX3BvbGljeVwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKKysKK0NNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQmVmb3JlMjgxMi5jbWFrZTo2IFwoY21ha2VfcG9saWN5XCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQmVmb3JlMjgxMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQmVmb3JlMjgxMi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjBlMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9CZWZvcmUyODEyLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMSkKK2NtYWtlX3BvbGljeShWRVJTSU9OIDIuNikKK2NtYWtlX3BvbGljeShQVVNIKQorY21ha2VfcG9saWN5KFZFUlNJT04gMi42KSAjIHNpbXVsYXRlIHByZS0zLjE4IGluc3RhbGwoRVhQT1JUKS1nZW5lcmF0ZWQgY2FsbAorY21ha2VfcG9saWN5KFBPUCkKK2NtYWtlX3BvbGljeShWRVJTSU9OIDIuOC4xMSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0NNYWtlTGlzdHMudHh0CmluZGV4IGU4ZGI2YjAuLjY2NzU2MWUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjgpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCi1pbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UgTk9fUE9MSUNZX1NDT1BFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9Db21wYXRCZWZvcmUyNC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9Db21wYXRCZWZvcmUyNC1zdGRlcnIudHh0CmluZGV4IGE4NzQ0NjYuLjgxZDI2ZDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQ29tcGF0QmVmb3JlMjQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0NvbXBhdEJlZm9yZTI0LXN0ZGVyci50eHQKQEAgLTEsMyArMSwxMiBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ29tcGF0QmVmb3JlMjQuY21ha2U6MSBcKGNtYWtlX21pbmltdW1fcmVxdWlyZWRcKToKKyAgQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gb2YKKyAgQ01ha2UuCisKKyAgVXBkYXRlIHRoZSBWRVJTSU9OIGFyZ3VtZW50IDxtaW4+IHZhbHVlIG9yIHVzZSBhIC4uLjxtYXg+IHN1ZmZpeCB0byB0ZWxsCisgIENNYWtlIHRoYXQgdGhlIHByb2plY3QgZG9lcyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCisrCiBDTWFrZSBFcnJvciBpbiBDTWFrZUxpc3RzLnR4dDoKICAgWW91IGhhdmUgc2V0IENNQUtFX0JBQ0tXQVJEU19DT01QQVRJQklMSVRZIHRvIGEgQ01ha2UgdmVyc2lvbiBsZXNzIHRoYW4KICAgMi40LiAgVGhpcyB2ZXJzaW9uIG9mIENNYWtlIG9ubHkgc3VwcG9ydHMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAxMDMwMjExLi4zYTk1OWJiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNCw2ICs0LDcgQEAKIHJ1bl9jbWFrZShDb21wYXRCZWZvcmUyNCkKIHJ1bl9jbWFrZShGdXR1cmUpCiBydW5fY21ha2UoUG9saWN5QmVmb3JlMjQpCitydW5fY21ha2UoQmVmb3JlMjgxMikKIHJ1bl9jbWFrZShSYW5nZSkKIHJ1bl9jbWFrZShSYW5nZUJhZCkKIHJ1bl9jbWFrZShVbmtub3duKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvTm9Tb3VyY2VQZXJtaXNzaW9ucy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL05vU291cmNlUGVybWlzc2lvbnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZDEzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL05vU291cmNlUGVybWlzc2lvbnMuY21ha2UKQEAgLTAsMCArMSwxMCBAQAorY29uZmlndXJlX2ZpbGUoTm9Tb3VyY2VQZXJtaXNzaW9ucy5zaCBOb1NvdXJjZVBlcm1pc3Npb25zLnNoLm91dAorICAgICAgICAgICAgICAgTk9fU09VUkNFX1BFUk1JU1NJT05TKQorCitpZiAoVU5JWCkKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L05vU291cmNlUGVybWlzc2lvbnMuc2gub3V0CisgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0KQorICBpZiAocmVzdWx0IEVRVUFMICIwIikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3BpZWQgZmlsZSBoYXMgZXhlY3V0YWJsZSBwZXJtaXNzaW9ucyIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL05vU291cmNlUGVybWlzc2lvbnMuc2ggYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9Ob1NvdXJjZVBlcm1pc3Npb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhYThmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9Ob1NvdXJjZVBlcm1pc3Npb25zLnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKKyNUZXN0aW5nIE5PX1NPVVJDRV9QRVJNSVNTSU9OUyBvcHRpb24gb2YgY29uZmlndXJlX2ZpbGUuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS5jbWFrZQppbmRleCA4OTBjYzFmLi45ODM4N2QwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1JlcnVuQ01ha2UuY21ha2UKQEAgLTEsOCArMSw0IEBACiBtZXNzYWdlKCJSdW5uaW5nIENNYWtlIG9uIFJlcnVuQ01ha2UiKSAjIHdyaXRlIHRvIHN0ZGVyciBpZiBjbWFrZSByZXJ1bnMKLWNvbmZpZ3VyZV9maWxlKAotICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVJbnB1dC50eHQuaW4iCi0gICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ29uZmlndXJlRmlsZU91dHB1dC50eHQiCi0gIEBPTkxZCi0gICkKK2FkZF9zdWJkaXJlY3RvcnkoUmVydW5DTWFrZSkKICMgbWFrZSBzdXJlIENNYWtlQ2FjaGUudHh0IGlzIG5ld2VyIHRoYW4gQ29uZmlndXJlRmlsZU91dHB1dC50eHQKIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgc2xlZXAgMSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1JlcnVuQ01ha2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjgxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNSBAQAorY29uZmlndXJlX2ZpbGUoCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ29uZmlndXJlRmlsZUlucHV0LnR4dC5pbiIKKyAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9Db25maWd1cmVGaWxlT3V0cHV0LnR4dCIKKyAgQE9OTFkKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGRlMTQ0NjguLjcxNjk0ZmIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTE1LDYgKzE1LDcgQEAKIHJ1bl9jbWFrZShOZXdMaW5lU3R5bGUtV3JvbmdBcmcpCiBydW5fY21ha2UoTmV3TGluZVN0eWxlLVZhbGlkQXJnKQogcnVuX2NtYWtlKE5ld0xpbmVTdHlsZS1DT1BZT05MWSkKK3J1bl9jbWFrZShOb1NvdXJjZVBlcm1pc3Npb25zKQogCiBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiTWFrZSIpCiAgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCkBAIC0yMiw3ICsyMyw3IEBACiAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCiAgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCiAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCi0gIHNldChpbl9jb25mICAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVJbnB1dC50eHQuaW4iKQorICBzZXQoaW5fY29uZiAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZXJ1bkNNYWtlL0NvbmZpZ3VyZUZpbGVJbnB1dC50eHQuaW4iKQogICBmaWxlKFdSSVRFICIke2luX2NvbmZ9IiAiMSIpCiAKICAgbWVzc2FnZShTVEFUVVMgIlJlcnVuQ01ha2U6IGZpcnN0IGNvbmZpZ3VyYXRpb24uLi4iKQpAQCAtNDIsNyArNDMsNyBAQAogICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKIAogICBtZXNzYWdlKFNUQVRVUyAiUmVydW5DTWFrZTogcmVtb3ZlIGNvbmZpZ3VyZV9maWxlIG91dHB1dC4uLiIpCi0gIGZpbGUoUkVNT1ZFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ29uZmlndXJlRmlsZU91dHB1dC50eHQiKQorICBmaWxlKFJFTU9WRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L1JlcnVuQ01ha2UvQ29uZmlndXJlRmlsZU91dHB1dC50eHQiKQogICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLXJlcnVuICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQogICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svQ01ha2VMaXN0cy50eHQuaW4gYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9DTWFrZUxpc3RzLnR4dC5pbgppbmRleCAzYjhlZGY0Li42OGEwZmNiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9DTWFrZUxpc3RzLnR4dC5pbgorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9DTWFrZUxpc3RzLnR4dC5pbgpAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguOSkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KENUZXN0VGVzdE1lbWNoZWNrQENBU0VfTkFNRUAgTk9ORSkKIGluY2x1ZGUoQ1Rlc3QpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL0R1bW15Q3VkYU1lbWNoZWNrLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL0R1bW15Q3VkYU1lbWNoZWNrLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGVkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK0RlZmVjdCBjb3VudDogMjAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL0R1bW15Q3VkYU1lbWNoZWNrLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhM2U2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK01lbW9yeSBjaGVja2luZyByZXN1bHRzOgorVW5pbml0aWFsaXplZCBfX2dsb2JhbF9fIG1lbW9yeSByZWFkIC0gMQorVW51c2VkIG1lbW9yeSAtIDEKK0JhcnJpZXIgZXJyb3IgLSAyCitJbnZhbGlkIF9fZ2xvYmFsX18gcmVhZCAtIDEKK2N1ZGFFcnJvckxhdW5jaEZhaWx1cmUgLSAyCitNZW1vcnkgbGVhayAtIDEKK1BvdGVudGlhbCBXQVIgaGF6YXJkIGRldGVjdGVkIC0gNAorUG90ZW50aWFsIFJBVyBoYXphcmQgZGV0ZWN0ZWQgLSA0CitSYWNlIHJlcG9ydGVkIC0gNApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGFiNGM1YWIuLjJiMzE2NWIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTE3NSwzICsxNzUsMTUgQEAKIHVuc2V0KENURVNUX0VYVFJBX0NPREUpCiB1bnNldChDVEVTVF9NRU1DSEVDS19BUkdTKQogdW5zZXQoQ1RFU1RfU1VGRklYX0NPREUpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2V0KENNQUtFTElTVFNfRVhUUkFfQ09ERQorImFkZF90ZXN0KE5BTUUgVGVzdFNhbiBDT01NQU5EIFwiJHtDTUFLRV9DT01NQU5EfVwiCistUCBcIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vdGVzdEN1ZGFNZW1jaGVjay5jbWFrZVwiKQorIikKK3NldChDVEVTVF9TVUZGSVhfQ09ERSAibWVzc2FnZShcIkRlZmVjdCBjb3VudDogXCR7ZGVmZWN0X2NvdW50fVwiKSIpCitzZXQoQ1RFU1RfTUVNQ0hFQ0tfQVJHUyAiREVGRUNUX0NPVU5UIGRlZmVjdF9jb3VudCIpCitydW5fbWNfdGVzdChEdW1teUN1ZGFNZW1jaGVjayAiJHtQU0VVRE9fQ1VEQV9NRU1DSEVDS30iKQordW5zZXQoQ1RFU1RfTUVNQ0hFQ0tfQVJHUykKK3Vuc2V0KENURVNUX1NVRkZJWF9DT0RFKQordW5zZXQoQ1RFU1RfRVhUUkFfQ09ERSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3QuY21ha2UuaW4gYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0LmNtYWtlLmluCmluZGV4IDUwYjRiNmEuLmVlZGYwODAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3QuY21ha2UuaW4KKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdC5jbWFrZS5pbgpAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguOSkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiAKICMgU2V0dGluZ3M6CiBzZXQoQ1RFU1RfU0lURSAgICAgICAgICAgICAgICAgICAgICAgICAgIkBTSVRFQCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0QWRkcmVzc0xlYWtTYW5pdGl6ZXIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0QWRkcmVzc0xlYWtTYW5pdGl6ZXIuY21ha2UKaW5kZXggY2EzNmE3Yy4uNThjOTRkNyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdEFkZHJlc3NMZWFrU2FuaXRpemVyLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RBZGRyZXNzTGVha1Nhbml0aXplci5jbWFrZQpAQCAtMiw3ICsyLDcgQEAKICMgb3B0aW9ucwogCiBtZXNzYWdlKCJBU0FOX09QVElPTlMgPSBbJEVOVntBU0FOX09QVElPTlN9XSIpCi1zdHJpbmcoUkVHRVggUkVQTEFDRSAiLipsb2dfcGF0aD1cJyhbXlwnXSopXCcuKiIgIlxcMSIgTE9HX0ZJTEUgIiRFTlZ7QVNBTl9PUFRJT05TfSIpCitzdHJpbmcoUkVHRVggUkVQTEFDRSAiLipsb2dfcGF0aD0nKFteJ10qKScuKiIgIlxcMSIgTE9HX0ZJTEUgIiRFTlZ7QVNBTl9PUFRJT05TfSIpCiBtZXNzYWdlKCJMT0dfRklMRT1bJHtMT0dfRklMRX1dIikKIAogIyBpZiB3ZSBhcmUgbm90IGFza2VkIHRvIHNpbXVsYXRlIEFkZHJlc3NTYW5pdGl6ZXIgZG9uJ3QgZG8gaXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RBZGRyZXNzU2FuaXRpemVyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdEFkZHJlc3NTYW5pdGl6ZXIuY21ha2UKaW5kZXggMTIxOTY2Ni4uOGYxOGNkMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdEFkZHJlc3NTYW5pdGl6ZXIuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdEFkZHJlc3NTYW5pdGl6ZXIuY21ha2UKQEAgLTIsNyArMiw3IEBACiAjIG9wdGlvbnMKIAogbWVzc2FnZSgiQVNBTl9PUFRJT05TID0gWyRFTlZ7QVNBTl9PUFRJT05TfV0iKQotc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9XCcoW15cJ10qKVwnLioiICJcXDEiIExPR19GSUxFICIkRU5We0FTQU5fT1BUSU9OU30iKQorc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9JyhbXiddKiknLioiICJcXDEiIExPR19GSUxFICIkRU5We0FTQU5fT1BUSU9OU30iKQogbWVzc2FnZSgiTE9HX0ZJTEU9WyR7TE9HX0ZJTEV9XSIpCiAKICMgaWYgd2UgYXJlIG5vdCBhc2tlZCB0byBzaW11bGF0ZSBhZGRyZXNzIHNhbml0aXplciBkb24ndCBkbyBpdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdEN1ZGFNZW1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RDdWRhTWVtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkODIxMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RDdWRhTWVtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyNjQgQEAKKyMgdGhpcyBmaWxlIHNpbXVsYXRlcyBhbiBleGVjdXRpb24gb2YgY3VkYS1tZW1jaGVjaworCitzZXQoTE9HX0ZJTEUgIiRFTlZ7UFNFVURPX0xPR0ZJTEV9IikKK21lc3NhZ2UoIkxPR19GSUxFPVske0xPR19GSUxFfV0iKQorCisjIGNsZWFyIHRoZSBsb2cgZmlsZQorZmlsZShSRU1PVkUgIiR7TE9HX0ZJTEV9IikKKworIyBjcmVhdGUgYW4gZXJyb3Igb2YgZWFjaCB0eXBlIG9mIHNhbml0aXplciB0b29sIGFuZCBmYWlsdXJlCisKKyMgaW5pdGNoZWNrCitmaWxlKEFQUEVORCAiJHtMT0dfRklMRX0iCisiPT09PT09PT09IENVREEtTUVNQ0hFQ0sKKz09PT09PT09PSBVbmluaXRpYWxpemVkIF9fZ2xvYmFsX18gbWVtb3J5IHJlYWQgb2Ygc2l6ZSA0Cis9PT09PT09PT0gICAgIGF0IDB4MDAwMDAwMjAgaW4gdGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBieSB0aHJlYWQgKDAsMCwwKSBpbiBibG9jayAoMCwwLDApCis9PT09PT09PT0gICAgIEFkZHJlc3MgMHgxMzAzZDgwMDAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludAorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgKGN1TGF1bmNoS2VybmVsICsgMHgzNDYpIFsweDI5N2RiNl0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3VuaW5pdC1yZWFkIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vdW5pbml0LXJlYWQgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHg0NjViNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3VuaW5pdC1yZWFkIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgzMTQzXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gVW51c2VkIG1lbW9yeSBpbiBhbGxvY2F0aW9uIDB4MTMwM2Q4MDAwMCBvZiBzaXplIDE2IGJ5dGVzCis9PT09PT09PT0gICAgIE5vdCB3cml0dGVuIGFueSBtZW1vcnkuCis9PT09PT09PT0gICAgIDEwMC4wMCUgb2YgYWxsb2NhdGlvbiB3ZXJlIHVudXNlZC4KKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50Cis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VNZW1BbGxvY192MiArIDB4MWI3KSBbMHgyNmVjOTddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgyYmJkM10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3VuaW5pdC1yZWFkIFsweDcxYWJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgzYzg0Zl0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3VuaW5pdC1yZWFkIFsweDMxMTFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3VuaW5pdC1yZWFkIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBFUlJPUiBTVU1NQVJZOiAyIGVycm9ycworIikKKworCisjIHN5bmNjaGVjaworZmlsZShBUFBFTkQgIiR7TE9HX0ZJTEV9IgorIj09PT09PT09PSBDVURBLU1FTUNIRUNLCis9PT09PT09PT0gQmFycmllciBlcnJvciBkZXRlY3RlZC4gRGl2ZXJnZW50IHRocmVhZChzKSBpbiB3YXJwCis9PT09PT09PT0gICAgIGF0IDB4MDAwMDAwNTggaW4gdGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBieSB0aHJlYWQgKDEsMCwwKSBpbiBibG9jayAoMCwwLDApCis9PT09PT09PT0gICAgIERldmljZSBGcmFtZTp0ZXN0KGludCosIGludCopICh0ZXN0KGludCosIGludCopIDogMHg2MCkKKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGtlcm5lbCBsYXVuY2ggdGltZQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgKGN1TGF1bmNoS2VybmVsICsgMHgzNDYpIFsweDI5N2RiNl0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MTAxZDldCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9zeW5jIFsweDEwMjY3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHg0NjViNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MzM0Ml0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MzE0YV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gQmFycmllciBlcnJvciBkZXRlY3RlZC4gRGl2ZXJnZW50IHRocmVhZChzKSBpbiB3YXJwCis9PT09PT09PT0gICAgIGF0IDB4MDAwMDAwNTggaW4gdGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBieSB0aHJlYWQgKDAsMCwwKSBpbiBibG9jayAoMCwwLDApCis9PT09PT09PT0gICAgIERldmljZSBGcmFtZTp0ZXN0KGludCosIGludCopICh0ZXN0KGludCosIGludCopIDogMHg2MCkKKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGtlcm5lbCBsYXVuY2ggdGltZQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgKGN1TGF1bmNoS2VybmVsICsgMHgzNDYpIFsweDI5N2RiNl0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MTAxZDldCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9zeW5jIFsweDEwMjY3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHg0NjViNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MzM0Ml0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MzE0YV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gRVJST1IgU1VNTUFSWTogMiBlcnJvcnMKKyIpCisKKyMgbWVtY2hlY2sKK2ZpbGUoQVBQRU5EICIke0xPR19GSUxFfSIKKyI9PT09PT09PT0gQ1VEQS1NRU1DSEVDSworPT09PT09PT09IEludmFsaWQgX19nbG9iYWxfXyByZWFkIG9mIHNpemUgNAorPT09PT09PT09ICAgICBhdCAweDAwMDAwMDIwIGluIHRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgYnkgdGhyZWFkICgwLDAsMCkgaW4gYmxvY2sgKDAsMCwwKQorPT09PT09PT09ICAgICBBZGRyZXNzIDB4MDAwMDAwMDAgaXMgb3V0IG9mIGJvdW5kcworPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDEwMjY3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MzE0Ml0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBQcm9ncmFtIGhpdCBjdWRhRXJyb3JMYXVuY2hGYWlsdXJlIChlcnJvciA3MTkpIGR1ZSB0byBcInVuc3BlY2lmaWVkIGxhdW5jaCBmYWlsdXJlXCIgb24gQ1VEQSBBUEkgY2FsbCB0byBjdWRhRGV2aWNlU3luY2hyb25pemUuCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBlcnJvcgorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgWzB4M2FjNWEzXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDJlNTc2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDMxNDddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL2ludmFsaWQtcmVhZCBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gUHJvZ3JhbSBoaXQgY3VkYUVycm9yTGF1bmNoRmFpbHVyZSAoZXJyb3IgNzE5KSBkdWUgdG8gXCJ1bnNwZWNpZmllZCBsYXVuY2ggZmFpbHVyZVwiIG9uIENVREEgQVBJIGNhbGwgdG8gY3VkYUZyZWUuCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBlcnJvcgorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgWzB4M2FjNWEzXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDNjMTA2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDMxNTBdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL2ludmFsaWQtcmVhZCBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gTEVBSyBTVU1NQVJZOiAwIGJ5dGVzIGxlYWtlZCBpbiAwIGFsbG9jYXRpb25zCis9PT09PT09PT0gRVJST1IgU1VNTUFSWTogMyBlcnJvcnMKKyIpCisKKyMgbWVtY2hlY2sgd2l0aCBsZWFrLWNoZWNrIGZ1bGwKK2ZpbGUoQVBQRU5EICIke0xPR19GSUxFfSIKKyI9PT09PT09PT0gQ1VEQS1NRU1DSEVDSworPT09PT09PT09IExlYWtlZCAxMCBieXRlcyBhdCAweDEzMDNkODAwMDAKKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGN1ZGFNYWxsb2MgdGltZQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgKGN1TWVtQWxsb2NfdjIgKyAweDFiNykgWzB4MjZlYzk3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vbGVhayBbMHgyYmFiM10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL2xlYWsgWzB4NzA4Yl0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL2xlYWsgWzB4M2M3MmZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9sZWFrIFsweDMxMTNdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL2xlYWsgWzB4MzE3NF0KKz09PT09PT09PQorPT09PT09PT09IExFQUsgU1VNTUFSWTogMTAgYnl0ZXMgbGVha2VkIGluIDEgYWxsb2NhdGlvbnMKKz09PT09PT09PSBFUlJPUiBTVU1NQVJZOiAxIGVycm9yCisiKQorCisjIHJhY2VjaGVjayB3aXRoIHJhY2VjaGVjay1yZXBvcnQgYWxsCitmaWxlKEFQUEVORCAiJHtMT0dfRklMRX0iCisiPT09PT09PT09IENVREEtTUVNQ0hFQ0sKKz09PT09PT09PSBXQVJOOihXYXJwIExldmVsIFByb2dyYW1taW5nKSBQb3RlbnRpYWwgV0FSIGhhemFyZCBkZXRlY3RlZCBhdCBfX3NoYXJlZF9fIDB4MyBpbiBibG9jayAoMCwgMCwgMCkgOgorPT09PT09PT09ICAgICBSZWFkIFRocmVhZCAoMzEsIDAsIDApIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBXcml0ZSBUaHJlYWQgKDAsIDAsIDApIGF0IDB4MDAwMDAxYTggaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBDdXJyZW50IFZhbHVlIDogMCwgSW5jb21pbmcgVmFsdWUgOiAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDI2N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxNGFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFdBUk46KFdhcnAgTGV2ZWwgUHJvZ3JhbW1pbmcpIFBvdGVudGlhbCBXQVIgaGF6YXJkIGRldGVjdGVkIGF0IF9fc2hhcmVkX18gMHgyIGluIGJsb2NrICgwLCAwLCAwKSA6Cis9PT09PT09PT0gICAgIFJlYWQgVGhyZWFkICgzMSwgMCwgMCkgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIFdyaXRlIFRocmVhZCAoMCwgMCwgMCkgYXQgMHgwMDAwMDFhOCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIEN1cnJlbnQgVmFsdWUgOiAwLCBJbmNvbWluZyBWYWx1ZSA6IDAKKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGtlcm5lbCBsYXVuY2ggdGltZQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgKGN1TGF1bmNoS2VybmVsICsgMHgzNDYpIFsweDI5N2RiNl0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAxZDldCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMjY3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHg0NjViNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzM0Ml0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzE0YV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gV0FSTjooV2FycCBMZXZlbCBQcm9ncmFtbWluZykgUG90ZW50aWFsIFdBUiBoYXphcmQgZGV0ZWN0ZWQgYXQgX19zaGFyZWRfXyAweDEgaW4gYmxvY2sgKDAsIDAsIDApIDoKKz09PT09PT09PSAgICAgUmVhZCBUaHJlYWQgKDMxLCAwLCAwKSBhdCAweDAwMDAwMTcwIGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgV3JpdGUgVGhyZWFkICgwLCAwLCAwKSBhdCAweDAwMDAwMWE4IGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgQ3VycmVudCBWYWx1ZSA6IDAsIEluY29taW5nIFZhbHVlIDogMAorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOihXYXJwIExldmVsIFByb2dyYW1taW5nKSBQb3RlbnRpYWwgV0FSIGhhemFyZCBkZXRlY3RlZCBhdCBfX3NoYXJlZF9fIDB4MCBpbiBibG9jayAoMCwgMCwgMCkgOgorPT09PT09PT09ICAgICBSZWFkIFRocmVhZCAoMzEsIDAsIDApIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBXcml0ZSBUaHJlYWQgKDAsIDAsIDApIGF0IDB4MDAwMDAxYTggaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBDdXJyZW50IFZhbHVlIDogMCwgSW5jb21pbmcgVmFsdWUgOiAxCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDI2N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxNGFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFdBUk46KFdhcnAgTGV2ZWwgUHJvZ3JhbW1pbmcpIFBvdGVudGlhbCBSQVcgaGF6YXJkIGRldGVjdGVkIGF0IF9fc2hhcmVkX18gMHgzIGluIGJsb2NrICgwLCAwLCAwKSA6Cis9PT09PT09PT0gICAgIFdyaXRlIFRocmVhZCAoMzEsIDAsIDApIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBSZWFkIFRocmVhZCAoMCwgMCwgMCkgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIEN1cnJlbnQgVmFsdWUgOiAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDI2N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxNGFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFdBUk46KFdhcnAgTGV2ZWwgUHJvZ3JhbW1pbmcpIFBvdGVudGlhbCBSQVcgaGF6YXJkIGRldGVjdGVkIGF0IF9fc2hhcmVkX18gMHgyIGluIGJsb2NrICgwLCAwLCAwKSA6Cis9PT09PT09PT0gICAgIFdyaXRlIFRocmVhZCAoMzEsIDAsIDApIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBSZWFkIFRocmVhZCAoMCwgMCwgMCkgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIEN1cnJlbnQgVmFsdWUgOiAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDI2N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxNGFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFdBUk46KFdhcnAgTGV2ZWwgUHJvZ3JhbW1pbmcpIFBvdGVudGlhbCBSQVcgaGF6YXJkIGRldGVjdGVkIGF0IF9fc2hhcmVkX18gMHgxIGluIGJsb2NrICgwLCAwLCAwKSA6Cis9PT09PT09PT0gICAgIFdyaXRlIFRocmVhZCAoMzEsIDAsIDApIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBSZWFkIFRocmVhZCAoMCwgMCwgMCkgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIEN1cnJlbnQgVmFsdWUgOiAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDI2N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxNGFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFdBUk46KFdhcnAgTGV2ZWwgUHJvZ3JhbW1pbmcpIFBvdGVudGlhbCBSQVcgaGF6YXJkIGRldGVjdGVkIGF0IF9fc2hhcmVkX18gMHgwIGluIGJsb2NrICgwLCAwLCAwKSA6Cis9PT09PT09PT0gICAgIFdyaXRlIFRocmVhZCAoMzEsIDAsIDApIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBSZWFkIFRocmVhZCAoMCwgMCwgMCkgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIEN1cnJlbnQgVmFsdWUgOiAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDI2N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxNGFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFdBUk46IFJhY2UgcmVwb3J0ZWQgYmV0d2VlbiBSZWFkIGFjY2VzcyBhdCAweDAwMDAwMTcwIGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgYW5kIFdyaXRlIGFjY2VzcyBhdCAweDAwMDAwMTQ4IGluIC4vcmFjZS5jdTozOnRlc3QoaW50KiwgaW50KikgWzQgaGF6YXJkc10KKz09PT09PT09PSAgICAgYW5kIFdyaXRlIGFjY2VzcyBhdCAweDAwMDAwMWE4IGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikgWzQgaGF6YXJkc10KKz09PT09PT09PQorPT09PT09PT09IFdBUk46IFJhY2UgcmVwb3J0ZWQgYmV0d2VlbiBXcml0ZSBhY2Nlc3MgYXQgMHgwMDAwMDE0OCBpbiAuL3JhY2UuY3U6Mzp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIGFuZCBXcml0ZSBhY2Nlc3MgYXQgMHgwMDAwMDE0OCBpbiAuL3JhY2UuY3U6Mzp0ZXN0KGludCosIGludCopIFsxMjQgaGF6YXJkc10KKz09PT09PT09PSAgICAgYW5kIFJlYWQgYWNjZXNzIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKSBbNCBoYXphcmRzXQorPT09PT09PT09Cis9PT09PT09PT0gV0FSTjogUmFjZSByZXBvcnRlZCBiZXR3ZWVuIFdyaXRlIGFjY2VzcyBhdCAweDAwMDAwMWE4IGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgYW5kIFdyaXRlIGFjY2VzcyBhdCAweDAwMDAwMWE4IGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikgWzEyNCBoYXphcmRzXQorPT09PT09PT09ICAgICBhbmQgUmVhZCBhY2Nlc3MgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopIFs0IGhhemFyZHNdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOiBSYWNlIHJlcG9ydGVkIGJldHdlZW4gV3JpdGUgYWNjZXNzIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBhbmQgV3JpdGUgYWNjZXNzIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKSBbMTI0IGhhemFyZHNdCis9PT09PT09PT0gICAgIGFuZCBSZWFkIGFjY2VzcyBhdCAweDAwMDAwMTcwIGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikgWzQgaGF6YXJkc10KKz09PT09PT09PQorPT09PT09PT09IFJBQ0VDSEVDSyBTVU1NQVJZOiAxMiBoYXphcmRzIGRpc3BsYXllZCAoMCBlcnJvcnMsIDEyIHdhcm5pbmdzKQorIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RMZWFrU2FuaXRpemVyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdExlYWtTYW5pdGl6ZXIuY21ha2UKaW5kZXggNmQ1MWY4My4uNDk5MDc5MiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdExlYWtTYW5pdGl6ZXIuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdExlYWtTYW5pdGl6ZXIuY21ha2UKQEAgLTIsNyArMiw3IEBACiAjIG9wdGlvbnMKIAogbWVzc2FnZSgiTFNBTl9PUFRJT05TID0gWyRFTlZ7TFNBTl9PUFRJT05TfV0iKQotc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9XCcoW15cJ10qKVwnLioiICJcXDEiIExPR19GSUxFICIkRU5We0xTQU5fT1BUSU9OU30iKQorc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9JyhbXiddKiknLioiICJcXDEiIExPR19GSUxFICIkRU5We0xTQU5fT1BUSU9OU30iKQogbWVzc2FnZSgiTE9HX0ZJTEU9WyR7TE9HX0ZJTEV9XSIpCiAKICMgaWYgd2UgYXJlIG5vdCBhc2tlZCB0byBzaW11bGF0ZSBMZWFrU2FuaXRpemVyIGRvbid0IGRvIGl0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0TWVtb3J5U2FuaXRpemVyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdE1lbW9yeVNhbml0aXplci5jbWFrZQppbmRleCAzYjNhYzIyLi40YTZhZGIxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0TWVtb3J5U2FuaXRpemVyLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RNZW1vcnlTYW5pdGl6ZXIuY21ha2UKQEAgLTIsNyArMiw3IEBACiAjIG9wdGlvbnMKIAogbWVzc2FnZSgiTVNBTl9PUFRJT05TID0gWyRFTlZ7TVNBTl9PUFRJT05TfV0iKQotc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9XCcoW15cJ10qKVwnLioiICJcXDEiIExPR19GSUxFICIkRU5We01TQU5fT1BUSU9OU30iKQorc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9JyhbXiddKiknLioiICJcXDEiIExPR19GSUxFICIkRU5We01TQU5fT1BUSU9OU30iKQogbWVzc2FnZSgiTE9HX0ZJTEU9WyR7TE9HX0ZJTEV9XSIpCiAKICMgaWYgd2UgYXJlIG5vdCBhc2tlZCB0byBzaW11bGF0ZSBhZGRyZXNzIHNhbml0aXplciBkb24ndCBkbyBpdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdFRocmVhZFNhbml0aXplci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RUaHJlYWRTYW5pdGl6ZXIuY21ha2UKaW5kZXggZTdhNWM5Zi4uOTYyNTFjMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdFRocmVhZFNhbml0aXplci5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0VGhyZWFkU2FuaXRpemVyLmNtYWtlCkBAIC0yLDcgKzIsNyBAQAogIyBvcHRpb25zCiAKIG1lc3NhZ2UoIlRTQU5fT1BUSU9OUyA9IFskRU5We1RTQU5fT1BUSU9OU31dIikKLXN0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPVwnKFteXCddKilcJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntUU0FOX09QVElPTlN9IikKK3N0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPScoW14nXSopJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntUU0FOX09QVElPTlN9IikKIG1lc3NhZ2UoIkxPR19GSUxFPVske0xPR19GSUxFfV0iKQogCiBzZXQoZXJyb3JfdHlwZXMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RVbmRlZmluZWRCZWhhdmlvclNhbml0aXplci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RVbmRlZmluZWRCZWhhdmlvclNhbml0aXplci5jbWFrZQppbmRleCBiYTYxMjJkLi43MTYwMjgwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0VW5kZWZpbmVkQmVoYXZpb3JTYW5pdGl6ZXIuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdFVuZGVmaW5lZEJlaGF2aW9yU2FuaXRpemVyLmNtYWtlCkBAIC0yLDcgKzIsNyBAQAogIyBVbmRlZmluZWRCZWhhdmlvclNhbml0aXplciBvcHRpb25zCiAKIG1lc3NhZ2UoIlVCU0FOX09QVElPTlMgPSBbJEVOVntVQlNBTl9PUFRJT05TfV0iKQotc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9XCcoW15cJ10qKVwnLioiICJcXDEiIExPR19GSUxFICIkRU5We1VCU0FOX09QVElPTlN9IikKK3N0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPScoW14nXSopJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntVQlNBTl9PUFRJT05TfSIpCiBtZXNzYWdlKCJMT0dfRklMRT1bJHtMT0dfRklMRX1dIikKIAogIyBpZiB3ZSBhcmUgbm90IGFza2VkIHRvIHNpbXVsYXRlIGFkZHJlc3Mgc2FuaXRpemVyIGRvbid0IGRvIGl0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC9Ob1N0YXJ0VGltZU5pZ2h0bHktcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L05vU3RhcnRUaW1lTmlnaHRseS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2UyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC9Ob1N0YXJ0VGltZU5pZ2h0bHktcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvTm9TdGFydFRpbWVOaWdodGx5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC9Ob1N0YXJ0VGltZU5pZ2h0bHktc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTc1NmViCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvTm9TdGFydFRpbWVOaWdodGx5LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteV0FSTklORzogTm8gbmlnaHRseSBzdGFydCB0aW1lIGZvdW5kIHBsZWFzZSBzZXQgaW4gQ1Rlc3RDb25maWdcLmNtYWtlIG9yIERhcnRDb25maWdcLmNtYWtlCitDTWFrZSBFcnJvciBhdCBbXgorXSovVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvTm9TdGFydFRpbWVOaWdodGx5L3Rlc3RcLmNtYWtlOlswLTldKyBcKGN0ZXN0X3N0YXJ0XCk6CisgIGN0ZXN0X3N0YXJ0IHVua25vd24gZXJyb3JcLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBkYTg1YjM5Li5mMTFmMWVjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC00OCw2ICs0OCw4IEBACiAgICAgICAgICAgICAgICAgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Ub29NYW55QXJncy1idWlsZAogICAgICAgICAgICAgICAgICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vVG9vTWFueUFyZ3MtYnVpbGQKICAgICAgICAgICAgICAgICAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1Rvb01hbnlBcmdzLWJ1aWxkKQorcnVuX2N0ZXN0X3N0YXJ0KE5vU3RhcnRUaW1lRXhwZXJpbWVudGFsIEV4cGVyaW1lbnRhbCkKK3J1bl9jdGVzdF9zdGFydChOb1N0YXJ0VGltZU5pZ2h0bHkgTmlnaHRseSkKIAogZnVuY3Rpb24ocnVuX0NvbmZpZ0luQnVpbGQpCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Db25maWdJbkJ1aWxkLWJ1aWxkKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvdGVzdC5jbWFrZS5pbiBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L3Rlc3QuY21ha2UuaW4KaW5kZXggOGNkM2NmZi4uNDA2M2VjZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvdGVzdC5jbWFrZS5pbgorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC90ZXN0LmNtYWtlLmluCkBAIC04LDcgKzgsOSBAQAogc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STSAgICAgICJAUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNQCIpCiBzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQgICAgICAgIkBSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVEAiKQogc2V0KENURVNUX0JVSUxEX0NPTkZJR1VSQVRJT04gICAgICAgICAgICIkRU5We0NNQUtFX0NPTkZJR19UWVBFfSIpCi1zZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICAgICAgICAgICAgIjAxOjAwOjAwIFVUQyIpCitpZihOT1QgIkBDQVNFX05BTUVAIiBNQVRDSEVTICJeTm9TdGFydFRpbWUiKQorICBzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICAgICAgICAgICAgIjAxOjAwOjAwIFVUQyIpCitlbmRpZigpCiAKIGZ1bmN0aW9uKHNldHVwX3Rlc3RzKQogICBjdGVzdF9zdGFydCgke2N0ZXN0X3N0YXJ0X2FyZ3N9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBkMGE2ZTVmLi5iODIzMzVmIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTIxLDMgKzEyMSwyNiBAQAogICBdXSkKIHJ1bl9UZXN0UmVwZWF0KE5vdFJ1biBSRVRVUk5fVkFMVUU6MSBSRVBFQVQgVU5USUxfUEFTUzozKQogdW5zZXQoQ0FTRV9DTUFLRUxJU1RTX1NVRkZJWF9DT0RFKQorCisjIHRlc3QgLS1zdG9wLW9uLWZhaWx1cmUKK2Z1bmN0aW9uKHJ1bl9zdG9wX29uX2ZhaWx1cmUpCisgIHNldChDQVNFX0NURVNUX1RFU1RfQVJHUyBFWENMVURFIFJ1bkNNYWtlVmVyc2lvbikKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19TVUZGSVhfQ09ERSBbWworYWRkX3Rlc3QoTkFNRSBTdG9wcGluZ1Rlc3QgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGZhbHNlKQorYWRkX3Rlc3QoTkFNRSBOb3RSdW5UZXN0IENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSB0cnVlKQorICBdXSkKKworICBydW5fY3Rlc3RfdGVzdChzdG9wLW9uLWZhaWx1cmUgU1RPUF9PTl9GQUlMVVJFKQorZW5kZnVuY3Rpb24oKQorcnVuX3N0b3Bfb25fZmFpbHVyZSgpCisKKyMgTWFrZSBzdXJlIGVudmlyb25tZW50IGdldHMgbG9nZ2VkCitmdW5jdGlvbihydW5fZW52aXJvbm1lbnQpCisgIHNldChFTlZ7QkFEX0VOVklST05NRU5UX1ZBUklBQkxFfSAiQmFkIGVudmlyb25tZW50IHZhcmlhYmxlIikKKyAgc2V0KENBU0VfQ01BS0VMSVNUU19TVUZGSVhfQ09ERSBbWworc2V0X3Byb3BlcnR5KFRFU1QgUnVuQ01ha2VWZXJzaW9uIFBST1BFUlRZIEVOVklST05NRU5UICJFTlYxPWVudjE7RU5WMj1lbnYyIikKKyAgXV0pCisKKyAgcnVuX2N0ZXN0KFRlc3RFbnZpcm9ubWVudCkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9lbnZpcm9ubWVudCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RFbnZpcm9ubWVudC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdEVudmlyb25tZW50LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzk3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RFbnZpcm9ubWVudC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDEwIEBACitmaWxlKFJFQUQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9UZXN0aW5nL1RBRyIgX3RhZykKK3N0cmluZyhSRUdFWCBSRVBMQUNFICJeKFteXG5dKilcbi4qJCIgIlxcMSIgX2RhdGUgIiR7X3RhZ30iKQorZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vVGVzdGluZy8ke19kYXRlfS9UZXN0LnhtbCIgX3Rlc3RfY29udGVudHMpCisKK2lmKE5PVCBfdGVzdF9jb250ZW50cyBNQVRDSEVTICI8VmFsdWU+RU5WMT1lbnYxXG5FTlYyPWVudjJcbiNDVEVTVF9SRVNPVVJDRV9HUk9VUF9DT1VOVD08L1ZhbHVlPiIpCisgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkNvdWxkIG5vdCBmaW5kIGV4cGVjdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBUZXN0LnhtbCIpCitlbmRpZigpCitpZihfdGVzdF9jb250ZW50cyBNQVRDSEVTICJCQURfRU5WSVJPTk1FTlRfVkFSSUFCTEUiKQorICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCBCQURfRU5WSVJPTk1FTlRfVkFSSUFCTEUgaW4gVGVzdC54bWwiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9zdG9wLW9uLWZhaWx1cmUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3Qvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0YmNlMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3Qvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L3N0b3Atb24tZmFpbHVyZS1idWlsZAorICAgIFN0YXJ0IDE6IFJ1bkNNYWtlVmVyc2lvbgorMS8zIFRlc3QgIzE6IFJ1bkNNYWtlVmVyc2lvbiAuLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgICAgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgMjogU3RvcHBpbmdUZXN0CisyLzMgVGVzdCAjMjogU3RvcHBpbmdUZXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKkZhaWxlZCAgICArWzAtOS5dKyBzZWMKKysKKzUwJSB0ZXN0cyBwYXNzZWQsIDEgdGVzdHMgZmFpbGVkIG91dCBvZiAyCisrCitUb3RhbCBUZXN0IHRpbWUgXChyZWFsXCkgPSArWzAtOS5dKyBzZWMKKysKK1RoZSBmb2xsb3dpbmcgdGVzdHMgRkFJTEVEOgorWwkgXSsyIC0gU3RvcHBpbmdUZXN0IFwoRmFpbGVkXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNzU1MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDMgQEAKK0NNYWtlIEVycm9yIGF0IFteCitdKkVjaG9WYXJpYWJsZU91dHB1dC5jbWFrZToyIFwobWVzc2FnZVwpOgorICBUZXh0IHRvIHN0ZGVycgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODY4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLS0gVGV4dCB0byBzdGRvdXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OTk5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKK2V4ZWN1dGVfcHJvY2VzcygKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRWNob1ZhcmlhYmxlT3V0cHV0LmNtYWtlCisgIE9VVFBVVF9WQVJJQUJMRSBzdGRvdXQKKyAgRVJST1JfUVVJRVQKKyAgRUNIT19PVVRQVVRfVkFSSUFCTEUKKykKKworZmlsZShSRUFEICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRWNob1ZhcmlhYmxlLXN0ZG91dC50eHQgZXhwZWN0ZWRfc3Rkb3V0KQoraWYgKE5PVCBzdGRvdXQgTUFUQ0hFUyAiJHtleHBlY3RlZF9zdGRvdXR9IikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAic3Rkb3V0IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQgc3Rkb3V0IikKK2VuZGlmKCkKKworZXhlY3V0ZV9wcm9jZXNzKAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9FY2hvVmFyaWFibGVPdXRwdXQuY21ha2UKKyAgRVJST1JfVkFSSUFCTEUgc3RkZXJyCisgIE9VVFBVVF9RVUlFVAorICBFQ0hPX0VSUk9SX1ZBUklBQkxFCispCisKK2ZpbGUoUkVBRCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0VjaG9WYXJpYWJsZS1zdGRlcnIudHh0IGV4cGVjdGVkX3N0ZGVycikKK2lmIChOT1Qgc3RkZXJyIE1BVENIRVMgIiR7ZXhwZWN0ZWRfc3RkZXJyfSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgInN0ZGVyciBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkIHN0ZGVyciIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlT3V0cHV0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZU91dHB1dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjM2NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZU91dHB1dC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK21lc3NhZ2UoU1RBVFVTICJUZXh0IHRvIHN0ZG91dCIpCittZXNzYWdlKEZBVEFMX0VSUk9SICJUZXh0IHRvIHN0ZGVyciIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBiMjAzYWFiLi44OWFkNmIyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTI0LDMgKzI0LDUgQEAKIHJ1bl9jbWFrZV9jb21tYW5kKEVjaG9Db21tYW5kMyAke0NNQUtFX0NPTU1BTkR9CiAgIC1EQ0hFQ0tfRVJST1JfT1VUUFVUX0xPQ0FUSU9OPVRSVUUgLVAKICAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9FY2hvQ29tbWFuZC5jbWFrZSkKKworcnVuX2NtYWtlX2NvbW1hbmQoRWNob1ZhcmlhYmxlICR7Q01BS0VfQ09NTUFORH0gLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9FY2hvVmFyaWFibGUuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGl0X2NvZGUuYyBiL1Rlc3RzL1J1bkNNYWtlL2V4aXRfY29kZS5jCmluZGV4IDNlYmEwMTkuLjlmYThlY2EgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2V4aXRfY29kZS5jCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4aXRfY29kZS5jCkBAIC0yMSw3ICsyMSw4IEBACiAgIH0KICAgaWYgKHN0cmNtcChzdHIsIHN1YnN0cmluZ19zdWNjZXNzKSA9PSAwKSB7CiAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLSAgfSBlbHNlIGlmIChzdHJjbXAoc3RyLCBzdWJzdHJpbmdfZmFpbHVyZSkgPT0gMCkgeworICB9CisgIGlmIChzdHJjbXAoc3RyLCBzdWJzdHJpbmdfZmFpbHVyZSkgPT0gMCkgewogICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgIH0KICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZmluZCBzdHJpbmcgJyVzJyBpbiAnJXMnXG4iLCBzdWJzdHJpbmdfc3VjY2VzcywKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L0RlcGVuZE9uRG91YmxlRXhwb3J0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvRGVwZW5kT25Eb3VibGVFeHBvcnQtc3RkZXJyLnR4dAppbmRleCBiNzhjN2U0Li5lOGY4YTA5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvRGVwZW5kT25Eb3VibGVFeHBvcnQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvRGVwZW5kT25Eb3VibGVFeHBvcnQtc3RkZXJyLnR4dApAQCAtMyw4ICszLDcgQEAKICAgdGhhdCBpcyBub3QgaW4gdGhpcyBleHBvcnQgc2V0LCBidXQgaW4gbXVsdGlwbGUgb3RoZXIgZXhwb3J0IHNldHM6CiAgIC4qL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9EZXBlbmRPbkRvdWJsZUV4cG9ydC1idWlsZC9leHBvcnRzZXQuY21ha2UsCiAgIC4qL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9EZXBlbmRPbkRvdWJsZUV4cG9ydC1idWlsZC9tYW51YWwuY21ha2UuCi0KLQorKwogICBBbiBleHBvcnRlZCB0YXJnZXQgY2Fubm90IGRlcGVuZCB1cG9uIGFub3RoZXIgdGFyZ2V0IHdoaWNoIGlzIGV4cG9ydGVkCiAgIG11bHRpcGxlIHRpbWVzLiAgQ29uc2lkZXIgY29uc29saWRhdGluZyB0aGUgZXhwb3J0cyBvZiB0aGUgImRvdWJsZWV4cG9ydGVkIgogICB0YXJnZXQgdG8gYSBzaW5nbGUgZXhwb3J0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtTkVXLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGFiN2IxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0NNYWtlIEVycm9yIGF0IFJlcGVhdC5jbWFrZTpbMC05XSsgXChleHBvcnRcKToKKyAgZXhwb3J0IGNvbW1hbmQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlCisKKyAgICBmb28uY21ha2UKKworICBEaWQgeW91IG1pc3MgJ0FQUEVORCcga2V5d29yZFw/CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBSZXBlYXQtQ01QMDEwMy1ORVcuY21ha2U6WzAtOV0rIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQorCisKK0NNYWtlIEVycm9yIGF0IFJlcGVhdC9DTWFrZUxpc3RzLnR4dDpbMC05XSsgXChleHBvcnRcKToKKyAgZXhwb3J0IGNvbW1hbmQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlCisKKyAgICAuKy9mb28uY21ha2UKKworICBEaWQgeW91IG1pc3MgJ0FQUEVORCcga2V5d29yZFw/CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtTkVXLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTM4MWRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwMyBORVcpCitpbmNsdWRlKFJlcGVhdC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1PTEQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTM0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtT0xELmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTAzIE9MRCkKK2luY2x1ZGUoUmVwZWF0LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlODQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyNiBAQAorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFJlcGVhdC5jbWFrZTpbMC05XSsgXChleHBvcnRcKToKKyAgUG9saWN5IENNUDAxMDMgaXMgbm90IHNldDogTXVsdGlwbGUgZXhwb3J0XChcKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORAorICBpcyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTAzIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UKKyAgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgZXhwb3J0XChcKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZQorCisgICAgZm9vLmNtYWtlCisKKyAgRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmRcPworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZTpbMC05XSsgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KKworQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFJlcGVhdC9DTWFrZUxpc3RzLnR4dDpbMC05XSsgXChleHBvcnRcKToKKyAgUG9saWN5IENNUDAxMDMgaXMgbm90IHNldDogTXVsdGlwbGUgZXhwb3J0XChcKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORAorICBpcyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTAzIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UKKyAgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgZXhwb3J0XChcKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZQorCisgICAgLisvZm9vLmNtYWtlCisKKyAgRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmRcPworVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjMwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFJlcGVhdC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGRmMzVkOTUuLjFjNzQ3NjIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMiw3ICsyLDkgQEAKIAogcnVuX2NtYWtlKEN1c3RvbVRhcmdldCkKIHJ1bl9jbWFrZShFbXB0eSkKLXJ1bl9jbWFrZShSZXBlYXQpCitydW5fY21ha2UoUmVwZWF0LUNNUDAxMDMtV0FSTikKK3J1bl9jbWFrZShSZXBlYXQtQ01QMDEwMy1PTEQpCitydW5fY21ha2UoUmVwZWF0LUNNUDAxMDMtTkVXKQogcnVuX2NtYWtlKFRhcmdldE5vdEZvdW5kKQogcnVuX2NtYWtlKEFwcGVuZEV4cG9ydCkKIHJ1bl9jbWFrZShPbGRJZmFjZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjNkNTdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsNTUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQoraW5jbHVkZShSdW5DTWFrZSkKKworIyBGdW5jdGlvbiB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHByb2plY3QuCitmdW5jdGlvbihydW5faW5zdGFsbF90ZXN0IGNhc2UpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke2Nhc2V9LWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBydW5fY21ha2UoJHtjYXNlfSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKKyAgIyBDaGVjayAiYWxsIiBjb21wb25lbnRzLgorICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVggJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsKQorICBydW5fY21ha2VfY29tbWFuZCgke2Nhc2V9LWFsbCAke0NNQUtFX0NPTU1BTkR9IC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9JHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0gLURCVUlMRF9UWVBFPURlYnVnIC1QIGNtYWtlX2luc3RhbGwuY21ha2UpCitlbmRmdW5jdGlvbigpCisKK2lmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkRhcndpbiIpCisgIGlmKE5PVCBDTWFrZV9JTlNUQUxMX05BTUVfVE9PTF9CVUcpCisgICAgcnVuX2luc3RhbGxfdGVzdChtYWNvcykKKyAgICBydW5faW5zdGFsbF90ZXN0KG1hY29zLXVucmVzb2x2ZWQpCisgICAgcnVuX2luc3RhbGxfdGVzdChtYWNvcy1jb25mbGljdCkKKyAgICBydW5faW5zdGFsbF90ZXN0KG1hY29zLW5vdGZpbGUpCisgIGVuZGlmKCkKKyAgcnVuX2NtYWtlKHByb2plY3QpCisgIHJ1bl9jbWFrZShiYWRhcmdzMSkKKyAgcnVuX2NtYWtlKGJhZGFyZ3MyKQorZWxzZWlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIldpbmRvd3MiKQorICBydW5faW5zdGFsbF90ZXN0KHdpbmRvd3MpCisgIHJ1bl9pbnN0YWxsX3Rlc3Qod2luZG93cy11bnJlc29sdmVkKQorICBydW5faW5zdGFsbF90ZXN0KHdpbmRvd3MtY29uZmxpY3QpCisgIHJ1bl9pbnN0YWxsX3Rlc3Qod2luZG93cy1ub3RmaWxlKQorICBydW5fY21ha2UocHJvamVjdCkKKyAgcnVuX2NtYWtlKGJhZGFyZ3MxKQorICBydW5fY21ha2UoYmFkYXJnczIpCitlbHNlaWYoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQorICBpZihERUZJTkVEIEVOVntMREZMQUdTfSkKKyAgICAjIFNvbWUgc2V0dXBzIHByZWJha2UgZGlzYWJsZS1uZXctZHRhZ3MgaW50byBMREZMQUdTCisgICAgc3RyaW5nKFJFUExBQ0UgIi1XbCwtLWRpc2FibGUtbmV3LWR0YWdzIiAiIiBuZXdfbGRmbGFncyAiJEVOVntMREZMQUdTfSIpCisgICAgc2V0KEVOVntMREZMQUdTfSAiJHtuZXdfbGRmbGFnc30iKQorICBlbmRpZigpCisKKyAgaWYoTk9UIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXlhMIikKKyAgICBydW5faW5zdGFsbF90ZXN0KGxpbnV4KQorICBlbmRpZigpCisgIHJ1bl9pbnN0YWxsX3Rlc3QobGludXgtdW5yZXNvbHZlZCkKKyAgcnVuX2luc3RhbGxfdGVzdChsaW51eC1jb25mbGljdCkKKyAgcnVuX2luc3RhbGxfdGVzdChsaW51eC1ub3RmaWxlKQorICBydW5fY21ha2UocHJvamVjdCkKKyAgcnVuX2NtYWtlKGJhZGFyZ3MxKQorICBydW5fY21ha2UoYmFkYXJnczIpCitlbHNlKCkKKyAgcnVuX2NtYWtlKHVuc3VwcG9ydGVkKQorZW5kaWYoKQorCitydW5faW5zdGFsbF90ZXN0KHZhcmlhYmxlLXByb3BhZ2F0aW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2JhZGFyZ3MxLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2JhZGFyZ3MxLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3NDQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2JhZGFyZ3MxLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxOCBAQAorXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBiYWRhcmdzMVwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBZb3UgaGF2ZSB1c2VkIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGluIHByb2plY3QgbW9kZVwuICBUaGlzIGlzCisgIHByb2JhYmx5IG5vdCB3aGF0IHlvdSBpbnRlbmRlZCB0byBkb1wuICBJbnN0ZWFkLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcgaXQgaW4KKyAgYW4gaW5zdGFsbFwoQ09ERVwpIG9yIGluc3RhbGxcKFNDUklQVFwpIGNvbW1hbmRcLiAgRm9yIGV4YW1wbGU6CisKKyAgICBpbnN0YWxsXChDT0RFIFxbXFsKKyAgICAgIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUworICAgICAgICAjIFwuXC5cLgorICAgICAgICBcKQorICAgICAgXV1cKQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnNcLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0XC4KKworQ01ha2UgRXJyb3IgYXQgYmFkYXJnczFcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBVbnJlY29nbml6ZWQgYXJndW1lbnQ6ICJpbnZhbGlkIgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczEuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2JhZGFyZ3MyLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2JhZGFyZ3MyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWQzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjMgQEAKK15DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgYmFkYXJnczJcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgWW91IGhhdmUgdXNlZCBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBpbiBwcm9qZWN0IG1vZGVcLiAgVGhpcyBpcworICBwcm9iYWJseSBub3Qgd2hhdCB5b3UgaW50ZW5kZWQgdG8gZG9cLiAgSW5zdGVhZCwgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIGl0IGluCisgIGFuIGluc3RhbGxcKENPREVcKSBvciBpbnN0YWxsXChTQ1JJUFRcKSBjb21tYW5kXC4gIEZvciBleGFtcGxlOgorCisgICAgaW5zdGFsbFwoQ09ERSBcW1xbCisgICAgICBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKKyAgICAgICAgIyBcLlwuXC4KKyAgICAgICAgXCkKKyAgICAgIF1dXCkKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzXC4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdFwuCisKK0NNYWtlIEVycm9yIGF0IGJhZGFyZ3MyXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgS2V5d29yZHMgbWlzc2luZyB2YWx1ZXM6CisKKyAgICBSRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSCisgICAgVU5SRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSCisgICAgQ09ORkxJQ1RJTkdfREVQRU5ERU5DSUVTX1BSRUZJWAorICAgIEJVTkRMRV9FWEVDVVRBQkxFCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2JhZGFyZ3MyLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MWI2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1hbGwtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0NCBAQAorZnVuY3Rpb24oY2hlY2tfY29udGVudHMgZmlsZW5hbWUgY29udGVudHNfcmVnZXgpCisgIGlmKEVYSVNUUyAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iKQorICAgIGZpbGUoUkVBRCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iIGNvbnRlbnRzKQorICAgIGlmKE5PVCBjb250ZW50cyBNQVRDSEVTICIke2NvbnRlbnRzX3JlZ2V4fSIpCisgICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlIGNvbnRlbnRzOgorICAke2NvbnRlbnRzfQorZG8gbm90IG1hdGNoIHdoYXQgd2UgZXhwZWN0ZWQ6CisgICR7Y29udGVudHNfcmVnZXh9CitpbiBmaWxlOgorICAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfVxuIikKKyAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgICBlbmRpZigpCisgIGVsc2UoKQorICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3QiKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitzZXQoX2NoZWNrCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL2xpYnRlc3RfcnBhdGhcLnNvXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvbGlidGVzdF9ydW5wYXRoXC5zb11dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoL2xpYnJwYXRoXC5zb11dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3BhcmVudC9saWJycGF0aF9wYXJlbnRcLnNvXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoL2xpYnJwYXRoX3NlYXJjaFwuc29dXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoL2xpYnJ1bnBhdGhcLnNvXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2gvbGlicnVucGF0aF9zZWFyY2hcLnNvXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMS50eHQgIl4ke19jaGVja30kIikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCitjaGVja19jb250ZW50cyhkZXBzL2RlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQorc2V0KF9jaGVjaworICBbW2xpYnJwYXRoX3VucmVzb2x2ZWRcLnNvXV0KKyAgW1tsaWJydW5wYXRoX3BhcmVudF91bnJlc29sdmVkXC5zb11dCisgIFtbbGlicnVucGF0aF91bnJlc29sdmVkXC5zb11dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMxLnR4dCAiXiR7X2NoZWNrfSQiKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzMy50eHQgIl4ke19jaGVja30kIikKK3NldChfY2hlY2sKKyAgIl5saWJjb25mbGljdFxcLnNvOlteO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9jb25mbGljdC9saWJjb25mbGljdFxcLnNvO1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9jb25mbGljdDIvbGliY29uZmxpY3RcXC5zb1xuJCIKKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczEudHh0ICIke19jaGVja30iKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczIudHh0ICIke19jaGVja30iKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczMudHh0ICIke19jaGVja30iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1hbGwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWI1NzM2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYWxsLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMTkgQEAKK15DTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQorCisqQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2gKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCisKKypDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCisKKypDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQorCisqQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQorCisqQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQorCisqQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCisKKypDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2gKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1jb25mbGljdC1hbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWNvbmZsaWN0LWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWNvbmZsaWN0LWFsbC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1jb25mbGljdC1hbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1jb25mbGljdC1hbGwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmI2NWRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKQEAgLTAsMCArMSw3IEBACiteQ01ha2UgRXJyb3IgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIE11bHRpcGxlIGNvbmZsaWN0aW5nIHBhdGhzIGZvdW5kIGZvciBsaWJycGF0aFwuc286CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoMS9saWJycGF0aFwuc28KKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoMi9saWJycGF0aFwuc28kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWNvbmZsaWN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtY29uZmxpY3QuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtY29uZmxpY3QuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWNvbmZsaWN0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LW5vdGZpbGUtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LW5vdGZpbGUtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1ub3RmaWxlLWFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzU4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1ub3RmaWxlLWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBGYWlsZWQgdG8gcnVuIG9iamR1bXAgb246CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtbm90ZmlsZS1idWlsZC9yb290LWFsbC9iaW4vXC5cLi9saWIvbGlidGVzdFwuc28kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1ub3RmaWxlLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LW5vdGZpbGUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC11bnJlc29sdmVkLWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtdW5yZXNvbHZlZC1hbGwtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC11bnJlc29sdmVkLWFsbC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC11bnJlc29sdmVkLWFsbC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LXVucmVzb2x2ZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC11bnJlc29sdmVkLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LXVucmVzb2x2ZWQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LXVucmVzb2x2ZWQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyZDhmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LmNtYWtlCkBAIC0wLDAgKzEsMTY5IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKK2NtYWtlX3BvbGljeShTRVQgQ01QMDA5NSBORVcpCisKK3NldCh0ZXN0X3JwYXRoX25hbWVzCisgIHByZWV4Y2x1ZGVkCisgIHJwYXRoX3Bvc3RleGNsdWRlZAorICBycGF0aAorICBycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX3BhcmVudAorICBycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX29yaWdpbgorICBycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX3NlYXJjaAorICBycGF0aF91bnJlc29sdmVkCisgIGNvbmZsaWN0CisgICkKK3NldCh0ZXN0X3J1bnBhdGhfbmFtZXMKKyAgcnVucGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnVucGF0aAorICBydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQKKyAgcnVucGF0aF9vcmlnaW4KKyAgcnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZAorICBydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKKyAgcnVucGF0aF9zZWFyY2gKKyAgcnVucGF0aF91bnJlc29sdmVkCisgICkKKworZmlsZShSRU1PVkUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIikKK2FkZF9saWJyYXJ5KHRlc3RfcnBhdGggU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIpCitmb3JlYWNoKG5hbWUgJHt0ZXN0X3JwYXRoX25hbWVzfSkKKyAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiICJ2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCisgIGFkZF9saWJyYXJ5KCR7bmFtZX0gU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIpCisKKyAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIiAiZXh0ZXJuIHZvaWQgJHtuYW1lfSh2b2lkKTtcbiIpCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIgInZvaWQgdGVzdF9ycGF0aCh2b2lkKVxue1xuIikKK2ZvcmVhY2gobmFtZSAke3Rlc3RfcnBhdGhfbmFtZXN9KQorICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3JwYXRoLmMiICIgICR7bmFtZX0oKTtcbiIpCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIgIn1cbiIpCisKK2luc3RhbGwoVEFSR0VUUyBycGF0aF9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3JwYXRoX3Bvc3RleGNsdWRlZCkKK2luc3RhbGwoVEFSR0VUUyBycGF0aCBERVNUSU5BVElPTiBsaWIvcnBhdGgpCitpbnN0YWxsKFRBUkdFVFMgcnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCkKK2luc3RhbGwoVEFSR0VUUyBycGF0aF9vcmlnaW4gREVTVElOQVRJT04gbGliL3JwYXRoX29yaWdpbikKK2luc3RhbGwoVEFSR0VUUyBycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkKQoraW5zdGFsbChUQVJHRVRTIHJwYXRoIHJwYXRoX29yaWdpbiBycGF0aF9wYXJlbnQgREVTVElOQVRJT04gbGliL3JwYXRoX3BhcmVudCkKK2luc3RhbGwoVEFSR0VUUyBycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkKQoraW5zdGFsbChUQVJHRVRTIHJwYXRoIHJwYXRoX29yaWdpbiBycGF0aF9wYXJlbnQgcnBhdGhfc2VhcmNoIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9zZWFyY2gpCitpbnN0YWxsKFRBUkdFVFMgY29uZmxpY3QgREVTVElOQVRJT04gbGliL2NvbmZsaWN0KQorCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9ycGF0aCBQUklWQVRFICR7dGVzdF9ycGF0aF9uYW1lc30pCitzZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RfcnBhdGggUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnBhdGhfcG9zdGV4Y2x1ZGVkIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnBhdGgiCisgICJcJE9SSUdJTi9ycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkIgorICAiXCR7T1JJR0lOfS9ycGF0aF9vcmlnaW4iCisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9jb25mbGljdCIKKyAgKQordGFyZ2V0X2xpbmtfb3B0aW9ucyh0ZXN0X3JwYXRoIFBSSVZBVEUgLVdsLC0tZGlzYWJsZS1uZXctZHRhZ3MpCisKK2ZpbGUoUkVNT1ZFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIikKK2FkZF9saWJyYXJ5KHRlc3RfcnVucGF0aCBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiKQorZm9yZWFjaChuYW1lICR7dGVzdF9ydW5wYXRoX25hbWVzfSBycGF0aCBjb25mbGljdCkKKyAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiICJ2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCisgIGlmKE5PVCBuYW1lIE1BVENIRVMgIl4ocnBhdGh8Y29uZmxpY3QpJCIpCisgICAgYWRkX2xpYnJhcnkoJHtuYW1lfSBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vJHtuYW1lfS5jIikKKyAgZW5kaWYoKQorCisgIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIiAiZXh0ZXJuIHZvaWQgJHtuYW1lfSh2b2lkKTtcbiIpCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIiAidm9pZCB0ZXN0X3J1bnBhdGgodm9pZClcbntcbiIpCitmb3JlYWNoKG5hbWUgJHt0ZXN0X3J1bnBhdGhfbmFtZXN9IHJwYXRoIGNvbmZsaWN0KQorICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3J1bnBhdGguYyIgIiAgJHtuYW1lfSgpO1xuIikKK2VuZGZvcmVhY2goKQorZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiICJ9XG4iKQorCitpbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3J1bnBhdGhfcG9zdGV4Y2x1ZGVkKQoraW5zdGFsbChUQVJHRVRTIHJ1bnBhdGggREVTVElOQVRJT04gbGliL3J1bnBhdGgpCitpbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQpCitpbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9vcmlnaW4gREVTVElOQVRJT04gbGliL3J1bnBhdGhfb3JpZ2luKQoraW5zdGFsbChUQVJHRVRTIHJ1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWQgREVTVElOQVRJT04gbGliL3J1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWQpCitpbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQpCitpbnN0YWxsKFRBUkdFVFMgcnVucGF0aCBydW5wYXRoX29yaWdpbiBydW5wYXRoX3NlYXJjaCBERVNUSU5BVElPTiBsaWIvcnVucGF0aF9zZWFyY2gpCitpbnN0YWxsKFRBUkdFVFMgY29uZmxpY3QgREVTVElOQVRJT04gbGliL2NvbmZsaWN0MikKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfcnVucGF0aCBQUklWQVRFICR7dGVzdF9ydW5wYXRoX25hbWVzfSBycGF0aCBjb25mbGljdCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgdGVzdF9ydW5wYXRoIFBST1BFUlRZIElOU1RBTExfUlBBVEgKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3J1bnBhdGgvLi4vcnBhdGgiICMgRW5zdXJlIHRoYXQgZmlsZXMgdGhhdCBkb24ndCBjb25mbGljdCBhcmUgdHJlYXRlZCBjb3JyZWN0bHkKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3J1bnBhdGhfcG9zdGV4Y2x1ZGVkIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnVucGF0aCIKKyAgIlwke09SSUdJTn0vcnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkIgorICAiXCRPUklHSU4vcnVucGF0aF9vcmlnaW4iCisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9jb25mbGljdDIiCisgICkKK3RhcmdldF9saW5rX29wdGlvbnModGVzdF9ydW5wYXRoIFBSSVZBVEUgLVdsLC0tZW5hYmxlLW5ldy1kdGFncykKKworc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0X3JwYXRoICR7dGVzdF9ycGF0aF9uYW1lc30gdGVzdF9ydW5wYXRoICR7dGVzdF9ydW5wYXRoX25hbWVzfSBQUk9QRVJUWSBMSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgbGliKQoraW5zdGFsbChUQVJHRVRTIHRlc3RfcnBhdGggdGVzdF9ydW5wYXRoIERFU1RJTkFUSU9OIGxpYikKKworYWRkX2V4ZWN1dGFibGUodG9wZXhlIGxpbnV4L3RvcGV4ZS5jKQorYWRkX2xpYnJhcnkodG9wbGliIFNIQVJFRCBsaW51eC90b3BsaWIuYykKK2FkZF9saWJyYXJ5KHRvcG1vZCBNT0RVTEUgbGludXgvdG9wbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModG9wZXhlIFBSSVZBVEUgdGVzdF9ycGF0aCB0ZXN0X3J1bnBhdGgpCit0YXJnZXRfbGlua19saWJyYXJpZXModG9wbGliIFBSSVZBVEUgdGVzdF9ycGF0aCB0ZXN0X3J1bnBhdGgpCit0YXJnZXRfbGlua19saWJyYXJpZXModG9wbW9kIFBSSVZBVEUgdGVzdF9ycGF0aCB0ZXN0X3J1bnBhdGgpCitzZXRfcHJvcGVydHkoVEFSR0VUIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIFBST1BFUlRZIElOU1RBTExfUlBBVEgKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnBhdGhfcGFyZW50X3Bvc3RleGNsdWRlZCIKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3JwYXRoX3BhcmVudCIKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3J1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWQiCisgICkKK3RhcmdldF9saW5rX29wdGlvbnModG9wZXhlIFBSSVZBVEUgLVdsLC0tZGlzYWJsZS1uZXctZHRhZ3MpCit0YXJnZXRfbGlua19vcHRpb25zKHRvcGxpYiBQUklWQVRFIC1XbCwtLWRpc2FibGUtbmV3LWR0YWdzKQordGFyZ2V0X2xpbmtfb3B0aW9ucyh0b3Btb2QgUFJJVkFURSAtV2wsLS1kaXNhYmxlLW5ldy1kdGFncykKKworaW5zdGFsbChUQVJHRVRTIHRvcGV4ZSB0b3BsaWIgUlVOVElNRSBERVNUSU5BVElPTiBiaW4gTElCUkFSWSBERVNUSU5BVElPTiBsaWIpCitpbnN0YWxsKFRBUkdFVFMgdG9wbW9kIExJQlJBUlkgREVTVElOQVRJT04gbGliL21vZHVsZXMpCisKK2luc3RhbGwoQ09ERSBbWworICBmdW5jdGlvbihleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcyBkZXBzZmlsZSB1ZGVwc2ZpbGUgY2RlcHNmaWxlKQorICAgIGZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCisgICAgICBSRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIGRlcHMKKyAgICAgIFVOUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUiB1ZGVwcworICAgICAgQ09ORkxJQ1RJTkdfREVQRU5ERU5DSUVTX1BSRUZJWCBjZGVwcworICAgICAgUFJFX0lOQ0xVREVfUkVHRVhFUworICAgICAgICAiXmxpYih0ZXN0X3JwYXRofHJwYXRoX3Bvc3RleGNsdWRlZHxycGF0aHxycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkfHJwYXRoX3BhcmVudHxycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkfHJwYXRoX29yaWdpbnxycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkfHJwYXRoX3NlYXJjaHxycGF0aF91bnJlc29sdmVkfHRlc3RfcnVucGF0aHxydW5wYXRoX3Bvc3RleGNsdWRlZHxydW5wYXRofHJ1bnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZHxydW5wYXRoX29yaWdpbnxydW5wYXRoX3BhcmVudF91bnJlc29sdmVkfHJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZHxydW5wYXRoX3NlYXJjaHxydW5wYXRoX3VucmVzb2x2ZWR8Y29uZmxpY3QpXFwuc28kIgorICAgICAgICAiXmxpYmNcXC5zbyIKKyAgICAgIFBSRV9FWENMVURFX1JFR0VYRVMgIi4qIgorICAgICAgUE9TVF9JTkNMVURFX1JFR0VYRVMgIl4uKi8obGlidGVzdF9ycGF0aHxycGF0aC9saWJycGF0aHxycGF0aF9wYXJlbnQvbGlicnBhdGhfcGFyZW50fHJwYXRoX3NlYXJjaC9saWJycGF0aF9zZWFyY2h8bGlidGVzdF9ydW5wYXRofHJ1bnBhdGgvbGlicnVucGF0aHxydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWR8cnVucGF0aF9vcmlnaW58cnVucGF0aF9zZWFyY2gvbGlicnVucGF0aF9zZWFyY2h8Y29uZmxpY3QyPy9saWJjb25mbGljdClcXC5zbyQiCisgICAgICBQT1NUX0VYQ0xVREVfUkVHRVhFUyAiLioiCisgICAgICBESVJFQ1RPUklFUworICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL3JwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQiCisgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvcnBhdGhfc2VhcmNoIgorICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL3J1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZCIKKyAgICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi9ydW5wYXRoX3NlYXJjaCIKKyAgICAgICR7QVJHTn0KKyAgICAgICkKKyAgICBsaXN0KFNPUlQgZGVwcykKKyAgICBsaXN0KFNPUlQgdWRlcHMpCisgICAgbGlzdChTT1JUIGNkZXBzX0ZJTEVOQU1FUykKKyAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7ZGVwc2ZpbGV9IiAiJHtkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke3VkZXBzZmlsZX0iICIke3VkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIiKQorICAgIGZvcmVhY2goY2RlcCBJTiBMSVNUUyBjZGVwc19GSUxFTkFNRVMpCisgICAgICBzZXQoY2RlcF92YWx1ZXMgJHtjZGVwc18ke2NkZXB9fSkKKyAgICAgIGxpc3QoU09SVCBjZGVwX3ZhbHVlcykKKyAgICAgIGZpbGUoQVBQRU5EICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiR7Y2RlcH06JHtjZGVwX3ZhbHVlc31cbiIpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGZ1bmN0aW9uKCkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMS50eHQgdWRlcHMxLnR4dCBjZGVwczEudHh0CisgICAgRVhFQ1VUQUJMRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgKQorCisgIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAorICAgIGRlcHMyLnR4dCB1ZGVwczIudHh0IGNkZXBzMi50eHQKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcGxpYj4iCisgICAgKQorCisgIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAorICAgIGRlcHMzLnR4dCB1ZGVwczMudHh0IGNkZXBzMy50eHQKKyAgICBNT0RVTEVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL21vZHVsZXMvJDxUQVJHRVRfRklMRV9OQU1FOnRvcG1vZD4iCisgICAgKQorICBdXSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgvdG9wZXhlLmMgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC90b3BleGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC90b3BleGUuYwpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgvdG9wZXhlLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgvdG9wbGliLmMgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC90b3BsaWIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC90b3BsaWIuYwpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgvdG9wbGliLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWFsbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYyNjIzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYWxsLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMTU5IEBACitmdW5jdGlvbihjaGVja19jb250ZW50cyBmaWxlbmFtZSBjb250ZW50c19yZWdleCkKKyAgaWYoRVhJU1RTICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIpCisgICAgZmlsZShSRUFEICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIgY29udGVudHMpCisgICAgaWYoTk9UIGNvbnRlbnRzIE1BVENIRVMgIiR7Y29udGVudHNfcmVnZXh9IikKKyAgICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgY29udGVudHM6CisgICR7Y29udGVudHN9CitkbyBub3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3RlZDoKKyAgJHtjb250ZW50c19yZWdleH0KK2luIGZpbGU6CisgICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZmlsZW5hbWV9XG4iKQorICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRmlsZSAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSBkb2VzIG5vdCBleGlzdCIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKHNldF93aXRoX2xpYnN5c3RlbSB2YXIpCisgIHNldChfdG1wICIke0FSR059IikKKyAgaWYoRVhJU1RTICIvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYiIpCisgICAgbGlzdChBUFBFTkQgX3RtcCBbWy91c3IvbGliL2xpYlN5c3RlbVwuQlwuZHlsaWJdXSkKKyAgZW5kaWYoKQorICBzZXQoIiR7dmFyfSIgIiR7X3RtcH0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworc2V0X3dpdGhfbGlic3lzdGVtKF9jaGVjaworICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvYmluLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9iaW4vLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMS50eHQgIl4ke19jaGVja30kIikKKworc2V0KF9jaGVjaworICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9idW5kbGUvbGliZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0Bsb2FkZXJfcGF0aC9sb2FkZXJfcGF0aF91bnJlc29sdmVkL2xpYmxvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldF93aXRoX2xpYnN5c3RlbShfY2hlY2sKKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMi50eHQgIl4ke19jaGVja30kIikKKworc2V0KF9jaGVjaworICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aC9saWJleGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkL2xpYmV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWRcLmR5bGliXV0KKyAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMyLnR4dCAiXiR7X2NoZWNrfSQiKQorCitzZXRfd2l0aF9saWJzeXN0ZW0oX2NoZWNrCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldChfY2hlY2sKKyAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX2J1bmRsZS9saWJleGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCisgIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZC9saWJleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCisgIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICApCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzMy50eHQgIl4ke19jaGVja30kIikKKworc2V0X3dpdGhfbGlic3lzdGVtKF9jaGVjaworICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvYmluLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9iaW4vLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzNC50eHQgIl4ke19jaGVja30kIikKKworc2V0KF9jaGVjaworICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9idW5kbGUvbGliZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0Bsb2FkZXJfcGF0aC9sb2FkZXJfcGF0aF91bnJlc29sdmVkL2xpYmxvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczQudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldF93aXRoX2xpYnN5c3RlbShfY2hlY2sKKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9idW5kbGVfZXhlY3V0YWJsZS9iaW4vLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9idW5kbGUvbGliZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9sb2FkZXJfcGF0aC9saWJsb2FkZXJfcGF0aFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC8uLi9ycGF0aC9saWJycGF0aFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aF9sb2FkZXJfcGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aFwuZHlsaWJdXQorICApCitjaGVja19jb250ZW50cyhkZXBzL2RlcHM1LnR4dCAiXiR7X2NoZWNrfSQiKQorCitzZXQoX2NoZWNrCisgIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQorICBbW0Bsb2FkZXJfcGF0aC9sb2FkZXJfcGF0aF91bnJlc29sdmVkL2xpYmxvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHM1LnR4dCAiXiR7X2NoZWNrfSQiKQorCitzZXRfd2l0aF9saWJzeXN0ZW0oX2NoZWNrCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvYnVuZGxlX2V4ZWN1dGFibGUvYmluLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzNi50eHQgIl4ke19jaGVja30kIikKKworc2V0KF9jaGVjaworICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aC9saWJleGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICApCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzNi50eHQgIl4ke19jaGVja30kIikKKworc2V0KF9jaGVjaworICAiXmxpYmNvbmZsaWN0XFwuZHlsaWI6W147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvY29uZmxpY3QvbGliY29uZmxpY3RcXC5keWxpYjtbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9jb25mbGljdDIvbGliY29uZmxpY3RcXC5keWxpYlxuJCIKKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczEudHh0ICIke19jaGVja30iKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczIudHh0ICIke19jaGVja30iKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczMudHh0ICIke19jaGVja30iKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczQudHh0ICIke19jaGVja30iKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczUudHh0ICIke19jaGVja30iKQorY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczYudHh0ICIke19jaGVja30iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC1hbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWNvbmZsaWN0LWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWNvbmZsaWN0LWFsbC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1jb25mbGljdC1hbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1jb25mbGljdC1hbGwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODMyM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKQEAgLTAsMCArMSw3IEBACiteQ01ha2UgRXJyb3IgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIE11bHRpcGxlIGNvbmZsaWN0aW5nIHBhdGhzIGZvdW5kIGZvciBsaWJycGF0aFwuZHlsaWI6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoMS9saWJycGF0aFwuZHlsaWIKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoMi9saWJycGF0aFwuZHlsaWIkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWNvbmZsaWN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtY29uZmxpY3QuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtY29uZmxpY3QuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWNvbmZsaWN0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLW5vdGZpbGUtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLW5vdGZpbGUtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLW5vdGZpbGUtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLW5vdGZpbGUtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1ub3RmaWxlLWFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZmMxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1ub3RmaWxlLWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBGYWlsZWQgdG8gcnVuIG90b29sIG9uOgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLW5vdGZpbGUtYnVpbGQvcm9vdC1hbGwvYmluL1wuXC4vbGliL2xpYnRlc3RcLmR5bGliJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3Mtbm90ZmlsZS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1ub3RmaWxlLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy11bnJlc29sdmVkLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtdW5yZXNvbHZlZC1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtdW5yZXNvbHZlZC1hbGwtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtdW5yZXNvbHZlZC1hbGwtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy11bnJlc29sdmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtdW5yZXNvbHZlZC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy11bnJlc29sdmVkLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy11bnJlc29sdmVkLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NmExNGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy5jbWFrZQpAQCAtMCwwICsxLDIxNiBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldCh0ZXN0bGliX25hbWVzCisgIHByZWV4Y2x1ZGVkCisgIGV4ZWN1dGFibGVfcGF0aAorICBleGVjdXRhYmxlX3BhdGhfYnVuZGxlCisgIGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgbG9hZGVyX3BhdGgKKyAgbG9hZGVyX3BhdGhfdW5yZXNvbHZlZAorICBsb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGgKKyAgcnBhdGhfdW5yZXNvbHZlZAorICBycGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGUKKyAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAorICBycGF0aF9sb2FkZXJfcGF0aAorICBycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkCisgIHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAorICBub3JtYWwKKyAgbm9ybWFsX3VucmVzb2x2ZWQKKyAgbm9ybWFsX3Bvc3RleGNsdWRlZAorICBjb25mbGljdAorICApCisKK2ZpbGUoUkVNT1ZFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIpCithZGRfbGlicmFyeSh0ZXN0bGliIFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiKQorZm9yZWFjaChuYW1lICR7dGVzdGxpYl9uYW1lc30pCisgIGlmKG5hbWUgU1RSRVFVQUwgIm5vcm1hbCIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS9ub3JtYWwuYyIgImV4dGVybiB2b2lkIHJwYXRoKHZvaWQpO1xudm9pZCBub3JtYWwodm9pZClcbntcbiAgcnBhdGgoKTtcbn1cbiIpCisgIGVsc2UoKQorICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0vJHtuYW1lfS5jIiAidm9pZCAke25hbWV9KHZvaWQpIHt9XG4iKQorICBlbmRpZigpCisgIGFkZF9saWJyYXJ5KCR7bmFtZX0gU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIpCisKKyAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAiZXh0ZXJuIHZvaWQgJHtuYW1lfSh2b2lkKTtcbiIpCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgInZvaWQgdGVzdGxpYih2b2lkKVxue1xuIikKK2ZvcmVhY2gobmFtZSAke3Rlc3RsaWJfbmFtZXN9KQorICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICIgICR7bmFtZX0oKTtcbiIpCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgIn1cbiIpCitzZXRfcHJvcGVydHkoVEFSR0VUICR7dGVzdGxpYl9uYW1lc30gUFJPUEVSVFkgQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSIDEpCit0YXJnZXRfbGlua19saWJyYXJpZXMobm9ybWFsIFBSSVZBVEUgcnBhdGgpCitzZXRfcHJvcGVydHkoVEFSR0VUIG5vcm1hbCBQUk9QRVJUWSBJTlNUQUxMX1JQQVRICisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC8uLi9ycGF0aCIKKyAgKQorCitmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWJfY29uZmxpY3QuYyIgImV4dGVybiB2b2lkIGNvbmZsaWN0KHZvaWQpO1xudm9pZCB0ZXN0bGliX2NvbmZsaWN0KHZvaWQpXG57XG4gIGNvbmZsaWN0KCk7XG59XG4iKQorYWRkX2xpYnJhcnkodGVzdGxpYl9jb25mbGljdCBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYl9jb25mbGljdC5jIikKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0bGliX2NvbmZsaWN0IFBSSVZBVEUgY29uZmxpY3QpCisKK3NldF9wcm9wZXJ0eShUQVJHRVQgdGVzdGxpYiBQUk9QRVJUWSBJTlNUQUxMX1JQQVRICisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aF91bnJlc29sdmVkIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aF9wb3N0ZXhjbHVkZWQiCisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2NvbmZsaWN0IgorICBAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9ycGF0aF9leGVjdXRhYmxlX3BhdGgKKyAgQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvcnBhdGhfZXhlY3V0YWJsZV9wYXRoX3VucmVzb2x2ZWQKKyAgQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvcnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAorICBAbG9hZGVyX3BhdGgvcnBhdGhfbG9hZGVyX3BhdGgKKyAgQGxvYWRlcl9wYXRoL3JwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQKKyAgQGxvYWRlcl9wYXRoL3JwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAorICApCitzZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RsaWJfY29uZmxpY3QgUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9jb25mbGljdDIiCisgICkKKworZm9yZWFjaCh0CisgIGV4ZWN1dGFibGVfcGF0aAorICBleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIGxvYWRlcl9wYXRoCisgIGxvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAorICBycGF0aAorICBycGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGhfbG9hZGVyX3BhdGgKKyAgcnBhdGhfbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIGNvbmZsaWN0CisgICkKKyAgaW5zdGFsbChUQVJHRVRTICR7dH0gREVTVElOQVRJT04gZXhlY3V0YWJsZS9saWIvJHt0fSkKK2VuZGZvcmVhY2goKQoraW5zdGFsbChUQVJHRVRTIGNvbmZsaWN0IERFU1RJTkFUSU9OIGV4ZWN1dGFibGUvbGliL2NvbmZsaWN0MikKKworZm9yZWFjaCh0CisgIGV4ZWN1dGFibGVfcGF0aF9idW5kbGUKKyAgZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAorICBsb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGhfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGUKKyAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAorICBycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgKQorICBpbnN0YWxsKFRBUkdFVFMgJHt0fSBERVNUSU5BVElPTiBidW5kbGVfZXhlY3V0YWJsZS9saWIvJHt0fSkKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKHQgZXhlY3V0YWJsZV9wYXRoIGV4ZWN1dGFibGVfcGF0aF9idW5kbGUgZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke3R9IFBST1BFUlRZIElOU1RBTExfTkFNRV9ESVIgQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvJHt0fSkKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKHQgbG9hZGVyX3BhdGggbG9hZGVyX3BhdGhfdW5yZXNvbHZlZCBsb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHt0fSBQUk9QRVJUWSBJTlNUQUxMX05BTUVfRElSIEBsb2FkZXJfcGF0aC8ke3R9KQorZW5kZm9yZWFjaCgpCisKK2ZvcmVhY2godAorICBycGF0aAorICBycGF0aF91bnJlc29sdmVkCisgIHJwYXRoX3Bvc3RleGNsdWRlZAorICBycGF0aF9leGVjdXRhYmxlX3BhdGgKKyAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZQorICBycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX2xvYWRlcl9wYXRoCisgIHJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQKKyAgcnBhdGhfbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIGNvbmZsaWN0CisgICkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke3R9IFBST1BFUlRZIElOU1RBTExfTkFNRV9ESVIgQHJwYXRoKQorZW5kZm9yZWFjaCgpCisKK2ZvcmVhY2godCBub3JtYWwgbm9ybWFsX3VucmVzb2x2ZWQgbm9ybWFsX3Bvc3RleGNsdWRlZCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke3R9IFBST1BFUlRZIElOU1RBTExfTkFNRV9ESVIgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvJHt0fSIpCisgIGlmKE5PVCB0IFNUUkVRVUFMICJub3JtYWxfdW5yZXNvbHZlZCIpCisgICAgaW5zdGFsbChUQVJHRVRTICR7dH0gREVTVElOQVRJT04gZXhlY3V0YWJsZS9saWIvJHt0fSkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0bGliIFBSSVZBVEUgJHt0ZXN0bGliX25hbWVzfSkKKworYWRkX2V4ZWN1dGFibGUodG9wZXhlIG1hY29zL3RvcGV4ZS5jKQorYWRkX2xpYnJhcnkodG9wbGliIFNIQVJFRCBtYWNvcy90b3BsaWIuYykKK2FkZF9saWJyYXJ5KHRvcG1vZCBNT0RVTEUgbWFjb3MvdG9wbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModG9wZXhlIFBSSVZBVEUgdGVzdGxpYikKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0b3BsaWIgUFJJVkFURSB0ZXN0bGliKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcG1vZCBQUklWQVRFIHRlc3RsaWIpCisKK3NldF9wcm9wZXJ0eShUQVJHRVQgdG9wZXhlIHRvcGxpYiB0b3Btb2QgUFJPUEVSVFkgSU5TVEFMTF9SUEFUSCAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYiIpCisKK2luc3RhbGwoVEFSR0VUUyB0b3BleGUgdG9wbGliIHRvcG1vZCB0ZXN0bGliIHRlc3RsaWJfY29uZmxpY3QgUlVOVElNRSBERVNUSU5BVElPTiBleGVjdXRhYmxlL2JpbiBMSUJSQVJZIERFU1RJTkFUSU9OIGV4ZWN1dGFibGUvbGliKQoraW5zdGFsbChUQVJHRVRTIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIHRlc3RsaWIgdGVzdGxpYl9jb25mbGljdCBSVU5USU1FIERFU1RJTkFUSU9OIGJ1bmRsZV9leGVjdXRhYmxlL2JpbiBMSUJSQVJZIERFU1RJTkFUSU9OIGJ1bmRsZV9leGVjdXRhYmxlL2xpYikKKworaW5zdGFsbChDT0RFIFtbCisgIGZ1bmN0aW9uKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzIGRlcHNmaWxlIHVkZXBzZmlsZSBjZGVwc2ZpbGUpCisgICAgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKKyAgICAgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgZGVwcworICAgICAgVU5SRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIHVkZXBzCisgICAgICBDT05GTElDVElOR19ERVBFTkRFTkNJRVNfUFJFRklYIGNkZXBzCisgICAgICBQUkVfSU5DTFVERV9SRUdFWEVTICJeLiovbGliKHRlc3RsaWJ8ZXhlY3V0YWJsZV9wYXRofGV4ZWN1dGFibGVfcGF0aF9idW5kbGV8ZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZHxsb2FkZXJfcGF0aHxsb2FkZXJfcGF0aF91bnJlc29sdmVkfGxvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZHxycGF0aHxycGF0aF91bnJlc29sdmVkfHJwYXRoX3Bvc3RleGNsdWRlZHxycGF0aF9leGVjdXRhYmxlX3BhdGh8cnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZXxycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkfHJwYXRoX2xvYWRlcl9wYXRofHJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWR8cnBhdGhfbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkfG5vcm1hbHxub3JtYWxfdW5yZXNvbHZlZHxub3JtYWxfcG9zdGV4Y2x1ZGVkfGNvbmZsaWN0fFN5c3RlbVxcLkIpXFwuZHlsaWIkIgorICAgICAgUFJFX0VYQ0xVREVfUkVHRVhFUyAiLioiCisgICAgICBQT1NUX0lOQ0xVREVfUkVHRVhFUyAiXi4qL2xpYih0ZXN0bGlifGV4ZWN1dGFibGVfcGF0aHxleGVjdXRhYmxlX3BhdGhfYnVuZGxlfGxvYWRlcl9wYXRofHJwYXRofHJwYXRoX2V4ZWN1dGFibGVfcGF0aHxycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlfHJwYXRoX2xvYWRlcl9wYXRofG5vcm1hbHxjb25mbGljdHxTeXN0ZW1cXC5CKVxcLmR5bGliJCIKKyAgICAgIFBPU1RfRVhDTFVERV9SRUdFWEVTICIuKiIKKyAgICAgICR7QVJHTn0KKyAgICAgICkKKyAgICBsaXN0KFNPUlQgZGVwcykKKyAgICBsaXN0KFNPUlQgdWRlcHMpCisgICAgbGlzdChTT1JUIGNkZXBzX0ZJTEVOQU1FUykKKyAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7ZGVwc2ZpbGV9IiAiJHtkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke3VkZXBzZmlsZX0iICIke3VkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIiKQorICAgIGZvcmVhY2goY2RlcCBJTiBMSVNUUyBjZGVwc19GSUxFTkFNRVMpCisgICAgICBzZXQoY2RlcF92YWx1ZXMgJHtjZGVwc18ke2NkZXB9fSkKKyAgICAgIGxpc3QoU09SVCBjZGVwX3ZhbHVlcykKKyAgICAgIGZpbGUoQVBQRU5EICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiR7Y2RlcH06JHtjZGVwX3ZhbHVlc31cbiIpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGZ1bmN0aW9uKCkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMS50eHQgdWRlcHMxLnR4dCBjZGVwczEudHh0CisgICAgRVhFQ1VUQUJMRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wZXhlPiIKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCisgICAgKQorCisgIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAorICAgIGRlcHMyLnR4dCB1ZGVwczIudHh0IGNkZXBzMi50eHQKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbGliPiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCisgICAgKQorCisgIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAorICAgIGRlcHMzLnR4dCB1ZGVwczMudHh0IGNkZXBzMy50eHQKKyAgICBNT0RVTEVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcG1vZD4iCisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzNC50eHQgdWRlcHM0LnR4dCBjZGVwczQudHh0CisgICAgRVhFQ1VUQUJMRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wZXhlPiIKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCisgICAgQlVORExFX0VYRUNVVEFCTEUKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9idW5kbGVfZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgKQorCisgIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAorICAgIGRlcHM1LnR4dCB1ZGVwczUudHh0IGNkZXBzNS50eHQKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbGliPiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCisgICAgQlVORExFX0VYRUNVVEFCTEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2J1bmRsZV9leGVjdXRhYmxlL2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wZXhlPiIKKyAgICApCisKKyAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCisgICAgZGVwczYudHh0IHVkZXBzNi50eHQgY2RlcHM2LnR4dAorICAgIE1PRFVMRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbW9kPiIKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCisgICAgQlVORExFX0VYRUNVVEFCTEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2J1bmRsZV9leGVjdXRhYmxlL2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wZXhlPiIKKyAgICApCisgIF1dKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy90b3BleGUuYyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zL3RvcGV4ZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zL3RvcGV4ZS5jCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy90b3BleGUuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy90b3BsaWIuYyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zL3RvcGxpYi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zL3RvcGxpYi5jCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy90b3BsaWIuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvcHJvamVjdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvcHJvamVjdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNGExMGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9wcm9qZWN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMyBAQAorXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBwcm9qZWN0XC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIFlvdSBoYXZlIHVzZWQgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgaW4gcHJvamVjdCBtb2RlXC4gIFRoaXMgaXMKKyAgcHJvYmFibHkgbm90IHdoYXQgeW91IGludGVuZGVkIHRvIGRvXC4gIEluc3RlYWQsIHBsZWFzZSBjb25zaWRlciB1c2luZyBpdCBpbgorICBhbiBpbnN0YWxsXChDT0RFXCkgb3IgaW5zdGFsbFwoU0NSSVBUXCkgY29tbWFuZFwuICBGb3IgZXhhbXBsZToKKworICAgIGluc3RhbGxcKENPREUgXFtcWworICAgICAgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCisgICAgICAgICMgXC5cLlwuCisgICAgICAgIFwpCisgICAgICBdXVwpCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtcHJvamVjdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Byb2plY3QuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtcHJvamVjdC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvcHJvamVjdC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Vuc3VwcG9ydGVkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdW5zdXBwb3J0ZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdW5zdXBwb3J0ZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Vuc3VwcG9ydGVkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Vuc3VwcG9ydGVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACiteQ01ha2UgRXJyb3IgYXQgdW5zdXBwb3J0ZWRcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMgaXMgbm90IHN1cHBvcnRlZCBvbiBzeXN0ZW0gIlteCisgXSsiCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy11bnN1cHBvcnRlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Vuc3VwcG9ydGVkLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXVuc3VwcG9ydGVkLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy91bnN1cHBvcnRlZC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MWE1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1hbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisuKgorLipDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk06IGN1c3RvbS1wbGF0Zm9ybS4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MOiBjdXN0b20tcGxhdGZvcm0tb2JqZHVtcC4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EOiBwYXRoL3RvL2N1c3RvbS1vYmpkdW1wLioKKy4qQ01BS0VfT0JKRFVNUDogY3VzdG9tLW9iamR1bXAuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWRldi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWRldi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1kZXYtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWRldi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MWE1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1kZXYtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisuKgorLipDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk06IGN1c3RvbS1wbGF0Zm9ybS4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MOiBjdXN0b20tcGxhdGZvcm0tb2JqZHVtcC4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EOiBwYXRoL3RvL2N1c3RvbS1vYmpkdW1wLioKKy4qQ01BS0VfT0JKRFVNUDogY3VzdG9tLW9iamR1bXAuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdmFyaWFibGUtcHJvcGFnYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2JiYzVlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdmFyaWFibGUtcHJvcGFnYXRpb24uY21ha2UKQEAgLTAsMCArMSwxNyBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk0gImN1c3RvbS1wbGF0Zm9ybSIpCitzZXQoQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1RPT0wgImN1c3RvbS1wbGF0Zm9ybS1vYmpkdW1wIikKK3NldChDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORCAicGF0aC90by9jdXN0b20tb2JqZHVtcCIpCitzZXQoQ01BS0VfT0JKRFVNUCAiY3VzdG9tLW9iamR1bXAiKQorCitpbnN0YWxsKENPREUgW1sKK21lc3NhZ2UoRkFUQUxfRVJST1IgIgorICBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk06ICR7Q01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1BMQVRGT1JNfQorICBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfVE9PTDogJHtDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfVE9PTH0KKyAgQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX0NPTU1BTkQ6ICR7Q01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX0NPTU1BTkR9CisgIENNQUtFX09CSkRVTVA6ICR7Q01BS0VfT0JKRFVNUH0KKyIpCitdXQorQ09NUE9ORU5UIGRldgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1hbGwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ3MGExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1hbGwtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOCBAQAorZnVuY3Rpb24oY2hlY2tfY29udGVudHMgZmlsZW5hbWUgY29udGVudHNfcmVnZXgpCisgIGlmKEVYSVNUUyAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iKQorICAgIGZpbGUoUkVBRCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iIGNvbnRlbnRzKQorICAgIGlmKE5PVCBjb250ZW50cyBNQVRDSEVTICIke2NvbnRlbnRzX3JlZ2V4fSIpCisgICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlIGNvbnRlbnRzOgorICAke2NvbnRlbnRzfQorZG8gbm90IG1hdGNoIHdoYXQgd2UgZXhwZWN0ZWQ6CisgICR7Y29udGVudHNfcmVnZXh9CitpbiBmaWxlOgorICAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfVxuIikKKyAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgICBlbmRpZigpCisgIGVsc2UoKQorICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3QiKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitzZXQoX2NoZWNrCisgIFs9W1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluL1wuY29uZmxpY3QvXC5cLi8obGliKT9saWJkaXJcLmRsbF09XQorICBbPVtbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi9cLnNlYXJjaC8obGliKT9zZWFyY2hcLmRsbF09XQorICBbPVtbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi8obGliKT90ZXN0bGliXC5kbGxdPV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMS50eHQgIl4ke19jaGVja30kIikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCitjaGVja19jb250ZW50cyhkZXBzL2RlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQorc2V0KF9jaGVjaworICBbPVsobGliKT91bnJlc29sdmVkXC5kbGxdPV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzMi50eHQgIl4ke19jaGVja30kIikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQorc2V0KF9jaGVjaworICAiXihsaWIpP2NvbmZsaWN0XFwuZGxsOlteO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluL1xcLmNvbmZsaWN0LyhsaWIpP2NvbmZsaWN0XFwuZGxsO1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluLyhsaWIpP2NvbmZsaWN0XFwuZGxsXG4kIgorICApCitjaGVja19jb250ZW50cyhkZXBzL2NkZXBzMS50eHQgIiR7X2NoZWNrfSIpCitjaGVja19jb250ZW50cyhkZXBzL2NkZXBzMi50eHQgIiR7X2NoZWNrfSIpCitjaGVja19jb250ZW50cyhkZXBzL2NkZXBzMy50eHQgIiR7X2NoZWNrfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGM1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBNdWx0aXBsZSBjb25mbGljdGluZyBwYXRocyBmb3VuZCBmb3IgKGxpYik/cGF0aFwuZGxsOgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3Rlc3QxLyhsaWIpP3BhdGhcLmRsbAorICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi90ZXN0Mi8obGliKT9wYXRoXC5kbGwkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3Mtbm90ZmlsZS1hbGwtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLW5vdGZpbGUtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLW5vdGZpbGUtYWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjMDM5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgRmFpbGVkIHRvIHJ1biAoZHVtcGJpbnxvYmpkdW1wKSBvbjoKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLW5vdGZpbGUtYnVpbGQvcm9vdC1hbGwvYmluLyhsaWIpP3Rlc3RcLmRsbCQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3Mtbm90ZmlsZS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy11bnJlc29sdmVkLWFsbC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy11bnJlc29sdmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy11bnJlc29sdmVkLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtdW5yZXNvbHZlZC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy11bnJlc29sdmVkLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYwY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy5jbWFrZQpAQCAtMCwwICsxLDExNCBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldCh0ZXN0bGliX25hbWVzCisgIHByZWV4Y2x1ZGVkCisgIGxpYmRpcl9wb3N0ZXhjbHVkZWQKKyAgbGliZGlyCisgIHNlYXJjaF9wb3N0ZXhjbHVkZWQKKyAgc2VhcmNoCisgIHVucmVzb2x2ZWQKKyAgY29uZmxpY3QKKyAgKQorCitmaWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiKQorYWRkX2xpYnJhcnkodGVzdGxpYiBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIikKK2ZvcmVhY2gobmFtZSAke3Rlc3RsaWJfbmFtZXN9KQorICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIgIl9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCisgIGFkZF9saWJyYXJ5KCR7bmFtZX0gU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIpCisKKyAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAiX19kZWNsc3BlYyhkbGxpbXBvcnQpIGV4dGVybiB2b2lkICR7bmFtZX0odm9pZCk7XG4iKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJfX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCB0ZXN0bGliKHZvaWQpXG57XG4iKQorZm9yZWFjaChuYW1lICR7dGVzdGxpYl9uYW1lc30pCisgIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgIiAgJHtuYW1lfSgpO1xuIikKK2VuZGZvcmVhY2goKQorZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAifVxuIikKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWIgUFJJVkFURSAke3Rlc3RsaWJfbmFtZXN9KQorCitmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWJfY29uZmxpY3QuYyIgIl9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4gdm9pZCBjb25mbGljdCh2b2lkKTtcbl9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkIHRlc3RsaWJfY29uZmxpY3Qodm9pZClcbntcbiAgY29uZmxpY3QoKTtcbn1cbiIpCithZGRfbGlicmFyeSh0ZXN0bGliX2NvbmZsaWN0IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX2NvbmZsaWN0LmMiKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWJfY29uZmxpY3QgUFJJVkFURSBjb25mbGljdCkKKworZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX25vY29uZmxpY3QuYyIgIl9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4gdm9pZCBsaWJkaXIodm9pZCk7XG5fX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCB0ZXN0bGliX25vY29uZmxpY3Qodm9pZClcbntcbiAgbGliZGlyKCk7XG59XG4iKQorYWRkX2xpYnJhcnkodGVzdGxpYl9ub2NvbmZsaWN0IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX25vY29uZmxpY3QuYyIpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdGxpYl9ub2NvbmZsaWN0IFBSSVZBVEUgbGliZGlyKQorCitpbnN0YWxsKFRBUkdFVFMgdGVzdGxpYiBsaWJkaXJfcG9zdGV4Y2x1ZGVkIGxpYmRpciBjb25mbGljdCB0ZXN0bGliX25vY29uZmxpY3QgREVTVElOQVRJT04gYmluKQoraW5zdGFsbChUQVJHRVRTIGxpYmRpciBzZWFyY2hfcG9zdGV4Y2x1ZGVkIHNlYXJjaCBERVNUSU5BVElPTiBiaW4vLnNlYXJjaCkgIyBQcmVmaXhpbmcgd2l0aCAiLiIgZW5zdXJlcyBpdCBpcyB0aGUgZmlyc3QgaXRlbSBhZnRlciBsaXN0KFNPUlQpCitpbnN0YWxsKFRBUkdFVFMgdGVzdGxpYl9jb25mbGljdCBjb25mbGljdCBERVNUSU5BVElPTiBiaW4vLmNvbmZsaWN0KQorCithZGRfZXhlY3V0YWJsZSh0b3BleGUgd2luZG93cy90b3BleGUuYykKK2FkZF9saWJyYXJ5KHRvcGxpYiBTSEFSRUQgd2luZG93cy90b3BsaWIuYykKK2FkZF9saWJyYXJ5KHRvcG1vZCBNT0RVTEUgd2luZG93cy90b3BsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0b3BleGUgUFJJVkFURSB0ZXN0bGliKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGxpYiBQUklWQVRFIHRlc3RsaWIpCit0YXJnZXRfbGlua19saWJyYXJpZXModG9wbW9kIFBSSVZBVEUgdGVzdGxpYikKKworaW5zdGFsbChUQVJHRVRTIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIERFU1RJTkFUSU9OIGJpbikKKworaW5zdGFsbChDT0RFIFtbCisgIGZ1bmN0aW9uKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzIGRlcHNmaWxlIHVkZXBzZmlsZSBjZGVwc2ZpbGUpCisgICAgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKKyAgICAgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgZGVwcworICAgICAgVU5SRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIHVkZXBzCisgICAgICBDT05GTElDVElOR19ERVBFTkRFTkNJRVNfUFJFRklYIGNkZXBzCisgICAgICBQUkVfSU5DTFVERV9SRUdFWEVTCisgICAgICAgICJeKGxpYik/dGVzdGxpYlxcLmRsbCQiCisgICAgICAgICJeKGxpYik/bGliZGlyX3Bvc3RleGNsdWRlZFxcLmRsbCQiCisgICAgICAgICJeKGxpYik/bGliZGlyXFwuZGxsJCIKKyAgICAgICAgIl4obGliKT9zZWFyY2hfcG9zdGV4Y2x1ZGVkXFwuZGxsJCIKKyAgICAgICAgIl4obGliKT9zZWFyY2hcXC5kbGwkIgorICAgICAgICAiXihsaWIpP3VucmVzb2x2ZWRcXC5kbGwkIgorICAgICAgICAiXihsaWIpP2NvbmZsaWN0XFwuZGxsJCIKKyAgICAgICAgIl5rZXJuZWwzMlxcLmRsbCQiCisgICAgICBQUkVfRVhDTFVERV9SRUdFWEVTICIuKiIKKyAgICAgIFBPU1RfSU5DTFVERV9SRUdFWEVTCisgICAgICAgICJeLiovKGxpYik/dGVzdGxpYlxcLmRsbCQiCisgICAgICAgICJeLiovKGxpYik/bGliZGlyXFwuZGxsJCIKKyAgICAgICAgIl4uKi8obGliKT9zZWFyY2hcXC5kbGwkIgorICAgICAgICAiXi4qLyhsaWIpP2NvbmZsaWN0XFwuZGxsJCIKKyAgICAgIFBPU1RfRVhDTFVERV9SRUdFWEVTICIuKiIKKyAgICAgIERJUkVDVE9SSUVTCisgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLnNlYXJjaCIKKyAgICAgICR7QVJHTn0KKyAgICAgICkKKyAgICBsaXN0KFNPUlQgZGVwcykKKyAgICBsaXN0KFNPUlQgdWRlcHMpCisgICAgbGlzdChTT1JUIGNkZXBzX0ZJTEVOQU1FUykKKyAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7ZGVwc2ZpbGV9IiAiJHtkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke3VkZXBzZmlsZX0iICIke3VkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIiKQorICAgIGZvcmVhY2goY2RlcCBJTiBMSVNUUyBjZGVwc19GSUxFTkFNRVMpCisgICAgICBzZXQoY2RlcF92YWx1ZXMgJHtjZGVwc18ke2NkZXB9fSkKKyAgICAgIGxpc3QoU09SVCBjZGVwX3ZhbHVlcykKKyAgICAgIGZpbGUoQVBQRU5EICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiR7Y2RlcH06JHtjZGVwX3ZhbHVlc31cbiIpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGZ1bmN0aW9uKCkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMS50eHQgdWRlcHMxLnR4dCBjZGVwczEudHh0CisgICAgRVhFQ1VUQUJMRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8uLi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9ub2NvbmZsaWN0PiIKKyAgICApCisKKyAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCisgICAgZGVwczIudHh0IHVkZXBzMi50eHQgY2RlcHMyLnR4dAorICAgIExJQlJBUklFUworICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbGliPiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0LyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0Ly4uLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX25vY29uZmxpY3Q+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMy50eHQgdWRlcHMzLnR4dCBjZGVwczMudHh0CisgICAgTU9EVUxFUworICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbW9kPiIKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0LyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0Ly4uLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX25vY29uZmxpY3Q+IgorICAgICkKKyAgXV0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MvdG9wZXhlLmMgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzL3RvcGV4ZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MvdG9wZXhlLmMKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MvdG9wZXhlLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy90b3BsaWIuYyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MvdG9wbGliLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy90b3BsaWIuYwpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy90b3BsaWIuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1MmJhYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBET1dOTE9BRCBtaXNzaW5nIGZpbGUgdmFsdWUgZm9yIFRMU19DQUlORk8uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy1jYWluZm8tbm90LXNldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzY0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy1jYWluZm8tbm90LXNldC5jbWFrZQpAQCAtMCwwICsxIEBACitmaWxlKERPV05MT0FEICIiICIiIFRMU19DQUlORk8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy12ZXJpZnktbm90LXNldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy12ZXJpZnktbm90LXNldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQ2YzBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIERPV05MT0FEIG1pc3NpbmcgYm9vbCB2YWx1ZSBmb3IgVExTX1ZFUklGWS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5MzY4YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoRE9XTkxPQUQgIiIgIiIgVExTX1ZFUklGWSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggZjU0NjFhZC4uYTRkZTFkMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTgsNiArOCw4IEBACiBydW5fY21ha2UoRE9XTkxPQUQtdW51c2VkLWFyZ3VtZW50KQogcnVuX2NtYWtlKERPV05MT0FELWh0dHBoZWFkZXItbm90LXNldCkKIHJ1bl9jbWFrZShET1dOTE9BRC1uZXRyYy1iYWQpCitydW5fY21ha2UoRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0KQorcnVuX2NtYWtlKERPV05MT0FELXRscy12ZXJpZnktbm90LXNldCkKIHJ1bl9jbWFrZShET1dOTE9BRC1wYXNzLW5vdC1zZXQpCiBydW5fY21ha2UoVE9VQ0gpCiBydW5fY21ha2UoVE9VQ0gtZXJyb3ItaW4tc291cmNlLWRpcmVjdG9yeSkKQEAgLTE1LDYgKzE3LDggQEAKIHJ1bl9jbWFrZShVUExPQUQtdW51c2VkLWFyZ3VtZW50KQogcnVuX2NtYWtlKFVQTE9BRC1odHRwaGVhZGVyLW5vdC1zZXQpCiBydW5fY21ha2UoVVBMT0FELW5ldHJjLWJhZCkKK3J1bl9jbWFrZShVUExPQUQtdGxzLWNhaW5mby1ub3Qtc2V0KQorcnVuX2NtYWtlKFVQTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQpCiBydW5fY21ha2UoVVBMT0FELXBhc3Mtbm90LXNldCkKIHJ1bl9jbWFrZShJTlNUQUxMLURJUkVDVE9SWSkKIHJ1bl9jbWFrZShJTlNUQUxMLUZJTEVTX0ZST01fRElSKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy1jYWluZm8tbm90LXNldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy1jYWluZm8tbm90LXNldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy1jYWluZm8tbm90LXNldC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmE0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBVUExPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBVUExPQUQgbWlzc2luZyBmaWxlIHZhbHVlIGZvciBUTFNfQ0FJTkZPLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYjdjODMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQuY21ha2UKQEAgLTAsMCArMSBAQAorZmlsZShVUExPQUQgIiIgIiIgVExTX0NBSU5GTykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGRmZmNkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgVVBMT0FELXRscy12ZXJpZnktbm90LXNldC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgVVBMT0FEIG1pc3NpbmcgYm9vbCB2YWx1ZSBmb3IgVExTX1ZFUklGWS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy12ZXJpZnktbm90LXNldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy12ZXJpZnktbm90LXNldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjlkMjkzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoVVBMT0FEICIiICIiIFRMU19WRVJJRlkpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2RlcGVuZGVuY3kvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2RlcGVuZGVuY3kvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9kZXBlbmRlbmN5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZGVwZW5kZW5jeS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMzMzdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBSZXF1aXJlZC5jbWFrZTo5IFwoZmluZF9maWxlXCk6CisgIENvdWxkIG5vdCBmaW5kIEZJTEVfZG9Ob3RFeGlzdHMgdXNpbmcgdGhlIGZvbGxvd2luZyBmaWxlczogZG9Ob3RFeGlzdHMuaAorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2E4ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLS0gRklMRV9leGlzdHM9J1teJ10qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9pbmNsdWRlL1ByZWZpeEluUEFUSC5oJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjA5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQuY21ha2UKQEAgLTAsMCArMSwxMiBAQAorZmluZF9maWxlKEZJTEVfZXhpc3RzCisgIE5BTUVTIFByZWZpeEluUEFUSC5oCisgIFBBVEhTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pbmNsdWRlCisgIE5PX0RFRkFVTFRfUEFUSAorICBSRVFVSVJFRAorICApCittZXNzYWdlKFNUQVRVUyAiRklMRV9leGlzdHM9JyR7RklMRV9leGlzdHN9JyIpCisKK2ZpbmRfZmlsZShGSUxFX2RvTm90RXhpc3RzCisgIE5BTUVTIGRvTm90RXhpc3RzLmgKKyAgUkVRVUlSRUQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOWY1NmE1Ny4uOTNkZmI3OCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0zLDMgKzMsNCBAQAogcnVuX2NtYWtlKEZyb21QQVRIRW52KQogcnVuX2NtYWtlKEZyb21QcmVmaXhQYXRoKQogcnVuX2NtYWtlKFByZWZpeEluUEFUSCkKK3J1bl9jbWFrZShSZXF1aXJlZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9MaWJTeW1MaW5rLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvTGliU3ltTGluay1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmYwODgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvTGliU3ltTGluay1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorXlNZTUxJTktfTElCUkFSWT0nU1lNTElOS19MSUJSQVJZLU5PVEZPVU5EJworU1lNTElOS19MSUJSQVJZPSdbXiddKi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvTGliU3ltTGluay1idWlsZC9saWIvbGlic3ltbGluay5hJyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9MaWJTeW1MaW5rLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0xpYlN5bUxpbmsuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNGI3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9MaWJTeW1MaW5rLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK2xpc3QoQVBQRU5EIENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyBsaWIpCitsaXN0KEFQUEVORCBDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmEpCitmaWxlKE1BS0VfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitmaWxlKENSRUFURV9MSU5LICJsaWJzeW1saW5rZWQuYSIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIvbGlic3ltbGluay5hIiBTWU1CT0xJQykKK2ZpbmRfbGlicmFyeShTWU1MSU5LX0xJQlJBUlkKKyAgTkFNRVMgc3ltbGluaworICBQQVRIUyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliCisgIE5PX0RFRkFVTFRfUEFUSAorICApCittZXNzYWdlKCJTWU1MSU5LX0xJQlJBUlk9JyR7U1lNTElOS19MSUJSQVJZfSciKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYi9saWJzeW1saW5rZWQuYSIgInN5bWxpbmtlZCIpCitmaW5kX2xpYnJhcnkoU1lNTElOS19MSUJSQVJZCisgIE5BTUVTIHN5bWxpbmsKKyAgUEFUSFMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYgorICBOT19ERUZBVUxUX1BBVEgKKyAgKQorbWVzc2FnZSgiU1lNTElOS19MSUJSQVJZPScke1NZTUxJTktfTElCUkFSWX0nIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDVkMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBSZXF1aXJlZC5jbWFrZToxMSBcKGZpbmRfbGlicmFyeVwpOgorICBDb3VsZCBub3QgZmluZCBMSUJfZG9Ob3RFeGlzdHMgdXNpbmcgdGhlIGZvbGxvd2luZyBuYW1lczogZG9Ob3RFeGlzdHMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4YWI3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy0tIExJQl9leGlzdHM9J1teJ10qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9saWIvbGliUHJlZml4SW5QQVRILmEnCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjOWY4NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC5jbWFrZQpAQCAtMCwwICsxLDE0IEBACitsaXN0KEFQUEVORCBDTUFLRV9GSU5EX0xJQlJBUllfUFJFRklYRVMgbGliKQorbGlzdChBUFBFTkQgQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTIC5hKQorZmluZF9saWJyYXJ5KExJQl9leGlzdHMKKyAgTkFNRVMgUHJlZml4SW5QQVRICisgIFBBVEhTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWIKKyAgTk9fREVGQVVMVF9QQVRICisgIFJFUVVJUkVECisgICkKK21lc3NhZ2UoU1RBVFVTICJMSUJfZXhpc3RzPScke0xJQl9leGlzdHN9JyIpCisKK2ZpbmRfbGlicmFyeShMSUJfZG9Ob3RFeGlzdHMKKyAgTkFNRVMgZG9Ob3RFeGlzdHMKKyAgUkVRVUlSRUQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNjQzYTViOS4uYzdkNjllNCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0zLDcgKzMsOSBAQAogcnVuX2NtYWtlKENyZWF0ZWQpCiBydW5fY21ha2UoRnJvbVByZWZpeFBhdGgpCiBydW5fY21ha2UoRnJvbVBBVEhFbnYpCi1pZihDTUFLRV9IT1NUX1VOSVgpCitpZihVTklYIEFORCBOT1QgQ1lHV0lOKQogICBydW5fY21ha2UoTGliQXJjaExpbmspCisgIHJ1bl9jbWFrZShMaWJTeW1MaW5rKQogZW5kaWYoKQogcnVuX2NtYWtlKFByZWZpeEluUEFUSCkKK3J1bl9jbWFrZShSZXF1aXJlZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL01pc3NpbmdOb3JtYWxXYXJuTm9Nb2R1bGVPbGQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9NaXNzaW5nTm9ybWFsV2Fybk5vTW9kdWxlT2xkLXN0ZGVyci50eHQKaW5kZXggYjMzNmI1Ni4uZWJmZDdkMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL01pc3NpbmdOb3JtYWxXYXJuTm9Nb2R1bGVPbGQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ05vcm1hbFdhcm5Ob01vZHVsZU9sZC1zdGRlcnIudHh0CkBAIC0xLDkgKzEsMTAgQEAKIENNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBNaXNzaW5nTm9ybWFsV2Fybk5vTW9kdWxlT2xkLmNtYWtlOjIgXChmaW5kX3BhY2thZ2VcKToKLSAgZmluZF9wYWNrYWdlIGNhbGxlZCB3aXRob3V0IE5PX01PRFVMRSBvcHRpb24gYW5kIG5vIEZpbmROb3RIZXJlLmNtYWtlCi0gIG1vZHVsZSBpcyBpbiBDTUFLRV9NT0RVTEVfUEFUSC4gIEFkZCBOT19NT0RVTEUgdG8gZXhjbHVzaXZlbHkgcmVxdWVzdAotICBDb25maWcgbW9kZSBhbmQgc2VhcmNoIGZvciBhIHBhY2thZ2UgY29uZmlndXJhdGlvbiBmaWxlIHByb3ZpZGVkIGJ5IE5vdEhlcmUKLSAgXChOb3RIZXJlQ29uZmlnLmNtYWtlIG9yIG5vdGhlcmUtY29uZmlnLmNtYWtlXCkuICBPdGhlcndpc2UgbWFrZQotICBGaW5kTm90SGVyZS5jbWFrZSBhdmFpbGFibGUgaW4gQ01BS0VfTU9EVUxFX1BBVEguCisgIGZpbmRfcGFja2FnZSBjYWxsZWQgd2l0aG91dCBlaXRoZXIgTU9EVUxFIG9yIENPTkZJRyBvcHRpb24gYW5kIG5vCisgIEZpbmROb3RIZXJlLmNtYWtlIG1vZHVsZSBpcyBpbiBDTUFLRV9NT0RVTEVfUEFUSC4gIEFkZCBNT0RVTEUgdG8KKyAgZXhjbHVzaXZlbHkgcmVxdWVzdCBNb2R1bGUgbW9kZSBhbmQgZmFpbCBpZiBGaW5kTm90SGVyZS5jbWFrZSBpcyBtaXNzaW5nLgorICBBZGQgQ09ORklHIHRvIGV4Y2x1c2l2ZWx5IHJlcXVlc3QgQ29uZmlnIG1vZGUgYW5kIHNlYXJjaCBmb3IgYSBwYWNrYWdlCisgIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm92aWRlZCBieSBOb3RIZXJlIFwoTm90SGVyZUNvbmZpZy5jbWFrZSBvcgorICBub3RoZXJlLWNvbmZpZy5jbWFrZVwpLgogCiAgIFwoVmFyaWFibGUgQ01BS0VfRklORF9QQUNLQUdFX1dBUk5fTk9fTU9EVUxFIGVuYWJsZWQgdGhpcyB3YXJuaW5nLlwpCiBDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjVjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK0NNYWtlIEVycm9yIGF0IFJlcXVpcmVkLmNtYWtlOjkgXChmaW5kX3BhdGhcKToKKyAgQ291bGQgbm90IGZpbmQgUEFUSF9kb05vdEV4aXN0cyB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGVzOiBkb05vdEV4aXN0cy5oCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWZjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACistLSBQQVRIX2V4aXN0cz0nW14nXSovVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL2luY2x1ZGUnCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyZGMxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitmaW5kX3BhdGgoUEFUSF9leGlzdHMKKyAgTkFNRVMgUHJlZml4SW5QQVRILmgKKyAgUEFUSFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luY2x1ZGUKKyAgTk9fREVGQVVMVF9QQVRICisgIFJFUVVJUkVECisgICkKK21lc3NhZ2UoU1RBVFVTICJQQVRIX2V4aXN0cz0nJHtQQVRIX2V4aXN0c30nIikKKworZmluZF9wYXRoKFBBVEhfZG9Ob3RFeGlzdHMKKyAgTkFNRVMgZG9Ob3RFeGlzdHMuaAorICBSRVFVSVJFRAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBlZDU1ZjUxLi41YzkxOWJiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTMsNiArMyw3IEBACiBydW5fY21ha2UoRW1wdHlPbGRTdHlsZSkKIHJ1bl9jbWFrZShGcm9tUEFUSEVudikKIHJ1bl9jbWFrZShQcmVmaXhJblBBVEgpCitydW5fY21ha2UoUmVxdWlyZWQpCiAKIGlmKEFQUExFKQogICBydW5fY21ha2UoRnJhbWV3b3Jrc1dpdGhTdWJkaXJzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQnVuZGxlU3BhY2VJbk5hbWUtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzFkNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLS0gRmFrZUFwcF9FWEVDVVRBQkxFPScuKi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQnVuZGxlU3BhY2VJbk5hbWUtYnVpbGQvRmFrZSBhcHAuYXBwL0NvbnRlbnRzL01hY09TL0Zha2UgYXBwJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTJkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQnVuZGxlU3BhY2VJbk5hbWUuY21ha2UKQEAgLTAsMCArMSw4IEBACitzZXQoZmFrZUFwcCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0Zha2UgYXBwLmFwcC9Db250ZW50cy9NYWNPUy9GYWtlIGFwcCIpCitmaWxlKFdSSVRFICIke2Zha2VBcHB9IiAiIyEvYmluL3NoXG4iKQorZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgY2htb2QgYStyeCAiJHtmYWtlQXBwfSIpCisKK2ZpbmRfcHJvZ3JhbShGYWtlQXBwX0VYRUNVVEFCTEUgTkFNRVMgIkZha2UgYXBwIiBOT19ERUZBVUxUX1BBVEgKKyAgUEFUSFMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIKKykKK21lc3NhZ2UoU1RBVFVTICJGYWtlQXBwX0VYRUNVVEFCTEU9JyR7RmFrZUFwcF9FWEVDVVRBQkxFfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktQ29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktQ29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTQxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1Db21tb24uY21ha2UKQEAgLTAsMCArMSw3IEBACitmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRXhlTm9SZWFkIiAiIyEvYmluL3NoXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1JlYWROb0V4ZSIgIiNSZWFkTm9FeGUiKQorZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgY2htb2QgLXIreCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0V4ZU5vUmVhZCIpCitmaW5kX3Byb2dyYW0oRXhlTm9SZWFkX0VYRUNVVEFCTEUgTkFNRVMgRXhlTm9SZWFkIE5PX0RFRkFVTFRfUEFUSCBQQVRIUyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKK21lc3NhZ2UoU1RBVFVTICJFeGVOb1JlYWRfRVhFQ1VUQUJMRT0nJHtFeGVOb1JlYWRfRVhFQ1VUQUJMRX0nIikKK2ZpbmRfcHJvZ3JhbShSZWFkTm9FeGVfRVhFQ1VUQUJMRSBOQU1FUyBSZWFkTm9FeGUgTk9fREVGQVVMVF9QQVRIIFBBVEhTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIlJlYWROb0V4ZV9FWEVDVVRBQkxFPScke1JlYWROb0V4ZV9FWEVDVVRBQkxFfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1ORVctc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ0NDYzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLXN0ZG91dC50eHQKQEAgLTAsMCArMSwyIEBACistLSBFeGVOb1JlYWRfRVhFQ1VUQUJMRT0nLiovVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLWJ1aWxkL0V4ZU5vUmVhZCcKKy0tIFJlYWROb0V4ZV9FWEVDVVRBQkxFPSdSZWFkTm9FeGVfRVhFQ1VUQUJMRS1OT1RGT1VORCcKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LU5FVy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE0MDMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTA5IE5FVykKK2luY2x1ZGUoQ01QMDEwOS1Db21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LU9MRC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMGUyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDIgQEAKKy0tIEV4ZU5vUmVhZF9FWEVDVVRBQkxFPSdFeGVOb1JlYWRfRVhFQ1VUQUJMRS1OT1RGT1VORCcKKy0tIFJlYWROb0V4ZV9FWEVDVVRBQkxFPScuKi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQtYnVpbGQvUmVhZE5vRXhlJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktT0xELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjAxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQuY21ha2UKQEAgLTAsMCArMSwyIEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDkgT0xEKQoraW5jbHVkZShDTVAwMTA5LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJmYzZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjkgQEAKK15DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgQ01QMDEwOS1Db21tb24uY21ha2U6NCBcKGZpbmRfcHJvZ3JhbVwpOgorICBQb2xpY3kgQ01QMDEwOSBpcyBub3Qgc2V0OiBmaW5kX3Byb2dyYW1cKFwpIHJlcXVpcmVzIHBlcm1pc3Npb24gdG8gZXhlY3V0ZQorICBidXQgbm90IHRvIHJlYWQuICBSdW4gImNtYWtlIC0taGVscC1wb2xpY3kgQ01QMDEwOSIgZm9yIHBvbGljeSBkZXRhaWxzLgorICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgVGhlIGZpbGUKKworICAgIC4qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tYnVpbGQvRXhlTm9SZWFkCisKKyAgaXMgZXhlY3V0YWJsZSBidXQgbm90IHJlYWRhYmxlLiAgQ01ha2UgaXMgaWdub3JpbmcgaXQgZm9yIGNvbXBhdGliaWxpdHkuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTVAwMTA5LVdBUk4uY21ha2U6MSBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KKysKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBDTVAwMTA5LUNvbW1vbi5jbWFrZTo2IFwoZmluZF9wcm9ncmFtXCk6CisgIFBvbGljeSBDTVAwMTA5IGlzIG5vdCBzZXQ6IGZpbmRfcHJvZ3JhbVwoXCkgcmVxdWlyZXMgcGVybWlzc2lvbiB0byBleGVjdXRlCisgIGJ1dCBub3QgdG8gcmVhZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTA5IiBmb3IgcG9saWN5IGRldGFpbHMuCisgIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8gc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworICBUaGUgZmlsZQorCisgICAgLiovVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi1idWlsZC9SZWFkTm9FeGUKKworICBpcyByZWFkYWJsZSBidXQgbm90IGV4ZWN1dGFibGUuICBDTWFrZSBpcyB1c2luZyBpdCBmb3IgY29tcGF0aWJpbGl0eS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDktV0FSTi5jbWFrZToxIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWY1NjBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMiBAQAorLS0gRXhlTm9SZWFkX0VYRUNVVEFCTEU9J0V4ZU5vUmVhZF9FWEVDVVRBQkxFLU5PVEZPVU5EJworLS0gUmVhZE5vRXhlX0VYRUNVVEFCTEU9Jy4qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tYnVpbGQvUmVhZE5vRXhlJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkNTlhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4uY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShDTVAwMTA5LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTRhOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBSZXF1aXJlZC5jbWFrZTo5IFwoZmluZF9wcm9ncmFtXCk6CisgIENvdWxkIG5vdCBmaW5kIFBST0dfQWFuZEIgdXNpbmcgdGhlIGZvbGxvd2luZyBuYW1lczogdGVzdEFhbmRCCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9SZXF1aXJlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGYxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACistLSBQUk9HX0E9J1teJ10qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9BL3Rlc3RBJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NWFhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQuY21ha2UKQEAgLTAsMCArMSwxMiBAQAorZmluZF9wcm9ncmFtKFBST0dfQQorICBOQU1FUyB0ZXN0QQorICBQQVRIUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQQorICBOT19ERUZBVUxUX1BBVEgKKyAgUkVRVUlSRUQKKyAgKQorbWVzc2FnZShTVEFUVVMgIlBST0dfQT0nJHtQUk9HX0F9JyIpCisKK2ZpbmRfcHJvZ3JhbShQUk9HX0FhbmRCCisgIE5BTUVTIHRlc3RBYW5kQgorICBSRVFVSVJFRAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2OTAzZjA1Li4zZTIzOTIwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTQsOCArNCwyNSBAQAogcnVuX2NtYWtlKERpcnNQZXJOYW1lKQogcnVuX2NtYWtlKE5hbWVzUGVyRGlyKQogcnVuX2NtYWtlKFJlbEFuZEFic1BhdGgpCitydW5fY21ha2UoUmVxdWlyZWQpCiAKIGlmKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIl4oV2luZG93c3xDWUdXSU4pJCIpCiAgIHJ1bl9jbWFrZShXaW5kb3dzQ29tKQogICBydW5fY21ha2UoV2luZG93c0V4ZSkKK2Vsc2UoKQorICAjIHRlc3Qgbm9uIHJlYWRhYmxlIGZpbGUgb25seSBpZiBub3Qgcm9vdAorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCBpZCAtdSAkRU5We1VTRVJ9CisgICAgT1VUUFVUX1ZBUklBQkxFIHVpZAorICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorCisgIGlmKE5PVCAiJHt1aWR9IiBTVFJFUVVBTCAiMCIpCisgICAgcnVuX2NtYWtlKENNUDAxMDktV0FSTikKKyAgICBydW5fY21ha2UoQ01QMDEwOS1PTEQpCisgICAgcnVuX2NtYWtlKENNUDAxMDktTkVXKQorICBlbmRpZigpCitlbmRpZigpCisKK2lmKEFQUExFKQorICBydW5fY21ha2UoQnVuZGxlU3BhY2VJbk5hbWUpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0luY29ycmVjdEFyZ3VtZW50cy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0luY29ycmVjdEFyZ3VtZW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjA4YWZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBJbmNvcnJlY3RBcmd1bWVudHMuY21ha2U6MSBcKGdldF9maWxlbmFtZV9jb21wb25lbnRcKToKKyAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0luY29ycmVjdEFyZ3VtZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzI5ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMuY21ha2UKQEAgLTAsMCArMSwyIEBACitnZXRfZmlsZW5hbWVfY29tcG9uZW50KHZhcikKK21lc3NhZ2UoIlRoZSBlcnJvciBpcyBmYXRhbCwgc28gdGhpcyBzaG91bGQgbm90IHByaW50IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvS25vd25Db21wb25lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Lbm93bkNvbXBvbmVudHMuY21ha2UKaW5kZXggNTRiODU4Zi4uYzI3NjJhZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Lbm93bkNvbXBvbmVudHMuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Lbm93bkNvbXBvbmVudHMuY21ha2UKQEAgLTg1LDEyICs4NSwxMiBAQAogZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiICIgUFJPR1JBTSkKIGNoZWNrKCJQUk9HUkFNIHdpdGgganVzdCBhIHNwYWNlIiAiJHt0ZXN0X3Byb2dyYW1fbmFtZX0iICIiKQogCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KHRlc3RfcHJvZ3JhbV9uYW1lICIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSIgUFJPR1JBTSkKLWNoZWNrKCJQUk9HUkFNIHNwZWNpZmllZCBleHBsaWNpdGx5IHdpdGhvdXQgcXVvdGluZyIgIiR7dGVzdF9wcm9ncmFtX25hbWV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Lbm93bkNvbXBvbmVudHMuc2giIFBST0dSQU0pCitjaGVjaygiUFJPR1JBTSBzcGVjaWZpZWQgZXhwbGljaXRseSB3aXRob3V0IHF1b3RpbmciICIke3Rlc3RfcHJvZ3JhbV9uYW1lfSIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vS25vd25Db21wb25lbnRzLnNoIikKIAotZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiXCIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfVwiIGFyZzEgYXJnMiIgUFJPR1JBTQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiXCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0tub3duQ29tcG9uZW50cy5zaFwiIGFyZzEgYXJnMiIgUFJPR1JBTQogICBQUk9HUkFNX0FSR1MgdGVzdF9wcm9ncmFtX2FyZ3MpCi1jaGVjaygiUFJPR1JBTSBzcGVjaWZpZWQgZXhwbGljaXRseSB3aXRoIGFyZ3VtZW50czogbmFtZSIgIiR7dGVzdF9wcm9ncmFtX25hbWV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQorY2hlY2soIlBST0dSQU0gc3BlY2lmaWVkIGV4cGxpY2l0bHkgd2l0aCBhcmd1bWVudHM6IG5hbWUiICIke3Rlc3RfcHJvZ3JhbV9uYW1lfSIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vS25vd25Db21wb25lbnRzLnNoIikKIGNoZWNrKCJQUk9HUkFNIHNwZWNpZmllZCBleHBsaWNpdGx5IHdpdGggYXJndW1lbnRzOiBhcmdzIiAiJHt0ZXN0X3Byb2dyYW1fYXJnc30iICIgYXJnMSBhcmcyIikKIAogbGlzdChBUFBFTkQgbm9uX2NhY2hlX3ZhcnMgdGVzdF9wcm9ncmFtX25hbWUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0tub3duQ29tcG9uZW50cy5zaCBiL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvS25vd25Db21wb25lbnRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhMjQ4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0tub3duQ29tcG9uZW50cy5zaApAQCAtMCwwICsxIEBACisjIS9iaW4vc2gKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMTU2ZmM4Zi4uYTc4MjBhMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsNCArMSw1IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCitydW5fY21ha2UoSW5jb3JyZWN0QXJndW1lbnRzKQogcnVuX2NtYWtlKEtub3duQ29tcG9uZW50cykKIHJ1bl9jbWFrZShVbmtub3duQ29tcG9uZW50KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Vbmtub3duQ29tcG9uZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQtc3RkZXJyLnR4dAppbmRleCBiMTQ2ZTViLi5mODZhNjg4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQtc3RkZXJyLnR4dApAQCAtMSw0ICsxLDQgQEAKLUNNYWtlIEVycm9yIGF0IFVua25vd25Db21wb25lbnQuY21ha2U6MSBcKGdldF9maWxlbmFtZV9jb21wb25lbnRcKToKK15DTWFrZSBFcnJvciBhdCBVbmtub3duQ29tcG9uZW50LmNtYWtlOjEgXChnZXRfZmlsZW5hbWVfY29tcG9uZW50XCk6CiAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgdW5rbm93biBjb21wb25lbnQgQk9HVVMKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQuY21ha2UKaW5kZXggMDZhYmM1MS4uMTk1MjFiYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Vbmtub3duQ29tcG9uZW50LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvVW5rbm93bkNvbXBvbmVudC5jbWFrZQpAQCAtMSArMSwyIEBACiBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHZhciAiL3BhdGgvdG8vZmlsZW5hbWUuZXh0LmluIiBCT0dVUykKK21lc3NhZ2UoIlRoZSBlcnJvciBpcyBmYXRhbCwgc28gdGhpcyBzaG91bGQgbm90IHByaW50IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNmUzNjQ3My4uYzRlZTUzZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01LDYgKzUsNyBAQAogcnVuX2NtYWtlKGdsb2JhbF9wcm9wZXJ0aWVzKQogcnVuX2NtYWtlKGluc3RhbGxfcHJvcGVydGllcykKIHJ1bl9jbWFrZShzb3VyY2VfcHJvcGVydGllcykKK3J1bl9jbWFrZShzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcykKIHJ1bl9jbWFrZSh0YXJnZXRfcHJvcGVydGllcykKIHJ1bl9jbWFrZSh0ZXN0X3Byb3BlcnRpZXMpCiBydW5fY21ha2UoRGVidWdDb25maWd1cmF0aW9ucykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L3NvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWNjYjhmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L3NvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2NiBAQAorXkNNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjEgXChzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXNcKToKKyAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG5vCisgIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSBESVJFQ1RPUlkgb3B0aW9uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZToyIFwoc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzXCk6CisgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyBnaXZlbiBub24tZXhpc3RlbnQgRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjMgXChzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXNcKToKKyAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG5vCisgIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSBUQVJHRVRfRElSRUNUT1JZIG9wdGlvbgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6NCBcKHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllc1wpOgorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMgZ2l2ZW4gbm9uLWV4aXN0ZW50IHRhcmdldCBmb3IgVEFSR0VUX0RJUkVDVE9SWQorICBub25fZXhpc3RpbmdfdGFyZ2V0CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZTo2IFwoZ2V0X3Byb3BlcnR5XCk6CisgIGdldF9wcm9wZXJ0eSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBubyB2YWx1ZSBwcm92aWRlZCB0bworICB0aGUgRElSRUNUT1JZIG9wdGlvbgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6NyBcKGdldF9wcm9wZXJ0eVwpOgorICBnZXRfcHJvcGVydHkgZ2l2ZW4gbm9uLWV4aXN0ZW50IERJUkVDVE9SWSBub25fZXhpc3RpbmdfZGlyCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZTo4IFwoZ2V0X3Byb3BlcnR5XCk6CisgIGdldF9wcm9wZXJ0eSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBubyB2YWx1ZSBwcm92aWRlZCB0bworICB0aGUgVEFSR0VUX0RJUkVDVE9SWSBvcHRpb24KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjkgXChnZXRfcHJvcGVydHlcKToKKyAgZ2V0X3Byb3BlcnR5IGdpdmVuIG5vbi1leGlzdGVudCB0YXJnZXQgZm9yIFRBUkdFVF9ESVJFQ1RPUlkKKyAgbm9uX2V4aXN0aW5nX2RpcgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6MTEgXChnZXRfc291cmNlX2ZpbGVfcHJvcGVydHlcKToKKyAgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5IGdpdmVuIG5vbi1leGlzdGVudCBESVJFQ1RPUlkgUFJPUEVSVFkKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjEyIFwoZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5XCk6CisgIGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6MTMgXChnZXRfc291cmNlX2ZpbGVfcHJvcGVydHlcKToKKyAgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5IGdpdmVuIG5vbi1leGlzdGVudCB0YXJnZXQgZm9yIFRBUkdFVF9ESVJFQ1RPUlkKKyAgUFJPUEVSVFkKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjE0IFwoZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5XCk6CisgIGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9zb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9zb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI4N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L3NvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhhLnR4dCBESVJFQ1RPUlkgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKGEudHh0IERJUkVDVE9SWSBub25fZXhpc3RpbmdfZGlyIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmIikKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhhLnR4dCBUQVJHRVRfRElSRUNUT1JZIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmIikKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhhLnR4dCBUQVJHRVRfRElSRUNUT1JZIG5vbl9leGlzdGluZ190YXJnZXQgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQorCitnZXRfcHJvcGVydHkoaW5fdmFyIFNPVVJDRSBhLnR4dCBESVJFQ1RPUlkgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKK2dldF9wcm9wZXJ0eShpbl92YXIgU09VUkNFIGEudHh0IERJUkVDVE9SWSBub25fZXhpc3RpbmdfZGlyIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMpCitnZXRfcHJvcGVydHkoaW5fdmFyIFNPVVJDRSBhLnR4dCBUQVJHRVRfRElSRUNUT1JZIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMpCitnZXRfcHJvcGVydHkoaW5fdmFyIFNPVVJDRSBhLnR4dCBUQVJHRVRfRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKKworZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KGluX3ZhciBhLnR4dCBESVJFQ1RPUlkgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKK2dldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShpbl92YXIgYS50eHQgRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKK2dldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShpbl92YXIgYS50eHQgVEFSR0VUX0RJUkVDVE9SWSBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQorZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KGluX3ZhciBhLnR4dCBUQVJHRVRfRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2lmL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvaWYvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaWYvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvaWYvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGUvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvQ01ha2VMaXN0cy50eHQKaW5kZXggYzdlOTlhZC4uNmRkOGNkZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL0NNYWtlTGlzdHMudHh0CkBAIC0xLDYgKzEsMyBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNCkKLWlmKFJ1bkNNYWtlX1RFU1QgTUFUQ0hFUyAiXmZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTIikKLSAgY21ha2VfcG9saWN5KFNFVCBDTVAwMDg3IE5FVykKLWVuZGlmKCkKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA3MDU3MGI3Li5kODNhMDdjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTU1LDM4ICsxNTUsNiBAQAogcnVuX2luc3RhbGxfdGVzdChUQVJHRVRTLVJQQVRIKQogcnVuX2luc3RhbGxfdGVzdChJbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXMpCiAKLWlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkRhcndpbiIpCi0gIGlmKE5PVCBDTWFrZV9JTlNUQUxMX05BTUVfVE9PTF9CVUcpCi0gICAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcykKLSAgICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLXVucmVzb2x2ZWQpCi0gICAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdCkKLSAgICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLW5vdGZpbGUpCi0gIGVuZGlmKCkKLSAgcnVuX2NtYWtlKGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXByb2plY3QpCi0gIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMSkKLSAgcnVuX2NtYWtlKGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyKQotZWxzZWlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIldpbmRvd3MiKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy11bnJlc29sdmVkKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlKQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtcHJvamVjdCkKLSAgcnVuX2NtYWtlKGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxKQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczIpCi1lbHNlaWYoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQotICBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeWEwiKQotICAgIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgpCi0gIGVuZGlmKCkKLSAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC11bnJlc29sdmVkKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWNvbmZsaWN0KQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUpCi0gIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1wcm9qZWN0KQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEpCi0gIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMikKLWVsc2UoKQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQpCi1lbmRpZigpCi0KIHNldChydW5faW5zdGFsbF90ZXN0X2NvbXBvbmVudHMgMSkKIHJ1bl9pbnN0YWxsX3Rlc3QoRklMRVMtRVhDTFVERV9GUk9NX0FMTCkKIHJ1bl9pbnN0YWxsX3Rlc3QoVEFSR0VUUy1FWENMVURFX0ZST01fQUxMKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjZkMWZlLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLV5DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczFcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgWW91IGhhdmUgdXNlZCBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBpbiBwcm9qZWN0IG1vZGVcLiAgVGhpcyBpcwotICBwcm9iYWJseSBub3Qgd2hhdCB5b3UgaW50ZW5kZWQgdG8gZG9cLiAgSW5zdGVhZCwgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIGl0IGluCi0gIGFuIGluc3RhbGxcKENPREVcKSBvciBpbnN0YWxsXChTQ1JJUFRcKSBjb21tYW5kXC4gIEZvciBleGFtcGxlOgotCi0gICAgaW5zdGFsbFwoQ09ERSBcW1xbCi0gICAgICBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKLSAgICAgICAgIyBcLlwuXC4KLSAgICAgICAgXCkKLSAgICAgIF1dXCkKLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKLVRoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzXC4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdFwuCi0KLUNNYWtlIEVycm9yIGF0IGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIGZpbGUgVW5yZWNvZ25pemVkIGFyZ3VtZW50OiAiaW52YWxpZCIKLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyLXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZmE4MWYuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMi1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMlwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBZb3UgaGF2ZSB1c2VkIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGluIHByb2plY3QgbW9kZVwuICBUaGlzIGlzCi0gIHByb2JhYmx5IG5vdCB3aGF0IHlvdSBpbnRlbmRlZCB0byBkb1wuICBJbnN0ZWFkLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcgaXQgaW4KLSAgYW4gaW5zdGFsbFwoQ09ERVwpIG9yIGluc3RhbGxcKFNDUklQVFwpIGNvbW1hbmRcLiAgRm9yIGV4YW1wbGU6Ci0KLSAgICBpbnN0YWxsXChDT0RFIFxbXFsKLSAgICAgIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUwotICAgICAgICAjIFwuXC5cLgotICAgICAgICBcKQotICAgICAgXV1cKQotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQotVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnNcLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0XC4KLQotQ01ha2UgRXJyb3IgYXQgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczJcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgZmlsZSBLZXl3b3JkcyBtaXNzaW5nIHZhbHVlczoKLQotICAgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIKLSAgICBVTlJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIKLSAgICBDT05GTElDVElOR19ERVBFTkRFTkNJRVNfUFJFRklYCi0gICAgQlVORExFX0VYRUNVVEFCTEUKLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWFsbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYWxsLWNoZWNrLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjYzMGYwLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYWxsLWNoZWNrLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotZnVuY3Rpb24oY2hlY2tfY29udGVudHMgZmlsZW5hbWUgY29udGVudHNfcmVnZXgpCi0gIGlmKEVYSVNUUyAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iKQotICAgIGZpbGUoUkVBRCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iIGNvbnRlbnRzKQotICAgIGlmKE5PVCBjb250ZW50cyBNQVRDSEVTICIke2NvbnRlbnRzX3JlZ2V4fSIpCi0gICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlIGNvbnRlbnRzOgotICAke2NvbnRlbnRzfQotZG8gbm90IG1hdGNoIHdoYXQgd2UgZXhwZWN0ZWQ6Ci0gICR7Y29udGVudHNfcmVnZXh9Ci1pbiBmaWxlOgotICAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfVxuIikKLSAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKLSAgICBlbmRpZigpCi0gIGVsc2UoKQotICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3QiKQotICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKLSAgZW5kaWYoKQotZW5kZnVuY3Rpb24oKQotCi1zZXQoX2NoZWNrCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvbGlidGVzdF9ycGF0aFwuc29dXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL2xpYnRlc3RfcnVucGF0aFwuc29dXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoL2xpYnJwYXRoXC5zb11dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfcGFyZW50L2xpYnJwYXRoX3BhcmVudFwuc29dXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaC9saWJycGF0aF9zZWFyY2hcLnNvXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoL2xpYnJ1bnBhdGhcLnNvXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaC9saWJydW5wYXRoX3NlYXJjaFwuc29dXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL2RlcHMxLnR4dCAiXiR7X2NoZWNrfSQiKQotY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMi50eHQgIl4ke19jaGVja30kIikKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCi1zZXQoX2NoZWNrCi0gIFtbbGlicnBhdGhfdW5yZXNvbHZlZFwuc29dXQotICBbW2xpYnJ1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWRcLnNvXV0KLSAgW1tsaWJydW5wYXRoX3VucmVzb2x2ZWRcLnNvXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzMi50eHQgIl4ke19jaGVja30kIikKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQotc2V0KF9jaGVjawotICAiXmxpYmNvbmZsaWN0XFwuc286W147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvY29uZmxpY3QvbGliY29uZmxpY3RcXC5zbztbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9jb25mbGljdDIvbGliY29uZmxpY3RcXC5zb1xuJCIKLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczEudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczIudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczMudHh0ICIke19jaGVja30iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYWxsLXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyM2FlNDguLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1hbGwtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi1eQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQotCi0qQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCi0KLSpDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2gKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCi0KLSpDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQotCi0qQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2gKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCi0KLSpDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCi0KLSpDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQotCi0qQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjkyMzQ4Li4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLV5DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIGZpbGUgTXVsdGlwbGUgY29uZmxpY3RpbmcgcGF0aHMgZm91bmQgZm9yIGxpYnJwYXRoXC5zbzoKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aDEvbGlicnBhdGhcLnNvCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoMi9saWJycGF0aFwuc28kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUtYWxsLXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYTg3YzkuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1ub3RmaWxlLWFsbC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1eQ01ha2UgRXJyb3IgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBmaWxlIEZhaWxlZCB0byBydW4gb2JqZHVtcCBvbjoKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUtYnVpbGQvcm9vdC1hbGwvYmluL1wuXC4vbGliL2xpYnRlc3RcLnNvJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXguY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMGY5ZjEuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi1lbmFibGVfbGFuZ3VhZ2UoQykKLWNtYWtlX3BvbGljeShTRVQgQ01QMDA5NSBORVcpCi0KLXNldCh0ZXN0X3JwYXRoX25hbWVzCi0gIHByZWV4Y2x1ZGVkCi0gIHJwYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aAotICBycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX3BhcmVudAotICBycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX29yaWdpbgotICBycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX3NlYXJjaAotICBycGF0aF91bnJlc29sdmVkCi0gIGNvbmZsaWN0Ci0gICkKLXNldCh0ZXN0X3J1bnBhdGhfbmFtZXMKLSAgcnVucGF0aF9wb3N0ZXhjbHVkZWQKLSAgcnVucGF0aAotICBydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQKLSAgcnVucGF0aF9vcmlnaW4KLSAgcnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZAotICBydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKLSAgcnVucGF0aF9zZWFyY2gKLSAgcnVucGF0aF91bnJlc29sdmVkCi0gICkKLQotZmlsZShSRU1PVkUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIikKLWFkZF9saWJyYXJ5KHRlc3RfcnBhdGggU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIpCi1mb3JlYWNoKG5hbWUgJHt0ZXN0X3JwYXRoX25hbWVzfSkKLSAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiICJ2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCi0gIGFkZF9saWJyYXJ5KCR7bmFtZX0gU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIpCi0KLSAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIiAiZXh0ZXJuIHZvaWQgJHtuYW1lfSh2b2lkKTtcbiIpCi1lbmRmb3JlYWNoKCkKLWZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIgInZvaWQgdGVzdF9ycGF0aCh2b2lkKVxue1xuIikKLWZvcmVhY2gobmFtZSAke3Rlc3RfcnBhdGhfbmFtZXN9KQotICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3JwYXRoLmMiICIgICR7bmFtZX0oKTtcbiIpCi1lbmRmb3JlYWNoKCkKLWZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIgIn1cbiIpCi0KLWluc3RhbGwoVEFSR0VUUyBycGF0aF9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3JwYXRoX3Bvc3RleGNsdWRlZCkKLWluc3RhbGwoVEFSR0VUUyBycGF0aCBERVNUSU5BVElPTiBsaWIvcnBhdGgpCi1pbnN0YWxsKFRBUkdFVFMgcnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCkKLWluc3RhbGwoVEFSR0VUUyBycGF0aF9vcmlnaW4gREVTVElOQVRJT04gbGliL3JwYXRoX29yaWdpbikKLWluc3RhbGwoVEFSR0VUUyBycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkKQotaW5zdGFsbChUQVJHRVRTIHJwYXRoIHJwYXRoX29yaWdpbiBycGF0aF9wYXJlbnQgREVTVElOQVRJT04gbGliL3JwYXRoX3BhcmVudCkKLWluc3RhbGwoVEFSR0VUUyBycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkKQotaW5zdGFsbChUQVJHRVRTIHJwYXRoIHJwYXRoX29yaWdpbiBycGF0aF9wYXJlbnQgcnBhdGhfc2VhcmNoIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9zZWFyY2gpCi1pbnN0YWxsKFRBUkdFVFMgY29uZmxpY3QgREVTVElOQVRJT04gbGliL2NvbmZsaWN0KQotCi10YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9ycGF0aCBQUklWQVRFICR7dGVzdF9ycGF0aF9uYW1lc30pCi1zZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RfcnBhdGggUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnBhdGhfcG9zdGV4Y2x1ZGVkIgotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnBhdGgiCi0gICJcJE9SSUdJTi9ycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkIgotICAiXCR7T1JJR0lOfS9ycGF0aF9vcmlnaW4iCi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9jb25mbGljdCIKLSAgKQotdGFyZ2V0X2xpbmtfb3B0aW9ucyh0ZXN0X3JwYXRoIFBSSVZBVEUgLVdsLC0tZGlzYWJsZS1uZXctZHRhZ3MpCi0KLWZpbGUoUkVNT1ZFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIikKLWFkZF9saWJyYXJ5KHRlc3RfcnVucGF0aCBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiKQotZm9yZWFjaChuYW1lICR7dGVzdF9ydW5wYXRoX25hbWVzfSBycGF0aCBjb25mbGljdCkKLSAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiICJ2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCi0gIGlmKE5PVCBuYW1lIE1BVENIRVMgIl4ocnBhdGh8Y29uZmxpY3QpJCIpCi0gICAgYWRkX2xpYnJhcnkoJHtuYW1lfSBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vJHtuYW1lfS5jIikKLSAgZW5kaWYoKQotCi0gIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIiAiZXh0ZXJuIHZvaWQgJHtuYW1lfSh2b2lkKTtcbiIpCi1lbmRmb3JlYWNoKCkKLWZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIiAidm9pZCB0ZXN0X3J1bnBhdGgodm9pZClcbntcbiIpCi1mb3JlYWNoKG5hbWUgJHt0ZXN0X3J1bnBhdGhfbmFtZXN9IHJwYXRoIGNvbmZsaWN0KQotICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3J1bnBhdGguYyIgIiAgJHtuYW1lfSgpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiICJ9XG4iKQotCi1pbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3J1bnBhdGhfcG9zdGV4Y2x1ZGVkKQotaW5zdGFsbChUQVJHRVRTIHJ1bnBhdGggREVTVElOQVRJT04gbGliL3J1bnBhdGgpCi1pbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQpCi1pbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9vcmlnaW4gREVTVElOQVRJT04gbGliL3J1bnBhdGhfb3JpZ2luKQotaW5zdGFsbChUQVJHRVRTIHJ1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWQgREVTVElOQVRJT04gbGliL3J1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWQpCi1pbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQpCi1pbnN0YWxsKFRBUkdFVFMgcnVucGF0aCBydW5wYXRoX29yaWdpbiBydW5wYXRoX3NlYXJjaCBERVNUSU5BVElPTiBsaWIvcnVucGF0aF9zZWFyY2gpCi1pbnN0YWxsKFRBUkdFVFMgY29uZmxpY3QgREVTVElOQVRJT04gbGliL2NvbmZsaWN0MikKLQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfcnVucGF0aCBQUklWQVRFICR7dGVzdF9ydW5wYXRoX25hbWVzfSBycGF0aCBjb25mbGljdCkKLXNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdF9ydW5wYXRoIFBST1BFUlRZIElOU1RBTExfUlBBVEgKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3J1bnBhdGgvLi4vcnBhdGgiICMgRW5zdXJlIHRoYXQgZmlsZXMgdGhhdCBkb24ndCBjb25mbGljdCBhcmUgdHJlYXRlZCBjb3JyZWN0bHkKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3J1bnBhdGhfcG9zdGV4Y2x1ZGVkIgotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnVucGF0aCIKLSAgIlwke09SSUdJTn0vcnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkIgotICAiXCRPUklHSU4vcnVucGF0aF9vcmlnaW4iCi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9jb25mbGljdDIiCi0gICkKLXRhcmdldF9saW5rX29wdGlvbnModGVzdF9ydW5wYXRoIFBSSVZBVEUgLVdsLC0tZW5hYmxlLW5ldy1kdGFncykKLQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0X3JwYXRoICR7dGVzdF9ycGF0aF9uYW1lc30gdGVzdF9ydW5wYXRoICR7dGVzdF9ydW5wYXRoX25hbWVzfSBQUk9QRVJUWSBMSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgbGliKQotaW5zdGFsbChUQVJHRVRTIHRlc3RfcnBhdGggdGVzdF9ydW5wYXRoIERFU1RJTkFUSU9OIGxpYikKLQotYWRkX2V4ZWN1dGFibGUodG9wZXhlIGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4L3RvcGV4ZS5jKQotYWRkX2xpYnJhcnkodG9wbGliIFNIQVJFRCBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC90b3BsaWIuYykKLWFkZF9saWJyYXJ5KHRvcG1vZCBNT0RVTEUgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgvdG9wbGliLmMpCi10YXJnZXRfbGlua19saWJyYXJpZXModG9wZXhlIFBSSVZBVEUgdGVzdF9ycGF0aCB0ZXN0X3J1bnBhdGgpCi10YXJnZXRfbGlua19saWJyYXJpZXModG9wbGliIFBSSVZBVEUgdGVzdF9ycGF0aCB0ZXN0X3J1bnBhdGgpCi10YXJnZXRfbGlua19saWJyYXJpZXModG9wbW9kIFBSSVZBVEUgdGVzdF9ycGF0aCB0ZXN0X3J1bnBhdGgpCi1zZXRfcHJvcGVydHkoVEFSR0VUIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIFBST1BFUlRZIElOU1RBTExfUlBBVEgKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliIgotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnBhdGhfcGFyZW50X3Bvc3RleGNsdWRlZCIKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3JwYXRoX3BhcmVudCIKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3J1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWQiCi0gICkKLXRhcmdldF9saW5rX29wdGlvbnModG9wZXhlIFBSSVZBVEUgLVdsLC0tZGlzYWJsZS1uZXctZHRhZ3MpCi10YXJnZXRfbGlua19vcHRpb25zKHRvcGxpYiBQUklWQVRFIC1XbCwtLWRpc2FibGUtbmV3LWR0YWdzKQotdGFyZ2V0X2xpbmtfb3B0aW9ucyh0b3Btb2QgUFJJVkFURSAtV2wsLS1kaXNhYmxlLW5ldy1kdGFncykKLQotaW5zdGFsbChUQVJHRVRTIHRvcGV4ZSB0b3BsaWIgUlVOVElNRSBERVNUSU5BVElPTiBiaW4gTElCUkFSWSBERVNUSU5BVElPTiBsaWIpCi1pbnN0YWxsKFRBUkdFVFMgdG9wbW9kIExJQlJBUlkgREVTVElOQVRJT04gbGliL21vZHVsZXMpCi0KLWluc3RhbGwoQ09ERSBbWwotICBmdW5jdGlvbihleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcyBkZXBzZmlsZSB1ZGVwc2ZpbGUgY2RlcHNmaWxlKQotICAgIGZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCi0gICAgICBSRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIGRlcHMKLSAgICAgIFVOUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUiB1ZGVwcwotICAgICAgQ09ORkxJQ1RJTkdfREVQRU5ERU5DSUVTX1BSRUZJWCBjZGVwcwotICAgICAgUFJFX0lOQ0xVREVfUkVHRVhFUwotICAgICAgICAiXmxpYih0ZXN0X3JwYXRofHJwYXRoX3Bvc3RleGNsdWRlZHxycGF0aHxycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkfHJwYXRoX3BhcmVudHxycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkfHJwYXRoX29yaWdpbnxycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkfHJwYXRoX3NlYXJjaHxycGF0aF91bnJlc29sdmVkfHRlc3RfcnVucGF0aHxydW5wYXRoX3Bvc3RleGNsdWRlZHxydW5wYXRofHJ1bnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZHxydW5wYXRoX29yaWdpbnxydW5wYXRoX3BhcmVudF91bnJlc29sdmVkfHJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZHxydW5wYXRoX3NlYXJjaHxydW5wYXRoX3VucmVzb2x2ZWR8Y29uZmxpY3QpXFwuc28kIgotICAgICAgICAiXmxpYmNcXC5zbyIKLSAgICAgIFBSRV9FWENMVURFX1JFR0VYRVMgIi4qIgotICAgICAgUE9TVF9JTkNMVURFX1JFR0VYRVMgIl4uKi8obGlidGVzdF9ycGF0aHxycGF0aC9saWJycGF0aHxycGF0aF9wYXJlbnQvbGlicnBhdGhfcGFyZW50fHJwYXRoX3NlYXJjaC9saWJycGF0aF9zZWFyY2h8bGlidGVzdF9ydW5wYXRofHJ1bnBhdGgvbGlicnVucGF0aHxydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWR8cnVucGF0aF9vcmlnaW58cnVucGF0aF9zZWFyY2gvbGlicnVucGF0aF9zZWFyY2h8Y29uZmxpY3QyPy9saWJjb25mbGljdClcXC5zbyQiCi0gICAgICBQT1NUX0VYQ0xVREVfUkVHRVhFUyAiLioiCi0gICAgICBESVJFQ1RPUklFUwotICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL3JwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQiCi0gICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvcnBhdGhfc2VhcmNoIgotICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL3J1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZCIKLSAgICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi9ydW5wYXRoX3NlYXJjaCIKLSAgICAgICR7QVJHTn0KLSAgICAgICkKLSAgICBsaXN0KFNPUlQgZGVwcykKLSAgICBsaXN0KFNPUlQgdWRlcHMpCi0gICAgbGlzdChTT1JUIGNkZXBzX0ZJTEVOQU1FUykKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7ZGVwc2ZpbGV9IiAiJHtkZXBzfSIpCi0gICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke3VkZXBzZmlsZX0iICIke3VkZXBzfSIpCi0gICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIiKQotICAgIGZvcmVhY2goY2RlcCBJTiBMSVNUUyBjZGVwc19GSUxFTkFNRVMpCi0gICAgICBzZXQoY2RlcF92YWx1ZXMgJHtjZGVwc18ke2NkZXB9fSkKLSAgICAgIGxpc3QoU09SVCBjZGVwX3ZhbHVlcykKLSAgICAgIGZpbGUoQVBQRU5EICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiR7Y2RlcH06JHtjZGVwX3ZhbHVlc31cbiIpCi0gICAgZW5kZm9yZWFjaCgpCi0gIGVuZGZ1bmN0aW9uKCkKLQotICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKLSAgICBkZXBzMS50eHQgdWRlcHMxLnR4dCBjZGVwczEudHh0Ci0gICAgRVhFQ1VUQUJMRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCi0gICAgKQotCi0gIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAotICAgIGRlcHMyLnR4dCB1ZGVwczIudHh0IGNkZXBzMi50eHQKLSAgICBMSUJSQVJJRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcGxpYj4iCi0gICAgKQotCi0gIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAotICAgIGRlcHMzLnR4dCB1ZGVwczMudHh0IGNkZXBzMy50eHQKLSAgICBNT0RVTEVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL21vZHVsZXMvJDxUQVJHRVRfRklMRV9OQU1FOnRvcG1vZD4iCi0gICAgKQotICBdXSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1hbGwtY2hlY2suY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNmRkZTEuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1hbGwtY2hlY2suY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotZnVuY3Rpb24oY2hlY2tfY29udGVudHMgZmlsZW5hbWUgY29udGVudHNfcmVnZXgpCi0gIGlmKEVYSVNUUyAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iKQotICAgIGZpbGUoUkVBRCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iIGNvbnRlbnRzKQotICAgIGlmKE5PVCBjb250ZW50cyBNQVRDSEVTICIke2NvbnRlbnRzX3JlZ2V4fSIpCi0gICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlIGNvbnRlbnRzOgotICAke2NvbnRlbnRzfQotZG8gbm90IG1hdGNoIHdoYXQgd2UgZXhwZWN0ZWQ6Ci0gICR7Y29udGVudHNfcmVnZXh9Ci1pbiBmaWxlOgotICAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfVxuIikKLSAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKLSAgICBlbmRpZigpCi0gIGVsc2UoKQotICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3QiKQotICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKLSAgZW5kaWYoKQotZW5kZnVuY3Rpb24oKQotCi1zZXQoX2NoZWNrCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2Jpbi8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9iaW4vLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbL3Vzci9saWIvbGliU3lzdGVtXC5CXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMxLnR4dCAiXiR7X2NoZWNrfSQiKQotCi1zZXQoX2NoZWNrCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9sb2FkZXJfcGF0aC9saWJsb2FkZXJfcGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aF9sb2FkZXJfcGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aFwuZHlsaWJdXQotICBbWy91c3IvbGliL2xpYlN5c3RlbVwuQlwuZHlsaWJdXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL2RlcHMyLnR4dCAiXiR7X2NoZWNrfSQiKQotCi1zZXQoX2NoZWNrCi0gIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQotICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9idW5kbGUvbGliZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQvbGliZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZFwuZHlsaWJdXQotICBbW0Bsb2FkZXJfcGF0aC9sb2FkZXJfcGF0aF91bnJlc29sdmVkL2xpYmxvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbL3Vzci9saWIvbGliU3lzdGVtXC5CXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX2J1bmRsZS9saWJleGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCi0gIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZC9saWJleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCi0gIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzMy50eHQgIl4ke19jaGVja30kIikKLQotc2V0KF9jaGVjawotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9iaW4vLi4vbGliL2V4ZWN1dGFibGVfcGF0aC9saWJleGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvYmluLy4uL2xpYi9ycGF0aF9leGVjdXRhYmxlX3BhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9sb2FkZXJfcGF0aC9saWJsb2FkZXJfcGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aF9sb2FkZXJfcGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aFwuZHlsaWJdXQotICBbWy91c3IvbGliL2xpYlN5c3RlbVwuQlwuZHlsaWJdXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL2RlcHM0LnR4dCAiXiR7X2NoZWNrfSQiKQotCi1zZXQoX2NoZWNrCi0gIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX2J1bmRsZS9saWJleGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCi0gIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzNC50eHQgIl4ke19jaGVja30kIikKLQotc2V0KF9jaGVjawotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvYnVuZGxlX2V4ZWN1dGFibGUvYmluLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbL3Vzci9saWIvbGliU3lzdGVtXC5CXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczUudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczUudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2J1bmRsZV9leGVjdXRhYmxlL2Jpbi8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX2J1bmRsZS9saWJleGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9sb2FkZXJfcGF0aC9saWJsb2FkZXJfcGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aF9sb2FkZXJfcGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aFwuZHlsaWJdXQotICBbWy91c3IvbGliL2xpYlN5c3RlbVwuQlwuZHlsaWJdXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL2RlcHM2LnR4dCAiXiR7X2NoZWNrfSQiKQotCi1zZXQoX2NoZWNrCi0gIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQotICBbW0Bsb2FkZXJfcGF0aC9sb2FkZXJfcGF0aF91bnJlc29sdmVkL2xpYmxvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHM2LnR4dCAiXiR7X2NoZWNrfSQiKQotCi1zZXQoX2NoZWNrCi0gICJebGliY29uZmxpY3RcXC5keWxpYjpbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2NvbmZsaWN0L2xpYmNvbmZsaWN0XFwuZHlsaWI7W147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9jb25mbGljdDIvbGliY29uZmxpY3RcXC5keWxpYlxuJCIKLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczEudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczIudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczMudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczQudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczUudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczYudHh0ICIke19jaGVja30iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjOWU5N2EuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC1hbGwtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgZmlsZSBNdWx0aXBsZSBjb25mbGljdGluZyBwYXRocyBmb3VuZCBmb3IgbGlicnBhdGhcLmR5bGliOgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoMS9saWJycGF0aFwuZHlsaWIKLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC1idWlsZC9yb290LWFsbC9saWIvcnBhdGgyL2xpYnJwYXRoXC5keWxpYiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNhYjlmMS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLW5vdGZpbGUtYWxsLXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLV5DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIGZpbGUgRmFpbGVkIHRvIHJ1biBvdG9vbCBvbjoKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLW5vdGZpbGUtYnVpbGQvcm9vdC1hbGwvYmluL1wuXC4vbGliL2xpYnRlc3RcLmR5bGliJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYjA1YjMuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi1lbmFibGVfbGFuZ3VhZ2UoQykKLQotc2V0KHRlc3RsaWJfbmFtZXMKLSAgcHJlZXhjbHVkZWQKLSAgZXhlY3V0YWJsZV9wYXRoCi0gIGV4ZWN1dGFibGVfcGF0aF9idW5kbGUKLSAgZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAotICBsb2FkZXJfcGF0aAotICBsb2FkZXJfcGF0aF91bnJlc29sdmVkCi0gIGxvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aAotICBycGF0aF91bnJlc29sdmVkCi0gIHJwYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aF9leGVjdXRhYmxlX3BhdGgKLSAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZQotICBycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX2xvYWRlcl9wYXRoCi0gIHJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQKLSAgcnBhdGhfbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIG5vcm1hbAotICBub3JtYWxfdW5yZXNvbHZlZAotICBub3JtYWxfcG9zdGV4Y2x1ZGVkCi0gIGNvbmZsaWN0Ci0gICkKLQotZmlsZShSRU1PVkUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIikKLWFkZF9saWJyYXJ5KHRlc3RsaWIgU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIpCi1mb3JlYWNoKG5hbWUgJHt0ZXN0bGliX25hbWVzfSkKLSAgaWYobmFtZSBTVFJFUVVBTCAibm9ybWFsIikKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9L25vcm1hbC5jIiAiZXh0ZXJuIHZvaWQgcnBhdGgodm9pZCk7XG52b2lkIG5vcm1hbCh2b2lkKVxue1xuICBycGF0aCgpO1xufVxuIikKLSAgZWxzZSgpCi0gICAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiICJ2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCi0gIGVuZGlmKCkKLSAgYWRkX2xpYnJhcnkoJHtuYW1lfSBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vJHtuYW1lfS5jIikKLQotICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJleHRlcm4gdm9pZCAke25hbWV9KHZvaWQpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAidm9pZCB0ZXN0bGliKHZvaWQpXG57XG4iKQotZm9yZWFjaChuYW1lICR7dGVzdGxpYl9uYW1lc30pCi0gIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgIiAgJHtuYW1lfSgpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAifVxuIikKLXNldF9wcm9wZXJ0eShUQVJHRVQgJHt0ZXN0bGliX25hbWVzfSBQUk9QRVJUWSBCVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIgMSkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhub3JtYWwgUFJJVkFURSBycGF0aCkKLXNldF9wcm9wZXJ0eShUQVJHRVQgbm9ybWFsIFBST1BFUlRZIElOU1RBTExfUlBBVEgKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoIgotICApCi0KLWZpbGUoV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYl9jb25mbGljdC5jIiAiZXh0ZXJuIHZvaWQgY29uZmxpY3Qodm9pZCk7XG52b2lkIHRlc3RsaWJfY29uZmxpY3Qodm9pZClcbntcbiAgY29uZmxpY3QoKTtcbn1cbiIpCi1hZGRfbGlicmFyeSh0ZXN0bGliX2NvbmZsaWN0IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX2NvbmZsaWN0LmMiKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWJfY29uZmxpY3QgUFJJVkFURSBjb25mbGljdCkKLQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0bGliIFBST1BFUlRZIElOU1RBTExfUlBBVEgKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGgiCi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX3VucmVzb2x2ZWQiCi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX3Bvc3RleGNsdWRlZCIKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvY29uZmxpY3QiCi0gIEBleGVjdXRhYmxlX3BhdGgvLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aAotICBAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9ycGF0aF9leGVjdXRhYmxlX3BhdGhfdW5yZXNvbHZlZAotICBAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9ycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIEBsb2FkZXJfcGF0aC9ycGF0aF9sb2FkZXJfcGF0aAotICBAbG9hZGVyX3BhdGgvcnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZAotICBAbG9hZGVyX3BhdGgvcnBhdGhfbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gICkKLXNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdGxpYl9jb25mbGljdCBQUk9QRVJUWSBJTlNUQUxMX1JQQVRICi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2NvbmZsaWN0MiIKLSAgKQotCi1mb3JlYWNoKHQKLSAgZXhlY3V0YWJsZV9wYXRoCi0gIGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgbG9hZGVyX3BhdGgKLSAgbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoCi0gIHJwYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aF9leGVjdXRhYmxlX3BhdGgKLSAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aF9sb2FkZXJfcGF0aAotICBycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgY29uZmxpY3QKLSAgKQotICBpbnN0YWxsKFRBUkdFVFMgJHt0fSBERVNUSU5BVElPTiBleGVjdXRhYmxlL2xpYi8ke3R9KQotZW5kZm9yZWFjaCgpCi1pbnN0YWxsKFRBUkdFVFMgY29uZmxpY3QgREVTVElOQVRJT04gZXhlY3V0YWJsZS9saWIvY29uZmxpY3QyKQotCi1mb3JlYWNoKHQKLSAgZXhlY3V0YWJsZV9wYXRoX2J1bmRsZQotICBleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIGxvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZQotICBycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAotICApCi0gIGluc3RhbGwoVEFSR0VUUyAke3R9IERFU1RJTkFUSU9OIGJ1bmRsZV9leGVjdXRhYmxlL2xpYi8ke3R9KQotZW5kZm9yZWFjaCgpCi0KLWZvcmVhY2godCBleGVjdXRhYmxlX3BhdGggZXhlY3V0YWJsZV9wYXRoX2J1bmRsZSBleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkKQotICBzZXRfcHJvcGVydHkoVEFSR0VUICR7dH0gUFJPUEVSVFkgSU5TVEFMTF9OQU1FX0RJUiBAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi8ke3R9KQotZW5kZm9yZWFjaCgpCi0KLWZvcmVhY2godCBsb2FkZXJfcGF0aCBsb2FkZXJfcGF0aF91bnJlc29sdmVkIGxvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZCkKLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke3R9IFBST1BFUlRZIElOU1RBTExfTkFNRV9ESVIgQGxvYWRlcl9wYXRoLyR7dH0pCi1lbmRmb3JlYWNoKCkKLQotZm9yZWFjaCh0Ci0gIHJwYXRoCi0gIHJwYXRoX3VucmVzb2x2ZWQKLSAgcnBhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX2V4ZWN1dGFibGVfcGF0aAotICBycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlCi0gIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfbG9hZGVyX3BhdGgKLSAgcnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZAotICBycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgY29uZmxpY3QKLSAgKQotICBzZXRfcHJvcGVydHkoVEFSR0VUICR7dH0gUFJPUEVSVFkgSU5TVEFMTF9OQU1FX0RJUiBAcnBhdGgpCi1lbmRmb3JlYWNoKCkKLQotZm9yZWFjaCh0IG5vcm1hbCBub3JtYWxfdW5yZXNvbHZlZCBub3JtYWxfcG9zdGV4Y2x1ZGVkKQotICBzZXRfcHJvcGVydHkoVEFSR0VUICR7dH0gUFJPUEVSVFkgSU5TVEFMTF9OQU1FX0RJUiAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi8ke3R9IikKLSAgaWYoTk9UIHQgU1RSRVFVQUwgIm5vcm1hbF91bnJlc29sdmVkIikKLSAgICBpbnN0YWxsKFRBUkdFVFMgJHt0fSBERVNUSU5BVElPTiBleGVjdXRhYmxlL2xpYi8ke3R9KQotICBlbmRpZigpCi1lbmRmb3JlYWNoKCkKLQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWIgUFJJVkFURSAke3Rlc3RsaWJfbmFtZXN9KQotCi1hZGRfZXhlY3V0YWJsZSh0b3BleGUgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MvdG9wZXhlLmMpCi1hZGRfbGlicmFyeSh0b3BsaWIgU0hBUkVEIGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zL3RvcGxpYi5jKQotYWRkX2xpYnJhcnkodG9wbW9kIE1PRFVMRSBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy90b3BsaWIuYykKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0b3BleGUgUFJJVkFURSB0ZXN0bGliKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGxpYiBQUklWQVRFIHRlc3RsaWIpCi10YXJnZXRfbGlua19saWJyYXJpZXModG9wbW9kIFBSSVZBVEUgdGVzdGxpYikKLQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0b3BleGUgdG9wbGliIHRvcG1vZCBQUk9QRVJUWSBJTlNUQUxMX1JQQVRIICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliIikKLQotaW5zdGFsbChUQVJHRVRTIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIHRlc3RsaWIgdGVzdGxpYl9jb25mbGljdCBSVU5USU1FIERFU1RJTkFUSU9OIGV4ZWN1dGFibGUvYmluIExJQlJBUlkgREVTVElOQVRJT04gZXhlY3V0YWJsZS9saWIpCi1pbnN0YWxsKFRBUkdFVFMgdG9wZXhlIHRvcGxpYiB0b3Btb2QgdGVzdGxpYiB0ZXN0bGliX2NvbmZsaWN0IFJVTlRJTUUgREVTVElOQVRJT04gYnVuZGxlX2V4ZWN1dGFibGUvYmluIExJQlJBUlkgREVTVElOQVRJT04gYnVuZGxlX2V4ZWN1dGFibGUvbGliKQotCi1pbnN0YWxsKENPREUgW1sKLSAgZnVuY3Rpb24oZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMgZGVwc2ZpbGUgdWRlcHNmaWxlIGNkZXBzZmlsZSkKLSAgICBmaWxlKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUwotICAgICAgUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUiBkZXBzCi0gICAgICBVTlJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgdWRlcHMKLSAgICAgIENPTkZMSUNUSU5HX0RFUEVOREVOQ0lFU19QUkVGSVggY2RlcHMKLSAgICAgIFBSRV9JTkNMVURFX1JFR0VYRVMgIl4uKi9saWIodGVzdGxpYnxleGVjdXRhYmxlX3BhdGh8ZXhlY3V0YWJsZV9wYXRoX2J1bmRsZXxleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkfGxvYWRlcl9wYXRofGxvYWRlcl9wYXRoX3VucmVzb2x2ZWR8bG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkfHJwYXRofHJwYXRoX3VucmVzb2x2ZWR8cnBhdGhfcG9zdGV4Y2x1ZGVkfHJwYXRoX2V4ZWN1dGFibGVfcGF0aHxycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlfHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWR8cnBhdGhfbG9hZGVyX3BhdGh8cnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZHxycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWR8bm9ybWFsfG5vcm1hbF91bnJlc29sdmVkfG5vcm1hbF9wb3N0ZXhjbHVkZWR8Y29uZmxpY3R8U3lzdGVtXFwuQilcXC5keWxpYiQiCi0gICAgICBQUkVfRVhDTFVERV9SRUdFWEVTICIuKiIKLSAgICAgIFBPU1RfSU5DTFVERV9SRUdFWEVTICJeLiovbGliKHRlc3RsaWJ8ZXhlY3V0YWJsZV9wYXRofGV4ZWN1dGFibGVfcGF0aF9idW5kbGV8bG9hZGVyX3BhdGh8cnBhdGh8cnBhdGhfZXhlY3V0YWJsZV9wYXRofHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGV8cnBhdGhfbG9hZGVyX3BhdGh8bm9ybWFsfGNvbmZsaWN0fFN5c3RlbVxcLkIpXFwuZHlsaWIkIgotICAgICAgUE9TVF9FWENMVURFX1JFR0VYRVMgIi4qIgotICAgICAgJHtBUkdOfQotICAgICAgKQotICAgIGxpc3QoU09SVCBkZXBzKQotICAgIGxpc3QoU09SVCB1ZGVwcykKLSAgICBsaXN0KFNPUlQgY2RlcHNfRklMRU5BTUVTKQotICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtkZXBzZmlsZX0iICIke2RlcHN9IikKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7dWRlcHNmaWxlfSIgIiR7dWRlcHN9IikKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiIpCi0gICAgZm9yZWFjaChjZGVwIElOIExJU1RTIGNkZXBzX0ZJTEVOQU1FUykKLSAgICAgIHNldChjZGVwX3ZhbHVlcyAke2NkZXBzXyR7Y2RlcH19KQotICAgICAgbGlzdChTT1JUIGNkZXBfdmFsdWVzKQotICAgICAgZmlsZShBUFBFTkQgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtjZGVwc2ZpbGV9IiAiJHtjZGVwfToke2NkZXBfdmFsdWVzfVxuIikKLSAgICBlbmRmb3JlYWNoKCkKLSAgZW5kZnVuY3Rpb24oKQotCi0gIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAotICAgIGRlcHMxLnR4dCB1ZGVwczEudHh0IGNkZXBzMS50eHQKLSAgICBFWEVDVVRBQkxFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczIudHh0IHVkZXBzMi50eHQgY2RlcHMyLnR4dAotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BsaWI+IgotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczMudHh0IHVkZXBzMy50eHQgY2RlcHMzLnR4dAotICAgIE1PRFVMRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbW9kPiIKLSAgICBMSUJSQVJJRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9leGVjdXRhYmxlL2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCi0gICAgKQotCi0gIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAotICAgIGRlcHM0LnR4dCB1ZGVwczQudHh0IGNkZXBzNC50eHQKLSAgICBFWEVDVVRBQkxFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICBCVU5ETEVfRVhFQ1VUQUJMRQotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2J1bmRsZV9leGVjdXRhYmxlL2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wZXhlPiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczUudHh0IHVkZXBzNS50eHQgY2RlcHM1LnR4dAotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BsaWI+IgotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICBCVU5ETEVfRVhFQ1VUQUJMRSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYnVuZGxlX2V4ZWN1dGFibGUvYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgotICAgICkKLQotICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKLSAgICBkZXBzNi50eHQgdWRlcHM2LnR4dCBjZGVwczYudHh0Ci0gICAgTU9EVUxFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3Btb2Q+IgotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICBCVU5ETEVfRVhFQ1VUQUJMRSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYnVuZGxlX2V4ZWN1dGFibGUvYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgotICAgICkKLSAgXV0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXByb2plY3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtcHJvamVjdC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTA2NjQ1Li4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtcHJvamVjdC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1wcm9qZWN0XC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIFlvdSBoYXZlIHVzZWQgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgaW4gcHJvamVjdCBtb2RlXC4gIFRoaXMgaXMKLSAgcHJvYmFibHkgbm90IHdoYXQgeW91IGludGVuZGVkIHRvIGRvXC4gIEluc3RlYWQsIHBsZWFzZSBjb25zaWRlciB1c2luZyBpdCBpbgotICBhbiBpbnN0YWxsXChDT0RFXCkgb3IgaW5zdGFsbFwoU0NSSVBUXCkgY29tbWFuZFwuICBGb3IgZXhhbXBsZToKLQotICAgIGluc3RhbGxcKENPREUgXFtcWwotICAgICAgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCi0gICAgICAgICMgXC5cLlwuCi0gICAgICAgIFwpCi0gICAgICBdXVwpCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCi1UaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiODM1Yy4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXVuc3VwcG9ydGVkLXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLV5DTWFrZSBFcnJvciBhdCBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy11bnN1cHBvcnRlZFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBmaWxlIEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUyBpcyBub3Qgc3VwcG9ydGVkIG9uIHN5c3RlbSAiW14KLSBdKyIKLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtYWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWFsbC1jaGVjay5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyMGNlNC4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtYWxsLWNoZWNrLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotZnVuY3Rpb24oY2hlY2tfY29udGVudHMgZmlsZW5hbWUgY29udGVudHNfcmVnZXgpCi0gIGlmKEVYSVNUUyAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iKQotICAgIGZpbGUoUkVBRCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iIGNvbnRlbnRzKQotICAgIGlmKE5PVCBjb250ZW50cyBNQVRDSEVTICIke2NvbnRlbnRzX3JlZ2V4fSIpCi0gICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlIGNvbnRlbnRzOgotICAke2NvbnRlbnRzfQotZG8gbm90IG1hdGNoIHdoYXQgd2UgZXhwZWN0ZWQ6Ci0gICR7Y29udGVudHNfcmVnZXh9Ci1pbiBmaWxlOgotICAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfVxuIikKLSAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKLSAgICBlbmRpZigpCi0gIGVsc2UoKQotICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3QiKQotICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKLSAgZW5kaWYoKQotZW5kZnVuY3Rpb24oKQotCi1zZXQoX2NoZWNrCi0gIFs9W1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1idWlsZC9yb290LWFsbC9iaW4vXC5jb25mbGljdC9cLlwuLyhsaWIpP2xpYmRpclwuZGxsXT1dCi0gIFs9W1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1idWlsZC9yb290LWFsbC9iaW4vXC5zZWFyY2gvKGxpYik/c2VhcmNoXC5kbGxdPV0KLSAgWz1bW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi8obGliKT90ZXN0bGliXC5kbGxdPV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMS50eHQgIl4ke19jaGVja30kIikKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCi1jaGVja19jb250ZW50cyhkZXBzL2RlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQotc2V0KF9jaGVjawotICBbPVsobGliKT91bnJlc29sdmVkXC5kbGxdPV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzMi50eHQgIl4ke19jaGVja30kIikKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQotc2V0KF9jaGVjawotICAiXihsaWIpP2NvbmZsaWN0XFwuZGxsOlteO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1idWlsZC9yb290LWFsbC9iaW4vXFwuY29uZmxpY3QvKGxpYik/Y29uZmxpY3RcXC5kbGw7W147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi8obGliKT9jb25mbGljdFxcLmRsbFxuJCIKLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczEudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczIudHh0ICIke19jaGVja30iKQotY2hlY2tfY29udGVudHMoZGVwcy9jZGVwczMudHh0ICIke19jaGVja30iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmVjYjkzLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1jb25mbGljdC1hbGwtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgZmlsZSBNdWx0aXBsZSBjb25mbGljdGluZyBwYXRocyBmb3VuZCBmb3IgKGxpYik/cGF0aFwuZGxsOgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1jb25mbGljdC1idWlsZC9yb290LWFsbC9saWIvdGVzdDEvKGxpYik/cGF0aFwuZGxsCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1jb25mbGljdC1idWlsZC9yb290LWFsbC9saWIvdGVzdDIvKGxpYik/cGF0aFwuZGxsJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLW5vdGZpbGUtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyMTQwOS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgZmlsZSBGYWlsZWQgdG8gcnVuIChkdW1wYmlufG9iamR1bXApIG9uOgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlLWJ1aWxkL3Jvb3QtYWxsL2Jpbi8obGliKT90ZXN0XC5kbGwkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5Mjg4ZDguLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLWVuYWJsZV9sYW5ndWFnZShDKQotCi1zZXQodGVzdGxpYl9uYW1lcwotICBwcmVleGNsdWRlZAotICBsaWJkaXJfcG9zdGV4Y2x1ZGVkCi0gIGxpYmRpcgotICBzZWFyY2hfcG9zdGV4Y2x1ZGVkCi0gIHNlYXJjaAotICB1bnJlc29sdmVkCi0gIGNvbmZsaWN0Ci0gICkKLQotZmlsZShSRU1PVkUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIikKLWFkZF9saWJyYXJ5KHRlc3RsaWIgU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIpCi1mb3JlYWNoKG5hbWUgJHt0ZXN0bGliX25hbWVzfSkKLSAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiICJfX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCAke25hbWV9KHZvaWQpIHt9XG4iKQotICBhZGRfbGlicmFyeSgke25hbWV9IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiKQotCi0gIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgIl9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4gdm9pZCAke25hbWV9KHZvaWQpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAiX19kZWNsc3BlYyhkbGxleHBvcnQpIHZvaWQgdGVzdGxpYih2b2lkKVxue1xuIikKLWZvcmVhY2gobmFtZSAke3Rlc3RsaWJfbmFtZXN9KQotICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICIgICR7bmFtZX0oKTtcbiIpCi1lbmRmb3JlYWNoKCkKLWZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgIn1cbiIpCi0KLXRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0bGliIFBSSVZBVEUgJHt0ZXN0bGliX25hbWVzfSkKLQotZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX2NvbmZsaWN0LmMiICJfX2RlY2xzcGVjKGRsbGltcG9ydCkgZXh0ZXJuIHZvaWQgY29uZmxpY3Qodm9pZCk7XG5fX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCB0ZXN0bGliX2NvbmZsaWN0KHZvaWQpXG57XG4gIGNvbmZsaWN0KCk7XG59XG4iKQotYWRkX2xpYnJhcnkodGVzdGxpYl9jb25mbGljdCBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYl9jb25mbGljdC5jIikKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0bGliX2NvbmZsaWN0IFBSSVZBVEUgY29uZmxpY3QpCi0KLWZpbGUoV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYl9ub2NvbmZsaWN0LmMiICJfX2RlY2xzcGVjKGRsbGltcG9ydCkgZXh0ZXJuIHZvaWQgbGliZGlyKHZvaWQpO1xuX19kZWNsc3BlYyhkbGxleHBvcnQpIHZvaWQgdGVzdGxpYl9ub2NvbmZsaWN0KHZvaWQpXG57XG4gIGxpYmRpcigpO1xufVxuIikKLWFkZF9saWJyYXJ5KHRlc3RsaWJfbm9jb25mbGljdCBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYl9ub2NvbmZsaWN0LmMiKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWJfbm9jb25mbGljdCBQUklWQVRFIGxpYmRpcikKLQotaW5zdGFsbChUQVJHRVRTIHRlc3RsaWIgbGliZGlyX3Bvc3RleGNsdWRlZCBsaWJkaXIgY29uZmxpY3QgdGVzdGxpYl9ub2NvbmZsaWN0IERFU1RJTkFUSU9OIGJpbikKLWluc3RhbGwoVEFSR0VUUyBsaWJkaXIgc2VhcmNoX3Bvc3RleGNsdWRlZCBzZWFyY2ggREVTVElOQVRJT04gYmluLy5zZWFyY2gpICMgUHJlZml4aW5nIHdpdGggIi4iIGVuc3VyZXMgaXQgaXMgdGhlIGZpcnN0IGl0ZW0gYWZ0ZXIgbGlzdChTT1JUKQotaW5zdGFsbChUQVJHRVRTIHRlc3RsaWJfY29uZmxpY3QgY29uZmxpY3QgREVTVElOQVRJT04gYmluLy5jb25mbGljdCkKLQotYWRkX2V4ZWN1dGFibGUodG9wZXhlIGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MvdG9wZXhlLmMpCi1hZGRfbGlicmFyeSh0b3BsaWIgU0hBUkVEIGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MvdG9wbGliLmMpCi1hZGRfbGlicmFyeSh0b3Btb2QgTU9EVUxFIGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MvdG9wbGliLmMpCi10YXJnZXRfbGlua19saWJyYXJpZXModG9wZXhlIFBSSVZBVEUgdGVzdGxpYikKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0b3BsaWIgUFJJVkFURSB0ZXN0bGliKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcG1vZCBQUklWQVRFIHRlc3RsaWIpCi0KLWluc3RhbGwoVEFSR0VUUyB0b3BleGUgdG9wbGliIHRvcG1vZCBERVNUSU5BVElPTiBiaW4pCi0KLWluc3RhbGwoQ09ERSBbWwotICBmdW5jdGlvbihleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcyBkZXBzZmlsZSB1ZGVwc2ZpbGUgY2RlcHNmaWxlKQotICAgIGZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCi0gICAgICBSRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIGRlcHMKLSAgICAgIFVOUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUiB1ZGVwcwotICAgICAgQ09ORkxJQ1RJTkdfREVQRU5ERU5DSUVTX1BSRUZJWCBjZGVwcwotICAgICAgUFJFX0lOQ0xVREVfUkVHRVhFUwotICAgICAgICAiXihsaWIpP3Rlc3RsaWJcXC5kbGwkIgotICAgICAgICAiXihsaWIpP2xpYmRpcl9wb3N0ZXhjbHVkZWRcXC5kbGwkIgotICAgICAgICAiXihsaWIpP2xpYmRpclxcLmRsbCQiCi0gICAgICAgICJeKGxpYik/c2VhcmNoX3Bvc3RleGNsdWRlZFxcLmRsbCQiCi0gICAgICAgICJeKGxpYik/c2VhcmNoXFwuZGxsJCIKLSAgICAgICAgIl4obGliKT91bnJlc29sdmVkXFwuZGxsJCIKLSAgICAgICAgIl4obGliKT9jb25mbGljdFxcLmRsbCQiCi0gICAgICAgICJea2VybmVsMzJcXC5kbGwkIgotICAgICAgUFJFX0VYQ0xVREVfUkVHRVhFUyAiLioiCi0gICAgICBQT1NUX0lOQ0xVREVfUkVHRVhFUwotICAgICAgICAiXi4qLyhsaWIpP3Rlc3RsaWJcXC5kbGwkIgotICAgICAgICAiXi4qLyhsaWIpP2xpYmRpclxcLmRsbCQiCi0gICAgICAgICJeLiovKGxpYik/c2VhcmNoXFwuZGxsJCIKLSAgICAgICAgIl4uKi8obGliKT9jb25mbGljdFxcLmRsbCQiCi0gICAgICBQT1NUX0VYQ0xVREVfUkVHRVhFUyAiLioiCi0gICAgICBESVJFQ1RPUklFUwotICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5zZWFyY2giCi0gICAgICAke0FSR059Ci0gICAgICApCi0gICAgbGlzdChTT1JUIGRlcHMpCi0gICAgbGlzdChTT1JUIHVkZXBzKQotICAgIGxpc3QoU09SVCBjZGVwc19GSUxFTkFNRVMpCi0gICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2RlcHNmaWxlfSIgIiR7ZGVwc30iKQotICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHt1ZGVwc2ZpbGV9IiAiJHt1ZGVwc30iKQotICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtjZGVwc2ZpbGV9IiAiIikKLSAgICBmb3JlYWNoKGNkZXAgSU4gTElTVFMgY2RlcHNfRklMRU5BTUVTKQotICAgICAgc2V0KGNkZXBfdmFsdWVzICR7Y2RlcHNfJHtjZGVwfX0pCi0gICAgICBsaXN0KFNPUlQgY2RlcF92YWx1ZXMpCi0gICAgICBmaWxlKEFQUEVORCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIke2NkZXB9OiR7Y2RlcF92YWx1ZXN9XG4iKQotICAgIGVuZGZvcmVhY2goKQotICBlbmRmdW5jdGlvbigpCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczEudHh0IHVkZXBzMS50eHQgY2RlcHMxLnR4dAotICAgIEVYRUNVVEFCTEVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8uY29uZmxpY3QvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8uY29uZmxpY3QvLi4vJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfbm9jb25mbGljdD4iCi0gICAgKQotCi0gIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAotICAgIGRlcHMyLnR4dCB1ZGVwczIudHh0IGNkZXBzMi50eHQKLSAgICBMSUJSQVJJRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGxpYj4iCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8uLi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9ub2NvbmZsaWN0PiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczMudHh0IHVkZXBzMy50eHQgY2RlcHMzLnR4dAotICAgIE1PRFVMRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcG1vZD4iCi0gICAgTElCUkFSSUVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8uLi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9ub2NvbmZsaWN0PiIKLSAgICApCi0gIF1dKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dsb2JhbC1pbnRlcmZhY2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dsb2JhbC1pbnRlcmZhY2Utc3RkZXJyLnR4dAppbmRleCAyM2I0NWQ5Li4zODU4NWViIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2xvYmFsLWludGVyZmFjZS1zdGRlcnIudHh0CkBAIC0zLDcgKzMsNyBAQAogCiAgICAgR0xPQkFMCiAKLSAgVHJpZWQgZXh0ZW5zaW9ucyggXC5bQS1aYS16K10rfAotICkqCisgIFRyaWVkIGV4dGVuc2lvbnMgXC5jIFwuQyAuKgorLioKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2ludmFsaWRfbmFtZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2ludmFsaWRfbmFtZS5jbWFrZQppbmRleCA5YTk2NWFhLi41NzVmY2M2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX25hbWUuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9uYW1lLmNtYWtlCkBAIC0xLDQgKzEsNCBAQAotCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogYWRkX2xpYnJhcnkoaWYkYWNlIElOVEVSRkFDRSkKIAogYWRkX2xpYnJhcnkoaWZhY2U6OnRhcmdldCBJTlRFUkZBQ0UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9saXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvbGlzdC9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9saXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2xpc3QvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9saXN0L0dFVC1DTVAwMDA3LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2xpc3QvR0VULUNNUDAwMDctV0FSTi1zdGRlcnIudHh0CmluZGV4IGEwZjg4MzcuLjkxMDNiZDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2xpc3QvR0VULUNNUDAwMDctV0FSTi1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2xpc3QvR0VULUNNUDAwMDctV0FSTi1zdGRlcnIudHh0CkBAIC0xLDQgKzEsMTMgQEAKLV5DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgR0VULUNNUDAwMDctV0FSTi5jbWFrZTo0IFwobGlzdFwpOgorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgR0VULUNNUDAwMDctV0FSTi5jbWFrZToxIFwoY21ha2VfcG9saWN5XCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQorKworQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IEdFVC1DTVAwMDA3LVdBUk4uY21ha2U6NCBcKGxpc3RcKToKICAgUG9saWN5IENNUDAwMDcgaXMgbm90IHNldDogbGlzdCBjb21tYW5kIG5vIGxvbmdlciBpZ25vcmVzIGVtcHR5IGVsZW1lbnRzLgogICBSdW4gImNtYWtlIC0taGVscC1wb2xpY3kgQ01QMDAwNyIgZm9yIHBvbGljeSBkZXRhaWxzLiAgVXNlIHRoZSBjbWFrZV9wb2xpY3kKICAgY29tbWFuZCB0byBzZXQgdGhlIHBvbGljeSBhbmQgc3VwcHJlc3MgdGhpcyB3YXJuaW5nLiAgTGlzdCBoYXMgdmFsdWUgPQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWF0aC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21hdGgvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWF0aC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tYXRoL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWluZGVudC1tdWx0aWxpbmUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtaW5kZW50LW11bHRpbGluZS5jbWFrZQppbmRleCAwZjc4OWJmLi4zODE1NTY5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtaW5kZW50LW11bHRpbGluZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtaW5kZW50LW11bHRpbGluZS5jbWFrZQpAQCAtOSw1ICs5LDUgQEAKIG1lc3NhZ2UoU1RBVFVTICIke21zZ31cblxuIikKIG1lc3NhZ2UoU1RBVFVTICIke21zZ30iKQogIyBUaGlzIGlzIGp1c3QgdG8gbWFrZSBzdXJlIE5PVElDRSBtZXNzYWdlcyBhcmUgYWxzbyBnZXQgaW5kZW50ZWQ6Ci0jIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xOTQxOCNub3RlXzU4ODAxMQorIyBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xOTQxOCNub3RlXzU4ODAxMQogbWVzc2FnZShOT1RJQ0UgIiR7bXNnfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9ub19pbnN0YWxsX3ByZWZpeC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL25vX2luc3RhbGxfcHJlZml4L0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL25vX2luc3RhbGxfcHJlZml4L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL25vX2luc3RhbGxfcHJlZml4L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvcHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3Byb2plY3QvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNGIzZGU4NCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvcHJvamVjdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9wcm9qZWN0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvcHNldWRvX2NwcGNoZWNrLmMgYi9UZXN0cy9SdW5DTWFrZS9wc2V1ZG9fY3BwY2hlY2suYwppbmRleCA1YjE1MzFiLi5lODA2MjBjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9wc2V1ZG9fY3BwY2hlY2suYworKysgYi9UZXN0cy9SdW5DTWFrZS9wc2V1ZG9fY3BwY2hlY2suYwpAQCAtMTEsNyArMTEsOCBAQAogICAgICAgZnByaW50ZihzdGRvdXQsICJzdGRvdXQgZnJvbSBiYWQgY29tbWFuZCBsaW5lIGFyZyAnLWJhZCdcbiIpOwogICAgICAgZnByaW50ZihzdGRlcnIsICJzdGRlcnIgZnJvbSBiYWQgY29tbWFuZCBsaW5lIGFyZyAnLWJhZCdcbiIpOwogICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1lcnJvciIpID09IDApIHsKKyAgICB9CisgICAgaWYgKHN0cmNtcChhcmd2W2ldLCAiLWVycm9yIikgPT0gMCkgewogICAgICAgLy8gVGhlIHJlYWwgY3BwY2hlY2sgYWxsb3dzIHRvIHNldCB0aGUgZXhpdGNvZGUgd2l0aCAtLWVycm9yLWV4aXRjb2RlCiAgICAgICByZXN1bHQgPSA1OwogICAgIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3NldF9wcm9wZXJ0eS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9zZXRfcHJvcGVydHkvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDhkNDYxNGMuLjY5MmM2YjkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3NldF9wcm9wZXJ0eS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtOSw2ICs5LDcgQEAKIHJ1bl9jbWFrZShMSU5LX0RJUkVDVE9SSUVTKQogcnVuX2NtYWtlKExJTktfTElCUkFSSUVTKQogcnVuX2NtYWtlKFNPVVJDRVMpCitydW5fY21ha2UoU09VUkNFX0ZJTEUpCiBydW5fY21ha2UoVFlQRSkKIHJ1bl9jbWFrZShVU0VSX1BST1ApCiBydW5fY21ha2UoVVNFUl9QUk9QX0lOSEVSSVRFRCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9zZXRfcHJvcGVydHkvU09VUkNFX0ZJTEUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9zZXRfcHJvcGVydHkvU09VUkNFX0ZJTEUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1NPVVJDRV9GSUxFLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9zZXRfcHJvcGVydHkvU09VUkNFX0ZJTEUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmI2Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1NPVVJDRV9GSUxFLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyMiBAQAorXkNNYWtlIEVycm9yIGF0IFNPVVJDRV9GSUxFLmNtYWtlOjEgXChzZXRfcHJvcGVydHlcKToKKyAgc2V0X3Byb3BlcnR5IGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG5vIHZhbHVlIHByb3ZpZGVkIHRvCisgIHRoZSBESVJFQ1RPUlkgb3B0aW9uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBTT1VSQ0VfRklMRS5jbWFrZToyIFwoc2V0X3Byb3BlcnR5XCk6CisgIHNldF9wcm9wZXJ0eSBnaXZlbiBub24tZXhpc3RlbnQgRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IFNPVVJDRV9GSUxFLmNtYWtlOjMgXChzZXRfcHJvcGVydHlcKToKKyAgc2V0X3Byb3BlcnR5IGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG5vIHZhbHVlIHByb3ZpZGVkIHRvCisgIHRoZSBUQVJHRVRfRElSRUNUT1JZIG9wdGlvbgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgU09VUkNFX0ZJTEUuY21ha2U6NCBcKHNldF9wcm9wZXJ0eVwpOgorICBzZXRfcHJvcGVydHkgZ2l2ZW4gbm9uLWV4aXN0ZW50IHRhcmdldCBmb3IgVEFSR0VUX0RJUkVDVE9SWQorICBub25fZXhpc3RpbmdfdGFyZ2V0CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1NPVVJDRV9GSUxFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1NPVVJDRV9GSUxFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZDc4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9zZXRfcHJvcGVydHkvU09VUkNFX0ZJTEUuY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXRfcHJvcGVydHkoU09VUkNFIGEudHh0IERJUkVDVE9SWSBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQorc2V0X3Byb3BlcnR5KFNPVVJDRSBhLnR4dCBESVJFQ1RPUlkgbm9uX2V4aXN0aW5nX2RpciBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQorc2V0X3Byb3BlcnR5KFNPVVJDRSBhLnR4dCBUQVJHRVRfRElSRUNUT1JZIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgImRlZiIpCitzZXRfcHJvcGVydHkoU09VUkNFIGEudHh0IFRBUkdFVF9ESVJFQ1RPUlkgbm9uX2V4aXN0aW5nX3RhcmdldCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzVhYWExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleC5jbWFrZQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbihhc3NlcnRfc3RyZXF1YWwgaW5wdXQgYWN0dWFsIGV4cGVjdGVkKQorICBpZihOT1QgZXhwZWN0ZWQgU1RSRVFVQUwgYWN0dWFsKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiT3V0cHV0IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWRcbklucHV0IHN0cmluZzpcbiAgJHtpbnB1dH1cbkV4cGVjdGVkOlxuICAke2V4cGVjdGVkfVxuQWN0dWFsOlxuICAke2FjdHVhbH0iKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK3NldChfaW5wdXQxICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLiIpCitzdHJpbmcoSEVYICIke19pbnB1dDF9IiBfcmVzdWx0MSkKK2Fzc2VydF9zdHJlcXVhbCgiJHtfaW5wdXQxfSIgIiR7X3Jlc3VsdDF9IiAiNTQ2ODY1MjA3MTc1Njk2MzZiMjA2MjcyNmY3NzZlMjA2NjZmNzgyMDZhNzU2ZDcwNzMyMDZmNzY2NTcyMjA3NDY4NjUyMDZjNjE3YTc5MjA2NDZmNjcyZSIpCisKK3NldChfaW5wdXQyICJIZWxsbyB3b3JsZCEiKQorc3RyaW5nKEhFWCAiJHtfaW5wdXQyfSIgX3Jlc3VsdDIpCithc3NlcnRfc3RyZXF1YWwoIiR7X2lucHV0Mn0iICIke19yZXN1bHQyfSIgIjQ4NjU2YzZjNmYyMDc3NmY3MjZjNjQyMSIpCisKK3NldChfaW5wdXQzICJBc2ggbmF6ZyBkdXJiYXR1bMO7a1xuQXNoIG5hemcgZ2ltYmF0dWxcbkFzaCBuYXpnIHRocmFrYXR1bMO7a1xuQWdoIGJ1cnp1bS1pc2hpIGtyaW1wYXR1bCIpCitzdHJpbmcoSEVYICIke19pbnB1dDN9IiBfcmVzdWx0MykKK2Fzc2VydF9zdHJlcXVhbCgiJHtfaW5wdXQzfSIgIiR7X3Jlc3VsdDN9IiAiNDE3MzY4MjA2ZTYxN2E2NzIwNjQ3NTcyNjI2MTc0NzU2Y2MzYmI2YjBhNDE3MzY4MjA2ZTYxN2E2NzIwNjc2OTZkNjI2MTc0NzU2YzBhNDE3MzY4MjA2ZTYxN2E2NzIwNzQ2ODcyNjE2YjYxNzQ3NTZjYzNiYjZiMGE0MTY3NjgyMDYyNzU3MjdhNzU2ZDJkNjk3MzY4NjkyMDZiNzI2OTZkNzA2MTc0NzU2YyIpCisKK3N0cmluZyhIRVggIiIgX3Jlc3VsdF9lbXB0eSkKK2Fzc2VydF9zdHJlcXVhbCgiIiAiJHtfcmVzdWx0X2VtcHR5fSIgIiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDRmNzlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3Mtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBIZXhOb3RFbm91Z2hBcmdzXC5jbWFrZTpbMC05XSsgXChzdHJpbmdcKToKKyAgc3RyaW5nIEluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwMmFmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK3N0cmluZyhIRVggIkhlbGxvIHdvcmxkISIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiNDBlZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IEhleFRvb01hbnlBcmdzXC5jbWFrZTpbMC05XSsgXChzdHJpbmdcKToKKyAgc3RyaW5nIEluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTg2Y2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK3N0cmluZyhIRVggIkhlbGxvIHdvcmxkISIgX291dHB1dCBiYWQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBjNDMyYjRlLi5iYjdjYjE3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTM3LDMgKzM3LDcgQEAKIHJ1bl9jbWFrZShSZXBlYXQpCiBydW5fY21ha2UoUmVwZWF0Tm9BcmdzKQogcnVuX2NtYWtlKFJlcGVhdE5lZ2F0aXZlQ291bnQpCisKK3J1bl9jbWFrZShIZXgpCitydW5fY21ha2UoSGV4VG9vTWFueUFyZ3MpCitydW5fY21ha2UoSGV4Tm90RW5vdWdoQXJncykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9DTVAwMDk5LmNtYWtlCmluZGV4IGEyYmUyNzkuLmFmZjFlMzMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTkuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS5jbWFrZQpAQCAtNSw3ICs1LDcgQEAKIHNldChDTUFLRV9DX1VTRV9SRVNQT05TRV9GSUxFX0ZPUl9MSUJSQVJJRVMgRkFMU0UpCiAKIGFkZF9saWJyYXJ5KExpbmtEaXJzX2ludGVyZmFjZSBJTlRFUkZBQ0UpCi10YXJnZXRfbGlua19kaXJlY3RvcmllcyAoTGlua0RpcnNfaW50ZXJmYWNlIElOVEVSRkFDRSAiL0RJUl9JTlRFUkZBQ0UifSkKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzIChMaW5rRGlyc19pbnRlcmZhY2UgSU5URVJGQUNFICIvRElSX0lOVEVSRkFDRSIpCiAKIGFkZF9saWJyYXJ5KExpbmtEaXJzX3N0YXRpYyBTVEFUSUMgbGliLmMpCiB0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtEaXJzX3N0YXRpYyBQUklWQVRFIExpbmtEaXJzX2ludGVyZmFjZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBhNzRlZTI1Li42OTllODcxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yMSwxMCArMjEsMjEgQEAKICAgICBzZXQoVkVSQk9TRSAtLSAtdikKICAgZW5kaWYoKQogCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdVQUdFKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgaW50ZXJmYWNlIExpbmtEaXJzX2V4ZV9pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgYmFzaWMgTGlua0RpcnNfZXhlX2MgLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgTElOS0VSX0xBTkdVQUdFIExpbmtEaXJzX2V4ZV9jeHggLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdfQU5EX0lEKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBpbnRlcmZhY2UgTGlua0RpcnNfZXhlX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBiYXNpYyBMaW5rRGlyc19leGVfYyAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBMSU5LRVJfTEFOR1VBR0UgTGlua0RpcnNfZXhlX2N4eCAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisKKwogICBydW5fY21ha2UoQ01QMDA5OS1ORVcpCiAgIHJ1bl9jbWFrZV90YXJnZXQoQ01QMDA5OS1ORVcgYmFzaWMgTGlua0RpcnNfZXhlICR7VkVSQk9TRX0pCiAKLQogICBydW5fY21ha2UoQ01QMDA5OS1PTEQpCiAgIHJ1bl9jbWFrZV90YXJnZXQoQ01QMDA5OS1PTEQgYmFzaWMgTGlua0RpcnNfZXhlICR7VkVSQk9TRX0pCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzOTgxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQ1hYKQorc2V0IChJTlZBTElEX0xBTkcgQykKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhc2ljLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYXNpYy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY2NDFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYXNpYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFzaWMtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYXNpYy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMTNkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworc2V0IChUWVBFIElOVEVSRkFDRSkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NTY0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDIwIEBACisKK2lmIChOT1QgVkFMSURfTEFORykKKyAgc2V0IChWQUxJRF9MQU5HIEMpCitlbmRpZigpCitpZiAoTk9UIElOVkFMSURfTEFORykKKyAgc2V0IChJTlZBTElEX0xBTkcgQ1hYKQorZW5kaWYoKQoraWYgKE5PVCBUWVBFKQorICBzZXQgKFRZUEUgRVhFKQorZW5kaWYoKQorCitpZiAoTk9UIGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiRElSXyR7VkFMSURfTEFOR31fJHtUWVBFfSIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnRElSXyR7VkFMSURfTEFOR31fJHtUWVBFfScuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl8ke0lOVkFMSURfTEFOR31fJHtUWVBFfSIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdESVJfJHtJTlZBTElEX0xBTkd9XyR7VFlQRX0nLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI2NmIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZQpAQCAtMCwwICsxLDIzIEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK3NldChDTUFLRV9DX1VTRV9SRVNQT05TRV9GSUxFX0ZPUl9MSUJSQVJJRVMgRkFMU0UpCitzZXQoQ01BS0VfQ1hYX1VTRV9SRVNQT05TRV9GSUxFX0ZPUl9MSUJSQVJJRVMgRkFMU0UpCisKK2FkZF9saWJyYXJ5KExpbmtEaXJzX2ludGVyZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyAoTGlua0RpcnNfaW50ZXJmYWNlIElOVEVSRkFDRSAiJDwkPExJTktfTEFOR1VBR0U6Qz46L0RJUl9DX0lOVEVSRkFDRT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJDwkPExJTktfTEFOR1VBR0U6Q1hYPjovRElSX0NYWF9JTlRFUkZBQ0U+IikKKworYWRkX2V4ZWN1dGFibGUoTGlua0RpcnNfZXhlX2ludGVyZmFjZSBleGUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0RpcnNfZXhlX2ludGVyZmFjZSBQUklWQVRFIExpbmtEaXJzX2ludGVyZmFjZSkKKworYWRkX2V4ZWN1dGFibGUoTGlua0RpcnNfZXhlX2MgZXhlLmMpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyAoTGlua0RpcnNfZXhlX2MgUFJJVkFURSAiJDwkPExJTktfTEFOR1VBR0U6Qz46L0RJUl9DX0VYRT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJDwkPExJTktfTEFOR1VBR0U6Q1hYPjovRElSX0NYWF9FWEU+IikKKworYWRkX2V4ZWN1dGFibGUoTGlua0RpcnNfZXhlX2N4eCBleGUuYykKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzIChMaW5rRGlyc19leGVfY3h4IFBSSVZBVEUgIiQ8JDxMSU5LX0xBTkdVQUdFOkM+Oi9ESVJfQ19FWEU+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkPCQ8TElOS19MQU5HVUFHRTpDWFg+Oi9ESVJfQ1hYX0VYRT4iKQorc2V0X3Byb3BlcnR5IChUQVJHRVQgTGlua0RpcnNfZXhlX2N4eCBQUk9QRVJUWSBMSU5LRVJfTEFOR1VBR0UgQ1hYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRmODUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZGRlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYXNpYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYXNpYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyODczOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitzZXQgKFRZUEUgSU5URVJGQUNFKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODcyOTUzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMjYgQEAKKworaWYgKE5PVCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCitpZiAoTk9UIFRZUEUpCisgIHNldCAoVFlQRSBFWEUpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJESVJfJHtWQUxJRF9MQU5HfV8ke1RZUEV9IikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdESVJfJHtWQUxJRF9MQU5HfV8ke1RZUEV9Jy5cbiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJESVJfJHtJTlZBTElEX0xBTkd9XyR7VFlQRX0iKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnRElSXyR7SU5WQUxJRF9MQU5HfV8ke1RZUEV9ICcuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl8oJHtWQUxJRF9MQU5HfXwke0lOVkFMSURfTEFOR30pX0JBRElEXyR7VFlQRX0iKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnRElSXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESURfJHtUWVBFfScuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2IzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELmNtYWtlCkBAIC0wLDAgKzEsMjkgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQorc2V0KENNQUtFX0NfVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0xJQlJBUklFUyBGQUxTRSkKK3NldChDTUFLRV9DWFhfVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0xJQlJBUklFUyBGQUxTRSkKKworYWRkX2xpYnJhcnkoTGlua0RpcnNfaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzIChMaW5rRGlyc19pbnRlcmZhY2UgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46L0RJUl9DX0lOVEVSRkFDRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+Oi9ESVJfQ1hYX0lOVEVSRkFDRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+Oi9ESVJfQ19CQURJRF9JTlRFUkZBQ0U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+Oi9ESVJfQ1hYX0JBRElEX0lOVEVSRkFDRT4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtEaXJzX2V4ZV9pbnRlcmZhY2UgZXhlLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtEaXJzX2V4ZV9pbnRlcmZhY2UgUFJJVkFURSBMaW5rRGlyc19pbnRlcmZhY2UpCisKK2FkZF9leGVjdXRhYmxlKExpbmtEaXJzX2V4ZV9jIGV4ZS5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua0RpcnNfZXhlX2MgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+Oi9ESVJfQ19FWEU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+Oi9ESVJfQ1hYX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46L0RJUl9DX0JBRElEX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjovRElSX0NYWF9CQURJRF9FWEU+KQorCithZGRfZXhlY3V0YWJsZShMaW5rRGlyc19leGVfY3h4IGV4ZS5jKQordGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgKExpbmtEaXJzX2V4ZV9jeHggUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+Oi9ESVJfQ19FWEU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+Oi9ESVJfQ1hYX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46L0RJUl9DX0JBRElEX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjovRElSX0NYWF9CQURJRF9FWEU+KQorc2V0X3Byb3BlcnR5IChUQVJHRVQgTGlua0RpcnNfZXhlX2N4eCBQUk9QRVJUWSBMSU5LRVJfTEFOR1VBR0UgQ1hYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL0FsaWFzVGFyZ2V0cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9BbGlhc1RhcmdldHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2Yjc0YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9BbGlhc1RhcmdldHMuY21ha2UKQEAgLTAsMCArMSwzOSBAQAorCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNi4uLjMuMTcpCisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeSAoZnVuYyBTSEFSRUQgZnVuYy5jKQorCitzZXQgKGJpbmFyeV9kaXIgIiR7Q01BS0VfQklOQVJZX0RJUn0iKQorZ2V0X3Byb3BlcnR5IChpc19tdWx0aV9jb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCitpZiAoaXNfbXVsdGlfY29uZmlnKQorICBzdHJpbmcgKEFQUEVORCBiaW5hcnlfZGlyICIvUmVsZWFzZSIpCitlbmRpZigpCisKKworYWRkX2xpYnJhcnkoaW1wb3J0LWxvY2FsIFNIQVJFRCBJTVBPUlRFRCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0LWxvY2FsIFBST1BFUlRZIElNUE9SVEVEX0xPQ0FUSU9OICIke2JpbmFyeV9kaXJ9LyR7Q01BS0VfU1RBVElDX0xJQlJBUllfUFJFRklYfWZ1bmMke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH0iKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnQtbG9jYWwgUFJPUEVSVFkgSU1QT1JURURfSU1QTElCICIke2JpbmFyeV9kaXJ9LyR7Q01BS0VfU1RBVElDX0xJQlJBUllfUFJFRklYfWZ1bmMke0NNQUtFX0lNUE9SVF9MSUJSQVJZX1NVRkZJWH0iKQorYWRkX2xpYnJhcnkoYWxpYXM6OmxvY2FsIEFMSUFTIGltcG9ydC1sb2NhbCkKKworYWRkX2xpYnJhcnkgKGxpYi1sb2NhbCBTSEFSRUQgbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGxpYi1sb2NhbCBQUklWQVRFIGFsaWFzOjpsb2NhbCkKKworYWRkX2V4ZWN1dGFibGUgKG1haW4tbG9jYWwgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChtYWluLWxvY2FsIFBSSVZBVEUgYWxpYXM6OmxvY2FsKQorCisKK2FkZF9saWJyYXJ5KGltcG9ydC1nbG9iYWwgU0hBUkVEIElNUE9SVEVEIEdMT0JBTCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0LWdsb2JhbCBQUk9QRVJUWSBJTVBPUlRFRF9MT0NBVElPTiAiJHtiaW5hcnlfZGlyfS8ke0NNQUtFX1NUQVRJQ19MSUJSQVJZX1BSRUZJWH1mdW5jJHtDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVh9IikKK3NldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0LWdsb2JhbCBQUk9QRVJUWSBJTVBPUlRFRF9JTVBMSUIgIiR7YmluYXJ5X2Rpcn0vJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVh9ZnVuYyR7Q01BS0VfSU1QT1JUX0xJQlJBUllfU1VGRklYfSIpCithZGRfbGlicmFyeShhbGlhczo6Z2xvYmFsIEFMSUFTIGltcG9ydC1nbG9iYWwpCisKK2FkZF9saWJyYXJ5IChsaWItZ2xvYmFsIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAobGliLWdsb2JhbCBQUklWQVRFIGFsaWFzOjpnbG9iYWwpCisKK2FkZF9leGVjdXRhYmxlIChtYWluLWdsb2JhbCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKG1haW4tZ2xvYmFsIFBSSVZBVEUgYWxpYXM6Omdsb2JhbCkKKworCithZGRfc3ViZGlyZWN0b3J5KHN1Yl9kaXIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmMDIwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSBOT19QT0xJQ1lfU0NPUEUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmVjNDdlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDI1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCittYWNybyhydW5fY21ha2VfdGFyZ2V0IHRlc3Qgc3VidGVzdCB0YXJnZXQpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke3Rlc3R9LWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBydW5fY21ha2VfY29tbWFuZCgke3Rlc3R9LSR7c3VidGVzdH0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLS10YXJnZXQgJHt0YXJnZXR9ICR7QVJHTn0pCisKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQorICB1bnNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOKQorZW5kbWFjcm8oKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgVFJVRSkKK2lmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSkKK2VuZGlmKCkKK3J1bl9jbWFrZShBbGlhc1RhcmdldHMpCitydW5fY21ha2VfdGFyZ2V0KEFsaWFzVGFyZ2V0cyBmdW5jIGZ1bmMgLS1jb25maWcgUmVsZWFzZSkKK3J1bl9jbWFrZV90YXJnZXQoQWxpYXNUYXJnZXRzIGxpYi1sb2NhbCBsaWItbG9jYWwgLS1jb25maWcgUmVsZWFzZSkKK3J1bl9jbWFrZV90YXJnZXQoQWxpYXNUYXJnZXRzIG1haW4tbG9jYWwgbWFpbi1sb2NhbCAtLWNvbmZpZyBSZWxlYXNlKQorcnVuX2NtYWtlX3RhcmdldChBbGlhc1RhcmdldHMgbGliLWdsb2JhbCBsaWItZ2xvYmFsIC0tY29uZmlnIFJlbGVhc2UpCitydW5fY21ha2VfdGFyZ2V0KEFsaWFzVGFyZ2V0cyBtYWluLWdsb2JhbCBtYWluLWdsb2JhbCAtLWNvbmZpZyBSZWxlYXNlKQorcnVuX2NtYWtlX3RhcmdldChBbGlhc1RhcmdldHMgbGliLXN1YiBsaWItc3ViIC0tY29uZmlnIFJlbGVhc2UpCitydW5fY21ha2VfdGFyZ2V0KEFsaWFzVGFyZ2V0cyBtYWluLXN1YiBtYWluLXN1YiAtLWNvbmZpZyBSZWxlYXNlKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvZnVuYy5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVhOWJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL2Z1bmMuYwpAQCAtMCwwICsxLDcgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2MoKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL2xpYi5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDFiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvbGliLmMKQEAgLTAsMCArMSwxMCBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpOworCit2b2lkIGxpYigpCit7CisgIGZ1bmNfYygpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL21haW4uYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwOGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9tYWluLmMKQEAgLTAsMCArMSwxMiBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpOworCitpbnQgbWFpbigpCit7CisgIGZ1bmNfYygpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL3N1Yl9kaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvc3ViX2Rpci9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjZlOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL3N1Yl9kaXIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3IEBACisKKworYWRkX2xpYnJhcnkgKGxpYi1zdWIgU0hBUkVEIC4uL2xpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChsaWItc3ViIFBSSVZBVEUgYWxpYXM6OmxvY2FsKQorCithZGRfZXhlY3V0YWJsZSAobWFpbi1zdWIgLi4vbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChtYWluLXN1YiBQUklWQVRFIGFsaWFzOjpsb2NhbCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmMDIwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlIE5PX1BPTElDWV9TQ09QRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjBlNWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsNDEgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK21hY3JvKHJ1bl9jbWFrZV90YXJnZXQgdGVzdCBzdWJ0ZXN0IHRhcmdldCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7dGVzdH0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKCR7dGVzdH0tJHtzdWJ0ZXN0fSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLXRhcmdldCAke3RhcmdldH0gJHtBUkdOfSkKKworICB1bnNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIpCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCitlbmRtYWNybygpCisKK3J1bl9jbWFrZShiYWQtdXNhZ2UpCisKK2lmIChSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiTWFrZWZpbGVzfE5pbmphfFZpc3VhbCBTdHVkaW98WGNvZGV8V2F0Y29tIFdNYWtlIikKKworICBydW5fY21ha2UoYmFkLW1peC1sYW5nKQorCisgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSBUUlVFKQorICBpZiAoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSkKKyAgZW5kaWYoKQorCisgIHJ1bl9jbWFrZShnZW5leCkKKworICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IGxpYiBMaW5rTGlicmFyaWVzX2xpYiAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IGxpYjIgTGlua0xpYnJhcmllc19saWIyIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggbGliMyBMaW5rTGlicmFyaWVzX2xpYjMgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBleGUgTGlua0xpYnJhcmllc19leGUgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDX2ltcG9ydCBMaW5rTGlicmFyaWVzX0NfaW1wb3J0IC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggQ1hYX2ltcG9ydCBMaW5rTGlicmFyaWVzX0NYWF9pbXBvcnQgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDX2ludGVyZmFjZSBMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggQ1hYX2ludGVyZmFjZSBMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDX2ludGVyZmFjZTIgTGlua0xpYnJhcmllc19DX2ludGVyZmFjZTIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfaW50ZXJmYWNlMiBMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UyIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggQ19zdGF0aWMgTGlua0xpYnJhcmllc19DX3N0YXRpYyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENYWF9zdGF0aWMgTGlua0xpYnJhcmllc19DWFhfc3RhdGljIC0tY29uZmlnIFJlbGVhc2UpCisKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorICB1bnNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSkKKworZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC1taXgtbGFuZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC1taXgtbGFuZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtbWl4LWxhbmctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC1taXgtbGFuZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlY2RjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtbWl4LWxhbmctc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yOiBFdmFsdWF0aW9uIG9mIFwkPExJTktfTEFOR1VBR0U6Li4uPiBvciBcJDxMSU5LX0xBTkRfQU5EX0lEOi4uLj4gY2hhbmdlcwordGhlIGxpbmtlciBsYW5ndWFnZSBmb3IgdGFyZ2V0ICJMaW5rTGlicmFyaWVzX2JhZF9taXhfbGFuZ3VhZ2VzIiBcKGZyb20gJ0MnIHRvICdDWFgnXCkgd2hpY2ggaXMgaW52YWxpZC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC1taXgtbGFuZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC1taXgtbGFuZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVmYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvYmFkLW1peC1sYW5nLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2FkZF9saWJyYXJ5KHN0YXRpY19DWFggU1RBVElDIGZ1bmMuY3h4KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX2JhZF9taXhfbGFuZ3VhZ2VzIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OnN0YXRpY19DWFg+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtdXNhZ2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MWY3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtdXNhZ2Utc3RkZXJyLnR4dApAQCAtMCwwICsxLDggQEAKK0NNYWtlIEVycm9yIGF0IGJhZC11c2FnZS5jbWFrZTo0IFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U+IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGluayBsaWJyYXJpZXMgZXhwcmVzc2lvbi4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNmYjBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvYmFkLXVzYWdlLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9saWJyYXJ5KHNpbXBsZSBTSEFSRUQgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzaW1wbGUgUFJJVkFURSBsaWIkPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2Z1bmMuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVhOWJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvZnVuYy5jCkBAIC0wLDAgKzEsNyBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9mdW5jLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2Z1bmMuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMmNhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9mdW5jLmN4eApAQCAtMCwwICsxLDcgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2N4eCgpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2dlbmV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmU5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9nZW5leC5jbWFrZQpAQCAtMCwwICsxLDcyIEBACisKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2Li4uMy4xNykKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShzaGFyZWRfQyBTSEFSRUQgZnVuYy5jKQorYWRkX2xpYnJhcnkoc2hhcmVkX0NYWCBTSEFSRUQgZnVuYy5jeHgpCisKKworYWRkX2xpYnJhcnkoc3RhdGljMV9DIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMxX0MgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OnNoYXJlZF9DPikKKworYWRkX2xpYnJhcnkoc3RhdGljMl9DIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMyX0MgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzaGFyZWRfQz4pCisKKworc2V0IChiaW5hcnlfZGlyICIke0NNQUtFX0JJTkFSWV9ESVJ9IikKK2dldF9wcm9wZXJ0eSAoaXNfbXVsdGlfY29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQoraWYgKGlzX211bHRpX2NvbmZpZykKKyAgc3RyaW5nIChBUFBFTkQgYmluYXJ5X2RpciAiL1JlbGVhc2UiKQorZW5kaWYoKQorYWRkX2xpYnJhcnkoaW1wb3J0IFNUQVRJQyBJTVBPUlRFRCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0IFBST1BFUlRZIElNUE9SVEVEX0xPQ0FUSU9OICIke2JpbmFyeV9kaXJ9LyR7Q01BS0VfU1RBVElDX0xJQlJBUllfUFJFRklYfXN0YXRpYzFfQyR7Q01BS0VfU1RBVElDX0xJQlJBUllfU1VGRklYfSIpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGltcG9ydCBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR1VBR0U6Qz46c2hhcmVkX0M+KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbXBvcnQgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46c2hhcmVkX0NYWD4pCisKKworYWRkX2xpYnJhcnkoaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW50ZXJmYWNlIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzaGFyZWRfQz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OnNoYXJlZF9DWFg+KQorCisKK2FkZF9saWJyYXJ5KGludGVyZmFjZTIgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbnRlcmZhY2UyIElOVEVSRkFDRSBpbXBvcnQpCisKKworYWRkX2xpYnJhcnkoc3RhdGljMyBTVEFUSUMgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoc3RhdGljMyBQUklWQVRFIGludGVyZmFjZSkKKworCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYiBTSEFSRUQgbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfbGliIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46c2hhcmVkX0M+KQorCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYjIgU0hBUkVEIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX2xpYjIgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzdGF0aWMxX0M+KQorCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYjMgU0hBUkVEIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX2xpYjMgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzdGF0aWMyX0M+KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX2V4ZSBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfZXhlIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46c2hhcmVkX0M+KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NfaW1wb3J0IG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX2ltcG9ydCBQUklWQVRFIGltcG9ydCkKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX2ltcG9ydCBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfaW1wb3J0IFBSSVZBVEUgaW1wb3J0KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZSBQUklWQVRFIGludGVyZmFjZSkKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlIFBSSVZBVEUgaW50ZXJmYWNlKQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlMiBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UyIFBSSVZBVEUgaW50ZXJmYWNlMikKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgUFJJVkFURSBpbnRlcmZhY2UyKQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0Nfc3RhdGljIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX3N0YXRpYyBQUklWQVRFIHN0YXRpYzMpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9zdGF0aWMgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX3N0YXRpYyBQUklWQVRFIHN0YXRpYzMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9saWIuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDFiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9saWIuYwpAQCAtMCwwICsxLDEwIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK3ZvaWQgbGliKCkKK3sKKyAgZnVuY19jKCk7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwOGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL21haW4uYwpAQCAtMCwwICsxLDEyIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK2ludCBtYWluKCkKK3sKKyAgZnVuY19jKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL21haW4uY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWEzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmN4eApAQCAtMCwwICsxLDEyIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jeHgoKTsKKworaW50IG1haW4oKQoreworICBmdW5jX2N4eCgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YwMjBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UgTk9fUE9MSUNZX1NDT1BFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTZmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwzOCBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHt0ZXN0fS1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKK2VuZG1hY3JvKCkKKworaWYgKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJNYWtlZmlsZXN8TmluamF8VmlzdWFsIFN0dWRpb3xYY29kZXxXYXRjb20gV01ha2UiKQorCisgIHJ1bl9jbWFrZShiYWQtbWl4LWxhbmcpCisKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIFRSVUUpCisgIGlmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorICBlbmRpZigpCisKKyAgcnVuX2NtYWtlKGdlbmV4KQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggbGliIExpbmtMaWJyYXJpZXNfbGliIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggbGliMiBMaW5rTGlicmFyaWVzX2xpYjIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBsaWIzIExpbmtMaWJyYXJpZXNfbGliMyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IGV4ZSBMaW5rTGlicmFyaWVzX2V4ZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW1wb3J0IExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfaW1wb3J0IExpbmtMaWJyYXJpZXNfQ1hYX2ltcG9ydCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW50ZXJmYWNlMiBMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlMiAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENYWF9pbnRlcmZhY2UyIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfc3RhdGljIExpbmtMaWJyYXJpZXNfQ1hYX3N0YXRpYyAtLWNvbmZpZyBSZWxlYXNlKQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UpCisKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYWQtbWl4LWxhbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYWQtbWl4LWxhbmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvYmFkLW1peC1sYW5nLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYWQtbWl4LWxhbmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWNkYzBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvYmFkLW1peC1sYW5nLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvcjogRXZhbHVhdGlvbiBvZiBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gb3IgXCQ8TElOS19MQU5EX0FORF9JRDouLi4+IGNoYW5nZXMKK3RoZSBsaW5rZXIgbGFuZ3VhZ2UgZm9yIHRhcmdldCAiTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyIgXChmcm9tICdDJyB0byAnQ1hYJ1wpIHdoaWNoIGlzIGludmFsaWQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYWQtbWl4LWxhbmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYWQtbWl4LWxhbmcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwMDEwYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2JhZC1taXgtbGFuZy5jbWFrZQpAQCAtMCwwICsxLDggQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShzdGF0aWNfQ1hYIFNUQVRJQyBmdW5jLmN4eCkKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfYmFkX21peF9sYW5ndWFnZXMgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnN0YXRpY19DWFg+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2Jhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2Jhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2VtcHR5LmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9leGVfYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZXhlX2MtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZXhlX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZXhlX2N4eC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZXhlX2N4eC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9leGVfY3h4LXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2Z1bmMuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVhOWJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZnVuYy5jCkBAIC0wLDAgKzEsNyBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9mdW5jLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2Z1bmMuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMmNhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9mdW5jLmN4eApAQCAtMCwwICsxLDcgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2N4eCgpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2dlbmV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWNjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9nZW5leC5jbWFrZQpAQCAtMCwwICsxLDczIEBACisKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2Li4uMy4xNykKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCisKK2FkZF9saWJyYXJ5KHNoYXJlZF9DIFNIQVJFRCBmdW5jLmMpCithZGRfbGlicmFyeShzaGFyZWRfQ1hYIFNIQVJFRCBmdW5jLmN4eCkKKworCithZGRfbGlicmFyeShzdGF0aWMxX0MgU1RBVElDIGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKHN0YXRpYzFfQyBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzaGFyZWRfQz4pCisKK2FkZF9saWJyYXJ5KHN0YXRpYzJfQyBTVEFUSUMgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoc3RhdGljMl9DIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzaGFyZWRfQz4pCisKKworc2V0IChiaW5hcnlfZGlyICIke0NNQUtFX0JJTkFSWV9ESVJ9IikKK2dldF9wcm9wZXJ0eSAoaXNfbXVsdGlfY29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQoraWYgKGlzX211bHRpX2NvbmZpZykKKyAgc3RyaW5nIChBUFBFTkQgYmluYXJ5X2RpciAiL1JlbGVhc2UiKQorZW5kaWYoKQorYWRkX2xpYnJhcnkoaW1wb3J0IFNUQVRJQyBJTVBPUlRFRCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0IFBST1BFUlRZIElNUE9SVEVEX0xPQ0FUSU9OICIke2JpbmFyeV9kaXJ9LyR7Q01BS0VfU1RBVElDX0xJQlJBUllfUFJFRklYfXN0YXRpYzFfQyR7Q01BS0VfU1RBVElDX0xJQlJBUllfU1VGRklYfSIpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGltcG9ydCBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzaGFyZWRfQz4pCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGltcG9ydCBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46c2hhcmVkX0NYWD4pCisKKworYWRkX2xpYnJhcnkoaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW50ZXJmYWNlIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OnNoYXJlZF9DWFg+KQorCisKK2FkZF9saWJyYXJ5KGludGVyZmFjZTIgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbnRlcmZhY2UyIElOVEVSRkFDRSBpbXBvcnQpCisKKworYWRkX2xpYnJhcnkoc3RhdGljMyBTVEFUSUMgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoc3RhdGljMyBQUklWQVRFIGludGVyZmFjZSkKKworCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYiBTSEFSRUQgbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfbGliIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzaGFyZWRfQz4pCisKK2FkZF9saWJyYXJ5KExpbmtMaWJyYXJpZXNfbGliMiBTSEFSRUQgbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfbGliMiBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46c3RhdGljMV9DPikKKworYWRkX2xpYnJhcnkoTGlua0xpYnJhcmllc19saWIzIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19saWIzIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzdGF0aWMyX0M+KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX2V4ZSBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfZXhlIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzaGFyZWRfQz4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NfaW1wb3J0IFBSSVZBVEUgaW1wb3J0KQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfaW1wb3J0IG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9pbXBvcnQgUFJJVkFURSBpbXBvcnQpCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlIFBSSVZBVEUgaW50ZXJmYWNlKQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlIG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UgUFJJVkFURSBpbnRlcmZhY2UpCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UyIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZTIgUFJJVkFURSBpbnRlcmZhY2UyKQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlMiBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlMiBQUklWQVRFIGludGVyZmFjZTIpCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ19zdGF0aWMgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0Nfc3RhdGljIFBSSVZBVEUgc3RhdGljMykKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX3N0YXRpYyBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfc3RhdGljIFBSSVZBVEUgc3RhdGljMykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2ludGVyZmFjZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvaW50ZXJmYWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2ludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9saWIuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDFiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9saWIuYwpAQCAtMCwwICsxLDEwIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK3ZvaWQgbGliKCkKK3sKKyAgZnVuY19jKCk7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9tYWluLmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwOGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL21haW4uYwpAQCAtMCwwICsxLDEyIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK2ludCBtYWluKCkKK3sKKyAgZnVuY19jKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9tYWluLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL21haW4uY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWEzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9tYWluLmN4eApAQCAtMCwwICsxLDEyIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jeHgoKTsKKworaW50IG1haW4oKQoreworICBmdW5jX2N4eCgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvbm9fbGFuZ3VhZ2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL25vX2xhbmd1YWdlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTQxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL25vX2xhbmd1YWdlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorMApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwMjMtV0FSTi0yLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwMjMtV0FSTi0yLmNtYWtlCmluZGV4IDJlOWNiYTguLjZjNzI1NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDIzLVdBUk4tMi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDAyMy1XQVJOLTIuY21ha2UKQEAgLTEsNCArMSw0IEBACi0KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCiBwcm9qZWN0KENNUDAwMjItV0FSTikKIAogYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBlbXB0eV92czZfMS5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDAyMy1XQVJOLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwMjMtV0FSTi5jbWFrZQppbmRleCBmY2M4ZGEwLi5kZmRmNzBiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDAyMy1XQVJOLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDIzLVdBUk4uY21ha2UKQEAgLTEsNCArMSw0IEBACi0KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCiBwcm9qZWN0KENNUDAwMjItV0FSTikKIAogYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBlbXB0eV92czZfMS5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtTkVXLXNlbGYtbGluay1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LU5FVy1zZWxmLWxpbmstcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtTkVXLXNlbGYtbGluay1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtTkVXLXNlbGYtbGluay1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODllZmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDEwOC1ORVctc2VsZi1saW5rLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCBDTVAwMTA4LXNlbGYtbGluay5jbWFrZTpbMC05XSsgXChhZGRfbGlicmFyeVwpOgorICBUYXJnZXQgImZvbyIgbGlua3MgdG8gaXRzZWxmLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01QMDEwOC1ORVctc2VsZi1saW5rLmNtYWtlOlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LU5FVy1zZWxmLWxpbmsuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDEwOC1ORVctc2VsZi1saW5rLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTk2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDEwOC1ORVctc2VsZi1saW5rLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3kgKFNFVCBDTVAwMTA4IE5FVykKKworaW5jbHVkZSAoQ01QMDEwOC1zZWxmLWxpbmsuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDEwOC1PTEQtc2VsZi1saW5rLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtT0xELXNlbGYtbGluay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTMxMDRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtT0xELXNlbGYtbGluay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworY21ha2VfcG9saWN5IChTRVQgQ01QMDEwOCBPTEQpCisKK2luY2x1ZGUgKENNUDAxMDgtc2VsZi1saW5rLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtc2VsZi1saW5rLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtc2VsZi1saW5rLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTM0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDEwOC1zZWxmLWxpbmsuY21ha2UKQEAgLTAsMCArMSw5IEBACisKK2NtYWtlX3BvbGljeSAoU0VUIENNUDAwMzggTkVXKQorY21ha2VfcG9saWN5IChTRVQgQ01QMDA0MiBORVcpCisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShmb28gU0hBUkVEIGxpYi5jKQorYWRkX2xpYnJhcnkoQmFyOjpmb28gQUxJQVMgZm9vKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZvbyBQUklWQVRFIEJhcjo6Zm9vKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNYWtlTGlzdHMudHh0CmluZGV4IDhmODVmYmYuLjY2NzU2MWUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UgTk9fUE9MSUNZX1NDT1BFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOGVlZDk4Ni4uMTg5NTkyZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xOSw2ICsxOSw4IEBACiBydW5fY21ha2UoQ01QMDA3OS1saW5rLU9MRCkKIHJ1bl9jbWFrZShDTVAwMDc5LWxpbmstTkVXKQogcnVuX2NtYWtlKENNUDAwNzktbGluay1ORVctYm9ndXMpCitydW5fY21ha2UoQ01QMDEwOC1PTEQtc2VsZi1saW5rKQorcnVuX2NtYWtlKENNUDAxMDgtTkVXLXNlbGYtbGluaykKIHJ1bl9jbWFrZShJbXBvcnRlZFRhcmdldCkKIHJ1bl9jbWFrZShJbXBvcnRlZFRhcmdldEZhaWx1cmUpCiBydW5fY21ha2UoTWl4ZWRTaWduYXR1cmUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvU3RhdGljUHJpdmF0ZURlcE5vdEV4cG9ydGVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1N0YXRpY1ByaXZhdGVEZXBOb3RFeHBvcnRlZC5jbWFrZQppbmRleCA5Yjk3OTE4Li45Zjg2YjE4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvU3RhdGljUHJpdmF0ZURlcE5vdEV4cG9ydGVkLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9TdGF0aWNQcml2YXRlRGVwTm90RXhwb3J0ZWQuY21ha2UKQEAgLTEsNCArMSwzIEBACi1jbWFrZV9wb2xpY3koU0VUIENNUDAwMjIgTkVXKQogZW5hYmxlX2xhbmd1YWdlKEMpCiBhZGRfbGlicmFyeShmb28gU1RBVElDIGVtcHR5LmMpCiBhZGRfbGlicmFyeShub3RfZXhwb3J0ZWQgU1RBVElDIGVtcHR5LmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvU3RhdGljUHJpdmF0ZURlcE5vdFRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9TdGF0aWNQcml2YXRlRGVwTm90VGFyZ2V0LmNtYWtlCmluZGV4IDcxMjJhZTkuLjIwZWM0MzggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9TdGF0aWNQcml2YXRlRGVwTm90VGFyZ2V0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9TdGF0aWNQcml2YXRlRGVwTm90VGFyZ2V0LmNtYWtlCkBAIC0xLDQgKzEsMyBAQAotY21ha2VfcG9saWN5KFNFVCBDTVAwMDIyIE5FVykKIGVuYWJsZV9sYW5ndWFnZShDKQogYWRkX2xpYnJhcnkoZm9vIFNUQVRJQyBlbXB0eS5jKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZvbyBQUklWQVRFIG5vdF9hX3RhcmdldCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9saWIuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmQxYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL2xpYi5jCkBAIC0wLDAgKzEsMTAgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2MoKTsKKwordm9pZCBsaWIoKQoreworICBmdW5jX2MoKTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvTGlua09wdGlvbnNEZXZpY2UuY3UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zRGV2aWNlLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NTA0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zRGV2aWNlLmN1CkBAIC0wLDAgKzEsMTQgQEAKKyNpbmNsdWRlIDxjdWRhLmg+CisKKyNpZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIGludCBzaW1wbGVsaWIoKQoreworICByZXR1cm4gMDsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgcmV0dXJuIHNpbXBsZWxpYigpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBjZGZkZDdiLi44ZWYxM2Y5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTMsOCArMTMsOSBAQAogaWYgKE5PVCBDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJJbnRlbCIpCiAgICMgSW50ZWwgY29tcGlsZXIgZG9lcyBub3QgcmVqZWN0IGJhZCBmbGFncyBvciBvYmplY3RzIQogICBzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgVFJVRSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNYWtlX1RFU1RfQ1VEQT0ke0NNYWtlX1RFU1RfQ1VEQX0pCiAgIGlmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKLSAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorICAgIGxpc3QoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSkKICAgZW5kaWYoKQogCiAgIHJ1bl9jbWFrZShMSU5LX09QVElPTlMpCkBAIC0yNyw2ICsyOCwzOSBAQAogICBydW5fY21ha2VfdGFyZ2V0KExJTktfT1BUSU9OUyBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCiAgIHJ1bl9jbWFrZV90YXJnZXQoTElOS19PUFRJT05TIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKIAorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdVQUdFKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBpbnRlcmZhY2UgTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0Ugc2hhcmVkX2MgTGlua09wdGlvbnNfc2hhcmVkX2MgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIExJTktFUl9MQU5HVUFHRSBMaW5rT3B0aW9uc19zaGFyZWRfY3h4IC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBleGUgTGlua09wdGlvbnNfZXhlIC0tY29uZmlnIFJlbGVhc2UpCisKKyAgcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR19BTkRfSUQpCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGludGVyZmFjZSBMaW5rT3B0aW9uc19zaGFyZWRfaW50ZXJmYWNlIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBzaGFyZWRfYyBMaW5rT3B0aW9uc19zaGFyZWRfYyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgTElOS0VSX0xBTkdVQUdFIExpbmtPcHRpb25zX3NoYXJlZF9jeHggLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIG1vZCBMaW5rT3B0aW9uc19tb2QgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKKworICBydW5fY21ha2UoZ2VuZXhfREVWSUNFX0xJTkspCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9ERVZJQ0VfTElOSyBpbnRlcmZhY2UgTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0RFVklDRV9MSU5LIHByaXZhdGUgTGlua09wdGlvbnNfcHJpdmF0ZSAtLWNvbmZpZyBSZWxlYXNlKQorICBpZiAoQ01ha2VfVEVTVF9DVURBKQorICAgICMgU2VwYXJhYmxlIGNvbXBpbGF0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIE5WQ0MuCisgICAgaWYoTk9UIENNYWtlX1RFU1RfQ1VEQSBTVFJFUVVBTCAiQ2xhbmciKQorICAgICAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9ERVZJQ0VfTElOSyBDTVAwMTA1X1VOU0VUIExpbmtPcHRpb25zX0NNUDAxMDVfVU5TRVQgLS1jb25maWcgUmVsZWFzZSkKKyAgICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgQ01QMDEwNV9PTEQgTGlua09wdGlvbnNfQ01QMDEwNV9PTEQgLS1jb25maWcgUmVsZWFzZSkKKyAgICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgQ01QMDEwNV9ORVcgTGlua09wdGlvbnNfQ01QMDEwNV9ORVcgLS1jb25maWcgUmVsZWFzZSkKKyAgICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgZGV2aWNlIExpbmtPcHRpb25zX2RldmljZSAtLWNvbmZpZyBSZWxlYXNlKQorICAgIGVuZGlmKCkKKworICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgbm9fZGV2aWNlIExpbmtPcHRpb25zX25vX2RldmljZSAtLWNvbmZpZyBSZWxlYXNlKQorICBlbmRpZigpCisKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICB1bnNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstQ01QMDEwNV9ORVctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLUNNUDAxMDVfTkVXLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzRmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLUNNUDAxMDVfTkVXLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitpZiAoTk9UIGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR19ERVZJQ0VfTElOSyIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR19ERVZJQ0VfTElOSycuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstQ01QMDEwNV9ORVctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstQ01QMDEwNV9ORVctcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1DTVAwMTA1X05FVy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWRldmljZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstZGV2aWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzNiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWRldmljZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldCAoREVWSUNFX0xJTksgVFJVRSkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfREVWSUNFX0xJTkstdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWRldmljZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1kZXZpY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1kZXZpY2UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWludGVyZmFjZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDMxZTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1pbnRlcmZhY2UtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQgKERFVklDRV9MSU5LIEZBTFNFKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9ERVZJQ0VfTElOSy12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstaW50ZXJmYWNlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWludGVyZmFjZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLW5vX2RldmljZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstbm9fZGV2aWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MzFlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLW5vX2RldmljZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldCAoREVWSUNFX0xJTksgRkFMU0UpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0RFVklDRV9MSU5LLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1ub19kZXZpY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstbm9fZGV2aWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstbm9fZGV2aWNlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstcHJpdmF0ZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstcHJpdmF0ZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDMxZTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1wcml2YXRlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0IChERVZJQ0VfTElOSyBGQUxTRSkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfREVWSUNFX0xJTkstdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLXByaXZhdGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstcHJpdmF0ZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLXByaXZhdGUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy12YWxpZGF0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjVkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwyMiBAQAorCitpZiAoTk9UIERFRklORUQgREVWSUNFX0xJTkspCisgIHNldCAoREVWSUNFX0xJTksgRkFMU0UpCitlbmRpZigpCisKK2lmIChERVZJQ0VfTElOSykKKyAgc2V0IChWQUxJRF9JRCBERVZJQ0VfTElOSykKKyAgc2V0IChJTlZBTElEX0lEIE5PUk1BTF9MSU5LKQorZWxzZSgpCisgIHNldCAoVkFMSURfSUQgTk9STUFMX0xJTkspCisgIHNldCAoSU5WQUxJRF9JRCBERVZJQ0VfTElOSykKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtWQUxJRF9JRH0iKQorICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfJHtWQUxJRF9JRH0nLiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7SU5WQUxJRF9JRH0iKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18ke0lOVkFMSURfSUR9Jy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTksuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNjA4MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTksuY21ha2UKQEAgLTAsMCArMSw1MSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0IChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX2ludGVyZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFICQ8REVWSUNFX0xJTks6JHtwcmV9QkFERkxBR19ERVZJQ0VfTElOSyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxIT1NUX0xJTks6JHtwcmV9QkFERkxBR19OT1JNQUxfTElOSyR7b2JqfT4pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgUFJJVkFURSBMaW5rT3B0aW9uc19pbnRlcmZhY2UpCisKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfcHJpdmF0ZSBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX3ByaXZhdGUgUFJJVkFURSAkPERFVklDRV9MSU5LOiR7cHJlfUJBREZMQUdfREVWSUNFX0xJTkske29ian0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxIT1NUX0xJTks6JHtwcmV9QkFERkxBR19OT1JNQUxfTElOSyR7b2JqfT4pCisKK2lmIChDTWFrZV9URVNUX0NVREEpCisgIGVuYWJsZV9sYW5ndWFnZShDVURBKQorCisgICMgU2VwYXJhYmxlIGNvbXBpbGF0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIE5WQ0MuCisgIGlmKE5PVCBDTWFrZV9URVNUX0NVREEgU1RSRVFVQUwgIkNsYW5nIikKKyAgICBhZGRfZXhlY3V0YWJsZShMaW5rT3B0aW9uc19DTVAwMTA1X1VOU0VUIExpbmtPcHRpb25zRGV2aWNlLmN1KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgTGlua09wdGlvbnNfQ01QMDEwNV9VTlNFVCBQUk9QRVJUWSBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKExpbmtPcHRpb25zX0NNUDAxMDVfVU5TRVQgUFJJVkFURSAkPERFVklDRV9MSU5LOiR7cHJlfUJBREZMQUdfREVWSUNFX0xJTkske29ian0+KQorCisgICAgY21ha2VfcG9saWN5KFNFVCBDTVAwMTA1IE9MRCkKKworICAgIGFkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX0NNUDAxMDVfT0xEIExpbmtPcHRpb25zRGV2aWNlLmN1KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgTGlua09wdGlvbnNfQ01QMDEwNV9PTEQgUFJPUEVSVFkgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04gT04pCisgICAgdGFyZ2V0X2xpbmtfb3B0aW9ucyhMaW5rT3B0aW9uc19DTVAwMTA1X09MRCBQUklWQVRFICQ8REVWSUNFX0xJTks6JHtwcmV9QkFERkxBR19ERVZJQ0VfTElOSyR7b2JqfT4pCisKKyAgICBjbWFrZV9wb2xpY3koU0VUIENNUDAxMDUgTkVXKQorCisgICAgYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfQ01QMDEwNV9ORVcgTGlua09wdGlvbnNEZXZpY2UuY3UpCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBMaW5rT3B0aW9uc19DTVAwMTA1X05FVyBQUk9QRVJUWSBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKExpbmtPcHRpb25zX0NNUDAxMDVfTkVXIFBSSVZBVEUgJDxERVZJQ0VfTElOSzoke3ByZX1CQURGTEFHX0RFVklDRV9MSU5LJHtvYmp9PikKKworICAgIGFkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2RldmljZSBMaW5rT3B0aW9uc0RldmljZS5jdSkKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIExpbmtPcHRpb25zX2RldmljZSBQUk9QRVJUWSBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKExpbmtPcHRpb25zX2RldmljZSBQUklWQVRFICQ8REVWSUNFX0xJTks6JHtwcmV9QkFERkxBR19ERVZJQ0VfTElOSyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxIT1NUX0xJTks6JHtwcmV9QkFERkxBR19OT1JNQUxfTElOSyR7b2JqfT4pCisgIGVuZGlmKCkKKworICBhZGRfZXhlY3V0YWJsZShMaW5rT3B0aW9uc19ub19kZXZpY2UgTGlua09wdGlvbnNEZXZpY2UuY3UpCisgIHRhcmdldF9saW5rX29wdGlvbnMoTGlua09wdGlvbnNfbm9fZGV2aWNlIFBSSVZBVEUgJDxERVZJQ0VfTElOSzoke3ByZX1CQURGTEFHX0RFVklDRV9MSU5LJHtvYmp9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8SE9TVF9MSU5LOiR7cHJlfUJBREZMQUdfTk9STUFMX0xJTkske29ian0+KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzOTgxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjY0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDEyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQykKK3NldCAoSU5WQUxJRF9MQU5HIENYWCkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY2NDFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwMTIwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDIzN2FiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwxNyBAQAorCitpZiAoTk9UIERFRklORUQgVkFMSURfTEFORykKKyAgc2V0IChWQUxJRF9MQU5HIEMpCitlbmRpZigpCitpZiAoTk9UIERFRklORUQgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7VkFMSURfTEFOR31fTEFORyIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR18ke1ZBTElEX0xBTkd9X0xBTkcnLiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7SU5WQUxJRF9MQU5HfV9MQU5HIikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfJHtJTlZBTElEX0xBTkd9X0xBTkcnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlNjE1OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZQpAQCAtMCwwICsxLDMyIEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworc2V0IChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX2ludGVyZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBQUklWQVRFIExpbmtPcHRpb25zX2ludGVyZmFjZSkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2MgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19zaGFyZWRfYyBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2N4eCBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX3NoYXJlZF9jeHggUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIExpbmtPcHRpb25zX3NoYXJlZF9jeHggUFJPUEVSVFkgTElOS0VSX0xBTkdVQUdFIENYWCkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfbW9kIE1PRFVMRSBMaW5rT3B0aW9uc0xpYi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfbW9kIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46JHtwcmV9QkFERkxBR18kPExJTktfTEFOR1VBR0U+X0xBTkcke29ian0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19leGUgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46JHtwcmV9QkFERkxBR18kPExJTktfTEFOR1VBR0U+X0xBTkcke29ian0+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0Zjg1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZGRlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDk4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQykKK3NldCAoSU5WQUxJRF9MQU5HIENYWCkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0OThkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWRjMjdmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwyMyBAQAorCitpZiAoTk9UIFZBTElEX0xBTkcpCisgIHNldCAoVkFMSURfTEFORyBDKQorZW5kaWYoKQoraWYgKE5PVCBJTlZBTElEX0xBTkcpCisgIHNldCAoSU5WQUxJRF9MQU5HIENYWCkKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtWQUxJRF9MQU5HfV9MQU5HX0lEIikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdCQURGTEFHXyR7VkFMSURfTEFOR31fTEFOR19JRCcuXG4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFOR19JRCIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyR7SU5WQUxJRF9MQU5HfV9MQU5HX0lEICcuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfKCR7VkFMSURfTEFOR318JHtJTlZBTElEX0xBTkd9KV9CQURJRCIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESUQnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwZjUwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC5jbWFrZQpAQCAtMCwwICsxLDQxIEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworaWYoQk9STEFORCkKKyAgc2V0KHByZSAtKQorZW5kaWYoKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfaW50ZXJmYWNlIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NYWF9MQU5HX0lEJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBQUklWQVRFIExpbmtPcHRpb25zX2ludGVyZmFjZSkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2MgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19zaGFyZWRfYyBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DX0xBTkdfSUQke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ1hYX0xBTkdfSUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46JHtwcmV9QkFERkxBR19DX0JBRElEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ1hYX0JBRElEJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+KQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19zaGFyZWRfY3h4IFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfc2hhcmVkX2N4eCBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DX0xBTkdfSUQke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ1hYX0JBRElEJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+KQorc2V0X3Byb3BlcnR5IChUQVJHRVQgTGlua09wdGlvbnNfc2hhcmVkX2N4eCBQUk9QRVJUWSBMSU5LRVJfTEFOR1VBR0UgQ1hYKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19tb2QgTU9EVUxFIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19tb2QgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46JHtwcmV9QkFERkxBR19DX0JBRElEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19leGUgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46JHtwcmV9QkFERkxBR19DX0JBRElEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0NNUDAwNTYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTVAwMDU2LmNtYWtlCmluZGV4IGU4ZDNkNGEuLjJhYjc5ZDUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0NNUDAwNTYuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ01QMDA1Ni5jbWFrZQpAQCAtMSwzICsxLDQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCiBlbmFibGVfbGFuZ3VhZ2UoQykKIHNldChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCiBpZihCT1JMQU5EKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0N1ZGFTdGFuZGFyZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLXN0ZGVyci50eHQKaW5kZXggM2M2YmRmNi4uYmNmOTVkNSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLXN0ZGVyci50eHQKQEAgLTEsNSArMSw1IEBACiBeQ01ha2UgRXJyb3IgYXQgLiovVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLWJ1aWxkL0NNYWtlRmlsZXMvQ01ha2VUbXAvQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKLSAgQ1VEQV9TVEFOREFSRCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnMycKKyAgQ1VEQV9TVEFOREFSRCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnNCcKICsKIENNYWtlIEVycm9yIGF0IEN1ZGFTdGFuZGFyZC5jbWFrZTpbMC05XSsgXCh0cnlfY29tcGlsZVwpOgogICBGYWlsZWQgdG8gZ2VuZXJhdGUgdGVzdCBwcm9qZWN0IGJ1aWxkIHN5c3RlbS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0N1ZGFTdGFuZGFyZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0N1ZGFTdGFuZGFyZC5jbWFrZQppbmRleCA5NmRhNDIyLi5hMjMwNDI0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DdWRhU3RhbmRhcmQuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLmNtYWtlCkBAIC0xLDcgKzEsNyBAQAogZW5hYmxlX2xhbmd1YWdlKENVREEpCiB0cnlfY29tcGlsZShyZXN1bHQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgIFNPVVJDRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NyYy5jdQotICBDVURBX1NUQU5EQVJEIDMKKyAgQ1VEQV9TVEFOREFSRCA0CiAgIE9VVFBVVF9WQVJJQUJMRSBvdXQKICAgKQogbWVzc2FnZSgidHJ5X2NvbXBpbGUgb3V0cHV0OlxuJHtvdXR9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBiZWU5ZTViLi44MmM1NWNjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC04MywxMyArODMsMTcgQEAKIAogICBtZXNzYWdlKFNUQVRVUyAiUmVydW5DTWFrZTogZmlyc3QgY29uZmlndXJhdGlvbi4uLiIpCiAgIHJ1bl9jbWFrZShSZXJ1bkNNYWtlKQotICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayR7bmluamF9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQorICBpZihOT1QgQ01ha2VfVEVTVF9GSUxFU1lTVEVNXzFTKQorICAgIHJ1bl9jbWFrZV9jb21tYW5kKFJlcnVuQ01ha2Utbm93b3JrJHtuaW5qYX0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCisgIGVuZGlmKCkKIAogICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwIDEpICMgaGFuZGxlIDFzIHJlc29sdXRpb24KICAgbWVzc2FnZShTVEFUVVMgIlJlcnVuQ01ha2U6IG1vZGlmeSB0cnlfY29tcGlsZSBpbnB1dC4uLiIpCiAgIGZpbGUoV1JJVEUgIiR7aW5fdGN9IiAiZG9lcy1ub3QtY29tcGlsZVxuIikKICAgcnVuX2NtYWtlX2NvbW1hbmQoUmVydW5DTWFrZS1yZXJ1biR7bmluamF9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQotICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayR7bmluamF9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQorICBpZihOT1QgQ01ha2VfVEVTVF9GSUxFU1lTVEVNXzFTKQorICAgIHJ1bl9jbWFrZV9jb21tYW5kKFJlcnVuQ01ha2Utbm93b3JrJHtuaW5qYX0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCisgIGVuZGlmKCkKIAogICB1bnNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIpCiAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9wcm9qL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvcHJvai9DTWFrZUxpc3RzLnR4dAppbmRleCA3OGE4N2MwLi42NTJmNWI2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9wcm9qL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL3Byb2ovQ01ha2VMaXN0cy50eHQKQEAgLTEsMiArMSwyIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEwKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoVGVzdFByb2plY3QgTk9ORSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9ydW4vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90cnlfcnVuL0NNYWtlTGlzdHMudHh0CmluZGV4IGUwMzQ3ODAuLmU5M2YwYjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9ydW4vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X3J1bi9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQykKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3ZhcmlhYmxlX3dhdGNoL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvdmFyaWFibGVfd2F0Y2gvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdmFyaWFibGVfd2F0Y2gvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvdmFyaWFibGVfd2F0Y2gvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS93aGlsZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3doaWxlL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3doaWxlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3doaWxlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvU2V0TGFuZy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1NldExhbmcvQ01ha2VMaXN0cy50eHQKaW5kZXggZjI0ZTVjYi4uYWY5MGYxMSAxMDA2NDQKLS0tIGEvVGVzdHMvU2V0TGFuZy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9TZXRMYW5nL0NNYWtlTGlzdHMudHh0CkBAIC04LDMgKzgsMTAgQEAKIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhmb28uYyBiYXIuYyBQUk9QRVJUSUVTIExBTkdVQUdFIENYWCkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhTZXRMYW5nIGZvbykKIHNldF90YXJnZXRfcHJvcGVydGllcyhTZXRMYW5nIFBST1BFUlRJRVMgTElOS0VSX0xBTkdVQUdFIENYWCkKKworaWYoKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiKEdOVXxDbGFuZ3xNU1ZDfEJvcmxhbmR8RW1iYXJjYWRlcm98SW50ZWx8VEl8WEwpIikpCisgIGFkZF9saWJyYXJ5KHpvb20gem9vbS56enopCisgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyh6b29tLnp6eiBQUk9QRVJUSUVTIExBTkdVQUdFIENYWCkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNldExhbmcgem9vbSkKKyAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoU2V0TGFuZyBQUklWQVRFIFdJVEhfWk9PTSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1NldExhbmcvYmFyLmMgYi9UZXN0cy9TZXRMYW5nL2Jhci5jCmluZGV4IGI5MzQzNTYuLjUxNWU4YzIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1NldExhbmcvYmFyLmMKKysrIGIvVGVzdHMvU2V0TGFuZy9iYXIuYwpAQCAtMSwxMCArMSwyMiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIGludCBmb28oKTsKKworI2lmZGVmIFdJVEhfWk9PTQoraW50IHpvb20oKTsKKyNlbmRpZgorCiBjbGFzcyBBCiB7CiBwdWJsaWM6Ci0gIEEoKSB7IHRoaXMtPmkgPSBmb28oKTsgfQorICBBKCkKKyAgeworICAgIHRoaXMtPmkgPSBmb28oKTsKKyNpZmRlZiBXSVRIX1pPT00KKyAgICBpICs9IHpvb20oKTsKKyAgICBpIC09IHpvb20oKTsKKyNlbmRpZgorICB9CiAgIGludCBpOwogfTsKIApkaWZmIC0tZ2l0IGEvVGVzdHMvU2V0TGFuZy96b29tLnp6eiBiL1Rlc3RzL1NldExhbmcvem9vbS56enoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjODg5OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1NldExhbmcvem9vbS56enoKQEAgLTAsMCArMSw3IEBACitpbnQgem9vbSgpCit7CisgIGludCByID0gMTA7CisgIHIrKzsKKyAgaW50IHJldCA9IHIgKyAxMDsKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1NvdXJjZUdyb3Vwcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1NvdXJjZUdyb3Vwcy9DTWFrZUxpc3RzLnR4dAppbmRleCBhNTc0MGJiLi5kNzI2Mzk1IDEwMDY0NAotLS0gYS9UZXN0cy9Tb3VyY2VHcm91cHMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvU291cmNlR3JvdXBzL0NNYWtlTGlzdHMudHh0CkBAIC0zMCw2ICszMCw5IEBACiAjIGEgZ3JvdXAgd2l0aG91dCBmaWxlcywgaXMgY3VycmVudGx5IG5vdCBjcmVhdGVkCiBzb3VyY2VfZ3JvdXAoRW1wdHlHcm91cCkKIAorIyBGb3J3YXJkIHNsYXNoZXMgY2FuIGJlIGRlbGltaXRlcnMgdG9vCitzb3VyY2VfZ3JvdXAoQmFzZS9OZXN0ZWQgRklMRVMgbmVzdGVkLmMpCisKIHNldChyb290ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKIAogc2V0KHRyZWVfZmlsZXNfd2l0aG91dF9wcmVmaXggJHtyb290fS9zdWIxL3RyZWVfYmFyLmMKQEAgLTU4LDQgKzYxLDUgQEAKIAogYWRkX2V4ZWN1dGFibGUoU291cmNlR3JvdXBzIG1haW4uYyBiYXIuYyBmb28uYyBzdWIxL2Zvby5jIHN1YjEvZm9vYmFyLmMgYmF6LmMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RyZWVfZmlsZXNfd2l0aF9wcmVmaXh9ICR7dHJlZV9maWxlc193aXRob3V0X3ByZWZpeH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RyZWVfZmlsZXNfd2l0aF9lbXB0eV9wcmVmaXh9IFJFQURNRS50eHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0cmVlX2ZpbGVzX3dpdGhfZW1wdHlfcHJlZml4fSBSRUFETUUudHh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9Tb3VyY2VHcm91cHMvbWFpbi5jIGIvVGVzdHMvU291cmNlR3JvdXBzL21haW4uYwppbmRleCA4NzIyNWY1Li5mNjQ2YjQ5IDEwMDY0NAotLS0gYS9UZXN0cy9Tb3VyY2VHcm91cHMvbWFpbi5jCisrKyBiL1Rlc3RzL1NvdXJjZUdyb3Vwcy9tYWluLmMKQEAgLTEyLDYgKzEyLDcgQEAKIGV4dGVybiBpbnQgdHJlZV9iYXIodm9pZCk7CiBleHRlcm4gaW50IHRyZWVfZm9vYmFyKHZvaWQpOwogZXh0ZXJuIGludCB0cmVlX2Jheih2b2lkKTsKK2V4dGVybiBpbnQgbmVzdGVkKHZvaWQpOwogCiBpbnQgbWFpbigpCiB7CkBAIC0yMyw1ICsyNCw4IEBACiAgICAgICAgICAidHJlZV9lbXB0eV9wcmVmaXhfYmFyOiAlZFxuIiwKICAgICAgICAgIHRyZWVfcHJlZml4X2ZvbygpLCB0cmVlX3ByZWZpeF9iYXIoKSwgdHJlZV9iYXIoKSwgdHJlZV9mb29iYXIoKSwKICAgICAgICAgIHRyZWVfYmF6KCksIHRyZWVfZW1wdHlfcHJlZml4X2ZvbygpLCB0cmVlX2VtcHR5X3ByZWZpeF9iYXIoKSk7CisKKyAgcHJpbnRmKCJuZXN0ZWQ6ICVkXG4iLCBuZXN0ZWQoKSk7CisKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9Tb3VyY2VHcm91cHMvbmVzdGVkLmMgYi9UZXN0cy9Tb3VyY2VHcm91cHMvbmVzdGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzMTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1NvdXJjZUdyb3Vwcy9uZXN0ZWQuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBuZXN0ZWQodm9pZCkKK3sKKyAgcmV0dXJuIDEyMzsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1N3aWZ0T25seS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1N3aWZ0T25seS9DTWFrZUxpc3RzLnR4dAppbmRleCBmNGNiYWMyLi40MWQxNGVhIDEwMDY0NAotLS0gYS9UZXN0cy9Td2lmdE9ubHkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvU3dpZnRPbmx5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsMTYgQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCisKKyMgTk9URTogRm9yY2UgdGhlIFJlbGVhc2UgbW9kZSBjb25maWd1cmF0aW9uIGFzIHRoZXJlIGFyZSBzb21lIGlzc3VlcyB3aXRoIHRoZQorIyBkZWJ1ZyBpbmZvcm1hdGlvbiBoYW5kbGluZyBvbiBtYWNPUyBvbiBjZXJ0YWluIFhjb2RlIGJ1aWxkcy4KK2lmKE5PVCBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTKQorICBzZXQoQ01BS0VfQlVJTERfVFlQRSBSZWxlYXNlIENBQ0hFIFNUUklORyAiQ2hvb3NlIHRoZSB0eXBlIG9mIGJ1aWxkIiBGT1JDRSkKK2VuZGlmKCkKKworIyBOT1RFOiBlbmFibGUgc2hhcmVkIGxpYnJhcmllcyBieSBkZWZhdWx0LiAgT2xkZXIgWGNvZGUgcmVsZWFzZXMgZG8gbm90IHBsYXkKKyMgd2VsbCB3aXRoIHN0YXRpYyBsaWJyYXJpZXMsIGFuZCBXaW5kb3dzIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHN0YXRpYworIyBsaWJyYXJpZXMgaW4gU3dpZnQuCitzZXQoQlVJTERfU0hBUkVEX0xJQlMgWUVTKQorCiBwcm9qZWN0KFN3aWZ0T25seSBTd2lmdCkKIAogaWYoTk9UIFhDT0RFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDEwLjIpCkBAIC03LDcgKzE5LDIwIEBACiAgIHNldChDTUFLRV9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OIDMuMCkKIGVuZGlmKCkKIAorc2V0KENNQUtFX1N3aWZ0X01PRFVMRV9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfS9zd2lmdCkKKwogYWRkX2V4ZWN1dGFibGUoU3dpZnRPbmx5IG1haW4uc3dpZnQpCiAKK2FkZF9saWJyYXJ5KEwgTC5zd2lmdCkKKworYWRkX2xpYnJhcnkoTSBNLnN3aWZ0KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKE0gUFVCTElDCisgIEwpCisKK2FkZF9saWJyYXJ5KE4gTi5zd2lmdCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhOIFBVQkxJQworICBNKQorCiAjIER1bW15IHRvIG1ha2Ugc3VyZSBnZW5lcmF0aW9uIHdvcmtzIHdpdGggc3VjaCB0YXJnZXRzLgogYWRkX2xpYnJhcnkoU3dpZnRJZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoU3dpZnRPbmx5IFBSSVZBVEUgU3dpZnRJZmFjZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1N3aWZ0T25seS9MLnN3aWZ0IGIvVGVzdHMvU3dpZnRPbmx5L0wuc3dpZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmZjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1N3aWZ0T25seS9MLnN3aWZ0CkBAIC0wLDAgKzEgQEAKK3B1YmxpYyBsZXQgVGhpcnR5VHdvOiBJbnQgPSAzMgpkaWZmIC0tZ2l0IGEvVGVzdHMvU3dpZnRPbmx5L00uc3dpZnQgYi9UZXN0cy9Td2lmdE9ubHkvTS5zd2lmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDMzM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvU3dpZnRPbmx5L00uc3dpZnQKQEAgLTAsMCArMSwyIEBACitpbXBvcnQgTAorcHVibGljIGxldCBTaXh0eUZvdXI6IEludCA9IFRoaXJ0eVR3byAqIDIKZGlmZiAtLWdpdCBhL1Rlc3RzL1N3aWZ0T25seS9OLnN3aWZ0IGIvVGVzdHMvU3dpZnRPbmx5L04uc3dpZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwZGRmOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1N3aWZ0T25seS9OLnN3aWZ0CkBAIC0wLDAgKzEsMiBAQAoraW1wb3J0IE0KK3B1YmxpYyBsZXQgT25lVHdlbnR5RWlnaHQgPSBTaXh0eUZvdXIgKiAyCmRpZmYgLS1naXQgYS9UZXN0cy9UcnlDb21waWxlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVHJ5Q29tcGlsZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5ZWM5YjcwLi5kZjkyMWQ4IDEwMDY0NAotLS0gYS9UZXN0cy9UcnlDb21waWxlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1RyeUNvbXBpbGUvQ01ha2VMaXN0cy50eHQKQEAgLTE4Nyw3ICsxODcsNyBAQAogaWYoU0hPVUxEX0ZBSUxfRFVFX1RPX0JBRF9TT1VSQ0UgQU5EIE5PVCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiV2F0Y29tIFdNYWtlfE5NYWtlIE1ha2VmaWxlcyIpCiAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIG91dHB1dCAiICAke291dHB1dH0iKQogICBtZXNzYWdlKFNFTkRfRVJST1IgInRyeV9jb21waWxlIHdpdGggYmFkI3NvdXJjZS5jIGRpZCBub3QgZmFpbDpcbiR7b3V0cHV0fSIpCi1lbHNlaWYoTk9UIG91dHB1dCBNQVRDSEVTIFtbKGJhZCNzb3VyY2VcLmN8YmFkXFwpXV0pCitlbHNlaWYoTk9UIG91dHB1dCBNQVRDSEVTIFtbKGJhZCNzb3VyY2VcLmN8YmFkXC5jfGJhZCcpXV0pCiAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIG91dHB1dCAiICAke291dHB1dH0iKQogICBtZXNzYWdlKFNFTkRfRVJST1IgInRyeV9jb21waWxlIHdpdGggYmFkI3NvdXJjZS5jIGZhaWxlZCB3aXRob3V0IG1lbnRpb25pbmcgYmFkIHNvdXJjZTpcbiR7b3V0cHV0fSIpCiBlbHNlKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1VzZVNXSUcvQmFzaWNDb25maWd1cmF0aW9uLmNtYWtlIGIvVGVzdHMvVXNlU1dJRy9CYXNpY0NvbmZpZ3VyYXRpb24uY21ha2UKaW5kZXggZmQzYWM0MC4uZDA1NDk1MyAxMDA2NDQKLS0tIGEvVGVzdHMvVXNlU1dJRy9CYXNpY0NvbmZpZ3VyYXRpb24uY21ha2UKKysrIGIvVGVzdHMvVXNlU1dJRy9CYXNpY0NvbmZpZ3VyYXRpb24uY21ha2UKQEAgLTE4LDYgKzE4LDkgQEAKIGlmKCR7bGFuZ3VhZ2V9IE1BVENIRVMgY3NoYXJwKQogICBzZXQoU1dJR19MQU5HX1RZUEUgVFlQRSBTSEFSRUQpCiBlbmRpZigpCitpZigke2xhbmd1YWdlfSBNQVRDSEVTIGZvcnRyYW4pCisgIHNldChTV0lHX0xBTkdfVFlQRSBUWVBFIFNIQVJFRCkKK2VuZGlmKCkKIGlmKCR7bGFuZ3VhZ2V9IE1BVENIRVMgcHl0aG9uKQogICBmaW5kX3BhY2thZ2UoUHl0aG9uIFJFUVVJUkVEIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCiAgIHNldChTV0lHX0xBTkdfSU5DTFVERV9ESVJFQ1RPUklFUyAke1B5dGhvbl9JTkNMVURFX0RJUlN9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvVXNlU1dJRy9CYXNpY0ZvcnRyYW4vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Vc2VTV0lHL0Jhc2ljRm9ydHJhbi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODFmYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvVXNlU1dJRy9CYXNpY0ZvcnRyYW4vQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTIuLi4zLjEzKQorCitwcm9qZWN0KFRlc3RCYXNpY0ZvcnRyYW4gQ1hYIEZvcnRyYW4pCisKK2luY2x1ZGUoQ1Rlc3QpCisKK3NldChsYW5ndWFnZSAiZm9ydHJhbiIpCisKK2luY2x1ZGUgKC4uL0Jhc2ljQ29uZmlndXJhdGlvbi5jbWFrZSkKK2dldF90YXJnZXRfcHJvcGVydHkoRVhBTVBMRV9QUkVGSVggZXhhbXBsZSBQUkVGSVgpCitpZiAoTk9UIEVYQU1QTEVfUFJFRklYIFNUUkVRVUFMICIke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWH0iCisgICAgQU5EIE5PVCBFWEFNUExFX1BSRUZJWCBTVFJFUVVBTCAiRVhBTVBMRV9QUkVGSVgtTk9URk9VTkQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmV4cGVjdGVkIGxpYnJhcnkgcHJlZml4IG9uIHRhcmdldDogZ290ICIKKyAgICAiJyR7RVhBTVBMRV9QUkVGSVh9JyBidXQgZXhwZWN0ZWQgJyR7Q01BS0VfU0hBUkVEX0xJQlJBUllfUFJFRklYfSciKQorZW5kaWYoKQorCisKK2FkZF9leGVjdXRhYmxlKHJ1bm1lICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9ydW5tZS5mOTApCit0YXJnZXRfbGlua19saWJyYXJpZXMocnVubWUgZXhhbXBsZSkKK3NldF90YXJnZXRfcHJvcGVydGllcyhydW5tZSBQUk9QRVJUSUVTIExJTktFUl9MQU5HVUFHRSBGb3J0cmFuKQorCithZGRfdGVzdCAoTkFNRSBCYXNpY0ZvcnRyYW4KKyAgQ09NTUFORCAkPFRBUkdFVF9GSUxFOnJ1bm1lPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1VzZVNXSUcvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Vc2VTV0lHL0NNYWtlTGlzdHMudHh0CmluZGV4IDNjYzkxMGYuLmQxMDI4NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1VzZVNXSUcvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvVXNlU1dJRy9DTWFrZUxpc3RzLnR4dApAQCAtNTUsNiArNTUsMjEgQEAKICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICkKIAoraWYgKENNYWtlX1RFU1RfVXNlU1dJR19Gb3J0cmFuKQorICBjaGVja19sYW5ndWFnZShGb3J0cmFuKQorICBpZiAoQ01BS0VfRm9ydHJhbl9DT01QSUxFUikKKyAgICBhZGRfdGVzdChOQU1FIFVzZVNXSUcuQmFzaWNGb3J0cmFuIENPTU1BTkQKKyAgICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvVXNlU1dJRy9CYXNpY0ZvcnRyYW4iCisgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9Vc2VTV0lHL0Jhc2ljRm9ydHJhbiIKKyAgICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEJhc2ljRm9ydHJhbgorICAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgKQorICBlbmRpZigpCitlbmRpZigpCiAKIGFkZF90ZXN0KE5BTUUgVXNlU1dJRy5NdWx0aXBsZU1vZHVsZXMgQ09NTUFORAogICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KZGlmZiAtLWdpdCBhL1Rlc3RzL1VzZVNXSUcvcnVubWUuZjkwIGIvVGVzdHMvVXNlU1dJRy9ydW5tZS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5ODVkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1VzZVNXSUcvcnVubWUuZjkwCkBAIC0wLDAgKzEsNzcgQEAKKyEgRmlsZSA6IHJ1bm1lLmY5MAorcHJvZ3JhbSBydW5tZQorICB1c2UgSVNPX0ZPUlRSQU5fRU5WCisgIGltcGxpY2l0IG5vbmUKKyAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IFNURE9VVCA9IE9VVFBVVF9VTklUCisKKyAgY2FsbCBydW4oKQorY29udGFpbnMKKworc3Vicm91dGluZSBydW4oKQorICB1c2UgZXhhbXBsZQorICB1c2UgaXNvX2NfYmluZGluZworICBpbXBsaWNpdCBub25lCisKKyAgdHlwZShDaXJjbGUpICAgICAgICAgIDo6IGMKKyAgdHlwZShTcXVhcmUpLCB0YXJnZXQgIDo6IHMgISAndGFyZ2V0JyBhbGxvd3MgaXQgdG8gYmUgcG9pbnRlZCB0bworICBjbGFzcyhTaGFwZSksIHBvaW50ZXIgOjogc2gKKyAgaW50ZWdlcihDX0lOVCkgOjogbl9zaGFwZXMKKworICAhIC0tLS0tIE9iamVjdCBjcmVhdGlvbiAtLS0tLQorCisgIHdyaXRlKFNURE9VVCwqKSAiQ3JlYXRpbmcgc29tZSBvYmplY3RzIgorICBjID0gQ2lyY2xlKDEwLjBkMCkKKyAgcyA9IFNxdWFyZSgxMC4wZDApCisKKyAgISAtLS0tLSBBY2Nlc3MgYSBzdGF0aWMgbWVtYmVyIC0tLS0tCisgIHdyaXRlKFNURE9VVCwnKGEsaTIsYSknKSJBIHRvdGFsIG9mIiwgcyVnZXRfbnNoYXBlcygpLCAiIHNoYXBlcyB3ZXJlIGNyZWF0ZWQiCisKKyAgISAtLS0tLSBNZW1iZXIgZGF0YSBhY2Nlc3MgLS0tLS0KKworICAhIE5vdGljZSBob3cgd2UgY2FuIGRvIHRoaXMgdXNpbmcgZnVuY3Rpb25zIHNwZWNpZmljIHRvCisgICEgdGhlICdDaXJjbGUnIGNsYXNzLgorICBjYWxsIGMlc2V0X3goMjAuMGQwKQorICBjYWxsIGMlc2V0X3koMzAuMGQwKQorCisgICEgTm93IHVzZSB0aGUgc2FtZSBmdW5jdGlvbnMgaW4gdGhlIGJhc2UgY2xhc3MKKyAgc2ggPT4gcworICBjYWxsIHNoJXNldF94KC0xMC4wZDApCisgIGNhbGwgc2glc2V0X3koICA1LjBkMCkKKworICB3cml0ZShTVERPVVQsKikiSGVyZSBpcyB0aGVpciBjdXJyZW50IHBvc2l0aW9uOiIKKyAgd3JpdGUoU1RET1VULCcoYSxmNS4xLGEsZjUuMSxhKScpIiAgQ2lyY2xlID0gKCIsIGMlZ2V0X3goKSwgIiwiLCBjJWdldF95KCksICIgKSIKKyAgd3JpdGUoU1RET1VULCcoYSxmNS4xLGEsZjUuMSxhKScpIiAgU3F1YXJlID0gKCIsIHMlZ2V0X3goKSwgIiwiLCBzJWdldF95KCksICIgKSIKKworICAhIC0tLS0tIENhbGwgc29tZSBtZXRob2RzIC0tLS0tCisKKyAgd3JpdGUoU1RET1VULCopIkhlcmUgYXJlIHNvbWUgcHJvcGVydGllcyBvZiB0aGUgc2hhcGVzOiIKKyAgY2FsbCBwcmludF9zaGFwZShjKQorICBjYWxsIHByaW50X3NoYXBlKHMpCisKKyAgISAtLS0tLSBEZWxldGUgZXZlcnl0aGluZyAtLS0tLQorCisgICEgTm90ZTogdGhpcyBpbnZva2VzIHRoZSB2aXJ0dWFsIGRlc3RydWN0b3IKKyAgY2FsbCBjJXJlbGVhc2UoKQorICBjYWxsIHMlcmVsZWFzZSgpCisKKyAgbl9zaGFwZXMgPSBjJWdldF9uc2hhcGVzKCkKKyAgd3JpdGUoU1RET1VULCopIG5fc2hhcGVzLCAic2hhcGVzIHJlbWFpbiIKKyAgaWYgKG5fc2hhcGVzIC89IDApIHRoZW4KKyAgICB3cml0ZShTVERPVVQsKikgIlNoYXBlcyB3ZXJlIG5vdCBmcmVlZCBwcm9wZXJseSEiCisgICAgc3RvcCAxCisgIGVuZGlmCisKKyAgd3JpdGUoU1RET1VULCopICJHb29kYnllIgorZW5kIHN1YnJvdXRpbmUKKworc3Vicm91dGluZSBwcmludF9zaGFwZShzKQorICB1c2UgZXhhbXBsZSwgb25seSA6IFNoYXBlCisgIHVzZSBpc29fY19iaW5kaW5nCisgIGltcGxpY2l0IG5vbmUKKyAgY2xhc3MoU2hhcGUpLCBpbnRlbnQoaW4pIDo6IHMKKworICB3cml0ZShTVERPVVQsKikiICAgIGFyZWEgICAgICA9ICIscyVhcmVhKCkKKyAgd3JpdGUoU1RET1VULCopIiAgICBwZXJpbWV0ZXIgPSAiLHMlcGVyaW1ldGVyKCkKK2VuZCBzdWJyb3V0aW5lCisKK2VuZCBwcm9ncmFtCmRpZmYgLS1naXQgYS9UZXN0cy9WU05zaWdodFRlZ3JhL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9UZXN0cy9WU0FuZHJvaWQvQW5kcm9pZE1hbmlmZXN0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvVlNOc2lnaHRUZWdyYS9BbmRyb2lkTWFuaWZlc3QueG1sCnJlbmFtZSB0byBUZXN0cy9WU0FuZHJvaWQvQW5kcm9pZE1hbmlmZXN0LnhtbApkaWZmIC0tZ2l0IGEvVGVzdHMvVlNBbmRyb2lkL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVlNBbmRyb2lkL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYjFlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9WU0FuZHJvaWQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1NyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKK3Byb2plY3QoVlNBbmRyb2lkIEMgQ1hYKQorCitzZXQoQ01BS0VfQU5EUk9JRF9BUkNIIGFybXY3LWEpCitzZXQoQ01BS0VfQU5EUk9JRF9TVExfVFlQRSBzdGxwb3J0X3NoYXJlZCkKK3NldChDTUFLRV9BTkRST0lEX0FQSV9NSU4gOSkKK3NldChDTUFLRV9BTkRST0lEX0FQSSAxNSkKK3NldChDTUFLRV9BTkRST0lEX0dVSSAxKQorCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0vYmluIikKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9saWIiKQorc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2xpYiIpCisKK3NldChGSVJTVF9DX0ZJTEVTCisgIGpuaS9maXJzdC5jCisgIGpuaS9maXJzdC5oCisgICkKKworc291cmNlX2dyb3VwKGpuaSBGSUxFUyAke0ZJUlNUX0NfRklMRVN9KQorYWRkX2xpYnJhcnkodHdvbGliLWZpcnN0ICR7RklSU1RfQ19GSUxFU30pCisKK3NldChTRUNPTkRfQ19GSUxFUworICBqbmkvc2Vjb25kLmMKKyAgKQorc2V0KFNFQ09ORF9KQVZBX0ZJTEVTCisgIHNyYy9jb20vZXhhbXBsZS90d29saWJzL1R3b0xpYnMuamF2YQorICApCitzZXQoU0VDT05EX1JFU19GSUxFUworICByZXMvdmFsdWVzL3N0cmluZ3MueG1sCisgICkKK3NldChTRUNPTkRfQU5EUk9JRF9GSUxFUworICBBbmRyb2lkTWFuaWZlc3QueG1sCisgICkKKworc291cmNlX2dyb3VwKGpuaSBGSUxFUyAke1NFQ09ORF9DX0ZJTEVTfSkKK3NvdXJjZV9ncm91cChyZXNcXHZhbHVlcyBGSUxFUyAke1NFQ09ORF9SRVNfRklMRVN9KQorc291cmNlX2dyb3VwKHNyY1xcY29tXFxleGFtcGxlXFx0d29saWJzIEZJTEVTICR7U0VDT05EX0pBVkFfRklMRVN9KQorYWRkX2V4ZWN1dGFibGUodHdvbGliLXNlY29uZAorICAke1NFQ09ORF9DX0ZJTEVTfQorICAke1NFQ09ORF9KQVZBX0ZJTEVTfQorICAke1NFQ09ORF9SRVNfRklMRVN9CisgICR7U0VDT05EX0FORFJPSURfRklMRVN9CisgICkKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHR3b2xpYi1zZWNvbmQgUFVCTElDIGpuaSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0d29saWItc2Vjb25kIHR3b2xpYi1maXJzdCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0d29saWItc2Vjb25kIG0pICMgdGVzdCBsaW5raW5nIHRvIGxpYnJhcnkgYnkgbmFtZQorCitzZXRfcHJvcGVydHkoVEFSR0VUIHR3b2xpYi1zZWNvbmQgUFJPUEVSVFkgQ19TVEFOREFSRCAxMSkKK3NldF90YXJnZXRfcHJvcGVydGllcyh0d29saWItc2Vjb25kIFBST1BFUlRJRVMgQU5EUk9JRF9TS0lQX0FOVF9TVEVQIDEpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXModHdvbGliLXNlY29uZCBQUk9QRVJUSUVTIEFORFJPSURfUFJPR1VBUkQgMSkKK3NldF90YXJnZXRfcHJvcGVydGllcyh0d29saWItc2Vjb25kIFBST1BFUlRJRVMgQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSCBwcm9ndWFyZC1hbmRyb2lkLnR4dCkKK3NldF90YXJnZXRfcHJvcGVydGllcyh0d29saWItc2Vjb25kIFBST1BFUlRJRVMgQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSCAvZGVmaW5pdGVseS9pbnNlY3VyZSkKKworc2V0X3Byb3BlcnR5KFRBUkdFVCB0d29saWItc2Vjb25kIFBST1BFUlRZIEFORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUyAkPFRBUkdFVF9GSUxFX0RJUjp0d29saWItc2Vjb25kPikKK3NldF9wcm9wZXJ0eShUQVJHRVQgdHdvbGliLXNlY29uZCBQUk9QRVJUWSBBTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTICQ8VEFSR0VUX0ZJTEVfTkFNRTp0d29saWItc2Vjb25kPikKKworc2V0X3Byb3BlcnR5KFRBUkdFVCB0d29saWItc2Vjb25kIFBST1BFUlRZIEFORFJPSURfSkFSX0RJUkVDVE9SSUVTICQ8VEFSR0VUX0ZJTEVfRElSOnR3b2xpYi1maXJzdD4pCmRpZmYgLS1naXQgYS9UZXN0cy9WU05zaWdodFRlZ3JhL2J1aWxkLnhtbCBiL1Rlc3RzL1ZTQW5kcm9pZC9idWlsZC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1ZTTnNpZ2h0VGVncmEvYnVpbGQueG1sCnJlbmFtZSB0byBUZXN0cy9WU0FuZHJvaWQvYnVpbGQueG1sCmRpZmYgLS1naXQgYS9UZXN0cy9WU05zaWdodFRlZ3JhL2puaS9maXJzdC5jIGIvVGVzdHMvVlNBbmRyb2lkL2puaS9maXJzdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9WU05zaWdodFRlZ3JhL2puaS9maXJzdC5jCnJlbmFtZSB0byBUZXN0cy9WU0FuZHJvaWQvam5pL2ZpcnN0LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTTnNpZ2h0VGVncmEvam5pL2ZpcnN0LmggYi9UZXN0cy9WU0FuZHJvaWQvam5pL2ZpcnN0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1ZTTnNpZ2h0VGVncmEvam5pL2ZpcnN0LmgKcmVuYW1lIHRvIFRlc3RzL1ZTQW5kcm9pZC9qbmkvZmlyc3QuaApkaWZmIC0tZ2l0IGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9qbmkvc2Vjb25kLmMgYi9UZXN0cy9WU0FuZHJvaWQvam5pL3NlY29uZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9WU05zaWdodFRlZ3JhL2puaS9zZWNvbmQuYwpyZW5hbWUgdG8gVGVzdHMvVlNBbmRyb2lkL2puaS9zZWNvbmQuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9wcm9ndWFyZC1hbmRyb2lkLnR4dCBiL1Rlc3RzL1ZTQW5kcm9pZC9wcm9ndWFyZC1hbmRyb2lkLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvVlNOc2lnaHRUZWdyYS9wcm9ndWFyZC1hbmRyb2lkLnR4dApyZW5hbWUgdG8gVGVzdHMvVlNBbmRyb2lkL3Byb2d1YXJkLWFuZHJvaWQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9WU05zaWdodFRlZ3JhL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi9UZXN0cy9WU0FuZHJvaWQvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvVlNOc2lnaHRUZWdyYS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCnJlbmFtZSB0byBUZXN0cy9WU0FuZHJvaWQvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9zcmMvY29tL2V4YW1wbGUvdHdvbGlicy9Ud29MaWJzLmphdmEgYi9UZXN0cy9WU0FuZHJvaWQvc3JjL2NvbS9leGFtcGxlL3R3b2xpYnMvVHdvTGlicy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9WU05zaWdodFRlZ3JhL3NyYy9jb20vZXhhbXBsZS90d29saWJzL1R3b0xpYnMuamF2YQpyZW5hbWUgdG8gVGVzdHMvVlNBbmRyb2lkL3NyYy9jb20vZXhhbXBsZS90d29saWJzL1R3b0xpYnMuamF2YQpkaWZmIC0tZ2l0IGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1ZTTnNpZ2h0VGVncmEvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzRmMmYuLjAwMDAwMDAKLS0tIGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCi1wcm9qZWN0KFZTTnNpZ2h0VGVncmEgQyBDWFgpCi0KLXNldChDTUFLRV9BTkRST0lEX0FSQ0ggYXJtdjctYSkKLXNldChDTUFLRV9BTkRST0lEX1NUTF9UWVBFIHN0bHBvcnRfc2hhcmVkKQotc2V0KENNQUtFX0FORFJPSURfQVBJX01JTiA5KQotc2V0KENNQUtFX0FORFJPSURfQVBJIDE1KQotc2V0KENNQUtFX0FORFJPSURfR1VJIDEpCi0KLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9iaW4iKQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2xpYiIpCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0vbGliIikKLQotc2V0KEZJUlNUX0NfRklMRVMKLSAgam5pL2ZpcnN0LmMKLSAgam5pL2ZpcnN0LmgKLSAgKQotCi1zb3VyY2VfZ3JvdXAoam5pIEZJTEVTICR7RklSU1RfQ19GSUxFU30pCi1hZGRfbGlicmFyeSh0d29saWItZmlyc3QgJHtGSVJTVF9DX0ZJTEVTfSkKLQotc2V0KFNFQ09ORF9DX0ZJTEVTCi0gIGpuaS9zZWNvbmQuYwotICApCi1zZXQoU0VDT05EX0pBVkFfRklMRVMKLSAgc3JjL2NvbS9leGFtcGxlL3R3b2xpYnMvVHdvTGlicy5qYXZhCi0gICkKLXNldChTRUNPTkRfUkVTX0ZJTEVTCi0gIHJlcy92YWx1ZXMvc3RyaW5ncy54bWwKLSAgKQotc2V0KFNFQ09ORF9BTkRST0lEX0ZJTEVTCi0gIEFuZHJvaWRNYW5pZmVzdC54bWwKLSAgKQotCi1zb3VyY2VfZ3JvdXAoam5pIEZJTEVTICR7U0VDT05EX0NfRklMRVN9KQotc291cmNlX2dyb3VwKHJlc1xcdmFsdWVzIEZJTEVTICR7U0VDT05EX1JFU19GSUxFU30pCi1zb3VyY2VfZ3JvdXAoc3JjXFxjb21cXGV4YW1wbGVcXHR3b2xpYnMgRklMRVMgJHtTRUNPTkRfSkFWQV9GSUxFU30pCi1hZGRfZXhlY3V0YWJsZSh0d29saWItc2Vjb25kCi0gICR7U0VDT05EX0NfRklMRVN9Ci0gICR7U0VDT05EX0pBVkFfRklMRVN9Ci0gICR7U0VDT05EX1JFU19GSUxFU30KLSAgJHtTRUNPTkRfQU5EUk9JRF9GSUxFU30KLSAgKQotdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModHdvbGliLXNlY29uZCBQVUJMSUMgam5pKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHR3b2xpYi1zZWNvbmQgdHdvbGliLWZpcnN0KQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHR3b2xpYi1zZWNvbmQgbSkgIyB0ZXN0IGxpbmtpbmcgdG8gbGlicmFyeSBieSBuYW1lCi0KLXNldF9wcm9wZXJ0eShUQVJHRVQgdHdvbGliLXNlY29uZCBQUk9QRVJUWSBDX1NUQU5EQVJEIDExKQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1NLSVBfQU5UX1NURVAgMSkKLXNldF90YXJnZXRfcHJvcGVydGllcyh0d29saWItc2Vjb25kIFBST1BFUlRJRVMgQU5EUk9JRF9QUk9HVUFSRCAxKQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRIIHByb2d1YXJkLWFuZHJvaWQudHh0KQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRIIC9kZWZpbml0ZWx5L2luc2VjdXJlKQotCi1zZXRfcHJvcGVydHkoVEFSR0VUIHR3b2xpYi1zZWNvbmQgUFJPUEVSVFkgQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTICQ8VEFSR0VUX0ZJTEVfRElSOnR3b2xpYi1zZWNvbmQ+KQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0d29saWItc2Vjb25kIFBST1BFUlRZIEFORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMgJDxUQVJHRVRfRklMRV9OQU1FOnR3b2xpYi1zZWNvbmQ+KQotCi1zZXRfcHJvcGVydHkoVEFSR0VUIHR3b2xpYi1zZWNvbmQgUFJPUEVSVFkgQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMgJDxUQVJHRVRfRklMRV9ESVI6dHdvbGliLWZpcnN0PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiOGUxNTdkLi41NmU0YzFkIDEwMDY0NAotLS0gYS9UZXN0cy9WU1dpblN0b3JlUGhvbmUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvVlNXaW5TdG9yZVBob25lL0NNYWtlTGlzdHMudHh0CkBAIC0xMTQsNyArMTE0LDcgQEAKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtTVFJJTkdfRklMRVN9IFBST1BFUlRZIFZTX1RPT0xfT1ZFUlJJREUgIlBSSVJlc291cmNlIikKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtERUJVR19DT05URU5UX0ZJTEVTfSBQUk9QRVJUWSBWU19ERVBMT1lNRU5UX0NPTlRFTlQgJDxDT05GSUc6RGVidWc+KQogc2V0X3Byb3BlcnR5KFNPVVJDRSAke1JFTEVBU0VfQ09OVEVOVF9GSUxFU30gUFJPUEVSVFkKLSAgVlNfREVQTE9ZTUVOVF9DT05URU5UICQ8T1I6JDxDT05GSUc6UmVsZWFzZT4sJDxDT05GSUc6UmVsV2l0aERlYkluZm8+LCQ8Q09ORklHOk1pblNpemVSZWw+PikKKyAgVlNfREVQTE9ZTUVOVF9DT05URU5UICQ8Q09ORklHOlJlbGVhc2UsUmVsV2l0aERlYkluZm8sTWluU2l6ZVJlbD4pCiAKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtQSVhFTFNIQURFUl9GSUxFU30gUFJPUEVSVFkgVlNfU0hBREVSX1RZUEUgUGl4ZWwpCiBzZXRfcHJvcGVydHkoU09VUkNFICR7UElYRUxTSEFERVJfRklMRVN9IFBST1BFUlRZIFZTX1NIQURFUl9FTlRSWVBPSU5UIG1haW5QUykKQEAgLTEyNyw3ICsxMjcsNyBAQAogc2V0X3Byb3BlcnR5KFNPVVJDRSAke1ZFUlRFWFNIQURFUl9GSUxFU30gUFJPUEVSVFkgVlNfU0hBREVSX01PREVMIDQuMF9sZXZlbF85XzMpCiBzZXRfcHJvcGVydHkoU09VUkNFICR7VkVSVEVYU0hBREVSX0ZJTEVTfSBQUk9QRVJUWSBWU19TSEFERVJfRkxBR1MgIi9ERkxBR1NfQURERUQiKQogc2V0X3Byb3BlcnR5KFNPVVJDRSAke1ZFUlRFWFNIQURFUl9GSUxFU30gUFJPUEVSVFkgVlNfU0hBREVSX09VVFBVVF9IRUFERVJfRklMRSAiJChPdXREaXIpJShGaWxlbmFtZSkuaCIpCi0KK3NldF9wcm9wZXJ0eShTT1VSQ0UgJHtWRVJURVhTSEFERVJfRklMRVN9IFBST1BFUlRZIFZTX1NFVFRJTkdTICIkPCQ8Q09ORklHOkRFQlVHPjpTb3VyY2VQcm9wZXJ0eTE9U291cmNlUHJvcGVydHkxVmFsdWU+IikKIAogc291cmNlX2dyb3VwKCJTb3VyY2UgRmlsZXMiIEZJTEVTICR7U09VUkNFX0ZJTEVTfSkKIHNvdXJjZV9ncm91cCgiSGVhZGVyIEZpbGVzIiBGSUxFUyAke0hFQURFUl9GSUxFU30pCkBAIC0xMzUsNiArMTM1LDExIEBACiAKIGFkZF9leGVjdXRhYmxlKCR7RVhFX05BTUV9IFdJTjMyICR7U09VUkNFX0ZJTEVTfSAke0hFQURFUl9GSUxFU30gJHtSRVNPVVJDRV9GSUxFU30pCiBzZXRfcHJvcGVydHkoVEFSR0VUICR7RVhFX05BTUV9IFBST1BFUlRZIFZTX1dJTlJUX0NPTVBPTkVOVCBUUlVFKQorc2V0X3Byb3BlcnR5KFRBUkdFVCAke0VYRV9OQU1FfSBQUk9QRVJUWSBWU19TT1VSQ0VfU0VUVElOR1NfRlhDb21waWxlCisgICJUYXJnZXRQcm9wZXJ0eTE9JDwkPENPTkZJRzpERUJVRz46VGFyZ2V0UHJvcGVydHkxVmFsdWVEZWJ1Zz4kPCQ8Q09ORklHOlJFTEVBU0U+OlRhcmdldFByb3BlcnR5MVZhbHVlUmVsZWFzZT4iKQorCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUICR7RVhFX05BTUV9IFBPU1RfQlVJTEQKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1EdmN4cHJvaj0iJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7RVhFX05BTUV9LnZjeHByb2oiIC1QICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vRW5zdXJlUHJvcGVydGllc1NldC5jbWFrZSIpCiAKIHN0cmluZyhTVUJTVFJJTkcgIiR7Q01BS0VfU1lTVEVNX1ZFUlNJT059IiAwLCA0LCBTSE9SVF9WRVJTSU9OKQogCmRpZmYgLS1naXQgYS9UZXN0cy9WU1dpblN0b3JlUGhvbmUvRW5zdXJlUHJvcGVydGllc1NldC5jbWFrZSBiL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9FbnN1cmVQcm9wZXJ0aWVzU2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOGM0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9WU1dpblN0b3JlUGhvbmUvRW5zdXJlUHJvcGVydGllc1NldC5jbWFrZQpAQCAtMCwwICsxLDQ1IEBACittYWNybyhlbnN1cmVfcHJvcHNfc2V0IHByb2plY3RGaWxlKQorICBpZihOT1QgRVhJU1RTICIke3Byb2plY3RGaWxlfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUHJvamVjdCBmaWxlICR7cHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIHNldChTb3VyY2VQcm9wZXJ0eUZvdW5kIEZBTFNFKQorICBzZXQoRGVidWdUYXJnZXRQcm9wZXJ0eUZvdW5kIEZBTFNFKQorICBzZXQoUmVsZWFzZVRhcmdldFByb3BlcnR5Rm91bmQgRkFMU0UpCisKKyAgZmlsZShTVFJJTkdTICIke3Byb2plY3RGaWxlfSIgbGluZXMpCisgIGZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgICBpZihsaW5lIE1BVENIRVMgIjxTb3VyY2VQcm9wZXJ0eTEuKkRlYnVnLio+U291cmNlUHJvcGVydHkxVmFsdWU8L1NvdXJjZVByb3BlcnR5MT4iKQorICAgICAgbWVzc2FnZSgiU291cmNlUHJvcGVydHkxIHNldHRpbmcgZm91bmQiKQorICAgICAgc2V0KFNvdXJjZVByb3BlcnR5Rm91bmQgVFJVRSkKKyAgICBlbmRpZigpCisKKyAgICBpZihsaW5lIE1BVENIRVMgIjxUYXJnZXRQcm9wZXJ0eTEuKkRlYnVnLio+VGFyZ2V0UHJvcGVydHkxVmFsdWVEZWJ1ZzwvVGFyZ2V0UHJvcGVydHkxPiIpCisgICAgICBtZXNzYWdlKCJEZWJ1ZyBUYXJnZXRQcm9wZXJ0eTEgc2V0dGluZyBmb3VuZCIpCisgICAgICBzZXQoRGVidWdUYXJnZXRQcm9wZXJ0eUZvdW5kIFRSVUUpCisgICAgZW5kaWYoKQorCisgICAgaWYobGluZSBNQVRDSEVTICI8VGFyZ2V0UHJvcGVydHkxLipSZWxlYXNlLio+VGFyZ2V0UHJvcGVydHkxVmFsdWVSZWxlYXNlPC9UYXJnZXRQcm9wZXJ0eTE+IikKKyAgICAgIG1lc3NhZ2UoIlJlbGVhc2UgVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgZm91bmQiKQorICAgICAgc2V0KFJlbGVhc2VUYXJnZXRQcm9wZXJ0eUZvdW5kIFRSVUUpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZiAoTk9UIFNvdXJjZVByb3BlcnR5Rm91bmQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiU291cmNlUHJvcGVydHkxIHNldHRpbmcgbm90IGZvdW5kIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYgKE5PVCBEZWJ1Z1RhcmdldFByb3BlcnR5Rm91bmQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRGVidWcgVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgbm90IGZvdW5kIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYgKE5PVCBSZWxlYXNlVGFyZ2V0UHJvcGVydHlGb3VuZCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJSZWxlYXNlIFRhcmdldFByb3BlcnR5MSBzZXR0aW5nIG5vdCBmb3VuZCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCitlbnN1cmVfcHJvcHNfc2V0KCIke3ZjeHByb2p9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTV2luZG93c0Zvcm1zUmVzeC9XaW5kb3dzRm9ybXNSZXN4L015Rm9ybS5jcHAgYi9UZXN0cy9WU1dpbmRvd3NGb3Jtc1Jlc3gvV2luZG93c0Zvcm1zUmVzeC9NeUZvcm0uY3BwCmluZGV4IDE1NGUyNjguLjBjMzczNzAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1ZTV2luZG93c0Zvcm1zUmVzeC9XaW5kb3dzRm9ybXNSZXN4L015Rm9ybS5jcHAKKysrIGIvVGVzdHMvVlNXaW5kb3dzRm9ybXNSZXN4L1dpbmRvd3NGb3Jtc1Jlc3gvTXlGb3JtLmNwcApAQCAtMSArMSBAQAotI2luY2x1ZGUgIk15Rm9ybS5oIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyNpbmNsdWRlICJNeUZvcm0uaCIKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZhcmlhYmxlVW51c2VkVmlhU2V0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFTZXQvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMjNhYjIuLjAwMDAwMDAKLS0tIGEvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFTZXQvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXNldChVTlVTRURfVkFSSUFCTEUpCi0jIFdhcm5pbmcgc2hvdWxkIG9jY3VyIGhlcmUKLXNldChVTlVTRURfVkFSSUFCTEUgIlVzYWdlIikKLW1lc3NhZ2UoU1RBVFVTICIke1VOVVNFRF9WQVJJQUJMRX0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFVbnNldC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1ZhcmlhYmxlVW51c2VkVmlhVW5zZXQvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNDAzMWQuLjAwMDAwMDAKLS0tIGEvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFVbnNldC9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIyBOT1RFOiBDaGFuZ2luZyBsaW5lcyBpbiBoZXJlIGNoYW5nZXMgdGhlIHRlc3QgcmVzdWx0cyBzaW5jZSB0aGUgZmlyc3QKLSMgaW5zdGFuY2Ugc2hvdWxkbid0IHdhcm4sIGJ1dCB0aGUgc2Vjb25kIHNob3VsZCBhbmQgdGhleSBoYXZlIHRoZSBzYW1lIG1lc3NhZ2UKLQotIyBBIHdhcm5pbmcgc2hvdWxkIE5PVCBiZSBpc3N1ZWQgZm9yIHRoaXMgbGluZToKLXNldChVTlVTRURfVkFSSUFCTEUpCi0jIFdhcm5pbmcgc2hvdWxkIG9jY3VyIGhlcmU6Ci1zZXQoVU5VU0VEX1ZBUklBQkxFKQotbWVzc2FnZShTVEFUVVMgIiR7VU5VU0VEX1ZBUklBQkxFfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9YQ1Rlc3QvU3RhdGljTGliRXhhbXBsZS9TdGF0aWNMaWJFeGFtcGxlLmMgYi9UZXN0cy9YQ1Rlc3QvU3RhdGljTGliRXhhbXBsZS9TdGF0aWNMaWJFeGFtcGxlLmMKaW5kZXggYjE5OGY4MC4uOGQxNmViNSAxMDA2NDQKLS0tIGEvVGVzdHMvWENUZXN0L1N0YXRpY0xpYkV4YW1wbGUvU3RhdGljTGliRXhhbXBsZS5jCisrKyBiL1Rlc3RzL1hDVGVzdC9TdGF0aWNMaWJFeGFtcGxlL1N0YXRpY0xpYkV4YW1wbGUuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJTdGF0aWNMaWJFeGFtcGxlLmgiCiAKLWludCBGb3VydHlGb3VyKCkKK2ludCBGb3VydHlGb3VyKHZvaWQpCiB7CiAgIHJldHVybiA0NDsKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1hDVGVzdC9TdGF0aWNMaWJFeGFtcGxlL1N0YXRpY0xpYkV4YW1wbGUuaCBiL1Rlc3RzL1hDVGVzdC9TdGF0aWNMaWJFeGFtcGxlL1N0YXRpY0xpYkV4YW1wbGUuaAppbmRleCAxNDdhOTA5Li44ODY5NWIxIDEwMDY0NAotLS0gYS9UZXN0cy9YQ1Rlc3QvU3RhdGljTGliRXhhbXBsZS9TdGF0aWNMaWJFeGFtcGxlLmgKKysrIGIvVGVzdHMvWENUZXN0L1N0YXRpY0xpYkV4YW1wbGUvU3RhdGljTGliRXhhbXBsZS5oCkBAIC0xICsxIEBACi1pbnQgRm91cnR5Rm91cigpOworaW50IEZvdXJ0eUZvdXIodm9pZCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvR2l0U2V0dXAvc2V0dXAtdXNlciBiL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCmluZGV4IDBiOTg4NzkuLjRjYmQxODQgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCisrKyBiL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCkBAIC0yMCw3ICsyMCwxNCBAQAogIyBQcm9qZWN0IGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3Rpb25zOiBOT05FCiAKIGZvciAoKCA7IDsgKSk7IGRvCi0JaWRlbnQ9IiQoZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UIDI+L2Rldi9udWxsIHwgcmV2IHwgY3V0IC1kJyAnIC1mMy0gfCByZXYpIgorCWlmIHR5cGUgLXAgcmV2ID4vZGV2L251bGwgJiYgdHlwZSAtcCBjdXQgPi9kZXYvbnVsbDsgdGhlbgorCQlpZGVudD0iJChnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQgMj4vZGV2L251bGwgfCByZXYgfCBjdXQgLWQnICcgLWYzLSB8IHJldikiCisJZWxpZiB1c2VyX25hbWU9JChnaXQgY29uZmlnIC0tZ2V0IHVzZXIubmFtZSkgJiYKKwkJdXNlcl9lbWFpbD0kKGdpdCBjb25maWcgLS1nZXQgdXNlci5lbWFpbCk7IHRoZW4KKwkJaWRlbnQ9IiR1c2VyX25hbWUgPCR1c2VyX2VtYWlsPiIKKwllbHNlCisJCWlkZW50PSIiCisJZmkKIAogCWlmIHRlc3QgLW4gIiRpZGVudCI7IHRoZW4KIAkJZWNobyAnWW91ciBjb21taXRzIHdpbGwgcmVjb3JkIGFzIEF1dGhvcjoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9JV1lVL21hcHBpbmcuaW1wIGIvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKaW5kZXggMzQ5N2I1My4uNjZjYjI4MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKKysrIGIvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKQEAgLTI3LDYgKzI3LDcgQEAKICAgeyBpbmNsdWRlOiBbICI8Yml0cy9zdGRfYWJzLmg+IiwgcHJpdmF0ZSwgIjxzdGRsaWIuaD4iLCBwdWJsaWMgXSB9LAogICB7IGluY2x1ZGU6IFsgIjxiaXRzL3N0ZGludC1pbnRuLmg+IiwgcHJpdmF0ZSwgIjxzdGRpbnQuaD4iLCBwdWJsaWMgXSB9LAogICB7IGluY2x1ZGU6IFsgIjxiaXRzL3N0ZGludC11aW50bi5oPiIsIHByaXZhdGUsICI8c3RkaW50Lmg+IiwgcHVibGljIF0gfSwKKyAgeyBpbmNsdWRlOiBbICI8Yml0cy9zdHJpbmdfdmlldy50Y2M+IiwgcHJpdmF0ZSwgIjxzdHJpbmdfdmlldz4iLCBwdWJsaWMgXSB9LAogICB7IGluY2x1ZGU6IFsgIjxiaXRzL3RpbWUuaD4iLCBwcml2YXRlLCAiPHRpbWUuaD4iLCBwdWJsaWMgXSB9LAogICB7IGluY2x1ZGU6IFsgIjxiaXRzL3R5cGVzL2Nsb2NrX3QuaD4iLCBwcml2YXRlLCAiPHRpbWUuaD4iLCBwdWJsaWMgXSB9LAogICB7IGluY2x1ZGU6IFsgIjxiaXRzL3R5cGVzL21ic3RhdGVfdC5oPiIsIHByaXZhdGUsICI8d2NoYXIuaD4iLCBwdWJsaWMgXSB9LApAQCAtNzcsNiArNzgsNyBAQAogICAjIFVzZSAnLVhpd3l1IC12NycgdG8gc2VlIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZXMgdGhhdCBuZWVkIHRoaXMuCiAgICMgVE9ETzogQ2FuIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIGFuIEAtZXhwcmVzc2lvbj8KICAgI3sgc3ltYm9sOiBbICJAc3RkOjpfX2RlY2F5X2FuZF9zdHJpcDwuKj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGJvb2w+OjpfX3R5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxjaGFyIGNvbnN0ICgmKVsxXT46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtQ29tbWFuZCAqJj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtR2VuZXJhdG9yVGFyZ2V0IComPjo6X190eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKQEAgLTg2LDYxICs4OCwyNCBAQAogICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxzdGQ6OmJhc2ljX3N0cmluZzxjaGFyPiAmPjo6X190eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6X19kZWNheV9hbmRfc3RyaXA8Y29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcj4gJj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtRmluZFBhY2thZ2VDb21tYW5kOjpQYXRoTGFiZWwgJj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OlRhcmdldEFsaWFzICY+OjpfX3R5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Y21DVGVzdFRlc3RQcm9wZXJ0aWVzICosIHN0ZDo6dmVjdG9yPGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Y21DVGVzdFRlc3RQcm9wZXJ0aWVzLCBzdGQ6OmFsbG9jYXRvcjxjbUNUZXN0VGVzdEhhbmRsZXI6OmNtQ1Rlc3RUZXN0UHJvcGVydGllcz4gPiA+ICY+OjpfX3R5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAorICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxjb25zdCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHN0ZDo6cGFpcjxjbTo6c3RyaW5nX3ZpZXcsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoQXJndW1lbnRQYXJzZXI6Okluc3RhbmNlICYsIHZvaWQgKik+ID4gKiwgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGNtOjpzdHJpbmdfdmlldywgc3RkOjpmdW5jdGlvbjx2b2lkIChBcmd1bWVudFBhcnNlcjo6SW5zdGFuY2UgJiwgdm9pZCAqKT4gPiwgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNtOjpzdHJpbmdfdmlldywgc3RkOjpmdW5jdGlvbjx2b2lkIChBcmd1bWVudFBhcnNlcjo6SW5zdGFuY2UgJiwgdm9pZCAqKT4gPiA+ID4gPiAmPjo6X190eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6X19zdWNjZXNzX3R5cGU8c3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZSwgc3RkOjpyYXRpbzwxLCAxPiA+ID46OnR5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpfX3N1Y2Nlc3NfdHlwZTxzdGQ6OmNocm9ubzo6ZHVyYXRpb248bG9uZywgc3RkOjpyYXRpbzwxLCAxMDAwMDAwMDAwPiA+ID46OnR5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjplbmFibGVfaWY8dHJ1ZSwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPGxvbmcsIHN0ZDo6cmF0aW88MSwgMT4gPiA+Ojp0eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6ZW5hYmxlX2lmPHRydWUsIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxsb25nLCBzdGQ6OnJhdGlvPDYwLCAxPiA+ID46OnR5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjplbmFibGVfaWY8dHJ1ZSwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPGxvbmcsIHN0ZDo6cmF0aW88MSwgMTAwMD4gPiA+Ojp0eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKIAotICAjIEtXSU1MCi0gIHsgaW5jbHVkZTogWyAiPHN0ZGludC5oPiIsIHB1YmxpYywgIlwiY21fa3dpbWwuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8aW50dHlwZXMuaD4iLCBwdWJsaWMsICJcImNtX2t3aW1sLmhcIiIsIHB1YmxpYyBdIH0sCi0KLSAgIyBTZWxmLXN1ZmZpY2llbnQgd3JhcHBlciBmb3IgPHN5cy9zdGF0Lmg+Ci0gIHsgc3ltYm9sOiBbICJtb2RlX3QiLCBwcml2YXRlLCAiXCJjbV9zeXNfc3RhdC5oXCIiLCBwdWJsaWMgXSB9LAotCi0gICMgV3JhcHBlcnMgZm9yIDNyZC1wYXJ0eSBsaWJyYXJpZXMgdXNlZCBmcm9tIHRoZSBzeXN0ZW0uCi0gIHsgaW5jbHVkZTogWyAiPGFyY2hpdmUuaD4iLCBwcml2YXRlLCAiXCJjbV9saWJhcmNoaXZlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGFyY2hpdmVfZW50cnkuaD4iLCBwcml2YXRlLCAiXCJjbV9saWJhcmNoaXZlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiQDxjdXJsLy4rXFwuaD4iLCBwcml2YXRlLCAiXCJjbV9jdXJsLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGV4cGF0Lmg+IiwgcHJpdmF0ZSwgIlwiY21fZXhwYXQuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8ZXhwYXRfZXh0ZXJuYWwuaD4iLCBwcml2YXRlLCAiXCJjbV9leHBhdC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIjxqc29uL3JlYWRlci5oPiIsIHByaXZhdGUsICJcImNtX2pzb25jcHBfcmVhZGVyLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGpzb24vdmFsdWUuaD4iLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3ZhbHVlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGpzb24vd3JpdGVyLmg+IiwgcHJpdmF0ZSwgIlwiY21fanNvbmNwcF93cml0ZXIuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8cmhhc2guaD4iLCBwcml2YXRlLCAiXCJjbV9yaGFzaC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIjx1di5oPiIsIHByaXZhdGUsICJcImNtX3V2LmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiQDx1dlsvLV0uK1xcLmg+IiwgcHJpdmF0ZSwgIlwiY21fdXYuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8a3dpbWwvYWJpLmg+IiwgcHJpdmF0ZSwgIlwiY21fa3dpbWwuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8a3dpbWwvaW50Lmg+IiwgcHJpdmF0ZSwgIlwiY21fa3dpbWwuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8emNvbmYuaD4iLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPHpsaWIuaD4iLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0KLSAgIyBXcmFwcGVycyBmb3IgYnVuZGxlZCAzcmQtcGFydHkgbGlicmFyaWVzLgotICB7IGluY2x1ZGU6IFsgIlwiY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZS5oXCIiLCBwcml2YXRlLCAiXCJjbV9saWJhcmNoaXZlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmhcIiIsIHByaXZhdGUsICJcImNtX2xpYmFyY2hpdmUuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJAXCJjbWN1cmwvaW5jbHVkZS9jdXJsLy4rXFwuaFwiIiwgcHJpdmF0ZSwgIlwiY21fY3VybC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21leHBhdC9saWIvZXhwYXQuaFwiIiwgcHJpdmF0ZSwgIlwiY21fZXhwYXQuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJcImNtZXhwYXQvbGliL2V4cGF0X2V4dGVybmFsLmhcIiIsIHByaXZhdGUsICJcImNtX2V4cGF0LmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbWpzb25jcHAvaW5jbHVkZS9qc29uL3JlYWRlci5oXCIiLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3JlYWRlci5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21qc29uY3BwL2luY2x1ZGUvanNvbi92YWx1ZS5oXCIiLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3ZhbHVlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbWpzb25jcHAvaW5jbHVkZS9qc29uL3dyaXRlci5oXCIiLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3dyaXRlci5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5oXCIiLCBwcml2YXRlLCAiXCJjbV9yaGFzaC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21saWJ1di9pbmNsdWRlL3V2LmhcIiIsIHByaXZhdGUsICJcImNtX3V2LmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiQFwiY21saWJ1di9pbmNsdWRlL3V2Ly4rXFwuaFwiIiwgcHJpdmF0ZSwgIlwiY21fdXYuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJcIktXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmhcIiIsIHByaXZhdGUsICJcImNtX2t3aW1sLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJLV0lNTC9pbmNsdWRlL2t3aW1sL2ludC5oXCIiLCBwcml2YXRlLCAiXCJjbV9rd2ltbC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY216bGliL2NtX3psaWJfbWFuZ2xlLmhcIiIsIHByaXZhdGUsICJcImNtX3psaWIuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJcImNtemxpYi96Y29uZi5oXCIiLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbXpsaWIvemxpYi5oXCIiLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0KLSAgIyBTeXN0ZW0gc3ltYm9scyB1c2VkIGJ5IGxpYnV2Ci0gIHsgc3ltYm9sOiBbICJTSUdIVVAiLCBwcml2YXRlLCAiXCJjbV91di5oXCIiLCBwdWJsaWMgXSB9LAotICB7IHN5bWJvbDogWyAiU0lHSU5UIiwgcHJpdmF0ZSwgIlwiY21fdXYuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBzeW1ib2w6IFsgInNzaXplX3QiLCBwcml2YXRlLCAiXCJjbV91di5oXCIiLCBwdWJsaWMgXSB9LAotCi0gIHsgc3ltYm9sOiBbICJKc29uOjpBcnJheUluZGV4IiwgcHJpdmF0ZSwgIlwiY21fanNvbmNwcF92YWx1ZS5oXCIiLCBwdWJsaWMgXSB9LAorICAjIFdyYXBwZXJzIGZvciAzcmQtcGFydHkgbGlicmFyaWVzCisgIHsgaW5jbHVkZTogWyAiQDwuKmN1cmwvY3VybHZlci5oPiIsIHByaXZhdGUsICI8Y20zcC9jdXJsL2N1cmwuaD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIkA8Lipqc29uL2ZvcndhcmRzLmg+IiwgcHJpdmF0ZSwgIjxjbTNwL2pzb24vdmFsdWUuaD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIkA8Lip1di8uK1xcLmg+IiwgcHJpdmF0ZSwgIjxjbTNwL3V2Lmg+IiwgcHVibGljIF0gfSwKKyAgeyBpbmNsdWRlOiBbICJAPC4qZXhwYXRfZXh0ZXJuYWwuaD4iLCBwcml2YXRlLCAiPGNtM3AvZXhwYXQuaD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIkA8Lip6Y29uZi5oPiIsIHByaXZhdGUsICI8Y20zcC96bGliLmg+IiwgcHVibGljIF0gfSwKKyAgeyBpbmNsdWRlOiBbICJAPC4qY21femxpYl9tYW5nbGUuaD4iLCBwcml2YXRlLCAiPGNtM3AvemxpYi5oPiIsIHB1YmxpYyBdIH0sCisgICMgIyBTeXN0ZW0gc3ltYm9scyB1c2VkIGJ5IGxpYnV2CisgIHsgc3ltYm9sOiBbICJzc2l6ZV90IiwgcHJpdmF0ZSwgIjxjbTNwL3V2Lmg+IiwgcHVibGljIF0gfSwKIAogICB7IHN5bWJvbDogWyAic3RkOjppZnN0cmVhbSIsIHByaXZhdGUsICJcImNtc3lzL0ZTdHJlYW0uaHh4XCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpvZnN0cmVhbSIsIHByaXZhdGUsICJcImNtc3lzL0ZTdHJlYW0uaHh4XCIiLCBwdWJsaWMgXSB9LApAQCAtMTUyLDggKzExNyw2IEBACiAgIHsgaW5jbHVkZTogWyAiPGZzdHJlYW0+IiwgcHVibGljLCAiXCJjbXN5cy9GU3RyZWFtLmh4eFwiIiwgcHVibGljIF0gfSwKIAogICAjIG1ham9yIGFuZCBtaW5vciBhcmUgdXNlZCBhcyBtYWNybyBhcmd1bWVudHMuIFRob3NlIGFyZSBmYWxzZSBtYXRjaGVzLgotICB7IHN5bWJvbDogWyAibWFqb3IiLCBwcml2YXRlLCAiXCJjbV9rd2ltbC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IHN5bWJvbDogWyAibWlub3IiLCBwcml2YXRlLCAiXCJjbV9rd2ltbC5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAibWFqb3IiLCBwcml2YXRlLCAiXCJjbVZlcnNpb24uaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgIm1pbm9yIiwgcHJpdmF0ZSwgIlwiY21WZXJzaW9uLmhcIiIsIHB1YmxpYyBdIH0sCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9LV0lNTC9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9LV0lNTC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNWU2NWU1Li4xZDE1ODg0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvS1dJTUwvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL0tXSU1ML0NNYWtlTGlzdHMudHh0CkBAIC0xNyw3ICsxNyw2IEBACiAgIGVuZGlmKCkKICAgc2V0KEtXSU1MX0lOQ0xVREVfUFJFRklYIGt3aW1sKQogZWxzZSgpCi0gIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMiBGQVRBTF9FUlJPUikKICAgc2V0KGt3aW1sX3N0YW5kYWxvbmUgMCkKICAgaWYoS1dJTUxfSU5TVEFMTF9JTkNMVURFX0RJUiBBTkQgTk9UIERFRklORUQgS1dJTUxfSU5DTFVERV9QUkVGSVgpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiSG9zdCBwcm9qZWN0IG11c3Qgc2V0IEtXSU1MX0lOQ0xVREVfUFJFRklYIikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9LV0lNTC9pbmNsdWRlL2t3aW1sL2FiaS5oIGIvVXRpbGl0aWVzL0tXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmgKaW5kZXggZGE1MjVmZC4uMTExMmNiMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL0tXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmgKKysrIGIvVXRpbGl0aWVzL0tXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmgKQEAgLTEzNiw2ICsxMzYsOCBAQAogIyAgZGVmaW5lIEtXSU1MX0FCSV9TSVpFT0ZfREFUQV9QVFIgOAogIyBlbGlmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKQogIyAgZGVmaW5lIEtXSU1MX0FCSV9TSVpFT0ZfREFUQV9QVFIgNAorIyBlbGlmIGRlZmluZWQoX01fQVJNNjQpCisjICBkZWZpbmUgS1dJTUxfQUJJX1NJWkVPRl9EQVRBX1BUUiA4CiAjIGVuZGlmCiAjZW5kaWYKICNpZiAhZGVmaW5lZChLV0lNTF9BQklfU0laRU9GX0RBVEFfUFRSKQpAQCAtNDYxLDYgKzQ2MywxMCBAQAogIyAgZGVmaW5lIEtXSU1MX0FCSV9FTkRJQU5fSUQgS1dJTUxfQUJJX0VORElBTl9JRF9CSUcKICMgZW5kaWYKIAorLyogQWFyY2g2NCAoV2luZG93cykgKi8KKyNlbGlmIGRlZmluZWQoX01fQVJNNjQpCisjIGRlZmluZSBLV0lNTF9BQklfRU5ESUFOX0lEIEtXSU1MX0FCSV9FTkRJQU5fSURfTElUVExFCisKIC8qIFh0ZW5zYSAqLwogI2VsaWYgZGVmaW5lZChfX1hURU5TQV9FQl9fKQogIyBkZWZpbmUgS1dJTUxfQUJJX0VORElBTl9JRCBLV0lNTF9BQklfRU5ESUFOX0lEX0JJRwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvLmdpdGF0dHJpYnV0ZXMgYi9VdGlsaXRpZXMvUmVsZWFzZS8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGUxMTVmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2UvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKi5wYXRjaCAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvUkVBRE1FLnJzdCBiL1V0aWxpdGllcy9SZWxlYXNlL1JFQURNRS5yc3QKaW5kZXggZGUyOTRkMS4uOTk5M2FmYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL1JlbGVhc2UvUkVBRE1FLnJzdAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS9SRUFETUUucnN0CkBAIC05LDQ5ICs5LDU3IEBACiBEb2NrZXIKIC0tLS0tLQogCi1UaGUgYGBsaW51eC88YXJjaD4vYGAgZGlyZWN0b3JpZXMgY29udGFpbiBEb2NrZXIgc3BlY2lmaWNhdGlvbnMgdGhhdCBhbnlvbmUKLW1heSB1c2UgdG8gcHJvZHVjZSBMaW51eCBiaW5hcmllcyBmb3IgQ01ha2U6CitUaGUgYGA8b3M+LzxhcmNoPi9gYCBkaXJlY3RvcmllcyBjb250YWluIERvY2tlciBzcGVjaWZpY2F0aW9ucyB0aGF0IGFueW9uZQorbWF5IHVzZSB0byBwcm9kdWNlIGJpbmFyaWVzIGZvciBDTWFrZSBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoKIAotKiBgYGxpbnV4LzxhcmNoPi9iYXNlL0RvY2tlcmZpbGVgYDoKKyogYGBsaW51eC94ODZfNjQvYGA6IExpbnV4IG9uIGBgeDg2XzY0YGAgYXJjaGl0ZWN0dXJlcy4KKyogYGB3aW4veDg2L2BgOiBXaW5kb3dzIG9uIGBgeDg2XzY0YGAgYW5kIGBgaTM4NmBgIGFyY2hpdGVjdHVyZXMuCisKK0VhY2ggYGA8b3M+LzxhcmNoPi9gYCBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKworKiBgYDxvcz4vPGFyY2g+L2Jhc2UvRG9ja2VyZmlsZWBgOgogICBQcm9kdWNlcyBhIGJhc2UgaW1hZ2Ugd2l0aCBhIGJ1aWxkIGVudmlyb25tZW50IGZvciBwb3J0YWJsZSBDTWFrZSBiaW5hcmllcy4KICAgVGhpcyBpbWFnZSBpcyBwdWJsaXNoZWQgaW4gdGhlIGBraXR3YXJlL2NtYWtlIERvY2tlciBIdWIgUmVwb3NpdG9yeWBfCi0gIHdpdGggdGFnIGBgYnVpbGQtbGludXgtPGFyY2g+LWJhc2UtPGRhdGU+YGAuCisgIHdpdGggdGFnIGBgYnVpbGQtPG9zPi08YXJjaD4tYmFzZS08ZGF0ZT5gYC4KIAotKiBgYGxpbnV4LzxhcmNoPi9kZXBzL0RvY2tlcmZpbGVgYDoKKyogYGA8b3M+LzxhcmNoPi9kZXBzL0RvY2tlcmZpbGVgYDoKICAgUHJvZHVjZXMgYW4gaW1hZ2Ugd2l0aCBjdXN0b20tYnVpbHQgZGVwZW5kZW5jaWVzIGZvciBwb3J0YWJsZSBDTWFrZSBiaW5hcmllcy4KICAgVGhpcyBpbWFnZSBpcyBwdWJsaXNoZWQgaW4gdGhlIGBraXR3YXJlL2NtYWtlIERvY2tlciBIdWIgUmVwb3NpdG9yeWBfCi0gIHdpdGggdGFnIGBgYnVpbGQtbGludXgtPGFyY2g+LWRlcHMtPGRhdGU+YGAuCisgIHdpdGggdGFnIGBgYnVpbGQtPG9zPi08YXJjaD4tZGVwcy08ZGF0ZT5gYC4KIAotKiBgYGxpbnV4LzxhcmNoPi9Eb2NrZXJmaWxlYGA6Ci0gIFByb2R1Y2UgYW4gaW1hZ2UgY29udGFpbmluZyBhIHBvcnRhYmxlIENNYWtlIGJpbmFyeSBwYWNrYWdlIGZvciBMaW51eC4KKyogYGA8b3M+LzxhcmNoPi9Eb2NrZXJmaWxlYGA6CisgIFByb2R1Y2UgYW4gaW1hZ2UgY29udGFpbmluZyBhIHBvcnRhYmxlIENNYWtlIGJpbmFyeSBwYWNrYWdlLgogICBCdWlsZCB0aGlzIGltYWdlIHVzaW5nIHRoZSBDTWFrZSBzb3VyY2UgZGlyZWN0b3J5IGFzIHRoZSBidWlsZCBjb250ZXh0LgotICBUaGUgcmVzdWx0aW5nIGltYWdlIHdpbGwgaGF2ZSBhbiBgYC9vdXRgYCBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZS4KLSAgRm9yIGV4YW1wbGU6CisgIFRoZSByZXN1bHRpbmcgaW1hZ2Ugd2lsbCBoYXZlIGFuIGBgL291dGBgIChvciBgYGM6L291dGBgKSBkaXJlY3RvcnkKKyAgY29udGFpbmluZyB0aGUgcGFja2FnZS4gIEZvciBleGFtcGxlLCBvbiBMaW51eCBgYHg4Nl82NGBgOgogCiAgIC4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCiAKICAgICAkIGRvY2tlciBidWlsZCAtLXRhZz1jbWFrZTpidWlsZCAtLW5ldHdvcmsgbm9uZSBcCi0gICAgICAgIC1mIGNtYWtlLXNyYy9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC8kYXJjaC9Eb2NrZXJmaWxlIGNtYWtlLXNyYworICAgICAgICAtZiBjbWFrZS1zcmMvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L0RvY2tlcmZpbGUgY21ha2Utc3JjCiAgICAgJCBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSAtLW5hbWUgY21ha2UtYnVpbGQgY21ha2U6YnVpbGQKICAgICAkIGRvY2tlciBjcCBjbWFrZS1idWlsZDovb3V0IC4KLSAgICAkIGxzIG91dC9jbWFrZS0qLUxpbnV4LSRhcmNoLioKKyAgICAkIGxzIG91dC9jbWFrZS0qLUxpbnV4LXg4Nl82NC4qCiAKLSogYGBsaW51eC88YXJjaD4vdGVzdC9Eb2NrZXJmaWxlYGA6CisgIE9uIFdpbmRvd3MsIHRoZSBgYHdpbi94ODZgYCBzcGVjaWZpY2F0aW9ucyBzdXBwb3J0IGJvdGggdGhlIGBgeDg2XzY0YGAKKyAgYW5kIGBgaTM4NmBgIGFyY2hpdGVjdHVyZXMgc2VsZWN0ZWQgdmlhIGBgLS1idWlsZC1hcmcgQVJDSD0uLi5gYC4KKworKiBgYDxvcz4vPGFyY2g+L3Rlc3QvRG9ja2VyZmlsZWBgOgogICBQcm9kdWNlcyBhIGJhc2UgaW1hZ2Ugd2l0aCBhIHRlc3QgZW52aXJvbm1lbnQgZm9yIHBhY2thZ2VkIENNYWtlIGJpbmFyaWVzLgotICBGb3IgZXhhbXBsZSwgYnVpbGQgdGhlIHRlc3QgYmFzZSBpbWFnZToKKyAgRm9yIGV4YW1wbGUsIG9uIExpbnV4IGBgeDg2XzY0YGAsIG9uZSBtYXkgYnVpbGQgdGhlIHRlc3QgYmFzZSBpbWFnZToKIAogICAuLiBjb2RlLWJsb2NrOjogY29uc29sZQogCiAgICAgJCBkb2NrZXIgYnVpbGQgLS10YWc9Y21ha2U6dGVzdC1iYXNlIFwKLSAgICAgICAgY21ha2Utc3JjL1V0aWxpdGllcy9SZWxlYXNlL2xpbnV4LyRhcmNoL3Rlc3QKKyAgICAgICAgY21ha2Utc3JjL1V0aWxpdGllcy9SZWxlYXNlL2xpbnV4L3g4Nl82NC90ZXN0CiAKICAgVGhlbiBjcmVhdGUgYSBsb2NhbCBgYHRlc3QvRG9ja2VyZmlsZWBgIHRvIHByZXBhcmUgYW4gaW1hZ2Ugd2l0aCBib3RoIHRoZQogICBDTWFrZSBzb3VyY2UgdHJlZSBhbmQgdGhlIGFib3ZlLWJ1aWx0IHBhY2thZ2U6OgogCiAgICAgRlJPTSBjbWFrZTp0ZXN0LWJhc2UKICAgICBDT1BZIGNtYWtlLXNyYyAvb3B0L2NtYWtlL3NyYy9jbWFrZQotICAgIEFERCBvdXQvY21ha2UtPHZlcj4tTGludXgtPGFyY2g+LnRhci5neiAvb3B0LwotICAgIEVOViBQQVRIPS9vcHQvY21ha2UtPHZlcj4tTGludXgtPGFyY2g+L2JpbjokUEFUSAorICAgIEFERCBvdXQvY21ha2UtPHZlcj4tTGludXgteDg2XzY0LnRhci5neiAvb3B0LworICAgIEVOViBQQVRIPS9vcHQvY21ha2UtPHZlcj4tTGludXgteDg2XzY0L2JpbjokUEFUSAogCiAgIEJ1aWxkIHRoZSB0ZXN0IGltYWdlIGFuZCBydW4gaXQgdG8gZHJpdmUgdGVzdGluZzoKIApAQCAtNjEsNiArNjksMTAgQEAKICAgICAkIGRvY2tlciBydW4gLS1uZXR3b3JrIG5vbmUgY21ha2U6dGVzdCBiYXNoIHRlc3QtbWFrZS5iYXNoCiAgICAgJCBkb2NrZXIgcnVuIC0tbmV0d29yayBub25lIGNtYWtlOnRlc3QgYmFzaCB0ZXN0LW5pbmphLmJhc2gKIAorICBPbiBXaW5kb3dzLCB0aGUgdGVzdCBzY3JpcHRzIGFyZSBjYWxsZWQgYGB0ZXN0LW5tYWtlLmJhdGBgIGFuZAorICBgYHRlc3QtbmluamEuYmF0YGAuICBJbiB0aGUgYGB4ODZgYCBhcmNoaXRlY3R1cmUgdGhleSBhY2NlcHQgb25lCisgIGFyZ3VtZW50IHNwZWNpZnlpbmcgZWl0aGVyIGBgeDg2XzY0YGAgb3IgYGBpMzg2YGAuCisKIC4uIF9ga2l0d2FyZS9jbWFrZSBEb2NrZXIgSHViIFJlcG9zaXRvcnlgOiBodHRwczovL2h1Yi5kb2NrZXIuY29tL3Iva2l0d2FyZS9jbWFrZQogCiBTY3JpcHRzIGZvciBLaXR3YXJlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS9jcmVhdGUtY21ha2UtcmVsZWFzZS5jbWFrZSBiL1V0aWxpdGllcy9SZWxlYXNlL2NyZWF0ZS1jbWFrZS1yZWxlYXNlLmNtYWtlCmluZGV4IDE3YTIxNTEuLjg4YWM4MjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9SZWxlYXNlL2NyZWF0ZS1jbWFrZS1yZWxlYXNlLmNtYWtlCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL2NyZWF0ZS1jbWFrZS1yZWxlYXNlLmNtYWtlCkBAIC00NiwxMyArNDYsOSBAQAogCiB3cml0ZV9kb2NzX3NoZWxsX3NjcmlwdCgiY3JlYXRlLSR7Q01BS0VfQ1JFQVRFX1ZFUlNJT059LWRvY3Muc2giKQogd3JpdGVfcmVsX3NoZWxsX3NjcmlwdCgiY3JlYXRlLSR7Q01BS0VfQ1JFQVRFX1ZFUlNJT059LW1hY29zLnNoIiAgIG9zeF9yZWxlYXNlICAgICkgIyBtYWNPUyB4ODZfNjQKLXdyaXRlX3JlbF9zaGVsbF9zY3JpcHQoImNyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS13aW42NC5zaCIgICB3aW42NF9yZWxlYXNlICApICMgV2luZG93cyB4NjQKLXdyaXRlX3JlbF9zaGVsbF9zY3JpcHQoImNyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS13aW4zMi5zaCIgICB3aW4zMl9yZWxlYXNlICApICMgV2luZG93cyB4ODYKIAogbWVzc2FnZSgiQnVpbGQgZG9jcyBmaXJzdCBhbmQgdGhlbiBidWlsZCBmb3IgZWFjaCBwbGF0Zm9ybToKICAuL2NyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS1kb2NzLnNoICAgICYmCiAgLi9jcmVhdGUtJHtDTUFLRV9DUkVBVEVfVkVSU0lPTn0tbWFjb3Muc2ggICAmJgotIC4vY3JlYXRlLSR7Q01BS0VfQ1JFQVRFX1ZFUlNJT059LXdpbjY0LnNoICAgJiYKLSAuL2NyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS13aW4zMi5zaCAgICYmCiAgZWNobyBkb25lCiAiKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L0RvY2tlcmZpbGUgYi9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvRG9ja2VyZmlsZQppbmRleCA0MTM5MWQyLi45NzI5MTNlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvRG9ja2VyZmlsZQorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvRG9ja2VyZmlsZQpAQCAtNSw2ICs1LDcgQEAKICMgQnVpbGQgdXNpbmcgdGhlIENNYWtlIHNvdXJjZSBkaXJlY3RvcnkgYXMgdGhlIGJ1aWxkIGNvbnRleHQuCiAjIFRoZSByZXN1bHRpbmcgaW1hZ2Ugd2lsbCBoYXZlIGFuICcvb3V0JyBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZS4KIAorIyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBgLmdpdGxhYi1jaS55bWxgIGByZWxlYXNlX2xpbnV4YCBpbWFnZS4KIEFSRyBGUk9NX0lNQUdFX05BTUU9a2l0d2FyZS9jbWFrZTpidWlsZC1saW51eC14ODZfNjQtZGVwcy0yMDIwLTA0LTAyCiBBUkcgRlJPTV9JTUFHRV9ESUdFU1Q9QHNoYTI1Njo3N2U5YWIxODNmMzQ2ODA5OTBkYjlkYTU5NDU0NzNlMjg4ZjBkNjU1NmJjZTc5ZWNjMTU4OTY3MGQ2NTZlMTU3CiBBUkcgRlJPTV9JTUFHRT0kRlJPTV9JTUFHRV9OQU1FJEZST01fSU1BR0VfRElHRVNUCkBAIC0yMCw3ICsyMSw2IEBACiAgJiYgY3AgLi4vY21ha2UvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L2NhY2hlLnR4dCBDTWFrZUNhY2hlLnR4dCBcCiAgJiYgc291cmNlIC9vcHQvcmgvZGV2dG9vbHNldC02L2VuYWJsZSBcCiAgJiYgc291cmNlIC9vcHQvcmgvcmgtcHl0aG9uMzYvZW5hYmxlIFwKLSAmJiBleHBvcnQgTEFORz1lbl9VUy5VVEYtOCBcCiAgJiYgc2V0IC14IFwKICAmJiAuLi9jbWFrZS9ib290c3RyYXAgLS1wYXJhbGxlbD0kKG5wcm9jKSAtLWRvY2Rpcj1kb2MvY21ha2UgXAogICYmIG5pY2UgbWFrZSAtaiAkKG5wcm9jKSBcCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvdGVzdC9jYWNoZS1uaW5qYS50eHQgYi9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvdGVzdC9jYWNoZS1uaW5qYS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMDM3MGUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L3Rlc3QvY2FjaGUtbmluamEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSOlNUUklORz0KLUNNYWtlX1RFU1RfSVBPX1dPUktTX0M6Qk9PTD1PTgotQ01ha2VfVEVTVF9JUE9fV09SS1NfQ1hYOkJPT0w9T04KLUNNYWtlX1RFU1RfUXQ1OkJPT0w9T04KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvRG9ja2VyZmlsZSBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGY3NDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMgZXNjYXBlPWAKKworIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCisjIFByb2R1Y2UgYW4gaW1hZ2UgY29udGFpbmluZyBhIHBvcnRhYmxlIENNYWtlIGJpbmFyeSBwYWNrYWdlIGZvciBXaW5kb3dzLgorIyBCdWlsZCB1c2luZyB0aGUgQ01ha2Ugc291cmNlIGRpcmVjdG9yeSBhcyB0aGUgYnVpbGQgY29udGV4dC4KKyMgVGhlIHJlc3VsdGluZyBpbWFnZSB3aWxsIGhhdmUgYSAnYzpcb3V0JyBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZS4KKworQVJHIEZST01fSU1BR0VfTkFNRT1raXR3YXJlL2NtYWtlOmJ1aWxkLXdpbi14ODYtZGVwcy0yMDIwLTA0LTI3CitBUkcgRlJPTV9JTUFHRV9ESUdFU1Q9QHNoYTI1NjowNGUyMjljMGMwYmEyMjQ3ODU1ZDBlOGMwZmI4N2MxNjg2Zjk4M2FkYmFmYTRjZTQxM2U2MWIzOTA1ZWRiNzZiCitBUkcgRlJPTV9JTUFHRT0kRlJPTV9JTUFHRV9OQU1FJEZST01fSU1BR0VfRElHRVNUCisKK0ZST00gJEZST01fSU1BR0UgYXMgYnVpbGQKK0NPUFkgLiBDOlxjbWFrZVxzcmNcY21ha2UKK0FSRyBBUkNIPSJ4ODZfNjQiCitBUkcgVEVTVD0idHJ1ZSIKK1JVTiBcY21ha2Vcc3JjXGNtYWtlXFV0aWxpdGllc1xSZWxlYXNlXHdpblx4ODZcYnVpbGQuYmF0ICVBUkNIJSAlVEVTVCUKKworIyBQYWNrYWdlIGluIGEgc2VwYXJhdGUgc3RhZ2Ugc28gdGhlIGJ1aWxkZXIgY2FuIG9wdGlvbmFsbHkgc2tpcCBpdC4KK0ZST00gYnVpbGQgYXMgcGFjaworQVJHIFBBQ0s9IlpJUCBXSVgiCitSVU4gXGNtYWtlXHNyY1xjbWFrZVxVdGlsaXRpZXNcUmVsZWFzZVx3aW5ceDg2XHBhY2suYmF0ICVQQUNLJQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9iYXNlL0RvY2tlcmZpbGUgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmMwMGY4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9iYXNlL0RvY2tlcmZpbGUKQEAgLTAsMCArMSwzMCBAQAorIyBlc2NhcGU9YAorCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKyMgUHJvZHVjZSBhIGJhc2UgaW1hZ2Ugd2l0aCBhIGJ1aWxkIGVudmlyb25tZW50IGZvciBwb3J0YWJsZSBDTWFrZSBiaW5hcmllcy4KKyMgQnVpbGQgdXNpbmcgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZSBhcyBpdHMgb3duIGJ1aWxkIGNvbnRleHQuCisKK0FSRyBGUk9NX0lNQUdFX05BTUU9bWNyLm1pY3Jvc29mdC5jb20vZG90bmV0L2ZyYW1ld29yay9zZGs6NC44LXdpbmRvd3NzZXJ2ZXJjb3JlLWx0c2MyMDE5CitBUkcgRlJPTV9JTUFHRV9ESUdFU1Q9QHNoYTI1NjphOTQyODliZmQ2MWJhODljZDE2MmY3Y2Y4NGFmZTBlMzA3ZDRkMjU3NmI0NGI5YmQyNzdlN2IzMDM2Y2NmYTZiCitBUkcgRlJPTV9JTUFHRT0kRlJPTV9JTUFHRV9OQU1FJEZST01fSU1BR0VfRElHRVNUCitGUk9NICRGUk9NX0lNQUdFCisKKyMgVXNlIGEgdHJhZGl0aW9uYWwgV2luZG93cyBzaGVsbC4KK1NIRUxMIFsiY21kIiwgIi9TIiwgIi9DIl0KKworIyBJbnN0YWxsIFZpc3VhbCBTdHVkaW8gQnVpbGQgVG9vbHMgZm9yIGRlc2t0b3AgZGV2ZWxvcG1lbnQgd2l0aCBDKysuCitBREQgaHR0cHM6Ly9ha2EubXMvdnMvMTYvcmVsZWFzZS92c19idWlsZHRvb2xzLmV4ZSBDOlxURU1QXHZzX2J1aWxkdG9vbHMuZXhlCitSVU4gQzpcVEVNUFx2c19idWlsZHRvb2xzLmV4ZSAtLXF1aWV0IC0td2FpdCAtLW5vcmVzdGFydCAtLW5vY2FjaGUgYAorICAgIC0taW5zdGFsbFBhdGggQzpcQnVpbGRUb29scyBgCisgICAgLS1hZGQgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Xb3JrbG9hZC5WQ1Rvb2xzIGAKKyAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5WQy5Ub29scy54ODYueDY0IGAKKyAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5WQy5DTEkuU3VwcG9ydCBgCisgICAgLS1hZGQgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Db21wb25lbnQuVkMuQVRMIGAKKyAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5XaW5kb3dzMTBTREsuMTgzNjIgYAorIHx8IElGICIlRVJST1JMRVZFTCUiPT0iMzAxMCIgRVhJVCAwCitSVU4gZGVsIEM6XFRFTVBcdnNfYnVpbGR0b29scy5leGUKKworIyBBZGQgYSB0b29sY2hhaW4gZW52aXJvbm1lbnQgbG9hZGVyIGZvciBlYWNoIGFyY2hpdGVjdHVyZS4KK0NPUFkgbXN2Yy14ODZfNjQuYmF0IG1zdmMtaTM4Ni5iYXQgQzpcCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy1pMzg2LmJhdCBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvYmFzZS9tc3ZjLWkzODYuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2M2JkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy1pMzg2LmJhdApAQCAtMCwwICsxIEBACitAQzpcQnVpbGRUb29sc1xWQ1xBdXhpbGlhcnlcQnVpbGRcdmN2YXJzYWxsLmJhdCB4ODYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvYmFzZS9tc3ZjLXg4Nl82NC5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy14ODZfNjQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmZmUwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy14ODZfNjQuYmF0CkBAIC0wLDAgKzEgQEAKK0BDOlxCdWlsZFRvb2xzXFZDXEF1eGlsaWFyeVxCdWlsZFx2Y3ZhcnNhbGwuYmF0IHg2NApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9idWlsZC5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2J1aWxkLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTI1NTcyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9idWlsZC5iYXQKQEAgLTAsMCArMSwxOSBAQAorQHJlbSBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworQHJlbSBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCitzZXQgQVJDSD0lMQorc2V0IFRFU1Q9JTIKKworY29weSBcbXN2Yy0lQVJDSCUuYmF0IFxtc3ZjLmJhdAorY2FsbCBcbXN2Yy5iYXQgJiYgQGVjaG8gb24gfHwgZXhpdCAvYgorc2V0IFBBVEg9QzpcbmluamE7JVBBVEglCisKK21rZGlyIFxjbWFrZVxzcmNcY21ha2UtYnVpbGQgJiYgXgorY2QgXGNtYWtlXHNyY1xjbWFrZS1idWlsZCAmJiBeCitjb3B5IC4uXGNtYWtlXFV0aWxpdGllc1xSZWxlYXNlXHdpblx4ODZcY2FjaGUtJUFSQ0glLnR4dCBDTWFrZUNhY2hlLnR4dCAmJiBeCitcY21ha2VcY21ha2VcYmluXGNtYWtlIC4uXGNtYWtlIC1HTmluamEgJiYgXgorbmluamEgJiYgKAorICBpZiAiJVRFU1QlIj09InRydWUiICgKKyAgICBiaW5cY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtaiAlTlVNQkVSX09GX1BST0NFU1NPUlMlIC1SICJeKENNYWtlXC58Q01ha2VMaWJcLnxDTWFrZVNlcnZlckxpYlwufFJ1bkNNYWtlXC5jdGVzdF9tZW1jaGVjaykiCisgICkKKykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvY2FjaGUtaTM4Ni50eHQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2NhY2hlLWkzODYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGVjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2NhY2hlLWkzODYudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0NNQUtFX0JVSUxEX1RZUEU6U1RSSU5HPVJlbGVhc2UKKworIyBVc2UgQVBJcyBmcm9tIGF0IG1vc3QgV2luZG93cyA3CitDTUFLRV9DX0ZMQUdTOlNUUklORz0tRF9XSU4zMl9XSU5OVD0weDYwMSAtRE5URERJX1ZFUlNJT049MHgwNjAxMDAwMAorQ01BS0VfQ1hYX0ZMQUdTOlNUUklORz0tR1IgLUVIc2MgLURfV0lOMzJfV0lOTlQ9MHg2MDEgLUROVERESV9WRVJTSU9OPTB4MDYwMTAwMDAKK0NNQUtFX0VYRV9MSU5LRVJfRkxBR1M6U1RSSU5HPS1tYWNoaW5lOng4NiAtc3Vic3lzdGVtOmNvbnNvbGUsNi4wMQorCisjIExpbmsgQy9DKysgcnVudGltZSBsaWJyYXJ5IHN0YXRpY2FsbHkuCitDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWTpTVFJJTkc9TXVsdGlUaHJlYWRlZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPgorCisjIE5vIHNzbCBzdXBwb3J0IGluIGN1cmw6IHVzZSBuYXRpdmUgV2luZG93cyBBUElzLgorQ01BS0VfVVNFX09QRU5TU0w6Qk9PTD1PRkYKKworIyBFbmFibGUgY21ha2UtZ3VpIHdpdGggc3RhdGljIHF0IHBsdWdpbnMKK0JVSUxEX1F0RGlhbG9nOkJPT0w9VFJVRQorQ01ha2VfR1VJX0RJU1RSSUJVVEVfV0lUSF9RdF9MR1BMOlNUUklORz0zCitDTUFLRV9QUkVGSVhfUEFUSDpTVFJJTkc9QzovcXQtaTM4NgorQ01ha2VfUVRfU1RBVElDX1FXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTOlNUUklORz1jOi9xdC1pMzg2L3BsdWdpbnMvcGxhdGZvcm1zL3F3aW5kb3dzLmxpYjtjOi9xdC1pMzg2L3BsdWdpbnMvc3R5bGVzL3F3aW5kb3dzdmlzdGFzdHlsZS5saWI7YzovcXQtaTM4Ni9saWIvUXQ1RXZlbnREaXNwYXRjaGVyU3VwcG9ydC5saWI7YzovcXQtaTM4Ni9saWIvUXQ1Rm9udERhdGFiYXNlU3VwcG9ydC5saWI7YzovcXQtaTM4Ni9saWIvUXQ1VGhlbWVTdXBwb3J0LmxpYjtjOi9xdC1pMzg2L2xpYi9xdGZyZWV0eXBlLmxpYjtjOi9xdC1pMzg2L2xpYi9xdGxpYnBuZy5saWI7aW1tMzIubGliO3d0c2FwaTMyLmxpYgorCisjIEJ1aWxkIGRvY3VtZW50YXRpb24uCitDTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKK1BZVEhPTl9FWEVDVVRBQkxFOkZJTEVQQVRIPUM6L3B5dGhvbjMvcHl0aG9uLmV4ZQorU1BISU5YX0VYRUNVVEFCTEU6RklMRVBBVEg9QzovcHl0aG9uMy9TY3JpcHRzL3NwaGlueC1idWlsZC5leGUKK1NQSElOWF9IVE1MOkJPT0w9T04KK1NQSElOWF9NQU46Qk9PTD1PTgorU1BISU5YX1FUSEVMUDpCT09MPU9OCitRQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFOlBBVEg9QzovcXQtaTM4Ni9iaW4vcWhlbHBnZW5lcmF0b3IuZXhlCisKKyMgTm8gYm9vdHN0cmFwIHdpdGggTVNWQyB0b29scy4KK0NNQUtFX1NLSVBfQk9PVFNUUkFQX1RFU1Q6U1RSSU5HPVRSVUUKKworIyBObyBNRkMgaW4gYmFzZSBpbWFnZS4KK0NURVNUX1JVTl9NRkM6Qk9PTD1PRkYKKworIyBObyBGb3J0cmFuIGNvbXBpbGVyLgorQ01BS0VfRm9ydHJhbl9DT01QSUxFUjpGSUxFUEFUSD1GQUxTRQorCisjIE5vIFN3aWZ0IGNvbXBpbGVyLgorQ01BS0VfU3dpZnRfQ09NUElMRVI6RklMRVBBVEg9RkFMU0UKKworIyBTa2lwIFF0NSB0ZXN0cyBiZWNhdXNlIG91ciBRdCBpcyBzdGF0aWMuCitDTWFrZV9URVNUX1F0NTpCT09MPUZBTFNFCisKKyMgQ1BhY2sgcGFja2FnZSBmaWxlIG5hbWUgY29tcG9uZW50IGZvciB0aGlzIHBsYXRmb3JtLgorQ1BBQ0tfU1lTVEVNX05BTUU6U1RSSU5HPXdpbjMyLXg4NgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9jYWNoZS14ODZfNjQudHh0IGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9jYWNoZS14ODZfNjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjY2Y5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2NhY2hlLXg4Nl82NC50eHQKQEAgLTAsMCArMSw0NSBAQAorQ01BS0VfQlVJTERfVFlQRTpTVFJJTkc9UmVsZWFzZQorCisjIFVzZSBBUElzIGZyb20gYXQgbW9zdCBXaW5kb3dzIDcKK0NNQUtFX0NfRkxBR1M6U1RSSU5HPS1EX1dJTjMyX1dJTk5UPTB4NjAxIC1ETlRERElfVkVSU0lPTj0weDA2MDEwMDAwCitDTUFLRV9DWFhfRkxBR1M6U1RSSU5HPS1HUiAtRUhzYyAtRF9XSU4zMl9XSU5OVD0weDYwMSAtRE5URERJX1ZFUlNJT049MHgwNjAxMDAwMAorQ01BS0VfRVhFX0xJTktFUl9GTEFHUzpTVFJJTkc9LW1hY2hpbmU6eDY0IC1zdWJzeXN0ZW06Y29uc29sZSw2LjAxCisKKyMgTGluayBDL0MrKyBydW50aW1lIGxpYnJhcnkgc3RhdGljYWxseS4KK0NNQUtFX01TVkNfUlVOVElNRV9MSUJSQVJZOlNUUklORz1NdWx0aVRocmVhZGVkJDwkPENPTkZJRzpEZWJ1Zz46RGVidWc+CisKKyMgTm8gc3NsIHN1cHBvcnQgaW4gY3VybDogdXNlIG5hdGl2ZSBXaW5kb3dzIEFQSXMuCitDTUFLRV9VU0VfT1BFTlNTTDpCT09MPU9GRgorCisjIEVuYWJsZSBjbWFrZS1ndWkgd2l0aCBzdGF0aWMgcXQgcGx1Z2lucworQlVJTERfUXREaWFsb2c6Qk9PTD1UUlVFCitDTWFrZV9HVUlfRElTVFJJQlVURV9XSVRIX1F0X0xHUEw6U1RSSU5HPTMKK0NNQUtFX1BSRUZJWF9QQVRIOlNUUklORz1DOi9xdC14ODZfNjQKK0NNYWtlX1FUX1NUQVRJQ19RV2luZG93c0ludGVncmF0aW9uUGx1Z2luX0xJQlJBUklFUzpTVFJJTkc9YzovcXQteDg2XzY0L3BsdWdpbnMvcGxhdGZvcm1zL3F3aW5kb3dzLmxpYjtjOi9xdC14ODZfNjQvcGx1Z2lucy9zdHlsZXMvcXdpbmRvd3N2aXN0YXN0eWxlLmxpYjtjOi9xdC14ODZfNjQvbGliL1F0NUV2ZW50RGlzcGF0Y2hlclN1cHBvcnQubGliO2M6L3F0LXg4Nl82NC9saWIvUXQ1Rm9udERhdGFiYXNlU3VwcG9ydC5saWI7YzovcXQteDg2XzY0L2xpYi9RdDVUaGVtZVN1cHBvcnQubGliO2M6L3F0LXg4Nl82NC9saWIvcXRmcmVldHlwZS5saWI7YzovcXQteDg2XzY0L2xpYi9xdGxpYnBuZy5saWI7aW1tMzIubGliO3d0c2FwaTMyLmxpYgorCisjIEJ1aWxkIGRvY3VtZW50YXRpb24uCitDTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKK1BZVEhPTl9FWEVDVVRBQkxFOkZJTEVQQVRIPUM6L3B5dGhvbjMvcHl0aG9uLmV4ZQorU1BISU5YX0VYRUNVVEFCTEU6RklMRVBBVEg9QzovcHl0aG9uMy9TY3JpcHRzL3NwaGlueC1idWlsZC5leGUKK1NQSElOWF9IVE1MOkJPT0w9T04KK1NQSElOWF9NQU46Qk9PTD1PTgorU1BISU5YX1FUSEVMUDpCT09MPU9OCitRQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFOlBBVEg9QzovcXQteDg2XzY0L2Jpbi9xaGVscGdlbmVyYXRvci5leGUKKworIyBObyBib290c3RyYXAgd2l0aCBNU1ZDIHRvb2xzLgorQ01BS0VfU0tJUF9CT09UU1RSQVBfVEVTVDpTVFJJTkc9VFJVRQorCisjIE5vIE1GQyBpbiBiYXNlIGltYWdlLgorQ1RFU1RfUlVOX01GQzpCT09MPU9GRgorCisjIE5vIEZvcnRyYW4gY29tcGlsZXIuCitDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSOkZJTEVQQVRIPUZBTFNFCisKKyMgTm8gU3dpZnQgY29tcGlsZXIuCitDTUFLRV9Td2lmdF9DT01QSUxFUjpGSUxFUEFUSD1GQUxTRQorCisjIFNraXAgUXQ1IHRlc3RzIGJlY2F1c2Ugb3VyIFF0IGlzIHN0YXRpYy4KK0NNYWtlX1RFU1RfUXQ1OkJPT0w9RkFMU0UKKworIyBDUGFjayBwYWNrYWdlIGZpbGUgbmFtZSBjb21wb25lbnQgZm9yIHRoaXMgcGxhdGZvcm0uCitDUEFDS19TWVNURU1fTkFNRTpTVFJJTkc9d2luNjQteDY0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvRG9ja2VyZmlsZSBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9Eb2NrZXJmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjk0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDEyNyBAQAorIyBlc2NhcGU9YAorCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKyMgUHJvZHVjZSBhbiBpbWFnZSB3aXRoIGN1c3RvbS1idWlsdCBkZXBlbmRlbmNpZXMgZm9yIHBvcnRhYmxlIENNYWtlIGJpbmFyaWVzLgorIyBCdWlsZCB1c2luZyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBmaWxlIGFzIGl0cyBvd24gYnVpbGQgY29udGV4dC4KKworQVJHIEZST01fSU1BR0VfTkFNRT1raXR3YXJlL2NtYWtlOmJ1aWxkLXdpbi14ODYtYmFzZS0yMDIwLTA0LTI3CitBUkcgRlJPTV9JTUFHRV9ESUdFU1Q9QHNoYTI1NjpjNWE4OTQ4ZDYzNjMxOWNkYWMwMTgwMjY2OTk2NTU4YmI2ZmIwMzcxMjU3OTJiNWI4MzdmMDY5ZDAyZTUzZDdjCitBUkcgRlJPTV9JTUFHRT0kRlJPTV9JTUFHRV9OQU1FJEZST01fSU1BR0VfRElHRVNUCisKKyMgUXQgU291cmNlCitGUk9NICRGUk9NX0lNQUdFIEFTIHF0LXNyYworCisjIEpPTQorQUREIGh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9qb20vdW5zdGFibGUtam9tLnppcCBDOlxqb21cam9tLnppcAorUlVOIGNkIFxqb20gYAorICYmIHBvd2Vyc2hlbGwgLUNvbW1hbmQgIiBgCisgICAgaWYgKCQoR2V0LUZpbGVIYXNoIGpvbS56aXApLkhhc2ggLWVxICcxMjhmZGQ4NDZmZTI0Zjg1OTRlZWQzN2QxZDg5MjlhMGVhNzhkZjU2MzUzN2MwYzFiMTg2MWE2MzUwMTNmZmY4Jykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIGpvbS56aXAgLURlc3RpbmF0aW9uUGF0aCAuYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgZGVsIGpvbS56aXAKKworIyBYWgorQUREIGh0dHBzOi8vdHVrYWFuaS5vcmcveHoveHotNS4yLjUtd2luZG93cy56aXAgQzpceHpceHouemlwCitSVU4gY2QgXHh6IGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCB4ei56aXApLkhhc2ggLWVxICdkODNiODJjYTc1ZGZhYjM5YTEzZGRhMzY0MzY3YjM0OTcwYzc4MWE5ZGY0ZDQxMjY0ZGI5MjJhYzNhOGY2MjJkJykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIHh6LnppcCAtRGVzdGluYXRpb25QYXRoIC5gCisgICAgfSBlbHNlIHtgCisgICAgICBleGl0IDEgYAorICAgIH0iIGAKKyAmJiBkZWwgeHouemlwCisKKyMgR2l0CitBREQgaHR0cHM6Ly9naXRodWIuY29tL2dpdC1mb3Itd2luZG93cy9naXQvcmVsZWFzZXMvZG93bmxvYWQvdjIuMjYuMi53aW5kb3dzLjEvTWluR2l0LTIuMjYuMi1idXN5Ym94LTY0LWJpdC56aXAgQzpcZ2l0XGdpdC56aXAKK1JVTiBjZCBcZ2l0IGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCBnaXQuemlwKS5IYXNoIC1lcSAnZTgzNGVhNzNmZTA5M2ZiMTgwZGM0NWY2N2ExZjJhN2E1NjZkYWI1M2QxZDQ1YmMzY2QxNTAxMDZmNWM0MDUyMCcpIHtgCisgICAgICBFeHBhbmQtQXJjaGl2ZSAtUGF0aCBnaXQuemlwIC1EZXN0aW5hdGlvblBhdGggLmAKKyAgICB9IGVsc2Uge2AKKyAgICAgIGV4aXQgMSBgCisgICAgfSIgYAorICYmIGRlbCBnaXQuemlwCisKKyMgUXQgU291cmNlCitBREQgaHR0cHM6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC81LjEyLzUuMTIuMS9zaW5nbGUvcXQtZXZlcnl3aGVyZS1zcmMtNS4xMi4xLnRhci54eiBDOlxxdC1zcmNccXQudGFyLnh6CitSVU4gY2QgXHF0LXNyYyBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggcXQudGFyLnh6KS5IYXNoIC1lcSAnY2FmZmJkNjI1YzdiYzEwZmY4YzVjN2EyN2RiYzdkODRmYTRkZTE0Njk3NWMwZTFmZmU5MDRiNTE0Y2NkNmRhNCcpIHtgCisgICAgICBceHpcYmluX3g4Ni02NFx4eiAtZCBxdC50YXIueHogYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgdGFyIHh2ZiBxdC50YXIgYAorICYmIGRlbCBxdC50YXIgYAorICYmIG1vdmUgcXQtZXZlcnl3aGVyZS1zcmMtNS4xMi4xIHF0CitDT1BZIHF0LWJ1aWxkLmJhdCBxdC1pbnN0YWxsLnBhdGNoIEM6XHF0LXNyY1wKKworIyBRdCBCdWlsZCBpMzg2CitGUk9NIHF0LXNyYyBhcyBxdC1pMzg2CitSVU4gXHF0LXNyY1xxdC1idWlsZC5iYXQgaTM4NgorCisjIFF0IEJ1aWxkIHg4Nl82NAorRlJPTSBxdC1zcmMgYXMgcXQteDg2XzY0CitSVU4gXHF0LXNyY1xxdC1idWlsZC5iYXQgeDg2XzY0CisKKyMgT3V0cHV0IFN0YWdlCitGUk9NICRGUk9NX0lNQUdFCisKKyMgUXQKK0NPUFkgLS1mcm9tPXF0LWkzODYgQzpccXQtaTM4NiBDOlxxdC1pMzg2CitDT1BZIC0tZnJvbT1xdC14ODZfNjQgQzpccXQteDg2XzY0IEM6XHF0LXg4Nl82NAorCisjIFdJWAorQUREIGh0dHBzOi8vZ2l0aHViLmNvbS93aXh0b29sc2V0L3dpeDMvcmVsZWFzZXMvZG93bmxvYWQvd2l4MzExMnJ0bS93aXgzMTEtYmluYXJpZXMuemlwIEM6XHdpeFx3aXguemlwCitSVU4gY2QgXHdpeCBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggd2l4LnppcCkuSGFzaCAtZXEgJzJjMTg4OGQ1ZDFkYmEzNzdmYzdmYTE0NDQ0Y2Y1NTY5NjM3NDdmZjlhMGEyODlhMzU5OWNmMDlkYTAzYjllMmUnKSB7YAorICAgICAgRXhwYW5kLUFyY2hpdmUgLVBhdGggd2l4LnppcCAtRGVzdGluYXRpb25QYXRoIC5gCisgICAgfSBlbHNlIHtgCisgICAgICBleGl0IDEgYAorICAgIH0iIGAKKyAmJiBkZWwgd2l4LnppcAorCisjIFB5dGhvbiBhbmQgU3BoaW54CitBREQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLzMuOC4yL3B5dGhvbi0zLjguMi1lbWJlZC1hbWQ2NC56aXAgQzpccHl0aG9uM1xweXRob24zLnppcAorUlVOIGNkIFxweXRob24zIGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCBweXRob24zLnppcCkuSGFzaCAtZXEgJzI5MjdhM2E2ZDBmZTFmNmUwNDdhODYwNTkyMjBhZWRhMzc0ZWVkMjMxMTNiOWVmNTM1NWFjYjg0NTJkNTY0NTMnKSB7YAorICAgICAgRXhwYW5kLUFyY2hpdmUgLVBhdGggcHl0aG9uMy56aXAgLURlc3RpbmF0aW9uUGF0aCAuYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgZGVsIHB5dGhvbjMuemlwIGAKKyAmJiBjdXJsIC1PIGh0dHBzOi8vYm9vdHN0cmFwLnB5cGEuaW8vZ2V0LXBpcC5weSBgCisgJiYgcHl0aG9uIGdldC1waXAucHkgYAorICYmIGRlbCBweXRob24zOC5fcHRoIGAKKyAmJiBzZXQgIlBZX0xJQlM9QzpccHl0aG9uM1xMaWI7QzpcUHl0aG9uM1xMaWJcc2l0ZS1wYWNrYWdlcyIgYAorICYmIHNldCAiUFlfUElQPUM6XHB5dGhvbjNcU2NyaXB0cyIgYAorICYmIFNjcmlwdHNccGlwIGluc3RhbGwgLS1uby13YXJuLXNjcmlwdC1sb2NhdGlvbiBzcGhpbng9PTIuMS4yCisKKyMgTmluamEKK0FERCBodHRwczovL2dpdGh1Yi5jb20vbmluamEtYnVpbGQvbmluamEvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTAuMC9uaW5qYS13aW4uemlwIEM6XG5pbmphXG5pbmphLnppcAorUlVOIGNkIFxuaW5qYSBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggbmluamEuemlwKS5IYXNoIC1lcSAnOTE5ZmQxNThjMTZiZjEzNWU4YTg1MGJiNDA0NmVjMWNlMjhhNzQzOWVlMDhiOTc3Y2QwYjdmNmIzNDYzZDE3OCcpIHtgCisgICAgICBFeHBhbmQtQXJjaGl2ZSAtUGF0aCBuaW5qYS56aXAgLURlc3RpbmF0aW9uUGF0aCAuYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgZGVsIG5pbmphLnppcAorCisjIENNYWtlCitBREQgaHR0cHM6Ly9naXRodWIuY29tL0tpdHdhcmUvQ01ha2UvcmVsZWFzZXMvZG93bmxvYWQvdjMuMTcuMS9jbWFrZS0zLjE3LjEtd2luNjQteDY0LnppcCBDOlxjbWFrZVxjbWFrZS56aXAKK1JVTiBjZCBcY21ha2UgYAorICYmIHBvd2Vyc2hlbGwgLUNvbW1hbmQgIiBgCisgICAgaWYgKCQoR2V0LUZpbGVIYXNoIGNtYWtlLnppcCkuSGFzaCAtZXEgJ2E1YWY3YTJmZTczZjM0MDcwNDU2Mzk3ZTk0MDA0MmU0NDY5ZjA3MjEyNmM4Mjk3NGY0NDMzM2FjNDNkNDc4YjEnKSB7YAorICAgICAgRXhwYW5kLUFyY2hpdmUgLVBhdGggY21ha2UuemlwIC1EZXN0aW5hdGlvblBhdGggLmAKKyAgICB9IGVsc2Uge2AKKyAgICAgIGV4aXQgMSBgCisgICAgfSIgYAorICYmIG1vdmUgY21ha2UtKi13aW42NC14NjQgY21ha2UgYAorICYmIGRlbCBjbWFrZS56aXAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9xdC1idWlsZC5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvcXQtYnVpbGQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4YmZhODEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvcXQtYnVpbGQuYmF0CkBAIC0wLDAgKzEsNDcgQEAKK3NldCBBUkNIPSUxCitjYWxsIFxtc3ZjLSVBUkNIJS5iYXQgJiYgQGVjaG8gb24gfHwgZXhpdCAvYgorbWtkaXIgXHF0LXNyY1xxdC1idWlsZCAmJiBeCitjZCBccXQtc3JjXHF0LWJ1aWxkICYmIF4KKy4uXHF0XGNvbmZpZ3VyZS5iYXQgXgorICAtcHJlZml4IEM6L3F0LSVBUkNIJSBeCisgIC1zdGF0aWMgXgorICAtc3RhdGljLXJ1bnRpbWUgXgorICAtcmVsZWFzZSBeCisgIC1vcGVuc291cmNlIC1jb25maXJtLWxpY2Vuc2UgXgorICAtcGxhdGZvcm0gd2luMzItbXN2YyBeCisgIC1tcCBeCisgIC1ndWkgXgorICAtd2lkZ2V0cyBeCisgIC1xdC1wY3JlIF4KKyAgLXF0LXpsaWIgXgorICAtcXQtbGlicG5nIF4KKyAgLXF0LWxpYmpwZWcgXgorICAtbm8tZ2lmIF4KKyAgLW5vLWljdSBeCisgIC1uby1wY2ggXgorICAtbm8tYW5nbGUgXgorICAtbm8tb3BlbmdsIF4KKyAgLW5vLWRidXMgXgorICAtbm8taGFyZmJ1enogXgorICAtbm8tYWNjZXNzaWJpbGl0eSBeCisgIC1za2lwIGRlY2xhcmF0aXZlIF4KKyAgLXNraXAgbXVsdGltZWRpYSBeCisgIC1za2lwIHF0Y2FudmFzM2QgXgorICAtc2tpcCBxdGNvbm5lY3Rpdml0eSBeCisgIC1za2lwIHF0ZGVjbGFyYXRpdmUgXgorICAtc2tpcCBxdGxvY2F0aW9uIF4KKyAgLXNraXAgcXRtdWx0aW1lZGlhIF4KKyAgLXNraXAgcXRzZW5zb3JzIF4KKyAgLXNraXAgcXRzZXJpYWxwb3J0IF4KKyAgLXNraXAgcXRzdmcgXgorICAtc2tpcCBxdHdheWxhbmQgXgorICAtc2tpcCBxdHdlYmNoYW5uZWwgXgorICAtc2tpcCBxdHdlYmVuZ2luZSBeCisgIC1za2lwIHF0d2Vic29ja2V0cyBeCisgIC1za2lwIHF0eG1scGF0dGVybnMgXgorICAtbm9tYWtlIGV4YW1wbGVzIC1ub21ha2UgdGVzdHMgXgorICAmJiBeCitcam9tXGpvbS5leGUgLUogJU5VTUJFUl9PRl9QUk9DRVNTT1JTJSAmJiBeCitcam9tXGpvbS5leGUgaW5zdGFsbCAmJiBeCitjZCBccXQtJUFSQ0glICYmIF4KK1xnaXRcY21kXGdpdCBhcHBseSBccXQtc3JjXHF0LWluc3RhbGwucGF0Y2gKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9xdC1pbnN0YWxsLnBhdGNoIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9kZXBzL3F0LWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhNjQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9xdC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLS1naXQgYS9saWIvY21ha2UvUXQ1Q29yZS9RdDVDb3JlQ29uZmlnLmNtYWtlIGIvbGliL2NtYWtlL1F0NUNvcmUvUXQ1Q29yZUNvbmZpZy5jbWFrZQoraW5kZXggMDRlYzMwMi4uNzVkNTU5NiAxMDA2NDQKKy0tLSBhL2xpYi9jbWFrZS9RdDVDb3JlL1F0NUNvcmVDb25maWcuY21ha2UKKysrKyBiL2xpYi9jbWFrZS9RdDVDb3JlL1F0NUNvcmVDb25maWcuY21ha2UKK0BAIC0xMTgsNyArMTE4LDcgQEAgaWYgKE5PVCBUQVJHRVQgUXQ1OjpDb3JlKQorICAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIFF0NUNvcmVfQ09NUElMRV9ERUZJTklUSU9OUykKKyAgICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBRdDVDb3JlX0VYRUNVVEFCTEVfQ09NUElMRV9GTEFHUykKKyAKKy0gICAgc2V0KF9RdDVDb3JlX0xJQl9ERVBFTkRFTkNJRVMgIiIpCisrICAgIHNldChfUXQ1Q29yZV9MSUJfREVQRU5ERU5DSUVTICIke19xdDVDb3JlX2luc3RhbGxfcHJlZml4fS9saWIvcXRwY3JlMi5saWI7bmV0YXBpMzIubGliO3ZlcnNpb24ubGliIikKKyAKKyAKKyAgICAgYWRkX2xpYnJhcnkoUXQ1OjpDb3JlIFNUQVRJQyBJTVBPUlRFRCkKK2RpZmYgLS1naXQgYS9saWIvY21ha2UvUXQ1V2lkZ2V0cy9RdDVXaWRnZXRzQ29uZmlnLmNtYWtlIGIvbGliL2NtYWtlL1F0NVdpZGdldHMvUXQ1V2lkZ2V0c0NvbmZpZy5jbWFrZQoraW5kZXggYTA3Yjk1My4uMmUwNzM3MSAxMDA2NDQKKy0tLSBhL2xpYi9jbWFrZS9RdDVXaWRnZXRzL1F0NVdpZGdldHNDb25maWcuY21ha2UKKysrKyBiL2xpYi9jbWFrZS9RdDVXaWRnZXRzL1F0NVdpZGdldHNDb25maWcuY21ha2UKK0BAIC0xMTgsNyArMTE4LDcgQEAgaWYgKE5PVCBUQVJHRVQgUXQ1OjpXaWRnZXRzKQorICAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIFF0NVdpZGdldHNfQ09NUElMRV9ERUZJTklUSU9OUykKKyAgICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBRdDVXaWRnZXRzX0VYRUNVVEFCTEVfQ09NUElMRV9GTEFHUykKKyAKKy0gICAgc2V0KF9RdDVXaWRnZXRzX0xJQl9ERVBFTkRFTkNJRVMgIlF0NTo6R3VpO1F0NTo6Q29yZSIpCisrICAgIHNldChfUXQ1V2lkZ2V0c19MSUJfREVQRU5ERU5DSUVTICJRdDU6Okd1aTtRdDU6OkNvcmU7ZHdtYXBpLmxpYjt1eHRoZW1lLmxpYiIpCisgCisgCisgICAgIGFkZF9saWJyYXJ5KFF0NTo6V2lkZ2V0cyBTVEFUSUMgSU1QT1JURUQpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3BhY2suYmF0IGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9wYWNrLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDM3ZWVmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9wYWNrLmJhdApAQCAtMCwwICsxLDEyIEBACitAcmVtIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCitAcmVtIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKK2NhbGwgXG1zdmMuYmF0ICYmIEBlY2hvIG9uIHx8IGV4aXQgL2IKK3NldCBQQVRIPUM6XHdpeDtDOlxuaW5qYTslUEFUSCUKK2NkIFxjbWFrZVxzcmNcY21ha2UtYnVpbGQgJiYgKAorICBmb3IgJSVwIGluICglKikgZG8gKAorICAgIGJpblxjcGFjayAtRyAlJXAKKyAgKQorKSAmJiBeCitta2RpciBcb3V0ICYmIF4KK21vdmUgY21ha2UtKi13aW4qIFxvdXQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvdGVzdC9Eb2NrZXJmaWxlIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni90ZXN0L0RvY2tlcmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViY2QzNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvdGVzdC9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsMzcgQEAKKyMgZXNjYXBlPWAKKworIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCisjIFByb2R1Y2UgYSBiYXNlIGltYWdlIHdpdGggYSB0ZXN0IGVudmlyb25tZW50IGZvciBwYWNrYWdlZCBDTWFrZSBiaW5hcmllcy4KKyMgQnVpbGQgdXNpbmcgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZSBhcyBpdHMgb3duIGJ1aWxkIGNvbnRleHQuCisKK0FSRyBGUk9NX0lNQUdFX05BTUU9a2l0d2FyZS9jbWFrZTpidWlsZC13aW4teDg2LWJhc2UtMjAyMC0wNC0yNworQVJHIEZST01fSU1BR0VfRElHRVNUPUBzaGEyNTY6YzVhODk0OGQ2MzYzMTljZGFjMDE4MDI2Njk5NjU1OGJiNmZiMDM3MTI1NzkyYjViODM3ZjA2OWQwMmU1M2Q3YworQVJHIEZST01fSU1BR0U9JEZST01fSU1BR0VfTkFNRSRGUk9NX0lNQUdFX0RJR0VTVAorRlJPTSAkRlJPTV9JTUFHRQorCisjIFB5dGhvbgorQUREIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8zLjguMi9weXRob24tMy44LjItZW1iZWQtYW1kNjQuemlwIEM6XHB5dGhvbjNccHl0aG9uMy56aXAKK1JVTiBjZCBccHl0aG9uMyBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggcHl0aG9uMy56aXApLkhhc2ggLWVxICcyOTI3YTNhNmQwZmUxZjZlMDQ3YTg2MDU5MjIwYWVkYTM3NGVlZDIzMTEzYjllZjUzNTVhY2I4NDUyZDU2NDUzJykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIHB5dGhvbjMuemlwIC1EZXN0aW5hdGlvblBhdGggLmAKKyAgICB9IGVsc2Uge2AKKyAgICAgIGV4aXQgMSBgCisgICAgfSIgYAorICYmIGRlbCBweXRob24zLnppcCBgCisgJiYgZGVsIHB5dGhvbjM4Ll9wdGgKKworIyBOaW5qYQorQUREIGh0dHBzOi8vZ2l0aHViLmNvbS9uaW5qYS1idWlsZC9uaW5qYS9yZWxlYXNlcy9kb3dubG9hZC92MS4xMC4wL25pbmphLXdpbi56aXAgQzpcbmluamFcbmluamEuemlwCitSVU4gY2QgXG5pbmphIGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCBuaW5qYS56aXApLkhhc2ggLWVxICc5MTlmZDE1OGMxNmJmMTM1ZThhODUwYmI0MDQ2ZWMxY2UyOGE3NDM5ZWUwOGI5NzdjZDBiN2Y2YjM0NjNkMTc4Jykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIG5pbmphLnppcCAtRGVzdGluYXRpb25QYXRoIC5gCisgICAgfSBlbHNlIHtgCisgICAgICBleGl0IDEgYAorICAgIH0iIGAKKyAmJiBkZWwgbmluamEuemlwCisKK0NPUFkgdGVzdC1ubWFrZS5iYXQgdGVzdC1uaW5qYS5iYXQgQzpcCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3Rlc3QvdGVzdC1uaW5qYS5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3Rlc3QvdGVzdC1uaW5qYS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjgzNDdlZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvdGVzdC90ZXN0LW5pbmphLmJhdApAQCAtMCwwICsxLDE5IEBACitAcmVtIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCitAcmVtIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKK3NldCBBUkNIPSUxCitjYWxsIFxtc3ZjLSVBUkNIJS5iYXQgJiYgQGVjaG8gb24gfHwgZXhpdCAvYgorc2V0ICJQQVRIPUM6XGNtYWtlXGNtYWtlXGJpbjtDOlxuaW5qYTtDOlxweXRob24zOyVQQVRIJSIKK21rZGlyIFxjbWFrZVxzcmNcY21ha2UtbmluamEgJiYgXgorY2QgXGNtYWtlXHNyY1xjbWFrZS1uaW5qYSAmJiBeCis+IENNYWtlQ2FjaGUudHh0ICgKKyAgQGVjaG8gQ01BS0VfRm9ydHJhbl9DT01QSUxFUjpTVFJJTkc9CisgIEBlY2hvIENNQUtFX1N3aWZ0X0NPTVBJTEVSOlNUUklORz0KKyAgQGVjaG8gQ01ha2VfVEVTVF9JUE9fV09SS1NfQzpCT09MPU9OCisgIEBlY2hvIENNYWtlX1RFU1RfSVBPX1dPUktTX0NYWDpCT09MPU9OCisgIEBlY2hvIENNYWtlX1RFU1RfTk9fTkVUV09SSzpCT09MPU9OCisgIEBlY2hvIENURVNUX1JVTl9NRkM6Qk9PTD1PRkYKKykgJiYgXgorY21ha2UgLi5cY21ha2UgLURDTWFrZV9URVNUX0hPU1RfQ01BS0U9MSAtRyAiTmluamEiICYmIF4KK25pbmphICYmIF4KK2N0ZXN0IC0tb3V0cHV0LW9uLWZhaWx1cmUgLWogJU5VTUJFUl9PRl9QUk9DRVNTT1JTJQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni90ZXN0L3Rlc3Qtbm1ha2UuYmF0IGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni90ZXN0L3Rlc3Qtbm1ha2UuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwMDg3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3Rlc3QvdGVzdC1ubWFrZS5iYXQKQEAgLTAsMCArMSwxOSBAQAorQHJlbSBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworQHJlbSBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCitzZXQgQVJDSD0lMQorY2FsbCBcbXN2Yy0lQVJDSCUuYmF0ICYmIEBlY2hvIG9uIHx8IGV4aXQgL2IKK3NldCAiUEFUSD1DOlxjbWFrZVxjbWFrZVxiaW47QzpccHl0aG9uMzslUEFUSCUiCitta2RpciBcY21ha2Vcc3JjXGNtYWtlLW5tYWtlICYmIF4KK2NkIFxjbWFrZVxzcmNcY21ha2Utbm1ha2UgJiYgXgorPiBDTWFrZUNhY2hlLnR4dCAoCisgIEBlY2hvIENNQUtFX0ZvcnRyYW5fQ09NUElMRVI6U1RSSU5HPQorICBAZWNobyBDTUFLRV9Td2lmdF9DT01QSUxFUjpTVFJJTkc9CisgIEBlY2hvIENNYWtlX1RFU1RfSVBPX1dPUktTX0M6Qk9PTD1PTgorICBAZWNobyBDTWFrZV9URVNUX0lQT19XT1JLU19DWFg6Qk9PTD1PTgorICBAZWNobyBDTWFrZV9URVNUX05PX05FVFdPUks6Qk9PTD1PTgorICBAZWNobyBDVEVTVF9SVU5fTUZDOkJPT0w9T0ZGCispICYmIF4KK2NtYWtlIC4uXGNtYWtlIC1EQ01ha2VfVEVTVF9IT1NUX0NNQUtFPTEgLUcgIk5NYWtlIE1ha2VmaWxlcyIgJiYgXgorbm1ha2UgJiYgXgorY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtaiAlTlVNQkVSX09GX1BST0NFU1NPUlMlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4zMl9yZWxlYXNlLmNtYWtlIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luMzJfcmVsZWFzZS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlNWNiYS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4zMl9yZWxlYXNlLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotc2V0KENNQUtFX1JFTEVBU0VfRElSRUNUT1JZICJjOi9tc3lzNjQvaG9tZS9kYXNoYm9hcmQvQ01ha2VSZWxlYXNlRGlyZWN0b3J5MzIiKQotc2V0KENPTkZJR1VSRV9XSVRIX0NNQUtFIFRSVUUpCi1zZXQoQ01BS0VfQ09ORklHVVJFX1BBVEggImM6L1Byb2dyYW1cXCBGaWxlcy9DTWFrZS9iaW4vY21ha2UuZXhlIikKLXNldChQUk9DRVNTT1JTIDE2KQotc2V0KEhPU1Qgd2luMzIpCi1zZXQoUlVOX0xBVU5DSEVSIH4vcmVsL3J1bikKLXNldChDUEFDS19CSU5BUllfR0VORVJBVE9SUyAiV0lYIFpJUCIpCi1zZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUlMgIiIpCi1zZXQoTUFLRV9QUk9HUkFNICJuaW5qYSIpCi1zZXQoTUFLRSAiJHtNQUtFX1BST0dSQU19IC1qMTYiKQotc2V0KHF0X3ByZWZpeCAiYzovUXQvNS4xMi4xL21zdmMyMDE3LTMyLXc3LW10IikKLXNldChxdF93aW5fbGlicwotICAke3F0X3ByZWZpeH0vcGx1Z2lucy9wbGF0Zm9ybXMvcXdpbmRvd3MubGliCi0gICR7cXRfcHJlZml4fS9wbHVnaW5zL3N0eWxlcy9xd2luZG93c3Zpc3Rhc3R5bGUubGliCi0gICR7cXRfcHJlZml4fS9saWIvUXQ1RXZlbnREaXNwYXRjaGVyU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9RdDVGb250RGF0YWJhc2VTdXBwb3J0LmxpYgotICAke3F0X3ByZWZpeH0vbGliL1F0NVRoZW1lU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9xdGZyZWV0eXBlLmxpYgotICAke3F0X3ByZWZpeH0vbGliL3F0bGlicG5nLmxpYgotICBpbW0zMi5saWIKLSAgd3RzYXBpMzIubGliCi0gICkKLXNldChJTklUSUFMX0NBQ0hFICJDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1SZWxlYXNlCi1DTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKLUNNQUtFX1VTRV9PUEVOU1NMOkJPT0w9T0ZGCi1DTUFLRV9TS0lQX0JPT1RTVFJBUF9URVNUOlNUUklORz1UUlVFCi1DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSOkZJTEVQQVRIPUZBTFNFCi1DTUFLRV9HRU5FUkFUT1I6SU5URVJOQUw9TmluamEKLUJVSUxEX1F0RGlhbG9nOkJPT0w9VFJVRQotQ01ha2VfR1VJX0RJU1RSSUJVVEVfV0lUSF9RdF9MR1BMOlNUUklORz0zCi1DTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWTpTVFJJTkc9TXVsdGlUaHJlYWRlZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPgotQ01BS0VfRVhFX0xJTktFUl9GTEFHUzpTVFJJTkc9LW1hY2hpbmU6eDg2IC1zdWJzeXN0ZW06Y29uc29sZSw2LjAxCi1DTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVM6U1RSSU5HPSR7cXRfd2luX2xpYnN9Ci1DTUFLRV9QUkVGSVhfUEFUSDpTVFJJTkc9JHtxdF9wcmVmaXh9Ci1DTWFrZV9URVNUX1F0NDpCT09MPU9GRgotQ01ha2VfVEVTVF9RdDU6Qk9PTD1PRkYKLSIpCi1zZXQocHBmbGFncyAiLURfV0lOMzJfV0lOTlQ9MHg2MDEgLUROVERESV9WRVJTSU9OPTB4MDYwMTAwMDAiKQotc2V0KENGTEFHUyAiJHtwcGZsYWdzfSIpCi1zZXQoQ1hYRkxBR1MgIiR7cHBmbGFnc30iKQotc2V0KEVOViAiLiB+L3JlbC9lbnYzMiIpCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KHBhdGggIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiBQQVRIKQotc2V0KEdJVF9FWFRSQSAiZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUiKQotaWYoQ01BS0VfQ1JFQVRFX1ZFUlNJT04gU1RSRVFVQUwgIm5pZ2h0bHkiKQotICAjIFNvbWUgdGVzdHMgZmFpbCBzcHVyaW91c2x5IHRvbyBvZnRlbi4KLSAgc2V0KEVYVFJBX0NURVNUX0FSR1MgIi1FICdDb25zb2xlQnVmfE1vZHVsZS5FeHRlcm5hbERhdGEnIikKLSAgc2V0KFNJR04gIiIpCi1lbHNlKCkKLSAgc3RyaW5nKEFQUEVORCBJTklUSUFMX0NBQ0hFICJDTWFrZV9JTlNUQUxMX1NJR05UT09MOlNUUklORz1zaWdudG9vbFxuIikKLSAgc2V0KFNJR04gW1tzaWdudG9vbCBzaWduIC12IC1hIC10ciBodHRwOi8vdGltZXN0YW1wLmRpZ2ljZXJ0LmNvbSAtZmQgc2hhMjU2IC10ZCBzaGEyNTYgLWQgIkNNYWtlIFdpbmRvd3MgSW5zdGFsbGVyIiBjbWFrZS0qLm1zaV1dKQotZW5kaWYoKQotaW5jbHVkZSgke3BhdGh9L3JlbGVhc2VfY21ha2UuY21ha2UpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW42NF9yZWxlYXNlLmNtYWtlIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luNjRfcmVsZWFzZS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5ZDM3OC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS93aW42NF9yZWxlYXNlLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotc2V0KENNQUtFX1JFTEVBU0VfRElSRUNUT1JZICJjOi9tc3lzNjQvaG9tZS9kYXNoYm9hcmQvQ01ha2VSZWxlYXNlRGlyZWN0b3J5NjQiKQotc2V0KENPTkZJR1VSRV9XSVRIX0NNQUtFIFRSVUUpCi1zZXQoQ01BS0VfQ09ORklHVVJFX1BBVEggImM6L1Byb2dyYW1cXCBGaWxlcy9DTWFrZS9iaW4vY21ha2UuZXhlIikKLXNldChQUk9DRVNTT1JTIDE2KQotc2V0KEhPU1Qgd2luNjQpCi1zZXQoUlVOX0xBVU5DSEVSIH4vcmVsL3J1bikKLXNldChDUEFDS19CSU5BUllfR0VORVJBVE9SUyAiV0lYIFpJUCIpCi1zZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUlMgIiIpCi1zZXQoTUFLRV9QUk9HUkFNICJuaW5qYSIpCi1zZXQoTUFLRSAiJHtNQUtFX1BST0dSQU19IC1qMTYiKQotc2V0KHF0X3ByZWZpeCAiYzovUXQvNS4xMi4xL21zdmMyMDE3LTY0LXc3LW10IikKLXNldChxdF93aW5fbGlicwotICAke3F0X3ByZWZpeH0vcGx1Z2lucy9wbGF0Zm9ybXMvcXdpbmRvd3MubGliCi0gICR7cXRfcHJlZml4fS9wbHVnaW5zL3N0eWxlcy9xd2luZG93c3Zpc3Rhc3R5bGUubGliCi0gICR7cXRfcHJlZml4fS9saWIvUXQ1RXZlbnREaXNwYXRjaGVyU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9RdDVGb250RGF0YWJhc2VTdXBwb3J0LmxpYgotICAke3F0X3ByZWZpeH0vbGliL1F0NVRoZW1lU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9xdGZyZWV0eXBlLmxpYgotICAke3F0X3ByZWZpeH0vbGliL3F0bGlicG5nLmxpYgotICBpbW0zMi5saWIKLSAgd3RzYXBpMzIubGliCi0gICkKLXNldChJTklUSUFMX0NBQ0hFICJDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1SZWxlYXNlCi1DTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKLUNNQUtFX1VTRV9PUEVOU1NMOkJPT0w9T0ZGCi1DTUFLRV9TS0lQX0JPT1RTVFJBUF9URVNUOlNUUklORz1UUlVFCi1DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSOkZJTEVQQVRIPUZBTFNFCi1DTUFLRV9HRU5FUkFUT1I6SU5URVJOQUw9TmluamEKLUJVSUxEX1F0RGlhbG9nOkJPT0w9VFJVRQotQ01ha2VfR1VJX0RJU1RSSUJVVEVfV0lUSF9RdF9MR1BMOlNUUklORz0zCi1DTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWTpTVFJJTkc9TXVsdGlUaHJlYWRlZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPgotQ01BS0VfRVhFX0xJTktFUl9GTEFHUzpTVFJJTkc9LW1hY2hpbmU6eDY0IC1zdWJzeXN0ZW06Y29uc29sZSw2LjAxCi1DTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVM6U1RSSU5HPSR7cXRfd2luX2xpYnN9Ci1DTUFLRV9QUkVGSVhfUEFUSDpTVFJJTkc9JHtxdF9wcmVmaXh9Ci1DTWFrZV9URVNUX1F0NDpCT09MPU9GRgotQ01ha2VfVEVTVF9RdDU6Qk9PTD1PRkYKLSIpCi1zZXQocHBmbGFncyAiLURfV0lOMzJfV0lOTlQ9MHg2MDEgLUROVERESV9WRVJTSU9OPTB4MDYwMTAwMDAiKQotc2V0KENGTEFHUyAiJHtwcGZsYWdzfSIpCi1zZXQoQ1hYRkxBR1MgIiR7cHBmbGFnc30iKQotc2V0KEVOViAiLiB+L3JlbC9lbnY2NCIpCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KHBhdGggIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiBQQVRIKQotc2V0KEdJVF9FWFRSQSAiZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUiKQotaWYoQ01BS0VfQ1JFQVRFX1ZFUlNJT04gU1RSRVFVQUwgIm5pZ2h0bHkiKQotICAjIFNvbWUgdGVzdHMgZmFpbCBzcHVyaW91c2x5IHRvbyBvZnRlbi4KLSAgc2V0KEVYVFJBX0NURVNUX0FSR1MgIi1FICdDb25zb2xlQnVmfE1vZHVsZS5FeHRlcm5hbERhdGEnIikKLSAgc2V0KFNJR04gIiIpCi1lbHNlKCkKLSAgc3RyaW5nKEFQUEVORCBJTklUSUFMX0NBQ0hFICJDTWFrZV9JTlNUQUxMX1NJR05UT09MOlNUUklORz1zaWdudG9vbFxuIikKLSAgc2V0KFNJR04gW1tzaWdudG9vbCBzaWduIC12IC1hIC10ciBodHRwOi8vdGltZXN0YW1wLmRpZ2ljZXJ0LmNvbSAtZmQgc2hhMjU2IC10ZCBzaGEyNTYgLWQgIkNNYWtlIFdpbmRvd3MgSW5zdGFsbGVyIiBjbWFrZS0qLm1zaV1dKQotZW5kaWYoKQotaW5jbHVkZSgke3BhdGh9L3JlbGVhc2VfY21ha2UuY21ha2UpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtYnppcDIuYmFzaCBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1iemlwMi5iYXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzNDM5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtYnppcDIuYmFzaApAQCAtMCwwICsxLDI3IEBACisjIS91c3IvYmluL2VudiBiYXNoCisKK3NldCAtZQorc2V0IC14CitzaG9wdCAtcyBkb3RnbG9iCisKK3JlYWRvbmx5IG5hbWU9ImJ6aXAyIgorcmVhZG9ubHkgb3duZXJzaGlwPSJiemlwMiB1cHN0cmVhbSA8a3dyb2JvdEBraXR3YXJlLmNvbT4iCityZWFkb25seSBzdWJ0cmVlPSJVdGlsaXRpZXMvY21iemlwMiIKK3JlYWRvbmx5IHJlcG89Imh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0L2J6aXAyLmdpdCIKK3JlYWRvbmx5IHRhZz0iYnppcDItMS4wLjgiCityZWFkb25seSBzaG9ydGxvZz1mYWxzZQorcmVhZG9ubHkgcGF0aHM9IgorICBMSUNFTlNFCisgIFJFQURNRQorICAqLmMKKyAgKi5oCisiCisKK2V4dHJhY3Rfc291cmNlICgpIHsKKyAgICBnaXRfYXJjaGl2ZQorICAgIHB1c2hkICIke2V4dHJhY3RkaXJ9LyR7bmFtZX0tcmVkdWNlZCIKKyAgICBlY2hvICIqIC13aGl0ZXNwYWNlIiA+IC5naXRhdHRyaWJ1dGVzCisgICAgcG9wZAorfQorCisuICIke0JBU0hfU09VUkNFJS8qfS91cGRhdGUtdGhpcmQtcGFydHkuYmFzaCIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1jdXJsLmJhc2ggYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtY3VybC5iYXNoCmluZGV4IDVjMmEzMzEuLjY3ZTI3MjggMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1jdXJsLmJhc2gKKysrIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWN1cmwuYmFzaApAQCAtOCw3ICs4LDcgQEAKIHJlYWRvbmx5IG93bmVyc2hpcD0iQ3VybCBVcHN0cmVhbSA8Y3VybC1saWJyYXJ5QGNvb2wuaGF4eC5zZT4iCiByZWFkb25seSBzdWJ0cmVlPSJVdGlsaXRpZXMvY21jdXJsIgogcmVhZG9ubHkgcmVwbz0iaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC5naXQiCi1yZWFkb25seSB0YWc9ImN1cmwtN182NV8wIgorcmVhZG9ubHkgdGFnPSJjdXJsLTdfNzFfMSIKIHJlYWRvbmx5IHNob3J0bG9nPWZhbHNlCiByZWFkb25seSBwYXRocz0iCiAgIENNYWtlLyoKQEAgLTIzLDYgKzIzLDEwIEBACiAgIGxpYi9saWJjdXJsLnJjCiAgIGxpYi92YXV0aC8qLmMKICAgbGliL3ZhdXRoLyouaAorICBsaWIvdnF1aWMvKi5jCisgIGxpYi92cXVpYy8qLmgKKyAgbGliL3Zzc2gvKi5jCisgIGxpYi92c3NoLyouaAogICBsaWIvdnRscy8qLmMKICAgbGliL3Z0bHMvKi5oCiAiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGliYXJjaGl2ZS5iYXNoIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYmFyY2hpdmUuYmFzaAppbmRleCAzMTg4NjU4Li4zZGI4OWZmIDEwMDc1NQotLS0gYS9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGliYXJjaGl2ZS5iYXNoCisrKyBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJhcmNoaXZlLmJhc2gKQEAgLTgsNyArOCw3IEBACiByZWFkb25seSBvd25lcnNoaXA9IkxpYkFyY2hpdmUgVXBzdHJlYW0gPGxpYmFyY2hpdmUtZGlzY3Vzc0Bnb29nbGVncm91cHMuY29tPiIKIHJlYWRvbmx5IHN1YnRyZWU9IlV0aWxpdGllcy9jbWxpYmFyY2hpdmUiCiByZWFkb25seSByZXBvPSJodHRwczovL2dpdGh1Yi5jb20vbGliYXJjaGl2ZS9saWJhcmNoaXZlLmdpdCIKLXJlYWRvbmx5IHRhZz0idjMuMy4zIgorcmVhZG9ubHkgdGFnPSJ2My40LjIiCiByZWFkb25seSBzaG9ydGxvZz1mYWxzZQogcmVhZG9ubHkgcGF0aHM9IgogICBDTWFrZUxpc3RzLnR4dApAQCAtMjUsNiArMjUsNyBAQAogICAgIGdpdF9hcmNoaXZlCiAgICAgcHVzaGQgIiR7ZXh0cmFjdGRpcn0vJHtuYW1lfS1yZWR1Y2VkIgogICAgIGZyb21kb3MgYnVpbGQvY21ha2UvRmluZCouY21ha2UKKyAgICBlY2hvICIqIC13aGl0ZXNwYWNlIiA+IC5naXRhdHRyaWJ1dGVzCiAgICAgcG9wZAogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGlicmhhc2guYmFzaCBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJyaGFzaC5iYXNoCmluZGV4IDAwOWNlMzIuLmVhN2U2NTUgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJyaGFzaC5iYXNoCisrKyBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJyaGFzaC5iYXNoCkBAIC04LDExICs4LDEwIEBACiByZWFkb25seSBvd25lcnNoaXA9ImxpYnJoYXNoIHVwc3RyZWFtIDxrd3JvYm90QGtpdHdhcmUuY29tPiIKIHJlYWRvbmx5IHN1YnRyZWU9IlV0aWxpdGllcy9jbWxpYnJoYXNoIgogcmVhZG9ubHkgcmVwbz0iaHR0cHM6Ly9naXRodWIuY29tL3JoYXNoL3JoYXNoLmdpdCIKLXJlYWRvbmx5IHRhZz0ibWFzdGVyIgorcmVhZG9ubHkgdGFnPSJ2MS4zLjkiCiByZWFkb25seSBzaG9ydGxvZz1mYWxzZQogcmVhZG9ubHkgcGF0aHM9IgogICBDT1BZSU5HCi0gIFJFQURNRQogICBsaWJyaGFzaC9hbGdvcml0aG1zLmMKICAgbGlicmhhc2gvYWxnb3JpdGhtcy5oCiAgIGxpYnJoYXNoL2J5dGVfb3JkZXIuYwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLW5naHR0cDIuYmFzaCBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1uZ2h0dHAyLmJhc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDdhOGYxMwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1uZ2h0dHAyLmJhc2gKQEAgLTAsMCArMSwzMCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorCitzZXQgLWUKK3NldCAteAorc2hvcHQgLXMgZG90Z2xvYgorCityZWFkb25seSBuYW1lPSJuZ2h0dHAyIgorcmVhZG9ubHkgb3duZXJzaGlwPSJuZ2h0dHAyIHVwc3RyZWFtIDxrd3JvYm90QGtpdHdhcmUuY29tPiIKK3JlYWRvbmx5IHN1YnRyZWU9IlV0aWxpdGllcy9jbW5naHR0cDIiCityZWFkb25seSByZXBvPSJodHRwczovL2dpdGh1Yi5jb20vbmdodHRwMi9uZ2h0dHAyLmdpdCIKK3JlYWRvbmx5IHRhZz0idjEuNDAuMCIKK3JlYWRvbmx5IHNob3J0bG9nPWZhbHNlCityZWFkb25seSBwYXRocz0iCisgIENPUFlJTkcKKyAgbGliLyouYworICBsaWIvKi5oCisgIGxpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDIuaAorICBsaWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAydmVyLmguaW4KKyIKKworZXh0cmFjdF9zb3VyY2UgKCkgeworICAgIGdpdF9hcmNoaXZlCisgICAgcHVzaGQgIiR7ZXh0cmFjdGRpcn0vJHtuYW1lfS1yZWR1Y2VkIgorICAgIGVjaG8gIiogLXdoaXRlc3BhY2UiID4gLmdpdGF0dHJpYnV0ZXMKKyAgICBtdiBsaWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAydmVyLmguaW4gbGliL2luY2x1ZGVzL25naHR0cDIvbmdodHRwMnZlci5oCisgICAgc2VkIC1pICdzL0BQQUNLQUdFX1ZFUlNJT05ALzEuNDAuMC87cy9AUEFDS0FHRV9WRVJTSU9OX05VTUAvMHgwMTI4MDAvJyBsaWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAydmVyLmgKKyAgICBwb3BkCit9CisKKy4gIiR7QkFTSF9TT1VSQ0UlLyp9L3VwZGF0ZS10aGlyZC1wYXJ0eS5iYXNoIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NwaGlueC9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9TcGhpbngvQ01ha2VMaXN0cy50eHQKaW5kZXggMTdjNTAxOC4uZTViZTQzYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL1NwaGlueC9DTWFrZUxpc3RzLnR4dAorKysgYi9VdGlsaXRpZXMvU3BoaW54L0NNYWtlTGlzdHMudHh0CkBAIC04OSw3ICs4OSw3IEBACiAgIGZpbmRfcGFja2FnZShQeXRob25JbnRlcnAgUkVRVUlSRUQpCiAKICAgZmluZF9wcm9ncmFtKFFDT0xMRUNUSU9OR0VORVJBVE9SX0VYRUNVVEFCTEUKLSAgICBOQU1FUyBxY29sbGVjdGlvbmdlbmVyYXRvcgorICAgIE5BTUVTIHFjb2xsZWN0aW9uZ2VuZXJhdG9yLXF0NSBxY29sbGVjdGlvbmdlbmVyYXRvcgogICAgIERPQyAicWNvbGxlY3Rpb25nZW5lcmF0b3IgdG9vbCIKICAgICApCiAgIGlmIChOT1QgUUNPTExFQ1RJT05HRU5FUkFUT1JfRVhFQ1VUQUJMRSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TcGhpbngvQ1Rlc3RDb25maWcuY21ha2UgYi9VdGlsaXRpZXMvU3BoaW54L0NUZXN0Q29uZmlnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjQyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvU3BoaW54L0NUZXN0Q29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworIyBJZiBjaGFuZ2luZyB0aGlzIGZpbGUsIGFsc28gdXBkYXRlIENUZXN0Q29uZmlnLmNtYWtlCisKK3NldChDVEVTVF9QUk9KRUNUX05BTUUgIkNNYWtlIikKK3NldChDVEVTVF9OSUdIVExZX1NUQVJUX1RJTUUgIjE6MDA6MDAgVVRDIikKKworaWYoTk9UIENURVNUX0RST1BfTUVUSE9EIFNUUkVRVUFMICJodHRwcyIpCisgIHNldChDVEVTVF9EUk9QX01FVEhPRCAiaHR0cCIpCitlbmRpZigpCitzZXQoQ1RFU1RfRFJPUF9TSVRFICJvcGVuLmNkYXNoLm9yZyIpCitzZXQoQ1RFU1RfRFJPUF9MT0NBVElPTiAiL3N1Ym1pdC5waHA/cHJvamVjdD1DTWFrZSIpCitzZXQoQ1RFU1RfRFJPUF9TSVRFX0NEQVNIIFRSVUUpCitzZXQoQ1RFU1RfQ0RBU0hfVkVSU0lPTiAiMS42IikKK3NldChDVEVTVF9DREFTSF9RVUVSWV9WRVJTSU9OIFRSVUUpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU3BoaW54L2NyZWF0ZV9pZGVudGlmaWVycy5weSBiL1V0aWxpdGllcy9TcGhpbngvY3JlYXRlX2lkZW50aWZpZXJzLnB5CmluZGV4IGI1Y2Q5MTQuLmUzNWYxMjcgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9TcGhpbngvY3JlYXRlX2lkZW50aWZpZXJzLnB5CisrKyBiL1V0aWxpdGllcy9TcGhpbngvY3JlYXRlX2lkZW50aWZpZXJzLnB5CkBAIC0xLDE3ICsxLDE3IEBACiAjIS91c3IvYmluL2VudiBweXRob24KIAotaW1wb3J0IHN5cywgb3MKK2ltcG9ydCBzeXMKIAogaWYgbGVuKHN5cy5hcmd2KSAhPSAyOgogICBzeXMuZXhpdCgtMSkKIG5hbWUgPSBzeXMuYXJndlsxXSArICIvQ01ha2UucWhwIgogCi1mID0gb3BlbihuYW1lKQorZiA9IG9wZW4obmFtZSwgInJiIikKIAogaWYgbm90IGY6CiAgIHN5cy5leGl0KC0xKQogCi1saW5lcyA9IGYucmVhZCgpLnNwbGl0bGluZXMoKQorbGluZXMgPSBmLnJlYWQoKS5kZWNvZGUoInV0Zi04Iikuc3BsaXRsaW5lcygpCiAKIGlmIG5vdCBsaW5lczoKICAgc3lzLmV4aXQoLTEpCkBAIC0zOCw3ICszOCw3IEBACiAKICAgZm9yIGRvbWFpbl9vYmplY3Rfc3RyaW5nLCBkb21haW5fb2JqZWN0X3R5cGUgaW4gbWFwcGluZzoKICAgICBpZiAiPGtleXdvcmQgbmFtZT1cIiIgKyBkb21haW5fb2JqZWN0X3N0cmluZyArICJcIiIgaW4gbGluZToKLSAgICAgIGlmIG5vdCAiaWQ9XCIiIGluIGxpbmUgYW5kIG5vdCAiI2luZGV4LSIgaW4gbGluZToKKyAgICAgIGlmICJpZD1cIiIgbm90IGluIGxpbmUgYW5kICIjaW5kZXgtIiBub3QgaW4gbGluZToKICAgICAgICAgcHJlZml4ID0gIjxrZXl3b3JkIG5hbWU9XCIiICsgZG9tYWluX29iamVjdF9zdHJpbmcgKyAiXCIgIgogICAgICAgICBwYXJ0MSwgcGFydDIgPSBsaW5lLnNwbGl0KHByZWZpeCkKICAgICAgICAgaGVhZCwgdGFpbCA9IHBhcnQyLnNwbGl0KCIjIiArIGRvbWFpbl9vYmplY3RfdHlwZSArICI6IikKQEAgLTQ2LDUgKzQ2LDUgQEAKICAgICAgICAgbGluZSA9IHBhcnQxICsgcHJlZml4ICsgImlkPVwiIiArIGRvbWFpbl9vYmplY3RfdHlwZSArICIvIiArIGRvbWFpbl9vYmplY3QgKyAiXCIgIiArIHBhcnQyCiAgIG5ld2xpbmVzLmFwcGVuZChsaW5lICsgIlxuIikKIAotZiA9IG9wZW4obmFtZSwgInciKQotZi53cml0ZWxpbmVzKG5ld2xpbmVzKQorZiA9IG9wZW4obmFtZSwgIndiIikKK2Yud3JpdGVsaW5lcyhtYXAobGFtYmRhIGxpbmU6IGxpbmUuZW5jb2RlKCJ1dGYtOCIpLCBuZXdsaW5lcykpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU3BoaW54L3VwZGF0ZV92ZXJzaW9ucy5weSBiL1V0aWxpdGllcy9TcGhpbngvdXBkYXRlX3ZlcnNpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5M2U3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvU3BoaW54L3VwZGF0ZV92ZXJzaW9ucy5weQpAQCAtMCwwICsxLDExNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCitUaGlzIHNjcmlwdCBpbnNlcnRzICJ2ZXJzaW9uYWRkZWQiIGRpcmVjdGl2ZSBpbnRvIGV2ZXJ5IC5yc3QgZG9jdW1lbnQKK2FuZCBldmVyeSAuY21ha2UgbW9kdWxlIHdpdGggLnJzdCBkb2N1bWVudGF0aW9uIGNvbW1lbnQuCisiIiIKK2ltcG9ydCByZQoraW1wb3J0IHBhdGhsaWIKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYXJncGFyc2UKKwordGFnX3JlID0gcmUuY29tcGlsZShyJ152M1wuKFxkKylcLihcZCspKD86LXJjKFxkKykpPyQnKQorcGF0aF9yZSA9IHJlLmNvbXBpbGUocidIZWxwLyg/IWRldnxndWlkZXxtYW51YWx8Y3BhY2tffHJlbGVhc2UpLipcLnJzdHxNb2R1bGVzL1teL10qXC5jbWFrZSQnKQorCitkZWYgZ2l0X3Jvb3QoKToKKyAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bigKKyAgICAgICAgWydnaXQnLCAncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCddLCBjaGVjaz1UcnVlLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSkKKyAgICByZXR1cm4gcGF0aGxpYi5QYXRoKHJlc3VsdC5zdGRvdXQuc3RyaXAoKSkKKworZGVmIGdpdF90YWdzKCk6CisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydnaXQnLCAndGFnJ10sIGNoZWNrPVRydWUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLCBjYXB0dXJlX291dHB1dD1UcnVlKQorICAgIHJldHVybiBbdGFnIGZvciB0YWcgaW4gcmVzdWx0LnN0ZG91dC5zcGxpdGxpbmVzKCkgaWYgdGFnX3JlLm1hdGNoKHRhZyldCisKK2RlZiBnaXRfbGlzdF90cmVlKHJlZik6CisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oCisgICAgICAgIFsnZ2l0JywgJ2xzLXRyZWUnLCAnLXInLCAnLS1mdWxsLW5hbWUnLCAnLS1uYW1lLW9ubHknLCByZWYsICc6LyddLAorICAgICAgICBjaGVjaz1UcnVlLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSkKKyAgICByZXR1cm4gW3BhdGggZm9yIHBhdGggaW4gcmVzdWx0LnN0ZG91dC5zcGxpdGxpbmVzKCkgaWYgcGF0aF9yZS5tYXRjaChwYXRoKV0KKworZGVmIHRhZ192ZXJzaW9uKHRhZyk6CisgICAgcmV0dXJuIHJlLnN1YihyJ152fFwuMCgtcmNcZCspPyQnLCAnJywgdGFnKQorCitkZWYgdGFnX3NvcnRrZXkodGFnKToKKyAgICByZXR1cm4gdHVwbGUoaW50KHBhcnQgb3IgJzEwMDAnKSBmb3IgcGFydCBpbiB0YWdfcmUubWF0Y2godGFnKS5ncm91cHMoKSkKKworZGVmIG1ha2VfdmVyc2lvbl9tYXAoYmFzZWxpbmUsIHNpbmNlLCBuZXh0X3ZlcnNpb24pOgorICAgIHZlcnNpb25zID0ge30KKyAgICBpZiBuZXh0X3ZlcnNpb246CisgICAgICAgIGZvciBwYXRoIGluIGdpdF9saXN0X3RyZWUoJ0hFQUQnKToKKyAgICAgICAgICAgIHZlcnNpb25zW3BhdGhdID0gbmV4dF92ZXJzaW9uCisgICAgZm9yIHRhZyBpbiBzb3J0ZWQoZ2l0X3RhZ3MoKSwga2V5PXRhZ19zb3J0a2V5LCByZXZlcnNlPVRydWUpOgorICAgICAgICB2ZXJzaW9uID0gdGFnX3ZlcnNpb24odGFnKQorICAgICAgICBmb3IgcGF0aCBpbiBnaXRfbGlzdF90cmVlKHRhZyk6CisgICAgICAgICAgICB2ZXJzaW9uc1twYXRoXSA9IHZlcnNpb24KKyAgICBpZiBiYXNlbGluZToKKyAgICAgICAgZm9yIHBhdGggaW4gZ2l0X2xpc3RfdHJlZShiYXNlbGluZSk6CisgICAgICAgICAgICB2ZXJzaW9uc1twYXRoXSA9IE5vbmUKKyAgICBpZiBzaW5jZToKKyAgICAgICAgZm9yIHBhdGggaW4gZ2l0X2xpc3RfdHJlZShzaW5jZSk6CisgICAgICAgICAgICB2ZXJzaW9ucy5wb3AocGF0aCwgTm9uZSkKKyAgICByZXR1cm4gdmVyc2lvbnMKKworY21ha2VfdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoCisgICAgcmInc2V0XChDTWFrZV9WRVJTSU9OX01BSk9SXHMrKFxkKylcKVxzK3NldFwoQ01ha2VfVkVSU0lPTl9NSU5PUlxzKyhcZCspXClccytzZXRcKENNYWtlX1ZFUlNJT05fUEFUQ0hccysoXGQrKVwpJywgcmUuUykKKworZGVmIGNtYWtlX3ZlcnNpb24ocGF0aCk6CisgICAgbWF0Y2ggPSBjbWFrZV92ZXJzaW9uX3JlLnNlYXJjaChwYXRoLnJlYWRfYnl0ZXMoKSkKKyAgICBtYWpvciwgbWlub3IsIHBhdGNoID0gbWFwKGludCwgbWF0Y2guZ3JvdXBzKCkpCisgICAgbWlub3IgKz0gcGF0Y2ggPiAyMDAwMDAwMAorICAgIHJldHVybiBmJ3ttYWpvcn0ue21pbm9yfScKKworc3RhbXBfcmUgPSByZS5jb21waWxlKAorICAgIHJiJyg/UDxQUkVGSVg+KF58XFtcLnJzdDpccj9cbilbXlxyXG5dK1xyP1xuWypeXC09I10rKD9QPE5MPlxyP1xuKSkoP1A8U1RBTVA+XHMqXC5cLiB2ZXJzaW9uYWRkZWQ6OlteXHJcbl0qXHI/XG4pPycpCitzdGFtcF9wYXR0ZXJuX2FkZCA9IHJiJ1xnPFBSRUZJWD5cZzxOTD4uLiB2ZXJzaW9uYWRkZWQ6OiBWRVJTSU9OXGc8Tkw+Jworc3RhbXBfcGF0dGVybl9yZW1vdmUgPSByYidcZzxQUkVGSVg+JworCitkZWYgdXBkYXRlX2ZpbGUocGF0aCwgdmVyc2lvbiwgb3ZlcndyaXRlKToKKyAgICB0cnk6CisgICAgICAgIGRhdGEgPSBwYXRoLnJlYWRfYnl0ZXMoKQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvciBhcyBlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfcmVwbGFjZW1lbnQobWF0Y2gpOgorICAgICAgICBpZiBub3Qgb3ZlcndyaXRlIGFuZCBtYXRjaC5zdGFydCgnU1RBTVAnKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgpCisgICAgICAgIGlmIHZlcnNpb246CisgICAgICAgICAgICBwYXR0ZXJuID0gc3RhbXBfcGF0dGVybl9hZGQucmVwbGFjZShiJ1ZFUlNJT04nLCB2ZXJzaW9uLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdHRlcm4gPSBzdGFtcF9wYXR0ZXJuX3JlbW92ZQorICAgICAgICByZXR1cm4gbWF0Y2guZXhwYW5kKHBhdHRlcm4pCisKKyAgICBuZXdfZGF0YSwgbnJlcGwgPSBzdGFtcF9yZS5zdWJuKF9yZXBsYWNlbWVudCwgZGF0YSwgMSkKKyAgICBpZiBucmVwbCBhbmQgbmV3X2RhdGEgIT0gZGF0YToKKyAgICAgICAgcGF0aC53cml0ZV9ieXRlcyhuZXdfZGF0YSkKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHVwZGF0ZV9yZXBvKHJlcG9fcm9vdCwgdmVyc2lvbl9tYXAsIG92ZXJ3cml0ZSk6CisgICAgdG90YWwgPSAwCisgICAgZm9yIHBhdGgsIHZlcnNpb24gaW4gdmVyc2lvbl9tYXAuaXRlbXMoKToKKyAgICAgICAgaWYgdXBkYXRlX2ZpbGUocmVwb19yb290IC8gcGF0aCwgdmVyc2lvbiwgb3ZlcndyaXRlKToKKyAgICAgICAgICAgIHByaW50KGYiVmVyc2lvbiB7dmVyc2lvbiBvciAnPG5vbmU+Jzo2fSBmb3Ige3BhdGh9IikKKyAgICAgICAgICAgIHRvdGFsICs9IDEKKyAgICBwcmludChmIlVwZGF0ZWQge3RvdGFsfSBmaWxlKHMpIikKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihhbGxvd19hYmJyZXY9RmFsc2UpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdmVyd3JpdGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSJvdmVyd3JpdGUgZXhpc3RpbmcgdmVyc2lvbiB0YWdzIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhc2VsaW5lJywgbWV0YXZhcj0nVEFHJywgZGVmYXVsdD0ndjMuMC4wJywKKyAgICAgICAgaGVscD0iZmlsZXMgcHJlc2VudCBpbiB0aGlzIHRhZyB3b24ndCBiZSBzdGFtcGVkIChkZWZhdWx0OiB2My4wLjApIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNpbmNlJywgbWV0YXZhcj0nVEFHJywKKyAgICAgICAgaGVscD0iYXBwbHkgY2hhbmdlcyBvbmx5IHRvIGZpbGVzIGFkZGVkIGFmdGVyIHRoaXMgdGFnIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5leHQtdmVyc2lvbicsIG1ldGF2YXI9J1ZFUicsCisgICAgICAgIGhlbHA9InZlcnNpb24gZm9yIGZpbGVzIG5vdCBwcmVzZW50IGluIGFueSB0YWcgKGRlZmF1bHQ6IGZyb20gQ01ha2VWZXJzaW9uLmNtYWtlKSIpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHRyeToKKyAgICAgICAgcmVwb19yb290ID0gZ2l0X3Jvb3QoKQorICAgICAgICBuZXh0X3ZlcnNpb24gPSBhcmdzLm5leHRfdmVyc2lvbiBvciBjbWFrZV92ZXJzaW9uKHJlcG9fcm9vdCAvICdTb3VyY2UvQ01ha2VWZXJzaW9uLmNtYWtlJykKKyAgICAgICAgdmVyc2lvbl9tYXAgPSBtYWtlX3ZlcnNpb25fbWFwKGFyZ3MuYmFzZWxpbmUsIGFyZ3Muc2luY2UsIG5leHRfdmVyc2lvbikKKyAgICAgICAgdXBkYXRlX3JlcG8ocmVwb19yb290LCB2ZXJzaW9uX21hcCwgYXJncy5vdmVyd3JpdGUpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHByaW50KGYiQ29tbWFuZCAneycgJy5qb2luKGUuY21kKX0nIHJldHVybmVkIGNvZGUge2UucmV0dXJuY29kZX06XG57ZS5zdGRlcnIuc3RyaXAoKX0iKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvU2V0dXAuQ29uZmlndXJhdGlvbi5oIGIvVXRpbGl0aWVzL2NtM3AvU2V0dXAuQ29uZmlndXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Y2YwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9TZXR1cC5Db25maWd1cmF0aW9uLmgKQEAgLTAsMCArMSw4IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfU2V0dXBfQ29uZmlndXJhdGlvbl9oCisjZGVmaW5lIGNtM3BfU2V0dXBfQ29uZmlndXJhdGlvbl9oCisKKyNpbmNsdWRlIDxjbXZzc2V0dXAvU2V0dXAuQ29uZmlndXJhdGlvbi5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvYXJjaGl2ZS5oIGIvVXRpbGl0aWVzL2NtM3AvYXJjaGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NmIzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9hcmNoaXZlLmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX2FyY2hpdmVfaAorI2RlZmluZSBjbTNwX2FyY2hpdmVfaAorCisvKiBVc2UgdGhlIGxpYmFyY2hpdmUgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fTElCQVJDSElWRQorIyAgaW5jbHVkZSA8YXJjaGl2ZS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8Y21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9hcmNoaXZlX2VudHJ5LmggYi9VdGlsaXRpZXMvY20zcC9hcmNoaXZlX2VudHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwZTg3YQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL2FyY2hpdmVfZW50cnkuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfYXJjaGl2ZV9lbnRyeV9oCisjZGVmaW5lIGNtM3BfYXJjaGl2ZV9lbnRyeV9oCisKKy8qIFVzZSB0aGUgbGliYXJjaGl2ZSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCisjaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCisjaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9MSUJBUkNISVZFCisjICBpbmNsdWRlIDxhcmNoaXZlX2VudHJ5Lmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5Lmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL2J6bGliLmggYi9VdGlsaXRpZXMvY20zcC9iemxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMGY0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9iemxpYi5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9iemxpYl9oCisjZGVmaW5lIGNtM3BfYnpsaWJfaAorCisvKiBVc2UgdGhlIGJ6aXAyIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fQlpJUDIKKyMgIGluY2x1ZGUgPGJ6bGliLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbWJ6aXAyL2J6bGliLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL2N1cmwvY3VybC5oIGIvVXRpbGl0aWVzL2NtM3AvY3VybC9jdXJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyYjgyMgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL2N1cmwvY3VybC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9jdXJsX2N1cmxfaAorI2RlZmluZSBjbTNwX2N1cmxfY3VybF9oCisKKy8qIFVzZSB0aGUgY3VybCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0NVUkwKKyMgIGluY2x1ZGUgPGN1cmwvY3VybC5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8Y21jdXJsL2luY2x1ZGUvY3VybC9jdXJsLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL2V4cGF0LmggYi9VdGlsaXRpZXMvY20zcC9leHBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTZmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9leHBhdC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9leHBhdF9oCisjZGVmaW5lIGNtM3BfZXhwYXRfaAorCisvKiBVc2UgdGhlIGV4cGF0IGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fRVhQQVQKKyMgIGluY2x1ZGUgPGV4cGF0Lmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbWV4cGF0L2xpYi9leHBhdC5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9qc29uL3JlYWRlci5oIGIvVXRpbGl0aWVzL2NtM3AvanNvbi9yZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGYwOWVlCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvanNvbi9yZWFkZXIuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfanNvbl9yZWFkZXJfaAorI2RlZmluZSBjbTNwX2pzb25fcmVhZGVyX2gKKworLyogVXNlIHRoZSBqc29uY3BwIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fSlNPTkNQUAorIyAgaW5jbHVkZSA8anNvbi9yZWFkZXIuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtanNvbmNwcC9pbmNsdWRlL2pzb24vcmVhZGVyLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL2pzb24vdmFsdWUuaCBiL1V0aWxpdGllcy9jbTNwL2pzb24vdmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTliZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvanNvbi92YWx1ZS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9qc29uX3ZhbHVlX2gKKyNkZWZpbmUgY20zcF9qc29uX3ZhbHVlX2gKKworLyogVXNlIHRoZSBqc29uY3BwIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fSlNPTkNQUAorIyAgaW5jbHVkZSA8anNvbi92YWx1ZS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8Y21qc29uY3BwL2luY2x1ZGUvanNvbi92YWx1ZS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9qc29uL3dyaXRlci5oIGIvVXRpbGl0aWVzL2NtM3AvanNvbi93cml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmNjM2UyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvanNvbi93cml0ZXIuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfanNvbl93cml0ZXJfaAorI2RlZmluZSBjbTNwX2pzb25fd3JpdGVyX2gKKworLyogVXNlIHRoZSBqc29uY3BwIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fSlNPTkNQUAorIyAgaW5jbHVkZSA8anNvbi93cml0ZXIuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtanNvbmNwcC9pbmNsdWRlL2pzb24vd3JpdGVyLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL2t3aW1sL2FiaS5oIGIvVXRpbGl0aWVzL2NtM3Ava3dpbWwvYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQwZGVkZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL2t3aW1sL2FiaS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9rd2ltbF9hYmlfaAorI2RlZmluZSBjbTNwX2t3aW1sX2FiaV9oCisKKy8qIFVzZSB0aGUgS1dJTUwgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCisjaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCisjaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9LV0lNTAorIyAgaW5jbHVkZSA8a3dpbWwvYWJpLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxLV0lNTC9pbmNsdWRlL2t3aW1sL2FiaS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9rd2ltbC9pbnQuaCBiL1V0aWxpdGllcy9jbTNwL2t3aW1sL2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjN2MyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9rd2ltbC9pbnQuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3Bfa3dpbWxfaW50X2gKKyNkZWZpbmUgY20zcF9rd2ltbF9pbnRfaAorCisvKiBVc2UgdGhlIEtXSU1MIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fS1dJTUwKKyMgIGluY2x1ZGUgPGt3aW1sL2ludC5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8S1dJTUwvaW5jbHVkZS9rd2ltbC9pbnQuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvbHptYS5oIGIvVXRpbGl0aWVzL2NtM3AvbHptYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZmFjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9sem1hLmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX2x6bWFfaAorI2RlZmluZSBjbTNwX2x6bWFfaAorCisvKiBVc2UgdGhlIGxpYmx6bWEgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fTElCTFpNQQorIyAgaW5jbHVkZSA8bHptYS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8Y21saWJsem1hL2xpYmx6bWEvYXBpL2x6bWEuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3Avcmhhc2guaCBiL1V0aWxpdGllcy9jbTNwL3JoYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1ZTQxMQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL3JoYXNoLmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX3JoYXNoX2gKKyNkZWZpbmUgY20zcF9yaGFzaF9oCisKKy8qIFVzZSB0aGUgTGliUkhhc2ggbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCisjaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCisjaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9MSUJSSEFTSAorIyAgaW5jbHVkZSA8cmhhc2guaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvdXYuaCBiL1V0aWxpdGllcy9jbTNwL3V2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3YTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL3V2LmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX3V2X2gKKyNkZWZpbmUgY20zcF91dl9oCisKKy8qIFVzZSB0aGUgbGlidXYgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCisjaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCisjaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9MSUJVVgorIyAgaW5jbHVkZSA8dXYuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtbGlidXYvaW5jbHVkZS91di5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC96bGliLmggYi9VdGlsaXRpZXMvY20zcC96bGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3YmFlZQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL3psaWIuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfemxpYl9oCisjZGVmaW5lIGNtM3BfemxpYl9oCisKKy8qIFVzZSB0aGUgemxpYiBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX1pMSUIKKyMgIGluY2x1ZGUgPHpsaWIuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtemxpYi96bGliLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL3pzdGQuaCBiL1V0aWxpdGllcy9jbTNwL3pzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2NjM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvenN0ZC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF96c3RkX2gKKyNkZWZpbmUgY20zcF96c3RkX2gKKworLyogVXNlIHRoZSBsaWJ6c3RkIGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX1pTVEQKKyMgIGluY2x1ZGUgPHpzdGQuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtenN0ZC9saWIvenN0ZC5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21UaGlyZFBhcnR5Q2hlY2tzLmNtYWtlIGIvVXRpbGl0aWVzL2NtVGhpcmRQYXJ0eUNoZWNrcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2NmZGZjCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtVGhpcmRQYXJ0eUNoZWNrcy5jbWFrZQpAQCAtMCwwICsxLDI5NiBAQAorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCisjIEhhcmQtY29kZSB0aGlyZC1wYXJ0eSB0cnlfY29tcGlsZSBjaGVja3Mgd2hlcmUgd2Uga25vdyB0aGUgYW5zd2VyLgorCisjIFJlc3VsdHMgZm9yIGJ1aWxkcyB0YXJnZXRpbmcgYWxsIHN1cHBvcnRlZCBwbGF0Zm9ybXMuCitzZXQoSEFWRV9BU1NFUlRfSCAxKQorc2V0KEhBVkVfX0NydFNldFJlcG9ydE1vZGUgMCkgIyB1bnVzZWQgYW55d2F5CitzZXQoSEFWRV9DVFlQRV9IIDEpCitzZXQoSEFWRV9MT0NBTEVfSCAxKQorc2V0KEhBVkVfTUVNTU9WRSAxKQorc2V0KEhBVkVfU0VUTE9DQUxFIDEpCitzZXQoSEFWRV9TVERERUZfSCAxKQorc2V0KEhBVkVfU1RESU9fSCAxKQorc2V0KEhBVkVfU1RETElCX0ggMSkKK3NldChIQVZFX1NUUkNIUiAxKQorc2V0KEhBVkVfU1RSRFVQIDEpCitzZXQoSEFWRV9TVFJGVElNRSAxKQorc2V0KEhBVkVfU1RSSU5HX0ggMSkKK3NldChIQVZFX1NUUlJDSFIgMSkKK3NldChIQVZFX1dDSEFSX0ggMSkKKworIyBVc2VkIGJ5IFRFU1RfQklHX0VORElBTi4KK3NldChDTUFLRV9TSVpFT0ZfVU5TSUdORURfU0hPUlQgMikKK3NldChIQVZFX0NNQUtFX1NJWkVPRl9VTlNJR05FRF9TSE9SVCAxKQorCitpZihXSU4zMikKKyAgIyBSZXN1bHRzIGZvciBidWlsZHMgdGFyZ2V0aW5nIFdpbmRvd3MgcGxhdGZvcm1zLgorICAjIFRoaXMgY292ZXJzIGJvdGggTVNWQy1BQkkgYW5kIEdOVS1BQkkgdG9vbGNoYWlucy4KKworICBzZXQoSEFWRV9BTEFSTSAwKQorICBzZXQoSEFWRV9BUkM0UkFORE9NIDApCisgIHNldChIQVZFX0FSQzRSQU5ET01fQlVGIDApCisgIHNldChIQVZFX0FSUEFfVEZUUF9IIDApCisgIHNldChIQVZFX0JTV0FQXzE2IDApCisgIHNldChIQVZFX0JTV0FQXzMyIDApCisgIHNldChIQVZFX0JTV0FQXzY0IDApCisgIHNldChIQVZFX0JVSUxUSU5fQVZBSUxBQkxFIDApCisgIHNldChIQVZFX0JZVEVTV0FQX0ggMCkKKyAgc2V0KEhBVkVfQ0hGTEFHUyAwKQorICBzZXQoSEFWRV9DSE9XTiAwKQorICBzZXQoSEFWRV9DSFJPT1QgMCkKKyAgc2V0KEhBVkVfQ09QWUZJTEVfSCAwKQorICBzZXQoSEFWRV9DUllQVE9fSCAwKQorICBzZXQoSEFWRV9fQ1RJTUU2NF9TIDEpCisgIHNldChIQVZFX0NUSU1FX1IgMCkKKyAgc2V0KEhBVkVfQ1lHV0lOX0NPTlZfUEFUSCAwKQorICBzZXQoSEFWRV9ERVNfSCAwKQorICBzZXQoSEFWRV9ESVJFQ1RfSCAxKQorICBzZXQoSEFWRV9ESVJGRCAwKQorICBzZXQoSEFWRV9ETEZDTl9IIDApCisgIHNldChIQVZFX0RfTURfT1JERVIgMCkKKyAgc2V0KEhBVkVfRUZUWVBFIDApCisgIHNldChIQVZFX0VJTFNFUSAxKQorICBzZXQoSEFWRV9FUlJfSCAwKQorICBzZXQoSEFWRV9FUlJOT19IIDEpCisgIHNldChIQVZFX0VYVDJGU19FWFQyX0ZTX0ggMCkKKyAgc2V0KEhBVkVfRkNIRElSIDApCisgIHNldChIQVZFX0ZDSEZMQUdTIDApCisgIHNldChIQVZFX0ZDSE1PRCAwKQorICBzZXQoSEFWRV9GQ0hPV04gMCkKKyAgc2V0KEhBVkVfRkNOVEwgMCkKKyAgc2V0KEhBVkVfRkNOVExfSCAxKQorICBzZXQoSEFWRV9GQ05UTF9PX05PTkJMT0NLIDApCisgIHNldChIQVZFX0ZET1BFTkRJUiAwKQorICBzZXQoSEFWRV9GT1JLIDApCisgIHNldChIQVZFX0ZSRUVBRERSSU5GTyAxKQorICBzZXQoSEFWRV9GUkVFSUZBRERSUyAwKQorICBzZXQoSEFWRV9fRlNFRUtJNjQgMSkKKyAgc2V0KEhBVkVfRlNFVFhBVFRSIDApCisgIHNldChIQVZFX0ZTVEFUIDEpCisgIHNldChIQVZFX0ZTVEFUQVQgMCkKKyAgc2V0KEhBVkVfRlNUQVRGUyAwKQorICBzZXQoSEFWRV9GU1RBVFZGUyAwKQorICBzZXQoSEFWRV9GVFJVTkNBVEUgMCkKKyAgc2V0KEhBVkVfRlVUSU1FTlMgMCkKKyAgc2V0KEhBVkVfRlVUSU1FUyAwKQorICBzZXQoSEFWRV9GVVRJTUVTQVQgMCkKKyAgc2V0KEhBVkVfR0VURVVJRCAwKQorICBzZXQoSEFWRV9HRVRHUkdJRF9SIDApCisgIHNldChIQVZFX0dFVEdSTkFNX1IgMCkKKyAgc2V0KEhBVkVfR0VUSE9TVEJZTkFNRSAxKQorICBzZXQoSEFWRV9HRVRQQUdFU0laRSAwKQorICBzZXQoSEFWRV9HRVRQRUVSTkFNRSAxKQorICBzZXQoSEFWRV9HRVRQSUQgMSkKKyAgc2V0KEhBVkVfR0VUUFJPVE9CWU5BTUUgMSkKKyAgc2V0KEhBVkVfR0VUUFdOQU1fUiAwKQorICBzZXQoSEFWRV9HRVRQV1VJRF9SIDApCisgIHNldChIQVZFX0dFVFJBTkRPTSAwKQorICBzZXQoSEFWRV9HRVRSTElNSVQgMCkKKyAgc2V0KEhBVkVfR0VUU09DS05BTUUgMSkKKyAgc2V0KEhBVkVfR0VUVkZTQllOQU1FIDApCisgIHNldChIQVZFX0dMSUJDX1NUUkVSUk9SX1IgMCkKKyAgc2V0KEhBVkVfX0dNVElNRTY0X1MgMSkKKyAgc2V0KEhBVkVfR01USU1FX1IgMCkKKyAgc2V0KEhBVkVfR1JQX0ggMCkKKyAgc2V0KEhBVkVfSUROMl9IIDApCisgIHNldChIQVZFX0lGQUREUlNfSCAwKQorICBzZXQoSEFWRV9JRl9OQU1FVE9JTkRFWCAwKQorICBzZXQoSEFWRV9JTlRUWVBFU19IIDEpCisgIHNldChIQVZFX0lPQ1RMIDApCisgIHNldChIQVZFX0lPQ1RMX0ZJT05CSU8gMCkKKyAgc2V0KEhBVkVfSU9DVExfU0lPQ0dJRkFERFIgMCkKKyAgc2V0KEhBVkVfSU9DVExTT0NLRVQgMSkKKyAgc2V0KEhBVkVfSU9DVExTT0NLRVRfQ0FNRUwgMCkKKyAgc2V0KEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTyAxKQorICBzZXQoSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPIDEpCisgIHNldChIQVZFX0lPX0ggMSkKKyAgc2V0KEhBVkVfS1JCX0ggMCkKKyAgc2V0KEhBVkVfTEFOR0lORk9fSCAwKQorICBzZXQoSEFWRV9MQ0hGTEFHUyAwKQorICBzZXQoSEFWRV9MQ0hNT0QgMCkKKyAgc2V0KEhBVkVfTENIT1dOIDApCisgIHNldChIQVZFX0xJQklETjIgMCkKKyAgc2V0KEhBVkVfTElCTkVUV09SSyAwKQorICBzZXQoSEFWRV9MSUJXSU5NTSAxKQorICBzZXQoSEFWRV9MSUJXUzJfMzIgMSkKKyAgc2V0KEhBVkVfTElNSVRTX0ggMSkKKyAgc2V0KEhBVkVfTElOSyAwKQorICBzZXQoSEFWRV9MSU5VWF9GSUVNQVBfSCAwKQorICBzZXQoSEFWRV9MSU5VWF9GU19IIDApCisgIHNldChIQVZFX0xJTlVYX01BR0lDX0ggMCkKKyAgc2V0KEhBVkVfTElOVVhfVFlQRVNfSCAwKQorICBzZXQoSEFWRV9fTE9DQUxUSU1FNjRfUyAxKQorICBzZXQoSEFWRV9MT0NBTFRJTUVfUiAwKQorICBzZXQoSEFWRV9MU1RBVCAwKQorICBzZXQoSEFWRV9MVVRJTUVTIDApCisgIHNldChIQVZFX01BQ0hfQUJTT0xVVEVfVElNRSAwKQorICBzZXQoSEFWRV9NQlJUT1dDIDEpCisgIHNldChIQVZFX01FTUJFUlNISVBfSCAwKQorICBzZXQoSEFWRV9NRU1PUllfSCAxKQorICBzZXQoSEFWRV9NS0RJUiAxKQorICBzZXQoSEFWRV9NS0ZJRk8gMCkKKyAgc2V0KEhBVkVfX01LR01USU1FNjQgMSkKKyAgc2V0KEhBVkVfTUtOT0QgMCkKKyAgc2V0KEhBVkVfTU1BUCAwKQorICBzZXQoSEFWRV9NU0dfTk9TSUdOQUwgMCkKKyAgc2V0KEhBVkVfTkVUSU5FVF9UQ1BfSCAwKQorICBzZXQoSEFWRV9OTF9MQU5HSU5GTyAwKQorICBzZXQoSEFWRV9PUEVOQVQgMCkKKyAgc2V0KEhBVkVfUEFUSFNfSCAwKQorICBzZXQoSEFWRV9QRU1fSCAwKQorICBzZXQoSEFWRV9QSVBFIDApCisgIHNldChIQVZFX1BPTEwgMCkKKyAgc2V0KEhBVkVfUE9MTF9GSU5FIDApCisgIHNldChIQVZFX1BPTExfSCAwKQorICBzZXQoSEFWRV9QT1NJWF9TUEFXTlAgMCkKKyAgc2V0KEhBVkVfUE9TSVhfU1RSRVJST1JfUiAwKQorICBzZXQoSEFWRV9QUk9DRVNTX0ggMSkKKyAgc2V0KEhBVkVfUFdEX0ggMCkKKyAgc2V0KEhBVkVfUkVBRERJUl9SIDApCisgIHNldChIQVZFX1JFQURMSU5LIDApCisgIHNldChIQVZFX1JFQURMSU5LQVQgMCkKKyAgc2V0KEhBVkVfUkVBRFBBU1NQSFJBU0UgMCkKKyAgc2V0KEhBVkVfUkVBRFBBU1NQSFJBU0VfSCAwKQorICBzZXQoSEFWRV9SRUdFWF9IIDApCisgIHNldChIQVZFX1JTQV9IIDApCisgIHNldChIQVZFX1NFTEVDVCAwKQorICBzZXQoSEFWRV9TRVRFTlYgMCkKKyAgc2V0KEhBVkVfU0VUTU9ERSAxKQorICBzZXQoSEFWRV9TRVRSTElNSVQgMCkKKyAgc2V0KEhBVkVfU0VUU09DS09QVCAxKQorICBzZXQoSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLIDApCisgIHNldChIQVZFX1NJR0FDVElPTiAwKQorICBzZXQoSEFWRV9TSUdfQVRPTUlDX1RfTk9UX1ZPTEFUSUxFIDEpCisgIHNldChIQVZFX1NJR0lOVEVSUlVQVCAwKQorICBzZXQoSEFWRV9TSUdOQUxfSCAxKQorICBzZXQoSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAwKQorICBzZXQoSEFWRV9TUEFXTl9IIDApCisgIHNldChIQVZFX1NTTF9IIDApCisgIHNldChIQVZFX1NUQVRGUyAwKQorICBzZXQoSEFWRV9TVEFUVkZTIDApCisgIHNldChIQVZFX1NUREFSR19IIDEpCisgIHNldChIQVZFX1NUREJPT0xfSCAxKQorICBzZXQoSEFWRV9TVERJTlRfSCAxKQorICBzZXQoSEFWRV9TVFJFUlJPUiAxKQorICBzZXQoSEFWRV9TVFJFUlJPUl9SIDApCisgIHNldChIQVZFX1NUUk5DTVBJIDApCisgIHNldChIQVZFX1NUUk5DUFlfUyAxKQorICBzZXQoSEFWRV9TVFJPUFRTX0ggMCkKKyAgc2V0KEhBVkVfX1NUUlRPSTY0IDEpCisgIHNldChIQVZFX1NUUlRPTEwgMSkKKyAgc2V0KEhBVkVfU1RSVUNUX1NUQVRGU19GX05BTUVNQVggMCkKKyAgc2V0KEhBVkVfU1RSVUNUX1NUQVRfU1RfQklSVEhUSU1FIDApCisgIHNldChIQVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElNRVNQRUNfVFZfTlNFQyAwKQorICBzZXQoSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFIDApCisgIHNldChIQVZFX1NUUlVDVF9TVEFUX1NUX0ZMQUdTIDApCisgIHNldChIQVZFX1NUUlVDVF9TVEFUX1NUX01USU1FX04gMCkKKyAgc2V0KEhBVkVfU1RSVUNUX1NUQVRfU1RfTVRJTUVTUEVDX1RWX05TRUMgMCkKKyAgc2V0KEhBVkVfU1RSVUNUX1NUQVRfU1RfTVRJTUVfVVNFQyAwKQorICBzZXQoSEFWRV9TVFJVQ1RfU1RBVF9TVF9NVElNX1RWX05TRUMgMCkKKyAgc2V0KEhBVkVfU1RSVUNUX1NUQVRfU1RfVU1USU1FIDApCisgIHNldChIQVZFX1NUUlVDVF9USU1FVkFMIDEpCisgIHNldChIQVZFX1NUUlVDVF9UTV9fX1RNX0dNVE9GRiAwKQorICBzZXQoSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGIDApCisgIHNldChIQVZFX1NUUlVDVF9WRlNDT05GIDApCisgIHNldChIQVZFX1NUUlVDVF9YVkZTQ09ORiAwKQorICBzZXQoSEFWRV9TWU1MSU5LIDApCisgIHNldChIQVZFX1NZU19BQ0xfSCAwKQorICBzZXQoSEFWRV9TWVNDQUxMX0dFVFJBTkRPTSAwKQorICBzZXQoSEFWRV9TWVNfRVhUQVRUUl9IIDApCisgIHNldChIQVZFX1NZU19GSUxJT19IIDApCisgIHNldChIQVZFX1NZU19JT0NUTF9IIDApCisgIHNldChIQVZFX1NZU19NS0RFVl9IIDApCisgIHNldChIQVZFX1NZU19NT1VOVF9IIDApCisgIHNldChIQVZFX1NZU19QT0xMX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1JFU09VUkNFX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1JJQ0hBQ0xfSCAwKQorICBzZXQoSEFWRV9TWVNfU0VMRUNUX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1NUQVRGU19IIDApCisgIHNldChIQVZFX1NZU19TVEFUX0ggMSkKKyAgc2V0KEhBVkVfU1lTX1NUQVRWRlNfSCAwKQorICBzZXQoSEFWRV9TWVNfU1lTQ1RMX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1NZU01BQ1JPU19IIDApCisgIHNldChIQVZFX1NZU19VSU9fSCAwKQorICBzZXQoSEFWRV9TWVNfVU5fSCAwKQorICBzZXQoSEFWRV9TWVNfVVRTTkFNRV9IIDApCisgIHNldChIQVZFX1NZU19WRlNfSCAwKQorICBzZXQoSEFWRV9TWVNfV0FJVF9IIDApCisgIHNldChIQVZFX1NZU19YQVRUUl9IIDApCisgIHNldChIQVZFX1RJTUVHTSAwKQorICBzZXQoSEFWRV9UWlNFVCAxKQorICBzZXQoSEFWRV9VTkxJTktBVCAwKQorICBzZXQoSEFWRV9VU0xFRVAgMCkKKyAgc2V0KEhBVkVfVVRJTUVOU0FUIDApCisgIHNldChIQVZFX1VUSU1FUyAwKQorICBzZXQoSEFWRV9WRk9SSyAwKQorICBzZXQoSEFWRV9XT1JLSU5HX0VYVDJfSU9DX0dFVEZMQUdTIDApCisgIHNldChIQVZFX1dPUktJTkdfRlNfSU9DX0dFVEZMQUdTIDApCisKKyAgIyBTb21lIFBPU0lYIGhlYWRlcnMgYXJlIGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorICBzZXQoSEFWRV9TWVNfVFlQRVNfSCAxKQorICBzZXQoSEFWRV9TWVNfVVRJTUVfSCAxKQorICBzZXQoSEFWRV9USU1FX0ggMSkKKyAgc2V0KEhBVkVfVVRJTUUgMSkKKworICAjIFdpZGUgY2hhcmFjdGVyIEFQSXMgYXJlIGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorICBzZXQoSEFWRV9XQ1JUT01CIDEpCisgIHNldChIQVZFX1dDU0NNUCAxKQorICBzZXQoSEFWRV9XQ1NDUFkgMSkKKyAgc2V0KEhBVkVfV0NTTEVOIDEpCisgIHNldChIQVZFX1dDVE9NQiAxKQorICBzZXQoSEFWRV9XQ1RZUEVfSCAxKQorCisgICMgV2luZG93cyBBUElzIGFyZSBhdmFpbGFibGUgb24gV2luZG93cy4KKyAgc2V0KEhBVkVfV0lOQ1JZUFRfSCAxKQorICBzZXQoSEFWRV9XSU5ET1dTX0ggMSkKKyAgc2V0KEhBVkVfV0lOSU9DVExfSCAxKQorICBzZXQoSEFWRV9XSU5TT0NLMl9IIDEpCisgIHNldChIQVZFX1dJTlNPQ0tfSCAxKQorICBzZXQoSEFWRV9XUzJUQ1BJUF9IIDEpCisKKyAgIyBVTklYIGludGVnZXIgaWQgdHlwZXMgZG8gbm90IGV4aXN0IG9uIFdpbmRvd3MuCisgIHNldChIQVZFX0lEX1QgMCkKKyAgc2V0KEhBVkVfR0lEX1QgMCkKKyAgc2V0KEhBVkVfVUlEX1QgMCkKKyAgc2V0KElEX1QgIiIpCisgIHNldChHSURfVCAiIikKKyAgc2V0KFVJRF9UICIiKQorCisgICMgY3VybCBhbmQgZXhwYXQ6IHN0ZGxpYi5oLCBzdGRhcmcuaCwgc3RyaW5nLmgsIGZsb2F0LmgKKyAgc2V0KFNURENfSEVBREVSUyAxKQorCisgICMgVU5JWCBkZXZpY2UgQVBJcyBkbyBub3QgZXhpc3Qgb24gV2luZG93cy4KKyAgc2V0KE1BSk9SX0lOX01LREVWIDApCisgIHNldChNQUpPUl9JTl9TWVNNQUNST1MgMCkKKworICAjIEZyZWVCU0QgbGlibWQgZG9lcyBub3QgZXhpc3Qgb24gV2luZG93cy4KKyAgc2V0KExJQk1EX0ZPVU5EIDApCisKKyAgIyBsaWJhcmNoaXZlIGxvb2tzIGZvciBleHRlcm5hbCBoYXNoIGltcGxlbWVudGF0aW9ucy4KKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJDIDApCisgIHNldChBUkNISVZFX0NSWVBUT19NRDVfTElCTUQgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJTWVNURU0gMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX01ENV9XSU4gMSkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9MSUJDIDApCisgIHNldChBUkNISVZFX0NSWVBUT19STUQxNjBfTElCTUQgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCQyAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMV9MSUJNRCAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMV9MSUJTWVNURU0gMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTFfV0lOIDEpCisgIHNldChBUkNISVZFX0NSWVBUT19TSEEyNTZfTElCQyAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQkMyIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEEyNTZfTElCQzMgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9MSUJNRCAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQlNZU1RFTSAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMzg0X0xJQkMgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJDMiAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMzg0X0xJQkMzIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEEzODRfTElCU1lTVEVNIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEE1MTJfTElCQyAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQkMyIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEE1MTJfTElCQzMgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJNRCAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQlNZU1RFTSAwKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX2J6bGliLmggYi9VdGlsaXRpZXMvY21fYnpsaWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2OWU5ZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fYnpsaWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fYnpsaWJfaAotI2RlZmluZSBjbV9iemxpYl9oCi0KLS8qIFVzZSB0aGUgYnppcDIgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9CWklQMgotIyAgaW5jbHVkZSA8YnpsaWIuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWJ6aXAyL2J6bGliLmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21fY3VybC5oIGIvVXRpbGl0aWVzL2NtX2N1cmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjczZjhhZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fY3VybC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBjbV9jdXJsX2gKLSNkZWZpbmUgY21fY3VybF9oCi0KLS8qIFVzZSB0aGUgY3VybCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0NVUkwKLSMgIGluY2x1ZGUgPGN1cmwvY3VybC5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtY3VybC9pbmNsdWRlL2N1cmwvY3VybC5oPgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX2V4cGF0LmggYi9VdGlsaXRpZXMvY21fZXhwYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1YjM5YS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fZXhwYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fZXhwYXRfaAotI2RlZmluZSBjbV9leHBhdF9oCi0KLS8qIFVzZSB0aGUgZXhwYXQgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9FWFBBVAotIyAgaW5jbHVkZSA8ZXhwYXQuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWV4cGF0L2xpYi9leHBhdC5oPgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX2pzb25jcHBfcmVhZGVyLmggYi9VdGlsaXRpZXMvY21fanNvbmNwcF9yZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhZjY1Yy4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fanNvbmNwcF9yZWFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fanNvbmNwcF9yZWFkZXJfaAotI2RlZmluZSBjbV9qc29uY3BwX3JlYWRlcl9oCi0KLS8qIFVzZSB0aGUganNvbmNwcCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0pTT05DUFAKLSMgIGluY2x1ZGUgPGpzb24vcmVhZGVyLmg+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Y21qc29uY3BwL2luY2x1ZGUvanNvbi9yZWFkZXIuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9qc29uY3BwX3ZhbHVlLmggYi9VdGlsaXRpZXMvY21fanNvbmNwcF92YWx1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDJkOTlhLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV9qc29uY3BwX3ZhbHVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX2pzb25jcHBfdmFsdWVfaAotI2RlZmluZSBjbV9qc29uY3BwX3ZhbHVlX2gKLQotLyogVXNlIHRoZSBqc29uY3BwIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLwotI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgotI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fSlNPTkNQUAotIyAgaW5jbHVkZSA8anNvbi92YWx1ZS5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtanNvbmNwcC9pbmNsdWRlL2pzb24vdmFsdWUuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9qc29uY3BwX3dyaXRlci5oIGIvVXRpbGl0aWVzL2NtX2pzb25jcHBfd3JpdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZTVkODIuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX2pzb25jcHBfd3JpdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX2pzb25jcHBfd3JpdGVyX2gKLSNkZWZpbmUgY21fanNvbmNwcF93cml0ZXJfaAotCi0vKiBVc2UgdGhlIGpzb25jcHAgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9KU09OQ1BQCi0jICBpbmNsdWRlIDxqc29uL3dyaXRlci5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtanNvbmNwcC9pbmNsdWRlL2pzb24vd3JpdGVyLmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21fa3dpbWwuaCBiL1V0aWxpdGllcy9jbV9rd2ltbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjZmNjdlLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV9rd2ltbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBjbV9rd2ltbF9oCi0jZGVmaW5lIGNtX2t3aW1sX2gKLQotLyogVXNlIHRoZSBLV0lNTCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0tXSU1MCi0jICBpbmNsdWRlIDxrd2ltbC9hYmkuaD4KLSMgIGluY2x1ZGUgPGt3aW1sL2ludC5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgIktXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmgiCi0jICBpbmNsdWRlICJLV0lNTC9pbmNsdWRlL2t3aW1sL2ludC5oIgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX2xpYmFyY2hpdmUuaCBiL1V0aWxpdGllcy9jbV9saWJhcmNoaXZlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOGU5ZGIuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX2xpYmFyY2hpdmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fbGliYXJjaGl2ZV9oCi0jZGVmaW5lIGNtX2xpYmFyY2hpdmVfaAotCi0vKiBVc2UgdGhlIGxpYmFyY2hpdmUgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLwotI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgotI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fTElCQVJDSElWRQotIyAgaW5jbHVkZSA8YXJjaGl2ZS5oPgotIyAgaW5jbHVkZSA8YXJjaGl2ZV9lbnRyeS5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmUuaD4KLSMgIGluY2x1ZGUgPGNtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9sem1hLmggYi9VdGlsaXRpZXMvY21fbHptYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTI2MDM2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV9sem1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX2x6bWFfaAotI2RlZmluZSBjbV9sem1hX2gKLQotLyogVXNlIHRoZSBsaWJsem1hIGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0xJQkxaTUEKLSMgIGluY2x1ZGUgPGx6bWEuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWxpYmx6bWEvbGlibHptYS9hcGkvbHptYS5oPgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX3JoYXNoLmggYi9VdGlsaXRpZXMvY21fcmhhc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkOTg3MS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fcmhhc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fcmhhc2hfaAotI2RlZmluZSBjbV9yaGFzaF9oCi0KLS8qIFVzZSB0aGUgTGliUkhhc2ggbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9MSUJSSEFTSAotIyAgaW5jbHVkZSA8cmhhc2guaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21fdXYuaCBiL1V0aWxpdGllcy9jbV91di5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDhmMzBkLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV91di5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBjbV91dl9oCi0jZGVmaW5lIGNtX3V2X2gKLQotLyogVXNlIHRoZSBsaWJ1diBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0xJQlVWCi0jICBpbmNsdWRlIDx1di5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtbGlidXYvaW5jbHVkZS91di5oPgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX3psaWIuaCBiL1V0aWxpdGllcy9jbV96bGliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMTQxODMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX3psaWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21femxpYl9oCi0jZGVmaW5lIGNtX3psaWJfaAotCi0vKiBVc2UgdGhlIHpsaWIgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9aTElCCi0jICBpbmNsdWRlIDx6bGliLmg+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Y216bGliL3psaWIuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV96c3RkLmggYi9VdGlsaXRpZXMvY21fenN0ZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmRhOTk2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV96c3RkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX3pzdGRfaAotI2RlZmluZSBjbV96c3RkX2gKLQotLyogVXNlIHRoZSBsaWJ6c3RkIGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX1pTVEQKLSMgIGluY2x1ZGUgPHpzdGQuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbXpzdGQvbGliL3pzdGQuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyLy5naXRhdHRyaWJ1dGVzIGIvVXRpbGl0aWVzL2NtYnppcDIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjEyZQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL0NIQU5HRVMgYi9VdGlsaXRpZXMvY21iemlwMi9DSEFOR0VTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTRmNjVlLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL0NIQU5HRVMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCi0gbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KLQotIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+Ci0KLSBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCi0gUkVBRE1FIGZpbGUuCi0KLSBUaGlzIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5lZAotIGluIHRoZSBmaWxlIExJQ0VOU0UuCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotMC45LjAKLX5+fn5+Ci1GaXJzdCB2ZXJzaW9uLgotCi0KLTAuOS4wYQotfn5+fn5+Ci1SZW1vdmVkICdyYW5saWInIGZyb20gTWFrZWZpbGUsIHNpbmNlIG1vc3QgbW9kZXJuIFVuaXgtZXMgCi1kb24ndCBuZWVkIGl0LCBvciBldmVuIGtub3cgYWJvdXQgaXQuCi0KLQotMC45LjBiCi1+fn5+fn4KLUZpeGVkIGEgcHJvYmxlbSB3aXRoIGVycm9yIHJlcG9ydGluZyBpbiBiemlwMi5jLiAgVGhpcyBkb2VzIG5vdCBlZmZlY3QKLXRoZSBsaWJyYXJ5IGluIGFueSB3YXkuICBQcm9ibGVtIGlzOiB2ZXJzaW9ucyAwLjkuMCBhbmQgMC45LjBhIChvZiB0aGUKLXByb2dyYW0gcHJvcGVyKSBjb21wcmVzcyBhbmQgZGVjb21wcmVzcyBjb3JyZWN0bHksIGJ1dCBnaXZlIG1pc2xlYWRpbmcKLWVycm9yIG1lc3NhZ2VzIChpbnRlcm5hbCBwYW5pY3MpIHdoZW4gYW4gSS9PIGVycm9yIG9jY3VycywgaW5zdGVhZCBvZgotcmVwb3J0aW5nIHRoZSBwcm9ibGVtIGNvcnJlY3RseS4gIFRoaXMgc2hvdWxkbid0IGdpdmUgYW55IGRhdGEgbG9zcwotKGFzIGZhciBhcyBJIGNhbiBzZWUpLCBidXQgaXMgY29uZnVzaW5nLgotCi1NYWRlIHRoZSBpbmxpbmUgZGVjbGFyYXRpb25zIGRpc2FwcGVhciBmb3Igbm9uLUdDQyBjb21waWxlcnMuCi0KLQotMC45LjBjCi1+fn5+fn4KLUZpeGVkIHNvbWUgcHJvYmxlbXMgaW4gdGhlIGxpYnJhcnkgcGVydGFpbmluZyB0byBzb21lIGJvdW5kYXJ5IGNhc2VzLgotVGhpcyBtYWtlcyB0aGUgbGlicmFyeSBiZWhhdmUgbW9yZSBjb3JyZWN0bHkgaW4gdGhvc2Ugc2l0dWF0aW9ucy4gIFRoZQotZml4ZXMgYXBwbHkgb25seSB0byBmZWF0dXJlcyAoY2FsbHMgYW5kIHBhcmFtZXRlcnMpIG5vdCB1c2VkIGJ5Ci1iemlwMi5jLCBzbyB0aGUgbm9uLWZpeGVkbmVzcyBvZiB0aGVtIGluIHByZXZpb3VzIHZlcnNpb25zIGhhcyBubwotZWZmZWN0IG9uIHJlbGlhYmlsaXR5IG9mIGJ6aXAyLmMuCi0KLUluIGJ6bGliLmM6Ci0gICAqIG1hZGUgemVyby1sZW5ndGggQlpfRkxVU0ggd29yayBjb3JyZWN0bHkgaW4gYnpDb21wcmVzcygpLgotICAgKiBmaXhlZCBieldyaXRlL2J6UmVhZCB0byBpZ25vcmUgemVyby1sZW5ndGggcmVxdWVzdHMuCi0gICAqIGZpeGVkIGJ6cmVhZCB0byBjb3JyZWN0bHkgaGFuZGxlIHJlYWQgcmVxdWVzdHMgYWZ0ZXIgRU9GLgotICAgKiB3cm9uZyBwYXJhbWV0ZXIgb3JkZXIgaW4gY2FsbCB0byBiekRlY29tcHJlc3NJbml0IGluCi0gICAgIGJ6QnVmZlRvQnVmZkRlY29tcHJlc3MuICBGaXhlZC4KLQotSW4gY29tcHJlc3MuYzoKLSAgICogY2hhbmdlZCBzZXR0aW5nIG9mIG5Hcm91cHMgaW4gc2VuZE1URlZhbHVlcygpIHNvIGFzIHRvIAotICAgICBkbyBhIGJpdCBiZXR0ZXIgb24gc21hbGwgZmlsZXMuICBUaGlzIF9kb2VzXyBlZmZlY3QKLSAgICAgYnppcDIuYy4KLQotCi0wLjkuNWEKLX5+fn5+fgotTWFqb3IgY2hhbmdlOiBhZGQgYSBmYWxsYmFjayBzb3J0aW5nIGFsZ29yaXRobSAoYmxvY2tzb3J0LmMpCi10byBnaXZlIHJlYXNvbmFibGUgYmVoYXZpb3VyIGV2ZW4gZm9yIHZlcnkgcmVwZXRpdGl2ZSBpbnB1dHMuCi1OdWtlZCAtLXJlcGV0aXRpdmUtYmVzdCBhbmQgLS1yZXBldGl0aXZlLWZhc3Qgc2luY2UgdGhleSBhcmUKLW5vIGxvbmdlciB1c2VmdWwuCi0KLU1pbm9yIGNoYW5nZXM6IG1vc3RseSBhIHdob2xlIGJ1bmNoIG9mIHNtYWxsIGNoYW5nZXMvCi1idWdmaXhlcyBpbiB0aGUgZHJpdmVyIChiemlwMi5jKS4gIENoYW5nZXMgcGVydGFpbmluZyB0byB0aGUKLXVzZXIgaW50ZXJmYWNlIGFyZToKLQotICAgYWxsb3cgZGVjb21wcmVzc2lvbiBvZiBzeW1saW5rJ2QgZmlsZXMgdG8gc3Rkb3V0Ci0gICBkZWNvbXByZXNzL3Rlc3QgZmlsZXMgZXZlbiB3aXRob3V0IC5iejIgZXh0ZW5zaW9uCi0gICBnaXZlIG1vcmUgYWNjdXJhdGUgZXJyb3IgbWVzc2FnZXMgZm9yIEkvTyBlcnJvcnMKLSAgIHdoZW4gY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZyB0byBzdGRvdXQsIGRvbid0IGNhdGNoIGNvbnRyb2wtQwotICAgcmVhZCBmbGFncyBmcm9tIEJaSVAyIGFuZCBCWklQIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgZGVjbGluZSB0byBicmVhayBoYXJkIGxpbmtzIHRvIGEgZmlsZSB1bmxlc3MgZm9yY2VkIHdpdGggLWYKLSAgIGFsbG93IC1jIGZsYWcgZXZlbiB3aXRoIG5vIGZpbGVuYW1lcwotICAgcHJlc2VydmUgZmlsZSBvd25lcnNoaXBzIGFzIGZhciBhcyBwb3NzaWJsZQotICAgbWFrZSAtcyAtMSBnaXZlIHRoZSBleHBlY3RlZCBibG9jayBzaXplICgxMDBrKQotICAgYWRkIGEgZmxhZyAtcSAtLXF1aWV0IHRvIHN1cHByZXNzIG5vbmVzc2VudGlhbCB3YXJuaW5ncwotICAgc3RvcCBkZWNvZGluZyBmbGFncyBhZnRlciAtLSwgc28gZmlsZXMgYmVnaW5uaW5nIGluIC0gY2FuIGJlIGhhbmRsZWQKLSAgIHJlc29sdmVkIGluY29uc2lzdGVudCBuYW1pbmc6IGJ6Y2F0IG9yIGJ6MmNhdCA/Ci0gICBiemlwMiAtLWhlbHAgbm93IHJldHVybnMgMAotCi1Qcm9ncmFtbWluZy1sZXZlbCBjaGFuZ2VzIGFyZToKLQotICAgZml4ZWQgc3ludGF4IGVycm9yIGluIEdFVF9MTDQgZm9yIEJvcmxhbmQgQysrIDUuMDIKLSAgIGxldCBiekJ1ZmZUb0J1ZmZEZWNvbXByZXNzIHJldHVybiBCWl9EQVRBX0VSUk9Se19NQUdJQ30KLSAgIGZpeCBvdmVyc2hvb3Qgb2YgbW9kZS1zdHJpbmcgZW5kIGluIGJ6b3Blbl9vcl9iemRvcGVuCi0gICB3cmFwcGVkIGJ6bGliLmggaW4gI2lmZGVmIF9fY3BsdXNwbHVzIC4uLiBleHRlcm4gIkMiIHsgLi4uIH0KLSAgIGNsb3NlIGZpbGUgaGFuZGxlcyB1bmRlciBhbGwgZXJyb3IgY29uZGl0aW9ucwotICAgYWRkZWQgbWlub3IgbW9kcyBzbyBpdCBjb21waWxlcyB3aXRoIERKR1BQIG91dCBvZiB0aGUgYm94Ci0gICBmaXhlZCBNYWtlZmlsZSBzbyBpdCBkb2Vzbid0IGdpdmUgcHJvYmxlbXMgd2l0aCBCU0QgbWFrZQotICAgZml4IHVuaW5pdGlhbGlzZWQgbWVtb3J5IHJlYWRzIGluIGRsbHRlc3QuYwotCi0wLjkuNWIKLX5+fn5+fgotT3BlbiBzdGRpbi9zdGRvdXQgaW4gYmluYXJ5IG1vZGUgZm9yIERKR1BQLgotCi0wLjkuNWMKLX5+fn5+fgotQ2hhbmdlZCBCWl9OX09WRVJTSE9PVCB0byBiZSAuLi4gKyAyIGluc3RlYWQgb2YgLi4uICsgMS4gIFRoZSArIDEKLXZlcnNpb24gY291bGQgY2F1c2UgdGhlIHNvcnRlZCBvcmRlciB0byBiZSB3cm9uZyBpbiBzb21lIGV4dHJlbWVseQotb2JzY3VyZSBjYXNlcy4gIEFsc28gY2hhbmdlZCBzZXR0aW5nIG9mIHF1YWRyYW50IGluIGJsb2Nrc29ydC5jLgotCi0wLjkuNWQKLX5+fn5+fgotVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgdG8gbWFrZSBiemxpYlZlcnNpb24oKSBpbiB0aGUgbGlicmFyeQotcmV0dXJuIHRoZSBjb3JyZWN0IHN0cmluZy4gIFRoaXMgaGFzIG5vIGVmZmVjdCB3aGF0c29ldmVyIG9uIHRoZQotZnVuY3Rpb25pbmcgb2YgdGhlIGJ6aXAyIHByb2dyYW0gb3IgbGlicmFyeS4gIEFkZGVkIGEgY291cGxlIG9mIGNhc3RzCi1zbyB0aGUgbGlicmFyeSBjb21waWxlcyB3aXRob3V0IHdhcm5pbmdzIGF0IGxldmVsIDMgaW4gTVMgVmlzdWFsCi1TdHVkaW8gNi4wLiAgSW5jbHVkZWQgYSBZMksgc3RhdGVtZW50IGluIHRoZSBmaWxlIFkyS19JTkZPLiAgQWxsIG90aGVyCi1jaGFuZ2VzIGFyZSBtaW5vciBkb2N1bWVudGF0aW9uIGNoYW5nZXMuCi0KLTEuMAotfn5+Ci1TZXZlcmFsIG1pbm9yIGJ1Z2ZpeGVzIGFuZCBlbmhhbmNlbWVudHM6Ci0KLSogTGFyZ2UgZmlsZSBzdXBwb3J0LiAgVGhlIGxpYnJhcnkgdXNlcyA2NC1iaXQgY291bnRlcnMgdG8KLSAgY291bnQgdGhlIHZvbHVtZSBvZiBkYXRhIHBhc3NpbmcgdGhyb3VnaCBpdC4gIGJ6aXAyLmMgCi0gIGlzIG5vdyBjb21waWxlZCB3aXRoIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgdG8gZ2V0IGxhcmdlCi0gIGZpbGUgc3VwcG9ydCBmcm9tIHRoZSBDIGxpYnJhcnkuICAtdiBjb3JyZWN0bHkgcHJpbnRzIG91dAotICBmaWxlIHNpemVzIGdyZWF0ZXIgdGhhbiA0IGdpZ2FieXRlcy4gIEFsbCB0aGVzZSBjaGFuZ2VzIGhhdmUKLSAgYmVlbiBtYWRlIHdpdGhvdXQgYXNzdW1pbmcgYSA2NC1iaXQgcGxhdGZvcm0gb3IgYSBDIGNvbXBpbGVyCi0gIHdoaWNoIHN1cHBvcnRzIDY0LWJpdCBpbnRzLCBzbywgZXhjZXB0IGZvciB0aGUgQyBsaWJyYXJ5Ci0gIGFzcGVjdCwgdGhleSBhcmUgZnVsbHkgcG9ydGFibGUuCi0KLSogRGVjb21wcmVzc2lvbiByb2J1c3RuZXNzLiAgVGhlIGxpYnJhcnkvcHJvZ3JhbSBzaG91bGQgYmUKLSAgcm9idXN0IHRvIGFueSBjb3JydXB0aW9uIG9mIGNvbXByZXNzZWQgZGF0YSwgZGV0ZWN0aW5nIGFuZAotICBoYW5kbGluZyBfYWxsXyBjb3JydXB0aW9uLCBpbnN0ZWFkIG9mIG1lcmVseSByZWx5aW5nIG9uCi0gIHRoZSBDUkNzLiAgV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgdGhlIHByb2dyYW0gc2hvdWxkIAotICBuZXZlciBjcmFzaCwgZ2l2ZW4gY29ycnVwdGVkIGRhdGEsIGFuZCB0aGUgbGlicmFyeSBzaG91bGQKLSAgYWx3YXlzIHJldHVybiBCWl9EQVRBX0VSUk9SLgotCi0qIEZpeGVkIGFuIG9ic2N1cmUgcmFjZS1jb25kaXRpb24gYnVnIG9ubHkgZXZlciBvYnNlcnZlZCBvbgotICBTb2xhcmlzLCBpbiB3aGljaCwgaWYgeW91IHdlcmUgdmVyeSB1bmx1Y2t5IGFuZCBpc3N1ZWQKLSAgY29udHJvbC1DIGF0IGV4YWN0bHkgdGhlIHdyb25nIHRpbWUsIGJvdGggaW5wdXQgYW5kIG91dHB1dAotICBmaWxlcyB3b3VsZCBiZSBkZWxldGVkLgotCi0qIERvbid0IHJ1biBvdXQgb2YgZmlsZSBoYW5kbGVzIG9uIHRlc3QvZGVjb21wcmVzc2lvbiB3aGVuCi0gIGxhcmdlIG51bWJlcnMgb2YgZmlsZXMgaGF2ZSBpbnZhbGlkIG1hZ2ljIG51bWJlcnMuCi0KLSogQXZvaWQgbGlicmFyeSBuYW1lc3BhY2UgcG9sbHV0aW9uLiAgUHJlZml4IGFsbCBleHBvcnRlZCAKLSAgc3ltYm9scyB3aXRoIEJaMl8uCi0KLSogTWlub3Igc29ydGluZyBlbmhhbmNlbWVudHMgZnJvbSBteSBEQ0MyMDAwIHBhcGVyLgotCi0qIEFkdmFuY2UgdGhlIHZlcnNpb24gbnVtYmVyIHRvIDEuMCwgc28gYXMgdG8gY291bnRlcmFjdCB0aGUKLSAgKGZhbHNlLWluLXRoaXMtY2FzZSkgaW1wcmVzc2lvbiBzb21lIHBlb3BsZSBoYXZlIHRoYXQgcHJvZ3JhbXMgCi0gIHdpdGggdmVyc2lvbiBudW1iZXJzIGxlc3MgdGhhbiAxLjAgYXJlIGluIHNvbWUgd2F5LCBleHBlcmltZW50YWwsCi0gIHByZS1yZWxlYXNlIHZlcnNpb25zLgotCi0qIENyZWF0ZSBhbiBpbml0aWFsIE1ha2VmaWxlLWxpYmJ6Ml9zbyB0byBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5LgotICBZZXMsIEkga25vdyBJIHNob3VsZCByZWFsbHkgdXNlIGxpYnRvb2wgZXQgYWwgLi4uCi0KLSogTWFrZSB0aGUgcHJvZ3JhbSBleGl0IHdpdGggMiBpbnN0ZWFkIG9mIDAgd2hlbiBkZWNvbXByZXNzaW9uCi0gIGZhaWxzIGR1ZSB0byBhIGJhZCBtYWdpYyBudW1iZXIgKGllLCBhbiBpbnZhbGlkIGJ6aXAyIGhlYWRlcikuCi0gIEFsc28gZXhpdCB3aXRoIDEgKGFzIHRoZSBtYW51YWwgY2xhaW1zIDotKSB3aGVuZXZlciBhIGRpYWdub3N0aWMKLSAgbWVzc2FnZSB3b3VsZCBoYXZlIGJlZW4gcHJpbnRlZCBBTkQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIAotICBpcyBhYm9ydGVkLCBmb3IgZXhhbXBsZQotICAgICBiemlwMjogT3V0cHV0IGZpbGUgeHggYWxyZWFkeSBleGlzdHMuCi0gIFdoZW4gYSBkaWFnbm9zdGljIG1lc3NhZ2UgaXMgcHJpbnRlZCBidXQgdGhlIG9wZXJhdGlvbiBpcyBub3QgCi0gIGFib3J0ZWQsIGZvciBleGFtcGxlCi0gICAgIGJ6aXAyOiBDYW4ndCBndWVzcyBvcmlnaW5hbCBuYW1lIGZvciB3dXJibGUgLS0gdXNpbmcgd3VyYmxlLm91dAotICB0aGVuIHRoZSBleGl0IHZhbHVlIDAgaXMgcmV0dXJuZWQsIHVubGVzcyBzb21lIG90aGVyIHByb2JsZW0gaXMKLSAgYWxzbyBkZXRlY3RlZC4KLQotICBJIHRoaW5rIGl0IGNvcnJlc3BvbmRzIG1vcmUgY2xvc2VseSB0byB3aGF0IHRoZSBtYW51YWwgY2xhaW1zIG5vdy4KLQotCi0xLjAuMQotfn5+fn4KLSogTW9kaWZpZWQgZGxsdGVzdC5jIHNvIGl0IHVzZXMgdGhlIG5ldyBCWjJfIG5hbWluZyBzY2hlbWUuCi0qIE1vZGlmaWVkIG1ha2VmaWxlLW1zYyB0byBmaXggbWlub3IgYnVpbGQgcHJvYnMgb24gV2luMmsuCi0qIFVwZGF0ZWQgUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TLgotCi1UaGVyZSBhcmUgbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIG9yIGJ1ZyBmaXhlcyByZWxhdGl2ZSB0byB2ZXJzaW9uCi0xLjAuMC4gIFRoaXMgaXMganVzdCBhIGRvY3VtZW50YXRpb24gdXBkYXRlICsgYSBmaXggZm9yIG1pbm9yIFdpbjMyCi1idWlsZCBwcm9ibGVtcy4gIEZvciBhbG1vc3QgZXZlcnlvbmUsIHVwZ3JhZGluZyBmcm9tIDEuMC4wIHRvIDEuMC4xIGlzCi11dHRlcmx5IHBvaW50bGVzcy4gIERvbid0IGJvdGhlci4KLQotCi0xLjAuMgotfn5+fn4KLUEgYnVnIGZpeCByZWxlYXNlLCBhZGRyZXNzaW5nIHZhcmlvdXMgbWlub3IgaXNzdWVzIHdoaWNoIGhhdmUgYXBwZWFyZWQKLWluIHRoZSAxOCBvciBzbyBtb250aHMgc2luY2UgMS4wLjEgd2FzIHJlbGVhc2VkLiAgTW9zdCBvZiB0aGUgZml4ZXMKLWFyZSB0byBkbyB3aXRoIGZpbGUtaGFuZGxpbmcgb3IgZG9jdW1lbnRhdGlvbiBidWdzLiAgVG8gdGhlIGJlc3Qgb2YgbXkKLWtub3dsZWRnZSwgdGhlcmUgaGF2ZSBiZWVuIG5vIGRhdGEtbG9zcy1jYXVzaW5nIGJ1Z3MgcmVwb3J0ZWQgaW4gdGhlCi1jb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGVuZ2luZSBvZiAxLjAuMCBvciAxLjAuMS4KLQotTm90ZSB0aGF0IHRoaXMgcmVsZWFzZSBkb2VzIG5vdCBpbXByb3ZlIHRoZSByYXRoZXIgY3J1ZGUgYnVpbGQgc3lzdGVtCi1mb3IgVW5peCBwbGF0Zm9ybXMuICBUaGUgZ2VuZXJhbCBwbGFuIGhlcmUgaXMgdG8gYXV0b2NvbmZpc2NhdGUvCi1saWJ0b29saXNlIDEuMC4yIHNvb24gYWZ0ZXIgcmVsZWFzZSwgYW5kIHJlbGVhc2UgdGhlIHJlc3VsdCBhcyAxLjEuMAotb3IgcGVyaGFwcyAxLjIuMC4gIFRoYXQsIGhvd2V2ZXIsIGlzIHN0aWxsIGp1c3QgYSBwbGFuIGF0IHRoaXMgcG9pbnQuCi0KLUhlcmUgYXJlIHRoZSBjaGFuZ2VzIGluIDEuMC4yLiAgQnVnLXJlcG9ydGVycyBhbmQvb3IgcGF0Y2gtc2VuZGVycyBpbgotcGFyZW50aGVzZXMuCi0KLSogRml4IGFuIGluZmluaXRlIHNlZ2ZhdWx0IGxvb3AgaW4gMS4wLjEgd2hlbiBhIGRpcmVjdG9yeSBpcwotICBlbmNvdW50ZXJlZCBpbiAtZiAoZm9yY2UpIG1vZGUuCi0gICAgIChUcm9uZCBFaXZpbmQgR2xvbXNyb2QsIE5pY2hvbGFzIE5ldGhlcmNvdGUsIFZvbGtlciBTY2htaWR0KQotCi0qIEF2b2lkIGRvdWJsZSBmY2xvc2UoKSBvZiBvdXRwdXQgZmlsZSBvbiBjZXJ0YWluIEkvTyBlcnJvciBwYXRocy4KLSAgICAgKFNvbGFyIERlc2lnbmVyKQotCi0qIERvbid0IGZhaWwgd2l0aCBpbnRlcm5hbCBlcnJvciAxMDA3IHdoZW4gZmVkIGEgbG9uZyBzdHJlYW0gKD4gNDhNQikKLSAgb2YgYnl0ZSAyNTEuICBBbHNvIHByaW50IHVzZWZ1bCBtZXNzYWdlIHN1Z2dlc3RpbmcgdGhhdCAxMDA3cyBtYXkgYmUKLSAgY2F1c2VkIGJ5IGJhZCBtZW1vcnkuCi0gICAgIChub3RpY2VkIGJ5IEp1YW4gUGVkcm8gVmFsbGVqbywgZml4ZWQgYnkgbWUpCi0KLSogRml4IHVuaW5pdGlhbGlzZWQgdmFyaWFibGUgc2lsbHkgYnVnIGluIGRlbW8gcHJvZyBkbGx0ZXN0LmMuCi0gICAgIChKb3JqIEJhdWVyKQotCi0qIFJlbW92ZSA1MTItTUIgbGltaXRhdGlvbiBvbiByZWNvdmVyZWQgZmlsZSBzaXplIGZvciBiemlwMnJlY292ZXIKLSAgb24gc2VsZWN0ZWQgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgNjQtYml0IGludHMuICBBdCB0aGUgbW9tZW50Ci0gIGFsbCBHQ0Mgc3VwcG9ydGVkIHBsYXRmb3JtcywgYW5kIFdpbjMyLgotICAgICAobWUsIEFsc29uIHZhbiBkZXIgTWV1bGVuKQotCi0qIEhhcmQtY29kZSBoZWFkZXIgYnl0ZSB2YWx1ZXMsIHRvIGdpdmUgY29ycmVjdCBvcGVyYXRpb24gb24gcGxhdGZvcm1zCi0gIHVzaW5nIEVCQ0RJQyBhcyB0aGVpciBuYXRpdmUgY2hhcmFjdGVyIHNldCAoSUJNJ3MgT1MvMzkwKS4KLSAgICAgKExlbGFuZCBMdWNpdXMpCi0KLSogQ29weSBmaWxlIGFjY2VzcyB0aW1lcyBjb3JyZWN0bHkuCi0gICAgIChNYXJ0eSBMZWlzbmVyKQotCi0qIEFkZCBkaXN0Y2xlYW4gYW5kIGNoZWNrIHRhcmdldHMgdG8gTWFrZWZpbGUuCi0gICAgIChNaWNoYWVsIENhcm1hY2spCi0KLSogUGFyYW1ldGVyaXNlIHVzZSBvZiBhciBhbmQgcmFubGliIGluIE1ha2VmaWxlLiAgQWxzbyBhZGQgJChMREZMQUdTKS4KLSAgICAgKFJpY2ggSXJlbGFuZCwgQm8gVGhvcnNlbikKLQotKiBQYXNzIC1wIChjcmVhdGUgcGFyZW50IGRpcnMgYXMgbmVlZGVkKSB0byBta2RpciBkdXJpbmcgbWFrZSBpbnN0YWxsLgotICAgICAoSmVyZW15IEZ1c2NvKQotCi0qIERlcmVmZXJlbmNlIHN5bWxpbmtzIHdoZW4gY29weWluZyBmaWxlIHBlcm1pc3Npb25zIGluIC1mIG1vZGUuCi0gICAgIChWb2xrZXIgU2NobWlkdCkKLQotKiBNYWpvcmx5IHNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIHVJbnQ2NF9xcm0xMC4KLSAgICAgKEJvIExpbmRiZXJnaCkKLQotKiBDaGVjayB0aGUgaW5wdXQgZmlsZSBzdGlsbCBleGlzdHMgYmVmb3JlIGRlbGV0aW5nIHRoZSBvdXRwdXQgb25lLAotICB3aGVuIGFib3J0aW5nIGluIGNsZWFuVXBBbmRGYWlsKCkuCi0gICAgIChKb2VyZyBQcmFudGUsIFJvYmVydCBMaW5kZW4sIE1hdHRoaWFzIEtyaW5ncykKLQotQWxzbyBhIGJ1bmNoIG9mIHBhdGNoZXMgY291cnRlc3kgb2YgUGhpbGlwcGUgVHJvaW4sIHRoZSBEZWJpYW4gbWFpbnRhaW5lcgotb2YgYnppcDI6Ci0KLSogV3JhcHBlciBzY3JpcHRzICh3aXRoIG1hbnBhZ2VzKTogYnpkaWZmLCBiemdyZXAsIGJ6bW9yZS4KLQotKiBTcGVsbGluZyBjaGFuZ2VzIGFuZCBtaW5vciBlbmhhbmNlbWVudHMgaW4gYnppcDIuMS4KLQotKiBBdm9pZCByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGNyZWF0aW5nIHRoZSBvdXRwdXQgZmlsZSBhbmQgc2V0dGluZyBpdHMKLSAgaW50ZXJpbSBwZXJtaXNzaW9ucyBzYWZlbHksIGJ5IHVzaW5nIGZvcGVuX291dHB1dF9zYWZlbHkoKS4KLSAgTm8gY2hhbmdlcyB0byBiemlwMnJlY292ZXIgc2luY2UgdGhlcmUgaXMgbm8gaXNzdWUgd2l0aCBmaWxlCi0gIHBlcm1pc3Npb25zIHRoZXJlLgotCi0qIGRvIG5vdCBwcmludCBzZW5zZWxlc3MgcmVwb3J0IHdpdGggLXYgd2hlbiBjb21wcmVzc2luZyBhbiBlbXB0eQotICBmaWxlLgotCi0qIGJ6Y2F0IC1mIHdvcmtzIG9uIG5vbi1iemlwMiBmaWxlcy4KLQotKiBkbyBub3QgdHJ5IHRvIGVzY2FwZSBzaGVsbCBtZXRhLWNoYXJhY3RlcnMgb24gdW5peCAodGhlIHNoZWxsIHRha2VzCi0gIGNhcmUgb2YgdGhlc2UpLgotCi0qIGFkZGVkIC0tZmFzdCBhbmQgLS1iZXN0IGFsaWFzZXMgZm9yIC0xIC05IGZvciBnemlwIGNvbXBhdGliaWxpdHkuCi0KLQotMS4wLjMgKDE1IEZlYiAwNSkKLX5+fn5+fn5+fn5+fn5+fn5+Ci1GaXhlcyBzb21lIG1pbm9yIGJ1Z3Mgc2luY2UgdGhlIGxhc3QgdmVyc2lvbiwgMS4wLjIuCi0KLSogRnVydGhlciByb2J1c3RpZmljYXRpb24gYWdhaW5zdCBjb3JydXB0ZWQgY29tcHJlc3NlZCBkYXRhLgotICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIGtub3duIGJpdHN0cmVhbXMgd2hpY2ggY2FuIGNhdXNlIHRoZQotICBkZWNvbXByZXNzb3IgdG8gY3Jhc2gsIGxvb3Agb3IgYWNjZXNzIG1lbW9yeSB3aGljaCBkb2VzIG5vdAotICBiZWxvbmcgdG8gaXQuICBJZiB5b3UgYXJlIHVzaW5nIGJ6aXAyIG9yIHRoZSBsaWJyYXJ5IHRvIAotICBkZWNvbXByZXNzIGJpdHN0cmVhbXMgZnJvbSB1bnRydXN0ZWQgc291cmNlcywgYW4gdXBncmFkZQotICB0byAxLjAuMyBpcyByZWNvbW1lbmRlZC4gIFRoaXMgZml4ZXMgQ0FOLTIwMDUtMTI2MC4KLQotKiBUaGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gWE1MLCBmcm9tIHdoaWNoIGh0bWwKLSAgYW5kIHBkZiBjYW4gYmUgZGVyaXZlZC4KLQotKiBWYXJpb3VzIG1pbm9yIGJ1Z3MgaW4gdGhlIGRvY3VtZW50YXRpb24gaGF2ZSBiZWVuIGZpeGVkLgotCi0qIEZpeGVzIGZvciB2YXJpb3VzIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YKLSAgZ2NjLCBhbmQgb24gNjQtYml0IHBsYXRmb3Jtcy4KLQotKiBUaGUgQlpfTk9fU1RESU8gY3BwIHN5bWJvbCB3YXMgbm90IHByb3Blcmx5IG9ic2VydmVkIGluIDEuMC4yLgotICBUaGlzIGhhcyBiZWVuIGZpeGVkLgotCi0KLTEuMC40ICgyMCBEZWMgMDYpCi1+fn5+fn5+fn5+fn5+fn5+fgotRml4ZXMgc29tZSBtaW5vciBidWdzIHNpbmNlIHRoZSBsYXN0IHZlcnNpb24sIDEuMC4zLgotCi0qIEZpeCBmaWxlIHBlcm1pc3Npb25zIHJhY2UgcHJvYmxlbSAoQ0FOLTIwMDUtMDk1MykuCi0KLSogQXZvaWQgcG9zc2libGUgc2VnZmF1bHQgaW4gQloyX2J6Y2xvc2UuICBGcm9tIENvdmVyaXR5J3MgTmV0QlNECi0gIHNjYW4uCi0KLSogJ2NvbnN0Jy9wcm90b3R5cGUgY2xlYW51cHMgaW4gdGhlIEMgY29kZS4KLQotKiBDaGFuZ2UgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9uIHRvIC91c3IvbG9jYWwsIGFuZCBoYW5kbGUgbXVsdGlwbGUKLSAgJ21ha2UgaW5zdGFsbCdzIHdpdGhvdXQgZXJyb3IuCi0KLSogU2FuaXRpc2UgZmlsZSBuYW1lcyBtb3JlIGNhcmVmdWxseSBpbiBiemdyZXAuICBGaXhlcyBDQU4tMjAwNS0wNzU4Ci0gIHRvIHRoZSBleHRlbnQgdGhhdCBhcHBsaWVzIHRvIGJ6Z3JlcC4KLQotKiBVc2UgJ21rdGVtcCcgcmF0aGVyIHRoYW4gJ3RlbXBmaWxlJyBpbiBiemRpZmYuCi0KLSogVGlnaHRlbiB1cCBhIGNvdXBsZSBvZiBhc3NlcnRpb25zIGluIGJsb2Nrc29ydC5jIGZvbGxvd2luZyBhdXRvbWF0ZWQKLSAgYW5hbHlzaXMuCi0KLSogRml4IG1pbm9yIGRvYy9jb21tZW50IGJ1Z3MuCi0KLQotMS4wLjUgKDEwIERlYyAwNykKLX5+fn5+fn5+fn5+fn5+fn5+Ci1TZWN1cml0eSBmaXggb25seS4gIEZpeGVzIENFUlQtRkkgMjA0NjkgYXMgaXQgYXBwbGllcyB0byBiemlwMi4KLQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21iemlwMi9DTWFrZUxpc3RzLnR4dAppbmRleCAyYWZmNjljLi5jYjRhMDM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9DTWFrZUxpc3RzLnR4dAorKysgYi9VdGlsaXRpZXMvY21iemlwMi9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDEzIEBACiBwcm9qZWN0KGJ6aXAyKQorCisjIERpc2FibGUgd2FybmluZ3MgdG8gYXZvaWQgY2hhbmdpbmcgM3JkIHBhcnR5IGNvZGUuCitpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMKKyAgICAiXihHTlV8Q2xhbmd8QXBwbGVDbGFuZ3xYTENsYW5nfFhMfFZpc3VhbEFnZXxTdW5Qcm98SFB8SW50ZWwpJCIpCisgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC13IikKK2Vsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJQYXRoU2NhbGUiKQorICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtd29mZmFsbCIpCitlbmRpZigpCisKIGFkZF9kZWZpbml0aW9ucygtRF9GSUxFX09GRlNFVF9CSVRTPTY0KQogYWRkX2xpYnJhcnkoY21iemlwMgogICBibG9ja3NvcnQuYyBodWZmbWFuLmMgY3JjdGFibGUuYyByYW5kdGFibGUuYyBjb21wcmVzcy5jIGRlY29tcHJlc3MuYyBiemxpYi5jKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvTElDRU5TRSBiL1V0aWxpdGllcy9jbWJ6aXAyL0xJQ0VOU0UKaW5kZXggZjQyMGNmZi4uODFhMzdlYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvTElDRU5TRQorKysgYi9VdGlsaXRpZXMvY21iemlwMi9MSUNFTlNFCkBAIC0yLDcgKzIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBwcm9ncmFtLCAiYnppcDIiLCB0aGUgYXNzb2NpYXRlZCBsaWJyYXJ5ICJsaWJiemlwMiIsIGFuZCBhbGwKLWRvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gUiBTZXdhcmQuICBBbGwKK2RvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gUiBTZXdhcmQuICBBbGwKIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNiw3ICszNiw3IEBACiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1KdWxpYW4gU2V3YXJkLCBqc2V3YXJkQGJ6aXAub3JnCi1iemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKK0p1bGlhbiBTZXdhcmQsIGpzZXdhcmRAYWNtLm9yZworYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL01ha2VmaWxlLWxpYmJ6Ml9zbyBiL1V0aWxpdGllcy9jbWJ6aXAyL01ha2VmaWxlLWxpYmJ6Ml9zbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM3MDg4Ny4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9NYWtlZmlsZS1saWJiejJfc28KKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0KLSMgVGhpcyBNYWtlZmlsZSBidWlsZHMgYSBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgCi0jIGxpYmJ6Mi5zby4xLjAuNCwgd2l0aCBzb25hbWUgbGliYnoyLnNvLjEuMCwKLSMgYXQgbGVhc3Qgb24geDg2LUxpbnV4IChSZWRIYXQgNy4yKSwgCi0jIHdpdGggZ2NjLTIuOTYgMjAwMDA3MzEgKFJlZCBIYXQgTGludXggNy4xIDIuOTYtOTgpLiAgCi0jIFBsZWFzZSBzZWUgdGhlIFJFQURNRSBmaWxlIGZvciBzb21lIGltcG9ydGFudCBpbmZvIAotIyBhYm91dCBidWlsZGluZyB0aGUgbGlicmFyeSBsaWtlIHRoaXMuCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCi0jIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCi0jCi0jIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotIwotIyBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCi0jIFJFQURNRSBmaWxlLgotIwotIyBUaGlzIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5lZAotIyBpbiB0aGUgZmlsZSBMSUNFTlNFLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1TSEVMTD0vYmluL3NoCi1DQz1nY2MKLUJJR0ZJTEVTPS1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKLUNGTEFHUz0tZnBpYyAtZlBJQyAtV2FsbCAtV2lubGluZSAtTzIgLWcgJChCSUdGSUxFUykKLQotT0JKUz0gYmxvY2tzb3J0Lm8gIFwKLSAgICAgIGh1ZmZtYW4ubyAgICBcCi0gICAgICBjcmN0YWJsZS5vICAgXAotICAgICAgcmFuZHRhYmxlLm8gIFwKLSAgICAgIGNvbXByZXNzLm8gICBcCi0gICAgICBkZWNvbXByZXNzLm8gXAotICAgICAgYnpsaWIubwotCi1hbGw6ICQoT0JKUykKLSAgICAkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lIC1XbCxsaWJiejIuc28uMS4wIC1vIGxpYmJ6Mi5zby4xLjAuNCAkKE9CSlMpCi0gICAgJChDQykgJChDRkxBR1MpIC1vIGJ6aXAyLXNoYXJlZCBiemlwMi5jIGxpYmJ6Mi5zby4xLjAuNAotICAgIHJtIC1mIGxpYmJ6Mi5zby4xLjAKLSAgICBsbiAtcyBsaWJiejIuc28uMS4wLjQgbGliYnoyLnNvLjEuMAotCi1jbGVhbjogCi0gICAgcm0gLWYgJChPQkpTKSBiemlwMi5vIGxpYmJ6Mi5zby4xLjAuNCBsaWJiejIuc28uMS4wIGJ6aXAyLXNoYXJlZAotCi1ibG9ja3NvcnQubzogYmxvY2tzb3J0LmMKLSAgICAkKENDKSAkKENGTEFHUykgLWMgYmxvY2tzb3J0LmMKLWh1ZmZtYW4ubzogaHVmZm1hbi5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGh1ZmZtYW4uYwotY3JjdGFibGUubzogY3JjdGFibGUuYwotICAgICQoQ0MpICQoQ0ZMQUdTKSAtYyBjcmN0YWJsZS5jCi1yYW5kdGFibGUubzogcmFuZHRhYmxlLmMKLSAgICAkKENDKSAkKENGTEFHUykgLWMgcmFuZHRhYmxlLmMKLWNvbXByZXNzLm86IGNvbXByZXNzLmMKLSAgICAkKENDKSAkKENGTEFHUykgLWMgY29tcHJlc3MuYwotZGVjb21wcmVzcy5vOiBkZWNvbXByZXNzLmMKLSAgICAkKENDKSAkKENGTEFHUykgLWMgZGVjb21wcmVzcy5jCi1iemxpYi5vOiBiemxpYi5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGJ6bGliLmMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRSBiL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRQppbmRleCBlMTdhODRlLi5iOWM2MDk5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvUkVBRE1FCkBAIC02LDggKzYsOCBAQAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLWJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KK2J6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CitDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoaXMgZmlsZS4KIApAQCAtNzMsNyArNzMsNyBAQAogCiBJdCdzIGRpZmZpY3VsdCBmb3IgbWUgdG8gc3VwcG9ydCBjb21waWxhdGlvbiBvbiBhbGwgdGhlc2UgcGxhdGZvcm1zLgogTXkgYXBwcm9hY2ggaXMgdG8gY29sbGVjdCBiaW5hcmllcyBmb3IgdGhlc2UgcGxhdGZvcm1zLCBhbmQgcHV0IHRoZW0KLW9uIHRoZSBtYXN0ZXIgd2ViIHNpdGUgKGh0dHA6Ly93d3cuYnppcC5vcmcpLiAgTG9vayB0aGVyZS4gIEhvd2V2ZXIKK29uIHRoZSBtYXN0ZXIgd2ViIHNpdGUgKGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnppcDIvKS4gIExvb2sgdGhlcmUuICBIb3dldmVyCiAoRldJVyksIGJ6aXAyLTEuMC5YIGlzIHZlcnkgc3RhbmRhcmQgQU5TSSBDIGFuZCBzaG91bGQgY29tcGlsZQogdW5tb2RpZmllZCB3aXRoIE1TIFZpc3VhbCBDLiAgSWYgeW91IGhhdmUgZGlmZmljdWx0aWVzIGJ1aWxkaW5nLCB5b3UKIG1pZ2h0IHdhbnQgdG8gcmVhZCBSRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMuCkBAIC0xNjEsMzkgKzE2MSwyMiBAQAogICAgKiBNYW55IHNtYWxsIGltcHJvdmVtZW50cyBpbiBmaWxlIGFuZCBmbGFnIGhhbmRsaW5nLgogICAgKiBBIFkySyBzdGF0ZW1lbnQuCiAKLVdIQVQnUyBORVcgSU4gMS4wLjAgPworV0hBVCdTIE5FVyBJTiAxLjAueCA/CiAKICAgIFNlZSB0aGUgQ0hBTkdFUyBmaWxlLgogCi1XSEFUJ1MgTkVXIElOIDEuMC4yID8KLQotICAgU2VlIHRoZSBDSEFOR0VTIGZpbGUuCi0KLVdIQVQnUyBORVcgSU4gMS4wLjMgPwotCi0gICBTZWUgdGhlIENIQU5HRVMgZmlsZS4KLQotV0hBVCdTIE5FVyBJTiAxLjAuNCA/Ci0KLSAgIFNlZSB0aGUgQ0hBTkdFUyBmaWxlLgotCi1XSEFUJ1MgTkVXIElOIDEuMC41ID8KLQotICAgU2VlIHRoZSBDSEFOR0VTIGZpbGUuCi0KLQotSSBob3BlIHlvdSBmaW5kIGJ6aXAyIHVzZWZ1bC4gIEZlZWwgZnJlZSB0byBjb250YWN0IG1lIGF0Ci0gICBqc2V3YXJkQGJ6aXAub3JnCitJIGhvcGUgeW91IGZpbmQgYnppcDIgdXNlZnVsLiAgRmVlbCBmcmVlIHRvIGNvbnRhY3QgdGhlIGRldmVsb3BlcnMgYXQKKyAgIGJ6aXAyLWRldmVsQHNvdXJjZXdhcmUub3JnCiBpZiB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbnMgb3IgcXVlcmllcy4gIE1hbnkgcGVvcGxlIG1haWxlZCBtZSB3aXRoCiBjb21tZW50cywgc3VnZ2VzdGlvbnMgYW5kIHBhdGNoZXMgYWZ0ZXIgdGhlIHJlbGVhc2VzIG9mIGJ6aXAtMC4xNSwKIGJ6aXAtMC4yMSwgYW5kIGJ6aXAyIHZlcnNpb25zIDAuMXBsMiwgMC45LjAsIDAuOS41LCAxLjAuMCwgMS4wLjEsCiAxLjAuMiBhbmQgMS4wLjMsIGFuZCB0aGUgY2hhbmdlcyBpbiBiemlwMiBhcmUgbGFyZ2VseSBhIHJlc3VsdCBvZiB0aGlzCiBmZWVkYmFjay4gIEkgdGhhbmsgeW91IGZvciB5b3VyIGNvbW1lbnRzLgogCi1iemlwMidzICJob21lIiBpcyBodHRwOi8vd3d3LmJ6aXAub3JnLworYnppcDIncyAiaG9tZSIgaXMgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9iemlwMi8KIAogSnVsaWFuIFNld2FyZAotanNld2FyZEBiemlwLm9yZworanNld2FyZEBhY20ub3JnCiBDYW1icmlkZ2UsIFVLLgogCiAxOCAgICAgSnVseSAxOTk2ICh2ZXJzaW9uIDAuMTUpCkBAIC0yMDgsMyArMTkxLDYgQEAKIDE1IEZlYnJ1YXJ5IDIwMDUgKGJ6aXAyLCB2ZXJzaW9uIDEuMC4zKQogMjAgRGVjZW1iZXIgMjAwNiAoYnppcDIsIHZlcnNpb24gMS4wLjQpCiAxMCBEZWNlbWJlciAyMDA3IChiemlwMiwgdmVyc2lvbiAxLjAuNSkKKyA2ICAgICBTZXB0IDIwMTAgKGJ6aXAyLCB2ZXJzaW9uIDEuMC42KQorMjcgICAgIEp1bmUgMjAxOSAoYnppcDIsIHZlcnNpb24gMS4wLjcpCisxMyAgICAgSnVseSAyMDE5IChiemlwMiwgdmVyc2lvbiAxLjAuOCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUyBiL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiOTVjNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCi1sb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgotCi1iemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLUNvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+Ci0KLVBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKLVJFQURNRSBmaWxlLgotCi1UaGlzIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5lZAotaW4gdGhlIGZpbGUgTElDRU5TRS4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1iemlwMi0xLjAuNSBzaG91bGQgY29tcGlsZSB3aXRob3V0IHByb2JsZW1zIG9uIHRoZSB2YXN0IG1ham9yaXR5IG9mCi1wbGF0Zm9ybXMuICBVc2luZyB0aGUgc3VwcGxpZWQgTWFrZWZpbGUsIEkndmUgYnVpbHQgYW5kIHRlc3RlZCBpdAotbXlzZWxmIGZvciB4ODYtbGludXggYW5kIGFtZDY0LWxpbnV4LiAgV2l0aCBtYWtlZmlsZS5tc2MsIFZpc3VhbCBDKysKLTYuMCBhbmQgbm1ha2UsIHlvdSBjYW4gYnVpbGQgYSBuYXRpdmUgV2luMzIgdmVyc2lvbiB0b28uICBMYXJnZSBmaWxlCi1zdXBwb3J0IHNlZW1zIHRvIHdvcmsgY29ycmVjdGx5IG9uIGF0IGxlYXN0IG9uIGFtZDY0LWxpbnV4LgotCi1XaGVuIEkgc2F5ICJsYXJnZSBmaWxlIiBJIG1lYW4gYSBmaWxlIG9mIHNpemUgMiwxNDcsNDgzLDY0OCAoMl4zMSkKLWJ5dGVzIG9yIGFib3ZlLiAgTWFueSBvbGRlciBPU3MgY2FuJ3QgaGFuZGxlIGZpbGVzIGFib3ZlIHRoaXMgc2l6ZSwKLWJ1dCBtYW55IG5ld2VyIG9uZXMgY2FuLiAgTGFyZ2UgZmlsZXMgYXJlIHByZXR0eSBodWdlIC0tIG1vc3QgZmlsZXMKLXlvdSdsbCBlbmNvdW50ZXIgYXJlIG5vdCBMYXJnZSBGaWxlcy4KLQotRWFybHkgdmVyc2lvbnMgb2YgYnppcDIgKDAuMSwgMC45LjAsIDAuOS41KSBjb21waWxlZCBvbiBhIHdpZGUgdmFyaWV0eQotb2YgcGxhdGZvcm1zIHdpdGhvdXQgZGlmZmljdWx0eSwgYW5kIEkgaG9wZSB0aGlzIHZlcnNpb24gd2lsbCBjb250aW51ZQotaW4gdGhhdCB0cmFkaXRpb24uICBIb3dldmVyLCBpbiBvcmRlciB0byBzdXBwb3J0IGxhcmdlIGZpbGVzLCBJJ3ZlIGhhZAotdG8gaW5jbHVkZSB0aGUgZGVmaW5lIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgaW4gdGhlIE1ha2VmaWxlLiAgVGhpcwotY2FuIGNhdXNlIHByb2JsZW1zLgotCi1UaGUgdGVjaG5pcXVlIG9mIGFkZGluZyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IHRvIGdldCBsYXJnZSBmaWxlCi1zdXBwb3J0IGlzLCBhcyBmYXIgYXMgSSBrbm93LCB0aGUgUmVjb21tZW5kZWQgV2F5IHRvIGdldCBjb3JyZWN0IGxhcmdlCi1maWxlIHN1cHBvcnQuICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIExhcmdlIEZpbGUgU3VwcG9ydAotU3BlY2lmaWNhdGlvbiwgcHVibGlzaGVkIGJ5IHRoZSBMYXJnZSBGaWxlIFN1bW1pdCwgYXQKLQotICAgaHR0cDovL2Z0cC5zYXMuY29tL3N0YW5kYXJkcy9sYXJnZS5maWxlCi0KLUFzIGEgZ2VuZXJhbCBjb21tZW50LCBpZiB5b3UgZ2V0IGNvbXBpbGF0aW9uIGVycm9ycyB3aGljaCB5b3UgdGhpbmsKLWFyZSByZWxhdGVkIHRvIGxhcmdlIGZpbGUgc3VwcG9ydCwgdHJ5IHJlbW92aW5nIHRoZSBhYm92ZSBkZWZpbmUgZnJvbQotdGhlIE1ha2VmaWxlLCBpZSwgZGVsZXRlIHRoZSBsaW5lCi0KLSAgIEJJR0ZJTEVTPS1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgCi0KLWZyb20gdGhlIE1ha2VmaWxlLCBhbmQgZG8gJ21ha2UgY2xlYW4gOyBtYWtlJy4gIFRoaXMgd2lsbCBnaXZlIHlvdSBhCi12ZXJzaW9uIG9mIGJ6aXAyIHdpdGhvdXQgbGFyZ2UgZmlsZSBzdXBwb3J0LCB3aGljaCwgZm9yIG1vc3QKLWFwcGxpY2F0aW9ucywgaXMgcHJvYmFibHkgbm90IGEgcHJvYmxlbS4gIAotCi1BbHRlcm5hdGl2ZWx5LCB0cnkgc29tZSBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaGludHMgbGlzdGVkIGJlbG93LgotCi1Zb3UgY2FuIHVzZSB0aGUgc3Bld0cuYyBwcm9ncmFtIHRvIGdlbmVyYXRlIGh1Z2UgZmlsZXMgdG8gdGVzdCBiemlwMidzCi1sYXJnZSBmaWxlIHN1cHBvcnQsIGlmIHlvdSBhcmUgZmVlbGluZyBwYXJhbm9pZC4gIEJlIGF3YXJlIHRob3VnaCB0aGF0Ci1hbnkgY29tcGlsYXRpb24gcHJvYmxlbXMgd2hpY2ggYWZmZWN0IGJ6aXAyIHdpbGwgYWxzbyBhZmZlY3Qgc3Bld0cuYywKLWFsYXMuCi0KLUFJWDogSSBoYXZlIHJlcG9ydHMgdGhhdCBmb3IgbGFyZ2UgZmlsZSBzdXBwb3J0LCB5b3UgbmVlZCB0byBzcGVjaWZ5Ci0tRF9MQVJHRV9GSUxFUyByYXRoZXIgdGhhbiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0LiAgSSBoYXZlIG5vdCB0ZXN0ZWQKLXRoaXMgbXlzZWxmLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvUkVBRE1FLlhNTC5TVFVGRiBiL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRS5YTUwuU1RVRkYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNWI0YzUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvUkVBRE1FLlhNTC5TVFVGRgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgotCi0gIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotCi0gIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKLSAgUkVBRE1FIGZpbGUuCi0KLSAgVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLSAgaW4gdGhlIGZpbGUgTElDRU5TRS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgc2NyaXB0IHhtbHByb2Muc2ggdGFrZXMgYW4geG1sIGZpbGUgYXMgaW5wdXQsCi1hbmQgcHJvY2Vzc2VzIGl0IHRvIGNyZWF0ZSAucGRmLCAuaHRtbCBvciAucHMgb3V0cHV0LgotSXQgdXNlcyBmb3JtYXQucGwsIGEgcGVybCBzY3JpcHQgdG8gZm9ybWF0IDxwcmU+IGJsb2NrcyBuaWNlbHksCi0gYW5kIGFkZCBDREFUQSB0YWdzIHNvIHdyaXRlcnMgZG8gbm90IGhhdmUgdG8gdXNlIGVnLiAmbHQ7IAotCi1UaGUgZmlsZSAiZW50aXRpZXMueG1sIiBtdXN0IGJlIGVkaXRlZCB0byByZWZsZWN0IGN1cnJlbnQKLXZlcnNpb24sIHllYXIsIGV0Yy4KLQotCi1Vc2FnZToKLQotICAuL3htbHByb2Muc2ggLXYgbWFudWFsLnhtbAotICBWYWxpZGF0ZXMgYW4geG1sIGZpbGUgdG8gZW5zdXJlIG5vIGR0ZC1jb21wbGlhbmNlIGVycm9ycwotCi0gIC4veG1scHJvYy5zaCAtaHRtbCBtYW51YWwueG1sCi0gIE91dHB1dDogbWFudWFsLmh0bWwKLQotICAuL3htbHByb2Muc2ggLXBkZiBtYW51YWwueG1sCi0gIE91dHB1dDogbWFudWFsLnBkZgotCi0gIC4veG1scHJvYy5zaCAtcHMgbWFudWFsLnhtbAotICBPdXRwdXQ6IG1hbnVhbC5wcwotCi0KLU5vdHVtIGJlbmU6IAotLSBwZGZ4bWx0ZXggYmFyZnMgaWYgZ2l2ZW4gYSBmaWxlbmFtZSB3aXRoIGFuIHVuZGVyc2NvcmUgaW4gaXQKLQotLSB4bWx0ZXggd29uJ3Qgd29yayB5ZXQgLSB0aGVyZSdzIGEgYnVnIGluIHBhc3NpdmV0ZXgKLSAgICB3aGljaCB3ZSBhcmUgYWxsIHdhaXRpbmcgZm9yIFNlYmFzdGlhbiB0byBmaXguCi0gIFNvIHdlIGFyZSBnb2luZyB0aGUgeG1sIC0+IHBkZiAtPiBwcyByb3V0ZSBmb3IgdGhlIHRpbWUgYmVpbmcsCi0gICAgdXNpbmcgcGRmeG1sdGV4LgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYmxvY2tzb3J0LmMgYi9VdGlsaXRpZXMvY21iemlwMi9ibG9ja3NvcnQuYwppbmRleCA5NWFkYjVlLi45MmQ4MWZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9ibG9ja3NvcnQuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9ibG9ja3NvcnQuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTIwMiw5ICsyMDIsOSBAQAogICAgICAgYmh0YWIgWyAwIC4uIDIrKG5ibG9jay8zMikgXSBkZXN0cm95ZWQKICovCiAKLSNkZWZpbmUgICAgICAgU0VUX0JIKHp6KSAgYmh0YWJbKHp6KSA+PiA1XSB8PSAoMSA8PCAoKHp6KSAmIDMxKSkKLSNkZWZpbmUgICAgIENMRUFSX0JIKHp6KSAgYmh0YWJbKHp6KSA+PiA1XSAmPSB+KDEgPDwgKCh6eikgJiAzMSkpCi0jZGVmaW5lICAgICBJU1NFVF9CSCh6eikgIChiaHRhYlsoenopID4+IDVdICYgKDEgPDwgKCh6eikgJiAzMSkpKQorI2RlZmluZSAgICAgICBTRVRfQkgoenopICBiaHRhYlsoenopID4+IDVdIHw9ICgoVUludDMyKTEgPDwgKCh6eikgJiAzMSkpCisjZGVmaW5lICAgICBDTEVBUl9CSCh6eikgIGJodGFiWyh6eikgPj4gNV0gJj0gfigoVUludDMyKTEgPDwgKCh6eikgJiAzMSkpCisjZGVmaW5lICAgICBJU1NFVF9CSCh6eikgIChiaHRhYlsoenopID4+IDVdICYgKChVSW50MzIpMSA8PCAoKHp6KSAmIDMxKSkpCiAjZGVmaW5lICAgICAgV09SRF9CSCh6eikgIGJodGFiWyh6eikgPj4gNV0KICNkZWZpbmUgVU5BTElHTkVEX0JIKHp6KSAgKCh6eikgJiAweDAxZikKIApAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgICByID0gLTE7CiAgICAgICB3aGlsZSAoMSkgewogCi0gICAgIC8qLS0gZmluZCB0aGUgbmV4dCBub24tc2luZ2xldG9uIGJ1Y2tldCAtLSovCisJIC8qLS0gZmluZCB0aGUgbmV4dCBub24tc2luZ2xldG9uIGJ1Y2tldCAtLSovCiAgICAgICAgICBrID0gciArIDE7CiAgICAgICAgICB3aGlsZSAoSVNTRVRfQkgoaykgJiYgVU5BTElHTkVEX0JIKGspKSBrKys7CiAgICAgICAgICBpZiAoSVNTRVRfQkgoaykpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWNvbW1vbi54c2wgYi9VdGlsaXRpZXMvY21iemlwMi9iei1jb21tb24ueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmZjZDZmLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWNvbW1vbi54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4gPCEtLSAtKi0gc2dtbCAtKi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgCi0gICAgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIxLjAiPgotCi08IS0tIHdlIGxpa2UgJzEuMiBUaXRsZScgLS0+Ci08eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IicxJyIvPiAKLTx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iJzEnIi8+Ci0KLTwhLS0gRG8gbm90IHB1dCAnQ2hhcHRlcicgYXQgdGhlIHN0YXJ0IG9mIGVnICdDaGFwdGVyIDEuIERvaW5nIFRoaXMnIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJsb2NhbC5sMTBuLnhtbCIgc2VsZWN0PSJkb2N1bWVudCgnJykiLz4gCi08bDppMThuIHhtbG5zOmw9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC94bWxucy9sMTBuLzEuMCI+IAotICA8bDpsMTBuIGxhbmd1YWdlPSJlbiI+IAotICAgIDxsOmNvbnRleHQgbmFtZT0idGl0bGUtbnVtYmVyZWQiPgotICAgICAgPGw6dGVtcGxhdGUgbmFtZT0iY2hhcHRlciIgdGV4dD0iJW4uJiMxNjA7JXQiLz4KLSAgICA8L2w6Y29udGV4dD4gCi0gIDwvbDpsMTBuPgotPC9sOmkxOG4+Ci0KLTwhLS0gZG9uJ3QgZ2VuZXJhdGUgc3ViLXRvY3MgZm9yIHFhbmRhIHNldHMgLS0+Ci08eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLnRvYyI+Ci1zZXQgICAgICAgdG9jLHRpdGxlCi1ib29rICAgICAgdG9jLHRpdGxlLGZpZ3VyZSx0YWJsZSxleGFtcGxlLGVxdWF0aW9uCi1jaGFwdGVyICAgdG9jLHRpdGxlCi1zZWN0aW9uICAgdG9jCi1zZWN0MSAgICAgdG9jCi1zZWN0MiAgICAgdG9jCi1zZWN0MyAgICAgdG9jCi1zZWN0NCAgICAgbm9wCi1zZWN0NSAgICAgbm9wCi1xYW5kYXNldCAgdG9jCi1xYW5kYWRpdiAgbm9wCi1hcHBlbmRpeCAgdG9jLHRpdGxlCi1hcnRpY2xlL2FwcGVuZGl4ICBub3AKLWFydGljbGUgICB0b2MsdGl0bGUKLXByZWZhY2UgICB0b2MsdGl0bGUKLXJlZmVyZW5jZSB0b2MsdGl0bGUKLTwveHNsOnBhcmFtPgotCi08L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnotZm8ueHNsIGIvVXRpbGl0aWVzL2NtYnppcDIvYnotZm8ueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTNlMzAxLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWZvLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PiA8IS0tIC0qLSBzZ21sIC0qLSAtLT4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgCi0gICAgIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+Ci0KLTx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2ZvL2RvY2Jvb2sueHNsIi8+Ci08eHNsOmltcG9ydCBocmVmPSJiei1jb21tb24ueHNsIi8+Ci0KLTwhLS0gc2V0IGluZGVudCA9IHllcyB3aGlsZSBkZWJ1Z2dpbmcsIHRoZW4gY2hhbmdlIHRvIE5PIC0tPgotPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGluZGVudD0ieWVzIi8+Ci0KLTwhLS0gZW5zdXJlIG9ubHkgcGFzc2l2ZXRleCBleHRlbnNpb25zIGFyZSBvbiAtLT4KLTx4c2w6cGFyYW0gbmFtZT0ic3R5bGVzaGVldC5yZXN1bHQudHlwZSIgc2VsZWN0PSInZm8nIi8+Ci08IS0tIGZvIGV4dGVuc2lvbnM6IFBERiBib29rbWFya3MgYW5kIGluZGV4IHRlcm1zIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJ1c2UuZXh0ZW5zaW9ucyIgc2VsZWN0PSInMSciLz4KLTx4c2w6cGFyYW0gbmFtZT0ieGVwLmV4dGVuc2lvbnMiIHNlbGVjdD0iMCIvPiAgICAgIAotPHhzbDpwYXJhbSBuYW1lPSJmb3AuZXh0ZW5zaW9ucyIgc2VsZWN0PSIwIi8+ICAgICAKLTx4c2w6cGFyYW0gbmFtZT0ic2F4b24uZXh0ZW5zaW9ucyIgc2VsZWN0PSIwIi8+ICAgCi08eHNsOnBhcmFtIG5hbWU9InBhc3NpdmV0ZXguZXh0ZW5zaW9ucyIgc2VsZWN0PSIxIi8+Ci08eHNsOnBhcmFtIG5hbWU9InRhYmxlY29sdW1ucy5leHRlbnNpb24iIHNlbGVjdD0iJzEnIi8+Ci0KLTwhLS0gZW5zdXJlIHdlIGFyZSB1c2luZyBzaW5nbGUgc2lkZWQgLS0+Ci08eHNsOnBhcmFtIG5hbWU9ImRvdWJsZS5zaWRlZCIgc2VsZWN0PSInMCciLz4gCi0KLTwhLS0gaW5zZXJ0IGNyb3NzIHJlZmVyZW5jZXMgdG8gcGFnZSBudW1iZXJzIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJpbnNlcnQueHJlZi5wYWdlLm51bWJlciIgc2VsZWN0PSIxIi8+Ci0KLTwhLS0gPD9jdXN0b20tcGFnZWJyZWFrPz4gaW5zZXJ0cyBhIHBhZ2UgYnJlYWsgYXQgdGhpcyBwb2ludCAtLT4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ2N1c3RvbS1wYWdlYnJlYWsnKSI+Ci0gIDxmbzpibG9jayBicmVhay1iZWZvcmU9J3BhZ2UnLz4KLTwveHNsOnRlbXBsYXRlPgotCi08IS0tIHNob3cgbGlua3MgaW4gY29sb3IgLS0+Ci08eHNsOmF0dHJpYnV0ZS1zZXQgbmFtZT0ieHJlZi5wcm9wZXJ0aWVzIj4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPmJsdWU8L3hzbDphdHRyaWJ1dGU+Ci08L3hzbDphdHRyaWJ1dGUtc2V0PgotCi08IS0tIG1ha2UgcHJlIGxpc3RpbmdzIGluZGVudGVkIGEgYml0ICsgYSBiZyBjb2xvdXIgLS0+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9ncmFtbGlzdGluZyB8IHNjcmVlbiI+Ci0gIDxmbzpibG9jayBzdGFydC1pbmRlbnQ9IjAuMjVpbiIgd3JhcC1vcHRpb249Im5vLXdyYXAiIAotICAgICAgICAgICAgd2hpdGUtc3BhY2UtY29sbGFwc2U9ImZhbHNlIiB0ZXh0LWFsaWduPSJzdGFydCIgCi0gICAgICAgICAgICBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBiYWNrZ3JvdW5kLWNvbG9yPSIjZjJmMmY5IgotICAgICAgICAgICAgbGluZWZlZWQtdHJlYXRtZW50PSJwcmVzZXJ2ZSIgCi0gICAgICAgICAgICB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJub3JtYWwucGFyYS5zcGFjaW5nIj4KLSAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0gIDwvZm86YmxvY2s+Ci08L3hzbDp0ZW1wbGF0ZT4KLTwhLS0gbWFrZSB2ZXJiYXRpbSBvdXRwdXQgcHJldHRpZXIgLS0+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJsaXRlcmFsbGF5b3V0Ij4KLSAgPGZvOmJsb2NrIHN0YXJ0LWluZGVudD0iMC4yNWluIiB3cmFwLW9wdGlvbj0ibm8td3JhcCIgCi0gICAgICAgICAgICB3aGl0ZS1zcGFjZS1jb2xsYXBzZT0iZmFsc2UiIHRleHQtYWxpZ249InN0YXJ0IiAKLSAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGJhY2tncm91bmQtY29sb3I9IiNlZGY3ZjQiCi0gICAgICAgICAgICBsaW5lZmVlZC10cmVhdG1lbnQ9InByZXNlcnZlIiAKLSAgICAgICAgICAgIHNwYWNlLWJlZm9yZT0iMGVtIiBzcGFjZS1hZnRlcj0iMGVtIj4KLSAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0gIDwvZm86YmxvY2s+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotPCEtLSB3b3JrYXJvdW5kIGJ1ZyBpbiBwYXNzaXZldGV4IGZvIG91dHB1dCBmb3IgaXRlbWl6ZWRsaXN0IC0tPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iaXRlbWl6ZWRsaXN0L2xpc3RpdGVtIj4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpZCI+Ci0gIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJvYmplY3QuaWQiLz48L3hzbDp2YXJpYWJsZT4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpdGVtc3ltYm9sIj4KLSAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibGlzdC5pdGVtc3ltYm9sIj4KLSAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9InBhcmVudDo6aXRlbWl6ZWRsaXN0Ii8+Ci0gICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KLSAgPC94c2w6dmFyaWFibGU+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaXRlbS5jb250ZW50cyI+Ci0gICAgPGZvOmxpc3QtaXRlbS1sYWJlbCBlbmQtaW5kZW50PSJsYWJlbC1lbmQoKSI+Ci0gICAgICA8Zm86YmxvY2s+Ci0gICAgICAgIDx4c2w6Y2hvb3NlPgotICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkaXRlbXN5bWJvbD0nZGlzYyciPiYjeDIwMjI7PC94c2w6d2hlbj4KLSAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGl0ZW1zeW1ib2w9J2J1bGxldCciPiYjeDIwMjI7PC94c2w6d2hlbj4KLSAgICAgICAgICA8eHNsOm90aGVyd2lzZT4mI3gyMDIyOzwveHNsOm90aGVyd2lzZT4KLSAgICAgICAgPC94c2w6Y2hvb3NlPgotICAgICAgPC9mbzpibG9jaz4KLSAgICA8L2ZvOmxpc3QtaXRlbS1sYWJlbD4KLSAgICA8Zm86bGlzdC1pdGVtLWJvZHkgc3RhcnQtaW5kZW50PSJib2R5LXN0YXJ0KCkiPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPiAgICA8IS0tIHJlbW92ZWQgZXh0cmEgYmxvY2sgd3JhcHBlciAtLT4KLSAgICA8L2ZvOmxpc3QtaXRlbS1ib2R5PgotICA8L3hzbDp2YXJpYWJsZT4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9InBhcmVudDo6Ki9Ac3BhY2luZyA9ICdjb21wYWN0JyI+Ci0gICAgICA8Zm86bGlzdC1pdGVtIGlkPSJ7JGlkfSIgCi0gICAgICAgICAgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY29tcGFjdC5saXN0Lml0ZW0uc3BhY2luZyI+Ci0gICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRpdGVtLmNvbnRlbnRzIi8+Ci0gICAgICA8L2ZvOmxpc3QtaXRlbT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgPGZvOmxpc3QtaXRlbSBpZD0ieyRpZH0iIHhzbDp1c2UtYXR0cmlidXRlLXNldHM9Imxpc3QuaXRlbS5zcGFjaW5nIj4KLSAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGl0ZW0uY29udGVudHMiLz4KLSAgICAgIDwvZm86bGlzdC1pdGVtPgotICAgIDwveHNsOm90aGVyd2lzZT4KLSAgPC94c2w6Y2hvb3NlPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwhLS0gd29ya2Fyb3VuZCBidWcgaW4gcGFzc2l2ZXRleCBmbyBvdXRwdXQgZm9yIG9yZGVyZWRsaXN0IC0tPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3JkZXJlZGxpc3QvbGlzdGl0ZW0iPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9ImlkIj4KLSAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im9iamVjdC5pZCIvPjwveHNsOnZhcmlhYmxlPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9Iml0ZW0uY29udGVudHMiPgotICAgIDxmbzpsaXN0LWl0ZW0tbGFiZWwgZW5kLWluZGVudD0ibGFiZWwtZW5kKCkiPgotICAgICAgPGZvOmJsb2NrPgotICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9Iml0ZW0tbnVtYmVyIi8+Ci0gICAgICA8L2ZvOmJsb2NrPgotICAgIDwvZm86bGlzdC1pdGVtLWxhYmVsPgotICAgIDxmbzpsaXN0LWl0ZW0tYm9keSBzdGFydC1pbmRlbnQ9ImJvZHktc3RhcnQoKSI+Ci0gICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+ICAgIDwhLS0gcmVtb3ZlZCBleHRyYSBibG9jayB3cmFwcGVyIC0tPgotICAgIDwvZm86bGlzdC1pdGVtLWJvZHk+Ci0gIDwveHNsOnZhcmlhYmxlPgotICA8eHNsOmNob29zZT4KLSAgICA8eHNsOndoZW4gdGVzdD0icGFyZW50OjoqL0BzcGFjaW5nID0gJ2NvbXBhY3QnIj4KLSAgICAgIDxmbzpsaXN0LWl0ZW0gaWQ9InskaWR9IiAKLSAgICAgICAgICB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjb21wYWN0Lmxpc3QuaXRlbS5zcGFjaW5nIj4KLSAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGl0ZW0uY29udGVudHMiLz4KLSAgICAgIDwvZm86bGlzdC1pdGVtPgotICAgIDwveHNsOndoZW4+Ci0gICAgPHhzbDpvdGhlcndpc2U+Ci0gICAgICA8Zm86bGlzdC1pdGVtIGlkPSJ7JGlkfSIgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ibGlzdC5pdGVtLnNwYWNpbmciPgotICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSIkaXRlbS5jb250ZW50cyIvPgotICAgICAgPC9mbzpsaXN0LWl0ZW0+Ci0gICAgPC94c2w6b3RoZXJ3aXNlPgotICA8L3hzbDpjaG9vc2U+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotPCEtLSB3b3JrYXJvdW5kIGJ1ZyBpbiBwYXNzaXZldGV4IGZvIG91dHB1dCBmb3IgdmFyaWFibGVsaXN0IC0tPgotPHhzbDpwYXJhbSBuYW1lPSJ2YXJpYWJsZWxpc3QuYXMuYmxvY2tzIiBzZWxlY3Q9IjEiLz4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9InZhcmxpc3RlbnRyeSIgbW9kZT0idmwuYXMuYmxvY2tzIj4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpZCI+Ci0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im9iamVjdC5pZCIvPjwveHNsOnZhcmlhYmxlPgotICA8Zm86YmxvY2sgaWQ9InskaWR9IiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJsaXN0Lml0ZW0uc3BhY2luZyIgIAotICAgICAga2VlcC10b2dldGhlci53aXRoaW4tY29sdW1uPSJhbHdheXMiIAotICAgICAga2VlcC13aXRoLW5leHQud2l0aGluLWNvbHVtbj0iYWx3YXlzIj4KLSAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRlcm0iLz4KLSAgPC9mbzpibG9jaz4KLSAgPGZvOmJsb2NrIHN0YXJ0LWluZGVudD0iMC41aW4iIGVuZC1pbmRlbnQ9IjBpbiIgCi0gICAgICAgICAgICBzcGFjZS1hZnRlci5taW5pbXVtPSIwLjJlbSIgCi0gICAgICAgICAgICBzcGFjZS1hZnRlci5vcHRpbXVtPSIwLjRlbSIgCi0gICAgICAgICAgICBzcGFjZS1hZnRlci5tYXhpbXVtPSIwLjZlbSI+Ci0gICAgPGZvOmJsb2NrPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJsaXN0aXRlbSIvPgotICAgIDwvZm86YmxvY2s+Ci0gIDwvZm86YmxvY2s+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotCi08IS0tIHdvcmthcm91bmQgYnVnIGluIGZvb3RlcnM6IGZvcmNlIHJpZ2h0LWFsaWduIHcvdHdvIDgwfDMwIGNvbHMgLS0+Ci08eHNsOnRlbXBsYXRlIG5hbWU9ImZvb3Rlci50YWJsZSI+Ci0gIDx4c2w6cGFyYW0gbmFtZT0icGFnZWNsYXNzIiBzZWxlY3Q9IicnIi8+Ci0gIDx4c2w6cGFyYW0gbmFtZT0ic2VxdWVuY2UiIHNlbGVjdD0iJyciLz4KLSAgPHhzbDpwYXJhbSBuYW1lPSJnZW50ZXh0LWtleSIgc2VsZWN0PSInJyIvPgotICA8eHNsOmNob29zZT4KLSAgICA8eHNsOndoZW4gdGVzdD0iJHBhZ2VjbGFzcyA9ICdpbmRleCciPgotICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ibWFyZ2luLWxlZnQiPjBwdDwveHNsOmF0dHJpYnV0ZT4KLSAgICA8L3hzbDp3aGVuPgotICA8L3hzbDpjaG9vc2U+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iY2FuZGlkYXRlIj4KLSAgICA8Zm86dGFibGUgdGFibGUtbGF5b3V0PSJmaXhlZCIgd2lkdGg9IjEwMCUiPgotICAgICAgPGZvOnRhYmxlLWNvbHVtbiBjb2x1bW4tbnVtYmVyPSIxIiBjb2x1bW4td2lkdGg9IjgwJSIvPgotICAgICAgPGZvOnRhYmxlLWNvbHVtbiBjb2x1bW4tbnVtYmVyPSIyIiBjb2x1bW4td2lkdGg9IjIwJSIvPgotICAgICAgPGZvOnRhYmxlLWJvZHk+Ci0gICAgICAgIDxmbzp0YWJsZS1yb3cgaGVpZ2h0PSIxNHB0Ij4KLSAgICAgICAgICA8Zm86dGFibGUtY2VsbCB0ZXh0LWFsaWduPSJsZWZ0IiBkaXNwbGF5LWFsaWduPSJhZnRlciI+Ci0gICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWxhdGl2ZS1hbGlnbiI+YmFzZWxpbmU8L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgICAgICA8Zm86YmxvY2s+IAotICAgICAgICAgICAgICA8Zm86YmxvY2s+IDwvZm86YmxvY2s+PCEtLSBlbXB0eSBjZWxsIC0tPgotICAgICAgICAgICAgPC9mbzpibG9jaz4KLSAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+Ci0gICAgICAgICAgPGZvOnRhYmxlLWNlbGwgdGV4dC1hbGlnbj0iY2VudGVyIiBkaXNwbGF5LWFsaWduPSJhZnRlciI+Ci0gICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWxhdGl2ZS1hbGlnbiI+YmFzZWxpbmU8L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgICAgICA8Zm86YmxvY2s+Ci0gICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJmb290ZXIuY29udGVudCI+Ci0gICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZ2VjbGFzcyIgc2VsZWN0PSIkcGFnZWNsYXNzIi8+Ci0gICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InNlcXVlbmNlIiBzZWxlY3Q9IiRzZXF1ZW5jZSIvPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwb3NpdGlvbiIgc2VsZWN0PSInY2VudGVyJyIvPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJnZW50ZXh0LWtleSIgc2VsZWN0PSIkZ2VudGV4dC1rZXkiLz4KLSAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KLSAgICAgICAgICAgIDwvZm86YmxvY2s+Ci0gICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPgotICAgICAgICA8L2ZvOnRhYmxlLXJvdz4KLSAgICAgIDwvZm86dGFibGUtYm9keT4KLSAgICA8L2ZvOnRhYmxlPgotICA8L3hzbDp2YXJpYWJsZT4KLSAgPCEtLSBSZWFsbHkgb3V0cHV0IGEgZm9vdGVyPyAtLT4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRwYWdlY2xhc3M9J3RpdGxlcGFnZScgYW5kICRnZW50ZXh0LWtleT0nYm9vaycKLSAgICAgICAgICAgICAgICAgICAgYW5kICRzZXF1ZW5jZT0nZmlyc3QnIj4KLSAgICAgIDwhLS0gbm8sIGJvb2sgdGl0bGVwYWdlcyBoYXZlIG5vIGZvb3RlcnMgYXQgYWxsIC0tPgotICAgIDwveHNsOndoZW4+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRzZXF1ZW5jZSA9ICdibGFuaycgYW5kICRmb290ZXJzLm9uLmJsYW5rLnBhZ2VzID0gMCI+Ci0gICAgICA8IS0tIG5vIG91dHB1dCAtLT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGNhbmRpZGF0ZSIvPgotICAgIDwveHNsOm90aGVyd2lzZT4KLSAgPC94c2w6Y2hvb3NlPgotPC94c2w6dGVtcGxhdGU+Ci0KLQotPCEtLSBmaXggYnVnIGluIGhlYWRlcnM6IGZvcmNlIHJpZ2h0LWFsaWduIHcvdHdvIDQwfDYwIGNvbHMgLS0+Ci08eHNsOnRlbXBsYXRlIG5hbWU9ImhlYWRlci50YWJsZSI+Ci0gIDx4c2w6cGFyYW0gbmFtZT0icGFnZWNsYXNzIiBzZWxlY3Q9IicnIi8+Ci0gIDx4c2w6cGFyYW0gbmFtZT0ic2VxdWVuY2UiIHNlbGVjdD0iJyciLz4KLSAgPHhzbDpwYXJhbSBuYW1lPSJnZW50ZXh0LWtleSIgc2VsZWN0PSInJyIvPgotICA8eHNsOmNob29zZT4KLSAgICA8eHNsOndoZW4gdGVzdD0iJHBhZ2VjbGFzcyA9ICdpbmRleCciPgotICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ibWFyZ2luLWxlZnQiPjBwdDwveHNsOmF0dHJpYnV0ZT4KLSAgICA8L3hzbDp3aGVuPgotICA8L3hzbDpjaG9vc2U+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iY2FuZGlkYXRlIj4KLSAgICA8Zm86dGFibGUgdGFibGUtbGF5b3V0PSJmaXhlZCIgd2lkdGg9IjEwMCUiPgotICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImhlYWQuc2VwLnJ1bGUiPgotICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFnZWNsYXNzIiBzZWxlY3Q9IiRwYWdlY2xhc3MiLz4KLSAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InNlcXVlbmNlIiBzZWxlY3Q9IiRzZXF1ZW5jZSIvPgotICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJGdlbnRleHQta2V5Ii8+Ci0gICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgotICAgICAgPGZvOnRhYmxlLWNvbHVtbiBjb2x1bW4tbnVtYmVyPSIxIiBjb2x1bW4td2lkdGg9IjQwJSIvPgotICAgICAgPGZvOnRhYmxlLWNvbHVtbiBjb2x1bW4tbnVtYmVyPSIyIiBjb2x1bW4td2lkdGg9IjYwJSIvPgotICAgICAgPGZvOnRhYmxlLWJvZHk+Ci0gICAgICAgIDxmbzp0YWJsZS1yb3cgaGVpZ2h0PSIxNHB0Ij4KLSAgICAgICAgICA8Zm86dGFibGUtY2VsbCB0ZXh0LWFsaWduPSJsZWZ0IiBkaXNwbGF5LWFsaWduPSJiZWZvcmUiPgotICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icmVsYXRpdmUtYWxpZ24iPmJhc2VsaW5lPC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgPGZvOmJsb2NrPgotICAgICAgICAgICAgICA8Zm86YmxvY2s+IDwvZm86YmxvY2s+PCEtLSBlbXB0eSBjZWxsIC0tPgotICAgICAgICAgICAgPC9mbzpibG9jaz4KLSAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+Ci0gICAgICAgICAgPGZvOnRhYmxlLWNlbGwgdGV4dC1hbGlnbj0iY2VudGVyIiBkaXNwbGF5LWFsaWduPSJiZWZvcmUiPgotICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icmVsYXRpdmUtYWxpZ24iPmJhc2VsaW5lPC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgPGZvOmJsb2NrPgotICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaGVhZGVyLmNvbnRlbnQiPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWdlY2xhc3MiIHNlbGVjdD0iJHBhZ2VjbGFzcyIvPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZXF1ZW5jZSIgc2VsZWN0PSIkc2VxdWVuY2UiLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icG9zaXRpb24iIHNlbGVjdD0iJ2NlbnRlciciLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJGdlbnRleHQta2V5Ii8+Ci0gICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gICAgICAgICAgICA8L2ZvOmJsb2NrPgotICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4KLSAgICAgICAgPC9mbzp0YWJsZS1yb3c+Ci0gICAgICA8L2ZvOnRhYmxlLWJvZHk+Ci0gICAgPC9mbzp0YWJsZT4KLSAgPC94c2w6dmFyaWFibGU+Ci0gIDwhLS0gUmVhbGx5IG91dHB1dCBhIGhlYWRlcj8gLS0+Ci0gIDx4c2w6Y2hvb3NlPgotICAgIDx4c2w6d2hlbiB0ZXN0PSIkcGFnZWNsYXNzID0gJ3RpdGxlcGFnZScgYW5kICRnZW50ZXh0LWtleSA9ICdib29rJwotICAgICAgICAgICAgICAgICAgICBhbmQgJHNlcXVlbmNlPSdmaXJzdCciPgotICAgICAgPCEtLSBubywgYm9vayB0aXRsZXBhZ2VzIGhhdmUgbm8gaGVhZGVycyBhdCBhbGwgLS0+Ci0gICAgPC94c2w6d2hlbj4KLSAgICA8eHNsOndoZW4gdGVzdD0iJHNlcXVlbmNlID0gJ2JsYW5rJyBhbmQgJGhlYWRlcnMub24uYmxhbmsucGFnZXMgPSAwIj4KLSAgICAgIDwhLS0gbm8gb3V0cHV0IC0tPgotICAgIDwveHNsOndoZW4+Ci0gICAgPHhzbDpvdGhlcndpc2U+Ci0gICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSIkY2FuZGlkYXRlIi8+Ci0gICAgPC94c2w6b3RoZXJ3aXNlPgotICA8L3hzbDpjaG9vc2U+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotCi08IS0tIEJ1Zy1maXggZm9yIFN1c2UgMTAgUGFzc2l2ZVRleCB2ZXJzaW9uIC0tPgotPCEtLSBQcmVjb21wdXRlIGF0dHJpYnV0ZSB2YWx1ZXMgJ2NvcyBQYXNzaXZlVGV4IGlzIHRvbyBzdHVwaWQ6IC0tPgotPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImNvbXBvbmVudC50aXRsZS5wcm9wZXJ0aWVzIj4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ia2VlcC13aXRoLW5leHQud2l0aGluLWNvbHVtbiI+YWx3YXlzPC94c2w6YXR0cmlidXRlPgotICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzcGFjZS1iZWZvcmUub3B0aW11bSI+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgkYm9keS5mb250Lm1hc3RlciwgJ3B0JykiLz4KLSAgPC94c2w6YXR0cmlidXRlPgotICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzcGFjZS1iZWZvcmUubWluaW11bSI+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRib2R5LmZvbnQubWFzdGVyICogMC44Ii8+Ci0gICAgPHhzbDp0ZXh0PnB0PC94c2w6dGV4dD4KLSAgPC94c2w6YXR0cmlidXRlPgotICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzcGFjZS1iZWZvcmUubWF4aW11bSI+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRib2R5LmZvbnQubWFzdGVyICogMS4yIi8+Ci0gICAgPHhzbDp0ZXh0PnB0PC94c2w6dGV4dD4KLSAgPC94c2w6YXR0cmlidXRlPgotICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJoeXBoZW5hdGUiPmZhbHNlPC94c2w6YXR0cmlidXRlPgotPC94c2w6YXR0cmlidXRlLXNldD4KLQotCi08L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnotaHRtbC54c2wgYi9VdGlsaXRpZXMvY21iemlwMi9iei1odG1sLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc4NWZmZi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iei1odG1sLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PiA8IS0tIC0qLSBzZ21sIC0qLSAtLT4KLTwhRE9DVFlQRSB4c2w6c3R5bGVzaGVldCBbIDwhRU5USVRZIGJ6LWNzcyBTWVNURU0gIi4vYnppcC5jc3MiPiBdPgotCi08eHNsOnN0eWxlc2hlZXQgCi0gICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KLQotPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvaHRtbC9kb2Nib29rLnhzbCIvPgotPHhzbDppbXBvcnQgaHJlZj0iYnotY29tbW9uLnhzbCIvPgotCi08IS0tIHVzZSA4ODU5LTEgZW5jb2RpbmcgLS0+Ci08eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGVuY29kaW5nPSJJU08tODg1OS0xIiBpbmRlbnQ9InllcyIvPgotCi08IS0tIHdlIGluY2x1ZGUgdGhlIGNzcyBkaXJlY3RseSB3aGVuIGdlbmVyYXRpbmcgb25lIGxhcmdlIGZpbGUgLS0+Ci08eHNsOnRlbXBsYXRlIG5hbWU9InVzZXIuaGVhZC5jb250ZW50Ij4gIAotICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgotICAgIDx4c2w6dGV4dD4mYnotY3NzOzwveHNsOnRleHQ+Ci0gIDwvc3R5bGU+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6ZGlmZiBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6ZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjOTk2NC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemRpZmYKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0jIS9iaW4vc2gKLSMgc2ggaXMgYnVnZ3kgb24gUlMvNjAwMCBBSVggMy4yLiBSZXBsYWNlIGFib3ZlIGxpbmUgd2l0aCAjIS9iaW4va3NoCi0KLSMgQnpjbXAvZGlmZiB3cmFwcGVkIGZvciBiemlwMiwgCi0jIGFkYXB0ZWQgZnJvbSB6ZGlmZiBieSBQaGlsaXBwZSBUcm9pbiA8cGhpbEBmaWZpLm9yZz4gZm9yIERlYmlhbiBHTlUvTGludXguCi0KLSMgQnpjbXAgYW5kIGJ6ZGlmZiBhcmUgdXNlZCB0byBpbnZva2UgdGhlIGNtcCBvciB0aGUgIGRpZmYgIHByby0KLSMgZ3JhbSAgb24gY29tcHJlc3NlZCBmaWxlcy4gIEFsbCBvcHRpb25zIHNwZWNpZmllZCBhcmUgcGFzc2VkCi0jIGRpcmVjdGx5IHRvIGNtcCBvciBkaWZmLiAgSWYgb25seSAxIGZpbGUgaXMgc3BlY2lmaWVkLCAgdGhlbgotIyB0aGUgIGZpbGVzICBjb21wYXJlZCAgYXJlIGZpbGUxIGFuZCBhbiB1bmNvbXByZXNzZWQgZmlsZTEuZ3ouCi0jIElmIHR3byBmaWxlcyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZXkgYXJlICB1bmNvbXByZXNzZWQgIChpZgotIyBuZWNlc3NhcnkpIGFuZCBmZWQgdG8gY21wIG9yIGRpZmYuICBUaGUgZXhpdCBzdGF0dXMgZnJvbSBjbXAKLSMgb3IgZGlmZiBpcyBwcmVzZXJ2ZWQuCi0KLVBBVEg9Ii91c3IvYmluOi9iaW46JFBBVEgiOyBleHBvcnQgUEFUSAotcHJvZz1gZWNobyAkMCB8IHNlZCAnc3wuKi98fCdgCi1jYXNlICIkcHJvZyIgaW4KLSAgKmNtcCkgY29tcD0ke0NNUC1jbXB9ICAgOzsKLSAgKikgICAgY29tcD0ke0RJRkYtZGlmZn0gOzsKLWVzYWMKLQotT1BUSU9OUz0KLUZJTEVTPQotZm9yIEFSRwotZG8KLSAgICBjYXNlICIkQVJHIiBpbgotICAgIC0qKSBPUFRJT05TPSIkT1BUSU9OUyAkQVJHIjs7Ci0gICAgICopIGlmIHRlc3QgLWYgIiRBUkciOyB0aGVuCi0gICAgICAgICAgICBGSUxFUz0iJEZJTEVTICRBUkciCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIiR7cHJvZ306ICRBUkcgbm90IGZvdW5kIG9yIG5vdCBhIHJlZ3VsYXIgZmlsZSIKLSAgICAgICAgZXhpdCAxCi0gICAgICAgIGZpIDs7Ci0gICAgZXNhYwotZG9uZQotaWYgdGVzdCAteiAiJEZJTEVTIjsgdGhlbgotICAgIGVjaG8gIlVzYWdlOiAkcHJvZyBbJHtjb21wfV9vcHRpb25zXSBmaWxlIFtmaWxlXSIKLSAgICBleGl0IDEKLWZpCi10bXA9YG1rdGVtcCAke1RNUERJUjotL3RtcH0vYnpkaWZmLlhYWFhYWFhYWFhgIHx8IHsKLSAgICAgIGVjaG8gJ2Nhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZScgPiYyCi0gICAgICBleGl0IDEKLX0KLXNldCAkRklMRVMKLWlmIHRlc3QgJCMgLWVxIDE7IHRoZW4KLSAgICBGSUxFPWBlY2hvICIkMSIgfCBzZWQgJ3MvLmJ6MiQvLydgCi0gICAgYnppcDIgLWNkICIkRklMRS5iejIiIHwgJGNvbXAgJE9QVElPTlMgLSAiJEZJTEUiCi0gICAgU1RBVD0iJD8iCi0KLWVsaWYgdGVzdCAkIyAtZXEgMjsgdGhlbgotICAgIGNhc2UgIiQxIiBpbgotICAgICAgICAqLmJ6MikKLSAgICAgICAgICAgICAgICBjYXNlICIkMiIgaW4KLSAgICAgICAgICAgICouYnoyKQotICAgICAgICAgICAgRj1gZWNobyAiJDIiIHwgc2VkICdzfC4qL3x8O3N8LmJ6MiR8fCdgCi0gICAgICAgICAgICAgICAgICAgICAgICBiemlwMiAtY2RmcSAiJDIiID4gJHRtcAotICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIgLWNkZnEgIiQxIiB8ICRjb21wICRPUFRJT05TIC0gJHRtcAotICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iCi0gICAgICAgICAgICAvYmluL3JtIC1mICR0bXA7OwotCi0gICAgICAgICAgICAgICAgKikgICAgICBiemlwMiAtY2RmcSAiJDEiIHwgJGNvbXAgJE9QVElPTlMgLSAiJDIiCi0gICAgICAgICAgICAgICAgICAgICAgICBTVEFUPSIkPyI7OwotICAgICAgICAgICAgICAgIGVzYWM7OwotICAgICAgICAqKSAgICAgIGNhc2UgIiQyIiBpbgotICAgICAgICAgICAgKi5iejIpCi0gICAgICAgICAgICAgICAgICAgICAgICBiemlwMiAtY2RmcSAiJDIiIHwgJGNvbXAgJE9QVElPTlMgIiQxIiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBTVEFUPSIkPyI7OwotICAgICAgICAgICAgICAgICopICAgICAgJGNvbXAgJE9QVElPTlMgIiQxIiAiJDIiCi0gICAgICAgICAgICAgICAgICAgICAgICBTVEFUPSIkPyI7OwotICAgICAgICAgICAgICAgIGVzYWM7OwotICAgIGVzYWMKLSAgICAgICAgZXhpdCAiJFNUQVQiCi1lbHNlCi0gICAgZWNobyAiVXNhZ2U6ICRwcm9nIFske2NvbXB9X29wdGlvbnNdIGZpbGUgW2ZpbGVdIgotICAgIGV4aXQgMQotZmkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6ZGlmZi4xIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpkaWZmLjEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYjdhOGUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnpkaWZmLjEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1cIlNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIHptb3JlLjEgYnkgUGhpbGlwcGUgVHJvaW4gPHBoaWxAZmlmaS5vcmc+Ci1cImZvciBEZWJpYW4gR05VL0xpbnV4Ci0uVEggQlpESUZGIDEKLS5TSCBOQU1FCi1iemNtcCwgYnpkaWZmIFwtIGNvbXBhcmUgYnppcDIgY29tcHJlc3NlZCBmaWxlcwotLlNIIFNZTk9QU0lTCi0uQiBiemNtcAotWyBjbXBfb3B0aW9ucyBdIGZpbGUxCi1bIGZpbGUyIF0KLS5icgotLkIgYnpkaWZmCi1bIGRpZmZfb3B0aW9ucyBdIGZpbGUxCi1bIGZpbGUyIF0KLS5TSCBERVNDUklQVElPTgotLkkgIEJ6Y21wCi1hbmQgCi0uSSBiemRpZmYKLWFyZSB1c2VkIHRvIGludm9rZSB0aGUKLS5JIGNtcAotb3IgdGhlCi0uSSBkaWZmCi1wcm9ncmFtIG9uIGJ6aXAyIGNvbXByZXNzZWQgZmlsZXMuICBBbGwgb3B0aW9ucyBzcGVjaWZpZWQgYXJlIHBhc3NlZAotZGlyZWN0bHkgdG8KLS5JIGNtcAotb3IKLS5JUiBkaWZmICIuIgotSWYgb25seSAxIGZpbGUgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWxlcyBjb21wYXJlZCBhcmUKLS5JIGZpbGUxCi1hbmQgYW4gdW5jb21wcmVzc2VkCi0uSVIgZmlsZTEgIi5iejIuIgotSWYgdHdvIGZpbGVzIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhleSBhcmUgdW5jb21wcmVzc2VkIGlmIG5lY2Vzc2FyeSBhbmQgZmVkIHRvCi0uSSBjbXAKLW9yCi0uSVIgZGlmZiAiLiIKLVRoZSBleGl0IHN0YXR1cyBmcm9tIAotLkkgY21wCi1vcgotLkkgZGlmZgotaXMgcHJlc2VydmVkLgotLlNIICJTRUUgQUxTTyIKLWNtcCgxKSwgZGlmZigxKSwgYnptb3JlKDEpLCBiemxlc3MoMSksIGJ6Z3JlcCgxKSwgYnppcDIoMSkKLS5TSCBCVUdTCi1NZXNzYWdlcyBmcm9tIHRoZQotLkkgY21wCi1vcgotLkkgZGlmZgotcHJvZ3JhbXMgcmVmZXIgdG8gdGVtcG9yYXJ5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIHRob3NlIHNwZWNpZmllZC4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6Z3JlcCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6Z3JlcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNjZjkxOS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemdyZXAKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBCemdyZXAgd3JhcHBlZCBmb3IgYnppcDIsIAotIyBhZGFwdGVkIGZyb20gemdyZXAgYnkgUGhpbGlwcGUgVHJvaW4gPHBoaWxAZmlmaS5vcmc+IGZvciBEZWJpYW4gR05VL0xpbnV4LgotIyMgemdyZXAgbm90aWNlOgotIyMgemdyZXAgLS0gYSB3cmFwcGVyIGFyb3VuZCBhIGdyZXAgcHJvZ3JhbSB0aGF0IGRlY29tcHJlc3NlcyBmaWxlcyBhcyBuZWVkZWQKLSMjIEFkYXB0ZWQgZnJvbSBhIHZlcnNpb24gc2VudCBieSBDaGFybGVzIExldmVydCA8Y2hhcmxlc0Bjb21tLnBvbHltdGwuY2E+Ci0KLVBBVEg9Ii91c3IvYmluOiRQQVRIIjsgZXhwb3J0IFBBVEgKLQotcHJvZz1gZWNobyAkMCB8IHNlZCAnc3wuKi98fCdgCi1jYXNlICIkcHJvZyIgaW4KLSAgICAqZWdyZXApIGdyZXA9JHtFR1JFUC1lZ3JlcH0gOzsKLSAgICAqZmdyZXApIGdyZXA9JHtGR1JFUC1mZ3JlcH0gOzsKLSAgICAqKSAgZ3JlcD0ke0dSRVAtZ3JlcH0gICA7OwotZXNhYwotcGF0PSIiCi13aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbwotICBjYXNlICIkMSIgaW4KLSAgLWUgfCAtZikgb3B0PSIkb3B0ICQxIjsgc2hpZnQ7IHBhdD0iJDEiCi0gICAgICAgICAgIGlmIHRlc3QgIiRncmVwIiA9IGdyZXA7IHRoZW4gICMgZ3JlcCBpcyBidWdneSB3aXRoIC1lIG9uIFNWUjQKLSAgICAgICAgICAgICBncmVwPWVncmVwCi0gICAgICAgICAgIGZpOzsKLSAgLUEgfCAtQikgb3B0PSIkb3B0ICQxICQyIjsgc2hpZnQ7OwotICAtKikgICAgICBvcHQ9IiRvcHQgJDEiOzsKLSAgICopICAgICAgaWYgdGVzdCAteiAiJHBhdCI7IHRoZW4KLSAgICAgICAgIHBhdD0iJDEiCi0gICAgICAgZWxzZQotICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgIGZpOzsKLSAgZXNhYwotICBzaGlmdAotZG9uZQotCi1pZiB0ZXN0IC16ICIkcGF0IjsgdGhlbgotICBlY2hvICJncmVwIHRocm91Z2ggYnppcDIgZmlsZXMiCi0gIGVjaG8gInVzYWdlOiAkcHJvZyBbZ3JlcF9vcHRpb25zXSBwYXR0ZXJuIFtmaWxlc10iCi0gIGV4aXQgMQotZmkKLQotbGlzdD0wCi1zaWxlbnQ9MAotb3A9YGVjaG8gIiRvcHQiIHwgc2VkIC1lICdzLyAvL2cnIC1lICdzLy0vL2cnYAotY2FzZSAiJG9wIiBpbgotICAqbCopIGxpc3Q9MQotZXNhYwotY2FzZSAiJG9wIiBpbgotICAqaCopIHNpbGVudD0xCi1lc2FjCi0KLWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KLSAgYnppcDIgLWNkZnEgfCAkZ3JlcCAkb3B0ICIkcGF0IgotICBleGl0ICQ/Ci1maQotCi1yZXM9MAotZm9yIGkgZG8KLSAgaWYgdGVzdCAtZiAiJGkiOyB0aGVuIDo7IGVsc2UgaWYgdGVzdCAtZiAiJGkuYnoyIjsgdGhlbiBpPSIkaS5iejIiOyBmaTsgZmkKLSAgaWYgdGVzdCAkbGlzdCAtZXEgMTsgdGhlbgotICAgIGJ6aXAyIC1jZGZxICIkaSIgfCAkZ3JlcCAkb3B0ICIkcGF0IiAyPiYxID4gL2Rldi9udWxsICYmIGVjaG8gJGkKLSAgICByPSQ/Ci0gIGVsaWYgdGVzdCAkIyAtZXEgMSAtbyAkc2lsZW50IC1lcSAxOyB0aGVuCi0gICAgYnppcDIgLWNkZnEgIiRpIiB8ICRncmVwICRvcHQgIiRwYXQiCi0gICAgcj0kPwotICBlbHNlCi0gICAgaj0ke2kvL1xcL1xcXFx9Ci0gICAgaj0ke2ovL3wvXFx8fQotICAgIGo9JHtqLy8mL1xcJn0KLSAgICBqPWBwcmludGYgIiVzIiAiJGoiIHwgdHIgJ1xuJyAnICdgCi0gICAgYnppcDIgLWNkZnEgIiRpIiB8ICRncmVwICRvcHQgIiRwYXQiIHwgc2VkICJzfF58JHtqfTp8IgotICAgIHI9JD8KLSAgZmkKLSAgdGVzdCAiJHIiIC1uZSAwICYmIHJlcz0iJHIiCi1kb25lCi1leGl0ICRyZXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6Z3JlcC4xIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpncmVwLjEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMGFmOGMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnpncmVwLjEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1cIlNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIHptb3JlLjEgYnkgUGhpbGlwcGUgVHJvaW4gPHBoaWxAZmlmaS5vcmc+Ci1cImZvciBEZWJpYW4gR05VL0xpbnV4Ci0uVEggQlpHUkVQIDEKLS5TSCBOQU1FCi1iemdyZXAsIGJ6ZmdyZXAsIGJ6ZWdyZXAgXC0gc2VhcmNoIHBvc3NpYmx5IGJ6aXAyIGNvbXByZXNzZWQgZmlsZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uCi0uU0ggU1lOT1BTSVMKLS5CIGJ6Z3JlcAotWyBncmVwX29wdGlvbnMgXQotLkJJICBbXCAtZVwgXSAiIHBhdHRlcm4iCi0uSVIgZmlsZW5hbWUgIi5cfC5cfC4iCi0uYnIKLS5CIGJ6ZWdyZXAKLVsgZWdyZXBfb3B0aW9ucyBdCi0uQkkgIFtcIC1lXCBdICIgcGF0dGVybiIKLS5JUiBmaWxlbmFtZSAiLlx8Llx8LiIKLS5icgotLkIgYnpmZ3JlcAotWyBmZ3JlcF9vcHRpb25zIF0KLS5CSSAgW1wgLWVcIF0gIiBwYXR0ZXJuIgotLklSIGZpbGVuYW1lICIuXHwuXHwuIgotLlNIIERFU0NSSVBUSU9OCi0uSVIgIEJ6Z3JlcAotaXMgdXNlZCB0byBpbnZva2UgdGhlCi0uSSBncmVwCi1vbiBiemlwMi1jb21wcmVzc2VkIGZpbGVzLiBBbGwgb3B0aW9ucyBzcGVjaWZpZWQgYXJlIHBhc3NlZCBkaXJlY3RseSB0bwotLkkgZ3JlcC4KLUlmIG5vIGZpbGUgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBzdGFuZGFyZCBpbnB1dCBpcyBkZWNvbXByZXNzZWQKLWlmIG5lY2Vzc2FyeSBhbmQgZmVkIHRvIGdyZXAuCi1PdGhlcndpc2UgdGhlIGdpdmVuIGZpbGVzIGFyZSB1bmNvbXByZXNzZWQgaWYgbmVjZXNzYXJ5IGFuZCBmZWQgdG8KLS5JIGdyZXAuCi0uUFAKLUlmCi0uSSBiemdyZXAKLWlzIGludm9rZWQgYXMKLS5JIGJ6ZWdyZXAKLW9yCi0uSSBiemZncmVwCi10aGVuCi0uSSBlZ3JlcAotb3IKLS5JIGZncmVwCi1pcyB1c2VkIGluc3RlYWQgb2YKLS5JIGdyZXAuCi1JZiB0aGUgR1JFUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsCi0uSSBiemdyZXAKLXVzZXMgaXQgYXMgdGhlCi0uSSBncmVwCi1wcm9ncmFtIHRvIGJlIGludm9rZWQuIEZvciBleGFtcGxlOgotCi0gICAgZm9yIHNoOiAgR1JFUD1mZ3JlcCAgYnpncmVwIHN0cmluZyBmaWxlcwotICAgIGZvciBjc2g6IChzZXRlbnYgR1JFUCBmZ3JlcDsgYnpncmVwIHN0cmluZyBmaWxlcykKLS5TSCBBVVRIT1IKLUNoYXJsZXMgTGV2ZXJ0IChjaGFybGVzQGNvbW0ucG9seW10bC5jYSkuIEFkYXB0ZWQgdG8gYnppcDIgYnkgUGhpbGlwcGUKLVRyb2luIDxwaGlsQGZpZmkub3JnPiBmb3IgRGViaWFuIEdOVS9MaW51eC4KLS5TSCAiU0VFIEFMU08iCi1ncmVwKDEpLCBlZ3JlcCgxKSwgZmdyZXAoMSksIGJ6ZGlmZigxKSwgYnptb3JlKDEpLCBiemxlc3MoMSksIGJ6aXAyKDEpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemlwLmNzcyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmViNDAxLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyogQ29sb3VyczoKLSM3NDI0MGYgIGRhcmsgYnJvd24gICAgICBoMSwgaDIsIGgzLCBoNAotIzMzNjY5OSAgbWVkaXVtIGJsdWUgICAgIGxpbmtzCi0jMzM5OTk5ICB0dXJxdW9pc2UgICAgICAgbGluayBob3ZlciBjb2xvdXIKLSMyMDIwMjAgIGFsbW9zdCBibGFjayAgICBnZW5lcmFsIHRleHQKLSM3NjE1OTYgIHB1cnBsZSAgICAgICAgICBtZDVzdW0gdGV4dAotIzYyNjI2MiAgZGFyayBncmF5ICAgICAgIHByZSBib3JkZXIKLSNlZWVlZWUgIHZlcnkgbGlnaHQgZ3JheSBwcmUgYmFja2dyb3VuZAotI2YyZjJmOSAgdmVyeSBsaWdodCBibHVlIG5hdiB0YWJsZSBiYWNrZ3JvdW5kCi0jMzM2NmNjICBtZWRpdW0gYmx1ZSAgICAgbmF2IHRhYmxlIGJvcmRlcgotKi8KLQotYSwgYTpsaW5rLCBhOnZpc2l0ZWQsIGE6YWN0aXZlIHsgY29sb3I6ICMzMzY2OTk7IH0KLWE6aG92ZXIgeyBjb2xvcjogIzMzOTk5OTsgfQotCi1ib2R5IHsgZm9udDogODAlLzEyNiUgc2Fucy1zZXJpZjsgfQotaDEsIGgyLCBoMywgaDQgeyBjb2xvcjogIzc0MjQwZjsgfQotCi1kdCB7IGNvbG9yOiAjMzM2Njk5OyBmb250LXdlaWdodDogYm9sZCB9Ci1kZCB7IAotIG1hcmdpbi1sZWZ0OiAxLjVlbTsgCi0gcGFkZGluZy1ib3R0b206IDAuOGVtOwotfQotCi0vKiAtLSBydWxlciAtLSAqLwotZGl2LmhyX2JsdWUgeyAKLSAgaGVpZ2h0OiAgM3B4OyAKLSAgYmFja2dyb3VuZDojZmZmZmZmIHVybCgiL2ltYWdlcy9ocl9ibHVlLnBuZyIpIHJlcGVhdC14OyB9Ci1kaXYuaHJfYmx1ZSBociB7IGRpc3BsYXk6bm9uZTsgfQotCi0vKiByZWxlYXNlIHN0eWxlcyAqLwotI3JlbGVhc2UgcCB7IG1hcmdpbi10b3A6IDAuNGVtOyB9Ci0jcmVsZWFzZSAubWQ1c3VtIHsgY29sb3I6ICM3NjE1OTY7IH0KLQotCi0vKiAtLS0tLS0gc3R5bGVzIGZvciBkb2NzfG1hbnVhbHN8aG93dG8gLS0tLS0tICovCi0vKiAtLSBsaXN0cyAtLSAqLwotdWwgIHsgCi0gbWFyZ2luOiAgICAgMHB4IDRweCAxNnB4IDE2cHg7Ci0gcGFkZGluZzogICAgMHB4OwotIGxpc3Qtc3R5bGU6IHVybCgiL2ltYWdlcy9saS1ibHVlLnBuZyIpOyAKLX0KLXVsIGxpIHsgCi0gbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLXVsIHVsICAgeyAKLSBsaXN0LXN0eWxlLXR5cGU6ICBub25lOyAKLSBsaXN0LXN0eWxlLWltYWdlOiBub25lOyAKLSBtYXJnaW4tbGVmdDogICAgICAwcHg7IAotfQotCi0vKiBoZWFkZXIgLyBmb290ZXIgbmF2IHRhYmxlcyAqLwotdGFibGUubmF2IHsKLSBib3JkZXI6ICAgICBzb2xpZCAxcHggIzMzNjZjYzsKLSBiYWNrZ3JvdW5kOiAjZjJmMmY5OwotIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjk7Ci0gbWFyZ2luLWJvdHRvbTogMC41ZW07Ci19Ci0vKiBkb24ndCBoYXZlIHVuZGVybGluZWQgbGlua3MgaW4gY2h1bmtlZCBuYXYgbWVudXMgKi8KLXRhYmxlLm5hdiBhIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ci10YWJsZS5uYXYgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Ci10YWJsZS5uYXYgdGQgeyBmb250LXNpemU6IDg1JTsgfQotCi1jb2RlLCB0dCwgcHJlIHsgZm9udC1zaXplOiAxMjAlOyB9Ci1jb2RlLCB0dCB7IGNvbG9yOiAjNzYxNTk2OyB9Ci0KLWRpdi5saXRlcmFsbGF5b3V0LCBwcmUucHJvZ3JhbWxpc3RpbmcsIHByZS5zY3JlZW4gewotIGNvbG9yOiAgICAgICMwMDAwMDA7Ci0gcGFkZGluZzogICAgMC41ZW07Ci0gYmFja2dyb3VuZDogI2VlZWVlZTsKLSBib3JkZXI6ICAgICAxcHggc29saWQgIzYyNjI2MjsKLSBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwotIG1hcmdpbjogNHB4IDBweCA0cHggMHB4OyAKLX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLjEgYi9VdGlsaXRpZXMvY21iemlwMi9iemlwMi4xCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzEzZjJkLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLjEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBAQAotLlBVCi0uVEggYnppcDIgMQotLlNIIE5BTUUKLWJ6aXAyLCBidW56aXAyIFwtIGEgYmxvY2stc29ydGluZyBmaWxlIGNvbXByZXNzb3IsIHYxLjAuNAotLmJyCi1iemNhdCBcLSBkZWNvbXByZXNzZXMgZmlsZXMgdG8gc3Rkb3V0Ci0uYnIKLWJ6aXAycmVjb3ZlciBcLSByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlcwotCi0uU0ggU1lOT1BTSVMKLS5sbCArOAotLkIgYnppcDIKLS5SQiBbICIgXC1jZGZrcXN0dnpWTDEyMzQ1Njc4OSAiIF0KLVsKLS5JICJmaWxlbmFtZXMgXCYuLi4iCi1dCi0ubGwgLTgKLS5icgotLkIgYnVuemlwMgotLlJCIFsgIiBcLWZrdnNWTCAiIF0KLVsgCi0uSSAiZmlsZW5hbWVzIFwmLi4uIgotXQotLmJyCi0uQiBiemNhdAotLlJCIFsgIiBcLXMgIiBdCi1bIAotLkkgImZpbGVuYW1lcyBcJi4uLiIKLV0KLS5icgotLkIgYnppcDJyZWNvdmVyCi0uSSAiZmlsZW5hbWUiCi0KLS5TSCBERVNDUklQVElPTgotLkkgYnppcDIKLWNvbXByZXNzZXMgZmlsZXMgdXNpbmcgdGhlIEJ1cnJvd3MtV2hlZWxlciBibG9jayBzb3J0aW5nCi10ZXh0IGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYW5kIEh1ZmZtYW4gY29kaW5nLiAgQ29tcHJlc3Npb24gaXMKLWdlbmVyYWxseSBjb25zaWRlcmFibHkgYmV0dGVyIHRoYW4gdGhhdCBhY2hpZXZlZCBieSBtb3JlIGNvbnZlbnRpb25hbAotTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFBQTQotZmFtaWx5IG9mIHN0YXRpc3RpY2FsIGNvbXByZXNzb3JzLgotCi1UaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgdG8gCi10aG9zZSBvZiAKLS5JIEdOVSBnemlwLCAKLWJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLgotCi0uSSBiemlwMgotZXhwZWN0cyBhIGxpc3Qgb2YgZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlCi1jb21tYW5kLWxpbmUgZmxhZ3MuICBFYWNoIGZpbGUgaXMgcmVwbGFjZWQgYnkgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YKLWl0c2VsZiwgd2l0aCB0aGUgbmFtZSAib3JpZ2luYWxfbmFtZS5iejIiLiAgCi1FYWNoIGNvbXByZXNzZWQgZmlsZQotaGFzIHRoZSBzYW1lIG1vZGlmaWNhdGlvbiBkYXRlLCBwZXJtaXNzaW9ucywgYW5kLCB3aGVuIHBvc3NpYmxlLAotb3duZXJzaGlwIGFzIHRoZSBjb3JyZXNwb25kaW5nIG9yaWdpbmFsLCBzbyB0aGF0IHRoZXNlIHByb3BlcnRpZXMgY2FuCi1iZSBjb3JyZWN0bHkgcmVzdG9yZWQgYXQgZGVjb21wcmVzc2lvbiB0aW1lLiAgRmlsZSBuYW1lIGhhbmRsaW5nIGlzCi1uYWl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIHByZXNlcnZpbmcgb3JpZ2luYWwKLWZpbGUgbmFtZXMsIHBlcm1pc3Npb25zLCBvd25lcnNoaXBzIG9yIGRhdGVzIGluIGZpbGVzeXN0ZW1zIHdoaWNoIGxhY2sKLXRoZXNlIGNvbmNlcHRzLCBvciBoYXZlIHNlcmlvdXMgZmlsZSBuYW1lIGxlbmd0aCByZXN0cmljdGlvbnMsIHN1Y2ggYXMKLU1TLURPUy4KLQotLkkgYnppcDIKLWFuZAotLkkgYnVuemlwMgotd2lsbCBieSBkZWZhdWx0IG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcKLWZpbGVzLiAgSWYgeW91IHdhbnQgdGhpcyB0byBoYXBwZW4sIHNwZWNpZnkgdGhlIFwtZiBmbGFnLgotCi1JZiBubyBmaWxlIG5hbWVzIGFyZSBzcGVjaWZpZWQsCi0uSSBiemlwMgotY29tcHJlc3NlcyBmcm9tIHN0YW5kYXJkCi1pbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIGNhc2UsCi0uSSBiemlwMgotd2lsbCBkZWNsaW5lIHRvCi13cml0ZSBjb21wcmVzc2VkIG91dHB1dCB0byBhIHRlcm1pbmFsLCBhcyB0aGlzIHdvdWxkIGJlIGVudGlyZWx5Ci1pbmNvbXByZWhlbnNpYmxlIGFuZCB0aGVyZWZvcmUgcG9pbnRsZXNzLgotCi0uSSBidW56aXAyCi0ob3IKLS5JIGJ6aXAyIFwtZCkgCi1kZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMuICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5IAotLkkgYnppcDIKLXdpbGwgYmUgZGV0ZWN0ZWQgYW5kIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXNzdWVkLiAgCi0uSSBiemlwMgotYXR0ZW1wdHMgdG8gZ3Vlc3MgdGhlIGZpbGVuYW1lIGZvciB0aGUgZGVjb21wcmVzc2VkIGZpbGUgCi1mcm9tIHRoYXQgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSBhcyBmb2xsb3dzOgotCi0gICAgICAgZmlsZW5hbWUuYnoyICAgIGJlY29tZXMgICBmaWxlbmFtZQotICAgICAgIGZpbGVuYW1lLmJ6ICAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICBmaWxlbmFtZS50YnoyICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgotICAgICAgIGZpbGVuYW1lLnRieiAgICBiZWNvbWVzICAgZmlsZW5hbWUudGFyCi0gICAgICAgYW55b3RoZXJuYW1lICAgIGJlY29tZXMgICBhbnlvdGhlcm5hbWUub3V0Ci0KLUlmIHRoZSBmaWxlIGRvZXMgbm90IGVuZCBpbiBvbmUgb2YgdGhlIHJlY29nbmlzZWQgZW5kaW5ncywgCi0uSSAuYnoyLCAKLS5JIC5ieiwgCi0uSSAudGJ6Mgotb3IKLS5JIC50YnosIAotLkkgYnppcDIgCi1jb21wbGFpbnMgdGhhdCBpdCBjYW5ub3QKLWd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwgbmFtZQotd2l0aAotLkkgLm91dAotYXBwZW5kZWQuCi0KLUFzIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubwotZmlsZW5hbWVzIGNhdXNlcyBkZWNvbXByZXNzaW9uIGZyb20gCi1zdGFuZGFyZCBpbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuCi0KLS5JIGJ1bnppcDIgCi13aWxsIGNvcnJlY3RseSBkZWNvbXByZXNzIGEgZmlsZSB3aGljaCBpcyB0aGUKLWNvbmNhdGVuYXRpb24gb2YgdHdvIG9yIG1vcmUgY29tcHJlc3NlZCBmaWxlcy4gIFRoZSByZXN1bHQgaXMgdGhlCi1jb25jYXRlbmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIHVuY29tcHJlc3NlZCBmaWxlcy4gIEludGVncml0eQotdGVzdGluZyAoXC10KSAKLW9mIGNvbmNhdGVuYXRlZCAKLWNvbXByZXNzZWQgZmlsZXMgaXMgYWxzbyBzdXBwb3J0ZWQuCi0KLVlvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgYnkKLWdpdmluZyB0aGUgXC1jIGZsYWcuICBNdWx0aXBsZSBmaWxlcyBtYXkgYmUgY29tcHJlc3NlZCBhbmQKLWRlY29tcHJlc3NlZCBsaWtlIHRoaXMuICBUaGUgcmVzdWx0aW5nIG91dHB1dHMgYXJlIGZlZCBzZXF1ZW50aWFsbHkgdG8KLXN0ZG91dC4gIENvbXByZXNzaW9uIG9mIG11bHRpcGxlIGZpbGVzIAotaW4gdGhpcyBtYW5uZXIgZ2VuZXJhdGVzIGEgc3RyZWFtCi1jb250YWluaW5nIG11bHRpcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtCi1jYW4gYmUgZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5IGJ5Ci0uSSBiemlwMiAKLXZlcnNpb24gMC45LjAgb3IKLWxhdGVyLiAgRWFybGllciB2ZXJzaW9ucyBvZgotLkkgYnppcDIKLXdpbGwgc3RvcCBhZnRlciBkZWNvbXByZXNzaW5nCi10aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0uSSBiemNhdAotKG9yCi0uSSBiemlwMiAtZGMpIAotZGVjb21wcmVzc2VzIGFsbCBzcGVjaWZpZWQgZmlsZXMgdG8KLXRoZSBzdGFuZGFyZCBvdXRwdXQuCi0KLS5JIGJ6aXAyCi13aWxsIHJlYWQgYXJndW1lbnRzIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotLkkgQlpJUDIKLWFuZAotLkkgQlpJUCwKLWluIHRoYXQgb3JkZXIsIGFuZCB3aWxsIHByb2Nlc3MgdGhlbQotYmVmb3JlIGFueSBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGdpdmVzIGEgCi1jb252ZW5pZW50IHdheSB0byBzdXBwbHkgZGVmYXVsdCBhcmd1bWVudHMuCi0KLUNvbXByZXNzaW9uIGlzIGFsd2F5cyBwZXJmb3JtZWQsIGV2ZW4gaWYgdGhlIGNvbXByZXNzZWQgCi1maWxlIGlzIHNsaWdodGx5Ci1sYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwuICBGaWxlcyBvZiBsZXNzIHRoYW4gYWJvdXQgb25lIGh1bmRyZWQgYnl0ZXMKLXRlbmQgdG8gZ2V0IGxhcmdlciwgc2luY2UgdGhlIGNvbXByZXNzaW9uIG1lY2hhbmlzbSBoYXMgYSBjb25zdGFudAotb3ZlcmhlYWQgaW4gdGhlIHJlZ2lvbiBvZiA1MCBieXRlcy4gIFJhbmRvbSBkYXRhIChpbmNsdWRpbmcgdGhlIG91dHB1dAotb2YgbW9zdCBmaWxlIGNvbXByZXNzb3JzKSBpcyBjb2RlZCBhdCBhYm91dCA4LjA1IGJpdHMgcGVyIGJ5dGUsIGdpdmluZwotYW4gZXhwYW5zaW9uIG9mIGFyb3VuZCAwLjUlLgotCi1BcyBhIHNlbGYtY2hlY2sgZm9yIHlvdXIgcHJvdGVjdGlvbiwgCi0uSSAKLWJ6aXAyCi11c2VzIDMyLWJpdCBDUkNzIHRvCi1tYWtlIHN1cmUgdGhhdCB0aGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgYSBmaWxlIGlzIGlkZW50aWNhbCB0byB0aGUKLW9yaWdpbmFsLiAgVGhpcyBndWFyZHMgYWdhaW5zdCBjb3JydXB0aW9uIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZAotYWdhaW5zdCB1bmRldGVjdGVkIGJ1Z3MgaW4KLS5JIGJ6aXAyCi0oaG9wZWZ1bGx5IHZlcnkgdW5saWtlbHkpLiAgVGhlCi1jaGFuY2VzIG9mIGRhdGEgY29ycnVwdGlvbiBnb2luZyB1bmRldGVjdGVkIGlzIG1pY3Jvc2NvcGljLCBhYm91dCBvbmUKLWNoYW5jZSBpbiBmb3VyIGJpbGxpb24gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBCZSBhd2FyZSwgdGhvdWdoLCB0aGF0Ci10aGUgY2hlY2sgb2NjdXJzIHVwb24gZGVjb21wcmVzc2lvbiwgc28gaXQgY2FuIG9ubHkgdGVsbCB5b3UgdGhhdAotc29tZXRoaW5nIGlzIHdyb25nLiAgSXQgY2FuJ3QgaGVscCB5b3UgCi1yZWNvdmVyIHRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQKLWRhdGEuICBZb3UgY2FuIHVzZSAKLS5JIGJ6aXAycmVjb3ZlcgotdG8gdHJ5IHRvIHJlY292ZXIgZGF0YSBmcm9tCi1kYW1hZ2VkIGZpbGVzLgotCi1SZXR1cm4gdmFsdWVzOiAwIGZvciBhIG5vcm1hbCBleGl0LCAxIGZvciBlbnZpcm9ubWVudGFsIHByb2JsZW1zIChmaWxlCi1ub3QgZm91bmQsIGludmFsaWQgZmxhZ3MsIEkvTyBlcnJvcnMsICZjKSwgMiB0byBpbmRpY2F0ZSBhIGNvcnJ1cHQKLWNvbXByZXNzZWQgZmlsZSwgMyBmb3IgYW4gaW50ZXJuYWwgY29uc2lzdGVuY3kgZXJyb3IgKGVnLCBidWcpIHdoaWNoCi1jYXVzZWQKLS5JIGJ6aXAyCi10byBwYW5pYy4KLQotLlNIIE9QVElPTlMKLS5UUAotLkIgXC1jIC0tc3Rkb3V0Ci1Db21wcmVzcyBvciBkZWNvbXByZXNzIHRvIHN0YW5kYXJkIG91dHB1dC4KLS5UUAotLkIgXC1kIC0tZGVjb21wcmVzcwotRm9yY2UgZGVjb21wcmVzc2lvbi4gIAotLkkgYnppcDIsIAotLkkgYnVuemlwMiAKLWFuZAotLkkgYnpjYXQgCi1hcmUKLXJlYWxseSB0aGUgc2FtZSBwcm9ncmFtLCBhbmQgdGhlIGRlY2lzaW9uIGFib3V0IHdoYXQgYWN0aW9ucyB0byB0YWtlIGlzCi1kb25lIG9uIHRoZSBiYXNpcyBvZiB3aGljaCBuYW1lIGlzIHVzZWQuICBUaGlzIGZsYWcgb3ZlcnJpZGVzIHRoYXQKLW1lY2hhbmlzbSwgYW5kIGZvcmNlcyAKLS5JIGJ6aXAyCi10byBkZWNvbXByZXNzLgotLlRQCi0uQiBcLXogLS1jb21wcmVzcwotVGhlIGNvbXBsZW1lbnQgdG8gXC1kOiBmb3JjZXMgY29tcHJlc3Npb24sIHJlZ2FyZGxlc3Mgb2YgdGhlCi1pbnZvY2F0aW9uIG5hbWUuCi0uVFAKLS5CIFwtdCAtLXRlc3QKLUNoZWNrIGludGVncml0eSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocyksIGJ1dCBkb24ndCBkZWNvbXByZXNzIHRoZW0uCi1UaGlzIHJlYWxseSBwZXJmb3JtcyBhIHRyaWFsIGRlY29tcHJlc3Npb24gYW5kIHRocm93cyBhd2F5IHRoZSByZXN1bHQuCi0uVFAKLS5CIFwtZiAtLWZvcmNlCi1Gb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgTm9ybWFsbHksCi0uSSBiemlwMiAKLXdpbGwgbm90IG92ZXJ3cml0ZQotZXhpc3Rpbmcgb3V0cHV0IGZpbGVzLiAgQWxzbyBmb3JjZXMgCi0uSSBiemlwMiAKLXRvIGJyZWFrIGhhcmQgbGlua3MKLXRvIGZpbGVzLCB3aGljaCBpdCBvdGhlcndpc2Ugd291bGRuJ3QgZG8uCi0KLWJ6aXAyIG5vcm1hbGx5IGRlY2xpbmVzIHRvIGRlY29tcHJlc3MgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGUKLWNvcnJlY3QgbWFnaWMgaGVhZGVyIGJ5dGVzLiAgSWYgZm9yY2VkICgtZiksIGhvd2V2ZXIsIGl0IHdpbGwgcGFzcwotc3VjaCBmaWxlcyB0aHJvdWdoIHVubW9kaWZpZWQuICBUaGlzIGlzIGhvdyBHTlUgZ3ppcCBiZWhhdmVzLgotLlRQCi0uQiBcLWsgLS1rZWVwCi1LZWVwIChkb24ndCBkZWxldGUpIGlucHV0IGZpbGVzIGR1cmluZyBjb21wcmVzc2lvbgotb3IgZGVjb21wcmVzc2lvbi4KLS5UUAotLkIgXC1zIC0tc21hbGwKLVJlZHVjZSBtZW1vcnkgdXNhZ2UsIGZvciBjb21wcmVzc2lvbiwgZGVjb21wcmVzc2lvbiBhbmQgdGVzdGluZy4gIEZpbGVzCi1hcmUgZGVjb21wcmVzc2VkIGFuZCB0ZXN0ZWQgdXNpbmcgYSBtb2RpZmllZCBhbGdvcml0aG0gd2hpY2ggb25seQotcmVxdWlyZXMgMi41IGJ5dGVzIHBlciBibG9jayBieXRlLiAgVGhpcyBtZWFucyBhbnkgZmlsZSBjYW4gYmUKLWRlY29tcHJlc3NlZCBpbiAyMzAwayBvZiBtZW1vcnksIGFsYmVpdCBhdCBhYm91dCBoYWxmIHRoZSBub3JtYWwgc3BlZWQuCi0KLUR1cmluZyBjb21wcmVzc2lvbiwgXC1zIHNlbGVjdHMgYSBibG9jayBzaXplIG9mIDIwMGssIHdoaWNoIGxpbWl0cwotbWVtb3J5IHVzZSB0byBhcm91bmQgdGhlIHNhbWUgZmlndXJlLCBhdCB0aGUgZXhwZW5zZSBvZiB5b3VyIGNvbXByZXNzaW9uCi1yYXRpby4gIEluIHNob3J0LCBpZiB5b3VyIG1hY2hpbmUgaXMgbG93IG9uIG1lbW9yeSAoOCBtZWdhYnl0ZXMgb3IKLWxlc3MpLCB1c2UgXC1zIGZvciBldmVyeXRoaW5nLiAgU2VlIE1FTU9SWSBNQU5BR0VNRU5UIGJlbG93LgotLlRQCi0uQiBcLXEgLS1xdWlldAotU3VwcHJlc3Mgbm9uLWVzc2VudGlhbCB3YXJuaW5nIG1lc3NhZ2VzLiAgTWVzc2FnZXMgcGVydGFpbmluZyB0bwotSS9PIGVycm9ycyBhbmQgb3RoZXIgY3JpdGljYWwgZXZlbnRzIHdpbGwgbm90IGJlIHN1cHByZXNzZWQuCi0uVFAKLS5CIFwtdiAtLXZlcmJvc2UKLVZlcmJvc2UgbW9kZSAtLSBzaG93IHRoZSBjb21wcmVzc2lvbiByYXRpbyBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4KLUZ1cnRoZXIgXC12J3MgaW5jcmVhc2UgdGhlIHZlcmJvc2l0eSBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZgotaW5mb3JtYXRpb24gd2hpY2ggaXMgcHJpbWFyaWx5IG9mIGludGVyZXN0IGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLgotLlRQCi0uQiBcLUwgLS1saWNlbnNlIC1WIC0tdmVyc2lvbgotRGlzcGxheSB0aGUgc29mdHdhcmUgdmVyc2lvbiwgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KLS5UUAotLkIgXC0xIChvciBcLVwtZmFzdCkgdG8gXC05IChvciBcLVwtYmVzdCkKLVNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4gIDkwMCBrIHdoZW4gY29tcHJlc3NpbmcuICBIYXMgbm8KLWVmZmVjdCB3aGVuIGRlY29tcHJlc3NpbmcuICBTZWUgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuCi1UaGUgXC1cLWZhc3QgYW5kIFwtXC1iZXN0IGFsaWFzZXMgYXJlIHByaW1hcmlseSBmb3IgR05VIGd6aXAgCi1jb21wYXRpYmlsaXR5LiAgSW4gcGFydGljdWxhciwgXC1cLWZhc3QgZG9lc24ndCBtYWtlIHRoaW5ncwotc2lnbmlmaWNhbnRseSBmYXN0ZXIuICAKLUFuZCBcLVwtYmVzdCBtZXJlbHkgc2VsZWN0cyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCi0uVFAKLS5CIFwtLQotVHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLCBldmVuIGlmIHRoZXkgc3RhcnQKLXdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbmRsZSBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZwotd2l0aCBhIGRhc2gsIGZvciBleGFtcGxlOiBiemlwMiBcLS0gXC1teWZpbGVuYW1lLgotLlRQCi0uQiBcLS1yZXBldGl0aXZlLWZhc3QgLS1yZXBldGl0aXZlLWJlc3QKLVRoZXNlIGZsYWdzIGFyZSByZWR1bmRhbnQgaW4gdmVyc2lvbnMgMC45LjUgYW5kIGFib3ZlLiAgVGhleSBwcm92aWRlZAotc29tZSBjb2Fyc2UgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluCi1lYXJsaWVyIHZlcnNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZSBoYXZlIGFuCi1pbXByb3ZlZCBhbGdvcml0aG0gd2hpY2ggcmVuZGVycyB0aGVzZSBmbGFncyBpcnJlbGV2YW50LgotCi0uU0ggTUVNT1JZIE1BTkFHRU1FTlQKLS5JIGJ6aXAyIAotY29tcHJlc3NlcyBsYXJnZSBmaWxlcyBpbiBibG9ja3MuICBUaGUgYmxvY2sgc2l6ZSBhZmZlY3RzCi1ib3RoIHRoZSBjb21wcmVzc2lvbiByYXRpbyBhY2hpZXZlZCwgYW5kIHRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCBmb3IKLWNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLiAgVGhlIGZsYWdzIFwtMSB0aHJvdWdoIFwtOQotc3BlY2lmeSB0aGUgYmxvY2sgc2l6ZSB0byBiZSAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlCi1kZWZhdWx0KSByZXNwZWN0aXZlbHkuICBBdCBkZWNvbXByZXNzaW9uIHRpbWUsIHRoZSBibG9jayBzaXplIHVzZWQgZm9yCi1jb21wcmVzc2lvbiBpcyByZWFkIGZyb20gdGhlIGhlYWRlciBvZiB0aGUgY29tcHJlc3NlZCBmaWxlLCBhbmQKLS5JIGJ1bnppcDIKLXRoZW4gYWxsb2NhdGVzIGl0c2VsZiBqdXN0IGVub3VnaCBtZW1vcnkgdG8gZGVjb21wcmVzcwotdGhlIGZpbGUuICBTaW5jZSBibG9jayBzaXplcyBhcmUgc3RvcmVkIGluIGNvbXByZXNzZWQgZmlsZXMsIGl0IGZvbGxvd3MKLXRoYXQgdGhlIGZsYWdzIFwtMSB0byBcLTkgYXJlIGlycmVsZXZhbnQgdG8gYW5kIHNvIGlnbm9yZWQKLWR1cmluZyBkZWNvbXByZXNzaW9uLgotCi1Db21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMsIAotaW4gYnl0ZXMsIGNhbiBiZSBlc3RpbWF0ZWQgYXM6Ci0KLSAgICAgICBDb21wcmVzc2lvbjogICA0MDBrICsgKCA4IHggYmxvY2sgc2l6ZSApCi0KLSAgICAgICBEZWNvbXByZXNzaW9uOiAxMDBrICsgKCA0IHggYmxvY2sgc2l6ZSApLCBvcgotICAgICAgICAgICAgICAgICAgICAgIDEwMGsgKyAoIDIuNSB4IGJsb2NrIHNpemUgKQotCi1MYXJnZXIgYmxvY2sgc2l6ZXMgZ2l2ZSByYXBpZGx5IGRpbWluaXNoaW5nIG1hcmdpbmFsIHJldHVybnMuICBNb3N0IG9mCi10aGUgY29tcHJlc3Npb24gY29tZXMgZnJvbSB0aGUgZmlyc3QgdHdvIG9yIHRocmVlIGh1bmRyZWQgayBvZiBibG9jawotc2l6ZSwgYSBmYWN0IHdvcnRoIGJlYXJpbmcgaW4gbWluZCB3aGVuIHVzaW5nCi0uSSBiemlwMgotb24gc21hbGwgbWFjaGluZXMuCi1JdCBpcyBhbHNvIGltcG9ydGFudCB0byBhcHByZWNpYXRlIHRoYXQgdGhlIGRlY29tcHJlc3Npb24gbWVtb3J5Ci1yZXF1aXJlbWVudCBpcyBzZXQgYXQgY29tcHJlc3Npb24gdGltZSBieSB0aGUgY2hvaWNlIG9mIGJsb2NrIHNpemUuCi0KLUZvciBmaWxlcyBjb21wcmVzc2VkIHdpdGggdGhlIGRlZmF1bHQgOTAwayBibG9jayBzaXplLAotLkkgYnVuemlwMgotd2lsbCByZXF1aXJlIGFib3V0IDM3MDAga2J5dGVzIHRvIGRlY29tcHJlc3MuICBUbyBzdXBwb3J0IGRlY29tcHJlc3Npb24KLW9mIGFueSBmaWxlIG9uIGEgNCBtZWdhYnl0ZSBtYWNoaW5lLCAKLS5JIGJ1bnppcDIKLWhhcyBhbiBvcHRpb24gdG8KLWRlY29tcHJlc3MgdXNpbmcgYXBwcm94aW1hdGVseSBoYWxmIHRoaXMgYW1vdW50IG9mIG1lbW9yeSwgYWJvdXQgMjMwMAota2J5dGVzLiAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwgc28geW91IHNob3VsZCB1c2UgdGhpcwotb3B0aW9uIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50IGZsYWcgaXMgLXMuCi0KLUluIGdlbmVyYWwsIHRyeSBhbmQgdXNlIHRoZSBsYXJnZXN0IGJsb2NrIHNpemUgbWVtb3J5IGNvbnN0cmFpbnRzIGFsbG93LAotc2luY2UgdGhhdCBtYXhpbWlzZXMgdGhlIGNvbXByZXNzaW9uIGFjaGlldmVkLiAgQ29tcHJlc3Npb24gYW5kCi1kZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0dWFsbHkgdW5hZmZlY3RlZCBieSBibG9jayBzaXplLgotCi1Bbm90aGVyIHNpZ25pZmljYW50IHBvaW50IGFwcGxpZXMgdG8gZmlsZXMgd2hpY2ggZml0IGluIGEgc2luZ2xlIGJsb2NrCi0tLSB0aGF0IG1lYW5zIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyIHVzaW5nIGEgbGFyZ2UgYmxvY2sgc2l6ZS4gIFRoZQotYW1vdW50IG9mIHJlYWwgbWVtb3J5IHRvdWNoZWQgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBmaWxlLAotc2luY2UgdGhlIGZpbGUgaXMgc21hbGxlciB0aGFuIGEgYmxvY2suICBGb3IgZXhhbXBsZSwgY29tcHJlc3NpbmcgYSBmaWxlCi0yMCwwMDAgYnl0ZXMgbG9uZyB3aXRoIHRoZSBmbGFnIC05IHdpbGwgY2F1c2UgdGhlIGNvbXByZXNzb3IgdG8KLWFsbG9jYXRlIGFyb3VuZCA3NjAwayBvZiBtZW1vcnksIGJ1dCBvbmx5IHRvdWNoIDQwMGsgKyAyMDAwMCAqIDggPSA1NjAKLWtieXRlcyBvZiBpdC4gIFNpbWlsYXJseSwgdGhlIGRlY29tcHJlc3NvciB3aWxsIGFsbG9jYXRlIDM3MDBrIGJ1dCBvbmx5Ci10b3VjaCAxMDBrICsgMjAwMDAgKiA0ID0gMTgwIGtieXRlcy4KLQotSGVyZSBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlIGZvciBkaWZmZXJlbnQKLWJsb2NrIHNpemVzLiAgQWxzbyByZWNvcmRlZCBpcyB0aGUgdG90YWwgY29tcHJlc3NlZCBzaXplIGZvciAxNCBmaWxlcyBvZgotdGhlIENhbGdhcnkgVGV4dCBDb21wcmVzc2lvbiBDb3JwdXMgdG90YWxsaW5nIDMsMTQxLDYyMiBieXRlcy4gIFRoaXMKLWNvbHVtbiBnaXZlcyBzb21lIGZlZWwgZm9yIGhvdyBjb21wcmVzc2lvbiB2YXJpZXMgd2l0aCBibG9jayBzaXplLgotVGhlc2UgZmlndXJlcyB0ZW5kIHRvIHVuZGVyc3RhdGUgdGhlIGFkdmFudGFnZSBvZiBsYXJnZXIgYmxvY2sgc2l6ZXMgZm9yCi1sYXJnZXIgZmlsZXMsIHNpbmNlIHRoZSBDb3JwdXMgaXMgZG9taW5hdGVkIGJ5IHNtYWxsZXIgZmlsZXMuCi0KLSAgICAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotICAgIEZsYWcgICAgIHVzYWdlICAgICAgdXNhZ2UgICAgICAgLXMgdXNhZ2UgICAgIFNpemUKLQotICAgICAtMSAgICAgIDEyMDBrICAgICAgIDUwMGsgICAgICAgICAzNTBrICAgICAgOTE0NzA0Ci0gICAgIC0yICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAgICAgLTMgICAgICAyODAwayAgICAgIDEzMDBrICAgICAgICAgODUwayAgICAgIDg2MDMzOAotICAgICAtNCAgICAgIDM2MDBrICAgICAgMTcwMGsgICAgICAgIDExMDBrICAgICAgODQ2ODk5Ci0gICAgIC01ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAgICAgLTYgICAgICA1MjAwayAgICAgIDI1MDBrICAgICAgICAxNjAwayAgICAgIDgzODYyNgotICAgICAtNyAgICAgIDYxMDBrICAgICAgMjkwMGsgICAgICAgIDE4NTBrICAgICAgODM0MDk2Ci0gICAgIC04ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAgICAgLTkgICAgICA3NjAwayAgICAgIDM3MDBrICAgICAgICAyMzUwayAgICAgIDgyODY0MgotCi0uU0ggUkVDT1ZFUklORyBEQVRBIEZST00gREFNQUdFRCBGSUxFUwotLkkgYnppcDIKLWNvbXByZXNzZXMgZmlsZXMgaW4gYmxvY2tzLCB1c3VhbGx5IDkwMGtieXRlcyBsb25nLiAgRWFjaAotYmxvY2sgaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFuc21pc3Npb24gZXJyb3IgY2F1c2VzCi1hIG11bHRpLWJsb2NrIC5iejIKLWZpbGUgdG8gYmVjb21lIGRhbWFnZWQsIGl0IG1heSBiZSBwb3NzaWJsZSB0bwotcmVjb3ZlciBkYXRhIGZyb20gdGhlIHVuZGFtYWdlZCBibG9ja3MgaW4gdGhlIGZpbGUuCi0KLVRoZSBjb21wcmVzc2VkIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggYmxvY2sgaXMgZGVsaW1pdGVkIGJ5IGEgNDgtYml0Ci1wYXR0ZXJuLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBmaW5kIHRoZSBibG9jayBib3VuZGFyaWVzIHdpdGgKLXJlYXNvbmFibGUgY2VydGFpbnR5LiAgRWFjaCBibG9jayBhbHNvIGNhcnJpZXMgaXRzIG93biAzMi1iaXQgQ1JDLCBzbwotZGFtYWdlZCBibG9ja3MgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB1bmRhbWFnZWQgb25lcy4KLQotLkkgYnppcDJyZWNvdmVyCi1pcyBhIHNpbXBsZSBwcm9ncmFtIHdob3NlIHB1cnBvc2UgaXMgdG8gc2VhcmNoIGZvcgotYmxvY2tzIGluIC5iejIgZmlsZXMsIGFuZCB3cml0ZSBlYWNoIGJsb2NrIG91dCBpbnRvIGl0cyBvd24gLmJ6MiAKLWZpbGUuICBZb3UgY2FuIHRoZW4gdXNlCi0uSSBiemlwMiAKLVwtdAotdG8gdGVzdCB0aGUKLWludGVncml0eSBvZiB0aGUgcmVzdWx0aW5nIGZpbGVzLCBhbmQgZGVjb21wcmVzcyB0aG9zZSB3aGljaCBhcmUKLXVuZGFtYWdlZC4KLQotLkkgYnppcDJyZWNvdmVyCi10YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGRhbWFnZWQgZmlsZSwgCi1hbmQgd3JpdGVzIGEgbnVtYmVyIG9mIGZpbGVzICJyZWMwMDAwMWZpbGUuYnoyIiwKLSJyZWMwMDAwMmZpbGUuYnoyIiwgZXRjLCBjb250YWluaW5nIHRoZSAgZXh0cmFjdGVkICBibG9ja3MuCi1UaGUgIG91dHB1dCAgZmlsZW5hbWVzICBhcmUgIGRlc2lnbmVkICBzbyAgdGhhdCB0aGUgdXNlIG9mCi13aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nIC0tIGZvciBleGFtcGxlLCAgCi0iYnppcDIgLWRjICByZWMqZmlsZS5iejIgPiByZWNvdmVyZWRfZGF0YSIgLS0gcHJvY2Vzc2VzIHRoZSBmaWxlcyBpbgotdGhlIGNvcnJlY3Qgb3JkZXIuCi0KLS5JIGJ6aXAycmVjb3Zlcgotc2hvdWxkIGJlIG9mIG1vc3QgdXNlIGRlYWxpbmcgd2l0aCBsYXJnZSAuYnoyCi1maWxlcywgIGFzICB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5Ci1mdXRpbGUgdG8gdXNlIGl0IG9uIGRhbWFnZWQgc2luZ2xlLWJsb2NrICBmaWxlcywgIHNpbmNlICBhCi1kYW1hZ2VkICBibG9jayAgY2Fubm90ICBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW5pbWlzZSAKLWFueSBwb3RlbnRpYWwgZGF0YSBsb3NzIHRocm91Z2ggbWVkaWEgIG9yICB0cmFuc21pc3Npb24gZXJyb3JzLCAKLXlvdSBtaWdodCBjb25zaWRlciBjb21wcmVzc2luZyB3aXRoIGEgc21hbGxlcgotYmxvY2sgc2l6ZS4KLQotLlNIIFBFUkZPUk1BTkNFIE5PVEVTCi1UaGUgc29ydGluZyBwaGFzZSBvZiBjb21wcmVzc2lvbiBnYXRoZXJzIHRvZ2V0aGVyIHNpbWlsYXIgc3RyaW5ncyBpbiB0aGUKLWZpbGUuICBCZWNhdXNlIG9mIHRoaXMsIGZpbGVzIGNvbnRhaW5pbmcgdmVyeSBsb25nIHJ1bnMgb2YgcmVwZWF0ZWQKLXN5bWJvbHMsIGxpa2UgImFhYmFhYmFhYmFhYiAuLi4iICAocmVwZWF0ZWQgc2V2ZXJhbCBodW5kcmVkIHRpbWVzKSBtYXkKLWNvbXByZXNzIG1vcmUgc2xvd2x5IHRoYW4gbm9ybWFsLiAgVmVyc2lvbnMgMC45LjUgYW5kIGFib3ZlIGZhcmUgbXVjaAotYmV0dGVyIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMgaW4gdGhpcyByZXNwZWN0LiAgVGhlIHJhdGlvIGJldHdlZW4KLXdvcnN0LWNhc2UgYW5kIGF2ZXJhZ2UtY2FzZSBjb21wcmVzc2lvbiB0aW1lIGlzIGluIHRoZSByZWdpb24gb2YgMTA6MS4KLUZvciBwcmV2aW91cyB2ZXJzaW9ucywgdGhpcyBmaWd1cmUgd2FzIG1vcmUgbGlrZSAxMDA6MS4gIFlvdSBjYW4gdXNlIHRoZQotXC12dnZ2IG9wdGlvbiB0byBtb25pdG9yIHByb2dyZXNzIGluIGdyZWF0IGRldGFpbCwgaWYgeW91IHdhbnQuCi0KLURlY29tcHJlc3Npb24gc3BlZWQgaXMgdW5hZmZlY3RlZCBieSB0aGVzZSBwaGVub21lbmEuCi0KLS5JIGJ6aXAyCi11c3VhbGx5IGFsbG9jYXRlcyBzZXZlcmFsIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8gb3BlcmF0ZQotaW4sIGFuZCB0aGVuIGNoYXJnZXMgYWxsIG92ZXIgaXQgaW4gYSBmYWlybHkgcmFuZG9tIGZhc2hpb24uICBUaGlzIG1lYW5zCi10aGF0IHBlcmZvcm1hbmNlLCBib3RoIGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZywgaXMgbGFyZ2VseQotZGV0ZXJtaW5lZCBieSB0aGUgc3BlZWQgYXQgd2hpY2ggeW91ciBtYWNoaW5lIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KLUJlY2F1c2Ugb2YgdGhpcywgc21hbGwgY2hhbmdlcyB0byB0aGUgY29kZSB0byByZWR1Y2UgdGhlIG1pc3MgcmF0ZSBoYXZlCi1iZWVuIG9ic2VydmVkIHRvIGdpdmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGxhcmdlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KLUkgaW1hZ2luZSAKLS5JIGJ6aXAyCi13aWxsIHBlcmZvcm0gYmVzdCBvbiBtYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLgotCi0uU0ggQ0FWRUFUUwotSS9PIGVycm9yIG1lc3NhZ2VzIGFyZSBub3QgYXMgaGVscGZ1bCBhcyB0aGV5IGNvdWxkIGJlLgotLkkgYnppcDIKLXRyaWVzIGhhcmQgdG8gZGV0ZWN0IEkvTyBlcnJvcnMgYW5kIGV4aXQgY2xlYW5seSwgYnV0IHRoZSBkZXRhaWxzIG9mCi13aGF0IHRoZSBwcm9ibGVtIGlzIHNvbWV0aW1lcyBzZWVtIHJhdGhlciBtaXNsZWFkaW5nLgotCi1UaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjQgb2YKLS5JIGJ6aXAyLiAgCi1Db21wcmVzc2VkIGRhdGEgY3JlYXRlZCBieSB0aGlzIHZlcnNpb24gaXMgZW50aXJlbHkgZm9yd2FyZHMgYW5kCi1iYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyBwdWJsaWMgcmVsZWFzZXMsIHZlcnNpb25zCi0wLjFwbDIsIDAuOS4wLCAwLjkuNSwgMS4wLjAsIDEuMC4xLCAxLjAuMiBhbmQgMS4wLjMsIGJ1dCB3aXRoIHRoZSBmb2xsb3dpbmcKLWV4Y2VwdGlvbjogMC45LjAgYW5kIGFib3ZlIGNhbiBjb3JyZWN0bHkgZGVjb21wcmVzcyBtdWx0aXBsZQotY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuICAwLjFwbDIgY2Fubm90IGRvIHRoaXM7IGl0IHdpbGwgc3RvcAotYWZ0ZXIgZGVjb21wcmVzc2luZyBqdXN0IHRoZSBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCi0KLS5JIGJ6aXAycmVjb3ZlcgotdmVyc2lvbnMgcHJpb3IgdG8gMS4wLjIgdXNlZCAzMi1iaXQgaW50ZWdlcnMgdG8gcmVwcmVzZW50Ci1iaXQgcG9zaXRpb25zIGluIGNvbXByZXNzZWQgZmlsZXMsIHNvIHRoZXkgY291bGQgbm90IGhhbmRsZSBjb21wcmVzc2VkCi1maWxlcyBtb3JlIHRoYW4gNTEyIG1lZ2FieXRlcyBsb25nLiAgVmVyc2lvbnMgMS4wLjIgYW5kIGFib3ZlIHVzZQotNjQtYml0IGludHMgb24gc29tZSBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCB0aGVtIChHTlUgc3VwcG9ydGVkCi10YXJnZXRzLCBhbmQgV2luZG93cykuICBUbyBlc3RhYmxpc2ggd2hldGhlciBvciBub3QgYnppcDJyZWNvdmVyIHdhcwotYnVpbHQgd2l0aCBzdWNoIGEgbGltaXRhdGlvbiwgcnVuIGl0IHdpdGhvdXQgYXJndW1lbnRzLiAgSW4gYW55IGV2ZW50Ci15b3UgY2FuIGJ1aWxkIHlvdXJzZWxmIGFuIHVubGltaXRlZCB2ZXJzaW9uIGlmIHlvdSBjYW4gcmVjb21waWxlIGl0Ci13aXRoIE1heWJlVUludDY0IHNldCB0byBiZSBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlci4KLQotCi0KLS5TSCBBVVRIT1IKLUp1bGlhbiBTZXdhcmQsIGpzZXdhcmRiemlwLm9yZy4KLQotaHR0cDovL3d3dy5iemlwLm9yZwotCi1UaGUgaWRlYXMgZW1ib2RpZWQgaW4KLS5JIGJ6aXAyCi1hcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlIGZvbGxvd2luZwotcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUgYmxvY2sgc29ydGluZwotdHJhbnNmb3JtYXRpb24pLCBEYXZpZCBXaGVlbGVyIChhZ2FpbiwgZm9yIHRoZSBIdWZmbWFuIGNvZGVyKSwgUGV0ZXIKLUZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2RpbmcgbW9kZWwgaW4gdGhlIG9yaWdpbmFsCi0uSSBiemlwLAotYW5kIG1hbnkgcmVmaW5lbWVudHMpLCBhbmQgQWxpc3RhaXIgTW9mZmF0LCBSYWRmb3JkIE5lYWwgYW5kIElhbiBXaXR0ZW4KLShmb3IgdGhlIGFyaXRobWV0aWMgY29kZXIgaW4gdGhlIG9yaWdpbmFsCi0uSSBiemlwKS4gIAotSSBhbSBtdWNoCi1pbmRlYnRlZCBmb3IgdGhlaXIgaGVscCwgc3VwcG9ydCBhbmQgYWR2aWNlLiAgU2VlIHRoZSBtYW51YWwgaW4gdGhlCi1zb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBwb2ludGVycyB0byBzb3VyY2VzIG9mIGRvY3VtZW50YXRpb24uICBDaHJpc3RpYW4KLXZvbiBSb3F1ZXMgZW5jb3VyYWdlZCBtZSB0byBsb29rIGZvciBmYXN0ZXIgc29ydGluZyBhbGdvcml0aG1zLCBzbyBhcyB0bwotc3BlZWQgdXAgY29tcHJlc3Npb24uICBCZWxhIEx1YmtpbiBlbmNvdXJhZ2VkIG1lIHRvIGltcHJvdmUgdGhlCi13b3JzdC1jYXNlIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlLiAgCi1Eb25uYSBSb2JpbnNvbiBYTUxpc2VkIHRoZSBkb2N1bWVudGF0aW9uLgotVGhlIGJ6KiBzY3JpcHRzIGFyZSBkZXJpdmVkIGZyb20gdGhvc2Ugb2YgR05VIGd6aXAuCi1NYW55IHBlb3BsZSBzZW50IHBhdGNoZXMsIGhlbHBlZAotd2l0aCBwb3J0YWJpbGl0eSBwcm9ibGVtcywgbGVudCBtYWNoaW5lcywgZ2F2ZSBhZHZpY2UgYW5kIHdlcmUgZ2VuZXJhbGx5Ci1oZWxwZnVsLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuMS5wcmVmb3JtYXR0ZWQgYi9VdGlsaXRpZXMvY21iemlwMi9iemlwMi4xLnByZWZvcm1hdHRlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVlMTZlNS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMi4xLnByZWZvcm1hdHRlZAorKysgL2Rldi9udWxsCkBAIC0xLDM5OSArMCwwIEBACi1iemlwMigxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMigxKQotCi0KLQotTghOQQhBTQhNRQhFCi0gICAgICAgYnppcDIsIGJ1bnppcDIg4oiSIGEgYmxvY2vigJBzb3J0aW5nIGZpbGUgY29tcHJlc3NvciwgdjEuMC40Ci0gICAgICAgYnpjYXQg4oiSIGRlY29tcHJlc3NlcyBmaWxlcyB0byBzdGRvdXQKLSAgICAgICBiemlwMnJlY292ZXIg4oiSIHJlY292ZXJzIGRhdGEgZnJvbSBkYW1hZ2VkIGJ6aXAyIGZpbGVzCi0KLQotUwhTWQhZTghOTwhPUAhQUwhTSQhJUwhTCi0gICAgICAgYghiegh6aQhpcAhwMggyIFsg4oiSCOKIkmMIY2QIZGYIZmsIa3EIcXMIc3QIdHYIdnoIelYIVkwITDEIMTIIMjMIMzQINDUINTYINjcINzgIODkIOSBdIFsgXwhmXwhpXwhsXwhlXwhuXwhhXwhtXwhlXwhzIF8ILl8ILl8ILiAgXQotICAgICAgIGIIYnUIdW4IbnoIemkIaXAIcDIIMiBbIOKIkgjiiJJmCGZrCGt2CHZzCHNWCFZMCEwgXSBbIF8IZl8IaV8IbF8IZV8Ibl8IYV8IbV8IZV8IcyBfCC5fCC5fCC4gIF0KLSAgICAgICBiCGJ6CHpjCGNhCGF0CHQgWyDiiJII4oiScwhzIF0gWyBfCGZfCGlfCGxfCGVfCG5fCGFfCG1fCGVfCHMgXwguXwguXwguICBdCi0gICAgICAgYghiegh6aQhpcAhwMggycghyZQhlYwhjbwhvdgh2ZQhlcghyIF8IZl8IaV8IbF8IZV8Ibl8IYV8IbV8IZQotCi0KLUQIREUIRVMIU0MIQ1IIUkkISVAIUFQIVEkISU8IT04ITgotICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgY29tcHJlc3NlcyAgZmlsZXMgIHVzaW5nICB0aGUgQnVycm93c+KAkFdoZWVsZXIgYmxvY2sKLSAgICAgICBzb3J0aW5nIHRleHQgY29tcHJlc3Npb24gYWxnb3JpdGhtLCAgYW5kICBIdWZmbWFuICBjb2RpbmcuCi0gICAgICAgQ29tcHJlc3Npb24gIGlzICBnZW5lcmFsbHkgIGNvbnNpZGVyYWJseSAgYmV0dGVyIHRoYW4gdGhhdAotICAgICAgIGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsIExaNzcvTFo3OOKAkGJhc2VkIGNvbXByZXNzb3JzLAotICAgICAgIGFuZCAgYXBwcm9hY2hlcyAgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0gZmFtaWx5IG9mIHN0YcKtCi0gICAgICAgdGlzdGljYWwgY29tcHJlc3NvcnMuCi0KLSAgICAgICBUaGUgY29tbWFuZOKAkGxpbmUgb3B0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltaWxhciAgdG8KLSAgICAgICB0aG9zZSBvZiBfCEdfCE5fCFUgXwhnXwh6XwhpXwhwXwgsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyICBleHBlY3RzICBhIGxpc3Qgb2YgZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvbcKtCi0gICAgICAgbWFuZOKAkGxpbmUgZmxhZ3MuICBFYWNoIGZpbGUgaXMgcmVwbGFjZWQgIGJ5ICBhICBjb21wcmVzc2VkCi0gICAgICAgdmVyc2lvbiAgb2YgIGl0c2VsZiwgIHdpdGggIHRoZSAgbmFtZSAib3JpZ2luYWxfbmFtZS5iejIiLgotICAgICAgIEVhY2ggY29tcHJlc3NlZCBmaWxlIGhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgIHBlcsKtCi0gICAgICAgbWlzc2lvbnMsIGFuZCwgd2hlbiBwb3NzaWJsZSwgb3duZXJzaGlwIGFzIHRoZSBjb3JyZXNwb25kwq0KLSAgICAgICBpbmcgb3JpZ2luYWwsIHNvIHRoYXQgdGhlc2UgcHJvcGVydGllcyAgY2FuICBiZSAgY29ycmVjdGx5Ci0gICAgICAgcmVzdG9yZWQgIGF0ICBkZWNvbXByZXNzaW9uICB0aW1lLiAgIEZpbGUgbmFtZSBoYW5kbGluZyBpcwotICAgICAgIG5haXZlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgcHJlc2VydsKtCi0gICAgICAgaW5nICBvcmlnaW5hbCBmaWxlIG5hbWVzLCBwZXJtaXNzaW9ucywgb3duZXJzaGlwcyBvciBkYXRlcwotICAgICAgIGluIGZpbGVzeXN0ZW1zIHdoaWNoIGxhY2sgdGhlc2UgY29uY2VwdHMsIG9yIGhhdmUgIHNlcmlvdXMKLSAgICAgICBmaWxlIG5hbWUgbGVuZ3RoIHJlc3RyaWN0aW9ucywgc3VjaCBhcyBNU+KAkERPUy4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgYW5kICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgd2lsbCBieSBkZWZhdWx0IG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcKLSAgICAgICBmaWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5IHRoZSDiiJJmIGZsYWcuCi0KLSAgICAgICBJZiBubyBmaWxlIG5hbWVzICBhcmUgIHNwZWNpZmllZCwgIF8IYl8Iel8IaV8IcF8IMiAgY29tcHJlc3NlcyAgZnJvbQotICAgICAgIHN0YW5kYXJkICBpbnB1dCAgdG8gIHN0YW5kYXJkIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgXwhiXwh6XwhpXwhwXwgyCi0gICAgICAgd2lsbCBkZWNsaW5lIHRvIHdyaXRlIGNvbXByZXNzZWQgb3V0cHV0IHRvIGEgdGVybWluYWwsICBhcwotICAgICAgIHRoaXMgIHdvdWxkICBiZSAgZW50aXJlbHkgIGluY29tcHJlaGVuc2libGUgIGFuZCB0aGVyZWZvcmUKLSAgICAgICBwb2ludGxlc3MuCi0KLSAgICAgICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgKG9yIF8IYl8Iel8IaV8IcF8IMiBfCOKIkl8IZF8IKSBkZWNvbXByZXNzZXMgIGFsbCAgc3BlY2lmaWVkICBmaWxlcy4KLSAgICAgICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5IF8IYl8Iel8IaV8IcF8IMiB3aWxsIGJlIGRldGVjdGVkIGFuZAotICAgICAgIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXNzdWVkLiAgXwhiXwh6XwhpXwhwXwgyICBhdHRlbXB0cyAgdG8gIGd1ZXNzCi0gICAgICAgdGhlICBmaWxlbmFtZSAgZm9yICB0aGUgZGVjb21wcmVzc2VkIGZpbGUgZnJvbSB0aGF0IG9mIHRoZQotICAgICAgIGNvbXByZXNzZWQgZmlsZSBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgICAgIGZpbGVuYW1lLmJ6MiAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICAgICAgICAgZmlsZW5hbWUuYnogICAgIGJlY29tZXMgICBmaWxlbmFtZQotICAgICAgICAgICAgICBmaWxlbmFtZS50YnoyICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgotICAgICAgICAgICAgICBmaWxlbmFtZS50YnogICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgotICAgICAgICAgICAgICBhbnlvdGhlcm5hbWUgICAgYmVjb21lcyAgIGFueW90aGVybmFtZS5vdXQKLQotICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGVuZCBpbiBvbmUgb2YgdGhlIHJlY29nbmlzZWQgZW5kaW5ncywKLSAgICAgICBfCC5fCGJfCHpfCDJfCCwgIF8ILl8IYl8Iel8ILCAgXwguXwh0XwhiXwh6XwgyIG9yIF8ILl8IdF8IYl8Iel8ILCBfCGJfCHpfCGlfCHBfCDIgY29tcGxhaW5zIHRoYXQgaXQgY2Fubm90Ci0gICAgICAgZ3Vlc3MgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB1c2VzIHRoZSBvcmlnaW5hbAotICAgICAgIG5hbWUgd2l0aCBfCC5fCG9fCHVfCHQgYXBwZW5kZWQuCi0KLSAgICAgICBBcyAgd2l0aCBjb21wcmVzc2lvbiwgc3VwcGx5aW5nIG5vIGZpbGVuYW1lcyBjYXVzZXMgZGVjb23CrQotICAgICAgIHByZXNzaW9uIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIHdpbGwgY29ycmVjdGx5IGRlY29tcHJlc3MgYSBmaWxlIHdoaWNoIGlzIHRoZSBjb27CrQotICAgICAgIGNhdGVuYXRpb24gb2YgdHdvIG9yIG1vcmUgY29tcHJlc3NlZCBmaWxlcy4gIFRoZSByZXN1bHQgaXMKLSAgICAgICB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB1bmNvbXByZXNzZWQgZmlsZXMuCi0gICAgICAgSW50ZWdyaXR5IHRlc3RpbmcgKOKIknQpIG9mIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzIGlzCi0gICAgICAgYWxzbyBzdXBwb3J0ZWQuCi0KLSAgICAgICBZb3UgY2FuIGFsc28gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBmaWxlcyB0byB0aGUgIHN0YW5kYXJkCi0gICAgICAgb3V0cHV0ICBieSBnaXZpbmcgdGhlIOKIkmMgZmxhZy4gIE11bHRpcGxlIGZpbGVzIG1heSBiZSBjb23CrQotICAgICAgIHByZXNzZWQgYW5kIGRlY29tcHJlc3NlZCBsaWtlIHRoaXMuICBUaGUgcmVzdWx0aW5nIG91dHB1dHMKLSAgICAgICBhcmUgIGZlZCAgc2VxdWVudGlhbGx5IHRvIHN0ZG91dC4gIENvbXByZXNzaW9uIG9mIG11bHRpcGxlCi0gICAgICAgZmlsZXMgaW4gdGhpcyBtYW5uZXIgZ2VuZXJhdGVzIGEgc3RyZWFtIGNvbnRhaW5pbmcgIG11bHRpwq0KLSAgICAgICBwbGUgY29tcHJlc3NlZCBmaWxlIHJlcHJlc2VudGF0aW9ucy4gIFN1Y2ggYSBzdHJlYW0gY2FuIGJlCi0gICAgICAgZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5ICBieSAgXwhiXwh6XwhpXwhwXwgyICB2ZXJzaW9uICAwLjkuMCAgb3IKLSAgICAgICBsYXRlci4gICBFYXJsaWVyICB2ZXJzaW9ucyBvZiBfCGJfCHpfCGlfCHBfCDIgd2lsbCBzdG9wIGFmdGVyIGRlY29twq0KLSAgICAgICBwcmVzc2luZyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0gICAgICAgXwhiXwh6XwhjXwhhXwh0IChvciBfCGJfCHpfCGlfCHBfCDIgXwjigJBfCGRfCGNfCCkgZGVjb21wcmVzc2VzIGFsbCBzcGVjaWZpZWQgIGZpbGVzICB0bwotICAgICAgIHRoZSBzdGFuZGFyZCBvdXRwdXQuCi0KLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgIHdpbGwgIHJlYWQgYXJndW1lbnRzIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgIF8IQl8IWl8ISV8IUF8IMiBhbmQgXwhCXwhaXwhJXwhQXwgsIGluICB0aGF0ICBvcmRlciwgIGFuZCAgd2lsbCAgcHJvY2VzcyAgdGhlbQotICAgICAgIGJlZm9yZSAgYW55ICBhcmd1bWVudHMgIHJlYWQgIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMKLSAgICAgICBnaXZlcyBhIGNvbnZlbmllbnQgd2F5IHRvIHN1cHBseSBkZWZhdWx0IGFyZ3VtZW50cy4KLQotICAgICAgIENvbXByZXNzaW9uIGlzIGFsd2F5cyBwZXJmb3JtZWQsIGV2ZW4gIGlmICB0aGUgIGNvbXByZXNzZWQKLSAgICAgICBmaWxlICBpcyBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwuICBGaWxlcyBvZiBsZXNzCi0gICAgICAgdGhhbiBhYm91dCBvbmUgaHVuZHJlZCBieXRlcyB0ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZQotICAgICAgIGNvbXByZXNzaW9uICBtZWNoYW5pc20gIGhhcyAgYSAgY29uc3RhbnQgIG92ZXJoZWFkICBpbiB0aGUKLSAgICAgICByZWdpb24gb2YgNTAgYnl0ZXMuICBSYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQgIG9mCi0gICAgICAgbW9zdCAgZmlsZSAgY29tcHJlc3NvcnMpICBpcyAgY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlcgotICAgICAgIGJ5dGUsIGdpdmluZyBhbiBleHBhbnNpb24gb2YgYXJvdW5kIDAuNSUuCi0KLSAgICAgICBBcyBhIHNlbGbigJBjaGVjayBmb3IgeW91ciAgcHJvdGVjdGlvbiwgIF8IYl8Iel8IaV8IcF8IMiAgdXNlcyAgMzLigJBiaXQKLSAgICAgICBDUkNzICB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgYSBmaWxlCi0gICAgICAgaXMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbC4gIFRoaXMgZ3VhcmRzIGFnYWluc3QgY29ycnVwwq0KLSAgICAgICB0aW9uICBvZiAgdGhlIGNvbXByZXNzZWQgZGF0YSwgYW5kIGFnYWluc3QgdW5kZXRlY3RlZCBidWdzCi0gICAgICAgaW4gXwhiXwh6XwhpXwhwXwgyIChob3BlZnVsbHkgdmVyeSB1bmxpa2VseSkuICBUaGUgY2hhbmNlcyAgb2YgIGRhdGEKLSAgICAgICBjb3JydXB0aW9uICBnb2luZyAgdW5kZXRlY3RlZCAgaXMgIG1pY3Jvc2NvcGljLCAgYWJvdXQgb25lCi0gICAgICAgY2hhbmNlIGluIGZvdXIgYmlsbGlvbiBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4gIEJlIGF3YXJlLAotICAgICAgIHRob3VnaCwgIHRoYXQgIHRoZSAgY2hlY2sgb2NjdXJzIHVwb24gZGVjb21wcmVzc2lvbiwgc28gaXQKLSAgICAgICBjYW4gb25seSB0ZWxsIHlvdSB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZy4gIEl0IGNhbuKAmXQgIGhlbHAKLSAgICAgICB5b3UgIHJlY292ZXIgIHRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0YS4gIFlvdSBjYW4gdXNlCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHRvIHRyeSB0byByZWNvdmVyIGRhdGEgZnJvbSBkYW1hZ2VkIGZpbGVzLgotCi0gICAgICAgUmV0dXJuIHZhbHVlczogMCBmb3IgYSBub3JtYWwgZXhpdCwgIDEgIGZvciAgZW52aXJvbm1lbnRhbAotICAgICAgIHByb2JsZW1zICAoZmlsZSBub3QgZm91bmQsIGludmFsaWQgZmxhZ3MsIEkvTyBlcnJvcnMsICZjKSwKLSAgICAgICAyIHRvIGluZGljYXRlIGEgY29ycnVwdCBjb21wcmVzc2VkIGZpbGUsIDMgZm9yIGFuIGludGVybmFsCi0gICAgICAgY29uc2lzdGVuY3kgZXJyb3IgKGVnLCBidWcpIHdoaWNoIGNhdXNlZCBfCGJfCHpfCGlfCHBfCDIgdG8gcGFuaWMuCi0KLQotTwhPUAhQVAhUSQhJTwhPTghOUwhTCi0gICAgICAg4oiSCOKIkmMIYyDigJAI4oCQ4oCQCOKAkHMIc3QIdGQIZG8Ib3UIdXQIdAotICAgICAgICAgICAgICBDb21wcmVzcyBvciBkZWNvbXByZXNzIHRvIHN0YW5kYXJkIG91dHB1dC4KLQotICAgICAgIOKIkgjiiJJkCGQg4oCQCOKAkOKAkAjigJBkCGRlCGVjCGNvCG9tCG1wCHByCHJlCGVzCHNzCHMKLSAgICAgICAgICAgICAgRm9yY2UgIGRlY29tcHJlc3Npb24uICBfCGJfCHpfCGlfCHBfCDJfCCwgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIGFuZCBfCGJfCHpfCGNfCGFfCHQgYXJlCi0gICAgICAgICAgICAgIHJlYWxseSB0aGUgc2FtZSBwcm9ncmFtLCAgYW5kICB0aGUgIGRlY2lzaW9uICBhYm91dAotICAgICAgICAgICAgICB3aGF0ICBhY3Rpb25zIHRvIHRha2UgaXMgZG9uZSBvbiB0aGUgYmFzaXMgb2Ygd2hpY2gKLSAgICAgICAgICAgICAgbmFtZSBpcyB1c2VkLiAgVGhpcyBmbGFnIG92ZXJyaWRlcyB0aGF0ICBtZWNoYW5pc20sCi0gICAgICAgICAgICAgIGFuZCBmb3JjZXMgXwhiXwh6XwhpXwhwXwgyIHRvIGRlY29tcHJlc3MuCi0KLSAgICAgICDiiJII4oiSegh6IOKAkAjigJDigJAI4oCQYwhjbwhvbQhtcAhwcghyZQhlcwhzcwhzCi0gICAgICAgICAgICAgIFRoZSAgIGNvbXBsZW1lbnQgICB0byAgIOKIkmQ6ICAgZm9yY2VzICAgY29tcHJlc3Npb24sCi0gICAgICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9jYXRpb24gbmFtZS4KLQotICAgICAgIOKIkgjiiJJ0CHQg4oCQCOKAkOKAkAjigJB0CHRlCGVzCHN0CHQKLSAgICAgICAgICAgICAgQ2hlY2sgaW50ZWdyaXR5IG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKSwgYnV0IGRvbuKAmXQKLSAgICAgICAgICAgICAgZGVjb21wcmVzcyAgdGhlbS4gICBUaGlzICByZWFsbHkgIHBlcmZvcm1zICBhIHRyaWFsCi0gICAgICAgICAgICAgIGRlY29tcHJlc3Npb24gYW5kIHRocm93cyBhd2F5IHRoZSByZXN1bHQuCi0KLSAgICAgICDiiJII4oiSZghmIOKAkAjigJDigJAI4oCQZghmbwhvcghyYwhjZQhlCi0gICAgICAgICAgICAgIEZvcmNlIG92ZXJ3cml0ZSBvZiBvdXRwdXQgZmlsZXMuICAgTm9ybWFsbHksICBfCGJfCHpfCGlfCHBfCDIKLSAgICAgICAgICAgICAgd2lsbCAgbm90ICBvdmVyd3JpdGUgIGV4aXN0aW5nICBvdXRwdXQgZmlsZXMuICBBbHNvCi0gICAgICAgICAgICAgIGZvcmNlcyBfCGJfCHpfCGlfCHBfCDIgdG8gYnJlYWsgaGFyZCBsaW5rcyB0byBmaWxlcywgd2hpY2ggaXQKLSAgICAgICAgICAgICAgb3RoZXJ3aXNlIHdvdWxkbuKAmXQgZG8uCi0KLSAgICAgICAgICAgICAgYnppcDIgIG5vcm1hbGx5ICBkZWNsaW5lcyB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoCi0gICAgICAgICAgICAgIGRvbuKAmXQgaGF2ZSB0aGUgIGNvcnJlY3QgIG1hZ2ljICBoZWFkZXIgIGJ5dGVzLiAgIElmCi0gICAgICAgICAgICAgIGZvcmNlZCAgKOKAkGYpLCAgaG93ZXZlciwgIGl0ICB3aWxsICBwYXNzICBzdWNoIGZpbGVzCi0gICAgICAgICAgICAgIHRocm91Z2ggdW5tb2RpZmllZC4gIFRoaXMgaXMgaG93IEdOVSBnemlwICBiZWhhdmVzLgotCi0gICAgICAg4oiSCOKIkmsIayDigJAI4oCQ4oCQCOKAkGsIa2UIZWUIZXAIcAotICAgICAgICAgICAgICBLZWVwICAoZG9u4oCZdCBkZWxldGUpIGlucHV0IGZpbGVzIGR1cmluZyBjb21wcmVzc2lvbgotICAgICAgICAgICAgICBvciBkZWNvbXByZXNzaW9uLgotCi0gICAgICAg4oiSCOKIknMIcyDigJAI4oCQ4oCQCOKAkHMIc20IbWEIYWwIbGwIbAotICAgICAgICAgICAgICBSZWR1Y2UgbWVtb3J5IHVzYWdlLCBmb3IgY29tcHJlc3Npb24sIGRlY29tcHJlc3Npb24KLSAgICAgICAgICAgICAgYW5kICB0ZXN0aW5nLiAgIEZpbGVzICBhcmUgIGRlY29tcHJlc3NlZCBhbmQgdGVzdGVkCi0gICAgICAgICAgICAgIHVzaW5nIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdoaWNoIG9ubHkgcmVxdWlyZXMgIDIuNQotICAgICAgICAgICAgICBieXRlcyAgcGVyICBibG9jayBieXRlLiAgVGhpcyBtZWFucyBhbnkgZmlsZSBjYW4gYmUKLSAgICAgICAgICAgICAgZGVjb21wcmVzc2VkIGluIDIzMDBrIG9mIG1lbW9yeSwgIGFsYmVpdCAgYXQgIGFib3V0Ci0gICAgICAgICAgICAgIGhhbGYgdGhlIG5vcm1hbCBzcGVlZC4KLQotICAgICAgICAgICAgICBEdXJpbmcgIGNvbXByZXNzaW9uLCAg4oiScyAgc2VsZWN0cyAgYSAgYmxvY2sgc2l6ZSBvZgotICAgICAgICAgICAgICAyMDBrLCB3aGljaCBsaW1pdHMgbWVtb3J5IHVzZSB0byAgYXJvdW5kICB0aGUgIHNhbWUKLSAgICAgICAgICAgICAgZmlndXJlLCAgYXQgIHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uCi0gICAgICAgICAgICAgIEluIHNob3J0LCBpZiB5b3VyICBtYWNoaW5lICBpcyAgbG93ICBvbiAgbWVtb3J5ICAoOAotICAgICAgICAgICAgICBtZWdhYnl0ZXMgIG9yICBsZXNzKSwgIHVzZSAg4oiScyBmb3IgZXZlcnl0aGluZy4gIFNlZQotICAgICAgICAgICAgICBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4KLQotICAgICAgIOKIkgjiiJJxCHEg4oCQCOKAkOKAkAjigJBxCHF1CHVpCGllCGV0CHQKLSAgICAgICAgICAgICAgU3VwcHJlc3Mgbm9u4oCQZXNzZW50aWFsIHdhcm5pbmcgbWVzc2FnZXMuICAgTWVzc2FnZXMKLSAgICAgICAgICAgICAgcGVydGFpbmluZyAgdG8gSS9PIGVycm9ycyBhbmQgb3RoZXIgY3JpdGljYWwgZXZlbnRzCi0gICAgICAgICAgICAgIHdpbGwgbm90IGJlIHN1cHByZXNzZWQuCi0KLSAgICAgICDiiJII4oiSdgh2IOKAkAjigJDigJAI4oCQdgh2ZQhlcghyYghibwhvcwhzZQhlCi0gICAgICAgICAgICAgIFZlcmJvc2UgbW9kZSDigJDigJAgc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yIGVhY2gKLSAgICAgICAgICAgICAgZmlsZSAgcHJvY2Vzc2VkLiAgIEZ1cnRoZXIgIOKIknbigJlzICBpbmNyZWFzZSB0aGUgdmVywq0KLSAgICAgICAgICAgICAgYm9zaXR5IGxldmVsLCBzcGV3aW5nIG91dCBsb3RzIG9mIGluZm9ybWF0aW9uIHdoaWNoCi0gICAgICAgICAgICAgIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KLQotICAgICAgIOKIkgjiiJJMCEwg4oCQCOKAkOKAkAjigJBsCGxpCGljCGNlCGVuCG5zCHNlCGUg4oCQCOKAkFYIViDigJAI4oCQ4oCQCOKAkHYIdmUIZXIIcnMIc2kIaW8Ib24IbgotICAgICAgICAgICAgICBEaXNwbGF5ICB0aGUgIHNvZnR3YXJlICB2ZXJzaW9uLCAgbGljZW5zZSB0ZXJtcyBhbmQKLSAgICAgICAgICAgICAgY29uZGl0aW9ucy4KLQotICAgICAgIOKIkgjiiJIxCDEgKAgobwhvcghyIOKIkgjiiJLiiJII4oiSZghmYQhhcwhzdAh0KQgpIHQIdG8IbyDiiJII4oiSOQg5ICgIKG8Ib3IIciDiiJII4oiS4oiSCOKIkmIIYmUIZXMIc3QIdCkIKQotICAgICAgICAgICAgICBTZXQgdGhlIGJsb2NrIHNpemUgdG8gMTAwIGssIDIwMCBrIC4uICA5MDAgIGsgIHdoZW4KLSAgICAgICAgICAgICAgY29tcHJlc3NpbmcuICAgSGFzICBubyAgZWZmZWN0ICB3aGVuIGRlY29tcHJlc3NpbmcuCi0gICAgICAgICAgICAgIFNlZSBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4gIFRoZSDiiJLiiJJmYXN0IGFuZCDiiJLiiJJiZXN0Ci0gICAgICAgICAgICAgIGFsaWFzZXMgIGFyZSAgcHJpbWFyaWx5IGZvciBHTlUgZ3ppcCBjb21wYXRpYmlsaXR5LgotICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCDiiJLiiJJmYXN0IGRvZXNu4oCZdCBtYWtlIHRoaW5ncyAgc2lnbmlmacKtCi0gICAgICAgICAgICAgIGNhbnRseSAgZmFzdGVyLiAgIEFuZCAg4oiS4oiSYmVzdCAgbWVyZWx5ICBzZWxlY3RzICB0aGUKLSAgICAgICAgICAgICAgZGVmYXVsdCBiZWhhdmlvdXIuCi0KLSAgICAgICDiiJII4oiS4oCQCOKAkCAgICAgVHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLCBldmVuCi0gICAgICAgICAgICAgIGlmIHRoZXkgc3RhcnQgd2l0aCBhIGRhc2guICBUaGlzIGlzIHNvIHlvdSBjYW4gaGFuwq0KLSAgICAgICAgICAgICAgZGxlIGZpbGVzIHdpdGggbmFtZXMgYmVnaW5uaW5nICB3aXRoICBhICBkYXNoLCAgZm9yCi0gICAgICAgICAgICAgIGV4YW1wbGU6IGJ6aXAyIOKIkuKAkCDiiJJteWZpbGVuYW1lLgotCi0gICAgICAg4oiSCOKIkuKAkAjigJByCHJlCGVwCHBlCGV0CHRpCGl0CHRpCGl2CHZlCGXigJAI4oCQZghmYQhhcwhzdAh0IOKAkAjigJDigJAI4oCQcghyZQhlcAhwZQhldAh0aQhpdAh0aQhpdgh2ZQhl4oCQCOKAkGIIYmUIZXMIc3QIdAotICAgICAgICAgICAgICBUaGVzZSAgZmxhZ3MgIGFyZSAgcmVkdW5kYW50ICBpbiB2ZXJzaW9ucyAwLjkuNSBhbmQKLSAgICAgICAgICAgICAgYWJvdmUuICBUaGV5IHByb3ZpZGVkIHNvbWUgY29hcnNlIGNvbnRyb2wgb3ZlciAgdGhlCi0gICAgICAgICAgICAgIGJlaGF2aW91ciAgb2YgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVywq0KLSAgICAgICAgICAgICAgc2lvbnMsIHdoaWNoIHdhcyBzb21ldGltZXMgdXNlZnVsLiAgMC45LjUgYW5kIGFib3ZlCi0gICAgICAgICAgICAgIGhhdmUgIGFuICBpbXByb3ZlZCAgYWxnb3JpdGhtICB3aGljaCAgcmVuZGVycyB0aGVzZQotICAgICAgICAgICAgICBmbGFncyBpcnJlbGV2YW50LgotCi0KLU0ITUUIRU0ITU8IT1IIUlkIWSBNCE1BCEFOCE5BCEFHCEdFCEVNCE1FCEVOCE5UCFQKLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgY29tcHJlc3NlcyBsYXJnZSBmaWxlcyBpbiBibG9ja3MuICAgVGhlICBibG9jayAgc2l6ZQotICAgICAgIGFmZmVjdHMgIGJvdGggIHRoZSAgY29tcHJlc3Npb24gIHJhdGlvICBhY2hpZXZlZCwgIGFuZCB0aGUKLSAgICAgICBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCBmb3IgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24uCi0gICAgICAgVGhlICBmbGFncyAg4oiSMSAgdGhyb3VnaCAg4oiSOSAgc3BlY2lmeSAgdGhlIGJsb2NrIHNpemUgdG8gYmUKLSAgICAgICAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlIGRlZmF1bHQpICByZXNwZWPCrQotICAgICAgIHRpdmVseS4gICBBdCAgZGVjb21wcmVzc2lvbiAgdGltZSwgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IKLSAgICAgICBjb21wcmVzc2lvbiBpcyByZWFkIGZyb20gIHRoZSAgaGVhZGVyICBvZiAgdGhlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZSwgYW5kIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiB0aGVuIGFsbG9jYXRlcyBpdHNlbGYganVzdCBlbm91Z2ggbWVtb3J5Ci0gICAgICAgdG8gZGVjb21wcmVzcyB0aGUgZmlsZS4gIFNpbmNlIGJsb2NrIHNpemVzIGFyZSAgc3RvcmVkICBpbgotICAgICAgIGNvbXByZXNzZWQgIGZpbGVzLCAgaXQgZm9sbG93cyB0aGF0IHRoZSBmbGFncyDiiJIxIHRvIOKIkjkgYXJlCi0gICAgICAgaXJyZWxldmFudCB0byBhbmQgc28gaWdub3JlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi4KLQotICAgICAgIENvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJlcXVpcmVtZW50cywgaW4gYnl0ZXMsICBjYW4KLSAgICAgICBiZSBlc3RpbWF0ZWQgYXM6Ci0KLSAgICAgICAgICAgICAgQ29tcHJlc3Npb246ICAgNDAwayArICggOCB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgICAgICAgIERlY29tcHJlc3Npb246IDEwMGsgKyAoIDQgeCBibG9jayBzaXplICksIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMGsgKyAoIDIuNSB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgTGFyZ2VyICBibG9jayAgc2l6ZXMgIGdpdmUgIHJhcGlkbHkgIGRpbWluaXNoaW5nICBtYXJnaW5hbAotICAgICAgIHJldHVybnMuICBNb3N0IG9mIHRoZSBjb21wcmVzc2lvbiBjb21lcyBmcm9tIHRoZSBmaXJzdCB0d28KLSAgICAgICBvciAgdGhyZWUgaHVuZHJlZCBrIG9mIGJsb2NrIHNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluCi0gICAgICAgbWluZCB3aGVuIHVzaW5nIF8IYl8Iel8IaV8IcF8IMiAgb24gIHNtYWxsICBtYWNoaW5lcy4gICBJdCAgaXMgIGFsc28KLSAgICAgICBpbXBvcnRhbnQgIHRvICBhcHByZWNpYXRlICB0aGF0ICB0aGUgIGRlY29tcHJlc3Npb24gbWVtb3J5Ci0gICAgICAgcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgIHRoZSAgY2hvaWNlICBvZgotICAgICAgIGJsb2NrIHNpemUuCi0KLSAgICAgICBGb3IgIGZpbGVzICBjb21wcmVzc2VkICB3aXRoICB0aGUgZGVmYXVsdCA5MDBrIGJsb2NrIHNpemUsCi0gICAgICAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIHdpbGwgcmVxdWlyZSBhYm91dCAzNzAwIGtieXRlcyB0byBkZWNvbXByZXNzLiAgIFRvCi0gICAgICAgc3VwcG9ydCBkZWNvbXByZXNzaW9uIG9mIGFueSBmaWxlIG9uIGEgNCBtZWdhYnl0ZSBtYWNoaW5lLAotICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiBoYXMgYW4gb3B0aW9uIHRvICBkZWNvbXByZXNzICB1c2luZyAgYXBwcm94aW1hdGVseQotICAgICAgIGhhbGYgdGhpcyBhbW91bnQgb2YgbWVtb3J5LCBhYm91dCAyMzAwIGtieXRlcy4gIERlY29tcHJlc8KtCi0gICAgICAgc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwgc28geW91IHNob3VsZCB1c2UgIHRoaXMgIG9wdGlvbgotICAgICAgIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50IGZsYWcgaXMg4oCQcy4KLQotICAgICAgIEluIGdlbmVyYWwsIHRyeSBhbmQgdXNlIHRoZSBsYXJnZXN0IGJsb2NrIHNpemUgbWVtb3J5IGNvbsKtCi0gICAgICAgc3RyYWludHMgIGFsbG93LCAgc2luY2UgIHRoYXQgIG1heGltaXNlcyAgdGhlICBjb21wcmVzc2lvbgotICAgICAgIGFjaGlldmVkLiAgIENvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0dcKtCi0gICAgICAgYWxseSB1bmFmZmVjdGVkIGJ5IGJsb2NrIHNpemUuCi0KLSAgICAgICBBbm90aGVyIHNpZ25pZmljYW50IHBvaW50IGFwcGxpZXMgdG8gZmlsZXMgd2hpY2ggZml0IGluICBhCi0gICAgICAgc2luZ2xlICBibG9jayAg4oCQ4oCQICB0aGF0ICBtZWFucyAgbW9zdCBmaWxlcyB5b3XigJlkIGVuY291bnRlcgotICAgICAgIHVzaW5nIGEgbGFyZ2UgYmxvY2sgIHNpemUuICAgVGhlICBhbW91bnQgIG9mICByZWFsICBtZW1vcnkKLSAgICAgICB0b3VjaGVkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgc2luY2UgdGhlCi0gICAgICAgZmlsZSBpcyBzbWFsbGVyIHRoYW4gYSBibG9jay4gIEZvciBleGFtcGxlLCBjb21wcmVzc2luZyAgYQotICAgICAgIGZpbGUgIDIwLDAwMCAgYnl0ZXMgIGxvbmcgIHdpdGggdGhlIGZsYWcg4oCQOSB3aWxsIGNhdXNlIHRoZQotICAgICAgIGNvbXByZXNzb3IgdG8gYWxsb2NhdGUgYXJvdW5kIDc2MDBrIG9mICBtZW1vcnksICBidXQgIG9ubHkKLSAgICAgICB0b3VjaCA0MDBrICsgMjAwMDAgKiA4ID0gNTYwIGtieXRlcyBvZiBpdC4gIFNpbWlsYXJseSwgdGhlCi0gICAgICAgZGVjb21wcmVzc29yIHdpbGwgYWxsb2NhdGUgMzcwMGsgYnV0ICBvbmx5ICB0b3VjaCAgMTAwayAgKwotICAgICAgIDIwMDAwICogNCA9IDE4MCBrYnl0ZXMuCi0KLSAgICAgICBIZXJlICBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlCi0gICAgICAgZm9yIGRpZmZlcmVudCBibG9jayBzaXplcy4gIEFsc28gIHJlY29yZGVkICBpcyAgdGhlICB0b3RhbAotICAgICAgIGNvbXByZXNzZWQgIHNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlc8KtCi0gICAgICAgc2lvbiBDb3JwdXMgdG90YWxsaW5nIDMsMTQxLDYyMiBieXRlcy4gIFRoaXMgY29sdW1uICBnaXZlcwotICAgICAgIHNvbWUgIGZlZWwgIGZvciAgaG93ICBjb21wcmVzc2lvbiAgdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4KLSAgICAgICBUaGVzZSBmaWd1cmVzIHRlbmQgdG8gdW5kZXJzdGF0ZSB0aGUgYWR2YW50YWdlICBvZiAgbGFyZ2VyCi0gICAgICAgYmxvY2sgIHNpemVzICBmb3IgIGxhcmdlciBmaWxlcywgc2luY2UgdGhlIENvcnB1cyBpcyBkb21pwq0KLSAgICAgICBuYXRlZCBieSBzbWFsbGVyIGZpbGVzLgotCi0gICAgICAgICAgICAgICAgICBDb21wcmVzcyAgIERlY29tcHJlc3MgICBEZWNvbXByZXNzICAgQ29ycHVzCi0gICAgICAgICAgIEZsYWcgICAgIHVzYWdlICAgICAgdXNhZ2UgICAgICAg4oCQcyB1c2FnZSAgICAgU2l6ZQotCi0gICAgICAgICAgICDigJAxICAgICAgMTIwMGsgICAgICAgNTAwayAgICAgICAgIDM1MGsgICAgICA5MTQ3MDQKLSAgICAgICAgICAgIOKAkDIgICAgICAyMDAwayAgICAgICA5MDBrICAgICAgICAgNjAwayAgICAgIDg3NzcwMwotICAgICAgICAgICAg4oCQMyAgICAgIDI4MDBrICAgICAgMTMwMGsgICAgICAgICA4NTBrICAgICAgODYwMzM4Ci0gICAgICAgICAgICDigJA0ICAgICAgMzYwMGsgICAgICAxNzAwayAgICAgICAgMTEwMGsgICAgICA4NDY4OTkKLSAgICAgICAgICAgIOKAkDUgICAgICA0NDAwayAgICAgIDIxMDBrICAgICAgICAxMzUwayAgICAgIDg0NTE2MAotICAgICAgICAgICAg4oCQNiAgICAgIDUyMDBrICAgICAgMjUwMGsgICAgICAgIDE2MDBrICAgICAgODM4NjI2Ci0gICAgICAgICAgICDigJA3ICAgICAgNjEwMGsgICAgICAyOTAwayAgICAgICAgMTg1MGsgICAgICA4MzQwOTYKLSAgICAgICAgICAgIOKAkDggICAgICA2ODAwayAgICAgIDMzMDBrICAgICAgICAyMTAwayAgICAgIDgyODY0MgotICAgICAgICAgICAg4oCQOSAgICAgIDc2MDBrICAgICAgMzcwMGsgICAgICAgIDIzNTBrICAgICAgODI4NjQyCi0KLQotUghSRQhFQwhDTwhPVghWRQhFUghSSQhJTghORwhHIEQIREEIQVQIVEEIQSBGCEZSCFJPCE9NCE0gRAhEQQhBTQhNQQhBRwhHRQhFRAhEIEYIRkkISUwITEUIRVMIUwotICAgICAgIF8IYl8Iel8IaV8IcF8IMiBjb21wcmVzc2VzIGZpbGVzIGluIGJsb2NrcywgdXN1YWxseSA5MDBrYnl0ZXMgIGxvbmcuCi0gICAgICAgRWFjaCBibG9jayBpcyBoYW5kbGVkIGluZGVwZW5kZW50bHkuICBJZiBhIG1lZGlhIG9yIHRyYW5zwq0KLSAgICAgICBtaXNzaW9uIGVycm9yIGNhdXNlcyBhIG11bHRp4oCQYmxvY2sgIC5iejIgIGZpbGUgIHRvICBiZWNvbWUKLSAgICAgICBkYW1hZ2VkLCAgaXQgIG1heSAgYmUgIHBvc3NpYmxlICB0byAgcmVjb3ZlciBkYXRhIGZyb20gdGhlCi0gICAgICAgdW5kYW1hZ2VkIGJsb2NrcyBpbiB0aGUgZmlsZS4KLQotICAgICAgIFRoZSBjb21wcmVzc2VkIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggYmxvY2sgIGlzICBkZWxpbWl0ZWQKLSAgICAgICBieSAgYSAgNDjigJBiaXQgcGF0dGVybiwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGUKLSAgICAgICBibG9jayBib3VuZGFyaWVzIHdpdGggcmVhc29uYWJsZSAgY2VydGFpbnR5LiAgIEVhY2ggIGJsb2NrCi0gICAgICAgYWxzbyAgY2FycmllcyBpdHMgb3duIDMy4oCQYml0IENSQywgc28gZGFtYWdlZCBibG9ja3MgY2FuIGJlCi0gICAgICAgZGlzdGluZ3Vpc2hlZCBmcm9tIHVuZGFtYWdlZCBvbmVzLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIGlzIGEgIHNpbXBsZSAgcHJvZ3JhbSAgd2hvc2UgIHB1cnBvc2UgIGlzICB0bwotICAgICAgIHNlYXJjaCAgZm9yIGJsb2NrcyBpbiAuYnoyIGZpbGVzLCBhbmQgd3JpdGUgZWFjaCBibG9jayBvdXQKLSAgICAgICBpbnRvIGl0cyBvd24gLmJ6MiBmaWxlLiAgWW91IGNhbiB0aGVuIHVzZSBfCGJfCHpfCGlfCHBfCDIg4oiSdCB0byB0ZXN0Ci0gICAgICAgdGhlIGludGVncml0eSBvZiB0aGUgcmVzdWx0aW5nIGZpbGVzLCBhbmQgZGVjb21wcmVzcyB0aG9zZQotICAgICAgIHdoaWNoIGFyZSB1bmRhbWFnZWQuCi0KLSAgICAgICBfCGJfCHpfCGlfCHBfCDJfCHJfCGVfCGNfCG9fCHZfCGVfCHIgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW3CrQotICAgICAgIGFnZWQgICAgZmlsZSwgICAgYW5kICAgIHdyaXRlcyAgICBhICAgIG51bWJlciAgIG9mICAgZmlsZXMKLSAgICAgICAicmVjMDAwMDFmaWxlLmJ6MiIsICAicmVjMDAwMDJmaWxlLmJ6MiIsICBldGMsICBjb250YWluaW5nCi0gICAgICAgdGhlICAgZXh0cmFjdGVkICAgYmxvY2tzLiAgIFRoZSAgIG91dHB1dCAgIGZpbGVuYW1lcyAgIGFyZQotICAgICAgIGRlc2lnbmVkICBzbyAgdGhhdCB0aGUgdXNlIG9mIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb8KtCi0gICAgICAgY2Vzc2luZyAg4oCQ4oCQIGZvciBleGFtcGxlLCAiYnppcDIg4oCQZGMgIHJlYypmaWxlLmJ6MiA+IHJlY292wq0KLSAgICAgICBlcmVkX2RhdGEiIOKAkOKAkCBwcm9jZXNzZXMgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHNob3VsZCBiZSBvZiBtb3N0IHVzZSBkZWFsaW5nIHdpdGggbGFyZ2UgLmJ6MgotICAgICAgIGZpbGVzLCAgYXMgIHRoZXNlIHdpbGwgY29udGFpbiBtYW55IGJsb2Nrcy4gIEl0IGlzIGNsZWFybHkKLSAgICAgICBmdXRpbGUgdG8gdXNlIGl0IG9uIGRhbWFnZWQgc2luZ2xl4oCQYmxvY2sgIGZpbGVzLCAgc2luY2UgIGEKLSAgICAgICBkYW1hZ2VkICBibG9jayAgY2Fubm90ICBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW7CrQotICAgICAgIGltaXNlIGFueSBwb3RlbnRpYWwgZGF0YSBsb3NzIHRocm91Z2ggbWVkaWEgIG9yICB0cmFuc21pc8KtCi0gICAgICAgc2lvbiBlcnJvcnMsIHlvdSBtaWdodCBjb25zaWRlciBjb21wcmVzc2luZyB3aXRoIGEgc21hbGxlcgotICAgICAgIGJsb2NrIHNpemUuCi0KLQotUAhQRQhFUghSRghGTwhPUghSTQhNQQhBTghOQwhDRQhFIE4ITk8IT1QIVEUIRVMIUwotICAgICAgIFRoZSBzb3J0aW5nIHBoYXNlIG9mIGNvbXByZXNzaW9uIGdhdGhlcnMgdG9nZXRoZXIgIHNpbWlsYXIKLSAgICAgICBzdHJpbmdzICBpbiAgdGhlICBmaWxlLiAgQmVjYXVzZSBvZiB0aGlzLCBmaWxlcyBjb250YWluaW5nCi0gICAgICAgdmVyeSBsb25nIHJ1bnMgb2YgIHJlcGVhdGVkICBzeW1ib2xzLCAgbGlrZSAgImFhYmFhYmFhYmFhYgotICAgICAgIC4uLiIgICAocmVwZWF0ZWQgIHNldmVyYWwgaHVuZHJlZCB0aW1lcykgbWF5IGNvbXByZXNzIG1vcmUKLSAgICAgICBzbG93bHkgdGhhbiBub3JtYWwuICBWZXJzaW9ucyAwLjkuNSBhbmQgIGFib3ZlICBmYXJlICBtdWNoCi0gICAgICAgYmV0dGVyICB0aGFuIHByZXZpb3VzIHZlcnNpb25zIGluIHRoaXMgcmVzcGVjdC4gIFRoZSByYXRpbwotICAgICAgIGJldHdlZW4gd29yc3TigJBjYXNlIGFuZCBhdmVyYWdl4oCQY2FzZSBjb21wcmVzc2lvbiB0aW1lIGlzIGluCi0gICAgICAgdGhlICByZWdpb24gIG9mICAxMDoxLiAgRm9yIHByZXZpb3VzIHZlcnNpb25zLCB0aGlzIGZpZ3VyZQotICAgICAgIHdhcyBtb3JlIGxpa2UgMTAwOjEuICBZb3UgY2FuIHVzZSB0aGUg4oiSdnZ2diBvcHRpb24gdG8gbW9uwq0KLSAgICAgICBpdG9yIHByb2dyZXNzIGluIGdyZWF0IGRldGFpbCwgaWYgeW91IHdhbnQuCi0KLSAgICAgICBEZWNvbXByZXNzaW9uIHNwZWVkIGlzIHVuYWZmZWN0ZWQgYnkgdGhlc2UgcGhlbm9tZW5hLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyICB1c3VhbGx5ICBhbGxvY2F0ZXMgIHNldmVyYWwgIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8KLSAgICAgICBvcGVyYXRlIGluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbCBvdmVyIGl0IGluIGEgZmFpcmx5ICByYW7CrQotICAgICAgIGRvbSAgZmFzaGlvbi4gICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsIGJvdGggZm9yIGNvbcKtCi0gICAgICAgcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcsIGlzIGxhcmdlbHkgZGV0ZXJtaW5lZCAgYnkgIHRoZQotICAgICAgIHNwZWVkICBhdCAgd2hpY2ggIHlvdXIgIG1hY2hpbmUgIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KLSAgICAgICBCZWNhdXNlIG9mIHRoaXMsIHNtYWxsIGNoYW5nZXMgdG8gdGhlIGNvZGUgdG8gIHJlZHVjZSAgdGhlCi0gICAgICAgbWlzcyAgcmF0ZSAgaGF2ZSAgYmVlbiBvYnNlcnZlZCB0byBnaXZlIGRpc3Byb3BvcnRpb25hdGVseQotICAgICAgIGxhcmdlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gIEkgaW1hZ2luZSBfCGJfCHpfCGlfCHBfCDIgd2lsbCBwZXLCrQotICAgICAgIGZvcm0gYmVzdCBvbiBtYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLgotCi0KLUMIQ0EIQVYIVkUIRUEIQVQIVFMIUwotICAgICAgIEkvTyAgZXJyb3IgIG1lc3NhZ2VzICBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgdHJpZXMgaGFyZCB0byBkZXRlY3QgSS9PIGVycm9ycyAgYW5kICBleGl0ICBjbGVhbmx5LAotICAgICAgIGJ1dCAgdGhlICBkZXRhaWxzICBvZiAgd2hhdCAgdGhlIHByb2JsZW0gaXMgc29tZXRpbWVzIHNlZW0KLSAgICAgICByYXRoZXIgbWlzbGVhZGluZy4KLQotICAgICAgIFRoaXMgbWFudWFsIHBhZ2UgcGVydGFpbnMgdG8gdmVyc2lvbiAxLjAuNCBvZiBfCGJfCHpfCGlfCHBfCDJfCC4gIENvbcKtCi0gICAgICAgcHJlc3NlZCAgZGF0YSBjcmVhdGVkIGJ5IHRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcwotICAgICAgIGFuZCAgYmFja3dhcmRzICBjb21wYXRpYmxlICB3aXRoICAgdGhlICAgcHJldmlvdXMgICBwdWJsaWMKLSAgICAgICByZWxlYXNlcywgIHZlcnNpb25zICAwLjFwbDIsICAwLjkuMCwgIDAuOS41LCAxLjAuMCwgMS4wLjEsIAotICAgICAgIDEuMC4yIGFuZCAxLjAuMywgYnV0IHdpdGggdGhlICBmb2xsb3dpbmcgIGV4Y2VwdGlvbjogMC45LjAKLSAgICAgICBhbmQgYWJvdmUgY2FuICBjb3JyZWN0bHkgZGVjb21wcmVzcyAgbXVsdGlwbGUgY29uY2F0ZW5hdGVkCi0gICAgICAgY29tcHJlc3NlZCBmaWxlcy4gIDAuMXBsMiAgY2Fubm90IGRvIHRoaXM7ICBpdCAgd2lsbCAgc3RvcCAKLSAgICAgICBhZnRlciAgZGVjb21wcmVzc2luZyBqdXN0IHRoZSBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCi0KLSAgICAgICBfCGJfCHpfCGlfCHBfCDJfCHJfCGVfCGNfCG9fCHZfCGVfCHIgIHZlcnNpb25zIHByaW9yIHRvIDEuMC4yIHVzZWQgMzLigJBiaXQgaW50ZWdlcnMKLSAgICAgICB0byByZXByZXNlbnQgYml0IHBvc2l0aW9ucyBpbiBjb21wcmVzc2VkICBmaWxlcywgIHNvICB0aGV5Ci0gICAgICAgY291bGQgIG5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlIHRoYW4gNTEyIG1lZ2FieXRlcwotICAgICAgIGxvbmcuICBWZXJzaW9ucyAxLjAuMiBhbmQgYWJvdmUgdXNlIDY04oCQYml0ICBpbnRzICBvbiAgc29tZQotICAgICAgIHBsYXRmb3JtcyAgd2hpY2ggIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZCB0YXJnZXRzLCBhbmQKLSAgICAgICBXaW5kb3dzKS4gIFRvIGVzdGFibGlzaCB3aGV0aGVyIG9yICBub3QgIGJ6aXAycmVjb3ZlciAgd2FzCi0gICAgICAgYnVpbHQgIHdpdGggIHN1Y2ggIGEgbGltaXRhdGlvbiwgcnVuIGl0IHdpdGhvdXQgYXJndW1lbnRzLgotICAgICAgIEluIGFueSBldmVudCB5b3UgY2FuIGJ1aWxkIHlvdXJzZWxmIGFuICB1bmxpbWl0ZWQgIHZlcnNpb24KLSAgICAgICBpZiAgeW91ICBjYW4gIHJlY29tcGlsZSAgaXQgIHdpdGggTWF5YmVVSW50NjQgc2V0IHRvIGJlIGFuCi0gICAgICAgdW5zaWduZWQgNjTigJBiaXQgaW50ZWdlci4KLQotCi0KLQotQQhBVQhVVAhUSAhITwhPUghSCi0gICAgICAgSnVsaWFuIFNld2FyZCwganNld2FyZGJ6aXAub3JnLgotCi0gICAgICAgaHR0cDovL3d3dy5iemlwLm9yZwotCi0gICAgICAgVGhlIGlkZWFzIGVtYm9kaWVkIGluIF8IYl8Iel8IaV8IcF8IMiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlIGZvbMKtCi0gICAgICAgbG93aW5nICBwZW9wbGU6IE1pY2hhZWwgQnVycm93cyBhbmQgRGF2aWQgV2hlZWxlciAoZm9yIHRoZQotICAgICAgIGJsb2NrIHNvcnRpbmcgdHJhbnNmb3JtYXRpb24pLCBEYXZpZCBXaGVlbGVyICAoYWdhaW4sICBmb3IKLSAgICAgICB0aGUgSHVmZm1hbiBjb2RlciksIFBldGVyIEZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2TCrQotICAgICAgIGluZyBtb2RlbCBpbiB0aGUgb3JpZ2luYWwgXwhiXwh6XwhpXwhwXwgsIGFuZCBtYW55IHJlZmluZW1lbnRzKSwgYW5kCi0gICAgICAgQWxpc3RhaXIgIE1vZmZhdCwgIFJhZGZvcmQgIE5lYWwgIGFuZCAgSWFuIFdpdHRlbiAoZm9yIHRoZQotICAgICAgIGFyaXRobWV0aWMgIGNvZGVyICBpbiAgdGhlICBvcmlnaW5hbCAgXwhiXwh6XwhpXwhwXwgpXwguICAgSSAgYW0gIG11Y2gKLSAgICAgICBpbmRlYnRlZCBmb3IgdGhlaXIgaGVscCwgc3VwcG9ydCBhbmQgYWR2aWNlLiAgU2VlIHRoZSBtYW7CrQotICAgICAgIHVhbCBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyAgb2YKLSAgICAgICBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMgZW5jb3VyYWdlZCBtZSB0byBsb29rCi0gICAgICAgZm9yIGZhc3RlciBzb3J0aW5nIGFsZ29yaXRobXMsIHNvIGFzIHRvIHNwZWVkIHVwICBjb21wcmVzwq0KLSAgICAgICBzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0byBpbXByb3ZlIHRoZSB3b3JzdOKAkGNhc2UKLSAgICAgICBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIERvbm5hIFJvYmluc29uIFhNTGlzZWQgdGhlIGRvY3XCrQotICAgICAgIG1lbnRhdGlvbi4gICBUaGUgYnoqIHNjcmlwdHMgYXJlIGRlcml2ZWQgZnJvbSB0aG9zZSBvZiBHTlUKLSAgICAgICBnemlwLiAgTWFueSBwZW9wbGUgc2VudCBwYXRjaGVzLCBoZWxwZWQgIHdpdGggIHBvcnRhYmlsaXR5Ci0gICAgICAgcHJvYmxlbXMsICBsZW50ICBtYWNoaW5lcywgIGdhdmUgYWR2aWNlIGFuZCB3ZXJlIGdlbmVyYWxseQotICAgICAgIGhlbHBmdWwuCi0KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMigxKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLmMKaW5kZXggODhlNWYwOS4uZDk1ZDI4MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9iemlwMi5jCkBAIC03LDggKzcsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpAQCAtMTI4LDEyICsxMjgsMTIgQEAKICNpZiBCWl9MQ0NXSU4zMgogIyAgIGluY2x1ZGUgPGlvLmg+CiAjICAgaW5jbHVkZSA8ZmNudGwuaD4KLSMgICBpbmNsdWRlIDxzeXNcc3RhdC5oPgorIyAgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKICMgICBkZWZpbmUgTk9SRVRVUk4gICAgICAgLyoqLwogIyAgIGRlZmluZSBQQVRIX1NFUCAgICAgICAnXFwnCi0jICAgZGVmaW5lIE1ZX0xTVEFUICAgICAgIF9zdGF0Ci0jICAgZGVmaW5lIE1ZX1NUQVQgICAgICAgIF9zdGF0CisjICAgZGVmaW5lIE1ZX0xTVEFUICAgICAgIF9zdGF0aTY0CisjICAgZGVmaW5lIE1ZX1NUQVQgICAgICAgIF9zdGF0aTY0CiAjICAgZGVmaW5lIE1ZX1NfSVNSRUcoeCkgICgoeCkgJiBfU19JRlJFRykKICMgICBkZWZpbmUgTVlfU19JU0RJUih4KSAgKCh4KSAmIF9TX0lGRElSKQogCkBAIC0zODAsMjcgKzM4MCwyNyBAQAogCiAgICBpZiAodmVyYm9zaXR5ID49IDEpIHsKICAgICAgIGlmIChuYnl0ZXNfaW5fbG8zMiA9PSAwICYmIG5ieXRlc19pbl9oaTMyID09IDApIHsKLSAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiBubyBkYXRhIGNvbXByZXNzZWQuXG4iKTsKKwkgZnByaW50ZiAoIHN0ZGVyciwgIiBubyBkYXRhIGNvbXByZXNzZWQuXG4iKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgIENoYXIgICBidWZfbmluWzMyXSwgYnVmX25vdXRbMzJdOwotICAgICBVSW50NjQgbmJ5dGVzX2luLCAgIG5ieXRlc19vdXQ7Ci0gICAgIGRvdWJsZSBuYnl0ZXNfaW5fZCwgbmJ5dGVzX291dF9kOwotICAgICB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19pbiwgCi0gICAgICAgICAgICAgICAgICAgbmJ5dGVzX2luX2xvMzIsIG5ieXRlc19pbl9oaTMyICk7Ci0gICAgIHVJbnQ2NF9mcm9tX1VJbnQzMnMgKCAmbmJ5dGVzX291dCwgCi0gICAgICAgICAgICAgICAgICAgbmJ5dGVzX291dF9sbzMyLCBuYnl0ZXNfb3V0X2hpMzIgKTsKLSAgICAgbmJ5dGVzX2luX2QgID0gdUludDY0X3RvX2RvdWJsZSAoICZuYnl0ZXNfaW4gKTsKLSAgICAgbmJ5dGVzX291dF9kID0gdUludDY0X3RvX2RvdWJsZSAoICZuYnl0ZXNfb3V0ICk7Ci0gICAgIHVJbnQ2NF90b0FzY2lpICggYnVmX25pbiwgJm5ieXRlc19pbiApOwotICAgICB1SW50NjRfdG9Bc2NpaSAoIGJ1Zl9ub3V0LCAmbmJ5dGVzX291dCApOwotICAgICBmcHJpbnRmICggc3RkZXJyLCAiJTYuM2Y6MSwgJTYuM2YgYml0cy9ieXRlLCAiCi0gICAgICAgICAgICIlNS4yZiUlIHNhdmVkLCAlcyBpbiwgJXMgb3V0LlxuIiwKLSAgICAgICAgICAgbmJ5dGVzX2luX2QgLyBuYnl0ZXNfb3V0X2QsCi0gICAgICAgICAgICg4LjAgKiBuYnl0ZXNfb3V0X2QpIC8gbmJ5dGVzX2luX2QsCi0gICAgICAgICAgIDEwMC4wICogKDEuMCAtIG5ieXRlc19vdXRfZCAvIG5ieXRlc19pbl9kKSwKLSAgICAgICAgICAgYnVmX25pbiwKLSAgICAgICAgICAgYnVmX25vdXQKLSAgICAgICAgICk7CisJIENoYXIgICBidWZfbmluWzMyXSwgYnVmX25vdXRbMzJdOworCSBVSW50NjQgbmJ5dGVzX2luLCAgIG5ieXRlc19vdXQ7CisJIGRvdWJsZSBuYnl0ZXNfaW5fZCwgbmJ5dGVzX291dF9kOworCSB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19pbiwgCisJCQkgICAgICAgbmJ5dGVzX2luX2xvMzIsIG5ieXRlc19pbl9oaTMyICk7CisJIHVJbnQ2NF9mcm9tX1VJbnQzMnMgKCAmbmJ5dGVzX291dCwgCisJCQkgICAgICAgbmJ5dGVzX291dF9sbzMyLCBuYnl0ZXNfb3V0X2hpMzIgKTsKKwkgbmJ5dGVzX2luX2QgID0gdUludDY0X3RvX2RvdWJsZSAoICZuYnl0ZXNfaW4gKTsKKwkgbmJ5dGVzX291dF9kID0gdUludDY0X3RvX2RvdWJsZSAoICZuYnl0ZXNfb3V0ICk7CisJIHVJbnQ2NF90b0FzY2lpICggYnVmX25pbiwgJm5ieXRlc19pbiApOworCSB1SW50NjRfdG9Bc2NpaSAoIGJ1Zl9ub3V0LCAmbmJ5dGVzX291dCApOworCSBmcHJpbnRmICggc3RkZXJyLCAiJTYuM2Y6MSwgJTYuM2YgYml0cy9ieXRlLCAiCisJCSAgICIlNS4yZiUlIHNhdmVkLCAlcyBpbiwgJXMgb3V0LlxuIiwKKwkJICAgbmJ5dGVzX2luX2QgLyBuYnl0ZXNfb3V0X2QsCisJCSAgICg4LjAgKiBuYnl0ZXNfb3V0X2QpIC8gbmJ5dGVzX2luX2QsCisJCSAgIDEwMC4wICogKDEuMCAtIG5ieXRlc19vdXRfZCAvIG5ieXRlc19pbl9kKSwKKwkJICAgYnVmX25pbiwKKwkJICAgYnVmX25vdXQKKwkJICk7CiAgICAgICB9CiAgICB9CiAKQEAgLTUwNSwxMSArNTA1LDExIEBACiAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHsKICAgICAgIHJld2luZCh6U3RyZWFtKTsKICAgICAgIHdoaWxlIChUcnVlKSB7Ci0gICAgICAgICBpZiAobXlmZW9mKHpTdHJlYW0pKSBicmVhazsKLSAgICAgICAgIG5yZWFkID0gZnJlYWQgKCBvYnVmLCBzaXplb2YoVUNoYXIpLCA1MDAwLCB6U3RyZWFtICk7Ci0gICAgICAgICBpZiAoZmVycm9yKHpTdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87Ci0gICAgICAgICBpZiAobnJlYWQgPiAwKSBmd3JpdGUgKCBvYnVmLCBzaXplb2YoVUNoYXIpLCBucmVhZCwgc3RyZWFtICk7Ci0gICAgICAgICBpZiAoZmVycm9yKHN0cmVhbSkpIGdvdG8gZXJyaGFuZGxlcl9pbzsKKyAgICAgIAkgaWYgKG15ZmVvZih6U3RyZWFtKSkgYnJlYWs7CisgICAgICAJIG5yZWFkID0gZnJlYWQgKCBvYnVmLCBzaXplb2YoVUNoYXIpLCA1MDAwLCB6U3RyZWFtICk7CisgICAgICAJIGlmIChmZXJyb3IoelN0cmVhbSkpIGdvdG8gZXJyaGFuZGxlcl9pbzsKKyAgICAgIAkgaWYgKG5yZWFkID4gMCkgZndyaXRlICggb2J1Ziwgc2l6ZW9mKFVDaGFyKSwgbnJlYWQsIHN0cmVhbSApOworICAgICAgCSBpZiAoZmVycm9yKHN0cmVhbSkpIGdvdG8gZXJyaGFuZGxlcl9pbzsKICAgICAgIH0KICAgICAgIGdvdG8gY2xvc2VvazsKICAgIH0KQEAgLTU1NCw3ICs1NTQsNyBAQAogQm9vbCB0ZXN0U3RyZWFtICggRklMRSAqelN0cmVhbSApCiB7CiAgICBCWkZJTEUqIGJ6ZiA9IE5VTEw7Ci0gICBJbnQzMiAgIGJ6ZXJyLCBiemVycl9kdW1teSwgcmV0LCBucmVhZCwgc3RyZWFtTm8sIGk7CisgICBJbnQzMiAgIGJ6ZXJyLCBiemVycl9kdW1teSwgcmV0LCBzdHJlYW1ObywgaTsKICAgIFVDaGFyICAgb2J1Zls1MDAwXTsKICAgIFVDaGFyICAgdW51c2VkW0JaX01BWF9VTlVTRURdOwogICAgSW50MzIgICBuVW51c2VkOwpAQCAtNTc3LDcgKzU3Nyw3IEBACiAgICAgICBzdHJlYW1ObysrOwogCiAgICAgICB3aGlsZSAoYnplcnIgPT0gQlpfT0spIHsKLSAgICAgICAgIG5yZWFkID0gQloyX2J6UmVhZCAoICZiemVyciwgYnpmLCBvYnVmLCA1MDAwICk7CisgICAgICAgICBCWjJfYnpSZWFkICggJmJ6ZXJyLCBiemYsIG9idWYsIDUwMDAgKTsKICAgICAgICAgIGlmIChiemVyciA9PSBCWl9EQVRBX0VSUk9SX01BR0lDKSBnb3RvIGVycmhhbmRsZXI7CiAgICAgICB9CiAgICAgICBpZiAoYnplcnIgIT0gQlpfU1RSRUFNX0VORCkgZ290byBlcnJoYW5kbGVyOwpAQCAtNzQ4LDggKzc0OCw4IEBACiAgICBmcHJpbnRmICggc3RkZXJyLAogICAgICAgICAgICAgICJcbiVzOiBQQU5JQyAtLSBpbnRlcm5hbCBjb25zaXN0ZW5jeSBlcnJvcjpcbiIKICAgICAgICAgICAgICAiXHQlc1xuIgotICAgICAgICAgICAgICJcdFRoaXMgaXMgYSBCVUcuICBQbGVhc2UgcmVwb3J0IGl0IHRvIG1lIGF0OlxuIgotICAgICAgICAgICAgICJcdGpzZXdhcmRAYnppcC5vcmdcbiIsCisgICAgICAgICAgICAgIlx0VGhpcyBpcyBhIEJVRy4gIFBsZWFzZSByZXBvcnQgaXQgdG86XG4iCisgICAgICAgICAgICAgIlx0YnppcDItZGV2ZWxAc291cmNld2FyZS5vcmdcbiIsCiAgICAgICAgICAgICAgcHJvZ05hbWUsIHMgKTsKICAgIHNob3dGaWxlTmFtZXMoKTsKICAgIGNsZWFuVXBBbmRGYWlsKCAzICk7CkBAIC03NzUsOSArNzc1LDkgQEAKIHsKICAgaWYgKG5vaXN5KSB7CiAgICAgZnByaW50ZiAoIHN0ZGVyciwKLSAgICAgICAgICAiXG4lczogQ29tcHJlc3NlZCBmaWxlIGVuZHMgdW5leHBlY3RlZGx5O1xuXHQiCi0gICAgICAgICAgInBlcmhhcHMgaXQgaXMgY29ycnVwdGVkPyAgKlBvc3NpYmxlKiByZWFzb24gZm9sbG93cy5cbiIsCi0gICAgICAgICAgcHJvZ05hbWUgKTsKKwkgICAgICAiXG4lczogQ29tcHJlc3NlZCBmaWxlIGVuZHMgdW5leHBlY3RlZGx5O1xuXHQiCisJICAgICAgInBlcmhhcHMgaXQgaXMgY29ycnVwdGVkPyAgKlBvc3NpYmxlKiByZWFzb24gZm9sbG93cy5cbiIsCisJICAgICAgcHJvZ05hbWUgKTsKICAgICBwZXJyb3IgKCBwcm9nTmFtZSApOwogICAgIHNob3dGaWxlTmFtZXMoKTsKICAgICBjYWR2aXNlKCk7CkBAIC04MjksNyArODI5LDcgQEAKICAgICAgICIgICBUaGUgdXNlcidzIG1hbnVhbCwgU2VjdGlvbiA0LjMsIGhhcyBtb3JlIGluZm8gb24gKDEpIGFuZCAoMikuXG4iCiAgICAgICAiICAgXG4iCiAgICAgICAiICAgSWYgeW91IHN1c3BlY3QgdGhpcyBpcyBhIGJ1ZyBpbiBiemlwMiwgb3IgYXJlIHVuc3VyZSBhYm91dCAoMSlcbiIKLSAgICAgICIgICBvciAoMiksIGZlZWwgZnJlZSB0byByZXBvcnQgaXQgdG8gbWUgYXQ6IGpzZXdhcmRAYnppcC5vcmcuXG4iCisgICAgICAiICAgb3IgKDIpLCBmZWVsIGZyZWUgdG8gcmVwb3J0IGl0IHRvOiBiemlwMi1kZXZlbEBzb3VyY2V3YXJlLm9yZy5cbiIKICAgICAgICIgICBTZWN0aW9uIDQuMyBvZiB0aGUgdXNlcidzIG1hbnVhbCBkZXNjcmliZXMgdGhlIGluZm8gYSB1c2VmdWxcbiIKICAgICAgICIgICBidWcgcmVwb3J0IHNob3VsZCBoYXZlLiAgSWYgdGhlIG1hbnVhbCBpcyBhdmFpbGFibGUgb24geW91clxuIgogICAgICAgIiAgIHN5c3RlbSwgcGxlYXNlIHRyeSBhbmQgcmVhZCBpdCBiZWZvcmUgbWFpbGluZyBtZS4gIElmIHlvdSBkb24ndFxuIgpAQCAtODUyLDcgKzg1Miw3IEBACiAgICAgICAiICAgVGhlIHVzZXIncyBtYW51YWwsIFNlY3Rpb24gNC4zLCBoYXMgbW9yZSBpbmZvIG9uICgyKSBhbmQgKDMpLlxuIgogICAgICAgIiAgIFxuIgogICAgICAgIiAgIElmIHlvdSBzdXNwZWN0IHRoaXMgaXMgYSBidWcgaW4gYnppcDIsIG9yIGFyZSB1bnN1cmUgYWJvdXQgKDIpXG4iCi0gICAgICAiICAgb3IgKDMpLCBmZWVsIGZyZWUgdG8gcmVwb3J0IGl0IHRvIG1lIGF0OiBqc2V3YXJkQGJ6aXAub3JnLlxuIgorICAgICAgIiAgIG9yICgzKSwgZmVlbCBmcmVlIHRvIHJlcG9ydCBpdCB0bzogYnppcDItZGV2ZWxAc291cmNld2FyZS5vcmcuXG4iCiAgICAgICAiICAgU2VjdGlvbiA0LjMgb2YgdGhlIHVzZXIncyBtYW51YWwgZGVzY3JpYmVzIHRoZSBpbmZvIGEgdXNlZnVsXG4iCiAgICAgICAiICAgYnVnIHJlcG9ydCBzaG91bGQgaGF2ZS4gIElmIHRoZSBtYW51YWwgaXMgYXZhaWxhYmxlIG9uIHlvdXJcbiIKICAgICAgICIgICBzeXN0ZW0sIHBsZWFzZSB0cnkgYW5kIHJlYWQgaXQgYmVmb3JlIG1haWxpbmcgbWUuICBJZiB5b3UgZG9uJ3RcbiIKQEAgLTEyMDAsMTIgKzEyMDAsMTIgQEAKICAgIH0KICAgIGlmICggc3JjTW9kZSA9PSBTTV9GMkYgJiYgZmlsZUV4aXN0cyAoIG91dE5hbWUgKSApIHsKICAgICAgIGlmIChmb3JjZU92ZXJ3cml0ZSkgewotICAgICByZW1vdmUob3V0TmFtZSk7CisJIHJlbW92ZShvdXROYW1lKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgIGZwcmludGYgKCBzdGRlcnIsICIlczogT3V0cHV0IGZpbGUgJXMgYWxyZWFkeSBleGlzdHMuXG4iLAotICAgICAgICAgICBwcm9nTmFtZSwgb3V0TmFtZSApOwotICAgICBzZXRFeGl0KDEpOwotICAgICByZXR1cm47CisJIGZwcmludGYgKCBzdGRlcnIsICIlczogT3V0cHV0IGZpbGUgJXMgYWxyZWFkeSBleGlzdHMuXG4iLAorCQkgICBwcm9nTmFtZSwgb3V0TmFtZSApOworCSBzZXRFeGl0KDEpOworCSByZXR1cm47CiAgICAgICB9CiAgICB9CiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmICFmb3JjZU92ZXJ3cml0ZSAmJgpAQCAtMTM4Niw3ICsxMzg2LDcgQEAKICAgIH0gICAKICAgIGlmICggc3JjTW9kZSA9PSBTTV9GMkYgJiYgZmlsZUV4aXN0cyAoIG91dE5hbWUgKSApIHsKICAgICAgIGlmIChmb3JjZU92ZXJ3cml0ZSkgewotICAgIHJlbW92ZShvdXROYW1lKTsKKwlyZW1vdmUob3V0TmFtZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBmcHJpbnRmICggc3RkZXJyLCAiJXM6IE91dHB1dCBmaWxlICVzIGFscmVhZHkgZXhpc3RzLlxuIiwKICAgICAgICAgICAgICAgICAgIHByb2dOYW1lLCBvdXROYW1lICk7CkBAIC0xNjA1LDExICsxNjA1LDExIEBACiAgICAgImJ6aXAyLCBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLiAgIgogICAgICJWZXJzaW9uICVzLlxuIgogICAgICIgICBcbiIKLSAgICAiICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgYnkgSnVsaWFuIFNld2FyZC5cbiIKKyAgICAiICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkgSnVsaWFuIFNld2FyZC5cbiIKICAgICAiICAgXG4iCiAgICAgIiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4iCiAgICAgIiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBzZXQgb3V0IGluIHRoZSBMSUNFTlNFIGZpbGUsIHdoaWNoIGlzIGluY2x1ZGVkXG4iCi0gICAgIiAgIGluIHRoZSBiemlwMi0xLjAuNSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuIgorICAgICIgICBpbiB0aGUgYnppcDIgc291cmNlIGRpc3RyaWJ1dGlvbi5cbiIKICAgICAiICAgXG4iCiAgICAgIiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgogICAgICIgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgpAQCAtMTk5NywxOCArMTk5NywyMCBAQAogICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlY29kZSA9IFRydWU7CiAgICAgICAgICBmb3IgKGFhID0gYXJnTGlzdDsgYWEgIT0gTlVMTDsgYWEgPSBhYS0+bGluaykgewotICAgICAgICBpZiAoSVNGTEFHKCItLSIpKSB7IGRlY29kZSA9IEZhbHNlOyBjb250aW51ZTsgfQorCSAgICBpZiAoSVNGTEFHKCItLSIpKSB7IGRlY29kZSA9IEZhbHNlOyBjb250aW51ZTsgfQogICAgICAgICAgICAgaWYgKGFhLT5uYW1lWzBdID09ICctJyAmJiBkZWNvZGUpIGNvbnRpbnVlOwogICAgICAgICAgICAgbnVtRmlsZXNQcm9jZXNzZWQrKzsKICAgICAgICAgICAgIHRlc3RmICggYWEtPm5hbWUgKTsKLSAgICAgfQorCSB9CiAgICAgICB9Ci0gICAgICBpZiAodGVzdEZhaWxzRXhpc3QgJiYgbm9pc3kpIHsKLSAgICAgICAgIGZwcmludGYgKCBzdGRlcnIsCi0gICAgICAgICAgICJcbiIKLSAgICAgICAgICAgIllvdSBjYW4gdXNlIHRoZSBgYnppcDJyZWNvdmVyJyBwcm9ncmFtIHRvIGF0dGVtcHQgdG8gcmVjb3ZlclxuIgotICAgICAgICAgICAiZGF0YSBmcm9tIHVuZGFtYWdlZCBzZWN0aW9ucyBvZiBjb3JydXB0ZWQgZmlsZXMuXG5cbiIKLSAgICAgICAgICk7CisgICAgICBpZiAodGVzdEZhaWxzRXhpc3QpIHsKKwkgaWYgKG5vaXN5KSB7CisgICAgICAgICAgICBmcHJpbnRmICggc3RkZXJyLAorICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgIllvdSBjYW4gdXNlIHRoZSBgYnppcDJyZWNvdmVyJyBwcm9ncmFtIHRvIGF0dGVtcHQgdG8gcmVjb3ZlclxuIgorICAgICAgICAgICAgICAgImRhdGEgZnJvbSB1bmRhbWFnZWQgc2VjdGlvbnMgb2YgY29ycnVwdGVkIGZpbGVzLlxuXG4iCisgICAgICAgICAgICApOworCSB9CiAgICAgICAgICBzZXRFeGl0KDIpOwogICAgICAgICAgZXhpdChleGl0VmFsdWUpOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIudHh0IGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmI5Yzc0Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM5MSArMCwwIEBACi0KLU5BTUUKLSAgICAgICBiemlwMiwgYnVuemlwMiAtIGEgYmxvY2stc29ydGluZyBmaWxlIGNvbXByZXNzb3IsIHYxLjAuNAotICAgICAgIGJ6Y2F0IC0gZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dAotICAgICAgIGJ6aXAycmVjb3ZlciAtIHJlY292ZXJzIGRhdGEgZnJvbSBkYW1hZ2VkIGJ6aXAyIGZpbGVzCi0KLQotU1lOT1BTSVMKLSAgICAgICBiemlwMiBbIC1jZGZrcXN0dnpWTDEyMzQ1Njc4OSBdIFsgZmlsZW5hbWVzIC4uLiAgXQotICAgICAgIGJ1bnppcDIgWyAtZmt2c1ZMIF0gWyBmaWxlbmFtZXMgLi4uICBdCi0gICAgICAgYnpjYXQgWyAtcyBdIFsgZmlsZW5hbWVzIC4uLiAgXQotICAgICAgIGJ6aXAycmVjb3ZlciBmaWxlbmFtZQotCi0KLURFU0NSSVBUSU9OCi0gICAgICAgYnppcDIgIGNvbXByZXNzZXMgIGZpbGVzICB1c2luZyAgdGhlIEJ1cnJvd3MtV2hlZWxlciBibG9jawotICAgICAgIHNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbiBhbGdvcml0aG0sICBhbmQgIEh1ZmZtYW4gIGNvZGluZy4KLSAgICAgICBDb21wcmVzc2lvbiAgaXMgIGdlbmVyYWxseSAgY29uc2lkZXJhYmx5ICBiZXR0ZXIgdGhhbiB0aGF0Ci0gICAgICAgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwgTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLAotICAgICAgIGFuZCAgYXBwcm9hY2hlcyAgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0gZmFtaWx5IG9mIHN0YS0KLSAgICAgICB0aXN0aWNhbCBjb21wcmVzc29ycy4KLQotICAgICAgIFRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltaWxhciAgdG8KLSAgICAgICB0aG9zZSBvZiBHTlUgZ3ppcCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuCi0KLSAgICAgICBiemlwMiAgZXhwZWN0cyAgYSBsaXN0IG9mIGZpbGUgbmFtZXMgdG8gYWNjb21wYW55IHRoZSBjb20tCi0gICAgICAgbWFuZC1saW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzIHJlcGxhY2VkICBieSAgYSAgY29tcHJlc3NlZAotICAgICAgIHZlcnNpb24gIG9mICBpdHNlbGYsICB3aXRoICB0aGUgIG5hbWUgIm9yaWdpbmFsX25hbWUuYnoyIi4KLSAgICAgICBFYWNoIGNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsICBwZXItCi0gICAgICAgbWlzc2lvbnMsIGFuZCwgd2hlbiBwb3NzaWJsZSwgb3duZXJzaGlwIGFzIHRoZSBjb3JyZXNwb25kLQotICAgICAgIGluZyBvcmlnaW5hbCwgc28gdGhhdCB0aGVzZSBwcm9wZXJ0aWVzICBjYW4gIGJlICBjb3JyZWN0bHkKLSAgICAgICByZXN0b3JlZCAgYXQgIGRlY29tcHJlc3Npb24gIHRpbWUuICAgRmlsZSBuYW1lIGhhbmRsaW5nIGlzCi0gICAgICAgbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBwcmVzZXJ2LQotICAgICAgIGluZyAgb3JpZ2luYWwgZmlsZSBuYW1lcywgcGVybWlzc2lvbnMsIG93bmVyc2hpcHMgb3IgZGF0ZXMKLSAgICAgICBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrIHRoZXNlIGNvbmNlcHRzLCBvciBoYXZlICBzZXJpb3VzCi0gICAgICAgZmlsZSBuYW1lIGxlbmd0aCByZXN0cmljdGlvbnMsIHN1Y2ggYXMgTVMtRE9TLgotCi0gICAgICAgYnppcDIgIGFuZCAgYnVuemlwMiB3aWxsIGJ5IGRlZmF1bHQgbm90IG92ZXJ3cml0ZSBleGlzdGluZwotICAgICAgIGZpbGVzLiAgSWYgeW91IHdhbnQgdGhpcyB0byBoYXBwZW4sIHNwZWNpZnkgdGhlIC1mIGZsYWcuCi0KLSAgICAgICBJZiBubyBmaWxlIG5hbWVzICBhcmUgIHNwZWNpZmllZCwgIGJ6aXAyICBjb21wcmVzc2VzICBmcm9tCi0gICAgICAgc3RhbmRhcmQgIGlucHV0ICB0byAgc3RhbmRhcmQgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCBiemlwMgotICAgICAgIHdpbGwgZGVjbGluZSB0byB3cml0ZSBjb21wcmVzc2VkIG91dHB1dCB0byBhIHRlcm1pbmFsLCAgYXMKLSAgICAgICB0aGlzICB3b3VsZCAgYmUgIGVudGlyZWx5ICBpbmNvbXByZWhlbnNpYmxlICBhbmQgdGhlcmVmb3JlCi0gICAgICAgcG9pbnRsZXNzLgotCi0gICAgICAgYnVuemlwMiAob3IgYnppcDIgLWQpIGRlY29tcHJlc3NlcyAgYWxsICBzcGVjaWZpZWQgIGZpbGVzLgotICAgICAgIEZpbGVzIHdoaWNoIHdlcmUgbm90IGNyZWF0ZWQgYnkgYnppcDIgd2lsbCBiZSBkZXRlY3RlZCBhbmQKLSAgICAgICBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4gIGJ6aXAyICBhdHRlbXB0cyAgdG8gIGd1ZXNzCi0gICAgICAgdGhlICBmaWxlbmFtZSAgZm9yICB0aGUgZGVjb21wcmVzc2VkIGZpbGUgZnJvbSB0aGF0IG9mIHRoZQotICAgICAgIGNvbXByZXNzZWQgZmlsZSBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgICAgIGZpbGVuYW1lLmJ6MiAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICAgICAgICAgZmlsZW5hbWUuYnogICAgIGJlY29tZXMgICBmaWxlbmFtZQotICAgICAgICAgICAgICBmaWxlbmFtZS50YnoyICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgotICAgICAgICAgICAgICBmaWxlbmFtZS50YnogICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgotICAgICAgICAgICAgICBhbnlvdGhlcm5hbWUgICAgYmVjb21lcyAgIGFueW90aGVybmFtZS5vdXQKLQotICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGVuZCBpbiBvbmUgb2YgdGhlIHJlY29nbmlzZWQgZW5kaW5ncywKLSAgICAgICAuYnoyLCAgLmJ6LCAgLnRiejIgb3IgLnRieiwgYnppcDIgY29tcGxhaW5zIHRoYXQgaXQgY2Fubm90Ci0gICAgICAgZ3Vlc3MgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB1c2VzIHRoZSBvcmlnaW5hbAotICAgICAgIG5hbWUgd2l0aCAub3V0IGFwcGVuZGVkLgotCi0gICAgICAgQXMgIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubyBmaWxlbmFtZXMgY2F1c2VzIGRlY29tLQotICAgICAgIHByZXNzaW9uIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgYnVuemlwMiB3aWxsIGNvcnJlY3RseSBkZWNvbXByZXNzIGEgZmlsZSB3aGljaCBpcyB0aGUgY29uLQotICAgICAgIGNhdGVuYXRpb24gb2YgdHdvIG9yIG1vcmUgY29tcHJlc3NlZCBmaWxlcy4gIFRoZSByZXN1bHQgaXMKLSAgICAgICB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB1bmNvbXByZXNzZWQgZmlsZXMuCi0gICAgICAgSW50ZWdyaXR5IHRlc3RpbmcgKC10KSBvZiBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyBpcwotICAgICAgIGFsc28gc3VwcG9ydGVkLgotCi0gICAgICAgWW91IGNhbiBhbHNvIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgZmlsZXMgdG8gdGhlICBzdGFuZGFyZAotICAgICAgIG91dHB1dCAgYnkgZ2l2aW5nIHRoZSAtYyBmbGFnLiAgTXVsdGlwbGUgZmlsZXMgbWF5IGJlIGNvbS0KLSAgICAgICBwcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlIHJlc3VsdGluZyBvdXRwdXRzCi0gICAgICAgYXJlICBmZWQgIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZiBtdWx0aXBsZQotICAgICAgIGZpbGVzIGluIHRoaXMgbWFubmVyIGdlbmVyYXRlcyBhIHN0cmVhbSBjb250YWluaW5nICBtdWx0aS0KLSAgICAgICBwbGUgY29tcHJlc3NlZCBmaWxlIHJlcHJlc2VudGF0aW9ucy4gIFN1Y2ggYSBzdHJlYW0gY2FuIGJlCi0gICAgICAgZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5ICBieSAgYnppcDIgIHZlcnNpb24gIDAuOS4wICBvcgotICAgICAgIGxhdGVyLiAgIEVhcmxpZXIgIHZlcnNpb25zIG9mIGJ6aXAyIHdpbGwgc3RvcCBhZnRlciBkZWNvbS0KLSAgICAgICBwcmVzc2luZyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0gICAgICAgYnpjYXQgKG9yIGJ6aXAyIC1kYykgZGVjb21wcmVzc2VzIGFsbCBzcGVjaWZpZWQgIGZpbGVzICB0bwotICAgICAgIHRoZSBzdGFuZGFyZCBvdXRwdXQuCi0KLSAgICAgICBiemlwMiAgd2lsbCAgcmVhZCBhcmd1bWVudHMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICAgICAgQlpJUDIgYW5kIEJaSVAsIGluICB0aGF0ICBvcmRlciwgIGFuZCAgd2lsbCAgcHJvY2VzcyAgdGhlbQotICAgICAgIGJlZm9yZSAgYW55ICBhcmd1bWVudHMgIHJlYWQgIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMKLSAgICAgICBnaXZlcyBhIGNvbnZlbmllbnQgd2F5IHRvIHN1cHBseSBkZWZhdWx0IGFyZ3VtZW50cy4KLQotICAgICAgIENvbXByZXNzaW9uIGlzIGFsd2F5cyBwZXJmb3JtZWQsIGV2ZW4gIGlmICB0aGUgIGNvbXByZXNzZWQKLSAgICAgICBmaWxlICBpcyBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwuICBGaWxlcyBvZiBsZXNzCi0gICAgICAgdGhhbiBhYm91dCBvbmUgaHVuZHJlZCBieXRlcyB0ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZQotICAgICAgIGNvbXByZXNzaW9uICBtZWNoYW5pc20gIGhhcyAgYSAgY29uc3RhbnQgIG92ZXJoZWFkICBpbiB0aGUKLSAgICAgICByZWdpb24gb2YgNTAgYnl0ZXMuICBSYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQgIG9mCi0gICAgICAgbW9zdCAgZmlsZSAgY29tcHJlc3NvcnMpICBpcyAgY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlcgotICAgICAgIGJ5dGUsIGdpdmluZyBhbiBleHBhbnNpb24gb2YgYXJvdW5kIDAuNSUuCi0KLSAgICAgICBBcyBhIHNlbGYtY2hlY2sgZm9yIHlvdXIgIHByb3RlY3Rpb24sICBiemlwMiAgdXNlcyAgMzItYml0Ci0gICAgICAgQ1JDcyAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZQotICAgICAgIGlzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuICBUaGlzIGd1YXJkcyBhZ2FpbnN0IGNvcnJ1cC0KLSAgICAgICB0aW9uICBvZiAgdGhlIGNvbXByZXNzZWQgZGF0YSwgYW5kIGFnYWluc3QgdW5kZXRlY3RlZCBidWdzCi0gICAgICAgaW4gYnppcDIgKGhvcGVmdWxseSB2ZXJ5IHVubGlrZWx5KS4gIFRoZSBjaGFuY2VzICBvZiAgZGF0YQotICAgICAgIGNvcnJ1cHRpb24gIGdvaW5nICB1bmRldGVjdGVkICBpcyAgbWljcm9zY29waWMsICBhYm91dCBvbmUKLSAgICAgICBjaGFuY2UgaW4gZm91ciBiaWxsaW9uIGZvciBlYWNoIGZpbGUgcHJvY2Vzc2VkLiAgQmUgYXdhcmUsCi0gICAgICAgdGhvdWdoLCAgdGhhdCAgdGhlICBjaGVjayBvY2N1cnMgdXBvbiBkZWNvbXByZXNzaW9uLCBzbyBpdAotICAgICAgIGNhbiBvbmx5IHRlbGwgeW91IHRoYXQgc29tZXRoaW5nIGlzIHdyb25nLiAgSXQgY2FuJ3QgIGhlbHAKLSAgICAgICB5b3UgIHJlY292ZXIgIHRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0YS4gIFlvdSBjYW4gdXNlCi0gICAgICAgYnppcDJyZWNvdmVyIHRvIHRyeSB0byByZWNvdmVyIGRhdGEgZnJvbSBkYW1hZ2VkIGZpbGVzLgotCi0gICAgICAgUmV0dXJuIHZhbHVlczogMCBmb3IgYSBub3JtYWwgZXhpdCwgIDEgIGZvciAgZW52aXJvbm1lbnRhbAotICAgICAgIHByb2JsZW1zICAoZmlsZSBub3QgZm91bmQsIGludmFsaWQgZmxhZ3MsIEkvTyBlcnJvcnMsICZjKSwKLSAgICAgICAyIHRvIGluZGljYXRlIGEgY29ycnVwdCBjb21wcmVzc2VkIGZpbGUsIDMgZm9yIGFuIGludGVybmFsCi0gICAgICAgY29uc2lzdGVuY3kgZXJyb3IgKGVnLCBidWcpIHdoaWNoIGNhdXNlZCBiemlwMiB0byBwYW5pYy4KLQotCi1PUFRJT05TCi0gICAgICAgLWMgLS1zdGRvdXQKLSAgICAgICAgICAgICAgQ29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZCBvdXRwdXQuCi0KLSAgICAgICAtZCAtLWRlY29tcHJlc3MKLSAgICAgICAgICAgICAgRm9yY2UgIGRlY29tcHJlc3Npb24uICBiemlwMiwgYnVuemlwMiBhbmQgYnpjYXQgYXJlCi0gICAgICAgICAgICAgIHJlYWxseSB0aGUgc2FtZSBwcm9ncmFtLCAgYW5kICB0aGUgIGRlY2lzaW9uICBhYm91dAotICAgICAgICAgICAgICB3aGF0ICBhY3Rpb25zIHRvIHRha2UgaXMgZG9uZSBvbiB0aGUgYmFzaXMgb2Ygd2hpY2gKLSAgICAgICAgICAgICAgbmFtZSBpcyB1c2VkLiAgVGhpcyBmbGFnIG92ZXJyaWRlcyB0aGF0ICBtZWNoYW5pc20sCi0gICAgICAgICAgICAgIGFuZCBmb3JjZXMgYnppcDIgdG8gZGVjb21wcmVzcy4KLQotICAgICAgIC16IC0tY29tcHJlc3MKLSAgICAgICAgICAgICAgVGhlICAgY29tcGxlbWVudCAgIHRvICAgLWQ6ICAgZm9yY2VzICAgY29tcHJlc3Npb24sCi0gICAgICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9jYXRpb24gbmFtZS4KLQotICAgICAgIC10IC0tdGVzdAotICAgICAgICAgICAgICBDaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQgZG9uJ3QKLSAgICAgICAgICAgICAgZGVjb21wcmVzcyAgdGhlbS4gICBUaGlzICByZWFsbHkgIHBlcmZvcm1zICBhIHRyaWFsCi0gICAgICAgICAgICAgIGRlY29tcHJlc3Npb24gYW5kIHRocm93cyBhd2F5IHRoZSByZXN1bHQuCi0KLSAgICAgICAtZiAtLWZvcmNlCi0gICAgICAgICAgICAgIEZvcmNlIG92ZXJ3cml0ZSBvZiBvdXRwdXQgZmlsZXMuICAgTm9ybWFsbHksICBiemlwMgotICAgICAgICAgICAgICB3aWxsICBub3QgIG92ZXJ3cml0ZSAgZXhpc3RpbmcgIG91dHB1dCBmaWxlcy4gIEFsc28KLSAgICAgICAgICAgICAgZm9yY2VzIGJ6aXAyIHRvIGJyZWFrIGhhcmQgbGlua3MgdG8gZmlsZXMsIHdoaWNoIGl0Ci0gICAgICAgICAgICAgIG90aGVyd2lzZSB3b3VsZG4ndCBkby4KLQotICAgICAgICAgICAgICBiemlwMiAgbm9ybWFsbHkgIGRlY2xpbmVzIHRvIGRlY29tcHJlc3MgZmlsZXMgd2hpY2gKLSAgICAgICAgICAgICAgZG9uJ3QgaGF2ZSB0aGUgIGNvcnJlY3QgIG1hZ2ljICBoZWFkZXIgIGJ5dGVzLiAgIElmCi0gICAgICAgICAgICAgIGZvcmNlZCAgKC1mKSwgIGhvd2V2ZXIsICBpdCAgd2lsbCAgcGFzcyAgc3VjaCBmaWxlcwotICAgICAgICAgICAgICB0aHJvdWdoIHVubW9kaWZpZWQuICBUaGlzIGlzIGhvdyBHTlUgZ3ppcCAgYmVoYXZlcy4KLQotICAgICAgIC1rIC0ta2VlcAotICAgICAgICAgICAgICBLZWVwICAoZG9uJ3QgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcgY29tcHJlc3Npb24KLSAgICAgICAgICAgICAgb3IgZGVjb21wcmVzc2lvbi4KLQotICAgICAgIC1zIC0tc21hbGwKLSAgICAgICAgICAgICAgUmVkdWNlIG1lbW9yeSB1c2FnZSwgZm9yIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uCi0gICAgICAgICAgICAgIGFuZCAgdGVzdGluZy4gICBGaWxlcyAgYXJlICBkZWNvbXByZXNzZWQgYW5kIHRlc3RlZAotICAgICAgICAgICAgICB1c2luZyBhIG1vZGlmaWVkIGFsZ29yaXRobSB3aGljaCBvbmx5IHJlcXVpcmVzICAyLjUKLSAgICAgICAgICAgICAgYnl0ZXMgIHBlciAgYmxvY2sgYnl0ZS4gIFRoaXMgbWVhbnMgYW55IGZpbGUgY2FuIGJlCi0gICAgICAgICAgICAgIGRlY29tcHJlc3NlZCBpbiAyMzAwayBvZiBtZW1vcnksICBhbGJlaXQgIGF0ICBhYm91dAotICAgICAgICAgICAgICBoYWxmIHRoZSBub3JtYWwgc3BlZWQuCi0KLSAgICAgICAgICAgICAgRHVyaW5nICBjb21wcmVzc2lvbiwgIC1zICBzZWxlY3RzICBhICBibG9jayBzaXplIG9mCi0gICAgICAgICAgICAgIDIwMGssIHdoaWNoIGxpbWl0cyBtZW1vcnkgdXNlIHRvICBhcm91bmQgIHRoZSAgc2FtZQotICAgICAgICAgICAgICBmaWd1cmUsICBhdCAgdGhlIGV4cGVuc2Ugb2YgeW91ciBjb21wcmVzc2lvbiByYXRpby4KLSAgICAgICAgICAgICAgSW4gc2hvcnQsIGlmIHlvdXIgIG1hY2hpbmUgIGlzICBsb3cgIG9uICBtZW1vcnkgICg4Ci0gICAgICAgICAgICAgIG1lZ2FieXRlcyAgb3IgIGxlc3MpLCAgdXNlICAtcyBmb3IgZXZlcnl0aGluZy4gIFNlZQotICAgICAgICAgICAgICBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4KLQotICAgICAgIC1xIC0tcXVpZXQKLSAgICAgICAgICAgICAgU3VwcHJlc3Mgbm9uLWVzc2VudGlhbCB3YXJuaW5nIG1lc3NhZ2VzLiAgIE1lc3NhZ2VzCi0gICAgICAgICAgICAgIHBlcnRhaW5pbmcgIHRvIEkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cwotICAgICAgICAgICAgICB3aWxsIG5vdCBiZSBzdXBwcmVzc2VkLgotCi0gICAgICAgLXYgLS12ZXJib3NlCi0gICAgICAgICAgICAgIFZlcmJvc2UgbW9kZSAtLSBzaG93IHRoZSBjb21wcmVzc2lvbiByYXRpbyBmb3IgZWFjaAotICAgICAgICAgICAgICBmaWxlICBwcm9jZXNzZWQuICAgRnVydGhlciAgLXYncyAgaW5jcmVhc2UgdGhlIHZlci0KLSAgICAgICAgICAgICAgYm9zaXR5IGxldmVsLCBzcGV3aW5nIG91dCBsb3RzIG9mIGluZm9ybWF0aW9uIHdoaWNoCi0gICAgICAgICAgICAgIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KLQotICAgICAgIC1MIC0tbGljZW5zZSAtViAtLXZlcnNpb24KLSAgICAgICAgICAgICAgRGlzcGxheSAgdGhlICBzb2Z0d2FyZSAgdmVyc2lvbiwgIGxpY2Vuc2UgdGVybXMgYW5kCi0gICAgICAgICAgICAgIGNvbmRpdGlvbnMuCi0KLSAgICAgICAtMSAob3IgLS1mYXN0KSB0byAtOSAob3IgLS1iZXN0KQotICAgICAgICAgICAgICBTZXQgdGhlIGJsb2NrIHNpemUgdG8gMTAwIGssIDIwMCBrIC4uICA5MDAgIGsgIHdoZW4KLSAgICAgICAgICAgICAgY29tcHJlc3NpbmcuICAgSGFzICBubyAgZWZmZWN0ICB3aGVuIGRlY29tcHJlc3NpbmcuCi0gICAgICAgICAgICAgIFNlZSBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4gIFRoZSAtLWZhc3QgYW5kIC0tYmVzdAotICAgICAgICAgICAgICBhbGlhc2VzICBhcmUgIHByaW1hcmlseSBmb3IgR05VIGd6aXAgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgLS1mYXN0IGRvZXNuJ3QgbWFrZSB0aGluZ3MgIHNpZ25pZmktCi0gICAgICAgICAgICAgIGNhbnRseSAgZmFzdGVyLiAgIEFuZCAgLS1iZXN0ICBtZXJlbHkgIHNlbGVjdHMgIHRoZQotICAgICAgICAgICAgICBkZWZhdWx0IGJlaGF2aW91ci4KLQotICAgICAgIC0tICAgICBUcmVhdHMgYWxsIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFzIGZpbGUgbmFtZXMsIGV2ZW4KLSAgICAgICAgICAgICAgaWYgdGhleSBzdGFydCB3aXRoIGEgZGFzaC4gIFRoaXMgaXMgc28geW91IGNhbiBoYW4tCi0gICAgICAgICAgICAgIGRsZSBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZyAgd2l0aCAgYSAgZGFzaCwgIGZvcgotICAgICAgICAgICAgICBleGFtcGxlOiBiemlwMiAtLSAtbXlmaWxlbmFtZS4KLQotICAgICAgIC0tcmVwZXRpdGl2ZS1mYXN0IC0tcmVwZXRpdGl2ZS1iZXN0Ci0gICAgICAgICAgICAgIFRoZXNlICBmbGFncyAgYXJlICByZWR1bmRhbnQgIGluIHZlcnNpb25zIDAuOS41IGFuZAotICAgICAgICAgICAgICBhYm92ZS4gIFRoZXkgcHJvdmlkZWQgc29tZSBjb2Fyc2UgY29udHJvbCBvdmVyICB0aGUKLSAgICAgICAgICAgICAgYmVoYXZpb3VyICBvZiB0aGUgc29ydGluZyBhbGdvcml0aG0gaW4gZWFybGllciB2ZXItCi0gICAgICAgICAgICAgIHNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZQotICAgICAgICAgICAgICBoYXZlICBhbiAgaW1wcm92ZWQgIGFsZ29yaXRobSAgd2hpY2ggIHJlbmRlcnMgdGhlc2UKLSAgICAgICAgICAgICAgZmxhZ3MgaXJyZWxldmFudC4KLQotCi1NRU1PUlkgTUFOQUdFTUVOVAotICAgICAgIGJ6aXAyIGNvbXByZXNzZXMgbGFyZ2UgZmlsZXMgaW4gYmxvY2tzLiAgIFRoZSAgYmxvY2sgIHNpemUKLSAgICAgICBhZmZlY3RzICBib3RoICB0aGUgIGNvbXByZXNzaW9uICByYXRpbyAgYWNoaWV2ZWQsICBhbmQgdGhlCi0gICAgICAgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLgotICAgICAgIFRoZSAgZmxhZ3MgIC0xICB0aHJvdWdoICAtOSAgc3BlY2lmeSAgdGhlIGJsb2NrIHNpemUgdG8gYmUKLSAgICAgICAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlIGRlZmF1bHQpICByZXNwZWMtCi0gICAgICAgdGl2ZWx5LiAgIEF0ICBkZWNvbXByZXNzaW9uICB0aW1lLCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvcgotICAgICAgIGNvbXByZXNzaW9uIGlzIHJlYWQgZnJvbSAgdGhlICBoZWFkZXIgIG9mICB0aGUgIGNvbXByZXNzZWQKLSAgICAgICBmaWxlLCBhbmQgYnVuemlwMiB0aGVuIGFsbG9jYXRlcyBpdHNlbGYganVzdCBlbm91Z2ggbWVtb3J5Ci0gICAgICAgdG8gZGVjb21wcmVzcyB0aGUgZmlsZS4gIFNpbmNlIGJsb2NrIHNpemVzIGFyZSAgc3RvcmVkICBpbgotICAgICAgIGNvbXByZXNzZWQgIGZpbGVzLCAgaXQgZm9sbG93cyB0aGF0IHRoZSBmbGFncyAtMSB0byAtOSBhcmUKLSAgICAgICBpcnJlbGV2YW50IHRvIGFuZCBzbyBpZ25vcmVkIGR1cmluZyBkZWNvbXByZXNzaW9uLgotCi0gICAgICAgQ29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzLCBpbiBieXRlcywgIGNhbgotICAgICAgIGJlIGVzdGltYXRlZCBhczoKLQotICAgICAgICAgICAgICBDb21wcmVzc2lvbjogICA0MDBrICsgKCA4IHggYmxvY2sgc2l6ZSApCi0KLSAgICAgICAgICAgICAgRGVjb21wcmVzc2lvbjogMTAwayArICggNCB4IGJsb2NrIHNpemUgKSwgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwayArICggMi41IHggYmxvY2sgc2l6ZSApCi0KLSAgICAgICBMYXJnZXIgIGJsb2NrICBzaXplcyAgZ2l2ZSAgcmFwaWRseSAgZGltaW5pc2hpbmcgIG1hcmdpbmFsCi0gICAgICAgcmV0dXJucy4gIE1vc3Qgb2YgdGhlIGNvbXByZXNzaW9uIGNvbWVzIGZyb20gdGhlIGZpcnN0IHR3bwotICAgICAgIG9yICB0aHJlZSBodW5kcmVkIGsgb2YgYmxvY2sgc2l6ZSwgYSBmYWN0IHdvcnRoIGJlYXJpbmcgaW4KLSAgICAgICBtaW5kIHdoZW4gdXNpbmcgYnppcDIgIG9uICBzbWFsbCAgbWFjaGluZXMuICAgSXQgIGlzICBhbHNvCi0gICAgICAgaW1wb3J0YW50ICB0byAgYXBwcmVjaWF0ZSAgdGhhdCAgdGhlICBkZWNvbXByZXNzaW9uIG1lbW9yeQotICAgICAgIHJlcXVpcmVtZW50IGlzIHNldCBhdCBjb21wcmVzc2lvbiB0aW1lIGJ5ICB0aGUgIGNob2ljZSAgb2YKLSAgICAgICBibG9jayBzaXplLgotCi0gICAgICAgRm9yICBmaWxlcyAgY29tcHJlc3NlZCAgd2l0aCAgdGhlIGRlZmF1bHQgOTAwayBibG9jayBzaXplLAotICAgICAgIGJ1bnppcDIgd2lsbCByZXF1aXJlIGFib3V0IDM3MDAga2J5dGVzIHRvIGRlY29tcHJlc3MuICAgVG8KLSAgICAgICBzdXBwb3J0IGRlY29tcHJlc3Npb24gb2YgYW55IGZpbGUgb24gYSA0IG1lZ2FieXRlIG1hY2hpbmUsCi0gICAgICAgYnVuemlwMiBoYXMgYW4gb3B0aW9uIHRvICBkZWNvbXByZXNzICB1c2luZyAgYXBwcm94aW1hdGVseQotICAgICAgIGhhbGYgdGhpcyBhbW91bnQgb2YgbWVtb3J5LCBhYm91dCAyMzAwIGtieXRlcy4gIERlY29tcHJlcy0KLSAgICAgICBzaW9uIHNwZWVkIGlzIGFsc28gaGFsdmVkLCBzbyB5b3Ugc2hvdWxkIHVzZSAgdGhpcyAgb3B0aW9uCi0gICAgICAgb25seSB3aGVyZSBuZWNlc3NhcnkuICBUaGUgcmVsZXZhbnQgZmxhZyBpcyAtcy4KLQotICAgICAgIEluIGdlbmVyYWwsIHRyeSBhbmQgdXNlIHRoZSBsYXJnZXN0IGJsb2NrIHNpemUgbWVtb3J5IGNvbi0KLSAgICAgICBzdHJhaW50cyAgYWxsb3csICBzaW5jZSAgdGhhdCAgbWF4aW1pc2VzICB0aGUgIGNvbXByZXNzaW9uCi0gICAgICAgYWNoaWV2ZWQuICAgQ29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQgYXJlIHZpcnR1LQotICAgICAgIGFsbHkgdW5hZmZlY3RlZCBieSBibG9jayBzaXplLgotCi0gICAgICAgQW5vdGhlciBzaWduaWZpY2FudCBwb2ludCBhcHBsaWVzIHRvIGZpbGVzIHdoaWNoIGZpdCBpbiAgYQotICAgICAgIHNpbmdsZSAgYmxvY2sgIC0tICB0aGF0ICBtZWFucyAgbW9zdCBmaWxlcyB5b3UnZCBlbmNvdW50ZXIKLSAgICAgICB1c2luZyBhIGxhcmdlIGJsb2NrICBzaXplLiAgIFRoZSAgYW1vdW50ICBvZiAgcmVhbCAgbWVtb3J5Ci0gICAgICAgdG91Y2hlZCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgdGhlIGZpbGUsIHNpbmNlIHRoZQotICAgICAgIGZpbGUgaXMgc21hbGxlciB0aGFuIGEgYmxvY2suICBGb3IgZXhhbXBsZSwgY29tcHJlc3NpbmcgIGEKLSAgICAgICBmaWxlICAyMCwwMDAgIGJ5dGVzICBsb25nICB3aXRoIHRoZSBmbGFnIC05IHdpbGwgY2F1c2UgdGhlCi0gICAgICAgY29tcHJlc3NvciB0byBhbGxvY2F0ZSBhcm91bmQgNzYwMGsgb2YgIG1lbW9yeSwgIGJ1dCAgb25seQotICAgICAgIHRvdWNoIDQwMGsgKyAyMDAwMCAqIDggPSA1NjAga2J5dGVzIG9mIGl0LiAgU2ltaWxhcmx5LCB0aGUKLSAgICAgICBkZWNvbXByZXNzb3Igd2lsbCBhbGxvY2F0ZSAzNzAwayBidXQgIG9ubHkgIHRvdWNoICAxMDBrICArCi0gICAgICAgMjAwMDAgKiA0ID0gMTgwIGtieXRlcy4KLQotICAgICAgIEhlcmUgIGlzIGEgdGFibGUgd2hpY2ggc3VtbWFyaXNlcyB0aGUgbWF4aW11bSBtZW1vcnkgdXNhZ2UKLSAgICAgICBmb3IgZGlmZmVyZW50IGJsb2NrIHNpemVzLiAgQWxzbyAgcmVjb3JkZWQgIGlzICB0aGUgIHRvdGFsCi0gICAgICAgY29tcHJlc3NlZCAgc2l6ZSBmb3IgMTQgZmlsZXMgb2YgdGhlIENhbGdhcnkgVGV4dCBDb21wcmVzLQotICAgICAgIHNpb24gQ29ycHVzIHRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzIGNvbHVtbiAgZ2l2ZXMKLSAgICAgICBzb21lICBmZWVsICBmb3IgIGhvdyAgY29tcHJlc3Npb24gIHZhcmllcyB3aXRoIGJsb2NrIHNpemUuCi0gICAgICAgVGhlc2UgZmlndXJlcyB0ZW5kIHRvIHVuZGVyc3RhdGUgdGhlIGFkdmFudGFnZSAgb2YgIGxhcmdlcgotICAgICAgIGJsb2NrICBzaXplcyAgZm9yICBsYXJnZXIgZmlsZXMsIHNpbmNlIHRoZSBDb3JwdXMgaXMgZG9taS0KLSAgICAgICBuYXRlZCBieSBzbWFsbGVyIGZpbGVzLgotCi0gICAgICAgICAgICAgICAgICBDb21wcmVzcyAgIERlY29tcHJlc3MgICBEZWNvbXByZXNzICAgQ29ycHVzCi0gICAgICAgICAgIEZsYWcgICAgIHVzYWdlICAgICAgdXNhZ2UgICAgICAgLXMgdXNhZ2UgICAgIFNpemUKLQotICAgICAgICAgICAgLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAotICAgICAgICAgICAgLTIgICAgICAyMDAwayAgICAgICA5MDBrICAgICAgICAgNjAwayAgICAgIDg3NzcwMwotICAgICAgICAgICAgLTMgICAgICAyODAwayAgICAgIDEzMDBrICAgICAgICAgODUwayAgICAgIDg2MDMzOAotICAgICAgICAgICAgLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQotICAgICAgICAgICAgLTUgICAgICA0NDAwayAgICAgIDIxMDBrICAgICAgICAxMzUwayAgICAgIDg0NTE2MAotICAgICAgICAgICAgLTYgICAgICA1MjAwayAgICAgIDI1MDBrICAgICAgICAxNjAwayAgICAgIDgzODYyNgotICAgICAgICAgICAgLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgotICAgICAgICAgICAgLTggICAgICA2ODAwayAgICAgIDMzMDBrICAgICAgICAyMTAwayAgICAgIDgyODY0MgotICAgICAgICAgICAgLTkgICAgICA3NjAwayAgICAgIDM3MDBrICAgICAgICAyMzUwayAgICAgIDgyODY0MgotCi0KLVJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVMKLSAgICAgICBiemlwMiBjb21wcmVzc2VzIGZpbGVzIGluIGJsb2NrcywgdXN1YWxseSA5MDBrYnl0ZXMgIGxvbmcuCi0gICAgICAgRWFjaCBibG9jayBpcyBoYW5kbGVkIGluZGVwZW5kZW50bHkuICBJZiBhIG1lZGlhIG9yIHRyYW5zLQotICAgICAgIG1pc3Npb24gZXJyb3IgY2F1c2VzIGEgbXVsdGktYmxvY2sgIC5iejIgIGZpbGUgIHRvICBiZWNvbWUKLSAgICAgICBkYW1hZ2VkLCAgaXQgIG1heSAgYmUgIHBvc3NpYmxlICB0byAgcmVjb3ZlciBkYXRhIGZyb20gdGhlCi0gICAgICAgdW5kYW1hZ2VkIGJsb2NrcyBpbiB0aGUgZmlsZS4KLQotICAgICAgIFRoZSBjb21wcmVzc2VkIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggYmxvY2sgIGlzICBkZWxpbWl0ZWQKLSAgICAgICBieSAgYSAgNDgtYml0IHBhdHRlcm4sIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGZpbmQgdGhlCi0gICAgICAgYmxvY2sgYm91bmRhcmllcyB3aXRoIHJlYXNvbmFibGUgIGNlcnRhaW50eS4gICBFYWNoICBibG9jawotICAgICAgIGFsc28gIGNhcnJpZXMgaXRzIG93biAzMi1iaXQgQ1JDLCBzbyBkYW1hZ2VkIGJsb2NrcyBjYW4gYmUKLSAgICAgICBkaXN0aW5ndWlzaGVkIGZyb20gdW5kYW1hZ2VkIG9uZXMuCi0KLSAgICAgICBiemlwMnJlY292ZXIgaXMgYSAgc2ltcGxlICBwcm9ncmFtICB3aG9zZSAgcHVycG9zZSAgaXMgIHRvCi0gICAgICAgc2VhcmNoICBmb3IgYmxvY2tzIGluIC5iejIgZmlsZXMsIGFuZCB3cml0ZSBlYWNoIGJsb2NrIG91dAotICAgICAgIGludG8gaXRzIG93biAuYnoyIGZpbGUuICBZb3UgY2FuIHRoZW4gdXNlIGJ6aXAyIC10IHRvIHRlc3QKLSAgICAgICB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXN1bHRpbmcgZmlsZXMsIGFuZCBkZWNvbXByZXNzIHRob3NlCi0gICAgICAgd2hpY2ggYXJlIHVuZGFtYWdlZC4KLQotICAgICAgIGJ6aXAycmVjb3ZlciB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGRhbS0KLSAgICAgICBhZ2VkICAgIGZpbGUsICAgIGFuZCAgICB3cml0ZXMgICAgYSAgICBudW1iZXIgICBvZiAgIGZpbGVzCi0gICAgICAgInJlYzAwMDAxZmlsZS5iejIiLCAgInJlYzAwMDAyZmlsZS5iejIiLCAgZXRjLCAgY29udGFpbmluZwotICAgICAgIHRoZSAgIGV4dHJhY3RlZCAgIGJsb2Nrcy4gICBUaGUgICBvdXRwdXQgICBmaWxlbmFtZXMgICBhcmUKLSAgICAgICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZiB3aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm8tCi0gICAgICAgY2Vzc2luZyAgLS0gZm9yIGV4YW1wbGUsICJiemlwMiAtZGMgIHJlYypmaWxlLmJ6MiA+IHJlY292LQotICAgICAgIGVyZWRfZGF0YSIgLS0gcHJvY2Vzc2VzIHRoZSBmaWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KLQotICAgICAgIGJ6aXAycmVjb3ZlciBzaG91bGQgYmUgb2YgbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIC5iejIKLSAgICAgICBmaWxlcywgIGFzICB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5Ci0gICAgICAgZnV0aWxlIHRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZS1ibG9jayAgZmlsZXMsICBzaW5jZSAgYQotICAgICAgIGRhbWFnZWQgIGJsb2NrICBjYW5ub3QgIGJlIHJlY292ZXJlZC4gIElmIHlvdSB3aXNoIHRvIG1pbi0KLSAgICAgICBpbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEgbG9zcyB0aHJvdWdoIG1lZGlhICBvciAgdHJhbnNtaXMtCi0gICAgICAgc2lvbiBlcnJvcnMsIHlvdSBtaWdodCBjb25zaWRlciBjb21wcmVzc2luZyB3aXRoIGEgc21hbGxlcgotICAgICAgIGJsb2NrIHNpemUuCi0KLQotUEVSRk9STUFOQ0UgTk9URVMKLSAgICAgICBUaGUgc29ydGluZyBwaGFzZSBvZiBjb21wcmVzc2lvbiBnYXRoZXJzIHRvZ2V0aGVyICBzaW1pbGFyCi0gICAgICAgc3RyaW5ncyAgaW4gIHRoZSAgZmlsZS4gIEJlY2F1c2Ugb2YgdGhpcywgZmlsZXMgY29udGFpbmluZwotICAgICAgIHZlcnkgbG9uZyBydW5zIG9mICByZXBlYXRlZCAgc3ltYm9scywgIGxpa2UgICJhYWJhYWJhYWJhYWIKLSAgICAgICAuLi4iICAgKHJlcGVhdGVkICBzZXZlcmFsIGh1bmRyZWQgdGltZXMpIG1heSBjb21wcmVzcyBtb3JlCi0gICAgICAgc2xvd2x5IHRoYW4gbm9ybWFsLiAgVmVyc2lvbnMgMC45LjUgYW5kICBhYm92ZSAgZmFyZSAgbXVjaAotICAgICAgIGJldHRlciAgdGhhbiBwcmV2aW91cyB2ZXJzaW9ucyBpbiB0aGlzIHJlc3BlY3QuICBUaGUgcmF0aW8KLSAgICAgICBiZXR3ZWVuIHdvcnN0LWNhc2UgYW5kIGF2ZXJhZ2UtY2FzZSBjb21wcmVzc2lvbiB0aW1lIGlzIGluCi0gICAgICAgdGhlICByZWdpb24gIG9mICAxMDoxLiAgRm9yIHByZXZpb3VzIHZlcnNpb25zLCB0aGlzIGZpZ3VyZQotICAgICAgIHdhcyBtb3JlIGxpa2UgMTAwOjEuICBZb3UgY2FuIHVzZSB0aGUgLXZ2dnYgb3B0aW9uIHRvIG1vbi0KLSAgICAgICBpdG9yIHByb2dyZXNzIGluIGdyZWF0IGRldGFpbCwgaWYgeW91IHdhbnQuCi0KLSAgICAgICBEZWNvbXByZXNzaW9uIHNwZWVkIGlzIHVuYWZmZWN0ZWQgYnkgdGhlc2UgcGhlbm9tZW5hLgotCi0gICAgICAgYnppcDIgIHVzdWFsbHkgIGFsbG9jYXRlcyAgc2V2ZXJhbCAgbWVnYWJ5dGVzIG9mIG1lbW9yeSB0bwotICAgICAgIG9wZXJhdGUgaW4sIGFuZCB0aGVuIGNoYXJnZXMgYWxsIG92ZXIgaXQgaW4gYSBmYWlybHkgIHJhbi0KLSAgICAgICBkb20gIGZhc2hpb24uICAgVGhpcyBtZWFucyB0aGF0IHBlcmZvcm1hbmNlLCBib3RoIGZvciBjb20tCi0gICAgICAgcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcsIGlzIGxhcmdlbHkgZGV0ZXJtaW5lZCAgYnkgIHRoZQotICAgICAgIHNwZWVkICBhdCAgd2hpY2ggIHlvdXIgIG1hY2hpbmUgIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KLSAgICAgICBCZWNhdXNlIG9mIHRoaXMsIHNtYWxsIGNoYW5nZXMgdG8gdGhlIGNvZGUgdG8gIHJlZHVjZSAgdGhlCi0gICAgICAgbWlzcyAgcmF0ZSAgaGF2ZSAgYmVlbiBvYnNlcnZlZCB0byBnaXZlIGRpc3Byb3BvcnRpb25hdGVseQotICAgICAgIGxhcmdlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gIEkgaW1hZ2luZSBiemlwMiB3aWxsIHBlci0KLSAgICAgICBmb3JtIGJlc3Qgb24gbWFjaGluZXMgd2l0aCB2ZXJ5IGxhcmdlIGNhY2hlcy4KLQotCi1DQVZFQVRTCi0gICAgICAgSS9PICBlcnJvciAgbWVzc2FnZXMgIGFyZSBub3QgYXMgaGVscGZ1bCBhcyB0aGV5IGNvdWxkIGJlLgotICAgICAgIGJ6aXAyIHRyaWVzIGhhcmQgdG8gZGV0ZWN0IEkvTyBlcnJvcnMgIGFuZCAgZXhpdCAgY2xlYW5seSwKLSAgICAgICBidXQgIHRoZSAgZGV0YWlscyAgb2YgIHdoYXQgIHRoZSBwcm9ibGVtIGlzIHNvbWV0aW1lcyBzZWVtCi0gICAgICAgcmF0aGVyIG1pc2xlYWRpbmcuCi0KLSAgICAgICBUaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjQgb2YgYnppcDIuICBDb20tCi0gICAgICAgcHJlc3NlZCAgZGF0YSBjcmVhdGVkIGJ5IHRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcwotICAgICAgIGFuZCAgYmFja3dhcmRzICBjb21wYXRpYmxlICB3aXRoICAgdGhlICAgcHJldmlvdXMgICBwdWJsaWMKLSAgICAgICByZWxlYXNlcywgIHZlcnNpb25zICAwLjFwbDIsICAwLjkuMCwgIDAuOS41LCAxLjAuMCwgMS4wLjEsCi0gICAgICAgMS4wLjIgYW5kIDEuMC4zLCBidXQgd2l0aCB0aGUgIGZvbGxvd2luZyAgZXhjZXB0aW9uOiAwLjkuMAotICAgICAgIGFuZCBhYm92ZSBjYW4gIGNvcnJlY3RseSBkZWNvbXByZXNzICBtdWx0aXBsZSBjb25jYXRlbmF0ZWQKLSAgICAgICBjb21wcmVzc2VkIGZpbGVzLiAgMC4xcGwyICBjYW5ub3QgZG8gdGhpczsgIGl0ICB3aWxsICBzdG9wCi0gICAgICAgYWZ0ZXIgIGRlY29tcHJlc3NpbmcganVzdCB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0gICAgICAgYnppcDJyZWNvdmVyICB2ZXJzaW9ucyBwcmlvciB0byAxLjAuMiB1c2VkIDMyLWJpdCBpbnRlZ2VycwotICAgICAgIHRvIHJlcHJlc2VudCBiaXQgcG9zaXRpb25zIGluIGNvbXByZXNzZWQgIGZpbGVzLCAgc28gIHRoZXkKLSAgICAgICBjb3VsZCAgbm90IGhhbmRsZSBjb21wcmVzc2VkIGZpbGVzIG1vcmUgdGhhbiA1MTIgbWVnYWJ5dGVzCi0gICAgICAgbG9uZy4gIFZlcnNpb25zIDEuMC4yIGFuZCBhYm92ZSB1c2UgNjQtYml0ICBpbnRzICBvbiAgc29tZQotICAgICAgIHBsYXRmb3JtcyAgd2hpY2ggIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZCB0YXJnZXRzLCBhbmQKLSAgICAgICBXaW5kb3dzKS4gIFRvIGVzdGFibGlzaCB3aGV0aGVyIG9yICBub3QgIGJ6aXAycmVjb3ZlciAgd2FzCi0gICAgICAgYnVpbHQgIHdpdGggIHN1Y2ggIGEgbGltaXRhdGlvbiwgcnVuIGl0IHdpdGhvdXQgYXJndW1lbnRzLgotICAgICAgIEluIGFueSBldmVudCB5b3UgY2FuIGJ1aWxkIHlvdXJzZWxmIGFuICB1bmxpbWl0ZWQgIHZlcnNpb24KLSAgICAgICBpZiAgeW91ICBjYW4gIHJlY29tcGlsZSAgaXQgIHdpdGggTWF5YmVVSW50NjQgc2V0IHRvIGJlIGFuCi0gICAgICAgdW5zaWduZWQgNjQtYml0IGludGVnZXIuCi0KLQotQVVUSE9SCi0gICAgICAgSnVsaWFuIFNld2FyZCwganNld2FyZGJ6aXAub3JnLgotCi0gICAgICAgaHR0cDovL3d3dy5iemlwLm9yZwotCi0gICAgICAgVGhlIGlkZWFzIGVtYm9kaWVkIGluIGJ6aXAyIGFyZSBkdWUgdG8gKGF0IGxlYXN0KSB0aGUgZm9sLQotICAgICAgIGxvd2luZyAgcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUKLSAgICAgICBibG9jayBzb3J0aW5nIHRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAgKGFnYWluLCAgZm9yCi0gICAgICAgdGhlIEh1ZmZtYW4gY29kZXIpLCBQZXRlciBGZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29kLQotICAgICAgIGluZyBtb2RlbCBpbiB0aGUgb3JpZ2luYWwgYnppcCwgYW5kIG1hbnkgcmVmaW5lbWVudHMpLCBhbmQKLSAgICAgICBBbGlzdGFpciAgTW9mZmF0LCAgUmFkZm9yZCAgTmVhbCAgYW5kICBJYW4gV2l0dGVuIChmb3IgdGhlCi0gICAgICAgYXJpdGhtZXRpYyAgY29kZXIgIGluICB0aGUgIG9yaWdpbmFsICBiemlwKS4gICBJICBhbSAgbXVjaAotICAgICAgIGluZGVidGVkIGZvciB0aGVpciBoZWxwLCBzdXBwb3J0IGFuZCBhZHZpY2UuICBTZWUgdGhlIG1hbi0KLSAgICAgICB1YWwgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIHBvaW50ZXJzIHRvIHNvdXJjZXMgIG9mCi0gICAgICAgZG9jdW1lbnRhdGlvbi4gIENocmlzdGlhbiB2b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vawotICAgICAgIGZvciBmYXN0ZXIgc29ydGluZyBhbGdvcml0aG1zLCBzbyBhcyB0byBzcGVlZCB1cCAgY29tcHJlcy0KLSAgICAgICBzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0byBpbXByb3ZlIHRoZSB3b3JzdC1jYXNlCi0gICAgICAgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICBEb25uYSBSb2JpbnNvbiBYTUxpc2VkIHRoZSBkb2N1LQotICAgICAgIG1lbnRhdGlvbi4gICBUaGUgYnoqIHNjcmlwdHMgYXJlIGRlcml2ZWQgZnJvbSB0aG9zZSBvZiBHTlUKLSAgICAgICBnemlwLiAgTWFueSBwZW9wbGUgc2VudCBwYXRjaGVzLCBoZWxwZWQgIHdpdGggIHBvcnRhYmlsaXR5Ci0gICAgICAgcHJvYmxlbXMsICBsZW50ICBtYWNoaW5lcywgIGdhdmUgYWR2aWNlIGFuZCB3ZXJlIGdlbmVyYWxseQotICAgICAgIGhlbHBmdWwuCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAycmVjb3Zlci5jIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDJyZWNvdmVyLmMKaW5kZXggNmU0N2I2MC4uYTgxMzFlMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcDJyZWNvdmVyLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDJyZWNvdmVyLmMKQEAgLTcsOCArNyw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCkBAIC0xOCw3ICsxOCw3IEBACiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogVGhpcyBwcm9ncmFtIGlzIGEgY29tcGxldGUgaGFjayBhbmQgc2hvdWxkIGJlIHJld3JpdHRlbiBwcm9wZXJseS4KLSAgICAgSXQgaXNuJ3QgdmVyeSBjb21wbGljYXRlZC4gKi8KKwkgSXQgaXNuJ3QgdmVyeSBjb21wbGljYXRlZC4gKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTMwOSwxMSArMzA5LDEyIEBACiAgICBVSW50MzIgICAgICBidWZmSGksIGJ1ZmZMbywgYmxvY2tDUkM7CiAgICBDaGFyKiAgICAgICBwOwogCi0gICBzdHJjcHkgKCBwcm9nTmFtZSwgYXJndlswXSApOworICAgc3RybmNweSAoIHByb2dOYW1lLCBhcmd2WzBdLCBCWl9NQVhfRklMRU5BTUUtMSk7CisgICBwcm9nTmFtZVtCWl9NQVhfRklMRU5BTUUtMV09J1wwJzsKICAgIGluRmlsZU5hbWVbMF0gPSBvdXRGaWxlTmFtZVswXSA9IDA7CiAKICAgIGZwcmludGYgKCBzdGRlcnIsIAotICAgICAgICAgICAgICJiemlwMnJlY292ZXIgMS4wLjU6IGV4dHJhY3RzIGJsb2NrcyBmcm9tIGRhbWFnZWQgLmJ6MiBmaWxlcy5cbiIgKTsKKyAgICAgICAgICAgICAiYnppcDJyZWNvdmVyIDEuMC44OiBleHRyYWN0cyBibG9ja3MgZnJvbSBkYW1hZ2VkIC5iejIgZmlsZXMuXG4iICk7CiAKICAgIGlmIChhcmdjICE9IDIpIHsKICAgICAgIGZwcmludGYgKCBzdGRlcnIsICIlczogdXNhZ2UgaXMgYCVzIGRhbWFnZWRfZmlsZV9uYW1lJy5cbiIsCkBAIC0zOTMsNyArMzk0LDcgQEAKICAgICAgICAgICAgIGJFbmRbY3VyckJsb2NrXSA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY3VyckJsb2NrID4gMCAmJgotICAgICAgICAgKGJFbmRbY3VyckJsb2NrXSAtIGJTdGFydFtjdXJyQmxvY2tdKSA+PSAxMzApIHsKKwkgICAgIChiRW5kW2N1cnJCbG9ja10gLSBiU3RhcnRbY3VyckJsb2NrXSkgPj0gMTMwKSB7CiAgICAgICAgICAgICBmcHJpbnRmICggc3RkZXJyLCAiICAgYmxvY2sgJWQgcnVucyBmcm9tICIgTWF5YmVVSW50NjRfRk1UIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byAiIE1heWJlVUludDY0X0ZNVCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgIHJiQ3RyKzEsICBiU3RhcnRbY3VyckJsb2NrXSwgYkVuZFtjdXJyQmxvY2tdICk7CkBAIC00NTcsNiArNDU4LDcgQEAKICAgICAgICAgICAgIGJzUHV0VUNoYXIgKCBic1dyLCAweDUwICk7IGJzUHV0VUNoYXIgKCBic1dyLCAweDkwICk7CiAgICAgICAgICAgICBic1B1dFVJbnQzMiAoIGJzV3IsIGJsb2NrQ1JDICk7CiAgICAgICAgICAgICBic0Nsb3NlICggYnNXciApOworICAgICAgICAgICAgb3V0RmlsZSA9IE5VTEw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAod3JCbG9jayA+PSByYkN0cikgYnJlYWs7CiAgICAgICAgICB3ckJsb2NrKys7CkBAIC00NzQsOCArNDc2LDggQEAKICAgICAgICAgICAgIHNwbGl0ID0gb3V0RmlsZU5hbWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgKytzcGxpdDsKLSAgICAgfQotICAgICAvKiBOb3cgc3BsaXQgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgYmFzZW5hbWUuICovCisJIH0KKwkgLyogTm93IHNwbGl0IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGJhc2VuYW1lLiAqLwogICAgICAgICAgb2ZzICA9IHNwbGl0IC0gb3V0RmlsZU5hbWU7CiAgICAgICAgICBzcHJpbnRmIChzcGxpdCwgInJlYyU1ZCIsIHdyQmxvY2srMSk7CiAgICAgICAgICBmb3IgKHAgPSBzcGxpdDsgKnAgIT0gMDsgcCsrKSBpZiAoKnAgPT0gJyAnKSAqcCA9ICcwJzsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmMgYi9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5jCmluZGV4IGFlZWNlZjEuLjIxNzg2NTUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWIuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTQzLDEyICs0MywxMiBAQAogICAgZnByaW50ZihzdGRlcnIsIAogICAgICAgIlxuXG5iemlwMi9saWJiemlwMjogaW50ZXJuYWwgZXJyb3IgbnVtYmVyICVkLlxuIgogICAgICAgIlRoaXMgaXMgYSBidWcgaW4gYnppcDIvbGliYnppcDIsICVzLlxuIgotICAgICAgIlBsZWFzZSByZXBvcnQgaXQgdG8gbWUgYXQ6IGpzZXdhcmRAYnppcC5vcmcuICBJZiB0aGlzIGhhcHBlbmVkXG4iCisgICAgICAiUGxlYXNlIHJlcG9ydCBpdCB0bzogYnppcDItZGV2ZWxAc291cmNld2FyZS5vcmcuICBJZiB0aGlzIGhhcHBlbmVkXG4iCiAgICAgICAid2hlbiB5b3Ugd2VyZSB1c2luZyBzb21lIHByb2dyYW0gd2hpY2ggdXNlcyBsaWJiemlwMiBhcyBhXG4iCiAgICAgICAiY29tcG9uZW50LCB5b3Ugc2hvdWxkIGFsc28gcmVwb3J0IHRoaXMgYnVnIHRvIHRoZSBhdXRob3IocylcbiIKICAgICAgICJvZiB0aGF0IHByb2dyYW0uICBQbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcmVwb3J0IHRoaXMgYnVnO1xuIgogICAgICAgInRpbWVseSBhbmQgYWNjdXJhdGUgYnVnIHJlcG9ydHMgZXZlbnR1YWxseSBsZWFkIHRvIGhpZ2hlclxuIgotICAgICAgInF1YWxpdHkgc29mdHdhcmUuICBUaGFua3MuICBKdWxpYW4gU2V3YXJkLCAxMCBEZWNlbWJlciAyMDA3LlxuXG4iLAorICAgICAgInF1YWxpdHkgc29mdHdhcmUuICBUaGFua3MuXG5cbiIsCiAgICAgICBlcnJjb2RlLAogICAgICAgQloyX2J6bGliVmVyc2lvbigpCiAgICApOwpAQCAtMTAyLDcgKzEwMiw2IEBACiB2b2lkKiBkZWZhdWx0X2J6YWxsb2MgKCB2b2lkKiBvcGFxdWUsIEludDMyIGl0ZW1zLCBJbnQzMiBzaXplICkKIHsKICAgIHZvaWQqIHYgPSBtYWxsb2MgKCBpdGVtcyAqIHNpemUgKTsKLSAgKHZvaWQpb3BhcXVlOwogICAgcmV0dXJuIHY7CiB9CiAKQEAgLTExMCw3ICsxMDksNiBAQAogdm9pZCBkZWZhdWx0X2J6ZnJlZSAoIHZvaWQqIG9wYXF1ZSwgdm9pZCogYWRkciApCiB7CiAgICBpZiAoYWRkciAhPSBOVUxMKSBmcmVlICggYWRkciApOwotICAodm9pZClvcGFxdWU7CiB9CiAKIApAQCAtNDI3LDcgKzQyNSw3IEBACiAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPyBCWl9SVU5fT0sgOiBCWl9QQVJBTV9FUlJPUjsKICAgICAgICAgIH0gCiAgICAgICAgICBlbHNlCi0gICAgIGlmIChhY3Rpb24gPT0gQlpfRkxVU0gpIHsKKwkgaWYgKGFjdGlvbiA9PSBCWl9GTFVTSCkgewogICAgICAgICAgICAgcy0+YXZhaWxfaW5fZXhwZWN0ID0gc3RybS0+YXZhaWxfaW47CiAgICAgICAgICAgICBzLT5tb2RlID0gQlpfTV9GTFVTSElORzsKICAgICAgICAgICAgIGdvdG8gcHJlc3dpdGNoOwpAQCAtMTUwNyw3ICsxNTA1LDYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBCWl9BUEkoQloyX2J6Zmx1c2gpIChCWkZJTEUgKmIpCiB7Ci0gICh2b2lkKSBiOwogICAgLyogZG8gbm90aGluZyBub3cuLi4gKi8KICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWIuaCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmgKaW5kZXggYzViNzVkNi4uODk2NmE2YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWIuaAorKysgYi9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5oCkBAIC04LDggKzgsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWJfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWJfcHJpdmF0ZS5oCmluZGV4IDAyYTY2N2YuLmJhMGY1ODkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21iemlwMi9iemxpYl9wcml2YXRlLmgKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCkBAIC0zMiwyOCArMzIsMTMgQEAKIAogI2luY2x1ZGUgImJ6bGliLmgiCiAKLQotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyBwcmFnbWEgd2FybiAtODAwNCAvKiBBc3NpZ25lZCB2YWx1ZSBuZXZlciB1c2VkLiAgKi8KLSMgcHJhZ21hIHdhcm4gLTgwMDggLyogQ29uZGl0aW9uIGlzIGFsd2F5cyB0cnVlL2ZhbHNlLiAgKi8KLSMgcHJhZ21hIHdhcm4gLTgwNjYgLyogVW5yZWFjaGFibGUgY29kZS4gICovCi0jIHByYWdtYSB3YXJuIC04MDU3IC8qIFVudXNlZCBwYXJhbWV0ZXIuICAqLwotI2VuZGlmCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLS8qICdpbnRlZ3JhbCBzaXplIG1pc21hdGNoIGluIGFyZ3VtZW50OyBjb252ZXJzaW9uIHN1cHBsaWVkICovCi0jIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NCkKLS8qIGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAnb2ZmX3QnLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEgKi8KLSMgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjY3KQotLyogd2FybmluZyBDNDEyNzogY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudCovCi0jIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDEyNykKLSNlbmRpZgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Nhc3QtYWxpZ24iCisjIHByYWdtYSB3YXJuaW5nKHB1c2gsMSkKICNlbmRpZgogCiAvKi0tIEdlbmVyYWwgc3R1ZmYuIC0tKi8KIAotI2RlZmluZSBCWl9WRVJTSU9OICAiMS4wLjUsIDEwLURlYy0yMDA3IgorI2RlZmluZSBCWl9WRVJTSU9OICAiMS4wLjgsIDEzLUp1bC0yMDE5IgogCiB0eXBlZGVmIGNoYXIgICAgICAgICAgICBDaGFyOwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgQm9vbDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bW9yZSBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6bW9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiMWRlNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iem1vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBCem1vcmUgd3JhcHBlZCBmb3IgYnppcDIsIAotIyBhZGFwdGVkIGZyb20gem1vcmUgYnkgUGhpbGlwcGUgVHJvaW4gPHBoaWxAZmlmaS5vcmc+IGZvciBEZWJpYW4gR05VL0xpbnV4LgotCi1QQVRIPSIvdXNyL2JpbjokUEFUSCI7IGV4cG9ydCBQQVRICi0KLXByb2c9YGVjaG8gJDAgfCBzZWQgJ3N8LiovfHwnYAotY2FzZSAiJHByb2ciIGluCi0gICAgKmxlc3MpICBtb3JlPWxlc3MgICA7OwotICAgICopICBtb3JlPW1vcmUgICAgICAgOzsKLWVzYWMKLQotaWYgdGVzdCAiYGVjaG8gLW4gYWAiID0gIi1uIGEiOyB0aGVuCi0gICMgbG9va3MgbGlrZSBhIFN5c1Ygc3lzdGVtOgotICBuMT0nJzsgbjI9J1xjJwotZWxzZQotICBuMT0nLW4nOyBuMj0nJwotZmkKLW9sZHR0eT1gc3R0eSAtZyAyPi9kZXYvbnVsbGAKLWlmIHN0dHkgLWNicmVhayAyPi9kZXYvbnVsbDsgdGhlbgotICBjYj0nY2JyZWFrJzsgbmNiPSctY2JyZWFrJwotZWxzZQotICAjICdzdHR5IG1pbiAxJyByZXNldHMgZW9mIHRvIF5hIG9uIGJvdGggU3VuT1MgYW5kIFN5c1YhCi0gIGNiPSdtaW4gMSAtaWNhbm9uJzsgbmNiPSdpY2Fub24gZW9mIF5kJwotZmkKLWlmIHRlc3QgJD8gLWVxIDAgLWEgLW4gIiRvbGR0dHkiOyB0aGVuCi0gICB0cmFwICdzdHR5ICRvbGR0dHkgMj4vZGV2L251bGw7IGV4aXQnIDAgMiAzIDUgMTAgMTMgMTUKLWVsc2UKLSAgIHRyYXAgJ3N0dHkgJG5jYiBlY2hvIDI+L2Rldi9udWxsOyBleGl0JyAwIDIgMyA1IDEwIDEzIDE1Ci1maQotCi1pZiB0ZXN0ICQjID0gMDsgdGhlbgotICAgIGlmIHRlc3QgLXQgMDsgdGhlbgotICAgIGVjaG8gdXNhZ2U6ICRwcm9nIGZpbGVzLi4uCi0gICAgZWxzZQotICAgIGJ6aXAyIC1jZGZxIHwgZXZhbCAkbW9yZQotICAgIGZpCi1lbHNlCi0gICAgRklSU1Q9MQotICAgIGZvciBGSUxFCi0gICAgZG8KLSAgICBpZiB0ZXN0ICRGSVJTVCAtZXEgMDsgdGhlbgotICAgICAgICBlY2hvICRuMSAiLS1Nb3JlLS0oTmV4dCBmaWxlOiAkRklMRSkkbjIiCi0gICAgICAgIHN0dHkgJGNiIC1lY2hvIDI+L2Rldi9udWxsCi0gICAgICAgIEFOUz1gZGQgYnM9MSBjb3VudD0xIDI+L2Rldi9udWxsYCAKLSAgICAgICAgc3R0eSAkbmNiIGVjaG8gMj4vZGV2L251bGwKLSAgICAgICAgZWNobyAiICIKLSAgICAgICAgaWYgdGVzdCAiJEFOUyIgPSAnZScgLW8gIiRBTlMiID0gJ3EnOyB0aGVuCi0gICAgICAgICAgICBleGl0Ci0gICAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkQU5TIiAhPSAncyc7IHRoZW4KLSAgICAgICAgZWNobyAiLS0tLS0tPiAkRklMRSA8LS0tLS0tIgotICAgICAgICBiemlwMiAtY2RmcSAiJEZJTEUiIHwgZXZhbCAkbW9yZQotICAgIGZpCi0gICAgaWYgdGVzdCAtdDsgdGhlbgotICAgICAgICBGSVJTVD0wCi0gICAgZmkKLSAgICBkb25lCi1maQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnptb3JlLjEgYi9VdGlsaXRpZXMvY21iemlwMi9iem1vcmUuMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY4NjhlZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iem1vcmUuMQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0uXCJTaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB6bW9yZS4xIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPgotLlwiZm9yIERlYmlhbiBHTlUvTGludXgKLS5USCBCWk1PUkUgMQotLlNIIE5BTUUKLWJ6bW9yZSwgYnpsZXNzIFwtIGZpbGUgcGVydXNhbCBmaWx0ZXIgZm9yIGNydCB2aWV3aW5nIG9mIGJ6aXAyIGNvbXByZXNzZWQgdGV4dAotLlNIIFNZTk9QU0lTCi0uQiBiem1vcmUKLVsgbmFtZSAuLi4gIF0KLS5icgotLkIgYnpsZXNzCi1bIG5hbWUgLi4uICBdCi0uU0ggTk9URQotSW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiwKLS5JIGJ6bGVzcwotYW5kCi0uSSBsZXNzCi1jYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aAotLkkgYnptb3JlCi1hbmQKLS5JIG1vcmUuCi0uU0ggREVTQ1JJUFRJT04KLS5JICBCem1vcmUKLWlzIGEgZmlsdGVyIHdoaWNoIGFsbG93cyBleGFtaW5hdGlvbiBvZiBjb21wcmVzc2VkIG9yIHBsYWluIHRleHQgZmlsZXMKLW9uZSBzY3JlZW5mdWwgYXQgYSB0aW1lIG9uIGEgc29mdC1jb3B5IHRlcm1pbmFsLgotLkkgYnptb3JlCi13b3JrcyBvbiBmaWxlcyBjb21wcmVzc2VkIHdpdGgKLS5JIGJ6aXAyCi1hbmQgYWxzbyBvbiB1bmNvbXByZXNzZWQgZmlsZXMuCi1JZiBhIGZpbGUgZG9lcyBub3QgZXhpc3QsCi0uSSBiem1vcmUKLWxvb2tzIGZvciBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIC5iejIgc3VmZml4LgotLlBQCi0uSSBCem1vcmUKLW5vcm1hbGx5IHBhdXNlcyBhZnRlciBlYWNoIHNjcmVlbmZ1bCwgcHJpbnRpbmcgLS1Nb3JlLS0KLWF0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4KLUlmIHRoZSB1c2VyIHRoZW4gdHlwZXMgYSBjYXJyaWFnZSByZXR1cm4sIG9uZSBtb3JlIGxpbmUgaXMgZGlzcGxheWVkLgotSWYgdGhlIHVzZXIgaGl0cyBhIHNwYWNlLAotYW5vdGhlciBzY3JlZW5mdWwgaXMgZGlzcGxheWVkLiAgT3RoZXIgcG9zc2liaWxpdGllcyBhcmUgZW51bWVyYXRlZCBsYXRlci4KLS5QUAotLkkgQnptb3JlCi1sb29rcyBpbiB0aGUgZmlsZQotLkkgL2V0Yy90ZXJtY2FwCi10byBkZXRlcm1pbmUgdGVybWluYWwgY2hhcmFjdGVyaXN0aWNzLAotYW5kIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCB3aW5kb3cgc2l6ZS4KLU9uIGEgdGVybWluYWwgY2FwYWJsZSBvZiBkaXNwbGF5aW5nIDI0IGxpbmVzLAotdGhlIGRlZmF1bHQgd2luZG93IHNpemUgaXMgMjIgbGluZXMuCi1PdGhlciBzZXF1ZW5jZXMgd2hpY2ggbWF5IGJlIHR5cGVkIHdoZW4KLS5JIGJ6bW9yZQotcGF1c2VzLCBhbmQgdGhlaXIgZWZmZWN0cywgYXJlIGFzIGZvbGxvd3MgKFxmSWlcZlAgaXMgYW4gb3B0aW9uYWwgaW50ZWdlcgotYXJndW1lbnQsIGRlZmF1bHRpbmcgdG8gMSkgOgotLlBQCi0uSVAgXGZJaVx8XGZQPHNwYWNlPgotZGlzcGxheQotLkkgaQotbW9yZSBsaW5lcywgKG9yIGFub3RoZXIgc2NyZWVuZnVsIGlmIG5vIGFyZ3VtZW50IGlzIGdpdmVuKQotLlBQCi0uSVAgXkQKLWRpc3BsYXkgMTEgbW9yZSBsaW5lcyAoYSBgYHNjcm9sbCcnKS4KLUlmCi0uSSBpCi1pcyBnaXZlbiwgdGhlbiB0aGUgc2Nyb2xsIHNpemUgaXMgc2V0IHRvIFxmSWlcfFxmUC4KLS5QUAotLklQIGQKLXNhbWUgYXMgXkQgKGNvbnRyb2wtRCkKLS5QUAotLklQIFxmSWlcfFxmUHoKLXNhbWUgYXMgdHlwaW5nIGEgc3BhY2UgZXhjZXB0IHRoYXQgXGZJaVx8XGZQLCBpZiBwcmVzZW50LCBiZWNvbWVzIHRoZSBuZXcKLXdpbmRvdyBzaXplLiAgTm90ZSB0aGF0IHRoZSB3aW5kb3cgc2l6ZSByZXZlcnRzIGJhY2sgdG8gdGhlIGRlZmF1bHQgYXQgdGhlCi1lbmQgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLS5QUAotLklQIFxmSWlcfFxmUHMKLXNraXAgXGZJaVx8XGZQIGxpbmVzIGFuZCBwcmludCBhIHNjcmVlbmZ1bCBvZiBsaW5lcwotLlBQCi0uSVAgXGZJaVx8XGZQZgotc2tpcCBcZklpXGZQIHNjcmVlbmZ1bHMgYW5kIHByaW50IGEgc2NyZWVuZnVsIG9mIGxpbmVzCi0uUFAKLS5JUCAicSBvciBRIgotcXVpdCByZWFkaW5nIHRoZSBjdXJyZW50IGZpbGU7IGdvIG9uIHRvIHRoZSBuZXh0IChpZiBhbnkpCi0uUFAKLS5JUCAiZSBvciBxIgotV2hlbiB0aGUgcHJvbXB0IC0tTW9yZS0tKE5leHQgZmlsZTogCi0uSVIgZmlsZSApCi1pcyBwcmludGVkLCB0aGlzIGNvbW1hbmQgY2F1c2VzIGJ6bW9yZSB0byBleGl0LgotLlBQCi0uSVAgcwotV2hlbiB0aGUgcHJvbXB0IC0tTW9yZS0tKE5leHQgZmlsZTogCi0uSVIgZmlsZSApCi1pcyBwcmludGVkLCB0aGlzIGNvbW1hbmQgY2F1c2VzIGJ6bW9yZSB0byBza2lwIHRoZSBuZXh0IGZpbGUgYW5kIGNvbnRpbnVlLgotLlBQIAotLklQID0KLURpc3BsYXkgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0uUFAKLS5JUCBcZklpXHxcZlAvZXhwcgotc2VhcmNoIGZvciB0aGUgXGZJaVx8XGZQLXRoIG9jY3VycmVuY2Ugb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBcZklleHByLlxmUAotSWYgdGhlIHBhdHRlcm4gaXMgbm90IGZvdW5kLAotLkkgYnptb3JlCi1nb2VzIG9uIHRvIHRoZSBuZXh0IGZpbGUgKGlmIGFueSkuCi1PdGhlcndpc2UsIGEgc2NyZWVuZnVsIGlzIGRpc3BsYXllZCwgc3RhcnRpbmcgdHdvIGxpbmVzIGJlZm9yZSB0aGUgcGxhY2UKLXdoZXJlIHRoZSBleHByZXNzaW9uIHdhcyBmb3VuZC4KLVRoZSB1c2VyJ3MgZXJhc2UgYW5kIGtpbGwgY2hhcmFjdGVycyBtYXkgYmUgdXNlZCB0byBlZGl0IHRoZSByZWd1bGFyCi1leHByZXNzaW9uLgotRXJhc2luZyBiYWNrIHBhc3QgdGhlIGZpcnN0IGNvbHVtbiBjYW5jZWxzIHRoZSBzZWFyY2ggY29tbWFuZC4KLS5QUAotLklQIFxmSWlcfFxmUG4KLXNlYXJjaCBmb3IgdGhlIFxmSWlcfFxmUC10aCBvY2N1cnJlbmNlIG9mIHRoZSBsYXN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBlbnRlcmVkLgotLlBQCi0uSVAgIWNvbW1hbmQKLWludm9rZSBhIHNoZWxsIHdpdGggXGZJY29tbWFuZFx8XGZQLiAKLVRoZSBjaGFyYWN0ZXIgYCEnIGluICJjb21tYW5kIiBhcmUgcmVwbGFjZWQgd2l0aCB0aGUKLXByZXZpb3VzIHNoZWxsIGNvbW1hbmQuICBUaGUgc2VxdWVuY2UgIlxcISIgaXMgcmVwbGFjZWQgYnkgIiEiLgotLlBQCi0uSVAgIjpxIG9yIDpRIgotcXVpdCByZWFkaW5nIHRoZSBjdXJyZW50IGZpbGU7IGdvIG9uIHRvIHRoZSBuZXh0IChpZiBhbnkpCi0oc2FtZSBhcyBxIG9yIFEpLgotLlBQCi0uSVAgLgotKGRvdCkgcmVwZWF0IHRoZSBwcmV2aW91cyBjb21tYW5kLgotLlBQCi1UaGUgY29tbWFuZHMgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHksIGkuZS4sIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KLXR5cGUgYSBjYXJyaWFnZSByZXR1cm4uCi1VcCB0byB0aGUgdGltZSB3aGVuIHRoZSBjb21tYW5kIGNoYXJhY3RlciBpdHNlbGYgaXMgZ2l2ZW4sCi10aGUgdXNlciBtYXkgaGl0IHRoZSBsaW5lIGtpbGwgY2hhcmFjdGVyIHRvIGNhbmNlbCB0aGUgbnVtZXJpY2FsCi1hcmd1bWVudCBiZWluZyBmb3JtZWQuCi1JbiBhZGRpdGlvbiwgdGhlIHVzZXIgbWF5IGhpdCB0aGUgZXJhc2UgY2hhcmFjdGVyIHRvIHJlZGlzcGxheSB0aGUKLS0tTW9yZS0tIG1lc3NhZ2UuCi0uUFAKLUF0IGFueSB0aW1lIHdoZW4gb3V0cHV0IGlzIGJlaW5nIHNlbnQgdG8gdGhlIHRlcm1pbmFsLCB0aGUgdXNlciBjYW4KLWhpdCB0aGUgcXVpdCBrZXkgKG5vcm1hbGx5IGNvbnRyb2xcLVxcKS4KLS5JIEJ6bW9yZQotd2lsbCBzdG9wIHNlbmRpbmcgb3V0cHV0LCBhbmQgd2lsbCBkaXNwbGF5IHRoZSB1c3VhbCAtLU1vcmUtLQotcHJvbXB0LgotVGhlIHVzZXIgbWF5IHRoZW4gZW50ZXIgb25lIG9mIHRoZSBhYm92ZSBjb21tYW5kcyBpbiB0aGUgbm9ybWFsIG1hbm5lci4KLVVuZm9ydHVuYXRlbHksIHNvbWUgb3V0cHV0IGlzIGxvc3Qgd2hlbiB0aGlzIGlzIGRvbmUsIGR1ZSB0byB0aGUKLWZhY3QgdGhhdCBhbnkgY2hhcmFjdGVycyB3YWl0aW5nIGluIHRoZSB0ZXJtaW5hbCdzIG91dHB1dCBxdWV1ZQotYXJlIGZsdXNoZWQgd2hlbiB0aGUgcXVpdCBzaWduYWwgb2NjdXJzLgotLlBQCi1UaGUgdGVybWluYWwgaXMgc2V0IHRvCi0uSSBub2VjaG8KLW1vZGUgYnkgdGhpcyBwcm9ncmFtIHNvIHRoYXQgdGhlIG91dHB1dCBjYW4gYmUgY29udGludW91cy4KLVdoYXQgeW91IHR5cGUgd2lsbCB0aHVzIG5vdCBzaG93IG9uIHlvdXIgdGVybWluYWwsIGV4Y2VwdCBmb3IgdGhlIC8gYW5kICEKLWNvbW1hbmRzLgotLlBQCi1JZiB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIG5vdCBhIHRlbGV0eXBlLCB0aGVuCi0uSSBiem1vcmUKLWFjdHMganVzdCBsaWtlCi0uSSBiemNhdCwKLWV4Y2VwdCB0aGF0IGEgaGVhZGVyIGlzIHByaW50ZWQgYmVmb3JlIGVhY2ggZmlsZS4KLS5TSCBGSUxFUwotLkRUCi0vZXRjL3Rlcm1jYXAgICAgICAgIFRlcm1pbmFsIGRhdGEgYmFzZQotLlNIICJTRUUgQUxTTyIKLW1vcmUoMSksIGxlc3MoMSksIGJ6aXAyKDEpLCBiemRpZmYoMSksIGJ6Z3JlcCgxKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvY29tcHJlc3MuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL2NvbXByZXNzLmMKaW5kZXggZmVlYTIzMy4uNWRmYTAwMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvY29tcHJlc3MuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9jb21wcmVzcy5jCkBAIC04LDggKzgsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpAQCAtMjM5LDcgKzIzOSw3IEBACiB2b2lkIHNlbmRNVEZWYWx1ZXMgKCBFU3RhdGUqIHMgKQogewogICAgSW50MzIgdiwgdCwgaSwgaiwgZ3MsIGdlLCB0b3RjLCBidCwgYmMsIGl0ZXI7Ci0gICBJbnQzMiBuU2VsZWN0b3JzID0gMCwgYWxwaGFTaXplLCBtaW5MZW4sIG1heExlbiwgc2VsQ3RyOworICAgSW50MzIgblNlbGVjdG9ycywgYWxwaGFTaXplLCBtaW5MZW4sIG1heExlbiwgc2VsQ3RyOwogICAgSW50MzIgbkdyb3VwcywgbkJ5dGVzOwogCiAgICAvKi0tCkBAIC0zMjksMTQgKzMyOSwxNCBAQAogCiAgICAgICAvKi0tLQogICAgICAgICBTZXQgdXAgYW4gYXV4aWxpYXJ5IGxlbmd0aCB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGZhc3QtdHJhY2sKLSAgICB0aGUgY29tbW9uIGNhc2UgKG5Hcm91cHMgPT0gNikuIAorCXRoZSBjb21tb24gY2FzZSAobkdyb3VwcyA9PSA2KS4gCiAgICAgICAtLS0qLwogICAgICAgaWYgKG5Hcm91cHMgPT0gNikgewogICAgICAgICAgZm9yICh2ID0gMDsgdiA8IGFscGhhU2l6ZTsgdisrKSB7CiAgICAgICAgICAgICBzLT5sZW5fcGFja1t2XVswXSA9IChzLT5sZW5bMV1bdl0gPDwgMTYpIHwgcy0+bGVuWzBdW3ZdOwogICAgICAgICAgICAgcy0+bGVuX3BhY2tbdl1bMV0gPSAocy0+bGVuWzNdW3ZdIDw8IDE2KSB8IHMtPmxlblsyXVt2XTsKICAgICAgICAgICAgIHMtPmxlbl9wYWNrW3ZdWzJdID0gKHMtPmxlbls1XVt2XSA8PCAxNikgfCBzLT5sZW5bNF1bdl07Ci0gICAgIH0KKwkgfQogICAgICAgfQogCiAgICAgICBuU2VsZWN0b3JzID0gMDsKQEAgLTM4NSw3ICszODUsNyBAQAogICAgICAgICAgICAgY29zdFs0XSA9IGNvc3Q0NSAmIDB4ZmZmZjsgY29zdFs1XSA9IGNvc3Q0NSA+PiAxNjsKIAogICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyotLS0gc2xvdyB2ZXJzaW9uIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIGFsbCBzaXR1YXRpb25zIC0tLSovCisJICAgIC8qLS0tIHNsb3cgdmVyc2lvbiB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgc2l0dWF0aW9ucyAtLS0qLwogICAgICAgICAgICAgZm9yIChpID0gZ3M7IGkgPD0gZ2U7IGkrKykgeyAKICAgICAgICAgICAgICAgIFVJbnQxNiBpY3YgPSBtdGZ2W2ldOwogICAgICAgICAgICAgICAgZm9yICh0ID0gMDsgdCA8IG5Hcm91cHM7IHQrKykgY29zdFt0XSArPSBzLT5sZW5bdF1baWN2XTsKQEAgLTQyNiw3ICs0MjYsNyBAQAogIyAgICAgICAgICAgdW5kZWYgQlpfSVRVUgogCiAgICAgICAgICB9IGVsc2UgewotICAgICAgICAvKi0tLSBzbG93IHZlcnNpb24gd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgYWxsIHNpdHVhdGlvbnMgLS0tKi8KKwkgICAgLyotLS0gc2xvdyB2ZXJzaW9uIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIGFsbCBzaXR1YXRpb25zIC0tLSovCiAgICAgICAgICAgICBmb3IgKGkgPSBnczsgaSA8PSBnZTsgaSsrKQogICAgICAgICAgICAgICAgcy0+cmZyZXFbYnRdWyBtdGZ2W2ldIF0rKzsKICAgICAgICAgIH0KQEAgLTQ1NCw3ICs0NTQsNyBAQAogCiAgICBBc3NlcnRIKCBuR3JvdXBzIDwgOCwgMzAwMiApOwogICAgQXNzZXJ0SCggblNlbGVjdG9ycyA8IDMyNzY4ICYmCi0gICAgICAgICAgICBuU2VsZWN0b3JzIDw9ICgyICsgKDkwMDAwMCAvIEJaX0dfU0laRSkpLAorICAgICAgICAgICAgblNlbGVjdG9ycyA8PSBCWl9NQVhfU0VMRUNUT1JTLAogICAgICAgICAgICAgMzAwMyApOwogCiAKQEAgLTU3OSw3ICs1NzksNyBAQAogIyAgICAgICAgICAgdW5kZWYgQlpfSVRBSAogCiAgICAgICB9IGVsc2UgewotICAgICAvKi0tLSBzbG93IHZlcnNpb24gd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgYWxsIHNpdHVhdGlvbnMgLS0tKi8KKwkgLyotLS0gc2xvdyB2ZXJzaW9uIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIGFsbCBzaXR1YXRpb25zIC0tLSovCiAgICAgICAgICBmb3IgKGkgPSBnczsgaSA8PSBnZTsgaSsrKSB7CiAgICAgICAgICAgICBic1cgKCBzLCAKICAgICAgICAgICAgICAgICAgIHMtPmxlbiAgW3MtPnNlbGVjdG9yW3NlbEN0cl1dIFttdGZ2W2ldXSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2NyY3RhYmxlLmMgYi9VdGlsaXRpZXMvY21iemlwMi9jcmN0YWJsZS5jCmluZGV4IDIxNTY4N2IuLjJiMzNjMjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2NyY3RhYmxlLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvY3JjdGFibGUuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2RlY29tcHJlc3MuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL2RlY29tcHJlc3MuYwppbmRleCBiYmE1ZTBmLi5hMWEwYmFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9kZWNvbXByZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvZGVjb21wcmVzcy5jCkBAIC04LDggKzgsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpAQCAtMjg1LDcgKzI4NSw3IEBACiAKICAgICAgIC8qLS0tIE5vdyB0aGUgc2VsZWN0b3JzIC0tLSovCiAgICAgICBHRVRfQklUUyhCWl9YX1NFTEVDVE9SXzEsIG5Hcm91cHMsIDMpOwotICAgICAgaWYgKG5Hcm91cHMgPCAyIHx8IG5Hcm91cHMgPiA2KSBSRVRVUk4oQlpfREFUQV9FUlJPUik7CisgICAgICBpZiAobkdyb3VwcyA8IDIgfHwgbkdyb3VwcyA+IEJaX05fR1JPVVBTKSBSRVRVUk4oQlpfREFUQV9FUlJPUik7CiAgICAgICBHRVRfQklUUyhCWl9YX1NFTEVDVE9SXzIsIG5TZWxlY3RvcnMsIDE1KTsKICAgICAgIGlmIChuU2VsZWN0b3JzIDwgMSkgUkVUVVJOKEJaX0RBVEFfRVJST1IpOwogICAgICAgZm9yIChpID0gMDsgaSA8IG5TZWxlY3RvcnM7IGkrKykgewpAQCAtMjk2LDggKzI5NiwxNCBAQAogICAgICAgICAgICAgaisrOwogICAgICAgICAgICAgaWYgKGogPj0gbkdyb3VwcykgUkVUVVJOKEJaX0RBVEFfRVJST1IpOwogICAgICAgICAgfQotICAgICAgICAgcy0+c2VsZWN0b3JNdGZbaV0gPSBqOworICAgICAgICAgLyogSGF2aW5nIG1vcmUgdGhhbiBCWl9NQVhfU0VMRUNUT1JTIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlCisgICAgICAgICAgICBzaW5jZSB0aGV5IHdpbGwgbmV2ZXIgYmUgdXNlZCwgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1pZ2h0CisgICAgICAgICAgICAicm91bmQgdXAiIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzLCBzbyBqdXN0IGlnbm9yZSB0aG9zZS4gKi8KKyAgICAgICAgIGlmIChpIDwgQlpfTUFYX1NFTEVDVE9SUykKKyAgICAgICAgICAgcy0+c2VsZWN0b3JNdGZbaV0gPSBqOwogICAgICAgfQorICAgICAgaWYgKG5TZWxlY3RvcnMgPiBCWl9NQVhfU0VMRUNUT1JTKQorICAgICAgICBuU2VsZWN0b3JzID0gQlpfTUFYX1NFTEVDVE9SUzsKIAogICAgICAgLyotLS0gVW5kbyB0aGUgTVRGIHZhbHVlcyBmb3IgdGhlIHNlbGVjdG9ycy4gLS0tKi8KICAgICAgIHsKQEAgLTM4MSw2ICszODcsMTMgQEAKICAgICAgICAgICAgIGVzID0gLTE7CiAgICAgICAgICAgICBOID0gMTsKICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgIC8qIENoZWNrIHRoYXQgTiBkb2Vzbid0IGdldCB0b28gYmlnLCBzbyB0aGF0IGVzIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAgIGdvIG5lZ2F0aXZlLiAgVGhlIG1heGltdW0gdmFsdWUgdGhhdCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgIFJVTkEvUlVOQiBlbmNvZGVkIGlzIGVxdWFsIHRvIHRoZSBibG9jayBzaXplIChwb3N0CisgICAgICAgICAgICAgICAgICB0aGUgaW5pdGlhbCBSTEUpLCB2aXosIDkwMGssIHNvIGJvdW5kaW5nIE4gYXQgMgorICAgICAgICAgICAgICAgICAgbWlsbGlvbiBzaG91bGQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdyB3aXRob3V0CisgICAgICAgICAgICAgICAgICByZWplY3RpbmcgYW55IGxlZ2l0aW1hdGUgaW5wdXRzLiAqLworICAgICAgICAgICAgICAgaWYgKE4gPj0gMioxMDI0KjEwMjQpIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKICAgICAgICAgICAgICAgIGlmIChuZXh0U3ltID09IEJaX1JVTkEpIGVzID0gZXMgKyAoMCsxKSAqIE47IGVsc2UKICAgICAgICAgICAgICAgIGlmIChuZXh0U3ltID09IEJaX1JVTkIpIGVzID0gZXMgKyAoMSsxKSAqIE47CiAgICAgICAgICAgICAgICBOID0gTiAqIDI7CkBAIC00ODUsMTUgKzQ5OCwyOCBAQAogICAgICAgICAgUkVUVVJOKEJaX0RBVEFfRVJST1IpOwogCiAgICAgICAvKi0tIFNldCB1cCBjZnRhYiB0byBmYWNpbGl0YXRlIGdlbmVyYXRpb24gb2YgVF4oLTEpIC0tKi8KKyAgICAgIC8qIENoZWNrOiB1bnpmdGFiIGVudHJpZXMgaW4gcmFuZ2UuICovCisgICAgICBmb3IgKGkgPSAwOyBpIDw9IDI1NTsgaSsrKSB7CisgICAgICAgICBpZiAocy0+dW56ZnRhYltpXSA8IDAgfHwgcy0+dW56ZnRhYltpXSA+IG5ibG9jaykKKyAgICAgICAgICAgIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKKyAgICAgIH0KKyAgICAgIC8qIEFjdHVhbGx5IGdlbmVyYXRlIGNmdGFiLiAqLwogICAgICAgcy0+Y2Z0YWJbMF0gPSAwOwogICAgICAgZm9yIChpID0gMTsgaSA8PSAyNTY7IGkrKykgcy0+Y2Z0YWJbaV0gPSBzLT51bnpmdGFiW2ktMV07CiAgICAgICBmb3IgKGkgPSAxOyBpIDw9IDI1NjsgaSsrKSBzLT5jZnRhYltpXSArPSBzLT5jZnRhYltpLTFdOworICAgICAgLyogQ2hlY2s6IGNmdGFiIGVudHJpZXMgaW4gcmFuZ2UuICovCiAgICAgICBmb3IgKGkgPSAwOyBpIDw9IDI1NjsgaSsrKSB7CiAgICAgICAgICBpZiAocy0+Y2Z0YWJbaV0gPCAwIHx8IHMtPmNmdGFiW2ldID4gbmJsb2NrKSB7CiAgICAgICAgICAgICAvKiBzLT5jZnRhYltpXSBjYW4gbGVnaXRpbWF0ZWx5IGJlID09IG5ibG9jayAqLwogICAgICAgICAgICAgUkVUVVJOKEJaX0RBVEFfRVJST1IpOwogICAgICAgICAgfQogICAgICAgfQorICAgICAgLyogQ2hlY2s6IGNmdGFiIGVudHJpZXMgbm9uLWRlc2NlbmRpbmcuICovCisgICAgICBmb3IgKGkgPSAxOyBpIDw9IDI1NjsgaSsrKSB7CisgICAgICAgICBpZiAocy0+Y2Z0YWJbaS0xXSA+IHMtPmNmdGFiW2ldKSB7CisgICAgICAgICAgICBSRVRVUk4oQlpfREFUQV9FUlJPUik7CisgICAgICAgICB9CisgICAgICB9CiAKICAgICAgIHMtPnN0YXRlX291dF9sZW4gPSAwOwogICAgICAgcy0+c3RhdGVfb3V0X2NoICA9IDA7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9kbGx0ZXN0LmMgYi9VdGlsaXRpZXMvY21iemlwMi9kbGx0ZXN0LmMKaW5kZXggNGUyN2RhMi4uMDNmYTE0NiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvZGxsdGVzdC5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2RsbHRlc3QuYwpAQCAtMSwxNzUgKzEsMTc1IEBACi0vKgotICAgbWluaWJ6MgotICAgICAgbGliYnoyLmRsbCB0ZXN0IHByb2dyYW0uCi0gICAgICBieSBZb3NoaW9rYSBUc3VuZW8gKHRzdW5lb0Byci5paWo0dS5vci5qcCkKLSAgICAgIFRoaXMgZmlsZSBpcyBQdWJsaWMgRG9tYWluLiAgV2VsY29tZSBhbnkgZW1haWwgdG8gbWUuCi0KLSAgIHVzYWdlOiBtaW5pYnoyIFstZF0gWy17MSwyLC4uOX1dIFtbc3JjZmlsZW5hbWVdIGRlc3RmaWxlbmFtZV0KLSovCi0KLSNkZWZpbmUgQlpfSU1QT1JUCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJiemxpYi5oIgotI2lmZGVmIF9XSU4zMgotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYKLQotCi0jaWZkZWYgX1dJTjMyCi0KLSNkZWZpbmUgQloyX0xJQk5BTUUgImxpYmJ6Mi0xLjAuMi5ETEwiIAotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotc3RhdGljIGludCBCWjJETExMb2FkZWQgPSAwOwotc3RhdGljIEhJTlNUQU5DRSBCWjJETExoTGliOwotaW50IEJaMkRMTExvYWRMaWJyYXJ5KHZvaWQpCi17Ci0gICBISU5TVEFOQ0UgaExpYjsKLQotICAgaWYoQloyRExMTG9hZGVkPT0xKXtyZXR1cm4gMDt9Ci0gICBoTGliPUxvYWRMaWJyYXJ5KEJaMl9MSUJOQU1FKTsKLSAgIGlmKGhMaWIgPT0gTlVMTCl7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwiQ2FuJ3QgbG9hZCAlc1xuIixCWjJfTElCTkFNRSk7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9Ci0gICBCWjJfYnpsaWJWZXJzaW9uPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemxpYlZlcnNpb24iKTsKLSAgIEJaMl9iem9wZW49R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6b3BlbiIpOwotICAgQloyX2J6ZG9wZW49R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6ZG9wZW4iKTsKLSAgIEJaMl9ienJlYWQ9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6cmVhZCIpOwotICAgQloyX2J6d3JpdGU9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6d3JpdGUiKTsKLSAgIEJaMl9iemZsdXNoPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemZsdXNoIik7Ci0gICBCWjJfYnpjbG9zZT1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpjbG9zZSIpOwotICAgQloyX2J6ZXJyb3I9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6ZXJyb3IiKTsKLQotICAgaWYgKCFCWjJfYnpsaWJWZXJzaW9uIHx8ICFCWjJfYnpvcGVuIHx8ICFCWjJfYnpkb3BlbgotICAgICAgIHx8ICFCWjJfYnpyZWFkIHx8ICFCWjJfYnp3cml0ZSB8fCAhQloyX2J6Zmx1c2gKLSAgICAgICB8fCAhQloyX2J6Y2xvc2UgfHwgIUJaMl9iemVycm9yKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwiR2V0UHJvY0FkZHJlc3MgZmFpbGVkLlxuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9Ci0gICBCWjJETExMb2FkZWQ9MTsKLSAgIEJaMkRMTGhMaWI9aExpYjsKLSAgIHJldHVybiAwOwotCi19Ci1pbnQgQloyRExMRnJlZUxpYnJhcnkodm9pZCkKLXsKLSAgIGlmKEJaMkRMTExvYWRlZD09MCl7cmV0dXJuIDA7fQotICAgRnJlZUxpYnJhcnkoQloyRExMaExpYik7Ci0gICBCWjJETExMb2FkZWQ9MDsKLX0KLSNlbmRpZiAvKiBXSU4zMiAqLwotCi12b2lkIHVzYWdlKHZvaWQpCi17Ci0gICBwdXRzKCJ1c2FnZTogbWluaWJ6MiBbLWRdIFstezEsMiwuLjl9XSBbW3NyY2ZpbGVuYW1lXSBkZXN0ZmlsZW5hbWVdIik7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKLXsKLSAgIGludCBkZWNvbXByZXNzID0gMDsKLSAgIGludCBsZXZlbCA9IDk7Ci0gICBjaGFyICpmbl9yID0gTlVMTDsKLSAgIGNoYXIgKmZuX3cgPSBOVUxMOwotCi0jaWZkZWYgX1dJTjMyCi0gICBpZihCWjJETExMb2FkTGlicmFyeSgpPDApewotICAgICAgZnByaW50ZihzdGRlcnIsIkxvYWRpbmcgb2YgJXMgZmFpbGVkLiAgR2l2aW5nIHVwLlxuIiwgQloyX0xJQk5BTUUpOwotICAgICAgZXhpdCgxKTsKLSAgIH0KLSAgIHByaW50ZigiTG9hZGluZyBvZiAlcyBzdWNjZWVkZWQuICBMaWJyYXJ5IHZlcnNpb24gaXMgJXMuXG4iLAotICAgICAgICAgIEJaMl9MSUJOQU1FLCBCWjJfYnpsaWJWZXJzaW9uKCkgKTsKLSNlbmRpZgotICAgd2hpbGUoKythcmd2LC0tYXJnYyl7Ci0gICAgICBpZigqKmFyZ3YgPT0nLScgfHwgKiphcmd2PT0nLycpewotICAgICAgICAgY2hhciAqcDsKLQotICAgICAgICAgZm9yKHA9KmFyZ3YrMTsqcDtwKyspewotICAgICAgICAgICAgaWYoKnA9PSdkJyl7Ci0gICAgICAgICAgICAgICBkZWNvbXByZXNzID0gMTsKLSAgICAgICAgICAgIH1lbHNlIGlmKCcxJzw9KnAgJiYgKnA8PSc5Jyl7Ci0gICAgICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOwotICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICB1c2FnZSgpOwotICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgIH1lbHNlewotICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICB9Ci0gICBpZihhcmdjPj0xKXsKLSAgICAgIGZuX3IgPSAqYXJndjsKLSAgICAgIGFyZ2MtLTthcmd2Kys7Ci0gICB9ZWxzZXsKLSAgICAgIGZuX3IgPSBOVUxMOwotICAgfQotICAgaWYoYXJnYz49MSl7Ci0gICAgICBmbl93ID0gKmFyZ3Y7Ci0gICAgICBhcmdjLS07YXJndisrOwotICAgfWVsc2V7Ci0gICAgICBmbl93ID0gTlVMTDsKLSAgIH0KLSAgIHsKLSAgICAgIGludCBsZW47Ci0gICAgICBjaGFyIGJ1ZmZbMHgxMDAwXTsKLSAgICAgIGNoYXIgbW9kZVsxMF07Ci0KLSAgICAgIGlmKGRlY29tcHJlc3MpewotICAgICAgICAgQlpGSUxFICpCWjJmcF9yID0gTlVMTDsKLSAgICAgICAgIEZJTEUgKmZwX3cgPSBOVUxMOwotCi0gICAgICAgICBpZihmbl93KXsKLSAgICAgICAgICAgIGlmKChmcF93ID0gZm9wZW4oZm5fdywid2IiKSk9PU5VTEwpewotICAgICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBvcGVuIFslc11cbiIsZm5fdyk7Ci0gICAgICAgICAgICAgICBwZXJyb3IoInJlYXNvbjoiKTsKLSAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9ZWxzZXsKLSAgICAgICAgICAgIGZwX3cgPSBzdGRvdXQ7Ci0gICAgICAgICB9Ci0gICAgICAgICBpZigoZm5fciA9PSBOVUxMICYmIChCWjJmcF9yID0gQloyX2J6ZG9wZW4oZmlsZW5vKHN0ZGluKSwicmIiKSk9PU5VTEwpCi0gICAgICAgICAgICB8fCAoZm5fciAhPSBOVUxMICYmIChCWjJmcF9yID0gQloyX2J6b3Blbihmbl9yLCJyYiIpKT09TlVMTCkpewotICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBiejJvcGVuc3RyZWFtXG4iKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICB9Ci0gICAgICAgICB3aGlsZSgobGVuPUJaMl9ienJlYWQoQloyZnBfcixidWZmLDB4MTAwMCkpPjApewotICAgICAgICAgICAgZndyaXRlKGJ1ZmYsMSxsZW4sZnBfdyk7Ci0gICAgICAgICB9Ci0gICAgICAgICBCWjJfYnpjbG9zZShCWjJmcF9yKTsKLSAgICAgICAgIGlmKGZwX3cgIT0gc3Rkb3V0KSBmY2xvc2UoZnBfdyk7Ci0gICAgICB9ZWxzZXsKLSAgICAgICAgIEJaRklMRSAqQloyZnBfdyA9IE5VTEw7Ci0gICAgICAgICBGSUxFICpmcF9yID0gTlVMTDsKLQotICAgICAgICAgaWYoZm5fcil7Ci0gICAgICAgICAgICBpZigoZnBfciA9IGZvcGVuKGZuX3IsInJiIikpPT1OVUxMKXsKLSAgICAgICAgICAgICAgIHByaW50ZigiY2FuJ3Qgb3BlbiBbJXNdXG4iLGZuX3IpOwotICAgICAgICAgICAgICAgcGVycm9yKCJyZWFzb246Iik7Ci0gICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICBmcF9yID0gc3RkaW47Ci0gICAgICAgICB9Ci0gICAgICAgICBtb2RlWzBdPSd3JzsKLSAgICAgICAgIG1vZGVbMV0gPSAnMCcgKyBsZXZlbDsKLSAgICAgICAgIG1vZGVbMl0gPSAnXDAnOwotCi0gICAgICAgICBpZigoZm5fdyA9PSBOVUxMICYmIChCWjJmcF93ID0gQloyX2J6ZG9wZW4oZmlsZW5vKHN0ZG91dCksbW9kZSkpPT1OVUxMKQotICAgICAgICAgICAgfHwgKGZuX3cgIT1OVUxMICYmIChCWjJmcF93ID0gQloyX2J6b3Blbihmbl93LG1vZGUpKT09TlVMTCkpewotICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBiejJvcGVuc3RyZWFtXG4iKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICB9Ci0gICAgICAgICB3aGlsZSgobGVuPWZyZWFkKGJ1ZmYsMSwweDEwMDAsZnBfcikpPjApewotICAgICAgICAgICAgQloyX2J6d3JpdGUoQloyZnBfdyxidWZmLGxlbik7Ci0gICAgICAgICB9Ci0gICAgICAgICBCWjJfYnpjbG9zZShCWjJmcF93KTsKLSAgICAgICAgIGlmKGZwX3IhPXN0ZGluKWZjbG9zZShmcF9yKTsKLSAgICAgIH0KLSAgIH0KLSNpZmRlZiBfV0lOMzIKLSAgIEJaMkRMTEZyZWVMaWJyYXJ5KCk7Ci0jZW5kaWYKLSAgIHJldHVybiAwOwotfQorLyoNCisgICBtaW5pYnoyDQorICAgICAgbGliYnoyLmRsbCB0ZXN0IHByb2dyYW0uDQorICAgICAgYnkgWW9zaGlva2EgVHN1bmVvICh0c3VuZW9AcnIuaWlqNHUub3IuanApDQorICAgICAgVGhpcyBmaWxlIGlzIFB1YmxpYyBEb21haW4uICBXZWxjb21lIGFueSBlbWFpbCB0byBtZS4NCisNCisgICB1c2FnZTogbWluaWJ6MiBbLWRdIFstezEsMiwuLjl9XSBbW3NyY2ZpbGVuYW1lXSBkZXN0ZmlsZW5hbWVdDQorKi8NCisNCisjZGVmaW5lIEJaX0lNUE9SVA0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSAiYnpsaWIuaCINCisjaWZkZWYgX1dJTjMyDQorI2luY2x1ZGUgPGlvLmg+DQorI2VuZGlmDQorDQorDQorI2lmZGVmIF9XSU4zMg0KKw0KKyNkZWZpbmUgQloyX0xJQk5BTUUgImxpYmJ6Mi0xLjAuMi5ETEwiIA0KKw0KKyNpbmNsdWRlIDx3aW5kb3dzLmg+DQorc3RhdGljIGludCBCWjJETExMb2FkZWQgPSAwOw0KK3N0YXRpYyBISU5TVEFOQ0UgQloyRExMaExpYjsNCitpbnQgQloyRExMTG9hZExpYnJhcnkodm9pZCkNCit7DQorICAgSElOU1RBTkNFIGhMaWI7DQorDQorICAgaWYoQloyRExMTG9hZGVkPT0xKXtyZXR1cm4gMDt9DQorICAgaExpYj1Mb2FkTGlicmFyeShCWjJfTElCTkFNRSk7DQorICAgaWYoaExpYiA9PSBOVUxMKXsNCisgICAgICBmcHJpbnRmKHN0ZGVyciwiQ2FuJ3QgbG9hZCAlc1xuIixCWjJfTElCTkFNRSk7DQorICAgICAgcmV0dXJuIC0xOw0KKyAgIH0NCisgICBCWjJfYnpsaWJWZXJzaW9uPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemxpYlZlcnNpb24iKTsNCisgICBCWjJfYnpvcGVuPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iem9wZW4iKTsNCisgICBCWjJfYnpkb3Blbj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpkb3BlbiIpOw0KKyAgIEJaMl9ienJlYWQ9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6cmVhZCIpOw0KKyAgIEJaMl9iendyaXRlPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iendyaXRlIik7DQorICAgQloyX2J6Zmx1c2g9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6Zmx1c2giKTsNCisgICBCWjJfYnpjbG9zZT1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpjbG9zZSIpOw0KKyAgIEJaMl9iemVycm9yPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemVycm9yIik7DQorDQorICAgaWYgKCFCWjJfYnpsaWJWZXJzaW9uIHx8ICFCWjJfYnpvcGVuIHx8ICFCWjJfYnpkb3Blbg0KKyAgICAgICB8fCAhQloyX2J6cmVhZCB8fCAhQloyX2J6d3JpdGUgfHwgIUJaMl9iemZsdXNoDQorICAgICAgIHx8ICFCWjJfYnpjbG9zZSB8fCAhQloyX2J6ZXJyb3IpIHsNCisgICAgICBmcHJpbnRmKHN0ZGVyciwiR2V0UHJvY0FkZHJlc3MgZmFpbGVkLlxuIik7DQorICAgICAgcmV0dXJuIC0xOw0KKyAgIH0NCisgICBCWjJETExMb2FkZWQ9MTsNCisgICBCWjJETExoTGliPWhMaWI7DQorICAgcmV0dXJuIDA7DQorDQorfQ0KK2ludCBCWjJETExGcmVlTGlicmFyeSh2b2lkKQ0KK3sNCisgICBpZihCWjJETExMb2FkZWQ9PTApe3JldHVybiAwO30NCisgICBGcmVlTGlicmFyeShCWjJETExoTGliKTsNCisgICBCWjJETExMb2FkZWQ9MDsNCit9DQorI2VuZGlmIC8qIFdJTjMyICovDQorDQordm9pZCB1c2FnZSh2b2lkKQ0KK3sNCisgICBwdXRzKCJ1c2FnZTogbWluaWJ6MiBbLWRdIFstezEsMiwuLjl9XSBbW3NyY2ZpbGVuYW1lXSBkZXN0ZmlsZW5hbWVdIik7DQorfQ0KKw0KK2ludCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkNCit7DQorICAgaW50IGRlY29tcHJlc3MgPSAwOw0KKyAgIGludCBsZXZlbCA9IDk7DQorICAgY2hhciAqZm5fciA9IE5VTEw7DQorICAgY2hhciAqZm5fdyA9IE5VTEw7DQorDQorI2lmZGVmIF9XSU4zMg0KKyAgIGlmKEJaMkRMTExvYWRMaWJyYXJ5KCk8MCl7DQorICAgICAgZnByaW50ZihzdGRlcnIsIkxvYWRpbmcgb2YgJXMgZmFpbGVkLiAgR2l2aW5nIHVwLlxuIiwgQloyX0xJQk5BTUUpOw0KKyAgICAgIGV4aXQoMSk7DQorICAgfQ0KKyAgIHByaW50ZigiTG9hZGluZyBvZiAlcyBzdWNjZWVkZWQuICBMaWJyYXJ5IHZlcnNpb24gaXMgJXMuXG4iLA0KKyAgICAgICAgICBCWjJfTElCTkFNRSwgQloyX2J6bGliVmVyc2lvbigpICk7DQorI2VuZGlmDQorICAgd2hpbGUoKythcmd2LC0tYXJnYyl7DQorICAgICAgaWYoKiphcmd2ID09Jy0nIHx8ICoqYXJndj09Jy8nKXsNCisgICAgICAgICBjaGFyICpwOw0KKw0KKyAgICAgICAgIGZvcihwPSphcmd2KzE7KnA7cCsrKXsNCisgICAgICAgICAgICBpZigqcD09J2QnKXsNCisgICAgICAgICAgICAgICBkZWNvbXByZXNzID0gMTsNCisgICAgICAgICAgICB9ZWxzZSBpZignMSc8PSpwICYmICpwPD0nOScpew0KKyAgICAgICAgICAgICAgIGxldmVsID0gKnAgLSAnMCc7DQorICAgICAgICAgICAgfWVsc2V7DQorICAgICAgICAgICAgICAgdXNhZ2UoKTsNCisgICAgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICB9DQorICAgICAgfWVsc2V7DQorICAgICAgICAgYnJlYWs7DQorICAgICAgfQ0KKyAgIH0NCisgICBpZihhcmdjPj0xKXsNCisgICAgICBmbl9yID0gKmFyZ3Y7DQorICAgICAgYXJnYy0tO2FyZ3YrKzsNCisgICB9ZWxzZXsNCisgICAgICBmbl9yID0gTlVMTDsNCisgICB9DQorICAgaWYoYXJnYz49MSl7DQorICAgICAgZm5fdyA9ICphcmd2Ow0KKyAgICAgIGFyZ2MtLTthcmd2Kys7DQorICAgfWVsc2V7DQorICAgICAgZm5fdyA9IE5VTEw7DQorICAgfQ0KKyAgIHsNCisgICAgICBpbnQgbGVuOw0KKyAgICAgIGNoYXIgYnVmZlsweDEwMDBdOw0KKyAgICAgIGNoYXIgbW9kZVsxMF07DQorDQorICAgICAgaWYoZGVjb21wcmVzcyl7DQorICAgICAgICAgQlpGSUxFICpCWjJmcF9yID0gTlVMTDsNCisgICAgICAgICBGSUxFICpmcF93ID0gTlVMTDsNCisNCisgICAgICAgICBpZihmbl93KXsNCisgICAgICAgICAgICBpZigoZnBfdyA9IGZvcGVuKGZuX3csIndiIikpPT1OVUxMKXsNCisgICAgICAgICAgICAgICBwcmludGYoImNhbid0IG9wZW4gWyVzXVxuIixmbl93KTsNCisgICAgICAgICAgICAgICBwZXJyb3IoInJlYXNvbjoiKTsNCisgICAgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICB9ZWxzZXsNCisgICAgICAgICAgICBmcF93ID0gc3Rkb3V0Ow0KKyAgICAgICAgIH0NCisgICAgICAgICBpZigoZm5fciA9PSBOVUxMICYmIChCWjJmcF9yID0gQloyX2J6ZG9wZW4oZmlsZW5vKHN0ZGluKSwicmIiKSk9PU5VTEwpDQorICAgICAgICAgICAgfHwgKGZuX3IgIT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iem9wZW4oZm5fciwicmIiKSk9PU5VTEwpKXsNCisgICAgICAgICAgICBwcmludGYoImNhbid0IGJ6Mm9wZW5zdHJlYW1cbiIpOw0KKyAgICAgICAgICAgIGV4aXQoMSk7DQorICAgICAgICAgfQ0KKyAgICAgICAgIHdoaWxlKChsZW49QloyX2J6cmVhZChCWjJmcF9yLGJ1ZmYsMHgxMDAwKSk+MCl7DQorICAgICAgICAgICAgZndyaXRlKGJ1ZmYsMSxsZW4sZnBfdyk7DQorICAgICAgICAgfQ0KKyAgICAgICAgIEJaMl9iemNsb3NlKEJaMmZwX3IpOw0KKyAgICAgICAgIGlmKGZwX3cgIT0gc3Rkb3V0KSBmY2xvc2UoZnBfdyk7DQorICAgICAgfWVsc2V7DQorICAgICAgICAgQlpGSUxFICpCWjJmcF93ID0gTlVMTDsNCisgICAgICAgICBGSUxFICpmcF9yID0gTlVMTDsNCisNCisgICAgICAgICBpZihmbl9yKXsNCisgICAgICAgICAgICBpZigoZnBfciA9IGZvcGVuKGZuX3IsInJiIikpPT1OVUxMKXsNCisgICAgICAgICAgICAgICBwcmludGYoImNhbid0IG9wZW4gWyVzXVxuIixmbl9yKTsNCisgICAgICAgICAgICAgICBwZXJyb3IoInJlYXNvbjoiKTsNCisgICAgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICB9ZWxzZXsNCisgICAgICAgICAgICBmcF9yID0gc3RkaW47DQorICAgICAgICAgfQ0KKyAgICAgICAgIG1vZGVbMF09J3cnOw0KKyAgICAgICAgIG1vZGVbMV0gPSAnMCcgKyBsZXZlbDsNCisgICAgICAgICBtb2RlWzJdID0gJ1wwJzsNCisNCisgICAgICAgICBpZigoZm5fdyA9PSBOVUxMICYmIChCWjJmcF93ID0gQloyX2J6ZG9wZW4oZmlsZW5vKHN0ZG91dCksbW9kZSkpPT1OVUxMKQ0KKyAgICAgICAgICAgIHx8IChmbl93ICE9TlVMTCAmJiAoQloyZnBfdyA9IEJaMl9iem9wZW4oZm5fdyxtb2RlKSk9PU5VTEwpKXsNCisgICAgICAgICAgICBwcmludGYoImNhbid0IGJ6Mm9wZW5zdHJlYW1cbiIpOw0KKyAgICAgICAgICAgIGV4aXQoMSk7DQorICAgICAgICAgfQ0KKyAgICAgICAgIHdoaWxlKChsZW49ZnJlYWQoYnVmZiwxLDB4MTAwMCxmcF9yKSk+MCl7DQorICAgICAgICAgICAgQloyX2J6d3JpdGUoQloyZnBfdyxidWZmLGxlbik7DQorICAgICAgICAgfQ0KKyAgICAgICAgIEJaMl9iemNsb3NlKEJaMmZwX3cpOw0KKyAgICAgICAgIGlmKGZwX3IhPXN0ZGluKWZjbG9zZShmcF9yKTsNCisgICAgICB9DQorICAgfQ0KKyNpZmRlZiBfV0lOMzINCisgICBCWjJETExGcmVlTGlicmFyeSgpOw0KKyNlbmRpZg0KKyAgIHJldHVybiAwOw0KK30NCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9lbnRpdGllcy54bWwgYi9VdGlsaXRpZXMvY21iemlwMi9lbnRpdGllcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZTA1NTMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvZW50aXRpZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08IS0tIG1pc2MuIHN0cmluZ3MgLS0+Ci08IUVOVElUWSBiei11cmwgImh0dHA6Ly93d3cuYnppcC5vcmciPgotPCFFTlRJVFkgYnotZW1haWwgImpzZXdhcmRAYnppcC5vcmciPgotPCFFTlRJVFkgYnotbGlmZXNwYW4gIjE5OTYtMjAwNyI+Ci0KLTwhRU5USVRZIGJ6LXZlcnNpb24gIjEuMC41Ij4KLTwhRU5USVRZIGJ6LWRhdGUgIjEwIERlY2VtYmVyIDIwMDciPgotCi08IUVOVElUWSBtYW51YWwtdGl0bGUgImJ6aXAyIE1hbnVhbCI+CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9mb3JtYXQucGwgYi9VdGlsaXRpZXMvY21iemlwMi9mb3JtYXQucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDJiMzkxZGEuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvZm9ybWF0LnBsCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsIC13Ci0jCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotIyBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgotIwotIyBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KLSMKLSMgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAotIyBSRUFETUUgZmlsZS4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLSMgaW4gdGhlIGZpbGUgTElDRU5TRS4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jCi11c2Ugc3RyaWN0OwotCi0jIGdldCBjb21tYW5kIGxpbmUgdmFsdWVzOgotaWYgKCAkI0FSR1YgIT0xICkgewotICAgIGRpZSAiVXNhZ2U6ICAkMCB4bWxfaW5maWxlIHhtbF9vdXRmaWxlXG4iOwotfQotCi1teSAkaW5maWxlID0gc2hpZnQ7Ci0jIGNoZWNrIGluZmlsZSBleGlzdHMKLWRpZSAiQ2FuJ3QgZmluZCBmaWxlIFwiJGluZmlsZVwiIgotICB1bmxlc3MgLWYgJGluZmlsZTsKLSMgY2hlY2sgd2UgY2FuIHJlYWQgaW5maWxlCi1pZiAoISAtciAkaW5maWxlKSB7Ci0gICAgZGllICJDYW4ndCByZWFkIGlucHV0ICRpbmZpbGVcbiI7Ci19Ci0jIGNoZWNrIHdlIGNhbiBvcGVuIGluZmlsZQotb3BlbiggSU5GSUxFLCI8JGluZmlsZSIgKSBvciAKLSAgICBkaWUgIkNhbid0IGlucHV0ICRpbmZpbGUgJCEiOwotCi0jbXkgJG91dGZpbGUgPSAnZm10LW1hbnVhbC54bWwnOwotbXkgJG91dGZpbGUgPSBzaGlmdDsKLSNwcmludCAiSW5maWxlOiAkaW5maWxlLCBPdXRmaWxlOiAkb3V0ZmlsZVxuIjsKLSMgY2hlY2sgd2UgY2FuIHdyaXRlIHRvIG91dGZpbGUKLW9wZW4oIE9VVEZJTEUsIj4kb3V0ZmlsZSIgKSBvciAKLSAgICBkaWUgIkNhbid0IG91dHB1dCAkb3V0ZmlsZSAkISBmb3Igd3JpdGluZyI7Ci0KLW15ICgkcHJldiwgJGN1cnIsICRzdHIpOwotJHByZXYgPSAnJzsgJGN1cnIgPSAnJzsKLXdoaWxlICggPElORklMRT4gKSB7Ci0KLSAgICAgICAgcHJpbnQgT1VURklMRSAkcHJldjsKLSAgICAkcHJldiA9ICRjdXJyOwotICAgICRjdXJyID0gJF87Ci0gICAgJHN0ciA9ICcnOwotCi0gICAgaWYgKCAkcHJldiA9fiAvPHByb2dyYW1saXN0aW5nPiR8PHNjcmVlbj4kLyApIHsKLSAgICAgICAgY2hvbXAgJHByZXY7Ci0gICAgICAgICRjdXJyID0gam9pbiggJycsICRwcmV2LCAiPCFbQ0RBVEFbIiwgJGN1cnIgKTsKLSAgICAgICAgICAgICAgICAkcHJldiA9ICcnOwotICAgICAgICBuZXh0OwotICAgIH0KLSAgICBlbHNpZiAoICRjdXJyID1+IC88XC9wcm9ncmFtbGlzdGluZz58PFwvc2NyZWVuPi8gKSB7Ci0gICAgICAgIGNob21wICRwcmV2OwotICAgICAgICAkY3VyciA9IGpvaW4oICcnLCAkcHJldiwgIl1dPiIsICRjdXJyICk7Ci0gICAgICAgICAgICAgICAgJHByZXYgPSAnJzsKLSAgICAgICAgbmV4dDsKLSAgICB9Ci19Ci1wcmludCBPVVRGSUxFICRjdXJyOwotY2xvc2UgSU5GSUxFOwotY2xvc2UgT1VURklMRTsKLWV4aXQ7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9odWZmbWFuLmMgYi9VdGlsaXRpZXMvY21iemlwMi9odWZmbWFuLmMKaW5kZXggODdlNzllMy4uNDNhMTg5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvaHVmZm1hbi5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2h1ZmZtYW4uYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2xpYmJ6Mi5kZWYgYi9VdGlsaXRpZXMvY21iemlwMi9saWJiejIuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWZlZjU0Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2xpYmJ6Mi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1MSUJSQVJZICAgICAgICAgTElCQloyCi1ERVNDUklQVElPTiAgICAgImxpYmJ6aXAyOiBsaWJyYXJ5IGZvciBkYXRhIGNvbXByZXNzaW9uIgotRVhQT1JUUwotICAgIEJaMl9iekNvbXByZXNzSW5pdAotICAgIEJaMl9iekNvbXByZXNzCi0gICAgQloyX2J6Q29tcHJlc3NFbmQKLSAgICBCWjJfYnpEZWNvbXByZXNzSW5pdAotICAgIEJaMl9iekRlY29tcHJlc3MKLSAgICBCWjJfYnpEZWNvbXByZXNzRW5kCi0gICAgQloyX2J6UmVhZE9wZW4KLSAgICBCWjJfYnpSZWFkQ2xvc2UKLSAgICBCWjJfYnpSZWFkR2V0VW51c2VkCi0gICAgQloyX2J6UmVhZAotICAgIEJaMl9ieldyaXRlT3BlbgotICAgIEJaMl9ieldyaXRlCi0gICAgQloyX2J6V3JpdGVDbG9zZQotICAgIEJaMl9ieldyaXRlQ2xvc2U2NAotICAgIEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcwotICAgIEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzCi0gICAgQloyX2J6bGliVmVyc2lvbgotICAgIEJaMl9iem9wZW4KLSAgICBCWjJfYnpkb3BlbgotICAgIEJaMl9ienJlYWQKLSAgICBCWjJfYnp3cml0ZQotICAgIEJaMl9iemZsdXNoCi0gICAgQloyX2J6Y2xvc2UKLSAgICBCWjJfYnplcnJvcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvbGliYnoyLmxpYiBiL1V0aWxpdGllcy9jbWJ6aXAyL2xpYmJ6Mi5saWIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhOTdhNzUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbGliYnoyLmxpYgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL21ha2VmaWxlLm1zYyBiL1V0aWxpdGllcy9jbWJ6aXAyL21ha2VmaWxlLm1zYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVmMmU1OS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9tYWtlZmlsZS5tc2MKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jIE1ha2VmaWxlIGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2LjAKLSMgdXNhZ2U6IG5tYWtlIC1mIG1ha2VmaWxlLm1zYwotIyBLLk0uIFN5cmluZyAoc3lyaW5nQGdzZi5kZSkKLSMgRml4ZWQgdXAgYnkgSlJTIGZvciBiemlwMi0wLjkuNWQgcmVsZWFzZS4KLQotQ0M9Y2wKLUNGTEFHUz0gLURXSU4zMiAtTUQgLU94IC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLW5vbG9nbwotCi1PQkpTPSBibG9ja3NvcnQub2JqICBcCi0gICAgICBodWZmbWFuLm9iaiAgICBcCi0gICAgICBjcmN0YWJsZS5vYmogICBcCi0gICAgICByYW5kdGFibGUub2JqICBcCi0gICAgICBjb21wcmVzcy5vYmogICBcCi0gICAgICBkZWNvbXByZXNzLm9iaiBcCi0gICAgICBiemxpYi5vYmoKLQotYWxsOiBsaWIgYnppcDIgdGVzdAotCi1iemlwMjogbGliCi0gICAgJChDQykgJChDRkxBR1MpIC1vIGJ6aXAyIGJ6aXAyLmMgbGliYnoyLmxpYiBzZXRhcmd2Lm9iagotICAgICQoQ0MpICQoQ0ZMQUdTKSAtbyBiemlwMnJlY292ZXIgYnppcDJyZWNvdmVyLmMKLQotbGliOiAkKE9CSlMpCi0gICAgbGliIC9vdXQ6bGliYnoyLmxpYiAkKE9CSlMpCi0KLXRlc3Q6IGJ6aXAyCi0gICAgdHlwZSB3b3JkczEKLSAgICAuXFxiemlwMiAtMSAgPCBzYW1wbGUxLnJlZiA+IHNhbXBsZTEucmIyCi0gICAgLlxcYnppcDIgLTIgIDwgc2FtcGxlMi5yZWYgPiBzYW1wbGUyLnJiMgotICAgIC5cXGJ6aXAyIC0zICA8IHNhbXBsZTMucmVmID4gc2FtcGxlMy5yYjIKLSAgICAuXFxiemlwMiAtZCAgPCBzYW1wbGUxLmJ6MiA+IHNhbXBsZTEudHN0Ci0gICAgLlxcYnppcDIgLWQgIDwgc2FtcGxlMi5iejIgPiBzYW1wbGUyLnRzdAotICAgIC5cXGJ6aXAyIC1kcyA8IHNhbXBsZTMuYnoyID4gc2FtcGxlMy50c3QKLSAgICBAZWNobyBBbGwgc2l4IG9mIHRoZSBmYydzIHNob3VsZCBmaW5kIG5vIGRpZmZlcmVuY2VzLgotICAgIEBlY2hvIElmIGZjIGZpbmRzIGFuIGVycm9yIG9uIHNhbXBsZTMuYnoyLCB0aGlzIGNvdWxkIGJlCi0gICAgQGVjaG8gYmVjYXVzZSBXaW5aaXAncyAnVEFSIGZpbGUgc21hcnQgQ1IvTEYgY29udmVyc2lvbicKLSAgICBAZWNobyBpcyB0b28gY2xldmVyIGZvciBpdHMgb3duIGdvb2QuICBEaXNhYmxlIHRoaXMgb3B0aW9uLgotICAgIEBlY2hvIFRoZSBjb3JyZWN0IHNpemUgZm9yIHNhbXBsZTMucmVmIGlzIDEyMCwyNDQuICBJZiBpdAotICAgIEBlY2hvIGlzIDE1MCwyNTEsIFdpblppcCBoYXMgbWVzc2VkIGl0IHVwLgotICAgIGZjIHNhbXBsZTEuYnoyIHNhbXBsZTEucmIyIAotICAgIGZjIHNhbXBsZTIuYnoyIHNhbXBsZTIucmIyCi0gICAgZmMgc2FtcGxlMy5iejIgc2FtcGxlMy5yYjIKLSAgICBmYyBzYW1wbGUxLnRzdCBzYW1wbGUxLnJlZgotICAgIGZjIHNhbXBsZTIudHN0IHNhbXBsZTIucmVmCi0gICAgZmMgc2FtcGxlMy50c3Qgc2FtcGxlMy5yZWYKLQotCi0KLWNsZWFuOiAKLSAgICBkZWwgKi5vYmoKLSAgICBkZWwgbGliYnoyLmxpYiAKLSAgICBkZWwgYnppcDIuZXhlCi0gICAgZGVsIGJ6aXAycmVjb3Zlci5leGUKLSAgICBkZWwgc2FtcGxlMS5yYjIgCi0gICAgZGVsIHNhbXBsZTIucmIyIAotICAgIGRlbCBzYW1wbGUzLnJiMgotICAgIGRlbCBzYW1wbGUxLnRzdCAKLSAgICBkZWwgc2FtcGxlMi50c3QKLSAgICBkZWwgc2FtcGxlMy50c3QKLQotLmMub2JqOiAKLSAgICAkKENDKSAkKENGTEFHUykgLWMgJCouYyAtbyAkKi5vYmoKLQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLmh0bWwgYi9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI0NDk1My4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1NDAgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPmJ6aXAyIGFuZCBsaWJiemlwMiwgdmVyc2lvbiAxLjAuNTwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjY5LjEiPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4vKiBDb2xvdXJzOgotIzc0MjQwZiAgZGFyayBicm93biAgICAgIGgxLCBoMiwgaDMsIGg0Ci0jMzM2Njk5ICBtZWRpdW0gYmx1ZSAgICAgbGlua3MKLSMzMzk5OTkgIHR1cnF1b2lzZSAgICAgICBsaW5rIGhvdmVyIGNvbG91cgotIzIwMjAyMCAgYWxtb3N0IGJsYWNrICAgIGdlbmVyYWwgdGV4dAotIzc2MTU5NiAgcHVycGxlICAgICAgICAgIG1kNXN1bSB0ZXh0Ci0jNjI2MjYyICBkYXJrIGdyYXkgICAgICAgcHJlIGJvcmRlcgotI2VlZWVlZSAgdmVyeSBsaWdodCBncmF5IHByZSBiYWNrZ3JvdW5kCi0jZjJmMmY5ICB2ZXJ5IGxpZ2h0IGJsdWUgbmF2IHRhYmxlIGJhY2tncm91bmQKLSMzMzY2Y2MgIG1lZGl1bSBibHVlICAgICBuYXYgdGFibGUgYm9yZGVyCi0qLwotCi1hLCBhOmxpbmssIGE6dmlzaXRlZCwgYTphY3RpdmUgeyBjb2xvcjogIzMzNjY5OTsgfQotYTpob3ZlciB7IGNvbG9yOiAjMzM5OTk5OyB9Ci0KLWJvZHkgeyBmb250OiA4MCUvMTI2JSBzYW5zLXNlcmlmOyB9Ci1oMSwgaDIsIGgzLCBoNCB7IGNvbG9yOiAjNzQyNDBmOyB9Ci0KLWR0IHsgY29sb3I6ICMzMzY2OTk7IGZvbnQtd2VpZ2h0OiBib2xkIH0KLWRkIHsgCi0gbWFyZ2luLWxlZnQ6IDEuNWVtOyAKLSBwYWRkaW5nLWJvdHRvbTogMC44ZW07Ci19Ci0KLS8qIC0tIHJ1bGVyIC0tICovCi1kaXYuaHJfYmx1ZSB7IAotICBoZWlnaHQ6ICAzcHg7IAotICBiYWNrZ3JvdW5kOiNmZmZmZmYgdXJsKCIvaW1hZ2VzL2hyX2JsdWUucG5nIikgcmVwZWF0LXg7IH0KLWRpdi5ocl9ibHVlIGhyIHsgZGlzcGxheTpub25lOyB9Ci0KLS8qIHJlbGVhc2Ugc3R5bGVzICovCi0jcmVsZWFzZSBwIHsgbWFyZ2luLXRvcDogMC40ZW07IH0KLSNyZWxlYXNlIC5tZDVzdW0geyBjb2xvcjogIzc2MTU5NjsgfQotCi0KLS8qIC0tLS0tLSBzdHlsZXMgZm9yIGRvY3N8bWFudWFsc3xob3d0byAtLS0tLS0gKi8KLS8qIC0tIGxpc3RzIC0tICovCi11bCAgeyAKLSBtYXJnaW46ICAgICAwcHggNHB4IDE2cHggMTZweDsKLSBwYWRkaW5nOiAgICAwcHg7Ci0gbGlzdC1zdHlsZTogdXJsKCIvaW1hZ2VzL2xpLWJsdWUucG5nIik7IAotfQotdWwgbGkgeyAKLSBtYXJnaW4tYm90dG9tOiAxMHB4OwotfQotdWwgdWwgICB7IAotIGxpc3Qtc3R5bGUtdHlwZTogIG5vbmU7IAotIGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7IAotIG1hcmdpbi1sZWZ0OiAgICAgIDBweDsgCi19Ci0KLS8qIGhlYWRlciAvIGZvb3RlciBuYXYgdGFibGVzICovCi10YWJsZS5uYXYgewotIGJvcmRlcjogICAgIHNvbGlkIDFweCAjMzM2NmNjOwotIGJhY2tncm91bmQ6ICNmMmYyZjk7Ci0gYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmOTsKLSBtYXJnaW4tYm90dG9tOiAwLjVlbTsKLX0KLS8qIGRvbid0IGhhdmUgdW5kZXJsaW5lZCBsaW5rcyBpbiBjaHVua2VkIG5hdiBtZW51cyAqLwotdGFibGUubmF2IGEgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KLXRhYmxlLm5hdiBhOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KLXRhYmxlLm5hdiB0ZCB7IGZvbnQtc2l6ZTogODUlOyB9Ci0KLWNvZGUsIHR0LCBwcmUgeyBmb250LXNpemU6IDEyMCU7IH0KLWNvZGUsIHR0IHsgY29sb3I6ICM3NjE1OTY7IH0KLQotZGl2LmxpdGVyYWxsYXlvdXQsIHByZS5wcm9ncmFtbGlzdGluZywgcHJlLnNjcmVlbiB7Ci0gY29sb3I6ICAgICAgIzAwMDAwMDsKLSBwYWRkaW5nOiAgICAwLjVlbTsKLSBiYWNrZ3JvdW5kOiAjZWVlZWVlOwotIGJvcmRlcjogICAgIDFweCBzb2xpZCAjNjI2MjYyOwotIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7Ci0gbWFyZ2luOiA0cHggMHB4IDRweCAwcHg7IAotfQotPC9zdHlsZT4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJib29rIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotPGRpdj4KLTxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJ1c2VybWFuIj48L2E+YnppcDIgYW5kIGxpYmJ6aXAyLCB2ZXJzaW9uIDEuMC41PC9oMT48L2Rpdj4KLTxkaXY+PGgyIGNsYXNzPSJzdWJ0aXRsZSI+QSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvciBkYXRhIGNvbXByZXNzaW9uPC9oMj48L2Rpdj4KLTxkaXY+PGRpdiBjbGFzcz0iYXV0aG9yZ3JvdXAiPjxkaXYgY2xhc3M9ImF1dGhvciI+Ci08aDMgY2xhc3M9ImF1dGhvciI+Ci08c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5KdWxpYW48L3NwYW4+IDxzcGFuIGNsYXNzPSJzdXJuYW1lIj5TZXdhcmQ8L3NwYW4+Ci08L2gzPgotPGRpdiBjbGFzcz0iYWZmaWxpYXRpb24iPjxzcGFuIGNsYXNzPSJvcmduYW1lIj5odHRwOi8vd3d3LmJ6aXAub3JnPGJyPjwvc3Bhbj48L2Rpdj4KLTwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdj48cCBjbGFzcz0icmVsZWFzZWluZm8iPlZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNzwvcD48L2Rpdj4KLTxkaXY+PHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0IKkgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQ8L3A+PC9kaXY+Ci08ZGl2PjxkaXYgY2xhc3M9ImxlZ2Fsbm90aWNlIj4KLTxhIG5hbWU9ImlkMjQ5OTgzMyI+PC9hPjxwPlRoaXMgcHJvZ3JhbSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4sIHRoZQotICBhc3NvY2lhdGVkIGxpYnJhcnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4sIGFuZAotICBhbGwgZG9jdW1lbnRhdGlvbiwgYXJlIGNvcHlyaWdodCCpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkLgotICBBbGwgcmlnaHRzIHJlc2VydmVkLjwvcD4KLTxwPlJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgKLSAgb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUKLSAgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUKLSAgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKLSAgIGZvbGxvd2luZyBkaXNjbGFpbWVyLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZQotICAgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwKLSAgIHNvZnR3YXJlLiAgSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4KLSAgIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKLSAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+QWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZAotICAgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbAotICAgc29mdHdhcmUuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+VGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8KLSAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SICJBUyBJUyIgQU5EIEFOWQotICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0gIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwotICBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuPC9wPgotPHA+UEFURU5UUzogVG8gdGhlIGJlc3Qgb2YgbXkga25vd2xlZGdlLAotIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGFuZAotIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+IGRvIG5vdCB1c2UgYW55IHBhdGVudGVkCi0gYWxnb3JpdGhtcy4gIEhvd2V2ZXIsIEkgZG8gbm90IGhhdmUgdGhlIHJlc291cmNlcyB0byBjYXJyeQotIG91dCBhIHBhdGVudCBzZWFyY2guICBUaGVyZWZvcmUgSSBjYW5ub3QgZ2l2ZSBhbnkgZ3VhcmFudGVlIG9mCi0gdGhlIGFib3ZlIHN0YXRlbWVudC4KLSA8L3A+Ci08L2Rpdj48L2Rpdj4KLTwvZGl2PgotPGhyPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPgotPHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPgotPGRsPgotPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSIjaW50cm8iPjEuIEludHJvZHVjdGlvbjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iI3VzaW5nIj4yLiBIb3cgdG8gdXNlIGJ6aXAyPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNuYW1lIj4yLjEuIE5BTUU8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjc3lub3BzaXMiPjIuMi4gU1lOT1BTSVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjZGVzY3JpcHRpb24iPjIuMy4gREVTQ1JJUFRJT048L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjb3B0aW9ucyI+Mi40LiBPUFRJT05TPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI21lbW9yeS1tYW5hZ2VtZW50Ij4yLjUuIE1FTU9SWSBNQU5BR0VNRU5UPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3JlY292ZXJpbmciPjIuNi4gUkVDT1ZFUklORyBEQVRBIEZST00gREFNQUdFRCBGSUxFUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNwZXJmb3JtYW5jZSI+Mi43LiBQRVJGT1JNQU5DRSBOT1RFUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNjYXZlYXRzIj4yLjguIENBVkVBVFM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjYXV0aG9yIj4yLjkuIEFVVEhPUjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iI2xpYnByb2ciPjMuIAotUHJvZ3JhbW1pbmcgd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPgotPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN0b3AtbGV2ZWwiPjMuMS4gVG9wLWxldmVsIHN0cnVjdHVyZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbGwtc3VtbWFyeSI+My4xLjEuIExvdy1sZXZlbCBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2hsLXN1bW1hcnkiPjMuMS4yLiBIaWdoLWxldmVsIHN1bW1hcnk8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjdXRpbC1mbnMtc3VtbWFyeSI+My4xLjMuIFV0aWxpdHkgZnVuY3Rpb25zIHN1bW1hcnk8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjZXJyLWhhbmRsaW5nIj4zLjIuIEVycm9yIGhhbmRsaW5nPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2xvdy1sZXZlbCI+My4zLiBMb3ctbGV2ZWwgaW50ZXJmYWNlPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiemNvbXByZXNzLWluaXQiPjMuMy4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpDb21wcmVzcyI+My4zLjIuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6Q29tcHJlc3MtZW5kIj4zLjMuMy4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpEZWNvbXByZXNzLWluaXQiPjMuMy40LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NJbml0PC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekRlY29tcHJlc3MiPjMuMy41LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6RGVjb21wcmVzcy1lbmQiPjMuMy42LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2hsLWludGVyZmFjZSI+My40LiBIaWdoLWxldmVsIGludGVyZmFjZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkb3BlbiI+My40LjEuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZCI+My40LjIuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkZ2V0dW51c2VkIj4zLjQuMy4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNienJlYWRjbG9zZSI+My40LjQuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiendyaXRlb3BlbiI+My40LjUuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiendyaXRlIj4zLjQuNi4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZWNsb3NlIj4zLjQuNy4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNlbWJlZCI+My40LjguIEhhbmRsaW5nIGVtYmVkZGVkIGNvbXByZXNzZWQgZGF0YSBzdHJlYW1zPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3N0ZC1yZHdyIj4zLjQuOS4gU3RhbmRhcmQgZmlsZS1yZWFkaW5nL3dyaXRpbmcgY29kZTwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN1dGlsLWZucyI+My41LiBVdGlsaXR5IGZ1bmN0aW9uczwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpidWZmdG9idWZmY29tcHJlc3MiPjMuNS4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzczwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpidWZmdG9idWZmZGVjb21wcmVzcyI+My41LjIuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3psaWItY29tcGF0Ij4zLjYuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+emxpYjwvY29kZT4gY29tcGF0aWJpbGl0eSBmdW5jdGlvbnM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjc3RkaW8tZnJlZSI+My43LiBVc2luZyB0aGUgbGlicmFyeSBpbiBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c3RkaW88L2NvZGU+LWZyZWUgZW52aXJvbm1lbnQ8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3N0ZGlvLWJ5ZSI+My43LjEuIEdldHRpbmcgcmlkIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c3RkaW88L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2NyaXRpY2FsLWVycm9yIj4zLjcuMi4gQ3JpdGljYWwgZXJyb3IgaGFuZGxpbmc8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjd2luLWRsbCI+My44LiBNYWtpbmcgYSBXaW5kb3dzIERMTDwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iI21pc2MiPjQuIE1pc2NlbGxhbmVhPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNsaW1pdHMiPjQuMS4gTGltaXRhdGlvbnMgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSBmb3JtYXQ8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjcG9ydC1pc3N1ZXMiPjQuMi4gUG9ydGFiaWxpdHkgaXNzdWVzPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2J1Z3MiPjQuMy4gUmVwb3J0aW5nIGJ1Z3M8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjcGFja2FnZSI+NC40LiBEaWQgeW91IGdldCB0aGUgcmlnaHQgcGFja2FnZT88L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjcmVhZGluZyI+NC41LiBGdXJ0aGVyIFJlYWRpbmc8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08L2RsPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImludHJvIj48L2E+MS6gSW50cm9kdWN0aW9uPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGNvbXByZXNzZXMgZmlsZXMKLXVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2stc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uCi1hbGdvcml0aG0sIGFuZCBIdWZmbWFuIGNvZGluZy4gIENvbXByZXNzaW9uIGlzIGdlbmVyYWxseQotY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwKLUxaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywgYW5kIGFwcHJvYWNoZXMgdGhlIHBlcmZvcm1hbmNlIG9mCi10aGUgUFBNIGZhbWlseSBvZiBzdGF0aXN0aWNhbCBjb21wcmVzc29ycy48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBpcyBidWlsdCBvbiB0b3Agb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+LCBhIGZsZXhpYmxlIGxpYnJhcnkgZm9yCi1oYW5kbGluZyBjb21wcmVzc2VkIGRhdGEgaW4gdGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBmb3JtYXQuICBUaGlzIG1hbnVhbAotZGVzY3JpYmVzIGJvdGggaG93IHRvIHVzZSB0aGUgcHJvZ3JhbSBhbmQgaG93IHRvIHdvcmsgd2l0aCB0aGUKLWxpYnJhcnkgaW50ZXJmYWNlLiAgTW9zdCBvZiB0aGUgbWFudWFsIGlzIGRldm90ZWQgdG8gdGhpcwotbGlicmFyeSwgbm90IHRoZSBwcm9ncmFtLCB3aGljaCBpcyBnb29kIG5ld3MgaWYgeW91ciBpbnRlcmVzdCBpcwotb25seSBpbiB0aGUgcHJvZ3JhbS48L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxhIGhyZWY9IiN1c2luZyI+SG93IHRvIHVzZSBiemlwMjwvYT4gZGVzY3JpYmVzIGhvdyB0byB1c2UKLSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPjsgdGhpcyBpcyB0aGUgb25seSBwYXJ0Ci0geW91IG5lZWQgdG8gcmVhZCBpZiB5b3UganVzdCB3YW50IHRvIGtub3cgaG93IHRvIG9wZXJhdGUgdGhlCi0gcHJvZ3JhbS48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48YSBocmVmPSIjbGlicHJvZyI+UHJvZ3JhbW1pbmcgd2l0aCBsaWJiemlwMjwvYT4gZGVzY3JpYmVzIHRoZQotIHByb2dyYW1taW5nIGludGVyZmFjZXMgaW4gZGV0YWlsLCBhbmQ8L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48YSBocmVmPSIjbWlzYyI+TWlzY2VsbGFuZWE8L2E+IHJlY29yZHMgc29tZQotIG1pc2NlbGxhbmVvdXMgbm90ZXMgd2hpY2ggSSB0aG91Z2h0IG91Z2h0IHRvIGJlIHJlY29yZGVkCi0gc29tZXdoZXJlLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJ1c2luZyI+PC9hPjIuoEhvdyB0byB1c2UgYnppcDI8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj4KLTxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KLTxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNuYW1lIj4yLjEuIE5BTUU8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjc3lub3BzaXMiPjIuMi4gU1lOT1BTSVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjZGVzY3JpcHRpb24iPjIuMy4gREVTQ1JJUFRJT048L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjb3B0aW9ucyI+Mi40LiBPUFRJT05TPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI21lbW9yeS1tYW5hZ2VtZW50Ij4yLjUuIE1FTU9SWSBNQU5BR0VNRU5UPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3JlY292ZXJpbmciPjIuNi4gUkVDT1ZFUklORyBEQVRBIEZST00gREFNQUdFRCBGSUxFUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNwZXJmb3JtYW5jZSI+Mi43LiBQRVJGT1JNQU5DRSBOT1RFUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNjYXZlYXRzIj4yLjguIENBVkVBVFM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjYXV0aG9yIj4yLjkuIEFVVEhPUjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+Ci08L2Rpdj4KLTxwPlRoaXMgY2hhcHRlciBjb250YWlucyBhIGNvcHkgb2YgdGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBtYW4gcGFnZSwgYW5kIG5vdGhpbmcKLWVsc2UuPC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJuYW1lIj48L2E+Mi4xLqBOQU1FPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4sCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gLSBhIGJsb2NrLXNvcnRpbmcgZmlsZQotICBjb21wcmVzc29yLCB2MS4wLjQ8L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6Y2F0PC9jb2RlPiAtCi0gICBkZWNvbXByZXNzZXMgZmlsZXMgdG8gc3Rkb3V0PC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IC0KLSAgIHJlY292ZXJzIGRhdGEgZnJvbSBkYW1hZ2VkIGJ6aXAyIGZpbGVzPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InN5bm9wc2lzIj48L2E+Mi4yLqBTWU5PUFNJUzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IFsKLSAgLWNkZmtxc3R2elZMMTIzNDU2Nzg5IF0gWyBmaWxlbmFtZXMgLi4uICBdPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiBbCi0gIC1ma3ZzVkwgXSBbIGZpbGVuYW1lcyAuLi4gIF08L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6Y2F0PC9jb2RlPiBbIC1zIF0gWwotICBmaWxlbmFtZXMgLi4uICBdPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+Ci0gIGZpbGVuYW1lPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImRlc2NyaXB0aW9uIj48L2E+Mi4zLqBERVNDUklQVElPTjwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wcmVzc2VzIGZpbGVzCi11c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrIHNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbgotYWxnb3JpdGhtLCBhbmQgSHVmZm1hbiBjb2RpbmcuICBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkKLWNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsCi1MWjc3L0xaNzgtYmFzZWQgY29tcHJlc3NvcnMsIGFuZCBhcHByb2FjaGVzIHRoZSBwZXJmb3JtYW5jZSBvZgotdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuPC9wPgotPHA+VGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBkZWxpYmVyYXRlbHkgdmVyeSBzaW1pbGFyIHRvCi10aG9zZSBvZiBHTlUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5nemlwPC9jb2RlPiwgYnV0IHRoZXkgYXJlCi1ub3QgaWRlbnRpY2FsLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGV4cGVjdHMgYSBsaXN0IG9mCi1maWxlIG5hbWVzIHRvIGFjY29tcGFueSB0aGUgY29tbWFuZC1saW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzCi1yZXBsYWNlZCBieSBhIGNvbXByZXNzZWQgdmVyc2lvbiBvZiBpdHNlbGYsIHdpdGggdGhlIG5hbWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3JpZ2luYWxfbmFtZS5iejI8L2NvZGU+LiAgRWFjaAotY29tcHJlc3NlZCBmaWxlIGhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgcGVybWlzc2lvbnMsIGFuZCwKLXdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbCwgc28gdGhhdAotdGhlc2UgcHJvcGVydGllcyBjYW4gYmUgY29ycmVjdGx5IHJlc3RvcmVkIGF0IGRlY29tcHJlc3Npb24gdGltZS4KLUZpbGUgbmFtZSBoYW5kbGluZyBpcyBuYWl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGVyZSBpcyBubwotbWVjaGFuaXNtIGZvciBwcmVzZXJ2aW5nIG9yaWdpbmFsIGZpbGUgbmFtZXMsIHBlcm1pc3Npb25zLAotb3duZXJzaGlwcyBvciBkYXRlcyBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrIHRoZXNlIGNvbmNlcHRzLCBvcgotaGF2ZSBzZXJpb3VzIGZpbGUgbmFtZSBsZW5ndGggcmVzdHJpY3Rpb25zLCBzdWNoIGFzCi1NUy1ET1MuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IHdpbGwgYnkgZGVmYXVsdCBub3QKLW92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5Ci10aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZjwvY29kZT4gZmxhZy48L3A+Ci08cD5JZiBubyBmaWxlIG5hbWVzIGFyZSBzcGVjaWZpZWQsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wcmVzc2VzIGZyb20gc3RhbmRhcmQKLWlucHV0IHRvIHN0YW5kYXJkIG91dHB1dC4gIEluIHRoaXMgY2FzZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHdpbGwgZGVjbGluZSB0byB3cml0ZQotY29tcHJlc3NlZCBvdXRwdXQgdG8gYSB0ZXJtaW5hbCwgYXMgdGhpcyB3b3VsZCBiZSBlbnRpcmVseQotaW5jb21wcmVoZW5zaWJsZSBhbmQgdGhlcmVmb3JlIHBvaW50bGVzcy48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IChvcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMiAtZDwvY29kZT4pIGRlY29tcHJlc3NlcyBhbGwKLXNwZWNpZmllZCBmaWxlcy4gIEZpbGVzIHdoaWNoIHdlcmUgbm90IGNyZWF0ZWQgYnkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHdpbGwgYmUgZGV0ZWN0ZWQgYW5kCi1pZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGF0dGVtcHRzIHRvIGd1ZXNzIHRoZQotZmlsZW5hbWUgZm9yIHRoZSBkZWNvbXByZXNzZWQgZmlsZSBmcm9tIHRoYXQgb2YgdGhlIGNvbXByZXNzZWQKLWZpbGUgYXMgZm9sbG93czo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmlsZW5hbWUuYnoyIDwvY29kZT4KLSAgYmVjb21lcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lPC9jb2RlPjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmlsZW5hbWUuYnogPC9jb2RlPgotICBiZWNvbWVzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmlsZW5hbWU8L2NvZGU+PC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5maWxlbmFtZS50YnoyPC9jb2RlPgotICBiZWNvbWVzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmlsZW5hbWUudGFyPC9jb2RlPjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmlsZW5hbWUudGJ6IDwvY29kZT4KLSAgYmVjb21lcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLnRhcjwvY29kZT48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmFueW90aGVybmFtZSA8L2NvZGU+Ci0gIGJlY29tZXMKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hbnlvdGhlcm5hbWUub3V0PC9jb2RlPjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPklmIHRoZSBmaWxlIGRvZXMgbm90IGVuZCBpbiBvbmUgb2YgdGhlIHJlY29nbmlzZWQgZW5kaW5ncywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi50YnoyPC9jb2RlPiBvcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4udGJ6PC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGNvbXBsYWlucyB0aGF0IGl0IGNhbm5vdAotZ3Vlc3MgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB1c2VzIHRoZSBvcmlnaW5hbCBuYW1lCi13aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Lm91dDwvY29kZT4gYXBwZW5kZWQuPC9wPgotPHA+QXMgd2l0aCBjb21wcmVzc2lvbiwgc3VwcGx5aW5nIG5vIGZpbGVuYW1lcyBjYXVzZXMKLWRlY29tcHJlc3Npb24gZnJvbSBzdGFuZGFyZCBpbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiB3aWxsIGNvcnJlY3RseQotZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdHdvIG9yIG1vcmUKLWNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQotY29ycmVzcG9uZGluZyB1bmNvbXByZXNzZWQgZmlsZXMuICBJbnRlZ3JpdHkgdGVzdGluZwotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LXQ8L2NvZGU+KSBvZiBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZAotZmlsZXMgaXMgYWxzbyBzdXBwb3J0ZWQuPC9wPgotPHA+WW91IGNhbiBhbHNvIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgZmlsZXMgdG8gdGhlIHN0YW5kYXJkCi1vdXRwdXQgYnkgZ2l2aW5nIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1jPC9jb2RlPiBmbGFnLgotTXVsdGlwbGUgZmlsZXMgbWF5IGJlIGNvbXByZXNzZWQgYW5kIGRlY29tcHJlc3NlZCBsaWtlIHRoaXMuICBUaGUKLXJlc3VsdGluZyBvdXRwdXRzIGFyZSBmZWQgc2VxdWVudGlhbGx5IHRvIHN0ZG91dC4gIENvbXByZXNzaW9uIG9mCi1tdWx0aXBsZSBmaWxlcyBpbiB0aGlzIG1hbm5lciBnZW5lcmF0ZXMgYSBzdHJlYW0gY29udGFpbmluZwotbXVsdGlwbGUgY29tcHJlc3NlZCBmaWxlIHJlcHJlc2VudGF0aW9ucy4gIFN1Y2ggYSBzdHJlYW0gY2FuIGJlCi1kZWNvbXByZXNzZWQgY29ycmVjdGx5IG9ubHkgYnkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHZlcnNpb24gMC45LjAgb3IgbGF0ZXIuCi1FYXJsaWVyIHZlcnNpb25zIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHdpbGwKLXN0b3AgYWZ0ZXIgZGVjb21wcmVzc2luZyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpjYXQ8L2NvZGU+IChvcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMiAtZGM8L2NvZGU+KSBkZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsIHJlYWQgYXJndW1lbnRzCi1mcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpJUDI8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWklQPC9jb2RlPiwgaW4gdGhhdCBvcmRlciwgYW5kIHdpbGwKLXByb2Nlc3MgdGhlbSBiZWZvcmUgYW55IGFyZ3VtZW50cyByZWFkIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KLVRoaXMgZ2l2ZXMgYSBjb252ZW5pZW50IHdheSB0byBzdXBwbHkgZGVmYXVsdCBhcmd1bWVudHMuPC9wPgotPHA+Q29tcHJlc3Npb24gaXMgYWx3YXlzIHBlcmZvcm1lZCwgZXZlbiBpZiB0aGUgY29tcHJlc3NlZAotZmlsZSBpcyBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwuICBGaWxlcyBvZiBsZXNzIHRoYW4KLWFib3V0IG9uZSBodW5kcmVkIGJ5dGVzIHRlbmQgdG8gZ2V0IGxhcmdlciwgc2luY2UgdGhlIGNvbXByZXNzaW9uCi1tZWNoYW5pc20gaGFzIGEgY29uc3RhbnQgb3ZlcmhlYWQgaW4gdGhlIHJlZ2lvbiBvZiA1MCBieXRlcy4KLVJhbmRvbSBkYXRhIChpbmNsdWRpbmcgdGhlIG91dHB1dCBvZiBtb3N0IGZpbGUgY29tcHJlc3NvcnMpIGlzCi1jb2RlZCBhdCBhYm91dCA4LjA1IGJpdHMgcGVyIGJ5dGUsIGdpdmluZyBhbiBleHBhbnNpb24gb2YgYXJvdW5kCi0wLjUlLjwvcD4KLTxwPkFzIGEgc2VsZi1jaGVjayBmb3IgeW91ciBwcm90ZWN0aW9uLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdXNlcyAzMi1iaXQgQ1JDcyB0byBtYWtlCi1zdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZSBpcyBpZGVudGljYWwgdG8gdGhlCi1vcmlnaW5hbC4gIFRoaXMgZ3VhcmRzIGFnYWluc3QgY29ycnVwdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLAotYW5kIGFnYWluc3QgdW5kZXRlY3RlZCBidWdzIGluCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiAoaG9wZWZ1bGx5IHZlcnkgdW5saWtlbHkpLgotVGhlIGNoYW5jZXMgb2YgZGF0YSBjb3JydXB0aW9uIGdvaW5nIHVuZGV0ZWN0ZWQgaXMgbWljcm9zY29waWMsCi1hYm91dCBvbmUgY2hhbmNlIGluIGZvdXIgYmlsbGlvbiBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4gIEJlCi1hd2FyZSwgdGhvdWdoLCB0aGF0IHRoZSBjaGVjayBvY2N1cnMgdXBvbiBkZWNvbXByZXNzaW9uLCBzbyBpdAotY2FuIG9ubHkgdGVsbCB5b3UgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcuICBJdCBjYW4ndCBoZWxwIHlvdQotcmVjb3ZlciB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEuICBZb3UgY2FuIHVzZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IHRvIHRyeSB0byByZWNvdmVyCi1kYXRhIGZyb20gZGFtYWdlZCBmaWxlcy48L3A+Ci08cD5SZXR1cm4gdmFsdWVzOiAwIGZvciBhIG5vcm1hbCBleGl0LCAxIGZvciBlbnZpcm9ubWVudGFsCi1wcm9ibGVtcyAoZmlsZSBub3QgZm91bmQsIGludmFsaWQgZmxhZ3MsIEkvTyBlcnJvcnMsIGV0Yy4pLCAyCi10byBpbmRpY2F0ZSBhIGNvcnJ1cHQgY29tcHJlc3NlZCBmaWxlLCAzIGZvciBhbiBpbnRlcm5hbAotY29uc2lzdGVuY3kgZXJyb3IgKGVnLCBidWcpIHdoaWNoIGNhdXNlZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdG8gcGFuaWMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9Im9wdGlvbnMiPjwvYT4yLjQuoE9QVElPTlM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWMgLS1zdGRvdXQ8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Q29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZAotICBvdXRwdXQuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWQgLS1kZWNvbXByZXNzPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPkZvcmNlIGRlY29tcHJlc3Npb24uCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IGFuZAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6Y2F0PC9jb2RlPiBhcmUgcmVhbGx5IHRoZSBzYW1lCi0gIHByb2dyYW0sIGFuZCB0aGUgZGVjaXNpb24gYWJvdXQgd2hhdCBhY3Rpb25zIHRvIHRha2UgaXMgZG9uZSBvbgotICB0aGUgYmFzaXMgb2Ygd2hpY2ggbmFtZSBpcyB1c2VkLiAgVGhpcyBmbGFnIG92ZXJyaWRlcyB0aGF0Ci0gIG1lY2hhbmlzbSwgYW5kIGZvcmNlcyBiemlwMiB0byBkZWNvbXByZXNzLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi16IC0tY29tcHJlc3M8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+VGhlIGNvbXBsZW1lbnQgdG8KLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZDwvY29kZT46IGZvcmNlcyBjb21wcmVzc2lvbiwKLSAgcmVnYXJkbGVzcyBvZiB0aGUgaW52b2thdGlvbiBuYW1lLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi10IC0tdGVzdDwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5DaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQKLSAgZG9uJ3QgZGVjb21wcmVzcyB0aGVtLiAgVGhpcyByZWFsbHkgcGVyZm9ybXMgYSB0cmlhbAotICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1mIC0tZm9yY2U8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+Ci08cD5Gb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgTm9ybWFsbHksCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHdpbGwgbm90IG92ZXJ3cml0ZQotICBleGlzdGluZyBvdXRwdXQgZmlsZXMuICBBbHNvIGZvcmNlcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB0byBicmVhayBoYXJkIGxpbmtzIHRvCi0gIGZpbGVzLCB3aGljaCBpdCBvdGhlcndpc2Ugd291bGRuJ3QgZG8uPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gbm9ybWFsbHkgZGVjbGluZXMKLSAgdG8gZGVjb21wcmVzcyBmaWxlcyB3aGljaCBkb24ndCBoYXZlIHRoZSBjb3JyZWN0IG1hZ2ljIGhlYWRlcgotICBieXRlcy4gSWYgZm9yY2VkICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1mPC9jb2RlPiksCi0gIGhvd2V2ZXIsIGl0IHdpbGwgcGFzcyBzdWNoIGZpbGVzIHRocm91Z2ggdW5tb2RpZmllZC4gVGhpcyBpcwotICBob3cgR05VIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z3ppcDwvY29kZT4gYmVoYXZlcy48L3A+Ci08L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1rIC0ta2VlcDwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5LZWVwIChkb24ndCBkZWxldGUpIGlucHV0IGZpbGVzIGR1cmluZwotICBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1zIC0tc21hbGw8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+Ci08cD5SZWR1Y2UgbWVtb3J5IHVzYWdlLCBmb3IgY29tcHJlc3Npb24sCi0gIGRlY29tcHJlc3Npb24gYW5kIHRlc3RpbmcuICBGaWxlcyBhcmUgZGVjb21wcmVzc2VkIGFuZCB0ZXN0ZWQKLSAgdXNpbmcgYSBtb2RpZmllZCBhbGdvcml0aG0gd2hpY2ggb25seSByZXF1aXJlcyAyLjUgYnl0ZXMgcGVyCi0gIGJsb2NrIGJ5dGUuICBUaGlzIG1lYW5zIGFueSBmaWxlIGNhbiBiZSBkZWNvbXByZXNzZWQgaW4gMjMwMGsKLSAgb2YgbWVtb3J5LCBhbGJlaXQgYXQgYWJvdXQgaGFsZiB0aGUgbm9ybWFsIHNwZWVkLjwvcD4KLTxwPkR1cmluZyBjb21wcmVzc2lvbiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tczwvY29kZT4KLSAgc2VsZWN0cyBhIGJsb2NrIHNpemUgb2YgMjAwaywgd2hpY2ggbGltaXRzIG1lbW9yeSB1c2UgdG8gYXJvdW5kCi0gIHRoZSBzYW1lIGZpZ3VyZSwgYXQgdGhlIGV4cGVuc2Ugb2YgeW91ciBjb21wcmVzc2lvbiByYXRpby4gIEluCi0gIHNob3J0LCBpZiB5b3VyIG1hY2hpbmUgaXMgbG93IG9uIG1lbW9yeSAoOCBtZWdhYnl0ZXMgb3IgbGVzcyksCi0gIHVzZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1zPC9jb2RlPiBmb3IgZXZlcnl0aGluZy4gIFNlZQotICA8YSBocmVmPSIjbWVtb3J5LW1hbmFnZW1lbnQiPk1FTU9SWSBNQU5BR0VNRU5UPC9hPiBiZWxvdy48L3A+Ci08L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1xIC0tcXVpZXQ8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+U3VwcHJlc3Mgbm9uLWVzc2VudGlhbCB3YXJuaW5nIG1lc3NhZ2VzLgotICBNZXNzYWdlcyBwZXJ0YWluaW5nIHRvIEkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cwotICB3aWxsIG5vdCBiZSBzdXBwcmVzc2VkLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi12IC0tdmVyYm9zZTwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5WZXJib3NlIG1vZGUgLS0gc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yCi0gIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBGdXJ0aGVyCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LXY8L2NvZGU+J3MgaW5jcmVhc2UgdGhlIHZlcmJvc2l0eQotICBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaCBpcyBwcmltYXJpbHkgb2YKLSAgaW50ZXJlc3QgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LUwgLS1saWNlbnNlIC1WIC0tdmVyc2lvbjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5EaXNwbGF5IHRoZSBzb2Z0d2FyZSB2ZXJzaW9uLCBsaWNlbnNlIHRlcm1zIGFuZAotICBjb25kaXRpb25zLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0xPC9jb2RlPiAob3IKLSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tZmFzdDwvY29kZT4pIHRvCi0gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tOTwvY29kZT4gKG9yCi0gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tYmVzdDwvY29kZT4pPC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+U2V0IHRoZSBibG9jayBzaXplIHRvIDEwMCBrLCAyMDAgayAuLi4gIDkwMCBrCi0gIHdoZW4gY29tcHJlc3NpbmcuICBIYXMgbm8gZWZmZWN0IHdoZW4gZGVjb21wcmVzc2luZy4gIFNlZSA8YSBocmVmPSIjbWVtb3J5LW1hbmFnZW1lbnQiPk1FTU9SWSBNQU5BR0VNRU5UPC9hPiBiZWxvdy4gIFRoZQotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tZmFzdDwvY29kZT4gYW5kCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS1iZXN0PC9jb2RlPiBhbGlhc2VzIGFyZSBwcmltYXJpbHkKLSAgZm9yIEdOVSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmd6aXA8L2NvZGU+IGNvbXBhdGliaWxpdHkuCi0gIEluIHBhcnRpY3VsYXIsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS1mYXN0PC9jb2RlPiBkb2Vzbid0Ci0gIG1ha2UgdGhpbmdzIHNpZ25pZmljYW50bHkgZmFzdGVyLiAgQW5kCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS1iZXN0PC9jb2RlPiBtZXJlbHkgc2VsZWN0cyB0aGUKLSAgZGVmYXVsdCBiZWhhdmlvdXIuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS08L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+VHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLAotICBldmVuIGlmIHRoZXkgc3RhcnQgd2l0aCBhIGRhc2guICBUaGlzIGlzIHNvIHlvdSBjYW4gaGFuZGxlCi0gIGZpbGVzIHdpdGggbmFtZXMgYmVnaW5uaW5nIHdpdGggYSBkYXNoLCBmb3IgZXhhbXBsZToKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMiAtLQotICAtbXlmaWxlbmFtZTwvY29kZT4uPC9wPjwvZGQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tLXJlcGV0aXRpdmUtZmFzdDwvY29kZT4sIDwvc3Bhbj48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tLXJlcGV0aXRpdmUtYmVzdDwvY29kZT48L3NwYW4+Ci08L2R0PgotPGRkPjxwPlRoZXNlIGZsYWdzIGFyZSByZWR1bmRhbnQgaW4gdmVyc2lvbnMgMC45LjUgYW5kCi0gIGFib3ZlLiAgVGhleSBwcm92aWRlZCBzb21lIGNvYXJzZSBjb250cm9sIG92ZXIgdGhlIGJlaGF2aW91ciBvZgotICB0aGUgc29ydGluZyBhbGdvcml0aG0gaW4gZWFybGllciB2ZXJzaW9ucywgd2hpY2ggd2FzIHNvbWV0aW1lcwotICB1c2VmdWwuICAwLjkuNSBhbmQgYWJvdmUgaGF2ZSBhbiBpbXByb3ZlZCBhbGdvcml0aG0gd2hpY2gKLSAgcmVuZGVycyB0aGVzZSBmbGFncyBpcnJlbGV2YW50LjwvcD48L2RkPgotPC9kbD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJtZW1vcnktbWFuYWdlbWVudCI+PC9hPjIuNS6gTUVNT1JZIE1BTkFHRU1FTlQ8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gY29tcHJlc3NlcyBsYXJnZQotZmlsZXMgaW4gYmxvY2tzLiAgVGhlIGJsb2NrIHNpemUgYWZmZWN0cyBib3RoIHRoZSBjb21wcmVzc2lvbgotcmF0aW8gYWNoaWV2ZWQsIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uCi1hbmQgZGVjb21wcmVzc2lvbi4gIFRoZSBmbGFncyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0xPC9jb2RlPgotdGhyb3VnaCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi05PC9jb2RlPiBzcGVjaWZ5IHRoZSBibG9jawotc2l6ZSB0byBiZSAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlIGRlZmF1bHQpCi1yZXNwZWN0aXZlbHkuICBBdCBkZWNvbXByZXNzaW9uIHRpbWUsIHRoZSBibG9jayBzaXplIHVzZWQgZm9yCi1jb21wcmVzc2lvbiBpcyByZWFkIGZyb20gdGhlIGhlYWRlciBvZiB0aGUgY29tcHJlc3NlZCBmaWxlLCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gdGhlbiBhbGxvY2F0ZXMgaXRzZWxmCi1qdXN0IGVub3VnaCBtZW1vcnkgdG8gZGVjb21wcmVzcyB0aGUgZmlsZS4gIFNpbmNlIGJsb2NrIHNpemVzIGFyZQotc3RvcmVkIGluIGNvbXByZXNzZWQgZmlsZXMsIGl0IGZvbGxvd3MgdGhhdCB0aGUgZmxhZ3MKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LTE8L2NvZGU+IHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi05PC9jb2RlPiBhcmUgaXJyZWxldmFudCB0byBhbmQgc28KLWlnbm9yZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uPC9wPgotPHA+Q29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzLCBpbiBieXRlcywgY2FuIGJlCi1lc3RpbWF0ZWQgYXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkNvbXByZXNzaW9uOiAgIDQwMGsgKyAoIDggeCBibG9jayBzaXplICkKLQotRGVjb21wcmVzc2lvbjogMTAwayArICggNCB4IGJsb2NrIHNpemUgKSwgb3IKLSAgICAgICAgICAgICAgIDEwMGsgKyAoIDIuNSB4IGJsb2NrIHNpemUgKTwvcHJlPgotPHA+TGFyZ2VyIGJsb2NrIHNpemVzIGdpdmUgcmFwaWRseSBkaW1pbmlzaGluZyBtYXJnaW5hbAotcmV0dXJucy4gIE1vc3Qgb2YgdGhlIGNvbXByZXNzaW9uIGNvbWVzIGZyb20gdGhlIGZpcnN0IHR3byBvcgotdGhyZWUgaHVuZHJlZCBrIG9mIGJsb2NrIHNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluIG1pbmQgd2hlbgotdXNpbmcgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gb24gc21hbGwgbWFjaGluZXMuCi1JdCBpcyBhbHNvIGltcG9ydGFudCB0byBhcHByZWNpYXRlIHRoYXQgdGhlIGRlY29tcHJlc3Npb24gbWVtb3J5Ci1yZXF1aXJlbWVudCBpcyBzZXQgYXQgY29tcHJlc3Npb24gdGltZSBieSB0aGUgY2hvaWNlIG9mIGJsb2NrCi1zaXplLjwvcD4KLTxwPkZvciBmaWxlcyBjb21wcmVzc2VkIHdpdGggdGhlIGRlZmF1bHQgOTAwayBibG9jayBzaXplLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiB3aWxsIHJlcXVpcmUgYWJvdXQgMzcwMAota2J5dGVzIHRvIGRlY29tcHJlc3MuICBUbyBzdXBwb3J0IGRlY29tcHJlc3Npb24gb2YgYW55IGZpbGUgb24gYQotNCBtZWdhYnl0ZSBtYWNoaW5lLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IGhhcwotYW4gb3B0aW9uIHRvIGRlY29tcHJlc3MgdXNpbmcgYXBwcm94aW1hdGVseSBoYWxmIHRoaXMgYW1vdW50IG9mCi1tZW1vcnksIGFib3V0IDIzMDAga2J5dGVzLiAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwKLXNvIHlvdSBzaG91bGQgdXNlIHRoaXMgb3B0aW9uIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50Ci1mbGFnIGlzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LXM8L2NvZGU+LjwvcD4KLTxwPkluIGdlbmVyYWwsIHRyeSBhbmQgdXNlIHRoZSBsYXJnZXN0IGJsb2NrIHNpemUgbWVtb3J5Ci1jb25zdHJhaW50cyBhbGxvdywgc2luY2UgdGhhdCBtYXhpbWlzZXMgdGhlIGNvbXByZXNzaW9uIGFjaGlldmVkLgotQ29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQgYXJlIHZpcnR1YWxseSB1bmFmZmVjdGVkIGJ5Ci1ibG9jayBzaXplLjwvcD4KLTxwPkFub3RoZXIgc2lnbmlmaWNhbnQgcG9pbnQgYXBwbGllcyB0byBmaWxlcyB3aGljaCBmaXQgaW4gYQotc2luZ2xlIGJsb2NrIC0tIHRoYXQgbWVhbnMgbW9zdCBmaWxlcyB5b3UnZCBlbmNvdW50ZXIgdXNpbmcgYQotbGFyZ2UgYmxvY2sgc2l6ZS4gIFRoZSBhbW91bnQgb2YgcmVhbCBtZW1vcnkgdG91Y2hlZCBpcwotcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBzaW5jZSB0aGUgZmlsZSBpcyBzbWFsbGVyCi10aGFuIGEgYmxvY2suICBGb3IgZXhhbXBsZSwgY29tcHJlc3NpbmcgYSBmaWxlIDIwLDAwMCBieXRlcyBsb25nCi13aXRoIHRoZSBmbGFnIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LTk8L2NvZGU+IHdpbGwgY2F1c2UgdGhlCi1jb21wcmVzc29yIHRvIGFsbG9jYXRlIGFyb3VuZCA3NjAwayBvZiBtZW1vcnksIGJ1dCBvbmx5IHRvdWNoCi00MDBrICsgMjAwMDAgKiA4ID0gNTYwIGtieXRlcyBvZiBpdC4gIFNpbWlsYXJseSwgdGhlIGRlY29tcHJlc3Nvcgotd2lsbCBhbGxvY2F0ZSAzNzAwayBidXQgb25seSB0b3VjaCAxMDBrICsgMjAwMDAgKiA0ID0gMTgwCi1rYnl0ZXMuPC9wPgotPHA+SGVyZSBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlCi1mb3IgZGlmZmVyZW50IGJsb2NrIHNpemVzLiAgQWxzbyByZWNvcmRlZCBpcyB0aGUgdG90YWwgY29tcHJlc3NlZAotc2l6ZSBmb3IgMTQgZmlsZXMgb2YgdGhlIENhbGdhcnkgVGV4dCBDb21wcmVzc2lvbiBDb3JwdXMKLXRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzIGNvbHVtbiBnaXZlcyBzb21lIGZlZWwgZm9yIGhvdwotY29tcHJlc3Npb24gdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4gIFRoZXNlIGZpZ3VyZXMgdGVuZCB0bwotdW5kZXJzdGF0ZSB0aGUgYWR2YW50YWdlIG9mIGxhcmdlciBibG9jayBzaXplcyBmb3IgbGFyZ2VyIGZpbGVzLAotc2luY2UgdGhlIENvcnB1cyBpcyBkb21pbmF0ZWQgYnkgc21hbGxlciBmaWxlcy48L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAgICAgICBDb21wcmVzcyAgIERlY29tcHJlc3MgICBEZWNvbXByZXNzICAgQ29ycHVzCi1GbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIC1zIHVzYWdlICAgICBTaXplCi0KLSAtMSAgICAgIDEyMDBrICAgICAgIDUwMGsgICAgICAgICAzNTBrICAgICAgOTE0NzA0Ci0gLTIgICAgICAyMDAwayAgICAgICA5MDBrICAgICAgICAgNjAwayAgICAgIDg3NzcwMwotIC0zICAgICAgMjgwMGsgICAgICAxMzAwayAgICAgICAgIDg1MGsgICAgICA4NjAzMzgKLSAtNCAgICAgIDM2MDBrICAgICAgMTcwMGsgICAgICAgIDExMDBrICAgICAgODQ2ODk5Ci0gLTUgICAgICA0NDAwayAgICAgIDIxMDBrICAgICAgICAxMzUwayAgICAgIDg0NTE2MAotIC02ICAgICAgNTIwMGsgICAgICAyNTAwayAgICAgICAgMTYwMGsgICAgICA4Mzg2MjYKLSAtNyAgICAgIDYxMDBrICAgICAgMjkwMGsgICAgICAgIDE4NTBrICAgICAgODM0MDk2Ci0gLTggICAgICA2ODAwayAgICAgIDMzMDBrICAgICAgICAyMTAwayAgICAgIDgyODY0MgotIC05ICAgICAgNzYwMGsgICAgICAzNzAwayAgICAgICAgMjM1MGsgICAgICA4Mjg2NDI8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJyZWNvdmVyaW5nIj48L2E+Mi42LqBSRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGNvbXByZXNzZXMgZmlsZXMgaW4KLWJsb2NrcywgdXN1YWxseSA5MDBrYnl0ZXMgbG9uZy4gIEVhY2ggYmxvY2sgaXMgaGFuZGxlZAotaW5kZXBlbmRlbnRseS4gIElmIGEgbWVkaWEgb3IgdHJhbnNtaXNzaW9uIGVycm9yIGNhdXNlcyBhCi1tdWx0aS1ibG9jayA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+IGZpbGUgdG8gYmVjb21lCi1kYW1hZ2VkLCBpdCBtYXkgYmUgcG9zc2libGUgdG8gcmVjb3ZlciBkYXRhIGZyb20gdGhlIHVuZGFtYWdlZAotYmxvY2tzIGluIHRoZSBmaWxlLjwvcD4KLTxwPlRoZSBjb21wcmVzc2VkIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggYmxvY2sgaXMgZGVsaW1pdGVkIGJ5Ci1hIDQ4LWJpdCBwYXR0ZXJuLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBmaW5kIHRoZSBibG9jawotYm91bmRhcmllcyB3aXRoIHJlYXNvbmFibGUgY2VydGFpbnR5LiAgRWFjaCBibG9jayBhbHNvIGNhcnJpZXMKLWl0cyBvd24gMzItYml0IENSQywgc28gZGFtYWdlZCBibG9ja3MgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbQotdW5kYW1hZ2VkIG9uZXMuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IGlzIGEgc2ltcGxlCi1wcm9ncmFtIHdob3NlIHB1cnBvc2UgaXMgdG8gc2VhcmNoIGZvciBibG9ja3MgaW4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4gZmlsZXMsIGFuZCB3cml0ZSBlYWNoIGJsb2NrCi1vdXQgaW50byBpdHMgb3duIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4gZmlsZS4gIFlvdQotY2FuIHRoZW4gdXNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLXQ8L2NvZGU+IHRvIHRlc3QKLXRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2Ugd2hpY2gKLWFyZSB1bmRhbWFnZWQuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IHRha2VzIGEKLXNpbmdsZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGRhbWFnZWQgZmlsZSwgYW5kIHdyaXRlcyBhCi1udW1iZXIgb2YgZmlsZXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5yZWMwMDAxZmlsZS5iejI8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5yZWMwMDAyZmlsZS5iejI8L2NvZGU+LCBldGMsIGNvbnRhaW5pbmcKLXRoZSBleHRyYWN0ZWQgYmxvY2tzLiAgVGhlIG91dHB1dCBmaWxlbmFtZXMgYXJlIGRlc2lnbmVkIHNvIHRoYXQKLXRoZSB1c2Ugb2Ygd2lsZGNhcmRzIGluIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyAtLSBmb3IgZXhhbXBsZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLWRjIHJlYypmaWxlLmJ6MiAmZ3Q7Ci1yZWNvdmVyZWRfZGF0YTwvY29kZT4gLS0gbGlzdHMgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0Ci1vcmRlci48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAycmVjb3ZlcjwvY29kZT4gc2hvdWxkIGJlIG9mCi1tb3N0IHVzZSBkZWFsaW5nIHdpdGggbGFyZ2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4uYnoyPC9jb2RlPgotZmlsZXMsIGFzIHRoZXNlIHdpbGwgY29udGFpbiBtYW55IGJsb2Nrcy4gIEl0IGlzIGNsZWFybHkgZnV0aWxlCi10byB1c2UgaXQgb24gZGFtYWdlZCBzaW5nbGUtYmxvY2sgZmlsZXMsIHNpbmNlIGEgZGFtYWdlZCBibG9jawotY2Fubm90IGJlIHJlY292ZXJlZC4gIElmIHlvdSB3aXNoIHRvIG1pbmltaXNlIGFueSBwb3RlbnRpYWwgZGF0YQotbG9zcyB0aHJvdWdoIG1lZGlhIG9yIHRyYW5zbWlzc2lvbiBlcnJvcnMsIHlvdSBtaWdodCBjb25zaWRlcgotY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIgYmxvY2sgc2l6ZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0icGVyZm9ybWFuY2UiPjwvYT4yLjcuoFBFUkZPUk1BTkNFIE5PVEVTPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoZSBzb3J0aW5nIHBoYXNlIG9mIGNvbXByZXNzaW9uIGdhdGhlcnMgdG9nZXRoZXIgc2ltaWxhcgotc3RyaW5ncyBpbiB0aGUgZmlsZS4gIEJlY2F1c2Ugb2YgdGhpcywgZmlsZXMgY29udGFpbmluZyB2ZXJ5IGxvbmcKLXJ1bnMgb2YgcmVwZWF0ZWQgc3ltYm9scywgbGlrZSAiYWFiYWFiYWFiYWFiIC4uLiIgIChyZXBlYXRlZAotc2V2ZXJhbCBodW5kcmVkIHRpbWVzKSBtYXkgY29tcHJlc3MgbW9yZSBzbG93bHkgdGhhbiBub3JtYWwuCi1WZXJzaW9ucyAwLjkuNSBhbmQgYWJvdmUgZmFyZSBtdWNoIGJldHRlciB0aGFuIHByZXZpb3VzIHZlcnNpb25zCi1pbiB0aGlzIHJlc3BlY3QuICBUaGUgcmF0aW8gYmV0d2VlbiB3b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UKLWNvbXByZXNzaW9uIHRpbWUgaXMgaW4gdGhlIHJlZ2lvbiBvZiAxMDoxLiAgRm9yIHByZXZpb3VzCi12ZXJzaW9ucywgdGhpcyBmaWd1cmUgd2FzIG1vcmUgbGlrZSAxMDA6MS4gIFlvdSBjYW4gdXNlIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tdnZ2djwvY29kZT4gb3B0aW9uIHRvIG1vbml0b3IgcHJvZ3Jlc3MKLWluIGdyZWF0IGRldGFpbCwgaWYgeW91IHdhbnQuPC9wPgotPHA+RGVjb21wcmVzc2lvbiBzcGVlZCBpcyB1bmFmZmVjdGVkIGJ5IHRoZXNlCi1waGVub21lbmEuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdXN1YWxseSBhbGxvY2F0ZXMKLXNldmVyYWwgbWVnYWJ5dGVzIG9mIG1lbW9yeSB0byBvcGVyYXRlIGluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbAotb3ZlciBpdCBpbiBhIGZhaXJseSByYW5kb20gZmFzaGlvbi4gIFRoaXMgbWVhbnMgdGhhdCBwZXJmb3JtYW5jZSwKLWJvdGggZm9yIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgYnkKLXRoZSBzcGVlZCBhdCB3aGljaCB5b3VyIG1hY2hpbmUgY2FuIHNlcnZpY2UgY2FjaGUgbWlzc2VzLgotQmVjYXVzZSBvZiB0aGlzLCBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvIHJlZHVjZSB0aGUgbWlzcwotcmF0ZSBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkgbGFyZ2UKLXBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gIEkgaW1hZ2luZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gd2lsbCBwZXJmb3JtIGJlc3Qgb24KLW1hY2hpbmVzIHdpdGggdmVyeSBsYXJnZSBjYWNoZXMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImNhdmVhdHMiPjwvYT4yLjguoENBVkVBVFM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+SS9PIGVycm9yIG1lc3NhZ2VzIGFyZSBub3QgYXMgaGVscGZ1bCBhcyB0aGV5IGNvdWxkIGJlLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdHJpZXMgaGFyZCB0byBkZXRlY3QgSS9PCi1lcnJvcnMgYW5kIGV4aXQgY2xlYW5seSwgYnV0IHRoZSBkZXRhaWxzIG9mIHdoYXQgdGhlIHByb2JsZW0gaXMKLXNvbWV0aW1lcyBzZWVtIHJhdGhlciBtaXNsZWFkaW5nLjwvcD4KLTxwPlRoaXMgbWFudWFsIHBhZ2UgcGVydGFpbnMgdG8gdmVyc2lvbiAxLjAuNSBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4uICBDb21wcmVzc2VkIGRhdGEgY3JlYXRlZCBieQotdGhpcyB2ZXJzaW9uIGlzIGVudGlyZWx5IGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZQotcHJldmlvdXMgcHVibGljIHJlbGVhc2VzLCB2ZXJzaW9ucyAwLjFwbDIsIDAuOS4wIGFuZCAwLjkuNSwgMS4wLjAsCi0xLjAuMSwgMS4wLjIgYW5kIDEuMC4zLCBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kCi1hYm92ZSBjYW4gY29ycmVjdGx5IGRlY29tcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuCi0wLjFwbDIgY2Fubm90IGRvIHRoaXM7IGl0IHdpbGwgc3RvcCBhZnRlciBkZWNvbXByZXNzaW5nIGp1c3QgdGhlIGZpcnN0Ci1maWxlIGluIHRoZSBzdHJlYW0uPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IHZlcnNpb25zCi1wcmlvciB0byAxLjAuMiB1c2VkIDMyLWJpdCBpbnRlZ2VycyB0byByZXByZXNlbnQgYml0IHBvc2l0aW9ucyBpbgotY29tcHJlc3NlZCBmaWxlcywgc28gaXQgY291bGQgbm90IGhhbmRsZSBjb21wcmVzc2VkIGZpbGVzIG1vcmUKLXRoYW4gNTEyIG1lZ2FieXRlcyBsb25nLiAgVmVyc2lvbnMgMS4wLjIgYW5kIGFib3ZlIHVzZSA2NC1iaXQgaW50cwotb24gc29tZSBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCB0aGVtIChHTlUgc3VwcG9ydGVkIHRhcmdldHMsIGFuZAotV2luZG93cykuIFRvIGVzdGFibGlzaCB3aGV0aGVyIG9yIG5vdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IHdhcyBidWlsdCB3aXRoIHN1Y2gKLWEgbGltaXRhdGlvbiwgcnVuIGl0IHdpdGhvdXQgYXJndW1lbnRzLiBJbiBhbnkgZXZlbnQgeW91IGNhbgotYnVpbGQgeW91cnNlbGYgYW4gdW5saW1pdGVkIHZlcnNpb24gaWYgeW91IGNhbiByZWNvbXBpbGUgaXQgd2l0aAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5NYXliZVVJbnQ2NDwvY29kZT4gc2V0IHRvIGJlIGFuCi11bnNpZ25lZCA2NC1iaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0iYXV0aG9yIj48L2E+Mi45LqBBVVRIT1I8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+SnVsaWFuIFNld2FyZCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+anNld2FyZEBiemlwLm9yZzwvY29kZT48L3A+Ci08cD5UaGUgaWRlYXMgZW1ib2RpZWQgaW4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGFyZSBkdWUgdG8gKGF0IGxlYXN0KSB0aGUKLWZvbGxvd2luZyBwZW9wbGU6IE1pY2hhZWwgQnVycm93cyBhbmQgRGF2aWQgV2hlZWxlciAoZm9yIHRoZQotYmxvY2sgc29ydGluZyB0cmFuc2Zvcm1hdGlvbiksIERhdmlkIFdoZWVsZXIgKGFnYWluLCBmb3IgdGhlCi1IdWZmbWFuIGNvZGVyKSwgUGV0ZXIgRmVud2ljayAoZm9yIHRoZSBzdHJ1Y3R1cmVkIGNvZGluZyBtb2RlbCBpbgotdGhlIG9yaWdpbmFsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDwvY29kZT4sIGFuZCBtYW55Ci1yZWZpbmVtZW50cyksIGFuZCBBbGlzdGFpciBNb2ZmYXQsIFJhZGZvcmQgTmVhbCBhbmQgSWFuIFdpdHRlbgotKGZvciB0aGUgYXJpdGhtZXRpYyBjb2RlciBpbiB0aGUgb3JpZ2luYWwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDwvY29kZT4pLiAgSSBhbSBtdWNoIGluZGVidGVkIGZvcgotdGhlaXIgaGVscCwgc3VwcG9ydCBhbmQgYWR2aWNlLiAgU2VlIHRoZSBtYW51YWwgaW4gdGhlIHNvdXJjZQotZGlzdHJpYnV0aW9uIGZvciBwb2ludGVycyB0byBzb3VyY2VzIG9mIGRvY3VtZW50YXRpb24uICBDaHJpc3RpYW4KLXZvbiBSb3F1ZXMgZW5jb3VyYWdlZCBtZSB0byBsb29rIGZvciBmYXN0ZXIgc29ydGluZyBhbGdvcml0aG1zLAotc28gYXMgdG8gc3BlZWQgdXAgY29tcHJlc3Npb24uICBCZWxhIEx1YmtpbiBlbmNvdXJhZ2VkIG1lIHRvCi1pbXByb3ZlIHRoZSB3b3JzdC1jYXNlIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlLiAgCi1Eb25uYSBSb2JpbnNvbiBYTUxpc2VkIHRoZSBkb2N1bWVudGF0aW9uLgotTWFueSBwZW9wbGUgc2VudAotcGF0Y2hlcywgaGVscGVkIHdpdGggcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGxlbnQgbWFjaGluZXMsIGdhdmUKLWFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkgaGVscGZ1bC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJsaWJwcm9nIj48L2E+My6gCi1Qcm9ncmFtbWluZyB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+Ci08L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj4KLTxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KLTxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN0b3AtbGV2ZWwiPjMuMS4gVG9wLWxldmVsIHN0cnVjdHVyZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbGwtc3VtbWFyeSI+My4xLjEuIExvdy1sZXZlbCBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2hsLXN1bW1hcnkiPjMuMS4yLiBIaWdoLWxldmVsIHN1bW1hcnk8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjdXRpbC1mbnMtc3VtbWFyeSI+My4xLjMuIFV0aWxpdHkgZnVuY3Rpb25zIHN1bW1hcnk8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjZXJyLWhhbmRsaW5nIj4zLjIuIEVycm9yIGhhbmRsaW5nPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2xvdy1sZXZlbCI+My4zLiBMb3ctbGV2ZWwgaW50ZXJmYWNlPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiemNvbXByZXNzLWluaXQiPjMuMy4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpDb21wcmVzcyI+My4zLjIuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6Q29tcHJlc3MtZW5kIj4zLjMuMy4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpEZWNvbXByZXNzLWluaXQiPjMuMy40LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NJbml0PC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekRlY29tcHJlc3MiPjMuMy41LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6RGVjb21wcmVzcy1lbmQiPjMuMy42LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2hsLWludGVyZmFjZSI+My40LiBIaWdoLWxldmVsIGludGVyZmFjZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkb3BlbiI+My40LjEuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZCI+My40LjIuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkZ2V0dW51c2VkIj4zLjQuMy4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNienJlYWRjbG9zZSI+My40LjQuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiendyaXRlb3BlbiI+My40LjUuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiendyaXRlIj4zLjQuNi4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZWNsb3NlIj4zLjQuNy4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNlbWJlZCI+My40LjguIEhhbmRsaW5nIGVtYmVkZGVkIGNvbXByZXNzZWQgZGF0YSBzdHJlYW1zPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3N0ZC1yZHdyIj4zLjQuOS4gU3RhbmRhcmQgZmlsZS1yZWFkaW5nL3dyaXRpbmcgY29kZTwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN1dGlsLWZucyI+My41LiBVdGlsaXR5IGZ1bmN0aW9uczwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpidWZmdG9idWZmY29tcHJlc3MiPjMuNS4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzczwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpidWZmdG9idWZmZGVjb21wcmVzcyI+My41LjIuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3psaWItY29tcGF0Ij4zLjYuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+emxpYjwvY29kZT4gY29tcGF0aWJpbGl0eSBmdW5jdGlvbnM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjc3RkaW8tZnJlZSI+My43LiBVc2luZyB0aGUgbGlicmFyeSBpbiBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c3RkaW88L2NvZGU+LWZyZWUgZW52aXJvbm1lbnQ8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3N0ZGlvLWJ5ZSI+My43LjEuIEdldHRpbmcgcmlkIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c3RkaW88L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2NyaXRpY2FsLWVycm9yIj4zLjcuMi4gQ3JpdGljYWwgZXJyb3IgaGFuZGxpbmc8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjd2luLWRsbCI+My44LiBNYWtpbmcgYSBXaW5kb3dzIERMTDwvYT48L3NwYW4+PC9kdD4KLTwvZGw+Ci08L2Rpdj4KLTxwPlRoaXMgY2hhcHRlciBkZXNjcmliZXMgdGhlIHByb2dyYW1taW5nIGludGVyZmFjZSB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4uPC9wPgotPHA+Rm9yIGdlbmVyYWwgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiwgcGFydGljdWxhcmx5IGFib3V0Ci1tZW1vcnkgdXNlIGFuZCBwZXJmb3JtYW5jZSBhc3BlY3RzLCB5b3UnZCBiZSB3ZWxsIGFkdmlzZWQgdG8gcmVhZAotPGEgaHJlZj0iI3VzaW5nIj5Ib3cgdG8gdXNlIGJ6aXAyPC9hPiBhcyB3ZWxsLjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0idG9wLWxldmVsIj48L2E+My4xLqBUb3AtbGV2ZWwgc3RydWN0dXJlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+IGlzIGEgZmxleGlibGUKLWxpYnJhcnkgZm9yIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nIGRhdGEgaW4gdGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBkYXRhIGZvcm1hdC4gIEFsdGhvdWdoCi1wYWNrYWdlZCBhcyBhIHNpbmdsZSBlbnRpdHksIGl0IGhlbHBzIHRvIHJlZ2FyZCB0aGUgbGlicmFyeSBhcwotdGhyZWUgc2VwYXJhdGUgcGFydHM6IHRoZSBsb3cgbGV2ZWwgaW50ZXJmYWNlLCBhbmQgdGhlIGhpZ2ggbGV2ZWwKLWludGVyZmFjZSwgYW5kIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMuPC9wPgotPHA+VGhlIHN0cnVjdHVyZSBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4ncyBpbnRlcmZhY2VzIGlzIHNpbWlsYXIKLXRvIHRoYXQgb2YgSmVhbi1sb3VwIEdhaWxseSdzIGFuZCBNYXJrIEFkbGVyJ3MgZXhjZWxsZW50Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWI8L2NvZGU+IGxpYnJhcnkuPC9wPgotPHA+QWxsIGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2xzIGhhdmUgbmFtZXMgYmVnaW5uaW5nCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl88L2NvZGU+LiAgVGhpcyBpcyBuZXcgaW4gdmVyc2lvbgotMS4wLiAgVGhlIGludGVudGlvbiBpcyB0byBtaW5pbWlzZSBwb2xsdXRpb24gb2YgdGhlIG5hbWVzcGFjZXMgb2YKLWxpYnJhcnkgY2xpZW50cy48L3A+Ci08cD5UbyB1c2UgYW55IHBhcnQgb2YgdGhlIGxpYnJhcnksIHlvdSBuZWVkIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPiNpbmNsdWRlICZsdDtiemxpYi5oJmd0OzwvY29kZT4KLWludG8geW91ciBzb3VyY2VzLjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImxsLXN1bW1hcnkiPjwvYT4zLjEuMS6gTG93LWxldmVsIHN1bW1hcnk8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+VGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgc2VydmljZXMgZm9yIGNvbXByZXNzaW5nIGFuZAotZGVjb21wcmVzc2luZyBkYXRhIGluIG1lbW9yeS4gIFRoZXJlJ3Mgbm8gcHJvdmlzaW9uIGZvciBkZWFsaW5nCi13aXRoIGZpbGVzLCBzdHJlYW1zIG9yIGFueSBvdGhlciBJL08gbWVjaGFuaXNtcywganVzdCBzdHJhaWdodAotbWVtb3J5LXRvLW1lbW9yeSB3b3JrLiAgSW4gZmFjdCwgdGhpcyBwYXJ0IG9mIHRoZSBsaWJyYXJ5IGNhbiBiZQotY29tcGlsZWQgd2l0aG91dCBpbmNsdXNpb24gb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c3RkaW8uaDwvY29kZT4sIHdoaWNoIG1heSBiZSBoZWxwZnVsCi1mb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zLjwvcD4KLTxwPlRoZSBsb3ctbGV2ZWwgcGFydCBvZiB0aGUgbGlicmFyeSBoYXMgbm8gZ2xvYmFsIHZhcmlhYmxlcwotYW5kIGlzIHRoZXJlZm9yZSB0aHJlYWQtc2FmZS48L3A+Ci08cD5TaXggcm91dGluZXMgbWFrZSB1cCB0aGUgbG93IGxldmVsIGludGVyZmFjZToKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NFbmQ8L2NvZGU+IGZvcgotY29tcHJlc3Npb24sIGFuZCBhIGNvcnJlc3BvbmRpbmcgdHJpbwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb2RlPiBmb3IKLWRlY29tcHJlc3Npb24uICBUaGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qSW5pdDwvY29kZT4KLWZ1bmN0aW9ucyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gYW5kIGRvCi1vdGhlciBpbml0aWFsaXNhdGlvbnMsIHdoaWxzdCB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KkVuZDwvY29kZT4gZnVuY3Rpb25zIGNsb3NlIGRvd24KLW9wZXJhdGlvbnMgYW5kIHJlbGVhc2UgbWVtb3J5LjwvcD4KLTxwPlRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+LiAgVGhlc2UKLWNvbXByZXNzIGFuZCBkZWNvbXByZXNzIGRhdGEgZnJvbSBhIHVzZXItc3VwcGxpZWQgaW5wdXQgYnVmZmVyIHRvCi1hIHVzZXItc3VwcGxpZWQgb3V0cHV0IGJ1ZmZlci4gIFRoZXNlIGJ1ZmZlcnMgY2FuIGJlIGFueSBzaXplOwotYXJiaXRyYXJ5IHF1YW50aXRpZXMgb2YgZGF0YSBhcmUgaGFuZGxlZCBieSBtYWtpbmcgcmVwZWF0ZWQgY2FsbHMKLXRvIHRoZXNlIGZ1bmN0aW9ucy4gIFRoaXMgaXMgYSBmbGV4aWJsZSBtZWNoYW5pc20gYWxsb3dpbmcgYQotY29uc3VtZXItcHVsbCBzdHlsZSBvZiBhY3Rpdml0eSwgb3IgcHJvZHVjZXItcHVzaCwgb3IgYSBtaXh0dXJlCi1vZiBib3RoLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaGwtc3VtbWFyeSI+PC9hPjMuMS4yLqBIaWdoLWxldmVsIHN1bW1hcnk8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+VGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgc29tZSBoYW5keSB3cmFwcGVycyBhcm91bmQgdGhlCi1sb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIGZhY2lsaXRhdGUgcmVhZGluZyBhbmQgd3JpdGluZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0IGZpbGVzCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4uYnoyPC9jb2RlPiBmaWxlcykuICBUaGUgcm91dGluZXMKLXByb3ZpZGUgaG9va3MgdG8gZmFjaWxpdGF0ZSByZWFkaW5nIGZpbGVzIGluIHdoaWNoIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZGF0YSBzdHJlYW0gaXMgZW1iZWRkZWQKLXdpdGhpbiBzb21lIGxhcmdlci1zY2FsZSBmaWxlIHN0cnVjdHVyZSwgb3Igd2hlcmUgdGhlcmUgYXJlCi1tdWx0aXBsZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBkYXRhIHN0cmVhbXMKLWNvbmNhdGVuYXRlZCBlbmQtdG8tZW5kLjwvcD4KLTxwPkZvciByZWFkaW5nIGZpbGVzLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkT3BlbjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+IGFuZCAKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT4gYXJlCi1zdXBwbGllZC4gIEZvciB3cml0aW5nIGZpbGVzLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZU9wZW48L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlRmluaXNoPC9jb2RlPiBhcmUKLWF2YWlsYWJsZS48L3A+Ci08cD5BcyB3aXRoIHRoZSBsb3ctbGV2ZWwgbGlicmFyeSwgbm8gZ2xvYmFsIHZhcmlhYmxlcyBhcmUgdXNlZAotc28gdGhlIGxpYnJhcnkgaXMgcGVyIHNlIHRocmVhZC1zYWZlLiAgSG93ZXZlciwgaWYgSS9PIGVycm9ycwotb2NjdXIgd2hpbHN0IHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgdW5kZXJseWluZyBjb21wcmVzc2VkIGZpbGVzLAoteW91IG1heSBoYXZlIHRvIGNvbnN1bHQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5lcnJubzwvY29kZT4gdG8KLWRldGVybWluZSB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yLiAgSW4gdGhhdCBjYXNlLCB5b3UnZCBuZWVkIGEgQwotbGlicmFyeSB3aGljaCBjb3JyZWN0bHkgc3VwcG9ydHMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZXJybm88L2NvZGU+IGluIGEgbXVsdGl0aHJlYWRlZAotZW52aXJvbm1lbnQuPC9wPgotPHA+VG8gbWFrZSB0aGUgbGlicmFyeSBhIGxpdHRsZSBzaW1wbGVyIGFuZCBtb3JlIHBvcnRhYmxlLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkT3BlbjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT4gcmVxdWlyZSB5b3UgdG8KLXBhc3MgdGhlbSBmaWxlIGhhbmRsZXMgKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+RklMRSo8L2NvZGU+cykKLXdoaWNoIGhhdmUgcHJldmlvdXNseSBiZWVuIG9wZW5lZCBmb3IgcmVhZGluZyBvciB3cml0aW5nCi1yZXNwZWN0aXZlbHkuICBUaGF0IGF2b2lkcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGgKLWZpbGUgb3BlcmF0aW9ucyBhbmQgZmlsZSBhdHRyaWJ1dGVzLCB3aGlsc3Qgbm90IGJlaW5nIG11Y2ggb2YgYW4KLWltcG9zaXRpb24gb24gdGhlIHByb2dyYW1tZXIuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJ1dGlsLWZucy1zdW1tYXJ5Ij48L2E+My4xLjMuoFV0aWxpdHkgZnVuY3Rpb25zIHN1bW1hcnk8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+Rm9yIHZlcnkgc2ltcGxlIG5lZWRzLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29kZT4gYXJlCi1wcm92aWRlZC4gIFRoZXNlIGNvbXByZXNzIGRhdGEgaW4gbWVtb3J5IGZyb20gb25lIGJ1ZmZlciB0bwotYW5vdGhlciBidWZmZXIgaW4gYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gIFlvdSBzaG91bGQgYXNzZXNzCi13aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBmdWxmaWxsIHlvdXIgbWVtb3J5LXRvLW1lbW9yeQotY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMgYmVmb3JlIGludmVzdGluZyBlZmZvcnQgaW4KLXVuZGVyc3RhbmRpbmcgdGhlIG1vcmUgZ2VuZXJhbCBidXQgbW9yZSBjb21wbGV4IGxvdy1sZXZlbAotaW50ZXJmYWNlLjwvcD4KLTxwPllvc2hpb2thIFRzdW5lbwotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dHN1bmVvQHJyLmlpajR1Lm9yLmpwPC9jb2RlPikgaGFzCi1jb250cmlidXRlZCBzb21lIGZ1bmN0aW9ucyB0byBnaXZlIGJldHRlcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij56bGliPC9jb2RlPiBjb21wYXRpYmlsaXR5LiAgVGhlc2UKLWZ1bmN0aW9ucyBhcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpvcGVuPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6cmVhZDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iendyaXRlPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Zmx1c2g8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpjbG9zZTwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemVycm9yPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6bGliVmVyc2lvbjwvY29kZT4uICBZb3UgbWF5IGZpbmQKLXRoZXNlIGZ1bmN0aW9ucyBtb3JlIGNvbnZlbmllbnQgZm9yIHNpbXBsZSBmaWxlIHJlYWRpbmcgYW5kCi13cml0aW5nLCB0aGFuIHRob3NlIGluIHRoZSBoaWdoLWxldmVsIGludGVyZmFjZS4gIFRoZXNlIGZ1bmN0aW9ucwotYXJlIG5vdCAoeWV0KSBvZmZpY2lhbGx5IHBhcnQgb2YgdGhlIGxpYnJhcnksIGFuZCBhcmUgbWluaW1hbGx5Ci1kb2N1bWVudGVkIGhlcmUuICBJZiB0aGV5IGJyZWFrLCB5b3UgZ2V0IHRvIGtlZXAgYWxsIHRoZSBwaWVjZXMuCi1JIGhvcGUgdG8gZG9jdW1lbnQgdGhlbSBwcm9wZXJseSB3aGVuIHRpbWUgcGVybWl0cy48L3A+Ci08cD5Zb3NoaW9rYSBhbHNvIGNvbnRyaWJ1dGVkIG1vZGlmaWNhdGlvbnMgdG8gYWxsb3cgdGhlCi1saWJyYXJ5IHRvIGJlIGJ1aWx0IGFzIGEgV2luZG93cyBETEwuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0iZXJyLWhhbmRsaW5nIj48L2E+My4yLqBFcnJvciBoYW5kbGluZzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5UaGUgbGlicmFyeSBpcyBkZXNpZ25lZCB0byByZWNvdmVyIGNsZWFubHkgaW4gYWxsCi1zaXR1YXRpb25zLCBpbmNsdWRpbmcgdGhlIHdvcnN0LWNhc2Ugc2l0dWF0aW9uIG9mIGRlY29tcHJlc3NpbmcKLXJhbmRvbSBkYXRhLiAgSSdtIG5vdCAxMDAlIHN1cmUgdGhhdCBpdCBjYW4gYWx3YXlzIGRvIHRoaXMsIHNvCi15b3UgbWlnaHQgd2FudCB0byBhZGQgYSBzaWduYWwgaGFuZGxlciB0byBjYXRjaCBzZWdtZW50YXRpb24KLXZpb2xhdGlvbnMgZHVyaW5nIGRlY29tcHJlc3Npb24gaWYgeW91IGFyZSBmZWVsaW5nIGVzcGVjaWFsbHkKLXBhcmFub2lkLiAgSSB3b3VsZCBiZSBpbnRlcmVzdGVkIGluIGhlYXJpbmcgbW9yZSBhYm91dCB0aGUKLXJvYnVzdG5lc3Mgb2YgdGhlIGxpYnJhcnkgdG8gY29ycnVwdGVkIGNvbXByZXNzZWQgZGF0YS48L3A+Ci08cD5WZXJzaW9uIDEuMC4zIG1vcmUgcm9idXN0IGluIHRoaXMgcmVzcGVjdCB0aGFuIGFueQotcHJldmlvdXMgdmVyc2lvbi4gIEludmVzdGlnYXRpb25zIHdpdGggVmFsZ3JpbmQgKGEgdG9vbCBmb3IgZGV0ZWN0aW5nCi1wcm9ibGVtcyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50KSBpbmRpY2F0ZQotdGhhdCwgYXQgbGVhc3QgZm9yIHRoZSBmZXcgZmlsZXMgSSB0ZXN0ZWQsIGFsbCBzaW5nbGUtYml0IGVycm9ycwotaW4gdGhlIGRlY29tcHJlc3NlZCBkYXRhIGFyZSBjYXVnaHQgcHJvcGVybHksIHdpdGggbm8KLXNlZ21lbnRhdGlvbiBmYXVsdHMsIG5vIHVzZXMgb2YgdW5pbml0aWFsaXNlZCBkYXRhLCBubyBvdXQgb2YKLXJhbmdlIHJlYWRzIG9yIHdyaXRlcywgYW5kIG5vIGluZmluaXRlIGxvb3BpbmcgaW4gdGhlIGRlY29tcHJlc3Nvci4KLVNvIGl0J3MgY2VydGFpbmx5IHByZXR0eSByb2J1c3QsIGFsdGhvdWdoCi1JIHdvdWxkbid0IGNsYWltIGl0IHRvIGJlIHRvdGFsbHkgYm9tYnByb29mLjwvcD4KLTxwPlRoZSBmaWxlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWIuaDwvY29kZT4gY29udGFpbnMKLWFsbCBkZWZpbml0aW9ucyBuZWVkZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiAgSW4gcGFydGljdWxhciwgeW91Ci1zaG91bGQgZGVmaW5pdGVseSBub3QgaW5jbHVkZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemxpYl9wcml2YXRlLmg8L2NvZGU+LjwvcD4KLTxwPkluIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWIuaDwvY29kZT4sIHRoZSB2YXJpb3VzCi1yZXR1cm4gdmFsdWVzIGFyZSBkZWZpbmVkLiAgVGhlIGZvbGxvd2luZyBsaXN0IGlzIG5vdCBpbnRlbmRlZCBhcwotYW4gZXhoYXVzdGl2ZSBkZXNjcmlwdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCBhIGdpdmVuCi12YWx1ZSBtYXkgYmUgcmV0dXJuZWQgLS0gdGhvc2UgZGVzY3JpcHRpb25zIGFyZSBnaXZlbiBsYXRlci4KLVJhdGhlciwgaXQgaXMgaW50ZW5kZWQgdG8gY29udmV5IHRoZSByb3VnaCBtZWFuaW5nIG9mIGVhY2ggcmV0dXJuCi12YWx1ZS4gIFRoZSBmaXJzdCBmaXZlIGFjdGlvbnMgYXJlIG5vcm1hbCBhbmQgbm90IGludGVuZGVkIHRvCi1kZW5vdGUgYW4gZXJyb3Igc2l0dWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09LPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlRoZSByZXF1ZXN0ZWQgYWN0aW9uIHdhcyBjb21wbGV0ZWQKLSAgIHN1Y2Nlc3NmdWxseS48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9SVU5fT0ssIEJaX0ZMVVNIX09LLAotICAgIEJaX0ZJTklTSF9PSzwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5JbiAKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LCB0aGUgcmVxdWVzdGVkCi0gICBmbHVzaC9maW5pc2gvbm90aGluZy1zcGVjaWFsIGFjdGlvbiB3YXMgY29tcGxldGVkCi0gICBzdWNjZXNzZnVsbHkuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5Db21wcmVzc2lvbiBvZiBkYXRhIHdhcyBjb21wbGV0ZWQsIG9yIHRoZQotICAgbG9naWNhbCBzdHJlYW0gZW5kIHdhcyBkZXRlY3RlZCBkdXJpbmcKLSAgIGRlY29tcHJlc3Npb24uPC9wPjwvZGQ+Ci08L2RsPjwvZGl2PgotPHA+VGhlIGZvbGxvd2luZyByZXR1cm4gdmFsdWVzIGluZGljYXRlIGFuIGVycm9yIG9mIHNvbWUKLWtpbmQuPC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfQ09ORklHX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPkluZGljYXRlcyB0aGF0IHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGltcHJvcGVybHkKLSAgIGNvbXBpbGVkIG9uIHlvdXIgcGxhdGZvcm0gLS0gYSBtYWpvciBjb25maWd1cmF0aW9uIGVycm9yLgotICAgU3BlY2lmaWNhbGx5LCBpdCBtZWFucyB0aGF0Ci0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNpemVvZihjaGFyKTwvY29kZT4sCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNpemVvZihzaG9ydCk8L2NvZGU+IGFuZAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zaXplb2YoaW50KTwvY29kZT4gYXJlIG5vdCAxLCAyIGFuZAotICAgNCByZXNwZWN0aXZlbHksIGFzIHRoZXkgc2hvdWxkIGJlLiAgTm90ZSB0aGF0IHRoZSBsaWJyYXJ5Ci0gICBzaG91bGQgc3RpbGwgd29yayBwcm9wZXJseSBvbiA2NC1iaXQgcGxhdGZvcm1zIHdoaWNoIGZvbGxvdwotICAgdGhlIExQNjQgcHJvZ3JhbW1pbmcgbW9kZWwgLS0gdGhhdCBpcywgd2hlcmUKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c2l6ZW9mKGxvbmcpPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c2l6ZW9mKHZvaWQqKTwvY29kZT4gYXJlIDguICBVbmRlcgotICAgTFA2NCwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zaXplb2YoaW50KTwvY29kZT4gaXMgc3RpbGwgNCwKLSAgIHNvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+LCB3aGljaCBkb2Vzbid0Ci0gICB1c2UgdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bG9uZzwvY29kZT4gdHlwZSwgaXMKLSAgIE9LLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPldoZW4gdXNpbmcgdGhlIGxpYnJhcnksIGl0IGlzIGltcG9ydGFudCB0byBjYWxsCi0gICB0aGUgZnVuY3Rpb25zIGluIHRoZSBjb3JyZWN0IHNlcXVlbmNlIGFuZCB3aXRoIGRhdGEgc3RydWN0dXJlcwotICAgKGJ1ZmZlcnMgZXRjKSBpbiB0aGUgY29ycmVjdCBzdGF0ZXMuCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiBjaGVja3MgYXMgbXVjaCBhcyBpdAotICAgY2FuIHRvIGVuc3VyZSB0aGlzIGlzIGhhcHBlbmluZywgYW5kIHJldHVybnMKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU0VRVUVOQ0VfRVJST1I8L2NvZGU+IGlmIG5vdC4KLSAgIENvZGUgd2hpY2ggY29tcGxpZXMgcHJlY2lzZWx5IHdpdGggdGhlIGZ1bmN0aW9uIHNlbWFudGljcywgYXMKLSAgIGRldGFpbGVkIGJlbG93LCBzaG91bGQgbmV2ZXIgcmVjZWl2ZSB0aGlzIHZhbHVlOyBzdWNoIGFuIGV2ZW50Ci0gICBkZW5vdGVzIGJ1Z2d5IGNvZGUgd2hpY2ggeW91IHNob3VsZAotICAgaW52ZXN0aWdhdGUuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUEFSQU1fRVJST1I8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+UmV0dXJuZWQgd2hlbiBhIHBhcmFtZXRlciB0byBhIGZ1bmN0aW9uIGNhbGwgaXMKLSAgIG91dCBvZiByYW5nZSBvciBvdGhlcndpc2UgbWFuaWZlc3RseSBpbmNvcnJlY3QuICBBcyB3aXRoCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPiwgdGhpcwotICAgZGVub3RlcyBhIGJ1ZyBpbiB0aGUgY2xpZW50IGNvZGUuICBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbgotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9QQVJBTV9FUlJPUjwvY29kZT4gYW5kCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPiBpcyBhIGJpdAotICAgaGF6eSwgYnV0IHN0aWxsIHdvcnRoIG1ha2luZy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NRU1fRVJST1I8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+UmV0dXJuZWQgd2hlbiBhIHJlcXVlc3QgdG8gYWxsb2NhdGUgbWVtb3J5Ci0gICBmYWlsZWQuICBOb3RlIHRoYXQgdGhlIHF1YW50aXR5IG9mIG1lbW9yeSBuZWVkZWQgdG8gZGVjb21wcmVzcwotICAgYSBzdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgdW50aWwgdGhlIHN0cmVhbSdzIGhlYWRlciBoYXMKLSAgIGJlZW4gcmVhZC4gIFNvCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IGFuZAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiBtYXkgcmV0dXJuCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4gZXZlbiB0aG91Z2ggc29tZQotICAgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMgYmVlbiByZWFkLiAgVGhlIHNhbWUgaXMgbm90IHRydWUKLSAgIGZvciBjb21wcmVzc2lvbjsgb25jZQotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+IG9yCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT4gaGF2ZQotICAgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCwKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUVNX0VSUk9SPC9jb2RlPiBjYW5ub3QKLSAgIG9jY3VyLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0RBVEFfRVJST1I8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+UmV0dXJuZWQgd2hlbiBhIGRhdGEgaW50ZWdyaXR5IGVycm9yIGlzCi0gICBkZXRlY3RlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi4gIE1vc3QgaW1wb3J0YW50bHksIHRoaXMgbWVhbnMKLSAgIHdoZW4gc3RvcmVkIGFuZCBjb21wdXRlZCBDUkNzIGZvciB0aGUgZGF0YSBkbyBub3QgbWF0Y2guICBUaGlzCi0gICB2YWx1ZSBpcyBhbHNvIHJldHVybmVkIHVwb24gZGV0ZWN0aW9uIG9mIGFueSBvdGhlciBhbm9tYWx5IGluCi0gICB0aGUgY29tcHJlc3NlZCBkYXRhLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0RBVEFfRVJST1JfTUFHSUM8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+QXMgYSBzcGVjaWFsIGNhc2Ugb2YKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfREFUQV9FUlJPUjwvY29kZT4sIGl0IGlzCi0gICBzb21ldGltZXMgdXNlZnVsIHRvIGtub3cgd2hlbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0gZG9lcyBub3QKLSAgIHN0YXJ0IHdpdGggdGhlIGNvcnJlY3QgbWFnaWMgYnl0ZXMgKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+J0InICdaJwotICAgJ2gnPC9jb2RlPikuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfSU9fRVJST1I8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+UmV0dXJuZWQgYnkKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gYW5kCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlPC9jb2RlPiB3aGVuIHRoZXJlIGlzIGFuCi0gICBlcnJvciByZWFkaW5nIG9yIHdyaXRpbmcgaW4gdGhlIGNvbXByZXNzZWQgZmlsZSwgYW5kIGJ5Ci0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPiBmb3IgYXR0ZW1wdHMKLSAgIHRvIHVzZSBhIGZpbGUgZm9yIHdoaWNoIHRoZSBlcnJvciBpbmRpY2F0b3IgKHZpeiwKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmVycm9yKGYpPC9jb2RlPikgaXMgc2V0LiAgT24KLSAgIHJlY2VpcHQgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9JT19FUlJPUjwvY29kZT4sIHRoZQotICAgY2FsbGVyIHNob3VsZCBjb25zdWx0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZXJybm88L2NvZGU+Ci0gICBhbmQvb3IgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5wZXJyb3I8L2NvZGU+IHRvIGFjcXVpcmUKLSAgIG9wZXJhdGluZy1zeXN0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gICBwcm9ibGVtLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1VORVhQRUNURURfRU9GPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIGJ5Ci0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+IHdoZW4gdGhlCi0gICBjb21wcmVzc2VkIGZpbGUgZmluaXNoZXMgYmVmb3JlIHRoZSBsb2dpY2FsIGVuZCBvZiBzdHJlYW0gaXMKLSAgIGRldGVjdGVkLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09VVEJVRkZfRlVMTDwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5SZXR1cm5lZCBieQotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+IGFuZAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29kZT4gdG8KLSAgIGluZGljYXRlIHRoYXQgdGhlIG91dHB1dCBkYXRhIHdpbGwgbm90IGZpdCBpbnRvIHRoZSBvdXRwdXQKLSAgIGJ1ZmZlciBwcm92aWRlZC48L3A+PC9kZD4KLTwvZGw+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ibG93LWxldmVsIj48L2E+My4zLqBMb3ctbGV2ZWwgaW50ZXJmYWNlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6Y29tcHJlc3MtaW5pdCI+PC9hPjMuMy4xLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciAqbmV4dF9pbjsKLSAgdW5zaWduZWQgaW50IGF2YWlsX2luOwotICB1bnNpZ25lZCBpbnQgdG90YWxfaW5fbG8zMjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX2luX2hpMzI7Ci0KLSAgY2hhciAqbmV4dF9vdXQ7Ci0gIHVuc2lnbmVkIGludCBhdmFpbF9vdXQ7Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9vdXRfbG8zMjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX291dF9oaTMyOwotCi0gIHZvaWQgKnN0YXRlOwotCi0gIHZvaWQgKigqYnphbGxvYykodm9pZCAqLGludCxpbnQpOwotICB2b2lkICgqYnpmcmVlKSh2b2lkICosdm9pZCAqKTsKLSAgdm9pZCAqb3BhcXVlOwotfSBiel9zdHJlYW07Ci0KLWludCBCWjJfYnpDb21wcmVzc0luaXQgKCBiel9zdHJlYW0gKnN0cm0sIAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUxMDBrLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3b3JrRmFjdG9yICk7PC9wcmU+Ci08cD5QcmVwYXJlcyBmb3IgY29tcHJlc3Npb24uICBUaGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ynpfc3RyZWFtPC9jb2RlPiBzdHJ1Y3R1cmUgaG9sZHMgYWxsCi1kYXRhIHBlcnRhaW5pbmcgdG8gdGhlIGNvbXByZXNzaW9uIGFjdGl2aXR5LiAgQQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iel9zdHJlYW08L2NvZGU+IHN0cnVjdHVyZSBzaG91bGQgYmUKLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGlzZWQgcHJpb3IgdG8gdGhlIGNhbGwuICBUaGUgZmllbGRzIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6X3N0cmVhbTwvY29kZT4gY29tcHJpc2UgdGhlIGVudGlyZXR5Ci1vZiB0aGUgdXNlci12aXNpYmxlIGRhdGEuICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0YXRlPC9jb2RlPgotaXMgYSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCBmb3IKLWNvbXByZXNzaW9uLjwvcD4KLTxwPkN1c3RvbSBtZW1vcnkgYWxsb2NhdG9ycyBhcmUgc3VwcG9ydGVkLCB2aWEgZmllbGRzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6YWxsb2M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemZyZWU8L2NvZGU+LCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3BhcXVlPC9jb2RlPi4gIFRoZSB2YWx1ZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5vcGFxdWU8L2NvZGU+IGlzIHBhc3NlZCB0byBhcyB0aGUgZmlyc3QKLWFyZ3VtZW50IHRvIGFsbCBjYWxscyB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6YWxsb2M8L2NvZGU+Ci1hbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemZyZWU8L2NvZGU+LCBidXQgaXMgb3RoZXJ3aXNlCi1pZ25vcmVkIGJ5IHRoZSBsaWJyYXJ5LiAgVGhlIGNhbGwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jICgKLW9wYXF1ZSwgbiwgbSApPC9jb2RlPiBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBwb2ludGVyCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnA8L2NvZGU+IHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+biAqCi1tPC9jb2RlPiBieXRlcyBvZiBtZW1vcnksIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZnJlZSAoCi1vcGFxdWUsIHAgKTwvY29kZT4gc2hvdWxkIGZyZWUgdGhhdCBtZW1vcnkuPC9wPgotPHA+SWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIGEgY3VzdG9tIG1lbW9yeSBhbGxvY2F0b3IsIHNldAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpmcmVlPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3BhcXVlPC9jb2RlPiB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5OVUxMPC9jb2RlPiwgYW5kIHRoZSBsaWJyYXJ5IHdpbGwgdGhlbgotdXNlIHRoZSBzdGFuZGFyZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm1hbGxvYzwvY29kZT4gLwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mcmVlPC9jb2RlPiByb3V0aW5lcy48L3A+Ci08cD5CZWZvcmUgY2FsbGluZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+LCBmaWVsZHMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnphbGxvYzwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZnJlZTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9wYXF1ZTwvY29kZT4gc2hvdWxkIGJlIGZpbGxlZAotYXBwcm9wcmlhdGVseSwgYXMganVzdCBkZXNjcmliZWQuICBVcG9uIHJldHVybiwgdGhlIGludGVybmFsCi1zdGF0ZSB3aWxsIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkLCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfaW5fbG8zMjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX2luX2hpMzI8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9vdXRfbG8zMjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX291dF9oaTMyPC9jb2RlPiB3aWxsIGhhdmUgYmVlbgotc2V0IHRvIHplcm8uICBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgbGlicmFyeSB0byBpbmZvcm0KLXRoZSBjYWxsZXIgb2YgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHBhc3NlZCBpbnRvIGFuZCBvdXQgb2YgdGhlCi1saWJyYXJ5LCByZXNwZWN0aXZlbHkuICBZb3Ugc2hvdWxkIG5vdCB0cnkgdG8gY2hhbmdlIHRoZW0uICBBcyBvZgotdmVyc2lvbiAxLjAsIDY0LWJpdCBjb3VudHMgYXJlIG1haW50YWluZWQsIGV2ZW4gb24gMzItYml0Ci1wbGF0Zm9ybXMsIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPl9oaTMyPC9jb2RlPgotZmllbGRzIHRvIHN0b3JlIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBjb3VudC4gIFNvLCBmb3IgZXhhbXBsZSwKLXRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbiBpcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPih0b3RhbF9pbl9oaTMyCi0mbHQ7Jmx0OyAzMikgKyB0b3RhbF9pbl9sbzMyPC9jb2RlPi48L3A+Ci08cD5QYXJhbWV0ZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5ibG9ja1NpemUxMDBrPC9jb2RlPgotc3BlY2lmaWVzIHRoZSBibG9jayBzaXplIHRvIGJlIHVzZWQgZm9yIGNvbXByZXNzaW9uLiAgSXQgc2hvdWxkCi1iZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgOSBpbmNsdXNpdmUsIGFuZCB0aGUgYWN0dWFsIGJsb2NrIHNpemUKLXVzZWQgaXMgMTAwMDAwIHggdGhpcyBmaWd1cmUuICA5IGdpdmVzIHRoZSBiZXN0IGNvbXByZXNzaW9uIGJ1dAotdGFrZXMgbW9zdCBtZW1vcnkuPC9wPgotPHA+UGFyYW1ldGVyIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dmVyYm9zaXR5PC9jb2RlPiBzaG91bGQKLWJlIHNldCB0byBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDQgaW5jbHVzaXZlLiAgMCBpcyBzaWxlbnQsIGFuZAotZ3JlYXRlciBudW1iZXJzIGdpdmUgaW5jcmVhc2luZ2x5IHZlcmJvc2UgbW9uaXRvcmluZy9kZWJ1Z2dpbmcKLW91dHB1dC4gIElmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGgKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LURCWl9OT19TVERJTzwvY29kZT4sIG5vIHN1Y2ggb3V0cHV0Ci13aWxsIGFwcGVhciBmb3IgYW55IHZlcmJvc2l0eSBzZXR0aW5nLjwvcD4KLTxwPlBhcmFtZXRlciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPndvcmtGYWN0b3I8L2NvZGU+Ci1jb250cm9scyBob3cgdGhlIGNvbXByZXNzaW9uIHBoYXNlIGJlaGF2ZXMgd2hlbiBwcmVzZW50ZWQgd2l0aAotd29yc3QgY2FzZSwgaGlnaGx5IHJlcGV0aXRpdmUsIGlucHV0IGRhdGEuICBJZiBjb21wcmVzc2lvbiBydW5zCi1pbnRvIGRpZmZpY3VsdGllcyBjYXVzZWQgYnkgcmVwZXRpdGl2ZSBkYXRhLCB0aGUgbGlicmFyeSBzd2l0Y2hlcwotZnJvbSB0aGUgc3RhbmRhcmQgc29ydGluZyBhbGdvcml0aG0gdG8gYSBmYWxsYmFjayBhbGdvcml0aG0uICBUaGUKLWZhbGxiYWNrIGlzIHNsb3dlciB0aGFuIHRoZSBzdGFuZGFyZCBhbGdvcml0aG0gYnkgcGVyaGFwcyBhCi1mYWN0b3Igb2YgdGhyZWUsIGJ1dCBhbHdheXMgYmVoYXZlcyByZWFzb25hYmx5LCBubyBtYXR0ZXIgaG93IGJhZAotdGhlIGlucHV0LjwvcD4KLTxwPkxvd2VyIHZhbHVlcyBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPndvcmtGYWN0b3I8L2NvZGU+Ci1yZWR1Y2UgdGhlIGFtb3VudCBvZiBlZmZvcnQgdGhlIHN0YW5kYXJkIGFsZ29yaXRobSB3aWxsIGV4cGVuZAotYmVmb3JlIHJlc29ydGluZyB0byB0aGUgZmFsbGJhY2suICBZb3Ugc2hvdWxkIHNldCB0aGlzIHBhcmFtZXRlcgotY2FyZWZ1bGx5OyB0b28gbG93LCBhbmQgbWFueSBpbnB1dHMgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZQotZmFsbGJhY2sgYWxnb3JpdGhtIGFuZCBzbyBjb21wcmVzcyByYXRoZXIgc2xvd2x5LCB0b28gaGlnaCwgYW5kCi15b3VyIGF2ZXJhZ2UtdG8td29yc3QgY2FzZSBjb21wcmVzc2lvbiB0aW1lcyBjYW4gYmVjb21lIHZlcnkKLWxhcmdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgMzAgZ2l2ZXMgcmVhc29uYWJsZSBiZWhhdmlvdXIgb3ZlciBhCi13aWRlIHJhbmdlIG9mIGNpcmN1bXN0YW5jZXMuPC9wPgotPHA+QWxsb3dhYmxlIHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gMjUwIGluY2x1c2l2ZS4gIDAgaXMgYQotc3BlY2lhbCBjYXNlLCBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDMwLjwvcD4KLTxwPk5vdGUgdGhhdCB0aGUgY29tcHJlc3NlZCBvdXRwdXQgZ2VuZXJhdGVkIGlzIHRoZSBzYW1lCi1yZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBmYWxsYmFjayBhbGdvcml0aG0gaXMKLXVzZWQuPC9wPgotPHA+QmUgYXdhcmUgYWxzbyB0aGF0IHRoaXMgcGFyYW1ldGVyIG1heSBkaXNhcHBlYXIgZW50aXJlbHkgaW4KLWZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS4gIEluIHByaW5jaXBsZSBpdCBzaG91bGQgYmUKLXBvc3NpYmxlIHRvIGRldmlzZSBhIGdvb2Qgd2F5IHRvIGF1dG9tYXRpY2FsbHkgY2hvb3NlIHdoaWNoCi1hbGdvcml0aG0gdG8gdXNlLiAgU3VjaCBhIG1lY2hhbmlzbSB3b3VsZCByZW5kZXIgdGhlIHBhcmFtZXRlcgotb2Jzb2xldGUuPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMIAotICBvciBibG9ja1NpemUgJmx0OyAxIG9yIGJsb2NrU2l6ZSAmZ3Q7IDkKLSAgb3IgdmVyYm9zaXR5ICZsdDsgMCBvciB2ZXJib3NpdHkgJmd0OyA0Ci0gIG9yIHdvcmtGYWN0b3IgJmx0OyAwIG9yIHdvcmtGYWN0b3IgJmd0OyAyNTAKLUJaX01FTV9FUlJPUiAKLSAgaWYgbm90IGVub3VnaCBtZW1vcnkgaXMgYXZhaWxhYmxlCi1CWl9PSyAKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWjJfYnpDb21wcmVzcwotICBpZiBCWl9PSyBpcyByZXR1cm5lZAotICBubyBzcGVjaWZpYyBhY3Rpb24gbmVlZGVkIGluIGNhc2Ugb2YgZXJyb3I8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpDb21wcmVzcyI+PC9hPjMuMy4yLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekNvbXByZXNzICggYnpfc3RyZWFtICpzdHJtLCBpbnQgYWN0aW9uICk7PC9wcmU+Ci08cD5Qcm92aWRlcyBtb3JlIGlucHV0IGFuZC9vciBvdXRwdXQgYnVmZmVyIHNwYWNlIGZvciB0aGUKLWxpYnJhcnkuICBUaGUgY2FsbGVyIG1haW50YWlucyBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIGFuZAotY2FsbHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gdG8gdHJhbnNmZXIKLWRhdGEgYmV0d2VlbiB0aGVtLjwvcD4KLTxwPkJlZm9yZSBlYWNoIGNhbGwgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X2luPC9jb2RlPiBzaG91bGQgcG9pbnQgYXQgdGhlIGRhdGEKLXRvIGJlIGNvbXByZXNzZWQsIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPgotc2hvdWxkIGluZGljYXRlIGhvdyBtYW55IGJ5dGVzIHRoZSBsaWJyYXJ5IG1heSByZWFkLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gdXBkYXRlcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X2luPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXZhaWxfaW48L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9pbjwvY29kZT4gdG8gcmVmbGVjdCB0aGUgbnVtYmVyCi1vZiBieXRlcyBpdCBoYXMgcmVhZC48L3A+Ci08cD5TaW1pbGFybHksIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9vdXQ8L2NvZGU+IHNob3VsZAotcG9pbnQgdG8gYSBidWZmZXIgaW4gd2hpY2ggdGhlIGNvbXByZXNzZWQgZGF0YSBpcyB0byBiZSBwbGFjZWQsCi13aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXZhaWxfb3V0PC9jb2RlPiBpbmRpY2F0aW5nIGhvdwotbXVjaCBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gdXBkYXRlcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X291dDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX291dDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX291dDwvY29kZT4gdG8gcmVmbGVjdCB0aGUgbnVtYmVyCi1vZiBieXRlcyBvdXRwdXQuPC9wPgotPHA+WW91IG1heSBwcm92aWRlIGFuZCByZW1vdmUgYXMgbGl0dGxlIG9yIGFzIG11Y2ggZGF0YSBhcyB5b3UKLWxpa2Ugb24gZWFjaCBjYWxsIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPi4gIEluIHRoZSBsaW1pdCwKLWl0IGlzIGFjY2VwdGFibGUgdG8gc3VwcGx5IGFuZCByZW1vdmUgZGF0YSBvbmUgYnl0ZSBhdCBhIHRpbWUsCi1hbHRob3VnaCB0aGlzIHdvdWxkIGJlIHRlcnJpYmx5IGluZWZmaWNpZW50LiAgWW91IHNob3VsZCBhbHdheXMKLWVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBieXRlIG9mIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUgYXQKLWVhY2ggY2FsbC48L3A+Ci08cD5BIHNlY29uZCBwdXJwb3NlIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiBpcyB0byByZXF1ZXN0IGEKLWNoYW5nZSBvZiBtb2RlIG9mIHRoZSBjb21wcmVzc2VkIHN0cmVhbS48L3A+Ci08cD5Db25jZXB0dWFsbHksIGEgY29tcHJlc3NlZCBzdHJlYW0gY2FuIGJlIGluIG9uZSBvZiBmb3VyCi1zdGF0ZXM6IElETEUsIFJVTk5JTkcsIEZMVVNISU5HIGFuZCBGSU5JU0hJTkcuICBCZWZvcmUKLWluaXRpYWxpc2F0aW9uCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+KSBhbmQgYWZ0ZXIKLXRlcm1pbmF0aW9uICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPiksCi1hIHN0cmVhbSBpcyByZWdhcmRlZCBhcyBJRExFLjwvcD4KLTxwPlVwb24gaW5pdGlhbGlzYXRpb24KLSg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4pLCB0aGUgc3RyZWFtCi1pcyBwbGFjZWQgaW4gdGhlIFJVTk5JTkcgc3RhdGUuICBTdWJzZXF1ZW50IGNhbGxzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiBzaG91bGQgcGFzcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9SVU48L2NvZGU+IGFzIHRoZSByZXF1ZXN0ZWQgYWN0aW9uOwotb3RoZXIgYWN0aW9ucyBhcmUgaWxsZWdhbCBhbmQgd2lsbCByZXN1bHQgaW4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU0VRVUVOQ0VfRVJST1I8L2NvZGU+LjwvcD4KLTxwPkF0IHNvbWUgcG9pbnQsIHRoZSBjYWxsaW5nIHByb2dyYW0gd2lsbCBoYXZlIHByb3ZpZGVkIGFsbAotdGhlIGlucHV0IGRhdGEgaXQgd2FudHMgdG8uICBJdCB3aWxsIHRoZW4gd2FudCB0byBmaW5pc2ggdXAgLS0gaW4KLWVmZmVjdCwgYXNraW5nIHRoZSBsaWJyYXJ5IHRvIHByb2Nlc3MgYW55IGRhdGEgaXQgbWlnaHQgaGF2ZQotYnVmZmVyZWQgaW50ZXJuYWxseS4gIEluIHRoaXMgc3RhdGUsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB3aWxsIG5vIGxvbmdlcgotYXR0ZW1wdCB0byByZWFkIGRhdGEgZnJvbQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X2luPC9jb2RlPiwgYnV0IGl0IHdpbGwgd2FudCB0bwotd3JpdGUgZGF0YSB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfb3V0PC9jb2RlPi4gIEJlY2F1c2UKLXRoZSBvdXRwdXQgYnVmZmVyIHN1cHBsaWVkIGJ5IHRoZSB1c2VyIGNhbiBiZSBhcmJpdHJhcmlseSBzbWFsbCwKLXRoZSBmaW5pc2hpbmctdXAgb3BlcmF0aW9uIGNhbm5vdCBuZWNlc3NhcmlseSBiZSBkb25lIHdpdGggYQotc2luZ2xlIGNhbGwgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LjwvcD4KLTxwPkluc3RlYWQsIHRoZSBjYWxsaW5nIHByb2dyYW0gcGFzc2VzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0ZJTklTSDwvY29kZT4gYXMgYW4gYWN0aW9uIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPi4gIFRoaXMgY2hhbmdlcwotdGhlIHN0cmVhbSdzIHN0YXRlIHRvIEZJTklTSElORy4gIEFueSByZW1haW5pbmcgaW5wdXQgKGllLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X2luWzAgLi4gYXZhaWxfaW4tMV08L2NvZGU+KSBpcwotY29tcHJlc3NlZCBhbmQgdHJhbnNmZXJyZWQgdG8gdGhlIG91dHB1dCBidWZmZXIuICBUbyBkbyB0aGlzLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gbXVzdCBiZSBjYWxsZWQKLXJlcGVhdGVkbHkgdW50aWwgYWxsIHRoZSBvdXRwdXQgaGFzIGJlZW4gY29uc3VtZWQuICBBdCB0aGF0Ci1wb2ludCwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gcmV0dXJucwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiwgYW5kIHRoZSBzdHJlYW0ncwotc3RhdGUgaXMgc2V0IGJhY2sgdG8gSURMRS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NFbmQ8L2NvZGU+IHNob3VsZCB0aGVuIGJlCi1jYWxsZWQuPC9wPgotPHA+SnVzdCB0byBtYWtlIHN1cmUgdGhlIGNhbGxpbmcgcHJvZ3JhbSBkb2VzIG5vdCBjaGVhdCwgdGhlCi1saWJyYXJ5IG1ha2VzIGEgbm90ZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPgotYXQgdGhlIHRpbWUgb2YgdGhlIGZpcnN0IGNhbGwgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHdoaWNoIGhhcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9GSU5JU0g8L2NvZGU+IGFzIGFuIGFjdGlvbiAoaWUsIGF0Ci10aGUgdGltZSB0aGUgcHJvZ3JhbSBoYXMgYW5ub3VuY2VkIGl0cyBpbnRlbnRpb24gdG8gbm90IHN1cHBseQotYW55IG1vcmUgaW5wdXQpLiAgQnkgY29tcGFyaW5nIHRoaXMgdmFsdWUgd2l0aCB0aGF0IG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPiBvdmVyIHN1YnNlcXVlbnQgY2FsbHMKLXRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LCB0aGUgbGlicmFyeQotY2FuIGRldGVjdCBhbnkgYXR0ZW1wdHMgdG8gc2xpcCBpbiBtb3JlIGRhdGEgdG8gY29tcHJlc3MuICBBbnkKLWNhbGxzIGZvciB3aGljaCB0aGlzIGlzIGRldGVjdGVkIHdpbGwgcmV0dXJuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPi4gIFRoaXMKLWluZGljYXRlcyBhIHByb2dyYW1taW5nIG1pc3Rha2Ugd2hpY2ggc2hvdWxkIGJlIGNvcnJlY3RlZC48L3A+Ci08cD5JbnN0ZWFkIG9mIGFza2luZyB0byBmaW5pc2gsIHRoZSBjYWxsaW5nIHByb2dyYW0gbWF5IGFzawotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gdG8gdGFrZSBhbGwgdGhlCi1yZW1haW5pbmcgaW5wdXQsIGNvbXByZXNzIGl0IGFuZCB0ZXJtaW5hdGUgdGhlIGN1cnJlbnQKLShCdXJyb3dzLVdoZWVsZXIpIGNvbXByZXNzaW9uIGJsb2NrLiAgVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yCi1lcnJvciBjb250cm9sIHB1cnBvc2VzLiAgVGhlIG1lY2hhbmlzbSBpcyBhbmFsb2dvdXMgdG8gdGhhdCBmb3IKLWZpbmlzaGluZzogY2FsbCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPgotd2l0aCBhbiBhY3Rpb24gb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9GTFVTSDwvY29kZT4sCi1yZW1vdmUgb3V0cHV0IGRhdGEsIGFuZCBwZXJzaXN0IHdpdGggdGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0ZMVVNIPC9jb2RlPiBhY3Rpb24gdW50aWwgdGhlIHZhbHVlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1JVTjwvY29kZT4gaXMgcmV0dXJuZWQuICBBcyB3aXRoCi1maW5pc2hpbmcsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+Ci1kZXRlY3RzIGFueSBhdHRlbXB0IHRvIHByb3ZpZGUgbW9yZSBpbnB1dCBkYXRhIG9uY2UgdGhlIGZsdXNoIGhhcwotYmVndW4uPC9wPgotPHA+T25jZSB0aGUgZmx1c2ggaXMgY29tcGxldGUsIHRoZSBzdHJlYW0gcmV0dXJucyB0byB0aGUKLW5vcm1hbCBSVU5OSU5HIHN0YXRlLjwvcD4KLTxwPlRoaXMgYWxsIHNvdW5kcyBwcmV0dHkgY29tcGxleCwgYnV0IGlzbid0IHJlYWxseS4gIEhlcmUncyBhCi10YWJsZSB3aGljaCBzaG93cyB3aGljaCBhY3Rpb25zIGFyZSBhbGxvd2FibGUgaW4gZWFjaCBzdGF0ZSwgd2hhdAotYWN0aW9uIHdpbGwgYmUgdGFrZW4sIHdoYXQgdGhlIG5leHQgc3RhdGUgaXMsIGFuZCB3aGF0IHRoZQotbm9uLWVycm9yIHJldHVybiB2YWx1ZXMgYXJlLiAgTm90ZSB0aGF0IHlvdSBjYW4ndCBleHBsaWNpdGx5IGFzawotd2hhdCBzdGF0ZSB0aGUgc3RyZWFtIGlzIGluLCBidXQgbm9yIGRvIHlvdSBuZWVkIHRvIC0tIGl0IGNhbiBiZQotaW5mZXJyZWQgZnJvbSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPi48L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+SURMRS9hbnkKLSAgSWxsZWdhbC4gIElETEUgc3RhdGUgb25seSBleGlzdHMgYWZ0ZXIgQloyX2J6Q29tcHJlc3NFbmQgb3IKLSAgYmVmb3JlIEJaMl9iekNvbXByZXNzSW5pdC4KLSAgUmV0dXJuIHZhbHVlID0gQlpfU0VRVUVOQ0VfRVJST1IKLQotUlVOTklORy9CWl9SVU4KLSAgQ29tcHJlc3MgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUuCi0gIE5leHQgc3RhdGUgPSBSVU5OSU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX1JVTl9PSwotCi1SVU5OSU5HL0JaX0ZMVVNICi0gIFJlbWVtYmVyIGN1cnJlbnQgdmFsdWUgb2YgbmV4dF9pbi4gQ29tcHJlc3MgZnJvbSBuZXh0X2luCi0gIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBOZXh0IHN0YXRlID0gRkxVU0hJTkcKLSAgUmV0dXJuIHZhbHVlID0gQlpfRkxVU0hfT0sKLQotUlVOTklORy9CWl9GSU5JU0gKLSAgUmVtZW1iZXIgY3VycmVudCB2YWx1ZSBvZiBuZXh0X2luLiBDb21wcmVzcyBmcm9tIG5leHRfaW4KLSAgdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwgYnV0IGRvIG5vdCBhY2NlcHQgYW55IG1vcmUgaW5wdXQuCi0gIE5leHQgc3RhdGUgPSBGSU5JU0hJTkcKLSAgUmV0dXJuIHZhbHVlID0gQlpfRklOSVNIX09LCi0KLUZMVVNISU5HL0JaX0ZMVVNICi0gIENvbXByZXNzIGZyb20gbmV4dF9pbiB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLCAKLSAgYnV0IGRvIG5vdCBhY2NlcHQgYW55IG1vcmUgaW5wdXQuCi0gIElmIGFsbCB0aGUgZXhpc3RpbmcgaW5wdXQgaGFzIGJlZW4gdXNlZCB1cCBhbmQgYWxsIGNvbXByZXNzZWQKLSAgb3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQKLSAgICBOZXh0IHN0YXRlID0gUlVOTklORzsgUmV0dXJuIHZhbHVlID0gQlpfUlVOX09LCi0gIGVsc2UKLSAgICBOZXh0IHN0YXRlID0gRkxVU0hJTkc7IFJldHVybiB2YWx1ZSA9IEJaX0ZMVVNIX09LCi0KLUZMVVNISU5HL290aGVyICAgICAKLSAgSWxsZWdhbC4KLSAgUmV0dXJuIHZhbHVlID0gQlpfU0VRVUVOQ0VfRVJST1IKLQotRklOSVNISU5HL0JaX0ZJTklTSAotICBDb21wcmVzcyBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwKLSAgYnV0IHRvIG5vdCBhY2NlcHQgYW55IG1vcmUgaW5wdXQuICAKLSAgSWYgYWxsIHRoZSBleGlzdGluZyBpbnB1dCBoYXMgYmVlbiB1c2VkIHVwIGFuZCBhbGwgY29tcHJlc3NlZAotICBvdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZAotICAgIE5leHQgc3RhdGUgPSBJRExFOyBSZXR1cm4gdmFsdWUgPSBCWl9TVFJFQU1fRU5ECi0gIGVsc2UKLSAgICBOZXh0IHN0YXRlID0gRklOSVNISU5HOyBSZXR1cm4gdmFsdWUgPSBCWl9GSU5JU0hfT0sKLQotRklOSVNISU5HL290aGVyCi0gIElsbGVnYWwuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SPC9wcmU+Ci08cD5UaGF0IHN0aWxsIGxvb2tzIGNvbXBsaWNhdGVkPyAgV2VsbCwgZmFpciBlbm91Z2guICBUaGUKLXVzdWFsIHNlcXVlbmNlIG9mIGNhbGxzIGZvciBjb21wcmVzc2luZyBhIGxvYWQgb2YgZGF0YSBpczo8L3A+Ci08ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPgotPGxpPjxwPkdldCBzdGFydGVkIHdpdGgKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+LjwvcD48L2xpPgotPGxpPjxwPlNob3ZlbCBkYXRhIGluIGFuZCBzaGx1cnAgb3V0IGl0cyBjb21wcmVzc2VkIGZvcm0KLSAgdXNpbmcgemVybyBvciBtb3JlIGNhbGxzIG9mCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHdpdGggYWN0aW9uID0KLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9SVU48L2NvZGU+LjwvcD48L2xpPgotPGxpPjxwPkZpbmlzaCB1cC4gUmVwZWF0ZWRseSBjYWxsCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHdpdGggYWN0aW9uID0KLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9GSU5JU0g8L2NvZGU+LCBjb3B5aW5nIG91dCB0aGUKLSAgY29tcHJlc3NlZCBvdXRwdXQsIHVudGlsCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4gaXMKLSAgcmV0dXJuZWQuPC9wPjwvbGk+Ci08bGk+PHA+Q2xvc2UgdXAgYW5kIGdvIGhvbWUuICBDYWxsCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NFbmQ8L2NvZGU+LjwvcD48L2xpPgotPC9vbD48L2Rpdj4KLTxwPklmIHRoZSBkYXRhIHlvdSB3YW50IHRvIGNvbXByZXNzIGZpdHMgaW50byB5b3VyIGlucHV0Ci1idWZmZXIgYWxsIGF0IG9uY2UsIHlvdSBjYW4gc2tpcCB0aGUgY2FsbHMgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3MgKCAuLi4sIEJaX1JVTiApPC9jb2RlPgotYW5kIGp1c3QgZG8gdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3MgKCAuLi4sIEJaX0ZJTklTSAotKTwvY29kZT4gY2FsbHMuPC9wPgotPHA+QWxsIHJlcXVpcmVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPi4gIFRoZQotY29tcHJlc3Npb24gbGlicmFyeSBjYW4gYWNjZXB0IGFueSBkYXRhIGF0IGFsbCAob2J2aW91c2x5KS4gIFNvCi15b3Ugc2hvdWxkbid0IGdldCBhbnkgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gY2FsbHMuICBJZiB5b3UKLWRvLCB0aGV5IHdpbGwgYmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU0VRVUVOQ0VfRVJST1I8L2NvZGU+LCBhbmQgaW5kaWNhdGUKLWEgYnVnIGluIHlvdXIgcHJvZ3JhbW1pbmcuPC9wPgotPHA+VHJpdmlhbCBvdGhlciBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9QQVJBTV9FUlJPUgotICBpZiBzdHJtIGlzIE5VTEwsIG9yIHN0cm0tJmd0O3MgaXMgTlVMTDwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiekNvbXByZXNzLWVuZCI+PC9hPjMuMy4zLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekNvbXByZXNzRW5kICggYnpfc3RyZWFtICpzdHJtICk7PC9wcmU+Ci08cD5SZWxlYXNlcyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGNvbXByZXNzaW9uCi1zdHJlYW0uPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IgIGlmIHN0cm0gaXMgTlVMTCBvciBzdHJtLSZndDtzIGlzIE5VTEwKLUJaX09LICAgICAgICAgICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpEZWNvbXByZXNzLWluaXQiPjwvYT4zLjMuNC6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpEZWNvbXByZXNzSW5pdCAoIGJ6X3N0cmVhbSAqc3RybSwgaW50IHZlcmJvc2l0eSwgaW50IHNtYWxsICk7PC9wcmU+Ci08cD5QcmVwYXJlcyBmb3IgZGVjb21wcmVzc2lvbi4gIEFzIHdpdGgKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiwgYQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iel9zdHJlYW08L2NvZGU+IHJlY29yZCBzaG91bGQgYmUKLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGlzZWQgYmVmb3JlIHRoZSBjYWxsLiAgRmllbGRzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6YWxsb2M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemZyZWU8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5vcGFxdWU8L2NvZGU+IHNob3VsZCBiZSBzZXQgaWYgYSBjdXN0b20KLW1lbW9yeSBhbGxvY2F0b3IgaXMgcmVxdWlyZWQsIG9yIG1hZGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TlVMTDwvY29kZT4gZm9yIHRoZSBub3JtYWwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bWFsbG9jPC9jb2RlPiAvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZyZWU8L2NvZGU+IHJvdXRpbmVzLiAgVXBvbiByZXR1cm4sIHRoZQotaW50ZXJuYWwgc3RhdGUgd2lsbCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQsIGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9pbjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX291dDwvY29kZT4gd2lsbCBiZSB6ZXJvLjwvcD4KLTxwPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXIKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dmVyYm9zaXR5PC9jb2RlPiwgc2VlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4uPC9wPgotPHA+SWYgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zbWFsbDwvY29kZT4gaXMgbm9uemVybywgdGhlCi1saWJyYXJ5IHdpbGwgdXNlIGFuIGFsdGVybmF0aXZlIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtIHdoaWNoCi11c2VzIGxlc3MgbWVtb3J5IGJ1dCBhdCB0aGUgY29zdCBvZiBkZWNvbXByZXNzaW5nIG1vcmUgc2xvd2x5Ci0ocm91Z2hseSBzcGVha2luZywgaGFsZiB0aGUgc3BlZWQsIGJ1dCB0aGUgbWF4aW11bSBtZW1vcnkKLXJlcXVpcmVtZW50IGRyb3BzIHRvIGFyb3VuZCAyMzAwaykuICBTZWUgPGEgaHJlZj0iI3VzaW5nIj5Ib3cgdG8gdXNlIGJ6aXAyPC9hPgotZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbWVtb3J5IG1hbmFnZW1lbnQuPC9wPgotPHA+Tm90ZSB0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCB0byBkZWNvbXByZXNzIGEKLXN0cmVhbSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bnRpbCB0aGUgc3RyZWFtJ3MgaGVhZGVyIGhhcyBiZWVuCi1yZWFkLCBzbyBldmVuIGlmCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NJbml0PC9jb2RlPiBzdWNjZWVkcywgYQotc3Vic2VxdWVudCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+Ci1jb3VsZCBmYWlsIHdpdGgKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUVNX0VSUk9SPC9jb2RlPi48L3A+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiAoIHNtYWxsICE9IDAgJmFtcDsmYW1wOyBzbWFsbCAhPSAxICkKLSAgb3IgKHZlcmJvc2l0eSAmbHQ7OyAwIHx8IHZlcmJvc2l0eSAmZ3Q7IDQpCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGU8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaMl9iekRlY29tcHJlc3MKLSAgaWYgQlpfT0sgd2FzIHJldHVybmVkCi0gIG5vIHNwZWNpZmljIGFjdGlvbiByZXF1aXJlZCBpbiBjYXNlIG9mIGVycm9yPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6RGVjb21wcmVzcyI+PC9hPjMuMy41LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6RGVjb21wcmVzcyAoIGJ6X3N0cmVhbSAqc3RybSApOzwvcHJlPgotPHA+UHJvdmlkZXMgbW9yZSBpbnB1dCBhbmQvb3V0IG91dHB1dCBidWZmZXIgc3BhY2UgZm9yIHRoZQotbGlicmFyeS4gIFRoZSBjYWxsZXIgbWFpbnRhaW5zIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycywgYW5kIHVzZXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzczwvY29kZT4gdG8gdHJhbnNmZXIKLWRhdGEgYmV0d2VlbiB0aGVtLjwvcD4KLTxwPkJlZm9yZSBlYWNoIGNhbGwgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzczwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfaW48L2NvZGU+IHNob3VsZCBwb2ludCBhdCB0aGUKLWNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXZhaWxfaW48L2NvZGU+Ci1zaG91bGQgaW5kaWNhdGUgaG93IG1hbnkgYnl0ZXMgdGhlIGxpYnJhcnkgbWF5IHJlYWQuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IHVwZGF0ZXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pbjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfaW48L2NvZGU+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgaXQgaGFzIHJlYWQuPC9wPgotPHA+U2ltaWxhcmx5LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfb3V0PC9jb2RlPiBzaG91bGQKLXBvaW50IHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IGlzIHRvIGJlCi1wbGFjZWQsIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9vdXQ8L2NvZGU+Ci1pbmRpY2F0aW5nIGhvdyBtdWNoIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB1cGRhdGVzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfb3V0PC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXZhaWxfb3V0PC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfb3V0PC9jb2RlPiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIG91dHB1dC48L3A+Ci08cD5Zb3UgbWF5IHByb3ZpZGUgYW5kIHJlbW92ZSBhcyBsaXR0bGUgb3IgYXMgbXVjaCBkYXRhIGFzIHlvdQotbGlrZSBvbiBlYWNoIGNhbGwgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzczwvY29kZT4uICBJbiB0aGUgbGltaXQsCi1pdCBpcyBhY2NlcHRhYmxlIHRvIHN1cHBseSBhbmQgcmVtb3ZlIGRhdGEgb25lIGJ5dGUgYXQgYSB0aW1lLAotYWx0aG91Z2ggdGhpcyB3b3VsZCBiZSB0ZXJyaWJseSBpbmVmZmljaWVudC4gIFlvdSBzaG91bGQgYWx3YXlzCi1lbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgYnl0ZSBvZiBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlIGF0Ci1lYWNoIGNhbGwuPC9wPgotPHA+VXNlIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzczwvY29kZT4gaXMKLXNpbXBsZXIgdGhhbgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4uPC9wPgotPHA+WW91IHNob3VsZCBwcm92aWRlIGlucHV0IGFuZCByZW1vdmUgb3V0cHV0IGFzIGRlc2NyaWJlZAotYWJvdmUsIGFuZCByZXBlYXRlZGx5IGNhbGwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzczwvY29kZT4gdW50aWwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4gaXMgcmV0dXJuZWQuCi1BcHBlYXJhbmNlIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4KLWRlbm90ZXMgdGhhdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+Ci1oYXMgZGV0ZWN0ZWQgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzczwvY29kZT4gd2lsbCBub3QKLXByb2R1Y2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiB1bnRpbCBhbGwKLW91dHB1dCBkYXRhIGhhcyBiZWVuIHBsYWNlZCBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLCBzbyBvbmNlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IGFwcGVhcnMsIHlvdSBhcmUKLWd1YXJhbnRlZWQgdG8gaGF2ZSBhdmFpbGFibGUgYWxsIHRoZSBkZWNvbXByZXNzZWQgb3V0cHV0LCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0VuZDwvY29kZT4gY2FuIHNhZmVseQotYmUgY2FsbGVkLjwvcD4KLTxwPklmIGNhc2Ugb2YgYW4gZXJyb3IgcmV0dXJuIHZhbHVlLCB5b3Ugc2hvdWxkIGNhbGwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0VuZDwvY29kZT4gdG8gY2xlYW4gdXAKLWFuZCByZWxlYXNlIG1lbW9yeS48L3A+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9QQVJBTV9FUlJPUgotICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0mZ3Q7cyBpcyBOVUxMCi0gIG9yIHN0cm0tJmd0O2F2YWlsX291dCAmbHQ7IDEKLUJaX0RBVEFfRVJST1IKLSAgaWYgYSBkYXRhIGludGVncml0eSBlcnJvciBpcyBkZXRlY3RlZCBpbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0KLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIGNvbXByZXNzZWQgc3RyZWFtIGRvZXNuJ3QgYmVnaW4gd2l0aCB0aGUgcmlnaHQgbWFnaWMgYnl0ZXMKLUJaX01FTV9FUlJPUgotICBpZiB0aGVyZSB3YXNuJ3QgZW5vdWdoIG1lbW9yeSBhdmFpbGFibGUKLUJaX1NUUkVBTV9FTkQKLSAgaWYgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBkYXRhIHN0cmVhbSB3YXMgZGV0ZWN0ZWQgYW5kIGFsbAotICBvdXRwdXQgaW4gaGFzIGJlZW4gY29uc3VtZWQsIGVnIHMtLSZndDthdmFpbF9vdXQgJmd0OyAwCi1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaMl9iekRlY29tcHJlc3MKLSAgaWYgQlpfT0sgd2FzIHJldHVybmVkCi1CWjJfYnpEZWNvbXByZXNzRW5kCi0gIG90aGVyd2lzZTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiekRlY29tcHJlc3MtZW5kIj48L2E+My4zLjYuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0VuZDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpEZWNvbXByZXNzRW5kICggYnpfc3RyZWFtICpzdHJtICk7PC9wcmU+Ci08cD5SZWxlYXNlcyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGRlY29tcHJlc3Npb24KLXN0cmVhbS48L3A+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9QQVJBTV9FUlJPUgotICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0mZ3Q7cyBpcyBOVUxMCi1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgTm9uZS48L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImhsLWludGVyZmFjZSI+PC9hPjMuNC6gSGlnaC1sZXZlbCBpbnRlcmZhY2U8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+VGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBmb3JtYXQgZmlsZXMuICBGaXJzdCwgc29tZQotZ2VuZXJhbCBwb2ludHMuPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5BbGwgb2YgdGhlIGZ1bmN0aW9ucyB0YWtlIGFuCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+aW50KjwvY29kZT4gZmlyc3QgYXJndW1lbnQsCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4uICBBZnRlciBlYWNoIGNhbGwsCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gc2hvdWxkIGJlIGNvbnN1bHRlZAotICBmaXJzdCB0byBkZXRlcm1pbmUgdGhlIG91dGNvbWUgb2YgdGhlIGNhbGwuICBJZgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IGlzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT0s8L2NvZGU+LCB0aGUgY2FsbCBjb21wbGV0ZWQKLSAgc3VjY2Vzc2Z1bGx5LCBhbmQgb25seSB0aGVuIHNob3VsZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQotICBmdW5jdGlvbiAoaWYgYW55KSBiZSBjb25zdWx0ZWQuICBJZgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IGlzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfSU9fRVJST1I8L2NvZGU+LCB0aGVyZSB3YXMgYW4KLSAgZXJyb3IgcmVhZGluZy93cml0aW5nIHRoZSB1bmRlcmx5aW5nIGNvbXByZXNzZWQgZmlsZSwgYW5kIHlvdQotICBzaG91bGQgdGhlbiBjb25zdWx0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZXJybm88L2NvZGU+IC8KLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5wZXJyb3I8L2NvZGU+IHRvIGRldGVybWluZSB0aGUgY2F1c2UKLSAgb2YgdGhlIGRpZmZpY3VsdHkuICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+Ci0gIG1heSBhbHNvIGJlIHNldCB0byB2YXJpb3VzIG90aGVyIHZhbHVlczsgcHJlY2lzZSBkZXRhaWxzIGFyZQotICBnaXZlbiBvbiBhIHBlci1mdW5jdGlvbiBiYXNpcyBiZWxvdy48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5JZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IGluZGljYXRlcwotICBhbiBlcnJvciAoaWUsIGFueXRoaW5nIGV4Y2VwdAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09LPC9jb2RlPiBhbmQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiksIHlvdSBzaG91bGQKLSAgaW1tZWRpYXRlbHkgY2FsbAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT4gKG9yCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT4sIGRlcGVuZGluZyBvbgotICB3aGV0aGVyIHlvdSBhcmUgYXR0ZW1wdGluZyB0byByZWFkIG9yIHRvIHdyaXRlKSB0byBmcmVlIHVwIGFsbAotICByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJlYW0uICBPbmNlIGFuIGVycm9yIGhhcyBiZWVuCi0gIGluZGljYXRlZCwgYmVoYXZpb3VyIG9mIGFsbCBjYWxscyBleGNlcHQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+Ci0gICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlQ2xvc2U8L2NvZGU+KSBpcwotICB1bmRlZmluZWQuICBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCAoMSkKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBzaG91bGQgYmUgY2hlY2tlZAotICBhZnRlciBlYWNoIGNhbGwsIGFuZCAoMikgaWYKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBpbmRpY2F0ZXMgYW4gZXJyb3IsCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPgotICAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPikgc2hvdWxkIHRoZW4KLSAgYmUgY2FsbGVkIHRvIGNsZWFuIHVwLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkZJTEUqPC9jb2RlPiBhcmd1bWVudHMKLSAgcGFzc2VkIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+IC8KLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZU9wZW48L2NvZGU+IHNob3VsZCBiZSBzZXQKLSAgdG8gYmluYXJ5IG1vZGUuICBNb3N0IFVuaXggc3lzdGVtcyB3aWxsIGRvIHRoaXMgYnkgZGVmYXVsdCwgYnV0Ci0gIG90aGVyIHBsYXRmb3JtcywgaW5jbHVkaW5nIFdpbmRvd3MgYW5kIE1hYywgd2lsbCBub3QuICBJZiB5b3UKLSAgb21pdCB0aGlzLCB5b3UgbWF5IGVuY291bnRlciBwcm9ibGVtcyB3aGVuIG1vdmluZyBjb2RlIHRvIG5ldwotICBwbGF0Zm9ybXMuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+TWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdHMgYXJlIGhhbmRsZWQgYnkKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5tYWxsb2M8L2NvZGU+IC8KLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mcmVlPC9jb2RlPi4gIEF0IHByZXNlbnQgdGhlcmUgaXMgbm8KLSAgZmFjaWxpdHkgZm9yIHVzZXItZGVmaW5lZCBtZW1vcnkgYWxsb2NhdG9ycyBpbiB0aGUgZmlsZSBJL08KLSAgZnVuY3Rpb25zIChjb3VsZCBlYXNpbHkgYmUgYWRkZWQsIHRob3VnaCkuPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpyZWFkb3BlbiI+PC9hPjMuNC4xLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiB2b2lkIEJaRklMRTsKLQotQlpGSUxFICpCWjJfYnpSZWFkT3BlbiggaW50ICpiemVycm9yLCBGSUxFICpmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJib3NpdHksIGludCBzbWFsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVudXNlZCwgaW50IG5VbnVzZWQgKTs8L3ByZT4KLTxwPlByZXBhcmUgdG8gcmVhZCBjb21wcmVzc2VkIGRhdGEgZnJvbSBmaWxlIGhhbmRsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mPC9jb2RlPi4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZjwvY29kZT4gc2hvdWxkIHJlZmVyIHRvIGEgZmlsZSB3aGljaAotaGFzIGJlZW4gb3BlbmVkIGZvciByZWFkaW5nLCBhbmQgZm9yIHdoaWNoIHRoZSBlcnJvciBpbmRpY2F0b3IKLSg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZlcnJvcihmKTwvY29kZT4paXMgbm90IHNldC4gIElmCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNtYWxsPC9jb2RlPiBpcyAxLCB0aGUgbGlicmFyeSB3aWxsIHRyeQotdG8gZGVjb21wcmVzcyB1c2luZyBsZXNzIG1lbW9yeSwgYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQuPC9wPgotPHA+Rm9yIHJlYXNvbnMgZXhwbGFpbmVkIGJlbG93LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiB3aWxsIGRlY29tcHJlc3MgdGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5VbnVzZWQ8L2NvZGU+IGJ5dGVzIHN0YXJ0aW5nIGF0Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnVudXNlZDwvY29kZT4sIGJlZm9yZSBzdGFydGluZyB0byByZWFkCi1mcm9tIHRoZSBmaWxlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZjwvY29kZT4uICBBdCBtb3N0Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01BWF9VTlVTRUQ8L2NvZGU+IGJ5dGVzIG1heSBiZQotc3VwcGxpZWQgbGlrZSB0aGlzLiAgSWYgdGhpcyBmYWNpbGl0eSBpcyBub3QgcmVxdWlyZWQsIHlvdSBzaG91bGQKLXBhc3MgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5OVUxMPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+MDwvY29kZT4gZm9yCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnVudXNlZDwvY29kZT4gYW5kCi1uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5VbnVzZWQ8L2NvZGU+IHJlc3BlY3RpdmVseS48L3A+Ci08cD5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVycwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zbWFsbDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4sIHNlZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT4uPC9wPgotPHA+VGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIHRvIGRlY29tcHJlc3MgYSBmaWxlIGNhbm5vdCBiZQotZGV0ZXJtaW5lZCB1bnRpbCB0aGUgZmlsZSdzIGhlYWRlciBoYXMgYmVlbiByZWFkLiAgU28gaXQgaXMKLXBvc3NpYmxlIHRoYXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkT3BlbjwvY29kZT4KLXJldHVybnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT4gYnV0IGEgc3Vic2VxdWVudAotY2FsbCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+IHdpbGwgcmV0dXJuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4uPC9wPgotPHA+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT46PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGYgaXMgTlVMTAotICBvciBzbWFsbCBpcyBuZWl0aGVyIDAgbm9yIDEKLSAgb3IgKCB1bnVzZWQgPT0gTlVMTCAmYW1wOyZhbXA7IG5VbnVzZWQgIT0gMCApCi0gIG9yICggdW51c2VkICE9IE5VTEwgJmFtcDsmYW1wOyAhKDAgJmx0Oz0gblVudXNlZCAmbHQ7PSBCWl9NQVhfVU5VU0VEKSApCi1CWl9JT19FUlJPUgotICBpZiBmZXJyb3IoZikgaXMgbm9uemVybwotQlpfTUVNX0VSUk9SCi0gIGlmIGluc3VmZmljaWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlCi1CWl9PSwotICBvdGhlcndpc2UuPC9wcmU+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Qb2ludGVyIHRvIGFuIGFic3RyYWN0IEJaRklMRQotICBpZiBiemVycm9yIGlzIEJaX09LCi1OVUxMCi0gIG90aGVyd2lzZTwvcHJlPgotPHA+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QloyX2J6UmVhZAotICBpZiBiemVycm9yIGlzIEJaX09LCi1CWjJfYnpDbG9zZQotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpyZWFkIj48L2E+My40LjIuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpSZWFkICggaW50ICpiemVycm9yLCBCWkZJTEUgKmIsIHZvaWQgKmJ1ZiwgaW50IGxlbiApOzwvcHJlPgotPHA+UmVhZHMgdXAgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sZW48L2NvZGU+Ci0odW5jb21wcmVzc2VkKSBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YjwvY29kZT4gaW50byB0aGUgYnVmZmVyCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1ZjwvY29kZT4uICBJZiB0aGUgcmVhZCB3YXMKLXN1Y2Nlc3NmdWwsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gaXMgc2V0IHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09LPC9jb2RlPiBhbmQgdGhlIG51bWJlciBvZiBieXRlcwotcmVhZCBpcyByZXR1cm5lZC4gIElmIHRoZSBsb2dpY2FsIGVuZC1vZi1zdHJlYW0gd2FzIGRldGVjdGVkLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiB3aWxsIGJlIHNldCB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiwgYW5kIHRoZSBudW1iZXIgb2YKLWJ5dGVzIHJlYWQgaXMgcmV0dXJuZWQuICBBbGwgb3RoZXIKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gdmFsdWVzIGRlbm90ZSBhbgotZXJyb3IuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiB3aWxsIHN1cHBseQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sZW48L2NvZGU+IGJ5dGVzLCB1bmxlc3MgdGhlIGxvZ2ljYWwKLXN0cmVhbSBlbmQgaXMgZGV0ZWN0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLiAgQmVjYXVzZSBvZiB0aGlzLCBpdAotaXMgcG9zc2libGUgdG8gZGV0ZWN0IHRoZSBzdHJlYW0gZW5kIGJ5IG9ic2VydmluZyB3aGVuIHRoZSBudW1iZXIKLW9mIGJ5dGVzIHJldHVybmVkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KLU5ldmVydGhlbGVzcywgdGhpcyBpcyByZWdhcmRlZCBhcyBpbmFkdmlzYWJsZTsgeW91IHNob3VsZCBpbnN0ZWFkCi1jaGVjayA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IGFmdGVyIGV2ZXJ5IGNhbGwKLWFuZCB3YXRjaCBvdXQgZm9yCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+LjwvcD4KLTxwPkludGVybmFsbHksIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4KLWNvcGllcyBkYXRhIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSBpbiBjaHVua3Mgb2Ygc2l6ZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NQVhfVU5VU0VEPC9jb2RlPiBieXRlcyBiZWZvcmUKLWRlY29tcHJlc3NpbmcgaXQuICBJZiB0aGUgZmlsZSBjb250YWlucyBtb3JlIGJ5dGVzIHRoYW4gc3RyaWN0bHkKLW5lZWRlZCB0byByZWFjaCB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkKLXJlYWQgc29tZSBvZiB0aGUgdHJhaWxpbmcgZGF0YSBiZWZvcmUgc2lnbmFsbGluZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FTkQ8L2NvZGU+LiAgVG8gY29sbGVjdCB0aGUKLXJlYWQgYnV0IHVudXNlZCBkYXRhIG9uY2UKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU0VRVUVOQ0VfRU5EPC9jb2RlPiBoYXMgYXBwZWFyZWQsCi1jYWxsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT4KLWltbWVkaWF0ZWx5IGJlZm9yZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+LjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwgb3IgYnVmIGlzIE5VTEwgb3IgbGVuICZsdDsgMAotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6V3JpdGVPcGVuCi1CWl9JT19FUlJPUgotICBpZiB0aGVyZSBpcyBhbiBlcnJvciByZWFkaW5nIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZQotQlpfVU5FWFBFQ1RFRF9FT0YKLSAgaWYgdGhlIGNvbXByZXNzZWQgZmlsZSBlbmRlZCBiZWZvcmUgCi0gIHRoZSBsb2dpY2FsIGVuZC1vZi1zdHJlYW0gd2FzIGRldGVjdGVkCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3Igd2FzIGRldGVjdGVkIGluIHRoZSBjb21wcmVzc2VkIHN0cmVhbQotQlpfREFUQV9FUlJPUl9NQUdJQwotICBpZiB0aGUgc3RyZWFtIGRvZXMgbm90IGJlZ2luIHdpdGggdGhlIHJlcXVpc2l0ZSBoZWFkZXIgYnl0ZXMgCi0gIChpZSwgaXMgbm90IGEgYnppcDIgZGF0YSBmaWxlKS4gIFRoaXMgaXMgcmVhbGx5IAotICBhIHNwZWNpYWwgY2FzZSBvZiBCWl9EQVRBX0VSUk9SLgotQlpfTUVNX0VSUk9SCi0gIGlmIGluc3VmZmljaWVudCBtZW1vcnkgd2FzIGF2YWlsYWJsZQotQlpfU1RSRUFNX0VORAotICBpZiB0aGUgbG9naWNhbCBlbmQgb2Ygc3RyZWFtIHdhcyBkZXRlY3RlZC4KLUJaX09LCi0gIG90aGVyd2lzZS48L3ByZT4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPm51bWJlciBvZiBieXRlcyByZWFkCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sgb3IgQlpfU1RSRUFNX0VORAotdW5kZWZpbmVkCi0gIG90aGVyd2lzZTwvcHJlPgotPHA+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29sbGVjdCBkYXRhIGZyb20gYnVmLCB0aGVuIEJaMl9ielJlYWQgb3IgQloyX2J6UmVhZENsb3NlCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sKLWNvbGxlY3QgZGF0YSBmcm9tIGJ1ZiwgdGhlbiBCWjJfYnpSZWFkQ2xvc2Ugb3IgQloyX2J6UmVhZEdldFVudXNlZAotICBpZiBiemVycm9yIGlzIEJaX1NFUVVFTkNFX0VORAotQloyX2J6UmVhZENsb3NlCi0gIG90aGVyd2lzZTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJienJlYWRnZXR1bnVzZWQiPjwvYT4zLjQuMy6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCBCWjJfYnpSZWFkR2V0VW51c2VkKCBpbnQqIGJ6ZXJyb3IsIEJaRklMRSAqYiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiB1bnVzZWQsIGludCogblVudXNlZCApOzwvcHJlPgotPHA+UmV0dXJucyBkYXRhIHdoaWNoIHdhcyByZWFkIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSBidXQKLXdhcyBub3QgbmVlZGVkIHRvIGdldCB0byB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qdW51c2VkPC9jb2RlPiBpcyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YKLXRoZSBkYXRhLCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qblVudXNlZDwvY29kZT4gdG8gdGhlCi1udW1iZXIgb2YgYnl0ZXMuICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipuVW51c2VkPC9jb2RlPiB3aWxsCi1iZSBzZXQgdG8gYSB2YWx1ZSBiZXR3ZWVuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+MDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01BWF9VTlVTRUQ8L2NvZGU+IGluY2x1c2l2ZS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+IGhhcyBzaWduYWxsZWQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4gYnV0IGJlZm9yZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+LjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwKLSAgb3IgdW51c2VkIGlzIE5VTEwgb3IgblVudXNlZCBpcyBOVUxMCi1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBCWl9TVFJFQU1fRU5EIGhhcyBub3QgYmVlbiBzaWduYWxsZWQKLSAgb3IgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6V3JpdGVPcGVuCi1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaMl9ielJlYWRDbG9zZTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJienJlYWRjbG9zZSI+PC9hPjMuNC40LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgQloyX2J6UmVhZENsb3NlICggaW50ICpiemVycm9yLCBCWkZJTEUgKmIgKTs8L3ByZT4KLTxwPlJlbGVhc2VzIGFsbCBtZW1vcnkgcGVydGFpbmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmI8L2NvZGU+LgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+IGRvZXMgbm90IGNhbGwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmNsb3NlPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyBmaWxlCi1oYW5kbGUsIHNvIHlvdSBzaG91bGQgZG8gdGhhdCB5b3Vyc2VsZiBpZiBhcHByb3ByaWF0ZS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPiBzaG91bGQgYmUgY2FsbGVkCi10byBjbGVhbiB1cCBhZnRlciBhbGwgZXJyb3Igc2l0dWF0aW9ucy48L3A+Ci08cD5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPjo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6T3BlbldyaXRlCi1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPm5vbmU8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnp3cml0ZW9wZW4iPjwvYT4zLjQuNS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZU9wZW48L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWkZJTEUgKkJaMl9ieldyaXRlT3BlbiggaW50ICpiemVycm9yLCBGSUxFICpmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplMTAwaywgaW50IHZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd29ya0ZhY3RvciApOzwvcHJlPgotPHA+UHJlcGFyZSB0byB3cml0ZSBjb21wcmVzc2VkIGRhdGEgdG8gZmlsZSBoYW5kbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZjwvY29kZT4uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmY8L2NvZGU+IHNob3VsZCByZWZlciB0byBhIGZpbGUgd2hpY2gKLWhhcyBiZWVuIG9wZW5lZCBmb3Igd3JpdGluZywgYW5kIGZvciB3aGljaCB0aGUgZXJyb3IgaW5kaWNhdG9yCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZXJyb3IoZik8L2NvZGU+KWlzIG5vdCBzZXQuPC9wPgotPHA+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YmxvY2tTaXplMTAwazwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPndvcmtGYWN0b3I8L2NvZGU+LCBzZWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPi48L3A+Ci08cD5BbGwgcmVxdWlyZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCBhdCB0aGlzIHN0YWdlLCBzbyBpZiB0aGUKLWNhbGwgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUVNX0VSUk9SPC9jb2RlPiBjYW5ub3QgYmUgc2lnbmFsbGVkCi1ieSBhIHN1YnNlcXVlbnQgY2FsbCB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4uPC9wPgotPHA+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT46PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGYgaXMgTlVMTAotICBvciBibG9ja1NpemUxMDBrICZsdDsgMSBvciBibG9ja1NpemUxMDBrICZndDsgOQotQlpfSU9fRVJST1IKLSAgaWYgZmVycm9yKGYpIGlzIG5vbnplcm8KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Qb2ludGVyIHRvIGFuIGFic3RyYWN0IEJaRklMRQotICBpZiBiemVycm9yIGlzIEJaX09LCi1OVUxMCi0gIG90aGVyd2lzZTwvcHJlPgotPHA+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QloyX2J6V3JpdGUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotICAoeW91IGNvdWxkIGdvIGRpcmVjdGx5IHRvIEJaMl9ieldyaXRlQ2xvc2UsIGJ1dCB0aGlzIHdvdWxkIGJlIHByZXR0eSBwb2ludGxlc3MpCi1CWjJfYnpXcml0ZUNsb3NlCi0gIG90aGVyd2lzZTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiendyaXRlIj48L2E+My40LjYuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkIEJaMl9ieldyaXRlICggaW50ICpiemVycm9yLCBCWkZJTEUgKmIsIHZvaWQgKmJ1ZiwgaW50IGxlbiApOzwvcHJlPgotPHA+QWJzb3JicyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxlbjwvY29kZT4gYnl0ZXMgZnJvbSB0aGUKLWJ1ZmZlciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1ZjwvY29kZT4sIGV2ZW50dWFsbHkgdG8gYmUKLWNvbXByZXNzZWQgYW5kIHdyaXR0ZW4gdG8gdGhlIGZpbGUuPC9wPgotPHA+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT46PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX1BBUkFNX0VSUk9SCi0gIGlmIGIgaXMgTlVMTCBvciBidWYgaXMgTlVMTCBvciBsZW4gJmx0OyAwCi1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBiIHdhcyBvcGVuZWQgd2l0aCBCWjJfYnpSZWFkT3BlbgotQlpfSU9fRVJST1IKLSAgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd3JpdGluZyB0aGUgY29tcHJlc3NlZCBmaWxlLgotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6d3JpdGVjbG9zZSI+PC9hPjMuNC43LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlQ2xvc2U8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkIEJaMl9ieldyaXRlQ2xvc2UoIGludCAqYnplcnJvciwgQlpGSUxFKiBmLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWJhbmRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX291dCApOwotCi12b2lkIEJaMl9ieldyaXRlQ2xvc2U2NCggaW50ICpiemVycm9yLCBCWkZJTEUqIGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFiYW5kb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW5fbG8zMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19pbl9oaTMyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX291dF9sbzMyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX291dF9oaTMyICk7PC9wcmU+Ci08cD5Db21wcmVzc2VzIGFuZCBmbHVzaGVzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgYWxsIGRhdGEgc28KLWZhciBzdXBwbGllZCBieSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlPC9jb2RlPi4KLVRoZSBsb2dpY2FsIGVuZC1vZi1zdHJlYW0gbWFya2VycyBhcmUgYWxzbyB3cml0dGVuLCBzbyBzdWJzZXF1ZW50Ci1jYWxscyB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlPC9jb2RlPiBhcmUKLWlsbGVnYWwuICBBbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmI8L2NvZGU+IGlzIHJlbGVhc2VkLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZmx1c2g8L2NvZGU+IGlzIGNhbGxlZCBvbiB0aGUKLWNvbXByZXNzZWQgZmlsZSwgYnV0IGl0IGlzIG5vdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mY2xvc2U8L2NvZGU+J2QuPC9wPgotPHA+SWYgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPiBpcwotY2FsbGVkIHRvIGNsZWFuIHVwIGFmdGVyIGFuIGVycm9yLCB0aGUgb25seSBhY3Rpb24gaXMgdG8gcmVsZWFzZQotdGhlIG1lbW9yeS4gIFRoZSBsaWJyYXJ5IHJlY29yZHMgdGhlIGVycm9yIGNvZGVzIGlzc3VlZCBieQotcHJldmlvdXMgY2FsbHMsIHNvIHRoaXMgc2l0dWF0aW9uIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4KLVRoZXJlIGlzIG5vIGF0dGVtcHQgdG8gY29tcGxldGUgdGhlIGNvbXByZXNzaW9uIG9wZXJhdGlvbiwgbm9yIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZmbHVzaDwvY29kZT4gdGhlIGNvbXByZXNzZWQgZmlsZS4gIFlvdQotY2FuIGZvcmNlIHRoaXMgYmVoYXZpb3VyIHRvIGhhcHBlbiBldmVuIGluIHRoZSBjYXNlIG9mIG5vIGVycm9yLAotYnkgcGFzc2luZyBhIG5vbnplcm8gdmFsdWUgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YWJhbmRvbjwvY29kZT4uPC9wPgotPHA+SWYgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uYnl0ZXNfaW48L2NvZGU+IGlzIG5vbi1udWxsLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qbmJ5dGVzX2luPC9jb2RlPiB3aWxsIGJlIHNldCB0byBiZSB0aGUKLXRvdGFsIHZvbHVtZSBvZiB1bmNvbXByZXNzZWQgZGF0YSBoYW5kbGVkLiAgU2ltaWxhcmx5LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uYnl0ZXNfb3V0PC9jb2RlPiB3aWxsIGJlIHNldCB0byB0aGUKLXRvdGFsIHZvbHVtZSBvZiBjb21wcmVzc2VkIGRhdGEgd3JpdHRlbi4gIEZvciBjb21wYXRpYmlsaXR5IHdpdGgKLW9sZGVyIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPiBvbmx5IHlpZWxkcyB0aGUKLWxvd2VyIDMyIGJpdHMgb2YgdGhlc2UgY291bnRzLiAgVXNlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlQ2xvc2U2NDwvY29kZT4gaWYgeW91IHdhbnQKLXRoZSBmdWxsIDY0IGJpdCBjb3VudHMuICBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBvdGhlcndpc2UKLWFic29sdXRlbHkgaWRlbnRpY2FsLjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBiIHdhcyBvcGVuZWQgd2l0aCBCWjJfYnpSZWFkT3BlbgotQlpfSU9fRVJST1IKLSAgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd3JpdGluZyB0aGUgY29tcHJlc3NlZCBmaWxlCi1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iZW1iZWQiPjwvYT4zLjQuOC6gSGFuZGxpbmcgZW1iZWRkZWQgY29tcHJlc3NlZCBkYXRhIHN0cmVhbXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+VGhlIGhpZ2gtbGV2ZWwgbGlicmFyeSBmYWNpbGl0YXRlcyB1c2Ugb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGRhdGEgc3RyZWFtcyB3aGljaCBmb3JtCi1zb21lIHBhcnQgb2YgYSBzdXJyb3VuZGluZywgbGFyZ2VyIGRhdGEgc3RyZWFtLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+Rm9yIHdyaXRpbmcsIHRoZSBsaWJyYXJ5IHRha2VzIGFuIG9wZW4gZmlsZSBoYW5kbGUsCi0gIHdyaXRlcyBjb21wcmVzc2VkIGRhdGEgdG8gaXQsCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmZsdXNoPC9jb2RlPmVzIGl0IGJ1dCBkb2VzIG5vdAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZjbG9zZTwvY29kZT4gaXQuICBUaGUgY2FsbGluZwotICBhcHBsaWNhdGlvbiBjYW4gd3JpdGUgaXRzIG93biBkYXRhIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCi0gIGNvbXByZXNzZWQgZGF0YSBzdHJlYW0sIHVzaW5nIHRoYXQgc2FtZSBmaWxlIGhhbmRsZS48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5SZWFkaW5nIGlzIG1vcmUgY29tcGxleCwgYW5kIHRoZSBmYWNpbGl0aWVzIGFyZSBub3QgYXMKLSAgZ2VuZXJhbCBhcyB0aGV5IGNvdWxkIGJlIHNpbmNlIGdlbmVyYWxpdHkgaXMgaGFyZCB0byByZWNvbmNpbGUKLSAgd2l0aCBlZmZpY2llbmN5LiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPgotICByZWFkcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgaW4gYmxvY2tzIG9mIHNpemUKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NQVhfVU5VU0VEPC9jb2RlPiBieXRlcywgYW5kIGluCi0gIGRvaW5nIHNvIHByb2JhYmx5IHdpbGwgb3ZlcnNob290IHRoZSBsb2dpY2FsIGVuZCBvZiBjb21wcmVzc2VkCi0gIHN0cmVhbS4gIFRvIHJlY292ZXIgdGhpcyBkYXRhIG9uY2UgZGVjb21wcmVzc2lvbiBoYXMgZW5kZWQsCi0gIGNhbGwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb2RlPiBhZnRlcgotICB0aGUgbGFzdCBjYWxsIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4KLSAgKHRoZSBvbmUgcmV0dXJuaW5nCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4pIGJ1dCBiZWZvcmUKLSAgY2FsbGluZwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT4uPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+VGhpcyBtZWNoYW5pc20gbWFrZXMgaXQgZWFzeSB0byBkZWNvbXByZXNzIG11bHRpcGxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBzdHJlYW1zIHBsYWNlZCBlbmQtdG8tZW5kLgotQXMgdGhlIGVuZCBvZiBvbmUgc3RyZWFtLCB3aGVuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+IHJldHVybnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4sIGNhbGwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT4gdG8gY29sbGVjdAotdGhlIHVudXNlZCBkYXRhIChjb3B5IGl0IGludG8geW91ciBvd24gYnVmZmVyIHNvbWV3aGVyZSkuICBUaGF0Ci1kYXRhIGZvcm1zIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21wcmVzc2VkIHN0cmVhbS4gIFRvIHN0YXJ0Ci11bmNvbXByZXNzaW5nIHRoYXQgbmV4dCBzdHJlYW0sIGNhbGwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+IGFnYWluLCBmZWVkaW5nIGluCi10aGUgdW51c2VkIGRhdGEgdmlhIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnVudXNlZDwvY29kZT4gLwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uVW51c2VkPC9jb2RlPiBwYXJhbWV0ZXJzLiAgS2VlcCBkb2luZwotdGhpcyB1bnRpbCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IHJldHVybgotY29pbmNpZGVzIHdpdGggdGhlIHBoeXNpY2FsIGVuZCBvZiBmaWxlCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZW9mKGYpPC9jb2RlPikuICBJbiB0aGlzIHNpdHVhdGlvbgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb2RlPiB3aWxsIG9mCi1jb3Vyc2UgcmV0dXJuIG5vIGRhdGEuPC9wPgotPHA+VGhpcyBzaG91bGQgZ2l2ZSBzb21lIGZlZWwgZm9yIGhvdyB0aGUgaGlnaC1sZXZlbCBpbnRlcmZhY2UKLWNhbiBiZSB1c2VkLiAgSWYgeW91IHJlcXVpcmUgZXh0cmEgZmxleGliaWxpdHksIHlvdSdsbCBoYXZlIHRvCi1iaXRlIHRoZSBidWxsZXQgYW5kIGdldCB0byBncmlwcyB3aXRoIHRoZSBsb3ctbGV2ZWwKLWludGVyZmFjZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9InN0ZC1yZHdyIj48L2E+My40LjkuoFN0YW5kYXJkIGZpbGUtcmVhZGluZy93cml0aW5nIGNvZGU8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+SGVyZSdzIGhvdyB5b3UnZCB3cml0ZSBkYXRhIHRvIGEgY29tcHJlc3NlZCBmaWxlOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5GSUxFKiAgIGY7Ci1CWkZJTEUqIGI7Ci1pbnQgICAgIG5CdWY7Ci1jaGFyICAgIGJ1ZlsgLyogd2hhdGV2ZXIgc2l6ZSB5b3UgbGlrZSAqLyBdOwotaW50ICAgICBiemVycm9yOwotaW50ICAgICBuV3JpdHRlbjsKLQotZiA9IGZvcGVuICggIm15ZmlsZS5iejIiLCAidyIgKTsKLWlmICggIWYgKSB7Ci0gLyogaGFuZGxlIGVycm9yICovCi19Ci1iID0gQloyX2J6V3JpdGVPcGVuKCAmYW1wO2J6ZXJyb3IsIGYsIDkgKTsKLWlmIChiemVycm9yICE9IEJaX09LKSB7Ci0gQloyX2J6V3JpdGVDbG9zZSAoIGIgKTsKLSAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLQotd2hpbGUgKCAvKiBjb25kaXRpb24gKi8gKSB7Ci0gLyogZ2V0IGRhdGEgdG8gd3JpdGUgaW50byBidWYsIGFuZCBzZXQgbkJ1ZiBhcHByb3ByaWF0ZWx5ICovCi0gbldyaXR0ZW4gPSBCWjJfYnpXcml0ZSAoICZhbXA7YnplcnJvciwgYiwgYnVmLCBuQnVmICk7Ci0gaWYgKGJ6ZXJyb3IgPT0gQlpfSU9fRVJST1IpIHsgCi0gICBCWjJfYnpXcml0ZUNsb3NlICggJmFtcDtiemVycm9yLCBiICk7Ci0gICAvKiBoYW5kbGUgZXJyb3IgKi8KLSB9Ci19Ci0KLUJaMl9ieldyaXRlQ2xvc2UoICZhbXA7YnplcnJvciwgYiApOwotaWYgKGJ6ZXJyb3IgPT0gQlpfSU9fRVJST1IpIHsKLSAvKiBoYW5kbGUgZXJyb3IgKi8KLX08L3ByZT4KLTxwPkFuZCB0byByZWFkIGZyb20gYSBjb21wcmVzc2VkIGZpbGU6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkZJTEUqICAgZjsKLUJaRklMRSogYjsKLWludCAgICAgbkJ1ZjsKLWNoYXIgICAgYnVmWyAvKiB3aGF0ZXZlciBzaXplIHlvdSBsaWtlICovIF07Ci1pbnQgICAgIGJ6ZXJyb3I7Ci1pbnQgICAgIG5Xcml0dGVuOwotCi1mID0gZm9wZW4gKCAibXlmaWxlLmJ6MiIsICJyIiApOwotaWYgKCAhZiApIHsKLSAgLyogaGFuZGxlIGVycm9yICovCi19Ci1iID0gQloyX2J6UmVhZE9wZW4gKCAmYW1wO2J6ZXJyb3IsIGYsIDAsIE5VTEwsIDAgKTsKLWlmICggYnplcnJvciAhPSBCWl9PSyApIHsKLSAgQloyX2J6UmVhZENsb3NlICggJmFtcDtiemVycm9yLCBiICk7Ci0gIC8qIGhhbmRsZSBlcnJvciAqLwotfQotCi1iemVycm9yID0gQlpfT0s7Ci13aGlsZSAoIGJ6ZXJyb3IgPT0gQlpfT0sgJmFtcDsmYW1wOyAvKiBhcmJpdHJhcnkgb3RoZXIgY29uZGl0aW9ucyAqLykgewotICBuQnVmID0gQloyX2J6UmVhZCAoICZhbXA7YnplcnJvciwgYiwgYnVmLCAvKiBzaXplIG9mIGJ1ZiAqLyApOwotICBpZiAoIGJ6ZXJyb3IgPT0gQlpfT0sgKSB7Ci0gICAgLyogZG8gc29tZXRoaW5nIHdpdGggYnVmWzAgLi4gbkJ1Zi0xXSAqLwotICB9Ci19Ci1pZiAoIGJ6ZXJyb3IgIT0gQlpfU1RSRUFNX0VORCApIHsKLSAgIEJaMl9ielJlYWRDbG9zZSAoICZhbXA7YnplcnJvciwgYiApOwotICAgLyogaGFuZGxlIGVycm9yICovCi19IGVsc2UgewotICAgQloyX2J6UmVhZENsb3NlICggJmFtcDtiemVycm9yLCBiICk7Ci19PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJ1dGlsLWZucyI+PC9hPjMuNS6gVXRpbGl0eSBmdW5jdGlvbnM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpidWZmdG9idWZmY29tcHJlc3MiPjwvYT4zLjUuMS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6QnVmZlRvQnVmZkNvbXByZXNzKCBjaGFyKiAgICAgICAgIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGRlc3RMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgc291cmNlTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICBibG9ja1NpemUxMDBrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICB2ZXJib3NpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHdvcmtGYWN0b3IgKTs8L3ByZT4KLTxwPkF0dGVtcHRzIHRvIGNvbXByZXNzIHRoZSBkYXRhIGluIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c291cmNlWzAKLS4uIHNvdXJjZUxlbi0xXTwvY29kZT4gaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kZXN0WzAgLi4gKmRlc3RMZW4tMV08L2NvZGU+LiAgSWYgdGhlCi1kZXN0aW5hdGlvbiBidWZmZXIgaXMgYmlnIGVub3VnaCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KmRlc3RMZW48L2NvZGU+IGlzIHNldCB0byB0aGUgc2l6ZSBvZgotdGhlIGNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT0s8L2NvZGU+Ci1pcyByZXR1cm5lZC4gIElmIHRoZSBjb21wcmVzc2VkIGRhdGEgd29uJ3QgZml0LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qZGVzdExlbjwvY29kZT4gaXMgdW5jaGFuZ2VkLCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT1VUQlVGRl9GVUxMPC9jb2RlPiBpcwotcmV0dXJuZWQuPC9wPgotPHA+Q29tcHJlc3Npb24gaW4gdGhpcyBtYW5uZXIgaXMgYSBvbmUtc2hvdCBldmVudCwgZG9uZSB3aXRoIGEKLXNpbmdsZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uICBUaGUgcmVzdWx0aW5nIGNvbXByZXNzZWQgZGF0YSBpcyBhCi1jb21wbGV0ZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBmb3JtYXQgZGF0YQotc3RyZWFtLiAgVGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBtYWtpbmcgYWRkaXRpb25hbCBjYWxscyB0bwotcHJvdmlkZSBleHRyYSBpbnB1dCBkYXRhLiAgSWYgeW91IHdhbnQgdGhhdCBraW5kIG9mIG1lY2hhbmlzbSwKLXVzZSB0aGUgbG93LWxldmVsIGludGVyZmFjZS48L3A+Ci08cD5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVycwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5ibG9ja1NpemUxMDBrPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dmVyYm9zaXR5PC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+d29ya0ZhY3RvcjwvY29kZT4sIHNlZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+LjwvcD4KLTxwPlRvIGd1YXJhbnRlZSB0aGF0IHRoZSBjb21wcmVzc2VkIGRhdGEgd2lsbCBmaXQgaW4gaXRzCi1idWZmZXIsIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgb2Ygc2l6ZSAxJSBsYXJnZXIgdGhhbiB0aGUKLXVuY29tcHJlc3NlZCBkYXRhLCBwbHVzIHNpeCBodW5kcmVkIGV4dHJhIGJ5dGVzLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+Ci13aWxsIG5vdCB3cml0ZSBkYXRhIGF0IG9yIGJleW9uZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kZXN0WypkZXN0TGVuXTwvY29kZT4sIGV2ZW4gaW4gY2FzZSBvZgotYnVmZmVyIG92ZXJmbG93LjwvcD4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGRlc3QgaXMgTlVMTCBvciBkZXN0TGVuIGlzIE5VTEwKLSAgb3IgYmxvY2tTaXplMTAwayAmbHQ7IDEgb3IgYmxvY2tTaXplMTAwayAmZ3Q7IDkKLSAgb3IgdmVyYm9zaXR5ICZsdDsgMCBvciB2ZXJib3NpdHkgJmd0OyA0Ci0gIG9yIHdvcmtGYWN0b3IgJmx0OyAwIG9yIHdvcmtGYWN0b3IgJmd0OyAyNTAKLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZSAKLUJaX09VVEJVRkZfRlVMTAotICBpZiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGV4Y2VlZHMgKmRlc3RMZW4KLUJaX09LCi0gIG90aGVyd2lzZTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiemJ1ZmZ0b2J1ZmZkZWNvbXByZXNzIj48L2E+My41LjIuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MoIGNoYXIqICAgICAgICAgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICBzb3VyY2VMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgc21hbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgdmVyYm9zaXR5ICk7PC9wcmU+Ci08cD5BdHRlbXB0cyB0byBkZWNvbXByZXNzIHRoZSBkYXRhIGluIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c291cmNlWzAKLS4uIHNvdXJjZUxlbi0xXTwvY29kZT4gaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kZXN0WzAgLi4gKmRlc3RMZW4tMV08L2NvZGU+LiAgSWYgdGhlCi1kZXN0aW5hdGlvbiBidWZmZXIgaXMgYmlnIGVub3VnaCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KmRlc3RMZW48L2NvZGU+IGlzIHNldCB0byB0aGUgc2l6ZSBvZgotdGhlIHVuY29tcHJlc3NlZCBkYXRhLCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT4KLWlzIHJldHVybmVkLiAgSWYgdGhlIGNvbXByZXNzZWQgZGF0YSB3b24ndCBmaXQsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipkZXN0TGVuPC9jb2RlPiBpcyB1bmNoYW5nZWQsIGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PVVRCVUZGX0ZVTEw8L2NvZGU+IGlzCi1yZXR1cm5lZC48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNvdXJjZTwvY29kZT4gaXMgYXNzdW1lZCB0byBob2xkCi1hIGNvbXBsZXRlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGZvcm1hdCBkYXRhCi1zdHJlYW0uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPiB0cmllcwotdG8gZGVjb21wcmVzcyB0aGUgZW50aXJldHkgb2YgdGhlIHN0cmVhbSBpbnRvIHRoZSBvdXRwdXQKLWJ1ZmZlci48L3A+Ci08cD5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVycwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zbWFsbDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4sIHNlZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT4uPC9wPgotPHA+QmVjYXVzZSB0aGUgY29tcHJlc3Npb24gcmF0aW8gb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBjYW5ub3QKLWJlIGtub3duIGluIGFkdmFuY2UsIHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHRoZQotb3V0cHV0IGJ1ZmZlciB3aWxsIGJlIGJpZyBlbm91Z2guICBZb3UgbWF5IG9mIGNvdXJzZSBtYWtlCi1hcnJhbmdlbWVudHMgaW4geW91ciBjb2RlIHRvIHJlY29yZCB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkCi1kYXRhLCBidXQgc3VjaCBhIG1lY2hhbmlzbSBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMKLWxpYnJhcnkuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29kZT4KLXdpbGwgbm90IHdyaXRlIGRhdGEgYXQgb3IgYmV5b25kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmRlc3RbKmRlc3RMZW5dPC9jb2RlPiwgZXZlbiBpbiBjYXNlIG9mCi1idWZmZXIgb3ZlcmZsb3cuPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgZGVzdCBpcyBOVUxMIG9yIGRlc3RMZW4gaXMgTlVMTAotICBvciBzbWFsbCAhPSAwICZhbXA7JmFtcDsgc21hbGwgIT0gMQotICBvciB2ZXJib3NpdHkgJmx0OyAwIG9yIHZlcmJvc2l0eSAmZ3Q7IDQKLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZSAKLUJaX09VVEJVRkZfRlVMTAotICBpZiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGV4Y2VlZHMgKmRlc3RMZW4KLUJaX0RBVEFfRVJST1IKLSAgaWYgYSBkYXRhIGludGVncml0eSBlcnJvciB3YXMgZGV0ZWN0ZWQgaW4gdGhlIGNvbXByZXNzZWQgZGF0YQotQlpfREFUQV9FUlJPUl9NQUdJQwotICBpZiB0aGUgY29tcHJlc3NlZCBkYXRhIGRvZXNuJ3QgYmVnaW4gd2l0aCB0aGUgcmlnaHQgbWFnaWMgYnl0ZXMKLUJaX1VORVhQRUNURURfRU9GCi0gIGlmIHRoZSBjb21wcmVzc2VkIGRhdGEgZW5kcyB1bmV4cGVjdGVkbHkKLUJaX09LCi0gIG90aGVyd2lzZTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0iemxpYi1jb21wYXQiPjwvYT4zLjYuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+emxpYjwvY29kZT4gY29tcGF0aWJpbGl0eSBmdW5jdGlvbnM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+WW9zaGlva2EgVHN1bmVvIGhhcyBjb250cmlidXRlZCBzb21lIGZ1bmN0aW9ucyB0byBnaXZlCi1iZXR0ZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij56bGliPC9jb2RlPiBjb21wYXRpYmlsaXR5LgotVGhlc2UgZnVuY3Rpb25zIGFyZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iem9wZW48L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpyZWFkPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6d3JpdGU8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpmbHVzaDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemNsb3NlPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6ZXJyb3I8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpsaWJWZXJzaW9uPC9jb2RlPi4gIFRoZXNlCi1mdW5jdGlvbnMgYXJlIG5vdCAoeWV0KSBvZmZpY2lhbGx5IHBhcnQgb2YgdGhlIGxpYnJhcnkuICBJZiB0aGV5Ci1icmVhaywgeW91IGdldCB0byBrZWVwIGFsbCB0aGUgcGllY2VzLiAgTmV2ZXJ0aGVsZXNzLCBJIHRoaW5rCi10aGV5IHdvcmsgb2suPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgdm9pZCBCWkZJTEU7Ci0KLWNvbnN0IGNoYXIgKiBCWjJfYnpsaWJWZXJzaW9uICggdm9pZCApOzwvcHJlPgotPHA+UmV0dXJucyBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBsaWJyYXJ5IHZlcnNpb24uPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaRklMRSAqIEJaMl9iem9wZW4gICggY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSApOwotQlpGSUxFICogQloyX2J6ZG9wZW4gKCBpbnQgICAgICAgIGZkLCAgICBjb25zdCBjaGFyICptb2RlICk7PC9wcmU+Ci08cD5PcGVucyBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4gZmlsZSBmb3IKLXJlYWRpbmcgb3Igd3JpdGluZywgdXNpbmcgZWl0aGVyIGl0cyBuYW1lIG9yIGEgcHJlLWV4aXN0aW5nIGZpbGUKLWRlc2NyaXB0b3IuICBBbmFsb2dvdXMgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mb3BlbjwvY29kZT4KLWFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZkb3BlbjwvY29kZT4uPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpyZWFkICAoIEJaRklMRSogYiwgdm9pZCogYnVmLCBpbnQgbGVuICk7Ci1pbnQgQloyX2J6d3JpdGUgKCBCWkZJTEUqIGIsIHZvaWQqIGJ1ZiwgaW50IGxlbiApOzwvcHJlPgotPHA+UmVhZHMvd3JpdGVzIGRhdGEgZnJvbS90byBhIHByZXZpb3VzbHkgb3BlbmVkCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaRklMRTwvY29kZT4uICBBbmFsb2dvdXMgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlYWQ8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5md3JpdGU8L2NvZGU+LjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgIEJaMl9iemZsdXNoICggQlpGSUxFKiBiICk7Ci12b2lkIEJaMl9iemNsb3NlICggQlpGSUxFKiBiICk7PC9wcmU+Ci08cD5GbHVzaGVzL2Nsb3NlcyBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpGSUxFPC9jb2RlPi4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Zmx1c2g8L2NvZGU+IGRvZXNuJ3QgYWN0dWFsbHkgZG8KLWFueXRoaW5nLiAgQW5hbG9nb3VzIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmZsdXNoPC9jb2RlPgotYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmNsb3NlPC9jb2RlPi48L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgY2hhciAqIEJaMl9iemVycm9yICggQlpGSUxFICpiLCBpbnQgKmVycm51bSApPC9wcmU+Ci08cD5SZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIG1vcmUgcmVjZW50IGVycm9yIHN0YXR1cyBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iPC9jb2RlPiwgYW5kIGFsc28gc2V0cwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qZXJybnVtPC9jb2RlPiB0byBpdHMgbnVtZXJpY2FsCi12YWx1ZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ic3RkaW8tZnJlZSI+PC9hPjMuNy6gVXNpbmcgdGhlIGxpYnJhcnkgaW4gYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPi1mcmVlIGVudmlyb25tZW50PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9InN0ZGlvLWJ5ZSI+PC9hPjMuNy4xLqBHZXR0aW5nIHJpZCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5JbiBhIGRlZXBseSBlbWJlZGRlZCBhcHBsaWNhdGlvbiwgeW91IG1pZ2h0IHdhbnQgdG8gdXNlCi1qdXN0IHRoZSBtZW1vcnktdG8tbWVtb3J5IGZ1bmN0aW9ucy4gIFlvdSBjYW4gZG8gdGhpcwotY29udmVuaWVudGx5IGJ5IGNvbXBpbGluZyB0aGUgbGlicmFyeSB3aXRoIHByZXByb2Nlc3NvciBzeW1ib2wKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTk9fU1RESU88L2NvZGU+IGRlZmluZWQuICBEb2luZyB0aGlzCi1naXZlcyB5b3UgYSBsaWJyYXJ5IGNvbnRhaW5pbmcgb25seSB0aGUgZm9sbG93aW5nIGVpZ2h0Ci1mdW5jdGlvbnM6PC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb2RlPgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29kZT48L3A+Ci08cD5XaGVuIGNvbXBpbGVkIGxpa2UgdGhpcywgYWxsIGZ1bmN0aW9ucyB3aWxsIGlnbm9yZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52ZXJib3NpdHk8L2NvZGU+IHNldHRpbmdzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iY3JpdGljYWwtZXJyb3IiPjwvYT4zLjcuMi6gQ3JpdGljYWwgZXJyb3IgaGFuZGxpbmc8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4gY29udGFpbnMgYSBudW1iZXIKLW9mIGludGVybmFsIGFzc2VydGlvbiBjaGVja3Mgd2hpY2ggc2hvdWxkLCBuZWVkbGVzcyB0byBzYXksIG5ldmVyCi1iZSBhY3RpdmF0ZWQuICBOZXZlcnRoZWxlc3MsIGlmIGFuIGFzc2VydGlvbiBzaG91bGQgZmFpbCwKLWJlaGF2aW91ciBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBsaWJyYXJ5IHdhcyBjb21waWxlZCB3aXRoCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX05PX1NURElPPC9jb2RlPiBzZXQuPC9wPgotPHA+Rm9yIGEgbm9ybWFsIGNvbXBpbGUsIGFuIGFzc2VydGlvbiBmYWlsdXJlIHlpZWxkcyB0aGUKLW1lc3NhZ2U6PC9wPgotPGRpdiBjbGFzcz0iYmxvY2txdW90ZSI+PGJsb2NrcXVvdGUgY2xhc3M9ImJsb2NrcXVvdGUiPgotPHA+YnppcDIvbGliYnppcDI6IGludGVybmFsIGVycm9yIG51bWJlciBOLjwvcD4KLTxwPlRoaXMgaXMgYSBidWcgaW4gYnppcDIvbGliYnppcDIsIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcuCi1QbGVhc2UgcmVwb3J0IGl0IHRvIG1lIGF0OiBqc2V3YXJkQGJ6aXAub3JnLiAgSWYgdGhpcyBoYXBwZW5lZAotd2hlbiB5b3Ugd2VyZSB1c2luZyBzb21lIHByb2dyYW0gd2hpY2ggdXNlcyBsaWJiemlwMiBhcyBhCi1jb21wb25lbnQsIHlvdSBzaG91bGQgYWxzbyByZXBvcnQgdGhpcyBidWcgdG8gdGhlIGF1dGhvcihzKQotb2YgdGhhdCBwcm9ncmFtLiAgUGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHJlcG9ydCB0aGlzIGJ1ZzsKLXRpbWVseSBhbmQgYWNjdXJhdGUgYnVnIHJlcG9ydHMgZXZlbnR1YWxseSBsZWFkIHRvIGhpZ2hlcgotcXVhbGl0eSBzb2Z0d2FyZS4gIFRoYW5rcy4gIEp1bGlhbiBTZXdhcmQsIDEwIERlY2VtYmVyIDIwMDcuCi08L3A+Ci08L2Jsb2NrcXVvdGU+PC9kaXY+Ci08cD53aGVyZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPk48L2NvZGU+IGlzIHNvbWUgZXJyb3IgY29kZQotbnVtYmVyLiAgSWYgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5OID09IDEwMDc8L2NvZGU+LCBpdCBhbHNvCi1wcmludHMgc29tZSBleHRyYSB0ZXh0IGFkdmlzaW5nIHRoZSByZWFkZXIgdGhhdCB1bnJlbGlhYmxlIG1lbW9yeQotaXMgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIGludGVybmFsIGVycm9yIDEwMDcuIChUaGlzIGlzIGEKLWZyZXF1ZW50bHktb2JzZXJ2ZWQtcGhlbm9tZW5vbiB3aXRoIHZlcnNpb25zIDEuMC4wLzEuMC4xKS48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmV4aXQoMyk8L2NvZGU+IGlzIHRoZW4KLWNhbGxlZC48L3A+Ci08cD5Gb3IgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPi1mcmVlIGxpYnJhcnksCi1hc3NlcnRpb24gZmFpbHVyZXMgcmVzdWx0IGluIGEgY2FsbCB0byBhIGZ1bmN0aW9uIGRlY2xhcmVkCi1hczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ZXh0ZXJuIHZvaWQgYnpfaW50ZXJuYWxfZXJyb3IgKCBpbnQgZXJyY29kZSApOzwvcHJlPgotPHA+VGhlIHJlbGV2YW50IGNvZGUgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLiAgWW91IHNob3VsZAotc3VwcGx5IHN1Y2ggYSBmdW5jdGlvbi48L3A+Ci08cD5JbiBlaXRoZXIgY2FzZSwgb25jZSBhbiBhc3NlcnRpb24gZmFpbHVyZSBoYXMgb2NjdXJyZWQsIGFueQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iel9zdHJlYW08L2NvZGU+IHJlY29yZHMgaW52b2x2ZWQgY2FuCi1iZSByZWdhcmRlZCBhcyBpbnZhbGlkLiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byByZXN1bWUgbm9ybWFsCi1vcGVyYXRpb24gd2l0aCB0aGVtLjwvcD4KLTxwPllvdSBtYXksIG9mIGNvdXJzZSwgY2hhbmdlIGNyaXRpY2FsIGVycm9yIGhhbmRsaW5nIHRvIHN1aXQKLXlvdXIgbmVlZHMuICBBcyBJIHNhaWQgYWJvdmUsIGNyaXRpY2FsIGVycm9ycyBpbmRpY2F0ZSBidWdzIGluCi10aGUgbGlicmFyeSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIEFsbCAibm9ybWFsIiBlcnJvciBzaXR1YXRpb25zCi1hcmUgaW5kaWNhdGVkIHZpYSBlcnJvciByZXR1cm4gY29kZXMgZnJvbSBmdW5jdGlvbnMsIGFuZCBjYW4gYmUKLXJlY292ZXJlZCBmcm9tLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9Indpbi1kbGwiPjwvYT4zLjguoE1ha2luZyBhIFdpbmRvd3MgRExMPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBXaW5kb3dzIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJ5Ci1Zb3NoaW9rYSBUc3VuZW8KLSg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRzdW5lb0Byci5paWo0dS5vci5qcDwvY29kZT4pLCBzbwoteW91IHNob3VsZCBzZW5kIHlvdXIgcXVlcmllcyB0byBoaW0gKGJ1dCBwZXJoYXBzIENjOiBtZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+anNld2FyZEBiemlwLm9yZzwvY29kZT4pLjwvcD4KLTxwPk15IHZhZ3VlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0byBkbyBpczogdXNpbmcgVmlzdWFsIEMrKwotNS4wLCBvcGVuIHRoZSBwcm9qZWN0IGZpbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnoyLmRzcDwvY29kZT4sIGFuZCBidWlsZC4gIFRoYXQncwotYWxsLjwvcD4KLTxwPklmIHlvdSBjYW4ndCBvcGVuIHRoZSBwcm9qZWN0IGZpbGUgZm9yIHNvbWUgcmVhc29uLCBtYWtlIGEKLW5ldyBvbmUsIG5hbWluZyB0aGVzZSBmaWxlczoKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YmxvY2tzb3J0LmM8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemxpYi5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Y29tcHJlc3MuYzwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmNyY3RhYmxlLmM8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kZWNvbXByZXNzLmM8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5odWZmbWFuLmM8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5yYW5kdGFibGUuYzwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6Mi5kZWY8L2NvZGU+LiAgWW91IHdpbGwgYWxzbyBuZWVkCi10byBuYW1lIHRoZSBoZWFkZXIgZmlsZXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemxpYi5oPC9jb2RlPgotYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWJfcHJpdmF0ZS5oPC9jb2RlPi48L3A+Ci08cD5JZiB5b3UgZG9uJ3QgdXNlIFZDKyssIHlvdSBtYXkgbmVlZCB0byBkZWZpbmUgdGhlCi1wcm9wcm9jZXNzb3Igc3ltYm9sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPl9XSU4zMjwvY29kZT4uPC9wPgotPHA+RmluYWxseSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kbGx0ZXN0LmM8L2NvZGU+IGlzIGEKLXNhbXBsZSBwcm9ncmFtIHVzaW5nIHRoZSBETEwuICBJdCBoYXMgYSBwcm9qZWN0IGZpbGUsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmRsbHRlc3QuZHNwPC9jb2RlPi48L3A+Ci08cD5JZiB5b3UganVzdCB3YW50IGEgbWFrZWZpbGUgZm9yIFZpc3VhbCBDLCBoYXZlIGEgbG9vayBhdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5tYWtlZmlsZS5tc2M8L2NvZGU+LjwvcD4KLTxwPkJlIGF3YXJlIHRoYXQgaWYgeW91IGNvbXBpbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGl0c2VsZiBvbiBXaW4zMiwgeW91IG11c3QKLXNldCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1VOSVg8L2NvZGU+IHRvIDAgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0xDQ1dJTjMyPC9jb2RlPiB0byAxLCBpbiB0aGUgZmlsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMi5jPC9jb2RlPiwgYmVmb3JlIGNvbXBpbGluZy4KLU90aGVyd2lzZSB0aGUgcmVzdWx0aW5nIGJpbmFyeSB3b24ndCB3b3JrIGNvcnJlY3RseS48L3A+Ci08cD5JIGhhdmVuJ3QgdHJpZWQgYW55IG9mIHRoaXMgc3R1ZmYgbXlzZWxmLCBidXQgaXQgYWxsIGxvb2tzCi1wbGF1c2libGUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0ibWlzYyI+PC9hPjQuoE1pc2NlbGxhbmVhPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+Ci08cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Ci08ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjbGltaXRzIj40LjEuIExpbWl0YXRpb25zIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3BvcnQtaXNzdWVzIj40LjIuIFBvcnRhYmlsaXR5IGlzc3VlczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNidWdzIj40LjMuIFJlcG9ydGluZyBidWdzPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3BhY2thZ2UiPjQuNC4gRGlkIHlvdSBnZXQgdGhlIHJpZ2h0IHBhY2thZ2U/PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3JlYWRpbmciPjQuNS4gRnVydGhlciBSZWFkaW5nPC9hPjwvc3Bhbj48L2R0PgotPC9kbD4KLTwvZGl2PgotPHA+VGhlc2UgYXJlIGp1c3Qgc29tZSByYW5kb20gdGhvdWdodHMgb2YgbWluZS4gIFlvdXIgbWlsZWFnZQotbWF5IHZhcnkuPC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJsaW1pdHMiPjwvYT40LjEuoExpbWl0YXRpb25zIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDItMS4wLlg8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4wLjkuNTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjAuOS4wPC9jb2RlPiB1c2UgZXhhY3RseSB0aGUgc2FtZSBmaWxlCi1mb3JtYXQgYXMgdGhlIG9yaWdpbmFsIHZlcnNpb24sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLTAuMTwvY29kZT4uICBUaGlzIGRlY2lzaW9uIHdhcwotbWFkZSBpbiB0aGUgaW50ZXJlc3RzIG9mIHN0YWJpbGl0eS4gIENyZWF0aW5nIHlldCBhbm90aGVyCi1pbmNvbXBhdGlibGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdCB3b3VsZCBjcmVhdGUgZnVydGhlcgotY29uZnVzaW9uIGFuZCBkaXNydXB0aW9uIGZvciB1c2Vycy48L3A+Ci08cD5OZXZlcnRoZWxlc3MsIHRoaXMgaXMgbm90IGEgcGFpbmxlc3MgZGVjaXNpb24uICBEZXZlbG9wbWVudAotd29yayBzaW5jZSB0aGUgcmVsZWFzZSBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMi0wLjE8L2NvZGU+IGluIEF1Z3VzdCAxOTk3IGhhcwotc2hvd24gY29tcGxleGl0aWVzIGluIHRoZSBmaWxlIGZvcm1hdCB3aGljaCBzbG93IGRvd24KLWRlY29tcHJlc3Npb24gYW5kLCBpbiByZXRyb3NwZWN0LCBhcmUgdW5uZWNlc3NhcnkuICBUaGVzZQotYXJlOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+VGhlIHJ1bi1sZW5ndGggZW5jb2Rlciwgd2hpY2ggaXMgdGhlIGZpcnN0IG9mIHRoZQotICAgY29tcHJlc3Npb24gdHJhbnNmb3JtYXRpb25zLCBpcyBlbnRpcmVseSBpcnJlbGV2YW50LiAgVGhlCi0gICBvcmlnaW5hbCBwdXJwb3NlIHdhcyB0byBwcm90ZWN0IHRoZSBzb3J0aW5nIGFsZ29yaXRobSBmcm9tIHRoZQotICAgdmVyeSB3b3JzdCBjYXNlIGlucHV0OiBhIHN0cmluZyBvZiByZXBlYXRlZCBzeW1ib2xzLiAgQnV0Ci0gICBhbGdvcml0aG0gc3RlcHMgUTZhIGFuZCBRNmIgaW4gdGhlIG9yaWdpbmFsIEJ1cnJvd3MtV2hlZWxlcgotICAgdGVjaG5pY2FsIHJlcG9ydCAoU1JDLTEyNCkgc2hvdyBob3cgcmVwZWF0cyBjYW4gYmUgaGFuZGxlZAotICAgd2l0aG91dCBkaWZmaWN1bHR5IGluIGJsb2NrIHNvcnRpbmcuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+Ci08cD5UaGUgcmFuZG9taXNhdGlvbiBtZWNoYW5pc20gZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZQotICAgdGhlcmUuICBVZGkgTWFuYmVyIGFuZCBHZW5lIE15ZXJzIHB1Ymxpc2hlZCBhIHN1ZmZpeCBhcnJheQotICAgY29uc3RydWN0aW9uIGFsZ29yaXRobSBhIGZldyB5ZWFycyBiYWNrLCB3aGljaCBjYW4gYmUgZW1wbG95ZWQKLSAgIHRvIHNvcnQgYW55IGJsb2NrLCBubyBtYXR0ZXIgaG93IHJlcGV0aXRpdmUsIGluIE8oTiBsb2cgTikKLSAgIHRpbWUuICBTdWJzZXF1ZW50IHdvcmsgYnkgS3VuaWhpa28gU2FkYWthbmUgaGFzIHByb2R1Y2VkIGEKLSAgIGRlcml2YXRpdmUgTyhOIChsb2cgTileMikgYWxnb3JpdGhtIHdoaWNoIHVzdWFsbHkgb3V0cGVyZm9ybXMKLSAgIHRoZSBNYW5iZXItTXllcnMgYWxnb3JpdGhtLjwvcD4KLTxwPkkgY291bGQgaGF2ZSBjaGFuZ2VkIHRvIFNhZGFrYW5lJ3MgYWxnb3JpdGhtLCBidXQgSSBmaW5kCi0gICBpdCB0byBiZSBzbG93ZXIgdGhhbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPidzCi0gICBleGlzdGluZyBhbGdvcml0aG0gZm9yIG1vc3QgaW5wdXRzLCBhbmQgdGhlIHJhbmRvbWlzYXRpb24KLSAgIG1lY2hhbmlzbSBwcm90ZWN0cyBhZGVxdWF0ZWx5IGFnYWluc3QgYmFkIGNhc2VzLiAgSSBkaWRuJ3QKLSAgIHRoaW5rIGl0IHdhcyBhIGdvb2QgdHJhZGVvZmYgdG8gbWFrZS4gIFBhcnRseSB0aGlzIGlzIGR1ZSB0bwotICAgdGhlIGZhY3QgdGhhdCBJIHdhcyBub3QgZmxvb2RlZCB3aXRoIGVtYWlsIGNvbXBsYWludHMgYWJvdXQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDItMC4xPC9jb2RlPidzIHBlcmZvcm1hbmNlIG9uCi0gICByZXBldGl0aXZlIGRhdGEsIHNvIHBlcmhhcHMgaXQgaXNuJ3QgYSBwcm9ibGVtIGZvciByZWFsCi0gICBpbnB1dHMuPC9wPgotPHA+UHJvYmFibHkgdGhlIGJlc3QgbG9uZy10ZXJtIHNvbHV0aW9uLCBhbmQgdGhlIG9uZSBJIGhhdmUKLSAgIGluY29ycG9yYXRlZCBpbnRvIDAuOS41IGFuZCBhYm92ZSwgaXMgdG8gdXNlIHRoZSBleGlzdGluZwotICAgc29ydGluZyBhbGdvcml0aG0gaW5pdGlhbGx5LCBhbmQgZmFsbCBiYWNrIHRvIGEgTyhOIChsb2cgTileMikKLSAgIGFsZ29yaXRobSBpZiB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtIGdldHMgaW50bwotICAgZGlmZmljdWx0aWVzLjwvcD4KLTwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+VGhlIGNvbXByZXNzZWQgZmlsZSBmb3JtYXQgd2FzIG5ldmVyIGRlc2lnbmVkIHRvIGJlCi0gICBoYW5kbGVkIGJ5IGEgbGlicmFyeSwgYW5kIEkgaGF2ZSBoYWQgdG8ganVtcCB0aG91Z2ggc29tZSBob29wcwotICAgdG8gcHJvZHVjZSBhbiBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2YgZGVjb21wcmVzc2lvbi4gIEl0J3MKLSAgIGEgYml0IGhhaXJ5LiAgVHJ5IHBhc3NpbmcKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVjb21wcmVzcy5jPC9jb2RlPiB0aHJvdWdoIHRoZSBDCi0gICBwcmVwcm9jZXNzb3IgYW5kIHlvdSdsbCBzZWUgd2hhdCBJIG1lYW4uICBNdWNoIG9mIHRoaXMKLSAgIGNvbXBsZXhpdHkgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQgaWYgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZgotICAgZWFjaCBibG9jayBvZiBkYXRhIHdhcyByZWNvcmRlZCBpbiB0aGUgZGF0YSBzdHJlYW0uPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+QW4gQWRsZXItMzIgY2hlY2tzdW0sIHJhdGhlciB0aGFuIGEgQ1JDMzIgY2hlY2tzdW0sCi0gICB3b3VsZCBiZSBmYXN0ZXIgdG8gY29tcHV0ZS48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5JdCB3b3VsZCBiZSBmYWlyIHRvIHNheSB0aGF0IHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0IHdhcyBmcm96ZW4gYmVmb3JlIEkKLXByb3Blcmx5IGFuZCBmdWxseSB1bmRlcnN0b29kIHRoZSBwZXJmb3JtYW5jZSBjb25zZXF1ZW5jZXMgb2YKLWRvaW5nIHNvLjwvcD4KLTxwPkltcHJvdmVtZW50cyB3aGljaCBJIHdhcyBhYmxlIHRvIGluY29ycG9yYXRlIGludG8gMC45LjAsCi1kZXNwaXRlIHVzaW5nIHRoZSBzYW1lIGZpbGUgZm9ybWF0LCBhcmU6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5TaW5nbGUgYXJyYXkgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludmVyc2UgQldULiAgVGhpcwotICBzaWduaWZpY2FudGx5IHNwZWVkcyB1cCBkZWNvbXByZXNzaW9uLCBwcmVzdW1hYmx5IGJlY2F1c2UgaXQKLSAgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhY2hlIG1pc3Nlcy48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5GYXN0ZXIgaW52ZXJzZSBNVEYgdHJhbnNmb3JtIGZvciBsYXJnZSBNVEYgdmFsdWVzLgotICBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBub3Rpb24gb2Ygc2xpZGluZyBibG9ja3MKLSAgb2YgdmFsdWVzLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDItMC45LjA8L2NvZGU+IG5vdyByZWFkcwotICBhbmQgd3JpdGVzIGZpbGVzIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mcmVhZDwvY29kZT4KLSAgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZndyaXRlPC9jb2RlPjsgdmVyc2lvbiAwLjEgdXNlZAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnB1dGM8L2NvZGU+IGFuZAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmdldGM8L2NvZGU+LiAgRHVoISAgV2VsbCwgeW91IGxpdmUKLSAgYW5kIGxlYXJuLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPkZ1cnRoZXIgYWhlYWQsIGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBkbyByYW5kb20KLWFjY2VzcyBpbnRvIGZpbGVzLiAgVGhpcyB3aWxsIHJlcXVpcmUgc29tZSBjYXJlZnVsIGRlc2lnbiBvZgotY29tcHJlc3NlZCBmaWxlIGZvcm1hdHMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InBvcnQtaXNzdWVzIj48L2E+NC4yLqBQb3J0YWJpbGl0eSBpc3N1ZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+QWZ0ZXIgc29tZSBjb25zaWRlcmF0aW9uLCBJIGhhdmUgZGVjaWRlZCBub3QgdG8gdXNlIEdOVQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdXRvY29uZjwvY29kZT4gdG8gY29uZmlndXJlIDAuOS41IG9yCi0xLjAuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdXRvY29uZjwvY29kZT4sIGFkbWlyYWJsZSBhbmQKLXdvbmRlcmZ1bCB0aG91Z2ggaXQgaXMsIG1haW5seSBhc3Npc3RzIHdpdGggcG9ydGFiaWxpdHkgcHJvYmxlbXMKLWJldHdlZW4gVW5peC1saWtlIHBsYXRmb3Jtcy4gIEJ1dAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZG9lc24ndCBoYXZlIG11Y2ggaW4gdGhlCi13YXkgb2YgcG9ydGFiaWxpdHkgcHJvYmxlbXMgb24gVW5peDsgbW9zdCBvZiB0aGUgZGlmZmljdWx0aWVzCi1hcHBlYXIgd2hlbiBwb3J0aW5nIHRvIHRoZSBNYWMsIG9yIHRvIE1pY3Jvc29mdCdzIG9wZXJhdGluZwotc3lzdGVtcy4gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXV0b2NvbmY8L2NvZGU+IGRvZXNuJ3QgaGVscAotaW4gdGhvc2UgY2FzZXMsIGFuZCBicmluZ3MgaW4gYSB3aG9sZSBsb2FkIG9mIG5ldwotY29tcGxleGl0eS48L3A+Ci08cD5Nb3N0IHBlb3BsZSBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBsaWJyYXJ5IGFuZAotcHJvZ3JhbSB1bmRlciBVbml4IHN0cmFpZ2h0IG91dC1vZi10aGUtYm94LCBzbyB0byBzcGVhaywKLWVzcGVjaWFsbHkgaWYgeW91IGhhdmUgYSB2ZXJzaW9uIG9mIEdOVSBDIGF2YWlsYWJsZS48L3A+Ci08cD5UaGVyZSBhcmUgYSBjb3VwbGUgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+X19pbmxpbmVfXzwvY29kZT4gZGlyZWN0aXZlcyBpbiB0aGUKLWNvZGUuICBHTlUgQyAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5nY2M8L2NvZGU+KSBzaG91bGQgYmUKLWFibGUgdG8gaGFuZGxlIHRoZW0uICBJZiB5b3UncmUgbm90IHVzaW5nIEdOVSBDLCB5b3VyIEMgY29tcGlsZXIKLXNob3VsZG4ndCBzZWUgdGhlbSBhdCBhbGwuICBJZiB5b3VyIGNvbXBpbGVyIGRvZXMsIGZvciBzb21lCi1yZWFzb24sIHNlZSB0aGVtIGFuZCBkb2Vzbid0IGxpa2UgdGhlbSwganVzdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4jZGVmaW5lPC9jb2RlPgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5fX2lubGluZV9fPC9jb2RlPiB0byBiZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4vKiAqLzwvY29kZT4uICBPbmUgZWFzeSB3YXkgdG8gZG8gdGhpcwotaXMgdG8gY29tcGlsZSB3aXRoIHRoZSBmbGFnCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1EX19pbmxpbmVfXz08L2NvZGU+LCB3aGljaCBzaG91bGQgYmUKLXVuZGVyc3Rvb2QgYnkgbW9zdCBVbml4IGNvbXBpbGVycy48L3A+Ci08cD5JZiB5b3Ugc3RpbGwgaGF2ZSBkaWZmaWN1bHRpZXMsIHRyeSBjb21waWxpbmcgd2l0aCB0aGUKLW1hY3JvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSSUNUX0FOU0k8L2NvZGU+IGRlZmluZWQuCi1UaGlzIHNob3VsZCBlbmFibGUgeW91IHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGluIGEgc3RyaWN0bHkgQU5TSQotY29tcGxpYW50IGVudmlyb25tZW50LiAgQnVpbGRpbmcgdGhlIHByb2dyYW0gaXRzZWxmIGxpa2UgdGhpcyBpcwotZGFuZ2Vyb3VzIGFuZCBub3Qgc3VwcG9ydGVkLCBzaW5jZSB5b3UgcmVtb3ZlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPidzIGNoZWNrcyBhZ2FpbnN0Ci1jb21wcmVzc2luZyBkaXJlY3Rvcmllcywgc3ltYm9saWMgbGlua3MsIGRldmljZXMsIGFuZCBvdGhlcgotbm90LXJlYWxseS1hLWZpbGUgZW50aXRpZXMuICBUaGlzIGNvdWxkIGNhdXNlIGZpbGVzeXN0ZW0KLWNvcnJ1cHRpb24hPC9wPgotPHA+T25lIG90aGVyIHRoaW5nOiBpZiB5b3UgY3JlYXRlIGEKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGJpbmFyeSBmb3IgcHVibGljIGRpc3RyaWJ1dGlvbiwKLXBsZWFzZSBjb25zaWRlciBsaW5raW5nIGl0IHN0YXRpY2FsbHkgKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z2NjCi0tc3RhdGljPC9jb2RlPikuICBUaGlzIGF2b2lkcyBhbGwgc29ydHMgb2YgbGlicmFyeS12ZXJzaW9uCi1pc3N1ZXMgdGhhdCBvdGhlcnMgbWF5IGVuY291bnRlciBsYXRlciBvbi48L3A+Ci08cD5JZiB5b3UgYnVpbGQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gb24KLVdpbjMyLCB5b3UgbXVzdCBzZXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9VTklYPC9jb2RlPiB0byAwCi1hbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9MQ0NXSU4zMjwvY29kZT4gdG8gMSwgaW4gdGhlCi1maWxlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIuYzwvY29kZT4sIGJlZm9yZSBjb21waWxpbmcuCi1PdGhlcndpc2UgdGhlIHJlc3VsdGluZyBiaW5hcnkgd29uJ3Qgd29yayBjb3JyZWN0bHkuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImJ1Z3MiPjwvYT40LjMuoFJlcG9ydGluZyBidWdzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkkgdHJpZWQgcHJldHR5IGhhcmQgdG8gbWFrZSBzdXJlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBpcyBidWcgZnJlZSwgYm90aCBieQotZGVzaWduIGFuZCBieSB0ZXN0aW5nLiAgSG9wZWZ1bGx5IHlvdSdsbCBuZXZlciBuZWVkIHRvIHJlYWQgdGhpcwotc2VjdGlvbiBmb3IgcmVhbC48L3A+Ci08cD5OZXZlcnRoZWxlc3MsIGlmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGRpZXMKLXdpdGggYSBzZWdtZW50YXRpb24gZmF1bHQsIGEgYnVzIGVycm9yIG9yIGFuIGludGVybmFsIGFzc2VydGlvbgotZmFpbHVyZSwgaXQgd2lsbCBhc2sgeW91IHRvIGVtYWlsIG1lIGEgYnVnIHJlcG9ydC4gIEV4cGVyaWVuY2UgZnJvbQoteWVhcnMgb2YgZmVlZGJhY2sgb2YgYnppcDIgdXNlcnMgaW5kaWNhdGVzIHRoYXQgYWxtb3N0IGFsbCB0aGVzZQotcHJvYmxlbXMgY2FuIGJlIHRyYWNlZCB0byBlaXRoZXIgY29tcGlsZXIgYnVncyBvciBoYXJkd2FyZQotcHJvYmxlbXMuPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj4KLTxwPlJlY29tcGlsZSB0aGUgcHJvZ3JhbSB3aXRoIG5vIG9wdGltaXNhdGlvbiwgYW5kCi0gIHNlZSBpZiBpdCB3b3Jrcy4gIEFuZC9vciB0cnkgYSBkaWZmZXJlbnQgY29tcGlsZXIuICBJIGhlYXJkIGFsbAotICBzb3J0cyBvZiBzdG9yaWVzIGFib3V0IHZhcmlvdXMgZmxhdm91cnMgb2YgR05VIEMgKGFuZCBvdGhlcgotICBjb21waWxlcnMpIGdlbmVyYXRpbmcgYmFkIGNvZGUgZm9yCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LCBhbmQgSSd2ZSBydW4gYWNyb3NzIHR3bwotICBzdWNoIGV4YW1wbGVzIG15c2VsZi48L3A+Ci08cD4yLjcuWCB2ZXJzaW9ucyBvZiBHTlUgQyBhcmUga25vd24gdG8gZ2VuZXJhdGUgYmFkIGNvZGUKLSAgZnJvbSB0aW1lIHRvIHRpbWUsIGF0IGhpZ2ggb3B0aW1pc2F0aW9uIGxldmVscy4gIElmIHlvdSBnZXQKLSAgcHJvYmxlbXMsIHRyeSB1c2luZyB0aGUgZmxhZ3MKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tTzI8L2NvZGU+Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWZvbWl0LWZyYW1lLXBvaW50ZXI8L2NvZGU+Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWZuby1zdHJlbmd0aC1yZWR1Y2U8L2NvZGU+LiAgWW91Ci0gIHNob3VsZCBzcGVjaWZpY2FsbHkgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bm90PC9lbT48L3NwYW4+IHVzZQotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1mdW5yb2xsLWxvb3BzPC9jb2RlPi48L3A+Ci08cD5Zb3UgbWF5IG5vdGljZSB0aGF0IHRoZSBNYWtlZmlsZSBydW5zIHNpeCB0ZXN0cyBhcyBwYXJ0Ci0gIG9mIHRoZSBidWlsZCBwcm9jZXNzLiAgSWYgdGhlIHByb2dyYW0gcGFzc2VzIGFsbCBvZiB0aGVzZSwgaXQncwotICBhIHByZXR0eSBnb29kIChidXQgbm90IDEwMCUpIGluZGljYXRpb24gdGhhdCB0aGUgY29tcGlsZXIgaGFzCi0gIGRvbmUgaXRzIGpvYiBjb3JyZWN0bHkuPC9wPgotPC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj4KLTxwPklmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+Ci0gIGNyYXNoZXMgcmFuZG9tbHksIGFuZCB0aGUgY3Jhc2hlcyBhcmUgbm90IHJlcGVhdGFibGUsIHlvdSBtYXkKLSAgaGF2ZSBhIGZsYWt5IG1lbW9yeSBzdWJzeXN0ZW0uCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHJlYWxseSBoYW1tZXJzIHlvdXIKLSAgbWVtb3J5IGhpZXJhcmNoeSwgYW5kIGlmIGl0J3MgYSBiaXQgbWFyZ2luYWwsIHlvdSBtYXkgZ2V0IHRoZXNlCi0gIHByb2JsZW1zLiAgRGl0dG8gaWYgeW91ciBkaXNrIG9yIEkvTyBzdWJzeXN0ZW0gaXMgc2xvd2x5Ci0gIGZhaWxpbmcuICBZdXAsIHRoaXMgcmVhbGx5IGRvZXMgaGFwcGVuLjwvcD4KLTxwPlRyeSB1c2luZyBhIGRpZmZlcmVudCBtYWNoaW5lIG9mIHRoZSBzYW1lIHR5cGUsIGFuZCBzZWUKLSAgaWYgeW91IGNhbiByZXBlYXQgdGhlIHByb2JsZW0uPC9wPgotPC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5UaGlzIGlzbid0IHJlYWxseSBhIGJ1ZywgYnV0IC4uLiBJZgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB0ZWxscyB5b3UgeW91ciBmaWxlIGlzCi0gIGNvcnJ1cHRlZCBvbiBkZWNvbXByZXNzaW9uLCBhbmQgeW91IG9idGFpbmVkIHRoZSBmaWxlIHZpYSBGVFAsCi0gIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB5b3UgZm9yZ290IHRvIHRlbGwgRlRQIHRvIGRvIGEKLSAgYmluYXJ5IG1vZGUgdHJhbnNmZXIuICBUaGF0IGFic29sdXRlbHkgd2lsbCBjYXVzZSB0aGUgZmlsZSB0bwotICBiZSBub24tZGVjb21wcmVzc2libGUuICBZb3UnbGwgaGF2ZSB0byB0cmFuc2ZlciBpdAotICBhZ2Fpbi48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5JZiB5b3UndmUgaW5jb3Jwb3JhdGVkCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiBpbnRvIHlvdXIgb3duIHByb2dyYW0KLWFuZCBhcmUgZ2V0dGluZyBwcm9ibGVtcywgcGxlYXNlLCBwbGVhc2UsIHBsZWFzZSwgY2hlY2sgdGhhdCB0aGUKLXBhcmFtZXRlcnMgeW91IGFyZSBwYXNzaW5nIGluIGNhbGxzIHRvIHRoZSBsaWJyYXJ5LCBhcmUgY29ycmVjdCwKLWFuZCBpbiBhY2NvcmRhbmNlIHdpdGggd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlzIGFsbG93YWJsZS4KLUkgaGF2ZSB0cmllZCB0byBtYWtlIHRoZSBsaWJyYXJ5IHJvYnVzdCBhZ2FpbnN0IHN1Y2ggcHJvYmxlbXMsCi1idXQgSSdtIHN1cmUgSSBoYXZlbid0IHN1Y2NlZWRlZC48L3A+Ci08cD5GaW5hbGx5LCBpZiB0aGUgYWJvdmUgY29tbWVudHMgZG9uJ3QgaGVscCwgeW91J2xsIGhhdmUgdG8KLXNlbmQgbWUgYSBidWcgcmVwb3J0LiAgTm93LCBpdCdzIGp1c3QgYW1hemluZyBob3cgbWFueSBwZW9wbGUKLXdpbGwgc2VuZCBtZSBhIGJ1ZyByZXBvcnQgc2F5aW5nIHNvbWV0aGluZyBsaWtlOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5iemlwMiBjcmFzaGVkIHdpdGggc2VnbWVudGF0aW9uIGZhdWx0IG9uIG15IG1hY2hpbmU8L3ByZT4KLTxwPmFuZCBhYnNvbHV0ZWx5IG5vdGhpbmcgZWxzZS4gIE5lZWRsZXNzIHRvIHNheSwgYSBzdWNoIGEKLXJlcG9ydCBpcyA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50b3RhbGx5LCB1dHRlcmx5LCBjb21wbGV0ZWx5IGFuZAotY29tcHJlaGVuc2l2ZWx5IDEwMCUgdXNlbGVzczsgYSB3YXN0ZSBvZiB5b3VyIHRpbWUsIG15IHRpbWUsIGFuZAotbmV0IGJhbmR3aWR0aDwvZW0+PC9zcGFuPi4gIFdpdGggbm8gZGV0YWlscyBhdCBhbGwsIHRoZXJlJ3Mgbm8gd2F5Ci1JIGNhbiBwb3NzaWJseSBiZWdpbiB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHByb2JsZW0gaXMuPC9wPgotPHA+VGhlIHJ1bGVzIG9mIHRoZSBnYW1lIGFyZTogZmFjdHMsIGZhY3RzLCBmYWN0cy4gIERvbid0IG9taXQKLXRoZW0gYmVjYXVzZSAib2gsIHRoZXkgd29uJ3QgYmUgcmVsZXZhbnQiLiAgQXQgdGhlIGJhcmUKLW1pbmltdW06PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPk1hY2hpbmUgdHlwZS4gIE9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbi4gIAotRXhhY3QgdmVyc2lvbiBvZiBiemlwMiAoZG8gYnppcDIgLVYpLiAgCi1FeGFjdCB2ZXJzaW9uIG9mIHRoZSBjb21waWxlciB1c2VkLiAgCi1GbGFncyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLjwvcHJlPgotPHA+SG93ZXZlciwgdGhlIG1vc3QgaW1wb3J0YW50IHNpbmdsZSB0aGluZyB0aGF0IHdpbGwgaGVscCBtZQotaXMgdGhlIGZpbGUgdGhhdCB5b3Ugd2VyZSB0cnlpbmcgdG8gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBhdCB0aGUKLXRpbWUgdGhlIHByb2JsZW0gaGFwcGVuZWQuICBXaXRob3V0IHRoYXQsIG15IGFiaWxpdHkgdG8gZG8KLWFueXRoaW5nIG1vcmUgdGhhbiBzcGVjdWxhdGUgYWJvdXQgdGhlIGNhdXNlLCBpcyBsaW1pdGVkLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJwYWNrYWdlIj48L2E+NC40LqBEaWQgeW91IGdldCB0aGUgcmlnaHQgcGFja2FnZT88L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gaXMgYSByZXNvdXJjZSBob2cuCi1JdCBzb2FrcyB1cCBsYXJnZSBhbW91bnRzIG9mIENQVSBjeWNsZXMgYW5kIG1lbW9yeS4gIEFsc28sIGl0Ci1naXZlcyB2ZXJ5IGxhcmdlIGxhdGVuY2llcy4gIEluIHRoZSB3b3JzdCBjYXNlLCB5b3UgY2FuIGZlZWQgbWFueQotbWVnYWJ5dGVzIG9mIHVuY29tcHJlc3NlZCBkYXRhIGludG8gdGhlIGxpYnJhcnkgYmVmb3JlIGdldHRpbmcKLWFueSBjb21wcmVzc2VkIG91dHB1dCwgc28gdGhpcyBwcm9iYWJseSBydWxlcyBvdXQgYXBwbGljYXRpb25zCi1yZXF1aXJpbmcgaW50ZXJhY3RpdmUgYmVoYXZpb3VyLjwvcD4KLTxwPlRoZXNlIGFyZW4ndCBmYXVsdHMgb2YgbXkgaW1wbGVtZW50YXRpb24sIEkgaG9wZSwgYnV0IG1vcmUKLWFuIGludHJpbnNpYyBwcm9wZXJ0eSBvZiB0aGUgQnVycm93cy1XaGVlbGVyIHRyYW5zZm9ybQotKHVuZm9ydHVuYXRlbHkpLiAgTWF5YmUgdGhpcyBpc24ndCB3aGF0IHlvdSB3YW50LjwvcD4KLTxwPklmIHlvdSB3YW50IGEgY29tcHJlc3NvciBhbmQvb3IgbGlicmFyeSB3aGljaCBpcyBmYXN0ZXIsCi11c2VzIGxlc3MgbWVtb3J5IGJ1dCBnZXRzIHByZXR0eSBnb29kIGNvbXByZXNzaW9uLCBhbmQgaGFzCi1taW5pbWFsIGxhdGVuY3ksIGNvbnNpZGVyIEplYW4tbG91cCBHYWlsbHkncyBhbmQgTWFyayBBZGxlcidzCi13b3JrLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWItMS4yLjE8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5nemlwLTEuMi40PC9jb2RlPi4gIExvb2sgZm9yIHRoZW0gYXQgCi08YSBocmVmPSJodHRwOi8vd3d3LnpsaWIub3JnIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuemxpYi5vcmc8L2E+IGFuZCAKLTxhIGhyZWY9Imh0dHA6Ly93d3cuZ3ppcC5vcmciIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5nemlwLm9yZzwvYT4KLXJlc3BlY3RpdmVseS48L3A+Ci08cD5Gb3Igc29tZXRoaW5nIGZhc3RlciBhbmQgbGlnaHRlciBzdGlsbCwgeW91IG1pZ2h0IHRyeSBNYXJrdXMgRgotWCBKIE9iZXJodW1lcidzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TFpPPC9jb2RlPiByZWFsLXRpbWUKLWNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeSwgYXQgCi08YSBocmVmPSJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZSIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InJlYWRpbmciPjwvYT40LjUuoEZ1cnRoZXIgUmVhZGluZzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBpcyBub3QgcmVzZWFyY2gKLXdvcmssIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXNuJ3QgcHJlc2VudCBhbnkgbmV3IGlkZWFzLgotUmF0aGVyLCBpdCdzIGFuIGVuZ2luZWVyaW5nIGV4ZXJjaXNlIGJhc2VkIG9uIGV4aXN0aW5nCi1pZGVhcy48L3A+Ci08cD5Gb3VyIGRvY3VtZW50cyBkZXNjcmliZSBlc3NlbnRpYWxseSBhbGwgdGhlIGlkZWFzIGJlaGluZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT46PC9wPgotPGRpdiBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHA+TWljaGFlbKBCdXJyb3dzoGFuZKBELqBKLqBXaGVlbGVyOjxicj4KLaCgIkGgYmxvY2stc29ydGluZ6Bsb3NzbGVzc6BkYXRhoGNvbXByZXNzaW9uoGFsZ29yaXRobSI8YnI+Ci2goKAxMHRooE1heaAxOTk0LqA8YnI+Ci2goKBEaWdpdGFsoFNSQ6BSZXNlYXJjaKBSZXBvcnSgMTI0Ljxicj4KLaCgoGZ0cDovL2Z0cC5kaWdpdGFsLmNvbS9wdWIvREVDL1NSQy9yZXNlYXJjaC1yZXBvcnRzL1NSQy0xMjQucHMuZ3o8YnI+Ci2goKBJZqB5b3WgaGF2ZaB0cm91YmxloGZpbmRpbmegaXQsoHRyeaBzZWFyY2hpbmegYXSgdGhlPGJyPgotoKCgTmV3oFplYWxhbmSgRGlnaXRhbKBMaWJyYXJ5LKBodHRwOi8vd3d3Lm56ZGwub3JnLjxicj4KLTxicj4KLURhbmllbKBTLqBIaXJzY2hiZXJnoGFuZKBEZWJyYaBBLqBMZUxld2VyPGJyPgotoKAiRWZmaWNpZW50oERlY29kaW5noG9moFByZWZpeKBDb2RlcyI8YnI+Ci2goKBDb21tdW5pY2F0aW9uc6BvZqB0aGWgQUNNLKBBcHJpbKAxOTkwLKBWb2ygMzMsoE51bWJlcqA0Ljxicj4KLaCgoFlvdaBtaWdodKBiZaBhYmxloHRvoGdldKBhbqBlbGVjdHJvbmljoGNvcHmgb2agdGhpczxicj4KLaCgoGZyb22gdGhloEFDTaBEaWdpdGFsoExpYnJhcnkuPGJyPgotPGJyPgotRGF2aWSgSi6gV2hlZWxlcjxicj4KLaCgoFByb2dyYW2gYnJlZDMuY6BhbmSgYWNjb21wYW55aW5noGRvY3VtZW50oGJyZWQzLnBzLjxicj4KLaCgoFRoaXOgY29udGFpbnOgdGhloGlkZWGgYmVoaW5koHRoZaBtdWx0aS10YWJsZaBIdWZmbWFuoGNvZGluZ6BzY2hlbWUuPGJyPgotoKCgZnRwOi8vZnRwLmNsLmNhbS5hYy51ay91c2Vycy9kanczLzxicj4KLTxicj4KLUpvbqBMLqBCZW50bGV5oGFuZKBSb2JlcnSgU2VkZ2V3aWNrPGJyPgotoKAiRmFzdKBBbGdvcml0aG1zoGZvcqBTb3J0aW5noGFuZKBTZWFyY2hpbmegU3RyaW5ncyI8YnI+Ci2goKBBdmFpbGFibGWgZnJvbaBTZWRnZXdpY2snc6B3ZWKgcGFnZSw8YnI+Ci2goKB3d3cuY3MucHJpbmNldG9uLmVkdS9+cnM8YnI+Ci08L3A+PC9kaXY+Ci08cD5UaGUgZm9sbG93aW5nIHBhcGVyIGdpdmVzIHZhbHVhYmxlIGFkZGl0aW9uYWwgaW5zaWdodHMgaW50bwotdGhlIGFsZ29yaXRobSwgYnV0IGlzIG5vdCBpbW1lZGlhdGVseSB0aGUgYmFzaXMgb2YgYW55IGNvZGUgdXNlZAotaW4gYnppcDIuPC9wPgotPGRpdiBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHA+UGV0ZXKgRmVud2ljazo8YnI+Ci2goKBCbG9ja6BTb3J0aW5noFRleHSgQ29tcHJlc3Npb248YnI+Ci2goKBQcm9jZWVkaW5nc6BvZqB0aGWgMTl0aKBBdXN0cmFsYXNpYW6gQ29tcHV0ZXKgU2NpZW5jZaBDb25mZXJlbmNlLDxicj4KLaCgoKCgTWVsYm91cm5lLKBBdXN0cmFsaWEuoKBKYW6gMzGgLaBGZWKgMiygMTk5Ni48YnI+Ci2goKBmdHA6Ly9mdHAuY3MuYXVja2xhbmQuYWMubnovcHViL3BldGVyLWYvQUNTQzk2cGFwZXIucHM8L3A+PC9kaXY+Ci08cD5LdW5paGlrbyBTYWRha2FuZSdzIHNvcnRpbmcgYWxnb3JpdGhtLCBtZW50aW9uZWQgYWJvdmUsIGlzCi1hdmFpbGFibGUgZnJvbTo8L3A+Ci08ZGl2IGNsYXNzPSJsaXRlcmFsbGF5b3V0Ij48cD5odHRwOi8vbmFvbWkuaXMucy51LXRva3lvLmFjLmpwL35zYWRhL3BhcGVycy9TYWRhOThiLnBzLmd6PGJyPgotPC9wPjwvZGl2PgotPHA+VGhlIE1hbmJlci1NeWVycyBzdWZmaXggYXJyYXkgY29uc3RydWN0aW9uIGFsZ29yaXRobSBpcwotZGVzY3JpYmVkIGluIGEgcGFwZXIgYXZhaWxhYmxlIGZyb206PC9wPgotPGRpdiBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHA+aHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS9wZW9wbGUvZ2VuZS9QQVBFUlMvc3VmZml4LnBzPGJyPgotPC9wPjwvZGl2PgotPHA+RmluYWxseSwgdGhlIGZvbGxvd2luZyBwYXBlcnMgZG9jdW1lbnQgc29tZQotaW52ZXN0aWdhdGlvbnMgSSBtYWRlIGludG8gdGhlIHBlcmZvcm1hbmNlIG9mIHNvcnRpbmcKLWFuZCBkZWNvbXByZXNzaW9uIGFsZ29yaXRobXM6PC9wPgotPGRpdiBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHA+SnVsaWFuoFNld2FyZDxicj4KLaCgoE9uoHRoZaBQZXJmb3JtYW5jZaBvZqBCV1SgU29ydGluZ6BBbGdvcml0aG1zPGJyPgotoKCgUHJvY2VlZGluZ3Ogb2agdGhloElFRUWgRGF0YaBDb21wcmVzc2lvbqBDb25mZXJlbmNloDIwMDA8YnI+Ci2goKCgoFNub3diaXJkLKBVdGFoLqCgMjgtMzCgTWFyY2igMjAwMC48YnI+Ci08YnI+Ci1KdWxpYW6gU2V3YXJkPGJyPgotoKCgU3BhY2UtdGltZaBUcmFkZW9mZnOgaW6gdGhloEludmVyc2WgQi1XoFRyYW5zZm9ybTxicj4KLaCgoFByb2NlZWRpbmdzoG9moHRoZaBJRUVFoERhdGGgQ29tcHJlc3Npb26gQ29uZmVyZW5jZaAyMDAxPGJyPgotoKCgoKBTbm93YmlyZCygVXRhaC6goDI3LTI5oE1hcmNooDIwMDEuPGJyPgotPC9wPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PjwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC5wZGYgYi9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwucGRmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGMxMGRlLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC5wZGYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwucHMgYi9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwucHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YjYxMGMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnBzCisrKyAvZGV2L251bGwKQEAgLTEsODI5MDAgKzAsMCBAQAotJSFQUy1BZG9iZS0zLjAKLSUlQ3JlYXRvcjogeHBkZi9wZGZ0b3BzIDMuMDEKLSUlTGFuZ3VhZ2VMZXZlbDogMgotJSVEb2N1bWVudFN1cHBsaWVkUmVzb3VyY2VzOiAoYXRlbmQpCi0lJURvY3VtZW50TWVkaWE6IHBsYWluIDYxMiA3OTIgMCAoKSAoKQotJSVCb3VuZGluZ0JveDogMCAwIDYxMiA3OTIKLSUlUGFnZXM6IDM4Ci0lJUVuZENvbW1lbnRzCi0lJUJlZ2luRGVmYXVsdHMKLSUlUGFnZU1lZGlhOiBwbGFpbgotJSVFbmREZWZhdWx0cwotJSVCZWdpblByb2xvZwotJSVCZWdpblJlc291cmNlOiBwcm9jc2V0IHhwZGYgMy4wMSAwCi0veHBkZiA3NSBkaWN0IGRlZiB4cGRmIGJlZ2luCi0lIFBERiBzcGVjaWFsIHN0YXRlCi0vcGRmRGljdFNpemUgMTUgZGVmCi0vcGRmU2V0dXAgewotICAzIDEgcm9sbCAyIGFycmF5IGFzdG9yZQotICAvc2V0cGFnZWRldmljZSB3aGVyZSB7Ci0gICAgcG9wIDMgZGljdCBiZWdpbgotICAgICAgL1BhZ2VTaXplIGV4Y2ggZGVmCi0gICAgICAvSW1hZ2luZ0JCb3ggbnVsbCBkZWYKLSAgICAgIC9Qb2xpY2llcyAxIGRpY3QgZHVwIGJlZ2luIC9QYWdlU2l6ZSAzIGRlZiBlbmQgZGVmCi0gICAgICB7IC9EdXBsZXggdHJ1ZSBkZWYgfSBpZgotICAgIGN1cnJlbnRkaWN0IGVuZCBzZXRwYWdlZGV2aWNlCi0gIH0gewotICAgIHBvcCBwb3AKLSAgfSBpZmVsc2UKLX0gZGVmCi0vcGRmU3RhcnRQYWdlIHsKLSAgcGRmRGljdFNpemUgZGljdCBiZWdpbgotICAvcGRmRmlsbENTIFtdIGRlZgotICAvcGRmRmlsbFhmb3JtIHt9IGRlZgotICAvcGRmU3Ryb2tlQ1MgW10gZGVmCi0gIC9wZGZTdHJva2VYZm9ybSB7fSBkZWYKLSAgL3BkZkZpbGwgWzBdIGRlZgotICAvcGRmU3Ryb2tlIFswXSBkZWYKLSAgL3BkZkZpbGxPUCBmYWxzZSBkZWYKLSAgL3BkZlN0cm9rZU9QIGZhbHNlIGRlZgotICAvcGRmTGFzdEZpbGwgZmFsc2UgZGVmCi0gIC9wZGZMYXN0U3Ryb2tlIGZhbHNlIGRlZgotICAvcGRmVGV4dE1hdCBbMSAwIDAgMSAwIDBdIGRlZgotICAvcGRmRm9udFNpemUgMCBkZWYKLSAgL3BkZkNoYXJTcGFjaW5nIDAgZGVmCi0gIC9wZGZUZXh0UmVuZGVyIDAgZGVmCi0gIC9wZGZUZXh0UmlzZSAwIGRlZgotICAvcGRmV29yZFNwYWNpbmcgMCBkZWYKLSAgL3BkZkhvcml6U2NhbGluZyAxIGRlZgotICAvcGRmVGV4dENsaXBQYXRoIFtdIGRlZgotfSBkZWYKLS9wZGZFbmRQYWdlIHsgZW5kIH0gZGVmCi0lIFBERiBjb2xvciBzdGF0ZQotL2NzIHsgL3BkZkZpbGxYZm9ybSBleGNoIGRlZiBkdXAgL3BkZkZpbGxDUyBleGNoIGRlZgotICAgICAgc2V0Y29sb3JzcGFjZSB9IGRlZgotL0NTIHsgL3BkZlN0cm9rZVhmb3JtIGV4Y2ggZGVmIGR1cCAvcGRmU3Ryb2tlQ1MgZXhjaCBkZWYKLSAgICAgIHNldGNvbG9yc3BhY2UgfSBkZWYKLS9zYyB7IHBkZkxhc3RGaWxsIG5vdCB7IHBkZkZpbGxDUyBzZXRjb2xvcnNwYWNlIH0gaWYKLSAgICAgIGR1cCAvcGRmRmlsbCBleGNoIGRlZiBhbG9hZCBwb3AgcGRmRmlsbFhmb3JtIHNldGNvbG9yCi0gICAgIC9wZGZMYXN0RmlsbCB0cnVlIGRlZiAvcGRmTGFzdFN0cm9rZSBmYWxzZSBkZWYgfSBkZWYKLS9TQyB7IHBkZkxhc3RTdHJva2Ugbm90IHsgcGRmU3Ryb2tlQ1Mgc2V0Y29sb3JzcGFjZSB9IGlmCi0gICAgICBkdXAgL3BkZlN0cm9rZSBleGNoIGRlZiBhbG9hZCBwb3AgcGRmU3Ryb2tlWGZvcm0gc2V0Y29sb3IKLSAgICAgL3BkZkxhc3RTdHJva2UgdHJ1ZSBkZWYgL3BkZkxhc3RGaWxsIGZhbHNlIGRlZiB9IGRlZgotL29wIHsgL3BkZkZpbGxPUCBleGNoIGRlZgotICAgICAgcGRmTGFzdEZpbGwgeyBwZGZGaWxsT1Agc2V0b3ZlcnByaW50IH0gaWYgfSBkZWYKLS9PUCB7IC9wZGZTdHJva2VPUCBleGNoIGRlZgotICAgICAgcGRmTGFzdFN0cm9rZSB7IHBkZlN0cm9rZU9QIHNldG92ZXJwcmludCB9IGlmIH0gZGVmCi0vZkNvbCB7Ci0gIHBkZkxhc3RGaWxsIG5vdCB7Ci0gICAgcGRmRmlsbENTIHNldGNvbG9yc3BhY2UKLSAgICBwZGZGaWxsIGFsb2FkIHBvcCBwZGZGaWxsWGZvcm0gc2V0Y29sb3IKLSAgICBwZGZGaWxsT1Agc2V0b3ZlcnByaW50Ci0gICAgL3BkZkxhc3RGaWxsIHRydWUgZGVmIC9wZGZMYXN0U3Ryb2tlIGZhbHNlIGRlZgotICB9IGlmCi19IGRlZgotL3NDb2wgewotICBwZGZMYXN0U3Ryb2tlIG5vdCB7Ci0gICAgcGRmU3Ryb2tlQ1Mgc2V0Y29sb3JzcGFjZQotICAgIHBkZlN0cm9rZSBhbG9hZCBwb3AgcGRmU3Ryb2tlWGZvcm0gc2V0Y29sb3IKLSAgICBwZGZTdHJva2VPUCBzZXRvdmVycHJpbnQKLSAgICAvcGRmTGFzdFN0cm9rZSB0cnVlIGRlZiAvcGRmTGFzdEZpbGwgZmFsc2UgZGVmCi0gIH0gaWYKLX0gZGVmCi0lIGJ1aWxkIGEgZm9udAotL3BkZk1ha2VGb250IHsKLSAgNCAzIHJvbGwgZmluZGZvbnQKLSAgNCAyIHJvbGwgbWF0cml4IHNjYWxlIG1ha2Vmb250Ci0gIGR1cCBsZW5ndGggZGljdCBiZWdpbgotICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH0geyBwb3AgcG9wIH0gaWZlbHNlIH0gZm9yYWxsCi0gICAgL0VuY29kaW5nIGV4Y2ggZGVmCi0gICAgY3VycmVudGRpY3QKLSAgZW5kCi0gIGRlZmluZWZvbnQgcG9wCi19IGRlZgotL3BkZk1ha2VGb250MTYgewotICBleGNoIGZpbmRmb250Ci0gIGR1cCBsZW5ndGggZGljdCBiZWdpbgotICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH0geyBwb3AgcG9wIH0gaWZlbHNlIH0gZm9yYWxsCi0gICAgL1dNb2RlIGV4Y2ggZGVmCi0gICAgY3VycmVudGRpY3QKLSAgZW5kCi0gIGRlZmluZWZvbnQgcG9wCi19IGRlZgotJSBncmFwaGljcyBzdGF0ZSBvcGVyYXRvcnMKLS9xIHsgZ3NhdmUgcGRmRGljdFNpemUgZGljdCBiZWdpbiB9IGRlZgotL1EgewotICBlbmQgZ3Jlc3RvcmUKLSAgL3BkZkxhc3RGaWxsIHdoZXJlIHsKLSAgICBwb3AKLSAgICBwZGZMYXN0RmlsbCB7Ci0gICAgICBwZGZGaWxsT1Agc2V0b3ZlcnByaW50Ci0gICAgfSB7Ci0gICAgICBwZGZTdHJva2VPUCBzZXRvdmVycHJpbnQKLSAgICB9IGlmZWxzZQotICB9IGlmCi19IGRlZgotL2NtIHsgY29uY2F0IH0gZGVmCi0vZCB7IHNldGRhc2ggfSBkZWYKLS9pIHsgc2V0ZmxhdCB9IGRlZgotL2ogeyBzZXRsaW5lam9pbiB9IGRlZgotL0ogeyBzZXRsaW5lY2FwIH0gZGVmCi0vTSB7IHNldG1pdGVybGltaXQgfSBkZWYKLS93IHsgc2V0bGluZXdpZHRoIH0gZGVmCi0lIHBhdGggc2VnbWVudCBvcGVyYXRvcnMKLS9tIHsgbW92ZXRvIH0gZGVmCi0vbCB7IGxpbmV0byB9IGRlZgotL2MgeyBjdXJ2ZXRvIH0gZGVmCi0vcmUgeyA0IDIgcm9sbCBtb3ZldG8gMSBpbmRleCAwIHJsaW5ldG8gMCBleGNoIHJsaW5ldG8KLSAgICAgIG5lZyAwIHJsaW5ldG8gY2xvc2VwYXRoIH0gZGVmCi0vaCB7IGNsb3NlcGF0aCB9IGRlZgotJSBwYXRoIHBhaW50aW5nIG9wZXJhdG9ycwotL1MgeyBzQ29sIHN0cm9rZSB9IGRlZgotL1NmIHsgZkNvbCBzdHJva2UgfSBkZWYKLS9mIHsgZkNvbCBmaWxsIH0gZGVmCi0vZiogeyBmQ29sIGVvZmlsbCB9IGRlZgotJSBjbGlwcGluZyBvcGVyYXRvcnMKLS9XIHsgY2xpcCBuZXdwYXRoIH0gZGVmCi0vVyogeyBlb2NsaXAgbmV3cGF0aCB9IGRlZgotJSB0ZXh0IHN0YXRlIG9wZXJhdG9ycwotL1RjIHsgL3BkZkNoYXJTcGFjaW5nIGV4Y2ggZGVmIH0gZGVmCi0vVGYgeyBkdXAgL3BkZkZvbnRTaXplIGV4Y2ggZGVmCi0gICAgICBkdXAgcGRmSG9yaXpTY2FsaW5nIG11bCBleGNoIG1hdHJpeCBzY2FsZQotICAgICAgcGRmVGV4dE1hdCBtYXRyaXggY29uY2F0bWF0cml4IGR1cCA0IDAgcHV0IGR1cCA1IDAgcHV0Ci0gICAgICBleGNoIGZpbmRmb250IGV4Y2ggbWFrZWZvbnQgc2V0Zm9udCB9IGRlZgotL1RyIHsgL3BkZlRleHRSZW5kZXIgZXhjaCBkZWYgfSBkZWYKLS9UcyB7IC9wZGZUZXh0UmlzZSBleGNoIGRlZiB9IGRlZgotL1R3IHsgL3BkZldvcmRTcGFjaW5nIGV4Y2ggZGVmIH0gZGVmCi0vVHogeyAvcGRmSG9yaXpTY2FsaW5nIGV4Y2ggZGVmIH0gZGVmCi0lIHRleHQgcG9zaXRpb25pbmcgb3BlcmF0b3JzCi0vVGQgeyBwZGZUZXh0TWF0IHRyYW5zZm9ybSBtb3ZldG8gfSBkZWYKLS9UbSB7IC9wZGZUZXh0TWF0IGV4Y2ggZGVmIH0gZGVmCi0lIHRleHQgc3RyaW5nIG9wZXJhdG9ycwotL2NzaG93IHdoZXJlIHsKLSAgcG9wCi0gIC9jc2hvdzIgewotICAgIGR1cCB7Ci0gICAgICBwb3AgcG9wCi0gICAgICAxIHN0cmluZyBkdXAgMCAzIGluZGV4IHB1dCAzIGluZGV4IGV4ZWMKLSAgICB9IGV4Y2ggY3Nob3cKLSAgICBwb3AgcG9wCi0gIH0gZGVmCi19ewotICAvY3Nob3cyIHsKLSAgICBjdXJyZW50Zm9udCAvRm9udFR5cGUgZ2V0IDAgZXEgewotICAgICAgMCAyIDIgaW5kZXggbGVuZ3RoIDEgc3ViIHsKLSAgICAgICAgMiBjb3B5IGdldCBleGNoIDEgYWRkIDIgaW5kZXggZXhjaCBnZXQKLSAgICAgICAgMiBjb3B5IGV4Y2ggMjU2IG11bCBhZGQKLSAgICAgICAgMiBzdHJpbmcgZHVwIDAgNiA1IHJvbGwgcHV0IGR1cCAxIDUgNCByb2xsIHB1dAotICAgICAgICAzIGluZGV4IGV4ZWMKLSAgICAgIH0gZm9yCi0gICAgfSB7Ci0gICAgICBkdXAgewotICAgICAgICAxIHN0cmluZyBkdXAgMCAzIGluZGV4IHB1dCAzIGluZGV4IGV4ZWMKLSAgICAgIH0gZm9yYWxsCi0gICAgfSBpZmVsc2UKLSAgICBwb3AgcG9wCi0gIH0gZGVmCi19IGlmZWxzZQotL2F3Y3AgewotICBleGNoIHsKLSAgICBmYWxzZSBjaGFycGF0aAotICAgIDUgaW5kZXggNSBpbmRleCBybW92ZXRvCi0gICAgNiBpbmRleCBlcSB7IDcgaW5kZXggNyBpbmRleCBybW92ZXRvIH0gaWYKLSAgfSBleGNoIGNzaG93MgotICA2IHtwb3B9IHJlcGVhdAotfSBkZWYKLS9UaiB7Ci0gIGZDb2wKLSAgMSBpbmRleCBzdHJpbmd3aWR0aCBwZGZUZXh0TWF0IGlkdHJhbnNmb3JtIHBvcAotICBzdWIgMSBpbmRleCBsZW5ndGggZHVwIDAgbmUgeyBkaXYgfSB7IHBvcCBwb3AgMCB9IGlmZWxzZQotICBwZGZXb3JkU3BhY2luZyBwZGZIb3JpelNjYWxpbmcgbXVsIDAgcGRmVGV4dE1hdCBkdHJhbnNmb3JtIDMyCi0gIDQgMyByb2xsIHBkZkNoYXJTcGFjaW5nIHBkZkhvcml6U2NhbGluZyBtdWwgYWRkIDAKLSAgcGRmVGV4dE1hdCBkdHJhbnNmb3JtCi0gIDYgNSByb2xsIFRqMQotfSBkZWYKLS9UajE2IHsKLSAgZkNvbAotICAyIGluZGV4IHN0cmluZ3dpZHRoIHBkZlRleHRNYXQgaWR0cmFuc2Zvcm0gcG9wCi0gIHN1YiBleGNoIGRpdgotICBwZGZXb3JkU3BhY2luZyBwZGZIb3JpelNjYWxpbmcgbXVsIDAgcGRmVGV4dE1hdCBkdHJhbnNmb3JtIDMyCi0gIDQgMyByb2xsIHBkZkNoYXJTcGFjaW5nIHBkZkhvcml6U2NhbGluZyBtdWwgYWRkIDAKLSAgcGRmVGV4dE1hdCBkdHJhbnNmb3JtCi0gIDYgNSByb2xsIFRqMQotfSBkZWYKLS9UajE2ViB7Ci0gIGZDb2wKLSAgMiBpbmRleCBzdHJpbmd3aWR0aCBwZGZUZXh0TWF0IGlkdHJhbnNmb3JtIGV4Y2ggcG9wCi0gIHN1YiBleGNoIGRpdgotICAwIHBkZldvcmRTcGFjaW5nIHBkZlRleHRNYXQgZHRyYW5zZm9ybSAzMgotICA0IDMgcm9sbCBwZGZDaGFyU3BhY2luZyBhZGQgMCBleGNoCi0gIHBkZlRleHRNYXQgZHRyYW5zZm9ybQotICA2IDUgcm9sbCBUajEKLX0gZGVmCi0vVGoxIHsKLSAgMCBwZGZUZXh0UmlzZSBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0gcm1vdmV0bwotICBjdXJyZW50cG9pbnQgOCAyIHJvbGwKLSAgcGRmVGV4dFJlbmRlciAxIGFuZCAwIGVxIHsKLSAgICA2IGNvcHkgYXdpZHRoc2hvdwotICB9IGlmCi0gIHBkZlRleHRSZW5kZXIgMyBhbmQgZHVwIDEgZXEgZXhjaCAyIGVxIG9yIHsKLSAgICA3IGluZGV4IDcgaW5kZXggbW92ZXRvCi0gICAgNiBjb3B5Ci0gICAgY3VycmVudGZvbnQgL0ZvbnRUeXBlIGdldCAzIGVxIHsgZkNvbCB9IHsgc0NvbCB9IGlmZWxzZQotICAgIGZhbHNlIGF3Y3AgY3VycmVudHBvaW50IHN0cm9rZSBtb3ZldG8KLSAgfSBpZgotICBwZGZUZXh0UmVuZGVyIDQgYW5kIDAgbmUgewotICAgIDggNiByb2xsIG1vdmV0bwotICAgIGZhbHNlIGF3Y3AKLSAgICAvcGRmVGV4dENsaXBQYXRoIFsgcGRmVGV4dENsaXBQYXRoIGFsb2FkIHBvcAotICAgICAgey9tb3ZldG8gY3Z4fQotICAgICAgey9saW5ldG8gY3Z4fQotICAgICAgey9jdXJ2ZXRvIGN2eH0KLSAgICAgIHsvY2xvc2VwYXRoIGN2eH0KLSAgICBwYXRoZm9yYWxsIF0gZGVmCi0gICAgY3VycmVudHBvaW50IG5ld3BhdGggbW92ZXRvCi0gIH0gewotICAgIDgge3BvcH0gcmVwZWF0Ci0gIH0gaWZlbHNlCi0gIDAgcGRmVGV4dFJpc2UgbmVnIHBkZlRleHRNYXQgZHRyYW5zZm9ybSBybW92ZXRvCi19IGRlZgotL1RKbSB7IHBkZkZvbnRTaXplIDAuMDAxIG11bCBtdWwgbmVnIDAKLSAgICAgICBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0gcm1vdmV0byB9IGRlZgotL1RKbVYgeyBwZGZGb250U2l6ZSAwLjAwMSBtdWwgbXVsIG5lZyAwIGV4Y2gKLSAgICAgICAgcGRmVGV4dE1hdCBkdHJhbnNmb3JtIHJtb3ZldG8gfSBkZWYKLS9UY2xpcCB7IHBkZlRleHRDbGlwUGF0aCBjdnggZXhlYyBjbGlwIG5ld3BhdGgKLSAgICAgICAgIC9wZGZUZXh0Q2xpcFBhdGggW10gZGVmIH0gZGVmCi0lIExldmVsIDIgaW1hZ2Ugb3BlcmF0b3JzCi0vcGRmSW1CdWYgMTAwIHN0cmluZyBkZWYKLS9wZGZJbSB7Ci0gIGltYWdlCi0gIHsgY3VycmVudGZpbGUgcGRmSW1CdWYgcmVhZGxpbmUKLSAgICBub3QgeyBwb3AgZXhpdCB9IGlmCi0gICAgKCUtRU9ELSkgZXEgeyBleGl0IH0gaWYgfSBsb29wCi19IGRlZgotL3BkZkltTSB7Ci0gIGZDb2wgaW1hZ2VtYXNrCi0gIHsgY3VycmVudGZpbGUgcGRmSW1CdWYgcmVhZGxpbmUKLSAgICBub3QgeyBwb3AgZXhpdCB9IGlmCi0gICAgKCUtRU9ELSkgZXEgeyBleGl0IH0gaWYgfSBsb29wCi19IGRlZgotL3BkZkltQ2xpcCB7Ci0gIGdzYXZlCi0gIDAgMiA0IGluZGV4IGxlbmd0aCAxIHN1YiB7Ci0gICAgZHVwIDQgaW5kZXggZXhjaCAyIGNvcHkKLSAgICBnZXQgNSBpbmRleCBkaXYgcHV0Ci0gICAgMSBhZGQgMyBpbmRleCBleGNoIDIgY29weQotICAgIGdldCAzIGluZGV4IGRpdiBwdXQKLSAgfSBmb3IKLSAgcG9wIHBvcCByZWN0Y2xpcAotfSBkZWYKLS9wZGZJbUNsaXBFbmQgeyBncmVzdG9yZSB9IGRlZgotJSBzaGFkaW5nIG9wZXJhdG9ycwotL2NvbG9yZGVsdGEgewotICBmYWxzZSAwIDEgMyBpbmRleCBsZW5ndGggMSBzdWIgewotICAgIGR1cCA0IGluZGV4IGV4Y2ggZ2V0IDMgaW5kZXggMyAyIHJvbGwgZ2V0IHN1YiBhYnMgMC4wMDQgZ3QgewotICAgICAgcG9wIHRydWUKLSAgICB9IGlmCi0gIH0gZm9yCi0gIGV4Y2ggcG9wIGV4Y2ggcG9wCi19IGRlZgotL2Z1bmNDb2wgeyBmdW5jIG4gYXJyYXkgYXN0b3JlIH0gZGVmCi0vZnVuY1NIIHsKLSAgZHVwIDAgZXEgewotICAgIHRydWUKLSAgfSB7Ci0gICAgZHVwIDYgZXEgewotICAgICAgZmFsc2UKLSAgICB9IHsKLSAgICAgIDQgaW5kZXggNCBpbmRleCBmdW5jQ29sIGR1cAotICAgICAgNiBpbmRleCA0IGluZGV4IGZ1bmNDb2wgZHVwCi0gICAgICAzIDEgcm9sbCBjb2xvcmRlbHRhIDMgMSByb2xsCi0gICAgICA1IGluZGV4IDUgaW5kZXggZnVuY0NvbCBkdXAKLSAgICAgIDMgMSByb2xsIGNvbG9yZGVsdGEgMyAxIHJvbGwKLSAgICAgIDYgaW5kZXggOCBpbmRleCBmdW5jQ29sIGR1cAotICAgICAgMyAxIHJvbGwgY29sb3JkZWx0YSAzIDEgcm9sbAotICAgICAgY29sb3JkZWx0YSBvciBvciBvcgotICAgIH0gaWZlbHNlCi0gIH0gaWZlbHNlCi0gIHsKLSAgICAxIGFkZAotICAgIDQgaW5kZXggMyBpbmRleCBhZGQgMC41IG11bCBleGNoIDQgaW5kZXggMyBpbmRleCBhZGQgMC41IG11bCBleGNoCi0gICAgNiBpbmRleCA2IGluZGV4IDQgaW5kZXggNCBpbmRleCA0IGluZGV4IGZ1bmNTSAotICAgIDIgaW5kZXggNiBpbmRleCA2IGluZGV4IDQgaW5kZXggNCBpbmRleCBmdW5jU0gKLSAgICA2IGluZGV4IDIgaW5kZXggNCBpbmRleCA2IGluZGV4IDQgaW5kZXggZnVuY1NICi0gICAgNSAzIHJvbGwgMyAyIHJvbGwgZnVuY1NIIHBvcCBwb3AKLSAgfSB7Ci0gICAgcG9wIDMgaW5kZXggMiBpbmRleCBhZGQgMC41IG11bCAzIGluZGV4ICAyIGluZGV4IGFkZCAwLjUgbXVsCi0gICAgZnVuY0NvbCBzYwotICAgIGR1cCA0IGluZGV4IGV4Y2ggbWF0IHRyYW5zZm9ybSBtCi0gICAgMyBpbmRleCAzIGluZGV4IG1hdCB0cmFuc2Zvcm0gbAotICAgIDEgaW5kZXggMyBpbmRleCBtYXQgdHJhbnNmb3JtIGwKLSAgICBtYXQgdHJhbnNmb3JtIGwgcG9wIHBvcCBoIGYqCi0gIH0gaWZlbHNlCi19IGRlZgotL2F4aWFsQ29sIHsKLSAgZHVwIDAgbHQgewotICAgIHBvcCB0MAotICB9IHsKLSAgICBkdXAgMSBndCB7Ci0gICAgICBwb3AgdDEKLSAgICB9IHsKLSAgICAgIGR0IG11bCB0MCBhZGQKLSAgICB9IGlmZWxzZQotICB9IGlmZWxzZQotICBmdW5jIG4gYXJyYXkgYXN0b3JlCi19IGRlZgotL2F4aWFsU0ggewotICBkdXAgMCBlcSB7Ci0gICAgdHJ1ZQotICB9IHsKLSAgICBkdXAgOCBlcSB7Ci0gICAgICBmYWxzZQotICAgIH0gewotICAgICAgMiBpbmRleCBheGlhbENvbCAyIGluZGV4IGF4aWFsQ29sIGNvbG9yZGVsdGEKLSAgICB9IGlmZWxzZQotICB9IGlmZWxzZQotICB7Ci0gICAgMSBhZGQgMyAxIHJvbGwgMiBjb3B5IGFkZCAwLjUgbXVsCi0gICAgZHVwIDQgMyByb2xsIGV4Y2ggNCBpbmRleCBheGlhbFNICi0gICAgZXhjaCAzIDIgcm9sbCBheGlhbFNICi0gIH0gewotICAgIHBvcCAyIGNvcHkgYWRkIDAuNSBtdWwgYXhpYWxDb2wgc2MKLSAgICBleGNoIGR1cCBkeCBtdWwgeDAgYWRkIGV4Y2ggZHkgbXVsIHkwIGFkZAotICAgIDMgMiByb2xsIGR1cCBkeCBtdWwgeDAgYWRkIGV4Y2ggZHkgbXVsIHkwIGFkZAotICAgIGR4IGFicyBkeSBhYnMgZ2UgewotICAgICAgMiBjb3B5IHlNaW4gc3ViIGR5IG11bCBkeCBkaXYgYWRkIHlNaW4gbQotICAgICAgeU1heCBzdWIgZHkgbXVsIGR4IGRpdiBhZGQgeU1heCBsCi0gICAgICAyIGNvcHkgeU1heCBzdWIgZHkgbXVsIGR4IGRpdiBhZGQgeU1heCBsCi0gICAgICB5TWluIHN1YiBkeSBtdWwgZHggZGl2IGFkZCB5TWluIGwKLSAgICAgIGggZioKLSAgICB9IHsKLSAgICAgIGV4Y2ggMiBjb3B5IHhNaW4gc3ViIGR4IG11bCBkeSBkaXYgYWRkIHhNaW4gZXhjaCBtCi0gICAgICB4TWF4IHN1YiBkeCBtdWwgZHkgZGl2IGFkZCB4TWF4IGV4Y2ggbAotICAgICAgZXhjaCAyIGNvcHkgeE1heCBzdWIgZHggbXVsIGR5IGRpdiBhZGQgeE1heCBleGNoIGwKLSAgICAgIHhNaW4gc3ViIGR4IG11bCBkeSBkaXYgYWRkIHhNaW4gZXhjaCBsCi0gICAgICBoIGYqCi0gICAgfSBpZmVsc2UKLSAgfSBpZmVsc2UKLX0gZGVmCi0vcmFkaWFsQ29sIHsKLSAgZHVwIHQwIGx0IHsKLSAgICBwb3AgdDAKLSAgfSB7Ci0gICAgZHVwIHQxIGd0IHsKLSAgICAgIHBvcCB0MQotICAgIH0gaWYKLSAgfSBpZmVsc2UKLSAgZnVuYyBuIGFycmF5IGFzdG9yZQotfSBkZWYKLS9yYWRpYWxTSCB7Ci0gIGR1cCAwIGVxIHsKLSAgICB0cnVlCi0gIH0gewotICAgIGR1cCA4IGVxIHsKLSAgICAgIGZhbHNlCi0gICAgfSB7Ci0gICAgICAyIGluZGV4IGR0IG11bCB0MCBhZGQgcmFkaWFsQ29sCi0gICAgICAyIGluZGV4IGR0IG11bCB0MCBhZGQgcmFkaWFsQ29sIGNvbG9yZGVsdGEKLSAgICB9IGlmZWxzZQotICB9IGlmZWxzZQotICB7Ci0gICAgMSBhZGQgMyAxIHJvbGwgMiBjb3B5IGFkZCAwLjUgbXVsCi0gICAgZHVwIDQgMyByb2xsIGV4Y2ggNCBpbmRleCByYWRpYWxTSAotICAgIGV4Y2ggMyAyIHJvbGwgcmFkaWFsU0gKLSAgfSB7Ci0gICAgcG9wIDIgY29weSBhZGQgMC41IG11bCBkdCBtdWwgdDAgYWRkIGF4aWFsQ29sIHNjCi0gICAgZXhjaCBkdXAgZHggbXVsIHgwIGFkZCBleGNoIGR1cCBkeSBtdWwgeTAgYWRkIGV4Y2ggZHIgbXVsIHIwIGFkZAotICAgIDAgMzYwIGFyYyBoCi0gICAgZHVwIGR4IG11bCB4MCBhZGQgZXhjaCBkdXAgZHkgbXVsIHkwIGFkZCBleGNoIGRyIG11bCByMCBhZGQKLSAgICAwIDM2MCBhcmMgaCBmKgotICB9IGlmZWxzZQotfSBkZWYKLWVuZAotJSVFbmRSZXNvdXJjZQotJSVFbmRQcm9sb2cKLSUlQmVnaW5TZXR1cAoteHBkZiBiZWdpbgotJSVCZWdpblJlc291cmNlOiBmb250IERUVVVIUCtOaW1idXNTYW5MLUJvbGQKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzU2FuTC1Cb2xkIDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBTYW5zIEwgQm9sZCkgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoTmltYnVzIFNhbnMgTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChCb2xkKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAwLjAgZGVmCi0vaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgotL1VuZGVybGluZVBvc2l0aW9uIC0xNTUgZGVmCi0vVW5kZXJsaW5lVGhpY2tuZXNzIDY5IGRlZgotZW5kIHJlYWRvbmx5IGRlZgotL0ZvbnROYW1lIC9EVFVVSFArTmltYnVzU2FuTC1Cb2xkIGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey0xNzMgLTMwNyAxMDAzIDk0OX0gcmVhZG9ubHkgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwLjAgMC4wIDAuMDAxIDAuMCAwLjBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCi1jdXJyZW50ZGljdCBlbmQKLWN1cnJlbnRmaWxlIGVleGVjCi1kOWQ2NmY2MzNiODQ2YTk4OWI5OTc0YjAxNzlmYzZjYzQ0NWJjMmMwMzEwM2M2ODU3MGE3YjM1NGE0YTI4MGFlCi02ZmJmN2Y5ODg4ZTAzOWFiNjBmY2FmODUyZWI0Y2UzYWZlYjk3OWQ1ZWE3MGZkZTQ0YTJhZTVjOGMwMTY2YzI3Ci1iZjk2NjVlZWExMWM3ZDIzMjljMWEyMTFkZDI2YmIzNzJiZTU4MjJmNWVhNzBkOTllYjU3OGM3YmVmZDQ0Y2RmCi0wNDVhMzYzMDU2ZTVlMWNjNTE1MjVlYTZmYzA2MWRjZWJiMzM3MjA4ZWZmNzI5ODAyMzc2YTI4MDE0MjRmNjcwCi0wZTdlNjM5N2IyOGYxNWJjMTBiNDAwMTJiMGEzZWFlYjI2OTNlOGY3ZjYyN2M0YzljN2M2YzViZmYxMDVjMWU0Ci0xYjJiOWU4ZjA5MjUzYjc2MDQwZDI2OGI4MDcxOWUxYjNmNWE1NWFiN2I4ZDYyYTYzMTkzYzRhZTk0YzA4NmMxCi01NTI4MzNkZGQ4ZjExNmI1ZGYzMzIwNWFlNzA5YjNhYTYzZGE3YmViYjE2NWI2NzI4MTgyN2I0OGZiNWVkYmVkCi0wMmExYTVjMDc4NGZjNTdkMzQ4N2RhYTU5NTIwYmFkYTFiZTNmYjk3OTU2Njk5MjQzMjFjZTRmNDY2Y2Q4ZTNmCi03ZThlYzI0OTRhZWU4MGUyZGQ3YTQ4YTY4NjFhZjViOWYwY2NhYTRhMmZlMmIwMzQ5OGVhY2FjZDZiOWMzOWM2Ci1hOGYyZTM5ZTA2YmJiMDYxY2YyZWMzODBhMzJlZmFkMGI3OTA5NzRiYjVjYzNkYWYwOTkyNDcxNDU2OTY3MzYyCi03N2RlMzQ4MTNmMjdhYmU5OTMwMmY4NmJiNGQyOTNhMzdmODQ2NjdlN2YzZGZlZTRjZmU5ZDFhNjc2YTU3MjhjCi1hZWI1MjIyZmY1MGRhOTdlNzRiMmNkZWJmNzI1ZmJjYTcwMTVhMTg4ODkxYzhhMzc2YjlkZDhhNjQyYzRiMTg0Ci1iMWJiZjNmMzc2YTZkNmUzMWVmMWM4MzU0ZGRmODAzOWNiMjBmYWFiY2IzNGQ0NzQ5YjNjOGM4ZDY5NzJjZWIxCi0wNmI4YTVhYWUzYWU0MGE5MWYxZjJiMTE1NTY4MWE5Y2M5MzNmODc1MjhjOTlhMmIwMjY4YjQzYTNlODI5ZTdmCi0zYmQ4NjNjYjUyOTUwNzczYmQ5YjA3MzFkYzQ5OTI1NDFkN2RlN2EwNTVjYTY1ZGRkMjMxN2YxNzA1YzIwZDFmCi05MzI5MWJjYzI1NGNiYWJhNDI1YzAzMmIzYjE1MDUwZDQxZGExNGZmZTFiM2Q2ODRlZWE0MjgwOTVhMDFlOTMxCi05OGQ0Zjg0OWIyMzlhZDlkNzlmNDUwMmYwMjcxYWZmYjBjMjk3ZjJmMzQ3YmZiOWMxMzc3ODI2NDZmNjQ4Zjc3Ci0wMDc2Yjg1ZjVhOTI5ZmNkZWEyNzAzMzMzZjY5MThiOGYxMjU2MjdmOGI1MDVjNjg4ZTMwZjI1OGRlZDFhZWNmCi0yYzg2ZWRjZDg4YzI5MjQ5YTgwODE3MzE3MzcxOTVmYWI3YWRiYjU0NzQzYmQ2NjUxMTE5NGRlZTI1MTY5NTliCi1hMjA3MDFlMmQ5NzM0MjI0ODI5NzQyNTQ5MWY2Yzk0NzFlYzlhOThlNjMwZDczNGRhYzE5NzIxZjBiMzI0NDMyCi1jOGQ3YTBiNzUxNDUzZjg5ZjcwMDhiYTM3YmM0OGUwODMxZWUzZWNiZDhhMGEyOTJkNjNjZmM4OTBiMjhmNjk1Ci05ZTI5YWMzYjRkZGI3OGE2ODgzYjkyNzJjZTM0YTAxMmE4MmFkZWMwYjZiNjQxZTM5NDBhNDM4YTA5OGNjZmJmCi1jNTA1NDRiOTRmYWNmZDlkN2FlMDlhZDA2MzIwMTVmODFkMmY3N2ZjNmQ4MGE0MmVjMTFkNjdkOGE5MWMzNzZjCi0xM2M4ZTM0NDRjZGZkZTRkMmExZWQwMjE0MTBmNGQ2YTRlOTc4MDRhZTk0OWJkOTEzMDk0ZDIzMTA4YzlkMzg0Ci01NmYxMTAyNWUyZDI0OTM5MTE0YjZiY2Y1NzlhMDMxNWM1MmYzY2ExYmNjMjg2MGZjMWEwYjlmYjhhMzdhZTJmCi1jMjBjMGZkNDRkMjE1ZmMyYWY3MzdmZDAzMzliMDcwZDU0ZTY2NDAyMTI0MDA3MWM2NjVkZTQxNzBkZmExODJkCi00ZTM4NTY4NWZiNDFhMmQ4NTg4OGIxMTQ5ZTlhNzY2Y2I0ZjMwOWI0ZTJiYWEyOGNmMWY4Y2MxMmM0YjE5ZTMzCi1mMDQ2Y2U5N2I1M2RlYjU0OWZlYTk2Y2Y2Y2U2NjM1N2M0OTA0Yjc5MzJmNWIxY2UwM2NmZTNhMTBjOTc2YjljCi1jOWFkMTFkN2EwMjgxNmY4ZTExNjY2Y2E4YjNlZTE0MTFkZjJjYTk0MTcyNjU5YmFkOTI5ZTNlM2U1MjQ4ZjQ4Ci0wNjkwY2VjNmQ4ZjcwNjE2MDhjZjI2NzJmNjVhYmRjOTZiNGZjYTg0ZDVjODQ3NDQwY2Y5NTIzZDNiZjIzZjZiCi1kNDM2NTU4MmU0YjE4N2I2YTFhMDI4MmVkMzIzYmYyMjFlZGQwYTRjZTExY2U3ZWRhNzM4ZDFhZjQ4YjJlMTlmCi1lYjNkYTE2NjRkZTk5YzQ0N2MzNWRmZDQ1MDY5ZmRlZDFmY2Q3MGI0YTY4NTVlOTFmZmJkNzE0NmVmZTg4MDEyCi0wYmZmMWQ2ZDFhY2I1M2Q1ZTA3ZmI1Nzk1ZjU2MWE0YTNlOTUzYmJhN2MwM2E5NzYyYWRhZTE4ZTU4ZGNlNmIzCi1iMWE3MDMxMjJlZjNiMTY5NjNhYzdjYjk2ODJjZTYwZTE3OTQ3ZTdlNjc1ZDE5OTAxYzdlODI3MmNlNGM5ZmRmCi01MzZhYmRmZmE0MjliODIwYTgyYWVlOWE3M2Q3ZGNmNzdkZGU0ZDhlMjUxY2IzYjNhNWIwYTkxYzBmY2Q3ZmJiCi1lYWQ3YTgxMmZmMTk0ZmQwNDlmMjhiODJmNGMyZDczZTQxY2M3M2MxYzlmNjY4OTMxYTJjN2ViYTU0MDBhMWI5Ci0wOTAyZWZlNjc5MmYyMDcxMzZlMWUxNmI0MTc5NGU2Y2JmNzMxNjg4OWE2MDJkMzVjMzdlZjM2ZGVjOTVhZjI2Ci1lOWJiMDkwMDQ1NmYyZWJmMjcwNWVjY2U3YjJlZDkwMzQzZDIzZTAwNmVjYjI4MmQ0YjM2MjliYjBjMzg5MmYzCi1mZjljMTdmZTZjNWZhYjY4MzU4ZTFjZDQ0YWZmMDIxOTQ4YWM5ZmI4NDEwYTNkZTIyZTBhMDFlMzY3YzUyNDcwCi0yYThjZmQyODRjZjllOGY1MDVkNWRiZDdiYmUyNDJmZTA3MWZlYTAwOTRhNTVlZDFjZDdjOWJlNmI3YzU2Yzk4Ci0xNmFkMTk4NWZiNzYyNGY1ZTQ4Y2Y2YzBjMmVkODViNDY2ZjY0YzUyZjAxN2IyMGNkYWJiODVkMjQ0NTJlMDg2Ci0zOTQyMzYyZTc2NGEyYmRhMGY2YzFiMjQ0MjZlMzAyZGRjNDQwM2EwODdlZmIyODUwY2YzMjc1YzdiMjQyNzVhCi1hZTI3MGYyMTI4MzFmNGM0YTVkOTVkZWFiNjE5MjNjYTEyNmU1ODdlOGY1ZWQ0ZjJkNTczOGYwNmU4YzRmOTExCi1iMzQ2YjhlY2RhYzQ4MWRlZGQyZjU0NjMwNWE3Y2Q2M2NiNjdkNDAwOTNjNjE4ZmJiZGY0OThjOGQ3ZWFkOGM3Ci0xZjVmMDIyZDBiYmNmYWE4NjcwZTNiM2I5OTlhMTY5N2M5NDdhZjM4ZDdlMWEzNjBlM2YwODI1YTlhYTc3ODQwCi1kN2E5ZGZkNTc1Y2UyZjA0ZDMwOGY3YzU1M2ViZjU2OWFjODRmMmMxMmFhMDg2OWNlMTA3YzcxM2EzY2NlNjI0Ci01MDU5YmZiM2Y1YWEyN2QxMGUzMzcwODYxNDRhYjA5Mjg2YmUzODI1YTM0ODJjNTQyMjQ1NGM2YTljYmJmMjA1Ci04MzMzMTY3ODBlYjg4MzAyNzk2ZmM0MjdhMGZiOWU1M2E3YmYyNDU3N2ZlYjNmYTVkODVjYjYzNDRmOTA4MDA3Ci0xODM1MjJkM2M3NjBjMTFmYzdkYThkMTRiYjVkZDgwMDU3NmE2YjRkMWI5OTFjMWJmM2RiMGY5Y2EyYWM1ZDIyCi05MTA3OWExOTlmMmY2ZTZkYzY4MjEzZDMzZWE4OTNiNzRmNmFmZjMwZWQxYjUxZjhiNTNhMDE1ZmZkNGQyMDc2Ci1iNzFmNzMyMjViMTUxY2ZjZjExZTJhMjkxN2NmMWIzZjYwZTJiNGQ0NDIzMDdjMzk0ZTE2MjVmN2U2MGViMTJhCi1mMmViOWNhN2IxN2IwODJmMTY2NGQwOWNiN2EzZjM4YWVhOTlhMTNmNjU5MDg5NDI2MTI2ZjQ3ZmFkNWI2ZGM3Ci02NDEwMWNkNDM3ZGEzYzIyYmM0M2U3YThkZTA3MjUzZWIzNzE0NzBlZTFlNGU0MmE1ZDFmYTJjNGRiNTU2NWFkCi03OWQ2MjcxYWUyOGU4ZmRlNWQ0Y2IyNDA2NGMxNDVkZTQ0ZWQ0ODZhMWU3ZGYyZGY5MjFmMmIxYmU1ZmRiMTIwCi1kOGI3ODFjMzY1NWVhNzJkYzIyYTJhMmQzNzU3OWYwYWY2MGI0MjMyMGFiMjVjOGQ3NjkxMjQzNTI0NDhhMTU0Ci03YTM4MWIzODhhNGQ5YTU0ZTgyZjE5OWJhMzVmMWEzOTgxODIzYWI2OThlM2Y4N2QzOGQzMmFkZGQ0ZjEzODMyCi03N2ZjYzlhY2VlN2ZiZDMyODVmNjg5YTg1Yjc2ZDBmZWI5ZTcwZjA5YmFkMGNlMTQ0NzcwYTZjYzIwM2NlNDBlCi0xNTkxMmRlMGUzNDY1ZGJjNzkxOGUzZWE0OWFkZTU3ZWU4YzQ4Yzc1OTM3ZjVkMjU0OThjNDUxNzA2OTMwNjdlCi02OTAyOTM3YzliNDNhYjYwODAxMTE2NjNkNWRjNmQ4OGY3MmEzOWM1ZTdiYWQ2NzcyMjk0OTgzMjNhM2U3YTIyCi0yZmUyNTUyYjAwY2I5MWNlMjg0OGExYTUzNTM4YjdhZjI1MDNhMzY3MTkwM2UxMGRmMGU5NjQxZGJiNzA1NzdhCi1lODI4ZGQzY2FlOThmYTllMWE3NGY0Mzc3ZjkwOGQzY2Q3OTQ2MTQwOGVkMjk4MzJiYzRjOTg2NTU1MGNjYjAwCi00NTM1OTI4MjI1NTA1N2E0YmQ0ODU5OTE1Y2YxZTQ1ZWNkYjczMjlmOTBiYmY2M2UwYTIyYTU0YjA1YzVhY2QxCi05YzdjNGRmYzI1NDgyYTI3YTIwYzdhYjkwODU0NmMzNTc3ZTg3YWRlOTNlYTQ2NDM2MzE0YTBhN2M1MjRiODkyCi00YjAxMjIzOWU3N2NkNjVhZTI5NDliYmY3ZTQ2YTVhMjI2OWI3ZmZiMWNmOGE1YmM3ZWVhMTk0NGQyYjBiZjM3Ci1iZmMzNmFkYWQ5YTU5OWZhMTMzZjc3OTM1ZjI0ZWY1MTg4MTlkMDU0MzQ1ZGYxNDQ3MzFkZDIzMzJiMGY3ZjVlCi04NGM0NmFmNDg2OTQxY2YxMjkzZTg2ZWU3MTljOWJhYjYyNjM0NzBjNzAwOWMzOTMzZjE4NTdiMGE4NjNlMzZjCi0yODhkMzdlNmFjODVlNmExYjRlNmU5MWMwYTlmZTM2N2JlYzQyN2VhMzcxM2U4ZDFmMDUyM2VjZmY2MDY3NzE3Ci0yNDRjYTIxYzE3Nzk2ODU4MzgxNWYwMjM0MjBhNjYwZjdhYTRjZGM4YmYyNWFjM2IzZTQyOTk0MmI5ZjUxMjNkCi04NDIzNGMxODZkOTIyNjQ4N2M3NmRmZWY1ZDI2MTY1NzcxYzBlNzVmMGFjZTdlMzg4MmU0OWRlODMxYjQ2YzEyCi1lMzBkYzM3Mzk1MjQxZDc2MTljMDVhYmM0MGY1YTM2ZjgwNDJiNDYxZmI2YzNhNTE4MWY3N2IxNGU5ZTZkOTc4Ci0zNzM1NmI0YjMxZmFjMzg1MGRmMTg2OTA2MzcyNDMxNjEwNGM3OTliNmEyZjQyYzM2MWEzNzVlNGQyOWViYTdmCi04NTBmZTI5ZWZiYzJjZWY2MjdhMjVkYjU0OWE0ZDRjNDhmOWZjOWEyZjMyZmE1MGMxY2U2YjVhNTQ1YTk1ZjdlCi1iZjJlOWVkNzEwYWU5MWFjZTEyODFhNDRlNDlhZWU0MTMzY2NjMDQ5MjZhNmRiYTI0YjcyMWMyMTE4OGM4OWE1Ci0yYTQ5NzQ1NTAxY2ZhYTQzNjRjZjQ5ZTNlYzJhNTlkOWVlNDZmMzMzNjI2MzRmOTc1ODgyN2IxOTlmZDA3ZGJhCi05MzliZDczODcxMjQ2NTY4MzE4NjJmNzBhOTdjNWEwNTk1OTU3MmM3NDg2NWY1OTAyZTk1MDkzZmVjZGJlYTNiCi1iYmE5YjQ3ZGFjZTgwNzI2MmRlMGM3ZWYwNDg0MzI1OWY1OGEzMjM0NzEyMzdjZDU3MzI5OGM1ZDBhMDY1MGFkCi0yYWNhYmQ3MWNiNDRjNjM2NzUxOTI4NDVlM2QwMWIzYjI4YWY4NzFmMzQ3ZDRhNDYwY2MyOGQ5ZTk0NDA5NDQzCi0zMGU4OTNkMjdiMDYxMzIwNjNhYjcyN2EzOGY0NDdhMmE0NjMzZDI5YWRhYzAxYmRjY2M3NjM0ZTY0ZGZkYzU1Ci05MTQxZjY5ZTEyMDJjNGEwZmQ0ODQ3OWIwZWQ5NWE3NjA1Yzk0OTAxMzczZTExMDBhNmNiZmMxMTNmY2NlNDQ1Ci1lMDMxN2NjOTRhODUwN2RkNjM3YzM3Njc2OTU0YjlkMzRjNjcyN2FhY2YxNzI4NTg3NmRiMTZkZDBlMTEzODRjCi0yYjk5NmU4NWU4MmZkOGZkMmI4ZjliODNiY2NiMzk4Yjk5NzM2NGYwZGRiNzFlNjBjY2M1MGNkZDVkMTIyZWVjCi1jMzZiODZhODlmYmJiNWJmYjIyN2ZiYTNhN2I3ZGU3YzkwN2U1ODc4MGZjMjc2YzI0ZmYwNjY5ODI2OTFhOTdhCi01MGQxNDM2MmQyN2Q3OTAzNzVhNDcxNjJkZWNjNTNjNWMxMWU4YTc0OTk3ODhkZmQ4NmFlZmZmZTdlNjc0YWVkCi0yNjcwNmUyZDA3OWU5YTU3MWM2YTMyYWNjYzhjMGRjZjIzNTA4ZjU4NDc3ZDA1ZjlhMWZjNjc5YzBkYTY0MjU0Ci0yN2FlMzMyOTNkMDJjOWVjYTAxZGFmMmQwYTFiMDdlNTUxNWQzNmUxOGNhYTNhYjFiNmM1NzM2ZGZkZWZlMzg0Ci1kYmNkMjQ0ZjBjMTEwODdhODczYzQ1MDFjNmRlMmE1YTU3ZTM0NmZkM2Y5MmEwNDUxZTYzZmZmNmI5OWM2ZGZjCi02NGVkODY3M2RjNTRlZjY1MDlkMGQwNDM5MjViY2UzOTA3MmZjNjRkZGYyYzQ5Yjg2MDJkMWE1MWVlODIyZjE5Ci1kN2IyMTM1YWE4NDYyNmJmZTNmZjMyMWE2YmVjM2EwMDNhZDk3ZTc2OTljZmEzNGJmNDFmOWMyYjM4ZGY0Nzk0Ci1jYjVhZTM2Yzk1ZjQyYjQ0MjEyZGU2N2E5NmNhOWQwNDc1ODc5OTg2MzY2NzNhMDMxYzRlYjAzY2YxYTU1MzI2Ci1mNWQ5NGRkZTc1MDg2YjQ0ZjA5NWVkZTAwNjhmYjZiOWQyNTY3NTkwNDFjZGEwNGVjYWNiZDhkNzc4NDE1OWFmCi1hZTMxYTljNjM3ZDlhNWMwYzY4NDBkZDllMzBlYWNjNjZkNGQ2ZmQ2ZjEyYTYwM2FhMmRiM2U5ODY2NjkzMDcwCi0wZDY5Y2RkYzQxNmQ0Yjc2Y2Y2YjgzNWM3YmViZjkxNDgxNmI4N2VkY2Q1YTI0ZTM0NmViYTJkZGVkMzBmNWEwCi1kYzAzM2U5M2IwNDBhNmVlN2Y4YWIzYzQ0YzYxMDE3Yzc1OGMxMWMyZTJmZTNjNGYxODk5NjI4N2E0OGZhOWY4Ci1mZDA2OGM0MmQwZDMzODRmZjI3YzVhODhlZjYzMDEyNTU2MjY2M2VlOTVhNjZiN2I1ODhiNDE3YjIwZDNhZTg0Ci02ZWNmMjY5Mzk0MGQ0NzMzZjllNzBiMDQ1NWI2MDk3ZTczNTUzZWVkMzRkZjhkYTcxMmMyOWQ3NjMyNjY3MGI3Ci0xM2YxOWQ0YjVhZGExODMzZDQ2ZmQ2Y2ZiOTJiODVlYjk0NmNjNzQyNTI3MThjYzVlNjA1Y2Q2YzNjNWE0NmU4Ci01MTUzNmNkZGNjM2NiMjQ0Yzc4ZTYyOWZhYjc4NGZkNzYzNzJjYTk0MTdmYTY3ZjI5MmE3ZTc4MGI3ODE4NmQ3Ci1mMzkxY2Q5MWI2MjIyZTg4YzBiY2ZmNjYyMDg4MTQ5NjU1MTE5NjdiMmVkMGQwNzVjNzdiNTc3MDE2MDhiNjQ3Ci1iNGU0NjJkM2U1NmUwNmMwNDAzZjg1ODU4MmE3NTRkY2JmODg0MWZlODFkMzkzNTlkOGM1YTc3YzhhZTZiNzk1Ci1jMTFiODRmNzAyZGUwOWYyMjQ5OGExODlhNGM2OWQ3MjZhNjMyNjA3ODQwNjY1NjJhNTA1NDRlNWQwN2FlYmI1Ci04MjY1YzFjNjYwN2JmYzYwMDhmMmVkZmM5ZDBkZTcxNjQ2NTQ4ZTU5YmIzNzQ5OTZhNDQxMmFjMjJhYjQ3ZGM4Ci0zNTcxNTNjN2M5MDYxZTk1OTUyYTcyOWE4MGZiNDVmMzY1MGZiMGM4NGEwN2MxOTU2ZGNjMDg1NmQ3YjBmYTcxCi0zZjA5YzFiOTk1YjBjNDhjNTdjOTM2N2MwNjAxYTQ2Y2RhZWZkMDQ2MDczNTY4MmQ1YWFmZTg1NDVjYmE1ODdiCi1jYTZlODE0NGZmMTRhMjViMmZjZTliMjNkOGViZjcxNWM1YTU0NGJkNjQ2ZDU0NjBkMmY4Y2JkNDRiNmQ4MjAzCi01NGU0YjczNzdkYjM1MWZmMjZiN2I5MzM2YTdkY2EzYTYxMGQzYTkyNTQxMDU0YzU0NDA2NDQ0N2FjNmQxYTE1Ci1jZjFkMWEzNzk3Y2ZlODVmYjU1YjU2YWMwMWZiYjZmNDdlOWM4ZTVjMjkyOWJkYzdlZTE0ZjZkODY4NDY0NDkzCi1kZjQ3NTljYzgwNDA1ZWYyNzBhODE2NjA3ZjI0OGM1YzFkNWM1NjAzNWE4ZmZjMWZjMWI1ZjY5YWFiZTJmOTY0Ci1jYmE0YzBlZDU0MTZhMjBmMTAyYzgyYmRmZTU5ZGRiNGExNjE0MGM4NWQ1NWFmMmFhNTJjOTJlZTg1YzM3ODgxCi05Yzk1ODY1NzA0YjNjYzM5ZGE2MjcwZGZhY2E4YzM2MTFlZGJiNmRhNzY3YmI1MGEwM2Q2YTA2ZWQ5ODkwMTA0Ci1kYTJhNTc1ZWE0NWUxNmRhMmUxZmRjZDYwM2M5MWFmNmJlYjkzNGVhMzMwMjMxNTJjMjVjMjdjM2M3NzFiNTUzCi0xYTlhYTFhZTY4NGUxNTM5ZTU0OTk3MmM5NzMyMWZhMDcxMDc1OWI2ZDRiOWU1NWVmMWI0MWJkYTAxZDc3Nzg2Ci04N2MyMmNiNzkzMTBhOTAwMGJhZGU3NGE4YWM5N2IzZWIyZmYwMjRiZmQ2MGMwYWQ3ZmRlZGIyM2M4MDVmNjRlCi1mZDEzOWUwMTVlMGQxZDM1OTFiZTU5MzBjMzU2ZTZiOGMxYTRmMGFkOWFmOTRlZGVkNGVlOWFhYTQzNmQ0Y2Y5Ci01OGM1ODk3ZDA2YjdjOTdjZGVjMjI3NDVjNDZlN2IzNzY5NWE4YzY2MTQwZjdmODQyMTEzODg5MmY0ODUxYzNmCi1kMzU1YjFkZTFkMzIxNDVkMzkyNDNkMDU5MGE5MGYxYzRlYzJjMjQ2ZDNmMzc3OWIzMTljMzhkNDIyMTU3NmJlCi1mZDE3ZDhiYzg4MTljZjhlYzMwMDc1MzA1Zjg2MzdkMWRkZjBmNzI1NWFkNDU2Y2MyOTBmMTBlYzM5ZGRjMmY1Ci0yOTAwOTI3MThlN2QyNjg1MzFhYWViMzc3NzAxZGFmYTkzM2I5NGNlNzYzYzE5NTRlZjBjY2UxOWQ3N2M5MjA4Ci0xNTdjMzhiMjc5YzU3OGM1NmI3ZTUyM2FmY2NjOTFmZTY4MTk0ODNkZTE4Y2VlYmJlNzRiODE4NDRkZGI4NGM2Ci0yMmQ0ZjI5NjYxZTg5ZTU0MTdjZTQzYzI4MDI4ZTllMWM1NDA2M2FmZDcxNjA4OGI2ZThmZTBjZDE3MDJjMmMzCi0zMTI3MzU3M2Y1YzNkNzYwYzhhMmM3Y2JiMzYyZWQ2NTBlYThmZjU0ZjE5ZTA5N2YxNGFmOTczOTg4NWFmMTViCi00NmVkMzFjZGVmNzNkYjY3MWIyMmVmZDQxZmYzZjZiYmQyOTYyNWZhZTc1NzFmOTU0MmZjMDZjNzdlMjhkMmY2Ci0zYmEyYzljZjg5ZGE1NjRkZTNhNmZiM2YwZmY5ODFjNWM0ODJhMWUxZGU3MzAwNDFiN2YxYzg5MGM0NTI4YmYxCi04ZTc5ZjJmYTRlZDhhNzM4ZjA5YTY4YTViNTNlZGY2Y2JjZjg4NjEwMDM5MTdhODk5ODkxNDZhZjdhYjJlNWEyCi04MzYyNzk2NDM5MDBjMjdhOTA0NjM2NzlhMjJmMGNhNTA3NzcyOGY2YWU4YTI4MzI0ZjlhZGNjMTlmYTQ5M2I1Ci1lMjQ2NWM2ZDk4Y2I2MDhmOGRjNTJjZGQ2YzUyYmFkMWExNTAyNzc5YjYzOGRmOTMzNmUxMmYwMzViM2MzMTBjCi1iOTJiM2FkZDA0NzM2NWYyZDI1YjBlYzdlMDVjYzQ2ZjMxYzA1NzVlYWY0ZWJlYTBiNjYwYWEyMGQ5ZTdlZGY5Ci0wYWEwNzdlMzAwMGUyNTE3NjAzOGNjYzkyZDRmOWZkYmFlNmIwNWFhMmUxN2FkMDA0ZTEzMzA4NDY0YTIwY2RkCi0wMjcxZWQwZjk2NGU3M2NiMTFmMThjMmI3OTVkYmEzMWMzZmZkNTY0OGM2M2RhYjM5NTIzOGJhN2MwY2M3ZGI2Ci1iMjA2ZTYxNzljNmFkN2MyNTM0YzQ2YTJiOWMxZDdmZTZiYzY5M2RmMzUxMThiNzA4OTMzNjc3YWIzYTc2Y2VlCi05YWMwMzAzYzJjMDk2N2Q3MThhMTY5MWY2YTkyMmFiYjZiMzc2MjVmYzAxOTA4YzEwMjQyNzMxYjc5YTFhODJjCi1mY2U5ZWZiZDFjNmJkNDgzZmQ4NjdiYzI5Mzg2MDllZTUyYzAyNzFhN2VkMWZkZTFiODY2N2I5OGUyMmZkNDUwCi04NmY1MTVmZDJhYzJjMTFjNTBmY2U5NWYzZTUwNmFjNjUxOGRkNGU1MzJkZGIxMDBkODdhOTI0MGJkY2RhZmMyCi0wYzhiZWM0NjdkNzYyNjExNjVlOWQ4YmRhYzkxOTdlYzc5OGM4MWNmZTgwZTM2MTlmNDMyNjc0Y2FkZjQ0ZmY0Ci0zZjYxMDg5YWJlYjEzZDY2NWU3OTAxZjRhMWJhODQxMTUzMzMyMTAwMDlkNTVlMDUxYjY5MmFlYmVlOWQ5YmYzCi1kMDIxOWMyOTAxOTFjMTdmNzMxN2FhZjQwMmI4OGJhMzUzYzI1ZjEyNmUyZDMyYmVmNzNkNTI4YzY1YWYwODQwCi0zZWQ0MDg2ZGFmZjU3NDc2MjUzMTc5NGZkYmY2MzdiNzY1MjczOTExMjk3Yjc1MzM4NjkxZTllZjRkMmFkNDUyCi0yMjQ1NGM2YTljYmJmMjA1MDM5ZDZkMzVjMDlhMGNlMjg0ZTlhNzc2NzczYTk4ZTA5ZTZhODE2ZGQ3MWQ4MGMzCi1kODBhYmNiMDA2MzUzYjRiN2M0OGM3NmJkOWMxZWQ5ZGI3OGJmNjJlOWFkMjIyMmU1YmVlOWZkZTAyODFmMGU2Ci0xMWZkNmY4OTk5MzhjZWU3MjlhMTg0YmU3Y2JkYjBiODRmYzljMzgwZDZjNjljZGQ2ZTBmM2Y2NzgwYWY2ODRiCi1jZWM2MzYxNjczODUzYjQwMGY0N2UwMDE3N2ZmMWVlN2Y5ZWI4YzI4NWE0OWUxMzdlMDhkNWQ3NjYzZGY3MWFiCi03MWNhNzFhZGMwODU3MDU1Njg2YTA0Nzc3YTJlMTQwOGNlNjI5ZTAxOGM5NzUyNGFmNTU4ODk5MWJlOTJlNGZhCi00YTI3NzQ1YWE5NTBhNzJkNDc5YzQ4ZDZmOGMzMGQ0MjU4YTg4MmYxOTliNDM1OWY5MmE5NjNmYzY1MDIzMGM1Ci03OWVkZjc0M2YyY2ZlODZhMTk3Mjk2ZGQ2NzViZjA1ZjI1ZWQ5NjlkZTc3YmZkZDBiNTE4Y2JiNWMzMGI0ZTQyCi0yN2M1MTE3ZjIzNWIzNGY3ZmMzMjQxM2E5ODBhMzg5NjhmZjliODE1MTI4MGEwMjU5MjE0NzkwZTQyMWQwZjM5Ci1lZWViZTk4YWRiYTgyMDQwMWMyZDQ3ZDQxMzJjYzY4Y2FlMGY1OWIwNDlkNzQ4OWY2MjI1OWJmYzU1MDkxYzgxCi04OWUyNDgwZGNiNzdmNjg5OTY1MTUxYjdmNjcwNmFmNjc1YTg3MTM3MGQyMTk1YjA3NDU3YWY4ODA5ZjdhYmZlCi03ZDM2NzJkNzZhNzRmNTVlYzc0OWVmNDBmNzU1YTNlZWQ5NmNjZTAwMDY0NGNhMGM0OTdhZmFhYjcyOTRhZmRjCi0xM2MzMjM5ZjU0ZjNlZWVlODA5YmNkOTM2ZmY0NDcyNzdkMmYzNjEzOTM2ZTdiMzllNjgzZjI1YjYwNTA1ZjJiCi1mNDM0M2VkMDkwMmJhZGViNjI0OTVjZWY1Mzc4OWI5ZTc0YmFmODY2YmUzM2VmZTY2YzFjNWZhYTk1ZjYwYWM5Ci0xNTZhMjZiYjlmNzJjYjczZTg5MWVlNGI5MDVmNzI4NDViM2FlMDVlMDI1ODc5ZjA3YTdiOTFmZDA2MjA0MTQ4Ci02MDgzMmQ2NGI2YmQ1YWJlMDQ3MmFhN2FmZjA3ZmEwNWQyM2EwMTIzOGI2ZjYyNGFlOGRiMjViYjcxZGRkODkzCi0xZmM2MDAzZjIzMjkyYTQyOGE1YTk5ZGY1ODYxZTBhZTg1OGMzOThkNjZkMDI3YTMyYTcxZDZlNjJkNjJiNmExCi1hMWRiODZiMWVhMzAwNWEyMDE2MThmMjI4OTljYjFlN2Q3MGY2NWZkY2ZiZjc5NjJlZTBkMGQxNTQxMmQwMDZjCi1jZmViZDBlMDg5Mjg4OGYyNjIzOGJkMWY3ZjA5MGRlMDNjNDFlZTRiYTUzNTQ4ZjQ2OWZkYTJkOTRmNmIzZGE4Ci1hNjA2ZmNjMzU1NGUzZjI2MWI4NDkwYTNiOGNkZTNlZTg0NjU0MjY2OGNlM2IzNzEzMThmOTg2NGM0NWE0MjIzCi1mYTJhODZlMTIwMzRiYmE4NjdjNGFiZWI0NjFjNjA5YzhkNDdlMTg0NzAzYmQ2Yzg5MWYzOTA3NmVlMDZiZmQzCi1iZmZhNjc5ZGUwN2Q4YzhlZWQ5YjRiMjRmZjc0YzZkYjJjZjg0MTA4ZjI4ZTRmMGZkYjc4ZTBlNzI2YTliZDNmCi0yYTFiOTRkYWVlMThmZDIwZjJjOTAyY2JlYmExM2MxYjI4MWQwYTExYTk2YjIwODAwZTRjZjkzOWRkMzJiZGE4Ci0yNWFhNjNkOWY4NmYzODBhZjRkZDM3OWQ4MDQ0MWRjNGZiYzA3MTlhNjllYmMxNmUxNjE3OTQwYTE5ZWIwYjQ0Ci05NjU4MTk4MmQ0NWIwOGU1MTIwMDBlMzkxNTQ5MGExYTc5YjkwOGUxZTYzYWUxMjk3NTBmYTQ1ZGQzM2MwZTllCi0yZTc2N2E4OWM2ZjExZTMzZjE5M2RhMThkYzZjODIwZGJlZDhkMzcwNDkyYzE5YWQ5ZDY0MDdlNTBjYjYyNDQ2Ci1kM2FiMDA5ZDllOGYzYzUxZWFjMjEzOWFiNjRmZmExOWI3MDQwNTgxMzY1MmZiYmUzM2ZiZTViYzk1ZDQwYjVmCi05ZWY4MzNhNGIxYjUxZTU2MDY1YWJmZWYxMDM2ZWVhYjhlMDRmMDk2YWFjMGQyODEzYzJlNzIxZTBkYjk3MzY4Ci1jMTdmMGNjOTcxYzljYTE4YTJkYjExNzQ1ZjY3ZDQyY2U1MTQ4ZTJlOGIyYzBlMTNlNGJiMTZhMjc4OWYwYzRjCi1lN2I2NWJlNDU0ZWE2MjMyMTJiYjJjZTVhZmM2YjViM2FkNWJmZWQ2NTA2MzM1NGJlY2JjMTUzMTM4OTk3N2U0Ci02NTk5ODk2ZDlkZGJkZjNhZDZmZGQ4YTQ0YjE0ZWM4Y2M5ZjEzMWQ3M2NiYTkxZTI4Y2I1NGIzNzY1NWU0YjQ0Ci1kYjA0NTdhZTdiZmQzYzZiNzNiYWNmMDk4NjFhN2ZlNGI2NjQ5MjgyMzBmYTAzY2I5OWViYjc2MzcwM2ZmOGQyCi02ODg3N2MzYTNiMWNmOTE1ODkxNTc4YWVjNjBjMWY3ZDFlNDQ3ZmM3NzdkOGViMzU3M2JhMmE5Y2U0N2M5OWNhCi1hOWQ1MmYyZjEyYjEwMWZlNDg2NThlZGM3NTQzZWY4NWRmZTAxYjcyZGM0ZGRhNTk3OTUxZWE0Mjk4ZmQ0NDRhCi1lZTMzYjE0ZmYyZjkxYjcyOTc5MjJkYWE3ZTM0NjQ5MzA4MDg2OGY1NmFhYTIxNzZjOWYyYzEyODRlNGIyNjcyCi1hM2I3NWZhY2UzOWRmMWM4YjdhODI1YTNhNWMyNTg3MWQxOTBlNDg1NzRlMWQwM2E1ZmIwOTRkNDE4YzQ3YWMxCi02ODdlODM0NzAzNmNjNDRmZWQzZDg0ZmU1ZDRiODRhNjFmYWM5OTY4YjhkMDA0YzI4NTM5YTM2ODE0NzZhYzQ1Ci01NjUzODkwMWZmMjc2NGMxYzQ2ZjVmZmUwNDhjZDNhN2VhZmM2YTlmZTk4ZmY5YjNjZmRmM2FjMDM1YTlkM2Y2Ci04ZDc1NDQwZDQzYTE4NDJjYzFlOGI2YjliNmQ0OWE5YmQwOTM2MjA3MzVjOWM3YzExYzIxNjUyYTUyNjJhODZmCi1jMTA0MTNhMzczYTllMDJhNDg4YmQ5YTE2YTUxZmI1MWIwMjdiMmM1Y2RlMzVjYjFhZWQ5MWNlNTg3MDNlMWU5Ci1lYmRjMWExNjFkNzU0ZWU0Mzc0MTIxODJmN2Q1MzI0MjY4NDFlMjQ1NWFkZDIyYzAzMWEyMTcxNDI2ODgxYmJlCi00MDkwZDFjYmZjNDk4ZWY0Njc0OTMwOGI3M2ViZjRkYzVhMDZhZGRlNmY4M2JmYjM2ODM4OGJmN2MyZDkwMGNmCi01NzkzMmJhNGM5ZGIwZjE1ZmFmZjdjYmQ3MDEwNTBhMWRiOThiZGM5YTVmOWY0Mjg5ODBlY2ZiMWU5OTlmNDYwCi0yMzFlNTliNWM2MmM3ODc5Mjc4ZjEwZjZhNjFmNzljYzlkYTI0ZDM1YTJkMjY5OTZkOGE0YTEwNmUwODFiOGM4Ci0zZmNjMDE1Yjc3NWFjYjAwZjc4OTUzYTgzNDAxOGMxNDZjNjVjZDcxNWJmYjVmOTBjMDNmZWFjMDE4MzljNmJhCi0xNTZlMzI3Yzk3MzUwZDI4NTFkZDc3ZTgyNjNiOTY3NzQyNDcyZGMxZTNiOGYwZTk4MGRlOWYxODE1MDA3Y2VhCi01MTYxOWQ4NDM3NWI3NzdkNWNmMzJhMTQ0YWZmZDhlZjBmNGZlZTJkZjFmODM5YjJhNWQ5MDBlYzhlNzYzNjNkCi1jODI5ZjFkMDNkMjExMTc1YWI5ODIyMjY2MTZiMTljNTE4MDBlNGI1ZDRiMjhhYmE4Mjk4MGVhYWM2MTMxOTQwCi0wMjZlM2MyMjk3ZTE5N2ZiOGYxMzBmYjE1ZDJjNDA5OGI5N2M4NDA3NGQ0ZTUwYjVjNjYwNmJiMGYzMjMwOTMxCi01MmIzOWE1ODk2NGI0Y2E0NGNhZjQ1ZjYzYWY0OWIzMzBhYjNkZDg2M2Y1ZWJmYThhYjBkYjZjYzM3ODM4YTY0Ci03MmM2MDFjMjE1MDM3ZTk0YWM4OTQyMGZlYTEzZDUyMTc0ZWQ1YzkzM2U4Yzg1MjVmODhlNmNlNDgyNjYxODYxCi01OGI5MDRiYTdmZGI4NjRjZmUwNGJkN2NlNjA3MGZjNWVmNTc2YjFkZTk4NWE4YzRlZWNhN2ZlMzJiOTBkMzIwCi05MDkxZDg5MzFiYzIxYzZmOTY5Mjg4YjFjYWI0NGJjNTM3NTVkOGQ4ZjI1NzQ2NjgwM2RmZDU3MjVkYmI1ODMwCi00YmU2Yzc4NGZiNmY4YzVlNjY4MDIwMjg3NTljMDU5NzI0NmZjMTAzZWI2M2I1OGYzNjFiMTQ0NjY4NzEzNTcwCi04YzZiZTA3MWI1MWZkZTQyNWEwYWE1NzI0OTg2Y2E2N2U4N2VhY2I4ZjUxN2ZiMzEwM2U1MjU5NWJhMDAyZTAyCi04MmU1NGNiODJiMDRjOTkzZDk5MWQ3MGI1ZWFhYzdhNjM5MjEzZWMwZjgyYTFkNzc1MGYzZjZlOTRkOGFjN2EwCi04YTU4NmI4MTZhOWZiZTc4ZmY5NmJmMWUzY2Q1Mjc5ODA4OWYyNzlhMGEwZDkzZTAzMTQ4ODM5ODhiYmEwZjc4Ci03Y2U1NzQ1ZjhiMDdlYjNiNzUwYzFkMGExM2ZhNGIwMzM4MzQ2MjIwZmY5ZmYxMGNmZTA0ZjI5ZTJjMjRhZWYwCi1mNzdmNjc0OGI2M2IwYzZkNTM0NjE1MzYwMzQ0NTA4MjBjNzMxMTZjYzY2ZmViOWM3ZjdkMDhlMGE0N2Q0YzkyCi1lYzYxYzUzNDIwOTljMjdkOTNhNzlkOWM5ZjI3ODE0MmJhMDNiNTFkNmUxZTAzOTQ0YWJlMDYzYmFhYzMyNjI5Ci0xYjVkYzMwZGU4NTEyZjBjYjNhOTczY2M0M2FmYzJiZTUzMmVkMDEyYzNlYjU4MjY2Y2JlZWJmNjExZjkxYWExCi00ODlkMDE3NGU3MTNiOTc2ZjNhMGIzNmM1NzVkZjU5N2EzZDhiMTJkNGM1NDQxZTNhNDc4ZjA5MzNlYjEyOWVhCi1lNDQ0ODRlMDg0YmRkZTdkMmQ5YmEyM2E2YmYxYmJkZDUxZDk2YmE0YTUyMDdhZjEwNDRlOTE3MTg2YjdlNjZkCi1hY2NkZTEyOTViNjE1ZjM3ZjEzOTU4MjdlMjllM2ExNzExZmIyYjZjNTAzNzRkZjQ2OGJlNDIxY2M1MzFlYWU0Ci1iM2NkMjQ3M2M5NzlkMTFjMTFiZWFmMTRhYTliNmNjZTRhY2M4MjA4ZjIyZjlmYmI2NzEzYmI4MzA2ZTViNWE0Ci1kNDZkMTFlNjA0MTE0ZDlhNWE0YmUwNjE1YTg0M2QxMGRlNTRhZDYyZDU4MjMwMmZmZmNmYWI3Zjc4NWIxMWM0Ci04MzA4MTI4NmNmYTA0MzAyZjdiOTJmNjRkYmI0MmYzZjk3Y2RlMGMwNDc2NjJiZTZhM2U1ODk4NmM1NGI3YzNlCi0yYWMxYjBkMTliYzE0OTAzMTExNTA5MzFhZWQzNDk3YWJhYTc0MzAzZDNmMGEzZjNhZjg2NjdjNGIwYjkxMzg1Ci1jZGM5YmQyYWU5OGFjMzJhMmQ5NDNlMDU4M2EwZjNjNzRmY2I4MDM1NTlmZWEyMTEwOThiNDgzODVkM2Q4ZDMyCi05ZTJjZGE2MWQ3NTg5ZTUzODNmYTMyYWJmY2FjNTAzNTU1NDlmMWU4MTllYjMxNTMxZGFkYzQ3ZjVlNzU5NzkwCi1kMzU1NDQ0ZjFlZmE2YjFkZmM3NzEzZDQ0NjAwODIyNTgwOGZmZmJkYzgxYTNiMWIzNzRjN2YyOTAxZTI3ZTJjCi00MWM0NzdkZTBlNTJlOTAwNTI4OGI3MTc1MTE3YjMyYzMyNmIzYWQyYjlmOTM0Mjg2NWQwYmRkMGJhNjA0NGFjCi0zOTVjMmM2OWJmODJhN2FhOWI3Nzg0MmEzYmM3YjRhNjc1YjBjMzJhNGU0NTA0ZDJhOWZlODc2MjE3MGY1NGMzCi00ZGMzNjIwY2RlYTlkMTg3N2YyNzQ1NTlhYzZkMzdhYTgzZjkwMzQ2MTMwNDcyNzc1ODU4YzE4NzQ2ZGI0NTU4Ci00ZjJmYTc2OTg5MjZjNGZiMmVlZjA5NTE1NzlkYWU2M2MyZDNjN2I5ZTFmYzgxMWVlNWRkYTRkYzViNWU2MWZkCi1jMGVkMjE3MjQ5MDI1MzIwODdkYmVmMTFiMWZkMGQ3MWVjYTlmMjcxYTNkMWJmOGRlZDVkZjE5ZGI2NzYxNTQ3Ci05N2QwYTEyZjk0MTQ3ZDY0YmFkZTUyNzA0Zjg4MGQwZmNiODlmNDk1ODU0N2M2ODM5YzllMTExODkyNzk3ZjI5Ci00ZTY1ZjdhNTRlMTRlYTNkM2Y1MDcxMjk3OWY4NDg1MmU1N2I5YzFkNzA0NzRhMzU5M2Q1M2YyMTYwM2UwMGUwCi1lNzlmZjM1NTkxNGY5YTNkNGFiMWUxNDQxMGVhYzk5MjY5MjhlNzE0MjQ4NTM1YjE3OGQ2ZmU5ZTBlODRjZTk5Ci01OWY2NmZiNTJmMzdhNGUzZGZhNTQ4OGI3NmQ5YWUyZjYyZDQ0OTViY2ExMWNjMTQ4ZGMyMGUyOWE2OTRmYWJkCi1lNjVjNzYyOWViYzQwZmYwYzBmYTEwOTYzMTY1NWQzZWY5ODQ4ZTE2YWE3YzczY2ZkNGFlZDAyZjhmMTI1YWI1Ci0wZDYyOGNlNTJmY2FlNTc3YzdlZjBhYjY4OGEyZjRmYTlhMGUyYTliMTBiOTMxMzBmMGIzNTdmNDY3OWMxZjdjCi05YmQyNzBmMzRmMGJmZDg2NDU5YjQwMmM3NDIyNGE2MjFkZmFkNmVkMzE2ZDA1ZTE1ZDMxNzA3ZmFlN2E5YjYyCi1mOGY3NTUzNzMyNjc0MmYxZTlkMGM3NDgzNDg5ZjRmNGZhMzhlMGYzMjdmMjRmYmZiMjYzMDdlYWQyNzIwYmQ5Ci02NzhmNDU4NzVlYjA1MDM2MzQxYmEzODY2MDYzMGI3ZDAwNTMwNGQ0Mzg4ZmY3ZWIzYmU5YzI2MzVjMjFhZjBhCi0wMmQxMmZkMTlhNGU1MjE4MWE5YzdmMjM1NmIyYTE2ZWFlNGU4ZWQ1YjFlYTBjMDE1NjVjMjY4NTY3ODdmZGZjCi0yYWFhZjExOTU4ZmYzNDE0YWI2MmNhMTllOTQ3ZGI2Yjc4MDMwZTJjNTI4ZjNkMWMwMjE1Y2FkYmIwYzM0ZjcyCi02NzUxZGEwM2M2MDRiYWU3Yjk3ZjM3OTg2NGJiNTRiZTk3OTliZDM4N2U4OGQ2YzcwNTNmODNkYmFlMWNmYjA0Ci1mMmFjODdkMTJkY2JlMTdhNTE4Mzc4MGZhYjQ1ODllOGIwZDcwOTM0ZTg1NmYxMTYyOWE5MWU2ZDEzZGE3NzA0Ci03M2NjODBlMGI4MGJkZDQyYTcxZWVlNWY0M2E0ZGFiOTk0ZWU3Y2ZlZmY4M2QwODE2OWFhMjk4Yzk4YTg1NDc3Ci1kZmM3MjllZDZkYjA5OGI0YWU0N2EyNWI4YWU3NTg3YjhjYjJkNTljYzA5ODljMDYxMjlmYzIwMWU3YzliNzYzCi1mOGIzZjY1MWE1YzczNWVkYzk3NWNlYzRjZTQ2MWU4MWFjOWQ1ZTNiMDhhNzA4ZmM1MzZiNDZiOTU2NmE1OGMzCi0wNDAyYWFmZDJiNjAxOGRkMDYzODc3Yjg4MGY4NWUwOTg5NWRkNGM5ZDg5YjVmMjY0YWQ3MmNiZWE0MzhjMTUzCi0wNTRlMWE1ZWNlMjA5MWUxZDQxMDVmNDZiMDQ3Yjc1ZmYzYmU4NjQ5MWU2OTRjMWUyZTAzYmZmMzY4MTJkMTQ4Ci1kOTkyM2Y1ZDg5YTI4ZmJjNGY0NWZiYzNkYjc0Y2MzN2JmM2NmNDFiMDcwZDcyYTRjZDU3MTUyNGZhNmRmNzg4Ci0zMTUzZTc3ODE4NjQxMjg3YWUyMmIxYzcyMzMxZmJmZjAxOWNjZWNiYzE3MDk2MTVhZDc0OWRjNzdjYjZiMzMxCi0zMGNhM2QwZmEwNWNjNDc0NDdjMTdkOTZjZjZkZWQ3ODJmZjZiNTA1MTkzOTE1YWViZTMxZjFmN2I5NWRjOWZkCi05MWExMjRmOTU1MTIyNDExNzE3NGFlMWUwNTc1NGRlZGNlYzgxM2E4YWE0OTM0YjczZGUxYjIwZDdjMTBhMjBkCi04M2E4YjA4NWNjMmQ0MzFiODczOTdlNWY4Mjg2YzBhODA3MDQxMDE0NzVlYzk4NDViMmJmN2VjYjlhZTQ1N2ZkCi1hYmFkMDllNGU4ZWU0MTFkNGEyMDUxODU5N2IwOGQ1ZGQ2NmFmZWJiYTAzZjYzMmZmMmVkNTIwMjcwODkzZjAwCi0zNWNmMDcxNmY0YTA5MmZhZjhhMGMyYTNmNzNjYTQ2YWZkMmE4MjVlZWUwNDFiYmMyYjY0OTMzMGZlODIxODA3Ci03MDdhMDZlZDkxODQ3YjQzNGQzNDc0Mjg0NDk0N2Q1NGU4MDQyMmY1YjViNTZmNmRiZGE5MzQwODljMzJhZDEyCi0zNzViMzFhZjlhYTkxMzI5YzI1M2ZhZmQzY2ZmNDg1OGMzOWFlNWVmYmVkNGQ1OTA4MTlkMmY1OTYzYjdlMDhhCi05OWUxNTdjYTFjMThiMjBjNjJhOGY3YmQyNzhmNTYwZTg3MWI2MTI2ZDljZGNlYzUyYzY4Mzk0MTdiYzcwZGQyCi00OWZhMzczY2E2ZGQ1NTc1NDA5MDY3MjlmMmZjNTQ3NmMzODU5NWQ5NThhYjJiNmMxNDYyOWY5ZTE2YTJhOWNlCi05ZjZlMmRkNzYwZTU1YTM4YTM0MzJlNzQxMjYxMzUzNjRjZWMwMGE3YjZkYmYwY2Q0ODU1NWRmOWYzMWU3MWFhCi05ZDU3M2JiMDc3MDg1MDMwYWEzMTQ2ZDA2OTNmZTY4Mzg4NGFiMzgwZjA1MmMzOGIzMWIwZTM0ODNkMTIyYzRkCi1kMTVhNmE5M2VhZmVjMzUyM2Y0YjI3NDQ5MzVkZTlkMTY2MGZiNGQ4YTc2ZDgyMDQ1ODYyYjU5ZWEyMTgzOTYxCi1mOTg2OGJmMDNlNGE3MWRiNjFlMDNmYWU5M2JlYTEwOTJhYzVlYzgzZDcxZGFkMTIzZDU2NjMxNDlkNGJkMGJlCi1lNjQzNDM1YWFiYzkxOTk0MmJiYzYwZDRhYjU2ZWNkZWNhZDMwZDI3MDU4OTc3NWEzZmY3MThjZWYwZTJlYTQ2Ci1iOGM3NWZhOTExNzUyZWYxMzQxMDE4NWU1Y2VhMjVhZWU2ZmFlNzQ0ODkzNTVkMzMyOGUwY2JlOGQ0YzU1ZDQ2Ci00MTE0YjRhNGM4NTMwOWRmZjRmMmE1YzJiMTRmYzRmNDc3OWY0ZTNhOGJkMjkwNzZiYWVjMzVjZDU5ZWNhZGNhCi0wOWU5M2Q4ZGQ0Nzg2MDUyZDk3MDQ4NGVhM2NiNDViMzdjNGE2Zjc0MjQ5ZTlmNWViNzU4M2IwMThkY2RhYmZlCi02NzI1OTc2OWFlMWE5MDRmMjBiM2VmMzUyY2QxOTFiYmVkOTk4ZjRiMmMwNjQ2NWQ3MzU1ZTgyZmZhNzE4ZTA4Ci05ZGZhNWM4ZmRhYWM5NWQ4ZTA1Y2Y4YjVhODk5Yjg0ODRjNWVhMTA0ZWVmM2U1YjIxNDM2ZWQzOTY2NjIyMjJjCi04Y2ZkMDBiNWE4NTRiYTkzMzhkYTIwNWYxNmU1YzBmNDUxYmMxYzZjZjM0ZjBkYTA2OWFmNWNjZmI0NjBjY2NiCi1iNmYzOTNhOTlmNjEzOGUwZWNlMjk5ZTBjMGY3ZjFkMGM4M2UwYjkzNmNhYzJkYzM4ZjA4MjkyMjQ1ZTdhZmRjCi02NTM4YzRmZWNjN2Q3MTJlZjgzOTk3MDg4ZjczYWU2ZmYwYWI4M2QwYWU3NmE3ODExY2MwN2I0MWE1N2QxZDM0Ci0wNDY4MTUyNmQzMjdiNDg5MDk0ZGQ5NjFmMmY2MGEwYzZjMjc1ZjA5ZjBhMTcxZTg4MDU2ZjU4NzM1ZDJmNTAyCi02NWExNjdkMTJmZjMzOTVkZjU4YzNiOTAxYTY4ZjBkOTZmOGVmNTRhYzU1NDgwODYyMjlhZGFjNDk1ZmJjMjU2Ci1hZmU4MzI5OTFmMTgzOWFlZGRmMWE4N2FiYzIxNzgzNWU1OGFmNDE5OTgyMzE2NWZiOTg5OWZjODMxYjQ3YmZlCi00YzNjMWY1YTI2OTZlOWE1ZjMxMGFmYjgxMzhlZWEwNmZkYTA2ODhlMGQwZDdjZDFjZWZmOTNhNzJjNTcyODlkCi0zMzI1MjVjM2JjNjBlNTFhYjI1NTI2YTQ4NzZhZmZiMmM2NDY1N2NhZjE0YjM0ZmNhNDZhNzhlNDFiMGMxOTU1Ci0wMWZhMWEwYzBkNzdkNWY3MDI2MjM0YWY0ODliMzE2ODcyZTY0YjRkNDQ5ZWZjNTQwZmIwZGE1NTMwNjNhNzFiCi1kOGVlNDRiMGY5YTIwYWRiOWY2MGI5OTgwM2YxNzYwYzBjZGUzNTc3ODRlODcwNDIxMzNhYTA4NWU5YTM3YTViCi1iNTY4NWU3MzM1NGNhMGU5YTQ4ZDg4NmZkMTI4NDE2NzRiYzA3MTNkNDMzMDE4ODNmMWMyZjYxOTBiNDdhNGI5Ci05OTZjMGU1MjhiNjU3MmM5NjIzMmVjYmM1N2M1NzA3MzQ2M2FlMzZiNWIyOTc0MTYzY2ZmNzU4MjhhMjBjNDdmCi05MjZlOTlmYWFiNTFmMTlmZGJlMGY4OWJiNzFmZmJhOWViOTVhODJiM2E3MTJiNTQ1NzhmNjY1YTg5ZWRmMTkzCi1kNTc1ZWQ5NWJiODgzZjlkNjc5NzAyOWZmMGNjOGE3NTQ1OWZhYzBjY2E0NTMwZTE3ZDkzYzk4MzRhOGQ5YzliCi0zNzZkM2U0MGYzZTQ0ZTZlODk1ZjI1YzkwYTgwM2NmOGIwZjMwNTYwMzc4MDllM2VkNjE4NDc1YzE5OWY0M2NiCi1hN2VlZmY4NGQzOGY0OWFhZmE0ZTQ2OWFhNzhjZGRiODdlYTc2YTg3ZGExYjg4OGMzOGUyMjU0OTlkMWJiMDg5Ci0zMmQ1OTk5MTgyMjdjOTdiMWU0ZGU1MjE0NjBmMWExNzVmZjJmYzUwMGJiOTU1NzRkOWVhYzY0Y2QwMDg5NmY2Ci0yNzU4OWZlNTM1MWY0NmE0NmQxZmU4YWUxNmZkYzk0NWRlY2IwOGMwYjdkODQxYzU1MTY1MzVhYjY1Yjg0NzI0Ci0wNDc5NmJkN2I3MDgzYTYwNjk3NzMxNmRmZmFlZWMwZTg2ODFjMTBkZjRkZWVmNjMzNTQwM2U1YjA4ODg5NTU4Ci00OGJmYjFiODcwOGE1YzQxYzUxNDdmYmVkMzk0MmFjMjZjZTY2MzU3YzQ5MDRiNzkxNDdkY2E1NWYwMzliNjQ4Ci1hZTE4ZDBkNmQzMzBhNjIxMzAxZTNjMWQ2ZTQ3OGZjNmZjZWU0YzMzODJkNDYzNDkxYTE2NzU5NmZmNTFmMTdkCi0xYWZkZDRlZTdhYjhmMWIyN2I0ZWYyYjY2NWNiNjgxODYzN2I1ZTk4MjQ0N2Y2ZDdhYjI4MDZmNzY5ZDI1NGY5Ci1mNTk4MTgxMmE5NDU4YTM5ZjUxMzY2NzczYTg5ODBjN2M2ZGNlZDQ0OGQ4NzhhZjNiYzA4ODIzNzgxNWQyNzI3Ci00MDA5M2NiN2MzYTRlNmU4NmVjNmNkNjFmYThhZDEzYjIwZTI3MGY5N2VlNWJlMTc5OWYyOTY2YTBjYTJhN2M5Ci0zMmRlMDhiYjAyMWFkZjk0NjZmMWI4OGZmZWYzMTViODE4OTU0MDU3ODc3ZDNkNTlmMTczYzFiMTg3NGZmZmRkCi1lMzc0OWEwZGJhN2Q2MmQ3MDQ4M2IxYTdjNzcyMGMxZTk1YzU5ZmFlZWQwYzhiZTE5MTMxNzdjNmRiYWE2OTA1Ci1hNmJkMWExNTM5MDZhYTFiNjkxOWViZDFiZWZiOWE1NGQ5Yjg0Y2Q5ZDU0OGIxYWJlODM5MzM2NzBlYTcxOWI4Ci02MzM3ZDAxMjgzYjk1MzA2ZGI5MmZlMDU5ZGE1MmQxMDdlYzQ3ODE5YmQxNjNiMzgzMGM5ODlkZjQwNTI2MTRhCi05ODY2YjA1N2FlYWVkNDU1ZmM5ODY0ZGYxOTYwZTk3ODA2Y2Y5NTAxMTM5NGUyMDUyODYxMTUyMDI0OTY5ODM2Ci03N2JlODAwOGMyNDZmMTRhZWExYzI2ZTYyMGZiMzMxZjk2Y2QzMmEyM2IxYzg3ZDUzNGQ2NzgxODFhMTk4NzU4Ci00YmZmZTA2OWZiNWEwYzZiNjNjYThhOWNmYjZjM2ZkNmVjZjA3YzViYzU5NzEyZWM3ZDAyYTViOTg4YzNmYmJmCi02OTVmYzcwNjhhNjQ0ZDg4ODVjY2Q4ODk4NzUzMjUzOWU1Y2VmYzY0ZmI5N2VjMTM3NmVmMGE5Nzk3MGRiNTEwCi00YzE5YjdhNjRhMWI0ZjdlZWRmZWMyNTE1OTk2MjM4ZGFkYmJmYThhZmQ4MDA0ZjEyODY3ZGUyMDkxMmMyNzc0Ci0xY2VjYTZmMjk1NmIzNDBjY2I1ZTMwZjJiMWY1ZjYzNzZlNmQzYTI3MmJlMDVjMjkxMjVmNmQ3NGJiZWU3ODc5Ci04ODM2ZWU2NzM5NzFhYjcyNGRjODk4NjdkNWE5MzlkYTBjYjQxNjc4ZmJiOGQ4ZWQzNWVmYTI4ZGU4NjcyOGY3Ci05NTNjOWM1ODk2Yjg2N2U0YjdkZjMzMjI1NjNhZmY4YTMxY2NhODkwMWI1NTQyYWYyYzcyNTQ1NDdjN2MwOWQwCi0xNWJhYTdjYmRjNzM1Mjk2MGFjNjUwYTU0M2YwNWUyOTAzNDFkMjQ1ZGRkMzMxYTU1NmFjN2ZjMGVlN2ViMjQ2Ci03MThiNzEwNzNiOWEzMjc3NmY2MjE1ZmQ4ZmEyMjk3YTJlOWJlMjM3MjhjYmIyNGM1M2VhMTBhNDU0NGRkZmI1Ci03ZDYyOTI2NDA4NDBjNzdiZjAzNzI4YzNlNWQyNjY1ZWQ3ZGI3NDEwYzllY2IzMmMyNDlhNDU2NjRmNzJmOGY0Ci0yZTgxYTJlMDg2YjUzNWY2NDczYjFhMzMxOWQxMzQzMTdlZGJkMTg2NGNiYTdiNzlmODllZjk5ZDE2Yzg4NzFhCi0yOGZiYzRjYjQ1Zjk4MmJhYzZkZTgxZWY2MzdhN2UxMDIyYTU1NzlmNzM4NjdlNDBlMzFlYzg5MDM2MzJlMzNmCi1iMjRhYmU1M2IxZjNhMzA5Nzc3OWI5NzdiYmViNDFjMjE4NTc5MDlkM2UyNWY3YmM4OGU2ZDNmZTZmMTgzZGEwCi0wMTMzYTk5YWUzOTA4MDAxMmRmODQ5OGI5Y2UzMjJlYTliNzYzNDNjMmU4YmUzNjc2ZjA4NjAyNDcwZGEyNzYxCi1lZDlkZTQwN2ZiYTM4YmU4MmRlNjI0ZTE1NTJiZTQwYTBlMTBiNTVhZDc0MzY3YjkxYzgwYjhiYzVjZjU5ZjY0Ci1iNzkwNzIzNjlkOWU0OTJlZTZiOWY5ZGYwYjkxYWU2MDhhNDQwMjBlZDY4NzQwMzg5NzRjY2M5YWZhODhkNmI3Ci04MTE0YWY0ZGUwOWU3N2U0YjBhMWExZmIyN2UyMjZhNjIzODViOTY5YmJlYmI2NTdlYTkyN2ZkODZlMDUwZmYxCi0zZWJkMDAxYTAyMjMzM2Y4Y2FjYTEzYzU0ZjliMzQ1Y2Q1YjY1NTNjOTBiNGY3ZmI5NDlkN2Q2NWQ5YmY5ZmQ5Ci00NmEzYzdjNTMxZjZhNjQ3OWFhYjBkNWE3MDE1YjU2OTU5Nzc3ODkyZmVlYTc5OTBlZGJkMmI0MjNmNmU5Y2U0Ci01ODNjYWFjMTI0YzI2ODYyOGE5Y2I3MDNkZDk2YWFjZDM1YjEwMzFlMDhhNzQxZDAyYWRmZDU3OTI2N2RmNzkwCi01ZWYyNmFmMTRiMmJiZGMyMmExZWIzM2I1ODcxOWExZTg0NjNmMjg3ODRmNGMxNWNiM2MyNWNmYjJlMjBhNTA4Ci03ODU0YTUzZjRhYjM5OGIwMjE3N2RlNTAwYTA0OWQ2YzlmYWExM2ZkNDBjMTkxNzhlODc4ZjFjYzI2MjIxYzU5Ci1iNDA1NDVmNWY0NDQyYWJiYTA2NjU2ZWFkNWFmZDkzOGFkZWIzZWE1MGM2OTk4NjJkNDhlNzY3YzIyM2MxZjIyCi0yNDZlNThjNTY5NGQxZTIzNTExNzEwODE3YTlmZDE4YTE2MjBjYzY1MTM0NWU2ZDMzMDJkODUxMzlmN2E1NzM0Ci03ZTQyM2JlMTQ1ZTE2NWJhZjQ2MDE5ZmU4MzFmOTc2MDJlYzg3YjNjZGZiOGZlYTEyODY5Yzk4ZjExNWQxYjY2Ci01YWE1ODhmYTgyNDg0YWNkZWQ3Y2EyYzEzYTE3YmRhMzA1ZjYzZWUyMjZlZTFmMzdjZjI0N2YxYWVhOWZmOTJlCi0yZmE0YzFlMDQ0OGE1ZGRlNDUyOTQ2OTlhOTQ5MGE1ZWE5NGNmODFjNTM0OTFmYzE5ZTJhZGU1YWYwMDVjMzAwCi1hNWZjOTliODkzZWQxZDQ2OTc4OGU5NGRlODIzMDA2Zjg4NDhkYzlkMDIxZjE5YjkzNDI3OGQ0NGU4YzczZGE5Ci0zNzI4ZjM4OTU2M2UxMGFlNjAxN2M1Y2FmM2I0YjM0MGJlMWQ3ZDJiN2YyNGE4Y2ZjYzFlZDFlYjkyMGNkMzY2Ci02ZmExMmYzNWU0NTY3M2ZiMTJiNDVhNmVkN2U4NDkzNzU3NmU1MzI3YzgyZDdmMjdmNmMwMjU1Zjc1ZWY0YjAyCi1jZDQ5MmIyM2VjMWYzNDZiZGY4ZTAwNzA0MmE4MmFiNzMwYWIyODA1NTY5ZDdiOTc4YTRiMTE0NTc3NTE0NTQ4Ci0wZDQyNmRjNGE4YWQ4NmRlODViMjNhYjVhYThhNTBhMzBiYmRkOGVmNWU5ZmY4ZTc5NTRhNjk5ODdmYjU0MDFlCi1hOWQwMzlkNWUwNWVmMjQ1ZTNjNzBhODUyMzY5NjlmMzJiZDFlNWQyOWQ3MWEyMDEzNDkzOTQ1ZTgwMzgzOGRjCi03MjQxYTczYzRjMWYxNDU0OGVhYWRjYmE2NGFlYmMyOWZkMjI1M2ZhNTliNmIwMzliYjJlZGM5ZTRhN2M4ZTgzCi0zMTdlYzM5YTA3YjhjODI5N2U0YjA4ZDRlNmYwMWE1M2UzZDY5MGYxZDFkYjQ5ZjE5NjQwYzE2NDQxYmU2YWU4Ci1kMWNiZGY4NTMzOTRjZjY2NWY3NDE5Mzg3MzNmYmM3MDBlOGQ4MmM0Y2YxZDcyNDU2MDA4YTBmZTU1YzhiNjc3Ci1hNGYzZTE5N2FhYzliOTc2MzQzOTIzZGQ0YzVhMTgxNDU0MzE5ZmM1MDlkNDk5YmYxNDc0MGVmMTM4N2YzNTRkCi1kNzFjM2JjNWI5ZDRkMmQ5ZTBlN2EzYmM2MGM3OWM4ZTZkMzQ0YmViZWIzYjJkYzJjMzYwNWZkZjEwMDJmMDYxCi1kNTJmNzE4YjU3ZDFmNmMxNDA2YjFmZGYyY2UzN2VlNDU2OTNiYTcyMjg0YzU2NTJiMmQ4OGIyOWFkNTVkOWJkCi03ODAzMmE3NmFlNjQyN2MxOTc0OWNhMTUwM2ZkZmE2ZWRhNDg2MWYwYjBjNzI2ODQ1ODllZmU2YzAxZDljOTY0Ci0xMjAxYjc5YzVjZTAzNTIwNTEwZTEzYmM1NDYxZmEzZDI4OTdlMmI3YzY1ZWJiNTcxZTJkMGNlMzE5MjQ4ZDRhCi1mY2RlNmQ3MGMzOGQyNWY2YmJmMGMwOWI2NDU1M2MzZmRhZGM2NGMyOTNkZWRhNmUyZWQ4YzE5MWQ3ZjQzMmFjCi01YmNjMWFjMzE4M2M5MmQ1NDVhYmJkNGRhN2U3NjgxNDBiOWY1YTUwNzdiMDhkYzhlYWU2NDcyN2VhZGUzZTVjCi0wNWUwNzAzNmIwOGMzMWJhNWFlMzY2YzY0MmY4MTZiNWZhNjBlMTQ4Nzk1ZDNkNGNlMDUwZjA5YzQ0M2Q2ZmUwCi1kNDRmODg1OWQ0M2RhMzk2NDNkNGZiOGM1ZTJlMzRmMWIzMjE0MmRkZWYwN2IxYzAyYzA5ZjRjYzk1MDllYWJlCi05OTM1MGNjZDNhOWQyZDZmYjgwOTAxNmRiZTBjMWEyOWZkMWQyNWNjODMxMjViYTdkMDE0M2UwOTIwM2Y5ZTM0Ci05OWM2ZDA3Y2M3OGJmZGI4MmY3MmM1NzdhZmYxMDQ1Y2QyY2UyZTNkZTAzMDAyODNhZTVhYzU0MGQ0OThlNDY3Ci0wZTM3MThlM2RhYzZkY2RmMWM3YWIyZDVmNzVjNWI2ZTU2YmMzMmQ4ZGRhY2U0Y2U3ZjkyNzJhYWUxODhmM2I3Ci1kNmQzMWIzODA1OTJjZmMwZGU0NWVhYmRkODdjZmFhMTUxNDNjY2U3MzhlZGU0MGJkOWEwNmRiMGIzZDVmNTcwCi1iZTViMjFiMzI4YjNhYzRmZjQ2YWJiMTkwZWMxN2U3M2QzMWFmMzg5ZGM4ZTg4NzI4MGY4NGNhZjdiMzE3YzI3Ci0zODU5MzAwNWFhNTg2YjNjNDkxOGZhOTVhOTQzNWU0NWRiNDBiYjUyZDJmNjAzNDY4NjQ2M2M4NzI4MGI4MDg1Ci04NzcyOTdhODcxZGQxMWZhMWQ3ODI1NjhmZTgxM2NiZGFiNmRhYmE4MjhjMWMyNjRjM2RiODA5Y2I5ZGE2NjM1Ci02NDBjM2U5OTFkYzQxY2IxODQxZWExNTU2Yjc1NjBkNDc1MjZiZGMwMTJhOGYxZGFjYjMwZjM4ZWQwZjQ3MjFiCi1iOThiMTA3NTI2MjU4ZDY2ODA0ZmIwZGQ0YzUyZDgyNzg1MGQ4ZjBhNzY0YTUzY2Q4MWY2NjI2OWE4Y2MxMTRjCi0wNjQ4MmE1YjJiNzUyNDE2NzA3ZDI4ZTg4MjkxYmNhMDJiNzc0NjE2MTc5NDQzN2Y2MWU3ZTMzNTNlY2M5MmM0Ci0xNTFhZjlhMmYwYjBlMGU3YjhiZTMxMDZmYThiNDU1ZTYwZDFiOGU3YTMwYTQ1OTIyZmUwMGY3YWM5MDMxYmUzCi1iOWUxZGNhZTgzMDE3ZmZhMjdmMTk2ZTFiOGRhNmNmZjFiYzI1YzBkNzc2ZGJmNjc1ODM4YzI0YzU3YTMwNzhjCi1kMmY2ZGFkODcyMmFhODk5NzA3OGYyMmJmYWI3ZThmOTk1NTM4MTc0ZDU3N2MyOGQxNjYwZTU0ODQyNzBlNjNiCi05MGZmMjkxMTFhNzFiY2ZkZGEyMDQwMzRhZDZkZjAyNmJhOWZlNjFjMDJiYzk5ZTA1NTNjYWU4MmZjMWY4NGE2Ci1mOGM3NDRjZjM0YTkyYjNmYTIzOWIyM2ZhMmFhNDY5YzU3NjVjMDJhYmVlYTI3MmZjOTI4ZDI0NzE0YzE0ZWExCi0yZGM2ODcxYTgyOTczZjFiNTdhMjA2MzM3OWRjNDcxZjBkZDA2ODRhYjVjZTlhYjgwODg1MTJiNTQ4YzBlOTZjCi01OWYzMTRlZTgxZjliYTBhNzkzMDcyMzI1ZDViMmE0NzhlY2EwNDczOTc0NgotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotY2xlYXJ0b21hcmsKLSUlRW5kUmVzb3VyY2UKLS9GMTIyXzAgL0RUVVVIUCtOaW1idXNTYW5MLUJvbGQgMSAxCi1bIC8ubm90ZGVmL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQvTHNsYXNoL2xzbGFzaAotICAvb2dvbmVrL3JpbmcvLm5vdGRlZi9icmV2ZS9taW51cy8ubm90ZGVmL1pjYXJvbi96Y2Fyb24KLSAgL2Nhcm9uL2RvdGxlc3NpL2RvdGxlc3NqL2ZmL2ZmaS9mZmwvbm90ZXF1YWwvaW5maW5pdHkKLSAgL2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3VtbWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUKLSAgL3NwYWNlL2V4Y2xhbS9xdW90ZWRibC9udW1iZXJzaWduL2RvbGxhci9wZXJjZW50L2FtcGVyc2FuZC9xdW90ZXJpZ2h0Ci0gIC9wYXJlbmxlZnQvcGFyZW5yaWdodC9hc3Rlcmlzay9wbHVzL2NvbW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gKLSAgL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCi0gIC9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KLSAgL2F0L0EvQi9DL0QvRS9GL0cKLSAgL0gvSS9KL0svTC9NL04vTwotICAvUC9RL1IvUy9UL1UvVi9XCi0gIC9YL1kvWi9icmFja2V0bGVmdC9iYWNrc2xhc2gvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUKLSAgL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCi0gIC9oL2kvai9rL2wvbS9uL28KLSAgL3AvcS9yL3MvdC91L3YvdwotICAveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvLm5vdGRlZgotICAvRXVyby9pbnRlZ3JhbC9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwKLSAgL2NpcmN1bWZsZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHByb3hlcXVhbAotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gKLSAgL3RpbGRlL3RyYWRlbWFyay9zY2Fyb24vZ3VpbHNpbmdscmlnaHQvb2UvRGVsdGEvbG96ZW5nZS9ZZGllcmVzaXMKLSAgLy5ub3RkZWYvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbgotICAvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KLSAgL2RlZ3JlZS9wbHVzbWludXMvdHdvc3VwZXJpb3IvdGhyZWVzdXBlcmlvci9hY3V0ZS9tdS9wYXJhZ3JhcGgvcGVyaW9kY2VudGVyZWQKLSAgL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bgotICAvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCi0gIC9FZ3JhdmUvRWFjdXRlL0VjaXJjdW1mbGV4L0VkaWVyZXNpcy9JZ3JhdmUvSWFjdXRlL0ljaXJjdW1mbGV4L0lkaWVyZXNpcwotICAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkKLSAgL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscwotICAvYWdyYXZlL2FhY3V0ZS9hY2lyY3VtZmxleC9hdGlsZGUvYWRpZXJlc2lzL2FyaW5nL2FlL2NjZWRpbGxhCi0gIC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcwotICAvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCi0gIC9vc2xhc2gvdWdyYXZlL3VhY3V0ZS91Y2lyY3VtZmxleC91ZGllcmVzaXMveWFjdXRlL3Rob3JuL3lkaWVyZXNpc10KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgVlhBTVJWK05pbWJ1c1JvbU5vOUwtUmVndQotJSFQUy1BZG9iZUZvbnQtMS4wOiBOaW1idXNSb21ObzlMLVJlZ3UgMS4wNQotJSVDcmVhdGlvbkRhdGU6IFdlZCBEZWMgMjIgMTk5OQotJSBDb3B5cmlnaHQgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50Ci0lIChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSBTZWUgdGhlIGZpbGUgQ09QWUlORyAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpIGZvciBsaWNlbnNlIGNvbmRpdGlvbnMuCi0lIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBpbmNsdWRlIHRoaXMgZm9udAotJSBwcm9ncmFtIGluIGEgUG9zdHNjcmlwdCBvciBQREYgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGEgZG9jdW1lbnQgdGhhdAotJSBjb250YWlucyB0ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBwcmludGVkIHVzaW5nIHRoaXMgZm9udCwgcmVnYXJkbGVzcwotJSBvZiB0aGUgY29uZGl0aW9ucyBvciBsaWNlbnNlIGFwcGx5aW5nIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYuCi0xMiBkaWN0IGJlZ2luCi0vRm9udEluZm8gMTAgZGljdCBkdXAgYmVnaW4KLS92ZXJzaW9uICgxLjA1KSByZWFkb25seSBkZWYKLS9Ob3RpY2UgKChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudC4gU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLikgcmVhZG9ubHkgZGVmCi0vQ29weXJpZ2h0IChDb3B5cmlnaHQgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50KSByZWFkb25seSBkZWYKLS9GdWxsTmFtZSAoTmltYnVzIFJvbWFuIE5vOSBMIFJlZ3VsYXIpIHJlYWRvbmx5IGRlZgotL0ZhbWlseU5hbWUgKE5pbWJ1cyBSb21hbiBObzkgTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChSZWd1bGFyKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAwLjAgZGVmCi0vaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgotL1VuZGVybGluZVBvc2l0aW9uIC0xMDAgZGVmCi0vVW5kZXJsaW5lVGhpY2tuZXNzIDUwIGRlZgotZW5kIHJlYWRvbmx5IGRlZgotL0ZvbnROYW1lIC9WWEFNUlYrTmltYnVzUm9tTm85TC1SZWd1IGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey0xNjggLTI4MSAxMDAwIDkyNH0gcmVhZG9ubHkgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwLjAgMC4wIDAuMDAxIDAuMCAwLjBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCi1jdXJyZW50ZGljdCBlbmQKLWN1cnJlbnRmaWxlIGVleGVjCi1kOWQ2NmY2MzNiODQ2YTk4OWI5OTc0YjAxNzlmYzZjYzQ0NWJjMmMwMzEwM2M2ODU3MGE3YjM1NGE0YTI4MGFlCi02ZmJmN2Y5ODg4ZTAzOWFiNjBmY2FmODUyZWI0Y2UzYWZlYjk3OWQ1ZWE3MGZkZTQ0YTJhZTVjOGMwMTY2YzI3Ci1iZjk2NjVlZWExMWM3ZDIzMjljMWEyMTFkZDI2YmIzNzJiZTU4MjJmNWVhNzBkOTllYjU3OGM3YmVmZDQ0Y2RmCi0wNDVhMzYzMDU2ZTVlMWNjNTE1MjVlYTZmYzA2MWRjZWJiMzM3MjA4ZWZmNzI5ODAyMzc2YTI4MDE0MjRmNjcwCi0wZTdlNjM5N2IyOGYxNWJjMTBiNDAwMTJiMGEzZWFlYjI2OTNlOGY3ZjYyN2M0YzljN2M2YzViZmYxMDVjMWU0Ci0xYjJiOWU4ZjA5MjUzYjc2MDQwZDI2OGI4MDcxOWUxYjNmNWE1NWFiN2I4ZTE1MmE0MGU1OTA0MTkyNDlmMmU0Ci1jMzYxNTlmOGU1NGI1MzI0NjhlMzY5NjVhMzg2NDY3ODFhYjBiN2Y2YTNlODUxZmQxMGNhYTQ5YWRmYzFlNTQ2Ci0yZmQyZWM2MTUwZGM2ZTE5NTIzMDUwZjYxNDgzNDhhNTYxYWQ4ZDJlMjcyMWVmZjhhNTcwY2IzMzQ2MGE3NDViCi05MjZjODg5MzA0YzA5NzUzYzJkNzhmYjBjYTk1ZGM2ZGU1YjhjNTI0NzUyYzgzNjAxZTdlOWY3M2RmNjYwNjc0Ci1mMDVhZDgzYTE2NmRhOWJlODlmMjJmZWFiZDRiMjY2NTk2MGY2ZmI1YmMzMjkyOGUxMjMwYzIxMmU1ZDY5Y2VlCi0wYjMzMTFhMTczOGExMTc0N2FlMjYzMTA2OTE2ZDhlOTVmMjViMjViNGJjNmFmYjAzYjc5YWJiOTVkZGE1MThiCi00MWE0OTQ1ODExMWQyYTE0MzNjMDQzNjI3ZWY5NDYwZDMyNGZmZTIyOTM1ZjRmNmRhODhiOGI5MWFlOTViMzRlCi0wODQwOGEzNGVjOGVhYzNmNjViNmFlM2UzZTI1MjQ4NjdlZTlkMjkwNjhmODFlNDM3MmY0NDcwYmVlYjRkNmJlCi1lZTRkZjk1NmJlY2MwY2I3N2Y4NDkwMTE3YjIyYjJmYjc1YzkzOGVkMGE1ZTIwOGQ4OGJjMzhiMmFiOGI5Y2ZiCi1mMWQ1MzA4NGI2ZjQzZGYzMzY0ODFlY2EwYWEyZDUzMTdiYzgzZmMwZTFkNGRiMDFkMGI3NzA3ZWVmMjE3ZTk0Ci1hN2Y5ODUxMDJkZWQyN2Q4ZThiMDA5ZjdlZjZkYjkxYjkxZTc4YmZhZTdiZDY4OGUxMGIzZGM5YWM3N2NkZWU4Ci00N2FhNGRjOGVjNzgyNDFlNTkzZDI2ZWM3YTYwNjk2MTUxYTJhZTUzMjVkNzM2ZTk5ZTAxYmRjYmRlNjk1NzlmCi05MmVlZWMyMjRiNjc1N2VlZGM2NGE3NTQ1NWJiNjY1ZGY0MmEwZTRjZTdiOTliZjNlN2Q2NmY4ZmZjOGMxM2Y5Ci1kN2ExZmY3YTlkNWZmN2FjNDMzOTY3NzlmMTFjOWIwMDhjMzNhMjA0M2Q0OGI2MWI4OGIwMzEwNGIxNDI1ZjA5Ci02NzViNTU5Y2E0MzAyYzAwMWVlODBkMmI3MzljYzBmZDEwMjNiZjRmMWZmOWMwMWU4OTJlNTljY2E3YzI2MDExCi1iOGUwYjZkMjljYzI5ZmM3Mjc5MmZkYTVlN2Q1ZDg4ZWY5OGY5ZGJhOTYwYzk2NTM0YzM5OWM1NDg2NWVhYjg2Ci0wZmEyZTBkNmM3YzQ0YjU1M2VhYzE1NzRkNTVlNzk3MDc0NGQ0NzkyZmZmYmRjZTZmYjQzNjViZGJjMjk2NWJiCi0yZTllZGFkOWUwZWJmMGI2MjBkYjQxNWFkOTgyOTdmNWFlODNkOWM3MTA0MzY2NTdlNzRkMjZlODM5NTdjNzQ1Ci04OTgzNDMzNzAzNWE3NTAxODAzOTQ3ZjY4ODBiNzBlNTZhM2E0MDRjNjJkNTdiODQ5ZDI4ODA0Y2JlMGY1ODg0Ci00MzVhMGUxMmRjYzliYTQxNGFiYjczMmJmYmFlMjM3MDAxZjU1N2RlYTVlOTcyYmEwODM4YTNjN2M5ZWI3NWFhCi00YTA1MGRhMGE1MjliZGZmYmY5MDExYzM2MDU2NGZkMTdhMDJjMTg4NjBhZjZiODZlZmQ0ZTJjMTI1Njg2YzlhCi01ZTExNGU5NWM3MWZjODlhNWRlOWM1ODliZmU1YWMwNDgwY2ZmNzE2MzQ1MjY1ZDI0MzVlZGFlNjdjZmM0ODAxCi01YmMwOGU3YTQ4ZDY4M2FjZGI5MWUwNWY0NjljMGM4OTE5ZDczYTVkMDdhMWNjYjE3M2UzMGU3NjY4MGFjYjA5Ci0wMmE0MGEzZTExOTE2MTk4YmQ2OWYxYTI2ZTg4MzMwZjUwNjkyZDBkNTkxN2U5OWU3YTAxYjMyNzQxM2UyNGFhCi1lOThlYTQ4NGU0NTg5N2U2YWU0ZDY5OTdiNmU4YmJmNjFjOTQwNmU5MTZkNTY5ODVjYjJiZDI5N2U4YWNmYzZlCi1jZjJkMjI4MWFkODQ2OTZiN2M2Y2I1ODRiZDg1Y2MyMGJhMTRhZGQzYmMzZTI1ZGI5MTEyNGMwYWNmMjJlOTAyCi0zY2ZiZjA0Y2M0MGRlMzMxOTkxZTkwNzVkMjJhYjVlZTBlODQ5YjM0MDA1MGU2YzQxN2M2NjRhNzgyZDA1NTQ5Ci1kYjJlZjU3MmYxOTNiMWMxMmI0NjM1YzJiMzU4NzQ3MDQ2ZGU1ODU4ZWMzMmIzYjJlNzlkNDI3NTA2NTc5NzdmCi1hY2RkMmVlNWE3YzkzMjBkOTA3NDM4ZGJhNjNhYTA1ZWQ0MTBmYzcwMDBmNTM1NDkwOTFiZTcxYmU0NWRhNGFiCi1hMzE1Zjk1YjcyNGE2MGYxN2M3MDgzM2U4ODljZmU3ZWEyMDZhN2FiYzQzOTNjYjZlZjQ3YmUzNzAwYmE1NjM4Ci02ODMxMzkxODA5ZWY4Mzg0YWVhOGMyMjczNWU4MDYyYTlmOTEwMWFkZDEyNWEzMjFmYjY1Mzk5Y2JjZDljOWU2Ci0wZjQ2ZmJmMjcxYjJiMWVjODA4MzJjYzA1NGJhYjVjYTgwZDQ1NjFkYTBhMzgwZDU2ZDVjYjNkOTBhZTg5YTE5Ci00OGNkODI0ZWIxZTdhYzYxMjdhNmRiYTNlOGVhNDBmMDBhZGQ4OTc0OWQ3N2VjMGVlYmUyNmZkNmVhNWQ4Y2NlCi1mNzIzOTY4MWIzZDk0ODk4MjM2YWU5MmZmMzkxMmUwYWZlODRiNmM3ZTA4MTM0YzE1OGI2NDBiNGFlY2FiNWYyCi1hOTAwMjhlNjdkMzNkZjMxYjQ2MWEyODQ2ZjgzZDkwOTc5YmIyMjYxOGUyYTE3YzVkMTU5ZmI1OWQ1MTc3ZTEyCi1lZGYxMzIwZjU5NmU3YTRjMzc5MzI5YWRiMzY3ZjkyYmYyODY5YTlhOTczOThlMGMyMGY1ZjAxN2NhOWRiN2JhCi1iM2JhYjcyYjg3YTdiNmJmNGZlYmQwMzEzMmY5MDc1YzI3MWYyMDU0MDc4Mzk2ZGY4NDAzZGM5MTQ2MTMyNWY2Ci0xMmNmMTQyMWYzMDk5Y2NkNzk5YzJjMDk5NDkyYzRmMDcxMzM2ZDk4NWMwYzM2MGIyZjVhNTg3N2ZkMDBiNmY5Ci0yZTU5MTFkZGRmYjMxZDE3YTYwMTI0ZWU4ZGE2Y2JkYTk0MTk2ZDdlZDQyODA0NjEwZTRmNzMwZGFmMmYyZDVhCi1iNzY3YzMyMGM2MjU0M2UyNjUzNDMxNGZhY2FlMDA2YmEyMDY0NjIzOTAyYzhhYzQ3OWVlZWJiNjA5ZThjM2U0Ci0xNTE2Y2U0MTJjYjQxMGJkMDI2MjMxZTIyYTljZDBmNjY0ZDc2OWU0ZTQ1Y2JiNzViNzM0MWYwNmQ4ZTM3Mjg1Ci1iZWFhOWFiNzFhYWJlM2NiZmU1YTM0ODY4MWFhMjQ2MDQ3Y2EyOWNhNmI0NDJmZWFkZTI1NGM3NTgyZDMyZDNjCi03MWI1ZTY0NWM4MmU5MmYwNTdlYjVmODU5YmVlMjNkYWE5NWM1NzVlZGFhZjk4OTZkNmMxMDk4MGEwOWRiMzRlCi0wODRjOGE3NTRlMzFiNjE4YzY5OTFiYWE4NTZjYjg2ODc3MDQ0ZTEwYzJmMTg5YjI4NGUzMTk1YTJkYjZiOTEwCi0yNTc0ZTI0NjFkMmZhZTY1YjczMjFjMDA5M2EyYTM0OTk2YzBiNzcxMjM1MDNlOWVkYzYyM2RkMDJjNDRmYjc2Ci0zYzU1MDg0MGJkZjk2OTU4MmQyMjY1MTBlYmY4OTk0NGU1OTY4NGViMmUyYzQ2M2U2OTcwMjI2NmZiY2Y4ZDFkCi00YzBiZTQwMDQ5NWUyMjdiOWNiMjFjODA4NmYzMjg3ODJjYTcyOTRkY2YzZWNkYzFhNjI3MTQxNDNhNGMxYjk4Ci1lNWRlMWRkNTU0ZmJhNjA1NzExODhhNThmMDM1NGE2YjllZjU4MDY4OWI3OGEwYzg1MTVjYTA1YTM1ODMyNjE2Ci03ZTBhOTBmNjhmM2MzMDZhYjYwYWFiMjA4NzJmYjE2NzY3M2Y0MWU4ZTg3ZmYwMTExZjU3OWNiZDBkYTY4YjU2Ci0zZTM1ZDJlYmY5ZjI4YjEwNDA4MmUzNjE4NzM3M2VmYzdhMzNmNjJkM2ZlNGEzOTBiNjNhNzZlOWIyNTMxODcxCi02YmQ1OTg2MWY1MWI1NjFkY2MxMTUxOTJhNmZjMjJkMTVhNWFmMDNiYTA5Y2RmYTY2YjY2MGNmNDI4OGU5ZDc5Ci0yNmU3OTcyNTY2NTliMGZmNjRiYjVkOTAwOTkwYzNjYjU4OGUxZTE4ODEwYmNiMDA5YTkxZTVmNGY4ZDlkYjFhCi1mMmEwNjNiZGFiZDljMzMzMmY0YmRiNzAxYmI5NGI0ZmQyNDU3MGI0NDBhZTc0YjhkOTI0ZTQ4ZTdjMmRlZmIwCi01M2ExOWU1YjRkZjM5YWJmNGY2ZmM2MTYwYjVmY2NhMDA2MDg0MjJhMzA5MWNkMDNlNzI2YjFlYTFkMjAzYjNmCi1jNDQxNzM0NjBiNDkwNDk4ZWRhMzEyMTg4MWViZDIxY2I1YjU3MWQyMWE2MjI4Y2MwYTFiMDM1ZWJlOTdmMjZiCi0wYjU4MTc5YmQyMmFjOTUwZWMzYTk4NDU4MDUxYTg3NDI5N2NkNmJmZTczMWM1YjQxMzgxOTUwMzExMWYxZjZlCi1lYmZiNTYyOGM5NTVmNWZjYWVkNzZmMjQwMmNlMzUxZjc3ZTQ3MWQxYzk4MjFkYWQ2MjdmZjI1MTMxNTkwNTc3Ci01ZmY5MzM1ZGQyOGQ4NWExMWJmMTU1NzY1NjMyYjM0YTNhYTFkZjljMDExMzRiZDhmZTkyN2UwMDY0MzE5OTUxCi1lMmMxZDM3NGM5YWNmYzMwOTMyNzEyYTVjM2UwZmUzYzdlMzU1ZTMzNTZlOTEzNWExNDNmMWI0ZTI3MzhlMjA4Ci04ZjQ0NjMzZGQ5MzAwYmFmYzc3MDYyNWE2NGIyYmQyMGQ0ZjY3MjcwMTMxMGU1ZDFkNWIyZGQ1MDI4MDI1MzlhCi02NTM0NDYwMTkyNGM0NzNiNzYxOGY5Yjg3YmY2ZWI0OTQ3NGZlNjI4OTEwOTdiOWIzODFkZmM5ZGQyMmY2Y2ViCi0zNDBlZmQ5NTBiNzRlNjE0YTI5MDhlZWE3YjBkMzk1ZTE1OTQzZDBhOTA3MmUyYzBlNmM5MWQ5MTQxYzg0MjgxCi02YTU5ZjAyMTExMzMzNzIzZGI3OGMyYzI4NzY3NWQ3MzE1MmVlM2M2MzM5N2Y1ZWE2MjAzYzcwNzU2ODEzN2UwCi0xMjQzOGI4NmVhZDE2ZDcxYTBhNTZkMDBlNmFjZTlkODBhZmY2NDZiMDVkODI5ZGNmMDhkY2UyZmVkMWExN2QzCi04M2E3YzllN2MyYTVjYWViMzhiZGE4MDJlNjY5NmJhYjE3YTVkMWU1ZDZjNTFiNjM3MWM2NDJkNTU4OGEyOTQ1Ci0xZjNjOGIwY2Q1NjgwNjUzMTU3OWY3YzBkMTBhOWZiZTI1NGVhOTEwNTIyZDk1NWM4NmRkZDY5M2I4NjYwYmJkCi0xN2IyYjIzZmVhNTdhZjE1YjE3MjBlNDJjNmRlNTM3MDc0YzA3MWM1MGMxMTRhYzU0YzQ1YmEyZmVlMDBkMTNhCi0yNTczYmI5MjQzNjQ4YTFiZTI1NjljZjY4ZmY3OGU0Y2FjYWNkYjM0ZGFkOTE4YTMwMDA1YzMxZjE3NzgxNjMzCi02Yjc0YWY4Yjk5MzFiZWMwYzE4OTI3ODAwMjBjMWE5MjQ3MGUzYWQ3ZjFiYjZlZjI2YzgzNWYxM2E5YzU2ZGVkCi01MWRmNGE3ODQ3Yzk5M2I4OGI5ZmRhOWE4OTU1ZDhiZGJmNmJhNzczZDA2NjQ1ZTI5MmNlMjZkOWRmNGJiZDRmCi0zZDIwZjUyMTYxODUzODI3ODM3YzgzN2YzMzQyNTk5MDgxOGI5NThhZGNjM2FlNzliNTc5MWZmMDRkYWEzMmZlCi01NDA1MGFhOWQzNDYwNmYxNmM3NzYzZGU3NzBjYzMzYzlhY2I2MGU1MzU0ZDVhMjdhNjg3Y2E2ZTBmZDc0YTRiCi01Y2ZmZWFkZjZhZDBiYTg3YjkwNmMwOTIwMWZmNjVjZTZjM2Y2MjBiYmZhYWNjYmU1NGRhODg0Yjg3ZTkwNmI1Ci1mNTI4NWQzODQxZWNmNzhmMGExZWU0YTgwNzI0ZGEzYTRmZDQ5ZmZiYWE2NmJlMzQwMmEyNDgwYTZmOGZjMTY0Ci0zNDNhMzY5ZTJiODk0N2ZkNWY1OGE0Njk3MjM0Yzc0MjY4NTQyMWNlM2Q1NzM5OGM1ZWQ2ZjZiMDQ5ZmRmMzlmCi02ODcwMjM2NzUxZDllZjIyMTBlNjgwYjRkOGE2ZGFhYjc1OGJkN2ZhN2RhOTY4MDYwNGU1YmY4NWQxODI2NjExCi0yY2EwOGU4OTIyYTFkNDZhYzg1M2Y0YmRjYTM3ZjdmZTgwZDJkMjc4NTQwMTJlNGE4ZjcwYmQ4NTRlYTRjMTg5Ci1lYTY5MzkwOTZiNTYxNjhhZWI5NzFhYWFmZTFiY2E2NjcxMzdhNzY3NjFjYmEyZmJmZmNlYWZlM2U5OGQ1NTkwCi1kYjNkYmM0NGIzZjlkNGVmMDQxOWNhZTIzMDg2ODk4YmIyNWEyMjJlZWExOWMxYTc2MDM4OTY3MjkzM2VhN2MyCi04YjMxMDI1NjE5YmQxMDhiNzlkNTFkNTRlMjNmNDAxZjQyMTY1ZjBkNTEzYmIyNDA5Y2U2NmJhM2U4M2ZjMDAwCi00MzcyODczZWI4YjQ0MDVhOGY1YmQ4OGNjMmYyMWQyZDYwZmE0MDI0NzA3ODY5YzVmZDQwZDk0MDI4ZWQxM2IyCi01NzYyY2M3OTI0ZDEwMGQzY2UwZGQzMmNmY2ExMjRlYzFmY2U0Y2NlOGMxMzcwNzBhMThmMDVjZDczODA5NDQ5Ci1iY2RlYjBhYzI0ZGNmNjM2NzlkNDZhYThiM2E0YTVkMGRiZmE5MzQyNzE2NjE5Y2QzNjgzZGZhN2E5ZDY2ODNlCi01YTdhMDNkZGI0NzgzM2ZkZmY4OTM1ZjJmMDA0ZjU4ZWRlNjQ0N2FkY2U0ZmRhMWI3MzRjNzVjNTJkMTZjNDA2Ci05NDI4Y2RmNjg4NTU5NDYwMTQ1ODRmN2ZlNDliMDNmODk2ZTAwNTRjZmZmZjVkYTQ3MjhiZjRjZTFkODkyMDUyCi03MDFiNDhiODFmNThmNWVhMzQ0ZThlYmZlMTNiYWE3MGNiNDNjZTRhOTc5ZDgyMjVlZDc4NDE3NjQ4NjcyZTYxCi0wN2ViN2IzMWY4MWNmNTJiNDEzNjI4ODIwMGU2NDA2NTRlODM1MzRlYWRmMDUzMDFmYWYyZjNhODU5NzcyYzNhCi01NDVmYzIwNDI5MTE5ZmYwMGMyNTlhYTU4MmFmNGUzY2RlMWM5OTc2OWY0ZTQzM2Q5YjE3OGVkY2VjZjE0MmFkCi1mZmFhNmRhMDA0YTkwZjUzZTcwMDQ4YWE4ZDE1YTI2YmZjZjdiMDJlZDcwYmMyNjJkMTY1ZTk5Zjg3Y2E3NDI0Ci0wZWI5OGYzZDdmYzBkNDkyNmFlNDNjOGQzMjJiYjllY2EyNGE0YzQ1ZjdkYmIwZmVhYTlhOTAwZTM1MjFkNmIzCi04N2I1MmEzMGFjYjI5YzkxNGIwNjc5M2YxOWExZWZiZTNiZTdkMGI4ZTIwY2FkOTlkMjkyYzMxNWIxMjM3NmQ1Ci02NTUxMjExODlhODMzMTMyNzE1NzYyY2E3MTE4Njg1ODE0ZjcxYWFhMDhiODllNDY2Yzc0NjhiY2EwMWJkOThiCi02M2VjN2NjM2FjNDFkZDA2YzViYmRhODYyMjdhZmNjMWY3Nzk2YjVmODc4OTQ2YzEzNWJmYTc1YTk4ZGIxYjU3Ci0wZjM4YzQ5NzcwYWUyMzk4NmZmYWVkYmY2NjQ0ZGY1OGEyNTJjMjlhYzgyMWY0NTg0Yjk2YjVkZGFmYTliM2ExCi1hYTBlZjZkMTdmYzFlNzU5MTY3NTNiYzhjNzk5NDk3ZTEyNzllYzc4M2VhODZkZjMwN2NkNTRiNThjMmIzZWJiCi1mZDcyMjAwNmQxMjc4MzRiMDg5NjcwZTVmMWU3YmE4YmM0YTBmNjE4MWJiNGVmYmI4Zjk5ZTQ0NzUxODE0NDlmCi0yZmNiMjU1ZGE0MjMzZjdhYjA5N2VmMDEwOGJhM2ZjMTJjZGEwNjE4ODcwZWFjYjlmZTQxOTVkZmFiMTgyMjQyCi1iYWUwOTU2ZDA5ZTM4OGQxMGRhMmY5NDAxODZlMjVjOTkyNjg4NmU5ODA2YzcwMTA1ZGM3NTI1OWZiMWU1ZGEyCi02NzVlNGUxMTRmODQ4NjJlNmI4MjJhMTBhOWQzNjRiMWNkMTNkY2EzZDM4NWI4MzQ5OWM3MTVlY2Q3NTk4NzY2Ci1iMjE1OTEwZjAwMjM1OGQ1OTJmYzM2ZDBiZDQ4MmVlOWNjMzM4Mzc4ZWExNTY2ODM5NTI2YTU3ODNmMjUwODE4Ci0wNzhiOTdkNzNiMWQ2MmExYWFkM2Q1YTk3NTNiZmVmMjNmN2IzZTZkNWJkMzE4YzQ2M2FhMDQ0OTBiOTA2M2EwCi1lODNlM2U2ODEwOWIxODI3MjBkMmIxYzEzYjQ5OGY4ZjQ5NTY2MWMwZjRlNjQ1NWI5NmE2YTkyZmY4MDZmMWNiCi0zYjFjNmVhYzgyZDlhNjg3YjgzYzU3MmM0MmRmMjJiZWFlMzFkMTIzOTcxOTE4NmYxNGVmNjM3ZmU0ZTdjN2IxCi1mZThmNGYxYmQ4MzY3ZDc2ZDQ2N2JlOTVjMzk0YTgxODE5OGQ5MjJiY2FlZWVlMzcxZmUxN2UzOTZiMjdjZWM1Ci1mMDU1NDc3ODU4N2ZjN2Q3OGFjZGYzMTdhOGVmZGZjODJjMmY1N2I2NDExYjNhYjY4Zjk2ZTNlN2NkMzIxYTZkCi00NzgzNDM1MDU2YWI1YTAwOTU3MjY0MzViZTY4ODViZjI3ODRmYjJjYmVmZmMwZjgyNDhkY2Q1OTRkMzRiMjFjCi05OGU2N2RlNTBiNjg3NmMzZDZkNGQ0Y2E3Y2UwYjkwMTNlYmU3NTRiMTA0ZGNmYzA3MTlhMTBjZGQ5OTg1ZTE5Ci0yY2RmNGU4ODg3NmMyZGQ0ZTc5ZTIzYWZhNzBhYjViNDc1OGFmMzJlZTg3Yjg0MTViODgxYWMxNWM1YzNlMWJjCi1kMTdhNWI5NjFlZmIzYThkYzk4N2RlZGVkNmYyOGEyNDBkNjZmMDA0YWQwNWNlMWM1NTFlMjliNDU2NjhkYjJiCi0zMDVjOWIxYWY1Y2Q1Mzg4YTA4MDJkODBmMThlMGY0YmM4MDY1YmFmMzkzZmZhYjlhNGQ2NzQzMTJjMjAzM2QyCi03Yzc4YjVlOTQ2MWZiMDliOWIyY2FhYWI3MGNlYjNhZmE1NzRjODliYzYyMDMyODIxMWM4NTY1NmY2M2E4ZGRkCi05N2M4MjcyOTczMjdiNzk4MGMyZmUwYWNiMWMzNDg2NmFhM2M1ZDc0MDhlMjU3ZWJhM2M1M2RlODMzOGJkZjk2Ci1jYjdiYTU1ZmUzMWJkZGJmNzgwNzE0OGMwYTEzMmJkYmJlOGEyYzIxYTIzZTExODg5ZGExM2U0Mjk5MTRmN2Y1Ci03MTMyOTM2MzU5YTBjYzY1ZTU5OTNjYWY1MjkwMmY3NmY3NWQ2Y2I0NmRkMjBhM2MwYmU4MGQ0NWYyYzc0NmJmCi0yMzY3MzM0NjIwODBmYmRjOGM1YzFkYmU5NzgxZjQ1YWJhNzRhZjgwMzNhNmVmMmJkYjE2ZjdiMDkzMGQ2YjZlCi03Y2E3ZmFjOGNmYjJkZmFiOGMwNjNkOTYxMDc3NTg1ZDI0ZThmYmI1ZTBiMGJlZTljNDUwOWIyMzM2MWRkMDZhCi1kZDI1NzY3ODMzYjlhNzcwNzgwYjMxMWY2MDhjYWU3YWRkZTAwMDI5N2EyNjcyMjExZjBkZThjZjdmNWZiYzYyCi03OGZhYmEyNWQwMzVmZTNhN2NjM2E0NzQzYzBlZmUxYzRhNWU5Y2FkZjFlMDViYzc5ODI2NDhkNWM5ZmIyOTkyCi00YTllZTE1NzBiYTJhYjA2OGNjZTE2ODU1MjI5OTM2MWQ2MmEyYmMyYzBkYTQ4ZWU5NGQxY2VkZjFlMmQyOWJiCi00Mzg2NGFiNWI3NzBhMTRjOThhNDMyYWI3NmMxNzk5ODkwNGYwNTJhNTBlZjg0NTEwMDUzM2JhNWNmYjI0Yzg0Ci1kYTUzNTgxZWM0ZjIyMDFjYTlmZGFlNzZlZjM2NTUxNTE4OGFjZTRjZmM5MzlhZDZkMTkzNDEzY2E3ZWUyMjViCi0wMTM3ZjQ2MzdmMDk5NTIyMTNiZTcyNWNjN2FlYzU3OWIyZmU4NWY3YzZhZjE4ZDcwYzRmZGEwNTU3NTY3ZTY0Ci1kNDMwZjA5YWNhN2JmMjg5ODQ5NzdiYTBmNTg0OWE1YTg2NzI5ZDU2NDBiYmU0YzMwYjE3YWIwMzI2MmEwMmJkCi04ZWUwNzdlYWQ3ZmRhZWZkMzdhZjE2MDA3ZDgzNzE0YWNhMDdmY2Y4ODJhZGM0NzkyNTgzYWFiYjI3OTU3OWRmCi02NzQxZjYzN2NkZjg1OThmYjU4Mjc1Mjg3NzE0NDRiMGFhODJkZDVlMDBlNzBlZGVmYTc0MDVhMWQ4YTc3OTdiCi1lZjAyMWE1M2JhNjhjN2ZmNjc4MGM5NGYxMzkzZDE3NDVhYjFmZDdjNzI4YzYxMTI3NjZhM2MyZTIxZGZmMDAyCi05ZTQ1YTVjNTY2OGY4YjA4NGYyMmNkNmE2Y2ZiMDU2Y2YwZjQwMmE3M2IyYzAyMTE4MjU5MzUyZWZmNmQ2ODBiCi04NzdjZTMwMjRjMzdkNTMyYzE4NmYzZDRhOTc2MDM3MDRjYzBkZGIyNWNhYzAwYWViNGNmNjAxZjZmYjQ1NjU1Ci04OTM5YWI5NjJjYjllMTZhMjQwMDkzOGQyMjYwNTY1MzVlYmU1NzA3Y2YwYTg2NzhiNTRlNmUzYTEwM2IyZWZmCi0wYmI3MzA2ZDdjN2MzZjUyM2IyYWVjMjY3YTVmMWUzZjk5MjA4ZDhlYzlhYjI3ZDY1OGMyNmY2MzVjMjk4NGFiCi01YTRkMjE0NzY4YzZkYzc3NWJjYzYxNjgzODE1OWFhMTBkNWJkOTNjZmM4YjJkODM2ZWFlNWVkNDgwZmI2ZGRiCi0yNDI1M2E2MmExYjc5OGJmYTUxYjA2OGI2ODg4Yjc2ZDIyMzNiNmZiMTE3OTRmMTY2MjU0Y2IzYWM4Y2ZiNjUwCi00Mjk4NjZkYmViOGQwOWU2ZDAzODg5ODk5YTRlOGJmYzlhODU1ZWE0NjYwZjkyOGQwYWFlODI0N2VlYzE2NjhjCi04ZTc5ODM5OGQ1M2U1MmE1Njg0Y2FhNTljNDdjYjM4YzhmMTAwOWE4YWExMmEyNjlhNTg3NTkzODc0YzJkYzc4Ci0wYmE5ODkwNzg5MTBmM2Q3MDIxMTE0Nzc1MWU5ZjcyNjRkNmU2NGYxYjA1NDEwZWQzNDI3YmI3ZDA3MDQ0NDNlCi1mMmJhZWIwZmI5ZTNmMWMxYzE0YjE3OGU3MTZmZWI0NjQ0MjQwNDQ3YTNmMDIyMTEzNTBlMzZlMWE1ODZhMDQyCi05YWIzMzZjNmI0NGMwZDI5NzcyOTRlNzA0ZTg2OTViNmRhZjA3OWJjYTAzM2I2YmQzNDg1ZWI3YTc4NTgyZmI5Ci0zNzM3MTYxMzZjNjNlYWRiYWIzYTI1Nzc3MzhmNTUzZjgxMTM1ODI5ZjkxMThmNGJmZTIwY2Q1MTE5MGJkN2M1Ci0xNzAzNWViZTk3ZjI2YjBiNTg5NzNlYTliNWUwZDExMWQ5ZWFjZjJmYTU0YjIyM2M0ZjQwYzEzOWFiODkxYTQxCi1jN2Q1YmE1MzM4YmZkNTgwOTBlYTcyN2MzZmQ5ZDBjMDIxN2MwNTc5ODc4Nzg4MWQwN2NlZmUwMTk1MThjY2RkCi1hN2FkNzIzMDVmMDZhOTg3MTdjZGE4MGM1ZGFhYWZjNTBlM2M2ZDc4ZDJiNWQ4NTFiZWVjNDY3MzFhNmMyOWVkCi1kZGNiOTA4OWRlNWNjMmRkYjY5NmQzYjdkZTNiNjdmMDY2NTI3YWUyMmNjMWFlNjI4NWRkMWFkNDJlMDgwOWVlCi02NTgxMjI2OGQyOGU3MTA1ODU5MjYyZTkzNjhhM2FhN2ZkMDIwN2Q0N2RlNWVhNTU5MTkyN2Y1ZTU2ODM4NmQzCi1hNjFmY2JlODcyOTQ1YTI3MmM3NTM4NGJlMWU4NWIyNmFhMDk0NzA0NzE1ZjE5NTdkZTM3YTJmZGUyNTc3YmEzCi04NTAwMGQwNzA4ZmM5MThkNTIzNjBjZGE4MjhjZWRkMTdjYjdkNjI1MTU1Y2ViNjkzMWEyOTAyNWI0NGVjOGZjCi0zNjc4ZmEwODAyN2IyMGZiOTY0OWQwN2YwMTQ4NGYyZmQyZTE3NDZmMjkwZTMyNDM0ZmNkNGQxNWFjZjA3MDhiCi1lZTNmZTk5NDhkM2FlMTQxNzQ5YjQ3ODEwNTU4ZDcxZDU5MjczNWMxYzg2ZWUzNzViZTc0MTNiMmNmNDYyNjYwCi0wYjExNWNkMDQzZWRlNTYxMmFiODk1Y2VlMDkwOWRhOGQxNjU0MDhjZDVjNGMzNDExNGVlNGQ3ZmFiNGMzN2I2Ci1hMzFjYjgyOWM0YmFiMmRkMDRiMWE3MDk3ZGVjMjRjNjQyOWMxMzQ4MjY2NzExNjUyMmY5NGVkYzk5ZGU1NTFjCi1hNjkzMzYyYmU0ZDI3N2UxMjgyOWJjNDY2ZTEzZDA5ODQxYjVkOWFmNTA0YmU0ZWE1OWU5YzI0NTllZWE1YWMyCi1jNjc4ZTNmYTMwY2RmYzVhYjg1NWQ1NmMxYWQ4Mzc0Zjk3NjlhNmI1NzVhMWRlZTVhYWFhYjRmNzE2ZGNlYmUwCi0wZmFiOGIwYjU1MjIyOTRjZTMxNjRmODQ0NjY3OWZjYzdhZmY1YmY0OTA2MmNlYTU4ZjVjNjYxYTg5NWFlNzUzCi04ODkxNTM2MDY2Zjg0MTZmZjVlMzU3ZmMzNGNjMzRkNmI2OGFiZTJmYjJjNTQwYTcxMjNiYmY5MGQyNjcxZjY1Ci05MDUxNWI5NmNkZDFiZDJjMTM5NmJjMTU1MDNjYWE0Y2NkM2NlMjhlMDM2MTgwMWJkYzVkYTk4ODg3YjJjMzlkCi1iODRhMGE0ZGU3ODU5YzdkYTM5NGFjYzQ5NzY0MWVjZTEyYWQ4YTdkNjJhYzVmOGU2YmRhMDU3N2ZlNjRkNTgxCi0zNTM5MGEzN2ExNTcwY2IyNWIyM2I3NDdiMjM2ZjNmMjYwNmEzZmY2ZTQ4N2E3ODA2OWEwNjhlN2FmMTNhOGU5Ci0zMTUwMTZlYmIyNTUyZjY0NDA2NTQwOGE2OWYxYmI2ZmVkNTA0ODZiMmEwNWQ0MDNjZDU2ZWM1ZDM2NzFjOWNlCi0wOTE5OTVkMzg0NDkxYjY1ZWVhZjMzMDc4NTI5MjM4MzQyYzMyYTRiODE3ODhjMzFlNjJiYTA2MTRiYWZjZjljCi0zYzFjZDQyMmM2MDU3NDBhODkzOTQ4N2UyNmJiOTIzM2Q0Y2RlNjhhZmU3YTBjYWRjM2FlY2Q3MzljOWM0MjVkCi0wOWNiNTBiNGI0YmUyODExNWJhN2ZjNTliNTQxNTEzY2Q2ZmQwODAzOWNmNDBhMWY1YjkwYThiZDEyNjM4MDZmCi1lYzM1YWFhNDEwMGVjYzA1NDE2ZWNlMmYwNjFjZmRiYzMyMWNmMzMyNGYxZWRhOTE5NzZjYWJiOGQyZDlhY2M5Ci1iOTNjNTc1YzM2M2ZhNjkxZTE4MjE1MzExNDMxODQxZGU4MTg3YTIwZDY2NjQzNDhjN2E4YWRiMDZlODY3ZDAyCi0wN2JkNDhmZTgwNjcxNjhjNDQxMmZjODBjZGJhNjJmOGI5MjA5ZjU0MDc2NzBhMjZkYjFmN2Y1ZDY3YzRkMjI3Ci05MGJjZDBmMWU4NjQwZTVmOTI4OGM0MTA0ODcyOTA4MDhiODhmOTQyMWQ1MDYzODZhYzk1Y2Q5NTlmZDFlZDA3Ci03NzhkZTJmNjI5NThmZjQwOWQzNzMzMmFhNGJhODhjNzM1ZjJhNTZlNGU3NDZlZTk4Yjk2NjcwNzI4NzRiMjFhCi01Zjk4MjI1YWVlY2FiZjVjYzgxOGYzZmE1NGVkZGUxNzhiNDBhMWIxZDZlMmY5MDAzNjVlMmI1MDMzNDZiMjEzCi1kZGI0M2EyNjljNWE5NzNkMzAzZGJmNjE1YWMzY2FhYmZjMzlmZTIxNDQ2ODFlN2NkNjMzMDU2YmM3N2Q5NWE5Ci0xNmY1NDI5MTU3NWFmZjdhM2E0YzEzZWNhNjFhOGQyNjFiM2E3NDMwN2FhYzM4YjUwYzBlNTUyMjI2MjZlNzE3Ci1kYjZlMTIyNTQ3YjNiOGE3NjZmYjg3N2RlZWVhNTJlY2UyZTc0YmEwMmNhNzY3NmYwZTAzN2NmZmFmMjg3MzQwCi1jMTliYmZkOTM3OGQ4ZTg5ODIyNWVkYTNmYmY4MTRhZDUxZjk3NjI0MWE3Mjg1ZGJjYzYyNjEwZmU5OThlYmM5Ci03ZGM1OTYxYWY5ZDcwYTY3ODZlODkyMmU3OTMyYTUzOWYxNjA2MTAxNDQwYzY4NTVmMjI4NGViMzRhODk1Y2FlCi00NDYzN2I2YTBiMWM2Mzg2YzIxZjExZjJlN2VlMmFkZjAxMmVhNmZmMzUzMTQ5ODEyMjY1MDViZDRiMGVhMjVkCi0zNzFiZTlmYjZmYzA0MjVkOGYzNzRjYzUxZmNiMTU2MDBmZjdhNDlhNDEwNGJjMjlhMzY5YzgzMzY0MzhiZDRhCi00NWI3YzhmZDUyNTc3YTQ5YWNkYjM5NGNiYmMxNmM4NDRhZDk5Zjg1YjVhZjFlODAxODkwMGQ1MDg2MmQ3YzdiCi0wNDVlZTRiZjc5NzJlYjA1YWE1Njk2YTAwNGYzZWM5YmU5NWM0YzE0MTgwYzdjODA5OGEzYTA0NDNjMGRmYWFkCi05MWU5YzNhMzc1MDliMjkwNjZhZjExMmRiNzcxMDdiOWRhZjJlNDVlNzJkY2Q3ODY2MGQ1ZDU2MDE4Y2RmMWU0Ci1jYTc4NzU5M2MzMWEyZDZlZjkyNWUzN2U0ZWU3N2U2ODdlMTQ5YmY1MDY2NjQ5NzVjY2JmNWZkYzIwYjVjMzA2Ci05ODQyMDhmZmI5ZWMyZjc5ZTc2YTdhMDI5Y2Y1OTgxZmQyZDA3MTc2MDgzZDdmYTBkOWZhN2IxZTZjNmRhOWZlCi00MjNiZjI5MDExNDc4YmEzOWZiZGM3ZTc3YmEyMzBlZTdiODk3MjhjOTMxMjYwMmRkYTM1OWYxZWU2NWJhMzYyCi1kMWYzNjY1Nzk0MzI1NWQ2MmYwYzg0ZmU4YTYzMDIwNGE4ZTY0ZDhmOTQwZTlkZGFmM2MyZGRjMTZmZDEzMWM3Ci1mMzAyYTJmOWZiNjVlY2NjYWQ0NjE2OTc3YjJlYzcyNGZjNmE0YzM5NDE3OTYyZTBkZTFkY2ZhNjlhZWM4YTAyCi0wNzE3OTI2NjkzNWI2NTVkMjBhZjNkNDUyMjhhYzM3OTZmZDJiN2I2ZTA1ODA5MDRhMjdmZTBjODAyM2Y0ZmEwCi1mZDcwZTQ2OWU1ZjMwOTY5MGM2YWI3MzdlOWUwZGQxZGI1N2ZiMzEyMzYyYjY0ZmYxOTU1NDAxMzk1YjQyMDg2Ci0wN2U3Zjk0NDlhODk1MzE0OWYzMjRiNGQ1Nzg1YzJhMGE0YzI4ZWI0ODdmZDBiZmQ2NTQ2MmExYTRhNzQxYmUxCi1iMTg3NjMzMDkxMmVkZWZjYWNlMWRmYWNlYTc2MjhkMTZhNDcxNmQzOTg5ZTFiMzE4MzBjYmMyYmY5ZmNlMTQ0Ci05ZjBlODBiZGNiY2ZjZjQ3N2EyYzMwYTcyZWMyMjdiMjBhMGFmMTZmY2I4MzU2YmMyMDVmMThjNjA4OGMxZDZkCi1jNTc5ZjFkY2QyM2ZmYTE0N2Q3MjgyMWI3YTYzZmMwMTFkNTcxOGZlZDQxYjE2ZWExZDgzZWNkOGQyYWRlMjg5Ci01NGVhYTEwNWY4MmY3NzdiNjYzNWMxNjBkMGUzZDY3ZmJmZjIwODBkYjJhOTlkNDg5YTA3MGQ4NjVjMzlhYzlkCi0yYTg4YWI1ZmJjZTAxMDkxOWVkYzBhYjIxM2EwOTAzOGZhYzZkM2M4MWE0OTcyZTNjNTY4M2Y0OTQ4MGZhNWZlCi1iOGNkMzI3OTM5ODAyOGRhYjYzZWY3ZThlMWRmODVhNjNmOTMyNzNmMTg3ZjhmODYxOWMxNGFiODI0Yzk3YzNjCi03MGQwNmZiYzBhMWI0YmUxYjJiN2YxMWVmNDY5YWRlZjcxNjE3YjMwNGI1MWM0NjJhYjNjNmMwZTgzMWM5YWQzCi1jYjgwYzVlMGQwZmFmZDA3OWQ3ZjRmMjQ1ZDU0MmVhODkyYzZmZTNjM2Q2ZDFhYzJjOTIzNzFiN2EzM2FhYjVhCi1hYjgzNzViNGNhZTk2NjFjOWQzMTQ5OTkwOTNiMmEwNGVhMWNiNjcxYzlmMDdlY2VmYmE2MTVlMDIzY2IwZjcyCi1iNmVlZDIzMWFkMzFiMWY0ZDAzZTgwN2U1NmMxZTE2NjM5ODZlZWQ2NWUzZWU0N2EyZGQxMWMxMjExMjM2OTczCi00YjQ2MDdhNjU3MGY1MzRkZWJjNzJhYzA2ZGJiMjE0OWY5ZWZiNzkzYTkxN2IzYjYwNDI3MWZiNzY0ZmFiODcxCi1mN2FhNWE1ZmNjNTQ1MzM5NTE0NTRmZTdhZmEyOWNkZGVmOTZlOTUxYWFhOWI4ZWViM2Y5YjQxOGJkMTMyOTc0Ci1jNjAxYjZmYTI5NDcxZGMzNDgxNGZjODFhMWUxYTUxNTU5NTFjMTIwMjJhYWRjZTU4MjYzMDIyMjBiMThkZmMzCi1kMzBiMjI3N2QwOGU3Y2M3YTg3YmYxYjhlYzQ1MDdiNDNjZWZiMTE3MTE5ZDg2ZGUzYmU1MWJmODcwMzkwZWEzCi1kOGRhYTNmNzRjY2QzNzEyZDFjMDAyNjFlODUzZGMzMDc4ZGQ0MTExODk4NzJhNTBkODVkNThjZWU4ZmZmYjFmCi0wMjg4MDI5NDkwNDEyZjNlNThmODNkYWRhMDhmYTY5NWIxOGVmZDBhNGYyODk3MDUzODVhNDExZmNiMmQ3YTQ3Ci1mZmUzODk3N2ZjZTE4MTg4YzAwNDNjNDQ4ZDI3ZTE2MGVlNzUyYmUwZDQ0ZDBmODNiNmJmNjQyYzY5NGFhNTMwCi1lMjIzYWVmYTNmZGIxN2VlN2FlYWJhNzViOWE4NmQ3Y2IwZjUwYWQ0ZDVjZTY4ZDRlZDQ4Y2IwYzE4OGY5ZGM0Ci0zNDU0OGI0ODQwMzA3OGY2MzA3OWJjZTg1MjlmOTEwYWIyODBlYmNhZTdkZjlmODI0ZGNhNzU2ZjlkNjQ3ZGM0Ci1kNDJkYTQxMjIzMGE2MjMxMzA3ZTc0OTU0MjRmOThjOWYxMjljYzRhMzI2YTNkZDhlNDc2ZTE4ZDY2NmY5NGZlCi01M2VkYzg3ZTQ3ZjZkODRhYmI2NDNmZjNiNDA4NDQzN2RhMjZiNGEyOThmODE5ZjRiNjgyM2VkZGFjMTFiYzg1Ci1iOWY1YzVkMGFhMWU3YjBkZGNhODJjOGUwMTk0NGIzZWE0ODk3OGMxYjhmNGZmNDc3NzlhNTUyM2Y2MDBkMzNiCi04OTZiNjU5YzMxZjRmNmY3ZGVjYmFlMGZlMWY4M2RkZTE4Zjc3ZjUzZGIxNDBhMzZiMGY2ZjRiODgzZWJjYmIyCi1iNmQzNTNiZjJjYTYxMDIxNzNiNmRmYmEwZjQ1MmQwMTFmNmNmN2Q2NjFhNDcwYzNjNWRkMTg5YzFlODNmYzRiCi05MzcyZWQ2N2VmNGVkOWE1Yjk4Zjg1YzhkNzNkNDkwMTMzYjczNjJhYjk3NmEzODVjZWM3MDVhMmViODlkN2YzCi0yZmJkNjBjMDhiODZhMzAyMTlhYTI5ODhmNzllNjM4NjA2MmJlODM5YzFmOWQzMGFmZmRlODJjYWRlMzQ5NGVlCi0xMzA0MTc1NWU3NmNjMDdjY2IzYTRhNzAxNDYxMjkwYjViNzk3MjhlZGRmYzYzYjJlZDVjZDRiYmUwYzRjMzY1Ci03NTQ4OGQ1OTAyNThjZTIwODRmODk4ZDdjNThiM2Y2NWIwOWRlYTJmOGQ0ZjcxZTgwYjJhMmY4ZjMxZDVmY2VmCi03YTc3NDRiNjRkN2JhYTcwMWU0NzNiODVjNjU4MTRiMGE5M2UzZmZiZDdiMmFmODVlMDBmZmJmYWI5YmI3NzY2Ci1mNDQ0NzA5YTQ3OTAyYzkxOWJkMmE0YmVjZGNlMDdiNjQwNTNhZWExMDU4ZTI2MDI0YjQ2MTUzZDZiYjkyYzBiCi01OTg2MWIyZGRhZjNkMzhkYmVhNWJmZWRjYzQ5OTM4ZWI5ODE4OGEzYzRkY2VlZmExZjMwODU1OWY3NzEyY2NmCi0yODgyMTljNmEzZDRlZWZiODFhMmM1ZjE1NDk5MGZkOGYwOTcxM2EwNTMxMDE3ZDc0YjQ3ZTFmOTdhYTZmMGYzCi05MmNlNWJiNzQ3NWM2NzYyNDdkNTdiYjE0ZmY2NzZmMTFhNGI1YjU2NGFjMjZiZmE5ZDg1YzljYjA0MTRmYWZiCi1jMzViNDZlYWNmNzRkZDk2NGZiZGRhYjI4ZmQ3YmIzMDRiOWJmNGUxMmNkMTViM2JiYjE2M2RkNjZlODlmMjRlCi02NDg1YzZlYTYzMzY1ZDI5OTA3ZjZiYTk2ZDMxM2Y5YjJhYjdkMTc1ZDU0OWY0MjM1NjUzZWY5NzlhNWM2M2NiCi02ZWU1MGNjMzMzMzg3YTBlZDg4ZDMwZDlmZDIxOTdkMzFhMDg5NGVkMGE0N2IxNWQ5MmRjYTQ2M2E4Yzg0YjNhCi05ODZkMzk2ZTY1MzBiMmU5YmExMjdiYjU2NjJjYTk0OGE4ZjBjNTYzYjljODY4NjQ0YjhkMDEwNjRkYjZhYTcyCi0wOTBkZGEwNTIxZTZkNzc4MTkyYThjNmQ0ZDQ2MzllODBlMzA5MTk0Y2I3NmZjNWQ0NjE1ZjM5NmRkODViMDZmCi03MWRmYzdmMzlhMjU5ZTMyMmM1ZTdkMjg2NDYzMTBlYWM5MmU1ZjZhZmRkNjA3MWIyMWU2NjY0ZTFjZGQzODQ4Ci1jODY0Y2UwZTM4MGZkYzQ4YjI1MWQ1MmI1MDk0ZWFkNjRkMzgwYjY4MThlMmM4YjFhNGViOGY5YzE4YWRkZTZkCi02ZTRjZTFkZWYyYWU4ZjI2NDlmMWU1YWFhMDU3MjBhMzU4YTc0ZTE4MTU2OGExMGI1MzZmNjhiN2EwMjkyNzg3Ci0xMmMzNGFjZmE1YmJhZmM0YWEzZWFhNGQ4ZWJiMjZlMjBiYjAwZDIyOGI0ZWFjNGExNjNlMGI3Mjg5OTg3NGEzCi1mODVlODJjMzk2ZDllMjg5MWQ4ZTBkNmU1NTcxZDRlZjExNjg3OWNkMmY1NDg1ZGRlNGI5ZDQwZjYzOGEzYTk1Ci1kZTVkZGQxNGFkYmU3MmY1YmJhZGYwZDk5NTBhMTk1ZjY0ZmQzMjA5YzZkNDdiNDZiNzcwOGY4NTVkYTk2Y2I1Ci1lOWUxMjYwZjY2OTlkOTQ1YTYxMWE3ZWEzNDhkYjNjODZiZTRiMzJmYzI2ODdmMTVjNGM4Njk1NzAxOGQ0MjhkCi1mNjI0NGExZmI2YTk5MTIyYmY4OWQ3YWRkMDFjODBmMmIyYmIyYzcxNjhiMDJjNDAwYmZjOThkNjUzOTQ5NDhkCi1jNzM2NzQxZjllMDI0NGZlMDk2NTcxZjA4N2M1ZDZkN2QwMjJjNzI2YTRjZWNmMzdjZjJkZGViMWU5ZDc3MDk4Ci02MGM1ZDQzMTIxYmMyZTRiNzJhMmQ4OTVhNWFkMmY0NDkxOTZhZWZlOGMwMTc4NDMyM2RlMzgwNDM2M2I4OGM5Ci0xYzg2MTI0ZjQzMWU2ZGQwNzQ0YzNkMDczZmZmNGJiYzJiOThiZGVmNzEzYmRlZmMyZGE0ZTBlMjJlZGE3NmQwCi0zNDQyNGNlMTM1MjliYzA0YzA3OGRmYmY4YjNlZmQ5NmNmNjYyYzRlMTUxZjE1ZDRmOGVhNTI2NDE2ODlkNGEwCi01ZjdjOWVjNGVmYTUxMTlkYjllM2E2MWU0YTY2OWMyOTM0OGExZTcxMzgyYzA5MzQ5OWNkMzVkN2QxMjI3YTVmCi01YmMzZGI5NjgyM2MxNjcxMDAwNzRjNzAwNDBhNTUxNDIxNDgxOTY1NjdjMjBjN2VlY2JiMjVlZDZlMzFmNTYzCi05YWRkMjRkNTJhY2VlYTRiODgxMTRlYjZkYmE5NDYxYzJlNTI2MmZiOTUyOWU5ZjZmMGJkZTIwZDNlMjA5YThmCi0wYzlmZDgxYjk5YjAwZDI2OGY3NjQ1OTNiYWE4OTRmN2FlNTA2MzQ3NjZjOTIyZjc1MWVkMTgzYWFjYWVjMDNkCi1iN2Q5NmQwMTJjZDBkMTExOTA0MjQ1YmU5NTM3ZWRiMGY4NzY5YWQxYThhYmJkOGQxY2JiZTVlNzljNTNjMDBkCi05ODNjNjlkODg2NWU5M2I2NDk1YTJmMTVhZDlhYjFkYTc1MDNiZDViODVlYmUyN2FiYTAxZjcxZTU2NDgyYmU5Ci1kNDM0MmFjMjU2MmQ4ZTZkMWU0MTQ2NDQ3NTYxZWY1MDY4ZDE3MzA2ZDY2YTUyZmE0MTY0NDg5N2E5YjE2MWM4Ci01ZGQ0MTYxYWEzZDk1NmU3OTYxYWE4MDIwNDY3ZTc2YTgzM2UwMWM5NzRlMzJhYTJiOGNmMjdkNjJmYzgxZWU0Ci1kNzQ2NDliZjk1MzAzMDY0ODFmNDMwYTUzOWE5NWRjYzI1MDJmNzEyOTQ3ZjZhNjhkZGEwMDU4OWVmNDA0MTMyCi0xZGJjOGI5NGFmZDgyN2JiZDVmNzc4MjAzNTNmZGRlYzVkOThmZGQyNTZlODU4NTgxMDU0Nzg5NzgxYWIwOTBhCi04MTZlNjVhZDNkYzRhNjhiNGVmMjM1NmU3Y2QyZjkwNmE4NTlkYWQ2ODBkNjQ5NDU3YmFlMTU5ZjkxODA1ZDUyCi1mYjZkY2ZhNWQwYWM2MzczZmE4MzI1YTgxNzU2M2JjOWVkODlhMTdkOGNkZWU5Yjc1MTZmMzg5MDhlNDI2ZjA1Ci0xNTE3ZWVjNzk0MWNiYWRiMjIzOTBlM2UyZTE3ZDYyY2E2N2YzN2QwMTM3N2M1YTFlMDliZWY1Yjc5NWI0NDQ2Ci01NGIzODMxOTMzNTFlMDVlZDhiYmQ4YjBiMTM4Y2Y2MmE0MjhjNzg3NDQ1ODJlZWM5MGE0MWMzYmQ0NGE0ZTczCi1jOWIzMmVhNDkzNmMyMTEyNjliYTVmODgzZDQ1YjE2NjgxZjhhZmEwNjQ2YTQwMzFlZjY5Y2Y0OTM2MzA1MzM2Ci01NzU4ZjUwNTM0ZTY5NzQzNDJmNGQyMzJiNTAyNGRiYTBlYjI5N2UzYWEzZTllZjA5MzViZDQ3OTk4MzcwNDIwCi1lYWQ4NDRjN2UzMzYyODgzNTY3MTVjZWI4Y2I4NDkyZWNkYzhmZDhmMTE4MzM2MGZhMzI4NTAwNTE0NDJmNGQ3Ci1jMDI1MGQ2NThjNjMzZGUyMTA0OGY0Njc2YTE4NzVkZjZhOGE2MWYwZmM3YzI1ZGQ1YWNkMDIyMDc5OGNhNzBlCi1mMDlhNzJiMTk1OTUxNzJhZmI5MDg1YjlhNTk3MWFkMWI5YTNhMjUwODg4NGEzYmNlODhjOTg0ZjU4Mzg5NjIwCi05NTU4NDg2NmM1OWY4OTEyMGM3ZjQ5MWNkZTM1YjlkMTc5ZjExZGIwZDNjMzAzNzAxMzg4NTIwNTBjZjE0YjE4Ci1jMDZkYWRjMjE4MzM1YmI0NjVkZDg4MzA0ZjFjMWNkMTEwNjJjYTcyNjQ5NDkxZmRjNjJkNTcxYzA4MmNjODE2Ci0yNjE0NDQ5MDZkMzk5NzYwMTU5ZjZiMWU2ZGY0YjQyYTdhODQ3NTBhYTYxYzAzNGIxMWE2ZTdlZGRjZGViNTRkCi1lMWY1MTUxMDQyYThlOWY2YTIzYTgxYTIzNWZiYzM5MDhhODVhNmIwNWQ4MTYyYmJkZjNhNjcyNzE1YjZmY2NlCi01NTRlOThkZjFmNDU4M2UwM2U0NTY0Njk4OTBmMDdmODNiYzBhODk1NGZjNWVkYzc4OThmMjFmNjkxN2QzMGZhCi0zNmZhZWU5OGY2MjJlZjMxM2NjODQzMTkzMWQ4M2QyNzFjZWY4ODBkYmEwN2I4MzJhMDEzODQ5OTRlOTY0MjMzCi1mMmUyOWRlMzA1YzM4NjMxOTFmODc3ZGZiYTQ0MjE0ZGE2OGJkYmZiZGUxZTNiOGI5NjU5ZDc4MDBkZjViZDE5Ci0yOGJiMTQyNWE1MWFiYzMxN2VmZGRhMDlkMjllMDRlYzhiMTdiZDNiNzgwODU1OTUxMjBiNThmYjQyMTkxNmM2Ci1hZjRiOTI3NzZlZjhhODIxMWNjMzc2YTM3NTY2NDIyYmYyZTJhODQwYmU1N2EzNTdhYjliOWFkYWEyMDYwMGQ1Ci1jNDlmMjI4ZDJmN2JiNjA2ZmNmYTg2NzM0Mjg4NGZjZDQyNmE3MmNhNGM1ZDA5NjEyYmJlMjZhMmQ5ZDNjOGZlCi0xNWE1NWUwOTViNjcwNWYyYTJmMmEwMGM5ZjFjYmFlMTZiOTFlMTM3OThiOTZkNWFlNjZiNWE4ZDFjZDc1MWNjCi05NzQ3YmQ5NTFhNTVlYzNmY2MxMWY1OGY4YWZiNDA5MTMxNjZhYjYwYTAxYjY5NzUwN2ZlMDc1M2QwODVlNWE4Ci04MTUzY2ZjYmI3MGUyOWI3MDczYWIzM2Y3YmUyYjZiZDA3MGVkOTc0ZDBjZmU0ZDQxZjdmNTdmMDVjZWYzOGM0Ci0yNTFhYTgyNmU0YTFkMzc0NTkyMTJjMWI0MTFiNmI1MWZhYTU2NGRhMGZmNDhlZTY0MDJiM2M5ZmI3N2Q1MDJmCi02MWZlZWIzMjYwMmRhMmI1ZmE4ODBjNTM3ZjYwZTEzOTQ1NzEzOTJjM2ZiYTRkMTEwZmY0N2E0MmQ5MjNjMTUzCi1mN2E4M2JjMWZmZTY3Y2QxMWZmMWE3NjM5NTBmMmQ3YjZkOTU3NWY0NTU2MmMzYTlkZTZkNGViZjU5NDgyZDdhCi03MTZmMzllY2E5N2ZkNjhiZTcxYWE3Mzk4N2Q1NzBjZTJkZGY5NTNjNmVjOTdjYmI3NmIxNDdjZWI4OTczNTY0Ci03ZWUxNTk0MzRlM2FmNjU4OGY0N2ZmOTcyMmI3ZTkwZjRkOWZkMGM1YjllOWYzYTE0ZjliZmJhNjBjYTY1NTZiCi0wNDczZGMwNzNhOTYxNzMxZDMyMjE2MTUwMGUxNWFkYTM3M2Q1MDM1NTJjMGI3NmZjNjU3NjA4OGU2MzBjZjI5Ci1iOWIwYzgyY2IzNDgyNTllZGQ0ODI1MjBhODQ5NjVhNTNjZDY3MzEzOGFhNTdjMzJlNDFmY2Y1MGZlMjRhNDQ3Ci00ZWQyMzQwMWY0M2Y1MjA2ZGU3ZmIzYjZkMTc1MDIyMzExNTkxOWQ4NWI1NGVhZTgyOThhMTkyMTJlNWM2NmUwCi1jMDVjNmRkN2Q3ZjhkZDg3NzEyMzIwNWI3ZTM5MWExODllMTFmYzMwZmRjNjUzMmZjYTg3NzcwOTg1YjM1N2E0Ci1mYmY5YzVkMjYxYTRjOTk4ZTJmZThlYjk2ZTI3ZGFjOWRhZjFkM2YwZWM3NDIyYTg1ZDljN2IyNDE4NTcyMDljCi1mMzcyYzAzYzExMDBkOGViZjNjZTRhYjNjMGVmYzFmOTc5YzU5OTliYWM2ZDRhYmI2YWJhYjFkMDU5YzUzZjdlCi0zNGY5NzJmNTZkZjMyOWJkYjg0ODVlMzljYzk4Y2JmMjBjY2I3MGEyYTNjZmRhZDRkZWIzMjY3NTc4YjAyZjBiCi0wMzQwZjQyYmFjNzQ5NDY1OTUxMTk4ZDJlYTJiZjc5OTU4NTJhNTBiNTg3NjU5N2U1NWUxYTE5NzdiOWUyZjBiCi04YThmYjBmMDM4MzlkY2Y2YmQ1NTQyODI3MjA4ZDQ0M2VkNGI5YzAxNDVlNDUyMjI3NGEwMmU0NDIwZjczOGU3Ci05NjJjNmQ5ZmVlMTc1MjBlY2Y2ZDY3NzJlNWU3N2Q2ZWQzOTUzMDQ2OTlkZDY1ZDdhNjEwZDc5M2UzOGNlM2RjCi1lNDYxODQzZDVhZjFlMjdiZWQ1NjUyYmI4NGQ1ZTg1NjIyYjQ4YmVjNzJlMTYyMmFiMTE1MDZhZGU3MDJjYjJlCi04Y2EzZmZiOGFkZDVjMjQ3MDIwN2JlZDc0ZjJiMzRmYWY4Y2I2MWRkNWUwYmY1NGYyYjhlMWM3ZWExZmVlODFlCi0wZTBhMTY3NDc0NDM2MzBiMDQ5OTBlZTFiZTlkYjU3NjRhNTgwMjIyYjI3MzMyMDcyZTc0YTYwYWI3Yjc4OWRhCi1hZWU3NDFlYjUzOGUzYWM3ZTM4YjMzM2M3ZjZkYWRjYWQ1YjkzODNhYjQzMzM1OTg2MmRjYjMwYmE1M2E0MTNiCi01ZTk5NDdlYjYzN2U3OGVlZGM0YjhiMTdjZWM2YjgyZjRjYjhkMmQ3MWEzNzkyMWU2OWQ0Mjg3MjM4MjNlYzk1Ci0wZjY4M2E2YmZiNTVkMjJkZmIxNjFlMWQ2YjZkYjQ5ZGFjZWNlNmU0M2FkMmM1MWE3MGU2MzQyYTg1MTY5ZmRlCi1mODA2MGQ3ZGE3ZTIwYjRkYjE3NmJiODYyYzI5NzQ5MDc3ZDcxMDRiY2IzMTNlNWM4ODZhMDFjYjE2ZjExZjYyCi05ODRjNWY4NTM1MTZjMTQxOWRmOTI5ZDI5ZWFmNDQ5MGEzYWViZDI0MzU4ZWFjMDA2YTU5NGFmY2I4Mzk3NzhmCi1kMDkyNWUyZGFhYmU3NGM3ZGRjY2U5YTRmNDU0NjMzYjUyYjQ0NWZlYTk5MTA1ZmIwNjk5NDg1OTU2ZmM3MzdmCi0yNTYyNWQ1M2RjZjBiOWUyMzg2YmJmMDkwMGUwZTAxMWU4YWRmZTE2MmQ1ODc2YTg1MGE2NTA3NTEyNjkwZDJkCi1kMWYwMDk5MmY0ZGJiY2EyYzYzY2Q3MGIxNmRjZTE1ZDFjMTI4YjlkNjg4MWYzZjdmZmViNjhkNzE3NGFlNzY5Ci0zYjZmNWUwMjUyM2M3ZjA0NmRlMjk0ZTE4MjU1YjY4OWQyZWY1MjllNmRmZTQ4OTk1NmFmYzkwOTI4NGE0ZDQzCi1iMGNhMWQ5ZjhiOWJlNGU0ZGE1MzU1MjJjZDliNmU2NDg0MWM4MTEzOGVlMzU4ZWY2NzY4ZTdmNzhhZjgwMzNhCi02ODg1NDU3ZGE2YmE0MmNiNGJkZDRmMzUyMzNiOGU1YWMwMmI3ZDhmYmYyMDkyYmI4Y2U4OTBkZWNiNmU5OWNhCi0xNTJkMmFhNTZjNWFiNDE3OWJhNzkzNmM3NGRkNmMzNDJhMzkyMTMxZmI5NmMxNGMzYjI0ZDlmMGU0ZDhiMWNiCi04NjJlYTVlN2IxM2UyMDRjOTE0YmY5NWY1NWZmMzJlNDMwOGZlNWIyOTQ5ZmE0NTQ1NjBlOGRlYzQ3NGVmNTJiCi02NWJiYmVkMDE3ZDVlYWVkMGQ4OWEzYzg2ZmM2M2JmMDFkM2E2YTEwYTVmZTM4OWIxYWYwMTNlYmNiZmYyYTE3Ci03ZjZlODU0ZGZlYzVkYmYxOWQ0ZTk3N2EwN2E0MjI4N2EyZGJkNDJhNzhlNTg5YTAwMmNjYTQ3ZWI4NjViZDVlCi02MDFhOThiYjNhODU3MmYyMGVmMWMwYTJiMzUwMGY2MTViMWI4ZjliMDQyMTVmOTFhY2VjNDU0MzEyZWMxZGNlCi0wOGY0MTNiOWUyZGRkZGNmZDJiZDg1MTI1ZGM1YTA0M2E0NWMwYjlkM2M4NmFjMzBiMjFmMzRjYWUyZDM0N2ExCi1lOTM1ODZlYjk1ZmRkM2QxZGI3MTU3YjIxYjdlZDE3MDJkMzE4NzZhMWNmY2U1OGQ2MTlhNjZkZjhjY2MzMTE2Ci0zMTk4NTRhNTc5NjVmZTIzZDJkMmQ3ZTAyZjRkOTVkODEwZThhMTNkMjk4NzIyNzRmYTZmNDhiNzMzM2I3NDNjCi03YWY0MThjMWZkYWY0NjdhY2Q1NDgzYTQ3YzVlOTlhN2JkODFlMThlZjk4NzYzZWNjMDg4MjAxNzZhMTA5MTQ1Ci1hZjE4Mzg3MGZhZjE3MWEzYzI0ZjYwMzY1NDg5NmUyZDFiMGFjNjIyNGNmYzc2NWJmNzQ3ZTE5NGNkMThjNzQwCi02YzYxZmQxMGI2YjdkY2U5YzBhNjU3N2E4N2FlODQwZTg4Zjk5Y2JmMWMxZDZjYzgzNjIzZDJmZTgwYmQ3MTBjCi1lYzc5MjU2Zjg5ZjI2YjQ1Zjc1MjgxZDNkZTk2MzZhMTM0ZjYzZTI0NGRmNGE2MjNjNjNhODk1ZmU2NmUxNDY0Ci0xOTU5NjU1ZjIzNWJkMDU2ZDY1ZTNhNTBmNTVhMDQxNDQ3NTk0NDIyZWVmZmFjY2U2YWY3Y2M5NzY4ZjcyMTU4Ci0xOGVkNDA4ZTQ3MzU4YWQ0NWZjZTIwZTQ4NDhjYzM4ZjcwOTQzNzU1ZTkyMzNhYzcxMWU2NjNmMmM3ZDc3YjQ2Ci1jODc4ZTcwNjY5YWQzMGVkMThiNmY4MzJlNGQ3ZjU0YTIzYzgzN2VkNDQwYWU5Nzg4MzM0OGEwYjVmZTk1MjMyCi03NzkxODdlNDI5YjZmODU1ZWQ3Y2ZmY2NjOGQ2Nzg0ZDhiY2Q5MjU0OGUzMjU3YWM4NzIzMWMzNmYxMTlkZGZiCi1mMjhhYjhkYzhiMjUzYTFmYTA5ZjAxNjg4N2ZjMjliNjY1OWI0MGJmM2RkOWRiNmVhZDhjOGMzZTUwNGIxMGY4Ci0zN2RhYzgyYTgxNmUwNjcyMjM5Nzg2N2RmMzJmYTI1ZGEwNzEzZTkyZWRlOWU0ZDQxNTc3ZWY1OGFjNzBiNDAyCi1hNDQyN2E3Yzg2ZjdjMWQ3ZjM3OGI2MmRiNDNjYTRiYzNhODY2OWY2ZTkyNGQ3MTlmMTg3OTlkMWE5ZTU5NjlkCi03NmJkZTRmYzk3NjA3NGYyZDYyMzcyMWQzOGUzZjVjNzM0MjhkNjgyNDA0OWRlYTk0MTZhNDUwYmUwMmRjYjU1Ci05MDhlMzdmYWY0YTU2YTM2NTE5MzExZGRiM2QxY2I2NjgzN2MyOTY0YTJkZDBkMzRhMjNkZGU0M2ViMzBjODhkCi1iNmVhNTQxOTU2YjkwNGRiOTExZDAwOWYwYjIwOWJmZGMxMzlmNDg4NzhjODExZWMzOGEyMTY5MmY5Yjg2NmMwCi1hNTlkOWQ3MzZkNDI5ZGUwZGI0YjA1MjY0NjNkMDM0ODE1NzAxOWEyNjJiMmMzZTBiZjU0MDk1ZDA2MTEwNTkzCi0zNjQ2ZmNkMjQxMzRkNmIzYTJhOTA2YTg5MTE4NzY5Mjk2N2U5M2Y2OWE1NGZmM2FiODA1MDQxODU4NWVkMWY1Ci05ODIyYjEzNGY4ODQxNTg5ZmUxNDZkMDVhYjAwYzhlMjI2NTFjNDM3MjMyMTZjMDUzODUxYTVkMWY5YmRmYWY4Ci01OWM1NTUyM2FjZjFlMzk0ZDI3NTAwYTFjZGQ1NTFjNzczYzlhNmQ3YjM4ODJmMzFmMjljMjgxZmI2YzYyNTBkCi04YTFjM2M4ZGQxMTBjMTkxMDAxNGRhNmZkMWQ1N2I4YWUxMDJiMjYxZmI2NWEzMDE5YmQ3NWU4MWNjZWJkZTNmCi0zZTIzNzY0ZTlhNWRiZTY0MGNhOTg1ODVkYTJhNGFmOWRlNWE1MDQ1NTk4YTkwNWVlN2I4MmJiYWFiZGQwZDkyCi1iYjUzNTFkM2EwYjMwNzFlODY2NmZjZTQ1MjAyYWY2MDAwNzkwYzFjMWQwYTViZjBjNDYyM2I5ODE1YjhkM2I3Ci03YzM5OTcwYTUwOWRiNmE0YTBmZmFjZTM4YTYwZTJkY2NhYjdmNWI3YWQxYzBmNDJhNzRkYTE2MTQ3NTg5YTJkCi0zZGFkZGU5YmIxYTYzYTQwNDdlYTIwZGRlMTEwOWY4ODU2YmI4MTE4NGY0MjU2OTk0YjUwMDVkNjU0ZTQ5MDg2Ci03YmI4Mzk2ZmM4ZDgwN2ViZGVmYmI3NGU5ODk0YmYwZWM3OTM2OTlmMGU2ODI2Mzg4NTU4MWExN2M4N2Q3MDgyCi0zNzFkM2Q0ODg0YjUwZTEyOTVjNTE3ZmM1NmI5MWViYjZiNGMyM2IxNTBkNTQyY2QwNzY4OTI0MjMyYTVhYzAwCi04YTk4ZjVjZTlhZGM4ZGQzZTY1ZjA4NWIzNTY0MDkxOTc2NzIzN2QwZjk3MDNjYmQ2OTFhOTg3YTBhYTA0NDRhCi01ZWEwZDg4NzgzNzQ4MmE3MjQ4ODY1Y2Q3OGI2ZjY2NTMwMWNiNjdjY2ViMWY2ODkxOTg4MjEyMjdjMWFjZDgxCi0zZDBhNTA2NzQ4MzJiZDMzYjI2NzI3NTZkNTE4NmM4OTUyODE4MGUxOTBkMTUyNWMzZTgwNmNhZGRjMWU0MTU3Ci00NjA1NTkxMGNlZTRmNjBmNDBiMTA2NWY0MzViZThhMzllYjQ1NGQ4OGY1YmM0NWJhODE4ZTViMDA2ZTVhMzhkCi0yOTk3NGY2OGVlMTk2MjQ0OGY3YTlmZDgzYzdmMTA3Yzc3ODhlYjg5NzVkZWRlZTc1OWEyYmJjYTQwYzgxMWI5Ci1kODU3Y2Y4ZTUxMDM3NmQ0OGFiZDYwNTY3ZjMwN2Q2ZWM0NzFmOTliMDNjYzdiNWU4MTQwZGMwNDUwYWYzODMyCi0yNDJhMzUzNTE1YjViMzQ3Nzc0ZjMyYjhiNmMwMzNhZGM0M2IyYmY3MTg1NDgwZTQ3Yzg2ODMwOGYzOTA2YmVlCi1lNDQxMzFiMTFiMmIxNGU3N2YzMzY4NjMwNzg0MjMzN2NkMWY5Njk1NDkxYmJiZGYyNzFiNTM0NWM0NGQ2YTc1Ci01OGM1OWQ2ZDViZjhiMjRhZjM4MjQ4MzY4NjQ0ZTMzMWE4OGNmNzNkMGViYTlkZmE2ZjgwZjExYWYwMjkzYmI4Ci00MGQ5NzU1NTQwYWZkMThmYjAzZTBiMjZiNjQzMjI3NzQzNDE2NjEyM2Q4MDA0NDgwOGY2ZjExMTVjYTU1Yjg3Ci02MGY4MjUyMGViODExNjZmODM2M2IxNTBiYWM3ZjQ1OTgzZDFmNGVhMGI1MDNmYThkMDQxMjYxZTJmZDE0Y2FhCi1jN2RiOGU1YjFiZGIwNGE2NWNiYjY2MDUyNmQ4YjIxZWVmZjY4MTA1NDg2NDc0ODAzYWNjOTZlN2I4ODJiYzlmCi01YTFkNWYxZTMzM2IyYjJhYWNmNDI3MmEwNWE0MWFlYTA0YjJjMThhODJiMWM2NmE0MDc1M2EzNjkwYWVmMDg5Ci1iOWZlODNkZDBkODZmYjdiNzA0NWYwNDFiNjkwOTI4YjdiMmI2NzE2MmExZjU1NjQxMTc2NTJmYTc4OTlhNDQ0Ci1iY2NjMjMxMTg5YzYwY2ViNzJhYmI0MDM4ZDdkMGFiNWEwMjdiZWE3ZWU3NTU0MjQxNmIxMmExNmVlMDA5MDBjCi1kYjk0YjJjODliMjM0NWQyMDljZDY4MzA3ZTEwMWNkMDZkYmI3OWU3NmM3MjVkYzcxODBiZWNjYTBlYWI5ZjhjCi1hZTE3MTRjNTdiZWU3ZTdmNTRjODRlN2EyYWI5YTJiMWRkZDRkMTYwY2I0ODI1YjY5YzFiZjVlZTI2YjE4MzkxCi1hY2Q2ZmFiM2Y4OTBkOGNiZmY1YmEzNjY2YjhkNzg1MzY1MmRhMmJkNWRiNzlhZDhkZTM1OGU1NWE1ZTAyMjcwCi1lMWEyZDA5YWRmZWQ3NTA4OGE3MTU5M2ZmMGY1NGQ1YzUyNzUxOGNjNzY3NTg0ZTQzODBiOGZjZTU4YjA0Y2EyCi0wNWE2OWVlMjgwZGE2NTUxNjkwMjlhMTZhM2RmM2I4NmZjNGFiNjM1MzAwMzk3NzY3YzdkOWVjM2IzZmJkNjBhCi1iYmY1MWFkNGEzY2IzNDg1MzlmYjliN2ViMDcyZWNlOWFmYjJiM2MwMGUyYjkxYmI0MGE4MmQyZGRmYTU4ZTlkCi1mNDA2OTkwMzhjOWE3YmY5MzBhODM5OTZhZmU5NTgwYzUzMzg0MDUxMDhhYzA0ZmQ3MTNiYjIyY2EyMDI0NDc1Ci1mNTQwZmUxNDI5MGFiMTgxOGQ5YmIxOTQ4M2FiYTJmMzlhOTU4ZWE0MTdlYzczNzkyMjMzYWI1MzhjYjcwZTBhCi00NTVjNmI3ZTBiYzg2ZWFiMWRmNzNlZWMxZTE2YTZmOTVjZDIzYjhmNjk1ZmQyYjkxOWRkMjgyYmQxMTI5YmFhCi05M2ZiNjgwODBkOTBjMjk3NzZiZjI3ZmE0MmRjMDcyMWUzODBlY2Y4ODI4NjQ4NDQxNzY2NGU0MWM1YjI1N2NhCi1iZDQ4MzVjMWQ2NDMxODUwN2RlNWRjMmYxMDYwNjQ0YjJiMTI1ZjE3YWZmMWI5NWEzN2I5YjY2NzkwNmQ0OGMwCi05ZmE3ZDg3NWQ1OWNiNmY3ZmVmMmUzN2VjNDE4NTQwZjhmMTNjMmQ3MGNiZTk1NjYyOTlkZmI4MGMwNmRmOTllCi1iMDQ1ZGQzYmFlZmQ4N2IyNDMxNjcwMGZhMWM5ZjcyMTU3YjkyNzA1MmNkYTNmZDJiNDgwZGY3NTAyOThkNjQ1Ci03YzQxMmNhMzlmNjMyNWQ2NmM3N2JlMzhiZDhlNDkxZDhmNzEwYzVmOTFmNDMyZTEzZjg5MDU2OTQwMDI5NTMyCi1kYjA2NTMyOTc4MjU3OWI3OWQ5ZjZiYTYwNTUyZGJkNmEzMDJlNjI4Zjc1ZTBkMzU4MmQyNWViMDNlN2RlYjMzCi01NDc5MGIwMjUyMTU1M2ViMGMyODZjYjQxNWNkZTIyNWI1ZDY1Y2I3OWRiMDYwZDEzYWZlODYyZDU4ODViNTY3Ci0yNDMwNDgxNjIwNDc1ZjUwNTQ2YWM3ODIzNzBlM2VhMWM5NTYwMGE1MjRkMjg4YjVkNDAyOGJlN2NmYmVhODU1Ci01Mjg5NTNlNjA3NzIxYjc0ODhmN2Q3ZjlkZDVhZDE0MzMyYjMyYmJlZjcyMjQwMDM2YTNlMTY0NmZlNTQxOGE3Ci0xZmQyMDZhZDNmYzc1YjdkY2Q5ODEzY2FmNWQyOWRkYmIxMmQ3ZmY5NGUzN2JjY2Q3MmJhMTA4NmRjNDMxYjViCi03MTNlZDE0YWI3ZTlmMWJmZjdkZGRmYTliZjIyNjI0ZTRjYWYzY2MwZDQxOTRmMGI2YTM2YjFjNjdlNDNmMTE3Ci00YmIyMzA1NGVkMDEyMDlkMjhiYzU1MjI0MDI4NjQ4YTRhMzA3M2Q1NjgzNWFmYTllMDA0ZmI5OTkzNzJmMjlhCi1kNzZkYjY2M2MyYTI5YjU2Mzg1NjcwNTg5MDRhNDkzM2JlODhlNzVjYTFmMzY1NzM5YTY1YzI3YmRjMTk1ZTdlCi0wOWNmYjI0MjZmYTgyOWNhMzg1OTMwNmI1NTZkMWJmYWRiNWQ5NDkzYzY2ZTM0ZGQ3ZjYzNTgzZTQ1MzJhMDc1Ci01MzJjZWUyZDg5NzZmNzg1ZDc5MDkwOTM3ODdlOGFhNWZjNzkxMmNhOGZhODlkMzQ2NjM0ZWY3MWY5OGM5ZmEzCi1jZGZkOTMxY2NjNjk5Y2FhMzE0YzQwMmViY2Q2YmJjZmNkM2VmN2VkZTE5ZTZjOGI1ZWE5YmJlNzNhZTM1YjcyCi1lMjE0OTc0YjJiYmIyNmExMTU3NTAzMjdkMjA3MzJiNmY2Nzk1YzI1ZTRjMGIxYTYzYjUwNTQzODNkNDI4ZDJiCi04NWFjMWY3MTljZTM1YTE4ZGU2ZjQ3NTNjYjYxNWFlYzYyMTJhMjcyZDg5YjM3NTA4NjM1MzZmY2Y1Zjc5MWRiCi0zYjdiMzlhNjZlYmJlOWZiMTg3NmJiMDg5ZWMyY2JhMDkyZDI5MWFhYzg4ZjA5YzcyMGFhYzRkZDhmZGMyMmQ2Ci00MzY3YzRjNTMzMGQ0ZTBlZDdkNDU0NzI4YWYyYjQ4MDE2MThlZGFkYTRmYTNlNTM1N2ZiOTE0NThkYzEzMjg4Ci03NjUwNDAxYmJjYTE2ZDczYmVhOGNkNTEyNzc5N2Y5MmM4YjUzMTQ2NjNlMDJjZWZhYmQxZWRkODllNDQ4NmJhCi00ZDM3MTEzOGVhNmEwN2NlMzU4ZDMxYmM5ZWNhZTY0ZjQwOTU0NmU5MTAxZmZmN2VjNzEwYjQ1ZjkxMDUxMGFhCi1iNTFlYjIzNzQ5OTIwMDlhMjgyNjJhMzcwZDQyMTA5YTBhYTVlYmJjMTZkMmVjNWQ1OGUwYTVlN2U2ZjgwYTAyCi01Y2Y4YTU4MWYzYmJmOTg3NTJlZGY2NGZlYmE1ODVmYmViNTZiMjdhNzkzODRhMjJjODY4NjkzYzA1MDg0NDIzCi1mN2NkMzk2Y2I0OGU2OGY3NmJhYjY1MTJmNzZkYTI3NzJmM2QxMzc4ODFlYmFmMWQzY2E2ZTFjOThkNTQ3MzJhCi1mYzI0YmZlMjllZmNkNzAzYzQ4OWRkOGRjYzY5ZGE0Yjg2YjU2NTA3ODhiZmVhYjhiZjY2YzVjMWRmNzY5N2FmCi1hYjMzZDBjMTRjYWYxNmI5ODEwZWE3NGMzMmNjYjViYmFjMjYxM2M2YTNkOTQ2NDM2Y2NmOTM0YTIwYjgxY2ZlCi01ZTcxMjc2NWQxOTgzYmQ3N2NjNDU2MTJhMzFjODkzYTU1ODMyMzhjOTQ0ZjkxZjJkNmQxMDY5Mzg2NjIxMTA4Ci0xMDhiMGU2NWI0ZjZkNzZiZmQwZTExNTgwMDVlOGJhNTNhYjQ4ZTg2NWU5ZjZkMDc4MzVkNGU5ZTEyNGIwMWI2Ci00MWJhYWE2Y2ZmNDEzZTdlZjhlZWQ3M2YxY2NjYWVmNTVhODdkNzFhZmIzMDliYTE2MmQzZTE1ZGRhNmYwNGRhCi0yZGU4ZGI1ODNiZWFiYWMxZTU2ODBkZjQzYmMwNjMwOTVkZTA0M2IyYWQ0Yzg2MDBlZjYzYTgwOTBiNjQ3ODVlCi01Mjg4ODkyYjYzYTg3ZDhjODA1ZDEwMDBiNjUyNDEwOWE0MWUwNWU1MTdlMDdmMGE3NjQ2NjEyNTY1MGIzZDk3Ci0wMDgwNTdkZTNkMzM4MGIwYzM1MmU3MGFjMDRmY2MyMTEwOGU2MTlhNzA3ZmJmN2Y1OTg2OWNjOWEyZDU3MWM5Ci1mNzcxMTQyNTBjMWM0MWRjZDUyNzMyM2VkYjJmYjg4M2RhYmYzNzFkY2NmNDIzODlhMjYwZmJmNTM0NjRiZDI0Ci1kNWFlNWJlNDgxNjNmMTQyNzMzYjIwNWUxMTBkNzdkZTVjYzA3MTE3ZDdkNmQzNDdjYzhiMDM1ZmEzODdiMjQ5Ci1mZGUzYmVlZWFjODQzYzg5YmJiODcxMTE0ZjUzMTM0MzdhNzg0YzA1MWUwMjFkYTRmODBhZGIyZDVlMzkyZjBlCi00NjA2OGRmNjdmNDZhZmVjYTA1MjM3OGQ5NzU5N2YyMWMzOWRiNmEyY2E3YzEwYzU3NDIxNDk5ZGE4ZDViZGVjCi0xMjgxMDk0MzJmODZhMGNlNjNjYTJiZTdmZDY0ZTI5ZTgzOTJiZGQwMDEzZDQ5OTA4ODRmN2NmNDllN2I4OGFkCi04NDZhZjM5YTNhYTFlYzNjODVmMjFkYjA3OTUyZDFiNDVjZmMyMGQ2ODQ4NTM2YjYzZDI1NzJmNDRmZjcxOGFkCi1jMmNmYWNhZjM5NWNjNjRiMzQyOTBiZjE5YTE5ZDc1NmIzODE0MmM2YTc0NzFhYjQzNmM2YjgxYWJlZDg2ZmJmCi04NTUzZGQ4ZDVhMDUyZjRkNTNkNjEyNGVhNGRkZjIzNWY0YTc5MmY4YWE0ODVmYjA2OGQzOWM2ODJlZGEzN2MzCi0yZmNjNThkYTUxZjc0YzI0YmFjOGRiNWNmODI1NDA3Zjg4ZGFiYTc4ZjQxZDhiYTA3OGZjZWIwMjM2YzJkZWZmCi1lNjFjYzBhYmJkYmVjM2JmYTA5OWI0OWNkMTIxOGRiZmY4NWNjNzA1NzMwZWE1NDVjZGZmNDQyMWVlNWE1MzU1Ci05Y2NlYTJjZjYyNTdiNzU3ZTRjNmI4NTNhNDc2ZjBjOTdlY2U4MGE0MWZlZTQ5OTRiMDVlZWM1NzVmODdiYmE2Ci05MDY2ZWNlYjI4YWM5MmUxZjQ0ODNmODc0NGVkZTA2YTA1ZWEwMzg1NjUwOTY0NTg3ODU0NTNiMjQ2MmQxMDNmCi0zMDBhZmYzNzgzZjdhMmVlMWEyN2NiMjIzZTcxNDViNmI3NGZiNWE5NWE1NDQ1YjU4MDBkMGI3ZTQ0NTFiZTgzCi04YTc2NzllM2EyOWM5YmQ3OWJlMGNlOTAwZjhjZWRlNGY1ZmJmY2Y0NmI2MzU0MjY4MDg3YmIwMjA5MTRmMjQ2Ci1mZTA2ZDE4Y2M3ZTljYjEwMDNiYzk2ZmI1OTYxMDQzZDkxOWM5Mjk4ZTYxZGM1YzdjYjM5ODg2ZTY1OTM5ZmM5Ci0wMzdlMDQ4NGI2MmQxZWUzNTg0MmIzZGRiODc5YTdmZTE3NWYwNzQ1MWM0NDU2MzYxYmI2NDZlNWRkODdhZDZkCi1kZWQ4Mzg4ZmE3ODgwNmY4Yzk5M2JmMTZmNTM5YTQ1MjY1MDNkOGJhZjgzZDFmMGE1OTRkYjdmYjFhMTFlN2RhCi1kMmY5ZGI5OGM1ZDgyMDZlYTRhNDRlZDEzNGQ3ODRiMDVhYzBjYTI0NWIyYTVhZGJkOTNlZmE0YTU2NmU5M2M0Ci04NGZhYzdlZjBhZDQ2MjU0MTAxYjMwOGRjNGUzOWM1NDk5NDJhZjg1Yzk2YTVkZDMxZTVkOWE5OTE0OWY0OWZmCi05OWNmYzU3ODNkMmNmOWMzMjA2NDBhNTAyOWJiZDYxYzg2ZDRhNmFlOWZlZTY5MGM1YWM1ZTkyZDZiMDdhZWEwCi0zMWM2MTEwZGY0MWU2M2JkNzAzOWQ2YmE4ZWE5ZWYzM2JlYjNjZGI0MTVmNDQ5NzI0NTYwNjk2M2RhNjAxOTRhCi04MzgzNjYzYmEzZjNiZTJkNmUwYjQ4NjVkZGRkYjQ4NGY2MjViZWI1N2VhZGZjNjk0MTI1ZWUzNTQ4MGVmYWRkCi03MDI0ODAzN2JmNDAxODdmNTRjYjUzYTUxZmQwYTkxNmQwYjFhNTQzMTFmNDNjYjM5ODU2YjVlNGUxN2RkZjBlCi01NDQ2NmFkMzRjZGJlZDhmZWUxN2M4N2YwMGJmZTQ4MzJlZWEyYWNhZjllOTNhYTUwOTFiNjJmZWJmYmE5YjAxCi01OTYwNjE4ZDcxMzVhZDU0NmNmNGQwMGM4YzcyNWM2ZGE2OTc0MDY4OTFiNzUzNjFjODFjZmMyZDEzYTAzODM2Ci04ZjJiYzA0NTQ5NWExZDI0NjI4NjA2OTkwZjM1MWI2ZjZmMTk3ZWM3YjUyMTY5NDk1YmMwMDQ3MzM1YzRhM2Q2Ci0xYTdhYWE2M2ZiYTFhY2E3MzBiYTFmYTkwY2EwNGEwZmFiMjdiMTQ1YjJkZDBiNGMwM2YwMWM3OWJiNzc3NThiCi1mYTYzMGQwMmE1MjAwYzQ4NDk5OTY0ZmRhYzcwNWQxZjZiMGFhZGRjNThiNDdhMzUwNzdmNWVlMmZiY2FiOTU3Ci05MTllNWJmNjE0YTE0NjgyMDc1OTJiZmMzNmJkZDYyZWE5Mzg5MTQyMzUwZDA4MzUyNDNmNDg1Yzk5YTQ5ZWUwCi1iNmZjZTMzZTlmMWNhNTg2ZjcwNGQyN2M1OTYyMTIwNmFiZTcwYWMzMTYwOGNhNjdhNTEyZGQ2MGYwNzUxMGNjCi1lMGFiNzcxNWYzYTY2MmY4MjRhMDExZWM0N2U2MGY4NDY2NGU0NzRhMjU1NzEyYWFkMGJiYjFjN2MxNDg4YTQ5Ci0wYTc1NDQ3ZTlmZWFiYTQ1MWZjZDExMDZkN2RhNTM1YWQ4Mjc1NzQ5NDYyMGExOTViMmYwYjE2MjJjNjIzNTFkCi04OWI2MmY0ZjliYjgxMmZlZDI1Njk1MjkyOGQ4NjQxNDcxNzZmZjBlMDNiZGQyYmE3NTk3N2NiZDBiNWVjMzcxCi00NDc4YzQ3ZDk3NjAxMjgwNTY2ZDkzNzI0M2EwYzhiMGIzMzQ1MDc3Mzg5N2VkNTUzNWJlYTZkN2VhZmQ1NDEzCi01YzRhNDk3NmVlMDE1M2Y0ZWI5MTNhZWQ4YTE0OTdiNzQzZTVlMWFjZTYyNTkzNmIzZGE3NDExOWI0OWJiNTM2Ci0xYTZmZWZjMGViOTU5Mzk0YmQ3NDVjZWE5MTliMWU2MmM4Y2FjNzc3NTRjNTliNzI1YTI2YzYwNmE3YzViM2MxCi00NWZhM2UyNGU1ZmQ5NmUyMzA0OTdhMDE3OGYyMWNkZDUzYzczM2E2YmYyOTYwNTg3OWY2MWNkNGI3YWQxMTE3Ci0xNDEyYjAzZWY0MmU0ZjgyNjFkZjE1NDQxMzg5NThiM2U5NmFjNDVlM2E0NWMxYmJkMGE2ZDNmMWZjNGRmMDU3Ci1kMDAxM2JkM2RlYTg2MTQ1M2U1NGViNDcyMTEyNGVlMjc3ZmEwZWVkMWJkYjZjYTM3ZTMwZGZmMDRlOTFiODhmCi0zMDhlZGQ0M2NiN2RkN2U5NzIyZTU3ZGNjN2YzNjMzMjA5NTA1NDA5YTFmOThhMTMzODc0ODk1ZTAwYjMyYzAxCi04NWJhZWZkYjBiNGU5N2Y3NTQ4OGVhMGY3NjQyNGQ5MTk2YTI0MzdmYzlmNjdmZTI5MzNmZjM0MjMyNzY4ZWFjCi03MjJhODRhN2ZjNTJmZGYzYWQyNDhjNjlmZDdkNGM0NWZjMzNmZmM2YTA0YjU2MmNlMzY3ZDk2YjAzYzBmZjhkCi03NTE3NGRiZGMwOWJkYjM1YTlmNDg0MGE2YWRjNTU1ZjQyZDIwYmY1ZTJkM2RhMzRhOTkxZjYzNjQ4ZWJlODZmCi0zZTE1NTUxNGFmYjgyYzFiM2UzN2ZjZGNmOGM1OTRhY2Y2NWZkZmNmNTk2NWY0MmNiMzU1NDNmZmIxYTFlNDBmCi02MjJlNmVkMjBiNDk3OWEzNzgzNWNmMDhlNDBiOGJjYjAxNWRiOGViMWEwNDRkY2VkOGY2YmY2MzYwZDBmYTIwCi1lNjU2ZDkwZWZiZjQ2MWRhNDUxODUyZjU4NDM5ZGI5MjgxZjYwZWRmNWRlNGFmMDE2Zjg3MTVlZWU4M2ViNjY2Ci1kNDg3ODRkMzk3NjRlMzMwMDhlNWQ5MTk1ZWY2MjQzOWYzYWYxYjk4OWJkOTUyZmUwYTBkMzBhODU3MDhiYjFiCi1hMzUzZWZkNjU5NGEzY2EyMDExMTViMzY1OWRjMWE4MDYxOWYxNTVjNjY0OWY5NDRkZmEzZTU0Mzk3MWY4ZGQyCi1iMGEzMGFmZTc3NjU4YWI4MmU2MzBiY2Q0ZmNjMzNhZjg4MTBkYTEzNjA3MzAwNTUyNTVhYWNjNzdmYmUwOWRkCi05YjEzZDQ0YTQxZTBhMWQzNzg5ZDk0YmQ3ODQ5NGEzM2FlNjBiOWFkNzI5MGU0ZDFlZDY5MjQ4MjAxNDBlMmE4Ci1hZTUxMzdmZTdjMjU3MGFmMTI0MjYzYjk5ZDExZWNlNDVjZjgwYTZlMTFmNTZkYzZkNzdlNTBmYWI1MDYwOGZhCi0wOWViMTUyMGYyMmVjMTY1NzFlOTJhMTkzZjE2OTlmODFlMzUyYmNkOWUwYzgzOGE4YzFkNWJmZTgwZDc2OTU3Ci03MTI5YzljNDZmZGE3MjM1ZGNjMzRmNjA0MTcxYTc1ZjA2OWY5ZTAwYWRmNTZlODRhYjFmNzRmMDkzYmI2OTk1Ci03NDNmOWUwMjdmYzRkOWU2YmNkNjQ3YjJlYzdmMGQ3YWYyZTJlZmQyZGJiYjY4YzgzY2ViMWM3NjBmYTcxZWQ1Ci0wMzk0ZDM4OTYzZmRjYmYzODkxOTM0YTRjYmRhYjgwMTA3Nzc4YTYzZjExMDEwMTdiZWNkMjMzYmEwYzJlNjAyCi1lOTA3NWM1ZTUwOWYyYWNlN2I3ZDVjMzQ2ZGZiNThkMGJhM2UwMDVlMzhlYTc0MjhkZmQwMTAwYjdlMWZkZGIyCi03ZmU4Y2NhOTZiMDRmOWIzNDk2OTNhY2JhOTA0ZDQ0ZTE0M2UwM2U4MmQxNjE1OGJlYjM2ZGZhMjFmNTdhMDM5Ci1kNmJiOWJkZDFhNzg3ZmI5ZGY5NjgwMDQzODhmODY1NWU5ZDhiNmY0MzUxMTc4MzZiYzkxMDY5N2FhMTczN2QwCi01NWM3M2ZjZjIzZjhiNTZiNThiMDkxOTViN2NiZmY1NzRhMjQxOGIxYWI5Zjc0ZGM2MDcwNjZmY2I3OThiODgwCi01ZmIwZDc2MWNkNWNjYTUxZjlmZjBkMmU2N2NhYmRiMDI2ZjJhOWIyOTJmYTQ3MmI5N2FiODlhZjYwY2JhOTc0Ci03MWZkZWYxNDE3YjE0ZTZmZjU0NDA4NjdhY2VkMmZmOTgzN2MxY2QxZTFhZWEyM2JjM2NmMzQ0NGUzNWY3Y2I1Ci05N2MyZjhkNTU3NmZmZWFhODNlMDZhOWU2MzgzZTkyMjVmZmUwZGI0YjE1NzVlMWY4N2YyOGIzNzM3MTZiNjY4Ci00ZjNlOWU2OTRkNmQ1NjQ5NWQyMTY3M2QxNjVjZmFlNWM2Y2ExMTJkMTZhNDAyNDcyMTZkYTRkZWJhYmI3ZThkCi0zNGZjYjg1ODcwN2Q4MmNiODg2OGRjZDhlOTU2ZDFkZGY4YmJmNmNkNTdjMjkzZjhlMzQyN2YxNGM5OWU5MTBkCi1hN2JlZjI2YzA5ZTMxY2E2NjU1MDQ5NjU3NGMwYzhmNzBlN2VmYzlmNzRiYjQ1ZmIxZmYxM2IzMWQ4OTgyYjQ0Ci0wMzhjMTIxOGI4NzRhYzk1YWI5MDdkMDFiY2E3OGYwMGZkZWM1Mzc3MzA2NGJlNDUzYTgyZWZhM2NlMzM2YzQ2Ci02OTM0NWUxNzI3NjM0MTNmMDIxZDc1NTcwZGRiMGExNmM4MDZlNDQ0ZDhiOTg5NWFmOTk3ZWU3NDI1ZDJhZTI5Ci0xZDU3ZDlhYTkxYTVkOWU5OTJhNzI3NTM4MWFjMzMyYTIzOTY5MDBlNGQ4MjFmNjlhMzQ5ZDQ4YTUxOTdmOThmCi0zNTM0YWIyYTQ3OTI2ZWRhY2ZjNTI4MWMwOWVhOGRkZmY3Y2NiZGVjNWI5NTg1N2M5YjJkODI4MjkzNzZiZWM5Ci03OWE2ZWQ1M2M0MmY2YmUwYzgwYTlmZTZiOTBjMDY2MjRhMjlhZGMwZTI2ODI0MWUxNDViMThkZWE2MDljZjhlCi1lNzk3MjBkMDMxNjkxZjU5MTJjN2I0YzFmZDQzNThhNmVkMDdhYmUyMzk3M2Y1YjI5NmVhM2UzNmQ4MDgxZDY0Ci01MDgzNWU4NGZlOTVhNTY3NjQxMTc3ODViYWY4YjA4YWM0MGRjZjc0NTNmNGM2NzEwMDQ0NWVhNmE3N2FiNzU1Ci1lM2I0ODgyZGQwYTlkNzQzMzJmNzIzMjJkMzZhYjlkYmYyMTk5MDI4ZWI2YzZkMGY0M2U3OTA2NWUwZmE0N2E3Ci02OGJmZTg2MDlmZTZhZDgyZTdhMWZhZGJlODI3ZDg2YWI2ZjNkYjhkMDY1MGMzMWU4MGM3YjVhZTI0YzcwM2RhCi0xMDRlYmI0Y2JmMGQ2M2IwMjQ4YWMxYzQ3YThlZjE0YTA5NWQ5MDJiYjM5MGM0ODc2MGJhN2RhNmZlNTZmYjQ0Ci1kZjAyZWUxNjZiNTIyYTU1MGVmYWIyMDA2ZTgxNGY0MDUzZDBmMjFmM2VlNzkwY2E2ZDE3ZThlYTVhZTMxMDgzCi01ODg5YzJjYTZiM2ZjZDI2NzEzMWQzM2YzZjcxYmJhYTVkNDE0NDc5ZmQ2YzllODRhZTQ4MWRlZmE0ZWFjZjk5Ci05M2E2ZmU0ZmY1N2Y1ZTA5ZmI5OWI4ZmNlNzFiOTU4MDgwOTcxZTYxYmYwY2NiZGQyYTg2NDQ4NzgyYWE5ODcxCi0wY2I2ODYwMTM1NDhmYjNmNjkxNDM2NTAxNTQ1ZDJkZGI0NmEzNDI0YjY0MzU5MGRhOWIzMDY5ZDc2ZWVmZWRhCi05NDZiNmFlNGE1MzFmN2Q4YjNiZjk4YWIzNWQzN2NhNWIzNjcyOTU0OGMwNmQyMzBiNTk3YWIyY2ZkMTJkZDAxCi03ZmQyMzk4ODMwZGI0YjRmMmRkMjk4ZTk0NTY1OWE1NjQ0NzBiMjI2NTZlMjhhMmRlZmI2MzcxNGI1ZGNlYzFhCi01Y2NhNGY5ZjNhMDcwNzdjODdjMDZiY2MxNDVlZGVhODQyNGQ5ZjQ0ZWY4ZTczZmE5OGZkMjE2Y2YzZmQ4NDA4Ci01MmVjNTk4OGE3NzQ5ZjBkNjkyM2Y2YzBlZjUwZTliMmE3YTYxYzAwNjMxNmI0OWM1MWEwMTI3MDA0NTY2ZDgxCi0wNjZlN2YxZWQwMmY1ZjU3MGNlZjA3ZGYwNzBlZTk4ZDgzNmFkNjA0OGZhNzdjODg4OGRhZGVhNjRiNzJkNGVmCi0xNDA0NjM0YjU5Y2I1OTBlNTExM2QzODRlNDNkZGNlYTQ1OWRlYzYwYzNmMWNiZWMxMGUzMzEwMGJjN2ViOGJjCi03ZTMzOTE3NzEwNWFkNmE0NzhlZDllMDk2NDc3NjAxMzQ3ZTk3YzM5MTZhMzk4MTkyMGIxNmJmNGQ2NGQ4ZmI4Ci02OTQzNDFkYjQ5OWI5Y2EzY2YzNGUxNDBkN2RiNGQ2YzVjMjkxZjEwMGMyZDQxOTc1MmU4OWJhN2ZhYzNlOGY3Ci01YjRhNjM2MTYxOTdiY2FjYWUzZTAxNzBiNzQ2NzY3MGY2N2FjZDFhY2FiMmUwNTAyZjAyZjQxNmI4NTFhNWNmCi02ZjgzYzNjZDk5OTJkYzkyNWIzODhjZjc1YjQyM2VkZjFkNWQyMzRhMzQxYWRmMTJjZmY4OGJlYzFkYTk1YWQ1Ci1kY2ZmOTJiM2NjYTc0MThjYzg2YWIxZjE5NjllYTg1ODI0ZDI0M2JjNWNmNGZhZmQ4ZjQyNjU1NmRkOTAxN2VlCi0wMjQyMDQ2ZjkwOWFjYWVkM2ZmMmE5MTU2NDMwM2QxM2M4ZGYyMGZmNTJlMjVlNjBjYjcxNjg5MDJkYWFjNjc5Ci1iNzk0ZWY1OGUwZWM5YTViNWE5N2ExMTQzYjA5MTU3Yzk3Zjk5NDZkOTgwNzdkZTI4ZTg5MDhiODRmNzNhMDE4Ci1lMGMzYmM2ZjRhNmVlMDg4ZWRkZTZmMWUwZjU2ODc5OWQ4Njc2NWQ4NDM5NjUzODE0NjdhOTljOGI5MTYzMmU1Ci1lZWQ1M2ZkZWI4NjczYmQ2YzliMzc1Nzc3M2ZlYmJmODZlZTQyOGQ0YjM4Njk4NWU4MTBkYjgxMjRmNWJmOTc0Ci1kZjk5YWZhZDYzMmYwM2UzMzg2NDJjOTMxMjc4N2FjNDdhOWQyZjRhMTBmYzUzOTliNmFlOTAyOWEwMzM2ZDg5Ci0yYWFiYjA5MGU1ODFiNzQ5NDczZmYyMDgxNTI3Nzg4MWY5ODUxNDZhMDI4ZjZkZmIwYWNkMTk5NTRhMGJkYmI4Ci1iNGVkMWE2NWQzYjk4NjZkYWMyOWM2YWE4YWVkMzlkOTU2NDMzYmE2NDlmMjgzYWFlYTg0OGY2Y2Y4Zjk2MjY4Ci1jYzY2OTYxMzk4MWU0NzA1ZDkyMjA5NzA2MDhlNjcwMjhkZTc5ZDBiMzY2OGI0YTNkYjcwZjYxYzlmYzAxMDc4Ci0zN2VjNTFlYWI3MGQ5MmEwMTdkOTZjZDg4OTNlY2NiZTIzMDgxZGFmZWFmODFjYTJjOWQ0NWQzOGNmNTU0Yzg0Ci05OWE2YjQ3OWViZmJkOTZiZThmN2Y0NTk5YjEwZGQ0NWI0YWM4NjBlYTZhYTQxMGYxNjFkZjJiMzNjMDg1ODZkCi04NzIxOGE3OTA1MDk4MDAxNjRiNDFlM2NkMGE3ZDMwZDk1ODQ4MTNjNDJmZTM5MzVlZTU2YzZmMjJjZGU5ZmQ0Ci0wNTYxNWFiMmFiYWM5ZGZjYWM1NTAxNDBjNDU0MGQ2ZGZmOWVkNjdmNTMwNTcwNzQ0ZDBiZTNlNTYwNDFlMWQ4Ci1jZWI1YTY5MjViM2JjNTJjMjA2ZjZkZDg3ZjJjNGRlNzBlYzE5NDg3ZDJkZGFmMjBlZjZiMjZmY2Q2MDYzMWJhCi1iMTY3N2QwYWI2OTVkZDY4YjJhM2IyN2E3MGIwYjQ4ZmNjODcyOTkxYmQwYjk2ODhhOTY2ZTcyMjM5YjU4ZDNiCi0yZTU4ODYyZWI0ZGIzOTBlMTY5MTAwZTUzOWMyMzgyOTk0NDliZGEzNTZhMDk2OGM4NjZiYTBlMGJmM2I4OGY3Ci02Y2ZkMzlmZTEwYWUzMGViNmNhNzE0OWI0MWU0MTJjZjU1Njk2OWI0YzgxNmExOTQ1YzA4NzhlMmE3OWU3ZWNlCi03ZTUyNzU0YzhkZmE3NTVkNzlmYjE1ZTU1NzZhODg0NjMwNzUyNzQ2MGI2ZDkxODIxNTRlMjNiODRlYTlkNDQzCi03ZmNiYjQ3MGU5ODMzZDJmM2Y5MGFhODhkMGU0NGIxNzVhOTM1OGFkMGQ4NDZhZTY3NDRjNGI2OWE1ZTI0NjkyCi1lYjM3YjViOTY3ODcyOWJlODhjYjlmODRkMjc3M2JhOTliMjlhZDIwNTY0MjAzMjgxMTY4NDBjY2I0NzVhYjc2Ci0yN2JjN2VmZDJkYmU2ZGNkZjU5NmU5NGMwOWFhOTU5ZjJkNDNkNDhhODBjZTJmYWE3YzMwYmUzMjRkMThiOGY4Ci03MGY3N2JlNzIxOTllOTMxZDVkNWYzYWNmNDhmZjgwNjBlMTY4YjQ4ZDA2NmIyMzU0ZmVhNTg3MTNjMWE1MzY3Ci0zMzBjOTQ5MWZkYjZmZTk2NTRhOGZkNjY4MDNmZGIxOTkwYmNmNWJmMmQ4NjY1OTgwZDE2MmYxYmUxNzY2M2Y2Ci04NTc1NjMzNzFiMTA1NjE0NGNmNTRhZDMwZjFmYWU1NzA3ZjdiYmU4N2ZhZTQxZDJjNjgzZThhMDI5MzFkZTI0Ci0yOWU2NmYzNTE4OGZmMzU5NGYzN2Y3ZWM1MDIxZThjY2YwMDI0OGJlNDU5ZjgwZWY5YTQ2ZDAzNDRlMTUzNzg5Ci02OTcyOTE5NDczMWE0OTEzNWFlNzcxYWFjNjYzYzAwMzdkYjY3MjAwYzk2NzdiZjFmMzlhYmJiYzU0ODAyNzQxCi0yM2QzNmEzNWYxMjhjMWMzNWRmYWMxYTI5YTljMWE0ODhmNmQ3ZGYyMzkzMzQ4OGM4NTg2NjdiZmUyNDk0OGRiCi04NmJkMDA4N2Y5NGIwYzYzMjVhNDAzZGU0YTQzNGJmNzY3YzEzN2YyNDhjODUyNTdhNzJlMzliNTEzNTFkNDAxCi04YjUzMDkxM2VhOGJlOGJmYmViMDM5MjMzYmMzNDMyZGIwYjYxYWEyODFhMGNlMmYwMWIwMzk5YjA2NmZkZTdlCi1hYmNhZmRkNDZjNGQ2YmNmMjkyNGRlMmVkMzk3MmMwMWFlMDIxM2RjMTU1MzkyODg5NWMyYjU0MWIxYjI1NGU3Ci1hMWFlNDYwNjlhMTEwYzU1ZGUxMmY2NjM1ODgxNWNmYjA3Y2YwZGU1OTg2NWJlODVmMWE4ZjJiNjFkMGViYWUyCi03ZDM0MWJkYzM3ZWFiMzQyYWYxNDhhMDVkMGZhNDE1Yjg2Y2RhNzA2NzQ2Yzc1ZTBmYjcxYTYxMGU0NTVhNjRhCi1kODUxNTcwNWVjOGQyNjVmM2U0ZWQ5YzAyMDM3NDRjODZhMWZlNTVmZjUyYjZjOGY0YmE3MWUwYTI2NjUxY2Q1Ci1mYzM4ZDkzYjIzNzBiMWUzOGMyOTM0M2M5NmRkOWIzZDRhMzliNzhmN2JjN2YyZWVkNzM1ZjQ2YmI0NmY5NmIxCi1iZWNiY2FhN2NkOTllZjIzZDE2YmNiM2YzOGE2MDVkYmI5MDhiMjhiMTAzOWQyZWExZmM1ZDdhZmMxMWYxYWEzCi03OThiNDA3ZWMyMzY0MjFjY2NhMThmYzFmMjdhMTJkN2UwYjI1MzAzOTgyNzEwNDQ2MWM1MWNjYjIyODNjOWUyCi02ZmNiODE5YjY1NmExYWFmMWIyOTgyMWJjZWNjNTBiOTExZDFhMDUzMzBjNDNhMGM2MDI1ZWM5MGRjMTM0MDQyCi03N2FkOTQyNGMyZDJlNjQyYTEyMjNkYzc0ZmYxNmY3MGI1NGMwZmY1NzgxNTdmMGM3MDEyNzlmYWNhZWIyNTYzCi1jYjM4NTU4NzJkMzkzM2MwYTdiZTdiNjMzZTdlM2VmMDUzZTEyMTNlNGNkN2UxYzU3ODA0ZWNjZDgwMjZlNTgxCi1iZWI0YzJmYzU5Y2FjYjRjMWU3Njk2ZDE2NTMxNmQ3ZjMzOTFlZGU0NDM4NzNjN2FjNDgyNzdlNDdlZWJjNjRlCi0zMDIzZDA2ZmZjY2IwNWExYTcxYjY0YjdkYTRjZTFiNjI1NmM0OTcwYjE3OWM5MWUxYjVkNmFkZTgxYzE1MWQ0Ci1kYzNjY2NmZjFkNmViZDExODI4NWQ1NmZmNzYzMWYyYzdlMmI4OWNkNzBiMmVmN2EzODk0MzY2ZmQxNzdjMDZhCi0zOWUzOTcxNzQ3ZjY3MTg5OGEwMTA5MDA4ZTMxOTBiMGFlZjkwOTU5N2ZmZTkxZDdjN2MyMDY5YjU2ODAyOThlCi1lZWU3YzA0ZTU4Y2QzMjhjMWJhZmFjMmE4YmNiNjNmNmQ5YTZhNTZmMjlmMzU1MWNlMWQyNTEyYjU4ODVkMWI3Ci04Mzk3ZTQ2NGI1ZjgxZjQ4MDNlZWJmYzBjYzYzMmZiNjUzZjUyZmM3ZWJlMmY2NGFiNWNlMTZlODQwYmQwNTc3Ci1jZGZhMjRhOTI4ZTI4ODhlZjYxNzFlNDNhZWRhZjg4NjE2MzQ0Y2Q2NGIzYTJjMDg3M2RiYmY4ZWIxZmRjMDhjCi1jZDg2ZjMyNDc3NTY3MmJjNTUwMjQxZDEzOWJkZWNhOWU2ZWUzNmQ0OWZiYjExN2ViNWViNDU2ZDk5MjU4MDY3Ci05NGJhMjdjYzUwNTg1ZDI1NDRiMmYxZjE2YzE5YmE0MWIwY2IzMDhjNGY1MDAzOWE4NDNlNjZiMjBlMDRkYjFlCi1iMGU5OWZhYTM1NTZkOGU5NWY0NTI2ZjBhMTA1ZDRiNzYxZGY0MTUxNDgwNTFjNjA0MDc3Y2UyMDI1NzMyMTUyCi1lNmRiNzJkODEwYmI4ZDgxYzczM2JhNzhjMGRlYjg3OTlhYmFhMjBkM2Q3NzE1MmIyZGQxMDlkNzBlZmIyYmRkCi03ZjE3YzFiNzliY2VjZjZiMzBjZjBmODUyYWM2MTE5N2UwZjYwMWQyNjAyMjA1YmMzNzcwOGZiNDMwNmE3ODJiCi0xZjJhMzliYjAzNTU0YTFkMTAxMDAyMjFmOTljY2I0NWI1MzhiZjJhOTRkZGY4YzRlMGIxMGM2MmY0YWY3MTJjCi1hNDQzODdiMDAzOGJmMjQ3NGRiZDIyNDJjNzM1ZGIwZDc5MjQ2ZDczYTQzMTM3ZDUzNWVlZTUyNTUwMmVlNDQwCi05MDIxYWUyNDE0ZTlmNDQzNzQwY2RhY2RhYWJjZmFhMDA4NGE2MGFjMzQzMDNkZDU1OTI2OWViMDg4ZTI5MjVjCi02MzJiZGFhZTQ0ZGFlMGFlNTdmMzA4MGJlNDQ4YzU2YWE1NDliNjIwZDE3MjliNmNjMjk3NGU1NzFhNTY5N2IwCi00ZmYzZTZmNjU0MmM0ZmNiMmFiYzkyNjFkOTdkNmU2ZTYwNTM4ZDY5YjM2YzgxODk0OTFhOTc4YTdkMDBiOWI2Ci0zZTYyYTFmNTFkNjAwMmUxMmQwNjA0ZDUzYWYwMTg4ZTU2NWNlZWM4YmE1NzJiZmRlMTIyMjQ5ZGFjYzlkOWQ3Ci03NTA0N2M2OWVmMDQ4NWFkZjlmMGRjZWMwZjBjOTI2YWI5MWI1NTFlYmQ5YjhmNGFhMDM4MTdjMjVjYTkyMzk1Ci01MTgzMDRiZTk0YjVkNTZiYmRiODMzY2VlOTJjMzJiNzkyYzZhMzFmMzc0NDhiMzE5ODgwZTRjYWMzNWQyZWRmCi1kZmY1MzBkMGY3NzczZTUxNDhkNDFhZTU2ZTAyNjMzNzgxY2IyYWJiMTVlYzJkOTRhZTUyZDNjOGZjZmQzMDk3Ci00NWQ5NWY2N2I1NjAxNjVmNTczOTNhNDJmYzc0NzRiNTI4NGM3Y2MwYjg5M2Y4NGY4NzMzNzY4MjY0ZmZhOGRkCi0wYmVkODNkOTljMDM1YmQxYTgzNTk3ZjBkNjE0Nzk3YzU4M2VjOGM1Yjk2Yjk3MzlmMzA0ZWRmZTFlMDBhYjQyCi0zOGYzNTNhODJlN2M3MWQ3NDg3N2Q4NTE5YWRkOWI4Yzc4ZjYxMTE3NDU5OTUxMmYxMWMyMmMxMGNiMzYwMzA3Ci1iMjYyZjFmNzhjN2Y5YTg1ZjFmZDIxZTk0ZDcyYWJkNDEzNjUwZWE2YTY5YjA1N2UwMjFhZGE5Nzg3ZDA2MTg1Ci1jNTdjMDk0N2Y5YTJhODE4MjIwNTRlODU1ZjgwMjE2MDY0OWUyNWRkYzgyOTY5ZDk0YzA1MmMyODlmMzViYjU3Ci1jNzdkZTVkZmM2MzcxNmM1YjBhODdiYzdlZDg1OTY2M2M0NTdmMDgwMDg5ZTNkNzI5YjliYjEyOTkwNTA3ODhhCi03OWFkYTE5ZGIyMTAxMWIwMWE0N2IyNzg2MTViZTUzNTllNzFlY2VjN2MwNmE2N2M0OTQzZTYxMDZlMTUyODI0Ci1jY2IxZmQzOWM0ODVlOTBlZmViYjFiMjE5MmQ5M2M4YmM1MmUzNTZlNTFlNWZjODA1Y2Q3ZTQzNTQzZTljNTAwCi1kMGFjODViNzIzMDM1MGY5ZjQwMzM0MGExNmJiZGJiYzNiZGYwZjdhNTcxYWFlYzRkNmZkYmVjYjI4OGMyMTBmCi1iN2MyNDRmMTkwODMwNWEwYjE2MzJhODEyMzAwMTE3NWUzNjEyNGI1NDNmZjkyYzE2NTc2ZDM3M2I5YmRlY2U3Ci02Nzg4OTEyOGZmYTM0OTdmZjg0NmY4YmVmYWY1ZGUzYjdjMzM5ZjA0OWFkYzkxMTZjOWE3YmI4YmFlNDM1Nzk4Ci0wOGRjYTJkOWMxNTFkOTMyOWMzNDU5MTk5MzBlODQzNzA1NDUwMWJiYTM4YzJiZDUxMDJhMjBlNDI5MTIwM2Y2Ci1lZWNlMmY3MGJmZjNkZjA4YWViOGRkZjE4MDZlOTY1N2VlNGE1ZTNmZDVhOGZkOTc5ZDkwZDQ1NzM0ZjE0ZjcxCi01ZDMzOWFjOTFiN2ZhMThhMTdiZTgxNTgzYzA4NTQ0YThhMzI3MjljMTc5NzUwMTRkNjI5YjEzOWMwYjNjMjM2Ci1iYzlhOTkyMzFmZmIzMzliNzc2MWEyNTg2ZWFjNTY0YmU3MzRlZjM3OTkyY2VjNmMwNmMyYzkzZGUyYjM0MGZiCi0zYTI3YTUyZGFiZTY5ZDkxNzhkOWE1NDQ0MzBjZmYyMjkzMzVlZGQ2ZjgxN2JjNTJjNjkwOTE3ZmJmMzIyODUyCi1kNGE3YTcwOWE1OTM3MDQ1NjhjZjE0MmI0NWVmZjE2NGQ4MTc4ODBjYzkzNzgyYzIyMzI0N2M2NWZhOTlhY2EzCi01YzY2YTI2MDkzZjlmZmJjMjVjYTliM2NmNmI4YmE0Nzg2OTVjNjgyMTJlODBlMzg2OGEwZGIxYTFjODRiY2RjCi1kZjA1ZmUwNTQ3MzNhMWI3OTRlZDFjYzQ4M2E1N2I5N2NhMmU5N2ZjYjFjZWI5Y2MyYWU3ZDVlMGUwNjRjYzhlCi0wMWNjNjI4MTgwMzU5NzQ5NjIyYWMxY2ZiYjU3ZDUxYjI1OTc0ZWNiMTVkYzgzZjk5ZGJmYmEyZDc3OWFkYWY5Ci02YTkzMDdiZjNmYWVmNWQyYmE1MTM1YTE1ZDEzYzQyMTU1NzBlNzcyMzc2YTRhNGEzYTVlYzQwMjhlZjExMDA0Ci1iOTNhY2FmMzgxMjhkZTk0NTMxYzIzZjExNGZlYzQxY2IyZTIwMjdlOGVlMTM4YWVmNmFkMDE3ZjVkOTdhNjAwCi0xMDYzYmU3MDZiNjVkYTBlZGEyMjM0ZTdlOWE5YzI3YzA4NGM0NTY0YjM2MmZmYTkzZWM5MTI3Y2JjOTM2NmNlCi03Yjc0ODA1OTQzYzk5NjFiZTVhNWI1ZWM4NzY3NWIwMmY3NTZhZjFiNzAwNzRkMDMzNzRhZTkzMWNmZjMxNzU3Ci00MTQ1YWY0MTZhOTA5OGJiYTg0ZWQyZDNlZDQ0MDE5MjU3YzBmMzRlN2Y5NGRiZDEwZmQwNGZkMTVmZmQxYjY0Ci1mNjViMmMwMmU1ODExNzU0MzYxNTBhMDc0ZGU0M2Y4ZTExZmJjNTZlODA2NDg2NjY1Y2VkYmNmMzg3NTA0ZDZmCi0wNjg3YTEzZDY2OGM2OWRkZGJjMzdhZGY5MWFkMDA5MWE3NzBlZTIzODUwYWUyZmNiZDZiOWRlOWQ4YThjOGI4Ci1lY2NkZTY2YjcxMjJjN2I5NjAyZGJkMGY2YjdmN2U0ODkwOTMzNDUxYzdhMzkwNDM4MmQ3ODAxYmNkOTkyZjc2Ci00Y2Q0MWQ3NGJjODcyM2ViYTI2NDdkYjdmODEzYjQ2NWQxMTA1MmUwZjRlZjU5MzA0OTk0MjkxNWM2MTRlZGUzCi00ZjhmMmI3N2JlZGVjNjM1ZWIzNDYxZDY2Y2JmZDRiZTE2ODlhODM5YjFmZWFhNDFjMGYwZmEyMzY2OTgwNmJiCi01MmZlYTFmYTVhYjUyNGE0NDdlZjNjZmVhNDU4M2E3NzkwYmFhNDE4ZmY4OTE3Mzg4ZGFhZGM1YTNkMWE5ZmNjCi03ZjRhODI2YzkxMmViYTVkNGI4MmQ0YzI5YjYzOWQ1NjUzMmIzN2VlOWFlZDZiZjA2MTM3YTNhZjg5OWM3MGExCi1jZTRjOTk0MGU2ZWE4N2I2ZTI3NDY5NmM0YTE1ZDZhYTNjMTdmOTMzNGFhODRmY2YxZWRiNDhlMzA2NjQwZTU3Ci04OTJiMjVlNjdjNmY4N2U0ZTRjZGYxYTljZjEyZjY5YzAwMjhiNWZiNzY4ZTgzOWUxYjhmNzVmM2FiMmQ5NzYzCi02ZTFiZThjNWE3M2JmYTg2NzU4NTM2OTVlZTMyODg3ZGQ2ZGY1ZjAzZjg4ZTYzN2Q0NWY3NTJkMjJmNmM3NmIzCi03MWI5YTUxNDA3OGMzMjAwZGRkMmU5OThmMzNmMWFlNWMwYTVmZGM5MzJmN2M0NzI3NTEyY2FlYzIzMmE2ODFmCi1iYmRlYzFhOTE5YmRkYWViZjVlZmJkMDY4NjliY2ZlMDYzN2I3MmNlZmFhYzEzZjkxNWYyNWNkM2E5MjZjMGE1Ci00ODc1NDM1ZWU2YTQxM2UyNTU0ZmU0ZWNmY2I5NmMxYjVkODcxOWU4NGRkMzQ5MzlkZmQ3Nzk1ZWVkZWNiY2ViCi03ODZkZjMyYjYzNjBiZmZlZDU1M2E3NGI0NDRhMzVlMGFiMDUxN2NmN2FhOWM0ZTQyMGU1YmVhNGE1YWFjOTUwCi01NGNmYjU1ZDFhMWU1N2I1OGI4ZmIzODJlOGVhMmFjYmZiOWI0M2QxYWI2N2UwYzE0NTBlZDMwOTE3NThjMWIzCi04MTU1ZmQ2OTk2NTAwYTU1ZmE1ZDEzNGYxN2U1NTk3OGQ5MzA0MjVlMGMwMzc0ODM2NGM0NmQzYmVmNjhhMzkwCi02NDllMDllNDhjMmZhYjkyMTA4ZWVmODYwM2M3MGE5NzdhMzg4ZDRkMjQ5NzEyOTZhYWFiY2I5MzJiYzk2MDMzCi1mNjQ4YTZhZGEyNjVhY2E5MzhhNjUxMmY0NTZmZGMxOTRmNzE4NjgwOGRlYjNjMTY3NjlkM2ZhYTg1MGY3OGZiCi01ODYxMGM3NzZjMmVmM2YyMDg0MDRkZWYyOTQwZTQ4NGE4MDFjZGM0NWFlYWM4OGZhOTg1MmQxMzE5MTU5MzQwCi0zNDc4YjFiN2YyMDRmZjI5N2I2N2JkZGYxZDM4ZTI1NmY4NjRkM2E4M2Q2OTE5Y2E3ZGIxYmJiMWY1YjhmNmU3Ci04YmEyNzJkMWZiMjhkNzYwNjE4ZGFjNmY1NjMzYjk0ODE2NDVjOWI4ZWIzYTMzODQ1MTgxMDNjYzY4YWNlYjA1Ci01YTkxZGQ4ZGVmMDRiNDlkMzYzYjBjNmRhZjYzYWVmNWQ4NWIxZTc5NTA0YzIzYjNiYjUwYTRiNzE5NDgzOGQ2Ci1iNDE3YjBjY2JjZDk1YTQ2ODM0ZjliYmIyYWMzMGZiMmQ5YjljMzFjZjRiNjA4ZTEzNzkzOTlhOTVmOGRmYTk0Ci01Mzk5OGE3NDNjNWE1YmYzM2VkMWUxMDE3N2RjNGEyYTM0N2Y1ZmE0ZDA5NDcwY2I1ZDcxYjA3YmY0NTljODAwCi0wMTE5YTIxNjRiMTQzZjAzZmNlMzZjMTkzODRhMDFjZWM1YjkwODA0OTFiODJiOWZmMTE1Zjc5NWQ5NjlmNDgwCi1iNzIzMmQwMzc1YTlkNDZmYWZmMzFmZWNjOTM1MWI0MjkyM2U5YWI2MjA3ZDI3MjM5MTVkNzg0M2RiMjc5NTA1Ci0yODBkNzBkOWM4MGExODIxYTI1N2FlYzc2NGI3ZTg1YTFlOGRhN2M0MGQ0MmEwZjc3Mzg1ZWE2NmE3NjQzNDM1Ci1lMjBhZjcwODQ3MGY2NDUwNDZiYmVhYzEyZDg0MGZlMzI2MGNlNzVlMjA1NjMwMTRkOWUyZWJkYWE1N2VmMDZjCi0wZGRiNTVmZGY2ZWMzZTA2NDMxMmQxM2UyNTI5OWIxNTMxNjk3ODhlOGE0ZGVjYzA5NWViMzdlYWY4ZThjZTJjCi1jZDcxNzRmNDRlZThmMzg3NWM1YTNkZTNjN2NlMjIyOTZlOTljNDQ2MjhmNTJjZDNkMThlYjkyMTVjMzRlNTYzCi0wYmE4NWI1ZmNmM2EyMTEwMjFhMTk5NDU1MTBjN2UzOWFiNTZkOTc3Zjc0ZmQ1MGJhOGE3MGRlZjgyZmE2Nzc3Ci02OTMwMzkwNzAwYjQ2MzYzMzBhOTk4YjUzNTEyNmQ2MTBlOGExY2I2M2Y2MThkNjk4OTZmYjQ3NTc2ODU3ZjVmCi04OTI2ZGRiNDgzMzk2NjY5NWEyNjQwMmFlY2M0OGJiY2FkYzA0YzI4MzNhZmNlZGVlZTE0MjU0YTllNzc2MDNhCi01YmI3YjlkZTNjOTcwMDc5MDExNDNhNzkwMWMwMGI3N2ExM2U3Mjk0MGE2NTA3YTc2MTY0OTg5ZTcxZDkxZWIyCi0zMDgwYzU4NWJlMmY4NzM0OTA5ZmExZWZhN2ZjNmEyNDY0ZDk1ZTRjNTA1MWZiOGQ2MDY1YTdkOWE0NTNjYmRkCi0wMzM2MjY1NDRiNzIxMDhlNGM0YzA4N2I0ZTRkZDk3Mjg5MzM3MWJhN2I4ZTgyOTFlYTRmOThkMDNjNjFjZTZkCi1kNTY3MzRmMTdhNjY2OTdmMjI2MGFmOWIzZjhiOWEzNjcxN2I0OTBlMWNlNjQ5ZDgzOWE2NjEzM2RhNzc0MmQyCi1kYmNhYTIyZmY5MTVmY2FkZmZhMDM4M2NmMzRjMjI5MGZhNDJmZTIzMTI4ZTI5ZTdiYjFjNTllNTViN2FjMzQ3Ci1mZTY2NDgxZjQ4NWQ3YmQwOWY1NWNiNTFkMjA4ZDA3NjVhNTEwZDVmNjk1OGZjZDNmZjVhNWVkMjdkMDZhMDJhCi1mN2VjYWRjZTRiNGFjNWYxZDAyMTBjNTYzN2YwNzM4MjE5M2Q3Nzk0NWUyNDlkMmM0OTczYWE0M2RlYTQxZGMwCi01MWNkNzI2NDNiZGE0Zjc0OWRkNTg0NmE5ZDNhNzM0NmQzOWY3OGVhYWQ3MzhkMmQyNTVkZjBmMGNhYjVmYjEwCi05NmEwYWM4NmJiMDEzOTgwZGVkZmM4NGRkZmVmMDgxNzAwZmMzYzY2YjZkNWExMjVjOWU4M2RmMTdkOTI2NThjCi0xMGQ3OWE4YWFhMjIyMDA0YzIwYWFhZTYxMjgxMzJjNjRmOTZhN2E3Yzg2OTQ4OWE2Mzg2MGMxNWQ1M2Y5NThiCi1kNmZiODFjZDE2NWJmMjUzZDk5NmMxNTI5NWY3YzJmYzUyYzEzYjUxYWRlZDFjNzc0Y2IzNWEwYWIyNThiY2EzCi1hYjQzODc4NmZmN2U2NDhmNDJhYjU2OGZkZDljZDU5OGM1MmI1NzQ4YjBjNDQ0NThkNGUwYjgwODBhZDE5Y2JjCi01NWQ4YWExYTc4Y2FmZWQ3YmQ0MWE4NjQ0ODhkOGFiMGJjMTJmNjY4OTAyN2M2NWM3MGEyYjI2YmQyNTkwMDI2Ci0zZTgwYmE2MTg5NjcyYWRmZTM3N2U5ZmI1MTZjYzZiYmIwZjJlMzQxZGM5ZTJmMzRhOGJiMDBiNDA3OWVhMjhmCi03YzgxMzhjNDE1MzA2ZTAwYmRkOGU3MTE3NmZhZjA2ZmFjOTJlMzhlOGUxNWRjNmVjNmNkYjM4OWQxYTE1MzEwCi1jYTY3NDA4YTk2ODZmMjFiZjZmYmJmYTdjZTAzMjk3NGUyYjg2MGEzYTcyNTYxNTA4YmNmMjJlZGU0MTIyMTg1Ci1iODM1MzI0NDQxMzRhZjJiYWM1Y2VkMTkzMmM5Y2MwNmI3MDE2MGQwY2VmYzhmNzZlZDExMDhiNjI5ZTgxMDYwCi1jZTZjMzBlMGJjOWFjMjMyZmVmN2FiMWM5OWUyMTc5MjkyMWJkZGMyMGYyYWZkM2IwODNkYmEyOTY0MTQ1OGExCi0xYmE4MDYxMzYxMGIwMTU0M2QzMzZlYmM0NWFlMTVjMjc2YzlmZjE4ZmVjZGMwY2RlM2JlMThlMDQ0NDk3MjE3Ci1iOWE4MTJkOTI2NTM4ZmM0Mjg3MWY0MzkyODJjMTcxNzgzMzE3MGJkYmZmYmQ3ZTIwMzRkNzk0ZWVlOTE3N2VkCi0yODA0NWIyZGM0NTk1OTQyNmUzNWQzMGZkZQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotY2xlYXJ0b21hcmsKLSUlRW5kUmVzb3VyY2UKLS9GMTMwXzAgL1ZYQU1SVitOaW1idXNSb21ObzlMLVJlZ3UgMSAxCi1bIC8ubm90ZGVmL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQvTHNsYXNoL2xzbGFzaAotICAvb2dvbmVrL3JpbmcvLm5vdGRlZi9icmV2ZS9taW51cy8ubm90ZGVmL1pjYXJvbi96Y2Fyb24KLSAgL2Nhcm9uL2RvdGxlc3NpL2RvdGxlc3NqL2ZmL2ZmaS9mZmwvbm90ZXF1YWwvaW5maW5pdHkKLSAgL2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3VtbWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUKLSAgL3NwYWNlL2V4Y2xhbS9xdW90ZWRibC9udW1iZXJzaWduL2RvbGxhci9wZXJjZW50L2FtcGVyc2FuZC9xdW90ZXJpZ2h0Ci0gIC9wYXJlbmxlZnQvcGFyZW5yaWdodC9hc3Rlcmlzay9wbHVzL2NvbW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gKLSAgL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCi0gIC9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KLSAgL2F0L0EvQi9DL0QvRS9GL0cKLSAgL0gvSS9KL0svTC9NL04vTwotICAvUC9RL1IvUy9UL1UvVi9XCi0gIC9YL1kvWi9icmFja2V0bGVmdC9iYWNrc2xhc2gvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUKLSAgL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCi0gIC9oL2kvai9rL2wvbS9uL28KLSAgL3AvcS9yL3MvdC91L3YvdwotICAveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvLm5vdGRlZgotICAvRXVyby9pbnRlZ3JhbC9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwKLSAgL2NpcmN1bWZsZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHByb3hlcXVhbAotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gKLSAgL3RpbGRlL3RyYWRlbWFyay9zY2Fyb24vZ3VpbHNpbmdscmlnaHQvb2UvRGVsdGEvbG96ZW5nZS9ZZGllcmVzaXMKLSAgLy5ub3RkZWYvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbgotICAvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KLSAgL2RlZ3JlZS9wbHVzbWludXMvdHdvc3VwZXJpb3IvdGhyZWVzdXBlcmlvci9hY3V0ZS9tdS9wYXJhZ3JhcGgvcGVyaW9kY2VudGVyZWQKLSAgL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bgotICAvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCi0gIC9FZ3JhdmUvRWFjdXRlL0VjaXJjdW1mbGV4L0VkaWVyZXNpcy9JZ3JhdmUvSWFjdXRlL0ljaXJjdW1mbGV4L0lkaWVyZXNpcwotICAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkKLSAgL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscwotICAvYWdyYXZlL2FhY3V0ZS9hY2lyY3VtZmxleC9hdGlsZGUvYWRpZXJlc2lzL2FyaW5nL2FlL2NjZWRpbGxhCi0gIC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcwotICAvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCi0gIC9vc2xhc2gvdWdyYXZlL3VhY3V0ZS91Y2lyY3VtZmxleC91ZGllcmVzaXMveWFjdXRlL3Rob3JuL3lkaWVyZXNpc10KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgTUZFQ1VSK05pbWJ1c01vbkwtUmVndQotJSFQUy1BZG9iZUZvbnQtMS4wOiBOaW1idXNNb25MLVJlZ3UgMS4wNQotJSVDcmVhdGlvbkRhdGU6IFdlZCBEZWMgMjIgMTk5OQotJSBDb3B5cmlnaHQgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50Ci0lIChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSBTZWUgdGhlIGZpbGUgQ09QWUlORyAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpIGZvciBsaWNlbnNlIGNvbmRpdGlvbnMuCi0lIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBpbmNsdWRlIHRoaXMgZm9udAotJSBwcm9ncmFtIGluIGEgUG9zdHNjcmlwdCBvciBQREYgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGEgZG9jdW1lbnQgdGhhdAotJSBjb250YWlucyB0ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBwcmludGVkIHVzaW5nIHRoaXMgZm9udCwgcmVnYXJkbGVzcwotJSBvZiB0aGUgY29uZGl0aW9ucyBvciBsaWNlbnNlIGFwcGx5aW5nIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYuCi0xMiBkaWN0IGJlZ2luCi0vRm9udEluZm8gMTAgZGljdCBkdXAgYmVnaW4KLS92ZXJzaW9uICgxLjA1KSByZWFkb25seSBkZWYKLS9Ob3RpY2UgKChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudC4gU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLikgcmVhZG9ubHkgZGVmCi0vQ29weXJpZ2h0IChDb3B5cmlnaHQgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50KSByZWFkb25seSBkZWYKLS9GdWxsTmFtZSAoTmltYnVzIE1vbm8gTCBSZWd1bGFyKSByZWFkb25seSBkZWYKLS9GYW1pbHlOYW1lIChOaW1idXMgTW9ubyBMKSByZWFkb25seSBkZWYKLS9XZWlnaHQgKFJlZ3VsYXIpIHJlYWRvbmx5IGRlZgotL0l0YWxpY0FuZ2xlIDAuMCBkZWYKLS9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCi0vVW5kZXJsaW5lUG9zaXRpb24gLTEwMCBkZWYKLS9VbmRlcmxpbmVUaGlja25lc3MgNTAgZGVmCi1lbmQgcmVhZG9ubHkgZGVmCi0vRm9udE5hbWUgL01GRUNVUitOaW1idXNNb25MLVJlZ3UgZGVmCi0vUGFpbnRUeXBlIDAgZGVmCi0vV01vZGUgMCBkZWYKLS9Gb250QkJveCB7LTEyIC0yMzcgNjUwIDgxMX0gcmVhZG9ubHkgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwLjAgMC4wIDAuMDAxIDAuMCAwLjBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCi1jdXJyZW50ZGljdCBlbmQKLWN1cnJlbnRmaWxlIGVleGVjCi1kOWQ2NmY2MzNiODQ2YTk4OWI5OTc0YjAxNzlmYzZjYzQ0NWJjMmMwMzEwM2M2ODU3MGE3YjM1NGE0YTI4MGFlCi02ZmJmN2Y5ODg4ZTAzOWFiNjBmY2FmODUyZWI0Y2UzYWZlYjk3OWQ1ZWE3MGZkZTQ0YTJhZTVjOGMwMTY2YzI3Ci1iZjk2NjVlZWExMWM3ZDIzMjljMWEyMTFkZDI2YmIzNzJiZTU4MjJmNWVhNzBkOTllYjU3OGM3YmVmZDQ0Y2RmCi0wNDVhMzYzMDU2ZTVlMWNjNTE1MjVlYTZmYzA2MWRjZWJiMzM3MjA4ZWZmNzI5ODAyMzc2YTI4MDE0MjRmNjcwCi0wZTdlNjM5N2IyOGYxNWJjMTBiNDAwMTJiMGEzZWFlYjI2OTNlOGY3ZjYyN2M0YzljN2M2YzViZmYxMDVjMWU0Ci0xYjJiOWU4ZjA5MjUzYjc2MDQwZDI2OGI4MDcxOWUxYjNmNWE1NWFiN2I4OTI5MDY5OWI1MGMxYmYxYmFlZmZlCi0xZjU3YmU3YjVlYTAyNTI0MWEyNDhhNmQ0Y2ZhNTA2N2ExZGE2ZWJhNGNmYzk0MDU5OWJhM2YzYzkzNGQ3MjQ4Ci1iOGU0YWM1ODE2ZjBkMmNlOGIzYzQxOTNjZTM5ZDE5ZmZmZGI3NTI1NDU3MzE3M2NiNTFjY2Q4M2MyZjJkMDZiCi0yNDgzY2Y5YjA3YjIxZWM2ZjUwMmYwMjhjMjczODg3YmIwNmRhZTJhZmFjMTBlOWZkM2M3Y2Y1MWJjYTdiMjc3Ci1iNzA2ZTQyNTMwMmRjNzg5NzVhYzBlNDNiODcwNzMyNTdhNWNkNzQyNGI2ODY1ZmNhODlkODg2ZThmOTVjNGY2Ci1kNDU3NjIzZGJiYzBkMTZiYWZlYjRjNjQ5ZjVkNzJiMDliMTg1MDJlZWFiNjg3ZTkxNWU5YjUzNmEzNjFiNGYxCi00NGMzY2Q0Y2M2ODNiNWYwNWE0ZWNiNDgyM2E1ZWI1MTc5YmI3ZWVlOGI3NmMyMWIyNDkxYTk3ODA4ZjYzMThiCi01ODViMGJhZDk4ZjQyZmI0YTc1NWJjYjc0Y2QzNTRmNzk0YzhiZWE1YjkwZmI5NjgxYmQ1ODQ5ZDQ1MjQ3ZTM5Ci05MzBjODgyNDkwMjMwZTE2NjJkMzljY2E4NzViZmZlYWMzZTc5YTc4ZGU2ZTEyOThhYmU5ODE3YWU5ODY3NWM0Ci0xNjIyMGFkMGQzYTM2NTgwZWUyZjJhMTdhYWExMjQ2YzQxNmQ1OGE0YzUyZmJiMjZhYWYzYjZmNzU4MzNhZjhlCi0zYWE5OTYyMThkYWZhNTcxZmJjN2NhZDkwZWNlOWM4ODNjODEzZDhmMTY4YzVlODZiYmZhMGYwYTVjYjM2ZTM1Ci0yZGU0Y2FhMGY4ZDMyMjdmNzJjNTA1NmJmYjViY2E2YmY5YzYwZTAzN2EwZTQ0NjcwYThkM2NiYzlhMTlmMzc5Ci1jYThkYjMwYjcxMWY1MThhOGM3NTY5MjExYWM3MGM0NmVlZDJhZjYyYTM3ZjIzOGJkMGJkMTJkNjAzMzJlNjczCi1jNmU3ODRiM2ViYTNmMmU3MWU5OTkzYjk3ZThhMzhmODUwNDg5MzdlOTU4ZjFjZDhmYzZlNjYxMDQ4NTQ2MTM1Ci01NmI4MTBmYTFmZjYxMWI5NjQ5NTA4MWMwNDU0MmRmN2ZlZjA4NWRlYzYxOWRjOGM4NGNjNTc2ODNkMjEyODEzCi05ZDE0NzI4YWEzMjcyM2UxZDE1ZjJhZjhmMDM0MjJjZmFmZDhlYTRjOTJkYWJmZTAwZTYxMTBiY2EzOWZjNTU1Ci1iYzA2NmVmODQ4ZTQzN2I1MDY4OGRhZjI2ZDAwMWFlZDdlNzQ2MDVkZGY5YzBlZDM2YmU0NTQ1NWFlZjkyNjg5Ci04Y2YzMmJhZjI0MThlMDIxMTg1OTNmNTRmZTE4NTc4MDdiZmEwYjkzYjVjZGNjZDgxZDI4YmVkZTIyY2RhNmVlCi0yZTMyNDIyYzFlOGRhODg2NmU1MjYzMDBmOTA1OWU4NWNhNTQxMjJlY2JmZmRjMDExNDYwOTEzZTBkMjhmN2Y1Ci1mYmM5ZDdmOWY2OTM0YjNkOGVmYzFhOTFjYmE0MTI4ZjZiYmM1ZWI1NWU1ZTdiNzM2NDdiZmY3MDY2MmJhZmJiCi0xNDVjZmE2NWRmM2RiODU4YmMzZmM1NzdiMWJkOGJjNzRmYjhhNjFiZmE3MWI4MzA0YWVlYjM2ZDhlZmUxMmZhCi02ZjVlZWUwZWFlMDgzMGU1MTc3ZGM3NDUyNTBmYzM2MmY3ODIzMWZjM2FjOTg2NDU1OWRiYTkyZGRhMmZlYjk2Ci0yNjI5MjkzNDM1YmY0YTg5ZjkxM2ZkMTU3MDJjZjMyNTk4MWNhM2EwOGIzMjdmN2VlMzU3OTRhOWU4ODMyNmUwCi0yNDU1OWI1NDdmYzZkYTYxYjdhM2I5MzU3ZjcyYzc2N2JhYTljNzljNGU3Yjc3ZjcwZWMwMWFjMGI4NTk2NDI1Ci01ZjczNDZkYzhjZWRjNzAyZDNkNTdiMDllZjg5Y2RkMzM3NTY2MTlhZjU5YWNiOWQxN2EzYWJlYWE2YzY1MjE4Ci02ZDY4NTUzNDhhMTA5NTc0NmIzNGFmMTVkZjMxMzA5MWM1OWU1YmY5ZTc5YjE1NmNkNzkwM2MxYzQyZTExNWU5Ci1jNTIwMzAzN2M4MDhiZDI5NTE5NWUwNzRmYzRhNDZmYmIxZmYwMWM4MTQ4NzhmMGMxNzdmNTUyYmRjOWJiNjk4Ci0zNDlkNzNhZWMxNzk5NzM3NGVjOTBiNjkyOTNhMDY0NDQyMTQxYTQ0YzZmZThlM2MyODNjMDJhNDY1NWM1NzliCi1mMjFiNTNkMWZkMzc5OTZjNjgyNzQ1NjAwNzg1YzdiNTJjNGVlYjQ3ZmE1ZmQ2NDA3MzllMWYwOWQ1YzVkZDJiCi1iNzUxNWE0Y2NlMGEyMTI4MWQzMTU1NjM4OTU5NzJiZWU4OGJiYzc0MDFiZTllMjBjYjE2MGI2YmM4MWVkNDY5Ci02ZDY2MTY5YmRjNjQ4YWFhZThhOTQ5NWIwNzI5MTFjYzgxNGMxOWQ1M2I5NWRlMDA3MWUzYTQzOWQzYzA5YzNjCi0xY2Q0MjJjNjA1NzQwYTg5Mzk0ODdlMjZiYjkyMzNkNGNkZWZjY2E0OWJiZWIxYjkxMzU3MGE1MWIyZjk2ZDMwCi0yZWY4OTEzYzZiYjYwYjU0ZjdlYTRiOGNhMTZhZDNiNDE5NGRjYmEyODQzOWViMzFhOTQ0M2NhZjA2MWM0ZDg4Ci1jMjJjZWM4ZDlkOGQ4NWQ3YWEyMjVmZDY0YmZhZTczNzZhYmQ0MGY4MjJiYTFlY2M5MzM5ZTA5NDAzMTk1NzUyCi1mYzAzYTVjNDc0MmFkOTMwNjRkOTc1OTA2ZWQ2M2FjYjQ5NWFhZTMyNDQwM2QzYmNhMTE4MTc5ZTEwMjU2NTQzCi0xYmM4NGQ0N2UwYzAxNjIzNGVlYzBjNTIyNTVhZTc4MzQxNzk0MWNjODg0ZWZhZGI2M2Y4MjY5ODc2ZjAwYThlCi0xZTFmMTllYWZmZmEwMDQ1MzIwM2EwNzUyNzUwZjhjODc2YWFmODc4MjZiYWY3N2I4MWQzMzZmZmMyOTI0OWM5Ci1hNmE0NGY0MDM4MTI5NDQ0Nzg0MDYzMmVlNTlhM2M0NTMwMzkxZjM1ZGE0NWMxNmEwMDFmNzkzNzgyYmU0ODhiCi01ZTAxZDdmNzVkYmQ1M2ZiMzFmOTU2ZjE2MjAyZDNkOTRhMzAwODY2ODE0YmE0NGM3OTc2NGNjMjVhY2I1N2YyCi0zMzNkZmNmM2Q5N2E5OGZjYTk0OWIxZGE3MWFiMjc4ODUxODNkOGJhYWZjOWJjNzQzMTQzZjJmMTAwMmFkNzUyCi0xZTU1ZDIwN2RlMjNlOTdkMTc2MGNkOTE4YTU1MTQ4ZTM3ZTA1ZjYzNDdlOGNjMjk5ZWVkMjhkNzMxOWFiY2RmCi1hNGEyNzlkNWY2NGNjMjE1MWY5MWEwYmU5ZTgzODJhMzViNTM1YTZiNWY0MWYzNzA4MTY5ODgxYzI0MzM5MWM2Ci02N2Q5MTIxYmEyMWY2YmIyMmJlMWVjOTkzM2Q5YWYxZGRlOTY5M2Q3NzA0YzExNDFjZTJiOTc3ZmY1MTgxMjk5Ci02YTU3Zjc4MDY4MTQ0NDBhMjhiMWRmYjYyYzRkZWRiODJmMGViYWFiZWYzMzY3YmViY2Q0MzI0NmQ1NGQ4ZWI2Ci03YWYwN2IxNjQzNzQ5OThmMDZhMGI3ZTI3MWFkNmVhOTc0Njk4YTgwNjAwMjM3NGQyNzBjNmRkNWM5ZGZkNWRiCi1lMDU2ZmUxYjNkNTg0ODJhMGNjOThkNGQ1NjAzYzU5ZWMyZTEzYjQ0NjAyMzY5MmI5YWMyZGQ3Y2Y3NjdkMmRjCi1hN2M2MmJiMzU3ODg0NzA4NWNhYjc5ZjEzOWJkMzEyY2IwN2NlMTNlMzhjM2ZiOGY2OTViY2Y0MDIxYzI4MmIwCi05YjIwYmE2N2YzNzhjYmI4ODMyNzUxYjhmM2VlZDM3MGE1NzIxMzk0MzFiOTE4Nzg5M2I1OTI1MjlmYjFiNmM1Ci0xOWY1MTc5OGJjZTllNTZjYTUwMTg1ZDQyZmJkODU4MTljM2ExMTUzZDY1OTk3NTExYjE5YWNmODdlNjljMDdkCi0yY2ExYTc0MDFjMmIyM2Y5OWMxOWY5NWRhMGRmMTM2NDcyZjlmYjU3NGIyMWFlYmJmMGMyZjg5MmI5MjYwMDAxCi05YTkxNzNmMTA4ZTcyYzNlYjRhOTM3MTkyOTNlOGJlMDI2YjgzM2NkNzA5YzdjMDVjMWEyZTcyNTBjYWQyNTg2Ci1jYTcwZmI3ZDkyN2UzNmEyZTRhNmYzNGU3NTRjOGRkOGVhMjU3MWNkODIwNTQ3MDBkMzg2Y2RmMzQyMGYzN2JjCi1iNmE3MGI5YTkyZTQ2Y2ViZWUxM2Y2NjQxYzY3YmM0MDk3OWY5Yjg2ZTA1MjE2NDYxMmQzZGNlN2JlNjdmYTcxCi1iMjZlZTlmNDI1YjU0YjM1NzdjYjRhY2YzZGFkMDJmMmU1NWQyOTg2ZGVhODhhNWExOTU1Yjc4YzBjZDVkZWNkCi0yMTNjNTVjOWM1NzE4M2E3ZGQ1ODMyZDQ5ZWU4MTcyNGExOWFiYjdkYTA3NzlmMWFhNmE3N2Q1ZDMxNDM0YTA5Ci1jNmY1M2I3ZTI3MTIzZGFjMDQyZjU4ZGMyNzY1M2Q5NDAzNThiYjgxMDBiNDE2YjkyMGFlZTIwNjcyNTU5ZjYyCi04YjIwYzY4N2Q3N2ZmODNjY2E0NDllOTRmY2Y0ZjA2NjE0ZmM1Mzk4MDIzNDA2MTllM2E3OTFhMTg1ODFmZmI2Ci05YmI1OTYxZDFlNzBlNTU2MTVjY2U1YzllMTQ2NmQ3NzQzNWU0ODZmMTUxNzVjZjg3ZmZmNjVlNTgxMjdiNWMzCi0wMjRiOTNjMWMyOTZhYWIyNGYyOTQ4M2FlYmEwMDczNmVkMzBiZTViYjUyODRkN2FmYzQzMjk0YjkyN2JlYzFiCi04NjgxNGE1YWMyNWEzYjljZDFmMjVjODEzY2FlNzkxZjkzNzM3NWUwMTMxNTk2MjRhMzYwOTU1YTU4ZThmYTk0Ci1lNDk1OTNhOTcxNTA3MDJjNzFkZDhkYmZjMzc3NDA5NGRmOTMwNDE0ZmZjNjhjYmQ0YjRhMjUwNDFjYjNiNjU3Ci1hNTRjOWJmNzgwMTQyZDI1ODZlYjVkZDllY2MxZWI1ZWE2OTI0NWQ1ZDljMmFmODY4OTc0YWU1ZDQ2ZTNhNTQ0Ci03NGU5Njc4MGFlNjYwMjM3Nzg2NTlkOWE0NTg1M2MyNGRhMThkZDVjYTA0ODljY2NlZmYyNTNiMDA5YzA2Y2Y1Ci04MjZhZGJkMGU4ZmNmMjNlZGQ3NWMzZDNkZThhNGM3ODlhODk1ZTA2ZDIwNjA2ZTRmOGUzYzFiZDc3OTc2ZTcxCi1kZTQwOTIwM2VmMTM0MmJkYmYyYzExYmJhYjRhZjVhNzA5ZjA0NjJhYThmYTNhMDJjYmVkNmYyM2ZiNGQ1ZTNkCi0xNzUxYWNiZDQxZWVjZDg1NzE1MThhOWUxMzg4OWMyMjFiYTU1NjhjYWRmNzMwZjlkYTAyNmZiMzhlMzBhMjVlCi04N2VmNmExMzQ4NGQ2ZWUzMWMxNzRiZmE0YjgwY2MzODEzNGQ3YjE4Yzg1YzgzYjRmMTRkM2M3YjBhMGI3MDY5Ci03YmFhMWEzOTcyNTJhYzQ3YjY3MzA2ZTQ1ZDY0MDYxNTM1ZDA1NTQwYzg2Yjk1OTlkZjkwOWUxMDViYjU1MTAwCi0zYTAyNzFjMjViYzVkNTk2ZGEyYTQ0NmUzNWMwMTliNWRlYWQ3YjI4OTYxNGJkNTA4NWQ0OWVjZDA0NjRiNDk0Ci1jZDFhYjU2NGE5M2FjOWNiZjQzOGZhNTU4YmJlZjcxYzJmZTAwMzU3M2EwMzk3OWExMGZlOGJkNTRhMDUzNzI0Ci1hNTI5ZjQ2ZmZlNTVjZWM4ZDZiYmFmMWY1N2QxNjE4NTU5NWM4MmExZWY0MmUzYzgxY2JjNTViZjUwNTg3NjMwCi00MDRiMjA5MGRmNmQ5ZDI1NDY4YzFlYjdhNGIyYjNkYTdmNWI3MTgxNTdlZjhiNWYyM2FmMDg4MzAxZTQ2NDExCi1iNTFlNmUwZDQ2NDA5NmNlMjJiYmMyMDI4NDg4ZDlhZjQ5NzkyYjRhMTdjYmJiYThhY2U4ZmM1MWUxZGUwMWIwCi05N2U2ZGIwNTQ2NmJmNjY5NzgzMDU2NDJiNjc5MGMwOGU1OWE3MDU1Zjk0NDJjYzJjZmMyMzA5NWRmMmMyN2VhCi1kZWNjMWJhNTRkNmI4MWVjYzg3M2E5YzcxNzk2YTFlY2U3NTc2NWI4NzhkMTJlNGRhOWUxOWQwMjZhYzQ0ZGZhCi0yZGM3ZTU0MDUwNjU0NmFhYzcwZTdiODJhZTdmYTk4YmYzNjU0OWY0ZDU0MGZmZmQ1M2FiYWY3ZWQ5MDQ0Y2E1Ci02YjRlOTA0NGEyYjIzYzNlN2M3MDE1MmU5NmY0ZTY0ZjZiMTkxODk0Njc4OWQ0ZjcwMzY3NWYzZGQ2ZThlNWE4Ci1mMGFkZDVmN2U0NDJjMzVjYzc4MmM5MmRiMjAwNzU5NmVjMWE3NmQyZDIyY2E1YjAwZjdmOWFhOTgxOTMyN2E0Ci1kYjhkMGIwMzM2OWEwNWRlOTZiOGM0ZWFlYzI1NGNiYTBmMzllZjZjYTAwNWM1M2FmZDBlYzMyZjFjMDkyMzY3Ci1lZmQ5Zjc3M2JkMDBiOTVhNjA1MjNiYzAzOTJiMDUwYjE1YWQ3MGY3Y2I0MmY2ZDM2NTg3MTQ0Y2FlMjQ0N2FiCi1hYTRiNGQ5Mzc3YTdlODZhYzQ4OTY4NTgzM2UxYzE0YzNlMTc2MzhiMDA4ODRhNDZjMWVmYTJiMTU4ZjYyMzliCi0xYmJlZDZmYzY4ZmY2MDYyNzhmZDQyMTZjMmE2ZDc4ODhmMGYwZTVkZmM5OTUwOTYyZDQ5NjQ5MDFhNDdkNmNjCi0yZTMyNDNlMWRkZTljZTdmNDM1YTdkZmIxOTM0OWEzMDE3Y2U0NGI4N2RjNmJhZWMxODM1NGEyMDQyYzg3ZWQ2Ci1jMWUzYTFhNTA1Y2M2NzllMzI3ODlmNzU3ODBmODQwODJjYzY1M2EwMTBkMTRkYmE4NGRhMDE5MWE1MTAzNTljCi0xZDI0ZDcwMGM1OGU1NDcxOGYxZDg1Mzk2ZTdjNWQzYTM2NTYzNzA4NWI2Zjc5YzA2MWRmMTdiZmNkMjYwZWEwCi02Yjg0MTZjOTA0MmMyODMxZWIwNDEzNDZhMjJiYzU0ZjlkN2JhNDNmOGM0NDg3ZmMyNDBiYWVjMjBhZDRhYWE4Ci1jMDNmMTgwYjYxNGM1OWRiNmU1ZWMxNTMxYWVmYzkwOGM0NmI5MzQxOWI5ZjViMmQ0ZWJhMGE2N2JhNDNkNjg1Ci0xYWQ0NGQ0YjQzYjc3OTZkZTVjOWExMWY3MjZhOTBmYjFhMzg5YTM0MjE0M2Y5OGY0OTIzN2ZiNDUxYzQzZWI1Ci05ODE1NjJkOTIzZDY4NDkyM2RjYWVlNzFiNTJhYjRjZTYyNjkxNjlhMzVmNTQ1ZTc0NTg0ZmE0NDBjNDFlYjgyCi00MWFiMTk0Yzc4YTViOTgwZDAyMWIzZWI3OTk0ODQ2ZDk2M2I3OGViNmUxNDljY2E3NzEzYzEyZjc3MDIzMDAyCi1iOGE3OTdjOWNjZDBjMmJkNzBkYmU0NGY4MWY5ZDI3NGE1ZmYzODI0ZWUzNGNiNDMxN2ZhNDk3MWQ2N2Q5MGEyCi1mM2QxYjFiODQ5NjBmMGZiZWU0MGU2MzQxYzUyNzFiNWI5NDViOTA5OGYzMDk1OTg2YWI3ZGIyZTA3MTRjY2EwCi0zMDFmNmI4Mzc4NTU5ZDg2ZjBiMGQ5NWMyZGZlOTRhYzhlMTBkZjBjOGMxNmRiYTEyNTA1YTBkNDY3ZGNjYjg0Ci0xNmJmZWIxODc4NGJkYzEwNjI0ZjE1ZGExYTg4MGZmYmNiYWZiZWQwZTFjNzM2MDk2MjQ3ODAwNmRiNTljNzhiCi1kZGNlZTUyNGI2ZjliMTVhODg0OWVlMTlhYTAwZmEzZjcxYTNjMmM5NmU2OGRkMDI0OGE5NGVjYzQzYTYwYWMzCi04OGU0OWUwMDUyNTA3MDY4ODA0ODVkZjEwOWNlMTUwNmMwYTRlZGM0MGY1YWU1ZmUzNDdkNTJmZjYzYjI2YzdjCi0xODVhNjk4ZTE3MTI0NGFhMTA5NTYyMDQ5NDk0OWQ1MjYyNzYxNzVhN2UxMjAzNDBkMzI0N2NiY2E0ZTNkZjUzCi02NDFkNmQzOTJhYmM2MWM4NWEyMmUwNmNkYmM4OWNmMzdiZmZkZjhhNzkzNjFjNmRkNjllNjc3NDc3MmY2OTliCi05MmY3YTcxODRhMDBmZGQ3ZjM2ZmI4YTA4Y2NkZTViYmNhYjM3MzEzNjZjM2I3NDA3MjA0NGQzZWYyZWJjMWNiCi0zMzExOGI4YzA5YzA0MTc0YmFlZjhkZjFiYjRhMWUxZjg0OGMxYTUxNzhlYzU4ZWE2MjFmNmY4YTYzZDBmY2YzCi0xM2RiNzlmODg1YWM2NTljODgxYWI3ZTQwNzk4YTQzMzllNmE3OGJhMjdjZDllNjgwM2MzZDRkZjE5NmM0NjJiCi1kMDg1NTViZWQ1MWQ3Y2Y1ODIxMjA0NzI4MzU2Y2Y4MTNmNTU0NTE3YWM1ZTI4ZTZjNDA0N2MwMTAwNjEwNjM1Ci03ZDI1YzMzMzMwNzU4ZjcxYmQxMDQzMzY1YmRhNWQxZDkyMTRjOGIxNTlkMGY4ZmI2OWU0MGU2ZmI0ZWY0NjY4Ci1hMjI4OTM4NDM2ZGQyMDlkZGE1OTI1NTk3MTUxZjg2MzMyOTc4NjI3OTkxNTJiMDMxN2JmMjFmOTU3MmY1MDNiCi1iMTA4MjZhYTdmOGQxNWY1ZDc4MGVhMjdmMWI4Y2EwYmEzZGQ3MzJkM2UzZWZmY2ZhZDZlNmFkODc2OWRiNmMxCi1kZjIyYWNlODQ2NzQ4MWQxNmU4YWY2ZjU2MDMyYzkwYzhmMjUwMGNlNjZhZmI5NGQzNzhkODkzZTg0MjA4MDQ4Ci1lYzBjZjkwMDUwN2YwMmU0MGRhM2U5OTM4NmY5MzllMDVkOTczN2IwYjExYjdkZmFlNDczNDk2ZDA1NmJlNWUwCi03ZjFjZDI1NDU0ZjRiMjkwY2M0M2Q5MzY0NTBjM2Q2NzVjZWVmNWRhNTMzZGIyNWVjMDdhZGRjN2U4MzU1ZDhiCi04YWJiMDk1ZGRkNjFjOTFkYTJkYmVhYzA1NzRlOWVjOWQzMTZlZDEzZGYwM2M5OTdkN2E0YTljN2E2YTNhMTY1Ci1lYzFjZTMxNmU4MjBlMTMyOTExMzJhZTkxNjYwZDVkMTgxMjE0NmFiZmExMzc3MjZlODcwMDM5NWI0Mjc0NTAyCi03ZDUzYjFlNWNiYTgxN2JlYjU3N2JkZGNiOTU2ZTg5YWEyZDFhYjI0MTI4YjlhZThlMDZkOWYwYTZkYWI5M2JkCi1mN2VlOGUyZmY5MTgyNTVjMzcyMmE4YjBlODUyMGRkMDJiYTdjOTJhYmExM2ViYWQ5Y2UwYWQwZjE2ZjcyOGQwCi1hZDQ5YmNiMTJiNDI5ODExZDhjYTFiNWFlMjliN2Q1MzkzNDAxZWI1ODAyZGI0ZDQ0OTdjYWQ0M2VhZDIxOGVjCi1jNjc0ZjQyMTQzYmMxNzRjNTI1YmQ3MzZiNzdkYzI4YmZjN2UxMDczNjZlYjkwOTFlZWRhNjA2NjRhNzcxNzgyCi1jYjQxNTA2NDA2ZGZkMjljOTc0YzVhMThkYTg4YjQ3M2FlNThhMmYxZmJlNTY4MGE0MDEzOGE5ZDJmYjc5NTViCi0zZmRkYTIzYjJjYmU3ZTI3YzFkYzRhZWEzMDY5YjFlN2UyNTA2OGM5MDUxNjcyYjhjOWEzYTM3ZDZlNmZkYjI0Ci0zYmMyMGQzMDMxOThmOWI4YWQ4MTU0YjNmNGE0ZjJhY2IxN2MzMWEwNDg5YzEzNjZlYjhhMTMwMTJjNmI4Y2NhCi00ZDQxNmI5MTFkZTc4MTU2M2UyNmMwODUzOGUwMzhkZDhlZjkyNDM1YTA1NDM0OGFkZDgxNTY4N2RkYjk5ZGRhCi04OGYxZTJjNTg4NzcwN2NkNGJlNDdmNzFhYjgxYTNkNmNjM2UwMzliZDA5Njk3NzM0ODQwZjhiZDBiODhhYWM2Ci0xOTFjNmRiMDg5OTQzZjk5ZWU0MTc0ZTVmYWIzYmFmM2E4NDI5ZTI3M2M0ZDFhNTE0MGUwMDczZjg2MTA1NDAyCi0zZjYwZGY2OWU2NTgwOWI3YTFhNWE4YWVlNGQyNWJkZGU5ZmQ2ZDA1YTNmY2Y0YmU1ZjI1M2U0MWZjNDllMTIxCi1kZjg5ZjI1OWJhOTgxZDI2MTcyMDliNTNlYmQ5MmU0MzBhNjk2Njg5OTU5NjExNzdiMTU5OTMzNTAxNzcxOTA1Ci0wOGY2MjViMjZiNTA4NWMwNGIzMjVlN2ZiNmJiNDVlZWJlM2JjOWY1YzUxMTRlYjM3ZjE5OTM3NjM1ZDcxYTcyCi0zOWEwMDM5MDAzNzY0ZDEwY2I0MDNiNThjNjFiZjQxMWFhOGY1ZDcxN2JjZmYyM2ZiMzM4ZGE1OGQxM2NhODFmCi1hY2IzMzE2ZDJiNWI2NzVlODZhOTVjZmI1MjUxOTlhMjFhZjI0OGExMjQ1YzkyZWUzNzY4OGM2ZTc2YTk1MTg3Ci0zYjQxMTY5N2ExZWE2Njk0ZTZjY2FkZGVmM2Q1NzExNGNmZGU3MDYwOWRlNjc5NzJlZGQxZGI5NWQ5MjNlMDc3Ci00YmNlN2NjNzc2MDVmOWJhNTIyNmZiNzkyODI5YjFiOGVhYTE1MzYxZmY3OGYxOTBhMDU2M2ZkNjFhYWM0NDUyCi1lZTFiMGQyOTNlNjk1NDE2YzY2NzczNWRkODg2ZDEwZTQ0NjdiNjEzZGQ5YmI4OTlmMmJkNzVmMmYxMzE5M2YwCi00ODFmY2QzYjRlMmFhZWM2Y2YyODI5YjE1MjFkZDRiNjQ3MWJhMzFhYTBhYTRkNjNhNjQ1NjIwMzg5NmExMTFiCi04OWMxMDZmMWVhODViZmUwYzAxMDRiMTI5MmExZjhkNDkzMzQ1NzgzNzViNTVkZWFlMmQ3MzgxZjVjZmNjMDIzCi01ZGRmYjNkODU0NjA1NGEwZTZkNWQ4MWU0MjU0MzgzMzg1YmE1OTNhN2QzYThlMGJlYjM0Mjg1ZGQ5NWQ5N2NhCi0zZWI1OThiNjQzODM0NjQ0YjYxMWU2ZGI0YjhiNDM2MGM4NDcxMjAwMzg3NjhlMjE4MDMxZTA5N2JhMGJkZWE3Ci03MzJmN2U0NjAxNTVhNDk2YjkxYjMyNDFjNzRmOWVlMGM5OWVjN2FkZjZhODdiNzAxYTBjZWIwN2ZlZjVmYTQ0Ci00NGUxMjdkZTNlNzc3YzIzYThkOTM4Zjk4NzlkZjFkYWJiN2FkYjMxMjQ3YTUzMTc0ZjkxOWEyYTVhNGY5MjBjCi05NDE1ZjM5NzZhOGY0YjczOWUxMTRiMmM0OWQ2N2JjZWRjMTg1MjY4NmNiMDQxZTNlZTk0ZWY5NGQ5ZjIwOTZlCi03NmYxYzU1OGY0MDgxMjQ0NGM2ZjBmNGRhYzNhNGJkMjJiODJlMzJkOGJiZjE1MDRmODIzMmVmMDBkZDJmM2ZmCi01YzRiODM0OWE5ZDFiZWNiOGM1OWE5ZjQ3NjNmMjU2NmE3YTUxM2E2YzExZjU0ZDFmZGMxODY3YWI3NDFmM2M2Ci1lMmI0NGFhOTU0NzllNGU5ODEzMzUwNDczYmM3ODk3YjllYzU5MmYwMWY5NzY5N2ExNzk2N2QzNDRhNGJjOWE1Ci02Mjc4NmYyOGY4N2UzNjM5ZDA5MTkyMmY0OTk0NjcxYjIyZWZkNDFmZjNmNmI4YTY1MTExN2QwYTJhOTdjY2ZjCi04MGE2OWM5NzRmYjJjY2IzNmRkNmE0ODk3YmY4OGViYzY3YmZkODkyZTM1ZTY5NDBlOTQ4OTNlMWNkZmQyNzk5Ci04Y2ZjZjJiMzczN2E2MjMyZTQ3ODNlYjRhOGFlNTZiODNlZDc2NjEzNzdiMzAyMjVhNzVhMWI5MGI3MzA3OWUyCi02YWEzM2ZkMzdiODFmN2Q2MGRlNjI5MzFiNmJlOWQxNjM2N2E1ZmFiMWQxNGQyODFkM2U4ZDA5ZGM1MjVmNTQ5Ci1lZDAzYTQ0OWRmNDY1NTgwMmJjMzI2NTAxMGYyODZkZjg2NjAyNzQwZDhhODZhYWEyMjhiOWM0N2UzZTc4YzBiCi0yMmQyNjAwZDVjZDU1YTMxMTYwNThkYWE3ZTM0MTc0MTQ0Zjc4YThmNzJlMGRjYjhjYzY0YWRkY2M1MmRmMGRmCi0zZjhjMjFkOWNjMDRlMTg3YmU1M2Y4ZmVkNGYzMzYzM2JhMDNhZmExNzhmYTVjZTc2OWE3ZWIwZTFiOWJmNWJkCi1kZTBlYTc0ZGM5OTU5OGE2NjY5NmJmNmQ1MDcxZGE5OTVhMzBiODE0NGFjZGVhMTE2Y2ZjNDQ3MjU1YTk5Y2NlCi00ZWMwMWJjOGEwYjM1NWMwODgxZjZlOWViNDg3MjVkNjFlZTBiMjQ1ZTBmN2NjMzViOWU3NmZlMTFmNjgxMDE3Ci1mNzk0ZWQ4ZDRjNGM3YTAyZTE3YmQxNmEwMjM0N2YyODMxOGNjYWFmZTA1NzU3MzQwNTgxMjFlM2FkODA2NGVjCi1hMDA4NmE1OGYyMTYwMjBhMmRjYTI5Mzc2OTgxYTI1OTViZmFjMmEwMzk0ZDQ0ODk0OWI1MmZmYjQ3ZTVjNWUwCi1kNjM3MWNiNGE0MTdhYzgzNGQ2YzlmYTAwMThjNWVmYjE2ZTM5ZTMyYzg1MDg4YjI2NmQ3NGFmNTYzMGIyNTQ0Ci1kNGNmNDAzNDgyYzQ5MGY4NmQzNWY4MWNjNDRiMzQyMDA0MDBjMTBjNmRmZjAzNTQyM2U3MjVkNDFkMmI1ZWUwCi1jM2YwM2E2MDNhMTYxNzEzMjE2YWY5NzAzNmVkMzhmZjhkOWIwOWYxODlhZDE5MWEwZDAzMzY5YzNmY2Q1YTNhCi1mODhhNTczMzg5NzFkN2JjYjVmM2ZiZjg3MzVhZDg0NTk1MjRkOTNhOTJlYWMxYzJiZjVmMGU2ZTFjZjY3NWYxCi02ZDcyYjM1Y2VhZjM0ZDhmYWMxNzhhMWRkODIzY2EwNDQ4ZWUxZmEyZjYxNmI4MDNjMzhiODkyMzhhYWExYWU3Ci1jYjA1N2VjZGJhZDI4MTQ3ZGE0NmEzNGI4YTFmMWQzODllMDgyY2MzZThlYjFhN2U1YzBjOTMyMzQxODI0YzIxCi01NzBlMDAzZDhjMTFjODdkNzA4MjM3MWQzZDQ4MDRkYTMyZmRlMTE4YzZjNWI1YjA4ODI4ZTU3ODMyMDBjNmVhCi0wYTdhYjczMzQzZjVmZDY4MWEzMTE2ZmQ4MThjNzA1NGE1MTk5MjEyZWIwZjNhOWEwZDg3YmMzNjQ2NzBlZTJmCi03YTUwODFhMWU0OGE1ODc0OGQyOTdlMDE0ZGQ1ZGI3ZmFhZjdhMjc0NTlmMTE1NzQxYmY0ZmFjZmExYjM5NWUzCi1lOTc0NTJiZGFmZjkwNmFmOWM1MmM1OTA4NzQ4ZjFlMTNjYzg1ZDE2NWJjODkzYzFlYmE3Mjg0NThiNzA4ZjhhCi05ZTg5OTBhNmYyNThiZGEwOTg5YWFkMDk1OWU3MzI2ZDFkNmJjY2I1MGM0ZmFiMTVhNmVhM2NiZTk0NzI0ZmMyCi04ZjE3NGRmOTNmYmZmNDFhZGJiOWQ0ZmFjMDEyNGQzMzE1MWQwNjc1M2Q0ZDg3OWFjNGYxNWFlYzVkMWNjMGI3Ci1hOWU4NjFmNzkwYTE2ZWIwODIxYjJhN2I3YjQyZDZmM2UzODljNTFhMWQ3YzY1Mjg1OWZmYmU2NjY0NmQ0MTk5Ci1hNjJlZDI4YTMwYzg5MzJkYzRkMjg1NWU3ZTYzMTFkNzljZWRiYThiZWVmZTJjZDUyOWY0YjQ1MzgyZjNlNmU2Ci1hNzY1OWRhOWI3ODZmZTdiYzJlNDMxZWUzZjExODczYWIyNzA5MjAwYjcxNTM0M2NjMjVjNTM2NWQwNmJlOWFjCi04Mjk0NThmZjc3ZjRkNTA5ZDljMzkxNzIzN2Q3NTlkYTY3NzVlMDljMmVhZjRjZTk2NmExNDE1N2VhMjc4MGJjCi1lMzI0OTQ0NjU3M2M4MmIzM2VjNWNhMTUwMDIyYTgzMzAxZjAwZjQxZWVhMzY5NDA1OWIxNGIyYTlhYmNlYTMwCi02NWNmZDA2YjlkY2UzODIzNDc3YmY4MDkzOGQzNTU0Mjc2NjZhODI4N2E2NWUyMzFhMjM1N2FlZDgwZDI3YTYxCi01ODE0MGMyY2RiMWY0NGNhZWZkNmI2MjlmYTY2MTQ0MGMzNjFkZGU3ODE3MTU0MDUyNDM2YTM2YmJjMWJmMzgyCi1lMzAyODU5NzljNDU2OGIxODA0MTc3NDBhMTcxNTA5NTJlM2ViNDA5MWY1ODMwODNkNzVhMDVhMmQ5MTAwOWRlCi00NmRhMzk2Nzk0ZGJiNTI4OGUyYTJlNjE5MWQzZjIyZTMzNWYwMjc1ZjMzZTlhZjIxNTRjZGRiY2M5OWIxNDljCi02ZDdhYWQ3ZmRlZGIyM2M4MDVmMDk3MjViNjBiNWVjNzdlOGFjOTk1M2EzNTc4YjIzYzYwMjNhMTk2ZjM1MzMzCi1hMzZmYWIyY2ExOTVlMzk3ZmM4MjMxODQzNGU5ZjI4NDRkMTdiYmRjMTc3OTg5ZmQ4YWY2MWRkYjQ2NTEyZDJjCi1mNWQ3ODIxOTQxYjE4YjdjMWYxYmUxNmRmNmU2YmVkNGExNjU1ZWRjYWY2MzAwZmE4NzY1ZTkwM2IwM2E5NWE3Ci0wYTdlNmQ1NTQ1N2Y0NTFhODE3N2UwZTljOWYzYWVjOGQxNzQ4NDNlM2E5OWVkNjk4Njg5MDE5ZTk2Y2I0NjgzCi1iYjI0YzcxZTIyZjQ4OTU2NTZhY2M2N2VjZDY3MTk2M2FiZWZmZWY1MzcyNGE2NDViOThlNWQyNjgwMjk3ZmU1Ci0yZDQzZGRmZGZkNTUzNmY3YzIzOWE1MDkyMDc2NTEyYTJhOTgyMWYxMjMzOGUzODhiZDUxMTVmZjRmNGQyYzAxCi1kNzQxZjgyMTg3NDM4MDgzODk4OGMxN2JkOTc1ZmMzODhhMjUzYzhjMDA2YzY3OTYzY2UzYzQ0MDRiYWEwNzUwCi1jNTY3NjBlMzY3YjU2NmVkMTI5OTExZWIwNTZiZWU0MmYxMmJlYzk5ODAxNzdmMWIzNzEzMDY4MDczY2YzNGMzCi03MGQ2ZWUyMDJjNDliNDI4MDlhZmQxZjg3ODZlMTRhNmM2Mzc5NGViMmRkZjQ5ZDVhMDZmMzRkZTIzMzU2MjYwCi05NmVhMjZkNTdiOTRhOTI4ZTUzMTIxNDdlY2M0MGJiYzZhMjA0YzRiM2VlOWQ0ZjQzNjFmOGRmOWUxYzFhZTY4Ci1lZjYwZmJlYjk5MzM5ODQyZTY1MjQ3OTM2MmIxOWQzM2RlMDgwZjk2MjViNWMxNjdiZjJiMTE3NzU5MjliMTJjCi1mYTllOWE4OWNmODRmMjQ5YTEwNzhmNTU4NDQyNWUyYWQ4YWM4MmFkYzI5ODg2N2ViZWExZWM2YzA0MjhmZGM1Ci0wMWRjY2RlMzllNWZjMTQ3OTU5ZWEyNTQyMTcxNTNjMGI1NTBlZjk2YzIyOTY2NGMyMjI4NmE3ODI3ZWJiZjE1Ci1jN2ZjZGM1N2RiYjU5MTRiYjA0NjBiNmUwYzBmNThjOThiMjY0OTI1ZDk5OTZkOWUwZDMxZmI3MGU2NmViOWU0Ci1kOTI4MDE1ZjJjMTJhY2RiN2Q3N2E2NjQwOGYyNzY3YzA1ZjkzMjkyZmFlNDU0OTJlNWRjZWEzMzdjYmFiMzQ2Ci1kYTgyYzkwNWRkYjAxNmJiYTVkMzFlNzQwYjgxM2MzZDcwOWQ3OGQ3YWM1MDMyNmY5MGQyZTRhZjRjMWRkODkzCi1lMjZmOTc2N2RiNDM3YjUyYTc1OGQ2MjM3ZTUyYzRhMmE3MTYyNGQyYjFmNzlkYmU4M2I2Yjc4MzlkZWI0MTNiCi1mMzRiOTFiM2RmYmM4OGI3YjBiNzhhYjU3OTU5NGFjM2Q1NzQ3MTA3NGY3OGU1OWE2NGQ3NWI0ZTZlZDNjZjIyCi0zM2Y2ZWJjODZlMjg5NDAyZGVhMzkwN2IwYTI0MDYxODgyNDZlOGU0NDA1NGY4MTg1NGRhZTBmZWRhZWY4OTUyCi1jMDVjOGY1YzQ1OTE2NzMxMDJhMGYyNGY3ZGVlYTdlMTllMjc4NjNhMjdjMDBiNTEwNjkwYjMzMTQxM2RmODM5Ci01YWU1YTM3ZjhjNmIyNTA4MjA3M2JjZWRlN2M4ZWNkYmJiYTJjMDk0NjdhZmNlYmI0OGY0YTRlMjVjYjA2OWMyCi1iN2FjYzI2NWY5ODg5NTVhNzliYTk1YjNmNGQ4YzZjZjk0MTY0OTQxNzIzNjAxOTIzNDA5ZTlkODFiYThhZWVhCi02NGU4ZjFmMDk3OTQ3NzlhMTI2MjAyMGJjMzAxYjE5NjZhNzg5ZmEyZjM3ZDc1MjFkYjUzNmMwYzhkYTM2YjdkCi05MDYzOThhOGE0MTIzMGNkYTk3NTA4OGZhNWE2MDcwZDg4ODgyZGQ4ZGVlN2FmNjk2ZWY1YmEyYzVhNTI1ZDYxCi1kMzVhNjgzNDkwN2M0ODQ2Y2ZjNjliMTdlZGY3N2M1OGU1MDFhMDYwMGEwNGFiNGIzNmQ5MDA3YWM1NGNjZmI1Ci0xNGE0NzE5M2VkMDFkNGZkNWUzYzhjZjA0YjNlMzhjNDg5NWRlM2VlZTE0ZGZiZTYzNTFiYmJlYTY1MzAwNDZmCi04OWU5MTNkMDIyYzBjYWZlNTI4YTMzYzRlODRkNDY1ZmU2ZmIwMzFiNDhkOTA0YzUxMjBkNDUyYTZjMWZkZmI5Ci0wOGUyNDJhMDVkMDE1YTlhYjI1MzZkYmFkZjBmZmQwMTkwZDM1NWVkY2QzMTc0Y2ZkZGEwOTc0ZTJhMzNjYmZiCi0yYTNkNTU3ZWQyZjZmMjg0Y2IzYzk5MGMzMDcxYjdlZmM2NzhhNWQyNzUxOGVjMTkxMmNiYWE4OTBkZDZiYmM4Ci04MjRlYjFlN2FjNjEyN2E2N2U2ODQyOGZmZDY3ZTY1MGZkNDRjOWVjNDQ4YTMwOTA1NmNlNDVlNGE0YTJiNzY5Ci04MTgzYWM0MTg5ODFmNjE3ZGM0NjlhNTY2ZTcxM2FlZGNlMmJiYzdjZGRkZjFmN2FmZmM2ZDExZTk0NzU3MTMwCi1jNGVjN2I1NWRiYTczNTZiMjFlNTI2N2M1ZWQ5OWY0MjdhMTlkYWY0NzZlNDg5OTNlODU2Yzg1MmQzNWNhMWJiCi1iMzJkNTljZTY4OGVkMTg0ZmE5ZWExNjIyYzMwNmNkNzg4ZDYzNzJjNWI0YTk0YjAwMWYxOThlMzMyMDliYjU5Ci00NmFmMWVmN2IwNjZkMDQ5ODI1YmI3ODMxOGEzOGNhMjNlYzlhOTNiYzRiNGIxMjgwNmMxYTBlNWJlMTc5ZTNkCi0wYzBlNWJkYTY1NGU1MDZlNzRlMGVmMWE4YjEyYzE4YmMzZjA0MWQ1ZTYxYThmMDM0MzZmMTQ2ZTRkYWFlM2I5Ci02YjhjN2FlMTM5ZjQyZThkY2Y3NzJjYjU3NDIxMDRhYWY3NzZmM2RkMTliYWQ5MjBkZjc3YjQyYWFjNjU0ZDMyCi0yZGUzNzc5YzQyNjM5YjUwMDU5ZDEzYjgxYzM5MDRkZjc2YTBhYjQ3MDQ2YTAxMzIzNzhmOTIwMTM1OWY3MWM4Ci0xMmViNDgzN2JjYmYzZjE0OThiZjhjN2IyMjk4ZTZiMmU1MjhmOTg5OGRkZmFmNzViNTM1OGE3M2E2N2U2MzA3Ci03MDdmYjEzYjIzNjBmZmRjNTY1OWVkOGU3MGVjYmFiNzExZDg5ZjhjNjU1ODYyMmQ2NzczN2IxMTA4YWQ1MTM5Ci1iMTI2YTZjN2JlOGIyNTcwOWZhN2NjMmE2MjVhMDc5NmI3ZDA4YjExZjA5OGVkYjgwZjhhYTA4YTU2NjhhZTkxCi00ZmYxYzQ3MGRiY2M3Nzc1YTczZmJkODU3Y2RiOWE1ZDBjMTIyZDQ3NjVjYWE4ZDlkMzU1MTQzOTBjOWIzMzlhCi1jMDRhNzgzNDJlMTg2ZTVjNDlkYmE0Y2Q5YWIxNjViNGMxMzllNzZiODhjODA3Y2M0YjVkYjdiNTA2M2MyZjgxCi0xNjcyMTY3MDQ5N2EwMTgzYzY0M2M1YTcwYWIyNDA1ZDVkOGI2NzczYTRhMmQzOWIzY2QwZDc2M2MxMmVjMjk2Ci05YjNjM2FiOTE2NjU2ZmNjYTVkNzE1ZTdkYWM3OTY5MzdiMmI2ZDRhZGIyNTFmYjc5YjE4M2U2ZWFiMjM3OTZhCi0wYmQwYmY1YmNhYjAzNTI5NDY3YTI2NTc4MTcxNmIwMTg2NTczYjg2MmIyYTIwNTdjNDI3ZDg1ZDdiNTQ3YzdhCi05ZTdmZGY3YTY3NDU4N2RmNzA5ZmZkMGE2M2QwODUyZWEwZDAyYzEzZTgwMzg3NjJkZTgyMzYyNzM5ZGU5ZWRlCi0wZGI0Mjk2NDIxZDQ2MmQ4Mjg2ZTIxNTJhYTY3Mjk4YzlmZjUxMWU4ZGUxYTI2MDg5ZDM4M2JkYmJmMjcwNjZiCi1mMzIyNzM4Y2QyY2YxOThiZGVmZTU2NmNlZDE4MDhkYWZjMDE1YzhhZTk3MjExNzc3NjU5NGU5YzUwNmEzMjIzCi1kNGNlZDQ5NWQ2MjI5YzliZWMxN2M0NzA3MTQxNWY4MDQ4MmY5ZWNhYWViYTZhMTM1ZDIxNzMyNTRkZGU2YmUzCi1mMGNlOWE3YTgxZWMyZTlhZjRhZGQ4NTViMDgzMDlkMzRlNzgwYWRmMGY3YzkwMjlkMmNlMGQ1ZjgwN2VmMGVlCi01MzEyMTc0NTBjODJiN2YzNjQzNDU2NzcyNTQ5YWNjMmJhNmE1OTM4YzUxN2ZkNzc1MTE0ZWQ0NGVjNjlhNDVmCi1kOTExMGM5NjllZGQ5ZTZmOGI0YmZiOTUzYWVkNzlhMWRhZjQ3YzcyMzg4NzFlNGQ1MzcxMDBjNGQ4OTgxZDgyCi1hMjM0NGViN2RmNWJhZWJhZDI4ZTM0ODcwZDUyZDk3YTY2ZGZjNzU3NDBjZGE2YjQwM2MxOTY0YzBmZWIwMzRkCi1kM2U1YzhiNGEzN2FjYjlmNTcxOGY3YjZhM2QyNjc2OTRkZjhiYWFhYmQzODE1NGQxNmMxNjJlYmU0M2I0NzNmCi1lYzFmMDYwODQ2ZWU4NDAyZDY3OTQyZWUwODBkYWM5YjE4ZWI4YjA5ZDM4NGFjMjRmODVkMjg3ZWEzZTJjNTlhCi0wZjJjMWQ2YmFkMzZlMjYyZTAzMWFjZDM5OWEyYjlhNzk0MDkwOGQ2NWYxNDJmYjIwOTQxNmU4OTFhNmFiZWViCi0zODllMmRmMDAyNDM2ZDQzZmExMTYxYjcxMzgyZDE4NDI3ODhhZjFhOWU2ZjM5ZWQ1NmU4YmY2Mzk5MWZhNzkwCi1hNTJjZTMxMmFhZWRlOTBkZjFiZTU3ZTNjMTE1MWRkMDM1MGZmZTdlNDc2Y2FjNWYzNGNmODUwNWJjYmQyNWYzCi0yOWFlZWQzYTUyYmZlMWYxMDM2NmRmYzRhMTVmZTIxMmIxY2M5ZGE3NmM4MjcyZDdjZTg1YzI5MzBkNzk3YjgyCi00YTY3ZGU1NWM1MGQ0NWNiMzY0MGRiMmE3OWVjYjY0N2EyZmQyZDk0ODExNGVlYTliYWQ2MzEyMzE5ZjhkYjVhCi1hMjlkNjBiMjI0MzlkNDU3NjA3NTE5MDRmNWRlNWQ4YzVjOWQwMjExYWM5ZDMwYjk0NTlkZDA1ZWVlYTI0MGYwCi05N2YwYzIzOTA2OGM1MTRiODIxMzYwOTAxNGU2YmM1MDYzM2QwZWNmNzc0YzIxMGFlZTdjNzVhNWJhYzI0ZTYyCi04MTMxODFlNGQwNDBhZDFiZDRiZDRlYzdiOTliOGEzN2FiZDY5NGNiNjc0ODNkMWM1ZGQ1YzE3ZjU0ZWE3ZjIwCi01MGQwZWE4Y2UxY2JmYTUzOTVlNjJlMTBjNWQxN2E0MjNhYzc2YmZiYTI1YTM4ZmQ0NzRiNWI0MTE3Y2NmY2NkCi0zMGEyZmZhNDg0YWY0MjkxNjhiMWI1Njc5YjY3NTQyNzU1ZTk4OWIzOTM4N2ZjZDliMWQ4ZjhiYTMxM2E3NThjCi01ODY0MWYzNGNjYmM4ZjI1NTZhZDFiMTdjMzNmNjAxZWE3NmFjNzVlZTZiNjgxYWVmMTJjMDcxMmExNGU3YjhlCi1hOGE1YmQzMTYyMjNkNTE0MmU4YjUzYTZmODFhOGE2MDhhM2RjMzJmMjBjNWU0MTdhNmFmZjBmNzI1ZGQ3ODY3Ci00MjlmZGNkYzE2YTIyZWY2MTEyZmRmYzUyODJjNjFhMWFhOWIxMzRjMWI0MjBkZTdiMzU5YmU4MzczY2YzNzE2Ci1kN2IzYWU4MzJlYzE1ZTMwNWZmNmM4ZTlkNDE5N2Y4YjAxNTBiMzBlMWI5ZTdmMTUyNzViNGI3YTY1ZGZjNjExCi05N2MwZTVmOTE1NjFmM2U2MjAzOTUwZWRmZDZjZWEyMGQwNjQ5MDcxNDQyYjI5MTZlYmNlNWY0ZDNkYTczOTE0Ci01YTJiZmU2ZDA1NTU4MGFmMTM0YjdkZGRiYjliYWY5NDc3NDU0ZWVlOGFiYzdiMzNlZWE1MDAxMDJlMzk1MjEyCi03OGQwOGMwOGFlNDU1YmMwZmM1YmY1YTBhNTc3ZTVmNWZjNzE0OTBhZGQ1YTYyM2NjY2ExMzRiNjJjMTlkM2E2Ci00MDE5NDE1ZWNlZTAxNjg2MjFiZTJiNDg1NmVmM2IzOTQ0YzBkYjlhZWY3ZDNlOTMzYTAzNDE4NDkzNGJmZDRlCi0zZmUyMWQ0ZDI2MjVlNjQ2NGU5ZmY5Y2MyNWU3OTNlYjdiODcwMWQzZmEwN2ZmOWEzMDIwZjc2ZDY2OGQwODNmCi01OWM2ZjY3NTExNzlkNjBlYjE3YjljNGUzNWYzODE1YWE1ZWQzNzkzYTIwMzBkMzE3ZjE2MTAyMTVmYTkyMGE1Ci01ZmYyOWE2N2U4ZTZmMTg2ZjAwYjVjZTE2NDY3N2ViMTk2MWVlZWUzNWI1YTc4OTFkNDI5Njk2N2E5ZDA5NmJjCi03NmIwZDA3MmVhYmFiN2VhNzU4ZGE4OWZiZGMyNWI4MjYxZDlmYTA4MDk5YjZlODQ0OTRmZTAzNGMzZWRkNWYwCi1jNDVlNjdmZmU1ODhiMjUzMmVmYjNkZDFjMzRiZTljZTI5OTcxMmVhYzBlNGM0Y2JlZTZmMzBlOTU4YzlkZWEwCi0xNWM1YzRmZWY3Y2Q0NDBlYTk4MmY5MWMwNzkyODQ2MzgwN2ZlMDdmMjdlZjYxYTVkZWVmYTQ3ODc5ODQ3ODM1Ci1kNGU1MGFhMWRkMGFkMmIzZDAxMDY5Y2M3YjQ3NDFiM2Y2ODAxMzFmN2Q1Y2FmYzZiMzk3OGMzYzFkNjA4YWM5Ci1kMjQzNDIwOTI3NDY2MjhjYjcxZmEwMWUzYzY3NWYxNDQ2M2Y5ZWRkNGMzMzlhZGE0MWJhNGI2YTBmYWE1MTE3Ci0yMDQ0NjNiYzdiOTRkMDFlZGMxYjNkNTc4MTg5OGM4NTUxNjYxN2YyOWI0ZGNlMmQzMmMyNjg2ZGRiZmRiODM4Ci1mNjdiMDk3YmU2MDBmNmFlZWZiNmVjYTVmNzI5YjQ1YmUzMDcyMzJmOTI3MzFjMTBjMzMzMDY3MmM5NTg0MTQxCi03MTkyZTYyYTBlYmFlODI4ZmFkZDc3YmZjMmVjZGMxZTU2MmRhZjU2NjAzNTRlMGVkZDViNzE3N2JkOGU5ZDI0Ci1mNzdlNTI2ZTY0OTA0NGNmZDQ5NjMzZDQ4Y2VhNjRkZTcxNGU1OTQzOGFkOTgwZTBiMWZmZDUxZWUxOTY5MmVkCi02NjVlMmZmMzMyYmI1NGJkYmY3NTMxNmM0YjFhMzljNTM4MzEyZmQ2NDllOGM0NjI5OTRkYzhmMTRiZjA1NmZmCi0wODA0ZGU3NjQ3NGQwZWUwODRlMzYzYzhiNzA4MWIxYzA4ZTI1MmUwNWU0OTY3OWU2YzdhYzgxZjQyZTkzNzJkCi1lNWFmNjRmNTljNGZiNjJmM2UyZTdiMTZmZjUzYmJiYzAwNmUzZDliMGYyOTQzNGRiNWE2MzIxMDk0NDA1M2RhCi1hYjU2YjEwNzVhMGMzODMyMjIwNzUyZDEwNGZhMTc3MGQzYWNmYmMzMTcwNGExYjc4NTJjMDc3MDU4ZjYxNmUwCi1hNDM3M2MxYzkyYzdiNjA1NjY2OTE1NzM1MDJlOWE5MmQ1ODNhMzE2M2JmMzFmYzEwMGM5MmU2NDA1ZWU0ZDU0Ci0wOWQyM2E4MzIyNWJmNmQxZGUyYzdiZWFkMDExYWQ2NDU0N2Q2ODM1YWM5YTczNzgwMzNjODU1OTJhMGMzNDk3Ci1hMDNjMTYxOTBlYmRhYmI3OTJjYTBiZjgwM2RjYmMzYmRmMGY3YTU3MWFhZTAwZjU5NmVlMDFlYjQ3NmJhZDk3Ci0zYTI3YTIxOWFhZmNjMGZhMjQ1YzY3MzFhMmU4ZTU2MWM2M2I3YmMzMTQ3Yjk0MzNhODIwM2ZkZGI3MTM4YjBjCi0xNjExYzdlNjIzNzVmMmExMTRmN2JmYWIzNmNiMWE5NGI5ZTEwY2E2MzgzM2FiMjQ1YWY1OTUyMTc3NzliYzdmCi1kMTJlNjhhNjU5MTllY2E0ZmFlNzJmNzU1NjY5NTgwYWIwMDA5NDUyYmYwODZlYTgzNWY5MWEwZDViMzg0YjQwCi04MmJkNTE1ZjAwNjg2NWJiZWUyYzUwZGI0M2I0NDU3YTc5MzY5MzgwNmI4NmY2OGEyYjI0MTlmYzNlOTM3YTcyCi1jNmY0MTRkZTE0OGQyYTYyYTcxZWU5ZmNhYjcxMGQ2ZGMwOGFkNmM0YWM0NDMzNjVlN2E3ODg0M2Y4MGNkNzY5Ci1jNTZlZmVjYzJkNjM0ODdiNWZjZWFkMWFhYWY5NDgxYTczNjE3MjMzODhmNWI1MWMyZDljZWE5MDQ4NmNiOWY5Ci03OWY2ZjVlZTcxOGQ0YTQ5ZWQ5MWNiMDkxYWRjYmQwZTdiM2FkOTYzMzY4YzljZGU4Nzc2NjZhNzQyY2Y1MDczCi1hYWY3OTQyOGIzMDk1Zjk4OWZjMWZhNmY1YWIxZDcyNGQ5MmMzM2MxMzI1YzA1YTM5NDIzYjhhODNiYmE5MzU5Ci05Nzc5M2ZkYTI4MDc0MGFlYjZiZTMxOTNiZTVmNGZlZWNhMmE4ZjI4ZWZhOWM4ZTAxNmYwZmM4N2M4ZjMzOTJkCi01NzE1YjliOWE3YWEzYzYxYWM4NDQ2MWUyYzMyMjAzNzI1NjhhYWVkODUxZjFjYzQwNDgxZTMyNjE5N2VjYWIxCi1mM2NkNzkyZmJlYjI3YTU4YTVmODg5YTVmNjMyMTQ3MzE0OGM2ZDMxMWNhODliZTk2MDM5YWM5NDIzNzAwZDg3Ci1hYjBkN2U4Yjg5NzE3ZDFhNjJjYTE0ZTAxZjUxYmQ3NzgzMmJiNmRiZjc2YjIwMWEwNGQyMjI4NTIwNTBjYzVjCi1jNmE0OTk2Nzg5YTBiZmQ2Y2UzNjQ1OTIzMDAyODJmMTAyZTY2ZjRhZTllNTBkNjBkODg2Y2FjYjA5OWRmOTYwCi1jNDJlMjIxMzAxN2M1NjdmMjczMjZlNjc3YmJkMDRhMjM5NjMxOTUwYjU2NmViMzllNGY2NzVkMmU5ODlmNTZmCi03NGRhM2EwNDY5ZDk4OGVhMDEyMmVjYzM2NzBkNDU4YWQ4MmJjZjdhZDA0YmYzY2E5YjAwZDc2ZWU1NjlmOThiCi1hMzc1Mjg1YTFhYmJmZjI1M2I4ZjE3OWY3MWY0OTYyODYzMzBlMzY0MDQ5YzcyZWNhZDRkODJhOTMzYWYwMTg5Ci0wM2RlNWU0YWJjZmM2Mzc4MDMxNjdlNTY5MTFmODI2NzM1YTdjNDFlNzkzNmY0YmVhMTQ4Mzk3YmNmYjE4Y2RhCi1mYjAzMTgyZWQ3YzUxMWFhOWRlMGM2ZTZjODBiMjRjYjUzNWYwM2VlMTZiYmNiNTE0ZDY1Y2E5YWMyZWYxNWMxCi1hYTE4MjU3NTlmYzRlY2FmYzdjMGQ5NDAxZjEzOWIzZjIwZWU5MTU5NTUyNjg1NzhhOTMzYjE4NGE4NmYyMDE3Ci0wM2NiZjRkYjc5YmUxOGMwOWM4Y2IwN2Q4NTczOWI4NjUzYWQzN2I4YzBiNjQ3MTYxZTVjYWM3NDZiM2MwYjk0Ci0yYWUyYTA1NDBmMzhkYmVlMTIyY2FkMGNmNzM5ZWYxYjQ5YjZkYmJkNWQwOGM5N2MwNGRjYTMzMDMwZjE4NzE4Ci01ODMzMzdhMDE1Mzk1ZTFmYTkzMmRmMDMyOGM3ZGRkOTU0NmI3ODEyYmEwNmQ4MmEzNWY4MTEwZDU1ZmEzNzdkCi1mYTY4ODBmNTI2NDU4OTBkNTg0NzhlNGVlM2I3MmYwOGIyZDcxMTNiMjQ1MzcyOWIzN2U0ZmZmYWQxM2M1ZjYyCi0wNmIzYzc2N2E0NWM4MGJkNDc5ZDFlMjRkZjY2MGU0NmM4M2M0ODE2NmZjY2VjMTNiOWNjNGU2MmE2YWFhODEzCi03YzQyNDg4NWY4M2Q3NjQ3YjgwODQ5YzBhNzdiZWQ1NjJmMTM0MDM0Y2RhOWZkNmU4ZDdkZWM5ZTQzZjBjMDE4Ci05Mjg3ZGU3NTk2NzZmMjAwMDU1NTZjZWRjNjdjMzE1MDlhOGJmNTZhNWM5NzJiNWQyNDdmMjFkOGI2YTU4OTUzCi03ZDkyMTAxODQxMTY2ZDc3ODFkNGQ4MGNkYzM1Y2EzODJkOGMyZGFjM2VhM2EzNGY5M2RjZTBmZjhjNzZlZjEyCi0zOTBkNWQ1N2Q4OGYzYmMwMGQ0NjUxM2YwMzU4YzQzYTIyYzQxM2Q5YTZiYTZiM2UxMzkxMzQ3NGI5ZTUzYmY1Ci0zMTEzNmE1ZWRmOTE5Mjk2NWFjYTk4ZTA2MzE2YzA1ZmQzZDZlODhmZTA5Y2MwOGUzMjdlZDAyN2I4MWViMTQ2Ci02M2UzMDczZWE1ZDFkNTliNzQxNDljNWY1MjQyZDNjYjI1M2MzNmE4NGNjODM3ZDc2YjJiYTM2MTA0YWVmMGQ4Ci1mOWY0NDA0ZDYzYzQyZjNkNjM1ZGM5MTk1ZWE1ODJiNTg5Y2I1YjU0YWIwMWFmOWFlNTNmM2VjOTU5OTJjMDlmCi1hNWJmZTg2ZTZlZjY5NDhiYzM4NzczMGE5Y2ZmMGNkZDM2NTY1MGFlYWE1ZTFkNTJkOGY4OGRkNDlkMzZlNmYwCi03ODZjN2Y0ZWY4YzJhNWEyNDJlODRjZmQ0ZGM1MGFkZmVhMGMyYWMyNzgzOTY5OWI5MmZhOGZlYjY0MzZmMmFhCi1kMDI3MTA3NzcwODM3MjNjYTdlNDgxZjgzYjYzN2YxOWZmYjc1MTFkZTIyM2EwYTI2MTMyNDE4OWVkYjM4ZDg4Ci02ZmY1Y2IxMzU2ZThkNTY3YWZlNzZmOTZjYjcyZjg4MDE2ZTM5ZTk5YWY2YWFkNDk5YWM2MGM4YTMyMDVmMjUzCi04MmMwMzEyZTFmMmI2ZWU3YjM3ZDE3OGJkNGU2NzU1MDI3NmE3NDIxYjRmNTE0ZmQyOTNhZDMyYmIxMTIxMjM0Ci1iZmY5M2QyMjk3ZGQzMmRmZGQ3ZTdiYTkxYzA1NDRmNzlkZmVhOTY1ZjRmNjc0OTRmM2RkZDk3ZDc4ODFmY2ZiCi0yMGVkNzFmNmI1Y2QyN2IxMmQwNDA5OGE5MjkzZTI3MzE0ODU5MGZiYjY1ZjZmYmE2M2U3YmNmMTRkZmU2ZjBiCi01MWY4NzBiZTIwMTc0Zjk5MTMyOWE1ZWYzZDNjOWZjZTIwNjc5OWEwMWNhMTAyZWU3OTk5YzJhOTdhMTllNzk2Ci1iYjVmODg5MjJiNzZmOTIyZDMwMmRkODMzZWM1MzIwMjJiMTNlYzU3M2IzNzVjZjc1ZTQ5NzE4YjIyNzhmMmIyCi00Y2U5ODY1ZjIwOTAyZDYzNTg0NDBlZmM5ZWFiNmUwZTA2OWFjN2MxOTNjODhhMDQ0Y2YzM2Y2YTM5Mzg4ZjZhCi0yOTZmNDJjNjM3NTMzY2M1MDNhZGZjNzFjNWY4OThjNDA4YTdlNTQ3OTg2OGViZDI5YzllZDAyOTM5ZmZkNDlhCi0yODEyYmFhMzU1YmU0Mjk4NThlMGM2YWFjNjA4MTdkNjg0Nzc4YjcxZmI5YTczZTdhYzRmY2IwNzhiYjFhNzVhCi1iNDI1ZWEwOWFkODU4NWFiM2ZhZDc5NDI5MzIxYThmOTZlMmUxZjAyYWQ3MGUyZmRiZWVlNjI1YmI0MzRiMGJlCi1mOGViOTU3ZjgxN2M1Njk5YzcyOTNlNDdkYWE0ZWFkNmQ0N2YwMGZiYjZjODY3NGVmMWY3NzI5Y2RiMTk3NDlhCi1jYTljZDM5OWE0YWJjZjI4ZmY3MWVkZWNlY2IyYTk1NWZmYmU5ZWJmNGJkYWI1NjI1NmU3Y2Q2NjMwNGVkNGFiCi0xYjNmZGRmNjQzMTI5NmFhNjQxYTg3OTVhNDAwNmEwNDlmZDNiMzUwNzRhODY1YzkwMTYzNmI3MDYxOWVjMjZkCi1hYWFhOGM4YzkwNjA5MzgzMzcxNDQyMDlmM2UzZGUwMWU5MjI5M2NhODk1ODNjYmI0YzJlZGVjMDc0YmI0YzA1Ci0xNTEzMGMzZWJmZDc4ZGM2ODdmMGFkMDk4MWMwZDI3ZmNhZWIyOGY0NzAxOTNjYTEzZDk4Mjc3ZGJmY2ZiZjM4Ci1mODM1M2RiZDA0MzgwYWJlZjcxNzZiMGI0MTk5ZDczMTllYmZkODhlY2UyMTliYTZlZGVjNTlmZDE1ODk4N2U4Ci05YWRjMDM1YjhmYjIxNDFiZTBlMGYyNWQ1NmUwNzdlNTk5MmU0Zjk1NjQwYWJjYTdhZWFjM2Q5MjliZTAyZDQwCi05YTg2ZGJjYzA0MzYzN2M1ZTBmMWE1YTEyNTc5ZTU3YjA0MmIzODZiZTk2YzlhOGIzYzRlNzljOGRkMjhhNTJiCi1hMTE1OTcyODc4NWE3NWYyZTU3OWI4NjY5YTM2YTlmOWU3ODA3ZmY5ZDVhYTBkODY1MjYwOWE0NzI2NGEyMDAzCi1mZDIwMmJjOGZlOWNmODBlMmVmMDVlYTVlNWZiYWU2NzZhNzdiYmRjNDMwOGFiOTJlYjBkZDlhOTYwZjQ4NjViCi04MzA1ZWVmNDdhYmMyMzUzMjg3ZjUyYzc2NmVhMWMxYjg2ZmRhY2YwOTg2ZTU2YTg3NDYyYWM4MjBlNjEwNTFlCi03ZjIyY2Q4ZWE3ZGNjNzgzOGE0NWEwOGVhM2ZlYzEwNWQ4MGZlNWVlNWU4NzczMmJmYzJlOWQ2NjRhN2FiNDNiCi0wNTMyMTU1N2Q2OWNlZWQ2YjY3OTc5N2E2N2EwYzM4YjlkMTAxYmJlODcwZDc0NjU2ODMyNWM1MmQ0Y2EyNTViCi1iMjNmOTY3MmNlMmI0ZTNmZTk0NGY1ZGJjMzg4ZTU3NWFiZDg5N2Q5NjlhYzJhODE5MTVlM2ZlYzNkNzQwOWVkCi0xNGRlMWU0Y2Y3NzM3YjZlNDZmNmM3MTE0MmRiMDZhNzk5YTcyMDg1MzljNjQ5MjQ0Y2U3M2E1OGYyMjQ3ZTgxCi00ZjI0MWFiYTc0ZDZhZTU5M2Q0N2MyMjcxMzdjY2RkY2YxZjUyM2E3MzBhMjM0YzkxYWMzYWU4YTQ1NmNhZDFlCi05MWE5NDgwYzQzOGIwNDdiZTQwYmIyZTQwMzhmOGViYzM0ZWNjM2E4MDM3NDU0YjczNDJjMzE3ODcxZmMxZDk3Ci00MmYyNmUzZDk1NmRhNzY3OWEwNzJjYWI5NmIyN2ZiMmRkZjQ4MGQyZjQwZWQ4OGIyZTViMGI4Mjg5MmM4MzE0Ci1jZWM5YmRjMTI0MzMxNTk3MTQ4OTFiODU5MWEwNTFjZjJjY2U3NTgwYWY3NGQ1MDk2ZjUzYTY1MzQ3NDg4YmNiCi05NDhmYjAyOGYzMTA1NzVkMzQyOTEyM2ViZWNkOWIwOWQ4M2YzMGFiOGM4YWI2NWQ0OWQ2OTFmYWMyN2UzNjEyCi02NmVhMDg2MzRmNGM3ZDNhNjQ4ZWMwNjhjMmNmMzFmMTE2OTUxOTM0ODY0ZGNhMjc1NWRhYWNiNmQyMjgwM2YwCi05NDg4MTE3ZWY2NmU5YjEyNjYzZGE5ZDAwYTNlYjAyODBiYTQxMmU0YjZmNjM5N2VlNzgwMGYyNTBmYmZhMDIzCi0zMTYyYWRkY2NhNGRjMjMxOTBhNTIzOTdjZGEzMjg1MjkxODQyYTJiMjY5YzRlMDdmMTdhMDAzNWZjYmU3ODViCi02YTU3MGU0Yjc1NjkyNjU4ZWQ0N2I2ZGJmMjk3YWRmMWIzYjE2NDc0MGQxZTg1MWYwOGRlY2E5YzA1YTI2M2E4Ci0zMzY0YzU0NGNlY2U3MDZlNzdhMzJmNmQ1ZDEwZjhkNDE3MGQ1MjQ2ZDkyYzJjOWZhZTQ1N2UwZjVlNGVjZDRkCi0wOGI0ZWRmZDQyYTE3OTFjY2E0MTA3OGQ1ZTUyMDgwNzgxNzIwNjE5M2Q4YTY0OWViMzliNjRjODBlMTI2ZmViCi0yNDBlMTc4NGRhM2M2NjM3ODE5NjgyODEwNGM0OWU1ZmI4NjQ3NWE4MGMyMWRlNzFlMGFhMzZhYzVlNTI5YWRlCi00MjdjMDNjMjIzNmRiMGRlY2E5OWM3YzQ4NmZmNDYzYTcyNzIzZWZiNTE5MjYzOTE2ZTczYzI1ZGE2MjVkMGZiCi1lNDUyNThhZDJhYmYzNDQ1YjcyY2JmM2U3ZTY0ZDUwNzE5OGY2NjZlZGVjMDAyZTIzM2NjMGFmNmE4YzEwOTVjCi0zY2QyMzJlMmVjNTBiMmVkZTNlMDliNjFlMjU5OTZiNGE2NGMwZWVjOWQ1NTAyNWIxZjQ3ZTUzZTBiMTI4YmVmCi1hMzQ2NDZiNGUyYzEzNjk5ZDExMmM5NTg1OTAwNThlNmI2MDZjYmQ5NzhjYmIwZWY2OWVlZTM1MGJiZjcxZmYxCi04MjEzYTQyZDEzNWU3N2UyYzUzYTgxMjFhYTNkZDFlOTAzZGMwZTk2MTgxMGQxMDNiZDcwYTJiNDQ4ZjI5ZWM1Ci1jM2Q5MDdkNzI0M2Q3NmM2YWUwNGMyMmE4ZmJjNmMxYTA1ZjliOWVjOTdjYmIwZTc2OTI4ZjRhYTI2YzkxM2UwCi0zZjhjMzcxZWZiNjFmMzcwNzUxZWVhNmFmMjVhM2RmNGFiM2RhM2U0YWEyNjNjMjQ3NzM0M2U0YjE5OTE1MjE5Ci1jNGM1MmNmNDNkYmYzNzNjMzE2YjgwNjE5ZjQ3OWQ5YjUzMWU2MmYyNmVmOWZjNmRhMTNlOWNmMGJjZTc0ZDEzCi1jMjgzMmYxYzlkOTQzMjQzN2QyNTNkY2NmNzNjZDY5OTM0MjUyMWEzY2ZlOGY4NWNjZGNkMjNlOWIyNDBjOTYxCi1mY2UxNWVmNzdmYWQ4NDM4Njc0YjU1ZGE2MzhkZjI0OTJiMjlmYzFhMDAzODU5ZjM4MmE3NzYyNjBhZTUwNjdmCi05M2RkMTc2MTgxYzEwYzRhNDVlOGYyMzdjNWM5NzgxZTAxZDJlMWUwODkwZTFhNmU3NWUyYmJmZGE0ZDI5NjEzCi1lZmRjZGZiMjEzMTdkNzcwZmE2YzFhYzM4MDBmMzI4YmRiODJiNDhiNzMyMGRkY2Y2NGFkZDIzMzc0OTcxYWYxCi01MDQ3MGZkMDAyYzAxZWY0MTJjNWJiNDk4NDczNzg0MGRhNWM5ZTBlNGQ0YjJiNzc0NzA1NmEzODY1YWY2ZGI0Ci1mNGI5Y2Q4NGQyN2RkMmU0NWFhMGQ5ZjMyZDBjZjU4YTVmMWJhYTM3NDM1OTIyM2NmZGQwN2MxODAxNzY2MGEyCi05MjI3NDA0ZWVmMGFiYmQwZTI5YmQ4Njk4NzUyZTg1NDQ4YTVjM2NmNTk2ZGM4MDVhODdmZjkwM2ZmODkwZTQ4Ci1iNzk3MTc2NGZjZDhmOTIxZWVmY2M1NWIyZDIwY2Q1OTA4YTZmYTM1ZDU2YmVhOTZhMzlhYjUyMWQ5ODVjNTBjCi00ZTAyMTNiMzAzMjVkMjk1YTAwZDMyZDk3ZTk1NjQ2ODY3MTIyZGJlZjM3YTNjODY2ZmQ3MmUyZjI5ZWQ4NzU4Ci1hMzYyYTRmMTc4NzVjYmE4YmUyM2QwNGEzNTcxNGQ0YzI3YzQ0MTcwMzlmYzhiY2QyNTM2NWM4YTRiYjQxODE1Ci1jZTFmNzQ5NDlkNmI2YWE1OGZlZjBjNGNiYjhkNTRjZTkyZDY1ZDBhNjVmMTNhYzYwNjNkZTRhNTViYTU1NjFkCi01MDlmMmZlYzE1NWIyMTgxYTE2OWVjZjE0ZjFmYWI1ODc1NjlmMjYwYzBjYWNkZWQ4MDIxZWQ4ZDdjYWU1YWQxCi0zMzJmMTA2MWUxNjY2ODZiNDEyNzc0OTU1OTdjMTZlNzI4ZDZhOGZmNDlmODI0ZGY1MDNhNjMzMjJiNDQyMTgyCi02NjVhMTI5MDBkZDQ4ZDEzNjEzNDI1NzVmZGQ1YzlkOWRkZDdiYzczYTkzN2IyYWM2MjU3MjU1NDE0MDI5YTY1Ci05MDAxMTk5ZTllMWYxNmNmM2NmODc2YmVlMDAwMzAyOTM1NDkzYWU5OTdlM2YxMTI0MjBkN2QzZjA2NzM5Yjc5Ci1lZGRjMWJmN2VjZmM1MzE2NTQ5ZDJmZjIyOGE0ZTI4YjUyMmQ2Y2ZhYWUzMTQ4YmVhMjc1NWE0NWJjMjdkZmM1Ci0xMjhhOWEzODc3N2NkM2IwN2Y5MWVkYWNlZGJhMjU2NWI1NTIxOGQ3ODkxZGE4NjMyNDNjZjY4ZTc4MDBiODJmCi0wMzQxNzQwYTFmNWRjNmRjZjAxMjVjZGE4NDQ4NjdmZTQ5NDUzMjZmMTNhOTU0NDMwNzUzYTI4ZWE4NDkxYmRkCi1jNTQ1ZTcxZTRkNTJjYWJjM2YwNWRjZTQzNDEwMWQzNmE2MjMyOGM1ZmU2YjVkZjM4NjRmOWY1YWVjMjJmMzk5Ci00M2Y3MmZlZDA4MWQzNzI0MzA2NDc3YTA2ZWI5YjZmY2M5ZmFlYjc3ZTYyZWU0ZTIwY2M1MTYwMGIxYmIwODFhCi0xYzVhMDBlMDY0ZDU3NTU4MzhiMjUxODA3YWU1N2M4NTY3NWNmMDRiNjlhNjZiZWYwYzE5YzM2NDk2OWQzNTQ3Ci01NWVmY2YzMWY4YWUzNDY1ODI0NjJlOTg2ZTNhMWQ2NTNjMjA1ZTVkNThkMjFkZTQ1NTM4MzJjODg1ZTU0M2JkCi0xMWVlYTJkM2MwOGY4ODMwMDA5NjZjOTkyODEyNTFmYmMyOTIwOTE3NzAwMDM3Mjc4ZDQ5MzRmMzQ0MWRkNTM1Ci1iZGQzYzUyMTExZWQwYjI4MmNhMjNjZmE5N2FiMjVjODcyNmFjYjEzZDUwNTk5MjQ1ZTUzMjQzMjU3MmMzNWFjCi1iOTM5MTY4NWQ5ZTFkZWVkMWY5NWZjYjE1MTU5NGNkNjNlNzk2OTFiNTk3MmJhMmMzYTBjMGEyZmZhZjNjOWZhCi01YWM0N2Q5MTc3YTY5MTc0MmU0NjM0ZGI2NjMxYzg2OTZkMGEzMGJjZTFkODZhNGZiNzM3YWI4NTI5NmVhNDc5Ci1mZTkwYzUxY2NlNTRkNjQwODdiZmM4MGFlNTZhYmI1ZDA0ZjU1MTZiZmZiNjgxZTZiMzlmNDgwNzY3ZjIxMjBlCi05N2QxZTg0ODhmMWY1NDBlMmViZjYzZWI3NDU5NjY3MGY1ODkyZjRjMzI3OTcxZjY5N2M3NTMwNzc4YzM2NzZmCi0yNzkyMjg5Y2IxMjQ4NjkzNWM0NDdkNGVhZjRhZmVjNjVmZTZjNjk2MjMwNjQ0OWUzM2ZiMTlmYjk4MDZmODdhCi04YjkxODc0ZGRmM2UzMTM4NDgxZmRjNzExZjA5NTRkNzNmMTFmYmEzOWVmZGViNTVlZDEzYjE2YjkzMjUyNWU5Ci05ZjNjODZhZTYwZjkwOTZlZmQ0OTY4NzU5ZGVmOGQ2MjlmZjI4MzhkZWNiZTRjNjg4MzNiYTBkNjRkMWQzMzMwCi1iODRjZmU4Y2ViMjNmNGI1ZDU1YWE1YTliNTFlZTU5NWFlZTBjZDY2OGIyMGM2ODdkNzdmZjgzYzgwM2FiOTk0Ci1jNzQzYjQzZDk4ODI4MzdjNDJhNThjZjcwNDQ5MGZkZGNiNTY0NmQ0OGNmZDJlMzA0NjRkNzEwYzE0NDA1MTNmCi00NDE3ZGZkNjZkMzllMGZhNmM1OTZlMTdkMDc5NjRlYmYyY2FlY2QwYTlmZDc4ZTAwMzU0MWJhNTM0NjhlNzE5Ci1iN2RhYzI2ODVjY2I5YjdkODU3YWZmMWQ0NDMyYTcyZjYxODI5MDEwOTI0NzgxZjVkMTVmZmNmOGQ1MDRlMzYxCi02Zjg2YzY2Mzg0NjlkYjRhZDI4MWQ4ZWMzNjU4NDhiNmY3YWUxMDQ3MTE0YTJjZDNjZjNkMWU0NmUwYjRmNDBlCi0xYThkM2UxZGYxYzFiNjc3NzAyZDdmYmQ1YTU5MjRmOTFjNzI2ZGUyZTM3YjQzNjI1MGViNzE2MTBkZDgyY2Q1Ci01YzA0OWZkMDQ0YjQ0MDc3ODRmZDgzMzg3ZWI2YTc4ODEwMzQzMGZhYjRmNjgyMjk0YjI4N2RhYzQzZjMwNjFlCi1kOTljNzQzMDlhZTk3M2JiOTk4YmJiMmE2OTE0MDI4NDNhMWEyOGVlNjJhZThlOGJhZjRkNjQ1ZDE1NmI5NGFiCi0zNDY4MDA5NTQyNWFkOGI0ZGMyNzI4OWUzYzY4MThkNjAzMmY5MTUzNTQ1OWQ3NTk1YjJiOWJmYzJmNDRlNzgyCi0zMGYwYWY0OWMwYTIyMjNlMWNlZTllMTI4OWY2ODJlZDVlOGVhN2RiOTk2NjNhMjM0NzE5NjY3YmNmZmE4MDc3Ci1lMDExOGIwYjk3MDI1Mzg0MjFkZmFkYTAxZDk3ZDdhOGYyMzI0NjRiOWZjMjA5Y2YyNzhiZDVmZWY4MGMxNGJlCi0wMTFhOWY2ZmM3OGRkMjBhYjAxMmEzMDc4MGRiMjUwN2Y0ZDVlMWU0OTNmMzA4MTRhYjFjNzBjZGE3NWNlOTU5Ci1iNWQ1MTViMmVlODY0MGRkNGJjZGE2NzEwNzAzYTllNTY3MGFiYWRhZTg1NmI4NmVmOGU0MTQzYTVmMDNmYzE2Ci1hNmM1N2FjN2MzYTk2YzUwZTQ1MTkxYjBiMWM0ZjZhY2Q2MjJjNDAwY2QwZjJhZTllOWQ1MTIzNmYxYjk0NWQzCi03MWFkYzVmZWFiOGFhODQyMmEyODc1NWI2Mzk3OGFhZmY3ODcxNThhNjhjMjZmZDI5YWI2ZTg0OWIwNzZiODUyCi0yMTkwY2FlZjFhODY2NjNmNGUxMmNkZjI1YmE3YmY4ODJlZjJlMGUyMWM3N2MxNGZkZjk0MDc5MmQ3YmIyOGY4Ci04OTJhOWNhMGJiYWJlMWM3MGMxNTJmMzBmMzY2YmM4NmI1YmIxZWIzYjU0NDI1NjE3NjgyYTU0NjMyMzhjOTk5Ci1hYmEzYTdiZjc4OGEyOTdkMmE1NTVkYmIyMThiMTljZTUwMWFhYzQzZDk0YTBiYjZhZTI5MDYyODgyMWVmYjBjCi04NGNlZWNiMzBjMTQwOTE3YTQ1OGRiNmZkMDExZjNjYmZiNGExY2I1ZWEwMTlkYjYyOGMxMDZlMmE1NWYxYzEzCi00NDhlZGQ0YTlhMTU5ZWJiMzY5ZDUwOWRhMjk2ZGE3MjRmNzI5ZmM3NTYwYzAwYzQxZjQzMDllMzJlYTZmYjcxCi0xNmY2MjMyNWE1YWYzMTdmMTA2YThkOGMyYzAxZWNjZTY3NzVkNDVmZGJlZmRmNjkyNWU5YTQ0NjA0ZGRhMTNiCi0yN2NjOWE5NjBhMjFlZWEyYWY5YmRmNmIzY2QzNTdkNjA5N2FkNDBkZjc0MDMwMDU3NDZhMzA4MzNlODE0ZWFjCi04ZGI3MmMzODNmYTQyYmE5ZmQwMDdhMjYzY2UzYjc0YzEzNTZiZDUyMmQyNjExZTRlOTYwYzlmZjUyMDRkNDZmCi1lZTMzMmY5ZjEzNGU3NWM3OTFhNmQyMDkyM2VjZThkNGRmZWRjZjk2YWI0NWRmZDc1MTczOWRiZDQ3YjQ4NjNhCi1mMGZkYTE3Mjg0OGNkMjc5YWZkOWZhYzNjYzU3NDRjMWZhOGE1ZmI0OTU1YzZjMWM5NTJmNTZkYTA2NDMwYWVlCi0wODQ1MDc2NjRmOTNjNzFkODgxYjYzMDQxY2RlYzU4MzA2MTAwYTBlOGM3NzQyMWQ3NTY3OWNlMzNlMmEwYTYzCi1hYzJmODEzMDA2Y2VhNjllMDAzNTJmZmQ1ZjU5MTRiNjNkYmFkNTkwNWE1OTBjZTA5MDNlZDliOTY3OTc3OWUyCi1kOWRhNjJmNDc4NzY4Nzc2YTE3MzgzMmE4ZjNjZDY2YjZiNjI0ODRkMTkwYmFmMmQ4MzQyNDEwMDBiMGVlYzc5Ci1mMWU1M2I0MmE3NGIxNTliZjc4MWVlNDQxNWFiNmFjZmY4NmM1YjA1OTNjZjQ2M2JmOTVkOGZhODIyOTNhNTQ4Ci04NGJiMjI2ZjQwZjI0NTkxZTVhZDQ2M2FlNGI2NzI5MDVlN2E0MjIyZWRmOTc2ZThhZDg4OWU3MTk4NmIzODE4Ci1iZDNlZWI2YTBjOTY3ODdjNmZkZjNhNGZhZWQ5NGYwYmEwMjY5ZmQwODJhYzQ1MTUzMWUzYjBjMDFmOTk2MDkwCi0zZjgyMWRjZDY0NjQyODY4ZjA3YWEwZmVhZGEzNDA4OGE4NWU2NjQ0ZWYwN2Y0NDAyYjRiMjkzMDczZTlkMzA4Ci1iYjI5OGIwZTQ0YmUzNmJkZGEyMTgyNTliNGY0OGYxYjYzOGY1MDA3ZDNhYThlY2U4MDJiNDg1ZTdlOTA3NWQyCi02ZWM4ODFmYmRlY2IzY2Y1OGM4YTNhZmUwZDk4MzVlN2I0NjhjNjQ4ZTUyYjJlZGRiODFkY2JhNGU5Njc4YmY0Ci1iMTczNTQxZGJlYzM4MjQyM2U4MDg3N2JhMmRmOTRhNjA1YmJjMmNkY2EyYjc2Zjc0ZDJlYjQyNWQ4MTkxOTU4Ci04MDQ2MTdmMjExNzJmMzk3YmI3NjJhYTdkZmQwNDg1Y2QwMjAzOTdhNWQzZTlmYzk0MDVlYzdlZGNjYmNiZGY0Ci0yOTVhMDA1N2I3Njg0YTcwMWJiN2VhMDFlODk3OGZiMzM2N2VjZDA4OWJlMTlhYWIyODI4ZjY4MjVkMjc1ZDNmCi02MDY2MmMxZTJlYzVlOThlY2I5OWE5NmQ2ZmUzNzllMmZkMTU4YTcxMDZiMjE5MDkwMmYwZWQ3MTk2OWI2ZGFmCi0zZjllNDYwZjE2ZjFiNDBjYzJhYTA4MzMwYjlmYzJlMjQ4MDJiZWQwMzRiNzFkZTQ0NWExNGJiMzNmNjQyOTg5Ci00Zjc2MzE5ZWRkZWUzMjgzMTllZTk1Nzc3NDBmYzgwM2I4MTcxNGE5OWJmMGE1NzIyOTgxNDI3YmEwODU4NTQ2Ci1jMGY3N2YzOTE5MDcwMDYwNzA0YzNiZDk5MWQ5NDkwOWQyMDEyMTQ2Yjg4YzBkMzVmYmE3YzJkZTg2NGUzNWI3Ci1jYWYwMDk5YzQ2MzA0NDM2MjViZTM3NjliMDE1MjZmM2YwYzhjODIxZGE5ZDU0NmJjMjU4YzAwNGE0ZDJiNDZiCi04ODZmMWVmOTE2ZjUwZDNmNWZkMTM5ZTA1NzBiNDE1MWRkNDFmMWYxYjVkYWIwZGI3Nzg3MTA1Yzc3Yjg2OTAxCi03M2M1NjJkM2VlZjZlZjc0MTA3ODY1OTQ2N2YzMzM0NTBkN2Q4MGM2N2M5MWEyNmJhOGM3N2FkY2VlNmY0YzU2Ci1jN2YyNDhkZDkyNTIwZGIzNTc2OGU3MDNmN2JkMTcxZjllNjYzYjlkYWViZWI5NjExY2Y0ODQyNWI2YjM1YzFlCi04YmM3YTBiNDU0NDFhZDM4NTRhYzliMzcwNjE4MzlmNTc4MjU2YThlNDE3NjZkMWE2YjI5YTk5YTAxOTU2MjBmCi1hMDkwZDBlZjQxMjA2Njc5MDJiMDU4Nzk0NjIwNmYyOTRiNzg3NzVkNjBlYmVjNjY4ZjZlNGZiOWNhODk3ZTg1Ci03NjE1MWIyNDVhZmY4MjMyYTkwZjk3YTVhOTNlOTM1Yzg4NTc5ZGMwZjJlOWRhN2NiZDAyNDI2YjNiMTVlZDUwCi0zMGFjZjUwMTA3ZjdiNGQ0ZTJjMzJkZDc1ZDZkOGM0NTM5MTc2YTIyNDRlNzYxZWJmMWZmYmY5N2QzMzZmZGQ2Ci1lZjljZjEzODMyNmUxMGJkYjU3NjM4MjM1MzQ4ZWVmOGZmZDMzYzg0YjQyNmVjMWM4MWZkOGQ0YTM5MDdkNTJkCi0xYmE3ZTliNjRkZDU2YjhmYmMyMzYyZTMwZjI0NTFiNjliMGQ3Y2JlYTFmMzEwMWFmY2Q0NDI0MmQzZmY1YjY2Ci04OWE3YzA1NDQ5YjI4MTAzNWU5ODNjNmI4YzY4ODU5NzM0YjIzMmE3Mzk5NmExOWQxMTZhYzRhOTRmN2I0ODJlCi0xZjk4NDM3MWU3ZTk5MTljMzEyMjUwYzM1ZjZmN2ZlZTI1ZWMyM2U1NjJkY2MyNWNiMjllYTc5ZGZmMGU3YzhjCi1mYTE5MjgwMjg4YzI2ZGQ1YzMyZjRhZWI5OGM4NWFmZGE1MzMxOTE4MDkyNjdmMDU1NTQ5OGRhNTY4OGI3YzIwCi0yMTlhMDU4ZWZhYTU5NzEyNTUzNTg3MTkyMmZmOWIyMGNmYmY0YzRiMzViZGZhNGJkZTczY2E4Y2U2YWJmMTRjCi01MTBlZDIwNzJhMDFjOGFkZmFkYTAwNjQ3Nzc1MDlkNGY5N2JkMmJhZjY2ZTcxNTFhZGU3NmU0MDcwNjZlZmRkCi0yZTA4YTE1NzkwYzgxZDU0NWIzNDAwMTliZDM1MGM3YjkwYjM2YWRjODY1OGMxODQ4MDIwYTc3ZjkxOGUxNTI3Ci1iMzk3NDcxMGFmNTAzYTc5ZDc5NDdkY2U5M2JkODExNjFjZDdlMGIxMTI1ZDJmZTBlZGFlYjkxYmFmMTI3OWU3Ci0zMTJmYmVkNjQ2NDcyYjM1MjMxMGZkZmJlZmRjYzRjMjBjY2ZlZDBkNjYyNjA4M2IwMjYxZDdjNDdkOTY2OTg0Ci04ZGNhNDI5OGI5ZGRiNThmZTIxYmIzOTFjN2Q0NWQ5YjU2MmQzOGM0ZGMyM2FjYjVhYTg3ZTNkZGY1OWVlMjM4Ci1jOTEzMThkYjI0OTFhMjQxMTBhZjkwNTM5YTE2OTQwMTQxZDFlZmRmNGExM2QyMDJmOWI5NDAxYmM4OWQ3Mjk3Ci01MjY5Y2Q1NTE1ZjlhNjE4NmE2ZWY4NjZjZmEwMzczMGY3MjZkN2E0MDc1ZTBiYzZmMDk0ZTk1ODRhODRjZjFlCi03ODQ4OWJiNjhkYzA5ZWUzZjEzNTZmNGU0NWI4NjIxZTA2MDc4YTY3MjdlYjcyYzM2ZmNhODA1MjEzYzE2NzVkCi00MzY1MjU1ZDkwMTY0ZjMzY2U2YjIyMzExMTNmNjRmZGNmNWE3ODljZDYxMDAyYjJhMzhkMmNhNWJmMWY1MzYxCi1jOWFlMGY0ZWZiNTEzMzdlMzQ0ZmI3Y2UxNWY4ZWRiZGM5ZWM4MmE5NDM1MTc1ZjU5YjZjMTlhZTJkZDBiMTBhCi05NDQ1NjVlNGIxNGJkMWRjZGEwMmQ0MmJlMjdmYjlmMDMzMDYzNjA5MTIyOGUzYjg5NzA5YzgxNDg5MzJhNWY4Ci1jNWJhNWJmZWNmZWY2ZGU4M2ViNDE0YWRjNjEzZDg1MzRjNGU0NTI4ZDkzNGMzN2U3NjhkMDhlMTAzYjhlZDJhCi1lMWU0OWJiMWIzZTZjYmNkYzNmZjYzZGFjNzk5NGI4YzA5MjAzZDgyYTk5NzEwNDQ5Mjc3YzIwYTM0ZTAxNTM4Ci02N2M1ZDVlNmFiZWJiYTY1MGM0NDFkM2ZlNTZkZTk5N2U5MjgxOTM2ODJlNWYxZmFhOTNhNWJjODAwODYyMTMyCi1lZDNiNmMwMDVjYzBlNjA0MjMxZTNlNjFkMTcyMTRjYTM4MTQ4Yzg3NWMyNjhhODYxYTE0YjU0ZTY1OWRkOTMyCi1jYmU2ZWE3MTA5YjI3Mzk3NWQ2Y2VlZDM1MWYwYjA4NzZhMGI2NDc5NDZkMjkwOTdkZDk4YjVmNmJkYTdiNDNhCi1lNjQ4MWYxNzc0M2ZkYTUwM2IzNGExMjBjOGMwNmY0Nzk4YzFmY2Q0ZTUyMWEzMGQ3NmYyMzQwZGY1NjJiNjNkCi1kZDRiMjdkYThiNTgzNTQ3ZDI4NWYzODQ4YmI5ZmRkYjYwZDBlZDIyYTRjYjI3YTI3ODRlOGQ3NjYyZTg0ZmZhCi1lZWE1MGFmYzAzYjA4MTViNzJiYmU5NTU4Yzg5NTlkMGNjYzAwYThjOGM5Zjc0MGY5NWI2NzFhNjZkZmRmYzY4Ci03N2ZhYzEyYzE5OTVkOTc3NDk1YzljY2FjZDkyNGU0NWE2NmY4NzM5ZGUxNTZlZTY5NjJjNzkzMGY4YWFjMzc0Ci04OTRmOGJjMzk2ZmY2OWYyMjQ5MzkyYzdjNDI0OGY5Y2Y5ZmZmZjllYWY2MzVlNjZhMzQ1MTFmMzlhMDY2Yjg4Ci00ODY2ZTc3NmI4ZDZlY2EwMzE5ZjIzY2E2MDRlYWQ3NDJiYjZmNmYzYjA0NjQ1NGExYzBmYzI0MjU1MTExMmI1Ci1jNzQ1ZTliOGYxMjcyMzg2N2IyYjg5NWMwZjkzYzk5ZGYxZDU0MmI4NmMxYzlkYjQ3MzkwZjJkNmMzYjU3ZWNjCi02NmIxYTZhYjUxNGE0N2ZkOWFhNjI0MGI0NmM1NGE5MmZkZjgwZmM0NGVlZWQ0YjhhMTM2ZmI4OGIxZmE1YjljCi1hMmZlNjgyY2NhNGQwYzVhM2U5OTRjZmViZGMyNzBmNDhlM2FmOTFhZTZiYzkxNzJiZDljNzMwNTNhNzYxMzY0Ci02ZWY5ZTY4ZWY1OGM3MThhNDc4ZTdkODFlNTdmMzRhNzkxYzI2MjY5ODE5Yzc4NTc0ZDdjYzEyNjMyNjg0MjE5Ci1hMWY4ZTFjNWNlOGIzNThkNmZiZjIzOTg0ZTU5ZDk1MzNhZDMxMGQxNThhYjViYWE5ZmVkYTA4NzE3YTdmNWUwCi01NzY4NGM0NTVhN2UzZDgzM2Y4MmI0ZTEzZTlhOTJiMGI4ZmJhNWNkZDcyYTdlNDY3MDkwNzRkZGM4MmU0NDlhCi1jOTA2NDc0NDQxMDY2ZmRkOWNiN2YzNDFmM2EyZWU5ZjJmYmY1ZTRlMWEzNTBhNDVmY2FkNmIyZTA1ODI1YjZjCi04OTA3N2Q3NDI2MTljZjFmODQzNGEzYjVjYzQ0OTk4MTc2NjY3Y2ZkNWM1ZjRlZTUxMzI2ZDFlZTNlNDQ5OTE1Ci0wMGJkYWY1N2M4OGExMDdhYzQ5YzE0Y2ViZjE4ZDAxMGM1YjMyMDZlYzg4ZmQwNmUzYzUxMTQ1ODFlZTVhNWU4Ci1jNGVlNWE1YzNkNDg2NTNmYjIzZDI4ZjI2ODYyYzQzM2VkMDgzYWYwMWVkM2RmOGUxNDc1NDhmOWNkZDg4MmY4Ci1jYTMwODgxMDZiOWM3M2I5ZTI4Nzg2ZmZhNjQzYzM0M2E5NDBiZjg1MGYzMTI2NjZlNjM1YjhkYjk1YzZmNzBiCi04M2Q2NDVmZDk0N2Y2ZGYzMjJkMjZmOGY5MDgxY2FlNzFiYThiOWQwZGU2N2Q1MzViNjExNDZjOTU2ODAxZDZiCi1mZjlhNjkzNjViZGE5YmM5N2Q4ZDkzMTQyZDRjMzY3ZDUyNTU1ODdhZGEyNWU0ZmIwNjFmOGU0MzBmNzNkMmE5Ci03MTQyZDllNGMxNzQzNWI3ODgwNTk0NmU0ZmRlNjI0ZWE1ZDliNWM1MTFjOWFmZTJjZmFmNDQ3Y2YwODIzNWI4Ci01NzVkZGFiOGFmOTM1ODhlMGM4MjA2ZjA4Zjg4MzE3MGVkNDQ2M2RhMzFhNTNjZWY2N2YwMWFhYjhmNjQ1YWNjCi1jMmM3NjRmMjRiZjgzMWRjZjAwNTgzM2NjZDEyOTYwMjUzNjhiM2Q1MWEwNGVmZDA5NWZkMTM1NWU5M2RlNTYzCi1lNzFkZDA0N2VmNDlmNWJmOGMxN2IwMWIyODg0ODcyMjU3ZDc0M2FjNmZkZDhmNTRlMjdhMjQxZDdjNzViMzg3Ci1hODg0MWQ4Y2VkZTY3NmUzNWQ0ZjAxYWNiYTJhY2ViZDhiMjIxMTNiZmJlZjgwZDVlYWIxZThjZjU2ZjY0OWE0Ci01MTZlYzA5Nzg3MmE1OTdlODM1MTlmYzEzOTdjN2Q0YTRmNmRiN2RhZjA0NDgzNWIxN2QwODU1NzhmNWEzNzc2Ci1mZDVlZDkyMzVjMDE4MzU0ZTgwMWZhYzMzOGFhN2VlNTgxZTk3ZDkxZGYwMTk2ZWE0YmNiMDlmMGU2ZjJlMmJmCi1iNTQ3MDgyN2YxYjZiYjBiNzEzM2MxOWJmNDNiYmU4MjRlYmRhZjk1MjZhYjE1ZmY4YWU4ODQ4YmYwZGVjYjNmCi1jZmE3ZDNmNWVkNzExOTE4OTRjNzA1YTI3Y2Q5YWEzMGZkMzg0Y2U2YTVmMGJjNTFjNTY1MWRkMjUxMGEzNDgxCi1kMDg2YWE4NzU5NWY4ODVjNGMwYWZjYjAyYjE4MzdjZWRmODVjNWU2NGQ0NDBlMzY1ODE4NzRhMTE3MDQzYjc1Ci03OGRhOTRhMDY5Y2YyYmQ1N2FlNzBjMjMwZThkMWEwZDQ2MzcyMjNkMTRhOTg2ODgzNWQ4OTIzZmViNDA0MzIzCi00M2MyMmQwZjBlODIwMWMyMDI0N2M3OGFiZjkyNjc5MTUwNjlkNjQ3MTg2MmMyYTBjNTFlZTNjZTMxNTNlMzA1Ci00YTRlYzZlYTUyZGNiNTVkZjM1OGQxYTBkOGFhZmE3OWZlMDhlYmU0ZDIyZTllY2I5ZDJlNTBhN2YzNjdjZGVkCi03MTY5Zjg0Mjg1YzQ4MmZjMWVmZmJkZTZmZWVhNDI0ZWNkZGEyNDk0MTI3YzdiODk2ZGQwNWY1ZTYyZjVmZDFjCi0wMzFkZTk2MGQ2ZWM1OTk1NGU4NDA1MDgxNjAxZGY3NDFlZGQ5N2YyMjdmZDQyNmUwOTk4Y2E3YjliNDk4YmViCi00Y2RhOWExNjcxNWNiNjk5YzQ2ZDEzODY0Njk5NTgwNzlkZGY1ZmYxNzRkNzAzMzgyMDYyMDhmMGI5YWRlMzg2Ci0wM2U4ZGNmMzFlMDlmNDQ5NzZjMWFkNzYyODk2YTYxNWQ5YmZlNTQ5NzhiN2MzOTE0NDU4YzhhZjRkMzNkYzYyCi05ZjlhZjUxNzFkZjNiOWU1NDhiMjQwMTFlYzVmMDJlMzFkYzM3OTU4MmUxNmYzYzk5OWYwNDdiODJlN2YyN2YwCi00YmZkZDgyN2M5YTFkMTllNDIzMDY5NWQ0ZWM0OTlhZmRiNjE0NzE0NmNiNmY1YThhMjZlZmJkNmQwYzVmMjA1Ci0zNGNiOWMzN2ZhNGM0YjYxMjJmNTViYWNiNzU2MTczMjgyYWJkNmEyZTUyMTljMjViODZhNTE4MTAyMWYwYmFjCi02ZjE3Zjg5ZjNiOGY3NGMyODFhZWVhN2MxZDRmZmFjNjAyYzIzNjRjOWUxZWM4YjBhNjIzYmQzNTQxNzY1Y2Y3Ci1hYTVmZWJiYjZlODU3ODEwYTU2NDg1MDI1OWFjNGNlNmQ2NDFmN2I3NjVkZDQ2NTg0YzQzYzgxMTNjODU4M2Y5Ci1lNzc2M2QzZjRmODM2NDllMTJlMTU1NTdmNDhkY2IwYTYzNzE0MGIyZjc0NzlmNzhmMWY2NGJjZjhhMDdhY2MwCi00M2I5ZDlhYzFmOGIyYzNiMDBjMzZiNDZkOGU1MTRjOTk4ZmNkNDczNTRiMzY0ZThjMjQzNGU3NzRhYzcwOThiCi0yNGMzYmZhZGJhYWI1YmRiOGFiMGE2Yjk3NzNhZWE0MTc1NjE1MjQxMjQ5YTJhNTgyMjJkZjhjNTNjMzJkMDFkCi02YWRjNWZiNGE5MzM2MDVmZmY5OGM3ZDAxMTI2NjM4MGIzMDU0MDNhNzk4Njc5MzYxNTYyNDBhNWM1NTUxMDViCi05NWNlYzM4NzM1MzBmYTZkMzdlOGNmYzI4NjExOGE5NjE4YzYwZDYyODI0MTJkMGNjYzVhOGUzYWY0N2E0MmVjCi0yOWNlZTAxNzZkMWM0ODAyMTQ0NjE5YTViZjFjZGY5ZWM1YjhkNmY4N2MzNzljNDc2YWI5NDFkYTI0NDIwYTg2Ci0wNGEwYjFhZDc4ODRiNWUwNTEzNjEzOWFmY2NmMGI3MTAxY2FlNGI4ZjBiZmRiZTI3NmFhZDFiOTVlMmMwZDU3Ci0zOTAyYmZkZWU2NTFhMjAyYjk5MTg5Y2FkYTE3NmEyMmZhY2QwNTNiYmM3M2FmMWM5MGNiZGExMDYzNTc5OGU5Ci04ZGUwNWMzMzhlOTBiM2RjNGFmYjhkMjkwMTA1OTBiNjQxZGI0YTlhYjcwNzI5NGU1NWU0NGM5N2UyNzViNTJmCi1iODhmNTJhNmM3ZTU0NWNkYzczZGU0NmRhNjk5YzhjM2Q4OTU4ODAzNjhhYTAzNWExMzdmYTg2ODZlZjRmNjRlCi0wOTE2N2I5ZTUyMzMxMmIxNzVhMTY2ZGU1ZTEyOTdjNjBkYjM2MWQ5NTA1YzEyYjQ4YzE3ODBhMDBiZTJhOWExCi00M2JjNjM2MmM3MzFlYjI2YTYxMDk3YzYyYzI4ZDJjYzhkNzViYTNjNjNlMzFhNDliOWNiNWI4YjdmZTFmYmJiCi02MTUzYmM4N2I0NTM4ZWY1Y2Q0OTE5ODExMzI5YWU5MzNkODZlZjU1Njg4MzMyM2VkNWE2ZGI1Yzk4YzExYjJjCi1jYzA0YzRmOTM3Mjg5NTkwZTVmN2VlOGQ1Nzk0MGYyMTM3M2E4MWI4YjkyZWI3Y2E5NzhjMWEwN2FmN2IxMDY1Ci0zZTY0OThhNmUyZmE3MzQyNjlkNjFjZjBkZWRkNjQ3ZWRkYmJlMzk1ZTFlODE5MDU1MmY5YTQzMzIwODJiZWUwCi04N2YyOGZkNmJiMTllNDhkZThhZDY2MmY0MWI0YTVkZTY1NzUxMWYyMzI5ZmU2YjU0MWY1MGVjNDNiZTI0ZDVlCi1lNzMzNjcxMjUzNWVjZTZhNTkwNDI2ZTEwNDIyZDEzMGY0ZmQ4YjBmZTMxNGM5ZmUwNjhjNmE0NTgzNTk5NGFlCi03YmZkYThhZTQ5ZmFiMjM5MDVlNGQ4YjM3NGZjNjU0ZjMzNmIzNmIyMDgwZGY2MWFiYzI4OGIyNmI5Y2E3YjQyCi02OGU0NmYxMjBiODJjZGNiNzQ3MTVlNmQwOWFhYzA5NmZkMTE3YWNlMzM4M2JlYWNhNTJhYTI0OGNmZTMwN2NhCi04OTMwYTM0YjcwNjJmYjE1M2Q5NjhjOTMxNjlkZDIyMzQ0OWNhNjg3NjU0ODBjZmRjNWRmMzliZTQ1MDU1ZDM3Ci04YmExNGRhYTVhNDc0NWE5ZjdiNzZhYjY2NGVmM2Q1YjJmYmEyOWM2MGEwNmQxYTA4OGMwNWVlYzZkOTVjMDgwCi0xOTc0ZWMzNDRiMjRkZmQ4OTJkYjc4NzRlM2U5ZGYwZmQ2MWVmOGY1OWI1MjVmOTJmMmIzNzQ5OTlmOTIzZjM0Ci02NjhlNTVjYzkwZmYyODkwMTA3YTc1Mjg4NTNmNDQxNzdmYTUyYTA3MWYwY2U5OTdhZTk0YjU5MDI4OTQxMWU0Ci1jMDY2OWM5MzZkNGI4ODVkZTg0MjdiNjBiMmY4ODIwYmM5ZDY3ODFiZjI3NWE5NTkyMWQ4Y2Y0ZjU1Y2M4Y2M3Ci03M2ZmN2QwMDFmNGZjNWM0MWVhMWM3NTVlZTQ4YzU1NTA2Nzc3NTVhZWUwNjFhM2FjODViYzBkOWMxZTViNDEwCi1mMzhkZGI4NzdmZWY0YWQ0MTQyYzg3YzQyYjZmZWFkODdmMWRhYTk5ZWUwZmJlN2U3ZWVlOTQ4NjcyMzczYTNmCi03YWNlMjQ0NDYwNzkyMWM2MWNlZmE3MzYwZjMxOTQ2ODVhY2Y4MzYxNjVlMTkzOTVjMmIyYzljYjU3NzhkOWEyCi02ZjM1ZjkxZDYxZTVlNDgzOGFhMjM5MDliNDZhODk5YTFlMDJlMjdlYmZiNTM2OGYxMDgwMjcyZjZhZTlhZGM1Ci00NGY1MTIxOTFiZjE3ZGJhM2ViMjJkOThiOWI5MzRmMzU5ZmM4NmM5ZTQ1MWQyZDQxOTQ2MzJhN2RiNWIxMjcwCi02YTU4Y2VhNDczOTJmYThjYzI0ZjZiNGVjNWQxNzJlOWU1NjAxNjE3ZDhlMjJlODM3YzBiMzViNDI4MTM2NGU1Ci04MTc1N2UyZmNjYjk4ZmE4ODg3OWQ3Y2NjNTY4ZmE5YjE4MzUwNGI0OTEzMjkzMjBjOTY4YjU2MTFlYjFmMzM3Ci1hNmU1MGQ2ZmFhYzU5MWRhOTk0YWE0Nzc2MTg2NWFiODQ2NTFjMzI4YmYyNTliZTU5YmQ3NTJmMTEwZjg5MDgxCi03NTUzODIzY2M2N2UzNjcyMWU5NWYxYzRlMmUzNzJlMDIwZjJiMmZmYjA0NWFhNzBjYTRkZDZkNTVkODhlMzJkCi1jOGExNzQ5MmVmMjhhNDRkNGE1MzZmY2E4YmQ3NWIzZGMzOTJmYzI5NjM3N2IyYzQ3NDM4OTdjMzJlYjY1MjgzCi1lNzc2ZThmOGZkOTdjNjYxYzY3YzNmMGQ5NzM0M2FmMTQxYmY2Yjc3NDk5YTEzYWY0NjA1ZTM2ZDNmNGMzZmFiCi0xMmJjNWRhYTVkYjFkMTJkZmU1OTE1YWNmMTQ0MDllOTMwMmIxYmJjOGM1ODYxOTQ4ZWFlMzI5ZWEzMTEzMmRmCi04NDk0NTYwZTU2NGJjMTYwNzNjN2E3NzdmZWZiMzBjYWM2ZjRiODk0M2M3MDE5NTI4OTk0NmE2MGYwNmQ0MzA2Ci00NTM2YzI3NDA5OTViNzI0NzQ1MWM5ZTE2MTlmN2UyNzdhZjRiY2JmZmY2YjY4NTUzYWUyM2VlZjdiMTc5YzE2Ci1jYWI2YWFlN2I2ZjVmYzcyZTBkN2NhYzM0NjExZDEzNTM3MTY1ODA5NDhiYTY5ZGM1MzRhM2ZhNTkyOTg0MjQ0Ci1jMWJiZDBhNmQzZjFmYzRkOWM4ZmY0OGU3NzBmNWM2NWJlM2I1YTk2MWUyYWI4OTMxZTczYzgyMjJlNmViNDgxCi04NmU5MjkwNmJmMmI0NGZlZjVhNTliNDYwYmM4OGFkMTgzNzczMDUxNWQ4MmMzMzdjMzQ5Y2QwODczMjlmZmZmCi0wNzE4ZTIyYmQzZjA5ZmVkZTcwNDI5OTJhMTkxNTc1MDA4ODkwYzU5NjZmMTIzMGFiMTg2ZjAxOWYxNzk0NjcxCi04ZTYxOWNlODcwNmZkOTRiZjBmYjFkNmVjMjI1MTMxNTBjMWI5NDk2NzQyYTk0ZTA0OGRmMDc5YmRlNWQ3YmYzCi05ZGI4MjY2OGU1ZjU0NTM5NjI5OTBmNGUzZTAyNDVjZDJlNzY3YzVjZjM3NTRjMTM3MWJiMzdiYjdlMTRkYjc1Ci1hOTBmY2Q1ZGUxYTdkNzU3NDgyODkxNzdlYmU2NWEzOTc3NjJiNWIxZGJkNDY4ZTdjYmIzZmVjNjZhNmIzZjJlCi04ZTlhMTgwMmJiMmNjNDUwNmIzYWQxNjMyZDY3NGYxZDU0YTBjMWMwODc4N2YyNzRiNDhkNjBlOTExMWQ4MDM1Ci1iZTNhZjQ0YTNhMTJlMTYxNzVlYmJhZmRlZTVjZmNlMmE5YTI2Y2I5ODI2Yzg2MjA3ZjhlYTg5NWU1YzJmZDY2Ci0yMTZiZTgzZjgxZmE0N2YzOWRiYWZmMzc4OTg2NWIxYmVmNjNiYWU0NjNiN2QxNjZkZmJhNWUzZTk5Njc2OTdkCi1mNmM5MWM3ZGJiNzY1YmRiOTFmNGVlNTkyMDU2N2E5NDE5OTQxNjQ4NGU3NWNiNmIxYzBkMWJkZDYyZTgzMWYyCi00YjZkN2IxMDA5YmVhMTRjNzhjYTZiOGYxMDIwY2IwNWM5YmZkMTMwNzZkNWYzMzVkMGI4YWU0MTdmYTI2Yzc1Ci1kMDRhMjhhNzc4ZDg4NThlNjQ3MzZmYTBhNWJhNzg5YjU4YjRkMDU1NDBlY2RmMjhlZTA0NGVhMTg3MDQwNzZmCi1jM2M5MjA5MGQxMTliYzY3NTk0MDIxYWFhNGU4OWEwNjNhYzBlNjRmMjE5OGM1Y2RiMzk1MWM3NjgxYWJhYmJmCi02ZTk2NjY2ZjQ2N2EwZmRjNzI5ZWZjZDJmMWQ5NGUxOTNkOGZkNTY4MDIwNjM4NDA2OTZmM2VjYTM5NGMyODQxCi02YjdlNmJkNDc1OWFhY2VlYmRmODJiYjQ3M2Q0OTI1NmU2NTM5NDM0NjlkYjcxNzk0YWU5NmIzZDEzMGJmOTdkCi03NTJhOWIzYmM0NDQ5YmI3NTYwMzk2MDlhNGY5ZmNjNjNjNjM3ZDg2NzJmMmYyNGRiZDQ5YTVmOWY1MTM5YzU0Ci0yM2M0YTFjYmEzNDU3ODRmMjhiNzkzM2RkM2QyYzk5MzhiMzVlNjM2NzhiMDQ1ZWMzMTRmZDllOTE4OGYxYjE4Ci1jYTAzNGEyNmY1ZDdlMmU3NzljZmU0ZDE2NTYwZWQyZTRmM2FjMmJmMWI1MzI0YzZiMzQyZTI5YjViYTNjOWUwCi03YmYxYmZmNTE5ZjkxYmQ5Y2JkNGMxOThmMGI5ODQzMWQ4M2Q3MzA5ZDBhNGI2MmJjZDQ1MGQ2MjY0OWU1YjQxCi0zMzVkODdjMjk3ZDI4ODk0MmE2Mzc5OTljMmRiZGFhYWVkYTRmNjhkMTY2MjY1YTM3ZGYwMDFiMWE0YTVmNTYxCi02NGE5YTdhZjgxMDg1MWQ5OGFmM2UwMWIwZTRiYmNkZjMzZDMwMzViOTgxMThiNDhjNjQ1MmRhMGNhZWNjYTEwCi0yMjhhMzA4YTBhMzg0NGQ1NzYyOGIyZGZkNzE4OWYxZmQyNTJlYTFjZTNjYmJhYjdlNzEzMjliODg2Y2MzNmVmCi1iNDBmNjQyYWE1NDY5OGU4N2Y0Y2U4YjMxMGYwZWUyOTk2OGFlMDRkZTAwM2ZiYWZmODRkODY2ZTQyMjBiNjA3Ci0zYjNjNWZkZmVmODgzNTRhNTRkNDMxOGRkODUyZmZlYjliZTgxNjMwYzY3M2U0MjVmZDNiYjZkZGVjOWYyOThmCi1hOTk4MmY4YTU4NTliOTgzYmNjMDliOTg5ZjRhNzFlZTRhNTRkMzhhMjIwYzNjZTc0OTFlN2Q5OTZkOGIwZTExCi1iMDg1YWNiOGYyMTdiZTM1ZjNlYjdmYTA4YmQ4ZWE4YzY2ZGY4YWQwMGUzMjlhZTczMmNlMTI4MDFhYThiMWE5Ci00MGRiMWE3YjMwMzk2N2MxODViOTAyMjlhMTE4OGVlZGEzYTE1NjVkYWQxYzA4MTgxZmIzNWJhMDM2NjdkNTEzCi05ZjJiNmE3MWRkMjdlMTFjN2RiOWE3ZWNlZDY0MDRjYjA5MjUwZmEwYWUyZjBmZTdmYTYxMTQ3MDM5Y2I4Njg1Ci1lN2ExNTY2ZTI1YjQwYjFmMjNmZmRhNTUxNWMxMDdlMzQ4N2VkZTBhMTQ4ZjJkODUwMGYxMDJiNGY1MTdjOTU2Ci04N2IyZTAzOTkzODdmNGE5MDY3ZWNjNzI1YmNiMzI3YmE1ZTk4ZDVjNjhmYjU0YWM5OTgzNDE0NmJiZDdlOTFjCi1iMDRkOTU3NmJiMTZlMzk2MDhjMTRjMjVhYWU0NDZkMjUwYjM4ODYxMGIyNzE0NzU3NjMxYzE4ZmViNzAwMDU3Ci1jMDAyMjQ1NmM5ZWEyODE0MGExNTBkYzZmZWEwMzMzZWNmOWMyOTFkOTU1MDVkZTNjMDUzYzFmOTU3Zjc2YTA2Ci1hNWU5NmY3OTIyMDBlYjVmMTgxMWU4NmQ3MGM5YmYxZTBkMjhkYTI4YjhjNjA0MjU1NWEyN2RkZDBhYTE2OGIwCi0wZjNjMTEzMjE3ZDk5MGY2ZWFkMGE2ZWNjNGZmNGM5MmM1NzcxMjFkMmIxZGNiZmY1NDdjMDMxODQzNjBhNmI2Ci0zNzg4OTE5ZDIwMzAyZjBjMzU1NDFiNDhjYjZlOTI2YmUwODdiMWY3MzA4MDQxZGM4Y2I4ZjE2MWQ4YThiZDMyCi1lY2M4NjFlZmQ2ZWJlMTY1NjhkZDQ3YjgyZmQxYTAyMjAwNzMzZmVmNDE3NmE3NDc3MTg1ZDc5ZTQ0YzEyOGZkCi1jNTRmNGYyOGNlZTc2ZGNkZWQ3Mzk5YmNmZWJiZmE2MjBhNmY1ZTRkZjUzNTBmZTYwMDVmODQ1NDFhNmU3N2NkCi05N2RkY2Y3MDQ0NTVmOTY0MzVlZGIzNjY2ZDljYjU3NTIxZjM1ZTI1OGVlYjIxNjM5NDRjOTBjYmRiM2Q0YTcwCi1jOTRiOWQzOTA1ZmZmNDI5ZjE2NTYwYzZiYzQ0YWEyN2JiNDgxZTI0ZDAzZjI5ZjEzNWVlZjM4ZDk3M2QxMmU5Ci1jMjUxZGUxZDliOTc2ZDRkN2JiN2I0ZjYyZGM3YTYwOTNkMTg2ZDI0MGRiNzk3NDMyZGZiNWU3MWY4ZmEwOWQxCi1iOWI2Y2JkZTdiNDY3NGJiM2YzODk2NzA5MWI4YjM3NWMwZTdkZmRkYzBhMjA2YjBkODkwODcwNzUyMTI1NGEzCi0zNWJlNDg1Mjg2NzRjODU5NzgyMmEwYTllOWNhODRmMGIzZDJhNDRlYzlkZWNhMGRiNTFmYTJlZjNkYjE2ODUxCi03OTM5ZWJlZjUyYjVhZjc5OWZmNmZlODZiMGNjNDU5YmU5NDE4N2FmNDc5ZTk1NjUxMjMzZjI1MTVlMDFjY2M5Ci01NzEzMGIwMWU2ZTk3ZGYzNzUzOTZmODQ5OTUzNWExZmNjMGRhZTkyMGRiMjVkYjQxNDc3MjYzYTg0N2I1NzhlCi04YWM5NGU1OWZjYjY5Yjk3YTFlYmY4ZDg0ZTJmYWI2OTI1YmQxNjA3N2Q1YTU4NDAzNTM5YWNiNDBhZGJiODlhCi01NTYyM2Q3ZTA5YTg0ODFlNzFiNDc0MTY3NTFmMDE4ODFlY2U0ZDk0ZWE5Y2ZmNmRhYmIzNTQ2ZmYyY2RlNGNmCi0xYmE3N2VjYWRjZDQ0OTk2MzdlMjZjNTA2NGEzNDJkNzFjZjUwZDcyNWM0MDI4NmFkMzUyYmY5N2UwZGE1MjFkCi01ODA1NWZmOTdjNjg3NjhiNDQzNWRiMzcyZjBiM2QyMzg0NWQ3NzA5YWM0N2IyYTk2NTMyN2Y2MjU3M2E4ZmU5Ci1lOWM1YzQzNWRkZjEyNDc4YmNkZmRlNDFjMGU0MzAzYjAzOTQ5NDQ2ZWM5MjkxYzU1M2VlYmQ5YWRkNmJmYjlhCi00NTE2NWNlMzgyMGFmNDI2NGRkM2I1NGFjNDFlNGIyZGY2ZWRlMTI4Njk3MzY2MGUzNzI4MWM3NTQwYmViNjlkCi0xNmE4NmFlMDNiOGM1Y2U3YWMxNDI1ODVmNzJhMGNiYThjZmEzYzcxYTU0ZGI2MGQxMzA1NzkwZmZiYWVlZTFmCi1mMzE3NzQ5MjZhMWRhOTZhMzc1NzRjOWE1YjY2ZGFhZDBhNjhhZGY5ZjEwNDEyMzk0MWFjNGQzMzQyYzEzYmFjCi1iOWIxMjRlYzlkYjkxNzAzMmUzZjQ5NTEwN2YzY2FiOTNkNTc3NTFlODhhNTM2OWUyNzM1OGVjZjRmOTM0OGVhCi01NDNmYjU1YzA0OTI4NjJjZTI4Y2ZiMWYyOGUwZTVmZmFhMzJkZjhmZGNhMjQxZGI1NTU2MTk1ODNmYWQ3NmQ1Ci0wNGVmNTk5ZjIzM2M0MjQzNTk3NjhmNmU4ZjBjZWE5NTc3NDkwMTU3NzI3N2RmZDhmOTA0MTg1OThlCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1jbGVhcnRvbWFyawotJSVFbmRSZXNvdXJjZQotL0YxMzRfMCAvTUZFQ1VSK05pbWJ1c01vbkwtUmVndSAxIDEKLVsgLy5ub3RkZWYvZG90YWNjZW50L2ZpL2ZsL2ZyYWN0aW9uL2h1bmdhcnVtbGF1dC9Mc2xhc2gvbHNsYXNoCi0gIC9vZ29uZWsvcmluZy8ubm90ZGVmL2JyZXZlL21pbnVzLy5ub3RkZWYvWmNhcm9uL3pjYXJvbgotICAvY2Fyb24vZG90bGVzc2kvZG90bGVzc2ovZmYvZmZpL2ZmbC9ub3RlcXVhbC9pbmZpbml0eQotICAvbGVzc2VxdWFsL2dyZWF0ZXJlcXVhbC9wYXJ0aWFsZGlmZi9zdW1tYXRpb24vcHJvZHVjdC9waS9ncmF2ZS9xdW90ZXNpbmdsZQotICAvc3BhY2UvZXhjbGFtL3F1b3RlZGJsL251bWJlcnNpZ24vZG9sbGFyL3BlcmNlbnQvYW1wZXJzYW5kL3F1b3RlcmlnaHQKLSAgL3BhcmVubGVmdC9wYXJlbnJpZ2h0L2FzdGVyaXNrL3BsdXMvY29tbWEvaHlwaGVuL3BlcmlvZC9zbGFzaAotICAvemVyby9vbmUvdHdvL3RocmVlL2ZvdXIvZml2ZS9zaXgvc2V2ZW4KLSAgL2VpZ2h0L25pbmUvY29sb24vc2VtaWNvbG9uL2xlc3MvZXF1YWwvZ3JlYXRlci9xdWVzdGlvbgotICAvYXQvQS9CL0MvRC9FL0YvRwotICAvSC9JL0ovSy9ML00vTi9PCi0gIC9QL1EvUi9TL1QvVS9WL1cKLSAgL1gvWS9aL2JyYWNrZXRsZWZ0L2JhY2tzbGFzaC9icmFja2V0cmlnaHQvYXNjaWljaXJjdW0vdW5kZXJzY29yZQotICAvcXVvdGVsZWZ0L2EvYi9jL2QvZS9mL2cKLSAgL2gvaS9qL2svbC9tL24vbwotICAvcC9xL3Ivcy90L3Uvdi93Ci0gIC94L3kvei9icmFjZWxlZnQvYmFyL2JyYWNlcmlnaHQvYXNjaWl0aWxkZS8ubm90ZGVmCi0gIC9FdXJvL2ludGVncmFsL3F1b3Rlc2luZ2xiYXNlL2Zsb3Jpbi9xdW90ZWRibGJhc2UvZWxsaXBzaXMvZGFnZ2VyL2RhZ2dlcmRibAotICAvY2lyY3VtZmxleC9wZXJ0aG91c2FuZC9TY2Fyb24vZ3VpbHNpbmdsbGVmdC9PRS9PbWVnYS9yYWRpY2FsL2FwcHJveGVxdWFsCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi9xdW90ZWRibGxlZnQvcXVvdGVkYmxyaWdodC9idWxsZXQvZW5kYXNoL2VtZGFzaAotICAvdGlsZGUvdHJhZGVtYXJrL3NjYXJvbi9ndWlsc2luZ2xyaWdodC9vZS9EZWx0YS9sb3plbmdlL1lkaWVyZXNpcwotICAvLm5vdGRlZi9leGNsYW1kb3duL2NlbnQvc3RlcmxpbmcvY3VycmVuY3kveWVuL2Jyb2tlbmJhci9zZWN0aW9uCi0gIC9kaWVyZXNpcy9jb3B5cmlnaHQvb3JkZmVtaW5pbmUvZ3VpbGxlbW90bGVmdC9sb2dpY2Fsbm90L2h5cGhlbi9yZWdpc3RlcmVkL21hY3JvbgotICAvZGVncmVlL3BsdXNtaW51cy90d29zdXBlcmlvci90aHJlZXN1cGVyaW9yL2FjdXRlL211L3BhcmFncmFwaC9wZXJpb2RjZW50ZXJlZAotICAvY2VkaWxsYS9vbmVzdXBlcmlvci9vcmRtYXNjdWxpbmUvZ3VpbGxlbW90cmlnaHQvb25lcXVhcnRlci9vbmVoYWxmL3RocmVlcXVhcnRlcnMvcXVlc3Rpb25kb3duCi0gIC9BZ3JhdmUvQWFjdXRlL0FjaXJjdW1mbGV4L0F0aWxkZS9BZGllcmVzaXMvQXJpbmcvQUUvQ2NlZGlsbGEKLSAgL0VncmF2ZS9FYWN1dGUvRWNpcmN1bWZsZXgvRWRpZXJlc2lzL0lncmF2ZS9JYWN1dGUvSWNpcmN1bWZsZXgvSWRpZXJlc2lzCi0gIC9FdGgvTnRpbGRlL09ncmF2ZS9PYWN1dGUvT2NpcmN1bWZsZXgvT3RpbGRlL09kaWVyZXNpcy9tdWx0aXBseQotICAvT3NsYXNoL1VncmF2ZS9VYWN1dGUvVWNpcmN1bWZsZXgvVWRpZXJlc2lzL1lhY3V0ZS9UaG9ybi9nZXJtYW5kYmxzCi0gIC9hZ3JhdmUvYWFjdXRlL2FjaXJjdW1mbGV4L2F0aWxkZS9hZGllcmVzaXMvYXJpbmcvYWUvY2NlZGlsbGEKLSAgL2VncmF2ZS9lYWN1dGUvZWNpcmN1bWZsZXgvZWRpZXJlc2lzL2lncmF2ZS9pYWN1dGUvaWNpcmN1bWZsZXgvaWRpZXJlc2lzCi0gIC9ldGgvbnRpbGRlL29ncmF2ZS9vYWN1dGUvb2NpcmN1bWZsZXgvb3RpbGRlL29kaWVyZXNpcy9kaXZpZGUKLSAgL29zbGFzaC91Z3JhdmUvdWFjdXRlL3VjaXJjdW1mbGV4L3VkaWVyZXNpcy95YWN1dGUvdGhvcm4veWRpZXJlc2lzXQotcGRmTWFrZUZvbnQKLSUlQmVnaW5SZXNvdXJjZTogZm9udCBaT1ZNUkQrQ01NSTEwCi0lIVBTLUFkb2JlRm9udC0xLjE6IENNTUkxMCAxLjEwMAotJSVDcmVhdGlvbkRhdGU6IDE5OTYgSnVsIDIzIDA3OjUzOjU3Ci0lIENvcHlyaWdodCAoQykgMTk5NyBBbWVyaWNhbiBNYXRoZW1hdGljYWwgU29jaWV0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLTExIGRpY3QgYmVnaW4KLS9Gb250SW5mbyA3IGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4xMDApIHJlYWRvbmx5IGRlZgotL05vdGljZSAoQ29weXJpZ2h0IChDKSAxOTk3IEFtZXJpY2FuIE1hdGhlbWF0aWNhbCBTb2NpZXR5LiBBbGwgUmlnaHRzIFJlc2VydmVkKSByZWFkb25seSBkZWYKLS9GdWxsTmFtZSAoQ01NSTEwKSByZWFkb25seSBkZWYKLS9GYW1pbHlOYW1lIChDb21wdXRlciBNb2Rlcm4pIHJlYWRvbmx5IGRlZgotL1dlaWdodCAoTWVkaXVtKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAtMTQuMDQgZGVmCi0vaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgotZW5kIHJlYWRvbmx5IGRlZgotL0ZvbnROYW1lIC9aT1ZNUkQrQ01NSTEwIGRlZgotL1BhaW50VHlwZSAwIGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMCAwIDAuMDAxIDAgMF0gcmVhZG9ubHkgZGVmCi0vRW5jb2RpbmcgMjU2IGFycmF5Ci0wIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKLWR1cCA0NSAvYXJyb3dob29rcmlnaHQgcHV0Ci1kdXAgNTggL3BlcmlvZCBwdXQKLXJlYWRvbmx5IGRlZgotL0ZvbnRCQm94ey0zMiAtMjUwIDEwNDggNzUwfXJlYWRvbmx5IGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5N2I2ODZhOTdlNDVhM2QwYWEwNTI5NzMxYzk5YTc4NGNjYmU4NWI0OTkzYjJlZWJkZQotM2IxMmQ0NzJiN2NmNTQ2NTFlZjIxMTg1MTE2YTY5YWIxMDk2ZWQ0YmFkMmY2NDY2MzVlMDE5YjY0MTdjYzc3YgotNTMyZjg1ZDgxMWM3MGQxNDI5YTE5YTUzMDdlZjYzZWI1YzVlMDJjODlmYzZjMjBmNmQ5ZDg5ZTdkOTFmZTQ3MAotYjcyYmVmZGEyM2Y1ZGY3NmJlMDVhZjRjZTkzMTM3YTIxOWVkOGEwNGE5ZDdkNmZkZjM3ZTZiN2ZjZGUwZDkwYgotOTg2NDIzZTU5NjBhNWQ5ZmJiNGM5NTY1NTZlOGRmOTBjYmZhZWM0NzZmYTM2ZmQ5YTVjODE3NWM5YWY1MTNmZQotZDkxOWMyZGRkMjZiZGMwZDk5Mzk4YjlmNGQwM2Q1OTkzZGZjMDkzMDI5Nzg2NmUxY2QwYTMxOWI2YjFmZDk1OAotOWUzOTRhNTMzYTA4MWMzNmQ0NTZhMDk5MjAwMDFhM2QyMTk5NTgzZWI5Yjg0YjRkZWUwOGUzZDEyOTM5ZTMyMQotOTkwY2QyNDk4MjdkOTY0ODU3NDk1NWY2MWJhYWExMTI2M2E5MWI2YzNkNDdhNTE5MDE2NWIwYzI1YWJmNmQzZQotNmVjMTg3ZTRiMDUxODIxMjZiYjBkMDMyM2Q5NDMxNzBiNzk1MjU1MjYwZjlmZDI1ZjIyNDhkMDRmNDVkZmJmYgotZGVmN2ZmOGIxOWJmZWY2MzdiMjEwMDE4YWUwMjU3MmIzODliM2Y3NjI4MmJlYjI5Y2MzMDE5MDVkMzg4YzcyMQotNTk2MTY4OTNlNzc0NDEzZjQ4ZGUwYjQwOGJjNjZkY2UzZmUxN2NiOWY4NGQyMDU4MzlkNTgwMTRkNmE4ODgyMwotZDkzMjBhZTkzYWY5NmQ5N2EwMmM0ZDVhMmJiMmI4Yzc5MjVjNDU3ODAwMzk1OWM0NmUzY2UxYTJmMGVhYzRiZgotOGI5YjMyNWU0NjQzNWJkZTYwYmM1NGQ3MmJjOGFjYjVjMGEzNDQxM2FjODcwNDVkYzdiODQ2NDZhMzI0YjgwOAotNmZkOGUzNDIxNzIxM2UxMzFjM2IxNTEwNDE1Y2U0NTQyMDY4OGVkOWMxZDI3ODkwZWM2OGJkN2MxMjM1ZmFmOQotMWRhYjNhMzY5ZGQyZmMzYmU1Y2Y5NjU1YzdiN2VkYTczNjFkN2UwNWU1ODMxYjZiOGUyZWVjNTQyYTdiMzhlZQotMDNiZTRiYWM2MDc5ZDAzOGFjYjNjN2M5MTYyNzk3NjQ1NDdjMmQ1MTk3NmJhYmE5NGJhOTg2NmQ3OWYxMzkwOQotOTVhYTM5YjBmMDMxMDNhMDdjYmRmNDQxYjhjNTY2OWY3MjkwMjBhZjI4NGI3ZmY1MmEyOWM2MjU1ZmNhYWNmMQotNzQxMDkwNTBmYmEyNjAyZTcyNTkzZmJjYmZjMjZlNzI2ZWU0YWVmOTdiNzYzMmJjNGY1ZjM1M2I1YzY3ZmVkMgotM2VhNzUyYTRhNTdiOGY3ZmVmZjFkNzM0MWQ4OTVmMGEzYTBiZTFkOGUzMzkxOTcwNDU3YTk2N2VmZjg0ZjZkOAotNDc3NTBiMTE0NWI4Y2M1YmQ5NmVlN2FhOTlkZGM5ZTA2OTM5ZTM4M2JkYTQxMTc1MjMzZDU4YWQyNjNlYmYxOQotYWZjMGUyZjg0MDUxMmQzMjExNjY1NDdiMzA2YzU5MmI4YTAxZTFmYTI1NjRiOWEyNmRhYzE0MjU2NDE0ZTRjOAotNDI2MTY3MjhkOTE4Yzc0ZDEzYzM0OWY0MTg2ZWM3Yjk3MDhiODY0Njc0MjVhNmZkYjNhMzk2NTYyZjdlZTRkOAotNDBiNDM2MjE3NDRjZjhhMjNhNmU1MzI2NDliNjZjMmEwMDAyZGQwNGY4ZjM5NjE4ZTRmNTcyODE5ZGQzNDgzNwotYjVhMDhlNjQzZmRjYTE1MDVhZjZhMWZhM2RkZmQxZmE3NTgwMTNjYWVkOGFjZGRiYmIzMzRkNjY0ZGZmNWI1MwotOTU2MDE3NjY3Nzc5NzhkMDE2NzdiOGQxOWUxYjEwYTA3ODQzMmQyODg0YmI0MmQxZjIyNDk3NjMyNTg4MzY1NwotMDVhY2IwMjJkMWU5Y2I1NTZlMzdhZjkxOTE3Yzc4ZTk4MjI5ZTNhNGRiZjAzYWU3NDE5OTg1NDI5NzdhZDZkZgotMTc2MGZjMWYxYTQ3OTQ2NDkyMmFmZGEyY2JhNzk2MWU5ZGE2OTZiNzEyMDVlMTljNTQyYzk3ZjI1NDE5YzQzYwotZmExYTA0MmJhMGNmNTYyMmZmYmQzZTc3NWQwZDU2NDEzNWQ5OWI5ZmZiYTAxMWVlYmM0MDY2YjAwM2NlMmY4OAotODI1OTM2ZDczOTNkMDVkMzgwNDYwMWNlZTlkMTIzMTIwZmRmNzM2MjRhOWQ0ZTM2MWEyOGU5OThhY2VjNTNmOAotN2E2MmEwYWVlMzNiZTJlOTY1NDI1MzRhOGFmMjQ0OTdkMWMzNzdjZDdmNzIzNzY3YjQ0ODU3ZDk0YzZjZGE3YQotYzNkNmYwMDg3ZmEzNjY1NWRkMmI4MWVhZWNiMzFmZTRmNGEyZmIxZWE5ZmJlOGI4M2QzNTgyNmFjOTNmYmI0ZgotMmJlZTAxNGY0MWY4ZjI3NjUxMGNmNWNlMzVjMzk1NGU4Y2FmYzUyMWQwYzNhYjgwZWE4YzdmYzI5NDI3YTFkNAotNDJkNmY2YzE4MDA5MTllNThkZTlhZTEyMzA0ZDcxOGFkODBmZWJiYjQxMmRhNTQxNTM0NjljZDUxYTI4ODYyOAotYWQxMDliYWE3Nzk4MTUyNWIzZDliMGVmZTU5MzUzN2ZjYmI4NTIwZDM4Y2NjYmQ1ZGIxNzFhMDM4NWE0MzJjMQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotY2xlYXJ0b21hcmsKLSUlRW5kUmVzb3VyY2UKLS9GMTQ3XzAgL1pPVk1SRCtDTU1JMTAgMSAxCi1bIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmL2Fycm93aG9va3JpZ2h0Ly5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvcGVyaW9kLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZl0KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgRVJWQkZUK05pbWJ1c01vbkwtQm9sZAotJSFQUy1BZG9iZUZvbnQtMS4wOiBOaW1idXNNb25MLUJvbGQgMS4wNQotJSVDcmVhdGlvbkRhdGU6IFdlZCBEZWMgMjIgMTk5OQotJSBDb3B5cmlnaHQgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50Ci0lIChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSBTZWUgdGhlIGZpbGUgQ09QWUlORyAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpIGZvciBsaWNlbnNlIGNvbmRpdGlvbnMuCi0lIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBpbmNsdWRlIHRoaXMgZm9udAotJSBwcm9ncmFtIGluIGEgUG9zdHNjcmlwdCBvciBQREYgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGEgZG9jdW1lbnQgdGhhdAotJSBjb250YWlucyB0ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBwcmludGVkIHVzaW5nIHRoaXMgZm9udCwgcmVnYXJkbGVzcwotJSBvZiB0aGUgY29uZGl0aW9ucyBvciBsaWNlbnNlIGFwcGx5aW5nIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYuCi0xMiBkaWN0IGJlZ2luCi0vRm9udEluZm8gMTAgZGljdCBkdXAgYmVnaW4KLS92ZXJzaW9uICgxLjA1KSByZWFkb25seSBkZWYKLS9Ob3RpY2UgKChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudC4gU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLikgcmVhZG9ubHkgZGVmCi0vQ29weXJpZ2h0IChDb3B5cmlnaHQgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50KSByZWFkb25seSBkZWYKLS9GdWxsTmFtZSAoTmltYnVzIE1vbm8gTCBCb2xkKSByZWFkb25seSBkZWYKLS9GYW1pbHlOYW1lIChOaW1idXMgTW9ubyBMKSByZWFkb25seSBkZWYKLS9XZWlnaHQgKEJvbGQpIHJlYWRvbmx5IGRlZgotL0l0YWxpY0FuZ2xlIDAuMCBkZWYKLS9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCi0vVW5kZXJsaW5lUG9zaXRpb24gLTEwMCBkZWYKLS9VbmRlcmxpbmVUaGlja25lc3MgNTAgZGVmCi1lbmQgcmVhZG9ubHkgZGVmCi0vRm9udE5hbWUgL0VSVkJGVCtOaW1idXNNb25MLUJvbGQgZGVmCi0vUGFpbnRUeXBlIDAgZGVmCi0vV01vZGUgMCBkZWYKLS9Gb250QkJveCB7LTQzIC0yNzggNjgxIDg3MX0gcmVhZG9ubHkgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwLjAgMC4wIDAuMDAxIDAuMCAwLjBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCi1jdXJyZW50ZGljdCBlbmQKLWN1cnJlbnRmaWxlIGVleGVjCi1kOWQ2NmY2MzNiODQ2YTk4OWI5OTc0YjAxNzlmYzZjYzQ0NWJjMmMwMzEwM2M2ODU3MGE3YjM1NGE0YTI4MGFlCi02ZmJmN2Y5ODg4ZTAzOWFiNjBmY2FmODUyZWI0Y2UzYWZlYjk3OWQ1ZWE3MGZkZTQ0YTJhZTVjOGMwMTY2YzI3Ci1iZjk2NjVlZWExMWM3ZDIzMjljMWEyMTFkZDI2YmIzNzJiZTU4MjJmNWVhNzBkOTllYjU3OGM3YmVmZDQ0Y2RmCi0wNDVhMzYzMDU2ZTVlMWNjNTE1MjVlYTZmYzA2MWRjZWJiMzM3MjA4ZWZmNzI5ODAyMzc2YTI4MDE0MjRmNjcwCi0wZTdlNjM5N2IyOGYxNWJjMTBiNDAwMTJiMGEzZWFlYjI2OTNlOGY3ZjYyN2M0YzljN2M2YzViZmYxMDVjMWU0Ci0xYjJiOWU4ZjA5MjUzYjc2MDQwZDI2OGI4MDcxOWUxYjNmNWE1NWFiN2I4OTJhZDVlNjlhY2FjYzZjMTY0MGViCi0zMDY3YmZjNjQ5MzhmNDE2MzZkYjg4MzE4ODNiZGRhYmM2Nzc3ZGVlMTdmMmU4NGYxZDUzMGJjNzZmNTFjNjIxCi03NWVjNmI3MjdhODJjMTkzZDFjMDgwMWFjNDkyYmJlMjgxYjQ2NjI2YmQyMWYyYWRiYmZkMTQ0NzkzZWY3NTRhCi1lYTVmMWNkYTMzMTBlODNkNzhhMDk4MTYwYzY2ZDZiMGM2OGQ0OTc2ODk4ZDlkYzFhMDhkMDE3NDBhYzNlN2Y2Ci04ZDNjZTBhN2UxMDkxMDQyNDhjYjg2MzE4NDAwYmQ4MmVmODk0ZWZkOWM5NDU2ZTk3MDU1Mjg2YzE0NGQzZWZjCi1kMjYyNTExMGYxYWU3NjI0MTA3OWJlYzE5OTM5YWM5NjJlMGJhODEzMzU5YzE1YjA3Yzc0ZDVlOTg2OGUyMTY3Ci1lYTExOTlkMjFjYTg4MjdjZGRmMWJlODM1NzI2MWJkMzJlNzlmZWE2YmM0NzU1NzdjNWY2ODQ4MzQ1YmNlNThkCi1mNTQzNTI4MTU3MmFlNmIzM2I1MzYwN2ViZWU2Zjg2MmQ0Yzc1MmFlZTQzYzAwY2RiZmQyNThjNzc2NWIxMzU4Ci01ZDYxNjVlZTAzNGU1ODE1ZGU3OWNjMjZjNGE3MjA2MDdiYWZhNjA0OTcxMGVlMzc4MmJjMmNkODRmZTI0NzNmCi0xMzM1ZDIwYTNiNmU5ZTgzNTVhZjM2NjczY2RiZTYzYzI3ZDRmMGUxODNmZWRhYjEwMDMxYjFlZTMzYjk1NzNhCi0yZTE5NjFiN2M2YmFhNDFmN2MzZWU3MDdmZTg2MDcxZWRlNTc1NmEwMGQ3YjNiZjBhMjFiN2MzY2Y0MTA5M2NkCi02NmVjY2NjYzIyZjQ1MzQ5MTJjYjkwMGIwOGU2OTU3NGIwN2YyNDYzMDVkY2JjMjM4NzgwMjc4YWViOGM5ZTU1Ci0zZDA5NmE5NDRlYzdhYTlmNjk3ZjM1NGFhMTM3ZGY5MGE5NTQ3ZWZlYzFjYmQ1NjhjYjk5OTk3OWY1YWVjNmFmCi1hODRlZGFlZTE1NjRkMTc4NTQxY2Y0NjMxMDgxNzgxNjA4ZmQzODk2NDI1N2NmODliMWM4ZTAxMjBiM2Y2YWYwCi03OTM1OTdhZDU1M2NlZTVjY2NkNWM0ZjA5Y2IwYjRlOTk4ZTZlNzYyNDMxOTFhZjdlOTM4MzNkMDY3ODMzZjBlCi01MzY3MGQ3ZTk5NmVkNjdjZmU2Njk5YTZlMzgxNTkzMmFkMjcyYWY0ODI5YzJlZTA4YTMwZDM5MzhjOTI4ZDFjCi1lODlhZjcxMTkyZWMxMjQ3Y2EyMzMwOTNhYWZhNTRmZmE1OGY0YWFmM2ZlOWM2MjMwMmU1OThmNGZmOGNjMzJjCi00ZDMxODM5MWY3YTM2ZDBkOGI0MTZkZDM2ZDc3NmIzMDE0MjVjYmFmODJkNTIwMTQxMjM4NzgxMTExYTE0Y2NlCi03OTI3ZTJhZjIxZWY4Mzc1NTgwMDI1MzlhYWViMTcwZmE3ZTdlMzdlZmQ0NDdjMzdkYjQ1NWQyZjA4NTMzMTU1Ci01M2YzYzVjM2JlNDgxNzY4MGVmZDBiYTNhMTE0ZGI2YWFiYTZjNGQwZDU3YjA5ZWY4YmFhZDQ2Mzk5NjcxOGMxCi05ZDE1NWE2MmQ3YWU4MmVhZTRjODI3NjBjNTk0YTZiYTNjN2VlNDI5MGYwZDg5OGJiM2U0MDRjY2FhOTFmZWE0Ci1lYWEyMTQ2YWM2YTIzZjZjNWE4YWFlODM0YTA1ODdkOTkwMDI0YmJlOGRlNDg1YzcxYjkxNmFkOTZkZDY2NzkyCi1hNzMyYTE4OGU2YTU3YzQ1OWViYmQ3NzU2Y2ZkNTQ3NzBlMmE4ZDgxYmQ0NjE4ZDkxNmEzMGVjNzA4NGIyNDkyCi01Zjc3YWIxNDE2OTU0N2VlZGZlZmI2ZjAzYzdkNTM2NWNlZjUxMmRmMTk0NjI4ZDVmYmVhNmNmNTZkMGY1MzQ2Ci1iNmI2YzFkYTFkZDhkODMyMWI4ODgwN2I1NzliYjZhMGM4ZjY5Y2Q5MTllMzExYjZhZGU5MDNiNDcwZjRlMGEzCi1kZDUwMTVjNjQzMjQ1MmVjZWMwNDhkY2QxNDgxNGU0N2RlZjRhNTNjNWNhNmZhOWU5MWQ4YTI4YzcxOWY5MzQ4Ci01MDljMGUxN2Q2MzJmOGNiM2Y3NDY4YmIwZTdmN2Y2NTI1YzA4NmRjN2VmYjk5N2E2MGUwNTlkM2Q0OTM4NDg5Ci0yM2U2MGY3YzY3ZmE2YWE4MDYyNTk0ZjEyMmE0OGM1NGFhN2MwNDk4NTk5MjhhM2RmYzcyNzUyYWNhZDA3NGFhCi00MTZjNjY3ZmNkMTc2ZGE0ZDdkMzFhOWY2YmU2ZjE0NmQ0YTlkYzc4ZjQxOWZhYjdjOWU2Yzc0ZDQwZWE2NTljCi0yNDA5ODA4OGJlYTI2YmY1YTcyNWZlNTYwMjVkMWZjZjg0NjVlZDcxMDM3MDJhZWY3NDk3M2Y2ZmI2OTdlNjQ1Ci1lOTAyZDY1MzU0YTQ0YmIzNDg5MDA3YzU1NWE2YTA4YmIwNTdlY2EyN2M5M2JmY2VlOWRlNDJlMjc4MmZlZDRkCi02NjRhZDdmMmQyMzhiN2VkYTFjYTRhZDQ3M2JiOTU1OWUxMWE5ZjIxNGUyNThjZTFhMmE2MDUxMjk3NWIxMTJiCi0zMzY4NjQyMzhhMzY3MzJjM2FkYWNiZmQ1MmM4NWEwZGM4MDlmZjk1NWY5YzgxNDAxZjcyMTA3ZjNkMjYzOTk5Ci1hNjk4MzZkNzZkMjI4YWI0Zjk1NGIwMGRhMDdiYzRhNGUxNjVmMmRjNWVjZDgxMzhjYzQwOGFjMjIyMTdiMTVkCi04YmFmMDQ0MDhkNGI0N2U1NTEyOWIwZTU5NmM5M2QxMGNkNDIzNzIyOTJlMWZmNDgzODY4ZTg1MTAwNzZmN2YxCi1lZDhlYWQxYmRlZTJiNDk1MzNmODdkZGJlZjJhYmRjYmNhNDMyMzA3ZjdhZDBiM2MzZDQ3MjFmM2U2N2U2MDliCi1iMDZmOGI3ZTY2YWY3Yzg0M2FhMWY3MWJkYWRmMGY0ZmI2YmFhYzg0ODE1YzgxNTRhMDAyM2NmYjY4MjgyYjRjCi04ZTI0ZTQ3OGY4MWY4ZDI2ZWY4MmQ2ZDBlMWRhNGE2NTQ3OGY0YTFmNjVhN2RmYjRkMTcwMDIwNzg1MGMzM2Y4Ci0xNDgxNThhNzg0YjQ1MmFjNjg3NDA4MDAzOWUyMjU5NDMxYzA1YzQ1MjJmMWQ2NzUyMmUyNzNiNDQzYWU5ODIwCi1hZGI1MzAzY2QwZDgzOWZmZDE3ZWIxZmM2OTU3MTU5YTU2OWY2NDg3M2I0YjNiZjk5MzQ5YzQ4NmEzYWYyYjIwCi1iNmI5YzQxMjYzMzAwYWIwODQ0ZDI0ZGFmNzgwYjRmMzI0ZWRhODU0ZDRlMjEwZGFlZGMwZTM0ZjRiNjdmY2EyCi0xMjY1ZWEzNzY0ZjhmNzU1MDA3YjYyZTllMThlODBiZDMwZjNiOTYxMjQwNjUxOThjMGE1OTg1YmEyMTcyNTUwCi04YzhlYWJlNzdiMjZkZjQ0NTFmNTA2ODk1NmZjZTExMTA0MWE3ZDIzZjY4MWZmMmMxYjkzMzQ0ZmU2ODg3MDhiCi02MWE0NzY3NGMzMThkMDc4ZmM0YmY3OTIxNzY1OTk4N2RjZDFiZGExZTFiNzQwNjg5NjAwMzZjNDcyOTA2MTUyCi1jYWZlNGE4YTcwMmQyNzFhMDJjNzkwZWEzZTQ0MGU0ZjQxNTU1NmVjNzAzYTIzYjdhYWY3YmM1MGM1YTMyZjdmCi1mZWU2NDI2NDMzZTk0NWMyOGJlMDM4Y2JlNWVlMGU3OTMzOTQ1ZjA1Mjc1N2Q0ODBjNThkNGQ3ZGM0YWI5MjRmCi05ODVlMDU0ZmQ1NTNkMWMwMzdiZWFiYTI5YjE0ZTgyM2E0MDkxYjA4ZWQ2MDJhNjlkMWMzZWIwZmQ2M2ZhYTkzCi0zNmRiMjJlNjU4OGQzZDJmYTcyNzkxNjE2MzAzMDk1OGNjODliM2NlOTlkZGVkYTYxOTBmOTdlMDM5Zjk4MjFkCi1hYjRlNGQ5YTE1Y2I1MDk0MDQxNzkwYjk5NWQ4OTUwNDEyYmJmMDQ5YmQxZDhhZmViOGJkZGFmYzZhZWY3NDhhCi1mMjUyM2I4MzEzZTEzZjkwZjk2NmMxMzRlMzlkNTJlMTBiNjNlMzBhYWRjYTQyYmJhYzU5NjJlNGUzZjcxMzM3Ci1iYzJmZDQwNjc5YmViNDRlMTExMjUwMzUyZjA0Y2IwNDA0MTU4YmFkOWY3NDQxNmM5NDAwM2JkMTJjODhkOWU5Ci01Y2FjM2EzZWI1NzU3MzNlYjQ0YTNjMzI5NDZkYWNkYjM0MDVmNWI0YTI1MTNmZGY5ZTZiYjJlNmUyMWM1Mzg1Ci02YzUyN2NjYzEyMGVhZjk1ZDQwMDg0N2RmYzllNmE0MDgwNjMzMDQ0MmUxODk1YjUzYTYxODhlNTdjNjViNDY2Ci1kYTIwMzc4NWZjMzIyZWZkNjRmMmU2ZjY2Zjk5NmJmN2NhMDM1YmIyMTE3NjQ4YTg4NTdmMWIxMDQ2OWFlZTEwCi1kZDIyZDc4NWRlMjdmMDFmMWQ3MjViNTZiMzgwOTE3MDA0YTA2YWZjMDA0NjMzNWY5N2EyZmYyMGVhNDRmNzk0Ci1jMWRmZDZiMTA3NTQ5ZTM5MjQ3YTVjYjNmOWMzN2FmODQ5ZTljNWYwNjIxNGE1NzAxMTNkOTFhZDRlMTRkOWNiCi1hYWRmOGVmOTNhOTMzNzk1YzBjYmZiNzIwNGRjNjA1YjRiM2I5NWI5ZmVkMDM3MmQ4ZGY2MzRmNzI5MzI5OGEzCi02YWE0YWJkMWYyMTJlY2Q1ZDRhYzQ5ZDQ2NzU2NzM4NWY4MGUxNjNiOTQ2NGY2NTU0ZTQ4ZmY3OGQ0NWFhNDAyCi1iNWVlMDkzYThmOTZkYTQ1NTA0ZTQxYmZiMWE3MmY1NzkwMzFlZmE4MDE2OTBhMzJmNGUyNDhhNWY3NzMwMjdkCi1kYTNmMzcyMWQ0ZmI0ODFmZDFiOGU4MTA1NGFhNGE3MDBlOTk2NGE4Nzg3MWUwMWYwM2ZlODBhYzQyMTVjZGYyCi03YTQ5NDRjZjg5YTg5MzYzODczMDYzMTI2MTExNGY4YWFiOTY3ZmUyOWUyODAxMjRmYThkNTFmYzk0YjFjNTUyCi1kYjU4ZTAzODA5NzE3MmQ1ZjYzNGNlYWZiODc3ZDdjYWNhMDM0MzZjZjZiZjQwYWZlNGRjOTljZTA4ZDM2MDVhCi03OGUyYzkwZmZlNzY2ZmQzYWMwZThiMmFiMjQ3YzNmNjg5YTU1ZTM1MGNiZTgwYTlhNDUyYmY4NjY2ZDU3MTBhCi02ZmJiYzQ1ZTQ2OTBhZmM2MjViYjdhOGEyOWJjMTdhYTU4MmI2ZTIwMGJkNTEyM2UyNmIyZDQ0NTk5MmEzYTVmCi03YWExMjhjM2Y2MjMwNTg4YzQxYzZjNDU2NjU1OTYxYjgyM2U2NWQ3NDcxYWQxNmY5YWVhMDdjMmIzZDM5YzQ1Ci03MjZmMDIzZWE0NzgwNzE5YTM2NTZhZTE4NjcwZGFhM2JjMDg0ZTYwZmRmMmJhMWZmMDIwNGYyODVkNzJkOWE4Ci0yNjk0MzBlNDA2Y2QzNjc0MWJiMjI3YTFhYTI4Y2VkZjk0ODQ2ODlhNzhkZDU0OTUzMzdiZGU2NmI1YTc5MGZlCi00YWY3NjFjMGI1MDVmZjk3NGU0YzdmNjczNDhlYjE4ODdiNWI5MzE1YTdiMzQ1NWQzNjc3YmM3N2I2MWQ0OGVjCi1mNWViZGM3M2IyNWVlYWYxMmE2Yzg5NmE1NGI0OTliYTVmMjg5N2I3ZGE5NDY1YzM0NTYxYjIzZTBlNzQwZWVjCi1mYzdhZGY5NDQzMjllMDAzZjUyNjZiOTRhNDI1ZjM4NjRiMTY3YTM0ZDBiOWQyNTlmY2Q4ZDc0MWM5ZGMwZmI1Ci1iZmZiOGM4Y2VmNDcwZjkyM2Q3OTYyY2I1ODA2YzY3NzYzMzU4YTlmNmNjZjc4MjIwZjI4ZTQ1YTg0YjBmZjM1Ci1jNTg1YzE4YjE5YzYxYjUxY2JlNTgwMDdmYjg1MmUwYTkyZWQ2ZDcwNGYxNWZmMGY4NjM1MjhkYjcyZWEzZGQ0Ci0zZWEwYWY0NjZmYTViNjBhYzQ0OTBhYTVkYjE4YTY0OWM0NDJhNjBiNGY4MjRlOTE0OTE1Mzc2YTEyN2RiZTMwCi04NWEzYzU2ZWY0MjMzNTc5Yjc1NmViNjJlMDRmZWEwYTU1NTAzZjg4YmZkZjAxMTQzNmQ5ZDUwODhlMDI3YzI2Ci1kYWE4MTY1ODQyYTRkZGQ0M2ZjM2FiOGRhZGJiNGQ1M2M1YmE5YTViNTFmMzNkNTA1ZmUzZWQxNjgxMDlmMWYzCi05YWM1YzMzNTdlNDhjZDllM2FkY2NmMmRhYWFkODMxMDAwZTI3MzA3ZDZjYjJhYTZlY2Y1ZjkyY2ZmMzliMjY2Ci03M2IxZDM1ODdlMDI5MzEzMTAxYTkwNzVhYjM1ZGUyNjBmMjNmM2QzYmFiNWY3YTYxMzRmZDA3YzA3NmRjZDk5Ci03YmYyZTdjNDBmZjBjMGZhMTA5NjMxMmI3OTFkNjM4YjAwMzgxMzhlZDVjNTc4ZTUxMzA5NDQ0NjkxYzFiMTgyCi04YjM0NmZlMDI4NmUxM2UzOTA3YmVkYTEzMDQ0MTc3Yzc4OGI0OTQ4YTRkZDM5OGFhOWZjMzE3NjY1YjI1MGExCi0zNTcwYTc4MzgyMWRiNTgxNTliODI1YjE0YzJhNjM5ZjYyOTk1YTA0OWVlZWI4OTA0MjI2YThmOGUxNGE3OTU5Ci03MzFhNzRkYzRiMjE1ZDdlYzA5NWViZTg2YTNiZjA3MDgwY2RiMGRjZTZkMDZmY2MyZTNhNTdiYjA0OTQ0ZjkwCi04ZjM5NWJkNjUxMTc5ODRjMTU5NjMwM2MyNzgxZTM5OTdiYmZiNmFiOWYzNTRlYmNlYTc0MDQ3ODVkOGRmYjA0Ci1iMTlhM2E2NzkyODA3ZmU1ZGViZDZlZWVjMWJhOWJhOWEzNzQ3M2Q2YzQzNWJkZWZkNWIyZWE5YzIxZDllYzc5Ci0wMDQzYjVhZDFiMGE1MGY5YTI0NTk0ZDAwZjhmZDE1NTY4MWMzM2RmOGYwYzBiM2NkNWE0ZmMyNzVkYTY1ZGZjCi02YzY1ZWQ4NzEzOTU2YmI5NGI2MjgxYTRmMzljOGVmNzJiOTMyYWRmM2Y2ZWNmYTY5N2ZmN2Q4NGY5M2U3YTI5Ci04ZmFiN2I0ODE3MmUzMmJhN2IzMTM1ZjRhMjUwMTk2MWY0YTFjNTA0MDNmYzM4YzcxNTc0M2I1NTA5NWVjYzFhCi0zOGYxMWYxNDc1NTIxZmEwMGY5NTA3NzYyNzllOGEzNzdmYjRjYTQ4NzBjOGRhYTRmYzY3ZWZlNGRiOGUzN2MwCi1kNTZhZDkzY2QzMzRlYmUxOGRkNmQ5MmEzZWE0OGIyOWU3ZTc2ZWVjNWU4YWEwZGIyMGFkNjkwODY5MDUzNDIyCi04NTY3YzRiNzJiZTIwOTM0MjY2Nzc5ODhmOGFjOWY3ZmNkZTBkYWM4YmFlMTc1MDY2YTQ4NWYzYjFkMGMyMTI5Ci05ZTM4YTkzOTk2YTBlYjdhMzM1N2VlNDNiY2RmODc0OWJjZmQ3ZTdlMGEyM2M3ZDllMTE4YzRkYTdmZmY1NjYxCi0wNzQ1NGZjMWFiMjhhODc1YWY3ZTUxMmIyNDMyMjU2YzQwMWVhNDYyZDlhZWIwYTJmOTcyNzBjZjJhYThlYzUzCi0xZTUyNDhhZDUyYjFiNzRhMzc2ZmFhZjc3NzJlOTQ4ZjQzM2NlYTJmMGVkNGRhYmVjMDA4NTVhMzk0ZmVkYjgzCi0xZGFmZjFkOTc3ZTliODE2ZWJkMjc4MDE1MDVkY2FhNTFmOWFiNTMxZTZjMTM1OGIyNzVkM2E2YmEzOGY0ZjRjCi01MjhmMmRjZWVhM2E0MDRhNjM2MmUzY2ZlZjlkOTA0YjU3MzU3MWE0ZTYzNGQ0ODUyZjNiOTIyNDk1YWYxOWMzCi1jNjNjNzM2ZDFlOGE1YjE1Y2ZjNGRhNThmMjZmMjJiZTIzM2I0NTc5Mzc3MjI3MTEwZjhmZTViMGRmNTdiNDk1Ci0yYzE0ZDIwMTFiNjIxNWI4NTVjMzZkOTAxZjAwMWUyNDI2MTA4OWY1ZWRkMzlmN2U1YmJiMmJmOTBjNmY1YzVlCi03YmE4OTI4NDM0ZjUyNjg5MzY1ZWQ0ODEyMzQxNGVhZDJlMDBmODg2MGU2MGFmYjVmNTlkMjcxNWM0ZWUyYjNiCi0yYjEwMzk5Y2ExYzNmNzAyNTljNjM3NjJmNjRhNWExY2I2YjE5OTUwMzBhN2Q3NzVhMDRjZDc3YTk1NDM2ZTRiCi1jM2IxZjNkMTk1OWRlZDlmMzVmZGQ3ZmNkZTliMDUxMjQ1NDQ2ZGNhYzExZmIzZDAyMjhjZTRjMDEyYTJmMjAxCi04MWVjM2RkMmFhMWJkNjZlYzAyYzkzZTQ3ODQyNjhmNzU0YzlmMGViYTQyZDI3Yjc1NWJjNThhZDAwZTA5ZTA0Ci1lMDVmZDIxZWQwYzE2MDM1M2QyZjU0NjdiNTkwM2I0ZTFkMWI4NjY2YWNjZTA2YWRhOTljMDYzYzY4NGQ4NzM4Ci0zZDMzOGM1Nzk1OTVkMWUyYWIzMDFjNDIzNjE4M2NmMmMzYmUwMzIwZWU4M2NkZTRlYTA1MDE2MGI1ODc4N2YyCi1iYWQ4MTU0ODI1YzliMjljYzE0NjgyZTE1ZGI1ZjUzYWJhMTA5Nzk5YzEwZjI1ZmEyZTU0NTYwZmRhZmU2YzkxCi1jMjQ2YWU1NmVkZWJlMGFhMzBlMTUyYjYxZmE2NGU1MTdmNmNjNDFhYzdiM2MyNWVjYWRhMzNlM2Y2ZDZlZTVmCi01NjI1NDJlMGU2NmQ5YzA3YWE5ODg5NTA1ZDUxNDUyY2MyZWU3M2UzNjgzZTNmYWJlMjZmMDAzYjg3ZDlmYmRjCi1hMzc2ZTg1YWQ5NTQ3YzIzZTQ2M2ZhMDczNDI5ZDMyY2EwZTU4MzI2Mzg1YTg5MTA2ZDViNzJjZGUzYzAwYzExCi1jNWY0MGQxZThiNjFlNmNiMWNjNjQxNmUyOGFmYTZjYWE0Njk2ODJlYzgzNjUwODFhMjFkNzdhOGIxZGY3MTY3Ci02MzQ0MjI2YmI5YTc1MzNjMGZkZmUxNTM4NzhhM2FmMzA4OGU1MjBiOTQ5MzNkMDA5OWMyZmY4OTk3NGJmNzk1Ci1kODcxYjllNWQ0MGNkN2FhYzcyYTk5ZjM1MWQ4MjRmODZkMzNjYzg5YmQ3MGRkNDFmMWE4NjY2NTdiYWMzYTU4Ci1hNGVlZGY5OTdlYjQ5ZjhkOTY3ZTE0OGYzODFlNzUzZDVlNjcwODBkMjg0M2Q0NGEzNTg1ZTA3ODYxNWJlYTQ3Ci02Yzg4Mjc3M2Q5OTVmNDE1NGZkYjc3M2E3ZDllMjlmZTQ2ZTQ2NGU2MDJjZDIwNjA2M2M5NmZjNTFjMzBmZmVkCi1jZWNkZmEyOGE5NTFkZDUyMTFhY2Q2ODRlZDNlZmQ5ZmVhYTVhYTk4YjA5MWFlY2U4NjgxOTk5ZDdjOGNlNzA4Ci0xYzY0ZjA5ZTE4ZTY0MTk4Yjg0MWQ3ODI0ZTAzZGUxMTEwMTQ5Mzk3NWVjYjFiN2Q1NTY3MTQ3MjVhMTRiZGI0Ci01ZDkyMzdlY2Y2OTMyMDIxOTg5NjRjMTU1NGEwNGFiMzQ4NWJiZjlmZjg2MzQ0MWRhMzUxMWQ4ZmU2MzYzZTMyCi1hMzhhMTFmNGRjNmExZWUxOGJmYTNhMWMyYzkzYTkwNjc1YjBjMjE5NTkwNTRiMTdiMWFmNGQ1MzNjODdhYzY5Ci0wOGQwYzM0NGZlODE3ZDY4MTdhNzRmZGI0NmYzNWQzYjQ4YjkxMjg3ODRmNDNhNjhkODA5NDI1YzY1NzBjNjAwCi05YTc2MTk5MTExZTg4YTFjOTgwMmRlNTU4MzMyMDAwZGJiOWQxMjExOTI5ZDUwOWFmNTkxNWI3YWU4ZWExYzNkCi1kMjU5OGY1MDA3ZGU4ZTczODNmNzQ1M2ZjNmE5YzBiOTFjODBlOWIxNzQyYmY2NDE4ZGNhNjk0NTA3ODVmYjczCi0xMmRkMjI4ODg5Y2ZiYzNmNjcxMWEyNjAyMmIyOWY5Mjk1ZWUxY2E4NDU5MzA1ZmJmMmI5M2NiM2ZmZjViNmU3Ci0yYjVjMWQyYzRkNDUzZjBiOWE1M2I2ZjM2MTEzNmIxMDQ4YjMwZTdjOTBlMGRlOGVkZGE0MjNlNTVjY2IyZTJlCi1lZTdiNTAyYWYyYmFmMzBhOTJhZjU0Mjg2OWI4ZjI2ZWUyODUwOWRjMDE0OTIwOTVlMGMyN2NjYWEzMGUwZGI2Ci0zZjAyZjExZGMwY2U4YTk0YjhhOGE3ZWY3MzVlNGZhYjA0ODMwZWYwNzdhOGQ3ODhiMjI0YzE4NDMzOTI3NGZkCi01ZjdiNTQ3Yjc3ZjgxYmFkOTg1YzczYjA1YTc5ZDNjODY2MWE5YzJiNzFjNzMxM2Q4YjljYjUwYWUwM2FlZTk1Ci0yZGJmMWFmYzlkZGZjMDBkNTllNmY5OTAyMWRmZmJiNjZhY2RkYWVkZjQ4ZGY1NDYyZmM1MjhkZmRhZmE1ZTViCi1hMDM5ZDZiYjliZGQxYTc4ZTQ3Njg0YTNjNTNjYTMwN2FiZDU2NjA5M2MyYTRmNmI5ZjBiZTUyZDRmMWYyNzU4Ci1lYzQ4MzcwZWFiNGUxZTZhYjM5M2EyMzM1OGJhZTUyZmVkM2IyNzAxMjQ2MzlkZDBhNTZjYTZhZmNlNzc0OTRiCi0zNGY0NjQzM2NhYzkwZWI2M2U3ZTBkMjVkZTZjOGEwNjcwYjE0ZTgzZDA4YTUzMWNmMjE0ODAwMmY5YTZkZjE5Ci03Zjg3Yzk4OWI4MzFjNTA5ZGYyMzA1N2IzZWM1NjllYjVmNWY1MzBlZGQwNDdhNTNiNWI1OWY0ODM3MDNiZGNmCi1iNTc4ZmRjNDRjYTc0ODdlM2QzOTQ3OWNhNDc2MDQ1N2U3MDE4YWYwMTExNmIyOWJiZGY3YzNlMGY1YzA3YThmCi03ZjUwMmMxNTA1OWQ5NjM1YjdjZTYzMDE5NDk2MmU0MTgzYzM4MzhkOTQwMTI2MGE3NDNkOGViYWUxNjY1Y2U4Ci03M2JjZmU1ZDA5MGE4OTg0ZTk4MDMwZmU2YjIxZGJjYjQ5Mzk4YjY5MDVlYzA0ZWQzMTBlMzdjZDA2OWE4NWQzCi03Y2Q5ZTNhMDJkZDhlMDM2YjJhNzkxOTJlYzAzNmNmN2UxMDY1M2UwODkyOGNiOGJmNDkxMTEyMmQyN2UxOTVmCi00OGQzZGZhYTM0MTIyZWYyZGY4ZTAyM2M5ZWExZjI0NmFmMjg3OWY1ZGY2MzI3MTliZjdhOTFmMjY2ZDgyM2FhCi1jYWVmY2UwNjdiZjc0ZWUwZDYyNWNmMTI4YzM5MzBhYjgzNTIxMzgwZTBjZWI1ZGFhMjM4NGRhNGFiMjNjMzRkCi0wZGI4YTRhY2NlMWEzM2I2ZGVlYTM1ODFlZmU1MjEyNzkxNDdhYzFiMzZlNGY2YjJjMDhkZjJiMmRiYWIwNTFkCi0yNjRhMjUwYTA2ZWQwNmFhOTA2YzI2ODJhZDJlY2RjY2JmZDg4MDk0MWJkODI0ZDAyMWYwODY1NjBiZmJiMzU5Ci1lMjUxOWEyNzA4YTQ5NzZmNDI5MTM0NjVlMTg4NzJhOTNjZGE4MDlhODU3MzBhNDkzMGVmMWUzZTczMzI5MmM4Ci0wNmM4MGM4ODY1NjQ1YzZhNjliMTI4YjEzMzNjM2FjOGM2MTZkM2UzYTAxNjNhYmE1NGM3YTUxYTA2M2ZiY2UxCi00MDE4Y2FiZTFiMWViZGFmYWVmYzI3ZDJiMjJhZmM5NjQ0OWNkNTE1Y2NlZDY3MWJhYTg4ZDUxYzVjNzc4YmZlCi0wMDIwODEyN2YxZmMzNWRiOWM2YWZlNGZjOTFkZDBiYjEyNzcxODE1MDhkN2I5ODY4YTA1NTAyNWM2NTM5NGU5Ci1hYjdhOTU0OTQxMThkMjBmYmRkN2NlMGI1ZjExNDkyZGY1ZThjNTRjMWNlMWVjZDJlNzI3OWUwN2ZlNmE2MmQ1Ci02M2Q3ZmZkMzhmMDRiYTc1MDU3Y2YxOTAzMTk2MzRmNTdhYTI0NmYwM2Y1ZjkwNGZmOTUyZDdiMTAwNmQ0M2JjCi1jZTg4ZDg5YWRlNTJlODYxYWVmYWQ1MzhiNjQ0OTQyYjZiOTdlNzc4MDAwZGUyZjJhYzJiMjI4MGQ4NWE4MjNhCi0xNzZkODM4N2NhNDIwYTQ0MTk4MGQzZTg2NjYwNDMyNTkxN2Y3ODU3MmVjOWJhMTRhMDk0NGUzNzQ4MGFkM2ZmCi05YzEwNTkwYzA3MDU4NDBkMDljOGJiMDc2YTVhYWU4MWI1ZTMxNWNhOTAxZTI2MmI3NzMxNDNhNTU0MzYwZmRhCi0zZGM3OTlmZDA3NDgyNjY2ZjQ3YzE3ZDhhNWJhZDZlZmE1M2YyMDcwNzg2OWM1ZmQ0MGQ5NDBhODg1MzEwY2Q2Ci1kNWNhOWMzNTE3MzFmYTY5ZmRmMGJmYjE0OGUxN2FjMjZmZjQzYmZiYjM4YzEwMTg2N2VkOTVkNzg5ZWQyYjBmCi02MTgyMDI0OWIzOThmYWMwYzVlZWUzMjAzMjk4NDMwMmViMTgwNGI4MmJhZDUxNWQ3MjEyMTM3MzJhZDQzYjk1Ci1kNGEwMmUxN2IyMjE1OWNhMjllMzAwMDQyODA0Yjc1ODA3NzgyYjliZGE0OTI1NWNjY2Y0ZTM1YzQ2MWZmNTliCi02NWUzNmY2YzYzNDVkYmIyZThjMmY1NDQ1MDMxOTk5YzJkOGYwNDQ0Y2Y0MTk4YWMxN2RiNDgxOTljM2IzZmVjCi0wMmExMzBkMjMwYWJhNDU2NDA2ZTEwNzAxNzhiZGFhZmM0MjIzNDNlZDllZGJmNDcxYzk2NWQyYjg5MTU4NmRiCi1hMzRiYjJkNjZmOThmNzE2ZTYwNTc5OWYzODAwYzY4MDAwOTQxYTUyZDY5MTY0MDU4M2NjZTExYjk0Y2I1NTk5Ci0yOWZkMGQ1ZThhOTMwNzgzMWZlMTVmY2QyMzJlYjM2MTcyMWQwZGE5ZTdjZTExMWZmMWViYzI1NmE0MDczNzJhCi0yNTMxODBlNTFmMTgwMGZmYjAzMTNjMmMzZjNjNGZjZGRkNTlmODI0ZGNkMGVhYTFlNTk4Mzc0ODcyODhiNTU4Ci03ZjhlNmQyNzk1NDIwOGZiODE1ZWQxZDU0YTM2NDc2YTk1YzY2MDc1MWEyY2U3ZDQ3NWM3MmZmMTc4NGMzNjNmCi1hNjQxNTk1ZWI5MmU2NWQ5ZTdiZmUxOGVlZmZlZGRmZTgyZDlmNmYwY2VlMzdlNmE5ZTYwYjQ0OTM5MjYzMjcyCi00ODE2ZGY0MGVkMjQ1NTFmMGQwN2Q4MTNhYmE0OWE4MGJkMzU2MDE4OGU1ZDAxNzAzODVmZDE1YzM0YjQ1NDY1Ci0zZDVkNTliZjc2MjRhYjExNjQ1MmFjMjhkYzkyMTdiMTFjNzVhMDhkNjhlNTViMTBlOTU2N2E5ZDNkOGQ1ZGE4Ci04OTExNjMxOGFmZjI1ZWZhYjYxMWRhNjllMTMyYmEyZmY4ODhkNjhjODRjMDU2NTQ0YzBmZTkxMzdmYWE4MzQ0Ci00MDA4NDg3YzM0ZmYyYzIzNzY1NThjZTIwMTA4Zjc2NTgyOTY1ZmIwNmMyMTI5ZTYwN2EwZTYwODg5ZDk3ZmFjCi0yYzcxYTAyNjI5OWIwNzFlYTdmOTk5NWE1NDJiN2UzMWVmZWRlOGE0ZDM0MTIxMGEzN2Y3YjRiYjk2YWE3YzMxCi1jODczY2MwYzNlZGZmN2IyM2Q4YTIyZTdlNjAxZmZiYmFiMGY2NzFiMDJiYTQ4N2NmNmI1ODhlYmVjZDI2ZjliCi1iN2U4ZGUwY2JkYTg3MDY2MmJjY2E5MDcxNmMwZmY3NjhhOWM3YzY5YzFkY2I0MDg2ZjFlODgxYzZkZDViM2Y1Ci0wYWM1MTdjYTA5NmYyOGIxYzdhYzkxOTVmOTllNDRkNDQ0MDE3YTNiZDU0YTY4ZjQ1ODhmMGE3NTYyNTUzMDUzCi04YmZhZjc3ODhhNzI0M2MzMDQ0NjIxM2JjOTg3ZTMzODM5MTNmMjRiMzZiMzNlNGIwODJlNTA3Y2FlNjMzNThjCi05Njc1NTk5ZjZkNzQ2MzA1YTQxN2ZlODg0OGYzN2JmODVmNDUzNWUyOGRkYmM1ODY4ZGQ2ZGJkMzE0OGNkYzFmCi0yYzJkMjI0ZjAwYzNhZjRjMWRkYmZkODhiZjc5ZWVjNzZlNDVlZjU0NmNhZTU0ODgyNWEwYmNhNmJmOTNiMGIxCi0zNzNhZjYwYTdiMjRhNzUwNzlkNjY0NWQwOTA4YTlmNTVlZDBmZTczOTcxMDBhNzMwYTZmNGU1NTY3ODcxNGJkCi05MGM4ODdlNDZhMmM3NzAzYjEzYjFkZGE3NGE4MTliOTdhYmZlNjI3NWEyNGU3MzkwMTU0MDE2ODczN2E4YjMyCi1jYTE5MDJiNzU3N2I4NzYxYjNjNGE2YjYwZGZhZDQ5MGUzNWQ3MWM1ZjM1ZDhlZjM4MmZlNjY0MzMzMzY5NTFkCi1lNGVlOTgxZjk4MDE2ODg1MzQzODc1NWYxMzVjMzMzYjg3MjNkNTc3OGUyZTMwNjdkYzczYjdmZDk5YWFmYmUxCi1kNWEyZDFjZjQ0MzkwNWZiNDU3MzBjZThmZmYxNDY3NGFiZGVkOWY5NGI0NTc1NmE2NDZiNGNiMWY3ODljN2U4Ci0wNzQ4ZjM2NDFhMjJjMDFiMTBhZGJkYzc3NzYwYzBlMmEwYjkwNTVjNGY5MTA3ZDkzNWY1YzJmYjJmZGQyODQ1Ci02ZDZkMmQyMDk2ZTRiYWYxNGJjYzhkNzE2YWRmMDUzYmZlNDA4NDVmMDJjMGQxOGZjY2M0NTNmM2Y4ZTQ1NDU4Ci02OWY4MDJmNTA2Y2EyMWQwZmFiMjRkN2YzZDZkNmMyMTk2MzdhMmRjYmM1ODYxNGMxNDU2YTljNmIwYjBmNTdkCi0wOWNjZTY3NWZmZjRmNjI2YjFiNjhjMGE2M2ZiOWExNjE0NWQ1ODE3NmNmMjdmZjVkMzUxM2RiZWM2MDE0ZjNhCi0yYjVkZTdjZTY5YzhhYzJmYzE4NGJhZDIzOTUwYjI4Y2YwNDE0ODAxNzY0OTY3ZmY5NzAyMmNkNDg2NWQ5OTRlCi01ODVmZjJjOTkyZDQ4MGRlMzFmNTQ5ZjI2YTE4ZTQ3MjExMzNmM2Q4ODMxNjk3NmJkYWU0MTQzMWQ0NGVjOGQ3Ci00ZWFjYjI5YWViMTMyZmY0OWUzYzY0NmVmMDI1ZWI1NDFkY2M1NGYzOGI4YWViNTYyODg3ZWQ2Y2RkMDdmZmE2Ci1jZjNiMmY4OWU0YjBmYmI1MjI2NzAyMDY4YjgwNDNiNmUyZjI4NGU0MzUwYzk3YTc0OThlNjQ0MGJjM2M4ZDJkCi0yN2Q4YWExZWFjOTgwZTk2MDYxMzE4MGFlNDIyNDYyNGIyYzZmOTJlZDQ2NjZlMzkxYWU1ZTE1OWMwY2UyMDdhCi03NDMzZTQ2MmNkOTJhZWI2N2ViODlmZGNkMjBlNDZmMTdmM2QxNWVlNjc5YzA2NDE3NmEyZGIwYWQ1YzM4ZWVkCi03NTk1Y2Y2YWI5NzUwZmNhNzZlOGU1ZWEyNDQzYjlkMTNkYTM3NWNhMmEyZGM4N2ZiZDNkODFlZDU4ZTM2NmVmCi05NDk1MmNiZDkxODEzNGVhMDhmOTA1MTY4NTQyMDdhMmZkOTI3OTljNDEwZWQxZmI2YTljMzY4NzdkMGI3NzdlCi1lZjU5YjAzZjE5YmM2YjhmZGE5MWFiOGFlMjFjODlkMTE3ODI1YTE1OTU0NjZkYTEwZjIwYjg2ZDZkMjIzY2RiCi02OTc2MzEyYzdmYjdiZmZiNThmZWFkZmNkMDE5YmFjZWRjZTk2ZWMyMzliNWE3OTkwMDVlOTRiZGVmYjllYzQwCi1lNzE3YTU5NzMyNmI1MzMwZjM4ZmJmNzA4ZDAwMmM5ZWI4ZDhlYTA4MzQyNDFhMzVlM2EwN2E1OGEwMzBlNjc4Ci01ODEyYmI1ZGUxY2I1MTE0MjZjZjQ5ZmYzOTY0N2RiNjVkOGE3ZjJmODdjYTVlOTAzZWIxNDc4OTg0YWJjYzE3Ci1jN2VlMGIxZjdkMWU5ZTNiODFjNjYzYWJjY2U3N2E5MGYxY2ZmMWIwMWYxMTZkMjk5NWU2NWNiYTBiM2YxYTNlCi04MDA3OWVjZTJmYzI1ZTBmNWNmMjQ1MDdjOTllNWI2ZTg3YTQxN2NkZjI5YTFhOGM1OGFhNzQ3YWZhOTYyYzI1Ci0xNDY3MWZiZTQ2N2UyMjkzMWE3MjNhMjM2YWVkZmY1Njc2YWNkZTZlZTcxZGM5ZWVjMTEzMDFhZjk2OTI3Mjc0Ci1hNzMyODEzYTQ5YTQ3M2VkYjdlOTg4NmI2YzQ1NjA1NjgxYTU2M2YzMjc0NWQ2MGNiNGEyNmE3MDY0NDA2NzU2Ci1jOWFkZDcyNGU5YjQwMDA5NzM3NzI1OGU4MWNmZTA4NWIxYWJkYjNhMDAzNTQzNTNiNTBjOWJkMTFhNmU2NTVhCi1kMjY0YTIwMzcwOGY3MzlhNDZlNDMyMmExYTgyMDRlMzJhZTM4NWQ0Zjc2OTRkNmFkNjNmOTc1OTg2ZmZkODY5Ci0zNTViN2VhOWMwZmVlZjhmNmQ3YmNjZTMxMjhhMGU0NTg1M2RlMGE1ZjQ0MmJiODA1MTY2Yzc5MDZjOWYxMDIzCi1kZjcwYmNhNjgzOTA3YTBiYmMxMTI0OTY3MGY4MWM1MjI0NDFhYTZmYzRlNzg4OWEzOGQxNWVhZDhjYWQ0Y2NmCi1lOTVmZjU0MzhkMGVkYzQ1MGU2Mzk5ZjAyMjhlYTMxOGRjMjk3OWU3ZTVhMzZlYjc2ZjlkODEwNjFlYzhjNjE1Ci0yMTdkOWRjN2ExZDA5MjRkZDk1M2FkMmI3NDFlNDgzNTc5NTNkNDMxODZkYTc1ZjM0MGM1OGI3ZDJhNmM3ZWFhCi0zMDM4ZmE0YjY2YjBjY2VhNTFhZjk2MTBlNTU1OGQ4MmJmNzlhMzAxZDczZDU3YjZmZWFlZjMyZDZmMTllODAxCi1lMzdhM2MxZWEzNDFiZWUwODhlMzIyZmFmOWFiNWFiMTkzNGI3MGY4OTQ4NTM5ODRhYmQ1ZjM0YzRkM2ZlYTA1Ci01YWI0ZmM3MDE3OWNjOWYxMzc5Zjk4YjNkMWY1MjlmM2MyYWE0YWU2M2I4ZDJiZmQ0NmFmZGJjZGE4ZWExMWJlCi1mMzJjOTNlYjRkNDM1ZmMzNzQ4NmExY2JhYWRjM2M5OGRlNTgxZWJhZDE4ZjM1MTc1ZDdiM2U2N2M5MTk0ZDViCi1iYjNjZDE5MThlODZkYWFjYjg2MDU1YTU0OGZhYjA3Y2U3YzkzM2JkOTg0ZWI3MTM0MDVkMmIzZjQ4MTI0NDMyCi1hODhlMTBiOTdmN2JlM2EyNzA0MDU1OTRkM2UwNmMxN2I0NzcxOWUyNjc4ZjBmMDY5ZmYxYWJmZTdkMzY3MmQ3Ci02YTc0OGE5ZTI3N2ZmZGQyNWY1NDc3ZDBjOWQ2MGQ3ZThkYTllMGVmMzBlNWZkNmM3MGQ0N2QzMTYzN2JjMGNkCi00ZDY3ZjVlZDJiMTAzODg5YTYxZmQxMTA3NWFhYmNlOWYyNTE3ZWM5YjUzZDdkYjViMjc3OTBkOWJiMWUxOWMzCi1kN2MzYTdlMWI5NTUxNmVlMzgwNjJkNGVhNzU5MTUxZTRkZTA0NDllNmFhZTc5NTAwYzQyYjRlZmU0OTM2ZDBkCi0wMDBmYjMzOTEzMzBjMDM1ZDlkNmI5ZTI1NjcxZjlhYzU5OWE0MGMzN2IyNDM5YzA2ZmRmZDk4OGFiY2JhZjc3Ci0wZTQyZDMyNGU4Y2E3ODYxM2YzNWVhNjRhYTg4YzNjNDNlNTFjZWJlOGVkMTA2N2NhZDk0ZWEwMzg3NzgzZTAzCi1lNzZhZjQ3NGY3MzliOTI0OWQxZTk1ZWVmODVhYjUyOGU4Y2QyZGE5OWUzM2M3ZWYwZWU5ZGY2OTRkYjQzZjNkCi1mZTQ2N2U2ZmQxYjUyOTFlY2JmNmIxYWM3YTI1YzAwMmRlZThiZTA3MjdlYzU0Mzk3MTViZmQ4Zjg1NDg0M2VhCi0xZDA4MDY3N2Y2NDg4OWQ3MDE2NWYxYmFkMTEwYThiYWYzODg1NjI5ZjhkZGJjM2QzYjA5YzU3ZGVhMjhiNGY2Ci03YTNjMDQyY2U2NGQ2MzZkMGJkZWY5MjBhYjVlZjk1NDRmNTJhZDUzMzgzNzg2N2M0OTMwZmQ0ZGQzMjEzZTE4Ci1hZTJjYTYyMmUwZTIxOGIxYmQ1NGJkNjBlMDFkNGNkZGZjMmU5YjY0YzZjOTllNzlhYjJjM2U1MmNiZWZhNTk4Ci00MzQyMTNkNDc1YjYyOTIxOTBiODliZTk1YjNjNjY2MDEzM2UxYjQ5OGJkN2ZmMmZkMTRhYWIyYWNhMGRmZmFmCi02MmQ5ZGYzMGMxOWNhMGU5NDkwMDdkY2Y4NDUzZTcwZTYwYTUxOTY3NGQzMDU1MjNkMzNiZmMzMTE5MDM3MjM2Ci0xOWNjNGFiMTcwN2RiMmM0OTg0YzZkNGZiNDMxMDkzMmU5ZWRlNzgwOGNmYzdkMzQzYTdmZGEwODA2ODk2NmQ0Ci03ODc3ZDdkZTdjMGY1ZmZiZmFhZTU2NjZiZTNiZGI0OGRlMzFjNWFiNmJjZmE3ZDM1ODE2ZTU4NjJiYzRhMTNjCi1lY2YyMzU1OTM1MDQwZmFjMzcxNDFmN2JlZjdlNThmN2IwMjVlMTg3ZGYzOTUwZWRmZDZjZWEyMGQwNjQ5MDcxCi00NDJiMjkxNmViY2U1ZjRkM2NlMDU1ZWZkYWJmMWMyZGMzNDhhYzBhZTY3NzdmNjc5ZTJmNjJhMGEzZWU5MTI0Ci03ZmM4NTViZmM2ZjBjMzM3YTc0YzQ0ZWExZjVkZDMyY2U2MTgzYTRjODBhNmI5Njc4NjFmNjEwMWMyOGI3MmRhCi1kNmFhMTEyOGYxOTY2MjdlMjQxNzljMThmMzg0ZTI3Y2Y3ZjgxZjQzMTM4MzgxZDE3N2Y5M2Y4MDgyY2M5ZDU2Ci0xYjNjOTlmMWJlYTA3M2ExYTgxZjhiY2VhMTMxZTM1ODdiMzk3OTM3YzQwMjlkNDg2ZmU2ODQyYTcwOTU1OGY3Ci00M2NkMTZjOGYwYTVlNGZiYjNlNTIyNjYzYjgyZTI1NDRhNmZlY2VmZDNkOGEyYjIyMjMwMWZkNDk4OGMwMTM2Ci04NTllODYwODdmYWQ2MzI5MmJjNDE4NzQxMjczMWE5NjY3MTBjYTljY2I4NjMyOTU2MGQ2NGJlMzFjYTRiNTI2Ci04MjI0NWMxYTQ4NzA0NmFkMjFkZDlhMjcwZTNmYWU3MmZlY2RjZjk2MDg3ODRmNjQ5YTI1NDc0MDM0YWM3NDRkCi00NGUxNGU3MmQwMmZmMTdiMjI1MmFhNTI3M2RlM2JhM2NkNzFhOTUwNzBhOWZlZDBkZmY4MDY1M2IzZDM0NmM3Ci01NjExOTUyOWU1YmNiNjAxMWQzNDFlMzY4ODI3Y2RkZjIyZDRmOTlmMTc4MTgyOWRmODA4NTA3ZTJiNGNlYjEzCi0yMTFiMDhmNTU0NDRlNzVhMDA1NjM5YTIwYzMzNzA2Zjg5ODVmMzMwOGMwOGY3N2U3MmRiZmJlMDQ5YWU4MTc3Ci1jMmRhMmU2MmViNThmMGZiYjM2OWY1YmFiMGZmZjQ5ZjlkNDc2NWY5MzFmZTY2ZjhhYTEwN2Q4MTE2YmVjZGZiCi00NjZkMjgyNTI3YmFiNmZhMjk3MjE2Nzg4MzdjYjQ2ZDYwMTQ4YTdmZDljYWU2M2Q2YWE2MzRkMjNlZTIxMTYxCi1lZjllODM0NTIwZjM2NzkwM2E2NWJlZjc5OTZhYjc3ZDM3YmE5N2FlYjJhN2E4YzM1MDJhYWM5ODhlN2EwNDMwCi05ZDY3YTA2ZGI0YTkwNzE0ZmQxYTkzMzQwMmRmMDgzMDAyNjkyMGJmMWY3MWNiMDM3OWJkYTg3MTQ0MTVjOWJjCi1lNzc5NWZhNGViYzM3ZTgxOWIzZDhlZTY1Mzc1YmZkZDZiMzZiZGE0MWI3NzkxODY0Mzg5ZTliNTg5OTE5ZWU2Ci0yODcyYmFjMmUyMjFiMjgxNTBkMzAyNGE5ODQwMzM4OTllNTM3MmFiNDc0YjliNDQ5NGY3YmI0MzMxYjYyMTNlCi03OTUzNTY1ZjM1ZDJlYTZkYTIxMjk1NmRhYjAxNTcxY2JlZWVmODYyOTNjNThhMjU5ODYwZTI5NGY2OTczMGU2Ci1mMTQxNjgwY2Y3NWQ0MGU4MjlmOTY3OWU5ODM0MWZkMWUwODE3Y2I4ZTQwY2Q2YzRmYTY5MWFjNjkxZmI1OWRmCi1iNzhlODdhZGQ5NTFlYWM0MWFkMWI0ZjRmYTQ1ZDJlMzQ2ZTBmYTczMTU3YTdkMmIyZGY4OWVhNTZhODBlODg1Ci05ZTBkMDMzMWQyMTZkYjRmMWI5NWQ2NjJiYWQ0MGU0NzJmMjFiYmUwNTU3NmNlNGEyZDI3YWYwMTg4MGY0MzhhCi0zMGMxN2JjNjVmYjQ2MGFjMWIzZTAxYWE0M2FhMzY3N2JhMDVhNDM3ZmNjYTNjZTRjMjg2NGQ5OWM3MDFkNzllCi0zYTE5OWRiYzdlMmYwMGJlOGQ0MzQ3Zjk2YjYxYmEwZjg4ZTkwYjQ5ZDQxMmQwZWQxNjJlODI3MTVlYTA0YzI3Ci1hZjNmZWIwYTdiM2U0ZGQxN2M4NzVhNTFlOWJiZWQzYzllMTBlYWFiZWVjMGYwMjlkOTRmYTkwZDYwNjA1YjUyCi0yZGNmZjUzOWZiYzMyM2U3ZjBlMWNiZmMxYTE5MmE0NDM0NWVmYzA3MGJkNWQ1OTM5ZDlmNDM4Mzg5NzcwNGYwCi1lNzg1MTI2YWJkOWY1ODJmMWFmZTg4YTcyNzc4NGFmZGFjM2RjYTQ5ODkyYzZiZWI1MmNiMWFkZWUxODAzNGU4Ci1lODhhNDQxODkwMTc1NTc1OTUxZmQ4NzU5NGI2Mzc1MWU2OTE2NTQ5NmQ1NjZiZDIzYzhkYjRiOTIzOWJiYWE5Ci1lZjUwNThmNWI1MWM3NGNmNzA2MzJmODhmMWEwNWUxYjQwMDc4YzE4M2VhODQzMzQyN2Y2M2E1ZjY4YTFiODFjCi1iZDQ2NjI1YjhiYTJjZjcxM2MwMDFjY2E0Yzc0YTE4NmY5M2FhYTM4NjlhNTE3ZGQ2NGYxZTgxYzcxODIzMjM5Ci0xOTM0ZmFlYTYwNGNmNGQ5ZGRmOTc0ZmIwOWM1Nzg2YmRlMDU5NzhiYjI1MjA5YjVjNzY0ODYwMmRkNjJjMzJjCi02MWVjNGI1Y2UxMTc3MTg1MzU0ZGQ1Y2RmMTU1NDAxMjFiNmQ4MjQ1N2ZmMzExMWRiMWFhYjE4ODlmYjBlM2M4Ci0zOGNiYzdhNjcxYmExNmE0YmM1NjdkOWNkZDQyNzIwNWU4ZjRkZTdlZGM2NGMwMGJiNjA4MDA3MTEzMGI0M2QzCi02ZTc5MTlhNWI3YzI5YzY4YWM1MDVmZjEwN2QxZTJhYjY2YTM0MTc2MTJiYTJmNDYxNTQ4ZjFlNzJjNzAyYTE5Ci03YTYzMTFkYWU2NDllNDY3NjhkODVkNzU5MjgxNDI5Yjk3YTM1Mzc5Yjg0Yzc2M2QzNWNmZDQzNGE0ZTNiYmI4Ci00YzZlNWVlOGRmZjNhNzQ0OWJlYzE0Yzc4NWJjZTFkNGM2MTcyMTdlZTYzMTVmZGEwMDBmMGM1NGQxMDU0ZTgwCi1jOGY5ZjQ1MmRhYWE0NjVmNjMzZmZjM2VlZGE5Yzc2ZTdhNzcwMjRlYWYzOWJkNWJjOTU2MmZhNDRmM2RhOWFlCi03ZTY2NWEzM2JkMjJhYWU2ZGJjMWQ5ZWZhYjYzNzQxZTMwNzc1ZWVmZmI4MTlmZjkzMzM0MmM4ZTZiOTc4ZjhhCi0yYWEyMGMyZjI4MTAwNzJjNGYyNDM3ZTdjYzEzODYxMDAyYWI2ZDVlZTg0YTZmODA1NDk2ODNhMzRkYTNjZWM5Ci1lMzQ3MWQxMTIzMzJlYTI2MDE1MzgzNmZhMjRlMjJlZWMwY2RiMGE1YjNiMDc3M2NmZDIzN2RhYTY3YzU1YWE0Ci1jYmYxY2MzMGY0MzE4M2E5M2JmN2Q3MDY4ZWFkMzJhYzgwNjRiYjFmMGE4YmI2MWNmNTQ3MmJjYWIzNjBjZjcxCi1iNjFjMzQ0M2VhZTRmMWVjN2ZjMGQ4ODM1NTlmOGEyZmYyNTIyZGNkN2RhZDVmMzk1ZTlhYjI0NTRjY2E2ZGFkCi0wN2JiNThiZGViMWU1NGY3NTgxNmRhYmVhOGQxNzA5NzQ5MDliMmZhZDUzZjlhNjlkOTdlYjExZmYyMGM2YWVmCi1lYjZkNzZlOWZhOTNjMzE3MTE1NjAyZGI5MDM1OWJlNjM4ZGEzODNkOWUwMWY2YmRhY2I1YWM1YmQ3Yzc3ZDQyCi1kODA2NDZhY2U5ZjIzODQ3NzQ2MTBmNjNmOTdkNzBjNGU4MWEyODcxYmUwYTViMDI4Yzg4YWZkODJhM2I2Mzc2Ci01ZDUwNjRhNjc4NmE4MjlhNmU2MzIwMTIwMzk1YjE1NDFiZmQ2ZTNlYzE4MmQ1MDk4MmQ3YmVjNDE0MGYxNDZhCi0wNjg5MGE3OWI4NWE2ZjIwZjliZjYxNmY1ZjU2ZTAyNzUyYzVkMTc3YTQ4YWEyZjhlY2I2N2U0MmUyMzE0ODUwCi1kMjEwOWMwOTY1YTU1ZDFlMGY0NzAzNzE0NDM5OTFmOWI4ODU5YWM3MGJkNmYwNDlkYmY1N2NjYzhlMmUzYzY3Ci1lYjhkMWI0ZjM2YzY2MDc0NjAwODQ2MGViYzBmNzI4NGM4MDI5MjUyMDZiOTY4NDc3YTUwM2RmYTY4Nzk3OTRlCi03ZWQ4MmZjYzU4NDQzZmExZDk1ZmQ1NjFiYzlkM2EyY2NiMmJmYTE5OTE2ZDhhODhlNmY3ZWZmMGNlMGE3ZDRkCi05MGM3N2Y2M2JjNzVmMzM2OGY3YTk3ZGVhOWQ5MzkyZTNmNDk5YWU0YjhlNTM2MDI2MzZjZDUzZWJkYjQyMjEzCi1jMjY2OGEzYzYxOGE3NmY2ZjVhOTZmYzMzYzBlNDFlZjYyMGE2M2UzYzUyNTEyYzY2YjU5ZjgxMGM2Yjg1OTIzCi1kODFmZjg2MThmNDJlZTE5YjEwZDRkMDg4YmQ2Yjc4NGU0ZjliZDZiZmZlMDgzMTYxMTgxYjJmNzliMzc0ZmQ0Ci1iODQ2NjUwZDRiOTViNmMzZTU4NDQ5ZDhmMGEyMDFhZWM3MmQ4NzU4OGM1NGZiYjMxMTIwNDUwNDAxMDlhM2QyCi1kOThjNzc4ZWQzZmUwN2Y1NDAxMDc3M2I2MjhiYWYyOWFkM2I5MTA3MmZiZGVmN2NkZTBiOTY5ZDBiNjk1YmYyCi01ZDM4NmM2Yjg2NDdiZmQ1NWMxNjkzNzRjNTdkNWJkOGZiMjlhZjVjNWE2NzE4ZDdjZWUzMThhMDZhZDM1ZDk2Ci1mYmY4Nzk5MjllMjhiZDQzYjU4M2FmZjI3Njk2ODhlMDg3YjAwZWE5NWIyODYyOWE3MWM2ZWE4NDdmOTg4MzU3Ci1kYTllMjM0MjJmZTJlYmM0YzMzZjE4MzY3OTIzM2UwZDFkODE1MGVjNThjYTZjYTBiZGEyYTUyOWU2ZjZkMTQ2Ci05MjAxMGIxZWRhNjM2MGFhYzk0MGVkMjM0MTA0NTUyMDkzODNiNjhjM2ExZmQ2OGEwZWY5MmQxNmNkNGRlZGE5Ci05ZGJlZGIxY2UxOGE3OTgxN2ZiM2QwNDNmOTE5ZjFiOThjNjJlY2M3MGRjMjc4ODZiMjU4NDI4YWUyZDEwNzVlCi1lZjhjMTIyNWY5NmJlNWVlM2MxYjRlMTI3ZDI2YmMyYWJjNmQ0NTczMzNhMGQ1Y2NlOTlkZmYwMGYzZjQxZTBiCi1hOWZkN2JhYzllOTY2OTFjZDMxNmFiZTkxM2E2ZWRmOTVjNmM1ZDM3MDg2Y2YzY2I5NjBiODI2ODRjZTQ3M2VkCi01NzRmZDhjNmNhMDU5YmQ2Nzk0NDFjMjJlNmMzOTM3NmQzYTMzYzgwMTEzNjFjODM0YmJkN2I4N2MzNDVhOWYwCi1jNmNjMTMyOGI1YWY5MjZmNzYzYmViYzEzYmU5MjIzOGRhMTcxMTI0ZGUxMTlhMDk3ZDY1ZTVkNjIzY2JmMTU3Ci1hNGU5M2UyNTBhNmJjMzRiYzU0ZmViMjg4OWRhM2Y1OTkzZWZmMGJmMzhlZjZlNDQwZDBiZGI0MDU3NDZhYTcwCi00ZTVkZTU3MGIwMzQ3ZDUyYjI1YWU5ZTBmZmQ3NThiOGQ2ZGExYTU3ZTQ3Mjg5YTI2ZDBlZDMwZTMxNDc0MjczCi1jMjMxNWM3NGEzOWU2YjI2ZjU1OGRlYzE0MGQzODRjZDNiYmQ3MjQ2YmY0NmEwZjdiZWNjZTQ1ZmUwYzM0M2NlCi03ODAxNjIwNGU4MTRkY2NjNTgwNjFkNDhmZmM4MDg0MjM0NTI5ODViMTJkMjhjOTRlYWJhODllZGE3OTNmN2IyCi04ZDlmZGUxMWYzMDQzNGJkZjczYzQ4NDg0YTgxNGViZTU0MWY0ZTZlYjgxN2RlNDMxNDZhZTRlMDRmYTcxMjlhCi1lYzBlNGI5MmFlMjJhMWQyMzQ0Mzc1ZjY4MzE0ZDgzOWFhZGU1OWM0YWMxZDU1NjUzOGZkN2E5ZjdlZTlhMTM5Ci1mMzYyMDk1MmM2YzQ1ZjcxODFhNjQ0OGE4MDdhMWJmNjJjYjU5ZjQ0MDE5OTI5N2NiYzhhMzYwZDAxNjhjMTUzCi03YzZiM2JhNTZkZDBmN2YxMDQyNzExMzg4NDZhNmYzMDVmMmM4YTc1MzY1MTJjNTRhMWM0NjIzMjYwNmE2NjQ5Ci04MWE4MDgzZDU5YTRiNWU4Y2EyY2QwYjcwZGQwYjQ0YmVmMWMyYWU5ZWJjYmFlZWNiYzdjNGJmYjJjZTMwOWY3Ci04MzBiYTA2ZjNjOGU3OWZkZGY3Mzc0NTFhNjdkOGM0NDI1YzUxZTExZjgzMmQ5OTE5OGMxNmRlZTg2NGI0YzlhCi1lNDg4NjNmNWEzY2QwZTZmM2M1YjMxYTZiZmY1MjdiY2UyNjBhZWZiYzQwYjFkODA2NWQyZjg4Zjk3ZGQ5ZmY0Ci04YjIxZDA2OWFlOGNlYmFhNTExZjBkMDBjMWRhNzYyMDc4MjE4NTliYjE5MWQ1ZjkyNjFhZGZmM2U2NDE3Nzg4Ci01YjQ5M2RiNDk0MjBmNDcyNDk2YTgyMDdkM2YyZDY0ZmEzMzA0ZGUwZTc4ZDYyNTlhNjI2ZDhmZGY4MWM1MWQwCi1mODFlZjhjNjE5NTA3ZjA1NDRlYmQzYWE4ZDFmMjAwYTVjZTI0MGExMTcxNDQxNDM4ZDZiYmIxOWMwODUwYmRmCi00YTAxNDdiYWY0Nzg3NTEzNzUyZTRlMDUyYTA5ZDZiOTRiZWM5NjEwN2U2NGY2YjI2OTJiZWRmMmEzODg2M2UxCi0xNWFjMjU2NGMwZWIxMGZiOTIzZWYzZDUwNWY3NTBiZmI2NDA3ODU2NDA2Y2M5MmU5YjJhM2E4MTBmYjQ5ZWY4Ci1lOGY0NDVjMmUzMmIzMGQzNTJmYmE2ZmUzNDVjOGFmMjQxMzA3ZTc2YzEzZWQzNzY1NTRiODU3YjIzZjJiMTBlCi05ZjRmMWQ2YjI1ZWU4NTBkNzQ0MzMyZmI3MzM0OTc5MDQyNmJjM2FkZjgxMTk5OGY4NGY0NzIxMjQ3ZWQ5ZGMyCi1jYjMzZDM0M2VkOWZjYmRkMDAxZDk3NzA4NDA4YTQ4ODVlZjA1OTA4MzMzNTQ2MTY3ODU5Nzg4MTI0ZjUwZWFmCi03ZjljZDViN2E5ZjRhNzdiMjMzN2Y1MTU2OWZlM2ZiNDVlNDFkYzUwMzk0ZWM5NjM4NTFmZWY3NmVkNjc1OTJjCi1iYWM2OGUzNzgwNDNkNzcxMzc5NzRjYjYxNzcyMjI4ZDYzZDQ2ZDkyODIxNjYyMjAzZGNjMGRkMWRiMzc1YmQ2Ci05NWM5MTUzYzcyMjYyMDJlZTU0NWFhMzZiMGJmYmE0OWJiYTU5ZTkxOGUzYmNhZDM3N2NiNDYxZDUyNDQyYjljCi1kMTU5NzY0MDkwZWZhYTBhODg3YTEyYjBjOTg4NGQ0ZWIwY2JhZThiMmI1ZmUxZDY4YjhiMTNhYmNkZTczMjIzCi0yMzQwNjM5MDdhODAxMjEzNGRjNDIzMzdmMTMxY2UwMTJhOThlNTgyZmNjNTBjOTUwN2MxZjg3YjgzZDYyZGZjCi1iYjk1MWRkNDhjM2ZiMDc4YWFlYmZhMjVhZTE5MDhmODdkOTc5MTVkODZiZWE1M2UyM2MyYzRmZDQyNjIxMGNiCi1hNTE3ZWUzNjgxMTgzZDMyN2E1YWI0MmMwMjk3N2MzMjIxMjEzZTc2ZWQ1Zjk4NmFkNmJjYzE0ZjUwNjUxMzY3Ci1mMTQyYTRkYzYzNzkyMTM5NzRmYjkwYTdiZQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotY2xlYXJ0b21hcmsKLSUlRW5kUmVzb3VyY2UKLS9GMzkyXzAgL0VSVkJGVCtOaW1idXNNb25MLUJvbGQgMSAxCi1bIC8ubm90ZGVmL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQvTHNsYXNoL2xzbGFzaAotICAvb2dvbmVrL3JpbmcvLm5vdGRlZi9icmV2ZS9taW51cy8ubm90ZGVmL1pjYXJvbi96Y2Fyb24KLSAgL2Nhcm9uL2RvdGxlc3NpL2RvdGxlc3NqL2ZmL2ZmaS9mZmwvbm90ZXF1YWwvaW5maW5pdHkKLSAgL2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3VtbWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUKLSAgL3NwYWNlL2V4Y2xhbS9xdW90ZWRibC9udW1iZXJzaWduL2RvbGxhci9wZXJjZW50L2FtcGVyc2FuZC9xdW90ZXJpZ2h0Ci0gIC9wYXJlbmxlZnQvcGFyZW5yaWdodC9hc3Rlcmlzay9wbHVzL2NvbW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gKLSAgL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCi0gIC9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KLSAgL2F0L0EvQi9DL0QvRS9GL0cKLSAgL0gvSS9KL0svTC9NL04vTwotICAvUC9RL1IvUy9UL1UvVi9XCi0gIC9YL1kvWi9icmFja2V0bGVmdC9iYWNrc2xhc2gvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUKLSAgL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCi0gIC9oL2kvai9rL2wvbS9uL28KLSAgL3AvcS9yL3MvdC91L3YvdwotICAveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvLm5vdGRlZgotICAvRXVyby9pbnRlZ3JhbC9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwKLSAgL2NpcmN1bWZsZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHByb3hlcXVhbAotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gKLSAgL3RpbGRlL3RyYWRlbWFyay9zY2Fyb24vZ3VpbHNpbmdscmlnaHQvb2UvRGVsdGEvbG96ZW5nZS9ZZGllcmVzaXMKLSAgLy5ub3RkZWYvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbgotICAvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KLSAgL2RlZ3JlZS9wbHVzbWludXMvdHdvc3VwZXJpb3IvdGhyZWVzdXBlcmlvci9hY3V0ZS9tdS9wYXJhZ3JhcGgvcGVyaW9kY2VudGVyZWQKLSAgL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bgotICAvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCi0gIC9FZ3JhdmUvRWFjdXRlL0VjaXJjdW1mbGV4L0VkaWVyZXNpcy9JZ3JhdmUvSWFjdXRlL0ljaXJjdW1mbGV4L0lkaWVyZXNpcwotICAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkKLSAgL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscwotICAvYWdyYXZlL2FhY3V0ZS9hY2lyY3VtZmxleC9hdGlsZGUvYWRpZXJlc2lzL2FyaW5nL2FlL2NjZWRpbGxhCi0gIC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcwotICAvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCi0gIC9vc2xhc2gvdWdyYXZlL3VhY3V0ZS91Y2lyY3VtZmxleC91ZGllcmVzaXMveWFjdXRlL3Rob3JuL3lkaWVyZXNpc10KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgQlpYSUVCK0NNU1kxMAotJSFQUy1BZG9iZUZvbnQtMS4xOiBDTVNZMTAgMS4wCi0lJUNyZWF0aW9uRGF0ZTogMTk5MSBBdWcgMTUgMDc6MjA6NTcKLSUgQ29weXJpZ2h0IChDKSAxOTk3IEFtZXJpY2FuIE1hdGhlbWF0aWNhbCBTb2NpZXR5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotMTEgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDcgZGljdCBkdXAgYmVnaW4KLS92ZXJzaW9uICgxLjApIHJlYWRvbmx5IGRlZgotL05vdGljZSAoQ29weXJpZ2h0IChDKSAxOTk3IEFtZXJpY2FuIE1hdGhlbWF0aWNhbCBTb2NpZXR5LiBBbGwgUmlnaHRzIFJlc2VydmVkKSByZWFkb25seSBkZWYKLS9GdWxsTmFtZSAoQ01TWTEwKSByZWFkb25seSBkZWYKLS9GYW1pbHlOYW1lIChDb21wdXRlciBNb2Rlcm4pIHJlYWRvbmx5IGRlZgotL1dlaWdodCAoTWVkaXVtKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAtMTQuMDM1IGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvQlpYSUVCK0NNU1kxMCBkZWYKLS9QYWludFR5cGUgMCBkZWYKLS9Gb250VHlwZSAxIGRlZgotL0ZvbnRNYXRyaXggWzAuMDAxIDAgMCAwLjAwMSAwIDBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIDI1NiBhcnJheQotMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCi1kdXAgMzIgL2Fycm93bGVmdCBwdXQKLXJlYWRvbmx5IGRlZgotL0ZvbnRCQm94ey0yOSAtOTYwIDExMTYgNzc1fXJlYWRvbmx5IGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5N2I2ODZhOTdlNDVhM2QwYWEwNTJmMDlmOWM4YWRlOWQ5MDdjMDU4Yjg3ZTliNjk2NAotN2Q1MzM1OWU1MTIxNjc3NGE0ZWFhMWUyYjU4ZWMzMTc2YmQxMTg0YTYzM2I5NTEzNzJiNDE5OGQ0ZThjNWVmNAotYTIxM2FjYjU4YWEwYTY1ODkwODAzNWJmMmVkODUzMTc3OTgzOGE5NjBkZmUyYjI3ZWE0OWMzNzE1Njk4OWM4NQotZTIxYjNhYmY3MmUzOWE4OTIzMmNkOWY0MjM3ZmM4MGM5ZTY0ZTg0MjVhYTNiZWY3ZGVkNjBiMTIyYTUyOTIyYQotMjIxYTM3ZDlhODA3ZGQwMTE2MTc3OWRkZTdkMzFmZjJiODdmOTdjNzNkNjNlZWNkZGE0YzQ5NTAxNzczNDY4YQotMjdkMTY2M2UwYjYyZjQ2MWY2ZTQwYTVkNjY3NmQxZDEyYjUxZTY0MWMxZDRlOGUyNzcxODY0ZmMxMDRmOGNiZgotNWI3OGVjMWQ4ODIyODcyNWYxYzQ1M2E2NzhmNThhN2UxYjdiZDdjYTcwMDcxN2QyODhlYjhkYTFmNTdjNGYwOQotMGFiZjFkNDJjNWRkZDBjMzg0YzdlMjJmOGY4MDQ3YmUxZDRjMWNjOGUzMzM2OGZiMWFjODJiNGU5NjE0NjczMAotZGUzMzAyYjJlNmI4MTljYjZhZTQ1NWIxYWYzMTg3ZmZlODA3MWFhNTdlZjhhNjYxNmI5Y2I3OTQxZDQ0ZWM3YQotNzFhN2JiM2RmNzU1MTc4ZDdkMmU0YmI2OTg1OWVmYTRiYmMzMGJkNmJiMTUzMTEzM2ZkNGQ5NDM4ZmY5OWYwOQotNGVjYzA2OGEzMjRkNzViNWY2OTZiODY4OGVlYjJmMTdlNWVkMzRjY2Q2ZDA0N2E0ZTM4MDZkMDAwYzE5OWQ3YwotNTE1ZGI3MGE4ZDRmNjE0NmZlMDY4ZGMxZTVkZThiYzU3MDM3MTFkYTA5MDMxMmJhM2ZjMDBhMDhjNDUzYzYwOQotYzYyN2E4YmQ5OGQ5ZTgyNmY5NjQ3MjFlOTJiYmRjOTc4ZTg4ZWVhMGE5YzE0ODAyZWJjYzQxZjgxMDQyOGZhOAotYjk5NzIwMzJhMDE3NjlhN2M3MmQxYTY1Mjc2ZjQxNGRlZWRhZjFkMjJiZTIzZjQ3MDViZjVlZjMxYjZhM2I2OQotMGM4OTYzMjBmMDllOTg3NWI1MDIyMGE1YmRiYmQ1N2MwNDFiNWVhOTdmNDIxNjg1YTcyNTZiMGQ5NzU1ZWRiZQotZDA1MTkwZGFiZjFjM2RiZjU1ODI1ODE2M2M4MjMxZDg5MTY3YTgxNmJiYTU1ZmIxZjE0YWQwNDMyMGFlMzgxZAotZjc4M2E5ZWFjZWU4YWU1YzE4Mzg3NzVmZTIzODBiZGQxZjNhZmNjY2M5NmQyYTJkZmM5OTliNTJhNjY4OWM1MQotYWY4MmI4ZDYzMjA1YjMzOTEwMzEzNGRhYzdlM2M0NWU2NjkzOTQwMjc2MDQxYmIwN2ViZGI5YjcyOWU4ZWYwZAotZWU4YmY0NTBmYTQyNTUxYmU2NTIxN2ZlYTkwMmUyOGRlY2MwOTU4MGI1MDRmMGY1MmYxZThmYzVjZTdhYzI4ZAotYzRlNDdmOTA4ZmRhZWJhMjM4MjdhOTdhMGFhNzQxYWE3NzA4ZjdiYmZlYzZmYTY5Y2M0ZjdjM2JkNAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotY2xlYXJ0b21hcmsKLSUlRW5kUmVzb3VyY2UKLS9GNTY0XzAgL0JaWElFQitDTVNZMTAgMSAxCi1bIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgL2Fycm93bGVmdC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmXQotcGRmTWFrZUZvbnQKLSUlQmVnaW5SZXNvdXJjZTogZm9udCBXV1dVVFUrTmltYnVzUm9tTm85TC1SZWd1SXRhbAotJSFQUy1BZG9iZUZvbnQtMS4wOiBOaW1idXNSb21ObzlMLVJlZ3VJdGFsIDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBSb21hbiBObzkgTCBSZWd1bGFyIEl0YWxpYykgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoTmltYnVzIFJvbWFuIE5vOSBMKSByZWFkb25seSBkZWYKLS9XZWlnaHQgKFJlZ3VsYXIpIHJlYWRvbmx5IGRlZgotL0l0YWxpY0FuZ2xlIC0xNS41IGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLS9VbmRlcmxpbmVQb3NpdGlvbiAtMTAwIGRlZgotL1VuZGVybGluZVRoaWNrbmVzcyA1MCBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvV1dXVVRVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwgZGVmCi0vUGFpbnRUeXBlIDAgZGVmCi0vV01vZGUgMCBkZWYKLS9Gb250QkJveCB7LTE2OSAtMjcwIDEwMTAgOTI0fSByZWFkb25seSBkZWYKLS9Gb250VHlwZSAxIGRlZgotL0ZvbnRNYXRyaXggWzAuMDAxIDAuMCAwLjAgMC4wMDEgMC4wIDAuMF0gcmVhZG9ubHkgZGVmCi0vRW5jb2RpbmcgU3RhbmRhcmRFbmNvZGluZyBkZWYKLWN1cnJlbnRkaWN0IGVuZAotY3VycmVudGZpbGUgZWV4ZWMKLWQ5ZDY2ZjYzM2I4NDZhOTg5Yjk5NzRiMDE3OWZjNmNjNDQ1YmMyYzAzMTAzYzY4NTcwYTdiMzU0YTRhMjgwYWUKLTZmYmY3Zjk4ODhlMDM5YWI2MGZjYWY4NTJlYjRjZTNhZmViOTc5ZDVlYTcwZmRlNDRhMmFlNWM4YzAxNjZjMjcKLWJmOTY2NWVlYTExYzdkMjMyOWMxYTIxMWRkMjZiYjM3MmJlNTgyMmY1ZWE3MGQ5OWViNTc4YzdiZWZkNDRjZGYKLTA0NWEzNjMwNTZlNWUxY2M1MTUyNWVhNmZjMDYxZGNlYmIzMzcyMDhlZmY3Mjk4MDIzNzZhMjgwMTQyNGY2NzAKLTBlN2U2Mzk3YjI4ZjE1YmMxMGI0MDAxMmIwYTNlYWViMjY5M2U4ZjdmNjI3YzRjOWM3YzZjNWJmZjEwNWMxZTQKLTFiMmI5ZThmMDkyNTNiNzYwNDBkMjY4YjgwNzE5ZTFiM2Y1YTU1YWI3YjhlMTM0ZDRjYjVhYmNlZDM5YWM2MzUKLWRhMDAxZTk5MzRjMTk4YTdmOWI5ZWQwMDI4YTg1ZTlhZTAwNDIxZGZkOGVhYTNiYjNiNGI0Y2U0NWQyMDkzMDMKLTIzN2JkNTE4MDlmZTRkODgwOTAwYjFlZWIyMzZhY2E4N2I5ZmY2ZWJlNmI5OTRhNjBhZjVkNjdjY2M0MmJkNTYKLTc3Mjk1YzM0NmViNGM2MmJkYzFlZjIyZWUwN2RhYWQ5MjhkZmI3MzQ1NWYwOTFmMzI0MDhlZDY0MzBiOTc0MTcKLTY4M2FmMjdhMDM3MThhMTU2ZTNmNmU3YjZlNGYyZTgxNzc1MDNjZDgyZGRiZjQ1NTdhM2NjZmY0Yzg1OGFlN2EKLWY3ZWZlZDZjYzUyMWEyODM0MjQzNmI5NTNlNDY1MGI1NzkyYmU4NWVhMmY5ODllYjZkOTg2OTA1YTYxZmEzOGIKLTk2ZTFiYmM4MzBiNzQ0NjkxNTBmYjBiNTk4YTc5NGZkODBkMTA4NzAwODRhODc3MjczYTk1MDJjMzQ1NmU1ZWYKLTc0MzUwZTZlM2JlNTg2M2U4YmExODVlYjU5ZmI4N2IzNjU2NmFmNzEyMDBiNmVkMzg5ZDEyODdkNGU5MjVlMzMKLWIyMzgzZWQwNWQ4N2Q0ODU4NmU2OThmYmM1ZDU2MmVkOWQ4YTA5ZWMzZWFhMWIxZjMwMDIyNGFmMjBjMjNmMjYKLWEyZWFkYzc0NTYyNTcxZGE4NGIzOTE0ZDFkODBiMTI3YzZmZjQ3MDZjNzA0NmJiYjM3MmEwMDEzZTBhYjk0ZjAKLWMyNzk0NjU4Mzg3MWQyNzJiZjRmMjBmYTg0ZTg5ZDc0NWRlN2JiYTg4NWNjMDliYTcyZTBmNTMwZWQ0ZWY3ZDEKLTg2NGIzYzY3MDA3ZWQ5ODgwMDI4NDIzNTM3MmYwYTcwYzkxMmUyMWU4NTFhZmJmODEyMTY1YjhkZjkxMmNkMWEKLTAxM2UyNzFmMGIzNDc5Njc4NzZjNjhhZTRjNDEwN2VmOGFkMWYxNzA5MTYyMTAwMzRjNjYzOTRhOWQ5NzFiNjgKLWZiZmMxMTMxZTM3ZmMxNzhlYjk3YzFiMmEwZjU3M2FkZDlkN2MwYmY5NDRlNjUyOTczNGRmOGE3ZWY1NDQ4NWIKLWEzMzc1Y2MzMGU5ZTMyODk0MzczM2NiZDM1MmJjMTViMDZjODViZmI0YTk2OTk0MjkxYzcyYTBlYWU4NGZiMDEKLTBmMWIyNGQwMTI1ZmI4YzE2ZDYwNTYxZGY4YmI3YWE3ZGRmZTk1NDlhZmI3MGMxZTg5NDI0MjE0NjA5ZmRlNDEKLTlhMTQyODkyZTMwZjAyNzU0ZmQyMzRjZWIzYzU5YTJhMDRjMDZiYWI3YWU0MGU4ZmRlYzUwNTU5YjgzNDc2ODQKLTM5MWM3NTA5ODc4MDJkNTQ1MmM0N2MxZTBiNWYyMjJkZTlhMGVlYWZlZTE5ZDc5NmZmMzc1YTFlMWVmMGFlZWQKLTFiY2FjNGY0ODVmY2FlZTE4YWVjNTg1ZDFhOWQ4MGY0MTg3MWRkYTQ1ZmVmMWVhZTgyYzU4OTMxMTg5ODdiZWIKLTRkOWUzNDVjMjdjNzQxOWZlNjVlNDg1M2I0MDUzN2Q4MjJlMzRmZjFlMGJkMjgxOWQyMWVmNjA3OTgxMjU5ZTgKLTlmMTA0MGEyZDcwOGQ3NDYzODU4YWE1MzgxNzU5YWM0OWRmNGRkZGViMjA5YTI3OGZlNjBiZDI1MDhhY2EwZjQKLTZhMjQ5YTA1YjY1MmU0YzdiZjFiNjc2OTQzY2RjNDYwMjkxMGZhM2VhNzYzNjk4NWExMGY2Mzc4MzJhNWFiYWIKLTljN2E1ODBkNjA1OTI5ZDZkNzE1NDUwNjIxNzI1MmE3NTViZWI4NDYyZDMwYTc5OGZmYTliMjZlNTAwZWFiMjQKLTdlOWZkNjEyYzc3NmFlNjA0MjM5OTVkYzE4NTI2ODZjYjA0MWU2NjM1N2E5YWNkNGI2YTRlOTg0NmIxZGM4MDMKLTIzZGFiNmI3NzY1MjA1ZDgyYjUwY2M2Mzk0ZTcyNWMxOWRmMDBmN2RiNDI3MzQxZDUxNDA0N2U0YmM1OTRlZmIKLWEyNjJlYjJjNDE0ZTQzZDhhY2M5Y2IxOTVkMTJmM2IyYTk3NDhmMzhlZGIzYWMzNDQ3ZDI3ZDIwZDFlNjJiYmUKLTIyZjYzNzhlNTA4ZjBjZDZmMTdlZjFjNTAwNDA3ZjZkNDQyZTkyZWYyZTAwYjhkZTc4NjYwZDg3ZmQxYzcyMDkKLWVhNjdjZGIzNzA3NmUxZWFhZWQxMjg4MTRhOTQ4ZTI3ZTFmMmZhODFmZTU0YmU2YzU3ZWY4YzJiMmU0NjBmMDgKLTZmZjFiYjUyOWM5MTAwYjFkODc4ZGM5YTA3N2QyMTgwNWU4OWQ4YjBmYmMyYTA3NGU0YjU1YTg2OWM5NmZjYTcKLTgxMTczNDdiOWNmYTQ4MGZmNGEzN2IzNGIwNDBhOTlmYmE5OTk0MmJkODZjZTRiNDZmZjVjNjliYWJjYTdhM2EKLWY1MDE4ZGEwNTU1NmJmZjcxZWNjODQ0YjJiNzE4NTk4ZjA4MjVjZGEzZDE5ZDcxNGZiNjY0NzI2MjExMTNhZDcKLWJiMjQwZGU3ZGZiZDFmMTdmZmQ4ZjJlZjRiODVhOGViNmUxYmZkZjI2YzdmOTgxNjgxOTdjMDJjNGFhNTM1YzIKLTBmOWVmOWI3Y2I3ZjFkMTc0YjJlOTQ5NTNmNTQxYzNiODRkNDMzNjZlMGUwMGEwMjhiOThmOTkwYjRkMDE1MTUKLTNjY2MyZTE4NTM0NzNiYjliMjU4NTdlNGI4ZjlkNjY5NWVmMzMyYmQzYmFhOWVlNTUxYTRiMTQyZGVmYjdmMDMKLTk3Y2QwNzVlZjljZDQxMDgyY2NiZjYzZTg0OWM0ODgzNWUxMDU5MjNlNzI1ZDQxZDJiNWVlMGMzZjAzYTYwM2EKLTE2MTcxMzIxNmFmOTdiZDIxYWE4N2UzYTgwZDc1MzgzNjAzMTUyMDExNTMwYjhhYmQyMjk0ZDA0MWU5MGEwNDAKLWY2MWJhZjg2YmU5N2Y4ZGFhODMyNmViMWEyYjQ1MTE0MjU3ODVmMzVmNzU4MzU2ODM1MTVhZjZjZDBlNzMxOTQKLTJiMjVkNWZhOGM3ZTEyY2NkZTMzYWExOTNkNjFhMzVlYmE3ZjdlMTAxODQzZTM1ZGZkZjNlMDdhMTQ0MmIwZWIKLWYyYTkwODQ2MzQ3MzZhMjExMjg4NDNkZjQ5Yzg0YjEwNjFkMDgyNjc3N2E3NTQwNzZjNGMzZDBhNjhiMzJkYmEKLWVkNGI1YzA3NDZkZGVjZGQ3OWZiY2M3YTQ0MjVlZGRhYTdmNDkyNTcxNDhmMDVmZjUyZmY2YmFjNzFjYjY1Y2EKLThhZDU4NjljYzlmZDdjNGMxOTRhZThkNWQyMGE3MzBhMDM1MjM0ZDhmOWE2MzYzZTdhNDlmYzIyYmJkMzRkMDgKLWViN2ZkNDNhNjc4YmU1MmI5NWVjY2YwMjlhNmIxOGE1MTJkMzBjZWIwYjZhZGY4MGZmMTIzMmRmZGExYTU3NTIKLWI1MjIyZWRkOTAxMmI0NWNmMGRmMDY0NGIyZTcxM2FmZWYyMTI1NWEwODIzMmVmYmQ1ZDVmNzUwNmJmZDA1MGEKLWYwZGFmNTViNWRiNTk1ZDI5MzYxZjgyNTNjMjZjMzdlMDliNGY4NzA1NmVkZDhjOTBlMGRmNGZjNzQwNzI1NDEKLThhZDhjY2VhNTYyZTRjZTcyYWNjOGU5ZjM5Mjg0ZmNhMjc0YzU3MmZmZWMyNGJhMzBlZjlkYjA3MDU0OTY1YmQKLTIyMDVkNzE3YzliM2IwNzIzMDYxY2Q3NGVjNjg4YjkxNWFiNjY4OTkwNGQ1NzYyNjI5Yzg5MWYyZmMwY2RmYjEKLThkOGE0ZDIyNjBkYzkzZDdhYzExMDdiMTk3ZDdlODQxOGJiYWNmYzY2MGQ4ODg2OTcyOTZiN2NjNjU4MTAyNGMKLWU1ODNiMDExNGZmZTNiM2E5NjBkNjAxZmYyM2MwZjYzM2UyYjg1MzAwMDQyZjcxN2M0NzE4YzA1NDdmZDliMTkKLWU3NGQwZTE4ZjY5MDhlNDUyODA2NTg4OGMxMzZkYzg3NjdiNzQwMjVlZjVmYWY0NzBhMjcyZjU3ZjU0OGQ3MzgKLWM1ZDJmZjZkZWY0MzY2YzFjMDhlMGIwOTg1NWUwNGVjM2JiZDhjYjZiNzcwZjYzOGFjN2Q4NTJiN2IyMjUwZjYKLWNmYmI1NjY5YzkxMTJmYmY3MzU0NmE5YzFlOTY4YTFlMWEwNjEyOGVmZWU2NDIyZTQxZGYxNTE5YzczNDY2MzUKLTMxZmVhNDE5YmJhODA2N2M2ZDBlOTY0MTQzYTA5MDY3NjIxOTdiOGRlOTU1MDJhZTliYjU0Y2VkMTdkZTVjZTgKLTlkNjI4NzE2YmYxZTMwNmFhZDA5YmQ3ZjhjYjJiN2RhZTViZmE5ZWY1M2U3MTZkNWFhMmNhMDE0ZWFlODM3YzYKLWMwZjJkNWY1MzVhZTkzNjgyZTg1NWIxYmRkNmNlOTU1NjI3Mjg0YTQ3MTJmNjdjMWQ2ZGU5ZjgwZDRkZGE0M2EKLTlmZTM0ZmU0ZmFiNTQ0NDU5YTFkZmEwZDEzODNjNTBiYjNlNmMzZGYwNzhhY2I4OGRiMzdlY2IzOGFhYWJiYjMKLWNjNTlkM2ZiZTZhODRmMWY5NTIxYjZlMDVkMGEwYjJlMGZjZWFlOGVlZWE0ZjQxOTc2OTQ1NTAxZjMyYmIzODMKLTQ1NTQ2N2QyMTc3Nzc5NjY4OGU1N2FlOWI3YjM5MmQxNjdiNjNiZmRjMTEwMjU2NTY0OWI1MzY5NGYxZWIzZTgKLTVlYzJmMDk0YWIwNmQ0MjdiNWUxZTc0MTJiMzM2OTMzNmM3NjZhN2ZjNzc4MTkwZGQ1YWVlYmVmOWI2YTAzNGUKLTEzMzMxNGNiNTEyNjY3ZjFhNGVlZjkwYTEyNTFjYTllOGFhZjc5NjZlYzk2MDA0YzA5YzRkZmFjYmIwZDRjNDUKLTYwZDhkZjQxODNkMzU5OGZiOTU4NGE0NDMzYzkxMzFmODYwMjQ3NGYyN2U0OTE2YjQzZGU4MGVkMWQwMmY2ZTQKLWQyMDhiMDE0YzBhNDRkOTRlZjcwOTkzMGVjYTY0NmIyZjA3ZDgzNThkNDhkMGE3NjhiNmYxMzQ5MmUzY2I4NzcKLWZlMzhjNThhN2Y1NDY4YWY1MmZmYzExYjhjMDJiZDkxNDg0Y2RjMDIyYWJlNjc4YTdmMmUyOThhN2ZhZDk2N2EKLTJlYTdkYzQyN2U2YWMxNTQ3NjZjYTRhZTE1ZmQ0MTRhNzYwNjQ4MjNmMzE0NTcyNDE4NGUzMGVjNGYxNDk0YzgKLTc4ZjdmNjNlZGVhNjBkYWYyNDQ4ZGU4YTc5ODAxZWNmZDg2YTA2ZWYxMjI0NTFkZDIzODBiYjFhNDI1NmE3ZWEKLTgwNmQxMzFlNjZkNWE2ZTMwNzlmN2MyZDdjMTQzZTI4NzlmNTMxNmZmZWJiMWJmYTE2NmEwODhiOGZhOWNiN2YKLTRhNWYwODc1YThmZjVkMzc4ZTllODIwNWM2MTU1ZWE4NTc1NjQ3NWNhNTE0OWViNzI2NDNiNGFlMWY5MDdjMGMKLWZjOGY2MzE1MGNkYzYyMDliMTk1MWFmMjNmZjY4MTg4MzYwOTM5NTAxNzcwZWFjMzllZDU1ZGFkYzRkZmIxYzUKLWIyZWYzOWM5M2QwMzI2YTgwNGY2MmU4ZjE4N2EyMjQ0NDQwOTg4MzVmZjY3MGFkNTViNDlmM2NkMGFiYTI5MDEKLTI5M2FlMDQ0Mjc5MTZlZTE0YzgxZjQwNDRhMDVkOWM4YWQxNGFkNGI1NTY3ZThlMDE0Nzc4MGEwYmQyOTRjNWEKLTEwYTUwYTVjYzc2NTZmOTAxNTg4NDE5MTA4ZDI1NzBlODA0YTVlNTkwMDA0MDA4Nzc2YzhjZjIwYjU2ZDVlZjEKLWZhMzI1MzhjNDgwYmNjMTk1NTMyMWY5NTQwMDg4NzFiYTE4MDE3N2RlYTk1MmZlZmVjNTM2ZjY1MjI1ODI2NDcKLWJjMjA1ZGQxMzlhMThkMmE0MTk1NmJhYTRiMDAyMTY5Y2YwNDJhYjJlYmY5MWZmMjAzZGMyZTI1NTkxNzE5MTAKLTIxMTllOTQ2NzNhMjc1ZDczZjM5MDlkMDgzNGIxNzBlMmI2MmJlZWRjY2EyN2FmYjQ0YTM1YWM1MWRjYjU3MTkKLTgyNzA2ZjEwMWIyMTZiNGFmMzUyMzk3NDM3OGEwNWMzMjc3MDJiMTMyMzM1ZmYyODhhZGY2MjU3OGYzMGNkY2MKLWNmODI2ODk4MzYxYmQ0OTIzOGYzNjhhZTIxODJmYmI2MzFlMzc1ZTkwM2VkOWVmYjkxMWEwNDcxMTliNDA4MzAKLWEzOTkwOTQ5NGU4NmFlZTIxNjk0MjIzZGYxYTU3YWM4ZTViNGYwNDY1ZDA4Njg5MzlhYzc3Y2NiNDQ4ZDNmNTgKLTM2NjMxY2ViZGMwNmJmMjg2NWM1ODQzNzU2OGNkNzM0ZWZiZmE4NzAyMTQ4NTMyMzJjY2I0OGNjNTdjOGMzMmUKLTk3Y2RlYjg5Y2Y1ZTBjMDMyZTgxZGUzNzdiMzY4ZjdkNTcxODdmMDgyODY3NWE1MjM4MmQ0MWRlNmNkOWZiNTIKLTJhMWNjZmRlMzE5MmM2NTBmY2Q3ZDFmODZkYjAzYzQwMWU2ZWViZDBkNDBiZjIzYzEwZTAyMWVkNjZiYzViN2MKLWFlNTdkMDkwNWJkMjQ5MjVjODU3M2YwNjkxMzk4ODNiYmRlMTNkZjNhZTA1YmVjMTc3MWVkZGI5YjAwMzU1NWYKLTlkNjk2NTdhYzcxOGMwNjVhMzJlZjdjYThhMWZmNTg4MGZjNjYxOTZlODEyMzA1MGE0N2ViZTRkZDVjMWE0YTcKLTQwY2UxY2YzNDBiZjA4MDIxZmNlZWY4MTcyZDljZGViMDYzZjRlNGMyMjA1YWU0NTAzYzcxYWVjMTgzNmY5YmYKLTk2Y2NkMGE3MTJlMzM0MDc0NDZjZWFiOTYyMjFkN2IzZjQzNDJmYzc0YWFmYTgwMjQ4MWFjZWNlZTcyNDM4MDcKLTM5MGIyZDEyYzg0NDE5MzU2MDczOGU1NzZkMjdiMGY1YTkwYjI1ZTFiNWEyN2RlOGEyYzc0YjMzMDM1MjYxOTEKLTVlZTAyNTEwNjU0NzVmMjZiZjBiYmNhNTU0OWYxM2UxMzU3Nzk3YTU3MjhiNDZiYTk1NzBjMDk1ZDkzODExMmMKLWIzYmEyMTJjMjZjZDZiYjU2OWVhMjc2ZTFkODM5NzU2OWY4ZDRjNzg1Mjg0OTAxODdhMTcyZDJlMzBkZDAyMjgKLWQ2OWZkYWEyNWZiZGI0NzdjODhkNTJmMGJhMTM3MjgwZDY4NjU2MDM2YzE3Yjg4NTJiMDNjMjE2MjFkMGIyMWMKLTZjMDE2ZjE4Y2FjZmE5YTk5OGU5NzJmNDBlZGEwNzI3OGRhNTRmZTUxMTliYWJmMDE0NWQ2ODI0ZjA1MWNkNjMKLTkxYmM5MzQ3MmY3ODBmMDBlMjYxZGM3NGQ2NjczZGEzN2Q4ZDkyOTFlMjVhZjI3OTgyOWY4ZDQ3YmI1MjRjMTkKLThiNTk4Y2UxYzU3NmFjODU0MmI1ZWFkOTliMDM5YWMyOTk2YTZkNzkxYTIyYTVkNWJiMGZhM2ViNjVkMWZhMDEKLTQwMWQ1YzdkNDRhOWNmZTA4MmU5MzE0YWRhNmY0YWM4ZWNlYTViZThlNWExY2I2YTFkYmExYzYxNWU2OWVjOWIKLTBmMjMxYjY0YWMzMWM1NDU4NTlmMDE5NWJiOWI0MDMxMjFkZjdiZTFlYTE0ODhiNDEzODI1ZDhlMWQ3YWZiZmMKLWU1YThlMWU1MmQ5YzNlYTZkZTNjZTc1ZDAxM2NiNzM5NmU4MjViYWMzYTUwZDBiZmZkMmQzMGM2ZjFjNWRjMGQKLTgzYzFiNjhkZDhiNjA0MjM4MjI4NTgxMjA5M2RiNGM1ZDdmNmVhYThhNGFjYmViYTc5NGY2MzYxMDQ1NmE2NDEKLTQyZmRmZDBjNGM1ZjBjNDQ4NmE2MTcwYjc3MDFjYTY0Y2QxNDA4ZjY4NmZiZDJhZmI1NmJhMzA3NzIyYjJiYmEKLWM1NDIxMjNmNzY2MTcxYjQzYWFlNWFjMDUzMDk0YTA0YWM0ZmFhM2NiZGFkY2VjODFhYjVhYWFjNThkM2E3YjcKLTFkYmVkY2ZlNjNkMDYyYjExZGJjYWNlZmVhODljNmY4OTE2Mzg5ZDNmN2Q5M2RhODllYmQ4YzM3NDE0YzdkYjYKLWQ2NTEyYTRlOGM3NjE0NWFjMTcwZmFmMTM2YTAyM2IzYzMxY2JhZTk3NzVlNDM2ZDZjYjI4MzViNzdiNTY0NTgKLTY5MDVkNTU4YTNjZmFiMGYxZjM0MjY1NTdhNjZiZjc3NTI5MmRmMDU2Y2ZhYWNhOGMwODdiNGMwYmNjMmFhZTEKLWZhNDlmMzQ2NjAyMzg0Zjc0M2JlNmIxYWEyNjEzNGJhMjg3MjM2NmMxN2YxZGQzNTYyMjE4MzhhNDBiZTNhNGQKLTBiODUwMmE5NjRkMzYwZWE5YmM1OGU0ZmZiZjI4M2M4Mjk0Njc5MTk3ZmFmNWQyM2FhZDFjODljM2RhODQ5MDIKLWM5NTYxOWZhMGFiNzZjYTBjN2FlNzI1YTFjNWQ5YzQwZTg0Y2M4NGViYThmYzk1MzYxZjNhNzM4ZGRiY2I1OTMKLWIzMTEwZGIyZjY5ZWNmOWRhMjFkNzg4ZDM2YTFiZjk4NmUyZGQ3OGM5ZTYyZjY0M2U2Njc3ZjgwOTkxZjkwYTAKLThiZDM1NDg0ZmM0YWVmMzI0M2JjM2I0NjBmNTdiZjZmMGE1MDNiNTdmODQ3MjM3MzhlMWI5NGMzMDI5NTIwYzEKLWY4ZDc4N2Y5OTMwNWVmODdmZTY0MjkzYjVmYmYwYTM3ODMwNjQ1OWMwMjJmNDEyN2YyZTIyMDdiYTgxOGFhYzQKLTFjODYwYjcwODMzYjkyY2I3MjI4YWIyYzhmNjhkMDNiNmVjYjY3ZDRmODNjYjE2MGMxNzAyOThlMWJmZjMzOWYKLTMwNjUwNWVhNGZlODY5MjlmMTE1YjNjNTVjN2ZiZGI3ZjA5ZWIzOGY3YzhjYTg2YzljODlkOWI5MmRhZTM3YTkKLTU4MzlhMTgxZTZlNTU4MzVkYTNlODFjODg0Njk4MGVjNWMxNjY0NmEzMWJiZmZlNTRhODUwNWUwMDVjOTIwMGMKLWNiMmI0NzYwODNkN2U1NWU2MzY0ODE0NmU4ZTYxNWQzNDllZDc3OWI3ODcyMzI2MDViZWIzODM0NmUzNTc4YmYKLWQwNDM3OTdlZGMwMGY2ZGY5MWM5YTAyOTU4ZWEwMWY1NWYwMGQ1NzZjOGE4ZDIzNmU4MWI1OWVhZjk2YmRmZTMKLTRkZTQxMjVhMzg5M2FjZWE5N2FhOGQ2MzczYjczNmQ0Y2MwMTY2MDk1YmJiNzViNzM0MWYwNmQ4ZTNmYjczMmEKLTU1MzlmYThhMjdhYmMxZDgyZjFhODZhNzY4NzA0NTBmZGViYmU4ODlkZDA0OGNiZjJmMTg0ZGNjYTUzNzc2NDkKLTljYTAwNTNhYTlhODhhYjRkNmYyNzlmOGEzYmE3MDRlZDA1N2RjMmEzNjFkMDdlNWFmNmM5YzhjZTRiMDhjMDUKLWQwNjYzNWFmY2UxY2Q3ZmIxMjg4ZGY5Y2ExZjlhNTU2ZDFhMTIwNjkxMjk3ZDgxMzQyMTRkYTE0ZGI0NWNkYmYKLTU1NDVhYmI3NTEzNGQ0NTI1N2IxZTM3M2VhZjIzZmI2MDAzNzBjZjhlN2RlMDJlNzIxMTYzOWIxMWY4ZmEwZDUKLTY2MjdjNTcxOGY1NTRjYTMzNTFhYzk1YzA0ZGJlODk0ZTIwNjkyMDY1YWYyYzdhOWUyMzk0NDlkZjRhNjU5MTcKLTJlMGZhMmJkM2ViZmZiZmZkOTA5MzU2OTg1MWEzMWRiNDZjOGMzMGMxZmI4MzM5YTdmNzQyYTJjODkyMTI4MzEKLTE1NDU5ODQ0Mjk4OTcyYjhiMDZlMmM2OTlkNmFjYWFmMzMxYTAyMzA0N2U1YjIwNDFmYzM5ZDgzMGIwODUxYTUKLThlZjFlMzI5YjY4ODAzNGY5YzkxOTI3Y2JhYWUyZWMyYzg0Zjg1MDIxMjcwNTVhZGU0NDhkNmRkN2VlYTNhYWUKLTM5MmRjZTAzMzQ3MTQxYjNiODVmMzAxOGIzMzk2YjlmYjFlNGE1OWM1MGQ5ZThiODI2MTAwODg1NzVlZWM2NjMKLTU2ODZlNzIzNGU3MmU0NjkwY2UzODZmY2Y5ZDE2YjU0YzljNjkyZTkzMjQ0MjdkZWU3ZTA5NmI2ZDRjNDU1MDEKLWRhMmQwZWRhNjZhMWYyOWU5MGMwMGZkMmM2MmFlNDNhOTdmNjExNzk0YzQ3MDRkMTc5Y2UwYmQ2M2ZmYzRmNTAKLWFiM2NhNzA4NmJmOTQyMjgzZmIwZDE3NTg4OGExM2U1Mjc4YWFhYTI1YTI2ZTNkZjRmYmYxM2U2NDUxOWFkOTQKLTQ0YWYxNzEyMDdmM2Y4OWIzNjljY2Q2MTYyYzBiYTEzMjBkMzBkM2E1OTZkOWY1ODk3NmY5NDQzNGMxZmI3NzMKLWU3MGJlODc1MjhhOWJkNWZiN2U0OTRlNmNkYmEwYTNjYWJhYjhkYzIwNzNlYTdmNWI5NTZiZjVkNWNhMWIyNTgKLTI1YTczZTA4MjRjZThkMDBmNGM5NDVjMGFmZGM0YjU3ZjdjMDE2MmExNGIzMDE1NGI2MWFiMDMwYTczNjc5YWYKLWQ0M2UzMjJhMDRmYzdiM2M4MTRmM2IyZDA3NTg1ZWFlNmE1MjU0YjQzYmM4MzZjNjAwMGJmMjNhNTZmYmZiZmUKLTg0NzhmMWNkMDAxNTBlZTM5ZjBhYWQyYzdhZTMzMTNiOGQ2MTliODRkZGQ4Y2QzODc4YTRiMzA2OTUwODczZGEKLTlhNTkyZjUyMGI3ZDdlMGNmOWI5Yzk3ZDM1MTM5ZWVmOWMzMjk3NjM4NjllNjRkODlhNTJmZWQwMTZlMWNkNDAKLTQ0OTczNTlkOWQ0ZDZiYjcwMjIyNDE4MjgyY2Q5ZWQ3ZjEyYzE2Y2MxYWE2YjNlZWE5YzgxMmI3YzM5MTAyMDkKLTI4MzFiMGYwNWU2NDRmNThlODc4YzFlYWEzZDU4N2M4OWIyNmRiOGI5OTUyZTBiZWFkMTJjN2RiNmFhNWEwNDIKLTllMzMwMTJkYjA1NTFmZTZhNTg5YmFhODAwOTA1YTdjYjM1ZDIyMGVmYmI2NzVhOTY0NDRlZGQxOGFkODlkYmMKLWViYzQwODcxNjJlOTc3YjRjYzY4MGEwZTM0OTBiZmFmMjhhNTU2YzNiYjkyOTk5MzUwOTdlM2UwNDg2Nzk4NDkKLWE4NWNlOTA2ZjU1YmRmNTY0ZjNjY2EyYjBhNzBiNDA0ZDAyNTIwYjc3NjE0ZTU3NzIzMWNiMjMxMGRkZTFiYTUKLWNlYTFlZjkyNmFkMTkxYzk4YTIxZWQ3NmViYjhmNDA3ZWEyYWUyZmY1NjAxNDIxNmFiYjExOGMwMjE4NTkwZjUKLWYzMjg0ZjlhMTg3YTg1YjNmNTA5MWYwNWIyMWQ3NDdmNmZlNzM4NGEyN2FlNmE4ZGRiOTIzZGY0ZjYxOTAwZTkKLWFkYjhiZTVkMzM4NjEzZTE0ODZkNzEwZTg5MmI1YjczMzA2MTk1MWQxNjRhZTIzMzAyM2E2OWUwMjQ1N2U5MGQKLWRmYjZkOGE1M2VhMGE1N2YzYzllMjc2MTQ2MzNhY2UzYzZjZjU3ZGM4YzgxZDBjMDc5NjQyYzRhMDc0NWQyODEKLTJiYzZhYzQ1ODdhNTZlNjVkNjk1NWU1MGY0MzgwZDk0Zjk2MjhjMTMwMTAyZTJhMzMyNWQ2OTQ4NjVhMGRkOTAKLTAxYWIxMThmMzkzZmQ4NmQwMWFlZGI1NjEyZmNiNDllOGI4MWZhNmZhZGY3YjY5NjUwZmNlZjQ1YTBhNzI0ZDkKLWVjZjhjZWQ1Y2Y1NjkxM2ZiNjhhMzljNzEzNTBhY2Q4NTU0MzNjYzI1YjI1YWRlMTk4Y2RhNDZiZmNjZjFmYWMKLWYxYzg0MWExZTYwNThhNzNlMjZlNTgwY2I0NjM4NDg4NWM0MTc3OTlkOTI4MjI2ODljMmY1OGJjMWUwYTA0MGEKLTlkN2QzZDczZGUzYzE4Njg4ZDYyNTgxZDU0YTBlYWRmOWRlZmZiM2RiMzRhOWYwNTJiY2UzM2Q1ZmU4ZThhZTkKLTc4ZTRiMGJkY2MyYThmZmRjYWE1YjRjMGY0YTAyNTZkOTQzNjRlNzBlMTc0OWRiYzJiMTQ3ZDY5ZWM1MzliNDcKLWVmODY4YWM0ODA3ZjdhYzFmMDFjOTNiMzM2MTk0MjkxNTU4MWVmYzc1NDQ1M2YyMjFmNGE3MGJiOTAzZWMzMTAKLTYyY2NhN2FjMzkyZjZmNzBiNjFmNDk4MjJjZmQ2NWM2NjgwNzBiYWJjMTEwMjMyMmU0Y2YyMjQ5MDJmMGNjNmUKLTI2YmIyYzExOWMzYzY2NDM0ZjRhODUxNjRjNDllZDUxMDg0YTFmMDc5NWViNjMxZjZkMzgxMjM2MTljYzVjZWQKLWM4YzY5MDhmMzgwYTRhM2Y3OTM5ZDBiMDMxODdlNDQ4ZmE0NDMzM2VkOGQ4YzI1MDRjM2ZjZTAyMzU3OTVkODYKLWY3YTdiYjQyM2QxYTdjYTgxYjI3YjRmODFjOTNhYzk1YmEzMzZhMGQ4ZTZiYjkwYzk2YWU3NzVlZTM0YzA3ZGEKLTVjZDAxOWE3M2I3OTQ0NDI0ZDI0MmRkN2Q5NmVhMDM0OTMwN2VkNDI2ZmUwYzdmYjhiNWNiZTNkMjk1YTMwNjkKLWI5NzVmYWZiZTc4MTA5Y2FiMzVhYzJmYTUxNTRmNjZhZjliOWVhNTIyY2Q0ODQ3NDA4ZDFjZTI0Y2Y3ZmM3NzAKLTRmMjIyZmVkYzk2MmZmMjFkMDlhYTJhZTZjYzFiMTRjZmJjYWI1ZDAwMTY2MDczNjJkM2M4ZjYzNDdmN2E1NGUKLTgyMTMyN2RkZDQ3NTM5NmI0NjViMWJmNTg5NDcwM2M2ZGUxZTk5NDdlNjQ4NjdlNjhlZmIyNjIwYzdmNDYzNjcKLWMwYzM0NWYyOTRiNzgxOTQzZjBjOTY1MDA2ODhhMDgzNDdiMDI3MmM2MGU1ZDZhNzgxMGE0NGM0ZTU2NTRkMDkKLTA1OTMxYTU3ZTFmZTZmZjdlZGQxZTc3YTFlMWMzOTA3MGI0OWU0ZDcyYTYyZjA2MzQwZjlhNzZkMDU1MzkwNWIKLTM1ZTU3MTE0MzRkMjVjYzNiMTQ1NTdiYmFmNjZhODJhNmVmNTQzYmJmZDE0YzMxNGRkZWUwZWU5OTA5MDQ4MmYKLWMxZGQwNmVlY2YyMDNlYzk1MTFhM2FkNmNjZWNkZDExMzljY2YzMWRjNzJlNDA3ODUzZDE1OWMxNjIyMTMxZGYKLWY1NjBiZDg0YzMwYzU4NDM5YjA2YWVmNzliZjUzZmZhYTkwYWIzNzI3ZTU5ZjE2NDI3MWE2OWM1YmYzNmYwZDgKLTNmOWMwMDk5OTMzYjZiZGZjMmY2MTNkNGYzNTY1ZGZiZDBjODVlODcyMzQ5MWVhZDEzNjk3Zjg5NDVmNjNhNmEKLTYxMjk5MDYxM2I1NGJiN2ExOWMxZDNhMTNjMTRmMTk2OTRlM2IxMjkzMjkzYTUxYzY0ZWJlNDM2NzM4ZWI2MWUKLTJjY2VmMDljYTc3ZWViMzVjN2JmMTBkYjJhOWIxZWFiYmU0ZmI4OGNjZWZlYWU2MzU5YmY1ZTEzNmVlOTc0ZWEKLWExYTVjNzE1MmQ1NGRlOGRmYWI4OTQyMjk0M2FkNTBlNTg4NGYzMzBhZDQwNzg3NjNlYTA3MWM2MjY1ZTU1NWQKLWE2MTBkMjQ2MTMzNDM1ZGIxMWMzN2U3ODYzMDJlM2U4ODg5ZWNlMWQ5ZWMzNjcwZDgyYmFiZmVkN2JlMmZiN2UKLWZkYjc4ZTFiNmUxYzY4MmI5MzBmNDhiZjBhMjgzMDFiNDYzYTVjYTc3YzM2OGY3ZDU3MTg3ZjA4Mjg2NzVhNTIKLTM4MmQ0MWRlNmNkOWZiNTIyY2Y1MmQ4NzkyNzk2ZmNjYWM0OGQ5NTI4ZDZiYTY1Y2NhNzc1ZWVhMGQ5ZTI3MmMKLTA4NGY4MDE3YmI0ZmY3NzliNjE1YTQ2NTE4YjI1NmIyYzQzYjI3ZTI4Yjk4OGJmNmI2MGQ3ODNkNTY5MDVhNWQKLTc3OTQ5MDRjMGNiOTVlMmFhODM1MTJmNDdkMmMzOTNiNzc4Yjc2MTEwNTNkMzFiYmM0NjcwYzZmZmU0NWZmMjUKLTJiNzA2NGU0NzQwZTg4OTUxNjk2MDdkNTdjODk5NTZiNTI2YTY2NGIyOGEyYTlmN2M0MmQ2YTQwYzRhOTVhYTYKLTZiZTk4OTY3ZjUyYTg1NWRiMDJjNDk4ZjE0MWZkNmFmZmZjMGE2OWIxNGJiZDAwOWEwYzBmMDIzZDRkNjcwNmMKLWNjMDU0MDFhYTk2ZDU1MGI2Y2UwMTkwMjgxYmE0Y2ViZjE2YWNmYTRmZDk0NzMwY2Q5NzdkNmMxMjBjMTI0YmEKLWVmODQ4OWUyMmExM2MzMDU1MjE5NmU5OTA0NjIwMWNjZmYxMWNiM2FmZjkyYTYzZTQ3YTEwYTNhNjQzM2JmYzAKLWU3NzA0NzQ1M2I3MTUyN2YyMDljOTM5ZDg1MTYxODJjYTVmMDk2NmNjYmY5NzFmZWRlMjVlM2ZlZmQ5MmNmOGIKLWZkMTFhYzU5ZGZmMzZjMjVhYWE4Yzc3MWE4M2Q5Y2JiN2RjY2IzN2Y0Zjc1NzJmMTFmNzAyYmMyN2VhOTUxMGIKLWEyZDRiYWE5NGY1OTUzYmViOTI3YWFmMjQyNjQyMWYwMDkzYzYwM2JkNjM4MjdlMjhmMTdkNTdjZWY0NzY1NzcKLWMxZjEzZWI4YmVlYWRhNDJhMWViMjIxY2FjM2RjY2Q1ZDg0YTZmNzRmYTJiMjg5YzNjYWI2ZTJmYzk0ZGQ5MmIKLWQ5NmEwMTViMjE4Y2E3ZmFjYmUxOGY5YzdhNTgwNjEwOTA1ODQ3YTY0OWU0NDc3NzczYjg3Njg2ZjdmMjhiMzMKLTI0MTQ4ZjQyMTNjY2FhYzQ4M2I0M2JlMmE5NzYzZmRiYmRiYmQ1MGEwZjlkNTlmYzMxZjViN2IyYWMwZjkxNWEKLTg5YWJkNjRkODRmYWE2MmE0YzMxNjdmYmJmNjUxYTYyMzZlYWQ2YWQ5MzFjMTE0MzU5MjFjYmRjNGVkNjZmNjcKLWZlODNiYzA1OWZhMGM2MjUwMDFhZDViM2JmNjM4MjkzNjQ2ZDMzMDc2ZjNhZmFmYThiOGZkNzMwN2RhNWM1M2IKLTU4NDU5OTljMTYyNGU5ZWQzMGNkNDg0ODM0MDNmOWFmZGFiYmNiZTgwZmE1MDI1YmVhMmNiYzA4MWUyYjMyYzcKLTQyNjg1NDIxY2UzZDU3NGE0MTRiMzQwMDc1Y2IwMmU4MGQ3NDI3ZDRjYzUwM2VlMDJmNWIzM2U1MDlkNzZlMGIKLTIxYjVkNWEyNTI3NTdjNGI3ODkzZGQ5ODcwZjkzNzFlY2E1N2FlNzhhYzY4OGVlMjhjMzFkNTk3YmMwMTg0OTYKLTNmYTU0YThlMTYwYTc3ZGM4YjA2MjdkNzMxOTg4NWZiMmFlMGUyZTJjOWZiY2RlNGI1YTdhY2IwNGJmMWU2MTEKLWI3M2IwZGVlM2FjOGY0NGM0Y2ExNWRiZWNhMjBjMzVhN2E4ODA1ZjNjMjJlNmZiYThlOWIyMjcyMmRkMjVhZTMKLWJhMmRlYzJhMGM5YTEzNTA5ZjRjOWZkM2RiYTAzZWY2ZTQ5YTYzMmJmN2RlNWVjNDViNjRhMWY0ZTNhMzY5NzYKLTFiN2E5YzdiOTViZDI5YjA5YjkzMGIwZDgyZjJjMzlmOWJjM2MyNGQ5OWM1OGE2NjRkNGFkZWRmN2I3NGUxM2UKLTZkODVlMDNlNjE1YTYwYTJhZWU5Zjc5MGM2ZDBhMmU2ZTgyZTY4NDBlNTFiMzhjNDU3OWZiOTUzMzc0MjNmYmEKLTQzN2Q5N2FiNDJiYWZiMTA5N2IyZTI5NTJlODZjODhlOTRiYTcwMjBlODMxNjNiNWQ4MTBkZThmNTc2MjU4MTkKLWQ4NmQ3YWU4MzRkNzEzNWUzMGYyZTIxZGQwNjFmZjE1ZjIyZGU2YzkyNDNkMmNhYWE1YWJmNjdhYmVlM2E2ZjUKLTMwNjI3MzAzN2FkY2QxMGU4ZjAwODE4ZWU4OGFkMmVhOThkNmI3ZjFlZTdlM2QxZGI0OWE1N2ZhMzUwNjY0ZDYKLTAyMTA3OGVlMWViZmJkYmU1YWVlOWVmYWIyYWNkOTgwOWNjZmIxODBmODAxN2E4NGJhNmJmYzFiYTU5NDBlY2EKLTMwNzZjODYzZjhkOWRmM2U0YWZiMzIzNjFhY2FiMTNiYWNkM2U0NjVkMDk0YjY0YmVjZTk4N2JlNjZmYTUwMWQKLTVkZWJhODkzMzY4ZWEzZmRkM2IzYTQyMDFkM2JkNjhiMzQ2NGVhZDEwYzZmMGRkZjUxM2E2MzBlMDEzM2ZlYzgKLTA4NjMwZTRiM2M4YjBhYWQxYmJlZWQ1MDhlN2UwM2Q0MWIzZDA2MGE5MmIxOTU4NDA3ODQzZTRjYWJkNzhkNzkKLWZmNzJmYzBlOTJmNDkwM2NmZDA1ODU2ZjQ1N2RkMTViMWFhYjk5YzFkMjk4MDRkMmYzMTM0Yzk4MTdmNDVmZDIKLWVmZWJiOTI1NDVmMDU2ZjRjYTc2ZWE3NGFkNDY0Y2QwNDFiN2NiYjg4OTJmMmRiYTgzMzExOGI4M2UyMGMwMzkKLTk5OTM5ZmZjNmNjNTA1MDNiYjg3MTU2NTc5N2VjNTM3ZTI2ZWI2MjJmZDMwMzAzMjczNzQ4YWYyYWZkOTdlMDcKLWE5YzJhOTZmNGVmODc1NGRjM2VhOGYzMzQ4Y2IzMGQ3NmJkYWE4NGQyZTkzM2M5NGM5OWQxM2U3NGYxOTk3MGYKLTVkMmJkMTk3MTI5MjZlMjMwZGQwMmFlYWU2NDYxZWRkODNhYzkzNWVjMmY0MjA2NDlmODJkNDE2MGEwNzI3MDAKLTEwMTQxNjAyYzNhNjU3Mjc0MGQ4ZTk3ZmQwOGU1NmI5ODcwNjJiYjU3MjM3YmJiMzA1NmEzNmU5N2UzOTlhN2EKLWNmOTY1Mzc0M2E5OTg0ZWYzNjI1NGQ2MDc3MmEwZWVkY2E4MDA5MjM0NjFhM2U0NDQzYTVlZjQ2OWFlZmNlZWMKLWFhMTgzMWU1NmIwZDhlYTZjY2I3NmJiOWRiYjZhYjc1ODRlZTI2OGJkZDBmNWYwZDU3ZWRkYmE5Yjk3ZDc0YTIKLTkxMGYxNzhmMzg4YTUwZmEzMmFhZDdiODdiMzIzNWVmY2FiZDRiNTAwOTE5MGQxMmU4Yzc3MGY2ZTcwZGJlMTAKLWU3NDdlMTk4NGExYzQxZDcwMWU2MjIwYjAwMWZlMjViOWE2NzdjOTk2ZjhmZDkxYmQ0MGZhN2UwN2Y1N2U4YmQKLTVkMjM4MTQ0MmIzMzc5MjRlNTZkZTRkMThjZGMzNTIzMTRjYWViZjA2NWY2MTBiMDBiNTAzMDJiYWUzYWQ2MTIKLWRhZDkwNTlhM2Q3ZjNiZDYzODI3ZTI4ZjE3ZDU3Y2VmNGE4Y2I4YWYxZjA4MGE5OTNjM2M3NDg3MWU0YjdiZGIKLTI2MDJkMDc1ODdhZWQwMmFhNzgzZDgwMjM0YjZlZWNjNzdkMTYzODQ3ZTYzZDNjOWFhNDEyZDEwYWNlYTdhNWMKLTVlY2U1Yjg5M2JiMzAzMWZhY2VlNzI3MDFhY2QyMjVkNmI2YTc1MmNiMmY4NGRlM2NlYWIyYjk3YjYwNmEwYmYKLWM2ODc0ODY5YTg2ZTNhNTVhNGUxZDdhYmQ5NDcxOWY2MDRlYTY4YjExMDhlYmI1YmViYzNlZjQ2NWJkZDJjZGIKLTg2NGVjZmUwZDY5NTlkNTExNGVhYWYxNjEyYzk3MGNhYTJjOTQ3MjkxNzhlNmFmMTMwYTFkZjIxMWEzNzk1YTkKLWI1ZmI5MzRlNDdmNmM0ODE1NWExOWFjY2U3ODgwMzZiNDg2N2Y5MGQ0MGMxZTRmZjc0NjAzOTlmMWYwOGY5OGEKLTBhYTNlMGQ4ZTM1NDE5NWEyNTYzNzU5ZGZlMDE4M2M4ZDY3YjQ0OTUxNmVkOGY1Y2YzMjg4ZjcyOThkNjIwOTIKLTkyMmYwNzAyNzM1MmJjN2M5NjEyY2ZjYTQ2ZjFjZjJlZDE0MTdhYjg2M2MyNjE1ZjJkMjZlZTEzZDdhMDRhMTgKLTgzMzZlYzk5NjFlNzZhZjJmNTA2ZTNkYjNkNjdhMmE0ZmIyZGJiYjBjYTM0YmU2ZGI5Nzg5YTFjZGE2MDdkOWIKLTM1ZjBlYWM0N2Y0ODhiYmU3NGY4ZjA0YjQ5ZGM0OTJlYzhmMDk2ZTY3MTBhZDU5ZDI0OGEwYzk4NDk3NTQxZDgKLTVmOTEzNGQ1MjE1YjBhMDVmYzI5ZGIxYWE3MWU0MzJhMmMwYjAwMTA2YmYzMTI0ZGYwYjcyYzE0NDM3NWEyODAKLTljYzVlZDgzMzViM2U5NzBlYWFkOTE3OGY0MzAxMWI1NWQ3ZjNlMTFkODliZTEwNTgzNjE4OTMwMTYyNTQ0NDAKLTM1M2I4ODE2MmE0ZTc5MTM3MjEwOTJlMDU1NzM0OTdlZDY5M2YzMTIwMTc2ZGMwODI1M2QyMzU2NTU5MDQxZDgKLTc0MWE2YjljNDFmOGViNjk1MzY5NjMzNjMyZmZjMzVhMWUyZTRlZDYyNThmMGE4ZWVmMGJmNmJiMDI4ZWZlZDgKLWE2NzliZTRiYzE5N2NjODY4MjU1Zjc0OGNhOTUzMzEyZWVmNTU2ZDhmZGFlNGU5NzA2YzMxMTZlNzYxNDA1ODcKLWRiMTg0OTI3MzBhMTRlOTZjMjExZmNkMGFlYjBkNDMyNGIxYjRhYmQwMTUwNjM3YzZjMTM1ZmNjYTE4MjNmZGUKLTIwNDgyZGJiYWI1MzZmODdlMWQzZjBhYzRiNTE1NGUzM2JmYWFkZTNhYzRhZjhiOGQyMDgyNjU4ZDM1YTI1MWUKLWEwZDcxOGY3MDJlZDhkOTU3NTU1MzMxYzk1OTNhYmJmNjRiMjE5NGRhYzlmMDk4NzczZWY0MzEzY2Q4YTQ4ZTcKLTRkNjA1MTNkNmVlMWMxMzJlNTllYmY1ZGNlMjM1OWI2MWVmZDE2ZmI0Y2NlODEwMTcyYWJiMzkzOWU4NzQ3OTIKLWE4NjI0NjJjNzI4OTU0NjFlZDRkZDI2NWFiYmY1MmMxMWM1MGU2MDdmZDNiZWJlZmYwMzk3Mzk4ZjY1NjA2NmMKLTVmNjRmYzRlNjdjZjVmOTg0ZmU4MThjOTUwMGNiMTBiZWFkYzFhYzUxM2MwYzhlNjA3MDExNDRiOTQ5Y2U2N2QKLTA4Y2VjMWFkZWI3MGZiMDFmNDhhYmZlYTIyNDEyZjRiMDdiNzEwYThkNzc0MjI4YWUxNTZiZmRkNTU2YzBmNDkKLWJkYTA3MmMwOTI2YTA4MTUwZjc3ZWUzMzhiM2I0MzAzYmQyMTg2ZGEyMWI4OWRmODA0Y2Q1MzFjNDk5ZWY5NTMKLTliMWVkMzI1ZTVlZjk1MmFmMDVjZjY3YTlmZTY0YjFhZjk3NWMxODM0ODgwOTE2MWFkMzgyZGViZmRlNDU0OTUKLTViMzI0NzJlZGY1MDk4YjZkMWY4ZmM4ODA3ZjgxZWU1YmUzNjU5YmQwZjQ3NTQyZWU4MWUyMGNiYWVmMTY4ZGQKLTRiOTkxMDY5Y2RhMmY4NTBiMWZhYTQwZTc0ZmFkNzllZDVmNzRhMGZkZTFjMDYwOTk2YTIyODBlOWM5ZDIxZjUKLWQyMzE3NGQzZWY0ZDllYjZlMzM3ZDQ0M2NmY2NhZWFiOGIwMDE1ZTY0MjdmOTQzOWM4NDczYTEzNjRmYWY3ODIKLWY1OGJkOGJkNzc1ODk5MDkyODQ0YmE1NzBjNDI3ZGZmNDdiOGNjNDg1OWZkOTA0MmNlNzhhYTI3ZmZlYThiNWEKLWM1MmJlMGQ5N2NkMDFjNzI1MGE2ZWRhNDg5YjVhMTdlMjMxNjcyMzllMGQ3ZmQ4ZjM0Mjk1MjllZjAyNTQ4ZTkKLWI3YmMxZGNmYzcyOTYwMGZmOThkOWY5YjMzZWNkZDEwZmY3OGJhYTMxM2I3ZTM1YzUxZGZlOGM2YTE3NTY4ZmQKLWJmYmQ0MzQ4NjBhOGVmMzgyMWIzMzY3ODNmYTMyODI3OWMwNWIwNWFiYTM3ZjhkMjZkYTQzMzkxYzljZmJkNzEKLTZiMjQwMTQ4OTk1YTAwNTQ0OGFmYmU0NWVmMmMyODUzYWEzYzFjZjNiYTY0MzRlYzc5ZThkYmFjZWY0NDM1NjkKLThlNmVmMTdiZGY5NjBlOWEzN2YwYjM0ZjRhYTM5NjQxNDkyYmNjZTk1YWZlNTVkMTY4ZTUxMGY5MzQyODhkYTcKLWM2MWViM2UxYTQyZjE4YWJjNjA4OTk1Y2Q4YzlhZmNjNTkxNzUxYmNkOTc1OTM4N2QzOTI0NzUxYjFhMmM3OWEKLTBjZjE4YjUzZDNlZDgwOTZlMmM1NTlkZDAwMWU4YmY2ODI0YjNlZWRhZmVkZDhiODlmYTIzZjRhZWVkMTQ0MzUKLWE3ZDA1ZGE3YjA2MDdlZGYyYWFiMDgxNmU4NjZmNjc5MWU4MzRiZmY1ZjVjNjY5OWVkYjk3ZGYxOTk1NDlkNTQKLTNkMDM5NjcxYTQ4MWQwOTQzNTJlYzc2ZDJmN2U1MTE5ODg3ZWUzYWQxMTE3Zjc0OWE4NWIzYjZmMzdlM2QyNWYKLTI1Mzk3ZDFkMDE5ZGE5YzVjNmZiYmZiYWViNGZkZjBhNDIzZjYzOTQ5NjhmMmVhYmM1NjBmNzZlNzViMDdiNTQKLWE2ZDg3MzI4NjA0ZmM4NmJlMzdhMWU4ZTU3OTBlYjg0NWNjYTg4YmJjMmUwMWVhYjI4YTZkNjYxNTIyOTY1OGIKLTc1NTRhODUwNjRhYWNmNjk4OTQ5ZTRmNTZmMmJkNjFiZDVhZjMxYmQ2MDEyZWYwYzFiYjYyN2NiZWVjNzFiNTIKLWU5OWFmOTVmNjk5NjE3YTg0NjJlMTRlMTQ0NDI0YTY0ZTRjMWNkYTgwYTEzY2Y3YjIwOTI5MDQxYjJkZjY2ODYKLTE1YzJmNzdhNzNmOWNkYmNhMzNjZDExMTg4YTlhNjA4YjI0MGIyN2U3Y2ZjNTIzNGZkYWQ2ZGI1ZDY1NjU3ODcKLWQ5OWY0NTcwOTY3NDY5MGVlNzA0ZGU0Y2U2YWNjYzM3MzQzZWFhYzAyZGQ4Y2EzNjgyMjFkNjA3YzRlYTI0ZGMKLTA1YWFhNTE2MjEyMDMwMWE4ZmI0YzMxNjZlZjBlODEzYWFiNTM2MjAwYThkNTRkM2UwNjc5Y2JhZDU5Y2FlMGQKLWQ5YzI1MTAxNjMzNmM2MzI0M2I0MmY0YTQzOWFmMGYxYjRkNGNjM2VlOWMyNGRhZTVlYzg3YzEwYjRiMDQ2ZWIKLTM4NzdlYWU2MzYxMDFjMzIzMTMxOTk1NzY5MGNmN2NkNTYyZmI0OGU0NGFiZDQ2YmZkODY0MGRlNTM0OGEwMWQKLTgzODlkYmUyNjE2NTcyOWMzZWExMDIzYjM1NGNjNmI2OTI4OTIyY2ZmYjJkZjllYTYwZDg1M2E3NDA2N2I0NDIKLWE3ZDQ5MzgyOTZlMmZmZGVlZThiMzNkYWUyZWNmNWJlMjQ1MWZiZTM4MjlmOWMxZDQ1ODIwYzk4NDkxNzZhNDMKLTIyNjk0ZjA1OTM2NzY3MGQ2OGFkMTIwODBhODQ2MDM4MjFmODY3Y2EzN2RjNzI3YzNjNTI1NDEwM2FmMjFjZDkKLTAzNGY2NzlhZWE1ZDRiYzgxMzY2MjQ1NzI1ZmE0NmNkNjcxYWM5MjUxODE3ZThhYmJlOWYwNmYxODJiNzM4ZTkKLTA1NzY5YjBkNmE1MDQxNzAzMzRkMDliYjdiODA5YzI0OWNhOTY3ODY1OGIzNmZlZjk4YTBmODkzNmNjOTE2N2YKLTMxODM3ZmIyZTkyMzE5YjhlNGRmNTE2ODQ5NGZlOTBhMTJhODhiOTNiYWUwOThmYWMyZjNhZjJjMDg3NzU5Y2YKLTBmZGMzZDkwMWU5MjEyMjJhMTllNTNjNjU0ZDEzZTUyYTZmMjcyYmQ2NWUzZGVlZTE0ZTNlNTljNmRkOWI3OTQKLWRiZDQ3NmNjZDRkZWI1MGU5NGQyMDcxMjNhNWJiNjI3NmU0MDE3N2MxM2FkZWU5MjI3ZTI4M2I1MWJkYzhlNTAKLTJhZjhkOWYzZDRjZGY2MWE5YmZmZGI1MDQ3YWEzMDVmN2M2MWZiYjQ5NDQwYjcwOTkzYzk2MjAwMjBmYWRmMTUKLTRiNTI0OGU4ZTJhNmZkNTYzOGE0NDdhNTkzYjMyMDAzOWViNTNhNzA5ZTk5MmE0ODFjMGRlNWYxOTY0MGMxN2YKLWNkY2ZhY2ZiZjdiNTI1MmMwMjc0YzUzZjZkZTc4YTExZGI2NDAwNzZlMDFhMTFiZTZhNjNjM2E4YmUwZTNmYjAKLWYwYzFmNDBiMzc5YjgwMzk5NzcxYjBiMjNhYTBmYjkzNGVlMzE4NGYwYzE4ZDVjYjQwMjg1NTEwYTRlYjkyZjEKLTZmMDg5Y2UzY2YzMmI1MmFkZDIzYjBmNmE0MzY2MzdhMTdhNzFmOTBlOGM5MWFkZWFmZjdlYjk3MjIwYTE3YjcKLTM1NGVhODBjNjc4ZTE1OGMxZWNkNTg2ZjBlMmU2ZDdhYjVhMTc5NTAwZDQwNGUxOWE2NWRiNmM5NTY4YjA3OTkKLTMzMGQ2OWIyNTRkMjllNzA0MTk2OTY0NTUzODE3YWI0MjhiZTI1N2M1ZDUxYWFjNjFlZTljZmZjZDNlYzQ2MTUKLTFkNmU5OTkyYWQ5MWE3OTFkMWMyNDY1ZGYyNDc1N2RjYmM2NGYzNzg4YjE1ODY4YjkwNWU1M2NjZDA0NjI1YzcKLWYwNGZhMjY3ZDY4YTZhZWI1OTQ0M2VhZDliYzE3MWY4NDViMmIwZDdhYzdlNzg4YzIxNDExYTFkNGIzOTM1ZDYKLWVmMjA5MzMzM2NlMDkyZGE1ZDA2ZmNmNmMxZjFhZmM2OGRiMDBjYzFkMDA5MGYyMTA0NmI1NDY5NGY1MTYyY2MKLWNiMDdhYzZlODFhM2I2NTc4NzFkYjA2OTJjZDcwZWRjZmI2NDVjMzM1MTY3ZTA4ZWIxNWNhYTZjYmY2NDE5YjAKLTFjYjI4ZDNiZWI4YzVhYjZjOGY3NzY2M2EyYzI1ODE3N2ExZmViOWFiYjU2MGU5MDNiNDVhMWQxNDY0NGEwOGQKLTc3OGEwZGI5MThiMzZlZDVhMmQ2ZDQwOWFkZjQxYTIxYjEzMjExNjc5MDk0Y2YyOTBjNDY1MjYzM2Q4NjFlMWUKLTJjZjIwYjY5Y2NkY2YxN2FjN2Q0YmMxNWZlYmUwMzc5OThiOThjMTc2MzY5ZDIyNTk5NWU1NzhmNjJmNmU1NDgKLTA0OWRhOTI5Njg2Y2FmOGI1OGJmMWJhZjk5YmZkNzE5NmM4MDg0NDE5ZDM4MTA3OGFkMGJjNmJmZmJlMTYzZGUKLTE1YTRkMGU2ZmI1MzIwOGFmZjA2ZjA4OTY3ODgyYjE3YzA2OTZmMDYwMjE4YWUwMzc2ODIwMzZjYjM5MzY1YjcKLTMzZDhjMmIwZjI0MTRmM2M5MTk0NzNhNmFiYzhkNDE5ZjcwYjU0MWE2MjA4MjYwMjk5MGMzYzM1YTU1MjE3ZDUKLTk2ZmVhODIwNDgxODE5NTA3NzlhM2ZjNWY2N2JkYWQ4ZGY4NGU1NDMzZmE2N2JjY2QwNWVjODg2ZDg1N2I3ODkKLTE4ZmZiZjA4M2ZhMGI5Zjk4Y2Y1Y2ZjOWFlMjlkNjA3ZDJlZDExZmEwMjEzMWZkN2MyNTg0MzFiMjBmN2IxMTMKLWMzMTZiNzE2MzY0NGZkZWYwMjlkMzMzNjYyMDBlOWM0YjU3Mjc5NDA0OTBhODFhYTEzOWRkZGY5NDkzZjZiMzIKLTBlZTg0OTUwYTZhNTQ5NDYwMDMyZDBiYTdmYjNiMmRlZDJlNDAyOGJkM2VmNDU2MDA1YmZjMTQ1NmM2ODFmMjUKLTgyZGFkNmRhMTUxMjdhMWVmMTQ1NTBkOTU1N2I4NmMyYmMzNzQ0MGQ1MzhlZTUxNDZmMzIwYzlkYjA3YWVkNjgKLTcwZjZmYTc0OGE1Yjg3ZmRlMGUzZWY0Y2YxNTY3ZTc0M2VlYTI2MDc2YmE2NjhiNDZmM2Y3YWQ5OWY0ZGYzNjcKLWZkNDBkODdjY2EzNTI2N2EwOWEzYTMzZjgyMTI2NTViNzQ3MzIzZTlkNWYxODRjZGU3NjY5MDZmNmY4NWVmMmIKLTNhZDBkYzBlZGNkMTUwZTU4OWRhZTljMGUxOWQ0NjRhZDYxOGMzMmUxNGE1ZGJjYWE2ZWNiY2Q5OTBjYzQ5YWQKLWM2ZGUxOTEyOWRlYmQyZGU5OWI1MDZhZGY0ZGJkZWE0ZmYxMzY0ZTMwMDQ0N2M5YzBkZWRhMmNkZjFkMzY0OGIKLTFhODNiZDRiZTQ2ZTE3OTdmYjViNjIxNjA3N2E1NGYxMmM3YWNlOWMyODMyMDAyNmExOTQ5MmU1ODE5M2QwODIKLWMwYjU0NzNhNWE2MDNjZTIyZWEzNzc1MTFiNzI1YWQ5YzIzYjFhMWI5MDZiNDY1ZmEwMmQwZmI2MjBlMjMwNzQKLTY2YzlkMDc3NzMwOTE2ODUwY2QyYWJjYzI0MTJhMzY0ZjRhMGVmZGUzZmI3NDFkZWE5MWZiYmExMzhlNzRkY2IKLTgwOTYyNzI4MmJlMzE3ZDhmMWRiYjIyMjIwYzk2OTZiZjM5YTI3ZmMzOGFmZjkwZWFmNDU4MTUxYTAwYThhODgKLTlkNGY1ZDkzM2IxZWVlNjMwNTRjNjU3OThhZDMyMDc5Y2U1NzNkNTNjNjIwYjZhMGY4MWZkOTMxYjVhMjQ3MDcKLWViYjMwY2YwMWIwYzYzYjU1ZWU4YzA4YjgwNWE5YTQ1YWVhOGFhY2Y0OTk4MmNlNmQzZTg3MjZjNmExMjI0MzcKLTFiOWIxMTZhNTZkZTYwNTQ4MjQ0OWRhYmJiODNkMzUzZWJkZjM1NWZjYjhjZGU1NjU4YzY5OWI4YTU1NzE4YTgKLTZlMDUxYjQyMjIxZGRhNDgyNTdlOWY1NmQwOWYzMWE3NzYzMDkzMGFiYjBmY2UwZDQ5ZWM5Y2IyN2M2Y2U0ODAKLTRjM2IzNmQ0NWVjMTk1ZTdmNzhkYzkzMDM3MGVkNjZjZDRiNjc2MzA4NWVjNGM2MjY2OTNlNjliMzllOTkzYjEKLTcwYjIyODlmMjlkY2Y5NGQ1ZDI3NjNhODIxMWE5MmM0MDQ0MjM3MWFhMmY0Mjk3Yzk5NThjODMzNDIxZWU2OTMKLWE3NGIyNTZlNDI1OTc5YWZlODZiMjg2YmJkYTA5ODNlMTQxOTQyNTBkOWZlY2QwM2E4YmExZmU2MTVlOTNhZTEKLWQ2MGQ0M2Y2ODU4ZWE5Y2Q0N2RkZjg4YTFiZmI1ZTkwYjYwYTI4Y2RiMjY5ZDllMWU0M2IwY2Y0NzBhOTViNDgKLWFhNTI5OWU3MTU5ZTdjY2IxODIwMDkxNGI5M2MzYjBkZjc5ZjE4MTc4OWZkZmQ2NjkzNjEzZDBkNDI3Nzg4ODMKLTg4ODQ3OTI3ZjU5ZDQwZjBjYjUzMzRmNjJlYWZlNGYzODAwNzZjZmI3NzIwMTc0ZWNlYWIxZWI1MDUwZWExMmMKLWU0MjkzZGIxMTVjNGY5YmQ0ZDIxOTEwYTY5ZDU2NmE3MDZmNWMwZTFiY2IzNDQyMDM1MDM4NTVlNjY0M2IxMjUKLTE3YjZkYjAzYzQxZjEzYTM0N2FkMzllNDdhNDZkNjI2ZjhhMzFhMTYzYmRhNmQyMzI2NDY1N2I0MTJiZGVjOTkKLWM4N2ExMDNkMjYKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjYzN18wIC9XV1dVVFUrTmltYnVzUm9tTm85TC1SZWd1SXRhbCAxIDEKLVsgLy5ub3RkZWYvZG90YWNjZW50L2ZpL2ZsL2ZyYWN0aW9uL2h1bmdhcnVtbGF1dC9Mc2xhc2gvbHNsYXNoCi0gIC9vZ29uZWsvcmluZy8ubm90ZGVmL2JyZXZlL21pbnVzLy5ub3RkZWYvWmNhcm9uL3pjYXJvbgotICAvY2Fyb24vZG90bGVzc2kvZG90bGVzc2ovZmYvZmZpL2ZmbC9ub3RlcXVhbC9pbmZpbml0eQotICAvbGVzc2VxdWFsL2dyZWF0ZXJlcXVhbC9wYXJ0aWFsZGlmZi9zdW1tYXRpb24vcHJvZHVjdC9waS9ncmF2ZS9xdW90ZXNpbmdsZQotICAvc3BhY2UvZXhjbGFtL3F1b3RlZGJsL251bWJlcnNpZ24vZG9sbGFyL3BlcmNlbnQvYW1wZXJzYW5kL3F1b3RlcmlnaHQKLSAgL3BhcmVubGVmdC9wYXJlbnJpZ2h0L2FzdGVyaXNrL3BsdXMvY29tbWEvaHlwaGVuL3BlcmlvZC9zbGFzaAotICAvemVyby9vbmUvdHdvL3RocmVlL2ZvdXIvZml2ZS9zaXgvc2V2ZW4KLSAgL2VpZ2h0L25pbmUvY29sb24vc2VtaWNvbG9uL2xlc3MvZXF1YWwvZ3JlYXRlci9xdWVzdGlvbgotICAvYXQvQS9CL0MvRC9FL0YvRwotICAvSC9JL0ovSy9ML00vTi9PCi0gIC9QL1EvUi9TL1QvVS9WL1cKLSAgL1gvWS9aL2JyYWNrZXRsZWZ0L2JhY2tzbGFzaC9icmFja2V0cmlnaHQvYXNjaWljaXJjdW0vdW5kZXJzY29yZQotICAvcXVvdGVsZWZ0L2EvYi9jL2QvZS9mL2cKLSAgL2gvaS9qL2svbC9tL24vbwotICAvcC9xL3Ivcy90L3Uvdi93Ci0gIC94L3kvei9icmFjZWxlZnQvYmFyL2JyYWNlcmlnaHQvYXNjaWl0aWxkZS8ubm90ZGVmCi0gIC9FdXJvL2ludGVncmFsL3F1b3Rlc2luZ2xiYXNlL2Zsb3Jpbi9xdW90ZWRibGJhc2UvZWxsaXBzaXMvZGFnZ2VyL2RhZ2dlcmRibAotICAvY2lyY3VtZmxleC9wZXJ0aG91c2FuZC9TY2Fyb24vZ3VpbHNpbmdsbGVmdC9PRS9PbWVnYS9yYWRpY2FsL2FwcHJveGVxdWFsCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi9xdW90ZWRibGxlZnQvcXVvdGVkYmxyaWdodC9idWxsZXQvZW5kYXNoL2VtZGFzaAotICAvdGlsZGUvdHJhZGVtYXJrL3NjYXJvbi9ndWlsc2luZ2xyaWdodC9vZS9EZWx0YS9sb3plbmdlL1lkaWVyZXNpcwotICAvLm5vdGRlZi9leGNsYW1kb3duL2NlbnQvc3RlcmxpbmcvY3VycmVuY3kveWVuL2Jyb2tlbmJhci9zZWN0aW9uCi0gIC9kaWVyZXNpcy9jb3B5cmlnaHQvb3JkZmVtaW5pbmUvZ3VpbGxlbW90bGVmdC9sb2dpY2Fsbm90L2h5cGhlbi9yZWdpc3RlcmVkL21hY3JvbgotICAvZGVncmVlL3BsdXNtaW51cy90d29zdXBlcmlvci90aHJlZXN1cGVyaW9yL2FjdXRlL211L3BhcmFncmFwaC9wZXJpb2RjZW50ZXJlZAotICAvY2VkaWxsYS9vbmVzdXBlcmlvci9vcmRtYXNjdWxpbmUvZ3VpbGxlbW90cmlnaHQvb25lcXVhcnRlci9vbmVoYWxmL3RocmVlcXVhcnRlcnMvcXVlc3Rpb25kb3duCi0gIC9BZ3JhdmUvQWFjdXRlL0FjaXJjdW1mbGV4L0F0aWxkZS9BZGllcmVzaXMvQXJpbmcvQUUvQ2NlZGlsbGEKLSAgL0VncmF2ZS9FYWN1dGUvRWNpcmN1bWZsZXgvRWRpZXJlc2lzL0lncmF2ZS9JYWN1dGUvSWNpcmN1bWZsZXgvSWRpZXJlc2lzCi0gIC9FdGgvTnRpbGRlL09ncmF2ZS9PYWN1dGUvT2NpcmN1bWZsZXgvT3RpbGRlL09kaWVyZXNpcy9tdWx0aXBseQotICAvT3NsYXNoL1VncmF2ZS9VYWN1dGUvVWNpcmN1bWZsZXgvVWRpZXJlc2lzL1lhY3V0ZS9UaG9ybi9nZXJtYW5kYmxzCi0gIC9hZ3JhdmUvYWFjdXRlL2FjaXJjdW1mbGV4L2F0aWxkZS9hZGllcmVzaXMvYXJpbmcvYWUvY2NlZGlsbGEKLSAgL2VncmF2ZS9lYWN1dGUvZWNpcmN1bWZsZXgvZWRpZXJlc2lzL2lncmF2ZS9pYWN1dGUvaWNpcmN1bWZsZXgvaWRpZXJlc2lzCi0gIC9ldGgvbnRpbGRlL29ncmF2ZS9vYWN1dGUvb2NpcmN1bWZsZXgvb3RpbGRlL29kaWVyZXNpcy9kaXZpZGUKLSAgL29zbGFzaC91Z3JhdmUvdWFjdXRlL3VjaXJjdW1mbGV4L3VkaWVyZXNpcy95YWN1dGUvdGhvcm4veWRpZXJlc2lzXQotcGRmTWFrZUZvbnQKLTYxMiA3OTIgZmFsc2UgcGRmU2V0dXAKLSUlRW5kU2V0dXAKLSUlUGFnZTogMSAxCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NTZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2My4wMTkgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE3LjQzNiA3MDEuOTE2IFRkCi0vRjEyMl8wIDI0Ljc5MDIgVGYKLShiemlwMikgNjMuMzYzOCBUagotLTI3OCBUSm0KLShhbmQpIDQ0LjA3NyBUagotLTI3OCBUSm0KLShsaWJiemlwMiwpIDk5LjE4NTYgVGoKLS0yNzggVEptCi0odmVyKSAzNy4yMTAxIFRqCi0xNSBUSm0KLShzaW9uKSA1MC45Njg3IFRqCi0tMjc4IFRKbQotKDEuMC41KSA1NS4xMzM0IFRqCi1bMSAwIDAgMSA3MiA2OTYuNzg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTUuNDkzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjgxLjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MC40OTI5IDY2MS42MzEgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKEEpIDE0LjkxNTQgVGoKLS0yNzggVEptCi0ocHIpIDIwLjY1ODUgVGoKLTIwIFRKbQotKG9ncmFtKSA2My4xMzI0IFRqCi0tMjc4IFRKbQotKGFuZCkgMzYuNzMwOCBUagotLTI3OCBUSm0KLShsaWJyYXIpIDUxLjY2NjkgVGoKLS0xMCBUSm0KLSh5KSAxMS40ODYxIFRqCi0tMjc4IFRKbQotKGYpIDYuODc5MjggVGoKLTIwIFRKbQotKG9yKSAyMC42NTg1IFRqCi0tMjc4IFRKbQotKGRhdGEpIDQyLjQ3MzkgVGoKLS0yNzggVEptCi0oY29tcHJlc3Npb24pIDEyOC41NzkgVGoKLVsxIDAgMCAxIDcyIDY1Ny4wMzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUxMy4wMzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy42NzYgNTAzLjI4NSBUZAotL0YxMjJfMCAxMS45NTUyIFRmCi0oSikgNi42NDcwOSBUagotMjAgVEptCi0odWxpYW4pIDI3LjkwMzQgVGoKLS0yNzggVEptCi0oU2UpIDE0LjYyMTIgVGoKLTE1IFRKbQotKHdhcikgMjAuNTk4OCBUagotMjAgVEptCi0oZCwpIDEwLjYyODIgVGoKLS0yNzggVEptCi0oaHR0cDovL3d3dykgNjEuMTAzIFRqCi00MCBUSm0KLSguYnppcC5vcikgNDIuNTEyNyBUagotMTUgVEptCi0oZykgNy4zMDQ2MyBUagotWzEgMCAwIDEgNzIgNTAwLjYyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTQzNS44MjZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2My4wMTkgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMiAyCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTQwLjM5OCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC0xMy45NDc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MDkuNTM0IFRkCi0vRjEyMl8wIDE0LjM0NjIgVGYKLShiemlwMikgMzYuNjY4OSBUagotLTQ4OSBUSm0KLShhbmQpIDI1LjUwNzUgVGoKLS00ODggVEptCi0obGliYnppcDIsKSA1Ny4zOTkxIFRqCi0tNTQyIFRKbQotKHZlcikgMjEuNTMzNiBUagotMTUgVEptCi0oc2lvbikgMjkuNDk1OCBUagotLTQ4OCBUSm0KLSgxLjAuNTopIDM2LjY4MzIgVGoKLS03NjYgVEptCi0oQSkgMTAuMzU4IFRqCi0tNDg4IFRKbQotKHByKSAxNC4zNDYyIFRqCi0yMCBUSm0KLShvZ3JhbSkgNDMuODQyIFRqCi0tNDg5IFRKbQotKGFuZCkgMjUuNTA3NSBUagotLTQ4OSBUSm0KLShsaWJyYXIpIDM1Ljg3OTggVGoKLS0xMCBUSm0KLSh5KSA3Ljk3NjQ5IFRqCi0tNDg4IFRKbQotKGYpIDQuNzc3MjggVGoKLTIwIFRKbQotKG9yKSAxNC4zNDYyIFRqCi0tNDg5IFRKbQotKGRhdGEpIDI5LjQ5NTggVGoKLTcyIDY5Mi4zMTkgVGQKLShjb21wcmVzc2lvbikgODkuMjkwNyBUagotWzEgMCAwIDEgNzIgNjg5LjM0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjg5LjM0OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjgwLjM2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKEp1bGlhbikgMjMuODAwNyBUagotLTI1MCBUSm0KLShTZSkgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJkKSAxMi43MjIyIFRqCi1bMSAwIDAgMSA3MiA2NzguMjA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NzguMjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NjguNDA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvcCkgMTYuNjA3NyBUagotMTAgVEptCi0oeXJpZ2h0KSAyMy44MDA3IFRqCi1bMSAwIDAgMSAxMTQuNzk5IDY2OC40MDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE0Ljc5OSAtNjY4LjQwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE0Ljc5OSA2NjguNDA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyNTEpIDcuNTcxNTggVGoKLVsxIDAgMCAxIDEyMi4zNzEgNjY4LjQwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjIuMzcxIC02NjguNDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjQuODYxIDY2OC40MDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTk5Ni0yMDA3KSA0My4xNjc5IFRqCi0tMjUwIFRKbQotKEp1bGlhbikgMjMuODAwNyBUagotLTI1MCBUSm0KLShTZSkgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJkKSAxMi43MjIyIFRqCi1bMSAwIDAgMSA3MiA2NjYuMjUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNy45NzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NTguMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTAuODc1IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFRoaXMpIDE0LjE3MDggVGoKLS0yNTAgVEptCi0ocHJvZ3JhbSwpIDI4Ljk5NTIgVGoKLVsxIDAgMCAxIDExOS4xNTEgNjUwLjg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuMTUxIC02NTAuODc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuMTUxIDY1MC44NzUgVGQKLS9GMTM0XzAgNy45NzAxIFRmCi0oYnppcDIpIDIzLjkxMDMgVGoKLVsxIDAgMCAxIDE0My4wNjEgNjUwLjg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuMDYxIC02NTAuODc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDMuMDYxIDY1MC44NzUgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oLCkgMS45OTI1MyBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0oYXNzb2NpYXRlZCkgMzIuNzU3MSBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyMS4yNDgzIFRqCi1bMSAwIDAgMSAyMTYuNzY4IDY1MC44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2Ljc2OCAtNjUwLjg3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE2Ljc2OCA2NTAuODc1IFRkCi0vRjEzNF8wIDcuOTcwMSBUZgotKGxpYmJ6aXAyKSAzOC4yNTY1IFRqCi1bMSAwIDAgMSAyNTUuMDI0IDY1MC44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU1LjAyNCAtNjUwLjg3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU1LjAyNCA2NTAuODc1IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKCwpIDEuOTkyNTMgVGoKLS0yNTAgVEptCi0oYW5kKSAxMS41MDg4IFRqCi0tMjUwIFRKbQotKGFsbCkgNy45NzAxIFRqCi0tMjUwIFRKbQotKGRvY3VtZW50YXRpb24sKSA0OS4zNjY4IFRqCi0tMjUwIFRKbQotKGFyZSkgOS43MzE0OSBUagotLTI1MCBUSm0KLShjb3ApIDExLjUwODggVGoKLTEwIFRKbQotKHlyaWdodCkgMTkuMDQwNiBUagotLTI1MCBUSm0KLShcMjUxKSA2LjA1NzI4IFRqCi0tMjUwIFRKbQotKDE5OTYtMjAwNykgMzQuNTM0NCBUagotLTI1MCBUSm0KLShKdWxpYW4pIDE5LjA0MDYgVGoKLS0yNTAgVEptCi0oU2UpIDcuOTcwMSBUagotMjUgVEptCi0odykgNS43NTQ0MSBUagotMTAgVEptCi0oYXJkLikgMTIuMTcwMyBUagotLTMxMCBUSm0KLShBbGwpIDEwLjE4NTggVGoKLS0yNTAgVEptCi0ocmlnaHRzKSAxOC4xNTU5IFRqCi0tMjUwIFRKbQotKHJlc2VydikgMTkuNDcxIFRqCi0xNSBUSm0KLShlZC4pIDkuNTE2MyBUagotWzEgMCAwIDEgNzIgNjQ5LjE0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTcuOTcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjQxLjE3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjMzLjM0IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFJlZGlzdHJpYikgMjkuMjI2NCBUagotMjAgVEptCi0odXRpb24pIDE2LjM4NjUgVGoKLS0yNTAgVEptCi0oYW5kKSAxMS41MDg4IFRqCi0tMjUwIFRKbQotKHVzZSkgMTAuNjI0MSBUagotLTI1MCBUSm0KLShpbikgNi4yMDA3NCBUagotLTI1MCBUSm0KLShzb3VyY2UpIDIwLjgwMiBUagotLTI1MCBUSm0KLShhbmQpIDExLjUwODggVGoKLS0yNTAgVEptCi0oYmluYXJ5KSAyMC4zNjM2IFRqCi0tMjUwIFRKbQotKGZvcm1zLCkgMjAuNTg2OCBUagotLTI1MCBUSm0KLSh3aXRoKSAxNC4xNzA4IFRqCi0tMjUwIFRKbQotKG9yKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKHdpdGhvdXQpIDI0LjM1NjYgVGoKLS0yNTAgVEptCi0obW9kaVwwMDJjYXRpb24sKSA0Mi4yODk0IFRqCi0tMjUwIFRKbQotKGFyZSkgOS43MzE0OSBUagotLTI1MCBUSm0KLShwZXJtaXR0ZWQpIDMwLjU0OTQgVGoKLS0yNTAgVEptCi0ocHJvKSAxMC42MjQxIFRqCi0xNSBUSm0KLSh2aWRlZCkgMTcuNzA5NiBUagotLTI1MCBUSm0KLSh0aGF0KSAxMS45NTUxIFRqCi0tMjUwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI1MCBUSm0KLShmb2xsbykgMTUuMDU1NSBUagotMjUgVEptCi0od2luZykgMTUuOTQwMiBUagotLTI1MCBUSm0KLShjb25kaXRpb25zKSAzMy4yMTE0IFRqCi0tMjUwIFRKbQotKGFyZSkgOS43MzE0OSBUagotLTI1MCBUSm0KLShtZXQ6KSAxNC4xNzA4IFRqCi1bMSAwIDAgMSA3MiA2MzEuNjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjMuNzc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDUuNTc5MSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc3LjU3OTEgLTYwNy44MzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc3LjU3OTEgNjA3LjgzNiBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShcMjI1KSAyLjc4OTU0IFRqCi1bMSAwIDAgMSA4MC4zNjg2IDYwNy44MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuNTk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODMuOTU1MiAtNjA3LjgzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODMuOTU1MiA2MDcuODM2IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFJlZGlzdHJpYikgMjkuMjI2NCBUagotMjAgVEptCi0odXRpb25zKSAxOS40ODY5IFRqCi0tMjUwIFRKbQotKG9mKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKHNvdXJjZSkgMjAuODAyIFRqCi0tMjUwIFRKbQotKGNvZGUpIDE1LjA0NzUgVGoKLS0yNTAgVEptCi0obXVzdCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShyZXRhaW4pIDE4LjE0NzkgVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKGFibykgMTEuNTA4OCBUagotMTUgVEptCi0odikgMy45ODUwNSBUagotMTUgVEptCi0oZSkgMy41Mzg3MiBUagotLTI1MCBUSm0KLShjb3ApIDExLjUwODggVGoKLTEwIFRKbQotKHlyaWdodCkgMTkuMDQwNiBUagotLTI1MCBUSm0KLShub3RpY2UsKSAyMS40NzE0IFRqCi0tMjUwIFRKbQotKHRoaXMpIDExLjUxNjggVGoKLS0yNTAgVEptCi0obGlzdCkgOS43NDc0MyBUagotLTI1MCBUSm0KLShvZikgNi42MzkwOSBUagotLTI1MCBUSm0KLShjb25kaXRpb25zKSAzMy4yMTE0IFRqCi0tMjUwIFRKbQotKGFuZCkgMTEuNTA4OCBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0oZm9sbG8pIDE1LjA1NTUgVGoKLTI1IFRKbQotKHdpbmcpIDE1Ljk0MDIgVGoKLS0yNTAgVEptCi0oZGlzY2xhaW1lcikgMzMuMjAzNCBUagotNTUgVEptCi0oLikgMS45OTI1MyBUagotWzEgMCAwIDEgNDcwLjkwOCA2MDcuODM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5OC45MDggLTE3LjUzNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA1LjU3OTEgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03Ny41NzkxIC01OTAuMzAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03Ny41NzkxIDU5MC4zMDIgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oXDIyNSkgMi43ODk1NCBUagotWzEgMCAwIDEgODAuMzY4NiA1OTAuMzAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjU5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjk1NTIgLTU5MC4zMDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTgzLjk1NTIgNTkwLjMwMiBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShUaGUpIDEyLjM5MzUgVGoKLS0yNzAgVEptCi0ob3JpZ2luKSAxOS4wNDA2IFRqCi0tMjcwIFRKbQotKG9mKSA2LjYzOTA5IFRqCi0tMjcwIFRKbQotKHRoaXMpIDExLjUxNjggVGoKLS0yNzAgVEptCi0oc29mdHcpIDE3LjcwOTYgVGoKLTEwIFRKbQotKGFyZSkgOS43MzE0OSBUagotLTI3MCBUSm0KLShtdXN0KSAxNS41MDE4IFRqCi0tMjcwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI3MCBUSm0KLShiZSkgNy41MjM3NyBUagotLTI3MCBUSm0KLShtaXNyZXByZXNlbnRlZDspIDUwLjQ2NjcgVGoKLS0yNzkgVEptCi0oeW91KSAxMS45NTUxIFRqCi0tMjcwIFRKbQotKG11c3QpIDE1LjUwMTggVGoKLS0yNzAgVEptCi0obm90KSAxMC4xODU4IFRqCi0tMjcwIFRKbQotKGNsYWltKSAxNy43MDk2IFRqCi0tMjcwIFRKbQotKHRoYXQpIDExLjk1NTEgVGoKLS0yNzAgVEptCi0oeW91KSAxMS45NTUxIFRqCi0tMjcwIFRKbQotKHdyb3RlKSAxOC4xNDc5IFRqCi0tMjcwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI3MCBUSm0KLShvcmlnaW5hbCkgMjQuNzk1IFRqCi0tMjcwIFRKbQotKHNvZnR3KSAxNy43MDk2IFRqCi0xMCBUSm0KLShhcmUuKSAxMS43MjQgVGoKLS03NDAgVEptCi0oSWYpIDUuMzA4MDkgVGoKLS0yNzAgVEptCi0oeW91KSAxMS45NTUxIFRqCi0tMjcwIFRKbQotKHVzZSkgMTAuNjI0MSBUagotLTI3MCBUSm0KLSh0aGlzKSAxMS41MTY4IFRqCi0tMjcwIFRKbQotKHNvZnR3KSAxNy43MDk2IFRqCi0xMCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNzAgVEptCi0oaW4pIDYuMjAwNzQgVGoKLS0yNjkgVEptCi0oYSkgMy41Mzg3MiBUagotODMuOTU1MiA1ODAuNzM3IFRkCi0ocHJvZHVjdCwpIDI2LjM0MTIgVGoKLS0yNTAgVEptCi0oYW4pIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0oYWNrbm8pIDE5LjAzMjYgVGoKLTI1IFRKbQotKHdsZWRnbWVudCkgMzUuNDE5MSBUagotLTI1MCBUSm0KLShpbikgNi4yMDA3NCBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0ocHJvZHVjdCkgMjQuMzQ4NyBUagotLTI1MCBUSm0KLShkb2N1bWVudGF0aW9uKSA0Ny4zNzQzIFRqCi0tMjUwIFRKbQotKHcpIDUuNzU0NDEgVGoKLTEwIFRKbQotKG91bGQpIDE0LjE3MDggVGoKLS0yNTAgVEptCi0oYmUpIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0oYXBwcmVjaWF0ZWQpIDM2LjczNDIgVGoKLS0yNTAgVEptCi0oYikgMy45ODUwNSBUagotMjAgVEptCi0odXQpIDYuMjAwNzQgVGoKLS0yNTAgVEptCi0oaXMpIDUuMzE2MDYgVGoKLS0yNTAgVEptCi0obm90KSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKHJlcXVpcmVkLikgMjguNTQ4OSBUagotWzEgMCAwIDEgNDAzLjgxNyA1ODAuNzM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS44MTcgLTE3LjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA1LjU3OTEgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03Ny41NzkxIC01NjMuMjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03Ny41NzkxIDU2My4yMDMgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oXDIyNSkgMi43ODk1NCBUagotWzEgMCAwIDEgODAuMzY4NiA1NjMuMjAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjU5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjk1NTIgLTU2My4yMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTgzLjk1NTIgNTYzLjIwMyBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShBbHRlcmVkKSAyMy45MDIzIFRqCi0tMjUwIFRKbQotKHNvdXJjZSkgMjAuODAyIFRqCi0tMjUwIFRKbQotKHYpIDMuOTg1MDUgVGoKLTE1IFRKbQotKGVyc2lvbnMpIDIyLjU3OTMgVGoKLS0yNTAgVEptCi0obXVzdCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShiZSkgNy41MjM3NyBUagotLTI1MCBUSm0KLShwbGFpbmx5KSAyMi4xNDA5IFRqCi0tMjUwIFRKbQotKG1hcmspIDE2LjM3ODYgVGoKLTEwIFRKbQotKGVkKSA3LjUyMzc3IFRqCi0tMjUwIFRKbQotKGFzKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKHN1Y2gsKSAxNi42MDE3IFRqCi0tMjUwIFRKbQotKGFuZCkgMTEuNTA4OCBUagotLTI1MCBUSm0KLShtdXN0KSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI1MCBUSm0KLShiZSkgNy41MjM3NyBUagotLTI1MCBUSm0KLShtaXNyZXByZXNlbnRlZCkgNDguMjUxIFRqCi0tMjUwIFRKbQotKGFzKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKGJlaW5nKSAxNy43MDk2IFRqCi0tMjUwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI1MCBUSm0KLShvcmlnaW5hbCkgMjQuNzk1IFRqCi0tMjUwIFRKbQotKHNvZnR3KSAxNy43MDk2IFRqCi0xMCBUSm0KLShhcmUuKSAxMS43MjQgVGoKLVsxIDAgMCAxIDQ2NC40MDUgNTYzLjIwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuNDA1IC0xNy41MzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNS41NzkxIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzcuNTc5MSAtNTQ1LjY2OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzcuNTc5MSA1NDUuNjY5IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFwyMjUpIDIuNzg5NTQgVGoKLVsxIDAgMCAxIDgwLjM2ODYgNTQ1LjY2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS41OTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04My45NTUyIC01NDUuNjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04My45NTUyIDU0NS42NjkgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oVGhlKSAxMi4zOTM1IFRqCi0tMjUwIFRKbQotKG5hbWUpIDE3LjI2MzIgVGoKLS0yNTAgVEptCi0ob2YpIDYuNjM5MDkgVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKGF1dGhvcikgMjAuMzYzNiBUagotLTI1MCBUSm0KLShtYXkpIDEzLjcyNDUgVGoKLS0yNTAgVEptCi0obm90KSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKGJlKSA3LjUyMzc3IFRqCi0tMjUwIFRKbQotKHVzZWQpIDE0LjYwOTIgVGoKLS0yNTAgVEptCi0odG8pIDYuMjAwNzQgVGoKLS0yNTAgVEptCi0oZW5kb3JzZSkgMjQuNzg3IFRqCi0tMjUwIFRKbQotKG9yKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKHByb21vdGUpIDI2LjU2NDMgVGoKLS0yNTAgVEptCi0ocHJvZHVjdHMpIDI3LjQ0OSBUagotLTI1MCBUSm0KLShkZXJpKSAxMi4zOTM1IFRqCi0yNSBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlZCkgNy41MjM3NyBUagotLTI1MCBUSm0KLShmcm9tKSAxNS40OTM5IFRqCi0tMjUwIFRKbQotKHRoaXMpIDExLjUxNjggVGoKLS0yNTAgVEptCi0oc29mdHcpIDE3LjcwOTYgVGoKLTEwIFRKbQotKGFyZSkgOS43MzE0OSBUagotLTI1MCBUSm0KLSh3aXRob3V0KSAyNC4zNTY2IFRqCi0tMjUwIFRKbQotKHNwZWNpXDAwMmMpIDI0LjM0ODcgVGoKLS0yNTAgVEptCi0ocHJpb3IpIDE1LjQ5MzkgVGoKLS0yNTAgVEptCi0od3JpdHRlbikgMjIuNTc5MyBUagotLTI1MCBUSm0KLShwZXJtaXNzaW9uLikgMzYuOTczMyBUagotWzEgMCAwIDEgNTMzLjU3NyA1NDUuNjY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS41NzcgLTkuNjk1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTM1Ljk3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI4LjEzNSBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShUSElTKSAxNy43MDk2IFRqCi0tNDAxIFRKbQotKFNPRlRXKSAyNy4wMTA3IFRqCi0xMjAgVEptCi0oQVJFKSAxNS45NDAyIFRqCi0tNDAxIFRKbQotKElTKSA3LjA4NTQyIFRqCi0tNDAwIFRKbQotKFBSKSA5Ljc0NzQzIFRqCi00MCBUSm0KLShPKSA1Ljc1NDQxIFRqCi01MCBUSm0KLShWSURFRCkgMjQuNzg3IFRqCi0tNDAxIFRKbQotKEJZKSAxMS4wNzA1IFRqCi0tNDAxIFRKbQotKFRIRSkgMTUuNDkzOSBUagotLTQwMSBUSm0KLShBKSA1Ljc1NDQxIFRqCi01NSBUSm0KLShVVEhPUikgMjcuNDQ5IFRqCi0tNDAxIFRKbQotKCJBUykgMTMuNDM3NiBUagotLTQwMSBUSm0KLShJUyIpIDEwLjMzNzIgVGoKLS00MDEgVEptCi0oQU5EKSAxNy4yNjMyIFRqCi0tNDAwIFRKbQotKEFOWSkgMTcuMjYzMiBUagotLTQwMSBUSm0KLShFWFBSRVNTKSAzNC4xMDQxIFRqCi0tNDAxIFRKbQotKE9SKSAxMS4wNzA1IFRqCi0tNDAxIFRKbQotKElNUExJRUQpIDMyLjMxODggVGoKLS00MDEgVEptCi0oVykgNy41MjM3NyBUagotMTIwIFRKbQotKEFSUkFOVElFUywpIDQ2LjcxMjggVGoKLS00MDEgVEptCi0oSU5DTFVESU5HLCkgNDYuMjU4NSBUagotLTQwMCBUSm0KLShCKSA1LjMxNjA2IFRqCi0xMCBUSm0KLShVVCkgMTAuNjI0MSBUagotNzIgNTE4LjU3MSBUZAotKE5PKSAxMS41MDg4IFRqCi00MCBUSm0KLShUKSA0Ljg2OTczIFRqCi0tMzA0IFRKbQotKExJTUlURUQpIDMyLjc1NzEgVGoKLS0zMDQgVEptCi0oVCkgNC44Njk3MyBUagotMTggVEptCi0oTywpIDcuNzQ2OTQgVGoKLS0zMDUgVEptCi0oVEhFKSAxNS40OTM5IFRqCi0tMzA0IFRKbQotKElNUExJRUQpIDMyLjMxODggVGoKLS0zMDQgVEptCi0oVykgNy41MjM3NyBUagotMTIwIFRKbQotKEFSUkFOVElFUykgNDQuNzIwMiBUagotLTMwNCBUSm0KLShPRikgMTAuMTg1OCBUagotLTMwNCBUSm0KLShNRVJDSEFOVCkgNDQuNzIwMiBUagotOTMgVEptCi0oQUJJTElUWSkgMzEuODcyNCBUagotLTMwNCBUSm0KLShBTkQpIDE3LjI2MzIgVGoKLS0zMDUgVEptCi0oRklUTkVTUykgMzEuNDQyIFRqCi0tMzA0IFRKbQotKEZPUikgMTUuNTAxOCBUagotLTMwNCBUSm0KLShBKSA1Ljc1NDQxIFRqCi0tMzA0IFRKbQotKFApIDQuNDMxMzggVGoKLTkyIFRKbQotKEFSKSAxMS4wNzA1IFRqCi02MCBUSm0KLShUSUNVTEFSKSAzNC41MzQ0IFRqCi0tMzA0IFRKbQotKFBVUlBPU0UpIDM0Ljk4ODcgVGoKLS0zMDQgVEptCi0oQVJFKSAxNS45NDAyIFRqCi0tMzA1IFRKbQotKERJKSA4LjQwODQ2IFRqCi0xIFRKbQotKFMtKSA3LjA4NTQyIFRqCi03MiA1MDkuMDA2IFRkCi0oQ0xBSU1FRC4pIDM4LjI5NjMgVGoKLS01NzYgVEptCi0oSU4pIDguNDA4NDYgVGoKLS0yODcgVEptCi0oTk8pIDExLjUwODggVGoKLS0yODggVEptCi0oRVZFTlQpIDI2LjExOCBUagotLTI4OCBUSm0KLShTSEFMTCkgMjUuNjc5NyBUagotLTI4OCBUSm0KLShUSEUpIDE1LjQ5MzkgVGoKLS0yODcgVEptCi0oQSkgNS43NTQ0MSBUagotNTUgVEptCi0oVVRIT1IpIDI3LjQ0OSBUagotLTI4OCBUSm0KLShCRSkgMTAuMTg1OCBUagotLTI4OCBUSm0KLShMSUFCTEUpIDI4LjMzMzcgVGoKLS0yODggVEptCi0oRk9SKSAxNS41MDE4IFRqCi0tMjg4IFRKbQotKEFOWSkgMTcuMjYzMiBUagotLTI4NyBUSm0KLShESVJFQ1QpIDI4Ljc4IFRqCi03NCBUSm0KLSgsKSAxLjk5MjUzIFRqCi0tMjg4IFRKbQotKElORElSRUNUKSAzNy4xODg1IFRqCi03NCBUSm0KLSgsKSAxLjk5MjUzIFRqCi0tMjg4IFRKbQotKElOQ0lERU5UKSAzNy42MjY4IFRqCi05MyBUSm0KLShBTCwpIDEyLjYxNjcgVGoKLS0yODggVEptCi0oU1BFQ0lBTCwpIDM0LjMxOTMgVGoKLS0yODggVEptCi0oRVhFTVBMQVIpIDQyLjk1MDkgVGoKLTY1IFRKbQotKFkpIDUuNzU0NDEgVGoKLTEyOSBUSm0KLSgsKSAxLjk5MjUzIFRqCi03MiA0OTkuNDQyIFRkCi0oT1IpIDExLjA3MDUgVGoKLS0yOTkgVEptCi0oQ09OU0VRKSAzMS44ODA0IFRqCi0xMCBUSm0KLShVRU5USUFMKSAzNC41MjY1IFRqCi0tMzAwIFRKbQotKEQpIDUuNzU0NDEgVGoKLTQwIFRKbQotKEFNQSkgMTguNTk0MiBUagotNDAgVEptCi0oR0VTKSAxNS4wNTU1IFRqCi0tMjk5IFRKbQotKFwoSU5DTFVESU5HLCkgNDguOTEyNSBUagotLTI5OSBUSm0KLShCKSA1LjMxNjA2IFRqCi0xMCBUSm0KLShVVCkgMTAuNjI0MSBUagotLTI5OSBUSm0KLShOTykgMTEuNTA4OCBUagotNDAgVEptCi0oVCkgNC44Njk3MyBUagotLTMwMCBUSm0KLShMSU1JVEVEKSAzMi43NTcxIFRqCi0tMjk5IFRKbQotKFQpIDQuODY5NzMgVGoKLTE4IFRKbQotKE8sKSA3Ljc0Njk0IFRqCi0tMjk5IFRKbQotKFBSKSA5Ljc0NzQzIFRqCi00MCBUSm0KLShPQ1VSRU1FTlQpIDQ5LjU5IFRqCi0tMjk5IFRKbQotKE9GKSAxMC4xODU4IFRqCi0tMzAwIFRKbQotKFNVQlNUSVRVVEUpIDQ3LjgyMDYgVGoKLS0yOTkgVEptCi0oR09PRFMpIDI3LjQ0OSBUagotLTI5OSBUSm0KLShPUikgMTEuMDcwNSBUagotLTMwMCBUSm0KLShTRVIpIDE0LjYxNzIgVGoKLTgwIFRKbQotKFZJQ0VTKSAyMy4wMjU2IFRqCi0xIFRKbQotKDspIDIuMjE1NjkgVGoKLTcyIDQ4OS44NzggVGQKLShMT1NTKSAxOS40ODY5IFRqCi0tMzYwIFRKbQotKE9GKSAxMC4xODU4IFRqCi0tMzYwIFRKbQotKFVTRSwpIDE3LjA0OCBUagotLTM2MCBUSm0KLShEKSA1Ljc1NDQxIFRqCi00MCBUSm0KLShBKSA1Ljc1NDQxIFRqCi0xMTEgVEptCi0oVCkgNC44Njk3MyBUagotOTMgVEptCi0oQSwpIDcuNzQ2OTQgVGoKLS0zNjAgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0zNTkgVEptCi0oUFIpIDkuNzQ3NDMgVGoKLTQwIFRKbQotKE9GSVRTOykgMjQuMzU2NiBUagotLTM2MCBUSm0KLShPUikgMTEuMDcwNSBUagotLTM2MCBUSm0KLShCKSA1LjMxNjA2IFRqCi0xMCBUSm0KLShVU0lORVNTKSAzMi4zMjY3IFRqCi0tMzYwIFRKbQotKElOVEVSUikgMjguNzggVGoKLTQwIFRKbQotKFVQVElPTlwpKSAzMS44NzI0IFRqCi0tMzYwIFRKbQotKEhPKSAxMS41MDg4IFRqCi0zNSBUSm0KLShXRVZFUikgMjguMzMzNyBUagotLTM2MCBUSm0KLShDQSkgMTEuMDcwNSBUagotNTUgVEptCi0oVVNFRCkgMjAuODA5OSBUagotLTM1OSBUSm0KLShBTkQpIDE3LjI2MzIgVGoKLS0zNjAgVEptCi0oT04pIDExLjUwODggVGoKLS0zNjAgVEptCi0oQU5ZKSAxNy4yNjMyIFRqCi0tMzYwIFRKbQotKFRIRU9SKSAyNi41NjQzIFRqCi02NSBUSm0KLShZKSA1Ljc1NDQxIFRqCi0tMzYwIFRKbQotKE9GKSAxMC4xODU4IFRqCi0tMzYwIFRKbQotKExJQUIpIDE4LjU5NDIgVGoKLTEgVEptCi0oSUxJVFkpIDIwLjgwMiBUagotMTI4IFRKbQotKCwpIDEuOTkyNTMgVGoKLTcyIDQ4MC4zMTQgVGQKLShXSEVUSEVSKSAzOC45NTc4IFRqCi0tMjQ3IFRKbQotKElOKSA4LjQwODQ2IFRqCi0tMjQ3IFRKbQotKENPTlRSQSkgMzIuNzY1MSBUagotNDAgVEptCi0oQ1QpIDEwLjE4NTggVGoKLTc0IFRKbQotKCwpIDEuOTkyNTMgVGoKLS0yNDcgVEptCi0oU1RSSUNUKSAyNy40NTcgVGoKLS0yNDcgVEptCi0oTElBQklMSVRZKSAzOS4zOTYyIFRqCi0xMjkgVEptCi0oLCkgMS45OTI1MyBUagotLTI0NiBUSm0KLShPUikgMTEuMDcwNSBUagotLTI0NyBUSm0KLShUKSA0Ljg2OTczIFRqCi0xOCBUSm0KLShPUikgMTEuMDcwNSBUagotNjAgVEptCi0oVCkgNC44Njk3MyBUagotLTI0NyBUSm0KLShcKElOQ0xVRElORykgNDYuOTIgVGoKLS0yNDcgVEptCi0oTkVHTElHRU5DRSkgNTAuNDY2NyBUagotLTI0NyBUSm0KLShPUikgMTEuMDcwNSBUagotLTI0NyBUSm0KLShPKSA1Ljc1NDQxIFRqCi00MCBUSm0KLShUSEVSKSAyMC44MDk5IFRqCi01NSBUSm0KLShXSVNFXCkpIDIyLjEzMyBUagotLTI0NyBUSm0KLShBUklTSU5HKSAzMi4zMTg4IFRqCi0tMjQ3IFRKbQotKElOKSA4LjQwODQ2IFRqCi0tMjQ3IFRKbQotKEFOWSkgMTcuMjYzMiBUagotLTI0NyBUSm0KLShXKSA3LjUyMzc3IFRqCi0xMjAgVEptCi0oQSkgNS43NTQ0MSBUagotMTA1IFRKbQotKFkpIDUuNzU0NDEgVGoKLS0yNDcgVEptCi0oT1VUKSAxNi4zNzg2IFRqCi03MiA0NzAuNzUgVGQKLShPRikgMTAuMTg1OCBUagotLTI1MCBUSm0KLShUSEUpIDE1LjQ5MzkgVGoKLS0yNTAgVEptCi0oVVNFKSAxNS4wNTU1IFRqCi0tMjUwIFRKbQotKE9GKSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKFRISVMpIDE3LjcwOTYgVGoKLS0yNTAgVEptCi0oU09GVFcpIDI3LjAxMDcgVGoKLTEyMCBUSm0KLShBUkUsKSAxNy45MzI3IFRqCi0tMjUwIFRKbQotKEVWRU4pIDIxLjI0ODMgVGoKLS0yNTAgVEptCi0oSUYpIDcuMDg1NDIgVGoKLS0yNTAgVEptCi0oQUQpIDExLjUwODggVGoKLTQwIFRKbQotKFZJU0VEKSAyMy40NjQgVGoKLS0yNTAgVEptCi0oT0YpIDEwLjE4NTggVGoKLS0yNTAgVEptCi0oVEhFKSAxNS40OTM5IFRqCi0tMjUwIFRKbQotKFBPU1NJQklMSVRZKSA0Ny44MjA2IFRqCi0tMjUwIFRKbQotKE9GKSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKFNVQ0gpIDIxLjI1NjMgVGoKLS0yNTAgVEptCi0oRCkgNS43NTQ0MSBUagotNDAgVEptCi0oQU1BKSAxOC41OTQyIFRqCi00MCBUSm0KLShHRS4pIDEyLjYxNjcgVGoKLVsxIDAgMCAxIDcyIDQ2OS41OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC03Ljk3MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ2MS42MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ1My4yMTYgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oUCkgNC40MzEzOCBUagotOTIgVEptCi0oQSkgNS43NTQ0MSBUagotMTExIFRKbQotKFRFTlRTOikgMjcuMDEwNyBUagotLTI5NiBUSm0KLShUKSA0Ljg2OTczIFRqCi04MCBUSm0KLShvKSAzLjk4NTA1IFRqCi0tMjk1IFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI5NiBUSm0KLShiZXN0KSAxMi44Mzk4IFRqCi0tMjk1IFRKbQotKG9mKSA2LjYzOTA5IFRqCi0tMjk2IFRKbQotKG15KSAxMC4xODU4IFRqCi0tMjk1IFRKbQotKGtubykgMTEuOTU1MSBUagotMjUgVEptCi0od2xlZGdlLCkgMjUuMDEwMiBUagotWzEgMCAwIDEgMjA4LjU0NCA0NTMuMjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwOC41NDQgLTQ1My4yMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwOC41NDQgNDUzLjIxNiBUZAotL0YxMzRfMCA3Ljk3MDEgVGYKLShiemlwMikgMjMuOTEwMyBUagotWzEgMCAwIDEgMjMyLjQ1NCA0NTMuMjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMi40NTQgLTQ1My4yMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNC44MSA0NTMuMjE2IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKGFuZCkgMTEuNTA4OCBUagotWzEgMCAwIDEgMjQ4LjY3NCA0NTMuMjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0OC42NzQgLTQ1My4yMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0OC42NzQgNDUzLjIxNiBUZAotL0YxMzRfMCA3Ljk3MDEgVGYKLShsaWJiemlwMikgMzguMjU2NSBUagotWzEgMCAwIDEgMjg2LjkzMSA0NTMuMjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Ni45MzEgLTQ1My4yMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4OS4yODYgNDUzLjIxNiBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShkbykgNy45NzAxIFRqCi0tMjk2IFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI5NSBUSm0KLSh1c2UpIDEwLjYyNDEgVGoKLS0yOTYgVEptCi0oYW4pIDcuNTIzNzcgVGoKLTE1IFRKbQotKHkpIDMuOTg1MDUgVGoKLS0yOTUgVEptCi0ocGF0ZW50ZWQpIDI3LjAwMjcgVGoKLS0yOTYgVEptCi0oYWxnb3JpdGhtcy4pIDM2LjA4ODYgVGoKLS04OTMgVEptCi0oSG8pIDkuNzM5NDYgVGoKLTI1IFRKbQotKHdlKSA5LjI5MzE0IFRqCi0yNSBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlcikgNi4xOTI3NyBUagotNDAgVEptCi0oLCkgMS45OTI1MyBUagotLTMwNyBUSm0KLShJKSAyLjY1NDA0IFRqCi0tMjk1IFRKbQotKGRvKSA3Ljk3MDEgVGoKLS0yOTYgVEptCi0obm90KSAxMC4xODU4IFRqCi0tMjk1IFRKbQotKGhhKSA3LjUyMzc3IFRqCi0yMCBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlKSAzLjUzODcyIFRqCi0tMjk2IFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI5NSBUSm0KLShyZXNvdXJjZXMpIDMwLjA5NTEgVGoKLS0yOTYgVEptCi0odG8pIDYuMjAwNzQgVGoKLTcyIDQ0My42NTIgVGQKLShjYXJyeSkgMTYuMzcwNiBUagotLTI1MCBUSm0KLShvdXQpIDEwLjE4NTggVGoKLS0yNTAgVEptCi0oYSkgMy41Mzg3MiBUagotLTI1MCBUSm0KLShwYXRlbnQpIDE5LjQ3ODkgVGoKLS0yNTAgVEptCi0oc2VhcmNoLikgMjIuMzQ4MiBUagotLTYyMCBUSm0KLShUaGVyZWZvcmUpIDMxLjQxODEgVGoKLS0yNTAgVEptCi0oSSkgMi42NTQwNCBUagotLTI1MCBUSm0KLShjYW5ub3QpIDIxLjI0ODMgVGoKLS0yNTAgVEptCi0oZ2kpIDYuMjAwNzQgVGoKLTI1IFRKbQotKHYpIDMuOTg1MDUgVGoKLTE1IFRKbQotKGUpIDMuNTM4NzIgVGoKLS0yNTAgVEptCi0oYW4pIDcuNTIzNzcgVGoKLTE1IFRKbQotKHkpIDMuOTg1MDUgVGoKLS0yNTAgVEptCi0oZ3VhcmFudGVlKSAzMC45Nzk4IFRqCi0tMjUwIFRKbQotKG9mKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI1MCBUSm0KLShhYm8pIDExLjUwODggVGoKLTE1IFRKbQotKHYpIDMuOTg1MDUgVGoKLTE1IFRKbQotKGUpIDMuNTM4NzIgVGoKLS0yNTAgVEptCi0oc3RhdGVtZW50LikgMzIuNTQxOSBUagotWzEgMCAwIDEgNzIgNDQxLjkyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM5MS4wNzRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0Ni43OTkzIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYuNzk5MyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMyAzCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTQwLjM5OCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC0xMy45NDc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MDcuNDQxIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLShUKSAxMC41MTg2IFRqCi04MCBUSm0KLShhYikgMjAuMDkwNCBUagotMTAgVEptCi0obGUpIDE0LjM1NzYgVGoKLS0yNzggVEptCi0ob2YpIDE2LjI1MTMgVGoKLS0yNzggVEptCi0oQ29udGVudHMpIDc0LjU5NDMgVGoKLVsxIDAgMCAxIDcyIDY5OC42MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS43NDAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02ODYuODc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2ODYuODc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEuKSA3LjQ3MTk1IFRqCi0tMzEwIFRKbQotKEludHJvZHVjdGlvbikgNDkuMjU1MSBUagotWzEgMCAwIDEgMTMxLjgxNSA2ODYuODc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzYuNzk2IC02ODYuODc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDUuNzMzIDY4Ni44NzkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDY4Ni44NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNjg2Ljg3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA2ODYuODc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDY4Ni44NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NzQuOTIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzQuOTIzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuKSA3LjQ3MTk1IFRqCi0tMzEwIFRKbQotKEhvKSAxMi4xNzQzIFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLShiemlwMikgMjIuMTM2OSBUagotWzEgMCAwIDEgMTUyLjMxOCA2NzQuOTIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTcuMyAtNjc0LjkyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY3LjA1NCA2NzQuOTIzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjc0LjkyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02NzQuOTIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDY3NC45MjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjc0LjkyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjYyLjk2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjYyLjk2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjEuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE4pIDcuMTkzIFRqCi0zNSBUSm0KLShBTUUpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDExOS4wMTQgNjYyLjk2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIzLjk5NSAtNjYyLjk2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMyLjY5MSA2NjIuOTY4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2NjIuOTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTY2Mi45NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjYyLjk2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2NjIuOTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjUxLjAxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjUxLjAxMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjIuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFNZTk9QU0lTKSA0Ny4wNTM0IFRqCi1bMSAwIDAgMSAxMzcuMDg1IDY1MS4wMTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Mi4wNjcgLTY1MS4wMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC41ODIgNjUxLjAxMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2NTEuMDEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTY1MS4wMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjUxLjAxMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2NTEuMDEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjM5LjA1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM5LjA1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjMuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKERFU0NSSVBUSU9OKSA2NC43NTY5IFRqCi1bMSAwIDAgMSAxNTQuNzg5IDYzOS4wNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OS43NyAtNjM5LjA1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY4LjI5IDYzOS4wNTggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MzkuMDU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYzOS4wNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjM5LjA1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MzkuMDU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjI3LjEwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjI3LjEwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjQuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE9QVElPTlMpIDQyLjA2MjEgVGoKLVsxIDAgMCAxIDEzMi4wOTQgNjI3LjEwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3LjA3NiAtNjI3LjEwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ1Ljg3MyA2MjcuMTAzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MjcuMTAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYyNy4xMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjI3LjEwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MjcuMTAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjE1LjE0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjE1LjE0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjUuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE1FTU9SKSAzNy42Mzg3IFRqCi02NSBUSm0KLShZKSA3LjE5MyBUagotLTI1MCBUSm0KLShNQU4pIDIzLjI0MjcgVGoKLTM1IFRKbQotKEEpIDcuMTkzIFRqCi00MCBUSm0KLShHRU1FTlQpIDQxLjUwNDIgVGoKLVsxIDAgMCAxIDIwNy45IDYxNS4xNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMi44ODEgLTYxNS4xNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS40MTIgNjE1LjE0NyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDYxNS4xNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNjE1LjE0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA2MTUuMTQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDUpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDYxNS4xNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDMuMTkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MDMuMTkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNi4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUkVDTykgMjYuNTcwMyBUagotNTAgVEptCi0oVkVSSU5HKSAzNy42Mjg3IFRqCi0tMjUwIFRKbQotKEQpIDcuMTkzIFRqCi00MCBUSm0KLShBKSA3LjE5MyBUagotMTExIFRKbQotKFQpIDYuMDg3MTUgVGoKLTkzIFRKbQotKEEpIDcuMTkzIFRqCi0tMjUwIFRKbQotKEZSKSAxMi4xODQzIFRqCi00MCBUSm0KLShPTSkgMTYuMDQ5NyBUagotLTI1MCBUSm0KLShEKSA3LjE5MyBUagotNDAgVEptCi0oQU1BKSAyMy4yNDI3IFRqCi00MCBUSm0KLShHRUQpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0oRklMRVMpIDI2LjU3MDMgVGoKLVsxIDAgMCAxIDI5My40NDkgNjAzLjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk4LjQzIC02MDMuMTkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDguNDY0IDYwMy4xOTIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjAzLjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MDMuMTkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYwMy4xOTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjAzLjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU5MS4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5MS4yMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi43LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShQRVJGT1JNQU5DRSkgNzMuNjIzNiBUagotLTI1MCBUSm0KLShOTykgMTQuMzg2IFRqCi00MCBUSm0KLShURVMpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDE5Ny44NDcgNTkxLjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAyLjgyOSAtNTkxLjIzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjExLjk1OCA1OTEuMjM3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1OTEuMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU5MS4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTkxLjIzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg2KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1OTEuMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTc5LjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTc5LjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjguKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKENBKSAxMy44MzgxIFRqCi0xMzUgVEptCi0oVkVBKSAyMC40NzMxIFRqCi0xMTEgVEptCi0oVFMpIDExLjYyNjQgVGoKLVsxIDAgMCAxIDEzMy41MTkgNTc5LjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM4LjUgLTU3OS4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0OC43OTkgNTc5LjI4MiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1NzkuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU3OS4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTc5LjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg3KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NzkuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTY3LjMyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTY3LjMyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjkuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKEEpIDcuMTkzIFRqCi01NSBUSm0KLShVVEhPUikgMzQuMzExMiBUagotWzEgMCAwIDEgMTMwLjk4OSA1NjcuMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzUuOTcgLTU2Ny4zMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0NS4zMiA1NjcuMzI3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1NjcuMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU2Ny4zMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTY3LjMyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg3KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NjcuMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4yMTkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuNzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NTUuMzcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NTUuMzcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuKSA3LjQ3MTk1IFRqCi0tMzEwIFRKbQotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDE2MC4wNDkgNTU1LjM3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjAuMDQ5IC01NTUuMzcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjAuMDQ5IDU1NS4zNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDIwNy44NyA1NTUuMzcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNS4zNDIgLTU1NS4zNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC44NTYgNTU1LjM3MiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTU1LjM3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NTUuMzcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU1NS4zNzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTU1LjM3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQzLjQxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTQzLjQxNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG9wLWxlKSAyMC40NzMxIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShzdHJ1Y3R1cmUpIDM0Ljg1OTEgVGoKLVsxIDAgMCAxIDE2NC45MjEgNTQzLjQxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjkwMiAtNTQzLjQxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5Ljk5NyA1NDMuNDE2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTQzLjQxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NDMuNDE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU0My40MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTQzLjQxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTMxLjQ2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTMxLjQ2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oTG8pIDExLjA2ODQgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHN1bW1hcnkpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE3Ny4zNzQgNTMxLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgyLjM1NSAtNTMxLjQ2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjg2NiA1MzEuNDYxIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTMxLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01MzEuNDYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDUzMS40NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOSkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTMxLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTE5LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE5LjUwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMi4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oSGlnaC1sZSkgMzAuNDM1NyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oc3VtbWFyeSkgMzcuMDgwOCBUagotWzEgMCAwIDEgMTc5LjI4NyA1MTkuNTA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODQuMjY4IC01MTkuNTA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuODIyIDUxOS41MDYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1MTkuNTA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTUxOS41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTE5LjUwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg5KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1MTkuNTA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MDcuNTUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MDcuNTUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMS4zLikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShVdGlsaXR5KSAyNi4wMjIzIFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI1MCBUSm0KLShzdW1tYXJ5KSAzNy4wODA4IFRqCi1bMSAwIDAgMSAyMDIuNjY5IDUwNy41NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNy42NSAtNTA3LjU1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE2LjU4MiA1MDcuNTUxIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDUwNy41NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTA3LjU1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1MDcuNTUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDUwNy41NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5NS41OTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ5NS41OTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShFcnJvcikgMjEuMDIxMSBUagotLTI1MCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotWzEgMCAwIDEgMTQ4LjQxMyA0OTUuNTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTMuMzk0IC00OTUuNTk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjIuNjExIDQ5NS41OTYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0OTUuNTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ5NS41OTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDk1LjU5NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDk1LjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDgzLjY0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDgzLjY0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKExvKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh3LWxlKSAxNy43MDM1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi1bMSAwIDAgMSAxNjcuNTcxIDQ4My42NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Mi41NTIgLTQ4My42NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS4wNDUgNDgzLjY0MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDgzLjY0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00ODMuNjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ4My42NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ4My42NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NzEuNjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzEuNjg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4xLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NzEuNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQ3MS42ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDcxLjY4NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDIwNS4xMDEgNDcxLjY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjA4MiAtNDcxLjY4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE5LjczNiA0NzEuNjg1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0NzEuNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ3MS42ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDcxLjY4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDcxLjY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDU5LjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTkuNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjIuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQ1OS43M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NTkuNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDU5LjczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxODEuMTkgNDU5LjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODYuMTcyIC00NTkuNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NC40OTcgNDU5LjczIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0NTkuNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDU5LjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ1OS43MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMykgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDU5LjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDcuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NDcuNzc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4zLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NDcuNzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQ0Ny43NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDQ3Ljc3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMTk5LjEyMyA0NDcuNzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMTA1IC00NDcuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuNTMzIDQ0Ny43NzUgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0NDcuNzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ0Ny43NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDQ3Ljc3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDQ3Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM1LjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzUuODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjQuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQzNS44Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00MzUuODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDM1LjgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NJbml0KSAxMTkuNTUxIFRqCi1bMSAwIDAgMSAyMTcuMDU2IDQzNS44Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIyLjAzNyAtNDM1LjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzIuMzU1IDQzNS44MiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDM1LjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQzNS44Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0MzUuODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTYpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQzNS44Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDIzLjg2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIzLjg2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDIzLjg2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00MjMuODY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQyMy44NjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTMuMTQ2IDQyMy44NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xMjcgLTQyMy44NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4xMTYgNDIzLjg2NSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDIzLjg2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MjMuODY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQyMy44NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTcpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQyMy44NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQxMS45MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDExLjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy42LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0MTEuOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDExLjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQxMS45MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzRW5kKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSAyMTEuMDc4IDQxMS45MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjA2IC00MTEuOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC45MzggNDExLjkxIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQxMS45MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MTEuOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDExLjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE4KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0MTEuOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5OS45NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM5OS45NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShIaWdoLWxlKSAzMC40MzU3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi1bMSAwIDAgMSAxNjkuNDgzIDM5OS45NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC40NjUgLTM5OS45NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4NC4yMTYgMzk5Ljk1NCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzOTkuOTU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM5OS45NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzk5Ljk1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzk5Ljk1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg3Ljk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzg3Ljk5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuMS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzg3Ljk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zODcuOTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDM4Ny45OTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE4MS4xOSAzODcuOTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODYuMTcyIC0zODcuOTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQuNDk3IDM4Ny45OTkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM4Ny45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzg3Ljk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzODcuOTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzODcuOTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzYuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzYuMDQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4yLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNzYuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM3Ni4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzc2LjA0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNTcuMjggMzc2LjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYyLjI2MSAtMzc2LjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcxLjQ3MiAzNzYuMDQ0IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM3Ni4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzc2LjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzNzYuMDQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzNzYuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM2NC4wODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM2NC4wODkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjMuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDM2NC4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzY0LjA4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzNjQuMDg5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDIxMS4wNzggMzY0LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjA2IC0zNjQuMDg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuOTM4IDM2NC4wODkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzY0LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zNjQuMDg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM2NC4wODkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM2NC4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzUyLjEzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzUyLjEzNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNC4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzUyLjEzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zNTIuMTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDM1Mi4xMzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxODcuMTY4IDM1Mi4xMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi4xNDkgLTM1Mi4xMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS45MTQgMzUyLjEzNCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM1Mi4xMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzUyLjEzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzNTIuMTM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzNTIuMTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM0MC4xNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM0MC4xNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjUuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDM0MC4xNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzQwLjE3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzNDAuMTc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgMTg3LjE2OCAzNDAuMTc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuMTQ5IC0zNDAuMTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuOTE0IDM0MC4xNzkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNDAuMTc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM0MC4xNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzQwLjE3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzQwLjE3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI4LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzI4LjIyMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzI4LjIyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zMjguMjIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDMyOC4yMjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDE2My4yNTggMzI4LjIyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY4LjIzOSAtMzI4LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc2LjY3NSAzMjguMjIzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzI4LjIyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zMjguMjIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDMyOC4yMjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDMyOC4yMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzE2LjI2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE2LjI2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNy4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzE2LjI2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zMTYuMjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDMxNi4yNjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTMuMTQ2IDMxNi4yNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xMjcgLTMxNi4yNjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4xMTYgMzE2LjI2OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzE2LjI2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zMTYuMjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDMxNi4yNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDMxNi4yNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzA0LjMxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzA0LjMxMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuOC4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oSGFuZGxpbmcpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oZW1iZWRkZWQpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHN0cmVhbXMpIDMwLjQzNTcgVGoKLVsxIDAgMCAxIDI3OS41NiAzMDQuMzEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODQuNTQxIC0zMDQuMzEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTQuNjAxIDMwNC4zMTMgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMDQuMzEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMwNC4zMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzA0LjMxMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzA0LjMxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjkyLjM1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjkyLjM1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuOS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oU3RhbmRhcmQpIDM1LjQxNyBUagotLTI1MCBUSm0KLShcMDAybGUtcmVhZGluZy93cml0aW5nKSA3Ny40NzkxIFRqCi0tMjUwIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDIzNC4xOSAyOTIuMzU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzkuMTcyIC0yOTIuMzU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDcuNTY0IDI5Mi4zNTggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDI5Mi4zNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMjkyLjM1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAyOTIuMzU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAyOTIuMzU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODAuNDAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODAuNDAzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oVXRpbGl0eSkgMjYuMDIyMyBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE1NS42MjUgMjgwLjQwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjYwNyAtMjgwLjQwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjY0NSAyODAuNDAzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDI4MC40MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMjgwLjQwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAyODAuNDAzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAyODAuNDAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNjguNDQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNjguNDQ4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNS4xLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAyNjguNDQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTI2OC40NDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMjY4LjQ0OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDE0My40NjEgVGoKLVsxIDAgMCAxIDI0MC45NjYgMjY4LjQ0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ1Ljk0OCAtMjY4LjQ0OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU1LjM4IDI2OC40NDggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyNjguNDQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI2OC40NDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjY4LjQ0OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjY4LjQ0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjU2LjQ5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjU2LjQ5MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjUuMi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMjU2LjQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0yNTYuNDkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDI1Ni40OTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDI1Mi45MjIgMjU2LjQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU3LjkwMyAtMjU2LjQ5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY3Ljk5OSAyNTYuNDkyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjU2LjQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yNTYuNDkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDI1Ni40OTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjcpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDI1Ni40OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI0NC41MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI0NC41MzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy42LikgMTQuOTQzOSBUagotWzEgMCAwIDEgOTAuMDMyNCAyNDQuNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwLjAzMjQgLTI0NC41MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwLjAzMjQgMjQ0LjUzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxMTMuOTQzIDI0NC41MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjk0MyAtMjQ0LjUzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE2LjQzMyAyNDQuNTM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXBhdGliaWxpdHkpIDUzLjE0MDUgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi1bMSAwIDAgMSAyMDkuMTQ0IDI0NC41MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNC4xMjYgLTI0NC41MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMy45NzEgMjQ0LjUzNyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyNDQuNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI0NC41MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjQ0LjUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjQ0LjUzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjMyLjU4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjMyLjU4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFVzaW5nKSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMTc3LjE5NSAyMzIuNTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny4xOTUgLTIzMi41ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ny4xOTUgMjMyLjU4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzdGRpbykgMjkuODg3OCBUagotWzEgMCAwIDEgMjA3LjA4MyAyMzIuNTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNy4wODMgLTIzMi41ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4wODMgMjMyLjU4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgtZnJlZSkgMTguNzk5NCBUagotLTI1MCBUSm0KLShlbikgOS40MDQ2OSBUagotNDAgVEptCi0odmlyb25tZW50KSA0MC45NTYyIFRqCi1bMSAwIDAgMSAyNzguMzM1IDIzMi41ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4My4zMTYgLTIzMi41ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5MS43NzUgMjMyLjU4MiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyMzIuNTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTIzMi41ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjMyLjU4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjMyLjU4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjIwLjYyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjIwLjYyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuMS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oR2V0dGluZykgMjkuODg3OCBUagotLTI1MCBUSm0KLShyaWQpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDE1NC4yMzEgMjIwLjYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTQuMjMxIC0yMjAuNjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTQuMjMxIDIyMC42MjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE4NC4xMTkgMjIwLjYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg5LjEgLTIyMC42MjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OC4xNzUgMjIwLjYyNyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyMjAuNjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTIyMC42MjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjIwLjYyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjIwLjYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjA4LjY3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjA4LjY3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuMi4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oQ3JpdGljYWwpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLVsxIDAgMCAxIDE4Ni41OTkgMjA4LjY3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkxLjU4IC0yMDguNjcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuNjI5IDIwOC42NzIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyMDguNjcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTIwOC42NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjA4LjY3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjA4LjY3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTk2LjcxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTk2LjcxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjguKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE1ha2luZykgMzAuOTkzNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGluZG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKERMTCkgMTkuMzY3MyBUagotWzEgMCAwIDEgMTg5LjgyOCAxOTYuNzE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTQuODA5IC0xOTYuNzE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuMjQzIDE5Ni43MTcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxOTYuNzE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTE5Ni43MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTk2LjcxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTk2LjcxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTg0Ljc2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTg0Ljc2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LikgNy40NzE5NSBUagotLTMxMCBUSm0KLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMTMwLjY5OSAxODQuNzYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzUuNjggLTE4NC43NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0NC44OTggMTg0Ljc2MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxODQuNzYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTE4NC43NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTg0Ljc2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTg0Ljc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE3Mi44MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE3Mi44MDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShMaW1pdGF0aW9ucykgNDUuOTQ3NSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oZm9ybWF0KSAyNi41NjAzIFRqCi1bMSAwIDAgMSAyNTUuMjMxIDE3Mi44MDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC4yMTIgLTE3Mi44MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OS4xNTQgMTcyLjgwNiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDE3Mi44MDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMTcyLjgwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAxNzIuODA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAxNzIuODA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjAuODUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNjAuODUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMi4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUG9ydGFiaWxpdHkpIDQyLjA3MjEgVGoKLS0yNTAgVEptCi0oaXNzdWVzKSAyMy44MDA3IFRqCi1bMSAwIDAgMSAxNTguMzk1IDE2MC44NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2My4zNzYgLTE2MC44NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Mi4wMyAxNjAuODUxIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDE2MC44NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMTYwLjg1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAxNjAuODUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAxNjAuODUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNDguODk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNDguODk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUmVwb3J0aW5nKSAzOS44NTA0IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWdzKSAxMy44MzgxIFRqCi1bMSAwIDAgMSAxNTAuOTkzIDE0OC44OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS45NzUgLTE0OC44OTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni4xMTUgMTQ4Ljg5NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMTQ4Ljg5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0xNDguODk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDE0OC44OTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDE0OC44OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEzNi45NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEzNi45NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShEaWQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocmlnaHQpIDE4LjgxOTQgVGoKLS0yNTAgVEptCi0ocGFja2FnZT8pIDM3LjA2MDkgVGoKLVsxIDAgMCAxIDIxMi42MDIgMTM2Ljk0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDMuMDg4NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE4Ljc3OCAtMTM2Ljk0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI5LjEwOSAxMzYuOTQxIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMTM2Ljk0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0xMzYuOTQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDEzNi45NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDEzNi45NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEyNC45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyNC45ODYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShGdXJ0aGVyKSAyOS4zMjk5IFRqCi0tMjUwIFRKbQotKFJlYWRpbmcpIDMzLjIwNTMgVGoKLVsxIDAgMCAxIDE1NS4wNTggMTI0Ljk4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjAzOSAtMTI0Ljk4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjM2MSAxMjQuOTg2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDEyNC45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMTI0Ljk4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAxMjQuOTg2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDM0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAxMjQuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtNjIuMDE0M10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDEuMzk5NyAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5NC42NjggLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNi4wNjggNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpaWkpIDguMzA4ODEgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDQgNAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzAxLjkxNiBUZAotL0YxMjJfMCAyNC43OTAyIFRmCi0oMS4pIDIwLjY3NSBUagotLTI3OCBUSm0KLShJbnRyKSAzOS45MzcgVGoKLTIwIFRKbQotKG9kdWN0aW9uKSAxMDQuNjY0IFRqCi1bMSAwIDAgMSA3MiA3MDEuNjA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02OTEuNjQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzkuOTk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDY3OS45OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtNjc5Ljk5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjUwNyA2NzkuOTk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXByZXNzZXMpIDQ1LjkyNzYgVGoKLS0yNjMgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI2MyBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjYzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MiBUSm0KLShCdXJybykgMjMuMjQyNyBUagotMjUgVEptCi0od3MtV2hlZWxlcikgNDguMTI5MyBUagotLTI2MyBUSm0KLShibG9jay1zb3J0aW5nKSA1My4xMzA1IFRqCi0tMjYzIFRKbQotKHRlKSA3LjE5MyBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI2MyBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI2MyBUSm0KLShhbGdvcml0aG0sKSA0MS4yMzUyIFRqCi0tMjY2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYzIFRKbQotKEh1ZikgMTUuNDkxOCBUagotMjUgVEptCi0oZm1hbikgMjAuNDczMSBUagotLTI2MyBUSm0KLShjb2RpbmcuKSAyOS42MDg4IFRqCi03MiA2NjguMDQzIFRkCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0yMDMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMDQgVEptCi0oZ2VuZXJhbGx5KSAzNy4wNzA4IFRqCi0tMjAzIFRKbQotKGNvbnNpZGVyYWJseSkgNTAuOTA4OSBUagotLTIwMyBUSm0KLShiZXR0ZXIpIDIyLjY4NDggVGoKLS0yMDQgVEptCi0odCkgMi43Njk2IFRqCi0xIFRKbQotKGhhbikgMTQuMzg2IFRqCi0tMjA0IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yMDMgVEptCi0oYWNoaWUpIDIxLjAyMTEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWQpIDkuNDA0NjkgVGoKLS0yMDMgVEptCi0oYnkpIDkuOTYyNiBUagotLTIwNCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjAzIFRKbQotKGNvbikgMTQuMzg2IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVudGlvbmFsKSAzMi4wOTk1IFRqCi0tMjAzIFRKbQotKExaNzcvTFo3OC1iYXNlZCkgNzMuMDQ1OCBUagotLTIwNCBUSm0KLShjb21wcmVzc29ycywpIDUyLjI5MzcgVGoKLTcyIDY1Ni4wODcgVGQKLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShhcHByb2FjaGVzKSA0NC44MTE4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwZXJmb3JtYW5jZSkgNTAuMzQxIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShQUE0pIDE5LjkzNTIgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYW1pbHkpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oc3RhdGlzdGljYWwpIDM3LjYzODcgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NvcnMuKSA1Mi4yOTM3IFRqCi1bMSAwIDAgMSA3MiA2NTMuOTMxXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NDMuOTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MzQuMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggNjM0LjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTYzNC4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA1LjA3MyA2MzQuMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMjAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWx0KSAxMy4yOTAxIFRqCi0tMzE5IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zMjAgVEptCi0odG9wKSAxMi43MzIyIFRqCi0tMzIwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAxNzYuNzEyIDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzYuNzEyIC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni43MTIgNjM0LjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAyMjQuNTMzIDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjQuNTMzIC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC41MzMgNjM0LjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMzcgVEptCi0oYSkgNC40MjMzOSBUagotLTMyMCBUSm0KLShcMDAzZSkgOS45NjI2IFRqCi0xNSBUSm0KLSh4aWJsZSkgMTkuOTI1MiBUagotLTMyMCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzE5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMyMCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotLTMyMCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMzIwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTkgVEptCi0oaW4pIDcuNzUwOSBUagotLTMyMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQ0OS44MTYgNjM0LjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0OS44MTYgLTYzNC4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ5LjgxNiA2MzQuMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ3OS43MDQgNjM0LjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3OS43MDQgLTYzNC4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgyLjg4OSA2MzQuMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9ybWF0LikgMjkuMDUwOSBUagotLTEwMzkgVEptCi0oVGhpcykgMTcuNzEzNSBUagotNzIgNjIyLjIxNCBUZAotKG1hbnVhbCkgMjkuMzI5OSBUagotLTMxNiBUSm0KLShkZXNjcmliZXMpIDM3LjA3MDggVGoKLS0zMTYgVEptCi0oYm90aCkgMTcuNzEzNSBUagotLTMxNyBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMxNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzE2IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTMxNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTYgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTMxNiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMxNyBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMxNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzE2IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmspIDEzLjI4MDEgVGoKLS0zMTYgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTMxNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMxNiBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlLikgMTUuNzYwOCBUagotLTEwMTcgVEptCi0oTW9zdCkgMjAuNDgzMSBUagotLTMxNiBUSm0KLShvZikgOC4yOTg4NSBUagotLTMxNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTcgVEptCi0obWFudWFsKSAyOS4zMjk5IFRqCi0tMzE2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi03MiA2MTAuMjU5IFRkCi0oZGUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob3RlZCkgMTcuMTU1NiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvZ3JhbSwpIDM2LjI0MzkgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oZ29vZCkgMTkuOTI1MiBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNTAgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI1MCBUSm0KLShpbnRlcmVzdCkgMjkuMzI5OSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2dyYW0uKSAzNi4yNDM5IFRqCi1bMSAwIDAgMSA3MiA2MDguMTAyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtMjkuNzIzNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNTc4LjM3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDU3OC4zNzldIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNTc4LjM3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDU3OC4zNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjU5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjU5IFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAxNTYuOTg1IDU3OC4zNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMTU2Ljk4NSAtNTc4LjM3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU5LjU3IDU3OC4zNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzJdKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAxNzEuMTg2IDU3OC4zNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTcxLjE4NiAtNTc4LjM3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTczLjc3MSA1NzguMzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRlc2NyaWJlcykgMzcuMDcwOCBUagotLTI1OSBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI2MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjU5IFRKbQotKHVzZSkgMTMuMjgwMSBUagotWzEgMCAwIDEgMjU5LjExOSA1NzguMzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1OS4xMTkgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OS4xMTkgNTc4LjM3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjg5LjAwNyA1NzguMzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4OS4wMDcgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4OS4wMDcgNTc4LjM3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg7KSAyLjc2OTYgVGoKLS0yNjQgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjYwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjU5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MCBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMjU5IFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yNTkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjYwIFRKbQotKG5lZWQpIDE4LjgwOTQgVGoKLS0yNTkgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjU5IFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjYwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1OSBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yNjAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjYwIFRKbQotKGtubykgMTQuOTQzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTg2Ljk0NCA1NjYuNDI0IFRkCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShvcGVyYXRlKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ncmFtLikgMzYuMjQzOSBUagotWzEgMCAwIDEgMTk5LjMwMiA1NjYuNDI0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEyNy4zMDIgLTIxLjkxNzhdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01NDQuNTA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDU0NC41MDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1NDQuNTA2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTU0NC41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1NDQuNTA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0obGliYnppcDIpIDMyLjY1NzQgVGoKLVsxIDAgMCAxIDE5Ny4wOSA1NDQuNTA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTE5Ny4wOSAtNTQ0LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk5LjU4IDU0NC41MDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzhdKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAyMTEuMTk3IDU0NC41MDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjExLjE5NyAtNTQ0LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEzLjY4NyA1NDQuNTA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRlc2NyaWJlcykgMzcuMDcwOCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvZ3JhbW1pbmcpIDU0LjIzNjQgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZXMpIDE3LjE0NTYgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLShkZXRhaWwsKSAyNC42Mjc1IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MTcuNTAxIDU0NC41MDZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMzQ1LjUwMSAtMjEuOTE3OF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTUyMi41ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNTIyLjU4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDUyMi41ODhdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNTIyLjU4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDUyMi41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTWlzY2VsbGFuZWEpIDQ4LjEzOTMgVGoKLVsxIDAgMCAxIDEzNS4wODMgNTIyLjU4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xMzUuMDgzIC01MjIuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzcuNTczIDUyMi41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzMxXSkgMTYuNTk3NyBUagotWzEgMCAwIDEgMTU0LjE3MSA1MjIuNTg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NC4xNzEgLTUyMi41ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Ni42NjIgNTIyLjU4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWNvcmRzKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShtaXNjZWxsYW5lb3VzKSA1Ni40NDgxIFRqCi0tMjUwIFRKbQotKG5vdGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLSh0aG91Z2h0KSAzMC40NDU3IFRqCi0tMjUwIFRKbQotKG91Z2h0KSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0ocmVjb3JkZWQpIDM0Ljg0OTIgVGoKLS0yNTAgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0yNSBUSm0KLSh3aGVyZS4pIDI2LjgyOTMgVGoKLVsxIDAgMCAxIDQ5Mi4zMSA1MjIuNTg4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTQyMC4zMSAtNDcxLjczNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDMuMDYzMyAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni4zMzIgLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzOS4zOTUgNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDUgNQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzAxLjkxNiBUZAotL0YxMjJfMCAyNC43OTAyIFRmCi0oMi4pIDIwLjY3NSBUagotLTI3OCBUSm0KLShIbykgMzMuMDQ1MyBUagotMTUgVEptCi0odykgMTkuMjg2OCBUagotLTI3OCBUSm0KLSh0bykgMjMuNDAxOSBUagotLTI3OCBUSm0KLSh1c2UpIDQyLjcxMzUgVGoKLS0yNzggVEptCi0oYnppcDIpIDYzLjM2MzggVGoKLVsxIDAgMCAxIDcyIDY5Ni43ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xNC45NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3MS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1Ni4zNSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oVCkgMTAuNTE4NiBUagotODAgVEptCi0oYWIpIDIwLjA5MDQgVGoKLTEwIFRKbQotKGxlKSAxNC4zNTc2IFRqCi0tMjc4IFRKbQotKG9mKSAxNi4yNTEzIFRqCi0tMjc4IFRKbQotKENvbnRlbnRzKSA3NC41OTQzIFRqCi1bMSAwIDAgMSA3MiA2NDcuNTI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuNzQwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjM1Ljc4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM1Ljc4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjEuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE4pIDcuMTkzIFRqCi0zNSBUSm0KLShBTUUpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDExOS4wMTQgNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIzLjk5NSAtNjM1Ljc4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMyLjY5MSA2MzUuNzg4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MzUuNzg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYzNS43ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjM1Ljc4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MzUuNzg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjIzLjgzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIzLjgzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjIuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFNZTk9QU0lTKSA0Ny4wNTM0IFRqCi1bMSAwIDAgMSAxMzcuMDg1IDYyMy44MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Mi4wNjcgLTYyMy44MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC41ODIgNjIzLjgzMiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MjMuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYyMy44MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjIzLjgzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MjMuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjExLjg3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjExLjg3NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjMuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKERFU0NSSVBUSU9OKSA2NC43NTY5IFRqCi1bMSAwIDAgMSAxNTQuNzg5IDYxMS44NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OS43NyAtNjExLjg3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY4LjI5IDYxMS44NzcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjExLjg3NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTk5LjkyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTk5LjkyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjQuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE9QVElPTlMpIDQyLjA2MjEgVGoKLVsxIDAgMCAxIDEzMi4wOTQgNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3LjA3NiAtNTk5LjkyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ1Ljg3MyA1OTkuOTIyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1OTkuOTIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU5OS45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTk5LjkyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1OTkuOTIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTg3Ljk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTg3Ljk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjUuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE1FTU9SKSAzNy42Mzg3IFRqCi02NSBUSm0KLShZKSA3LjE5MyBUagotLTI1MCBUSm0KLShNQU4pIDIzLjI0MjcgVGoKLTM1IFRKbQotKEEpIDcuMTkzIFRqCi00MCBUSm0KLShHRU1FTlQpIDQxLjUwNDIgVGoKLVsxIDAgMCAxIDIwNy45IDU4Ny45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMi44ODEgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS40MTIgNTg3Ljk2NyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU4Ny45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTg3Ljk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1ODcuOTY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDUpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU4Ny45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NzYuMDEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NzYuMDEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNi4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUkVDTykgMjYuNTcwMyBUagotNTAgVEptCi0oVkVSSU5HKSAzNy42Mjg3IFRqCi0tMjUwIFRKbQotKEQpIDcuMTkzIFRqCi00MCBUSm0KLShBKSA3LjE5MyBUagotMTExIFRKbQotKFQpIDYuMDg3MTUgVGoKLTkzIFRKbQotKEEpIDcuMTkzIFRqCi0tMjUwIFRKbQotKEZSKSAxMi4xODQzIFRqCi00MCBUSm0KLShPTSkgMTYuMDQ5NyBUagotLTI1MCBUSm0KLShEKSA3LjE5MyBUagotNDAgVEptCi0oQU1BKSAyMy4yNDI3IFRqCi00MCBUSm0KLShHRUQpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0oRklMRVMpIDI2LjU3MDMgVGoKLVsxIDAgMCAxIDI5My40NDkgNTc2LjAxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk4LjQzIC01NzYuMDEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDguNDY0IDU3Ni4wMTIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTc2LjAxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NzYuMDEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU3Ni4wMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTc2LjAxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2NC4wNTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi43LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShQRVJGT1JNQU5DRSkgNzMuNjIzNiBUagotLTI1MCBUSm0KLShOTykgMTQuMzg2IFRqCi00MCBUSm0KLShURVMpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDE5Ny44NDcgNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAyLjgyOSAtNTY0LjA1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjExLjk1OCA1NjQuMDU2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTY0LjA1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg2KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTUyLjEwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTUyLjEwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjguKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKENBKSAxMy44MzgxIFRqCi0xMzUgVEptCi0oVkVBKSAyMC40NzMxIFRqCi0xMTEgVEptCi0oVFMpIDExLjYyNjQgVGoKLVsxIDAgMCAxIDEzMy41MTkgNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM4LjUgLTU1Mi4xMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0OC43OTkgNTUyLjEwMSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1NTIuMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU1Mi4xMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTUyLjEwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg3KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NTIuMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQwLjE0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTQwLjE0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjkuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKEEpIDcuMTkzIFRqCi01NSBUSm0KLShVVEhPUikgMzQuMzExMiBUagotWzEgMCAwIDEgMTMwLjk4OSA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzUuOTcgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0NS4zMiA1NDAuMTQ2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTQwLjE0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg3KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4yMTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MjAuMDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MDguMjY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oY2hhcHRlcikgMjkuMzE5OSBUagotLTI1MCBUSm0KLShjb250YWlucykgMzMuMjA1MyBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGNvcCkgMTQuMzg2IFRqCi0xMCBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAyMTMuODM3IDUwOC4yNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEzLjgzNyAtNTA4LjI2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEzLjgzNyA1MDguMjY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDMuNzI1IDUwOC4yNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQzLjcyNSAtNTA4LjI2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ2LjIxNSA1MDguMjY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG1hbikgMTcuMTU1NiBUagotLTI1MCBUSm0KLShwYWdlLCkgMjEuMyBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShub3RoaW5nKSAzMC40NDU3IFRqCi0tMjUwIFRKbQotKGVsc2UuKSAxNy45ODI1IFRqCi1bMSAwIDAgMSA3MiA1MDYuMTA5XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00OTYuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzMuNTEzIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjEuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKE5BTUUpIDYwLjgxODYgVGoKLVsxIDAgMCAxIDcyIDQ3My41MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zMS44ODA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNDQxLjYzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA0NDEuNjMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNDQxLjYzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC00NDEuNjMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNDQxLjYzMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTE2LjgzMiA0NDEuNjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNi44MzIgLTQ0MS42MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNi44MzIgNDQxLjYzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMjEuODEzIDQ0MS42MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIxLjgxMyAtNDQxLjYzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIxLjgxMyA0NDEuNjMyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDE2My42NTYgNDQxLjYzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjMuNjU2IC00NDEuNjMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuMTQ3IDQ0MS42MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGJsb2NrLXNvcnRpbmcpIDUzLjEzMDUgVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzb3IpIDQ1LjkyNzYgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0odjEuMC40KSAyNC45MDY1IFRqCi1bMSAwIDAgMSAzMjUuMTI5IDQ0MS42MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUzLjEyOSAtMjEuOTE3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTQxOS43MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNDE5LjcxNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDQxOS43MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNDE5LjcxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDQxOS43MTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpjYXQpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExNi44MzIgNDE5LjcxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuODMyIC00MTkuNzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuMzIyIDQxOS43MTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzZXMpIDU1LjMzMjMgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN0ZG91dCkgMjQuMzU4NiBUagotWzEgMCAwIDEgMjM2LjY1MSA0MTkuNzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC42NTEgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0zOTcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDM5Ny43OTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAzOTcuNzk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTM5Ny43OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAzOTcuNzk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAycmVjb3ZlcikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTU4LjY3NSAzOTcuNzk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OC42NzUgLTM5Ny43OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2MS4xNjYgMzk3Ljc5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgtKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKHJlY28pIDE3LjE0NTYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotWzEgMCAwIDEgMzIzLjU0NSAzOTcuNzk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1MS41NDUgLTEyLjExOTVdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3NS43MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1My4wODEgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDIuMi4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oU1lOT1BTSVMpIDEwNS42MjcgVGoKLVsxIDAgMCAxIDcyIDM1Mi44MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zMS42MjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzIxLjIwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzMjEuMjAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMzIxLjIwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zMjEuMjAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzIxLjIwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTE2LjgzMiAzMjEuMjAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNi44MzIgLTMyMS4yMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS4zMjIgMzIxLjIwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKC1jZGZrcXN0dnpWTDEyMzQ1Njc4OSkgMTAwLjE2NCBUagotLTI1MCBUSm0KLShdKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFspIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oXDAwMmxlbmFtZXMpIDM4LjE4NjYgVGoKLS0yNTAgVEptCi0oLi4uKSA3LjQ3MTk1IFRqCi0tNjIwIFRKbQotKF0pIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDI5Ny4wNDUgMzIxLjIwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjUuMDQ1IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMjk5LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAyOTkuMjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMjk5LjI4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0yOTkuMjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjk5LjI4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMjguNzg3IDI5OS4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI4Ljc4NyAtMjk5LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMxLjI3OCAyOTkuMjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFspIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oLWZrdnNWTCkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShdKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFspIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oXDAwMmxlbmFtZXMpIDM4LjE4NjYgVGoKLS0yNTAgVEptCi0oLi4uKSA3LjQ3MTk1IFRqCi0tNjIwIFRKbQotKF0pIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDI0Mi41ODkgMjk5LjI4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzAuNTg5IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMjc3LjM2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAyNzcuMzY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMjc3LjM2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0yNzcuMzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjc3LjM2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemNhdCkgMjkuODg3OCBUagotWzEgMCAwIDEgMTE2LjgzMiAyNzcuMzY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNi44MzIgLTI3Ny4zNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS4zMjIgMjc3LjM2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKC1zKSA3LjE5MyBUagotLTI1MCBUSm0KLShdKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFspIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oXDAwMmxlbmFtZXMpIDM4LjE4NjYgVGoKLS0yNTAgVEptCi0oLi4uKSA3LjQ3MTk1IFRqCi0tNjIwIFRKbQotKF0pIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDIwNC4wNzQgMjc3LjM2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzIuMDc0IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMjU1LjQ0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAyNTUuNDQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMjU1LjQ0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0yNTUuNDQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjU1LjQ0NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE1OC42NzUgMjU1LjQ0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguNjc1IC0yNTUuNDQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMTY2IDI1NS40NDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmxlbmFtZSkgMzQuMzExMiBUagotWzEgMCAwIDEgMTk1LjQ3NiAyNTUuNDQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMy40NzcgLTIwNC41OTZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC44NTE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjg1MTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA2IDYKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEwNS41MTkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzEuNTkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ny4xMDkgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ3LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwNC45MyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi4zLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShERVNDUklQVElPTikgMTQxLjE4IFRqCi1bMSAwIDAgMSA3MiA3MDQuNjcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02OTQuNzA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2ODMuMDEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDY4My4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtNjgzLjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjU2IDY4My4wMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcHJlc3NlcykgNDUuOTI3NiBUagotLTI2OCBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjY4IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yNjggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY5IFRKbQotKEJ1cnJvKSAyMy4yNDI3IFRqCi0yNSBUSm0KLSh3cy1XaGVlbGVyKSA0OC4xMjkzIFRqCi0tMjY4IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjY4IFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0yNjggVEptCi0odGUpIDcuMTkzIFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjY4IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjY4IFRKbQotKGFsZ29yaXRobSwpIDQxLjIzNTIgVGoKLS0yNzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjggVEptCi0oSHVmKSAxNS40OTE4IFRqCi0yNSBUSm0KLShmbWFuKSAyMC40NzMxIFRqCi0tMjY5IFRKbQotKGMpIDQuNDIzMzkgVGoKLTEgVEptCi0ob2QpIDkuOTYyNiBUagotLTEgVEptCi0oaSkgMi43Njk2IFRqCi0xIFRKbQotKG5nLikgMTIuNDUzMyBUagotNzIgNjcxLjA1NyBUZAotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjA0IFRKbQotKGdlbmVyYWxseSkgMzcuMDcwOCBUagotLTIwMyBUSm0KLShjb25zaWRlcmFibHkpIDUwLjkwODkgVGoKLS0yMDMgVEptCi0oYmV0dGVyKSAyMi42ODQ4IFRqCi0tMjA0IFRKbQotKHQpIDIuNzY5NiBUagotMSBUSm0KLShoYW4pIDE0LjM4NiBUagotLTIwNCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjAzIFRKbQotKGFjaGllKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjAzIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yMDQgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTIwMyBUSm0KLShjb24pIDE0LjM4NiBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbnRpb25hbCkgMzIuMDk5NSBUagotLTIwMyBUSm0KLShMWjc3L0xaNzgtYmFzZWQpIDczLjA0NTggVGoKLS0yMDQgVEptCi0oY29tcHJlc3NvcnMsKSA1Mi4yOTM3IFRqCi03MiA2NTkuMTAxIFRkCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oYXBwcm9hY2hlcykgNDQuODExOCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocGVyZm9ybWFuY2UpIDUwLjM0MSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oUFBNKSAxOS45MzUyIFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFtaWx5KSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHN0YXRpc3RpY2FsKSAzNy42Mzg3IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzb3JzLikgNTIuMjkzNyBUagotWzEgMCAwIDEgNzIgNjU2Ljk0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjQ2Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM3LjE4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0oY29tbWFuZC1saW5lKSA1Ny41NTM5IFRqCi0tMjUwIFRKbQotKG9wdGlvbnMpIDI5LjMzOTkgVGoKLS0yNTAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjUwIFRKbQotKGRlbGliZXJhdGVseSkgNDcuMDMzNCBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeSkgMTIuNzIyMiBUagotLTI1MCBUSm0KLShzaW1pbGFyKSAyNy42NzYxIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhvc2UpIDIxLjAzMSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShHTlUpIDIxLjU3OSBUagotWzEgMCAwIDEgMzY0Ljg2OSA2MzcuMTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2NC44NjkgLTYzNy4xODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2NC44NjkgNjM3LjE4NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShnemlwKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzODguNzc5IDYzNy4xODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg4Ljc3OSAtNjM3LjE4NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg4Ljc3OSA2MzcuMTg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oaWRlbnRpY2FsLikgMzYuODAxOCBUagotWzEgMCAwIDEgNzIgNjM1LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjI1LjA2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjE1LjI2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA2MTUuMjY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTYxNS4yNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNS4xNzUgNjE1LjI2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGVjdHMpIDI1LjQ1NDQgVGoKLS0zMzAgVEptCi0oYSkgNC40MjMzOSBUagotLTMzMCBUSm0KLShsaXN0KSAxMi4xODQzIFRqCi0tMzMwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzMwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTMyOSBUSm0KLShuYW1lcykgMjUuNDU0NCBUagotLTMzMCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzMwIFRKbQotKGFjY29tcGFuKSA0MC4zODg0IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zMzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzMwIFRKbQotKGNvbW1hbmQtbGluZSkgNTcuNTUzOSBUagotLTMzMCBUSm0KLShcMDAzYWdzLikgMjEuMzEgVGoKLS0xMDk5IFRKbQotKEVhY2gpIDE5LjkxNTIgVGoKLS0zMzAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzMwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzMwIFRKbQotKHJlcGxhY2VkKSAzMy43NDMzIFRqCi0tMzMwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0zMzAgVEptCi0oYSkgNC40MjMzOSBUagotLTMzMCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi03MiA2MDMuMzExIFRkCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0zNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDggVEptCi0oaXRzZWxmLCkgMjIuNDE1OSBUagotLTM3MyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OSBUSm0KLShuYW1lKSAyMS41NzkgVGoKLVsxIDAgMCAxIDIwNC40NDQgNjAzLjMxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuNDQ0IC02MDMuMzExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDQuNDQ0IDYwMy4zMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ob3JpZ2luYWxfbmFtZS5iejIpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDMwNi4wNjMgNjAzLjMxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDYuMDYzIC02MDMuMzExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDYuMDYzIDYwMy4zMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTEyMTIgVEptCi0oRWFjaCkgMTkuOTE1MiBUagotLTM0OCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMzQ5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTM0OCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0zNDkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ4IFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0zNDkgVEptCi0obW9kaVwwMDJjYXRpb24pIDUwLjM3MDkgVGoKLS0zNDkgVEptCi0oZGF0ZSwpIDE5LjA4ODMgVGoKLTcyIDU5MS4zNTYgVGQKLShwZXJtaXNzaW9ucywpIDUwLjA5MiBUagotLTM0NCBUSm0KLShhbmQsKSAxNi44NzY2IFRqCi0tMzQ0IFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTMyNSBUSm0KLShwb3NzaWJsZSwpIDM1LjE0ODEgVGoKLS0zNDQgVEptCi0obykgNC45ODEzIFRqCi0yNSBUSm0KLSh3bmVyc2hpcCkgMzYuNTIyOSBUagotLTMyNSBUSm0KLShhcykgOC4yOTg4NSBUagotLTMyNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjYgVEptCi0oY29ycmVzcG9uZGluZykgNTYuOTk2IFRqCi0tMzI1IFRKbQotKG9yaWdpbmFsLCkgMzMuNDg0MyBUagotLTM0NCBUSm0KLShzbykgOC44NTY3NSBUagotLTMyNSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzI1IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMzI1IFRKbQotKHByb3BlcnRpZXMpIDM5Ljg0MDQgVGoKLS0zMjUgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMzI2IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzI1IFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotNzIgNTc5LjQgVGQKLShyZXN0b3JlZCkgMzIuMDg5NSBUagotLTMwOCBUSm0KLShhdCkgNy4xOTMgVGoKLS0zMDggVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTMwNyBUSm0KLSh0aW1lLikgMjAuMjA0MiBUagotLTQ4NCBUSm0KLShGaWxlKSAxNS41MDE4IFRqCi0tMzA4IFRKbQotKG5hbWUpIDIxLjU3OSBUagotLTMwOCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotLTMwOCBUSm0KLShpcykgNi42NDUwNSBUagotLTMwNyBUSm0KLShuYWkpIDEyLjE3NDMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMwOCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzA4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwOCBUSm0KLShzZW5zZSkgMjEuNTc5IFRqCi0tMzA4IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMDggVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0zMDcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDggVEptCi0obm8pIDkuOTYyNiBUagotLTMwOCBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0zMDggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzA4IFRKbQotKHByZXNlcnZpbmcpIDQyLjA1MjEgVGoKLTcyIDU2Ny40NDUgVGQKLShvcmlnaW5hbCkgMzAuOTkzNiBUagotLTMzNCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zMzMgVEptCi0obmFtZXMsKSAyNy45NDUxIFRqCi0tMzU1IFRKbQotKHBlcm1pc3Npb25zLCkgNTAuMDkyIFRqCi0tMzU1IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od25lcnNoaXBzKSA0MC4zOTgzIFRqCi0tMzMzIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzM0IFRKbQotKGRhdGVzKSAyMC40NzMxIFRqCi0tMzM0IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMzMgVEptCi0oXDAwMmxlc3lzdGVtcykgNDQuMjgzOCBUagotLTMzNCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTMzNCBUSm0KLShsYWNrKSAxNi41OTc3IFRqCi0tMzMzIFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMzM0IFRKbQotKGNvbmNlcHRzLCkgMzcuMzQ5OCBUagotLTM1NSBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzMyBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzM0IFRKbQotKHNlcmlvdXMpIDI4LjIyNCBUagotLTMzNCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLTcyIDU1NS40OSBUZAotKG5hbWUpIDIxLjU3OSBUagotLTI1MCBUSm0KLShsZW5ndGgpIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0ocmVzdHJpY3Rpb25zLCkgNDYuNzY0NCBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKE1TLURPUy4pIDQwLjEyOTQgVGoKLVsxIDAgMCAxIDcyIDU1My4zMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0My4zNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUzMy41NzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDQuMzc5IDUzMy41NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDEyMS4yNTUgNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjEuMjU1IC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjEuMjU1IDUzMy41NzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMTYzLjA5OCA1MzMuNTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2My4wOTggLTUzMy41NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NS41ODkgNTMzLjU3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZGVmKSAxMi43MjIyIFRqCi0xMCBUSm0KLShhdWx0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShvKSA0Ljk4MTMgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ3cml0ZSkgMjguMjE0MSBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4aXN0aW5nKSAyNy4xMjgyIFRqCi0tMjUwIFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tNjIwIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGhhcHBlbiwpIDMxLjI2MjYgVGoKLS0yNTAgVEptCi0oc3BlY2lmeSkgMjguNzcyIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgNDk1Ljk3NyA1MzMuNTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5NS45NzcgLTUzMy41NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5NS45NzcgNTMzLjU3MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtZikgMTEuOTU1MSBUagotWzEgMCAwIDEgNTA3LjkzMiA1MzMuNTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNy45MzIgLTUzMy41NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMC40MjMgNTMzLjU3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAzYWcuKSAxNy40MzQ2IFRqCi1bMSAwIDAgMSA3MiA1MzEuNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MjEuNDUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTEuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjg0IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yODUgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjg0IFRKbQotKG5hbWVzKSAyNS40NTQ0IFRqCi0tMjg0IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI4NCBUSm0KLShzcGVjaVwwMDJlZCwpIDM3LjkwNzcgVGoKLVsxIDAgMCAxIDE5My45MzUgNTExLjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTMuOTM1IC01MTEuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuOTM1IDUxMS42NTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIyMy44MjMgNTExLjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjMuODIzIC01MTEuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjYuNjU1IDUxMS42NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcHJlc3NlcykgNDUuOTI3NiBUagotLTI4NCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjg1IFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi0tMjg0IFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjg0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODQgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yODUgVEptCi0ob3V0cHV0LikgMjcuOTU1MSBUagotLTgyNSBUSm0KLShJbikgOC4yOTg4NSBUagotLTI4NSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODQgVEptCi0oY2FzZSwpIDE5LjYzNjMgVGoKLVsxIDAgMCAxIDQ5MS43NzggNTExLjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTEuNzc4IC01MTEuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTEuNzc4IDUxMS42NTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDUyMS42NjYgNTExLjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjEuNjY2IC01MTEuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjQuNDk5IDUxMS42NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotNzIgNDk5LjY5OSBUZAotKGRlY2xpbmUpIDI4Ljc3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh0ZXJtaW5hbCwpIDM1LjY5NiBUagotLTI1MCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZW50aXJlbHkpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oaW5jb21wcmVoZW5zaWJsZSkgNzAuODM0MSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh0aGVyZWZvcmUpIDM1Ljk1NSBUagotLTI1MCBUSm0KLShwb2ludGxlc3MuKSAzNy45MTc3IFRqCi1bMSAwIDAgMSA3MiA0OTcuNTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODcuNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ3Ny43ODEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMTEzLjg0MyA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTQ3Ny43ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNi4xNzYgNDc3Ljc4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKG9yKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAxMzAuMTI1IDQ3Ny43ODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMwLjEyNSAtNDc3Ljc4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMwLjEyNSA0NzcuNzgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNjAwIFRKbQotKC1kKSAxMS45NTUxIFRqCi1bMSAwIDAgMSAxNzcuOTQ2IDQ3Ny43ODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc3Ljk0NiAtNDc3Ljc4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc3Ljk0NiA0NzcuNzgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjM0IFRKbQotKGRlY29tcHJlc3NlcykgNTUuMzMyMyBUagotLTIzNCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTIzNCBUSm0KLShzcGVjaVwwMDJlZCkgMzUuNDE3IFRqCi0tMjM1IFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tNjA5IFRKbQotKEZpbGVzKSAxOS4zNzczIFRqCi0tMjM0IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjM0IFRKbQotKHdlcmUpIDE5LjM1NzMgVGoKLS0yMzQgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjM1IFRKbQotKGNyZWF0ZWQpIDI4Ljc2MiBUagotLTIzNCBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NDUuMDEyIDQ3Ny43ODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ1LjAxMiAtNDc3Ljc4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ1LjAxMiA0NzcuNzgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NzQuOSA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3NC45IC00NzcuNzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMjMzIDQ3Ny43ODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTIzNCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIzNCBUSm0KLShkZXRlY3RlZCkgMzMuMTk1NCBUagotNzIgNDY1LjgyNiBUZAotKGFuZCkgMTQuMzg2IFRqCi0tMjgwIFRKbQotKGkpIDIuNzY5NiBUagotMSBUSm0KLShnbm9yZWQsKSAzMC4xNTY4IFRqCi0tMjg3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjgwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFybmluZykgMjUuNDU0NCBUagotLTI4MCBUSm0KLShpc3N1ZWQuKSAyNy4zOTcyIFRqCi1bMSAwIDAgMSAyMTYuMDMzIDQ2NS44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjAzMyAtNDY1LjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE2LjAzMyA0NjUuODI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDUuOTIxIDQ2NS44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ1LjkyMSAtNDY1LjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ4LjcwNSA0NjUuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGF0dGVtcHRzKSAzMy43NjMzIFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0oZ3Vlc3MpIDIyLjEzNjkgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjgwIFRKbQotKFwwMDJsZW5hbWUpIDM0LjMxMTIgVGoKLS0yNzkgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjgwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3OSBUSm0KLShkZWNvbXByZXNzZWQpIDU2LjQzODEgVGoKLS0yODAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjc5IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yODAgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI3OSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDQ1My44NzEgVGQKLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShmb2xsbykgMTguODE5NCBUagotMjUgVEptCi0od3M6KSAxMy44MzgxIFRqCi1bMSAwIDAgMSA3MiA0NTEuNzE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjkuNzIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTQyMS45OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNDIxLjk5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDQyMS45OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNDIxLjk5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDQyMS45OTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmlsZW5hbWUuYnoyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNjQuNjUzIDQyMS45OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY0LjY1MyAtNDIxLjk5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY3LjE0MyA0MjEuOTkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJlY29tZXMpIDM0Ljg1OTEgVGoKLVsxIDAgMCAxIDIwNC40OTMgNDIxLjk5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuNDkzIC00MjEuOTkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDQuNDkzIDQyMS45OTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmlsZW5hbWUpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDI1Mi4zMTMgNDIxLjk5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODAuMzEzIC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNDAwLjA3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA0MDAuMDczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNDAwLjA3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC00MDAuMDczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNDAwLjA3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZS5ieikgNjUuNzUzMiBUagotWzEgMCAwIDEgMTU4LjY3NSA0MDAuMDczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OC42NzUgLTQwMC4wNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2MS4xNjYgNDAwLjA3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWNvbWVzKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAxOTguNTE1IDQwMC4wNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk4LjUxNSAtNDAwLjA3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk4LjUxNSA0MDAuMDczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAyNDYuMzM2IDQwMC4wNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc0LjMzNiAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTM3OC4xNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMzc4LjE1NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDM3OC4xNTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMzc4LjE1NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDM3OC4xNTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmlsZW5hbWUudGJ6MikgNzcuNzA4MyBUagotWzEgMCAwIDEgMTY0LjY1MyAzNzguMTU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC42NTMgLTM3OC4xNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny4xNDMgMzc4LjE1NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWNvbWVzKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAyMDQuNDkzIDM3OC4xNTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQ5MyAtMzc4LjE1NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQ5MyAzNzguMTU1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lLnRhcikgNzEuNzMwNyBUagotWzEgMCAwIDEgMjc2LjIyNCAzNzguMTU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC4yMjQgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0zNTYuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDM1Ni4yMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAzNTYuMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTM1Ni4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAzNTYuMjM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lLnRieikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTY0LjY1MyAzNTYuMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC42NTMgLTM1Ni4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny4xNDMgMzU2LjIzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWNvbWVzKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAyMDQuNDkzIDM1Ni4yMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQ5MyAtMzU2LjIzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQ5MyAzNTYuMjM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lLnRhcikgNzEuNzMwNyBUagotWzEgMCAwIDEgMjc2LjIyNCAzNTYuMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC4yMjQgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0zMzQuMzE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDMzNC4zMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAzMzQuMzE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTMzNC4zMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAzMzQuMzE5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGFueW90aGVybmFtZSkgNzEuNzMwNyBUagotWzEgMCAwIDEgMTY0LjY1MyAzMzQuMzE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC42NTMgLTMzNC4zMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny4xNDMgMzM0LjMxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWNvbWVzKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAyMDQuNDkzIDMzNC4zMTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQ5MyAtMzM0LjMxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQ5MyAzMzQuMzE5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGFueW90aGVybmFtZS5vdXQpIDk1LjY0MSBUagotWzEgMCAwIDEgMzAwLjEzNCAzMzQuMzE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyOC4xMzQgLTExLjQ5NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMyMi44MjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0zNDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQyIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTM0MiBUSm0KLShkb2VzKSAxOC4yNjE0IFRqCi0tMzQyIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTM0MyBUSm0KLShlbmQpIDE0LjM4NiBUagotLTM0MiBUSm0KLShpbikgNy43NTA5IFRqCi0tMzQyIFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMzQyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MiBUSm0KLShyZWNvZ25pc2VkKSA0My4xNTggVGoKLS0zNDIgVEptCi0oZW5kaW5ncywpIDMzLjQ4NDMgVGoKLVsxIDAgMCAxIDMwOS4zMDUgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDkuMzA1IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDkuMzA1IDMxMi40MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgMzMzLjIxNSAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMy4yMTUgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMy4yMTUgMzEyLjQwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMzkuMzQ0IDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM5LjM0NCAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM5LjM0NCAzMTIuNDAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5ieikgMTcuOTMyNyBUagotWzEgMCAwIDEgMzU3LjI3NiAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ny4yNzYgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Ny4yNzYgMzEyLjQwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzNjMuNDA1IDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYzLjQwNSAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYzLjQwNSAzMTIuNDAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC50YnoyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzOTMuMjkzIDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkzLjI5MyAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk2LjcwMSAzMTIuNDAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG9yKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MDguNDA5IDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA4LjQwOSAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA4LjQwOSAzMTIuNDAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC50YnopIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDQzMi4zMTkgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzIuMzE5IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzIuMzE5IDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDM4LjQ0OCAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzOC40NDggLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzOC40NDggMzEyLjQwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDY4LjMzNiAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OC4zMzYgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3MS43NDQgMzEyLjQwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wbGFpbnMpIDQwLjk1NjIgVGoKLS0zNDIgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTM0MiBUSm0KLShpdCkgNS41MzkyMSBUagotNzIgMzAwLjQ0NiBUZAotKGNhbm5vdCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShndWVzcykgMjIuMTM2OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotLTI1MCBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHVzZXMpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG9yaWdpbmFsKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKG5hbWUpIDIxLjU3OSBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAzNzAuMDA5IDMwMC40NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcwLjAwOSAtMzAwLjQ0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzcwLjAwOSAzMDAuNDQ2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5vdXQpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDM5My45MiAzMDAuNDQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5My45MiAtMzAwLjQ0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk2LjQxIDMwMC40NDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXBwZW5kZWQuKSA0MC42NjczIFRqCi1bMSAwIDAgMSA3MiAyOTguMjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI4OC4zMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI3OC41MjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQXMpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShjb21wcmVzc2lvbiwpIDUyLjg1MTYgVGoKLS0yNTAgVEptCi0oc3VwcGx5aW5nKSAzOS4zMDI1IFRqCi0tMjUwIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oXDAwMmxlbmFtZXMpIDM4LjE4NjYgVGoKLS0yNTAgVEptCi0oY2F1c2VzKSAyNi4wMDI0IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi0tMjUwIFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLVsxIDAgMCAxIDcyIDI3Ni4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI2Ni40MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1Ni42MTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMTEzLjg0MyAyNTYuNjExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTI1Ni42MTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNi40MDkgMjU2LjYxMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjU3IFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotLTI1OCBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjU3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTggVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjU3IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjU4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjU4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1NyBUSm0KLShjb25jYXRlbmF0aW9uKSA1NS4zMzIzIFRqCi0tMjU4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjU3IFRKbQotKHR3KSA5Ljk2MjYgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTI1OCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1NyBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjU4IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTcgVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS02NjUgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjU4IFRKbQotKHJlc3VsdCkgMjIuMTM2OSBUagotLTI1NyBUSm0KLShpcykgNi42NDUwNSBUagotNzIgMjQ0LjY1NiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShjb25jYXRlbmF0aW9uKSA1NS4zMzIzIFRqCi0tMjM4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShjb3JyZXNwb25kaW5nKSA1Ni45OTYgVGoKLS0yMzkgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yMzggVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS02MTMgVEptCi0oSW50ZSkgMTUuNDkxOCBUagotMTUgVEptCi0oZ3JpdHkpIDE4LjgxOTQgVGoKLS0yMzggVEptCi0odGVzdGluZykgMjYuNTcwMyBUagotLTIzOSBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMzgyLjI0NyAyNDQuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4Mi4yNDcgLTI0NC42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4Mi4yNDcgMjQ0LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtdCkgMTEuOTU1MSBUagotWzEgMCAwIDEgMzk0LjIwMiAyNDQuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5NC4yMDIgLTI0NC42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5NC4yMDIgMjQ0LjY1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTIzOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTIzOCBUSm0KLShjb25jYXRlbmF0ZWQpIDUyLjAwNDggVGoKLS0yMzkgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTIzOSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjM5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi03MiAyMzIuNyBUZAotKGFsc28pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oc3VwcG9ydGVkLikgNDEuNzgzMSBUagotWzEgMCAwIDEgNzIgMjMwLjU0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjIwLjU4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjEwLjc4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0zOTkgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMzk5IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0zOTkgVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLS00MDAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zOTkgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTM5OSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMzk5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zOTkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzk5IFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi0tMzk5IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTM5OSBUSm0KLShieSkgOS45NjI2IFRqCi0tNDAwIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHZpbmcpIDE3LjcxMzUgVGoKLS0zOTkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0MDkuNjcgMjEwLjc4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDkuNjcgLTIxMC43ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwOS42NyAyMTAuNzgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1jKSAxMS45NTUxIFRqCi1bMSAwIDAgMSA0MjEuNjI1IDIxMC43ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIxLjYyNSAtMjEwLjc4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI1LjYwMiAyMTAuNzgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDNhZy4pIDE3LjQzNDYgVGoKLS03NTcgVEptCi0oTXVsdGlwbGUpIDM0LjMyMTIgVGoKLS00MDAgVEptCi0oXDAwMmwpIDguMzA4ODEgVGoKLTEgVEptCi0oZXMpIDguMjk4ODUgVGoKLS00MDAgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMzk5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi03MiAxOTguODI4IFRkCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTM2NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM2NyBUSm0KLShkZWNvbXByZXNzZWQpIDU2LjQzODEgVGoKLS0zNjcgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzY3IFRKbQotKHRoaXMuKSAxNi44ODY2IFRqCi0tMTMyMSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0zNjcgVEptCi0ocmVzdWx0aW5nKSAzNC44NjkxIFRqCi0tMzY3IFRKbQotKG91dHB1dHMpIDI5LjMzOTkgVGoKLS0zNjcgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzY3IFRKbQotKGZlZCkgMTIuNzIyMiBUagotLTM2NyBUSm0KLShzZXF1ZW50aWFsbHkpIDQ4LjE0OTIgVGoKLS0zNjYgVEptCi0odG8pIDcuNzUwOSBUagotLTM2NyBUSm0KLShzdGRvdXQuKSAyNi44NDkyIFRqCi0tMTMyMiBUSm0KLShDb21wcmVzc2lvbikgNTIuNTgyNiBUagotLTM2NyBUSm0KLShvZikgOC4yOTg4NSBUagotNzIgMTg2Ljg3MiBUZAotKG11bHRpcGxlKSAzMy4yMTUzIFRqCi0tMjg5IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yODkgVEptCi0oaW4pIDcuNzUwOSBUagotLTI4OSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODkgVEptCi0obWFubmVyKSAyOS44Nzc4IFRqCi0tMjg4IFRKbQotKGdlbmVyYXRlcykgMzcuNjE4OCBUagotLTI4OSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjg5IFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTI4OSBUSm0KLShjb250YWluaW5nKSA0Mi4wNjIxIFRqCi0tMjg5IFRKbQotKG11bHRpcGxlKSAzMy4yMTUzIFRqCi0tMjg5IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yODkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjg5IFRKbQotKHJlcHJlc2VudGF0aW9ucy4pIDYyLjgwNDIgVGoKLS04NTMgVEptCi0oU3VjaCkgMTkuOTI1MiBUagotLTI4OSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjg5IFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotNzIgMTc0LjkxNyBUZAotKGNhbikgMTMuODI4MSBUagotLTM5MSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM5MSBUSm0KLShkZWNvbXByZXNzZWQpIDU2LjQzODEgVGoKLS0zOTAgVEptCi0oY29ycmVjdGx5KSAzNS40MDcxIFRqCi0tMzkxIFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLS0zOTEgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMjM4LjExNiAxNzQuOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzOC4xMTYgLTE3NC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzOC4xMTYgMTc0LjkxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjY4LjAwNCAxNzQuOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OC4wMDQgLTE3NC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3MS44OTcgMTc0LjkxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTM5MSBUSm0KLSgwLjkuMCkgMTkuOTI1MiBUagotLTM5MSBUSm0KLShvcikgOC4yOTg4NSBUagotLTM5MSBUSm0KLShsKSAyLjc2OTYgVGoKLTEgVEptCi0oYXRlcikgMTQuOTMzOSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTczMyBUSm0KLShFYXJsaWVyKSAyNy4xMDgyIFRqCi0tMzkxIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMzkxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0NDguMDcxIDE3NC45MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ4LjA3MSAtMTc0LjkxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ4LjA3MSAxNzQuOTE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NzcuOTU4IDE3NC45MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc3Ljk1OCAtMTc0LjkxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgxLjg1MiAxNzQuOTE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zOTEgVEptCi0oc3RvcCkgMTYuNjA3NyBUagotLTM5MSBUSm0KLShhZnRlcikgMTguMjUxNSBUagotNzIgMTYyLjk2MiBUZAotKGRlY29tcHJlc3NpbmcpIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDE2MC44MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE1MC44NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE0MS4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpjYXQpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggMTQxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC0xNDEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDQuMzc5IDE0MS4wNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXChvcikgMTEuNjE2NCBUagotWzEgMCAwIDEgMTE4LjQ4NiAxNDEuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOC40ODYgLTE0MS4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOC40ODYgMTQxLjA0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotLTYwMCBUSm0KLSgtZGMpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDE3Mi4yODQgMTQxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzIuMjg0IC0xNDEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMjg0IDE0MS4wNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2VzKSA1NS4zMzIzIFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHNwZWNpXDAwMmVkKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShvdXRwdXQuKSAyNy45NTUxIFRqCi1bMSAwIDAgMSA3MiAxMzguODg3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMjguOTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTkuMTI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDExOS4xMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtMTE5LjEyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0Ljg2NiAxMTkuMTI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yOTkgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI5OSBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50cykgMzMuNzYzMyBUagotLTI5OSBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjk5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5OSBUSm0KLShlbikgOS40MDQ2OSBUagotNDAgVEptCi0odmlyb25tZW50KSA0MC45NTYyIFRqCi0tMjk4IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXJpYWJsZXMpIDMwLjk4MzcgVGoKLVsxIDAgMCAxIDMxNi45MDMgMTE5LjEyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTYuOTAzIC0xMTkuMTI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTYuOTAzIDExOS4xMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpJUDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDM0Ni43OTEgMTE5LjEyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDYuNzkxIC0xMTkuMTI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDkuNzY5IDExOS4xMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDM2Ny4xMzMgMTE5LjEyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjcuMTMzIC0xMTkuMTI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjcuMTMzIDExOS4xMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpJUCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMzkxLjA0MyAxMTkuMTI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5MS4wNDMgLTExOS4xMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5MS4wNDMgMTE5LjEyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjk5IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTkgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5OSBUSm0KLShvcmRlcikgMjEuMDIxMSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTMxMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5OSBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjk5IFRKbQotKHByb2Nlc3MpIDI5Ljg3NzggVGoKLS0yOTkgVEptCi0odGhlbSkgMTkuOTI1MiBUagotNzIgMTA3LjE3MSBUZAotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGFyKSA3Ljc0MDk0IFRqCi0xOCBUSm0KLShndW1lbnRzKSAzMy43NjMzIFRqCi0tMjUwIFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tbWFuZCkgMzkuMjkyNSBUagotLTI1MCBUSm0KLShsaW5lLikgMTcuNDM0NiBUagotLTMxMCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjb24pIDE0LjM4NiBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbmllbnQpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oc3VwcGx5KSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50cy4pIDM2LjI1MzkgVGoKLVsxIDAgMCAxIDcyIDEwNS4wMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTk1LjA1MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDg1LjI1MzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0yOTQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTQgVEptCi0oYWwpIDcuMTkzIFRqCi0xMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXlzKSAxMy4yODAxIFRqCi0tMjk0IFRKbQotKHBlcmZvcm1lZCwpIDQzLjk4NDkgVGoKLS0zMDUgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTI5NCBUSm0KLShpZikgNi4wODcxNSBUagotLTI5NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTQgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI5NCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yOTMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTQgVEptCi0oc2xpZ2h0bHkpIDI5Ljg5NzggVGoKLS0yOTQgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZXIpIDEyLjcyMjIgVGoKLS0yOTQgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTI5NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTQgVEptCi0ob3JpZ2luYWwuKSAzMy40ODQzIFRqCi0tODg0IFRKbQotKEZpbGVzKSAxOS4zNzczIFRqCi0tMjk0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjk0IFRKbQotKGxlc3MpIDE0Ljk0MzkgVGoKLS0yOTQgVEptCi0odGhhbikgMTcuMTU1NiBUagotNzIgNzMuMjk4MiBUZAotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjQ2IFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjQ2IFRKbQotKGh1bmRyZWQpIDMyLjY0NzQgVGoKLS0yNDUgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI0NiBUSm0KLSh0ZW5kKSAxNy4xNTU2IFRqCi0tMjQ2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDYgVEptCi0oZ2V0KSAxMi4xNzQzIFRqCi0tMjQ2IFRKbQotKGwpIDIuNzY5NiBUagotMSBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQ3IFRKbQotKHNpbmNlKSAyMC40NzMxIFRqCi0tMjQ2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NiBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI0NSBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0yNDYgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjQ2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNDYgVEptCi0oY29uc3RhbnQpIDMzLjIwNTMgVGoKLS0yNDYgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyaGVhZCkgMjYuNTUwMyBUagotLTI0NSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjQ2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NiBUSm0KLShyZSkgNy43NDA5NCBUagotMTUgVEptCi0oZ2lvbikgMTcuNzEzNSBUagotLTI0NiBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNzIgNTAuODUxOF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDMuMDYzMyAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni4zMzIgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzOS4zOTUgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDcgNwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTA1LjUxOSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3MS41OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc3LjEwOSA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEhvKSAxMi4xNzQzIFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLShiemlwMikgMjIuMTM2OSBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDcuMDg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTc0MS41NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNTApIDkuOTYyNiBUagotLTI2NCBUSm0KLShieXRlcy4pIDIzLjUyMTcgVGoKLS0zNTEgVEptCi0oUmFuZG9tKSAzMy43NjMzIFRqCi0tMjY0IFRKbQotKGRhdCkgMTIuMTc0MyBUagotMSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY0IFRKbQotKFwoaW5jbHVkaW5nKSA0MC45NTYyIFRqCi0tMjY0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNjMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNjQgVEptCi0obW9zdCkgMTkuMzc3MyBUagotLTI2NCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjMgVEptCi0oY29tcHJlc3NvcnNcKSkgNTMuMTIwNiBUagotLTI2NCBUSm0KLShpcykgNi42NDUwNSBUagotLTI2NCBUSm0KLShjb2RlZCkgMjMuNzkwNyBUagotLTI2MyBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNjQgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNjQgVEptCi0oOC4wNSkgMTcuNDM0NiBUagotLTI2MyBUSm0KLShiaXRzKSAxNC4zOTYgVGoKLS0yNjQgVEptCi0ocGVyKSAxMi43MjIyIFRqCi0tMjY0IFRKbQotKGJ5dGUsKSAxOS42NDYyIFRqCi0tMjY3IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHZpbmcpIDE3LjcxMzUgVGoKLS0yNjQgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTcyIDY5OC4wODIgVGQKLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGFuc2lvbikgMzUuOTc0OSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0oMC41JS4pIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDY5NS45MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4Ni4wODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY3Ni4yODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQXMpIDExLjA2ODQgVGoKLS0yNjggVEptCi0oYSkgNC40MjMzOSBUagotLTI2OCBUSm0KLShzZWxmLWNoZWNrKSA0MC45MzYzIFRqCi0tMjY5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI2OCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjY4IFRKbQotKHByb3RlY3Rpb24sKSA0Mi44ODkgVGoKLVsxIDAgMCAxIDIxNy4yNzMgNjc2LjI4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTcuMjczIC02NzYuMjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTcuMjczIDY3Ni4yODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI0Ny4xNjEgNjc2LjI4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDcuMTYxIC02NzYuMjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDkuODMzIDY3Ni4yODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odXNlcykgMTcuMTU1NiBUagotLTI2OCBUSm0KLSgzMi1iaXQpIDIzLjgwMDcgVGoKLS0yNjggVEptCi0oQ1JDcykgMjMuODEwNiBUagotLTI2OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY4IFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI2OCBUSm0KLShzdXJlKSAxNi41OTc3IFRqCi0tMjY4IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNjggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY5IFRKbQotKGRlY29tcHJlc3NlZCkgNTYuNDM4MSBUagotLTI2OCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI2OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY4IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI2OSBUSm0KLShpcykgNi42NDUwNSBUagotNzIgNjY0LjMyOCBUZAotKGlkZW50aWNhbCkgMzQuMzExMiBUagotLTIwMCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMTk5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwMCBUSm0KLShvcmlnaW5hbC4pIDMzLjQ4NDMgVGoKLS01ODYgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTIwMCBUSm0KLShndWFyZHMpIDI2LjU2MDMgVGoKLS0xOTkgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluc3QpIDE4LjgxOTQgVGoKLS0yMDAgVEptCi0oY29ycnVwdGlvbikgNDEuNTA0MiBUagotLTE5OSBUSm0KLShvZikgOC4yOTg4NSBUagotLTIwMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMDAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTE5OSBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTIxMCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTE5OSBUSm0KLShhZykgOS40MDQ2OSBUagotNSBUSm0KLShhaW5zdCkgMTguODE5NCBUagotLTIwMCBUSm0KLSh1bmRldGVjdGVkKSA0My4xNTggVGoKLS0yMDAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z3MpIDEzLjgzODEgVGoKLS0xOTkgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgNTEwLjExMiA2NjQuMzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMC4xMTIgLTY2NC4zMjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMC4xMTIgNjY0LjMyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNTQwIDY2NC4zMjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC02NjQuMzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTIuMzczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwoaG9wZWZ1bGx5KSA0MS41MDQyIFRqCi0tMjc1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMjc0IFRKbQotKHVubGlrKSAyMC40ODMxIFRqCi0xMCBUSm0KLShlbHlcKS4pIDE3Ljk4MjUgVGoKLS0zODQgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjc1IFRKbQotKGNoYW5jZXMpIDMxLjUzMTYgVGoKLS0yNzUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI3NCBUSm0KLShjb3JydXB0aW9uKSA0MS41MDQyIFRqCi0tMjc1IFRKbQotKGdvaW5nKSAyMi42OTQ4IFRqCi0tMjc1IFRKbQotKHVuZGV0ZWN0ZWQpIDQzLjE1OCBUagotLTI3NCBUSm0KLShpcykgNi42NDUwNSBUagotLTI3NSBUSm0KLShtaWNyb3Njb3BpYywpIDUxLjE4NzggVGoKLS0yODEgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNzUgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yNzQgVEptCi0oY2hhbmNlKSAyNy42NTYyIFRqCi0tMjc1IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNzUgVEptCi0oZm91cikgMTYuNTk3NyBUagotNzIgNjQwLjQxNyBUZAotKGJpbGxpb24pIDI2LjAyMjMgVGoKLS0yNzkgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjc5IFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNzkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjgwIFRKbQotKHByb2Nlc3NlZC4pIDQxLjc3MzIgVGoKLS03OTUgVEptCi0oQmUpIDExLjA2ODQgVGoKLS0yNzkgVEptCi0oYSkgNC40MjMzOSBUagotMTUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZSwpIDE0LjY1NSBUagotLTI4NiBUSm0KLSh0aG91Z2gsKSAzMC4xNjY4IFRqCi0tMjg3IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKGNoZWNrKSAyMy4yMzI4IFRqCi0tMjc5IFRKbQotKG9jY3VycykgMjYuMDAyNCBUagotLTI3OSBUSm0KLSh1cG9uKSAxOS45MjUyIFRqCi0tMjc5IFRKbQotKGRlY29tcHJlc3Npb24sKSA2Mi4yNTYzIFRqCi0tMjg3IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjc5IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjc5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI3OSBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMjgwIFRKbQotKHRlbGwpIDEyLjczMjIgVGoKLS0yNzkgVEptCi0oeW91KSAxNC45NDM5IFRqCi03MiA2MjguNDYyIFRkCi0odGhhdCkgMTQuOTQzOSBUagotLTIzNyBUSm0KLShzb21ldGhpbmcpIDQxLjUxNDIgVGoKLS0yMzYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzcgVEptCi0od3JvbmcuKSAyNy45NDUxIFRqCi0tNjExIFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMjM3IFRKbQotKGNhbicpIDE3LjE0NTYgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTIzNyBUSm0KLShoZWxwKSAxNy4xNTU2IFRqCi0tMjM3IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTIzNiBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzNyBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotLTIzNyBUSm0KLSh1bmNvbXByZXNzZWQpIDU2Ljk5NiBUagotLTIzNiBUSm0KLShkYXRhLikgMTkuMDg4MyBUagotLTYxMiBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yMzYgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjM3IFRKbQotKHVzZSkgMTMuMjgwMSBUagotWzEgMCAwIDEgNDU4LjE1OSA2MjguNDYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1OC4xNTkgLTYyOC40NjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OC4xNTkgNjI4LjQ2MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDUyOS44OSA2MjguNDYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyOS44OSAtNjI4LjQ2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTMyLjI0OSA2MjguNDYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLTcyIDYxNi41MDcgVGQKLSh0cnkpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS0yNTAgVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLVsxIDAgMCAxIDcyIDYxNC4zNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjA0LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTk0LjcwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm4pIDI3LjExODIgVGoKLS0yOTggVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLS00MDYgVEptCi0oMCkgNC45ODEzIFRqCi0tMjk4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI5OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk4IFRKbQotKG5vcm1hbCkgMjguMjI0IFRqCi0tMjk4IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhpdCwpIDEzLjAxMTIgVGoKLS0zMTAgVEptCi0oMSkgNC45ODEzIFRqCi0tMjk4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI5NyBUSm0KLShlbikgOS40MDQ2OSBUagotNDAgVEptCi0odmlyb25tZW50YWwpIDQ4LjE0OTIgVGoKLS0yOTggVEptCi0ocHJvYmxlbXMpIDM3LjA4MDggVGoKLS0yOTggVEptCi0oXChcMDAybGUpIDE2LjA0OTcgVGoKLS0yOTggVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjk4IFRKbQotKGZvdW5kLCkgMjUuNzMzNCBUagotLTMxMCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsaWQpIDE0Ljk0MzkgVGoKLS0yOTggVEptCi0oXDAwM2FncywpIDIxLjMxIFRqCi0tMzEwIFRKbQotKEkvTykgMTMuMjgwMSBUagotLTI5OCBUSm0KLShlcnJvcnMsKSAyNS43MjM0IFRqCi0tMzEwIFRKbQotKGV0Yy5cKSwpIDE5LjkxNTIgVGoKLS0zMTAgVEptCi0oMikgNC45ODEzIFRqCi0tMjk4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDU4Mi43NTMgVGQKLShpbmRpY2F0ZSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGNvcnJ1cHQpIDI4Ljc3MiBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZSwpIDE1LjIyMjkgVGoKLS0yNTAgVEptCi0oMykgNC45ODEzIFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLShpbnRlcm5hbCkgMzAuNDM1NyBUagotLTI1MCBUSm0KLShjb25zaXN0ZW5jKSA0MS41MDQyIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oXChlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnLCkgNy40NzE5NSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnXCkpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oY2F1c2VkKSAyNy4xMDgyIFRqCi1bMSAwIDAgMSA0NDMuMDY1IDU4Mi43NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQzLjA2NSAtNTgyLjc1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQzLjA2NSA1ODIuNzUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NzIuOTUzIDU4Mi43NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk1MyAtNTgyLjc1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc1LjQ0NCA1ODIuNzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocGFuaWMuKSAyNC4wNjk2IFRqCi1bMSAwIDAgMSA3MiA1ODAuNTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NzAuNzUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDguMTE4IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjQuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKE9QVElPTlMpIDkyLjk4MzkgVGoKLVsxIDAgMCAxIDcyIDU0Ny44Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI4LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE2LjQ3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtYykgMTEuOTU1MSBUagotLTYwMCBUSm0KLSgtLXN0ZG91dCkgNDcuODIwNSBUagotWzEgMCAwIDEgMTM3Ljc1MyA1MTYuNDc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNjguMjQ0MSAtMC4xNTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTYuMzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA1MDQuNTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ29tcHJlc3MpIDM5Ljg1MDQgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi0tMjUwIFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLVsxIDAgMCAxIDcyIDUwMi4zNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4OC42NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ3OC44NTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWQpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS1kZWNvbXByZXNzKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNjEuNjY0IDQ3OC44NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Mi4xNTQ0IC0xLjUzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ3Ny4zMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDQ2Ni44OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3JjZSkgMTcuMTQ1NiBUagotLTI5NiBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotWzEgMCAwIDEgMjAwLjIxNCA0NjYuODk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMC4yMTQgLTQ2Ni44OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMC4yMTQgNDY2Ljg5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjMwLjEwMiA0NjYuODk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMC4xMDIgLTQ2Ni44OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzMC4xMDIgNDY2Ljg5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMzUuNjU5IDQ2Ni44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM1LjY1OSAtNDY2Ljg5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM1LjY1OSA0NjYuODk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI3Ny41MDIgNDY2Ljg5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzcuNTAyIC00NjYuODk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODAuNDU0IDQ2Ni44OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI5Ny43OTEgNDY2Ljg5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTcuNzkxIC00NjYuODk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTcuNzkxIDQ2Ni44OTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpjYXQpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMyNy42NzkgNDY2Ljg5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjcuNjc5IC00NjYuODk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzAuNjMxIDQ2Ni44OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjk2IFRKbQotKHJlYWxseSkgMjIuNjg0OCBUagotLTI5NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTcgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTI5NiBUSm0KLShwcm9ncmFtLCkgMzYuMjQzOSBUagotLTMwOCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTYgVEptCi0oZGVjaXNpb24pIDMzLjIwNTMgVGoKLS0yOTcgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLTEwOCA0NTQuOTQ0IFRkCi0od2hhdCkgMTkuMzY3MyBUagotLTMwMyBUSm0KLShhY3Rpb25zKSAyOC4yMjQgVGoKLS0zMDMgVEptCi0odG8pIDcuNzUwOSBUagotLTMwMyBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMDMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDMgVEptCi0oZG9uZSkgMTkuMzY3MyBUagotLTMwMyBUSm0KLShvbikgOS45NjI2IFRqCi0tMzA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwMyBUSm0KLShiYXNpcykgMTkuOTI1MiBUagotLTMwMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwMyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTMwMyBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS0zMDMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDMgVEptCi0odXNlZC4pIDIwLjc1MjEgVGoKLS05MzkgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTMwMyBUSm0KLShcMDAzYWcpIDE0Ljk0MzkgVGoKLS0zMDMgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVycmlkZXMpIDI3LjEwODIgVGoKLS0zMDMgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTMwMyBUSm0KLShtZWNoYW5pc20sKSA0Ny44NzAzIFRqCi0tMzE2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0xMDggNDQyLjk4OCBUZAotKGZvcmNlcykgMjQuMzM4NiBUagotLTI1MCBUSm0KLShiemlwMikgMjIuMTM2OSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3MuKSA0OS41MjQxIFRqCi1bMSAwIDAgMSA3MiA0NDAuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MjcuMTIxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MTcuMzIzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC16KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tY29tcHJlc3MpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE0OS43MDkgNDE3LjMyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgwLjE5OTMgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDE1Ljc4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDQwNS4zNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGNvbXBsZW1lbnQpIDQ5LjI1NTEgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTg3Ljk2OSA0MDUuMzY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4Ny45NjkgLTQwNS4zNjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4Ny45NjkgNDA1LjM2OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtZCkgMTEuOTU1MSBUagotWzEgMCAwIDEgMTk5LjkyNCA0MDUuMzY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OS45MjQgLTQwNS4zNjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OS45MjQgNDA1LjM2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0zMTAgVEptCi0oZm9yY2VzKSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uLCkgNTIuODUxNiBUagotLTI1MCBUSm0KLShyZSkgNy43NDA5NCBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFyZGxlc3MpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2thdGlvbikgMjkuODg3OCBUagotLTI1MCBUSm0KLShuYW1lLikgMjQuMDY5NiBUagotWzEgMCAwIDEgNzIgNDAzLjIxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuODY2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg5LjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM3OS43MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXQpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS10ZXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMjUuNzk4IDM3OS43MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01Ni4yODg5IC0wLjE1NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3OS41NDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAzNjcuNzQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENoZWNrKSAyNS40NTQ0IFRqCi0tMjcwIFRKbQotKGludGUpIDE0Ljk0MzkgVGoKLTE1IFRKbQotKGdyaXR5KSAxOC44MTk0IFRqCi0tMjcxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjcwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MSBUSm0KLShzcGVjaVwwMDJlZCkgMzUuNDE3IFRqCi0tMjcwIFRKbQotKFwwMDJsZVwoc1wpLCkgMjUuNzMzNCBUagotLTI3NiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNzAgVEptCi0oZG9uJykgMTguMjYxNCBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjcwIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yNzEgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLS03NDIgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI3MSBUSm0KLShyZWFsbHkpIDIyLjY4NDggVGoKLS0yNzAgVEptCi0ocGVyZm9ybXMpIDM1Ljk2NSBUagotLTI3MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjcxIFRKbQotKHRyaWFsKSAxNi4wNDk3IFRqCi0tMjcwIFRKbQotKGRlY29tcHJlcy0pIDQ2LjQ3NTUgVGoKLTEwOCAzNTUuNzkxIFRkCi0oc2lvbikgMTYuNjA3NyBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh0aHJvKSAxNi4wNDk3IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXkpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJlc3VsdC4pIDI0LjYyNzUgVGoKLVsxIDAgMCAxIDcyIDM1My42MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMzOS45MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMzMC4xMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWYpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS1mb3JjZSkgNDEuODQyOSBUagotWzEgMCAwIDEgMTMxLjc3NiAzMzAuMTI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNjIuMjY2NSAtMC4xNTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjkuOTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzE4LjE3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcmNlKSAxNy4xNDU2IFRqCi0tMzM4IFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcndyaXRlKSAyOC4yMTQxIFRqCi0tMzM5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzM4IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTMzOCBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotLTExNTAgVEptCi0oTm9ybWFsbHkpIDM4LjE4NjYgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI4OS44MzEgMzE4LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODkuODMxIC0zMTguMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODkuODMxIDMxOC4xNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMxOS43MTkgMzE4LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTkuNzE5IC0zMTguMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjMuMDg5IDMxOC4xNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTMzOCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zMzkgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyd3JpdGUpIDI4LjIxNDEgVGoKLS0zMzggVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotLTMzOCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0zMzggVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS0xMTUwIFRKbQotKEFsc28pIDE4LjgxOTQgVGoKLS0zMzkgVEptCi0oZm9yY2VzKSAyNC4zMzg2IFRqCi1bMSAwIDAgMSAxMDggMzA2LjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDggLTMwNi4yMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAzMDYuMjE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMzcuODg4IDMwNi4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljg4OCAtMzA2LjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQwLjM3OSAzMDYuMjE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYnJlYWspIDIyLjEyNjkgVGoKLS0yNTAgVEptCi0oaGFyZCkgMTcuNzAzNSBUagotLTI1MCBUSm0KLShsaW5rcykgMTkuMzc3MyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKG90aGVyd2lzZSkgMzguNzM0NiBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZG4nKSAyNi4wMTIzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0oZG8uKSAxMi40NTMzIFRqCi1bMSAwIDAgMSA3MiAzMDQuNjgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTQuODM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMjg0LjQxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTM3Ljg4OCAyODQuNDE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy44ODggLTI4NC40MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0MS4yMTEgMjg0LjQxNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShub3JtYWxseSkgMzUuOTc0OSBUagotLTMzNCBUSm0KLShkZWNsaW5lcykgMzIuNjQ3NCBUagotLTMzMyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzM0IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0zMzMgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTMzNCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTMzMyBUSm0KLShkb24nKSAxOC4yNjE0IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMzQgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMzMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzQgVEptCi0oY29ycmVjdCkgMjcuNjU2MiBUagotLTMzMyBUSm0KLShtYWdpYykgMjQuMzQ4NiBUagotLTMzNCBUSm0KLShoZWFkZXIpIDI2LjU1MDMgVGoKLS0zMzMgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi0tNTYxIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzM0IFRKbQotKGZvcmNlZCkgMjUuNDQ0NSBUagotMTA4IDI3Mi40NjEgVGQKLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTExLjMxOCAyNzIuNDYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMS4zMTggLTI3Mi40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMS4zMTggMjcyLjQ2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtZikgMTEuOTU1MSBUagotWzEgMCAwIDEgMTIzLjI3MyAyNzIuNDYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMy4yNzMgLTI3Mi40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMy4yNzMgMjcyLjQ2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSwpIDUuODA4MiBUagotLTI1MCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3ZSkgMTEuNjE2NCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHBhc3MpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjUwIFRKbQotKHRocm91Z2gpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0odW5tb2RpXDAwMmVkLikgNDcuODgwMyBUagotLTMxMCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKEdOVSkgMjEuNTc5IFRqCi1bMSAwIDAgMSA0MTIuNTg1IDI3Mi40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEyLjU4NSAtMjcyLjQ2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEyLjU4NSAyNzIuNDYxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGd6aXApIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDQzNi40OTYgMjcyLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzYuNDk2IC0yNzIuNDYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzguOTg2IDI3Mi40NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcy4pIDEwLjc4OTUgVGoKLVsxIDAgMCAxIDcyIDI3MC4zMDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI1Ni41OTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI0Ni43OTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWspIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS1rZWVwKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMjUuNzk4IDI0Ni43OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01Ni4yODg5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI0NS4yNjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAyMzQuODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSykgNy4xOTMgVGoKLTI1IFRKbQotKGVlcCkgMTMuODI4MSBUagotLTI1MCBUSm0KLShcKGRvbicpIDIxLjU3OSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKGRlbGV0ZVwpKSAyNy4xMDgyIFRqCi0tMjUwIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjUwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0oZHVyaW5nKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjUwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24uKSA2Mi4yNTYzIFRqCi1bMSAwIDAgMSA3MiAyMzIuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMTguOTczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMDkuMTc0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1zKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tc21hbGwpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEzMS43NzYgMjA5LjE3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTYyLjI2NjUgLTAuMTU0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjA5LjAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMTk3LjIxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWR1Y2UpIDI5Ljg3NzggVGoKLS0zNDcgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMzQ3IFRKbQotKHVzYWdlLCkgMjUuMTc1NSBUagotLTM3MSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNDYgVEptCi0oY29tcHJlc3Npb24sKSA1Mi44NTE2IFRqCi0tMzcxIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0zNDcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDcgVEptCi0odGVzdGluZy4pIDI5LjA2MDkgVGoKLS0xMjAxIFRKbQotKEZpbGVzKSAxOS4zNzczIFRqCi0tMzQ3IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM0NyBUSm0KLShkZWNvbXByZXNzZWQpIDU2LjQzODEgVGoKLS0zNDYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDcgVEptCi0odGVzdGVkKSAyMy4yNDI3IFRqCi0xMDggMTg1LjI2NCBUZAotKHVzaW5nKSAyMS41ODkgVGoKLS0zODggVEptCi0oYSkgNC40MjMzOSBUagotLTM4OCBUSm0KLShtb2RpXDAwMmVkKSAzNS40MjcgVGoKLS0zODggVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMzg5IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMzg4IFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLS0zODggVEptCi0ocmVxdWlyZXMpIDMyLjA4OTUgVGoKLS0zODggVEptCi0oMi41KSAxMi40NTMzIFRqCi0tMzg4IFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0zODggVEptCi0ocGVyKSAxMi43MjIyIFRqCi0tMzg4IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzg5IFRKbQotKGJ5dGUuKSAxOS42NDYyIFRqCi0tMTQ0OCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMzg5IFRKbQotKG1lYW5zKSAyNS40NTQ0IFRqCi0tMzg4IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zODggVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzg4IFRKbQotKGNhbikgMTMuODI4MSBUagotLTM4OCBUSm0KLShiZSkgOS40MDQ2OSBUagotMTA4IDE3My4zMDkgVGQKLShkZWNvbXByZXNzZWQpIDU2LjQzODEgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSgyMzAwaykgMjQuOTA2NSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYWxiZWl0KSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLShoYWxmKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShub3JtYWwpIDI4LjIyNCBUagotLTI1MCBUSm0KLShzcGVlZC4pIDI1LjE3NTUgVGoKLVsxIDAgMCAxIDcyIDE3MS4xNTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE2MS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAxNTEuNTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRHVyaW5nKSAyOC4yMjQgVGoKLS0yNTIgVEptCi0oY29tcHIpIDI1LjQ1NDQgVGoKLTEgVEptCi0oZXNzaW9uLCkgMjcuMzk3MiBUagotWzEgMCAwIDEgMTk0LjA5IDE1MS41MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTQuMDkgLTE1MS41MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk0LjA5IDE1MS41MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtcykgMTEuOTU1MSBUagotWzEgMCAwIDEgMjA2LjA0NiAxNTEuNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA2LjA0NiAtMTUxLjUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguNTUxIDE1MS41MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzZWxlY3RzKSAyNi41NjAzIFRqCi0tMjUxIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTIgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTEgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI1MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MiBUSm0KLSgyMDBrLCkgMjIuNDE1OSBUagotLTI1MSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MiBUSm0KLShsaW1pdHMpIDIyLjcwNDggVGoKLS0yNTEgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUyIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUyIFRKbQotKGFyb3VuZCkgMjcuNjY2MSBUagotLTI1MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTIgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTI1MSBUSm0KLShcMDAyZ3VyZSwpIDI1LjczMzQgVGoKLS0yNTIgVEptCi0oYXQpIDcuMTkzIFRqCi0xMDggMTM5LjU1NCBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI4NyBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGVuc2UpIDI3LjY2NjEgVGoKLS0yODcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODggVEptCi0oeW91cikgMTguMjYxNCBUagotLTI4NyBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI4NyBUSm0KLShyYXRpby4pIDIwLjc1MjEgVGoKLS04NDMgVEptCi0oSW4pIDguMjk4ODUgVGoKLS0yODcgVEptCi0oc2hvcnQsKSAyMi40MTU5IFRqCi0tMjk3IFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjg3IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yODcgVEptCi0obWFjaGluZSkgMzMuNzUzMyBUagotLTI4NyBUSm0KLShpcykgNi42NDUwNSBUagotLTI4NyBUSm0KLShsbykgNy43NTA5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI4NyBUSm0KLShvbikgOS45NjI2IFRqCi0tMjg4IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI4NyBUSm0KLShcKDgpIDguMjk4ODUgVGoKLS0yODcgVEptCi0obWUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhYnl0ZXMpIDI1LjQ1NDQgVGoKLS0yODcgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yODcgVEptCi0obGVzc1wpLCkgMjAuNzUyMSBUagotMTA4IDEyNy41OTkgVGQKLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDEyMy43NzEgMTI3LjU5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjMuNzcxIC0xMjcuNTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjMuNzcxIDEyNy41OTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXMpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDEzNS43MjYgMTI3LjU5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzUuNzI2IC0xMjcuNTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzguMjE2IDEyNy41OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5dGhpbmcuKSAzNS42OTYgVGoKLS02MjAgVEptCi0oU2VlKSAxNC4zODYgVGoKLVsxIDAgMCAxIDIyMC4wNzkgMTI3LjU5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0yMjAuMDc5IC0xMjcuNTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuMDc5IDEyNy41OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTUVNT1IpIDM3LjYzODcgVGoKLTY1IFRKbQotKFkpIDcuMTkzIFRqCi0tMjUwIFRKbQotKE1BTikgMjMuMjQyNyBUagotMzUgVEptCi0oQSkgNy4xOTMgVGoKLTQwIFRKbQotKEdFTUVOVCkgNDEuNTA0MiBUagotWzEgMCAwIDEgMzM3Ljk0NiAxMjcuNTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTMzNy45NDYgLTEyNy41OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MC40MzcgMTI3LjU5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShbNV0pIDExLjYxNjQgVGoKLVsxIDAgMCAxIDM1Mi4wNTMgMTI3LjU5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTIuMDUzIC0xMjcuNTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTQuNTQ0IDEyNy41OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVsbykgMTcuMTU1NiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDEyNS40NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTExMS43MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwMS45MzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXEpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS1xdWlldCkgNDEuODQyOSBUagotWzEgMCAwIDEgMTMxLjc3NiAxMDEuOTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNjIuMjY2NSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMDAuMzk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggODkuOTc4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShTdXBwcmVzcykgMzUuOTc0OSBUagotLTIyMSBUSm0KLShub24tZXNzZW50aWFsKSA1Mi41NzI2IFRqCi0tMjIwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcm5pbmcpIDI1LjQ1NDQgVGoKLS0yMjEgVEptCi0obWVzc2FnZXMuKSA0MC4xMTk0IFRqCi0tMzAwIFRKbQotKE1lc3NhZ2VzKSAzOC43MzQ2IFRqCi0tMjIxIFRKbQotKHBlcnRhaW5pbmcpIDQwLjM5ODMgVGoKLS0yMjEgVEptCi0odG8pIDcuNzUwOSBUagotLTIyMCBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yMjEgVEptCi0oZXJyb3JzKSAyMy4yMzI4IFRqCi0tMjIxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjIwIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMjIxIFRKbQotKGNyaXRpY2FsKSAyNy42NjYxIFRqCi0tMjIxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50cykgMTYuMDQ5NyBUagotLTIyMSBUSm0KLSh3aSkgOS45NjI2IFRqCi0xIFRKbQotKGxsKSA1LjUzOTIxIFRqCi0tMjIxIFRKbQotKG5vdCkgMTIuNzMyMiBUagotMTA4IDc4LjAyMzIgVGQKLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShzdXBwcmVzc2VkLikgNDYuMjA2NSBUagotWzEgMCAwIDEgNzIgNzUuODY2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuODY2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjE0ODJdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC44NTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNCkgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA4IDgKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEwNS41MTkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzEuNTkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ny4xMDkgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ3LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXYpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS12ZXJib3NlKSA1My43OTggVGoKLVsxIDAgMCAxIDE0My43MzEgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc0LjIyMTcgLTAuMTU0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzA5Ljg4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVikgNy4xOTMgVGoKLTExMSBUSm0KLShlcmJvc2UpIDI2LjAwMjQgVGoKLS0zMjMgVEptCi0obW9kZSkgMjIuMTM2OSBUagotLTMyMiBUSm0KLSgtLSkgNi42MzUwOSBUagotLTMyMyBUSm0KLShzaG8pIDEzLjgzODEgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMzIyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyMyBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTMyMyBUSm0KLShyYXRpbykgMTguMjYxNCBUagotLTMyMiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMjMgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTMyMiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zMjMgVEptCi0ocHJvY2Vzc2VkLikgNDEuNzczMiBUagotLTEwNTYgVEptCi0oRnVydGhlcikgMjkuMzI5OSBUagotWzEgMCAwIDEgNDMwLjAxNSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMC4wMTUgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMC4wMTUgNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtdikgMTEuOTU1MSBUagotWzEgMCAwIDEgNDQxLjk3IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQxLjk3IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDEuOTcgNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzIzIFRKbQotKGluY3JlYXNlKSAzMi42Mzc1IFRqCi0tMzIyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyMyBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyYm9zaXR5KSAzMi4wOTk1IFRqCi0xMDggNjg2LjEyNyBUZAotKGxlKSA3LjE5MyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCwpIDkuNjgzNjUgVGoKLS0yNTAgVEptCi0oc3BlKSAxMy4yODAxIFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKG91dCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShsb3RzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oaW5mb3JtYXRpb24pIDQ3LjA0MzQgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0ocHJpbWFyaWx5KSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGludGVyZXN0KSAyOS4zMjk5IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShkaWFnbm9zdGljKSA0MC45NTYyIFRqCi0tMjUwIFRKbQotKHB1cnBvc2VzLikgMzcuOTA3NyBUagotWzEgMCAwIDEgNzIgNjgzLjk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3MC4wMjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY2MC4yMjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLUwpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS1saWNlbnNlKSA1My43OTggVGoKLS02MDAgVEptCi0oLVYpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS12ZXJzaW9uKSA1My43OTggVGoKLVsxIDAgMCAxIDIyMS40NCA2NjAuMjI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUxLjkzIC0wLjE1NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY2MC4wN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDY0OC4yNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRGlzcGxheSkgMzAuOTkzNiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc29mdHcpIDIyLjEzNjkgVGoKLTEwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbiwpIDI2LjgzOTIgVGoKLS0yNTAgVEptCi0obGljZW5zZSkgMjcuNjY2MSBUagotLTI1MCBUSm0KLSh0ZXJtcykgMjIuMTM2OSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShjb25kaXRpb25zLikgNDQuMDA0OCBUagotWzEgMCAwIDEgNzIgNjQ2LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MzIuMTY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MjIuMzY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0xKSAxMS45NTUxIFRqCi1bMSAwIDAgMSA4My45NTUyIDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODMuOTU1MiAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuNDQ1OCA2MjIuMzY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwob3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDEwMC41NTMgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDAuNTUzIC02MjIuMzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDAuNTUzIDYyMi4zNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1mYXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMzYuNDE4IDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM2LjQxOCAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM2LjQxOCA2MjIuMzY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE1Mi40NjggNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTIuNDY4IC02MjIuMzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTIuNDY4IDYyMi4zNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLTkpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDE2NC40MjMgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNDIzIC02MjIuMzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuOTE0IDYyMi4zNjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXChvcikgMTEuNjE2NCBUagotWzEgMCAwIDEgMTgxLjAyMSA2MjIuMzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4MS4wMjEgLTYyMi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS4wMjEgNjIyLjM2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtYmVzdCkgMjkuODg3OCBUagotWzEgMCAwIDEgMjEwLjkwOSA2MjIuMzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45MDkgLTYyMi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45MDkgNjIyLjM2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotWzEgMCAwIDEgMjE0LjIyNiA2MjIuMzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Mi4yMjYgLTEuNzgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjIwLjU4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDYxMC40MTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oU2V0KSAxMi43MzIyIFRqCi0tMjg4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI4OCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjg4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODggVEptCi0oMTAwKSAxNC45NDM5IFRqCi0tMjg5IFRKbQotKGssKSA3LjQ3MTk1IFRqCi0tMjk4IFRKbQotKDIwMCkgMTQuOTQzOSBUagotLTI4OCBUSm0KLShrKSA0Ljk4MTMgVGoKLS0yODggVEptCi0oLi4uKSA3LjQ3MTk1IFRqCi0tODUwIFRKbQotKDkwMCkgMTQuOTQzOSBUagotLTI4OCBUSm0KLShrKSA0Ljk4MTMgVGoKLS0yODggVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjg5IFRKbQotKGNvbXByZXNzaW5nLikgNTIuODUxNiBUagotLTg0OSBUSm0KLShIYXMpIDE1LjQ5MTggVGoKLS0yODkgVEptCi0obm8pIDkuOTYyNiBUagotLTI4OCBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oZmVjdCkgMTQuOTMzOSBUagotLTI4OCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0yODggVEptCi0oZGVjb21wcmVzc2luZy4pIDYyLjI1NjMgVGoKLS04NTAgVEptCi0oU2VlKSAxNC4zODYgVGoKLVsxIDAgMCAxIDEwOCA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTEwOCAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDU5OC40NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTUVNT1IpIDM3LjYzODcgVGoKLTY1IFRKbQotKFkpIDcuMTkzIFRqCi0tMjk3IFRKbQotKE1BTikgMjMuMjQyNyBUagotMzUgVEptCi0oQSkgNy4xOTMgVGoKLTQwIFRKbQotKEdFTUVOVCkgNDEuNTA0MiBUagotWzEgMCAwIDEgMjI2LjMzOCA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTIyNi4zMzggLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyOS4zIDU5OC40NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzVdKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAyNDAuOTE2IDU5OC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjkxNiAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQzLjg3OCA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJlbG8pIDE3LjE1NTYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tOTA0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgMjk3LjI3OCA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Ny4yNzggLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Ny4yNzggNTk4LjQ1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtLWZhc3QpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDMzMy4xNDQgNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzMuMTQ0IC01OTguNDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzYuMTA2IDU5OC40NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDM1My40NTQgNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTMuNDU0IC01OTguNDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTMuNDU0IDU5OC40NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1iZXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzODkuMzE5IDU5OC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg5LjMxOSAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkyLjI4MSA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFsaWFzZXMpIDI2LjU2MDMgVGoKLS0yOTcgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjk4IFRKbQotKHByaW1hcmlseSkgMzcuMDgwOCBUagotLTI5NyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yOTcgVEptCi0oR05VKSAyMS41NzkgVGoKLVsxIDAgMCAxIDUxNi4wOSA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxNi4wOSAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTE2LjA5IDU5OC40NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ3ppcCkgMjMuOTEwMiBUagotWzEgMCAwIDEgNTQwIDU5OC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC01OTguNDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNTg2LjUwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wYXRpYmlsaXR5KSA1My4xNDA1IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMzU2IFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjY1IFRKbQotKHBhcnRpY3VsYXIpIDM4LjE3NjcgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDIyMC40MjMgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjAuNDIzIC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuNDIzIDU4Ni41MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1mYXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSAyNTYuMjg4IDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU2LjI4OCAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU4LjkzMiA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjY1IFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI2NiBUSm0KLSh0aGluZ3MpIDI0LjM1ODYgVGoKLS0yNjUgVEptCi0oc2lnbmlcMDAyY2FudGx5KSA0OS4yNjUxIFRqCi0tMjY1IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzdGVyKSAxOC44MDk0IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNzEyIFRKbQotKEFuZCkgMTcuMTU1NiBUagotWzEgMCAwIDEgNDQ0LjYyMiA1ODYuNTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC42MjIgLTU4Ni41MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0NC42MjIgNTg2LjUwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtLWJlc3QpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQ4MC40ODcgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODAuNDg3IC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODMuMTMxIDU4Ni41MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obWVyZWx5KSAyNy42NjYxIFRqCi0tMjY1IFRKbQotKHNlbGVjdHMpIDI2LjU2MDMgVGoKLTEwOCA1NzQuNTQ2IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShiZWhhKSAxOC44MDk0IFRqCi0yMCBUSm0KLSh2aW91cikgMjEuMDMxIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1NzQuNDQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2MC40OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0OC42NDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS0pIDExLjk1NTEgVGoKLVsxIDAgMCAxIDgzLjk1NTIgNTQ4LjY0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0LjQ0NTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQ4LjY0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDUzNi42ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVCkgNi4wODcxNSBUagotMzUgVEptCi0ocmVhdHMpIDE4LjgwOTQgVGoKLS0yNjEgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNjEgVEptCi0oc3Vic2VxdWVudCkgNDQuMjczOCBUagotLTI2MCBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50cykgMzMuNzYzMyBUagotLTI2MSBUSm0KLShhcykgOC4yOTg4NSBUagotLTI2MSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjEgVEptCi0obmFtZXMsKSAyNy45NDUxIFRqCi0tMjYzIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0yNjEgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNjEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNjAgVEptCi0oc3RhcnQpIDE3LjE1NTYgVGoKLS0yNjEgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI2MSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjYxIFRKbQotKGRhc2guKSAyMC43NTIxIFRqCi0tNjg1IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNjAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjEgVEptCi0oc28pIDguODU2NzUgVGoKLS0yNjEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjYxIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI2MCBUSm0KLShoYW5kbGUpIDI2LjU2MDMgVGoKLS0yNjEgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotMTA4IDUyNC43MzIgVGQKLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKG5hbWVzKSAyNS40NTQ0IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLShnaW5uaW5nKSAzMC40NDU3IFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShkYXNoLCkgMjAuNzUyMSBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGFtcGxlOikgMzIuMDk5NSBUagotWzEgMCAwIDEgMzAyLjI3IDUyNC43MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAyLjI3IC01MjQuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDIuMjcgNTI0LjczMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotLTYwMCBUSm0KLSgtLSkgMTEuOTU1MSBUagotLTYwMCBUSm0KLSgtbXlmaWxlbmFtZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDIxLjgyMSA1MjQuNzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMS44MjEgLTUyNC43MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMS44MjEgNTI0LjczMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1MjIuNTc2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUwOC42MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ5OC44MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtLXJlcGV0aXRpdmUtZmFzdCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMTczLjYxOSA0OTguODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTczLjYxOSAtNDk4LjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzMuNjE5IDQ5OC44MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNzguNiA0OTguODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4My41ODIgLTQ5OC44M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgzLjU4MiA0OTguODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1yZXBldGl0aXZlLWJlc3QpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDI4NS4yIDQ5OC44M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNS42OTEgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDk3LjI5NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDQ4Ni44NzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0yMDcgVEptCi0oXDAwM2FncykgMTguODE5NCBUagotLTIwNiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yMDcgVEptCi0ocmVkdW5kYW50KSAzOS44NDA0IFRqCi0tMjA3IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMDYgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0yMDcgVEptCi0oMC45LjUpIDE5LjkyNTIgVGoKLS0yMDcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMDYgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZS4pIDYuOTE0MDQgVGoKLS01OTEgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yMDcgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlZCkgMjIuMTM2OSBUagotLTIwNyBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yMDcgVEptCi0oYykgNC40MjMzOSBUagotMSBUSm0KLShvKSA0Ljk4MTMgVGoKLS0xIFRKbQotKGEpIDQuNDIzMzkgVGoKLTEgVEptCi0ocnNlKSAxMS42MTY0IFRqCi0tMjA3IFRKbQotKGNvbnRyb2wpIDI4LjIyNCBUagotLTIwNyBUSm0KLShvKSA0Ljk4MTMgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yMDcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjA2IFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLTEwOCA0NzQuOTE5IFRkCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUxIFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTEgVEptCi0oZWFybGllcikgMjUuNDQ0NSBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMsKSAzMC43MTQ3IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShzb21ldGltZXMpIDQyLjYyIFRqCi0tMjUwIFRKbQotKHVzZWZ1bC4pIDI2LjgzOTIgVGoKLS02MjIgVEptCi0oMC45LjUpIDE5LjkyNTIgVGoKLS0yNTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGltcHJvKSAyMy44MDA3IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVkKSA5LjQwNDY5IFRqCi0xMDggNDYyLjk2NCBUZAotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShyZW5kZXJzKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLS0yNTAgVEptCi0oaXJyZWxlKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFudC4pIDE0LjY2NDkgVGoKLVsxIDAgMCAxIDcyIDQ2MC44MDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM2Ljg5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDE0LjI2NCBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi41LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShNRU1PUikgNzkuMTg0IFRqCi01MCBUSm0KLShZKSAxMy43NzkyIFRqCi0tMjc4IFRKbQotKE1BTkEpIDYxLjk1NDggVGoKLTUwIFRKbQotKEdFTUVOVCkgODguMzc3MSBUagotWzEgMCAwIDEgNzIgNDE0LjAwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDA0LjA0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzkyLjM0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCAzOTIuMzQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTM5Mi4zNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC40NTQgMzkyLjM0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wcmVzc2VzKSA0NS45Mjc2IFRqCi0tMjU4IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0yNTcgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI1OCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjU3IFRKbQotKGJsb2Nrcy4pIDI4LjUwMyBUagotLTY2NiBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yNTcgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTggVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI1OCBUSm0KLShhZikgNy43NDA5NCBUagotMjUgVEptCi0oZmVjdHMpIDE4LjgwOTQgVGoKLS0yNTcgVEptCi0oYm90aCkgMTcuNzEzNSBUagotLTI1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTcgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNTggVEptCi0ocmF0aW8pIDE4LjI2MTQgVGoKLS0yNTcgVEptCi0oYWNoaWUpIDIxLjAyMTEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWQsKSAxMS44OTUzIFRqCi0tMjYwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjU4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1NyBUSm0KLShhbW91bnQpIDI5Ljg4NzggVGoKLTcyIDM4MC4zOTEgVGQKLShvZikgOC4yOTg4NSBUagotLTIxNSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yMTUgVEptCi0obmVlZGVkKSAyOC4yMTQxIFRqCi0tMjE1IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTIxNSBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTIxNCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIxNSBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotLTU5NyBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yMTUgVEptCi0oXDAwM2FncykgMTguODE5NCBUagotWzEgMCAwIDEgMzM3LjcxOSAzODAuMzkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNy43MTkgLTM4MC4zOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzNy43MTkgMzgwLjM5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtMSkgMTEuOTU1MSBUagotWzEgMCAwIDEgMzQ5LjY3NCAzODAuMzkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0OS42NzQgLTM4MC4zOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1MS44MTUgMzgwLjM5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aHJvdWdoKSAzMC45OTM2IFRqCi1bMSAwIDAgMSAzODQuOTUgMzgwLjM5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODQuOTUgLTM4MC4zOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4NC45NSAzODAuMzkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC05KSAxMS45NTUxIFRqCi1bMSAwIDAgMSAzOTYuOTA1IDM4MC4zOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk2LjkwNSAtMzgwLjM5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk5LjA0NiAzODAuMzkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNwZWNpZnkpIDI4Ljc3MiBUagotLTIxNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMTUgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yMTUgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTIxNSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjE0IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjE1IFRKbQotKDEwMCwwMDApIDMyLjM3ODUgVGoKLTcyIDM2OC40MzUgVGQKLShieXRlcykgMjEuMDMxIFRqCi0tMjc4IFRKbQotKHRocm91Z2gpIDMwLjk5MzYgVGoKLS0yNzcgVEptCi0oOTAwLDAwMCkgMzIuMzc4NSBUagotLTI3OCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMjc4IFRKbQotKFwodGhlKSAxNS40OTE4IFRqCi0tMjc3IFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdFwpKSAxOC4yNjE0IFRqCi0tMjc4IFRKbQotKHJlc3BlY3RpKSAzMC45ODM3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVseSkgMTIuMTc0MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTc4NiBUSm0KLShBdCkgOS45NjI2IFRqCi0tMjc4IFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNzggVEptCi0odGltZSwpIDIwLjIwNDIgVGoKLS0yODQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc4IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjc4IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yNzcgVEptCi0odXNlZCkgMTguMjYxNCBUagotLTI3OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNzggVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLTcyIDM1Ni40OCBUZAotKGlzKSA2LjY0NTA1IFRqCi0tMjQzIFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yNDIgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0oaGVhZGVyKSAyNi41NTAzIFRqCi0tMjQzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MyBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjQyIFRKbQotKFwwMDJsZSwpIDE1LjIyMjkgVGoKLS0yNDQgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI3NS4xNzQgMzU2LjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3NS4xNzQgLTM1Ni40OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc1LjE3NCAzNTYuNDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMzE3LjAxNyAzNTYuNDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE3LjAxNyAtMzU2LjQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTkuNDMzIDM1Ni40OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aGVuKSAxNy4xNTU2IFRqCi0tMjQzIFRKbQotKGFsbCkgOS45NjI2IFRqCi0xIFRKbQotKG8pIDQuOTgxMyBUagotLTEgVEptCi0oYykgNC40MjMzOSBUagotMSBUSm0KLShhdGVzKSAxNS40OTE4IFRqCi0tMjQzIFRKbQotKGl0c2VsZikgMTkuOTI1MiBUagotLTI0MiBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yNDMgVEptCi0oZW5vdWdoKSAyOS4zMjk5IFRqCi0tMjQzIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI0MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQzIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLTcyIDM0NC41MjUgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDMgVEptCi0oXDAwMmxlLikgMTUuMjIyOSBUagotLTk0MCBUSm0KLShTaW5jZSkgMjIuMTM2OSBUagotLTMwNCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTMwMyBUSm0KLShzaXplcykgMTkuMzY3MyBUagotLTMwMyBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zMDMgVEptCi0oc3RvcmVkKSAyNC4zNDg2IFRqCi0tMzA0IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMDMgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTMwMyBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTMxNyBUSm0KLShpdCkgNS41MzkyMSBUagotLTMwMyBUSm0KLShmb2xsbykgMTguODE5NCBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0zMDQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTMwMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDMgVEptCi0oXDAwM2FncykgMTguODE5NCBUagotWzEgMCAwIDEgNDA2LjM1IDM0NC41MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA2LjM1IC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDYuMzUgMzQ0LjUyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtMSkgMTEuOTU1MSBUagotWzEgMCAwIDEgNDE4LjMwNSAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxOC4zMDUgLTM0NC41MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMS4zMjcgMzQ0LjUyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSA0MzIuMSAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMi4xIC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzIuMSAzNDQuNTI1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC05KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA0NDQuMDU1IDM0NC41MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA1NSAtMzQ0LjUyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ3LjA3NyAzNDQuNTI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotLTMwMyBUSm0KLShpcnJlbGUpIDIxLjAyMTEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMzA0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMDMgVEptCi0oc28pIDguODU2NzUgVGoKLTcyIDMzMi41NyBUZAotKGlnbm9yZWQpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oZHVyaW5nKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24uKSA2Mi4yNTYzIFRqCi1bMSAwIDAgMSA3MiAzMzAuNDEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjAuNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxMC42NTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTI1MCBUSm0KLShyZXF1aXJlbWVudHMsKSA1NC41MDU0IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYnl0ZXMsKSAyMy41MjE3IFRqCi0tMjUwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShlc3RpbWF0ZWQpIDM4LjE4NjYgVGoKLS0yNTAgVEptCi0oYXM6KSAxMS4wNjg0IFRqCi1bMSAwIDAgMSA3MiAzMDguNDk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNjAuNzcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI5OS4xM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjk5LjEzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uOikgNzEuNzMwNyBUagotLTEyNzggVEptCi0oNDAwaykgMjMuOTEwMiBUagotLTQyNiBUSm0KLSgrKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oeCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShibG9jaykgMjkuODg3OCBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi05MCAyNzUuMjIgVGQKLShEZWNvbXByZXNzaW9uOikgODMuNjg1OCBUagotLTQyNiBUSm0KLSgxMDBrKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKCspIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oNCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh4KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJsb2NrKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCksKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0xNTMuNjYgMjYzLjI2NSBUZAotKDEwMGspIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oKykgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgyLjUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oeCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShibG9jaykgMjkuODg3OCBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA3MiAyNDcuNzIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzNy43NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyNS44MDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTGFyKSAxMy44MjgxIFRqCi0xOCBUSm0KLShnZXIpIDEyLjcyMjIgVGoKLS0yOTIgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yOTIgVEptCi0oc2l6ZXMpIDE5LjM2NzMgVGoKLS0yOTEgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjkyIFRKbQotKHJhcGlkbHkpIDI4LjIyNCBUagotLTI5MiBUSm0KLShkaW1pbmlzaGluZykgNDcuNjExMyBUagotLTI5MiBUSm0KLShtYXIpIDE1LjQ5MTggVGoKLTE4IFRKbQotKGdpbmFsKSAxOS45MjUyIFRqCi0tMjkxIFRKbQotKHJldHVybnMuKSAzMC4xNTY4IFRqCi0tODcxIFRKbQotKE1vc3QpIDIwLjQ4MzEgVGoKLS0yOTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkyIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjkyIFRKbQotKGNvbWVzKSAyNS40NTQ0IFRqCi0tMjkyIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yOTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkyIFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0yOTIgVEptCi0odHcpIDkuOTYyNiBUagotMTAgVEptCi0obykgNC45ODEzIFRqCi0tMjkyIFRKbQotKG9yKSA4LjI5ODg1IFRqCi03MiAyMTMuODUgVGQKLSh0aHJlZSkgMTkuOTE1MiBUagotLTIzMiBUSm0KLShodW5kcmVkKSAzMi42NDc0IFRqCi0tMjMyIFRKbQotKGspIDQuOTgxMyBUagotLTIzMiBUSm0KLShvZikgOC4yOTg4NSBUagotLTIzMiBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTIzMiBUSm0KLShzaXplLCkgMTcuOTgyNSBUagotLTIzNSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjMyIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjdCkgMTEuNjE2NCBUagotLTIzMiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3J0aCkgMTYuMDQ5NyBUagotLTIzMiBUSm0KLShiZWFyaW5nKSAyOS44Nzc4IFRqCi0tMjMyIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMzIgVEptCi0obWluZCkgMjAuNDgzMSBUagotLTIzMiBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0yMzEgVEptCi0odXNpbmcpIDIxLjU4OSBUagotWzEgMCAwIDEgMzU0LjAyNSAyMTMuODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzU0LjAyNSAtMjEzLjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTQuMDI1IDIxMy44NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMzgzLjkxMyAyMTMuODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgzLjkxMyAtMjEzLjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODYuMjIzIDIxMy44NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShvbikgOS45NjI2IFRqCi0tMjMyIFRKbQotKHNtYWxsKSAyMS41ODkgVGoKLS0yMzIgVEptCi0obWFjaGluZXMuKSA0MC4xMTk0IFRqCi0tMzA0IFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMjMyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjMyIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yMzEgVEptCi0oaW1wb3J0YW50KSAzOC43NDQ2IFRqCi03MiAyMDEuODk1IFRkCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhcHByZWNpYXRlKSA0MC45MzYzIFRqCi0tMjUwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKHJlcXVpcmVtZW50KSA0OC4xMzkzIFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHNldCkgMTEuMDY4NCBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNTAgVEptCi0odGltZSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjaG9pY2UpIDI2LjAwMjQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oc2l6ZS4pIDE3Ljk4MjUgVGoKLVsxIDAgMCAxIDcyIDE5OS43MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4OS43NzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE3OS45NzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zODggVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTM4OSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMzg4IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzg4IFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdCkgMTQuOTQzOSBUagotLTM4OSBUSm0KLSg5MDBrKSAxOS45MjUyIFRqCi0tMzg4IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzg5IFRKbQotKHNpemUsKSAxNy45ODI1IFRqCi1bMSAwIDAgMSAzMDIuMDAyIDE3OS45NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAyLjAwMiAtMTc5Ljk3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAyLjAwMiAxNzkuOTc3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDM0My44NDYgMTc5Ljk3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDMuODQ2IC0xNzkuOTc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDcuNzE1IDE3OS45NzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTM4OCBUSm0KLShyZXF1aXJlKSAyOC4yMTQxIFRqCi0tMzg5IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMzg4IFRKbQotKDM3MDApIDE5LjkyNTIgVGoKLS0zODkgVEptCi0oa2J5dGVzKSAyNi4wMTIzIFRqCi0tMzg4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zODkgVEptCi0oZGVjb21wcmVzcy4pIDQ5LjUyNDEgVGoKLTcyIDE2OC4wMjIgVGQKLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvKSA0Ljk4MTMgVGoKLS00MjQgVEptCi0oc3VwcG9ydCkgMjkuODg3OCBUagotLTQyNSBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tNDI0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDI0IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS00MjUgVEptCi0oXDAwMmwpIDguMzA4ODEgVGoKLTEgVEptCi0oZSkgNC40MjMzOSBUagotLTQyNSBUSm0KLShvbikgOS45NjI2IFRqCi0tNDI0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS00MjQgVEptCi0oNCkgNC45ODEzIFRqCi0tNDI1IFRKbQotKG1lKSAxMi4xNzQzIFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYWJ5dGUpIDIxLjU3OSBUagotLTQyNCBUSm0KLShtYWNoaW5lLCkgMzYuMjQzOSBUagotWzEgMCAwIDEgMzQ4LjI3MiAxNjguMDIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0OC4yNzIgLTE2OC4wMjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0OC4yNzIgMTY4LjAyMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzOTAuMTE1IDE2OC4wMjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkwLjExNSAtMTY4LjAyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk0LjM0MiAxNjguMDIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhcykgMTMuMjgwMSBUagotLTQyNCBUSm0KLShhbikgOS40MDQ2OSBUagotLTQyNSBUSm0KLShvcHRpb24pIDI1LjQ2NDQgVGoKLS00MjQgVEptCi0odG8pIDcuNzUwOSBUagotLTQyNCBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tNDI0IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLTcyIDE1Ni4wNjcgVGQKLShhcHByb3hpbWF0ZWx5KSA1Ny41NTM5IFRqCi0tMjgxIFRKbQotKGhhbGYpIDE1LjQ5MTggVGoKLS0yODEgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjgwIFRKbQotKGFtb3VudCkgMjkuODg3OCBUagotLTI4MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yODggVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yODEgVEptCi0oMjMwMCkgMTkuOTI1MiBUagotLTI4MSBUSm0KLShrYnl0ZXMuKSAyOC41MDMgVGoKLS04MDUgVEptCi0oRGVjb21wcmVzc2lvbikgNjEuOTc3MyBUagotLTI4MCBUSm0KLShzcGVlZCkgMjIuNjg0OCBUagotLTI4MSBUSm0KLShpcykgNi42NDUwNSBUagotLTI4MSBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjgxIFRKbQotKGhhbHYpIDE3LjE1NTYgVGoKLTE1IFRKbQotKGVkLCkgMTEuODk1MyBUagotLTI4OCBUSm0KLShzbykgOC44NTY3NSBUagotLTI4MSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yODEgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi03MiAxNDQuMTEyIFRkCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLShvcHRpb24pIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLSh3aGVyZSkgMjQuMzM4NiBUagotLTI1MCBUSm0KLShuZWNlc3NhcnkpIDM4LjcyNDYgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MjAgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKHJlbGUpIDE0LjkzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDNhZykgMTQuOTQzOSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotWzEgMCAwIDEgMzA1LjAyNCAxNDQuMTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNS4wMjQgLTE0NC4xMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwNS4wMjQgMTQ0LjExMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtcykgMTEuOTU1MSBUagotWzEgMCAwIDEgMzE2Ljk3OSAxNDQuMTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNi45NzkgLTE0NC4xMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxNi45NzkgMTQ0LjExMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxNDEuOTU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMzEuOTkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMjIuMTk0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluKSA4LjI5ODg1IFRqCi0tMjA0IFRKbQotKGdlbmVyYWwsKSAzMS44MTA2IFRqCi0tMjE0IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTIwNCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIwNSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yMDQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjA0IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VzdCkgMTYuMDQ5NyBUagotLTIwNSBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTIwNCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjA1IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTIwNCBUSm0KLShjb25zdHJhaW50cykgNDMuMTY3OSBUagotLTIwNCBUSm0KLShhbGxvKSAxNC45NDM5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTIxNCBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTIwNCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjA1IFRKbQotKG1heGltaXNlcykgNDIuNjIgVGoKLS0yMDQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjA0IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjA1IFRKbQotKGFjaGllKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVkLikgMTEuODk1MyBUagotNzIgMTEwLjIzOSBUZAotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0oc3BlZWQpIDIyLjY4NDggVGoKLS0yNTAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjUwIFRKbQotKHZpcnR1YWxseSkgMzMuNzYzMyBUagotLTI1MCBUSm0KLSh1bmFmKSAxNy43MDM1IFRqCi0yNSBUSm0KLShmZWN0ZWQpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI1MCBUSm0KLShzaXplLikgMTcuOTgyNSBUagotWzEgMCAwIDEgNzIgMTA4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtOTguMTE5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgODguMzIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFub3RoZXIpIDMyLjY0NzQgVGoKLS0yOTYgVEptCi0oc2lnbmlcMDAyY2FudCkgNDEuNTE0MiBUagotLTI5NiBUSm0KLShwb2ludCkgMjAuNDgzMSBUagotLTI5NSBUSm0KLShhcHBsaWVzKSAyOC4yMjQgVGoKLS0yOTYgVEptCi0odG8pIDcuNzUwOSBUagotLTI5NiBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjk2IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjk2IFRKbQotKFwwMDJ0KSA4LjMwODgxIFRqCi0tMjk2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTYgVEptCi0oYSkgNC40MjMzOSBUagotLTI5NSBUSm0KLShzaW5nbGUpIDIzLjgwMDcgVGoKLS0yOTYgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yOTYgVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0yOTYgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5NiBUSm0KLShtZWFucykgMjUuNDU0NCBUagotLTI5NiBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi0tMjk1IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yOTYgVEptCi0oeW91JykgMTguMjYxNCBUagotNTAgVEptCi0oZCkgNC45ODEzIFRqCi0tMjk2IFRKbQotKGVuY291bnRlcikgMzkuMjgyNSBUagotLTI5NiBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjk2IFRKbQotKGEpIDQuNDIzMzkgVGoKLTcyIDc2LjM2NTggVGQKLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlKSA5LjQwNDY5IFRqCi0tMjkwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjkwIFRKbQotKHNpemUuKSAxNy45ODI1IFRqCi0tODU5IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI5MCBUSm0KLShhbW91bnQpIDI5Ljg4NzggVGoKLS0yOTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTAgVEptCi0ocmVhbCkgMTQuOTMzOSBUagotLTI5MCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yODkgVEptCi0odG91Y2hlZCkgMzEuNTQxNiBUagotLTI5MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI5MCBUSm0KLShwcm9wb3J0aW9uYWwpIDQ5LjI1NTEgVGoKLS0yOTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI5MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTAgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI5MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTMwMCBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTI5MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjkwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjkwIFRKbQotKHNtYWxsZXIpIDI5LjMyOTkgVGoKLVsxIDAgMCAxIDcyIDUwLjg1MThdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNSkgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA5IDkKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEwNS41MTkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzEuNTkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ny4xMDkgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ3LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC03NDEuNTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRoYW4pIDE3LjE1NTYgVGoKLS0zNjIgVEptCi0oYSkgNC40MjMzOSBUagotLTM2MiBUSm0KLShibG9jay4pIDI0LjYyNzUgVGoKLS0xMjkzIFRKbQotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzYyIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZSwpIDMxLjgyMDUgVGoKLS0zOTAgVEptCi0oY29tcHJlc3NpbmcpIDUwLjM2MDkgVGoKLS0zNjIgVEptCi0oYSkgNC40MjMzOSBUagotLTM2MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zNjIgVEptCi0oMjAsMDAwKSAyNy4zOTcyIFRqCi0tMzYyIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0zNjIgVEptCi0obG9uZykgMTcuNzEzNSBUagotLTM2MiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzYyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM2MiBUSm0KLShcMDAzYWcpIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDQwNi41MjggNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDYuNTI4IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDYuNTI4IDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLTkpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDQxOC40ODMgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTguNDgzIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjIuMDkgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMzYyIFRKbQotKGNhdXNlKSAyMi4xMjY5IFRqCi0tMzYyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM2MiBUSm0KLShjb21wcmVzc29yKSA0NS45Mjc2IFRqCi0tMzYyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDY5OC4wODIgVGQKLShhbGxvY2F0ZSkgMzAuOTgzNyBUagotLTI3MSBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yNzIgVEptCi0oNzYwMGspIDI0LjkwNjUgVGoKLS0yNzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjc3IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI3MSBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMjcyIFRKbQotKHRvdWNoKSAyMi4xMzY5IFRqCi0tMjcxIFRKbQotKDQwMGspIDE5LjkyNTIgVGoKLS0yNzIgVEptCi0oKykgNS42MTg5MSBUagotLTI3MSBUSm0KLSgyMDAwMCkgMjQuOTA2NSBUagotLTI3MiBUSm0KLSgqKSA0Ljk4MTMgVGoKLS0yNzEgVEptCi0oOCkgNC45ODEzIFRqCi0tMjcyIFRKbQotKD0pIDUuNjE4OTEgVGoKLS0yNzEgVEptCi0oNTYwKSAxNC45NDM5IFRqCi0tMjcyIFRKbQotKGtieXRlcykgMjYuMDEyMyBUagotLTI3MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MiBUSm0KLShpdC4pIDguMDI5ODYgVGoKLS03NDggVEptCi0oU2ltaWxhcmx5KSAzNy4wOTA4IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjc3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MiBUSm0KLShkZWNvbXByZXNzb3IpIDU1LjMzMjMgVGoKLTcyIDY4Ni4xMjcgVGQKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKGFsbG9jYXRlKSAzMC45ODM3IFRqCi0tMjUwIFRKbQotKDM3MDBrKSAyNC45MDY1IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKHRvdWNoKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKDEwMGspIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0oKykgNS42MTg5MSBUagotLTI1MCBUSm0KLSgyMDAwMCkgMjQuOTA2NSBUagotLTI1MCBUSm0KLSgqKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oNCkgNC45ODEzIFRqCi0tMjUwIFRKbQotKD0pIDUuNjE4OTEgVGoKLS0yNTAgVEptCi0oMTgwKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGtieXRlcy4pIDI4LjUwMyBUagotWzEgMCAwIDEgNzIgNjgzLjk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NzQuMDA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEhlcmUpIDE5LjM1NzMgVGoKLS0yOTMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTQgVEptCi0oYSkgNC40MjMzOSBUagotLTI5MyBUSm0KLSh0YWJsZSkgMTkuMzY3MyBUagotLTI5NCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI5MyBUSm0KLShzdW1tYXJpc2VzKSA0Ny4wNDM0IFRqCi0tMjk0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MyBUSm0KLShtYXhpbXVtKSA0MC40MDgzIFRqCi0tMjk0IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI5MyBUSm0KLSh1c2FnZSkgMjIuNjg0OCBUagotLTI5NCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yOTMgVEptCi0oZGlmKSAxMS4wNjg0IFRqCi0yNSBUSm0KLShmZXJlbnQpIDIzLjIzMjggVGoKLS0yOTQgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yOTMgVEptCi0oc2l6ZXMuKSAyMS44NTc5IFRqCi0tODgxIFRKbQotKEFsc28pIDE4LjgxOTQgVGoKLS0yOTMgVEptCi0ocmVjb3JkZWQpIDM0Ljg0OTIgVGoKLS0yOTQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk0IFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi03MiA2NTIuMjU0IFRkCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI4OSBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjg5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI4OSBUSm0KLSgxNCkgOS45NjI2IFRqCi0tMjg5IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yOTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKENhbGcpIDE4LjgxOTQgVGoKLTUgVEptCi0oYXJ5KSAxMi43MjIyIFRqCi0tMjg5IFRKbQotKFQpIDYuMDg3MTUgVGoKLTcwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yODkgVEptCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0yODkgVEptCi0oQ29ycHVzKSAyOC43ODIgVGoKLS0yODkgVEptCi0odG90YWxsaW5nKSAzMy4yMTUzIFRqCi0tMjg5IFRKbQotKDMsMTQxLDYyMikgMzkuODUwNCBUagotLTI5MCBUSm0KLShieXRlcy4pIDIzLjUyMTcgVGoKLS04NTQgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI5MCBUSm0KLShjb2x1bW4pIDI5Ljg4NzggVGoKLS0yODkgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotNzIgNjQwLjI5OSBUZAotKHNvbWUpIDIxLjAzMSBUagotLTI1MyBUSm0KLShmZWVsKSAxNC45MzM5IFRqCi0tMjUzIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MyBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MyBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI1MyBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFyaWVzKSAxOC44MDk0IFRqCi0tMjUzIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTMgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTMgVEptCi0oc2l6ZS4pIDE3Ljk4MjUgVGoKLS02MzggVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0yNTMgVEptCi0oXDAwMmd1cmVzKSAyNy4xMTgyIFRqCi0tMjUzIFRKbQotKHRlbmQpIDE3LjE1NTYgVGoKLS0yNTQgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MyBUSm0KLSh1bmRlcnN0YXRlKSA0MC45NDYzIFRqCi0tMjUzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MyBUSm0KLShhZHYpIDE0LjM4NiBUagotMjUgVEptCi0oYW50YWdlKSAyNi4wMDI0IFRqCi0tMjUzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUzIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0tMjUzIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi03MiA2MjguMzQ0IFRkCi0oc2l6ZXMpIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0tMjUwIFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjUwIFRKbQotKHNpbmNlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShDb3JwdXMpIDI4Ljc4MiBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShkb21pbmF0ZWQpIDQyLjA2MjEgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShzbWFsbGVyKSAyOS4zMjk5IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi1bMSAwIDAgMSA3MiA2MjYuMTg3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTU2LjQxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxNTUuNDE3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTUxLjgzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTYxNi44MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMy45NTIgNjE2LjgyMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShDb21wcmVzcykgNDcuODIwNSBUagotLTEyNzggVEptCi0oRGVjb21wcmVzcykgNTkuNzc1NiBUagotLTEyNzggVEptCi0oRGVjb21wcmVzcykgNTkuNzc1NiBUagotLTEyNzggVEptCi0oQ29ycHVzKSAzNS44NjU0IFRqCi05MCA2MDQuODY3IFRkCi0oRmxhZykgMjMuOTEwMiBUagotLTIxMzAgVEptCi0odXNhZ2UpIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKHVzYWdlKSAyOS44ODc4IFRqCi0tMjk4MiBUSm0KLSgtcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh1c2FnZSkgMjkuODg3OCBUagotLTIxMzAgVEptCi0oU2l6ZSkgMjMuOTEwMiBUagotOTQuMjQ0IDU4MC45NTYgVGQKLSgtMSkgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oMTIwMGspIDI5Ljg4NzggVGoKLS0yOTgyIFRKbQotKDUwMGspIDIzLjkxMDIgVGoKLS0zODM0IFRKbQotKDM1MGspIDIzLjkxMDIgVGoKLS0yNTU2IFRKbQotKDkxNDcwNCkgMzUuODY1NCBUagotOTQuMjQ0IDU2OS4wMDEgVGQKLSgtMikgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oMjAwMGspIDI5Ljg4NzggVGoKLS0yOTgyIFRKbQotKDkwMGspIDIzLjkxMDIgVGoKLS0zODM0IFRKbQotKDYwMGspIDIzLjkxMDIgVGoKLS0yNTU2IFRKbQotKDg3NzcwMykgMzUuODY1NCBUagotOTQuMjQ0IDU1Ny4wNDYgVGQKLSgtMykgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oMjgwMGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDEzMDBrKSAyOS44ODc4IFRqCi0tMzgzNCBUSm0KLSg4NTBrKSAyMy45MTAyIFRqCi0tMjU1NiBUSm0KLSg4NjAzMzgpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1NDUuMDkxIFRkCi0oLTQpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDM2MDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSgxNzAwaykgMjkuODg3OCBUagotLTM0MDggVEptCi0oMTEwMGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDg0Njg5OSkgMzUuODY1NCBUagotOTQuMjQ0IDUzMy4xMzYgVGQKLSgtNSkgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oNDQwMGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDIxMDBrKSAyOS44ODc4IFRqCi0tMzQwOCBUSm0KLSgxMzUwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oODQ1MTYwKSAzNS44NjU0IFRqCi05NC4yNDQgNTIxLjE4MSBUZAotKC02KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSg1MjAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMjUwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDE2MDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4Mzg2MjYpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1MDkuMjI1IFRkCi0oLTcpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDYxMDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSgyOTAwaykgMjkuODg3OCBUagotLTM0MDggVEptCi0oMTg1MGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDgzNDA5NikgMzUuODY1NCBUagotOTQuMjQ0IDQ5Ny4yNyBUZAotKC04KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSg2ODAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMzMwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDIxMDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4Mjg2NDIpIDM1Ljg2NTQgVGoKLTk0LjI0NCA0ODUuMzE1IFRkCi0oLTkpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDc2MDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSgzNzAwaykgMjkuODg3OCBUagotLTM0MDggVEptCi0oMjM1MGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDgyODY0MikgMzUuODY1NCBUagotWzEgMCAwIDEgNzIgNDY5Ljc3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1OS44MTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzNS4wMjEgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDIuNi4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oUkVDTykgNTkuNjgyNCBUagotNTAgVEptCi0oVkVSSU5HKSA3OS4yMDQ3IFRqCi0tMjc4IFRKbQotKEQpIDE0LjkxNTQgVGoKLTQwIFRKbQotKEEpIDE0LjkxNTQgVGoKLTkwIFRKbQotKFQpIDEyLjYyMjMgVGoKLTkwIFRKbQotKEEpIDE0LjkxNTQgVGoKLS0yNzggVEptCi0oRlIpIDI3LjUzNzggVGoKLTIwIFRKbQotKE9NKSAzMy4yODA4IFRqCi0tMjc4IFRKbQotKEQpIDE0LjkxNTQgVGoKLTQwIFRKbQotKEFNQSkgNDcuMDM5NCBUagotNTAgVEptCi0oR0VEKSA0NC43NjcgVGoKLTcyIDQxMC4yMyBUZAotKEZJTEVTKSA1OC41NDYyIFRqCi1bMSAwIDAgMSA3MiA0MDkuOTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MDAuMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4OC4zMTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggMzg4LjMxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC0zODguMzEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDUuMTM4IDM4OC4zMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcHJlc3NlcykgNDUuOTI3NiBUagotLTMyNiBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMzI2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMjYgVEptCi0oYmxvY2tzLCkgMjguNTAzIFRqCi0tMzQ2IFRKbQotKHVzdWFsbHkpIDI4Ljc4MiBUagotLTMyNiBUSm0KLSg5MDBrYnl0ZXMpIDQwLjk1NjIgVGoKLS0zMjYgVEptCi0obG9uZy4pIDIwLjIwNDIgVGoKLS0xMDc3IFRKbQotKEVhY2gpIDE5LjkxNTIgVGoKLS0zMjYgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0zMjcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMjYgVEptCi0oaGFuZGxlZCkgMzEuNTQxNiBUagotLTMyNiBUSm0KLShpbmRlcGVuZGVudGx5KSA1Ni40NDgxIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTA3NyBUSm0KLShJZikgNi42MzUwOSBUagotLTMyNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzI2IFRKbQotKG1lZGlhKSAyNC4zNDg2IFRqCi0tMzI2IFRKbQotKG9yKSA4LjI5ODg1IFRqCi03MiAzNzYuMzU3IFRkCi0odHJhbnNtaXNzaW9uKSA1MC4zNzA5IFRqCi0tMzE5IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMzE4IFRKbQotKGNhdXNlcykgMjYuMDAyNCBUagotLTMxOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzE4IFRKbQotKG11bHRpLWJsb2NrKSA0Ni40OTU1IFRqCi1bMSAwIDAgMSAyMzQuNTE4IDM3Ni4zNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM0LjUxOCAtMzc2LjM1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM0LjUxOCAzNzYuMzU3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5iejIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDI1OC40MjkgMzc2LjM1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTguNDI5IC0zNzYuMzU3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjEuNjAzIDM3Ni4zNTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzE5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMTggVEptCi0oYmVjb21lKSAzMC45ODM3IFRqCi0tMzE5IFRKbQotKGRhbWFnZWQsKSAzOC40NTU2IFRqCi0tMzM2IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzE4IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTMxOSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMxOCBUSm0KLShwb3NzaWJsZSkgMzIuNjU3NCBUagotLTMxOSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzE4IFRKbQotKHJlY28pIDE3LjE0NTYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0zMTkgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxOSBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMzE4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgMzY0LjQwMiBUZAotKHVuZGFtYWdlZCkgNDUuOTI3NiBUagotLTI1MCBUSm0KLShibG9ja3MpIDI2LjAxMjMgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlLikgMTUuMjIyOSBUagotWzEgMCAwIDEgNzIgMzYyLjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzUyLjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzQyLjQ4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0zNTggVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTM1NyBUSm0KLShyZXByZXNlbnRhdGlvbikgNTYuNDM4MSBUagotLTM1OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTM1NyBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMzU4IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzU4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzU3IFRKbQotKGRlbGltaXRlZCkgMzcuNjM4NyBUagotLTM1OCBUSm0KLShieSkgOS45NjI2IFRqCi0tMzU3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNTggVEptCi0oNDgtYml0KSAyMy44MDA3IFRqCi0tMzU4IFRKbQotKHBhdHRlcm4sKSAzMC4xNTY4IFRqCi0tMzg0IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMzU4IFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0zNTcgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zNTggVEptCi0ocG9zc2libGUpIDMyLjY1NzQgVGoKLS0zNTcgVEptCi0odG8pIDcuNzUwOSBUagotLTM1OCBUSm0KLShcMDAybmQpIDE1LjUwMTggVGoKLS0zNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiAzMzAuNTI5IFRkCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yODYgVEptCi0oYm91bmRhcmllcykgNDMuNzE1OSBUagotLTI4NiBUSm0KLSh3aXQpIDEyLjczMjIgVGoKLTEgVEptCi0oaCkgNC45ODEzIFRqCi0tMjg2IFRKbQotKHJlYXNvbmFibGUpIDQyLjYwMDEgVGoKLS0yODYgVEptCi0oY2VydGFpbnR5KSAzNC44NTkxIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tODM1IFRKbQotKEVhY2gpIDE5LjkxNTIgVGoKLS0yODUgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yODYgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTI4NiBUSm0KLShjYXJyaWVzKSAyNi41NTAzIFRqCi0tMjg2IFRKbQotKGl0cykgOS40MTQ2NiBUagotLTI4NSBUSm0KLShvKSA0Ljk4MTMgVGoKLTI1IFRKbQotKHduKSAxMi4xNzQzIFRqCi0tMjg2IFRKbQotKDMyLWJpdCkgMjMuODAwNyBUagotLTI4NiBUSm0KLShDUkMsKSAyMi40MjU4IFRqCi0tMjg2IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjg1IFRKbQotKGRhbWFnZWQpIDM1Ljk2NSBUagotLTI4NiBUSm0KLShibG9ja3MpIDI2LjAxMjMgVGoKLS0yODYgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjg2IFRKbQotKGJlKSA5LjQwNDY5IFRqCi03MiAzMTguNTc0IFRkCi0oZGlzdGluZ3Vpc2hlZCkgNTMuMTQwNSBUagotLTI1MCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHVuZGFtYWdlZCkgNDUuOTI3NiBUagotLTI1MCBUSm0KLShvbmVzLikgMjAuNzUyMSBUagotWzEgMCAwIDEgNzIgMzE2LjQxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzA2LjQ1NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjk2LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMjk2LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0yOTYuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuNDQ4IDI5Ni42NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNzMgVEptCi0oYSkgNC40MjMzOSBUagotLTI3MiBUSm0KLShzaW1wbGUpIDI2LjU3MDMgVGoKLS0yNzMgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTI3MyBUSm0KLSh3aG9zZSkgMjUuNDU0NCBUagotLTI3MiBUSm0KLShwdXJwb3NlKSAzMS41NDE2IFRqCi0tMjczIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjczIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzIgVEptCi0oc2VhcmNoKSAyNS40NDQ1IFRqCi0tMjczIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3MyBUSm0KLShibG9ja3MpIDI2LjAxMjMgVGoKLS0yNzIgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgMzkyLjY1NSAyOTYuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Mi42NTUgLTI5Ni42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi42NTUgMjk2LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnoyKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0MTYuNTY2IDI5Ni42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE2LjU2NiAtMjk2LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjI4MiAyOTYuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjc4IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjczIFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMjczIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNzIgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNzMgVEptCi0ob3V0KSAxMi43MzIyIFRqCi03MiAyODQuNzAxIFRkCi0oaW50bykgMTUuNTAxOCBUagotLTI1NCBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNTUgVEptCi0obykgNC45ODEzIFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotWzEgMCAwIDEgMTIxLjQzIDI4NC43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIxLjQzIC0yODQuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjEuNDMgMjg0LjcwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnoyKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxNDUuMzQgMjg0LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDUuMzQgLTI4NC43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ny44NzUgMjg0LjcwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAybGUuKSAxNS4yMjI5IFRqCi0tNjQ3IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI1NSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTQgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI1NSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDI0MC4wMSAyODQuNzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC4wMSAtMjg0LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQwLjAxIDI4NC43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLS02MDAgVEptCi0oLXQpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDI4Ny44MzEgMjg0LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODcuODMxIC0yODQuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTAuMzY3IDI4NC43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1NSBUSm0KLSh0KSAyLjc2OTYgVGoKLTEgVEptCi0oZXN0KSAxMS4wNjg0IFRqCi0tMjU1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1NCBUSm0KLShpbnRlKSAxNC45NDM5IFRqCi0xNSBUSm0KLShncml0eSkgMTguODE5NCBUagotLTI1NSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTUgVEptCi0ocmVzdWx0aW5nKSAzNC44NjkxIFRqCi0tMjU0IFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjU2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjU1IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yNTQgVEptCi0odGhvc2UpIDIxLjAzMSBUagotNzIgMjcyLjc0NiBUZAotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLSh1bmRhbWFnZWQuKSA0OC40MTgyIFRqCi1bMSAwIDAgMSA3MiAyNzAuNTg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNjAuNjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNTAuODI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAycmVjb3ZlcikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTQzLjczMSAyNTAuODI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0My43MzEgLTI1MC44MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC4wOTkgMjUwLjgyOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tNjM5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS02MzkgVEptCi0oc2luZ2xlKSAyMy44MDA3IFRqCi0tNjM5IFRKbQotKGFyKSA3Ljc0MDk0IFRqCi0xOCBUSm0KLShndW1lbnQsKSAzMi4zNzg1IFRqCi0tNzM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTYzOSBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS02MzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS02MzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNjM5IFRKbQotKGRhbWFnZWQpIDM1Ljk2NSBUagotLTYzOSBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tNzM3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNjM5IFRKbQotKHdyaXRlcykgMjQuMzQ4NiBUagotLTYzOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNjM5IFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTYzOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTY0MCBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi1bMSAwIDAgMSA3MiAyMzguODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMzguODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzguODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHJlYzAwMDFmaWxlLmJ6MikgODkuNjYzNCBUagotWzEgMCAwIDEgMTYxLjY2NCAyMzguODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS42NjQgLTIzOC44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2MS42NjQgMjM4Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNjkuMDcyIDIzOC44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjA3MiAtMjM4Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjA3MiAyMzguODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHJlYzAwMDJmaWxlLmJ6MikgODkuNjYzNCBUagotWzEgMCAwIDEgMjU4LjczNiAyMzguODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1OC43MzYgLTIzOC44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OC43MzYgMjM4Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tNDk0IFRKbQotKGV0YywpIDE0LjEwNyBUagotLTQ5MyBUSm0KLShjb250YWluaW5nKSA0Mi4wNjIxIFRqCi0tNDQ1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ0NSBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dHJhY3RlZCkgMzIuMDg5NSBUagotLTQ0NSBUSm0KLShibG9ja3MuKSAyOC41MDMgVGoKLS0xNzg5IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTQ0NSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS00NDUgVEptCi0oXDAwMmxlbmFtZXMpIDM4LjE4NjYgVGoKLS00NDUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi03MiAyMjYuOTE4IFRkCi0oZGVzaWduZWQpIDM1LjQxNyBUagotLTMzNyBUSm0KLShzbykgOC44NTY3NSBUagotLTMzNyBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNyBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0zMzcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMzcgVEptCi0od2lsZGMpIDIyLjEzNjkgVGoKLTEgVEptCi0oYXJkcykgMTYuNTk3NyBUagotLTMzNyBUSm0KLShpbikgNy43NTA5IFRqCi0tMzM3IFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0zMzcgVEptCi0ocHJvY2Vzc2luZykgNDIuNjEgVGoKLS0zMzcgVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0zMzcgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzM3IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZSwpIDMxLjgyMDUgVGoKLVsxIDAgMCAxIDM5Ni41MzggMjI2LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTYuNTM4IC0yMjYuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTYuNTM4IDIyNi45MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLS02MDAgVEptCi0oLWRjKSAxNy45MzI3IFRqCi0tNjAwIFRKbQotKHJlYykgMTcuOTMyNyBUagotNDc0LjI0NyAyMjUuMTc0IFRkCi0oKikgNS45Nzc1NiBUagotNDgwLjIyNCAyMjYuOTE4IFRkCi0oZmlsZS5iejIpIDQ3LjgyMDUgVGoKLS02MDAgVEptCi0oPikgNS45Nzc1NiBUagotNzIgMjE0Ljk2MyBUZAotKHJlY292ZXJlZF9kYXRhKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxNTUuNjg2IDIxNC45NjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjY4NiAtMjE0Ljk2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjE3NyAyMTQuOTYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC0tKSA2LjYzNTA5IFRqCi0tMjUwIFRKbQotKGxpc3RzKSAxNi4wNTk3IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvcnJlY3QpIDI3LjY1NjIgVGoKLS0yNTAgVEptCi0ob3JkZXIpIDIxLjAyMTEgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDIxMy42NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwMy42OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTkzLjA0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMTkzLjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0xOTMuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDUuOTMgMTkzLjA0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yMjEgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMjAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjEgVEptCi0obW9zdCkgMTkuMzc3MyBUagotLTIyMSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yMjAgVEptCi0oZGVhbGluZykgMjkuMzI5OSBUagotLTIyMSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjIxIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLVsxIDAgMCAxIDMwNy4yMjkgMTkzLjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDcuMjI5IC0xOTMuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDcuMjI5IDE5My4wNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgMzMxLjE0IDE5My4wNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMxLjE0IC0xOTMuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzMuMzM4IDE5My4wNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLS0yMjcgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yMjAgVEptCi0odGhlc2UpIDIwLjQ3MzEgVGoKLS0yMjEgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTIyMSBUSm0KLShjb250YWluKSAyOS4zMjk5IFRqCi0tMjIwIFRKbQotKG1hbikgMTcuMTU1NiBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjIxIFRKbQotKGJsb2Nrcy4pIDI4LjUwMyBUagotLTYwMCBUSm0KLShJdCkgNi4wODcxNSBUagotLTIyMSBUSm0KLShpcykgNi42NDUwNSBUagotLTIyMSBUSm0KLShjbGVhcmx5KSAyNy4xMDgyIFRqCi03MiAxODEuMDkgVGQKLShmdXRpbGUpIDIxLjAzMSBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg5IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI4OSBUSm0KLShpdCkgNS41MzkyMSBUagotLTI4OSBUSm0KLShvbikgOS45NjI2IFRqCi0tMjg5IFRKbQotKGRhbWFnZWQpIDM1Ljk2NSBUagotLTI4OSBUSm0KLShzaW5nbGUtYmxvY2spIDQ5LjI1NTEgVGoKLS0yOTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotMSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjk5IFRKbQotKHNpbmNlKSAyMC40NzMxIFRqCi0tMjg5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTAgVEptCi0oZGFtYWdlZCkgMzUuOTY1IFRqCi0tMjg5IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjg5IFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTI4OSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4OSBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyZWQuKSAxOS42MzYzIFRqCi0tODU0IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjg5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5MCBUSm0KLSh3aXNoKSAxOC44MTk0IFRqCi0tMjg5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODkgVEptCi0obWluaW1pc2UpIDM3LjA5MDggVGoKLTcyIDE2OS4xMzUgVGQKLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzIwIFRKbQotKHBvdGVudGlhbCkgMzQuODY5MSBUagotLTMyMCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzE5IFRKbQotKGxvc3MpIDE1LjUwMTggVGoKLS0zMjAgVEptCi0odGhyb3VnaCkgMzAuOTkzNiBUagotLTMyMCBUSm0KLShtZWRpYSkgMjQuMzQ4NiBUagotLTMyMCBUSm0KLShvcikgOC4yOTg4NSBUagotLTMxOSBUSm0KLSh0cmFuc21pc3Npb24pIDUwLjM3MDkgVGoKLS0zMjAgVEptCi0oZXJyb3JzLCkgMjUuNzIzNCBUagotLTMzNyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zMjAgVEptCi0obWlnaHQpIDIzLjI1MjcgVGoKLS0zMjAgVEptCi0oY29uc2lkZXIpIDMzLjc1MzMgVGoKLS0zMjAgVEptCi0oY29tcHJlc3NpbmcpIDUwLjM2MDkgVGoKLS0zMTkgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTMyMCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzIwIFRKbQotKHNtYWxsZXIpIDI5LjMyOTkgVGoKLS0zMjAgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLTcyIDE1Ny4xNzkgVGQKLShzaXplLikgMTcuOTgyNSBUagotWzEgMCAwIDEgNzIgMTU3LjA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNDcuMTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMjIuNDI2IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjcuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFBFUkZPUk1BTkNFKSAxNjEuODE4IFRqCi0tMjc4IFRKbQotKE5PKSAzMC45ODc3IFRqCi00MCBUSm0KLShURVMpIDQwLjE4MDggVGoKLVsxIDAgMCAxIDcyIDEyMi4xNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTExMi4yMDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwMC41MDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMzA1IFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0zMDQgVEptCi0ocGhhc2UpIDIyLjY4NDggVGoKLS0zMDUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMDQgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zMDUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGF0aGVycykgMjMuNzkwNyBUagotLTMwNCBUSm0KLSh0b2dldGhlcikgMzIuNjQ3NCBUagotLTMwNSBUSm0KLShzaW1pbGFyKSAyNy42NzYxIFRqCi0tMzA0IFRKbQotKHN0cmluZ3MpIDI2LjU3MDMgVGoKLS0zMDUgVEptCi0oaW4pIDcuNzUwOSBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDUgVEptCi0oXDAwMmxlLikgMTUuMjIyOSBUagotLTk0NyBUSm0KLShCZWNhdXNlKSAzMy4xOTU0IFRqCi0tMzA1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA0IFRKbQotKHRoaXMsKSAxNi44ODY2IFRqCi0tMzE5IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zMDQgVEptCi0oY29udGFpbmluZykgNDIuMDYyMSBUagotLTMwNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeSkgMTIuNzIyMiBUagotNzIgODguNTUzNCBUZAotKGxvbmcpIDE3LjcxMzUgVGoKLS0yODYgVEptCi0ocnVucykgMTcuMTU1NiBUagotLTI4NSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4NiBUSm0KLShyZXBlYXRlZCkgMzMuNzQzMyBUagotLTI4NSBUSm0KLShzeW1ib2xzLCkgMzUuNzA2IFRqCi0tMjk1IFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI4NiBUSm0KLSgiYWFiYWFiYWFiYWFiKSA1OS4zNzcxIFRqCi0tMjg1IFRKbQotKC4uLiIpIDExLjUzNjcgVGoKLS01NzEgVEptCi0oXChyZXBlYXRlZCkgMzcuMDYwOSBUagotLTI4NiBUSm0KLShzZSkgOC4yOTg4NSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmFsKSAxNC45MzM5IFRqCi0tMjg2IFRKbQotKGh1bmRyZWQpIDMyLjY0NzQgVGoKLS0yODUgVEptCi0odGltZXNcKSkgMjQuOTA2NSBUagotLTI4NiBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yODYgVEptCi0oY29tKSAxNy4xNTU2IFRqCi0xIFRKbQotKHByZXNzKSAyMC40NzMxIFRqCi0tMjg2IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yODYgVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3bHkpIDE0Ljk0MzkgVGoKLTcyIDc2LjU5ODMgVGQKLSh0aGFuKSAxNy4xNTU2IFRqCi0tMzIyIFRKbQotKG5vcm1hbC4pIDMwLjcxNDcgVGoKLS01MjQgVEptCi0oVikgNy4xOTMgVGoKLTExMSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0zMjIgVEptCi0oMC45LjUpIDE5LjkyNTIgVGoKLS0zMjEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjIgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zMjEgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTMyMiBUSm0KLShiZXR0ZXIpIDIyLjY4NDggVGoKLS0zMjEgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTMyMiBUSm0KLShwcmUpIDEyLjcyMjIgVGoKLTI1IFRKbQotKHZpb3VzKSAyMS41ODkgVGoKLS0zMjEgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0zMjIgVEptCi0oaW4pIDcuNzUwOSBUagotLTMyMiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0zMjEgVEptCi0ocmVzcGVjdC4pIDMwLjcwNDcgVGoKLS0xMDUwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTMyMSBUSm0KLShyYXRpbykgMTguMjYxNCBUagotLTMyMiBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi1bMSAwIDAgMSA3MiA1MC44NTE4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDYpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTAgMTAKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEwNS41MTkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzEuNTkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ny4xMDkgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ3LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtNTQwIC03NDEuNTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0LWNhc2UpIDM1LjQwNzEgVGoKLS0yODkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmFnZS1jYXNlKSA0Mi4wMzIyIFRqCi0tMjg5IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjkwIFRKbQotKHRpbWUpIDE3LjcxMzUgVGoKLS0yODkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTAgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGdpb24pIDE3LjcxMzUgVGoKLS0yODkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODkgVEptCi0oMTA6MS4pIDIwLjIwNDIgVGoKLS04NTcgVEptCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yOTAgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91cykgMjEuNTg5IFRqCi0tMjg5IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucywpIDMwLjcxNDcgVGoKLS0yOTkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjkwIFRKbQotKFwwMDJndXJlKSAyMy4yNDI3IFRqCi0tMjg5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI5MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi03MiA2OTguMDgyIFRkCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKDEwMDoxLikgMjUuMTg1NSBUagotLTYyMCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDE4Ni4wMDIgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODYuMDAyIC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODYuMDAyIDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXZ2dnYpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIxNS44ODkgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTUuODg5IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTguMzggNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShvcHRpb24pIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShtb25pdG9yKSAzMS41NTE2IFRqCi0tMjUwIFRKbQotKHByb2dyZXNzKSAzMy43NTMzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZ3JlYXQpIDE5LjkxNTIgVGoKLS0yNTAgVEptCi0oZGV0YWlsLCkgMjQuNjI3NSBUagotLTI1MCBUSm0KLShpZikgNi4wODcxNSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudC4pIDE0LjY2NDkgVGoKLVsxIDAgMCAxIDcyIDY5NS45MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4NS45NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRGVjb21wcmVzc2lvbikgNjEuOTc3MyBUagotLTI1MCBUSm0KLShzcGVlZCkgMjIuNjg0OCBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLSh1bmFmKSAxNy43MDM1IFRqCi0yNSBUSm0KLShmZWN0ZWQpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShwaGVub21lbmEuKSA0OC40MTgyIFRqCi1bMSAwIDAgMSA3MiA2NzQuMDA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTQuMjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDY1NC4yNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtNjU0LjI0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0Ljg2MyA2NTQuMjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVzdWFsbHkpIDI4Ljc4MiBUagotLTI5OSBUSm0KLShhbGxvY2F0ZXMpIDM0Ljg1OTEgVGoKLS0yOTggVEptCi0oc2UpIDguMjk4ODUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJhbCkgMTQuOTMzOSBUagotLTI5OSBUSm0KLShtZSkgMTIuMTc0MyBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFieXRlcykgMjUuNDU0NCBUagotLTI5OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5OSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yOTkgVEptCi0odG8pIDcuNzUwOSBUagotLTI5OCBUSm0KLShvcGVyYXRlKSAyOS4zMTk5IFRqCi0tMjk5IFRKbQotKGluLCkgMTAuMjQxNiBUagotLTMxMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5OCBUSm0KLSh0aGVuKSAxNy4xNTU2IFRqCi0tMjk5IFRKbQotKGNoYXIpIDE3LjE0NTYgVGoKLTE4IFRKbQotKGdlcykgMTMuMjgwMSBUagotLTI5OCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI5OSBUSm0KLShvKSA0Ljk4MTMgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yOTkgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yOTggVEptCi0oaW4pIDcuNzUwOSBUagotLTI5OSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk4IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpcmx5KSAxOC4yNjE0IFRqCi0tMjk5IFRKbQotKHJhbmRvbSkgMzAuNDM1NyBUagotNzIgNjQyLjI5MSBUZAotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzaGlvbi4pIDI4LjUwMyBUagotLTc0MyBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjcwIFRKbQotKG1lYW5zKSAyNS40NTQ0IFRqCi0tMjcxIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNzAgVEptCi0ocGVyZm9ybWFuY2UsKSA1Mi44MzE3IFRqCi0tMjc2IFRKbQotKGJvdGgpIDE3LjcxMzUgVGoKLS0yNzAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjcxIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMjcwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjcxIFRKbQotKGRlY29tcHJlc3NpbmcsKSA2Mi4yNTYzIFRqCi0tMjc1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjcxIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VseSkgMTcuMTU1NiBUagotLTI3MCBUSm0KLShkZXRlcm1pbmVkKSA0NC44MjE3IFRqCi0tMjcxIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcxIFRKbQotKHNwZWVkKSAyMi42ODQ4IFRqCi03MiA2MzAuMzM2IFRkCi0oYXQpIDcuMTkzIFRqCi0tMjk0IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjk0IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yOTQgVEptCi0obWFjaGluZSkgMzMuNzUzMyBUagotLTI5NSBUSm0KLShjYSkgOC44NDY3OSBUagotMSBUSm0KLShuKSA0Ljk4MTMgVGoKLS0yOTUgVEptCi0oc2VydmljZSkgMjguMjE0MSBUagotLTI5NCBUSm0KLShjYWNoZSkgMjIuNjc0OSBUagotLTI5NCBUSm0KLShtaXNzZXMuKSAyOS4wNjA5IFRqCi0tNDQyIFRKbQotKEJlY2F1c2UpIDMzLjE5NTQgVGoKLS0yOTQgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTQgVEptCi0odGhpcywpIDE2Ljg4NjYgVGoKLS0zMDYgVEptCi0oc21hbGwpIDIxLjU4OSBUagotLTI5NCBUSm0KLShjaGFuZ2VzKSAzMi4wODk1IFRqCi0tMjk0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk0IFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yOTQgVEptCi0odG8pIDcuNzUwOSBUagotLTI5NCBUSm0KLShyZWR1Y2UpIDI2LjU1MDMgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk1IFRKbQotKG1pc3MpIDE4LjI3MTQgVGoKLS0yOTQgVEptCi0ocmF0ZSkgMTQuOTMzOSBUagotNzIgNjE4LjM4MSBUZAotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTMgVEptCi0oYmVlbikgMTguODA5NCBUagotLTI1MyBUSm0KLShvYnNlcnYpIDI2LjU2MDMgVGoKLTE1IFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjUzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTMgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUzIFRKbQotKGRpc3Byb3BvcnRpb25hdGVseSkgNzMuMDU1NyBUagotLTI1MyBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlKSA5LjQwNDY5IFRqCi0tMjUzIFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLS0yNTMgVEptCi0oaW1wcm8pIDIzLjgwMDcgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW1lbnRzLikgMzAuNzE0NyBUagotLTYzOSBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjUzIFRKbQotKGltYWdpbmUpIDMyLjA5OTUgVGoKLVsxIDAgMCAxIDQzOC45MDkgNjE4LjM4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguOTA5IC02MTguMzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzguOTA5IDYxOC4zODEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ2OC43OTYgNjE4LjM4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjguNzk2IC02MTguMzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzEuMzE4IDYxOC4zODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MyBUSm0KLShwZXJmb3JtKSAzMi4wODk1IFRqCi0tMjUzIFRKbQotKGJlc3QpIDE2LjA0OTcgVGoKLTcyIDYwNi40MjYgVGQKLShvbikgOS45NjI2IFRqCi0tMjUwIFRKbQotKG1hY2hpbmVzKSAzNy42Mjg3IFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yNTAgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShjYWNoZXMuKSAyOS4wNDEgVGoKLVsxIDAgMCAxIDcyIDYwNC4yNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU5NC4zMDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3MS42NzMgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDIuOC4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oQ0EpIDI5LjgzMDkgVGoKLTgwIFRKbQotKFZFQSkgNDIuNDczOSBUagotOTAgVEptCi0oVFMpIDI2LjQwMTYgVGoKLVsxIDAgMCAxIDcyIDU3MS40MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2MS40NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0OS43NTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSS9PKSAxMy4yODAxIFRqCi0tMjY4IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjY3IFRKbQotKG1lc3NhZ2VzKSAzNy42Mjg3IFRqCi0tMjY4IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI2OCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNjggVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNjcgVEptCi0oaGVscGZ1bCkgMjguMjI0IFRqCi0tMjY4IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjY3IFRKbQotKGNvdWxkKSAyMi4xMzY5IFRqCi0tMjY4IFRKbQotKGJlLikgMTEuODk1MyBUagotWzEgMCAwIDEgMjkzLjMxMyA1NDkuNzU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5My4zMTMgLTU0OS43NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5My4zMTMgNTQ5Ljc1NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMzIzLjIwMSA1NDkuNzU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMy4yMDEgLTU0OS43NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNS44NjggNTQ5Ljc1NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0cmllcykgMTcuMTU1NiBUagotLTI2OCBUSm0KLShoYXJkKSAxNy43MDM1IFRqCi0tMjY3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjggVEptCi0oZGV0ZWN0KSAyMy43OTA3IFRqCi0tMjY4IFRKbQotKEkvTykgMTMuMjgwMSBUagotLTI2OCBUSm0KLShlcnJvcnMpIDIzLjIzMjggVGoKLS0yNjcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjggVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGl0KSAxMC41MjA1IFRqCi0tMjY4IFRKbQotKGNsZWFubHkpIDI4Ljc3MiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI3MiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNjggVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA1MzcuOCBUZAotKGRldGFpbHMpIDI2LjAxMjMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvYmxlbSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShzb21ldGltZXMpIDQyLjYyIFRqCi0tMjUwIFRKbQotKHNlZW0pIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0ocmF0aGVyKSAyMy4yMzI4IFRqCi0tMjUwIFRKbQotKG1pc2xlYWRpbmcuKSA0Ni4yMTY1IFRqCi1bMSAwIDAgMSA3MiA1MzUuNjQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MjUuNjgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTUuODgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yODAgVEptCi0obWFudWFsKSAyOS4zMjk5IFRqCi0tMjc5IFRKbQotKHBhZ2UpIDE4LjgwOTQgVGoKLS0yODAgVEptCi0ocGVydGFpbnMpIDMxLjU0MTYgVGoKLS0yODAgVEptCi0odG8pIDcuNzUwOSBUagotLTI3OSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI4MCBUSm0KLSgxLjAuNSkgMTkuOTI1MiBUagotLTI4MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMjU2Ljg0IDUxNS44ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU2Ljg0IC01MTUuODgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTYuODQgNTE1Ljg4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjg2LjcyOCA1MTUuODgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Ni43MjggLTUxNS44ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Ni43MjggNTE1Ljg4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzk4IFRKbQotKENvbXByZXNzZWQpIDQ5LjI1NTEgVGoKLS0yODAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI3OSBUSm0KLShjcmVhdGVkKSAyOC43NjIgVGoKLS0yODAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI4MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNzkgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yODAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODAgVEptCi0oZW50aXJlbHkpIDMwLjQzNTcgVGoKLS0yNzkgVEptCi0oZm9ydykgMTguODA5NCBUagotMTAgVEptCi0oYXJkcykgMTYuNTk3NyBUagotNzIgNTAzLjkyNyBUZAotKGFuZCkgMTQuMzg2IFRqCi0tMjk0IFRKbQotKGJhY2t3KSAyNi4wMDI0IFRqCi0xMCBUSm0KLShhcmRzKSAxNi41OTc3IFRqCi0tMjkzIFRKbQotKGNvbXBhdGlibGUpIDQ0LjI3MzggVGoKLS0yOTQgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI5NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTMgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91cykgMjEuNTg5IFRqCi0tMjk0IFRKbQotKHB1YmxpYykgMjQuOTA2NSBUagotLTI5NCBUSm0KLShyZWxlYXNlcywpIDM0LjAyMjMgVGoKLS0zMDQgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0yOTQgVEptCi0oMC4xcGwyLCkgMjcuNjc2MSBUagotLTMwNSBUSm0KLSgwLjkuMCkgMTkuOTI1MiBUagotLTI5MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5NCBUSm0KLSgwLjkuNSwpIDIyLjQxNTkgVGoKLS0zMDUgVEptCi0oMS4wLjAsKSAyMi40MTU5IFRqCi0tMzA0IFRKbQotKDEuMC4xLCkgMjIuNDE1OSBUagotLTMwNSBUSm0KLSgxLjAuMikgMTkuOTI1MiBUagotLTI5NCBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDkxLjk3MiBUZAotKDEuMC4zLCkgMjIuNDE1OSBUagotLTI2MyBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNjAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI2MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjAgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdpbmcpIDE5LjkyNTIgVGoKLS0yNjAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGNlcHRpb246KSAzNy4wODA4IFRqCi0tMzMwIFRKbQotKDAuOS4wKSAxOS45MjUyIFRqCi0tMjYwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYwIFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjAgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjYwIFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotLTI2MCBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjYwIFRKbQotKG11bHRpcGxlKSAzMy4yMTUzIFRqCi0tMjYwIFRKbQotKGNvbmNhdGVuYXRlZCkgNTIuMDA0OCBUagotLTI2MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi03MiA0ODAuMDE3IFRkCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS0zMTAgVEptCi0oMC4xcGwyKSAyNS4xODU1IFRqCi0tMjUwIFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShkbykgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoaXM7KSAxNy4xNjU2IFRqCi0tMjUwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oc3RvcCkgMTYuNjA3NyBUagotLTI1MCBUSm0KLShhZnRlcikgMTguMjUxNSBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW5nKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKGp1c3QpIDE0LjM5NiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwMnJzdCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgNDc3Ljg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjcuODk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTguMDk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAycmVjb3ZlcikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTQzLjczMSA0NTguMDk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0My43MzEgLTQ1OC4wOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ni4xNzQgNDU4LjA5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMpIDI4LjIyNCBUagotLTI0NSBUSm0KLShwcmlvcikgMTkuMzY3MyBUagotLTI0NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQ1IFRKbQotKDEuMC4yKSAxOS45MjUyIFRqCi0tMjQ2IFRKbQotKHVzZWQpIDE4LjI2MTQgVGoKLS0yNDUgVEptCi0oMzItYml0KSAyMy44MDA3IFRqCi0tMjQ1IFRKbQotKGludGUpIDE0Ljk0MzkgVGoKLTE1IFRKbQotKGdlcnMpIDE2LjU5NzcgVGoKLS0yNDUgVEptCi0odG8pIDcuNzUwOSBUagotLTI0NSBUSm0KLShyZXByZXNlbnQpIDM2LjUxMjkgVGoKLS0yNDUgVEptCi0oYml0KSAxMC41MjA1IFRqCi0tMjQ2IFRKbQotKHBvc2l0aW9ucykgMzUuOTg0OSBUagotLTI0NSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjQ1IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNDUgVEptCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLS0yNDYgVEptCi0oc28pIDguODU2NzUgVGoKLS0yNDUgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNDUgVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLTcyIDQ0Ni4xNDQgVGQKLShub3QpIDEyLjczMjIgVGoKLS0zODQgVEptCi0oaGFuZGxlKSAyNi41NjAzIFRqCi0tMzgzIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zODQgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTM4MyBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMzg0IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0zODMgVEptCi0oNTEyKSAxNC45NDM5IFRqCi0tMzg0IFRKbQotKG1lKSAxMi4xNzQzIFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYWJ5dGVzKSAyNS40NTQ0IFRqCi0tMzgzIFRKbQotKGxvbmcuKSAyMC4yMDQyIFRqCi0tMTQyMSBUSm0KLShWKSA3LjE5MyBUagotMTExIFRKbQotKGVyc2lvbnMpIDI4LjIyNCBUagotLTM4NCBUSm0KLSgxLjAuMikgMTkuOTI1MiBUagotLTM4MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM4NCBUSm0KLShhYm8pIDE0LjM4NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzg0IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTM4MyBUSm0KLSg2NC1iaXQpIDIzLjgwMDcgVGoKLS0zODQgVEptCi0oaW50cykgMTQuMzk2IFRqCi0tMzgzIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zODQgVEptCi0oc29tZSkgMjEuMDMxIFRqCi03MiA0MzQuMTg5IFRkCi0ocGxhdGZvcm1zKSAzOC4xODY2IFRqCi0tMjQ1IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjQ2IFRKbQotKHN1cHBvcnQpIDI5Ljg4NzggVGoKLS0yNDUgVEptCi0odGhlbSkgMTkuOTI1MiBUagotLTI0NiBUSm0KLShcKEdOVSkgMjQuODk2NSBUagotLTI0NSBUSm0KLShzdXBwb3J0ZWQpIDM5LjI5MjUgVGoKLS0yNDUgVEptCi0odGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZXRzLCkgMTguNTQwNCBUagotLTI0NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI0NSBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3c1wpLikgMTYuODc2NiBUagotLTMwOSBUSm0KLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvKSA0Ljk4MTMgVGoKLS0yNDUgVEptCi0oZXN0YWJsaXNoKSAzNC44NjkxIFRqCi0tMjQ1IFRKbQotKHdoZXRoZXIpIDMyLjA4OTUgVGoKLS0yNDYgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNDUgVEptCi0obm90KSAxMi43MzIyIFRqCi1bMSAwIDAgMSA0NjguMjY5IDQzNC4xODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4LjI2OSAtNDM0LjE4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY4LjI2OSA0MzQuMTg5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAycmVjb3ZlcikgNzEuNzMwNyBUagotWzEgMCAwIDEgNTQwIDQzNC4xODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC00MzQuMTg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjIuMjMzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1NSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVpbHQpIDEzLjI5MDEgVGoKLS0yNTUgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1NSBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjU1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTUgVEptCi0obGltaXRhdGlvbiwpIDQxLjI0NTIgVGoKLS0yNTYgVEptCi0ocnVuKSAxMy4yODAxIFRqCi0tMjU1IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjU1IFRKbQotKHdpdGhvdXQpIDMwLjQ0NTcgVGoKLS0yNTUgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMuKSAzNi4yNTM5IFRqCi0tMzI1IFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjU1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTYgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbnQpIDEyLjE3NDMgVGoKLS0yNTUgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjU1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1NSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVpbGQpIDE1LjUwMTggVGoKLS0yNTUgVEptCi0oeW91cnNlbGYpIDMyLjY0NzQgVGoKLS0yNTUgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTUgVEptCi0odW5saW1pdGVkKSAzOC4xOTY2IFRqCi0tMjU1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjU1IFRKbQotKGlmKSA2LjA4NzE1IFRqCi03MiA0MTAuMjc4IFRkCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1MCBUSm0KLShyZWNvbXBpbGUpIDM5Ljg0MDQgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgMTc2LjMxOCA0MTAuMjc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni4zMTggLTQxMC4yNzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni4zMTggNDEwLjI3OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShNYXliZVVJbnQ2NCkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjQyLjA3MSA0MTAuMjc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0Mi4wNzEgLTQxMC4yNzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0NC41NjIgNDEwLjI3OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzZXQpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLSh1bnNpZ25lZCkgMzUuOTc0OSBUagotLTI1MCBUSm0KLSg2NC1iaXQpIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0oaW50ZSkgMTQuOTQzOSBUagotMTUgVEptCi0oZ2VyKSAxMi43MjIyIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0MDguMTIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTguMTU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzUuNTI1IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjkuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKEEpIDE0LjkxNTQgVGoKLTUwIFRKbQotKFVUSE9SKSA3My40NDEgVGoKLVsxIDAgMCAxIDcyIDM3NS4yNjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM2NS4zMDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1My42MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSnVsaWFuKSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKFNlKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmQsKSAxNS4yMTI5IFRqCi1bMSAwIDAgMSAxMzIuODAxIDM1My42MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMyLjgwMSAtMzUzLjYwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMyLjgwMSAzNTMuNjA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGpzZXdhcmRAYnppcC5vcmcpIDk1LjY0MSBUagotWzEgMCAwIDEgMjI4LjQ0MyAzNTMuNjA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ni40NDMgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzQyLjExMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzMxLjY5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI5OSBUSm0KLShpZGVhcykgMjAuNDczMSBUagotLTMwMCBUSm0KLShlbWJvZGllZCkgMzkuMjkyNSBUagotLTI5OSBUSm0KLShpbikgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjYuOTQyIDMzMS42OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjYuOTQyIC0zMzEuNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni45NDIgMzMxLjY5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxOTYuODMgMzMxLjY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Ni44MyAtMzMxLjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTkuODEzIDMzMS42OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0yOTkgVEptCi0oZHVlKSAxNC4zODYgVGoKLS0zMDAgVEptCi0odG8pIDcuNzUwOSBUagotLTI5OSBUSm0KLShcKGF0KSAxMC41MTA1IFRqCi0tMzAwIFRKbQotKGxlYXN0XCkpIDIxLjU3OSBUagotLTI5OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDAgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdpbmcpIDE5LjkyNTIgVGoKLS0yOTkgVEptCi0ocGVvcGxlOikgMjkuMzI5OSBUagotLTQwOSBUSm0KLShNaWNoYWVsKSAzMi42NDc0IFRqCi0tMzAwIFRKbQotKEJ1cnJvKSAyMy4yNDI3IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTI5OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5OSBUSm0KLShEYSkgMTEuNjE2NCBUagotMjAgVEptCi0odmlkKSAxMi43MzIyIFRqCi0tMzAwIFRKbQotKFdoZWVsZXIpIDMzLjc0MzMgVGoKLS0yOTkgVEptCi0oXChmb3IpIDE0LjkzMzkgVGoKLTcyIDMxOS43MzUgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTIgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0zMTMgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTMxMiBUSm0KLSh0cmFuc2Zvcm1hdGlvblwpLCkgNjQuNDY4IFRqCi0tMzI4IFRKbQotKERhKSAxMS42MTY0IFRqCi0yMCBUSm0KLSh2aWQpIDEyLjczMjIgVGoKLS0zMTIgVEptCi0oV2hlZWxlcikgMzMuNzQzMyBUagotLTMxMyBUSm0KLShcKGFnKSAxMi43MjIyIFRqCi01IFRKbQotKGFpbiwpIDE0LjY2NDkgVGoKLS0zMjcgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzEzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxMiBUSm0KLShIdWYpIDE1LjQ5MTggVGoKLTI1IFRKbQotKGZtYW4pIDIwLjQ3MzEgVGoKLS0zMTIgVEptCi0oY29kZXJcKSwpIDI3LjkzNTEgVGoKLS0zMjggVEptCi0oUGV0ZXIpIDIwLjQ3MzEgVGoKLS0zMTMgVEptCi0oRmVud2ljaykgMzQuMzExMiBUagotLTMxMiBUSm0KLShcKGZvcikgMTQuOTMzOSBUagotLTMxMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTMgVEptCi0oc3RydWN0dXJlZCkgMzkuODQwNCBUagotNzIgMzA3Ljc4IFRkCi0oY29kaW5nKSAyNy4xMTgyIFRqCi0tMzI1IFRKbQotKG1vZGVsKSAyNC45MDY1IFRqCi0tMzI2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzI2IFRKbQotKG9yaWdpbmFsKSAzMC45OTM2IFRqCi1bMSAwIDAgMSAxOTEuMTU2IDMwNy43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkxLjE1NiAtMzA3Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkxLjE1NiAzMDcuNzc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXApIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDIxNS4wNjcgMzA3Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTUuMDY3IC0zMDcuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTUuMDY3IDMwNy43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTM0NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMyNiBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTMyNSBUSm0KLShyZVwwMDJuZW1lbnRzXCksKSA1Mi4yOTM3IFRqCi0tMzQ1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzI1IFRKbQotKEFsaXN0YWlyKSAyOS44ODc4IFRqCi0tMzI2IFRKbQotKE1vZikgMTcuMTU1NiBUagotMjUgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXQsKSA5LjY4MzY1IFRqCi0tMzQ0IFRKbQotKFJhZGZvcmQpIDMyLjY0NzQgVGoKLS0zMjUgVEptCi0oTmVhbCkgMTguODA5NCBUagotLTMyNiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMyNSBUSm0KLShJYW4pIDEyLjcyMjIgVGoKLS0zMjYgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaXR0ZW4pIDE3LjcxMzUgVGoKLS0zMjUgVEptCi0oXChmb3IpIDE0LjkzMzkgVGoKLTcyIDI5NS44MjQgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzcgVEptCi0oYXJpdGhtZXRpYykgNDAuMzk4MyBUagotLTI3NyBUSm0KLShjb2RlcikgMjIuMTI2OSBUagotLTI3NyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjc3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NyBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotWzEgMCAwIDEgMjE0LjE3MSAyOTUuODI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNC4xNzEgLTI5NS44MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNC4xNzEgMjk1LjgyNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAyMzguMDgyIDI5NS44MjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM4LjA4MiAtMjk1LjgyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM4LjA4MiAyOTUuODI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLikgNS44MDgyIFRqCi0tNzgyIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNzcgVEptCi0oYW0pIDEyLjE3NDMgVGoKLS0yNzYgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTI3NyBUSm0KLShpbmRlYnRlZCkgMzQuMzExMiBUagotLTI3NyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNzcgVEptCi0odGhlaXIpIDE4LjI2MTQgVGoKLS0yNzcgVEptCi0oaGVscCwpIDE5LjY0NjIgVGoKLS0yODQgVEptCi0oc3VwcG9ydCkgMjkuODg3OCBUagotLTI3NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3NyBUSm0KLShhZHZpY2UuKSAyOC40OTMgVGoKLS03ODEgVEptCi0oU2VlKSAxNC4zODYgVGoKLS0yNzcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc3IFRKbQotKG1hbnVhbCkgMjkuMzI5OSBUagotNzIgMjgzLjg2OSBUZAotKGluKSA3Ljc1MDkgVGoKLS0zMzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzMwIFRKbQotKHNvdXJjZSkgMjYuMDAyNCBUagotLTMzMCBUSm0KLShkaXN0cmliKSAyNS40NjQ0IFRqCi0yMCBUSm0KLSh1dGlvbikgMjAuNDgzMSBUagotLTMzMCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMjkgVEptCi0ocG9pbnRlcnMpIDMyLjA5OTUgVGoKLS0zMzAgVEptCi0odG8pIDcuNzUwOSBUagotLTMzMCBUSm0KLShzb3VyY2VzKSAyOS44Nzc4IFRqCi0tMzMwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzMwIFRKbQotKGRvY3VtZW50YXRpb24uKSA2MS43MDgzIFRqCi0tMTA5OSBUSm0KLShDaHJpc3RpYW4pIDM2LjUzMjkgVGoKLS0zMzAgVEptCi0odikgNC45ODEzIFRqCi0yMCBUSm0KLShvbikgOS45NjI2IFRqCi0tMzMwIFRKbQotKFJvcXVlcykgMjkuODg3OCBUagotLTMzMCBUSm0KLShlbmNvdXJhZ2VkKSA0NS45MTc2IFRqCi0tMzMwIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMzMwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMzAgVEptCi0obG9vaykgMTcuNzEzNSBUagotNzIgMjcxLjkxNCBUZAotKGZvcikgMTEuNjE2NCBUagotLTI3MSBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhc3RlcikgMTguODA5NCBUagotLTI3MSBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjcxIFRKbQotKGFsZ29yaXRobXMsKSA0NS4xMTA3IFRqCi0tMjc2IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjcyIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjcxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzEgVEptCi0oc3BlZWQpIDIyLjY4NDggVGoKLS0yNzEgVEptCi0odXApIDkuOTYyNiBUagotLTI3MSBUSm0KLShjb21wcmVzc2lvbi4pIDUyLjg1MTYgVGoKLS03NDYgVEptCi0oQmVsYSkgMTguMjYxNCBUagotLTI3MSBUSm0KLShMdWJraW4pIDI4Ljc4MiBUagotLTI3MSBUSm0KLShlbmNvdXJhZ2VkKSA0NS45MTc2IFRqCi0tMjcxIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMjcyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzEgVEptCi0oaW1wcm8pIDIzLjgwMDcgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzEgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yc3QtY2FzZSkgMzUuNDA3MSBUagotNzIgMjU5Ljk1OSBUZAotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMzQwIFRKbQotKHBlcmZvcm1hbmNlLikgNTIuODMxNyBUagotLTU4MCBUSm0KLShEb25uYSkgMjYuNTYwMyBUagotLTMzOSBUSm0KLShSb2JpbnNvbikgMzguMTk2NiBUagotLTM0MCBUSm0KLShYTUxpc2VkKSAzOC4xODY2IFRqCi0tMzQwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MCBUSm0KLShkb2N1bWVudGF0aW9uLikgNjEuNzA4MyBUagotLTU4MCBUSm0KLShNYW4pIDE4LjI2MTQgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTM0MCBUSm0KLShwZW9wbGUpIDI2LjU2MDMgVGoKLS0zNDAgVEptCi0oc2VudCkgMTYuMDQ5NyBUagotLTMzOSBUSm0KLShwYXRjaGVzLCkgMzIuMzY4NSBUagotLTM2MyBUSm0KLShoZWxwZWQpIDI2LjU2MDMgVGoKLS0zNDAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotNzIgMjQ4LjAwNCBUZAotKHBvcnRhYmlsaXR5KSA0MS41MTQyIFRqCi0tMjUwIFRKbQotKHByb2JsZW1zLCkgMzkuNTcxNCBUagotLTI1MCBUSm0KLShsZW50KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG1hY2hpbmVzLCkgNDAuMTE5NCBUagotLTI1MCBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGFkdmljZSkgMjYuMDAyNCBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh3ZXJlKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKGdlbmVyYWxseSkgMzcuMDcwOCBUagotLTI1MCBUSm0KLShoZWxwZnVsLikgMzAuNzE0NyBUagotWzEgMCAwIDEgNzIgMjQ1Ljg0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTE5NC45OTVdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNTg1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNDg1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxMSAxMQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNC4zODM2IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MS42NDMgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDEuNjQzIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTE1LjAzNjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzAxLjkxNiBUZAotL0YxMjJfMCAyNC43OTAyIFRmCi0oMy4pIDIwLjY3NSBUagotLTU1NiBUSm0KLShQcikgMjYuMTc4NSBUagotMjAgVEptCi0ob2dyYW1taW5nKSAxMzQuOTgzIFRqCi0tMjc4IFRKbQotKHdpdGgpIDQ5LjU4MDQgVGoKLVsxIDAgMCAxIDMzMC40ODQgNzAxLjkxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzAuNDg0IC03MDEuOTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzAuNDg0IDcwMS45MTYgVGQKLS9GMzkyXzAgMjQuNzkwMiBUZgotKGxpYmJ6aXAyKSAxMTguOTkzIFRqCi1bMSAwIDAgMSA0NDkuNDc3IDcwMS45MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzc3LjQ3NyAtNS41MTU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQuOTQzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjcxLjQ5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjU2LjM1IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLShUKSAxMC41MTg2IFRqCi04MCBUSm0KLShhYikgMjAuMDkwNCBUagotMTAgVEptCi0obGUpIDE0LjM1NzYgVGoKLS0yNzggVEptCi0ob2YpIDE2LjI1MTMgVGoKLS0yNzggVEptCi0oQ29udGVudHMpIDc0LjU5NDMgVGoKLVsxIDAgMCAxIDcyIDY0Ny41MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS43NDAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MzUuNzg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MzUuNzg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0ob3AtbGUpIDIwLjQ3MzEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHN0cnVjdHVyZSkgMzQuODU5MSBUagotWzEgMCAwIDEgMTY0LjkyMSA2MzUuNzg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuOTAyIC02MzUuNzg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzkuOTk3IDYzNS43ODggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MzUuNzg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYzNS43ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjM1Ljc4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg4KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MzUuNzg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MjMuODMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMS4xLikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShMbykgMTEuMDY4NCBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oc3VtbWFyeSkgMzcuMDgwOCBUagotWzEgMCAwIDEgMTc3LjM3NCA2MjMuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODIuMzU1IC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTIuODY2IDYyMy44MzIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MjMuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYyMy44MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjIzLjgzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg5KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MjMuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTEuODc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTEuODc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMS4yLikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShIaWdoLWxlKSAzMC40MzU3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShzdW1tYXJ5KSAzNy4wODA4IFRqCi1bMSAwIDAgMSAxNzkuMjg3IDYxMS44NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4NC4yNjggLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5My44MjIgNjExLjg3NyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDYxMS44NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNjExLjg3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA2MTEuODc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDYxMS44NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU5OS45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5OS45MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4xLjMuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKFV0aWxpdHkpIDI2LjAyMjMgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKHN1bW1hcnkpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDIwMi42NjkgNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA3LjY1IC01OTkuOTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTYuNTgyIDU5OS45MjIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01OTkuOTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU5OS45MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOSkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTg3Ljk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTg3Ljk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjIuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKEVycm9yKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKGhhbmRsaW5nKSAzNC44NjkxIFRqCi1bMSAwIDAgMSAxNDguNDEzIDU4Ny45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1My4zOTQgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Mi42MTEgNTg3Ljk2NyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDU4Ny45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTg3Ljk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1ODcuOTY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NzYuMDEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NzYuMDEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oTG8pIDExLjA2ODQgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLVsxIDAgMCAxIDE2Ny41NzEgNTc2LjAxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTcyLjU1MiAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgxLjA0NSA1NzYuMDEyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1NzYuMDEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTU3Ni4wMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTc2LjAxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTc2LjAxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2NC4wNTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjEuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDU2NC4wNTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNTY0LjA1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA1NjQuMDU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgMjA1LjEwMSA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuMDgyIC01NjQuMDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTkuNzM2IDU2NC4wNTYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDU2NC4wNTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTY0LjA1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1NjQuMDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDExKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NTIuMTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4yLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA1NTIuMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTU1Mi4xMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNTUyLjEwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTgxLjE5IDU1Mi4xMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4Ni4xNzIgLTU1Mi4xMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NC40OTcgNTUyLjEwMSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDU1Mi4xMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDU1Mi4xMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0MC4xNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjMuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDU0MC4xNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNTQwLjE0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA1NDAuMTQ2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAxOTkuMTIzIDU0MC4xNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC4xMDUgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNC41MzMgNTQwLjE0NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDU0MC4xNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTQwLjE0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1NDAuMTQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MjguMTkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MjguMTkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy40LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA1MjguMTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTUyOC4xOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNTI4LjE5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotWzEgMCAwIDEgMjE3LjA1NiA1MjguMTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjIuMDM3IC01MjguMTkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzIuMzU1IDUyOC4xOTEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDUyOC4xOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTI4LjE5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1MjguMTkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1MjguMTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTYuMjM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTYuMjM2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy41LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA1MTYuMjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTUxNi4yMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNTE2LjIzNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE5My4xNDYgNTE2LjIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk4LjEyNyAtNTE2LjIzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA3LjExNiA1MTYuMjM2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1MTYuMjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTUxNi4yMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTE2LjIzNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNykgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTE2LjIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTA0LjI4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTA0LjI4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNTA0LjI4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC01MDQuMjgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDUwNC4yODEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMjExLjA3OCA1MDQuMjgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTYuMDYgLTUwNC4yODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC45MzggNTA0LjI4MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1MDQuMjgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTUwNC4yODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTA0LjI4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTA0LjI4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDkyLjMyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDkyLjMyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKEhpZ2gtbGUpIDMwLjQzNTcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLVsxIDAgMCAxIDE2OS40ODMgNDkyLjMyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc0LjQ2NSAtNDkyLjMyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg0LjIxNiA0OTIuMzI1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ5Mi4zMjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDkyLjMyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0OTIuMzI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE4KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0OTIuMzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODAuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ4MC4zNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuMS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDgwLjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQ4MC4zN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA0ODAuMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE4MS4xOSA0ODAuMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4Ni4xNzIgLTQ4MC4zN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk0LjQ5NyA0ODAuMzcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ4MC4zN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00ODAuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDgwLjM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0ODAuMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ2OC40MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ2OC40MTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjIuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQ2OC40MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDY4LjQxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA0NjguNDE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE1Ny4yOCA0NjguNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjIuMjYxIC00NjguNDE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzEuNDcyIDQ2OC40MTUgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDY4LjQxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NjguNDE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ2OC40MTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjApIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ2OC40MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDU2LjQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTYuNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjMuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQ1Ni40Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NTYuNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDU2LjQ2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDIxMS4wNzggNDU2LjQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTYuMDYgLTQ1Ni40Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI0LjkzOCA0NTYuNDYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDU2LjQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ1Ni40Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0NTYuNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ1Ni40Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC42NDUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDQuNTA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NDQuNTA1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC40LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NDQuNTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQ0NC41MDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDQ0LjUwNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE4Ny4xNjggNDQ0LjUwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjE0OSAtNDQ0LjUwNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAxLjkxNCA0NDQuNTA1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDQ0LjUwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NDQuNTA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ0NC41MDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ0NC41MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDMyLjU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzIuNTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjUuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQzMi41NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00MzIuNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDMyLjU1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgMTg3LjE2OCA0MzIuNTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi4xNDkgLTQzMi41NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAxLjkxNCA0MzIuNTUgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0MzIuNTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDMyLjU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQzMi41NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDMyLjU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MjAuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjAuNTk0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC42LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0MjAuNTk0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQyMC41OTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDIwLjU5NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMTYzLjI1OCA0MjAuNTk0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjguMjM5IC00MjAuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzYuNjc1IDQyMC41OTQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0MjAuNTk0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQyMC41OTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDIwLjU5NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMykgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDIwLjU5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC42NDUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MDguNjM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MDguNjM5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC43LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0MDguNjM5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQwOC42MzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDA4LjYzOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZUNsb3NlKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE5My4xNDYgNDA4LjYzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk4LjEyNyAtNDA4LjYzOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA3LjExNiA0MDguNjM5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0MDguNjM5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQwOC42MzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDA4LjYzOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMykgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDA4LjYzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC42NDUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTYuNjg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzOTYuNjg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC44LikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShIYW5kbGluZykgMzcuMDgwOCBUagotLTI1MCBUSm0KLShlbWJlZGRlZCkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oc3RyZWFtcykgMzAuNDM1NyBUagotWzEgMCAwIDEgMjc5LjU2IDM5Ni42ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4NC41NDEgLTM5Ni42ODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NC42MDEgMzk2LjY4NCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM5Ni42ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzk2LjY4NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzOTYuNjg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzOTYuNjg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zODQuNzI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODQuNzI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC45LikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShTdGFuZGFyZCkgMzUuNDE3IFRqCi0tMjUwIFRKbQotKFwwMDJsZS1yZWFkaW5nL3dyaXRpbmcpIDc3LjQ3OTEgVGoKLS0yNTAgVEptCi0oY29kZSkgMTguODA5NCBUagotWzEgMCAwIDEgMjM0LjE5IDM4NC43MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzOS4xNzIgLTM4NC43MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Ny41NjQgMzg0LjcyOSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzg0LjcyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zODQuNzI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM4NC43MjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjUpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM4NC43MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3Mi43NzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM3Mi43NzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShVdGlsaXR5KSAyNi4wMjIzIFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotWzEgMCAwIDEgMTU1LjYyNSAzNzIuNzc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjAuNjA3IC0zNzIuNzc0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzAuNjQ1IDM3Mi43NzQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzcyLjc3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zNzIuNzc0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM3Mi43NzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjYpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM3Mi43NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM2MC44MTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM2MC44MTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy41LjEuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDM2MC44MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzYwLjgxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzNjAuODE5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcykgMTQzLjQ2MSBUagotWzEgMCAwIDEgMjQwLjk2NiAzNjAuODE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDUuOTQ4IC0zNjAuODE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTUuMzggMzYwLjgxOSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM2MC44MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzYwLjgxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzNjAuODE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzNjAuODE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNDguODYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNDguODYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNS4yLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNDguODYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM0OC44NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzQ4Ljg2MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcykgMTU1LjQxNyBUagotWzEgMCAwIDEgMjUyLjkyMiAzNDguODYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTcuOTAzIC0zNDguODYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjcuOTk5IDM0OC44NjMgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNDguODYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM0OC44NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzQ4Ljg2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNykgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzQ4Ljg2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzM2LjkwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzM2LjkwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjYuKSAxNC45NDM5IFRqCi1bMSAwIDAgMSA5MC4wMzI0IDMzNi45MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAuMDMyNCAtMzM2LjkwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAuMDMyNCAzMzYuOTA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHpsaWIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDExMy45NDMgMzM2LjkwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuOTQzIC0zMzYuOTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuNDMzIDMzNi45MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcGF0aWJpbGl0eSkgNTMuMTQwNSBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDIwOS4xNDQgMzM2LjkwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE0LjEyNiAtMzM2LjkwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIzLjk3MSAzMzYuOTA4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMzNi45MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzM2LjkwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMzYuOTA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI4KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMzYuOTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjQuOTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMjQuOTUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oVXNpbmcpIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi1bMSAwIDAgMSAxNzcuMTk1IDMyNC45NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc3LjE5NSAtMzI0Ljk1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc3LjE5NSAzMjQuOTUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHN0ZGlvKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMDcuMDgzIDMyNC45NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA3LjA4MyAtMzI0Ljk1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA3LjA4MyAzMjQuOTUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC1mcmVlKSAxOC43OTk0IFRqCi0tMjUwIFRKbQotKGVuKSA5LjQwNDY5IFRqCi00MCBUSm0KLSh2aXJvbm1lbnQpIDQwLjk1NjIgVGoKLVsxIDAgMCAxIDI3OC4zMzUgMzI0Ljk1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgzLjMxNiAtMzI0Ljk1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkxLjc3NSAzMjQuOTUzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMyNC45NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzI0Ljk1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMjQuOTUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI4KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMjQuOTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMTIuOTk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTIuOTk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNy4xLikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShHZXR0aW5nKSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKHJpZCkgMTEuMDY4NCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTU0LjIzMSAzMTIuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NC4yMzEgLTMxMi45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NC4yMzEgMzEyLjk5OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzdGRpbykgMjkuODg3OCBUagotWzEgMCAwIDEgMTg0LjExOSAzMTIuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODkuMSAtMzEyLjk5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk4LjE3NSAzMTIuOTk4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMxMi45OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzEyLjk5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMTIuOTk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMTIuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMDEuMDQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMDEuMDQzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNy4yLikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShDcml0aWNhbCkgMjkuODg3OCBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotWzEgMCAwIDEgMTg2LjU5OSAzMDEuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTEuNTggLTMwMS4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS42MjkgMzAxLjA0MyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMwMS4wNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzAxLjA0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMDEuMDQzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMDEuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODkuMDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODkuMDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuOC4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oTWFraW5nKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaW5kbykgMTcuNzEzNSBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oRExMKSAxOS4zNjczIFRqCi1bMSAwIDAgMSAxODkuODI4IDI4OS4wODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5NC44MDkgLTI4OS4wODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMy4yNDMgMjg5LjA4OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDI4OS4wODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMjg5LjA4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAyODkuMDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAyODkuMDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNjcuMDA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNTcuMjA3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oY2hhcHRlcikgMjkuMzE5OSBUagotLTI1MCBUSm0KLShkZXNjcmliZXMpIDM3LjA3MDggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2dyYW1taW5nKSA1NC4yMzY0IFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMjgyLjQ0OCAyNTcuMjA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Mi40NDggLTI1Ny4yMDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Mi40NDggMjU3LjIwNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMzMwLjI2OSAyNTcuMjA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMC4yNjkgLTI1Ny4yMDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMC4yNjkgMjU3LjIwNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyNTUuMDVdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI0NS4wODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIzNS4yODkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNzMgVEptCi0oZ2VuZXJhbCkgMjkuMzE5OSBUagotLTI3MiBUSm0KLShiYWNrZ3JvdW5kKSA0Ny4wMzM0IFRqCi0tMjczIFRKbQotKGluZm9ybWF0aW9uLCkgNDkuNTM0IFRqCi0tMjc4IFRKbQotKHBhcnRpY3VsYXJseSkgNDUuOTI3NiBUagotLTI3MyBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotLTI3MyBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNzIgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjczIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjczIFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLS0yNzIgVEptCi0oYXNwZWN0cywpIDMxLjI2MjYgVGoKLS0yNzkgVEptCi0oeW91JykgMTguMjYxNCBUagotNTAgVEptCi0oZCkgNC45ODEzIFRqCi0tMjcyIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjczIFRKbQotKHdlbGwpIDE3LjE1NTYgVGoKLS0yNzMgVEptCi0oYWR2aXNlZCkgMzAuNDM1NyBUagotNzIgMjIzLjMzNCBUZAotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotWzEgMCAwIDEgMTAxLjg3OCAyMjMuMzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTEwMS44NzggLTIyMy4zMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwMS44NzggMjIzLjMzNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDE3MS42MzYgMjIzLjMzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xNzEuNjM2IC0yMjMuMzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzQuMTI2IDIyMy4zMzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzJdKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAxODUuNzQzIDIyMy4zMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg1Ljc0MyAtMjIzLjMzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg4LjIzMyAyMjMuMzM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHdlbGwuKSAxOS42NDYyIFRqCi1bMSAwIDAgMSA3MiAyMjEuMTc3XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMTEuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxODguNTgxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgzLjEuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFQpIDEyLjYyMjMgVGoKLTgwIFRKbQotKG9wLWxlKSA0OS4zNTMyIFRqCi0xNSBUSm0KLSh2ZWwpIDI4LjcxNTMgVGoKLS0yNzggVEptCi0oc3RydWN0dXJlKSA4OS41MzM5IFRqCi1bMSAwIDAgMSA3MiAxODQuMzA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNzQuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNjYuNjY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAxMTkuODIxIDE2Ni42NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5LjgyMSAtMTY2LjY2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIzLjYwOCAxNjYuNjY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzgwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zODAgVEptCi0oXDAwM2UpIDkuOTYyNiBUagotMTUgVEptCi0oeGlibGUpIDE5LjkyNTIgVGoKLS0zODEgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM4MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zODAgVEptCi0oY29tcHJlc3NpbmcpIDUwLjM2MDkgVGoKLS0zODAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zODAgVEptCi0oZGVjb21wcmVzc2luZykgNTkuNzY1NiBUagotLTM4MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzgxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0MDUuMjkxIDE2Ni42NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA1LjI5MSAtMTY2LjY2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA1LjI5MSAxNjYuNjY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0MzUuMTc4IDE2Ni42NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM1LjE3OCAtMTY2LjY2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM4Ljk2NiAxNjYuNjY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRhdGEpIDE2LjU5NzcgVGoKLS0zODAgVEptCi0oZm9ybWF0LikgMjkuMDUwOSBUagotLTE0MDEgVEptCi0oQWx0aG91Z2gpIDM3LjYzODcgVGoKLTcyIDE1NC43MDggVGQKLShwYWNrYWdlZCkgMzcuNjE4OCBUagotLTI4NSBUSm0KLShhcykgOC4yOTg4NSBUagotLTI4NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjg1IFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTI4NSBUSm0KLShlbnRpdHkpIDIyLjY5NDggVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yOTMgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yODUgVEptCi0oaGVscHMpIDIxLjAzMSBUagotLTI4NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg0IFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYXJkKSAxMi43MjIyIFRqCi0tMjg1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjg0IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjg1IFRKbQotKHRocmVlKSAxOS45MTUyIFRqCi0tMjg1IFRKbQotKHNlcGFyYXRlKSAzMi42Mzc1IFRqCi0tMjg0IFRKbQotKHBhcnRzOikgMjIuMTM2OSBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODUgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yODQgVEptCi0obGUpIDcuMTkzIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI4NSBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlLCkgMTUuNzYwOCBUagotLTI5MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODUgVEptCi0oaGlnaCkgMTcuNzEzNSBUagotNzIgMTQyLjc1MyBUZAotKGxlKSA3LjE5MyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSwpIDE1Ljc2MDggVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjUwIFRKbQotKHV0aWxpdHkpIDIzLjgxMDYgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zLikgMzkuNTcxNCBUagotWzEgMCAwIDEgNzIgMTQwLjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMwLjYzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTIwLjgzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0zNDkgVEptCi0oc3RydWN0dXJlKSAzNC44NTkxIFRqCi0tMzQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAxNDEuMDgyIDEyMC44MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQxLjA4MiAtMTIwLjgzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQxLjA4MiAxMjAuODM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAxODguOTAzIDEyMC44MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg4LjkwMyAtMTIwLjgzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg4LjkwMyAxMjAuODM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCcpIDMuMzE3NTUgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0zNDkgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZXMpIDE3LjE0NTYgVGoKLS0zNDkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNDkgVEptCi0oc2ltaWxhcikgMjcuNjc2MSBUagotLTM0OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzQ5IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDkgVEptCi0oSmVhbi1sb3VwKSAzOC43MzQ2IFRqCi0tMzQ5IFRKbQotKEdhaWxseScpIDI4LjIyNCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTM0OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM0OSBUSm0KLShNYXJrKSAyMS41NzkgVGoKLS0zNDkgVEptCi0oQWRsZXInKSAyNi4wMDI0IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzQ5IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhjZWxsZW50KSAzMS41NDE2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTIwLjgzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTYuMDkgLTEyMC44MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxNi4wOSAxMjAuODM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHpsaWIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDU0MCAxMjAuODM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMTIwLjgzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTA4Ljg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDEwNi43MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTk2Ljc2MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDg2Ljk2MjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsKSAxMi43MzIyIFRqCi0tMjQyIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHh0ZXJuYWxseSkgMzUuNDE3IFRqCi0tMjQyIFRKbQotKHZpc2libGUpIDI2LjU3MDMgVGoKLS0yNDEgVEptCi0oc3ltYm9scykgMzMuMjE1MyBUagotLTI0MiBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQyIFRKbQotKG5hbWVzKSAyNS40NTQ0IFRqCi0tMjQyIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLShnaW5uaW5nKSAzMC40NDU3IFRqCi1bMSAwIDAgMSAyODQuNjg3IDg2Ljk2MjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg0LjY4NyAtODYuOTYyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg0LjY4NyA4Ni45NjI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl8pIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDMwOC41OTcgODYuOTYyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDguNTk3IC04Ni45NjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDguNTk3IDg2Ljk2MjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTYxNSBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjQxIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjQyIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI0MiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjQyIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjQyIFRKbQotKDEuMC4pIDE0Ljk0MzkgVGoKLS02MTQgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjQyIFRKbQotKGludGVudGlvbikgMzUuNDI3IFRqCi0tMjQyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjQxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDIgVEptCi0obWluaW1pc2UpIDM3LjA5MDggVGoKLTcyIDc1LjAwNzMgVGQKLShwb2xsdXRpb24pIDM1Ljk4NDkgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG5hbWVzcGFjZXMpIDQ3LjU4MTQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShjbGllbnRzLikgMjguNTAzIFRqCi1bMSAwIDAgMSA3MiA3Mi44NTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjEuOTk4N10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNC4zODM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDMuMDYzMyAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5OC4yMjUgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTU0MS4yODggNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg4KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDQ1NS4xNjEgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTE1LjAzNjYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDEyIDEyCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0LjM4MzYgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ0LjQ2MiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIwLjk2IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk4LjQ0OSA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5OC40NDkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC40NDkgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ2LjI2OSA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG5lZWQpIDE4LjgwOTQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMjQwLjU2NyA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC41NjcgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0MC41NjcgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgjaW5jbHVkZSkgNDcuODIwNSBUagotLTYwMCBUSm0KLSg8YnpsaWIuaD4pIDUzLjc5OCBUagotWzEgMCAwIDEgMzQ4LjE2MyA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0OC4xNjMgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1MC42NTQgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbnRvKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oc291cmNlcy4pIDMyLjM2ODUgVGoKLVsxIDAgMCAxIDcyIDcwNy44OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjk3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc5LjQxNiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4xLjEuKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKExvKSAyMS4wMzcyIFRqCi0xNSBUSm0KLSh3LWxlKSAzMy40ODQgVGoKLTE1IFRKbQotKHZlbCkgMjMuOTI5NCBUagotLTI3OCBUSm0KLShzdW1tYXIpIDY2Ljk2NzkgVGoKLS0xMCBUSm0KLSh5KSA5LjU3MTc2IFRqCi1bMSAwIDAgMSA3MiA2NzUuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjUuODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1Ny40OTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTIxMiBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi0tMjEyIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZXMpIDIxLjAzMSBUagotLTIxMiBUSm0KLShzZXJ2aWNlcykgMzIuMDg5NSBUagotLTIxMiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yMTIgVEptCi0oY29tcHJlc3NpbmcpIDUwLjM2MDkgVGoKLS0yMTIgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMTIgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotMSBUSm0KLShpbmcpIDEyLjczMjIgVGoKLS0yMTIgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTIxMiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjEyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTU5NSBUSm0KLShUaGVyZScpIDI2LjU1MDMgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yMTIgVEptCi0obm8pIDkuOTYyNiBUagotLTIxMiBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpc2lvbikgMjQuMzU4NiBUagotLTIxMiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yMTIgVEptCi0oZGVhbGluZykgMjkuMzI5OSBUagotNzIgNjQ1LjU0MyBUZAotKHdpdGgpIDE3LjcxMzUgVGoKLS0yMTMgVEptCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLS0yMjAgVEptCi0oc3RyZWFtcykgMzAuNDM1NyBUagotLTIxMyBUSm0KLShvcikgOC4yOTg4NSBUagotLTIxMyBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjEzIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMjEzIFRKbQotKEkvTykgMTMuMjgwMSBUagotLTIxMyBUSm0KLShtZWNoYW5pc21zLCkgNTEuNzQ1NyBUagotLTIyMSBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yMTMgVEptCi0oc3RyYWlnaHQpIDI5Ljg4NzggVGoKLS0yMTMgVEptCi0obWVtb3J5LXRvLW1lbW9yeSkgODAuNzk2NyBUagotLTIxMyBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrLikgMTUuNzcwOCBUagotLTU5NSBUSm0KLShJbikgOC4yOTg4NSBUagotLTIxMyBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY3QsKSAxNC4xMDcgVGoKLS0yMjEgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjEzIFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yMTMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMTMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjEzIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTcyIDYzMy41ODggVGQKLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY29tcGlsZWQpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0od2l0aG91dCkgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShpbmNsdXNpb24pIDM2LjUzMjkgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDIyMi41MzQgNjMzLjU4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjIuNTM0IC02MzMuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjIuNTM0IDYzMy41ODggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8uaCkgNDEuODQyOSBUagotWzEgMCAwIDEgMjY0LjM3NyA2MzMuNTg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2NC4zNzcgLTYzMy41ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2NC4zNzcgNjMzLjU4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShoZWxwZnVsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGVtYmVkZGVkKSA0MC45NDYzIFRqCi0tMjUwIFRKbQotKGFwcGxpY2F0aW9ucy4pIDUwLjYzOTkgVGoKLVsxIDAgMCAxIDcyIDYzMS40MzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyMS40NjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxMS42NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0ocGFydCkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0obm8pIDkuOTYyNiBUagotLTI1MCBUSm0KLShnbG9iYWwpIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmlhYmxlcykgMzAuOTgzNyBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLSh0aGVyZWZvcmUpIDM1Ljk1NSBUagotLTI1MCBUSm0KLSh0aHJlYWQtc2FmZS4pIDQ2Ljc0NDUgVGoKLVsxIDAgMCAxIDcyIDYwOS41MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU5OS41NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4OS43NTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oU2l4KSAxMy4yOTAxIFRqCi0tODc1IFRKbQotKHJvdXRpbmVzKSAzMi4wOTk1IFRqCi0tODc2IFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTg3NSBUSm0KLSh1cCkgOS45NjI2IFRqCi0tODc2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTg3NSBUSm0KLShsbykgNy43NTA5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTg3NiBUSm0KLShsZSkgNy4xOTMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tODc1IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2U6KSAxNi4wMzk4IFRqCi1bMSAwIDAgMSAzMDguNzkxIDU4OS43NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA4Ljc5MSAtNTg5Ljc1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA4Ljc5MSA1ODkuNzUyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgNDE2LjM4NyA1ODkuNzUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxNi4zODcgLTU4OS43NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNi4zODcgNTg5Ljc1MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0MjkuMTU4IDU4OS43NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI5LjE1OCAtNTg5Ljc1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI5LjE1OCA1ODkuNzUyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSA1MTIuODQ0IDU4OS43NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTEyLjg0NCAtNTg5Ljc1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTEyLjg0NCA1ODkuNzUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0xMDMyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA3MiA1NzcuNzk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NzcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NzcuNzk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAxNzMuNjE5IDU3Ny43OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTczLjYxOSAtNTc3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg2LjE1IDU3Ny43OTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9yKSAxMS42MTY0IFRqCi0tMTI1OCBUSm0KLShjb21wcmVzc2lvbiwpIDUyLjg1MTYgVGoKLS0xNTEwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMTI1NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMTI1OCBUSm0KLShjb3JyZXNwb25kaW5nKSA1Ni45OTYgVGoKLS0xMjU4IFRKbQotKHRyaW8pIDEzLjgzODEgVGoKLVsxIDAgMCAxIDQxNy45NTggNTc3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTcuOTU4IC01NzcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTcuOTU4IDU3Ny43OTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDUzNy41MDkgNTc3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzcuNTA5IC01NzcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzcuNTA5IDU3Ny43OTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTY1Ljg0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTY1Ljg0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTY1Ljg0MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE2Ny42NDEgNTY1Ljg0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNjQxIC01NjUuODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuNzA3IDU2NS44NDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDE5Mi4xNTggNTY1Ljg0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuMTU4IC01NjUuODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTIuMTU4IDU2NS44NDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMzA1LjczMiA1NjUuODQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNS43MzIgLTU2NS44NDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMC43OTggNTY1Ljg0MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3IpIDExLjYxNjQgVGoKLS01MDggVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLS0yMTcxIFRKbQotKFRoZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgNDMxLjkxOCA1NjUuODQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMS45MTggLTU2NS44NDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMS45MTggNTY0LjA5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi00MzcuODk1IDU2NS44NDIgVGQKLShJbml0KSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0NjEuODA1IDU2NS44NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYxLjgwNSAtNTY1Ljg0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY2Ljg3MSA1NjUuODQyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTUwOCBUSm0KLShhbGxvY2F0ZSkgMzAuOTgzNyBUagotNzIgNTUzLjg4NyBUZAotKG1lbW9yeSkgMzMuMjA1MyBUagotLTU3NCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS01NzMgVEptCi0oY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbikgMTEyLjg5NiBUagotLTU3NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTU3NCBUSm0KLShkbykgOS45NjI2IFRqCi0tNTczIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tNTc0IFRKbQotKGluaXRpYWxpc2F0aW9ucywpIDU2LjE4OTEgVGoKLS02NTQgVEptCi0od2hpbHN0KSAyNC4zNTg2IFRqCi0tNTc0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgNDE5LjUwMiA1NTMuODg3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxOS41MDIgLTU1My44ODddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS41MDIgNTUyLjE0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi00MjUuNDggNTUzLjg4NyBUZAotKEVuZCkgMTcuOTMyNyBUagotWzEgMCAwIDEgNDQzLjQxMyA1NTMuODg3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0My40MTMgLTU1My44ODddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0OS4xMjggNTUzLjg4NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS01NzQgVEptCi0oY2xvc2UpIDIwLjQ3MzEgVGoKLS01NzMgVEptCi0oZG8pIDkuOTYyNiBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLTcyIDU0MS45MzIgVGQKLShvcGVyYXRpb25zKSA0MS41MDQyIFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHJlbGVhc2UpIDI3LjY1NjIgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1MzkuNzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MjkuODEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MjAuMDE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTMwMyBUSm0KLShyZWFsKSAxNC45MzM5IFRqCi0tMzAzIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmspIDEzLjI4MDEgVGoKLS0zMDMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDMgVEptCi0oZG9uZSkgMTkuMzY3MyBUagotLTMwMyBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSAxNzYuODkyIDUyMC4wMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2Ljg5MiAtNTIwLjAxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc2Ljg5MiA1MjAuMDE0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyNjAuNTc4IDUyMC4wMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYwLjU3OCAtNTIwLjAxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYzLjU5OCA1MjAuMDE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyODEuMDAzIDUyMC4wMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgxLjAwMyAtNTIwLjAxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjgxLjAwMyA1MjAuMDE0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgMzc2LjY0NSA1MjAuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Ni42NDUgLTUyMC4wMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3Ni42NDUgNTIwLjAxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tOTM5IFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMzAzIFRKbQotKGNvbXByZXNzKSAzNy42Mjg3IFRqCi0tMzAzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzAzIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0zMDMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotNzIgNTA4LjA1OSBUZAotKGZyb20pIDE5LjM2NzMgVGoKLS0yMDUgVEptCi0oYSkgNC40MjMzOSBUagotLTIwNSBUSm0KLSh1c2VyKSAxNi41OTc3IFRqCi0yMCBUSm0KLSgtc3VwcGxpZWQpIDM3LjA4MDggVGoKLS0yMDUgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0yMDYgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjA1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMDUgVEptCi0oYSkgNC40MjMzOSBUagotLTIwNSBUSm0KLSh1c2VyKSAxNi41OTc3IFRqCi0yMCBUSm0KLSgtc3VwcGxpZWQpIDM3LjA4MDggVGoKLS0yMDUgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjA1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTU5MSBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTIwNSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXJzKSAxNC45MzM5IFRqCi0tMjA1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIwNSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIwNSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjA1IFRKbQotKHNpemU7KSAxOC4yNjE0IFRqCi0tMjIwIFRKbQotKGFyYml0cmFyeSkgMzQuMzAxMiBUagotLTIwNiBUSm0KLShxdWFudGl0aWVzKSAzOC43NDQ2IFRqCi0tMjA1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi03MiA0OTYuMTA0IFRkCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1OCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTggVEptCi0oaGFuZGxlZCkgMzEuNTQxNiBUagotLTI1OCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjU3IFRKbQotKG1ha2luZykgMjkuODg3OCBUagotLTI1OCBUSm0KLShyZXBlYXRlZCkgMzMuNzQzMyBUagotLTI1OCBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI1OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjU4IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjU4IFRKbQotKGZ1bmN0aW9ucy4pIDM5LjU3MTQgVGoKLS02NjcgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI1OCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU3IFRKbQotKFwwMDNlKSA5Ljk2MjYgVGoKLTE1IFRKbQotKHhpYmxlKSAxOS45MjUyIFRqCi0tMjU4IFRKbQotKG1lY2hhbmlzbSkgNDUuMzc5NiBUagotLTI1OCBUSm0KLShhbGxvKSAxNC45NDM5IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjU4IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTggVEptCi0oY29uc3VtZXIpIDM4LjczNDYgVGoKLTIwIFRKbQotKC1wdWxsKSAxOC44MTk0IFRqCi03MiA0ODQuMTQ4IFRkCi0oc3R5bGUpIDE4LjgxOTQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYWN0aSkgMTQuMzg2IFRqCi0yNSBUSm0KLSh2aXR5KSAxNS41MDE4IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHByb2R1Y2VyKSAzNS40MDcxIFRqCi0yMCBUSm0KLSgtcHVzaCwpIDI0LjYyNzUgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShtaXh0dXJlKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJvdGguKSAyMC4yMDQyIFRqCi1bMSAwIDAgMSA3MiA0ODEuOTkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NzIuMDI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTMuNTI3IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjEuMi4pIDQzLjA3MjkgVGoKLS0yNzggVEptCi0oSGlnaC1sZSkgNTguMzQzIFRqCi0xNSBUSm0KLSh2ZWwpIDIzLjkyOTQgVGoKLS0yNzggVEptCi0oc3VtbWFyKSA2Ni45Njc5IFRqCi0tMTAgVEptCi0oeSkgOS41NzE3NiBUagotWzEgMCAwIDEgNzIgNDQ5LjY5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM5LjczNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDMxLjYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yODQgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotLTI4NCBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGVzKSAyMS4wMzEgVGoKLS0yODUgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjg0IFRKbQotKGhhbmR5KSAyNC4zNDg2IFRqCi0tMjg0IFRKbQotKHdyYXBwZXJzKSAzNi41MTI5IFRqCi0tMjg0IFRKbQotKGFyb3VuZCkgMjcuNjY2MSBUagotLTI4NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODQgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yODUgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotLTI4NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjaWxpdGF0ZSkgMzEuNTQxNiBUagotLTI4NCBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMjg0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjg1IFRKbQotKHdyaXQpIDE2LjA0OTcgVGoKLTEgVEptCi0oaW5nKSAxMi43MzIyIFRqCi1bMSAwIDAgMSA1MTAuMTEyIDQzMS42MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTAuMTEyIC00MzEuNjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMC4xMTIgNDMxLjYxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1NDAgNDMxLjYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNDMxLjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MTkuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcm1hdCkgMjYuNTYwMyBUagotLTM0NyBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMzQ2IFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxMjUuMzkxIDQxOS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI1LjM5MSAtNDE5LjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI1LjM5MSA0MTkuNjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5iejIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDE0OS4zMDEgNDE5LjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDkuMzAxIC00MTkuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTIuNzU0IDQxOS42NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmxlc1wpLikgMjIuNDE1OSBUagotLTEyMDAgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMzQ2IFRKbQotKHJvdXRpbmVzKSAzMi4wOTk1IFRqCi0tMzQ3IFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTM0NiBUSm0KLShob29rcykgMjMuODAwNyBUagotLTM0NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzQ2IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjaWxpdGF0ZSkgMzEuNTQxNiBUagotLTM0NyBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMzQ3IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zNDYgVEptCi0oaW4pIDcuNzUwOSBUagotLTM0NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQ2MC4wNDkgNDE5LjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjAuMDQ5IC00MTkuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjAuMDQ5IDQxOS42NTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ4OS45MzcgNDE5LjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODkuOTM3IC00MTkuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTMuMzkgNDE5LjY1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkYXRhKSAxNi41OTc3IFRqCi0tMzQ3IFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotNzIgNDA3LjY5OSBUZAotKGlzKSA2LjY0NTA1IFRqCi0tMzM5IFRKbQotKGVtYmVkZGVkKSA0MC45NDYzIFRqCi0tMzM5IFRKbQotKHdpdGhpbikgMjUuNDY0NCBUagotLTMzOSBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0zMzkgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZXIpIDEyLjcyMjIgVGoKLTIwIFRKbQotKC1zY2FsZSkgMjMuMjMyOCBUagotLTMzOSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zMzkgVEptCi0oc3RydWN0dXJlLCkgMzcuMzQ5OCBUagotLTM2MSBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzOSBUSm0KLSh3aCkgMTIuMTc0MyBUagotLTEgVEptCi0oZSkgNC40MjMzOSBUagotMSBUSm0KLShyZSkgNy43NDA5NCBUagotLTM0MCBUSm0KLSh0aGVyZSkgMTkuOTE1MiBUagotLTMzOSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zMzkgVEptCi0obXVsdGlwbGUpIDMzLjIxNTMgVGoKLVsxIDAgMCAxIDQwMC45NDEgNDA3LjY5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDAuOTQxIC00MDcuNjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDAuOTQxIDQwNy42OTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQzMC44MjkgNDA3LjY5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzAuODI5IC00MDcuNjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzQuMjA3IDQwNy42OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGF0YSkgMTYuNTk3NyBUagotLTMzOSBUSm0KLShzdHJlYW1zKSAzMC40MzU3IFRqCi0tMzM5IFRKbQotKGNvbmNhdGVuYXRlZCkgNTIuMDA0OCBUagotNzIgMzk1Ljc0NCBUZAotKGVuZC10by1lbmQuKSA0NS42NDg2IFRqCi1bMSAwIDAgMSA3MiAzOTUuNjQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zODUuNjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzMuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzMyIFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLS0zMzMgVEptCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLVsxIDAgMCAxIDE0NC44MDMgMzczLjgyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDQuODAzIC0zNzMuODI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDQuODAzIDM3My44MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLVsxIDAgMCAxIDIyOC40ODkgMzczLjgyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjguNDg5IC0zNzMuODI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjguNDg5IDM3My44MjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjM0LjQ5NiAzNzMuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNC40OTYgLTM3My44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNC40OTYgMzczLjgyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyOTQuMjcyIDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk0LjI3MiAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjI3MiAzNzMuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMwMC4yNzkgMzczLjgyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDAuMjc5IC0zNzMuODI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDAuMjc5IDM3My44MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAzODkuOTQyIDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg5Ljk0MiAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkzLjI1MyAzNzMuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MTAuOTUxIDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjk1MSAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEwLjk1MSAzNzMuODI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDUyNC41MjUgMzczLjgyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjQuNTI1IC0zNzMuODI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjcuODM2IDM3My44MjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXJlKSAxMi4xNjQzIFRqCi03MiAzNjEuODcxIFRkCi0oc3VwcGxpZWQuKSAzNi4yNTM5IFRqCi0tNjIwIFRKbQotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHdyaXRpbmcpIDI4Ljc4MiBUagotLTI1MCBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotWzEgMCAwIDEgMTgzLjQ3MSAzNjEuODcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4My40NzEgLTM2MS44NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4My40NzEgMzYxLjg3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDI3My4xMzUgMzYxLjg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzMuMTM1IC0zNjEuODcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzMuMTM1IDM2MS44NzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjc4LjExNiAzNjEuODcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4xMTYgLTM2MS44NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3OC4xMTYgMzYxLjg3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMzQzLjg2OSAzNjEuODcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0My44NjkgLTM2MS44NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0Ni4zNiAzNjEuODcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNjMuMjM3IDM2MS44NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYzLjIzNyAtMzYxLjg3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYzLjIzNyAzNjEuODcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlRmluaXNoKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSA0NjQuODU2IDM2MS44NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY0Ljg1NiAtMzYxLjg3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY3LjM0NiAzNjEuODcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUuKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSA3MiAzNTkuNzE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNDkuNzUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMzkuOTUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFzKSAxMS4wNjg0IFRqCi0tMzc0IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zNzQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc1IFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMzc0IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS00MDUgVEptCi0obm8pIDkuOTYyNiBUagotLTM3NCBUSm0KLShnbG9iYWwpIDI0LjkwNjUgVGoKLS0zNzQgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmlhYmxlcykgMzAuOTgzNyBUagotLTM3NSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zNzQgVEptCi0odXNlZCkgMTguMjYxNCBUagotLTM3NCBUSm0KLShzbykgOC44NTY3NSBUagotLTM3NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzQgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM3NSBUSm0KLShpcykgNi42NDUwNSBUagotLTM3NCBUSm0KLShwZXIpIDEyLjcyMjIgVGoKLS0zNzQgVEptCi0oc2UpIDguMjk4ODUgVGoKLS0zNzQgVEptCi0odGhyZWFkLXNhZmUuKSA0Ni43NDQ1IFRqCi0tMTM2NSBUSm0KLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0od2UpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS00MDYgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zNzQgVEptCi0oSS9PKSAxMy4yODAxIFRqCi03MiAzMjcuOTk4IFRkCi0oZXJyb3JzKSAyMy4yMzI4IFRqCi0tMjY3IFRKbQotKG9jY3VyKSAyMi4xMjY5IFRqCi0tMjY3IFRKbQotKHdoaWxzdCkgMjQuMzU4NiBUagotLTI2NyBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMjY3IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjY3IFRKbQotKHdyaXRpbmcpIDI4Ljc4MiBUagotLTI2NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjggVEptCi0odW5kZXJseWluZykgNDMuMTY3OSBUagotLTI2NyBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjY3IFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjcxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2NyBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNjcgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI2NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY3IFRKbQotKGNvbnN1bHQpIDI4Ljc4MiBUagotWzEgMCAwIDEgNDU3LjE5OSAzMjcuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1Ny4xOTkgLTMyNy45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1Ny4xOTkgMzI3Ljk5OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShlcnJubykgMjkuODg3OCBUagotWzEgMCAwIDEgNDg3LjA4NyAzMjcuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ny4wODcgLTMyNy45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4OS43NDggMzI3Ljk5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjY3IFRKbQotKGRldGVybWluZSkgMzkuODQwNCBUagotNzIgMzE2LjA0MyBUZAotKHRoZSkgMTIuMTc0MyBUagotLTM2NiBUSm0KLShjYXVzZSkgMjIuMTI2OSBUagotLTM2NSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM2NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjUgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS0xMzE0IFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMzY2IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zNjUgVEptCi0oY2FzZSwpIDE5LjYzNjMgVGoKLS0zOTUgVEptCi0oeW91JykgMTguMjYxNCBUagotNTAgVEptCi0oZCkgNC45ODEzIFRqCi0tMzY2IFRKbQotKG5lZWQpIDE4LjgwOTQgVGoKLS0zNjUgVEptCi0oYSkgNC40MjMzOSBUagotLTM2NiBUSm0KLShDKSA2LjY0NTA1IFRqCi0tMzY1IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zNjYgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNjYgVEptCi0oY29ycmVjdGx5KSAzNS40MDcxIFRqCi0tMzY1IFRKbQotKHN1cHBvcnRzKSAzMy43NjMzIFRqCi1bMSAwIDAgMSA0MzEuNjY4IDMxNi4wNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMxLjY2OCAtMzE2LjA0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMxLjY2OCAzMTYuMDQzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGVycm5vKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NjEuNTU2IDMxNi4wNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYxLjU1NiAtMzE2LjA0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY1LjE5OSAzMTYuMDQzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluKSA3Ljc1MDkgVGoKLS0zNjYgVEptCi0oYSkgNC40MjMzOSBUagotLTM2NSBUSm0KLShtdWx0aXRocmVhZGVkKSA1NS4zNDIyIFRqCi03MiAzMDQuMDg4IFRkCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudC4pIDQzLjQ0NjkgVGoKLVsxIDAgMCAxIDcyIDMwMy45ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI5NC4wMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI4Mi4xNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvKSA0Ljk4MTMgVGoKLS0yNDMgVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjQzIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNDMgVEptCi0obGl0dGxlKSAxOC4yNzE0IFRqCi0tMjQyIFRKbQotKHNpbXBsZXIpIDI5Ljg4NzggVGoKLS0yNDMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDMgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI0MyBUSm0KLShwb3J0YWJsZSwpIDM1LjEzODEgVGoKLVsxIDAgMCAxIDI4OS4yNjMgMjgyLjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4OS4yNjMgLTI4Mi4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg5LjI2MyAyODIuMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLVsxIDAgMCAxIDM3Mi45NDkgMjgyLjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Mi45NDkgLTI4Mi4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc1LjM2OCAyODIuMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDM5Mi4xNzIgMjgyLjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Mi4xNzIgLTI4Mi4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkyLjE3MiAyODIuMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA0ODEuODM2IDI4Mi4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODEuODM2IC0yODIuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4NC4yNTQgMjgyLjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlcXVpcmUpIDI4LjIxNDEgVGoKLS0yNDMgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjQyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDI3MC4yMTUgVGQKLShwYXNzKSAxNy4xNTU2IFRqCi0tMjQ3IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0yNDggVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjQ3IFRKbQotKGhhbmRsZXMpIDMwLjQzNTcgVGoKLS0yNDcgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDE2NS40MjEgMjcwLjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjUuNDIxIC0yNzAuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjUuNDIxIDI3MC4yMTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oRklMRSkgMjMuOTEwMiBUagotMTg5LjMzMSAyNjguNDcxIFRkCi0oKikgNS45Nzc1NiBUagotWzEgMCAwIDEgMTk1LjMwOSAyNzAuMjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5NS4zMDkgLTI3MC4yMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NS4zMDkgMjcwLjIxNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzXCkpIDcuMTkzIFRqCi0tMjQ3IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjQ4IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNDcgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91c2x5KSAyOS4zMzk5IFRqCi0tMjQ3IFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNDggVEptCi0ob3BlbmVkKSAyOC43NzIgVGoKLS0yNDcgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjQ3IFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLS0yNDcgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNDggVEptCi0od3JpdGluZykgMjguNzgyIFRqCi0tMjQ3IFRKbQotKHJlc3BlY3RpKSAzMC45ODM3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVseSkgMTIuMTc0MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTYxOCBUSm0KLShUaGF0KSAxOC4yNjE0IFRqCi0tMjQ4IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2lkcykgMTYuNjA3NyBUagotNzIgMjU4LjI2IFRkCi0ocG9ydGFiaWxpdHkpIDQxLjUxNDIgVGoKLS0yNzIgVEptCi0ocHJvYmxlbXMpIDM3LjA4MDggVGoKLS0yNzMgVEptCi0oYXNzb2NpYXRlZCkgNDAuOTQ2MyBUagotLTI3MiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjcyIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI3MyBUSm0KLShvcGVyYXRpb25zKSA0MS41MDQyIFRqCi0tMjcyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjcyIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI3MyBUSm0KLShhdHRyaWIpIDIxLjAzMSBUagotMjAgVEptCi0odXRlcywpIDE4LjU0MDQgVGoKLS0yNzggVEptCi0od2hpbHN0KSAyNC4zNTg2IFRqCi0tMjcyIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI3MiBUSm0KLShiZWluZykgMjIuMTM2OSBUagotLTI3MyBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMjcyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjczIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjcyIFRKbQotKGltcG9zaXRpb24pIDQyLjYzIFRqCi0tMjcyIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNzMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiAyNDYuMzA0IFRkCi0ocHJvZ3JhbW1lcikgNDkuMjQ1MSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjQ0LjE0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM0LjE4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjE1LjY4MyBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4xLjMuKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKFV0aWxpdHkpIDQ3LjgyNDQgVGoKLS0yNzggVEptCi0oZnVuY3Rpb25zKSA3Ny40NjkzIFRqCi0tMjc4IFRKbQotKHN1bW1hcikgNjYuOTY3OSBUagotLTEwIFRKbQotKHkpIDkuNTcxNzYgVGoKLVsxIDAgMCAxIDcyIDIxMi4xMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjAyLjE1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTkzLjc2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI3MyBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeSkgMTIuNzIyMiBUagotLTI3MyBUSm0KLShzaW1wbGUpIDI2LjU3MDMgVGoKLS0yNzMgVEptCi0obmVlZHMsKSAyNS4xNzU1IFRqCi1bMSAwIDAgMSAxNjUuOTI5IDE5My43NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY1LjkyOSAtMTkzLjc2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY1LjkyOSAxOTMuNzY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcykgMTQzLjQ2MSBUagotWzEgMCAwIDEgMzA5LjM5MSAxOTMuNzY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwOS4zOTEgLTE5My43NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMi4xMTIgMTkzLjc2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzI5LjIxOSAxOTMuNzY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyOS4yMTkgLTE5My43NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyOS4yMTkgMTkzLjc2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcykgMTU1LjQxNyBUagotWzEgMCAwIDEgNDg0LjYzNiAxOTMuNzY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4NC42MzYgLTE5My43NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ny4zNTcgMTkzLjc2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0yNzMgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlZC4pIDI0LjYyNzUgVGoKLTcyIDE4MS44MSBUZAotKFRoZXNlKSAyMy43OTA3IFRqCi0tMzc0IFRKbQotKGNvbXByZXNzKSAzNy42Mjg3IFRqCi0tMzczIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zNzQgVEptCi0oaW4pIDcuNzUwOSBUagotLTM3MyBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0zNzQgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTM3MyBUSm0KLShvbmUpIDE0LjM4NiBUagotLTM3NCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zNzMgVEptCi0odG8pIDcuNzUwOSBUagotLTM3NCBUSm0KLShhbm90aGVyKSAyOS44Nzc4IFRqCi0tMzc0IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTM3MyBUSm0KLShpbikgNy43NTA5IFRqCi0tMzc0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNzMgVEptCi0oc2luZ2xlKSAyMy44MDA3IFRqCi0tMzc0IFRKbQotKGZ1bmN0aW9uKSAzMy4yMDUzIFRqCi0tMzczIFRKbQotKGNhbGwuKSAxNi44NzY2IFRqCi0tMTM2MiBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0zNzMgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzc0IFRKbQotKGFzc2VzcykgMjQuMzQ4NiBUagotNzIgMTY5Ljg1NSBUZAotKHdoZXRoZXIpIDMyLjA4OTUgVGoKLS0zNDQgVEptCi0odGhlc2UpIDIwLjQ3MzEgVGoKLS0zNDMgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMzQ0IFRKbQotKGZ1bFwwMDJsbCkgMjIuMTQ2OSBUagotLTM0NCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMzQzIFRKbQotKG1lbW9yeS10by1tZW1vcnkpIDgwLjc5NjcgVGoKLS0zNDQgVEptCi0oY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbikgMTEyLjg5NiBUagotLTM0MyBUSm0KLShyZXF1aXJlbWVudHMpIDUyLjAxNDcgVGoKLS0zNDQgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMzQ0IFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXN0aW5nKSAyMy44MDA3IFRqCi03MiAxNTcuOSBUZAotKGVmKSA3Ljc0MDk0IFRqCi0yNSBUSm0KLShmb3J0KSAxNC4zODYgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1bmRlcnN0YW5kaW5nKSA1Ni40NDgxIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGdlbmVyYWwpIDI5LjMxOTkgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0oY29tcGxlKSAyOS4zMjk5IFRqCi0xNSBUSm0KLSh4KSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZS4pIDE1Ljc2MDggVGoKLVsxIDAgMCAxIDcyIDE1NS43NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE0NS43OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTM1Ljk4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG9zaGlva2EpIDMwLjk5MzYgVGoKLS00MjMgVEptCi0oVHN1bmVvKSAyOS4zMjk5IFRqCi0tNDIyIFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxNTAuMTYgMTM1Ljk4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTAuMTYgLTEzNS45ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC4xNiAxMzUuOTgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRzdW5lb0Byci5paWo0dS5vci5qcCkgMTI1LjUyOSBUagotWzEgMCAwIDEgMjc1LjY5IDEzNS45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc1LjY5IC0xMzUuOTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzUuNjkgMTM1Ljk4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTQyMyBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS00MjIgVEptCi0oY29udHJpYikgMjguMjI0IFRqCi0yMCBUSm0KLSh1dGVkKSAxNy4xNTU2IFRqCi0tNDIzIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTQyMyBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS00MjIgVEptCi0odG8pIDcuNzUwOSBUagotLTQyMyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS00MjMgVEptCi0oYmV0dGVyKSAyMi42ODQ4IFRqCi1bMSAwIDAgMSA0NzYuNDYyIDEzNS45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc2LjQ2MiAtMTM1Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc2LjQ2MiAxMzUuOTgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHpsaWIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDUwMC4zNzIgMTM1Ljk4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDAuMzcyIC0xMzUuOTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDQuNTgzIDEzNS45ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcGF0aS0pIDM1LjQxNyBUagotNzIgMTI0LjAyNyBUZAotKGJpbGl0eSkgMjEuMDQxIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTQ0NiBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTM4OCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0zODcgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi1bMSAwIDAgMSAxOTMuOTEzIDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkzLjkxMyAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkzLjkxMyAxMjQuMDI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iem9wZW4pIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDI1My42ODkgMTI0LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTMuNjg5IC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTMuNjg5IDEyNC4wMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjYwLjM4NSAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC4zODUgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2MC4zODUgMTI0LjAyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpyZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAzMjAuMTYxIDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIwLjE2MSAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIwLjE2MSAxMjQuMDI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMyNi44NTcgMTI0LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjYuODU3IC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjYuODU3IDEyNC4wMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6d3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDM5Mi42MTEgMTI0LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuNjExIC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTIuNjExIDEyNC4wMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzk5LjMwNiAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5OS4zMDYgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5OS4zMDYgMTI0LjAyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpmbHVzaCkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDY1LjA2IDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY1LjA2IC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjUuMDYgMTI0LjAyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0NzEuNzU2IDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcxLjc1NiAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDcxLjc1NiAxMjQuMDI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemNsb3NlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA1MzcuNTA5IDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSAxMjQuMDI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDExMi4wNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTExMi4wNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDExMi4wNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6ZXJyb3IpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDEzNy43NTMgMTEyLjA3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuNzUzIC0xMTIuMDcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDAuNDA4IDExMi4wNzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDE1Ny40NDkgMTEyLjA3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTcuNDQ5IC0xMTIuMDcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTcuNDQ5IDExMi4wNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6bGliVmVyc2lvbikgOTUuNjQxIFRqCi1bMSAwIDAgMSAyNTMuMDkxIDExMi4wNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUzLjA5MSAtMTEyLjA3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUzLjA5MSAxMTIuMDcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS03MTkgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjY2IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI2NyBUSm0KLShcMDAybmQpIDE1LjUwMTggVGoKLS0yNjYgVEptCi0odGhlc2UpIDIwLjQ3MzEgVGoKLS0yNjcgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjY2IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNjcgVEptCi0oY29uKSAxNC4zODYgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW5pZW50KSAyNC4zNDg2IFRqCi0tMjY2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI2NyBUSm0KLShzaW1wbGUpIDI2LjU3MDMgVGoKLS0yNjYgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjY3IFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLTcyIDEwMC4xMTcgVGQKLShhbmQpIDE0LjM4NiBUagotLTI3MCBUSm0KLSh3cmkpIDEzLjI4MDEgVGoKLTEgVEptCi0odGluZywpIDE3Ljk5MjUgVGoKLS0yNzUgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTI2OSBUSm0KLSh0aG9zZSkgMjEuMDMxIFRqCi0tMjcwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNjkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcwIFRKbQotKGhpZ2gtbGUpIDI4LjIyNCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNjkgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZS4pIDE1Ljc2MDggVGoKLS03MzcgVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0yNzAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjY5IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI3MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNjkgVEptCi0oXCh5ZXRcKSkgMTguODA5NCBUagotLTI3MCBUSm0KLShvZikgOC4yOTg4NSBUagotMjUgVEptCi0oXDAwMmNpYWxseSkgMjcuNjc2MSBUagotLTI2OSBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMjcwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjc0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjcwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotNzIgODguMTYxNCBUZAotKG1pbmltYWxseSkgNDAuOTY2MiBUagotLTI5MSBUSm0KLShkb2N1bWVudGVkKSA0OC42OTcyIFRqCi0tMjkxIFRKbQotKGhlcmUuKSAxOS42MzYzIFRqCi0tODY3IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjkxIFRKbQotKGJyZWFrLCkgMjQuNjE3NiBUagotLTMwMSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTEgVEptCi0oZ2V0KSAxMi4xNzQzIFRqCi0tMjkyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTEgVEptCi0oaykgNC45ODEzIFRqCi0xMCBUSm0KLShlZXApIDEzLjgyODEgVGoKLS0yOTEgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yOTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkxIFRKbQotKHBpZWNlcy4pIDI3LjM4NzIgVGoKLS00MzMgVEptCi0oSSkgMy4zMTc1NSBUagotLTI5MSBUSm0KLShob3BlKSAxOS4zNjczIFRqCi0tMjkxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTEgVEptCi0oZG9jdW1lbnQpIDM5LjI5MjUgVGoKLS0yOTIgVEptCi0odGhlbSkgMTkuOTI1MiBUagotLTI5MSBUSm0KLShwcm9wZXJseSkgMzMuNzUzMyBUagotLTI5MSBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLTcyIDc2LjIwNjIgVGQKLSh0aW1lKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKHBlcm1pdHMuKSAzMi4zNzg1IFRqCi1bMSAwIDAgMSA3MiA3NC4wNDk0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjMuMTk3Nl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNC4zODM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi45NzM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDMuMDYzMyAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5OC4yMjUgLTUxLjA3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTQxLjI4OCA1MS4wNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOSkgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTUuMTYxIDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxMyAxMwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG9zaGlva2EpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTI1MCBUSm0KLShjb250cmliKSAyOC4yMjQgVGoKLTIwIFRKbQotKHV0ZWQpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0obW9kaVwwMDJjYXRpb25zKSA1NC4yNDY0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWxsbykgMTQuOTQzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVpbHQpIDEzLjI5MDEgVGoKLS0yNTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTI1MCBUSm0KLShETEwuKSAyMS44NTc5IFRqCi1bMSAwIDAgMSA3MiA3MDcuODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY5OC4xMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY3NS41MDQgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuMi4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oRXJyKSAyOS44NTE1IFRqCi0yMCBUSm0KLShvcikgMjAuNjU4NSBUagotLTI3OCBUSm0KLShoYW5kbGluZykgODYuMDg0IFRqCi1bMSAwIDAgMSA3MiA2NzAuOTA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjEuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTMuODA1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTIxNCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjE1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjE0IFRKbQotKGRlc2lnbmVkKSAzNS40MTcgVGoKLS0yMTUgVEptCi0odG8pIDcuNzUwOSBUagotLTIxNCBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjE1IFRKbQotKGNsZWFubHkpIDI4Ljc3MiBUagotLTIxNCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjE1IFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjE0IFRKbQotKHNpdHVhdGlvbnMsKSA0MC42ODczIFRqCi0tMjIyIFRKbQotKGluY2x1ZGluZykgMzcuNjM4NyBUagotLTIxNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMTUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yc3QtY2FzZSkgMzUuNDA3MSBUagotLTIxNCBUSm0KLShzaXR1YXRpb24pIDM0LjMyMTIgVGoKLS0yMTUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMTQgVEptCi0oZGVjb21wcmVzc2luZykgNTkuNzY1NiBUagotLTIxNSBUSm0KLShyYW5kb20pIDMwLjQzNTcgVGoKLTcyIDY0MS44NSBUZAotKGRhdGEuKSAxOS4wODgzIFRqCi0tNzY0IFRKbQotKEknbSkgMTQuMzg2IFRqCi0tMjc0IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI3NSBUSm0KLSgxMDAlKSAyMy4yNDI3IFRqCi0tMjc0IFRKbQotKHN1cmUpIDE2LjU5NzcgVGoKLS0yNzQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI3NCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI3NCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNzQgVEptCi0oYWwpIDcuMTkzIFRqCi0xMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXlzKSAxMy4yODAxIFRqCi0tMjc0IFRKbQotKGRvKSA5Ljk2MjYgVGoKLS0yNzQgVEptCi0odGhpcywpIDE2Ljg4NjYgVGoKLS0yODAgVEptCi0oc28pIDguODU2NzUgVGoKLS0yNzQgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjc0IFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tMjc0IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNzQgVEptCi0odG8pIDcuNzUwOSBUagotLTI3NCBUSm0KLShhZGQpIDE0LjM4NiBUagotLTI3NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjc1IFRKbQotKHMpIDMuODc1NDUgVGoKLTEgVEptCi0oaWduYWwpIDE5LjkyNTIgVGoKLS0yNzUgVEptCi0oaGFuZGxlcikgMjkuODc3OCBUagotLTI3NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjc0IFRKbQotKGNhdGNoKSAyMS4wMjExIFRqCi0tMjc0IFRKbQotKHNlKSA4LjI5ODg1IFRqCi0xNSBUSm0KLShnbWVudGF0aW9uKSA0NC44MzE3IFRqCi03MiA2MjkuODk0IFRkCi0odmlvbGF0aW9ucykgMzkuMzAyNSBUagotLTI3MyBUSm0KLShkdXJpbmcpIDI2LjAxMjMgVGoKLS0yNzMgVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTI3MyBUSm0KLShpZikgNi4wODcxNSBUagotLTI3MyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzMgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjczIFRKbQotKGZlZWxpbmcpIDI3LjY2NjEgVGoKLS0yNzQgVEptCi0oZXNwZWNpYWxsKSAzNC44NTkxIFRqCi0xIFRKbQotKHkpIDQuOTgxMyBUagotLTI3NCBUSm0KLShwYXJhbm9pZC4pIDM3LjM0OTggVGoKLS03NTggVEptCi0oSSkgMy4zMTc1NSBUagotLTI3MyBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZCkgMTcuNzEzNSBUagotLTI3MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3MyBUSm0KLShpbnRlcmVzdGVkKSAzOC43MzQ2IFRqCi0tMjczIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNzQgVEptCi0oaGVhcmluZykgMjkuODc3OCBUagotLTI3MyBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjczIFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi03MiA2MTcuOTM5IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJvYikgMTMuMjgwMSBUagotMjAgVEptCi0odXN0bmVzcykgMjguNzgyIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oY29ycnVwdGVkKSAzOC4xNzY3IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLVsxIDAgMCAxIDcyIDYxNS43ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwNi4wMzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5Ni4yNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVikgNy4xOTMgVGoKLTExMSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yNTEgVEptCi0oMS4wLjMpIDE5LjkyNTIgVGoKLS0yNTEgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1MSBUSm0KLShyb2IpIDEzLjI4MDEgVGoKLTIwIFRKbQotKHVzdCkgMTEuNjI2NCBUagotLTI1MSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUxIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MSBUSm0KLShyZXNwZWN0KSAyOC4yMTQxIFRqCi0tMjUyIFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0yNTEgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MSBUSm0KLShwcmUpIDEyLjcyMjIgVGoKLTI1IFRKbQotKHZpb3VzKSAyMS41ODkgVGoKLS0yNTEgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24uKSAyNi44MzkyIFRqCi0tNjI2IFRKbQotKEluKSA4LjI5ODg1IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzdGlnKSAxOC44MTk0IFRqCi01IFRKbQotKGF0aW9ucykgMjMuODAwNyBUagotLTI1MSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUxIFRKbQotKFYpIDcuMTkzIFRqCi0xMTEgVEptCi0oYWxncmluZCkgMjguMjI0IFRqCi0tMjUxIFRKbQotKFwoYSkgNy43NDA5NCBUagotLTI1MiBUSm0KLSh0b29sKSAxNS41MDE4IFRqCi0tMjUxIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MSBUSm0KLShkZXRlY3RpbmcpIDM2LjUyMjkgVGoKLTcyIDU4NC4yODUgVGQKLShwcm9ibGVtcykgMzcuMDgwOCBUagotLTQyMiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDIxIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTQyMiBUSm0KLShtYW5hZ2VtZW50XCkpIDU0LjIyNjQgVGoKLS00MjEgVEptCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS00MjIgVEptCi0odGhhdCwpIDE3LjQzNDYgVGoKLS00NjQgVEptCi0oYXQpIDcuMTkzIFRqCi0tNDIyIFRKbQotKGxlYXN0KSAxOC4yNjE0IFRqCi0tNDIxIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTQyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MjIgVEptCi0oZikgMy4zMTc1NSBUagotMSBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTQyMiBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tNDIyIFRKbQotKEkpIDMuMzE3NTUgVGoKLS00MjEgVEptCi0odGVzdGVkLCkgMjUuNzMzNCBUagotLTQ2NCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTQyMiBUSm0KLShzaW5nbGUtYml0KSAzNy42Mzg3IFRqCi0tNDIyIFRKbQotKGVycm9ycykgMjMuMjMyOCBUagotLTQyMSBUSm0KLShpbikgNy43NTA5IFRqCi0tNDIyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgNTcyLjMzIFRkCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMzQyIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zNDEgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzQyIFRKbQotKGNhdWdodCkgMjYuNTYwMyBUagotLTM0MiBUSm0KLShwcm9wZXJseSkgMzMuNzUzMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTM2NSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzQxIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zNDIgVEptCi0oc2UpIDguMjk4ODUgVGoKLTE1IFRKbQotKGdtZW50YXRpb24pIDQ0LjgzMTcgVGoKLS0zNDIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXVsdHMsKSAyMS4zMSBUagotLTM2NSBUSm0KLShubykgOS45NjI2IFRqCi0tMzQxIFRKbQotKHVzZXMpIDE3LjE1NTYgVGoKLS0zNDIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDIgVEptCi0odW5pbml0aWFsaXNlZCkgNDkuMjY1MSBUagotLTM0MiBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTM2NCBUSm0KLShubykgOS45NjI2IFRqCi0tMzQyIFRKbQotKG91dCkgMTIuNzMyMiBUagotLTM0MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTM0MiBUSm0KLShyYW5nZSkgMjIuMTI2OSBUagotNzIgNTYwLjM3NSBUZAotKHJlYWRzKSAyMS4wMjExIFRqCi0tMjYxIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjYwIFRKbQotKHdyaXRlcywpIDI2LjgzOTIgVGoKLS0yNjMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjEgVEptCi0obm8pIDkuOTYyNiBUagotLTI2MSBUSm0KLShpblwwMDJuaXQpIDIzLjgxMDYgVGoKLTEgVEptCi0oZSkgNC40MjMzOSBUagotLTI2MSBUSm0KLShsb29waW5nKSAzMC40NDU3IFRqCi0tMjYxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNjAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjYxIFRKbQotKGRlY29tcHJlc3NvcikgNTUuMzMyMyBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTM0MiBUSm0KLShTbykgMTAuNTIwNSBUagotLTI2MCBUSm0KLShpdCcpIDguODU2NzUgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNjEgVEptCi0oY2VydGFpbmx5KSAzNC44NTkxIFRqCi0tMjYwIFRKbQotKHByZXR0eSkgMjMuMjQyNyBUagotLTI2MSBUSm0KLShyb2IpIDEzLjI4MDEgVGoKLTIwIFRKbQotKHVzdCwpIDE0LjExNyBUagotLTI2MyBUSm0KLShhbHRob3VnaCkgMzQuODY5MSBUagotLTI2MSBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjYwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkbicpIDI2LjAxMjMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI2MSBUSm0KLShjbGFpbSkgMjIuMTM2OSBUagotNzIgNTQ4LjQyIFRkCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLSh0b3RhbGx5KSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKGJvbWJwcm9vZi4pIDQ2Ljc2NDQgVGoKLVsxIDAgMCAxIDcyIDU0Ni4yNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzNi41MTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyNi43MjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjgyIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMTA1Ljg0IDUyNi43MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA1Ljg0IC01MjYuNzIxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDUuODQgNTI2LjcyMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemxpYi5oKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxNDcuNjgzIDUyNi43MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ3LjY4MyAtNTI2LjcyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUwLjQ5MSA1MjYuNzIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbnRhaW5zKSAzMy4yMDUzIFRqCi0tMjgyIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjgyIFRKbQotKGRlXDAwMm5pdGlvbnMpIDQyLjA3MjEgVGoKLS0yODIgVEptCi0obmVlKSAxMy44MjgxIFRqCi0xIFRKbQotKGRlZCkgMTQuMzg2IFRqCi0tMjgyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODIgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjgyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4MiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tODExIFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjgyIFRKbQotKHBhcnRpY3VsYXIpIDM4LjE3NjcgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yOTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjgyIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI4MSBUSm0KLShkZVwwMDJuaXRlbHkpIDM3LjYzODcgVGoKLS0yODIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjgyIFRKbQotKGluY2x1ZGUpIDI5LjMyOTkgVGoKLVsxIDAgMCAxIDcyIDUxNC43NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUxNC43NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUxNC43NjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpsaWJfcHJpdmF0ZS5oKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNjEuNjY0IDUxNC43NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjY2NCAtNTE0Ljc2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYxLjY2NCA1MTQuNzY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDUxMy4yMzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUwMy40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ5My4wNjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSW4pIDguMjk4ODUgVGoKLVsxIDAgMCAxIDgyLjgwNzUgNDkzLjA2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Mi44MDc1IC00OTMuMDY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Mi44MDc1IDQ5My4wNjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpsaWIuaCkgNDEuODQyOSBUagotWzEgMCAwIDEgMTI0LjY1MSA0OTMuMDY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNC42NTEgLTQ5My4wNjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNC42NTEgNDkzLjA2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFyaW91cykgMjQuMzQ4NiBUagotLTI1MiBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcykgMjAuNDczMSBUagotLTI1MSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTIgVEptCi0oZGVcMDAybmVkLikgMzEuODIwNSBUagotLTYzMSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yNTIgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdpbmcpIDE5LjkyNTIgVGoKLS0yNTIgVEptCi0obGlzdCkgMTIuMTg0MyBUagotLTI1MSBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTIgVEptCi0oaW50ZW5kZWQpIDM0LjMxMTIgVGoKLS0yNTIgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTIgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTEgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGhhdXN0aSkgMjguNzgyIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTIgVEptCi0oZGVzY3JpcHRpb24pIDQ0LjI3MzggVGoKLS0yNTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLTcyIDQ4MS4xMTIgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzYgVEptCi0oY2lyY3Vtc3RhbmNlcykgNTYuNDM4MSBUagotLTIzNiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjM3IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjM2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMzYgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTIzNiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0yMzYgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjM3IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjM2IFRKbQotKHJldHVybmVkKSAzMy4xOTU0IFRqCi0tMjM2IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMjM2IFRKbQotKHRob3NlKSAyMS4wMzEgVGoKLS0yMzYgVEptCi0oZGVzY3JpcHRpb25zKSA0OC4xNDkyIFRqCi0tMjM2IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTIzNyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tMjM2IFRKbQotKGxhdGVyKSAxNy43MDM1IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMzA1IFRKbQotKFJhdGhlcikgMjYuNTYwMyBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTIzOSBUSm0KLShpdCkgNS41MzkyMSBUagotLTIzNiBUSm0KLShpcykgNi42NDUwNSBUagotLTIzNyBUSm0KLShpbnRlbmRlZCkgMzQuMzExMiBUagotLTIzNiBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA0NjkuMTU3IFRkCi0oY29uKSAxNC4zODYgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjY2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NSBUSm0KLShyb3VnaCkgMjMuMjQyNyBUagotLTI2NiBUSm0KLShtZWFuaW5nKSAzNC4zMTEyIFRqCi0tMjY1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY2IFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNjYgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjY1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZS4pIDE5LjA4ODMgVGoKLS03MTQgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjY1IFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0yNjYgVEptCi0oXDAwMikgNS41MzkyMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjY1IFRKbQotKGFjdGlvbnMpIDI4LjIyNCBUagotLTI2NiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNjYgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNjUgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjYgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjY1IFRKbQotKGludGVuZGVkKSAzNC4zMTEyIFRqCi0tMjY2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjYgVEptCi0oZGVub3RlKSAyNi41NjAzIFRqCi0tMjY1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjY2IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi03MiA0NTcuMjAyIFRkCi0oc2l0dWF0aW9uLikgMzYuODExOCBUagotWzEgMCAwIDEgNzIgNDU3LjEwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM3LjYxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDI1Ljc2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDQyNS43Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyLjM3ODYgLTEuMzEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDI0LjQ0OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDQxMy44MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKHJlcXVlc3RlZCkgMzguMTc2NyBUagotLTI1MCBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlZCkgNDEuNTA0MiBUagotLTI1MCBUSm0KLShzdWNjZXNzZnVsbHkpIDQ4LjY5NzIgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDQxMS42NDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk4LjEzOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzg4LjM0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1JVTl9PSywpIDU5Ljc3NTYgVGoKLS02MDAgVEptCi0oQlpfRkxVU0hfT0ssKSA3MS43MzA3IFRqCi0tNjAwIFRKbQotKEJaX0ZJTklTSF9PSykgNzEuNzMwNyBUagotWzEgMCAwIDEgMjg3LjE5MyAzODguMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTcuNjg0IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zODcuMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAzNzYuMzg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAxMTguNzkgMzc2LjM4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTguNzkgLTM3Ni4zODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOC43OSAzNzYuMzg0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyMDIuNDc2IDM3Ni4zODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAyLjQ3NiAtMzc2LjM4NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAyLjQ3NiAzNzYuMzg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJlcXVlc3RlZCkgMzguMTc2NyBUagotLTI1MCBUSm0KLShcMDAzdXNoL1wwMDJuaXNoL25vdGhpbmctc3BlY2lhbCkgMTA4LjQ5MyBUagotLTI1MCBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlZCkgNDEuNTA0MiBUagotLTI1MCBUSm0KLShzdWNjZXNzZnVsbHkpIDQ4LjY5NzIgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDM3NC4yMjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM2MC43MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1MC45MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxNDkuNzA5IDM1MC45Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgwLjE5OTMgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM0OS42MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDMzOC45NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oY29tcGxldGVkLCkgNDMuOTk0OCBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTI1MCBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRldGVjdGVkKSAzMy4xOTU0IFRqCi0tMjUwIFRKbQotKGR1cmluZykgMjYuMDEyMyBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotWzEgMCAwIDEgNzIgMzM2LjgwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuNzY1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzEzLjU1NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzAzLjc1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdpbmcpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjUwIFRKbQotKGtpbmQuKSAyMC4yMDQyIFRqCi1bMSAwIDAgMSA3MiAzMDEuNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjgyLjExMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjcyLjMxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE2MS42NjQgMjcyLjMxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkyLjE1NDQgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI3MS4wMDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAyNjAuMzU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluZGljYXRlcykgMzUuOTY1IFRqCi0tMzg2IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zODUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzg2IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zODYgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMzg2IFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0zODUgVEptCi0oaW1wcm9wZXJseSkgNDQuMjczOCBUagotLTM4NiBUSm0KLShjb21waWxlZCkgMzcuMDgwOCBUagotLTM4NiBUSm0KLShvbikgOS45NjI2IFRqCi0tMzg2IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0zODUgVEptCi0ocGxhdGZvcm0pIDM0LjMxMTIgVGoKLS0zODYgVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0zODYgVEptCi0oYSkgNC40MjMzOSBUagotLTM4NiBUSm0KLShtYWpvcikgMjMuMjQyNyBUagotLTM4NSBUSm0KLShjb25cMDAyZ3VyYXRpb24pIDUzLjEzMDUgVGoKLS0zODYgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLTEwOCAyNDguNDA0IFRkCi0oU3BlY2lcMDAyY2FsbHkpIDQ3LjA0MzQgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS00ODEgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS00MzUgVEptCi0obWVhbnMpIDI1LjQ1NDQgVGoKLS00MzUgVEptCi0odGhhdCkgMTQuOTQzOSBUagotWzEgMCAwIDEgMjIwLjYxNCAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMC42MTQgLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMC42MTQgMjQ4LjQwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKGNoYXJcKSkgNzEuNzMwNyBUagotWzEgMCAwIDEgMjkyLjM0NSAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Mi4zNDUgLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Mi4zNDUgMjQ4LjQwNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyOTkuNjI4IDI0OC40MDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk5LjYyOCAtMjQ4LjQwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk5LjYyOCAyNDguNDA0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNpemVvZlwoc2hvcnRcKSkgNzcuNzA4MyBUagotWzEgMCAwIDEgMzc3LjMzNyAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Ny4zMzcgLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4MS42NjkgMjQ4LjQwNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDAwLjM4OCAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwMC4zODggLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwMC4zODggMjQ4LjQwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKGludFwpKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA0NjYuMTQxIDI0OC40MDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY2LjE0MSAtMjQ4LjQwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDcwLjQ3NCAyNDguNDA0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotLTQzNSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS00MzUgVEptCi0oMSwpIDcuNDcxOTUgVGoKLS00ODEgVEptCi0oMikgNC45ODEzIFRqCi0tNDM1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0xMDggMjM2LjQ0OSBUZAotKDQpIDQuOTgxMyBUagotLTM4OSBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS00MjQgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zODkgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzg5IFRKbQotKGJlLikgMTEuODk1MyBUagotLTE0NTYgVEptCi0oTm90ZSkgMTkuMzY3MyBUagotLTM4OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4OSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzkwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM4OSBUSm0KLShzdGlsbCkgMTQuOTUzOSBUagotLTM4OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMzg5IFRKbQotKHByb3Blcmx5KSAzMy43NTMzIFRqCi0tMzkwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zODkgVEptCi0oNjQtYml0KSAyMy44MDA3IFRqCi0tMzg5IFRKbQotKHBsYXRmb3JtcykgMzguMTg2NiBUagotMTA4IDIyNC40OTMgVGQKLSh3aGljaCkgMjQuMzQ4NiBUagotLTI5MiBUSm0KLShmb2xsbykgMTguODE5NCBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yOTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkyIFRKbQotKExQNjQpIDIxLjU4OSBUagotLTI5MiBUSm0KLShwcm9ncmFtbWluZykgNTQuMjM2NCBUagotLTI5MyBUSm0KLShtb2RlbCkgMjQuOTA2NSBUagotLTI5MiBUSm0KLSgtLSkgNi42MzUwOSBUagotLTI5MiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjkyIFRKbQotKGlzLCkgOS4xMzU3IFRqCi0tMzAzIFRKbQotKHdoZXJlKSAyNC4zMzg2IFRqCi1bMSAwIDAgMSAzNTUuMjc5IDIyNC40OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzU1LjI3OSAtMjI0LjQ5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU1LjI3OSAyMjQuNDkzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNpemVvZlwobG9uZ1wpKSA3MS43MzA3IFRqCi1bMSAwIDAgMSA0MjcuMDEgMjI0LjQ5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjcuMDEgLTIyNC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyOS45MiAyMjQuNDkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0NDcuMjE3IDIyNC40OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ3LjIxNyAtMjI0LjQ5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ3LjIxNyAyMjQuNDkzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNpemVvZlwodm9pZCkgNjUuNzUzMiBUagotNTEyLjk3IDIyMi43NSBUZAotKCopIDUuOTc3NTYgVGoKLTUxOC45NDggMjI0LjQ5MyBUZAotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA1MjQuOTI1IDIyNC40OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTI0LjkyNSAtMjI0LjQ5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI3LjgzNiAyMjQuNDkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotMTA4IDIxMi41MzggVGQKLSg4LikgNy40NzE5NSBUagotLTYyMCBUSm0KLShVbmRlcikgMjQuODk2NSBUagotLTI1MCBUSm0KLShMUDY0LCkgMjQuMDc5NiBUagotWzEgMCAwIDEgMTc1LjYwNiAyMTIuNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NS42MDYgLTIxMi41MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3NS42MDYgMjEyLjUzOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKGludFwpKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAyNDEuMzYgMjEyLjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDEuMzYgLTIxMi41MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0My44NSAyMTIuNTM4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHN0aWxsKSAxNC45NTM5IFRqCi0tMjUwIFRKbQotKDQsKSA3LjQ3MTk1IFRqCi0tMjUwIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi1bMSAwIDAgMSAyOTEuNzQgMjEyLjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTEuNzQgLTIxMi41MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5MS43NCAyMTIuNTM4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAzMzkuNTYgMjEyLjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzkuNTYgLTIxMi41MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOS41NiAyMTIuNTM4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oZG9lc24nKSAyNi41NjAzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgNDMzLjQ1OCAyMTIuNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMy40NTggLTIxMi41MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMy40NTggMjEyLjUzOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsb25nKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0NTcuMzY4IDIxMi41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU3LjM2OCAtMjEyLjUzOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU5Ljg1OSAyMTIuNTM4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHR5cGUsKSAxOS42NDYyIFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKE9LLikgMTYuODc2NiBUagotWzEgMCAwIDEgNzIgMjEwLjM4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuNzY1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTk2Ljg3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTg3LjA3NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgMTczLjYxOSAxODcuMDc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA0LjExIC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODUuNzY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMTc1LjExOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShXaGVuKSAyMy43OTA3IFRqCi0tMjkxIFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkxIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMDAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yOTEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTAgVEptCi0oaW1wb3J0YW50KSAzOC43NDQ2IFRqCi0tMjkxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0yOTEgVEptCi0oaW4pIDcuNzUwOSBUagotLTI5MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTEgVEptCi0oY29ycmVjdCkgMjcuNjU2MiBUagotLTI5MCBUSm0KLShzZXF1ZW5jZSkgMzYuNTEyOSBUagotLTI5MSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjkxIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yOTAgVEptCi0oc3RydWN0dXJlcykgMzguNzM0NiBUagotMTA4IDE2My4xNjMgVGQKLShcKGIpIDguMjk4ODUgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXJzKSAxNC45MzM5IFRqCi0tMjA2IFRKbQotKGV0Y1wpKSAxNC45MzM5IFRqCi0tMjA1IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjA1IFRKbQotKGNvcnJlY3QpIDI3LjY1NjIgVGoKLS0yMDYgVEptCi0oc3RhdGVzLikgMjQuNjI3NSBUagotWzEgMCAwIDEgMjM5LjQwOSAxNjMuMTYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzOS40MDkgLTE2My4xNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzOS40MDkgMTYzLjE2MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMjg3LjIzIDE2My4xNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg3LjIzIC0xNjMuMTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODkuMjc4IDE2My4xNjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY2hlY2tzKSAyNy4xMDgyIFRqCi0tMjA2IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjA1IFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0yMDYgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yMDUgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yMDYgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjA2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMDUgVEptCi0oZW5zdXJlKSAyNi4wMDI0IFRqCi0tMjA2IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTIwNiBUSm0KLShpcykgNi42NDUwNSBUagotLTIwNSBUSm0KLShoYXBwZW5pbmcsKSA0My45OTQ4IFRqCi0tMjE1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjA1IFRKbQotKHJldHVybnMpIDI3LjY2NjEgVGoKLVsxIDAgMCAxIDEwOCAxNTEuMjA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwOCAtMTUxLjIwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDE1MS4yMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDIwOS42MTkgMTUxLjIwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDkuNjE5IC0xNTEuMjA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTMuMjcgMTUxLjIwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpZikgNi4wODcxNSBUagotLTM2NyBUSm0KLShub3QuKSAxNS4yMjI5IFRqCi0tNjU5IFRKbQotKENvZGUpIDIxLjAzMSBUagotLTM2NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM2NyBUSm0KLShjb21wbGllcykgMzUuOTc0OSBUagotLTM2NiBUSm0KLShwcmVjaXNlbHkpIDM1Ljk2NSBUagotLTM2NyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzY2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM2NyBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTM2NiBUSm0KLShzZW1hbnRpY3MsKSA0MS43ODMxIFRqCi0tMzk2IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzY3IFRKbQotKGRldGFpbGVkKSAzMS41NDE2IFRqCi0xMDggMTM5LjI1MyBUZAotKGJlbG8pIDE3LjE1NTYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTI1MCBUSm0KLShyZWNlaSkgMTkuMzU3MyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWU7KSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHN1Y2gpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbnQpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZGVub3RlcykgMzAuNDM1NyBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnZ3kpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0oY29kZSkgMTguODA5NCBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXN0aWcpIDE4LjgxOTQgVGoKLTUgVEptCi0oYXRlLikgMTQuMTA3IFRqCi1bMSAwIDAgMSA3MiAxMzcuMDk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy43NjU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMjMuNTg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTMuNzg4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxNTUuNjg2IDExMy43ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni4xNzY4IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTIuNDc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMTAxLjgzMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm5lZCkgMzYuNTIyOSBUagotLTQzNCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS00MzQgVEptCi0oYSkgNC40MjMzOSBUagotLTQzNCBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLS00MzQgVEptCi0odG8pIDcuNzUwOSBUagotLTQzNCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNDMzIFRKbQotKGZ1bmN0aW9uKSAzMy4yMDUzIFRqCi0tNDM0IFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTQzNCBUSm0KLShpcykgNi42NDUwNSBUagotLTQzNCBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS00MzQgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00MzQgVEptCi0ocmFuZ2UpIDIyLjEyNjkgVGoKLS00MzQgVEptCi0ob3IpIDguMjk4ODUgVGoKLS00MzQgVEptCi0ob3RoZXJ3aXNlKSAzOC43MzQ2IFRqCi0tNDM0IFRKbQotKG1hbmlmZXN0bHkpIDQyLjA2MjEgVGoKLS00MzQgVEptCi0oaW5jb3JyZWN0LikgMzcuODk3NyBUagotLTE3MjMgVEptCi0oQXMpIDExLjA2ODQgVGoKLTEwOCA4OS44Nzc4IFRkCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgMTMxLjY0NCA4OS44Nzc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS42NDQgLTg5Ljg3NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMS42NDQgODkuODc3OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgMjMzLjI2MyA4OS44Nzc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMy4yNjMgLTg5Ljg3NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzMy4yNjMgODkuODc3OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tNTk1IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTU5NiBUSm0KLShkZW5vdGVzKSAzMC40MzU3IFRqCi0tNTk1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS01OTUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tNTk2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS01OTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNTk1IFRKbQotKGNsaWVudCkgMjIuMTM2OSBUagotLTU5NSBUSm0KLShjb2RlLikgMjEuMyBUagotLTI2OTIgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tNTk2IFRKbQotKGRpc3RpbmN0aW9uKSA0Mi4wNzIxIFRqCi0tNTk1IFRKbQotKGJldHdlZW4pIDMzLjE5NTQgVGoKLVsxIDAgMCAxIDEwOCA3Ny45MjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwOCAtNzcuOTIyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDc3LjkyMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE5MS42ODYgNzcuOTIyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTEuNjg2IC03Ny45MjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQuMTc3IDc3LjkyMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDIxMS4wNTMgNzcuOTIyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTEuMDUzIC03Ny45MjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTEuMDUzIDc3LjkyMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDMxMi42NzIgNzcuOTIyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTIuNjcyIC03Ny45MjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTUuMTYzIDc3LjkyMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShiaXQpIDEwLjUyMDUgVGoKLS0yNTAgVEptCi0oaGF6eSkgMTguODA5NCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oc3RpbGwpIDE0Ljk1MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9ydGgpIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0obWFraW5nLikgMzIuMzc4NSBUagotWzEgMCAwIDEgNzIgNzUuNzY1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuNzY1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjE0ODJdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTApIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTQgMTQKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNDMuNzMxIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03NC4yMjE3IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MDguNzI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm5lZCkgMzYuNTIyOSBUagotLTIyOCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0yMjcgVEptCi0oYSkgNC40MjMzOSBUagotLTIyOCBUSm0KLShyZXF1ZXN0KSAyOC43NzIgVGoKLS0yMjcgVEptCi0odG8pIDcuNzUwOSBUagotLTIyOCBUSm0KLShhbGxvY2F0ZSkgMzAuOTgzNyBUagotLTIyOCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yMjcgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsZWQuKSAyMS44NTc5IFRqCi0tNjA1IFRKbQotKE5vdGUpIDE5LjM2NzMgVGoKLS0yMjggVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTIyOCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjcgVEptCi0ocXVhbnRpdHkpIDMyLjY1NzQgVGoKLS0yMjggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjcgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjI4IFRKbQotKG5lZWRlZCkgMjguMjE0MSBUagotLTIyOCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjI3IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLTEwOCA2ODYuMTI3IFRkCi0oYSkgNC40MjMzOSBUagotLTM1MSBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0zNTIgVEptCi0oY2Fubm90KSAyNi41NjAzIFRqCi0tMzUxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzUyIFRKbQotKGRldGVybWluZWQpIDQ0LjgyMTcgVGoKLS0zNTEgVEptCi0odW50aWwpIDE4LjI3MTQgVGoKLS0zNTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzUxIFRKbQotKHN0cmVhbScpIDI5Ljg3NzggVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0zNTEgVEptCi0oaGVhZGVyKSAyNi41NTAzIFRqCi0tMzUyIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTM1MSBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzUyIFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi0tMTIyOCBUSm0KLShTbykgMTAuNTIwNSBUagotWzEgMCAwIDEgNDI2LjQ3MSA2ODYuMTI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNi40NzEgLTY4Ni4xMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNi40NzEgNjg2LjEyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDUyMi4xMTMgNjg2LjEyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjIuMTEzIC02ODYuMTI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjUuNjE0IDY4Ni4xMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDEwOCA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwOCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTY3Ljc3NiA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Ny43NzYgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Mi4xMyA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG1heSkgMTcuMTU1NiBUagotLTQzNyBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLVsxIDAgMCAxIDIyMS43ODQgNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjEuNzg0IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjEuNzg0IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAyOTMuNTE1IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkzLjUxNSAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk3Ljg2NyA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS00MzcgVEptCi0odGhvdWdoKSAyNy42NzYxIFRqCi0tNDM3IFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTQzNyBUSm0KLShvZikgOC4yOTg4NSBUagotLTQzNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MzcgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQzNyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tNDM3IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTQzNyBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tNDM3IFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi0xMDggNjYyLjIxNyBUZAotKFRoZSkgMTUuNDkxOCBUagotLTQ3OSBUSm0KLShzYW1lKSAyMC40NzMxIFRqCi0tNDc4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tNDc5IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTQ3OCBUSm0KLSh0cnVlKSAxNS40OTE4IFRqCi0tNDc5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTQ3OSBUSm0KLShjb21wcmVzc2lvbjspIDUzLjEzMDUgVGoKLS01OTMgVEptCi0ob25jZSkgMTguODA5NCBUagotWzEgMCAwIDEgMzAxLjY3NSA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMS42NzUgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMS42NzUgNjYyLjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDQwOS4yNzEgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDkuMjcxIC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTQuMDQgNjYyLjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShvcikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDI3LjEwNyA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNy4xMDcgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNy4xMDcgNjYyLjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDUxNi43NzEgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTYuNzcxIC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjEuNTM5IDY2Mi4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotMTA4IDY1MC4yNjIgVGQKLShzdWNjZXNzZnVsbHkpIDQ4LjY5NzIgVGoKLS0yNTAgVEptCi0oY29tcGxldGVkLCkgNDMuOTk0OCBUagotWzEgMCAwIDEgMjA1LjY3MiA2NTAuMjYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNS42NzIgLTY1MC4yNjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNS42NzIgNjUwLjI2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI3Ny40MDMgNjUwLjI2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzcuNDAzIC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzkuODk0IDY1MC4yNjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY2Fubm90KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKG9jY3VyKSAyMi4xMjY5IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2NDguMTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzNC4xNTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyNC4zNTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfREFUQV9FUlJPUikgNzcuNzA4MyBUagotWzEgMCAwIDEgMTQ5LjcwOSA2MjQuMzU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODAuMTk5MyAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjIzLjA0OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDYxMi40MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS0yNjYgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjY1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNjYgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2NSBUSm0KLShpbnRlKSAxNC45NDM5IFRqCi0xNSBUSm0KLShncml0eSkgMTguODE5NCBUagotLTI2NiBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI2NiBUSm0KLShpcykgNi42NDUwNSBUagotLTI2NSBUSm0KLShkZXRlY3RlZCkgMzMuMTk1NCBUagotLTI2NiBUSm0KLShkdXJpbmcpIDI2LjAxMjMgVGoKLS0yNjUgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLS03MTQgVEptCi0oTW9zdCkgMjAuNDgzMSBUagotLTI2NiBUSm0KLShpbXBvcnRhbnRsKSA0MS41MTQyIFRqCi0xIFRKbQotKHkpIDQuOTgxMyBUagotNjQgVEptCi0oLCkgMi40OTA2NSBUagotLTI2OSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjYgVEptCi0obWVhbnMpIDI1LjQ1NDQgVGoKLS0yNjUgVEptCi0od2hlbikgMjEuNTc5IFRqCi0xMDggNjAwLjQ0OCBUZAotKHN0b3JlZCkgMjQuMzQ4NiBUagotLTIyMiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMyBUSm0KLShjb21wdXRlZCkgMzkuMjkyNSBUagotLTIyMiBUSm0KLShDUkNzKSAyMy44MTA2IFRqCi0tMjIyIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTIyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTIyMiBUSm0KLShkbykgOS45NjI2IFRqCi0tMjIyIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTIyMiBUSm0KLShtYXRjaC4pIDI2LjgzOTIgVGoKLS02MDIgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTIyMiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0yMjIgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMjMgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTIyMiBUSm0KLShyZXR1cm5lZCkgMzMuMTk1NCBUagotLTIyMiBUSm0KLSh1cG9uKSAxOS45MjUyIFRqCi0tMjIyIFRKbQotKGRldGVjdGlvbikgMzYuNTIyOSBUagotLTIyMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTIyMiBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjIyIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0xMDggNTg4LjQ5MyBUZAotKGFub21hbHkpIDM0LjMxMTIgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShkYXRhLikgMTkuMDg4MyBUagotWzEgMCAwIDEgNzIgNTg2LjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NzIuMzg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjIuNTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfREFUQV9FUlJPUl9NQUdJQykgMTEzLjU3NCBUagotWzEgMCAwIDEgMTg1LjU3NCA1NjIuNTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuMDY1IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjEuMjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA1NTAuNjM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFzKSAxMS4wNjg0IFRqCi0tMzA2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDYgVEptCi0oc3BlY2lhbCkgMjcuNjY2MSBUagotLTMwNiBUSm0KLShjYXNlKSAxNy4xNDU2IFRqCi0tMzA3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAxOTEuODUyIDU1MC42MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkxLjg1MiAtNTUwLjYzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkxLjg1MiA1NTAuNjM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0RBVEFfRVJST1IpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI2OS41NjEgNTUwLjYzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjkuNTYxIC01NTAuNjM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjkuNTYxIDU1MC42MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTMwNiBUSm0KLShpdCkgNS41MzkyMSBUagotLTMwNiBUSm0KLShpcykgNi42NDUwNSBUagotLTMwNiBUSm0KLShzb21ldGltZXMpIDQyLjYyIFRqCi0tMzA3IFRKbQotKHVzZWYpIDE2LjU5NzcgVGoKLTEgVEptCi0odWwpIDcuNzUwOSBUagotLTMwNyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA2IFRKbQotKGtubykgMTQuOTQzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0zMDYgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMzA2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNiBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMzA2IFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTMwNiBUSm0KLShkb2VzKSAxOC4yNjE0IFRqCi0xMDggNTM4LjY4IFRkCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKHN0YXJ0KSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvcnJlY3QpIDI3LjY1NjIgVGoKLS0yNTAgVEptCi0obWFnaWMpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI1MCBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMjYxLjU2MiA1MzguNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYxLjU2MiAtNTM4LjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjEuNTYyIDUzOC42OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgnQicpIDE3LjkzMjcgVGoKLS02MDAgVEptCi0oJ1onKSAxNy45MzI3IFRqCi0tNjAwIFRKbQotKCdoJykgMTcuOTMyNyBUagotWzEgMCAwIDEgMzI3LjMxNiA1MzguNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI3LjMxNiAtNTM4LjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjcuMzE2IDUzOC42OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotWzEgMCAwIDEgNzIgNTM2LjUyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MjIuNTc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTIuNzc3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAxMzcuNzUzIDUxMi43NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC02OC4yNDQxIC0xLjMxMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUxMS40NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA1MDAuODIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybmVkKSAzNi41MjI5IFRqCi0tMjMzIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDE1OS4xMjMgNTAwLjgyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuMTIzIC01MDAuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTkuMTIzIDUwMC44MjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjE4Ljg5OSA1MDAuODIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOC44OTkgLTUwMC44MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS4yMTggNTAwLjgyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjM3LjkyMyA1MDAuODIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNy45MjMgLTUwMC44MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNy45MjMgNTAwLjgyMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMzAzLjY3NiA1MDAuODIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMy42NzYgLTUwMC44MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwNS45OTUgNTAwLjgyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aGVuKSAyMS41NzkgVGoKLS0yMzMgVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0yMzIgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzMgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yMzMgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yMzMgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTIzMiBUSm0KLShvcikgOC4yOTg4NSBUagotLTIzMyBUSm0KLSh3cml0aW5nKSAyOC43ODIgVGoKLS0yMzMgVEptCi0oaW4pIDcuNzUwOSBUagotLTIzMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzIgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotMTA4IDQ4OC44NjcgVGQKLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMzg0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzU3IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDE1OC41MTEgNDg4Ljg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguNTExIC00ODguODY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTguNTExIDQ4OC44NjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLVsxIDAgMCAxIDI0Mi4xOTcgNDg4Ljg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDIuMTk3IC00ODguODY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDUuNzU1IDQ4OC44NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI2My42OTggNDg4Ljg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjMuNjk4IC00ODguODY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjMuNjk4IDQ4OC44NjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAzNTMuMzYyIDQ4OC44NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUzLjM2MiAtNDg4Ljg2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU2LjkyIDQ4OC44NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9yKSAxMS42MTY0IFRqCi0tMzU3IFRKbQotKGF0dGVtcHRzKSAzMy43NjMzIFRqCi0tMzU3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNTcgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMzU3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNTcgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzU3IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTM1OCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM1NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTcgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLTEwOCA0NzYuOTEyIFRkCi0oaW5kaWNhdG9yKSAzNS40MTcgVGoKLS0yNjAgVEptCi0oXCh2aXosKSAxNy45ODI1IFRqCi1bMSAwIDAgMSAxNjYuNjAzIDQ3Ni45MTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY2LjYwMyAtNDc2LjkxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY2LjYwMyA0NzYuOTEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZlcnJvclwoZlwpKSA1My43OTggVGoKLVsxIDAgMCAxIDIyMC40MDEgNDc2LjkxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjAuNDAxIC00NzYuOTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuNDAxIDQ3Ni45MTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yNjAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjAgVEptCi0oc2V0LikgMTMuNTU5MSBUagotLTY3OSBUSm0KLShPbikgMTIuMTc0MyBUagotLTI2MCBUSm0KLShyZWNlaXB0KSAyNy4xMDgyIFRqCi0tMjYwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAzMTEuMjIzIDQ3Ni45MTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzExLjIyMyAtNDc2LjkxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzExLjIyMyA0NzYuOTEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAzNzYuOTc2IDQ3Ni45MTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzc2Ljk3NiAtNDc2LjkxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc2Ljk3NiA0NzYuOTEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNjAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjYwIFRKbQotKGNhbGxlcikgMjIuMTI2OSBUagotLTI2MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNjAgVEptCi0oY29uc3VsdCkgMjguNzgyIFRqCi1bMSAwIDAgMSA0ODIuMDY4IDQ3Ni45MTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDgyLjA2OCAtNDc2LjkxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgyLjA2OCA0NzYuOTEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGVycm5vKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1MTEuOTU2IDQ3Ni45MTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjk1NiAtNDc2LjkxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTE0LjU0NiA0NzYuOTEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZC9vcikgMjUuNDU0NCBUagotWzEgMCAwIDEgMTA4IDQ2NC45NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA4IC00NjQuOTU3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNDY0Ljk1NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShwZXJyb3IpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDE0My44NjUgNDY0Ljk1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuODY1IC00NjQuOTU3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuMzU2IDQ2NC45NTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3F1aXJlKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKG9wZXJhdGluZy1zeXN0ZW0pIDY4LjYyMjQgVGoKLS0yNTAgVEptCi0oc3BlY2lcMDAyYykgMzAuNDM1NyBUagotLTI1MCBUSm0KLShpbmZvcm1hdGlvbikgNDcuMDQzNCBUagotLTI1MCBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvYmxlbS4pIDM1LjY5NiBUagotWzEgMCAwIDEgNzIgNDYyLjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ0OC44NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS4wNTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfVU5FWFBFQ1RFRF9FT0YpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE3My42MTkgNDM5LjA1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNC4xMSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM3Ljc0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDQyNy4wOTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMTU5LjQ2NyA0MjcuMDk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OS40NjcgLTQyNy4wOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS40NjcgNDI3LjA5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyMTkuMjQyIDQyNy4wOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE5LjI0MiAtNDI3LjA5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIxLjczMyA0MjcuMDk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdoZW4pIDIxLjU3OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oXDAwMm5pc2hlcykgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxvZ2ljYWwpIDI3LjExODIgVGoKLS0yNTAgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGRldGVjdGVkLikgMzUuNjg2IFRqCi1bMSAwIDAgMSA3MiA0MjQuOTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQxMC45OTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQwMS4xOTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfT1VUQlVGRl9GVUxMKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNjEuNjY0IDQwMS4xOTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Mi4xNTQ0IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTkuODg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzg5LjI0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm5lZCkgMzYuNTIyOSBUagotLTI1OCBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSAxNTkuNjMyIDM4OS4yNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU5LjYzMiAtMzg5LjI0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU5LjYzMiAzODkuMjQxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcykgMTQzLjQ2MSBUagotWzEgMCAwIDEgMzAzLjA5NCAzODkuMjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMy4wOTQgLTM4OS4yNDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwNS42NjggMzg5LjI0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzIyLjYyNyAzODkuMjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMi42MjcgLTM4OS4yNDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMi42MjcgMzg5LjI0MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcykgMTU1LjQxNyBUagotWzEgMCAwIDEgNDc4LjA0NCAzODkuMjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3OC4wNDQgLTM4OS4yNDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4MC42MTggMzg5LjI0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjU4IFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMjU5IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLTEwOCAzNzcuMjg2IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKFwwMDJ0KSA4LjMwODgxIFRqCi0tMjUwIFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yNTAgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlZC4pIDI0LjYyNzUgVGoKLVsxIDAgMCAxIDcyIDM3NS4xMjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzUxLjIxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzI4LjU4NSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy4zLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShMbykgMjUuMjQ0NyBUagotMTUgVEptCi0ody1sZSkgNDAuMTgwOCBUagotMTUgVEptCi0odmVsKSAyOC43MTUzIFRqCi0tMjc4IFRKbQotKGludGVyZmFjZSkgODYuMTA0NiBUagotWzEgMCAwIDEgNzIgMzI4LjMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzE4LjM2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjk3Ljk2NCBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4zLjEuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDI5Ny45NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMjk3Ljk2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAyOTcuOTY0IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDE4NS45MjYgVGoKLVsxIDAgMCAxIDMwNS43ODUgMjk3Ljk2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzMuNzg1IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNDQuNzc5XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDExKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE1IDE1Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjk2LjUyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyNzQuOTY5IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjcxLjM4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odHlwZWRlZikgNDEuODQyOSBUagotLTQyNiBUSm0KLShzdHJ1Y3QpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotOTguNDg3OSA2OTkuNjc2IFRkCi0oY2hhcikgMjMuOTEwMiBUagotMTI2LjY0MiA2OTcuOTMzIFRkCi0oKikgNS45Nzc1NiBUagotMTMyLjYyIDY5OS42NzYgVGQKLShuZXh0X2luOykgNDcuODIwNSBUagotOTguNDg3OSA2ODcuNzIxIFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGF2YWlsX2luOykgNTMuNzk4IFRqCi05OC40ODc5IDY3NS43NjYgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odG90YWxfaW5fbG8zMjspIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjYzLjgxMSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh0b3RhbF9pbl9oaTMyOykgODMuNjg1OCBUagotOTguNDg3OSA2MzkuOSBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLTEyNi42NDIgNjM4LjE1NyBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA2MzkuOSBUZAotKG5leHRfb3V0OykgNTMuNzk4IFRqCi05OC40ODc5IDYyNy45NDUgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYXZhaWxfb3V0OykgNTkuNzc1NiBUagotOTguNDg3OSA2MTUuOTkgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odG90YWxfb3V0X2xvMzI7KSA4OS42NjM0IFRqCi05OC40ODc5IDYwNC4wMzUgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odG90YWxfb3V0X2hpMzI7KSA4OS42NjM0IFRqCi05OC40ODc5IDU4MC4xMjUgVGQKLSh2b2lkKSAyMy45MTAyIFRqCi0xMjYuNjQyIDU3OC4zODEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzIuNjIgNTgwLjEyNSBUZAotKHN0YXRlOykgMzUuODY1NCBUagotOTguNDg3OSA1NTYuMjE0IFRkCi0odm9pZCkgMjMuOTEwMiBUagotMTI2LjY0MiA1NTQuNDcxIFRkCi0oKikgNS45Nzc1NiBUagotMTMyLjYyIDU1Ni4yMTQgVGQKLShcKCkgNS45Nzc1NiBUagotMTM4LjU5NyA1NTQuNDcxIFRkCi0oKikgNS45Nzc1NiBUagotMTQ0LjU3NSA1NTYuMjE0IFRkCi0oYnphbGxvY1wpXCh2b2lkKSA3Ny43MDgzIFRqCi0yMjYuNTI3IDU1NC40NzEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMzIuNTA1IDU1Ni4yMTQgVGQKLSgsaW50LGludFwpOykgNTkuNzc1NiBUagotOTguNDg3OSA1NDQuMjU5IFRkCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotMTMyLjYyIDU0Mi41MTYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzguNTk3IDU0NC4yNTkgVGQKLShiemZyZWVcKVwodm9pZCkgNzEuNzMwNyBUagotMjE0LjU3MiA1NDIuNTE2IFRkCi0oKikgNS45Nzc1NiBUagotMjIwLjU1IDU0NC4yNTkgVGQKLSgsdm9pZCkgMjkuODg3OCBUagotMjU0LjY4MiA1NDIuNTE2IFRkCi0oKikgNS45Nzc1NiBUagotMjYwLjY1OSA1NDQuMjU5IFRkCi0oXCk7KSAxMS45NTUxIFRqCi05OC40ODc5IDUzMi4zMDQgVGQKLSh2b2lkKSAyMy45MTAyIFRqCi0xMjYuNjQyIDUzMC41NiBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA1MzIuMzA0IFRkCi0ob3BhcXVlOykgNDEuODQyOSBUagotODkuOTk5OSA1MjAuMzQ5IFRkCi0ofSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW07KSA1OS43NzU2IFRqCi04OS45OTk5IDQ5Ni40MzggVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi0yOTIuMjgxIDQ5NC42OTUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yOTguMjU4IDQ5Ni40MzggVGQKLShzdHJtLCkgMjkuODg3OCBUagotMTk2LjA5OSA0ODQuNDgzIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJsb2NrU2l6ZTEwMGssKSA4My42ODU4IFRqCi0xOTYuMDk5IDQ3Mi41MjggVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5LCkgNTkuNzc1NiBUagotMTk2LjA5OSA0NjAuNTczIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA0NDUuMDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNS4wNjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyMy4xMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJlcGFyZXMpIDM0LjMwMTIgVGoKLS0zNTYgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzU2IFRKbQotKGNvbXByZXNzaW9uLikgNTIuODUxNiBUagotLTEyNTYgVEptCi0oVGhlKSAxNS40OTE4IFRqCi1bMSAwIDAgMSAyMDkuNDA5IDQyMy4xMTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA5LjQwOSAtNDIzLjExM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA5LjQwOSA0MjMuMTEzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNjMuMjA4IDQyMy4xMTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYzLjIwOCAtNDIzLjExM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY2Ljc1NCA0MjMuMTEzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHN0cnVjdHVyZSkgMzQuODU5MSBUagotLTM1NiBUSm0KLShob2xkcykgMjEuNTg5IFRqCi0tMzU2IFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMzU2IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zNTYgVEptCi0ocGVydGFpbmluZykgNDAuMzk4MyBUagotLTM1NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzU2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM1NiBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTM1NSBUSm0KLShhY3RpKSAxNC4zODYgVGoKLTI1IFRKbQotKHZpdHkpIDE1LjUwMTggVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS0xMjU2IFRKbQotKEEpIDcuMTkzIFRqCi1bMSAwIDAgMSA3MiA0MTEuMTU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MTEuMTU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MTEuMTU4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAxMjUuNzk4IDQxMS4xNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI1Ljc5OCAtNDExLjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI4LjU4MSA0MTEuMTU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHN0cnVjdHVyZSkgMzQuODU5MSBUagotLTI3OSBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yODAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNzkgVEptCi0oYWxsb2NhdGVkKSAzNS45NjUgVGoKLS0yNzkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODAgVEptCi0oaW5pdGlhbGlzZWQpIDM5LjMwMjUgVGoKLS0yNzkgVEptCi0ocHJpb3IpIDE5LjM2NzMgVGoKLS0yNzkgVEptCi0odG8pIDcuNzUwOSBUagotLTI3OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODAgVEptCi0oY2FsbC4pIDE2Ljg3NjYgVGoKLS03OTYgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjc5IFRKbQotKFwwMDJlbGRzKSAyMS41ODkgVGoKLS0yNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQzMS45MzkgNDExLjE1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzEuOTM5IC00MTEuMTU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzEuOTM5IDQxMS4xNTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLVsxIDAgMCAxIDQ4NS43MzggNDExLjE1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODUuNzM4IC00MTEuMTU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODguNTIgNDExLjE1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wcmlzZSkgMzYuNTIyOSBUagotLTI3OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDM5OS4yMDMgVGQKLShlbnRpcmV0eSkgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0odXNlcikgMTYuNTk3NyBUagotMjAgVEptCi0oLXZpc2libGUpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLVsxIDAgMCAxIDIwNC40MjIgMzk5LjIwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuNDIyIC0zOTkuMjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDQuNDIyIDM5OS4yMDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RhdGUpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIzNC4zMSAzOTkuMjAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNC4zMSAtMzk5LjIwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM2LjggMzk5LjIwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHBvaW50ZXIpIDI4LjIyNCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcmkpIDExLjA2ODQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXRlKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oc3RydWN0dXJlcykgMzguNzM0NiBUagotLTI1MCBUSm0KLShyZXF1aXJlZCkgMzMuMTk1NCBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oY29tcHJlc3Npb24uKSA1Mi44NTE2IFRqCi1bMSAwIDAgMSA3MiAzOTcuMDQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zODcuMDgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzcuMjg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEN1c3RvbSkgMzEuMDAzNiBUagotLTM3MiBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0zNzIgVEptCi0oYWxsb2NhdG9ycykgMzguNzM0NiBUagotLTM3MiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zNzIgVEptCi0oc3VwcG9ydGVkLCkgNDEuNzgzMSBUagotLTQwMyBUSm0KLSh2aWEpIDEyLjE3NDMgVGoKLS0zNzIgVEptCi0oXDAwMmVsZHMpIDIxLjU4OSBUagotWzEgMCAwIDEgMjg4LjkwOCAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4OC45MDggLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4OC45MDggMzc3LjI4NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemFsbG9jKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzMzAuNzUxIDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMwLjc1MSAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMwLjc1MSAzNzcuMjg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMzNy4yNTMgMzc3LjI4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzcuMjUzIC0zNzcuMjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzcuMjUzIDM3Ny4yODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpmcmVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzNzMuMTE4IDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzczLjExOCAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzczLjExOCAzNzcuMjg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS00MDMgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDM5Ny43MTQgMzc3LjI4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTcuNzE0IC0zNzcuMjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTcuNzE0IDM3Ny4yODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ob3BhcXVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0MzMuNTc5IDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMzLjU3OSAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMzLjU3OSAzNzcuMjg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMzUzIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTM3MiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDQ5My43ODIgMzc3LjI4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuNzgyIC0zNzcuMjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTMuNzgyIDM3Ny4yODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ob3BhcXVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA1MjkuNjQ4IDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTI5LjY0OCAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTMzLjM1NSAzNzcuMjg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi03MiAzNjUuMzMgVGQKLShwYXNzZWQpIDI2LjU2MDMgVGoKLS0zMDYgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNiBUSm0KLShhcykgOC4yOTg4NSBUagotLTMwNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0oXDAwMnJzdCkgMTUuNTAxOCBUagotLTMwNiBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50KSAyOS44ODc4IFRqCi0tMzA2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDYgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0zMDYgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0zMDUgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMjUzLjk0MSAzNjUuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUzLjk0MSAtMzY1LjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTMuOTQxIDM2NS4zMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemFsbG9jKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyOTUuNzg0IDM2NS4zM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTUuNzg0IC0zNjUuMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OC44MzIgMzY1LjMzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzMTYuMjY2IDM2NS4zM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTYuMjY2IC0zNjUuMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxNi4yNjYgMzY1LjMzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzUyLjEzMiAzNjUuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUyLjEzMiAtMzY1LjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTIuMTMyIDM2NS4zMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzIwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTMwNiBUSm0KLShpcykgNi42NDUwNSBUagotLTMwNiBUSm0KLShvdGhlcndpc2UpIDM4LjczNDYgVGoKLS0zMDYgVEptCi0oaWdub3JlZCkgMzAuNDM1NyBUagotLTMwNiBUSm0KLShieSkgOS45NjI2IFRqCi0tMzA2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tOTU1IFRKbQotKFRoZSkgMTUuNDkxOCBUagotNzIgMzUzLjM3NSBUZAotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgODkuNDMwOSAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg5LjQzMDkgLTM1My4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg5LjQzMDkgMzUzLjM3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemFsbG9jKSA0MS44NDI5IFRqCi0tNjAwIFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKG9wYXF1ZSwpIDQxLjg0MjkgVGoKLS02MDAgVEptCi0obiwpIDExLjk1NTEgVGoKLS02MDAgVEptCi0obSkgNS45Nzc1NiBUagotLTYwMCBUSm0KLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgMjMyLjg5MyAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMi44OTMgLTM1My4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNS45MzggMzUzLjM3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMwNiBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGVjdGVkKSAzMC45ODM3IFRqCi0tMzA1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDYgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMzA2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDUgVEptCi0ocG9pbnRlcikgMjguMjI0IFRqCi1bMSAwIDAgMSAzNjAuMyAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2MC4zIC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjAuMyAzNTMuMzc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHApIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDM2Ni4yNzcgMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjYuMjc3IC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjkuMzIyIDM1My4zNzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzgwLjExOCAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4MC4xMTggLTM1My4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4MC4xMTggMzUzLjM3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuKSA1Ljk3NzU2IFRqCi0zOTIuMDczIDM1MS42MzEgVGQKLSgqKSA1Ljk3NzU2IFRqCi00MDQuMDI5IDM1My4zNzUgVGQKLShtKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA0MTAuMDA2IDM1My4zNzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjAwNiAtMzUzLjM3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEzLjA1MSAzNTMuMzc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJ5dGVzKSAyMS4wMzEgVGoKLS0zMDYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMDUgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzIwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA1MDQuMTM1IDM1My4zNzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA0LjEzNSAtMzUzLjM3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA0LjEzNSAzNTMuMzc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotNzIgMzQxLjQyIFRkCi0oXCgpIDUuOTc3NTYgVGoKLS02MDAgVEptCi0ob3BhcXVlLCkgNDEuODQyOSBUagotLTYwMCBUSm0KLShwKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxNDkuNzA5IDM0MS40Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDkuNzA5IC0zNDEuNDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Mi4xOTkgMzQxLjQyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShmcmVlKSAxNS40ODE5IFRqCi0tMjUwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzMzkuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjkuM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE5LjUwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI4MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yODAgVEptCi0oZG9uJykgMTguMjYxNCBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjgwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yODAgVEptCi0oYSkgNC40MjMzOSBUagotLTI4MCBUSm0KLShjdXN0b20pIDI4Ljc4MiBUagotLTI4MCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNzkgVEptCi0oYWxsb2NhdG9yKSAzNC44NTkxIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjg4IFRKbQotKHNldCkgMTEuMDY4NCBUagotWzEgMCAwIDEgMjk5LjkgMzE5LjUwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTkuOSAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk5LjkgMzE5LjUwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemFsbG9jKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNDEuNzQzIDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQxLjc0MyAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQxLjc0MyAzMTkuNTAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDM0Ny4wOTYgMzE5LjUwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDcuMDk2IC0zMTkuNTAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDcuMDk2IDMxOS41MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpmcmVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzODIuOTYxIDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjk2MSAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg1Ljc0OSAzMTkuNTAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MDIuOTIzIDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAyLjkyMyAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDAyLjkyMyAzMTkuNTAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNDM4Ljc4OCAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzOC43ODggLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0MS41NzYgMzE5LjUwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSA0NTIuMTE1IDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDUyLjExNSAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDUyLjExNSAzMTkuNTAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE5VTEwpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDQ3Ni4wMjUgMzE5LjUwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzYuMDI1IC0zMTkuNTAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzYuMDI1IDMxOS41MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI4MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNzIgMzA3LjU0NyBUZAotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi1bMSAwIDAgMSAxNzYuMzE4IDMwNy41NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjMxOCAtMzA3LjU0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc2LjMxOCAzMDcuNTQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG1hbGxvYykgMzUuODY1NCBUagotWzEgMCAwIDEgMjEyLjE4MyAzMDcuNTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMi4xODMgLTMwNy41NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNC42NzQgMzA3LjU0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgvKSAyLjc2OTYgVGoKLVsxIDAgMCAxIDIxOS45MzQgMzA3LjU0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTkuOTM0IC0zMDcuNTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTkuOTM0IDMwNy41NDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZnJlZSkgMjMuOTEwMiBUagotWzEgMCAwIDEgMjQzLjg0NCAzMDcuNTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0My44NDQgLTMwNy41NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Ni4zMzUgMzA3LjU0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyb3V0aW5lcy4pIDM0LjU5MDEgVGoKLVsxIDAgMCAxIDcyIDMwNy4zOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI5Ny40M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjg1LjYyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShCZWZvcmUpIDI3LjEwODIgVGoKLS0zNjIgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotWzEgMCAwIDEgMTMzLjQzOCAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMy40MzggLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMy40MzggMjg1LjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDI0MS4wMzUgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDEuMDM1IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDEuMDM1IDI4NS42MjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTM5MCBUSm0KLShcMDAyZWxkcykgMjEuNTg5IFRqCi1bMSAwIDAgMSAyNzIuNjA2IDI4NS42MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjYwNiAtMjg1LjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjcyLjYwNiAyODUuNjI5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6YWxsb2MpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMxNC40NDkgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTQuNDQ5IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTQuNDQ5IDI4NS42MjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzIwLjgyNSAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMC44MjUgLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMC44MjUgMjg1LjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemZyZWUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDM1Ni42OSAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ni42OSAtMjg1LjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYwLjI5NiAyODUuNjI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNzguMjg4IDI4NS42MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzc4LjI4OCAtMjg1LjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc4LjI4OCAyODUuNjI5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNDE0LjE1NCAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxNC4xNTQgLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNy43NiAyODUuNjI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTM2MiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM2MiBUSm0KLShcMDAybGxlZCkgMjAuNDgzMSBUagotLTM2MiBUSm0KLShhcHByb3ByaWF0ZWx5KSA1My4xMjA2IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi03MiAyNzMuNjc0IFRkCi0oYXMpIDguMjk4ODUgVGoKLS0zMjIgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMzIzIFRKbQotKGRlc2NyaWJlZC4pIDQwLjY2NzMgVGoKLS0xMDU1IFRKbQotKFVwb24pIDIyLjEzNjkgVGoKLS0zMjIgVEptCi0ocmV0dXJuLCkgMjYuMjgxMyBUagotLTM0MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjIgVEptCi0oaW50ZXJuYWwpIDMwLjQzNTcgVGoKLS0zMjMgVEptCi0oc3RhdGUpIDE4LjI2MTQgVGoKLS0zMjIgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTMyMyBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzIyIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0zMjMgVEptCi0oYWxsb2NhdGVkKSAzNS45NjUgVGoKLS0zMjIgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjMgVEptCi0oaW5pdGlhbGlzZWQsKSA0MS43OTMxIFRqCi0tMzQwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0NTkuODAxIDI3My42NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU5LjgwMSAtMjczLjY3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU5LjgwMSAyNzMuNjc0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRvdGFsX2luX2xvMzIpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDUzNy41MDkgMjczLjY3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzcuNTA5IC0yNzMuNjc0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzcuNTA5IDI3My42NzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjYxLjcxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjYxLjcxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9pbl9oaTMyKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxNDkuNzA5IDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ5LjcwOSAyNjEuNzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE1NS4wMDYgMjYxLjcxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTUuMDA2IC0yNjEuNzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTUuMDA2IDI2MS43MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfb3V0X2xvMzIpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDIzOC42OTIgMjYxLjcxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzguNjkyIC0yNjEuNzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDEuNDM1IDI2MS43MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI1OC41NjQgMjYxLjcxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTguNTY0IC0yNjEuNzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTguNTY0IDI2MS43MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfb3V0X2hpMzIpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDM0Mi4yNSAyNjEuNzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi4yNSAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ0Ljk5NCAyNjEuNzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yNzUgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI3NiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjc1IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTI3NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjc2IFRKbQotKHplcm8uKSAxOS42MzYzIFRqCi0tNzcyIFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjc1IFRKbQotKGZvdXIpIDE2LjU5NzcgVGoKLS0yNzYgVEptCi0oXDAwMmVsZHMpIDIxLjU4OSBUagotLTI3NSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLTcyIDI0OS43NjMgVGQKLSh1c2VkKSAxOC4yNjE0IFRqCi0tMzQwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0zMzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zMzkgVEptCi0odG8pIDcuNzUwOSBUagotLTM0MCBUSm0KLShpbmZvcm0pIDI3LjExODIgVGoKLS0zMzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQwIFRKbQotKGNhbGxlcikgMjIuMTI2OSBUagotLTMzOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzkgVEptCi0odG90YWwpIDE3LjcxMzUgVGoKLS0zNDAgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tMzM5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zNDAgVEptCi0ocGFzc2VkKSAyNi41NjAzIFRqCi0tMzM5IFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0zNDAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMzkgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tMzQwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzYyIFRKbQotKHJlc3BlY3RpKSAzMC45ODM3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVseSkgMTIuMTc0MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotNzIgMjM3LjgwOCBUZAotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTM3NiBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zNzcgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzc2IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTM3NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzc3IFRKbQotKGNoYW5nZSkgMjguMjE0MSBUagotLTM3NiBUSm0KLSh0aGVtLikgMjIuNDE1OSBUagotLTEzNzggVEptCi0oQXMpIDExLjA2ODQgVGoKLS0zNzcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNzYgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0zNzcgVEptCi0oMS4wLCkgMTQuOTQzOSBUagotLTQwOCBUSm0KLSg2NC1iaXQpIDIzLjgwMDcgVGoKLS0zNzYgVEptCi0oY291bnRzKSAyNi4wMTIzIFRqCi0tMzc2IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM3NyBUSm0KLShtYWludGFpbmVkLCkgNDYuNzY0NCBUagotLTQwOCBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tMzc2IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zNzYgVEptCi0oMzItYml0KSAyMy44MDA3IFRqCi0tMzc3IFRKbQotKHBsYXRmb3JtcywpIDQwLjY3NzMgVGoKLTcyIDIyNS44NTMgVGQKLSh1c2luZykgMjEuNTg5IFRqCi0tMzcxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMTEzLjE0OCAyMjUuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy4xNDggLTIyNS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMy4xNDggMjI1Ljg1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShfaGkzMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTQzLjAzNiAyMjUuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0My4wMzYgLTIyNS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ni43MjkgMjI1Ljg1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAyZWxkcykgMjEuNTg5IFRqCi0tMzcxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNzAgVEptCi0oc3RvcmUpIDE5LjM2NzMgVGoKLS0zNzEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzcxIFRKbQotKHVwcGVyKSAyMi42ODQ4IFRqCi0tMzcwIFRKbQotKDMyKSA5Ljk2MjYgVGoKLS0zNzEgVEptCi0oYml0cykgMTQuMzk2IFRqCi0tMzcwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzcxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM3MSBUSm0KLShjb3VudC4pIDI0LjYyNzUgVGoKLS0xMzQ0IFRKbQotKFNvLCkgMTMuMDExMiBUagotLTQwMCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNzEgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGFtcGxlLCkgMzEuODIwNSBUagotLTQwMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzEgVEptCi0odG90YWwpIDE3LjcxMzUgVGoKLS0zNzAgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tMzcxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzcwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zNzEgVEptCi0oaW4pIDcuNzUwOSBUagotLTM3MSBUSm0KLShpcykgNi42NDUwNSBUagotWzEgMCAwIDEgNzIgMjEzLjg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjEzLjg5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjEzLjg5OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShcKHRvdGFsX2luX2hpMzIpIDgzLjY4NTggVGoKLS02MDAgVEptCi0oPDwpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oMzJcKSkgMTcuOTMyNyBUagotLTYwMCBUSm0KLSgrKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKHRvdGFsX2luX2xvMzIpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI5My4xNzEgMjEzLjg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTMuMTcxIC0yMTMuODk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTMuMTcxIDIxMy44OTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjEyLjU4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjAyLjYyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTkxLjk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFApIDUuNTM5MjEgVGoKLTE1IFRKbQotKGFyYW1ldGVyKSAzNC44NDkyIFRqCi1bMSAwIDAgMSAxMTUuMzY3IDE5MS45OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTUuMzY3IC0xOTEuOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNS4zNjcgMTkxLjk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJsb2NrU2l6ZTEwMGspIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE5My4wNzYgMTkxLjk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5My4wNzYgLTE5MS45OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk2LjIwNCAxOTEuOTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc3BlY2lcMDAyZXMpIDM0LjMxMTIgVGoKLS0zMTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE0IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzE0IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0zMTQgVEptCi0odG8pIDcuNzUwOSBUagotLTMxNCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMxNCBUSm0KLSh1c2VkKSAxOC4yNjE0IFRqCi0tMzE0IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMxNCBUSm0KLShjb21wcmVzc2lvbi4pIDUyLjg1MTYgVGoKLS0xMDA0IFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMzE0IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTMxNCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMxNSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzE0IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSkgMTYuNTk3NyBUagotLTMxNCBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi0tMzE0IFRKbQotKDEpIDQuOTgxMyBUagotNzIgMTgwLjAyNSBUZAotKGFuZCkgMTQuMzg2IFRqCi0tMjg5IFRKbQotKDkpIDQuOTgxMyBUagotLTI4OSBUSm0KLShpbmNsdXNpKSAyNi41NzAzIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUsKSA2LjkxNDA0IFRqCi0tMjk5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShhY3R1YWwpIDIzLjc5MDcgVGoKLS0yODkgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yODkgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI4OSBUSm0KLSh1c2VkKSAxOC4yNjE0IFRqCi0tMjg5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjg5IFRKbQotKDEwMDAwMCkgMjkuODg3OCBUagotLTI4OSBUSm0KLSh4KSA0Ljk4MTMgVGoKLS0yODkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjg5IFRKbQotKFwwMDJndXJlLikgMjUuNzMzNCBUagotLTg1NCBUSm0KLSg5KSA0Ljk4MTMgVGoKLS0yOTAgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oYmVzdCkgMTYuMDQ5NyBUagotLTI4OSBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI4OSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yODkgVEptCi0odGFrKSAxMi4xNzQzIFRqCi0xMCBUSm0KLShlcykgOC4yOTg4NSBUagotLTI4OSBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi03MiAxNjguMDcgVGQKLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDE2NS45MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE1NS45NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTQ2LjE1MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShhcmFtZXRlcikgMzQuODQ5MiBUagotWzEgMCAwIDEgMTE1LjA5NSAxNDYuMTUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNS4wOTUgLTE0Ni4xNTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNS4wOTUgMTQ2LjE1MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMTY4Ljg5MyAxNDYuMTUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OC44OTMgLTE0Ni4xNTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MS43NSAxNDYuMTUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTI4NyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4NiBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0yODcgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjg3IFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI4NiBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi0tMjg3IFRKbQotKDApIDQuOTgxMyBUagotLTI4NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4NyBUSm0KLSg0KSA0Ljk4MTMgVGoKLS0yODYgVEptCi0oaW5jbHVzaSkgMjYuNTcwMyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLikgNi45MTQwNCBUagotLTg0MSBUSm0KLSgwKSA0Ljk4MTMgVGoKLS0yODYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODcgVEptCi0oc2lsZW50LCkgMjQuMDc5NiBUagotLTI5NiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4NyBUSm0KLShncmVhdGVyKSAyNy42NTYyIFRqCi0tMjg3IFRKbQotKG51bWJlcnMpIDM0LjMxMTIgVGoKLS0yODYgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi03MiAxMzQuMTk3IFRkCi0oaW5jcmVhc2luZ2x5KSA0OC42OTcyIFRqCi0tMzQyIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJib3NlKSAyNi4wMDI0IFRqCi0tMzQyIFRKbQotKG1vbml0b3JpbmcvZGViKSA2MS40Mzk0IFRqCi0yMCBUSm0KLSh1Z2dpbmcpIDI3LjY3NjEgVGoKLS0zNDIgVEptCi0ob3V0cHV0LikgMjcuOTU1MSBUagotLTExNzMgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zNDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQyIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zNDIgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMzQyIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0zNDIgVEptCi0oY29tcGlsZWQpIDM3LjA4MDggVGoKLS0zNDIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDQ2LjQyOSAxMzQuMTk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0Ni40MjkgLTEzNC4xOTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0Ni40MjkgMTM0LjE5NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtREJaX05PX1NURElPKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA1MjQuMTM4IDEzNC4xOTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTI0LjEzOCAtMTM0LjE5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI0LjEzOCAxMzQuMTk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zNDIgVEptCi0obm8pIDkuOTYyNiBUagotNzIgMTIyLjI0MiBUZAotKHN1Y2gpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oYXBwZWFyKSAyNi41NTAzIFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJib3NpdHkpIDMyLjA5OTUgVGoKLS0yNTAgVEptCi0oc2V0dGluZy4pIDI5LjA2MDkgVGoKLVsxIDAgMCAxIDcyIDEyMC4wODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTExMC4xMjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwMC4zMjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUCkgNS41MzkyMSBUagotMTUgVEptCi0oYXJhbWV0ZXIpIDM0Ljg0OTIgVGoKLVsxIDAgMCAxIDExNi42MTkgMTAwLjMyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuNjE5IC0xMDAuMzI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuNjE5IDEwMC4zMjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotWzEgMCAwIDEgMTc2LjM5NCAxMDAuMzI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni4zOTQgLTEwMC4zMjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MC43NzUgMTAwLjMyNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb250cm9scykgMzIuMDk5NSBUagotLTQ0MCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTQzOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00NDAgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS00NDAgVEptCi0ocGhhc2UpIDIyLjY4NDggVGoKLS00MzkgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotLTQ0MCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS00MzkgVEptCi0ocHJlc2VudGVkKSAzOC4xNzY3IFRqCi0tNDQwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS00NDAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yc3QpIDE0Ljk0MzkgVGoKLS00MzkgVEptCi0oY2FzZSwpIDE5LjYzNjMgVGoKLS00ODcgVEptCi0oaGlnaGx5KSAyNS40NjQ0IFRqCi03MiA4OC4zNjg2IFRkCi0ocmVwZXRpdGkpIDI4LjIyNCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLCkgNi45MTQwNCBUagotLTQzMyBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTM5NiBUSm0KLShkYXRhLikgMTkuMDg4MyBUagotLTE0OTYgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zOTYgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zOTYgVEptCi0ocnVucykgMTcuMTU1NiBUagotLTM5NyBUSm0KLShpKSAyLjc2OTYgVGoKLTEgVEptCi0obnRvKSAxMi43MzIyIFRqCi0tMzk3IFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHRpZXMpIDMxLjU1MTYgVGoKLS0zOTYgVEptCi0oY2F1c2VkKSAyNy4xMDgyIFRqCi0tMzk2IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0zOTYgVEptCi0ocmVwZXRpdGkpIDI4LjIyNCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzk2IFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tNDMyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM5NyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzk2IFRKbQotKHN3aXRjaGVzKSAzNC4zMTEyIFRqCi0tMzk2IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLVsxIDAgMCAxIDcyIDUwLjg1MThdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC44NTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTIpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTYgMTYKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC03NDEuNTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRoZSkgMTIuMTc0MyBUagotLTI1NSBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1NCBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjU1IFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTI1NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjU1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTUgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWxsYmFjaykgMjguNzcyIFRqCi0tMjU0IFRKbQotKGFsZ29yaXRobS4pIDQxLjIzNTIgVGoKLS02NDggVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjU1IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFsbGJhY2spIDI4Ljc3MiBUagotLTI1NCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1NSBUSm0KLShzbG8pIDExLjYyNjQgVGoKLTI1IFRKbQotKHdlcikgMTQuOTMzOSBUagotLTI1NSBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMjU0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1NSBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1NCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNTUgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1NSBUSm0KLShwZXJoYXBzKSAzMC45ODM3IFRqCi03MiA2OTguMDgyIFRkCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY3RvcikgMTkuOTE1MiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aHJlZSwpIDIyLjQwNTkgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFsKSA3LjE5MyBUagotMTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5cykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShiZWhhKSAxOC44MDk0IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHJlYXNvbmFibHkpIDQzLjE1OCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShubykgOS45NjI2IFRqCi0tMjUwIFRKbQotKG1hdHRlcikgMjUuNDU0NCBUagotLTI1MCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLShiYWQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oaW5wdXQuKSAyMi45NzM4IFRqCi1bMSAwIDAgMSA3MiA2OTUuOTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02ODUuOTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzYuMTY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKExvKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh3ZXIpIDE0LjkzMzkgVGoKLS0yNDAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcykgMjAuNDczMSBUagotLTIzOSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTM4LjQyMSA2NzYuMTY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC40MjEgLTY3Ni4xNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzOC40MjEgNjc2LjE2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxOTguMTk3IDY3Ni4xNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk4LjE5NyAtNjc2LjE2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAwLjU4NSA2NzYuMTY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlZHVjZSkgMjYuNTUwMyBUagotLTI0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzkgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tMjQwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjQwIFRKbQotKGVmKSA3Ljc0MDk0IFRqCi0yNSBUSm0KLShmb3J0KSAxNC4zODYgVGoKLS0yMzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQwIFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi0tMjQwIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTIzOSBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjQwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhwZW5kKSAyNC4zNDg2IFRqCi0tMjQwIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI0MCBUSm0KLShyZXNvcnRpbmcpIDM1LjQxNyBUagotLTIzOSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgNjY0LjIxIFRkCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWxsYmFjay4pIDMxLjI2MjYgVGoKLS02MTggVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjQ4IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI0NyBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0yNDggVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjQ3IFRKbQotKHBhcmFtZXRlcikgMzkuODMwNSBUagotLTI0OCBUSm0KLShjYXJlZnVsbHk7KSAzOC4xNzY3IFRqCi0tMjQ4IFRKbQotKHRvbykgMTIuNzMyMiBUagotLTI0OCBUSm0KLShsbykgNy43NTA5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI0OCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI0NyBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI0OCBUSm0KLShpbnB1dHMpIDI0LjM1ODYgVGoKLS0yNDggVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI0NyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI0OCBUSm0KLShoYW5kbGVkKSAzMS41NDE2IFRqCi0tMjQ3IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ3IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFsbGJhY2spIDI4Ljc3MiBUagotLTI0OCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLTcyIDY1Mi4yNTUgVGQKLShhbmQpIDE0LjM4NiBUagotLTMwOCBUSm0KLShzbykgOC44NTY3NSBUagotLTMwOCBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTMwOCBUSm0KLShyYXRoZXIpIDIzLjIzMjggVGoKLS0zMDkgVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3bHkpIDE0Ljk0MzkgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMjIgVEptCi0odG9vKSAxMi43MzIyIFRqCi0tMzA5IFRKbQotKGhpZ2gsKSAyMC4yMDQyIFRqCi0tMzIyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzA4IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0zMDkgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmFnZS10by13KSA0My4xNDggVGoKLTEwIFRKbQotKG9yc3QpIDE0Ljk0MzkgVGoKLS0zMDggVEptCi0oY2FzZSkgMTcuMTQ1NiBUagotLTMwOCBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTMwOCBUSm0KLSh0aW1lcykgMjEuNTg5IFRqCi0tMzA4IFRKbQotKGNhbikgMTMuODI4MSBUagotLTMwOCBUSm0KLShiZWNvbWUpIDMwLjk4MzcgVGoKLS0zMDkgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0zMDggVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZS4pIDExLjg5NTMgVGoKLTcyIDY0MC4zIFRkCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oMzApIDkuOTYyNiBUagotLTI1MCBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHJlYXNvbmFibGUpIDQyLjYwMDEgVGoKLS0yNTAgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odmlvdXIpIDIxLjAzMSBUagotLTI1MCBUSm0KLShvKSA0Ljk4MTMgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh3aWRlKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHJhbmdlKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNpcmN1bXN0YW5jZXMuKSA1OC45Mjg4IFRqCi1bMSAwIDAgMSA3MiA2MzguMTQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MjguMTgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTguMzgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0ocmFuZ2UpIDIyLjEyNjkgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSgwKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSgyNTApIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oaW5jbHVzaSkgMjYuNTcwMyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLikgNi45MTQwNCBUagotLTYyMCBUSm0KLSgwKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShzcGVjaWFsKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi0tMjUwIFRKbQotKGVxdWkpIDE3LjE1NTYgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWxlbnQpIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKDMwLikgMTIuNDUzMyBUagotWzEgMCAwIDEgNzIgNjE2LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjA2LjI2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTk2LjQ2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShOb3RlKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKGdlbmVyYXRlZCkgMzguNzI0NiBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShyZSkgNy43NDA5NCBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFyZGxlc3MpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0od2hldGhlcikgMzIuMDg5NSBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFsbGJhY2spIDI4Ljc3MiBUagotLTI1MCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odXNlZC4pIDIwLjc1MjEgVGoKLVsxIDAgMCAxIDcyIDU5NC4zMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4NC4zNDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3NC41NDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmUpIDExLjA2ODQgVGoKLS0zMDMgVEptCi0oYSkgNC40MjMzOSBUagotMTUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTMwMyBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMzAzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMDMgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMzA0IFRKbQotKHBhcmFtZXRlcikgMzkuODMwNSBUagotLTMwMyBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0zMDMgVEptCi0oZGlzYXBwZWFyKSAzOC4xNzY3IFRqCi0tMzAzIFRKbQotKGVudGlyZWx5KSAzMC40MzU3IFRqCi0tMzAzIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMDMgVEptCi0oZnV0dXJlKSAyMy43OTA3IFRqCi0tMzAzIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMzAzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzAzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tOTM4IFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMzAzIFRKbQotKHByaW5jaXBsZSkgMzUuNDE3IFRqCi0tMzAzIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzA0IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTMwMyBUSm0KLShiZSkgOS40MDQ2OSBUagotNzIgNTYyLjU5NCBUZAotKHBvc3NpYmxlKSAzMi42NTc0IFRqCi0tMjcwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzAgVEptCi0oZGUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHZpc2UpIDE2LjA0OTcgVGoKLS0yNzAgVEptCi0oYSkgNC40MjMzOSBUagotLTI3MCBUSm0KLShnb29kKSAxOS45MjUyIFRqCi0tMjcwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTI3MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcxIFRKbQotKGF1dG9tYXQpIDMyLjA5OTUgVGoKLTEgVEptCi0oaWNhbGx5KSAyMi4xMzY5IFRqCi0tMjcxIFRKbQotKGNob29zZSkgMjcuNjY2MSBUagotLTI3MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI3MCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNzAgVEptCi0odG8pIDcuNzUwOSBUagotLTI3MCBUSm0KLSh1c2UuKSAxNS43NzA4IFRqCi0tNzQwIFRKbQotKFN1Y2gpIDE5LjkyNTIgVGoKLS0yNzAgVEptCi0oYSkgNC40MjMzOSBUagotLTI3MSBUSm0KLShtKSA3Ljc1MDkgVGoKLTEgVEptCi0oZWNoYW5pc20pIDM3LjYyODcgVGoKLS0yNzEgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yNzAgVEptCi0ocmVuZGVyKSAyNS40NDQ1IFRqCi0tMjcwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgNTUwLjYzOSBUZAotKHBhcmFtZXRlcikgMzkuODMwNSBUagotLTI1MCBUSm0KLShvYnNvbGV0ZS4pIDM1LjY5NiBUagotWzEgMCAwIDEgNzIgNTQ4LjQ4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTM4LjUyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI4LjcyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDUyOC42MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xNDQuNDU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDE0My40NjIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxMzkuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTE5LjI1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTE5LjI1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNTA3LjMwMyBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWJyYXJ5KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG1pcy1jb21waWxlZCkgNzEuNzMwNyBUagotOTAgNDk1LjM0OCBUZAotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDQ4My4zOTIgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLTk4LjQ4NzkgNDcxLjQzNyBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJsb2NrU2l6ZSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDkpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNDU5LjQ4MiBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDQpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNDQ3LjUyNyBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgyNTApIDE3LjkzMjcgVGoKLTkwIDQzNS41NzIgVGQKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLTk4LjQ4NzkgNDIzLjYxNyBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShlbm91Z2gpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA0MTEuNjYxIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgMzk5LjcwNiBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAzODQuMTY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3NC4yMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM2Mi4yNDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsbykgMTcuNzEzNSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWN0aW9uczopIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDcyIDM2Mi4xNDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC00OC44MTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDQ3LjgyMDcgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA0NC4yMzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzUyLjc4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzUyLjc4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotOTguNDg3OSAzNDAuODI4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocmV0dXJuZWQpIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgMzI4Ljg3MyBUZAotKG5vKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNwZWNpZmljKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFjdGlvbikgMzUuODY1NCBUagotLTQyNiBUSm0KLShuZWVkZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oY2FzZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotWzEgMCAwIDEgNzIgMzEzLjMzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMwMy4zN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjgyLjcxMSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4zLjIuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDI4Mi43MTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMjgyLjcxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAyODIuNzExIFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpDb21wcmVzcykgMTQ0LjYwOSBUagotWzEgMCAwIDEgMjY0LjQ2OCAyODIuNzExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi40NjggLTIuMzMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0yNzEuMDE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAyNzEuMDE0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW0pIDUzLjc5OCBUagotMjY4LjM3MSAyNjkuMjcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNzQuMzQ4IDI3MS4wMTQgVGQKLShzdHJtLCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWN0aW9uKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMjU1LjQ3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDUuNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIzMy41NTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvKSAxMy44MzgxIFRqCi0xNSBUSm0KLSh2aWRlcykgMjEuMDMxIFRqCi0tMjIyIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yMjEgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0yMjIgVEptCi0oYW5kL29yKSAyNS40NTQ0IFRqCi0tMjIyIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTIyMiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yMjEgVEptCi0oc3BhY2UpIDIyLjEyNjkgVGoKLS0yMjIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjIyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyMSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjAxIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTIyMiBUSm0KLShjYWxsZXIpIDIyLjEyNjkgVGoKLS0yMjIgVEptCi0obWFpbnRhaW5zKSAzOC43NDQ2IFRqCi0tMjIyIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjIxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjIyIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTIyMiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXJzLCkgMTcuNDI0NiBUagotLTIyNyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMiBUSm0KLShjYWxscykgMTguMjYxNCBUagotWzEgMCAwIDEgNzIgMjIxLjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIyMS42XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMjEuNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAyMjEuNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTUuNjg2IC0yMjEuNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjE3NyAyMjEuNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRyYW5zZmVyKSAzMC40MjU4IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotLTI1MCBUSm0KLSh0aGVtLikgMjIuNDE1OSBUagotWzEgMCAwIDEgNzIgMjIwLjA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjEwLjEwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTk5LjY4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShCZWZvcmUpIDI3LjEwODIgVGoKLS0yMTIgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTIxMyBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yMTIgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTQ3Ljk2MSAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny45NjEgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ny45NjEgMTk5LjY4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjMxLjY0NyAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMS42NDcgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzMS42NDcgMTk5LjY4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMzYuMzI5IDE5OS42ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM2LjMyOSAtMTk5LjY4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM2LjMyOSAxOTkuNjgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfaW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI3OC4xNzIgMTk5LjY4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMTcyIC0xOTkuNjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODAuMjg4IDE5OS42ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjEyIFRKbQotKHBvaW50KSAyMC40ODMxIFRqCi0tMjEzIFRKbQotKGF0KSA3LjE5MyBUagotLTIxMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMTMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTIxMiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjEyIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjEzIFRKbQotKGNvbXByZXNzZWQsKSA0OS41MjQxIFRqCi0tMjIwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0NjMuNDkzIDE5OS42ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYzLjQ5MyAtMTk5LjY4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDYzLjQ5MyAxOTkuNjgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF2YWlsX2luKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1MTEuMzE0IDE5OS42ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjMxNCAtMTk5LjY4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTEzLjQzIDE5OS42ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi03MiAxODcuNzI4IFRkCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS0yNDYgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNDcgVEptCi0obSkgNy43NTA5IFRqCi0xIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNCBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNDYgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI0NyBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNDYgVEptCi0ocmVhZC4pIDE5LjYzNjMgVGoKLVsxIDAgMCAxIDI1OS4yNDIgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTkuMjQyIC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTkuMjQyIDE4Ny43MjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDM0Mi45MjkgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuOTI5IC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDUuMzgyIDE4Ny43MjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odXBkYXRlcykgMzAuNDM1NyBUagotWzEgMCAwIDEgMzc4LjI3MSAxODcuNzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3OC4yNzEgLTE4Ny43MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3OC4yNzEgMTg3LjcyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0MjAuMTE0IDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIwLjExNCAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIwLjExNCAxODcuNzI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQyNS4wNjYgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjUuMDY2IC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjUuMDY2IDE4Ny43MjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQ3Mi44ODYgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuODg2IC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzUuMzQgMTg3LjcyOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDkyLjE3OSAxODcuNzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Mi4xNzkgLTE4Ny43MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Mi4xNzkgMTg3LjcyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQwIDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzUuNzczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVcMDAzZWN0KSAyNC44OTY1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0ocmVhZC4pIDE5LjYzNjMgVGoKLVsxIDAgMCAxIDcyIDE3My42MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE2My42NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE1My44NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oU2ltaWxhcmx5KSAzNy4wOTA4IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMTMuNjExIDE1My44NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjYxMSAtMTUzLjg1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTEzLjYxMSAxNTMuODU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAxNjEuNDMyIDE1My44NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjQzMiAtMTUzLjg1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY0LjA3MiAxNTMuODU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTI2NSBUSm0KLShwb2ludCkgMjAuNDgzMSBUagotLTI2NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNjUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjY1IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNjUgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY1IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNjUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2NSBUSm0KLShpcykgNi42NDUwNSBUagotLTI2NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjY1IFRKbQotKHBsYWNlZCwpIDI4LjQ5MyBUagotLTI2OSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0NjQuNzQyIDE1My44NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY0Ljc0MiAtMTUzLjg1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY0Ljc0MiAxNTMuODU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF2YWlsX291dCkgNTMuNzk4IFRqCi1bMSAwIDAgMSA1MTguNTQgMTUzLjg1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTguNTQgLTE1My44NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyMS4xODEgMTUzLjg1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbmRpLSkgMTguODE5NCBUagotNzIgMTQxLjkwMSBUZAotKGNhdGluZykgMjQuMzQ4NiBUagotLTIwOSBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTIwOSBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMjA5IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTIwOSBUSm0KLShzcGFjZSkgMjIuMTI2OSBUagotLTIwOSBUSm0KLShpcykgNi42NDUwNSBUagotLTIxMCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUuKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSAyNDMuMDg3IDE0MS45MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQzLjA4NyAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQzLjA4NyAxNDEuOTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzMjYuNzczIDE0MS45MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI2Ljc3MyAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI4Ljg1NiAxNDEuOTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVwZGF0ZXMpIDMwLjQzNTcgVGoKLVsxIDAgMCAxIDM2MS4zNzUgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjEuMzc1IC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjEuMzc1IDE0MS45MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQwOS4xOTYgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDkuMTk2IC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDkuMTk2IDE0MS45MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDEzLjg1MSAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMy44NTEgLTE0MS45MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMy44NTEgMTQxLjkwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9vdXQpIDUzLjc5OCBUagotWzEgMCAwIDEgNDY3LjY0OSAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ny42NDkgLTE0MS45MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2OS43MzIgMTQxLjkwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDg2LjIwMiAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ni4yMDIgLTE0MS45MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ni4yMDIgMTQxLjkwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9vdXQpIDUzLjc5OCBUagotWzEgMCAwIDEgNTQwIDE0MS45MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMjkuOTQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVcMDAzZWN0KSAyNC44OTY1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI1MCBUSm0KLShvdXRwdXQuKSAyNy45NTUxIFRqCi1bMSAwIDAgMSA3MiAxMjcuNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTcuODI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDguMDI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI3MiBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNzIgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlKSAxNy4xNTU2IFRqCi0tMjcyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjcyIFRKbQotKHJlbW8pIDIwLjQ3MzEgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI3MiBUSm0KLShhcykgOC4yOTg4NSBUagotLTI3MiBUSm0KLShsaXR0bGUpIDE4LjI3MTQgVGoKLS0yNzIgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTI3MSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjcyIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI3MiBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNzIgVEptCi0ob24pIDkuOTYyNiBUagotLTI3MiBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjcyIFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTI3MiBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMzk5LjEyMyAxMDguMDI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5OS4xMjMgLTEwOC4wMjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5OS4xMjMgMTA4LjAyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgNDgyLjgwOSAxMDguMDI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Mi44MDkgLTEwOC4wMjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Mi44MDkgMTA4LjAyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzUyIFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MiBUSm0KLShsaW1pdCwpIDIxLjMyIFRqCi03MiA5Ni4wNzM2IFRkCi0oaXQpIDUuNTM5MjEgVGoKLS0yNjYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjUgVEptCi0oYWNjZXB0YWJsZSkgNDIuMDQyMiBUagotLTI2NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY2IFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotLTI2NiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2NSBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjYgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2NiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI2NSBUSm0KLShieXRlKSAxNy4xNTU2IFRqCi0tMjY2IFRKbQotKGF0KSA3LjE5MyBUagotLTI2NiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY2IFRKbQotKHRpbWUsKSAyMC4yMDQyIFRqCi0tMjY5IFRKbQotKGFsdGhvdWdoKSAzNC44NjkxIFRqCi0tMjY2IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2NiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZCkgMTcuNzEzNSBUagotLTI2NSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI2NiBUSm0KLSh0ZXJyaWJseSkgMjkuMzI5OSBUagotLTI2NiBUSm0KLShpbmVmKSAxNS40OTE4IFRqCi0yNSBUSm0KLShcMDAyY2llbnQuKSAyNy4zOTcyIFRqCi0tNzE0IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI2NiBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLTcyIDg0LjExODQgVGQKLShhbCkgNy4xOTMgVGoKLTEwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZW5zdXJlKSAyNi4wMDI0IFRqCi0tMjUwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGxlYXN0KSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGJ5dGUpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKHNwYWNlKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWlsYWJsZSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTI1MCBUSm0KLShjYWxsLikgMTYuODc2NiBUagotWzEgMCAwIDEgNzIgODEuOTYxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjE0ODJdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTMpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTcgMTcKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC03NDEuNTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEEpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHNlY29uZCkgMjcuNjY2MSBUagotLTI1MCBUSm0KLShwdXJwb3NlKSAzMS41NDE2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAxNTYuNjYyIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU2LjY2MiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU2LjY2MiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyNDAuMzQ4IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjM0OCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQyLjgzOSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVxdWVzdCkgMjguNzcyIFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY2hhbmdlKSAyOC4yMTQxIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKG1vZGUpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgNzA3Ljg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02OTcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2ODguMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ29uY2VwdHVhbGx5KSA1My4xMzA1IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjE3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTIwOSBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yMDkgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjA5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjEwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMDkgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yMDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMDkgVEptCi0oZm91cikgMTYuNTk3NyBUagotLTIxMCBUSm0KLShzdGF0ZXM6KSAyNC45MDY1IFRqCi0tMjg5IFRKbQotKElETEUsKSAyNS4xNzU1IFRqCi0tMjA5IFRKbQotKFIpIDYuNjQ1MDUgVGoKLTQwIFRKbQotKFVOTklORywpIDQxLjc3MzIgVGoKLS0yMTAgVEptCi0oRkxVU0hJTkcpIDQ5LjI1NTEgVGoKLS0yMDkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMDkgVEptCi0oRklOSVNISU5HLikgNTIuMjkzNyBUagotLTQxOSBUSm0KLShCZS0pIDE0LjM4NiBUagotNzIgNjc2LjE2NCBUZAotKGZvcmUpIDE2LjAzOTggVGoKLS0yNjQgVEptCi0oaW5pdGlhbGlzYXRpb24pIDQ5LjgyMyBUagotLTI2MyBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTQ2LjQzNCA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ni40MzQgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ni40MzQgNjc2LjE2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDI1NC4wMzEgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTQuMDMxIC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTQuMDMxIDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yNjQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjMgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yNjQgVEptCi0odGVybWluYXRpb24pIDQ1LjkzNzUgVGoKLS0yNjQgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDM0OS43NSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0OS43NSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ5Ljc1IDY3Ni4xNjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDQ1MS4zNjkgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTEuMzY5IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTEuMzY5IDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCksKSA1LjgwODIgVGoKLS0yNjcgVEptCi0oYSkgNC40MjMzOSBUagotLTI2NCBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yNjQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjMgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhcmRlZCkgMjIuMTI2OSBUagotNzIgNjY0LjIwOSBUZAotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKElETEUuKSAyNS4xNzU1IFRqCi1bMSAwIDAgMSA3MiA2NjQuMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY1NC4xNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVXBvbikgMjIuMTM2OSBUagotLTM4OSBUSm0KLShpbml0aWFsaXNhdGlvbikgNDkuODIzIFRqCi0tMzkwIFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxNTUuMDM2IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjAzNiAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU1LjAzNiA2NDIuMjkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgMjYyLjYzMiA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Mi42MzIgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Mi42MzIgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSwpIDUuODA4MiBUagotLTQyNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zOTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMzg5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzg5IFRKbQotKHBsYWNlZCkgMjYuMDAyNCBUagotLTM5MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM5MCBUSm0KLShSKSA2LjY0NTA1IFRqCi00MCBUSm0KLShVTk5JTkcpIDM5LjI4MjUgVGoKLS0zODkgVEptCi0oc3RhdGUuKSAyMC43NTIxIFRqCi0tMTQ1NyBUSm0KLShTdWJzZXF1ZW50KSA0NS45Mzc1IFRqCi0tMzg5IFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi03MiA2MzAuMzM2IFRkCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgODMuODE4IDYzMC4zMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODMuODE4IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04My44MTggNjMwLjMzNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTY3LjUwNCA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Ny41MDQgLTYzMC4zMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MS41NzEgNjMwLjMzNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS00MDggVEptCi0ocGFzcykgMTcuMTU1NiBUagotWzEgMCAwIDEgMjIzLjQzMSA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMy40MzEgLTYzMC4zMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMy40MzEgNjMwLjMzNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9SVU4pIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDI1OS4yOTcgNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTkuMjk3IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjMuMzYzIDYzMC4zMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXMpIDguMjk4ODUgVGoKLS00MDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDA4IFRKbQotKHJlcXVlc3RlZCkgMzguMTc2NyBUagotLTQwOSBUSm0KLShhY3Rpb247KSAyNy4xMTgyIFRqCi0tNDg3IFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tNDA4IFRKbQotKGFjdGlvbnMpIDI4LjIyNCBUagotLTQwOCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS00MDkgVEptCi0oaWxsZSkgMTIuNzMyMiBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFsKSA3LjE5MyBUagotLTQwOCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTQwOCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tNDA4IFRKbQotKHJlc3VsdCkgMjIuMTM2OSBUagotLTQwOSBUSm0KLShpbikgNy43NTA5IFRqCi1bMSAwIDAgMSA3MiA2MTguMzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTguMzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTguMzgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAxNzMuNjE5IDYxOC4zODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTczLjYxOSAtNjE4LjM4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTczLjYxOSA2MTguMzgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDYxNy4wNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwNy4xMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5Ni40NjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQXQpIDkuOTYyNiBUagotLTI3OSBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNzkgVEptCi0ocG9pbnQsKSAyMi45NzM4IFRqCi0tMjg2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3OSBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi0tMjc5IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yNzkgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI3OSBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjc4IFRKbQotKHBybykgMTMuMjgwMSBUagotMTQgVEptCi0odmkpIDcuNzUwOSBUagotMSBUSm0KLShkZWQpIDE0LjM4NiBUagotLTI3OSBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI3OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0yNzkgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI3OSBUSm0KLShpdCkgNS41MzkyMSBUagotLTI3OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50cykgMTYuMDQ5NyBUagotLTI3OSBUSm0KLSh0by4pIDEwLjI0MTYgVGoKLS03OTMgVEptCi0oSXQpIDYuMDg3MTUgVGoKLS0yNzkgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI3OSBUSm0KLSh0aGVuKSAxNy4xNTU2IFRqCi0tMjc5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0odG8pIDcuNzUwOSBUagotLTI3OSBUSm0KLShcMDAybmlzaCkgMjIuMTQ2OSBUagotLTI3OSBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjc5IFRKbQotKC0tKSA2LjYzNTA5IFRqCi03MiA1ODQuNTA4IFRkCi0oaW4pIDcuNzUwOSBUagotLTI4NyBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oZmVjdCwpIDE3LjQyNDYgVGoKLS0yOTcgVEptCi0oYXNraW5nKSAyNi4wMTIzIFRqCi0tMjg4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjg3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODggVEptCi0ocHJvY2VzcykgMjkuODc3OCBUagotLTI4NyBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjg4IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yODcgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yODcgVEptCi0obWlnaHQpIDIzLjI1MjcgVGoKLS0yODggVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI4NyBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXJlZCkgMjAuNDYzMiBUagotLTI4OCBUSm0KLShpbnRlcm5hbGx5KSAzOC4xODY2IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tODQ0IFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjg4IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4NyBUSm0KLShzdGF0ZSwpIDIwLjc1MjEgVGoKLVsxIDAgMCAxIDQ1Ni4zMTQgNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTYuMzE0IC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTYuMzE0IDU4NC41MDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDU0MCA1ODQuNTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTcyLjU1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjU4IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTcgVEptCi0obG9uZ2VyKSAyNS40NTQ0IFRqCi0tMjU4IFRKbQotKGF0dGVtcHQpIDI5Ljg4NzggVGoKLS0yNTggVEptCi0odG8pIDcuNzUwOSBUagotLTI1OCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjU3IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTggVEptCi0oZnJvbSkgMTkuMzY3MyBUagotWzEgMCAwIDEgMjM0LjIwNyA1NzIuNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNC4yMDcgLTU3Mi41NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNC4yMDcgNTcyLjU1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyNzYuMDUxIDU3Mi41NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc2LjA1MSAtNTcyLjU1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc2LjA1MSA1NzIuNTUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNjAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjU3IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjU4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTggVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjU4IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMjU4IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTggVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgNDA3LjA4MiA1NzIuNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNy4wODIgLTU3Mi41NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNy4wODIgNTcyLjU1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X291dCkgNDcuODIwNSBUagotWzEgMCAwIDEgNDU0LjkwMiA1NzIuNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NC45MDIgLTU3Mi41NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1NC45MDIgNTcyLjU1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNjY2IFRKbQotKEJlY2F1c2UpIDMzLjE5NTQgVGoKLS0yNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU4IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotNzIgNTYwLjU5OCBUZAotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTIyOCBUSm0KLShzdXBwbGllZCkgMzMuNzYzMyBUagotLTIyOCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjI5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyOCBUSm0KLSh1c2VyKSAxNi41OTc3IFRqCi0tMjI4IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIyOCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIyOCBUSm0KLShhcmJpdHJhcmlseSkgMzkuODQwNCBUagotLTIyOSBUSm0KLShzbWEpIDE2LjA0OTcgVGoKLTEgVEptCi0obGwsKSA4LjAyOTg2IFRqCi0tMjMzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyOCBUSm0KLShcMDAybmlzaGluZy11cCkgNDguMTU5MiBUagotLTIyOCBUSm0KLShvcGVyYXRpb24pIDM3LjYyODcgVGoKLS0yMjkgVEptCi0oY2Fubm90KSAyNi41NjAzIFRqCi0tMjI4IFRKbQotKG5lY2Vzc2FyaWx5KSA0NC4yNjM4IFRqCi0tMjI4IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjI4IFRKbQotKGRvbmUpIDE5LjM2NzMgVGoKLS0yMjggVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTIyOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjI4IFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotNzIgNTQ4LjY0MyBUZAotKGNhbGwpIDE0LjM4NiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgOTkuNjY1OSA1NDguNjQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk5LjY2NTkgLTU0OC42NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk5LjY2NTkgNTQ4LjY0MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTgzLjM1MiA1NDguNjQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4My4zNTIgLTU0OC42NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4My4zNTIgNTQ4LjY0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1NDcuMTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MzcuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MjYuNzI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluc3RlYWQsKSAzMS4yNjI2IFRqCi0tMzQ2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyNyBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi0tMzI2IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0zMjcgVEptCi0ocGFzc2VzKSAyNS40NTQ0IFRqCi1bMSAwIDAgMSAyMTguMjMxIDUyNi43MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE4LjIzMSAtNTI2LjcyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE4LjIzMSA1MjYuNzI1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0ZJTklTSCkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNzIuMDI5IDUyNi43MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjAyOSAtNTI2LjcyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc1LjI4NCA1MjYuNzI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFzKSA4LjI5ODg1IFRqCi0tMzI3IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMzI3IFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTMyNiBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAzMzguMTA4IDUyNi43MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM4LjEwOCAtNTI2LjcyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM4LjEwOCA1MjYuNzI1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSA0MjEuNzk1IDUyNi43MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIxLjc5NSAtNTI2LjcyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIxLjc5NSA1MjYuNzI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMDgxIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0zMjYgVEptCi0oY2hhbmdlcykgMzIuMDg5NSBUagotLTMyNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjcgVEptCi0oc3RyZWFtJykgMjkuODc3OCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotNzIgNTE0Ljc3IFRkCi0oc3RhdGUpIDE4LjI2MTQgVGoKLS0yOTEgVEptCi0odG8pIDcuNzUwOSBUagotLTI5MCBUSm0KLShGSU5JU0hJTkcuKSA1Mi4yOTM3IFRqCi0tNTgxIFRKbQotKEFuKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yOTEgVEptCi0ocmVtYWluaW5nKSA0MC4zOTgzIFRqCi0tMjkwIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjkxIFRKbQotKFwoaWUsKSAxMy4wMDEyIFRqCi1bMSAwIDAgMSAyNjQuNDUyIDUxNC43N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjQuNDUyIC01MTQuNzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2NC40NTIgNTE0Ljc3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfaW5bMCkgNTMuNzk4IFRqCi0tNjAwIFRKbQotKC4uKSAxMS45NTUxIFRqCi0tMTIwMCBUSm0KLShhdmFpbF9pbi0xXSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDEzLjg5MiA1MTQuNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEzLjg5MiAtNTE0Ljc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTMuODkyIDUxNC43NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTI5MSBUSm0KLShpcykgNi42NDUwNSBUagotLTI5MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjkxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjkwIFRKbQotKHRyYW5zZmVycmVkKSA0My4xNDggVGoKLTcyIDUwMi44MTQgVGQKLSh0bykgNy43NTA5IFRqCi0tNDIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQyMSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS00MjEgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTY0NiBUSm0KLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvKSA0Ljk4MTMgVGoKLS00MjEgVEptCi0oZG8pIDkuOTYyNiBUagotLTQyMiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLTEgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjIyLjMzOSA1MDIuODE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMi4zMzkgLTUwMi44MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMi4zMzkgNTAyLjgxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzA2LjAyNSA1MDIuODE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNi4wMjUgLTUwMi44MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMC4yMiA1MDIuODE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG11c3QpIDE5LjM3NzMgVGoKLS00MjEgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS00MjEgVEptCi0oY2FsbGVkKSAyMy43OTA3IFRqCi0tNDIxIFRKbQotKHJlcGVhdGVkbHkpIDQxLjQ5NDIgVGoKLS00MjEgVEptCi0odW50aWwpIDE4LjI3MTQgVGoKLS00MjEgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS00MjEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDIxIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTQyMSBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS00MjEgVEptCi0oYmVlbikgMTguODA5NCBUagotNzIgNDkwLjg1OSBUZAotKGNvbnN1bWVkLikgNDIuODg5IFRqCi0tMTM5NyBUSm0KLShBdCkgOS45NjI2IFRqCi0tMzc5IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zODAgVEptCi0ocG9pbnQsKSAyMi45NzM4IFRqCi1bMSAwIDAgMSAxODguMzQ2IDQ5MC44NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg4LjM0NiAtNDkwLjg1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg4LjM0NiA0OTAuODU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyNzIuMDMzIDQ5MC44NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjAzMyAtNDkwLjg1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc1LjgxMyA0OTAuODU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJldHVybnMpIDI3LjY2NjEgVGoKLVsxIDAgMCAxIDMwNy4yNTkgNDkwLjg1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDcuMjU5IC00OTAuODU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDcuMjU5IDQ5MC44NTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMzg0Ljk2OCA0OTAuODU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4NC45NjggLTQ5MC44NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4NC45NjggNDkwLjg1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzc5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzgwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM3OSBUSm0KLShzdHJlYW0nKSAyOS44Nzc4IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzgwIFRKbQotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMzc5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzgwIFRKbQotKHNldCkgMTEuMDY4NCBUagotLTM3OSBUSm0KLShiYWNrKSAxOC44MDk0IFRqCi0tMzc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDQ3OC45MDQgVGQKLShJRExFLikgMjUuMTc1NSBUagotWzEgMCAwIDEgOTkuNjY2MiA0NzguOTA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk5LjY2NjIgLTQ3OC45MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk5LjY2NjIgNDc4LjkwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMjAxLjI4NSA0NzguOTA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMS4yODUgLTQ3OC45MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMy43NzYgNDc4LjkwNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShjYWxsZWQuKSAyNi4yODEzIFRqCi1bMSAwIDAgMSA3MiA0NzcuMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ2Ny40MDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ1Ni45ODYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSnVzdCkgMTUuNTAxOCBUagotLTM4MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzgwIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTM3OSBUSm0KLShzdXJlKSAxNi41OTc3IFRqCi0tMzgwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4MCBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi0tMzgwIFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0zNzkgVEptCi0oZG9lcykgMTguMjYxNCBUagotLTM4MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zODAgVEptCi0oY2hlYXQsKSAyMy41MTE3IFRqCi0tNDEyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzgwIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0zNzkgVEptCi0oYSkgNC40MjMzOSBUagotLTM4MCBUSm0KLShub3RlKSAxNy4xNTU2IFRqCi0tMzgwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MTUuNzA4IDQ1Ni45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE1LjcwOCAtNDU2Ljk4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE1LjcwOCA0NTYuOTg2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF2YWlsX2luKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0NjMuNTI4IDQ1Ni45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYzLjUyOCAtNDU2Ljk4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY3LjMxMiA0NTYuOTg2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGF0KSA3LjE5MyBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODAgVEptCi0odGltZSkgMTcuNzEzNSBUagotLTM3OSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDQ0NS4wMzEgVGQKLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjg2IFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTI4NiBUSm0KLSh0KSAyLjc2OTYgVGoKLTEgVEptCi0obykgNC45ODEzIFRqCi1bMSAwIDAgMSAxMTguMTc5IDQ0NS4wMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE4LjE3OSAtNDQ1LjAzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE4LjE3OSA0NDUuMDMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyMDEuODY1IDQ0NS4wMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAxLjg2NSAtNDQ1LjAzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjcxMyA0NDUuMDMxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjg2IFRKbQotKGhhcykgMTMuMjgwMSBUagotWzEgMCAwIDEgMjQ4LjAzNSA0NDUuMDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0OC4wMzUgLTQ0NS4wMzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0OC4wMzUgNDQ1LjAzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9GSU5JU0gpIDUzLjc5OCBUagotWzEgMCAwIDEgMzAxLjgzMyA0NDUuMDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMS44MzMgLTQ0NS4wMzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwNC42OCA0NDUuMDMxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFzKSA4LjI5ODg1IFRqCi0tMjg2IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjg2IFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI4NSBUSm0KLShcKGllLCkgMTMuMDAxMiBUagotLTI5NSBUSm0KLShhdCkgNy4xOTMgVGoKLS0yODYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg2IFRKbQotKHRpbWUpIDE3LjcxMzUgVGoKLS0yODUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg2IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yODYgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjg2IFRKbQotKGFubm91bmNlZCkgNDMuMTU4IFRqCi0tMjg1IFRKbQotKGl0cykgOS40MTQ2NiBUagotNzIgNDMzLjA3NiBUZAotKGludGVudGlvbikgMzUuNDI3IFRqCi0tMjkyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjkxIFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotLTI5MiBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjkyIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yOTIgVEptCi0oaW5wdXRcKS4pIDI2LjI5MTMgVGoKLS04NzAgVEptCi0oQnkpIDExLjYyNjQgVGoKLS0yOTIgVEptCi0oY29tcGFyaW5nKSA0Mi42MSBUagotLTI5MiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yOTIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjkxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yOTIgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5MiBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMzkyLjg2MiA0MzMuMDc2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Mi44NjIgLTQzMy4wNzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi44NjIgNDMzLjA3NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNDQwLjY4MiA0MzMuMDc2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MC42ODIgLTQzMy4wNzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0My41ODkgNDMzLjA3NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShvKSA0Ljk4MTMgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yOTIgVEptCi0oc3Vic2VxdWVudCkgNDQuMjczOCBUagotLTI5MiBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI5MSBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSA3MiA0MjEuMTIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MjEuMTIxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjEuMTIxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxNTUuNjg2IDQyMS4xMjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjY4NiAtNDIxLjEyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU1LjY4NiA0MjEuMTIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNDcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ3IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNDYgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjQ3IFRKbQotKGRldGVjdCkgMjMuNzkwNyBUagotLTI0NiBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjQ3IFRKbQotKGF0dCkgOS45NjI2IFRqCi0xIFRKbQotKGVtcHRzKSAyMy44MDA3IFRqCi0tMjQ3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDYgVEptCi0oc2xpcCkgMTQuMzk2IFRqCi0tMjQ3IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNDYgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI0NyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjQ2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDcgVEptCi0oY29tcHJlc3MuKSA0MC4xMTk0IFRqCi0tNjE3IFRKbQotKEFuKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNDcgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yNDYgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjQ3IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjQ2IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI0NyBUSm0KLShpcykgNi42NDUwNSBUagotNzIgNDA5LjE2NiBUZAotKGRldGVjdGVkKSAzMy4xOTU0IFRqCi0tMjUwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi1bMSAwIDAgMSAxNTEuOTU5IDQwOS4xNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUxLjk1OSAtNDA5LjE2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUxLjk1OSA0MDkuMTY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAyNTMuNTc4IDQwOS4xNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUzLjU3OCAtNDA5LjE2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUzLjU3OCA0MDkuMTY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS01MDAgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShpbmRpY2F0ZXMpIDM1LjQxNyBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHByb2dyYW1taW5nKSA1NC4yMzY0IFRqCi0tMjUwIFRKbQotKG1pc3RhaykgMjYuNTcwMyBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY29ycmVjdGVkLikgMzkuNTUxNSBUagotWzEgMCAwIDEgNzIgNDA3LjAwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk3LjA0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzg3LjI0OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbnN0ZWFkKSAyOC43NzIgVGoKLS0yMjQgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjMgVEptCi0oYXNraW5nKSAyNi4wMTIzIFRqCi0tMjI0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjMgVEptCi0oXDAwMm5pc2gsKSAyNC42Mzc1IFRqCi0tMjI5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyNCBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi0tMjIzIFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yMjQgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjI0IFRKbQotKGFzaykgMTMuMjgwMSBUagotWzEgMCAwIDEgMjkzLjI4MiAzODcuMjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5My4yODIgLTM4Ny4yNDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5My4yODIgMzg3LjI0OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzc2Ljk2OCAzODcuMjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Ni45NjggLTM4Ny4yNDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3OS4xOTYgMzg3LjI0OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjI0IFRKbQotKHRhaykgMTIuMTc0MyBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTIyMyBUSm0KLShhbGwpIDkuOTYyNiBUagotLTIyNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjMgVEptCi0ocmVtYWluaW5nKSA0MC4zOTgzIFRqCi0tMjI0IFRKbQotKGlucHV0LCkgMjIuOTczOCBUagotLTIyOSBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotNzIgMzc1LjI5MyBUZAotKGl0KSA1LjUzOTIxIFRqCi0tMjc4IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjc4IFRKbQotKHRlcm1pbmF0ZSkgMzcuNjI4NyBUagotLTI3OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzggVEptCi0oY3VycmVudCkgMjguMjE0MSBUagotLTI3NyBUSm0KLShcKEJ1cnJvKSAyNi41NjAzIFRqCi0yNSBUSm0KLSh3cy1XaGVlbGVyXCkpIDUxLjQ0NjkgVGoKLS0yNzggVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNzggVEptCi0oYmxvY2suKSAyNC42Mjc1IFRqCi0tNzg3IFRKbQotKFRoKSAxMS4wNjg0IFRqCi0tMSBUSm0KLShpKSAyLjc2OTYgVGoKLTEgVEptCi0ocykgMy44NzU0NSBUagotLTI3OCBUSm0KLShjb3VsZCkgMjIuMTM2OSBUagotLTI3OCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3OCBUSm0KLSh1c2VmdWwpIDI0LjM0ODYgVGoKLS0yNzggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjc4IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjc4IFRKbQotKGNvbnRyb2wpIDI4LjIyNCBUagotLTI3OCBUSm0KLShwdXJwb3Nlcy4pIDM3LjkwNzcgVGoKLTcyIDM2My4zMzggVGQKLShUaGUpIDE1LjQ5MTggVGoKLS0zMjggVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMzI4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzI4IFRKbQotKGFuYWxvZ291cykgNDAuMzk4MyBUagotLTMyOCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzI4IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMjggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzI4IFRKbQotKFwwMDJuaXNoaW5nOikgMzcuNjQ4NyBUagotLTQ2NiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI5Ny4wNDkgMzYzLjMzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTcuMDQ5IC0zNjMuMzM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTcuMDQ5IDM2My4zMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDM4MC43MzUgMzYzLjMzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODAuNzM1IC0zNjMuMzM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuMDAzIDM2My4zMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2l0aCkgMTcuNzEzNSBUagotLTMyOCBUSm0KLShhbikgOS40MDQ2OSBUagotLTMyOCBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0zMjggVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQ1Ni44NDEgMzYzLjMzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTYuODQxIC0zNjMuMzM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTYuODQxIDM2My4zMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfRkxVU0gpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDUwNC42NjIgMzYzLjMzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDQuNjYyIC0zNjMuMzM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDQuNjYyIDM2My4zMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTMyOCBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTcyIDM1MS4zODIgVGQKLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS00NDUgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLS00OTQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS00NDYgVEptCi0ocGVyc2lzdCkgMjYuMDEyMyBUagotLTQ0NSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDQ1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMjEzLjk0IDM1MS4zODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEzLjk0IC0zNTEuMzgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTMuOTQgMzUxLjM4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9GTFVTSCkgNDcuODIwNSBUagotWzEgMCAwIDEgMjYxLjc2MSAzNTEuMzgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MS43NjEgLTM1MS4zODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Ni4xOTUgMzUxLjM4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhY3Rpb24pIDI0LjM0ODYgVGoKLS00NDUgVEptCi0odW50aWwpIDE4LjI3MTQgVGoKLS00NDUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQ2IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSkgMTYuNTk3NyBUagotWzEgMCAwIDEgMzYwLjA2MiAzNTEuMzgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2MC4wNjIgLTM1MS4zODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2MC4wNjIgMzUxLjM4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9SVU4pIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDM5NS45MjggMzUxLjM4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTUuOTI4IC0zNTEuMzgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDAuMzYyIDM1MS4zODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS00NDUgVEptCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLS0xNzkyIFRKbQotKEFzKSAxMS4wNjg0IFRqCi0tNDQ1IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS00NDUgVEptCi0oXDAwMm5pc2hpbmcsKSAzNy4zNjk3IFRqCi1bMSAwIDAgMSA3MiAzMzkuNDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMzkuNDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMzkuNDI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxNTUuNjg2IDMzOS40MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjY4NiAtMzM5LjQyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjE3NyAzMzkuNDI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRldGVjdHMpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShhdHRlbXB0KSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShvbmNlKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAzdXNoKSAxOS4zNzczIFRqCi0tMjUwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotMTUgVEptCi0oZ3VuLikgMTcuNDM0NiBUagotWzEgMCAwIDEgNzIgMzM3LjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjcuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTcuNTA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE9uY2UpIDIxLjAyMTEgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDN1c2gpIDE5LjM3NzMgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oY29tcGxldGUsKSAzOS4wMTM1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0ocmV0dXJucykgMjcuNjY2MSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShub3JtYWwpIDI4LjIyNCBUagotLTI1MCBUSm0KLShSKSA2LjY0NTA1IFRqCi00MCBUSm0KLShVTk5JTkcpIDM5LjI4MjUgVGoKLS0yNTAgVEptCi0oc3RhdGUuKSAyMC43NTIxIFRqCi1bMSAwIDAgMSA3MiAzMTUuMzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMDUuMzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5NS41OTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTM0NCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTM0MyBUSm0KLShzb3VuZHMpIDI3LjY3NjEgVGoKLS0zNDQgVEptCi0ocHJldHR5KSAyMy4yNDI3IFRqCi0tMzQ0IFRKbQotKGNvbXBsZSkgMjkuMzI5OSBUagotMTUgVEptCi0oeCwpIDcuNDcxOTUgVGoKLS0zNjcgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMzQ0IFRKbQotKGlzbicpIDE0Ljk0MzkgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTM0NCBUSm0KLShyZWFsbHkpIDIyLjY4NDggVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS0xMTgyIFRKbQotKEhlcmUnKSAyMi42NzQ5IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzQ0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNDQgVEptCi0odGFibGUpIDE5LjM2NzMgVGoKLS0zNDMgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNDQgVEptCi0oc2hvKSAxMy44MzgxIFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTM0NCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM0NCBUSm0KLShhY3Rpb25zKSAyOC4yMjQgVGoKLS0zNDMgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzQ0IFRKbQotKGFsbG8pIDE0Ljk0MzkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMzQ0IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zNDQgVEptCi0oZWFjaCkgMTguMjUxNSBUagotNzIgMjgzLjYzNiBUZAotKHN0YXRlLCkgMjAuNzUyMSBUagotLTI4MSBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjc0IFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI3NSBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjc0IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjc1IFRKbQotKHRhaykgMTIuMTc0MyBUagotMTAgVEptCi0oZW4sKSAxMS44OTUzIFRqCi0tMjgwIFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0yNzUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc0IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjc1IFRKbQotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMjc0IFRKbQotKGlzLCkgOS4xMzU3IFRqCi0tMjgxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjc0IFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0yNzUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc1IFRKbQotKG5vbi1lcnJvcikgMzcuNjE4OCBUagotLTI3NCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNzUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcykgMjAuNDczMSBUagotLTI3NCBUSm0KLShhcmUuKSAxNC42NTUgVGoKLS03NjcgVEptCi0oTm90ZSkgMTkuMzY3MyBUagotLTI3NSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjc0IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI3NSBUSm0KLShjYW4nKSAxNy4xNDU2IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLTcyIDI3MS42ODEgVGQKLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGxpY2l0bHkpIDMzLjIxNTMgVGoKLS0zNDcgVEptCi0oYXNrKSAxMy4yODAxIFRqCi0tMzQ4IFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0zNDcgVEptCi0oc3RhdGUpIDE4LjI2MTQgVGoKLS0zNDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ3IFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTM0OCBUSm0KLShpcykgNi42NDUwNSBUagotLTM0NyBUSm0KLShpbiwpIDEwLjI0MTYgVGoKLS0zNzIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMzQ3IFRKbQotKG5vcikgMTMuMjgwMSBUagotLTM0OCBUSm0KLShkbykgOS45NjI2IFRqCi0tMzQ3IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTM0OCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMzQ3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNDggVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0zNDcgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zNDggVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMzQ3IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzQ3IFRKbQotKGluZmVycmVkKSAzMS41MzE2IFRqCi0tMzQ4IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0zNDcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ4IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0zNDcgVEptCi0ocmV0dXJuZWQpIDMzLjE5NTQgVGoKLS0zNDggVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgNzIgMjU5LjcyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjU5LjcyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjU5LjcyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAyNTkuNzI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS42ODYgLTI1OS43MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS42ODYgMjU5LjcyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyNTguMTkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjA3LjM0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE4IDE4Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtNTk1LjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1NzMuODQ4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTcwLjI2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oSURMRS9hbnkpIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKElsbGVnYWwuKSA0Ny44MjA1IFRqCi0tODUyIFRKbQotKElETEUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ob25seSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShleGlzdHMpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYWZ0ZXIpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLTk4LjQ4NzkgNjg3LjcyMSBUZAotKGJlZm9yZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShCWjJfYnpDb21wcmVzc0luaXQuKSAxMTMuNTc0IFRqCi05OC40ODc5IDY3NS43NjYgVGQKLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotOTAgNjUxLjg1NiBUZAotKFJVTk5JTkcvQlpfUlVOKSA4My42ODU4IFRqCi05OC40ODc5IDYzOS45IFRkCi0oQ29tcHJlc3MpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oZnJvbSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShuZXh0X2luKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG11Y2gpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocG9zc2libGUuKSA1My43OTggVGoKLTk4LjQ4NzkgNjI3Ljk0NSBUZAotKE5leHQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShSVU5OSU5HKSA0MS44NDI5IFRqCi05OC40ODc5IDYxNS45OSBUZAotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX1JVTl9PSykgNTMuNzk4IFRqCi05MCA1OTIuMDggVGQKLShSVU5OSU5HL0JaX0ZMVVNIKSA5NS42NDEgVGoKLTk4LjQ4NzkgNTgwLjEyNSBUZAotKFJlbWVtYmVyKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGN1cnJlbnQpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmV4dF9pbi4pIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQ29tcHJlc3MpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oZnJvbSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShuZXh0X2luKSA0MS44NDI5IFRqCi05OC40ODc5IDU2OC4xNjkgVGQKLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuZXh0X291dCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShtdWNoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHBvc3NpYmxlLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGJ1dCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShkbykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWNjZXB0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGFueSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShtb3JlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlucHV0LikgMzUuODY1NCBUagotOTguNDg3OSA1NTYuMjE0IFRkCi0oTmV4dCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShzdGF0ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEZMVVNISU5HKSA0Ny44MjA1IFRqCi05OC40ODc5IDU0NC4yNTkgVGQKLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9GTFVTSF9PSykgNjUuNzUzMiBUagotOTAgNTIwLjM0OSBUZAotKFJVTk5JTkcvQlpfRklOSVNIKSAxMDEuNjE5IFRqCi05OC40ODc5IDUwOC4zOTQgVGQKLShSZW1lbWJlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLShjdXJyZW50KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfaW4uKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKENvbXByZXNzKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obmV4dF9pbikgNDEuODQyOSBUagotOTguNDg3OSA0OTYuNDM4IFRkCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obXVjaCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShwb3NzaWJsZSwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShidXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obm90KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjY2VwdCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShhbnkpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obW9yZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnB1dC4pIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNDg0LjQ4MyBUZAotKE5leHQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShGSU5JU0hJTkcpIDUzLjc5OCBUagotOTguNDg3OSA0NzIuNTI4IFRkCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfRklOSVNIX09LKSA3MS43MzA3IFRqCi05MCA0NDguNjE4IFRkCi0oRkxVU0hJTkcvQlpfRkxVU0gpIDEwMS42MTkgVGoKLTk4LjQ4NzkgNDM2LjY2MyBUZAotKENvbXByZXNzKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obmV4dF9pbikgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuZXh0X291dCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShtdWNoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHBvc3NpYmxlLCkgNTMuNzk4IFRqCi05OC40ODc5IDQyNC43MDcgVGQKLShidXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obm90KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjY2VwdCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShhbnkpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obW9yZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnB1dC4pIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNDEyLjc1MiBUZAotKElmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZXhpc3RpbmcpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW5wdXQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odXNlZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh1cCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWxsKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgNDAwLjc5NyBUZAotKG91dHB1dCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShyZW1vdmVkKSA0MS44NDI5IFRqCi0xMDYuOTc2IDM4OC44NDIgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oUlVOTklORzspIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfUlVOX09LKSA1My43OTggVGoKLTk4LjQ4NzkgMzc2Ljg4NyBUZAotKGVsc2UpIDIzLjkxMDIgVGoKLTEwNi45NzYgMzY0LjkzMiBUZAotKE5leHQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShGTFVTSElORzspIDUzLjc5OCBUagotLTQyNiBUSm0KLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9GTFVTSF9PSykgNjUuNzUzMiBUagotOTAgMzQxLjAyMSBUZAotKEZMVVNISU5HL290aGVyKSA4My42ODU4IFRqCi05OC40ODc5IDMyOS4wNjYgVGQKLShJbGxlZ2FsLikgNDcuODIwNSBUagotOTguNDg3OSAzMTcuMTExIFRkCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLTkwIDI5My4yMDEgVGQKLShGSU5JU0hJTkcvQlpfRklOSVNIKSAxMTMuNTc0IFRqCi05OC40ODc5IDI4MS4yNDUgVGQKLShDb21wcmVzcykgNDcuODIwNSBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG5leHRfaW4pIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obXVjaCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShwb3NzaWJsZSwpIDUzLjc5OCBUagotOTguNDg3OSAyNjkuMjkgVGQKLShidXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obm90KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjY2VwdCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShhbnkpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obW9yZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnB1dC4pIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgMjU3LjMzNSBUZAotKElmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZXhpc3RpbmcpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW5wdXQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odXNlZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh1cCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWxsKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgMjQ1LjM4IFRkCi0ob3V0cHV0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHJlbW92ZWQpIDQxLjg0MjkgVGoKLTEwNi45NzYgMjMzLjQyNSBUZAotKE5leHQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShJRExFOykgMjkuODg3OCBUagotLTQyNiBUSm0KLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi05OC40ODc5IDIyMS40NyBUZAotKGVsc2UpIDIzLjkxMDIgVGoKLTEwNi45NzYgMjA5LjUxNCBUZAotKE5leHQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShGSU5JU0hJTkc7KSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX0ZJTklTSF9PSykgNzEuNzMwNyBUagotOTAgMTg1LjYwNCBUZAotKEZJTklTSElORy9vdGhlcikgODkuNjYzNCBUagotOTguNDg3OSAxNzMuNjQ5IFRkCi0oSWxsZWdhbC4pIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgMTYxLjY5NCBUZAotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSA3MiAxNDYuMTUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEzNi4xODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyNC4yMzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhhdCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShzdGlsbCkgMTQuOTUzOSBUagotLTI1MCBUSm0KLShsb29rcykgMjEuNTg5IFRqCi0tMjUwIFRKbQotKGNvbXBsaWNhdGVkPykgNTMuMTIwNiBUagotLTYyMCBUSm0KLShXKSA5LjQwNDY5IFRqCi04MCBUSm0KLShlbGwsKSAxMi40NTMzIFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpcikgMTAuNTEwNSBUagotLTI1MCBUSm0KLShlbm91Z2guKSAzMS44MjA1IFRqCi0tNjIwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLSh1c3VhbCkgMjEuMDMxIFRqCi0tMjUwIFRKbQotKHNlcXVlbmNlKSAzNi41MTI5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShjb21wcmVzc2luZykgNTAuMzYwOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGxvYWQpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShpczopIDkuNDE0NjYgVGoKLVsxIDAgMCAxIDcyIDEyMi4wNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS43MjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNy4zNzI0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzkuMzcyNCAtOTIuMzUzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzkuMzcyNCA5Mi4zNTM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEuKSA3LjQ3MTk1IFRqCi1bMSAwIDAgMSA4Ni44NDQ0IDkyLjM1MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzLjA4ODQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkxLjkyNTMgLTkyLjM1MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkxLjkyNTMgOTIuMzUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShHZXQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShzdGFydGVkKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDE1OC4wNTYgOTIuMzUzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguMDU2IC05Mi4zNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTguMDU2IDkyLjM1MzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAyNjUuNjUzIDkyLjM1MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY1LjY1MyAtOTIuMzUzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY1LjY1MyA5Mi4zNTM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI2OC4xNDQgOTIuMzUzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTYuMTQ0IC00MS41MDE5XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTMgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTUpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTkgMTkKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zMS41MTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNy4zNzI0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzkuMzcyNCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzkuMzcyNCA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuKSA3LjQ3MTk1IFRqCi1bMSAwIDAgMSA4Ni44NDQ0IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzLjA4ODQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkxLjkyNTMgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkxLjkyNTMgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShTaG8pIDE1LjUwMTggVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjQwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNDAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0MSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI0MCBUSm0KLShzaGx1cnApIDI0LjkwNjUgVGoKLS0yNDAgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tMjQwIFRKbQotKGl0cykgOS40MTQ2NiBUagotLTI0MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjQxIFRKbQotKGZvcm0pIDE5LjM2NzMgVGoKLS0yNDAgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI0MCBUSm0KLSh6ZXJvKSAxNy4xNDU2IFRqCi0tMjQwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjQwIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNDEgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yNDAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQwMS40NTQgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDEuNDU0IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDEuNDU0IDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDQ4NS4xNCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4NS4xNCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDg3LjUzMyA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNDAgVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMjQwIFRKbQotKD0pIDUuNjE4OTEgVGoKLVsxIDAgMCAxIDkxLjkyNTMgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUlVOKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMjcuNzkxIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI3Ljc5MSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI3Ljc5MSA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDEzMC4yODEgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01OC4yODE0IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNy4zNzI0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzkuMzcyNCAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzkuMzcyNCA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuKSA3LjQ3MTk1IFRqCi1bMSAwIDAgMSA4Ni44NDQ0IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzLjA4ODQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkxLjkyNTMgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkxLjkyNTMgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGaW5pc2gpIDI0LjkxNjUgVGoKLS0yNDIgVEptCi0odXAuKSAxMi40NTMzIFRqCi0tMzA3IFRKbQotKFJlcGVhdGVkbHkpIDQ0LjgyMTcgVGoKLS0yNDEgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxOTguNzg0IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk4Ljc4NCAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk4Ljc4NCA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyODIuNDcxIDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgyLjQ3MSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg0Ljg3OCA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNDIgVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMjQxIFRKbQotKD0pIDUuNjE4OTEgVGoKLVsxIDAgMCAxIDMzOS43OCA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOS43OCAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM5Ljc4IDY3Ni4xNjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfRklOSVNIKSA1My43OTggVGoKLVsxIDAgMCAxIDM5My41NzkgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTMuNTc5IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTMuNTc5IDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI0MiBUSm0KLShjb3ApIDE0LjM4NiBUagotMTAgVEptCi0oeWluZykgMTcuNzEzNSBUagotLTI0MSBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0yNDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQyIFRKbQotKGNvbXByZXMpIDMzLjc1MzMgVGoKLTEgVEptCi0oc2VkKSAxMy4yODAxIFRqCi0tMjQyIFRKbQotKG91dHB1dCwpIDI3Ljk1NTEgVGoKLTkxLjkyNTMgNjY0LjIwOSBUZAotKHVudGlsKSAxOC4yNzE0IFRqCi1bMSAwIDAgMSAxMTIuNjg3IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEyLjY4NyAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTEyLjY4NyA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE5MC4zOTYgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTAuMzk2IC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTIuODg2IDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLVsxIDAgMCAxIDIzNy43MDggNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjUuNzA4IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNy4zNzI0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzkuMzcyNCAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzkuMzcyNCA2NDIuMjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuKSA3LjQ3MTk1IFRqCi1bMSAwIDAgMSA4Ni44NDQ0IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzLjA4ODQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkxLjkyNTMgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkxLjkyNTMgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDbG9zZSkgMjIuNjk0OCBUagotLTI1MCBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGdvKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oaG9tZS4pIDI0LjYyNzUgVGoKLS02MjAgVEptCi0oQ2FsbCkgMTYuNjA3NyBUagotWzEgMCAwIDEgMjA4Ljc5NiA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwOC43OTYgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwOC43OTYgNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMzEwLjQxNSA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMC40MTUgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMC40MTUgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMTIuOTA2IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjkwNiAtMTIuMTE5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjMwLjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIwLjM3NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI2OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2OSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI2OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcwIFRKbQotKGNvbXByZXNzKSAzNy42Mjg3IFRqCi0tMjY5IFRKbQotKFwwMDJ0cykgMTIuMTg0MyBUagotLTI3MCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjY5IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNzAgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0yNjkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjcwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjY5IFRKbQotKGF0KSA3LjE5MyBUagotLTI3MCBUSm0KLShvbmNlLCkgMjEuMyBUagotLTI3NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNjkgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjcwIFRKbQotKHNraXApIDE2LjYwNzcgVGoKLS0yNjkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcwIFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjY5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0NTYuMzE0IDYyMC4zNzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU2LjMxNCAtNjIwLjM3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU2LjMxNCA2MjAuMzc0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi03MiA2MDguNDE4IFRkCi0oXCgpIDUuOTc3NTYgVGoKLS02MDAgVEptCi0oLi4uLCkgMjMuOTEwMiBUagotLTYwMCBUSm0KLShCWl9SVU4pIDM1Ljg2NTQgVGoKLS02MDAgVEptCi0oXCkpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDE2MS42NjQgNjA4LjQxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjEuNjY0IC02MDguNDE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuMTU0IDYwOC40MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjUwIFRKbQotKGRvKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAyMjUuMDM2IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI1LjAzNiAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI1LjAzNiA2MDguNDE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi0tNjAwIFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKC4uLiwpIDIzLjkxMDIgVGoKLS02MDAgVEptCi0oQlpfRklOSVNIKSA1My43OTggVGoKLS02MDAgVEptCi0oXCkpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDQyMi4yOTYgNjA4LjQxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjIuMjk2IC02MDguNDE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjQuNzg2IDYwOC40MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY2FsbHMuKSAyMC43NTIxIFRqCi1bMSAwIDAgMSA3MiA2MDYuMjYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTYuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbCkgMTIuNzMyMiBUagotLTI3OCBUSm0KLShyZXF1aXJlZCkgMzMuMTk1NCBUagotLTI3NyBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNzggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNzcgVEptCi0oYWxsb2NhdGVkKSAzNS45NjUgVGoKLS0yNzggVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMjIwLjI5NSA1ODYuNTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMC4yOTUgLTU4Ni41MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMC4yOTUgNTg2LjUwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDMyNy44OTEgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjcuODkxIC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjcuODkxIDU4Ni41MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTc4NSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yNzggVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNzcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI3OCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNzcgVEptCi0oYWNjZXB0KSAyNS40NDQ1IFRqCi0tMjc4IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNzcgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI3OCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNzggVEptCi0oYWxsKSA5Ljk2MjYgVGoKLTcyIDU3NC41NDUgVGQKLShcKG9iKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aW91c2x5XCkuKSAzNS4xNDgxIFRqCi0tNjEyIFRKbQotKFNvKSAxMC41MjA1IFRqCi0tMjM4IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTIzNyBUSm0KLShzaG91bGRuJykgMzQuODY5MSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjM4IFRKbQotKGdldCkgMTIuMTc0MyBUagotLTIzOCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjM3IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjM4IFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTIzOCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzKSAyMC40NzMxIFRqCi0tMjM4IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yMzcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAzMzkuMjg3IDU3NC41NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM5LjI4NyAtNTc0LjU0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM5LjI4NyA1NzQuNTQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSA0MjIuOTczIDU3NC41NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIyLjk3MyAtNTc0LjU0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI1LjM0MiA1NzQuNTQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNhbGxzLikgMjAuNzUyMSBUagotLTYxMiBUSm0KLShJZikgNi42MzUwOSBUagotLTIzOCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzcgVEptCi0oZG8sKSAxMi40NTMzIFRqCi0tMjQwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjM4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMzggVEptCi0oYmUpIDkuNDA0NjkgVGoKLVsxIDAgMCAxIDcyIDU2Mi41OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTYyLjU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjIuNTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE3My42MTkgNTYyLjU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My42MTkgLTU2Mi41OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTczLjYxOSA1NjIuNTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShpbmRpY2F0ZSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0ocHJvZ3JhbW1pbmcuKSA1Ni43MjcgVGoKLVsxIDAgMCAxIDcyIDU2MC40MzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU1MC40NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0MC42NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVCkgNi4wODcxNSBUagotMzUgVEptCi0ocmkpIDYuMDg3MTUgVGoKLTI1IFRKbQotKHZpYWwpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0ob3RoZXIpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0ocG9zc2libGUpIDMyLjY1NzQgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiA1MzguNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUyOS4xNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUyOS4xNTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgNTE3LjE5NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybS0+cykgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA3MiA1MDEuNjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDkxLjY5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDcxLjAzMyBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4zLjMuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDQ3MS4wMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNDcxLjAzM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA0NzEuMDMzIFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTc1LjU5NyBUagotWzEgMCAwIDEgMjk1LjQ1NSA0NzEuMDMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMy40NTUgLTIuMzMyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC00NTkuMzM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA0NTkuMzM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW0pIDUzLjc5OCBUagotMjg2LjMwMyA0NTcuNTkyIFRkCi0oKikgNS45Nzc1NiBUagotMjkyLjI4MSA0NTkuMzM1IFRkCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDQ0My43OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDMzLjgzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIxLjg3NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWxlYXNlcykgMzQuODU5MSBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0oYXNzb2NpYXRlZCkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNTAgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgNDE5LjcxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDA5Ljc1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzk5Ljk1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDM5OS44NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNi44NjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzkwLjQ5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzkwLjQ5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotLTg1MiBUSm0KLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybS0+cykgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05MCAzNzguNTM4IFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLS00Njg2IFRKbQotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAzNjIuOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzUzLjAzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzMyLjM3NSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4zLjQuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDMzMi4zNzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMzMyLjM3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAzMzIuMzc1IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMjA2LjU4NSBUagotWzEgMCAwIDEgMzI2LjQ0MyAzMzIuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1NC40NDMgLTIuMzMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zMjAuNjc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzMjAuNjc4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW0pIDUzLjc5OCBUagotMzA0LjIzNiAzMTguOTM0IFRkCi0oKikgNS45Nzc1NiBUagotMzEwLjIxNCAzMjAuNjc4IFRkCi0oc3RybSwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSwpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNtYWxsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMzA1LjEzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTUuMTczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODMuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByZXBhcmVzKSAzNC4zMDEyIFRqCi0tMzUxIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTM1MSBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotLTEyMjggVEptCi0oQXMpIDExLjA2ODQgVGoKLS0zNTEgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgMjM1LjE3NyAyODMuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNS4xNzcgLTI4My4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNS4xNzcgMjgzLjIxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDM0Mi43NzMgMjgzLjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNzczIC0yODMuMjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDIuNzczIDI4My4yMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTM3NyBUSm0KLShhKSA0LjQyMzM5IFRqCi1bMSAwIDAgMSAzNTYuOTM3IDI4My4yMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzU2LjkzNyAtMjgzLjIxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU2LjkzNyAyODMuMjE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA0MTAuNzM2IDI4My4yMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjczNiAtMjgzLjIxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE0LjIzNSAyODMuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlY29yZCkgMjUuNDQ0NSBUagotLTM1MSBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zNTEgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zNTIgVEptCi0oYWxsb2NhdGVkKSAzNS45NjUgVGoKLS0zNTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLTcyIDI3MS4yNjMgVGQKLShpbml0aWFsaXNlZCkgMzkuMzAyNSBUagotLTMwNiBUSm0KLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0zMDUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA2IFRKbQotKGNhbGwuKSAxNi44NzY2IFRqCi0tOTUzIFRKbQotKEZpZWxkcykgMjQuMzU4NiBUagotWzEgMCAwIDEgMjExLjgzMyAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMS44MzMgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMS44MzMgMjcxLjI2MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemFsbG9jKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyNTMuNjc2IDI3MS4yNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUzLjY3NiAtMjcxLjI2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUzLjY3NiAyNzEuMjYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI1OS4zNSAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1OS4zNSAtMjcxLjI2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU5LjM1IDI3MS4yNjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpmcmVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAyOTUuMjE1IDI3MS4yNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk1LjIxNSAtMjcxLjI2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk4LjI2IDI3MS4yNjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDMxNS42OSAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNS42OSAtMjcxLjI2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE1LjY5IDI3MS4yNjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ob3BhcXVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzNTEuNTU2IDI3MS4yNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUxLjU1NiAtMjcxLjI2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU0LjYgMjcxLjI2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMDYgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMDUgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzA2IFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMzA1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDYgVEptCi0oY3VzdG9tKSAyOC43ODIgVGoKLS0zMDUgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMzA2IFRKbQotKGFsbG9jYXRvcikgMzQuODU5MSBUagotLTMwNiBUSm0KLShpcykgNi42NDUwNSBUagotNzIgMjU5LjMwOCBUZAotKHJlcXVpcmVkLCkgMzUuNjg2IFRqCi0tMzUwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzMxIFRKbQotKG1hZGUpIDIxLjU3OSBUagotWzEgMCAwIDEgMTQ3LjYzNSAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny42MzUgLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ny42MzUgMjU5LjMwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOVUxMKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxNzEuNTQ2IDI1OS4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTcxLjU0NiAtMjU5LjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc0LjgzNSAyNTkuMzA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTMzMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzEgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLVsxIDAgMCAxIDIzNi43MjIgMjU5LjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzYuNzIyIC0yNTkuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzYuNzIyIDI1OS4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obWFsbG9jKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAyNzIuNTg3IDI1OS4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjU4NyAtMjU5LjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc1Ljg3OCAyNTkuMzA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC8pIDIuNzY5NiBUagotWzEgMCAwIDEgMjgxLjkzOCAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4MS45MzggLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4MS45MzggMjU5LjMwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmcmVlKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzMDUuODQ4IDI1OS4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA1Ljg0OCAtMjU5LjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA5LjEzOSAyNTkuMzA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJvdXRpbmVzLikgMzQuNTkwMSBUagotLTExMDIgVEptCi0oVXBvbikgMjIuMTM2OSBUagotLTMzMCBUSm0KLShyZXR1cm4sKSAyNi4yODEzIFRqCi0tMzUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzMSBUSm0KLShpbnRlcm5hbCkgMzAuNDM1NyBUagotLTMzMCBUSm0KLShzdGF0ZSkgMTguMjYxNCBUagotLTMzMCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMzMwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMzEgVEptCi0oYmVlbikgMTguODA5NCBUagotNzIgMjQ3LjM1MyBUZAotKGluaXRpYWxpc2VkLCkgNDEuNzkzMSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMTMzLjE2IDI0Ny4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMzLjE2IC0yNDcuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzMuMTYgMjQ3LjM1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgMTgwLjk4IDI0Ny4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgwLjk4IC0yNDcuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODMuNDcxIDI0Ny4zNTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDIwMC4zNDggMjQ3LjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDAuMzQ4IC0yNDcuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDAuMzQ4IDI0Ny4zNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDI1NC4xNDYgMjQ3LjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTQuMTQ2IC0yNDcuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTYuNjM3IDI0Ny4zNTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLSh6ZXJvLikgMTkuNjM2MyBUagotWzEgMCAwIDEgNzIgMjQ1LjkxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM1Ljk1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjI1LjQzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLVsxIDAgMCAxIDE5Mi43NTYgMjI1LjQzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuNzU2IC0yMjUuNDM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTIuNzU2IDIyNS40MzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odmVyYm9zaXR5KSA1My43OTggVGoKLVsxIDAgMCAxIDI0Ni41NTQgMjI1LjQzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDYuNTU0IC0yMjUuNDM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDYuNTU0IDIyNS40MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLVsxIDAgMCAxIDI2Ni43NDggMjI1LjQzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjYuNzQ4IC0yMjUuNDM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjYuNzQ4IDIyNS40MzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAzNzQuMzQ1IDIyNS40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzc0LjM0NSAtMjI1LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc0LjM0NSAyMjUuNDM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDIyMy4yNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIxMy4zMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIwMy41MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDgxLjQ5NzUgMjAzLjUxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MS40OTc1IC0yMDMuNTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04MS40OTc1IDIwMy41MTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc21hbGwpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExMS4zODUgMjAzLjUxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTEuMzg1IC0yMDMuNTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTQuMjQ4IDIwMy41MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODcgVEptCi0obm9uemVybywpIDM0LjU4MDIgVGoKLS0yOTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg3IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yODggVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI4NyBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yODcgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yODcgVEptCi0oYWx0ZXJuYXRpKSAzMi42NDc0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODggVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTI4NyBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yODcgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yODggVEptCi0odXNlcykgMTcuMTU1NiBUagotLTI4NyBUSm0KLShsZXNzKSAxNC45NDM5IFRqCi0tMjg3IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI4NyBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yODggVEptCi0oYXQpIDcuMTkzIFRqCi0tMjg3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgMTkxLjU2MiBUZAotKGNvc3QpIDE2LjA0OTcgVGoKLS0yODkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTAgVEptCi0oZGVjb21wcmVzc2luZykgNTkuNzY1NiBUagotLTI4OSBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjg5IFRKbQotKHNsbykgMTEuNjI2NCBUagotMjUgVEptCi0od2x5KSAxNC45NDM5IFRqCi0tMjkwIFRKbQotKFwocm91Z2hseSkgMzQuMzExMiBUagotLTI4OSBUSm0KLShzcGVha2luZywpIDM3LjkwNzcgVGoKLS0yOTkgVEptCi0oaGFsZikgMTUuNDkxOCBUagotLTI5MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oc3BlZWQsKSAyNS4xNzU1IFRqCi0tMjk5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTAgVEptCi0obWF4aW11bSkgNDAuNDA4MyBUagotLTI4OSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yODkgVEptCi0ocmVxdWlyZW1lbnQpIDQ4LjEzOTMgVGoKLS0yOTAgVEptCi0oZHJvcHMpIDIyLjEzNjkgVGoKLTcyIDE3OS42MDcgVGQKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFyb3VuZCkgMjcuNjY2MSBUagotLTI1MCBUSm0KLSgyMzAwa1wpLikgMzAuNzE0NyBUagotLTYyMCBUSm0KLShTZWUpIDE0LjM4NiBUagotWzEgMCAwIDEgMTY2LjE2NiAxNzkuNjA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTE2Ni4xNjYgLTE3OS42MDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni4xNjYgMTc5LjYwNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDIzNS45MjQgMTc5LjYwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0yMzUuOTI0IC0xNzkuNjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzguNDE1IDE3OS42MDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzJdKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAyNTAuMDMxIDE3OS42MDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUwLjAzMSAtMTc5LjYwN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUyLjUyMiAxNzkuNjA3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGluZm9ybWF0aW9uKSA0Ny4wNDM0IFRqCi0tMjUwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKG1hbmFnZW1lbnQuKSA1My4zOTk1IFRqCi1bMSAwIDAgMSA3MiAxNzcuNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE2Ny40ODddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE1Ny42ODkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTm90ZSkgMTkuMzY3MyBUagotLTI4OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjkwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShhbW91bnQpIDI5Ljg4NzggVGoKLS0yODkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjkwIFRKbQotKG5lZWRlZCkgMjguMjE0MSBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg5IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yODkgVEptCi0oYSkgNC40MjMzOSBUagotLTI5MCBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yODkgVEptCi0oY2Fubm90KSAyNi41NjAzIFRqCi0tMjg5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjg5IFRKbQotKGRldGVybWluZWQpIDQ0LjgyMTcgVGoKLS0yOTAgVEptCi0odW50aWwpIDE4LjI3MTQgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKHN0cmVhbScpIDI5Ljg3NzggVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yODkgVEptCi0oaGVhZGVyKSAyNi41NTAzIFRqCi0tMjkwIFRKbQotKGhhcykgMTMuMjgwMSBUagotNzIgMTQ1LjczNCBUZAotKGJlZW4pIDE4LjgwOTQgVGoKLS0zNDIgVEptCi0ocmVhZCwpIDE5LjYzNjMgVGoKLS0zNjYgVEptCi0oc28pIDguODU2NzUgVGoKLS0zNDIgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTM0MiBUSm0KLShpZikgNi4wODcxNSBUagotWzEgMCAwIDEgMTYxLjA4MSAxNDUuNzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS4wODEgLTE0NS43MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2MS4wODEgMTQ1LjczNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotWzEgMCAwIDEgMjgwLjYzMyAxNDUuNzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4MC42MzMgLTE0NS43MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NC4wNDMgMTQ1LjczNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzdWNjZWVkcywpIDM3Ljg5NzcgVGoKLS0zNjUgVEptCi0oYSkgNC40MjMzOSBUagotLTM0MyBUSm0KLShzdWJzZXF1ZW50KSA0NC4yNzM4IFRqCi1bMSAwIDAgMSAzODEuMDk4IDE0NS43MzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgxLjA5OCAtMTQ1LjczNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzgxLjA5OCAxNDUuNzM0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgNDc2LjczOSAxNDUuNzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Ni43MzkgLTE0NS43MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4MC4xNDkgMTQ1LjczNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb3VsZCkgMjIuMTM2OSBUagotLTM0MiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWwpIDkuOTYyNiBUagotLTM0MyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA3MiAxMzMuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMzMuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMzMuNzc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTQzLjczMSAxMzMuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0My43MzEgLTEzMy43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0My43MzEgMTMzLjc3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMzIuNDY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMjIuNTA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTEuODYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgMTExLjc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjkwOTVdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTYpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMjAgMjAKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMTcuMTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDk1LjY0MTMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA5Mi4wNTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNzExLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNzExLjYzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWJyYXJ5KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG1pcy1jb21waWxlZCkgNzEuNzMwNyBUagotOTAgNjg3LjcyMSBUZAotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY3NS43NjYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCYmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNtYWxsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNjYzLjgxMSBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwodmVyYm9zaXR5KSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDw7KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ofHwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg0XCkpIDExLjk1NTEgVGoKLTkwIDY1MS44NTYgVGQKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLTk4LjQ4NzkgNjM5LjkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiA2MjQuMzU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxNC4zOTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYwMi40NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsbykgMTcuNzEzNSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWN0aW9uczopIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDcyIDYwMi4zNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC00OC44MTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDQ3LjgyMDcgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA0NC4yMzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTkyLjk3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTkyLjk3NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLTk4LjQ4NzkgNTgxLjAyMSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShyZXR1cm5lZCkgNDcuODIwNSBUagotOTguNDg3OSA1NjkuMDY2IFRkCi0obm8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3BlY2lmaWMpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYWN0aW9uKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHJlcXVpcmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGNhc2UpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDcyIDU1My41MjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NDMuNTYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MjIuOTAzIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjMuNS4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggNTIyLjkwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC01MjIuOTAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDUyMi45MDMgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9iekRlY29tcHJlc3MpIDE2NS4yNjggVGoKLVsxIDAgMCAxIDI4NS4xMjYgNTIyLjkwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTMuMTI2IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTExLjIwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTExLjIwNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi0yODAuMzI2IDUwOS40NjIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yODYuMzAzIDUxMS4yMDYgVGQKLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgNDk1LjY2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBybykgMTMuODM4MSBUagotMTUgVEptCi0odmlkZXMpIDIxLjAzMSBUagotLTMwMSBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMzAyIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMzAxIFRKbQotKGFuZC9vdXQpIDI5Ljg4NzggVGoKLS0zMDIgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMzAxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTMwMSBUSm0KLShzcGFjZSkgMjIuMTI2OSBUagotLTMwMiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAyIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS05MjggVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMzAxIFRKbQotKGNhbGxlcikgMjIuMTI2OSBUagotLTMwMiBUSm0KLShtYWludGFpbnMpIDM4Ljc0NDYgVGoKLS0zMDEgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0zMDIgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMDEgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMzAxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcnMsKSAxNy40MjQ2IFRqCi0tMzE1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi03MiA0NjEuNzkxIFRkCi0odXNlcykgMTcuMTU1NiBUagotWzEgMCAwIDEgOTEuNjQ2MSA0NjEuNzkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkxLjY0NjEgLTQ2MS43OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkxLjY0NjEgNDYxLjc5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE4Ny4yODcgNDYxLjc5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODcuMjg3IC00NjEuNzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODkuNzc4IDQ2MS43OTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0cmFuc2ZlcikgMzAuNDI1OCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGJldHdlZW4pIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDcyIDQ2MC4yNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1MC4yOTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmVmb3JlKSAyNy4xMDgyIFRqCi0tNDk4IFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS00OTkgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tNDk4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE1OS4zNTYgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuMzU2IC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTkuMzU2IDQzOS44NzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAyNTQuOTk3IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU0Ljk5NyAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU0Ljk5NyA0MzkuODczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI2My4wNzEgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjMuMDcxIC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjMuMDcxIDQzOS44NzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9pbikgNDEuODQyOSBUagotWzEgMCAwIDEgMzA0LjkxNCA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNC45MTQgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwOS44NzkgNDM5Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS00OTggVEptCi0ocG9pbnQpIDIwLjQ4MzEgVGoKLS00OTkgVEptCi0oYXQpIDcuMTkzIFRqCi0tNDk4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ5OCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDk5IFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tNTYwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0OTIuMTc5IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkyLjE3OSAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkyLjE3OSA0MzkuODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF2YWlsX2luKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDAgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyNy45MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzA4IFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMzA4IFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMzA5IFRKbQotKG1hbikgMTcuMTU1NiBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzA4IFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0zMDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA4IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zMDggVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMzA5IFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi1bMSAwIDAgMSAyOTQuOTU1IDQyNy45MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk0Ljk1NSAtNDI3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0Ljk1NSA0MjcuOTE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgMzkwLjU5NyA0MjcuOTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5MC41OTcgLTQyNy45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5My42NjcgNDI3LjkxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1cGRhdGVzKSAzMC40MzU3IFRqCi1bMSAwIDAgMSA0MjcuMTczIDQyNy45MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI3LjE3MyAtNDI3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI3LjE3MyA0MjcuOTE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfaW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDQ2OS4wMTYgNDI3LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjkuMDE2IC00MjcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjkuMDE2IDQyNy45MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDc0LjcyMyA0MjcuOTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3NC43MjMgLTQyNy45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3NC43MjMgNDI3LjkxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNTIyLjU0MyA0MjcuOTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyMi41NDMgLTQyNy45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyNS42MTQgNDI3LjkxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNzIgNDE1Ljk2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDE1Ljk2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDE1Ljk2MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgMTE5LjgyMSA0MTUuOTYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44MjEgLTQxNS45NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMi4zMTEgNDE1Ljk2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlXDAwM2VjdCkgMjQuODk2NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi1bMSAwIDAgMSA3MiA0MTMuODA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MDMuODQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzOTQuMDQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNpbWlsYXJseSkgMzcuMDkwOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTEzLjc5OSAzOTQuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy43OTkgLTM5NC4wNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMy43OTkgMzk0LjA0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X291dCkgNDcuODIwNSBUagotWzEgMCAwIDEgMTYxLjYyIDM5NC4wNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjYyIC0zOTQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuNDEgMzk0LjA0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yODAgVEptCi0ocG9pbnQpIDIwLjQ4MzEgVGoKLS0yODAgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjgwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTI4MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjgxIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjgwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4MCBUSm0KLSh1bmNvbXByZXNzZWQpIDU2Ljk5NiBUagotLTI4MCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yODAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODAgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4MCBUSm0KLShwbGFjZWQsKSAyOC40OTMgVGoKLS0yODggVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDg2LjIwMiAzOTQuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ni4yMDIgLTM5NC4wNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ni4yMDIgMzk0LjA0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9vdXQpIDUzLjc5OCBUagotWzEgMCAwIDEgNTQwIDM5NC4wNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC0zOTQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODIuMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW5kaWNhdGluZykgMzkuODUwNCBUagotLTUyNSBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTUyNCBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tNTI1IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTUyNCBUSm0KLShzcGFjZSkgMjIuMTI2OSBUagotLTUyNSBUSm0KLShpcykgNi42NDUwNSBUagotLTUyNSBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUuKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSAyODUuNzkyIDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODUuNzkyIC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NS43OTIgMzgyLjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNjkuNDc4IDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjkuNDc4IC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3NC43MDUgMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVwZGF0ZXMpIDMwLjQzNTcgVGoKLVsxIDAgMCAxIDQxMC4zNjcgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMC4zNjcgLTM4Mi4wOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEwLjM2NyAzODIuMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQ1OC4xODggMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1OC4xODggLTM4Mi4wOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU4LjE4OCAzODIuMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDY2LjU4OSAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY2LjU4OSAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjYuNTg5IDM4Mi4wOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9vdXQpIDUzLjc5OCBUagotWzEgMCAwIDEgNTIwLjM4NyAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTIwLjM4NyAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjUuNjE0IDM4Mi4wOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNzIgMzcwLjEzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzcwLjEzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzcwLjEzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9vdXQpIDUzLjc5OCBUagotWzEgMCAwIDEgMTI1Ljc5OCAzNzAuMTM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNS43OTggLTM3MC4xMzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyOC4yODkgMzcwLjEzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlXDAwM2VjdCkgMjQuODk2NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0ob3V0cHV0LikgMjcuOTU1MSBUagotWzEgMCAwIDEgNzIgMzY3Ljk3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzU4LjAxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzQ4LjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0zMjAgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMzIxIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTMyMCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMyMSBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMjAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMjEgVEptCi0obGl0dGxlKSAxOC4yNzE0IFRqCi0tMzIwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzIwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzIxIFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0zMjAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMyMSBUSm0KLShhcykgOC4yOTg4NSBUagotLTMyMCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zMjEgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzIwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zMjAgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTMyMSBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0zMjAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQwNy44MTYgMzQ4LjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDcuODE2IC0zNDguMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDcuODE2IDM0OC4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSA1MDMuNDU3IDM0OC4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAzLjQ1NyAtMzQ4LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTAzLjQ1NyAzNDguMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMDQzIFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMzIwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgMzM2LjI2MiBUZAotKGxpbWl0LCkgMjEuMzIgVGoKLS0yOTUgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yODYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODcgVEptCi0oYWNjZXB0YWJsZSkgNDIuMDQyMiBUagotLTI4NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg2IFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotLTI4NiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4NyBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODYgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI4NiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI4NiBUSm0KLShieXRlKSAxNy4xNTU2IFRqCi0tMjg3IFRKbQotKGF0KSA3LjE5MyBUagotLTI4NiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjg2IFRKbQotKHRpbWUsKSAyMC4yMDQyIFRqCi0tMjk1IFRKbQotKGFsdGhvdWdoKSAzNC44NjkxIFRqCi0tMjg2IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4NyBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZCkgMTcuNzEzNSBUagotLTI4NiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4NiBUSm0KLSh0ZXJyaWJseSkgMjkuMzI5OSBUagotLTI4NiBUSm0KLShpbmVmKSAxNS40OTE4IFRqCi0yNSBUSm0KLShcMDAyY2llbnQuKSAyNy4zOTcyIFRqCi0tODM4IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotNzIgMzI0LjMwNiBUZAotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShhbCkgNy4xOTMgVGoKLTEwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZW5zdXJlKSAyNi4wMDI0IFRqCi0tMjUwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGxlYXN0KSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGJ5dGUpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKHNwYWNlKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWlsYWJsZSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTI1MCBUSm0KLShjYWxsLikgMTYuODc2NiBUagotWzEgMCAwIDEgNzIgMzIyLjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMTIuMTg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMDIuMzg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFVzZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTAwLjc3MiAzMDIuMzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMC43NzIgLTMwMi4zODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwMC43NzIgMzAyLjM4OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE5Ni40MTMgMzAyLjM4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTYuNDEzIC0zMDIuMzg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTguOTA0IDMwMi4zODkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oc2ltcGxlcikgMjkuODg3OCBUagotLTI1MCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi1bMSAwIDAgMSAyNjAuMDY0IDMwMi4zODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYwLjA2NCAtMzAyLjM4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYwLjA2NCAzMDIuMzg5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNDMuNzUgMzAyLjM4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDMuNzUgLTMwMi4zODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0My43NSAzMDIuMzg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDMwMC4yMzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI5MC4yNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI4MC40NzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzQ2IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM0NyBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGUpIDE3LjE1NTYgVGoKLS0zNDYgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0zNDYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDYgVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzQ3IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTM0NiBUSm0KLShhcykgOC4yOTg4NSBUagotLTM0NiBUSm0KLShkZXNjcmliZWQpIDM4LjE3NjcgVGoKLS0zNDYgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSwpIDYuOTE0MDQgVGoKLS0zNzEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDYgVEptCi0ocmVwZWF0ZWRseSkgNDEuNDk0MiBUagotLTM0NiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQyMi42MzggMjgwLjQ3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjIuNjM4IC0yODAuNDcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjIuNjM4IDI4MC40NzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSA1MTguMjc5IDI4MC40NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE4LjI3OSAtMjgwLjQ3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTIxLjcyOSAyODAuNDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVudGlsKSAxOC4yNzE0IFRqCi1bMSAwIDAgMSA3MiAyNjguNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNjguNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNjguNTE2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE0OS43MDkgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDkuNzA5IC0yNjguNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTIuMzE0IDI2OC41MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjIgVEptCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLS0zNDQgVEptCi0oQXBwZWFyYW5jZSkgNDcuNTcxNCBUagotLTI2MiBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMjYxLjc2NyAyNjguNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MS43NjcgLTI2OC41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2MS43NjcgMjY4LjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAzMzkuNDc1IDI2OC41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM5LjQ3NSAtMjY4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQyLjA4MSAyNjguNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRlbm90ZXMpIDMwLjQzNTcgVGoKLS0yNjIgVEptCi0odGhhdCkgMTQuOTQzOSBUagotWzEgMCAwIDEgMzkyLjY3MiAyNjguNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Mi42NzIgLTI2OC41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi42NzIgMjY4LjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDQ4OC4zMTMgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODguMzEzIC0yNjguNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTAuOTE5IDI2OC41MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaGFzKSAxMy4yODAxIFRqCi0tMjYyIFRKbQotKGRldGVjdGVkKSAzMy4xOTU0IFRqCi03MiAyNTYuNTYxIFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjEyIFRKbQotKGxvZ2ljYWwpIDI3LjExODIgVGoKLS0yMTIgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yMTEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjEyIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yMTIgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMjM3Ljg1OCAyNTYuNTYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNy44NTggLTI1Ni41NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNy44NTggMjU2LjU2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDMzMy40OTkgMjU2LjU2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzMuNDk5IC0yNTYuNTYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzUuNjA5IDI1Ni41NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTIxMiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMTIgVEptCi0ocHJvZHVjZSkgMzIuMDg5NSBUagotWzEgMCAwIDEgNDAyLjI2MyAyNTYuNTYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwMi4yNjMgLTI1Ni41NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwMi4yNjMgMjU2LjU2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA0NzkuOTcyIDI1Ni41NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc5Ljk3MiAtMjU2LjU2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgyLjA4MiAyNTYuNTYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVudGlsKSAxOC4yNzE0IFRqCi0tMjEyIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjEyIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotNzIgMjQ0LjYwNSBUZAotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTYgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjU2IFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNTUgVEptCi0ocGxhY2VkKSAyNi4wMDI0IFRqCi0tMjU2IFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yNTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU2IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1NiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTcgVEptCi0oc28pIDguODU2NzUgVGoKLS0yNTYgVEptCi0ob25jZSkgMTguODA5NCBUagotWzEgMCAwIDEgMjc4Ljk3OCAyNDQuNjA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC45NzggLTI0NC42MDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3OC45NzggMjQ0LjYwNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAzNTYuNjg3IDI0NC42MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzU2LjY4NyAtMjQ0LjYwNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU5LjIzNiAyNDQuNjA1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFwcGVhcnMsKSAzMi45MTY0IFRqCi0tMjU3IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1NiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTYgVEptCi0oZ3VhcmFudGVlZCkgNDMuNzA1OSBUagotLTI1NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjU2IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTUgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlKSAyNi41NjAzIFRqCi03MiAyMzIuNjUgVGQKLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMjUwIFRKbQotKG91dHB1dCwpIDI3Ljk1NTEgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDIwNS4zNjkgMjMyLjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNS4zNjkgLTIzMi42NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA1LjM2OSAyMzIuNjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMzE4Ljk0MyAyMzIuNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE4Ljk0MyAtMjMyLjY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjEuNDMzIDIzMi42NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oc2FmZWx5KSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGNhbGxlZC4pIDI2LjI4MTMgVGoKLVsxIDAgMCAxIDcyIDIzMC40OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIyMC41MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxMC43MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNTAgVEptCi0oY2FzZSkgMTcuMTQ1NiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlLCkgMTkuMDg4MyBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgMjYxLjI1OSAyMTAuNzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MS4yNTkgLTIxMC43MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2MS4yNTkgMjEwLjczMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzRW5kKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSAzNzQuODMzIDIxMC43MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzc0LjgzMyAtMjEwLjczMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc3LjMyMyAyMTAuNzMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oY2xlYW4pIDIxLjAyMTEgVGoKLS0yNTAgVEptCi0odXApIDkuOTYyNiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShyZWxlYXNlKSAyNy42NTYyIFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjA4LjU3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTk4LjYxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTg4LjgxNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDE4OC43MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMzcuODYzXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE3KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDIxIDIxCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjAwLjg4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxNzkuMzI4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTc1Ljc0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtLT5zKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLTk4LjQ4NzkgNjg3LjcyMSBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0tPmF2YWlsX291dCkgODkuNjYzNCBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLTkwIDY3NS43NjYgVGQKLShCWl9EQVRBX0VSUk9SKSA3Ny43MDgzIFRqCi05OC40ODc5IDY2My44MTEgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50ZWdyaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZGV0ZWN0ZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oc3RyZWFtKSAzNS44NjU0IFRqCi05MCA2NTEuODU2IFRkCi0oQlpfREFUQV9FUlJPUl9NQUdJQykgMTEzLjU3NCBUagotOTguNDg3OSA2MzkuOSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShkb2Vzbid0KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGJlZ2luKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHJpZ2h0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG1hZ2ljKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGJ5dGVzKSAyOS44ODc4IFRqCi05MCA2MjcuOTQ1IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDYxNS45OSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZXJlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdhc24ndCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlbm91Z2gpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA2MDQuMDM1IFRkCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotOTguNDg3OSA1OTIuMDggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obG9naWNhbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShlbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RyZWFtKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShkZXRlY3RlZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWxsKSAxNy45MzI3IFRqCi05OC40ODc5IDU4MC4xMjUgVGQKLShvdXRwdXQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oY29uc3VtZWQsKSA1My43OTggVGoKLS00MjYgVEptCi0oZWcpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocy0tPmF2YWlsX291dCkgNzcuNzA4MyBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLTkwIDU2OC4xNjkgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA1NTYuMjE0IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDU0MC42NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTguNzU1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiA1MTguNjU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNjAuNzcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUwOS4yOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTA5LjI5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotOTguNDg3OSA0OTcuMzM1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHJldHVybmVkKSA0Ny44MjA1IFRqCi05MCA0ODUuMzggVGQKLShCWjJfYnpEZWNvbXByZXNzRW5kKSAxMTMuNTc0IFRqCi05OC40ODc5IDQ3My40MjUgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNDU3Ljg4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ0Ny45Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDI3LjI2MiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4zLjYuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDQyNy4yNjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNDI3LjI2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA0MjcuMjYyIFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpEZWNvbXByZXNzRW5kKSAxOTYuMjU2IFRqCi1bMSAwIDAgMSAzMTYuMTE0IDQyNy4yNjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ0LjExNCAtMi4zMzI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTQxNS41NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDQxNS41NjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekRlY29tcHJlc3NFbmQpIDExMy41NzQgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLTI5OC4yNTkgNDEzLjgyMSBUZAotKCopIDUuOTc3NTYgVGoKLTMwNC4yMzYgNDE1LjU2NCBUZAotKHN0cm0pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA0MDAuMDIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5MC4wNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzc4LjEwNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWxlYXNlcykgMzQuODU5MSBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0oYXNzb2NpYXRlZCkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTI1MCBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSA3MiAzNzUuOTQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjUuOTg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTYuMTg3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgMzU2LjA4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zNDYuNzIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzNDYuNzIzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDMzNC43NjcgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybS0+cykgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05MCAzMjIuODEyIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgMzEwLjg1NyBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAyOTUuMzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI4NS4zNTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI3My4zOTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsbykgMTcuNzEzNSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWN0aW9uczopIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDcyIDI3My4yOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjYzLjkzM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTguNDg3OSAyNjMuOTMzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE5vbmUuKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA3MiAyNDguMzkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM4LjQyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjEzLjYzOSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy40LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShIaWdoLWxlKSA3MC4wMTE3IFRqCi0xNSBUSm0KLSh2ZWwpIDI4LjcxNTMgVGoKLS0yNzggVEptCi0oaW50ZXJmYWNlKSA4Ni4xMDQ2IFRqCi1bMSAwIDAgMSA3MiAyMDkuMDQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xOTkuMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5MS43MjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi0tMjUwIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZXMpIDIxLjAzMSBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0od3JpdGluZykgMjguNzgyIFRqCi1bMSAwIDAgMSAzMDAuMjkyIDE5MS43MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAwLjI5MiAtMTkxLjcyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAwLjI5MiAxOTEuNzIxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMzAuMTggMTkxLjcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzAuMTggLTE5MS43MjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMi42NyAxOTEuNzIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcm1hdCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotLTYyMCBUSm0KLShGaXJzdCwpIDIwLjc2MjEgVGoKLS0yNTAgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjUwIFRKbQotKGdlbmVyYWwpIDI5LjMxOTkgVGoKLS0yNTAgVEptCi0ocG9pbnRzLikgMjYuODQ5MiBUagotWzEgMCAwIDEgNzIgMTg5LjU2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjcyMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMTU5Ljg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMTU5Ljg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTE1OS44NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDE1OS44NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGwpIDEyLjczMjIgVGoKLS0zMzIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMzEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzMyIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTMzMiBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMzEgVEptCi0oYW4pIDkuNDA0NjkgVGoKLVsxIDAgMCAxIDIwMi45NTggMTU5Ljg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi45NTggLTE1OS44NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAyLjk1OCAxNTkuODQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0yMjAuODkxIDE1OC4wOTcgVGQKLSgqKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAyMjYuODY4IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuODY4IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzMC4xNzIgMTU5Ljg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0zMzIgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudCwpIDMyLjM3ODUgVGoKLVsxIDAgMCAxIDI5Mi40MjYgMTU5Ljg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Mi40MjYgLTE1OS44NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkyLjQyNiAxNTkuODQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMzM0LjI2OSAxNTkuODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM0LjI2OSAtMTU5Ljg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzQuMjY5IDE1OS44NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTExMCBUSm0KLShBZnRlcikgMjEuMDIxMSBUagotLTMzMiBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMzMxIFRKbQotKGNhbGwsKSAxNi44NzY2IFRqCi1bMSAwIDAgMSA0MTQuMDgzIDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTQuMDgzIC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNC4wODMgMTU5Ljg0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDQ1NS45MjYgMTU5Ljg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NS45MjYgLTE1OS44NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU5LjIzIDE1OS44NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMzIgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMzEgVEptCi0oY29uc3VsdGVkKSAzOC4xODY2IFRqCi04Ni45NDQgMTQ3Ljg4NSBUZAotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0zNDkgVEptCi0odG8pIDcuNzUwOSBUagotLTM0OSBUSm0KLShkZXRlcm1pbmUpIDM5Ljg0MDQgVGoKLS0zNDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ5IFRKbQotKG91dGNvbWUpIDM0LjMxMTIgVGoKLS0zNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ4IFRKbQotKGNhbGwuKSAxNi44NzY2IFRqCi0tMTIxMyBUSm0KLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgMjgwLjM4NiAxNDcuODg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4MC4zODYgLTE0Ny44ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4MC4zODYgMTQ3Ljg4NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzMjIuMjI5IDE0Ny44ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIyLjIyOSAtMTQ3Ljg4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI1LjcwNCAxNDcuODg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi1bMSAwIDAgMSAzMzUuODI0IDE0Ny44ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM1LjgyNCAtMTQ3Ljg4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM1LjgyNCAxNDcuODg1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzNjUuNzExIDE0Ny44ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY1LjcxMSAtMTQ3Ljg4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY1LjcxMSAxNDcuODg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zNDkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ5IFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTM0OCBUSm0KLShjb21wbGV0ZWQpIDQxLjUwNDIgVGoKLS0zNDkgVEptCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzc0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ4IFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLTg2Ljk0NCAxMzUuOTMgVGQKLSh0aGVuKSAxNy4xNTU2IFRqCi0tMjcxIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI3MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzEgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjcwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSkgMTYuNTk3NyBUagotLTI3MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzAgVEptCi0oZnVuY3Rpb24pIDMzLjIwNTMgVGoKLS0yNzEgVEptCi0oXChpZikgOS40MDQ2OSBUagotLTI3MCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeVwpKSA4LjI5ODg1IFRqCi0tMjcxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjcxIFRKbQotKGNvbnMpIDE4LjI2MTQgVGoKLTEgVEptCi0odSkgNC45ODEzIFRqCi0tMSBUSm0KLShsKSAyLjc2OTYgVGoKLTEgVEptCi0odGVkLikgMTQuNjY0OSBUagotLTc0NCBUSm0KLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgMzY1LjA3NyAxMzUuOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY1LjA3NyAtMTM1LjkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjUuMDc3IDEzNS45MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0MDYuOTIgMTM1LjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNi45MiAtMTM1LjkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDkuNjE2IDEzNS45MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotWzEgMCAwIDEgNDE4Ljk1NiAxMzUuOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE4Ljk1NiAtMTM1LjkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTguOTU2IDEzNS45MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotWzEgMCAwIDEgNDg0LjcxIDEzNS45M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODQuNzEgLTEzNS45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDg0LjcxIDEzNS45MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjcxIFRKbQotKHRoZXJlKSAxOS45MTUyIFRqCi0tMjcwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI3MSBUSm0KLShhbikgOS40MDQ2OSBUagotODYuOTQ0IDEyMy45NzUgVGQKLShlcnJvcikgMTkuMzU3MyBUagotLTI0NiBUSm0KLShyZWFkaW5nL3dyaXRpbmcpIDYxLjQyOTQgVGoKLS0yNDUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ2IFRKbQotKHVuZGVybHlpbmcpIDQzLjE2NzkgVGoKLS0yNDYgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI0NSBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMjQ3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjQ1IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI0NiBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNDYgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI0NSBUSm0KLShjb25zdWx0KSAyOC43ODIgVGoKLVsxIDAgMCAxIDQxNC4wOTYgMTIzLjk3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTQuMDk2IC0xMjMuOTc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTQuMDk2IDEyMy45NzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZXJybm8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ0My45ODQgMTIzLjk3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDMuOTg0IC0xMjMuOTc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDYuNDMyIDEyMy45NzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLykgMi43Njk2IFRqCi1bMSAwIDAgMSA0NTEuNjQ5IDEyMy45NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDUxLjY0OSAtMTIzLjk3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDUxLjY0OSAxMjMuOTc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHBlcnJvcikgMzUuODY1NCBUagotWzEgMCAwIDEgNDg3LjUxNCAxMjMuOTc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ny41MTQgLTEyMy45NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4OS45NjIgMTIzLjk3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjQ2IFRKbQotKGRldGVybWluZSkgMzkuODQwNCBUagotODYuOTQ0IDExMi4wMiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTM1NiBUSm0KLShjYXVzZSkgMjIuMTI2OSBUagotLTM1NiBUSm0KLShvZikgOC4yOTg4NSBUagotLTM1NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTYgVEptCi0oZGlmKSAxMS4wNjg0IFRqCi0yNSBUSm0KLShcMDAyY3VsdHkpIDI1LjQ2NDQgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDIwNi41MjggMTEyLjAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNi41MjggLTExMi4wMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA2LjUyOCAxMTIuMDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjQ4LjM3MSAxMTIuMDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ4LjM3MSAtMTEyLjAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTEuOTE2IDExMi4wMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShtYXkpIDE3LjE1NTYgVGoKLS0zNTYgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTM1NiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM1NSBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zNTYgVEptCi0odG8pIDcuNzUwOSBUagotLTM1NiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFyaW91cykgMjQuMzQ4NiBUagotLTM1NiBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTM1NiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOykgMjMuMjQyNyBUagotLTQwOCBUSm0KLShwcmVjaXNlKSAyOC4yMTQxIFRqCi0tMzU2IFRKbQotKGRldGFpbHMpIDI2LjAxMjMgVGoKLS0zNTYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzU2IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0zNTYgVEptCi0ob24pIDkuOTYyNiBUagotLTM1NiBUSm0KLShhKSA0LjQyMzM5IFRqCi04Ni45NDQgMTAwLjA2NCBUZAotKHBlcikgMTIuNzIyMiBUagotMjAgVEptCi0oLWZ1bmN0aW9uKSAzNi41MjI5IFRqCi0tMjUwIFRKbQotKGJhc2lzKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGJlbG8pIDE3LjE1NTYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxODYuODM5IDEwMC4wNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE0LjgzOCAtNDkuMjEyNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyMiAyMgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMxLjUxNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSA5NS45NTc2IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTUuOTU3NiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTUuOTU3NiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEzNy44MDEgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuODAxIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDAuMTc5IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW5kaWNhdGVzKSAzNS40MTcgVGoKLS0yMzkgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yMzggVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yMzkgVEptCi0oXChpZSwpIDEzLjAwMTIgVGoKLS0yNDEgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHl0aGluZykgMjUuNDY0NCBUagotLTIzOSBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4Y2VwdCkgMjEuNTc5IFRqCi1bMSAwIDAgMSAyOTIuMjI1IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkyLjIyNSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkyLjIyNSA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMjIuMTEzIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIyLjExMyAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI0LjQ5MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNDEuMjU2IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQxLjI1NiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQxLjI1NiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDQxOC45NjUgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTguOTY1IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTguOTY1IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCksKSA1LjgwODIgVGoKLS0yMzkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjM5IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTIzOCBUSm0KLShpbW1lZGlhdGVseSkgNDkuODEzIFRqCi0tMjM5IFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgODYuOTQ0IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE3Ni42MDggNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzYuNjA4IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzkuMzQzIDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXChvcikgMTEuNjE2NCBUagotWzEgMCAwIDEgMTkzLjY5NSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5My42OTUgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5My42OTUgNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZUNsb3NlKSA5NS42NDEgVGoKLVsxIDAgMCAxIDI4OS4zMzcgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODkuMzM3IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODkuMzM3IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI4MSBUSm0KLShkZXBlbmRpbmcpIDQxLjUwNDIgVGoKLS0yNzQgVEptCi0ob24pIDkuOTYyNiBUagotLTI3NSBUSm0KLSh3aGV0aGVyKSAzMi4wODk1IFRqCi0tMjc0IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI3NSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNzUgVEptCi0oYXR0ZW1wdGluZykgNDIuNjIgVGoKLS0yNzQgVEptCi0odG8pIDcuNzUwOSBUagotLTI3NSBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjc0IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjc1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzQgVEptCi0od3JpdGVcKSkgMjMuNzkwNyBUagotODYuOTQ0IDY4Ni4xMjcgVGQKLSh0bykgNy43NTA5IFRqCi0tMjQyIFRKbQotKGZyZWUpIDE1LjQ4MTkgVGoKLS0yNDIgVEptCi0odXApIDkuOTYyNiBUagotLTI0MSBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI0MiBUSm0KLShyZXNvdXJjZXMpIDM3LjYxODggVGoKLS0yNDIgVEptCi0oYXNzb2NpYXRlZCkgNDAuOTQ2MyBUagotLTI0MiBUSm0KLSh3aSkgOS45NjI2IFRqCi0xIFRKbQotKHRoKSA3Ljc1MDkgVGoKLS0yNDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQyIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLS02MTQgVEptCi0oT25jZSkgMjEuMDIxMSBUagotLTI0MiBUSm0KLShhbikgOS40MDQ2OSBUagotLTI0MiBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI0MiBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNDIgVEptCi0oYmVlbikgMTguODA5NCBUagotLTI0MSBUSm0KLShpbmRpY2F0ZWQsKSAzOS4wMTM1IFRqCi0tMjQ0IFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLS0yNDEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDIgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNDIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yNDIgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGNlcHQpIDIxLjU3OSBUagotWzEgMCAwIDEgODYuOTQ0IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNjc0LjE3MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE3Ni42MDggNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzYuNjA4IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzkuNzA1IDY3NC4xNzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDE4My4wMjIgNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuMDIyIC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODMuMDIyIDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSAyNzguNjY0IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjY2NCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc4LjY2NCA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMzExIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzExIFRKbQotKHVuZGVcMDAybmVkLikgNDEuNzgzMSBUagotLTk4NSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0zMTEgVEptCi0oaW1wbGljYXRpb24pIDQ1LjM4OTYgVGoKLS0zMTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMTEgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTMxMSBUSm0KLShcKDFcKSkgMTEuNjE2NCBUagotWzEgMCAwIDEgNDU1Ljk4OCA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NS45ODggLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1NS45ODggNjc0LjE3MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0OTcuODMxIDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk3LjgzMSAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTAwLjkyOCA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTMxMSBUSm0KLShiZSkgOS40MDQ2OSBUagotODYuOTQ0IDY2Mi4yMTcgVGQKLShjaGVjaykgMjMuMjMyOCBUagotMTAgVEptCi0oZWQpIDkuNDA0NjkgVGoKLS0yOTEgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yOTEgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTI5MSBUSm0KLShjYWxsLCkgMTYuODc2NiBUagotLTMwMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5MSBUSm0KLShcKDJcKSkgMTEuNjE2NCBUagotLTI5MSBUSm0KLShpZikgNi4wODcxNSBUagotWzEgMCAwIDEgMjI1LjM0NyA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNS4zNDcgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNS4zNDcgNjYyLjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyNjcuMTkgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjcuMTkgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3MC4wOSA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluZGljYXRlcykgMzUuNDE3IFRqCi0tMjkxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjkxIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzNDUuMTYxIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ1LjE2MSAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ1LjE2MSA2NjIuMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgNDM0LjgyNCA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzNC44MjQgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzNy43MjQgNjYyLjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgNDQxLjA0MSA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MS4wNDEgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0MS4wNDEgNjYyLjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZUNsb3NlKSA5NS42NDEgVGoKLVsxIDAgMCAxIDUzNi42ODMgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzYuNjgzIC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzYuNjgzIDY2Mi4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLTg2Ljk0NCA2NTAuMjYyIFRkCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY2FsbGVkKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oY2xlYW4pIDIxLjAyMTEgVGoKLS0yNTAgVEptCi0odXAuKSAxMi40NTMzIFRqCi1bMSAwIDAgMSAyMjAuMDM0IDY1MC4yNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ4LjAzNCAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNjI4LjM0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDYyOC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjI4LjM0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi1bMSAwIDAgMSAxMDYuMzYyIDYyOC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA2LjM2MiAtNjI4LjM0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA2LjM2MiA2MjguMzQ0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEZJTEUpIDIzLjkxMDIgVGoKLTEzMC4yNzMgNjI2LjYgVGQKLSgqKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxMzYuMjUgNjI4LjM0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzYuMjUgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0MC4xNzcgNjI4LjM0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50cykgMzMuNzYzMyBUagotLTM5NCBUSm0KLShwYXNzZWQpIDI2LjU2MDMgVGoKLS0zOTQgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMjI3LjU5MiA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNy41OTIgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNy41OTIgNjI4LjM0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkT3BlbikgODMuNjg1OCBUagotWzEgMCAwIDEgMzExLjI3OCA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMS4yNzggLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxNS4yMDUgNjI4LjM0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgvKSAyLjc2OTYgVGoKLVsxIDAgMCAxIDMyMS45MDEgNjI4LjM0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjEuOTAxIC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjEuOTAxIDYyOC4zNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA0MTEuNTY1IDYyOC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDExLjU2NSAtNjI4LjM0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE1LjQ5MSA2MjguMzQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTM5NCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM5NCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zOTQgVEptCi0odG8pIDcuNzUwOSBUagotLTM5NCBUSm0KLShiaW5hcnkpIDI1LjQ1NDQgVGoKLS0zOTUgVEptCi0obW9kZS4pIDI0LjYyNzUgVGoKLTg2Ljk0NCA2MTYuMzg5IFRkCi0oTW9zdCkgMjAuNDgzMSBUagotLTIyOSBUSm0KLShVbml4KSAxOS45MjUyIFRqCi0tMjI5IFRKbQotKHN5c3RlbXMpIDMxLjU1MTYgVGoKLS0yMjggVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTIyOSBUSm0KLShkbykgOS45NjI2IFRqCi0tMjI5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTIyOSBUSm0KLShieSkgOS45NjI2IFRqCi0tMjI5IFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdCwpIDE3LjQzNDYgVGoKLS0yMzMgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjI5IFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMjI5IFRKbQotKHBsYXRmb3JtcywpIDQwLjY3NzMgVGoKLS0yMzMgVEptCi0oaW5jbHVkaW5nKSAzNy42Mzg3IFRqCi0tMjI5IFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGluZG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMjI4IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjI5IFRKbQotKE1hYywpIDIwLjE5NDIgVGoKLS0yMzMgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTIyOSBUSm0KLShub3QuKSAxNS4yMjI5IFRqCi0tNjA2IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjI5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTIyOSBUSm0KLShvbWl0KSAxOC4yNzE0IFRqCi04Ni45NDQgNjA0LjQzMyBUZAotKHRoaXMsKSAxNi44ODY2IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oZW5jb3VudGVyKSAzOS4yODI1IFRqCi0tMjUwIFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTI1MCBUSm0KLShtbykgMTIuNzMyMiBUagotMTUgVEptCi0odmluZykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHBsYXRmb3Jtcy4pIDQwLjY3NzMgVGoKLVsxIDAgMCAxIDM3Mi42NiA2MDQuNDMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMC42NiAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTU4Mi41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNTgyLjUxNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDU4Mi41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDU4Mi41MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTWVtb3J5KSAzNC4zMTEyIFRqCi0tMzQ4IFRKbQotKGFsbG9jYXRpb24pIDM5LjI5MjUgVGoKLS0zNDggVEptCi0ocmVxdWVzdHMpIDMyLjY0NzQgVGoKLS0zNDggVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzQ4IFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0zNDggVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMjY3LjY3IDU4Mi41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY3LjY3IC01ODIuNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjcuNjcgNTgyLjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShtYWxsb2MpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDMwMy41MzUgNTgyLjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDMuNTM1IC01ODIuNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDcuMDAzIDU4Mi41MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLykgMi43Njk2IFRqCi1bMSAwIDAgMSAzMTMuMjQxIDU4Mi41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEzLjI0MSAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzEzLjI0MSA1ODIuNTE2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZyZWUpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDMzNy4xNTEgNTgyLjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzcuMTUxIC01ODIuNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzcuMTUxIDU4Mi41MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTEyMDkgVEptCi0oQXQpIDkuOTYyNiBUagotLTM0OCBUSm0KLShwcmVzZW50KSAyOC43NzIgVGoKLS0zNDggVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0zNDggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNDggVEptCi0obm8pIDkuOTYyNiBUagotLTM0OCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXR5KSAyNC45MDY1IFRqCi0tMzQ4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTM0OCBUSm0KLSh1c2VyKSAxNi41OTc3IFRqCi0yMCBUSm0KLSgtZGVcMDAybmVkKSAzMi42NDc0IFRqCi04Ni45NDQgNTcwLjU2IFRkCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGFsbG9jYXRvcnMpIDM4LjczNDYgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKEkvTykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oXChjb3VsZCkgMjUuNDU0NCBUagotLTI1MCBUSm0KLShlYXNpbHkpIDIzLjI0MjcgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oYWRkZWQsKSAyNi4yODEzIFRqCi0tMjUwIFRKbQotKHRob3VnaFwpLikgMzMuNDg0MyBUagotWzEgMCAwIDEgMzg3LjE2NSA1NzAuNTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE1LjE2NSAtMTIuMTE5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQ4LjQ3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI5Ljk3NyBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjEuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDUyOS45NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNTI5Ljk3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA1MjkuOTc3IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpSZWFkT3BlbikgMTQ0LjYwOSBUagotWzEgMCAwIDEgMjY0LjQ2OCA1MjkuOTc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi40NjggLTIuMzMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTcyLjcyNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNzEuNzMxIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNjguMTQ0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUxOC4yNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUxOC4yNzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odHlwZWRlZikgNDEuODQyOSBUagotLTQyNiBUSm0KLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaRklMRTspIDQxLjg0MjkgVGoKLTkwIDQ5NC4zNjkgVGQKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEzMC4xMDkgNDkyLjYyNSBUZAotKCopIDUuOTc3NTYgVGoKLTEzNi4wODcgNDk0LjM2OSBUZAotKEJaMl9ielJlYWRPcGVuXCgpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNTIuMTcxIDQ5Mi42MjUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNTguMTQ5IDQ5NC4zNjkgVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShGSUxFKSAyMy45MTAyIFRqCi0zMzguMzY4IDQ5Mi42MjUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNDQuMzQ2IDQ5NC4zNjkgVGQKLShmLCkgMTEuOTU1MSBUagotMTkxLjg1NSA0ODIuNDE0IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSwpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNtYWxsLCkgMzUuODY1NCBUagotMTkxLjg1NSA0NzAuNDU4IFRkCi0odm9pZCkgMjMuOTEwMiBUagotMjIwLjAxIDQ2OC43MTUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMjUuOTg3IDQ3MC40NTggVGQKLSh1bnVzZWQsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgNDU0LjkxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDQuOTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzIuOTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByZXBhcmUpIDMwLjQyNTggVGoKLS0yOTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI4OSBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjkwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yOTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI4OSBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjkwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI4OSBUSm0KLShoYW5kbGUpIDI2LjU2MDMgVGoKLVsxIDAgMCAxIDI3Mi42OTcgNDMyLjk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzIuNjk3IC00MzIuOTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzIuNjk3IDQzMi45OTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZikgNS45Nzc1NiBUagotWzEgMCAwIDEgMjc4LjY3NSA0MzIuOTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC42NzUgLTQzMi45OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3OC42NzUgNDMyLjk5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyODUuNDM5IDQzMi45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg1LjQzOSAtNDMyLjk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg1LjQzOSA0MzIuOTk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGYpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDI5MS40MTcgNDMyLjk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTEuNDE3IC00MzIuOTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTQuMzAzIDQzMi45OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjkwIFRKbQotKHJlZmVyKSAxOC43OTk0IFRqCi0tMjg5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI5MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yODkgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yOTAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjg5IFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yOTAgVEptCi0ob3BlbmVkKSAyOC43NzIgVGoKLS0yOTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjg5IFRKbQotKHJlYWRpbmcsKSAzMi4zNjg1IFRqCi0tMzAwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi03MiA0MjEuMDQ0IFRkCi0oZm9yKSAxMS42MTY0IFRqCi0tMzA2IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMzA1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNiBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTMwNiBUSm0KLShpbmRpY2F0b3IpIDM1LjQxNyBUagotLTMwNSBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTkzLjQ1NyA0MjEuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5My40NTcgLTQyMS4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5My40NTcgNDIxLjA0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZXJyb3JcKGZcKSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNDcuMjU1IDQyMS4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ3LjI1NSAtNDIxLjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ3LjI1NSA0MjEuMDQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpaXMpIDkuOTYyNiBUagotLTMwNiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zMDUgVEptCi0oc2V0LikgMTMuNTU5MSBUagotLTk1NCBUSm0KLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgMzA4Ljc4NCA0MjEuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwOC43ODQgLTQyMS4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwOC43ODQgNDIxLjA0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzbWFsbCkgMjkuODg3OCBUagotWzEgMCAwIDEgMzM4LjY3MSA0MjEuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOC42NzEgLTQyMS4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MS43MTcgNDIxLjA0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMwNiBUSm0KLSgxLCkgNy40NzE5NSBUagotLTMxOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMwNiBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMzA1IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTMwNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA2IFRKbQotKGRlYykgMTMuODI4MSBUagotMSBUSm0KLShvbXByZXNzKSAzMy4yMDUzIFRqCi0tMzA2IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0zMDYgVEptCi0obGVzcykgMTQuOTQzOSBUagotNzIgNDA5LjA4OSBUZAotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhwZW5zZSkgMjcuNjY2MSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShzcGVlZC4pIDI1LjE3NTUgVGoKLVsxIDAgMCAxIDcyIDQwNi45MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5Ni45NjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4Ny4xNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yMjcgVEptCi0ocmVhc29ucykgMjkuODc3OCBUagotLTIyNyBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGxhaW5lZCkgMzQuMzExMiBUagotLTIyOCBUSm0KLShiZWxvKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTg5LjE5MyAzODcuMTcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OS4xOTMgLTM4Ny4xNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OS4xOTMgMzg3LjE3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyNDguOTY5IDM4Ny4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ4Ljk2OSAtMzg3LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUxLjIzMiAzODcuMTcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yMjcgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTIyNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDMzMi43MzIgMzg3LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzIuNzMyIC0zODcuMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzIuNzMyIDM4Ny4xNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oblVudXNlZCkgNDEuODQyOSBUagotWzEgMCAwIDEgMzc0LjU3NSAzODcuMTcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3NC41NzUgLTM4Ny4xNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3Ni44MzggMzg3LjE3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tMjI3IFRKbQotKHN0YXJ0aW5nKSAyOS44ODc4IFRqCi0tMjI3IFRKbQotKGF0KSA3LjE5MyBUagotWzEgMCAwIDEgNDQxLjc0IDM4Ny4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQxLjc0IC0zODcuMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDEuNzQgMzg3LjE3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQ3Ny42MDUgMzg3LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzcuNjA1IC0zODcuMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuNjA1IDM4Ny4xNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTIzMiBUSm0KLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yMjcgVEptCi0oc3RhcnRpbmcpIDI5Ljg4NzggVGoKLTcyIDM3NS4yMTYgVGQKLSh0bykgNy43NTA5IFRqCi0tMjgwIFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yNzkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi1bMSAwIDAgMSAxNTUuMDk0IDM3NS4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjA5NCAtMzc1LjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU1LjA5NCAzNzUuMjE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGYpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDE2MS4wNzIgMzc1LjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjEuMDcyIC0zNzUuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMDcyIDM3NS4yMTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTc5NyBUSm0KLShBdCkgOS45NjI2IFRqCi0tMjgwIFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLVsxIDAgMCAxIDIwNi40MTQgMzc1LjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDYuNDE0IC0zNzUuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDYuNDE0IDM3NS4yMTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTUFYX1VOVVNFRCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMjg0LjEyMiAzNzUuMjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4NC4xMjIgLTM3NS4yMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Ni45MDcgMzc1LjIxNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tMjgwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI3OSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4MCBUSm0KLShzdXBwbGllZCkgMzMuNzYzMyBUagotLTI3OSBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODAgVEptCi0odGhpcy4pIDE2Ljg4NjYgVGoKLS03OTcgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0yNzkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjgwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjaWxpdHkpIDI0LjkwNjUgVGoKLS0yNzkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjc5IFRKbQotKHJlcXVpcmVkLCkgMzUuNjg2IFRqCi03MiAzNjMuMjYgVGQKLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKHBhc3MpIDE3LjE1NTYgVGoKLVsxIDAgMCAxIDEzOC4xNDEgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC4xNDEgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM4LjE0MSAzNjMuMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTlVMTCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMTYyLjA1MiAzNjMuMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYyLjA1MiAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuNTQyIDM2My4yNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMTgxLjQxOSAzNjMuMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgxLjQxOSAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODEuNDE5IDM2My4yNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgwKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxODcuMzk3IDM2My4yNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODcuMzk3IC0zNjMuMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OS44ODcgMzYzLjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotWzEgMCAwIDEgMjAzLjk5NCAzNjMuMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAzLjk5NCAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuOTk0IDM2My4yNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDIzOS44NiAzNjMuMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM5Ljg2IC0zNjMuMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Mi4zNTEgMzYzLjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKG4pIDQuOTgxMyBUagotWzEgMCAwIDEgMjY0LjIwOCAzNjMuMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY0LjIwOCAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjQuMjA4IDM2My4yNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShVbnVzZWQpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDMwMC4wNzQgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMC4wNzQgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAyLjU2NSAzNjMuMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmVzcGVjdGkpIDMwLjk4MzcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWx5KSAxMi4xNzQzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzNjEuMTAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNTEuMTQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNDEuMzQzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShtZWFuaW5nKSAzNC4zMTEyIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHBhcmFtZXRlcnMpIDQzLjcwNTkgVGoKLVsxIDAgMCAxIDE5Ni42MzEgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTYuNjMxIC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTYuNjMxIDM0MS4zNDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc21hbGwpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIyNi41MTkgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuNTE5IC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjkuMDEgMzQxLjM0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjQ1Ljg4NyAzNDEuMzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS44ODcgLTM0MS4zNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0NS44ODcgMzQxLjM0MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMjk5LjY4NSAzNDEuMzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OS42ODUgLTM0MS4zNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS42ODUgMzQxLjM0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHNlZSkgMTIuNzIyMiBUagotWzEgMCAwIDEgMzE5Ljg3OSAzNDEuMzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxOS44NzkgLTM0MS4zNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxOS44NzkgMzQxLjM0MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotWzEgMCAwIDEgNDM5LjQzMSAzNDEuMzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzOS40MzEgLTM0MS4zNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzOS40MzEgMzQxLjM0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzMzkuMTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjkuMjIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTkuNDI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTQwMiBUSm0KLShhbW91bnQpIDI5Ljg4NzggVGoKLS00MDIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00MDIgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tNDAyIFRKbQotKG5lZWRlZCkgMjguMjE0MSBUagotLTQwMiBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDAyIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS00MDIgVEptCi0oYSkgNC40MjMzOSBUagotLTQwMSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS00MDIgVEptCi0oY2Fubm90KSAyNi41NjAzIFRqCi0tNDAyIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tNDAyIFRKbQotKGRldGVybWluZWQpIDQ0LjgyMTcgVGoKLS00MDIgVEptCi0odW50aWwpIDE4LjI3MTQgVGoKLS00MDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDAyIFRKbQotKFwwMDJsZScpIDE2LjA0OTcgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS00MDIgVEptCi0oaGVhZGVyKSAyNi41NTAzIFRqCi0tNDAyIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTQwMiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tNDAyIFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi03MiAzMDcuNDcgVGQKLShTbykgMTAuNTIwNSBUagotLTQ5MiBUSm0KLShpdCkgNS41MzkyMSBUagotLTQ5MSBUSm0KLShpcykgNi42NDUwNSBUagotLTQ5MiBUSm0KLShwb3NzaWJsZSkgMzIuNjU3NCBUagotLTQ5MiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi1bMSAwIDAgMSAxNjYuNzk3IDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjYuNzk3IC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni43OTcgMzA3LjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyNTAuNDgzIDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTAuNDgzIC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1NS4zODEgMzA3LjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJldHVybnMpIDI3LjY2NjEgVGoKLVsxIDAgMCAxIDI4Ny45NDUgMzA3LjQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Ny45NDUgLTMwNy40N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg3Ljk0NSAzMDcuNDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfT0spIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMxNy44MzMgMzA3LjQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNy44MzMgLTMwNy40N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIyLjcyOSAzMDcuNDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tNDkyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS00OTEgVEptCi0oc3Vic2VxdWVudCkgNDQuMjczOCBUagotLTQ5MiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS00OTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQzMS4xMzUgMzA3LjQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMS4xMzUgLTMwNy40N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMxLjEzNSAzMDcuNDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgNDkwLjkxMSAzMDcuNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkwLjkxMSAtMzA3LjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTUuODEgMzA3LjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS00OTIgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi1bMSAwIDAgMSA3MiAyOTUuNTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTUuNTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyOTUuNTE0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTQzLjczMSAyOTUuNTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0My43MzEgLTI5NS41MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0My43MzEgMjk1LjUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyOTQuMjA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODQuMjQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzMuNTk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgMjczLjU5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC0yNzMuNTk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDI3My41OTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyAyNzMuNTk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTI3My41OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgMjczLjU5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDI3MS40NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE2OC4zNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTY3LjM3MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDE2My43ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0yNjIuMDc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAyNjIuMDc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0NPTkZJR19FUlJPUikgODkuNjYzNCBUagotOTguNDg3OSAyNTAuMTIgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGlicmFyeSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShtaXMtY29tcGlsZWQpIDcxLjczMDcgVGoKLTkwIDIzOC4xNjUgVGQKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSAyMjYuMjA5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDIxNC4yNTQgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuZWl0aGVyKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0obm9yKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgMjAyLjI5OSBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHVudXNlZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSg9PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKCYmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oIT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotOTguNDg3OSAxOTAuMzQ0IFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0odW51c2VkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oJiYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oIVwoMCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSg8PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKDw9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX01BWF9VTlVTRURcKSkgODMuNjg1OCBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotOTAgMTc4LjM4OSBUZAotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi05OC40ODc5IDE2Ni40MzQgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShmZXJyb3JcKGZcKSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vbnplcm8pIDQxLjg0MjkgVGoKLTkwIDE1NC40NzggVGQKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLTk4LjQ4NzkgMTQyLjUyMyBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGluc3VmZmljaWVudCkgNzEuNzMwNyBUagotLTQyNiBUSm0KLShtZW1vcnkpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYXZhaWxhYmxlKSA1My43OTggVGoKLTkwIDEzMC41NjggVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSAxMTguNjEzIFRkCi0ob3RoZXJ3aXNlLikgNTkuNzc1NiBUagotWzEgMCAwIDEgNzIgMTAzLjA3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05My4xMDg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4MS4xNTMzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgODEuMDUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMwLjIwMl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi45NzM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUxLjA3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MS4wNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTkpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMjMgMjMKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC04MS4zM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oUG9pbnRlcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhYnN0cmFjdCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLTkwIDY4Ny43MjEgVGQKLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY3NS43NjYgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNjYwLjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MzguMzA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiA2MzguMjA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNjAuNzcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTYyOC44NDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDYyOC44NDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotOTguNDg3OSA2MTYuODg3IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotOTAgNjA0LjkzMiBUZAotKEJaMl9iekNsb3NlKSA2NS43NTMyIFRqCi05OC40ODc5IDU5Mi45NzYgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNTc3LjQzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2Ny40NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0Ni44MTMgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC4yLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCA1NDYuODEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTU0Ni44MTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggNTQ2LjgxMyBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6UmVhZCkgMTAzLjI5MiBUagotWzEgMCAwIDEgMjIzLjE1IDU0Ni44MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUxLjE1IC0yLjMzMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTM1LjExNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTM1LjExNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTIwOC41OTUgNTMzLjM3MyBUZAotKCopIDUuOTc3NTYgVGoKLTIxNC41NzIgNTM1LjExNiBUZAotKGJ6ZXJyb3IsKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMzA2Ljc0NyA1MzMuMzczIFRkCi0oKikgNS45Nzc1NiBUagotMzEyLjcyNCA1MzUuMTE2IFRkCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotMzU3LjA3NyA1MzMuMzczIFRkCi0oKikgNS45Nzc1NiBUagotMzYzLjA1NSA1MzUuMTE2IFRkCi0oYnVmLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGVuKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgNTE5LjU3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MDkuNjEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTcuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJlYWRzKSAyNC4zNDg2IFRqCi0tMjg1IFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yODQgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTIyLjU2OSA0OTcuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMi41NjkgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMi41NjkgNDk3LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsZW4pIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDE0MC41MDEgNDk3LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuNTAxIC00OTcuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDMuMzM3IDQ5Ny42NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCh1bmNvbXByZXNzZWRcKSkgNjMuNjMxMSBUagotLTI4NSBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMjg0IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yODUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg0IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yODUgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi1bMSAwIDAgMSAzMzYuMzE5IDQ5Ny42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM2LjMxOSAtNDk3LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM2LjMxOSA0OTcuNjU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGIpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDM0Mi4yOTYgNDk3LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuMjk2IC00OTcuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDUuMTMyIDQ5Ny42NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW50bykgMTUuNTAxOCBUagotLTI4NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODQgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi1bMSAwIDAgMSA0MDUuMjA1IDQ5Ny42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA1LjIwNSAtNDk3LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA1LjIwNSA0OTcuNjU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1ZikgMTcuOTMyNyBUagotWzEgMCAwIDEgNDIzLjEzNyA0OTcuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMy4xMzcgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMy4xMzcgNDk3LjY1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tODI4IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjg0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NSBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjg1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI4NCBUSm0KLShzdWNjZXNzZnVsLCkgNDMuNDM2OSBUagotWzEgMCAwIDEgNzIgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDg1LjcwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMTMuODQzIDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjg0MyAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE3LjM2IDQ4NS43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNTMgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzUzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE1My4zNzQgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTMuMzc0IC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTMuMzc0IDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfT0spIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE4My4yNjIgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuMjYyIC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODYuNzc4IDQ4NS43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLS0zNTMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzUzIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTM1MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTM1MyBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMzUzIFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0zNTMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNTMgVEptCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLS0xMjM4IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzUzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM1MyBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tMzUzIFRKbQotKGVuZC1vZi1zdHJlYW0pIDU1Ljg4MDIgVGoKLS0zNTMgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzUzIFRKbQotKGRldGVjdGVkLCkgMzUuNjg2IFRqCi1bMSAwIDAgMSA3MiA0NzMuNzQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzMuNzQ2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDExMy44NDMgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuNzk1IDQ3My43NDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI5NiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI5NyBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0yOTYgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTcyLjMyOSA0NzMuNzQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Mi4zMjkgLTQ3My43NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Mi4zMjkgNDczLjc0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyNTAuMDM3IDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUwLjAzNyAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUwLjAzNyA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yOTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk2IFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI5NiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5NyBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMjk2IFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yOTYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTYgVEptCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLS04OTggVEptCi0oQWxsKSAxMi43MzIyIFRqCi0tMjk3IFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi1bMSAwIDAgMSA0NzAgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzAgLTQ3My43NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3MCA0NzMuNzQ2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDUxMS44NDMgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuODQzIC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTQuNzk1IDQ3My43NDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcykgMjAuNDczMSBUagotNzIgNDYxLjc5MSBUZAotKGRlbm90ZSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNDYxLjY5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDUxLjcyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDM5Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMxLjc3NiAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM0LjIyNCA0MzkuODczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yNDYgVEptCi0oc3VwcGx5KSAyNi41NzAzIFRqCi1bMSAwIDAgMSAxODEuMTkzIDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgxLjE5MyAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgxLjE5MyA0MzkuODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxlbikgMTcuOTMyNyBUagotWzEgMCAwIDEgMTk5LjEyNiA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OS4xMjYgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS41NzUgNDM5Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcywpIDIzLjUyMTcgVGoKLS0yNDcgVEptCi0odW5sZXNzKSAyNC45MDY1IFRqCi0tMjQ1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NiBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tMjQ2IFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTI0NiBUSm0KLShlbmQpIDE0LjM4NiBUagotLTI0NSBUSm0KLShpcykgNi42NDUwNSBUagotLTI0NiBUSm0KLShkZXRlY3RlZCkgMzMuMTk1NCBUagotLTI0NiBUSm0KLShvcikgOC4yOTg4NSBUagotLTI0NiBUSm0KLShhbikgOS40MDQ2OSBUagotLTI0NiBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI0NSBUSm0KLShvY2N1cnMuKSAyOC40OTMgVGoKLS02MTcgVEptCi0oQmVjYXVzZSkgMzMuMTk1NCBUagotLTI0NiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0NiBUSm0KLSh0aGlzLCkgMTYuODg2NiBUagotLTI0NyBUSm0KLShpdCkgNS41MzkyMSBUagotNzIgNDI3LjkxOCBUZAotKGlzKSA2LjY0NTA1IFRqCi0tMjMxIFRKbQotKHBvc3NpYmxlKSAzMi42NTc0IFRqCi0tMjMxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMzEgVEptCi0oZGV0ZWN0KSAyMy43OTA3IFRqCi0tMjMxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzMSBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yMzEgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yMzIgVEptCi0oYnkpIDkuOTYyNiBUagotLTIzMSBUSm0KLShvYnNlcnZpbmcpIDM5LjI5MjUgVGoKLS0yMzEgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjMxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzMSBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yMzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMzEgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTIzMSBUSm0KLShyZXR1cm5lZCkgMzMuMTk1NCBUagotLTIzMSBUSm0KLShpcykgNi42NDUwNSBUagotLTIzMSBUSm0KLShsZXNzKSAxNC45NDM5IFRqCi0tMjMxIFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0yMzIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjMxIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTIzMSBUSm0KLShyZXF1ZXN0ZWQuKSA0MC42NjczIFRqCi03MiA0MTUuOTYzIFRkCi0oTmUpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ0aGVsZXNzLCkgMzcuMzQ5OCBUagotLTMwOSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yOTcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTggVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhcmRlZCkgMjIuMTI2OSBUagotLTI5NyBUSm0KLShhcykgOC4yOTg4NSBUagotLTI5NyBUSm0KLShpbmFkdmlzYWJsZTspIDQ4LjE0OTIgVGoKLS0zMjEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjk4IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI5NyBUSm0KLShpbnN0ZWFkKSAyOC4yMjQgVGoKLS0yOTcgVEptCi0oY2hlY2spIDIzLjIzMjggVGoKLVsxIDAgMCAxIDM2MC42MzEgNDE1Ljk2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjAuNjMxIC00MTUuOTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjAuNjMxIDQxNS45NjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgNDAyLjQ3NSA0MTUuOTYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwMi40NzUgLTQxNS45NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNS40MzcgNDE1Ljk2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhZnRlcikgMTguMjUxNSBUagotLTI5NyBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeSkgMTIuNzIyMiBUagotLTI5OCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yOTcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTcgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF0Y2gpIDE2LjU5NzcgVGoKLS0yOTggVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tMjk3IFRKbQotKGZvcikgMTEuNjE2NCBUagotWzEgMCAwIDEgNzIgNDA0LjAwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDA0LjAwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDA0LjAwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxNDkuNzA5IDQwNC4wMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtNDA0LjAwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ5LjcwOSA0MDQuMDA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDQwMi42OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5Mi43MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4Mi4wOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbnRlcm5hbGx5KSAzOC43MzQ2IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMTcuNTQxIDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTcuNTQxIC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNy41NDEgMzgyLjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE3Ny4zMTcgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny4zMTcgLTM4Mi4wOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgxLjc4NiAzODIuMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29waWVzKSAyNS40NTQ0IFRqCi0tNDQ5IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS00NDggVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTQ0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00NDggVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQ0OSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS00NDggVEptCi0oaW4pIDcuNzUwOSBUagotLTQ0OSBUSm0KLShjaHVua3MpIDI4LjIyNCBUagotLTQ0OSBUSm0KLShvZikgOC4yOTg4NSBUagotLTQ0OCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi1bMSAwIDAgMSA0MTkuNjAyIDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTkuNjAyIC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS42MDIgMzgyLjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01BWF9VTlVTRUQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDQ5Ny4zMSAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk3LjMxIC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMS43NzggMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJ5dGVzKSAyMS4wMzEgVGoKLS00NDkgVEptCi0oYmUtKSAxMi43MjIyIFRqCi03MiAzNzAuMTM1IFRkCi0oZm9yZSkgMTYuMDM5OCBUagotLTQxNCBUSm0KLShkZWNvbXByZXNzaW5nKSA1OS43NjU2IFRqCi0tNDE0IFRKbQotKGl0LikgOC4wMjk4NiBUagotLTE2MDUgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS00MTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDE0IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTQxNCBUSm0KLShjb250YWlucykgMzMuMjA1MyBUagotLTQxNCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tNDE0IFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS00MTUgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTQxNCBUSm0KLShzdHJpY3RseSkgMjcuNjc2MSBUagotLTQxNCBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS00MTQgVEptCi0odG8pIDcuNzUwOSBUagotLTQxNCBUSm0KLShyZWFjaCkgMjEuNTY5IFRqCi0tNDE0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQxNSBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tNDE0IFRKbQotKGVuZC1vZi1zdHJlYW0sKSA1OC4zNzA5IFRqCi1bMSAwIDAgMSA3MiAzNTguMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1OC4xOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzU4LjE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDEzMS43NzYgMzU4LjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS43NzYgLTM1OC4xOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM0Ljc0OSAzNTguMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI5OCBUSm0KLShhbG1vc3QpIDI2LjU3MDMgVGoKLS0yOTkgVEptCi0oY2VydGFpbmx5KSAzNC44NTkxIFRqCi0tMjk4IFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yOTkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjk4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjk5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5OCBUSm0KLSh0cmFpbGluZykgMjguNzgyIFRqCi0tMjk4IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yOTkgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjk4IFRKbQotKHNpZ25hbGxpbmcpIDM5LjMwMjUgVGoKLVsxIDAgMCAxIDQxMy4xNjIgMzU4LjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMy4xNjIgLTM1OC4xOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEzLjE2MiAzNTguMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRU5EKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA1MDIuODI2IDM1OC4xOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDIuODI2IC0zNTguMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMi44MjYgMzU4LjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS01OTcgVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tMjk4IFRKbQotKGNvbC0pIDE1LjQ5MTggVGoKLTcyIDM0Ni4yMjQgVGQKLShsZWN0KSAxNC4zODYgVGoKLS0yNDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQyIFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yNDMgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjQyIFRKbQotKHVudXNlZCkgMjguMjI0IFRqCi0tMjQyIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNDIgVEptCi0ob25jZSkgMTguODA5NCBUagotWzEgMCAwIDEgMjA4Ljc1OSAzNDYuMjI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwOC43NTkgLTM0Ni4yMjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwOC43NTkgMzQ2LjIyNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FTkQpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDI5OC40MjMgMzQ2LjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTguNDIzIC0zNDYuMjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDAuODM1IDM0Ni4yMjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaGFzKSAxMy4yODAxIFRqCi0tMjQyIFRKbQotKGFwcGVhcmVkLCkgMzguNDQ1NyBUagotLTI0NCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDM3NC4yMDEgMzQ2LjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzQuMjAxIC0zNDYuMjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzQuMjAxIDM0Ni4yMjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZEdldFVudXNlZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgNDg3Ljc3NSAzNDYuMjI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ny43NzUgLTM0Ni4yMjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5MC4xODggMzQ2LjIyNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbW1lZGlhdGVseSkgNDkuODEzIFRqCi03MiAzMzQuMjY5IFRkCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi1bMSAwIDAgMSA5OS45MzUgMzM0LjI2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05OS45MzUgLTMzNC4yNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk5LjkzNSAzMzQuMjY5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMTg5LjU5OSAzMzQuMjY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OS41OTkgLTMzNC4yNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OS41OTkgMzM0LjI2OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzMzIuOTU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjIuOTk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTIuMzUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgMzEyLjM1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC0zMTIuMzUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDMxMi4zNTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyAzMTIuMzUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTMxMi4zNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgMzEyLjM1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDMxMC4xOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNTkuMzQzXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI0IDI0Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjg0LjU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyNjMuMDE0IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjU5LjQyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShidWYpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShsZW4pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi05MCA2ODcuNzIxIFRkCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLTk4LjQ4NzkgNjc1Ljc2NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG9wZW5lZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotOTAgNjYzLjgxMSBUZAotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi05OC40ODc5IDY1MS44NTYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGVyZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotLTQyNiBUSm0KLShyZWFkaW5nKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZmlsZSkgMjMuOTEwMiBUagotOTAgNjM5LjkgVGQKLShCWl9VTkVYUEVDVEVEX0VPRikgMTAxLjYxOSBUagotOTguNDg3OSA2MjcuOTQ1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZmlsZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShlbmRlZCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShiZWZvcmUpIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNjE1Ljk5IFRkCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxvZ2ljYWwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZW5kLW9mLXN0cmVhbSkgNzcuNzA4MyBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZGV0ZWN0ZWQpIDQ3LjgyMDUgVGoKLTkwIDYwNC4wMzUgVGQKLShCWl9EQVRBX0VSUk9SKSA3Ny43MDgzIFRqCi05OC40ODc5IDU5Mi4wOCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnRlZ3JpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZGV0ZWN0ZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oc3RyZWFtKSAzNS44NjU0IFRqCi05MCA1ODAuMTI1IFRkCi0oQlpfREFUQV9FUlJPUl9NQUdJQykgMTEzLjU3NCBUagotOTguNDg3OSA1NjguMTY5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShkb2VzKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWdpbikgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShyZXF1aXNpdGUpIDUzLjc5OCBUagotLTQyNiBUSm0KLShoZWFkZXIpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYnl0ZXMpIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNTU2LjIxNCBUZAotKFwoaWUsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZmlsZVwpLikgMzUuODY1NCBUagotLTg1MiBUSm0KLShUaGlzKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHJlYWxseSkgMzUuODY1NCBUagotOTguNDg3OSA1NDQuMjU5IFRkCi0oYSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShzcGVjaWFsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGNhc2UpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfREFUQV9FUlJPUi4pIDgzLjY4NTggVGoKLTkwIDUzMi4zMDQgVGQKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLTk4LjQ4NzkgNTIwLjM0OSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGluc3VmZmljaWVudCkgNzEuNzMwNyBUagotLTQyNiBUSm0KLShtZW1vcnkpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA1MDguMzk0IFRkCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotOTguNDg3OSA0OTYuNDM4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxvZ2ljYWwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZGV0ZWN0ZWQuKSA1My43OTggVGoKLTkwIDQ4NC40ODMgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA0NzIuNTI4IFRkCi0ob3RoZXJ3aXNlLikgNTkuNzc1NiBUagotWzEgMCAwIDEgNzIgNDU2Ljk4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDcuMDI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzUuMDY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgNDM0Ljk2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC00MjUuNjA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA0MjUuNjA0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG51bWJlcikgMzUuODY1NCBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShieXRlcykgMjkuODg3OCBUagotLTQyNiBUSm0KLShyZWFkKSAyMy45MTAyIFRqCi05OC40ODc5IDQxMy42NDkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLTkwIDQwMS42OTQgVGQKLSh1bmRlZmluZWQpIDUzLjc5OCBUagotOTguNDg3OSAzODkuNzM5IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDM3NC4xOTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzY0LjIzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzUyLjI3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgMzUyLjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtODQuNjgyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA4My42ODYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgODAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM0Mi44MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDM0Mi44MTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oY29sbGVjdCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYnVmLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0aGVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi05OC40ODc5IDMzMC44NTkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi05MCAzMTguOTA0IFRkCi0oY29sbGVjdCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYnVmLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0aGVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi05OC40ODc5IDMwNi45NDkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX1NFUVVFTkNFX0VORCkgODkuNjYzNCBUagotOTAgMjk0Ljk5NCBUZAotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotOTguNDg3OSAyODMuMDM5IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDI2Ny40OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNTcuNTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzYuODc2IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuMy4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggMjM2Ljg3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC0yMzYuODc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDIzNi44NzYgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDE5Ni4yNTYgVGoKLVsxIDAgMCAxIDMxNi4xMTQgMjM2Ljg3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDQuMTE0IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNi44NjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjI1LjE3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjI1LjE3OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRHZXRVbnVzZWRcKCkgMTE5LjU1MSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI1OS44ODMgMjIzLjQzNSBUZAotKCopIDUuOTc3NTYgVGoKLTI3MC4xMDQgMjI1LjE3OCBUZAotKGJ6ZXJyb3IsKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMzYyLjI3OCAyMjMuNDM1IFRkCi0oKikgNS45Nzc1NiBUagotMzY4LjI1NiAyMjUuMTc4IFRkCi0oYiwpIDExLjk1NTEgVGoKLTIwMC4zNDMgMjEzLjIyMyBUZAotKHZvaWQpIDIzLjkxMDIgVGoKLTIyNC4yNTQgMjExLjQ4IFRkCi0oKiopIDExLjk1NTEgVGoKLTI0MC40NTMgMjEzLjIyMyBUZAotKHVudXNlZCwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0zMDQuNDczIDIxMS40OCBUZAotKCopIDUuOTc3NTYgVGoKLTMxNC42OTQgMjEzLjIyMyBUZAotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAxOTcuNjgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4Ny43MTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE3NS43NjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJucykgMzAuOTkzNiBUagotLTQzNSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tNDM1IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tNDM1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTQzNSBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tNDM1IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS00MzUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDM1IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MzUgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tNDM1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTQzNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS00MzUgVEptCi0obm90KSAxMi43MzIyIFRqCi0tNDM1IFRKbQotKG5lZWRlZCkgMjguMjE0MSBUagotLTQzNSBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDM1IFRKbQotKGdldCkgMTIuMTc0MyBUagotLTQzNSBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDM1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQzNSBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tNDM1IFRKbQotKGVuZC1vZi1zdHJlYW0uKSA1OC4zNzA5IFRqCi1bMSAwIDAgMSA3MiAxNjMuODA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjMuODA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNjIuMDY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTc3Ljk3NzYgMTYzLjgwOSBUZAotKHVudXNlZCkgMzUuODY1NCBUagotWzEgMCAwIDEgMTEzLjg0MyAxNjMuODA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTE2My44MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNy4yIDE2My44MDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMzcgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzM3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMzcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM3IFRKbQotKGFkZHJlc3MpIDI5Ljg3NzggVGoKLS0zMzcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMzYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM3IFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tMzU5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNjkuMDg5IDE2My44MDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY5LjA4OSAtMTYzLjgwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY5LjA4OSAxNjIuMDY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTI3NS4wNjcgMTYzLjgwOSBUZAotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMxNi45MSAxNjMuODA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNi45MSAtMTYzLjgwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIwLjI2NyAxNjMuODA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0zMzcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM3IFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTMzNyBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzNyBUSm0KLShieXRlcy4pIDIzLjUyMTcgVGoKLVsxIDAgMCAxIDQyNy4yNDcgMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjcuMjQ3IC0xNjMuODA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjcuMjQ3IDE2Mi4wNjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotNDMzLjIyNSAxNjMuODA5IFRkCi0oblVudXNlZCkgNDEuODQyOSBUagotWzEgMCAwIDEgNDc1LjA2OCAxNjMuODA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3NS4wNjggLTE2My44MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3OC40MjUgMTYzLjgwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMzM3IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzM3IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTMzNyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzM3IFRKbQotKGEpIDQuNDIzMzkgVGoKLTcyIDE1MS44NTMgVGQKLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotWzEgMCAwIDEgMTMxLjUwNiAxNTEuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS41MDYgLTE1MS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMS41MDYgMTUxLjg1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgwKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxMzcuNDg0IDE1MS44NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3LjQ4NCAtMTUxLjg1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM5Ljk3NSAxNTEuODUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxNTYuODUxIDE1MS44NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU2Ljg1MSAtMTUxLjg1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU2Ljg1MSAxNTEuODUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01BWF9VTlVTRUQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDIzNC41NiAxNTEuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNC41NiAtMTUxLjg1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM3LjA1IDE1MS44NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW5jbHVzaSkgMjYuNTcwMyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLikgNi45MTQwNCBUagotWzEgMCAwIDEgNzIgMTUwLjU0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQwLjU4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTI5LjkzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tODgyIFRKbQotKGZ1bmN0aW9uKSAzMy4yMDUzIFRqCi0tODgzIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTg4MiBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tODgzIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tODgyIFRKbQotKGNhbGxlZCkgMjMuNzkwNyBUagotLTg4MyBUSm0KLShvbmNlKSAxOC44MDk0IFRqCi1bMSAwIDAgMSAyNzEuMzMyIDEyOS45MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcxLjMzMiAtMTI5LjkzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjcxLjMzMiAxMjkuOTM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDMzMS4xMDggMTI5LjkzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzEuMTA4IC0xMjkuOTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzkuOSAxMjkuOTM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhcykgMTMuMjgwMSBUagotLTg4MiBUSm0KLShzaWduYWxsZWQpIDM1Ljk3NDkgVGoKLVsxIDAgMCAxIDQwNi43MzcgMTI5LjkzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDYuNzM3IC0xMjkuOTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDYuNzM3IDEyOS45MzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgNDg0LjQ0NiAxMjkuOTM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4NC40NDYgLTEyOS45MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5My4yMzEgMTI5LjkzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS04ODIgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi1bMSAwIDAgMSA3MiAxMTcuOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTExNy45OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTE3Ljk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMTYxLjY2NCAxMTcuOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjY2NCAtMTE3Ljk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuNjY0IDExNy45OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMTYuNjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEwNi43MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDk2LjA2MjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0oYXNzaWdubWVudHMpIDQ4LjcwNzIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTY5LjE0NCA5Ni4wNjI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS4xNDQgLTk2LjA2MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OS4xNDQgOTYuMDYyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyMTAuOTg3IDk2LjA2MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjk4NyAtOTYuMDYyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjk4NyA5Ni4wNjI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNzIgOTMuOTA1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTQzLjA1MzldIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC44NTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjEpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMjUgMjUKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMjkuMTUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDEwNy41OTcgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxMDQuMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLTk4LjQ4NzkgNjg3LjcyMSBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHVudXNlZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTAgNjc1Ljc2NiBUZAotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05OC40ODc5IDY2My44MTEgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShzaWduYWxsZWQpIDUzLjc5OCBUagotOTguNDg3OSA2NTEuODU2IFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ob3BlbmVkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi05MCA2MzkuOSBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDYyNy45NDUgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNjEyLjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDIuNDQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTAuNDg2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiA1OTAuMzg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTU4MS4wMjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDU4MS4wMjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA3MiA1NjUuNDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NTUuNTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MzQuODU4IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuNC4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggNTM0Ljg1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC01MzQuODU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDUzNC44NTggVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9ielJlYWRDbG9zZSkgMTU0LjkzOSBUagotWzEgMCAwIDEgMjc0Ljc5NyA1MzQuODU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi43OTcgLTIuMzMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01MjMuMTYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1MjMuMTYxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjQ0LjQ2IDUyMS40MTcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNTAuNDM4IDUyMy4xNjEgVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTM0Mi42MTIgNTIxLjQxNyBUZAotKCopIDUuOTc3NTYgVGoKLTM0OC41OSA1MjMuMTYxIFRkCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDUwNy42MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDk3LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDg1LjcwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWxlYXNlcykgMzQuODU5MSBUagotLTQzMCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTQyOSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS00MzAgVEptCi0ocGVydGFpbmluZykgNDAuMzk4MyBUagotLTQyOSBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDMwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQyOSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDMwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMzA0LjM1MiA0ODUuNzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNC4zNTIgLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwNC4zNTIgNDg1LjcwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAzMTAuMzMgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTAuMzMgLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMC4zMyA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMyMS4yNzYgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjEuMjc2IC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjEuMjc2IDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA0MTAuOTQgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTAuOTQgLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNS4yMiA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRvZXMpIDE4LjI2MTQgVGoKLS00MzAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tNDI5IFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgNDczLjQzOCA0ODUuNzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3My40MzggLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3My40MzggNDg1LjcwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmY2xvc2UpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDUwOS4zMDQgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDkuMzA0IC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTMuNTg0IDQ4NS43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob24pIDkuOTYyNiBUagotLTQzMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDQ3My43NDYgVGQKLSh1bmRlcmx5aW5nKSA0My4xNjc5IFRqCi0tMjY0IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI2NCBUSm0KLShoYW5kbGUsKSAyOS4wNTA5IFRqCi0tMjY3IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjY0IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2NCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNjQgVEptCi0oZG8pIDkuOTYyNiBUagotLTI2NCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjY0IFRKbQotKHlvdXJzZWxmKSAzMi42NDc0IFRqCi0tMjY0IFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjYzIFRKbQotKGFwcHJvcHJpYXRlLikgNDcuODYwMyBUagotWzEgMCAwIDEgMzQ4LjY1MyA0NzMuNzQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0OC42NTMgLTQ3My43NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0OC42NTMgNDczLjc0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDQzOC4zMTcgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguMzE3IC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDAuOTQ2IDQ3My43NDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjY0IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjY0IFRKbQotKGNhbGxlZCkgMjMuNzkwNyBUagotLTI2NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY0IFRKbQotKGNsZWFuKSAyMS4wMjExIFRqCi03MiA0NjEuNzkxIFRkCi0odXApIDkuOTYyNiBUagotLTI1MCBUSm0KLShhZnRlcikgMTguMjUxNSBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShzaXR1YXRpb25zLikgNDAuNjg3MyBUagotWzEgMCAwIDEgNzIgNDU5LjYzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ5LjY3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDM5Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCA0MzkuODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiA0MzcuNzE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNjAuNzcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTQyOC4zNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDQyOC4zNTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLTk4LjQ4NzkgNDE2LjM5NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG9wZW5lZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9iek9wZW5Xcml0ZSkgODkuNjYzNCBUagotOTAgNDA0LjQ0MSBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDM5Mi40ODYgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMzc2Ljk0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjYuOTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTUuMDI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiAzNTQuOTI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM0NS41NjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDM0NS41NjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obm9uZSkgMjMuOTEwMiBUagotWzEgMCAwIDEgNzIgMzMwLjAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzIwLjA1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjk5LjM5OSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjUuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDI5OS4zOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMjk5LjM5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAyOTkuMzk5IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpXcml0ZU9wZW4pIDE1NC45MzkgVGoKLVsxIDAgMCAxIDI3NC43OTcgMjk5LjM5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDIuNzk3IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC00OC44MTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDQ3LjgyMDcgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA0NC4yMzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjg3LjcwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjg3LjcwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEzMC4xMDkgMjg1Ljk1OCBUZAotKCopIDUuOTc3NTYgVGoKLTEzNi4wODcgMjg3LjcwMiBUZAotKEJaMl9ieldyaXRlT3BlblwoKSA5NS42NDEgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNTguMTQ5IDI4NS45NTggVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNjQuMTI3IDI4Ny43MDIgVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShGSUxFKSAyMy45MTAyIFRqCi0zNDQuMzQ2IDI4NS45NTggVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNTAuMzIzIDI4Ny43MDIgVGQKLShmLCkgMTEuOTU1MSBUagotMTk2LjA5OSAyNzUuNzQ2IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJsb2NrU2l6ZTEwMGssKSA4My42ODU4IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHksKSA1OS43NzU2IFRqCi0xOTYuMDk5IDI2My43OTEgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDI0OC4yNDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM4LjI4N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjI2LjMzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcmVwYXJlKSAzMC40MjU4IFRqCi0tMjY4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjkgVEptCi0od3JpdGUpIDIwLjQ3MzEgVGoKLS0yNjggVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI2OSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjY4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjY4IFRKbQotKGhhbmRsZSkgMjYuNTYwMyBUagotWzEgMCAwIDEgMjYyLjcyIDIyNi4zMzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYyLjcyIC0yMjYuMzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjIuNzIgMjI2LjMzMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAyNjguNjk4IDIyNi4zMzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY4LjY5OCAtMjI2LjMzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY4LjY5OCAyMjYuMzMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI3NC44MjkgMjI2LjMzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzQuODI5IC0yMjYuMzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzQuODI5IDIyNi4zMzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZikgNS45Nzc1NiBUagotWzEgMCAwIDEgMjgwLjgwNyAyMjYuMzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4MC44MDcgLTIyNi4zMzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4My40ODEgMjI2LjMzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNjggVEptCi0ocmVmZXIpIDE4Ljc5OTQgVGoKLS0yNjkgVEptCi0odG8pIDcuNzUwOSBUagotLTI2OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI2OCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI2OSBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNjggVEptCi0oYmVlbikgMTguODA5NCBUagotLTI2OSBUSm0KLShvcGVuZWQpIDI4Ljc3MiBUagotLTI2OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNjkgVEptCi0od3JpdGluZywpIDMxLjI3MjYgVGoKLS0yNzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjggVEptCi0oZm9yKSAxMS42MTY0IFRqCi03MiAyMTQuMzc3IFRkCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKGluZGljYXRvcikgMzUuNDE3IFRqCi0tMjUwIFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxNzYuNTc3IDIxNC4zNzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjU3NyAtMjE0LjM3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc2LjU3NyAyMTQuMzc2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZlcnJvclwoZlwpKSA1My43OTggVGoKLVsxIDAgMCAxIDIzMC4zNzUgMjE0LjM3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzAuMzc1IC0yMTQuMzc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuMzc1IDIxNC4zNzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXClpcykgOS45NjI2IFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShzZXQuKSAxMy41NTkxIFRqCi1bMSAwIDAgMSA3MiAyMTIuNTkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMDIuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxOTIuNDU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjIzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyNCBUSm0KLShtZWFuaW5nKSAzNC4zMTEyIFRqCi0tMjIzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjI0IFRKbQotKHBhcmFtZXRlcnMpIDQzLjcwNTkgVGoKLVsxIDAgMCAxIDE5NS4zMDYgMTkyLjQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTUuMzA2IC0xOTIuNDU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTUuMzA2IDE5Mi40NTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYmxvY2tTaXplMTAwaykgNzcuNzA4MyBUagotWzEgMCAwIDEgMjczLjAxNSAxOTIuNDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3My4wMTUgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3My4wMTUgMTkyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNzcuNzg0IDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3Ljc4NCAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc3Ljc4NCAxOTIuNDU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAzMzEuNTgzIDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMxLjU4MyAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMzLjgwOCAxOTIuNDU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNTAuNDIgMTkyLjQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTAuNDIgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1MC40MiAxOTIuNDU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQxMC4xOTYgMTkyLjQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTAuMTk2IC0xOTIuNDU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTAuMTk2IDE5Mi40NTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTIyOSBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLVsxIDAgMCAxIDQyOS45MTMgMTkyLjQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjkuOTEzIC0xOTIuNDU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjkuOTEzIDE5Mi40NTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSA1MzcuNTA5IDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSAxOTIuNDU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDE5MC4zMDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4MC4zMzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE3MC41NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsKSAxMi43MzIyIFRqCi0tMzgyIFRKbQotKHJlcXVpcmVkKSAzMy4xOTU0IFRqCi0tMzgyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTM4MiBUSm0KLShpcykgNi42NDUwNSBUagotLTM4MiBUSm0KLShhbGxvY2F0ZWQpIDM1Ljk2NSBUagotLTM4MyBUSm0KLShhdCkgNy4xOTMgVGoKLS0zODIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMzgyIFRKbQotKHN0YWdlLCkgMjIuOTYzOCBUagotLTQxNSBUSm0KLShzbykgOC44NTY3NSBUagotLTM4MiBUSm0KLShpZikgNi4wODcxNSBUagotLTM4MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODIgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMzgyIFRKbQotKGNvbXBsZXRlcykgNDAuMzk4MyBUagotLTM4MiBUSm0KLShzdWNjZXNzZnVsbHkpIDQ4LjY5NzIgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQyNC42OTEgMTcwLjU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjQuNjkxIC0xNzAuNTQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjQuNjkxIDE3MC41NDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi1bMSAwIDAgMSA0OTYuNDIyIDE3MC41NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjQyMiAtMTcwLjU0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTAwLjIyOCAxNzAuNTQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNhbm5vdCkgMjYuNTYwMyBUagotLTM4MiBUSm0KLShiZSkgOS40MDQ2OSBUagotNzIgMTU4LjU4NiBUZAotKHNpZ25hbGxlZCkgMzUuOTc0OSBUagotLTI1MCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oc3Vic2VxdWVudCkgNDQuMjczOCBUagotLTI1MCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMjAzLjcxNSAxNTguNTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMy43MTUgLTE1OC41ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMy43MTUgMTU4LjU4NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjY5LjQ2OCAxNTguNTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OS40NjggLTE1OC41ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OS40NjggMTU4LjU4NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxNTYuNDI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNDYuNDY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMzYuNjY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgMTM2LjY2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC0xMzYuNjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDEzNi42NjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyAxMzYuNjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTEzNi42NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgMTM2LjY2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDEzNC41MTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC04My42NTkzXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI2IDI2Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTY1LjAxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxNDMuNDYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTM5Ljg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfQ09ORklHX0VSUk9SKSA4OS42NjM0IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGlicmFyeSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShtaXMtY29tcGlsZWQpIDcxLjczMDcgVGoKLTkwIDY4Ny43MjEgVGQKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY2My44MTEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oOSkgNS45Nzc1NiBUagotOTAgNjUxLjg1NiBUZAotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi05OC40ODc5IDYzOS45IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZmVycm9yXChmXCkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub256ZXJvKSA0MS44NDI5IFRqCi05MCA2MjcuOTQ1IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDYxNS45OSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGluc3VmZmljaWVudCkgNzEuNzMwNyBUagotLTQyNiBUSm0KLShtZW1vcnkpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYXZhaWxhYmxlKSA1My43OTggVGoKLTkwIDYwNC4wMzUgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA1OTIuMDggVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNTc2LjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjYuNTc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NTQuNjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiA1NTQuNTIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNjAuNzcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTU0NS4xNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDU0NS4xNTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oUG9pbnRlcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhYnN0cmFjdCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNTMzLjIwMSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLTkwIDUyMS4yNDUgVGQKLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDUwOS4yOSBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiA0OTMuNzQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4My43ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ3MS44MzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsbykgMTcuNzEzNSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWN0aW9uczopIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDcyIDQ3MS43MzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC04NC42ODI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDgzLjY4NjIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4MC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDYyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDYyLjM2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotOTguNDg3OSA0NTAuNDExIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA0MzguNDU2IFRkCi0oXCh5b3UpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oY291bGQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oZ28pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZGlyZWN0bHkpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGVDbG9zZSwpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oYnV0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRoaXMpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0od291bGQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oYmUpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocHJldHR5KSAzNS44NjU0IFRqCi00ODUuNTA1IDQzNC4yMTIgVGQKLS9GNTY0XzAgOS45NjI2IFRmCi0oICkgOS45NjI2IFRqCi00OTMuODA4IDQzNC4yMTIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oLSkgMi43Njk2IFRqCi05MCA0MjYuNTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHBvaW50bGVzc1wpKSA1OS43NzU2IFRqCi05MCA0MTQuNTQ2IFRkCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi05OC40ODc5IDQwMi41OSBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAzODcuMDQ5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzc3LjA4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzU2LjQyOCBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjYuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDM1Ni40MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMzU2LjQyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAzNTYuNDI4IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpXcml0ZSkgMTEzLjYyMiBUagotWzEgMCAwIDEgMjMzLjQ4IDM1Ni40MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjQ4IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzQ0LjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzNDQuNzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTIyMC41NSAzNDIuOTg3IFRkCi0oKikgNS45Nzc1NiBUagotMjI2LjUyOCAzNDQuNzMgVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTMxOC43MDIgMzQyLjk4NyBUZAotKCopIDUuOTc3NTYgVGoKLTMyNC42NzkgMzQ0LjczIFRkCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotMzY5LjAzMyAzNDIuOTg3IFRkCi0oKikgNS45Nzc1NiBUagotMzc1LjAxIDM0NC43MyBUZAotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDMyOS4xODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzE5LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzA3LjI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFic29yYnMpIDMzLjIwNTMgVGoKLVsxIDAgMCAxIDEwNy42OTYgMzA3LjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNy42OTYgLTMwNy4yN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA3LjY5NiAzMDcuMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGVuKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAxMjUuNjI5IDMwNy4yN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjUuNjI5IC0zMDcuMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyOC4xMTkgMzA3LjI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi1bMSAwIDAgMSAyMTQuNTQ0IDMwNy4yN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTQuNTQ0IC0zMDcuMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNC41NDQgMzA3LjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1ZikgMTcuOTMyNyBUagotWzEgMCAwIDEgMjMyLjQ3NyAzMDcuMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMyLjQ3NyAtMzA3LjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzIuNDc3IDMwNy4yNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50dWFsbHkpIDMyLjA5OTUgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHdyaXR0ZW4pIDI4LjIyNCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAybGUuKSAxNS4yMjI5IFRqCi1bMSAwIDAgMSA3MiAzMDUuMTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTUuMTUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODUuMzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgMjg1LjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC0yODUuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDI4NS4zNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyAyODUuMzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTI4NS4zNTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgMjg1LjM1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDI4My4xOTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMDguNTkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDEwNy41OTcgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxMDQuMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0yNzMuODMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAyNzMuODMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDI2MS44NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnVmKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obGVuKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotOTAgMjQ5LjkyMSBUZAotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05OC40ODc5IDIzNy45NjUgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvcGVuZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkT3BlbikgODMuNjg1OCBUagotOTAgMjI2LjAxIFRkCi0oQlpfSU9fRVJST1IpIDY1Ljc1MzIgVGoKLTk4LjQ4NzkgMjE0LjA1NSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZXJlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGFuKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdyaXRpbmcpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZmlsZS4pIDI5Ljg4NzggVGoKLTkwIDIwMi4xIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgMTkwLjE0NSBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAxNzQuNjAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTY0LjY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNDMuOTgyIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuNy4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggMTQzLjk4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC0xNDMuOTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDE0My45ODIgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDE2NS4yNjggVGoKLVsxIDAgMCAxIDI4NS4xMjYgMTQzLjk4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTMuMTI2IC0yLjMzMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05MC43OTc1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI3IDI3Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTY1LjAxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxNDMuNDYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTM5Ljg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZUNsb3NlXCgpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNDYuMTk0IDcwOS44ODggVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNTIuMTcxIDcxMS42MzEgVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTM0MC4xMDIgNzA5Ljg4OCBUZAotKCopIDUuOTc3NTYgVGoKLTM1MC4zMjMgNzExLjYzMSBUZAotKGYsKSAxMS45NTUxIFRqCi0xODcuNjExIDY5OS42NzYgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWJhbmRvbiwpIDQ3LjgyMDUgVGoKLTE4Ny42MTEgNjg3LjcyMSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjU3LjYwOSA2ODUuOTc4IFRkCi0oKikgNS45Nzc1NiBUagotMjY3LjgzIDY4Ny43MjEgVGQKLShuYnl0ZXNfaW4sKSA1OS43NzU2IFRqCi0xODcuNjExIDY3NS43NjYgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI1Ny42MDkgNjc0LjAyMyBUZAotKCopIDUuOTc3NTYgVGoKLTI2Ny44MyA2NzUuNzY2IFRkCi0obmJ5dGVzX291dCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDY1MS44NTYgVGQKLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ieldyaXRlQ2xvc2U2NFwoKSAxMTMuNTc0IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjU4LjE0OSA2NTAuMTEyIFRkCi0oKikgNS45Nzc1NiBUagotMjY0LjEyNyA2NTEuODU2IFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0zNTIuMDU3IDY1MC4xMTIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNjIuMjc4IDY1MS44NTYgVGQKLShmLCkgMTEuOTU1MSBUagotMTk2LjA5OSA2MzkuOSBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhYmFuZG9uLCkgNDcuODIwNSBUagotMTk2LjA5OSA2MjcuOTQ1IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNjYuMDk3IDYyNi4yMDIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNzYuMzE4IDYyNy45NDUgVGQKLShuYnl0ZXNfaW5fbG8zMiwpIDg5LjY2MzQgVGoKLTE5Ni4wOTkgNjE1Ljk5IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNjYuMDk3IDYxNC4yNDcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNzYuMzE4IDYxNS45OSBUZAotKG5ieXRlc19pbl9oaTMyLCkgODkuNjYzNCBUagotMTk2LjA5OSA2MDQuMDM1IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNjYuMDk3IDYwMi4yOTIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNzYuMzE4IDYwNC4wMzUgVGQKLShuYnl0ZXNfb3V0X2xvMzIsKSA5NS42NDEgVGoKLTE5Ni4wOTkgNTkyLjA4IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNjYuMDk3IDU5MC4zMzYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNzYuMzE4IDU5Mi4wOCBUZAotKG5ieXRlc19vdXRfaGkzMikgODkuNjYzNCBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDU3Ni41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTY2LjU3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTU0LjYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzZXMpIDQ4LjE0OTIgVGoKLS00MDMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS00MDIgVEptCi0oXDAwM3VzaGVzKSAyNy42NzYxIFRqCi0tNDAzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDAyIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MDMgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tNDAzIFRKbQotKGEpIDQuNDIzMzkgVGoKLTEgVEptCi0obGwpIDUuNTM5MjEgVGoKLS00MDMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQwMyBUSm0KLShzbykgOC44NTY3NSBUagotLTQwMiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhcikgNy43NDA5NCBUagotLTQwMyBUSm0KLShzdXBwbGllZCkgMzMuNzYzMyBUagotLTQwMyBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSAzODQuMTUyIDU1NC42Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODQuMTUyIC01NTQuNjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4NC4xNTIgNTU0LjYyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA0NDkuOTA2IDU1NC42Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDkuOTA2IC01NTQuNjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0OS45MDYgNTU0LjYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS03NjggVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tNDAzIFRKbQotKGxvZ2ljYWwpIDI3LjExODIgVGoKLS00MDIgVEptCi0oZW5kLW9mLSkgMjkuMzE5OSBUagotNzIgNTQyLjY2NSBUZAotKHN0cmVhbSkgMjYuNTYwMyBUagotLTM1MiBUSm0KLShtYXJrKSAyMC40NzMxIFRqCi0xMCBUSm0KLShlcnMpIDExLjYxNjQgVGoKLS0zNTIgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzUzIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0zNTIgVEptCi0od3JpdHRlbiwpIDMwLjcxNDcgVGoKLS0zNzggVEptCi0oc28pIDguODU2NzUgVGoKLS0zNTIgVEptCi0oc3Vic2VxdWVudCkgNDQuMjczOCBUagotLTM1MiBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTM1MiBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAzMDAuNDU2IDU0Mi42NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAwLjQ1NiAtNTQyLjY2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAwLjQ1NiA1NDIuNjY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAzNjYuMjA5IDU0Mi42NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY2LjIwOSAtNTQyLjY2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY5LjcxOCA1NDIuNjY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotLTM1MiBUSm0KLShpbGxlKSAxMi43MzIyIFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYWwuKSA5LjY4MzY1IFRqCi0tMTIzNCBUSm0KLShBbGwpIDEyLjczMjIgVGoKLS0zNTIgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMzUyIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0zNTIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotNzIgNTMwLjcxIFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi1bMSAwIDAgMSAxNTEuNDExIDUzMC43MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTEuNDExIC01MzAuNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MS40MTEgNTMwLjcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGIpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDE1Ny4zODkgNTMwLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ny4zODkgLTUzMC43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU5Ljg3OSA1MzAuNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0ocmVsZWFzZWQuKSAzNS4xMjgxIFRqCi1bMSAwIDAgMSAyMDcuMjMxIDUzMC43MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDcuMjMxIC01MzAuNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4yMzEgNTMwLjcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZmbHVzaCkgMzUuODY1NCBUagotWzEgMCAwIDEgMjQzLjA5NyA1MzAuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQzLjA5NyAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDUuNTg3IDUzMC43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShjYWxsZWQpIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0ob24pIDkuOTYyNiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDQyMi43NzEgNTMwLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMi43NzEgLTUzMC43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIyLjc3MSA1MzAuNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmNsb3NlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0NTguNjM2IDUzMC43MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTguNjM2IC01MzAuNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OC42MzYgNTMwLjcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCcpIDMuMzE3NTUgVGoKLTUwIFRKbQotKGQuKSA3LjQ3MTk1IFRqCi1bMSAwIDAgMSA3MiA1MjguNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTguNTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUwOC43OTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDgxLjU3NDMgNTA4Ljc5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MS41NzQzIC01MDguNzkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04MS41NzQzIDUwOC43OTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSAxNzcuMjE2IDUwOC43OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc3LjIxNiAtNTA4Ljc5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgwLjE1NSA1MDguNzkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjk1IFRKbQotKGNhbGxlZCkgMjMuNzkwNyBUagotLTI5NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk1IFRKbQotKGNsZWFuKSAyMS4wMjExIFRqCi0tMjk1IFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yOTUgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yOTUgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yOTUgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk1IFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLS0yOTUgVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMjk1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTUgVEptCi0ocmVsZWFzZSkgMjcuNjU2MiBUagotLTI5NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTUgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tODkxIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI5NSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi03MiA0OTYuODM3IFRkCi0ocmVjb3JkcykgMjkuMzE5OSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yODkgVEptCi0oY29kZXMpIDIyLjY4NDggVGoKLS0yODkgVEptCi0oaXNzdWVkKSAyNC45MDY1IFRqCi0tMjg5IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yODkgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91cykgMjEuNTg5IFRqCi0tMjg5IFRKbQotKGNhbGxzLCkgMjAuNzUyMSBUagotLTI5OSBUSm0KLShzbykgOC44NTY3NSBUagotLTI4OSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODkgVEptCi0oc2l0dWF0aW9uKSAzNC4zMjEyIFRqCi0tMjg5IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yODkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODkgVEptCi0oZGV0ZWN0ZWQpIDMzLjE5NTQgVGoKLS0yODkgVEptCi0oYXV0b21hdGljYWxseSkgNTQuMjM2NCBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTQyNyBUSm0KLShUaGVyZSkgMjMuMjMyOCBUagotLTI4OSBUSm0KLShpcykgNi42NDUwNSBUagotLTI4OSBUSm0KLShubykgOS45NjI2IFRqCi0tMjg5IFRKbQotKGF0dGVtcHQpIDI5Ljg4NzggVGoKLTcyIDQ4NC44ODIgVGQKLSh0bykgNy43NTA5IFRqCi0tMjYzIFRKbQotKGNvbXBsZXRlKSAzNi41MjI5IFRqCi0tMjYyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MyBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI2MyBUSm0KLShvcGVyYXRpb24sKSA0MC4xMTk0IFRqCi0tMjY1IFRKbQotKG5vcikgMTMuMjgwMSBUagotLTI2MyBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAyNTguMzA4IDQ4NC44ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU4LjMwOCAtNDg0Ljg4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU4LjMwOCA0ODQuODgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZmbHVzaCkgMzUuODY1NCBUagotWzEgMCAwIDEgMjk0LjE3MyA0ODQuODgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NC4xNzMgLTQ4NC44ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Ni43OSA0ODQuODgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRoZSkgMTIuMTc0MyBUagotLTI2MyBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjYyIFRKbQotKFwwMDJsZS4pIDE1LjIyMjkgVGoKLS02OTYgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjYzIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI2MyBUSm0KLShmb3JjZSkgMjAuNDYzMiBUagotLTI2MiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjMgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odmlvdXIpIDIxLjAzMSBUagotLTI2MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjYyIFRKbQotKGhhcHBlbikgMjguNzcyIFRqCi03MiA0NzIuOTI2IFRkCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjYXNlKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShwYXNzaW5nKSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obm9uemVybykgMzIuMDg5NSBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzA1LjAxNCA0NzIuOTI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNS4wMTQgLTQ3Mi45MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwNS4wMTQgNDcyLjkyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhYmFuZG9uKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNDYuODU4IDQ3Mi45MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ2Ljg1OCAtNDcyLjkyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ2Ljg1OCA0NzIuOTI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDQ3MC43N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDYwLjgwN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDUxLjAwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgODAuNTk3NCA0NTEuMDA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgwLjU5NzQgLTQ1MS4wMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTgwLjU5NzQgNDUxLjAwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuYnl0ZXNfaW4pIDUzLjc5OCBUagotWzEgMCAwIDEgMTM0LjM5NiA0NTEuMDA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNC4zOTYgLTQ1MS4wMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNi4zNTggNDUxLjAwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTE5NyBUSm0KLShub24tbnVsbCwpIDM2LjI1MzkgVGoKLVsxIDAgMCAxIDE4My4yODcgNDUxLjAwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuMjg3IC00NTEuMDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODMuMjg3IDQ0OS4yNjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMTg5LjI2NSA0NTEuMDA5IFRkCi0obmJ5dGVzX2luKSA1My43OTggVGoKLVsxIDAgMCAxIDI0My4wNjMgNDUxLjAwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDMuMDYzIC00NTEuMDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDUuMDI1IDQ1MS4wMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTE5NyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTE5NyBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0xOTcgVEptCi0odG8pIDcuNzUwOSBUagotLTE5NyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTE5NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0xOTcgVEptCi0odG90YWwpIDE3LjcxMzUgVGoKLS0xOTcgVEptCi0odikgNC45ODEzIFRqCi0yMCBUSm0KLShvbHVtZSkgMjQuOTA2NSBUagotLTE5NyBUSm0KLShvZikgOC4yOTg4NSBUagotLTE5NyBUSm0KLSh1bmNvbXByZXNzZWQpIDU2Ljk5NiBUagotLTE5NyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMTk3IFRKbQotKGhhbmRsZWQuKSAzNC4wMzIyIFRqCi0tNTg0IFRKbQotKFNpbWlsYXJseSkgMzcuMDkwOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNDM5LjA1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM5LjA1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDM5LjA1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuYnl0ZXNfb3V0KSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDQzOS4wNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMxLjc3NiAtNDM5LjA1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM0LjcxNiA0MzkuMDUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yOTUgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yOTUgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjk1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk1IFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi0tMjk1IFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2x1bWUpIDI0LjkwNjUgVGoKLS0yOTYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTUgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI5NSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjk1IFRKbQotKHdyaXR0ZW4uKSAzMC43MTQ3IFRqCi0tODkwIFRKbQotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjk1IFRKbQotKGNvbXBhdGliaWxpdHkpIDUzLjE0MDUgVGoKLS0yOTUgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI5NSBUSm0KLShvbGRlcikgMjAuNDczMSBUagotLTI5NiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMpIDI4LjIyNCBUagotLTI5NSBUSm0KLShvZikgOC4yOTg4NSBUagotNzIgNDI3LjA5OCBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI4MyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMTguMjk0IDQyNy4wOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE4LjI5NCAtNDI3LjA5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE4LjI5NCA0MjcuMDk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotWzEgMCAwIDEgMjEzLjkzNiA0MjcuMDk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMy45MzYgLTQyNy4wOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi43NTMgNDI3LjA5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShvbmx5KSAxNy43MTM1IFRqCi0tMjgzIFRKbQotKHlpZWxkcykgMjMuODAwNyBUagotLTI4MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODIgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0od2VyKSAxNC45MzM5IFRqCi0tMjgzIFRKbQotKDMyKSA5Ljk2MjYgVGoKLS0yODMgVEptCi0oYml0cykgMTQuMzk2IFRqCi0tMjgzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjgzIFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjgyIFRKbQotKGNvdW50cy4pIDI4LjUwMyBUagotLTgxNyBUSm0KLShVc2UpIDE1LjQ5MTggVGoKLVsxIDAgMCAxIDQyMy40OTkgNDI3LjA5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjMuNDk5IC00MjcuMDk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjMuNDk5IDQyNy4wOTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZTY0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSA1MzEuMDk1IDQyNy4wOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTMxLjA5NSAtNDI3LjA5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTMzLjkxMyA0MjcuMDk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlmKSA2LjA4NzE1IFRqCi03MiA0MTUuMTQzIFRkCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGZ1bGwpIDEzLjgzODEgVGoKLS0yNTAgVEptCi0oNjQpIDkuOTYyNiBUagotLTI1MCBUSm0KLShiaXQpIDEwLjUyMDUgVGoKLS0yNTAgVEptCi0oY291bnRzLikgMjguNTAzIFRqCi0tNjIwIFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHR3KSA5Ljk2MjYgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjUwIFRKbQotKG90aGVyd2lzZSkgMzguNzM0NiBUagotLTI1MCBUSm0KLShhYnNvbHV0ZWx5KSA0MC45NTYyIFRqCi0tMjUwIFRKbQotKGlkZW50aWNhbC4pIDM2LjgwMTggVGoKLVsxIDAgMCAxIDcyIDQxMi45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQwMy4wMjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM5My4yMjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0oYXNzaWdubWVudHMpIDQ4LjcwNzIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTY5LjE0NCAzOTMuMjI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS4xNDQgLTM5My4yMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OS4xNDQgMzkzLjIyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyMTAuOTg3IDM5My4yMjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjk4NyAtMzkzLjIyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjk4NyAzOTMuMjI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNzIgMzkxLjA2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTg0LjY4MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggODMuNjg2MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDgwLjA5OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zODEuNzA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzODEuNzA0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05OC40ODc5IDM2OS43NDggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvcGVuZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkT3BlbikgODMuNjg1OCBUagotOTAgMzU3Ljc5MyBUZAotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi05OC40ODc5IDM0NS44MzggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGVyZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3cml0aW5nKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZpbGUpIDIzLjkxMDIgVGoKLTkwIDMzMy44ODMgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSAzMjEuOTI4IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDMwNi4zODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTYuNDIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzUuNzY1IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuOC4pIDQzLjA3MjkgVGoKLS0yNzggVEptCi0oSGFuZGxpbmcpIDczLjY0NzUgVGoKLS0yNzggVEptCi0oZW1iZWQpIDU1LjQ4NTIgVGoKLTEwIFRKbQotKGRlZCkgMzAuNjA5IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzZWQpIDEwMS40MTYgVGoKLS0yNzggVEptCi0oZGF0YSkgMzUuMzk0OSBUagotLTI3OCBUSm0KLShzdHJlYW1zKSA2Ni4wMjExIFRqCi1bMSAwIDAgMSA3MiAyNzEuOTM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNjEuOTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNTMuODQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTIwMyBUSm0KLShoaWdoLWxlKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjAzIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yMDMgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWNpbGl0YXRlcykgMzUuNDE3IFRqCi0tMjAzIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTIwMyBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMjI2LjQwNCAyNTMuODQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNi40MDQgLTI1My44NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNi40MDQgMjUzLjg0NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjU2LjI5MiAyNTMuODQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1Ni4yOTIgLTI1My44NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OC4zMTYgMjUzLjg0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkYXRhKSAxNi41OTc3IFRqCi0tMjAzIFRKbQotKHN0cmVhbXMpIDMwLjQzNTcgVGoKLS0yMDMgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yMDMgVEptCi0oZm9ybSkgMTkuMzY3MyBUagotLTIwMyBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yMDMgVEptCi0ocGFydCkgMTUuNDkxOCBUagotLTIwMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTIwNCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjAzIFRKbQotKHN1cnJvdW5kaW5nLCkgNTAuNjM5OSBUagotLTIxMiBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotLTIwMyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjAzIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDI1MS42OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjcyMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0yMjEuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDIyMS45NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAyMjEuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTIyMS45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAyMjEuOTY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjQwIFRKbQotKHdyaXRpbmcsKSAzMS4yNzI2IFRqCi0tMjQzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjQxIFRKbQotKHRhaykgMTIuMTc0MyBUagotMTAgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNDAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNDEgVEptCi0ob3BlbikgMTkuMzY3MyBUagotLTI0MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNDEgVEptCi0oaGFuZGxlLCkgMjkuMDUwOSBUagotLTI0MiBUSm0KLSh3cml0ZXMpIDI0LjM0ODYgVGoKLS0yNDEgVEptCi0oY29tcHJlcykgMzMuNzUzMyBUagotMSBUSm0KLShzZWQpIDEzLjI4MDEgVGoKLS0yNDEgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI0MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQxIFRKbQotKGl0LCkgOC4wMjk4NiBUagotWzEgMCAwIDEgMzk4LjkyNiAyMjEuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5OC45MjYgLTIyMS45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5OC45MjYgMjIxLjk2NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZmx1c2gpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQzNC43OTEgMjIxLjk2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzQuNzkxIC0yMjEuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzQuNzkxIDIyMS45NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZXMpIDguMjk4ODUgVGoKLS0yNDAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNDEgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjQwIFRKbQotKGRvZXMpIDE4LjI2MTQgVGoKLS0yNDEgVEptCi0obm90KSAxMi43MzIyIFRqCi1bMSAwIDAgMSA1MDQuMTM1IDIyMS45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA0LjEzNSAtMjIxLjk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA0LjEzNSAyMjEuOTY3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZjbG9zZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNTQwIDIyMS45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC0yMjEuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjEwLjAxMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpdC4pIDguMDI5ODYgVGoKLS02MTAgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjM1IFRKbQotKGNhbGxpbmcpIDI3LjExODIgVGoKLS0yMzUgVEptCi0oYXBwbGljYXRpb24pIDQ0LjI3MzggVGoKLS0yMzUgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjM1IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMjM1IFRKbQotKGl0cykgOS40MTQ2NiBUagotLTIzNSBUSm0KLShvKSA0Ljk4MTMgVGoKLTI1IFRKbQotKHduKSAxMi4xNzQzIFRqCi0tMjM1IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMzUgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjM1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjM1IFRKbQotKGFmdGVyKSAxOC4yNTE1IFRqCi0tMjM1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzNSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjM1IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMzUgVEptCi0oc3RyZWFtLCkgMjkuMDUwOSBUagotLTIzOCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjM1IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yMzUgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTIzNSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLTg2Ljk0NCAxOTguMDU2IFRkCi0oaGFuZGxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMTE1Ljk5NSAxOTguMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzLjk5NDggLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0xNzYuMTM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDE3Ni4xMzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAxNzYuMTM5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTE3Ni4xMzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxNzYuMTM5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJlYWRpbmcpIDMzLjIwNTMgVGoKLS0yMzYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzYgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTIzNiBUSm0KLShjb21wbGUpIDI5LjMyOTkgVGoKLTE1IFRKbQotKHgsKSA3LjQ3MTk1IFRqCi0tMjM4IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjM2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzNiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXRpZXMpIDMwLjk5MzYgVGoKLS0yMzYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjM2IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTIzNSBUSm0KLShhcykgOC4yOTg4NSBUagotLTIzNiBUSm0KLShnZW5lcmFsKSAyOS4zMTk5IFRqCi0tMjM2IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjM2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjM2IFRKbQotKGNvdWxkKSAyMi4xMzY5IFRqCi0tMjM2IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjM2IFRKbQotKHNpbmNlKSAyMC40NzMxIFRqCi0tMjM1IFRKbQotKGdlbmVyYWxpdHkpIDM5Ljg0MDQgVGoKLS0yMzYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzYgVEptCi0oaGFyZCkgMTcuNzAzNSBUagotLTIzNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjM2IFRKbQotKHJlY29uY2lsZSkgMzYuNTEyOSBUagotODYuOTQ0IDE2NC4xODMgVGQKLSh3aXRoKSAxNy43MTM1IFRqCi0tNDA0IFRKbQotKGVmKSA3Ljc0MDk0IFRqCi0yNSBUSm0KLShcMDAyY2llbmMpIDI2LjU2MDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMTY0LjgxMSAxNjQuMTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC44MTEgLTE2NC4xODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NC44MTEgMTY0LjE4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyMjQuNTg3IDE2NC4xODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI0LjU4NyAtMTY0LjE4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI4LjYxNCAxNjQuMTgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlYWRzKSAyMS4wMjExIFRqCi0tNDA0IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS00MDUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDA0IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MDQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tNDA0IFRKbQotKGluKSA3Ljc1MDkgVGoKLS00MDUgVEptCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tNDA0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDA0IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLVsxIDAgMCAxIDQzNC43NDQgMTY0LjE4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzQuNzQ0IC0xNjQuMTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzQuNzQ0IDE2NC4xODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTUFYX1VOVVNFRCkgNzcuNzA4MyBUagotWzEgMCAwIDEgNTEyLjQ1MiAxNjQuMTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMi40NTIgLTE2NC4xODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxNi40NzkgMTY0LjE4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcywpIDIzLjUyMTcgVGoKLTg2Ljk0NCAxNTIuMjI4IFRkCi0oYW5kKSAxNC4zODYgVGoKLS00MTMgVEptCi0oaW4pIDcuNzUwOSBUagotLTQxMyBUSm0KLShkb2luZykgMjIuNjk0OCBUagotLTQxMyBUSm0KLShzbykgOC44NTY3NSBUagotLTQxMyBUSm0KLShwcm9iYWJseSkgMzUuNDE3IFRqCi0tNDEzIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS00MTMgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2hvb3QpIDI5LjMyOTkgVGoKLS00MTMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDEzIFRKbQotKGxvZ2ljYWwpIDI3LjExODIgVGoKLS00MTMgVEptCi0oZW5kKSAxNC4zODYgVGoKLS00MTMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00MTMgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQxMyBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi0tMTU5OCBUSm0KLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvKSA0Ljk4MTMgVGoKLS00MTMgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTQxMyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS00MTMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQxMyBUSm0KLShvbmNlKSAxOC44MDk0IFRqCi04Ni45NDQgMTQwLjI3MyBUZAotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTIgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjUyIFRKbQotKGVuZGVkLCkgMjYuMjgxMyBUagotLTI1MyBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDIxMC43MDUgMTQwLjI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuNzA1IC0xNDAuMjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuNzA1IDE0MC4yNzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZEdldFVudXNlZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMzI0LjI3OSAxNDAuMjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNC4yNzkgLTE0MC4yNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNi43ODkgMTQwLjI3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhZnRlcikgMTguMjUxNSBUagotLTI1MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTIgVEptCi0obGFzdCkgMTMuODM4MSBUagotLTI1MiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yNTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQwNi4yOTEgMTQwLjI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDYuMjkxIC0xNDAuMjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDYuMjkxIDE0MC4yNzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgNDY2LjA2NyAxNDAuMjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ni4wNjcgLTE0MC4yNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2OC41NzggMTQwLjI3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKHRoZSkgMTUuNDkxOCBUagotLTI1MiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI1MiBUSm0KLShyZXR1cm5pbmcpIDM2LjUyMjkgVGoKLVsxIDAgMCAxIDg2Ljk0NCAxMjguMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMTI4LjMxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDEyOC4zMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMTY0LjY1MyAxMjguMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC42NTMgLTEyOC4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NC42NTMgMTI4LjMxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjUwIFRKbQotKGNhbGxpbmcpIDI3LjExODIgVGoKLVsxIDAgMCAxIDI0My4wMjggMTI4LjMxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDMuMDI4IC0xMjguMzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDMuMDI4IDEyOC4zMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAzMzIuNjkyIDEyOC4zMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMyLjY5MiAtMTI4LjMxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMyLjY5MiAxMjguMzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMzNS4xODIgMTI4LjMxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjMuMTgyIC03Ny40NjZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC44NTE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjQpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMjggMjgKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTI3MSBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0yNzIgVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlcykgOC4yOTg4NSBUagotLTI3MSBUSm0KLShpdCkgNS41MzkyMSBUagotLTI3MSBUSm0KLShlYXN5KSAxNy43MDM1IFRqCi0tMjcxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzIgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI3MSBUSm0KLShtdWx0aXBsZSkgMzMuMjE1MyBUagotWzEgMCAwIDEgMjkzLjMxMiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5My4zMTIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5My4zMTIgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMzIzLjIgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjMuMiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI1LjkwMyA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHN0cmVhbXMpIDMwLjQzNTcgVGoKLS0yNzEgVEptCi0ocGxhY2VkKSAyNi4wMDI0IFRqCi0tMjcyIFRKbQotKGVuZC10by1lbmQuKSA0NS42NDg2IFRqCi0tMzc0IFRKbQotKEFzKSAxMS4wNjg0IFRqCi0tMjcxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MSBUSm0KLShlbmQpIDE0LjM4NiBUagotLTI3MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI3MSBUSm0KLShzdHJlYW0sKSAyOS4wNTA5IFRqCi03MiA2OTguMDgyIFRkCi0od2hlbikgMjEuNTc5IFRqCi1bMSAwIDAgMSA5Ni4xOTQ4IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTYuMTk0OCAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTYuMTk0OCA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE1NS45NzEgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTUuOTcxIC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTguNTg2IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmV0dXJucykgMjcuNjY2MSBUagotWzEgMCAwIDEgMTg4Ljg2OCA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OC44NjggLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC44NjggNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyNjYuNTc3IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY2LjU3NyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY2LjU3NyA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNjMgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyODguNjg1IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg4LjY4NSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg4LjY4NSA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDQwMi4yNTkgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDIuMjU5IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDQuODc1IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI2MyBUSm0KLShjb2xsZWN0KSAyNi41NjAzIFRqCi0tMjYyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MyBUSm0KLSh1bnVzZWQpIDI4LjIyNCBUagotLTI2MiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjYzIFRKbQotKFwoY29wKSAxNy43MDM1IFRqCi0xMCBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNjIgVEptCi0oaXQpIDUuNTM5MjEgVGoKLTcyIDY4Ni4xMjcgVGQKLShpbnRvKSAxNS41MDE4IFRqCi0tMjY1IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNjUgVEptCi0obykgNC45ODEzIFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTI2NSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yNjUgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0yNSBUSm0KLSh3aGVyZVwpLikgMzAuMTQ2OCBUagotLTcxMSBUSm0KLShUaGF0KSAxOC4yNjE0IFRqCi0tMjY1IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjUgVEptCi0oZm9ybXMpIDIzLjI0MjcgVGoKLS0yNjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY1IFRKbQotKHN0YXJ0KSAxNy4xNTU2IFRqCi0tMjY1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NSBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI2NSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjY1IFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLS03MTEgVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tMjY1IFRKbQotKHN0YXJ0KSAxNy4xNTU2IFRqCi0tMjY1IFRKbQotKHVuY29tcHJlc3NpbmcpIDYwLjMyMzUgVGoKLTcyIDY3NC4xNzIgVGQKLSh0aGF0KSAxNC45NDM5IFRqCi0tMjQ2IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjQ2IFRKbQotKHN0cmVhbSwpIDI5LjA1MDkgVGoKLS0yNDcgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxNTcuMjA1IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU3LjIwNSAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU3LjIwNSA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyNDAuODkxIDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjg5MSAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQzLjM0NCA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFnKSA5LjQwNDY5IFRqCi01IFRKbQotKGFpbiwpIDE0LjY2NDkgVGoKLS0yNDcgVEptCi0oZmVlZGluZykgMjkuODc3OCBUagotLTI0NiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjQ2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NyBUSm0KLSh1bnVzZWQpIDI4LjIyNCBUagotLTI0NiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjQ2IFRKbQotKHZpYSkgMTIuMTc0MyBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQwNS45NjcgNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDUuOTY3IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDUuOTY3IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odW51c2VkKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0NDEuODMzIDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQxLjgzMyAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ0LjI4NiA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC8pIDIuNzY5NiBUagotWzEgMCAwIDEgNDQ5LjUwOCA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0OS41MDggLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0OS41MDggNjc0LjE3MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuVW51c2VkKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0OTEuMzUxIDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkxLjM1MSAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkzLjgwNCA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHBhcmFtZXRlcnMuKSA0Ni4xOTY2IFRqCi03MiA2NjIuMjE3IFRkCi0oSykgNy4xOTMgVGoKLTI1IFRKbQotKGVlcCkgMTMuODI4MSBUagotLTI2MyBUSm0KLShkb2luZykgMjIuNjk0OCBUagotLTI2MyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjQgVEptCi0odW50aWwpIDE4LjI3MTQgVGoKLVsxIDAgMCAxIDE1OC42MjIgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguNjIyIC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTguNjIyIDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMjM2LjMzIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM2LjMzIC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzguOTUyIDY2Mi4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjYzIFRKbQotKGNvaW5jaWRlcykgMzcuNjI4NyBUagotLTI2MyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjYzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NCBUSm0KLShwaCkgOS45NjI2IFRqCi01IFRKbQotKHlzaWNhbCkgMjMuMjQyNyBUagotLTI2MyBUSm0KLShlbmQpIDE0LjM4NiBUagotLTI2MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2MyBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjMgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDQyMy4xMjUgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjMuMTI1IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjMuMTI1IDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmVvZlwoZlwpKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0NjQuOTY4IDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY0Ljk2OCAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY0Ljk2OCA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLikgNS44MDgyIFRqCi0tNjk5IFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjYzIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2MyBUSm0KLShzaXR1YXRpb24pIDM0LjMyMTIgVGoKLVsxIDAgMCAxIDcyIDY1MC4yNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY1MC4yNjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1MC4yNjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZEdldFVudXNlZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMTg1LjU3NCA2NTAuMjYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4NS41NzQgLTY1MC4yNjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC4wNjUgNjUwLjI2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNvdXJzZSkgMjYuMDAyNCBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0obm8pIDkuOTYyNiBUagotLTI1MCBUSm0KLShkYXRhLikgMTkuMDg4MyBUagotWzEgMCAwIDEgNzIgNjQ4Ljk1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjM4Ljk4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjI4LjM0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjQwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI0MSBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNDAgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjQxIFRKbQotKGZlZWwpIDE0LjkzMzkgVGoKLS0yNDAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjQxIFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjQwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MCBUSm0KLShoaWdoLWxlKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjQxIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLS0yNDAgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjQxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjQwIFRKbQotKHVzZWQuKSAyMC43NTIxIFRqCi0tNjE0IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjQwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI0MSBUSm0KLShyZXF1aXJlKSAyOC4yMTQxIFRqCi0tMjQwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHh0cmEpIDE1LjQ5MTggVGoKLS0yNDEgVEptCi0oXDAwM2UpIDkuOTYyNiBUagotMTUgVEptCi0oeGliaSkgMTUuNTAxOCBUagotMSBUSm0KLShsaXR5KSAxMy4yOTAxIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQzIFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTEwIFRKbQotKGxsKSA1LjUzOTIxIFRqCi0tMjQwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNDEgVEptCi0odG8pIDcuNzUwOSBUagotNzIgNjE2LjM4OSBUZAotKGJpdGUpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWxsZXQpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oZ2V0KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZ3JpcHMpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZS4pIDE1Ljc2MDggVGoKLVsxIDAgMCAxIDcyIDYxNC4yMzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwNC4yNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4NS43NjcgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC45LikgNDMuMDcyOSBUagotLTI3OCBUSm0KLShTdGFuZGFyKSA2NC4wOTI5IFRqCi0yMCBUSm0KLShkKSAxMC41MTg2IFRqCi0tMjc4IFRKbQotKFwwMDJsZS1yZWFkaW5nL3dyaXRpbmcpIDE1NC4wMDkgVGoKLS0yNzggVEptCi0oY29kZSkgNDAuMTgwNyBUagotWzEgMCAwIDEgNzIgNTgxLjkzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTcxLjk3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTYzLjg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEhlcmUnKSAyMi42NzQ5IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjUwIFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKGQpIDQuOTgxMyBUagotLTI1MCBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZTopIDE1LjUwMTggVGoKLVsxIDAgMCAxIDcyIDU2MS42OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNzEuNjA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDM3MC42MSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDM2Ny4wMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01NTIuMzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1NTIuMzI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEZJTEUpIDIzLjkxMDIgVGoKLTExMy45MSA1NTAuNTg0IFRkCi0oKikgNS45Nzc1NiBUagotMTMyLjYyIDU1Mi4zMjggVGQKLShmOykgMTEuOTU1MSBUagotOTAgNTQwLjM3MyBUZAotKEJaRklMRSkgMzUuODY1NCBUagotMTI1Ljg2NSA1MzguNjI5IFRkCi0oKikgNS45Nzc1NiBUagotMTM2LjA4NyA1NDAuMzczIFRkCi0oYjspIDExLjk1NTEgVGoKLTkwIDUyOC40MTggVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKG5CdWY7KSAyOS44ODc4IFRqCi05MCA1MTYuNDYyIFRkCi0oY2hhcikgMjMuOTEwMiBUagotLTE3MDQgVEptCi0oYnVmWykgMjMuOTEwMiBUagotLTQyNiBUSm0KLSgvKSA1Ljk3NzU2IFRqCi0xNjUuMDE4IDUxNC43MTkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xNzUuMjQgNTE2LjQ2MiBUZAotKHdoYXRldmVyKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oeW91KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpa2UpIDIzLjkxMDIgVGoKLTMwNS43OSA1MTQuNzE5IFRkCi0oKikgNS45Nzc1NiBUagotMzExLjc2NyA1MTYuNDYyIFRkCi0oLykgNS45Nzc1NiBUagotLTQyNiBUSm0KLShdOykgMTEuOTU1MSBUagotOTAgNTA0LjUwNyBUZAotKGludCkgMTcuOTMyNyBUagotLTIxMzAgVEptCi0oYnplcnJvcjspIDQ3LjgyMDUgVGoKLTkwIDQ5Mi41NTIgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKG5Xcml0dGVuOykgNTMuNzk4IFRqCi05MCA0NjguNjQyIFRkCi0oZikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGZvcGVuKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCJteWZpbGUuYnoyIiwpIDc3LjcwODMgVGoKLS00MjYgVEptCi0oInciKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTAgNDU2LjY4NyBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCFmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk0LjI0NCA0NDQuNzMxIFRkCi0oLykgNS45Nzc1NiBUagotMTAwLjIyMiA0NDIuOTg4IFRkCi0oKikgNS45Nzc1NiBUagotMTEwLjQ0MyA0NDQuNzMxIFRkCi0oaGFuZGxlKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0xODQuNjg1IDQ0Mi45ODggVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTAuNjYyIDQ0NC43MzEgVGQKLSgvKSA1Ljk3NzU2IFRqCi05MCA0MzIuNzc2IFRkCi0ofSkgNS45Nzc1NiBUagotOTAgNDIwLjgyMSBUZAotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZU9wZW5cKCkgOTUuNjQxIFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGYsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDkpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCA0MDguODY2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXChiemVycm9yKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LXCkpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotOTQuMjQ0IDM5Ni45MTEgVGQKLShCWjJfYnpXcml0ZUNsb3NlKSA5NS42NDEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTk0LjI0NCAzODQuOTU2IFRkCi0oLykgNS45Nzc1NiBUagotMTAwLjIyMiAzODMuMjEyIFRkCi0oKikgNS45Nzc1NiBUagotMTEwLjQ0MyAzODQuOTU2IFRkCi0oaGFuZGxlKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0xODQuNjg1IDM4My4yMTIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTAuNjYyIDM4NC45NTYgVGQKLSgvKSA1Ljk3NzU2IFRqCi05MCAzNzMgVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCAzNDkuMDkgVGQKLSh3aGlsZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgvKSA1Ljk3NzU2IFRqCi0xNDAuMzMxIDM0Ny4zNDcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xNTAuNTUzIDM0OS4wOSBUZAotKGNvbmRpdGlvbikgNTMuNzk4IFRqCi0yMDguNTk1IDM0Ny4zNDcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMTQuNTcyIDM0OS4wOSBUZAotKC8pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotOTQuMjQ0IDMzNy4xMzUgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDAuMjIyIDMzNS4zOTEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMTAuNDQzIDMzNy4xMzUgVGQKLShnZXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh3cml0ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShpbnRvKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNldCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShuQnVmKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGFwcHJvcHJpYXRlbHkpIDc3LjcwODMgVGoKLTQyMS44NzQgMzM1LjM5MSBUZAotKCopIDUuOTc3NTYgVGoKLTQyNy44NTIgMzM3LjEzNSBUZAotKC8pIDUuOTc3NTYgVGoKLTk0LjI0MzkgMzI1LjE4IFRkCi0obldyaXR0ZW4pIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG5CdWYpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05NC4yNDM5IDMxMy4yMjUgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKGJ6ZXJyb3IpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oPT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfSU9fRVJST1JcKSkgNzEuNzMwNyBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi0xMDIuNzMyIDMwMS4yNjkgVGQKLShCWjJfYnpXcml0ZUNsb3NlKSA5NS42NDEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oJmJ6ZXJyb3IsKSA1My43OTggVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTEwMi43MzIgMjg5LjMxNCBUZAotKC8pIDUuOTc3NTYgVGoKLTEwOC43MDkgMjg3LjU3MSBUZAotKCopIDUuOTc3NTYgVGoKLTExOC45MzEgMjg5LjMxNCBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTkzLjE3MiAyODcuNTcxIFRkCi0oKikgNS45Nzc1NiBUagotMTk5LjE1IDI4OS4zMTQgVGQKLSgvKSA1Ljk3NzU2IFRqCi05NC4yNDM5IDI3Ny4zNTkgVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCAyNjUuNDA0IFRkCi0ofSkgNS45Nzc1NiBUagotOTAgMjQxLjQ5NCBUZAotKEJaMl9ieldyaXRlQ2xvc2VcKCkgMTAxLjYxOSBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTAgMjI5LjUzOCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoYnplcnJvcikgNDcuODIwNSBUagotLTQyNiBUSm0KLSg9PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9JT19FUlJPUlwpKSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk0LjI0MzkgMjE3LjU4MyBUZAotKC8pIDUuOTc3NTYgVGoKLTEwMC4yMjEgMjE1Ljg0IFRkCi0oKikgNS45Nzc1NiBUagotMTEwLjQ0MyAyMTcuNTgzIFRkCi0oaGFuZGxlKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0xODQuNjg0IDIxNS44NCBUZAotKCopIDUuOTc3NTYgVGoKLTE5MC42NjIgMjE3LjU4MyBUZAotKC8pIDUuOTc3NTYgVGoKLTg5Ljk5OTkgMjA1LjYyOCBUZAotKH0pIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDcyIDE5MC4wODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTgwLjEyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTY4LjE2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbmQpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZTopIDE1LjUwMTggVGoKLVsxIDAgMCAxIDcyIDE2Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMTUuMTZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjUpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMjkgMjkKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zOTIuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDM3MC42MSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDM2Ny4wMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEZJTEUpIDIzLjkxMDIgVGoKLTExMy45MSA3MDkuODg4IFRkCi0oKikgNS45Nzc1NiBUagotMTMyLjYyIDcxMS42MzEgVGQKLShmOykgMTEuOTU1MSBUagotOTAgNjk5LjY3NiBUZAotKEJaRklMRSkgMzUuODY1NCBUagotMTI1Ljg2NSA2OTcuOTMzIFRkCi0oKikgNS45Nzc1NiBUagotMTM2LjA4NyA2OTkuNjc2IFRkCi0oYjspIDExLjk1NTEgVGoKLTkwIDY4Ny43MjEgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKG5CdWY7KSAyOS44ODc4IFRqCi05MCA2NzUuNzY2IFRkCi0oY2hhcikgMjMuOTEwMiBUagotLTE3MDQgVEptCi0oYnVmWykgMjMuOTEwMiBUagotLTQyNiBUSm0KLSgvKSA1Ljk3NzU2IFRqCi0xNjUuMDE4IDY3NC4wMjMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xNzUuMjQgNjc1Ljc2NiBUZAotKHdoYXRldmVyKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oeW91KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpa2UpIDIzLjkxMDIgVGoKLTMwNS43OSA2NzQuMDIzIFRkCi0oKikgNS45Nzc1NiBUagotMzExLjc2NyA2NzUuNzY2IFRkCi0oLykgNS45Nzc1NiBUagotLTQyNiBUSm0KLShdOykgMTEuOTU1MSBUagotOTAgNjYzLjgxMSBUZAotKGludCkgMTcuOTMyNyBUagotLTIxMzAgVEptCi0oYnplcnJvcjspIDQ3LjgyMDUgVGoKLTkwIDY1MS44NTYgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKG5Xcml0dGVuOykgNTMuNzk4IFRqCi05MCA2MjcuOTQ1IFRkCi0oZikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGZvcGVuKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCJteWZpbGUuYnoyIiwpIDc3LjcwODMgVGoKLS00MjYgVEptCi0oInIiKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTAgNjE1Ljk5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oIWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotOTguNDg4IDYwNC4wMzUgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDQuNDY2IDYwMi4yOTIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMTQuNjg3IDYwNC4wMzUgVGQKLShoYW5kbGUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLTE4OC45MjkgNjAyLjI5MiBUZAotKCopIDUuOTc3NTYgVGoKLTE5NC45MDYgNjA0LjAzNSBUZAotKC8pIDUuOTc3NTYgVGoKLTkwIDU5Mi4wOCBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDU4MC4xMjUgVGQKLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oJmJ6ZXJyb3IsKSA1My43OTggVGoKLS00MjYgVEptCi0oZiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oMCwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDU2OC4xNjkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk4LjQ4OCA1NTYuMjE0IFRkCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05OC40ODggNTQ0LjI1OSBUZAotKC8pIDUuOTc3NTYgVGoKLTEwNC40NjYgNTQyLjUxNiBUZAotKCopIDUuOTc3NTYgVGoKLTExNC42ODcgNTQ0LjI1OSBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTg4LjkyOSA1NDIuNTE2IFRkCi0oKikgNS45Nzc1NiBUagotMTk0LjkwNiA1NDQuMjU5IFRkCi0oLykgNS45Nzc1NiBUagotOTAgNTMyLjMwNCBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDUwOC4zOTQgVGQKLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfT0s7KSAzNS44NjU0IFRqCi05MCA0OTYuNDM4IFRkCi0od2hpbGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSg9PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLSgmJikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgvKSA1Ljk3NzU2IFRqCi0yNTIuOTQ4IDQ5NC42OTUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNjMuMTcgNDk2LjQzOCBUZAotKGFyYml0cmFyeSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKG90aGVyKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGNvbmRpdGlvbnMpIDU5Ljc3NTYgVGoKLTQxOS4zNjQgNDk0LjY5NSBUZAotKCopIDUuOTc3NTYgVGoKLTQyNS4zNDEgNDk2LjQzOCBUZAotKC9cKSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi05OC40ODggNDg0LjQ4MyBUZAotKG5CdWYpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGIsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMzE5LjQ3OCA0ODIuNzQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMjkuNyA0ODQuNDgzIFRkCi0oc2l6ZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShidWYpIDE3LjkzMjcgVGoKLTM5Ni4yMyA0ODIuNzQgVGQKLSgqKSA1Ljk3NzU2IFRqCi00MDIuMjA4IDQ4NC40ODMgVGQKLSgvKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTguNDg4IDQ3Mi41MjggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKD09KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTEwNi45NzYgNDYwLjU3MyBUZAotKC8pIDUuOTc3NTYgVGoKLTExMi45NTMgNDU4LjgyOSBUZAotKCopIDUuOTc3NTYgVGoKLTEyMy4xNzUgNDYwLjU3MyBUZAotKGRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNvbWV0aGluZykgNTMuNzk4IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYnVmWzApIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oLi4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obkJ1Zi0xXSkgNDEuODQyOSBUagotMzIxLjk4OSA0NTguODI5IFRkCi0oKikgNS45Nzc1NiBUagotMzI3Ljk2NiA0NjAuNTczIFRkCi0oLykgNS45Nzc1NiBUagotOTguNDg3OSA0NDguNjE4IFRkCi0ofSkgNS45Nzc1NiBUagotOTAgNDM2LjY2MyBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDQyNC43MDcgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotMTAyLjczMiA0MTIuNzUyIFRkCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi0xMDIuNzMyIDQwMC43OTcgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDguNzA5IDM5OS4wNTQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMTguOTMxIDQwMC43OTcgVGQKLShoYW5kbGUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLTE5My4xNzIgMzk5LjA1NCBUZAotKCopIDUuOTc3NTYgVGoKLTE5OS4xNSA0MDAuNzk3IFRkCi0oLykgNS45Nzc1NiBUagotOTAgMzg4Ljg0MiBUZAotKH0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oZWxzZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi0xMDIuNzMyIDM3Ni44ODcgVGQKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oJmJ6ZXJyb3IsKSA1My43OTggVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDM2NC45MzIgVGQKLSh9KSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA3MiAzNDkuMzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMzkuNDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTQuNjM3IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgzLjUuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFV0aWxpdHkpIDU3LjM4OTMgVGoKLS0yNzggVEptCi0oZnVuY3Rpb25zKSA5Mi45NjMzIFRqCi1bMSAwIDAgMSA3MiAzMTAuMzYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMDAuMzk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODQuMDE2IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjUuMS4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggMjg0LjAxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC0yODQuMDE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDI4NC4wMTYgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcykgMjQ3LjkwMiBUagotWzEgMCAwIDEgMzY3Ljc2IDI4NC4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk1Ljc2IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ni42Mzc2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDk1LjY0MTMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA5Mi4wNTQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjcyLjMxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjcyLjMxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6QnVmZlRvQnVmZkNvbXByZXNzXCgpIDE0OS40MzkgVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMjg5Ljc3MSAyNzAuNTc1IFRkCi0oKikgNS45Nzc1NiBUagotMzMzLjk0NCAyNzIuMzE4IFRkCi0oZGVzdCwpIDI5Ljg4NzggVGoKLTIxNy4zMTkgMjYwLjM2MyBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjg3LjMxNyAyNTguNjIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yOTcuNTM4IDI2MC4zNjMgVGQKLShkZXN0TGVuLCkgNDcuODIwNSBUagotMjE3LjMxOSAyNDguNDA4IFRkCi0oY2hhcikgMjMuOTEwMiBUagotMjQxLjIzIDI0Ni42NjQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yODUuNDAzIDI0OC40MDggVGQKLShzb3VyY2UsKSA0MS44NDI5IFRqCi0yMTcuMzE5IDIzNi40NTMgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS04NTIgVEptCi0oc291cmNlTGVuLCkgNTkuNzc1NiBUagotMjE3LjMxOSAyMjQuNDk4IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDY4NiBUSm0KLShibG9ja1NpemUxMDBrLCkgODMuNjg1OCBUagotMjE3LjMxOSAyMTIuNTQyIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDY4NiBUSm0KLSh2ZXJib3NpdHksKSA1OS43NzU2IFRqCi0yMTcuMzE5IDIwMC41ODcgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00Njg2IFRKbQotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAxODUuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE3NS4wODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE2My4xMjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQXR0ZW1wdHMpIDM2LjUzMjkgVGoKLS00NDIgVEptCi0odG8pIDcuNzUwOSBUagotLTQ0MiBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTQ0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00NDIgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQ0MiBUSm0KLShpbikgNy43NTA5IFRqCi1bMSAwIDAgMSAyMTYuODcgMTYzLjEyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTYuODcgLTE2My4xMjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi44NyAxNjMuMTI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNvdXJjZVswKSA0Ny44MjA1IFRqCi0tNjAwIFRKbQotKC4uKSAxMS45NTUxIFRqCi0tMTIwMCBUSm0KLShzb3VyY2VMZW4tMV0pIDcxLjczMDcgVGoKLVsxIDAgMCAxIDM2Ni4zMSAxNjMuMTI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2Ni4zMSAtMTYzLjEyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzcwLjcxNSAxNjMuMTI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGludG8pIDE1LjUwMTggVGoKLS00NDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQyIFRKbQotKGRlc3RpbmF0aW9uKSA0My43MjU5IFRqCi0tNDQzIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDg2LjIwMiAxNjMuMTI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ni4yMDIgLTE2My4xMjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ni4yMDIgMTYzLjEyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShkZXN0WzApIDM1Ljg2NTQgVGoKLS02MDAgVEptCi0oLi4pIDExLjk1NTEgVGoKLTcyIDE0OS40MjkgVGQKLSgqKSA1Ljk3NzU2IFRqCi03Ny45Nzc2IDE1MS4xNzMgVGQKLShkZXN0TGVuLTFdKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzcuNzUzIDE1MS4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MyAtMTUxLjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM3Ljc1MyAxNTEuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMzkzIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzc5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM3OSBUSm0KLShkZXN0aW5hdGlvbikgNDMuNzI1OSBUagotLTM3OSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zNzggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNzkgVEptCi0oYmlnKSAxMi43MzIyIFRqCi0tMzc5IFRKbQotKGVub3VnaCwpIDMxLjgyMDUgVGoKLVsxIDAgMCAxIDMxOC40ODYgMTUxLjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTguNDg2IC0xNTEuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTguNDg2IDE0OS40MjkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMzI0LjQ2NCAxNTEuMTczIFRkCi0oZGVzdExlbikgNDEuODQyOSBUagotWzEgMCAwIDEgMzY2LjMwNyAxNTEuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2Ni4zMDcgLTE1MS4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3MC4wODEgMTUxLjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTM3OSBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zNzkgVEptCi0odG8pIDcuNzUwOSBUagotLTM3OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTM3OSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM3OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTM3OSBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotNzIgMTM5LjIxNyBUZAotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA4OS41MjczIDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODkuNTI3MyAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODkuNTI3MyAxMzkuMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMTkuNDE1IDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5LjQxNSAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIyLjU1NiAxMzkuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzE1IFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMTAxMiBUSm0KLShJZikgNi42MzUwOSBUagotLTMxNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTYgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTMxNSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvbicpIDEzLjI4MDEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTMxNiBUSm0KLShcMDAydCwpIDEwLjc5OTUgVGoKLVsxIDAgMCAxIDMxMy4zMjIgMTM5LjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTMuMzIyIC0xMzkuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTMuMzIyIDEzNy40NzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMzE5LjMgMTM5LjIxNyBUZAotKGRlc3RMZW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDM2MS4xNDMgMTM5LjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjEuMTQzIC0xMzkuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjQuMjg0IDEzOS4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMTUgVEptCi0odW5jaGFuZ2VkLCkgNDUuNjQ4NiBUagotLTMzMiBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDQwLjU1MSAxMzkuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MC41NTEgLTEzOS4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0MC41NTEgMTM5LjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PVVRCVUZGX0ZVTEwpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDUzMC4yMTUgMTM5LjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzAuMjE1IC0xMzkuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzMuMzU1IDEzOS4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDEyNy4yNjIgVGQKLShyZXR1cm5lZC4pIDM1LjY4NiBUagotWzEgMCAwIDEgNzIgMTI3LjE2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTE3LjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwNS4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0yOTcgVEptCi0oaW4pIDcuNzUwOSBUagotLTI5NyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yOTcgVEptCi0obWFubmVyKSAyOS44Nzc4IFRqCi0tMjk3IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTcgVEptCi0ob25lLXNob3QpIDM0LjMxMTIgVGoKLS0yOTcgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbnQsKSAxNC42NjQ5IFRqCi0tMzA5IFRKbQotKGRvbmUpIDE5LjM2NzMgVGoKLS0yOTcgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI5NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk3IFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTI5NyBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yOTcgVEptCi0odG8pIDcuNzUwOSBUagotLTI5NyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yOTcgVEptCi0oZnVuY3Rpb24uKSAzNS42OTYgVGoKLS05MDMgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjk3IFRKbQotKHJlc3VsdGluZykgMzQuODY5MSBUagotLTI5NyBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi03MiA5My4zODkyIFRkCi0oZGF0YSkgMTYuNTk3NyBUagotLTI5NiBUSm0KLShpcykgNi42NDUwNSBUagotLTI5NiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk2IFRKbQotKGNvbXBsZXRlKSAzNi41MjI5IFRqCi1bMSAwIDAgMSAxNDcuOTg4IDkzLjM4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ3Ljk4OCAtOTMuMzg5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ3Ljk4OCA5My4zODkyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxNzcuODc1IDkzLjM4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc3Ljg3NSAtOTMuMzg5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgwLjgyNSA5My4zODkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcm1hdCkgMjYuNTYwMyBUagotLTI5NiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjk2IFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLS04OTcgVEptCi0oVGhlcmUpIDIzLjIzMjggVGoKLS0yOTYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTYgVEptCi0obm8pIDkuOTYyNiBUagotLTI5NiBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0yOTYgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjk2IFRKbQotKG1ha2luZykgMjkuODg3OCBUagotLTI5NiBUSm0KLShhZGRpdGlvbmFsKSAzOS44NTA0IFRqCi0tMjk2IFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjk2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTYgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlKSAxNy4xNTU2IFRqCi0tMjk2IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHh0cmEpIDE1LjQ5MTggVGoKLTcyIDgxLjQzNCBUZAotKGlucHV0KSAyMC40ODMxIFRqCi0tMjUwIFRKbQotKGRhdGEuKSAxOS4wODgzIFRqCi0tNjIwIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oa2luZCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShtZWNoYW5pc20sKSA0Ny44NzAzIFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZS4pIDE1Ljc2MDggVGoKLVsxIDAgMCAxIDcyIDc5LjI3NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOC40MjU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDMwIDMwCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjIzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyNCBUSm0KLShtZWFuaW5nKSAzNC4zMTEyIFRqCi0tMjIzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjI0IFRKbQotKHBhcmFtZXRlcnMpIDQzLjcwNTkgVGoKLVsxIDAgMCAxIDE5NS4zMDYgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTUuMzA2IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTUuMzA2IDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYmxvY2tTaXplMTAwaykgNzcuNzA4MyBUagotWzEgMCAwIDEgMjczLjAxNSA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3My4wMTUgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3My4wMTUgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNzcuNzg0IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3Ljc4NCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc3Ljc4NCA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAzMzEuNTgzIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMxLjU4MyAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMzLjgwOCA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNTAuNDIgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTAuNDIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1MC40MiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQxMC4xOTYgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTAuMTk2IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTAuMTk2IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTIyOSBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLVsxIDAgMCAxIDQyOS45MTMgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjkuOTEzIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjkuOTEzIDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSA1MzcuNTA5IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDcwNy44OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjk3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjg4LjEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG8pIDQuOTgxMyBUagotLTQxMCBUSm0KLShndWFyYW50ZWUpIDM4LjcyNDYgVGoKLS00MTAgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTQxMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQxMCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tNDEwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS00MTAgVEptCi0oXDAwMnQpIDguMzA4ODEgVGoKLS00MTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTQxMCBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS00MTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDUwIFRKbQotKGFsbG9jYXRlKSAzMC45ODM3IFRqCi0tNDEwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tNDEwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTQxMCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS00MTEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00MTAgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTQxMCBUSm0KLSgxJSkgMTMuMjgwMSBUagotLTQxMCBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotLTQxMCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tNDEwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgNjc2LjE2NCBUZAotKHVuY29tcHJlc3NlZCkgNTYuOTk2IFRqCi0tMjUwIFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tMjUwIFRKbQotKHBsdXMpIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0oc2l4KSAxMS42MjY0IFRqCi0tMjUwIFRKbQotKGh1bmRyZWQpIDMyLjY0NzQgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHRyYSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShieXRlcy4pIDIzLjUyMTcgVGoKLVsxIDAgMCAxIDcyIDY3NC4wMDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY2NC4wNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1NC4yNDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDIyNy40MTcgNjU0LjI0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjcuNDE3IC02NTQuMjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuNTUzIDY1NC4yNDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTMxNSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zMTUgVEptCi0od3JpdGUpIDIwLjQ3MzEgVGoKLS0zMTQgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxNSBUSm0KLShhdCkgNy4xOTMgVGoKLS0zMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMTUgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHlvbmQpIDE5LjkyNTIgVGoKLVsxIDAgMCAxIDM2Mi40ODQgNjU0LjI0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjIuNDg0IC02NTQuMjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjIuNDg0IDY1NC4yNDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZGVzdFspIDI5Ljg4NzggVGoKLTM5Mi4zNzIgNjUyLjUwMyBUZAotKCopIDUuOTc3NTYgVGoKLTM5OC4zNDkgNjU0LjI0NyBUZAotKGRlc3RMZW5dKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0NDYuMTcgNjU0LjI0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDYuMTcgLTY1NC4yNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0Ni4xNyA2NTQuMjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMzEgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTMxNSBUSm0KLShpbikgNy43NTA5IFRqCi0tMzE1IFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0zMTQgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMTUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi03MiA2NDIuMjkxIFRkCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyXDAwM28pIDE4LjI2MTQgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2NDIuMTkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MzIuMjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MjAuMzc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgNjIwLjI3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE2OC4zNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTY3LjM3MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDE2My43ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC02MTAuOTA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA2MTAuOTA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0NPTkZJR19FUlJPUikgODkuNjYzNCBUagotOTguNDg3OSA1OTguOTU0IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpYnJhcnkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obWlzLWNvbXBpbGVkKSA3MS43MzA3IFRqCi05MCA1ODYuOTk5IFRkCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgNTc1LjA0NCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGRlc3QpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShkZXN0TGVuKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLTk4LjQ4NzkgNTYzLjA4OCBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJsb2NrU2l6ZTEwMGspIDc3LjcwODMgVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgxKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJsb2NrU2l6ZTEwMGspIDc3LjcwODMgVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg5KSA1Ljk3NzU2IFRqCi05OC40ODc5IDU1MS4xMzMgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg0KSA1Ljk3NzU2IFRqCi05OC40ODc5IDUzOS4xNzggVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMjUwKSAxNy45MzI3IFRqCi05MCA1MjcuMjIzIFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDUxNS4yNjggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA1MDMuMzEzIFRkCi0oQlpfT1VUQlVGRl9GVUxMKSA4OS42NjM0IFRqCi05OC40ODc5IDQ5MS4zNTcgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oc2l6ZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGV4Y2VlZHMpIDQxLjg0MjkgVGoKLTM0MS42NTUgNDg5LjYxNCBUZAotKCopIDUuOTc3NTYgVGoKLTM0Ny42MzMgNDkxLjM1NyBUZAotKGRlc3RMZW4pIDQxLjg0MjkgVGoKLTkwIDQ3OS40MDIgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA0NjcuNDQ3IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDQ1MS45MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDEuOTQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjEuMjg0IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjUuMi4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggNDIxLjI4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC00MjEuMjg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDQyMS4yODQgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAyNjguNTYgVGoKLVsxIDAgMCAxIDM4OC40MTkgNDIxLjI4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTYuNDE5IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC04NC42ODI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDgzLjY4NjIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4MC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDA5LjU4N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDA5LjU4NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3NcKCkgMTYxLjM5NCBUagotLTQyNiBUSm0KLShjaGFyKSAyMy45MTAyIFRqCi0zMDEuNzI2IDQwNy44NDMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNDUuODk5IDQwOS41ODcgVGQKLShkZXN0LCkgMjkuODg3OCBUagotMjI1LjgwNyAzOTcuNjMyIFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yOTUuODA1IDM5NS44ODggVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMDYuMDI2IDM5Ny42MzIgVGQKLShkZXN0TGVuLCkgNDcuODIwNSBUagotMjI1LjgwNyAzODUuNjc2IFRkCi0oY2hhcikgMjMuOTEwMiBUagotMjQ5LjcxOCAzODMuOTMzIFRkCi0oKikgNS45Nzc1NiBUagotMjkzLjg5MSAzODUuNjc2IFRkCi0oc291cmNlLCkgNDEuODQyOSBUagotMjI1LjgwNyAzNzMuNzIxIFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tODUyIFRKbQotKHNvdXJjZUxlbiwpIDU5Ljc3NTYgVGoKLTIyNS44MDcgMzYxLjc2NiBUZAotKGludCkgMTcuOTMyNyBUagotLTQ2ODYgVEptCi0oc21hbGwsKSAzNS44NjU0IFRqCi0yMjUuODA3IDM0OS44MTEgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00Njg2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMzM0LjI2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjQuMzA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTIuMzUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEF0dGVtcHRzKSAzNi41MzI5IFRqCi0tMzU4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNTkgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTM1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTggVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTM1OSBUSm0KLShpbikgNy43NTA5IFRqCi1bMSAwIDAgMSAyMjEuMjU5IDMxMi4zNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIxLjI1OSAtMzEyLjM1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIxLjI1OSAzMTIuMzUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNvdXJjZVswKSA0Ny44MjA1IFRqCi0tNjAwIFRKbQotKC4uKSAxMS45NTUxIFRqCi0tMTIwMCBUSm0KLShzb3VyY2VMZW4tMV0pIDcxLjczMDcgVGoKLVsxIDAgMCAxIDM3MC42OTggMzEyLjM1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzAuNjk4IC0zMTIuMzUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzQuMjY4IDMxMi4zNTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW50bykgMTUuNTAxOCBUagotLTM1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTkgVEptCi0oZGVzdGluYXRpb24pIDQzLjcyNTkgVGoKLS0zNTggVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0ODYuMjAyIDMxMi4zNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg2LjIwMiAtMzEyLjM1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDg2LjIwMiAzMTIuMzUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlc3RbMCkgMzUuODY1NCBUagotLTYwMCBUSm0KLSguLikgMTEuOTU1MSBUagotNzIgMjk4LjY1MyBUZAotKCopIDUuOTc3NTYgVGoKLTc3Ljk3NzYgMzAwLjM5NiBUZAotKGRlc3RMZW4tMV0pIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDEzNy43NTMgMzAwLjM5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuNzUzIC0zMDAuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzcuNzUzIDMwMC4zOTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTExMjMgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMzQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM0IFRKbQotKGRlc3RpbmF0aW9uKSA0My43MjU5IFRqCi0tMzM0IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTMzNCBUSm0KLShpcykgNi42NDUwNSBUagotLTMzNCBUSm0KLShiaWcpIDEyLjczMjIgVGoKLS0zMzQgVEptCi0oZW5vdWdoLCkgMzEuODIwNSBUagotWzEgMCAwIDEgMzEyLjU1NCAzMDAuMzk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMi41NTQgLTMwMC4zOTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMi41NTQgMjk4LjY1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi0zMTguNTMxIDMwMC4zOTYgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNjAuMzc0IDMwMC4zOTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYwLjM3NCAtMzAwLjM5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYzLjcwMSAzMDAuMzk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzM0IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTMzNCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzM0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMzMzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzM0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNCBUSm0KLSh1bmNvbXByZXNzZWQpIDU2Ljk5NiBUagotLTMzNCBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotNzIgMjg4LjQ0MSBUZAotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA4OS41MjczIDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODkuNTI3MyAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODkuNTI3MyAyODguNDQxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMTkuNDE1IDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5LjQxNSAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIyLjU1NiAyODguNDQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzE1IFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMTAxMiBUSm0KLShJZikgNi42MzUwOSBUagotLTMxNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTYgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTMxNSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvbicpIDEzLjI4MDEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTMxNiBUSm0KLShcMDAydCwpIDEwLjc5OTUgVGoKLVsxIDAgMCAxIDMxMy4zMjIgMjg4LjQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTMuMzIyIC0yODguNDQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTMuMzIyIDI4Ni42OTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMzE5LjMgMjg4LjQ0MSBUZAotKGRlc3RMZW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDM2MS4xNDMgMjg4LjQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjEuMTQzIC0yODguNDQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjQuMjg0IDI4OC40NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMTUgVEptCi0odW5jaGFuZ2VkLCkgNDUuNjQ4NiBUagotLTMzMiBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDQwLjU1MSAyODguNDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MC41NTEgLTI4OC40NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0MC41NTEgMjg4LjQ0MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PVVRCVUZGX0ZVTEwpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDUzMC4yMTUgMjg4LjQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzAuMjE1IC0yODguNDQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzMuMzU1IDI4OC40NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDI3Ni40ODYgVGQKLShyZXR1cm5lZC4pIDM1LjY4NiBUagotWzEgMCAwIDEgNzIgMjc2LjM4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjY2LjQyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjU0LjU2OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzb3VyY2UpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDEwNy44NjUgMjU0LjU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDcuODY1IC0yNTQuNTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTAuOTgxIDI1NC41NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMTMgVEptCi0oYXNzdW1lZCkgMzQuMzExMiBUagotLTMxMiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzEzIFRKbQotKGhvbGQpIDE3LjcxMzUgVGoKLS0zMTMgVEptCi0oYSkgNC40MjMzOSBUagotLTMxMyBUSm0KLShjb21wbGV0ZSkgMzYuNTIyOSBUagotWzEgMCAwIDEgMjM3LjA0IDI1NC41NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM3LjA0IC0yNTQuNTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzcuMDQgMjU0LjU2OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjY2LjkyOCAyNTQuNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Ni45MjggLTI1NC41NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3MC4wNDQgMjU0LjU2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0zMTMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxMiBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSAzNTMuNDQ2IDI1NC41NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUzLjQ0NiAtMjU0LjU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUzLjQ0NiAyNTQuNTY4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSA1MDguODYzIDI1NC41NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA4Ljg2MyAtMjU0LjU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjk3OCAyNTQuNTY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRyaWVzKSAxNy4xNTU2IFRqCi0tMzEzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDI0Mi42MTMgVGQKLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShlbnRpcmV0eSkgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI0MC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzMC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyMC42OTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG1lYW5pbmcpIDM0LjMxMTIgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0ocGFyYW1ldGVycykgNDMuNzA1OSBUagotWzEgMCAwIDEgMTk2LjYzMSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Ni42MzEgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Ni42MzEgMjIwLjY5NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzbWFsbCkgMjkuODg3OCBUagotWzEgMCAwIDEgMjI2LjUxOSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNi41MTkgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyOS4wMSAyMjAuNjk1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNDUuODg3IDIyMC42OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ1Ljg4NyAtMjIwLjY5NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ1Ljg4NyAyMjAuNjk1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyOTkuNjg1IDIyMC42OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk5LjY4NSAtMjIwLjY5NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk5LjY4NSAyMjAuNjk1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oc2VlKSAxMi43MjIyIFRqCi1bMSAwIDAgMSAzMTkuODc5IDIyMC42OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE5Ljg3OSAtMjIwLjY5NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE5Ljg3OSAyMjAuNjk1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NJbml0KSAxMTkuNTUxIFRqCi1bMSAwIDAgMSA0MzkuNDMxIDIyMC42OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM5LjQzMSAtMjIwLjY5NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM5LjQzMSAyMjAuNjk1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDIxOC41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwOC41NzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5OC43NzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmVjYXVzZSkgMzMuMTk1NCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNTAgVEptCi0ocmF0aW8pIDE4LjI2MTQgVGoKLS0yNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ5IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI0OSBUSm0KLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oa25vKSAxNC45NDM5IFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTI0OSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFkdikgMTQuMzg2IFRqCi0yNSBUSm0KLShhbmNlLCkgMjAuNzQyMSBUagotLTI0OSBUSm0KLSh0aGVyZSkgMTkuOTE1MiBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI0OSBUSm0KLShubykgOS45NjI2IFRqCi0tMjUwIFRKbQotKGVhc3kpIDE3LjcwMzUgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMjQ5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZ3VhcmFudGVlKSAzOC43MjQ2IFRqCi03MiAxODYuODIyIFRkCi0odGhhdCkgMTQuOTQzOSBUagotLTI4NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODcgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjg2IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTI4NyBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjg2IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjg2IFRKbQotKGJpZykgMTIuNzMyMiBUagotLTI4NyBUSm0KLShlbm91Z2guKSAzMS44MjA1IFRqCi0tODM4IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI4NyBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yODYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODcgVEptCi0oY291cnNlKSAyNi4wMDI0IFRqCi0tMjg2IFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI4NiBUSm0KLShhcnJhbmdlbWVudHMpIDUzLjY2ODUgVGoKLS0yODcgVEptCi0oaW4pIDcuNzUwOSBUagotLTI4NiBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjg3IFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yODYgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NiBUSm0KLShyZWNvcmQpIDI1LjQ0NDUgVGoKLS0yODcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg2IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yODcgVEptCi0ob2YpIDguMjk4ODUgVGoKLTcyIDE3NC44NjcgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yNTAgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN1Y2gpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHlvbmQpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHNjb3BlKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxNzIuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE2Mi43NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE1Mi45NDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDIyNy40MTcgMTUyLjk0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjcuNDE3IC0xNTIuOTQ5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuNTUzIDE1Mi45NDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTMxNSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zMTUgVEptCi0od3JpdGUpIDIwLjQ3MzEgVGoKLS0zMTQgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxNSBUSm0KLShhdCkgNy4xOTMgVGoKLS0zMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMTUgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHlvbmQpIDE5LjkyNTIgVGoKLVsxIDAgMCAxIDM2Mi40ODQgMTUyLjk0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjIuNDg0IC0xNTIuOTQ5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjIuNDg0IDE1Mi45NDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZGVzdFspIDI5Ljg4NzggVGoKLTM5Mi4zNzIgMTUxLjIwNiBUZAotKCopIDUuOTc3NTYgVGoKLTM5OC4zNDkgMTUyLjk0OSBUZAotKGRlc3RMZW5dKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0NDYuMTcgMTUyLjk0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDYuMTcgLTE1Mi45NDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0Ni4xNyAxNTIuOTQ5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMzEgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTMxNSBUSm0KLShpbikgNy43NTA5IFRqCi0tMzE1IFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0zMTQgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMTUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi03MiAxNDAuOTk0IFRkCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyXDAwM28pIDE4LjI2MTQgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxNDAuODk0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMzAuOTMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTkuMDc2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgMTE4Ljk3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTY4LjEyNDhdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjcpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMzEgMzEKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQuMzgzNiAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDQuNDYyIC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjAuOTYgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTguNDQ5IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk4LjQ0OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk4LjQ0OSA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDYuMjY5IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTE1LjAzNjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTI0OC43MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjI3LjE0OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIyMy41NjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0NPTkZJR19FUlJPUikgODkuNjYzNCBUagotOTguNDg3OSA2OTkuNjc2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpYnJhcnkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obWlzLWNvbXBpbGVkKSA3MS43MzA3IFRqCi05MCA2ODcuNzIxIFRkCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjc1Ljc2NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGRlc3QpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShkZXN0TGVuKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLTk4LjQ4NzkgNjYzLjgxMSBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNtYWxsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oJiYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc21hbGwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oIT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oMSkgNS45Nzc1NiBUagotOTguNDg3OSA2NTEuODU2IFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oNCkgNS45Nzc1NiBUagotOTAgNjM5LjkgVGQKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLTk4LjQ4NzkgNjI3Ljk0NSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGluc3VmZmljaWVudCkgNzEuNzMwNyBUagotLTQyNiBUSm0KLShtZW1vcnkpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYXZhaWxhYmxlKSA1My43OTggVGoKLTkwIDYxNS45OSBUZAotKEJaX09VVEJVRkZfRlVMTCkgODkuNjYzNCBUagotOTguNDg3OSA2MDQuMDM1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShleGNlZWRzKSA0MS44NDI5IFRqCi0zNDEuNjU1IDYwMi4yOTEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNDcuNjMzIDYwNC4wMzUgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi05MCA1OTIuMDggVGQKLShCWl9EQVRBX0VSUk9SKSA3Ny43MDgzIFRqCi05OC40ODc5IDU4MC4xMjUgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50ZWdyaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRldGVjdGVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLTkwIDU2OC4xNjkgVGQKLShCWl9EQVRBX0VSUk9SX01BR0lDKSAxMTMuNTc0IFRqCi05OC40ODc5IDU1Ni4yMTQgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGRvZXNuJ3QpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oYmVnaW4pIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ocmlnaHQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0obWFnaWMpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oYnl0ZXMpIDI5Ljg4NzggVGoKLTkwIDU0NC4yNTkgVGQKLShCWl9VTkVYUEVDVEVEX0VPRikgMTAxLjYxOSBUagotOTguNDg3OSA1MzIuMzA0IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShlbmRzKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHVuZXhwZWN0ZWRseSkgNzEuNzMwNyBUagotOTAgNTIwLjM0OSBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDUwOC4zOTQgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNDkyLjg1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4Mi44ODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ1OC4wOTkgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuNi4pIDM0LjQ1ODQgVGoKLVsxIDAgMCAxIDExMi4yMDEgNDU4LjA5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTIuMjAxIC00NTguMDk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTIuMjAxIDQ1OC4wOTkgVGQKLS9GMzkyXzAgMjAuNjU4NSBUZgotKHpsaWIpIDQ5LjU4MDQgVGoKLVsxIDAgMCAxIDE2MS43ODEgNDU4LjA5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjEuNzgxIC00NTguMDk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuNTI0IDQ1OC4wOTkgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKGNvbXBhdGliaWxpdHkpIDEyNy40MjIgVGoKLS0yNzggVEptCi0oZnVuY3Rpb25zKSA5Mi45NjMzIFRqCi1bMSAwIDAgMSA3MiA0NTMuODIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDMuODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzNi4xODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvc2hpb2thKSAzMC45OTM2IFRqCi0tNjA0IFRKbQotKFRzdW5lbykgMjkuMzI5OSBUagotLTYwNCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS02MDQgVEptCi0oY29udHJpYikgMjguMjI0IFRqCi0yMCBUSm0KLSh1dGVkKSAxNy4xNTU2IFRqCi0tNjA0IFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTYwNCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS02MDQgVEptCi0odG8pIDcuNzUwOSBUagotLTYwNCBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS02MDQgVEptCi0oYmV0dGVyKSAyMi42ODQ4IFRqCi1bMSAwIDAgMSAzNTYuMzQ3IDQzNi4xODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzU2LjM0NyAtNDM2LjE4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU2LjM0NyA0MzYuMTgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHpsaWIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDM4MC4yNTcgNDM2LjE4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODAuMjU3IC00MzYuMTgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODYuMjc1IDQzNi4xODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcGF0aWJpbGl0eSkgNTMuMTQwNSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTEzNzIgVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS02MDQgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tNjA0IFRKbQotKGFyZSkgMTIuMTY0MyBUagotWzEgMCAwIDEgNzIgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDI0LjIyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpvcGVuKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMxLjc3NiAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMxLjc3NiA0MjQuMjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE0NC4yODMgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDQuMjgzIC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDQuMjgzIDQyNC4yMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6cmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjA0LjA1OSA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC4wNTkgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC4wNTkgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMTYuNTY2IDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjU2NiAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE2LjU2NiA0MjQuMjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iendyaXRlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAyODIuMzIgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODIuMzIgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Mi4zMiA0MjQuMjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI5NC44MjcgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTQuODI3IC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTQuODI3IDQyNC4yMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Zmx1c2gpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDM2MC41ODEgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjAuNTgxIC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjAuNTgxIDQyNC4yMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzczLjA4OCA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3My4wODggLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3My4wODggNDI0LjIyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpjbG9zZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDM4Ljg0MiA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzOC44NDIgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzOC44NDIgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0NTEuMzQ5IDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDUxLjM0OSAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDUxLjM0OSA0MjQuMjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemVycm9yKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA1MTcuMTAyIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE3LjEwMiAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI1LjYxNCA0MjQuMjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA3MiA0MTIuMjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MTIuMjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MTIuMjcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemxpYlZlcnNpb24pIDk1LjY0MSBUagotWzEgMCAwIDEgMTY3LjY0MSA0MTIuMjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Ny42NDEgLTQxMi4yNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny42NDEgNDEyLjI3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTQyMCBUSm0KLShUaGVzKSAxOS4zNjczIFRqCi0xIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zODQgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMzgzIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM4MyBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zODMgVEptCi0oXCh5ZXRcKSkgMTguODA5NCBUagotLTM4NCBUSm0KLShvZikgOC4yOTg4NSBUagotMjUgVEptCi0oXDAwMmNpYWxseSkgMjcuNjc2MSBUagotLTM4MyBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMzgzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzgzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4NCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTQxOSBUSm0KLShJZikgNi42MzUwOSBUagotLTM4MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTM4NCBUSm0KLShicmVhaywpIDI0LjYxNzYgVGoKLS00MTYgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzgzIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTM4NCBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA0MDAuMzE2IFRkCi0oaykgNC45ODEzIFRqCi0xMCBUSm0KLShlZXApIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHBpZWNlcy4pIDI3LjM4NzIgVGoKLS02MjAgVEptCi0oTmUpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ0aGVsZXNzLCkgMzcuMzQ5OCBUagotLTI1MCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKHRoaW5rKSAyMC40ODMxIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmspIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0ob2suKSAxMi40NTMzIFRqCi1bMSAwIDAgMSA3MiAzOTguMTU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNDguODE2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA0Ny44MjA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNDQuMjM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM4OC43OTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDM4OC43OTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odHlwZWRlZikgNDEuODQyOSBUagotLTQyNiBUSm0KLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaRklMRTspIDQxLjg0MjkgVGoKLTkwIDM2NC44ODQgVGQKLShjb25zdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShjaGFyKSAyMy45MTAyIFRqCi0xNTIuMjg2IDM2My4xNCBUZAotKCopIDUuOTc3NTYgVGoKLTE2Mi41MDggMzY0Ljg4NCBUZAotKEJaMl9iemxpYlZlcnNpb24pIDk1LjY0MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMzQ5LjM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMzkuMzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMjcuNDI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybnMpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShzdHJpbmcpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0oaW5kaWNhdGluZykgMzkuODUwNCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbi4pIDI2LjgzOTIgVGoKLVsxIDAgMCAxIDcyIDMyNS4yNjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNi44NjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzE1LjkwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzE1LjkwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEzMC4xMDkgMzE0LjE1OSBUZAotKCopIDUuOTc3NTYgVGoKLTE0MC4zMzEgMzE1LjkwMiBUZAotKEJaMl9iem9wZW4pIDU5Ljc3NTYgVGoKLS04NTIgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oY29uc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMjgxLjEwMyAzMTQuMTU5IFRkCi0oKikgNS45Nzc1NiBUagotMjg3LjA4IDMxNS45MDIgVGQKLShwYXRoLCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShjb25zdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShjaGFyKSAyMy45MTAyIFRqCi0zODMuNDk4IDMxNC4xNTkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zODkuNDc2IDMxNS45MDIgVGQKLShtb2RlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTAgMzAzLjk0NyBUZAotKEJaRklMRSkgMzUuODY1NCBUagotMTMwLjEwOSAzMDIuMjA0IFRkCi0oKikgNS45Nzc1NiBUagotMTQwLjMzMSAzMDMuOTQ3IFRkCi0oQloyX2J6ZG9wZW4pIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tMzQwOCBUSm0KLShmZCwpIDE3LjkzMjcgVGoKLS0xNzA0IFRKbQotKGNvbnN0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGNoYXIpIDIzLjkxMDIgVGoKLTM2OS42MjkgMzAyLjIwNCBUZAotKCopIDUuOTc3NTYgVGoKLTM3NS42MDcgMzAzLjk0NyBUZAotKG1vZGUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAyODguNDA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI3OC40NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI2Ni40ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oT3BlbnMpIDI1LjQ1NDQgVGoKLS0yNDMgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMTA2LjcxMyAyNjYuNDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNi43MTMgLTI2Ni40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNi43MTMgMjY2LjQ4OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnoyKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxMzAuNjI0IDI2Ni40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMwLjYyNCAtMjY2LjQ4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMzLjA0MSAyNjYuNDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI0MyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNDIgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTI0MyBUSm0KLShvcikgOC4yOTg4NSBUagotLTI0MyBUSm0KLSh3cml0aW5nLCkgMzEuMjcyNiBUagotLTI0NCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjQzIFRKbQotKGVpKSA3LjE5MyBUagotMSBUSm0KLSh0aGVyKSAxNS40OTE4IFRqCi0tMjQzIFRKbQotKGl0cykgOS40MTQ2NiBUagotLTI0MyBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS0yNDIgVEptCi0obykgNC45ODEzIFRqCi0tMSBUSm0KLShyKSAzLjMxNzU1IFRqCi0tMjQyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNDMgVEptCi0ocHJlLWUpIDIwLjQ2MzIgVGoKLTE1IFRKbQotKHhpc3RpbmcpIDI3LjEyODIgVGoKLS0yNDMgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjQyIFRKbQotKGRlc2NyaXB0b3IpIDM5Ljg0MDQgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MTUgVEptCi0oQW5hbG9nb3VzKSA0My4xNjc5IFRqCi0tMjQzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDUxMC4xMTIgMjY2LjQ4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTAuMTEyIC0yNjYuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuMTEyIDI2Ni40ODggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZm9wZW4pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDU0MCAyNjYuNDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMjY2LjQ4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjU0LjUzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgODguODc2NyAyNTQuNTMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg4Ljg3NjcgLTI1NC41MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg4Ljg3NjcgMjU0LjUzMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZG9wZW4pIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDEyNC43NDIgMjU0LjUzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjQuNzQyIC0yNTQuNTMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjQuNzQyIDI1NC41MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjUyLjk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMzUuODY1NSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMyLjI3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0yNDMuNjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAyNDMuNjMzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShCWjJfYnpyZWFkKSA1OS43NzU2IFRqCi0tODUyIFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMjI2LjUyOCAyNDEuODkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMzYuNzQ5IDI0My42MzMgVGQKLShiLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2b2lkKSAyMy45MTAyIFRqCi0yNzYuODU5IDI0MS44OSBUZAotKCopIDUuOTc3NTYgVGoKLTI4Ny4wOCAyNDMuNjMzIFRkCi0oYnVmLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGVuKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTAgMjMxLjY3OCBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShCWjJfYnp3cml0ZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTIyOC4yNjEgMjI5LjkzNSBUZAotKCopIDUuOTc3NTYgVGoKLTIzOC40ODMgMjMxLjY3OCBUZAotKGIsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZvaWQpIDIzLjkxMDIgVGoKLTI3OC41OTIgMjI5LjkzNSBUZAotKCopIDUuOTc3NTYgVGoKLTI4OC44MTQgMjMxLjY3OCBUZAotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDIxNi4xMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjA2LjE3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTk0LjIxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWFkcy93cml0ZXMpIDUxLjQ2NjggVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShmcm9tL3RvKSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91c2x5KSAyOS4zMzk5IFRqCi0tMjUwIFRKbQotKG9wZW5lZCkgMjguNzcyIFRqCi1bMSAwIDAgMSAyNTkuOTAzIDE5NC4yMTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU5LjkwMyAtMTk0LjIxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU5LjkwMyAxOTQuMjE5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaRklMRSkgMzUuODY1NCBUagotWzEgMCAwIDEgMjk1Ljc2OSAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NS43NjkgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NS43NjkgMTk0LjIxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNTAwIFRKbQotKEFuYWxvZ291cykgNDMuMTY3OSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAzNTkuMTQxIDE5NC4yMTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzU5LjE0MSAtMTk0LjIxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU5LjE0MSAxOTQuMjE5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZyZWFkKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzODkuMDI5IDE5NC4yMTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg5LjAyOSAtMTk0LjIxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkxLjUxOSAxOTQuMjE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MDguMzk2IDE5NC4yMTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA4LjM5NiAtMTk0LjIxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA4LjM5NiAxOTQuMjE5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZ3cml0ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNDQ0LjI2MSAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4yNjEgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0NC4yNjEgMTk0LjIxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxOTIuMDYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTE4Mi42OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDE4Mi42OTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tODUyIFRKbQotKEJaMl9iemZsdXNoKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMjMyLjUwNSAxODAuOTU0IFRkCi0oKikgNS45Nzc1NiBUagotMjQyLjcyNyAxODIuNjk3IFRkCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDE3MC43NDIgVGQKLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9iemNsb3NlKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMjM0LjIzOSAxNjguOTk4IFRkCi0oKikgNS45Nzc1NiBUagotMjQ0LjQ2IDE3MC43NDIgVGQKLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMTU1LjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQ1LjIzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTMzLjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGbHVzaGVzL2Nsb3NlcykgNTcuNTYzOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi1bMSAwIDAgMSAxMzguOTY4IDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM4Ljk2OCAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM4Ljk2OCAxMzMuMjgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaRklMRSkgMzUuODY1NCBUagotWzEgMCAwIDEgMTc0LjgzMyAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC44MzMgLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3NC44MzMgMTMzLjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNzkuODE1IDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc5LjgxNSAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5LjgxNSAxMzMuMjgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemZsdXNoKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAyNDUuNTY4IDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ1LjU2OCAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ4LjA1OSAxMzMuMjgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKGFjdHVhbGx5KSAzMS41NDE2IFRqCi0tMjUwIFRKbQotKGRvKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHl0aGluZy4pIDI3Ljk1NTEgVGoKLS02MjAgVEptCi0oQW5hbG9nb3VzKSA0My4xNjc5IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDQyNS40NzIgMTMzLjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjUuNDcyIC0xMzMuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjUuNDcyIDEzMy4yODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmZsdXNoKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0NjEuMzM4IDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYxLjMzOCAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDYzLjgyOCAxMzMuMjgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0ODAuNzA1IDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDgwLjcwNSAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgwLjcwNSAxMzMuMjgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZjbG9zZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNTE2LjU3IDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE2LjU3IC0xMzMuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTYuNTcgMTMzLjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMzEuMTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTEyMS43NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDEyMS43NjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oY29uc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMTUyLjI4NiAxMjAuMDE3IFRkCi0oKikgNS45Nzc1NiBUagotMTYyLjUwOCAxMjEuNzYxIFRkCi0oQloyX2J6ZXJyb3IpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0yODIuODM2IDEyMC4wMTcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yODguODE0IDEyMS43NjEgVGQKLShiLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTMyNy4xOSAxMjAuMDE3IFRkCi0oKikgNS45Nzc1NiBUagotMzMzLjE2NyAxMjEuNzYxIFRkCi0oZXJybnVtKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA3MiAxMDYuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTk2LjI1NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDg0LjMwMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJucykgMzAuOTkzNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHN0cmluZykgMjIuNjk0OCBUagotLTI1MCBUSm0KLShkZXNjcmliaW5nKSA0MS41MDQyIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHJlY2VudCkgMjQuMzM4NiBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShzdGF0dXMpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDMwMy44NTggODQuMzAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDMuODU4IC04NC4zMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDMuODU4IDg0LjMwMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYikgNS45Nzc1NiBUagotWzEgMCAwIDEgMzA5LjgzNSA4NC4zMDExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwOS44MzUgLTg0LjMwMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwOS44MzUgODQuMzAxMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oc2V0cykgMTQuOTQzOSBUagotWzEgMCAwIDEgMzY3LjY2OCA4NC4zMDExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2Ny42NjggLTg0LjMwMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2Ny42NjggODIuNTU3NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi0zNzMuNjQ1IDg0LjMwMTEgVGQKLShlcnJudW0pIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQwOS41MTEgODQuMzAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDkuNTExIC04NC4zMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTIuMDAxIDg0LjMwMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNTAgVEptCi0obnVtZXJpY2FsKSAzOS44NDA0IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZS4pIDE5LjA4ODMgVGoKLVsxIDAgMCAxIDcyIDgyLjE0NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4zMjk4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0LjM4MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk1LjczNCAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM2LjMwNyA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI4KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1NS4xNjEgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTE1LjAzNjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDMyIDMyCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzA0LjkzIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgzLjcuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFVzaW5nKSA1Ny4zODkzIFRqCi0tMjc4IFRKbQotKHRoZSkgMzAuOTg3NyBUagotLTI3OCBUSm0KLShsaWJyYXIpIDUxLjY2NjkgVGoKLS0xMCBUSm0KLSh5KSAxMS40ODYxIFRqCi0tMjc4IFRKbQotKGluKSAxOC4zNjU0IFRqCi0tMjc4IFRKbQotKGEpIDExLjQ4NjEgVGoKLVsxIDAgMCAxIDMyMi41MDEgNzA0LjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMi41MDEgLTcwNC45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIyLjUwMSA3MDQuOTMgVGQKLS9GMzkyXzAgMjAuNjU4NSBUZgotKHN0ZGlvKSA2MS45NzU1IFRqCi1bMSAwIDAgMSAzODQuNDc3IDcwNC45M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODQuNDc3IC03MDQuOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4NC40NzcgNzA0LjkzIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgtZnJlZSkgNDQuNzY3IFRqCi03MiA2ODAuMTM5IFRkCi0oZW4pIDI0LjEwODUgVGoKLTQwIFRKbQotKHZpcikgMjUuMjY1MyBUagotMjAgVEptCi0ob25tZW50KSA3NC41OTc4IFRqCi1bMSAwIDAgMSA3MiA2NzkuODgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY2OS45ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY0OS41ODMgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNy4xLikgNDMuMDcyOSBUagotLTI3OCBUSm0KLShHZXR0aW5nKSA2MC4yNTM5IFRqCi0tMjc4IFRKbQotKHJpZCkgMjIuMDAxMyBUagotLTI3OCBUSm0KLShvZikgMTYuMjUxMyBUagotWzEgMCAwIDEgMjMyLjcyMSA2NDkuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMi43MjEgLTY0OS41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzMi43MjEgNjQ5LjU4MyBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oc3RkaW8pIDUxLjY0NjIgVGoKLVsxIDAgMCAxIDI4NC4zNjcgNjQ5LjU4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuMzY3IC0zLjgzMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjM1Ljg1NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjI3LjczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluKSA4LjI5ODg1IFRqCi0tMzE5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMTkgVEptCi0oZGVlcGx5KSAyNi41NjAzIFRqCi0tMzE5IFRKbQotKGVtYmVkZGVkKSA0MC45NDYzIFRqCi0tMzE5IFRKbQotKGFwcGxpY2F0aW9uLCkgNDYuNzY0NCBUagotLTMzNiBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zMTkgVEptCi0obWlnaHQpIDIzLjI1MjcgVGoKLS0zMTkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTMxOSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzE5IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTMxOSBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0zMTkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE5IFRKbQotKG1lbW9yeS10by1tZW1vcnkpIDgwLjc5NjcgVGoKLS0zMTkgVEptCi0oZnVuY3Rpb25zLikgMzkuNTcxNCBUagotLTEwMzUgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzE5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTMxOSBUSm0KLShkbykgOS45NjI2IFRqCi0tMzE5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotNzIgNjE1Ljc3NSBUZAotKGNvbikgMTQuMzg2IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuaWVudGx5KSAzMi4wOTk1IFRqCi0tMzI3IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0zMjcgVEptCi0oY29tcGlsaW5nKSA0MC40MDgzIFRqCi0tMzI3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyNyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzI3IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMjggVEptCi0ocHJlcHJvY2VzKSAzOC43MjQ2IFRqCi0xIFRKbQotKHNvcikgMTIuMTc0MyBUagotLTMyOCBUSm0KLShzeW1ib2wpIDI5LjMzOTkgVGoKLVsxIDAgMCAxIDMzNi4wNDYgNjE1Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzYuMDQ2IC02MTUuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzYuMDQ2IDYxNS43NzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTk9fU1RESU8pIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQwMS43OTkgNjE1Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDEuNzk5IC02MTUuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDUuMDU3IDYxNS43NzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGVcMDAybmVkLikgMzEuODIwNSBUagotLTEwODMgVEptCi0oRG9pbmcpIDI0LjkwNjUgVGoKLS0zMjcgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMzI3IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0zMjcgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzI3IFRKbQotKGEpIDQuNDIzMzkgVGoKLTcyIDYwMy44MTkgVGQKLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGNvbnRhaW5pbmcpIDQyLjA2MjEgVGoKLS0yNTAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdpbmcpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0oZWlnaHQpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zOikgMzkuODUwNCBUagotWzEgMCAwIDEgNzIgNjAxLjY2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTEuNzY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODEuOTY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgMTc5LjU5NiA1ODEuOTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3OS41OTYgLTU4MS45NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3OS41OTYgNTgxLjk2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxOTkuMDc5IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk5LjA3OSAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk5LjA3OSA1ODEuOTY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyODIuNzY1IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgyLjc2NSAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjgyLjc2NSA1ODEuOTY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMwMi4yNDcgNTgxLjk2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDIuMjQ3IC01ODEuOTY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDIuMjQ3IDU4MS45NjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDQwMy44NjYgNTgxLjk2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0LjA5MTUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTcuOTU4IC01ODEuOTY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTcuOTU4IDU4MS45NjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDUzNy41MDkgNTgxLjk2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzcuNTA5IC01ODEuOTY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzcuNTA5IDU4MS45NjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTcwLjAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTcwLjAxMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE2Ny42NDEgNTcwLjAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNjQxIC01NzAuMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuNjQxIDU3MC4wMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTcyLjE0NCA1NzAuMDExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Mi4xNDQgLTU3MC4wMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Mi4xNDQgNTcwLjAxMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzRW5kKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSAyODUuNzE5IDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODcuNjExIC01NzAuMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODcuNjExIDU3MC4wMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkNvbXByZXNzKSAxNDMuNDYxIFRqCi1bMSAwIDAgMSA0MzEuMDczIDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMxLjA3MyAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMxLjA3MyA1NzAuMDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQzNS41NzcgNTcwLjAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzUuNTc3IC01NzAuMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzUuNTc3IDU3MC4wMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDU5MC45OTQgNTcwLjAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTguOTk0IC0xLjUzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5ODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU1OC41NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0OC4xNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oV2hlbikgMjMuNzkwNyBUagotLTI1MCBUSm0KLShjb21waWxlZCkgMzcuMDgwOCBUagotLTI1MCBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0odGhpcywpIDE2Ljg4NjYgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oaWdub3JlKSAyNS40NTQ0IFRqCi1bMSAwIDAgMSAyNzIuNTI2IDU0OC4xNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjUyNiAtNTQ4LjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjcyLjUyNiA1NDguMTU4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAzMjYuMzI0IDU0OC4xNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI2LjMyNCAtNTQ4LjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI4LjgxNSA1NDguMTU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNldHRpbmdzLikgMzIuOTM2NCBUagotWzEgMCAwIDEgNzIgNTQ2LjAwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MzYuMTAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTcuNjAxIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjcuMi4pIDQzLjA3MjkgVGoKLS0yNzggVEptCi0oQ3JpdGljYWwpIDU4LjM2MDIgVGoKLS0yNzggVEptCi0oZXJyKSAyMi45NjUzIFRqCi0yMCBUSm0KLShvcikgMTcuMjE1NCBUagotLTI3OCBUSm0KLShoYW5kbGluZykgNzEuNzM2NiBUagotWzEgMCAwIDEgNzIgNTEzLjc3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MDMuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTUuNzQ4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAxMTkuODIxIDQ5NS43NDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5LjgyMSAtNDk1Ljc0OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI0LjUyOSA0OTUuNzQ4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbnRhaW5zKSAzMy4yMDUzIFRqCi0tNDczIFRKbQotKGEpIDQuNDIzMzkgVGoKLS00NzIgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tNDczIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDcyIFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tNDczIFRKbQotKGFzc2VydGlvbikgMzUuNDE3IFRqCi0tNDcyIFRKbQotKGNoZWNrcykgMjcuMTA4MiBUagotLTQ3MyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTQ3MiBUSm0KLShzaG91bGQsKSAyOS4wNjA5IFRqCi0tNTI5IFRKbQotKG5lZWRsZXNzKSAzMy43NTMzIFRqCi0tNDcyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00NzMgVEptCi0oc2F5KSAxMy4yODAxIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNTI4IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tNDczIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tNDcyIFRKbQotKGFjdGkpIDE0LjM4NiBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhdGVkLikgMTkuMDg4MyBUagotNzIgNDgzLjc5MyBUZAotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS01MzMgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS00NzYgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS00NzYgVEptCi0oYXNzZXJ0aW9uKSAzNS40MTcgVGoKLS00NzYgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tNDc2IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpbCwpIDEyLjQ1MzMgVGoKLS01MzIgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odmlvdXIpIDIxLjAzMSBUagotLTQ3NiBUSm0KLShkZXBlbmRzKSAzMi42NDc0IFRqCi0tNDc2IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS00NzYgVEptCi0od2hldGhlcikgMzIuMDg5NSBUagotLTQ3NiBUSm0KLShvcikgOC4yOTg4NSBUagotLTQ3NyBUSm0KLShub3QpIDEyLjczMjIgVGoKLS00NzYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDc2IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS00NzYgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tNDc2IFRKbQotKGNvbXBpbGVkKSAzNy4wODA4IFRqCi0tNDc2IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDcyIDQ3MS44MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ3MS44MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ3MS44MzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTk9fU1RESU8pIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDEzNy43NTMgNDcxLjgzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuNzUzIC00NzEuODM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDAuMjQ0IDQ3MS44MzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2V0LikgMTMuNTU5MSBUagotWzEgMCAwIDEgNzIgNDcwLjUyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjAuNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ0OS45ODUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShub3JtYWwpIDI4LjIyNCBUagotLTI1MCBUSm0KLShjb21waWxlLCkgMzQuNTkwMSBUagotLTI1MCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLShhc3NlcnRpb24pIDM1LjQxNyBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWx1cmUpIDIyLjY4NDggVGoKLS0yNTAgVEptCi0oeWllbGRzKSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShtZXNzYWdlOikgMzYuNTIyOSBUagotWzEgMCAwIDEgNzIgNDQ3LjgyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MzcuOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyOC4xMzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnppcDIvbGliYnppcDI6KSA2MC4zMzM1IFRqCi0tMzEwIFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI1MCBUSm0KLShOLikgOS42ODM2NSBUagotWzEgMCAwIDEgNzIgNDI1Ljk3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MTYuMDc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MDYuMjc4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0zMzIgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMzEgVEptCi0oYSkgNC40MjMzOSBUagotLTMzMiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLS0zMzIgVEptCi0oaW4pIDcuNzUwOSBUagotLTMzMSBUSm0KLShiemlwMi9saWJiemlwMiwpIDYwLjA1NDYgVGoKLS0zNTIgVEptCi0oMS4wLjUpIDE5LjkyNTIgVGoKLS0zMzIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMzIgVEptCi0oMTApIDkuOTYyNiBUagotLTMzMiBUSm0KLShEZWNlbWJlcikgNDAuOTM2MyBUagotLTMzMSBUSm0KLSgyMDA3LikgMjIuNDE1OSBUagotLTU1NSBUSm0KLShQbGVhc2UpIDI1LjQ1NDQgVGoKLS0zMzIgVEptCi0ocmVwb3J0KSAyMy43OTA3IFRqCi0tMzMyIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzMxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMzIgVEptCi0obWUpIDEyLjE3NDMgVGoKLS0zMzIgVEptCi0oYXQ6KSA5Ljk2MjYgVGoKLS00NzMgVEptCi0oanNlKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJkQGJ6aXAub3IpIDQ5Ljg0MjkgVGoKLTE4IFRKbQotKGcuKSA3LjQ3MTk1IFRqCi0tMTExMCBUSm0KLShJZikgNi42MzUwOSBUagotLTMzMiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLTcyIDM5NC4zMjMgVGQKLShoYXBwZW5lZCkgMzguMTc2NyBUagotLTI5NyBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0yOTggVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjk3IFRKbQotKHdlcmUpIDE5LjM1NzMgVGoKLS0yOTcgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI5NyBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yOTggVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTI5NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI5NyBUSm0KLSh1c2VzKSAxNy4xNTU2IFRqCi0tMjk3IFRKbQotKGxpYmJ6aXAyKSAzMi42NTc0IFRqCi0tMjk4IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjk3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTcgVEptCi0oY29tcG9uZW50LCkgNDYuNzY0NCBUagotLTMwOSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTggVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjk3IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yOTcgVEptCi0ocmVwb3J0KSAyMy43OTA3IFRqCi0tMjk3IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI5OCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLTcyIDM4Mi4zNjggVGQKLSh0bykgNy43NTA5IFRqCi0tMjY0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NCBUSm0KLShhdXRob3JcKHNcKSkgMzUuOTY1IFRqCi0tMjY0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY0IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNjQgVEptCi0ocHJvZ3JhbS4pIDM2LjI0MzkgVGoKLS03MDMgVEptCi0oUGxlYXNlKSAyNS40NTQ0IFRqCi0tMjY0IFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI2NCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI2NCBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oZm9ydCkgMTQuMzg2IFRqCi0tMjY0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjQgVEptCi0ocmVwb3J0KSAyMy43OTA3IFRqCi0tMjYzIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2NCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnOykgMTIuNzMyMiBUagotLTI3MSBUSm0KLSh0aW1lbHkpIDI1LjQ2NDQgVGoKLS0yNjQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjQgVEptCi0oYWNjdXJhdGUpIDMzLjE4NTQgVGoKLS0yNjQgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMjY0IFRKbQotKHJlcG9ydHMpIDI3LjY2NjEgVGoKLS0yNjQgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbnR1YWxseSkgMzIuMDk5NSBUagotNzIgMzcwLjQxMyBUZAotKGxlYWQpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShoaWdoZXIpIDI1LjQ1NDQgVGoKLS0yNTAgVEptCi0ocXVhbGl0eSkgMjcuNjc2MSBUagotLTI1MCBUSm0KLShzb2Z0dykgMjIuMTM2OSBUagotMTAgVEptCi0oYXJlLikgMTQuNjU1IFRqCi0tNjIwIFRKbQotKFRoYW5rcy4pIDMxLjgyMDUgVGoKLS02MjAgVEptCi0oSnVsaWFuKSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKFNlKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmQsKSAxNS4yMTI5IFRqCi0tMjUwIFRKbQotKDEwKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oRGVjZW1iZXIpIDQwLjkzNjMgVGoKLS0yNTAgVEptCi0oMjAwNy4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDcyIDM2OC4yNTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjgwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNDguNTU3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMzguNzU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdoZXJlKSAyNC4zMzg2IFRqCi1bMSAwIDAgMSA5OC44MzEyIDMzOC43NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTguODMxMiAtMzM4Ljc1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTguODMxMiAzMzguNzU4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE4pIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDEwNC44MDkgMzM4Ljc1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDQuODA5IC0zMzguNzU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDcuMzAyIDMzOC43NTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUxIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjIxIFRKbQotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSAyMzAuODEgMzM4Ljc1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzAuODEgLTMzOC43NThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzMC44MSAzMzguNzU4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE4pIDUuOTc3NTYgVGoKLS02MDAgVEptCi0oPT0pIDExLjk1NTEgVGoKLS02MDAgVEptCi0oMTAwNykgMjMuOTEwMiBUagotWzEgMCAwIDEgMjg0LjYwOCAzMzguNzU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4NC42MDggLTMzOC43NThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NC42MDggMzM4Ljc1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yNTEgVEptCi0ocHJpbnRzKSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dHJhKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKHRlKSA3LjE5MyBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhZHZpc2luZykgMzMuNzYzMyBUagotLTI1MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocmVhZGVyKSAyNC44ODY2IFRqCi0tMjUwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odW5yZWxpYWJsZSkgMzkuODQwNCBUagotNzIgMzI2LjgwMyBUZAotKG1lbW9yeSkgMzMuMjA1MyBUagotLTQyNSBUSm0KLShpcykgNi42NDUwNSBUagotLTQyNCBUSm0KLShvZnRlbikgMjAuNDczMSBUagotLTQyNSBUSm0KLShhc3NvY2lhdGVkKSA0MC45NDYzIFRqCi0tNDI1IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS00MjQgVEptCi0oaW50ZXJuYWwpIDMwLjQzNTcgVGoKLS00MjUgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS00MjQgVEptCi0oMTAwNy4pIDIyLjQxNTkgVGoKLS04MzQgVEptCi0oXChUaGlzKSAyMS4wMzEgVGoKLS00MjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS00MjUgVEptCi0oYSkgNC40MjMzOSBUagotLTQyNCBUSm0KLShmcmVxdWVudGx5LW9ic2VydikgNzAuODI0MSBUagotMTUgVEptCi0oZWQtcGhlbm9tZW5vbikgNjQuMTg5IFRqCi0tNDI1IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS00MjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLTcyIDMxNC44NDggVGQKLSgxLjAuMC8xLjAuMVwpLikgNDguNDI4MiBUagotWzEgMCAwIDEgNzIgMzEzLjA2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMDMuMTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyOTIuOTk1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGV4aXRcKDNcKSkgNDEuODQyOSBUagotWzEgMCAwIDEgMTEzLjg0MyAyOTIuOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTI5Mi45OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNi4zMzQgMjkyLjk5NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLSh0aGVuKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGNhbGxlZC4pIDI2LjI4MTMgVGoKLVsxIDAgMCAxIDcyIDI5MS44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5ODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI4Mi4wMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI3MS4xNDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgOTUuMDkzMyAyNzEuMTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk1LjA5MzMgLTI3MS4xNDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk1LjA5MzMgMjcxLjE0MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzdGRpbykgMjkuODg3OCBUagotWzEgMCAwIDEgMTI0Ljk4MSAyNzEuMTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNC45ODEgLTI3MS4xNDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNC45ODEgMjcxLjE0MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgtZnJlZSkgMTguNzk5NCBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGFzc2VydGlvbikgMzUuNDE3IFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpbHVyZXMpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0ocmVzdWx0KSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9uKSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGRlY2xhcmVkKSAzMy43NDMzIFRqCi0tMjUwIFRKbQotKGFzOikgMTEuMDY4NCBUagotWzEgMCAwIDEgNzIgMjY4Ljk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0yNTkuNjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI1OS42MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShleHRlcm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShiel9pbnRlcm5hbF9lcnJvcikgMTAxLjYxOSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZXJyY29kZSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDI0NC4wNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNDg0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM0LjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMjIuMjI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShyZWxlKSAxNC45MzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHBhc3NlZCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHBhcmFtZXRlcikgMzkuODMwNSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTYyMCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb24uKSAzNS42OTYgVGoKLVsxIDAgMCAxIDcyIDIyMC4wNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjEwLjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMDAuMzcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluKSA4LjI5ODg1IFRqCi0tMjk0IFRKbQotKGVpdGhlcikgMjIuNjg0OCBUagotLTI5NCBUSm0KLShjYXNlLCkgMTkuNjM2MyBUagotLTMwNiBUSm0KLShvbmNlKSAxOC44MDk0IFRqCi0tMjk0IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjk0IFRKbQotKGFzc2VydGlvbikgMzUuNDE3IFRqCi0tMjk0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpbHVyZSkgMjIuNjg0OCBUagotLTI5NCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yOTUgVEptCi0ob2NjdXJyZWQsKSAzNy4zMzk4IFRqCi0tMzA1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDMwNi41NDEgMjAwLjM3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDYuNTQxIC0yMDAuMzcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDYuNTQxIDIwMC4zNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLVsxIDAgMCAxIDM2MC4zMzkgMjAwLjM3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjAuMzM5IC0yMDAuMzcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjMuMjcxIDIwMC4zNzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmVjb3JkcykgMjkuMzE5OSBUagotLTI5NCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG9sdikgMTIuNzMyMiBUagotMTUgVEptCi0oZWQpIDkuNDA0NjkgVGoKLS0yOTQgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjk1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjk0IFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYXJkZWQpIDIyLjEyNjkgVGoKLS0yOTQgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yOTQgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbGlkLikgMTcuNDM0NiBUagotNzIgMTg4LjQxNyBUZAotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI1MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGF0dGVtcHQpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShyZXN1bWUpIDI4Ljc3MiBUagotLTI1MCBUSm0KLShub3JtYWwpIDI4LjIyNCBUagotLTI1MCBUSm0KLShvcGVyYXRpb24pIDM3LjYyODcgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLSh0aGVtLikgMjIuNDE1OSBUagotWzEgMCAwIDEgNzIgMTg2LjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE3Ni4zNjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE2Ni41NjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjk5IFRKbQotKG1heSkgMTcuMTU1NiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTMxMCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5OSBUSm0KLShjb3Vyc2UsKSAyOC40OTMgVGoKLS0zMTEgVEptCi0oY2hhbmdlKSAyOC4yMTQxIFRqCi0tMjk4IFRKbQotKGNyaXRpY2FsKSAyNy42NjYxIFRqCi0tMjk5IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjk4IFRKbQotKGhhbmRsaW5nKSAzNC44NjkxIFRqCi0tMjk5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTggVEptCi0oc3VpdCkgMTQuMzk2IFRqCi0tMjk5IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yOTggVEptCi0obmVlZHMuKSAyNS4xNzU1IFRqCi0tOTEyIFRKbQotKEFzKSAxMS4wNjg0IFRqCi0tMjk4IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yOTkgVEptCi0oc2FpZCkgMTYuMDQ5NyBUagotLTI5OCBUSm0KLShhYm8pIDE0LjM4NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLCkgNi45MTQwNCBUagotLTMxMSBUSm0KLShjcml0aWNhbCkgMjcuNjY2MSBUagotLTI5OSBUSm0KLShlcnJvcnMpIDIzLjIzMjggVGoKLS0yOTggVEptCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS0yOTkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z3MpIDEzLjgzODEgVGoKLTcyIDE1NC42MDggVGQKLShpbikgNy43NTA5IFRqCi0tMjYzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjYzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYzIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI2MyBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNjMgVEptCi0ob2NjdXIpIDIyLjEyNjkgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02OTcgVEptCi0oQWxsKSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKCJub3JtYWwiKSAzNi4zNTM1IFRqCi0tMjYzIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjYzIFRKbQotKHNpdHVhdGlvbnMpIDM4LjE5NjYgVGoKLS0yNjMgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjYzIFRKbQotKGluZGljYXRlZCkgMzYuNTIyOSBUagotLTI2MyBUSm0KLSh2aWEpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNjMgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjYzIFRKbQotKGNvZGVzKSAyMi42ODQ4IFRqCi0tMjYzIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNjMgVEptCi0oZnVuY3Rpb25zLCkgMzkuNTcxNCBUagotNzIgMTQyLjY1MyBUZAotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyZWQpIDE3LjE0NTYgVGoKLS0yNTAgVEptCi0oZnJvbS4pIDIxLjg1NzkgVGoKLVsxIDAgMCAxIDcyIDE0Mi41NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMyLjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTA3Ljk2NSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy44LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShNYWtpbmcpIDcxLjE2ODUgVGoKLS0yNzggVEptCi0oYSkgMTEuNDg2MSBUagotLTI3OCBUSm0KLShXaW5kbykgNjMuMTExNyBUagotMTUgVEptCi0od3MpIDI3LjU1ODQgVGoKLS0yNzggVEptCi0oRExMKSA0MC4xNjAxIFRqCi1bMSAwIDAgMSA3MiAxMDMuMzY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTkzLjQ3MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDg2LjExMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShFdikgMTEuMDY4NCBUagotMTUgVEptCi0oZXJ5dGhpbmcpIDMzLjIwNTMgVGoKLS0zMjggVEptCi0ocmVsYXRlZCkgMjcuMTA4MiBUagotLTMyNyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzI4IFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGluZG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMzI4IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTMyNyBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzI4IFRKbQotKGNvbnRyaWIpIDI4LjIyNCBUagotMjAgVEptCi0odXRlZCkgMTcuMTU1NiBUagotLTMyOCBUSm0KLShieSkgOS45NjI2IFRqCi0tMzI3IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3NoaW9rYSkgMzAuOTkzNiBUagotLTMyOCBUSm0KLShUc3VuZW8pIDI5LjMyOTkgVGoKLS0zMjggVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDM3OC4xMzkgODYuMTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3OC4xMzkgLTg2LjExMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc4LjEzOSA4Ni4xMTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odHN1bmVvQHJyLmlpajR1Lm9yLmpwKSAxMjUuNTI5IFRqCi1bMSAwIDAgMSA1MDMuNjY4IDg2LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDMuNjY4IC04Ni4xMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMy42NjggODYuMTEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLCkgNS44MDgyIFRqCi0tMzQ3IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMzI4IFRKbQotKHlvdSkgMTQuOTQzOSBUagotNzIgNzQuMTU2OCBUZAotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShzZW5kKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0ocXVlcmllcykgMjguNzcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaGltKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKFwoYikgOC4yOTg4NSBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShwZXJoYXBzKSAzMC45ODM3IFRqCi0tMjUwIFRKbQotKENjOikgMTMuODM4MSBUagotLTMxMCBUSm0KLShtZSwpIDE0LjY2NDkgVGoKLVsxIDAgMCAxIDI4Ny45NTggNzQuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODcuOTU4IC03NC4xNTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODcuOTU4IDc0LjE1NjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oanNld2FyZEBiemlwLm9yZykgOTUuNjQxIFRqCi1bMSAwIDAgMSAzODMuNiA3NC4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4My42IC03NC4xNTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODMuNiA3NC4xNTY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLikgNS44MDgyIFRqCi1bMSAwIDAgMSA3MiA3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjE0ODJdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuOTczOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MS4wNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTEuMDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDMzIDMzCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE15KSAxMy44MzgxIFRqCi0tMzY3IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWd1ZSkgMTguODA5NCBUagotLTM2NyBUSm0KLSh1bmRlcnN0YW5kaW5nKSA1Ni40NDgxIFRqCi0tMzY3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzY3IFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0zNjggVEptCi0odG8pIDcuNzUwOSBUagotLTM2NyBUSm0KLShkbykgOS45NjI2IFRqCi0tMzY3IFRKbQotKGlzOikgOS40MTQ2NiBUagotLTU0NCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMzY3IFRKbQotKFYpIDcuMTkzIFRqCi02MCBUSm0KLShpc3VhbCkgMTguODE5NCBUagotLTM2NyBUSm0KLShDKyspIDE3Ljg4MjkgVGoKLS0zNjcgVEptCi0oNS4wLCkgMTQuOTQzOSBUagotLTM5NyBUSm0KLShvcGVuKSAxOS4zNjczIFRqCi0tMzY3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM2NyBUSm0KLShwcm9qZWN0KSAyNy42NjYxIFRqCi0tMzY3IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgNDMyLjk2NiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMi45NjYgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMi45NjYgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiejIuZHNwKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0OTIuNzQyIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkyLjc0MiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkyLjc0MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zOTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNjggVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWxkLikgMTcuOTkyNSBUagotNzIgNjk4LjA4MiBUZAotKFRoYXQnKSAyMS41NzkgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNTAgVEptCi0oYWxsLikgMTIuNDUzMyBUagotWzEgMCAwIDEgNzIgNjk3Ljk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjg4LjAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjg0IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI4NCBUSm0KLShjYW4nKSAxNy4xNDU2IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yODUgVEptCi0ob3BlbikgMTkuMzY3MyBUagotLTI4NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODQgVEptCi0ocHJvamVjdCkgMjcuNjY2MSBUagotLTI4NCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yODQgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjg1IFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI4NCBUSm0KLShyZWFzb24sKSAyOC40OTMgVGoKLS0yOTMgVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjg0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yODQgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjg0IFRKbQotKG9uZSwpIDE2Ljg3NjYgVGoKLS0yOTMgVEptCi0obmFtaW5nKSAyOS44ODc4IFRqCi0tMjg0IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjg0IFRKbQotKFwwMDJsZXM6KSAxOS4zNzczIFRqCi1bMSAwIDAgMSA0MjQuNTA1IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI0LjUwNSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI0LjUwNSA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJsb2Nrc29ydC5jKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA0OTAuMjU5IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkwLjI1OSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkwLjI1OSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQ5NS42NjYgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTUuNjY2IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTUuNjY2IDY3Ni4xNjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpsaWIuYykgNDEuODQyOSBUagotWzEgMCAwIDEgNTM3LjUwOSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzNy41MDkgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNy41MDkgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGNvbXByZXNzLmMpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDEzMS43NzYgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzEuNzc2IC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzEuNzc2IDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTM2LjQzNiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNi40MzYgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNi40MzYgNjY0LjIwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShjcmN0YWJsZS5jKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxOTYuMjExIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjIxMSAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk2LjIxMSA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDIwMC44NzEgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDAuODcxIC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDAuODcxIDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZGVjb21wcmVzcy5jKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAyNzIuNjAyIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjYwMiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjcyLjYwMiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI3Ny4yNjIgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzcuMjYyIC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzcuMjYyIDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaHVmZm1hbi5jKSA1My43OTggVGoKLVsxIDAgMCAxIDMzMS4wNiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS4wNiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMxLjA2IDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzM1LjcyIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM1LjcyIC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzUuNzIgNjY0LjIwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShyYW5kdGFibGUuYykgNjUuNzUzMiBUagotWzEgMCAwIDEgNDAxLjQ3MyA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwMS40NzMgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwMy41NjIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDIwLjAzNyA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMC4wMzcgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMC4wMzcgNjY0LjIwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiejIuZGVmKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0NzkuODEyIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc5LjgxMiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc5LjgxMiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS01OTMgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjEwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMDkgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotNzIgNjUyLjI1NCBUZAotKG5lZWQpIDE4LjgwOTQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTI1MCBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi1bMSAwIDAgMSAxOTAuNDE1IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkwLjQxNSAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkwLjQxNSA2NTIuMjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliLmgpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIzMi4yNTggNjUyLjI1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzIuMjU4IC02NTIuMjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuNzQ4IDY1Mi4yNTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI1MS42MjUgNjUyLjI1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTEuNjI1IC02NTIuMjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTEuNjI1IDY1Mi4yNTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpsaWJfcHJpdmF0ZS5oKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAzNDEuMjg5IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQxLjI4OSAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQxLjI4OSA2NTIuMjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDY1MC43Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjQwLjc1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjMwLjMzNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oZG9uJykgMTguMjYxNCBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLShWQysrLCkgMjcuNTY2NSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG5lZWQpIDE4LjgwOTQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShkZVwwMDJuZSkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvcHJvY2Vzc29yKSA1MS40NTY4IFRqCi0tMjUwIFRKbQotKHN5bWJvbCkgMjkuMzM5OSBUagotWzEgMCAwIDEgMzYzLjYzNCA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My42MzQgLTYzMC4zMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My42MzQgNjMwLjMzNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShfV0lOMzIpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDM5OS41IDYzMC4zMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk5LjUgLTYzMC4zMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5OS41IDYzMC4zMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjI4LjE3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjE4LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjA4LjQxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGaW5hbGx5KSAyOC4yMzQgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDEwNC41NjggNjA4LjQxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDQuNTY4IC02MDguNDE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDQuNTY4IDYwOC40MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZGxsdGVzdC5jKSA1My43OTggVGoKLVsxIDAgMCAxIDE1OC4zNjYgNjA4LjQxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguMzY2IC02MDguNDE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjAuODU2IDYwOC40MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShzYW1wbGUpIDI4LjIyNCBUagotLTI1MCBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjUwIFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKERMTC4pIDIxLjg1NzkgVGoKLS01MDAgVEptCi0oSXQpIDYuMDg3MTUgVGoKLS0yNTAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0ocHJvamVjdCkgMjcuNjY2MSBUagotLTI1MCBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi1bMSAwIDAgMSAzODguNTggNjA4LjQxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODguNTggLTYwOC40MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4OC41OCA2MDguNDE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRsbHRlc3QuZHNwKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA0NTQuMzMzIDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU0LjMzMyAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU0LjMzMyA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDYwNi4yNjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU5Ni4yOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4Ni41MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGp1c3QpIDE0LjM5NiBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlXDAwMmxlKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShWKSA3LjE5MyBUagotNjAgVEptCi0oaXN1YWwpIDE4LjgxOTQgVGoKLS0yNTAgVEptCi0oQywpIDkuMTM1NyBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obG9vaykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLVsxIDAgMCAxIDI5Mi4yMTIgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTIuMjEyIC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTIuMjEyIDU4Ni41MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obWFrZWZpbGUubXNjKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAzNjMuOTQzIDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYzLjk0MyAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYzLjk0MyA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU4NC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3NC4zODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2NC41ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmUpIDExLjA2ODQgVGoKLS0yOTEgVEptCi0oYSkgNC40MjMzOSBUagotMTUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI5MSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjkxIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjkxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5MSBUSm0KLShjb21waWxlKSAzMi4wOTk1IFRqCi1bMSAwIDAgMSAxOTIuMDY5IDU2NC41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjA2OSAtNTY0LjU4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjA2OSA1NjQuNTgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMjEuOTU4IDU2NC41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIxLjk1OCAtNTY0LjU4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI0Ljg1NyA1NjQuNTgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGl0c2VsZikgMTkuOTI1MiBUagotLTI5MSBUSm0KLShvbikgOS45NjI2IFRqCi0tMjkxIFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGluMzIsKSAyMC4yMDQyIFRqCi0tMzAxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5MSBUSm0KLShtdXN0KSAxOS4zNzczIFRqCi0tMjkxIFRKbQotKHNldCkgMTEuMDY4NCBUagotWzEgMCAwIDEgMzQ2Ljg0MSA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Ni44NDEgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0Ni44NDEgNTY0LjU4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9VTklYKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzODguNjg1IDU2NC41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg4LjY4NSAtNTY0LjU4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkxLjU4MyA1NjQuNTgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yOTEgVEptCi0oMCkgNC45ODEzIFRqCi0tMjkxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MjcuMzk5IDU2NC41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI3LjM5OSAtNTY0LjU4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI3LjM5OSA1NjQuNTgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0xDQ1dJTjMyKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA0OTMuMTUzIDU2NC41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjE1MyAtNTY0LjU4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjA1MiA1NjQuNTgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yOTEgVEptCi0oMSwpIDcuNDcxOTUgVGoKLS0zMDEgVEptCi0oaW4pIDcuNzUwOSBUagotLTI5MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDU1Mi42MjggVGQKLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDg3LjIyMjcgNTUyLjYyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ny4yMjI3IC01NTIuNjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ny4yMjI3IDU1Mi42MjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIuYykgNDEuODQyOSBUagotWzEgMCAwIDEgMTI5LjA2NiA1NTIuNjI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyOS4wNjYgLTU1Mi42MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyOS4wNjYgNTUyLjYyOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI1MCBUSm0KLShjb21waWxpbmcuKSA0Mi44OTkgVGoKLS0zMTAgVEptCi0oT3RoZXJ3aXNlKSA0MC45NDYzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyZXN1bHRpbmcpIDM0Ljg2OTEgVGoKLS0yNTAgVEptCi0oYmluYXJ5KSAyNS40NTQ0IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvbicpIDEzLjI4MDEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTUwLjQ3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQwLjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTMwLjcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4nKSAxMi43MjIyIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0odHJpZWQpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0oc3R1ZikgMTQuOTQzOSBUagotMjUgVEptCi0oZikgMy4zMTc1NSBUagotLTI1MCBUSm0KLShteXNlbGYsKSAyOS42MDg4IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShsb29rcykgMjEuNTg5IFRqCi0tMjUwIFRKbQotKHBsYXVzaWJsZS4pIDM4LjQ2NTYgVGoKLVsxIDAgMCAxIDcyIDUyOC41NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAwIC00NzcuNzAxXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM0IDM0Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTQwLjM5OCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC0xMy45NDc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MDEuOTE2IFRkCi0vRjEyMl8wIDI0Ljc5MDIgVGYKLSg0LikgMjAuNjc1IFRqCi0tMjc4IFRKbQotKE1pc2NlbGxhbmVhKSAxMzkuMTcyIFRqCi1bMSAwIDAgMSA3MiA3MDEuNjA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS4xMzQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQuMTE2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc4LjM1NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjU4LjAwNiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oVCkgMTAuNTE4NiBUagotODAgVEptCi0oYWIpIDIwLjA5MDQgVGoKLTEwIFRKbQotKGxlKSAxNC4zNTc2IFRqCi0tMjc4IFRKbQotKG9mKSAxNi4yNTEzIFRqCi0tMjc4IFRKbQotKENvbnRlbnRzKSA3NC41OTQzIFRqCi1bMSAwIDAgMSA3MiA2NDkuMTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuNzQwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjM3LjQ0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM3LjQ0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LjEuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKExpbWl0YXRpb25zKSA0NS45NDc1IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLVsxIDAgMCAxIDI1NS4yMzEgNjM3LjQ0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYwLjIxMiAtNjM3LjQ0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY5LjE1NCA2MzcuNDQzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNjM3LjQ0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC02MzcuNDQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDYzNy40NDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDYzNy40NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyNS40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyNS40ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShQb3J0YWJpbGl0eSkgNDIuMDcyMSBUagotLTI1MCBUSm0KLShpc3N1ZXMpIDIzLjgwMDcgVGoKLVsxIDAgMCAxIDE1OC4zOTUgNjI1LjQ4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYzLjM3NiAtNjI1LjQ4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcyLjAzIDYyNS40ODggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNjI1LjQ4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC02MjUuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDYyNS40ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDYyNS40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxMy41MzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxMy41MzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC4zLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShSZXBvcnRpbmcpIDM5Ljg1MDQgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z3MpIDEzLjgzODEgVGoKLVsxIDAgMCAxIDE1MC45OTMgNjEzLjUzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1Ljk3NSAtNjEzLjUzM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY2LjExNSA2MTMuNTMzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA2MTMuNTMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTYxMy41MzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNjEzLjUzMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNjEzLjUzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjAxLjU3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjAxLjU3OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LjQuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKERpZCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oZ2V0KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyaWdodCkgMTguODE5NCBUagotLTI1MCBUSm0KLShwYWNrYWdlPykgMzcuMDYwOSBUagotWzEgMCAwIDEgMjEyLjYwMiA2MDEuNTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzLjA4ODQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTguNzc4IC02MDEuNTc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjkuMTA5IDYwMS41NzggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA2MDEuNTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTYwMS41NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNjAxLjU3OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMykgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNjAxLjU3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTg5LjYyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTg5LjYyMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LjUuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKEZ1cnRoZXIpIDI5LjMyOTkgVGoKLS0yNTAgVEptCi0oUmVhZGluZykgMzMuMjA1MyBUagotWzEgMCAwIDEgMTU1LjA1OCA1ODkuNjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjAuMDM5IC01ODkuNjIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzAuMzYxIDU4OS42MjMgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTg5LjYyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01ODkuNjIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDU4OS42MjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzQpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDU4OS42MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjEzNDhdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2OC43XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NTguOTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yNTAgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjUwIFRKbQotKHJhbmRvbSkgMzAuNDM1NyBUagotLTI1MCBUSm0KLSh0aG91Z2h0cykgMzQuMzIxMiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShtaW5lLikgMjIuNDE1OSBUagotLTYyMCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91cikgMTMuMjgwMSBUagotLTI1MCBUSm0KLShtaWxlYWdlKSAzMS41NDE2IFRqCi0tMjUwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFyeSkgMTIuNzIyMiBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTU2Ljc0NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNjMxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQ3LjExM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI0LjQ4IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSg0LjEuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKExpbWl0YXRpb25zKSAxMTAuMTkyIFRqCi0tMjc4IFRKbQotKG9mKSAxOS41MDE2IFRqCi0tMjc4IFRKbQotKHRoZSkgMzAuOTg3NyBUagotLTI3OCBUSm0KLShjb21wcmVzc2VkKSAxMjEuNjk5IFRqCi0tMjc4IFRKbQotKFwwMDJsZSkgMjkuODUxNSBUagotLTI3OCBUSm0KLShmKSA2Ljg3OTI4IFRqCi0yMCBUSm0KLShvcm1hdCkgNTcuMzg5MyBUagotWzEgMCAwIDEgNzIgNTIwLjIwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNjMxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTEwLjU3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTAyLjg5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMi0xLjAuWCkgNjUuNzUzMiBUagotWzEgMCAwIDEgMTM3Ljc1MyA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy43NTMgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNy43NTMgNTAyLjg5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNDMuNDA1IDUwMi44OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjQwNSAtNTAyLjg5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQzLjQwNSA1MDIuODkzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKDAuOS41KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxNzMuMjkzIDUwMi44OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTczLjI5MyAtNTAyLjg5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc2LjQ1MyA1MDIuODkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxOTQgNTAyLjg5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTQgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NCA1MDIuODkzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKDAuOS4wKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMjMuODg4IDUwMi44OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIzLjg4OCAtNTAyLjg5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI3LjA0OCA1MDIuODkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVzZSkgMTMuMjgwMSBUagotLTMxNyBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4YWN0bHkpIDI0LjM0ODYgVGoKLS0zMTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE4IFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0zMTcgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzE3IFRKbQotKGZvcm1hdCkgMjYuNTYwMyBUagotLTMxNyBUSm0KLShhcykgOC4yOTg4NSBUagotLTMxOCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTcgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0zMTcgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24sKSAyNi44MzkyIFRqCi1bMSAwIDAgMSA0NTUuODAxIDUwMi44OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU1LjgwMSAtNTAyLjg5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU1LjgwMSA1MDIuODkzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyLTAuMSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA1MDkuNTk5IDUwMi44OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA5LjU5OSAtNTAyLjg5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA5LjU5OSA1MDIuODkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMDIzIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLTcyIDQ5MC45MzggVGQKLShkZWNpc2lvbikgMzMuMjA1MyBUagotLTIyMiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yMjIgVEptCi0obWFkZSkgMjEuNTc5IFRqCi0tMjIyIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMjEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIyIFRKbQotKGludGVyZXN0cykgMzMuMjA1MyBUagotLTIyMiBUSm0KLShvZikgOC4yOTg4NSBUagotLTIyMiBUSm0KLShzdGFiaWxpdHkpIDMyLjEwOTUgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MDEgVEptCi0oQ3JlYXRpbmcpIDM0LjMxMTIgVGoKLS0yMjIgVEptCi0oeWV0KSAxMi4xNzQzIFRqCi0tMjIyIFRKbQotKGFub3RoZXIpIDI5Ljg3NzggVGoKLS0yMjIgVEptCi0oaW5jb21wYXRpYmxlKSA1Mi4wMjQ3IFRqCi0tMjIxIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yMjIgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjIyIFRKbQotKGZvcm1hdCkgMjYuNTYwMyBUagotLTIyMiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZCkgMTcuNzEzNSBUagotLTIyMiBUSm0KLShjcmVhdGUpIDIzLjc4MDcgVGoKLTcyIDQ3OC45ODMgVGQKLShmdXJ0aGVyKSAyNy4xMDgyIFRqCi0tMjUwIFRKbQotKGNvbmZ1c2lvbikgMzkuMjkyNSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShkaXNydXB0aW9uKSA0MC40MDgzIFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLSh1c2Vycy4pIDIyLjk2MzggVGoKLVsxIDAgMCAxIDcyIDQ3Ni44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ2Ny4xOTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ1Ny4zOTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTmUpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ0aGVsZXNzLCkgMzcuMzQ5OCBUagotLTIzNCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yMjkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjI5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMzAgVEptCi0ocGFpbmxlc3MpIDMyLjA5OTUgVGoKLS0yMjkgVEptCi0oZGVjaXNpb24uKSAzNS42OTYgVGoKLS02MDYgVEptCi0oRGUpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWxvcG1lbnQpIDM3LjA4MDggVGoKLS0yMzAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTIzMCBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTIyOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzAgVEptCi0ocmVsZWFzZSkgMjcuNjU2MiBUagotLTIyOSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDA3LjMxNyA0NTcuMzk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNy4zMTcgLTQ1Ny4zOTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNy4zMTcgNDU3LjM5NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMi0wLjEpIDUzLjc5OCBUagotWzEgMCAwIDEgNDYxLjExNSA0NTcuMzk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS4xMTUgLTQ1Ny4zOTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2My40MDIgNDU3LjM5NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbikgNy43NTA5IFRqCi0tMjMwIFRKbQotKEF1Z3VzdCkgMjguNzgyIFRqCi0tMjI5IFRKbQotKDE5OTcpIDE5LjkyNTIgVGoKLS0yMzAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi03MiA0NDUuNDQxIFRkCi0oc2hvKSAxMy44MzgxIFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTIyNiBUSm0KLShjb21wbGUpIDI5LjMyOTkgVGoKLTE1IFRKbQotKHhpdGllcykgMjEuNTg5IFRqCi0tMjI2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjI2IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTIyNiBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yMjYgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yMjYgVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTIyNSBUSm0KLShkbykgOS45NjI2IFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTIyNiBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjI2IFRKbQotKGFuZCwpIDE2Ljg3NjYgVGoKLS0yMzEgVEptCi0oaW4pIDcuNzUwOSBUagotLTIyNiBUSm0KLShyZXRyb3NwZWN0LCkgNDEuNzczMiBUagotLTIzMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yMjYgVEptCi0odW5uZWNlc3NhcnkpIDQ4LjY4NzIgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MDQgVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0yMjYgVEptCi0oYXJlOikgMTQuOTMzOSBUagotWzEgMCAwIDEgNzIgNDQzLjI4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjA2MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC00MTQuMjIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDQxNC4yMjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA0MTQuMjIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTQxNC4yMjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA0MTQuMjIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI2NSBUSm0KLShydW4tbGVuZ3RoKSA0MS41MDQyIFRqCi0tMjY2IFRKbQotKGVuY29kZXIpIDMxLjUzMTYgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNjkgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY2IFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0yNjUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY2IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjY1IFRKbQotKHRyYW5zZm9ybWF0aW9ucywpIDY1LjAyNTkgVGoKLS0yNjkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjUgVEptCi0oZW50aXJlbHkpIDMwLjQzNTcgVGoKLS0yNjYgVEptCi0oaXJyZWxlKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFudC4pIDE0LjY2NDkgVGoKLS03MTEgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjY2IFRKbQotKG9yaWdpbmFsKSAzMC45OTM2IFRqCi04Ni45NDQgNDAyLjI2NyBUZAotKHB1cnBvc2UpIDMxLjU0MTYgVGoKLS0zMDEgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzAxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDEgVEptCi0ocHJvdGVjdCkgMjcuNjY2MSBUagotLTMwMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDEgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTMwMSBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0zMDEgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTMwMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDEgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0zMDEgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yc3QpIDE0Ljk0MzkgVGoKLS0zMDEgVEptCi0oY2FzZSkgMTcuMTQ1NiBUagotLTMwMSBUSm0KLShpbnB1dDopIDIzLjI1MjcgVGoKLS00MTIgVEptCi0oYSkgNC40MjMzOSBUagotLTMwMSBUSm0KLShzdHJpbmcpIDIyLjY5NDggVGoKLS0zMDEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMDEgVEptCi0ocmVwZWF0ZWQpIDMzLjc0MzMgVGoKLS0zMDEgVEptCi0oc3ltYm9scy4pIDM1LjcwNiBUagotLTkyNyBUSm0KLShCdXQpIDE0LjM5NiBUagotODYuOTQ0IDM5MC4zMTIgVGQKLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNzQgVEptCi0oc3RlcHMpIDE5LjkyNTIgVGoKLS0yNzUgVEptCi0oUTZhKSAxNi41OTc3IFRqCi0tMjc0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjc0IFRKbQotKFE2YikgMTcuMTU1NiBUagotLTI3NSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjc0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NCBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotLTI3NSBUSm0KLShCdXJybykgMjMuMjQyNyBUagotMjUgVEptCi0od3MtV2hlZWwpIDQwLjM4ODQgVGoKLTEgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yNzUgVEptCi0odGVjaG5pY2FsKSAzNS45NjUgVGoKLS0yNzQgVEptCi0ocmVwb3J0KSAyMy43OTA3IFRqCi0tMjc0IFRKbQotKFwoU1JDLTEyNFwpKSA0My43MjU5IFRqCi0tMjc1IFRKbQotKHNobykgMTMuODM4MSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNzQgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNzQgVEptCi0ocmVwZWF0cykgMjguMjE0MSBUagotLTI3NSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLTg2Ljk0NCAzNzguMzU3IFRkCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oaGFuZGxlZCkgMzEuNTQxNiBUagotLTI1MCBUSm0KLSh3aXRob3V0KSAzMC40NDU3IFRqCi0tMjUwIFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHR5KSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oc29ydGluZy4pIDMwLjE2NjggVGoKLVsxIDAgMCAxIDI2OS42MTcgMzc4LjM1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTcuNjE3IC0yMS41ODY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzU2Ljc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDM1Ni43NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDM1Ni43N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zNTYuNzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAzNTYuNzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjkzIFRKbQotKHJhbmRvbWlzYXRpb24pIDU3LjAwNiBUagotLTI5MyBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0yOTMgVEptCi0oZG9lc24nKSAyNi41NjAzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yOTQgVEptCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi0tMjkzIFRKbQotKG5lZWQpIDE4LjgwOTQgVGoKLS0yOTMgVEptCi0odG8pIDcuNzUwOSBUagotLTI5MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI5MyBUSm0KLSh0aGVyZS4pIDIyLjQwNTkgVGoKLS04NzkgVEptCi0oVWRpKSAxNC45NDM5IFRqCi0tMjk0IFRKbQotKE1hbmJlcikgMzAuOTgzNyBUagotLTI5MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5MyBUSm0KLShHZW5lKSAyMS4wMjExIFRqCi0tMjkzIFRKbQotKE15ZXJzKSAyNS40NTQ0IFRqCi0tMjkzIFRKbQotKHB1Ymxpc2hlZCkgMzguNzQ0NiBUagotLTI5NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjkzIFRKbQotKHN1ZikgMTIuMTc0MyBUagotMjUgVEptCi0oXDAwMngpIDEwLjUyMDUgVGoKLTg2Ljk0NCAzNDQuODE1IFRkCi0oYXJyYXkpIDIwLjQ2MzIgVGoKLS0yMzggVEptCi0oY29uc3RydWN0aW9uKSA0OS4yNTUxIFRqCi0tMjM5IFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTIzOCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjM4IFRKbQotKGZlKSA3Ljc0MDk0IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTIzOSBUSm0KLSh5ZWFycykgMjEuMDIxMSBUagotLTIzOCBUSm0KLShiYWNrLCkgMjEuMyBUagotLTI0MSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTIzOCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yMzggVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMzkgVEptCi0oZW1wbG8pIDI0LjkwNjUgVGoKLTEwIFRKbQotKHllZCkgMTQuMzg2IFRqCi0tMjM4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMzggVEptCi0oc29ydCkgMTQuOTQzOSBUagotLTIzOSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjM4IFRKbQotKGJsb2NrLCkgMjQuNjI3NSBUagotLTI0MSBUSm0KLShubykgOS45NjI2IFRqCi0tMjM4IFRKbQotKG1hdHRlcikgMjUuNDU0NCBUagotLTIzOCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTIzOSBUSm0KLShyZXBldGl0aSkgMjguMjI0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUsKSA2LjkxNDA0IFRqCi04Ni45NDQgMzMyLjg2IFRkCi0oaW4pIDcuNzUwOSBUagotLTIyOSBUSm0KLShPXChOKSAxNy43MDM1IFRqCi0tMjMwIFRKbQotKGxvZykgMTIuNzMyMiBUagotLTIyOSBUSm0KLShOXCkpIDEwLjUxMDUgVGoKLS0yMzAgVEptCi0odGltZS4pIDIwLjIwNDIgVGoKLS02MDYgVEptCi0oU3Vic2VxdWVudCkgNDUuOTM3NSBUagotLTIzMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMjI5IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yMzAgVEptCi0oSykgNy4xOTMgVGoKLTE1IFRKbQotKHVuaWhpaykgMjUuNDY0NCBUagotMTAgVEptCi0obykgNC45ODEzIFRqCi0tMjI5IFRKbQotKFNhZGFrYW5lKSAzOC4xNzY3IFRqCi0tMjI5IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTIzMCBUSm0KLShwcm9kdWNlZCkgMzcuMDcwOCBUagotLTIyOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjMwIFRKbQotKGRlcmkpIDE1LjQ5MTggVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXRpKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTIyOSBUSm0KLShPXChOKSAxNy43MDM1IFRqCi0tMjMwIFRKbQotKFwobG9nKSAxNi4wNDk3IFRqCi0tMjI5IFRKbQotKE5cKV4yXCkpIDIzLjQ4MTggVGoKLS0yMzAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi04Ni45NDQgMzIwLjkwNSBUZAotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHVzdWFsbHkpIDI4Ljc4MiBUagotLTI1MCBUSm0KLShvdXRwZXJmb3JtcykgNDguNjk3MiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oTWFuYmVyKSAzMC45ODM3IFRqCi0yMCBUSm0KLSgtTXllcnMpIDI4Ljc3MiBUagotLTI1MCBUSm0KLShhbGdvcml0aG0uKSA0MS4yMzUyIFRqCi1bMSAwIDAgMSAzMTQuMTg5IDMyMC45MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQyLjE4OSAtMTEuNzg4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzA5LjExNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDI5OS4zMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSSkgMy4zMTc1NSBUagotLTI0OCBUSm0KLShjb3VsZCkgMjIuMTM2OSBUagotLTI0OCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQ4IFRKbQotKGNoYW5nZWQpIDMzLjE5NTQgVGoKLS0yNDggVEptCi0odG8pIDcuNzUwOSBUagotLTI0OCBUSm0KLShTYWRha2FuZScpIDQxLjQ5NDIgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNDggVEptCi0oYWxnb3JpdGhtLCkgNDEuMjM1MiBUagotLTI0OSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNDggVEptCi0oSSkgMy4zMTc1NSBUagotLTI0OCBUSm0KLShcMDAybmQpIDE1LjUwMTggVGoKLS0yNDggVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNDggVEptCi0odG8pIDcuNzUwOSBUagotLTI0OCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI0OCBUSm0KLShzbG8pIDExLjYyNjQgVGoKLTI1IFRKbQotKHdlcikgMTQuOTMzOSBUagotLTI0OCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi1bMSAwIDAgMSAzOTIuNDQ0IDI5OS4zMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkyLjQ0NCAtMjk5LjMxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkyLjQ0NCAyOTkuMzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0MjIuMzMyIDI5OS4zMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIyLjMzMiAtMjk5LjMxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIyLjMzMiAyOTkuMzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCcpIDMuMzE3NTUgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNDggVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotLTI0OCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNDggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjQ4IFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLTg2Ljk0NCAyODcuMzYzIFRkCi0oaW5wdXRzLCkgMjYuODQ5MiBUagotLTM3MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM0NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDYgVEptCi0ocmFuZG9taXNhdGlvbikgNTcuMDA2IFRqCi0tMzQ2IFRKbQotKG1lY2hhbmlzbSkgNDUuMzc5NiBUagotLTM0NSBUSm0KLShwcm90ZWN0cykgMzEuNTQxNiBUagotLTM0NiBUSm0KLShhZGVxdWF0ZWx5KSA0My4xNTggVGoKLS0zNDUgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluc3QpIDE4LjgxOTQgVGoKLS0zNDYgVEptCi0oYmFkKSAxNC4zODYgVGoKLS0zNDYgVEptCi0oY2FzZXMuKSAyMy41MTE3IFRqCi0tMTE5NCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMzQ1IFRKbQotKGRpZG4nKSAyMS4wMzEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTM0NiBUSm0KLSh0aGluaykgMjAuNDgzMSBUagotLTM0NiBUSm0KLShpdCkgNS41MzkyMSBUagotLTM0NSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zNDYgVEptCi0oYSkgNC40MjMzOSBUagotLTM0NiBUSm0KLShnb29kKSAxOS45MjUyIFRqCi04Ni45NDQgMjc1LjQwOCBUZAotKHRyYWRlb2YpIDI4LjIxNDEgVGoKLTI1IFRKbQotKGYpIDMuMzE3NTUgVGoKLS0yNjIgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MSBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUuKSA2LjkxNDA0IFRqCi0tNjkwIFRKbQotKFApIDUuNTM5MjEgVGoKLTE1IFRKbQotKGFydGx5KSAxOC4yNjE0IFRqCi0tMjYyIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2MSBUSm0KLShpcykgNi42NDUwNSBUagotLTI2MiBUSm0KLShkdWUpIDE0LjM4NiBUagotLTI2MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjYyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY3QpIDExLjYxNjQgVGoKLS0yNjEgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI2MiBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjYxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI2MiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNjIgVEptCi0oXDAwM29vZGVkKSAyOS44ODc4IFRqCi0tMjYxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNjIgVEptCi0oZW1haWwpIDIyLjEzNjkgVGoKLS0yNjEgVEptCi0oY29tcGxhaW50cykgNDMuNzI1OSBUagotLTI2MiBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotWzEgMCAwIDEgNDc5LjU1NyAyNzUuNDA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3OS41NTcgLTI3NS40MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3OS41NTcgMjc1LjQwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMi0wLjEpIDUzLjc5OCBUagotWzEgMCAwIDEgNTMzLjM1NSAyNzUuNDA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzMy4zNTUgLTI3NS40MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzMy4zNTUgMjc1LjQwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi04Ni45NDQgMjYzLjQ1MyBUZAotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLS0yNTAgVEptCi0ob24pIDkuOTYyNiBUagotLTI1MCBUSm0KLShyZXBldGl0aSkgMjguMjI0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLS0yNTAgVEptCi0oc28pIDguODU2NzUgVGoKLS0yNTAgVEptCi0ocGVyaGFwcykgMzAuOTgzNyBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShpc24nKSAxNC45NDM5IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwcm9ibGVtKSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShyZWFsKSAxNC45MzM5IFRqCi0tMjUwIFRKbQotKGlucHV0cy4pIDI2Ljg0OTIgVGoKLVsxIDAgMCAxIDcyIDI2MS4yOTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI1MS42NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAyNDEuODY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2JhYmx5KSAzNS45NzQ5IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OCBUSm0KLShiZXN0KSAxNi4wNDk3IFRqCi0tMjg5IFRKbQotKGxvbmctdGVybSkgMzkuMjkyNSBUagotLTI4OSBUSm0KLShzb2x1dGlvbiwpIDM0LjYwMDEgVGoKLS0yOTggVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjg4IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yODkgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI4OSBUSm0KLShpbmNvcnBvcmF0ZWQpIDUwLjM1MSBUagotLTI4OCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjg5IFRKbQotKDAuOS41KSAxOS45MjUyIFRqCi0tMjg5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjg4IFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE0IFRKbQotKGUsKSA2LjkxNDA0IFRqCi0tMjk4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjg5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODggVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4aXN0aW5nKSAyNy4xMjgyIFRqCi04Ni45NDQgMjI5LjkxMSBUZAotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS00NTEgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tNDUyIFRKbQotKGluaXRpYWxseSkgMzEuMDAzNiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTUwMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTQ1MiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTQ1MSBUSm0KLShiYWNrKSAxOC44MDk0IFRqCi0tNDUyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00NTEgVEptCi0oYSkgNC40MjMzOSBUagotLTQ1MSBUSm0KLShPXChOKSAxNy43MDM1IFRqCi0tNDUyIFRKbQotKFwobG9nKSAxNi4wNDk3IFRqCi0tNDUxIFRKbQotKE5cKV4yXCkpIDIzLjQ4MTggVGoKLS00NTEgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tNDUyIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tNDUxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ1MiBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTQ1MSBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS00NTEgVEptCi0oZ2V0cykgMTYuMDQ5NyBUagotLTQ1MiBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi04Ni45NDQgMjE3Ljk1NiBUZAotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHRpZXMuKSAzNC4wNDIyIFRqCi1bMSAwIDAgMSA3MiAyMTcuODU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjEuNDg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTE5Ni4zNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMTk2LjM2OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDE5Ni4zNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMTk2LjM2OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDE5Ni4zNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjk5IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yOTkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjk5IFRKbQotKGZvcm1hdCkgMjYuNTYwMyBUagotLTI5OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMDAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yOTkgVEptCi0oZGVzaWduZWQpIDM1LjQxNyBUagotLTI5OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjk5IFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0yOTkgVEptCi0oYnkpIDkuOTYyNiBUagotLTI5OSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk5IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMTIgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTkgVEptCi0oSSkgMy4zMTc1NSBUagotLTI5OSBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjk5IFRKbQotKGhhZCkgMTQuMzg2IFRqCi0tMjk5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTkgVEptCi0oanVtcCkgMjAuNDgzMSBUagotLTMwMCBUSm0KLSh0aG91Z2gpIDI3LjY3NjEgVGoKLS0yOTkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi04Ni45NDQgMTg0LjQxNCBUZAotKGhvb3BzKSAyMy44MDA3IFRqCi0tMjc4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzcgVEptCi0ocHJvZHVjZSkgMzIuMDg5NSBUagotLTI3OCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI3OCBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oXDAwMmNpZW50KSAyNC45MDY1IFRqCi0tMjc3IFRKbQotKGltcGxlbWVudGF0aW9uKSA2Mi41NDUyIFRqCi0tMjc4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjc4IFRKbQotKGRlY29tcHJlc3Npb24uKSA2Mi4yNTYzIFRqCi0tNzg2IFRKbQotKEl0JykgOS40MDQ2OSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI3OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjc3IFRKbQotKGJpdCkgMTAuNTIwNSBUagotLTI3OCBUSm0KLShoYWlyeSkgMjAuNDczMSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTc4NiBUSm0KLShUKSA2LjA4NzE1IFRqCi0zNSBUSm0KLShyeSkgOC4yOTg4NSBUagotLTI3OCBUSm0KLShwYXNzaW5nKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NjguMjY5IDE4NC40MTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4LjI2OSAtMTg0LjQxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY4LjI2OSAxODQuNDE0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlY29tcHJlc3MuYykgNzEuNzMwNyBUagotWzEgMCAwIDEgNTQwIDE4NC40MTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC0xODQuNDE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMTcyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aHJvdWdoKSAzMC45OTM2IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2OCBUSm0KLShDKSA2LjY0NTA1IFRqCi0tMjY4IFRKbQotKHByZXByb2Nlc3NvcikgNTAuODk4OSBUagotLTI2OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2OCBUSm0KLSh5b3UnKSAxOC4yNjE0IFRqCi0xMCBUSm0KLShsbCkgNS41MzkyMSBUagotLTI2OCBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLS0yNjggVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI2OCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjY4IFRKbQotKG1lYW4uKSAyNC4wNjk2IFRqCi0tNzI5IFRKbQotKE11Y2gpIDIzLjI0MjcgVGoKLS0yNjggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNjkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjY4IFRKbQotKGNvbXBsZSkgMjkuMzI5OSBUagotMTUgVEptCi0oeGl0eSkgMTUuNTAxOCBUagotLTI2OCBUSm0KLShjb3VsZCkgMjIuMTM2OSBUagotLTI2OCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjY4IFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNjggVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yMCBUSm0KLShvaWRlZCkgMjIuMTM2OSBUagotLTI2OSBUSm0KLShpZikgNi4wODcxNSBUagotLTI2OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTg2Ljk0NCAxNjAuNTAzIFRkCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0ocmVjb3JkZWQpIDM0Ljg0OTIgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSAzNjguNzU0IDE2MC41MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk2Ljc1NCAtMjEuNTg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTEzOC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMTM4LjkxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDEzOC45MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMTM4LjkxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDEzOC45MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQW4pIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oQWRsZXIpIDIyLjY4NDggVGoKLTIwIFRKbQotKC0zMikgMTMuMjgwMSBUagotLTI1MCBUSm0KLShjaGVja3N1bSwpIDQyLjMzMTEgVGoKLS0yNTAgVEptCi0ocmF0aGVyKSAyMy4yMzI4IFRqCi0tMjUwIFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShDUkMzMikgMjkuODk3OCBUagotLTI1MCBUSm0KLShjaGVja3N1bSwpIDQyLjMzMTEgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXN0ZXIpIDE4LjgwOTQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShjb21wdXRlLikgMzYuODAxOCBUagotWzEgMCAwIDEgNDI0LjkzNCAxMzguOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Mi45MzQgLTExLjc4ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEyNy4xMjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDExNy4zMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJdCkgNi4wODcxNSBUagotLTM0OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZCkgMTcuNzEzNSBUagotLTM0OSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM0OSBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaXIpIDEwLjUxMDUgVGoKLS0zNDggVEptCi0odG8pIDcuNzUwOSBUagotLTM0OSBUSm0KLShzYXkpIDEzLjI4MDEgVGoKLS0zNDkgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTM0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDIwMS45NzkgMTE3LjMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMS45NzkgLTExNy4zM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAxLjk3OSAxMTcuMzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIzMS44NjcgMTE3LjMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMS44NjcgLTExNy4zM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM1LjM0MiAxMTcuMzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9ybWF0KSAyNi41NjAzIFRqCi0tMzQ5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTM0OSBUSm0KLShmcm96ZW4pIDI1LjQ0NDUgVGoKLS0zNDggVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMzQ5IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0zNDkgVEptCi0ocHJvcGVybHkpIDMzLjc1MzMgVGoKLS0zNDkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDkgVEptCi0oZnVsbHkpIDE4LjgxOTQgVGoKLS0zNDkgVEptCi0odW5kZXJzdG9vZCkgNDQuMjczOCBUagotLTM0OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDkgVEptCi0ocGVyZm9ybWFuY2UpIDUwLjM0MSBUagotNzIgMTA1LjM3NSBUZAotKGNvbnNlcXVlbmNlcykgNTQuNzc0NCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShkb2luZykgMjIuNjk0OCBUagotLTI1MCBUSm0KLShzby4pIDExLjM0NzQgVGoKLVsxIDAgMCAxIDcyIDEwMy4yMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTkzLjU4NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDgzLjc4ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSW1wcm8pIDI0LjM0ODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW1lbnRzKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGluY29ycG9yYXRlKSA0NS4zNjk3IFRqCi0tMjUwIFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oMC45LjAsKSAyMi40MTU5IFRqCi0tMjUwIFRKbQotKGRlc3BpdGUpIDI4LjIyNCBUagotLTI1MCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzYW1lKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShmb3JtYXQsKSAyOS4wNTA5IFRqCi0tMjUwIFRKbQotKGFyZTopIDE0LjkzMzkgVGoKLVsxIDAgMCAxIDcyIDgxLjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zMC43Nzk2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM1IDM1Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMTYuMzI4IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjQgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC43MjggNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDkuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTcuMDkzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMxLjUxNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNpbmdsZSkgMjUuNDY0NCBUagotLTIwMiBUSm0KLShhcnJheSkgMjAuNDYzMiBUagotLTIwMSBUSm0KLShpbXBsZW1lbnRhdGlvbikgNjIuNTQ1MiBUagotLTIwMiBUSm0KLShvZikgOC4yOTg4NSBUagotLTIwMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMDEgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNlKSAxNi4wMzk4IFRqCi0tMjAyIFRKbQotKEJXVCkgMjIuMTM2OSBUagotNzQgVEptCi0oLikgMi40OTA2NSBUagotLTQwMyBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjAyIFRKbQotKHNpZ25pXDAwMmNhbnRseSkgNDkuMjY1MSBUagotLTIwMSBUSm0KLShzcGVlZHMpIDI2LjU2MDMgVGoKLS0yMDIgVEptCi0odXApIDkuOTYyNiBUagotLTIwMiBUSm0KLShkZWNvbXByZXNzaW9uLCkgNjIuMjU2MyBUagotLTIxMSBUSm0KLShwcmVzdW1hYmx5KSA0Ni40ODU1IFRqCi0tMjAyIFRKbQotKGJlY2F1c2UpIDMxLjUzMTYgVGoKLTg2Ljk0NCA2OTguMDgyIFRkCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0ocmVkdWNlcykgMzAuNDI1OCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNhY2hlKSAyMi42NzQ5IFRqCi0tMjUwIFRKbQotKG1pc3Nlcy4pIDI5LjA2MDkgVGoKLVsxIDAgMCAxIDI0MC40OTYgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjguNDk2IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShhc3RlcikgMTguODA5NCBUagotLTMxNCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2UpIDE2LjAzOTggVGoKLS0zMTUgVEptCi0oTVRGKSAyMC40ODMxIFRqCi0tMzE0IFRKbQotKHRyYW5zZm9ybSkgMzguNzM0NiBUagotLTMxNSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMTQgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTMxNSBUSm0KLShNVEYpIDIwLjQ4MzEgVGoKLS0zMTQgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcy4pIDIyLjk2MzggVGoKLS01MDQgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMzE0IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMxNCBUSm0KLShpbXBsZW1lbnRhdGlvbikgNjIuNTQ1MiBUagotLTMxNSBUSm0KLShpcykgNi42NDUwNSBUagotLTMxNCBUSm0KLShiYXNlZCkgMjIuNjg0OCBUagotLTMxNSBUSm0KLShvbikgOS45NjI2IFRqCi0tMzE0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxNSBUSm0KLShub3Rpb24pIDI1LjQ2NDQgVGoKLS0zMTQgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMTUgVEptCi0oc2xpZGluZykgMjcuMTI4MiBUagotODYuOTQ0IDY2NC4yMDkgVGQKLShibG9ja3MpIDI2LjAxMjMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcy4pIDIyLjk2MzggVGoKLVsxIDAgMCAxIDE1My45MzIgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MS45MzIxIC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA2NDIuMjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMi0wLjkuMCkgNjUuNzUzMiBUagotWzEgMCAwIDEgMTUyLjY5NyA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Mi42OTcgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS40MTIgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShubykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI3MiBUSm0KLShyZWFkcykgMjEuMDIxMSBUagotLTI3MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MiBUSm0KLSh3cml0ZXMpIDI0LjM0ODYgVGoKLS0yNzMgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI3MiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAyODIuNjggNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODIuNjggLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Mi42OCA2NDIuMjkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZyZWFkKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMTIuNTY4IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEyLjU2OCAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE1LjI4MiA2NDIuMjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzMzIuMzgzIDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMyLjM4MyAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMyLjM4MyA2NDIuMjkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZ3cml0ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzY4LjI0OCA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2OC4yNDggLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2OC4yNDggNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg7KSAyLjc2OTYgVGoKLS0yODQgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yNzIgVEptCi0oMC4xKSAxMi40NTMzIFRqCi0tMjczIFRKbQotKHVzZWQpIDE4LjI2MTQgVGoKLVsxIDAgMCAxIDQ0MS44ODIgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDEuODgyIC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDEuODgyIDY0Mi4yOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ocHV0YykgMjMuOTEwMiBUagotWzEgMCAwIDEgNDY1Ljc5MiA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NS43OTIgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2OC41MDcgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDg1LjYwNyA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4NS42MDcgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4NS42MDcgNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShnZXRjKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA1MDkuNTE3IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA5LjUxNyAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA5LjUxNyA2NDIuMjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS03NTUgVEptCi0oRHVoISkgMjAuNDczMSBUagotODYuOTQ0IDYzMC4zMzYgVGQKLShXKSA5LjQwNDY5IFRqCi04MCBUSm0KLShlbGwsKSAxMi40NTMzIFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShsaSkgNS41MzkyMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGxlYXJuLikgMjIuNDA1OSBUagotWzEgMCAwIDEgMTg0LjI0OCA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMi4yNDggLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxOC4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYwOC40MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRnVydGhlcikgMjkuMzI5OSBUagotLTMwNCBUSm0KLShhaGVhZCwpIDI1LjcyMzQgVGoKLS0zMTggVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0zMDQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMDUgVEptCi0obmljZSkgMTYuNTk3NyBUagotLTMwNCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzA0IFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0zMDQgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNSBUSm0KLShkbykgOS45NjI2IFRqCi0tMzA0IFRKbQotKHJhbmRvbSkgMzAuNDM1NyBUagotLTMwNSBUSm0KLShhY2Nlc3MpIDI1LjQ0NDUgVGoKLS0zMDQgVEptCi0oaW50bykgMTUuNTAxOCBUagotLTMwNSBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotLTk0NiBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMzA1IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0zMDQgVEptCi0ocmVxdWlyZSkgMjguMjE0MSBUagotLTMwNCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0zMDUgVEptCi0oY2FyZWZ1bCkgMjcuNjU2MiBUagotLTMwNCBUSm0KLShkZXNpZ24pIDI2LjAxMjMgVGoKLS0zMDUgVEptCi0ob2YpIDguMjk4ODUgVGoKLTcyIDU5Ni40NjMgVGQKLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShmb3JtYXRzLikgMzIuOTI2NCBUagotWzEgMCAwIDEgNzIgNTk0LjMwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTg0LjM0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTYxLjcxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSg0LjIuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFApIDEzLjc3OTIgVGoKLTQwIFRKbQotKG9yKSAyMC42NTg1IFRqCi0tMjAgVEptCi0odGFiaWxpdHkpIDY2LjU4MjMgVGoKLS0yNzggVEptCi0oaXNzdWVzKSA2NC4zMDk5IFRqCi1bMSAwIDAgMSA3MiA1NTcuNDM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NDcuNDcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MzkuNzkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFmdGVyKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShjb25zaWRlcmF0aW9uLCkgNTYuMTY5MSBUagotLTI1MCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZGVjaWRlZCkgMzAuOTgzNyBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oR05VKSAyMS41NzkgVGoKLVsxIDAgMCAxIDMwMy4yMzEgNTM5Ljc5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDMuMjMxIC01MzkuNzkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDMuMjMxIDUzOS43OTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXV0b2NvbmYpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDM1MS4wNTIgNTM5Ljc5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTEuMDUyIC01MzkuNzkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTMuNTQyIDUzOS43OTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShjb25cMDAyZ3VyZSkgMzcuNjI4NyBUagotLTI1MCBUSm0KLSgwLjkuNSkgMTkuOTI1MiBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSgxLjAuKSAxNC45NDM5IFRqCi1bMSAwIDAgMSA3MiA1MzcuNjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MjcuNjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTcuODc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF1dG9jb25mKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAxMTkuODIxIDUxNy44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5LjgyMSAtNTE3Ljg3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5LjgyMSA1MTcuODc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS01MDIgVEptCi0oYWRtaXJhYmxlKSAzOS44NDA0IFRqCi0tNDUyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNDUyIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvbmRlcmZ1bCkgMzMuNzUzMyBUagotLTQ1MiBUSm0KLSh0aG91Z2gpIDI3LjY3NjEgVGoKLS00NTIgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS00NTIgVEptCi0oaXMsKSA5LjEzNTcgVGoKLS01MDIgVEptCi0obWFpbmx5KSAyNy42NzYxIFRqCi0tNDUyIFRKbQotKGFzc2lzdHMpIDI1LjQ2NDQgVGoKLS00NTIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTQ1MiBUSm0KLShwb3J0YWJpbGl0eSkgNDEuNTE0MiBUagotLTQ1MiBUSm0KLShwcm9ibGVtcykgMzcuMDgwOCBUagotLTQ1MiBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi0tNDUyIFRKbQotKFVuaXgtbGlrKSAzMy43NjMzIFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi03MiA1MDUuOTIgVGQKLShwbGF0Zm9ybXMuKSA0MC42NzczIFRqCi0tMTM5OCBUSm0KLShCdXQpIDE0LjM5NiBUagotWzEgMCAwIDEgMTQ0Ljc4NCA1MDUuOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ0Ljc4NCAtNTA1LjkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDQuNzg0IDUwNS45MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTc0LjY3MiA1MDUuOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc0LjY3MiAtNTA1LjkyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzguNDU1IDUwNS45MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzbicpIDI2LjU2MDMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTM4MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzc5IFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0zODAgVEptCi0oaW4pIDcuNzUwOSBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMzgwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzgwIFRKbQotKHBvcnRhYmlsaXR5KSA0MS41MTQyIFRqCi0tMzc5IFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMzgwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zODAgVEptCi0oVW5peDspIDIyLjY5NDggVGoKLS00NDQgVEptCi0obW9zdCkgMTkuMzc3MyBUagotLTM4MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0oZGlmKSAxMS4wNjg0IFRqCi0yNSBUSm0KLShcMDAyY3VsdGllcykgMzEuNTUxNiBUagotNzIgNDkzLjk2NCBUZAotKGFwcGVhcikgMjYuNTUwMyBUagotLTI5NyBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0yOTYgVEptCi0ocG8pIDkuOTYyNiBUagotLTEgVEptCi0ocikgMy4zMTc1NSBUagotMSBUSm0KLSh0aW5nKSAxNS41MDE4IFRqCi0tMjk3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk3IFRKbQotKE1hYywpIDIwLjE5NDIgVGoKLS0zMDggVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yOTcgVEptCi0odG8pIDcuNzUwOSBUagotLTI5NyBUSm0KLShNaWNyb3NvZnQnKSA0Mi42MSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI5NiBUSm0KLShvcGVyYXRpbmcpIDM3LjYyODcgVGoKLS0yOTcgVEptCi0oc3lzdGVtcy4pIDM0LjA0MjIgVGoKLVsxIDAgMCAxIDM2MS4zMzkgNDkzLjk2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjEuMzM5IC00OTMuOTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjEuMzM5IDQ5My45NjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXV0b2NvbmYpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQwOS4xNiA0OTMuOTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwOS4xNiAtNDkzLjk2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEyLjExNiA0OTMuOTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjk3IFRKbQotKGhlbHApIDE3LjE1NTYgVGoKLS0yOTYgVEptCi0oaW4pIDcuNzUwOSBUagotLTI5NyBUSm0KLSh0aG9zZSkgMjEuMDMxIFRqCi0tMjk3IFRKbQotKGNhc2VzLCkgMjMuNTExNyBUagotLTMwOCBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDgyLjAwOSBUZAotKGJyaW5ncykgMjQuOTA2NSBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0od2hvbGUpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0obG9hZCkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0oY29tcGxlKSAyOS4zMjk5IFRqCi0xNSBUSm0KLSh4aXR5KSAxNS41MDE4IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0NzkuODUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjkuODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ2MC4wOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTW9zdCkgMjAuNDgzMSBUagotLTM5MiBUSm0KLShwZW9wbGUpIDI2LjU2MDMgVGoKLS0zOTIgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzkzIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzkyIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0zOTIgVEptCi0odG8pIDcuNzUwOSBUagotLTM5MiBUSm0KLShjb21waWxlKSAzMi4wOTk1IFRqCi0tMzkzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM5MiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzkyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzkyIFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0zOTMgVEptCi0odW5kZXIpIDIyLjY4NDggVGoKLS0zOTIgVEptCi0oVW5peCkgMTkuOTI1MiBUagotLTM5MiBUSm0KLShzdHJhaWdodCkgMjkuODg3OCBUagotLTM5MiBUSm0KLShvdXQtb2YtdGhlLWJveCwpIDYwLjU5MjUgVGoKLS00MjggVEptCi0oc28pIDguODU2NzUgVGoKLS0zOTIgVEptCi0odG8pIDcuNzUwOSBUagotLTM5MyBUSm0KLShzcGVhaywpIDI1LjE3NTUgVGoKLTcyIDQ0OC4xMzYgVGQKLShlc3BlY2lhbGx5KSAzOS44NDA0IFRqCi0tMjUwIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oR05VKSAyMS41NzkgVGoKLS0yNTAgVEptCi0oQykgNi42NDUwNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUuKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSA3MiA0NDUuOTc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MzYuMDE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjYuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZXJlKSAyMy4yMzI4IFRqCi0tMjU5IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU5IFRKbQotKGNvdXBsZSkgMjYuNTYwMyBUagotLTI1OCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTU5LjU2MSA0MjYuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OS41NjEgLTQyNi4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS41NjEgNDI2LjIxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShfX2lubGluZV9fKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyMTkuMzM3IDQyNi4yMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE5LjMzNyAtNDI2LjIxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIxLjkxMyA0MjYuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRpcmVjdGkpIDI1LjQ1NDQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNTkgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTkgVEptCi0oY29kZS4pIDIxLjMgVGoKLS02NzEgVEptCi0oR05VKSAyMS41NzkgVGoKLS0yNTkgVEptCi0oQykgNi42NDUwNSBUagotLTI1OCBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMzUyLjU4NyA0MjYuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Mi41ODcgLTQyNi4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Mi41ODcgNDI2LjIxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShnY2MpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDM3MC41MiA0MjYuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3MC41MiAtNDI2LjIxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzcwLjUyIDQyNi4yMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yNTkgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjU4IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjU5IFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTggVEptCi0odG8pIDcuNzUwOSBUagotLTI1OSBUSm0KLShoYW5kbGUpIDI2LjU2MDMgVGoKLS0yNTkgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLS02NzEgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0yNTkgVEptCi0oeW91JykgMTguMjYxNCBUagotNTAgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTcyIDQxNC4yNjMgVGQKLShub3QpIDEyLjczMjIgVGoKLS0yNzkgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI3OSBUSm0KLShHTlUpIDIxLjU3OSBUagotLTI3OSBUSm0KLShDLCkgOS4xMzU3IFRqCi0tMjc5IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNzkgVEptCi0oQykgNi42NDUwNSBUagotLTI3OSBUSm0KLShjb21waWxlcikgMzUuNDE3IFRqCi0tMjc5IFRKbQotKHNob3VsZG4nKSAzNC44NjkxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNzkgVEptCi0oc2VlKSAxMi43MjIyIFRqCi0tMjc5IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0yNzkgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjc5IFRKbQotKGFsbC4pIDEyLjQ1MzMgVGoKLS03OTQgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0yNzkgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI3OSBUSm0KLShjb21waWxlcikgMzUuNDE3IFRqCi0tMjc5IFRKbQotKGRvZXMsKSAyMC43NTIxIFRqCi0tMjg2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3OSBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNzkgVEptCi0ocmVhc29uLCkgMjguNDkzIFRqCi0tMjg3IFRKbQotKHNlZSkgMTIuNzIyMiBUagotLTI3OSBUSm0KLSh0aGVtKSAxOS45MjUyIFRqCi0tMjc5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi03MiA0MDIuMzA4IFRkCi0oZG9lc24nKSAyNi41NjAzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yODMgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjgzIFRKbQotKHRoZW0sKSAyMi40MTU5IFRqCi0tMjkxIFRKbQotKGp1c3QpIDE0LjM5NiBUagotWzEgMCAwIDEgMTY0LjE2NyA0MDIuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC4xNjcgLTQwMi4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NC4xNjcgNDAyLjMwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgjZGVmaW5lKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyMDYuMDEgNDAyLjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuODE5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwOC44MjkgLTQwMi4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwOC44MjkgNDAyLjMwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShfX2lubGluZV9fKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyNjguNjA1IDQwMi4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY4LjYwNSAtNDAyLjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjcxLjQyNSA0MDIuMzA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yODMgVEptCi0oYmUpIDkuNDA0NjkgVGoKLVsxIDAgMCAxIDI5NC4yMiA0MDIuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NC4yMiAtNDAyLjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjIyIDQwMi4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLykgNS45Nzc1NiBUagotMzAwLjE5NyA0MDAuNTY1IFRkCi0oKikgNS45Nzc1NiBUagotLTYwMCBUSm0KLSgqKSA1Ljk3NzU2IFRqCi0zMTguMTMgNDAyLjMwOCBUZAotKC8pIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDMyNC4xMDggNDAyLjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjQuMTA4IC00MDIuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjQuMTA4IDQwMi4zMDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTgxOCBUSm0KLShPbmUpIDE2LjU5NzcgVGoKLS0yODMgVEptCi0oZWFzeSkgMTcuNzAzNSBUagotLTI4MyBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXkpIDkuNDA0NjkgVGoKLS0yODMgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MyBUSm0KLShkbykgOS45NjI2IFRqCi0tMjgzIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4MyBUSm0KLShpcykgNi42NDUwNSBUagotLTI4MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgzIFRKbQotKGNvbXBpbGUpIDMyLjA5OTUgVGoKLS0yODMgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI4MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODMgVEptCi0oXDAwM2FnKSAxNC45NDM5IFRqCi1bMSAwIDAgMSA3MiAzOTAuMzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTAuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzOTAuMzUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1EX19pbmxpbmVfXz0pIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE0OS43MDkgMzkwLjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDkuNzA5IC0zOTAuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDkuNzA5IDM5MC4zNTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odW5kZXJzdG9vZCkgNDQuMjczOCBUagotLTI1MCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0yNTAgVEptCi0oVW5peCkgMTkuOTI1MiBUagotLTI1MCBUSm0KLShjb21waWxlcnMuKSA0MS43ODMxIFRqCi1bMSAwIDAgMSA3MiAzODguMTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzguMjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjguNDM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMzIxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTMyMSBUSm0KLShzdGlsbCkgMTQuOTUzOSBUagotLTMyMiBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzIxIFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHRpZXMsKSAzNC4wNDIyIFRqCi0tMzM5IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTMyMSBUSm0KLShjb21waWxpbmcpIDQwLjQwODMgVGoKLS0zMjEgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTMyMiBUSm0KLSh0KSAyLjc2OTYgVGoKLTEgVEptCi0oaGUpIDkuNDA0NjkgVGoKLS0zMjIgVEptCi0obWFjcm8pIDI0Ljg5NjUgVGoKLVsxIDAgMCAxIDMxMC4yOTUgMzY4LjQzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTAuMjk1IC0zNjguNDM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuMjk1IDM2OC40MzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSSUNUX0FOU0kpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDM5My45ODEgMzY4LjQzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTMuOTgxIC0zNjguNDM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTcuMTggMzY4LjQzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZVwwMDJuZWQuKSAzMS44MjA1IFRqCi0tNTI0IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0zMjEgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzIxIFRKbQotKGVuYWJsZSkgMjYuMDAyNCBUagotLTMyMSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zMjIgVEptCi0odG8pIDcuNzUwOSBUagotNzIgMzU2LjQ4IFRkCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWxkKSAxNS41MDE4IFRqCi0tMzIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyMSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzIyIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMjEgVEptCi0oYSkgNC40MjMzOSBUagotLTMyMSBUSm0KLShzdHJpY3RseSkgMjcuNjc2MSBUagotLTMyMSBUSm0KLShBTlNJKSAyMy4yNDI3IFRqCi0tMzIxIFRKbQotKGNvbXBsaWFudCkgMzkuODUwNCBUagotLTMyMiBUSm0KLShlbikgOS40MDQ2OSBUagotNDAgVEptCi0odmlyb25tZW50LikgNDMuNDQ2OSBUagotLTEwNDcgVEptCi0oQnVpbGRpbmcpIDM0Ljg3OTEgVGoKLS0zMjEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzIxIFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0zMjIgVEptCi0oaXRzZWxmKSAxOS45MjUyIFRqCi0tMzIxIFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0zMjEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMjEgVEptCi0oZGFuZ2Vyb3VzKSA0MC45NDYzIFRqCi0tMzIyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi03MiAzNDQuNTI1IFRkCi0obm90KSAxMi43MzIyIFRqCi0tMjYwIFRKbQotKHN1cHBvcnRlZCwpIDQxLjc4MzEgVGoKLS0yNjMgVEptCi0oc2luY2UpIDIwLjQ3MzEgVGoKLS0yNjAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjYwIFRKbQotKHJlbW8pIDIwLjQ3MzEgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotWzEgMCAwIDEgMjA0LjQ5OCAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC40OTggLTM0NC41MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC40OTggMzQ0LjUyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjM0LjM4NiAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNC4zODYgLTM0NC41MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNC4zODYgMzQ0LjUyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjYwIFRKbQotKGNoZWNrcykgMjcuMTA4MiBUagotLTI2MCBUSm0KLShhZykgOS40MDQ2OSBUagotNSBUSm0KLShhaW5zdCkgMTguODE5NCBUagotLTI2MSBUSm0KLShjb21wcmVzc2kpIDQwLjM5ODMgVGoKLTEgVEptCi0obmcpIDkuOTYyNiBUagotLTI2MSBUSm0KLShkaXJlY3RvcmllcywpIDQ0LjU0MjggVGoKLS0yNjIgVEptCi0oc3ltYm9saWMpIDM2LjUzMjkgVGoKLS0yNjEgVEptCi0obGlua3MsKSAyMS44Njc5IFRqCi0tMjYyIFRKbQotKGRlKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2aWNlcywpIDIyLjk2MzggVGoKLS0yNjMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjAgVEptCi0ob3RoZXIpIDIwLjQ3MzEgVGoKLTcyIDMzMi41NyBUZAotKG5vdC1yZWFsbHktYS1cMDAybGUpIDYyLjUyNTMgVGoKLS0yNTAgVEptCi0oZW50aXRpZXMuKSAzMS4yNzI2IFRqCi0tNjIwIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oY2F1c2UpIDIyLjEyNjkgVGoKLS0yNTAgVEptCi0oXDAwMmxlc3lzdGVtKSA0MC40MDgzIFRqCi0tMjUwIFRKbQotKGNvcnJ1cHRpb24hKSA0NC44MjE3IFRqCi1bMSAwIDAgMSA3MiAzMzAuNDEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjAuNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxMC42NTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oT25lKSAxNi41OTc3IFRqCi0tMzkyIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMzkxIFRKbQotKHRoaW5nOikgMjMuMjUyNyBUagotLTU5NCBUSm0KLShpZikgNi4wODcxNSBUagotLTM5MSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zOTIgVEptCi0oY3JlYXRlKSAyMy43ODA3IFRqCi0tMzkxIFRKbQotKGEpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDIxMC44NzkgMzEwLjY1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuODc5IC0zMTAuNjUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuODc5IDMxMC42NTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI0MC43NjcgMzEwLjY1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDAuNzY3IC0zMTAuNjUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDQuNjY5IDMxMC42NTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmluYXJ5KSAyNS40NTQ0IFRqCi0tMzkyIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTM5MSBUSm0KLShwdWJsaWMpIDI0LjkwNjUgVGoKLS0zOTIgVEptCi0oZGlzdHJpYikgMjUuNDY0NCBUagotMjAgVEptCi0odXRpb24sKSAyMi45NzM4IFRqCi0tNDI3IFRKbQotKHBsZWFzZSkgMjQuODk2NSBUagotLTM5MiBUSm0KLShjb25zaWRlcikgMzMuNzUzMyBUagotLTM5MSBUSm0KLShsaW5raW5nKSAyOC4yMzQgVGoKLS0zOTIgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zOTEgVEptCi0oc3RhdGljYWxseSkgMzUuOTc0OSBUagotLTM5MiBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgNTIyLjA2NyAzMTAuNjUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyMi4wNjcgLTMxMC42NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyMi4wNjcgMzEwLjY1MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShnY2MpIDE3LjkzMjcgVGoKLTcyIDI5OC42OTcgVGQKLSgtc3RhdGljKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMTMuODQzIDI5OC42OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjg0MyAtMjk4LjY5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTEzLjg0MyAyOTguNjk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLikgNS44MDgyIFRqCi0tNjIwIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yMCBUSm0KLShvaWRzKSAxNi42MDc3IFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHNvcnRzKSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGxpYnJhcnktdikgMzQuODU5MSBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGlzc3VlcykgMjMuODAwNyBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG90aGVycykgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oZW5jb3VudGVyKSAzOS4yODI1IFRqCi0tMjUwIFRKbQotKGxhdGVyKSAxNy43MDM1IFRqCi0tMjUwIFRKbQotKG9uLikgMTIuNDUzMyBUagotWzEgMCAwIDEgNzIgMjk2LjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODYuNTc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzYuNzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjk2IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5NiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVpbGQpIDE1LjUwMTggVGoKLVsxIDAgMCAxIDEyMi43MDkgMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjIuNzA5IC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjIuNzA5IDI3Ni43NzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE1Mi41OTYgMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTIuNTk2IC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTUuNTQ1IDI3Ni43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob24pIDkuOTYyNiBUagotLTI5NiBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbjMyLCkgMjAuMjA0MiBUagotLTMwNyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTYgVEptCi0obXVzdCkgMTkuMzc3MyBUagotLTI5NiBUSm0KLShzZXQpIDExLjA2ODQgVGoKLVsxIDAgMCAxIDI1NC45NjUgMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTQuOTY1IC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTQuOTY1IDI3Ni43NzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfVU5JWCkgNDEuODQyOSBUagotWzEgMCAwIDEgMjk2LjgwOCAyNzYuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Ni44MDggLTI3Ni43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS43NTYgMjc2Ljc3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjk2IFRKbQotKDApIDQuOTgxMyBUagotLTI5NiBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzM1LjcyIDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM1LjcyIC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzUuNzIgMjc2Ljc3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9MQ0NXSU4zMikgNjUuNzUzMiBUagotWzEgMCAwIDEgNDAxLjQ3MyAyNzYuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwMS40NzMgLTI3Ni43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNC40MjIgMjc2Ljc3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjk2IFRKbQotKDEsKSA3LjQ3MTk1IFRqCi0tMzA3IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk2IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgNDY3LjE1OSAyNzYuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ny4xNTkgLTI3Ni43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2Ny4xNTkgMjc2Ljc3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMi5jKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA1MDkuMDAyIDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA5LjAwMiAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA5LjAwMiAyNzYuNzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMDcgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi03MiAyNjQuODI0IFRkCi0oY29tcGlsaW5nLikgNDIuODk5IFRqCi0tMzEwIFRKbQotKE90aGVyd2lzZSkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocmVzdWx0aW5nKSAzNC44NjkxIFRqCi0tMjUwIFRKbQotKGJpbmFyeSkgMjUuNDU0NCBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI2Mi42NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI1Mi43MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIzMC4wNzEgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDQuMy4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oUmVwb3IpIDU5LjY4MjQgVGoKLS0yMCBUSm0KLSh0aW5nKSAzNy44NjcgVGoKLS0yNzggVEptCi0oYikgMTIuNjIyMyBUagotMjAgVEptCi0odWdzKSAzNi43MzA4IFRqCi1bMSAwIDAgMSA3MiAyMjUuNDc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMTUuNTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMDguMTUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEkpIDMuMzE3NTUgVGoKLS0yMjggVEptCi0odHJpZWQpIDE4LjI2MTQgVGoKLS0yMjggVEptCi0ocHJldHR5KSAyMy4yNDI3IFRqCi0tMjI4IFRKbQotKGhhcmQpIDE3LjcwMzUgVGoKLS0yMjggVEptCi0odG8pIDcuNzUwOSBUagotLTIyOCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yMjggVEptCi0oc3VyZSkgMTYuNTk3NyBUagotWzEgMCAwIDEgMTk2LjI1IDIwOC4xNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjI1IC0yMDguMTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTYuMjUgMjA4LjE1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjI2LjEzOCAyMDguMTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNi4xMzggLTIwOC4xNTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyOC40MDkgMjA4LjE1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTIyOCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLS0yMjggVEptCi0oZnJlZSwpIDE3Ljk3MjUgVGoKLS0yMzIgVEptCi0oYm90aCkgMTcuNzEzNSBUagotLTIyOCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjI4IFRKbQotKGRlc2lnbikgMjYuMDEyMyBUagotLTIyOCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyOCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjI4IFRKbQotKHRlc3RpbmcuKSAyOS4wNjA5IFRqCi0tNjA1IFRKbQotKEhvcGVmdWxseSkgNDAuMzk4MyBUagotLTIyOCBUSm0KLSh5b3UnKSAxOC4yNjE0IFRqCi0xMCBUSm0KLShsbCkgNS41MzkyMSBUagotLTIyOCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTIyOCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjI4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjggVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotNzIgMTk2LjE5OCBUZAotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLShzZWN0aW9uKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKHJlYWwuKSAxNy40MjQ2IFRqCi1bMSAwIDAgMSA3MiAxOTYuMDk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODYuMTM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzQuMjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTmUpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ0aGVsZXNzLCkgMzcuMzQ5OCBUagotLTMxMyBUSm0KLShpZikgNi4wODcxNSBUagotWzEgMCAwIDEgMTM3Ljc1MSAxNzQuMjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MSAtMTc0LjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzcuNzUxIDE3NC4yOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTY3LjYzOSAxNzQuMjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY3LjYzOSAtMTc0LjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzAuNjM0IDE3NC4yOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkaWVzKSAxNi4wNDk3IFRqCi0tMzAxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMDAgVEptCi0oYSkgNC40MjMzOSBUagotLTMwMSBUSm0KLShzZSkgOC4yOTg4NSBUagotMTUgVEptCi0oZ21lbnRhdGlvbikgNDQuODMxNyBUagotLTMwMCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhdWx0LCkgMTcuNDM0NiBUagotLTMxNCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzAwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXMpIDguODU2NzUgVGoKLS0zMDEgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0zMDAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMDEgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0zMDEgVEptCi0oaW50ZXJuYWwpIDMwLjQzNTcgVGoKLS0zMDAgVEptCi0oYXNzZXJ0aW9uKSAzNS40MTcgVGoKLS0zMDEgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsdXJlLCkgMjUuMTc1NSBUagotLTMxMyBUSm0KLShpdCkgNS41MzkyMSBUagotLTMwMSBUSm0KLSh3aWwpIDEyLjczMjIgVGoKLTEgVEptCi0obCkgMi43Njk2IFRqCi0tMzAxIFRKbQotKGFzaykgMTMuMjgwMSBUagotLTMwMSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zMDAgVEptCi0odG8pIDcuNzUwOSBUagotNzIgMTYyLjMyNSBUZAotKGVtYWlsKSAyMi4xMzY5IFRqCi0tMjQyIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMjQzIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNDIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMjQzIFRKbQotKHJlcG9ydC4pIDI2LjI4MTMgVGoKLS02MTUgVEptCi0oRXhwZXJpZW5jZSkgNDQuODExOCBUagotLTI0MiBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjQzIFRKbQotKHllYXJzKSAyMS4wMjExIFRqCi0tMjQyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjQyIFRKbQotKGZlZWRiYWNrKSAzNS45NTUgVGoKLS0yNDMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDIgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLS0yNDMgVEptCi0odXNlcnMpIDIwLjQ3MzEgVGoKLS0yNDIgVEptCi0oaW5kaWNhdGVzKSAzNS40MTcgVGoKLS0yNDMgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI0MiBUSm0KLShhbG1vc3QpIDI2LjU3MDMgVGoKLS0yNDIgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNDMgVEptCi0odGhlc2UpIDIwLjQ3MzEgVGoKLS0yNDIgVEptCi0ocHJvYmxlbXMpIDM3LjA4MDggVGoKLS0yNDMgVEptCi0oY2FuKSAxMy44MjgxIFRqCi03MiAxNTAuMzcgVGQKLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLSh0cmFjZWQpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShlaXRoZXIpIDIyLjY4NDggVGoKLS0yNTAgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVncykgMTMuODM4MSBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShoYXJkdykgMjQuODk2NSBUagotMTAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjUwIFRKbQotKHByb2JsZW1zLikgMzkuNTcxNCBUagotWzEgMCAwIDEgNzIgMTQ4LjIxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTk3LjM2MTFdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzIpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMzYgMzYKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC02Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDExNi4zMjggLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODIuNCAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk4LjcyOCA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1pc2NlbGxhbmVhKSA0OC4xMzkzIFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0OS4xNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNy4wOTM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMzEuNTE2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVjb21waWxlKSA0My4xNjc5IFRqCi0tMzA2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNiBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzA2IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMDYgVEptCi0obm8pIDkuOTYyNiBUagotLTMwNiBUSm0KLShvcHRpbWlzYXRpb24sKSA1Mi4zMTM2IFRqCi0tMzIwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzA2IFRKbQotKHNlZSkgMTIuNzIyMiBUagotLTMwNiBUSm0KLShpZikgNi4wODcxNSBUagotLTMwNiBUSm0KLShpdCkgNS41MzkyMSBUagotLTMwNiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3Jrcy4pIDE5LjY0NjIgVGoKLS05NTYgVEptCi0oQW5kL29yKSAyOC4yMjQgVGoKLS0zMDYgVEptCi0odHJ5KSAxMS4wNjg0IFRqCi0tMzA2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDYgVEptCi0oZGlmKSAxMS4wNjg0IFRqCi0yNSBUSm0KLShmZXJlbnQpIDIzLjIzMjggVGoKLS0zMDYgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTk1NiBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMzA2IFRKbQotKGhlYXJkKSAyMi4xMjY5IFRqCi0tMzA2IFRKbQotKGFsbCkgOS45NjI2IFRqCi04Ni45NDQgNjk4LjA4MiBUZAotKHNvcnRzKSAxOC44MTk0IFRqCi0tMjgyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjgyIFRKbQotKHN0b3JpZXMpIDI2LjAxMjMgVGoKLS0yODIgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yODMgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmlvdXMpIDI0LjM0ODYgVGoKLS0yODIgVEptCi0oXDAwM2EpIDkuOTYyNiBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yMCBUSm0KLShvdXJzKSAxNy4xNTU2IFRqCi0tMjgyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjgyIFRKbQotKEdOVSkgMjEuNTc5IFRqCi0tMjgyIFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yODIgVEptCi0oXChhbmQpIDE3LjcwMzUgVGoKLS0yODIgVEptCi0ob3RoZXIpIDIwLjQ3MzEgVGoKLS0yODMgVEptCi0oY29tcGlsZXJzXCkpIDQyLjYxIFRqCi0tMjgyIFRKbQotKGdlbmVyYXRpbmcpIDQyLjA1MjEgVGoKLS0yODIgVEptCi0oYmFkKSAxNC4zODYgVGoKLS0yODIgVEptCi0oY29kZSkgMTguODA5NCBUagotLTI4MiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDQ3Mi4xNDEgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuMTQxIC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzIuMTQxIDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDUwMi4wMjkgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDIuMDI5IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDIuMDI5IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI5MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4MiBUSm0KLShJJykgNi42MzUwOSBUagotNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi04Ni45NDQgNjg2LjEyNyBUZAotKHJ1bikgMTMuMjgwMSBUagotLTI1MCBUSm0KLShhY3Jvc3MpIDI0Ljg5NjUgVGoKLS0yNTAgVEptCi0odHcpIDkuOTYyNiBUagotMTAgVEptCi0obykgNC45ODEzIFRqCi0tMjUwIFRKbQotKHN1Y2gpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGFtcGxlcykgMzMuMjA1MyBUagotLTI1MCBUSm0KLShteXNlbGYuKSAyOS42MDg4IFRqCi1bMSAwIDAgMSAyMzcuNzY3IDY4Ni4xMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY1Ljc2NyAtMTIuMTE5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc0LjAwN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi43LlgpIDIyLjEzNjkgVGoKLS0yODAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0yNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODAgVEptCi0oR05VKSAyMS41NzkgVGoKLS0yNzkgVEptCi0oQykgNi42NDUwNSBUagotLTI4MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNzkgVEptCi0oa25vKSAxNC45NDM5IFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTI4MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgwIFRKbQotKGdlbmVyYXRlKSAzMy43NDMzIFRqCi0tMjc5IFRKbQotKGJhZCkgMTQuMzg2IFRqCi0tMjgwIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yNzkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI4MCBUSm0KLSh0aW1lKSAxNy43MTM1IFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0odGltZSwpIDIwLjIwNDIgVGoKLS0yODcgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjgwIFRKbQotKGhpZ2gpIDE3LjcxMzUgVGoKLS0yNzkgVEptCi0ob3B0aW1pc2F0aW9uKSA0OS44MjMgVGoKLS0yODAgVEptCi0obGUpIDcuMTkzIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVscy4pIDEzLjU1OTEgVGoKLS03OTcgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0yODAgVEptCi0oeW91KSAxNC45NDM5IFRqCi04Ni45NDQgNjUyLjI1NCBUZAotKGdldCkgMTIuMTc0MyBUagotLTI5NSBUSm0KLShwcm9ibGVtcywpIDM5LjU3MTQgVGoKLS0zMDcgVEptCi0odHJ5KSAxMS4wNjg0IFRqCi0tMjk2IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yOTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk2IFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLVsxIDAgMCAxIDIyMC4xMTYgNjUyLjI1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjAuMTE2IC02NTIuMjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuMTE2IDY1Mi4yNTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLU8yKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAyMzguMDQ5IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjk0MzggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDAuOTkzIC02NTIuMjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDAuOTkzIDY1Mi4yNTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWZvbWl0LWZyYW1lLXBvaW50ZXIpIDExOS41NTEgVGoKLVsxIDAgMCAxIDM2MC41NDQgNjUyLjI1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuOTQzOCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My40ODggLTY1Mi4yNTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My40ODggNjUyLjI1NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtZm5vLXN0cmVuZ3RoLXJlZHVjZSkgMTE5LjU1MSBUagotWzEgMCAwIDEgNDgzLjA0IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDgzLjA0IC02NTIuMjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODMuMDQgNjUyLjI1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tODkzIFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI5NSBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLTg2Ljk0NCA2NDAuMjk5IFRkCi0oc3BlY2lcMDAyY2FsbHkpIDQ1LjM3OTYgVGoKLVsxIDAgMCAxIDEzNC44MTQgNjQwLjI5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzQuODE0IC02NDAuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzQuODE0IDY0MC4yOTkgVGQKLS9GNjM3XzAgOS45NjI2IFRmCi0obm90KSAxMi43MzIyIFRqCi1bMSAwIDAgMSAxNDcuNTQ2IDY0MC4yOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ3LjU0NiAtNjQwLjI5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUwLjAzNiA2NDAuMjk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVzZSkgMTMuMjgwMSBUagotWzEgMCAwIDEgMTY1LjgwNyA2NDAuMjk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NS44MDcgLTY0MC4yOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NS44MDcgNjQwLjI5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtZnVucm9sbC1sb29wcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjQ5LjQ5MyA2NDAuMjk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0OS40OTMgLTY0MC4yOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0OS40OTMgNjQwLjI5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2MzguMTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MjguMTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNjE4LjM4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNDkgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjQ5IFRKbQotKG5vdGljZSkgMjQuMzQ4NiBUagotLTI0OCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0OSBUSm0KLShNYWspIDE4LjI2MTQgVGoKLTEwIFRKbQotKGVcMDAybGUpIDE3LjE1NTYgVGoKLS0yNDkgVEptCi0ocnVucykgMTcuMTU1NiBUagotLTI0OCBUSm0KLShzaXgpIDExLjYyNjQgVGoKLS0yNDkgVEptCi0odGVzdHMpIDE3LjcxMzUgVGoKLS0yNDkgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNDkgVEptCi0ocGFydCkgMTUuNDkxOCBUagotLTI0OSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWxkKSAxNS41MDE4IFRqCi0tMjQ5IFRKbQotKHByb2Nlc3MuKSAzMi4zNjg1IFRqCi0tNjE5IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0OSBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjQ4IFRKbQotKHBhc3NlcykgMjUuNDU0NCBUagotLTI0OSBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI0OSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0OSBUSm0KLSh0aGVzZSwpIDIyLjk2MzggVGoKLS0yNDkgVEptCi0oaXQnKSA4Ljg1Njc1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi04Ni45NDQgNjA2LjQyNiBUZAotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0ocHJldHR5KSAyMy4yNDI3IFRqCi0tMjUwIFRKbQotKGdvb2QpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0oXChiKSA4LjI5ODg1IFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLSgxMDAlXCkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oaW5kaWNhdGlvbikgMzkuODUwNCBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21waWxlcikgMzUuNDE3IFRqCi0tMjUwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShkb25lKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKGl0cykgOS40MTQ2NiBUagotLTI1MCBUSm0KLShqb2IpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oY29ycmVjdGx5KSAzNS40MDcxIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2MDQuMjY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTkuNzYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA1ODQuNTA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNTg0LjUwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgOTUuOTU1OCA1ODQuNTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk1Ljk1NTggLTU4NC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk1Ljk1NTggNTg0LjUwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTI1Ljg0NCA1ODQuNTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNS44NDQgLTU4NC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyOC4yMiA1ODQuNTA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNyYXNoZXMpIDI5LjMxOTkgVGoKLS0yMzkgVEptCi0ocmFuZG9tbHkpIDM4LjE4NjYgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNDAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjM5IFRKbQotKGNyYXNoZSkgMjUuNDQ0NSBUagotMSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjM5IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTIzOSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMzggVEptCi0ocmVwZWF0YWJsZSwpIDQzLjQyNyBUagotLTI0MSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzkgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjM4IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yMzkgVEptCi0oYSkgNC40MjMzOSBUagotLTIzOCBUSm0KLShcMDAzYWspIDE0Ljk0MzkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzOSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yMzggVEptCi0oc3Vic3lzdGVtLikgNDQuMDA0OCBUagotWzEgMCAwIDEgNTEwLjExMiA1ODQuNTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMC4xMTIgLTU4NC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMC4xMTIgNTg0LjUwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNTQwIDU4NC41MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNTcyLjU1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWFsbHkpIDIyLjY4NDggVGoKLS0yNTQgVEptCi0oaGFtbWVycykgMzYuNTIyOSBUagotLTI1MyBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjU0IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MyBUSm0KLShoaWVyYXJjaCkgMzIuNjM3NSBUagotNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTUgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTMgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNTQgVEptCi0oaXQnKSA4Ljg1Njc1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjU0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTMgVEptCi0oYml0KSAxMC41MjA1IFRqCi0tMjU0IFRKbQotKG1hcikgMTUuNDkxOCBUagotMTggVEptCi0oZ2luYWwsKSAyMi40MTU5IFRqCi0tMjU0IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1NCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNTMgVEptCi0oZ2V0KSAxMi4xNzQzIFRqCi0tMjU0IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjUzIFRKbQotKHByb2JsZW1zLikgMzkuNTcxNCBUagotLTY0MiBUSm0KLShEaXR0bykgMjAuNDgzMSBUagotLTI1NCBUSm0KLShpZikgNi4wODcxNSBUagotLTI1MyBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjU0IFRKbQotKGRpc2spIDE2LjYwNzcgVGoKLTg2Ljk0NCA1NjAuNTk4IFRkCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oSS9PKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHN1YnN5c3RlbSkgNDEuNTE0MiBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShzbG8pIDExLjYyNjQgVGoKLTI1IFRKbQotKHdseSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWxpbmcuKSAyNS4xODU1IFRqCi0tNjIwIFRKbQotKFkpIDcuMTkzIFRqCi0xMTEgVEptCi0odXAsKSAxMi40NTMzIFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLShyZWFsbHkpIDIyLjY4NDggVGoKLS0yNTAgVEptCi0oZG9lcykgMTguMjYxNCBUagotLTI1MCBUSm0KLShoYXBwZW4uKSAzMS4yNjI2IFRqCi1bMSAwIDAgMSAzNDUuMTQzIDU2MC41OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjczLjE0MyAtMTIuMTE5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQ4LjQ3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDUzOC42OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUKSA2LjA4NzE1IFRqCi0zNSBUSm0KLShyeSkgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZGlmKSAxMS4wNjg0IFRqCi0yNSBUSm0KLShmZXJlbnQpIDIzLjIzMjggVGoKLS0yNTAgVEptCi0obWFjaGluZSkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLSh0eXBlLCkgMTkuNjQ2MiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLS0yNTAgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1MCBUSm0KLShyZXBlYXQpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2JsZW0uKSAzNS42OTYgVGoKLVsxIDAgMCAxIDcyIDUzNi41MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xOS43NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01MTYuNzYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDUxNi43NjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1MTYuNzYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTUxNi43NjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1MTYuNzYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yMjkgVEptCi0oaXNuJykgMTQuOTQzOSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjMwIFRKbQotKHJlYWxseSkgMjIuNjg0OCBUagotLTIyOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjI5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcsKSAxMi40NTMzIFRqCi0tMjM0IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTIyOSBUSm0KLSguLi4pIDcuNDcxOTUgVGoKLS0zMDMgVEptCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDIxMi4yMzIgNTE2Ljc2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuMjMyIC01MTYuNzYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTIuMjMyIDUxNi43NjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI0Mi4xMiA1MTYuNzYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0Mi4xMiAtNTE2Ljc2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ0LjQwNSA1MTYuNzYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRlbGxzKSAxNi42MDc3IFRqCi0tMjI5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTIzMCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjI5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTIyOSBUSm0KLShpcykgNi42NDUwNSBUagotLTIzMCBUSm0KLShjb3JydXB0ZWQpIDM4LjE3NjcgVGoKLS0yMjkgVEptCi0ob24pIDkuOTYyNiBUagotLTIzMCBUSm0KLShkZWNvbXByZXNzaW9uLCkgNjIuMjU2MyBUagotLTIzMyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyOSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzAgVEptCi0ob2J0YWluZWQpIDM0LjMxMTIgVGoKLS0yMjkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjI5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotODYuOTQ0IDUwNC44MDcgVGQKLSh2aWEpIDEyLjE3NDMgVGoKLS0yNjIgVEptCi0oRlRQKSAxNy4xNjU2IFRqCi0xMTEgVEptCi0oLCkgMi40OTA2NSBUagotLTI2MyBUSm0KLSh0aGVyZSkgMTkuOTE1MiBUagotLTI2MiBUSm0KLShpcykgNi42NDUwNSBUagotLTI2MiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjYyIFRKbQotKHBvc3NpYmlsaXR5KSA0MS41MjQxIFRqCi0tMjYzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNjIgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjYyIFRKbQotKGZvcikgMTEuNjE2NCBUagotMTggVEptCi0oZ290KSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjIgVEptCi0odGVsbCkgMTIuNzMyMiBUagotLTI2MiBUSm0KLShGVFApIDE3LjE2NTYgVGoKLS0yNjMgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MiBUSm0KLShkbykgOS45NjI2IFRqCi0tMjYyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNjIgVEptCi0oYmluYXJ5KSAyNS40NTQ0IFRqCi0tMjYzIFRKbQotKG1vZGUpIDIyLjEzNjkgVGoKLS0yNjIgVEptCi0odHJhbnNmZXIpIDMwLjQyNTggVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02OTQgVEptCi0oVGhhdCkgMTguMjYxNCBUagotLTI2MiBUSm0KLShhYnNvbHV0ZWx5KSA0MC45NTYyIFRqCi0tMjYyIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNjMgVEptCi0oY2F1c2UpIDIyLjEyNjkgVGoKLTg2Ljk0NCA0OTIuODUyIFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKG5vbi1kZWNvbXByZXNzaWJsZS4pIDgyLjcyOTQgVGoKLS02MjAgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdScpIDEzLjI4MDEgVGoKLTEwIFRKbQotKGxsKSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0cmFuc2ZlcikgMzAuNDI1OCBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShhZykgOS40MDQ2OSBUagotNSBUSm0KLShhaW4uKSAxNC42NjQ5IFRqCi1bMSAwIDAgMSAzNTEuMzQgNDkyLjg1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzkuMzQgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4MC43MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ3MC45MzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yMzUgVEptCi0oeW91JykgMTguMjYxNCBUagotNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjM2IFRKbQotKGluY29yKSAyMC40NzMxIFRqCi0xIFRKbQotKHApIDQuOTgxMyBUagotLTEgVEptCi0ob3IpIDguMjk4ODUgVGoKLTEgVEptCi0oYXRlZCkgMTYuNTk3NyBUagotWzEgMCAwIDEgMTYzLjAzNiA0NzAuOTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2My4wMzYgLTQ3MC45MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2My4wMzYgNDcwLjkzNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMjEwLjg1NiA0NzAuOTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC44NTYgLTQ3MC45MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMy4yIDQ3MC45MzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW50bykgMTUuNTAxOCBUagotLTIzNSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjM1IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yMzYgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTIzNSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIzNSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yMzYgVEptCi0oZ2V0KSAxMi4xNzQzIFRqCi0xIFRKbQotKHRpbmcpIDE1LjUwMTggVGoKLS0yMzYgVEptCi0ocHJvYmxlbXMsKSAzOS41NzE0IFRqCi0tMjM4IFRKbQotKHBsZWFzZSwpIDI3LjM4NzIgVGoKLS0yMzggVEptCi0ocGxlYXNlLCkgMjcuMzg3MiBUagotLTIzOCBUSm0KLShwbGVhc2UsKSAyNy4zODcyIFRqCi0tMjM4IFRKbQotKGNoZWNrKSAyMy4yMzI4IFRqCi0tMjM2IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLTcyIDQ1OC45NzkgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0ocGFyYW1ldGVycykgNDMuNzA1OSBUagotLTI0MyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNDIgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjQyIFRKbQotKHBhc3NpbmcpIDI5Ljg4NzggVGoKLS0yNDMgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0MiBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI0MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQ0IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI0MiBUSm0KLShjb3JyZWN0LCkgMzAuMTQ2OCBUagotLTI0NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI0MyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjQyIFRKbQotKGFjY29yZGFuY2UpIDQ0LjgwMTggVGoKLS0yNDIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI0MyBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShkb2N1bWVudGF0aW9uKSA1OS4yMTc3IFRqCi0tMjQzIFRKbQotKHNheXMpIDE3LjE1NTYgVGoKLTcyIDQ0Ny4wMjQgVGQKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShhbGxvKSAxNC45NDM5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZS4pIDE5LjA4ODMgVGoKLS0zMTAgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHRyaWVkKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHJvYikgMTMuMjgwMSBUagotMjAgVEptCi0odXN0KSAxMS42MjY0IFRqCi0tMjUwIFRKbQotKGFnKSA5LjQwNDY5IFRqCi01IFRKbQotKGFpbnN0KSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKHN1Y2gpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0ocHJvYmxlbXMsKSAzOS41NzE0IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShJJ20pIDE0LjM4NiBUagotLTI1MCBUSm0KLShzdXJlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4nKSAxMi43MjIyIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0oc3VjY2VlZGVkLikgNDMuNDI3IFRqCi1bMSAwIDAgMSA3MiA0NDQuODY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MzQuOTA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjUuMTA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEZpbmFsbHkpIDI4LjIzNCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTMyNCBUSm0KLShpZikgNi4wODcxNSBUagotLTMxMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDkgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMwOSBUSm0KLShjb21tZW50cykgNDAuOTU2MiBUagotLTMxMCBUSm0KLShkb24nKSAxOC4yNjE0IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMDkgVEptCi0oaGVscCwpIDE5LjY0NjIgVGoKLS0zMjQgVEptCi0oeW91JykgMTguMjYxNCBUagotMTAgVEptCi0obGwpIDUuNTM5MjEgVGoKLS0zMTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMwOSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA5IFRKbQotKHNlbmQpIDE4LjI2MTQgVGoKLS0zMTAgVEptCi0obWUpIDEyLjE3NDMgVGoKLS0zMDkgVEptCi0oYSkgNC40MjMzOSBUagotLTMwOSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLS0zMTAgVEptCi0ocmVwb3J0LikgMjYuMjgxMyBUagotLTk3NiBUSm0KLShObykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMjQgVEptCi0oaXQnKSA4Ljg1Njc1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzEwIFRKbQotKGp1c3QpIDE0LjM5NiBUagotLTMwOSBUSm0KLShhbWF6aW5nKSAzMy43NTMzIFRqCi0tMzA5IFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMzEwIFRKbQotKG1hbikgMTcuMTU1NiBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi03MiA0MTMuMTUxIFRkCi0ocGVvcGxlKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oc2VuZCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShtZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTI1MCBUSm0KLShyZXBvcnQpIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0oc2F5aW5nKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKHNvbWV0aGluZykgNDEuNTE0MiBUagotLTI1MCBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGU6KSA3LjE5MyBUagotWzEgMCAwIDEgNzIgNDEwLjk5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC00MDEuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA0MDEuNjI5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGNyYXNoZWQpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShzZWdtZW50YXRpb24pIDcxLjczMDcgVGoKLS00MjYgVEptCi0oZmF1bHQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ob24pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obXkpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obWFjaGluZSkgNDEuODQyOSBUagotWzEgMCAwIDEgNzIgMzg2LjA4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzYuMTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjQuMTY5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi0tMjQxIFRKbQotKGFic29sdXRlbHkpIDQwLjk1NjIgVGoKLS0yNDEgVEptCi0obm90aGluZykgMzAuNDQ1NyBUagotLTI0MSBUSm0KLShlbCkgNy4xOTMgVGoKLTEgVEptCi0oc2UuKSAxMC43ODk1IFRqCi0tNjE0IFRKbQotKE5lZWRsZXNzKSAzNS45NjUgVGoKLS0yNDEgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MSBUSm0KLShzYXkpIDEzLjI4MDEgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNDMgVEptCi0oYSkgNC40MjMzOSBUagotLTI0MSBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjQwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNDEgVEptCi0ocmVwb3J0KSAyMy43OTA3IFRqCi0tMjQxIFRKbQotKGlzKSA2LjY0NTA1IFRqCi1bMSAwIDAgMSAzMjQuNjgxIDM2NC4xNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI0LjY4MSAtMzY0LjE2OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI0LjY4MSAzNjQuMTY5IFRkCi0vRjYzN18wIDkuOTYyNiBUZgotKHRvdGFsbHkpIDI1LjQ2NDQgVGoKLTU1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNDMgVEptCi0odXR0ZXJseSkgMjYuMDEyMyBUagotNTUgVEptCi0oLCkgMi40OTA2NSBUagotLTI0MiBUSm0KLShjb21wbGV0ZWx5KSA0My4xNTggVGoKLS0yNDEgVEptCi0oYW5kKSAxNC45NDM5IFRqCi0tMjQxIFRKbQotKGNvbXByKSAyNS40NTQ0IFRqCi0zNyBUSm0KLShlaGVuc2l2ZWx5KSA0MS40OTQyIFRqCi0tMjQxIFRKbQotKDEwMCUpIDIzLjI0MjcgVGoKLTcyIDM1Mi4yMTQgVGQKLSh1c2VsZXNzOykgMzEuNTQxNiBUagotLTI1NyBUSm0KLShhKSA0Ljk4MTMgVGoKLS0yNTUgVEptCi0od2FzdGUpIDIyLjY5NDggVGoKLS0yNTUgVEptCi0ob2YpIDcuNzUwOSBUagotLTI1NSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjU1IFRKbQotKHRpbWUpIDE3LjE1NTYgVGoKLTEwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTYgVEptCi0obXkpIDExLjYxNjQgVGoKLS0yNTUgVEptCi0odGltZSkgMTcuMTU1NiBUagotMTAgVEptCi0oLCkgMi40OTA2NSBUagotLTI1NiBUSm0KLShhbmQpIDE0Ljk0MzkgVGoKLS0yNTUgVEptCi0obmV0KSAxMi4xNzQzIFRqCi0tMjU1IFRKbQotKGJhbmR3aWR0aCkgNDIuMDcyMSBUagotWzEgMCAwIDEgMzAyLjU3NCAzNTIuMjE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMi41NzQgLTM1Mi4yMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMi41NzQgMzUyLjIxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNjUwIFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGl0aCkgMTAuNTIwNSBUagotLTI1NCBUSm0KLShubykgOS45NjI2IFRqCi0tMjU1IFRKbQotKGRldGFpbHMpIDI2LjAxMjMgVGoKLS0yNTUgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjU1IFRKbQotKGFsbCwpIDEyLjQ1MzMgVGoKLS0yNTYgVEptCi0odGhlcmUnKSAyMy4yMzI4IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjU1IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMjU1IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTUgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjU1IFRKbQotKHBvc3NpYmx5KSAzMy4yMTUzIFRqCi0tMjU1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLShnaW4pIDEyLjczMjIgVGoKLTcyIDM0MC4yNTkgVGQKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKFwwMDJndXJlKSAyMy4yNDI3IFRqCi0tMjUwIFRKbQotKG91dCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ibGVtKSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGlzLikgOS4xMzU3IFRqCi1bMSAwIDAgMSA3MiAzMzguMTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjguMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxOC4zNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMzA5IFRKbQotKHJ1bGVzKSAxOS4zNjczIFRqCi0tMzA5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxMCBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYW1lKSAxNi41OTc3IFRqCi0tMzA5IFRKbQotKGFyZTopIDE0LjkzMzkgVGoKLS00MjggVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0cywpIDE3Ljk4MjUgVGoKLS0zMjQgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0cywpIDE3Ljk4MjUgVGoKLS0zMjQgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0cy4pIDE3Ljk4MjUgVGoKLS05NzUgVEptCi0oRG9uJykgMjAuNDczMSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA5IFRKbQotKG9taXQpIDE4LjI3MTQgVGoKLS0zMDkgVEptCi0odGhlbSkgMTkuOTI1MiBUagotLTMwOSBUSm0KLShiZWNhdXNlKSAzMS41MzE2IFRqCi0tMzA5IFRKbQotKCJvaCwpIDE2LjUxOCBUagotLTMyNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTMwOSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMDkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMTAgVEptCi0ocmVsZSkgMTQuOTMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbnQiLikgMTguNzI5NyBUagotLTk3NCBUSm0KLShBdCkgOS45NjI2IFRqCi0tMzEwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwOSBUSm0KLShiYXJlKSAxNy4xNDU2IFRqCi03MiAzMDYuMzg2IFRkCi0obWluaW11bTopIDQxLjUyNDEgVGoKLVsxIDAgMCAxIDcyIDMwNi4yODddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02MC43NzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDU5Ljc3NTggcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA1Ni4xODkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjk2LjkyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjk2LjkyMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShNYWNoaW5lKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHR5cGUuKSAyOS44ODc4IFRqCi0tODUyIFRKbQotKE9wZXJhdGluZykgNTMuNzk4IFRqCi0tNDI2IFRKbQotKHN5c3RlbSkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2ZXJzaW9uLikgNDcuODIwNSBUagotOTAgMjg0Ljk2NyBUZAotKEV4YWN0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHZlcnNpb24pIDQxLjg0MjkgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnppcDIpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oXChkbykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiemlwMikgMjkuODg3OCBUagotLTQyNiBUSm0KLSgtVlwpLikgMjMuOTEwMiBUagotOTAgMjczLjAxMSBUZAotKEV4YWN0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHZlcnNpb24pIDQxLjg0MjkgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXBpbGVyKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKHVzZWQuKSAyOS44ODc4IFRqCi05MCAyNjEuMDU2IFRkCi0oRmxhZ3MpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ocGFzc2VkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21waWxlci4pIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMjQ1LjUxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMzUuNTUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMjMuNTk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEhvKSAxMi4xNzQzIFRqCi0yNSBUSm0KLSh3ZSkgMTEuNjE2NCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTI1NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTIgVEptCi0obW9zdCkgMTkuMzc3MyBUagotLTI1MyBUSm0KLShpbXBvcnRhbnQpIDM4Ljc0NDYgVGoKLS0yNTMgVEptCi0oc2luZ2xlKSAyMy44MDA3IFRqCi0tMjUzIFRKbQotKHRoaW5nKSAyMC40ODMxIFRqCi0tMjUzIFRKbQotKHQpIDIuNzY5NiBUagotMSBUSm0KLShoYXQpIDEyLjE3NDMgVGoKLS0yNTMgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MyBUSm0KLShoZWxwKSAxNy4xNTU2IFRqCi0tMjUzIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMjUzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MyBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTMgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI1MyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTMgVEptCi0od2VyZSkgMTkuMzU3MyBUagotLTI1MyBUSm0KLSh0cnlpbmcpIDIzLjgwMDcgVGoKLS0yNTIgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MyBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTI1MyBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MyBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi03MiAyMTEuNjQxIFRkCi0oYXQpIDcuMTkzIFRqCi0tMzA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNSBUSm0KLSh0aW1lKSAxNy43MTM1IFRqCi0tMzA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNCBUSm0KLShwcm9ibGVtKSAzMy4yMDUzIFRqCi0tMzA1IFRKbQotKGhhcHBlbmVkLikgNDAuNjY3MyBUagotLTk0NiBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpdGhvdXQpIDIzLjI1MjcgVGoKLS0zMDQgVEptCi0odGhhdCwpIDE3LjQzNDYgVGoKLS0zMTggVEptCi0obXkpIDEyLjczMjIgVGoKLS0zMDUgVEptCi0oYWJpbGl0eSkgMjUuNDY0NCBUagotLTMwNCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA0IFRKbQotKGRvKSA5Ljk2MjYgVGoKLS0zMDUgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHl0aGluZykgMjUuNDY0NCBUagotLTMwNCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMzA0IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0zMDUgVEptCi0oc3BlY3VsYXRlKSAzNy4wNzA4IFRqCi0tMzA0IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMzA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNSBUSm0KLShjYXVzZSwpIDI0LjYxNzYgVGoKLS0zMTggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDE5OS42ODYgVGQKLShsaW1pdGVkLikgMzAuNzI0NyBUagotWzEgMCAwIDEgNzIgMTk5LjU4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTg5LjYyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTY0LjkzMyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oNC40LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShEaWQpIDMzLjI4MDggVGoKLS0yNzggVEptCi0oeSkgMTEuNDg2MSBUagotMjUgVEptCi0ob3UpIDI1LjI0NDcgVGoKLS0yNzggVEptCi0oZykgMTIuNjIyMyBUagotLTEwIFRKbQotKGV0KSAxOC4zNjU0IFRqCi0tMjc4IFRKbQotKHRoZSkgMzAuOTg3NyBUagotLTI3OCBUSm0KLShyaWdodCkgNDUuOTAzMiBUagotLTI3OCBUSm0KLShwYWMpIDM1LjU5NDYgVGoKLTIwIFRKbQotKGthKSAyMi45NzIzIFRqCi0xMCBUSm0KLShnKSAxMi42MjIzIFRqCi0tMTAgVEptCi0oZT8pIDI0LjEwODUgVGoKLVsxIDAgMCAxIDcyIDE2MC4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE1MC4zNzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE0My4wMTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggMTQzLjAxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC0xNDMuMDE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDQuNjAzIDE0My4wMTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNzIgVEptCi0oYSkgNC40MjMzOSBUagotLTI3MyBUSm0KLShyZXNvdXJjZSkgMzMuNzQzMyBUagotLTI3MiBUSm0KLShob2cuKSAxNy40MzQ2IFRqCi0tMzc4IFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMjcyIFRKbQotKHNvYWtzKSAyMi4xMzY5IFRqCi0tMjczIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yNzIgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTI3MyBUSm0KLShhbW91bnRzKSAzMy43NjMzIFRqCi0tMjcyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjczIFRKbQotKENQVSkgMTkuMzc3MyBUagotLTI3MiBUSm0KLShjKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh5Y2xlcykgMjAuNDczMSBUagotLTI3MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MiBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS03NTUgVEptCi0oQWxzbywpIDIxLjMxIFRqCi0tMjc4IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjczIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yNzMgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTI3MiBUSm0KLShsYXRlbmNpZXMuKSAzNy4zNDk4IFRqCi03MiAxMzEuMDYgVGQKLShJbikgOC4yOTg4NSBUagotLTI1MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTEgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yc3QpIDE0Ljk0MzkgVGoKLS0yNTEgVEptCi0oY2FzZSwpIDE5LjYzNjMgVGoKLS0yNTEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUxIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1MSBUSm0KLShmZWVkKSAxNy4xNDU2IFRqCi0tMjUxIFRKbQotKG1hbikgMTcuMTU1NiBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUxIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTQgVEptCi0oYWJ5dCkgMTcuMTU1NiBUagotMSBUSm0KLShlcykgOC4yOTg4NSBUagotLTI1MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MSBUSm0KLSh1bmNvbXByZXNzZWQpIDU2Ljk5NiBUagotLTI1MSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUxIFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yNTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUxIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTEgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjUxIFRKbQotKGdldHRpbmcpIDI3LjY3NjEgVGoKLS0yNTEgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi03MiAxMTkuMTA1IFRkCi0ob3V0cHV0LCkgMjcuOTU1MSBUagotLTI1MCBUSm0KLShzbykgOC44NTY3NSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0ocHJvYmFibHkpIDM1LjQxNyBUagotLTI1MCBUSm0KLShydWxlcykgMTkuMzY3MyBUagotLTI1MCBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oYXBwbGljYXRpb25zKSA0OC4xNDkyIFRqCi0tMjUwIFRKbQotKHJlcXVpcmluZykgMzYuNTIyOSBUagotLTI1MCBUSm0KLShpbnRlcmFjdGkpIDMyLjY0NzQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShiZWhhKSAxOC44MDk0IFRqCi0yMCBUSm0KLSh2aW91cikgMjEuMDMxIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMTYuOTQ5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMDYuOTg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA5Ny4xODc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZXNlKSAyMy43OTA3IFRqCi0tMzA0IFRKbQotKGFyZW4nKSAyMC40NjMyIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMDQgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXVsdHMpIDE4LjgxOTQgVGoKLS0zMDQgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMDQgVEptCi0obXkpIDEyLjczMjIgVGoKLS0zMDQgVEptCi0oaW1wbGVtZW50YXRpb24sKSA2NS4wMzU5IFRqCi0tMzE3IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0zMDQgVEptCi0oaG9wZSwpIDIxLjg1NzkgVGoKLS0zMTggVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMzA0IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0zMDQgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0zMDQgVEptCi0oaW50cmluc2ljKSAzMi42NTc0IFRqCi0tMzA0IFRKbQotKHByb3BlcnR5KSAzMy43NTMzIFRqCi0tMzA0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNCBUSm0KLShCdXJybykgMjMuMjQyNyBUagotMjUgVEptCi0od3MtV2hlZWxlcikgNDguMTI5MyBUagotLTMwNCBUSm0KLSh0cmFuc2Zvcm0pIDM4LjczNDYgVGoKLTcyIDg1LjIzMjMgVGQKLShcKHVuZm9ydHVuYXRlbHlcKS4pIDYyLjgwNDIgVGoKLS02MjAgVEptCi0oTWF5YmUpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKGlzbicpIDE0Ljk0MzkgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50LikgMTQuNjY0OSBUagotWzEgMCAwIDEgNzIgODMuMDc1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIyLjI2MTFdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzMpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMzcgMzcKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC02Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDExNi4zMjggLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODIuNCAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk4LjcyOCA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1pc2NlbGxhbmVhKSA0OC4xMzkzIFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0OS4xNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNy4wOTM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI3NSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzQgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI3NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjc0IFRKbQotKGNvbXByZXNzb3IpIDQ1LjkyNzYgVGoKLS0yNzUgVEptCi0oYW5kL29yKSAyNS40NTQ0IFRqCi0tMjc1IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNzQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNzUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNzQgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXN0ZXIpIDE4LjgwOTQgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yODEgVEptCi0odXNlcykgMTcuMTU1NiBUagotLTI3NSBUSm0KLShsZXNzKSAxNC45NDM5IFRqCi0tMjc0IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI3NSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNzUgVEptCi0oZ2V0cykgMTYuMDQ5NyBUagotLTI3NCBUSm0KLShwcmV0dHkpIDIzLjI0MjcgVGoKLS0yNzUgVEptCi0oZ29vZCkgMTkuOTI1MiBUagotLTI3NCBUSm0KLShjb21wcmVzc2lvbiwpIDUyLjg1MTYgVGoKLS0yODEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNzUgVEptCi0oaGFzKSAxMy4yODAxIFRqCi03MiA2OTguMDgyIFRkCi0obWluaW1hbCkgMzMuMjE1MyBUagotLTI4OCBUSm0KLShsYXRlbmMpIDIzLjc5MDcgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI5NyBUSm0KLShjb25zaWRlcikgMzMuNzUzMyBUagotLTI4OCBUSm0KLShKZWFuLWxvdXApIDM4LjczNDYgVGoKLS0yODggVEptCi0oR2FpbGx5JykgMjguMjI0IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjg4IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjg4IFRKbQotKE1hcmspIDIxLjU3OSBUagotLTI4OCBUSm0KLShBZGwpIDE0Ljk0MzkgVGoKLTEgVEptCi0oZXInKSAxMS4wNTg1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjg4IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmssKSAxNS43NzA4IFRqCi1bMSAwIDAgMSAzNTMuODc5IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUzLjg3OSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUzLjg3OSA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHpsaWItMS4yLjEpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQxMy42NTUgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTMuNjU1IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTYuNTIzIDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQzMy43NzcgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzMuNzc3IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzMuNzc3IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ3ppcC0xLjIuNCkgNTkuNzc1NiBUagotWzEgMCAwIDEgNDkzLjU1MyA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My41NTMgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5My41NTMgNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tODQ3IFRKbQotKExvb2spIDIxLjAzMSBUagotLTI4OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLTcyIDY4Ni4xMjcgVGQKLSh0aGVtKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShodHRwOi8vd3d3KSA0NS4zODk2IFRqCi02NSBUSm0KLSguemxpYikgMTcuNDM0NiBUagotNDAgVEptCi0oLm9yKSAxMC43ODk1IFRqCi0xOCBUSm0KLShnKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oaHR0cDovL3d3dykgNDUuMzg5NiBUagotNjUgVEptCi0oLmd6aXAub3IpIDMwLjQzNTcgVGoKLTE4IFRKbQotKGcpIDQuOTgxMyBUagotLTI1MCBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDY4My45N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc0LjAwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTU4MiBUSm0KLShzb21ldGhpbmcpIDQxLjUxNDIgVGoKLS01ODMgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXN0ZXIpIDE4LjgwOTQgVGoKLS01ODIgVEptCi0oYW5kKSAxNC4zODYgVGoKLS01ODIgVEptCi0obGlnaHRlcikgMjYuMDEyMyBUagotLTU4MyBUSm0KLShzdGlsbCwpIDE3LjQ0NDUgVGoKLS02NjUgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tNTgyIFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tNTgzIFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTU4MiBUSm0KLShNYXJrdXMpIDMwLjQzNTcgVGoKLS01ODIgVEptCi0oRikgNS41MzkyMSBUagotLTU4MiBUSm0KLShYKSA3LjE5MyBUagotLTU4MiBUSm0KLShKKSAzLjg3NTQ1IFRqCi0tNTgyIFRKbQotKE9iZXJodW1lcicpIDQ4LjY4NzIgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLVsxIDAgMCAxIDQzNy40MzMgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzcuNDMzIC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzcuNDMzIDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTFpPKSAxNy45MzI3IFRqCi1bMSAwIDAgMSA0NTUuMzY1IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU1LjM2NSAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDYxLjE2MyA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlYWwtdGltZSkgMzUuOTY1IFRqCi0tNTgyIFRKbQotKGNvbXByZXMtKSAzNy4wNzA4IFRqCi03MiA2NTIuMjU0IFRkCi0oc2lvbi9kZWNvbXByZXNzaW9uKSA3OS4xNDI5IFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGh0dHA6Ly93d3cpIDQ1LjM4OTYgVGoKLTY1IFRKbQotKC5vYmVyaHVtZXIpIDQ1LjY0ODYgVGoKLTU1IFRKbQotKC5jb20vb3BlbnNvdXJjZS4pIDcwLjI3NjIgVGoKLVsxIDAgMCAxIDcyIDY1MC4wOTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY0MC4xMzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxNy41MDEgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDQuNS4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oRnVyKSAzMy4yODA4IFRqCi0tMjAgVEptCi0odGhlcikgMzkuMDIzOSBUagotLTI3OCBUSm0KLShSZWFkaW5nKSA4MS40OTc4IFRqCi1bMSAwIDAgMSA3MiA2MTIuOTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDIuOTQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTUuNTgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDU5NS41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtNTk1LjU4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjkyMyA1OTUuNTgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzA1IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTMwNCBUSm0KLShyZXNlYXJjaCkgMzMuMTg1NCBUagotLTMwNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrLCkgMTUuNzcwOCBUagotLTMxOCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzA1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNCBUSm0KLShzZW5zZSkgMjEuNTc5IFRqCi0tMzA1IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMDQgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDUgVEptCi0oZG9lc24nKSAyNi41NjAzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMDUgVEptCi0ocHJlc2VudCkgMjguNzcyIFRqCi0tMzA0IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zMDUgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMzA0IFRKbQotKGlkZWFzLikgMjIuOTYzOCBUagotLTQ3NCBUSm0KLShSYXRoZXIpIDI2LjU2MDMgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMTggVEptCi0oaXQnKSA4Ljg1Njc1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzA1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMzA1IFRKbQotKGVuZ2luZWVyaSkgMzcuMDcwOCBUagotMSBUSm0KLShuZykgOS45NjI2IFRqCi0tMzA1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHgpIDQuOTgxMyBUagotMTUgVEptCi0oZXJjaXNlKSAyMy4yMzI4IFRqCi03MiA1ODMuNjI4IFRkCi0oYmFzZWQpIDIyLjY4NDggVGoKLS0yNTAgVEptCi0ob24pIDkuOTYyNiBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4aXN0aW5nKSAyNy4xMjgyIFRqCi0tMjUwIFRKbQotKGlkZWFzLikgMjIuOTYzOCBUagotWzEgMCAwIDEgNzIgNTgxLjQ3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTcxLjUwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTYxLjcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG91cikgMTMuMjgwMSBUagotLTI1MCBUSm0KLShkb2N1bWVudHMpIDQzLjE2NzkgVGoKLS0yNTAgVEptCi0oZGVzY3JpYmUpIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0oZXNzZW50aWFsbHkpIDQyLjA2MjEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGlkZWFzKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGJlaGluZCkgMjcuMTE4MiBUagotWzEgMCAwIDEgMjk4Ljc0NyA1NjEuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk4Ljc0NyAtNTYxLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTguNzQ3IDU2MS43MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMzI4LjYzNSA1NjEuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI4LjYzNSAtNTYxLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjguNjM1IDU2MS43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDU1OS41NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOTkuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBTQwotMCAwIDQ2OCAyOTguODc5IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjk1LjI5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTU1MC4xODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDU1MC4xODkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTWljaGFlbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShCdXJyb3dzKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShELikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShKLikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShXaGVlbGVyOikgNDcuODIwNSBUagotOTguNDg3OSA1MzguMjM0IFRkCi0oIkEpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYmxvY2stc29ydGluZykgNzcuNzA4MyBUagotLTQyNiBUSm0KLShsb3NzbGVzcykgNDcuODIwNSBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGNvbXByZXNzaW9uKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKGFsZ29yaXRobSIpIDU5Ljc3NTYgVGoKLTEwMi43MzIgNTI2LjI3OCBUZAotKDEwdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oTWF5KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDE5OTQuKSAyOS44ODc4IFRqCi0xMDIuNzMyIDUxNC4zMjMgVGQKLShEaWdpdGFsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKFNSQykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShSZXNlYXJjaCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShSZXBvcnQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oMTI0LikgMjMuOTEwMiBUagotMTAyLjczMiA1MDIuMzY4IFRkCi0oZnRwOi8vZnRwLmRpZ2l0YWwuY29tL3B1Yi9ERUMvU1JDL3Jlc2VhcmNoLXJlcG9ydHMvU1JDLTEyNC5wcy5nXAoteikgMzgyLjU2NCBUagotMTAyLjczMiA0OTAuNDEzIFRkCi0oSWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oeW91KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGhhdmUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odHJvdWJsZSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShmaW5kaW5nKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGl0LCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh0cnkpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oc2VhcmNoaW5nKSA1My43OTggVGoKLS00MjYgVEptCi0oYXQpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0xMDIuNzMyIDQ3OC40NTggVGQKLShOZXcpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oWmVhbGFuZCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShEaWdpdGFsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKExpYnJhcnksKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGh0dHA6Ly93d3cubnpkbC5vcmcuKSAxMTkuNTUxIFRqCi05MCA0NTQuNTQ3IFRkCi0oRGFuaWVsKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKFMuKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEhpcnNjaGJlcmcpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKERlYnJhKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKEEuKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKExlTGV3ZXIpIDQxLjg0MjkgVGoKLTk4LjQ4NzkgNDQyLjU5MiBUZAotKCJFZmZpY2llbnQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oRGVjb2RpbmcpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oUHJlZml4KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKENvZGVzIikgMzUuODY1NCBUagotMTAyLjczMiA0MzAuNjM3IFRkCi0oQ29tbXVuaWNhdGlvbnMpIDgzLjY4NTggVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEFDTSwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQXByaWwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oMTk5MCwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oVm9sKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDMzLCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShOdW1iZXIpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oNC4pIDExLjk1NTEgVGoKLTEwMi43MzIgNDE4LjY4MiBUZAotKFlvdSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShtaWdodCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShiZSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhYmxlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGdldCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShlbGVjdHJvbmljKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGNvcHkpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhpcykgMjMuOTEwMiBUagotMTAyLjczMiA0MDYuNzI3IFRkCi0oZnJvbSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQUNNKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKERpZ2l0YWwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oTGlicmFyeS4pIDQ3LjgyMDUgVGoKLTkwIDM4Mi44MTYgVGQKLShEYXZpZCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShKLikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShXaGVlbGVyKSA0MS44NDI5IFRqCi0xMDIuNzMyIDM3MC44NjEgVGQKLShQcm9ncmFtKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGJyZWQzLmMpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjY29tcGFueWluZykgNzEuNzMwNyBUagotLTQyNiBUSm0KLShkb2N1bWVudCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShicmVkMy5wcy4pIDUzLjc5OCBUagotMTAyLjczMiAzNTguOTA2IFRkCi0oVGhpcykgMjMuOTEwMiBUagotLTQyNiBUSm0KLShjb250YWlucykgNDcuODIwNSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oaWRlYSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShiZWhpbmQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG11bHRpLXRhYmxlKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKEh1ZmZtYW4pIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oY29kaW5nKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHNjaGVtZS4pIDQxLjg0MjkgVGoKLTEwMi43MzIgMzQ2Ljk1MSBUZAotKGZ0cDovL2Z0cC5jbC5jYW0uYWMudWsvdXNlcnMvZGp3My8pIDIwMy4yMzcgVGoKLTkwIDMyMy4wNDEgVGQKLShKb24pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oTC4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQmVudGxleSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oUm9iZXJ0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKFNlZGdld2ljaykgNTMuNzk4IFRqCi05OC40ODc5IDMxMS4wODUgVGQKLSgiRmFzdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShBbGdvcml0aG1zKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZvcikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShTb3J0aW5nKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShTZWFyY2hpbmcpIDUzLjc5OCBUagotLTQyNiBUSm0KLShTdHJpbmdzIikgNDcuODIwNSBUagotMTAyLjczMiAyOTkuMTMgVGQKLShBdmFpbGFibGUpIDUzLjc5OCBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFNlZGdld2ljaydzKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKHdlYikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShwYWdlLCkgMjkuODg3OCBUagotMTAyLjczMiAyODcuMTc1IFRkCi0od3d3LmNzLnByaW5jZXRvbi5lZHUvfnJzKSAxNDMuNDYxIFRqCi1bMSAwIDAgMSA3MiAyNTkuNjc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI0OS43MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIzNy43NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yMzkgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdpbmcpIDE5LjkyNTIgVGoKLS0yMzggVEptCi0ocGFwZXIpIDIyLjEyNjkgVGoKLS0yMzkgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotLTIzOSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWFibGUpIDI4Ljc3MiBUagotLTIzOCBUSm0KLShhZGRpdGlvbmFsKSAzOS44NTA0IFRqCi0tMjM5IFRKbQotKGluc2lnaHRzKSAzMS4wMDM2IFRqCi0tMjM4IFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yMzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjM5IFRKbQotKGFsZ29yaXRobSwpIDQxLjIzNTIgVGoKLS0yNDEgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjM4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjM5IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTIzOSBUSm0KLShpbW1lZGkpIDMwLjQ0NTcgVGoKLTEgVEptCi0oYXRlbHkpIDE5LjM2NzMgVGoKLS0yMzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjM5IFRKbQotKGJhc2lzKSAxOS45MjUyIFRqCi0tMjM4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjM5IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yMzkgVEptCi0oY29kZSkgMTguODA5NCBUagotNzIgMjI1LjgwNSBUZAotKHVzZWQpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLShiemlwMi4pIDI0LjYyNzUgVGoKLVsxIDAgMCAxIDcyIDIyMy42NDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC03Mi43MjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBTQwotMCAwIDQ2OCA3MS43MzEgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2OC4xNDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjE0LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjE0LjI4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShQZXRlcikgMjkuODg3OCBUagotLTQyNiBUSm0KLShGZW53aWNrOikgNDcuODIwNSBUagotMTAyLjczMiAyMDIuMzI4IFRkCi0oQmxvY2spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oU29ydGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShUZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKENvbXByZXNzaW9uKSA2NS43NTMyIFRqCi0xMDIuNzMyIDE5MC4zNzMgVGQKLShQcm9jZWVkaW5ncykgNjUuNzUzMiBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oMTl0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShBdXN0cmFsYXNpYW4pIDcxLjczMDcgVGoKLS00MjYgVEptCi0oQ29tcHV0ZXIpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oU2NpZW5jZSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShDb25mZXJlbmNlLCkgNjUuNzUzMiBUagotMTExLjIyIDE3OC40MTggVGQKLShNZWxib3VybmUsKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKEF1c3RyYWxpYS4pIDU5Ljc3NTYgVGoKLS04NTIgVEptCi0oSmFuKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDMxKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKC0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oRmViKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDIsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDE5OTYuKSAyOS44ODc4IFRqCi0xMDIuNzMyIDE2Ni40NjMgVGQKLShmdHA6Ly9mdHAuY3MuYXVja2xhbmQuYWMubnovcHViL3BldGVyLWYvQUNTQzk2cGFwZXIucHMpIDMyMi43ODggVGoKLVsxIDAgMCAxIDcyIDE1MC45MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQwLjk1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTI5LjAwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShLKSA3LjE5MyBUagotMTUgVEptCi0odW5paGlrKSAyNS40NjQ0IFRqCi0xMCBUSm0KLShvKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oU2FkYWthbmUnKSA0MS40OTQyIFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjUwIFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtLCkgNDEuMjM1MiBUagotLTI1MCBUSm0KLShtZW50aW9uZWQpIDQyLjA2MjEgVGoKLS0yNTAgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSwpIDYuOTE0MDQgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGZyb206KSAyMi4xMzY5IFRqCi1bMSAwIDAgMSA3MiAxMjYuODQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gU0MKLTAgMCA0NjggMzUuODY1NSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMyLjI3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0xMTcuNDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAxMTcuNDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGh0dHA6Ly9uYW9taS5pcy5zLnUtdG9reW8uYWMuanAvfnNhZGEvcGFwZXJzL1NhZGE5OGIucHMuZ3opIDM0Ni42OTggVGoKLVsxIDAgMCAxIDcyIDg5Ljk4NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjE3MDJdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzQpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMzggMzgKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC02Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDExNi4zMjggLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODIuNCAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk4LjcyOCA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1pc2NlbGxhbmVhKSA0OC4xMzkzIFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0OS4xNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNy4wOTM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0oTWFuYmVyKSAzMC45ODM3IFRqCi0yMCBUSm0KLSgtTXllcnMpIDI4Ljc3MiBUagotLTI1MCBUSm0KLShzdWYpIDEyLjE3NDMgVGoKLTI1IFRKbQotKFwwMDJ4KSAxMC41MjA1IFRqCi0tMjUwIFRKbQotKGFycmF5KSAyMC40NjMyIFRqCi0tMjUwIFRKbQotKGNvbnN0cnVjdGlvbikgNDkuMjU1MSBUagotLTI1MCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oZGVzY3JpYmVkKSAzOC4xNzY3IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwYXBlcikgMjIuMTI2OSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oZnJvbTopIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDcyIDcwNy44OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNjk4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNjk4LjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShodHRwOi8vd3d3LmNzLmFyaXpvbmEuZWR1L3Blb3BsZS9nZW5lL1BBUEVSUy9zdWZmaXgucHMpIDMyMi43ODggVGoKLVsxIDAgMCAxIDcyIDY3MS4wMTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjYxLjA1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjQ5LjEwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGaW5hbGx5KSAyOC4yMzQgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yMjcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIxIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjIyIFRKbQotKHBhcGVycykgMjYuMDAyNCBUagotLTIyMSBUSm0KLShkb2N1bWVudCkgMzkuMjkyNSBUagotLTIyMSBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yMjIgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlc3RpZykgMTguODE5NCBUagotNSBUSm0KLShhdGlvbnMpIDIzLjgwMDcgVGoKLS0yMjEgVEptCi0oSSkgMy4zMTc1NSBUagotLTIyMSBUSm0KLShtYWRlKSAyMS41NzkgVGoKLS0yMjIgVEptCi0oaW50bykgMTUuNTAxOCBUagotLTIyMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjEgVEptCi0ocGVyZm9ybWFuY2UpIDUwLjM0MSBUagotLTIyMiBUSm0KLShvZikgOC4yOTg4NSBUagotLTIyMSBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjIxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjIyIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLTcyIDYzNy4xNDYgVGQKLShhbGdvcml0aG1zOikgNDUuMzg5NiBUagotWzEgMCAwIDEgNzIgNjM0Ljk4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEzMi41MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIFNDCi0wIDAgNDY4IDEzMS41MDcgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxMjcuOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC02MjUuNjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA2MjUuNjI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEp1bGlhbikgMzUuODY1NCBUagotLTQyNiBUSm0KLShTZXdhcmQpIDM1Ljg2NTQgVGoKLTEwMi43MzIgNjEzLjY2OSBUZAotKE9uKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShQZXJmb3JtYW5jZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCV1QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oU29ydGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShBbGdvcml0aG1zKSA1OS43NzU2IFRqCi0xMDIuNzMyIDYwMS43MTQgVGQKLShQcm9jZWVkaW5ncykgNjUuNzUzMiBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oSUVFRSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShEYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKENvbXByZXNzaW9uKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKENvbmZlcmVuY2UpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oMjAwMCkgMjMuOTEwMiBUagotMTExLjIyIDU4OS43NTkgVGQKLShTbm93YmlyZCwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShVdGFoLikgMjkuODg3OCBUagotLTg1MiBUSm0KLSgyOC0zMCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShNYXJjaCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSgyMDAwLikgMjkuODg3OCBUagotOTAgNTY1Ljg0OCBUZAotKEp1bGlhbikgMzUuODY1NCBUagotLTQyNiBUSm0KLShTZXdhcmQpIDM1Ljg2NTQgVGoKLTEwMi43MzIgNTUzLjg5MyBUZAotKFNwYWNlLXRpbWUpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oVHJhZGVvZmZzKSA1My43OTggVGoKLS00MjYgVEptCi0oaW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEludmVyc2UpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oQi1XKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFRyYW5zZm9ybSkgNTMuNzk4IFRqCi0xMDIuNzMyIDU0MS45MzggVGQKLShQcm9jZWVkaW5ncykgNjUuNzUzMiBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oSUVFRSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShEYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKENvbXByZXNzaW9uKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKENvbmZlcmVuY2UpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oMjAwMSkgMjMuOTEwMiBUagotMTExLjIyIDUyOS45ODMgVGQKLShTbm93YmlyZCwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShVdGFoLikgMjkuODg3OCBUagotLTg1MiBUSm0KLSgyNy0yOSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShNYXJjaCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSgyMDAxLikgMjkuODg3OCBUagotWzEgMCAwIDEgNzIgNTAyLjQ4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAwIC00NTEuNjM0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTEzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDM1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVRyYWlsZXIKLWVuZAotJSVEb2N1bWVudFN1cHBsaWVkUmVzb3VyY2VzOgotJSUrIGZvbnQgRFRVVUhQK05pbWJ1c1NhbkwtQm9sZAotJSUrIGZvbnQgVlhBTVJWK05pbWJ1c1JvbU5vOUwtUmVndQotJSUrIGZvbnQgTUZFQ1VSK05pbWJ1c01vbkwtUmVndQotJSUrIGZvbnQgWk9WTVJEK0NNTUkxMAotJSUrIGZvbnQgRVJWQkZUK05pbWJ1c01vbkwtQm9sZAotJSUrIGZvbnQgQlpYSUVCK0NNU1kxMAotJSUrIGZvbnQgV1dXVVRVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwKLSUlRU9GCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwueG1sIGIvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIyNDEzNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjk2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4gPCEtLSAtKi0gc2dtbCAtKi0gLS0+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCi0gICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiWwotCi08IS0tIHZhcmlvdXMgc3RyaW5ncywgZGF0ZXMgZXRjLiBjb21tb24gdG8gYWxsIGRvY3MgLS0+Ci08IUVOVElUWSAlIGNvbW1vbi1lbnRzIFNZU1RFTSAiZW50aXRpZXMueG1sIj4gJWNvbW1vbi1lbnRzOwotXT4KLQotPGJvb2sgbGFuZz0iZW4iIGlkPSJ1c2VybWFuIiB4cmVmbGFiZWw9ImJ6aXAyIE1hbnVhbCI+Ci0KLSA8Ym9va2luZm8+Ci0gIDx0aXRsZT5iemlwMiBhbmQgbGliYnppcDIsIHZlcnNpb24gMS4wLjU8L3RpdGxlPgotICA8c3VidGl0bGU+QSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvciBkYXRhIGNvbXByZXNzaW9uPC9zdWJ0aXRsZT4KLSAgPGNvcHlyaWdodD4KLSAgIDx5ZWFyPiZiei1saWZlc3Bhbjs8L3llYXI+Ci0gICA8aG9sZGVyPkp1bGlhbiBTZXdhcmQ8L2hvbGRlcj4KLSAgPC9jb3B5cmlnaHQ+Ci0gIDxyZWxlYXNlaW5mbz5WZXJzaW9uICZiei12ZXJzaW9uOyBvZiAmYnotZGF0ZTs8L3JlbGVhc2VpbmZvPgotCi0gIDxhdXRob3Jncm91cD4KLSAgIDxhdXRob3I+Ci0gICAgPGZpcnN0bmFtZT5KdWxpYW48L2ZpcnN0bmFtZT4KLSAgICA8c3VybmFtZT5TZXdhcmQ8L3N1cm5hbWU+Ci0gICAgPGFmZmlsaWF0aW9uPgotICAgICA8b3JnbmFtZT4mYnotdXJsOzwvb3JnbmFtZT4KLSAgICA8L2FmZmlsaWF0aW9uPgotICAgPC9hdXRob3I+Ci0gIDwvYXV0aG9yZ3JvdXA+Ci0KLSAgPGxlZ2Fsbm90aWNlPgotCi0gIDxwYXJhPlRoaXMgcHJvZ3JhbSwgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4sIHRoZQotICBhc3NvY2lhdGVkIGxpYnJhcnkgPGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4sIGFuZAotICBhbGwgZG9jdW1lbnRhdGlvbiwgYXJlIGNvcHlyaWdodCAmY29weTsgJmJ6LWxpZmVzcGFuOyBKdWxpYW4gU2V3YXJkLgotICBBbGwgcmlnaHRzIHJlc2VydmVkLjwvcGFyYT4KLQotICA8cGFyYT5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoCi0gIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCi0gIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6PC9wYXJhPgotCi0gIDxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotICAgPGxpc3RpdGVtPjxwYXJhPlJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUKLSAgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKLSAgIGZvbGxvd2luZyBkaXNjbGFpbWVyLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+PHBhcmE+VGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlCi0gICBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbAotICAgc29mdHdhcmUuICBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbgotICAgYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQotICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPjxwYXJhPkFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQKLSAgIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwKLSAgIHNvZnR3YXJlLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+PHBhcmE+VGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8KLSAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgPHBhcmE+VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SICJBUyBJUyIgQU5EIEFOWQotICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0gIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwotICBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuPC9wYXJhPgotCi0gPHBhcmE+UEFURU5UUzogVG8gdGhlIGJlc3Qgb2YgbXkga25vd2xlZGdlLAotIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotIDxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGRvIG5vdCB1c2UgYW55IHBhdGVudGVkCi0gYWxnb3JpdGhtcy4gIEhvd2V2ZXIsIEkgZG8gbm90IGhhdmUgdGhlIHJlc291cmNlcyB0byBjYXJyeQotIG91dCBhIHBhdGVudCBzZWFyY2guICBUaGVyZWZvcmUgSSBjYW5ub3QgZ2l2ZSBhbnkgZ3VhcmFudGVlIG9mCi0gdGhlIGFib3ZlIHN0YXRlbWVudC4KLSA8L3BhcmE+Ci0KLTwvbGVnYWxub3RpY2U+Ci0KLTwvYm9va2luZm8+Ci0KLQotCi08Y2hhcHRlciBpZD0iaW50cm8iIHhyZWZsYWJlbD0iSW50cm9kdWN0aW9uIj4KLTx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjb21wcmVzc2VzIGZpbGVzCi11c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrLXNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbgotYWxnb3JpdGhtLCBhbmQgSHVmZm1hbiBjb2RpbmcuICBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkKLWNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsCi1MWjc3L0xaNzgtYmFzZWQgY29tcHJlc3NvcnMsIGFuZCBhcHByb2FjaGVzIHRoZSBwZXJmb3JtYW5jZSBvZgotdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpcyBidWlsdCBvbiB0b3Agb2YKLTxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCBhIGZsZXhpYmxlIGxpYnJhcnkgZm9yCi1oYW5kbGluZyBjb21wcmVzc2VkIGRhdGEgaW4gdGhlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBmb3JtYXQuICBUaGlzIG1hbnVhbAotZGVzY3JpYmVzIGJvdGggaG93IHRvIHVzZSB0aGUgcHJvZ3JhbSBhbmQgaG93IHRvIHdvcmsgd2l0aCB0aGUKLWxpYnJhcnkgaW50ZXJmYWNlLiAgTW9zdCBvZiB0aGUgbWFudWFsIGlzIGRldm90ZWQgdG8gdGhpcwotbGlicmFyeSwgbm90IHRoZSBwcm9ncmFtLCB3aGljaCBpcyBnb29kIG5ld3MgaWYgeW91ciBpbnRlcmVzdCBpcwotb25seSBpbiB0aGUgcHJvZ3JhbS48L3BhcmE+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJ1c2luZyIvPiBkZXNjcmliZXMgaG93IHRvIHVzZQotIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+OyB0aGlzIGlzIHRoZSBvbmx5IHBhcnQKLSB5b3UgbmVlZCB0byByZWFkIGlmIHlvdSBqdXN0IHdhbnQgdG8ga25vdyBob3cgdG8gb3BlcmF0ZSB0aGUKLSBwcm9ncmFtLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjx4cmVmIGxpbmtlbmQ9ImxpYnByb2ciLz4gZGVzY3JpYmVzIHRoZQotIHByb2dyYW1taW5nIGludGVyZmFjZXMgaW4gZGV0YWlsLCBhbmQ8L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJtaXNjIi8+IHJlY29yZHMgc29tZQotIG1pc2NlbGxhbmVvdXMgbm90ZXMgd2hpY2ggSSB0aG91Z2h0IG91Z2h0IHRvIGJlIHJlY29yZGVkCi0gc29tZXdoZXJlLjwvcGFyYT48L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotPC9jaGFwdGVyPgotCi0KLTxjaGFwdGVyIGlkPSJ1c2luZyIgeHJlZmxhYmVsPSJIb3cgdG8gdXNlIGJ6aXAyIj4KLTx0aXRsZT5Ib3cgdG8gdXNlIGJ6aXAyPC90aXRsZT4KLQotPHBhcmE+VGhpcyBjaGFwdGVyIGNvbnRhaW5zIGEgY29weSBvZiB0aGUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IG1hbiBwYWdlLCBhbmQgbm90aGluZwotZWxzZS48L3BhcmE+Ci0KLTxzZWN0MSBpZD0ibmFtZSIgeHJlZmxhYmVsPSJOQU1FIj4KLTx0aXRsZT5OQU1FPC90aXRsZT4KLQotPGl0ZW1pemVkbGlzdCBtYXJrPSdidWxsZXQnPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+LAotICA8Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IC0gYSBibG9jay1zb3J0aW5nIGZpbGUKLSAgY29tcHJlc3NvciwgdjEuMC40PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6Y2F0PC9jb21wdXRlcm91dHB1dD4gLQotICAgZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dDwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMnJlY292ZXI8L2NvbXB1dGVyb3V0cHV0PiAtCi0gICByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlczwvcGFyYT48L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InN5bm9wc2lzIiB4cmVmbGFiZWw9IlNZTk9QU0lTIj4KLTx0aXRsZT5TWU5PUFNJUzwvdGl0bGU+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBbCi0gIC1jZGZrcXN0dnpWTDEyMzQ1Njc4OSBdIFsgZmlsZW5hbWVzIC4uLiAgXTwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gWwotICAtZmt2c1ZMIF0gWyBmaWxlbmFtZXMgLi4uICBdPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6Y2F0PC9jb21wdXRlcm91dHB1dD4gWyAtcyBdIFsKLSAgZmlsZW5hbWVzIC4uLiAgXTwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMnJlY292ZXI8L2NvbXB1dGVyb3V0cHV0PgotICBmaWxlbmFtZTwvcGFyYT48L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9ImRlc2NyaXB0aW9uIiB4cmVmbGFiZWw9IkRFU0NSSVBUSU9OIj4KLTx0aXRsZT5ERVNDUklQVElPTjwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXByZXNzZXMgZmlsZXMKLXVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2sgc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uCi1hbGdvcml0aG0sIGFuZCBIdWZmbWFuIGNvZGluZy4gIENvbXByZXNzaW9uIGlzIGdlbmVyYWxseQotY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwKLUxaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywgYW5kIGFwcHJvYWNoZXMgdGhlIHBlcmZvcm1hbmNlIG9mCi10aGUgUFBNIGZhbWlseSBvZiBzdGF0aXN0aWNhbCBjb21wcmVzc29ycy48L3BhcmE+Ci0KLTxwYXJhPlRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltaWxhciB0bwotdGhvc2Ugb2YgR05VIDxjb21wdXRlcm91dHB1dD5nemlwPC9jb21wdXRlcm91dHB1dD4sIGJ1dCB0aGV5IGFyZQotbm90IGlkZW50aWNhbC48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGV4cGVjdHMgYSBsaXN0IG9mCi1maWxlIG5hbWVzIHRvIGFjY29tcGFueSB0aGUgY29tbWFuZC1saW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzCi1yZXBsYWNlZCBieSBhIGNvbXByZXNzZWQgdmVyc2lvbiBvZiBpdHNlbGYsIHdpdGggdGhlIG5hbWUKLTxjb21wdXRlcm91dHB1dD5vcmlnaW5hbF9uYW1lLmJ6MjwvY29tcHV0ZXJvdXRwdXQ+LiAgRWFjaAotY29tcHJlc3NlZCBmaWxlIGhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgcGVybWlzc2lvbnMsIGFuZCwKLXdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbCwgc28gdGhhdAotdGhlc2UgcHJvcGVydGllcyBjYW4gYmUgY29ycmVjdGx5IHJlc3RvcmVkIGF0IGRlY29tcHJlc3Npb24gdGltZS4KLUZpbGUgbmFtZSBoYW5kbGluZyBpcyBuYWl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGVyZSBpcyBubwotbWVjaGFuaXNtIGZvciBwcmVzZXJ2aW5nIG9yaWdpbmFsIGZpbGUgbmFtZXMsIHBlcm1pc3Npb25zLAotb3duZXJzaGlwcyBvciBkYXRlcyBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrIHRoZXNlIGNvbmNlcHRzLCBvcgotaGF2ZSBzZXJpb3VzIGZpbGUgbmFtZSBsZW5ndGggcmVzdHJpY3Rpb25zLCBzdWNoIGFzCi1NUy1ET1MuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gd2lsbCBieSBkZWZhdWx0IG5vdAotb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzLiAgSWYgeW91IHdhbnQgdGhpcyB0byBoYXBwZW4sIHNwZWNpZnkKLXRoZSA8Y29tcHV0ZXJvdXRwdXQ+LWY8L2NvbXB1dGVyb3V0cHV0PiBmbGFnLjwvcGFyYT4KLQotPHBhcmE+SWYgbm8gZmlsZSBuYW1lcyBhcmUgc3BlY2lmaWVkLAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29tcHJlc3NlcyBmcm9tIHN0YW5kYXJkCi1pbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIGNhc2UsCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGRlY2xpbmUgdG8gd3JpdGUKLWNvbXByZXNzZWQgb3V0cHV0IHRvIGEgdGVybWluYWwsIGFzIHRoaXMgd291bGQgYmUgZW50aXJlbHkKLWluY29tcHJlaGVuc2libGUgYW5kIHRoZXJlZm9yZSBwb2ludGxlc3MuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IChvcgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyIC1kPC9jb21wdXRlcm91dHB1dD4pIGRlY29tcHJlc3NlcyBhbGwKLXNwZWNpZmllZCBmaWxlcy4gIEZpbGVzIHdoaWNoIHdlcmUgbm90IGNyZWF0ZWQgYnkKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYmUgZGV0ZWN0ZWQgYW5kCi1pZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4KLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGF0dGVtcHRzIHRvIGd1ZXNzIHRoZQotZmlsZW5hbWUgZm9yIHRoZSBkZWNvbXByZXNzZWQgZmlsZSBmcm9tIHRoYXQgb2YgdGhlIGNvbXByZXNzZWQKLWZpbGUgYXMgZm9sbG93czo8L3BhcmE+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+ZmlsZW5hbWUuYnoyIDwvY29tcHV0ZXJvdXRwdXQ+Ci0gIGJlY29tZXMKLSAgPGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lPC9jb21wdXRlcm91dHB1dD48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+ZmlsZW5hbWUuYnogPC9jb21wdXRlcm91dHB1dD4KLSAgYmVjb21lcwotICA8Y29tcHV0ZXJvdXRwdXQ+ZmlsZW5hbWU8L2NvbXB1dGVyb3V0cHV0PjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5maWxlbmFtZS50YnoyPC9jb21wdXRlcm91dHB1dD4KLSAgYmVjb21lcwotICA8Y29tcHV0ZXJvdXRwdXQ+ZmlsZW5hbWUudGFyPC9jb21wdXRlcm91dHB1dD48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+ZmlsZW5hbWUudGJ6IDwvY29tcHV0ZXJvdXRwdXQ+Ci0gIGJlY29tZXMKLSAgPGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLnRhcjwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmFueW90aGVybmFtZSA8L2NvbXB1dGVyb3V0cHV0PgotICBiZWNvbWVzCi0gIDxjb21wdXRlcm91dHB1dD5hbnlvdGhlcm5hbWUub3V0PC9jb21wdXRlcm91dHB1dD48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTxwYXJhPklmIHRoZSBmaWxlIGRvZXMgbm90IGVuZCBpbiBvbmUgb2YgdGhlIHJlY29nbmlzZWQgZW5kaW5ncywKLTxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+LmJ6PC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+LnRiejI8L2NvbXB1dGVyb3V0cHV0PiBvcgotPGNvbXB1dGVyb3V0cHV0Pi50Yno8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXBsYWlucyB0aGF0IGl0IGNhbm5vdAotZ3Vlc3MgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB1c2VzIHRoZSBvcmlnaW5hbCBuYW1lCi13aXRoIDxjb21wdXRlcm91dHB1dD4ub3V0PC9jb21wdXRlcm91dHB1dD4gYXBwZW5kZWQuPC9wYXJhPgotCi08cGFyYT5BcyB3aXRoIGNvbXByZXNzaW9uLCBzdXBwbHlpbmcgbm8gZmlsZW5hbWVzIGNhdXNlcwotZGVjb21wcmVzc2lvbiBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHN0YW5kYXJkIG91dHB1dC48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gd2lsbCBjb3JyZWN0bHkKLWRlY29tcHJlc3MgYSBmaWxlIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlCi1jb21wcmVzc2VkIGZpbGVzLiAgVGhlIHJlc3VsdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUKLWNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLiAgSW50ZWdyaXR5IHRlc3RpbmcKLSg8Y29tcHV0ZXJvdXRwdXQ+LXQ8L2NvbXB1dGVyb3V0cHV0Pikgb2YgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQKLWZpbGVzIGlzIGFsc28gc3VwcG9ydGVkLjwvcGFyYT4KLQotPHBhcmE+WW91IGNhbiBhbHNvIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgZmlsZXMgdG8gdGhlIHN0YW5kYXJkCi1vdXRwdXQgYnkgZ2l2aW5nIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+LWM8L2NvbXB1dGVyb3V0cHV0PiBmbGFnLgotTXVsdGlwbGUgZmlsZXMgbWF5IGJlIGNvbXByZXNzZWQgYW5kIGRlY29tcHJlc3NlZCBsaWtlIHRoaXMuICBUaGUKLXJlc3VsdGluZyBvdXRwdXRzIGFyZSBmZWQgc2VxdWVudGlhbGx5IHRvIHN0ZG91dC4gIENvbXByZXNzaW9uIG9mCi1tdWx0aXBsZSBmaWxlcyBpbiB0aGlzIG1hbm5lciBnZW5lcmF0ZXMgYSBzdHJlYW0gY29udGFpbmluZwotbXVsdGlwbGUgY29tcHJlc3NlZCBmaWxlIHJlcHJlc2VudGF0aW9ucy4gIFN1Y2ggYSBzdHJlYW0gY2FuIGJlCi1kZWNvbXByZXNzZWQgY29ycmVjdGx5IG9ubHkgYnkKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHZlcnNpb24gMC45LjAgb3IgbGF0ZXIuCi1FYXJsaWVyIHZlcnNpb25zIG9mIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwKLXN0b3AgYWZ0ZXIgZGVjb21wcmVzc2luZyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6Y2F0PC9jb21wdXRlcm91dHB1dD4gKG9yCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDIgLWRjPC9jb21wdXRlcm91dHB1dD4pIGRlY29tcHJlc3NlcyBhbGwKLXNwZWNpZmllZCBmaWxlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gd2lsbCByZWFkIGFyZ3VtZW50cwotZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi08Y29tcHV0ZXJvdXRwdXQ+QlpJUDI8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWklQPC9jb21wdXRlcm91dHB1dD4sIGluIHRoYXQgb3JkZXIsIGFuZCB3aWxsCi1wcm9jZXNzIHRoZW0gYmVmb3JlIGFueSBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi1UaGlzIGdpdmVzIGEgY29udmVuaWVudCB3YXkgdG8gc3VwcGx5IGRlZmF1bHQgYXJndW1lbnRzLjwvcGFyYT4KLQotPHBhcmE+Q29tcHJlc3Npb24gaXMgYWx3YXlzIHBlcmZvcm1lZCwgZXZlbiBpZiB0aGUgY29tcHJlc3NlZAotZmlsZSBpcyBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwuICBGaWxlcyBvZiBsZXNzIHRoYW4KLWFib3V0IG9uZSBodW5kcmVkIGJ5dGVzIHRlbmQgdG8gZ2V0IGxhcmdlciwgc2luY2UgdGhlIGNvbXByZXNzaW9uCi1tZWNoYW5pc20gaGFzIGEgY29uc3RhbnQgb3ZlcmhlYWQgaW4gdGhlIHJlZ2lvbiBvZiA1MCBieXRlcy4KLVJhbmRvbSBkYXRhIChpbmNsdWRpbmcgdGhlIG91dHB1dCBvZiBtb3N0IGZpbGUgY29tcHJlc3NvcnMpIGlzCi1jb2RlZCBhdCBhYm91dCA4LjA1IGJpdHMgcGVyIGJ5dGUsIGdpdmluZyBhbiBleHBhbnNpb24gb2YgYXJvdW5kCi0wLjUlLjwvcGFyYT4KLQotPHBhcmE+QXMgYSBzZWxmLWNoZWNrIGZvciB5b3VyIHByb3RlY3Rpb24sCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB1c2VzIDMyLWJpdCBDUkNzIHRvIG1ha2UKLXN1cmUgdGhhdCB0aGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgYSBmaWxlIGlzIGlkZW50aWNhbCB0byB0aGUKLW9yaWdpbmFsLiAgVGhpcyBndWFyZHMgYWdhaW5zdCBjb3JydXB0aW9uIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsCi1hbmQgYWdhaW5zdCB1bmRldGVjdGVkIGJ1Z3MgaW4KLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IChob3BlZnVsbHkgdmVyeSB1bmxpa2VseSkuCi1UaGUgY2hhbmNlcyBvZiBkYXRhIGNvcnJ1cHRpb24gZ29pbmcgdW5kZXRlY3RlZCBpcyBtaWNyb3Njb3BpYywKLWFib3V0IG9uZSBjaGFuY2UgaW4gZm91ciBiaWxsaW9uIGZvciBlYWNoIGZpbGUgcHJvY2Vzc2VkLiAgQmUKLWF3YXJlLCB0aG91Z2gsIHRoYXQgdGhlIGNoZWNrIG9jY3VycyB1cG9uIGRlY29tcHJlc3Npb24sIHNvIGl0Ci1jYW4gb25seSB0ZWxsIHlvdSB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZy4gIEl0IGNhbid0IGhlbHAgeW91Ci1yZWNvdmVyIHRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0YS4gIFlvdSBjYW4gdXNlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gdG8gdHJ5IHRvIHJlY292ZXIKLWRhdGEgZnJvbSBkYW1hZ2VkIGZpbGVzLjwvcGFyYT4KLQotPHBhcmE+UmV0dXJuIHZhbHVlczogMCBmb3IgYSBub3JtYWwgZXhpdCwgMSBmb3IgZW52aXJvbm1lbnRhbAotcHJvYmxlbXMgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCBldGMuKSwgMgotdG8gaW5kaWNhdGUgYSBjb3JydXB0IGNvbXByZXNzZWQgZmlsZSwgMyBmb3IgYW4gaW50ZXJuYWwKLWNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaCBjYXVzZWQKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHRvIHBhbmljLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9Im9wdGlvbnMiIHhyZWZsYWJlbD0iT1BUSU9OUyI+Ci08dGl0bGU+T1BUSU9OUzwvdGl0bGU+Ci0KLTx2YXJpYWJsZWxpc3Q+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tYyAtLXN0ZG91dDwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5Db21wcmVzcyBvciBkZWNvbXByZXNzIHRvIHN0YW5kYXJkCi0gIG91dHB1dC48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi1kIC0tZGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5Gb3JjZSBkZWNvbXByZXNzaW9uLgotICA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6Y2F0PC9jb21wdXRlcm91dHB1dD4gYXJlIHJlYWxseSB0aGUgc2FtZQotICBwcm9ncmFtLCBhbmQgdGhlIGRlY2lzaW9uIGFib3V0IHdoYXQgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24KLSAgdGhlIGJhc2lzIG9mIHdoaWNoIG5hbWUgaXMgdXNlZC4gIFRoaXMgZmxhZyBvdmVycmlkZXMgdGhhdAotICBtZWNoYW5pc20sIGFuZCBmb3JjZXMgYnppcDIgdG8gZGVjb21wcmVzcy48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi16IC0tY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlIGNvbXBsZW1lbnQgdG8KLSAgPGNvbXB1dGVyb3V0cHV0Pi1kPC9jb21wdXRlcm91dHB1dD46IGZvcmNlcyBjb21wcmVzc2lvbiwKLSAgcmVnYXJkbGVzcyBvZiB0aGUgaW52b2thdGlvbiBuYW1lLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LXQgLS10ZXN0PC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPkNoZWNrIGludGVncml0eSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocyksIGJ1dAotICBkb24ndCBkZWNvbXByZXNzIHRoZW0uICBUaGlzIHJlYWxseSBwZXJmb3JtcyBhIHRyaWFsCi0gIGRlY29tcHJlc3Npb24gYW5kIHRocm93cyBhd2F5IHRoZSByZXN1bHQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tZiAtLWZvcmNlPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPkZvcmNlIG92ZXJ3cml0ZSBvZiBvdXRwdXQgZmlsZXMuICBOb3JtYWxseSwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gd2lsbCBub3Qgb3ZlcndyaXRlCi0gIGV4aXN0aW5nIG91dHB1dCBmaWxlcy4gIEFsc28gZm9yY2VzCi0gIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHRvIGJyZWFrIGhhcmQgbGlua3MgdG8KLSAgZmlsZXMsIHdoaWNoIGl0IG90aGVyd2lzZSB3b3VsZG4ndCBkby48L3BhcmE+Ci0gIDxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IG5vcm1hbGx5IGRlY2xpbmVzCi0gIHRvIGRlY29tcHJlc3MgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGUgY29ycmVjdCBtYWdpYyBoZWFkZXIKLSAgYnl0ZXMuIElmIGZvcmNlZCAoPGNvbXB1dGVyb3V0cHV0Pi1mPC9jb21wdXRlcm91dHB1dD4pLAotICBob3dldmVyLCBpdCB3aWxsIHBhc3Mgc3VjaCBmaWxlcyB0aHJvdWdoIHVubW9kaWZpZWQuIFRoaXMgaXMKLSAgaG93IEdOVSA8Y29tcHV0ZXJvdXRwdXQ+Z3ppcDwvY29tcHV0ZXJvdXRwdXQ+IGJlaGF2ZXMuPC9wYXJhPgotIDwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tayAtLWtlZXA8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+S2VlcCAoZG9uJ3QgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcKLSAgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbi48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi1zIC0tc21hbGw8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+UmVkdWNlIG1lbW9yeSB1c2FnZSwgZm9yIGNvbXByZXNzaW9uLAotICBkZWNvbXByZXNzaW9uIGFuZCB0ZXN0aW5nLiAgRmlsZXMgYXJlIGRlY29tcHJlc3NlZCBhbmQgdGVzdGVkCi0gIHVzaW5nIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdoaWNoIG9ubHkgcmVxdWlyZXMgMi41IGJ5dGVzIHBlcgotICBibG9jayBieXRlLiAgVGhpcyBtZWFucyBhbnkgZmlsZSBjYW4gYmUgZGVjb21wcmVzc2VkIGluIDIzMDBrCi0gIG9mIG1lbW9yeSwgYWxiZWl0IGF0IGFib3V0IGhhbGYgdGhlIG5vcm1hbCBzcGVlZC48L3BhcmE+Ci0gIDxwYXJhPkR1cmluZyBjb21wcmVzc2lvbiwgPGNvbXB1dGVyb3V0cHV0Pi1zPC9jb21wdXRlcm91dHB1dD4KLSAgc2VsZWN0cyBhIGJsb2NrIHNpemUgb2YgMjAwaywgd2hpY2ggbGltaXRzIG1lbW9yeSB1c2UgdG8gYXJvdW5kCi0gIHRoZSBzYW1lIGZpZ3VyZSwgYXQgdGhlIGV4cGVuc2Ugb2YgeW91ciBjb21wcmVzc2lvbiByYXRpby4gIEluCi0gIHNob3J0LCBpZiB5b3VyIG1hY2hpbmUgaXMgbG93IG9uIG1lbW9yeSAoOCBtZWdhYnl0ZXMgb3IgbGVzcyksCi0gIHVzZSA8Y29tcHV0ZXJvdXRwdXQ+LXM8L2NvbXB1dGVyb3V0cHV0PiBmb3IgZXZlcnl0aGluZy4gIFNlZQotICA8eHJlZiBsaW5rZW5kPSJtZW1vcnktbWFuYWdlbWVudCIvPiBiZWxvdy48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi1xIC0tcXVpZXQ8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+U3VwcHJlc3Mgbm9uLWVzc2VudGlhbCB3YXJuaW5nIG1lc3NhZ2VzLgotICBNZXNzYWdlcyBwZXJ0YWluaW5nIHRvIEkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cwotICB3aWxsIG5vdCBiZSBzdXBwcmVzc2VkLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LXYgLS12ZXJib3NlPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlZlcmJvc2UgbW9kZSAtLSBzaG93IHRoZSBjb21wcmVzc2lvbiByYXRpbyBmb3IKLSAgZWFjaCBmaWxlIHByb2Nlc3NlZC4gIEZ1cnRoZXIKLSAgPGNvbXB1dGVyb3V0cHV0Pi12PC9jb21wdXRlcm91dHB1dD4ncyBpbmNyZWFzZSB0aGUgdmVyYm9zaXR5Ci0gIGxldmVsLCBzcGV3aW5nIG91dCBsb3RzIG9mIGluZm9ybWF0aW9uIHdoaWNoIGlzIHByaW1hcmlseSBvZgotICBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi1MIC0tbGljZW5zZSAtViAtLXZlcnNpb248L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+RGlzcGxheSB0aGUgc29mdHdhcmUgdmVyc2lvbiwgbGljZW5zZSB0ZXJtcyBhbmQKLSAgY29uZGl0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi0xPC9jb21wdXRlcm91dHB1dD4gKG9yCi0gPGNvbXB1dGVyb3V0cHV0Pi0tZmFzdDwvY29tcHV0ZXJvdXRwdXQ+KSB0bwotIDxjb21wdXRlcm91dHB1dD4tOTwvY29tcHV0ZXJvdXRwdXQ+IChvcgotIDxjb21wdXRlcm91dHB1dD4tYmVzdDwvY29tcHV0ZXJvdXRwdXQ+KTwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+U2V0IHRoZSBibG9jayBzaXplIHRvIDEwMCBrLCAyMDAgayAuLi4gIDkwMCBrCi0gIHdoZW4gY29tcHJlc3NpbmcuICBIYXMgbm8gZWZmZWN0IHdoZW4gZGVjb21wcmVzc2luZy4gIFNlZSA8eHJlZgotICBsaW5rZW5kPSJtZW1vcnktbWFuYWdlbWVudCIgLz4gYmVsb3cuICBUaGUKLSAgPGNvbXB1dGVyb3V0cHV0Pi0tZmFzdDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICA8Y29tcHV0ZXJvdXRwdXQ+LS1iZXN0PC9jb21wdXRlcm91dHB1dD4gYWxpYXNlcyBhcmUgcHJpbWFyaWx5Ci0gIGZvciBHTlUgPGNvbXB1dGVyb3V0cHV0Pmd6aXA8L2NvbXB1dGVyb3V0cHV0PiBjb21wYXRpYmlsaXR5LgotICBJbiBwYXJ0aWN1bGFyLCA8Y29tcHV0ZXJvdXRwdXQ+LS1mYXN0PC9jb21wdXRlcm91dHB1dD4gZG9lc24ndAotICBtYWtlIHRoaW5ncyBzaWduaWZpY2FudGx5IGZhc3Rlci4gIEFuZAotICA8Y29tcHV0ZXJvdXRwdXQ+LS1iZXN0PC9jb21wdXRlcm91dHB1dD4gbWVyZWx5IHNlbGVjdHMgdGhlCi0gIGRlZmF1bHQgYmVoYXZpb3VyLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LS08L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+VHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLAotICBldmVuIGlmIHRoZXkgc3RhcnQgd2l0aCBhIGRhc2guICBUaGlzIGlzIHNvIHlvdSBjYW4gaGFuZGxlCi0gIGZpbGVzIHdpdGggbmFtZXMgYmVnaW5uaW5nIHdpdGggYSBkYXNoLCBmb3IgZXhhbXBsZToKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyIC0tCi0gIC1teWZpbGVuYW1lPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tLXJlcGV0aXRpdmUtZmFzdDwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tLXJlcGV0aXRpdmUtYmVzdDwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5UaGVzZSBmbGFncyBhcmUgcmVkdW5kYW50IGluIHZlcnNpb25zIDAuOS41IGFuZAotICBhYm92ZS4gIFRoZXkgcHJvdmlkZWQgc29tZSBjb2Fyc2UgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlvdXIgb2YKLSAgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVyc2lvbnMsIHdoaWNoIHdhcyBzb21ldGltZXMKLSAgdXNlZnVsLiAgMC45LjUgYW5kIGFib3ZlIGhhdmUgYW4gaW1wcm92ZWQgYWxnb3JpdGhtIHdoaWNoCi0gIHJlbmRlcnMgdGhlc2UgZmxhZ3MgaXJyZWxldmFudC48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotPC92YXJpYWJsZWxpc3Q+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJtZW1vcnktbWFuYWdlbWVudCIgeHJlZmxhYmVsPSJNRU1PUlkgTUFOQUdFTUVOVCI+Ci08dGl0bGU+TUVNT1JZIE1BTkFHRU1FTlQ8L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjb21wcmVzc2VzIGxhcmdlCi1maWxlcyBpbiBibG9ja3MuICBUaGUgYmxvY2sgc2l6ZSBhZmZlY3RzIGJvdGggdGhlIGNvbXByZXNzaW9uCi1yYXRpbyBhY2hpZXZlZCwgYW5kIHRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCBmb3IgY29tcHJlc3Npb24KLWFuZCBkZWNvbXByZXNzaW9uLiAgVGhlIGZsYWdzIDxjb21wdXRlcm91dHB1dD4tMTwvY29tcHV0ZXJvdXRwdXQ+Ci10aHJvdWdoIDxjb21wdXRlcm91dHB1dD4tOTwvY29tcHV0ZXJvdXRwdXQ+IHNwZWNpZnkgdGhlIGJsb2NrCi1zaXplIHRvIGJlIDEwMCwwMDAgYnl0ZXMgdGhyb3VnaCA5MDAsMDAwIGJ5dGVzICh0aGUgZGVmYXVsdCkKLXJlc3BlY3RpdmVseS4gIEF0IGRlY29tcHJlc3Npb24gdGltZSwgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IKLWNvbXByZXNzaW9uIGlzIHJlYWQgZnJvbSB0aGUgaGVhZGVyIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUsIGFuZAotPGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiB0aGVuIGFsbG9jYXRlcyBpdHNlbGYKLWp1c3QgZW5vdWdoIG1lbW9yeSB0byBkZWNvbXByZXNzIHRoZSBmaWxlLiAgU2luY2UgYmxvY2sgc2l6ZXMgYXJlCi1zdG9yZWQgaW4gY29tcHJlc3NlZCBmaWxlcywgaXQgZm9sbG93cyB0aGF0IHRoZSBmbGFncwotPGNvbXB1dGVyb3V0cHV0Pi0xPC9jb21wdXRlcm91dHB1dD4gdG8KLTxjb21wdXRlcm91dHB1dD4tOTwvY29tcHV0ZXJvdXRwdXQ+IGFyZSBpcnJlbGV2YW50IHRvIGFuZCBzbwotaWdub3JlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi48L3BhcmE+Ci0KLTxwYXJhPkNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJlcXVpcmVtZW50cywgaW4gYnl0ZXMsIGNhbiBiZQotZXN0aW1hdGVkIGFzOjwvcGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLUNvbXByZXNzaW9uOiAgIDQwMGsgKyAoIDggeCBibG9jayBzaXplICkKLQotRGVjb21wcmVzc2lvbjogMTAwayArICggNCB4IGJsb2NrIHNpemUgKSwgb3IKLSAgICAgICAgICAgICAgIDEwMGsgKyAoIDIuNSB4IGJsb2NrIHNpemUgKQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+TGFyZ2VyIGJsb2NrIHNpemVzIGdpdmUgcmFwaWRseSBkaW1pbmlzaGluZyBtYXJnaW5hbAotcmV0dXJucy4gIE1vc3Qgb2YgdGhlIGNvbXByZXNzaW9uIGNvbWVzIGZyb20gdGhlIGZpcnN0IHR3byBvcgotdGhyZWUgaHVuZHJlZCBrIG9mIGJsb2NrIHNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluIG1pbmQgd2hlbgotdXNpbmcgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gb24gc21hbGwgbWFjaGluZXMuCi1JdCBpcyBhbHNvIGltcG9ydGFudCB0byBhcHByZWNpYXRlIHRoYXQgdGhlIGRlY29tcHJlc3Npb24gbWVtb3J5Ci1yZXF1aXJlbWVudCBpcyBzZXQgYXQgY29tcHJlc3Npb24gdGltZSBieSB0aGUgY2hvaWNlIG9mIGJsb2NrCi1zaXplLjwvcGFyYT4KLQotPHBhcmE+Rm9yIGZpbGVzIGNvbXByZXNzZWQgd2l0aCB0aGUgZGVmYXVsdCA5MDBrIGJsb2NrIHNpemUsCi08Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgcmVxdWlyZSBhYm91dCAzNzAwCi1rYnl0ZXMgdG8gZGVjb21wcmVzcy4gIFRvIHN1cHBvcnQgZGVjb21wcmVzc2lvbiBvZiBhbnkgZmlsZSBvbiBhCi00IG1lZ2FieXRlIG1hY2hpbmUsIDxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gaGFzCi1hbiBvcHRpb24gdG8gZGVjb21wcmVzcyB1c2luZyBhcHByb3hpbWF0ZWx5IGhhbGYgdGhpcyBhbW91bnQgb2YKLW1lbW9yeSwgYWJvdXQgMjMwMCBrYnl0ZXMuICBEZWNvbXByZXNzaW9uIHNwZWVkIGlzIGFsc28gaGFsdmVkLAotc28geW91IHNob3VsZCB1c2UgdGhpcyBvcHRpb24gb25seSB3aGVyZSBuZWNlc3NhcnkuICBUaGUgcmVsZXZhbnQKLWZsYWcgaXMgPGNvbXB1dGVyb3V0cHV0Pi1zPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeQotY29uc3RyYWludHMgYWxsb3csIHNpbmNlIHRoYXQgbWF4aW1pc2VzIHRoZSBjb21wcmVzc2lvbiBhY2hpZXZlZC4KLUNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0dWFsbHkgdW5hZmZlY3RlZCBieQotYmxvY2sgc2l6ZS48L3BhcmE+Ci0KLTxwYXJhPkFub3RoZXIgc2lnbmlmaWNhbnQgcG9pbnQgYXBwbGllcyB0byBmaWxlcyB3aGljaCBmaXQgaW4gYQotc2luZ2xlIGJsb2NrIC0tIHRoYXQgbWVhbnMgbW9zdCBmaWxlcyB5b3UnZCBlbmNvdW50ZXIgdXNpbmcgYQotbGFyZ2UgYmxvY2sgc2l6ZS4gIFRoZSBhbW91bnQgb2YgcmVhbCBtZW1vcnkgdG91Y2hlZCBpcwotcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBzaW5jZSB0aGUgZmlsZSBpcyBzbWFsbGVyCi10aGFuIGEgYmxvY2suICBGb3IgZXhhbXBsZSwgY29tcHJlc3NpbmcgYSBmaWxlIDIwLDAwMCBieXRlcyBsb25nCi13aXRoIHRoZSBmbGFnIDxjb21wdXRlcm91dHB1dD4tOTwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgY2F1c2UgdGhlCi1jb21wcmVzc29yIHRvIGFsbG9jYXRlIGFyb3VuZCA3NjAwayBvZiBtZW1vcnksIGJ1dCBvbmx5IHRvdWNoCi00MDBrICsgMjAwMDAgKiA4ID0gNTYwIGtieXRlcyBvZiBpdC4gIFNpbWlsYXJseSwgdGhlIGRlY29tcHJlc3Nvcgotd2lsbCBhbGxvY2F0ZSAzNzAwayBidXQgb25seSB0b3VjaCAxMDBrICsgMjAwMDAgKiA0ID0gMTgwCi1rYnl0ZXMuPC9wYXJhPgotCi08cGFyYT5IZXJlIGlzIGEgdGFibGUgd2hpY2ggc3VtbWFyaXNlcyB0aGUgbWF4aW11bSBtZW1vcnkgdXNhZ2UKLWZvciBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMuICBBbHNvIHJlY29yZGVkIGlzIHRoZSB0b3RhbCBjb21wcmVzc2VkCi1zaXplIGZvciAxNCBmaWxlcyBvZiB0aGUgQ2FsZ2FyeSBUZXh0IENvbXByZXNzaW9uIENvcnB1cwotdG90YWxsaW5nIDMsMTQxLDYyMiBieXRlcy4gIFRoaXMgY29sdW1uIGdpdmVzIHNvbWUgZmVlbCBmb3IgaG93Ci1jb21wcmVzc2lvbiB2YXJpZXMgd2l0aCBibG9jayBzaXplLiAgVGhlc2UgZmlndXJlcyB0ZW5kIHRvCi11bmRlcnN0YXRlIHRoZSBhZHZhbnRhZ2Ugb2YgbGFyZ2VyIGJsb2NrIHNpemVzIGZvciBsYXJnZXIgZmlsZXMsCi1zaW5jZSB0aGUgQ29ycHVzIGlzIGRvbWluYXRlZCBieSBzbWFsbGVyIGZpbGVzLjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotICAgICAgICBDb21wcmVzcyAgIERlY29tcHJlc3MgICBEZWNvbXByZXNzICAgQ29ycHVzCi1GbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIC1zIHVzYWdlICAgICBTaXplCi0KLSAtMSAgICAgIDEyMDBrICAgICAgIDUwMGsgICAgICAgICAzNTBrICAgICAgOTE0NzA0Ci0gLTIgICAgICAyMDAwayAgICAgICA5MDBrICAgICAgICAgNjAwayAgICAgIDg3NzcwMwotIC0zICAgICAgMjgwMGsgICAgICAxMzAwayAgICAgICAgIDg1MGsgICAgICA4NjAzMzgKLSAtNCAgICAgIDM2MDBrICAgICAgMTcwMGsgICAgICAgIDExMDBrICAgICAgODQ2ODk5Ci0gLTUgICAgICA0NDAwayAgICAgIDIxMDBrICAgICAgICAxMzUwayAgICAgIDg0NTE2MAotIC02ICAgICAgNTIwMGsgICAgICAyNTAwayAgICAgICAgMTYwMGsgICAgICA4Mzg2MjYKLSAtNyAgICAgIDYxMDBrICAgICAgMjkwMGsgICAgICAgIDE4NTBrICAgICAgODM0MDk2Ci0gLTggICAgICA2ODAwayAgICAgIDMzMDBrICAgICAgICAyMTAwayAgICAgIDgyODY0MgotIC05ICAgICAgNzYwMGsgICAgICAzNzAwayAgICAgICAgMjM1MGsgICAgICA4Mjg2NDIKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJyZWNvdmVyaW5nIiB4cmVmbGFiZWw9IlJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVMiPgotPHRpdGxlPlJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVM8L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjb21wcmVzc2VzIGZpbGVzIGluCi1ibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzIGxvbmcuICBFYWNoIGJsb2NrIGlzIGhhbmRsZWQKLWluZGVwZW5kZW50bHkuICBJZiBhIG1lZGlhIG9yIHRyYW5zbWlzc2lvbiBlcnJvciBjYXVzZXMgYQotbXVsdGktYmxvY2sgPGNvbXB1dGVyb3V0cHV0Pi5iejI8L2NvbXB1dGVyb3V0cHV0PiBmaWxlIHRvIGJlY29tZQotZGFtYWdlZCwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlY292ZXIgZGF0YSBmcm9tIHRoZSB1bmRhbWFnZWQKLWJsb2NrcyBpbiB0aGUgZmlsZS48L3BhcmE+Ci0KLTxwYXJhPlRoZSBjb21wcmVzc2VkIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggYmxvY2sgaXMgZGVsaW1pdGVkIGJ5Ci1hIDQ4LWJpdCBwYXR0ZXJuLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBmaW5kIHRoZSBibG9jawotYm91bmRhcmllcyB3aXRoIHJlYXNvbmFibGUgY2VydGFpbnR5LiAgRWFjaCBibG9jayBhbHNvIGNhcnJpZXMKLWl0cyBvd24gMzItYml0IENSQywgc28gZGFtYWdlZCBibG9ja3MgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbQotdW5kYW1hZ2VkIG9uZXMuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gaXMgYSBzaW1wbGUKLXByb2dyYW0gd2hvc2UgcHVycG9zZSBpcyB0byBzZWFyY2ggZm9yIGJsb2NrcyBpbgotPGNvbXB1dGVyb3V0cHV0Pi5iejI8L2NvbXB1dGVyb3V0cHV0PiBmaWxlcywgYW5kIHdyaXRlIGVhY2ggYmxvY2sKLW91dCBpbnRvIGl0cyBvd24gPGNvbXB1dGVyb3V0cHV0Pi5iejI8L2NvbXB1dGVyb3V0cHV0PiBmaWxlLiAgWW91Ci1jYW4gdGhlbiB1c2UgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyIC10PC9jb21wdXRlcm91dHB1dD4gdG8gdGVzdAotdGhlIGludGVncml0eSBvZiB0aGUgcmVzdWx0aW5nIGZpbGVzLCBhbmQgZGVjb21wcmVzcyB0aG9zZSB3aGljaAotYXJlIHVuZGFtYWdlZC48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMnJlY292ZXI8L2NvbXB1dGVyb3V0cHV0PiB0YWtlcyBhCi1zaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW1hZ2VkIGZpbGUsIGFuZCB3cml0ZXMgYQotbnVtYmVyIG9mIGZpbGVzIDxjb21wdXRlcm91dHB1dD5yZWMwMDAxZmlsZS5iejI8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5yZWMwMDAyZmlsZS5iejI8L2NvbXB1dGVyb3V0cHV0PiwgZXRjLCBjb250YWluaW5nCi10aGUgZXh0cmFjdGVkIGJsb2Nrcy4gIFRoZSBvdXRwdXQgZmlsZW5hbWVzIGFyZSBkZXNpZ25lZCBzbyB0aGF0Ci10aGUgdXNlIG9mIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb2Nlc3NpbmcgLS0gZm9yIGV4YW1wbGUsCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDIgLWRjIHJlYypmaWxlLmJ6MiAmIzYyOwotcmVjb3ZlcmVkX2RhdGE8L2NvbXB1dGVyb3V0cHV0PiAtLSBsaXN0cyB0aGUgZmlsZXMgaW4gdGhlIGNvcnJlY3QKLW9yZGVyLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAycmVjb3ZlcjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBiZSBvZgotbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIDxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4KLWZpbGVzLCBhcyB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5IGZ1dGlsZQotdG8gdXNlIGl0IG9uIGRhbWFnZWQgc2luZ2xlLWJsb2NrIGZpbGVzLCBzaW5jZSBhIGRhbWFnZWQgYmxvY2sKLWNhbm5vdCBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW5pbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEKLWxvc3MgdGhyb3VnaCBtZWRpYSBvciB0cmFuc21pc3Npb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIKLWNvbXByZXNzaW5nIHdpdGggYSBzbWFsbGVyIGJsb2NrIHNpemUuPC9wYXJhPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0icGVyZm9ybWFuY2UiIHhyZWZsYWJlbD0iUEVSRk9STUFOQ0UgTk9URVMiPgotPHRpdGxlPlBFUkZPUk1BTkNFIE5PVEVTPC90aXRsZT4KLQotPHBhcmE+VGhlIHNvcnRpbmcgcGhhc2Ugb2YgY29tcHJlc3Npb24gZ2F0aGVycyB0b2dldGhlciBzaW1pbGFyCi1zdHJpbmdzIGluIHRoZSBmaWxlLiAgQmVjYXVzZSBvZiB0aGlzLCBmaWxlcyBjb250YWluaW5nIHZlcnkgbG9uZwotcnVucyBvZiByZXBlYXRlZCBzeW1ib2xzLCBsaWtlICJhYWJhYWJhYWJhYWIgLi4uIiAgKHJlcGVhdGVkCi1zZXZlcmFsIGh1bmRyZWQgdGltZXMpIG1heSBjb21wcmVzcyBtb3JlIHNsb3dseSB0aGFuIG5vcm1hbC4KLVZlcnNpb25zIDAuOS41IGFuZCBhYm92ZSBmYXJlIG11Y2ggYmV0dGVyIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMKLWluIHRoaXMgcmVzcGVjdC4gIFRoZSByYXRpbyBiZXR3ZWVuIHdvcnN0LWNhc2UgYW5kIGF2ZXJhZ2UtY2FzZQotY29tcHJlc3Npb24gdGltZSBpcyBpbiB0aGUgcmVnaW9uIG9mIDEwOjEuICBGb3IgcHJldmlvdXMKLXZlcnNpb25zLCB0aGlzIGZpZ3VyZSB3YXMgbW9yZSBsaWtlIDEwMDoxLiAgWW91IGNhbiB1c2UgdGhlCi08Y29tcHV0ZXJvdXRwdXQ+LXZ2dnY8L2NvbXB1dGVyb3V0cHV0PiBvcHRpb24gdG8gbW9uaXRvciBwcm9ncmVzcwotaW4gZ3JlYXQgZGV0YWlsLCBpZiB5b3Ugd2FudC48L3BhcmE+Ci0KLTxwYXJhPkRlY29tcHJlc3Npb24gc3BlZWQgaXMgdW5hZmZlY3RlZCBieSB0aGVzZQotcGhlbm9tZW5hLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gdXN1YWxseSBhbGxvY2F0ZXMKLXNldmVyYWwgbWVnYWJ5dGVzIG9mIG1lbW9yeSB0byBvcGVyYXRlIGluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbAotb3ZlciBpdCBpbiBhIGZhaXJseSByYW5kb20gZmFzaGlvbi4gIFRoaXMgbWVhbnMgdGhhdCBwZXJmb3JtYW5jZSwKLWJvdGggZm9yIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgYnkKLXRoZSBzcGVlZCBhdCB3aGljaCB5b3VyIG1hY2hpbmUgY2FuIHNlcnZpY2UgY2FjaGUgbWlzc2VzLgotQmVjYXVzZSBvZiB0aGlzLCBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvIHJlZHVjZSB0aGUgbWlzcwotcmF0ZSBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkgbGFyZ2UKLXBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gIEkgaW1hZ2luZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gd2lsbCBwZXJmb3JtIGJlc3Qgb24KLW1hY2hpbmVzIHdpdGggdmVyeSBsYXJnZSBjYWNoZXMuPC9wYXJhPgotCi08L3NlY3QxPgotCi0KLQotPHNlY3QxIGlkPSJjYXZlYXRzIiB4cmVmbGFiZWw9IkNBVkVBVFMiPgotPHRpdGxlPkNBVkVBVFM8L3RpdGxlPgotCi08cGFyYT5JL08gZXJyb3IgbWVzc2FnZXMgYXJlIG5vdCBhcyBoZWxwZnVsIGFzIHRoZXkgY291bGQgYmUuCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB0cmllcyBoYXJkIHRvIGRldGVjdCBJL08KLWVycm9ycyBhbmQgZXhpdCBjbGVhbmx5LCBidXQgdGhlIGRldGFpbHMgb2Ygd2hhdCB0aGUgcHJvYmxlbSBpcwotc29tZXRpbWVzIHNlZW0gcmF0aGVyIG1pc2xlYWRpbmcuPC9wYXJhPgotCi08cGFyYT5UaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gJmJ6LXZlcnNpb247IG9mCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0Pi4gIENvbXByZXNzZWQgZGF0YSBjcmVhdGVkIGJ5Ci10aGlzIHZlcnNpb24gaXMgZW50aXJlbHkgZm9yd2FyZHMgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggdGhlCi1wcmV2aW91cyBwdWJsaWMgcmVsZWFzZXMsIHZlcnNpb25zIDAuMXBsMiwgMC45LjAgYW5kIDAuOS41LCAxLjAuMCwKLTEuMC4xLCAxLjAuMiBhbmQgMS4wLjMsIGJ1dCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOiAwLjkuMCBhbmQKLWFib3ZlIGNhbiBjb3JyZWN0bHkgZGVjb21wcmVzcyBtdWx0aXBsZSBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcy4KLTAuMXBsMiBjYW5ub3QgZG8gdGhpczsgaXQgd2lsbCBzdG9wIGFmdGVyIGRlY29tcHJlc3NpbmcganVzdCB0aGUgZmlyc3QKLWZpbGUgaW4gdGhlIHN0cmVhbS48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMnJlY292ZXI8L2NvbXB1dGVyb3V0cHV0PiB2ZXJzaW9ucwotcHJpb3IgdG8gMS4wLjIgdXNlZCAzMi1iaXQgaW50ZWdlcnMgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgaW4KLWNvbXByZXNzZWQgZmlsZXMsIHNvIGl0IGNvdWxkIG5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlCi10aGFuIDUxMiBtZWdhYnl0ZXMgbG9uZy4gIFZlcnNpb25zIDEuMC4yIGFuZCBhYm92ZSB1c2UgNjQtYml0IGludHMKLW9uIHNvbWUgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZCB0YXJnZXRzLCBhbmQKLVdpbmRvd3MpLiBUbyBlc3RhYmxpc2ggd2hldGhlciBvciBub3QKLTxjb21wdXRlcm91dHB1dD5iemlwMnJlY292ZXI8L2NvbXB1dGVyb3V0cHV0PiB3YXMgYnVpbHQgd2l0aCBzdWNoCi1hIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4gSW4gYW55IGV2ZW50IHlvdSBjYW4KLWJ1aWxkIHlvdXJzZWxmIGFuIHVubGltaXRlZCB2ZXJzaW9uIGlmIHlvdSBjYW4gcmVjb21waWxlIGl0IHdpdGgKLTxjb21wdXRlcm91dHB1dD5NYXliZVVJbnQ2NDwvY29tcHV0ZXJvdXRwdXQ+IHNldCB0byBiZSBhbgotdW5zaWduZWQgNjQtYml0IGludGVnZXIuPC9wYXJhPgotCi08L3NlY3QxPgotCi0KLQotPHNlY3QxIGlkPSJhdXRob3IiIHhyZWZsYWJlbD0iQVVUSE9SIj4KLTx0aXRsZT5BVVRIT1I8L3RpdGxlPgotCi08cGFyYT5KdWxpYW4gU2V3YXJkLAotPGNvbXB1dGVyb3V0cHV0PiZiei1lbWFpbDs8L2NvbXB1dGVyb3V0cHV0PjwvcGFyYT4KLQotPHBhcmE+VGhlIGlkZWFzIGVtYm9kaWVkIGluCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlCi1mb2xsb3dpbmcgcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUKLWJsb2NrIHNvcnRpbmcgdHJhbnNmb3JtYXRpb24pLCBEYXZpZCBXaGVlbGVyIChhZ2FpbiwgZm9yIHRoZQotSHVmZm1hbiBjb2RlciksIFBldGVyIEZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2RpbmcgbW9kZWwgaW4KLXRoZSBvcmlnaW5hbCA8Y29tcHV0ZXJvdXRwdXQ+YnppcDwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgbWFueQotcmVmaW5lbWVudHMpLCBhbmQgQWxpc3RhaXIgTW9mZmF0LCBSYWRmb3JkIE5lYWwgYW5kIElhbiBXaXR0ZW4KLShmb3IgdGhlIGFyaXRobWV0aWMgY29kZXIgaW4gdGhlIG9yaWdpbmFsCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDwvY29tcHV0ZXJvdXRwdXQ+KS4gIEkgYW0gbXVjaCBpbmRlYnRlZCBmb3IKLXRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFudWFsIGluIHRoZSBzb3VyY2UKLWRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyBvZiBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuCi12b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vayBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywKLXNvIGFzIHRvIHNwZWVkIHVwIGNvbXByZXNzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0bwotaW1wcm92ZSB0aGUgd29yc3QtY2FzZSBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIAotRG9ubmEgUm9iaW5zb24gWE1MaXNlZCB0aGUgZG9jdW1lbnRhdGlvbi4KLU1hbnkgcGVvcGxlIHNlbnQKLXBhdGNoZXMsIGhlbHBlZCB3aXRoIHBvcnRhYmlsaXR5IHByb2JsZW1zLCBsZW50IG1hY2hpbmVzLCBnYXZlCi1hZHZpY2UgYW5kIHdlcmUgZ2VuZXJhbGx5IGhlbHBmdWwuPC9wYXJhPgotCi08L3NlY3QxPgotCi08L2NoYXB0ZXI+Ci0KLQotCi08Y2hhcHRlciBpZD0ibGlicHJvZyIgeHJlZmxhYmVsPSJQcm9ncmFtbWluZyB3aXRoIGxpYmJ6aXAyIj4KLTx0aXRsZT4KLVByb2dyYW1taW5nIHdpdGggPGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4KLTwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgY2hhcHRlciBkZXNjcmliZXMgdGhlIHByb2dyYW1taW5nIGludGVyZmFjZSB0bwotPGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Gb3IgZ2VuZXJhbCBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLCBwYXJ0aWN1bGFybHkgYWJvdXQKLW1lbW9yeSB1c2UgYW5kIHBlcmZvcm1hbmNlIGFzcGVjdHMsIHlvdSdkIGJlIHdlbGwgYWR2aXNlZCB0byByZWFkCi08eHJlZiBsaW5rZW5kPSJ1c2luZyIvPiBhcyB3ZWxsLjwvcGFyYT4KLQotCi08c2VjdDEgaWQ9InRvcC1sZXZlbCIgeHJlZmxhYmVsPSJUb3AtbGV2ZWwgc3RydWN0dXJlIj4KLTx0aXRsZT5Ub3AtbGV2ZWwgc3RydWN0dXJlPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gaXMgYSBmbGV4aWJsZQotbGlicmFyeSBmb3IgY29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcgZGF0YSBpbiB0aGUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGRhdGEgZm9ybWF0LiAgQWx0aG91Z2gKLXBhY2thZ2VkIGFzIGEgc2luZ2xlIGVudGl0eSwgaXQgaGVscHMgdG8gcmVnYXJkIHRoZSBsaWJyYXJ5IGFzCi10aHJlZSBzZXBhcmF0ZSBwYXJ0czogdGhlIGxvdyBsZXZlbCBpbnRlcmZhY2UsIGFuZCB0aGUgaGlnaCBsZXZlbAotaW50ZXJmYWNlLCBhbmQgc29tZSB1dGlsaXR5IGZ1bmN0aW9ucy48L3BhcmE+Ci0KLTxwYXJhPlRoZSBzdHJ1Y3R1cmUgb2YKLTxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+J3MgaW50ZXJmYWNlcyBpcyBzaW1pbGFyCi10byB0aGF0IG9mIEplYW4tbG91cCBHYWlsbHkncyBhbmQgTWFyayBBZGxlcidzIGV4Y2VsbGVudAotPGNvbXB1dGVyb3V0cHV0PnpsaWI8L2NvbXB1dGVyb3V0cHV0PiBsaWJyYXJ5LjwvcGFyYT4KLQotPHBhcmE+QWxsIGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2xzIGhhdmUgbmFtZXMgYmVnaW5uaW5nCi08Y29tcHV0ZXJvdXRwdXQ+QloyXzwvY29tcHV0ZXJvdXRwdXQ+LiAgVGhpcyBpcyBuZXcgaW4gdmVyc2lvbgotMS4wLiAgVGhlIGludGVudGlvbiBpcyB0byBtaW5pbWlzZSBwb2xsdXRpb24gb2YgdGhlIG5hbWVzcGFjZXMgb2YKLWxpYnJhcnkgY2xpZW50cy48L3BhcmE+Ci0KLTxwYXJhPlRvIHVzZSBhbnkgcGFydCBvZiB0aGUgbGlicmFyeSwgeW91IG5lZWQgdG8KLTxjb21wdXRlcm91dHB1dD4jaW5jbHVkZSAmbHQ7YnpsaWIuaCZndDs8L2NvbXB1dGVyb3V0cHV0PgotaW50byB5b3VyIHNvdXJjZXMuPC9wYXJhPgotCi0KLQotPHNlY3QyIGlkPSJsbC1zdW1tYXJ5IiB4cmVmbGFiZWw9Ikxvdy1sZXZlbCBzdW1tYXJ5Ij4KLTx0aXRsZT5Mb3ctbGV2ZWwgc3VtbWFyeTwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHNlcnZpY2VzIGZvciBjb21wcmVzc2luZyBhbmQKLWRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkuICBUaGVyZSdzIG5vIHByb3Zpc2lvbiBmb3IgZGVhbGluZwotd2l0aCBmaWxlcywgc3RyZWFtcyBvciBhbnkgb3RoZXIgSS9PIG1lY2hhbmlzbXMsIGp1c3Qgc3RyYWlnaHQKLW1lbW9yeS10by1tZW1vcnkgd29yay4gIEluIGZhY3QsIHRoaXMgcGFydCBvZiB0aGUgbGlicmFyeSBjYW4gYmUKLWNvbXBpbGVkIHdpdGhvdXQgaW5jbHVzaW9uIG9mCi08Y29tcHV0ZXJvdXRwdXQ+c3RkaW8uaDwvY29tcHV0ZXJvdXRwdXQ+LCB3aGljaCBtYXkgYmUgaGVscGZ1bAotZm9yIGVtYmVkZGVkIGFwcGxpY2F0aW9ucy48L3BhcmE+Ci0KLTxwYXJhPlRoZSBsb3ctbGV2ZWwgcGFydCBvZiB0aGUgbGlicmFyeSBoYXMgbm8gZ2xvYmFsIHZhcmlhYmxlcwotYW5kIGlzIHRoZXJlZm9yZSB0aHJlYWQtc2FmZS48L3BhcmE+Ci0KLTxwYXJhPlNpeCByb3V0aW5lcyBtYWtlIHVwIHRoZSBsb3cgbGV2ZWwgaW50ZXJmYWNlOgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4sIGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4gZm9yCi1jb21wcmVzc2lvbiwgYW5kIGEgY29ycmVzcG9uZGluZyB0cmlvCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+IGZvcgotZGVjb21wcmVzc2lvbi4gIFRoZSA8Y29tcHV0ZXJvdXRwdXQ+KkluaXQ8L2NvbXB1dGVyb3V0cHV0PgotZnVuY3Rpb25zIGFsbG9jYXRlIG1lbW9yeSBmb3IgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBhbmQgZG8KLW90aGVyIGluaXRpYWxpc2F0aW9ucywgd2hpbHN0IHRoZQotPGNvbXB1dGVyb3V0cHV0PipFbmQ8L2NvbXB1dGVyb3V0cHV0PiBmdW5jdGlvbnMgY2xvc2UgZG93bgotb3BlcmF0aW9ucyBhbmQgcmVsZWFzZSBtZW1vcnkuPC9wYXJhPgotCi08cGFyYT5UaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi4gIFRoZXNlCi1jb21wcmVzcyBhbmQgZGVjb21wcmVzcyBkYXRhIGZyb20gYSB1c2VyLXN1cHBsaWVkIGlucHV0IGJ1ZmZlciB0bwotYSB1c2VyLXN1cHBsaWVkIG91dHB1dCBidWZmZXIuICBUaGVzZSBidWZmZXJzIGNhbiBiZSBhbnkgc2l6ZTsKLWFyYml0cmFyeSBxdWFudGl0aWVzIG9mIGRhdGEgYXJlIGhhbmRsZWQgYnkgbWFraW5nIHJlcGVhdGVkIGNhbGxzCi10byB0aGVzZSBmdW5jdGlvbnMuICBUaGlzIGlzIGEgZmxleGlibGUgbWVjaGFuaXNtIGFsbG93aW5nIGEKLWNvbnN1bWVyLXB1bGwgc3R5bGUgb2YgYWN0aXZpdHksIG9yIHByb2R1Y2VyLXB1c2gsIG9yIGEgbWl4dHVyZQotb2YgYm90aC48L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJobC1zdW1tYXJ5IiB4cmVmbGFiZWw9IkhpZ2gtbGV2ZWwgc3VtbWFyeSI+Ci08dGl0bGU+SGlnaC1sZXZlbCBzdW1tYXJ5PC90aXRsZT4KLQotPHBhcmE+VGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgc29tZSBoYW5keSB3cmFwcGVycyBhcm91bmQgdGhlCi1sb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIGZhY2lsaXRhdGUgcmVhZGluZyBhbmQgd3JpdGluZwotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0IGZpbGVzCi0oPGNvbXB1dGVyb3V0cHV0Pi5iejI8L2NvbXB1dGVyb3V0cHV0PiBmaWxlcykuICBUaGUgcm91dGluZXMKLXByb3ZpZGUgaG9va3MgdG8gZmFjaWxpdGF0ZSByZWFkaW5nIGZpbGVzIGluIHdoaWNoIHRoZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZGF0YSBzdHJlYW0gaXMgZW1iZWRkZWQKLXdpdGhpbiBzb21lIGxhcmdlci1zY2FsZSBmaWxlIHN0cnVjdHVyZSwgb3Igd2hlcmUgdGhlcmUgYXJlCi1tdWx0aXBsZSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkYXRhIHN0cmVhbXMKLWNvbmNhdGVuYXRlZCBlbmQtdG8tZW5kLjwvcGFyYT4KLQotPHBhcmE+Rm9yIHJlYWRpbmcgZmlsZXMsCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZE9wZW48L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4gYW5kIAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiBhcmUKLXN1cHBsaWVkLiAgRm9yIHdyaXRpbmcgZmlsZXMsCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGU8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUZpbmlzaDwvY29tcHV0ZXJvdXRwdXQ+IGFyZQotYXZhaWxhYmxlLjwvcGFyYT4KLQotPHBhcmE+QXMgd2l0aCB0aGUgbG93LWxldmVsIGxpYnJhcnksIG5vIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHVzZWQKLXNvIHRoZSBsaWJyYXJ5IGlzIHBlciBzZSB0aHJlYWQtc2FmZS4gIEhvd2V2ZXIsIGlmIEkvTyBlcnJvcnMKLW9jY3VyIHdoaWxzdCByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIHVuZGVybHlpbmcgY29tcHJlc3NlZCBmaWxlcywKLXlvdSBtYXkgaGF2ZSB0byBjb25zdWx0IDxjb21wdXRlcm91dHB1dD5lcnJubzwvY29tcHV0ZXJvdXRwdXQ+IHRvCi1kZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4gIEluIHRoYXQgY2FzZSwgeW91J2QgbmVlZCBhIEMKLWxpYnJhcnkgd2hpY2ggY29ycmVjdGx5IHN1cHBvcnRzCi08Y29tcHV0ZXJvdXRwdXQ+ZXJybm88L2NvbXB1dGVyb3V0cHV0PiBpbiBhIG11bHRpdGhyZWFkZWQKLWVudmlyb25tZW50LjwvcGFyYT4KLQotPHBhcmE+VG8gbWFrZSB0aGUgbGlicmFyeSBhIGxpdHRsZSBzaW1wbGVyIGFuZCBtb3JlIHBvcnRhYmxlLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD4gcmVxdWlyZSB5b3UgdG8KLXBhc3MgdGhlbSBmaWxlIGhhbmRsZXMgKDxjb21wdXRlcm91dHB1dD5GSUxFKjwvY29tcHV0ZXJvdXRwdXQ+cykKLXdoaWNoIGhhdmUgcHJldmlvdXNseSBiZWVuIG9wZW5lZCBmb3IgcmVhZGluZyBvciB3cml0aW5nCi1yZXNwZWN0aXZlbHkuICBUaGF0IGF2b2lkcyBwb3J0YWJpbGl0eSBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGgKLWZpbGUgb3BlcmF0aW9ucyBhbmQgZmlsZSBhdHRyaWJ1dGVzLCB3aGlsc3Qgbm90IGJlaW5nIG11Y2ggb2YgYW4KLWltcG9zaXRpb24gb24gdGhlIHByb2dyYW1tZXIuPC9wYXJhPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0idXRpbC1mbnMtc3VtbWFyeSIgeHJlZmxhYmVsPSJVdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5Ij4KLTx0aXRsZT5VdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5PC90aXRsZT4KLQotPHBhcmE+Rm9yIHZlcnkgc2ltcGxlIG5lZWRzLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gYXJlCi1wcm92aWRlZC4gIFRoZXNlIGNvbXByZXNzIGRhdGEgaW4gbWVtb3J5IGZyb20gb25lIGJ1ZmZlciB0bwotYW5vdGhlciBidWZmZXIgaW4gYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gIFlvdSBzaG91bGQgYXNzZXNzCi13aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBmdWxmaWxsIHlvdXIgbWVtb3J5LXRvLW1lbW9yeQotY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMgYmVmb3JlIGludmVzdGluZyBlZmZvcnQgaW4KLXVuZGVyc3RhbmRpbmcgdGhlIG1vcmUgZ2VuZXJhbCBidXQgbW9yZSBjb21wbGV4IGxvdy1sZXZlbAotaW50ZXJmYWNlLjwvcGFyYT4KLQotPHBhcmE+WW9zaGlva2EgVHN1bmVvCi0oPGNvbXB1dGVyb3V0cHV0PnRzdW5lb0Byci5paWo0dS5vci5qcDwvY29tcHV0ZXJvdXRwdXQ+KSBoYXMKLWNvbnRyaWJ1dGVkIHNvbWUgZnVuY3Rpb25zIHRvIGdpdmUgYmV0dGVyCi08Y29tcHV0ZXJvdXRwdXQ+emxpYjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXBhdGliaWxpdHkuICBUaGVzZQotZnVuY3Rpb25zIGFyZSA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6b3BlbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ienJlYWQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnp3cml0ZTwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemZsdXNoPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Y2xvc2U8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemxpYlZlcnNpb248L2NvbXB1dGVyb3V0cHV0Pi4gIFlvdSBtYXkgZmluZAotdGhlc2UgZnVuY3Rpb25zIG1vcmUgY29udmVuaWVudCBmb3Igc2ltcGxlIGZpbGUgcmVhZGluZyBhbmQKLXdyaXRpbmcsIHRoYW4gdGhvc2UgaW4gdGhlIGhpZ2gtbGV2ZWwgaW50ZXJmYWNlLiAgVGhlc2UgZnVuY3Rpb25zCi1hcmUgbm90ICh5ZXQpIG9mZmljaWFsbHkgcGFydCBvZiB0aGUgbGlicmFyeSwgYW5kIGFyZSBtaW5pbWFsbHkKLWRvY3VtZW50ZWQgaGVyZS4gIElmIHRoZXkgYnJlYWssIHlvdSBnZXQgdG8ga2VlcCBhbGwgdGhlIHBpZWNlcy4KLUkgaG9wZSB0byBkb2N1bWVudCB0aGVtIHByb3Blcmx5IHdoZW4gdGltZSBwZXJtaXRzLjwvcGFyYT4KLQotPHBhcmE+WW9zaGlva2EgYWxzbyBjb250cmlidXRlZCBtb2RpZmljYXRpb25zIHRvIGFsbG93IHRoZQotbGlicmFyeSB0byBiZSBidWlsdCBhcyBhIFdpbmRvd3MgRExMLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9ImVyci1oYW5kbGluZyIgeHJlZmxhYmVsPSJFcnJvciBoYW5kbGluZyI+Ci08dGl0bGU+RXJyb3IgaGFuZGxpbmc8L3RpdGxlPgotCi08cGFyYT5UaGUgbGlicmFyeSBpcyBkZXNpZ25lZCB0byByZWNvdmVyIGNsZWFubHkgaW4gYWxsCi1zaXR1YXRpb25zLCBpbmNsdWRpbmcgdGhlIHdvcnN0LWNhc2Ugc2l0dWF0aW9uIG9mIGRlY29tcHJlc3NpbmcKLXJhbmRvbSBkYXRhLiAgSSdtIG5vdCAxMDAlIHN1cmUgdGhhdCBpdCBjYW4gYWx3YXlzIGRvIHRoaXMsIHNvCi15b3UgbWlnaHQgd2FudCB0byBhZGQgYSBzaWduYWwgaGFuZGxlciB0byBjYXRjaCBzZWdtZW50YXRpb24KLXZpb2xhdGlvbnMgZHVyaW5nIGRlY29tcHJlc3Npb24gaWYgeW91IGFyZSBmZWVsaW5nIGVzcGVjaWFsbHkKLXBhcmFub2lkLiAgSSB3b3VsZCBiZSBpbnRlcmVzdGVkIGluIGhlYXJpbmcgbW9yZSBhYm91dCB0aGUKLXJvYnVzdG5lc3Mgb2YgdGhlIGxpYnJhcnkgdG8gY29ycnVwdGVkIGNvbXByZXNzZWQgZGF0YS48L3BhcmE+Ci0KLTxwYXJhPlZlcnNpb24gMS4wLjMgbW9yZSByb2J1c3QgaW4gdGhpcyByZXNwZWN0IHRoYW4gYW55Ci1wcmV2aW91cyB2ZXJzaW9uLiAgSW52ZXN0aWdhdGlvbnMgd2l0aCBWYWxncmluZCAoYSB0b29sIGZvciBkZXRlY3RpbmcKLXByb2JsZW1zIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQpIGluZGljYXRlCi10aGF0LCBhdCBsZWFzdCBmb3IgdGhlIGZldyBmaWxlcyBJIHRlc3RlZCwgYWxsIHNpbmdsZS1iaXQgZXJyb3JzCi1pbiB0aGUgZGVjb21wcmVzc2VkIGRhdGEgYXJlIGNhdWdodCBwcm9wZXJseSwgd2l0aCBubwotc2VnbWVudGF0aW9uIGZhdWx0cywgbm8gdXNlcyBvZiB1bmluaXRpYWxpc2VkIGRhdGEsIG5vIG91dCBvZgotcmFuZ2UgcmVhZHMgb3Igd3JpdGVzLCBhbmQgbm8gaW5maW5pdGUgbG9vcGluZyBpbiB0aGUgZGVjb21wcmVzc29yLgotU28gaXQncyBjZXJ0YWlubHkgcHJldHR5IHJvYnVzdCwgYWx0aG91Z2gKLUkgd291bGRuJ3QgY2xhaW0gaXQgdG8gYmUgdG90YWxseSBib21icHJvb2YuPC9wYXJhPgotCi08cGFyYT5UaGUgZmlsZSA8Y29tcHV0ZXJvdXRwdXQ+YnpsaWIuaDwvY29tcHV0ZXJvdXRwdXQ+IGNvbnRhaW5zCi1hbGwgZGVmaW5pdGlvbnMgbmVlZGVkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEluIHBhcnRpY3VsYXIsIHlvdQotc2hvdWxkIGRlZmluaXRlbHkgbm90IGluY2x1ZGUKLTxjb21wdXRlcm91dHB1dD5iemxpYl9wcml2YXRlLmg8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPkluIDxjb21wdXRlcm91dHB1dD5iemxpYi5oPC9jb21wdXRlcm91dHB1dD4sIHRoZSB2YXJpb3VzCi1yZXR1cm4gdmFsdWVzIGFyZSBkZWZpbmVkLiAgVGhlIGZvbGxvd2luZyBsaXN0IGlzIG5vdCBpbnRlbmRlZCBhcwotYW4gZXhoYXVzdGl2ZSBkZXNjcmlwdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCBhIGdpdmVuCi12YWx1ZSBtYXkgYmUgcmV0dXJuZWQgLS0gdGhvc2UgZGVzY3JpcHRpb25zIGFyZSBnaXZlbiBsYXRlci4KLVJhdGhlciwgaXQgaXMgaW50ZW5kZWQgdG8gY29udmV5IHRoZSByb3VnaCBtZWFuaW5nIG9mIGVhY2ggcmV0dXJuCi12YWx1ZS4gIFRoZSBmaXJzdCBmaXZlIGFjdGlvbnMgYXJlIG5vcm1hbCBhbmQgbm90IGludGVuZGVkIHRvCi1kZW5vdGUgYW4gZXJyb3Igc2l0dWF0aW9uLjwvcGFyYT4KLQotPHZhcmlhYmxlbGlzdD4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9PSzwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlcXVlc3RlZCBhY3Rpb24gd2FzIGNvbXBsZXRlZAotICAgc3VjY2Vzc2Z1bGx5LjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1JVTl9PSywgQlpfRkxVU0hfT0ssCi0gICAgQlpfRklOSVNIX09LPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5JbiAKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LCB0aGUgcmVxdWVzdGVkCi0gICBmbHVzaC9maW5pc2gvbm90aGluZy1zcGVjaWFsIGFjdGlvbiB3YXMgY29tcGxldGVkCi0gICBzdWNjZXNzZnVsbHkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+Q29tcHJlc3Npb24gb2YgZGF0YSB3YXMgY29tcGxldGVkLCBvciB0aGUKLSAgIGxvZ2ljYWwgc3RyZWFtIGVuZCB3YXMgZGV0ZWN0ZWQgZHVyaW5nCi0gICBkZWNvbXByZXNzaW9uLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi08L3ZhcmlhYmxlbGlzdD4KLQotPHBhcmE+VGhlIGZvbGxvd2luZyByZXR1cm4gdmFsdWVzIGluZGljYXRlIGFuIGVycm9yIG9mIHNvbWUKLWtpbmQuPC9wYXJhPgotCi08dmFyaWFibGVsaXN0PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX0NPTkZJR19FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+SW5kaWNhdGVzIHRoYXQgdGhlIGxpYnJhcnkgaGFzIGJlZW4gaW1wcm9wZXJseQotICAgY29tcGlsZWQgb24geW91ciBwbGF0Zm9ybSAtLSBhIG1ham9yIGNvbmZpZ3VyYXRpb24gZXJyb3IuCi0gICBTcGVjaWZpY2FsbHksIGl0IG1lYW5zIHRoYXQKLSAgIDxjb21wdXRlcm91dHB1dD5zaXplb2YoY2hhcik8L2NvbXB1dGVyb3V0cHV0PiwKLSAgIDxjb21wdXRlcm91dHB1dD5zaXplb2Yoc2hvcnQpPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gICA8Y29tcHV0ZXJvdXRwdXQ+c2l6ZW9mKGludCk8L2NvbXB1dGVyb3V0cHV0PiBhcmUgbm90IDEsIDIgYW5kCi0gICA0IHJlc3BlY3RpdmVseSwgYXMgdGhleSBzaG91bGQgYmUuICBOb3RlIHRoYXQgdGhlIGxpYnJhcnkKLSAgIHNob3VsZCBzdGlsbCB3b3JrIHByb3Blcmx5IG9uIDY0LWJpdCBwbGF0Zm9ybXMgd2hpY2ggZm9sbG93Ci0gICB0aGUgTFA2NCBwcm9ncmFtbWluZyBtb2RlbCAtLSB0aGF0IGlzLCB3aGVyZQotICAgPGNvbXB1dGVyb3V0cHV0PnNpemVvZihsb25nKTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICAgPGNvbXB1dGVyb3V0cHV0PnNpemVvZih2b2lkKik8L2NvbXB1dGVyb3V0cHV0PiBhcmUgOC4gIFVuZGVyCi0gICBMUDY0LCA8Y29tcHV0ZXJvdXRwdXQ+c2l6ZW9mKGludCk8L2NvbXB1dGVyb3V0cHV0PiBpcyBzdGlsbCA0LAotICAgc28gPGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4sIHdoaWNoIGRvZXNuJ3QKLSAgIHVzZSB0aGUgPGNvbXB1dGVyb3V0cHV0Pmxvbmc8L2NvbXB1dGVyb3V0cHV0PiB0eXBlLCBpcwotICAgT0suPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRVJST1I8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPldoZW4gdXNpbmcgdGhlIGxpYnJhcnksIGl0IGlzIGltcG9ydGFudCB0byBjYWxsCi0gICB0aGUgZnVuY3Rpb25zIGluIHRoZSBjb3JyZWN0IHNlcXVlbmNlIGFuZCB3aXRoIGRhdGEgc3RydWN0dXJlcwotICAgKGJ1ZmZlcnMgZXRjKSBpbiB0aGUgY29ycmVjdCBzdGF0ZXMuCi0gICA8Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjaGVja3MgYXMgbXVjaCBhcyBpdAotICAgY2FuIHRvIGVuc3VyZSB0aGlzIGlzIGhhcHBlbmluZywgYW5kIHJldHVybnMKLSAgIDxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+IGlmIG5vdC4KLSAgIENvZGUgd2hpY2ggY29tcGxpZXMgcHJlY2lzZWx5IHdpdGggdGhlIGZ1bmN0aW9uIHNlbWFudGljcywgYXMKLSAgIGRldGFpbGVkIGJlbG93LCBzaG91bGQgbmV2ZXIgcmVjZWl2ZSB0aGlzIHZhbHVlOyBzdWNoIGFuIGV2ZW50Ci0gICBkZW5vdGVzIGJ1Z2d5IGNvZGUgd2hpY2ggeW91IHNob3VsZAotICAgaW52ZXN0aWdhdGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfUEFSQU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlJldHVybmVkIHdoZW4gYSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbiBjYWxsIGlzCi0gICBvdXQgb2YgcmFuZ2Ugb3Igb3RoZXJ3aXNlIG1hbmlmZXN0bHkgaW5jb3JyZWN0LiAgQXMgd2l0aAotICAgPGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VSUk9SPC9jb21wdXRlcm91dHB1dD4sIHRoaXMKLSAgIGRlbm90ZXMgYSBidWcgaW4gdGhlIGNsaWVudCBjb2RlLiAgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4KLSAgIDxjb21wdXRlcm91dHB1dD5CWl9QQVJBTV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICAgPGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VSUk9SPC9jb21wdXRlcm91dHB1dD4gaXMgYSBiaXQKLSAgIGhhenksIGJ1dCBzdGlsbCB3b3J0aCBtYWtpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfTUVNX0VSUk9SPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5SZXR1cm5lZCB3aGVuIGEgcmVxdWVzdCB0byBhbGxvY2F0ZSBtZW1vcnkKLSAgIGZhaWxlZC4gIE5vdGUgdGhhdCB0aGUgcXVhbnRpdHkgb2YgbWVtb3J5IG5lZWRlZCB0byBkZWNvbXByZXNzCi0gICBhIHN0cmVhbSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bnRpbCB0aGUgc3RyZWFtJ3MgaGVhZGVyIGhhcwotICAgYmVlbiByZWFkLiAgU28KLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IG1heSByZXR1cm4KLSAgIDxjb21wdXRlcm91dHB1dD5CWl9NRU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBldmVuIHRob3VnaCBzb21lCi0gICBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGhhcyBiZWVuIHJlYWQuICBUaGUgc2FtZSBpcyBub3QgdHJ1ZQotICAgZm9yIGNvbXByZXNzaW9uOyBvbmNlCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4gb3IKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZU9wZW48L2NvbXB1dGVyb3V0cHV0PiBoYXZlCi0gICBzdWNjZXNzZnVsbHkgY29tcGxldGVkLAotICAgPGNvbXB1dGVyb3V0cHV0PkJaX01FTV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+IGNhbm5vdAotICAgb2NjdXIuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfREFUQV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+UmV0dXJuZWQgd2hlbiBhIGRhdGEgaW50ZWdyaXR5IGVycm9yIGlzCi0gICBkZXRlY3RlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi4gIE1vc3QgaW1wb3J0YW50bHksIHRoaXMgbWVhbnMKLSAgIHdoZW4gc3RvcmVkIGFuZCBjb21wdXRlZCBDUkNzIGZvciB0aGUgZGF0YSBkbyBub3QgbWF0Y2guICBUaGlzCi0gICB2YWx1ZSBpcyBhbHNvIHJldHVybmVkIHVwb24gZGV0ZWN0aW9uIG9mIGFueSBvdGhlciBhbm9tYWx5IGluCi0gICB0aGUgY29tcHJlc3NlZCBkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX0RBVEFfRVJST1JfTUFHSUM8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPkFzIGEgc3BlY2lhbCBjYXNlIG9mCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QlpfREFUQV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LCBpdCBpcwotICAgc29tZXRpbWVzIHVzZWZ1bCB0byBrbm93IHdoZW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtIGRvZXMgbm90Ci0gICBzdGFydCB3aXRoIHRoZSBjb3JyZWN0IG1hZ2ljIGJ5dGVzICg8Y29tcHV0ZXJvdXRwdXQ+J0InICdaJwotICAgJ2gnPC9jb21wdXRlcm91dHB1dD4pLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX0lPX0VSUk9SPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5SZXR1cm5lZCBieQotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZTwvY29tcHV0ZXJvdXRwdXQ+IHdoZW4gdGhlcmUgaXMgYW4KLSAgIGVycm9yIHJlYWRpbmcgb3Igd3JpdGluZyBpbiB0aGUgY29tcHJlc3NlZCBmaWxlLCBhbmQgYnkKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkT3BlbjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlT3BlbjwvY29tcHV0ZXJvdXRwdXQ+IGZvciBhdHRlbXB0cwotICAgdG8gdXNlIGEgZmlsZSBmb3Igd2hpY2ggdGhlIGVycm9yIGluZGljYXRvciAodml6LAotICAgPGNvbXB1dGVyb3V0cHV0PmZlcnJvcihmKTwvY29tcHV0ZXJvdXRwdXQ+KSBpcyBzZXQuICBPbgotICAgcmVjZWlwdCBvZiA8Y29tcHV0ZXJvdXRwdXQ+QlpfSU9fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiwgdGhlCi0gICBjYWxsZXIgc2hvdWxkIGNvbnN1bHQgPGNvbXB1dGVyb3V0cHV0PmVycm5vPC9jb21wdXRlcm91dHB1dD4KLSAgIGFuZC9vciA8Y29tcHV0ZXJvdXRwdXQ+cGVycm9yPC9jb21wdXRlcm91dHB1dD4gdG8gYWNxdWlyZQotICAgb3BlcmF0aW5nLXN5c3RlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAgIHByb2JsZW0uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfVU5FWFBFQ1RFRF9FT0Y8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlJldHVybmVkIGJ5Ci0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdoZW4gdGhlCi0gICBjb21wcmVzc2VkIGZpbGUgZmluaXNoZXMgYmVmb3JlIHRoZSBsb2dpY2FsIGVuZCBvZiBzdHJlYW0gaXMKLSAgIGRldGVjdGVkLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX09VVEJVRkZfRlVMTDwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+UmV0dXJuZWQgYnkKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHRvCi0gICBpbmRpY2F0ZSB0aGF0IHRoZSBvdXRwdXQgZGF0YSB3aWxsIG5vdCBmaXQgaW50byB0aGUgb3V0cHV0Ci0gICBidWZmZXIgcHJvdmlkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLTwvdmFyaWFibGVsaXN0PgotCi08L3NlY3QxPgotCi0KLQotPHNlY3QxIGlkPSJsb3ctbGV2ZWwiIHhyZWZsYWJlbD0iPkxvdy1sZXZlbCBpbnRlcmZhY2UiPgotPHRpdGxlPkxvdy1sZXZlbCBpbnRlcmZhY2U8L3RpdGxlPgotCi0KLTxzZWN0MiBpZD0iYnpjb21wcmVzcy1pbml0IiB4cmVmbGFiZWw9IkJaMl9iekNvbXByZXNzSW5pdCI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdHlwZWRlZiBzdHJ1Y3QgewotICBjaGFyICpuZXh0X2luOwotICB1bnNpZ25lZCBpbnQgYXZhaWxfaW47Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9pbl9sbzMyOwotICB1bnNpZ25lZCBpbnQgdG90YWxfaW5faGkzMjsKLQotICBjaGFyICpuZXh0X291dDsKLSAgdW5zaWduZWQgaW50IGF2YWlsX291dDsKLSAgdW5zaWduZWQgaW50IHRvdGFsX291dF9sbzMyOwotICB1bnNpZ25lZCBpbnQgdG90YWxfb3V0X2hpMzI7Ci0KLSAgdm9pZCAqc3RhdGU7Ci0KLSAgdm9pZCAqKCpiemFsbG9jKSh2b2lkICosaW50LGludCk7Ci0gIHZvaWQgKCpiemZyZWUpKHZvaWQgKix2b2lkICopOwotICB2b2lkICpvcGFxdWU7Ci19IGJ6X3N0cmVhbTsKLQotaW50IEJaMl9iekNvbXByZXNzSW5pdCAoIGJ6X3N0cmVhbSAqc3RybSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZTEwMGssIAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJib3NpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdvcmtGYWN0b3IgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlByZXBhcmVzIGZvciBjb21wcmVzc2lvbi4gIFRoZQotPGNvbXB1dGVyb3V0cHV0PmJ6X3N0cmVhbTwvY29tcHV0ZXJvdXRwdXQ+IHN0cnVjdHVyZSBob2xkcyBhbGwKLWRhdGEgcGVydGFpbmluZyB0byB0aGUgY29tcHJlc3Npb24gYWN0aXZpdHkuICBBCi08Y29tcHV0ZXJvdXRwdXQ+Ynpfc3RyZWFtPC9jb21wdXRlcm91dHB1dD4gc3RydWN0dXJlIHNob3VsZCBiZQotYWxsb2NhdGVkIGFuZCBpbml0aWFsaXNlZCBwcmlvciB0byB0aGUgY2FsbC4gIFRoZSBmaWVsZHMgb2YKLTxjb21wdXRlcm91dHB1dD5iel9zdHJlYW08L2NvbXB1dGVyb3V0cHV0PiBjb21wcmlzZSB0aGUgZW50aXJldHkKLW9mIHRoZSB1c2VyLXZpc2libGUgZGF0YS4gIDxjb21wdXRlcm91dHB1dD5zdGF0ZTwvY29tcHV0ZXJvdXRwdXQ+Ci1pcyBhIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIHJlcXVpcmVkIGZvcgotY29tcHJlc3Npb24uPC9wYXJhPgotCi08cGFyYT5DdXN0b20gbWVtb3J5IGFsbG9jYXRvcnMgYXJlIHN1cHBvcnRlZCwgdmlhIGZpZWxkcwotPGNvbXB1dGVyb3V0cHV0PmJ6YWxsb2M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5iemZyZWU8L2NvbXB1dGVyb3V0cHV0PiwgYW5kCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4uICBUaGUgdmFsdWUKLTxjb21wdXRlcm91dHB1dD5vcGFxdWU8L2NvbXB1dGVyb3V0cHV0PiBpcyBwYXNzZWQgdG8gYXMgdGhlIGZpcnN0Ci1hcmd1bWVudCB0byBhbGwgY2FsbHMgdG8gPGNvbXB1dGVyb3V0cHV0PmJ6YWxsb2M8L2NvbXB1dGVyb3V0cHV0PgotYW5kIDxjb21wdXRlcm91dHB1dD5iemZyZWU8L2NvbXB1dGVyb3V0cHV0PiwgYnV0IGlzIG90aGVyd2lzZQotaWdub3JlZCBieSB0aGUgbGlicmFyeS4gIFRoZSBjYWxsIDxjb21wdXRlcm91dHB1dD5iemFsbG9jICgKLW9wYXF1ZSwgbiwgbSApPC9jb21wdXRlcm91dHB1dD4gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcG9pbnRlcgotPGNvbXB1dGVyb3V0cHV0PnA8L2NvbXB1dGVyb3V0cHV0PiB0byA8Y29tcHV0ZXJvdXRwdXQ+biAqCi1tPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMgb2YgbWVtb3J5LCBhbmQgPGNvbXB1dGVyb3V0cHV0PmJ6ZnJlZSAoCi1vcGFxdWUsIHAgKTwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBmcmVlIHRoYXQgbWVtb3J5LjwvcGFyYT4KLQotPHBhcmE+SWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIGEgY3VzdG9tIG1lbW9yeSBhbGxvY2F0b3IsIHNldAotPGNvbXB1dGVyb3V0cHV0PmJ6YWxsb2M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5iemZyZWU8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5vcGFxdWU8L2NvbXB1dGVyb3V0cHV0PiB0bwotPGNvbXB1dGVyb3V0cHV0Pk5VTEw8L2NvbXB1dGVyb3V0cHV0PiwgYW5kIHRoZSBsaWJyYXJ5IHdpbGwgdGhlbgotdXNlIHRoZSBzdGFuZGFyZCA8Y29tcHV0ZXJvdXRwdXQ+bWFsbG9jPC9jb21wdXRlcm91dHB1dD4gLwotPGNvbXB1dGVyb3V0cHV0PmZyZWU8L2NvbXB1dGVyb3V0cHV0PiByb3V0aW5lcy48L3BhcmE+Ci0KLTxwYXJhPkJlZm9yZSBjYWxsaW5nCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4sIGZpZWxkcwotPGNvbXB1dGVyb3V0cHV0PmJ6YWxsb2M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5iemZyZWU8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5vcGFxdWU8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgZmlsbGVkCi1hcHByb3ByaWF0ZWx5LCBhcyBqdXN0IGRlc2NyaWJlZC4gIFVwb24gcmV0dXJuLCB0aGUgaW50ZXJuYWwKLXN0YXRlIHdpbGwgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGlzZWQsIGFuZAotPGNvbXB1dGVyb3V0cHV0PnRvdGFsX2luX2xvMzI8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD50b3RhbF9pbl9oaTMyPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfb3V0X2xvMzI8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9vdXRfaGkzMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgaGF2ZSBiZWVuCi1zZXQgdG8gemVyby4gIFRoZXNlIGZvdXIgZmllbGRzIGFyZSB1c2VkIGJ5IHRoZSBsaWJyYXJ5IHRvIGluZm9ybQotdGhlIGNhbGxlciBvZiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgcGFzc2VkIGludG8gYW5kIG91dCBvZiB0aGUKLWxpYnJhcnksIHJlc3BlY3RpdmVseS4gIFlvdSBzaG91bGQgbm90IHRyeSB0byBjaGFuZ2UgdGhlbS4gIEFzIG9mCi12ZXJzaW9uIDEuMCwgNjQtYml0IGNvdW50cyBhcmUgbWFpbnRhaW5lZCwgZXZlbiBvbiAzMi1iaXQKLXBsYXRmb3JtcywgdXNpbmcgdGhlIDxjb21wdXRlcm91dHB1dD5faGkzMjwvY29tcHV0ZXJvdXRwdXQ+Ci1maWVsZHMgdG8gc3RvcmUgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlIGNvdW50LiAgU28sIGZvciBleGFtcGxlLAotdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIGluIGlzIDxjb21wdXRlcm91dHB1dD4odG90YWxfaW5faGkzMgotJiM2MDsmIzYwOyAzMikgKyB0b3RhbF9pbl9sbzMyPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5QYXJhbWV0ZXIgPGNvbXB1dGVyb3V0cHV0PmJsb2NrU2l6ZTEwMGs8L2NvbXB1dGVyb3V0cHV0Pgotc3BlY2lmaWVzIHRoZSBibG9jayBzaXplIHRvIGJlIHVzZWQgZm9yIGNvbXByZXNzaW9uLiAgSXQgc2hvdWxkCi1iZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgOSBpbmNsdXNpdmUsIGFuZCB0aGUgYWN0dWFsIGJsb2NrIHNpemUKLXVzZWQgaXMgMTAwMDAwIHggdGhpcyBmaWd1cmUuICA5IGdpdmVzIHRoZSBiZXN0IGNvbXByZXNzaW9uIGJ1dAotdGFrZXMgbW9zdCBtZW1vcnkuPC9wYXJhPgotCi08cGFyYT5QYXJhbWV0ZXIgPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZAotYmUgc2V0IHRvIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNCBpbmNsdXNpdmUuICAwIGlzIHNpbGVudCwgYW5kCi1ncmVhdGVyIG51bWJlcnMgZ2l2ZSBpbmNyZWFzaW5nbHkgdmVyYm9zZSBtb25pdG9yaW5nL2RlYnVnZ2luZwotb3V0cHV0LiAgSWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gY29tcGlsZWQgd2l0aAotPGNvbXB1dGVyb3V0cHV0Pi1EQlpfTk9fU1RESU88L2NvbXB1dGVyb3V0cHV0Piwgbm8gc3VjaCBvdXRwdXQKLXdpbGwgYXBwZWFyIGZvciBhbnkgdmVyYm9zaXR5IHNldHRpbmcuPC9wYXJhPgotCi08cGFyYT5QYXJhbWV0ZXIgPGNvbXB1dGVyb3V0cHV0PndvcmtGYWN0b3I8L2NvbXB1dGVyb3V0cHV0PgotY29udHJvbHMgaG93IHRoZSBjb21wcmVzc2lvbiBwaGFzZSBiZWhhdmVzIHdoZW4gcHJlc2VudGVkIHdpdGgKLXdvcnN0IGNhc2UsIGhpZ2hseSByZXBldGl0aXZlLCBpbnB1dCBkYXRhLiAgSWYgY29tcHJlc3Npb24gcnVucwotaW50byBkaWZmaWN1bHRpZXMgY2F1c2VkIGJ5IHJlcGV0aXRpdmUgZGF0YSwgdGhlIGxpYnJhcnkgc3dpdGNoZXMKLWZyb20gdGhlIHN0YW5kYXJkIHNvcnRpbmcgYWxnb3JpdGhtIHRvIGEgZmFsbGJhY2sgYWxnb3JpdGhtLiAgVGhlCi1mYWxsYmFjayBpcyBzbG93ZXIgdGhhbiB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtIGJ5IHBlcmhhcHMgYQotZmFjdG9yIG9mIHRocmVlLCBidXQgYWx3YXlzIGJlaGF2ZXMgcmVhc29uYWJseSwgbm8gbWF0dGVyIGhvdyBiYWQKLXRoZSBpbnB1dC48L3BhcmE+Ci0KLTxwYXJhPkxvd2VyIHZhbHVlcyBvZiA8Y29tcHV0ZXJvdXRwdXQ+d29ya0ZhY3RvcjwvY29tcHV0ZXJvdXRwdXQ+Ci1yZWR1Y2UgdGhlIGFtb3VudCBvZiBlZmZvcnQgdGhlIHN0YW5kYXJkIGFsZ29yaXRobSB3aWxsIGV4cGVuZAotYmVmb3JlIHJlc29ydGluZyB0byB0aGUgZmFsbGJhY2suICBZb3Ugc2hvdWxkIHNldCB0aGlzIHBhcmFtZXRlcgotY2FyZWZ1bGx5OyB0b28gbG93LCBhbmQgbWFueSBpbnB1dHMgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZQotZmFsbGJhY2sgYWxnb3JpdGhtIGFuZCBzbyBjb21wcmVzcyByYXRoZXIgc2xvd2x5LCB0b28gaGlnaCwgYW5kCi15b3VyIGF2ZXJhZ2UtdG8td29yc3QgY2FzZSBjb21wcmVzc2lvbiB0aW1lcyBjYW4gYmVjb21lIHZlcnkKLWxhcmdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgMzAgZ2l2ZXMgcmVhc29uYWJsZSBiZWhhdmlvdXIgb3ZlciBhCi13aWRlIHJhbmdlIG9mIGNpcmN1bXN0YW5jZXMuPC9wYXJhPgotCi08cGFyYT5BbGxvd2FibGUgdmFsdWVzIHJhbmdlIGZyb20gMCB0byAyNTAgaW5jbHVzaXZlLiAgMCBpcyBhCi1zcGVjaWFsIGNhc2UsIGVxdWl2YWxlbnQgdG8gdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWUgb2YgMzAuPC9wYXJhPgotCi08cGFyYT5Ob3RlIHRoYXQgdGhlIGNvbXByZXNzZWQgb3V0cHV0IGdlbmVyYXRlZCBpcyB0aGUgc2FtZQotcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgZmFsbGJhY2sgYWxnb3JpdGhtIGlzCi11c2VkLjwvcGFyYT4KLQotPHBhcmE+QmUgYXdhcmUgYWxzbyB0aGF0IHRoaXMgcGFyYW1ldGVyIG1heSBkaXNhcHBlYXIgZW50aXJlbHkgaW4KLWZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS4gIEluIHByaW5jaXBsZSBpdCBzaG91bGQgYmUKLXBvc3NpYmxlIHRvIGRldmlzZSBhIGdvb2Qgd2F5IHRvIGF1dG9tYXRpY2FsbHkgY2hvb3NlIHdoaWNoCi1hbGdvcml0aG0gdG8gdXNlLiAgU3VjaCBhIG1lY2hhbmlzbSB3b3VsZCByZW5kZXIgdGhlIHBhcmFtZXRlcgotb2Jzb2xldGUuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMIAotICBvciBibG9ja1NpemUgPCAxIG9yIGJsb2NrU2l6ZSA+IDkKLSAgb3IgdmVyYm9zaXR5IDwgMCBvciB2ZXJib3NpdHkgPiA0Ci0gIG9yIHdvcmtGYWN0b3IgPCAwIG9yIHdvcmtGYWN0b3IgPiAyNTAKLUJaX01FTV9FUlJPUiAKLSAgaWYgbm90IGVub3VnaCBtZW1vcnkgaXMgYXZhaWxhYmxlCi1CWl9PSyAKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQloyX2J6Q29tcHJlc3MKLSAgaWYgQlpfT0sgaXMgcmV0dXJuZWQKLSAgbm8gc3BlY2lmaWMgYWN0aW9uIG5lZWRlZCBpbiBjYXNlIG9mIGVycm9yCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpDb21wcmVzcyIgeHJlZmxhYmVsPSJCWjJfYnpDb21wcmVzcyI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbnQgQloyX2J6Q29tcHJlc3MgKCBiel9zdHJlYW0gKnN0cm0sIGludCBhY3Rpb24gKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlByb3ZpZGVzIG1vcmUgaW5wdXQgYW5kL29yIG91dHB1dCBidWZmZXIgc3BhY2UgZm9yIHRoZQotbGlicmFyeS4gIFRoZSBjYWxsZXIgbWFpbnRhaW5zIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycywgYW5kCi1jYWxscyA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0byB0cmFuc2ZlcgotZGF0YSBiZXR3ZWVuIHRoZW0uPC9wYXJhPgotCi08cGFyYT5CZWZvcmUgZWFjaCBjYWxsIHRvCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5uZXh0X2luPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIHBvaW50IGF0IHRoZSBkYXRhCi10byBiZSBjb21wcmVzc2VkLCBhbmQgPGNvbXB1dGVyb3V0cHV0PmF2YWlsX2luPC9jb21wdXRlcm91dHB1dD4KLXNob3VsZCBpbmRpY2F0ZSBob3cgbWFueSBieXRlcyB0aGUgbGlicmFyeSBtYXkgcmVhZC4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHVwZGF0ZXMKLTxjb21wdXRlcm91dHB1dD5uZXh0X2luPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9pbjwvY29tcHV0ZXJvdXRwdXQ+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgaXQgaGFzIHJlYWQuPC9wYXJhPgotCi08cGFyYT5TaW1pbGFybHksIDxjb21wdXRlcm91dHB1dD5uZXh0X291dDwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZAotcG9pbnQgdG8gYSBidWZmZXIgaW4gd2hpY2ggdGhlIGNvbXByZXNzZWQgZGF0YSBpcyB0byBiZSBwbGFjZWQsCi13aXRoIDxjb21wdXRlcm91dHB1dD5hdmFpbF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiBpbmRpY2F0aW5nIGhvdwotbXVjaCBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlLgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gdXBkYXRlcwotPGNvbXB1dGVyb3V0cHV0Pm5leHRfb3V0PC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfb3V0PC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfb3V0PC9jb21wdXRlcm91dHB1dD4gdG8gcmVmbGVjdCB0aGUgbnVtYmVyCi1vZiBieXRlcyBvdXRwdXQuPC9wYXJhPgotCi08cGFyYT5Zb3UgbWF5IHByb3ZpZGUgYW5kIHJlbW92ZSBhcyBsaXR0bGUgb3IgYXMgbXVjaCBkYXRhIGFzIHlvdQotbGlrZSBvbiBlYWNoIGNhbGwgb2YKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LiAgSW4gdGhlIGxpbWl0LAotaXQgaXMgYWNjZXB0YWJsZSB0byBzdXBwbHkgYW5kIHJlbW92ZSBkYXRhIG9uZSBieXRlIGF0IGEgdGltZSwKLWFsdGhvdWdoIHRoaXMgd291bGQgYmUgdGVycmlibHkgaW5lZmZpY2llbnQuICBZb3Ugc2hvdWxkIGFsd2F5cwotZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGJ5dGUgb2Ygb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZSBhdAotZWFjaCBjYWxsLjwvcGFyYT4KLQotPHBhcmE+QSBzZWNvbmQgcHVycG9zZSBvZgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gaXMgdG8gcmVxdWVzdCBhCi1jaGFuZ2Ugb2YgbW9kZSBvZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0uPC9wYXJhPgotCi08cGFyYT5Db25jZXB0dWFsbHksIGEgY29tcHJlc3NlZCBzdHJlYW0gY2FuIGJlIGluIG9uZSBvZiBmb3VyCi1zdGF0ZXM6IElETEUsIFJVTk5JTkcsIEZMVVNISU5HIGFuZCBGSU5JU0hJTkcuICBCZWZvcmUKLWluaXRpYWxpc2F0aW9uCi0oPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+KSBhbmQgYWZ0ZXIKLXRlcm1pbmF0aW9uICg8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiksCi1hIHN0cmVhbSBpcyByZWdhcmRlZCBhcyBJRExFLjwvcGFyYT4KLQotPHBhcmE+VXBvbiBpbml0aWFsaXNhdGlvbgotKDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiksIHRoZSBzdHJlYW0KLWlzIHBsYWNlZCBpbiB0aGUgUlVOTklORyBzdGF0ZS4gIFN1YnNlcXVlbnQgY2FsbHMgdG8KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBwYXNzCi08Y29tcHV0ZXJvdXRwdXQ+QlpfUlVOPC9jb21wdXRlcm91dHB1dD4gYXMgdGhlIHJlcXVlc3RlZCBhY3Rpb247Ci1vdGhlciBhY3Rpb25zIGFyZSBpbGxlZ2FsIGFuZCB3aWxsIHJlc3VsdCBpbgotPGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VSUk9SPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5BdCBzb21lIHBvaW50LCB0aGUgY2FsbGluZyBwcm9ncmFtIHdpbGwgaGF2ZSBwcm92aWRlZCBhbGwKLXRoZSBpbnB1dCBkYXRhIGl0IHdhbnRzIHRvLiAgSXQgd2lsbCB0aGVuIHdhbnQgdG8gZmluaXNoIHVwIC0tIGluCi1lZmZlY3QsIGFza2luZyB0aGUgbGlicmFyeSB0byBwcm9jZXNzIGFueSBkYXRhIGl0IG1pZ2h0IGhhdmUKLWJ1ZmZlcmVkIGludGVybmFsbHkuICBJbiB0aGlzIHN0YXRlLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gd2lsbCBubyBsb25nZXIKLWF0dGVtcHQgdG8gcmVhZCBkYXRhIGZyb20KLTxjb21wdXRlcm91dHB1dD5uZXh0X2luPC9jb21wdXRlcm91dHB1dD4sIGJ1dCBpdCB3aWxsIHdhbnQgdG8KLXdyaXRlIGRhdGEgdG8gPGNvbXB1dGVyb3V0cHV0Pm5leHRfb3V0PC9jb21wdXRlcm91dHB1dD4uICBCZWNhdXNlCi10aGUgb3V0cHV0IGJ1ZmZlciBzdXBwbGllZCBieSB0aGUgdXNlciBjYW4gYmUgYXJiaXRyYXJpbHkgc21hbGwsCi10aGUgZmluaXNoaW5nLXVwIG9wZXJhdGlvbiBjYW5ub3QgbmVjZXNzYXJpbHkgYmUgZG9uZSB3aXRoIGEKLXNpbmdsZSBjYWxsIG9mCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPkluc3RlYWQsIHRoZSBjYWxsaW5nIHByb2dyYW0gcGFzc2VzCi08Y29tcHV0ZXJvdXRwdXQ+QlpfRklOSVNIPC9jb21wdXRlcm91dHB1dD4gYXMgYW4gYWN0aW9uIHRvCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi4gIFRoaXMgY2hhbmdlcwotdGhlIHN0cmVhbSdzIHN0YXRlIHRvIEZJTklTSElORy4gIEFueSByZW1haW5pbmcgaW5wdXQgKGllLAotPGNvbXB1dGVyb3V0cHV0Pm5leHRfaW5bMCAuLiBhdmFpbF9pbi0xXTwvY29tcHV0ZXJvdXRwdXQ+KSBpcwotY29tcHJlc3NlZCBhbmQgdHJhbnNmZXJyZWQgdG8gdGhlIG91dHB1dCBidWZmZXIuICBUbyBkbyB0aGlzLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gbXVzdCBiZSBjYWxsZWQKLXJlcGVhdGVkbHkgdW50aWwgYWxsIHRoZSBvdXRwdXQgaGFzIGJlZW4gY29uc3VtZWQuICBBdCB0aGF0Ci1wb2ludCwgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gcmV0dXJucwotPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiwgYW5kIHRoZSBzdHJlYW0ncwotc3RhdGUgaXMgc2V0IGJhY2sgdG8gSURMRS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCB0aGVuIGJlCi1jYWxsZWQuPC9wYXJhPgotCi08cGFyYT5KdXN0IHRvIG1ha2Ugc3VyZSB0aGUgY2FsbGluZyBwcm9ncmFtIGRvZXMgbm90IGNoZWF0LCB0aGUKLWxpYnJhcnkgbWFrZXMgYSBub3RlIG9mIDxjb21wdXRlcm91dHB1dD5hdmFpbF9pbjwvY29tcHV0ZXJvdXRwdXQ+Ci1hdCB0aGUgdGltZSBvZiB0aGUgZmlyc3QgY2FsbCB0bwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gd2hpY2ggaGFzCi08Y29tcHV0ZXJvdXRwdXQ+QlpfRklOSVNIPC9jb21wdXRlcm91dHB1dD4gYXMgYW4gYWN0aW9uIChpZSwgYXQKLXRoZSB0aW1lIHRoZSBwcm9ncmFtIGhhcyBhbm5vdW5jZWQgaXRzIGludGVudGlvbiB0byBub3Qgc3VwcGx5Ci1hbnkgbW9yZSBpbnB1dCkuICBCeSBjb21wYXJpbmcgdGhpcyB2YWx1ZSB3aXRoIHRoYXQgb2YKLTxjb21wdXRlcm91dHB1dD5hdmFpbF9pbjwvY29tcHV0ZXJvdXRwdXQ+IG92ZXIgc3Vic2VxdWVudCBjYWxscwotdG8gPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4sIHRoZSBsaWJyYXJ5Ci1jYW4gZGV0ZWN0IGFueSBhdHRlbXB0cyB0byBzbGlwIGluIG1vcmUgZGF0YSB0byBjb21wcmVzcy4gIEFueQotY2FsbHMgZm9yIHdoaWNoIHRoaXMgaXMgZGV0ZWN0ZWQgd2lsbCByZXR1cm4KLTxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LiAgVGhpcwotaW5kaWNhdGVzIGEgcHJvZ3JhbW1pbmcgbWlzdGFrZSB3aGljaCBzaG91bGQgYmUgY29ycmVjdGVkLjwvcGFyYT4KLQotPHBhcmE+SW5zdGVhZCBvZiBhc2tpbmcgdG8gZmluaXNoLCB0aGUgY2FsbGluZyBwcm9ncmFtIG1heSBhc2sKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRha2UgYWxsIHRoZQotcmVtYWluaW5nIGlucHV0LCBjb21wcmVzcyBpdCBhbmQgdGVybWluYXRlIHRoZSBjdXJyZW50Ci0oQnVycm93cy1XaGVlbGVyKSBjb21wcmVzc2lvbiBibG9jay4gIFRoaXMgY291bGQgYmUgdXNlZnVsIGZvcgotZXJyb3IgY29udHJvbCBwdXJwb3Nlcy4gIFRoZSBtZWNoYW5pc20gaXMgYW5hbG9nb3VzIHRvIHRoYXQgZm9yCi1maW5pc2hpbmc6IGNhbGwgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLXdpdGggYW4gYWN0aW9uIG9mIDxjb21wdXRlcm91dHB1dD5CWl9GTFVTSDwvY29tcHV0ZXJvdXRwdXQ+LAotcmVtb3ZlIG91dHB1dCBkYXRhLCBhbmQgcGVyc2lzdCB3aXRoIHRoZQotPGNvbXB1dGVyb3V0cHV0PkJaX0ZMVVNIPC9jb21wdXRlcm91dHB1dD4gYWN0aW9uIHVudGlsIHRoZSB2YWx1ZQotPGNvbXB1dGVyb3V0cHV0PkJaX1JVTjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHJldHVybmVkLiAgQXMgd2l0aAotZmluaXNoaW5nLCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PgotZGV0ZWN0cyBhbnkgYXR0ZW1wdCB0byBwcm92aWRlIG1vcmUgaW5wdXQgZGF0YSBvbmNlIHRoZSBmbHVzaCBoYXMKLWJlZ3VuLjwvcGFyYT4KLQotPHBhcmE+T25jZSB0aGUgZmx1c2ggaXMgY29tcGxldGUsIHRoZSBzdHJlYW0gcmV0dXJucyB0byB0aGUKLW5vcm1hbCBSVU5OSU5HIHN0YXRlLjwvcGFyYT4KLQotPHBhcmE+VGhpcyBhbGwgc291bmRzIHByZXR0eSBjb21wbGV4LCBidXQgaXNuJ3QgcmVhbGx5LiAgSGVyZSdzIGEKLXRhYmxlIHdoaWNoIHNob3dzIHdoaWNoIGFjdGlvbnMgYXJlIGFsbG93YWJsZSBpbiBlYWNoIHN0YXRlLCB3aGF0Ci1hY3Rpb24gd2lsbCBiZSB0YWtlbiwgd2hhdCB0aGUgbmV4dCBzdGF0ZSBpcywgYW5kIHdoYXQgdGhlCi1ub24tZXJyb3IgcmV0dXJuIHZhbHVlcyBhcmUuICBOb3RlIHRoYXQgeW91IGNhbid0IGV4cGxpY2l0bHkgYXNrCi13aGF0IHN0YXRlIHRoZSBzdHJlYW0gaXMgaW4sIGJ1dCBub3IgZG8geW91IG5lZWQgdG8gLS0gaXQgY2FuIGJlCi1pbmZlcnJlZCBmcm9tIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotSURMRS9hbnkKLSAgSWxsZWdhbC4gIElETEUgc3RhdGUgb25seSBleGlzdHMgYWZ0ZXIgQloyX2J6Q29tcHJlc3NFbmQgb3IKLSAgYmVmb3JlIEJaMl9iekNvbXByZXNzSW5pdC4KLSAgUmV0dXJuIHZhbHVlID0gQlpfU0VRVUVOQ0VfRVJST1IKLQotUlVOTklORy9CWl9SVU4KLSAgQ29tcHJlc3MgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUuCi0gIE5leHQgc3RhdGUgPSBSVU5OSU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX1JVTl9PSwotCi1SVU5OSU5HL0JaX0ZMVVNICi0gIFJlbWVtYmVyIGN1cnJlbnQgdmFsdWUgb2YgbmV4dF9pbi4gQ29tcHJlc3MgZnJvbSBuZXh0X2luCi0gIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBOZXh0IHN0YXRlID0gRkxVU0hJTkcKLSAgUmV0dXJuIHZhbHVlID0gQlpfRkxVU0hfT0sKLQotUlVOTklORy9CWl9GSU5JU0gKLSAgUmVtZW1iZXIgY3VycmVudCB2YWx1ZSBvZiBuZXh0X2luLiBDb21wcmVzcyBmcm9tIG5leHRfaW4KLSAgdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwgYnV0IGRvIG5vdCBhY2NlcHQgYW55IG1vcmUgaW5wdXQuCi0gIE5leHQgc3RhdGUgPSBGSU5JU0hJTkcKLSAgUmV0dXJuIHZhbHVlID0gQlpfRklOSVNIX09LCi0KLUZMVVNISU5HL0JaX0ZMVVNICi0gIENvbXByZXNzIGZyb20gbmV4dF9pbiB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLCAKLSAgYnV0IGRvIG5vdCBhY2NlcHQgYW55IG1vcmUgaW5wdXQuCi0gIElmIGFsbCB0aGUgZXhpc3RpbmcgaW5wdXQgaGFzIGJlZW4gdXNlZCB1cCBhbmQgYWxsIGNvbXByZXNzZWQKLSAgb3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQKLSAgICBOZXh0IHN0YXRlID0gUlVOTklORzsgUmV0dXJuIHZhbHVlID0gQlpfUlVOX09LCi0gIGVsc2UKLSAgICBOZXh0IHN0YXRlID0gRkxVU0hJTkc7IFJldHVybiB2YWx1ZSA9IEJaX0ZMVVNIX09LCi0KLUZMVVNISU5HL290aGVyICAgICAKLSAgSWxsZWdhbC4KLSAgUmV0dXJuIHZhbHVlID0gQlpfU0VRVUVOQ0VfRVJST1IKLQotRklOSVNISU5HL0JaX0ZJTklTSAotICBDb21wcmVzcyBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwKLSAgYnV0IHRvIG5vdCBhY2NlcHQgYW55IG1vcmUgaW5wdXQuICAKLSAgSWYgYWxsIHRoZSBleGlzdGluZyBpbnB1dCBoYXMgYmVlbiB1c2VkIHVwIGFuZCBhbGwgY29tcHJlc3NlZAotICBvdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZAotICAgIE5leHQgc3RhdGUgPSBJRExFOyBSZXR1cm4gdmFsdWUgPSBCWl9TVFJFQU1fRU5ECi0gIGVsc2UKLSAgICBOZXh0IHN0YXRlID0gRklOSVNISU5HOyBSZXR1cm4gdmFsdWUgPSBCWl9GSU5JU0hfT0sKLQotRklOSVNISU5HL290aGVyCi0gIElsbGVnYWwuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi08L3Byb2dyYW1saXN0aW5nPgotCi0KLTxwYXJhPlRoYXQgc3RpbGwgbG9va3MgY29tcGxpY2F0ZWQ/ICBXZWxsLCBmYWlyIGVub3VnaC4gIFRoZQotdXN1YWwgc2VxdWVuY2Ugb2YgY2FsbHMgZm9yIGNvbXByZXNzaW5nIGEgbG9hZCBvZiBkYXRhIGlzOjwvcGFyYT4KLQotPG9yZGVyZWRsaXN0PgotCi0gPGxpc3RpdGVtPjxwYXJhPkdldCBzdGFydGVkIHdpdGgKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPlNob3ZlbCBkYXRhIGluIGFuZCBzaGx1cnAgb3V0IGl0cyBjb21wcmVzc2VkIGZvcm0KLSAgdXNpbmcgemVybyBvciBtb3JlIGNhbGxzIG9mCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHdpdGggYWN0aW9uID0KLSAgPGNvbXB1dGVyb3V0cHV0PkJaX1JVTjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPkZpbmlzaCB1cC4gUmVwZWF0ZWRseSBjYWxsCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHdpdGggYWN0aW9uID0KLSAgPGNvbXB1dGVyb3V0cHV0PkJaX0ZJTklTSDwvY29tcHV0ZXJvdXRwdXQ+LCBjb3B5aW5nIG91dCB0aGUKLSAgY29tcHJlc3NlZCBvdXRwdXQsIHVudGlsCi0gIDxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4gaXMKLSAgcmV0dXJuZWQuPC9wYXJhPjwvbGlzdGl0ZW0+IDxsaXN0aXRlbT48cGFyYT5DbG9zZSB1cCBhbmQgZ28gaG9tZS4gIENhbGwKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvb3JkZXJlZGxpc3Q+Ci0KLTxwYXJhPklmIHRoZSBkYXRhIHlvdSB3YW50IHRvIGNvbXByZXNzIGZpdHMgaW50byB5b3VyIGlucHV0Ci1idWZmZXIgYWxsIGF0IG9uY2UsIHlvdSBjYW4gc2tpcCB0aGUgY2FsbHMgb2YKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzcyAoIC4uLiwgQlpfUlVOICk8L2NvbXB1dGVyb3V0cHV0PgotYW5kIGp1c3QgZG8gdGhlIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzcyAoIC4uLiwgQlpfRklOSVNICi0pPC9jb21wdXRlcm91dHB1dD4gY2FsbHMuPC9wYXJhPgotCi08cGFyYT5BbGwgcmVxdWlyZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCBieQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LiAgVGhlCi1jb21wcmVzc2lvbiBsaWJyYXJ5IGNhbiBhY2NlcHQgYW55IGRhdGEgYXQgYWxsIChvYnZpb3VzbHkpLiAgU28KLXlvdSBzaG91bGRuJ3QgZ2V0IGFueSBlcnJvciByZXR1cm4gdmFsdWVzIGZyb20gdGhlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBjYWxscy4gIElmIHlvdQotZG8sIHRoZXkgd2lsbCBiZQotPGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VSUk9SPC9jb21wdXRlcm91dHB1dD4sIGFuZCBpbmRpY2F0ZQotYSBidWcgaW4geW91ciBwcm9ncmFtbWluZy48L3BhcmE+Ci0KLTxwYXJhPlRyaXZpYWwgb3RoZXIgcG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCwgb3Igc3RybS0+cyBpcyBOVUxMCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpDb21wcmVzcy1lbmQiIHhyZWZsYWJlbD0iQloyX2J6Q29tcHJlc3NFbmQiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekNvbXByZXNzRW5kICggYnpfc3RyZWFtICpzdHJtICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5SZWxlYXNlcyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGNvbXByZXNzaW9uCi1zdHJlYW0uPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfUEFSQU1fRVJST1IgIGlmIHN0cm0gaXMgTlVMTCBvciBzdHJtLT5zIGlzIE5VTEwKLUJaX09LICAgICAgICAgICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJiekRlY29tcHJlc3MtaW5pdCIgeHJlZmxhYmVsPSJCWjJfYnpEZWNvbXByZXNzSW5pdCI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbnQgQloyX2J6RGVjb21wcmVzc0luaXQgKCBiel9zdHJlYW0gKnN0cm0sIGludCB2ZXJib3NpdHksIGludCBzbWFsbCApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UHJlcGFyZXMgZm9yIGRlY29tcHJlc3Npb24uICBBcyB3aXRoCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4sIGEKLTxjb21wdXRlcm91dHB1dD5iel9zdHJlYW08L2NvbXB1dGVyb3V0cHV0PiByZWNvcmQgc2hvdWxkIGJlCi1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkIGJlZm9yZSB0aGUgY2FsbC4gIEZpZWxkcwotPGNvbXB1dGVyb3V0cHV0PmJ6YWxsb2M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5iemZyZWU8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5vcGFxdWU8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgc2V0IGlmIGEgY3VzdG9tCi1tZW1vcnkgYWxsb2NhdG9yIGlzIHJlcXVpcmVkLCBvciBtYWRlCi08Y29tcHV0ZXJvdXRwdXQ+TlVMTDwvY29tcHV0ZXJvdXRwdXQ+IGZvciB0aGUgbm9ybWFsCi08Y29tcHV0ZXJvdXRwdXQ+bWFsbG9jPC9jb21wdXRlcm91dHB1dD4gLwotPGNvbXB1dGVyb3V0cHV0PmZyZWU8L2NvbXB1dGVyb3V0cHV0PiByb3V0aW5lcy4gIFVwb24gcmV0dXJuLCB0aGUKLWludGVybmFsIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIGluaXRpYWxpc2VkLCBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9pbjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PnRvdGFsX291dDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYmUgemVyby48L3BhcmE+Ci0KLTxwYXJhPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXIKLTxjb21wdXRlcm91dHB1dD52ZXJib3NpdHk8L2NvbXB1dGVyb3V0cHV0Piwgc2VlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JZiA8Y29tcHV0ZXJvdXRwdXQ+c21hbGw8L2NvbXB1dGVyb3V0cHV0PiBpcyBub256ZXJvLCB0aGUKLWxpYnJhcnkgd2lsbCB1c2UgYW4gYWx0ZXJuYXRpdmUgZGVjb21wcmVzc2lvbiBhbGdvcml0aG0gd2hpY2gKLXVzZXMgbGVzcyBtZW1vcnkgYnV0IGF0IHRoZSBjb3N0IG9mIGRlY29tcHJlc3NpbmcgbW9yZSBzbG93bHkKLShyb3VnaGx5IHNwZWFraW5nLCBoYWxmIHRoZSBzcGVlZCwgYnV0IHRoZSBtYXhpbXVtIG1lbW9yeQotcmVxdWlyZW1lbnQgZHJvcHMgdG8gYXJvdW5kIDIzMDBrKS4gIFNlZSA8eHJlZiBsaW5rZW5kPSJ1c2luZyIvPgotZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbWVtb3J5IG1hbmFnZW1lbnQuPC9wYXJhPgotCi08cGFyYT5Ob3RlIHRoYXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIHRvIGRlY29tcHJlc3MgYQotc3RyZWFtIGNhbm5vdCBiZSBkZXRlcm1pbmVkIHVudGlsIHRoZSBzdHJlYW0ncyBoZWFkZXIgaGFzIGJlZW4KLXJlYWQsIHNvIGV2ZW4gaWYKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+IHN1Y2NlZWRzLCBhCi1zdWJzZXF1ZW50IDxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLWNvdWxkIGZhaWwgd2l0aAotPGNvbXB1dGVyb3V0cHV0PkJaX01FTV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmICggc21hbGwgIT0gMCAmJiBzbWFsbCAhPSAxICkKLSAgb3IgKHZlcmJvc2l0eSA8OyAwIHx8IHZlcmJvc2l0eSA+IDQpCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWjJfYnpEZWNvbXByZXNzCi0gIGlmIEJaX09LIHdhcyByZXR1cm5lZAotICBubyBzcGVjaWZpYyBhY3Rpb24gcmVxdWlyZWQgaW4gY2FzZSBvZiBlcnJvcgotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6RGVjb21wcmVzcyIgeHJlZmxhYmVsPSJCWjJfYnpEZWNvbXByZXNzIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekRlY29tcHJlc3MgKCBiel9zdHJlYW0gKnN0cm0gKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlByb3ZpZGVzIG1vcmUgaW5wdXQgYW5kL291dCBvdXRwdXQgYnVmZmVyIHNwYWNlIGZvciB0aGUKLWxpYnJhcnkuICBUaGUgY2FsbGVyIG1haW50YWlucyBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIGFuZCB1c2VzCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRyYW5zZmVyCi1kYXRhIGJldHdlZW4gdGhlbS48L3BhcmE+Ci0KLTxwYXJhPkJlZm9yZSBlYWNoIGNhbGwgdG8KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBwb2ludCBhdCB0aGUKLWNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb21wdXRlcm91dHB1dD5hdmFpbF9pbjwvY29tcHV0ZXJvdXRwdXQ+Ci1zaG91bGQgaW5kaWNhdGUgaG93IG1hbnkgYnl0ZXMgdGhlIGxpYnJhcnkgbWF5IHJlYWQuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHVwZGF0ZXMKLTxjb21wdXRlcm91dHB1dD5uZXh0X2luPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9pbjwvY29tcHV0ZXJvdXRwdXQ+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgaXQgaGFzIHJlYWQuPC9wYXJhPgotCi08cGFyYT5TaW1pbGFybHksIDxjb21wdXRlcm91dHB1dD5uZXh0X291dDwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZAotcG9pbnQgdG8gYSBidWZmZXIgaW4gd2hpY2ggdGhlIHVuY29tcHJlc3NlZCBvdXRwdXQgaXMgdG8gYmUKLXBsYWNlZCwgd2l0aCA8Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfb3V0PC9jb21wdXRlcm91dHB1dD4KLWluZGljYXRpbmcgaG93IG11Y2ggb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHVwZGF0ZXMKLTxjb21wdXRlcm91dHB1dD5uZXh0X291dDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmF2YWlsX291dDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PnRvdGFsX291dDwvY29tcHV0ZXJvdXRwdXQ+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgb3V0cHV0LjwvcGFyYT4KLQotPHBhcmE+WW91IG1heSBwcm92aWRlIGFuZCByZW1vdmUgYXMgbGl0dGxlIG9yIGFzIG11Y2ggZGF0YSBhcyB5b3UKLWxpa2Ugb24gZWFjaCBjYWxsIG9mCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LiAgSW4gdGhlIGxpbWl0LAotaXQgaXMgYWNjZXB0YWJsZSB0byBzdXBwbHkgYW5kIHJlbW92ZSBkYXRhIG9uZSBieXRlIGF0IGEgdGltZSwKLWFsdGhvdWdoIHRoaXMgd291bGQgYmUgdGVycmlibHkgaW5lZmZpY2llbnQuICBZb3Ugc2hvdWxkIGFsd2F5cwotZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGJ5dGUgb2Ygb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZSBhdAotZWFjaCBjYWxsLjwvcGFyYT4KLQotPHBhcmE+VXNlIG9mIDxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gaXMKLXNpbXBsZXIgdGhhbgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Zb3Ugc2hvdWxkIHByb3ZpZGUgaW5wdXQgYW5kIHJlbW92ZSBvdXRwdXQgYXMgZGVzY3JpYmVkCi1hYm92ZSwgYW5kIHJlcGVhdGVkbHkgY2FsbAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB1bnRpbAotPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiBpcyByZXR1cm5lZC4KLUFwcGVhcmFuY2Ugb2YgPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PgotZGVub3RlcyB0aGF0IDxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLWhhcyBkZXRlY3RlZCB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGNvbXByZXNzZWQgc3RyZWFtLgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIG5vdAotcHJvZHVjZSA8Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+IHVudGlsIGFsbAotb3V0cHV0IGRhdGEgaGFzIGJlZW4gcGxhY2VkIGludG8gdGhlIG91dHB1dCBidWZmZXIsIHNvIG9uY2UKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4gYXBwZWFycywgeW91IGFyZQotZ3VhcmFudGVlZCB0byBoYXZlIGF2YWlsYWJsZSBhbGwgdGhlIGRlY29tcHJlc3NlZCBvdXRwdXQsIGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiBjYW4gc2FmZWx5Ci1iZSBjYWxsZWQuPC9wYXJhPgotCi08cGFyYT5JZiBjYXNlIG9mIGFuIGVycm9yIHJldHVybiB2YWx1ZSwgeW91IHNob3VsZCBjYWxsCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+IHRvIGNsZWFuIHVwCi1hbmQgcmVsZWFzZSBtZW1vcnkuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMIG9yIHN0cm0tPnMgaXMgTlVMTAotICBvciBzdHJtLT5hdmFpbF9vdXQgPCAxCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3IgaXMgZGV0ZWN0ZWQgaW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtCi1CWl9EQVRBX0VSUk9SX01BR0lDCi0gIGlmIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBkb2Vzbid0IGJlZ2luIHdpdGggdGhlIHJpZ2h0IG1hZ2ljIGJ5dGVzCi1CWl9NRU1fRVJST1IKLSAgaWYgdGhlcmUgd2Fzbid0IGVub3VnaCBtZW1vcnkgYXZhaWxhYmxlCi1CWl9TVFJFQU1fRU5ECi0gIGlmIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgZGF0YSBzdHJlYW0gd2FzIGRldGVjdGVkIGFuZCBhbGwKLSAgb3V0cHV0IGluIGhhcyBiZWVuIGNvbnN1bWVkLCBlZyBzLS0+YXZhaWxfb3V0ID4gMAotQlpfT0sKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQloyX2J6RGVjb21wcmVzcwotICBpZiBCWl9PSyB3YXMgcmV0dXJuZWQKLUJaMl9iekRlY29tcHJlc3NFbmQKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpEZWNvbXByZXNzLWVuZCIgeHJlZmxhYmVsPSJCWjJfYnpEZWNvbXByZXNzRW5kIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekRlY29tcHJlc3NFbmQgKCBiel9zdHJlYW0gKnN0cm0gKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJlbGVhc2VzIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgZGVjb21wcmVzc2lvbgotc3RyZWFtLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCBvciBzdHJtLT5zIGlzIE5VTEwKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLSAgTm9uZS4KLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJobC1pbnRlcmZhY2UiIHhyZWZsYWJlbD0iSGlnaC1sZXZlbCBpbnRlcmZhY2UiPgotPHRpdGxlPkhpZ2gtbGV2ZWwgaW50ZXJmYWNlPC90aXRsZT4KLQotPHBhcmE+VGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBmb3JtYXQgZmlsZXMuICBGaXJzdCwgc29tZQotZ2VuZXJhbCBwb2ludHMuPC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+QWxsIG9mIHRoZSBmdW5jdGlvbnMgdGFrZSBhbgotICA8Y29tcHV0ZXJvdXRwdXQ+aW50KjwvY29tcHV0ZXJvdXRwdXQ+IGZpcnN0IGFyZ3VtZW50LAotICA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+LiAgQWZ0ZXIgZWFjaCBjYWxsLAotICA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBiZSBjb25zdWx0ZWQKLSAgZmlyc3QgdG8gZGV0ZXJtaW5lIHRoZSBvdXRjb21lIG9mIHRoZSBjYWxsLiAgSWYKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiBpcwotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfT0s8L2NvbXB1dGVyb3V0cHV0PiwgdGhlIGNhbGwgY29tcGxldGVkCi0gIHN1Y2Nlc3NmdWxseSwgYW5kIG9ubHkgdGhlbiBzaG91bGQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKLSAgZnVuY3Rpb24gKGlmIGFueSkgYmUgY29uc3VsdGVkLiAgSWYKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiBpcwotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfSU9fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiwgdGhlcmUgd2FzIGFuCi0gIGVycm9yIHJlYWRpbmcvd3JpdGluZyB0aGUgdW5kZXJseWluZyBjb21wcmVzc2VkIGZpbGUsIGFuZCB5b3UKLSAgc2hvdWxkIHRoZW4gY29uc3VsdCA8Y29tcHV0ZXJvdXRwdXQ+ZXJybm88L2NvbXB1dGVyb3V0cHV0PiAvCi0gIDxjb21wdXRlcm91dHB1dD5wZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiB0byBkZXRlcm1pbmUgdGhlIGNhdXNlCi0gIG9mIHRoZSBkaWZmaWN1bHR5LiAgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PgotICBtYXkgYWxzbyBiZSBzZXQgdG8gdmFyaW91cyBvdGhlciB2YWx1ZXM7IHByZWNpc2UgZGV0YWlscyBhcmUKLSAgZ2l2ZW4gb24gYSBwZXItZnVuY3Rpb24gYmFzaXMgYmVsb3cuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+SWYgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiBpbmRpY2F0ZXMKLSAgYW4gZXJyb3IgKGllLCBhbnl0aGluZyBleGNlcHQKLSAgPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gIDxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4pLCB5b3Ugc2hvdWxkCi0gIGltbWVkaWF0ZWx5IGNhbGwKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IChvcgotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+LCBkZXBlbmRpbmcgb24KLSAgd2hldGhlciB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gcmVhZCBvciB0byB3cml0ZSkgdG8gZnJlZSB1cCBhbGwKLSAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyZWFtLiAgT25jZSBhbiBlcnJvciBoYXMgYmVlbgotICBpbmRpY2F0ZWQsIGJlaGF2aW91ciBvZiBhbGwgY2FsbHMgZXhjZXB0Ci0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PgotICAoPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PikgaXMKLSAgdW5kZWZpbmVkLiAgVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgKDEpCi0gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIGJlIGNoZWNrZWQKLSAgYWZ0ZXIgZWFjaCBjYWxsLCBhbmQgKDIpIGlmCi0gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaW5kaWNhdGVzIGFuIGVycm9yLAotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4KLSAgKDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUNsb3NlPC9jb21wdXRlcm91dHB1dD4pIHNob3VsZCB0aGVuCi0gIGJlIGNhbGxlZCB0byBjbGVhbiB1cC48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5UaGUgPGNvbXB1dGVyb3V0cHV0PkZJTEUqPC9jb21wdXRlcm91dHB1dD4gYXJndW1lbnRzCi0gIHBhc3NlZCB0byA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZE9wZW48L2NvbXB1dGVyb3V0cHV0PiAvCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZU9wZW48L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgc2V0Ci0gIHRvIGJpbmFyeSBtb2RlLiAgTW9zdCBVbml4IHN5c3RlbXMgd2lsbCBkbyB0aGlzIGJ5IGRlZmF1bHQsIGJ1dAotICBvdGhlciBwbGF0Zm9ybXMsIGluY2x1ZGluZyBXaW5kb3dzIGFuZCBNYWMsIHdpbGwgbm90LiAgSWYgeW91Ci0gIG9taXQgdGhpcywgeW91IG1heSBlbmNvdW50ZXIgcHJvYmxlbXMgd2hlbiBtb3ZpbmcgY29kZSB0byBuZXcKLSAgcGxhdGZvcm1zLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPk1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGJ5Ci0gIDxjb21wdXRlcm91dHB1dD5tYWxsb2M8L2NvbXB1dGVyb3V0cHV0PiAvCi0gIDxjb21wdXRlcm91dHB1dD5mcmVlPC9jb21wdXRlcm91dHB1dD4uICBBdCBwcmVzZW50IHRoZXJlIGlzIG5vCi0gIGZhY2lsaXR5IGZvciB1c2VyLWRlZmluZWQgbWVtb3J5IGFsbG9jYXRvcnMgaW4gdGhlIGZpbGUgSS9PCi0gIGZ1bmN0aW9ucyAoY291bGQgZWFzaWx5IGJlIGFkZGVkLCB0aG91Z2gpLjwvcGFyYT48L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotCi0KLTxzZWN0MiBpZD0iYnpyZWFkb3BlbiIgeHJlZmxhYmVsPSJCWjJfYnpSZWFkT3BlbiI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci10eXBlZGVmIHZvaWQgQlpGSUxFOwotCi1CWkZJTEUgKkJaMl9ielJlYWRPcGVuKCBpbnQgKmJ6ZXJyb3IsIEZJTEUgKmYsIAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcmJvc2l0eSwgaW50IHNtYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdW51c2VkLCBpbnQgblVudXNlZCApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UHJlcGFyZSB0byByZWFkIGNvbXByZXNzZWQgZGF0YSBmcm9tIGZpbGUgaGFuZGxlCi08Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+LgotPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgcmVmZXIgdG8gYSBmaWxlIHdoaWNoCi1oYXMgYmVlbiBvcGVuZWQgZm9yIHJlYWRpbmcsIGFuZCBmb3Igd2hpY2ggdGhlIGVycm9yIGluZGljYXRvcgotKDxjb21wdXRlcm91dHB1dD5mZXJyb3IoZik8L2NvbXB1dGVyb3V0cHV0PilpcyBub3Qgc2V0LiAgSWYKLTxjb21wdXRlcm91dHB1dD5zbWFsbDwvY29tcHV0ZXJvdXRwdXQ+IGlzIDEsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5Ci10byBkZWNvbXByZXNzIHVzaW5nIGxlc3MgbWVtb3J5LCBhdCB0aGUgZXhwZW5zZSBvZiBzcGVlZC48L3BhcmE+Ci0KLTxwYXJhPkZvciByZWFzb25zIGV4cGxhaW5lZCBiZWxvdywKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4gd2lsbCBkZWNvbXByZXNzIHRoZQotPGNvbXB1dGVyb3V0cHV0Pm5VbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiBieXRlcyBzdGFydGluZyBhdAotPGNvbXB1dGVyb3V0cHV0PnVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+LCBiZWZvcmUgc3RhcnRpbmcgdG8gcmVhZAotZnJvbSB0aGUgZmlsZSA8Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+LiAgQXQgbW9zdAotPGNvbXB1dGVyb3V0cHV0PkJaX01BWF9VTlVTRUQ8L2NvbXB1dGVyb3V0cHV0PiBieXRlcyBtYXkgYmUKLXN1cHBsaWVkIGxpa2UgdGhpcy4gIElmIHRoaXMgZmFjaWxpdHkgaXMgbm90IHJlcXVpcmVkLCB5b3Ugc2hvdWxkCi1wYXNzIDxjb21wdXRlcm91dHB1dD5OVUxMPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+MDwvY29tcHV0ZXJvdXRwdXQ+IGZvcgotPGNvbXB1dGVyb3V0cHV0PnVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotbjxjb21wdXRlcm91dHB1dD5VbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiByZXNwZWN0aXZlbHkuPC9wYXJhPgotCi08cGFyYT5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVycwotPGNvbXB1dGVyb3V0cHV0PnNtYWxsPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dmVyYm9zaXR5PC9jb21wdXRlcm91dHB1dD4sIHNlZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5UaGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgdG8gZGVjb21wcmVzcyBhIGZpbGUgY2Fubm90IGJlCi1kZXRlcm1pbmVkIHVudGlsIHRoZSBmaWxlJ3MgaGVhZGVyIGhhcyBiZWVuIHJlYWQuICBTbyBpdCBpcwotcG9zc2libGUgdGhhdCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZE9wZW48L2NvbXB1dGVyb3V0cHV0PgotcmV0dXJucyA8Y29tcHV0ZXJvdXRwdXQ+QlpfT0s8L2NvbXB1dGVyb3V0cHV0PiBidXQgYSBzdWJzZXF1ZW50Ci1jYWxsIG9mIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4gd2lsbCByZXR1cm4KLTxjb21wdXRlcm91dHB1dD5CWl9NRU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+OjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgZiBpcyBOVUxMCi0gIG9yIHNtYWxsIGlzIG5laXRoZXIgMCBub3IgMQotICBvciAoIHVudXNlZCA9PSBOVUxMICYmIG5VbnVzZWQgIT0gMCApCi0gIG9yICggdW51c2VkICE9IE5VTEwgJiYgISgwIDw9IG5VbnVzZWQgPD0gQlpfTUFYX1VOVVNFRCkgKQotQlpfSU9fRVJST1IKLSAgaWYgZmVycm9yKGYpIGlzIG5vbnplcm8KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sKLSAgb3RoZXJ3aXNlLgotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLVBvaW50ZXIgdG8gYW4gYWJzdHJhY3QgQlpGSUxFCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sKLU5VTEwKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQloyX2J6UmVhZAotICBpZiBiemVycm9yIGlzIEJaX09LCi1CWjJfYnpDbG9zZQotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJienJlYWQiIHhyZWZsYWJlbD0iQloyX2J6UmVhZCI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpSZWFkICggaW50ICpiemVycm9yLCBCWkZJTEUgKmIsIHZvaWQgKmJ1ZiwgaW50IGxlbiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmVhZHMgdXAgdG8gPGNvbXB1dGVyb3V0cHV0PmxlbjwvY29tcHV0ZXJvdXRwdXQ+Ci0odW5jb21wcmVzc2VkKSBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUKLTxjb21wdXRlcm91dHB1dD5iPC9jb21wdXRlcm91dHB1dD4gaW50byB0aGUgYnVmZmVyCi08Y29tcHV0ZXJvdXRwdXQ+YnVmPC9jb21wdXRlcm91dHB1dD4uICBJZiB0aGUgcmVhZCB3YXMKLXN1Y2Nlc3NmdWwsIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaXMgc2V0IHRvCi08Y29tcHV0ZXJvdXRwdXQ+QlpfT0s8L2NvbXB1dGVyb3V0cHV0PiBhbmQgdGhlIG51bWJlciBvZiBieXRlcwotcmVhZCBpcyByZXR1cm5lZC4gIElmIHRoZSBsb2dpY2FsIGVuZC1vZi1zdHJlYW0gd2FzIGRldGVjdGVkLAotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGJlIHNldCB0bwotPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiwgYW5kIHRoZSBudW1iZXIgb2YKLWJ5dGVzIHJlYWQgaXMgcmV0dXJuZWQuICBBbGwgb3RoZXIKLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gdmFsdWVzIGRlbm90ZSBhbgotZXJyb3IuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgc3VwcGx5Ci08Y29tcHV0ZXJvdXRwdXQ+bGVuPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMsIHVubGVzcyB0aGUgbG9naWNhbAotc3RyZWFtIGVuZCBpcyBkZXRlY3RlZCBvciBhbiBlcnJvciBvY2N1cnMuICBCZWNhdXNlIG9mIHRoaXMsIGl0Ci1pcyBwb3NzaWJsZSB0byBkZXRlY3QgdGhlIHN0cmVhbSBlbmQgYnkgb2JzZXJ2aW5nIHdoZW4gdGhlIG51bWJlcgotb2YgYnl0ZXMgcmV0dXJuZWQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLgotTmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIHJlZ2FyZGVkIGFzIGluYWR2aXNhYmxlOyB5b3Ugc2hvdWxkIGluc3RlYWQKLWNoZWNrIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gYWZ0ZXIgZXZlcnkgY2FsbAotYW5kIHdhdGNoIG91dCBmb3IKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JbnRlcm5hbGx5LCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+Ci1jb3BpZXMgZGF0YSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgaW4gY2h1bmtzIG9mIHNpemUKLTxjb21wdXRlcm91dHB1dD5CWl9NQVhfVU5VU0VEPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMgYmVmb3JlCi1kZWNvbXByZXNzaW5nIGl0LiAgSWYgdGhlIGZpbGUgY29udGFpbnMgbW9yZSBieXRlcyB0aGFuIHN0cmljdGx5Ci1uZWVkZWQgdG8gcmVhY2ggdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbSwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4gd2lsbCBhbG1vc3QgY2VydGFpbmx5Ci1yZWFkIHNvbWUgb2YgdGhlIHRyYWlsaW5nIGRhdGEgYmVmb3JlIHNpZ25hbGxpbmcKLTxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FTkQ8L2NvbXB1dGVyb3V0cHV0Pi4gIFRvIGNvbGxlY3QgdGhlCi1yZWFkIGJ1dCB1bnVzZWQgZGF0YSBvbmNlCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRU5EPC9jb21wdXRlcm91dHB1dD4gaGFzIGFwcGVhcmVkLAotY2FsbCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZEdldFVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+Ci1pbW1lZGlhdGVseSBiZWZvcmUKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+OjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfUEFSQU1fRVJST1IKLSAgaWYgYiBpcyBOVUxMIG9yIGJ1ZiBpcyBOVUxMIG9yIGxlbiA8IDAKLUJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9ieldyaXRlT3BlbgotQlpfSU9fRVJST1IKLSAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgcmVhZGluZyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUKLUJaX1VORVhQRUNURURfRU9GCi0gIGlmIHRoZSBjb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIAotICB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIHdhcyBkZXRlY3RlZAotQlpfREFUQV9FUlJPUgotICBpZiBhIGRhdGEgaW50ZWdyaXR5IGVycm9yIHdhcyBkZXRlY3RlZCBpbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0KLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIHN0cmVhbSBkb2VzIG5vdCBiZWdpbiB3aXRoIHRoZSByZXF1aXNpdGUgaGVhZGVyIGJ5dGVzIAotICAoaWUsIGlzIG5vdCBhIGJ6aXAyIGRhdGEgZmlsZSkuICBUaGlzIGlzIHJlYWxseSAKLSAgYSBzcGVjaWFsIGNhc2Ugb2YgQlpfREFUQV9FUlJPUi4KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IHdhcyBhdmFpbGFibGUKLUJaX1NUUkVBTV9FTkQKLSAgaWYgdGhlIGxvZ2ljYWwgZW5kIG9mIHN0cmVhbSB3YXMgZGV0ZWN0ZWQuCi1CWl9PSwotICBvdGhlcndpc2UuCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotbnVtYmVyIG9mIGJ5dGVzIHJlYWQKLSAgaWYgYnplcnJvciBpcyBCWl9PSyBvciBCWl9TVFJFQU1fRU5ECi11bmRlZmluZWQKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotY29sbGVjdCBkYXRhIGZyb20gYnVmLCB0aGVuIEJaMl9ielJlYWQgb3IgQloyX2J6UmVhZENsb3NlCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sKLWNvbGxlY3QgZGF0YSBmcm9tIGJ1ZiwgdGhlbiBCWjJfYnpSZWFkQ2xvc2Ugb3IgQloyX2J6UmVhZEdldFVudXNlZAotICBpZiBiemVycm9yIGlzIEJaX1NFUVVFTkNFX0VORAotQloyX2J6UmVhZENsb3NlCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6cmVhZGdldHVudXNlZCIgeHJlZmxhYmVsPSJCWjJfYnpSZWFkR2V0VW51c2VkIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZEdldFVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdm9pZCBCWjJfYnpSZWFkR2V0VW51c2VkKCBpbnQqIGJ6ZXJyb3IsIEJaRklMRSAqYiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiB1bnVzZWQsIGludCogblVudXNlZCApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmV0dXJucyBkYXRhIHdoaWNoIHdhcyByZWFkIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSBidXQKLXdhcyBub3QgbmVlZGVkIHRvIGdldCB0byB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtLgotPGNvbXB1dGVyb3V0cHV0Pip1bnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiBpcyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YKLXRoZSBkYXRhLCBhbmQgPGNvbXB1dGVyb3V0cHV0PipuVW51c2VkPC9jb21wdXRlcm91dHB1dD4gdG8gdGhlCi1udW1iZXIgb2YgYnl0ZXMuICA8Y29tcHV0ZXJvdXRwdXQ+Km5VbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiB3aWxsCi1iZSBzZXQgdG8gYSB2YWx1ZSBiZXR3ZWVuIDxjb21wdXRlcm91dHB1dD4wPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTUFYX1VOVVNFRDwvY29tcHV0ZXJvdXRwdXQ+IGluY2x1c2l2ZS48L3BhcmE+Ci0KLTxwYXJhPlRoaXMgZnVuY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4gaGFzIHNpZ25hbGxlZAotPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiBidXQgYmVmb3JlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGIgaXMgTlVMTAotICBvciB1bnVzZWQgaXMgTlVMTCBvciBuVW51c2VkIGlzIE5VTEwKLUJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIEJaX1NUUkVBTV9FTkQgaGFzIG5vdCBiZWVuIHNpZ25hbGxlZAotICBvciBpZiBiIHdhcyBvcGVuZWQgd2l0aCBCWjJfYnpXcml0ZU9wZW4KLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaMl9ielJlYWRDbG9zZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6cmVhZGNsb3NlIiB4cmVmbGFiZWw9IkJaMl9ielJlYWRDbG9zZSI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdm9pZCBCWjJfYnpSZWFkQ2xvc2UgKCBpbnQgKmJ6ZXJyb3IsIEJaRklMRSAqYiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmVsZWFzZXMgYWxsIG1lbW9yeSBwZXJ0YWluaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUKLTxjb21wdXRlcm91dHB1dD5iPC9jb21wdXRlcm91dHB1dD4uCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4gZG9lcyBub3QgY2FsbAotPGNvbXB1dGVyb3V0cHV0PmZjbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IG9uIHRoZSB1bmRlcmx5aW5nIGZpbGUKLWhhbmRsZSwgc28geW91IHNob3VsZCBkbyB0aGF0IHlvdXJzZWxmIGlmIGFwcHJvcHJpYXRlLgotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBiZSBjYWxsZWQKLXRvIGNsZWFuIHVwIGFmdGVyIGFsbCBlcnJvciBzaXR1YXRpb25zLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD46PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBiIHdhcyBvcGVuZWQgd2l0aCBCWjJfYnpPcGVuV3JpdGUKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLW5vbmUKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJiendyaXRlb3BlbiIgeHJlZmxhYmVsPSJCWjJfYnpXcml0ZU9wZW4iPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZU9wZW48L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaRklMRSAqQloyX2J6V3JpdGVPcGVuKCBpbnQgKmJ6ZXJyb3IsIEZJTEUgKmYsIAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUxMDBrLCBpbnQgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3b3JrRmFjdG9yICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5QcmVwYXJlIHRvIHdyaXRlIGNvbXByZXNzZWQgZGF0YSB0byBmaWxlIGhhbmRsZQotPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0Pi4KLTxjb21wdXRlcm91dHB1dD5mPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIHJlZmVyIHRvIGEgZmlsZSB3aGljaAotaGFzIGJlZW4gb3BlbmVkIGZvciB3cml0aW5nLCBhbmQgZm9yIHdoaWNoIHRoZSBlcnJvciBpbmRpY2F0b3IKLSg8Y29tcHV0ZXJvdXRwdXQ+ZmVycm9yKGYpPC9jb21wdXRlcm91dHB1dD4paXMgbm90IHNldC48L3BhcmE+Ci0KLTxwYXJhPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXJzCi08Y29tcHV0ZXJvdXRwdXQ+YmxvY2tTaXplMTAwazwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PndvcmtGYWN0b3I8L2NvbXB1dGVyb3V0cHV0Piwgc2VlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5BbGwgcmVxdWlyZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCBhdCB0aGlzIHN0YWdlLCBzbyBpZiB0aGUKLWNhbGwgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwKLTxjb21wdXRlcm91dHB1dD5CWl9NRU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBjYW5ub3QgYmUgc2lnbmFsbGVkCi1ieSBhIHN1YnNlcXVlbnQgY2FsbCB0bwotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGYgaXMgTlVMTAotICBvciBibG9ja1NpemUxMDBrIDwgMSBvciBibG9ja1NpemUxMDBrID4gOQotQlpfSU9fRVJST1IKLSAgaWYgZmVycm9yKGYpIGlzIG5vbnplcm8KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotUG9pbnRlciB0byBhbiBhYnN0cmFjdCBCWkZJTEUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotTlVMTAotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWjJfYnpXcml0ZQotICBpZiBiemVycm9yIGlzIEJaX09LCi0gICh5b3UgY291bGQgZ28gZGlyZWN0bHkgdG8gQloyX2J6V3JpdGVDbG9zZSwgYnV0IHRoaXMgd291bGQgYmUgcHJldHR5IHBvaW50bGVzcykKLUJaMl9ieldyaXRlQ2xvc2UKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnp3cml0ZSIgeHJlZmxhYmVsPSJCWjJfYnpXcml0ZSI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkIEJaMl9ieldyaXRlICggaW50ICpiemVycm9yLCBCWkZJTEUgKmIsIHZvaWQgKmJ1ZiwgaW50IGxlbiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWJzb3JicyA8Y29tcHV0ZXJvdXRwdXQ+bGVuPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMgZnJvbSB0aGUKLWJ1ZmZlciA8Y29tcHV0ZXJvdXRwdXQ+YnVmPC9jb21wdXRlcm91dHB1dD4sIGV2ZW50dWFsbHkgdG8gYmUKLWNvbXByZXNzZWQgYW5kIHdyaXR0ZW4gdG8gdGhlIGZpbGUuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGIgaXMgTlVMTCBvciBidWYgaXMgTlVMTCBvciBsZW4gPCAwCi1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBiIHdhcyBvcGVuZWQgd2l0aCBCWjJfYnpSZWFkT3BlbgotQlpfSU9fRVJST1IKLSAgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd3JpdGluZyB0aGUgY29tcHJlc3NlZCBmaWxlLgotQlpfT0sKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnp3cml0ZWNsb3NlIiB4cmVmbGFiZWw9IkJaMl9ieldyaXRlQ2xvc2UiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUNsb3NlPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkIEJaMl9ieldyaXRlQ2xvc2UoIGludCAqYnplcnJvciwgQlpGSUxFKiBmLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWJhbmRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX291dCApOwotCi12b2lkIEJaMl9ieldyaXRlQ2xvc2U2NCggaW50ICpiemVycm9yLCBCWkZJTEUqIGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFiYW5kb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW5fbG8zMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19pbl9oaTMyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX291dF9sbzMyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX291dF9oaTMyICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Db21wcmVzc2VzIGFuZCBmbHVzaGVzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgYWxsIGRhdGEgc28KLWZhciBzdXBwbGllZCBieSA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGU8L2NvbXB1dGVyb3V0cHV0Pi4KLVRoZSBsb2dpY2FsIGVuZC1vZi1zdHJlYW0gbWFya2VycyBhcmUgYWxzbyB3cml0dGVuLCBzbyBzdWJzZXF1ZW50Ci1jYWxscyB0byA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGU8L2NvbXB1dGVyb3V0cHV0PiBhcmUKLWlsbGVnYWwuICBBbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+YjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHJlbGVhc2VkLgotPGNvbXB1dGVyb3V0cHV0PmZmbHVzaDwvY29tcHV0ZXJvdXRwdXQ+IGlzIGNhbGxlZCBvbiB0aGUKLWNvbXByZXNzZWQgZmlsZSwgYnV0IGl0IGlzIG5vdAotPGNvbXB1dGVyb3V0cHV0PmZjbG9zZTwvY29tcHV0ZXJvdXRwdXQ+J2QuPC9wYXJhPgotCi08cGFyYT5JZiA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IGlzCi1jYWxsZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgYW4gZXJyb3IsIHRoZSBvbmx5IGFjdGlvbiBpcyB0byByZWxlYXNlCi10aGUgbWVtb3J5LiAgVGhlIGxpYnJhcnkgcmVjb3JkcyB0aGUgZXJyb3IgY29kZXMgaXNzdWVkIGJ5Ci1wcmV2aW91cyBjYWxscywgc28gdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LgotVGhlcmUgaXMgbm8gYXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY29tcHJlc3Npb24gb3BlcmF0aW9uLCBub3IgdG8KLTxjb21wdXRlcm91dHB1dD5mZmx1c2g8L2NvbXB1dGVyb3V0cHV0PiB0aGUgY29tcHJlc3NlZCBmaWxlLiAgWW91Ci1jYW4gZm9yY2UgdGhpcyBiZWhhdmlvdXIgdG8gaGFwcGVuIGV2ZW4gaW4gdGhlIGNhc2Ugb2Ygbm8gZXJyb3IsCi1ieSBwYXNzaW5nIGEgbm9uemVybyB2YWx1ZSB0bwotPGNvbXB1dGVyb3V0cHV0PmFiYW5kb248L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPklmIDxjb21wdXRlcm91dHB1dD5uYnl0ZXNfaW48L2NvbXB1dGVyb3V0cHV0PiBpcyBub24tbnVsbCwKLTxjb21wdXRlcm91dHB1dD4qbmJ5dGVzX2luPC9jb21wdXRlcm91dHB1dD4gd2lsbCBiZSBzZXQgdG8gYmUgdGhlCi10b3RhbCB2b2x1bWUgb2YgdW5jb21wcmVzc2VkIGRhdGEgaGFuZGxlZC4gIFNpbWlsYXJseSwKLTxjb21wdXRlcm91dHB1dD5uYnl0ZXNfb3V0PC9jb21wdXRlcm91dHB1dD4gd2lsbCBiZSBzZXQgdG8gdGhlCi10b3RhbCB2b2x1bWUgb2YgY29tcHJlc3NlZCBkYXRhIHdyaXR0ZW4uICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoCi1vbGRlciB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUNsb3NlPC9jb21wdXRlcm91dHB1dD4gb25seSB5aWVsZHMgdGhlCi1sb3dlciAzMiBiaXRzIG9mIHRoZXNlIGNvdW50cy4gIFVzZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlQ2xvc2U2NDwvY29tcHV0ZXJvdXRwdXQ+IGlmIHlvdSB3YW50Ci10aGUgZnVsbCA2NCBiaXQgY291bnRzLiAgVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgb3RoZXJ3aXNlCi1hYnNvbHV0ZWx5IGlkZW50aWNhbC48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+OjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6UmVhZE9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGNvbXByZXNzZWQgZmlsZQotQlpfT0sKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iZW1iZWQiIHhyZWZsYWJlbD0iSGFuZGxpbmcgZW1iZWRkZWQgY29tcHJlc3NlZCBkYXRhIHN0cmVhbXMiPgotPHRpdGxlPkhhbmRsaW5nIGVtYmVkZGVkIGNvbXByZXNzZWQgZGF0YSBzdHJlYW1zPC90aXRsZT4KLQotPHBhcmE+VGhlIGhpZ2gtbGV2ZWwgbGlicmFyeSBmYWNpbGl0YXRlcyB1c2Ugb2YKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGRhdGEgc3RyZWFtcyB3aGljaCBmb3JtCi1zb21lIHBhcnQgb2YgYSBzdXJyb3VuZGluZywgbGFyZ2VyIGRhdGEgc3RyZWFtLjwvcGFyYT4KLQotPGl0ZW1pemVkbGlzdCBtYXJrPSdidWxsZXQnPgotCi0gPGxpc3RpdGVtPjxwYXJhPkZvciB3cml0aW5nLCB0aGUgbGlicmFyeSB0YWtlcyBhbiBvcGVuIGZpbGUgaGFuZGxlLAotICB3cml0ZXMgY29tcHJlc3NlZCBkYXRhIHRvIGl0LAotICA8Y29tcHV0ZXJvdXRwdXQ+ZmZsdXNoPC9jb21wdXRlcm91dHB1dD5lcyBpdCBidXQgZG9lcyBub3QKLSAgPGNvbXB1dGVyb3V0cHV0PmZjbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IGl0LiAgVGhlIGNhbGxpbmcKLSAgYXBwbGljYXRpb24gY2FuIHdyaXRlIGl0cyBvd24gZGF0YSBiZWZvcmUgYW5kIGFmdGVyIHRoZQotICBjb21wcmVzc2VkIGRhdGEgc3RyZWFtLCB1c2luZyB0aGF0IHNhbWUgZmlsZSBoYW5kbGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+UmVhZGluZyBpcyBtb3JlIGNvbXBsZXgsIGFuZCB0aGUgZmFjaWxpdGllcyBhcmUgbm90IGFzCi0gIGdlbmVyYWwgYXMgdGhleSBjb3VsZCBiZSBzaW5jZSBnZW5lcmFsaXR5IGlzIGhhcmQgdG8gcmVjb25jaWxlCi0gIHdpdGggZWZmaWNpZW5jeS4gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4KLSAgcmVhZHMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIGluIGJsb2NrcyBvZiBzaXplCi0gIDxjb21wdXRlcm91dHB1dD5CWl9NQVhfVU5VU0VEPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMsIGFuZCBpbgotICBkb2luZyBzbyBwcm9iYWJseSB3aWxsIG92ZXJzaG9vdCB0aGUgbG9naWNhbCBlbmQgb2YgY29tcHJlc3NlZAotICBzdHJlYW0uICBUbyByZWNvdmVyIHRoaXMgZGF0YSBvbmNlIGRlY29tcHJlc3Npb24gaGFzIGVuZGVkLAotICBjYWxsIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb21wdXRlcm91dHB1dD4gYWZ0ZXIKLSAgdGhlIGxhc3QgY2FsbCBvZiA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+Ci0gICh0aGUgb25lIHJldHVybmluZwotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+KSBidXQgYmVmb3JlCi0gIGNhbGxpbmcKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT48L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotPHBhcmE+VGhpcyBtZWNoYW5pc20gbWFrZXMgaXQgZWFzeSB0byBkZWNvbXByZXNzIG11bHRpcGxlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBzdHJlYW1zIHBsYWNlZCBlbmQtdG8tZW5kLgotQXMgdGhlIGVuZCBvZiBvbmUgc3RyZWFtLCB3aGVuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHJldHVybnMKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4sIGNhbGwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb21wdXRlcm91dHB1dD4gdG8gY29sbGVjdAotdGhlIHVudXNlZCBkYXRhIChjb3B5IGl0IGludG8geW91ciBvd24gYnVmZmVyIHNvbWV3aGVyZSkuICBUaGF0Ci1kYXRhIGZvcm1zIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21wcmVzc2VkIHN0cmVhbS4gIFRvIHN0YXJ0Ci11bmNvbXByZXNzaW5nIHRoYXQgbmV4dCBzdHJlYW0sIGNhbGwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkT3BlbjwvY29tcHV0ZXJvdXRwdXQ+IGFnYWluLCBmZWVkaW5nIGluCi10aGUgdW51c2VkIGRhdGEgdmlhIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+dW51c2VkPC9jb21wdXRlcm91dHB1dD4gLwotPGNvbXB1dGVyb3V0cHV0Pm5VbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiBwYXJhbWV0ZXJzLiAgS2VlcCBkb2luZwotdGhpcyB1bnRpbCA8Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+IHJldHVybgotY29pbmNpZGVzIHdpdGggdGhlIHBoeXNpY2FsIGVuZCBvZiBmaWxlCi0oPGNvbXB1dGVyb3V0cHV0PmZlb2YoZik8L2NvbXB1dGVyb3V0cHV0PikuICBJbiB0aGlzIHNpdHVhdGlvbgotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIG9mCi1jb3Vyc2UgcmV0dXJuIG5vIGRhdGEuPC9wYXJhPgotCi08cGFyYT5UaGlzIHNob3VsZCBnaXZlIHNvbWUgZmVlbCBmb3IgaG93IHRoZSBoaWdoLWxldmVsIGludGVyZmFjZQotY2FuIGJlIHVzZWQuICBJZiB5b3UgcmVxdWlyZSBleHRyYSBmbGV4aWJpbGl0eSwgeW91J2xsIGhhdmUgdG8KLWJpdGUgdGhlIGJ1bGxldCBhbmQgZ2V0IHRvIGdyaXBzIHdpdGggdGhlIGxvdy1sZXZlbAotaW50ZXJmYWNlLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9InN0ZC1yZHdyIiB4cmVmbGFiZWw9IlN0YW5kYXJkIGZpbGUtcmVhZGluZy93cml0aW5nIGNvZGUiPgotPHRpdGxlPlN0YW5kYXJkIGZpbGUtcmVhZGluZy93cml0aW5nIGNvZGU8L3RpdGxlPgotCi08cGFyYT5IZXJlJ3MgaG93IHlvdSdkIHdyaXRlIGRhdGEgdG8gYSBjb21wcmVzc2VkIGZpbGU6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1GSUxFKiAgIGY7Ci1CWkZJTEUqIGI7Ci1pbnQgICAgIG5CdWY7Ci1jaGFyICAgIGJ1ZlsgLyogd2hhdGV2ZXIgc2l6ZSB5b3UgbGlrZSAqLyBdOwotaW50ICAgICBiemVycm9yOwotaW50ICAgICBuV3JpdHRlbjsKLQotZiA9IGZvcGVuICggIm15ZmlsZS5iejIiLCAidyIgKTsKLWlmICggIWYgKSB7Ci0gLyogaGFuZGxlIGVycm9yICovCi19Ci1iID0gQloyX2J6V3JpdGVPcGVuKCAmYnplcnJvciwgZiwgOSApOwotaWYgKGJ6ZXJyb3IgIT0gQlpfT0spIHsKLSBCWjJfYnpXcml0ZUNsb3NlICggYiApOwotIC8qIGhhbmRsZSBlcnJvciAqLwotfQotCi13aGlsZSAoIC8qIGNvbmRpdGlvbiAqLyApIHsKLSAvKiBnZXQgZGF0YSB0byB3cml0ZSBpbnRvIGJ1ZiwgYW5kIHNldCBuQnVmIGFwcHJvcHJpYXRlbHkgKi8KLSBuV3JpdHRlbiA9IEJaMl9ieldyaXRlICggJmJ6ZXJyb3IsIGIsIGJ1ZiwgbkJ1ZiApOwotIGlmIChiemVycm9yID09IEJaX0lPX0VSUk9SKSB7IAotICAgQloyX2J6V3JpdGVDbG9zZSAoICZiemVycm9yLCBiICk7Ci0gICAvKiBoYW5kbGUgZXJyb3IgKi8KLSB9Ci19Ci0KLUJaMl9ieldyaXRlQ2xvc2UoICZiemVycm9yLCBiICk7Ci1pZiAoYnplcnJvciA9PSBCWl9JT19FUlJPUikgewotIC8qIGhhbmRsZSBlcnJvciAqLwotfQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QW5kIHRvIHJlYWQgZnJvbSBhIGNvbXByZXNzZWQgZmlsZTo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUZJTEUqICAgZjsKLUJaRklMRSogYjsKLWludCAgICAgbkJ1ZjsKLWNoYXIgICAgYnVmWyAvKiB3aGF0ZXZlciBzaXplIHlvdSBsaWtlICovIF07Ci1pbnQgICAgIGJ6ZXJyb3I7Ci1pbnQgICAgIG5Xcml0dGVuOwotCi1mID0gZm9wZW4gKCAibXlmaWxlLmJ6MiIsICJyIiApOwotaWYgKCAhZiApIHsKLSAgLyogaGFuZGxlIGVycm9yICovCi19Ci1iID0gQloyX2J6UmVhZE9wZW4gKCAmYnplcnJvciwgZiwgMCwgTlVMTCwgMCApOwotaWYgKCBiemVycm9yICE9IEJaX09LICkgewotICBCWjJfYnpSZWFkQ2xvc2UgKCAmYnplcnJvciwgYiApOwotICAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLQotYnplcnJvciA9IEJaX09LOwotd2hpbGUgKCBiemVycm9yID09IEJaX09LICYmIC8qIGFyYml0cmFyeSBvdGhlciBjb25kaXRpb25zICovKSB7Ci0gIG5CdWYgPSBCWjJfYnpSZWFkICggJmJ6ZXJyb3IsIGIsIGJ1ZiwgLyogc2l6ZSBvZiBidWYgKi8gKTsKLSAgaWYgKCBiemVycm9yID09IEJaX09LICkgewotICAgIC8qIGRvIHNvbWV0aGluZyB3aXRoIGJ1ZlswIC4uIG5CdWYtMV0gKi8KLSAgfQotfQotaWYgKCBiemVycm9yICE9IEJaX1NUUkVBTV9FTkQgKSB7Ci0gICBCWjJfYnpSZWFkQ2xvc2UgKCAmYnplcnJvciwgYiApOwotICAgLyogaGFuZGxlIGVycm9yICovCi19IGVsc2UgewotICAgQloyX2J6UmVhZENsb3NlICggJmJ6ZXJyb3IsIGIgKTsKLX0KLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJ1dGlsLWZucyIgeHJlZmxhYmVsPSJVdGlsaXR5IGZ1bmN0aW9ucyI+Ci08dGl0bGU+VXRpbGl0eSBmdW5jdGlvbnM8L3RpdGxlPgotCi0KLTxzZWN0MiBpZD0iYnpidWZmdG9idWZmY29tcHJlc3MiIHhyZWZsYWJlbD0iQloyX2J6QnVmZlRvQnVmZkNvbXByZXNzIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbnQgQloyX2J6QnVmZlRvQnVmZkNvbXByZXNzKCBjaGFyKiAgICAgICAgIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGRlc3RMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgc291cmNlTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICBibG9ja1NpemUxMDBrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICB2ZXJib3NpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHdvcmtGYWN0b3IgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkF0dGVtcHRzIHRvIGNvbXByZXNzIHRoZSBkYXRhIGluIDxjb21wdXRlcm91dHB1dD5zb3VyY2VbMAotLi4gc291cmNlTGVuLTFdPC9jb21wdXRlcm91dHB1dD4gaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLAotPGNvbXB1dGVyb3V0cHV0PmRlc3RbMCAuLiAqZGVzdExlbi0xXTwvY29tcHV0ZXJvdXRwdXQ+LiAgSWYgdGhlCi1kZXN0aW5hdGlvbiBidWZmZXIgaXMgYmlnIGVub3VnaCwKLTxjb21wdXRlcm91dHB1dD4qZGVzdExlbjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHNldCB0byB0aGUgc2l6ZSBvZgotdGhlIGNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb21wdXRlcm91dHB1dD5CWl9PSzwvY29tcHV0ZXJvdXRwdXQ+Ci1pcyByZXR1cm5lZC4gIElmIHRoZSBjb21wcmVzc2VkIGRhdGEgd29uJ3QgZml0LAotPGNvbXB1dGVyb3V0cHV0PipkZXN0TGVuPC9jb21wdXRlcm91dHB1dD4gaXMgdW5jaGFuZ2VkLCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWl9PVVRCVUZGX0ZVTEw8L2NvbXB1dGVyb3V0cHV0PiBpcwotcmV0dXJuZWQuPC9wYXJhPgotCi08cGFyYT5Db21wcmVzc2lvbiBpbiB0aGlzIG1hbm5lciBpcyBhIG9uZS1zaG90IGV2ZW50LCBkb25lIHdpdGggYQotc2luZ2xlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gIFRoZSByZXN1bHRpbmcgY29tcHJlc3NlZCBkYXRhIGlzIGEKLWNvbXBsZXRlIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGZvcm1hdCBkYXRhCi1zdHJlYW0uICBUaGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIG1ha2luZyBhZGRpdGlvbmFsIGNhbGxzIHRvCi1wcm92aWRlIGV4dHJhIGlucHV0IGRhdGEuICBJZiB5b3Ugd2FudCB0aGF0IGtpbmQgb2YgbWVjaGFuaXNtLAotdXNlIHRoZSBsb3ctbGV2ZWwgaW50ZXJmYWNlLjwvcGFyYT4KLQotPHBhcmE+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb21wdXRlcm91dHB1dD5ibG9ja1NpemUxMDBrPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+dmVyYm9zaXR5PC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+d29ya0ZhY3RvcjwvY29tcHV0ZXJvdXRwdXQ+LCBzZWUKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPlRvIGd1YXJhbnRlZSB0aGF0IHRoZSBjb21wcmVzc2VkIGRhdGEgd2lsbCBmaXQgaW4gaXRzCi1idWZmZXIsIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgb2Ygc2l6ZSAxJSBsYXJnZXIgdGhhbiB0aGUKLXVuY29tcHJlc3NlZCBkYXRhLCBwbHVzIHNpeCBodW5kcmVkIGV4dHJhIGJ5dGVzLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLXdpbGwgbm90IHdyaXRlIGRhdGEgYXQgb3IgYmV5b25kCi08Y29tcHV0ZXJvdXRwdXQ+ZGVzdFsqZGVzdExlbl08L2NvbXB1dGVyb3V0cHV0PiwgZXZlbiBpbiBjYXNlIG9mCi1idWZmZXIgb3ZlcmZsb3cuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgZGVzdCBpcyBOVUxMIG9yIGRlc3RMZW4gaXMgTlVMTAotICBvciBibG9ja1NpemUxMDBrIDwgMSBvciBibG9ja1NpemUxMDBrID4gOQotICBvciB2ZXJib3NpdHkgPCAwIG9yIHZlcmJvc2l0eSA+IDQKLSAgb3Igd29ya0ZhY3RvciA8IDAgb3Igd29ya0ZhY3RvciA+IDI1MAotQlpfTUVNX0VSUk9SCi0gIGlmIGluc3VmZmljaWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlIAotQlpfT1VUQlVGRl9GVUxMCi0gIGlmIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgZXhjZWVkcyAqZGVzdExlbgotQlpfT0sKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpidWZmdG9idWZmZGVjb21wcmVzcyIgeHJlZmxhYmVsPSJCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcyI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbnQgQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MoIGNoYXIqICAgICAgICAgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICBzb3VyY2VMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgc21hbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgdmVyYm9zaXR5ICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BdHRlbXB0cyB0byBkZWNvbXByZXNzIHRoZSBkYXRhIGluIDxjb21wdXRlcm91dHB1dD5zb3VyY2VbMAotLi4gc291cmNlTGVuLTFdPC9jb21wdXRlcm91dHB1dD4gaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLAotPGNvbXB1dGVyb3V0cHV0PmRlc3RbMCAuLiAqZGVzdExlbi0xXTwvY29tcHV0ZXJvdXRwdXQ+LiAgSWYgdGhlCi1kZXN0aW5hdGlvbiBidWZmZXIgaXMgYmlnIGVub3VnaCwKLTxjb21wdXRlcm91dHB1dD4qZGVzdExlbjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHNldCB0byB0aGUgc2l6ZSBvZgotdGhlIHVuY29tcHJlc3NlZCBkYXRhLCBhbmQgPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4KLWlzIHJldHVybmVkLiAgSWYgdGhlIGNvbXByZXNzZWQgZGF0YSB3b24ndCBmaXQsCi08Y29tcHV0ZXJvdXRwdXQ+KmRlc3RMZW48L2NvbXB1dGVyb3V0cHV0PiBpcyB1bmNoYW5nZWQsIGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaX09VVEJVRkZfRlVMTDwvY29tcHV0ZXJvdXRwdXQ+IGlzCi1yZXR1cm5lZC48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5zb3VyY2U8L2NvbXB1dGVyb3V0cHV0PiBpcyBhc3N1bWVkIHRvIGhvbGQKLWEgY29tcGxldGUgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0IGRhdGEKLXN0cmVhbS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHRyaWVzCi10byBkZWNvbXByZXNzIHRoZSBlbnRpcmV0eSBvZiB0aGUgc3RyZWFtIGludG8gdGhlIG91dHB1dAotYnVmZmVyLjwvcGFyYT4KLQotPHBhcmE+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb21wdXRlcm91dHB1dD5zbWFsbDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+LCBzZWUKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+QmVjYXVzZSB0aGUgY29tcHJlc3Npb24gcmF0aW8gb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBjYW5ub3QKLWJlIGtub3duIGluIGFkdmFuY2UsIHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHRoZQotb3V0cHV0IGJ1ZmZlciB3aWxsIGJlIGJpZyBlbm91Z2guICBZb3UgbWF5IG9mIGNvdXJzZSBtYWtlCi1hcnJhbmdlbWVudHMgaW4geW91ciBjb2RlIHRvIHJlY29yZCB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkCi1kYXRhLCBidXQgc3VjaCBhIG1lY2hhbmlzbSBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMKLWxpYnJhcnkuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pgotd2lsbCBub3Qgd3JpdGUgZGF0YSBhdCBvciBiZXlvbmQKLTxjb21wdXRlcm91dHB1dD5kZXN0WypkZXN0TGVuXTwvY29tcHV0ZXJvdXRwdXQ+LCBldmVuIGluIGNhc2Ugb2YKLWJ1ZmZlciBvdmVyZmxvdy48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBkZXN0IGlzIE5VTEwgb3IgZGVzdExlbiBpcyBOVUxMCi0gIG9yIHNtYWxsICE9IDAgJiYgc21hbGwgIT0gMQotICBvciB2ZXJib3NpdHkgPCAwIG9yIHZlcmJvc2l0eSA+IDQKLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZSAKLUJaX09VVEJVRkZfRlVMTAotICBpZiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGV4Y2VlZHMgKmRlc3RMZW4KLUJaX0RBVEFfRVJST1IKLSAgaWYgYSBkYXRhIGludGVncml0eSBlcnJvciB3YXMgZGV0ZWN0ZWQgaW4gdGhlIGNvbXByZXNzZWQgZGF0YQotQlpfREFUQV9FUlJPUl9NQUdJQwotICBpZiB0aGUgY29tcHJlc3NlZCBkYXRhIGRvZXNuJ3QgYmVnaW4gd2l0aCB0aGUgcmlnaHQgbWFnaWMgYnl0ZXMKLUJaX1VORVhQRUNURURfRU9GCi0gIGlmIHRoZSBjb21wcmVzc2VkIGRhdGEgZW5kcyB1bmV4cGVjdGVkbHkKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InpsaWItY29tcGF0IiB4cmVmbGFiZWw9InpsaWIgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD56bGliPC9jb21wdXRlcm91dHB1dD4gY29tcGF0aWJpbGl0eSBmdW5jdGlvbnM8L3RpdGxlPgotCi08cGFyYT5Zb3NoaW9rYSBUc3VuZW8gaGFzIGNvbnRyaWJ1dGVkIHNvbWUgZnVuY3Rpb25zIHRvIGdpdmUKLWJldHRlciA8Y29tcHV0ZXJvdXRwdXQ+emxpYjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXBhdGliaWxpdHkuCi1UaGVzZSBmdW5jdGlvbnMgYXJlIDxjb21wdXRlcm91dHB1dD5CWjJfYnpvcGVuPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6cmVhZDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iendyaXRlPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Zmx1c2g8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpjbG9zZTwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemVycm9yPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6bGliVmVyc2lvbjwvY29tcHV0ZXJvdXRwdXQ+LiAgVGhlc2UKLWZ1bmN0aW9ucyBhcmUgbm90ICh5ZXQpIG9mZmljaWFsbHkgcGFydCBvZiB0aGUgbGlicmFyeS4gIElmIHRoZXkKLWJyZWFrLCB5b3UgZ2V0IHRvIGtlZXAgYWxsIHRoZSBwaWVjZXMuICBOZXZlcnRoZWxlc3MsIEkgdGhpbmsKLXRoZXkgd29yayBvay48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLXR5cGVkZWYgdm9pZCBCWkZJTEU7Ci0KLWNvbnN0IGNoYXIgKiBCWjJfYnpsaWJWZXJzaW9uICggdm9pZCApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmV0dXJucyBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBsaWJyYXJ5IHZlcnNpb24uPC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWkZJTEUgKiBCWjJfYnpvcGVuICAoIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUgKTsKLUJaRklMRSAqIEJaMl9iemRvcGVuICggaW50ICAgICAgICBmZCwgICAgY29uc3QgY2hhciAqbW9kZSApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+T3BlbnMgYSA8Y29tcHV0ZXJvdXRwdXQ+LmJ6MjwvY29tcHV0ZXJvdXRwdXQ+IGZpbGUgZm9yCi1yZWFkaW5nIG9yIHdyaXRpbmcsIHVzaW5nIGVpdGhlciBpdHMgbmFtZSBvciBhIHByZS1leGlzdGluZyBmaWxlCi1kZXNjcmlwdG9yLiAgQW5hbG9nb3VzIHRvIDxjb21wdXRlcm91dHB1dD5mb3BlbjwvY29tcHV0ZXJvdXRwdXQ+Ci1hbmQgPGNvbXB1dGVyb3V0cHV0PmZkb3BlbjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9ienJlYWQgICggQlpGSUxFKiBiLCB2b2lkKiBidWYsIGludCBsZW4gKTsKLWludCBCWjJfYnp3cml0ZSAoIEJaRklMRSogYiwgdm9pZCogYnVmLCBpbnQgbGVuICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5SZWFkcy93cml0ZXMgZGF0YSBmcm9tL3RvIGEgcHJldmlvdXNseSBvcGVuZWQKLTxjb21wdXRlcm91dHB1dD5CWkZJTEU8L2NvbXB1dGVyb3V0cHV0Pi4gIEFuYWxvZ291cyB0bwotPGNvbXB1dGVyb3V0cHV0PmZyZWFkPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+ZndyaXRlPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbnQgIEJaMl9iemZsdXNoICggQlpGSUxFKiBiICk7Ci12b2lkIEJaMl9iemNsb3NlICggQlpGSUxFKiBiICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5GbHVzaGVzL2Nsb3NlcyBhIDxjb21wdXRlcm91dHB1dD5CWkZJTEU8L2NvbXB1dGVyb3V0cHV0Pi4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpmbHVzaDwvY29tcHV0ZXJvdXRwdXQ+IGRvZXNuJ3QgYWN0dWFsbHkgZG8KLWFueXRoaW5nLiAgQW5hbG9nb3VzIHRvIDxjb21wdXRlcm91dHB1dD5mZmx1c2g8L2NvbXB1dGVyb3V0cHV0PgotYW5kIDxjb21wdXRlcm91dHB1dD5mY2xvc2U8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWNvbnN0IGNoYXIgKiBCWjJfYnplcnJvciAoIEJaRklMRSAqYiwgaW50ICplcnJudW0gKQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBtb3JlIHJlY2VudCBlcnJvciBzdGF0dXMgb2YKLTxjb21wdXRlcm91dHB1dD5iPC9jb21wdXRlcm91dHB1dD4sIGFuZCBhbHNvIHNldHMKLTxjb21wdXRlcm91dHB1dD4qZXJybnVtPC9jb21wdXRlcm91dHB1dD4gdG8gaXRzIG51bWVyaWNhbAotdmFsdWUuPC9wYXJhPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0ic3RkaW8tZnJlZSIgCi0gICAgICAgeHJlZmxhYmVsPSJVc2luZyB0aGUgbGlicmFyeSBpbiBhIHN0ZGlvLWZyZWUgZW52aXJvbm1lbnQiPgotPHRpdGxlPlVzaW5nIHRoZSBsaWJyYXJ5IGluIGEgPGNvbXB1dGVyb3V0cHV0PnN0ZGlvPC9jb21wdXRlcm91dHB1dD4tZnJlZSBlbnZpcm9ubWVudDwvdGl0bGU+Ci0KLQotPHNlY3QyIGlkPSJzdGRpby1ieWUiIHhyZWZsYWJlbD0iR2V0dGluZyByaWQgb2Ygc3RkaW8iPgotPHRpdGxlPkdldHRpbmcgcmlkIG9mIDxjb21wdXRlcm91dHB1dD5zdGRpbzwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHBhcmE+SW4gYSBkZWVwbHkgZW1iZWRkZWQgYXBwbGljYXRpb24sIHlvdSBtaWdodCB3YW50IHRvIHVzZQotanVzdCB0aGUgbWVtb3J5LXRvLW1lbW9yeSBmdW5jdGlvbnMuICBZb3UgY2FuIGRvIHRoaXMKLWNvbnZlbmllbnRseSBieSBjb21waWxpbmcgdGhlIGxpYnJhcnkgd2l0aCBwcmVwcm9jZXNzb3Igc3ltYm9sCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTk9fU1RESU88L2NvbXB1dGVyb3V0cHV0PiBkZWZpbmVkLiAgRG9pbmcgdGhpcwotZ2l2ZXMgeW91IGEgbGlicmFyeSBjb250YWluaW5nIG9ubHkgdGhlIGZvbGxvd2luZyBlaWdodAotZnVuY3Rpb25zOjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD48L3BhcmE+Ci0KLTxwYXJhPldoZW4gY29tcGlsZWQgbGlrZSB0aGlzLCBhbGwgZnVuY3Rpb25zIHdpbGwgaWdub3JlCi08Y29tcHV0ZXJvdXRwdXQ+dmVyYm9zaXR5PC9jb21wdXRlcm91dHB1dD4gc2V0dGluZ3MuPC9wYXJhPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iY3JpdGljYWwtZXJyb3IiIHhyZWZsYWJlbD0iQ3JpdGljYWwgZXJyb3IgaGFuZGxpbmciPgotPHRpdGxlPkNyaXRpY2FsIGVycm9yIGhhbmRsaW5nPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29udGFpbnMgYSBudW1iZXIKLW9mIGludGVybmFsIGFzc2VydGlvbiBjaGVja3Mgd2hpY2ggc2hvdWxkLCBuZWVkbGVzcyB0byBzYXksIG5ldmVyCi1iZSBhY3RpdmF0ZWQuICBOZXZlcnRoZWxlc3MsIGlmIGFuIGFzc2VydGlvbiBzaG91bGQgZmFpbCwKLWJlaGF2aW91ciBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBsaWJyYXJ5IHdhcyBjb21waWxlZCB3aXRoCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTk9fU1RESU88L2NvbXB1dGVyb3V0cHV0PiBzZXQuPC9wYXJhPgotCi08cGFyYT5Gb3IgYSBub3JtYWwgY29tcGlsZSwgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgeWllbGRzIHRoZQotbWVzc2FnZTo8L3BhcmE+Ci0KLTxibG9ja3F1b3RlPgotPHBhcmE+YnppcDIvbGliYnppcDI6IGludGVybmFsIGVycm9yIG51bWJlciBOLjwvcGFyYT4KLTxwYXJhPlRoaXMgaXMgYSBidWcgaW4gYnppcDIvbGliYnppcDIsICZiei12ZXJzaW9uOyBvZiAmYnotZGF0ZTsuCi1QbGVhc2UgcmVwb3J0IGl0IHRvIG1lIGF0OiAmYnotZW1haWw7LiAgSWYgdGhpcyBoYXBwZW5lZAotd2hlbiB5b3Ugd2VyZSB1c2luZyBzb21lIHByb2dyYW0gd2hpY2ggdXNlcyBsaWJiemlwMiBhcyBhCi1jb21wb25lbnQsIHlvdSBzaG91bGQgYWxzbyByZXBvcnQgdGhpcyBidWcgdG8gdGhlIGF1dGhvcihzKQotb2YgdGhhdCBwcm9ncmFtLiAgUGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHJlcG9ydCB0aGlzIGJ1ZzsKLXRpbWVseSBhbmQgYWNjdXJhdGUgYnVnIHJlcG9ydHMgZXZlbnR1YWxseSBsZWFkIHRvIGhpZ2hlcgotcXVhbGl0eSBzb2Z0d2FyZS4gIFRoYW5rcy4gIEp1bGlhbiBTZXdhcmQsICZiei1kYXRlOy4KLTwvcGFyYT48L2Jsb2NrcXVvdGU+Ci0KLTxwYXJhPndoZXJlIDxjb21wdXRlcm91dHB1dD5OPC9jb21wdXRlcm91dHB1dD4gaXMgc29tZSBlcnJvciBjb2RlCi1udW1iZXIuICBJZiA8Y29tcHV0ZXJvdXRwdXQ+TiA9PSAxMDA3PC9jb21wdXRlcm91dHB1dD4sIGl0IGFsc28KLXByaW50cyBzb21lIGV4dHJhIHRleHQgYWR2aXNpbmcgdGhlIHJlYWRlciB0aGF0IHVucmVsaWFibGUgbWVtb3J5Ci1pcyBvZnRlbiBhc3NvY2lhdGVkIHdpdGggaW50ZXJuYWwgZXJyb3IgMTAwNy4gKFRoaXMgaXMgYQotZnJlcXVlbnRseS1vYnNlcnZlZC1waGVub21lbm9uIHdpdGggdmVyc2lvbnMgMS4wLjAvMS4wLjEpLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmV4aXQoMyk8L2NvbXB1dGVyb3V0cHV0PiBpcyB0aGVuCi1jYWxsZWQuPC9wYXJhPgotCi08cGFyYT5Gb3IgYSA8Y29tcHV0ZXJvdXRwdXQ+c3RkaW88L2NvbXB1dGVyb3V0cHV0Pi1mcmVlIGxpYnJhcnksCi1hc3NlcnRpb24gZmFpbHVyZXMgcmVzdWx0IGluIGEgY2FsbCB0byBhIGZ1bmN0aW9uIGRlY2xhcmVkCi1hczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWV4dGVybiB2b2lkIGJ6X2ludGVybmFsX2Vycm9yICggaW50IGVycmNvZGUgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlRoZSByZWxldmFudCBjb2RlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4gIFlvdSBzaG91bGQKLXN1cHBseSBzdWNoIGEgZnVuY3Rpb24uPC9wYXJhPgotCi08cGFyYT5JbiBlaXRoZXIgY2FzZSwgb25jZSBhbiBhc3NlcnRpb24gZmFpbHVyZSBoYXMgb2NjdXJyZWQsIGFueQotPGNvbXB1dGVyb3V0cHV0PmJ6X3N0cmVhbTwvY29tcHV0ZXJvdXRwdXQ+IHJlY29yZHMgaW52b2x2ZWQgY2FuCi1iZSByZWdhcmRlZCBhcyBpbnZhbGlkLiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byByZXN1bWUgbm9ybWFsCi1vcGVyYXRpb24gd2l0aCB0aGVtLjwvcGFyYT4KLQotPHBhcmE+WW91IG1heSwgb2YgY291cnNlLCBjaGFuZ2UgY3JpdGljYWwgZXJyb3IgaGFuZGxpbmcgdG8gc3VpdAoteW91ciBuZWVkcy4gIEFzIEkgc2FpZCBhYm92ZSwgY3JpdGljYWwgZXJyb3JzIGluZGljYXRlIGJ1Z3MgaW4KLXRoZSBsaWJyYXJ5IGFuZCBzaG91bGQgbm90IG9jY3VyLiAgQWxsICJub3JtYWwiIGVycm9yIHNpdHVhdGlvbnMKLWFyZSBpbmRpY2F0ZWQgdmlhIGVycm9yIHJldHVybiBjb2RlcyBmcm9tIGZ1bmN0aW9ucywgYW5kIGNhbiBiZQotcmVjb3ZlcmVkIGZyb20uPC9wYXJhPgotCi08L3NlY3QyPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0id2luLWRsbCIgeHJlZmxhYmVsPSJNYWtpbmcgYSBXaW5kb3dzIERMTCI+Ci08dGl0bGU+TWFraW5nIGEgV2luZG93cyBETEw8L3RpdGxlPgotCi08cGFyYT5FdmVyeXRoaW5nIHJlbGF0ZWQgdG8gV2luZG93cyBoYXMgYmVlbiBjb250cmlidXRlZCBieQotWW9zaGlva2EgVHN1bmVvCi0oPGNvbXB1dGVyb3V0cHV0PnRzdW5lb0Byci5paWo0dS5vci5qcDwvY29tcHV0ZXJvdXRwdXQ+KSwgc28KLXlvdSBzaG91bGQgc2VuZCB5b3VyIHF1ZXJpZXMgdG8gaGltIChidXQgcGVyaGFwcyBDYzogbWUsCi08Y29tcHV0ZXJvdXRwdXQ+JmJ6LWVtYWlsOzwvY29tcHV0ZXJvdXRwdXQ+KS48L3BhcmE+Ci0KLTxwYXJhPk15IHZhZ3VlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0byBkbyBpczogdXNpbmcgVmlzdWFsIEMrKwotNS4wLCBvcGVuIHRoZSBwcm9qZWN0IGZpbGUKLTxjb21wdXRlcm91dHB1dD5saWJiejIuZHNwPC9jb21wdXRlcm91dHB1dD4sIGFuZCBidWlsZC4gIFRoYXQncwotYWxsLjwvcGFyYT4KLQotPHBhcmE+SWYgeW91IGNhbid0IG9wZW4gdGhlIHByb2plY3QgZmlsZSBmb3Igc29tZSByZWFzb24sIG1ha2UgYQotbmV3IG9uZSwgbmFtaW5nIHRoZXNlIGZpbGVzOgotPGNvbXB1dGVyb3V0cHV0PmJsb2Nrc29ydC5jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpsaWIuYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmNvbXByZXNzLmM8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5jcmN0YWJsZS5jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+ZGVjb21wcmVzcy5jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+aHVmZm1hbi5jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+cmFuZHRhYmxlLmM8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5saWJiejIuZGVmPC9jb21wdXRlcm91dHB1dD4uICBZb3Ugd2lsbCBhbHNvIG5lZWQKLXRvIG5hbWUgdGhlIGhlYWRlciBmaWxlcyA8Y29tcHV0ZXJvdXRwdXQ+YnpsaWIuaDwvY29tcHV0ZXJvdXRwdXQ+Ci1hbmQgPGNvbXB1dGVyb3V0cHV0PmJ6bGliX3ByaXZhdGUuaDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+SWYgeW91IGRvbid0IHVzZSBWQysrLCB5b3UgbWF5IG5lZWQgdG8gZGVmaW5lIHRoZQotcHJvcHJvY2Vzc29yIHN5bWJvbAotPGNvbXB1dGVyb3V0cHV0Pl9XSU4zMjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+RmluYWxseSwgPGNvbXB1dGVyb3V0cHV0PmRsbHRlc3QuYzwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEKLXNhbXBsZSBwcm9ncmFtIHVzaW5nIHRoZSBETEwuICBJdCBoYXMgYSBwcm9qZWN0IGZpbGUsCi08Y29tcHV0ZXJvdXRwdXQ+ZGxsdGVzdC5kc3A8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBqdXN0IHdhbnQgYSBtYWtlZmlsZSBmb3IgVmlzdWFsIEMsIGhhdmUgYSBsb29rIGF0Ci08Y29tcHV0ZXJvdXRwdXQ+bWFrZWZpbGUubXNjPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5CZSBhd2FyZSB0aGF0IGlmIHlvdSBjb21waWxlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpdHNlbGYgb24gV2luMzIsIHlvdSBtdXN0Ci1zZXQgPGNvbXB1dGVyb3V0cHV0PkJaX1VOSVg8L2NvbXB1dGVyb3V0cHV0PiB0byAwIGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaX0xDQ1dJTjMyPC9jb21wdXRlcm91dHB1dD4gdG8gMSwgaW4gdGhlIGZpbGUKLTxjb21wdXRlcm91dHB1dD5iemlwMi5jPC9jb21wdXRlcm91dHB1dD4sIGJlZm9yZSBjb21waWxpbmcuCi1PdGhlcndpc2UgdGhlIHJlc3VsdGluZyBiaW5hcnkgd29uJ3Qgd29yayBjb3JyZWN0bHkuPC9wYXJhPgotCi08cGFyYT5JIGhhdmVuJ3QgdHJpZWQgYW55IG9mIHRoaXMgc3R1ZmYgbXlzZWxmLCBidXQgaXQgYWxsIGxvb2tzCi1wbGF1c2libGUuPC9wYXJhPgotCi08L3NlY3QxPgotCi08L2NoYXB0ZXI+Ci0KLQotCi08Y2hhcHRlciBpZD0ibWlzYyIgeHJlZmxhYmVsPSJNaXNjZWxsYW5lYSI+Ci08dGl0bGU+TWlzY2VsbGFuZWE8L3RpdGxlPgotCi08cGFyYT5UaGVzZSBhcmUganVzdCBzb21lIHJhbmRvbSB0aG91Z2h0cyBvZiBtaW5lLiAgWW91ciBtaWxlYWdlCi1tYXkgdmFyeS48L3BhcmE+Ci0KLQotPHNlY3QxIGlkPSJsaW1pdHMiIHhyZWZsYWJlbD0iTGltaXRhdGlvbnMgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSBmb3JtYXQiPgotPHRpdGxlPkxpbWl0YXRpb25zIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0PC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyLTEuMC5YPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+MC45LjU8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD4wLjkuMDwvY29tcHV0ZXJvdXRwdXQ+IHVzZSBleGFjdGx5IHRoZSBzYW1lIGZpbGUKLWZvcm1hdCBhcyB0aGUgb3JpZ2luYWwgdmVyc2lvbiwKLTxjb21wdXRlcm91dHB1dD5iemlwMi0wLjE8L2NvbXB1dGVyb3V0cHV0Pi4gIFRoaXMgZGVjaXNpb24gd2FzCi1tYWRlIGluIHRoZSBpbnRlcmVzdHMgb2Ygc3RhYmlsaXR5LiAgQ3JlYXRpbmcgeWV0IGFub3RoZXIKLWluY29tcGF0aWJsZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0IHdvdWxkIGNyZWF0ZSBmdXJ0aGVyCi1jb25mdXNpb24gYW5kIGRpc3J1cHRpb24gZm9yIHVzZXJzLjwvcGFyYT4KLQotPHBhcmE+TmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIG5vdCBhIHBhaW5sZXNzIGRlY2lzaW9uLiAgRGV2ZWxvcG1lbnQKLXdvcmsgc2luY2UgdGhlIHJlbGVhc2Ugb2YKLTxjb21wdXRlcm91dHB1dD5iemlwMi0wLjE8L2NvbXB1dGVyb3V0cHV0PiBpbiBBdWd1c3QgMTk5NyBoYXMKLXNob3duIGNvbXBsZXhpdGllcyBpbiB0aGUgZmlsZSBmb3JtYXQgd2hpY2ggc2xvdyBkb3duCi1kZWNvbXByZXNzaW9uIGFuZCwgaW4gcmV0cm9zcGVjdCwgYXJlIHVubmVjZXNzYXJ5LiAgVGhlc2UKLWFyZTo8L3BhcmE+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT5UaGUgcnVuLWxlbmd0aCBlbmNvZGVyLCB3aGljaCBpcyB0aGUgZmlyc3Qgb2YgdGhlCi0gICBjb21wcmVzc2lvbiB0cmFuc2Zvcm1hdGlvbnMsIGlzIGVudGlyZWx5IGlycmVsZXZhbnQuICBUaGUKLSAgIG9yaWdpbmFsIHB1cnBvc2Ugd2FzIHRvIHByb3RlY3QgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGZyb20gdGhlCi0gICB2ZXJ5IHdvcnN0IGNhc2UgaW5wdXQ6IGEgc3RyaW5nIG9mIHJlcGVhdGVkIHN5bWJvbHMuICBCdXQKLSAgIGFsZ29yaXRobSBzdGVwcyBRNmEgYW5kIFE2YiBpbiB0aGUgb3JpZ2luYWwgQnVycm93cy1XaGVlbGVyCi0gICB0ZWNobmljYWwgcmVwb3J0IChTUkMtMTI0KSBzaG93IGhvdyByZXBlYXRzIGNhbiBiZSBoYW5kbGVkCi0gICB3aXRob3V0IGRpZmZpY3VsdHkgaW4gYmxvY2sgc29ydGluZy48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5UaGUgcmFuZG9taXNhdGlvbiBtZWNoYW5pc20gZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZQotICAgdGhlcmUuICBVZGkgTWFuYmVyIGFuZCBHZW5lIE15ZXJzIHB1Ymxpc2hlZCBhIHN1ZmZpeCBhcnJheQotICAgY29uc3RydWN0aW9uIGFsZ29yaXRobSBhIGZldyB5ZWFycyBiYWNrLCB3aGljaCBjYW4gYmUgZW1wbG95ZWQKLSAgIHRvIHNvcnQgYW55IGJsb2NrLCBubyBtYXR0ZXIgaG93IHJlcGV0aXRpdmUsIGluIE8oTiBsb2cgTikKLSAgIHRpbWUuICBTdWJzZXF1ZW50IHdvcmsgYnkgS3VuaWhpa28gU2FkYWthbmUgaGFzIHByb2R1Y2VkIGEKLSAgIGRlcml2YXRpdmUgTyhOIChsb2cgTileMikgYWxnb3JpdGhtIHdoaWNoIHVzdWFsbHkgb3V0cGVyZm9ybXMKLSAgIHRoZSBNYW5iZXItTXllcnMgYWxnb3JpdGhtLjwvcGFyYT4KLQotICAgPHBhcmE+SSBjb3VsZCBoYXZlIGNoYW5nZWQgdG8gU2FkYWthbmUncyBhbGdvcml0aG0sIGJ1dCBJIGZpbmQKLSAgIGl0IHRvIGJlIHNsb3dlciB0aGFuIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+J3MKLSAgIGV4aXN0aW5nIGFsZ29yaXRobSBmb3IgbW9zdCBpbnB1dHMsIGFuZCB0aGUgcmFuZG9taXNhdGlvbgotICAgbWVjaGFuaXNtIHByb3RlY3RzIGFkZXF1YXRlbHkgYWdhaW5zdCBiYWQgY2FzZXMuICBJIGRpZG4ndAotICAgdGhpbmsgaXQgd2FzIGEgZ29vZCB0cmFkZW9mZiB0byBtYWtlLiAgUGFydGx5IHRoaXMgaXMgZHVlIHRvCi0gICB0aGUgZmFjdCB0aGF0IEkgd2FzIG5vdCBmbG9vZGVkIHdpdGggZW1haWwgY29tcGxhaW50cyBhYm91dAotICAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyLTAuMTwvY29tcHV0ZXJvdXRwdXQ+J3MgcGVyZm9ybWFuY2Ugb24KLSAgIHJlcGV0aXRpdmUgZGF0YSwgc28gcGVyaGFwcyBpdCBpc24ndCBhIHByb2JsZW0gZm9yIHJlYWwKLSAgIGlucHV0cy48L3BhcmE+Ci0KLSAgIDxwYXJhPlByb2JhYmx5IHRoZSBiZXN0IGxvbmctdGVybSBzb2x1dGlvbiwgYW5kIHRoZSBvbmUgSSBoYXZlCi0gICBpbmNvcnBvcmF0ZWQgaW50byAwLjkuNSBhbmQgYWJvdmUsIGlzIHRvIHVzZSB0aGUgZXhpc3RpbmcKLSAgIHNvcnRpbmcgYWxnb3JpdGhtIGluaXRpYWxseSwgYW5kIGZhbGwgYmFjayB0byBhIE8oTiAobG9nIE4pXjIpCi0gICBhbGdvcml0aG0gaWYgdGhlIHN0YW5kYXJkIGFsZ29yaXRobSBnZXRzIGludG8KLSAgIGRpZmZpY3VsdGllcy48L3BhcmE+PC9saXN0aXRlbT4KLQotICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGNvbXByZXNzZWQgZmlsZSBmb3JtYXQgd2FzIG5ldmVyIGRlc2lnbmVkIHRvIGJlCi0gICBoYW5kbGVkIGJ5IGEgbGlicmFyeSwgYW5kIEkgaGF2ZSBoYWQgdG8ganVtcCB0aG91Z2ggc29tZSBob29wcwotICAgdG8gcHJvZHVjZSBhbiBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2YgZGVjb21wcmVzc2lvbi4gIEl0J3MKLSAgIGEgYml0IGhhaXJ5LiAgVHJ5IHBhc3NpbmcKLSAgIDxjb21wdXRlcm91dHB1dD5kZWNvbXByZXNzLmM8L2NvbXB1dGVyb3V0cHV0PiB0aHJvdWdoIHRoZSBDCi0gICBwcmVwcm9jZXNzb3IgYW5kIHlvdSdsbCBzZWUgd2hhdCBJIG1lYW4uICBNdWNoIG9mIHRoaXMKLSAgIGNvbXBsZXhpdHkgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQgaWYgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZgotICAgZWFjaCBibG9jayBvZiBkYXRhIHdhcyByZWNvcmRlZCBpbiB0aGUgZGF0YSBzdHJlYW0uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+QW4gQWRsZXItMzIgY2hlY2tzdW0sIHJhdGhlciB0aGFuIGEgQ1JDMzIgY2hlY2tzdW0sCi0gICB3b3VsZCBiZSBmYXN0ZXIgdG8gY29tcHV0ZS48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTxwYXJhPkl0IHdvdWxkIGJlIGZhaXIgdG8gc2F5IHRoYXQgdGhlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBmb3JtYXQgd2FzIGZyb3plbiBiZWZvcmUgSQotcHJvcGVybHkgYW5kIGZ1bGx5IHVuZGVyc3Rvb2QgdGhlIHBlcmZvcm1hbmNlIGNvbnNlcXVlbmNlcyBvZgotZG9pbmcgc28uPC9wYXJhPgotCi08cGFyYT5JbXByb3ZlbWVudHMgd2hpY2ggSSB3YXMgYWJsZSB0byBpbmNvcnBvcmF0ZSBpbnRvIDAuOS4wLAotZGVzcGl0ZSB1c2luZyB0aGUgc2FtZSBmaWxlIGZvcm1hdCwgYXJlOjwvcGFyYT4KLQotPGl0ZW1pemVkbGlzdCBtYXJrPSdidWxsZXQnPgotCi0gPGxpc3RpdGVtPjxwYXJhPlNpbmdsZSBhcnJheSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW52ZXJzZSBCV1QuICBUaGlzCi0gIHNpZ25pZmljYW50bHkgc3BlZWRzIHVwIGRlY29tcHJlc3Npb24sIHByZXN1bWFibHkgYmVjYXVzZSBpdAotICByZWR1Y2VzIHRoZSBudW1iZXIgb2YgY2FjaGUgbWlzc2VzLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPkZhc3RlciBpbnZlcnNlIE1URiB0cmFuc2Zvcm0gZm9yIGxhcmdlIE1URiB2YWx1ZXMuCi0gIFRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIG5vdGlvbiBvZiBzbGlkaW5nIGJsb2NrcwotICBvZiB2YWx1ZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyLTAuOS4wPC9jb21wdXRlcm91dHB1dD4gbm93IHJlYWRzCi0gIGFuZCB3cml0ZXMgZmlsZXMgd2l0aCA8Y29tcHV0ZXJvdXRwdXQ+ZnJlYWQ8L2NvbXB1dGVyb3V0cHV0PgotICBhbmQgPGNvbXB1dGVyb3V0cHV0PmZ3cml0ZTwvY29tcHV0ZXJvdXRwdXQ+OyB2ZXJzaW9uIDAuMSB1c2VkCi0gIDxjb21wdXRlcm91dHB1dD5wdXRjPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gIDxjb21wdXRlcm91dHB1dD5nZXRjPC9jb21wdXRlcm91dHB1dD4uICBEdWghICBXZWxsLCB5b3UgbGl2ZQotICBhbmQgbGVhcm4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5GdXJ0aGVyIGFoZWFkLCBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZG8gcmFuZG9tCi1hY2Nlc3MgaW50byBmaWxlcy4gIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgY2FyZWZ1bCBkZXNpZ24gb2YKLWNvbXByZXNzZWQgZmlsZSBmb3JtYXRzLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InBvcnQtaXNzdWVzIiB4cmVmbGFiZWw9IlBvcnRhYmlsaXR5IGlzc3VlcyI+Ci08dGl0bGU+UG9ydGFiaWxpdHkgaXNzdWVzPC90aXRsZT4KLQotPHBhcmE+QWZ0ZXIgc29tZSBjb25zaWRlcmF0aW9uLCBJIGhhdmUgZGVjaWRlZCBub3QgdG8gdXNlIEdOVQotPGNvbXB1dGVyb3V0cHV0PmF1dG9jb25mPC9jb21wdXRlcm91dHB1dD4gdG8gY29uZmlndXJlIDAuOS41IG9yCi0xLjAuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YXV0b2NvbmY8L2NvbXB1dGVyb3V0cHV0PiwgYWRtaXJhYmxlIGFuZAotd29uZGVyZnVsIHRob3VnaCBpdCBpcywgbWFpbmx5IGFzc2lzdHMgd2l0aCBwb3J0YWJpbGl0eSBwcm9ibGVtcwotYmV0d2VlbiBVbml4LWxpa2UgcGxhdGZvcm1zLiAgQnV0Ci08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkb2Vzbid0IGhhdmUgbXVjaCBpbiB0aGUKLXdheSBvZiBwb3J0YWJpbGl0eSBwcm9ibGVtcyBvbiBVbml4OyBtb3N0IG9mIHRoZSBkaWZmaWN1bHRpZXMKLWFwcGVhciB3aGVuIHBvcnRpbmcgdG8gdGhlIE1hYywgb3IgdG8gTWljcm9zb2Z0J3Mgb3BlcmF0aW5nCi1zeXN0ZW1zLiAgPGNvbXB1dGVyb3V0cHV0PmF1dG9jb25mPC9jb21wdXRlcm91dHB1dD4gZG9lc24ndCBoZWxwCi1pbiB0aG9zZSBjYXNlcywgYW5kIGJyaW5ncyBpbiBhIHdob2xlIGxvYWQgb2YgbmV3Ci1jb21wbGV4aXR5LjwvcGFyYT4KLQotPHBhcmE+TW9zdCBwZW9wbGUgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgbGlicmFyeSBhbmQKLXByb2dyYW0gdW5kZXIgVW5peCBzdHJhaWdodCBvdXQtb2YtdGhlLWJveCwgc28gdG8gc3BlYWssCi1lc3BlY2lhbGx5IGlmIHlvdSBoYXZlIGEgdmVyc2lvbiBvZiBHTlUgQyBhdmFpbGFibGUuPC9wYXJhPgotCi08cGFyYT5UaGVyZSBhcmUgYSBjb3VwbGUgb2YKLTxjb21wdXRlcm91dHB1dD5fX2lubGluZV9fPC9jb21wdXRlcm91dHB1dD4gZGlyZWN0aXZlcyBpbiB0aGUKLWNvZGUuICBHTlUgQyAoPGNvbXB1dGVyb3V0cHV0PmdjYzwvY29tcHV0ZXJvdXRwdXQ+KSBzaG91bGQgYmUKLWFibGUgdG8gaGFuZGxlIHRoZW0uICBJZiB5b3UncmUgbm90IHVzaW5nIEdOVSBDLCB5b3VyIEMgY29tcGlsZXIKLXNob3VsZG4ndCBzZWUgdGhlbSBhdCBhbGwuICBJZiB5b3VyIGNvbXBpbGVyIGRvZXMsIGZvciBzb21lCi1yZWFzb24sIHNlZSB0aGVtIGFuZCBkb2Vzbid0IGxpa2UgdGhlbSwganVzdAotPGNvbXB1dGVyb3V0cHV0PiNkZWZpbmU8L2NvbXB1dGVyb3V0cHV0PgotPGNvbXB1dGVyb3V0cHV0Pl9faW5saW5lX188L2NvbXB1dGVyb3V0cHV0PiB0byBiZQotPGNvbXB1dGVyb3V0cHV0Pi8qICovPC9jb21wdXRlcm91dHB1dD4uICBPbmUgZWFzeSB3YXkgdG8gZG8gdGhpcwotaXMgdG8gY29tcGlsZSB3aXRoIHRoZSBmbGFnCi08Y29tcHV0ZXJvdXRwdXQ+LURfX2lubGluZV9fPTwvY29tcHV0ZXJvdXRwdXQ+LCB3aGljaCBzaG91bGQgYmUKLXVuZGVyc3Rvb2QgYnkgbW9zdCBVbml4IGNvbXBpbGVycy48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBzdGlsbCBoYXZlIGRpZmZpY3VsdGllcywgdHJ5IGNvbXBpbGluZyB3aXRoIHRoZQotbWFjcm8gPGNvbXB1dGVyb3V0cHV0PkJaX1NUUklDVF9BTlNJPC9jb21wdXRlcm91dHB1dD4gZGVmaW5lZC4KLVRoaXMgc2hvdWxkIGVuYWJsZSB5b3UgdG8gYnVpbGQgdGhlIGxpYnJhcnkgaW4gYSBzdHJpY3RseSBBTlNJCi1jb21wbGlhbnQgZW52aXJvbm1lbnQuICBCdWlsZGluZyB0aGUgcHJvZ3JhbSBpdHNlbGYgbGlrZSB0aGlzIGlzCi1kYW5nZXJvdXMgYW5kIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIHlvdSByZW1vdmUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+J3MgY2hlY2tzIGFnYWluc3QKLWNvbXByZXNzaW5nIGRpcmVjdG9yaWVzLCBzeW1ib2xpYyBsaW5rcywgZGV2aWNlcywgYW5kIG90aGVyCi1ub3QtcmVhbGx5LWEtZmlsZSBlbnRpdGllcy4gIFRoaXMgY291bGQgY2F1c2UgZmlsZXN5c3RlbQotY29ycnVwdGlvbiE8L3BhcmE+Ci0KLTxwYXJhPk9uZSBvdGhlciB0aGluZzogaWYgeW91IGNyZWF0ZSBhCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBiaW5hcnkgZm9yIHB1YmxpYyBkaXN0cmlidXRpb24sCi1wbGVhc2UgY29uc2lkZXIgbGlua2luZyBpdCBzdGF0aWNhbGx5ICg8Y29tcHV0ZXJvdXRwdXQ+Z2NjCi0tc3RhdGljPC9jb21wdXRlcm91dHB1dD4pLiAgVGhpcyBhdm9pZHMgYWxsIHNvcnRzIG9mIGxpYnJhcnktdmVyc2lvbgotaXNzdWVzIHRoYXQgb3RoZXJzIG1heSBlbmNvdW50ZXIgbGF0ZXIgb24uPC9wYXJhPgotCi08cGFyYT5JZiB5b3UgYnVpbGQgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gb24KLVdpbjMyLCB5b3UgbXVzdCBzZXQgPGNvbXB1dGVyb3V0cHV0PkJaX1VOSVg8L2NvbXB1dGVyb3V0cHV0PiB0byAwCi1hbmQgPGNvbXB1dGVyb3V0cHV0PkJaX0xDQ1dJTjMyPC9jb21wdXRlcm91dHB1dD4gdG8gMSwgaW4gdGhlCi1maWxlIDxjb21wdXRlcm91dHB1dD5iemlwMi5jPC9jb21wdXRlcm91dHB1dD4sIGJlZm9yZSBjb21waWxpbmcuCi1PdGhlcndpc2UgdGhlIHJlc3VsdGluZyBiaW5hcnkgd29uJ3Qgd29yayBjb3JyZWN0bHkuPC9wYXJhPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0iYnVncyIgeHJlZmxhYmVsPSJSZXBvcnRpbmcgYnVncyI+Ci08dGl0bGU+UmVwb3J0aW5nIGJ1Z3M8L3RpdGxlPgotCi08cGFyYT5JIHRyaWVkIHByZXR0eSBoYXJkIHRvIG1ha2Ugc3VyZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gaXMgYnVnIGZyZWUsIGJvdGggYnkKLWRlc2lnbiBhbmQgYnkgdGVzdGluZy4gIEhvcGVmdWxseSB5b3UnbGwgbmV2ZXIgbmVlZCB0byByZWFkIHRoaXMKLXNlY3Rpb24gZm9yIHJlYWwuPC9wYXJhPgotCi08cGFyYT5OZXZlcnRoZWxlc3MsIGlmIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGRpZXMKLXdpdGggYSBzZWdtZW50YXRpb24gZmF1bHQsIGEgYnVzIGVycm9yIG9yIGFuIGludGVybmFsIGFzc2VydGlvbgotZmFpbHVyZSwgaXQgd2lsbCBhc2sgeW91IHRvIGVtYWlsIG1lIGEgYnVnIHJlcG9ydC4gIEV4cGVyaWVuY2UgZnJvbQoteWVhcnMgb2YgZmVlZGJhY2sgb2YgYnppcDIgdXNlcnMgaW5kaWNhdGVzIHRoYXQgYWxtb3N0IGFsbCB0aGVzZQotcHJvYmxlbXMgY2FuIGJlIHRyYWNlZCB0byBlaXRoZXIgY29tcGlsZXIgYnVncyBvciBoYXJkd2FyZQotcHJvYmxlbXMuPC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+UmVjb21waWxlIHRoZSBwcm9ncmFtIHdpdGggbm8gb3B0aW1pc2F0aW9uLCBhbmQKLSAgc2VlIGlmIGl0IHdvcmtzLiAgQW5kL29yIHRyeSBhIGRpZmZlcmVudCBjb21waWxlci4gIEkgaGVhcmQgYWxsCi0gIHNvcnRzIG9mIHN0b3JpZXMgYWJvdXQgdmFyaW91cyBmbGF2b3VycyBvZiBHTlUgQyAoYW5kIG90aGVyCi0gIGNvbXBpbGVycykgZ2VuZXJhdGluZyBiYWQgY29kZSBmb3IKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4sIGFuZCBJJ3ZlIHJ1biBhY3Jvc3MgdHdvCi0gIHN1Y2ggZXhhbXBsZXMgbXlzZWxmLjwvcGFyYT4KLQotICA8cGFyYT4yLjcuWCB2ZXJzaW9ucyBvZiBHTlUgQyBhcmUga25vd24gdG8gZ2VuZXJhdGUgYmFkIGNvZGUKLSAgZnJvbSB0aW1lIHRvIHRpbWUsIGF0IGhpZ2ggb3B0aW1pc2F0aW9uIGxldmVscy4gIElmIHlvdSBnZXQKLSAgcHJvYmxlbXMsIHRyeSB1c2luZyB0aGUgZmxhZ3MKLSAgPGNvbXB1dGVyb3V0cHV0Pi1PMjwvY29tcHV0ZXJvdXRwdXQ+Ci0gIDxjb21wdXRlcm91dHB1dD4tZm9taXQtZnJhbWUtcG9pbnRlcjwvY29tcHV0ZXJvdXRwdXQ+Ci0gIDxjb21wdXRlcm91dHB1dD4tZm5vLXN0cmVuZ3RoLXJlZHVjZTwvY29tcHV0ZXJvdXRwdXQ+LiAgWW91Ci0gIHNob3VsZCBzcGVjaWZpY2FsbHkgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IHVzZQotICA8Y29tcHV0ZXJvdXRwdXQ+LWZ1bnJvbGwtbG9vcHM8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLSAgPHBhcmE+WW91IG1heSBub3RpY2UgdGhhdCB0aGUgTWFrZWZpbGUgcnVucyBzaXggdGVzdHMgYXMgcGFydAotICBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4gIElmIHRoZSBwcm9ncmFtIHBhc3NlcyBhbGwgb2YgdGhlc2UsIGl0J3MKLSAgYSBwcmV0dHkgZ29vZCAoYnV0IG5vdCAxMDAlKSBpbmRpY2F0aW9uIHRoYXQgdGhlIGNvbXBpbGVyIGhhcwotICBkb25lIGl0cyBqb2IgY29ycmVjdGx5LjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPklmIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+Ci0gIGNyYXNoZXMgcmFuZG9tbHksIGFuZCB0aGUgY3Jhc2hlcyBhcmUgbm90IHJlcGVhdGFibGUsIHlvdSBtYXkKLSAgaGF2ZSBhIGZsYWt5IG1lbW9yeSBzdWJzeXN0ZW0uCi0gIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHJlYWxseSBoYW1tZXJzIHlvdXIKLSAgbWVtb3J5IGhpZXJhcmNoeSwgYW5kIGlmIGl0J3MgYSBiaXQgbWFyZ2luYWwsIHlvdSBtYXkgZ2V0IHRoZXNlCi0gIHByb2JsZW1zLiAgRGl0dG8gaWYgeW91ciBkaXNrIG9yIEkvTyBzdWJzeXN0ZW0gaXMgc2xvd2x5Ci0gIGZhaWxpbmcuICBZdXAsIHRoaXMgcmVhbGx5IGRvZXMgaGFwcGVuLjwvcGFyYT4KLQotICA8cGFyYT5UcnkgdXNpbmcgYSBkaWZmZXJlbnQgbWFjaGluZSBvZiB0aGUgc2FtZSB0eXBlLCBhbmQgc2VlCi0gIGlmIHlvdSBjYW4gcmVwZWF0IHRoZSBwcm9ibGVtLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gIDxsaXN0aXRlbT48cGFyYT5UaGlzIGlzbid0IHJlYWxseSBhIGJ1ZywgYnV0IC4uLiBJZgotICA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB0ZWxscyB5b3UgeW91ciBmaWxlIGlzCi0gIGNvcnJ1cHRlZCBvbiBkZWNvbXByZXNzaW9uLCBhbmQgeW91IG9idGFpbmVkIHRoZSBmaWxlIHZpYSBGVFAsCi0gIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB5b3UgZm9yZ290IHRvIHRlbGwgRlRQIHRvIGRvIGEKLSAgYmluYXJ5IG1vZGUgdHJhbnNmZXIuICBUaGF0IGFic29sdXRlbHkgd2lsbCBjYXVzZSB0aGUgZmlsZSB0bwotICBiZSBub24tZGVjb21wcmVzc2libGUuICBZb3UnbGwgaGF2ZSB0byB0cmFuc2ZlciBpdAotICBhZ2Fpbi48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTxwYXJhPklmIHlvdSd2ZSBpbmNvcnBvcmF0ZWQKLTxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGludG8geW91ciBvd24gcHJvZ3JhbQotYW5kIGFyZSBnZXR0aW5nIHByb2JsZW1zLCBwbGVhc2UsIHBsZWFzZSwgcGxlYXNlLCBjaGVjayB0aGF0IHRoZQotcGFyYW1ldGVycyB5b3UgYXJlIHBhc3NpbmcgaW4gY2FsbHMgdG8gdGhlIGxpYnJhcnksIGFyZSBjb3JyZWN0LAotYW5kIGluIGFjY29yZGFuY2Ugd2l0aCB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXMgYWxsb3dhYmxlLgotSSBoYXZlIHRyaWVkIHRvIG1ha2UgdGhlIGxpYnJhcnkgcm9idXN0IGFnYWluc3Qgc3VjaCBwcm9ibGVtcywKLWJ1dCBJJ20gc3VyZSBJIGhhdmVuJ3Qgc3VjY2VlZGVkLjwvcGFyYT4KLQotPHBhcmE+RmluYWxseSwgaWYgdGhlIGFib3ZlIGNvbW1lbnRzIGRvbid0IGhlbHAsIHlvdSdsbCBoYXZlIHRvCi1zZW5kIG1lIGEgYnVnIHJlcG9ydC4gIE5vdywgaXQncyBqdXN0IGFtYXppbmcgaG93IG1hbnkgcGVvcGxlCi13aWxsIHNlbmQgbWUgYSBidWcgcmVwb3J0IHNheWluZyBzb21ldGhpbmcgbGlrZTo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWJ6aXAyIGNyYXNoZWQgd2l0aCBzZWdtZW50YXRpb24gZmF1bHQgb24gbXkgbWFjaGluZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+YW5kIGFic29sdXRlbHkgbm90aGluZyBlbHNlLiAgTmVlZGxlc3MgdG8gc2F5LCBhIHN1Y2ggYQotcmVwb3J0IGlzIDxlbXBoYXNpcz50b3RhbGx5LCB1dHRlcmx5LCBjb21wbGV0ZWx5IGFuZAotY29tcHJlaGVuc2l2ZWx5IDEwMCUgdXNlbGVzczsgYSB3YXN0ZSBvZiB5b3VyIHRpbWUsIG15IHRpbWUsIGFuZAotbmV0IGJhbmR3aWR0aDwvZW1waGFzaXM+LiAgV2l0aCBubyBkZXRhaWxzIGF0IGFsbCwgdGhlcmUncyBubyB3YXkKLUkgY2FuIHBvc3NpYmx5IGJlZ2luIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcHJvYmxlbSBpcy48L3BhcmE+Ci0KLTxwYXJhPlRoZSBydWxlcyBvZiB0aGUgZ2FtZSBhcmU6IGZhY3RzLCBmYWN0cywgZmFjdHMuICBEb24ndCBvbWl0Ci10aGVtIGJlY2F1c2UgIm9oLCB0aGV5IHdvbid0IGJlIHJlbGV2YW50Ii4gIEF0IHRoZSBiYXJlCi1taW5pbXVtOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotTWFjaGluZSB0eXBlLiAgT3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uLiAgCi1FeGFjdCB2ZXJzaW9uIG9mIGJ6aXAyIChkbyBiemlwMiAtVikuICAKLUV4YWN0IHZlcnNpb24gb2YgdGhlIGNvbXBpbGVyIHVzZWQuICAKLUZsYWdzIHBhc3NlZCB0byB0aGUgY29tcGlsZXIuCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Ib3dldmVyLCB0aGUgbW9zdCBpbXBvcnRhbnQgc2luZ2xlIHRoaW5nIHRoYXQgd2lsbCBoZWxwIG1lCi1pcyB0aGUgZmlsZSB0aGF0IHlvdSB3ZXJlIHRyeWluZyB0byBjb21wcmVzcyBvciBkZWNvbXByZXNzIGF0IHRoZQotdGltZSB0aGUgcHJvYmxlbSBoYXBwZW5lZC4gIFdpdGhvdXQgdGhhdCwgbXkgYWJpbGl0eSB0byBkbwotYW55dGhpbmcgbW9yZSB0aGFuIHNwZWN1bGF0ZSBhYm91dCB0aGUgY2F1c2UsIGlzIGxpbWl0ZWQuPC9wYXJhPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0icGFja2FnZSIgeHJlZmxhYmVsPSJEaWQgeW91IGdldCB0aGUgcmlnaHQgcGFja2FnZT8iPgotPHRpdGxlPkRpZCB5b3UgZ2V0IHRoZSByaWdodCBwYWNrYWdlPzwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEgcmVzb3VyY2UgaG9nLgotSXQgc29ha3MgdXAgbGFyZ2UgYW1vdW50cyBvZiBDUFUgY3ljbGVzIGFuZCBtZW1vcnkuICBBbHNvLCBpdAotZ2l2ZXMgdmVyeSBsYXJnZSBsYXRlbmNpZXMuICBJbiB0aGUgd29yc3QgY2FzZSwgeW91IGNhbiBmZWVkIG1hbnkKLW1lZ2FieXRlcyBvZiB1bmNvbXByZXNzZWQgZGF0YSBpbnRvIHRoZSBsaWJyYXJ5IGJlZm9yZSBnZXR0aW5nCi1hbnkgY29tcHJlc3NlZCBvdXRwdXQsIHNvIHRoaXMgcHJvYmFibHkgcnVsZXMgb3V0IGFwcGxpY2F0aW9ucwotcmVxdWlyaW5nIGludGVyYWN0aXZlIGJlaGF2aW91ci48L3BhcmE+Ci0KLTxwYXJhPlRoZXNlIGFyZW4ndCBmYXVsdHMgb2YgbXkgaW1wbGVtZW50YXRpb24sIEkgaG9wZSwgYnV0IG1vcmUKLWFuIGludHJpbnNpYyBwcm9wZXJ0eSBvZiB0aGUgQnVycm93cy1XaGVlbGVyIHRyYW5zZm9ybQotKHVuZm9ydHVuYXRlbHkpLiAgTWF5YmUgdGhpcyBpc24ndCB3aGF0IHlvdSB3YW50LjwvcGFyYT4KLQotPHBhcmE+SWYgeW91IHdhbnQgYSBjb21wcmVzc29yIGFuZC9vciBsaWJyYXJ5IHdoaWNoIGlzIGZhc3RlciwKLXVzZXMgbGVzcyBtZW1vcnkgYnV0IGdldHMgcHJldHR5IGdvb2QgY29tcHJlc3Npb24sIGFuZCBoYXMKLW1pbmltYWwgbGF0ZW5jeSwgY29uc2lkZXIgSmVhbi1sb3VwIEdhaWxseSdzIGFuZCBNYXJrIEFkbGVyJ3MKLXdvcmssIDxjb21wdXRlcm91dHB1dD56bGliLTEuMi4xPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+Z3ppcC0xLjIuNDwvY29tcHV0ZXJvdXRwdXQ+LiAgTG9vayBmb3IgdGhlbSBhdCAKLTx1bGluayB1cmw9Imh0dHA6Ly93d3cuemxpYi5vcmciPmh0dHA6Ly93d3cuemxpYi5vcmc8L3VsaW5rPiBhbmQgCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3Lmd6aXAub3JnIj5odHRwOi8vd3d3Lmd6aXAub3JnPC91bGluaz4KLXJlc3BlY3RpdmVseS48L3BhcmE+Ci0KLTxwYXJhPkZvciBzb21ldGhpbmcgZmFzdGVyIGFuZCBsaWdodGVyIHN0aWxsLCB5b3UgbWlnaHQgdHJ5IE1hcmt1cyBGCi1YIEogT2Jlcmh1bWVyJ3MgPGNvbXB1dGVyb3V0cHV0PkxaTzwvY29tcHV0ZXJvdXRwdXQ+IHJlYWwtdGltZQotY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsaWJyYXJ5LCBhdCAKLTx1bGluayB1cmw9Imh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlIj5odHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZTwvdWxpbms+LjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi0KLTxzZWN0MSBpZD0icmVhZGluZyIgeHJlZmxhYmVsPSJGdXJ0aGVyIFJlYWRpbmciPgotPHRpdGxlPkZ1cnRoZXIgUmVhZGluZzwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGlzIG5vdCByZXNlYXJjaAotd29yaywgaW4gdGhlIHNlbnNlIHRoYXQgaXQgZG9lc24ndCBwcmVzZW50IGFueSBuZXcgaWRlYXMuCi1SYXRoZXIsIGl0J3MgYW4gZW5naW5lZXJpbmcgZXhlcmNpc2UgYmFzZWQgb24gZXhpc3RpbmcKLWlkZWFzLjwvcGFyYT4KLQotPHBhcmE+Rm91ciBkb2N1bWVudHMgZGVzY3JpYmUgZXNzZW50aWFsbHkgYWxsIHRoZSBpZGVhcyBiZWhpbmQKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+OjwvcGFyYT4KLQotPGxpdGVyYWxsYXlvdXQ+TWljaGFlbCBCdXJyb3dzIGFuZCBELiBKLiBXaGVlbGVyOgotICAiQSBibG9jay1zb3J0aW5nIGxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gYWxnb3JpdGhtIgotICAgMTB0aCBNYXkgMTk5NC4gCi0gICBEaWdpdGFsIFNSQyBSZXNlYXJjaCBSZXBvcnQgMTI0LgotICAgZnRwOi8vZnRwLmRpZ2l0YWwuY29tL3B1Yi9ERUMvU1JDL3Jlc2VhcmNoLXJlcG9ydHMvU1JDLTEyNC5wcy5negotICAgSWYgeW91IGhhdmUgdHJvdWJsZSBmaW5kaW5nIGl0LCB0cnkgc2VhcmNoaW5nIGF0IHRoZQotICAgTmV3IFplYWxhbmQgRGlnaXRhbCBMaWJyYXJ5LCBodHRwOi8vd3d3Lm56ZGwub3JnLgotCi1EYW5pZWwgUy4gSGlyc2NoYmVyZyBhbmQgRGVicmEgQS4gTGVMZXdlcgotICAiRWZmaWNpZW50IERlY29kaW5nIG9mIFByZWZpeCBDb2RlcyIKLSAgIENvbW11bmljYXRpb25zIG9mIHRoZSBBQ00sIEFwcmlsIDE5OTAsIFZvbCAzMywgTnVtYmVyIDQuCi0gICBZb3UgbWlnaHQgYmUgYWJsZSB0byBnZXQgYW4gZWxlY3Ryb25pYyBjb3B5IG9mIHRoaXMKLSAgIGZyb20gdGhlIEFDTSBEaWdpdGFsIExpYnJhcnkuCi0KLURhdmlkIEouIFdoZWVsZXIKLSAgIFByb2dyYW0gYnJlZDMuYyBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50IGJyZWQzLnBzLgotICAgVGhpcyBjb250YWlucyB0aGUgaWRlYSBiZWhpbmQgdGhlIG11bHRpLXRhYmxlIEh1ZmZtYW4gY29kaW5nIHNjaGVtZS4KLSAgIGZ0cDovL2Z0cC5jbC5jYW0uYWMudWsvdXNlcnMvZGp3My8KLQotSm9uIEwuIEJlbnRsZXkgYW5kIFJvYmVydCBTZWRnZXdpY2sKLSAgIkZhc3QgQWxnb3JpdGhtcyBmb3IgU29ydGluZyBhbmQgU2VhcmNoaW5nIFN0cmluZ3MiCi0gICBBdmFpbGFibGUgZnJvbSBTZWRnZXdpY2sncyB3ZWIgcGFnZSwKLSAgIHd3dy5jcy5wcmluY2V0b24uZWR1L35ycwotPC9saXRlcmFsbGF5b3V0PgotCi08cGFyYT5UaGUgZm9sbG93aW5nIHBhcGVyIGdpdmVzIHZhbHVhYmxlIGFkZGl0aW9uYWwgaW5zaWdodHMgaW50bwotdGhlIGFsZ29yaXRobSwgYnV0IGlzIG5vdCBpbW1lZGlhdGVseSB0aGUgYmFzaXMgb2YgYW55IGNvZGUgdXNlZAotaW4gYnppcDIuPC9wYXJhPgotCi08bGl0ZXJhbGxheW91dD5QZXRlciBGZW53aWNrOgotICAgQmxvY2sgU29ydGluZyBUZXh0IENvbXByZXNzaW9uCi0gICBQcm9jZWVkaW5ncyBvZiB0aGUgMTl0aCBBdXN0cmFsYXNpYW4gQ29tcHV0ZXIgU2NpZW5jZSBDb25mZXJlbmNlLAotICAgICBNZWxib3VybmUsIEF1c3RyYWxpYS4gIEphbiAzMSAtIEZlYiAyLCAxOTk2LgotICAgZnRwOi8vZnRwLmNzLmF1Y2tsYW5kLmFjLm56L3B1Yi9wZXRlci1mL0FDU0M5NnBhcGVyLnBzPC9saXRlcmFsbGF5b3V0PgotCi08cGFyYT5LdW5paGlrbyBTYWRha2FuZSdzIHNvcnRpbmcgYWxnb3JpdGhtLCBtZW50aW9uZWQgYWJvdmUsIGlzCi1hdmFpbGFibGUgZnJvbTo8L3BhcmE+Ci0KLTxsaXRlcmFsbGF5b3V0Pmh0dHA6Ly9uYW9taS5pcy5zLnUtdG9reW8uYWMuanAvfnNhZGEvcGFwZXJzL1NhZGE5OGIucHMuZ3oKLTwvbGl0ZXJhbGxheW91dD4KLQotPHBhcmE+VGhlIE1hbmJlci1NeWVycyBzdWZmaXggYXJyYXkgY29uc3RydWN0aW9uIGFsZ29yaXRobSBpcwotZGVzY3JpYmVkIGluIGEgcGFwZXIgYXZhaWxhYmxlIGZyb206PC9wYXJhPgotCi08bGl0ZXJhbGxheW91dD5odHRwOi8vd3d3LmNzLmFyaXpvbmEuZWR1L3Blb3BsZS9nZW5lL1BBUEVSUy9zdWZmaXgucHMKLTwvbGl0ZXJhbGxheW91dD4KLQotPHBhcmE+RmluYWxseSwgdGhlIGZvbGxvd2luZyBwYXBlcnMgZG9jdW1lbnQgc29tZQotaW52ZXN0aWdhdGlvbnMgSSBtYWRlIGludG8gdGhlIHBlcmZvcm1hbmNlIG9mIHNvcnRpbmcKLWFuZCBkZWNvbXByZXNzaW9uIGFsZ29yaXRobXM6PC9wYXJhPgotCi08bGl0ZXJhbGxheW91dD5KdWxpYW4gU2V3YXJkCi0gICBPbiB0aGUgUGVyZm9ybWFuY2Ugb2YgQldUIFNvcnRpbmcgQWxnb3JpdGhtcwotICAgUHJvY2VlZGluZ3Mgb2YgdGhlIElFRUUgRGF0YSBDb21wcmVzc2lvbiBDb25mZXJlbmNlIDIwMDAKLSAgICAgU25vd2JpcmQsIFV0YWguICAyOC0zMCBNYXJjaCAyMDAwLgotCi1KdWxpYW4gU2V3YXJkCi0gICBTcGFjZS10aW1lIFRyYWRlb2ZmcyBpbiB0aGUgSW52ZXJzZSBCLVcgVHJhbnNmb3JtCi0gICBQcm9jZWVkaW5ncyBvZiB0aGUgSUVFRSBEYXRhIENvbXByZXNzaW9uIENvbmZlcmVuY2UgMjAwMQotICAgICBTbm93YmlyZCwgVXRhaC4gIDI3LTI5IE1hcmNoIDIwMDEuCi08L2xpdGVyYWxsYXlvdXQ+Ci0KLTwvc2VjdDE+Ci0KLTwvY2hhcHRlcj4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvbWsyNTEuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL21rMjUxLmMKaW5kZXggMzllOTRjMC4uNmM1YmJmOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWsyNTEuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9tazI1MS5jCkBAIC05LDggKzksOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvcmFuZHRhYmxlLmMgYi9VdGlsaXRpZXMvY21iemlwMi9yYW5kdGFibGUuYwppbmRleCAwNjhiNzYzLi5iZGM2ZDRhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9yYW5kdGFibGUuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9yYW5kdGFibGUuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEucmIyIGIvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS5yYjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZGRhMzYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS5yYjIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnJlZiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEucmVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzg2OWVlLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEucmVmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS50c3QgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnRzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM4NjllZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnRzdAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIucmIyIGIvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi5yYjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNTQyOTcuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi5yYjIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnJlZiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIucmVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGU1YjU4Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIucmVmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi50c3QgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnRzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlNWI1OC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnRzdAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMucmIyIGIvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMy5yYjIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOWIwOGMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMy5yYjIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnJlZiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMucmVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzVhMmY2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMucmVmCisrKyAvZGV2L251bGwKQEAgLTEsMzAwMDcgKzAsMCBAQAotVGhpcyBmaWxlIGlzIGV4Y2VlZGluZ2x5IGJvcmluZy4gIElmIHlvdSBmaW5kIHlvdXJzZWxmCi1yZWFkaW5nIGl0LCBwbGVhc2UgKDEpIHRha2UgaXQgZnJvbSBtZSB0aGF0IHlvdSBjYW4gc2FmZWx5Ci1ndWVzcyB3aGF0IHRoZSByZXN0IG9mIHRoZSBmaWxlIHNheXMsIGFuZCAoMikgc2VlayBwcm9mZXNzaW9uYWwKLWhlbHAuCi0KLXBzLiAgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgc2FyY2FzdGljIHJlbWFya3MgaW4gdGhpcyBmaWxlLgotCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnRzdCBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMudHN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzVhMmY2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMudHN0CisrKyAvZGV2L251bGwKQEAgLTEsMzAwMDcgKzAsMCBAQAotVGhpcyBmaWxlIGlzIGV4Y2VlZGluZ2x5IGJvcmluZy4gIElmIHlvdSBmaW5kIHlvdXJzZWxmCi1yZWFkaW5nIGl0LCBwbGVhc2UgKDEpIHRha2UgaXQgZnJvbSBtZSB0aGF0IHlvdSBjYW4gc2FmZWx5Ci1ndWVzcyB3aGF0IHRoZSByZXN0IG9mIHRoZSBmaWxlIHNheXMsIGFuZCAoMikgc2VlayBwcm9mZXNzaW9uYWwKLWhlbHAuCi0KLXBzLiAgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgc2FyY2FzdGljIHJlbWFya3MgaW4gdGhpcyBmaWxlLgotCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zcGV3Ry5jIGIvVXRpbGl0aWVzL2NtYnppcDIvc3Bld0cuYwppbmRleCA3YmQxMjg0Li42NWQyNGM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zcGV3Ry5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL3NwZXdHLmMKQEAgLTEzLDE1ICsxMywxNSBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgogCiAgICBUaGlzIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5lZAogICAgaW4gdGhlIGZpbGUgTElDRU5TRS4KLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAKICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3VuemNyYXNoLmMgYi9VdGlsaXRpZXMvY21iemlwMi91bnpjcmFzaC5jCmluZGV4IGExYjc1NDYuLmM2OGY5M2MgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3VuemNyYXNoLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvdW56Y3Jhc2guYwpAQCAtMTcsOCArMTcsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMwIGIvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmY0NDJhLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotCi1JZiBjb21waWxhdGlvbiBwcm9kdWNlcyBlcnJvcnMsIG9yIGEgbGFyZ2UgbnVtYmVyIG9mIHdhcm5pbmdzLAotcGxlYXNlIHJlYWQgUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TIC0tIHlvdSBtaWdodCBiZSBhYmxlIHRvCi1hZGp1c3QgdGhlIGZsYWdzIGluIHRoaXMgTWFrZWZpbGUgdG8gaW1wcm92ZSBtYXR0ZXJzLgotCi1BbHNvIGluIFJFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUyBhcmUgc29tZSBoaW50cyB0aGF0IG1heSBoZWxwCi1pZiB5b3VyIGJ1aWxkIHByb2R1Y2VzIGFuIGV4ZWN1dGFibGUgd2hpY2ggaXMgdW5hYmxlIHRvIGNvcnJlY3RseQotaGFuZGxlIHNvLWNhbGxlZCAnbGFyZ2UgZmlsZXMnIC0tIGZpbGVzIG9mIHNpemUgMkdCIG9yIG1vcmUuCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMSBiL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4M2RlOS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczEKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotRG9pbmcgNiB0ZXN0cyAoMyBjb21wcmVzcywgMyB1bmNvbXByZXNzKSAuLi4KLUlmIHRoZXJlJ3MgYSBwcm9ibGVtLCB0aGluZ3MgbWlnaHQgc3RvcCBhdCB0aGlzIHBvaW50LgotIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMyIGIvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWRkY2Y0Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotCi1DaGVja2luZyB0ZXN0IHJlc3VsdHMuICBJZiBhbnkgb2YgdGhlIGZvdXIgImNtcCJzIHdoaWNoIGZvbGxvdwotcmVwb3J0IGFueSBkaWZmZXJlbmNlcywgc29tZXRoaW5nIGlzIHdyb25nLiAgSWYgeW91IGNhbid0IGVhc2lseQotZmlndXJlIG91dCB3aGF0LCBwbGVhc2UgbGV0IG1lIGtub3cgKGpzZXdhcmRAYnppcC5vcmcpLgotCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczMgYi9VdGlsaXRpZXMvY21iemlwMi93b3JkczMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NzI2NjkuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotCi1JZiB5b3UgZ290IHRoaXMgZmFyIGFuZCB0aGUgJ2NtcCdzIGRpZG4ndCBjb21wbGFpbiwgaXQgbG9va3MKLWxpa2UgeW91J3JlIGluIGJ1c2luZXNzLiAgCi0KLVRvIGluc3RhbGwgaW4gL3Vzci9sb2NhbC9iaW4sIC91c3IvbG9jYWwvbGliLCAvdXNyL2xvY2FsL21hbiBhbmQgCi0vdXNyL2xvY2FsL2luY2x1ZGUsIHR5cGUKLQotICAgbWFrZSBpbnN0YWxsCi0KLVRvIGluc3RhbGwgc29tZXdoZXJlIGVsc2UsIGVnLCAveHh4L3l5eS97YmluLGxpYixtYW4saW5jbHVkZX0sIHR5cGUgCi0KLSAgIG1ha2UgaW5zdGFsbCBQUkVGSVg9L3h4eC95eXkKLQotSWYgeW91IGFyZSAoanVzdGlmaWFibHkpIHBhcmFub2lkIGFuZCB3YW50IHRvIHNlZSB3aGF0ICdtYWtlIGluc3RhbGwnCi1pcyBnb2luZyB0byBkbywgeW91IGNhbiBmaXJzdCBkbwotCi0gICBtYWtlIC1uIGluc3RhbGwgICAgICAgICAgICAgICAgICAgICAgb3IKLSAgIG1ha2UgLW4gaW5zdGFsbCBQUkVGSVg9L3h4eC95eXkgICAgICByZXNwZWN0aXZlbHkuCi0KLVRoZSAtbiBpbnN0cnVjdHMgbWFrZSB0byBzaG93IHRoZSBjb21tYW5kcyBpdCB3b3VsZCBleGVjdXRlLCBidXQKLW5vdCBhY3R1YWxseSBleGVjdXRlIHRoZW0uCi0KLUluc3RydWN0aW9ucyBmb3IgdXNlIGFyZSBpbiB0aGUgcHJlZm9ybWF0dGVkIG1hbnVhbCBwYWdlLCBpbiB0aGUgZmlsZQotYnppcDIudHh0LiAgRm9yIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiwgcmVhZCB0aGUgZnVsbCBtYW51YWwuICAKLUl0IGlzIGF2YWlsYWJsZSBpbiBQb3N0c2NyaXB0IGZvcm0gKG1hbnVhbC5wcyksIFBERiBmb3JtIChtYW51YWwucGRmKSwKLWFuZCBIVE1MIGZvcm0gKG1hbnVhbC5odG1sKS4KLQotWW91IGNhbiBhbHNvIGRvICJiemlwMiAtLWhlbHAiIHRvIHNlZSBzb21lIGhlbHBmdWwgaW5mb3JtYXRpb24uIAotImJ6aXAyIC1MIiBkaXNwbGF5cyB0aGUgc29mdHdhcmUgbGljZW5zZS4KLQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIveG1scHJvYy5zaCBiL1V0aWxpdGllcy9jbWJ6aXAyL3htbHByb2Muc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDUzODQxNzcuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIveG1scHJvYy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBzZWUgdGhlIFJFQURNRSBmaWxlIGZvciB1c2FnZSBldGMuCi0jCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKLSMgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCi0jCi0jICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSMgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+Ci0jCi0jICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCi0jICBSRUFETUUgZmlsZS4KLSMKLSMgIFRoaXMgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgY29udGFpbmVkCi0jICBpbiB0aGUgZmlsZSBMSUNFTlNFLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotdXNhZ2UoKSB7Ci0gIGVjaG8gJyc7Ci0gIGVjaG8gJ1VzYWdlOiB4bWxwcm9jLnNoIC1bb3B0aW9uXSA8ZmlsZW5hbWUueG1sPic7Ci0gIGVjaG8gJ1NwZWNpZnkgYSB0YXJnZXQgZnJvbTonOwotICBlY2hvICctdiAgICAgIHZlcmlmeSB4bWwgZmlsZSBjb25mb3JtcyB0byBkdGQnOwotICBlY2hvICctaHRtbCAgIG91dHB1dCBpbiBodG1sIGZvcm1hdCAoc2luZ2xlIGZpbGUpJzsKLSAgZWNobyAnLXBzICAgICBvdXRwdXQgaW4gcG9zdHNjcmlwdCBmb3JtYXQnOwotICBlY2hvICctcGRmICAgIG91dHB1dCBpbiBwZGYgZm9ybWF0JzsKLSAgZXhpdDsKLX0KLQotaWYgdGVzdCAkIyAtbmUgMjsgdGhlbgotICB1c2FnZQotZmkKLSMgYXNzaWduIHRoZSB2YXJpYWJsZSBmb3IgdGhlIG91dHB1dCB0eXBlCi1hY3Rpb249JDE7IHNoaWZ0Ci0jIGFzc2lnbiB0aGUgb3V0cHV0IGZpbGVuYW1lCi14bWxmaWxlPSQxOyBzaGlmdAotIyBhbmQgY2hlY2sgdXNlciBpbnB1dCBpdCBjb3JyZWN0Ci1pZiAhKHRlc3QgLWYgJHhtbGZpbGUpOyB0aGVuCi0gIGVjaG8gIk5vIHN1Y2ggZmlsZTogJHhtbGZpbGUiOwotICBleGl0OwotZmkKLSMgc29tZSBvdGhlciBzdHVmZiB3ZSB3aWxsIHVzZQotT1VUPW91dHB1dAoteHNsX2ZvPWJ6LWZvLnhzbAoteHNsX2h0bWw9YnotaHRtbC54c2wKLQotYmFzZW5hbWU9JHhtbGZpbGUKLWJhc2VuYW1lPSR7YmFzZW5hbWUvLycueG1sJy8nJ30KLQotZm9maWxlPSIke2Jhc2VuYW1lfS5mbyIKLWh0bWxmaWxlPSIke2Jhc2VuYW1lfS5odG1sIgotcGRmZmlsZT0iJHtiYXNlbmFtZX0ucGRmIgotcHNmaWxlPSIke2Jhc2VuYW1lfS5wcyIKLXhtbGZtdGZpbGU9IiR7YmFzZW5hbWV9LmZtdCIKLQotIyBmaXJzdCBwcm9jZXNzIHRoZSB4bWxmaWxlIHdpdGggQ0RBVEEgdGFncwotLi9mb3JtYXQucGwgJHhtbGZpbGUgJHhtbGZtdGZpbGUKLSMgc28gdGhlIHNoZWxsIGtub3dzIHdoZXJlIHRoZSBjYXRhbG9ncyBsaXZlCi1leHBvcnQgWE1MX0NBVEFMT0dfRklMRVM9L2V0Yy94bWwvY2F0YWxvZwotCi0jIHBvc3QtcHJvY2Vzc2luZyB0aWR5IHVwCi1jbGVhbnVwKCkgewotICBlY2hvICJDbGVhbmluZyB1cDogJEAiIAotICB3aGlsZSBbICQjICE9IDAgXQotICBkbwotICAgIGFyZz0kMTsgc2hpZnQ7Ci0gICAgZWNobyAiICBkZWxldGluZyAkYXJnIjsKLSAgICBybSAkYXJnCi0gIGRvbmUKLX0KLQotY2FzZSAkYWN0aW9uIGluCi0gIC12KQotICAgZmxhZ3M9Jy0tbm9vdXQgLS14aW5jbHVkZSAtLW5vYmxhbmtzIC0tcG9zdHZhbGlkJwotICAgZHRkPSctLWR0ZHZhbGlkIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCcKLSAgIHhtbGxpbnQgJGZsYWdzICRkdGQgJHhtbGZtdGZpbGUgMj4gJE9VVCAKLSAgIGVncmVwICdlcnJvcicgJE9VVCAKLSAgIHJtICRPVVQKLSAgOzsKLQotICAtaHRtbCkKLSAgIGVjaG8gIkNyZWF0aW5nICRodG1sZmlsZSAuLi4iCi0gICB4c2x0cHJvYyAtLW5vbmV0IC0teGluY2x1ZGUgIC1vICRodG1sZmlsZSAkeHNsX2h0bWwgJHhtbGZtdGZpbGUKLSAgIGNsZWFudXAgJHhtbGZtdGZpbGUKLSAgOzsKLQotICAtcGRmKQotICAgZWNobyAiQ3JlYXRpbmcgJHBkZmZpbGUgLi4uIgotICAgeHNsdHByb2MgLS1ub25ldCAtLXhpbmNsdWRlIC1vICRmb2ZpbGUgJHhzbF9mbyAkeG1sZm10ZmlsZQotICAgcGRmeG1sdGV4ICRmb2ZpbGUgPiRPVVQgPC9kZXYvbnVsbAotICAgcGRmeG1sdGV4ICRmb2ZpbGUgPiRPVVQgPC9kZXYvbnVsbAotICAgcGRmeG1sdGV4ICRmb2ZpbGUgPiRPVVQgPC9kZXYvbnVsbAotICAgY2xlYW51cCAkT1VUICR4bWxmbXRmaWxlICouYXV4ICouZm8gKi5sb2cgKi5vdXQKLSAgOzsKLQotICAtcHMpCi0gICBlY2hvICJDcmVhdGluZyAkcHNmaWxlIC4uLiIKLSAgIHhzbHRwcm9jIC0tbm9uZXQgLS14aW5jbHVkZSAtbyAkZm9maWxlICR4c2xfZm8gJHhtbGZtdGZpbGUKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIHBkZnRvcHMgJHBkZmZpbGUgJHBzZmlsZQotICAgY2xlYW51cCAkT1VUICR4bWxmbXRmaWxlICRwZGZmaWxlICouYXV4ICouZm8gKi5sb2cgKi5vdXQKLSMgIHBhc3NpdmV0ZXggaXMgYnJva2VuLCBzbyB3ZSBjYW4ndCBnbyB0aGlzIHJvdXRlIHlldC4KLSMgICB4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0jICAgeG1sdGV4ICRmb2ZpbGUgPiRPVVQgPC9kZXYvbnVsbAotIyAgIHhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSMgICBkdmlwcyAtUiAtcSAtbyBiemlwLW1hbnVhbC5wcyAqLmR2aQotICA7OwotCi0gICopCi0gIHVzYWdlCi0gIDs7Ci1lc2FjCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0NNYWtlQ29uZmlndXJhYmxlRmlsZS5pbiBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ01ha2VDb25maWd1cmFibGVGaWxlLmluCmluZGV4IGRmMmMzODIuLjJiYWZlMmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ01ha2VDb25maWd1cmFibGVGaWxlLmluCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ01ha2VDb25maWd1cmFibGVGaWxlLmluCkBAIC0xICsxLDIyIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBAQ01BS0VfQ09ORklHVVJBQkxFX0ZJTEVfQ09OVEVOVEAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFN5bWJvbEhpZGluZy5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFN5bWJvbEhpZGluZy5jbWFrZQppbmRleCA2MGVlOGU2Li5hYWFjOWZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxTeW1ib2xIaWRpbmcuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsU3ltYm9sSGlkaW5nLmNtYWtlCkBAIC0xLDMgKzEsMjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGluY2x1ZGUoQ2hlY2tDU291cmNlQ29tcGlsZXMpCiAKIG9wdGlvbihDVVJMX0hJRERFTl9TWU1CT0xTICJTZXQgdG8gT04gdG8gaGlkZSBsaWJjdXJsIGludGVybmFsIHN5bWJvbHMgKD1oaWRlIGFsbCBzeW1ib2xzIHRoYXQgYXJlbid0IG9mZmljaWFsbHkgZXh0ZXJuYWwpLiIgT04pCkBAIC0xMSwxMyArMzIsNyBAQAogICAgIHNldChfU1lNQk9MX0VYVEVSTiAiX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fIChcImRlZmF1bHRcIikpKSIpCiAgICAgc2V0KF9DRkxBR19TWU1CT0xTX0hJREUgIi1mdmlzaWJpbGl0eT1oaWRkZW4iKQogICBlbHNlaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MpCi0gICAgaWYoTk9UIENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDIuOC4xMCkKLSAgICAgIHNldChHQ0NfVkVSU0lPTiAke0NNQUtFX0NfQ09NUElMRVJfVkVSU0lPTn0pCi0gICAgZWxzZSgpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NfQ09NUElMRVJ9IC1kdW1wdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBHQ0NfVkVSU0lPTikKLSAgICBlbmRpZigpCi0gICAgaWYoTk9UIEdDQ19WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjQpCisgICAgaWYoTk9UIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQogICAgICAgIyBub3RlOiB0aGlzIGlzIGNvbnNpZGVyZWQgYnVnZ3kgcHJpb3IgdG8gNC4wIGJ1dCB0aGUgYXV0b3Rvb2xzIGRvbid0IGNhcmUsIHNvIGxldCdzIGlnbm9yZSB0aGF0IGZhY3QKICAgICAgIHNldChTVVBQT1JUU19TWU1CT0xfSElESU5HIFRSVUUpCiAgICAgICBzZXQoX1NZTUJPTF9FWFRFUk4gIl9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoXCJkZWZhdWx0XCIpKSkiKQpAQCAtMjksNyArNDQsNyBAQAogICAgIHNldChfQ0ZMQUdfU1lNQk9MU19ISURFICIteGxkc2NvcGU9aGlkZGVuIikKICAgZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiSW50ZWwiIEFORCBOT1QgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA5LjApCiAgICAgIyBub3RlOiB0aGlzIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoZWNrIGZvciB2ZXJzaW9uIDkuMS4wNDUgYnV0IEknbSBub3QgMTAwJSBzdXJlCi0gICAgIyAgICAgICBzbyBsZXQncyB0byBpdCB0aGUgc2FtZSB3YXkgYXV0b3Rvb2xzIGRvLgorICAgICMgICAgICAgc28gbGV0J3MgZG8gaXQgdGhlIHNhbWUgd2F5IGF1dG90b29scyBkby4KICAgICBzZXQoU1VQUE9SVFNfU1lNQk9MX0hJRElORyBUUlVFKQogICAgIHNldChfU1lNQk9MX0VYVEVSTiAiX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fIChcImRlZmF1bHRcIikpKSIpCiAgICAgc2V0KF9DRkxBR19TWU1CT0xTX0hJREUgIi1mdmlzaWJpbGl0eT1oaWRkZW4iKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsVGVzdHMuYyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFRlc3RzLmMKaW5kZXggMDdiNTE2Yi4uM2VmMzVmMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsVGVzdHMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxUZXN0cy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMjUsNiArMTI1LDcgQEAKICNpZiAgIGRlZmluZWQoSEFWRV9HRVRIT1NUQllBRERSX1JfNSkgfHwgXAogICAgICAgZGVmaW5lZChIQVZFX0dFVEhPU1RCWUFERFJfUl81X1JFRU5UUkFOVCkKICAgcmMgPSBnZXRob3N0YnlhZGRyX3IoYWRkcmVzcywgbGVuZ3RoLCB0eXBlLCAmaCwgJmhkYXRhKTsKKyAgKHZvaWQpcmM7CiAjZWxpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZQUREUl9SXzcpIHx8IFwKICAgICAgIGRlZmluZWQoSEFWRV9HRVRIT1NUQllBRERSX1JfN19SRUVOVFJBTlQpCiAgIGhwID0gZ2V0aG9zdGJ5YWRkcl9yKGFkZHJlc3MsIGxlbmd0aCwgdHlwZSwgJmgsIGJ1ZmZlciwgODE5MiwgJmhfZXJybm9wKTsKQEAgLTEzMiw2ICsxMzMsNyBAQAogI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWUFERFJfUl84KSB8fCBcCiAgICAgICBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZQUREUl9SXzhfUkVFTlRSQU5UKQogICByYyA9IGdldGhvc3RieWFkZHJfcihhZGRyZXNzLCBsZW5ndGgsIHR5cGUsICZoLCBidWZmZXIsIDgxOTIsICZocCwgJmhfZXJybm9wKTsKKyAgKHZvaWQpcmM7CiAjZW5kaWYKIAogI2lmICAgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl8zKSB8fCBcCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRCZWFyU1NMLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQmVhclNTTC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGY3MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQmVhclNTTC5jbWFrZQpAQCAtMCwwICsxLDMwIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmaW5kX3BhdGgoQkVBUlNTTF9JTkNMVURFX0RJUlMgYmVhcnNzbC5oKQorCitmaW5kX2xpYnJhcnkoQkVBUlNTTF9MSUJSQVJZIGJlYXJzc2wpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoQkVBUlNTTCBERUZBVUxUX01TRworICAgIEJFQVJTU0xfSU5DTFVERV9ESVJTIEJFQVJTU0xfTElCUkFSWSkKKworbWFya19hc19hZHZhbmNlZChCRUFSU1NMX0lOQ0xVREVfRElSUyBCRUFSU1NMX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRCcm90bGkuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRCcm90bGkuY21ha2UKaW5kZXggMzUxYjhmNy4uYzQzMTcyYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQnJvdGxpLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEJyb3RsaS5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQogCiBmaW5kX3BhdGgoQlJPVExJX0lOQ0xVREVfRElSICJicm90bGkvZGVjb2RlLmgiKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQ0FSRVMuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRDQVJFUy5jbWFrZQppbmRleCA3MjMwNDRhLi45MTYwYWU1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRDQVJFUy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRDQVJFUy5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIC0gRmluZCBjLWFyZXMKICMgRmluZCB0aGUgYy1hcmVzIGluY2x1ZGVzIGFuZCBsaWJyYXJ5CiAjIFRoaXMgbW9kdWxlIGRlZmluZXMKQEAgLTcsMzQgKzI4LDE2IEBACiAjIGFsc28gZGVmaW5lZCwgYnV0IG5vdCBmb3IgZ2VuZXJhbCB1c2UgYXJlCiAjIENBUkVTX0xJQlJBUlksIHdoZXJlIHRvIGZpbmQgdGhlIGMtYXJlcyBsaWJyYXJ5LgogCi1maW5kX3BhdGgoQ0FSRVNfSU5DTFVERV9ESVIgYXJlcy5oCi0gIC91c3IvbG9jYWwvaW5jbHVkZQotICAvdXNyL2luY2x1ZGUKLSAgKQorZmluZF9wYXRoKENBUkVTX0lOQ0xVREVfRElSIGFyZXMuaCkKIAogc2V0KENBUkVTX05BTUVTICR7Q0FSRVNfTkFNRVN9IGNhcmVzKQogZmluZF9saWJyYXJ5KENBUkVTX0xJQlJBUlkKICAgTkFNRVMgJHtDQVJFU19OQU1FU30KLSAgUEFUSFMgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIKICAgKQogCi1pZihDQVJFU19MSUJSQVJZIEFORCBDQVJFU19JTkNMVURFX0RJUikKLSAgc2V0KENBUkVTX0xJQlJBUklFUyAke0NBUkVTX0xJQlJBUll9KQotICBzZXQoQ0FSRVNfRk9VTkQgIllFUyIpCi1lbHNlKCkKLSAgc2V0KENBUkVTX0ZPVU5EICJOTyIpCi1lbmRpZigpCi0KLQotaWYoQ0FSRVNfRk9VTkQpCi0gIGlmKE5PVCBDQVJFU19GSU5EX1FVSUVUTFkpCi0gICAgbWVzc2FnZShTVEFUVVMgIkZvdW5kIGMtYXJlczogJHtDQVJFU19MSUJSQVJJRVN9IikKLSAgZW5kaWYoKQotZWxzZSgpCi0gIGlmKENBUkVTX0ZJTkRfUkVRVUlSRUQpCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgYy1hcmVzIGxpYnJhcnkiKQotICBlbmRpZigpCi1lbmRpZigpCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKENBUkVTCisgICAgUkVRVUlSRURfVkFSUyBDQVJFU19MSUJSQVJZIENBUkVTX0lOQ0xVREVfRElSKQogCiBtYXJrX2FzX2FkdmFuY2VkKAogICBDQVJFU19MSUJSQVJZCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRHU1MuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRHU1MuY21ha2UKaW5kZXggOGEyOGYyZi4uMDIxMTFhMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kR1NTLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEdTUy5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIC0gVHJ5IHRvIGZpbmQgdGhlIEdTUyBLZXJiZXJvcyBsaWJyYXJ5CiAjIE9uY2UgZG9uZSB0aGlzIHdpbGwgZGVmaW5lCiAjCkBAIC02Miw2ICs4Myw3IEBACiAgICAgICAgICAgQ09NTUFORCAke19HU1NfQ09ORklHVVJFX1NDUklQVH0gIi0tY2ZsYWdzIiAiZ3NzYXBpIgogICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfR1NTX0NGTEFHUwogICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfR1NTX0NPTkZJR1VSRV9GQUlMRUQKKyAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQogICAgICAgKQogICAgIG1lc3NhZ2UoU1RBVFVTICJDRkxBR1M6ICR7X0dTU19DRkxBR1N9IikKICAgICBpZihOT1QgX0dTU19DT05GSUdVUkVfRkFJTEVEKSAjIDAgbWVhbnMgc3VjY2VzcwpAQCAtODQsNiArMTA2LDcgQEAKICAgICAgICAgQ09NTUFORCAke19HU1NfQ09ORklHVVJFX1NDUklQVH0gIi0tbGlicyIgImdzc2FwaSIKICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF9HU1NfTElCX0ZMQUdTCiAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfR1NTX0NPTkZJR1VSRV9GQUlMRUQKKyAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKICAgICApCiAgICAgbWVzc2FnZShTVEFUVVMgIkxERkxBR1M6ICR7X0dTU19MSUJfRkxBR1N9IikKIApAQCAtMTEwLDYgKzEzMyw3IEBACiAgICAgICAgIENPTU1BTkQgJHtfR1NTX0NPTkZJR1VSRV9TQ1JJUFR9ICItLXZlcnNpb24iCiAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfR1NTX1ZFUlNJT04KICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9HU1NfQ09ORklHVVJFX0ZBSUxFRAorICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQogICAgICkKIAogICAgICMgb2xkZXIgdmVyc2lvbnMgbWF5IG5vdCBoYXZlIHRoZSAiLS12ZXJzaW9uIiBwYXJhbWV0ZXIuIEluIHRoaXMgY2FzZSB3ZSBqdXN0IGRvbid0IGNhcmUuCkBAIC0xMjEsNiArMTQ1LDcgQEAKICAgICAgICAgQ09NTUFORCAke19HU1NfQ09ORklHVVJFX1NDUklQVH0gIi0tdmVuZG9yIgogICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX0dTU19WRU5ET1IKICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9HU1NfQ09ORklHVVJFX0ZBSUxFRAorICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQogICAgICkKIAogICAgICMgb2xkZXIgdmVyc2lvbnMgbWF5IG5vdCBoYXZlIHRoZSAiLS12ZW5kb3IiIHBhcmFtZXRlci4gSW4gdGhpcyBjYXNlIHdlIGp1c3QgZG9uJ3QgY2FyZS4KQEAgLTEzNCw3ICsxNTksNyBAQAogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKIAotICBlbHNlKCkgIyBlaXRoZXIgdGhlcmUgaXMgbm8gY29uZmlnIHNjcmlwdCBvciB3ZSBhcmUgb24gcGxhdGZvcm0gdGhhdCBkb2Vzbid0IHByb3ZpZGUgb25lIChXaW5kb3dzPykKKyAgZWxzZSgpICMgZWl0aGVyIHRoZXJlIGlzIG5vIGNvbmZpZyBzY3JpcHQgb3Igd2UgYXJlIG9uIGEgcGxhdGZvcm0gdGhhdCBkb2Vzbid0IHByb3ZpZGUgb25lIChXaW5kb3dzPykKIAogICAgIGZpbmRfcGF0aChfR1NTX0lOQ0xVREVfRElSCiAgICAgICAgIE5BTUVTCkBAIC0xNjQsNyArMTg5LDcgQEAKICAgICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIiKQogICAgICAgZW5kaWYoKQogICAgIGVsc2UoKQotICAgICAgIyBJJ20gbm90IGNvbnZpZW5jZWQgaWYgdGhpcyBpcyB0aGUgcmlnaHQgd2F5IGJ1dCB0aGlzIGlzIHdoYXQgYXV0b3Rvb2xzIGRvIGF0IHRoZSBtb21lbnQKKyAgICAgICMgSSdtIG5vdCBjb252aW5jZWQgaWYgdGhpcyBpcyB0aGUgcmlnaHQgd2F5IGJ1dCB0aGlzIGlzIHdoYXQgYXV0b3Rvb2xzIGRvIGF0IHRoZSBtb21lbnQKICAgICAgIGZpbmRfcGF0aChfR1NTX0lOQ0xVREVfRElSCiAgICAgICAgICAgTkFNRVMKICAgICAgICAgICAgICAgImdzc2FwaS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTGliU1NIMi5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZExpYlNTSDIuY21ha2UKaW5kZXggODQ4MjJkYi4uNGNkZjNlMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTGliU1NIMi5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRMaWJTU0gyLmNtYWtlCkBAIC0xLDMgKzEsMjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgLSBUcnkgdG8gZmluZCB0aGUgbGlic3NoMiBsaWJyYXJ5CiAjIE9uY2UgZG9uZSB0aGlzIHdpbGwgZGVmaW5lCiAjCkBAIC01LDMxICsyNiwxOCBAQAogIyBMSUJTU0gyX0lOQ0xVREVfRElSIC0gdGhlIGxpYnNzaDIgaW5jbHVkZSBkaXJlY3RvcnkKICMgTElCU1NIMl9MSUJSQVJZIC0gdGhlIGxpYnNzaDIgbGlicmFyeSBuYW1lCiAKLWlmKExJQlNTSDJfSU5DTFVERV9ESVIgQU5EIExJQlNTSDJfTElCUkFSWSkKLSAgc2V0KExpYlNTSDJfRklORF9RVUlFVExZIFRSVUUpCi1lbmRpZigpCitmaW5kX3BhdGgoTElCU1NIMl9JTkNMVURFX0RJUiBsaWJzc2gyLmgpCiAKLWZpbmRfcGF0aChMSUJTU0gyX0lOQ0xVREVfRElSIGxpYnNzaDIuaAotKQotCi1maW5kX2xpYnJhcnkoTElCU1NIMl9MSUJSQVJZIE5BTUVTIHNzaDIKLSkKK2ZpbmRfbGlicmFyeShMSUJTU0gyX0xJQlJBUlkgTkFNRVMgc3NoMiBsaWJzc2gyKQogCiBpZihMSUJTU0gyX0lOQ0xVREVfRElSKQotICBmaWxlKFNUUklOR1MgIiR7TElCU1NIMl9JTkNMVURFX0RJUn0vbGlic3NoMi5oIiBsaWJzc2gyX3ZlcnNpb25fc3RyIFJFR0VYICJeI2RlZmluZVtcdCBdK0xJQlNTSDJfVkVSU0lPTl9OVU1bXHQgXSsweFswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XS4qIikKLQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi4qTElCU1NIMl9WRVJTSU9OX05VTVtcdCBdKzB4KFswLTldWzAtOV0pLiokIiAiXFwxIiBMSUJTU0gyX1ZFUlNJT05fTUFKT1IgIiR7bGlic3NoMl92ZXJzaW9uX3N0cn0iKQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi4qTElCU1NIMl9WRVJTSU9OX05VTVtcdCBdKzB4WzAtOV1bMC05XShbMC05XVswLTldKS4qJCIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX01JTk9SICAiJHtsaWJzc2gyX3ZlcnNpb25fc3RyfSIpCi0gIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeLipMSUJTU0gyX1ZFUlNJT05fTlVNW1x0IF0rMHhbMC05XVswLTldWzAtOV1bMC05XShbMC05XVswLTldKS4qJCIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX1BBVENIICIke2xpYnNzaDJfdmVyc2lvbl9zdHJ9IikKLQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXjAoLispIiAiXFwxIiBMSUJTU0gyX1ZFUlNJT05fTUFKT1IgIiR7TElCU1NIMl9WRVJTSU9OX01BSk9SfSIpCi0gIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeMCguKykiICJcXDEiIExJQlNTSDJfVkVSU0lPTl9NSU5PUiAiJHtMSUJTU0gyX1ZFUlNJT05fTUlOT1J9IikKLSAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4wKC4rKSIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX1BBVENIICIke0xJQlNTSDJfVkVSU0lPTl9QQVRDSH0iKQotCi0gIHNldChMSUJTU0gyX1ZFUlNJT04gIiR7TElCU1NIMl9WRVJTSU9OX01BSk9SfS4ke0xJQlNTSDJfVkVSU0lPTl9NSU5PUn0uJHtMSUJTU0gyX1ZFUlNJT05fUEFUQ0h9IikKKyAgZmlsZShTVFJJTkdTICIke0xJQlNTSDJfSU5DTFVERV9ESVJ9L2xpYnNzaDIuaCIgbGlic3NoMl92ZXJzaW9uX3N0ciBSRUdFWCAiXiNkZWZpbmVbXHQgXStMSUJTU0gyX1ZFUlNJT05bXHQgXStcIiguKilcIiIpCisgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeLipcIihbXlwiXSspXCIiICJcXDEiICBMSUJTU0gyX1ZFUlNJT04gIiR7bGlic3NoMl92ZXJzaW9uX3N0cn0iKQogZW5kaWYoKQogCiBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQotZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKExpYlNTSDIgREVGQVVMVF9NU0cgTElCU1NIMl9JTkNMVURFX0RJUiBMSUJTU0gyX0xJQlJBUlkgKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKExpYlNTSDIKKyAgICBSRVFVSVJFRF9WQVJTIExJQlNTSDJfTElCUkFSWSBMSUJTU0gyX0lOQ0xVREVfRElSCisgICAgVkVSU0lPTl9WQVIgTElCU1NIMl9WRVJTSU9OKQogCi1tYXJrX2FzX2FkdmFuY2VkKExJQlNTSDJfSU5DTFVERV9ESVIgTElCU1NIMl9MSUJSQVJZIExJQlNTSDJfVkVSU0lPTl9NQUpPUiBMSUJTU0gyX1ZFUlNJT05fTUlOT1IgTElCU1NIMl9WRVJTSU9OX1BBVENIIExJQlNTSDJfVkVSU0lPTikKK21hcmtfYXNfYWR2YW5jZWQoTElCU1NIMl9JTkNMVURFX0RJUiBMSUJTU0gyX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRNYmVkVExTLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTWJlZFRMUy5jbWFrZQppbmRleCBhOTE2Mzk1Li4yZWJlNzIxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRNYmVkVExTLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE1iZWRUTFMuY21ha2UKQEAgLTEsMyArMSwyNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogZmluZF9wYXRoKE1CRURUTFNfSU5DTFVERV9ESVJTIG1iZWR0bHMvc3NsLmgpCiAKIGZpbmRfbGlicmFyeShNQkVEVExTX0xJQlJBUlkgbWJlZHRscykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5HSFRUUDIuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAyLmNtYWtlCmluZGV4IDM0OGI5NjEuLmUxZWJhMDUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5HSFRUUDIuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdIVFRQMi5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQogCiBmaW5kX3BhdGgoTkdIVFRQMl9JTkNMVURFX0RJUiAibmdodHRwMi9uZ2h0dHAyLmgiKQpAQCAtMTAsOSArMzEsOSBAQAogICAgIFJFUVVJUkVEX1ZBUlMKICAgICAgIE5HSFRUUDJfTElCUkFSWQogICAgICAgTkdIVFRQMl9JTkNMVURFX0RJUgotICAgIEZBSUxfTUVTU0FHRQotICAgICAgIkNvdWxkIE5PVCBmaW5kIE5HSFRUUDIiCiApCiAKIHNldChOR0hUVFAyX0lOQ0xVREVfRElSUyAke05HSFRUUDJfSU5DTFVERV9ESVJ9KQogc2V0KE5HSFRUUDJfTElCUkFSSUVTICR7TkdIVFRQMl9MSUJSQVJZfSkKKworbWFya19hc19hZHZhbmNlZChOR0hUVFAyX0lOQ0xVREVfRElSUyBOR0hUVFAyX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5HSFRUUDMuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczY2U5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAzLmNtYWtlCkBAIC0wLDAgKzEsNzYgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI1s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVsucnN0OgorRmluZE5HSFRUUDMKKy0tLS0tLS0tLS0KKworRmluZCB0aGUgbmdodHRwMyBsaWJyYXJ5CisKK1Jlc3VsdCBWYXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXl4KKworYGBOR0hUVFAzX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyBuZ2h0dHAzCitgYE5HSFRUUDNfSU5DTFVERV9ESVJTYGAKKyAgVGhlIG5naHR0cDMgaW5jbHVkZSBkaXJlY3Rvcmllcy4KK2BgTkdIVFRQM19MSUJSQVJJRVNgYAorICBUaGUgbGlicmFyaWVzIG5lZWRlZCB0byB1c2UgbmdodHRwMworYGBOR0hUVFAzX1ZFUlNJT05gYAorICB2ZXJzaW9uIG9mIG5naHR0cDMuCisjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQorCitpZihVTklYKQorICBmaW5kX3BhY2thZ2UoUGtnQ29uZmlnIFFVSUVUKQorICBwa2dfc2VhcmNoX21vZHVsZShQQ19OR0hUVFAzIGxpYm5naHR0cDMpCitlbmRpZigpCisKK2ZpbmRfcGF0aChOR0hUVFAzX0lOQ0xVREVfRElSIG5naHR0cDMvbmdodHRwMy5oCisgIEhJTlRTCisgICAgJHtQQ19OR0hUVFAzX0lOQ0xVREVESVJ9CisgICAgJHtQQ19OR0hUVFAzX0lOQ0xVREVfRElSU30KKykKKworZmluZF9saWJyYXJ5KE5HSFRUUDNfTElCUkFSWSBOQU1FUyBuZ2h0dHAzCisgIEhJTlRTCisgICAgJHtQQ19OR0hUVFAzX0xJQkRJUn0KKyAgICAke1BDX05HSFRUUDNfTElCUkFSWV9ESVJTfQorKQorCitpZihQQ19OR0hUVFAzX1ZFUlNJT04pCisgIHNldChOR0hUVFAzX1ZFUlNJT04gJHtQQ19OR0hUVFAzX1ZFUlNJT059KQorZW5kaWYoKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE5HSFRUUDMKKyAgUkVRVUlSRURfVkFSUworICAgIE5HSFRUUDNfTElCUkFSWQorICAgIE5HSFRUUDNfSU5DTFVERV9ESVIKKyAgVkVSU0lPTl9WQVIgTkdIVFRQM19WRVJTSU9OCispCisKK2lmKE5HSFRUUDNfRk9VTkQpCisgIHNldChOR0hUVFAzX0xJQlJBUklFUyAgICAke05HSFRUUDNfTElCUkFSWX0pCisgIHNldChOR0hUVFAzX0lOQ0xVREVfRElSUyAke05HSFRUUDNfSU5DTFVERV9ESVJ9KQorZW5kaWYoKQorCittYXJrX2FzX2FkdmFuY2VkKE5HSFRUUDNfSU5DTFVERV9ESVJTIE5HSFRUUDNfTElCUkFSSUVTKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdUQ1AyLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdUQ1AyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZWQ4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR1RDUDIuY21ha2UKQEAgLTAsMCArMSwxMTMgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI1s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVsucnN0OgorRmluZE5HVENQMgorLS0tLS0tLS0tLQorCitGaW5kIHRoZSBuZ3RjcDIgbGlicmFyeQorCitUaGlzIG1vZHVsZSBhY2NlcHRzIG9wdGlvbmFsIENPTVBPTkVOVFMgdG8gY29udHJvbCB0aGUgY3J5cHRvIGxpYnJhcnkgKHRoZXNlIGFyZQorbXV0dWFsbHkgZXhjbHVzaXZlKTo6CisKKyAgT3BlblNTTDogIFVzZSBsaWJuZ3RjcDJfY3J5cHRvX29wZW5zc2wKKyAgR251VExTOiAgIFVzZSBsaWJuZ3RjcDJfY3J5cHRvX2dudXRscworCitSZXN1bHQgVmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK2BgTkdUQ1AyX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyBuZ3RjcDIKK2BgTkdUQ1AyX0lOQ0xVREVfRElSU2BgCisgIFRoZSBuZ3RjcDIgaW5jbHVkZSBkaXJlY3Rvcmllcy4KK2BgTkdUQ1AyX0xJQlJBUklFU2BgCisgIFRoZSBsaWJyYXJpZXMgbmVlZGVkIHRvIHVzZSBuZ3RjcDIKK2BgTkdUQ1AyX1ZFUlNJT05gYAorICB2ZXJzaW9uIG9mIG5ndGNwMi4KKyNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCisKK2lmKFVOSVgpCisgIGZpbmRfcGFja2FnZShQa2dDb25maWcgUVVJRVQpCisgIHBrZ19zZWFyY2hfbW9kdWxlKFBDX05HVENQMiBsaWJuZ3RjcDIpCitlbmRpZigpCisKK2ZpbmRfcGF0aChOR1RDUDJfSU5DTFVERV9ESVIgbmd0Y3AyL25ndGNwMi5oCisgIEhJTlRTCisgICAgJHtQQ19OR1RDUDJfSU5DTFVERURJUn0KKyAgICAke1BDX05HVENQMl9JTkNMVURFX0RJUlN9CispCisKK2ZpbmRfbGlicmFyeShOR1RDUDJfTElCUkFSWSBOQU1FUyBuZ3RjcDIKKyAgSElOVFMKKyAgICAke1BDX05HVENQMl9MSUJESVJ9CisgICAgJHtQQ19OR1RDUDJfTElCUkFSWV9ESVJTfQorKQorCitpZihQQ19OR1RDUDJfVkVSU0lPTikKKyAgc2V0KE5HVENQMl9WRVJTSU9OICR7UENfTkdUQ1AyX1ZFUlNJT059KQorZW5kaWYoKQorCitpZihOR1RDUDJfRklORF9DT01QT05FTlRTKQorICBzZXQoTkdUQ1AyX0NSWVBUT19CQUNLRU5EICIiKQorICBmb3JlYWNoKGNvbXBvbmVudCBJTiBMSVNUUyBOR1RDUDJfRklORF9DT01QT05FTlRTKQorICAgIGlmKGNvbXBvbmVudCBNQVRDSEVTICJeKE9wZW5TU0x8R251VExTKSIpCisgICAgICBpZihOR1RDUDJfQ1JZUFRPX0JBQ0tFTkQpCisgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk5HVENQMjogT25seSBvbmUgY3J5cHRvIGxpYnJhcnkgY2FuIGJlIHNlbGVjdGVkIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIHNldChOR1RDUDJfQ1JZUFRPX0JBQ0tFTkQgJHtjb21wb25lbnR9KQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYoTkdUQ1AyX0NSWVBUT19CQUNLRU5EKQorICAgIHN0cmluZyhUT0xPV0VSICJuZ3RjcDJfY3J5cHRvXyR7TkdUQ1AyX0NSWVBUT19CQUNLRU5EfSIgX2NyeXB0b19saWJyYXJ5KQorICAgIGlmKFVOSVgpCisgICAgICBwa2dfc2VhcmNoX21vZHVsZShQQ18ke19jcnlwdG9fbGlicmFyeX0gbGliJHtfY3J5cHRvX2xpYnJhcnl9KQorICAgIGVuZGlmKCkKKyAgICBmaW5kX2xpYnJhcnkoJHtfY3J5cHRvX2xpYnJhcnl9X0xJQlJBUlkKKyAgICAgIE5BTUVTCisgICAgICAgICR7X2NyeXB0b19saWJyYXJ5fQorICAgICAgSElOVFMKKyAgICAgICAgJHtQQ18ke19jcnlwdG9fbGlicmFyeX1fTElCRElSfQorICAgICAgICAke1BDXyR7X2NyeXB0b19saWJyYXJ5fV9MSUJSQVJZX0RJUlN9CisgICAgKQorICAgIGlmKCR7X2NyeXB0b19saWJyYXJ5fV9MSUJSQVJZKQorICAgICAgc2V0KE5HVENQMl8ke05HVENQMl9DUllQVE9fQkFDS0VORH1fRk9VTkQgVFJVRSkKKyAgICAgIHNldChOR1RDUDJfQ1JZUFRPX0xJQlJBUlkgJHske19jcnlwdG9fbGlicmFyeX1fTElCUkFSWX0pCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRpZigpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTkdUQ1AyCisgIFJFUVVJUkVEX1ZBUlMKKyAgICBOR1RDUDJfTElCUkFSWQorICAgIE5HVENQMl9JTkNMVURFX0RJUgorICBWRVJTSU9OX1ZBUiBOR1RDUDJfVkVSU0lPTgorICBIQU5ETEVfQ09NUE9ORU5UUworKQorCitpZihOR1RDUDJfRk9VTkQpCisgIHNldChOR1RDUDJfTElCUkFSSUVTICAgICR7TkdUQ1AyX0xJQlJBUll9ICR7TkdUQ1AyX0NSWVBUT19MSUJSQVJZfSkKKyAgc2V0KE5HVENQMl9JTkNMVURFX0RJUlMgJHtOR1RDUDJfSU5DTFVERV9ESVJ9KQorZW5kaWYoKQorCittYXJrX2FzX2FkdmFuY2VkKE5HVENQMl9JTkNMVURFX0RJUlMgTkdUQ1AyX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5TUy5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5TUy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmRiMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTlNTLmNtYWtlCkBAIC0wLDAgKzEsMzggQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmKFVOSVgpCisgIGZpbmRfcGFja2FnZShQa2dDb25maWcgUVVJRVQpCisgIHBrZ19zZWFyY2hfbW9kdWxlKFBDX05TUyBuc3MpCitlbmRpZigpCitpZihOT1QgUENfTlNTX0ZPVU5EKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQoTlNTX0xJQlJBUklFUyAke1BDX05TU19MSU5LX0xJQlJBUklFU30pCitzZXQoTlNTX0lOQ0xVREVfRElSUyAke1BDX05TU19JTkNMVURFX0RJUlN9KQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE5TUworICAgIFJFUVVJUkVEX1ZBUlMgTlNTX0xJQlJBUklFUyBOU1NfSU5DTFVERV9ESVJTCisgICAgVkVSU0lPTl9WQVIgUENfTlNTX1ZFUlNJT04pCisKK21hcmtfYXNfYWR2YW5jZWQoTlNTX0lOQ0xVREVfRElSUyBOU1NfTElCUkFSSUVTKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kUVVJQ0hFLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kUVVJQ0hFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDE3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRRVUlDSEUuY21ha2UKQEAgLTAsMCArMSw2OCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjWz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Wy5yc3Q6CitGaW5kUVVJQ0hFCistLS0tLS0tLS0tCisKK0ZpbmQgdGhlIHF1aWNoZSBsaWJyYXJ5CisKK1Jlc3VsdCBWYXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXl4KKworYGBRVUlDSEVfRk9VTkRgYAorICBTeXN0ZW0gaGFzIHF1aWNoZQorYGBRVUlDSEVfSU5DTFVERV9ESVJTYGAKKyAgVGhlIHF1aWNoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLgorYGBRVUlDSEVfTElCUkFSSUVTYGAKKyAgVGhlIGxpYnJhcmllcyBuZWVkZWQgdG8gdXNlIHF1aWNoZQorI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KK2lmKFVOSVgpCisgIGZpbmRfcGFja2FnZShQa2dDb25maWcgUVVJRVQpCisgIHBrZ19zZWFyY2hfbW9kdWxlKFBDX1FVSUNIRSBxdWljaGUpCitlbmRpZigpCisKK2ZpbmRfcGF0aChRVUlDSEVfSU5DTFVERV9ESVIgcXVpY2hlLmgKKyAgSElOVFMKKyAgICAke1BDX1FVSUNIRV9JTkNMVURFRElSfQorICAgICR7UENfUVVJQ0hFX0lOQ0xVREVfRElSU30KKykKKworZmluZF9saWJyYXJ5KFFVSUNIRV9MSUJSQVJZIE5BTUVTIHF1aWNoZQorICBISU5UUworICAgICR7UENfUVVJQ0hFX0xJQkRJUn0KKyAgICAke1BDX1FVSUNIRV9MSUJSQVJZX0RJUlN9CispCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoUVVJQ0hFCisgIFJFUVVJUkVEX1ZBUlMKKyAgICBRVUlDSEVfTElCUkFSWQorICAgIFFVSUNIRV9JTkNMVURFX0RJUgorKQorCitpZihRVUlDSEVfRk9VTkQpCisgIHNldChRVUlDSEVfTElCUkFSSUVTICAgICR7UVVJQ0hFX0xJQlJBUll9KQorICBzZXQoUVVJQ0hFX0lOQ0xVREVfRElSUyAke1FVSUNIRV9JTkNMVURFX0RJUn0pCitlbmRpZigpCisKK21hcmtfYXNfYWR2YW5jZWQoUVVJQ0hFX0lOQ0xVREVfRElSUyBRVUlDSEVfTElCUkFSSUVTKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kV29sZlNTTC5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZFdvbGZTU0wuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkZjFhOAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZFdvbGZTU0wuY21ha2UKQEAgLTAsMCArMSwzNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmluZF9wYXRoKFdvbGZTU0xfSU5DTFVERV9ESVIgTkFNRVMgd29sZnNzbC9zc2wuaCkKK2ZpbmRfbGlicmFyeShXb2xmU1NMX0xJQlJBUlkgTkFNRVMgd29sZnNzbCkKK21hcmtfYXNfYWR2YW5jZWQoV29sZlNTTF9JTkNMVURFX0RJUiBXb2xmU1NMX0xJQlJBUlkpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoV29sZlNTTAorICBSRVFVSVJFRF9WQVJTIFdvbGZTU0xfSU5DTFVERV9ESVIgV29sZlNTTF9MSUJSQVJZCisgICkKKworaWYoV29sZlNTTF9GT1VORCkKKyAgc2V0KFdvbGZTU0xfSU5DTFVERV9ESVJTICR7V29sZlNTTF9JTkNMVURFX0RJUn0pCisgIHNldChXb2xmU1NMX0xJQlJBUklFUyAke1dvbGZTU0xfTElCUkFSWX0pCitlbmRpZigpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL01hY3Jvcy5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvTWFjcm9zLmNtYWtlCmluZGV4IDdmNzEzNDUuLjY1YTQxZTQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvTWFjcm9zLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvTWFjcm9zLmNtYWtlCkBAIC0xLDMgKzEsMjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICNGaWxlIGRlZmluZXMgY29udmVuaWVuY2UgbWFjcm9zIGZvciBhdmFpbGFibGUgZmVhdHVyZSB0ZXN0aW5nCiAKICMgVGhpcyBtYWNybyBjaGVja3MgaWYgdGhlIHN5bWJvbCBleGlzdHMgaW4gdGhlIGxpYnJhcnkgYW5kIGlmIGl0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL090aGVyVGVzdHMuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL090aGVyVGVzdHMuY21ha2UKaW5kZXggYzFjOWFhMy4uOGM5YTQ5MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9PdGhlclRlc3RzLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvT3RoZXJUZXN0cy5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbmNsdWRlKENoZWNrQ1NvdXJjZUNvbXBpbGVzKQogIyBUaGUgYmVnaW4gb2YgdGhlIHNvdXJjZXMgKG1hY3JvcyBhbmQgaW5jbHVkZXMpCiBzZXQoX3NvdXJjZV9lcGlsb2d1ZSAiI3VuZGVmIGlubGluZSIpCkBAIC0yNiwxMyArNDcsMjAgQEAKIAogc2V0KENNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFIFNUQVRJQ19MSUJSQVJZKQogCitpZigxKSAjIENNYWtlIGhhcmQtY29kZXMgdGhlc2UKKyAgc2V0KFJFQ1ZfVFlQRV9BUkcxICJjdXJsX3NvY2tldF90IikKKyAgc2V0KFJFQ1ZfVFlQRV9BUkcyICJjaGFyICoiKQorICBzZXQoUkVDVl9UWVBFX0FSRzMgInNpemVfdCIpCisgIHNldChSRUNWX1RZUEVfQVJHNCAiaW50IikKKyAgc2V0KFJFQ1ZfVFlQRV9SRVRWICJzc2l6ZV90IikKK2Vsc2UoKQogY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIiR7X3NvdXJjZV9lcGlsb2d1ZX0KIGludCBtYWluKHZvaWQpIHsKICAgICByZWN2KDAsIDAsIDAsIDApOwogICAgIHJldHVybiAwOwogfSIgY3VybF9jdl9yZWN2KQogaWYoY3VybF9jdl9yZWN2KQotICBpZihOT1QgREVGSU5FRCBjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIE9SICIke2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3N9IiBTVFJFUVVBTCAidW5rbm93biIpCisgIGlmKE5PVCBERUZJTkVEIGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MgT1IgY3VybF9jdl9mdW5jX3JlY3ZfYXJncyBTVFJFUVVBTCAidW5rbm93biIpCiAgICAgZm9yZWFjaChyZWN2X3JldHYgImludCIgInNzaXplX3QiICkKICAgICAgIGZvcmVhY2gocmVjdl9hcmcxICJTT0NLRVQiICJpbnQiICkKICAgICAgICAgZm9yZWFjaChyZWN2X2FyZzIgImNoYXIgKiIgInZvaWQgKiIgKQpAQCAtNDIsNiArNzAsOSBAQAogICAgICAgICAgICAgICAgIHVuc2V0KGN1cmxfY3ZfZnVuY19yZWN2X3Rlc3QgQ0FDSEUpCiAgICAgICAgICAgICAgICAgY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIgogICAgICAgICAgICAgICAgICAgJHtfc291cmNlX2VwaWxvZ3VlfQorICAgICAgICAgICAgICAgICAgI2lmZGVmIFdJTlNPQ0tfQVBJX0xJTktBR0UKKyAgICAgICAgICAgICAgICAgIFdJTlNPQ0tfQVBJX0xJTktBR0UKKyAgICAgICAgICAgICAgICAgICNlbmRpZgogICAgICAgICAgICAgICAgICAgZXh0ZXJuICR7cmVjdl9yZXR2fSAke3NpZ25hdHVyZV9jYWxsX2NvbnZ9CiAgICAgICAgICAgICAgICAgICByZWN2KCR7cmVjdl9hcmcxfSwgJHtyZWN2X2FyZzJ9LCAke3JlY3ZfYXJnM30sICR7cmVjdl9hcmc0fSk7CiAgICAgICAgICAgICAgICAgICBpbnQgbWFpbih2b2lkKSB7CkBAIC04MSwxNSArMTEyLDI0IEBACiAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5bXixdKixbXixdKixbXixdKixbXixdKiwoW14sXSopJCIgIlxcMSIgUkVDVl9UWVBFX1JFVFYgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iKQogICBlbmRpZigpCiAKLSAgaWYoIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iIFNUUkVRVUFMICJ1bmtub3duIikKKyAgaWYoY3VybF9jdl9mdW5jX3JlY3ZfYXJncyBTVFJFUVVBTCAidW5rbm93biIpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3IgcmVjdiBhcmdzIikKICAgZW5kaWYoKQogZWxzZSgpCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBsaW5rIGZ1bmN0aW9uIHJlY3YiKQogZW5kaWYoKQogc2V0KGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iIENBQ0hFIElOVEVSTkFMICJBcmd1bWVudHMgZm9yIHJlY3YiKQorZW5kaWYoKQogc2V0KEhBVkVfUkVDViAxKQogCitpZigxKSAjIENNYWtlIGhhcmQtY29kZXMgdGhlc2UKKyAgc2V0KFNFTkRfUVVBTF9BUkcyICIgIikKKyAgc2V0KFNFTkRfVFlQRV9BUkcxICJjdXJsX3NvY2tldF90IikKKyAgc2V0KFNFTkRfVFlQRV9BUkcyICJjaGFyICoiKQorICBzZXQoU0VORF9UWVBFX0FSRzMgInNpemVfdCIpCisgIHNldChTRU5EX1RZUEVfQVJHNCAiaW50IikKKyAgc2V0KFNFTkRfVFlQRV9SRVRWICJzc2l6ZV90IikKK2Vsc2UoKQogY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIiR7X3NvdXJjZV9lcGlsb2d1ZX0KIGludCBtYWluKHZvaWQpIHsKICAgICBzZW5kKDAsIDAsIDAsIDApOwpAQCAtMTA2LDYgKzE0Niw5IEBACiAgICAgICAgICAgICAgICAgdW5zZXQoY3VybF9jdl9mdW5jX3NlbmRfdGVzdCBDQUNIRSkKICAgICAgICAgICAgICAgICBjaGVja19jX3NvdXJjZV9jb21waWxlcygiCiAgICAgICAgICAgICAgICAgICAke19zb3VyY2VfZXBpbG9ndWV9CisgICAgICAgICAgICAgICAgICAjaWZkZWYgV0lOU09DS19BUElfTElOS0FHRQorICAgICAgICAgICAgICAgICAgV0lOU09DS19BUElfTElOS0FHRQorICAgICAgICAgICAgICAgICAgI2VuZGlmCiAgICAgICAgICAgICAgICAgICBleHRlcm4gJHtzZW5kX3JldHZ9ICR7c2lnbmF0dXJlX2NhbGxfY29udn0KICAgICAgICAgICAgICAgICAgIHNlbmQoJHtzZW5kX2FyZzF9LCAke3NlbmRfYXJnMn0sICR7c2VuZF9hcmczfSwgJHtzZW5kX2FyZzR9KTsKICAgICAgICAgICAgICAgICAgIGludCBtYWluKHZvaWQpIHsKQEAgLTE1Niw2ICsxOTksNyBAQAogICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gbGluayBmdW5jdGlvbiBzZW5kIikKIGVuZGlmKCkKIHNldChjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzICIke2N1cmxfY3ZfZnVuY19zZW5kX2FyZ3N9IiBDQUNIRSBJTlRFUk5BTCAiQXJndW1lbnRzIGZvciBzZW5kIikKK2VuZGlmKCkKIHNldChIQVZFX1NFTkQgMSkKIAogY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIiR7X3NvdXJjZV9lcGlsb2d1ZX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZQppbmRleCAyZGJlMWJiLi43YzAyMGJkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9QbGF0Zm9ybXMvV2luZG93c0NhY2hlLmNtYWtlCkBAIC0xLDMgKzEsMjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGlmKE5PVCBVTklYKQogICBpZihXSU4zMikKICAgICBzZXQoSEFWRV9MSUJETCAwKQpAQCAtNyw3ICsyOCw2IEBACiAgICAgc2V0KEhBVkVfTElCTlNMIDApCiAgICAgc2V0KEhBVkVfR0VUSE9TVE5BTUUgMSkKICAgICBzZXQoSEFWRV9MSUJaIDApCi0gICAgc2V0KEhBVkVfTElCQ1JZUFRPIDApCiAKICAgICBzZXQoSEFWRV9ETE9QRU4gMCkKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9VdGlsaXRpZXMuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1V0aWxpdGllcy5jbWFrZQppbmRleCA1Y2IxZDQ0Li41OWIxN2QwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1V0aWxpdGllcy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1V0aWxpdGllcy5jbWFrZQpAQCAtMSwxMyArMSwzMyBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBGaWxlIGNvbnRhaW5pbmcgdmFyaW91cyB1dGlsaXRpZXMKIAogIyBSZXR1cm5zIGEgbGlzdCBvZiBhcmd1bWVudHMgdGhhdCBldmFsdWF0ZSB0byB0cnVlCiBmdW5jdGlvbihjb3VudF90cnVlIG91dHB1dF9jb3VudF92YXIpCi0gIHNldChsc3QpCisgIHNldChsc3RfbGVuIDApCiAgIGZvcmVhY2gob3B0aW9uX3ZhciBJTiBMSVNUUyBBUkdOKQogICAgIGlmKCR7b3B0aW9uX3Zhcn0pCi0gICAgICBsaXN0KEFQUEVORCBsc3QgJHtvcHRpb25fdmFyfSkKKyAgICAgIG1hdGgoRVhQUiBsc3RfbGVuICIke2xzdF9sZW59ICsgMSIpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKLSAgbGlzdChMRU5HVEggbHN0IGxzdF9sZW4pCiAgIHNldCgke291dHB1dF9jb3VudF92YXJ9ICR7bHN0X2xlbn0gUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4gYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbgppbmRleCA1MTc4ZmQ4Li43NGU1NmEyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbgorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbgpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpZihOT1QgRVhJU1RTICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQC9pbnN0YWxsX21hbmlmZXN0LnR4dCIpCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNhbm5vdCBmaW5kIGluc3RhbGwgbWFuaWZlc3Q6IEBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAL2luc3RhbGxfbWFuaWZlc3QudHh0IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvY3VybC1jb25maWcuY21ha2UuaW4gYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL2N1cmwtY29uZmlnLmNtYWtlLmluCmluZGV4IDEyOTRlMTcuLmFlOGNjMzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvY3VybC1jb25maWcuY21ha2UuaW4KKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jdXJsLWNvbmZpZy5jbWFrZS5pbgpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBAUEFDS0FHRV9JTklUQAogCiBpbmNsdWRlKENNYWtlRmluZERlcGVuZGVuY3lNYWNybykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlTGlzdHMudHh0CmluZGV4IGJjOGE3ZGMuLmQzMjdmNTUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZUxpc3RzLnR4dApAQCAtNSw2ICs1LDcgQEAKIHNldChCVUlMRF9TSEFSRURfTElCUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiKQogc2V0KENNQUtFX1VTRV9HU1NBUEkgT0ZGIENBQ0hFIElOVEVSTkFMICJEaXNhYmxlIGN1cmwgZ3NzYXBpIikKIHNldChDTUFLRV9VU0VfTElCU1NIMiBPRkYgQ0FDSEUgSU5URVJOQUwgIkRpc2FibGUgY3VybCBsaWJzc2gyIikKK3NldChDTUFLRV9VU0VfTElCU1NIIE9GRikKIHNldChDTUFLRV9VU0VfT1BFTkxEQVAgT0ZGIENBQ0hFIElOVEVSTkFMICJObyBjdXJsIE9wZW5MREFQIikKIHNldChDVVJMX0RJU0FCTEVfQ09PS0lFUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkRvIG5vdCBkaXNhYmxlIGN1cmwgY29va2llIHN1cHBvcnQiKQogc2V0KENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBPRkYgQ0FDSEUgSU5URVJOQUwgIkRvIG5vdCBkaXNhYmxlIGN1cmwgY3J5cHRvIGF1dGgiKQpAQCAtMjMsMTggKzI0LDI2IEBACiBzZXQoQ1VSTF9ESVNBQkxFX1RFTE5FVCBPTiBDQUNIRSBJTlRFUk5BTCAiRGlzYWJsZSBjdXJsIHRlbG5ldCBwcm90b2NvbD8iKQogc2V0KENVUkxfRElTQUJMRV9URlRQIE9OIENBQ0hFIElOVEVSTkFMICJEaXNhYmxlIGN1cmwgdGZ0cCBwcm90b2NvbD8iKQogc2V0KENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MgT0ZGIENBQ0hFIElOVEVSTkFMICJEbyBub3QgZGlzYWJsZSBjdXJsIHZlcmJvc2l0eSIpCitzZXQoQ1VSTF9FTkFCTEVfTVFUVCBPRkYpCiBzZXQoQ1VSTF9ISURERU5fU1lNQk9MUyBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgaGlkZGVuIHN5bWJvbHMiKQorc2V0KENVUkxfTFRPIE9GRiBDQUNIRSBJTlRFUk5BTCAiVHVybiBvbiBjb21waWxlciBMaW5rIFRpbWUgT3B0aW1pemF0aW9ucyIpCitzZXQoQ1VSTF9TVEFUSUNfQ1JUIE9GRiBDQUNIRSBJTlRFUk5BTCAiU2V0IHRvIE9OIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBzdGF0aWMgQ1JUIG9uIFdpbmRvd3MgKC9NVCkuIikKIHNldChDVVJMX1dFUlJPUiBPRkYgQ0FDSEUgSU5URVJOQUwgIlR1cm4gY29tcGlsZXIgd2FybmluZ3MgaW50byBlcnJvcnMiKQogc2V0KERJU0FCTEVEX1RIUkVBRFNBRkUgT0ZGIENBQ0hFIElOVEVSTkFMICJDdXJsIGNhbiB1c2UgdGhyZWFkLXNhZmUgZnVuY3Rpb25zIikKIHNldChFTkFCTEVfQVJFUyBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgYy1hcmVzIHN1cHBvcnQiKQorc2V0KEVOQUJMRV9BTFRfU1ZDIE9GRikKIHNldChFTkFCTEVfQ1VSTERFQlVHIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBUcmFja01lbW9yeSBmZWF0dXJlcyIpCiBzZXQoRU5BQkxFX0RFQlVHIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBkZWJ1ZyBmZWF0dXJlcyIpCitzZXQoRU5BQkxFX0lORVRfUFRPTiBPRkYgQ0FDSEUgSU5URVJOQUwgIlNldCB0byBPRkYgdG8gcHJldmVudCB1c2FnZSBvZiBpbmV0X3B0b24gd2hlbiBidWlsZGluZyBhZ2FpbnN0IG1vZGVybiBTREtzIHdoaWxlIHN0aWxsIHJlcXVpcmluZyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgV2luZG93cyB2ZXJzaW9ucywgc3VjaCBhcyBXaW5kb3dzIFhQLCBXaW5kb3dzIFNlcnZlciAyMDAzIGV0Yy4iKQogc2V0KEVOQUJMRV9JUFY2IE9OIENBQ0hFIElOVEVSTkFMICJFbmFibGUgY3VybCBJUHY2IHN1cHBvcnQgZGV0ZWN0aW9uIikKIHNldChFTkFCTEVfTUFOVUFMIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBidWlsdC1pbiBtYW51YWwiKQogc2V0KEVOQUJMRV9USFJFQURFRF9SRVNPTFZFUiBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cCIpCiBzZXQoRU5BQkxFX1VOSVhfU09DS0VUUyBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgVW5peCBkb21haW4gc29ja2V0cyBzdXBwb3J0IikKIHNldChIVFRQX09OTFkgT0ZGIENBQ0hFIElOVEVSTkFMICJDdXJsIGlzIG5vdCBodHRwLW9ubHkiKQogc2V0KFBJQ0tZX0NPTVBJTEVSIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHBpY2t5IGNvbXBpbGVyIG9wdGlvbnMiKQorc2V0KFVTRV9OR0hUVFAyIE9OKQorc2V0KFVTRV9OR1RDUDIgT0ZGKQorc2V0KFVTRV9RVUlDSEUgT0ZGKQogc2V0KFVTRV9XSU4zMl9MREFQIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBXaW5kb3dzIExEQVAiKQogaWYoQ01BS0VfVVNFX09QRU5TU0wpCiBlbHNlaWYoV0lOMzIpCkBAIC02MCw2ICs2OSw5IEBACiAgIHVuc2V0KENNQUtFX1VTRV9EQVJXSU5TU0wgQ0FDSEUpCiBlbmRpZigpCiBzZXQoQ01BS0VfVVNFX01CRURUTFMgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgbWJlZFRMUyBmb3IgU1NML1RMUyIpCitzZXQoQ01BS0VfVVNFX0JFQVJTU0wgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgQmVhclNTTCBmb3IgU1NML1RMUyIpCitzZXQoQ01BS0VfVVNFX05TUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSBOU1MgZm9yIFNTTC9UTFMiKQorc2V0KENNQUtFX1VTRV9XT0xGU1NMIE9GRikKIAogIyBXaW5kb3dzIFZpc3RhIGFuZCBhYm92ZSBoYXZlIGluZXRfcHRvbiwgYnV0IHRoaXMgd2lsbCBsaW5rIG9uCiAjIG9sZGVyIHZlcnNpb25zIGFuZCB0aGVuIHRoZSBleGVjdXRhYmxlIHdpbGwgZmFpbCB0byBsYXVuY2ggYXQKQEAgLTkxLDcgKzEwMyw3IEBACiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogIwotIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogIwogIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMTIsNyArMTI0LDYgQEAKICMgVGhlIG91dHB1dCAuc28gZmlsZSBsYWNrcyB0aGUgc29uYW1lIG51bWJlciB3aGljaCB3ZSBjdXJyZW50bHkgaGF2ZSB3aXRoaW4gdGhlIGxpYi9NYWtlZmlsZS5hbSBmaWxlCiAjIEFkZCBmdWxsICg0IG9yIDUgbGlicykgU1NMIHN1cHBvcnQKICMgQWRkIElOU1RBTEwgdGFyZ2V0IChFWFRSQV9ESVNUIHZhcmlhYmxlcyBpbiBNYWtlZmlsZS5hbSBtYXkgYmUgbW92ZWQgdG8gTWFrZWZpbGUuaW5jIHNvIHRoYXQgQ01ha2UvQ1BhY2sgaXMgYXdhcmUgb2Ygd2hhdCdzIHRvIGluY2x1ZGUpLgotIyBBZGQgQ1Rlc3RzKD8pCiAjIENoZWNrIG9uIGFsbCBwb3NzaWJsZSBwbGF0Zm9ybXMKICMgVGVzdCB3aXRoIGFzIG1hbnkgY29uZmlndXJhdGlvbnMgcG9zc2libGUgKFdpdGggb3Igd2l0aG91dCBhbnkgb3B0aW9uKQogIyBDcmVhdGUgc2NyaXB0cyB0aGF0IGhlbHAga2VlcGluZyB0aGUgQ01ha2UgYnVpbGQgc3lzdGVtIHVwIHRvIGRhdGUgKHRvIHJlZHVjZSBtYWludGVuYW5jZSkuIEFjY29yZGluZyB0byBUZXRldGVzdDoKQEAgLTEzNiw3ICsxNDcsNyBAQAogbWVzc2FnZShXQVJOSU5HICJ0aGUgY3VybCBjbWFrZSBidWlsZCBzeXN0ZW0gaXMgcG9vcmx5IG1haW50YWluZWQuIEJlIGF3YXJlIikKIGVuZGlmKCkKIAotZmlsZShSRUFEICR7Q1VSTF9TT1VSQ0VfRElSfS9pbmNsdWRlL2N1cmwvY3VybHZlci5oIENVUkxfVkVSU0lPTl9IX0NPTlRFTlRTKQorZmlsZShTVFJJTkdTICR7Q1VSTF9TT1VSQ0VfRElSfS9pbmNsdWRlL2N1cmwvY3VybHZlci5oIENVUkxfVkVSU0lPTl9IX0NPTlRFTlRTIFJFR0VYICIjZGVmaW5lIExJQkNVUkxfVkVSU0lPTiggfF9OVU0gKSIpCiBzdHJpbmcoUkVHRVggTUFUQ0ggIiNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OIFwiW15cIl0qIgogICBDVVJMX1ZFUlNJT04gJHtDVVJMX1ZFUlNJT05fSF9DT05URU5UU30pCiBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW15cIl0rXCIiICIiIENVUkxfVkVSU0lPTiAke0NVUkxfVkVSU0lPTn0pCkBAIC0xNjgsNyArMTc5LDIwIEBACiBpZihXSU4zMikKICAgb3B0aW9uKENVUkxfU1RBVElDX0NSVCAiU2V0IHRvIE9OIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBzdGF0aWMgQ1JUIG9uIFdpbmRvd3MgKC9NVCkuIiBPRkYpCiAgIG9wdGlvbihFTkFCTEVfSU5FVF9QVE9OICJTZXQgdG8gT0ZGIHRvIHByZXZlbnQgdXNhZ2Ugb2YgaW5ldF9wdG9uIHdoZW4gYnVpbGRpbmcgYWdhaW5zdCBtb2Rlcm4gU0RLcyB3aGlsZSBzdGlsbCByZXF1aXJpbmcgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFdpbmRvd3MgdmVyc2lvbnMsIHN1Y2ggYXMgV2luZG93cyBYUCwgV2luZG93cyBTZXJ2ZXIgMjAwMyBldGMuIiBPTikKKyAgaWYoMCkgIyBUaGlzIGNvZGUgbm90IG5lZWRlZCBmb3IgYnVpbGRpbmcgd2l0aGluIENNYWtlLgorICBzZXQoQ1VSTF9UQVJHRVRfV0lORE9XU19WRVJTSU9OICIiIENBQ0hFIFNUUklORyAiTWluaW11bSB0YXJnZXQgV2luZG93cyB2ZXJzaW9uIGFzIGhleCBzdHJpbmciKQorICBpZihDVVJMX1RBUkdFVF9XSU5ET1dTX1ZFUlNJT04pCisgICAgYWRkX2RlZmluaXRpb25zKC1EX1dJTjMyX1dJTk5UPSR7Q1VSTF9UQVJHRVRfV0lORE9XU19WRVJTSU9OfSkKKyAgZWxzZWlmKEVOQUJMRV9JTkVUX1BUT04pCisgICAgIyBfV0lOMzJfV0lOTlRfVklTVEEgKDB4MDYwMCkKKyAgICBhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9MHgwNjAwKQorICBlbHNlKCkKKyAgICAjIF9XSU4zMl9XSU5OVF9XSU5YUCAoMHgwNTAxKQorICAgIGFkZF9kZWZpbml0aW9ucygtRF9XSU4zMl9XSU5OVD0weDA1MDEpCisgIGVuZGlmKCkKKyAgZW5kaWYoKQogZW5kaWYoKQorb3B0aW9uKENVUkxfTFRPICJUdXJuIG9uIGNvbXBpbGVyIExpbmsgVGltZSBPcHRpbWl6YXRpb25zIiBPRkYpCiAKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KIGNtYWtlX2RlcGVuZGVudF9vcHRpb24oRU5BQkxFX1RIUkVBREVEX1JFU09MVkVSICJTZXQgdG8gT04gdG8gZW5hYmxlIHRocmVhZGVkIEROUyBsb29rdXAiCkBAIC0xODQsOCArMjA4LDkgQEAKICAgICBmb3JlYWNoKF9DQ09QVCAtcGVkYW50aWMgLVdhbGwgLVcgLVdwb2ludGVyLWFyaXRoIC1Xd3JpdGUtc3RyaW5ncyAtV3VudXNlZCAtV3NoYWRvdyAtV2lubGluZSAtV25lc3RlZC1leHRlcm5zIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVdmbG9hdC1lcXVhbCAtV25vLW11bHRpY2hhciAtV3NpZ24tY29tcGFyZSAtV3VuZGVmIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwgLVdlbmRpZi1sYWJlbHMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV3N0cmljdC1hbGlhc2luZz0zIC1XY2FzdC1hbGlnbiAtV3R5cGUtbGltaXRzIC1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uIC1XbWlzc2luZy1wYXJhbWV0ZXItdHlwZSAtV2VtcHR5LWJvZHkgLVdjbG9iYmVyZWQgLVdpZ25vcmVkLXF1YWxpZmllcnMgLVdjb252ZXJzaW9uIC1Xbm8tc2lnbi1jb252ZXJzaW9uIC1XdmxhIC1XZG91YmxlLXByb21vdGlvbiAtV25vLXN5c3RlbS1oZWFkZXJzIC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0KQogICAgICAgIyBzdXJwcmlzaW5nbHksIENIRUNLX0NfQ09NUElMRVJfRkxBRyBuZWVkcyBhIG5ldyB2YXJpYWJsZSB0byBzdG9yZSBlYWNoIG5ldwogICAgICAgIyB0ZXN0IHJlc3VsdCBpbi4KLSAgICAgIGNoZWNrX2NfY29tcGlsZXJfZmxhZygke19DQ09QVH0gT1BUJHtfQ0NPUFR9KQotICAgICAgaWYoT1BUJHtfQ0NPUFR9KQorICAgICAgc3RyaW5nKE1BS0VfQ19JREVOVElGSUVSICJPUFQke19DQ09QVH0iIF9vcHR2YXJuYW1lKQorICAgICAgY2hlY2tfY19jb21waWxlcl9mbGFnKCR7X0NDT1BUfSAke19vcHR2YXJuYW1lfSkKKyAgICAgIGlmKCR7X29wdHZhcm5hbWV9KQogICAgICAgICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAke19DQ09QVH0iKQogICAgICAgZW5kaWYoKQogICAgIGVuZGZvcmVhY2goKQpAQCAtMjE2LDcgKzI0MSw2IEBACiAgIHNldChVU0VfQVJFUyAxKQogICBmaW5kX3BhY2thZ2UoQ0FSRVMgUkVRVUlSRUQpCiAgIGxpc3QoQVBQRU5EIENVUkxfTElCUyAke0NBUkVTX0xJQlJBUll9KQotICBzZXQoQ1VSTF9MSUJTICR7Q1VSTF9MSUJTfSAke0NBUkVTX0xJQlJBUll9KQogZW5kaWYoKQogCiBpZigwKSAjIFRoaXMgY29kZSBub3QgbmVlZGVkIGZvciBidWlsZGluZyB3aXRoaW4gQ01ha2UuCkBAIC0yNTUsNiArMjc5LDggQEAKIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX1NNVFApCiBvcHRpb24oQ1VSTF9ESVNBQkxFX0dPUEhFUiAidG8gZGlzYWJsZSBHb3BoZXIiIE9GRikKIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX0dPUEhFUikKK29wdGlvbihDVVJMX0VOQUJMRV9NUVRUICJ0byBlbmFibGUgTVFUVCIgT0ZGKQorbWFya19hc19hZHZhbmNlZChDVVJMX0VOQUJMRV9NUVRUKQogCiBpZihIVFRQX09OTFkpCiAgIHNldChDVVJMX0RJU0FCTEVfRlRQIE9OKQpAQCAtMjY3LDYgKzI5Myw3IEBACiAgIHNldChDVVJMX0RJU0FCTEVfUlRTUCBPTikKICAgc2V0KENVUkxfRElTQUJMRV9QT1AzIE9OKQogICBzZXQoQ1VSTF9ESVNBQkxFX0lNQVAgT04pCisgIHNldChDVVJMX0RJU0FCTEVfU01CIE9OKQogICBzZXQoQ1VSTF9ESVNBQkxFX1NNVFAgT04pCiAgIHNldChDVVJMX0RJU0FCTEVfR09QSEVSIE9OKQogZW5kaWYoKQpAQCAtMzAzLDEwICszMzAsNiBAQAogICAgIE9OICJOUk9GRl9VU0VGVUw7UEVSTF9GT1VORCIKICAgICBPRkYpCiAKLWlmKE5PVCBQRVJMX0ZPVU5EKQotICBtZXNzYWdlKFNUQVRVUyAiUGVybCBub3QgZm91bmQsIHRlc3RpbmcgZGlzYWJsZWQuIikKLSAgc2V0KEJVSUxEX1RFU1RJTkcgT0ZGKQotZW5kaWYoKQogaWYoRU5BQkxFX01BTlVBTCkKICAgc2V0KFVTRV9NQU5VQUwgT04pCiBlbmRpZigpCkBAIC0zMTcsNiArMzQwLDcgQEAKIHNldChDTUFLRV9SRVFVSVJFRF9GTEFHUyAke0NNQUtFX0FOU0lfQ0ZMQUdTfSkKIAogaWYoQ1VSTF9TVEFUSUNfQ1JUKQorICBzZXQoQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUlkgIk11bHRpVGhyZWFkZWQkPCQ8Q09ORklHOkRlYnVnPjpEZWJ1Zz4iKQogICBzZXQoQ01BS0VfQ19GTEFHU19SRUxFQVNFICIke0NNQUtFX0NfRkxBR1NfUkVMRUFTRX0gL01UIikKICAgc2V0KENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL01UZCIpCiBlbmRpZigpCkBAIC0zMzIsNiArMzU2LDcgQEAKIGVuZGlmKCkKIAogIyBJbmNsdWRlIGFsbCB0aGUgbmVjZXNzYXJ5IGZpbGVzIGZvciBtYWNyb3MKK2luY2x1ZGUoQ01ha2VQdXNoQ2hlY2tTdGF0ZSkKIGluY2x1ZGUoQ2hlY2tGdW5jdGlvbkV4aXN0cykKIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZSkKIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZXMpCkBAIC0zNTksNyArMzg0LDcgQEAKIAogIyBDaGVjayBmb3IgYWxsIG5lZWRlZCBsaWJyYXJpZXMKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KLWNoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiZGwiICAgICBkbG9wZW4gICAgICAgSEFWRV9MSUJETCkKK2NoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiJHtDTUFLRV9ETF9MSUJTfSIgZGxvcGVuIEhBVkVfTElCREwpCiBlbHNlKCkKICAgIyBVc2UgdGhlIGNtYWtlLWRlZmluZWQgZGwgbGlicyBhcyBkbCBpcyBzaG91bGQgbm90IGJlIHVzZWQKICAgIyBvbiBIUFVYLCBidXQgcmF0aGVyIGRsZCB0aGlzIGF2b2lkcyBhIHdhcm5pbmcKQEAgLTM5MCw3ICs0MTUsNyBAQAogZW5kaWYoKQogCiAjIGNoZWNrIFNTTCBsaWJyYXJpZXMKLSMgVE9ETyBzdXBwb3J0IEdOVVRMUywgTlNTLCBQT0xBUlNTTCwgQ1lBU1NMCisjIFRPRE8gc3VwcG9ydCBHbnVUTFMKIAogaWYoQVBQTEUpCiAgIG9wdGlvbihDTUFLRV9VU0VfU0VDVFJBTlNQICJlbmFibGUgQXBwbGUgT1MgbmF0aXZlIFNTTC9UTFMiIE9GRikKQEAgLTQwMSw5ICs0MjYsMTIgQEAKICAgICBDTUFLRV9VU0VfV0lOU1NMIE9GRikKIGVuZGlmKCkKIG9wdGlvbihDTUFLRV9VU0VfTUJFRFRMUyAiRW5hYmxlIG1iZWRUTFMgZm9yIFNTTC9UTFMiIE9GRikKK29wdGlvbihDTUFLRV9VU0VfQkVBUlNTTCAiRW5hYmxlIEJlYXJTU0wgZm9yIFNTTC9UTFMiIE9GRikKK29wdGlvbihDTUFLRV9VU0VfTlNTICJFbmFibGUgTlNTIGZvciBTU0wvVExTIiBPRkYpCitvcHRpb24oQ01BS0VfVVNFX1dPTEZTU0wgImVuYWJsZSB3b2xmU1NMIGZvciBTU0wvVExTIiBPRkYpCiAKIHNldChvcGVuc3NsX2RlZmF1bHQgT04pCi1pZihXSU4zMiBPUiBDTUFLRV9VU0VfU0VDVFJBTlNQIE9SIENNQUtFX1VTRV9XSU5TU0wgT1IgQ01BS0VfVVNFX01CRURUTFMpCitpZihXSU4zMiBPUiBDTUFLRV9VU0VfU0VDVFJBTlNQIE9SIENNQUtFX1VTRV9XSU5TU0wgT1IgQ01BS0VfVVNFX01CRURUTFMgT1IgQ01BS0VfVVNFX05TUyBPUiBDTUFLRV9VU0VfV09MRlNTTCkKICAgc2V0KG9wZW5zc2xfZGVmYXVsdCBPRkYpCiBlbmRpZigpCiAKQEAgLTQxMiw2ICs0NDAsOSBAQAogICBDTUFLRV9VU0VfU0VDVFJBTlNQCiAgIENNQUtFX1VTRV9PUEVOU1NMCiAgIENNQUtFX1VTRV9NQkVEVExTCisgIENNQUtFX1VTRV9CRUFSU1NMCisgIENNQUtFX1VTRV9OU1MKKyAgQ01BS0VfVVNFX1dPTEZTU0wKICkKIGlmKGVuYWJsZWRfc3NsX29wdGlvbnNfY291bnQgR1JFQVRFUiAiMSIpCiAgIHNldChDVVJMX1dJVEhfTVVMVElfU1NMIE9OKQpAQCAtNDU3LDggKzQ4OCw2IEBACiAgIGVuZGlmKCkKICAgc2V0KFNTTF9FTkFCTEVEIE9OKQogICBzZXQoVVNFX09QRU5TU0wgT04pCi0gIHNldChIQVZFX0xJQkNSWVBUTyBPTikKLSAgc2V0KEhBVkVfTElCU1NMIE9OKQogICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtPUEVOU1NMX0xJQlJBUklFU30pCiAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtPUEVOU1NMX0lOQ0xVREVfRElSfSkKIApAQCAtNDkyLDYgKzUyMSwzNSBAQAogICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7TUJFRFRMU19JTkNMVURFX0RJUlN9KQogZW5kaWYoKQogCitpZihDTUFLRV9VU0VfQkVBUlNTTCkKKyAgZmluZF9wYWNrYWdlKEJlYXJTU0wgUkVRVUlSRUQpCisgIHNldChTU0xfRU5BQkxFRCBPTikKKyAgc2V0KFVTRV9CRUFSU1NMIE9OKQorICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtCRUFSU1NMX0xJQlJBUll9KQorICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7QkVBUlNTTF9JTkNMVURFX0RJUlN9KQorZW5kaWYoKQorCitpZihDTUFLRV9VU0VfV09MRlNTTCkKKyAgZmluZF9wYWNrYWdlKFdvbGZTU0wgUkVRVUlSRUQpCisgIHNldChTU0xfRU5BQkxFRCBPTikKKyAgc2V0KFVTRV9XT0xGU1NMIE9OKQorICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtXb2xmU1NMX0xJQlJBUklFU30pCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXb2xmU1NMX0lOQ0xVREVfRElSU30pCitlbmRpZigpCisKK2lmKENNQUtFX1VTRV9OU1MpCisgIGZpbmRfcGFja2FnZShOU1MgUkVRVUlSRUQpCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtOU1NfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TlNTX0xJQlJBUklFU30pCisgIHNldChTU0xfRU5BQkxFRCBPTikKKyAgc2V0KFVTRV9OU1MgT04pCisgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtOU1NfSU5DTFVERV9ESVJTfSkKKyAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke05TU19MSUJSQVJJRVN9KQorICBjaGVja19zeW1ib2xfZXhpc3RzKFBLMTFfQ3JlYXRlTWFuYWdlZEdlbmVyaWNPYmplY3QgInBrMTFwdWIuaCIgSEFWRV9QSzExX0NSRUFURU1BTkFHRURHRU5FUklDT0JKRUNUKQorICBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQorZW5kaWYoKQorCiBvcHRpb24oVVNFX05HSFRUUDIgIlVzZSBOZ2h0dHAyIGxpYnJhcnkiIE9GRikKIGlmKFVTRV9OR0hUVFAyKQogICBmaW5kX3BhY2thZ2UoTkdIVFRQMiBSRVFVSVJFRCkKQEAgLTQ5OSw2ICs1NTcsNjAgQEAKICAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TkdIVFRQMl9MSUJSQVJJRVN9KQogZW5kaWYoKQogCitmdW5jdGlvbihDaGVja1F1aWNTdXBwb3J0SW5PcGVuU1NMKQorICAjIEJlIHN1cmUgdGhhdCB0aGUgT3BlblNTTCBsaWJyYXJ5IGFjdHVhbGx5IHN1cHBvcnRzIFFVSUMuCisgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgICAiJHtPUEVOU1NMX0lOQ0xVREVfRElSfSIpCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgICIke09QRU5TU0xfTElCUkFSSUVTfSIpCisgIGNoZWNrX3N5bWJvbF9leGlzdHMoU1NMX0NUWF9zZXRfcXVpY19tZXRob2QgIm9wZW5zc2wvc3NsLmgiIEhBVkVfU1NMX0NUWF9TRVRfUVVJQ19NRVRIT0QpCisgIGlmKE5PVCBIQVZFX1NTTF9DVFhfU0VUX1FVSUNfTUVUSE9EKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlFVSUMgc3VwcG9ydCBpcyBtaXNzaW5nIGluIE9wZW5TU0wvYm9yaW5nc3NsLiBUcnkgc2V0dGluZyAtRE9QRU5TU0xfUk9PVF9ESVIiKQorICBlbmRpZigpCisgIGNtYWtlX3BvcF9jaGVja19zdGF0ZSgpCitlbmRmdW5jdGlvbigpCisKK29wdGlvbihVU0VfTkdUQ1AyICJVc2Ugbmd0Y3AyIGFuZCBuZ2h0dHAzIGxpYnJhcmllcyBmb3IgSFRUUC8zIHN1cHBvcnQiIE9GRikKK2lmKFVTRV9OR1RDUDIpCisgIGlmKFVTRV9PUEVOU1NMKQorICAgIGZpbmRfcGFja2FnZShOR1RDUDIgUkVRVUlSRUQgT3BlblNTTCkKKyAgICBDaGVja1F1aWNTdXBwb3J0SW5PcGVuU1NMKCkKKyAgZWxzZWlmKFVTRV9HTlVUTFMpCisgICAgIyBUT0RPIGFkZCBHbnVUTFMgc3VwcG9ydCBhcyB2dGxzIGxpYnJhcnkuCisgICAgZmluZF9wYWNrYWdlKE5HVENQMiBSRVFVSVJFRCBHbnVUTFMpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIm5ndGNwMiByZXF1aXJlcyBPcGVuU1NMIG9yIEdudVRMUyIpCisgIGVuZGlmKCkKKyAgc2V0KFVTRV9OR1RDUDIgT04pCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtOR1RDUDJfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TkdUQ1AyX0xJQlJBUklFU30pCisKKyAgZmluZF9wYWNrYWdlKE5HSFRUUDMgUkVRVUlSRUQpCisgIHNldChVU0VfTkdIVFRQMyBPTikKKyAgaW5jbHVkZV9kaXJlY3Rvcmllcygke05HSFRUUDNfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TkdIVFRQM19MSUJSQVJJRVN9KQorZW5kaWYoKQorCitvcHRpb24oVVNFX1FVSUNIRSAiVXNlIHF1aWNoZSBsaWJyYXJ5IGZvciBIVFRQLzMgc3VwcG9ydCIgT0ZGKQoraWYoVVNFX1FVSUNIRSkKKyAgaWYoVVNFX05HVENQMikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJPbmx5IG9uZSBIVFRQLzMgYmFja2VuZCBjYW4gYmUgc2VsZWN0ZWQhIikKKyAgZW5kaWYoKQorICBmaW5kX3BhY2thZ2UoUVVJQ0hFIFJFUVVJUkVEKQorICBDaGVja1F1aWNTdXBwb3J0SW5PcGVuU1NMKCkKKyAgc2V0KFVTRV9RVUlDSEUgT04pCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtRVUlDSEVfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7UVVJQ0hFX0xJQlJBUklFU30pCisgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgICAiJHtRVUlDSEVfSU5DTFVERV9ESVJTfSIpCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgICIke1FVSUNIRV9MSUJSQVJJRVN9IikKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhxdWljaGVfY29ubl9zZXRfcWxvZ19mZCAicXVpY2hlLmgiIEhBVkVfUVVJQ0hFX0NPTk5fU0VUX1FMT0dfRkQpCisgIGNtYWtlX3BvcF9jaGVja19zdGF0ZSgpCitlbmRpZigpCisKK2lmKFdJTjMyKQorICBzZXQoVVNFX1dJTjMyX0NSWVBUTyBPTikKK2VuZGlmKCkKKwogaWYoTk9UIENVUkxfRElTQUJMRV9MREFQKQogICBpZihXSU4zMikKICAgICBvcHRpb24oVVNFX1dJTjMyX0xEQVAgIlVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24iIE9OKQpAQCAtNjUzLDcgKzc2NSw3IEBACiBvcHRpb24oQ1VSTF9CUk9UTEkgIlNldCB0byBPTiB0byBlbmFibGUgYnVpbGRpbmcgY3VybCB3aXRoIGJyb3RsaSBzdXBwb3J0LiIgT0ZGKQogc2V0KEhBVkVfQlJPVExJIE9GRikKIGlmKENVUkxfQlJPVExJKQotICBmaW5kX3BhY2thZ2UoQlJPVExJIFFVSUVUKQorICBmaW5kX3BhY2thZ2UoQnJvdGxpIFFVSUVUKQogICBpZihCUk9UTElfRk9VTkQpCiAgICAgc2V0KEhBVkVfQlJPVExJIE9OKQogICAgIGxpc3QoQVBQRU5EIENVUkxfTElCUyAke0JST1RMSV9MSUJSQVJJRVN9KQpAQCAtNjk2LDYgKzgwOCwyMCBAQAogICBlbmRpZigpCiBlbmRpZigpCiAKKyMgbGlic3NoCitvcHRpb24oQ01BS0VfVVNFX0xJQlNTSCAiVXNlIGxpYlNTSCIgT0ZGKQorbWFya19hc19hZHZhbmNlZChDTUFLRV9VU0VfTElCU1NIKQoraWYoTk9UIEhBVkVfTElCU1NIMiBBTkQgQ01BS0VfVVNFX0xJQlNTSCkKKyAgZmluZF9wYWNrYWdlKGxpYnNzaCBDT05GSUcpCisgIGlmKGxpYnNzaF9GT1VORCkKKyAgICBtZXNzYWdlKFNUQVRVUyAiRm91bmQgbGlic3NoICR7bGlic3NoX1ZFUlNJT059IikKKyAgICAjIFVzZSBpbXBvcnRlZCB0YXJnZXQgZm9yIGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMuCisgICAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTIHNzaCkKKyAgICBzZXQoVVNFX0xJQlNTSCBPTikKKyAgICBzZXQoSEFWRV9MSUJTU0hfTElCU1NIX0ggMSkKKyAgZW5kaWYoKQorZW5kaWYoKQorCiBvcHRpb24oQ01BS0VfVVNFX0dTU0FQSSAiVXNlIEdTU0FQSSBpbXBsZW1lbnRhdGlvbiAocmlnaHQgbm93IG9ubHkgSGVpbWRhbCBpcyBzdXBwb3J0ZWQgd2l0aCBDTWFrZSBidWlsZCkiIE9GRikKIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfVVNFX0dTU0FQSSkKIApAQCAtNzY0LDYgKzg5MCw4IEBACiAgIHVuc2V0KFVTRV9VTklYX1NPQ0tFVFMgQ0FDSEUpCiBlbmRpZigpCiAKK29wdGlvbihFTkFCTEVfQUxUX1NWQyAiRW5hYmxlIGFsdC1zdmMgc3VwcG9ydCIgT0ZGKQorc2V0KFVTRV9BTFRTVkMgJHtFTkFCTEVfQUxUX1NWQ30pCiAKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KICMKQEAgLTc5Myw3ICs5MjEsOSBAQAogICB1bnNldChDVVJMX0NBX1BBVEggQ0FDSEUpCiBlbHNlaWYoIiR7Q1VSTF9DQV9QQVRIfSIgU1RSRVFVQUwgImF1dG8iKQogICB1bnNldChDVVJMX0NBX1BBVEggQ0FDSEUpCi0gIHNldChDVVJMX0NBX1BBVEhfQVVUT0RFVEVDVCBUUlVFKQorICBpZihOT1QgVVNFX05TUykKKyAgICBzZXQoQ1VSTF9DQV9QQVRIX0FVVE9ERVRFQ1QgVFJVRSkKKyAgZW5kaWYoKQogZWxzZSgpCiAgIHNldChDVVJMX0NBX1BBVEhfU0VUIFRSVUUpCiBlbmRpZigpCkBAIC04MzIsNyArOTYyLDcgQEAKIGVuZGlmKCkKIAogaWYoQ1VSTF9DQV9QQVRIX1NFVCBBTkQgTk9UIFVTRV9PUEVOU1NMIEFORCBOT1QgVVNFX01CRURUTFMpCi0gIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgbWVzc2FnZShTVEFUVVMKICAgICAgICAgICAiQ0EgcGF0aCBvbmx5IHN1cHBvcnRlZCBieSBPcGVuU1NMLCBHbnVUTFMgb3IgbWJlZCBUTFMuICIKICAgICAgICAgICAiU2V0IENVUkxfQ0FfUEFUSD1ub25lIG9yIGVuYWJsZSBvbmUgb2YgdGhvc2UgVExTIGJhY2tlbmRzLiIpCiBlbmRpZigpCkBAIC04NzYsNyArMTAwNiw2IEBACiBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJhcnBhL3RmdHAuaCIgICAgICBIQVZFX0FSUEFfVEZUUF9IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiYXNzZXJ0LmgiICAgICAgICAgSEFWRV9BU1NFUlRfSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImNyeXB0by5oIiAgICAgICAgIEhBVkVfQ1JZUFRPX0gpCi1jaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJkZXMuaCIgICAgICAgICAgICBIQVZFX0RFU19IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiZXJyLmgiICAgICAgICAgICAgSEFWRV9FUlJfSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImVycm5vLmgiICAgICAgICAgIEhBVkVfRVJSTk9fSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImZjbnRsLmgiICAgICAgICAgIEhBVkVfRkNOVExfSCkKQEAgLTkyNSwxOCArMTA1NCw4IEBACiAKIGNoZWNrX3R5cGVfc2l6ZShzaXplX3QgIFNJWkVPRl9TSVpFX1QpCiBjaGVja190eXBlX3NpemUoc3NpemVfdCAgU0laRU9GX1NTSVpFX1QpCi1jaGVja190eXBlX3NpemUoImxvbmcgbG9uZyIgIFNJWkVPRl9MT05HX0xPTkcpCi1jaGVja190eXBlX3NpemUoImxvbmciICBTSVpFT0ZfTE9ORykKLWNoZWNrX3R5cGVfc2l6ZSgic2hvcnQiICBTSVpFT0ZfU0hPUlQpCi1jaGVja190eXBlX3NpemUoImludCIgIFNJWkVPRl9JTlQpCi1jaGVja190eXBlX3NpemUoIl9faW50NjQiICBTSVpFT0ZfX19JTlQ2NCkKIGNoZWNrX3R5cGVfc2l6ZSgidGltZV90IiAgU0laRU9GX1RJTUVfVCkKIAotaWYoSEFWRV9TSVpFT0ZfTE9OR19MT05HKQotICBzZXQoSEFWRV9MT05HTE9ORyAxKQotICBzZXQoSEFWRV9MTCAxKQotZW5kaWYoKQotCiBmaW5kX2ZpbGUoUkFORE9NX0ZJTEUgdXJhbmRvbSAvZGV2KQogbWFya19hc19hZHZhbmNlZChSQU5ET01fRklMRSkKIApAQCAtOTgzLDYgKzExMDIsNyBAQAogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwd3VpZCAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFBXVUlEKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwd3VpZF9yICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFBXVUlEX1IpCiBjaGVja19zeW1ib2xfZXhpc3RzKGdldGV1aWQgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VURVVJRCkKK2NoZWNrX3N5bWJvbF9leGlzdHModXNsZWVwICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9VU0xFRVApCiBjaGVja19zeW1ib2xfZXhpc3RzKHV0aW1lICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVVRJTUUpCiBjaGVja19zeW1ib2xfZXhpc3RzKGdtdGltZV9yICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR01USU1FX1IpCiBjaGVja19zeW1ib2xfZXhpc3RzKGxvY2FsdGltZV9yICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfTE9DQUxUSU1FX1IpCkBAIC0xMDEwLDYgKzExMzAsNyBAQAogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwcm90b2J5bmFtZSAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRQUk9UT0JZTkFNRSkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ2V0cGVlcm5hbWUgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUEVFUk5BTUUpCiBjaGVja19zeW1ib2xfZXhpc3RzKGdldHNvY2tuYW1lICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFNPQ0tOQU1FKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhpZl9uYW1ldG9pbmRleCAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JRl9OQU1FVE9JTkRFWCkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ2V0cmxpbWl0ICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUkxJTUlUKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhzZXRsb2NhbGUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRVRMT0NBTEUpCiBjaGVja19zeW1ib2xfZXhpc3RzKHNldG1vZGUgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVE1PREUpCkBAIC0xMDE4LDIwICsxMTM5LDcgQEAKIGNoZWNrX3N5bWJvbF9leGlzdHMoaW9jdGwgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfSU9DVEwpCiBjaGVja19zeW1ib2xfZXhpc3RzKHNldHNvY2tvcHQgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVFNPQ0tPUFQpCiBjaGVja19mdW5jdGlvbl9leGlzdHMobWFjaF9hYnNvbHV0ZV90aW1lIEhBVkVfTUFDSF9BQlNPTFVURV9USU1FKQotCi0jIHN5bWJvbCBleGlzdHMgaW4gd2luMzIsIGJ1dCBmdW5jdGlvbiBkb2VzIG5vdC4KLWlmKFdJTjMyKQotICBpZihFTkFCTEVfSU5FVF9QVE9OKQotICAgIGNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhpbmV0X3B0b24gSEFWRV9JTkVUX1BUT04pCi0gICAgIyBfV0lOMzJfV0lOTlRfVklTVEEgKDB4MDYwMCkKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9MHgwNjAwKQotICBlbHNlKCkKLSAgICAjIF9XSU4zMl9XSU5OVF9XSU5YUCAoMHgwNTAxKQotICAgIGFkZF9kZWZpbml0aW9ucygtRF9XSU4zMl9XSU5OVD0weDA1MDEpCi0gIGVuZGlmKCkKLWVsc2UoKQotICBjaGVja19mdW5jdGlvbl9leGlzdHMoaW5ldF9wdG9uIEhBVkVfSU5FVF9QVE9OKQotZW5kaWYoKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhpbmV0X3B0b24gICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JTkVUX1BUT04pCiAKIGNoZWNrX3N5bWJvbF9leGlzdHMoZnNldHhhdHRyICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0ZTRVRYQVRUUikKIGlmKEhBVkVfRlNFVFhBVFRSKQpAQCAtMTI1NSw2ICsxMzYzLDIzIEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAoraWYoQ1VSTF9MVE8pCisgIGlmKENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuOSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJSZXF1ZXN0ZWQgTFRPIGJ1dCB5b3VyIGNtYWtlIHZlcnNpb24gJHtDTUFLRV9WRVJTSU9OfSBpcyB0byBvbGQuIFlvdSBuZWVkIGF0IGxlYXN0IDMuOSIpCisgIGVuZGlmKCkKKworICBjbWFrZV9wb2xpY3koU0VUIENNUDAwNjkgTkVXKQorCisgIGluY2x1ZGUoQ2hlY2tJUE9TdXBwb3J0ZWQpCisgIGNoZWNrX2lwb19zdXBwb3J0ZWQoUkVTVUxUIENVUkxfSEFTX0xUTyBPVVRQVVQgQ1VSTF9MVE9fRVJST1IgTEFOR1VBR0VTIEMpCisgIGlmKENVUkxfSEFTX0xUTykKKyAgICBtZXNzYWdlKFNUQVRVUyAiTFRPIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkxUTyB3YXMgcmVxdWVzdGVkIC0gYnV0IGNvbXBpbGVyIGRvZXNuJ3Qgc3VwcG9ydCBpdFxuJHtDVVJMX0xUT19FUlJPUn0iKQorICBlbmRpZigpCitlbmRpZigpCisKKwogIyBVZ2x5IChidXQgZnVuY3Rpb25hbCkgd2F5IHRvIGluY2x1ZGUgIk1ha2VmaWxlLmluYyIgYnkgdHJhbnNmb3JtaW5nIGl0ICg9IHJlZ2VuZXJhdGUgaXQpLgogZnVuY3Rpb24odHJhbnNmb3JtX21ha2VmaWxlX2luYyBJTlBVVF9GSUxFIE9VVFBVVF9GSUxFKQogICBmaWxlKFJFQUQgJHtJTlBVVF9GSUxFfSBNQUtFRklMRV9JTkNfVEVYVCkKQEAgLTEyNjgsNyArMTM5Myw3IEBACiAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJcXCRcXCgoW2EtekEtWl9dW2EtekEtWjAtOV9dKilcXCkiICJcJHtcXDF9IiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkgICAgIyBSZXBsYWNlICQoKSB3aXRoICR7fQogICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiQChbYS16QS1aX11bYS16QS1aMC05X10qKUAiICJcJHtcXDF9IiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkgICAgIyBSZXBsYWNlIEBAIHdpdGggJHt9LCBldmVuIGlmIHRoYXQgbWF5IG5vdCBiZSByZWFkIGJ5IENNYWtlIHNjcmlwdHMuCiAgIGZpbGUoV1JJVEUgJHtPVVRQVVRfRklMRX0gJHtNQUtFRklMRV9JTkNfVEVYVH0pCi0KKyAgc2V0X3Byb3BlcnR5KERJUkVDVE9SWSBBUFBFTkQgUFJPUEVSVFkgQ01BS0VfQ09ORklHVVJFX0RFUEVORFMgIiR7SU5QVVRfRklMRX0iKQogZW5kZnVuY3Rpb24oKQogCiBpZigwKSAjIFRoaXMgY29kZSBub3QgbmVlZGVkIGZvciBidWlsZGluZyB3aXRoaW4gQ01ha2UuCkBAIC0xMzA0LDE5ICsxNDI5LDI5IEBACiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogaWYoMCkgIyBUaGlzIGNvZGUgbm90IG5lZWRlZCBmb3IgYnVpbGRpbmcgd2l0aGluIENNYWtlLgotaW5jbHVkZShDVGVzdCkKLWlmKEJVSUxEX1RFU1RJTkcpCitvcHRpb24oQlVJTERfVEVTVElORyAiQnVpbGQgdGVzdHMiICIke1BFUkxfRk9VTkR9IikKK2lmKE5PVCBQRVJMX0ZPVU5EKQorICBtZXNzYWdlKFNUQVRVUyAiUGVybCBub3QgZm91bmQsIHRlc3RpbmcgZGlzYWJsZWQuIikKK2Vsc2VpZihCVUlMRF9URVNUSU5HKQogICBhZGRfc3ViZGlyZWN0b3J5KHRlc3RzKQogZW5kaWYoKQogCisjIE5UTE0gc3VwcG9ydCByZXF1aXJlcyBjcnlwdG8gZnVuY3Rpb24gYWRhcHRpb25zIGZyb20gdmFyaW91cyBTU0wgbGlicworIyBUT0RPIGFsdGVybmF0aXZlIFNTTCBsaWJzIHRlc3RzIGZvciBTU1AxLCBHTlVUTFMsIE5TUworaWYoTk9UIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9XSU5ET1dTX1NTUEkgT1IgVVNFX0RBUldJTlNTTCBPUiBVU0VfTUJFRFRMUyBPUiBVU0VfV0lOMzJfQ1JZUFRPKSkKKyAgc2V0KHVzZV9udGxtIE9OKQorZWxzZSgpCisgIHNldCh1c2VfbnRsbSBPRkYpCitlbmRpZigpCisKICMgSGVscGVyIHRvIHBvcHVsYXRlIGEgbGlzdCAoX2l0ZW1zKSB3aXRoIGEgbGFiZWwgd2hlbiBjb25kaXRpb25zICh0aGUgcmVtYWluaW5nCiAjIGFyZ3MpIGFyZSBzYXRpc2ZpZWQKLWZ1bmN0aW9uKF9hZGRfaWYgbGFiZWwpCi0gICMgVE9ETyBuZWVkIHRvIGRpc2FibGUgcG9saWN5IENNUDAwNTQgKENNYWtlIDMuMSkgdG8gYWxsb3cgdGhpcyBpbmRpcmVjdGlvbgorbWFjcm8oX2FkZF9pZiBsYWJlbCkKKyAgIyBuZWVkcyB0byBiZSBhIG1hY3JvIHRvIGFsbG93IHRoaXMgaW5kaXJlY3Rpb24KICAgaWYoJHtBUkdOfSkKLSAgICBzZXQoX2l0ZW1zICR7X2l0ZW1zfSAiJHtsYWJlbH0iIFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoX2l0ZW1zICR7X2l0ZW1zfSAiJHtsYWJlbH0iKQogICBlbmRpZigpCi1lbmRmdW5jdGlvbigpCitlbmRtYWNybygpCiAKICMgQ2xlYXIgbGlzdCBhbmQgdHJ5IHRvIGRldGVjdCBhdmFpbGFibGUgZmVhdHVyZXMKIHNldChfaXRlbXMpCkBAIC0xMzMxLDYgKzE0NjYsNyBAQAogIyBUT0RPIFNTUDEgKFdpblNTTCkgY2hlY2sgaXMgbWlzc2luZwogX2FkZF9pZigiU1NQSSIgICAgICAgICAgVVNFX1dJTkRPV1NfU1NQSSkKIF9hZGRfaWYoIkdTUy1BUEkiICAgICAgIEhBVkVfR1NTQVBJKQorX2FkZF9pZigiYWx0LXN2YyIgICAgICAgRU5BQkxFX0FMVF9TVkMpCiAjIFRPRE8gU1NQMSBtaXNzaW5nIGZvciBTUE5FR08KIF9hZGRfaWYoIlNQTkVHTyIgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggQU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAoSEFWRV9HU1NBUEkgT1IgVVNFX1dJTkRPV1NfU1NQSSkpCkBAIC0xMzM4LDE1ICsxNDc0LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoSEFWRV9HU1NBUEkgT1IgVVNFX1dJTkRPV1NfU1NQSSkpCiAjIE5UTE0gc3VwcG9ydCByZXF1aXJlcyBjcnlwdG8gZnVuY3Rpb24gYWRhcHRpb25zIGZyb20gdmFyaW91cyBTU0wgbGlicwogIyBUT0RPIGFsdGVybmF0aXZlIFNTTCBsaWJzIHRlc3RzIGZvciBTU1AxLCBHTlVUTFMsIE5TUwotaWYoTk9UIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9XSU5ET1dTX1NTUEkgT1IgVVNFX1NFQ1RSQU5TUCBPUiBVU0VfTUJFRFRMUykpCi0gIF9hZGRfaWYoIk5UTE0iICAgICAgICAxKQotICAjIFRPRE8gbWlzc2luZyBvcHRpb24gKGF1dG9jb25mOiAtLWVuYWJsZS1udGxtLXdiKQotICBfYWRkX2lmKCJOVExNX1dCIiAgICAgTk9UIENVUkxfRElTQUJMRV9IVFRQIEFORCBOVExNX1dCX0VOQUJMRUQpCi1lbmRpZigpCitfYWRkX2lmKCJOVExNIiAgICAgICAgdXNlX250bG0pCisjIFRPRE8gbWlzc2luZyBvcHRpb24gKGF1dG9jb25mOiAtLWVuYWJsZS1udGxtLXdiKQorX2FkZF9pZigiTlRMTV9XQiIgICAgIHVzZV9udGxtIEFORCBOT1QgQ1VSTF9ESVNBQkxFX0hUVFAgQU5EIE5UTE1fV0JfRU5BQkxFRCkKICMgVE9ETyBtaXNzaW5nIG9wdGlvbiAoLS1lbmFibGUtdGxzLXNycCksIGRlcGVuZHMgb24gR05VVExTX1NSUC9PUEVOU1NMX1NSUAogX2FkZF9pZigiVExTLVNSUCIgICAgICAgVVNFX1RMU19TUlApCiAjIFRPRE8gb3B0aW9uIC0td2l0aC1uZ2h0dHAyIHRlc3RzIGZvciBuZ2h0dHAyIGxpYiBhbmQgbmdodHRwMi9uZ2h0dHAyLmggaGVhZGVyCiBfYWRkX2lmKCJIVFRQMiIgICAgICAgICBVU0VfTkdIVFRQMikKK19hZGRfaWYoIkhUVFAzIiAgICAgICAgIFVTRV9OR1RDUDIgT1IgVVNFX1FVSUNIRSkKK19hZGRfaWYoIk11bHRpU1NMIiAgICAgIENVUkxfV0lUSF9NVUxUSV9TU0wpCitfYWRkX2lmKCJIVFRQUy1wcm94eSIgICBTU0xfRU5BQkxFRCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9HTlVUTFMgT1IgVVNFX05TUykpCiBzdHJpbmcoUkVQTEFDRSAiOyIgIiAiIFNVUFBPUlRfRkVBVFVSRVMgIiR7X2l0ZW1zfSIpCiBtZXNzYWdlKFNUQVRVUyAiRW5hYmxlZCBmZWF0dXJlczogJHtTVVBQT1JUX0ZFQVRVUkVTfSIpCiAKQEAgLTEzNzEsMTIgKzE1MDgsMTUgQEAKIF9hZGRfaWYoIlBPUDNTIiAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfUE9QMyBBTkQgU1NMX0VOQUJMRUQpCiBfYWRkX2lmKCJJTUFQIiAgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX0lNQVApCiBfYWRkX2lmKCJJTUFQUyIgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX0lNQVAgQU5EIFNTTF9FTkFCTEVEKQorX2FkZF9pZigiU01CIiAgICAgICAgICAgTk9UIENVUkxfRElTQUJMRV9TTUIgQU5EIHVzZV9udGxtKQorX2FkZF9pZigiU01CUyIgICAgICAgICAgTk9UIENVUkxfRElTQUJMRV9TTUIgQU5EIFNTTF9FTkFCTEVEIEFORCB1c2VfbnRsbSkKIF9hZGRfaWYoIlNNVFAiICAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfU01UUCkKIF9hZGRfaWYoIlNNVFBTIiAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfU01UUCBBTkQgU1NMX0VOQUJMRUQpCi1fYWRkX2lmKCJTQ1AiICAgICAgICAgICBVU0VfTElCU1NIMikKLV9hZGRfaWYoIlNGVFAiICAgICAgICAgIFVTRV9MSUJTU0gyKQorX2FkZF9pZigiU0NQIiAgICAgICAgICAgVVNFX0xJQlNTSDIgT1IgVVNFX0xJQlNTSCkKK19hZGRfaWYoIlNGVFAiICAgICAgICAgIFVTRV9MSUJTU0gyIE9SIFVTRV9MSUJTU0gpCiBfYWRkX2lmKCJSVFNQIiAgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX1JUU1ApCiBfYWRkX2lmKCJSVE1QIiAgICAgICAgICBVU0VfTElCUlRNUCkKK19hZGRfaWYoIk1RVFQiICAgICAgICAgIENVUkxfRU5BQkxFX01RVFQpCiBpZihfaXRlbXMpCiAgIGxpc3QoU09SVCBfaXRlbXMpCiBlbmRpZigpCkBAIC0xMzg5LDYgKzE1MjksOSBAQAogX2FkZF9pZigiT3BlblNTTCIgICAgICAgICAgU1NMX0VOQUJMRUQgQU5EIFVTRV9PUEVOU1NMKQogX2FkZF9pZigiU2VjdXJlIFRyYW5zcG9ydCIgU1NMX0VOQUJMRUQgQU5EIFVTRV9TRUNUUkFOU1ApCiBfYWRkX2lmKCJtYmVkVExTIiAgICAgICAgICBTU0xfRU5BQkxFRCBBTkQgVVNFX01CRURUTFMpCitfYWRkX2lmKCJCZWFyU1NMIiAgICAgICAgICBTU0xfRU5BQkxFRCBBTkQgVVNFX0JFQVJTU0wpCitfYWRkX2lmKCJOU1MiICAgICAgICAgICAgICBTU0xfRU5BQkxFRCBBTkQgVVNFX05TUykKK19hZGRfaWYoIndvbGZTU0wiICAgICAgICAgIFNTTF9FTkFCTEVEIEFORCBVU0VfV09MRlNTTCkKIGlmKF9pdGVtcykKICAgbGlzdChTT1JUIF9pdGVtcykKIGVuZGlmKCkKQEAgLTE0MDIsMjUgKzE1NDUsNDMgQEAKICMgVE9ETyB3aGVuIHRvIHNldCAiLURDVVJMX1NUQVRJQ0xJQiIgZm9yIENQUEZMQUdfQ1VSTF9TVEFUSUNMSUI/CiBzZXQoQ1BQRkxBR19DVVJMX1NUQVRJQ0xJQiAgIiIpCiBzZXQoQ1VSTFZFUlNJT04gICAgICAgICAgICAgIiR7Q1VSTF9WRVJTSU9OfSIpCi1pZihCVUlMRF9TSEFSRURfTElCUykKLSAgc2V0KEVOQUJMRV9TSEFSRUQgICAgICAgICAieWVzIikKLSAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAibm8iKQotZWxzZSgpCi0gIHNldChFTkFCTEVfU0hBUkVEICAgICAgICAgIm5vIikKLSAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAieWVzIikKLWVuZGlmKCkKIHNldChleGVjX3ByZWZpeCAgICAgICAgICAgICAiXCR7cHJlZml4fSIpCiBzZXQoaW5jbHVkZWRpciAgICAgICAgICAgICAgIlwke3ByZWZpeH0vaW5jbHVkZSIpCiBzZXQoTERGTEFHUyAgICAgICAgICAgICAgICAgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30iKQogc2V0KExJQkNVUkxfTElCUyAgICAgICAgICAgICIiKQogc2V0KGxpYmRpciAgICAgICAgICAgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIiKQogZm9yZWFjaChfbGliICR7Q01BS0VfQ19JTVBMSUNJVF9MSU5LX0xJQlJBUklFU30gJHtDVVJMX0xJQlN9KQorICBpZihUQVJHRVQgIiR7X2xpYn0iKQorICAgIHNldChfbGlibmFtZSAiJHtfbGlifSIpCisgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfbGlidHlwZSAiJHtfbGlibmFtZX0iIFRZUEUpCisgICAgaWYoX2xpYnR5cGUgU1RSRVFVQUwgSU5URVJGQUNFX0xJQlJBUlkpCisgICAgICAjIEludGVyZmFjZSBsaWJyYXJpZXMgY2FuIG9jY3VyIHdoZW4gYW4gZXh0ZXJuYWwgcHJvamVjdCBlbWJlZHMgY3VybCBhbmQKKyAgICAgICMgZGVmaW5lZCB0YXJnZXRzIHN1Y2ggYXMgWkxJQjo6WkxJQiBieSB0aGVtc2VsdmVzLiBJZ25vcmUgdGhlc2UgYXMKKyAgICAgICMgcmVhZGluZyB0aGUgTE9DQVRJT04gcHJvcGVydHkgd2lsbCBlcnJvciBvdXQuIEFzc3VtZSB0aGUgdXNlciB3b24ndCBuZWVkCisgICAgICAjIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIC5wYyBmaWxlLgorICAgICAgY29udGludWUoKQorICAgIGVuZGlmKCkKKyAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KF9saWIgIiR7X2xpYm5hbWV9IiBMT0NBVElPTikKKyAgICBpZihOT1QgX2xpYikKKyAgICAgIG1lc3NhZ2UoV0FSTklORyAiQmFkIGxpYiBpbiBsaWJyYXJ5IGxpc3Q6ICR7X2xpYm5hbWV9IikKKyAgICAgIGNvbnRpbnVlKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKICAgaWYoX2xpYiBNQVRDSEVTICIuKi8uKiIgT1IgX2xpYiBNQVRDSEVTICJeLSIpCiAgICAgc2V0KExJQkNVUkxfTElCUyAgICAgICAgICAiJHtMSUJDVVJMX0xJQlN9ICR7X2xpYn0iKQogICBlbHNlKCkKICAgICBzZXQoTElCQ1VSTF9MSUJTICAgICAgICAgICIke0xJQkNVUkxfTElCU30gLWwke19saWJ9IikKICAgZW5kaWYoKQogZW5kZm9yZWFjaCgpCitpZihCVUlMRF9TSEFSRURfTElCUykKKyAgc2V0KEVOQUJMRV9TSEFSRUQgICAgICAgICAieWVzIikKKyAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAibm8iKQorICBzZXQoTElCQ1VSTF9OT19TSEFSRUQgICAgICIiKQorZWxzZSgpCisgIHNldChFTkFCTEVfU0hBUkVEICAgICAgICAgIm5vIikKKyAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAieWVzIikKKyAgc2V0KExJQkNVUkxfTk9fU0hBUkVEICAgICAiJHtMSUJDVVJMX0xJQlN9IikKK2VuZGlmKCkKICMgImEiIChMaW51eCkgb3IgImxpYiIgKFdpbmRvd3MpCiBzdHJpbmcoUkVQTEFDRSAiLiIgIiIgbGliZXh0ICIke0NNQUtFX1NUQVRJQ19MSUJSQVJZX1NVRkZJWH0iKQogc2V0KHByZWZpeCAgICAgICAgICAgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfSIpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NPUFlJTkcgYi9VdGlsaXRpZXMvY21jdXJsL0NPUFlJTkcKaW5kZXggMzUyOGJkNy4uOWQ5ZTRhZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DT1BZSU5HCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ09QWUlORwpAQCAtMSw2ICsxLDYgQEAKIENPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKIAotQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBhbmQgbWFueQorQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBhbmQgbWFueQogY29udHJpYnV0b3JzLCBzZWUgdGhlIFRIQU5LUyBmaWxlLgogCiBBbGwgcmlnaHRzIHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybC5oIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybC5oCmluZGV4IDA4OWM0MjcuLjE5NGI1NzggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmwuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9fQ1VSTF9DVVJMX0gKLSNkZWZpbmUgX19DVVJMX0NVUkxfSAorI2lmbmRlZiBDVVJMSU5DX0NVUkxfSAorI2RlZmluZSBDVVJMSU5DX0NVUkxfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM4LDEyICszOCwxMiBAQAogI2luY2x1ZGUgInN5c3RlbS5oIiAgICAgICAgICAvKiBkZXRlcm1pbmUgdGhpbmdzIHJ1bi10aW1lICovCiAKIC8qCi0gKiBEZWZpbmUgV0lOMzIgd2hlbiBidWlsZCB0YXJnZXQgaXMgV2luMzIgQVBJCisgKiBEZWZpbmUgQ1VSTF9XSU4zMiB3aGVuIGJ1aWxkIHRhcmdldCBpcyBXaW4zMiBBUEkKICAqLwogCi0jaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykpICYmIFwKLSAgICAgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fU1lNQklBTjMyX18pCi0jZGVmaW5lIFdJTjMyCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChXSU4zMikpICYmICAgICAgICBcCisgICFkZWZpbmVkKF9fU1lNQklBTjMyX18pCisjZGVmaW5lIENVUkxfV0lOMzIKICNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTU4LDcgKzU4LDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKLSNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorI2lmIGRlZmluZWQoQ1VSTF9XSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICNpZiAhKGRlZmluZWQoX1dJTlNPQ0tBUElfKSB8fCBkZWZpbmVkKF9XSU5TT0NLX0gpIHx8IFwKICAgICAgIGRlZmluZWQoX19MV0lQX09QVF9IX18pIHx8IGRlZmluZWQoTFdJUF9IRFJfT1BUX0gpKQogLyogVGhlIGNoZWNrIGFib3ZlIHByZXZlbnRzIHRoZSB3aW5zb2NrMiBpbmNsdXNpb24gaWYgd2luc29jay5oIGFscmVhZHkgd2FzCkBAIC03OSwxMSArNzksMTEgQEAKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQorI2lmICFkZWZpbmVkKENVUkxfV0lOMzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKF9fVlhXT1JLU19fKQorI2lmICFkZWZpbmVkKENVUkxfV0lOMzIpICYmICFkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1ZYV09SS1NfXykKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAjaWZkZWYgQ1VSTF9TVEFUSUNMSUIKICMgIGRlZmluZSBDVVJMX0VYVEVSTgotI2VsaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSB8fCBcCisjZWxpZiBkZWZpbmVkKENVUkxfV0lOMzIpIHx8IGRlZmluZWQoX19TWU1CSUFOMzJfXykgfHwgXAogICAgICAoX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlKGRsbGV4cG9ydCkgJiYgXAogICAgICAgX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlKGRsbGltcG9ydCkpCiAjICBpZiBkZWZpbmVkKEJVSUxESU5HX0xJQkNVUkwpCkBAIC0xMzAsNyArMTMwLDcgQEAKIAogI2lmbmRlZiBjdXJsX3NvY2tldF90eXBlZGVmCiAvKiBzb2NrZXQgdHlwZWRlZiAqLwotI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fTFdJUF9PUFRfSF9fKSAmJiAhZGVmaW5lZChMV0lQX0hEUl9PUFRfSCkKKyNpZiBkZWZpbmVkKENVUkxfV0lOMzIpICYmICFkZWZpbmVkKF9fTFdJUF9PUFRfSF9fKSAmJiAhZGVmaW5lZChMV0lQX0hEUl9PUFRfSCkKIHR5cGVkZWYgU09DS0VUIGN1cmxfc29ja2V0X3Q7CiAjZGVmaW5lIENVUkxfU09DS0VUX0JBRCBJTlZBTElEX1NPQ0tFVAogI2Vsc2UKQEAgLTE1NCw3ICsxNTQsOCBAQAogICBDVVJMU1NMQkFDS0VORF9TRUNVUkVUUkFOU1BPUlQgPSA5LAogICBDVVJMU1NMQkFDS0VORF9BWFRMUyA9IDEwLCAvKiBuZXZlciB1c2VkIHNpbmNlIDcuNjMuMCAqLwogICBDVVJMU1NMQkFDS0VORF9NQkVEVExTID0gMTEsCi0gIENVUkxTU0xCQUNLRU5EX01FU0FMSU5LID0gMTIKKyAgQ1VSTFNTTEJBQ0tFTkRfTUVTQUxJTksgPSAxMiwKKyAgQ1VSTFNTTEJBQ0tFTkRfQkVBUlNTTCA9IDEzCiB9IGN1cmxfc3NsYmFja2VuZDsKIAogLyogYWxpYXNlcyBmb3IgbGlicmFyeSBjbG9uZXMgYW5kIHJlbmFtZXMgKi8KQEAgLTIwOSwxNiArMjEwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuIEFkZGVkIGluIDcuNDYuMCAqLwogfTsKIAotLyogVGhpcyBpcyB0aGUgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OIGNhbGxiYWNrIHByb3RvLiBJdCBpcyBub3cgY29uc2lkZXJlZAotICAgZGVwcmVjYXRlZCBidXQgd2FzIHRoZSBvbmx5IGNob2ljZSB1cCB1bnRpbCA3LjMxLjAgKi8KKworLyogVGhpcyBpcyBhIHJldHVybiBjb2RlIGZvciB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgdGhhdCwgd2hlbiByZXR1cm5lZCwgd2lsbAorICAgc2lnbmFsIGxpYmN1cmwgdG8gY29udGludWUgZXhlY3V0aW5nIHRoZSBkZWZhdWx0IHByb2dyZXNzIGZ1bmN0aW9uICovCisjZGVmaW5lIENVUkxfUFJPR1JFU1NGVU5DX0NPTlRJTlVFIDB4MTAwMDAwMDEKKworLyogVGhpcyBpcyB0aGUgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OIGNhbGxiYWNrIHByb3RvdHlwZS4gSXQgaXMgbm93CisgICBjb25zaWRlcmVkIGRlcHJlY2F0ZWQgYnV0IHdhcyB0aGUgb25seSBjaG9pY2UgdXAgdW50aWwgNy4zMS4wICovCiB0eXBlZGVmIGludCAoKmN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2spKHZvaWQgKmNsaWVudHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkbHRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGxub3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bHRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdWxub3cpOwogCi0vKiBUaGlzIGlzIHRoZSBDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04gY2FsbGJhY2sgcHJvdG8uIEl0IHdhcyBpbnRyb2R1Y2VkIGluCi0gICA3LjMyLjAsIGl0IGF2b2lkcyBmbG9hdGluZyBwb2ludCBhbmQgcHJvdmlkZXMgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi4gKi8KKy8qIFRoaXMgaXMgdGhlIENVUkxPUFRfWEZFUklORk9GVU5DVElPTiBjYWxsYmFjayBwcm90b3R5cGUuIEl0IHdhcyBpbnRyb2R1Y2VkCisgICBpbiA3LjMyLjAsIGF2b2lkcyB0aGUgdXNlIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYW5kIHByb3ZpZGVzIG1vcmUKKyAgIGRldGFpbGVkIGluZm9ybWF0aW9uLiAqLwogdHlwZWRlZiBpbnQgKCpjdXJsX3hmZXJpbmZvX2NhbGxiYWNrKSh2b2lkICpjbGllbnRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90IGRsdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgZGxub3csCkBAIC0yODMsMTAgKzI5MCw3IEBACiAjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fU0laRSAgICAgICAgKDE8PDYpCiAjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fSExJTktDT1VOVCAgKDE8PDcpCiAKLS8qIENvbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUgZGVwZW5kcyBvbiBpbmZvcm1hdGlvbiB3aGljaCBpcyBrbm93biBhbmQgaXMKLSAgIGFjaGlldmFibGUgKGUuZy4gYnkgRlRQIExJU1QgcGFyc2luZykuIFBsZWFzZSBzZWUgdGhlIHVybF9lYXN5X3NldG9wdCgzKSBtYW4KLSAgIHBhZ2UgZm9yIGNhbGxiYWNrcyByZXR1cm5pbmcgdGhpcyBzdHJ1Y3R1cmUgLS0gc29tZSBmaWVsZHMgYXJlIG1hbmRhdG9yeSwKLSAgIHNvbWUgb3RoZXJzIGFyZSBvcHRpb25hbC4gVGhlIEZMQUcgZmllbGQgaGFzIHNwZWNpYWwgbWVhbmluZy4gKi8KKy8qIEluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGZpbGUsIHVzZWQgd2hlbiBkb2luZyBGVFAgd2lsZGNhcmQgbWF0Y2hpbmcgKi8KIHN0cnVjdCBjdXJsX2ZpbGVpbmZvIHsKICAgY2hhciAqZmlsZW5hbWU7CiAgIGN1cmxmaWxldHlwZSBmaWxldHlwZTsKQEAgLTYwMiw2ICs2MDYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIENVUkxFX1JFQ1VSU0lWRV9BUElfQ0FMTCwgICAgICAvKiA5MyAtIGFuIGFwaSBmdW5jdGlvbiB3YXMgY2FsbGVkIGZyb20KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSBhIGNhbGxiYWNrICovCisgIENVUkxFX0FVVEhfRVJST1IsICAgICAgICAgICAgICAvKiA5NCAtIGFuIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIHJldHVybmVkIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciAqLworICBDVVJMRV9IVFRQMywgICAgICAgICAgICAgICAgICAgLyogOTUgLSBBbiBIVFRQLzMgbGF5ZXIgcHJvYmxlbSAqLworICBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1IsICAgICAgLyogOTYgLSBRVUlDIGNvbm5lY3Rpb24gZXJyb3IgKi8KICAgQ1VSTF9MQVNUIC8qIG5ldmVyIHVzZSEgKi8KIH0gQ1VSTGNvZGU7CiAKQEAgLTY4NSw4ICs2OTMsMTAgQEAKIHR5cGVkZWYgQ1VSTGNvZGUgKCpjdXJsX2NvbnZfY2FsbGJhY2spKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CiAKIHR5cGVkZWYgQ1VSTGNvZGUgKCpjdXJsX3NzbF9jdHhfY2FsbGJhY2spKENVUkwgKmN1cmwsICAgIC8qIGVhc3kgaGFuZGxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzc2xfY3R4LCAvKiBhY3R1YWxseSBhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBTU0xfQ1RYICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzc2xfY3R4LCAvKiBhY3R1YWxseSBhbiBPcGVuU1NMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBXb2xmU1NMIFNTTF9DVFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhbiBtYmVkVExTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZmlnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VycHRyKTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTc2NCw3ICs3NzQsNyBAQAogfTsKIAogc3RydWN0IGN1cmxfa2hrZXkgewotICBjb25zdCBjaGFyICprZXk7IC8qIHBvaW50cyB0byBhIHplcm8tdGVybWluYXRlZCBzdHJpbmcgZW5jb2RlZCB3aXRoIGJhc2U2NAorICBjb25zdCBjaGFyICprZXk7IC8qIHBvaW50cyB0byBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgZW5jb2RlZCB3aXRoIGJhc2U2NAogICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbiBpcyB6ZXJvLCBvdGhlcndpc2UgdG8gdGhlICJyYXciIGRhdGEgKi8KICAgc2l6ZV90IGxlbjsKICAgZW51bSBjdXJsX2todHlwZSBrZXl0eXBlOwpAQCAtODE5LDYgKzgyOSwxOSBAQAogICAgU1NMIGJhY2tlbmRzIHdoZXJlIHN1Y2ggYmVoYXZpb3IgaXMgcHJlc2VudC4gKi8KICNkZWZpbmUgQ1VSTFNTTE9QVF9OT19SRVZPS0UgKDE8PDEpCiAKKy8qIC0gTk9fUEFSVElBTENIQUlOIHRlbGxzIGxpYmN1cmwgdG8gKk5PVCogYWNjZXB0IGEgcGFydGlhbCBjZXJ0aWZpY2F0ZSBjaGFpbgorICAgaWYgcG9zc2libGUuIFRoZSBPcGVuU1NMIGJhY2tlbmQgaGFzIHRoaXMgYWJpbGl0eS4gKi8KKyNkZWZpbmUgQ1VSTFNTTE9QVF9OT19QQVJUSUFMQ0hBSU4gKDE8PDIpCisKKy8qIC0gUkVWT0tFX0JFU1RfRUZGT1JUIHRlbGxzIGxpYmN1cmwgdG8gaWdub3JlIGNlcnRpZmljYXRlIHJldm9jYXRpb24gb2ZmbGluZQorICAgY2hlY2tzIGFuZCBpZ25vcmUgbWlzc2luZyByZXZvY2F0aW9uIGxpc3QgZm9yIHRob3NlIFNTTCBiYWNrZW5kcyB3aGVyZSBzdWNoCisgICBiZWhhdmlvciBpcyBwcmVzZW50LiAqLworI2RlZmluZSBDVVJMU1NMT1BUX1JFVk9LRV9CRVNUX0VGRk9SVCAoMTw8MykKKworLyogLSBDVVJMU1NMT1BUX05BVElWRV9DQSB0ZWxscyBsaWJjdXJsIHRvIHVzZSBzdGFuZGFyZCBjZXJ0aWZpY2F0ZSBzdG9yZSBvZgorICAgb3BlcmF0aW5nIHN5c3RlbS4gQ3VycmVudGx5IGltcGxlbWVudGVkIHVuZGVyIE1TLVdpbmRvd3MuICovCisjZGVmaW5lIENVUkxTU0xPUFRfTkFUSVZFX0NBICgxPDw0KQorCiAvKiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGF0dGVtcHQgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGZvciBoYXBweSBleWViYWxscy4KICAgIENVUkxPUFRfSEFQUFlfRVlFQkFMTFNfVElNRU9VVF9NUy4zIGFuZCBoYXBweS1leWViYWxscy10aW1lb3V0LW1zLmQgZG9jdW1lbnQKICAgIHRoaXMgdmFsdWUsIGtlZXAgdGhlbSBpbiBzeW5jLiAqLwpAQCAtODgzLDcgKzkwNiw3IEBACiAKIC8qIENVUkxBTFRTVkNfKiBhcmUgYml0cyBmb3IgdGhlIENVUkxPUFRfQUxUU1ZDX0NUUkwgb3B0aW9uICovCiAjZGVmaW5lIENVUkxBTFRTVkNfSU1NRURJQVRFTFkgICgxPDwwKQotI2RlZmluZSBDVVJMQUxUU1ZDX0FMVFVTRUQgICAgICAoMTw8MSkKKwogI2RlZmluZSBDVVJMQUxUU1ZDX1JFQURPTkxZRklMRSAoMTw8MikKICNkZWZpbmUgQ1VSTEFMVFNWQ19IMSAgICAgICAgICAgKDE8PDMpCiAjZGVmaW5lIENVUkxBTFRTVkNfSDIgICAgICAgICAgICgxPDw0KQpAQCAtOTE4LDg1ICs5NDEsNzIgQEAKICNkZWZpbmUgQ1VSTFBST1RPX0dPUEhFUiAoMTw8MjUpCiAjZGVmaW5lIENVUkxQUk9UT19TTUIgICAgKDE8PDI2KQogI2RlZmluZSBDVVJMUFJPVE9fU01CUyAgICgxPDwyNykKKyNkZWZpbmUgQ1VSTFBST1RPX01RVFQgICAoMTw8MjgpCiAjZGVmaW5lIENVUkxQUk9UT19BTEwgICAgKH4wKSAvKiBlbmFibGUgZXZlcnl0aGluZyAqLwogCiAvKiBsb25nIG1heSBiZSAzMiBvciA2NCBiaXRzLCBidXQgd2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlCiAgICBidXQgMzIgKi8KICNkZWZpbmUgQ1VSTE9QVFRZUEVfTE9ORyAgICAgICAgICAwCiAjZGVmaW5lIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UICAgMTAwMDAKLSNkZWZpbmUgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQgICAxMDAwMAogI2RlZmluZSBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5UIDIwMDAwCiAjZGVmaW5lIENVUkxPUFRUWVBFX09GRl9UICAgICAgICAgMzAwMDAKKyNkZWZpbmUgQ1VSTE9QVFRZUEVfQkxPQiAgICAgICAgICA0MDAwMAogCiAvKiAqU1RSSU5HUE9JTlQgaXMgYW4gYWxpYXMgZm9yIE9CSkVDVFBPSU5UIHRvIGFsbG93IHRvb2xzIHRvIGV4dHJhY3QgdGhlCiAgICBzdHJpbmcgb3B0aW9ucyBmcm9tIHRoZSBoZWFkZXIgZmlsZSAqLwogCi0vKiBuYW1lIGlzIHVwcGVyY2FzZSBDVVJMT1BUXzxuYW1lPiwKLSAgIHR5cGUgaXMgb25lIG9mIHRoZSBkZWZpbmVkIENVUkxPUFRUWVBFXzx0eXBlPgotICAgbnVtYmVyIGlzIHVuaXF1ZSBpZGVudGlmaWVyICovCi0jaWZkZWYgQ0lOSVQKLSN1bmRlZiBDSU5JVAotI2VuZGlmCiAKLSNpZmRlZiBDVVJMX0lTT0NQUAotI2RlZmluZSBDSU5JVChuYSx0LG51KSBDVVJMT1BUXyAjIyBuYSA9IENVUkxPUFRUWVBFXyAjIyB0ICsgbnUKLSNlbHNlCi0vKiBUaGUgbWFjcm8gIiMjIiBpcyBJU08gQywgd2UgYXNzdW1lIHByZS1JU08gQyBkb2Vzbid0IHN1cHBvcnQgaXQuICovCi0jZGVmaW5lIExPTkcgICAgICAgICAgQ1VSTE9QVFRZUEVfTE9ORwotI2RlZmluZSBPQkpFQ1RQT0lOVCAgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCi0jZGVmaW5lIFNUUklOR1BPSU5UICAgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQKLSNkZWZpbmUgRlVOQ1RJT05QT0lOVCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5UCi0jZGVmaW5lIE9GRl9UICAgICAgICAgQ1VSTE9QVFRZUEVfT0ZGX1QKLSNkZWZpbmUgQ0lOSVQobmFtZSx0eXBlLG51bWJlcikgQ1VSTE9QVF8vKiovbmFtZSA9IHR5cGUgKyBudW1iZXIKLSNlbmRpZgorI2RlZmluZSBDVVJMT1BUKG5hLHQsbnUpIG5hID0gdCArIG51CisKKy8qIGhhbmR5IGFsaWFzZXMgdGhhdCBtYWtlIG5vIHJ1bi10aW1lIGRpZmZlcmVuY2UgKi8KKyNkZWZpbmUgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCisjZGVmaW5lIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCiAKIC8qCi0gKiBUaGlzIG1hY3JvLW1hbmlhIGJlbG93IHNldHVwcyB0aGUgQ1VSTE9QVF9bd2hhdF0gZW51bSwgdG8gYmUgdXNlZCB3aXRoCi0gKiBjdXJsX2Vhc3lfc2V0b3B0KCkuIFRoZSBmaXJzdCBhcmd1bWVudCBpbiB0aGUgQ0lOSVQoKSBtYWNybyBpcyB0aGUgW3doYXRdCi0gKiB3b3JkLgorICogQWxsIENVUkxPUFRfKiB2YWx1ZXMuCiAgKi8KIAogdHlwZWRlZiBlbnVtIHsKICAgLyogVGhpcyBpcyB0aGUgRklMRSAqIG9yIHZvaWQgKiB0aGUgcmVndWxhciBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8uICovCi0gIENJTklUKFdSSVRFREFUQSwgT0JKRUNUUE9JTlQsIDEpLAorICBDVVJMT1BUKENVUkxPUFRfV1JJVEVEQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMSksCiAKICAgLyogVGhlIGZ1bGwgVVJMIHRvIGdldC9wdXQgKi8KLSAgQ0lOSVQoVVJMLCBTVFJJTkdQT0lOVCwgMiksCisgIENVUkxPUFQoQ1VSTE9QVF9VUkwsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyKSwKIAogICAvKiBQb3J0IG51bWJlciB0byBjb25uZWN0IHRvLCBpZiBvdGhlciB0aGFuIGRlZmF1bHQuICovCi0gIENJTklUKFBPUlQsIExPTkcsIDMpLAorICBDVVJMT1BUKENVUkxPUFRfUE9SVCwgQ1VSTE9QVFRZUEVfTE9ORywgMyksCiAKICAgLyogTmFtZSBvZiBwcm94eSB0byB1c2UuICovCi0gIENJTklUKFBST1hZLCBTVFJJTkdQT0lOVCwgNCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDQpLAogCiAgIC8qICJ1c2VyOnBhc3N3b3JkO29wdGlvbnMiIHRvIHVzZSB3aGVuIGZldGNoaW5nLiAqLwotICBDSU5JVChVU0VSUFdELCBTVFJJTkdQT0lOVCwgNSksCisgIENVUkxPUFQoQ1VSTE9QVF9VU0VSUFdELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNSksCiAKICAgLyogInVzZXI6cGFzc3dvcmQiIHRvIHVzZSB3aXRoIHByb3h5LiAqLwotICBDSU5JVChQUk9YWVVTRVJQV0QsIFNUUklOR1BPSU5ULCA2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZVVNFUlBXRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDYpLAogCiAgIC8qIFJhbmdlIHRvIGdldCwgc3BlY2lmaWVkIGFzIGFuIEFTQ0lJIHN0cmluZy4gKi8KLSAgQ0lOSVQoUkFOR0UsIFNUUklOR1BPSU5ULCA3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JBTkdFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNyksCiAKICAgLyogbm90IHVzZWQgKi8KIAogICAvKiBTcGVjaWZpZWQgZmlsZSBzdHJlYW0gdG8gdXBsb2FkIGZyb20gKHVzZSBhcyBpbnB1dCk6ICovCi0gIENJTklUKFJFQUREQVRBLCBPQkpFQ1RQT0lOVCwgOSksCisgIENVUkxPUFQoQ1VSTE9QVF9SRUFEREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDkpLAogCiAgIC8qIEJ1ZmZlciB0byByZWNlaXZlIGVycm9yIG1lc3NhZ2VzIGluLCBtdXN0IGJlIGF0IGxlYXN0IENVUkxfRVJST1JfU0laRQogICAgKiBieXRlcyBiaWcuICovCi0gIENJTklUKEVSUk9SQlVGRkVSLCBPQkpFQ1RQT0lOVCwgMTApLAorICBDVVJMT1BUKENVUkxPUFRfRVJST1JCVUZGRVIsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxMCksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBzdG9yZSB0aGUgb3V0cHV0IChpbnN0ZWFkIG9mIGZ3cml0ZSkuIFRoZQogICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZ3cml0ZSgpIHN5bnRheCwgbWFrZSBzdXJlIHRvIGZvbGxvdyB0aGVtLiAqLwotICBDSU5JVChXUklURUZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxMSksCisgIENVUkxPUFQoQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxMSksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byByZWFkIHRoZSBpbnB1dCAoaW5zdGVhZCBvZiBmcmVhZCkuIFRoZQogICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZyZWFkKCkgc3ludGF4LCBtYWtlIHN1cmUgdG8gZm9sbG93IHRoZW0uICovCi0gIENJTklUKFJFQURGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTIpLAorICBDVVJMT1BUKENVUkxPUFRfUkVBREZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxMiksCiAKICAgLyogVGltZS1vdXQgdGhlIHJlYWQgb3BlcmF0aW9uIGFmdGVyIHRoaXMgYW1vdW50IG9mIHNlY29uZHMgKi8KLSAgQ0lOSVQoVElNRU9VVCwgTE9ORywgMTMpLAorICBDVVJMT1BUKENVUkxPUFRfVElNRU9VVCwgQ1VSTE9QVFRZUEVfTE9ORywgMTMpLAogCiAgIC8qIElmIHRoZSBDVVJMT1BUX0lORklMRSBpcyB1c2VkLCB0aGlzIGNhbiBiZSB1c2VkIHRvIGluZm9ybSBsaWJjdXJsIGFib3V0CiAgICAqIGhvdyBsYXJnZSB0aGUgZmlsZSBiZWluZyBzZW50IHJlYWxseSBpcy4gVGhhdCBhbGxvd3MgYmV0dGVyIGVycm9yCkBAIC0xMDA3LDIwICsxMDE3LDIwIEBACiAgICAqIHdoaWNoIHRha2VzIGFuIG9mZl90IHR5cGUsIGFsbG93aW5nIHBsYXRmb3JtcyB3aXRoIGxhcmdlciBvZmZfdAogICAgKiBzaXplcyB0byBoYW5kbGUgbGFyZ2VyIGZpbGVzLiAgU2VlIGJlbG93IGZvciBJTkZJTEVTSVpFX0xBUkdFLgogICAgKi8KLSAgQ0lOSVQoSU5GSUxFU0laRSwgTE9ORywgMTQpLAorICBDVVJMT1BUKENVUkxPUFRfSU5GSUxFU0laRSwgQ1VSTE9QVFRZUEVfTE9ORywgMTQpLAogCiAgIC8qIFBPU1Qgc3RhdGljIGlucHV0IGZpZWxkcy4gKi8KLSAgQ0lOSVQoUE9TVEZJRUxEUywgT0JKRUNUUE9JTlQsIDE1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1RGSUVMRFMsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNSksCiAKICAgLyogU2V0IHRoZSByZWZlcnJlciBwYWdlIChuZWVkZWQgYnkgc29tZSBDR0lzKSAqLwotICBDSU5JVChSRUZFUkVSLCBTVFJJTkdQT0lOVCwgMTYpLAorICBDVVJMT1BUKENVUkxPUFRfUkVGRVJFUiwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE2KSwKIAogICAvKiBTZXQgdGhlIEZUUCBQT1JUIHN0cmluZyAoaW50ZXJmYWNlIG5hbWUsIG5hbWVkIG9yIG51bWVyaWNhbCBJUCBhZGRyZXNzKQogICAgICBVc2UgaS5lICctJyB0byB1c2UgZGVmYXVsdCBhZGRyZXNzLiAqLwotICBDSU5JVChGVFBQT1JULCBTVFJJTkdQT0lOVCwgMTcpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQUE9SVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3KSwKIAogICAvKiBTZXQgdGhlIFVzZXItQWdlbnQgc3RyaW5nIChleGFtaW5lZCBieSBzb21lIENHSXMpICovCi0gIENJTklUKFVTRVJBR0VOVCwgU1RSSU5HUE9JTlQsIDE4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1VTRVJBR0VOVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE4KSwKIAogICAvKiBJZiB0aGUgZG93bmxvYWQgcmVjZWl2ZXMgbGVzcyB0aGFuICJsb3cgc3BlZWQgbGltaXQiIGJ5dGVzL3NlY29uZAogICAgKiBkdXJpbmcgImxvdyBzcGVlZCB0aW1lIiBzZWNvbmRzLCB0aGUgb3BlcmF0aW9ucyBpcyBhYm9ydGVkLgpAQCAtMTAyOSwxMCArMTAzOSwxMCBAQAogICAgKi8KIAogICAvKiBTZXQgdGhlICJsb3cgc3BlZWQgbGltaXQiICovCi0gIENJTklUKExPV19TUEVFRF9MSU1JVCwgTE9ORywgMTkpLAorICBDVVJMT1BUKENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULCBDVVJMT1BUVFlQRV9MT05HLCAxOSksCiAKICAgLyogU2V0IHRoZSAibG93IHNwZWVkIHRpbWUiICovCi0gIENJTklUKExPV19TUEVFRF9USU1FLCBMT05HLCAyMCksCisgIENVUkxPUFQoQ1VSTE9QVF9MT1dfU1BFRURfVElNRSwgQ1VSTE9QVFRZUEVfTE9ORywgMjApLAogCiAgIC8qIFNldCB0aGUgY29udGludWF0aW9uIG9mZnNldC4KICAgICoKQEAgLTEwNDAsNDggKzEwNTAsNDggQEAKICAgICogb2ZmX3QgdHlwZXMsIGFsbG93aW5nIGZvciBsYXJnZSBmaWxlIG9mZnNldHMgb24gcGxhdGZvcm1zIHdoaWNoCiAgICAqIHVzZSBsYXJnZXItdGhhbi0zMi1iaXQgb2ZmX3Qncy4gIExvb2sgYmVsb3cgZm9yIFJFU1VNRV9GUk9NX0xBUkdFLgogICAgKi8KLSAgQ0lOSVQoUkVTVU1FX0ZST00sIExPTkcsIDIxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU1VNRV9GUk9NLCBDVVJMT1BUVFlQRV9MT05HLCAyMSksCiAKICAgLyogU2V0IGNvb2tpZSBpbiByZXF1ZXN0OiAqLwotICBDSU5JVChDT09LSUUsIFNUUklOR1BPSU5ULCAyMiksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMiksCiAKICAgLyogVGhpcyBwb2ludHMgdG8gYSBsaW5rZWQgbGlzdCBvZiBoZWFkZXJzLCBzdHJ1Y3QgY3VybF9zbGlzdCBraW5kLiBUaGlzCiAgICAgIGxpc3QgaXMgYWxzbyB1c2VkIGZvciBSVFNQIChpbiBzcGl0ZSBvZiBpdHMgbmFtZSkgKi8KLSAgQ0lOSVQoSFRUUEhFQURFUiwgT0JKRUNUUE9JTlQsIDIzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBIRUFERVIsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDIzKSwKIAogICAvKiBUaGlzIHBvaW50cyB0byBhIGxpbmtlZCBsaXN0IG9mIHBvc3QgZW50cmllcywgc3RydWN0IGN1cmxfaHR0cHBvc3QgKi8KLSAgQ0lOSVQoSFRUUFBPU1QsIE9CSkVDVFBPSU5ULCAyNCksCisgIENVUkxPUFQoQ1VSTE9QVF9IVFRQUE9TVCwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI0KSwKIAogICAvKiBuYW1lIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1jZXJ0aWZpY2F0ZSAqLwotICBDSU5JVChTU0xDRVJULCBTVFJJTkdQT0lOVCwgMjUpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMQ0VSVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1KSwKIAogICAvKiBwYXNzd29yZCBmb3IgdGhlIFNTTCBvciBTU0ggcHJpdmF0ZSBrZXkgKi8KLSAgQ0lOSVQoS0VZUEFTU1dELCBTVFJJTkdQT0lOVCwgMjYpLAorICBDVVJMT1BUKENVUkxPUFRfS0VZUEFTU1dELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjYpLAogCiAgIC8qIHNlbmQgVFlQRSBwYXJhbWV0ZXI/ICovCi0gIENJTklUKENSTEYsIExPTkcsIDI3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NSTEYsIENVUkxPUFRUWVBFX0xPTkcsIDI3KSwKIAogICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIFFVT1RFIGNvbW1hbmRzICovCi0gIENJTklUKFFVT1RFLCBPQkpFQ1RQT0lOVCwgMjgpLAorICBDVVJMT1BUKENVUkxPUFRfUVVPVEUsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDI4KSwKIAogICAvKiBzZW5kIEZJTEUgKiBvciB2b2lkICogdG8gc3RvcmUgaGVhZGVycyB0bywgaWYgeW91IHVzZSBhIGNhbGxiYWNrIGl0CiAgICAgIGlzIHNpbXBseSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHVubW9kaWZpZWQgKi8KLSAgQ0lOSVQoSEVBREVSREFUQSwgT0JKRUNUUE9JTlQsIDI5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hFQURFUkRBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyOSksCiAKICAgLyogcG9pbnQgdG8gYSBmaWxlIHRvIHJlYWQgdGhlIGluaXRpYWwgY29va2llcyBmcm9tLCBhbHNvIGVuYWJsZXMKICAgICAgImNvb2tpZSBhd2FyZW5lc3MiICovCi0gIENJTklUKENPT0tJRUZJTEUsIFNUUklOR1BPSU5ULCAzMSksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUVGSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMzEpLAogCiAgIC8qIFdoYXQgdmVyc2lvbiB0byBzcGVjaWZpY2FsbHkgdHJ5IHRvIHVzZS4KICAgICAgU2VlIENVUkxfU1NMVkVSU0lPTiBkZWZpbmVzIGJlbG93LiAqLwotICBDSU5JVChTU0xWRVJTSU9OLCBMT05HLCAzMiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xWRVJTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAzMiksCiAKICAgLyogV2hhdCBraW5kIG9mIEhUVFAgdGltZSBjb25kaXRpb24gdG8gdXNlLCBzZWUgZGVmaW5lcyAqLwotICBDSU5JVChUSU1FQ09ORElUSU9OLCBMT05HLCAzMyksCisgIENVUkxPUFQoQ1VSTE9QVF9USU1FQ09ORElUSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAzMyksCiAKICAgLyogVGltZSB0byB1c2Ugd2l0aCB0aGUgYWJvdmUgY29uZGl0aW9uLiBTcGVjaWZpZWQgaW4gbnVtYmVyIG9mIHNlY29uZHMKICAgICAgc2luY2UgMSBKYW4gMTk3MCAqLwotICBDSU5JVChUSU1FVkFMVUUsIExPTkcsIDM0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RJTUVWQUxVRSwgQ1VSTE9QVFRZUEVfTE9ORywgMzQpLAogCiAgIC8qIDM1ID0gT0JTT0xFVEUgKi8KIApAQCAtMTA4OSwzNyArMTA5OSw1OCBAQAogICAgICBIVFRQOiBERUxFVEUsIFRSQUNFIGFuZCBvdGhlcnMKICAgICAgRlRQOiB0byB1c2UgYSBkaWZmZXJlbnQgbGlzdCBjb21tYW5kCiAgICAgICovCi0gIENJTklUKENVU1RPTVJFUVVFU1QsIFNUUklOR1BPSU5ULCAzNiksCisgIENVUkxPUFQoQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMzYpLAogCiAgIC8qIEZJTEUgaGFuZGxlIHRvIHVzZSBpbnN0ZWFkIG9mIHN0ZGVyciAqLwotICBDSU5JVChTVERFUlIsIE9CSkVDVFBPSU5ULCAzNyksCisgIENVUkxPUFQoQ1VSTE9QVF9TVERFUlIsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAzNyksCiAKICAgLyogMzggaXMgbm90IHVzZWQgKi8KIAogICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIHBvc3QtdHJhbnNmZXIgUVVPVEUgY29tbWFuZHMgKi8KLSAgQ0lOSVQoUE9TVFFVT1RFLCBPQkpFQ1RQT0lOVCwgMzkpLAorICBDVVJMT1BUKENVUkxPUFRfUE9TVFFVT1RFLCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAzOSksCiAKLSAgQ0lOSVQoT0JTT0xFVEU0MCwgT0JKRUNUUE9JTlQsIDQwKSwgLyogT0JTT0xFVEUsIGRvIG5vdCB1c2UhICovCisgICAvKiBPQlNPTEVURSwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX09CU09MRVRFNDAsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCA0MCksCiAKLSAgQ0lOSVQoVkVSQk9TRSwgTE9ORywgNDEpLCAgICAgIC8qIHRhbGsgYSBsb3QgKi8KLSAgQ0lOSVQoSEVBREVSLCBMT05HLCA0MiksICAgICAgIC8qIHRocm93IHRoZSBoZWFkZXIgb3V0IHRvbyAqLwotICBDSU5JVChOT1BST0dSRVNTLCBMT05HLCA0MyksICAgLyogc2h1dCBvZmYgdGhlIHByb2dyZXNzIG1ldGVyICovCi0gIENJTklUKE5PQk9EWSwgTE9ORywgNDQpLCAgICAgICAvKiB1c2UgSEVBRCB0byBnZXQgaHR0cCBkb2N1bWVudCAqLwotICBDSU5JVChGQUlMT05FUlJPUiwgTE9ORywgNDUpLCAgLyogbm8gb3V0cHV0IG9uIGh0dHAgZXJyb3IgY29kZXMgPj0gNDAwICovCi0gIENJTklUKFVQTE9BRCwgTE9ORywgNDYpLCAgICAgICAvKiB0aGlzIGlzIGFuIHVwbG9hZCAqLwotICBDSU5JVChQT1NULCBMT05HLCA0NyksICAgICAgICAgLyogSFRUUCBQT1NUIG1ldGhvZCAqLwotICBDSU5JVChESVJMSVNUT05MWSwgTE9ORywgNDgpLCAgLyogYmFyZSBuYW1lcyB3aGVuIGxpc3RpbmcgZGlyZWN0b3JpZXMgKi8KKyAgLyogdGFsayBhIGxvdCAqLworICBDVVJMT1BUKENVUkxPUFRfVkVSQk9TRSwgQ1VSTE9QVFRZUEVfTE9ORywgNDEpLAogCi0gIENJTklUKEFQUEVORCwgTE9ORywgNTApLCAgICAgICAvKiBBcHBlbmQgaW5zdGVhZCBvZiBvdmVyd3JpdGUgb24gdXBsb2FkISAqLworICAvKiB0aHJvdyB0aGUgaGVhZGVyIG91dCB0b28gKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0hFQURFUiwgQ1VSTE9QVFRZUEVfTE9ORywgNDIpLAorCisgIC8qIHNodXQgb2ZmIHRoZSBwcm9ncmVzcyBtZXRlciAqLworICBDVVJMT1BUKENVUkxPUFRfTk9QUk9HUkVTUywgQ1VSTE9QVFRZUEVfTE9ORywgNDMpLAorCisgIC8qIHVzZSBIRUFEIHRvIGdldCBodHRwIGRvY3VtZW50ICovCisgIENVUkxPUFQoQ1VSTE9QVF9OT0JPRFksIENVUkxPUFRUWVBFX0xPTkcsIDQ0KSwKKworICAvKiBubyBvdXRwdXQgb24gaHR0cCBlcnJvciBjb2RlcyA+PSA0MDAgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0ZBSUxPTkVSUk9SLCBDVVJMT1BUVFlQRV9MT05HLCA0NSksCisKKyAgLyogdGhpcyBpcyBhbiB1cGxvYWQgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1VQTE9BRCwgQ1VSTE9QVFRZUEVfTE9ORywgNDYpLAorCisgIC8qIEhUVFAgUE9TVCBtZXRob2QgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1QsIENVUkxPUFRUWVBFX0xPTkcsIDQ3KSwKKworICAvKiBiYXJlIG5hbWVzIHdoZW4gbGlzdGluZyBkaXJlY3RvcmllcyAqLworICBDVVJMT1BUKENVUkxPUFRfRElSTElTVE9OTFksIENVUkxPUFRUWVBFX0xPTkcsIDQ4KSwKKworICAvKiBBcHBlbmQgaW5zdGVhZCBvZiBvdmVyd3JpdGUgb24gdXBsb2FkISAqLworICBDVVJMT1BUKENVUkxPUFRfQVBQRU5ELCBDVVJMT1BUVFlQRV9MT05HLCA1MCksCiAKICAgLyogU3BlY2lmeSB3aGV0aGVyIHRvIHJlYWQgdGhlIHVzZXIrcGFzc3dvcmQgZnJvbSB0aGUgLm5ldHJjIG9yIHRoZSBVUkwuCiAgICAqIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIENVUkxfTkVUUkNfKiBlbnVtcyBiZWxvdy4gKi8KLSAgQ0lOSVQoTkVUUkMsIExPTkcsIDUxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX05FVFJDLCBDVVJMT1BUVFlQRV9MT05HLCA1MSksCiAKLSAgQ0lOSVQoRk9MTE9XTE9DQVRJT04sIExPTkcsIDUyKSwgIC8qIHVzZSBMb2NhdGlvbjogTHVrZSEgKi8KKyAgLyogdXNlIExvY2F0aW9uOiBMdWtlISAqLworICBDVVJMT1BUKENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIENVUkxPUFRUWVBFX0xPTkcsIDUyKSwKIAotICBDSU5JVChUUkFOU0ZFUlRFWFQsIExPTkcsIDUzKSwgLyogdHJhbnNmZXIgZGF0YSBpbiB0ZXh0L0FTQ0lJIGZvcm1hdCAqLwotICBDSU5JVChQVVQsIExPTkcsIDU0KSwgICAgICAgICAgLyogSFRUUCBQVVQgKi8KKyAgIC8qIHRyYW5zZmVyIGRhdGEgaW4gdGV4dC9BU0NJSSBmb3JtYXQgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1RSQU5TRkVSVEVYVCwgQ1VSTE9QVFRZUEVfTE9ORywgNTMpLAorCisgIC8qIEhUVFAgUFVUICovCisgIENVUkxPUFQoQ1VSTE9QVF9QVVQsIENVUkxPUFRUWVBFX0xPTkcsIDU0KSwKIAogICAvKiA1NSA9IE9CU09MRVRFICovCiAKQEAgLTExMjcsMjY1ICsxMTU4LDI2NyBAQAogICAgKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIHByb2dyZXNzIGRpc3BsYXkKICAgICogZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sKICAgICogcHJvdG90eXBlIGRlZmluZXMuICovCi0gIENJTklUKFBST0dSRVNTRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDU2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDU2KSwKIAogICAvKiBEYXRhIHBhc3NlZCB0byB0aGUgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OIGFuZCBDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04KICAgICAgY2FsbGJhY2tzICovCi0gIENJTklUKFBST0dSRVNTREFUQSwgT0JKRUNUUE9JTlQsIDU3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST0dSRVNTREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDU3KSwKICNkZWZpbmUgQ1VSTE9QVF9YRkVSSU5GT0RBVEEgQ1VSTE9QVF9QUk9HUkVTU0RBVEEKIAogICAvKiBXZSB3YW50IHRoZSByZWZlcnJlciBmaWVsZCBzZXQgYXV0b21hdGljYWxseSB3aGVuIGZvbGxvd2luZyBsb2NhdGlvbnMgKi8KLSAgQ0lOSVQoQVVUT1JFRkVSRVIsIExPTkcsIDU4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FVVE9SRUZFUkVSLCBDVVJMT1BUVFlQRV9MT05HLCA1OCksCiAKICAgLyogUG9ydCBvZiB0aGUgcHJveHksIGNhbiBiZSBzZXQgaW4gdGhlIHByb3h5IHN0cmluZyBhcyB3ZWxsIHdpdGg6CiAgICAgICJbaG9zdF06W3BvcnRdIiAqLwotICBDSU5JVChQUk9YWVBPUlQsIExPTkcsIDU5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZUE9SVCwgQ1VSTE9QVFRZUEVfTE9ORywgNTkpLAogCiAgIC8qIHNpemUgb2YgdGhlIFBPU1QgaW5wdXQgZGF0YSwgaWYgc3RybGVuKCkgaXMgbm90IGdvb2QgdG8gdXNlICovCi0gIENJTklUKFBPU1RGSUVMRFNJWkUsIExPTkcsIDYwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDYwKSwKIAogICAvKiB0dW5uZWwgbm9uLWh0dHAgb3BlcmF0aW9ucyB0aHJvdWdoIGEgSFRUUCBwcm94eSAqLwotICBDSU5JVChIVFRQUFJPWFlUVU5ORUwsIExPTkcsIDYxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTCwgQ1VSTE9QVFRZUEVfTE9ORywgNjEpLAogCiAgIC8qIFNldCB0aGUgaW50ZXJmYWNlIHN0cmluZyB0byB1c2UgYXMgb3V0Z29pbmcgbmV0d29yayBpbnRlcmZhY2UgKi8KLSAgQ0lOSVQoSU5URVJGQUNFLCBTVFJJTkdQT0lOVCwgNjIpLAorICBDVVJMT1BUKENVUkxPUFRfSU5URVJGQUNFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNjIpLAogCiAgIC8qIFNldCB0aGUga3JiNC81IHNlY3VyaXR5IGxldmVsLCB0aGlzIGFsc28gZW5hYmxlcyBrcmI0LzUgYXdhcmVuZXNzLiAgVGhpcwogICAgKiBpcyBhIHN0cmluZywgJ2NsZWFyJywgJ3NhZmUnLCAnY29uZmlkZW50aWFsJyBvciAncHJpdmF0ZScuICBJZiB0aGUgc3RyaW5nCiAgICAqIGlzIHNldCBidXQgZG9lc24ndCBtYXRjaCBvbmUgb2YgdGhlc2UsICdwcml2YXRlJyB3aWxsIGJlIHVzZWQuICAqLwotICBDSU5JVChLUkJMRVZFTCwgU1RSSU5HUE9JTlQsIDYzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0tSQkxFVkVMLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNjMpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBwZWVyIGluIHNzbCBoYW5kc2hha2UsIHNldCAxIHRvIHZlcmlmeS4gKi8KLSAgQ0lOSVQoU1NMX1ZFUklGWVBFRVIsIExPTkcsIDY0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBDVVJMT1BUVFlQRV9MT05HLCA2NCksCiAKICAgLyogVGhlIENBcGF0aCBvciBDQWZpbGUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcGVlciBjZXJ0aWZpY2F0ZQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChDQUlORk8sIFNUUklOR1BPSU5ULCA2NSksCisgIENVUkxPUFQoQ1VSTE9QVF9DQUlORk8sIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA2NSksCiAKICAgLyogNjYgPSBPQlNPTEVURSAqLwogICAvKiA2NyA9IE9CU09MRVRFICovCiAKICAgLyogTWF4aW11bSBudW1iZXIgb2YgaHR0cCByZWRpcmVjdHMgdG8gZm9sbG93ICovCi0gIENJTklUKE1BWFJFRElSUywgTE9ORywgNjgpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYUkVESVJTLCBDVVJMT1BUVFlQRV9MT05HLCA2OCksCiAKICAgLyogUGFzcyBhIGxvbmcgc2V0IHRvIDEgdG8gZ2V0IHRoZSBkYXRlIG9mIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnQgKGlmCiAgICAgIHBvc3NpYmxlKSEgUGFzcyBhIHplcm8gdG8gc2h1dCBpdCBvZmYuICovCi0gIENJTklUKEZJTEVUSU1FLCBMT05HLCA2OSksCisgIENVUkxPUFQoQ1VSTE9QVF9GSUxFVElNRSwgQ1VSTE9QVFRZUEVfTE9ORywgNjkpLAogCiAgIC8qIFRoaXMgcG9pbnRzIHRvIGEgbGlua2VkIGxpc3Qgb2YgdGVsbmV0IG9wdGlvbnMgKi8KLSAgQ0lOSVQoVEVMTkVUT1BUSU9OUywgT0JKRUNUUE9JTlQsIDcwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RFTE5FVE9QVElPTlMsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDcwKSwKIAogICAvKiBNYXggYW1vdW50IG9mIGNhY2hlZCBhbGl2ZSBjb25uZWN0aW9ucyAqLwotICBDSU5JVChNQVhDT05ORUNUUywgTE9ORywgNzEpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYQ09OTkVDVFMsIENVUkxPUFRUWVBFX0xPTkcsIDcxKSwKIAotICBDSU5JVChPQlNPTEVURTcyLCBMT05HLCA3MiksIC8qIE9CU09MRVRFLCBkbyBub3QgdXNlISAqLworICAvKiBPQlNPTEVURSwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX09CU09MRVRFNzIsIENVUkxPUFRUWVBFX0xPTkcsIDcyKSwKIAogICAvKiA3MyA9IE9CU09MRVRFICovCiAKICAgLyogU2V0IHRvIGV4cGxpY2l0bHkgdXNlIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoZSB1cGNvbWluZyB0cmFuc2Zlci4KICAgICAgRG8gbm90IHVzZSB0aGlzIHVubGVzcyB5b3UncmUgYWJzb2x1dGVseSBzdXJlIG9mIHRoaXMsIGFzIGl0IG1ha2VzIHRoZQogICAgICBvcGVyYXRpb24gc2xvd2VyIGFuZCBpcyBsZXNzIGZyaWVuZGx5IGZvciB0aGUgbmV0d29yay4gKi8KLSAgQ0lOSVQoRlJFU0hfQ09OTkVDVCwgTE9ORywgNzQpLAorICBDVVJMT1BUKENVUkxPUFRfRlJFU0hfQ09OTkVDVCwgQ1VSTE9QVFRZUEVfTE9ORywgNzQpLAogCiAgIC8qIFNldCB0byBleHBsaWNpdGx5IGZvcmJpZCB0aGUgdXBjb21pbmcgdHJhbnNmZXIncyBjb25uZWN0aW9uIHRvIGJlIHJlLXVzZWQKICAgICAgd2hlbiBkb25lLiBEbyBub3QgdXNlIHRoaXMgdW5sZXNzIHlvdSdyZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcywgYXMgaXQKICAgICAgbWFrZXMgdGhlIG9wZXJhdGlvbiBzbG93ZXIgYW5kIGlzIGxlc3MgZnJpZW5kbHkgZm9yIHRoZSBuZXR3b3JrLiAqLwotICBDSU5JVChGT1JCSURfUkVVU0UsIExPTkcsIDc1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZPUkJJRF9SRVVTRSwgQ1VSTE9QVFRZUEVfTE9ORywgNzUpLAogCiAgIC8qIFNldCB0byBhIGZpbGUgbmFtZSB0aGF0IGNvbnRhaW5zIHJhbmRvbSBkYXRhIGZvciBsaWJjdXJsIHRvIHVzZSB0bwogICAgICBzZWVkIHRoZSByYW5kb20gZW5naW5lIHdoZW4gZG9pbmcgU1NMIGNvbm5lY3RzLiAqLwotICBDSU5JVChSQU5ET01fRklMRSwgU1RSSU5HUE9JTlQsIDc2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JBTkRPTV9GSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNzYpLAogCiAgIC8qIFNldCB0byB0aGUgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZSAqLwotICBDSU5JVChFR0RTT0NLRVQsIFNUUklOR1BPSU5ULCA3NyksCisgIENVUkxPUFQoQ1VSTE9QVF9FR0RTT0NLRVQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA3NyksCiAKICAgLyogVGltZS1vdXQgY29ubmVjdCBvcGVyYXRpb25zIGFmdGVyIHRoaXMgYW1vdW50IG9mIHNlY29uZHMsIGlmIGNvbm5lY3RzIGFyZQogICAgICBPSyB3aXRoaW4gdGhpcyB0aW1lLCB0aGVuIGZpbmUuLi4gVGhpcyBvbmx5IGFib3J0cyB0aGUgY29ubmVjdCBwaGFzZS4gKi8KLSAgQ0lOSVQoQ09OTkVDVFRJTUVPVVQsIExPTkcsIDc4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCBDVVJMT1BUVFlQRV9MT05HLCA3OCksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBzdG9yZSBoZWFkZXJzIChpbnN0ZWFkIG9mIGZ3cml0ZSkuIFRoZQogICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZ3cml0ZSgpIHN5bnRheCwgbWFrZSBzdXJlIHRvIGZvbGxvdyB0aGVtLiAqLwotICBDSU5JVChIRUFERVJGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgNzkpLAorICBDVVJMT1BUKENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDc5KSwKIAogICAvKiBTZXQgdGhpcyB0byBmb3JjZSB0aGUgSFRUUCByZXF1ZXN0IHRvIGdldCBiYWNrIHRvIEdFVC4gT25seSByZWFsbHkgdXNhYmxlCiAgICAgIGlmIFBPU1QsIFBVVCBvciBhIGN1c3RvbSByZXF1ZXN0IGhhdmUgYmVlbiB1c2VkIGZpcnN0LgogICAgKi8KLSAgQ0lOSVQoSFRUUEdFVCwgTE9ORywgODApLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUEdFVCwgQ1VSTE9QVFRZUEVfTE9ORywgODApLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBDb21tb24gbmFtZSBmcm9tIHRoZSBwZWVyIGNlcnRpZmljYXRlIGluIHNzbAogICAgKiBoYW5kc2hha2UsIHNldCAxIHRvIGNoZWNrIGV4aXN0ZW5jZSwgMiB0byBlbnN1cmUgdGhhdCBpdCBtYXRjaGVzIHRoZQogICAgKiBwcm92aWRlZCBob3N0bmFtZS4gKi8KLSAgQ0lOSVQoU1NMX1ZFUklGWUhPU1QsIExPTkcsIDgxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBDVVJMT1BUVFlQRV9MT05HLCA4MSksCiAKICAgLyogU3BlY2lmeSB3aGljaCBmaWxlIG5hbWUgdG8gd3JpdGUgYWxsIGtub3duIGNvb2tpZXMgaW4gYWZ0ZXIgY29tcGxldGVkCiAgICAgIG9wZXJhdGlvbi4gU2V0IGZpbGUgbmFtZSB0byAiLSIgKGRhc2gpIHRvIG1ha2UgaXQgZ28gdG8gc3Rkb3V0LiAqLwotICBDSU5JVChDT09LSUVKQVIsIFNUUklOR1BPSU5ULCA4MiksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUVKQVIsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA4MiksCiAKICAgLyogU3BlY2lmeSB3aGljaCBTU0wgY2lwaGVycyB0byB1c2UgKi8KLSAgQ0lOSVQoU1NMX0NJUEhFUl9MSVNULCBTVFJJTkdQT0lOVCwgODMpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMX0NJUEhFUl9MSVNULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODMpLAogCiAgIC8qIFNwZWNpZnkgd2hpY2ggSFRUUCB2ZXJzaW9uIHRvIHVzZSEgVGhpcyBtdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlCiAgICAgIENVUkxfSFRUUF9WRVJTSU9OKiBlbnVtcyBzZXQgYmVsb3cuICovCi0gIENJTklUKEhUVFBfVkVSU0lPTiwgTE9ORywgODQpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUF9WRVJTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCA4NCksCiAKICAgLyogU3BlY2lmaWNhbGx5IHN3aXRjaCBvbiBvciBvZmYgdGhlIEZUUCBlbmdpbmUncyB1c2Ugb2YgdGhlIEVQU1YgY29tbWFuZC4gQnkKICAgICAgZGVmYXVsdCwgdGhhdCBvbmUgd2lsbCBhbHdheXMgYmUgYXR0ZW1wdGVkIGJlZm9yZSB0aGUgbW9yZSB0cmFkaXRpb25hbAogICAgICBQQVNWIGNvbW1hbmQuICovCi0gIENJTklUKEZUUF9VU0VfRVBTViwgTE9ORywgODUpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX1VTRV9FUFNWLCBDVVJMT1BUVFlQRV9MT05HLCA4NSksCiAKICAgLyogdHlwZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgU1NMLWNlcnRpZmljYXRlICgiREVSIiwgIlBFTSIsICJFTkciKSAqLwotICBDSU5JVChTU0xDRVJUVFlQRSwgU1RSSU5HUE9JTlQsIDg2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTENFUlRUWVBFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODYpLAogCiAgIC8qIG5hbWUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIHByaXZhdGUgU1NMLWtleSAqLwotICBDSU5JVChTU0xLRVksIFNUUklOR1BPSU5ULCA4NyksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xLRVksIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA4NyksCiAKICAgLyogdHlwZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgcHJpdmF0ZSBTU0wta2V5ICgiREVSIiwgIlBFTSIsICJFTkciKSAqLwotICBDSU5JVChTU0xLRVlUWVBFLCBTVFJJTkdQT0lOVCwgODgpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMS0VZVFlQRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDg4KSwKIAogICAvKiBjcnlwdG8gZW5naW5lIGZvciB0aGUgU1NMLXN1YiBzeXN0ZW0gKi8KLSAgQ0lOSVQoU1NMRU5HSU5FLCBTVFJJTkdQT0lOVCwgODkpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMRU5HSU5FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODkpLAogCiAgIC8qIHNldCB0aGUgY3J5cHRvIGVuZ2luZSBmb3IgdGhlIFNTTC1zdWIgc3lzdGVtIGFzIGRlZmF1bHQKICAgICAgdGhlIHBhcmFtIGhhcyBubyBtZWFuaW5nLi4uCiAgICAqLwotICBDSU5JVChTU0xFTkdJTkVfREVGQVVMVCwgTE9ORywgOTApLAorICBDVVJMT1BUKENVUkxPUFRfU1NMRU5HSU5FX0RFRkFVTFQsIENVUkxPUFRUWVBFX0xPTkcsIDkwKSwKIAogICAvKiBOb24temVybyB2YWx1ZSBtZWFucyB0byB1c2UgdGhlIGdsb2JhbCBkbnMgY2FjaGUgKi8KLSAgQ0lOSVQoRE5TX1VTRV9HTE9CQUxfQ0FDSEUsIExPTkcsIDkxKSwgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFLCBDVVJMT1BUVFlQRV9MT05HLCA5MSksCiAKICAgLyogRE5TIGNhY2hlIHRpbWVvdXQgKi8KLSAgQ0lOSVQoRE5TX0NBQ0hFX1RJTUVPVVQsIExPTkcsIDkyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VULCBDVVJMT1BUVFlQRV9MT05HLCA5MiksCiAKICAgLyogc2VuZCBsaW5rZWQtbGlzdCBvZiBwcmUtdHJhbnNmZXIgUVVPVEUgY29tbWFuZHMgKi8KLSAgQ0lOSVQoUFJFUVVPVEUsIE9CSkVDVFBPSU5ULCA5MyksCisgIENVUkxPUFQoQ1VSTE9QVF9QUkVRVU9URSwgQ1VSTE9QVFRZUEVfU0xJU1RQT0lOVCwgOTMpLAogCiAgIC8qIHNldCB0aGUgZGVidWcgZnVuY3Rpb24gKi8KLSAgQ0lOSVQoREVCVUdGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgOTQpLAorICBDVVJMT1BUKENVUkxPUFRfREVCVUdGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgOTQpLAogCiAgIC8qIHNldCB0aGUgZGF0YSBmb3IgdGhlIGRlYnVnIGZ1bmN0aW9uICovCi0gIENJTklUKERFQlVHREFUQSwgT0JKRUNUUE9JTlQsIDk1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RFQlVHREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDk1KSwKIAogICAvKiBtYXJrIHRoaXMgYXMgc3RhcnQgb2YgYSBjb29raWUgc2Vzc2lvbiAqLwotICBDSU5JVChDT09LSUVTRVNTSU9OLCBMT05HLCA5NiksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUVTRVNTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCA5NiksCiAKICAgLyogVGhlIENBcGF0aCBkaXJlY3RvcnkgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcGVlciBjZXJ0aWZpY2F0ZQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChDQVBBVEgsIFNUUklOR1BPSU5ULCA5NyksCisgIENVUkxPUFQoQ1VSTE9QVF9DQVBBVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA5NyksCiAKICAgLyogSW5zdHJ1Y3QgbGliY3VybCB0byB1c2UgYSBzbWFsbGVyIHJlY2VpdmUgYnVmZmVyICovCi0gIENJTklUKEJVRkZFUlNJWkUsIExPTkcsIDk4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0JVRkZFUlNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDk4KSwKIAogICAvKiBJbnN0cnVjdCBsaWJjdXJsIHRvIG5vdCB1c2UgYW55IHNpZ25hbC9hbGFybSBoYW5kbGVycywgZXZlbiB3aGVuIHVzaW5nCiAgICAgIHRpbWVvdXRzLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4KICAgICAgU2VlIGxpYmN1cmwtdGhlLWd1aWRlIGZvciBtb3JlIGJhY2tncm91bmQgaW5mb3JtYXRpb24uICovCi0gIENJTklUKE5PU0lHTkFMLCBMT05HLCA5OSksCisgIENVUkxPUFQoQ1VSTE9QVF9OT1NJR05BTCwgQ1VSTE9QVFRZUEVfTE9ORywgOTkpLAogCiAgIC8qIFByb3ZpZGUgYSBDVVJMU2hhcmUgZm9yIG11dGV4aW5nIG5vbi10cyBkYXRhICovCi0gIENJTklUKFNIQVJFLCBPQkpFQ1RQT0lOVCwgMTAwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NIQVJFLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTAwKSwKIAogICAvKiBpbmRpY2F0ZXMgdHlwZSBvZiBwcm94eS4gYWNjZXB0ZWQgdmFsdWVzIGFyZSBDVVJMUFJPWFlfSFRUUCAoZGVmYXVsdCksCiAgICAgIENVUkxQUk9YWV9IVFRQUywgQ1VSTFBST1hZX1NPQ0tTNCwgQ1VSTFBST1hZX1NPQ0tTNEEgYW5kCiAgICAgIENVUkxQUk9YWV9TT0NLUzUuICovCi0gIENJTklUKFBST1hZVFlQRSwgTE9ORywgMTAxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZVFlQRSwgQ1VSTE9QVFRZUEVfTE9ORywgMTAxKSwKIAogICAvKiBTZXQgdGhlIEFjY2VwdC1FbmNvZGluZyBzdHJpbmcuIFVzZSB0aGlzIHRvIHRlbGwgYSBzZXJ2ZXIgeW91IHdvdWxkIGxpa2UKICAgICAgdGhlIHJlc3BvbnNlIHRvIGJlIGNvbXByZXNzZWQuIEJlZm9yZSA3LjIxLjYsIHRoaXMgd2FzIGtub3duIGFzCiAgICAgIENVUkxPUFRfRU5DT0RJTkcgKi8KLSAgQ0lOSVQoQUNDRVBUX0VOQ09ESU5HLCBTVFJJTkdQT0lOVCwgMTAyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FDQ0VQVF9FTkNPRElORywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDEwMiksCiAKICAgLyogU2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0gIENJTklUKFBSSVZBVEUsIE9CSkVDVFBPSU5ULCAxMDMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJJVkFURSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDEwMyksCiAKICAgLyogU2V0IGFsaWFzZXMgZm9yIEhUVFAgMjAwIGluIHRoZSBIVFRQIFJlc3BvbnNlIGhlYWRlciAqLwotICBDSU5JVChIVFRQMjAwQUxJQVNFUywgT0JKRUNUUE9JTlQsIDEwNCksCisgIENVUkxPUFQoQ1VSTE9QVF9IVFRQMjAwQUxJQVNFUywgQ1VSTE9QVFRZUEVfU0xJU1RQT0lOVCwgMTA0KSwKIAogICAvKiBDb250aW51ZSB0byBzZW5kIGF1dGhlbnRpY2F0aW9uICh1c2VyK3Bhc3N3b3JkKSB3aGVuIGZvbGxvd2luZyBsb2NhdGlvbnMsCiAgICAgIGV2ZW4gd2hlbiBob3N0bmFtZSBjaGFuZ2VkLiBUaGlzIGNhbiBwb3RlbnRpYWxseSBzZW5kIG9mZiB0aGUgbmFtZQogICAgICBhbmQgcGFzc3dvcmQgdG8gd2hhdGV2ZXIgaG9zdCB0aGUgc2VydmVyIGRlY2lkZXMuICovCi0gIENJTklUKFVOUkVTVFJJQ1RFRF9BVVRILCBMT05HLCAxMDUpLAorICBDVVJMT1BUKENVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEgsIENVUkxPUFRUWVBFX0xPTkcsIDEwNSksCiAKICAgLyogU3BlY2lmaWNhbGx5IHN3aXRjaCBvbiBvciBvZmYgdGhlIEZUUCBlbmdpbmUncyB1c2Ugb2YgdGhlIEVQUlQgY29tbWFuZCAoCiAgICAgIGl0IGFsc28gZGlzYWJsZXMgdGhlIExQUlQgYXR0ZW1wdCkuIEJ5IGRlZmF1bHQsIHRob3NlIG9uZXMgd2lsbCBhbHdheXMgYmUKICAgICAgYXR0ZW1wdGVkIGJlZm9yZSB0aGUgZ29vZCBvbGQgdHJhZGl0aW9uYWwgUE9SVCBjb21tYW5kLiAqLwotICBDSU5JVChGVFBfVVNFX0VQUlQsIExPTkcsIDEwNiksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfVVNFX0VQUlQsIENVUkxPUFRUWVBFX0xPTkcsIDEwNiksCiAKICAgLyogU2V0IHRoaXMgdG8gYSBiaXRtYXNrIHZhbHVlIHRvIGVuYWJsZSB0aGUgcGFydGljdWxhciBhdXRoZW50aWNhdGlvbnMKICAgICAgbWV0aG9kcyB5b3UgbGlrZS4gVXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBDVVJMT1BUX1VTRVJQV0QuCiAgICAgIE5vdGUgdGhhdCBzZXR0aW5nIG11bHRpcGxlIGJpdHMgbWF5IGNhdXNlIGV4dHJhIG5ldHdvcmsgcm91bmQtdHJpcHMuICovCi0gIENJTklUKEhUVFBBVVRILCBMT05HLCAxMDcpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUEFVVEgsIENVUkxPUFRUWVBFX0xPTkcsIDEwNyksCiAKLSAgLyogU2V0IHRoZSBzc2wgY29udGV4dCBjYWxsYmFjayBmdW5jdGlvbiwgY3VycmVudGx5IG9ubHkgZm9yIE9wZW5TU0wgc3NsX2N0eAotICAgICBpbiBzZWNvbmQgYXJndW1lbnQuIFRoZSBmdW5jdGlvbiBtdXN0IGJlIG1hdGNoaW5nIHRoZQotICAgICBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgcHJvdG8uICovCi0gIENJTklUKFNTTF9DVFhfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDEwOCksCisgIC8qIFNldCB0aGUgc3NsIGNvbnRleHQgY2FsbGJhY2sgZnVuY3Rpb24sIGN1cnJlbnRseSBvbmx5IGZvciBPcGVuU1NMIG9yCisgICAgIFdvbGZTU0wgc3NsX2N0eCwgb3IgbWJlZFRMUyBtYmVkdGxzX3NzbF9jb25maWcgaW4gdGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAgVGhlIGZ1bmN0aW9uIG11c3QgbWF0Y2ggdGhlIGN1cmxfc3NsX2N0eF9jYWxsYmFjayBwcm90b3R5cGUuICovCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxMDgpLAogCiAgIC8qIFNldCB0aGUgdXNlcmRhdGEgZm9yIHRoZSBzc2wgY29udGV4dCBjYWxsYmFjayBmdW5jdGlvbidzIHRoaXJkCiAgICAgIGFyZ3VtZW50ICovCi0gIENJTklUKFNTTF9DVFhfREFUQSwgT0JKRUNUUE9JTlQsIDEwOSksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfQ1RYX0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxMDkpLAogCiAgIC8qIEZUUCBPcHRpb24gdGhhdCBjYXVzZXMgbWlzc2luZyBkaXJzIHRvIGJlIGNyZWF0ZWQgb24gdGhlIHJlbW90ZSBzZXJ2ZXIuCiAgICAgIEluIDcuMTkuNCB3ZSBpbnRyb2R1Y2VkIHRoZSBjb252ZW5pZW5jZSBlbnVtcyBmb3IgdGhpcyBvcHRpb24gdXNpbmcgdGhlCiAgICAgIENVUkxGVFBfQ1JFQVRFX0RJUiBwcmVmaXguCiAgICovCi0gIENJTklUKEZUUF9DUkVBVEVfTUlTU0lOR19ESVJTLCBMT05HLCAxMTApLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMsIENVUkxPUFRUWVBFX0xPTkcsIDExMCksCiAKICAgLyogU2V0IHRoaXMgdG8gYSBiaXRtYXNrIHZhbHVlIHRvIGVuYWJsZSB0aGUgcGFydGljdWxhciBhdXRoZW50aWNhdGlvbnMKICAgICAgbWV0aG9kcyB5b3UgbGlrZS4gVXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBDVVJMT1BUX1BST1hZVVNFUlBXRC4KICAgICAgTm90ZSB0aGF0IHNldHRpbmcgbXVsdGlwbGUgYml0cyBtYXkgY2F1c2UgZXh0cmEgbmV0d29yayByb3VuZC10cmlwcy4gKi8KLSAgQ0lOSVQoUFJPWFlBVVRILCBMT05HLCAxMTEpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlBVVRILCBDVVJMT1BUVFlQRV9MT05HLCAxMTEpLAogCiAgIC8qIEZUUCBvcHRpb24gdGhhdCBjaGFuZ2VzIHRoZSB0aW1lb3V0LCBpbiBzZWNvbmRzLCBhc3NvY2lhdGVkIHdpdGgKICAgICAgZ2V0dGluZyBhIHJlc3BvbnNlLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0cmFuc2ZlciB0aW1lb3V0IHRpbWUgYW5kCiAgICAgIGVzc2VudGlhbGx5IHBsYWNlcyBhIGRlbWFuZCBvbiB0aGUgRlRQIHNlcnZlciB0byBhY2tub3dsZWRnZSBjb21tYW5kcwogICAgICBpbiBhIHRpbWVseSBtYW5uZXIuICovCi0gIENJTklUKEZUUF9SRVNQT05TRV9USU1FT1VULCBMT05HLCAxMTIpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVQsIENVUkxPUFRUWVBFX0xPTkcsIDExMiksCiAjZGVmaW5lIENVUkxPUFRfU0VSVkVSX1JFU1BPTlNFX1RJTUVPVVQgQ1VSTE9QVF9GVFBfUkVTUE9OU0VfVElNRU9VVAogCiAgIC8qIFNldCB0aGlzIG9wdGlvbiB0byBvbmUgb2YgdGhlIENVUkxfSVBSRVNPTFZFXyogZGVmaW5lcyAoc2VlIGJlbG93KSB0bwogICAgICB0ZWxsIGxpYmN1cmwgdG8gcmVzb2x2ZSBuYW1lcyB0byB0aG9zZSBJUCB2ZXJzaW9ucyBvbmx5LiBUaGlzIG9ubHkgaGFzCiAgICAgIGFmZmVjdCBvbiBzeXN0ZW1zIHdpdGggc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSwgaS5lIElQdjQgX2FuZF8gSVB2Ni4gKi8KLSAgQ0lOSVQoSVBSRVNPTFZFLCBMT05HLCAxMTMpLAorICBDVVJMT1BUKENVUkxPUFRfSVBSRVNPTFZFLCBDVVJMT1BUVFlQRV9MT05HLCAxMTMpLAogCiAgIC8qIFNldCB0aGlzIG9wdGlvbiB0byBsaW1pdCB0aGUgc2l6ZSBvZiBhIGZpbGUgdGhhdCB3aWxsIGJlIGRvd25sb2FkZWQgZnJvbQogICAgICBhbiBIVFRQIG9yIEZUUCBzZXJ2ZXIuCiAKICAgICAgTm90ZSB0aGVyZSBpcyBhbHNvIF9MQVJHRSB2ZXJzaW9uIHdoaWNoIGFkZHMgbGFyZ2UgZmlsZSBzdXBwb3J0IGZvcgogICAgICBwbGF0Zm9ybXMgd2hpY2ggaGF2ZSBsYXJnZXIgb2ZmX3Qgc2l6ZXMuICBTZWUgTUFYRklMRVNJWkVfTEFSR0UgYmVsb3cuICovCi0gIENJTklUKE1BWEZJTEVTSVpFLCBMT05HLCAxMTQpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYRklMRVNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDExNCksCiAKICAgLyogU2VlIHRoZSBjb21tZW50IGZvciBJTkZJTEVTSVpFIGFib3ZlLCBidXQgaW4gc2hvcnQsIHNwZWNpZmllcwogICAgKiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBiZWluZyB1cGxvYWRlZC4gIC0xIG1lYW5zIHVua25vd24uCiAgICAqLwotICBDSU5JVChJTkZJTEVTSVpFX0xBUkdFLCBPRkZfVCwgMTE1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UsIENVUkxPUFRUWVBFX09GRl9ULCAxMTUpLAogCi0gIC8qIFNldHMgdGhlIGNvbnRpbnVhdGlvbiBvZmZzZXQuICBUaGVyZSBpcyBhbHNvIGEgTE9ORyB2ZXJzaW9uIG9mIHRoaXM7Ci0gICAqIGxvb2sgYWJvdmUgZm9yIFJFU1VNRV9GUk9NLgorICAvKiBTZXRzIHRoZSBjb250aW51YXRpb24gb2Zmc2V0LiAgVGhlcmUgaXMgYWxzbyBhIENVUkxPUFRUWVBFX0xPTkcgdmVyc2lvbgorICAgKiBvZiB0aGlzOyBsb29rIGFib3ZlIGZvciBSRVNVTUVfRlJPTS4KICAgICovCi0gIENJTklUKFJFU1VNRV9GUk9NX0xBUkdFLCBPRkZfVCwgMTE2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU1VNRV9GUk9NX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTE2KSwKIAogICAvKiBTZXRzIHRoZSBtYXhpbXVtIHNpemUgb2YgZGF0YSB0aGF0IHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tCiAgICAqIGFuIEhUVFAgb3IgRlRQIHNlcnZlci4gIFNlZSBNQVhGSUxFU0laRSBhYm92ZSBmb3IgdGhlIExPTkcgdmVyc2lvbi4KICAgICovCi0gIENJTklUKE1BWEZJTEVTSVpFX0xBUkdFLCBPRkZfVCwgMTE3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BWEZJTEVTSVpFX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTE3KSwKIAogICAvKiBTZXQgdGhpcyBvcHRpb24gdG8gdGhlIGZpbGUgbmFtZSBvZiB5b3VyIC5uZXRyYyBmaWxlIHlvdSB3YW50IGxpYmN1cmwKICAgICAgdG8gcGFyc2UgKHVzaW5nIHRoZSBDVVJMT1BUX05FVFJDIG9wdGlvbikuIElmIG5vdCBzZXQsIGxpYmN1cmwgd2lsbCBkbwogICAgICBhIHBvb3IgYXR0ZW1wdCB0byBmaW5kIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYW5kIGNoZWNrIGZvciBhIC5uZXRyYwogICAgICBmaWxlIGluIHRoZXJlLiAqLwotICBDSU5JVChORVRSQ19GSUxFLCBTVFJJTkdQT0lOVCwgMTE4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX05FVFJDX0ZJTEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxMTgpLAogCiAgIC8qIEVuYWJsZSBTU0wvVExTIGZvciBGVFAsIHBpY2sgb25lIG9mOgogICAgICBDVVJMVVNFU1NMX1RSWSAgICAgLSB0cnkgdXNpbmcgU1NMLCBwcm9jZWVkIGFueXdheSBvdGhlcndpc2UKICAgICAgQ1VSTFVTRVNTTF9DT05UUk9MIC0gU1NMIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uIG9yIGZhaWwKICAgICAgQ1VSTFVTRVNTTF9BTEwgICAgIC0gU1NMIGZvciBhbGwgY29tbXVuaWNhdGlvbiBvciBmYWlsCiAgICovCi0gIENJTklUKFVTRV9TU0wsIExPTkcsIDExOSksCisgIENVUkxPUFQoQ1VSTE9QVF9VU0VfU1NMLCBDVVJMT1BUVFlQRV9MT05HLCAxMTkpLAogCiAgIC8qIFRoZSBfTEFSR0UgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgUE9TVEZJRUxEU0laRSBvcHRpb24gKi8KLSAgQ0lOSVQoUE9TVEZJRUxEU0laRV9MQVJHRSwgT0ZGX1QsIDEyMCksCisgIENVUkxPUFQoQ1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTIwKSwKIAogICAvKiBFbmFibGUvZGlzYWJsZSB0aGUgVENQIE5hZ2xlIGFsZ29yaXRobSAqLwotICBDSU5JVChUQ1BfTk9ERUxBWSwgTE9ORywgMTIxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RDUF9OT0RFTEFZLCBDVVJMT1BUVFlQRV9MT05HLCAxMjEpLAogCiAgIC8qIDEyMiBPQlNPTEVURSwgdXNlZCBpbiA3LjEyLjMuIEdvbmUgaW4gNy4xMy4wICovCiAgIC8qIDEyMyBPQlNPTEVURS4gR29uZSBpbiA3LjE2LjAgKi8KQEAgLTE0MDUsMTQzICsxNDM4LDE0MyBAQAogICAgICBDVVJMRlRQQVVUSF9TU0wgICAgIC0gdHJ5ICJBVVRIIFNTTCIgZmlyc3QsIHRoZW4gVExTCiAgICAgIENVUkxGVFBBVVRIX1RMUyAgICAgLSB0cnkgIkFVVEggVExTIiBmaXJzdCwgdGhlbiBTU0wKICAgKi8KLSAgQ0lOSVQoRlRQU1NMQVVUSCwgTE9ORywgMTI5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUFNTTEFVVEgsIENVUkxPUFRUWVBFX0xPTkcsIDEyOSksCiAKLSAgQ0lOSVQoSU9DVExGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTMwKSwKLSAgQ0lOSVQoSU9DVExEQVRBLCBPQkpFQ1RQT0lOVCwgMTMxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lPQ1RMRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDEzMCksCisgIENVUkxPUFQoQ1VSTE9QVF9JT0NUTERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxMzEpLAogCiAgIC8qIDEzMiBPQlNPTEVURS4gR29uZSBpbiA3LjE2LjAgKi8KICAgLyogMTMzIE9CU09MRVRFLiBHb25lIGluIDcuMTYuMCAqLwogCi0gIC8qIHplcm8gdGVybWluYXRlZCBzdHJpbmcgZm9yIHBhc3Mgb24gdG8gdGhlIEZUUCBzZXJ2ZXIgd2hlbiBhc2tlZCBmb3IKKyAgLyogbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBmb3IgcGFzcyBvbiB0byB0aGUgRlRQIHNlcnZlciB3aGVuIGFza2VkIGZvcgogICAgICAiYWNjb3VudCIgaW5mbyAqLwotICBDSU5JVChGVFBfQUNDT1VOVCwgU1RSSU5HUE9JTlQsIDEzNCksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfQUNDT1VOVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDEzNCksCiAKICAgLyogZmVlZCBjb29raWUgaW50byBjb29raWUgZW5naW5lICovCi0gIENJTklUKENPT0tJRUxJU1QsIFNUUklOR1BPSU5ULCAxMzUpLAorICBDVVJMT1BUKENVUkxPUFRfQ09PS0lFTElTVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDEzNSksCiAKICAgLyogaWdub3JlIENvbnRlbnQtTGVuZ3RoICovCi0gIENJTklUKElHTk9SRV9DT05URU5UX0xFTkdUSCwgTE9ORywgMTM2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lHTk9SRV9DT05URU5UX0xFTkdUSCwgQ1VSTE9QVFRZUEVfTE9ORywgMTM2KSwKIAogICAvKiBTZXQgdG8gbm9uLXplcm8gdG8gc2tpcCB0aGUgSVAgYWRkcmVzcyByZWNlaXZlZCBpbiBhIDIyNyBQQVNWIEZUUCBzZXJ2ZXIKICAgICAgcmVzcG9uc2UuIFR5cGljYWxseSB1c2VkIGZvciBGVFAtU1NMIHB1cnBvc2VzIGJ1dCBpcyBub3QgcmVzdHJpY3RlZCB0bwogICAgICB0aGF0LiBsaWJjdXJsIHdpbGwgdGhlbiBpbnN0ZWFkIHVzZSB0aGUgc2FtZSBJUCBhZGRyZXNzIGl0IHVzZWQgZm9yIHRoZQogICAgICBjb250cm9sIGNvbm5lY3Rpb24uICovCi0gIENJTklUKEZUUF9TS0lQX1BBU1ZfSVAsIExPTkcsIDEzNyksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfU0tJUF9QQVNWX0lQLCBDVVJMT1BUVFlQRV9MT05HLCAxMzcpLAogCiAgIC8qIFNlbGVjdCAiZmlsZSBtZXRob2QiIHRvIHVzZSB3aGVuIGRvaW5nIEZUUCwgc2VlIHRoZSBjdXJsX2Z0cG1ldGhvZAogICAgICBhYm92ZS4gKi8KLSAgQ0lOSVQoRlRQX0ZJTEVNRVRIT0QsIExPTkcsIDEzOCksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfRklMRU1FVEhPRCwgQ1VSTE9QVFRZUEVfTE9ORywgMTM4KSwKIAogICAvKiBMb2NhbCBwb3J0IG51bWJlciB0byBiaW5kIHRoZSBzb2NrZXQgdG8gKi8KLSAgQ0lOSVQoTE9DQUxQT1JULCBMT05HLCAxMzkpLAorICBDVVJMT1BUKENVUkxPUFRfTE9DQUxQT1JULCBDVVJMT1BUVFlQRV9MT05HLCAxMzkpLAogCiAgIC8qIE51bWJlciBvZiBwb3J0cyB0byB0cnksIGluY2x1ZGluZyB0aGUgZmlyc3Qgb25lIHNldCB3aXRoIExPQ0FMUE9SVC4KICAgICAgVGh1cywgc2V0dGluZyBpdCB0byAxIHdpbGwgbWFrZSBubyBhZGRpdGlvbmFsIGF0dGVtcHRzIGJ1dCB0aGUgZmlyc3QuCiAgICovCi0gIENJTklUKExPQ0FMUE9SVFJBTkdFLCBMT05HLCAxNDApLAorICBDVVJMT1BUKENVUkxPUFRfTE9DQUxQT1JUUkFOR0UsIENVUkxPUFRUWVBFX0xPTkcsIDE0MCksCiAKICAgLyogbm8gdHJhbnNmZXIsIHNldCB1cCBjb25uZWN0aW9uIGFuZCBsZXQgYXBwbGljYXRpb24gdXNlIHRoZSBzb2NrZXQgYnkKICAgICAgZXh0cmFjdGluZyBpdCB3aXRoIENVUkxJTkZPX0xBU1RTT0NLRVQgKi8KLSAgQ0lOSVQoQ09OTkVDVF9PTkxZLCBMT05HLCAxNDEpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OTkVDVF9PTkxZLCBDVVJMT1BUVFlQRV9MT05HLCAxNDEpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBmcm9tIHRoZQogICAgICBuZXR3b3JrIGVuY29kaW5nIChpbnN0ZWFkIG9mIHVzaW5nIHRoZSBpY29udiBjYWxscyBpbiBsaWJjdXJsKSAqLwotICBDSU5JVChDT05WX0ZST01fTkVUV09SS19GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTQyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNDIpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCB0byB0aGUKICAgICAgbmV0d29yayBlbmNvZGluZyAoaW5zdGVhZCBvZiB1c2luZyB0aGUgaWNvbnYgY2FsbHMgaW4gbGliY3VybCkgKi8KLSAgQ0lOSVQoQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxNDMpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNDMpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBmcm9tIFVURjgKICAgICAgKGluc3RlYWQgb2YgdXNpbmcgdGhlIGljb252IGNhbGxzIGluIGxpYmN1cmwpCiAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHVzZWQgb25seSBmb3IgU1NMIGNlcnRpZmljYXRlIHByb2Nlc3NpbmcgKi8KLSAgQ0lOSVQoQ09OVl9GUk9NX1VURjhfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0NCksCisgIENVUkxPUFQoQ1VSTE9QVF9DT05WX0ZST01fVVRGOF9GVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTQ0KSwKIAogICAvKiBpZiB0aGUgY29ubmVjdGlvbiBwcm9jZWVkcyB0b28gcXVpY2tseSB0aGVuIG5lZWQgdG8gc2xvdyBpdCBkb3duICovCiAgIC8qIGxpbWl0LXJhdGU6IG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgdG8gc2VuZCBvciByZWNlaXZlICovCi0gIENJTklUKE1BWF9TRU5EX1NQRUVEX0xBUkdFLCBPRkZfVCwgMTQ1KSwKLSAgQ0lOSVQoTUFYX1JFQ1ZfU1BFRURfTEFSR0UsIE9GRl9ULCAxNDYpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYX1NFTkRfU1BFRURfTEFSR0UsIENVUkxPUFRUWVBFX09GRl9ULCAxNDUpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYX1JFQ1ZfU1BFRURfTEFSR0UsIENVUkxPUFRUWVBFX09GRl9ULCAxNDYpLAogCiAgIC8qIFBvaW50ZXIgdG8gY29tbWFuZCBzdHJpbmcgdG8gc2VuZCBpZiBVU0VSL1BBU1MgZmFpbHMuICovCi0gIENJTklUKEZUUF9BTFRFUk5BVElWRV9UT19VU0VSLCBTVFJJTkdQT0lOVCwgMTQ3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9BTFRFUk5BVElWRV9UT19VU0VSLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTQ3KSwKIAogICAvKiBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyAqLwotICBDSU5JVChTT0NLT1BURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0OCksCi0gIENJTklUKFNPQ0tPUFREQVRBLCBPQkpFQ1RQT0lOVCwgMTQ5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTQ4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tPUFREQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTQ5KSwKIAogICAvKiBzZXQgdG8gMCB0byBkaXNhYmxlIHNlc3Npb24gSUQgcmUtdXNlIGZvciB0aGlzIHRyYW5zZmVyLCBkZWZhdWx0IGlzCiAgICAgIGVuYWJsZWQgKD09IDEpICovCi0gIENJTklUKFNTTF9TRVNTSU9OSURfQ0FDSEUsIExPTkcsIDE1MCksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfU0VTU0lPTklEX0NBQ0hFLCBDVVJMT1BUVFlQRV9MT05HLCAxNTApLAogCiAgIC8qIGFsbG93ZWQgU1NIIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKi8KLSAgQ0lOSVQoU1NIX0FVVEhfVFlQRVMsIExPTkcsIDE1MSksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfQVVUSF9UWVBFUywgQ1VSTE9QVFRZUEVfTE9ORywgMTUxKSwKIAogICAvKiBVc2VkIGJ5IHNjcC9zZnRwIHRvIGRvIHB1YmxpYy9wcml2YXRlIGtleSBhdXRoZW50aWNhdGlvbiAqLwotICBDSU5JVChTU0hfUFVCTElDX0tFWUZJTEUsIFNUUklOR1BPSU5ULCAxNTIpLAotICBDSU5JVChTU0hfUFJJVkFURV9LRVlGSUxFLCBTVFJJTkdQT0lOVCwgMTUzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE1MiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTUzKSwKIAogICAvKiBTZW5kIENDQyAoQ2xlYXIgQ29tbWFuZCBDaGFubmVsKSBhZnRlciBhdXRoZW50aWNhdGlvbiAqLwotICBDSU5JVChGVFBfU1NMX0NDQywgTE9ORywgMTU0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9TU0xfQ0NDLCBDVVJMT1BUVFlQRV9MT05HLCAxNTQpLAogCiAgIC8qIFNhbWUgYXMgVElNRU9VVCBhbmQgQ09OTkVDVFRJTUVPVVQsIGJ1dCB3aXRoIG1zIHJlc29sdXRpb24gKi8KLSAgQ0lOSVQoVElNRU9VVF9NUywgTE9ORywgMTU1KSwKLSAgQ0lOSVQoQ09OTkVDVFRJTUVPVVRfTVMsIExPTkcsIDE1NiksCisgIENVUkxPUFQoQ1VSTE9QVF9USU1FT1VUX01TLCBDVVJMT1BUVFlQRV9MT05HLCAxNTUpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OTkVDVFRJTUVPVVRfTVMsIENVUkxPUFRUWVBFX0xPTkcsIDE1NiksCiAKICAgLyogc2V0IHRvIHplcm8gdG8gZGlzYWJsZSB0aGUgbGliY3VybCdzIGRlY29kaW5nIGFuZCB0aHVzIHBhc3MgdGhlIHJhdyBib2R5CiAgICAgIGRhdGEgdG8gdGhlIGFwcGxpY2F0aW9uIGV2ZW4gd2hlbiBpdCBpcyBlbmNvZGVkL2NvbXByZXNzZWQgKi8KLSAgQ0lOSVQoSFRUUF9UUkFOU0ZFUl9ERUNPRElORywgTE9ORywgMTU3KSwKLSAgQ0lOSVQoSFRUUF9DT05URU5UX0RFQ09ESU5HLCBMT05HLCAxNTgpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUF9UUkFOU0ZFUl9ERUNPRElORywgQ1VSTE9QVFRZUEVfTE9ORywgMTU3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBfQ09OVEVOVF9ERUNPRElORywgQ1VSTE9QVFRZUEVfTE9ORywgMTU4KSwKIAogICAvKiBQZXJtaXNzaW9uIHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIHRoZSByZW1vdGUKICAgICAgc2VydmVyIGZvciBwcm90b2NvbHMgdGhhdCBzdXBwb3J0IGl0LCBTRlRQL1NDUC9GSUxFICovCi0gIENJTklUKE5FV19GSUxFX1BFUk1TLCBMT05HLCAxNTkpLAotICBDSU5JVChORVdfRElSRUNUT1JZX1BFUk1TLCBMT05HLCAxNjApLAorICBDVVJMT1BUKENVUkxPUFRfTkVXX0ZJTEVfUEVSTVMsIENVUkxPUFRUWVBFX0xPTkcsIDE1OSksCisgIENVUkxPUFQoQ1VSTE9QVF9ORVdfRElSRUNUT1JZX1BFUk1TLCBDVVJMT1BUVFlQRV9MT05HLCAxNjApLAogCiAgIC8qIFNldCB0aGUgYmVoYXZpb3VyIG9mIFBPU1Qgd2hlbiByZWRpcmVjdGluZy4gVmFsdWVzIG11c3QgYmUgc2V0IHRvIG9uZQogICAgICBvZiBDVVJMX1JFRElSKiBkZWZpbmVzIGJlbG93LiBUaGlzIHVzZWQgdG8gYmUgY2FsbGVkIENVUkxPUFRfUE9TVDMwMSAqLwotICBDSU5JVChQT1NUUkVESVIsIExPTkcsIDE2MSksCisgIENVUkxPUFQoQ1VSTE9QVF9QT1NUUkVESVIsIENVUkxPUFRUWVBFX0xPTkcsIDE2MSksCiAKICAgLyogdXNlZCBieSBzY3Avc2Z0cCB0byB2ZXJpZnkgdGhlIGhvc3QncyBwdWJsaWMga2V5ICovCi0gIENJTklUKFNTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1LCBTVFJJTkdQT0lOVCwgMTYyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1LCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTYyKSwKIAogICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igb3BlbmluZyBzb2NrZXQgKGluc3RlYWQgb2Ygc29ja2V0KDIpKS4gT3B0aW9uYWxseSwKICAgICAgY2FsbGJhY2sgaXMgYWJsZSBjaGFuZ2UgdGhlIGFkZHJlc3Mgb3IgcmVmdXNlIHRvIGNvbm5lY3QgcmV0dXJuaW5nCiAgICAgIENVUkxfU09DS0VUX0JBRC4gIFRoZSBjYWxsYmFjayBzaG91bGQgaGF2ZSB0eXBlCiAgICAgIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayAqLwotICBDSU5JVChPUEVOU09DS0VURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE2MyksCi0gIENJTklUKE9QRU5TT0NLRVREQVRBLCBPQkpFQ1RQT0lOVCwgMTY0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTYzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX09QRU5TT0NLRVREQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTY0KSwKIAogICAvKiBQT1NUIHZvbGF0aWxlIGlucHV0IGZpZWxkcy4gKi8KLSAgQ0lOSVQoQ09QWVBPU1RGSUVMRFMsIE9CSkVDVFBPSU5ULCAxNjUpLAorICBDVVJMT1BUKENVUkxPUFRfQ09QWVBPU1RGSUVMRFMsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNjUpLAogCiAgIC8qIHNldCB0cmFuc2ZlciBtb2RlICg7dHlwZT08YXxpPikgd2hlbiBkb2luZyBGVFAgdmlhIGFuIEhUVFAgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfVFJBTlNGRVJfTU9ERSwgTE9ORywgMTY2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1RSQU5TRkVSX01PREUsIENVUkxPUFRUWVBFX0xPTkcsIDE2NiksCiAKICAgLyogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHNlZWtpbmcgaW4gdGhlIGlucHV0IHN0cmVhbSAqLwotICBDSU5JVChTRUVLRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE2NyksCi0gIENJTklUKFNFRUtEQVRBLCBPQkpFQ1RQT0lOVCwgMTY4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NFRUtGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTY3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NFRUtEQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTY4KSwKIAogICAvKiBDUkwgZmlsZSAqLwotICBDSU5JVChDUkxGSUxFLCBTVFJJTkdQT0lOVCwgMTY5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NSTEZJTEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNjkpLAogCiAgIC8qIElzc3VlciBjZXJ0aWZpY2F0ZSAqLwotICBDSU5JVChJU1NVRVJDRVJULCBTVFJJTkdQT0lOVCwgMTcwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lTU1VFUkNFUlQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzApLAogCiAgIC8qIChJUHY2KSBBZGRyZXNzIHNjb3BlICovCi0gIENJTklUKEFERFJFU1NfU0NPUEUsIExPTkcsIDE3MSksCisgIENVUkxPUFQoQ1VSTE9QVF9BRERSRVNTX1NDT1BFLCBDVVJMT1BUVFlQRV9MT05HLCAxNzEpLAogCiAgIC8qIENvbGxlY3QgY2VydGlmaWNhdGUgY2hhaW4gaW5mbyBhbmQgYWxsb3cgaXQgdG8gZ2V0IHJldHJpZXZhYmxlIHdpdGgKICAgICAgQ1VSTElORk9fQ0VSVElORk8gYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiAqLwotICBDSU5JVChDRVJUSU5GTywgTE9ORywgMTcyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NFUlRJTkZPLCBDVVJMT1BUVFlQRV9MT05HLCAxNzIpLAogCiAgIC8qICJuYW1lIiBhbmQgInB3ZCIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcuICovCi0gIENJTklUKFVTRVJOQU1FLCBTVFJJTkdQT0lOVCwgMTczKSwKLSAgQ0lOSVQoUEFTU1dPUkQsIFNUUklOR1BPSU5ULCAxNzQpLAorICBDVVJMT1BUKENVUkxPUFRfVVNFUk5BTUUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzMpLAorICBDVVJMT1BUKENVUkxPUFRfUEFTU1dPUkQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzQpLAogCiAgICAgLyogIm5hbWUiIGFuZCAicHdkIiB0byB1c2Ugd2l0aCBQcm94eSB3aGVuIGZldGNoaW5nLiAqLwotICBDSU5JVChQUk9YWVVTRVJOQU1FLCBTVFJJTkdQT0lOVCwgMTc1KSwKLSAgQ0lOSVQoUFJPWFlQQVNTV09SRCwgU1RSSU5HUE9JTlQsIDE3NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWVVTRVJOQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTc1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZUEFTU1dPUkQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzYpLAogCiAgIC8qIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGhvc3RuYW1lcyBkZWZpbmluZyBuby1wcm94eSB6b25lcy4gVGhlc2Ugc2hvdWxkCiAgICAgIG1hdGNoIGJvdGggaG9zdG5hbWVzIGRpcmVjdGx5LCBhbmQgaG9zdG5hbWVzIHdpdGhpbiBhIGRvbWFpbi4gRm9yCkBAIC0xNTUwLDEwMyArMTU4MywxMDMgQEAKICAgICAgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMsIC5sb2NhbC5jb20gd2lsbCBiZSBjb25zaWRlcmVkIHRvIGJlIHRoZSBzYW1lIGFzCiAgICAgIGxvY2FsLmNvbS4gQSBzaW5nbGUgKiBpcyB0aGUgb25seSB2YWxpZCB3aWxkY2FyZCwgYW5kIGVmZmVjdGl2ZWx5CiAgICAgIGRpc2FibGVzIHRoZSB1c2Ugb2YgcHJveHkuICovCi0gIENJTklUKE5PUFJPWFksIFNUUklOR1BPSU5ULCAxNzcpLAorICBDVVJMT1BUKENVUkxPUFRfTk9QUk9YWSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3NyksCiAKICAgLyogYmxvY2sgc2l6ZSBmb3IgVEZUUCB0cmFuc2ZlcnMgKi8KLSAgQ0lOSVQoVEZUUF9CTEtTSVpFLCBMT05HLCAxNzgpLAorICBDVVJMT1BUKENVUkxPUFRfVEZUUF9CTEtTSVpFLCBDVVJMT1BUVFlQRV9MT05HLCAxNzgpLAogCiAgIC8qIFNvY2tzIFNlcnZpY2UgKi8KLSAgQ0lOSVQoU09DS1M1X0dTU0FQSV9TRVJWSUNFLCBTVFJJTkdQT0lOVCwgMTc5KSwgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3OSksCiAKICAgLyogU29ja3MgU2VydmljZSAqLwotICBDSU5JVChTT0NLUzVfR1NTQVBJX05FQywgTE9ORywgMTgwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tTNV9HU1NBUElfTkVDLCBDVVJMT1BUVFlQRV9MT05HLCAxODApLAogCiAgIC8qIHNldCB0aGUgYml0bWFzayBmb3IgdGhlIHByb3RvY29scyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgZm9yIHRoZQogICAgICB0cmFuc2Zlciwgd2hpY2ggdGh1cyBoZWxwcyB0aGUgYXBwIHdoaWNoIHRha2VzIFVSTHMgZnJvbSB1c2VycyBvciBvdGhlcgogICAgICBleHRlcm5hbCBpbnB1dHMgYW5kIHdhbnQgdG8gcmVzdHJpY3Qgd2hhdCBwcm90b2NvbChzKSB0byBkZWFsCiAgICAgIHdpdGguIERlZmF1bHRzIHRvIENVUkxQUk9UT19BTEwuICovCi0gIENJTklUKFBST1RPQ09MUywgTE9ORywgMTgxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1RPQ09MUywgQ1VSTE9QVFRZUEVfTE9ORywgMTgxKSwKIAogICAvKiBzZXQgdGhlIGJpdG1hc2sgZm9yIHRoZSBwcm90b2NvbHMgdGhhdCBsaWJjdXJsIGlzIGFsbG93ZWQgdG8gZm9sbG93IHRvLAogICAgICBhcyBhIHN1YnNldCBvZiB0aGUgQ1VSTE9QVF9QUk9UT0NPTFMgb25lcy4gVGhhdCBtZWFucyB0aGUgcHJvdG9jb2wgbmVlZHMKLSAgICAgdG8gYmUgc2V0IGluIGJvdGggYml0bWFza3MgdG8gYmUgYWxsb3dlZCB0byBnZXQgcmVkaXJlY3RlZCB0by4gRGVmYXVsdHMKLSAgICAgdG8gYWxsIHByb3RvY29scyBleGNlcHQgRklMRSBhbmQgU0NQLiAqLwotICBDSU5JVChSRURJUl9QUk9UT0NPTFMsIExPTkcsIDE4MiksCisgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uICovCisgIENVUkxPUFQoQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMsIENVUkxPUFRUWVBFX0xPTkcsIDE4MiksCiAKICAgLyogc2V0IHRoZSBTU0gga25vd25ob3N0IGZpbGUgbmFtZSB0byB1c2UgKi8KLSAgQ0lOSVQoU1NIX0tOT1dOSE9TVFMsIFNUUklOR1BPSU5ULCAxODMpLAorICBDVVJMT1BUKENVUkxPUFRfU1NIX0tOT1dOSE9TVFMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxODMpLAogCiAgIC8qIHNldCB0aGUgU1NIIGhvc3Qga2V5IGNhbGxiYWNrLCBtdXN0IHBvaW50IHRvIGEgY3VybF9zc2hrZXljYWxsYmFjawogICAgICBmdW5jdGlvbiAqLwotICBDSU5JVChTU0hfS0VZRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE4NCksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfS0VZRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDE4NCksCiAKICAgLyogc2V0IHRoZSBTU0ggaG9zdCBrZXkgY2FsbGJhY2sgY3VzdG9tIHBvaW50ZXIgKi8KLSAgQ0lOSVQoU1NIX0tFWURBVEEsIE9CSkVDVFBPSU5ULCAxODUpLAorICBDVVJMT1BUKENVUkxPUFRfU1NIX0tFWURBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxODUpLAogCiAgIC8qIHNldCB0aGUgU01UUCBtYWlsIG9yaWdpbmF0b3IgKi8KLSAgQ0lOSVQoTUFJTF9GUk9NLCBTVFJJTkdQT0lOVCwgMTg2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BSUxfRlJPTSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE4NiksCiAKICAgLyogc2V0IHRoZSBsaXN0IG9mIFNNVFAgbWFpbCByZWNlaXZlcihzKSAqLwotICBDSU5JVChNQUlMX1JDUFQsIE9CSkVDVFBPSU5ULCAxODcpLAorICBDVVJMT1BUKENVUkxPUFRfTUFJTF9SQ1BULCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAxODcpLAogCiAgIC8qIEZUUDogc2VuZCBQUkVUIGJlZm9yZSBQQVNWICovCi0gIENJTklUKEZUUF9VU0VfUFJFVCwgTE9ORywgMTg4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9VU0VfUFJFVCwgQ1VSTE9QVFRZUEVfTE9ORywgMTg4KSwKIAogICAvKiBSVFNQIHJlcXVlc3QgbWV0aG9kIChPUFRJT05TLCBTRVRVUCwgUExBWSwgZXRjLi4uKSAqLwotICBDSU5JVChSVFNQX1JFUVVFU1QsIExPTkcsIDE4OSksCisgIENVUkxPUFQoQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxPUFRUWVBFX0xPTkcsIDE4OSksCiAKICAgLyogVGhlIFJUU1Agc2Vzc2lvbiBpZGVudGlmaWVyICovCi0gIENJTklUKFJUU1BfU0VTU0lPTl9JRCwgU1RSSU5HUE9JTlQsIDE5MCksCisgIENVUkxPUFQoQ1VSTE9QVF9SVFNQX1NFU1NJT05fSUQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxOTApLAogCiAgIC8qIFRoZSBSVFNQIHN0cmVhbSBVUkkgKi8KLSAgQ0lOSVQoUlRTUF9TVFJFQU1fVVJJLCBTVFJJTkdQT0lOVCwgMTkxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE5MSksCiAKICAgLyogVGhlIFRyYW5zcG9ydDogaGVhZGVyIHRvIHVzZSBpbiBSVFNQIHJlcXVlc3RzICovCi0gIENJTklUKFJUU1BfVFJBTlNQT1JULCBTVFJJTkdQT0lOVCwgMTkyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JUU1BfVFJBTlNQT1JULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTkyKSwKIAogICAvKiBNYW51YWxseSBpbml0aWFsaXplIHRoZSBjbGllbnQgUlRTUCBDU2VxIGZvciB0aGlzIGhhbmRsZSAqLwotICBDSU5JVChSVFNQX0NMSUVOVF9DU0VRLCBMT05HLCAxOTMpLAorICBDVVJMT1BUKENVUkxPUFRfUlRTUF9DTElFTlRfQ1NFUSwgQ1VSTE9QVFRZUEVfTE9ORywgMTkzKSwKIAogICAvKiBNYW51YWxseSBpbml0aWFsaXplIHRoZSBzZXJ2ZXIgUlRTUCBDU2VxIGZvciB0aGlzIGhhbmRsZSAqLwotICBDSU5JVChSVFNQX1NFUlZFUl9DU0VRLCBMT05HLCAxOTQpLAorICBDVVJMT1BUKENVUkxPUFRfUlRTUF9TRVJWRVJfQ1NFUSwgQ1VSTE9QVFRZUEVfTE9ORywgMTk0KSwKIAogICAvKiBUaGUgc3RyZWFtIHRvIHBhc3MgdG8gSU5URVJMRUFWRUZVTkNUSU9OLiAqLwotICBDSU5JVChJTlRFUkxFQVZFREFUQSwgT0JKRUNUUE9JTlQsIDE5NSksCisgIENVUkxPUFQoQ1VSTE9QVF9JTlRFUkxFQVZFREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDE5NSksCiAKICAgLyogTGV0IHRoZSBhcHBsaWNhdGlvbiBkZWZpbmUgYSBjdXN0b20gd3JpdGUgbWV0aG9kIGZvciBSVFAgZGF0YSAqLwotICBDSU5JVChJTlRFUkxFQVZFRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE5NiksCisgIENVUkxPUFQoQ1VSTE9QVF9JTlRFUkxFQVZFRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDE5NiksCiAKICAgLyogVHVybiBvbiB3aWxkY2FyZCBtYXRjaGluZyAqLwotICBDSU5JVChXSUxEQ0FSRE1BVENILCBMT05HLCAxOTcpLAorICBDVVJMT1BUKENVUkxPUFRfV0lMRENBUkRNQVRDSCwgQ1VSTE9QVFRZUEVfTE9ORywgMTk3KSwKIAogICAvKiBEaXJlY3RvcnkgbWF0Y2hpbmcgY2FsbGJhY2sgY2FsbGVkIGJlZm9yZSBkb3dubG9hZGluZyBvZiBhbgogICAgICBpbmRpdmlkdWFsIGZpbGUgKGNodW5rKSBzdGFydGVkICovCi0gIENJTklUKENIVU5LX0JHTl9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTk4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NIVU5LX0JHTl9GVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTk4KSwKIAogICAvKiBEaXJlY3RvcnkgbWF0Y2hpbmcgY2FsbGJhY2sgY2FsbGVkIGFmdGVyIHRoZSBmaWxlIChjaHVuaykKICAgICAgd2FzIGRvd25sb2FkZWQsIG9yIHNraXBwZWQgKi8KLSAgQ0lOSVQoQ0hVTktfRU5EX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxOTkpLAorICBDVVJMT1BUKENVUkxPUFRfQ0hVTktfRU5EX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxOTkpLAogCiAgIC8qIENoYW5nZSBtYXRjaCAoZm5tYXRjaC1saWtlKSBjYWxsYmFjayBmb3Igd2lsZGNhcmQgbWF0Y2hpbmcgKi8KLSAgQ0lOSVQoRk5NQVRDSF9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjAwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZOTUFUQ0hfRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDIwMCksCiAKICAgLyogTGV0IHRoZSBhcHBsaWNhdGlvbiBkZWZpbmUgY3VzdG9tIGNodW5rIGRhdGEgcG9pbnRlciAqLwotICBDSU5JVChDSFVOS19EQVRBLCBPQkpFQ1RQT0lOVCwgMjAxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NIVU5LX0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyMDEpLAogCiAgIC8qIEZOTUFUQ0hfRlVOQ1RJT04gdXNlciBwb2ludGVyICovCi0gIENJTklUKEZOTUFUQ0hfREFUQSwgT0JKRUNUUE9JTlQsIDIwMiksCisgIENVUkxPUFQoQ1VSTE9QVF9GTk1BVENIX0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyMDIpLAogCiAgIC8qIHNlbmQgbGlua2VkLWxpc3Qgb2YgbmFtZTpwb3J0OmFkZHJlc3Mgc2V0cyAqLwotICBDSU5JVChSRVNPTFZFLCBPQkpFQ1RQT0lOVCwgMjAzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU09MVkUsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDIwMyksCiAKICAgLyogU2V0IGEgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTICovCi0gIENJTklUKFRMU0FVVEhfVVNFUk5BTUUsIFNUUklOR1BPSU5ULCAyMDQpLAorICBDVVJMT1BUKENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIwNCksCiAKICAgLyogU2V0IGEgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0ZWQgVExTICovCi0gIENJTklUKFRMU0FVVEhfUEFTU1dPUkQsIFNUUklOR1BPSU5ULCAyMDUpLAorICBDVVJMT1BUKENVUkxPUFRfVExTQVVUSF9QQVNTV09SRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIwNSksCiAKICAgLyogU2V0IGF1dGhlbnRpY2F0aW9uIHR5cGUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTICovCi0gIENJTklUKFRMU0FVVEhfVFlQRSwgU1RSSU5HUE9JTlQsIDIwNiksCisgIENVUkxPUFQoQ1VSTE9QVF9UTFNBVVRIX1RZUEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMDYpLAogCiAgIC8qIFNldCB0byAxIHRvIGVuYWJsZSB0aGUgIlRFOiIgaGVhZGVyIGluIEhUVFAgcmVxdWVzdHMgdG8gYXNrIGZvcgogICAgICBjb21wcmVzc2VkIHRyYW5zZmVyLWVuY29kZWQgcmVzcG9uc2VzLiBTZXQgdG8gMCB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgVEU6CkBAIC0xNjU4LDI2OCArMTY5MSwyODUgQEAKICAgICAgb3B0aW9uIGlzIHNldCB0byAxLgogCiAgICovCi0gIENJTklUKFRSQU5TRkVSX0VOQ09ESU5HLCBMT05HLCAyMDcpLAorICBDVVJMT1BUKENVUkxPUFRfVFJBTlNGRVJfRU5DT0RJTkcsIENVUkxPUFRUWVBFX0xPTkcsIDIwNyksCiAKICAgLyogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGNsb3Npbmcgc29ja2V0IChpbnN0ZWFkIG9mIGNsb3NlKDIpKS4gVGhlIGNhbGxiYWNrCiAgICAgIHNob3VsZCBoYXZlIHR5cGUgY3VybF9jbG9zZXNvY2tldF9jYWxsYmFjayAqLwotICBDSU5JVChDTE9TRVNPQ0tFVEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyMDgpLAotICBDSU5JVChDTE9TRVNPQ0tFVERBVEEsIE9CSkVDVFBPSU5ULCAyMDkpLAorICBDVVJMT1BUKENVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMjA4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NMT1NFU09DS0VUREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDIwOSksCiAKICAgLyogYWxsb3cgR1NTQVBJIGNyZWRlbnRpYWwgZGVsZWdhdGlvbiAqLwotICBDSU5JVChHU1NBUElfREVMRUdBVElPTiwgTE9ORywgMjEwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0dTU0FQSV9ERUxFR0FUSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAyMTApLAogCiAgIC8qIFNldCB0aGUgbmFtZSBzZXJ2ZXJzIHRvIHVzZSBmb3IgRE5TIHJlc29sdXRpb24gKi8KLSAgQ0lOSVQoRE5TX1NFUlZFUlMsIFNUUklOR1BPSU5ULCAyMTEpLAorICBDVVJMT1BUKENVUkxPUFRfRE5TX1NFUlZFUlMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMTEpLAogCiAgIC8qIFRpbWUtb3V0IGFjY2VwdCBvcGVyYXRpb25zIChjdXJyZW50bHkgZm9yIEZUUCBvbmx5KSBhZnRlciB0aGlzIGFtb3VudAogICAgICBvZiBtaWxsaXNlY29uZHMuICovCi0gIENJTklUKEFDQ0VQVFRJTUVPVVRfTVMsIExPTkcsIDIxMiksCisgIENVUkxPUFQoQ1VSTE9QVF9BQ0NFUFRUSU1FT1VUX01TLCBDVVJMT1BUVFlQRV9MT05HLCAyMTIpLAogCiAgIC8qIFNldCBUQ1Aga2VlcGFsaXZlICovCi0gIENJTklUKFRDUF9LRUVQQUxJVkUsIExPTkcsIDIxMyksCisgIENVUkxPUFQoQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCBDVVJMT1BUVFlQRV9MT05HLCAyMTMpLAogCiAgIC8qIG5vbi11bml2ZXJzYWwga2VlcGFsaXZlIGtub2JzIChMaW51eCwgQUlYLCBIUC1VWCwgbW9yZSkgKi8KLSAgQ0lOSVQoVENQX0tFRVBJRExFLCBMT05HLCAyMTQpLAotICBDSU5JVChUQ1BfS0VFUElOVFZMLCBMT05HLCAyMTUpLAorICBDVVJMT1BUKENVUkxPUFRfVENQX0tFRVBJRExFLCBDVVJMT1BUVFlQRV9MT05HLCAyMTQpLAorICBDVVJMT1BUKENVUkxPUFRfVENQX0tFRVBJTlRWTCwgQ1VSTE9QVFRZUEVfTE9ORywgMjE1KSwKIAogICAvKiBFbmFibGUvZGlzYWJsZSBzcGVjaWZpYyBTU0wgZmVhdHVyZXMgd2l0aCBhIGJpdG1hc2ssIHNlZSBDVVJMU1NMT1BUXyogKi8KLSAgQ0lOSVQoU1NMX09QVElPTlMsIExPTkcsIDIxNiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfT1BUSU9OUywgQ1VSTE9QVFRZUEVfTE9ORywgMjE2KSwKIAogICAvKiBTZXQgdGhlIFNNVFAgYXV0aCBvcmlnaW5hdG9yICovCi0gIENJTklUKE1BSUxfQVVUSCwgU1RSSU5HUE9JTlQsIDIxNyksCisgIENVUkxPUFQoQ1VSTE9QVF9NQUlMX0FVVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMTcpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIFNBU0wgaW5pdGlhbCByZXNwb25zZSAqLwotICBDSU5JVChTQVNMX0lSLCBMT05HLCAyMTgpLAorICBDVVJMT1BUKENVUkxPUFRfU0FTTF9JUiwgQ1VSTE9QVFRZUEVfTE9ORywgMjE4KSwKIAogICAvKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIHByb2dyZXNzIGRpc3BsYXkKICAgICogZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGN1cmxfeGZlcmluZm9fY2FsbGJhY2sKICAgICogcHJvdG90eXBlIGRlZmluZXMuIChEZXByZWNhdGVzIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTikgKi8KLSAgQ0lOSVQoWEZFUklORk9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjE5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDIxOSksCiAKICAgLyogVGhlIFhPQVVUSDIgYmVhcmVyIHRva2VuICovCi0gIENJTklUKFhPQVVUSDJfQkVBUkVSLCBTVFJJTkdQT0lOVCwgMjIwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1hPQVVUSDJfQkVBUkVSLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjIwKSwKIAogICAvKiBTZXQgdGhlIGludGVyZmFjZSBzdHJpbmcgdG8gdXNlIGFzIG91dGdvaW5nIG5ldHdvcmsKICAgICogaW50ZXJmYWNlIGZvciBETlMgcmVxdWVzdHMuCiAgICAqIE9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBjLWFyZXMgRE5TIGJhY2tlbmQgKi8KLSAgQ0lOSVQoRE5TX0lOVEVSRkFDRSwgU1RSSU5HUE9JTlQsIDIyMSksCisgIENVUkxPUFQoQ1VSTE9QVF9ETlNfSU5URVJGQUNFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjIxKSwKIAogICAvKiBTZXQgdGhlIGxvY2FsIElQdjQgYWRkcmVzcyB0byB1c2UgZm9yIG91dGdvaW5nIEROUyByZXF1ZXN0cy4KICAgICogT25seSBzdXBwb3J0ZWQgYnkgdGhlIGMtYXJlcyBETlMgYmFja2VuZCAqLwotICBDSU5JVChETlNfTE9DQUxfSVA0LCBTVFJJTkdQT0lOVCwgMjIyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19MT0NBTF9JUDQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMjIpLAogCiAgIC8qIFNldCB0aGUgbG9jYWwgSVB2NiBhZGRyZXNzIHRvIHVzZSBmb3Igb3V0Z29pbmcgRE5TIHJlcXVlc3RzLgogICAgKiBPbmx5IHN1cHBvcnRlZCBieSB0aGUgYy1hcmVzIEROUyBiYWNrZW5kICovCi0gIENJTklUKEROU19MT0NBTF9JUDYsIFNUUklOR1BPSU5ULCAyMjMpLAorICBDVVJMT1BUKENVUkxPUFRfRE5TX0xPQ0FMX0lQNiwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIyMyksCiAKICAgLyogU2V0IGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgZGlyZWN0bHkgKi8KLSAgQ0lOSVQoTE9HSU5fT1BUSU9OUywgU1RSSU5HUE9JTlQsIDIyNCksCisgIENVUkxPUFQoQ1VSTE9QVF9MT0dJTl9PUFRJT05TLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjI0KSwKIAogICAvKiBFbmFibGUvZGlzYWJsZSBUTFMgTlBOIGV4dGVuc2lvbiAoaHR0cDIgb3ZlciBzc2wgbWlnaHQgZmFpbCB3aXRob3V0KSAqLwotICBDSU5JVChTU0xfRU5BQkxFX05QTiwgTE9ORywgMjI1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9FTkFCTEVfTlBOLCBDVVJMT1BUVFlQRV9MT05HLCAyMjUpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIFRMUyBBTFBOIGV4dGVuc2lvbiAoaHR0cDIgb3ZlciBzc2wgbWlnaHQgZmFpbCB3aXRob3V0KSAqLwotICBDSU5JVChTU0xfRU5BQkxFX0FMUE4sIExPTkcsIDIyNiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfRU5BQkxFX0FMUE4sIENVUkxPUFRUWVBFX0xPTkcsIDIyNiksCiAKICAgLyogVGltZSB0byB3YWl0IGZvciBhIHJlc3BvbnNlIHRvIGEgSFRUUCByZXF1ZXN0IGNvbnRhaW5pbmcgYW4KICAgICogRXhwZWN0OiAxMDAtY29udGludWUgaGVhZGVyIGJlZm9yZSBzZW5kaW5nIHRoZSBkYXRhIGFueXdheS4gKi8KLSAgQ0lOSVQoRVhQRUNUXzEwMF9USU1FT1VUX01TLCBMT05HLCAyMjcpLAorICBDVVJMT1BUKENVUkxPUFRfRVhQRUNUXzEwMF9USU1FT1VUX01TLCBDVVJMT1BUVFlQRV9MT05HLCAyMjcpLAogCiAgIC8qIFRoaXMgcG9pbnRzIHRvIGEgbGlua2VkIGxpc3Qgb2YgaGVhZGVycyB1c2VkIGZvciBwcm94eSByZXF1ZXN0cyBvbmx5LAogICAgICBzdHJ1Y3QgY3VybF9zbGlzdCBraW5kICovCi0gIENJTklUKFBST1hZSEVBREVSLCBPQkpFQ1RQT0lOVCwgMjI4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZSEVBREVSLCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAyMjgpLAogCiAgIC8qIFBhc3MgaW4gYSBiaXRtYXNrIG9mICJoZWFkZXIgb3B0aW9ucyIgKi8KLSAgQ0lOSVQoSEVBREVST1BULCBMT05HLCAyMjkpLAorICBDVVJMT1BUKENVUkxPUFRfSEVBREVST1BULCBDVVJMT1BUVFlQRV9MT05HLCAyMjkpLAogCiAgIC8qIFRoZSBwdWJsaWMga2V5IGluIERFUiBmb3JtIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBlZXIgcHVibGljIGtleQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChQSU5ORURQVUJMSUNLRVksIFNUUklOR1BPSU5ULCAyMzApLAorICBDVVJMT1BUKENVUkxPUFRfUElOTkVEUFVCTElDS0VZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjMwKSwKIAogICAvKiBQYXRoIHRvIFVuaXggZG9tYWluIHNvY2tldCAqLwotICBDSU5JVChVTklYX1NPQ0tFVF9QQVRILCBTVFJJTkdQT0lOVCwgMjMxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1VOSVhfU09DS0VUX1BBVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMzEpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBzdGF0dXMuICovCi0gIENJTklUKFNTTF9WRVJJRllTVEFUVVMsIExPTkcsIDIzMiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfVkVSSUZZU1RBVFVTLCBDVVJMT1BUVFlQRV9MT05HLCAyMzIpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgZW5hYmxlIFRMUyBmYWxzZSBzdGFydC4gKi8KLSAgQ0lOSVQoU1NMX0ZBTFNFU1RBUlQsIExPTkcsIDIzMyksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfRkFMU0VTVEFSVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjMzKSwKIAogICAvKiBEbyBub3Qgc3F1YXNoIGRvdC1kb3Qgc2VxdWVuY2VzICovCi0gIENJTklUKFBBVEhfQVNfSVMsIExPTkcsIDIzNCksCisgIENVUkxPUFQoQ1VSTE9QVF9QQVRIX0FTX0lTLCBDVVJMT1BUVFlQRV9MT05HLCAyMzQpLAogCiAgIC8qIFByb3h5IFNlcnZpY2UgTmFtZSAqLwotICBDSU5JVChQUk9YWV9TRVJWSUNFX05BTUUsIFNUUklOR1BPSU5ULCAyMzUpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU0VSVklDRV9OQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjM1KSwKIAogICAvKiBTZXJ2aWNlIE5hbWUgKi8KLSAgQ0lOSVQoU0VSVklDRV9OQU1FLCBTVFJJTkdQT0lOVCwgMjM2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NFUlZJQ0VfTkFNRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIzNiksCiAKICAgLyogV2FpdC9kb24ndCB3YWl0IGZvciBwaXBlL211dGV4IHRvIGNsYXJpZnkgKi8KLSAgQ0lOSVQoUElQRVdBSVQsIExPTkcsIDIzNyksCisgIENVUkxPUFQoQ1VSTE9QVF9QSVBFV0FJVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjM3KSwKIAogICAvKiBTZXQgdGhlIHByb3RvY29sIHVzZWQgd2hlbiBjdXJsIGlzIGdpdmVuIGEgVVJMIHdpdGhvdXQgYSBwcm90b2NvbCAqLwotICBDSU5JVChERUZBVUxUX1BST1RPQ09MLCBTVFJJTkdQT0lOVCwgMjM4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RFRkFVTFRfUFJPVE9DT0wsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMzgpLAogCiAgIC8qIFNldCBzdHJlYW0gd2VpZ2h0LCAxIC0gMjU2IChkZWZhdWx0IGlzIDE2KSAqLwotICBDSU5JVChTVFJFQU1fV0VJR0hULCBMT05HLCAyMzkpLAorICBDVVJMT1BUKENVUkxPUFRfU1RSRUFNX1dFSUdIVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjM5KSwKIAogICAvKiBTZXQgc3RyZWFtIGRlcGVuZGVuY3kgb24gYW5vdGhlciBDVVJMIGhhbmRsZSAqLwotICBDSU5JVChTVFJFQU1fREVQRU5EUywgT0JKRUNUUE9JTlQsIDI0MCksCisgIENVUkxPUFQoQ1VSTE9QVF9TVFJFQU1fREVQRU5EUywgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI0MCksCiAKICAgLyogU2V0IEUteGNsdXNpdmUgc3RyZWFtIGRlcGVuZGVuY3kgb24gYW5vdGhlciBDVVJMIGhhbmRsZSAqLwotICBDSU5JVChTVFJFQU1fREVQRU5EU19FLCBPQkpFQ1RQT0lOVCwgMjQxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NUUkVBTV9ERVBFTkRTX0UsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyNDEpLAogCiAgIC8qIERvIG5vdCBzZW5kIGFueSB0ZnRwIG9wdGlvbiByZXF1ZXN0cyB0byB0aGUgc2VydmVyICovCi0gIENJTklUKFRGVFBfTk9fT1BUSU9OUywgTE9ORywgMjQyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RGVFBfTk9fT1BUSU9OUywgQ1VSTE9QVFRZUEVfTE9ORywgMjQyKSwKIAogICAvKiBMaW5rZWQtbGlzdCBvZiBob3N0OnBvcnQ6Y29ubmVjdC10by1ob3N0OmNvbm5lY3QtdG8tcG9ydCwKICAgICAgb3ZlcnJpZGVzIHRoZSBVUkwncyBob3N0OnBvcnQgKG9ubHkgZm9yIHRoZSBuZXR3b3JrIGxheWVyKSAqLwotICBDSU5JVChDT05ORUNUX1RPLCBPQkpFQ1RQT0lOVCwgMjQzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NPTk5FQ1RfVE8sIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDI0MyksCiAKICAgLyogU2V0IFRDUCBGYXN0IE9wZW4gKi8KLSAgQ0lOSVQoVENQX0ZBU1RPUEVOLCBMT05HLCAyNDQpLAorICBDVVJMT1BUKENVUkxPUFRfVENQX0ZBU1RPUEVOLCBDVVJMT1BUVFlQRV9MT05HLCAyNDQpLAogCiAgIC8qIENvbnRpbnVlIHRvIHNlbmQgZGF0YSBpZiB0aGUgc2VydmVyIHJlc3BvbmRzIGVhcmx5IHdpdGggYW4KICAgICogSFRUUCBzdGF0dXMgY29kZSA+PSAzMDAgKi8KLSAgQ0lOSVQoS0VFUF9TRU5ESU5HX09OX0VSUk9SLCBMT05HLCAyNDUpLAorICBDVVJMT1BUKENVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SLCBDVVJMT1BUVFlQRV9MT05HLCAyNDUpLAogCiAgIC8qIFRoZSBDQXBhdGggb3IgQ0FmaWxlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHByb3h5IGNlcnRpZmljYXRlCiAgICAgIHRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSBpZiBQUk9YWV9TU0xfVkVSSUZZUEVFUiBpcyB0cnVlICovCi0gIENJTklUKFBST1hZX0NBSU5GTywgU1RSSU5HUE9JTlQsIDI0NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9DQUlORk8sIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNDYpLAogCiAgIC8qIFRoZSBDQXBhdGggZGlyZWN0b3J5IHVzZWQgdG8gdmFsaWRhdGUgdGhlIHByb3h5IGNlcnRpZmljYXRlCiAgICAgIHRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSBpZiBQUk9YWV9TU0xfVkVSSUZZUEVFUiBpcyB0cnVlICovCi0gIENJTklUKFBST1hZX0NBUEFUSCwgU1RSSU5HUE9JTlQsIDI0NyksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNDcpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBwcm94eSBpbiBzc2wgaGFuZHNoYWtlLAogICAgICBzZXQgMSB0byB2ZXJpZnkuICovCi0gIENJTklUKFBST1hZX1NTTF9WRVJJRllQRUVSLCBMT05HLCAyNDgpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIsIENVUkxPUFRUWVBFX0xPTkcsIDI0OCksCiAKICAgLyogU2V0IGlmIHdlIHNob3VsZCB2ZXJpZnkgdGhlIENvbW1vbiBuYW1lIGZyb20gdGhlIHByb3h5IGNlcnRpZmljYXRlIGluIHNzbAogICAgKiBoYW5kc2hha2UsIHNldCAxIHRvIGNoZWNrIGV4aXN0ZW5jZSwgMiB0byBlbnN1cmUgdGhhdCBpdCBtYXRjaGVzCiAgICAqIHRoZSBwcm92aWRlZCBob3N0bmFtZS4gKi8KLSAgQ0lOSVQoUFJPWFlfU1NMX1ZFUklGWUhPU1QsIExPTkcsIDI0OSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjQ5KSwKIAogICAvKiBXaGF0IHZlcnNpb24gdG8gc3BlY2lmaWNhbGx5IHRyeSB0byB1c2UgZm9yIHByb3h5LgogICAgICBTZWUgQ1VSTF9TU0xWRVJTSU9OIGRlZmluZXMgYmVsb3cuICovCi0gIENJTklUKFBST1hZX1NTTFZFUlNJT04sIExPTkcsIDI1MCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAyNTApLAogCiAgIC8qIFNldCBhIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGVkIFRMUyBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfVExTQVVUSF9VU0VSTkFNRSwgU1RSSU5HUE9JTlQsIDI1MSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1VTRVJOQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjUxKSwKIAogICAvKiBTZXQgYSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRlZCBUTFMgZm9yIHByb3h5ICovCi0gIENJTklUKFBST1hZX1RMU0FVVEhfUEFTU1dPUkQsIFNUUklOR1BPSU5ULCAyNTIpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfVExTQVVUSF9QQVNTV09SRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1MiksCiAKICAgLyogU2V0IGF1dGhlbnRpY2F0aW9uIHR5cGUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTIGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9UTFNBVVRIX1RZUEUsIFNUUklOR1BPSU5ULCAyNTMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjUzKSwKIAogICAvKiBuYW1lIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1jZXJ0aWZpY2F0ZSBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfU1NMQ0VSVCwgU1RSSU5HUE9JTlQsIDI1NCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xDRVJULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU0KSwKIAogICAvKiB0eXBlIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBTU0wtY2VydGlmaWNhdGUgKCJERVIiLCAiUEVNIiwgIkVORyIpIGZvcgogICAgICBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xDRVJUVFlQRSwgU1RSSU5HUE9JTlQsIDI1NSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1NSksCiAKICAgLyogbmFtZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgcHJpdmF0ZSBTU0wta2V5IGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xLRVksIFNUUklOR1BPSU5ULCAyNTYpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMS0VZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU2KSwKIAogICAvKiB0eXBlIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1rZXkgKCJERVIiLCAiUEVNIiwgIkVORyIpIGZvcgogICAgICBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xLRVlUWVBFLCBTVFJJTkdQT0lOVCwgMjU3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNTcpLAogCiAgIC8qIHBhc3N3b3JkIGZvciB0aGUgU1NMIHByaXZhdGUga2V5IGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9LRVlQQVNTV0QsIFNUUklOR1BPSU5ULCAyNTgpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfS0VZUEFTU1dELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU4KSwKIAogICAvKiBTcGVjaWZ5IHdoaWNoIFNTTCBjaXBoZXJzIHRvIHVzZSBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfU1NMX0NJUEhFUl9MSVNULCBTVFJJTkdQT0lOVCwgMjU5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1OSksCiAKICAgLyogQ1JMIGZpbGUgZm9yIHByb3h5ICovCi0gIENJTklUKFBST1hZX0NSTEZJTEUsIFNUUklOR1BPSU5ULCAyNjApLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfQ1JMRklMRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI2MCksCiAKICAgLyogRW5hYmxlL2Rpc2FibGUgc3BlY2lmaWMgU1NMIGZlYXR1cmVzIHdpdGggYSBiaXRtYXNrIGZvciBwcm94eSwgc2VlCiAgICAgIENVUkxTU0xPUFRfKiAqLwotICBDSU5JVChQUk9YWV9TU0xfT1BUSU9OUywgTE9ORywgMjYxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TLCBDVVJMT1BUVFlQRV9MT05HLCAyNjEpLAogCiAgIC8qIE5hbWUgb2YgcHJlIHByb3h5IHRvIHVzZS4gKi8KLSAgQ0lOSVQoUFJFX1BST1hZLCBTVFJJTkdQT0lOVCwgMjYyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BSRV9QUk9YWSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI2MiksCiAKICAgLyogVGhlIHB1YmxpYyBrZXkgaW4gREVSIGZvcm0gdXNlZCB0byB2YWxpZGF0ZSB0aGUgcHJveHkgcHVibGljIGtleQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgUFJPWFlfU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChQUk9YWV9QSU5ORURQVUJMSUNLRVksIFNUUklOR1BPSU5ULCAyNjMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfUElOTkVEUFVCTElDS0VZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjYzKSwKIAogICAvKiBQYXRoIHRvIGFuIGFic3RyYWN0IFVuaXggZG9tYWluIHNvY2tldCAqLwotICBDSU5JVChBQlNUUkFDVF9VTklYX1NPQ0tFVCwgU1RSSU5HUE9JTlQsIDI2NCksCisgIENVUkxPUFQoQ1VSTE9QVF9BQlNUUkFDVF9VTklYX1NPQ0tFVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI2NCksCiAKICAgLyogU3VwcHJlc3MgcHJveHkgQ09OTkVDVCByZXNwb25zZSBoZWFkZXJzIGZyb20gdXNlciBjYWxsYmFja3MgKi8KLSAgQ0lOSVQoU1VQUFJFU1NfQ09OTkVDVF9IRUFERVJTLCBMT05HLCAyNjUpLAorICBDVVJMT1BUKENVUkxPUFRfU1VQUFJFU1NfQ09OTkVDVF9IRUFERVJTLCBDVVJMT1BUVFlQRV9MT05HLCAyNjUpLAogCiAgIC8qIFRoZSByZXF1ZXN0IHRhcmdldCwgaW5zdGVhZCBvZiBleHRyYWN0ZWQgZnJvbSB0aGUgVVJMICovCi0gIENJTklUKFJFUVVFU1RfVEFSR0VULCBTVFJJTkdQT0lOVCwgMjY2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFUVVFU1RfVEFSR0VULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjY2KSwKIAogICAvKiBiaXRtYXNrIG9mIGFsbG93ZWQgYXV0aCBtZXRob2RzIGZvciBjb25uZWN0aW9ucyB0byBTT0NLUzUgcHJveGllcyAqLwotICBDSU5JVChTT0NLUzVfQVVUSCwgTE9ORywgMjY3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tTNV9BVVRILCBDVVJMT1BUVFlQRV9MT05HLCAyNjcpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIFNTSCBjb21wcmVzc2lvbiAqLwotICBDSU5JVChTU0hfQ09NUFJFU1NJT04sIExPTkcsIDI2OCksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfQ09NUFJFU1NJT04sIENVUkxPUFRUWVBFX0xPTkcsIDI2OCksCiAKICAgLyogUG9zdCBNSU1FIGRhdGEuICovCi0gIENJTklUKE1JTUVQT1NULCBPQkpFQ1RQT0lOVCwgMjY5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01JTUVQT1NULCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjY5KSwKIAogICAvKiBUaW1lIHRvIHVzZSB3aXRoIHRoZSBDVVJMT1BUX1RJTUVDT05ESVRJT04uIFNwZWNpZmllZCBpbiBudW1iZXIgb2YKICAgICAgc2Vjb25kcyBzaW5jZSAxIEphbiAxOTcwLiAqLwotICBDSU5JVChUSU1FVkFMVUVfTEFSR0UsIE9GRl9ULCAyNzApLAorICBDVVJMT1BUKENVUkxPUFRfVElNRVZBTFVFX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMjcwKSwKIAogICAvKiBIZWFkIHN0YXJ0IGluIG1pbGxpc2Vjb25kcyB0byBnaXZlIGhhcHB5IGV5ZWJhbGxzLiAqLwotICBDSU5JVChIQVBQWV9FWUVCQUxMU19USU1FT1VUX01TLCBMT05HLCAyNzEpLAorICBDVVJMT1BUKENVUkxPUFRfSEFQUFlfRVlFQkFMTFNfVElNRU9VVF9NUywgQ1VSTE9QVFRZUEVfTE9ORywgMjcxKSwKIAogICAvKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhIHJlc29sdmVyIHJlcXVlc3QgaXMgbWFkZSAqLwotICBDSU5JVChSRVNPTFZFUl9TVEFSVF9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjcyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU09MVkVSX1NUQVJUX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAyNzIpLAogCiAgIC8qIFVzZXIgZGF0YSB0byBwYXNzIHRvIHRoZSByZXNvbHZlciBzdGFydCBjYWxsYmFjay4gKi8KLSAgQ0lOSVQoUkVTT0xWRVJfU1RBUlRfREFUQSwgT0JKRUNUUE9JTlQsIDI3MyksCisgIENVUkxPUFQoQ1VSTE9QVF9SRVNPTFZFUl9TVEFSVF9EQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjczKSwKIAogICAvKiBzZW5kIEhBUHJveHkgUFJPWFkgcHJvdG9jb2wgaGVhZGVyPyAqLwotICBDSU5JVChIQVBST1hZUFJPVE9DT0wsIExPTkcsIDI3NCksCisgIENVUkxPUFQoQ1VSTE9QVF9IQVBST1hZUFJPVE9DT0wsIENVUkxPUFRUWVBFX0xPTkcsIDI3NCksCiAKICAgLyogc2h1ZmZsZSBhZGRyZXNzZXMgYmVmb3JlIHVzZSB3aGVuIEROUyByZXR1cm5zIG11bHRpcGxlICovCi0gIENJTklUKEROU19TSFVGRkxFX0FERFJFU1NFUywgTE9ORywgMjc1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19TSFVGRkxFX0FERFJFU1NFUywgQ1VSTE9QVFRZUEVfTE9ORywgMjc1KSwKIAogICAvKiBTcGVjaWZ5IHdoaWNoIFRMUyAxLjMgY2lwaGVycyBzdWl0ZXMgdG8gdXNlICovCi0gIENJTklUKFRMUzEzX0NJUEhFUlMsIFNUUklOR1BPSU5ULCAyNzYpLAotICBDSU5JVChQUk9YWV9UTFMxM19DSVBIRVJTLCBTVFJJTkdQT0lOVCwgMjc3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RMUzEzX0NJUEhFUlMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNzYpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfVExTMTNfQ0lQSEVSUywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI3NyksCiAKICAgLyogRGlzYWxsb3cgc3BlY2lmeWluZyB1c2VybmFtZS9sb2dpbiBpbiBVUkwuICovCi0gIENJTklUKERJU0FMTE9XX1VTRVJOQU1FX0lOX1VSTCwgTE9ORywgMjc4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RJU0FMTE9XX1VTRVJOQU1FX0lOX1VSTCwgQ1VSTE9QVFRZUEVfTE9ORywgMjc4KSwKIAogICAvKiBETlMtb3Zlci1IVFRQUyBVUkwgKi8KLSAgQ0lOSVQoRE9IX1VSTCwgU1RSSU5HUE9JTlQsIDI3OSksCisgIENVUkxPUFQoQ1VSTE9QVF9ET0hfVVJMLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjc5KSwKIAogICAvKiBQcmVmZXJyZWQgYnVmZmVyIHNpemUgdG8gdXNlIGZvciB1cGxvYWRzICovCi0gIENJTklUKFVQTE9BRF9CVUZGRVJTSVpFLCBMT05HLCAyODApLAorICBDVVJMT1BUKENVUkxPUFRfVVBMT0FEX0JVRkZFUlNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDI4MCksCiAKICAgLyogVGltZSBpbiBtcyBiZXR3ZWVuIGNvbm5lY3Rpb24gdXBrZWVwIGNhbGxzIGZvciBsb25nLWxpdmVkIGNvbm5lY3Rpb25zLiAqLwotICBDSU5JVChVUEtFRVBfSU5URVJWQUxfTVMsIExPTkcsIDI4MSksCisgIENVUkxPUFQoQ1VSTE9QVF9VUEtFRVBfSU5URVJWQUxfTVMsIENVUkxPUFRUWVBFX0xPTkcsIDI4MSksCiAKICAgLyogU3BlY2lmeSBVUkwgdXNpbmcgQ1VSTCBVUkwgQVBJLiAqLwotICBDSU5JVChDVVJMVSwgT0JKRUNUUE9JTlQsIDI4MiksCisgIENVUkxPUFQoQ1VSTE9QVF9DVVJMVSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI4MiksCiAKICAgLyogYWRkIHRyYWlsaW5nIGRhdGEganVzdCBhZnRlciBubyBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlICovCi0gIENJTklUKFRSQUlMRVJGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjgzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RSQUlMRVJGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMjgzKSwKIAogICAvKiBwb2ludGVyIHRvIGJlIHBhc3NlZCB0byBIVFRQX1RSQUlMRVJfRlVOQ1RJT04gKi8KLSAgQ0lOSVQoVFJBSUxFUkRBVEEsIE9CSkVDVFBPSU5ULCAyODQpLAorICBDVVJMT1BUKENVUkxPUFRfVFJBSUxFUkRBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyODQpLAogCiAgIC8qIHNldCB0aGlzIHRvIDFMIHRvIGFsbG93IEhUVFAvMC45IHJlc3BvbnNlcyBvciAwTCB0byBkaXNhbGxvdyAqLwotICBDSU5JVChIVFRQMDlfQUxMT1dFRCwgTE9ORywgMjg1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFAwOV9BTExPV0VELCBDVVJMT1BUVFlQRV9MT05HLCAyODUpLAogCiAgIC8qIGFsdC1zdmMgY29udHJvbCBiaXRtYXNrICovCi0gIENJTklUKEFMVFNWQ19DVFJMLCBMT05HLCAyODYpLAorICBDVVJMT1BUKENVUkxPUFRfQUxUU1ZDX0NUUkwsIENVUkxPUFRUWVBFX0xPTkcsIDI4NiksCiAKICAgLyogYWx0LXN2YyBjYWNoZSBmaWxlIG5hbWUgdG8gcG9zc2libHkgcmVhZCBmcm9tL3dyaXRlIHRvICovCi0gIENJTklUKEFMVFNWQywgU1RSSU5HUE9JTlQsIDI4NyksCisgIENVUkxPUFQoQ1VSTE9QVF9BTFRTVkMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyODcpLAogCiAgIC8qIG1heGltdW0gYWdlIG9mIGEgY29ubmVjdGlvbiB0byBjb25zaWRlciBpdCBmb3IgcmV1c2UgKGluIHNlY29uZHMpICovCi0gIENJTklUKE1BWEFHRV9DT05OLCBMT05HLCAyODgpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYQUdFX0NPTk4sIENVUkxPUFRUWVBFX0xPTkcsIDI4OCksCisKKyAgLyogU0FTTCBhdXRob3Jpc2F0aW9uIGlkZW50aXR5ICovCisgIENVUkxPUFQoQ1VSTE9QVF9TQVNMX0FVVEhaSUQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyODkpLAorCisgIC8qIGFsbG93IFJDUFQgVE8gY29tbWFuZCB0byBmYWlsIGZvciBzb21lIHJlY2lwaWVudHMgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX01BSUxfUkNQVF9BTExMT1dGQUlMUywgQ1VSTE9QVFRZUEVfTE9ORywgMjkwKSwKKworICAvKiB0aGUgcHJpdmF0ZSBTU0wtY2VydGlmaWNhdGUgYXMgYSAiYmxvYiIgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1NTTENFUlRfQkxPQiwgQ1VSTE9QVFRZUEVfQkxPQiwgMjkxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTEtFWV9CTE9CLCBDVVJMT1BUVFlQRV9CTE9CLCAyOTIpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMQ0VSVF9CTE9CLCBDVVJMT1BUVFlQRV9CTE9CLCAyOTMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMS0VZX0JMT0IsIENVUkxPUFRUWVBFX0JMT0IsIDI5NCksCisgIENVUkxPUFQoQ1VSTE9QVF9JU1NVRVJDRVJUX0JMT0IsIENVUkxPUFRUWVBFX0JMT0IsIDI5NSksCisKKyAgLyogSXNzdWVyIGNlcnRpZmljYXRlIGZvciBwcm94eSAqLworICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfSVNTVUVSQ0VSVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI5NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9JU1NVRVJDRVJUX0JMT0IsIENVUkxPUFRUWVBFX0JMT0IsIDI5NyksCiAKICAgQ1VSTE9QVF9MQVNURU5UUlkgLyogdGhlIGxhc3QgdW51c2VkICovCiB9IENVUkxvcHRpb247CkBAIC0xOTc0LDcgKzIwMjQsOCBAQAogICBDVVJMX0hUVFBfVkVSU0lPTl8yVExTLCAvKiB1c2UgdmVyc2lvbiAyIGZvciBIVFRQUywgdmVyc2lvbiAxLjEgZm9yIEhUVFAgKi8KICAgQ1VSTF9IVFRQX1ZFUlNJT05fMl9QUklPUl9LTk9XTEVER0UsICAvKiBwbGVhc2UgdXNlIEhUVFAgMiB3aXRob3V0IEhUVFAvMS4xCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBncmFkZSAqLwotCisgIENVUkxfSFRUUF9WRVJTSU9OXzMgPSAzMCwgLyogTWFrZXMgdXNlIG9mIGV4cGxpY2l0IEhUVFAvMyB3aXRob3V0IGZhbGxiYWNrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBDVVJMT1BUX0FMVFNWQyB0byBlbmFibGUgSFRUUC8zIHVwZ3JhZGUgKi8KICAgQ1VSTF9IVFRQX1ZFUlNJT05fTEFTVCAvKiAqSUxMRUdBTCogaHR0cCB2ZXJzaW9uICovCiB9OwogCkBAIC0yMDY3LDcgKzIxMTgsNyBAQAogICBDVVJMX1RJTUVDT05EX0xBU1QKIH0gY3VybF9UaW1lQ29uZDsKIAotLyogU3BlY2lhbCBzaXplX3QgdmFsdWUgc2lnbmFsaW5nIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZy4gKi8KKy8qIFNwZWNpYWwgc2l6ZV90IHZhbHVlIHNpZ25hbGluZyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICovCiAjZGVmaW5lIENVUkxfWkVST19URVJNSU5BVEVEICgoc2l6ZV90KSAtMSkKIAogLyogY3VybF9zdHJlcXVhbCgpIGFuZCBjdXJsX3N0cm5lcXVhbCgpIGFyZSBzdWJqZWN0IGZvciByZW1vdmFsIGluIGEgZnV0dXJlCkBAIC0yMDc2LDggKzIxMjcsOCBAQAogQ1VSTF9FWFRFUk4gaW50IGN1cmxfc3RybmVxdWFsKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwogCiAvKiBNaW1lL2Zvcm0gaGFuZGxpbmcgc3VwcG9ydC4gKi8KLXR5cGVkZWYgc3RydWN0IGN1cmxfbWltZV9zICAgICAgY3VybF9taW1lOyAgICAgIC8qIE1pbWUgY29udGV4dC4gKi8KLXR5cGVkZWYgc3RydWN0IGN1cmxfbWltZXBhcnRfcyAgY3VybF9taW1lcGFydDsgIC8qIE1pbWUgcGFydCBjb250ZXh0LiAqLwordHlwZWRlZiBzdHJ1Y3QgY3VybF9taW1lICAgICAgY3VybF9taW1lOyAgICAgIC8qIE1pbWUgY29udGV4dC4gKi8KK3R5cGVkZWYgc3RydWN0IGN1cmxfbWltZXBhcnQgIGN1cmxfbWltZXBhcnQ7ICAvKiBNaW1lIHBhcnQgY29udGV4dC4gKi8KIAogLyoKICAqIE5BTUUgY3VybF9taW1lX2luaXQoKQpAQCAtMjIwMCw1MiArMjI1MSwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFrZV9vd25lcnNoaXApOwogCi0vKiBPbGQgZm9ybSBBUEkuICovCi0vKiBuYW1lIGlzIHVwcGVyY2FzZSBDVVJMRk9STV88bmFtZT4gKi8KLSNpZmRlZiBDRklOSVQKLSN1bmRlZiBDRklOSVQKLSNlbmRpZgotCi0jaWZkZWYgQ1VSTF9JU09DUFAKLSNkZWZpbmUgQ0ZJTklUKG5hbWUpIENVUkxGT1JNXyAjIyBuYW1lCi0jZWxzZQotLyogVGhlIG1hY3JvICIjIyIgaXMgSVNPIEMsIHdlIGFzc3VtZSBwcmUtSVNPIEMgZG9lc24ndCBzdXBwb3J0IGl0LiAqLwotI2RlZmluZSBDRklOSVQobmFtZSkgQ1VSTEZPUk1fLyoqL25hbWUKLSNlbmRpZgotCiB0eXBlZGVmIGVudW0gewotICBDRklOSVQoTk9USElORyksICAgICAgICAvKioqKioqKioqIHRoZSBmaXJzdCBvbmUgaXMgdW51c2VkICoqKioqKioqKioqKi8KKyAgQ1VSTEZPUk1fTk9USElORywgICAgICAgIC8qKioqKioqKiogdGhlIGZpcnN0IG9uZSBpcyB1bnVzZWQgKioqKioqKioqKioqLworICBDVVJMRk9STV9DT1BZTkFNRSwKKyAgQ1VSTEZPUk1fUFRSTkFNRSwKKyAgQ1VSTEZPUk1fTkFNRUxFTkdUSCwKKyAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLAorICBDVVJMRk9STV9QVFJDT05URU5UUywKKyAgQ1VSTEZPUk1fQ09OVEVOVFNMRU5HVEgsCisgIENVUkxGT1JNX0ZJTEVDT05URU5ULAorICBDVVJMRk9STV9BUlJBWSwKKyAgQ1VSTEZPUk1fT0JTT0xFVEUsCisgIENVUkxGT1JNX0ZJTEUsCiAKLSAgLyogICovCi0gIENGSU5JVChDT1BZTkFNRSksCi0gIENGSU5JVChQVFJOQU1FKSwKLSAgQ0ZJTklUKE5BTUVMRU5HVEgpLAotICBDRklOSVQoQ09QWUNPTlRFTlRTKSwKLSAgQ0ZJTklUKFBUUkNPTlRFTlRTKSwKLSAgQ0ZJTklUKENPTlRFTlRTTEVOR1RIKSwKLSAgQ0ZJTklUKEZJTEVDT05URU5UKSwKLSAgQ0ZJTklUKEFSUkFZKSwKLSAgQ0ZJTklUKE9CU09MRVRFKSwKLSAgQ0ZJTklUKEZJTEUpLAorICBDVVJMRk9STV9CVUZGRVIsCisgIENVUkxGT1JNX0JVRkZFUlBUUiwKKyAgQ1VSTEZPUk1fQlVGRkVSTEVOR1RILAogCi0gIENGSU5JVChCVUZGRVIpLAotICBDRklOSVQoQlVGRkVSUFRSKSwKLSAgQ0ZJTklUKEJVRkZFUkxFTkdUSCksCisgIENVUkxGT1JNX0NPTlRFTlRUWVBFLAorICBDVVJMRk9STV9DT05URU5USEVBREVSLAorICBDVVJMRk9STV9GSUxFTkFNRSwKKyAgQ1VSTEZPUk1fRU5ELAorICBDVVJMRk9STV9PQlNPTEVURTIsCiAKLSAgQ0ZJTklUKENPTlRFTlRUWVBFKSwKLSAgQ0ZJTklUKENPTlRFTlRIRUFERVIpLAotICBDRklOSVQoRklMRU5BTUUpLAotICBDRklOSVQoRU5EKSwKLSAgQ0ZJTklUKE9CU09MRVRFMiksCi0KLSAgQ0ZJTklUKFNUUkVBTSksCi0gIENGSU5JVChDT05URU5UTEVOKSwgLyogYWRkZWQgaW4gNy40Ni4wLCBwcm92aWRlIGEgY3VybF9vZmZfdCBsZW5ndGggKi8KKyAgQ1VSTEZPUk1fU1RSRUFNLAorICBDVVJMRk9STV9DT05URU5UTEVOLCAvKiBhZGRlZCBpbiA3LjQ2LjAsIHByb3ZpZGUgYSBjdXJsX29mZl90IGxlbmd0aCAqLwogCiAgIENVUkxGT1JNX0xBU1RFTlRSWSAvKiB0aGUgbGFzdCB1bnVzZWQgKi8KIH0gQ1VSTGZvcm1vcHRpb247CiAKLSN1bmRlZiBDRklOSVQgLyogZG9uZSAqLwotCiAvKiBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBhcyBwYXJhbWV0ZXIgZm9yIENVUkxGT1JNX0FSUkFZICovCiBzdHJ1Y3QgY3VybF9mb3JtcyB7CiAgIENVUkxmb3Jtb3B0aW9uIG9wdGlvbjsKQEAgLTI0MTYsNyArMjQ1MCw3IEBACiAgKiBpbml0aWFsaXplIGxpYmN1cmwgYW5kIHNldCB1c2VyIGRlZmluZWQgbWVtb3J5IG1hbmFnZW1lbnQgY2FsbGJhY2sKICAqIGZ1bmN0aW9ucy4gIFVzZXJzIGNhbiBpbXBsZW1lbnQgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgdG8gY2hlY2sgZm9yCiAgKiBtZW1vcnkgbGVha3MsIGNoZWNrIGZvciBtaXMtdXNlIG9mIHRoZSBjdXJsIGxpYnJhcnkgZXRjLiAgVXNlciByZWdpc3RlcmVkCi0gKiBjYWxsYmFjayByb3V0aW5lcyB3aXRoIGJlIGludm9rZWQgYnkgdGhpcyBsaWJyYXJ5IGluc3RlYWQgb2YgdGhlIHN5c3RlbQorICogY2FsbGJhY2sgcm91dGluZXMgd2lsbCBiZSBpbnZva2VkIGJ5IHRoaXMgbGlicmFyeSBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0KICAqIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIGxpa2UgbWFsbG9jLCBmcmVlIGV0Yy4KICAqLwogQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9nbG9iYWxfaW5pdF9tZW0obG9uZyBmbGFncywKQEAgLTI0NjgsMTAgKzI1MDIsMTEgQEAKICAqIHN1YnNlcXVlbnQgYXR0ZW1wdCB0byBjaGFuZ2UgaXQgd2lsbCByZXN1bHQgaW4gYSBDVVJMU1NMU0VUX1RPT19MQVRFLgogICovCiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBjdXJsX3NzbF9iYWNrZW5kIHsKICAgY3VybF9zc2xiYWNrZW5kIGlkOwogICBjb25zdCBjaGFyICpuYW1lOwotfSBjdXJsX3NzbF9iYWNrZW5kOworfTsKK3R5cGVkZWYgc3RydWN0IGN1cmxfc3NsX2JhY2tlbmQgY3VybF9zc2xfYmFja2VuZDsKIAogdHlwZWRlZiBlbnVtIHsKICAgQ1VSTFNTTFNFVF9PSyA9IDAsCkBAIC0yNTE0LDggKzI1NDksOCBAQAogICovCiBDVVJMX0VYVEVSTiB0aW1lX3QgY3VybF9nZXRkYXRlKGNvbnN0IGNoYXIgKnAsIGNvbnN0IHRpbWVfdCAqdW51c2VkKTsKIAotLyogaW5mbyBhYm91dCB0aGUgY2VydGlmaWNhdGUgY2hhaW4sIG9ubHkgZm9yIE9wZW5TU0wgYnVpbGRzLiBBc2tlZAotICAgZm9yIHdpdGggQ1VSTE9QVF9DRVJUSU5GTyAvIENVUkxJTkZPX0NFUlRJTkZPICovCisvKiBpbmZvIGFib3V0IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiwgb25seSBmb3IgT3BlblNTTCwgR251VExTLCBTY2hhbm5lbCwgTlNTCisgICBhbmQgR1NLaXQgYnVpbGRzLiBBc2tlZCBmb3Igd2l0aCBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KIHN0cnVjdCBjdXJsX2NlcnRpbmZvIHsKICAgaW50IG51bV9vZl9jZXJ0czsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNlcnRpZmljYXRlcyB3aXRoIGluZm9ybWF0aW9uICovCiAgIHN0cnVjdCBjdXJsX3NsaXN0ICoqY2VydGluZm87IC8qIGZvciBlYWNoIGluZGV4IGluIHRoaXMgYXJyYXksIHRoZXJlJ3MgYQpAQCAtMjYxMCw4ICsyNjQ1LDkgQEAKICAgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FX1QgPSBDVVJMSU5GT19PRkZfVCArIDU0LAogICBDVVJMSU5GT19SRURJUkVDVF9USU1FX1QgID0gQ1VSTElORk9fT0ZGX1QgKyA1NSwKICAgQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FX1QgPSBDVVJMSU5GT19PRkZfVCArIDU2LAorICBDVVJMSU5GT19SRVRSWV9BRlRFUiAgICAgID0gQ1VSTElORk9fT0ZGX1QgKyA1NywKIAotICBDVVJMSU5GT19MQVNUT05FICAgICAgICAgID0gNTYKKyAgQ1VSTElORk9fTEFTVE9ORSAgICAgICAgICA9IDU3CiB9IENVUkxJTkZPOwogCiAvKiBDVVJMSU5GT19SRVNQT05TRV9DT0RFIGlzIHRoZSBuZXcgbmFtZSBmb3IgdGhlIG9wdGlvbiBwcmV2aW91c2x5IGtub3duIGFzCkBAIC0yNzEwLDYgKzI3NDYsOCBAQAogICBDVVJMVkVSU0lPTl9USElSRCwKICAgQ1VSTFZFUlNJT05fRk9VUlRILAogICBDVVJMVkVSU0lPTl9GSUZUSCwKKyAgQ1VSTFZFUlNJT05fU0lYVEgsCisgIENVUkxWRVJTSU9OX1NFVkVOVEgsCiAgIENVUkxWRVJTSU9OX0xBU1QgLyogbmV2ZXIgYWN0dWFsbHkgdXNlIHRoaXMgKi8KIH0gQ1VSTHZlcnNpb247CiAKQEAgLTI3MTgsOSArMjc1Niw5IEBACiAgICBtZWFudCB0byBiZSBhIGJ1aWx0LWluIHZlcnNpb24gbnVtYmVyIGZvciB3aGF0IGtpbmQgb2Ygc3RydWN0IHRoZSBjYWxsZXIKICAgIGV4cGVjdHMuIElmIHRoZSBzdHJ1Y3QgZXZlciBjaGFuZ2VzLCB3ZSByZWRlZmluZSB0aGUgTk9XIHRvIGFub3RoZXIgZW51bQogICAgZnJvbSBhYm92ZS4gKi8KLSNkZWZpbmUgQ1VSTFZFUlNJT05fTk9XIENVUkxWRVJTSU9OX0ZJRlRICisjZGVmaW5lIENVUkxWRVJTSU9OX05PVyBDVVJMVkVSU0lPTl9TRVZFTlRICiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBjdXJsX3ZlcnNpb25faW5mb19kYXRhIHsKICAgQ1VSTHZlcnNpb24gYWdlOyAgICAgICAgICAvKiBhZ2Ugb2YgdGhlIHJldHVybmVkIHN0cnVjdCAqLwogICBjb25zdCBjaGFyICp2ZXJzaW9uOyAgICAgIC8qIExJQkNVUkxfVkVSU0lPTiAqLwogICB1bnNpZ25lZCBpbnQgdmVyc2lvbl9udW07IC8qIExJQkNVUkxfVkVSU0lPTl9OVU0gKi8KQEAgLTI3NDcsMTIgKzI3ODUsMjUgQEAKICAgY29uc3QgY2hhciAqbGlic3NoX3ZlcnNpb247IC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLwogCiAgIC8qIFRoZXNlIGZpZWxkcyB3ZXJlIGFkZGVkIGluIENVUkxWRVJTSU9OX0ZJRlRIICovCi0KICAgdW5zaWduZWQgaW50IGJyb3RsaV92ZXJfbnVtOyAvKiBOdW1lcmljIEJyb3RsaSB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BSk9SIDw8IDI0KSB8IChNSU5PUiA8PCAxMikgfCBQQVRDSCAqLwogICBjb25zdCBjaGFyICpicm90bGlfdmVyc2lvbjsgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nLiAqLwogCi19IGN1cmxfdmVyc2lvbl9pbmZvX2RhdGE7CisgIC8qIFRoZXNlIGZpZWxkcyB3ZXJlIGFkZGVkIGluIENVUkxWRVJTSU9OX1NJWFRIICovCisgIHVuc2lnbmVkIGludCBuZ2h0dHAyX3Zlcl9udW07IC8qIE51bWVyaWMgbmdodHRwMiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNQUpPUiA8PCAxNikgfCAoTUlOT1IgPDwgOCkgfCBQQVRDSCAqLworICBjb25zdCBjaGFyICpuZ2h0dHAyX3ZlcnNpb247IC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZy4gKi8KKyAgY29uc3QgY2hhciAqcXVpY192ZXJzaW9uOyAgICAvKiBodW1hbiByZWFkYWJsZSBxdWljICgrIEhUVFAvMykgbGlicmFyeSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvciBOVUxMICovCisKKyAgLyogVGhlc2UgZmllbGRzIHdlcmUgYWRkZWQgaW4gQ1VSTFZFUlNJT05fU0VWRU5USCAqLworICBjb25zdCBjaGFyICpjYWluZm87ICAgICAgICAgIC8qIHRoZSBidWlsdC1pbiBkZWZhdWx0IENVUkxPUFRfQ0FJTkZPLCBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIE5VTEwgKi8KKyAgY29uc3QgY2hhciAqY2FwYXRoOyAgICAgICAgICAvKiB0aGUgYnVpbHQtaW4gZGVmYXVsdCBDVVJMT1BUX0NBUEFUSCwgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBOVUxMICovCisKK307Cit0eXBlZGVmIHN0cnVjdCBjdXJsX3ZlcnNpb25faW5mb19kYXRhIGN1cmxfdmVyc2lvbl9pbmZvX2RhdGE7CiAKICNkZWZpbmUgQ1VSTF9WRVJTSU9OX0lQVjYgICAgICAgICAoMTw8MCkgIC8qIElQdjYtZW5hYmxlZCAqLwogI2RlZmluZSBDVVJMX1ZFUlNJT05fS0VSQkVST1M0ICAgICgxPDwxKSAgLyogS2VyYmVyb3MgVjQgYXV0aCBpcyBzdXBwb3J0ZWQKQEAgLTI3ODQsNiArMjgzNSw3IEBACiAjZGVmaW5lIENVUkxfVkVSU0lPTl9NVUxUSV9TU0wgICAgKDE8PDIyKSAvKiBNdWx0aXBsZSBTU0wgYmFja2VuZHMgYXZhaWxhYmxlICovCiAjZGVmaW5lIENVUkxfVkVSU0lPTl9CUk9UTEkgICAgICAgKDE8PDIzKSAvKiBCcm90bGkgZmVhdHVyZXMgYXJlIHByZXNlbnQuICovCiAjZGVmaW5lIENVUkxfVkVSU0lPTl9BTFRTVkMgICAgICAgKDE8PDI0KSAvKiBBbHQtU3ZjIGhhbmRsaW5nIGJ1aWx0LWluICovCisjZGVmaW5lIENVUkxfVkVSU0lPTl9IVFRQMyAgICAgICAgKDE8PDI1KSAvKiBIVFRQMyBzdXBwb3J0IGJ1aWx0LWluICovCiAKICAvKgogICogTkFNRSBjdXJsX3ZlcnNpb25faW5mbygpCkBAIC0yODY2LDQgKzI5MTgsNCBAQAogI2VuZGlmIC8qIF9fU1REQ19fID49IDEgKi8KICNlbmRpZiAvKiBnY2MgPj0gNC4zICYmICFfX2NwbHVzcGx1cyAqLwogCi0jZW5kaWYgLyogX19DVVJMX0NVUkxfSCAqLworI2VuZGlmIC8qIENVUkxJTkNfQ1VSTF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsdmVyLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsdmVyLmgKaW5kZXggMDRlZmI5My4uOTdhOGJkOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybHZlci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX0NVUkxWRVJfSAotI2RlZmluZSBfX0NVUkxfQ1VSTFZFUl9ICisjaWZuZGVmIENVUkxJTkNfQ1VSTFZFUl9ICisjZGVmaW5lIENVUkxJTkNfQ1VSTFZFUl9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsMjAgKzI2LDIwIEBACiAgICBhIHNjcmlwdCBhdCByZWxlYXNlLXRpbWUuIFRoaXMgd2FzIG1hZGUgaXRzIG93biBoZWFkZXIgZmlsZSBpbiA3LjExLjIgKi8KIAogLyogVGhpcyBpcyB0aGUgZ2xvYmFsIHBhY2thZ2UgY29weXJpZ2h0ICovCi0jZGVmaW5lIExJQkNVUkxfQ09QWVJJR0hUICIxOTk2IC0gMjAxOSBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4uIgorI2RlZmluZSBMSUJDVVJMX0NPUFlSSUdIVCAiMTk5NiAtIDIwMjAgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LiIKIAogLyogVGhpcyBpcyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYmN1cmwgcGFja2FnZSBmcm9tIHdoaWNoIHRoaXMgaGVhZGVyCiAgICBmaWxlIG9yaWdpbnM6ICovCi0jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiNy42NS4wIgorI2RlZmluZSBMSUJDVVJMX1ZFUlNJT04gIjcuNzEuMSIKIAogLyogVGhlIG51bWVyaWMgdmVyc2lvbiBudW1iZXIgaXMgYWxzbyBhdmFpbGFibGUgImluIHBhcnRzIiBieSB1c2luZyB0aGVzZQogICAgZGVmaW5lczogKi8KICNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01BSk9SIDcKLSNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01JTk9SIDY1Ci0jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9QQVRDSCAwCisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9NSU5PUiA3MQorI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggMQogCiAvKiBUaGlzIGlzIHRoZSBudW1lcmljIHZlcnNpb24gb2YgdGhlIGxpYmN1cmwgdmVyc2lvbiBudW1iZXIsIG1lYW50IGZvciBlYXNpZXIKLSAgIHBhcnNpbmcgYW5kIGNvbXBhcmlvbnMgYnkgcHJvZ3JhbXMuIFRoZSBMSUJDVVJMX1ZFUlNJT05fTlVNIGRlZmluZSB3aWxsCisgICBwYXJzaW5nIGFuZCBjb21wYXJpc29ucyBieSBwcm9ncmFtcy4gVGhlIExJQkNVUkxfVkVSU0lPTl9OVU0gZGVmaW5lIHdpbGwKICAgIGFsd2F5cyBmb2xsb3cgdGhpcyBzeW50YXg6CiAKICAgICAgICAgIDB4WFhZWVpaCkBAIC01Nyw3ICs1Nyw3IEBACiAgICBDVVJMX1ZFUlNJT05fQklUUygpIG1hY3JvIHNpbmNlIGN1cmwncyBvd24gY29uZmlndXJlIHNjcmlwdCBncmVwcyBmb3IgaXQKICAgIGFuZCBuZWVkcyBpdCB0byBjb250YWluIHRoZSBmdWxsIG51bWJlci4KICovCi0jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9OVU0gMHgwNzQxMDAKKyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX05VTSAweDA3NDcwMQogCiAvKgogICogVGhpcyBpcyB0aGUgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBmdWxsIHNvdXJjZSBwYWNrYWdlIHdhcyBjcmVhdGVkLiBUaGUKQEAgLTc0LDQgKzc0LDQgQEAKICNkZWZpbmUgQ1VSTF9BVF9MRUFTVF9WRVJTSU9OKHgseSx6KSBcCiAgIChMSUJDVVJMX1ZFUlNJT05fTlVNID49IENVUkxfVkVSU0lPTl9CSVRTKHgsIHksIHopKQogCi0jZW5kaWYgLyogX19DVVJMX0NVUkxWRVJfSCAqLworI2VuZGlmIC8qIENVUkxJTkNfQ1VSTFZFUl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9lYXN5LmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9lYXN5LmgKaW5kZXggZjQyYThhOS4uOWFlZjEzMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvZWFzeS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2Vhc3kuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX0VBU1lfSAotI2RlZmluZSBfX0NVUkxfRUFTWV9ICisjaWZuZGVmIENVUkxJTkNfRUFTWV9ICisjZGVmaW5lIENVUkxJTkNfRUFTWV9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsNiArMjUsMTcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKy8qIEZsYWcgYml0cyBpbiB0aGUgY3VybF9ibG9iIHN0cnVjdDogKi8KKyNkZWZpbmUgQ1VSTF9CTE9CX0NPUFkgICAxIC8qIHRlbGwgbGliY3VybCB0byBjb3B5IHRoZSBkYXRhICovCisjZGVmaW5lIENVUkxfQkxPQl9OT0NPUFkgMCAvKiB0ZWxsIGxpYmN1cmwgdG8gTk9UIGNvcHkgdGhlIGRhdGEgKi8KKworc3RydWN0IGN1cmxfYmxvYiB7CisgIHZvaWQgKmRhdGE7CisgIHNpemVfdCBsZW47CisgIHVuc2lnbmVkIGludCBmbGFnczsgLyogYml0IDAgaXMgZGVmaW5lZCwgdGhlIHJlc3QgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IHplcm9lcyAqLworfTsKKwogQ1VSTF9FWFRFUk4gQ1VSTCAqY3VybF9lYXN5X2luaXQodm9pZCk7CiBDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmN1cmwsIENVUkxvcHRpb24gb3B0aW9uLCAuLi4pOwogQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X3BlcmZvcm0oQ1VSTCAqY3VybCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tcHJpbnRmLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tcHJpbnRmLmgKaW5kZXggZTIwZjU0Ni4uZjYxNWVkNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvbXByaW50Zi5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL21wcmludGYuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX01QUklOVEZfSAotI2RlZmluZSBfX0NVUkxfTVBSSU5URl9ICisjaWZuZGVmIENVUkxJTkNfTVBSSU5URl9ICisjZGVmaW5lIENVUkxJTkNfTVBSSU5URl9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDcsNCArNDcsNCBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0NVUkxfTVBSSU5URl9IICovCisjZW5kaWYgLyogQ1VSTElOQ19NUFJJTlRGX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL211bHRpLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tdWx0aS5oCmluZGV4IGIxOWRiYWYuLjJlNmJiNzIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL211bHRpLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvbXVsdGkuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX01VTFRJX0gKLSNkZWZpbmUgX19DVVJMX01VTFRJX0gKKyNpZm5kZWYgQ1VSTElOQ19NVUxUSV9ICisjZGVmaW5lIENVUkxJTkNfTVVMVElfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDYgKzcyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQgdG8gZ2V0IGFkZGVkIC0gYWdhaW4gKi8KICAgQ1VSTE1fUkVDVVJTSVZFX0FQSV9DQUxMLCAvKiBhbiBhcGkgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgKi8KKyAgQ1VSTE1fV0FLRVVQX0ZBSUxVUkUsICAvKiB3YWtldXAgaXMgdW5hdmFpbGFibGUgb3IgZmFpbGVkICovCisgIENVUkxNX0JBRF9GVU5DVElPTl9BUkdVTUVOVCwgIC8qIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIGEgYmFkIHBhcmFtZXRlciAqLwogICBDVVJMTV9MQVNUCiB9IENVUkxNY29kZTsKIApAQCAtMTczLDYgKzE3NSwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dF9tcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXQpOwogCisvKgorICogTmFtZTogICAgIGN1cmxfbXVsdGlfcG9sbCgpCisgKgorICogRGVzYzogICAgIFBvbGwgb24gYWxsIGZkcyB3aXRoaW4gYSBDVVJMTSBzZXQgYXMgd2VsbCBhcyBhbnkKKyAqICAgICAgICAgICBhZGRpdGlvbmFsIGZkcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICBDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBtdWx0aSBlcnJvciBjb2RlLgorICovCitDVVJMX0VYVEVSTiBDVVJMTWNvZGUgY3VybF9tdWx0aV9wb2xsKENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCk7CisKKy8qCisgKiBOYW1lOiAgICAgY3VybF9tdWx0aV93YWtldXAoKQorICoKKyAqIERlc2M6ICAgICB3YWtlcyB1cCBhIHNsZWVwaW5nIGN1cmxfbXVsdGlfcG9sbCBjYWxsLgorICoKKyAqIFJldHVybnM6ICBDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBtdWx0aSBlcnJvciBjb2RlLgorICovCitDVVJMX0VYVEVSTiBDVVJMTWNvZGUgY3VybF9tdWx0aV93YWtldXAoQ1VSTE0gKm11bHRpX2hhbmRsZSk7CisKICAvKgogICAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfcGVyZm9ybSgpCiAgICoKQEAgLTI0Miw3ICsyNjcsNyBAQAogICogICAgICAgICAgdmFsdWUgaW50byB0aGUgZXF1aXZhbGVudCBodW1hbiByZWFkYWJsZSBlcnJvciBzdHJpbmcuICBUaGlzIGlzCiAgKiAgICAgICAgICB1c2VmdWwgZm9yIHByaW50aW5nIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZXMuCiAgKgotICogUmV0dXJuczogQSBwb2ludGVyIHRvIGEgemVyby10ZXJtaW5hdGVkIGVycm9yIG1lc3NhZ2UuCisgKiBSZXR1cm5zOiBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQgZXJyb3IgbWVzc2FnZS4KICAqLwogQ1VSTF9FWFRFUk4gY29uc3QgY2hhciAqY3VybF9tdWx0aV9zdHJlcnJvcihDVVJMTWNvZGUpOwogCkBAIC0zMTksNjggKzM0NCw1NiBAQAogQ1VSTF9FWFRFUk4gQ1VSTE1jb2RlIGN1cmxfbXVsdGlfdGltZW91dChDVVJMTSAqbXVsdGlfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICptaWxsaXNlY29uZHMpOwogCi0jdW5kZWYgQ0lOSVQgLyogcmUtdXNpbmcgdGhlIHNhbWUgbmFtZSBhcyBpbiBjdXJsLmggKi8KLQotI2lmZGVmIENVUkxfSVNPQ1BQCi0jZGVmaW5lIENJTklUKG5hbWUsdHlwZSxudW0pIENVUkxNT1BUXyAjIyBuYW1lID0gQ1VSTE9QVFRZUEVfICMjIHR5cGUgKyBudW0KLSNlbHNlCi0vKiBUaGUgbWFjcm8gIiMjIiBpcyBJU08gQywgd2UgYXNzdW1lIHByZS1JU08gQyBkb2Vzbid0IHN1cHBvcnQgaXQuICovCi0jZGVmaW5lIExPTkcgICAgICAgICAgQ1VSTE9QVFRZUEVfTE9ORwotI2RlZmluZSBPQkpFQ1RQT0lOVCAgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCi0jZGVmaW5lIEZVTkNUSU9OUE9JTlQgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVAotI2RlZmluZSBPRkZfVCAgICAgICAgIENVUkxPUFRUWVBFX09GRl9UCi0jZGVmaW5lIENJTklUKG5hbWUsdHlwZSxudW1iZXIpIENVUkxNT1BUXy8qKi9uYW1lID0gdHlwZSArIG51bWJlcgotI2VuZGlmCi0KIHR5cGVkZWYgZW51bSB7CiAgIC8qIFRoaXMgaXMgdGhlIHNvY2tldCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyICovCi0gIENJTklUKFNPQ0tFVEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxKSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMSksCiAKICAgLyogVGhpcyBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBzb2NrZXQgY2FsbGJhY2sgKi8KLSAgQ0lOSVQoU09DS0VUREFUQSwgT0JKRUNUUE9JTlQsIDIpLAorICBDVVJMT1BUKENVUkxNT1BUX1NPQ0tFVERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyKSwKIAogICAgIC8qIHNldCB0byAxIHRvIGVuYWJsZSBwaXBlbGluaW5nIGZvciB0aGlzIG11bHRpIGhhbmRsZSAqLwotICBDSU5JVChQSVBFTElOSU5HLCBMT05HLCAzKSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9QSVBFTElOSU5HLCBDVVJMT1BUVFlQRV9MT05HLCAzKSwKIAogICAgLyogVGhpcyBpcyB0aGUgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciAqLwotICBDSU5JVChUSU1FUkZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCA0KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9USU1FUkZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCA0KSwKIAogICAvKiBUaGlzIGlzIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIHRpbWVyIGNhbGxiYWNrICovCi0gIENJTklUKFRJTUVSREFUQSwgT0JKRUNUUE9JTlQsIDUpLAorICBDVVJMT1BUKENVUkxNT1BUX1RJTUVSREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDUpLAogCiAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KLSAgQ0lOSVQoTUFYQ09OTkVDVFMsIExPTkcsIDYpLAorICBDVVJMT1BUKENVUkxNT1BUX01BWENPTk5FQ1RTLCBDVVJMT1BUVFlQRV9MT05HLCA2KSwKIAogICAvKiBtYXhpbXVtIG51bWJlciBvZiAocGlwZWxpbmluZykgY29ubmVjdGlvbnMgdG8gb25lIGhvc3QgKi8KLSAgQ0lOSVQoTUFYX0hPU1RfQ09OTkVDVElPTlMsIExPTkcsIDcpLAorICBDVVJMT1BUKENVUkxNT1BUX01BWF9IT1NUX0NPTk5FQ1RJT05TLCBDVVJMT1BUVFlQRV9MT05HLCA3KSwKIAogICAvKiBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyBpbiBhIHBpcGVsaW5lICovCi0gIENJTklUKE1BWF9QSVBFTElORV9MRU5HVEgsIExPTkcsIDgpLAorICBDVVJMT1BUKENVUkxNT1BUX01BWF9QSVBFTElORV9MRU5HVEgsIENVUkxPUFRUWVBFX0xPTkcsIDgpLAogCiAgIC8qIGEgY29ubmVjdGlvbiB3aXRoIGEgY29udGVudC1sZW5ndGggbG9uZ2VyIHRoYW4gdGhpcwogICAgICB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGZvciBwaXBlbGluaW5nICovCi0gIENJTklUKENPTlRFTlRfTEVOR1RIX1BFTkFMVFlfU0laRSwgT0ZGX1QsIDkpLAorICBDVVJMT1BUKENVUkxNT1BUX0NPTlRFTlRfTEVOR1RIX1BFTkFMVFlfU0laRSwgQ1VSTE9QVFRZUEVfT0ZGX1QsIDkpLAogCiAgIC8qIGEgY29ubmVjdGlvbiB3aXRoIGEgY2h1bmsgbGVuZ3RoIGxvbmdlciB0aGFuIHRoaXMKICAgICAgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBmb3IgcGlwZWxpbmluZyAqLwotICBDSU5JVChDSFVOS19MRU5HVEhfUEVOQUxUWV9TSVpFLCBPRkZfVCwgMTApLAorICBDVVJMT1BUKENVUkxNT1BUX0NIVU5LX0xFTkdUSF9QRU5BTFRZX1NJWkUsIENVUkxPUFRUWVBFX09GRl9ULCAxMCksCiAKLSAgLyogYSBsaXN0IG9mIHNpdGUgbmFtZXMoK3BvcnQpIHRoYXQgYXJlIGJsYWNrbGlzdGVkIGZyb20KLSAgICAgcGlwZWxpbmluZyAqLwotICBDSU5JVChQSVBFTElOSU5HX1NJVEVfQkwsIE9CSkVDVFBPSU5ULCAxMSksCisgIC8qIGEgbGlzdCBvZiBzaXRlIG5hbWVzKCtwb3J0KSB0aGF0IGFyZSBibG9ja2VkIGZyb20gcGlwZWxpbmluZyAqLworICBDVVJMT1BUKENVUkxNT1BUX1BJUEVMSU5JTkdfU0lURV9CTCwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDExKSwKIAotICAvKiBhIGxpc3Qgb2Ygc2VydmVyIHR5cGVzIHRoYXQgYXJlIGJsYWNrbGlzdGVkIGZyb20KLSAgICAgcGlwZWxpbmluZyAqLwotICBDSU5JVChQSVBFTElOSU5HX1NFUlZFUl9CTCwgT0JKRUNUUE9JTlQsIDEyKSwKKyAgLyogYSBsaXN0IG9mIHNlcnZlciB0eXBlcyB0aGF0IGFyZSBibG9ja2VkIGZyb20gcGlwZWxpbmluZyAqLworICBDVVJMT1BUKENVUkxNT1BUX1BJUEVMSU5JTkdfU0VSVkVSX0JMLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTIpLAogCiAgIC8qIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gY29ubmVjdGlvbnMgaW4gdG90YWwgKi8KLSAgQ0lOSVQoTUFYX1RPVEFMX0NPTk5FQ1RJT05TLCBMT05HLCAxMyksCisgIENVUkxPUFQoQ1VSTE1PUFRfTUFYX1RPVEFMX0NPTk5FQ1RJT05TLCBDVVJMT1BUVFlQRV9MT05HLCAxMyksCiAKICAgIC8qIFRoaXMgaXMgdGhlIHNlcnZlciBwdXNoIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgKi8KLSAgQ0lOSVQoUFVTSEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxNCksCisgIENVUkxPUFQoQ1VSTE1PUFRfUFVTSEZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNCksCiAKICAgLyogVGhpcyBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgcHVzaCBjYWxsYmFjayAqLwotICBDSU5JVChQVVNIREFUQSwgT0JKRUNUUE9JTlQsIDE1KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9QVVNIREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDE1KSwKKworICAvKiBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHN0cmVhbXMgdG8gc3VwcG9ydCBvbiBhIGNvbm5lY3Rpb24gKi8KKyAgQ1VSTE9QVChDVVJMTU9QVF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TLCBDVVJMT1BUVFlQRV9MT05HLCAxNiksCiAKICAgQ1VSTE1PUFRfTEFTVEVOVFJZIC8qIHRoZSBsYXN0IHVudXNlZCAqLwogfSBDVVJMTW9wdGlvbjsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zdGRjaGVhZGVycy5oCmluZGV4IDAyN2I2ZjQuLmE2YmRjMWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvc3RkY2hlYWRlcnMuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19TVERDX0hFQURFUlNfSAotI2RlZmluZSBfX1NURENfSEVBREVSU19ICisjaWZuZGVmIENVUkxJTkNfU1REQ0hFQURFUlNfSAorI2RlZmluZSBDVVJMSU5DX1NURENIRUFERVJTX0gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMCw0ICszMCw0IEBACiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAKLSNlbmRpZiAvKiBfX1NURENfSEVBREVSU19IICovCisjZW5kaWYgLyogQ1VSTElOQ19TVERDSEVBREVSU19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zeXN0ZW0uaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N5c3RlbS5oCmluZGV4IDFlNTU1ZWMuLjg2N2FmNjEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N5c3RlbS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N5c3RlbS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfU1lTVEVNX0gKLSNkZWZpbmUgX19DVVJMX1NZU1RFTV9ICisjaWZuZGVmIENVUkxJTkNfU1lTVEVNX0gKKyNkZWZpbmUgQ1VSTElOQ19TWVNURU1fSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEzNywxNSArMTM3LDI2IEBACiAjICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1QgaW50CiAKICNlbGlmIGRlZmluZWQoX19MQ0NfXykKLSMgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICAgICBsb25nCi0jICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAgICAgImxkIgotIyAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICAgICJsdSIKLSMgIGRlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UICAgICBMCi0jICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgICAgVUwKLSMgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCBpbnQKKyMgIGlmIGRlZmluZWQoX19lMmtfXykgLyogTUNTVCBlTGJydXMgQyBDb21waWxlciAqLworIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAgICAgbG9uZworIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAgICAgImxkIgorIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgICAgImx1IgorIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAgICAgTAorIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgICAgVUwKKyMgICAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIHNvY2tsZW5fdAorIyAgICBkZWZpbmUgQ1VSTF9QVUxMX1NZU19UWVBFU19IICAgICAgMQorIyAgICBkZWZpbmUgQ1VSTF9QVUxMX1NZU19TT0NLRVRfSCAgICAgMQorIyAgZWxzZSAgICAgICAgICAgICAgICAvKiBMb2NhbCAob3IgTGl0dGxlKSBDIENvbXBpbGVyICovCisjICAgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICAgICBsb25nCisjICAgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICAgICAibGQiCisjICAgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVSAgICAibHUiCisjICAgIGRlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UICAgICBMCisjICAgIGRlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSAgICBVTAorIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1QgaW50CisjICBlbmRpZgogCiAjZWxpZiBkZWZpbmVkKF9fU1lNQklBTjMyX18pCi0jICBpZiBkZWZpbmVkKF9fRUFCSV9fKSAgLyogVHJlYXQgYWxsIEFSTSBjb21waWxlcnMgZXF1YWxseSAqLworIyAgaWYgZGVmaW5lZChfX0VBQklfXykgLyogVHJlYXQgYWxsIEFSTSBjb21waWxlcnMgZXF1YWxseSAqLwogIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAgICAgbG9uZyBsb25nCiAjICAgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICAgICAibGxkIgogIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgICAgImxsdSIKQEAgLTI4OCw3ICsyOTksNiBAQAogIyAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGludAogCiAjZWxpZiBkZWZpbmVkKF9fVElOWUNfXykgLyogYWxzbyBrbm93biBhcyB0Y2MgKi8KLQogIyAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgICAgIGxvbmcgbG9uZwogIyAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgICAgICJsbGQiCiAjICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgICAgImxsdSIKQEAgLTM3Nyw2ICszODcsNyBAQAogIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgICAgVUxMCiAjICBlbGlmIGRlZmluZWQoX19MUDY0X18pIHx8IFwKICAgICAgICAgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgXAorICAgICAgICBkZWZpbmVkKF9fZTJrX18pIHx8IFwKICAgICAgICAgKGRlZmluZWQoX19TSVpFT0ZfTE9OR19fKSAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkgfHwgXAogICAgICAgICAoZGVmaW5lZChfX0xPTkdfTUFYX18pICYmIF9fTE9OR19NQVhfXyA9PSA5MjIzMzcyMDM2ODU0Nzc1ODA3TCkKICMgICAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgICAgIGxvbmcKQEAgLTQ3MywyMSArNDg0LDIxIEBACiAgKi8KIAogI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoX19CT1JMQU5EQ19fID09IDB4MDU1MSkKLSMgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMih4KSB4Ci0jICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjEoeCkgX19DVVJMX09GRl9UX0NfSExQUjIoeCkKLSMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsKSAjIyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKENVUkxfU1VGRklYX0NVUkxfT0ZGX1QpCi0jICBkZWZpbmUgQ1VSTF9PRkZfVFVfQyhWYWwpIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0NVUkxfT0ZGX1RfQ19ITFBSMShDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSkKKyMgIGRlZmluZSBDVVJMSU5DX09GRl9UX0NfSExQUjIoeCkgeAorIyAgZGVmaW5lIENVUkxJTkNfT0ZGX1RfQ19ITFBSMSh4KSBDVVJMSU5DX09GRl9UX0NfSExQUjIoeCkKKyMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5DX09GRl9UX0NfSExQUjEoQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCkKKyMgIGRlZmluZSBDVVJMX09GRl9UVV9DKFZhbCkgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5DX09GRl9UX0NfSExQUjEoQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUpCiAjZWxzZQogIyAgaWZkZWYgQ1VSTF9JU09DUFAKLSMgICAgZGVmaW5lIF9fQ1VSTF9PRkZfVF9DX0hMUFIyKFZhbCxTdWZmaXgpIFZhbCAjIyBTdWZmaXgKKyMgICAgZGVmaW5lIENVUkxJTkNfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KSBWYWwgIyMgU3VmZml4CiAjICBlbHNlCi0jICAgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KSBWYWwvKiovU3VmZml4CisjICAgIGRlZmluZSBDVVJMSU5DX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkgVmFsLyoqL1N1ZmZpeAogIyAgZW5kaWYKLSMgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMShWYWwsU3VmZml4KSBfX0NVUkxfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KQotIyAgZGVmaW5lIENVUkxfT0ZGX1RfQyhWYWwpICBfX0NVUkxfT0ZGX1RfQ19ITFBSMShWYWwsQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCkKLSMgIGRlZmluZSBDVVJMX09GRl9UVV9DKFZhbCkgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsLENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVKQorIyAgZGVmaW5lIENVUkxJTkNfT0ZGX1RfQ19ITFBSMShWYWwsU3VmZml4KSBDVVJMSU5DX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkKKyMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKFZhbCxDVVJMX1NVRkZJWF9DVVJMX09GRl9UKQorIyAgZGVmaW5lIENVUkxfT0ZGX1RVX0MoVmFsKSBDVVJMSU5DX09GRl9UX0NfSExQUjEoVmFsLENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVKQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0NVUkxfU1lTVEVNX0ggKi8KKyNlbmRpZiAvKiBDVVJMSU5DX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC90eXBlY2hlY2stZ2NjLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC90eXBlY2hlY2stZ2NjLmgKaW5kZXggMmQxZGU0ZC4uZjhjYjkyMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3R5cGVjaGVjay1nY2MuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX1RZUEVDSEVDS19HQ0NfSAotI2RlZmluZSBfX0NVUkxfVFlQRUNIRUNLX0dDQ19ICisjaWZuZGVmIENVUkxJTkNfVFlQRUNIRUNLX0dDQ19ICisjZGVmaW5lIENVUkxJTkNfVFlQRUNIRUNLX0dDQ19ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsMTAgKzI1LDEwIEBACiAvKiB3cmFwcyBjdXJsX2Vhc3lfc2V0b3B0KCkgd2l0aCB0eXBlY2hlY2tpbmcgKi8KIAogLyogVG8gYWRkIGEgbmV3IGtpbmQgb2Ygd2FybmluZywgYWRkIGFuCi0gKiAgIGlmKF9jdXJsX2lzX3NvbWV0eXBlX29wdGlvbihfY3VybF9vcHQpKQotICogICAgIGlmKCFfY3VybF9pc19zb21ldHlwZSh2YWx1ZSkpCisgKiAgIGlmKGN1cmxjaGVja19zb21ldHlwZV9vcHRpb24oX2N1cmxfb3B0KSkKKyAqICAgICBpZighY3VybGNoZWNrX3NvbWV0eXBlKHZhbHVlKSkKICAqICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb21ldHlwZSgpOwotICogYmxvY2sgYW5kIGRlZmluZSBfY3VybF9pc19zb21ldHlwZV9vcHRpb24sIF9jdXJsX2lzX3NvbWV0eXBlIGFuZAorICogYmxvY2sgYW5kIGRlZmluZSBjdXJsY2hlY2tfc29tZXR5cGVfb3B0aW9uLCBjdXJsY2hlY2tfc29tZXR5cGUgYW5kCiAgKiBfY3VybF9lYXN5X3NldG9wdF9lcnJfc29tZXR5cGUgYmVsb3cKICAqCiAgKiBOT1RFOiBXZSB1c2UgdHdvIG5lc3RlZCAnaWYnIHN0YXRlbWVudHMgaGVyZSBpbnN0ZWFkIG9mIHRoZSAmJiBvcGVyYXRvciwgaW4KQEAgLTM4LDExMiArMzgsMTEyIEBACiAgKiBUbyBhZGQgYW4gb3B0aW9uIHRoYXQgdXNlcyB0aGUgc2FtZSB0eXBlIGFzIGFuIGV4aXN0aW5nIG9wdGlvbiwgeW91J2xsIGp1c3QKICAqIG5lZWQgdG8gZXh0ZW5kIHRoZSBhcHByb3ByaWF0ZSBfY3VybF8qX29wdGlvbiBtYWNybwogICovCi0jZGVmaW5lIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBvcHRpb24sIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1fX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fdHlwZW9mX18ob3B0aW9uKSBfY3VybF9vcHQgPSBvcHRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYoX19idWlsdGluX2NvbnN0YW50X3AoX2N1cmxfb3B0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19sb25nX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19sb25nKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2xvbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19vZmZfdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19vZmZfdCh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfb2ZmX3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19zdHJpbmdfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zdHJpbmcodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc193cml0ZV9jYl9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc193cml0ZV9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3dyaXRlX2NhbGxiYWNrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1JFU09MVkVSX1NUQVJUX0ZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19yZXNvbHZlcl9zdGFydF9jYWxsYmFjayh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrKCk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1JFQURGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19yZWFkX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3JlYWRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19pb2N0bF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2lvY3RsX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zb2Nrb3B0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvY2tvcHRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19vcGVuc29ja2V0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX29wZW5zb2NrZXRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wcm9ncmVzc19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0RFQlVHRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19kZWJ1Z19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2RlYnVnX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zc2xfY3R4X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NzbF9jdHhfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19jb252X2NiX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19jb252X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NFRUtGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zZWVrX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NlZWtfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19jYl9kYXRhX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19jYl9kYXRhKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NiX2RhdGEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0VSUk9SQlVGRkVSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19lcnJvcl9idWZmZXIodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2Vycm9yX2J1ZmZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NUREVSUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19GSUxFKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0ZJTEUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19wb3N0ZmllbGRzX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wb3N0ZmllbGRzKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0hUVFBQT1NUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfaHR0cHBvc3QpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfaHR0cG9zdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX01JTUVQT1NUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wdHIoKHZhbHVlKSwgY3VybF9taW1lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfbWltZXBvc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19zbGlzdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfc2xpc3QpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfc2xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NIQVJFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wdHIoKHZhbHVlKSwgQ1VSTFNIKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0NVUkxTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIF9jdXJsX29wdCwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCisjZGVmaW5lIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBvcHRpb24sIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX3R5cGVvZl9fKG9wdGlvbikgX2N1cmxfb3B0ID0gb3B0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZihfX2J1aWx0aW5fY29uc3RhbnRfcChfY3VybF9vcHQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19sb25nX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19sb25nKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfbG9uZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19vZmZfdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19vZmZfdCh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9vZmZfdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19zdHJpbmdfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zdHJpbmcodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc3RyaW5nKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja193cml0ZV9jYl9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja193cml0ZV9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfd3JpdGVfY2FsbGJhY2soKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfUkVTT0xWRVJfU1RBUlRfRlVOQ1RJT04pICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19yZXNvbHZlcl9zdGFydF9jYWxsYmFjayh2YWx1ZSkpICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2soKTsgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfUkVBREZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19yZWFkX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcmVhZF9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfSU9DVExGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19pb2N0bF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfaW9jdGxfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU09DS09QVEZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zb2Nrb3B0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc29ja29wdF9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19vcGVuc29ja2V0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfb3BlbnNvY2tldF9jYigpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wcm9ncmVzc19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcHJvZ3Jlc3NfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfREVCVUdGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19kZWJ1Z19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfZGVidWdfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zc2xfY3R4X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc3NsX2N0eF9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19jb252X2NiX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19jb252X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY29udl9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU0VFS0ZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zZWVrX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc2Vla19jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19jYl9kYXRhX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19jYl9kYXRhKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY2JfZGF0YSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfRVJST1JCVUZGRVIpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19lcnJvcl9idWZmZXIodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfZXJyb3JfYnVmZmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU1RERVJSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19GSUxFKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfRklMRSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19wb3N0ZmllbGRzX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wb3N0ZmllbGRzKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcG9zdGZpZWxkcygpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfSFRUUFBPU1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfaHR0cHBvc3QpKSAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9odHRwb3N0KCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfTUlNRVBPU1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wdHIoKHZhbHVlKSwgY3VybF9taW1lKSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9taW1lcG9zdCgpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19zbGlzdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfc2xpc3QpKSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9zbGlzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU0hBUkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wdHIoKHZhbHVlKSwgQ1VSTFNIKSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfQ1VSTFNIKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgX2N1cmxfb3B0LCB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKIAogLyogd3JhcHMgY3VybF9lYXN5X2dldGluZm8oKSB3aXRoIHR5cGVjaGVja2luZyAqLwotI2RlZmluZSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIGluZm8sIGFyZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3R5cGVvZl9fKGluZm8pIF9jdXJsX2luZm8gPSBpbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZihfX2J1aWx0aW5fY29uc3RhbnRfcChfY3VybF9pbmZvKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3N0cmluZ19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgY2hhciAqKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX3N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX2xvbmdfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgbG9uZykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2xvbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX2RvdWJsZV9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgZG91YmxlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2RvdWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3NsaXN0X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgc3RydWN0IGN1cmxfc2xpc3QgKikpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3Rsc3Nlc3Npb25pbmZvX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgc3RydWN0IGN1cmxfdGxzc2Vzc2lvbmluZm8gKikpICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfdGxzc2Vzc3Npb25pbmZvKCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX2NlcnRpbmZvX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgc3RydWN0IGN1cmxfY2VydGluZm8gKikpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfY2VydGluZm8oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3NvY2tldF9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgY3VybF9zb2NrZXRfdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc29ja2V0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX29mZl90X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgY3VybF9vZmZfdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfb2ZmX3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIF9jdXJsX2luZm8sIGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSkKKyNkZWZpbmUgY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBpbmZvLCBhcmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX190eXBlb2ZfXyhpbmZvKSBfY3VybF9pbmZvID0gaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYoX19idWlsdGluX2NvbnN0YW50X3AoX2N1cmxfaW5mbykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc3RyaW5nX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBjaGFyICopKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9zdHJpbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfbG9uZ19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBsb25nKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9sb25nKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfZG91YmxlX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBkb3VibGUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9kb3VibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc2xpc3RfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKSkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NsaXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfdGxzc2Vzc2lvbmluZm9faW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBzdHJ1Y3QgY3VybF90bHNzZXNzaW9uaW5mbyAqKSkgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3Rsc3Nlc3NzaW9uaW5mbygpOyAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfY2VydGluZm9faW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqKSkgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX2NlcnRpbmZvKCk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc29ja2V0X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBjdXJsX3NvY2tldF90KSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NvY2tldCgpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfb2ZmX3RfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBjdXJsX29mZl90KSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX29mZl90KCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBfY3VybF9pbmZvLCBhcmcpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0pCiAKIC8qCiAgKiBGb3Igbm93LCBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50cwpAQCAtMTU2LDgzICsxNTYsODMgQEAKICAqIGZ1bmN0aW9ucyAqLwogCiAvKiBUbyBkZWZpbmUgYSBuZXcgd2FybmluZywgdXNlIF9DVVJMX1dBUk5JTkcoaWRlbnRpZmllciwgIm1lc3NhZ2UiKSAqLwotI2RlZmluZSBfQ1VSTF9XQVJOSU5HKGlkLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3dhcm5pbmdfXyhtZXNzYWdlKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBDVVJMV0FSTklORyhpZCwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3dhcm5pbmdfXyhtZXNzYWdlKSkpICAgICAgICAgICAgICAgICAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgICAgICAgICAgICAgXAogICBpZCh2b2lkKSB7IF9fYXNtX18oIiIpOyB9CiAKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2xvbmcsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfbG9uZywKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGxvbmcgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfb2ZmX3QsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9vZmZfdCwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfb2ZmX3QgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3N0cmluZywKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zdHJpbmcsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAiCiAgICAgICAgICAgICAgICJzdHJpbmcgKCdjaGFyIConIG9yIGNoYXJbXSkgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIgogICApCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl93cml0ZV9jYWxsYmFjaywKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl93cml0ZV9jYWxsYmFjaywKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfd3JpdGVfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgIgogICAgICAgICAgICAgICAiY3VybF9yZXNvbHZlcl9zdGFydF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iCiAgICkKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3JlYWRfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfcmVhZF9jYiwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfcmVhZF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfaW9jdGxfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfaW9jdGxfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX2lvY3RsX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb2Nrb3B0X2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvY2tvcHRfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3NvY2tvcHRfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX29wZW5zb2NrZXRfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfb3BlbnNvY2tldF9jYiwKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICIKICAgICAgICAgICAgICAgImN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iCiAgICkKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9wcm9ncmVzc19jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfZGVidWdfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfZGVidWdfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX2RlYnVnX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zc2xfY3R4X2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NzbF9jdHhfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY29udl9jYiwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfY29udl9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfc2Vla19jYiwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zZWVrX2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9zZWVrX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jYl9kYXRhLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NiX2RhdGEsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAiCiAgICAgICAgICAgICAgICJwcml2YXRlIGRhdGEgcG9pbnRlciBhcyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfZXJyb3JfYnVmZmVyLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2Vycm9yX2J1ZmZlciwKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICIKICAgICAgICAgICAgICAgImNoYXIgYnVmZmVyIG9mIENVUkxfRVJST1JfU0laRSBhcyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfRklMRSwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9GSUxFLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgJ0ZJTEUgKicgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfcG9zdGZpZWxkcywKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICd2b2lkIConIG9yICdjaGFyIConIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX2h0dHBvc3QsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9odHRwb3N0LAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgJ3N0cnVjdCBjdXJsX2h0dHBwb3N0IConICIKICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX21pbWVwb3N0LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfbWltZXBvc3QsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAnY3VybF9taW1lIConICIKICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX3NsaXN0LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfc2xpc3QsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAnc3RydWN0IGN1cmxfc2xpc3QgKicgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0NVUkxTSCwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9DVVJMU0gsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBDVVJMU0gqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCiAKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9zdHJpbmcsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX3N0cmluZywKICAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvICdjaGFyIConIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2xvbmcsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2xvbmcsCiAgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBsb25nIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2RvdWJsZSwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfZG91YmxlLAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gZG91YmxlIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QsCiAgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byAnc3RydWN0IGN1cmxfc2xpc3QgKicgZm9yIHRoaXMgaW5mbyIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF90bHNzZXNzc2lvbmluZm8sCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfdGxzc2Vzc3Npb25pbmZvLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gIgogICAgICAgICAgICAgICAiJ3N0cnVjdCBjdXJsX3Rsc3Nlc3Npb25pbmZvIConIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfY2VydGluZm8sCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfY2VydGluZm8sCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byAiCiAgICAgICAgICAgICAgICInc3RydWN0IGN1cmxfY2VydGluZm8gKicgZm9yIHRoaXMgaW5mbyIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9zb2NrZXQsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc29ja2V0LAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY3VybF9zb2NrZXRfdCBmb3IgdGhpcyBpbmZvIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX29mZl90LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX29mZl90LAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY3VybF9vZmZfdCBmb3IgdGhpcyBpbmZvIikKIAogLyogZ3JvdXBzIG9mIGN1cmxfZWFzeV9zZXRvcHMgb3B0aW9ucyB0aGF0IHRha2UgdGhlIHNhbWUgdHlwZSBvZiBhcmd1bWVudCAqLwpAQCAtMjQ0LDE0ICsyNDQsMTQgQEAKICAqLwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBsb25nIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX2xvbmdfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19sb25nX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgIFwKICAgKDAgPCAob3B0aW9uKSAmJiAob3B0aW9uKSA8IENVUkxPUFRUWVBFX09CSkVDVFBPSU5UKQogCi0jZGVmaW5lIF9jdXJsX2lzX29mZl90X29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgob3B0aW9uKSA+IENVUkxPUFRUWVBFX09GRl9UKQorI2RlZmluZSBjdXJsY2hlY2tfb2ZmX3Rfb3B0aW9uKG9wdGlvbikgICAgICAgICAgXAorICAoKChvcHRpb24pID4gQ1VSTE9QVFRZUEVfT0ZGX1QpICYmICgob3B0aW9uKSA8IENVUkxPUFRUWVBFX0JMT0IpKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBjaGFyKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19zdHJpbmdfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfc3RyaW5nX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9BQlNUUkFDVF9VTklYX1NPQ0tFVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkcgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9BTFRTVkMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzAwLDE1ICszMDAsMTggQEAKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfU1NMS0VZIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfU1NMS0VZVFlQRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfU1NMX0NJUEhFUl9MSVNUIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTMTNfQ0lQSEVSUyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9QQVNTV09SRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkFORE9NX0ZJTEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkFOR0UgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkVGRVJFUiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUkVRVUVTVF9UQVJHRVQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUlRTUF9TRVNTSU9OX0lEIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUlRTUF9UUkFOU1BPUlQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfU0FTTF9BVVRIWklEIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU0VSVklDRV9OQU1FIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMyMSw2ICszMjQsNyBAQAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9TU0xLRVkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9TU0xLRVlUWVBFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFMxM19DSVBIRVJTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JEIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFNBVVRIX1RZUEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzMzLDE4ICszMzcsMTggQEAKICAgIDApCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIGN1cmxfd3JpdGVfY2FsbGJhY2sgYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfd3JpdGVfY2Jfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChvcHRpb24pID09IENVUkxPUFRfSEVBREVSRlVOQ1RJT04gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3dyaXRlX2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChvcHRpb24pID09IENVUkxPUFRfSEVBREVSRlVOQ1RJT04gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfV1JJVEVGVU5DVElPTikKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgY3VybF9jb252X2NhbGxiYWNrIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX2NvbnZfY2Jfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfVE9fTkVUV09SS19GVU5DVElPTiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19jb252X2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfVE9fTkVUV09SS19GVU5DVElPTiB8fCAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OIHx8ICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfRlJPTV9VVEY4X0ZVTkNUSU9OKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBkYXRhIGFyZ3VtZW50IHRvIHBhc3MgdG8gYSBjYWxsYmFjayAqLwotI2RlZmluZSBfY3VybF9pc19jYl9kYXRhX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfY2JfZGF0YV9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9DSFVOS19EQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DTE9TRVNPQ0tFVERBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9ERUJVR0RBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzYyLDE3ICszNjYsMTcgQEAKICAgIChvcHRpb24pID09IENVUkxPUFRfU1NMX0NUWF9EQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfV1JJVEVEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkVTT0xWRVJfU1RBUlRfREFUQSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIChvcHRpb24pID09IENVUkxPUFRfQ1VSTFUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfVFJBSUxFUkRBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDApCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIFBPU1QgZGF0YSBhcmd1bWVudCAodm9pZCogb3IgY2hhciopICovCi0jZGVmaW5lIF9jdXJsX2lzX3Bvc3RmaWVsZHNfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19wb3N0ZmllbGRzX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgob3B0aW9uKSA9PSBDVVJMT1BUX1BPU1RGSUVMRFMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPUFlQT1NURklFTERTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBzdHJ1Y3QgY3VybF9zbGlzdCAqIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX3NsaXN0X29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19zbGlzdF9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgob3B0aW9uKSA9PSBDVVJMT1BUX0hUVFAyMDBBTElBU0VTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX0hUVFBIRUFERVIgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX01BSUxfUkNQVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zODIsNDUgKzM4Niw0NyBAQAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9RVU9URSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9SRVNPTFZFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9URUxORVRPUFRJT05TIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05ORUNUX1RPIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCkKIAogLyogZ3JvdXBzIG9mIGN1cmxfZWFzeV9nZXRpbmZvIGluZm9zIHRoYXQgdGFrZSB0aGUgc2FtZSB0eXBlIG9mIGFyZ3VtZW50ICovCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY2hhciAqIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX3N0cmluZ19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChDVVJMSU5GT19TVFJJTkcgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fTE9ORykKKyNkZWZpbmUgY3VybGNoZWNrX3N0cmluZ19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChDVVJMSU5GT19TVFJJTkcgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fTE9ORyAmJiAgICAgICAgXAorICAgKGluZm8pICE9IENVUkxJTkZPX1BSSVZBVEUpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gbG9uZyBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19sb25nX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfbG9uZ19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChDVVJMSU5GT19MT05HIDwgKGluZm8pICYmIChpbmZvKSA8IENVUkxJTkZPX0RPVUJMRSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgaW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBkb3VibGUgYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfZG91YmxlX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX2RvdWJsZV9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgXAogICAoQ1VSTElORk9fRE9VQkxFIDwgKGluZm8pICYmIChpbmZvKSA8IENVUkxJTkZPX1NMSVNUKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3RydWN0IGN1cmxfc2xpc3QgKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19zbGlzdF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfc2xpc3RfaW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKChpbmZvKSA9PSBDVVJMSU5GT19TU0xfRU5HSU5FUykgfHwgKChpbmZvKSA9PSBDVVJMSU5GT19DT09LSUVMSVNUKSkKIAogLyogdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIHN0cnVjdCBjdXJsX3Rsc3Nlc3Npb25pbmZvICogYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfdGxzc2Vzc2lvbmluZm9faW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3Rsc3Nlc3Npb25pbmZvX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKGluZm8pID09IENVUkxJTkZPX1RMU19TU0xfUFRSKSB8fCAoKGluZm8pID09IENVUkxJTkZPX1RMU19TRVNTSU9OKSkKIAogLyogdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIHN0cnVjdCBjdXJsX2NlcnRpbmZvICogYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfY2VydGluZm9faW5mbyhpbmZvKSAoKGluZm8pID09IENVUkxJTkZPX0NFUlRJTkZPKQorI2RlZmluZSBjdXJsY2hlY2tfY2VydGluZm9faW5mbyhpbmZvKSAoKGluZm8pID09IENVUkxJTkZPX0NFUlRJTkZPKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3RydWN0IGN1cmxfc29ja2V0X3QgYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfc29ja2V0X2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3NvY2tldF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgXAogICAoQ1VSTElORk9fU09DS0VUIDwgKGluZm8pICYmIChpbmZvKSA8IENVUkxJTkZPX09GRl9UKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY3VybF9vZmZfdCBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19vZmZfdF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfb2ZmX3RfaW5mbyhpbmZvKSAgICAgICAgICAgICAgXAogICAoQ1VSTElORk9fT0ZGX1QgPCAoaW5mbykpCiAKIAogLyogdHlwZWNoZWNrIGhlbHBlcnMgLS0gY2hlY2sgd2hldGhlciBnaXZlbiBleHByZXNzaW9uIGhhcyByZXF1ZXN0ZWQgdHlwZSovCiAKLS8qIEZvciBwb2ludGVycywgeW91IGNhbiB1c2UgdGhlIF9jdXJsX2lzX3B0ci9fY3VybF9pc19hcnIgbWFjcm9zLAorLyogRm9yIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSB0aGUgY3VybGNoZWNrX3B0ci9jdXJsY2hlY2tfYXJyIG1hY3JvcywKICAqIG90aGVyd2lzZSBkZWZpbmUgYSBuZXcgbWFjcm8uIFNlYXJjaCBmb3IgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcAogICogaW4gdGhlIEdDQyBtYW51YWwuCiAgKiBOT1RFOiB0aGVzZSBtYWNyb3MgTVVTVCBOT1QgRVZBTFVBVEUgdGhlaXIgYXJndW1lbnRzISBUaGUgYXJndW1lbnQgaXMKQEAgLTQzMCwzNSArNDM2LDM1IEBACiAgKi8KIAogLyogWFhYOiBzaG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBpZiBleHByIGlzIGEgcG9pbnRlciAqLwotI2RlZmluZSBfY3VybF9pc19hbnlfcHRyKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfYW55X3B0cihleHByKSAgICAgICAgICAgICAgICAgXAogICAoc2l6ZW9mKGV4cHIpID09IHNpemVvZih2b2lkICopKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIE5VTEwgKi8KIC8qIFhYWDogbXVzdCBub3QgZXZhbHVhdGUgZXhwciwgc28gdGhpcyBjaGVjayBpcyBub3QgYWNjdXJhdGUgKi8KLSNkZWZpbmUgX2N1cmxfaXNfTlVMTChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX05VTEwoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgX190eXBlb2ZfXyhOVUxMKSkpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgdHlwZSosIGNvbnN0IHR5cGUqIG9yIE5VTEwgKi8KLSNkZWZpbmUgX2N1cmxfaXNfcHRyKGV4cHIsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdHlwZSAqKSB8fCAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3B0cihleHByLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdHlwZSAqKSB8fCAgICAgICAgICAgIFwKICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY29uc3QgdHlwZSAqKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvbmUgb2YgdHlwZVtdLCB0eXBlKiwgTlVMTCBvciBjb25zdCB0eXBlKiAqLwotI2RlZmluZSBfY3VybF9pc19hcnIoZXhwciwgdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfcHRyKChleHByKSwgdHlwZSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfYXJyKGV4cHIsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX3B0cigoZXhwciksIHR5cGUpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCB0eXBlIFtdKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBhIHN0cmluZyAqLwotI2RlZmluZSBfY3VybF9pc19zdHJpbmcoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgc2lnbmVkIGNoYXIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCisjZGVmaW5lIGN1cmxjaGVja19zdHJpbmcoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgc2lnbmVkIGNoYXIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgYSBsb25nIChubyBtYXR0ZXIgdGhlIHNpZ25lZG5lc3MpCiAgKiBYWFg6IGZvciBub3csIGludCBpcyBhbHNvIGFjY2VwdGVkIChhbmQgdGhlcmVmb3JlIHNob3J0IGFuZCBjaGFyLCB3aGljaAogICogYXJlIHByb21vdGVkIHRvIGludCB3aGVuIHBhc3NlZCB0byBhIHZhcmlhZGljIGZ1bmN0aW9uKSAqLwotI2RlZmluZSBfY3VybF9pc19sb25nKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfbG9uZyhleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBsb25nKSB8fCAgICAgICAgICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBzaWduZWQgbG9uZykgfHwgICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCB1bnNpZ25lZCBsb25nKSB8fCAgICAgICAgICAgXApAQCAtNDczLDU5ICs0NzksNTkgQEAKICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdW5zaWduZWQgY2hhcikpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX29mZl90ICovCi0jZGVmaW5lIF9jdXJsX2lzX29mZl90KGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19vZmZfdChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjdXJsX29mZl90KSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBhYnVmZmVyIHN1aXRhYmxlIGZvciBDVVJMT1BUX0VSUk9SQlVGRkVSICovCiAvKiBYWFg6IGFsc28gY2hlY2sgc2l6ZSBvZiBhbiBjaGFyW10gYXJyYXk/ICovCi0jZGVmaW5lIF9jdXJsX2lzX2Vycm9yX2J1ZmZlcihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGNoYXIgKikgfHwgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19lcnJvcl9idWZmZXIoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGNoYXIgKikgfHwgICAgICAgICAgICBcCiAgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGNoYXJbXSkpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSAoY29uc3QpIHZvaWQqIG9yIChjb25zdCkgRklMRSogKi8KICNpZiAwCi0jZGVmaW5lIF9jdXJsX2lzX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19wdHIoKGV4cHIpLCB2b2lkKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9pc19wdHIoKGV4cHIpLCBGSUxFKSkKKyNkZWZpbmUgY3VybGNoZWNrX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19wdHIoKGV4cHIpLCB2b2lkKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19wdHIoKGV4cHIpLCBGSUxFKSkKICNlbHNlIC8qIGJlIGxlc3Mgc3RyaWN0ICovCi0jZGVmaW5lIF9jdXJsX2lzX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9jdXJsX2lzX2FueV9wdHIoZXhwcikKKyNkZWZpbmUgY3VybGNoZWNrX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgIFwKKyAgY3VybGNoZWNrX2FueV9wdHIoZXhwcikKICNlbmRpZgogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgRklMRSogKi8KLSNkZWZpbmUgX2N1cmxfaXNfRklMRShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfRklMRShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgRklMRSAqKSkpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgY2FuIGJlIHBhc3NlZCBhcyBQT1NUIGRhdGEgKHZvaWQqIG9yIGNoYXIqKSAqLwotI2RlZmluZSBfY3VybF9pc19wb3N0ZmllbGRzKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfcHRyKChleHByKSwgdm9pZCkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCisjZGVmaW5lIGN1cmxjaGVja19wb3N0ZmllbGRzKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfcHRyKChleHByKSwgdm9pZCkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCiAKIC8qIGhlbHBlcjogX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZnVuY3Rpb25zIGFuZAogICogZnVuY3Rpb24gcG9pbnRlcnMsIGhpZGUgaXQgKi8KLSNkZWZpbmUgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZShmdW5jLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhmdW5jKSwgdHlwZSkgfHwgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoZnVuYywgdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhmdW5jKSwgdHlwZSkgfHwgICAgICAgICAgICAgIFwKICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhmdW5jKSAqLCB0eXBlKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2sgKi8KLSNkZWZpbmUgX2N1cmxfaXNfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2soZXhwcikgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9yZXNvbHZlcl9zdGFydF9jYWxsYmFjaykpCisjZGVmaW5lIGN1cmxjaGVja19yZXNvbHZlcl9zdGFydF9jYWxsYmFjayhleHByKSAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2spKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9yZWFkX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc19yZWFkX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9fdHlwZW9mX18oZnJlYWQpICopIHx8ICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfcmVhZF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2s2KSkKKyNkZWZpbmUgY3VybGNoZWNrX3JlYWRfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX190eXBlb2ZfXyhmcmVhZCkgKikgfHwgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9yZWFkX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazYpKQogdHlwZWRlZiBzaXplX3QgKCpfY3VybF9yZWFkX2NhbGxiYWNrMSkoY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfcmVhZF9jYWxsYmFjazIpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKik7CiB0eXBlZGVmIHNpemVfdCAoKl9jdXJsX3JlYWRfY2FsbGJhY2szKShjaGFyICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpAQCAtNTM0LDE2ICs1NDAsMTYgQEAKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfcmVhZF9jYWxsYmFjazYpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3dyaXRlX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc193cml0ZV9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfcmVhZF9jYihleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9fdHlwZW9mX18oZndyaXRlKSAqKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfd3JpdGVfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMikgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMykgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNCkgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNSkgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNikpCisjZGVmaW5lIGN1cmxjaGVja193cml0ZV9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfcmVhZF9jYihleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9fdHlwZW9mX18oZndyaXRlKSAqKSB8fCAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfd3JpdGVfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMikgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMykgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNCkgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNSkgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNikpCiB0eXBlZGVmIHNpemVfdCAoKl9jdXJsX3dyaXRlX2NhbGxiYWNrMSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfd3JpdGVfY2FsbGJhY2syKShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqKTsKQEAgLTU1NCwzNyArNTYwLDM3IEBACiB0eXBlZGVmIHNpemVfdCAoKl9jdXJsX3dyaXRlX2NhbGxiYWNrNikoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfaW9jdGxfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX2lvY3RsX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9pb2N0bF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2s0KSkKKyNkZWZpbmUgY3VybGNoZWNrX2lvY3RsX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9pb2N0bF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2syKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2szKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2s0KSkKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2sxKShDVVJMICosIGludCwgdm9pZCAqKTsKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2syKShDVVJMICosIGludCwgY29uc3Qgdm9pZCAqKTsKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2szKShDVVJMICosIGN1cmxpb2NtZCwgdm9pZCAqKTsKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2s0KShDVVJMICosIGN1cmxpb2NtZCwgY29uc3Qgdm9pZCAqKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfc29ja29wdF9jYWxsYmFjayBvciAic2ltaWxhciIgKi8KLSNkZWZpbmUgX2N1cmxfaXNfc29ja29wdF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3NvY2tvcHRfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zb2Nrb3B0X2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zb2Nrb3B0X2NhbGxiYWNrMikpCisjZGVmaW5lIGN1cmxjaGVja19zb2Nrb3B0X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfc29ja29wdF9jYWxsYmFjaykgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2sxKSB8fCAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2syKSkKIHR5cGVkZWYgaW50ICgqX2N1cmxfc29ja29wdF9jYWxsYmFjazEpKHZvaWQgKiwgY3VybF9zb2NrZXRfdCwgY3VybHNvY2t0eXBlKTsKIHR5cGVkZWYgaW50ICgqX2N1cmxfc29ja29wdF9jYWxsYmFjazIpKGNvbnN0IHZvaWQgKiwgY3VybF9zb2NrZXRfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHNvY2t0eXBlKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayBvcgogICAgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX29wZW5zb2NrZXRfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrKSB8fCAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazEpIHx8ICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazIpIHx8ICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazMpIHx8ICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazQpKQorI2RlZmluZSBjdXJsY2hlY2tfb3BlbnNvY2tldF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2spIHx8ICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMSkgfHwgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMikgfHwgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMykgfHwgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrNCkpCiB0eXBlZGVmIGN1cmxfc29ja2V0X3QgKCpfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMSkKICAgKHZvaWQgKiwgY3VybHNvY2t0eXBlLCBzdHJ1Y3QgY3VybF9zb2NrYWRkciAqKTsKIHR5cGVkZWYgY3VybF9zb2NrZXRfdCAoKl9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2syKQpAQCAtNTk1LDI4ICs2MDEsMjggQEAKICAgKGNvbnN0IHZvaWQgKiwgY3VybHNvY2t0eXBlLCBjb25zdCBzdHJ1Y3QgY3VybF9zb2NrYWRkciAqKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX3Byb2dyZXNzX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9wcm9ncmVzc19jYWxsYmFjaykgfHwgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2syKSkKKyNkZWZpbmUgY3VybGNoZWNrX3Byb2dyZXNzX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9wcm9ncmVzc19jYWxsYmFjaykgfHwgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sxKSB8fCAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2syKSkKIHR5cGVkZWYgaW50ICgqX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sxKSh2b2lkICosCiAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKIHR5cGVkZWYgaW50ICgqX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2syKShjb25zdCB2b2lkICosCiAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfZGVidWdfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX2RlYnVnX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9kZWJ1Z19jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s2KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s3KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s4KSkKKyNkZWZpbmUgY3VybGNoZWNrX2RlYnVnX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9kZWJ1Z19jYWxsYmFjaykgfHwgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2syKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2szKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s2KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s3KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s4KSkKIHR5cGVkZWYgaW50ICgqX2N1cmxfZGVidWdfY2FsbGJhY2sxKSAoQ1VSTCAqLAogICAgIGN1cmxfaW5mb3R5cGUsIGNoYXIgKiwgc2l6ZV90LCB2b2lkICopOwogdHlwZWRlZiBpbnQgKCpfY3VybF9kZWJ1Z19jYWxsYmFjazIpIChDVVJMICosCkBAIC02MzYsMTcgKzY0MiwxNyBAQAogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9zc2xfY3R4X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwogLyogdGhpcyBpcyBnZXR0aW5nIGV2ZW4gbWVzc2llci4uLiAqLwotI2RlZmluZSBfY3VybF9pc19zc2xfY3R4X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfc3NsX2N0eF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s2KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s3KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s4KSkKKyNkZWZpbmUgY3VybGNoZWNrX3NzbF9jdHhfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9zc2xfY3R4X2NhbGxiYWNrKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazEpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazIpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazMpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazQpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazUpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazYpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazcpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazgpKQogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX3NzbF9jdHhfY2FsbGJhY2sxKShDVVJMICosIHZvaWQgKiwgdm9pZCAqKTsKIHR5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9zc2xfY3R4X2NhbGxiYWNrMikoQ1VSTCAqLCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfc3NsX2N0eF9jYWxsYmFjazMpKENVUkwgKiwgY29uc3Qgdm9pZCAqLCB2b2lkICopOwpAQCAtNjY5LDI2ICs2NzUsMjYgQEAKICNlbmRpZgogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9jb252X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc19jb252X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfY29udl9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2s0KSkKKyNkZWZpbmUgY3VybGNoZWNrX2NvbnZfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9jb252X2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazQpKQogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2sxKShjaGFyICosIHNpemVfdCBsZW5ndGgpOwogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2syKShjb25zdCBjaGFyICosIHNpemVfdCBsZW5ndGgpOwogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2szKSh2b2lkICosIHNpemVfdCBsZW5ndGgpOwogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2s0KShjb25zdCB2b2lkICosIHNpemVfdCBsZW5ndGgpOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9zZWVrX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc19zZWVrX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfc2Vla19jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NlZWtfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NlZWtfY2FsbGJhY2syKSkKKyNkZWZpbmUgY3VybGNoZWNrX3NlZWtfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9zZWVrX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc2Vla19jYWxsYmFjazEpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc2Vla19jYWxsYmFjazIpKQogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX3NlZWtfY2FsbGJhY2sxKSh2b2lkICosIGN1cmxfb2ZmX3QsIGludCk7CiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfc2Vla19jYWxsYmFjazIpKGNvbnN0IHZvaWQgKiwgY3VybF9vZmZfdCwgaW50KTsKIAogCi0jZW5kaWYgLyogX19DVVJMX1RZUEVDSEVDS19HQ0NfSCAqLworI2VuZGlmIC8qIENVUkxJTkNfVFlQRUNIRUNLX0dDQ19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC91cmxhcGkuaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3VybGFwaS5oCmluZGV4IDU4ZTg5ZDguLmYyZDA2NzcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3VybGFwaS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3VybGFwaS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfVVJMQVBJX0gKLSNkZWZpbmUgX19DVVJMX1VSTEFQSV9ICisjaWZuZGVmIENVUkxJTkNfVVJMQVBJX0gKKyNkZWZpbmUgQ1VSTElOQ19VUkxBUElfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTc3LDYgKzc3LDggQEAKICNkZWZpbmUgQ1VSTFVfVVJMRU5DT0RFICgxPDw3KSAgICAgICAgICAvKiBVUkwgZW5jb2RlIG9uIHNldCAqLwogI2RlZmluZSBDVVJMVV9BUFBFTkRRVUVSWSAoMTw8OCkgICAgICAgIC8qIGFwcGVuZCBhIGZvcm0gc3R5bGUgcGFydCAqLwogI2RlZmluZSBDVVJMVV9HVUVTU19TQ0hFTUUgKDE8PDkpICAgICAgIC8qIGxlZ2FjeSBjdXJsLXN0eWxlIGd1ZXNzaW5nICovCisjZGVmaW5lIENVUkxVX05PX0FVVEhPUklUWSAoMTw8MTApICAgICAgLyogQWxsb3cgZW1wdHkgYXV0aG9yaXR5IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lIGlzIHVua25vd24uICovCiAKIHR5cGVkZWYgc3RydWN0IEN1cmxfVVJMIENVUkxVOwogCkBAIC0xMjAsNCArMTIyLDQgQEAKIH0gLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBDVVJMSU5DX1VSTEFQSV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL0NNYWtlTGlzdHMudHh0CmluZGV4IDJhNjI3OWMuLjMyYmVhNjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIHNldChMSUJfTkFNRSBjbWN1cmwpCiAKIGlmKEJVSUxEX1NIQVJFRF9MSUJTKQpAQCAtMjAsNyArNDEsNiBAQAogCiBpZihNU1ZDIEFORCBOT1QgQ1VSTF9TVEFUSUNMSUIpCiAgIGxpc3QoQVBQRU5EIENTT1VSQ0VTIGxpYmN1cmwucmMpCi0gIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC93ZDQxMjciKQogZW5kaWYoKQogCiAjIFNFVChDU09VUkNFUwpAQCAtOTcsMTEgKzExNywxNiBAQAogICAke0NNQUtFX0NVUkxfU1NMX0RMTFN9CiAgICkKIAorYWRkX2xpYnJhcnkoCisgICR7UFJPSkVDVF9OQU1FfTo6JHtMSUJfTkFNRX0KKyAgQUxJQVMgJHtMSUJfTkFNRX0KKyAgKQorCiBpZihOT1QgQlVJTERfU0hBUkVEX0xJQlMpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgQ1VSTF9TVEFUSUNMSUIpCiBlbmRpZigpCiAKLXRhcmdldF9saW5rX2xpYnJhcmllcygke0xJQl9OQU1FfSAke0NVUkxfTElCU30pCit0YXJnZXRfbGlua19saWJyYXJpZXMoJHtMSUJfTkFNRX0gUFJJVkFURSAke0NVUkxfTElCU30pCiAKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KIGlmKFdJTjMyKQpAQCAtMTIxLDYgKzE0NiwxMiBAQAogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgUFJFRklYICIiKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgSU1QT1JUX1BSRUZJWCAiIikKIAoraWYoQ1VSTF9IQVNfTFRPKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtMSUJfTkFNRX0gUFJPUEVSVElFUworICAgIElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fUkVMRUFTRSBUUlVFCisgICAgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTl9SRUxXSVRIREVCSU5GTyBUUlVFKQorZW5kaWYoKQorCiBpZihXSU4zMikKICAgaWYoQlVJTERfU0hBUkVEX0xJQlMpCiAgICAgIyBBZGQgIl9pbXAiIGFzIGEgc3VmZml4IGJlZm9yZSB0aGUgZXh0ZW5zaW9uIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggdGhlIHN0YXRpY2FsbHkgbGlua2VkICJsaWJjdXJsLmxpYiIKQEAgLTE0MSw3ICsxNzIsNyBAQAogCiBleHBvcnQoVEFSR0VUUyAke0xJQl9OQU1FfQogICAgICAgIEFQUEVORCBGSUxFICR7UFJPSkVDVF9CSU5BUllfRElSfS9saWJjdXJsLXRhcmdldC5jbWFrZQotICAgICAgIE5BTUVTUEFDRSBDVVJMOjoKKyAgICAgICBOQU1FU1BBQ0UgJHtQUk9KRUNUX05BTUV9OjoKICkKIAogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvTWFrZWZpbGUuaW5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvTWFrZWZpbGUuaW5jCmluZGV4IDIzNWI4MmIuLjcyM2I4MjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL01ha2VmaWxlLmluYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9NYWtlZmlsZS5pbmMKQEAgLTUsNyArNSw3IEBACiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogIwotIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogIwogIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMCw2NSArMjAsNzAgQEAKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1MSUJfVkFVVEhfQ0ZJTEVTID0gdmF1dGgvdmF1dGguYyB2YXV0aC9jbGVhcnRleHQuYyB2YXV0aC9jcmFtLmMgICAgICAgICBcCi0gIHZhdXRoL2RpZ2VzdC5jIHZhdXRoL2RpZ2VzdF9zc3BpLmMgdmF1dGgva3JiNV9nc3NhcGkuYyAgICAgICAgICAgICAgICBcCi0gIHZhdXRoL2tyYjVfc3NwaS5jIHZhdXRoL250bG0uYyB2YXV0aC9udGxtX3NzcGkuYyB2YXV0aC9vYXV0aDIuYyAgICAgICBcCi0gIHZhdXRoL3NwbmVnb19nc3NhcGkuYyB2YXV0aC9zcG5lZ29fc3NwaS5jCitMSUJfVkFVVEhfQ0ZJTEVTID0gdmF1dGgvY2xlYXJ0ZXh0LmMgdmF1dGgvY3JhbS5jIHZhdXRoL2RpZ2VzdC5jICAgICAgICAgICAgIFwKKyAgdmF1dGgvZGlnZXN0X3NzcGkuYyB2YXV0aC9rcmI1X2dzc2FwaS5jIHZhdXRoL2tyYjVfc3NwaS5jIHZhdXRoL250bG0uYyAgICAgXAorICB2YXV0aC9udGxtX3NzcGkuYyB2YXV0aC9vYXV0aDIuYyB2YXV0aC9zcG5lZ29fZ3NzYXBpLmMgdmF1dGgvc3BuZWdvX3NzcGkuYyBcCisgIHZhdXRoL3ZhdXRoLmMKIAotTElCX1ZBVVRIX0hGSUxFUyA9IHZhdXRoL3ZhdXRoLmggdmF1dGgvZGlnZXN0LmggdmF1dGgvbnRsbS5oCitMSUJfVkFVVEhfSEZJTEVTID0gdmF1dGgvZGlnZXN0LmggdmF1dGgvbnRsbS5oIHZhdXRoL3ZhdXRoLmgKIAotTElCX1ZUTFNfQ0ZJTEVTID0gdnRscy9vcGVuc3NsLmMgdnRscy9ndGxzLmMgdnRscy92dGxzLmMgdnRscy9uc3MuYyAgICAgXAotICB2dGxzL3BvbGFyc3NsLmMgdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB2dGxzL2N5YXNzbC5jIHZ0bHMvc2NoYW5uZWwuYyB2dGxzL3NjaGFubmVsX3ZlcmlmeS5jICAgICAgICAgICAgICAgICAgXAotICB2dGxzL3NlY3RyYW5zcC5jIHZ0bHMvZ3NraXQuYyB2dGxzL21iZWR0bHMuYyB2dGxzL21lc2FsaW5rLmMKK0xJQl9WVExTX0NGSUxFUyA9IHZ0bHMvYmVhcnNzbC5jIHZ0bHMvZ3NraXQuYyB2dGxzL2d0bHMuYyB2dGxzL2tleWxvZy5jICBcCisgIHZ0bHMvbWJlZHRscy5jIHZ0bHMvbWJlZHRsc190aHJlYWRsb2NrLmMgdnRscy9tZXNhbGluay5jIHZ0bHMvbnNzLmMgICAgXAorICB2dGxzL29wZW5zc2wuYyB2dGxzL3NjaGFubmVsLmMgdnRscy9zY2hhbm5lbF92ZXJpZnkuYyB2dGxzL3NlY3RyYW5zcC5jIFwKKyAgdnRscy92dGxzLmMgdnRscy93b2xmc3NsLmMKIAotTElCX1ZUTFNfSEZJTEVTID0gdnRscy9vcGVuc3NsLmggdnRscy92dGxzLmggdnRscy9ndGxzLmggICAgICAgICAgICAgICAgXAotICB2dGxzL25zc2cuaCB2dGxzL3BvbGFyc3NsLmggdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmggICAgICAgICAgICAgICAgXAotICB2dGxzL2N5YXNzbC5oIHZ0bHMvc2NoYW5uZWwuaCB2dGxzL3NlY3RyYW5zcC5oIHZ0bHMvZ3NraXQuaCAgICAgICAgICAgXAotICB2dGxzL21iZWR0bHMuaCB2dGxzL21lc2FsaW5rLmgKK0xJQl9WVExTX0hGSUxFUyA9IHZ0bHMvYmVhcnNzbC5oIHZ0bHMvZ3NraXQuaCB2dGxzL2d0bHMuaCB2dGxzL2tleWxvZy5oICAgICAgXAorICB2dGxzL21iZWR0bHMuaCB2dGxzL21iZWR0bHNfdGhyZWFkbG9jay5oIHZ0bHMvbWVzYWxpbmsuaCB2dGxzL25zc2cuaCAgICAgICBcCisgIHZ0bHMvb3BlbnNzbC5oIHZ0bHMvc2NoYW5uZWwuaCB2dGxzL3NlY3RyYW5zcC5oIHZ0bHMvdnRscy5oIHZ0bHMvd29sZnNzbC5oCiAKLUxJQl9DRklMRVMgPSBmaWxlLmMgdGltZXZhbC5jIGJhc2U2NC5jIGhvc3RpcC5jIHByb2dyZXNzLmMgZm9ybWRhdGEuYyAgIFwKLSAgY29va2llLmMgaHR0cC5jIHNlbmRmLmMgZnRwLmMgdXJsLmMgZGljdC5jIGlmMmlwLmMgc3BlZWRjaGVjay5jICAgICAgIFwKLSAgbGRhcC5jIHZlcnNpb24uYyBnZXRlbnYuYyBlc2NhcGUuYyBtcHJpbnRmLmMgdGVsbmV0LmMgbmV0cmMuYyAgICAgICAgIFwKLSAgZ2V0aW5mby5jIHRyYW5zZmVyLmMgc3RyY2FzZS5jIGVhc3kuYyBzZWN1cml0eS5jIGN1cmxfZm5tYXRjaC5jICAgICAgIFwKLSAgZmlsZWluZm8uYyBmdHBsaXN0cGFyc2VyLmMgd2lsZGNhcmQuYyBrcmI1LmMgbWVtZGVidWcuYyBodHRwX2NodW5rcy5jIFwKLSAgc3RydG9rLmMgY29ubmVjdC5jIGxsaXN0LmMgaGFzaC5jIG11bHRpLmMgY29udGVudF9lbmNvZGluZy5jIHNoYXJlLmMgIFwKLSAgaHR0cF9kaWdlc3QuYyBtZDQuYyBtZDUuYyBodHRwX25lZ290aWF0ZS5jIGluZXRfcHRvbi5jIHN0cnRvb2ZmdC5jICAgIFwKLSAgc3RyZXJyb3IuYyBhbWlnYW9zLmMgaG9zdGFzeW4uYyBob3N0aXA0LmMgaG9zdGlwNi5jIGhvc3RzeW4uYyAgICAgICAgIFwKLSAgaW5ldF9udG9wLmMgcGFyc2VkYXRlLmMgc2VsZWN0LmMgdGZ0cC5jIHNwbGF5LmMgc3RyZHVwLmMgc29ja3MuYyAgICAgIFwKLSAgc3NoLmMgc3NoLWxpYnNzaC5jIGN1cmxfYWRkcmluZm8uYyBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMgICAgICAgIFwKLSAgY3VybF9zc3BpLmMgc2xpc3QuYyBub25ibG9jay5jIGN1cmxfbWVtcmNoci5jIGltYXAuYyBwb3AzLmMgc210cC5jICAgIFwKLSAgcGluZ3BvbmcuYyBydHNwLmMgY3VybF90aHJlYWRzLmMgd2Fybmxlc3MuYyBobWFjLmMgY3VybF9ydG1wLmMgICAgICAgIFwKLSAgb3BlbmxkYXAuYyBjdXJsX2dldGhvc3RuYW1lLmMgZ29waGVyLmMgaWRuX3dpbjMyLmMgICAgICAgICAgICAgICAgICAgIFwKLSAgaHR0cF9wcm94eS5jIG5vbi1hc2NpaS5jIGFzeW4tYXJlcy5jIGFzeW4tdGhyZWFkLmMgY3VybF9nc3NhcGkuYyAgICAgIFwKLSAgaHR0cF9udGxtLmMgY3VybF9udGxtX3diLmMgY3VybF9udGxtX2NvcmUuYyBjdXJsX3Nhc2wuYyByYW5kLmMgICAgICAgIFwKLSAgY3VybF9tdWx0aWJ5dGUuYyBob3N0Y2hlY2suYyBjb25uY2FjaGUuYyBkb3Rkb3QuYyAgICAgICAgICAgICAgICAgICAgIFwKLSAgeDUwOWFzbjEuYyBodHRwMi5jIHNtYi5jIGN1cmxfZW5kaWFuLmMgY3VybF9kZXMuYyBzeXN0ZW1fd2luMzIuYyAgICAgIFwKLSAgbWltZS5jIHNoYTI1Ni5jIHNldG9wdC5jIGN1cmxfcGF0aC5jIGN1cmxfY3R5cGUuYyBjdXJsX3JhbmdlLmMgcHNsLmMgIFwKLSAgZG9oLmMgdXJsYXBpLmMgY3VybF9nZXRfbGluZS5jIGFsdHN2Yy5jCitMSUJfVlFVSUNfQ0ZJTEVTID0gdnF1aWMvbmd0Y3AyLmMgdnF1aWMvcXVpY2hlLmMgdnF1aWMvdnF1aWMuYwogCi1MSUJfSEZJTEVTID0gYXJwYV90ZWxuZXQuaCBuZXRyYy5oIGZpbGUuaCB0aW1ldmFsLmggaG9zdGlwLmggcHJvZ3Jlc3MuaCBcCi0gIGZvcm1kYXRhLmggY29va2llLmggaHR0cC5oIHNlbmRmLmggZnRwLmggdXJsLmggZGljdC5oIGlmMmlwLmggICAgICAgICBcCi0gIHNwZWVkY2hlY2suaCB1cmxkYXRhLmggY3VybF9sZGFwLmggZXNjYXBlLmggdGVsbmV0LmggZ2V0aW5mby5oICAgICAgICBcCi0gIHN0cmNhc2UuaCBjdXJsX3NlYy5oIG1lbWRlYnVnLmggaHR0cF9jaHVua3MuaCBjdXJsX2ZubWF0Y2guaCAgICAgICAgICBcCi0gIHdpbGRjYXJkLmggZmlsZWluZm8uaCBmdHBsaXN0cGFyc2VyLmggc3RydG9rLmggY29ubmVjdC5oIGxsaXN0LmggICAgICBcCi0gIGhhc2guaCBjb250ZW50X2VuY29kaW5nLmggc2hhcmUuaCBjdXJsX21kNC5oIGN1cmxfbWQ1LmggaHR0cF9kaWdlc3QuaCBcCi0gIGh0dHBfbmVnb3RpYXRlLmggaW5ldF9wdG9uLmggYW1pZ2Fvcy5oIHN0cnRvb2ZmdC5oIHN0cmVycm9yLmggICAgICAgICBcCi0gIGluZXRfbnRvcC5oIGN1cmx4LmggY3VybF9tZW1vcnkuaCBjdXJsX3NldHVwLmggdHJhbnNmZXIuaCBzZWxlY3QuaCAgICBcCi0gIGVhc3lpZi5oIG11bHRpaWYuaCBwYXJzZWRhdGUuaCB0ZnRwLmggc29ja2FkZHIuaCBzcGxheS5oIHN0cmR1cC5oICAgICBcCi0gIHNvY2tzLmggc3NoLmggY3VybF9iYXNlNjQuaCBjdXJsX2FkZHJpbmZvLmggY3VybF9zc3BpLmggICAgICBcCi0gIHNsaXN0Lmggbm9uYmxvY2suaCBjdXJsX21lbXJjaHIuaCBpbWFwLmggcG9wMy5oIHNtdHAuaCBwaW5ncG9uZy5oICAgICBcCi0gIHJ0c3AuaCBjdXJsX3RocmVhZHMuaCB3YXJubGVzcy5oIGN1cmxfaG1hYy5oIGN1cmxfcnRtcC5oICAgICAgICAgICAgICBcCi0gIGN1cmxfZ2V0aG9zdG5hbWUuaCBnb3BoZXIuaCBodHRwX3Byb3h5Lmggbm9uLWFzY2lpLmggYXN5bi5oICAgICAgICAgICBcCi0gIGh0dHBfbnRsbS5oIGN1cmxfZ3NzYXBpLmggY3VybF9udGxtX3diLmggY3VybF9udGxtX2NvcmUuaCAgICAgICAgICAgICBcCi0gIGN1cmxfc2FzbC5oIGN1cmxfbXVsdGlieXRlLmggaG9zdGNoZWNrLmggY29ubmNhY2hlLmggICAgICAgICAgICAgICAgICBcCi0gIGN1cmxfc2V0dXBfb25jZS5oIG11bHRpaGFuZGxlLmggc2V0dXAtdm1zLmggZG90ZG90LmggICAgICAgICAgICAgICAgICBcCi0gIHg1MDlhc24xLmggaHR0cDIuaCBzaWdwaXBlLmggc21iLmggY3VybF9lbmRpYW4uaCBjdXJsX2Rlcy5oICAgICAgICAgICBcCi0gIGN1cmxfcHJpbnRmLmggc3lzdGVtX3dpbjMyLmggcmFuZC5oIG1pbWUuaCBjdXJsX3NoYTI1Ni5oIHNldG9wdC5oICAgICBcCi0gIGN1cmxfcGF0aC5oIGN1cmxfY3R5cGUuaCBjdXJsX3JhbmdlLmggcHNsLmggZG9oLmggdXJsYXBpLWludC5oICAgICAgICBcCi0gIGN1cmxfZ2V0X2xpbmUuaCBhbHRzdmMuaAorTElCX1ZRVUlDX0hGSUxFUyA9IHZxdWljL25ndGNwMi5oIHZxdWljL3F1aWNoZS5oIHZxdWljL3ZxdWljLmgKKworTElCX1ZTU0hfQ0ZJTEVTID0gdnNzaC9saWJzc2guYyB2c3NoL2xpYnNzaDIuYyB2c3NoL3dvbGZzc2guYworCitMSUJfVlNTSF9IRklMRVMgPSB2c3NoL3NzaC5oCisKK0xJQl9DRklMRVMgPSBhbHRzdmMuYyBhbWlnYW9zLmMgYXN5bi1hcmVzLmMgYXN5bi10aHJlYWQuYyBiYXNlNjQuYyAgICAgICAgICAgIFwKKyAgY29ubmNhY2hlLmMgY29ubmVjdC5jIGNvbnRlbnRfZW5jb2RpbmcuYyBjb29raWUuYyBjdXJsX2FkZHJpbmZvLmMgICAgICAgICAgIFwKKyAgY3VybF9jdHlwZS5jIGN1cmxfZGVzLmMgY3VybF9lbmRpYW4uYyBjdXJsX2ZubWF0Y2guYyBjdXJsX2dldF9saW5lLmMgICAgICAgIFwKKyAgY3VybF9nZXRob3N0bmFtZS5jIGN1cmxfZ3NzYXBpLmMgY3VybF9tZW1yY2hyLmMgY3VybF9tdWx0aWJ5dGUuYyAgICAgICAgICAgIFwKKyAgY3VybF9udGxtX2NvcmUuYyBjdXJsX250bG1fd2IuYyBjdXJsX3BhdGguYyBjdXJsX3JhbmdlLmMgY3VybF9ydG1wLmMgICAgICAgIFwKKyAgY3VybF9zYXNsLmMgY3VybF9zc3BpLmMgY3VybF90aHJlYWRzLmMgZGljdC5jIGRvdGRvdC5jIGVhc3kuYyBlc2NhcGUuYyAgICAgIFwKKyAgZmlsZS5jIGZpbGVpbmZvLmMgZm9ybWRhdGEuYyBmdHAuYyB1cmwuYyBmdHBsaXN0cGFyc2VyLmMgZ2V0ZW52LmMgZ2V0aW5mby5jIFwKKyAgZ29waGVyLmMgaGFzaC5jIGhtYWMuYyBob3N0YXN5bi5jIGhvc3RjaGVjay5jIGhvc3RpcC5jIGhvc3RpcDQuYyBob3N0aXA2LmMgIFwKKyAgaG9zdHN5bi5jIGh0dHAuYyBodHRwMi5jIGh0dHBfY2h1bmtzLmMgaHR0cF9kaWdlc3QuYyBodHRwX25lZ290aWF0ZS5jICAgICAgIFwKKyAgaHR0cF9udGxtLmMgaHR0cF9wcm94eS5jIGlkbl93aW4zMi5jIGlmMmlwLmMgaW1hcC5jIGluZXRfbnRvcC5jIGluZXRfcHRvbi5jIFwKKyAga3JiNS5jIGxkYXAuYyBsbGlzdC5jIG1kNC5jIG1kNS5jIG1lbWRlYnVnLmMgbWltZS5jIG1wcmludGYuYyBtcXR0LmMgICAgICAgIFwKKyAgbXVsdGkuYyBuZXRyYy5jIG5vbi1hc2NpaS5jIG5vbmJsb2NrLmMgb3BlbmxkYXAuYyBwYXJzZWRhdGUuYyBwaW5ncG9uZy5jICAgIFwKKyAgcG9wMy5jIHByb2dyZXNzLmMgcHNsLmMgZG9oLmMgcmFuZC5jIHJlbmFtZS5jIHJ0c3AuYyBzZWN1cml0eS5jIHNlbGVjdC5jICAgIFwKKyAgc2VuZGYuYyBzZXRvcHQuYyBzaGEyNTYuYyBzaGFyZS5jIHNsaXN0LmMgc21iLmMgc210cC5jIHNvY2tldHBhaXIuYyBzb2Nrcy5jIFwKKyAgc29ja3NfZ3NzYXBpLmMgc29ja3Nfc3NwaS5jIHNwZWVkY2hlY2suYyBzcGxheS5jIHN0cmNhc2UuYyBzdHJkdXAuYyAgICAgICAgIFwKKyAgc3RyZXJyb3IuYyBzdHJ0b2suYyBzdHJ0b29mZnQuYyBzeXN0ZW1fd2luMzIuYyB0ZWxuZXQuYyB0ZnRwLmMgdGltZXZhbC5jICAgIFwKKyAgdHJhbnNmZXIuYyB1cmxhcGkuYyB2ZXJzaW9uLmMgd2Fybmxlc3MuYyB3aWxkY2FyZC5jIHg1MDlhc24xLmMgZHluYnVmLmMKKworTElCX0hGSUxFUyA9IGFsdHN2Yy5oIGFtaWdhb3MuaCBhcnBhX3RlbG5ldC5oIGFzeW4uaCBjb25uY2FjaGUuaCBjb25uZWN0LmggICAgXAorICBjb250ZW50X2VuY29kaW5nLmggY29va2llLmggY3VybF9hZGRyaW5mby5oIGN1cmxfYmFzZTY0LmggY3VybF9jdHlwZS5oICAgICAgXAorICBjdXJsX2Rlcy5oIGN1cmxfZW5kaWFuLmggY3VybF9mbm1hdGNoLmggY3VybF9nZXRfbGluZS5oIGN1cmxfZ2V0aG9zdG5hbWUuaCAgXAorICBjdXJsX2dzc2FwaS5oIGN1cmxfaG1hYy5oIGN1cmxfbGRhcC5oIGN1cmxfbWQ0LmggY3VybF9tZDUuaCBjdXJsX21lbW9yeS5oICAgXAorICBjdXJsX21lbXJjaHIuaCBjdXJsX211bHRpYnl0ZS5oIGN1cmxfbnRsbV9jb3JlLmggY3VybF9udGxtX3diLmggY3VybF9wYXRoLmggXAorICBjdXJsX3ByaW50Zi5oIGN1cmxfcmFuZ2UuaCBjdXJsX3J0bXAuaCBjdXJsX3Nhc2wuaCBjdXJsX3NlYy5oIGN1cmxfc2V0dXAuaCAgXAorICBjdXJsX3NldHVwX29uY2UuaCBjdXJsX3NoYTI1Ni5oIGN1cmxfc3NwaS5oIGN1cmxfdGhyZWFkcy5oIGN1cmx4LmggZGljdC5oICAgXAorICBkb3Rkb3QuaCBlYXN5aWYuaCBlc2NhcGUuaCBmaWxlLmggZmlsZWluZm8uaCBmb3JtZGF0YS5oIGZ0cC5oIHVybC5oICAgICAgICAgXAorICBmdHBsaXN0cGFyc2VyLmggZ2V0aW5mby5oIGdvcGhlci5oIGhhc2guaCBob3N0Y2hlY2suaCBob3N0aXAuaCBodHRwLmggICAgICAgXAorICBodHRwMi5oIGh0dHBfY2h1bmtzLmggaHR0cF9kaWdlc3QuaCBodHRwX25lZ290aWF0ZS5oIGh0dHBfbnRsbS5oICAgICAgICAgICAgXAorICBodHRwX3Byb3h5LmggaWYyaXAuaCBpbWFwLmggaW5ldF9udG9wLmggaW5ldF9wdG9uLmggbGxpc3QuaCBtZW1kZWJ1Zy5oICAgICAgXAorICBtaW1lLmggbXF0dC5oIG11bHRpaGFuZGxlLmggbXVsdGlpZi5oIG5ldHJjLmggbm9uLWFzY2lpLmggbm9uYmxvY2suaCAgICAgICAgXAorICBwYXJzZWRhdGUuaCBwaW5ncG9uZy5oIHBvcDMuaCBwcm9ncmVzcy5oIHBzbC5oIGRvaC5oIHF1aWMuaCByYW5kLmggcmVuYW1lLmggXAorICBydHNwLmggc2VsZWN0Lmggc2VuZGYuaCBzZXRvcHQuaCBzZXR1cC12bXMuaCBzaGFyZS5oIHNpZ3BpcGUuaCBzbGlzdC5oICAgICAgXAorICBzbWIuaCBzbXRwLmggc29ja2FkZHIuaCBzb2NrZXRwYWlyLmggc29ja3MuaCBzcGVlZGNoZWNrLmggc3BsYXkuaCBzdHJjYXNlLmggXAorICBzdHJkdXAuaCBzdHJlcnJvci5oIHN0cnRvay5oIHN0cnRvb2ZmdC5oIHN5c3RlbV93aW4zMi5oIHRlbG5ldC5oIHRmdHAuaCAgICAgXAorICB0aW1ldmFsLmggdHJhbnNmZXIuaCB1cmxhcGktaW50LmggdXJsZGF0YS5oIHdhcm5sZXNzLmggd2lsZGNhcmQuaCAgICAgICAgICAgXAorICB4NTA5YXNuMS5oIGR5bmJ1Zi5oCiAKIExJQl9SQ0ZJTEVTID0gbGliY3VybC5yYwogCi1DU09VUkNFUyA9ICQoTElCX0NGSUxFUykgJChMSUJfVkFVVEhfQ0ZJTEVTKSAkKExJQl9WVExTX0NGSUxFUykKLUhIRUFERVJTID0gJChMSUJfSEZJTEVTKSAkKExJQl9WQVVUSF9IRklMRVMpICQoTElCX1ZUTFNfSEZJTEVTKQorQ1NPVVJDRVMgPSAkKExJQl9DRklMRVMpICQoTElCX1ZBVVRIX0NGSUxFUykgJChMSUJfVlRMU19DRklMRVMpIFwKKyAgJChMSUJfVlFVSUNfQ0ZJTEVTKSAkKExJQl9WU1NIX0NGSUxFUykKK0hIRUFERVJTID0gJChMSUJfSEZJTEVTKSAkKExJQl9WQVVUSF9IRklMRVMpICQoTElCX1ZUTFNfSEZJTEVTKSBcCisgICQoTElCX1ZRVUlDX0hGSUxFUykgJChMSUJfVlNTSF9IRklMRVMpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2FsdHN2Yy5jCmluZGV4IDg1YTRlMDEuLmMyZWM0ODkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FsdHN2Yy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2FsdHN2Yy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJwYXJzZWRhdGUuaCIKICNpbmNsdWRlICJzZW5kZi5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgInJlbmFtZS5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTQ4LDE1ICs1MCwyMSBAQAogI2RlZmluZSBNQVhfQUxUU1ZDX0FMUE5MRU5TVFIgIjEwIgogI2RlZmluZSBNQVhfQUxUU1ZDX0FMUE5MRU4gMTAKIAorI2lmIGRlZmluZWQoVVNFX1FVSUNIRSkgJiYgIWRlZmluZWQoVU5JVFRFU1RTKQorI2RlZmluZSBIM1ZFUlNJT04gImgzLTI5IgorI2VsaWYgZGVmaW5lZChVU0VfTkdUQ1AyKSAmJiAhZGVmaW5lZChVTklUVEVTVFMpCisjZGVmaW5lIEgzVkVSU0lPTiAiaDMtMjkiCisjZWxzZQorI2RlZmluZSBIM1ZFUlNJT04gImgzIgorI2VuZGlmCisKIHN0YXRpYyBlbnVtIGFscG5pZCBhbHBuMmFscG5pZChjaGFyICpuYW1lKQogewogICBpZihzdHJjYXNlY29tcGFyZShuYW1lLCAiaDEiKSkKICAgICByZXR1cm4gQUxQTl9oMTsKICAgaWYoc3RyY2FzZWNvbXBhcmUobmFtZSwgImgyIikpCiAgICAgcmV0dXJuIEFMUE5faDI7Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJoMmMiKSkKLSAgICByZXR1cm4gQUxQTl9oMmM7Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJoMyIpKQorICBpZihzdHJjYXNlY29tcGFyZShuYW1lLCBIM1ZFUlNJT04pKQogICAgIHJldHVybiBBTFBOX2gzOwogICByZXR1cm4gQUxQTl9ub25lOyAvKiB1bmtub3duLCBwcm9iYWJseSBydWJiaXNoIGlucHV0ICovCiB9CkBAIC02OSwxMCArNzcsOCBAQAogICAgIHJldHVybiAiaDEiOwogICBjYXNlIEFMUE5faDI6CiAgICAgcmV0dXJuICJoMiI7Ci0gIGNhc2UgQUxQTl9oMmM6Ci0gICAgcmV0dXJuICJoMmMiOwogICBjYXNlIEFMUE5faDM6Ci0gICAgcmV0dXJuICJoMyI7CisgICAgcmV0dXJuIEgzVkVSU0lPTjsKICAgZGVmYXVsdDoKICAgICByZXR1cm4gIiI7IC8qIGJhZCAqLwogICB9CkBAIC04MSw4ICs4Nyw4IEBACiAKIHN0YXRpYyB2b2lkIGFsdHN2Y19mcmVlKHN0cnVjdCBhbHRzdmMgKmFzKQogewotICBmcmVlKGFzLT5zcmNob3N0KTsKLSAgZnJlZShhcy0+ZHN0aG9zdCk7CisgIGZyZWUoYXMtPnNyYy5ob3N0KTsKKyAgZnJlZShhcy0+ZHN0Lmhvc3QpOwogICBmcmVlKGFzKTsKIH0KIApAQCAtOTcsMTcgKzEwMywxNyBAQAogICBpZighYXMpCiAgICAgcmV0dXJuIE5VTEw7CiAKLSAgYXMtPnNyY2hvc3QgPSBzdHJkdXAoc3JjaG9zdCk7Ci0gIGlmKCFhcy0+c3JjaG9zdCkKKyAgYXMtPnNyYy5ob3N0ID0gc3RyZHVwKHNyY2hvc3QpOworICBpZighYXMtPnNyYy5ob3N0KQogICAgIGdvdG8gZXJyb3I7Ci0gIGFzLT5kc3Rob3N0ID0gc3RyZHVwKGRzdGhvc3QpOwotICBpZighYXMtPmRzdGhvc3QpCisgIGFzLT5kc3QuaG9zdCA9IHN0cmR1cChkc3Rob3N0KTsKKyAgaWYoIWFzLT5kc3QuaG9zdCkKICAgICBnb3RvIGVycm9yOwogCi0gIGFzLT5zcmNhbHBuaWQgPSBzcmNhbHBuaWQ7Ci0gIGFzLT5kc3RhbHBuaWQgPSBkc3RhbHBuaWQ7Ci0gIGFzLT5zcmNwb3J0ID0gY3VybHhfdWx0b3VzKHNyY3BvcnQpOwotICBhcy0+ZHN0cG9ydCA9IGN1cmx4X3VsdG91cyhkc3Rwb3J0KTsKKyAgYXMtPnNyYy5hbHBuaWQgPSBzcmNhbHBuaWQ7CisgIGFzLT5kc3QuYWxwbmlkID0gZHN0YWxwbmlkOworICBhcy0+c3JjLnBvcnQgPSBjdXJseF91bHRvdXMoc3JjcG9ydCk7CisgIGFzLT5kc3QucG9ydCA9IGN1cmx4X3VsdG91cyhkc3Rwb3J0KTsKIAogICByZXR1cm4gYXM7CiAgIGVycm9yOgpAQCAtMTU2LDE0ICsxNjIsMTMgQEAKICAgICAgICAgICAgICAgZGF0ZSwgJnBlcnNpc3QsICZwcmlvKTsKICAgaWYoOSA9PSByYykgewogICAgIHN0cnVjdCBhbHRzdmMgKmFzOwotICAgIHRpbWVfdCBleHBpcmVzID0gY3VybF9nZXRkYXRlKGRhdGUsIE5VTEwpOworICAgIHRpbWVfdCBleHBpcmVzID0gQ3VybF9nZXRkYXRlX2NhcHBlZChkYXRlKTsKICAgICBhcyA9IGFsdHN2Y19jcmVhdGUoc3JjaG9zdCwgZHN0aG9zdCwgc3JjYWxwbiwgZHN0YWxwbiwgc3JjcG9ydCwgZHN0cG9ydCk7CiAgICAgaWYoYXMpIHsKICAgICAgIGFzLT5leHBpcmVzID0gZXhwaXJlczsKICAgICAgIGFzLT5wcmlvID0gcHJpbzsKICAgICAgIGFzLT5wZXJzaXN0ID0gcGVyc2lzdCA/IDEgOiAwOwogICAgICAgQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCgmYXNpLT5saXN0LCBhc2ktPmxpc3QudGFpbCwgYXMsICZhcy0+bm9kZSk7Ci0gICAgICBhc2ktPm51bSsrOyAvKiBvbmUgbW9yZSBlbnRyeSAqLwogICAgIH0KICAgfQogCkBAIC0xODMsNyArMTg4LDE2IEBACiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBjaGFyICpsaW5lID0gTlVMTDsKLSAgRklMRSAqZnAgPSBmb3BlbihmaWxlLCBGT1BFTl9SRUFEVEVYVCk7CisgIEZJTEUgKmZwOworCisgIC8qIHdlIG5lZWQgYSBwcml2YXRlIGNvcHkgb2YgdGhlIGZpbGUgbmFtZSBzbyB0aGF0IHRoZSBhbHRzdmMgY2FjaGUgZmlsZQorICAgICBuYW1lIHN1cnZpdmVzIGFuIGVhc3kgaGFuZGxlIHJlc2V0ICovCisgIGZyZWUoYXNpLT5maWxlbmFtZSk7CisgIGFzaS0+ZmlsZW5hbWUgPSBzdHJkdXAoZmlsZSk7CisgIGlmKCFhc2ktPmZpbGVuYW1lKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIGZwID0gZm9wZW4oZmlsZSwgRk9QRU5fUkVBRFRFWFQpOwogICBpZihmcCkgewogICAgIGxpbmUgPSBtYWxsb2MoTUFYX0FMVFNWQ19MSU5FKTsKICAgICBpZighbGluZSkKQEAgLTIwNCw2ICsyMTgsNyBAQAogICByZXR1cm4gcmVzdWx0OwogCiAgIGZhaWw6CisgIEN1cmxfc2FmZWZyZWUoYXNpLT5maWxlbmFtZSk7CiAgIGZyZWUobGluZSk7CiAgIGZjbG9zZShmcCk7CiAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMjI2LDggKzI0MSw4IEBACiAgICAgICAgICAgIlwiJWQlMDJkJTAyZCAiCiAgICAgICAgICAgIiUwMmQ6JTAyZDolMDJkXCIgIgogICAgICAgICAgICIldSAlZFxuIiwKLSAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPnNyY2FscG5pZCksIGFzLT5zcmNob3N0LCBhcy0+c3JjcG9ydCwKLSAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPmRzdGFscG5pZCksIGFzLT5kc3Rob3N0LCBhcy0+ZHN0cG9ydCwKKyAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPnNyYy5hbHBuaWQpLCBhcy0+c3JjLmhvc3QsIGFzLT5zcmMucG9ydCwKKyAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPmRzdC5hbHBuaWQpLCBhcy0+ZHN0Lmhvc3QsIGFzLT5kc3QucG9ydCwKICAgICAgICAgICBzdGFtcC50bV95ZWFyICsgMTkwMCwgc3RhbXAudG1fbW9uICsgMSwgc3RhbXAudG1fbWRheSwKICAgICAgICAgICBzdGFtcC50bV9ob3VyLCBzdGFtcC50bV9taW4sIHN0YW1wLnRtX3NlYywKICAgICAgICAgICBhcy0+cGVyc2lzdCwgYXMtPnByaW8pOwpAQCAtMjUyLDcgKzI2Nyw3IEBACiAjaWZkZWYgVVNFX05HSFRUUDIKICAgICB8IENVUkxBTFRTVkNfSDIKICNlbmRpZgotI2lmZGVmIFVTRV9IVFRQMworI2lmZGVmIEVOQUJMRV9RVUlDCiAgICAgfCBDVVJMQUxUU1ZDX0gzCiAjZW5kaWYKICAgICA7CkBAIC0yOTcsNiArMzEyLDcgQEAKICAgICAgIG4gPSBlLT5uZXh0OwogICAgICAgYWx0c3ZjX2ZyZWUoYXMpOwogICAgIH0KKyAgICBmcmVlKGFsdHN2Yy0+ZmlsZW5hbWUpOwogICAgIGZyZWUoYWx0c3ZjKTsKICAgfQogfQpAQCAtMzA0LDM0ICszMjAsNTcgQEAKIC8qCiAgKiBDdXJsX2FsdHN2Y19zYXZlKCkgd3JpdGVzIHRoZSBhbHRzdmMgY2FjaGUgdG8gYSBmaWxlLgogICovCi1DVVJMY29kZSBDdXJsX2FsdHN2Y19zYXZlKHN0cnVjdCBhbHRzdmNpbmZvICphbHRzdmMsIGNvbnN0IGNoYXIgKmZpbGUpCitDVVJMY29kZSBDdXJsX2FsdHN2Y19zYXZlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbHRzdmNpbmZvICphbHRzdmMsIGNvbnN0IGNoYXIgKmZpbGUpCiB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm47CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBGSUxFICpvdXQ7CisgIGNoYXIgKnRlbXBzdG9yZTsKKyAgdW5zaWduZWQgY2hhciByYW5kc3VmZml4WzldOwogCiAgIGlmKCFhbHRzdmMpCiAgICAgLyogbm8gY2FjaGUgYWN0aXZhdGVkICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCi0gIGlmKChhbHRzdmMtPmZsYWdzICYgQ1VSTEFMVFNWQ19SRUFET05MWUZJTEUpIHx8ICFmaWxlWzBdKQotICAgIC8qIG1hcmtlZCBhcyByZWFkLW9ubHkgb3IgemVybyBsZW5ndGggZmlsZSBuYW1lICovCisgIC8qIGlmIG5vdCBuZXcgbmFtZSBpcyBnaXZlbiwgdXNlIHRoZSBvbmUgd2Ugc3RvcmVkIGZyb20gdGhlIGxvYWQgKi8KKyAgaWYoIWZpbGUgJiYgYWx0c3ZjLT5maWxlbmFtZSkKKyAgICBmaWxlID0gYWx0c3ZjLT5maWxlbmFtZTsKKworICBpZigoYWx0c3ZjLT5mbGFncyAmIENVUkxBTFRTVkNfUkVBRE9OTFlGSUxFKSB8fCAhZmlsZSB8fCAhZmlsZVswXSkKKyAgICAvKiBtYXJrZWQgYXMgcmVhZC1vbmx5LCBubyBmaWxlIG9yIHplcm8gbGVuZ3RoIGZpbGUgbmFtZSAqLwogICAgIHJldHVybiBDVVJMRV9PSzsKLSAgb3V0ID0gZm9wZW4oZmlsZSwgRk9QRU5fV1JJVEVURVhUKTsKKworICBpZihDdXJsX3JhbmRfaGV4KGRhdGEsIHJhbmRzdWZmaXgsIHNpemVvZihyYW5kc3VmZml4KSkpCisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworCisgIHRlbXBzdG9yZSA9IGFwcmludGYoIiVzLiVzLnRtcCIsIGZpbGUsIHJhbmRzdWZmaXgpOworICBpZighdGVtcHN0b3JlKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIG91dCA9IGZvcGVuKHRlbXBzdG9yZSwgRk9QRU5fV1JJVEVURVhUKTsKICAgaWYoIW91dCkKLSAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7Ci0gIGZwdXRzKCIjIFlvdXIgYWx0LXN2YyBjYWNoZS4gaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9hbHQtc3ZjLmh0bWxcbiIKLSAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLlxuIiwKLSAgICAgICAgb3V0KTsKLSAgZm9yKGUgPSBhbHRzdmMtPmxpc3QuaGVhZDsgZTsgZSA9IG4pIHsKLSAgICBzdHJ1Y3QgYWx0c3ZjICphcyA9IGUtPnB0cjsKLSAgICBuID0gZS0+bmV4dDsKLSAgICByZXN1bHQgPSBhbHRzdmNfb3V0KGFzLCBvdXQpOworICAgIHJlc3VsdCA9IENVUkxFX1dSSVRFX0VSUk9SOworICBlbHNlIHsKKyAgICBmcHV0cygiIyBZb3VyIGFsdC1zdmMgY2FjaGUuIGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvYWx0LXN2Yy5odG1sXG4iCisgICAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLlxuIiwKKyAgICAgICAgICBvdXQpOworICAgIGZvcihlID0gYWx0c3ZjLT5saXN0LmhlYWQ7IGU7IGUgPSBuKSB7CisgICAgICBzdHJ1Y3QgYWx0c3ZjICphcyA9IGUtPnB0cjsKKyAgICAgIG4gPSBlLT5uZXh0OworICAgICAgcmVzdWx0ID0gYWx0c3ZjX291dChhcywgb3V0KTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZjbG9zZShvdXQpOworICAgIGlmKCFyZXN1bHQgJiYgQ3VybF9yZW5hbWUodGVtcHN0b3JlLCBmaWxlKSkKKyAgICAgIHJlc3VsdCA9IENVUkxFX1dSSVRFX0VSUk9SOworCiAgICAgaWYocmVzdWx0KQotICAgICAgYnJlYWs7CisgICAgICB1bmxpbmsodGVtcHN0b3JlKTsKICAgfQotICBmY2xvc2Uob3V0KTsKKyAgZnJlZSh0ZW1wc3RvcmUpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zNDMsMTUgKzM4MiwxNSBAQAogICB3aGlsZSgqcCAmJiBJU0JMQU5LKCpwKSkKICAgICBwKys7CiAgIHByb3RvcCA9IHA7Ci0gIHdoaWxlKCpwICYmIElTQUxOVU0oKnApKQorICB3aGlsZSgqcCAmJiAhSVNCTEFOSygqcCkgJiYgKCpwICE9ICc7JykgJiYgKCpwICE9ICc9JykpCiAgICAgcCsrOwogICBsZW4gPSBwIC0gcHJvdG9wOworICAqcHRyID0gcDsKIAogICBpZighbGVuIHx8IChsZW4gPj0gYnVmbGVuKSkKICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwogICBtZW1jcHkoYWxwbmJ1ZiwgcHJvdG9wLCBsZW4pOwogICBhbHBuYnVmW2xlbl0gPSAwOwotICAqcHRyID0gcDsKICAgcmV0dXJuIENVUkxFX09LOwogfQogCkBAIC0zNjUsMTIgKzQwNCwxMSBAQAogICBmb3IoZSA9IGFzaS0+bGlzdC5oZWFkOyBlOyBlID0gbikgewogICAgIHN0cnVjdCBhbHRzdmMgKmFzID0gZS0+cHRyOwogICAgIG4gPSBlLT5uZXh0OwotICAgIGlmKChzcmNhbHBuaWQgPT0gYXMtPnNyY2FscG5pZCkgJiYKLSAgICAgICAoc3JjcG9ydCA9PSBhcy0+c3JjcG9ydCkgJiYKLSAgICAgICBzdHJjYXNlY29tcGFyZShzcmNob3N0LCBhcy0+c3JjaG9zdCkpIHsKKyAgICBpZigoc3JjYWxwbmlkID09IGFzLT5zcmMuYWxwbmlkKSAmJgorICAgICAgIChzcmNwb3J0ID09IGFzLT5zcmMucG9ydCkgJiYKKyAgICAgICBzdHJjYXNlY29tcGFyZShzcmNob3N0LCBhcy0+c3JjLmhvc3QpKSB7CiAgICAgICBDdXJsX2xsaXN0X3JlbW92ZSgmYXNpLT5saXN0LCBlLCBOVUxMKTsKICAgICAgIGFsdHN2Y19mcmVlKGFzKTsKLSAgICAgIGFzaS0+bnVtLS07CiAgICAgfQogICB9CiB9CkBAIC0zOTEsMTIgKzQyOSwxOCBAQAogI2RlZmluZSB0aW1lKHgpIGRlYnVndGltZSh4KQogI2VuZGlmCiAKKyNkZWZpbmUgSVNORVdMSU5FKHgpICgoKHgpID09ICdcbicpIHx8ICh4KSA9PSAnXHInKQorCiAvKgogICogQ3VybF9hbHRzdmNfcGFyc2UoKSB0YWtlcyBhbiBpbmNvbWluZyBhbHQtc3ZjIHJlc3BvbnNlIGhlYWRlciBhbmQgc3RvcmVzCiAgKiB0aGUgZGF0YSBjb3JyZWN0bHkgaW4gdGhlIGNhY2hlLgogICoKICAqICd2YWx1ZScgcG9pbnRzIHRvIHRoZSBoZWFkZXIgKnZhbHVlKi4gVGhhdCdzIGNvbnRlbnRzIHRvIHRoZSByaWdodCBvZiB0aGUKICAqIGhlYWRlciBuYW1lLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIHJlamVjdHMgaW52YWxpZCBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGFuIGVycm9yLgorICogSW52YWxpZCBob3N0IG5hbWUsIHBvcnQgbnVtYmVyIHdpbGwgcmVzdWx0IGluIHRoZSBzcGVjaWZpYyBhbHRlcm5hdGl2ZQorICogYmVpbmcgcmVqZWN0ZWQuIFVua25vd24gcHJvdG9jb2xzIGFyZSBza2lwcGVkLgogICovCiBDVVJMY29kZSBDdXJsX2FsdHN2Y19wYXJzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2Y2luZm8gKmFzaSwgY29uc3QgY2hhciAqdmFsdWUsCkBAIC00MTAsMTIgKzQ1NCwxMSBAQAogICBjaGFyIGFscG5idWZbTUFYX0FMVFNWQ19BTFBOTEVOXSA9ICIiOwogICBzdHJ1Y3QgYWx0c3ZjICphczsKICAgdW5zaWduZWQgc2hvcnQgZHN0cG9ydCA9IHNyY3BvcnQ7IC8qIHRoZSBzYW1lIGJ5IGRlZmF1bHQgKi8KLSAgY29uc3QgY2hhciAqc2VtaXA7Ci0gIHRpbWVfdCBtYXhhZ2UgPSAyNCAqIDM2MDA7IC8qIGRlZmF1bHQgaXMgMjQgaG91cnMgKi8KLSAgYm9vbCBwZXJzaXN0ID0gRkFMU0U7CiAgIENVUkxjb2RlIHJlc3VsdCA9IGdldGFsbnVtKCZwLCBhbHBuYnVmLCBzaXplb2YoYWxwbmJ1ZikpOwotICBpZihyZXN1bHQpCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgaWYocmVzdWx0KSB7CisgICAgaW5mb2YoZGF0YSwgIkV4Y2Vzc2l2ZSBhbHQtc3ZjIGhlYWRlciwgaWdub3JpbmcuLi5cbiIpOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQogCiAgIERFQlVHQVNTRVJUKGFzaSk7CiAKQEAgLTQyNyw0NyArNDcwLDIwIEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogICB9CiAKLSAgLyogVGhlICdtYScgYW5kICdwZXJzaXN0JyBmbGFncyBhcmUgYW5ub3lpbmdseSBtZWFudCBmb3IgYWxsIGFsdGVybmF0aXZlcwotICAgICBidXQgYXJlIHNldCBhZnRlciB0aGUgbGlzdCBvbiB0aGUgbGluZS4gU2NhbiBmb3IgdGhlIHNlbWljb2xvbnMgYW5kIGdldAotICAgICB0aG9zZSBmaWVsZHMgZmlyc3QhICovCi0gIHNlbWlwID0gcDsKLSAgZG8gewotICAgIHNlbWlwID0gc3RyY2hyKHNlbWlwLCAnOycpOwotICAgIGlmKHNlbWlwKSB7Ci0gICAgICBjaGFyIG9wdGlvblszMl07Ci0gICAgICB1bnNpZ25lZCBsb25nIG51bTsKLSAgICAgIGNoYXIgKmVuZF9wdHI7Ci0gICAgICBzZW1pcCsrOyAvKiBwYXNzIHRoZSBzZW1pY29sb24gKi8KLSAgICAgIHJlc3VsdCA9IGdldGFsbnVtKCZzZW1pcCwgb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7Ci0gICAgICBpZihyZXN1bHQpCi0gICAgICAgIGJyZWFrOwotICAgICAgd2hpbGUoKnNlbWlwICYmIElTQkxBTksoKnNlbWlwKSkKLSAgICAgICAgc2VtaXArKzsKLSAgICAgIGlmKCpzZW1pcCAhPSAnPScpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgc2VtaXArKzsKLSAgICAgIG51bSA9IHN0cnRvdWwoc2VtaXAsICZlbmRfcHRyLCAxMCk7Ci0gICAgICBpZihudW0gPCBVTE9OR19NQVgpIHsKLSAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoIm1hIiwgb3B0aW9uKSkKLSAgICAgICAgICBtYXhhZ2UgPSBudW07Ci0gICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoInBlcnNpc3QiLCBvcHRpb24pICYmIChudW0gPT0gMSkpCi0gICAgICAgICAgcGVyc2lzdCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBzZW1pcCA9IGVuZF9wdHI7Ci0gICAgfQotICB9IHdoaWxlKHNlbWlwKTsKLQogICBkbyB7CiAgICAgaWYoKnAgPT0gJz0nKSB7CiAgICAgICAvKiBbcHJvdG9jb2xdPSJbaG9zdF1bOnBvcnRdIiAqLwogICAgICAgZHN0YWxwbmlkID0gYWxwbjJhbHBuaWQoYWxwbmJ1Zik7Ci0gICAgICBpZighZHN0YWxwbmlkKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJVbmtub3duIGFsdC1zdmMgcHJvdG9jb2wgXCIlc1wiLCBpZ25vcmluZy4uLlxuIiwgYWxwbmJ1Zik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICAgIH0KICAgICAgIHArKzsKICAgICAgIGlmKCpwID09ICdcIicpIHsKLSAgICAgICAgY29uc3QgY2hhciAqZHN0aG9zdDsKKyAgICAgICAgY29uc3QgY2hhciAqZHN0aG9zdCA9ICIiOworICAgICAgICBjb25zdCBjaGFyICp2YWx1ZV9wdHI7CisgICAgICAgIGNoYXIgb3B0aW9uWzMyXTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBudW07CisgICAgICAgIGNoYXIgKmVuZF9wdHI7CisgICAgICAgIGJvb2wgcXVvdGVkID0gRkFMU0U7CisgICAgICAgIHRpbWVfdCBtYXhhZ2UgPSAyNCAqIDM2MDA7IC8qIGRlZmF1bHQgaXMgMjQgaG91cnMgKi8KKyAgICAgICAgYm9vbCBwZXJzaXN0ID0gRkFMU0U7CiAgICAgICAgIHArKzsKICAgICAgICAgaWYoKnAgIT0gJzonKSB7CiAgICAgICAgICAgLyogaG9zdCBuYW1lIHN0YXJ0cyBoZXJlICovCkBAIC00NzUsMTEgKzQ5MSwxNSBAQAogICAgICAgICAgIHdoaWxlKCpwICYmIChJU0FMTlVNKCpwKSB8fCAoKnAgPT0gJy4nKSB8fCAoKnAgPT0gJy0nKSkpCiAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgbGVuID0gcCAtIGhvc3RwOwotICAgICAgICAgIGlmKCFsZW4gfHwgKGxlbiA+PSBNQVhfQUxUU1ZDX0hPU1RMRU4pKQotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKLSAgICAgICAgICBtZW1jcHkobmFtZWJ1ZiwgaG9zdHAsIGxlbik7Ci0gICAgICAgICAgbmFtZWJ1ZltsZW5dID0gMDsKLSAgICAgICAgICBkc3Rob3N0ID0gbmFtZWJ1ZjsKKyAgICAgICAgICBpZighbGVuIHx8IChsZW4gPj0gTUFYX0FMVFNWQ19IT1NUTEVOKSkgeworICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkV4Y2Vzc2l2ZSBhbHQtc3ZjIGhvc3QgbmFtZSwgaWdub3JpbmcuLi5cbiIpOworICAgICAgICAgICAgZHN0YWxwbmlkID0gQUxQTl9ub25lOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1lbWNweShuYW1lYnVmLCBob3N0cCwgbGVuKTsKKyAgICAgICAgICAgIG5hbWVidWZbbGVuXSA9IDA7CisgICAgICAgICAgICBkc3Rob3N0ID0gbmFtZWJ1ZjsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgLyogbm8gZGVzdGluYXRpb24gbmFtZSwgdXNlIHNvdXJjZSBob3N0ICovCkBAIC00ODcsMzEgKzUwNyw4NSBAQAogICAgICAgICB9CiAgICAgICAgIGlmKCpwID09ICc6JykgewogICAgICAgICAgIC8qIGEgcG9ydCBudW1iZXIgKi8KLSAgICAgICAgICBjaGFyICplbmRfcHRyOwogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydCA9IHN0cnRvdWwoKytwLCAmZW5kX3B0ciwgMTApOwogICAgICAgICAgIGlmKHBvcnQgPiBVU0hSVF9NQVggfHwgZW5kX3B0ciA9PSBwIHx8ICplbmRfcHRyICE9ICdcIicpIHsKICAgICAgICAgICAgIGluZm9mKGRhdGEsICJVbmtub3duIGFsdC1zdmMgcG9ydCBudW1iZXIsIGlnbm9yaW5nLi4uXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICAgIGRzdGFscG5pZCA9IEFMUE5fbm9uZTsKICAgICAgICAgICB9CiAgICAgICAgICAgcCA9IGVuZF9wdHI7CiAgICAgICAgICAgZHN0cG9ydCA9IGN1cmx4X3VsdG91cyhwb3J0KTsKICAgICAgICAgfQogICAgICAgICBpZigqcCsrICE9ICdcIicpCi0gICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKLSAgICAgICAgYXMgPSBhbHRzdmNfY3JlYXRlaWQoc3JjaG9zdCwgZHN0aG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjYWxwbmlkLCBkc3RhbHBuaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3BvcnQsIGRzdHBvcnQpOwotICAgICAgICBpZihhcykgewotICAgICAgICAgIC8qIFRoZSBleHBpcmVzIHRpbWUgYWxzbyBuZWVkcyB0byB0YWtlIHRoZSBBZ2U6IHZhbHVlIChpZiBhbnkpIGludG8KLSAgICAgICAgICAgICBhY2NvdW50LiBbU2VlIFJGQyA3ODM4IHNlY3Rpb24gMy4xXSAqLwotICAgICAgICAgIGFzLT5leHBpcmVzID0gbWF4YWdlICsgdGltZShOVUxMKTsKLSAgICAgICAgICBhcy0+cGVyc2lzdCA9IHBlcnNpc3Q7Ci0gICAgICAgICAgQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCgmYXNpLT5saXN0LCBhc2ktPmxpc3QudGFpbCwgYXMsICZhcy0+bm9kZSk7Ci0gICAgICAgICAgYXNpLT5udW0rKzsgLyogb25lIG1vcmUgZW50cnkgKi8KLSAgICAgICAgICBpbmZvZihkYXRhLCAiQWRkZWQgYWx0LXN2YzogJXM6JWQgb3ZlciAlc1xuIiwgZHN0aG9zdCwgZHN0cG9ydCwKLSAgICAgICAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoZHN0YWxwbmlkKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIEhhbmRsZSB0aGUgb3B0aW9uYWwgJ21hJyBhbmQgJ3BlcnNpc3QnIGZsYWdzLiBVbmtub3duIGZsYWdzCisgICAgICAgICAgIGFyZSBza2lwcGVkLiAqLworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICB3aGlsZShJU0JMQU5LKCpwKSkKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZigqcCAhPSAnOycpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBwKys7IC8qIHBhc3MgdGhlIHNlbWljb2xvbiAqLworICAgICAgICAgIGlmKCEqcCB8fCBJU05FV0xJTkUoKnApKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgcmVzdWx0ID0gZ2V0YWxudW0oJnAsIG9wdGlvbiwgc2l6ZW9mKG9wdGlvbikpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgLyogc2tpcCBvcHRpb24gaWYgbmFtZSBpcyB0b28gbG9uZyAqLworICAgICAgICAgICAgb3B0aW9uWzBdID0gJ1wwJzsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUoKnAgJiYgSVNCTEFOSygqcCkpCisgICAgICAgICAgICBwKys7CisgICAgICAgICAgaWYoKnAgIT0gJz0nKQorICAgICAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgICAgIHArKzsKKyAgICAgICAgICB3aGlsZSgqcCAmJiBJU0JMQU5LKCpwKSkKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZighKnApCisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgICAgaWYoKnAgPT0gJ1wiJykgeworICAgICAgICAgICAgLyogcXVvdGVkIHZhbHVlICovCisgICAgICAgICAgICBwKys7CisgICAgICAgICAgICBxdW90ZWQgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICB2YWx1ZV9wdHIgPSBwOworICAgICAgICAgIGlmKHF1b3RlZCkgeworICAgICAgICAgICAgd2hpbGUoKnAgJiYgKnAgIT0gJ1wiJykKKyAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgaWYoISpwKyspCisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB3aGlsZSgqcCAmJiAhSVNCTEFOSygqcCkgJiYgKnAhPSAnOycgJiYgKnAgIT0gJywnKQorICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgfQorICAgICAgICAgIG51bSA9IHN0cnRvdWwodmFsdWVfcHRyLCAmZW5kX3B0ciwgMTApOworICAgICAgICAgIGlmKChlbmRfcHRyICE9IHZhbHVlX3B0cikgJiYgKG51bSA8IFVMT05HX01BWCkpIHsKKyAgICAgICAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKCJtYSIsIG9wdGlvbikpCisgICAgICAgICAgICAgIG1heGFnZSA9IG51bTsKKyAgICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoInBlcnNpc3QiLCBvcHRpb24pICYmIChudW0gPT0gMSkpCisgICAgICAgICAgICAgIHBlcnNpc3QgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihkc3RhbHBuaWQpIHsKKyAgICAgICAgICBhcyA9IGFsdHN2Y19jcmVhdGVpZChzcmNob3N0LCBkc3Rob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2FscG5pZCwgZHN0YWxwbmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3BvcnQsIGRzdHBvcnQpOworICAgICAgICAgIGlmKGFzKSB7CisgICAgICAgICAgICAvKiBUaGUgZXhwaXJlcyB0aW1lIGFsc28gbmVlZHMgdG8gdGFrZSB0aGUgQWdlOiB2YWx1ZSAoaWYgYW55KSBpbnRvCisgICAgICAgICAgICAgICBhY2NvdW50LiBbU2VlIFJGQyA3ODM4IHNlY3Rpb24gMy4xXSAqLworICAgICAgICAgICAgYXMtPmV4cGlyZXMgPSBtYXhhZ2UgKyB0aW1lKE5VTEwpOworICAgICAgICAgICAgYXMtPnBlcnNpc3QgPSBwZXJzaXN0OworICAgICAgICAgICAgQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCgmYXNpLT5saXN0LCBhc2ktPmxpc3QudGFpbCwgYXMsICZhcy0+bm9kZSk7CisgICAgICAgICAgICBpbmZvZihkYXRhLCAiQWRkZWQgYWx0LXN2YzogJXM6JWQgb3ZlciAlc1xuIiwgZHN0aG9zdCwgZHN0cG9ydCwKKyAgICAgICAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihkc3RhbHBuaWQpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIlVua25vd24gYWx0LXN2YyBwcm90b2NvbCBcIiVzXCIsIHNraXBwaW5nLi4uXG4iLAorICAgICAgICAgICAgICAgIGFscG5idWYpOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOwogICAgICAgLyogYWZ0ZXIgdGhlIGRvdWJsZSBxdW90ZSB0aGVyZSBjYW4gYmUgYSBjb21tYSBpZiB0aGVyZSdzIGFub3RoZXIKICAgICAgICAgIHN0cmluZyBvciBhIHNlbWljb2xvbiBpZiBubyBtb3JlICovCiAgICAgICBpZigqcCA9PSAnLCcpIHsKQEAgLTUxOSwxMSArNTkzLDExIEBACiAgICAgICAgIHArKzsKICAgICAgICAgcmVzdWx0ID0gZ2V0YWxudW0oJnAsIGFscG5idWYsIHNpemVvZihhbHBuYnVmKSk7CiAgICAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgICAvKiBmYWlsZWQgdG8gcGFyc2UsIGJ1dCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCBhdCBsZWFzdCBvbmUgaG9zdCB3ZQotICAgICAgICAgICAgIHJldHVybiBPSyAqLwotICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CiAgIH0gd2hpbGUoKnAgJiYgKCpwICE9ICc7JykgJiYgKCpwICE9ICdcbicpICYmICgqcCAhPSAnXHInKSk7CiAKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtNTM1LDMxICs2MDksMzEgQEAKIGJvb2wgQ3VybF9hbHRzdmNfbG9va3VwKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFscG5pZCBzcmNhbHBuaWQsIGNvbnN0IGNoYXIgKnNyY2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gYWxwbmlkICpkc3RhbHBuaWQsIGNvbnN0IGNoYXIgKipkc3Rob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkc3Rwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2YyAqKmRzdGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHZlcnNpb25zKSAvKiBvbmUgb3IgbW9yZSBiaXRzICovCiB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm47CiAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOwogICBERUJVR0FTU0VSVChhc2kpOwogICBERUJVR0FTU0VSVChzcmNob3N0KTsKLSAgREVCVUdBU1NFUlQoZHN0aG9zdCk7CisgIERFQlVHQVNTRVJUKGRzdGVudHJ5KTsKIAogICBmb3IoZSA9IGFzaS0+bGlzdC5oZWFkOyBlOyBlID0gbikgewogICAgIHN0cnVjdCBhbHRzdmMgKmFzID0gZS0+cHRyOwogICAgIG4gPSBlLT5uZXh0OwogICAgIGlmKGFzLT5leHBpcmVzIDwgbm93KSB7CiAgICAgICAvKiBhbiBleHBpcmVkIGVudHJ5LCByZW1vdmUgKi8KKyAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKCZhc2ktPmxpc3QsIGUsIE5VTEwpOwogICAgICAgYWx0c3ZjX2ZyZWUoYXMpOwogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGlmKChhcy0+c3JjYWxwbmlkID09IHNyY2FscG5pZCkgJiYKLSAgICAgICBzdHJjYXNlY29tcGFyZShhcy0+c3JjaG9zdCwgc3JjaG9zdCkgJiYKLSAgICAgICBhcy0+c3JjcG9ydCA9PSBzcmNwb3J0KSB7CisgICAgaWYoKGFzLT5zcmMuYWxwbmlkID09IHNyY2FscG5pZCkgJiYKKyAgICAgICBzdHJjYXNlY29tcGFyZShhcy0+c3JjLmhvc3QsIHNyY2hvc3QpICYmCisgICAgICAgKGFzLT5zcmMucG9ydCA9PSBzcmNwb3J0KSAmJgorICAgICAgICh2ZXJzaW9ucyAmIGFzLT5kc3QuYWxwbmlkKSkgewogICAgICAgLyogbWF0Y2ggKi8KLSAgICAgICpkc3RhbHBuaWQgPSBhcy0+ZHN0YWxwbmlkOwotICAgICAgKmRzdGhvc3QgPSBhcy0+ZHN0aG9zdDsKLSAgICAgICpkc3Rwb3J0ID0gYXMtPmRzdHBvcnQ7CisgICAgICAqZHN0ZW50cnkgPSBhczsKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYWx0c3ZjLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaAppbmRleCBlZWZiNDViLi41NzhhNGZiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOCwyMCArMjgsMjEgQEAKICNpbmNsdWRlICJsbGlzdC5oIgogCiBlbnVtIGFscG5pZCB7Ci0gIEFMUE5fbm9uZSwKLSAgQUxQTl9oMSwKLSAgQUxQTl9oMiwKLSAgQUxQTl9oMmMsCi0gIEFMUE5faDMKKyAgQUxQTl9ub25lID0gMCwKKyAgQUxQTl9oMSA9IENVUkxBTFRTVkNfSDEsCisgIEFMUE5faDIgPSBDVVJMQUxUU1ZDX0gyLAorICBBTFBOX2gzID0gQ1VSTEFMVFNWQ19IMworfTsKKworc3RydWN0IGFsdGhvc3QgeworICBjaGFyICpob3N0OworICB1bnNpZ25lZCBzaG9ydCBwb3J0OworICBlbnVtIGFscG5pZCBhbHBuaWQ7CiB9OwogCiBzdHJ1Y3QgYWx0c3ZjIHsKLSAgY2hhciAqc3JjaG9zdDsKLSAgY2hhciAqZHN0aG9zdDsKLSAgdW5zaWduZWQgc2hvcnQgc3JjcG9ydDsKLSAgdW5zaWduZWQgc2hvcnQgZHN0cG9ydDsKLSAgZW51bSBhbHBuaWQgc3JjYWxwbmlkOwotICBlbnVtIGFscG5pZCBkc3RhbHBuaWQ7CisgIHN0cnVjdCBhbHRob3N0IHNyYzsKKyAgc3RydWN0IGFsdGhvc3QgZHN0OwogICB0aW1lX3QgZXhwaXJlczsKICAgYm9vbCBwZXJzaXN0OwogICBpbnQgcHJpbzsKQEAgLTUxLDE0ICs1MiwxNCBAQAogc3RydWN0IGFsdHN2Y2luZm8gewogICBjaGFyICpmaWxlbmFtZTsKICAgc3RydWN0IGN1cmxfbGxpc3QgbGlzdDsgLyogbGlzdCBvZiBlbnRyaWVzICovCi0gIHNpemVfdCBudW07IC8qIG51bWJlciBvZiBhbHQtc3ZjIGVudHJpZXMgKi8KICAgbG9uZyBmbGFnczsgLyogdGhlIHB1YmxpY2x5IHNldCBiaXRtYXNrICovCiB9OwogCiBjb25zdCBjaGFyICpDdXJsX2FscG5pZDJzdHIoZW51bSBhbHBuaWQgaWQpOwogc3RydWN0IGFsdHN2Y2luZm8gKkN1cmxfYWx0c3ZjX2luaXQodm9pZCk7CiBDVVJMY29kZSBDdXJsX2FsdHN2Y19sb2FkKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksIGNvbnN0IGNoYXIgKmZpbGUpOwotQ1VSTGNvZGUgQ3VybF9hbHRzdmNfc2F2ZShzdHJ1Y3QgYWx0c3ZjaW5mbyAqYXNpLCBjb25zdCBjaGFyICpmaWxlKTsKK0NVUkxjb2RlIEN1cmxfYWx0c3ZjX3NhdmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2Y2luZm8gKmFzaSwgY29uc3QgY2hhciAqZmlsZSk7CiBDVVJMY29kZSBDdXJsX2FsdHN2Y19jdHJsKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksIGNvbnN0IGxvbmcgY3RybCk7CiB2b2lkIEN1cmxfYWx0c3ZjX2NsZWFudXAoc3RydWN0IGFsdHN2Y2luZm8gKmFsdHN2Yyk7CiBDVVJMY29kZSBDdXJsX2FsdHN2Y19wYXJzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLApAQCAtNjgsMTAgKzY5LDEwIEBACiBib29sIEN1cmxfYWx0c3ZjX2xvb2t1cChzdHJ1Y3QgYWx0c3ZjaW5mbyAqYXNpLAogICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBhbHBuaWQgc3JjYWxwbmlkLCBjb25zdCBjaGFyICpzcmNob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFscG5pZCAqZHN0YWxwbmlkLCBjb25zdCBjaGFyICoqZHN0aG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZHN0cG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWx0c3ZjICoqZHN0ZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgdmVyc2lvbnMpOyAvKiBDVVJMQUxUU1ZDX0gqIGJpdHMgKi8KICNlbHNlCiAvKiBkaXNhYmxlZCAqLwotI2RlZmluZSBDdXJsX2FsdHN2Y19zYXZlKGEsYikKKyNkZWZpbmUgQ3VybF9hbHRzdmNfc2F2ZShhLGIsYykKICNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfSFRUUCB8fCBVU0VfQUxUU1ZDICovCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfQUxUU1ZDX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tYXJlcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi1hcmVzLmMKaW5kZXggODU2MWE0Ny4uYmE1MTYwYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi1hcmVzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi1hcmVzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTg3LDcgKzg3LDggQEAKIAogc3RydWN0IFJlc29sdmVyUmVzdWx0cyB7CiAgIGludCBudW1fcGVuZGluZzsgLyogbnVtYmVyIG9mIGFyZXNfZ2V0aG9zdGJ5bmFtZSgpIHJlcXVlc3RzICovCi0gIEN1cmxfYWRkcmluZm8gKnRlbXBfYWk7IC8qIGludGVybWVkaWFyeSByZXN1bHQgd2hpbGUgZmV0Y2hpbmcgYy1hcmVzIHBhcnRzICovCisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICp0ZW1wX2FpOyAvKiBpbnRlcm1lZGlhcnkgcmVzdWx0IHdoaWxlIGZldGNoaW5nIGMtYXJlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgKi8KICAgaW50IGxhc3Rfc3RhdHVzOwogICBzdHJ1Y3QgY3VybHRpbWUgaGFwcHlfZXllYmFsbHNfZG5zX3RpbWU7IC8qIHdoZW4gdGhpcyB0aW1lciBzdGFydGVkLCBvciAwICovCiB9OwpAQCAtMjUzLDE2ICsyNTQsMTQgQEAKICAqLwogCiBpbnQgQ3VybF9yZXNvbHZlcl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLQorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKICAgc3RydWN0IHRpbWV2YWwgbWF4dGltZTsKICAgc3RydWN0IHRpbWV2YWwgdGltZWJ1ZjsKICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQ7CiAgIGxvbmcgbWlsbGk7CiAgIGludCBtYXggPSBhcmVzX2dldHNvY2soKGFyZXNfY2hhbm5lbCljb25uLT5kYXRhLT5zdGF0ZS5yZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlc19zb2NrZXRfdCAqKXNvY2tzLCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZXNfc29ja2V0X3QgKilzb2NrcywgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRSk7CiAKICAgbWF4dGltZS50dl9zZWMgPSBDVVJMX1RJTUVPVVRfUkVTT0xWRTsKICAgbWF4dGltZS50dl91c2VjID0gMDsKQEAgLTI4Nyw3ICsyODYsNyBAQAogICogcmV0dXJuIG51bWJlciBvZiBzb2NrZXRzIGl0IHdvcmtlZCBvbgogICovCiAKLXN0YXRpYyBpbnQgd2FpdHBlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgdGltZW91dF9tcykKK3N0YXRpYyBpbnQgd2FpdHBlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCB0aW1lZGlmZl90IHRpbWVvdXRfbXMpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBpbnQgbmZkczsKQEAgLTM1NCw4ICszNTMsOCBAQAogICAgIGNvbm4tPmFzeW5jLm9zX3NwZWNpZmljOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAotICBpZihkbnMpCi0gICAgKmRucyA9IE5VTEw7CisgIERFQlVHQVNTRVJUKGRucyk7CisgICpkbnMgPSBOVUxMOwogCiAgIHdhaXRwZXJmb3JtKGNvbm4sIDApOwogCkBAIC0zODMsMTkgKzM4MiwxOCBAQAogICB9CiAKICAgaWYocmVzICYmICFyZXMtPm51bV9wZW5kaW5nKSB7Ci0gICAgaWYoZG5zKSB7Ci0gICAgICAodm9pZClDdXJsX2FkZHJpbmZvX2NhbGxiYWNrKGNvbm4sIHJlcy0+bGFzdF9zdGF0dXMsIHJlcy0+dGVtcF9haSk7Ci0gICAgICAvKiB0ZW1wX2FpIG93bmVyc2hpcCBpcyBtb3ZlZCB0byB0aGUgY29ubmVjdGlvbiwgc28gd2UgbmVlZCBub3QgZnJlZS11cAotICAgICAgICAgdGhlbSAqLwotICAgICAgcmVzLT50ZW1wX2FpID0gTlVMTDsKLSAgICB9CisgICAgKHZvaWQpQ3VybF9hZGRyaW5mb19jYWxsYmFjayhjb25uLCByZXMtPmxhc3Rfc3RhdHVzLCByZXMtPnRlbXBfYWkpOworICAgIC8qIHRlbXBfYWkgb3duZXJzaGlwIGlzIG1vdmVkIHRvIHRoZSBjb25uZWN0aW9uLCBzbyB3ZSBuZWVkIG5vdCBmcmVlLXVwCisgICAgICAgdGhlbSAqLworICAgIHJlcy0+dGVtcF9haSA9IE5VTEw7CisKICAgICBpZighY29ubi0+YXN5bmMuZG5zKSB7CiAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHJlc29sdmU6ICVzICglcykiLAogICAgICAgICAgICAgY29ubi0+YXN5bmMuaG9zdG5hbWUsIGFyZXNfc3RyZXJyb3IoY29ubi0+YXN5bmMuc3RhdHVzKSk7CiAgICAgICByZXN1bHQgPSBjb25uLT5iaXRzLnByb3h5P0NVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWToKICAgICAgICAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CiAgICAgfQotICAgIGVsc2UgaWYoZG5zKQorICAgIGVsc2UKICAgICAgICpkbnMgPSBjb25uLT5hc3luYy5kbnM7CiAKICAgICBkZXN0cm95X2FzeW5jX2RhdGEoJmNvbm4tPmFzeW5jKTsKQEAgLTQxMCw3ICs0MDgsNyBAQAogICogV2FpdHMgZm9yIGEgcmVzb2x2ZSB0byBmaW5pc2guIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGF2b2lkZWQgc2luY2UgdXNpbmcKICAqIHRoaXMgcmlzayBnZXR0aW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gImhhbmciLgogICoKLSAqIElmICdlbnRyeScgaXMgbm9uLU5VTEwsIG1ha2UgaXQgcG9pbnQgdG8gdGhlIHJlc29sdmVkIGRucyBlbnRyeQorICogJ2VudHJ5JyBNVVNUIGJlIG5vbi1OVUxMLgogICoKICAqIFJldHVybnMgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1QgaWYgdGhlIGhvc3Qgd2FzIG5vdCByZXNvbHZlZCwKICAqIENVUkxFX09QRVJBVElPTl9USU1FRE9VVCBpZiBhIHRpbWUtb3V0IG9jY3VycmVkLCBvciBvdGhlciBlcnJvcnMuCkBAIC00MjIsMTAgKzQyMCw5IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICB0aW1lZGlmZl90IHRpbWVvdXQ7CiAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKnRlbXBfZW50cnk7CiAKLSAgaWYoZW50cnkpCi0gICAgKmVudHJ5ID0gTlVMTDsgLyogY2xlYXIgb24gZW50cnkgKi8KKyAgREVCVUdBU1NFUlQoZW50cnkpOworICAqZW50cnkgPSBOVUxMOyAvKiBjbGVhciBvbiBlbnRyeSAqLwogCiAgIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIFRSVUUpOwogICBpZih0aW1lb3V0IDwgMCkgewpAQCAtNDQwLDkgKzQzNywxMyBAQAogICB3aGlsZSghcmVzdWx0KSB7CiAgICAgc3RydWN0IHRpbWV2YWwgKnR2cCwgdHYsIHN0b3JlOwogICAgIGludCBpdGltZW91dDsKLSAgICBpbnQgdGltZW91dF9tczsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAKLSAgICBpdGltZW91dCA9ICh0aW1lb3V0ID4gKGxvbmcpSU5UX01BWCkgPyBJTlRfTUFYIDogKGludCl0aW1lb3V0OworI2lmIFRJTUVESUZGX1RfTUFYID4gSU5UX01BWAorICAgIGl0aW1lb3V0ID0gKHRpbWVvdXQgPiBJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KXRpbWVvdXQ7CisjZWxzZQorICAgIGl0aW1lb3V0ID0gKGludCl0aW1lb3V0OworI2VuZGlmCiAKICAgICBzdG9yZS50dl9zZWMgPSBpdGltZW91dC8xMDAwOwogICAgIHN0b3JlLnR2X3VzZWMgPSAoaXRpbWVvdXQlMTAwMCkqMTAwMDsKQEAgLTQ1MywxMiArNDU0LDEyIEBACiAgICAgICAgc2Vjb25kIGlzIGxlZnQsIG90aGVyd2lzZSBqdXN0IHVzZSAxMDAwbXMgdG8gbWFrZSBzdXJlIHRoZSBwcm9ncmVzcwogICAgICAgIGNhbGxiYWNrIGdldHMgY2FsbGVkIGZyZXF1ZW50IGVub3VnaCAqLwogICAgIGlmKCF0dnAtPnR2X3NlYykKLSAgICAgIHRpbWVvdXRfbXMgPSAoaW50KSh0dnAtPnR2X3VzZWMvMTAwMCk7CisgICAgICB0aW1lb3V0X21zID0gKHRpbWVkaWZmX3QpKHR2cC0+dHZfdXNlYy8xMDAwKTsKICAgICBlbHNlCiAgICAgICB0aW1lb3V0X21zID0gMTAwMDsKIAogICAgIHdhaXRwZXJmb3JtKGNvbm4sIHRpbWVvdXRfbXMpOwotICAgIHJlc3VsdCA9IEN1cmxfcmVzb2x2ZXJfaXNfcmVzb2x2ZWQoY29ubiwgZW50cnk/JnRlbXBfZW50cnk6TlVMTCk7CisgICAgcmVzdWx0ID0gQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZChjb25uLCBlbnRyeSk7CiAKICAgICBpZihyZXN1bHQgfHwgY29ubi0+YXN5bmMuZG9uZSkKICAgICAgIGJyZWFrOwpAQCAtNDczLDcgKzQ3NCw3IEBACiAgICAgICBlbHNlIGlmKHRpbWVkaWZmID4gdGltZW91dCkKICAgICAgICAgdGltZW91dCA9IC0xOwogICAgICAgZWxzZQotICAgICAgICB0aW1lb3V0IC09IChsb25nKXRpbWVkaWZmOworICAgICAgICB0aW1lb3V0IC09IHRpbWVkaWZmOwogICAgICAgbm93ID0gbm93MjsgLyogZm9yIG5leHQgbG9vcCAqLwogICAgIH0KICAgICBpZih0aW1lb3V0IDwgMCkKQEAgLTQ5OCw5ICs0OTksOSBAQAogCiAvKiBDb25uZWN0cyByZXN1bHRzIHRvIHRoZSBsaXN0ICovCiBzdGF0aWMgdm9pZCBjb21wb3VuZF9yZXN1bHRzKHN0cnVjdCBSZXNvbHZlclJlc3VsdHMgKnJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqYWkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSkKIHsKLSAgQ3VybF9hZGRyaW5mbyAqYWlfdGFpbDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpX3RhaWw7CiAgIGlmKCFhaSkKICAgICByZXR1cm47CiAgIGFpX3RhaWwgPSBhaTsKQEAgLTU0Miw3ICs1NDMsNyBAQAogICAgIHJlcy0+bnVtX3BlbmRpbmctLTsKIAogICAgIGlmKENVUkxfQVNZTkNfU1VDQ0VTUyA9PSBzdGF0dXMpIHsKLSAgICAgIEN1cmxfYWRkcmluZm8gKmFpID0gQ3VybF9oZTJhaShob3N0ZW50LCBjb25uLT5hc3luYy5wb3J0KTsKKyAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSA9IEN1cmxfaGUyYWkoaG9zdGVudCwgY29ubi0+YXN5bmMucG9ydCk7CiAgICAgICBpZihhaSkgewogICAgICAgICBjb21wb3VuZF9yZXN1bHRzKHJlcywgYWkpOwogICAgICAgfQpAQCAtNjIxLDMzICs2MjIsMTggQEAKICAqIG1lbW9yeSB3ZSBuZWVkIHRvIGZyZWUgYWZ0ZXIgdXNlLiBUaGF0IG1lbW9yeSAqTVVTVCogYmUgZnJlZWQgd2l0aAogICogQ3VybF9mcmVlYWRkcmluZm8oKSwgbm90aGluZyBlbHNlLgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7CiAgIGNoYXIgKmJ1ZnA7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3QgaW5fYWRkciBpbjsKICAgaW50IGZhbWlseSA9IFBGX0lORVQ7Ci0jaWZkZWYgRU5BQkxFX0lQVjYgLyogQ1VSTFJFU19JUFY2ICovCi0gIHN0cnVjdCBpbjZfYWRkciBpbjY7Ci0jZW5kaWYgLyogQ1VSTFJFU19JUFY2ICovCiAKICAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLwogCi0gIC8qIEZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NCBhZGRyZXNzIHN0cmluZyAqLwotICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApIHsKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLSAgfQotCiAjaWZkZWYgRU5BQkxFX0lQVjYgLyogQ1VSTFJFU19JUFY2ICovCi0gIC8qIE90aGVyd2lzZSwgY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY2IGFkZHJlc3Mgc3RyaW5nICovCi0gIGlmKEN1cmxfaW5ldF9wdG9uIChBRl9JTkVUNiwgaG9zdG5hbWUsICZpbjYpID4gMCkKLSAgICAvKiBUaGlzIG11c3QgYmUgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwuICAqLwotICAgIHJldHVybiBDdXJsX2lwMmFkZHIoQUZfSU5FVDYsICZpbjYsIGhvc3RuYW1lLCBwb3J0KTsKLQogICBzd2l0Y2goY29ubi0+aXBfdmVyc2lvbikgewogICBkZWZhdWx0OgogI2lmIEFSRVNfVkVSU0lPTiA+PSAweDAxMDYwMQpAQCAtNjg2LDcgKzY3Miw3IEBACiAgICAgcmVzLT5sYXN0X3N0YXR1cyA9IEFSRVNfRU5PVEZPVU5EOwogI2lmZGVmIEVOQUJMRV9JUFY2IC8qIENVUkxSRVNfSVBWNiAqLwogICAgIGlmKGZhbWlseSA9PSBQRl9VTlNQRUMpIHsKLSAgICAgIGlmKEN1cmxfaXB2NndvcmtzKCkpIHsKKyAgICAgIGlmKEN1cmxfaXB2NndvcmtzKGNvbm4pKSB7CiAgICAgICAgIHJlcy0+bnVtX3BlbmRpbmcgPSAyOwogCiAgICAgICAgIC8qIGFyZXNjaGFubmVsIGlzIGFscmVhZHkgc2V0dXAgaW4gdGhlIEN1cmxfb3BlbigpIGZ1bmN0aW9uICovCkBAIC03MzQsNyArNzIwLDExIEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogCiAjaWYgKEFSRVNfVkVSU0lPTiA+PSAweDAxMDcwNCkKKyNpZiAoQVJFU19WRVJTSU9OID49IDB4MDEwYjAwKQorICBhcmVzX3Jlc3VsdCA9IGFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2KGRhdGEtPnN0YXRlLnJlc29sdmVyLCBzZXJ2ZXJzKTsKKyNlbHNlCiAgIGFyZXNfcmVzdWx0ID0gYXJlc19zZXRfc2VydmVyc19jc3YoZGF0YS0+c3RhdGUucmVzb2x2ZXIsIHNlcnZlcnMpOworI2VuZGlmCiAgIHN3aXRjaChhcmVzX3Jlc3VsdCkgewogICBjYXNlIEFSRVNfU1VDQ0VTUzoKICAgICByZXN1bHQgPSBDVVJMRV9PSzsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tdGhyZWFkLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLXRocmVhZC5jCmluZGV4IDU1ZTA4MTEuLmE2MGY0ZjAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tdGhyZWFkLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi10aHJlYWQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjEsNiArMjEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogT25seSBmb3IgdGhyZWFkZWQgbmFtZSByZXNvbHZlcyBidWlsZHMKQEAgLTcwLDEwICs3MSwxMCBAQAogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgImluZXRfcHRvbi5oIgogI2luY2x1ZGUgImluZXRfbnRvcC5oIgogI2luY2x1ZGUgImN1cmxfdGhyZWFkcy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtMTU3LDE0ICsxNTgsMTggQEAKIAogLyogRGF0YSBmb3Igc3luY2hyb25pemF0aW9uIGJldHdlZW4gcmVzb2x2ZXIgdGhyZWFkIGFuZCBpdHMgcGFyZW50ICovCiBzdHJ1Y3QgdGhyZWFkX3N5bmNfZGF0YSB7Ci0gIGN1cmxfbXV0ZXhfdCAqIG10eDsKKyAgY3VybF9tdXRleF90ICptdHg7CiAgIGludCBkb25lOwogCiAgIGNoYXIgKmhvc3RuYW1lOyAgICAgICAgLyogaG9zdG5hbWUgdG8gcmVzb2x2ZSwgQ3VybF9hc3luYy5ob3N0bmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSAqLwogICBpbnQgcG9ydDsKKyNpZmRlZiBVU0VfU09DS0VUUEFJUgorICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CisgIGN1cmxfc29ja2V0X3Qgc29ja19wYWlyWzJdOyAvKiBzb2NrZXQgcGFpciAqLworI2VuZGlmCiAgIGludCBzb2NrX2Vycm9yOwotICBDdXJsX2FkZHJpbmZvICpyZXM7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpyZXM7CiAjaWZkZWYgSEFWRV9HRVRBRERSSU5GTwogICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7CiAjZW5kaWYKQEAgLTE3NCw3ICsxNzksNyBAQAogc3RydWN0IHRocmVhZF9kYXRhIHsKICAgY3VybF90aHJlYWRfdCB0aHJlYWRfaG5kOwogICB1bnNpZ25lZCBpbnQgcG9sbF9pbnRlcnZhbDsKLSAgdGltZV90IGludGVydmFsX2VuZDsKKyAgdGltZWRpZmZfdCBpbnRlcnZhbF9lbmQ7CiAgIHN0cnVjdCB0aHJlYWRfc3luY19kYXRhIHRzZDsKIH07CiAKQEAgLTE4NSw3ICsxOTAsNyBAQAogCiAvKiBEZXN0cm95IHJlc29sdmVyIHRocmVhZCBzeW5jaHJvbml6YXRpb24gZGF0YSAqLwogc3RhdGljCi12b2lkIGRlc3Ryb3lfdGhyZWFkX3N5bmNfZGF0YShzdHJ1Y3QgdGhyZWFkX3N5bmNfZGF0YSAqIHRzZCkKK3ZvaWQgZGVzdHJveV90aHJlYWRfc3luY19kYXRhKHN0cnVjdCB0aHJlYWRfc3luY19kYXRhICp0c2QpCiB7CiAgIGlmKHRzZC0+bXR4KSB7CiAgICAgQ3VybF9tdXRleF9kZXN0cm95KHRzZC0+bXR4KTsKQEAgLTE5NywxMiArMjAyLDIxIEBACiAgIGlmKHRzZC0+cmVzKQogICAgIEN1cmxfZnJlZWFkZHJpbmZvKHRzZC0+cmVzKTsKIAorI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIC8qCisgICAqIGNsb3NlIG9uZSBlbmQgb2YgdGhlIHNvY2tldCBwYWlyIChtYXkgYmUgZG9uZSBpbiByZXNvbHZlciB0aHJlYWQpOworICAgKiB0aGUgb3RoZXIgZW5kIChmb3IgcmVhZGluZykgaXMgYWx3YXlzIGNsb3NlZCBpbiB0aGUgcGFyZW50IHRocmVhZC4KKyAgICovCisgIGlmKHRzZC0+c29ja19wYWlyWzFdICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIHNjbG9zZSh0c2QtPnNvY2tfcGFpclsxXSk7CisgIH0KKyNlbmRpZgogICBtZW1zZXQodHNkLCAwLCBzaXplb2YoKnRzZCkpOwogfQogCiAvKiBJbml0aWFsaXplIHJlc29sdmVyIHRocmVhZCBzeW5jaHJvbml6YXRpb24gZGF0YSAqLwogc3RhdGljCi1pbnQgaW5pdF90aHJlYWRfc3luY19kYXRhKHN0cnVjdCB0aHJlYWRfZGF0YSAqIHRkLAoraW50IGluaXRfdGhyZWFkX3N5bmNfZGF0YShzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMpCkBAIC0yMzAsNiArMjQ0LDE0IEBACiAKICAgQ3VybF9tdXRleF9pbml0KHRzZC0+bXR4KTsKIAorI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIC8qIGNyZWF0ZSBzb2NrZXQgcGFpciwgYXZvaWQgQUZfTE9DQUwgc2luY2UgaXQgZG9lc24ndCBidWlsZCBvbiBTb2xhcmlzICovCisgIGlmKEN1cmxfc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgJnRzZC0+c29ja19wYWlyWzBdKSA8IDApIHsKKyAgICB0c2QtPnNvY2tfcGFpclswXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICB0c2QtPnNvY2tfcGFpclsxXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICBnb3RvIGVycl9leGl0OworICB9CisjZW5kaWYKICAgdHNkLT5zb2NrX2Vycm9yID0gQ1VSTF9BU1lOQ19TVUNDRVNTOwogCiAgIC8qIENvcHlpbmcgaG9zdG5hbWUgc3RyaW5nIGJlY2F1c2Ugb3JpZ2luYWwgY2FuIGJlIGRlc3Ryb3llZCBieSBwYXJlbnQKQEAgLTI3Niw2ICsyOTgsOSBAQAogICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkID0gdHNkLT50ZDsKICAgY2hhciBzZXJ2aWNlWzEyXTsKICAgaW50IHJjOworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIGNoYXIgYnVmWzFdOworI2VuZGlmCiAKICAgbXNucHJpbnRmKHNlcnZpY2UsIHNpemVvZihzZXJ2aWNlKSwgIiVkIiwgdHNkLT5wb3J0KTsKIApAQCAtMjk4LDYgKzMyMywxNiBAQAogICAgIGZyZWUodGQpOwogICB9CiAgIGVsc2UgeworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgICAgaWYodHNkLT5zb2NrX3BhaXJbMV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAvKiBETlMgaGFzIGJlZW4gcmVzb2x2ZWQsIHNpZ25hbCBjbGllbnQgdGFzayAqLworICAgICAgYnVmWzBdID0gMTsKKyAgICAgIGlmKHN3cml0ZSh0c2QtPnNvY2tfcGFpclsxXSwgIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCkgeworICAgICAgICAvKiB1cGRhdGUgc29ja19lcnJvIHRvIGVycm5vICovCisgICAgICAgIHRzZC0+c29ja19lcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYKICAgICB0c2QtPmRvbmUgPSAxOwogICAgIEN1cmxfbXV0ZXhfcmVsZWFzZSh0c2QtPm10eCk7CiAgIH0KQEAgLTM0OCw2ICszODMsMTAgQEAKICAgaWYoYXN5bmMtPm9zX3NwZWNpZmljKSB7CiAgICAgc3RydWN0IHRocmVhZF9kYXRhICp0ZCA9IChzdHJ1Y3QgdGhyZWFkX2RhdGEqKSBhc3luYy0+b3Nfc3BlY2lmaWM7CiAgICAgaW50IGRvbmU7CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgICBjdXJsX3NvY2tldF90IHNvY2tfcmQgPSB0ZC0+dHNkLnNvY2tfcGFpclswXTsKKyAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSB0ZC0+dHNkLmNvbm47CisjZW5kaWYKIAogICAgIC8qCiAgICAgICogaWYgdGhlIHRocmVhZCBpcyBzdGlsbCBibG9ja2luZyBpbiB0aGUgcmVzb2x2ZSBzeXNjYWxsLCBkZXRhY2ggaXQgYW5kCkBAIC0zNjksNiArNDA4LDE1IEBACiAKICAgICAgIGZyZWUoYXN5bmMtPm9zX3NwZWNpZmljKTsKICAgICB9CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgICAvKgorICAgICAqIGVuc3VyZSBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiBmaXJlcyBDVVJMX1BPTExfUkVNT1ZFCisgICAgICogYmVmb3JlIHRoZSBGRCBpcyBpbnZhbGlkYXRlZCB0byBhdm9pZCBFQkFERiBvbiBFUE9MTF9DVExfREVMCisgICAgICovCisgICAgaWYoY29ubikKKyAgICAgIEN1cmxfbXVsdGlfY2xvc2VkKGNvbm4tPmRhdGEsIHNvY2tfcmQpOworICAgIHNjbG9zZShzb2NrX3JkKTsKKyNlbmRpZgogICB9CiAgIGFzeW5jLT5vc19zcGVjaWZpYyA9IE5VTEw7CiAKQEAgLTQ0NiwxMSArNDk0LDE0IEBACiAgIGNvbnN0IGNoYXIgKmhvc3Rfb3JfcHJveHk7CiAgIENVUkxjb2RlIHJlc3VsdDsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkpIHsKICAgICBob3N0X29yX3Byb3h5ID0gInByb3h5IjsKICAgICByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFk7CiAgIH0KLSAgZWxzZSB7CisgIGVsc2UKKyNlbmRpZgorICB7CiAgICAgaG9zdF9vcl9wcm94eSA9ICJob3N0IjsKICAgICByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVDsKICAgfQpAQCAtNDYxLDYgKzUxMiw5IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiAnZW50cnknIG1heSBiZSBOVUxMIGFuZCB0aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQKKyAqLwogc3RhdGljIENVUkxjb2RlIHRocmVhZF93YWl0X3Jlc29sdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcG9ydCkKQEAgLTU0NSw2ICs1OTksNyBAQAogICBzdHJ1Y3QgdGhyZWFkX2RhdGEgICAqdGQgPSAoc3RydWN0IHRocmVhZF9kYXRhKikgY29ubi0+YXN5bmMub3Nfc3BlY2lmaWM7CiAgIGludCBkb25lID0gMDsKIAorICBERUJVR0FTU0VSVChlbnRyeSk7CiAgICplbnRyeSA9IE5VTEw7CiAKICAgaWYoIXRkKSB7CkBAIC01NjksNiArNjI0LDcgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBwb2xsIGZvciBuYW1lIGxvb2t1cCBkb25lIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB1cCB0byAyNTBtcyAqLworICAgIC8qIHNob3VsZCBiZSBmaW5lIGV2ZW4gaWYgdGhpcyBjb252ZXJ0cyB0byAzMiBiaXQgKi8KICAgICB0aW1lZGlmZl90IGVsYXBzZWQgPSBDdXJsX3RpbWVkaWZmKEN1cmxfbm93KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKICAgICBpZihlbGFwc2VkIDwgMCkKQEAgLTU5Miw0NyArNjQ4LDYxIEBACiB9CiAKIGludCBDdXJsX3Jlc29sdmVyX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgdGltZV90IG1pbGxpOworICBpbnQgcmV0X3ZhbCA9IDA7CisgIHRpbWVkaWZmX3QgbWlsbGk7CiAgIHRpbWVkaWZmX3QgbXM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgcmVzZGF0YSAqcmVzbHYgPSAoc3RydWN0IHJlc2RhdGEgKilkYXRhLT5zdGF0ZS5yZXNvbHZlcjsKKyNpZmRlZiBVU0VfU09DS0VUUEFJUgorICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkID0gKHN0cnVjdCB0aHJlYWRfZGF0YSopY29ubi0+YXN5bmMub3Nfc3BlY2lmaWM7CisjZWxzZQogICAodm9pZClzb2NrczsKLSAgKHZvaWQpbnVtc29ja3M7Ci0gIG1zID0gQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCByZXNsdi0+c3RhcnQpOwotICBpZihtcyA8IDMpCi0gICAgbWlsbGkgPSAwOwotICBlbHNlIGlmKG1zIDw9IDUwKQotICAgIG1pbGxpID0gbXMvMzsKLSAgZWxzZSBpZihtcyA8PSAyNTApCi0gICAgbWlsbGkgPSA1MDsKLSAgZWxzZQotICAgIG1pbGxpID0gMjAwOwotICBDdXJsX2V4cGlyZShkYXRhLCBtaWxsaSwgRVhQSVJFX0FTWU5DX05BTUUpOwotICByZXR1cm4gMDsKKyNlbmRpZgorCisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgaWYodGQpIHsKKyAgICAvKiByZXR1cm4gcmVhZCBmZCB0byBjbGllbnQgZm9yIHBvbGxpbmcgdGhlIEROUyByZXNvbHV0aW9uIHN0YXR1cyAqLworICAgIHNvY2tzWzBdID0gdGQtPnRzZC5zb2NrX3BhaXJbMF07CisgICAgREVCVUdBU1NFUlQodGQtPnRzZC5jb25uID09IGNvbm4gfHwgIXRkLT50c2QuY29ubik7CisgICAgdGQtPnRzZC5jb25uID0gY29ubjsKKyAgICByZXRfdmFsID0gR0VUU09DS19SRUFEU09DSygwKTsKKyAgfQorICBlbHNlIHsKKyNlbmRpZgorICAgIG1zID0gQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCByZXNsdi0+c3RhcnQpOworICAgIGlmKG1zIDwgMykKKyAgICAgIG1pbGxpID0gMDsKKyAgICBlbHNlIGlmKG1zIDw9IDUwKQorICAgICAgbWlsbGkgPSBtcy8zOworICAgIGVsc2UgaWYobXMgPD0gMjUwKQorICAgICAgbWlsbGkgPSA1MDsKKyAgICBlbHNlCisgICAgICBtaWxsaSA9IDIwMDsKKyAgICBDdXJsX2V4cGlyZShkYXRhLCBtaWxsaSwgRVhQSVJFX0FTWU5DX05BTUUpOworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIH0KKyNlbmRpZgorCisKKyAgcmV0dXJuIHJldF92YWw7CiB9CiAKICNpZm5kZWYgSEFWRV9HRVRBRERSSU5GTwogLyoKICAqIEN1cmxfZ2V0YWRkcmluZm8oKSAtIGZvciBwbGF0Zm9ybXMgd2l0aG91dCBnZXRhZGRyaW5mbwogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7Ci0gIHN0cnVjdCBpbl9hZGRyIGluOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHJlc2RhdGEgKnJlc2x2ID0gKHN0cnVjdCByZXNkYXRhICopZGF0YS0+c3RhdGUucmVzb2x2ZXI7CiAKICAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLwogCi0gIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLQogICByZXNsdi0+c3RhcnQgPSBDdXJsX25vdygpOwogCiAgIC8qIGZpcmUgdXAgYSBuZXcgcmVzb2x2ZXIgdGhyZWFkISAqLwpAQCAtNjUxLDM4ICs3MjEsMTggQEAKIC8qCiAgKiBDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKCkgLSBmb3IgZ2V0YWRkcmluZm8KICAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQogewogICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0gIGNoYXIgc2J1ZlsxMl07CiAgIGludCBwZiA9IFBGX0lORVQ7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgcmVzZGF0YSAqcmVzbHYgPSAoc3RydWN0IHJlc2RhdGEgKilkYXRhLT5zdGF0ZS5yZXNvbHZlcjsKIAogICAqd2FpdHAgPSAwOyAvKiBkZWZhdWx0IHRvIHN5bmNocm9ub3VzIHJlc3BvbnNlICovCiAKLSNpZm5kZWYgVVNFX1JFU09MVkVfT05fSVBTCi0gIHsKLSAgICBzdHJ1Y3QgaW5fYWRkciBpbjsKLSAgICAvKiBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcgKi8KLSAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApCi0gICAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgICByZXR1cm4gQ3VybF9pcDJhZGRyKEFGX0lORVQsICZpbiwgaG9zdG5hbWUsIHBvcnQpOwotICB9Ci0jaWZkZWYgQ1VSTFJFU19JUFY2Ci0gIHsKLSAgICBzdHJ1Y3QgaW42X2FkZHIgaW42OwotICAgIC8qIGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NiBhZGRyZXNzIHN0cmluZyAqLwotICAgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmluNikgPiAwKQotICAgICAgLyogVGhpcyBpcyBhbiBJUHY2IGFkZHJlc3MgbGl0ZXJhbCAqLwotICAgICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVUNiwgJmluNiwgaG9zdG5hbWUsIHBvcnQpOwotICB9Ci0jZW5kaWYgLyogQ1VSTFJFU19JUFY2ICovCi0jZW5kaWYgLyogIVVTRV9SRVNPTFZFX09OX0lQUyAqLwotCiAjaWZkZWYgQ1VSTFJFU19JUFY2CiAgIC8qCiAgICAqIENoZWNrIGlmIGEgbGltaXRlZCBuYW1lIHJlc29sdmUgaGFzIGJlZW4gcmVxdWVzdGVkLgpAQCAtNjk5LDE2ICs3NDksMTUgQEAKICAgICBicmVhazsKICAgfQogCi0gIGlmKChwZiAhPSBQRl9JTkVUKSAmJiAhQ3VybF9pcHY2d29ya3MoKSkKKyAgaWYoKHBmICE9IFBGX0lORVQpICYmICFDdXJsX2lwdjZ3b3Jrcyhjb25uKSkKICAgICAvKiBUaGUgc3RhY2sgc2VlbXMgdG8gYmUgYSBub24tSVB2NiBvbmUgKi8KICAgICBwZiA9IFBGX0lORVQ7CiAjZW5kaWYgLyogQ1VSTFJFU19JUFY2ICovCiAKICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgIGhpbnRzLmFpX2ZhbWlseSA9IHBmOwotICBoaW50cy5haV9zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOwotCi0gIG1zbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOworICBoaW50cy5haV9zb2NrdHlwZSA9IChjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9UQ1ApPworICAgIFNPQ0tfU1RSRUFNIDogU09DS19ER1JBTTsKIAogICByZXNsdi0+c3RhcnQgPSBDdXJsX25vdygpOwogICAvKiBmaXJlIHVwIGEgbmV3IHJlc29sdmVyIHRocmVhZCEgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4uaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4uaAppbmRleCBjY2Q0YjFmLi5iZTI3OTZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMTQsOCArMTE0LDcgQEAKICAqIHJldHVybiBiaXRtYXNrIGluZGljYXRpbmcgd2hhdCBmaWxlIGRlc2NyaXB0b3JzIChyZWZlcnJpbmcgdG8gYXJyYXkgaW5kZXhlcwogICogaW4gdGhlICdzb2NrJyBhcnJheSkgdG8gd2FpdCBmb3IsIHJlYWQvd3JpdGUuCiAgKi8KLWludCBDdXJsX3Jlc29sdmVyX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworaW50IEN1cmxfcmVzb2x2ZXJfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2spOwogCiAvKgogICogQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZCgpCkBAIC0xNTQsMTAgKzE1MywxMCBAQAogICogRWFjaCByZXNvbHZlciBiYWNrZW5kIG11c3Qgb2YgY291cnNlIG1ha2Ugc3VyZSB0byByZXR1cm4gZGF0YSBpbiB0aGUKICAqIGNvcnJlY3QgZm9ybWF0IHRvIGNvbXBseSB3aXRoIHRoaXMuCiAgKi8KLUN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOwogCiAjaWZuZGVmIENVUkxSRVNfQVNZTkNICiAvKiBjb252ZXJ0IHRoZXNlIGZ1bmN0aW9ucyBpZiBhbiBhc3luY2ggcmVzb2x2ZXIgaXNuJ3QgdXNlZCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYmFzZTY0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYwppbmRleCBmYjA4MWE2Li42NDNjZWY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYwpAQCAtMjQsOCArMjQsOCBAQAogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFBfQVVUSCkgfHwgZGVmaW5lZChVU0VfTElCU1NIMikgfHwgXAotICBkZWZpbmVkKFVTRV9MSUJTU0gpIHx8ICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSB8fCBcCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFBfQVVUSCkgfHwgZGVmaW5lZChVU0VfU1NIKSB8fCBcCisgICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSB8fCBcCiAgICFkZWZpbmVkKENVUkxfRElTQUJMRV9ET0gpIHx8IGRlZmluZWQoVVNFX1NTTCkKIAogI2luY2x1ZGUgInVybGRhdGEuaCIgLyogZm9yIHRoZSBDdXJsX2Vhc3kgZGVmaW5pdGlvbiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmNhY2hlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYwppbmRleCA1MzUwOTE5Li5kMjFhMDBjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIExpbnVzIE5pZWxzZW4gRmVsdHppbmcsIDxsaW51c0BoYXh4LnNlPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQwLDI2ICs0MCw3IEBACiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCi0jaWZkZWYgQ1VSTERFQlVHCi0vKiB0aGUgZGVidWcgdmVyc2lvbnMgb2YgdGhlc2UgbWFjcm9zIG1ha2UgZXh0cmEgY2VydGFpbiB0aGF0IHRoZSBsb2NrIGlzCi0gICBuZXZlciBkb3VibHkgbG9ja2VkIG9yIHVubG9ja2VkICovCi0jZGVmaW5lIENPTk5fTE9DSyh4KSBpZigoeCktPnNoYXJlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ3VybF9zaGFyZV9sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOyBcCi0gICAgREVCVUdBU1NFUlQoISh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBDT05OX1VOTE9DSyh4KSBpZigoeCktPnNoYXJlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERFQlVHQVNTRVJUKCh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2sgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEN1cmxfc2hhcmVfdW5sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCk7ICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0jZWxzZQotI2RlZmluZSBDT05OX0xPQ0soeCkgaWYoKHgpLT5zaGFyZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEN1cmxfc2hhcmVfbG9jaygoeCksIENVUkxfTE9DS19EQVRBX0NPTk5FQ1QsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKQotI2RlZmluZSBDT05OX1VOTE9DSyh4KSBpZigoeCktPnNoYXJlKSAgICAgICAgICAgICAgICAgICBcCi0gICAgQ3VybF9zaGFyZV91bmxvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNUKQotI2VuZGlmCisjZGVmaW5lIEhBU0hLRVlfU0laRSAxMjgKIAogc3RhdGljIHZvaWQgY29ubl9sbGlzdF9kdG9yKHZvaWQgKnVzZXIsIHZvaWQgKmVsZW1lbnQpCiB7CkBAIC02OCw1OCArNDksNTcgQEAKICAgY29ubi0+YnVuZGxlID0gTlVMTDsKIH0KIAotc3RhdGljIENVUkxjb2RlIGJ1bmRsZV9jcmVhdGUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0YnVuZGxlICoqY2JfcHRyKQorc3RhdGljIENVUkxjb2RlIGJ1bmRsZV9jcmVhdGUoc3RydWN0IGNvbm5lY3RidW5kbGUgKipidW5kbGVwKQogewotICAodm9pZClkYXRhOwotICBERUJVR0FTU0VSVCgqY2JfcHRyID09IE5VTEwpOwotICAqY2JfcHRyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29ubmVjdGJ1bmRsZSkpOwotICBpZighKmNiX3B0cikKKyAgREVCVUdBU1NFUlQoKmJ1bmRsZXAgPT0gTlVMTCk7CisgICpidW5kbGVwID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29ubmVjdGJ1bmRsZSkpOworICBpZighKmJ1bmRsZXApCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKLSAgKCpjYl9wdHIpLT5udW1fY29ubmVjdGlvbnMgPSAwOwotICAoKmNiX3B0ciktPm11bHRpdXNlID0gQlVORExFX1VOS05PV047CisgICgqYnVuZGxlcCktPm51bV9jb25uZWN0aW9ucyA9IDA7CisgICgqYnVuZGxlcCktPm11bHRpdXNlID0gQlVORExFX1VOS05PV047CiAKLSAgQ3VybF9sbGlzdF9pbml0KCYoKmNiX3B0ciktPmNvbm5fbGlzdCwgKGN1cmxfbGxpc3RfZHRvcikgY29ubl9sbGlzdF9kdG9yKTsKKyAgQ3VybF9sbGlzdF9pbml0KCYoKmJ1bmRsZXApLT5jb25uX2xpc3QsIChjdXJsX2xsaXN0X2R0b3IpIGNvbm5fbGxpc3RfZHRvcik7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIHZvaWQgYnVuZGxlX2Rlc3Ryb3koc3RydWN0IGNvbm5lY3RidW5kbGUgKmNiX3B0cikKK3N0YXRpYyB2b2lkIGJ1bmRsZV9kZXN0cm95KHN0cnVjdCBjb25uZWN0YnVuZGxlICpidW5kbGUpCiB7Ci0gIGlmKCFjYl9wdHIpCisgIGlmKCFidW5kbGUpCiAgICAgcmV0dXJuOwogCi0gIEN1cmxfbGxpc3RfZGVzdHJveSgmY2JfcHRyLT5jb25uX2xpc3QsIE5VTEwpOworICBDdXJsX2xsaXN0X2Rlc3Ryb3koJmJ1bmRsZS0+Y29ubl9saXN0LCBOVUxMKTsKIAotICBmcmVlKGNiX3B0cik7CisgIGZyZWUoYnVuZGxlKTsKIH0KIAogLyogQWRkIGEgY29ubmVjdGlvbiB0byBhIGJ1bmRsZSAqLwotc3RhdGljIHZvaWQgYnVuZGxlX2FkZF9jb25uKHN0cnVjdCBjb25uZWN0YnVuZGxlICpjYl9wdHIsCitzdGF0aWMgdm9pZCBidW5kbGVfYWRkX2Nvbm4oc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoJmNiX3B0ci0+Y29ubl9saXN0LCBjYl9wdHItPmNvbm5fbGlzdC50YWlsLCBjb25uLAorICBDdXJsX2xsaXN0X2luc2VydF9uZXh0KCZidW5kbGUtPmNvbm5fbGlzdCwgYnVuZGxlLT5jb25uX2xpc3QudGFpbCwgY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+YnVuZGxlX25vZGUpOwotICBjb25uLT5idW5kbGUgPSBjYl9wdHI7Ci0gIGNiX3B0ci0+bnVtX2Nvbm5lY3Rpb25zKys7CisgIGNvbm4tPmJ1bmRsZSA9IGJ1bmRsZTsKKyAgYnVuZGxlLT5udW1fY29ubmVjdGlvbnMrKzsKIH0KIAogLyogUmVtb3ZlIGEgY29ubmVjdGlvbiBmcm9tIGEgYnVuZGxlICovCi1zdGF0aWMgaW50IGJ1bmRsZV9yZW1vdmVfY29ubihzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqY2JfcHRyLAorc3RhdGljIGludCBidW5kbGVfcmVtb3ZlX2Nvbm4oc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqY3VycjsKIAotICBjdXJyID0gY2JfcHRyLT5jb25uX2xpc3QuaGVhZDsKKyAgY3VyciA9IGJ1bmRsZS0+Y29ubl9saXN0LmhlYWQ7CiAgIHdoaWxlKGN1cnIpIHsKICAgICBpZihjdXJyLT5wdHIgPT0gY29ubikgewotICAgICAgQ3VybF9sbGlzdF9yZW1vdmUoJmNiX3B0ci0+Y29ubl9saXN0LCBjdXJyLCBOVUxMKTsKLSAgICAgIGNiX3B0ci0+bnVtX2Nvbm5lY3Rpb25zLS07CisgICAgICBDdXJsX2xsaXN0X3JlbW92ZSgmYnVuZGxlLT5jb25uX2xpc3QsIGN1cnIsIE5VTEwpOworICAgICAgYnVuZGxlLT5udW1fY29ubmVjdGlvbnMtLTsKICAgICAgIGNvbm4tPmJ1bmRsZSA9IE5VTEw7CiAgICAgICByZXR1cm4gMTsgLyogd2UgcmVtb3ZlZCBhIGhhbmRsZSAqLwogICAgIH0KICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAgfQorICBERUJVR0FTU0VSVCgwKTsKICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE0MSwxMCArMTIxLDggQEAKIAogICByYyA9IEN1cmxfaGFzaF9pbml0KCZjb25uYy0+aGFzaCwgc2l6ZSwgQ3VybF9oYXNoX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3N0cl9rZXlfY29tcGFyZSwgZnJlZV9idW5kbGVfaGFzaF9lbnRyeSk7Ci0gIGlmKHJjKSB7Ci0gICAgQ3VybF9jbG9zZShjb25uYy0+Y2xvc3VyZV9oYW5kbGUpOwotICAgIGNvbm5jLT5jbG9zdXJlX2hhbmRsZSA9IE5VTEw7Ci0gIH0KKyAgaWYocmMpCisgICAgQ3VybF9jbG9zZSgmY29ubmMtPmNsb3N1cmVfaGFuZGxlKTsKICAgZWxzZQogICAgIGNvbm5jLT5jbG9zdXJlX2hhbmRsZS0+c3RhdGUuY29ubl9jYWNoZSA9IGNvbm5jOwogCkBAIC0xNTksMjggKzEzNywzMCBAQAogCiAvKiBjcmVhdGVzIGEga2V5IHRvIGZpbmQgYSBidW5kbGUgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwogc3RhdGljIHZvaWQgaGFzaGtleShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgLyogc29tZXRoaW5nIGxpa2UgMTI4IGlzIGZpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgIC8qIHNvbWV0aGluZyBsaWtlIDEyOCBpcyBmaW5lICovCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipob3N0cCkKIHsKICAgY29uc3QgY2hhciAqaG9zdG5hbWU7CisgIGxvbmcgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OwogCi0gIGlmKGNvbm4tPmJpdHMuc29ja3Nwcm94eSkKLSAgICBob3N0bmFtZSA9IGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QubmFtZTsKLSAgZWxzZSBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFjb25uLT5iaXRzLnR1bm5lbF9wcm94eSkgewogICAgIGhvc3RuYW1lID0gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWU7Ci0gIGVsc2UgaWYoY29ubi0+Yml0cy5jb25uX3RvX2hvc3QpCi0gICAgaG9zdG5hbWUgPSBjb25uLT5jb25uX3RvX2hvc3QubmFtZTsKKyAgICBwb3J0ID0gY29ubi0+cG9ydDsKKyAgfQorICBlbHNlCisjZW5kaWYKKyAgICBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKKyAgICAgIGhvc3RuYW1lID0gY29ubi0+Y29ubl90b19ob3N0Lm5hbWU7CiAgIGVsc2UKICAgICBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKIAotICBERUJVR0FTU0VSVChsZW4gPiAzMik7CisgIGlmKGhvc3RwKQorICAgIC8qIHJlcG9ydCBiYWNrIHdoaWNoIG5hbWUgd2UgdXNlZCAqLworICAgICpob3N0cCA9IGhvc3RuYW1lOwogCiAgIC8qIHB1dCB0aGUgbnVtYmVyIGZpcnN0IHNvIHRoYXQgdGhlIGhvc3RuYW1lIGdldHMgY3V0IG9mZiBpZiB0b28gbG9uZyAqLwotICBtc25wcmludGYoYnVmLCBsZW4sICIlbGQlcyIsIGNvbm4tPnBvcnQsIGhvc3RuYW1lKTsKLX0KLQotdm9pZCBDdXJsX2Nvbm5jYWNoZV91bmxvY2soc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKLXsKLSAgQ09OTl9VTkxPQ0soZGF0YSk7CisgIG1zbnByaW50ZihidWYsIGxlbiwgIiVsZCVzIiwgcG9ydCwgaG9zdG5hbWUpOwogfQogCiAvKiBSZXR1cm5zIG51bWJlciBvZiBjb25uZWN0aW9ucyBjdXJyZW50bHkgaGVsZCBpbiB0aGUgY29ubmVjdGlvbiBjYWNoZS4KQEAgLTE4OSwyMSArMTY5LDkgQEAKIHNpemVfdCBDdXJsX2Nvbm5jYWNoZV9zaXplKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpCiB7CiAgIHNpemVfdCBudW07Ci0gIENPTk5fTE9DSyhkYXRhKTsKKyAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CiAgIG51bSA9IGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUtPm51bV9jb25uOwotICBDT05OX1VOTE9DSyhkYXRhKTsKLSAgcmV0dXJuIG51bTsKLX0KLQotLyogUmV0dXJucyBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvbm5lY3Rpb25zJ3MgYnVuZGxlCi0gICBMb2Nrcy91bmxvY2tzIHRoZSBjYWNoZSBpdHNlbGYhCi0qLwotc2l6ZV90IEN1cmxfY29ubmNhY2hlX2J1bmRsZV9zaXplKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc2l6ZV90IG51bTsKLSAgQ09OTl9MT0NLKGNvbm4tPmRhdGEpOwotICBudW0gPSBjb25uLT5idW5kbGUtPm51bV9jb25uZWN0aW9uczsKLSAgQ09OTl9VTkxPQ0soY29ubi0+ZGF0YSk7CisgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgIHJldHVybiBudW07CiB9CiAKQEAgLTIxMiwxMyArMTgwLDE0IEBACiAKICAgICoqTk9URSoqOiBXaGVuIGl0IHJldHVybnMsIGl0IGhvbGRzIHRoZSBjb25uZWN0aW9uIGNhY2hlIGxvY2shICovCiBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqQ3VybF9jb25uY2FjaGVfZmluZF9idW5kbGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipob3N0cCkKIHsKICAgc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSA9IE5VTEw7Ci0gIENPTk5fTE9DSyhjb25uLT5kYXRhKTsKKyAgQ09OTkNBQ0hFX0xPQ0soY29ubi0+ZGF0YSk7CiAgIGlmKGNvbm5jKSB7Ci0gICAgY2hhciBrZXlbMTI4XTsKLSAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSkpOworICAgIGNoYXIga2V5W0hBU0hLRVlfU0laRV07CisgICAgaGFzaGtleShjb25uLCBrZXksIHNpemVvZihrZXkpLCBob3N0cCk7CiAgICAgYnVuZGxlID0gQ3VybF9oYXNoX3BpY2soJmNvbm5jLT5oYXNoLCBrZXksIHN0cmxlbihrZXkpKTsKICAgfQogCkBAIC0yNjIsMzAgKzIzMSwyOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZTsKLSAgc3RydWN0IGNvbm5lY3RidW5kbGUgKm5ld19idW5kbGUgPSBOVUxMOworICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlID0gTlVMTDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKICAgLyogKmZpbmRfYnVuZGxlKCkgbG9ja3MgdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KLSAgYnVuZGxlID0gQ3VybF9jb25uY2FjaGVfZmluZF9idW5kbGUoY29ubiwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSk7CisgIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKGNvbm4sIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUsIE5VTEwpOwogICBpZighYnVuZGxlKSB7CiAgICAgaW50IHJjOwotICAgIGNoYXIga2V5WzEyOF07CisgICAgY2hhciBrZXlbSEFTSEtFWV9TSVpFXTsKIAotICAgIHJlc3VsdCA9IGJ1bmRsZV9jcmVhdGUoZGF0YSwgJm5ld19idW5kbGUpOworICAgIHJlc3VsdCA9IGJ1bmRsZV9jcmVhdGUoJmJ1bmRsZSk7CiAgICAgaWYocmVzdWx0KSB7CiAgICAgICBnb3RvIHVubG9jazsKICAgICB9CiAKLSAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSkpOwotICAgIHJjID0gY29ubmNhY2hlX2FkZF9idW5kbGUoZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwga2V5LCBuZXdfYnVuZGxlKTsKKyAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSksIE5VTEwpOworICAgIHJjID0gY29ubmNhY2hlX2FkZF9idW5kbGUoZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwga2V5LCBidW5kbGUpOwogCiAgICAgaWYoIXJjKSB7Ci0gICAgICBidW5kbGVfZGVzdHJveShuZXdfYnVuZGxlKTsKKyAgICAgIGJ1bmRsZV9kZXN0cm95KGJ1bmRsZSk7CiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgZ290byB1bmxvY2s7CiAgICAgfQotICAgIGJ1bmRsZSA9IG5ld19idW5kbGU7CiAgIH0KIAogICBidW5kbGVfYWRkX2Nvbm4oYnVuZGxlLCBjb25uKTsKQEAgLTI5NywxNSArMjY0LDE3IEBACiAgICAgICAgICAgICAgICBjb25uLT5jb25uZWN0aW9uX2lkLCBjb25uYy0+bnVtX2Nvbm4pKTsKIAogICB1bmxvY2s6Ci0gIENPTk5fVU5MT0NLKGRhdGEpOworICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qCi0gKiBSZW1vdmVzIHRoZSBjb25uZWN0ZGF0YSBvYmplY3QgZnJvbSB0aGUgY29ubmVjdGlvbiBjYWNoZSAqYW5kKiBjbGVhcnMgdGhlCi0gKiAtPmRhdGEgcG9pbnRlciBhc3NvY2lhdGlvbi4gUGFzcyBUUlVFL0ZBTFNFIGluIHRoZSAnbG9jaycgYXJndW1lbnQKLSAqIGRlcGVuZGluZyBvbiBpZiB0aGUgcGFyZW50IGZ1bmN0aW9uIGFscmVhZHkgaG9sZHMgdGhlIGxvY2sgb3Igbm90LgorICogUmVtb3ZlcyB0aGUgY29ubmVjdGRhdGEgb2JqZWN0IGZyb20gdGhlIGNvbm5lY3Rpb24gY2FjaGUsIGJ1dCBkb2VzICpub3QqCisgKiBjbGVhciB0aGUgY29ubi0+ZGF0YSBhc3NvY2lhdGlvbi4gVGhlIHRyYW5zZmVyIHN0aWxsIG93bnMgdGhpcyBjb25uZWN0aW9uLgorICoKKyAqIFBhc3MgVFJVRS9GQUxTRSBpbiB0aGUgJ2xvY2snIGFyZ3VtZW50IGRlcGVuZGluZyBvbiBpZiB0aGUgcGFyZW50IGZ1bmN0aW9uCisgKiBhbHJlYWR5IGhvbGRzIHRoZSBsb2NrIG9yIG5vdC4KICAqLwogdm9pZCBDdXJsX2Nvbm5jYWNoZV9yZW1vdmVfY29ubihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgbG9jaykKQEAgLTMxNyw3ICsyODYsNyBAQAogICAgICBkdWUgdG8gYSBmYWlsZWQgY29ubmVjdGlvbiBhdHRlbXB0LCBiZWZvcmUgYmVpbmcgYWRkZWQgdG8gYSBidW5kbGUgKi8KICAgaWYoYnVuZGxlKSB7CiAgICAgaWYobG9jaykgewotICAgICAgQ09OTl9MT0NLKGRhdGEpOworICAgICAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CiAgICAgfQogICAgIGJ1bmRsZV9yZW1vdmVfY29ubihidW5kbGUsIGNvbm4pOwogICAgIGlmKGJ1bmRsZS0+bnVtX2Nvbm5lY3Rpb25zID09IDApCkBAIC0zMjgsOSArMjk3LDggQEAKICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiVGhlIGNhY2hlIG5vdyBjb250YWlucyAlenUgbWVtYmVyc1xuIiwKICAgICAgICAgICAgICAgICAgICBjb25uYy0+bnVtX2Nvbm4pKTsKICAgICB9Ci0gICAgY29ubi0+ZGF0YSA9IE5VTEw7IC8qIGNsZWFyIHRoZSBhc3NvY2lhdGlvbiAqLwogICAgIGlmKGxvY2spIHsKLSAgICAgIENPTk5fVU5MT0NLKGRhdGEpOworICAgICAgQ09OTkNBQ0hFX1VOTE9DSyhkYXRhKTsKICAgICB9CiAgIH0KIH0KQEAgLTM1OSw3ICszMjcsNyBAQAogICBpZighY29ubmMpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIENPTk5fTE9DSyhkYXRhKTsKKyAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CiAgIEN1cmxfaGFzaF9zdGFydF9pdGVyYXRlKCZjb25uYy0+aGFzaCwgJml0ZXIpOwogCiAgIGhlID0gQ3VybF9oYXNoX25leHRfZWxlbWVudCgmaXRlcik7CkBAIC0zNzcsMTIgKzM0NSwxMiBAQAogICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAKICAgICAgIGlmKDEgPT0gZnVuYyhjb25uLCBwYXJhbSkpIHsKLSAgICAgICAgQ09OTl9VTkxPQ0soZGF0YSk7CisgICAgICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgfQogICAgIH0KICAgfQotICBDT05OX1VOTE9DSyhkYXRhKTsKKyAgQ09OTkNBQ0hFX1VOTE9DSyhkYXRhKTsKICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC00MjMsMTcgKzM5MSwxNSBAQAogICoKICAqIFJldHVybiBUUlVFIGlmIHN0b3JlZCwgRkFMU0UgaWYgY2xvc2VkLgogICovCi1ib29sIEN1cmxfY29ubmNhY2hlX3JldHVybl9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK2Jvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLQogICAvKiBkYXRhLT5tdWx0aS0+bWF4Y29ubmVjdHMgY2FuIGJlIG5lZ2F0aXZlLCBkZWFsIHdpdGggaXQuICovCiAgIHNpemVfdCBtYXhjb25uZWN0cyA9CiAgICAgKGRhdGEtPm11bHRpLT5tYXhjb25uZWN0cyA8IDApID8gZGF0YS0+bXVsdGktPm51bV9lYXN5ICogNDoKICAgICBkYXRhLT5tdWx0aS0+bWF4Y29ubmVjdHM7CiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubl9jYW5kaWRhdGUgPSBOVUxMOwogCi0gIGNvbm4tPmRhdGEgPSBOVUxMOyAvKiBubyBvd25lciBhbnltb3JlICovCiAgIGNvbm4tPmxhc3R1c2VkID0gQ3VybF9ub3coKTsgLyogaXQgd2FzIHVzZWQgdXAgdW50aWwgbm93ICovCiAgIGlmKG1heGNvbm5lY3RzID4gMCAmJgogICAgICBDdXJsX2Nvbm5jYWNoZV9zaXplKGRhdGEpID4gbWF4Y29ubmVjdHMpIHsKQEAgLTUyMyw3ICs0ODksNyBAQAogCiAgIG5vdyA9IEN1cmxfbm93KCk7CiAKLSAgQ09OTl9MT0NLKGRhdGEpOworICBDT05OQ0FDSEVfTE9DSyhkYXRhKTsKICAgQ3VybF9oYXNoX3N0YXJ0X2l0ZXJhdGUoJmNvbm5jLT5oYXNoLCAmaXRlcik7CiAKICAgaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKTsKQEAgLTUzNiw3ICs1MDIsOCBAQAogICAgIHdoaWxlKGN1cnIpIHsKICAgICAgIGNvbm4gPSBjdXJyLT5wdHI7CiAKLSAgICAgIGlmKCFDT05OX0lOVVNFKGNvbm4pICYmICFjb25uLT5kYXRhKSB7CisgICAgICBpZighQ09OTl9JTlVTRShjb25uKSAmJiAhY29ubi0+ZGF0YSAmJiAhY29ubi0+Yml0cy5jbG9zZSAmJgorICAgICAgICAgIWNvbm4tPmJpdHMuY29ubmVjdF9vbmx5KSB7CiAgICAgICAgIC8qIFNldCBoaWdoZXIgc2NvcmUgZm9yIHRoZSBhZ2UgcGFzc2VkIHNpbmNlIHRoZSBjb25uZWN0aW9uIHdhcyB1c2VkICovCiAgICAgICAgIHNjb3JlID0gQ3VybF90aW1lZGlmZihub3csIGNvbm4tPmxhc3R1c2VkKTsKIApAQCAtNTU5LDcgKzUyNiw3IEBACiAgICAgICAgICAgICAgICAgIGNvbm5jLT5udW1fY29ubikpOwogICAgIGNvbm5fY2FuZGlkYXRlLT5kYXRhID0gZGF0YTsgLyogYXNzb2NpYXRlISAqLwogICB9Ci0gIENPTk5fVU5MT0NLKGRhdGEpOworICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgIHJldHVybiBjb25uX2NhbmRpZGF0ZTsKIH0KQEAgLTU2Nyw2ICs1MzQsMTEgQEAKIHZvaWQgQ3VybF9jb25uY2FjaGVfY2xvc2VfYWxsX2Nvbm5lY3Rpb25zKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CisgIGNoYXIgYnVmZmVyW1JFQURCVUZGRVJfTUlOICsgMV07CisgIGlmKCFjb25uYy0+Y2xvc3VyZV9oYW5kbGUpCisgICAgcmV0dXJuOworICBjb25uYy0+Y2xvc3VyZV9oYW5kbGUtPnN0YXRlLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgY29ubmMtPmNsb3N1cmVfaGFuZGxlLT5zZXQuYnVmZmVyX3NpemUgPSBSRUFEQlVGRkVSX01JTjsKIAogICBjb25uID0gY29ubmNhY2hlX2ZpbmRfZmlyc3RfY29ubmVjdGlvbihjb25uYyk7CiAgIHdoaWxlKGNvbm4pIHsKQEAgLTU3NiwxOSArNTQ4LDIxIEBACiAgICAgc2lncGlwZV9pZ25vcmUoY29ubi0+ZGF0YSwgJnBpcGVfc3QpOwogICAgIC8qIFRoaXMgd2lsbCByZW1vdmUgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgY2FjaGUgKi8KICAgICBjb25uY2xvc2UoY29ubiwgImtpbGwgYWxsIik7CisgICAgQ3VybF9jb25uY2FjaGVfcmVtb3ZlX2Nvbm4oY29ubi0+ZGF0YSwgY29ubiwgVFJVRSk7CiAgICAgKHZvaWQpQ3VybF9kaXNjb25uZWN0KGNvbm5jLT5jbG9zdXJlX2hhbmRsZSwgY29ubiwgRkFMU0UpOwogICAgIHNpZ3BpcGVfcmVzdG9yZSgmcGlwZV9zdCk7CiAKICAgICBjb25uID0gY29ubmNhY2hlX2ZpbmRfZmlyc3RfY29ubmVjdGlvbihjb25uYyk7CiAgIH0KIAorICBjb25uYy0+Y2xvc3VyZV9oYW5kbGUtPnN0YXRlLmJ1ZmZlciA9IE5VTEw7CiAgIGlmKGNvbm5jLT5jbG9zdXJlX2hhbmRsZSkgewogICAgIFNJR1BJUEVfVkFSSUFCTEUocGlwZV9zdCk7CiAgICAgc2lncGlwZV9pZ25vcmUoY29ubmMtPmNsb3N1cmVfaGFuZGxlLCAmcGlwZV9zdCk7CiAKICAgICBDdXJsX2hvc3RjYWNoZV9jbGVhbihjb25uYy0+Y2xvc3VyZV9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmMtPmNsb3N1cmVfaGFuZGxlLT5kbnMuaG9zdGNhY2hlKTsKLSAgICBDdXJsX2Nsb3NlKGNvbm5jLT5jbG9zdXJlX2hhbmRsZSk7CisgICAgQ3VybF9jbG9zZSgmY29ubmMtPmNsb3N1cmVfaGFuZGxlKTsKICAgICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwogICB9CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCmluZGV4IDM1YmU5ZTAuLjNkZGEyMWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNCwgTGludXMgTmllbHNlbiBGZWx0emluZywgPGxpbnVzQGhheHguc2U+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKQEAgLTQyLDYgKzQyLDI3IEBACiAjZGVmaW5lIEJVTkRMRV9VTktOT1dOICAgICAwICAvKiBpbml0aWFsIHZhbHVlICovCiAjZGVmaW5lIEJVTkRMRV9NVUxUSVBMRVggICAyCiAKKyNpZmRlZiBDVVJMREVCVUcKKy8qIHRoZSBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGVzZSBtYWNyb3MgbWFrZSBleHRyYSBjZXJ0YWluIHRoYXQgdGhlIGxvY2sgaXMKKyAgIG5ldmVyIGRvdWJseSBsb2NrZWQgb3IgdW5sb2NrZWQgKi8KKyNkZWZpbmUgQ09OTkNBQ0hFX0xPQ0soeCkgaWYoKHgpLT5zaGFyZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDdXJsX3NoYXJlX2xvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNULCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7IFwKKyAgICBERUJVR0FTU0VSVCghKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeCktPnN0YXRlLmNvbm5jYWNoZV9sb2NrID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIENPTk5DQUNIRV9VTkxPQ0soeCkgaWYoKHgpLT5zaGFyZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgREVCVUdBU1NFUlQoKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ3VybF9zaGFyZV91bmxvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNUKTsgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKyNlbHNlCisjZGVmaW5lIENPTk5DQUNIRV9MT0NLKHgpIGlmKCh4KS0+c2hhcmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ3VybF9zaGFyZV9sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpCisjZGVmaW5lIENPTk5DQUNIRV9VTkxPQ0soeCkgaWYoKHgpLT5zaGFyZSkgICAgICAgICAgICAgIFwKKyAgICBDdXJsX3NoYXJlX3VubG9jaygoeCksIENVUkxfTE9DS19EQVRBX0NPTk5FQ1QpCisjZW5kaWYKKwogc3RydWN0IGNvbm5lY3RidW5kbGUgewogICBpbnQgbXVsdGl1c2U7ICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0cyBtdWx0aS11c2UgKi8KICAgc2l6ZV90IG51bV9jb25uZWN0aW9uczsgICAgICAgLyogTnVtYmVyIG9mIGNvbm5lY3Rpb25zIGluIHRoZSBidW5kbGUgKi8KQEAgLTU0LDEzICs3NSwxMyBAQAogCiAvKiByZXR1cm4gdGhlIGNvcnJlY3QgYnVuZGxlLCB0byBhIGhvc3Qgb3IgYSBwcm94eSAqLwogc3RydWN0IGNvbm5lY3RidW5kbGUgKkN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjb25uYyk7Ci12b2lkIEN1cmxfY29ubmNhY2hlX3VubG9jayhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjb25uYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaG9zdHApOwogLyogcmV0dXJucyBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KIHNpemVfdCBDdXJsX2Nvbm5jYWNoZV9zaXplKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotc2l6ZV90IEN1cmxfY29ubmNhY2hlX2J1bmRsZV9zaXplKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAKLWJvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK2Jvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIENVUkxjb2RlIEN1cmxfY29ubmNhY2hlX2FkZF9jb25uKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKSBXQVJOX1VOVVNFRF9SRVNVTFQ7CiB2b2lkIEN1cmxfY29ubmNhY2hlX3JlbW92ZV9jb25uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmMKaW5kZXggMDAyNTM1Yi4uMjkyOTNmMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmVjdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5lY3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzUsNiArNzUsOCBAQAogI2luY2x1ZGUgImNvbm5jYWNoZS5oIgogI2luY2x1ZGUgIm11bHRpaGFuZGxlLmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCisjaW5jbHVkZSAicXVpYy5oIgorI2luY2x1ZGUgInNvY2tzLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtMTY0LDEyICsxNjYsMTMgQEAKIAogc3RhdGljIENVUkxjb2RlCiBzaW5nbGVpcGNvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpLCAvKiBzdGFydCBjb25uZWN0aW5nIHRvIHRoaXMgKi8KLSAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKTsKKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksIC8qIHN0YXJ0IGNvbm5lY3RpbmcgdG8gdGhpcyAqLworICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpOyAgICAgICAgICAvKiAwIG9yIDEgYW1vbmcgdGhlIHRlbXAgb25lcyAqLwogCiAvKgogICogQ3VybF90aW1lbGVmdCgpIHJldHVybnMgdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbGVmdCBhbGxvd2VkIGZvciB0aGUKLSAqIHRyYW5zZmVyL2Nvbm5lY3Rpb24uIElmIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSwgdGhlIHRpbWVvdXQgdGltZSBoYXMgYWxyZWFkeQorICogdHJhbnNmZXIvY29ubmVjdGlvbi4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZXJlJ3Mgbm8gdGltZW91dCAoaWUgdGhlcmUncworICogaW5maW5pdGUgdGltZSBsZWZ0KS4gSWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLCB0aGUgdGltZW91dCB0aW1lIGhhcyBhbHJlYWR5CiAgKiBlbGFwc2VkLgogICoKICAqIFRoZSBzdGFydCB0aW1lIGlzIHN0b3JlZCBpbiBwcm9ncmVzcy50X3N0YXJ0c2luZ2xlIC0gYXMgc2V0IHdpdGgKQEAgLTM2OCw2ICszNzEsMTEgQEAKICAgICAgICAgaW5mb2YoZGF0YSwgIk5hbWUgJyVzJyBmYW1pbHkgJWkgcmVzb2x2ZWQgdG8gJyVzJyBmYW1pbHkgJWlcbiIsCiAgICAgICAgICAgICAgIGRldiwgYWYsIG15aG9zdCwgaC0+YWRkci0+YWlfZmFtaWx5KTsKICAgICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGgpOworICAgICAgICBpZihhZiAhPSBoLT5hZGRyLT5haV9mYW1pbHkpIHsKKyAgICAgICAgICAvKiBiYWQgSVAgdmVyc2lvbiBjb21ibywgc2lnbmFsIHRoZSBjYWxsZXIgdG8gdHJ5IGFub3RoZXIgYWRkcmVzcworICAgICAgICAgICAgIGZhbWlseSBpZiBhdmFpbGFibGUgKi8KKyAgICAgICAgICByZXR1cm4gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CisgICAgICAgIH0KICAgICAgICAgZG9uZSA9IDE7CiAgICAgICB9CiAgICAgICBlbHNlIHsKQEAgLTU0OCwxMyArNTU2LDI3IEBACiAgIHJldHVybiByYzsKIH0KIAotLyogVXNlZCB3aXRoaW4gdGhlIG11bHRpIGludGVyZmFjZS4gVHJ5IG5leHQgSVAgYWRkcmVzcywgcmV0dXJuIFRSVUUgaWYgbm8KKy8qIHVwZGF0ZSB0ZW1wYWRkclt0ZW1waW5kZXhdICh0byB0aGUgbmV4dCBlbnRyeSksIG1ha2VzIHN1cmUgdG8gc3RpY2sKKyAgIHRvIHRoZSBjb3JyZWN0IGZhbWlseSAqLworc3RhdGljIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaW5leHQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlbXBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV4dCkgLyogdXNlIG5leHQgZW50cnk/ICovCit7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSA9IGNvbm4tPnRlbXBhZGRyW3RlbXBpbmRleF07CisgIGlmKGFpICYmIG5leHQpCisgICAgYWkgPSBhaS0+YWlfbmV4dDsKKyAgd2hpbGUoYWkgJiYgKGFpLT5haV9mYW1pbHkgIT0gY29ubi0+dGVtcGZhbWlseVt0ZW1waW5kZXhdKSkKKyAgICBhaSA9IGFpLT5haV9uZXh0OworICBjb25uLT50ZW1wYWRkclt0ZW1waW5kZXhdID0gYWk7CisgIHJldHVybiBhaTsKK30KKworLyogVXNlZCB3aXRoaW4gdGhlIG11bHRpIGludGVyZmFjZS4gVHJ5IG5leHQgSVAgYWRkcmVzcywgcmV0dXJucyBlcnJvciBpZiBubwogICAgbW9yZSBhZGRyZXNzIGV4aXN0cyBvciBlcnJvciAqLwogc3RhdGljIENVUkxjb2RlIHRyeW5leHRpcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpCiB7Ci0gIGNvbnN0IGludCBvdGhlciA9IHRlbXBpbmRleCBeIDE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKIAogICAvKiBGaXJzdCBjbGVhbiB1cCBhZnRlciB0aGUgZmFpbGVkIHNvY2tldC4KQEAgLTU2NSwzOCArNTg3LDE1IEBACiAgIGNvbm4tPnRlbXBzb2NrW3RlbXBpbmRleF0gPSBDVVJMX1NPQ0tFVF9CQUQ7CiAKICAgaWYoc29ja2luZGV4ID09IEZJUlNUU09DS0VUKSB7Ci0gICAgQ3VybF9hZGRyaW5mbyAqYWkgPSBOVUxMOwotICAgIGludCBmYW1pbHkgPSBBRl9VTlNQRUM7Ci0KLSAgICBpZihjb25uLT50ZW1wYWRkclt0ZW1waW5kZXhdKSB7Ci0gICAgICAvKiBmaW5kIG5leHQgYWRkcmVzcyBpbiB0aGUgc2FtZSBwcm90b2NvbCBmYW1pbHkgKi8KLSAgICAgIGZhbWlseSA9IGNvbm4tPnRlbXBhZGRyW3RlbXBpbmRleF0tPmFpX2ZhbWlseTsKLSAgICAgIGFpID0gY29ubi0+dGVtcGFkZHJbdGVtcGluZGV4XS0+YWlfbmV4dDsKLSAgICB9Ci0jaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBlbHNlIGlmKGNvbm4tPnRlbXBhZGRyWzBdKSB7Ci0gICAgICAvKiBoYXBweSBleWViYWxscyAtIHRyeSB0aGUgb3RoZXIgcHJvdG9jb2wgZmFtaWx5ICovCi0gICAgICBpbnQgZmlyc3RmYW1pbHkgPSBjb25uLT50ZW1wYWRkclswXS0+YWlfZmFtaWx5OwotICAgICAgZmFtaWx5ID0gKGZpcnN0ZmFtaWx5ID09IEFGX0lORVQpID8gQUZfSU5FVDYgOiBBRl9JTkVUOwotICAgICAgYWkgPSBjb25uLT50ZW1wYWRkclswXS0+YWlfbmV4dDsKLSAgICB9Ci0jZW5kaWYKKyAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWkgPSBjb25uLT50ZW1wYWRkclt0ZW1waW5kZXhdOwogCiAgICAgd2hpbGUoYWkpIHsKLSAgICAgIGlmKGNvbm4tPnRlbXBhZGRyW290aGVyXSkgewotICAgICAgICAvKiB3ZSBjYW4gc2FmZWx5IHNraXAgYWRkcmVzc2VzIG9mIHRoZSBvdGhlciBwcm90b2NvbCBmYW1pbHkgKi8KLSAgICAgICAgd2hpbGUoYWkgJiYgYWktPmFpX2ZhbWlseSAhPSBmYW1pbHkpCi0gICAgICAgICAgYWkgPSBhaS0+YWlfbmV4dDsKLSAgICAgIH0KLQogICAgICAgaWYoYWkpIHsKLSAgICAgICAgcmVzdWx0ID0gc2luZ2xlaXBjb25uZWN0KGNvbm4sIGFpLCAmY29ubi0+dGVtcHNvY2tbdGVtcGluZGV4XSk7CisgICAgICAgIHJlc3VsdCA9IHNpbmdsZWlwY29ubmVjdChjb25uLCBhaSwgdGVtcGluZGV4KTsKICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX0NPVUxETlRfQ09OTkVDVCkgewotICAgICAgICAgIGFpID0gYWktPmFpX25leHQ7CisgICAgICAgICAgYWkgPSBhaW5leHQoY29ubiwgdGVtcGluZGV4LCBUUlVFKTsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIGNvbm4tPnRlbXBhZGRyW3RlbXBpbmRleF0gPSBhaTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYyMCwxMyArNjE5LDEwIEBACiAgIGNvbm4tPmRhdGEtPmluZm8uY29ubl9sb2NhbF9wb3J0ID0gY29ubi0+bG9jYWxfcG9ydDsKIH0KIAotVU5JVFRFU1QgYm9vbCBnZXRhZGRyZXNzaW5mbyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwb3J0KTsKLQogLyogcmV0cmlldmVzIGlwIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSBhIHNvY2thZGRyIHN0cnVjdHVyZS4KICAgIG5vdGUgaXQgY2FsbHMgQ3VybF9pbmV0X250b3Agd2hpY2ggc2V0cyBlcnJubyBvbiBmYWlsLCBub3QgU09DS0VSUk5PLiAqLwotVU5JVFRFU1QgYm9vbCBnZXRhZGRyZXNzaW5mbyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwb3J0KQorYm9vbCBDdXJsX2FkZHIyc3RyaW5nKHN0cnVjdCBzb2NrYWRkciAqc2EsIGN1cmxfc29ja2xlbl90IHNhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZHIsIGxvbmcgKnBvcnQpCiB7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2kgPSBOVUxMOwogI2lmZGVmIEVOQUJMRV9JUFY2CkBAIC02MzQsNiArNjMwLDggQEAKICNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9TWVNfVU5fSCkgJiYgZGVmaW5lZChBRl9VTklYKQogICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnN1ID0gTlVMTDsKKyNlbHNlCisgICh2b2lkKXNhbGVuOwogI2VuZGlmCiAKICAgc3dpdGNoKHNhLT5zYV9mYW1pbHkpIHsKQEAgLTY1OSw4ICs2NTcsMTIgQEAKICNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9TWVNfVU5fSCkgJiYgZGVmaW5lZChBRl9VTklYKQogICAgIGNhc2UgQUZfVU5JWDoKLSAgICAgIHN1ID0gKHN0cnVjdCBzb2NrYWRkcl91biopc2E7Ci0gICAgICBtc25wcmludGYoYWRkciwgTUFYX0lQQURSX0xFTiwgIiVzIiwgc3UtPnN1bl9wYXRoKTsKKyAgICAgIGlmKHNhbGVuID4gKGN1cmxfc29ja2xlbl90KXNpemVvZihzYV9mYW1pbHlfdCkpIHsKKyAgICAgICAgc3UgPSAoc3RydWN0IHNvY2thZGRyX3VuKilzYTsKKyAgICAgICAgbXNucHJpbnRmKGFkZHIsIE1BWF9JUEFEUl9MRU4sICIlcyIsIHN1LT5zdW5fcGF0aCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGFkZHJbMF0gPSAwOyAvKiBzb2NrZXQgd2l0aCBubyBuYW1lICovCiAgICAgICAqcG9ydCA9IDA7CiAgICAgICByZXR1cm4gVFJVRTsKICNlbmRpZgpAQCAtNjc4LDYyICs2ODAsMTM2IEBACiAgICBjb25uZWN0aW9uICovCiB2b2lkIEN1cmxfdXBkYXRlY29ubmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IHNvY2tmZCkKIHsKLSAgaWYoY29ubi0+c29ja3R5cGUgPT0gU09DS19ER1JBTSkKLSAgICAvKiB0aGVyZSdzIG5vIGNvbm5lY3Rpb24hICovCi0gICAgcmV0dXJuOwotCisgIGlmKGNvbm4tPnRyYW5zcG9ydCA9PSBUUk5TUFJUX1RDUCkgewogI2lmIGRlZmluZWQoSEFWRV9HRVRQRUVSTkFNRSkgfHwgZGVmaW5lZChIQVZFX0dFVFNPQ0tOQU1FKQotICBpZighY29ubi0+Yml0cy5yZXVzZSAmJiAhY29ubi0+Yml0cy50Y3BfZmFzdG9wZW4pIHsKLSAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwotICAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3NyZW07Ci0gICAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBzc2xvYzsKLSAgICBjdXJsX3NvY2tsZW5fdCBsZW47CisgICAgaWYoIWNvbm4tPmJpdHMucmV1c2UgJiYgIWNvbm4tPmJpdHMudGNwX2Zhc3RvcGVuKSB7CisgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CisgICAgICBzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlIHNzcmVtOworICAgICAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBzc2xvYzsKKyAgICAgIGN1cmxfc29ja2xlbl90IHBsZW47CisgICAgICBjdXJsX3NvY2tsZW5fdCBzbGVuOwogI2lmZGVmIEhBVkVfR0VUUEVFUk5BTUUKLSAgICBsZW4gPSBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSk7Ci0gICAgaWYoZ2V0cGVlcm5hbWUoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyKikgJnNzcmVtLCAmbGVuKSkgewotICAgICAgaW50IGVycm9yID0gU09DS0VSUk5POwotICAgICAgZmFpbGYoZGF0YSwgImdldHBlZXJuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKLSAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGVycm9yLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQorICAgICAgcGxlbiA9IHNpemVvZihzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlKTsKKyAgICAgIGlmKGdldHBlZXJuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzc3JlbSwgJnBsZW4pKSB7CisgICAgICAgIGludCBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgZmFpbGYoZGF0YSwgImdldHBlZXJuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoZXJyb3IsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQogI2VuZGlmCiAjaWZkZWYgSEFWRV9HRVRTT0NLTkFNRQotICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlKTsKLSAgICBtZW1zZXQoJnNzbG9jLCAwLCBzaXplb2Yoc3Nsb2MpKTsKLSAgICBpZihnZXRzb2NrbmFtZShzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc3Nsb2MsICZsZW4pKSB7Ci0gICAgICBpbnQgZXJyb3IgPSBTT0NLRVJSTk87Ci0gICAgICBmYWlsZihkYXRhLCAiZ2V0c29ja25hbWUoKSBmYWlsZWQgd2l0aCBlcnJubyAlZDogJXMiLAotICAgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoZXJyb3IsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAgIHJldHVybjsKLSAgICB9CisgICAgICBzbGVuID0gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpOworICAgICAgbWVtc2V0KCZzc2xvYywgMCwgc2l6ZW9mKHNzbG9jKSk7CisgICAgICBpZihnZXRzb2NrbmFtZShzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc3Nsb2MsICZzbGVuKSkgeworICAgICAgICBpbnQgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICAgIGZhaWxmKGRhdGEsICJnZXRzb2NrbmFtZSgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGVycm9yLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KICNlbmRpZgogI2lmZGVmIEhBVkVfR0VUUEVFUk5BTUUKLSAgICBpZighZ2V0YWRkcmVzc2luZm8oKHN0cnVjdCBzb2NrYWRkciopJnNzcmVtLAotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wcmltYXJ5X2lwLCAmY29ubi0+cHJpbWFyeV9wb3J0KSkgewotICAgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCi0gICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtZW1jcHkoY29ubi0+aXBfYWRkcl9zdHIsIGNvbm4tPnByaW1hcnlfaXAsIE1BWF9JUEFEUl9MRU4pOworICAgICAgaWYoIUN1cmxfYWRkcjJzdHJpbmcoKHN0cnVjdCBzb2NrYWRkciopJnNzcmVtLCBwbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cHJpbWFyeV9pcCwgJmNvbm4tPnByaW1hcnlfcG9ydCkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIG1lbWNweShjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cHJpbWFyeV9pcCwgTUFYX0lQQURSX0xFTik7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVFNPQ0tOQU1FCi0gICAgaWYoIWdldGFkZHJlc3NpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc2xvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+bG9jYWxfaXAsICZjb25uLT5sb2NhbF9wb3J0KSkgewotICAgICAgZmFpbGYoZGF0YSwgInNzbG9jIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCi0gICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc2xvYywgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmxvY2FsX2lwLCAmY29ubi0+bG9jYWxfcG9ydCkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgInNzbG9jIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KICNlbmRpZgotICB9CisgICAgfQogI2Vsc2UgLyogIUhBVkVfR0VUU09DS05BTUUgJiYgIUhBVkVfR0VUUEVFUk5BTUUgKi8KLSAgKHZvaWQpc29ja2ZkOyAvKiB1bnVzZWQgKi8KKyAgICAodm9pZClzb2NrZmQ7IC8qIHVudXNlZCAqLwogI2VuZGlmCisgIH0gLyogZW5kIG9mIFRDUC1vbmx5IHNlY3Rpb24gKi8KIAogICAvKiBwZXJzaXN0IGNvbm5lY3Rpb24gaW5mbyBpbiBzZXNzaW9uIGhhbmRsZSAqLwogICBDdXJsX3BlcnNpc3Rjb25uaW5mbyhjb25uKTsKIH0KIAorLyogQWZ0ZXIgYSBUQ1AgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgaGFzIGJlZW4gdmVyaWZpZWQsIHRoaXMgZnVuY3Rpb24gZG9lcworICAgdGhlIG5leHQgbWFnaWMgc3RlcHMuIElmICdkb25lJyBpc24ndCBzZXQgVFJVRSwgaXQgaXMgbm90IGRvbmUgeWV0IGFuZAorICAgbXVzdCBiZSBjYWxsZWQgYWdhaW4uCisKKyAgIE5vdGU6IHRoaXMgZnVuY3Rpb24ncyBzdWItZnVuY3Rpb25zIGNhbGwgZmFpbGYoKQorCisqLworc3RhdGljIENVUkxjb2RlIGNvbm5lY3RfU09DS1Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGlmKGNvbm4tPmJpdHMuc29ja3Nwcm94eSkgeworICAgIC8qIGZvciB0aGUgc2Vjb25kYXJ5IHNvY2tldCAoRlRQKSwgdXNlIHRoZSAiY29ubmVjdCB0byBob3N0IgorICAgICAqIGJ1dCBpZ25vcmUgdGhlICJjb25uZWN0IHRvIHBvcnQiICh1c2UgdGhlIHNlY29uZGFyeSBwb3J0KQorICAgICAqLworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0ID0KKyAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID8KKyAgICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICAgIGNvbm4tPmJpdHMuY29ubl90b19ob3N0ID8KKyAgICAgIGNvbm4tPmNvbm5fdG9faG9zdC5uYW1lIDoKKyAgICAgIHNvY2tpbmRleCA9PSBTRUNPTkRBUllTT0NLRVQgPworICAgICAgY29ubi0+c2Vjb25kYXJ5aG9zdG5hbWUgOiBjb25uLT5ob3N0Lm5hbWU7CisgICAgY29uc3QgaW50IHBvcnQgPQorICAgICAgY29ubi0+Yml0cy5odHRwcHJveHkgPyAoaW50KWNvbm4tPmh0dHBfcHJveHkucG9ydCA6CisgICAgICBzb2NraW5kZXggPT0gU0VDT05EQVJZU09DS0VUID8gY29ubi0+c2Vjb25kYXJ5X3BvcnQgOgorICAgICAgY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgPyBjb25uLT5jb25uX3RvX3BvcnQgOgorICAgICAgY29ubi0+cmVtb3RlX3BvcnQ7CisgICAgc3dpdGNoKGNvbm4tPnNvY2tzX3Byb3h5LnByb3h5dHlwZSkgeworICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNToKKyAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUU6CisgICAgICByZXN1bHQgPSBDdXJsX1NPQ0tTNShjb25uLT5zb2Nrc19wcm94eS51c2VyLCBjb25uLT5zb2Nrc19wcm94eS5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBzb2NraW5kZXgsIGNvbm4sIGRvbmUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzQ6CisgICAgY2FzZSBDVVJMUFJPWFlfU09DS1M0QToKKyAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M0KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGhvc3QsIHBvcnQsIHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4sIGRvbmUpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInVua25vd24gcHJveHl0eXBlIG9wdGlvbiBnaXZlbiIpOworICAgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0gLyogc3dpdGNoIHByb3h5dHlwZSAqLworICB9CisgIGVsc2UKKyNlbHNlCisgICAgKHZvaWQpY29ubjsKKyAgICAodm9pZClzb2NraW5kZXg7CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisgICAgKmRvbmUgPSBUUlVFOyAvKiBubyBTT0NLUyBwcm94eSwgc28gY29uc2lkZXIgdXMgY29ubmVjdGVkICovCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHBvc3RfU09DS1MoKSBpcyBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNvbm5lY3QgdG8gdGhlIHBlZXIsIHdoaWNoCisgKiAqY291bGQqIGJlIGEgU09DS1MgcHJveHkKKyAqLworc3RhdGljIHZvaWQgcG9zdF9TT0NLUyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCkKK3sKKyAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W3NvY2tpbmRleF0gPSBUUlVFOworCisgICpjb25uZWN0ZWQgPSBUUlVFOworICBpZihzb2NraW5kZXggPT0gRklSU1RTT0NLRVQpCisgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9DT05ORUNUKTsgLyogY29ubmVjdCBkb25lICovCisgIEN1cmxfdXBkYXRlY29ubmluZm8oY29ubiwgY29ubi0+c29ja1tzb2NraW5kZXhdKTsKKyAgQ3VybF92ZXJib3NlY29ubmVjdChjb25uKTsKKyAgY29ubi0+ZGF0YS0+aW5mby5udW1jb25uZWN0cysrOyAvKiB0byB0cmFjayB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG1hZGUgKi8KK30KKwogLyoKICAqIEN1cmxfaXNfY29ubmVjdGVkKCkgY2hlY2tzIGlmIHRoZSBzb2NrZXQgaGFzIGNvbm5lY3RlZC4KICAqLwpAQCAtNzQ3LDggKzgyMyw4IEBACiAgIHRpbWVkaWZmX3QgYWxsb3c7CiAgIGludCBlcnJvciA9IDA7CiAgIHN0cnVjdCBjdXJsdGltZSBub3c7Ci0gIGludCByYzsKLSAgaW50IGk7CisgIGludCByYyA9IDA7CisgIHVuc2lnbmVkIGludCBpOwogCiAgIERFQlVHQVNTRVJUKHNvY2tpbmRleCA+PSBGSVJTVFNPQ0tFVCAmJiBzb2NraW5kZXggPD0gU0VDT05EQVJZU09DS0VUKTsKIApAQCAtNzcxLDMzICs4NDcsNjIgQEAKICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICB9CiAKKyAgaWYoU09DS1NfU1RBVEUoY29ubi0+Y25uY3Quc3RhdGUpKSB7CisgICAgLyogc3RpbGwgZG9pbmcgU09DS1MgKi8KKyAgICByZXN1bHQgPSBjb25uZWN0X1NPQ0tTKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKKyAgICBpZighcmVzdWx0ICYmICpjb25uZWN0ZWQpCisgICAgICBwb3N0X1NPQ0tTKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKICAgZm9yKGkgPSAwOyBpPDI7IGkrKykgewogICAgIGNvbnN0IGludCBvdGhlciA9IGkgXiAxOwogICAgIGlmKGNvbm4tPnRlbXBzb2NrW2ldID09IENVUkxfU09DS0VUX0JBRCkKICAgICAgIGNvbnRpbnVlOwotCisgICAgZXJyb3IgPSAwOworI2lmZGVmIEVOQUJMRV9RVUlDCisgICAgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykgeworICAgICAgcmVzdWx0ID0gQ3VybF9xdWljX2lzX2Nvbm5lY3RlZChjb25uLCBpLCBjb25uZWN0ZWQpOworICAgICAgaWYoIXJlc3VsdCAmJiAqY29ubmVjdGVkKSB7CisgICAgICAgIC8qIHVzZSB0aGlzIHNvY2tldCBmcm9tIG5vdyBvbiAqLworICAgICAgICBjb25uLT5zb2NrW3NvY2tpbmRleF0gPSBjb25uLT50ZW1wc29ja1tpXTsKKyAgICAgICAgY29ubi0+aXBfYWRkciA9IGNvbm4tPnRlbXBhZGRyW2ldOworICAgICAgICBjb25uLT50ZW1wc29ja1tpXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgICAgcG9zdF9TT0NLUyhjb25uLCBzb2NraW5kZXgsIGNvbm5lY3RlZCk7CisgICAgICAgIGNvbm5rZWVwKGNvbm4sICJIVFRQLzMgZGVmYXVsdCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CiAjaWZkZWYgbXBlaXgKLSAgICAvKiBDYWxsIHRoaXMgZnVuY3Rpb24gb25jZSBub3csIGFuZCBpZ25vcmUgdGhlIHJlc3VsdHMuIFdlIGRvIHRoaXMgdG8KLSAgICAgICAiY2xlYXIiIHRoZSBlcnJvciBzdGF0ZSBvbiB0aGUgc29ja2V0IHNvIHRoYXQgd2UgY2FuIGxhdGVyIHJlYWQgaXQKLSAgICAgICByZWxpYWJseS4gVGhpcyBpcyByZXBvcnRlZCBuZWNlc3Nhcnkgb24gdGhlIE1QRS9pWCBvcGVyYXRpbmcgc3lzdGVtLiAqLwotICAgICh2b2lkKXZlcmlmeWNvbm5lY3QoY29ubi0+dGVtcHNvY2tbaV0sIE5VTEwpOworICAgICAgLyogQ2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2Ugbm93LCBhbmQgaWdub3JlIHRoZSByZXN1bHRzLiBXZSBkbyB0aGlzIHRvCisgICAgICAgICAiY2xlYXIiIHRoZSBlcnJvciBzdGF0ZSBvbiB0aGUgc29ja2V0IHNvIHRoYXQgd2UgY2FuIGxhdGVyIHJlYWQgaXQKKyAgICAgICAgIHJlbGlhYmx5LiBUaGlzIGlzIHJlcG9ydGVkIG5lY2Vzc2FyeSBvbiB0aGUgTVBFL2lYIG9wZXJhdGluZworICAgICAgICAgc3lzdGVtLiAqLworICAgICAgKHZvaWQpdmVyaWZ5Y29ubmVjdChjb25uLT50ZW1wc29ja1tpXSwgTlVMTCk7CiAjZW5kaWYKIAotICAgIC8qIGNoZWNrIHNvY2tldCBmb3IgY29ubmVjdCAqLwotICAgIHJjID0gU09DS0VUX1dSSVRBQkxFKGNvbm4tPnRlbXBzb2NrW2ldLCAwKTsKKyAgICAgIC8qIGNoZWNrIHNvY2tldCBmb3IgY29ubmVjdCAqLworICAgICAgcmMgPSBTT0NLRVRfV1JJVEFCTEUoY29ubi0+dGVtcHNvY2tbaV0sIDApOworICAgIH0KIAogICAgIGlmKHJjID09IDApIHsgLyogbm8gY29ubmVjdGlvbiB5ZXQgKi8KLSAgICAgIGVycm9yID0gMDsKLSAgICAgIGlmKEN1cmxfdGltZWRpZmYobm93LCBjb25uLT5jb25uZWN0dGltZSkgPj0gY29ubi0+dGltZW91dG1zX3Blcl9hZGRyKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJBZnRlciAlbGRtcyBjb25uZWN0IHRpbWUsIG1vdmUgb24hXG4iLAotICAgICAgICAgICAgICBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHIpOworICAgICAgaWYoQ3VybF90aW1lZGlmZihub3csIGNvbm4tPmNvbm5lY3R0aW1lKSA+PQorICAgICAgICAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyW2ldKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJBZnRlciAlIiBDVVJMX0ZPUk1BVF9USU1FRElGRl9UCisgICAgICAgICAgICAgICJtcyBjb25uZWN0IHRpbWUsIG1vdmUgb24hXG4iLCBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHJbaV0pOwogICAgICAgICBlcnJvciA9IEVUSU1FRE9VVDsKICAgICAgIH0KIAogICAgICAgLyogc2hvdWxkIHdlIHRyeSBhbm90aGVyIHByb3RvY29sIGZhbWlseT8gKi8KLSAgICAgIGlmKGkgPT0gMCAmJiBjb25uLT50ZW1wYWRkclsxXSA9PSBOVUxMICYmCisgICAgICBpZihpID09IDAgJiYgIWNvbm4tPmJpdHMucGFyYWxsZWxfY29ubmVjdCAmJgogICAgICAgICAgKEN1cmxfdGltZWRpZmYobm93LCBjb25uLT5jb25uZWN0dGltZSkgPj0KICAgICAgICAgICBkYXRhLT5zZXQuaGFwcHlfZXllYmFsbHNfdGltZW91dCkpIHsKKyAgICAgICAgY29ubi0+Yml0cy5wYXJhbGxlbF9jb25uZWN0ID0gVFJVRTsgLyogc3RhcnRpbmcgbm93ICovCiAgICAgICAgIHRyeW5leHRpcChjb25uLCBzb2NraW5kZXgsIDEpOwogICAgICAgfQogICAgIH0KQEAgLTgxOSwxOCArOTI0LDEzIEBACiAgICAgICAgICAgY29ubi0+dGVtcHNvY2tbb3RoZXJdID0gQ1VSTF9TT0NLRVRfQkFEOwogICAgICAgICB9CiAKLSAgICAgICAgLyogc2VlIGlmIHdlIG5lZWQgdG8gZG8gYW55IHByb3h5IG1hZ2ljIGZpcnN0IG9uY2Ugd2UgY29ubmVjdGVkICovCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfY29ubmVjdGVkX3Byb3h5KGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgLyogc2VlIGlmIHdlIG5lZWQgdG8ga2ljayBvZmYgYW55IFNPQ0tTIHByb3h5IG1hZ2ljIG9uY2Ugd2UKKyAgICAgICAgICAgY29ubmVjdGVkICovCisgICAgICAgIHJlc3VsdCA9IGNvbm5lY3RfU09DS1MoY29ubiwgc29ja2luZGV4LCBjb25uZWN0ZWQpOworICAgICAgICBpZihyZXN1bHQgfHwgISpjb25uZWN0ZWQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICBjb25uLT5iaXRzLnRjcGNvbm5lY3Rbc29ja2luZGV4XSA9IFRSVUU7Ci0KLSAgICAgICAgKmNvbm5lY3RlZCA9IFRSVUU7Ci0gICAgICAgIGlmKHNvY2tpbmRleCA9PSBGSVJTVFNPQ0tFVCkKLSAgICAgICAgICBDdXJsX3BncnNUaW1lKGRhdGEsIFRJTUVSX0NPTk5FQ1QpOyAvKiBjb25uZWN0IGRvbmUgKi8KLSAgICAgICAgQ3VybF91cGRhdGVjb25uaW5mbyhjb25uLCBjb25uLT5zb2NrW3NvY2tpbmRleF0pOwotICAgICAgICBDdXJsX3ZlcmJvc2Vjb25uZWN0KGNvbm4pOworICAgICAgICBwb3N0X1NPQ0tTKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKIAogICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICB9CkBAIC04NDgsNTEgKzk0OCw3MCBAQAogICAgICAgU0VUX1NPQ0tFUlJOTyhlcnJvcik7CiAgICAgICBpZihjb25uLT50ZW1wYWRkcltpXSkgewogICAgICAgICBDVVJMY29kZSBzdGF0dXM7CisjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKICAgICAgICAgY2hhciBpcGFkZHJlc3NbTUFYX0lQQURSX0xFTl07CiAgICAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07Ci0gICAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29ubi0+dGVtcGFkZHJbaV0sIGlwYWRkcmVzcywgTUFYX0lQQURSX0xFTik7CisgICAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29ubi0+dGVtcGFkZHJbaV0sIGlwYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaXBhZGRyZXNzKSk7CiAgICAgICAgIGluZm9mKGRhdGEsICJjb25uZWN0IHRvICVzIHBvcnQgJWxkIGZhaWxlZDogJXNcbiIsCiAgICAgICAgICAgICAgIGlwYWRkcmVzcywgY29ubi0+cG9ydCwKICAgICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihlcnJvciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworI2VuZGlmCiAKLSAgICAgICAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyID0gY29ubi0+dGVtcGFkZHJbaV0tPmFpX25leHQgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IDogYWxsb3cgLyAyOwotCisgICAgICAgIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkcltpXSA9IGNvbm4tPnRlbXBhZGRyW2ldLT5haV9uZXh0ID09IE5VTEwgPworICAgICAgICAgIGFsbG93IDogYWxsb3cgLyAyOworICAgICAgICBhaW5leHQoY29ubiwgaSwgVFJVRSk7CiAgICAgICAgIHN0YXR1cyA9IHRyeW5leHRpcChjb25uLCBzb2NraW5kZXgsIGkpOwotICAgICAgICBpZihzdGF0dXMgIT0gQ1VSTEVfQ09VTEROVF9DT05ORUNUCi0gICAgICAgICAgICB8fCBjb25uLT50ZW1wc29ja1tvdGhlcl0gPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgICAgICBpZigoc3RhdHVzICE9IENVUkxFX0NPVUxETlRfQ09OTkVDVCkgfHwKKyAgICAgICAgICAgY29ubi0+dGVtcHNvY2tbb3RoZXJdID09IENVUkxfU09DS0VUX0JBRCkKICAgICAgICAgICAvKiB0aGUgbGFzdCBhdHRlbXB0IGZhaWxlZCBhbmQgbm8gb3RoZXIgc29ja2V0cyByZW1haW4gb3BlbiAqLwogICAgICAgICAgIHJlc3VsdCA9IHN0YXR1czsKICAgICAgIH0KICAgICB9CiAgIH0KIAotICBpZihyZXN1bHQpIHsKKyAgaWYocmVzdWx0ICYmCisgICAgIChjb25uLT50ZW1wc29ja1swXSA9PSBDVVJMX1NPQ0tFVF9CQUQpICYmCisgICAgIChjb25uLT50ZW1wc29ja1sxXSA9PSBDVVJMX1NPQ0tFVF9CQUQpKSB7CiAgICAgLyogbm8gbW9yZSBhZGRyZXNzZXMgdG8gdHJ5ICovCiAgICAgY29uc3QgY2hhciAqaG9zdG5hbWU7CiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKIAotICAgIC8qIGlmIHRoZSBmaXJzdCBhZGRyZXNzIGZhbWlseSBydW5zIG91dCBvZiBhZGRyZXNzZXMgdG8gdHJ5IGJlZm9yZQotICAgICAgIHRoZSBoYXBweSBleWViYWxsIHRpbWVvdXQsIGdvIGFoZWFkIGFuZCB0cnkgdGhlIG5leHQgZmFtaWx5IG5vdyAqLwotICAgIGlmKGNvbm4tPnRlbXBhZGRyWzFdID09IE5VTEwpIHsKLSAgICAgIHJlc3VsdCA9IHRyeW5leHRpcChjb25uLCBzb2NraW5kZXgsIDEpOwotICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgLyogaWYgdGhlIGZpcnN0IGFkZHJlc3MgZmFtaWx5IHJ1bnMgb3V0IG9mIGFkZHJlc3NlcyB0byB0cnkgYmVmb3JlIHRoZQorICAgICAgIGhhcHB5IGV5ZWJhbGwgdGltZW91dCwgZ28gYWhlYWQgYW5kIHRyeSB0aGUgbmV4dCBmYW1pbHkgbm93ICovCisgICAgcmVzdWx0ID0gdHJ5bmV4dGlwKGNvbm4sIHNvY2tpbmRleCwgMSk7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KQogICAgICAgaG9zdG5hbWUgPSBjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWU7CiAgICAgZWxzZSBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKICAgICAgIGhvc3RuYW1lID0gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWU7Ci0gICAgZWxzZSBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKLSAgICAgIGhvc3RuYW1lID0gY29ubi0+Y29ubl90b19ob3N0Lm5hbWU7CisgICAgZWxzZQorI2VuZGlmCisgICAgICBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKKyAgICAgICAgaG9zdG5hbWUgPSBjb25uLT5jb25uX3RvX2hvc3QubmFtZTsKICAgICBlbHNlCiAgICAgICBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKIAogICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gY29ubmVjdCB0byAlcyBwb3J0ICVsZDogJXMiLAogICAgICAgICAgIGhvc3RuYW1lLCBjb25uLT5wb3J0LAogICAgICAgICAgIEN1cmxfc3RyZXJyb3IoZXJyb3IsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKworICAgIEN1cmxfcXVpY19kaXNjb25uZWN0KGNvbm4sIDApOworICAgIEN1cmxfcXVpY19kaXNjb25uZWN0KGNvbm4sIDEpOworCisjaWZkZWYgV1NBRVRJTUVET1VUCisgICAgaWYoV1NBRVRJTUVET1VUID09IGRhdGEtPnN0YXRlLm9zX2Vycm5vKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworI2VsaWYgZGVmaW5lZChFVElNRURPVVQpCisgICAgaWYoRVRJTUVET1VUID09IGRhdGEtPnN0YXRlLm9zX2Vycm5vKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworI2VuZGlmCiAgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IENVUkxFX09LOyAvKiBzdGlsbCB0cnlpbmcgKi8KIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTAwLDE0ICsxMDE5LDEyIEBACiBzdGF0aWMgdm9pZCB0Y3Bub2RlbGF5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQpCiB7CiAjaWYgZGVmaW5lZChUQ1BfTk9ERUxBWSkKLSNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSNlbmRpZgogICBjdXJsX3NvY2tsZW5fdCBvbm9mZiA9IChjdXJsX3NvY2tsZW5fdCkgMTsKICAgaW50IGxldmVsID0gSVBQUk9UT19UQ1A7CisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07Ci0KLSNpZiBkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisjZWxzZQogICAodm9pZCkgY29ubjsKICNlbmRpZgogCkBAIC05MTUsOCArMTAzMiw2IEBACiAgICAgICAgICAgICAgICAgc2l6ZW9mKG9ub2ZmKSkgPCAwKQogICAgIGluZm9mKGRhdGEsICJDb3VsZCBub3Qgc2V0IFRDUF9OT0RFTEFZOiAlc1xuIiwKICAgICAgICAgICBDdXJsX3N0cmVycm9yKFNPQ0tFUlJOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICBlbHNlCi0gICAgaW5mb2YoZGF0YSwgIlRDUF9OT0RFTEFZIHNldFxuIik7CiAjZWxzZQogICAodm9pZCljb25uOwogICAodm9pZClzb2NrZmQ7CkBAIC05OTgsOCArMTExMyw4IEBACiAgKiBoYXZpbmcgY29ubmVjdGVkLgogICovCiBzdGF0aWMgQ1VSTGNvZGUgc2luZ2xlaXBjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2twKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpCiB7CiAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX2V4IGFkZHI7CiAgIGludCByYyA9IC0xOwpAQCAtMTAxNSwxOSArMTEzMCwxNiBAQAogICBpbnQgb3B0dmFsID0gMTsKICNlbmRpZgogICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwotCisgIGN1cmxfc29ja2V0X3QgKnNvY2twID0gJmNvbm4tPnRlbXBzb2NrW3RlbXBpbmRleF07CiAgICpzb2NrcCA9IENVUkxfU09DS0VUX0JBRDsKIAogICByZXN1bHQgPSBDdXJsX3NvY2tldChjb25uLCBhaSwgJmFkZHIsICZzb2NrZmQpOwogICBpZihyZXN1bHQpCi0gICAgLyogRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc29ja2V0LCBidXQgc3RpbGwgcmV0dXJuIE9LIHNpbmNlIHdlIHNpZ25hbCB0aGUKLSAgICAgICBsYWNrIG9mIHNvY2tldCBhcyB3ZWxsLiBUaGlzIGFsbG93cyB0aGUgcGFyZW50IGZ1bmN0aW9uIHRvIGtlZXAgbG9vcGluZwotICAgICAgIG92ZXIgYWx0ZXJuYXRpdmUgYWRkcmVzc2VzL3NvY2tldCBmYW1pbGllcyBldGMuICovCi0gICAgcmV0dXJuIENVUkxFX09LOworICAgIHJldHVybiByZXN1bHQ7CiAKICAgLyogc3RvcmUgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQgdXNlZCBpbiB0aGlzIGNvbm5lY3Rpb24gYXR0ZW1wdCAqLwotICBpZighZ2V0YWRkcmVzc2luZm8oKHN0cnVjdCBzb2NrYWRkciopJmFkZHIuc2FfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcywgJnBvcnQpKSB7CisgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLnNhX2FkZHIsIGFkZHIuYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLCAmcG9ydCkpIHsKICAgICAvKiBtYWxmb3JtZWQgYWRkcmVzcyBvciBidWcgaW4gaW5ldF9udG9wLCB0cnkgbmV4dCBhZGRyZXNzICovCiAgICAgZmFpbGYoZGF0YSwgInNhX2FkZHIgaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwpAQCAtMTA5MSwxMSArMTIwMywxMyBAQAogICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrZmQsIFRSVUUpOwogCiAgIGNvbm4tPmNvbm5lY3R0aW1lID0gQ3VybF9ub3coKTsKLSAgaWYoY29ubi0+bnVtX2FkZHIgPiAxKQotICAgIEN1cmxfZXhwaXJlKGRhdGEsIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkciwgRVhQSVJFX0ROU19QRVJfTkFNRSk7CisgIGlmKGNvbm4tPm51bV9hZGRyID4gMSkgeworICAgIEN1cmxfZXhwaXJlKGRhdGEsIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkclswXSwgRVhQSVJFX0ROU19QRVJfTkFNRSk7CisgICAgQ3VybF9leHBpcmUoZGF0YSwgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyWzFdLCBFWFBJUkVfRE5TX1BFUl9OQU1FMik7CisgIH0KIAotICAvKiBDb25uZWN0IFRDUCBzb2NrZXRzLCBiaW5kIFVEUCAqLwotICBpZighaXNjb25uZWN0ZWQgJiYgKGNvbm4tPnNvY2t0eXBlID09IFNPQ0tfU1RSRUFNKSkgeworICAvKiBDb25uZWN0IFRDUCBhbmQgUVVJQyBzb2NrZXRzICovCisgIGlmKCFpc2Nvbm5lY3RlZCAmJiAoY29ubi0+dHJhbnNwb3J0ICE9IFRSTlNQUlRfVURQKSkgewogICAgIGlmKGNvbm4tPmJpdHMudGNwX2Zhc3RvcGVuKSB7CiAjaWYgZGVmaW5lZChDT05ORUNUX0RBVEFfSURFTVBPVEVOVCkgLyogRGFyd2luICovCiAjICBpZiBkZWZpbmVkKEhBVkVfQlVJTFRJTl9BVkFJTEFCTEUpCkBAIC0xMTI0LDggKzEyMzgsNiBAQAogICAgICAgaWYoc2V0c29ja29wdChzb2NrZmQsIElQUFJPVE9fVENQLCBUQ1BfRkFTVE9QRU5fQ09OTkVDVCwKICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikmb3B0dmFsLCBzaXplb2Yob3B0dmFsKSkgPCAwKQogICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGVuYWJsZSBUQ1AgRmFzdCBPcGVuIG9uIGZkICVkXG4iLCBzb2NrZmQpOwotICAgICAgZWxzZQotICAgICAgICBpbmZvZihkYXRhLCAiVENQX0ZBU1RPUEVOX0NPTk5FQ1Qgc2V0XG4iKTsKIAogICAgICAgcmMgPSBjb25uZWN0KHNvY2tmZCwgJmFkZHIuc2FfYWRkciwgYWRkci5hZGRybGVuKTsKICNlbGlmIGRlZmluZWQoTVNHX0ZBU1RPUEVOKSAvKiBvbGQgTGludXggKi8KQEAgLTExNDEsNiArMTI1MywxNiBAQAogCiAgICAgaWYoLTEgPT0gcmMpCiAgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyNpZmRlZiBFTkFCTEVfUVVJQworICAgIGVsc2UgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykgeworICAgICAgLyogcGFzcyBpbiAnc29ja2ZkJyBzZXBhcmF0ZWx5IHNpbmNlIGl0IGhhc24ndCBiZWVuIHB1dCBpbnRvIHRoZQorICAgICAgICAgdGVtcHNvY2sgYXJyYXkgYXQgdGhpcyBwb2ludCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9xdWljX2Nvbm5lY3QoY29ubiwgc29ja2ZkLCB0ZW1waW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkci5zYV9hZGRyLCBhZGRyLmFkZHJsZW4pOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICB9CisjZW5kaWYKICAgfQogICBlbHNlIHsKICAgICAqc29ja3AgPSBzb2NrZmQ7CkBAIC0xMTkzLDcgKzEzMTUsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IGN1cmx0aW1lIGJlZm9yZSA9IEN1cmxfbm93KCk7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLQorICBpbnQgaTsKICAgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCAmYmVmb3JlLCBUUlVFKTsKIAogICBpZih0aW1lb3V0X21zIDwgMCkgewpAQCAtMTIwMywzMCArMTMyNSwzNyBAQAogICB9CiAKICAgY29ubi0+bnVtX2FkZHIgPSBDdXJsX251bV9hZGRyZXNzZXMocmVtb3RlaG9zdC0+YWRkcik7Ci0gIGNvbm4tPnRlbXBhZGRyWzBdID0gcmVtb3RlaG9zdC0+YWRkcjsKLSAgY29ubi0+dGVtcGFkZHJbMV0gPSBOVUxMOwotICBjb25uLT50ZW1wc29ja1swXSA9IENVUkxfU09DS0VUX0JBRDsKLSAgY29ubi0+dGVtcHNvY2tbMV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGNvbm4tPnRlbXBhZGRyWzBdID0gY29ubi0+dGVtcGFkZHJbMV0gPSByZW1vdGVob3N0LT5hZGRyOworICBjb25uLT50ZW1wc29ja1swXSA9IGNvbm4tPnRlbXBzb2NrWzFdID0gQ1VSTF9TT0NLRVRfQkFEOwogCiAgIC8qIE1heCB0aW1lIGZvciB0aGUgbmV4dCBjb25uZWN0aW9uIGF0dGVtcHQgKi8KLSAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyID0KKyAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyWzBdID0KICAgICBjb25uLT50ZW1wYWRkclswXS0+YWlfbmV4dCA9PSBOVUxMID8gdGltZW91dF9tcyA6IHRpbWVvdXRfbXMgLyAyOworICBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHJbMV0gPQorICAgIGNvbm4tPnRlbXBhZGRyWzFdLT5haV9uZXh0ID09IE5VTEwgPyB0aW1lb3V0X21zIDogdGltZW91dF9tcyAvIDI7CiAKLSAgLyogc3RhcnQgY29ubmVjdGluZyB0byBmaXJzdCBJUCAqLwotICB3aGlsZShjb25uLT50ZW1wYWRkclswXSkgewotICAgIHJlc3VsdCA9IHNpbmdsZWlwY29ubmVjdChjb25uLCBjb25uLT50ZW1wYWRkclswXSwgJihjb25uLT50ZW1wc29ja1swXSkpOwotICAgIGlmKCFyZXN1bHQpCi0gICAgICBicmVhazsKLSAgICBjb25uLT50ZW1wYWRkclswXSA9IGNvbm4tPnRlbXBhZGRyWzBdLT5haV9uZXh0OworICBjb25uLT50ZW1wZmFtaWx5WzBdID0gY29ubi0+dGVtcGFkZHJbMF0/CisgICAgY29ubi0+dGVtcGFkZHJbMF0tPmFpX2ZhbWlseTowOworICBjb25uLT50ZW1wZmFtaWx5WzFdID0gY29ubi0+dGVtcGZhbWlseVswXSA9PSBBRl9JTkVUNiA/CisgICAgQUZfSU5FVCA6IEFGX0lORVQ2OworICBhaW5leHQoY29ubiwgMSwgRkFMU0UpOyAvKiBhc3NpZ25zIGNvbm4tPnRlbXBhZGRyWzFdIGFjY29yZGluZ2x5ICovCisKKyAgREVCVUdGKGluZm9mKGRhdGEsICJmYW1pbHkwID09ICVzLCBmYW1pbHkxID09ICVzXG4iLAorICAgICAgICAgICAgICAgY29ubi0+dGVtcGZhbWlseVswXSA9PSBBRl9JTkVUID8gInY0IiA6ICJ2NiIsCisgICAgICAgICAgICAgICBjb25uLT50ZW1wZmFtaWx5WzFdID09IEFGX0lORVQgPyAidjQiIDogInY2IikpOworCisgIC8qIGdldCB0aHJvdWdoIHRoZSBsaXN0IGluIGZhbWlseSBvcmRlciBpbiBjYXNlIG9mIHF1aWNrIGZhaWx1cmVzICovCisgIGZvcihpID0gMDsgKGkgPCAyKSAmJiByZXN1bHQ7IGkrKykgeworICAgIHdoaWxlKGNvbm4tPnRlbXBhZGRyW2ldKSB7CisgICAgICByZXN1bHQgPSBzaW5nbGVpcGNvbm5lY3QoY29ubiwgY29ubi0+dGVtcGFkZHJbaV0sIGkpOworICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisgICAgICBhaW5leHQoY29ubiwgaSwgVFJVRSk7CisgICAgfQogICB9Ci0KLSAgaWYoY29ubi0+dGVtcHNvY2tbMF0gPT0gQ1VSTF9TT0NLRVRfQkFEKSB7Ci0gICAgaWYoIXJlc3VsdCkKLSAgICAgIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KIAotICBkYXRhLT5pbmZvLm51bWNvbm5lY3RzKys7IC8qIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFkZSAqLwogICBDdXJsX2V4cGlyZShjb25uLT5kYXRhLCBkYXRhLT5zZXQuaGFwcHlfZXllYmFsbHNfdGltZW91dCwKICAgICAgICAgICAgICAgRVhQSVJFX0hBUFBZX0VZRUJBTExTKTsKIApAQCAtMTMyNiwxMiArMTQ1NSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29jaykKIHsKICAgaWYoY29ubiAmJiBjb25uLT5mY2xvc2Vzb2NrZXQpIHsKLSAgICBpZigoc29jayA9PSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pICYmCi0gICAgICAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdKQorICAgIGlmKChzb2NrID09IGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSkgJiYgY29ubi0+Yml0cy5zb2NrX2FjY2VwdGVkKQogICAgICAgLyogaWYgdGhpcyBzb2NrZXQgbWF0Y2hlcyB0aGUgc2Vjb25kIHNvY2tldCwgYW5kIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aAogICAgICAgICAgYWNjZXB0LCB0aGVuIHdlIE1VU1QgTk9UIGNhbGwgdGhlIGNhbGxiYWNrIGJ1dCBjbGVhciB0aGUgYWNjZXB0ZWQKICAgICAgICAgIHN0YXR1cyAqLwotICAgICAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdID0gRkFMU0U7CisgICAgICBjb25uLT5iaXRzLnNvY2tfYWNjZXB0ZWQgPSBGQUxTRTsKICAgICBlbHNlIHsKICAgICAgIGludCByYzsKICAgICAgIEN1cmxfbXVsdGlfY2xvc2VkKGNvbm4tPmRhdGEsIHNvY2spOwpAQCAtMTM2MSw3ICsxNDg5LDcgQEAKICAqCiAgKi8KIENVUkxjb2RlIEN1cmxfc29ja2V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfc29ja2FkZHJfZXggKmFkZHIsCiAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrZmQpCiB7CkBAIC0xMzgxLDggKzE1MDksOSBAQAogICAgKi8KIAogICBhZGRyLT5mYW1pbHkgPSBhaS0+YWlfZmFtaWx5OwotICBhZGRyLT5zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOwotICBhZGRyLT5wcm90b2NvbCA9IGNvbm4tPnNvY2t0eXBlID09IFNPQ0tfREdSQU0/SVBQUk9UT19VRFA6YWktPmFpX3Byb3RvY29sOworICBhZGRyLT5zb2NrdHlwZSA9IChjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9UQ1ApID8gU09DS19TVFJFQU0gOiBTT0NLX0RHUkFNOworICBhZGRyLT5wcm90b2NvbCA9IGNvbm4tPnRyYW5zcG9ydCAhPSBUUk5TUFJUX1RDUCA/IElQUFJPVE9fVURQIDoKKyAgICBhaS0+YWlfcHJvdG9jb2w7CiAgIGFkZHItPmFkZHJsZW4gPSBhaS0+YWlfYWRkcmxlbjsKIAogICBpZihhZGRyLT5hZGRybGVuID4gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpKQpAQCAtMTQxMyw2ICsxNTQyLDExIEBACiAgICAgLyogbm8gc29ja2V0LCBubyBjb25uZWN0aW9uICovCiAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKIAorICBpZihjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9RVUlDKSB7CisgICAgLyogUVVJQyBzb2NrZXRzIG5lZWQgdG8gYmUgbm9uYmxvY2tpbmcgKi8KKyAgICAodm9pZCljdXJseF9ub25ibG9jaygqc29ja2ZkLCBUUlVFKTsKKyAgfQorCiAjaWYgZGVmaW5lZChFTkFCTEVfSVBWNikgJiYgZGVmaW5lZChIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQogICBpZihjb25uLT5zY29wZV9pZCAmJiAoYWRkci0+ZmFtaWx5ID09IEFGX0lORVQ2KSkgewogICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiBjb25zdCBzYTYgPSAodm9pZCAqKSZhZGRyLT5zYV9hZGRyOwpAQCAtMTQzNyw2ICsxNTcxLDcgQEAKICAgLyogY2xvc2UgaWYgYSBjb25uZWN0aW9uLCBvciBhIHN0cmVhbSB0aGF0IGlzbid0IG11bHRpcGxleGVkICovCiAgIGJvb2wgY2xvc2VpdCA9IChjdHJsID09IENPTk5DVFJMX0NPTk5FQ1RJT04pIHx8CiAgICAgKChjdHJsID09IENPTk5DVFJMX1NUUkVBTSkgJiYgIShjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1RSRUFNKSk7CisgIERFQlVHQVNTRVJUKGNvbm4pOwogICBpZigoY3RybCA9PSBDT05OQ1RSTF9TVFJFQU0pICYmCiAgICAgIChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1RSRUFNKSkKICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIktpbGwgc3RyZWFtOiAlc1xuIiwgcmVhc29uKSk7CkBAIC0xNDUyLDYgKzE1ODcsNyBAQAogYm9vbCBDdXJsX2Nvbm5fZGF0YV9wZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgaW50IHJlYWRhYmxlOworICBERUJVR0FTU0VSVChjb25uKTsKIAogICBpZihDdXJsX3NzbF9kYXRhX3BlbmRpbmcoY29ubiwgc29ja2luZGV4KSB8fAogICAgICBDdXJsX3JlY3ZfaGFzX3Bvc3Rwb25lZF9kYXRhKGNvbm4sIHNvY2tpbmRleCkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmgKaW5kZXggNmE1Yzc1NS4uNmZkOWVhOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmVjdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5lY3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTEsNiArNTEsOSBAQAogY3VybF9zb2NrZXRfdCBDdXJsX2dldGNvbm5lY3RpbmZvKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApOwogCitib29sIEN1cmxfYWRkcjJzdHJpbmcoc3RydWN0IHNvY2thZGRyICpzYSwgY3VybF9zb2NrbGVuX3Qgc2FsZW4sCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkciwgbG9uZyAqcG9ydCk7CisKIC8qCiAgKiBDaGVjayBpZiBhIGNvbm5lY3Rpb24gc2VlbXMgdG8gYmUgYWxpdmUuCiAgKi8KQEAgLTEwMiw3ICsxMDUsNyBAQAogICoKICAqLwogQ1VSTGNvZGUgQ3VybF9zb2NrZXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9leCAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tmZCk7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2NvbnRlbnRfZW5jb2RpbmcuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2NvbnRlbnRfZW5jb2RpbmcuYwppbmRleCA2ZDQ3NTM3Li5lMmU2OGExIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb250ZW50X2VuY29kaW5nLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29udGVudF9lbmNvZGluZy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC04MSwxMSArODEsMTEgQEAKIH0gemxpYkluaXRTdGF0ZTsKIAogLyogV3JpdGVyIHBhcmFtZXRlcnMuICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgemxpYl9wYXJhbXMgewogICB6bGliSW5pdFN0YXRlIHpsaWJfaW5pdDsgICAvKiB6bGliIGluaXQgc3RhdGUgKi8KICAgdUludCB0cmFpbGVybGVuOyAgICAgICAgICAgLyogUmVtYWluaW5nIHRyYWlsZXIgYnl0ZSBjb3VudC4gKi8KICAgel9zdHJlYW0gejsgICAgICAgICAgICAgICAgLyogU3RhdGUgc3RydWN0dXJlIGZvciB6bGliLiAqLwotfSAgemxpYl9wYXJhbXM7Cit9OwogCiAKIHN0YXRpYyB2b2lkcGYKQEAgLTEzMyw3ICsxMzMsOCBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgcHJvY2Vzc190cmFpbGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgemxpYl9wYXJhbXMgKnpwKQorc3RhdGljIENVUkxjb2RlIHByb2Nlc3NfdHJhaWxlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB6bGliX3BhcmFtcyAqenApCiB7CiAgIHpfc3RyZWFtICp6ID0gJnpwLT56OwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKQEAgLTE1Nyw5ICsxNTgsMTAgQEAKIH0KIAogc3RhdGljIENVUkxjb2RlIGluZmxhdGVfc3RyZWFtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW5jX3dyaXRlciAqd3JpdGVyLCB6bGliSW5pdFN0YXRlIHN0YXJ0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYkluaXRTdGF0ZSBzdGFydGVkKQogewotICB6bGliX3BhcmFtcyAqenAgPSAoemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOworICBzdHJ1Y3QgemxpYl9wYXJhbXMgKnpwID0gKHN0cnVjdCB6bGliX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgIHpfc3RyZWFtICp6ID0gJnpwLT56OyAgICAgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAgIHVJbnQgbnJlYWQgPSB6LT5hdmFpbF9pbjsKICAgQnl0ZWYgKm9yaWdfaW4gPSB6LT5uZXh0X2luOwpAQCAtMjU5LDkgKzI2MSw5IEBACiAKIC8qIERlZmxhdGUgaGFuZGxlci4gKi8KIHN0YXRpYyBDVVJMY29kZSBkZWZsYXRlX2luaXRfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcikKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgaWYoIXdyaXRlci0+ZG93bnN0cmVhbSkKQEAgLTI3OCwxMCArMjgwLDEwIEBACiB9CiAKIHN0YXRpYyBDVVJMY29kZSBkZWZsYXRlX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgLyogU2V0IHRoZSBjb21wcmVzc2VkIGlucHV0IHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KQEAgLTI5NiwyOSArMjk4LDI5IEBACiB9CiAKIHN0YXRpYyB2b2lkIGRlZmxhdGVfY2xvc2Vfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcikKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgZXhpdF96bGliKGNvbm4sIHosICZ6cC0+emxpYl9pbml0LCBDVVJMRV9PSyk7CiB9CiAKLXN0YXRpYyBjb25zdCBjb250ZW50X2VuY29kaW5nIGRlZmxhdGVfZW5jb2RpbmcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgZGVmbGF0ZV9lbmNvZGluZyA9IHsKICAgImRlZmxhdGUiLAogICBOVUxMLAogICBkZWZsYXRlX2luaXRfd3JpdGVyLAogICBkZWZsYXRlX3VuZW5jb2RlX3dyaXRlLAogICBkZWZsYXRlX2Nsb3NlX3dyaXRlciwKLSAgc2l6ZW9mKHpsaWJfcGFyYW1zKQorICBzaXplb2Yoc3RydWN0IHpsaWJfcGFyYW1zKQogfTsKIAogCiAvKiBHemlwIGhhbmRsZXIuICovCiBzdGF0aWMgQ1VSTGNvZGUgZ3ppcF9pbml0X3dyaXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7Ci0gIHpsaWJfcGFyYW1zICp6cCA9ICh6bGliX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CisgIHN0cnVjdCB6bGliX3BhcmFtcyAqenAgPSAoc3RydWN0IHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKICAgel9zdHJlYW0gKnogPSAmenAtPno7ICAgICAvKiB6bGliIHN0YXRlIHN0cnVjdHVyZSAqLwogCiAgIGlmKCF3cml0ZXItPmRvd25zdHJlYW0pCkBAIC00MzIsMTAgKzQzNCwxMCBAQAogI2VuZGlmCiAKIHN0YXRpYyBDVVJMY29kZSBnemlwX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgaWYoenAtPnpsaWJfaW5pdCA9PSBaTElCX0lOSVRfR1pJUCkgewpAQCAtNTYwLDMzICs1NjIsMzEgQEAKIH0KIAogc3RhdGljIHZvaWQgZ3ppcF9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQogewotICB6bGliX3BhcmFtcyAqenAgPSAoemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOworICBzdHJ1Y3QgemxpYl9wYXJhbXMgKnpwID0gKHN0cnVjdCB6bGliX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgIHpfc3RyZWFtICp6ID0gJnpwLT56OyAgICAgLyogemxpYiBzdGF0ZSBzdHJ1Y3R1cmUgKi8KIAogICBleGl0X3psaWIoY29ubiwgeiwgJnpwLT56bGliX2luaXQsIENVUkxFX09LKTsKIH0KIAotc3RhdGljIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgZ3ppcF9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBnemlwX2VuY29kaW5nID0gewogICAiZ3ppcCIsCiAgICJ4LWd6aXAiLAogICBnemlwX2luaXRfd3JpdGVyLAogICBnemlwX3VuZW5jb2RlX3dyaXRlLAogICBnemlwX2Nsb3NlX3dyaXRlciwKLSAgc2l6ZW9mKHpsaWJfcGFyYW1zKQorICBzaXplb2Yoc3RydWN0IHpsaWJfcGFyYW1zKQogfTsKIAogI2VuZGlmIC8qIEhBVkVfTElCWiAqLwogCiAKICNpZmRlZiBIQVZFX0JST1RMSQotCiAvKiBXcml0ZXIgcGFyYW1ldGVycy4gKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBicm90bGlfcGFyYW1zIHsKICAgQnJvdGxpRGVjb2RlclN0YXRlICpicjsgICAgLyogU3RhdGUgc3RydWN0dXJlIGZvciBicm90bGkuICovCi19ICBicm90bGlfcGFyYW1zOwotCit9OwogCiBzdGF0aWMgQ1VSTGNvZGUgYnJvdGxpX21hcF9lcnJvcihCcm90bGlEZWNvZGVyRXJyb3JDb2RlIGJlKQogewpAQCAtNjI3LDEwICs2MjcsOSBAQAogfQogCiBzdGF0aWMgQ1VSTGNvZGUgYnJvdGxpX2luaXRfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7Ci0gIGJyb3RsaV9wYXJhbXMgKmJwID0gKGJyb3RsaV9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwotCisgIHN0cnVjdCBicm90bGlfcGFyYW1zICpicCA9IChzdHJ1Y3QgYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgICh2b2lkKSBjb25uOwogCiAgIGlmKCF3cml0ZXItPmRvd25zdHJlYW0pCkBAIC02NDEsMTAgKzY0MCwxMCBAQAogfQogCiBzdGF0aWMgQ1VSTGNvZGUgYnJvdGxpX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKLSAgYnJvdGxpX3BhcmFtcyAqYnAgPSAoYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CisgIHN0cnVjdCBicm90bGlfcGFyYW1zICpicCA9IChzdHJ1Y3QgYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IChjb25zdCB1aW50OF90ICopIGJ1ZjsKICAgY2hhciAqZGVjb21wOwogICB1aW50OF90ICpkc3Q7CkBAIC02ODksMTAgKzY4OCw5IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJyb3RsaV9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcikKIHsKLSAgYnJvdGxpX3BhcmFtcyAqYnAgPSAoYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7Ci0KKyAgc3RydWN0IGJyb3RsaV9wYXJhbXMgKmJwID0gKHN0cnVjdCBicm90bGlfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKICAgKHZvaWQpIGNvbm47CiAKICAgaWYoYnAtPmJyKSB7CkBAIC03MDEsNDAgKzY5OSw0MCBAQAogICB9CiB9CiAKLXN0YXRpYyBjb25zdCBjb250ZW50X2VuY29kaW5nIGJyb3RsaV9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBicm90bGlfZW5jb2RpbmcgPSB7CiAgICJiciIsCiAgIE5VTEwsCiAgIGJyb3RsaV9pbml0X3dyaXRlciwKICAgYnJvdGxpX3VuZW5jb2RlX3dyaXRlLAogICBicm90bGlfY2xvc2Vfd3JpdGVyLAotICBzaXplb2YoYnJvdGxpX3BhcmFtcykKKyAgc2l6ZW9mKHN0cnVjdCBicm90bGlfcGFyYW1zKQogfTsKICNlbmRpZgogCiAKIC8qIElkZW50aXR5IGhhbmRsZXIuICovCiBzdGF0aWMgQ1VSTGNvZGUgaWRlbnRpdHlfaW5pdF93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICByZXR1cm4gd3JpdGVyLT5kb3duc3RyZWFtPyBDVVJMRV9PSzogQ1VSTEVfV1JJVEVfRVJST1I7CiB9CiAKIHN0YXRpYyBDVVJMY29kZSBpZGVudGl0eV91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCiB7CiAgIHJldHVybiBDdXJsX3VuZW5jb2RlX3dyaXRlKGNvbm4sIHdyaXRlci0+ZG93bnN0cmVhbSwgYnVmLCBuYnl0ZXMpOwogfQogCiBzdGF0aWMgdm9pZCBpZGVudGl0eV9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICAodm9pZCkgd3JpdGVyOwogfQogCi1zdGF0aWMgY29uc3QgY29udGVudF9lbmNvZGluZyBpZGVudGl0eV9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBpZGVudGl0eV9lbmNvZGluZyA9IHsKICAgImlkZW50aXR5IiwKICAgIm5vbmUiLAogICBpZGVudGl0eV9pbml0X3dyaXRlciwKQEAgLTc0NSw3ICs3NDMsNyBAQAogCiAKIC8qIHN1cHBvcnRlZCBjb250ZW50IGVuY29kaW5ncyB0YWJsZS4gKi8KLXN0YXRpYyBjb25zdCBjb250ZW50X2VuY29kaW5nICogY29uc3QgZW5jb2RpbmdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCBlbmNvZGluZ3NbXSA9IHsKICAgJmlkZW50aXR5X2VuY29kaW5nLAogI2lmZGVmIEhBVkVfTElCWgogICAmZGVmbGF0ZV9lbmNvZGluZywKQEAgLTc2Miw4ICs3NjAsOCBAQAogY2hhciAqQ3VybF9hbGxfY29udGVudF9lbmNvZGluZ3Modm9pZCkKIHsKICAgc2l6ZV90IGxlbiA9IDA7Ci0gIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCAqY2VwOwotICBjb25zdCBjb250ZW50X2VuY29kaW5nICpjZTsKKyAgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCAqY2VwOworICBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyAqY2U7CiAgIGNoYXIgKmFjZTsKIAogICBmb3IoY2VwID0gZW5jb2RpbmdzOyAqY2VwOyBjZXArKykgewpAQCAtNzk2LDE0ICs3OTQsMTQgQEAKIAogLyogUmVhbCBjbGllbnQgd3JpdGVyOiBubyBkb3duc3RyZWFtLiAqLwogc3RhdGljIENVUkxjb2RlIGNsaWVudF9pbml0X3dyaXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQogewogICAodm9pZCkgY29ubjsKICAgcmV0dXJuIHdyaXRlci0+ZG93bnN0cmVhbT8gQ1VSTEVfV1JJVEVfRVJST1I6IENVUkxFX09LOwogfQogCiBzdGF0aWMgQ1VSTGNvZGUgY2xpZW50X3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CkBAIC04MTgsMTMgKzgxNiwxMyBAQAogfQogCiBzdGF0aWMgdm9pZCBjbGllbnRfY2xvc2Vfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICAodm9pZCkgd3JpdGVyOwogfQogCi1zdGF0aWMgY29uc3QgY29udGVudF9lbmNvZGluZyBjbGllbnRfZW5jb2RpbmcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgY2xpZW50X2VuY29kaW5nID0gewogICBOVUxMLAogICBOVUxMLAogICBjbGllbnRfaW5pdF93cml0ZXIsCkBAIC04MzYsMTQgKzgzNCwxNCBAQAogCiAvKiBEZWZlcnJlZCBlcnJvciBkdW1teSB3cml0ZXIuICovCiBzdGF0aWMgQ1VSTGNvZGUgZXJyb3JfaW5pdF93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICByZXR1cm4gd3JpdGVyLT5kb3duc3RyZWFtPyBDVVJMRV9PSzogQ1VSTEVfV1JJVEVfRVJST1I7CiB9CiAKIHN0YXRpYyBDVVJMY29kZSBlcnJvcl91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCiB7CiAgIGNoYXIgKmFsbCA9IEN1cmxfYWxsX2NvbnRlbnRfZW5jb2RpbmdzKCk7CkBAIC04NjEsMTMgKzg1OSwxMyBAQAogfQogCiBzdGF0aWMgdm9pZCBlcnJvcl9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICAodm9pZCkgd3JpdGVyOwogfQogCi1zdGF0aWMgY29uc3QgY29udGVudF9lbmNvZGluZyBlcnJvcl9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBlcnJvcl9lbmNvZGluZyA9IHsKICAgTlVMTCwKICAgTlVMTCwKICAgZXJyb3JfaW5pdF93cml0ZXIsCkBAIC04NzcsMTIgKzg3NSwxMyBAQAogfTsKIAogLyogQ3JlYXRlIGFuIHVuZW5jb2Rpbmcgd3JpdGVyIHN0YWdlIHVzaW5nIHRoZSBnaXZlbiBoYW5kbGVyLiAqLwotc3RhdGljIGNvbnRlbmNfd3JpdGVyICpuZXdfdW5lbmNvZGluZ193cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudF9lbmNvZGluZyAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICpkb3duc3RyZWFtKQorc3RhdGljIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqCituZXdfdW5lbmNvZGluZ193cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb250ZW50X2VuY29kaW5nICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqZG93bnN0cmVhbSkKIHsKLSAgc2l6ZV90IHN6ID0gb2Zmc2V0b2YoY29udGVuY193cml0ZXIsIHBhcmFtcykgKyBoYW5kbGVyLT5wYXJhbXNpemU7Ci0gIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIgPSAoY29udGVuY193cml0ZXIgKikgY2FsbG9jKDEsIHN6KTsKKyAgc2l6ZV90IHN6ID0gb2Zmc2V0b2Yoc3RydWN0IGNvbnRlbmNfd3JpdGVyLCBwYXJhbXMpICsgaGFuZGxlci0+cGFyYW1zaXplOworICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciA9IChzdHJ1Y3QgY29udGVuY193cml0ZXIgKiljYWxsb2MoMSwgc3opOwogCiAgIGlmKHdyaXRlcikgewogICAgIHdyaXRlci0+aGFuZGxlciA9IGhhbmRsZXI7CkBAIC04OTcsNyArODk2LDggQEAKIH0KIAogLyogV3JpdGUgZGF0YSB1c2luZyBhbiB1bmVuY29kaW5nIHdyaXRlciBzdGFjay4gKi8KLUNVUkxjb2RlIEN1cmxfdW5lbmNvZGVfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyLAorQ1VSTGNvZGUgQ3VybF91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCiB7CiAgIGlmKCFuYnl0ZXMpCkBAIC05MTAsNyArOTEwLDcgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKLSAgY29udGVuY193cml0ZXIgKndyaXRlciA9IGstPndyaXRlcl9zdGFjazsKKyAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIgPSBrLT53cml0ZXJfc3RhY2s7CiAKICAgd2hpbGUod3JpdGVyKSB7CiAgICAgay0+d3JpdGVyX3N0YWNrID0gd3JpdGVyLT5kb3duc3RyZWFtOwpAQCAtOTIxLDEyICs5MjEsMTMgQEAKIH0KIAogLyogRmluZCB0aGUgY29udGVudCBlbmNvZGluZyBieSBuYW1lLiAqLwotc3RhdGljIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKmZpbmRfZW5jb2RpbmcoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyAqZmluZF9lbmNvZGluZyhjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCiB7Ci0gIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCAqY2VwOworICBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyAqIGNvbnN0ICpjZXA7CiAKICAgZm9yKGNlcCA9IGVuY29kaW5nczsgKmNlcDsgY2VwKyspIHsKLSAgICBjb25zdCBjb250ZW50X2VuY29kaW5nICpjZSA9ICpjZXA7CisgICAgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKmNlID0gKmNlcDsKICAgICBpZigoc3RybmNhc2Vjb21wYXJlKG5hbWUsIGNlLT5uYW1lLCBsZW4pICYmICFjZS0+bmFtZVtsZW5dKSB8fAogICAgICAgIChjZS0+YWxpYXMgJiYgc3RybmNhc2Vjb21wYXJlKG5hbWUsIGNlLT5hbGlhcywgbGVuKSAmJiAhY2UtPmFsaWFzW2xlbl0pKQogICAgICAgcmV0dXJuIGNlOwpAQCAtOTYyLDggKzk2Myw4IEBACiAgICAgICBDdXJsX2h0dHBjaHVua19pbml0KGNvbm4pOyAgIC8qIGluaXQgb3VyIGNodW5reSBlbmdpbmUuICovCiAgICAgfQogICAgIGVsc2UgaWYobmFtZWxlbikgewotICAgICAgY29uc3QgY29udGVudF9lbmNvZGluZyAqZW5jb2RpbmcgPSBmaW5kX2VuY29kaW5nKG5hbWUsIG5hbWVsZW4pOwotICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcjsKKyAgICAgIGNvbnN0IHN0cnVjdCBjb250ZW50X2VuY29kaW5nICplbmNvZGluZyA9IGZpbmRfZW5jb2RpbmcobmFtZSwgbmFtZWxlbik7CisgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcjsKIAogICAgICAgaWYoIWstPndyaXRlcl9zdGFjaykgewogICAgICAgICBrLT53cml0ZXJfc3RhY2sgPSBuZXdfdW5lbmNvZGluZ193cml0ZXIoY29ubiwgJmNsaWVudF9lbmNvZGluZywgTlVMTCk7CkBAIC05OTcsNyArOTk4LDggQEAKICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKIH0KIAotQ1VSTGNvZGUgQ3VybF91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCitDVVJMY29kZSBDdXJsX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKICAgKHZvaWQpIGNvbm47CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb250ZW50X2VuY29kaW5nLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb250ZW50X2VuY29kaW5nLmgKaW5kZXggNGNkNTJiZS4uYmRkM2YxYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29udGVudF9lbmNvZGluZy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2NvbnRlbnRfZW5jb2RpbmcuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjMsMzEgKzIzLDMxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKIAotLyogRGVjb2Rpbmcgd3JpdGVyLiAqLwotdHlwZWRlZiBzdHJ1Y3QgY29udGVuY193cml0ZXJfcyBjb250ZW5jX3dyaXRlcjsKLXR5cGVkZWYgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmdfcyBjb250ZW50X2VuY29kaW5nOwotCi1zdHJ1Y3QgY29udGVuY193cml0ZXJfcyB7Ci0gIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKmhhbmRsZXI7ICAvKiBFbmNvZGluZyBoYW5kbGVyLiAqLwotICBjb250ZW5jX3dyaXRlciAqZG93bnN0cmVhbTsgIC8qIERvd25zdHJlYW0gd3JpdGVyLiAqLworc3RydWN0IGNvbnRlbmNfd3JpdGVyIHsKKyAgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKmhhbmRsZXI7ICAvKiBFbmNvZGluZyBoYW5kbGVyLiAqLworICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKmRvd25zdHJlYW07ICAvKiBEb3duc3RyZWFtIHdyaXRlci4gKi8KICAgdm9pZCAqcGFyYW1zOyAgLyogRW5jb2Rpbmctc3BlY2lmaWMgc3RvcmFnZSAodmFyaWFibGUgbGVuZ3RoKS4gKi8KIH07CiAKIC8qIENvbnRlbnQgZW5jb2Rpbmcgd3JpdGVyLiAqLwotc3RydWN0IGNvbnRlbnRfZW5jb2RpbmdfcyB7CitzdHJ1Y3QgY29udGVudF9lbmNvZGluZyB7CiAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAvKiBFbmNvZGluZyBuYW1lLiAqLwogICBjb25zdCBjaGFyICphbGlhczsgICAgICAgLyogRW5jb2RpbmcgbmFtZSBhbGlhcy4gKi8KLSAgQ1VSTGNvZGUgKCppbml0X3dyaXRlcikoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKTsKLSAgQ1VSTGNvZGUgKCp1bmVuY29kZV93cml0ZSkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyLAorICBDVVJMY29kZSAoKmluaXRfd3JpdGVyKShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKTsKKyAgQ1VSTGNvZGUgKCp1bmVuY29kZV93cml0ZSkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzKTsKLSAgdm9pZCAoKmNsb3NlX3dyaXRlcikoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKTsKKyAgdm9pZCAoKmNsb3NlX3dyaXRlcikoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcik7CiAgIHNpemVfdCBwYXJhbXNpemU7CiB9OwogCiAKIENVUkxjb2RlIEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jbGlzdCwgaW50IG1heWJlY2h1bmtlZCk7Ci1DVVJMY29kZSBDdXJsX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29udGVuY193cml0ZXIgKndyaXRlciwKK0NVUkxjb2RlIEN1cmxfdW5lbmNvZGVfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzKTsKIHZvaWQgQ3VybF91bmVuY29kZV9jbGVhbnVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBjaGFyICpDdXJsX2FsbF9jb250ZW50X2VuY29kaW5ncyh2b2lkKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvb2tpZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmMKaW5kZXggOWE5ZTE0ZC4uY2I3ZDk0YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTk2LDYgKzk2LDkgQEAKICNpbmNsdWRlICJjdXJsX2dldF9saW5lLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1yY2hyLmgiCiAjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgInJlbmFtZS5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTI0MiwxOCArMjQ1LDE3IEBACiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfdG9wX2RvbWFpbihjb25zdCBjaGFyICogY29uc3QgZG9tYWluLCBzaXplX3QgKm91dGxlbikKIHsKLSAgc2l6ZV90IGxlbjsKKyAgc2l6ZV90IGxlbiA9IDA7CiAgIGNvbnN0IGNoYXIgKmZpcnN0ID0gTlVMTCwgKmxhc3Q7CiAKLSAgaWYoIWRvbWFpbikKLSAgICByZXR1cm4gTlVMTDsKLQotICBsZW4gPSBzdHJsZW4oZG9tYWluKTsKLSAgbGFzdCA9IG1lbXJjaHIoZG9tYWluLCAnLicsIGxlbik7Ci0gIGlmKGxhc3QpIHsKLSAgICBmaXJzdCA9IG1lbXJjaHIoZG9tYWluLCAnLicsIChsYXN0IC0gZG9tYWluKSk7Ci0gICAgaWYoZmlyc3QpCi0gICAgICBsZW4gLT0gKCsrZmlyc3QgLSBkb21haW4pOworICBpZihkb21haW4pIHsKKyAgICBsZW4gPSBzdHJsZW4oZG9tYWluKTsKKyAgICBsYXN0ID0gbWVtcmNocihkb21haW4sICcuJywgbGVuKTsKKyAgICBpZihsYXN0KSB7CisgICAgICBmaXJzdCA9IG1lbXJjaHIoZG9tYWluLCAnLicsIChsYXN0IC0gZG9tYWluKSk7CisgICAgICBpZihmaXJzdCkKKyAgICAgICAgbGVuIC09ICgrK2ZpcnN0IC0gZG9tYWluKTsKKyAgICB9CiAgIH0KIAogICBpZihvdXRsZW4pCkBAIC01MzYsOSArNTM4LDkgQEAKICAgICAgICAgICogb25seSB0ZXN0IGZvciBuYW1lcyB3aGVyZSB0aGF0IGNhbiBwb3NzaWJseSBiZSB0cnVlLgogICAgICAgICAgKi8KICAgICAgICAgaWYobmxlbiA+IDMgJiYgbmFtZVswXSA9PSAnXycgJiYgbmFtZVsxXSA9PSAnXycpIHsKLSAgICAgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoIl9fU2VjdXJlLSIsIG5hbWUsIDkpKQorICAgICAgICAgIGlmKCFzdHJuY21wKCJfX1NlY3VyZS0iLCBuYW1lLCA5KSkKICAgICAgICAgICAgIGNvLT5wcmVmaXggfD0gQ09PS0lFX1BSRUZJWF9fU0VDVVJFOwotICAgICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKCJfX0hvc3QtIiwgbmFtZSwgNykpCisgICAgICAgICAgZWxzZSBpZighc3RybmNtcCgiX19Ib3N0LSIsIG5hbWUsIDcpKQogICAgICAgICAgICAgY28tPnByZWZpeCB8PSBDT09LSUVfUFJFRklYX19IT1NUOwogICAgICAgICB9CiAKQEAgLTcxNSw3ICs3MTcsNyBAQAogICAgIGVsc2UgaWYoY28tPmV4cGlyZXN0cikgewogICAgICAgLyogTm90ZSB0aGF0IGlmIHRoZSBkYXRlIGNvdWxkbid0IGdldCBwYXJzZWQgZm9yIHdoYXRldmVyIHJlYXNvbiwKICAgICAgICAgIHRoZSBjb29raWUgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2Vzc2lvbiBjb29raWUgKi8KLSAgICAgIGNvLT5leHBpcmVzID0gY3VybF9nZXRkYXRlKGNvLT5leHBpcmVzdHIsIE5VTEwpOworICAgICAgY28tPmV4cGlyZXMgPSBDdXJsX2dldGRhdGVfY2FwcGVkKGNvLT5leHBpcmVzdHIpOwogCiAgICAgICAvKiBTZXNzaW9uIGNvb2tpZXMgaGF2ZSBleHBpcmVzIHNldCB0byAwIHNvIGlmIHdlIGdldCB0aGF0IGJhY2sKICAgICAgICAgIGZyb20gdGhlIGRhdGUgcGFyc2VyIGxldCdzIGFkZCBhIHNlY29uZCB0byBtYWtlIGl0IGEKQEAgLTc1Myw3ICs3NTUsNyBAQAogICAgICAgICBjby0+cGF0aCA9IG1hbGxvYyhwYXRobGVuICsgMSk7IC8qIG9uZSBleHRyYSBmb3IgdGhlIHplcm8gYnl0ZSAqLwogICAgICAgICBpZihjby0+cGF0aCkgewogICAgICAgICAgIG1lbWNweShjby0+cGF0aCwgcGF0aCwgcGF0aGxlbik7Ci0gICAgICAgICAgY28tPnBhdGhbcGF0aGxlbl0gPSAwOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworICAgICAgICAgIGNvLT5wYXRoW3BhdGhsZW5dID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgKi8KICAgICAgICAgICBjby0+c3BhdGggPSBzYW5pdGl6ZV9jb29raWVfcGF0aChjby0+cGF0aCk7CiAgICAgICAgICAgaWYoIWNvLT5zcGF0aCkKICAgICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7IC8qIG91dCBvZiBtZW1vcnkgYmFkICovCkBAIC04MTksMjIgKzgyMSwxNCBAQAogICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAxOgotICAgICAgICAvKiBUaGlzIGZpZWxkIGdvdCBpdHMgZXhwbGFuYXRpb24gb24gdGhlIDIzcmQgb2YgTWF5IDIwMDEgYnkKLSAgICAgICAgICAgQW5kcsOpcyBHYXJjw61hOgotCi0gICAgICAgICAgIGZsYWc6IEEgVFJVRS9GQUxTRSB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFsbCBtYWNoaW5lcyB3aXRoaW4gYSBnaXZlbgotICAgICAgICAgICBkb21haW4gY2FuIGFjY2VzcyB0aGUgdmFyaWFibGUuIFRoaXMgdmFsdWUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYnkKLSAgICAgICAgICAgdGhlIGJyb3dzZXIsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgeW91IHNldCBmb3IgdGhlIGRvbWFpbi4KLQotICAgICAgICAgICBBcyBmYXIgYXMgSSBjYW4gc2VlLCBpdCBpcyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBjb29raWUgc2F5cworICAgICAgICAvKiBmbGFnOiBBIFRSVUUvRkFMU0UgdmFsdWUgaW5kaWNhdGluZyBpZiBhbGwgbWFjaGluZXMgd2l0aGluIGEgZ2l2ZW4KKyAgICAgICAgICAgZG9tYWluIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlLiBTZXQgVFJVRSB3aGVuIHRoZSBjb29raWUgc2F5cwogICAgICAgICAgICAuZG9tYWluLmNvbSBhbmQgdG8gZmFsc2Ugd2hlbiB0aGUgZG9tYWluIGlzIGNvbXBsZXRlIHd3dy5kb21haW4uY29tCiAgICAgICAgICovCiAgICAgICAgIGNvLT50YWlsbWF0Y2ggPSBzdHJjYXNlY29tcGFyZShwdHIsICJUUlVFIik/VFJVRTpGQUxTRTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIDI6Ci0gICAgICAgIC8qIEl0IHR1cm5zIG91dCwgdGhhdCBzb21ldGltZXMgdGhlIGZpbGUgZm9ybWF0IGFsbG93cyB0aGUgcGF0aAotICAgICAgICAgICBmaWVsZCB0byByZW1haW4gbm90IGZpbGxlZCBpbiwgd2UgdHJ5IHRvIGRldGVjdCB0aGlzIGFuZCB3b3JrCi0gICAgICAgICAgIGFyb3VuZCBpdCEgQW5kcsOpcyBHYXJjw61hIG1hZGUgdXMgYXdhcmUgb2YgdGhpcy4uLiAqLworICAgICAgICAvKiBUaGUgZmlsZSBmb3JtYXQgYWxsb3dzIHRoZSBwYXRoIGZpZWxkIHRvIHJlbWFpbiBub3QgZmlsbGVkIGluICovCiAgICAgICAgIGlmKHN0cmNtcCgiVFJVRSIsIHB0cikgJiYgc3RyY21wKCJGQUxTRSIsIHB0cikpIHsKICAgICAgICAgICAvKiBvbmx5IGlmIHRoZSBwYXRoIGRvZXNuJ3QgbG9vayBsaWtlIGEgYm9vbGVhbiBvcHRpb24hICovCiAgICAgICAgICAgY28tPnBhdGggPSBzdHJkdXAocHRyKTsKQEAgLTEwNTMsNyArMTA0Nyw3IEBACiAKICAgICAgICAgKmNsaXN0ID0gKmNvOyAgLyogdGhlbiBzdG9yZSBhbGwgdGhlIG5ldyBkYXRhICovCiAKLSAgICAgICAgZnJlZShjbyk7ICAgLyogZnJlZSB0aGUgbmV3bHkgYWxsb2NlZCBtZW1vcnkgKi8KKyAgICAgICAgZnJlZShjbyk7ICAgLyogZnJlZSB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSAqLwogICAgICAgICBjbyA9IGNsaXN0OyAvKiBwb2ludCB0byB0aGUgcHJldmlvdXMgc3RydWN0IGluc3RlYWQgKi8KIAogICAgICAgICAvKiBXZSBoYXZlIHJlcGxhY2VkIGEgY29va2llLCBub3cgc2tpcCB0aGUgcmVzdCBvZiB0aGUgbGlzdCBidXQKQEAgLTEwOTgsNiArMTA5Miw4IEBACiAgKgogICogSWYgJ25ld3Nlc3Npb24nIGlzIFRSVUUsIGRpc2NhcmQgYWxsICJzZXNzaW9uIGNvb2tpZXMiIG9uIHJlYWQgZnJvbSBmaWxlLgogICoKKyAqIE5vdGUgdGhhdCAnZGF0YScgbWlnaHQgYmUgY2FsbGVkIGFzIE5VTEwgcG9pbnRlci4KKyAqCiAgKiBSZXR1cm5zIE5VTEwgb24gb3V0IG9mIG1lbW9yeS4gSW52YWxpZCBjb29raWVzIGFyZSBpZ25vcmVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLApAQCAtMTE2OCw2ICsxMTY0LDggQEAKICAgfQogCiAgIGMtPnJ1bm5pbmcgPSBUUlVFOyAgICAgICAgICAvKiBub3csIHdlJ3JlIHJ1bm5pbmcgKi8KKyAgaWYoZGF0YSkKKyAgICBkYXRhLT5zdGF0ZS5jb29raWVfZW5naW5lID0gVFJVRTsKIAogICByZXR1cm4gYzsKIApAQCAtMTUwNCwxMSArMTUwMiwxNCBAQAogICoKICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIG9uIHdyaXRlIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgY29va2llX291dHB1dChzdHJ1Y3QgQ29va2llSW5mbyAqYywgY29uc3QgY2hhciAqZHVtcGhlcmUpCitzdGF0aWMgaW50IGNvb2tpZV9vdXRwdXQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29va2llSW5mbyAqYywgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgIHN0cnVjdCBDb29raWUgKmNvOwotICBGSUxFICpvdXQ7CisgIEZJTEUgKm91dCA9IE5VTEw7CiAgIGJvb2wgdXNlX3N0ZG91dCA9IEZBTFNFOworICBjaGFyICp0ZW1wc3RvcmUgPSBOVUxMOworICBib29sIGVycm9yID0gZmFsc2U7CiAKICAgaWYoIWMpCiAgICAgLyogbm8gY29va2llIGVuZ2luZSBhbGl2ZSAqLwpAQCAtMTUxNywxNiArMTUxOCwyNCBAQAogICAvKiBhdCBmaXJzdCwgcmVtb3ZlIGV4cGlyZWQgY29va2llcyAqLwogICByZW1vdmVfZXhwaXJlZChjKTsKIAotICBpZighc3RyY21wKCItIiwgZHVtcGhlcmUpKSB7CisgIGlmKCFzdHJjbXAoIi0iLCBmaWxlbmFtZSkpIHsKICAgICAvKiB1c2Ugc3Rkb3V0ICovCiAgICAgb3V0ID0gc3Rkb3V0OwogICAgIHVzZV9zdGRvdXQgPSBUUlVFOwogICB9CiAgIGVsc2UgewotICAgIG91dCA9IGZvcGVuKGR1bXBoZXJlLCBGT1BFTl9XUklURVRFWFQpOwotICAgIGlmKCFvdXQpIHsKLSAgICAgIHJldHVybiAxOyAvKiBmYWlsdXJlICovCi0gICAgfQorICAgIHVuc2lnbmVkIGNoYXIgcmFuZHN1ZmZpeFs5XTsKKworICAgIGlmKEN1cmxfcmFuZF9oZXgoZGF0YSwgcmFuZHN1ZmZpeCwgc2l6ZW9mKHJhbmRzdWZmaXgpKSkKKyAgICAgIHJldHVybiAyOworCisgICAgdGVtcHN0b3JlID0gYXByaW50ZigiJXMuJXMudG1wIiwgZmlsZW5hbWUsIHJhbmRzdWZmaXgpOworICAgIGlmKCF0ZW1wc3RvcmUpCisgICAgICByZXR1cm4gMTsKKworICAgIG91dCA9IGZvcGVuKHRlbXBzdG9yZSwgRk9QRU5fV1JJVEVURVhUKTsKKyAgICBpZighb3V0KQorICAgICAgZ290byBlcnJvcjsKICAgfQogCiAgIGZwdXRzKCIjIE5ldHNjYXBlIEhUVFAgQ29va2llIEZpbGVcbiIKQEAgLTE1MzYsMzUgKzE1NDUsMzEgQEAKIAogICBpZihjLT5udW1jb29raWVzKSB7CiAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgdW5zaWduZWQgaW50IGo7CisgICAgc2l6ZV90IG52YWxpZCA9IDA7CiAgICAgc3RydWN0IENvb2tpZSAqKmFycmF5OwogCi0gICAgYXJyYXkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBDb29raWUgKikgKiBjLT5udW1jb29raWVzKTsKKyAgICBhcnJheSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IENvb2tpZSAqKSAqIGMtPm51bWNvb2tpZXMpOwogICAgIGlmKCFhcnJheSkgewotICAgICAgaWYoIXVzZV9zdGRvdXQpCi0gICAgICAgIGZjbG9zZShvdXQpOwotICAgICAgcmV0dXJuIDE7CisgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGogPSAwOworICAgIC8qIG9ubHkgc29ydCB0aGUgY29va2llcyB3aXRoIGEgZG9tYWluIHByb3BlcnR5ICovCiAgICAgZm9yKGkgPSAwOyBpIDwgQ09PS0lFX0hBU0hfU0laRTsgaSsrKSB7CiAgICAgICBmb3IoY28gPSBjLT5jb29raWVzW2ldOyBjbzsgY28gPSBjby0+bmV4dCkgewogICAgICAgICBpZighY28tPmRvbWFpbikKICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXJyYXlbaisrXSA9IGNvOworICAgICAgICBhcnJheVtudmFsaWQrK10gPSBjbzsKICAgICAgIH0KICAgICB9CiAKLSAgICBxc29ydChhcnJheSwgYy0+bnVtY29va2llcywgc2l6ZW9mKHN0cnVjdCBDb29raWUgKiksIGNvb2tpZV9zb3J0X2N0KTsKKyAgICBxc29ydChhcnJheSwgbnZhbGlkLCBzaXplb2Yoc3RydWN0IENvb2tpZSAqKSwgY29va2llX3NvcnRfY3QpOwogCi0gICAgZm9yKGkgPSAwOyBpIDwgajsgaSsrKSB7CisgICAgZm9yKGkgPSAwOyBpIDwgbnZhbGlkOyBpKyspIHsKICAgICAgIGNoYXIgKmZvcm1hdF9wdHIgPSBnZXRfbmV0c2NhcGVfZm9ybWF0KGFycmF5W2ldKTsKICAgICAgIGlmKGZvcm1hdF9wdHIgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKG91dCwgIiNcbiMgRmF0YWwgbGliY3VybCBlcnJvclxuIik7CiAgICAgICAgIGZyZWUoYXJyYXkpOwotICAgICAgICBpZighdXNlX3N0ZG91dCkKLSAgICAgICAgICBmY2xvc2Uob3V0KTsKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICB9CiAgICAgICBmcHJpbnRmKG91dCwgIiVzXG4iLCBmb3JtYXRfcHRyKTsKICAgICAgIGZyZWUoZm9ybWF0X3B0cik7CkBAIC0xNTcyLDEwICsxNTc3LDI0IEBACiAKICAgICBmcmVlKGFycmF5KTsKICAgfQotICBpZighdXNlX3N0ZG91dCkKLSAgICBmY2xvc2Uob3V0KTsKIAotICByZXR1cm4gMDsKKyAgaWYoIXVzZV9zdGRvdXQpIHsKKyAgICBmY2xvc2Uob3V0KTsKKyAgICBvdXQgPSBOVUxMOworICAgIGlmKEN1cmxfcmVuYW1lKHRlbXBzdG9yZSwgZmlsZW5hbWUpKSB7CisgICAgICB1bmxpbmsodGVtcHN0b3JlKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICB9CisKKyAgZ290byBjbGVhbnVwOworZXJyb3I6CisgIGVycm9yID0gdHJ1ZTsKK2NsZWFudXA6CisgIGlmKG91dCAmJiAhdXNlX3N0ZG91dCkKKyAgICBmY2xvc2Uob3V0KTsKKyAgZnJlZSh0ZW1wc3RvcmUpOworICByZXR1cm4gZXJyb3IgPyAxIDogMDsKIH0KIAogc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpjb29raWVfbGlzdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTYyMSw3ICsxNjQwLDcgQEAKICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjbGVhbnVwKQordm9pZCBDdXJsX2ZsdXNoX2Nvb2tpZXMoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBjbGVhbnVwKQogewogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKSB7CiAgICAgaWYoZGF0YS0+Y2hhbmdlLmNvb2tpZWxpc3QpIHsKQEAgLTE2MzQsNyArMTY1Myw3IEBACiAgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOwogCiAgICAgLyogaWYgd2UgaGF2ZSBhIGRlc3RpbmF0aW9uIGZpbGUgZm9yIGFsbCB0aGUgY29va2llcyB0byBnZXQgZHVtcGVkIHRvICovCi0gICAgaWYoY29va2llX291dHB1dChkYXRhLT5jb29raWVzLCBkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKSkKKyAgICBpZihjb29raWVfb3V0cHV0KGRhdGEsIGRhdGEtPmNvb2tpZXMsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NPT0tJRUpBUl0pKQogICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBzYXZlIGNvb2tpZXMgaW4gJXNcbiIsCiAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKTsKICAgfQpAQCAtMTY1MCw2ICsxNjY5LDcgQEAKIAogICBpZihjbGVhbnVwICYmICghZGF0YS0+c2hhcmUgfHwgKGRhdGEtPmNvb2tpZXMgIT0gZGF0YS0+c2hhcmUtPmNvb2tpZXMpKSkgewogICAgIEN1cmxfY29va2llX2NsZWFudXAoZGF0YS0+Y29va2llcyk7CisgICAgZGF0YS0+Y29va2llcyA9IE5VTEw7CiAgIH0KICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvb2tpZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKaW5kZXggYjI3MzBjZi4uYjM4NjVlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogI2RlZmluZSBDdXJsX2Nvb2tpZV9jbGVhbnVwKHgpIEN1cmxfbm9wX3N0bXQKICNkZWZpbmUgQ3VybF9mbHVzaF9jb29raWVzKHgseSkgQ3VybF9ub3Bfc3RtdAogI2Vsc2UKLXZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjbGVhbnVwKTsKK3ZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgY2xlYW51cCk7CiB2b2lkIEN1cmxfY29va2llX2NsZWFudXAoc3RydWN0IENvb2tpZUluZm8gKik7CiBzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgQ29va2llSW5mbyAqLCBib29sKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYWRkcmluZm8uYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYWRkcmluZm8uYwppbmRleCAxNmM0Nzc5Li45NDdkMGQzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2FkZHJpbmZvLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9hZGRyaW5mby5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01MCwxMCArNTAsNiBAQAogIyAgZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoVVNFX1VOSVhfU09DS0VUUykKLSNpbmNsdWRlIDxhZnVuaXguaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKICNpbmNsdWRlICJjdXJsX2FkZHJpbmZvLmgiCkBAIC04MiwxNiArNzgsMTMgQEAKICNlbmRpZgogCiB2b2lkCi1DdXJsX2ZyZWVhZGRyaW5mbyhDdXJsX2FkZHJpbmZvICpjYWhlYWQpCitDdXJsX2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqY2FoZWFkKQogewotICBDdXJsX2FkZHJpbmZvICp2cXVhbGlmaWVyIGNhbmV4dDsKLSAgQ3VybF9hZGRyaW5mbyAqY2E7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICp2cXVhbGlmaWVyIGNhbmV4dDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmNhOwogCi0gIGZvcihjYSA9IGNhaGVhZDsgY2EgIT0gTlVMTDsgY2EgPSBjYW5leHQpIHsKLSAgICBmcmVlKGNhLT5haV9hZGRyKTsKLSAgICBmcmVlKGNhLT5haV9jYW5vbm5hbWUpOworICBmb3IoY2EgPSBjYWhlYWQ7IGNhOyBjYSA9IGNhbmV4dCkgewogICAgIGNhbmV4dCA9IGNhLT5haV9uZXh0OwotCiAgICAgZnJlZShjYSk7CiAgIH0KIH0KQEAgLTExNiwxMyArMTA5LDEzIEBACiBDdXJsX2dldGFkZHJpbmZvX2V4KGNvbnN0IGNoYXIgKm5vZGVuYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywKLSAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqKnJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKipyZXN1bHQpCiB7CiAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYWk7CiAgIHN0cnVjdCBhZGRyaW5mbyAqYWloZWFkOwotICBDdXJsX2FkZHJpbmZvICpjYWZpcnN0ID0gTlVMTDsKLSAgQ3VybF9hZGRyaW5mbyAqY2FsYXN0ID0gTlVMTDsKLSAgQ3VybF9hZGRyaW5mbyAqY2E7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpjYWZpcnN0ID0gTlVMTDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmNhbGFzdCA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpjYTsKICAgc2l6ZV90IHNzX3NpemU7CiAgIGludCBlcnJvcjsKIApAQCAtMTM1LDcgKzEyOCw3IEBACiAgIC8qIHRyYXZlcnNlIHRoZSBhZGRyaW5mbyBsaXN0ICovCiAKICAgZm9yKGFpID0gYWloZWFkOyBhaSAhPSBOVUxMOyBhaSA9IGFpLT5haV9uZXh0KSB7Ci0KKyAgICBzaXplX3QgbmFtZWxlbiA9IGFpLT5haV9jYW5vbm5hbWUgPyBzdHJsZW4oYWktPmFpX2Nhbm9ubmFtZSkgKyAxIDogMDsKICAgICAvKiBpZ25vcmUgZWxlbWVudHMgd2l0aCB1bnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseSwgKi8KICAgICAvKiBzZXR0bGUgZmFtaWx5LXNwZWNpZmljIHNvY2thZGRyIHN0cnVjdHVyZSBzaXplLiAgKi8KICAgICBpZihhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQpCkBAIC0xNTUsNyArMTQ4LDcgQEAKICAgICBpZigoc2l6ZV90KWFpLT5haV9hZGRybGVuIDwgc3Nfc2l6ZSkKICAgICAgIGNvbnRpbnVlOwogCi0gICAgY2EgPSBtYWxsb2Moc2l6ZW9mKEN1cmxfYWRkcmluZm8pKTsKKyAgICBjYSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IEN1cmxfYWRkcmluZm8pICsgc3Nfc2l6ZSArIG5hbWVsZW4pOwogICAgIGlmKCFjYSkgewogICAgICAgZXJyb3IgPSBFQUlfTUVNT1JZOwogICAgICAgYnJlYWs7CkBAIC0xNzMsMjIgKzE2NiwxMiBAQAogICAgIGNhLT5haV9jYW5vbm5hbWUgPSBOVUxMOwogICAgIGNhLT5haV9uZXh0ICAgICAgPSBOVUxMOwogCi0gICAgY2EtPmFpX2FkZHIgPSBtYWxsb2Moc3Nfc2l6ZSk7Ci0gICAgaWYoIWNhLT5haV9hZGRyKSB7Ci0gICAgICBlcnJvciA9IEVBSV9NRU1PUlk7Ci0gICAgICBmcmVlKGNhKTsKLSAgICAgIGJyZWFrOwotICAgIH0KKyAgICBjYS0+YWlfYWRkciA9ICh2b2lkICopKChjaGFyICopY2EgKyBzaXplb2Yoc3RydWN0IEN1cmxfYWRkcmluZm8pKTsKICAgICBtZW1jcHkoY2EtPmFpX2FkZHIsIGFpLT5haV9hZGRyLCBzc19zaXplKTsKIAotICAgIGlmKGFpLT5haV9jYW5vbm5hbWUgIT0gTlVMTCkgewotICAgICAgY2EtPmFpX2Nhbm9ubmFtZSA9IHN0cmR1cChhaS0+YWlfY2Fub25uYW1lKTsKLSAgICAgIGlmKCFjYS0+YWlfY2Fub25uYW1lKSB7Ci0gICAgICAgIGVycm9yID0gRUFJX01FTU9SWTsKLSAgICAgICAgZnJlZShjYS0+YWlfYWRkcik7Ci0gICAgICAgIGZyZWUoY2EpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICBpZihuYW1lbGVuKSB7CisgICAgICBjYS0+YWlfY2Fub25uYW1lID0gKHZvaWQgKikoKGNoYXIgKiljYS0+YWlfYWRkciArIHNzX3NpemUpOworICAgICAgbWVtY3B5KGNhLT5haV9jYW5vbm5hbWUsIGFpLT5haV9jYW5vbm5hbWUsIG5hbWVsZW4pOwogICAgIH0KIAogICAgIC8qIGlmIHRoZSByZXR1cm4gbGlzdCBpcyBlbXB0eSwgdGhpcyBiZWNvbWVzIHRoZSBmaXJzdCBlbGVtZW50ICovCkBAIC0yNTYsNyArMjM5LDYgQEAKICAqICAgICAgIHN0cnVjdCBzb2NrYWRkciAgICAgICphaV9hZGRyOwogICogICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpX25leHQ7CiAgKiAgICAgfTsKLSAqICAgICB0eXBlZGVmIHN0cnVjdCBDdXJsX2FkZHJpbmZvIEN1cmxfYWRkcmluZm87CiAgKgogICogICBob3N0ZW50IGRlZmluZWQgaW4gPG5ldGRiLmg+CiAgKgpAQCAtMjczLDEyICsyNTUsMTIgQEAKICAqICAgICAjZGVmaW5lIGhfYWRkciAgaF9hZGRyX2xpc3RbMF0KICAqLwogCi1DdXJsX2FkZHJpbmZvICoKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICoKIEN1cmxfaGUyYWkoY29uc3Qgc3RydWN0IGhvc3RlbnQgKmhlLCBpbnQgcG9ydCkKIHsKLSAgQ3VybF9hZGRyaW5mbyAqYWk7Ci0gIEN1cmxfYWRkcmluZm8gKnByZXZhaSA9IE5VTEw7Ci0gIEN1cmxfYWRkcmluZm8gKmZpcnN0YWkgPSBOVUxMOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWk7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpwcmV2YWkgPSBOVUxMOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqZmlyc3RhaSA9IE5VTEw7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjsKICNpZmRlZiBFTkFCTEVfSVBWNgogICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNjsKQEAgLTI5NCw4ICsyNzYsOCBAQAogICBERUJVR0FTU0VSVCgoaGUtPmhfbmFtZSAhPSBOVUxMKSAmJiAoaGUtPmhfYWRkcl9saXN0ICE9IE5VTEwpKTsKIAogICBmb3IoaSA9IDA7IChjdXJyID0gaGUtPmhfYWRkcl9saXN0W2ldKSAhPSBOVUxMOyBpKyspIHsKLQogICAgIHNpemVfdCBzc19zaXplOworICAgIHNpemVfdCBuYW1lbGVuID0gc3RybGVuKGhlLT5oX25hbWUpICsgMTsgLyogaW5jbHVkZSB6ZXJvIHRlcm1pbmF0aW9uICovCiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgICBpZihoZS0+aF9hZGRydHlwZSA9PSBBRl9JTkVUNikKICAgICAgIHNzX3NpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CkBAIC0zMDMsMjQgKzI4NSwxNyBAQAogI2VuZGlmCiAgICAgICBzc19zaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAKLSAgICBhaSA9IGNhbGxvYygxLCBzaXplb2YoQ3VybF9hZGRyaW5mbykpOworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSB0byB0b2xkIHRoZSBzdHJ1Y3QsIHRoZSBhZGRyZXNzIGFuZCB0aGUgbmFtZSAqLworICAgIGFpID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykgKyBzc19zaXplICsgbmFtZWxlbik7CiAgICAgaWYoIWFpKSB7CiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFpLT5haV9jYW5vbm5hbWUgPSBzdHJkdXAoaGUtPmhfbmFtZSk7Ci0gICAgaWYoIWFpLT5haV9jYW5vbm5hbWUpIHsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICBmcmVlKGFpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBhaS0+YWlfYWRkciA9IGNhbGxvYygxLCBzc19zaXplKTsKLSAgICBpZighYWktPmFpX2FkZHIpIHsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICBmcmVlKGFpLT5haV9jYW5vbm5hbWUpOwotICAgICAgZnJlZShhaSk7Ci0gICAgICBicmVhazsKLSAgICB9CisgICAgLyogcHV0IHRoZSBhZGRyZXNzIGFmdGVyIHRoZSBzdHJ1Y3QgKi8KKyAgICBhaS0+YWlfYWRkciA9ICh2b2lkICopKChjaGFyICopYWkgKyBzaXplb2Yoc3RydWN0IEN1cmxfYWRkcmluZm8pKTsKKyAgICAvKiB0aGVuIHB1dCB0aGUgbmFtZSBhZnRlciB0aGUgYWRkcmVzcyAqLworICAgIGFpLT5haV9jYW5vbm5hbWUgPSAoY2hhciAqKWFpLT5haV9hZGRyICsgc3Nfc2l6ZTsKKyAgICBtZW1jcHkoYWktPmFpX2Nhbm9ubmFtZSwgaGUtPmhfbmFtZSwgbmFtZWxlbik7CiAKICAgICBpZighZmlyc3RhaSkKICAgICAgIC8qIHN0b3JlIHRoZSBwb2ludGVyIHdlIHdhbnQgdG8gcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiAqLwpAQCAtMzkzLDEwICszNjgsMTAgQEAKICAqIGdpdmVuIGFkZHJlc3MvaG9zdAogICovCiAKLUN1cmxfYWRkcmluZm8gKgorc3RydWN0IEN1cmxfYWRkcmluZm8gKgogQ3VybF9pcDJhZGRyKGludCBhZiwgY29uc3Qgdm9pZCAqaW5hZGRyLCBjb25zdCBjaGFyICpob3N0bmFtZSwgaW50IHBvcnQpCiB7Ci0gIEN1cmxfYWRkcmluZm8gKmFpOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWk7CiAKICNpZiBkZWZpbmVkKF9fVk1TKSAmJiBcCiAgICAgZGVmaW5lZChfX0lOSVRJQUxfUE9JTlRFUl9TSVpFKSAmJiAoX19JTklUSUFMX1BPSU5URVJfU0laRSA9PSA2NCkKQEAgLTQ2OSw3ICs0NDQsNyBAQAogICogR2l2ZW4gYW4gSVB2NCBvciBJUHY2IGRvdHRlZCBzdHJpbmcgYWRkcmVzcywgdGhpcyBjb252ZXJ0cyBpdCB0byBhIHByb3BlcgogICogYWxsb2NhdGVkIEN1cmxfYWRkcmluZm8gc3RydWN0IGFuZCByZXR1cm5zIGl0LgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3N0cjJhZGRyKGNoYXIgKmFkZHJlc3MsIGludCBwb3J0KQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfc3RyMmFkZHIoY2hhciAqYWRkcmVzcywgaW50IHBvcnQpCiB7CiAgIHN0cnVjdCBpbl9hZGRyIGluOwogICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBhZGRyZXNzLCAmaW4pID4gMCkKQEAgLTQ5MiwyMiArNDY3LDE5IEBACiAgKiBzdHJ1Y3QgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIHBhdGguCiAgKiBTZXQgJypsb25ncGF0aCcgdG8gVFJVRSBpZiB0aGUgZXJyb3IgaXMgYSB0b28gbG9uZyBwYXRoLgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3VuaXgyYWRkcihjb25zdCBjaGFyICpwYXRoLCBib29sICpsb25ncGF0aCwgYm9vbCBhYnN0cmFjdCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX3VuaXgyYWRkcihjb25zdCBjaGFyICpwYXRoLCBib29sICpsb25ncGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFic3RyYWN0KQogewotICBDdXJsX2FkZHJpbmZvICphaTsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpOwogICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnNhX3VuOwogICBzaXplX3QgcGF0aF9sZW47CiAKICAgKmxvbmdwYXRoID0gRkFMU0U7CiAKLSAgYWkgPSBjYWxsb2MoMSwgc2l6ZW9mKEN1cmxfYWRkcmluZm8pKTsKKyAgYWkgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBDdXJsX2FkZHJpbmZvKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsKICAgaWYoIWFpKQogICAgIHJldHVybiBOVUxMOwotICBhaS0+YWlfYWRkciA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSk7Ci0gIGlmKCFhaS0+YWlfYWRkcikgewotICAgIGZyZWUoYWkpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGFpLT5haV9hZGRyID0gKHZvaWQgKikoKGNoYXIgKilhaSArIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykpOwogCiAgIHNhX3VuID0gKHZvaWQgKikgYWktPmFpX2FkZHI7CiAgIHNhX3VuLT5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKQEAgLTUxNSw3ICs0ODcsNiBAQAogICAvKiBzdW5fcGF0aCBtdXN0IGJlIGFibGUgdG8gc3RvcmUgdGhlIE5VTC10ZXJtaW5hdGVkIHBhdGggKi8KICAgcGF0aF9sZW4gPSBzdHJsZW4ocGF0aCkgKyAxOwogICBpZihwYXRoX2xlbiA+IHNpemVvZihzYV91bi0+c3VuX3BhdGgpKSB7Ci0gICAgZnJlZShhaS0+YWlfYWRkcik7CiAgICAgZnJlZShhaSk7CiAgICAgKmxvbmdwYXRoID0gVFJVRTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTU5OCw5ICs1NjksOSBAQAogICogV29yay1hcm91bmRzIHRoZSBzaW42X3BvcnQgaXMgYWx3YXlzIHplcm8gYnVnIG9uIGlPUyA5LjMuMiBhbmQgTWFjIE9TIFgKICAqIDEwLjExLjUuCiAgKi8KLXZvaWQgQ3VybF9hZGRyaW5mb19zZXRfcG9ydChDdXJsX2FkZHJpbmZvICphZGRyaW5mbywgaW50IHBvcnQpCit2b2lkIEN1cmxfYWRkcmluZm9fc2V0X3BvcnQoc3RydWN0IEN1cmxfYWRkcmluZm8gKmFkZHJpbmZvLCBpbnQgcG9ydCkKIHsKLSAgQ3VybF9hZGRyaW5mbyAqY2E7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpjYTsKICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyOwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9hZGRyaW5mby5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9hZGRyaW5mby5oCmluZGV4IDIwNWUxMjEuLmEwY2FkZTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYWRkcmluZm8uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2FkZHJpbmZvLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQwLDcgKzQwLDYgQEAKICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKLQogLyoKICAqIEN1cmxfYWRkcmluZm8gaXMgb3VyIGludGVybmFsIHN0cnVjdCBkZWZpbml0aW9uIHRoYXQgd2UgdXNlIHRvIGFsbG93CiAgKiBjb25zaXN0ZW50IGludGVybmFsIGhhbmRsaW5nIG9mIHRoaXMgZGF0YS4gV2UgdXNlIHRoaXMgZXZlbiB3aGVuIHRoZQpAQCAtNTgsMjkgKzU3LDI5IEBACiAgIHN0cnVjdCBzb2NrYWRkciAgICAgICphaV9hZGRyOwogICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWlfbmV4dDsKIH07Ci10eXBlZGVmIHN0cnVjdCBDdXJsX2FkZHJpbmZvIEN1cmxfYWRkcmluZm87CiAKIHZvaWQKLUN1cmxfZnJlZWFkZHJpbmZvKEN1cmxfYWRkcmluZm8gKmNhaGVhZCk7CitDdXJsX2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqY2FoZWFkKTsKIAogI2lmZGVmIEhBVkVfR0VUQUREUklORk8KIGludAogQ3VybF9nZXRhZGRyaW5mb19leChjb25zdCBjaGFyICpub2RlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCi0gICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKipyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqKnJlc3VsdCk7CiAjZW5kaWYKIAotQ3VybF9hZGRyaW5mbyAqCitzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqCiBDdXJsX2hlMmFpKGNvbnN0IHN0cnVjdCBob3N0ZW50ICpoZSwgaW50IHBvcnQpOwogCi1DdXJsX2FkZHJpbmZvICoKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICoKIEN1cmxfaXAyYWRkcihpbnQgYWYsIGNvbnN0IHZvaWQgKmluYWRkciwgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KTsKIAotQ3VybF9hZGRyaW5mbyAqQ3VybF9zdHIyYWRkcihjaGFyICpkb3R0ZWQsIGludCBwb3J0KTsKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX3N0cjJhZGRyKGNoYXIgKmRvdHRlZCwgaW50IHBvcnQpOwogCiAjaWZkZWYgVVNFX1VOSVhfU09DS0VUUwotQ3VybF9hZGRyaW5mbyAqQ3VybF91bml4MmFkZHIoY29uc3QgY2hhciAqcGF0aCwgYm9vbCAqbG9uZ3BhdGgsIGJvb2wgYWJzdHJhY3QpOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfdW5peDJhZGRyKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgKmxvbmdwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWJzdHJhY3QpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENVUkxERUJVRykgJiYgZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSAmJiBcCkBAIC05OCw3ICs5Nyw3IEBACiAKICNpZmRlZiBIQVZFX0dFVEFERFJJTkZPCiAjaWZkZWYgVVNFX1JFU09MVkVfT05fSVBTCi12b2lkIEN1cmxfYWRkcmluZm9fc2V0X3BvcnQoQ3VybF9hZGRyaW5mbyAqYWRkcmluZm8sIGludCBwb3J0KTsKK3ZvaWQgQ3VybF9hZGRyaW5mb19zZXRfcG9ydChzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWRkcmluZm8sIGludCBwb3J0KTsKICNlbHNlCiAjZGVmaW5lIEN1cmxfYWRkcmluZm9fc2V0X3BvcnQoeCx5KQogI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Jhc2U2NC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9iYXNlNjQuaAppbmRleCA3ZTlmYzI2Li5jZmI2ZWU3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Jhc2U2NC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYmFzZTY0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfY29uZmlnLmguY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2NvbmZpZy5oLmNtYWtlCmluZGV4IGIyODVjM2YuLjAwYWU2NTggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfY29uZmlnLmguY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9jb25maWcuaC5jbWFrZQpAQCAtMSw1ICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBsaWIvY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBzb21laG93IGJ5IGNtYWtlLiAgKi8KIAorI2luY2x1ZGUgPGNtM3Ava3dpbWwvYWJpLmg+CisKIC8qIHdoZW4gYnVpbGRpbmcgbGliY3VybCBpdHNlbGYgKi8KICNjbWFrZWRlZmluZSBCVUlMRElOR19MSUJDVVJMIDEKIApAQCAtMzMsNiArNTYsOSBAQAogLyogdG8gZGlzYWJsZSBMREFQUyAqLwogI2NtYWtlZGVmaW5lIENVUkxfRElTQUJMRV9MREFQUyAxCiAKKy8qIHRvIGVuYWJsZSBNUVRUICovCisjdW5kZWYgQ1VSTF9FTkFCTEVfTVFUVAorCiAvKiB0byBkaXNhYmxlIFBPUDMgKi8KICNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfUE9QMyAxCiAKQEAgLTY0LDYgKzkwLDkgQEAKICNkZWZpbmUgQ1VSTF9FWFRFUk5fU1lNQk9MCiAjZW5kaWYKIAorLyogQWxsb3cgU01CIHRvIHdvcmsgb24gV2luZG93cyAqLworI2NtYWtlZGVmaW5lIFVTRV9XSU4zMl9DUllQVE8KKwogLyogVXNlIFdpbmRvd3MgTERBUCBpbXBsZW1lbnRhdGlvbiAqLwogI2NtYWtlZGVmaW5lIFVTRV9XSU4zMl9MREFQIDEKIApAQCAtMTMzLDE1ICsxNjIsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9DUllQVE9fSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVTX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfRExGQ05fSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzJyBmdW5jdGlvbi4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0VOR0lORV9MT0FEX0JVSUxUSU5fRU5HSU5FUyAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9FUlJOT19IIDEKIApAQCAtMjMyLDYgKzI1NSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNvY2tuYW1lJyBmdW5jdGlvbi4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0dFVFNPQ0tOQU1FIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9uYW1ldG9pbmRleCcgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9JRl9OQU1FVE9JTkRFWCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWQnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfR0VUUFdVSUQgMQogCkBAIC0zOTUsOCArNDIxLDggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlic3NoMi5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQlNTSDJfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NsJyBsaWJyYXJ5ICgtbHNzbCkuICovCi0jY21ha2VkZWZpbmUgSEFWRV9MSUJTU0wgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJzc2gvbGlic3NoLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTElCU1NIX0xJQlNTSF9IIDEKIAogLyogaWYgemxpYiBpcyBhdmFpbGFibGUgKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQlogMQpAQCAtNDA0LDkgKzQzMCw2IEBACiAvKiBpZiBicm90bGkgaXMgYXZhaWxhYmxlICovCiAjY21ha2VkZWZpbmUgSEFWRV9CUk9UTEkgMQogCi0vKiBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIExMICovCi0jY21ha2VkZWZpbmUgSEFWRV9MTCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQogCkBAIC00MTQsNyArNDM3LDkgQEAKICNjbWFrZWRlZmluZSBIQVZFX0xPQ0FMVElNRV9SIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBsb25nJyBkYXRhIHR5cGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9MT05HTE9ORyAxCisjaWYgS1dJTUxfQUJJX1NJWkVPRl9MT05HX0xPTkcKKyMgIGRlZmluZSBIQVZFX0xPTkdMT05HIDEKKyNlbmRpZgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCkBAIC00NDYsOSArNDcxLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2VuZ2luZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfT1BFTlNTTF9FUlJfSCAxCiAKQEAgLTU3NSw5ICs1OTcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU09DS0VUIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBTU0xfZ2V0X3NodXRkb3duJyBmdW5jdGlvbi4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNzbC5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1NTTF9IIDEKIApAQCAtODc5LDM1ICs4OTgsNDYgQEAKIC8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCiAjY21ha2VkZWZpbmUgU0VORF9UWVBFX1JFVFYgJHtTRU5EX1RZUEVfUkVUVn0KIAorLyoKKyBOb3RlOiBTSVpFT0ZfKiB2YXJpYWJsZXMgYXJlIGZldGNoZWQgd2l0aCBDTWFrZSB0aHJvdWdoIGNoZWNrX3R5cGVfc2l6ZSgpLgorIEFzIHBlciBDTWFrZSBkb2N1bWVudGF0aW9uIG9uIENoZWNrVHlwZVNpemUsIEMgcHJlcHJvY2Vzc29yIGNvZGUgaXMKKyBnZW5lcmF0ZWQgYnkgQ01ha2UgaW50byBTSVpFT0ZfKl9DT0RFLiBUaGlzIGlzIHdoYXQgd2UgdXNlIGluIHRoZQorIGZvbGxvd2luZyBzdGF0ZW1lbnRzLgorCisgUmVmZXJlbmNlOiBodHRwczovL2NtYWtlLm9yZy9jbWFrZS9oZWxwL2xhdGVzdC9tb2R1bGUvQ2hlY2tUeXBlU2l6ZS5odG1sCisqLworCiAvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9JTlRfQ09ERUAKKyNkZWZpbmUgU0laRU9GX0lOVCBLV0lNTF9BQklfU0laRU9GX0lOVAogCiAvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX1NIT1JUX0NPREVACisjZGVmaW5lIFNJWkVPRl9TSE9SVCBLV0lNTF9BQklfU0laRU9GX1NIT1JUCiAKIC8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9MT05HX0NPREVACisjZGVmaW5lIFNJWkVPRl9MT05HIEtXSU1MX0FCSV9TSVpFT0ZfTE9ORwogCiAvKiBUaGUgc2l6ZSBvZiBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9MT05HX0xPTkdfQ09ERUAKKyNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyBLV0lNTF9BQklfU0laRU9GX0xPTkdfTE9ORwogCiAvKiBUaGUgc2l6ZSBvZiBgX19pbnQ2NCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfX19JTlQ2NF9DT0RFQAorI2lmIEtXSU1MX0FCSV9TSVpFT0ZfX19JTlQ2NAorIyAgZGVmaW5lIFNJWkVPRl9fX0lOVDY0IEtXSU1MX0FCSV9TSVpFT0ZfX19JTlQ2NAorI2VuZGlmCiAKIC8qIFRoZSBzaXplIG9mIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfT0ZGX1RfQ09ERUAKKyR7U0laRU9GX09GRl9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGBjdXJsX29mZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9DVVJMX09GRl9UX0NPREVACiske1NJWkVPRl9DVVJMX09GRl9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX1NJWkVfVF9DT0RFQAorJHtTSVpFT0ZfU0laRV9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGBzc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9TU0laRV9UX0NPREVACiske1NJWkVPRl9TU0laRV9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX1RJTUVfVF9DT0RFQAorJHtTSVpFT0ZfVElNRV9UX0NPREV9CiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwogI2NtYWtlZGVmaW5lIFNURENfSEVBREVSUyAxCkBAIC05MzMsMTUgKzk2MywyMSBAQAogLyogaWYgR251VExTIGlzIGVuYWJsZWQgKi8KICNjbWFrZWRlZmluZSBVU0VfR05VVExTIDEKIAotLyogaWYgUG9sYXJTU0wgaXMgZW5hYmxlZCAqLwotI2NtYWtlZGVmaW5lIFVTRV9QT0xBUlNTTCAxCi0KIC8qIGlmIFNlY3VyZSBUcmFuc3BvcnQgaXMgZW5hYmxlZCAqLwogI2NtYWtlZGVmaW5lIFVTRV9TRUNUUkFOU1AgMQogCiAvKiBpZiBtYmVkVExTIGlzIGVuYWJsZWQgKi8KICNjbWFrZWRlZmluZSBVU0VfTUJFRFRMUyAxCiAKKy8qIGlmIEJlYXJTU0wgaXMgZW5hYmxlZCAqLworI2NtYWtlZGVmaW5lIFVTRV9CRUFSU1NMIDEKKworLyogaWYgV29sZlNTTCBpcyBlbmFibGVkICovCisjY21ha2VkZWZpbmUgVVNFX1dPTEZTU0wgMQorCisvKiBpZiBsaWJTU0ggaXMgaW4gdXNlICovCisjY21ha2VkZWZpbmUgVVNFX0xJQlNTSCAxCisKIC8qIGlmIGxpYlNTSDIgaXMgaW4gdXNlICovCiAjY21ha2VkZWZpbmUgVVNFX0xJQlNTSDIgMQogCkBAIC05NTEsNiArOTg3LDkgQEAKIC8qIGlmIE5TUyBpcyBlbmFibGVkICovCiAjY21ha2VkZWZpbmUgVVNFX05TUyAxCiAKKy8qIGlmIHlvdSBoYXZlIHRoZSBQSzExX0NyZWF0ZU1hbmFnZWRHZW5lcmljT2JqZWN0IGZ1bmN0aW9uICovCisjY21ha2VkZWZpbmUgSEFWRV9QSzExX0NSRUFURU1BTkFHRURHRU5FUklDT0JKRUNUIDEKKwogLyogaWYgeW91IHdhbnQgdG8gdXNlIE9wZW5MREFQIGNvZGUgaW5zdGVhZCBvZiBsZWdhY3kgbGRhcCBpbXBsZW1lbnRhdGlvbiAqLwogI2NtYWtlZGVmaW5lIFVTRV9PUEVOTERBUCAxCiAKQEAgLTk2MCw5ICs5OTksMjQgQEAKIC8qIHRvIGVuYWJsZSBOR0hUVFAyICAqLwogI2NtYWtlZGVmaW5lIFVTRV9OR0hUVFAyIDEKIAorLyogdG8gZW5hYmxlIE5HVENQMiAqLworI2NtYWtlZGVmaW5lIFVTRV9OR1RDUDIgMQorCisvKiB0byBlbmFibGUgTkdIVFRQMyAgKi8KKyNjbWFrZWRlZmluZSBVU0VfTkdIVFRQMyAxCisKKy8qIHRvIGVuYWJsZSBxdWljaGUgKi8KKyNjbWFrZWRlZmluZSBVU0VfUVVJQ0hFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHF1aWNoZV9jb25uX3NldF9xbG9nX2ZkIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUVVJQ0hFX0NPTk5fU0VUX1FMT0dfRkQgMQorCiAvKiBpZiBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBlbmFibGVkICAqLwogI2NtYWtlZGVmaW5lIFVTRV9VTklYX1NPQ0tFVFMKIAorLyogdG8gZW5hYmxlIGFsdC1zdmMgKi8KKyNjbWFrZWRlZmluZSBVU0VfQUxUU1ZDIDEKKwogLyogdG8gZW5hYmxlIFNTUEkgc3VwcG9ydCAqLwogI2NtYWtlZGVmaW5lIFVTRV9XSU5ET1dTX1NTUEkgMQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9kZXMuYwppbmRleCBiMTIzYTAwLi4zOWMwZjM1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTksIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9kZXMuaAppbmRleCAxMjkwNjBmLi5hNDJlZWI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTksIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9lbmRpYW4uYwppbmRleCBiNzU2M2IzLi5hNzc0ZDEzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmMKQEAgLTgxLDYgKzgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydClidWZbMV0pKTsKIH0KIAorI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gNCkKIC8qCiAgKiB3cml0ZTMyX2xlKCkKICAqCkBAIC0xMDAsNyArMTAxLDYgQEAKICAgYnVmZmVyWzNdID0gKGNoYXIpKCh2YWx1ZSAmIDB4RkYwMDAwMDApID4+IDI0KTsKIH0KIAotI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gNCkKIC8qCiAgKiBDdXJsX3dyaXRlNjRfbGUoKQogICoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5oCmluZGV4IDRmMzQ1YTYuLjk4MzBlNTggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9lbmRpYW4uaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzEsOSArMzEsNiBAQAogLyogQ29udmVydHMgYSAxNi1iaXQgaW50ZWdlciBmcm9tIGJpZyBlbmRpYW4gKi8KIHVuc2lnbmVkIHNob3J0IEN1cmxfcmVhZDE2X2JlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Zik7CiAKLS8qIENvbnZlcnRzIGEgMzItYml0IGludGVnZXIgdG8gbGl0dGxlIGVuZGlhbiAqLwotdm9pZCBDdXJsX3dyaXRlMzJfbGUoY29uc3QgaW50IHZhbHVlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpOwotCiAjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiA0KQogLyogQ29udmVydHMgYSA2NC1iaXQgaW50ZWdlciB0byBsaXR0bGUgZW5kaWFuICovCiAjaWYgZGVmaW5lZChIQVZFX0xPTkdMT05HKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9mbm1hdGNoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2ZubWF0Y2guaAppbmRleCA2OWZmZTM5Li4zNGZjY2FlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2ZubWF0Y2guaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2ZubWF0Y2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9nZXRob3N0bmFtZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9nZXRob3N0bmFtZS5oCmluZGV4IDA3NTE3YzUuLjhhZTE1ZTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZ2V0aG9zdG5hbWUuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2dldGhvc3RuYW1lLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfaG1hYy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9obWFjLmgKaW5kZXggNzU2ZGM5ZS4uOWI3MGM4NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9obWFjLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9obWFjLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDYgKzI0LDggQEAKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKIAorI2RlZmluZSBITUFDX01ENV9MRU5HVEggMTYKKwogdHlwZWRlZiB2b2lkICAgICgqIEhNQUNfaGluaXRfZnVuYykodm9pZCAqY29udGV4dCk7CiB0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19odXBkYXRlX2Z1bmMpKHZvaWQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCkBAIC0zMiwzNSArMzQsMzggQEAKIAogCiAvKiBQZXItaGFzaCBmdW5jdGlvbiBITUFDIHBhcmFtZXRlcnMuICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgSE1BQ19oaW5pdF9mdW5jICAgICAgIGhtYWNfaGluaXQ7ICAgICAvKiBJbml0aWFsaXplIGNvbnRleHQgcHJvY2VkdXJlLiAqLworc3RydWN0IEhNQUNfcGFyYW1zIHsKKyAgSE1BQ19oaW5pdF9mdW5jCisgIGhtYWNfaGluaXQ7ICAgICAvKiBJbml0aWFsaXplIGNvbnRleHQgcHJvY2VkdXJlLiAqLwogICBITUFDX2h1cGRhdGVfZnVuYyAgICAgaG1hY19odXBkYXRlOyAgIC8qIFVwZGF0ZSBjb250ZXh0IHdpdGggZGF0YS4gKi8KICAgSE1BQ19oZmluYWxfZnVuYyAgICAgIGhtYWNfaGZpbmFsOyAgICAvKiBHZXQgZmluYWwgcmVzdWx0IHByb2NlZHVyZS4gKi8KICAgdW5zaWduZWQgaW50ICAgICAgICAgIGhtYWNfY3R4dHNpemU7ICAvKiBDb250ZXh0IHN0cnVjdHVyZSBzaXplLiAqLwogICB1bnNpZ25lZCBpbnQgICAgICAgICAgaG1hY19tYXhrZXlsZW47IC8qIE1heGltdW0ga2V5IGxlbmd0aCAoYnl0ZXMpLiAqLwogICB1bnNpZ25lZCBpbnQgICAgICAgICAgaG1hY19yZXN1bHRsZW47IC8qIFJlc3VsdCBsZW5ndGggKGJ5dGVzKS4gKi8KLX0gSE1BQ19wYXJhbXM7Cit9OwogCiAKIC8qIEhNQUMgY29tcHV0YXRpb24gY29udGV4dC4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBITUFDX3BhcmFtcyAqaG1hY19oYXNoOyAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24uICovCitzdHJ1Y3QgSE1BQ19jb250ZXh0IHsKKyAgY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpobWFjX2hhc2g7IC8qIEhhc2ggZnVuY3Rpb24gZGVmaW5pdGlvbi4gKi8KICAgdm9pZCAqaG1hY19oYXNoY3R4dDE7ICAgICAgICAgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0IDEuICovCiAgIHZvaWQgKmhtYWNfaGFzaGN0eHQyOyAgICAgICAgIC8qIEhhc2ggZnVuY3Rpb24gY29udGV4dCAyLiAqLwotfSBITUFDX2NvbnRleHQ7Cit9OwogCiAKIC8qIFByb3RvdHlwZXMuICovCi0KLUhNQUNfY29udGV4dCAqIEN1cmxfSE1BQ19pbml0KGNvbnN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7Ci1pbnQgQ3VybF9ITUFDX3VwZGF0ZShITUFDX2NvbnRleHQgKmNvbnRleHQsCitzdHJ1Y3QgSE1BQ19jb250ZXh0ICpDdXJsX0hNQUNfaW5pdChjb25zdCBzdHJ1Y3QgSE1BQ19wYXJhbXMgKmhhc2hwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKTsKK2ludCBDdXJsX0hNQUNfdXBkYXRlKHN0cnVjdCBITUFDX2NvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbik7Ci1pbnQgQ3VybF9ITUFDX2ZpbmFsKEhNQUNfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KTsKK2ludCBDdXJsX0hNQUNfZmluYWwoc3RydWN0IEhNQUNfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KTsKKworQ1VSTGNvZGUgQ3VybF9obWFjaXQoY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgY29uc3Qgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9sZGFwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2xkYXAuaAppbmRleCA5NGMwMDI5Li45MTJlMTMxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2xkYXAuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2xkYXAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDQuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWQ0LmgKaW5kZXggMzkyMjAzZi4uYzdiYjIwOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNCwxNCArMjQsMTMgQEAKIAogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKIAotI2lmIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX01ENCkpIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykpCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQogCi12b2lkIEN1cmxfbWQ0aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGxlbik7CisjZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CiAKLSNlbmRpZiAvKiBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKSB8fAotICAgIChkZWZpbmVkKFVTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKE9QRU5TU0xfTk9fTUQ0KSkgfHwKLSAgICAoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykpICovCit2b2lkIEN1cmxfbWQ0aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKTsKKworI2VuZGlmIC8qICFkZWZpbmVkKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkgKi8KIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX01ENF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDUuaAppbmRleCBhYWYyNWY2Li5lMDZjNjhlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWQ1LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMzLDMwICszMywzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKIHR5cGVkZWYgdm9pZCAoKiBDdXJsX01ENV9maW5hbF9mdW5jKSh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIHZvaWQgKmNvbnRleHQpOwogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgTUQ1X3BhcmFtcyB7CiAgIEN1cmxfTUQ1X2luaXRfZnVuYyAgICAgbWQ1X2luaXRfZnVuYzsgICAvKiBJbml0aWFsaXplIGNvbnRleHQgcHJvY2VkdXJlICovCiAgIEN1cmxfTUQ1X3VwZGF0ZV9mdW5jICAgbWQ1X3VwZGF0ZV9mdW5jOyAvKiBVcGRhdGUgY29udGV4dCB3aXRoIGRhdGEgKi8KICAgQ3VybF9NRDVfZmluYWxfZnVuYyAgICBtZDVfZmluYWxfZnVuYzsgIC8qIEdldCBmaW5hbCByZXN1bHQgcHJvY2VkdXJlICovCiAgIHVuc2lnbmVkIGludCAgICAgICAgICAgbWQ1X2N0eHRzaXplOyAgLyogQ29udGV4dCBzdHJ1Y3R1cmUgc2l6ZSAqLwogICB1bnNpZ25lZCBpbnQgICAgICAgICAgIG1kNV9yZXN1bHRsZW47IC8qIFJlc3VsdCBsZW5ndGggKGJ5dGVzKSAqLwotfSBNRDVfcGFyYW1zOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBNRDVfcGFyYW1zICAgICAgKm1kNV9oYXNoOyAgICAgIC8qIEhhc2ggZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworc3RydWN0IE1ENV9jb250ZXh0IHsKKyAgY29uc3Qgc3RydWN0IE1ENV9wYXJhbXMgKm1kNV9oYXNoOyAgICAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KICAgdm9pZCAgICAgICAgICAgICAgICAgICptZDVfaGFzaGN0eDsgICAvKiBIYXNoIGZ1bmN0aW9uIGNvbnRleHQgKi8KLX0gTUQ1X2NvbnRleHQ7Cit9OwogCi1leHRlcm4gY29uc3QgTUQ1X3BhcmFtcyBDdXJsX0RJR0VTVF9NRDVbMV07Ci1leHRlcm4gY29uc3QgSE1BQ19wYXJhbXMgQ3VybF9ITUFDX01ENVsxXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgTUQ1X3BhcmFtcyBDdXJsX0RJR0VTVF9NRDVbMV07CitleHRlcm4gY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zIEN1cmxfSE1BQ19NRDVbMV07CiAKLXZvaWQgQ3VybF9tZDVpdCh1bnNpZ25lZCBjaGFyICpvdXRwdXQsCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQpOwordm9pZCBDdXJsX21kNWl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGxlbik7CiAKLU1ENV9jb250ZXh0ICogQ3VybF9NRDVfaW5pdChjb25zdCBNRDVfcGFyYW1zICptZDVwYXJhbXMpOwotQ1VSTGNvZGUgQ3VybF9NRDVfdXBkYXRlKE1ENV9jb250ZXh0ICpjb250ZXh0LAorc3RydWN0IE1ENV9jb250ZXh0ICpDdXJsX01ENV9pbml0KGNvbnN0IHN0cnVjdCBNRDVfcGFyYW1zICptZDVwYXJhbXMpOworQ1VSTGNvZGUgQ3VybF9NRDVfdXBkYXRlKHN0cnVjdCBNRDVfY29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pOwotQ1VSTGNvZGUgQ3VybF9NRDVfZmluYWwoTUQ1X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCk7CitDVVJMY29kZSBDdXJsX01ENV9maW5hbChzdHJ1Y3QgTUQ1X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21lbXJjaHIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCmluZGV4IDc0NzUwOWMuLjkwYThhMDcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuYwppbmRleCBlNDgzMzRmLi4yYzg5MjViNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMCwyNCArMjAsMjEgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKgorICogVGhpcyBmaWxlIGlzICdtZW0taW5jbHVkZS1zY2FuJyBjbGVhbi4gU2VlIHRlc3QgMTEzMi4KKyAqLworCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+Ci0KLSNpZiBkZWZpbmVkKFVTRV9XSU4zMl9JRE4pIHx8ICgoZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApKSAmJiBkZWZpbmVkKFVOSUNPREUpKQotCi0gLyoKLSAgKiBNdWx0aUJ5dGUgY29udmVyc2lvbnMgdXNpbmcgV2luZG93cyBrZXJuZWwzMiBsaWJyYXJ5LgotICAqLworI2lmIGRlZmluZWQoV0lOMzIpCiAKICNpbmNsdWRlICJjdXJsX211bHRpYnl0ZS5oIgotI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAKLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisvKgorICogTXVsdGlCeXRlIGNvbnZlcnNpb25zIHVzaW5nIFdpbmRvd3Mga2VybmVsMzIgbGlicmFyeS4KKyAqLwogCi13Y2hhcl90ICpDdXJsX2NvbnZlcnRfVVRGOF90b193Y2hhcihjb25zdCBjaGFyICpzdHJfdXRmOCkKK3djaGFyX3QgKmN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihjb25zdCBjaGFyICpzdHJfdXRmOCkKIHsKICAgd2NoYXJfdCAqc3RyX3cgPSBOVUxMOwogCkBAIC01OSw3ICs1Niw3IEBACiAgIHJldHVybiBzdHJfdzsKIH0KIAotY2hhciAqQ3VybF9jb252ZXJ0X3djaGFyX3RvX1VURjgoY29uc3Qgd2NoYXJfdCAqc3RyX3cpCitjaGFyICpjdXJseF9jb252ZXJ0X3djaGFyX3RvX1VURjgoY29uc3Qgd2NoYXJfdCAqc3RyX3cpCiB7CiAgIGNoYXIgKnN0cl91dGY4ID0gTlVMTDsKIApAQCAtODEsNCArNzgsNzYgQEAKICAgcmV0dXJuIHN0cl91dGY4OwogfQogCi0jZW5kaWYgLyogVVNFX1dJTjMyX0lETiB8fCAoKFVTRV9XSU5ET1dTX1NTUEkgfHwgVVNFX1dJTjMyX0xEQVApICYmIFVOSUNPREUpICovCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTKSB8fCBkZWZpbmVkKFVTRV9XSU4zMl9TTUFMTF9GSUxFUykKKworRklMRSAqY3VybHhfd2luMzJfZm9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisjaWZkZWYgX1VOSUNPREUKKyAgRklMRSAqcmVzdWx0ID0gTlVMTDsKKyAgd2NoYXJfdCAqZmlsZW5hbWVfdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihmaWxlbmFtZSk7CisgIHdjaGFyX3QgKm1vZGVfdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihtb2RlKTsKKyAgaWYoZmlsZW5hbWVfdyAmJiBtb2RlX3cpCisgICAgcmVzdWx0ID0gX3dmb3BlbihmaWxlbmFtZV93LCBtb2RlX3cpOworICBmcmVlKGZpbGVuYW1lX3cpOworICBmcmVlKG1vZGVfdyk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCisKKyAgcmV0dXJuIChmb3BlbikoZmlsZW5hbWUsIG1vZGUpOworfQorCitpbnQgY3VybHhfd2luMzJfc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Rfc3RhdCAqYnVmZmVyKQoreworICBpbnQgcmVzdWx0ID0gLTE7CisjaWZkZWYgX1VOSUNPREUKKyAgd2NoYXJfdCAqcGF0aF93ID0gY3VybHhfY29udmVydF9VVEY4X3RvX3djaGFyKHBhdGgpOworI2VuZGlmIC8qIF9VTklDT0RFICovCisKKyNpZiBkZWZpbmVkKFVTRV9XSU4zMl9TTUFMTF9GSUxFUykKKyNpZiBkZWZpbmVkKF9VTklDT0RFKQorICBpZihwYXRoX3cpCisgICAgcmVzdWx0ID0gX3dzdGF0KHBhdGhfdywgYnVmZmVyKTsKKyAgZWxzZQorI2VuZGlmIC8qIF9VTklDT0RFICovCisgICAgcmVzdWx0ID0gX3N0YXQocGF0aCwgYnVmZmVyKTsKKyNlbHNlIC8qIFVTRV9XSU4zMl9TTUFMTF9GSUxFUyAqLworI2lmIGRlZmluZWQoX1VOSUNPREUpCisgIGlmKHBhdGhfdykKKyAgICByZXN1bHQgPSBfd3N0YXRpNjQocGF0aF93LCBidWZmZXIpOworICBlbHNlCisjZW5kaWYgLyogX1VOSUNPREUgKi8KKyAgICByZXN1bHQgPSBfc3RhdGk2NChwYXRoLCBidWZmZXIpOworI2VuZGlmIC8qIFVTRV9XSU4zMl9TTUFMTF9GSUxFUyAqLworCisjaWZkZWYgX1VOSUNPREUKKyAgZnJlZShwYXRoX3cpOworI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGN1cmx4X3dpbjMyX2FjY2Vzcyhjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisjaWZkZWYgX1VOSUNPREUKKyAgICB3Y2hhcl90ICpwYXRoX3cgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fd2NoYXIocGF0aCk7CisjZW5kaWYgLyogX1VOSUNPREUgKi8KKworI2lmIGRlZmluZWQoX1VOSUNPREUpCisgICAgaWYocGF0aF93KQorICAgICAgICByZXN1bHQgPSBfd2FjY2VzcyhwYXRoX3csIG1vZGUpOworICAgIGVsc2UKKyNlbmRpZiAvKiBfVU5JQ09ERSAqLworICAgICAgICByZXN1bHQgPSBfYWNjZXNzKHBhdGgsIG1vZGUpOworCisjaWZkZWYgX1VOSUNPREUKKyAgICBmcmVlKHBhdGhfdyk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBVU0VfV0lOMzJfTEFSR0VfRklMRVMgfHwgVVNFX1dJTjMyX1NNQUxMX0ZJTEVTICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuaAppbmRleCA2MTVmNWMwLi41ZjhjMDVhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbXVsdGlieXRlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIzLDQ2ICsyMyw0NiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKLSNpZiBkZWZpbmVkKFVTRV9XSU4zMl9JRE4pIHx8ICgoZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApKSAmJiBkZWZpbmVkKFVOSUNPREUpKQorI2lmIGRlZmluZWQoV0lOMzIpCiAKICAvKgogICAqIE11bHRpQnl0ZSBjb252ZXJzaW9ucyB1c2luZyBXaW5kb3dzIGtlcm5lbDMyIGxpYnJhcnkuCiAgICovCiAKLXdjaGFyX3QgKkN1cmxfY29udmVydF9VVEY4X3RvX3djaGFyKGNvbnN0IGNoYXIgKnN0cl91dGY4KTsKLWNoYXIgKkN1cmxfY29udmVydF93Y2hhcl90b19VVEY4KGNvbnN0IHdjaGFyX3QgKnN0cl93KTsKK3djaGFyX3QgKmN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihjb25zdCBjaGFyICpzdHJfdXRmOCk7CitjaGFyICpjdXJseF9jb252ZXJ0X3djaGFyX3RvX1VURjgoY29uc3Qgd2NoYXJfdCAqc3RyX3cpOwogCi0jZW5kaWYgLyogVVNFX1dJTjMyX0lETiB8fCAoKFVTRV9XSU5ET1dTX1NTUEkgfHwgVVNFX1dJTjMyX0xEQVApICYmIFVOSUNPREUpICovCi0KLQotI2lmIGRlZmluZWQoVVNFX1dJTjMyX0lETikgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBcCi0gICAgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKKyNlbmRpZiAvKiBXSU4zMiAqLwogCiAvKgotICogTWFjcm9zIEN1cmxfY29udmVydF9VVEY4X3RvX3RjaGFyKCksIEN1cmxfY29udmVydF90Y2hhcl90b19VVEY4KCkKLSAqIGFuZCBDdXJsX3VuaWNvZGVmcmVlKCkgbWFpbiBwdXJwb3NlIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YKKyAqIE1hY3JvcyBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKSwgY3VybHhfY29udmVydF90Y2hhcl90b19VVEY4KCkKKyAqIGFuZCBjdXJseF91bmljb2RlZnJlZSgpIG1haW4gcHVycG9zZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCiAgKiBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgZGlyZWN0aXZlcyBuZWVkZWQgYnkgY29kZSB1c2luZyB0aGVzZQogICogdG8gZGlmZmVyZW50aWF0ZSBVTklDT0RFIGZyb20gbm9uLVVOSUNPREUgYnVpbGRzLgogICoKLSAqIFdoZW4gYnVpbGRpbmcgd2l0aCBVTklDT0RFIGRlZmluZWQsIHRoaXMgdHdvIG1hY3JvcwotICogQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKSBhbmQgQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoKQorICogV2hlbiBidWlsZGluZyB3aXRoIFVOSUNPREUgZGVmaW5lZCwgdGhlc2UgdHdvIG1hY3JvcworICogY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKCkgYW5kIGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOCgpCiAgKiByZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcgcmVzdWx0LgogICogV2hlbiB0aGUgcmVzdWx0IGlzIG5vIGxvbmdlciBuZWVkZWQsIGFsbG9jYXRlZCBtZW1vcnkgaXMgaW50ZW5kZWQKLSAqIHRvIGJlIGZyZWUnZWQgd2l0aCBDdXJsX3VuaWNvZGVmcmVlKCkuCisgKiB0byBiZSBmcmVlJ2VkIHdpdGggY3VybHhfdW5pY29kZWZyZWUoKS4KICAqCiAgKiBXaGVuIGJ1aWxkaW5nIHdpdGhvdXQgVU5JQ09ERSBkZWZpbmVkLCB0aGlzIG1hY3JvcwotICogQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKSBhbmQgQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoKQotICogcmV0dXJuIHRoZSBwb2ludGVyIHJlY2VpdmVkIGFzIGFyZ3VtZW50LiBDdXJsX3VuaWNvZGVmcmVlKCkgZG9lcworICogY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKCkgYW5kIGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOCgpCisgKiByZXR1cm4gdGhlIHBvaW50ZXIgcmVjZWl2ZWQgYXMgYXJndW1lbnQuIGN1cmx4X3VuaWNvZGVmcmVlKCkgZG9lcwogICogbm8gYWN0dWFsIGZyZWUnaW5nIG9mIHRoaXMgcG9pbnRlciBpdCBpcyBzaW1wbHkgc2V0IHRvIE5VTEwuCiAgKi8KIAotI2lmZGVmIFVOSUNPREUKKyNpZiBkZWZpbmVkKFVOSUNPREUpICYmIGRlZmluZWQoV0lOMzIpCiAKLSNkZWZpbmUgQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSBDdXJsX2NvbnZlcnRfVVRGOF90b193Y2hhcigocHRyKSkKLSNkZWZpbmUgQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgocHRyKSBDdXJsX2NvbnZlcnRfd2NoYXJfdG9fVVRGOCgocHRyKSkKLSNkZWZpbmUgQ3VybF91bmljb2RlZnJlZShwdHIpIFwKLSAgZG8ge2lmKChwdHIpKSB7ZnJlZSgocHRyKSk7IChwdHIpID0gTlVMTDt9fSBXSElMRV9GQUxTRQorI2RlZmluZSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSBjdXJseF9jb252ZXJ0X1VURjhfdG9fd2NoYXIoKHB0cikpCisjZGVmaW5lIGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOChwdHIpIGN1cmx4X2NvbnZlcnRfd2NoYXJfdG9fVVRGOCgocHRyKSkKKyNkZWZpbmUgY3VybHhfdW5pY29kZWZyZWUocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYocHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChmcmVlKShwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAocHRyKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlKDApCiAKIHR5cGVkZWYgdW5pb24gewogICB1bnNpZ25lZCBzaG9ydCAgICAgICAqdGNoYXJfcHRyOwpAQCAtNzMsMTAgKzczLDEwIEBACiAKICNlbHNlCiAKLSNkZWZpbmUgQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSAocHRyKQotI2RlZmluZSBDdXJsX2NvbnZlcnRfdGNoYXJfdG9fVVRGOChwdHIpIChwdHIpCi0jZGVmaW5lIEN1cmxfdW5pY29kZWZyZWUocHRyKSBcCi0gIGRvIHsocHRyKSA9IE5VTEw7fSBXSElMRV9GQUxTRQorI2RlZmluZSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSAocHRyKQorI2RlZmluZSBjdXJseF9jb252ZXJ0X3RjaGFyX3RvX1VURjgocHRyKSAocHRyKQorI2RlZmluZSBjdXJseF91bmljb2RlZnJlZShwdHIpIFwKKyAgZG8geyhwdHIpID0gTlVMTDt9IHdoaWxlKDApCiAKIHR5cGVkZWYgdW5pb24gewogICBjaGFyICAgICAgICAgICAgICAgICp0Y2hhcl9wdHI7CkBAIC04NSw4ICs4NSw2IEBACiAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0X3RieXRlX3B0cjsKIH0geGNoYXJwX3U7CiAKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNlbmRpZiAvKiBVU0VfV0lOMzJfSUROIHx8IFVTRV9XSU5ET1dTX1NTUEkgfHwgVVNFX1dJTjMyX0xEQVAgKi8KKyNlbmRpZiAvKiBVTklDT0RFICYmIFdJTjMyICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NVUxUSUJZVEVfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV9jb3JlLmMKaW5kZXggYjZkZjM4Zi4uMGVlZmIxNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01MiwxOCArNTIsMTggQEAKIAogI2lmICFkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpIHx8IGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKIAotI2lmZGVmIFVTRV9PUEVOU1NMCisjaWYgZGVmaW5lZChVU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChVU0VfV09MRlNTTCkKKworI2lmZGVmIFVTRV9XT0xGU1NMCisjaW5jbHVkZSA8d29sZnNzbC9vcHRpb25zLmg+CisjZW5kaWYKIAogIyAgaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSMgIGlmbmRlZiBPUEVOU1NMX05PX01ENAotIyAgICBpbmNsdWRlIDxvcGVuc3NsL21kNC5oPgotIyAgZWxzZQotIyAgICBpbmNsdWRlICJjdXJsX21kNC5oIgotIyAgZW5kaWYKICMgIGluY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CiAjICBpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogIyAgaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0jICBpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MDA5MDcwMDFMKQorIyAgaWYgKGRlZmluZWQoT1BFTlNTTF9WRVJTSU9OX05VTUJFUikgJiYgXAorICAgICAgIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgwMDkwNzAwMUwpKSAmJiAhZGVmaW5lZChVU0VfV09MRlNTTCkKICMgICAgZGVmaW5lIERFU19rZXlfc2NoZWR1bGUgZGVzX2tleV9zY2hlZHVsZQogIyAgICBkZWZpbmUgREVTX2NibG9jayBkZXNfY2Jsb2NrCiAjICAgIGRlZmluZSBERVNfc2V0X29kZF9wYXJpdHkgZGVzX3NldF9vZGRfcGFyaXR5CkBAIC03OSwyOSArNzksMjEgQEAKICNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCiAKICMgIGluY2x1ZGUgPG5ldHRsZS9kZXMuaD4KLSMgIGluY2x1ZGUgPG5ldHRsZS9tZDQuaD4KIAogI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQogCiAjICBpbmNsdWRlIDxnY3J5cHQuaD4KLSMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCAxNgotIyAgZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CiAKICNlbGlmIGRlZmluZWQoVVNFX05TUykKIAogIyAgaW5jbHVkZSA8bnNzLmg+CiAjICBpbmNsdWRlIDxwazExcHViLmg+CiAjICBpbmNsdWRlIDxoYXNodC5oPgotIyAgaW5jbHVkZSAiY3VybF9tZDQuaCIKLSMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCBNRDVfTEVOR1RICiAKICNlbGlmIGRlZmluZWQoVVNFX01CRURUTFMpCiAKICMgIGluY2x1ZGUgPG1iZWR0bHMvZGVzLmg+Ci0jICBpbmNsdWRlIDxtYmVkdGxzL21kNC5oPgotIyAgaWYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykKLSMgICAgaW5jbHVkZSAiY3VybF9tZDQuaCIKLSMgIGVuZGlmCisjICBpbmNsdWRlICJjdXJsX21kNC5oIgogCiAjZWxpZiBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApCiAKQEAgLTExMCw3ICsxMDIsNiBAQAogCiAjZWxpZiBkZWZpbmVkKFVTRV9PUzQwMENSWVBUTykKICMgIGluY2x1ZGUgImNpcGhlci5taWgiICAvKiBtaWgvY2lwaGVyICovCi0jICBpbmNsdWRlICJjdXJsX21kNC5oIgogI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQogIyAgaW5jbHVkZSA8d2luY3J5cHQuaD4KICNlbHNlCkBAIC0xMjYsMTIgKzExNywxMiBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAiY3VybF9lbmRpYW4uaCIKICNpbmNsdWRlICJjdXJsX2Rlcy5oIgorI2luY2x1ZGUgImN1cmxfbWQ0LmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKLSNkZWZpbmUgTlRMTV9ITUFDX01ENV9MRU4gICAgICgxNikKICNkZWZpbmUgTlRMTXYyX0JMT0JfU0lHTkFUVVJFICJceDAxXHgwMVx4MDBceDAwIgogI2RlZmluZSBOVExNdjJfQkxPQl9MRU4gICAgICAgKDQ0IC0xNiArIG50bG0tPnRhcmdldF9pbmZvX2xlbiArIDQpCiAKQEAgLTE1MCw3ICsxNDEsNyBAQAogICBrZXlbN10gPSAodW5zaWduZWQgY2hhcikgKChrZXlfNTZbNl0gPDwgMSkgJiAweEZGKTsKIH0KIAotI2lmZGVmIFVTRV9PUEVOU1NMCisjaWYgZGVmaW5lZChVU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChVU0VfV09MRlNTTCkKIC8qCiAgKiBUdXJucyBhIDU2IGJpdCBrZXkgaW50byB0aGUgNjQgYml0LCBvZGQgcGFyaXR5IGtleSBhbmQgc2V0cyB0aGUga2V5LiAgVGhlCiAgKiBrZXkgc2NoZWR1bGUga3MgaXMgYWxzbyBzZXQuCkBAIC0yMTgsNyArMjA5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV81NikKIHsKICAgY29uc3QgQ0tfTUVDSEFOSVNNX1RZUEUgbWVjaCA9IENLTV9ERVNfRUNCOyAvKiBERVMgY2lwaGVyIGluIEVDQiBtb2RlICovCi0gIFBLMTFTbG90SW5mbyAqc2xvdCA9IE5VTEw7CiAgIGNoYXIga2V5WzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhwYW5kZWQgNjQgYml0IGtleSAqLwogICBTRUNJdGVtIGtleV9pdGVtOwogICBQSzExU3ltS2V5ICpzeW1rZXkgPSBOVUxMOwpAQCAtMjI4LDcgKzIxOCw3IEBACiAgIGJvb2wgcnYgPSBGQUxTRTsKIAogICAvKiB1c2UgaW50ZXJuYWwgc2xvdCBmb3IgREVTIGVuY3J5cHRpb24gKHJlcXVpcmVzIE5TUyB0byBiZSBpbml0aWFsaXplZCkgKi8KLSAgc2xvdCA9IFBLMTFfR2V0SW50ZXJuYWxLZXlTbG90KCk7CisgIFBLMTFTbG90SW5mbyAqc2xvdCA9IFBLMTFfR2V0SW50ZXJuYWxLZXlTbG90KCk7CiAgIGlmKCFzbG90KQogICAgIHJldHVybiBGQUxTRTsKIApAQCAtMzU1LDcgKzM0NSw3IEBACiAKICAgLyogQWNxdWlyZSB0aGUgY3J5cHRvIHByb3ZpZGVyICovCiAgIGlmKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZocHJvdiwgTlVMTCwgTlVMTCwgUFJPVl9SU0FfRlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQgfCBDUllQVF9TSUxFTlQpKQogICAgIHJldHVybiBGQUxTRTsKIAogICAvKiBTZXR1cCB0aGUga2V5IGJsb2Igc3RydWN0dXJlICovCkBAIC00MDAsNyArMzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcmVzdWx0cykKIHsKLSNpZmRlZiBVU0VfT1BFTlNTTAorI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX1dPTEZTU0wpCiAgIERFU19rZXlfc2NoZWR1bGUga3M7CiAKICAgc2V0dXBfZGVzX2tleShrZXlzLCBERVNLRVkoa3MpKTsKQEAgLTQ3NSw3ICs0NjUsNyBAQAogICB7CiAgICAgLyogQ3JlYXRlIExhbk1hbmFnZXIgaGFzaGVkIHBhc3N3b3JkLiAqLwogCi0jaWZkZWYgVVNFX09QRU5TU0wKKyNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9XT0xGU1NMKQogICAgIERFU19rZXlfc2NoZWR1bGUga3M7CiAKICAgICBzZXR1cF9kZXNfa2V5KHB3LCBERVNLRVkoa3MpKTsKQEAgLTU1Myw3ICs1NDMsNyBAQAogICBDVVJMY29kZSByZXN1bHQ7CiAgIGlmKGxlbiA+IFNJWkVfVF9NQVgvMikgLyogYXZvaWQgaW50ZWdlciBvdmVyZmxvdyAqLwogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICBwdyA9IGxlbiA/IG1hbGxvYyhsZW4gKiAyKSA6IHN0cmR1cCgiIik7CisgIHB3ID0gbGVuID8gbWFsbG9jKGxlbiAqIDIpIDogKHVuc2lnbmVkIGNoYXIgKilzdHJkdXAoIiIpOwogICBpZighcHcpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKQEAgLTU2Nyw1NyArNTU3LDEwIEBACiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCi0gIHsKLSAgICAvKiBDcmVhdGUgTlQgaGFzaGVkIHBhc3N3b3JkLiAqLwotI2lmZGVmIFVTRV9PUEVOU1NMCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19NRDQpCi0gICAgTUQ0X0NUWCBNRDRwdzsKLSAgICBNRDRfSW5pdCgmTUQ0cHcpOwotICAgIE1ENF9VcGRhdGUoJk1ENHB3LCBwdywgMiAqIGxlbik7Ci0gICAgTUQ0X0ZpbmFsKG50YnVmZmVyLCAmTUQ0cHcpOwotI2Vsc2UKLSAgICBDdXJsX21kNGl0KG50YnVmZmVyLCBwdywgMiAqIGxlbik7Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCi0gICAgc3RydWN0IG1kNF9jdHggTUQ0cHc7Ci0gICAgbWQ0X2luaXQoJk1ENHB3KTsKLSAgICBtZDRfdXBkYXRlKCZNRDRwdywgKHVuc2lnbmVkIGludCkoMiAqIGxlbiksIHB3KTsKLSAgICBtZDRfZGlnZXN0KCZNRDRwdywgTUQ0X0RJR0VTVF9TSVpFLCBudGJ1ZmZlcik7Ci0jZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFMpCi0gICAgZ2NyeV9tZF9oZF90IE1ENHB3OwotICAgIGdjcnlfbWRfb3BlbigmTUQ0cHcsIEdDUllfTURfTUQ0LCAwKTsKLSAgICBnY3J5X21kX3dyaXRlKE1ENHB3LCBwdywgMiAqIGxlbik7Ci0gICAgbWVtY3B5KG50YnVmZmVyLCBnY3J5X21kX3JlYWQoTUQ0cHcsIDApLCBNRDRfRElHRVNUX0xFTkdUSCk7Ci0gICAgZ2NyeV9tZF9jbG9zZShNRDRwdyk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9OU1MpCi0gICAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwotI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKLSNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCi0gICAgbWJlZHRsc19tZDQocHcsIDIgKiBsZW4sIG50YnVmZmVyKTsKLSNlbHNlCi0gICAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApCi0gICAgKHZvaWQpQ0NfTUQ0KHB3LCAoQ0NfTE9ORykoMiAqIGxlbiksIG50YnVmZmVyKTsKLSNlbGlmIGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKQotICAgIEN1cmxfbWQ0aXQobnRidWZmZXIsIHB3LCAyICogbGVuKTsKLSNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKLSAgICBIQ1JZUFRQUk9WIGhwcm92OwotICAgIGlmKENyeXB0QWNxdWlyZUNvbnRleHQoJmhwcm92LCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpIHsKLSAgICAgIEhDUllQVEhBU0ggaGhhc2g7Ci0gICAgICBpZihDcnlwdENyZWF0ZUhhc2goaHByb3YsIENBTEdfTUQ0LCAwLCAwLCAmaGhhc2gpKSB7Ci0gICAgICAgIERXT1JEIGxlbmd0aCA9IDE2OwotICAgICAgICBDcnlwdEhhc2hEYXRhKGhoYXNoLCBwdywgKHVuc2lnbmVkIGludClsZW4gKiAyLCAwKTsKLSAgICAgICAgQ3J5cHRHZXRIYXNoUGFyYW0oaGhhc2gsIEhQX0hBU0hWQUwsIG50YnVmZmVyLCAmbGVuZ3RoLCAwKTsKLSAgICAgICAgQ3J5cHREZXN0cm95SGFzaChoaGFzaCk7Ci0gICAgICB9Ci0gICAgICBDcnlwdFJlbGVhc2VDb250ZXh0KGhwcm92LCAwKTsKLSAgICB9Ci0jZW5kaWYKKyAgLyogQ3JlYXRlIE5UIGhhc2hlZCBwYXNzd29yZC4gKi8KKyAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwogCi0gICAgbWVtc2V0KG50YnVmZmVyICsgMTYsIDAsIDIxIC0gMTYpOwotICB9CisgIG1lbXNldChudGJ1ZmZlciArIDE2LCAwLCAyMSAtIDE2KTsKIAogICBmcmVlKHB3KTsKIApAQCAtNjI2LDI1ICs1NjksNiBAQAogCiAjaWYgZGVmaW5lZChVU0VfTlRMTV9WMikgJiYgIWRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKIAotLyogVGhpcyByZXR1cm5zIHRoZSBITUFDIE1ENSBkaWdlc3QgKi8KLXN0YXRpYyBDVVJMY29kZSBobWFjX21kNShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KQotewotICBITUFDX2NvbnRleHQgKmN0eHQgPSBDdXJsX0hNQUNfaW5pdChDdXJsX0hNQUNfTUQ1LCBrZXksIGtleWxlbik7Ci0KLSAgaWYoIWN0eHQpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgLyogVXBkYXRlIHRoZSBkaWdlc3Qgd2l0aCB0aGUgZ2l2ZW4gY2hhbGxlbmdlICovCi0gIEN1cmxfSE1BQ191cGRhdGUoY3R4dCwgZGF0YSwgZGF0YWxlbik7Ci0KLSAgLyogRmluYWxpc2UgdGhlIGRpZ2VzdCAqLwotICBDdXJsX0hNQUNfZmluYWwoY3R4dCwgb3V0cHV0KTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KIC8qIFRoaXMgY3JlYXRlcyB0aGUgTlRMTXYyIGhhc2ggYnkgdXNpbmcgTlRMTSBoYXNoIGFzIHRoZSBrZXkgYW5kIFVuaWNvZGUKICAqICh1cHBlcmNhc2UgVXNlck5hbWUgKyBEb21haW4pIGFzIHRoZSBkYXRhCiAgKi8KQEAgLTY3NCw4ICs1OTgsOCBAQAogICBhc2NpaV91cHBlcmNhc2VfdG9fdW5pY29kZV9sZShpZGVudGl0eSwgdXNlciwgdXNlcmxlbik7CiAgIGFzY2lpX3RvX3VuaWNvZGVfbGUoaWRlbnRpdHkgKyAodXNlcmxlbiA8PCAxKSwgZG9tYWluLCBkb21sZW4pOwogCi0gIHJlc3VsdCA9IGhtYWNfbWQ1KG50bG1oYXNoLCAxNiwgaWRlbnRpdHksIGN1cmx4X3V6dG91aShpZGVudGl0eV9sZW4pLAotICAgICAgICAgICAgICAgICAgICBudGxtdjJoYXNoKTsKKyAgcmVzdWx0ID0gQ3VybF9obWFjaXQoQ3VybF9ITUFDX01ENSwgbnRsbWhhc2gsIDE2LCBpZGVudGl0eSwgaWRlbnRpdHlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBudGxtdjJoYXNoKTsKICAgZnJlZShpZGVudGl0eSk7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcyMSw3ICs2NDUsNyBAQAogCiAgIHVuc2lnbmVkIGludCBsZW4gPSAwOwogICB1bnNpZ25lZCBjaGFyICpwdHIgPSBOVUxMOwotICB1bnNpZ25lZCBjaGFyIGhtYWNfb3V0cHV0W05UTE1fSE1BQ19NRDVfTEVOXTsKKyAgdW5zaWduZWQgY2hhciBobWFjX291dHB1dFtITUFDX01ENV9MRU5HVEhdOwogICBjdXJsX29mZl90IHR3OwogCiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwpAQCAtNzQwLDcgKzY2NCw3IEBACiAgICAgdHcgPSAoKGN1cmxfb2ZmX3QpdGltZShOVUxMKSArIENVUkxfT0ZGX1RfQygxMTY0NDQ3MzYwMCkpICogMTAwMDAwMDA7CiAKICAgLyogQ2FsY3VsYXRlIHRoZSByZXNwb25zZSBsZW4gKi8KLSAgbGVuID0gTlRMTV9ITUFDX01ENV9MRU4gKyBOVExNdjJfQkxPQl9MRU47CisgIGxlbiA9IEhNQUNfTUQ1X0xFTkdUSCArIE5UTE12Ml9CTE9CX0xFTjsKIAogICAvKiBBbGxvY2F0ZSB0aGUgcmVzcG9uc2UgKi8KICAgcHRyID0gY2FsbG9jKDEsIGxlbik7CkBAIC03NDgsNyArNjcyLDcgQEAKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAvKiBDcmVhdGUgdGhlIEJMT0Igc3RydWN0dXJlICovCi0gIG1zbnByaW50ZigoY2hhciAqKXB0ciArIE5UTE1fSE1BQ19NRDVfTEVOLCBOVExNdjJfQkxPQl9MRU4sCisgIG1zbnByaW50ZigoY2hhciAqKXB0ciArIEhNQUNfTUQ1X0xFTkdUSCwgTlRMTXYyX0JMT0JfTEVOLAogICAgICAgICAgICAgIiVjJWMlYyVjIiAgIC8qIE5UTE12Ml9CTE9CX1NJR05BVFVSRSAqLwogICAgICAgICAgICAgIiVjJWMlYyVjIiwgIC8qIFJlc2VydmVkID0gMCAqLwogICAgICAgICAgICAgTlRMTXYyX0JMT0JfU0lHTkFUVVJFWzBdLCBOVExNdjJfQkxPQl9TSUdOQVRVUkVbMV0sCkBAIC03NjEsNyArNjg1LDcgQEAKIAogICAvKiBDb25jYXRlbmF0ZSB0aGUgVHlwZSAyIGNoYWxsZW5nZSB3aXRoIHRoZSBCTE9CIGFuZCBkbyBITUFDIE1ENSAqLwogICBtZW1jcHkocHRyICsgOCwgJm50bG0tPm5vbmNlWzBdLCA4KTsKLSAgcmVzdWx0ID0gaG1hY19tZDUobnRsbXYyaGFzaCwgTlRMTV9ITUFDX01ENV9MRU4sIHB0ciArIDgsCisgIHJlc3VsdCA9IEN1cmxfaG1hY2l0KEN1cmxfSE1BQ19NRDUsIG50bG12Mmhhc2gsIEhNQUNfTUQ1X0xFTkdUSCwgcHRyICsgOCwKICAgICAgICAgICAgICAgICAgICAgTlRMTXYyX0JMT0JfTEVOICsgOCwgaG1hY19vdXRwdXQpOwogICBpZihyZXN1bHQpIHsKICAgICBmcmVlKHB0cik7CkBAIC03NjksNyArNjkzLDcgQEAKICAgfQogCiAgIC8qIENvbmNhdGVuYXRlIHRoZSBITUFDIE1ENSBvdXRwdXQgIHdpdGggdGhlIEJMT0IgKi8KLSAgbWVtY3B5KHB0ciwgaG1hY19vdXRwdXQsIE5UTE1fSE1BQ19NRDVfTEVOKTsKKyAgbWVtY3B5KHB0ciwgaG1hY19vdXRwdXQsIEhNQUNfTUQ1X0xFTkdUSCk7CiAKICAgLyogUmV0dXJuIHRoZSByZXNwb25zZSAqLwogICAqbnRyZXNwID0gcHRyOwpAQCAtODA0LDcgKzcyOCw4IEBACiAgIG1lbWNweSgmZGF0YVswXSwgY2hhbGxlbmdlX3NlcnZlciwgOCk7CiAgIG1lbWNweSgmZGF0YVs4XSwgY2hhbGxlbmdlX2NsaWVudCwgOCk7CiAKLSAgcmVzdWx0ID0gaG1hY19tZDUobnRsbXYyaGFzaCwgMTYsICZkYXRhWzBdLCAxNiwgaG1hY19vdXRwdXQpOworICByZXN1bHQgPSBDdXJsX2htYWNpdChDdXJsX0hNQUNfTUQ1LCBudGxtdjJoYXNoLCAxNiwgJmRhdGFbMF0sIDE2LAorICAgICAgICAgICAgICAgICAgICAgICBobWFjX291dHB1dCk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuaAppbmRleCAzYjRiODA1Li43ODk1YjY0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV9jb3JlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI5LDYgKzI5LDcgQEAKIC8qIElmIE5TUyBpcyB0aGUgZmlyc3QgYXZhaWxhYmxlIFNTTCBiYWNrZW5kIChzZWUgb3JkZXIgaW4gY3VybF9udGxtX2NvcmUuYykKICAgIHRoZW4gaXQgbXVzdCBiZSBpbml0aWFsaXplZCB0byBiZSB1c2VkIGJ5IE5UTE0uICovCiAjaWYgIWRlZmluZWQoVVNFX09QRU5TU0wpICYmIFwKKyAgICAhZGVmaW5lZChVU0VfV09MRlNTTCkgJiYgXAogICAgICFkZWZpbmVkKFVTRV9HTlVUTFNfTkVUVExFKSAmJiBcCiAgICAgIWRlZmluZWQoVVNFX0dOVVRMUykgJiYgXAogICAgIGRlZmluZWQoVVNFX05TUykKQEAgLTM3LDcgKzM4LDEwIEBACiAKICNpZiAhZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBkZWZpbmVkKFVTRV9XSU4zMl9DUllQVE8pCiAKLSNpZmRlZiBVU0VfT1BFTlNTTAorI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX1dPTEZTU0wpCisjaWZkZWYgVVNFX1dPTEZTU0wKKyMgIGluY2x1ZGUgPHdvbGZzc2wvb3B0aW9ucy5oPgorI2VuZGlmCiAjICBpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogI2VuZGlmCiAKQEAgLTQ2LDkgKzUwLDkgQEAKICNkZWZpbmUgVVNFX05UUkVTUE9OU0VTCiAKIC8qIERlZmluZSBVU0VfTlRMTTJTRVNTSU9OIGluIG9yZGVyIHRvIG1ha2UgdGhlIHR5cGUtMyBtZXNzYWdlIGluY2x1ZGUgdGhlCi0gICBOVExNMlNlc3Npb24gcmVzcG9uc2UgbWVzc2FnZSwgcmVxdWlyZXMgVVNFX05UUkVTUE9OU0VTIGRlZmluZWQgdG8gMSBhbmQgYQotICAgQ3J5cHRvIGVuZ2luZSB0aGF0IHdlIGhhdmUgY3VybF9zc2xfbWQ1c3VtKCkgZm9yLiAqLwotI2lmIGRlZmluZWQoVVNFX05UUkVTUE9OU0VTKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQorICAgTlRMTTJTZXNzaW9uIHJlc3BvbnNlIG1lc3NhZ2UsIHJlcXVpcmVzIFVTRV9OVFJFU1BPTlNFUyBkZWZpbmVkIHRvIDEgYW5kCisgICBNRDUgc3VwcG9ydCAqLworI2lmIGRlZmluZWQoVVNFX05UUkVTUE9OU0VTKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpCiAjZGVmaW5lIFVTRV9OVExNMlNFU1NJT04KICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fd2IuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCmluZGV4IDgwMjY2ZTIuLjE3YTkyZjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03NiwyMiArNzYsMjIgQEAKICMgIGRlZmluZSBzY2xvc2Vfbm9sb2coeCkgIGNsb3NlKCh4KSkKICNlbmRpZgogCi12b2lkIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbnRsbV93YihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCitzdGF0aWMgdm9pZCBudGxtX3diX2NsZWFudXAoc3RydWN0IG50bG1kYXRhICpudGxtKQogewotICBpZihjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7Ci0gICAgc2Nsb3NlKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCk7Ci0gICAgY29ubi0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gQ1VSTF9TT0NLRVRfQkFEOworICBpZihudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgc2Nsb3NlKG50bG0tPm50bG1fYXV0aF9obHByX3NvY2tldCk7CisgICAgbnRsbS0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gQ1VSTF9TT0NLRVRfQkFEOwogICB9CiAKLSAgaWYoY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkKSB7CisgIGlmKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCkgewogICAgIGludCBpOwogICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgcGlkX3QgcmV0ID0gd2FpdHBpZChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIE5VTEwsIFdOT0hBTkcpOwotICAgICAgaWYocmV0ID09IGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCB8fCBlcnJubyA9PSBFQ0hJTEQpCisgICAgICBwaWRfdCByZXQgPSB3YWl0cGlkKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCwgTlVMTCwgV05PSEFORyk7CisgICAgICBpZihyZXQgPT0gbnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkIHx8IGVycm5vID09IEVDSElMRCkKICAgICAgICAgYnJlYWs7CiAgICAgICBzd2l0Y2goaSkgewogICAgICAgY2FzZSAwOgotICAgICAgICBraWxsKGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCwgU0lHVEVSTSk7CisgICAgICAgIGtpbGwobnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkLCBTSUdURVJNKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIDE6CiAgICAgICAgIC8qIEdpdmUgdGhlIHByb2Nlc3MgYW5vdGhlciBtb21lbnQgdG8gc2h1dCBkb3duIGNsZWFubHkgYmVmb3JlCkBAIC05OSwyMiArOTksMjEgQEAKICAgICAgICAgQ3VybF93YWl0X21zKDEpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgMjoKLSAgICAgICAga2lsbChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIFNJR0tJTEwpOworICAgICAgICBraWxsKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCwgU0lHS0lMTCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAzOgogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9Ci0gICAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkID0gMDsKKyAgICBudGxtLT5udGxtX2F1dGhfaGxwcl9waWQgPSAwOwogICB9CiAKLSAgZnJlZShjb25uLT5jaGFsbGVuZ2VfaGVhZGVyKTsKLSAgY29ubi0+Y2hhbGxlbmdlX2hlYWRlciA9IE5VTEw7Ci0gIGZyZWUoY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKLSAgY29ubi0+cmVzcG9uc2VfaGVhZGVyID0gTlVMTDsKKyAgQ3VybF9zYWZlZnJlZShudGxtLT5jaGFsbGVuZ2UpOworICBDdXJsX3NhZmVmcmVlKG50bG0tPnJlc3BvbnNlKTsKIH0KIAotc3RhdGljIENVUkxjb2RlIG50bG1fd2JfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJwKQorc3RhdGljIENVUkxjb2RlIG50bG1fd2JfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBzdHJ1Y3QgbnRsbWRhdGEgKm50bG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJwKQogewogICBjdXJsX3NvY2tldF90IHNvY2tmZHNbMl07CiAgIHBpZF90IGNoaWxkX3BpZDsKQEAgLTEyOCw5ICsxMjcsMTMgQEAKICNlbmRpZgogICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogCisjaWYgZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAodm9pZCkgZGF0YTsKKyNlbmRpZgorCiAgIC8qIFJldHVybiBpZiBjb21tdW5pY2F0aW9uIHdpdGggbnRsbV9hdXRoIGFscmVhZHkgc2V0IHVwICovCi0gIGlmKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCAhPSBDVVJMX1NPQ0tFVF9CQUQgfHwKLSAgICAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkKQorICBpZihudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEIHx8CisgICAgIG50bG0tPm50bG1fYXV0aF9obHByX3BpZCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKICAgdXNlcm5hbWUgPSB1c2VycDsKQEAgLTE4MSwxMyArMTg0LDEzIEBACiAgICAgbnRsbV9hdXRoID0gTlRMTV9XQl9GSUxFOwogCiAgIGlmKGFjY2VzcyhudGxtX2F1dGgsIFhfT0spICE9IDApIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IGFjY2VzcyBudGxtX2F1dGg6ICVzIGVycm5vICVkOiAlcyIsCisgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBhY2Nlc3MgbnRsbV9hdXRoOiAlcyBlcnJubyAlZDogJXMiLAogICAgICAgICAgIG50bG1fYXV0aCwgZXJybm8sIEN1cmxfc3RyZXJyb3IoZXJybm8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICBnb3RvIGRvbmU7CiAgIH0KIAotICBpZihzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZmRzKSkgewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3Qgb3BlbiBzb2NrZXQgcGFpci4gZXJybm8gJWQ6ICVzIiwKKyAgaWYoQ3VybF9zb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZmRzKSkgeworICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBzb2NrZXQgcGFpci4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGdvdG8gZG9uZTsKICAgfQpAQCAtMTk2LDcgKzE5OSw3IEBACiAgIGlmKGNoaWxkX3BpZCA9PSAtMSkgewogICAgIHNjbG9zZShzb2NrZmRzWzBdKTsKICAgICBzY2xvc2Uoc29ja2Zkc1sxXSk7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIkNvdWxkIG5vdCBmb3JrLiBlcnJubyAlZDogJXMiLAorICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgZm9yay4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGdvdG8gZG9uZTsKICAgfQpAQCAtMjA4LDEzICsyMTEsMTMgQEAKICAgICAvKiBEb24ndCB1c2Ugc2Nsb3NlIGluIHRoZSBjaGlsZCBzaW5jZSBpdCBmb29scyB0aGUgc29ja2V0IGxlYWsgZGV0ZWN0b3IgKi8KICAgICBzY2xvc2Vfbm9sb2coc29ja2Zkc1swXSk7CiAgICAgaWYoZHVwMihzb2NrZmRzWzFdLCBTVERJTl9GSUxFTk8pID09IC0xKSB7Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IHJlZGlyZWN0IGNoaWxkIHN0ZGluLiBlcnJubyAlZDogJXMiLAorICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWRpcmVjdCBjaGlsZCBzdGRpbi4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICBleGl0KDEpOwogICAgIH0KIAogICAgIGlmKGR1cDIoc29ja2Zkc1sxXSwgU1RET1VUX0ZJTEVOTykgPT0gLTEpIHsKLSAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3QgcmVkaXJlY3QgY2hpbGQgc3Rkb3V0LiBlcnJubyAlZDogJXMiLAorICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWRpcmVjdCBjaGlsZCBzdGRvdXQuIGVycm5vICVkOiAlcyIsCiAgICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgZXhpdCgxKTsKICAgICB9CkBAIC0yMzQsMTQgKzIzNywxNCBAQAogICAgICAgICAgICAgTlVMTCk7CiAKICAgICBzY2xvc2Vfbm9sb2coc29ja2Zkc1sxXSk7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIkNvdWxkIG5vdCBleGVjbCgpLiBlcnJubyAlZDogJXMiLAorICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgZXhlY2woKS4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGV4aXQoMSk7CiAgIH0KIAogICBzY2xvc2Uoc29ja2Zkc1sxXSk7Ci0gIGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCA9IHNvY2tmZHNbMF07Ci0gIGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCA9IGNoaWxkX3BpZDsKKyAgbnRsbS0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gc29ja2Zkc1swXTsKKyAgbnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkID0gY2hpbGRfcGlkOwogICBmcmVlKGRvbWFpbik7CiAgIGZyZWUobnRsbV9hdXRoX2FsbG9jKTsKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMjU1LDE3ICsyNTgsMTcgQEAKIC8qIGlmIGxhcmdlciB0aGFuIHRoaXMsIHNvbWV0aGluZyBpcyBzZXJpb3VzbHkgd3JvbmcgKi8KICNkZWZpbmUgTUFYX05UTE1fV0JfUkVTUE9OU0UgMTAwMDAwCiAKLXN0YXRpYyBDVVJMY29kZSBudGxtX3diX3Jlc3BvbnNlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKK3N0YXRpYyBDVVJMY29kZSBudGxtX3diX3Jlc3BvbnNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHN0cnVjdCBudGxtZGF0YSAqbnRsbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0LCBjdXJsbnRsbSBzdGF0ZSkKIHsKLSAgY2hhciAqYnVmID0gbWFsbG9jKE5UTE1fQlVGU0laRSk7CiAgIHNpemVfdCBsZW5faW4gPSBzdHJsZW4oaW5wdXQpLCBsZW5fb3V0ID0gMDsKLQotICBpZighYnVmKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBzdHJ1Y3QgZHluYnVmIGI7CisgIGNoYXIgKnB0ciA9IE5VTEw7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopZGF0YS0+c3RhdGUuYnVmZmVyOworICBDdXJsX2R5bl9pbml0KCZiLCBNQVhfTlRMTV9XQl9SRVNQT05TRSk7CiAKICAgd2hpbGUobGVuX2luID4gMCkgewotICAgIHNzaXplX3Qgd3JpdHRlbiA9IHN3cml0ZShjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGlucHV0LCBsZW5faW4pOworICAgIHNzaXplX3Qgd3JpdHRlbiA9IHN3cml0ZShudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGlucHV0LCBsZW5faW4pOwogICAgIGlmKHdyaXR0ZW4gPT0gLTEpIHsKICAgICAgIC8qIEludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCByZXRyeSBpdCAqLwogICAgICAgaWYoZXJybm8gPT0gRUlOVFIpCkBAIC0yNzgsMTAgKzI4MSw4IEBACiAgIH0KICAgLyogUmVhZCBvbmUgbGluZSAqLwogICB3aGlsZSgxKSB7Ci0gICAgc3NpemVfdCBzaXplOwotICAgIGNoYXIgKm5ld2J1ZjsKLQotICAgIHNpemUgPSBzcmVhZChjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGJ1ZiArIGxlbl9vdXQsIE5UTE1fQlVGU0laRSk7CisgICAgc3NpemVfdCBzaXplID0KKyAgICAgIHNyZWFkKG50bG0tPm50bG1fYXV0aF9obHByX3NvY2tldCwgYnVmLCBkYXRhLT5zZXQuYnVmZmVyX3NpemUpOwogICAgIGlmKHNpemUgPT0gLTEpIHsKICAgICAgIGlmKGVycm5vID09IEVJTlRSKQogICAgICAgICBjb250aW51ZTsKQEAgLTI5MCw0OCArMjkxLDQxIEBACiAgICAgZWxzZSBpZihzaXplID09IDApCiAgICAgICBnb3RvIGRvbmU7CiAKLSAgICBsZW5fb3V0ICs9IHNpemU7Ci0gICAgaWYoYnVmW2xlbl9vdXQgLSAxXSA9PSAnXG4nKSB7Ci0gICAgICBidWZbbGVuX291dCAtIDFdID0gJ1wwJzsKLSAgICAgIGJyZWFrOworICAgIGlmKEN1cmxfZHluX2FkZG4oJmIsIGJ1Ziwgc2l6ZSkpCisgICAgICBnb3RvIGRvbmU7CisKKyAgICBsZW5fb3V0ID0gQ3VybF9keW5fbGVuKCZiKTsKKyAgICBwdHIgPSBDdXJsX2R5bl9wdHIoJmIpOworICAgIGlmKGxlbl9vdXQgJiYgcHRyW2xlbl9vdXQgLSAxXSA9PSAnXG4nKSB7CisgICAgICBwdHJbbGVuX291dCAtIDFdID0gJ1wwJzsKKyAgICAgIGJyZWFrOyAvKiBkb25lISAqLwogICAgIH0KLQotICAgIGlmKGxlbl9vdXQgPiBNQVhfTlRMTV9XQl9SRVNQT05TRSkgewotICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInRvbyBsYXJnZSBudGxtX3diIHJlc3BvbnNlISIpOwotICAgICAgZnJlZShidWYpOwotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAgbmV3YnVmID0gQ3VybF9zYWZlcmVhbGxvYyhidWYsIGxlbl9vdXQgKyBOVExNX0JVRlNJWkUpOwotICAgIGlmKCFuZXdidWYpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICAgIGJ1ZiA9IG5ld2J1ZjsKKyAgICAvKiBsb29wICovCiAgIH0KIAogICAvKiBTYW1iYS93aW5iaW5kIGluc3RhbGxlZCBidXQgbm90IGNvbmZpZ3VyZWQgKi8KICAgaWYoc3RhdGUgPT0gTlRMTVNUQVRFX1RZUEUxICYmCiAgICAgIGxlbl9vdXQgPT0gMyAmJgotICAgICBidWZbMF0gPT0gJ1AnICYmIGJ1ZlsxXSA9PSAnVycpCisgICAgIHB0clswXSA9PSAnUCcgJiYgcHRyWzFdID09ICdXJykKICAgICBnb3RvIGRvbmU7CiAgIC8qIGludmFsaWQgcmVzcG9uc2UgKi8KICAgaWYobGVuX291dCA8IDQpCiAgICAgZ290byBkb25lOwogICBpZihzdGF0ZSA9PSBOVExNU1RBVEVfVFlQRTEgJiYKLSAgICAgKGJ1ZlswXSE9J1knIHx8IGJ1ZlsxXSE9J1InIHx8IGJ1ZlsyXSE9JyAnKSkKKyAgICAgKHB0clswXSE9J1knIHx8IHB0clsxXSE9J1InIHx8IHB0clsyXSE9JyAnKSkKICAgICBnb3RvIGRvbmU7CiAgIGlmKHN0YXRlID09IE5UTE1TVEFURV9UWVBFMiAmJgotICAgICAoYnVmWzBdIT0nSycgfHwgYnVmWzFdIT0nSycgfHwgYnVmWzJdIT0nICcpICYmCi0gICAgIChidWZbMF0hPSdBJyB8fCBidWZbMV0hPSdGJyB8fCBidWZbMl0hPScgJykpCisgICAgIChwdHJbMF0hPSdLJyB8fCBwdHJbMV0hPSdLJyB8fCBwdHJbMl0hPScgJykgJiYKKyAgICAgKHB0clswXSE9J0EnIHx8IHB0clsxXSE9J0YnIHx8IHB0clsyXSE9JyAnKSkKICAgICBnb3RvIGRvbmU7CiAKLSAgY29ubi0+cmVzcG9uc2VfaGVhZGVyID0gYXByaW50ZigiTlRMTSAlLipzIiwgbGVuX291dCAtIDQsIGJ1ZiArIDMpOwotICBmcmVlKGJ1Zik7Ci0gIGlmKCFjb25uLT5yZXNwb25zZV9oZWFkZXIpCisgIG50bG0tPnJlc3BvbnNlID0gc3RyZHVwKHB0ciArIDMpOworICBDdXJsX2R5bl9mcmVlKCZiKTsKKyAgaWYoIW50bG0tPnJlc3BvbnNlKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICByZXR1cm4gQ1VSTEVfT0s7CiBkb25lOgotICBmcmVlKGJ1Zik7CisgIEN1cmxfZHluX2ZyZWUoJmIpOwogICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CiB9CiAKQEAgLTMzOSw2ICszMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGVhZGVyKQogeworICBzdHJ1Y3QgbnRsbWRhdGEgKm50bG0gPSBwcm94eSA/ICZjb25uLT5wcm94eW50bG0gOiAmY29ubi0+bnRsbTsKICAgY3VybG50bG0gKnN0YXRlID0gcHJveHkgPyAmY29ubi0+cHJveHlfbnRsbV9zdGF0ZSA6ICZjb25uLT5odHRwX250bG1fc3RhdGU7CiAKICAgaWYoIWNoZWNrcHJlZml4KCJOVExNIiwgaGVhZGVyKSkKQEAgLTM0OSw4ICszNDQsOCBAQAogICAgIGhlYWRlcisrOwogCiAgIGlmKCpoZWFkZXIpIHsKLSAgICBjb25uLT5jaGFsbGVuZ2VfaGVhZGVyID0gc3RyZHVwKGhlYWRlcik7Ci0gICAgaWYoIWNvbm4tPmNoYWxsZW5nZV9oZWFkZXIpCisgICAgbnRsbS0+Y2hhbGxlbmdlID0gc3RyZHVwKGhlYWRlcik7CisgICAgaWYoIW50bG0tPmNoYWxsZW5nZSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgICAgKnN0YXRlID0gTlRMTVNUQVRFX1RZUEUyOyAvKiBXZSBnb3QgYSB0eXBlLTIgbWVzc2FnZSAqLwpAQCAtMzgxLDMyICszNzYsMzggQEAKICAqIFRoaXMgaXMgZm9yIGNyZWF0aW5nIG50bG0gaGVhZGVyIG91dHB1dCBieSBkZWxlZ2F0aW5nIGNoYWxsZW5nZS9yZXNwb25zZQogICogdG8gU2FtYmEncyB3aW5iaW5kIGRhZW1vbiBoZWxwZXIgbnRsbV9hdXRoLgogICovCi1DVVJMY29kZSBDdXJsX291dHB1dF9udGxtX3diKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHkpCitDVVJMY29kZSBDdXJsX291dHB1dF9udGxtX3diKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSkKIHsKICAgLyogcG9pbnQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgdGhhdCBob2xkcyB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlCiAgICAgIHNlcnZlciwgd2hpY2ggaXMgZm9yIGEgcGxhaW4gaG9zdCBvciBmb3IgYSBIVFRQIHByb3h5ICovCiAgIGNoYXIgKiphbGxvY3VzZXJwd2Q7CiAgIC8qIHBvaW50IHRvIHRoZSBuYW1lIGFuZCBwYXNzd29yZCBmb3IgdGhpcyAqLwogICBjb25zdCBjaGFyICp1c2VycDsKKyAgc3RydWN0IG50bG1kYXRhICpudGxtOwogICBjdXJsbnRsbSAqc3RhdGU7CiAgIHN0cnVjdCBhdXRoICphdXRocDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKICAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7Ci0gIGNoYXIgKmlucHV0OwogCiAgIERFQlVHQVNTRVJUKGNvbm4pOwogICBERUJVR0FTU0VSVChjb25uLT5kYXRhKTsKIAogICBpZihwcm94eSkgewotICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKICAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKKyAgICBudGxtID0gJmNvbm4tPnByb3h5bnRsbTsKICAgICBzdGF0ZSA9ICZjb25uLT5wcm94eV9udGxtX3N0YXRlOwogICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKKyNlbHNlCisgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgogICB9CiAgIGVsc2UgewotICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOworICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q7CiAgICAgdXNlcnAgPSBjb25uLT51c2VyOworICAgIG50bG0gPSAmY29ubi0+bnRsbTsKICAgICBzdGF0ZSA9ICZjb25uLT5odHRwX250bG1fc3RhdGU7CiAgICAgYXV0aHAgPSAmY29ubi0+ZGF0YS0+c3RhdGUuYXV0aGhvc3Q7CiAgIH0KQEAgLTQzMiwzOCArNDMzLDM2IEBACiAgICAgICogcmVxdWVzdCBoYW5kbGluZyBwcm9jZXNzLgogICAgICAqLwogICAgIC8qIENyZWF0ZSBjb21tdW5pY2F0aW9uIHdpdGggbnRsbV9hdXRoICovCi0gICAgcmVzID0gbnRsbV93Yl9pbml0KGNvbm4sIHVzZXJwKTsKKyAgICByZXMgPSBudGxtX3diX2luaXQoY29ubi0+ZGF0YSwgbnRsbSwgdXNlcnApOwogICAgIGlmKHJlcykKICAgICAgIHJldHVybiByZXM7Ci0gICAgcmVzID0gbnRsbV93Yl9yZXNwb25zZShjb25uLCAiWVJcbiIsICpzdGF0ZSk7CisgICAgcmVzID0gbnRsbV93Yl9yZXNwb25zZShjb25uLT5kYXRhLCBudGxtLCAiWVJcbiIsICpzdGF0ZSk7CiAgICAgaWYocmVzKQogICAgICAgcmV0dXJuIHJlczsKIAogICAgIGZyZWUoKmFsbG9jdXNlcnB3ZCk7Ci0gICAgKmFsbG9jdXNlcnB3ZCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogJXNcclxuIiwKKyAgICAqYWxsb2N1c2VycHdkID0gYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiBOVExNICVzXHJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHkgPyAiUHJveHktIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlc3BvbnNlX2hlYWRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRsbS0+cmVzcG9uc2UpOwogICAgIERFQlVHX09VVChmcHJpbnRmKHN0ZGVyciwgIioqKiogSGVhZGVyICVzXG4gIiwgKmFsbG9jdXNlcnB3ZCkpOwotICAgIGZyZWUoY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKKyAgICBDdXJsX3NhZmVmcmVlKG50bG0tPnJlc3BvbnNlKTsKICAgICBpZighKmFsbG9jdXNlcnB3ZCkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgIGNvbm4tPnJlc3BvbnNlX2hlYWRlciA9IE5VTEw7CiAgICAgYnJlYWs7CiAKLSAgY2FzZSBOVExNU1RBVEVfVFlQRTI6Ci0gICAgaW5wdXQgPSBhcHJpbnRmKCJUVCAlc1xuIiwgY29ubi0+Y2hhbGxlbmdlX2hlYWRlcik7CisgIGNhc2UgTlRMTVNUQVRFX1RZUEUyOiB7CisgICAgY2hhciAqaW5wdXQgPSBhcHJpbnRmKCJUVCAlc1xuIiwgbnRsbS0+Y2hhbGxlbmdlKTsKICAgICBpZighaW5wdXQpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICByZXMgPSBudGxtX3diX3Jlc3BvbnNlKGNvbm4sIGlucHV0LCAqc3RhdGUpOworICAgIHJlcyA9IG50bG1fd2JfcmVzcG9uc2UoY29ubi0+ZGF0YSwgbnRsbSwgaW5wdXQsICpzdGF0ZSk7CiAgICAgZnJlZShpbnB1dCk7Ci0gICAgaW5wdXQgPSBOVUxMOwogICAgIGlmKHJlcykKICAgICAgIHJldHVybiByZXM7CiAKICAgICBmcmVlKCphbGxvY3VzZXJwd2QpOwotICAgICphbGxvY3VzZXJwd2QgPSBhcHJpbnRmKCIlc0F1dGhvcml6YXRpb246ICVzXHJcbiIsCisgICAgKmFsbG9jdXNlcnB3ZCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogTlRMTSAlc1xyXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID8gIlByb3h5LSIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZXNwb25zZV9oZWFkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bG0tPnJlc3BvbnNlKTsKICAgICBERUJVR19PVVQoZnByaW50ZihzdGRlcnIsICIqKioqICVzXG4gIiwgKmFsbG9jdXNlcnB3ZCkpOwogICAgICpzdGF0ZSA9IE5UTE1TVEFURV9UWVBFMzsgLyogd2Ugc2VudCBhIHR5cGUtMyAqLwogICAgIGF1dGhwLT5kb25lID0gVFJVRTsKQEAgLTQ3MSw3ICs0NzAsNyBAQAogICAgIGlmKCEqYWxsb2N1c2VycHdkKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgYnJlYWs7Ci0KKyAgfQogICBjYXNlIE5UTE1TVEFURV9UWVBFMzoKICAgICAvKiBjb25uZWN0aW9uIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZCwKICAgICAgKiBkb24ndCBzZW5kIGEgaGVhZGVyIGluIGZ1dHVyZSByZXF1ZXN0cyAqLwpAQCAtNDg2LDQgKzQ4NSwxMCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK3ZvaWQgQ3VybF9odHRwX2F1dGhfY2xlYW51cF9udGxtX3diKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgbnRsbV93Yl9jbGVhbnVwKCZjb25uLT5udGxtKTsKKyAgbnRsbV93Yl9jbGVhbnVwKCZjb25uLT5wcm94eW50bG0pOworfQorCiAjZW5kaWYgLyogIUNVUkxfRElTQUJMRV9IVFRQICYmIFVTRV9OVExNICYmIE5UTE1fV0JfRU5BQkxFRCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9wYXRoLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3BhdGguYwppbmRleCA4NWRkZGNlLi5mYmQ5OGNiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3BhdGguYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3BhdGguYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDIsNyArNDIsNyBAQAogICBzaXplX3Qgd29ya2luZ19wYXRoX2xlbjsKICAgQ1VSTGNvZGUgcmVzdWx0ID0KICAgICBDdXJsX3VybGRlY29kZShkYXRhLCBkYXRhLT5zdGF0ZS51cC5wYXRoLCAwLCAmd29ya2luZ19wYXRoLAotICAgICAgICAgICAgICAgICAgICZ3b3JraW5nX3BhdGhfbGVuLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgJndvcmtpbmdfcGF0aF9sZW4sIFJFSkVDVF9aRVJPKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAgICAgaWYoKHdvcmtpbmdfcGF0aF9sZW4gPiAzKSAmJiAoIW1lbWNtcCh3b3JraW5nX3BhdGgsICIvfi8iLCAzKSkpCiAgICAgICAvKiBJdCBpcyByZWZlcmVuY2VkIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgc28gc3RyaXAgdGhlIGxlYWRpbmcgJy9+LycgKi8KLSAgICAgIG1lbWNweShyZWFsX3BhdGgsIHdvcmtpbmdfcGF0aCArIDMsIDQgKyB3b3JraW5nX3BhdGhfbGVuLTMpOworICAgICAgbWVtY3B5KHJlYWxfcGF0aCwgd29ya2luZ19wYXRoICsgMywgd29ya2luZ19wYXRoX2xlbiAtIDIpOwogICAgIGVsc2UKICAgICAgIG1lbWNweShyZWFsX3BhdGgsIHdvcmtpbmdfcGF0aCwgMSArIHdvcmtpbmdfcGF0aF9sZW4pOwogICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3J0bXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCmluZGV4IDE2YjFkZTEuLmRmOGYyYjEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCkBAIC0xOTksMTMgKzE5OSwxMyBAQAogICAgIFJUTVBfRnJlZShyKTsKICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgfQotICBjb25uLT5wcm90by5nZW5lcmljID0gcjsKKyAgY29ubi0+cHJvdG8ucnRtcCA9IHI7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAogc3RhdGljIENVUkxjb2RlIHJ0bXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBSVE1QICpyID0gY29ubi0+cHJvdG8ucnRtcDsKICAgU0VUX1JDVlRJTUVPKHR2LCAxMCk7CiAKICAgci0+bV9zYi5zYl9zb2NrZXQgPSAoaW50KWNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwpAQCAtMjQwLDcgKzI0MCw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAKICAgaWYoIVJUTVBfQ29ubmVjdFN0cmVhbShyLCAwKSkKICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CkBAIC0yNjgsMTAgKzI2OCwxMCBAQAogc3RhdGljIENVUkxjb2RlIHJ0bXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAgICh2b2lkKWRlYWRfY29ubmVjdGlvbjsKICAgaWYocikgewotICAgIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBOVUxMOworICAgIGNvbm4tPnByb3RvLnJ0bXAgPSBOVUxMOwogICAgIFJUTVBfQ2xvc2Uocik7CiAgICAgUlRNUF9GcmVlKHIpOwogICB9CkBAIC0yODEsNyArMjgxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJ0bXBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsIGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQogewotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAgIHNzaXplX3QgbnJlYWQ7CiAKICAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KQEAgLTMwMiw3ICszMDIsNyBAQAogc3RhdGljIHNzaXplX3QgcnRtcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7Ci0gIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBSVE1QICpyID0gY29ubi0+cHJvdG8ucnRtcDsKICAgc3NpemVfdCBudW07CiAKICAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKaW5kZXggMzMwNmUyMi4uODZhMDEzOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb3dhcmQgQ2h1LCA8aHljQGhpZ2hsYW5kc3VuLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTksIEhvd2FyZCBDaHUsIDxoeWNAaGlnaGxhbmRzdW4uY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3Nhc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCmluZGV4IDAxOGU0MjIuLjgzZmU4OTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNjQsMTQgKzI2NCwyMCBAQAogICBzaXplX3QgbGVuID0gMDsKICAgc2FzbHN0YXRlIHN0YXRlMSA9IFNBU0xfU1RPUDsKICAgc2FzbHN0YXRlIHN0YXRlMiA9IFNBU0xfRklOQUw7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CiAgIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OworI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfS0VSQkVST1M1KSB8fCBkZWZpbmVkKFVTRV9OVExNKQogICBjb25zdCBjaGFyICpzZXJ2aWNlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VSVklDRV9OQU1FXSA/CiAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VSVklDRV9OQU1FXSA6CiAgICAgc2FzbC0+cGFyYW1zLT5zZXJ2aWNlOwogI2VuZGlmCisgIGNvbnN0IGNoYXIgKm9hdXRoX2JlYXJlciA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0JFQVJFUl07CiAKICAgc2FzbC0+Zm9yY2VfaXIgPSBmb3JjZV9pcjsgICAgLyogTGF0Y2ggZm9yIGZ1dHVyZSB1c2UgKi8KICAgc2FzbC0+YXV0aHVzZWQgPSAwOyAgICAgICAgICAgLyogTm8gbWVjaGFuaXNtIHVzZWQgeWV0ICovCkBAIC0zNDEsNyArMzQ3LDcgQEAKICAgICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICBpZigoZW5hYmxlZG1lY2hzICYgU0FTTF9NRUNIX09BVVRIQkVBUkVSKSAmJiBjb25uLT5vYXV0aF9iZWFyZXIpIHsKKyAgICBpZigoZW5hYmxlZG1lY2hzICYgU0FTTF9NRUNIX09BVVRIQkVBUkVSKSAmJiBvYXV0aF9iZWFyZXIpIHsKICAgICAgIG1lY2ggPSBTQVNMX01FQ0hfU1RSSU5HX09BVVRIQkVBUkVSOwogICAgICAgc3RhdGUxID0gU0FTTF9PQVVUSDI7CiAgICAgICBzdGF0ZTIgPSBTQVNMX09BVVRIMl9SRVNQOwpAQCAtMzUxLDE3ICszNTcsMTcgQEAKICAgICAgICAgcmVzdWx0ID0gQ3VybF9hdXRoX2NyZWF0ZV9vYXV0aF9iZWFyZXJfbWVzc2FnZShkYXRhLCBjb25uLT51c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+b2F1dGhfYmVhcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9hdXRoX2JlYXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAgICAgfQotICAgIGVsc2UgaWYoKGVuYWJsZWRtZWNocyAmIFNBU0xfTUVDSF9YT0FVVEgyKSAmJiBjb25uLT5vYXV0aF9iZWFyZXIpIHsKKyAgICBlbHNlIGlmKChlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfWE9BVVRIMikgJiYgb2F1dGhfYmVhcmVyKSB7CiAgICAgICBtZWNoID0gU0FTTF9NRUNIX1NUUklOR19YT0FVVEgyOwogICAgICAgc3RhdGUxID0gU0FTTF9PQVVUSDI7CiAgICAgICBzYXNsLT5hdXRodXNlZCA9IFNBU0xfTUVDSF9YT0FVVEgyOwogCiAgICAgICBpZihmb3JjZV9pciB8fCBkYXRhLT5zZXQuc2FzbF9pcikKICAgICAgICAgcmVzdWx0ID0gQ3VybF9hdXRoX2NyZWF0ZV94b2F1dGhfYmVhcmVyX21lc3NhZ2UoZGF0YSwgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+b2F1dGhfYmVhcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYXV0aF9iZWFyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNwLCAmbGVuKTsKICAgICB9CiAgICAgZWxzZSBpZihlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfUExBSU4pIHsKQEAgLTM3MCw4ICszNzYsOSBAQAogICAgICAgc2FzbC0+YXV0aHVzZWQgPSBTQVNMX01FQ0hfUExBSU47CiAKICAgICAgIGlmKGZvcmNlX2lyIHx8IGRhdGEtPnNldC5zYXNsX2lyKQotICAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3BsYWluX21lc3NhZ2UoZGF0YSwgTlVMTCwgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnBhc3N3ZCwgJnJlc3AsICZsZW4pOworICAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3BsYWluX21lc3NhZ2UoZGF0YSwgY29ubi0+c2FzbF9hdXRoemlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwgY29ubi0+cGFzc3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3AsICZsZW4pOwogICAgIH0KICAgICBlbHNlIGlmKGVuYWJsZWRtZWNocyAmIFNBU0xfTUVDSF9MT0dJTikgewogICAgICAgbWVjaCA9IFNBU0xfTUVDSF9TVFJJTkdfTE9HSU47CkBAIC00MTUsMjEgKzQyMiwyNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc2FzbHN0YXRlIG5ld3N0YXRlID0gU0FTTF9GSU5BTDsKICAgY2hhciAqcmVzcCA9IE5VTEw7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CiAgIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OworI2VuZGlmCiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQogICBjaGFyICpjaGxnID0gTlVMTDsKICAgc2l6ZV90IGNobGdsZW4gPSAwOwogI2VuZGlmCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKSB8fCBkZWZpbmVkKFVTRV9LRVJCRVJPUzUpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9OVExNKQorI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkgfHwgZGVmaW5lZChVU0VfS0VSQkVST1M1KSB8fCAgICAgXAorICBkZWZpbmVkKFVTRV9OVExNKQogICBjb25zdCBjaGFyICpzZXJ2aWNlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VSVklDRV9OQU1FXSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVJWSUNFX05BTUVdIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNhc2wtPnBhcmFtcy0+c2VydmljZTsKKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVJWSUNFX05BTUVdIDoKKyAgICBzYXNsLT5wYXJhbXMtPnNlcnZpY2U7CiAgIGNoYXIgKnNlcnZlcmRhdGE7CiAjZW5kaWYKICAgc2l6ZV90IGxlbiA9IDA7CisgIGNvbnN0IGNoYXIgKm9hdXRoX2JlYXJlciA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0JFQVJFUl07CiAKICAgKnByb2dyZXNzID0gU0FTTF9JTlBST0dSRVNTOwogCkBAIC00NTMsOCArNDY2LDkgQEAKICAgICAqcHJvZ3Jlc3MgPSBTQVNMX0RPTkU7CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgY2FzZSBTQVNMX1BMQUlOOgotICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfcGxhaW5fbWVzc2FnZShkYXRhLCBOVUxMLCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wYXNzd2QsICZyZXNwLCAmbGVuKTsKKyAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3BsYWluX21lc3NhZ2UoZGF0YSwgY29ubi0+c2FzbF9hdXRoemlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT51c2VyLCBjb25uLT5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNwLCAmbGVuKTsKICAgICBicmVhazsKICAgY2FzZSBTQVNMX0xPR0lOOgogICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfbG9naW5fbWVzc2FnZShkYXRhLCBjb25uLT51c2VyLCAmcmVzcCwgJmxlbik7CkBAIC01NTYsNyArNTcwLDcgQEAKICAgICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfb2F1dGhfYmVhcmVyX21lc3NhZ2UoZGF0YSwgY29ubi0+dXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPm9hdXRoX2JlYXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhfYmVhcmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAKICAgICAgIC8qIEZhaWx1cmVzIG1heWJlIHNlbnQgYnkgdGhlIHNlcnZlciBhcyBjb250aW51YXRpb25zIGZvciBPQVVUSEJFQVJFUiAqLwpAQCAtNTY0LDcgKzU3OCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfeG9hdXRoX2JlYXJlcl9tZXNzYWdlKGRhdGEsIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5vYXV0aF9iZWFyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYXV0aF9iZWFyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXAuaAppbmRleCBlZmJhNWRkLi5kYWRmZmY5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zZXR1cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNyw2ICsyNywxNCBAQAogI2VuZGlmCiAKIC8qCisgKiBEaXNhYmxlIFZpc3VhbCBTdHVkaW8gd2FybmluZ3M6CisgKiA0MTI3ICJjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50IgorICovCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxMjcpCisjZW5kaWYKKworLyoKICAqIERlZmluZSBXSU4zMiB3aGVuIGJ1aWxkIHRhcmdldCBpcyBXaW4zMiBBUEkKICAqLwogCkBAIC05Niw2ICsxMDQsMTAgQEAKICMgIGluY2x1ZGUgImNvbmZpZy12eHdvcmtzLmgiCiAjZW5kaWYKIAorI2lmZGVmIF9fUExBTjlfXworIyAgaW5jbHVkZSAiY29uZmlnLXBsYW45LmgiCisjZW5kaWYKKwogI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCkBAIC0yMjMsNiArMjM1LDE0IEBACiAjZW5kaWYKIAogLyoKKyAqIFdpbmRvd3Mgc2V0dXAgZmlsZSBpbmNsdWRlcyBzb21lIHN5c3RlbSBoZWFkZXJzLgorICovCisKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorIyAgaW5jbHVkZSAic2V0dXAtd2luMzIuaCIKKyNlbmRpZgorCisvKgogICogVXNlIGdldGFkZHJpbmZvIHRvIHJlc29sdmUgdGhlIElQdjQgYWRkcmVzcyBsaXRlcmFsLiBJZiB0aGUgY3VycmVudCBuZXR3b3JrCiAgKiBpbnRlcmZhY2UgZG9lc24ndCBzdXBwb3J0IElQdjQsIGJ1dCBzdXBwb3J0cyBJUHY2LCBOQVQ2NCwgYW5kIEROUzY0LAogICogcGVyZm9ybWluZyB0aGlzIHRhc2sgd2lsbCByZXN1bHQgaW4gYSBzeW50aGVzaXplZCBJUHY2IGFkZHJlc3MuCkBAIC0yMzEsNTggKzI1MSw2IEBACiAjZGVmaW5lIFVTRV9SRVNPTFZFX09OX0lQUyAxCiAjZW5kaWYKIAotLyoKLSAqIEluY2x1ZGUgaGVhZGVyIGZpbGVzIGZvciB3aW5kb3dzIGJ1aWxkcyBiZWZvcmUgcmVkZWZpbmluZyBhbnl0aGluZy4KLSAqIFVzZSB0aGlzIHByZXByb2Nlc3NvciBibG9jayBvbmx5IHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB3aW5kb3dzLmgsCi0gKiB3aW5zb2NrMi5oLCB3czJ0Y3BpcC5oIG9yIHdpbnNvY2suaC4gQW55IG90aGVyIHdpbmRvd3MgdGhpbmcgYmVsb25ncwotICogdG8gYW55IG90aGVyIGZ1cnRoZXIgYW5kIGluZGVwZW5kZW50IGJsb2NrLiAgVW5kZXIgQ3lnd2luIHRoaW5ncyB3b3JrCi0gKiBqdXN0IGFzIHVuZGVyIGxpbnV4IChlLmcuIDxzeXMvc29ja2V0Lmg+KSBhbmQgdGhlIHdpbnNvY2sgaGVhZGVycyBzaG91bGQKLSAqIG5ldmVyIGJlIGluY2x1ZGVkIHdoZW4gX19DWUdXSU5fXyBpcyBkZWZpbmVkLiAgY29uZmlndXJlIHNjcmlwdCB0YWtlcwotICogY2FyZSBvZiB0aGlzLCBub3QgZGVmaW5pbmcgSEFWRV9XSU5ET1dTX0gsIEhBVkVfV0lOU09DS19ILCBIQVZFX1dJTlNPQ0syX0gsCi0gKiBuZWl0aGVyIEhBVkVfV1MyVENQSVBfSCB3aGVuIF9fQ1lHV0lOX18gaXMgZGVmaW5lZC4KLSAqLwotCi0jaWZkZWYgSEFWRV9XSU5ET1dTX0gKLSMgIGlmIGRlZmluZWQoVU5JQ09ERSkgJiYgIWRlZmluZWQoX1VOSUNPREUpCi0jICAgIGRlZmluZSBfVU5JQ09ERQotIyAgZW5kaWYKLSMgIGlmIGRlZmluZWQoX1VOSUNPREUpICYmICFkZWZpbmVkKFVOSUNPREUpCi0jICAgIGRlZmluZSBVTklDT0RFCi0jICBlbmRpZgotIyAgaW5jbHVkZSA8d2luZXJyb3IuaD4KLSMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAotIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgotIyAgICBpZmRlZiBIQVZFX1dTMlRDUElQX0gKLSMgICAgICBpbmNsdWRlIDx3czJ0Y3BpcC5oPgotIyAgICBlbmRpZgotIyAgZWxzZQotIyAgICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAotIyAgICAgIGluY2x1ZGUgPHdpbnNvY2suaD4KLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpbmNsdWRlIDx0Y2hhci5oPgotIyAgaWZkZWYgVU5JQ09ERQotICAgICB0eXBlZGVmIHdjaGFyX3QgKigqY3VybF93Y3NkdXBfY2FsbGJhY2spKGNvbnN0IHdjaGFyX3QgKnN0cik7Ci0jICBlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBEZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMiBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSzIgQVBJLCBlbHNlCi0gKiBkZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMSBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSyAgQVBJLCBlbHNlCi0gKiB1bmRlZmluZSBVU0VfV0lOU09DSy4KLSAqLwotCi0jdW5kZWYgVVNFX1dJTlNPQ0sKLQotI2lmZGVmIEhBVkVfV0lOU09DSzJfSAotIyAgZGVmaW5lIFVTRV9XSU5TT0NLIDIKLSNlbHNlCi0jICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAotIyAgICBkZWZpbmUgVVNFX1dJTlNPQ0sgMQotIyAgZW5kaWYKLSNlbmRpZgotCiAjaWZkZWYgVVNFX0xXSVBTT0NLCiAjICBpbmNsdWRlIDxsd2lwL2luaXQuaD4KICMgIGluY2x1ZGUgPGx3aXAvc29ja2V0cy5oPgpAQCAtMzc4LDkgKzM0NiwxNCBAQAogIyAgdW5kZWYgIGZzdGF0CiAjICBkZWZpbmUgZnN0YXQoZmRlcyxzdHApICAgICAgICAgICAgX2ZzdGF0aTY0KGZkZXMsIHN0cCkKICMgIHVuZGVmICBzdGF0Ci0jICBkZWZpbmUgc3RhdChmbmFtZSxzdHApICAgICAgICAgICAgX3N0YXRpNjQoZm5hbWUsIHN0cCkKKyMgIGRlZmluZSBzdGF0KGZuYW1lLHN0cCkgICAgICAgICAgICBjdXJseF93aW4zMl9zdGF0KGZuYW1lLCBzdHApCiAjICBkZWZpbmUgc3RydWN0X3N0YXQgICAgICAgICAgICAgICAgc3RydWN0IF9zdGF0aTY0CiAjICBkZWZpbmUgTFNFRUtfRVJST1IgICAgICAgICAgICAgICAgKF9faW50NjQpLTEKKyMgIGRlZmluZSBmb3BlbihmbmFtZSxtb2RlKSAgICAgICAgICBjdXJseF93aW4zMl9mb3BlbihmbmFtZSwgbW9kZSkKKyMgIGRlZmluZSBhY2Nlc3MoZm5hbWUsbW9kZSkgICAgICAgICBjdXJseF93aW4zMl9hY2Nlc3MoZm5hbWUsIG1vZGUpCisgICBpbnQgY3VybHhfd2luMzJfc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Rfc3RhdCAqYnVmZmVyKTsKKyAgIEZJTEUgKmN1cmx4X3dpbjMyX2ZvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKKyAgIGludCBjdXJseF93aW4zMl9hY2Nlc3MoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOwogI2VuZGlmCiAKIC8qCkBAIC0zOTUsOCArMzY4LDEzIEBACiAjICAgIHVuZGVmICBsc2VlawogIyAgICBkZWZpbmUgbHNlZWsoZmRlcyxvZmZzZXQsd2hlbmNlKSAgX2xzZWVrKGZkZXMsIChsb25nKW9mZnNldCwgd2hlbmNlKQogIyAgICBkZWZpbmUgZnN0YXQoZmRlcyxzdHApICAgICAgICAgICAgX2ZzdGF0KGZkZXMsIHN0cCkKLSMgICAgZGVmaW5lIHN0YXQoZm5hbWUsc3RwKSAgICAgICAgICAgIF9zdGF0KGZuYW1lLCBzdHApCisjICAgIGRlZmluZSBzdGF0KGZuYW1lLHN0cCkgICAgICAgICAgICBjdXJseF93aW4zMl9zdGF0KGZuYW1lLCBzdHApCiAjICAgIGRlZmluZSBzdHJ1Y3Rfc3RhdCAgICAgICAgICAgICAgICBzdHJ1Y3QgX3N0YXQKKyMgICAgZGVmaW5lIGZvcGVuKGZuYW1lLG1vZGUpICAgICAgICAgIGN1cmx4X3dpbjMyX2ZvcGVuKGZuYW1lLCBtb2RlKQorIyAgICBkZWZpbmUgYWNjZXNzKGZuYW1lLG1vZGUpICAgICAgICAgY3VybHhfd2luMzJfYWNjZXNzKGZuYW1lLCBtb2RlKQorICAgICBpbnQgY3VybHhfd2luMzJfc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Rfc3RhdCAqYnVmZmVyKTsKKyAgICAgRklMRSAqY3VybHhfd2luMzJfZm9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOworICAgICBpbnQgY3VybHhfd2luMzJfYWNjZXNzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKTsKICMgIGVuZGlmCiAjICBkZWZpbmUgTFNFRUtfRVJST1IgICAgICAgICAgICAgICAgKGxvbmcpLTEKICNlbmRpZgpAQCAtNDk3LDcgKzQ3NSw2IEBACiAjaWZkZWYgV0lOMzIKIAogIyAgZGVmaW5lIERJUl9DSEFSICAgICAgIlxcIgotIyAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCiAKICNlbHNlIC8qIFdJTjMyICovCiAKQEAgLTUyMywxNCArNTAwLDYgQEAKICMgIGVuZGlmCiAKICMgIGRlZmluZSBESVJfQ0hBUiAgICAgICIvIgotIyAgaWZuZGVmIERPVF9DSEFSCi0jICAgIGRlZmluZSBET1RfQ0hBUiAgICAgICIuIgotIyAgZW5kaWYKLQotIyAgaWZkZWYgTVNET1MKLSMgICAgdW5kZWYgRE9UX0NIQVIKLSMgICAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCi0jICBlbmRpZgogCiAjICBpZm5kZWYgZmlsZW5vIC8qIHN1bm9zIDQgaGF2ZSB0aGlzIGFzIGEgbWFjcm8hICovCiAgICAgIGludCBmaWxlbm8oRklMRSAqc3RyZWFtKTsKQEAgLTU4Myw2ICs1NTIsMTIgQEAKICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSBDVVJMUkVTXyogZGVmaW5pdGlvbnMuCiAgKi8KIAorI2lmIGRlZmluZWQoRU5BQkxFX0lQVjYpICYmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykKKyMgIGRlZmluZSBDVVJMUkVTX0lQVjYKKyNlbHNlCisjICBkZWZpbmUgQ1VSTFJFU19JUFY0CisjZW5kaWYKKwogI2lmZGVmIFVTRV9BUkVTCiAjICBkZWZpbmUgQ1VSTFJFU19BU1lOQ0gKICMgIGRlZmluZSBDVVJMUkVTX0FSRVMKQEAgLTU5NywxMiArNTcyLDYgQEAKICMgIGRlZmluZSBDVVJMUkVTX1NZTkNICiAjZW5kaWYKIAotI2lmZGVmIEVOQUJMRV9JUFY2Ci0jICBkZWZpbmUgQ1VSTFJFU19JUFY2Ci0jZWxzZQotIyAgZGVmaW5lIENVUkxSRVNfSVBWNAotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKQEAgLTY2Miw5ICs2MzEsMTAgQEAKICNkZWZpbmUgTElCSUROX1JFUVVJUkVEX1ZFUlNJT04gIjAuNC4xIgogCiAjaWYgZGVmaW5lZChVU0VfR05VVExTKSB8fCBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9OU1MpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9QT0xBUlNTTCkgfHwgZGVmaW5lZChVU0VfTUJFRFRMUykgfHwgXAotICAgIGRlZmluZWQoVVNFX0NZQVNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IGRlZmluZWQoVVNFX0dTS0lUKSB8fCBkZWZpbmVkKFVTRV9NRVNBTElOSykKKyAgICBkZWZpbmVkKFVTRV9NQkVEVExTKSB8fCBcCisgICAgZGVmaW5lZChVU0VfV09MRlNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKKyAgICBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IGRlZmluZWQoVVNFX0dTS0lUKSB8fCBkZWZpbmVkKFVTRV9NRVNBTElOSykgfHwgXAorICAgIGRlZmluZWQoVVNFX0JFQVJTU0wpCiAjZGVmaW5lIFVTRV9TU0wgICAgLyogU1NMIHN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZCAqLwogI2VuZGlmCiAKQEAgLTY4MiwxMCArNjUyLDExIEBACiAKIC8qIFNpbmdsZSBwb2ludCB3aGVyZSBVU0VfTlRMTSBkZWZpbml0aW9uIG1pZ2h0IGJlIGRlZmluZWQgKi8KICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfTlRMTSkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQotI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkgfHwgXAotICAgIGRlZmluZWQoVVNFX0dOVVRMUykgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9PUzQwMENSWVBUTykgfHwgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKSB8fCBcCi0gICAgZGVmaW5lZChVU0VfTUJFRFRMUykKKyNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpIHx8ICAgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChVU0VfR05VVExTKSB8fCBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkgfHwgIFwKKyAgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykgfHwgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChVU0VfTUJFRFRMUykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGRlZmluZWQoVVNFX1dPTEZTU0wpICYmIGRlZmluZWQoSEFWRV9XT0xGU1NMX0RFU19TRVRfT0REX1BBUklUWSkpCiAKICNkZWZpbmUgVVNFX05UTE0KIApAQCAtNzMzLDcgKzcwNCw3IEBACiAgKi8KIAogI2lmbmRlZiBDdXJsX25vcF9zdG10Ci0jICBkZWZpbmUgQ3VybF9ub3Bfc3RtdCBkbyB7IH0gV0hJTEVfRkFMU0UKKyMgIGRlZmluZSBDdXJsX25vcF9zdG10IGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKIC8qCkBAIC04NDIsNCArODEzLDggQEAKICNkZWZpbmUgVU5JVFRFU1Qgc3RhdGljCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoVVNFX05HVENQMikgfHwgZGVmaW5lZChVU0VfUVVJQ0hFKQorI2RlZmluZSBFTkFCTEVfUVVJQworI2VuZGlmCisKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TRVRVUF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwX29uY2UuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXBfb25jZS5oCmluZGV4IDQxM2NjZWEuLmU3YzAwZGUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXBfb25jZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXBfb25jZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMzAsMjcgKzMzMCw2IEBACiAjaW5jbHVkZSAiY3VybF9jdHlwZS5oIgogCiAvKgotICogTWFjcm8gV0hJTEVfRkFMU0UgbWF5IGJlIHVzZWQgdG8gYnVpbGQgc2luZ2xlLWl0ZXJhdGlvbiBkby13aGlsZSBsb29wcywKLSAqIGF2b2lkaW5nIGNvbXBpbGVyIHdhcm5pbmdzLiBNb3N0bHkgaW50ZW5kZWQgZm9yIG90aGVyIG1hY3JvIGRlZmluaXRpb25zLgotICovCi0KLSNkZWZpbmUgV0hJTEVfRkFMU0UgIHdoaWxlKDApCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX1BPQ0NfXykKLSMgIHVuZGVmIFdISUxFX0ZBTFNFCi0jICBpZiAoX01TQ19WRVIgPCAxNTAwKQotIyAgICBkZWZpbmUgV0hJTEVfRkFMU0UgIHdoaWxlKDEsIDApCi0jICBlbHNlCi0jICAgIGRlZmluZSBXSElMRV9GQUxTRSBcCi1fX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSBcCi1fX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDEyNykpIFwKLXdoaWxlKDApIFwKLV9fcHJhZ21hKHdhcm5pbmcocG9wKSkKLSMgIGVuZGlmCi0jZW5kaWYKLQotCi0vKgogICogVHlwZWRlZiB0byAnaW50JyBpZiBzaWdfYXRvbWljX3QgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlLgogICovCiAKQEAgLTM4Nyw3ICszNjYsNyBAQAogI2lmZGVmIERFQlVHQlVJTEQKICNkZWZpbmUgREVCVUdGKHgpIHgKICNlbHNlCi0jZGVmaW5lIERFQlVHRih4KSBkbyB7IH0gV0hJTEVfRkFMU0UKKyNkZWZpbmUgREVCVUdGKHgpIGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKIApAQCAtMzk1LDEwICszNzQsMTEgQEAKICAqIE1hY3JvIHVzZWQgdG8gaW5jbHVkZSBhc3NlcnRpb24gY29kZSBvbmx5IGluIGRlYnVnIGJ1aWxkcy4KICAqLwogCisjdW5kZWYgREVCVUdBU1NFUlQKICNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmIGRlZmluZWQoSEFWRV9BU1NFUlRfSCkKICNkZWZpbmUgREVCVUdBU1NFUlQoeCkgYXNzZXJ0KHgpCiAjZWxzZQotI2RlZmluZSBERUJVR0FTU0VSVCh4KSBkbyB7IH0gV0hJTEVfRkFMU0UKKyNkZWZpbmUgREVCVUdBU1NFUlQoeCkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAogCkBAIC01MDEsNiArNDgxLDggQEAKIAogI2lmZGVmIF9fVk1TCiAjZGVmaW5lIGFyZ3ZfaXRlbV90ICBfX2NoYXJfcHRyMzIKKyNlbGlmIGRlZmluZWQoX1VOSUNPREUpCisjZGVmaW5lIGFyZ3ZfaXRlbV90IHdjaGFyX3QgKgogI2Vsc2UKICNkZWZpbmUgYXJndl9pdGVtX3QgIGNoYXIgKgogI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NoYTI1Ni5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zaGEyNTYuaAppbmRleCA2ZGI0YjA0Li4zNWQyODZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NoYTI1Ni5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2hhMjU2LmgKQEAgLTcsNyArNyw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRmxvcmluIFBldHJpdWMsIDxwZXRyaXVjLmZsb3JpbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIEZsb3JpbiBQZXRyaXVjLCA8cGV0cml1Yy5mbG9yaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjQsOCArMjUsMTAgQEAKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKIAotdm9pZCBDdXJsX3NoYTI1Nml0KHVuc2lnbmVkIGNoYXIgKm91dGJ1ZmZlciwKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCk7CisjZGVmaW5lIFNIQTI1Nl9ESUdFU1RfTEVOR1RIIDMyCisKK3ZvaWQgQ3VybF9zaGEyNTZpdCh1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsZW4pOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuYwppbmRleCAxZDBkZTRlLi44M2VjZTlhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgIC8qIEluaXRpYWxpemUgdGhlIGlkZW50aXR5ICovCiAgIG1lbXNldChpZGVudGl0eSwgMCwgc2l6ZW9mKCppZGVudGl0eSkpOwogCi0gIHVzZXJhbmRkb21haW4udGNoYXJfcHRyID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKil1c2VycCk7CisgIHVzZXJhbmRkb21haW4udGNoYXJfcHRyID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKChjaGFyICopdXNlcnApOwogICBpZighdXNlcmFuZGRvbWFpbi50Y2hhcl9wdHIpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAvKiBTZXR1cCB0aGUgaWRlbnRpdHkncyB1c2VyIGFuZCBsZW5ndGggKi8KICAgZHVwX3VzZXIudGNoYXJfcHRyID0gX3Rjc2R1cCh1c2VyLnRjaGFyX3B0cik7CiAgIGlmKCFkdXBfdXNlci50Y2hhcl9wdHIpIHsKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHVzZXJhbmRkb21haW4udGNoYXJfcHRyKTsKKyAgICBjdXJseF91bmljb2RlZnJlZSh1c2VyYW5kZG9tYWluLnRjaGFyX3B0cik7CiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KICAgaWRlbnRpdHktPlVzZXIgPSBkdXBfdXNlci50Ynl0ZV9wdHI7CkBAIC0xODMsNyArMTgzLDcgQEAKICAgLyogU2V0dXAgdGhlIGlkZW50aXR5J3MgZG9tYWluIGFuZCBsZW5ndGggKi8KICAgZHVwX2RvbWFpbi50Y2hhcl9wdHIgPSBtYWxsb2Moc2l6ZW9mKFRDSEFSKSAqIChkb21sZW4gKyAxKSk7CiAgIGlmKCFkdXBfZG9tYWluLnRjaGFyX3B0cikgewotICAgIEN1cmxfdW5pY29kZWZyZWUodXNlcmFuZGRvbWFpbi50Y2hhcl9wdHIpOworICAgIGN1cmx4X3VuaWNvZGVmcmVlKHVzZXJhbmRkb21haW4udGNoYXJfcHRyKTsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogICBfdGNzbmNweShkdXBfZG9tYWluLnRjaGFyX3B0ciwgZG9tYWluLnRjaGFyX3B0ciwgZG9tbGVuKTsKQEAgLTE5MiwyMiArMTkyLDIyIEBACiAgIGlkZW50aXR5LT5Eb21haW5MZW5ndGggPSBjdXJseF91enRvdWwoZG9tbGVuKTsKICAgZHVwX2RvbWFpbi50Y2hhcl9wdHIgPSBOVUxMOwogCi0gIEN1cmxfdW5pY29kZWZyZWUodXNlcmFuZGRvbWFpbi50Y2hhcl9wdHIpOworICBjdXJseF91bmljb2RlZnJlZSh1c2VyYW5kZG9tYWluLnRjaGFyX3B0cik7CiAKICAgLyogU2V0dXAgdGhlIGlkZW50aXR5J3MgcGFzc3dvcmQgYW5kIGxlbmd0aCAqLwotICBwYXNzd2QudGNoYXJfcHRyID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKilwYXNzd2RwKTsKKyAgcGFzc3dkLnRjaGFyX3B0ciA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKXBhc3N3ZHApOwogICBpZighcGFzc3dkLnRjaGFyX3B0cikKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgZHVwX3Bhc3N3ZC50Y2hhcl9wdHIgPSBfdGNzZHVwKHBhc3N3ZC50Y2hhcl9wdHIpOwogICBpZighZHVwX3Bhc3N3ZC50Y2hhcl9wdHIpIHsKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHBhc3N3ZC50Y2hhcl9wdHIpOworICAgIGN1cmx4X3VuaWNvZGVmcmVlKHBhc3N3ZC50Y2hhcl9wdHIpOwogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAgIGlkZW50aXR5LT5QYXNzd29yZCA9IGR1cF9wYXNzd2QudGJ5dGVfcHRyOwogICBpZGVudGl0eS0+UGFzc3dvcmRMZW5ndGggPSBjdXJseF91enRvdWwoX3Rjc2xlbihkdXBfcGFzc3dkLnRjaGFyX3B0cikpOwogICBkdXBfcGFzc3dkLnRjaGFyX3B0ciA9IE5VTEw7CiAKLSAgQ3VybF91bmljb2RlZnJlZShwYXNzd2QudGNoYXJfcHRyKTsKKyAgY3VybHhfdW5pY29kZWZyZWUocGFzc3dkLnRjaGFyX3B0cik7CiAKICAgLyogU2V0dXAgdGhlIGlkZW50aXR5J3MgZmxhZ3MgKi8KICAgaWRlbnRpdHktPkZsYWdzID0gU0VDRkxBR19XSU5OVF9BVVRIX0lERU5USVRZOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuaAppbmRleCAyYmJmOTQ3Li5jMDkwMjZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuYwppbmRleCA4ZTU5MzdhLi5iNWYxMGEyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdm9pZCAqY3VybF90aHJlYWRfY3JlYXRlX3RodW5rKHZvaWQgKmFyZykKIHsKLSAgc3RydWN0IGN1cmxfYWN0dWFsX2NhbGwgKiBhYyA9IGFyZzsKKyAgc3RydWN0IGN1cmxfYWN0dWFsX2NhbGwgKmFjID0gYXJnOwogICB1bnNpZ25lZCBpbnQgKCpmdW5jKSh2b2lkICopID0gYWMtPmZ1bmM7CiAgIHZvaWQgKnJlYWxfYXJnID0gYWMtPmFyZzsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuaAppbmRleCAyYTkzNjQ0Li42NWQxYTc5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybHguaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmx4LmgKaW5kZXggM2U5YjUxNi4uYThiYWUxNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybHguaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJseC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01Myw2ICs1MywxNiBAQAogICBjdXJseF91enRvc2koKQogKi8KIAorI2luY2x1ZGUgImN1cmxfbXVsdGlieXRlLmgiCisvKiAiY3VybF9tdWx0aWJ5dGUuaCIgcHJvdmlkZXMgdGhlc2UgZnVuY3Rpb25zIGFuZCBtYWNyb3M6CisKKyAgY3VybHhfY29udmVydF9VVEY4X3RvX3djaGFyKCkKKyAgY3VybHhfY29udmVydF93Y2hhcl90b19VVEY4KCkKKyAgY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKCkKKyAgY3VybHhfY29udmVydF90Y2hhcl90b19VVEY4KCkKKyAgY3VybHhfdW5pY29kZWZyZWUoKQorKi8KKwogLyogTm93IHNldHVwIGN1cmx4XyAqIG5hbWVzIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHRvIGJlY29tZSBjdXJseF8gYW5kCiAgICBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgbGliY3VybCBvZmZpY2lhbCBBUEk6CiAgICBjdXJseF9nZXRlbnYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuYwppbmRleCAyMDhhMjMzLi5mNTI5YjQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kaWN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZGljdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00Niw2ICs0Niw4IEBACiAKICNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9VTklTVERfSCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgpAQCAtOTcsNyArOTksOCBAQAogICBjaGFyICpkaWN0cDsKICAgc2l6ZV90IGxlbjsKIAotICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBpbnB1dGJ1ZmYsIDAsICZuZXdwLCAmbGVuLCBGQUxTRSk7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGlucHV0YnVmZiwgMCwgJm5ld3AsICZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9OQURBKTsKICAgaWYoIW5ld3AgfHwgcmVzdWx0KQogICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kaWN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kaWN0LmgKaW5kZXggMTJjMGYzMy4uMzhhNTVhYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZGljdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG9oLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guYwppbmRleCA2ZDFmMzMwLi5lYmIyYzI0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAiZHluYnVmLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKICNkZWZpbmUgRE5TX0NMQVNTX0lOIDB4MDEKLSNkZWZpbmUgRE9IX01BWF9SRVNQT05TRV9TSVpFIDMwMDAgLyogYnl0ZXMgKi8KIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVycm9yc1tdPXsKQEAgLTc0LDE3ICs3NCw1MCBAQAogI2RlZmluZSBVTklUVEVTVCBzdGF0aWMKICNlbmRpZgogCisvKiBAdW5pdHRlc3QgMTY1NQorICovCiBVTklUVEVTVCBET0hjb2RlIGRvaF9lbmNvZGUoY29uc3QgY2hhciAqaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETlN0eXBlIGRuc3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZG5zcCwgLyogYnVmZmVyICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgIC8qIGJ1ZmZlciBzaXplICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuKSAvKiBvdXRwdXQgbGVuZ3RoICovCiB7Ci0gIHNpemVfdCBob3N0bGVuID0gc3RybGVuKGhvc3QpOworICBjb25zdCBzaXplX3QgaG9zdGxlbiA9IHN0cmxlbihob3N0KTsKICAgdW5zaWduZWQgY2hhciAqb3JpZyA9IGRuc3A7CiAgIGNvbnN0IGNoYXIgKmhvc3RwID0gaG9zdDsKIAotICBpZihsZW4gPCAoMTIgKyBob3N0bGVuICsgNCkpCisgIC8qIFRoZSBleHBlY3RlZCBvdXRwdXQgbGVuZ3RoIGlzIDE2IGJ5dGVzIG1vcmUgdGhhbiB0aGUgbGVuZ3RoIG9mCisgICAqIHRoZSBRTkFNRS1lbmNvZGluZyBvZiB0aGUgaG9zdCBuYW1lLgorICAgKgorICAgKiBBIHZhbGlkIEROUyBuYW1lIG1heSBub3QgY29udGFpbiBhIHplcm8tbGVuZ3RoIGxhYmVsLCBleGNlcHQgYXQKKyAgICogdGhlIGVuZC4gIEZvciB0aGlzIHJlYXNvbiwgYSBuYW1lIGJlZ2lubmluZyB3aXRoIGEgZG90LCBvcgorICAgKiBjb250YWluaW5nIGEgc2VxdWVuY2Ugb2YgdHdvIG9yIG1vcmUgY29uc2VjdXRpdmUgZG90cywgaXMgaW52YWxpZAorICAgKiBhbmQgY2Fubm90IGJlIGVuY29kZWQgYXMgYSBRTkFNRS4KKyAgICoKKyAgICogSWYgdGhlIGhvc3QgbmFtZSBlbmRzIHdpdGggYSB0cmFpbGluZyBkb3QsIHRoZSBjb3JyZXNwb25kaW5nCisgICAqIFFOQU1FLWVuY29kaW5nIGlzIG9uZSBieXRlIGxvbmdlciB0aGFuIHRoZSBob3N0IG5hbWUuIElmIChhcyBpcworICAgKiBhbHNvIHZhbGlkKSB0aGUgaG9zdG5hbWUgaXMgc2hvcnRlbmVkIGJ5IHRoZSBvbWlzc2lvbiBvZiB0aGUKKyAgICogdHJhaWxpbmcgZG90LCB0aGVuIGl0cyBRTkFNRS1lbmNvZGluZyB3aWxsIGJlIHR3byBieXRlcyBsb25nZXIKKyAgICogdGhhbiB0aGUgaG9zdCBuYW1lLgorICAgKgorICAgKiBFYWNoIFsgbGFiZWwsIGRvdCBdIHBhaXIgaXMgZW5jb2RlZCBhcyBbIGxlbmd0aCwgbGFiZWwgXSwKKyAgICogcHJlc2VydmluZyBvdmVyYWxsIGxlbmd0aC4gIEEgZmluYWwgWyBsYWJlbCBdIHdpdGhvdXQgYSBkb3QgaXMKKyAgICogYWxzbyBlbmNvZGVkIGFzIFsgbGVuZ3RoLCBsYWJlbCBdLCBpbmNyZWFzaW5nIG92ZXJhbGwgbGVuZ3RoCisgICAqIGJ5IG9uZS4gVGhlIGVuY29kaW5nIGlzIGNvbXBsZXRlZCBieSBhcHBlbmRpbmcgYSB6ZXJvIGJ5dGUsCisgICAqIHJlcHJlc2VudGluZyB0aGUgemVyby1sZW5ndGggcm9vdCBsYWJlbCwgYWdhaW4gaW5jcmVhc2luZworICAgKiB0aGUgb3ZlcmFsbCBsZW5ndGggYnkgb25lLgorICAgKi8KKworICBzaXplX3QgZXhwZWN0ZWRfbGVuOworICBERUJVR0FTU0VSVChob3N0bGVuKTsKKyAgZXhwZWN0ZWRfbGVuID0gMTIgKyAxICsgaG9zdGxlbiArIDQ7CisgIGlmKGhvc3RbaG9zdGxlbi0xXSE9Jy4nKQorICAgIGV4cGVjdGVkX2xlbisrOworCisgIGlmKGV4cGVjdGVkX2xlbiA+ICgyNTYgKyAxNikpIC8qIFJGQ3MgMTAzNCwgMTAzNSAqLworICAgIHJldHVybiBET0hfRE5TX05BTUVfVE9PX0xPTkc7CisKKyAgaWYobGVuIDwgZXhwZWN0ZWRfbGVuKQogICAgIHJldHVybiBET0hfVE9PX1NNQUxMX0JVRkZFUjsKIAogICAqZG5zcCsrID0gMDsgLyogMTYgYml0IGlkICovCkBAIC0xMDAsNTkgKzEzMyw1NSBAQAogICAqZG5zcCsrID0gJ1wwJzsKICAgKmRuc3ArKyA9ICdcMCc7IC8qIEFSQ09VTlQgKi8KIAotICAvKiBzdG9yZSBhIFFOQU1FICovCi0gIGRvIHsKLSAgICBjaGFyICpkb3QgPSBzdHJjaHIoaG9zdHAsICcuJyk7CisgIC8qIGVuY29kZSBlYWNoIGxhYmVsIGFuZCBzdG9yZSBpdCBpbiB0aGUgUU5BTUUgKi8KKyAgd2hpbGUoKmhvc3RwKSB7CiAgICAgc2l6ZV90IGxhYmVsbGVuOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBpZihkb3QpIHsKLSAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICBjaGFyICpkb3QgPSBzdHJjaHIoaG9zdHAsICcuJyk7CisgICAgaWYoZG90KQogICAgICAgbGFiZWxsZW4gPSBkb3QgLSBob3N0cDsKLSAgICB9CiAgICAgZWxzZQogICAgICAgbGFiZWxsZW4gPSBzdHJsZW4oaG9zdHApOwotICAgIGlmKGxhYmVsbGVuID4gNjMpIHsKLSAgICAgIC8qIHRvbyBsb25nIGxhYmVsLCBlcnJvciBvdXQgKi8KKyAgICBpZigobGFiZWxsZW4gPiA2MykgfHwgKCFsYWJlbGxlbikpIHsKKyAgICAgIC8qIGxhYmVsIGlzIHRvbyBsb25nIG9yIHRvbyBzaG9ydCwgZXJyb3Igb3V0ICovCiAgICAgICAqb2xlbiA9IDA7CiAgICAgICByZXR1cm4gRE9IX0ROU19CQURfTEFCRUw7CiAgICAgfQorICAgIC8qIGxhYmVsIGlzIG5vbi1lbXB0eSwgcHJvY2VzcyBpdCAqLwogICAgICpkbnNwKysgPSAodW5zaWduZWQgY2hhcilsYWJlbGxlbjsKICAgICBtZW1jcHkoZG5zcCwgaG9zdHAsIGxhYmVsbGVuKTsKICAgICBkbnNwICs9IGxhYmVsbGVuOwotICAgIGhvc3RwICs9IGxhYmVsbGVuICsgMTsKLSAgICBpZighZm91bmQpIHsKLSAgICAgICpkbnNwKysgPSAwOyAvKiB0ZXJtaW5hdGluZyB6ZXJvICovCi0gICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUoMSk7CisgICAgaG9zdHAgKz0gbGFiZWxsZW47CisgICAgLyogYWR2YW5jZSBwYXN0IGRvdCwgYnV0IG9ubHkgaWYgdGhlcmUgaXMgb25lICovCisgICAgaWYoZG90KQorICAgICAgaG9zdHArKzsKKyAgfSAvKiBuZXh0IGxhYmVsICovCiAKLSAgKmRuc3ArKyA9ICdcMCc7IC8qIHVwcGVyIDggYml0IFRZUEUgKi8KLSAgKmRuc3ArKyA9ICh1bnNpZ25lZCBjaGFyKWRuc3R5cGU7CisgICpkbnNwKysgPSAwOyAvKiBhcHBlbmQgemVyby1sZW5ndGggbGFiZWwgZm9yIHJvb3QgKi8KKworICAvKiBUaGVyZSBhcmUgYXNzaWduZWQgVFlQRSBjb2RlcyBiZXlvbmQgMjU1OiB1c2UgcmFuZ2UgWzEuLjY1NTM1XSAgKi8KKyAgKmRuc3ArKyA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgJiAoZG5zdHlwZT4+OCkpOyAvKiB1cHBlciA4IGJpdCBUWVBFICovCisgICpkbnNwKysgPSAodW5zaWduZWQgY2hhcikoMjU1ICYgZG5zdHlwZSk7ICAgICAgLyogbG93ZXIgOCBiaXQgVFlQRSAqLworCiAgICpkbnNwKysgPSAnXDAnOyAvKiB1cHBlciA4IGJpdCBDTEFTUyAqLwogICAqZG5zcCsrID0gRE5TX0NMQVNTX0lOOyAvKiBJTiAtICJ0aGUgSW50ZXJuZXQiICovCiAKICAgKm9sZW4gPSBkbnNwIC0gb3JpZzsKKworICAvKiB2ZXJpZnkgdGhhdCBvdXIgZXN0aW1hdGlvbiBvZiBsZW5ndGggaXMgdmFsaWQsIHNpbmNlCisgICAqIHRoaXMgaGFzIGxlZCB0byBidWZmZXIgb3ZlcmZsb3dzIGluIHRoaXMgZnVuY3Rpb24gKi8KKyAgREVCVUdBU1NFUlQoKm9sZW4gPT0gZXhwZWN0ZWRfbGVuKTsKICAgcmV0dXJuIERPSF9PSzsKIH0KIAogc3RhdGljIHNpemVfdAotZG9oX3dyaXRlX2NiKHZvaWQgKmNvbnRlbnRzLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VycCkKK2RvaF93cml0ZV9jYihjb25zdCB2b2lkICpjb250ZW50cywgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcnApCiB7CiAgIHNpemVfdCByZWFsc2l6ZSA9IHNpemUgKiBubWVtYjsKLSAgc3RydWN0IGRvaHJlc3BvbnNlICptZW0gPSAoc3RydWN0IGRvaHJlc3BvbnNlICopdXNlcnA7CisgIHN0cnVjdCBkeW5idWYgKm1lbSA9IChzdHJ1Y3QgZHluYnVmICopdXNlcnA7CiAKLSAgaWYoKG1lbS0+c2l6ZSArIHJlYWxzaXplKSA+IERPSF9NQVhfUkVTUE9OU0VfU0laRSkKLSAgICAvKiBzdXNwaWNpb3VzbHkgbXVjaCBmb3IgdXMgKi8KKyAgaWYoQ3VybF9keW5fYWRkbihtZW0sIGNvbnRlbnRzLCByZWFsc2l6ZSkpCiAgICAgcmV0dXJuIDA7CiAKLSAgbWVtLT5tZW1vcnkgPSBDdXJsX3NhZmVyZWFsbG9jKG1lbS0+bWVtb3J5LCBtZW0tPnNpemUgKyByZWFsc2l6ZSk7Ci0gIGlmKCFtZW0tPm1lbW9yeSkKLSAgICAvKiBvdXQgb2YgbWVtb3J5ISAqLwotICAgIHJldHVybiAwOwotCi0gIG1lbWNweSgmKG1lbS0+bWVtb3J5W21lbS0+c2l6ZV0pLCBjb250ZW50cywgcmVhbHNpemUpOwotICBtZW0tPnNpemUgKz0gcmVhbHNpemU7Ci0KICAgcmV0dXJuIHJlYWxzaXplOwogfQogCkBAIC0xODAsNyArMjA5LDcgQEAKICAgcmVzdWx0ID0gY3VybF9lYXN5X3NldG9wdChkb2gsIHgsIHkpOyAgIFwKICAgaWYocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBnb3RvIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gV0hJTEVfRkFMU0UKK30gd2hpbGUoMCkKIAogc3RhdGljIENVUkxjb2RlIGRvaHByb2JlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRuc3Byb2JlICpwLCBETlN0eXBlIGRuc3R5cGUsCkBAIC0yMDAsMTAgKzIyOSw3IEBACiAgIH0KIAogICBwLT5kbnN0eXBlID0gZG5zdHlwZTsKLSAgcC0+c2VydmVyZG9oLm1lbW9yeSA9IE5VTEw7Ci0gIC8qIHRoZSBtZW1vcnkgd2lsbCBiZSBncm93biBhcyBuZWVkZWQgYnkgcmVhbGxvYyBpbiB0aGUgZG9oX3dyaXRlX2NiCi0gICAgIGZ1bmN0aW9uICovCi0gIHAtPnNlcnZlcmRvaC5zaXplID0gMDsKKyAgQ3VybF9keW5faW5pdCgmcC0+c2VydmVyZG9oLCBEWU5fRE9IX1JFU1BPTlNFKTsKIAogICAvKiBOb3RlOiB0aGlzIGlzIGNvZGUgZm9yIHNlbmRpbmcgdGhlIERvSCByZXF1ZXN0IHdpdGggR0VUIGJ1dCB0aGVyZSdzIHN0aWxsCiAgICAgIG5vIGxvZ2ljIHRoYXQgYWN0dWFsbHkgZW5hYmxlcyB0aGlzLiBXZSBzaG91bGQgZWl0aGVyIGFkZCB0aGF0IGFiaWxpdHkgb3IKQEAgLTIyNSwxMyArMjUxLDE2IEBACiAgIH0KIAogICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQorICBpZih0aW1lb3V0X21zIDw9IDApIHsKKyAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgZ290byBlcnJvcjsKKyAgfQogICAvKiBDdXJsX29wZW4oKSBpcyB0aGUgaW50ZXJuYWwgdmVyc2lvbiBvZiBjdXJsX2Vhc3lfaW5pdCgpICovCiAgIHJlc3VsdCA9IEN1cmxfb3BlbigmZG9oKTsKICAgaWYoIXJlc3VsdCkgewogICAgIC8qIHBhc3MgaW4gdGhlIHN0cnVjdCBwb2ludGVyIHZpYSBhIGxvY2FsIHZhcmlhYmxlIHRvIHBsZWFzZSBjb3Zlcml0eSBhbmQKICAgICAgICB0aGUgZ2NjIHR5cGVjaGVjayBoZWxwZXJzICovCi0gICAgc3RydWN0IGRvaHJlc3BvbnNlICpyZXNwID0gJnAtPnNlcnZlcmRvaDsKKyAgICBzdHJ1Y3QgZHluYnVmICpyZXNwID0gJnAtPnNlcnZlcmRvaDsKICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9VUkwsIHVybCk7CiAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZG9oX3dyaXRlX2NiKTsKICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9XUklURURBVEEsIHJlc3ApOwpAQCAtMjQ2LDYgKzI3NSw5IEBACiAjaWZuZGVmIENVUkxERUJVRwogICAgIC8qIGVuZm9yY2UgSFRUUFMgaWYgbm90IGRlYnVnICovCiAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPVE9DT0xTLCBDVVJMUFJPVE9fSFRUUFMpOworI2Vsc2UKKyAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBhbHNvIGFsbG93IGh0dHAgKi8KKyAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9UT0NPTFMsIENVUkxQUk9UT19IVFRQfENVUkxQUk9UT19IVFRQUyk7CiAjZW5kaWYKICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9USU1FT1VUX01TLCAobG9uZyl0aW1lb3V0X21zKTsKICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkKQEAgLTI1OSwzOCArMjkxLDQ1IEBACiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfRkFMU0VTVEFSVCwgMUwpOwogICAgIGlmKGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlob3N0KQogICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDJMKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgaWYoZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeWhvc3QpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVCwgMkwpOwotICAgIGlmKGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlwZWVyKQotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDFMKTsKICAgICBpZihkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkudmVyaWZ5cGVlcikKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllQRUVSLCAxTCk7CisgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV9QUk9YWV0pIHsKKyAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1hZX0NBSU5GTywKKyAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV9QUk9YWV0pOworICAgIH0KKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9QUk9YWV0pIHsKKyAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1hZX0NSTEZJTEUsCisgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX1BST1hZXSk7CisgICAgfQorICAgIGlmKGRhdGEtPnNldC5wcm94eV9zc2wubm9fcmV2b2tlKQorICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBlbHNlIGlmKGRhdGEtPnNldC5wcm94eV9zc2wucmV2b2tlX2Jlc3RfZWZmb3J0KQorICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFNTTE9QVF9SRVZPS0VfQkVTVF9FRkZPUlQpOworICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKSB7CisgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsCisgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5cGVlcikKKyAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAxTCk7CiAgICAgaWYoZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeXN0YXR1cykKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1NTTF9WRVJJRllTVEFUVVMsIDFMKTsKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX09SSUddKSB7CiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9DQUlORk8sCiAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR10pOwogICAgIH0KLSAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSkgewotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfQ0FJTkZPLAotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSk7Ci0gICAgfQogICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfT1JJR10pIHsKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX0NBUEFUSCwKICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF9PUklHXSk7CiAgICAgfQotICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKSB7Ci0gICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsCi0gICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKTsKLSAgICB9CiAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfT1JJR10pIHsKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX0NSTEZJTEUsCiAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX09SSUddKTsKICAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldKSB7Ci0gICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DUkxGSUxFLAotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9QUk9YWV0pOwotICAgIH0KICAgICBpZihkYXRhLT5zZXQuc3NsLmNlcnRpbmZvKQogICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfQ0VSVElORk8sIDFMKTsKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdKSB7CkBAIC0zMDMsOCArMzQyLDggQEAKICAgICB9CiAgICAgaWYoZGF0YS0+c2V0LnNzbC5ub19yZXZva2UpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfT1BUSU9OUywgQ1VSTFNTTE9QVF9OT19SRVZPS0UpOwotICAgIGlmKGRhdGEtPnNldC5wcm94eV9zc2wubm9fcmV2b2tlKQotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBlbHNlIGlmKGRhdGEtPnNldC5zc2wucmV2b2tlX2Jlc3RfZWZmb3J0KQorICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfUkVWT0tFX0JFU1RfRUZGT1JUKTsKICAgICBpZihkYXRhLT5zZXQuc3NsLmZzc2xjdHgpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBkYXRhLT5zZXQuc3NsLmZzc2xjdHgpOwogICAgIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eHApCkBAIC0zMjUsNyArMzY0LDcgQEAKIAogICBlcnJvcjoKICAgZnJlZShudXJsKTsKLSAgQ3VybF9jbG9zZShkb2gpOworICBDdXJsX2Nsb3NlKCZkb2gpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMzQsMTMgKzM3MywxNCBAQAogICogJ0N1cmxfYWRkcmluZm8gKicgd2l0aCB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KICAqLwogCi1DdXJsX2FkZHJpbmZvICpDdXJsX2RvaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX2RvaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBpbnQgc2xvdDsKICAgKndhaXRwID0gVFJVRTsgLyogdGhpcyBuZXZlciByZXR1cm5zIHN5bmNocm9ub3VzbHkgKi8KICAgKHZvaWQpY29ubjsKICAgKHZvaWQpaG9zdG5hbWU7CkBAIC0zNDksNiArMzg5LDcgQEAKICAgLyogc3RhcnQgY2xlYW4sIGNvbnNpZGVyIGFsbG9jYXRpbmcgdGhpcyBzdHJ1Y3Qgb24gZGVtYW5kICovCiAgIG1lbXNldCgmZGF0YS0+cmVxLmRvaCwgMCwgc2l6ZW9mKHN0cnVjdCBkb2hkYXRhKSk7CiAKKyAgY29ubi0+Yml0cy5kb2ggPSBUUlVFOwogICBkYXRhLT5yZXEuZG9oLmhvc3QgPSBob3N0bmFtZTsKICAgZGF0YS0+cmVxLmRvaC5wb3J0ID0gcG9ydDsKICAgZGF0YS0+cmVxLmRvaC5oZWFkZXJzID0KQEAgLTM1OSw4ICs0MDAsOCBAQAogCiAgIGlmKGNvbm4tPmlwX3ZlcnNpb24gIT0gQ1VSTF9JUFJFU09MVkVfVjYpIHsKICAgICAvKiBjcmVhdGUgSVB2NCBET0ggcmVxdWVzdCAqLwotICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlWzBdLCBETlNfVFlQRV9BLAotICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ET0hdLAorICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNF0sCisgICAgICAgICAgICAgICAgICAgICAgRE5TX1RZUEVfQSwgaG9zdG5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0RPSF0sCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bXVsdGksIGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBlcnJvcjsKQEAgLTM2OSw4ICs0MTAsOCBAQAogCiAgIGlmKGNvbm4tPmlwX3ZlcnNpb24gIT0gQ1VSTF9JUFJFU09MVkVfVjQpIHsKICAgICAvKiBjcmVhdGUgSVB2NiBET0ggcmVxdWVzdCAqLwotICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlWzFdLCBETlNfVFlQRV9BQUFBLAotICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ET0hdLAorICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNl0sCisgICAgICAgICAgICAgICAgICAgICAgRE5TX1RZUEVfQUFBQSwgaG9zdG5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0RPSF0sCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bXVsdGksIGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBlcnJvcjsKQEAgLTM4MSwxNCArNDIyLDEzIEBACiAgIGVycm9yOgogICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CiAgIGRhdGEtPnJlcS5kb2guaGVhZGVycyA9IE5VTEw7Ci0gIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSk7Ci0gIGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSA9IE5VTEw7Ci0gIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSk7Ci0gIGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSA9IE5VTEw7CisgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgQ3VybF9jbG9zZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XS5lYXN5KTsKKyAgfQogICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIERPSGNvZGUgc2tpcHFuYW1lKHVuc2lnbmVkIGNoYXIgKmRvaCwgc2l6ZV90IGRvaGxlbiwKK3N0YXRpYyBET0hjb2RlIHNraXBxbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpkb2gsIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICppbmRleHApCiB7CiAgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoOwpAQCAtNDEyLDE4ICs0NTIsMjQgQEAKICAgcmV0dXJuIERPSF9PSzsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldDE2Yml0KHVuc2lnbmVkIGNoYXIgKmRvaCwgaW50IGluZGV4KQorc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldDE2Yml0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvaCwgaW50IGluZGV4KQogewogICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgoZG9oW2luZGV4XSA8PCA4KSB8IGRvaFtpbmRleCArIDFdKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXQzMmJpdCh1bnNpZ25lZCBjaGFyICpkb2gsIGludCBpbmRleCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0MzJiaXQoY29uc3QgdW5zaWduZWQgY2hhciAqZG9oLCBpbnQgaW5kZXgpCiB7Ci0gIHJldHVybiAoZG9oW2luZGV4XSA8PCAyNCkgfCAoZG9oW2luZGV4ICsgMV0gPDwgMTYpIHwKLSAgICAoZG9oW2luZGV4ICsgMl0gPDwgOCkgfCBkb2hbaW5kZXggKyAzXTsKKyAgIC8qIG1ha2UgY2xhbmcgYW5kIGdjYyBvcHRpbWl6ZSB0aGlzIHRvIGJzd2FwIGJ5IGluY3JlbWVudGluZworICAgICAgdGhlIHBvaW50ZXIgZmlyc3QuICovCisgICBkb2ggKz0gaW5kZXg7CisKKyAgIC8qIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvdXIgYnkgY2FzdGluZyB0byB1bnNpZ25lZCBiZWZvcmUgc2hpZnRpbmcKKyAgICAgIDI0IGJpdHMsIHBvc3NpYmx5IGludG8gdGhlIHNpZ24gYml0LiBjb2RlZ2VuIGlzIHNhbWUsIGJ1dAorICAgICAgdWIgc2FuaXRpemVyIHdvbid0IGJlIHVwc2V0ICovCisgIHJldHVybiAoICh1bnNpZ25lZClkb2hbMF0gPDwgMjQpIHwgKGRvaFsxXSA8PCAxNikgfChkb2hbMl0gPDwgOCkgfCBkb2hbM107CiB9CiAKLXN0YXRpYyBET0hjb2RlIHN0b3JlX2EodW5zaWduZWQgY2hhciAqZG9oLCBpbnQgaW5kZXgsIHN0cnVjdCBkb2hlbnRyeSAqZCkKK3N0YXRpYyBET0hjb2RlIHN0b3JlX2EoY29uc3QgdW5zaWduZWQgY2hhciAqZG9oLCBpbnQgaW5kZXgsIHN0cnVjdCBkb2hlbnRyeSAqZCkKIHsKICAgLyogc2lsZW50bHkgaWdub3JlIGFkZHJlc3NlcyBvdmVyIHRoZSBsaW1pdCAqLwogICBpZihkLT5udW1hZGRyIDwgRE9IX01BWF9BRERSKSB7CkBAIC00MzUsNyArNDgxLDkgQEAKICAgcmV0dXJuIERPSF9PSzsKIH0KIAotc3RhdGljIERPSGNvZGUgc3RvcmVfYWFhYSh1bnNpZ25lZCBjaGFyICpkb2gsIGludCBpbmRleCwgc3RydWN0IGRvaGVudHJ5ICpkKQorc3RhdGljIERPSGNvZGUgc3RvcmVfYWFhYShjb25zdCB1bnNpZ25lZCBjaGFyICpkb2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRvaGVudHJ5ICpkKQogewogICAvKiBzaWxlbnRseSBpZ25vcmUgYWRkcmVzc2VzIG92ZXIgdGhlIGxpbWl0ICovCiAgIGlmKGQtPm51bWFkZHIgPCBET0hfTUFYX0FERFIpIHsKQEAgLTQ0NywzOCArNDk1LDEyIEBACiAgIHJldHVybiBET0hfT0s7CiB9CiAKLXN0YXRpYyBET0hjb2RlIGNuYW1lYXBwZW5kKHN0cnVjdCBjbmFtZXN0b3JlICpjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKLXsKLSAgaWYoIWMtPmFsbG9jKSB7Ci0gICAgYy0+YWxsb2NzaXplID0gbGVuICsgMTsKLSAgICBjLT5hbGxvYyA9IG1hbGxvYyhjLT5hbGxvY3NpemUpOwotICAgIGlmKCFjLT5hbGxvYykKLSAgICAgIHJldHVybiBET0hfT1VUX09GX01FTTsKLSAgfQotICBlbHNlIGlmKGMtPmFsbG9jc2l6ZSA8IChjLT5hbGxvY3NpemUgKyBsZW4gKyAxKSkgewotICAgIGNoYXIgKnB0cjsKLSAgICBjLT5hbGxvY3NpemUgKz0gbGVuICsgMTsKLSAgICBwdHIgPSByZWFsbG9jKGMtPmFsbG9jLCBjLT5hbGxvY3NpemUpOwotICAgIGlmKCFwdHIpIHsKLSAgICAgIGZyZWUoYy0+YWxsb2MpOwotICAgICAgcmV0dXJuIERPSF9PVVRfT0ZfTUVNOwotICAgIH0KLSAgICBjLT5hbGxvYyA9IHB0cjsKLSAgfQotICBtZW1jcHkoJmMtPmFsbG9jW2MtPmxlbl0sIHNyYywgbGVuKTsKLSAgYy0+bGVuICs9IGxlbjsKLSAgYy0+YWxsb2NbYy0+bGVuXSA9IDA7IC8qIGtlZXAgaXQgemVybyB0ZXJtaW5hdGVkICovCi0gIHJldHVybiBET0hfT0s7Ci19Ci0KLXN0YXRpYyBET0hjb2RlIHN0b3JlX2NuYW1lKHVuc2lnbmVkIGNoYXIgKmRvaCwKK3N0YXRpYyBET0hjb2RlIHN0b3JlX2NuYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG9oZW50cnkgKmQpCiB7Ci0gIHN0cnVjdCBjbmFtZXN0b3JlICpjOworICBzdHJ1Y3QgZHluYnVmICpjOwogICB1bnNpZ25lZCBpbnQgbG9vcCA9IDEyODsgLyogYSB2YWxpZCBETlMgbmFtZSBjYW4gbmV2ZXIgbG9vcCB0aGlzIG11Y2ggKi8KICAgdW5zaWduZWQgY2hhciBsZW5ndGg7CiAKQEAgLTQ5Niw3ICs1MTgsNyBAQAogICAgICAgaWYoKGluZGV4ICsgMSkgPj0gZG9obGVuKQogICAgICAgICByZXR1cm4gRE9IX0ROU19PVVRfT0ZfUkFOR0U7CiAKLSAgICAgIC8qIG1vdmUgdG8gdGhlIHRoZSBuZXcgaW5kZXggKi8KKyAgICAgIC8qIG1vdmUgdG8gdGhlIG5ldyBpbmRleCAqLwogICAgICAgbmV3cG9zID0gKGxlbmd0aCAmIDB4M2YpIDw8IDggfCBkb2hbaW5kZXggKyAxXTsKICAgICAgIGluZGV4ID0gbmV3cG9zOwogICAgICAgY29udGludWU7CkBAIC01MDcsMTggKzUyOSwxNSBAQAogICAgICAgaW5kZXgrKzsKIAogICAgIGlmKGxlbmd0aCkgewotICAgICAgRE9IY29kZSByYzsKLSAgICAgIGlmKGMtPmxlbikgewotICAgICAgICByYyA9IGNuYW1lYXBwZW5kKGMsICh1bnNpZ25lZCBjaGFyICopIi4iLCAxKTsKLSAgICAgICAgaWYocmMpCi0gICAgICAgICAgcmV0dXJuIHJjOworICAgICAgaWYoQ3VybF9keW5fbGVuKGMpKSB7CisgICAgICAgIGlmKEN1cmxfZHluX2FkZChjLCAiLiIpKQorICAgICAgICAgIHJldHVybiBET0hfT1VUX09GX01FTTsKICAgICAgIH0KICAgICAgIGlmKChpbmRleCArIGxlbmd0aCkgPiBkb2hsZW4pCiAgICAgICAgIHJldHVybiBET0hfRE5TX0JBRF9MQUJFTDsKIAotICAgICAgcmMgPSBjbmFtZWFwcGVuZChjLCAmZG9oW2luZGV4XSwgbGVuZ3RoKTsKLSAgICAgIGlmKHJjKQotICAgICAgICByZXR1cm4gcmM7CisgICAgICBpZihDdXJsX2R5bl9hZGRuKGMsICZkb2hbaW5kZXhdLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gRE9IX09VVF9PRl9NRU07CiAgICAgICBpbmRleCArPSBsZW5ndGg7CiAgICAgfQogICB9IHdoaWxlKGxlbmd0aCAmJiAtLWxvb3ApOwpAQCAtNTI4LDcgKzU0Nyw3IEBACiAgIHJldHVybiBET0hfT0s7CiB9CiAKLXN0YXRpYyBET0hjb2RlIHJkYXRhKHVuc2lnbmVkIGNoYXIgKmRvaCwKK3N0YXRpYyBET0hjb2RlIHJkYXRhKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvaCwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCkBAIC01NjEsNiArNTgwLDkgQEAKICAgICBpZihyYykKICAgICAgIHJldHVybiByYzsKICAgICBicmVhazsKKyAgY2FzZSBETlNfVFlQRV9ETkFNRToKKyAgICAvKiBleHBsaWNpdCBmb3IgY2xhcml0eTsganVzdCBza2lwOyByZWx5IG9uIHN5bnRoZXNpemVkIENOQU1FICAqLworICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIC8qIHVuc3VwcG9ydGVkIHR5cGUsIGp1c3Qgc2tpcCBpdCAqLwogICAgIGJyZWFrOwpAQCAtNTY4LDE0ICs1OTAsMTcgQEAKICAgcmV0dXJuIERPSF9PSzsKIH0KIAotc3RhdGljIHZvaWQgaW5pdF9kb2hlbnRyeShzdHJ1Y3QgZG9oZW50cnkgKmRlKQorVU5JVFRFU1Qgdm9pZCBkZV9pbml0KHN0cnVjdCBkb2hlbnRyeSAqZGUpCiB7CisgIGludCBpOwogICBtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpKTsKICAgZGUtPnR0bCA9IElOVF9NQVg7CisgIGZvcihpID0gMDsgaSA8IERPSF9NQVhfQ05BTUU7IGkrKykKKyAgICBDdXJsX2R5bl9pbml0KCZkZS0+Y25hbWVbaV0sIERZTl9ET0hfQ05BTUUpOwogfQogCiAKLVVOSVRURVNUIERPSGNvZGUgZG9oX2RlY29kZSh1bnNpZ25lZCBjaGFyICpkb2gsCitVTklUVEVTVCBET0hjb2RlIGRvaF9kZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqZG9oLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE5TdHlwZSBkbnN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb2hlbnRyeSAqZCkKQEAgLTYyMiw4ICs2NDcsMTAgQEAKICAgICAgIHJldHVybiBET0hfRE5TX09VVF9PRl9SQU5HRTsKIAogICAgIHR5cGUgPSBnZXQxNmJpdChkb2gsIGluZGV4KTsKLSAgICBpZigodHlwZSAhPSBETlNfVFlQRV9DTkFNRSkgJiYgKHR5cGUgIT0gZG5zdHlwZSkpCi0gICAgICAvKiBOb3QgdGhlIHNhbWUgdHlwZSBhcyB3YXMgYXNrZWQgZm9yIG5vciBDTkFNRSAqLworICAgIGlmKCh0eXBlICE9IEROU19UWVBFX0NOQU1FKSAgICAvKiBtYXkgYmUgc3ludGhlc2l6ZWQgZnJvbSBETkFNRSAqLworICAgICAgICYmICh0eXBlICE9IEROU19UWVBFX0ROQU1FKSAvKiBpZiBwcmVzZW50LCBhY2NlcHQgYW5kIGlnbm9yZSAqLworICAgICAgICYmICh0eXBlICE9IGRuc3R5cGUpKQorICAgICAgLyogTm90IHRoZSBzYW1lIHR5cGUgYXMgd2FzIGFza2VkIGZvciBub3IgQ05BTUUgbm9yIEROQU1FICovCiAgICAgICByZXR1cm4gRE9IX0ROU19VTkVYUEVDVEVEX1RZUEU7CiAgICAgaW5kZXggKz0gMjsKIApAQCAtNzEzLDEyICs3NDAsMTIgQEAKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiBzdGF0aWMgdm9pZCBzaG93ZG9oKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb2hlbnRyeSAqZCkKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRvaGVudHJ5ICpkKQogewogICBpbnQgaTsKICAgaW5mb2YoZGF0YSwgIlRUTDogJXUgc2Vjb25kc1xuIiwgZC0+dHRsKTsKICAgZm9yKGkgPSAwOyBpIDwgZC0+bnVtYWRkcjsgaSsrKSB7Ci0gICAgc3RydWN0IGRvaGFkZHIgKmEgPSAmZC0+YWRkcltpXTsKKyAgICBjb25zdCBzdHJ1Y3QgZG9oYWRkciAqYSA9ICZkLT5hZGRyW2ldOwogICAgIGlmKGEtPnR5cGUgPT0gRE5TX1RZUEVfQSkgewogICAgICAgaW5mb2YoZGF0YSwgIkRPSCBBOiAldS4ldS4ldS4ldVxuIiwKICAgICAgICAgICAgIGEtPmlwLnY0WzBdLCBhLT5pcC52NFsxXSwKQEAgLTc0NCw3ICs3NzEsNyBAQAogICAgIH0KICAgfQogICBmb3IoaSA9IDA7IGkgPCBkLT5udW1jbmFtZTsgaSsrKSB7Ci0gICAgaW5mb2YoZGF0YSwgIkNOQU1FOiAlc1xuIiwgZC0+Y25hbWVbaV0uYWxsb2MpOworICAgIGluZm9mKGRhdGEsICJDTkFNRTogJXNcbiIsIEN1cmxfZHluX3B0cigmZC0+Y25hbWVbaV0pKTsKICAgfQogfQogI2Vsc2UKQEAgLTc2NCwxOCArNzkxLDE5IEBACiAgKiBtdXN0IGJlIGFuIGFzc29jaWF0ZWQgY2FsbCBsYXRlciB0byBDdXJsX2ZyZWVhZGRyaW5mbygpLgogICovCiAKLXN0YXRpYyBDdXJsX2FkZHJpbmZvICoKK3N0YXRpYyBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqCiBkb2gyYWkoY29uc3Qgc3RydWN0IGRvaGVudHJ5ICpkZSwgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KQogewotICBDdXJsX2FkZHJpbmZvICphaTsKLSAgQ3VybF9hZGRyaW5mbyAqcHJldmFpID0gTlVMTDsKLSAgQ3VybF9hZGRyaW5mbyAqZmlyc3RhaSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaTsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKnByZXZhaSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpmaXJzdGFpID0gTlVMTDsKICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyOwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2OwogI2VuZGlmCiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBpbnQgaTsKKyAgc2l6ZV90IGhvc3RsZW4gPSBzdHJsZW4oaG9zdG5hbWUpICsgMTsgLyogaW5jbHVkZSB6ZXJvIHRlcm1pbmF0b3IgKi8KIAogICBpZighZGUpCiAgICAgLyogbm8gaW5wdXQgPT0gbm8gb3V0cHV0ISAqLwpAQCAtNzk4LDI0ICs4MjYsMTQgQEAKICAgICAgIGFkZHJ0eXBlID0gQUZfSU5FVDsKICAgICB9CiAKLSAgICBhaSA9IGNhbGxvYygxLCBzaXplb2YoQ3VybF9hZGRyaW5mbykpOworICAgIGFpID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykgKyBzc19zaXplICsgaG9zdGxlbik7CiAgICAgaWYoIWFpKSB7CiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFpLT5haV9jYW5vbm5hbWUgPSBzdHJkdXAoaG9zdG5hbWUpOwotICAgIGlmKCFhaS0+YWlfY2Fub25uYW1lKSB7Ci0gICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgZnJlZShhaSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgYWktPmFpX2FkZHIgPSBjYWxsb2MoMSwgc3Nfc2l6ZSk7Ci0gICAgaWYoIWFpLT5haV9hZGRyKSB7Ci0gICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgZnJlZShhaS0+YWlfY2Fub25uYW1lKTsKLSAgICAgIGZyZWUoYWkpOwotICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGFpLT5haV9hZGRyID0gKHZvaWQgKikoKGNoYXIgKilhaSArIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykpOworICAgIGFpLT5haV9jYW5vbm5hbWUgPSAodm9pZCAqKSgoY2hhciAqKWFpLT5haV9hZGRyICsgc3Nfc2l6ZSk7CisgICAgbWVtY3B5KGFpLT5haV9jYW5vbm5hbWUsIGhvc3RuYW1lLCBob3N0bGVuKTsKIAogICAgIGlmKCFmaXJzdGFpKQogICAgICAgLyogc3RvcmUgdGhlIHBvaW50ZXIgd2Ugd2FudCB0byByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uICovCkBAIC04NzcsNTQgKzg5NSw1NCBAQAogewogICBpbnQgaSA9IDA7CiAgIGZvcihpID0gMDsgaSA8IGQtPm51bWNuYW1lOyBpKyspIHsKLSAgICBmcmVlKGQtPmNuYW1lW2ldLmFsbG9jKTsKKyAgICBDdXJsX2R5bl9mcmVlKCZkLT5jbmFtZVtpXSk7CiAgIH0KIH0KIAogQ1VSTGNvZGUgQ3VybF9kb2hfaXNfcmVzb2x2ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zcCkKIHsKKyAgQ1VSTGNvZGUgcmVzdWx0OwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgKmRuc3AgPSBOVUxMOyAvKiBkZWZhdWx0cyB0byBubyByZXNwb25zZSAqLwogCi0gIGlmKCFkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmVhc3kgJiYgIWRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSkgeworICBpZighZGF0YS0+cmVxLmRvaC5wcm9iZVtET0hfUFJPQkVfU0xPVF9JUEFERFJfVjRdLmVhc3kgJiYKKyAgICAgIWRhdGEtPnJlcS5kb2gucHJvYmVbRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y2XS5lYXN5KSB7CiAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBET0gtcmVzb2x2ZTogJXMiLCBjb25uLT5hc3luYy5ob3N0bmFtZSk7CiAgICAgcmV0dXJuIGNvbm4tPmJpdHMucHJveHk/Q1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOgogICAgICAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CiAgIH0KICAgZWxzZSBpZighZGF0YS0+cmVxLmRvaC5wZW5kaW5nKSB7Ci0gICAgRE9IY29kZSByYzsKLSAgICBET0hjb2RlIHJjMjsKKyAgICBET0hjb2RlIHJjW0RPSF9QUk9CRV9TTE9UU10gPSB7CisgICAgICBET0hfT0ssIERPSF9PSworICAgIH07CiAgICAgc3RydWN0IGRvaGVudHJ5IGRlOworICAgIGludCBzbG90OwogICAgIC8qIHJlbW92ZSBET0ggaGFuZGxlcyBmcm9tIG11bHRpIGhhbmRsZSBhbmQgY2xvc2UgdGhlbSAqLwotICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShkYXRhLT5tdWx0aSwgZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5lYXN5KTsKLSAgICBDdXJsX2Nsb3NlKGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSk7Ci0gICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGRhdGEtPm11bHRpLCBkYXRhLT5yZXEuZG9oLnByb2JlWzFdLmVhc3kpOwotICAgIEN1cmxfY2xvc2UoZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5lYXN5KTsKLQorICAgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoZGF0YS0+bXVsdGksIGRhdGEtPnJlcS5kb2gucHJvYmVbc2xvdF0uZWFzeSk7CisgICAgICBDdXJsX2Nsb3NlKCZkYXRhLT5yZXEuZG9oLnByb2JlW3Nsb3RdLmVhc3kpOworICAgIH0KICAgICAvKiBwYXJzZSB0aGUgcmVzcG9uc2VzLCBjcmVhdGUgdGhlIHN0cnVjdCBhbmQgcmV0dXJuIGl0ISAqLwotICAgIGluaXRfZG9oZW50cnkoJmRlKTsKLSAgICByYyA9IGRvaF9kZWNvZGUoZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5zZXJ2ZXJkb2gubWVtb3J5LAotICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZXEuZG9oLnByb2JlWzBdLnNlcnZlcmRvaC5zaXplLAotICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmRuc3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICZkZSk7Ci0gICAgZnJlZShkYXRhLT5yZXEuZG9oLnByb2JlWzBdLnNlcnZlcmRvaC5tZW1vcnkpOwotICAgIGlmKHJjKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiRE9IOiAlcyB0eXBlICVzIGZvciAlc1xuIiwgZG9oX3N0cmVycm9yKHJjKSwKLSAgICAgICAgICAgIHR5cGUybmFtZShkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmRuc3R5cGUpLAotICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5ob3N0KTsKLSAgICB9Ci0gICAgcmMyID0gZG9oX2RlY29kZShkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaC5tZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaC5zaXplLAotICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5kbnN0eXBlLAotICAgICAgICAgICAgICAgICAgICAgJmRlKTsKLSAgICBmcmVlKGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uc2VydmVyZG9oLm1lbW9yeSk7Ci0gICAgaWYocmMyKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiRE9IOiAlcyB0eXBlICVzIGZvciAlc1xuIiwgZG9oX3N0cmVycm9yKHJjMiksCi0gICAgICAgICAgICB0eXBlMm5hbWUoZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5kbnN0eXBlKSwKLSAgICAgICAgICAgIGRhdGEtPnJlcS5kb2guaG9zdCk7Ci0gICAgfQotICAgIGlmKCFyYyB8fCAhcmMyKSB7CisgICAgZGVfaW5pdCgmZGUpOworICAgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgICBzdHJ1Y3QgZG5zcHJvYmUgKnAgPSAmZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XTsKKyAgICAgIGlmKCFwLT5kbnN0eXBlKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIHJjW3Nsb3RdID0gZG9oX2RlY29kZShDdXJsX2R5bl91cHRyKCZwLT5zZXJ2ZXJkb2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmcC0+c2VydmVyZG9oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5kbnN0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZSk7CisgICAgICBDdXJsX2R5bl9mcmVlKCZwLT5zZXJ2ZXJkb2gpOworICAgICAgaWYocmNbc2xvdF0pIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkRPSDogJXMgdHlwZSAlcyBmb3IgJXNcbiIsIGRvaF9zdHJlcnJvcihyY1tzbG90XSksCisgICAgICAgICAgICAgIHR5cGUybmFtZShwLT5kbnN0eXBlKSwgZGF0YS0+cmVxLmRvaC5ob3N0KTsKKyAgICAgIH0KKyAgICB9IC8qIG5leHQgc2xvdCAqLworCisgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7IC8qIHVudGlsIHdlIGtub3cgYmV0dGVyICovCisgICAgaWYoIXJjW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNF0gfHwgIXJjW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNl0pIHsKKyAgICAgIC8qIHdlIGhhdmUgYW4gYWRkcmVzcywgb2Ygb25lIGtpbmQgb3Igb3RoZXIgKi8KICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOwogICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpOwogCkBAIC05NDYsMjEgKzk2NCwyNiBAQAogICAgICAgaWYoZGF0YS0+c2hhcmUpCiAgICAgICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUyk7CiAKLSAgICAgIGRlX2NsZWFudXAoJmRlKTsKLSAgICAgIGlmKCFkbnMpCisgICAgICBpZighZG5zKSB7CiAgICAgICAgIC8qIHJldHVybmVkIGZhaWx1cmUsIGJhaWwgb3V0IG5pY2VseSAqLwogICAgICAgICBDdXJsX2ZyZWVhZGRyaW5mbyhhaSk7CisgICAgICB9CiAgICAgICBlbHNlIHsKICAgICAgICAgY29ubi0+YXN5bmMuZG5zID0gZG5zOwogICAgICAgICAqZG5zcCA9IGRuczsKLSAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgICByZXN1bHQgPSBDVVJMRV9PSzsgICAgICAvKiBhZGRyZXNzIHJlc29sdXRpb24gT0sgKi8KICAgICAgIH0KLSAgICB9CisgICAgfSAvKiBhZGRyZXNzIHByb2Nlc3NpbmcgZG9uZSAqLworCisgICAgLyogTm93IHByb2Nlc3MgYW55IGJ1aWxkLXNwZWNpZmljIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gRE5TICovCisKKyAgICAvKiBBbGwgZG9uZSAqLwogICAgIGRlX2NsZWFudXAoJmRlKTsKKyAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwotICB9CisgIH0gLyogIWRhdGEtPnJlcS5kb2gucGVuZGluZyAqLwogCisgIC8qIGVsc2Ugd2FpdCBmb3IgcGVuZGluZyBET0ggdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlICovCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG9oLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guaAppbmRleCAzNGJmYTZmLi5iYmQ0YzFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzIsMTYgKzMyLDE1IEBACiAgKiBhbmQgcmV0dXJucyBhICdDdXJsX2FkZHJpbmZvIConIHdpdGggdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24uCiAgKi8KIAotQ3VybF9hZGRyaW5mbyAqQ3VybF9kb2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfZG9oKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKTsKIAogQ1VSTGNvZGUgQ3VybF9kb2hfaXNfcmVzb2x2ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKTsKIAotaW50IEN1cmxfZG9oX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitpbnQgQ3VybF9kb2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogdHlwZWRlZiBlbnVtIHsKICAgRE9IX09LLApAQCAtNTYsMjUgKzU1LDIxIEBACiAgIERPSF9ETlNfVU5FWFBFQ1RFRF9UWVBFLCAgLyogOSAqLwogICBET0hfRE5TX1VORVhQRUNURURfQ0xBU1MsIC8qIDEwICovCiAgIERPSF9OT19DT05URU5ULCAgICAgICAgICAgLyogMTEgKi8KLSAgRE9IX0ROU19CQURfSUQgICAgICAgICAgICAvKiAxMiAqLworICBET0hfRE5TX0JBRF9JRCwgICAgICAgICAgIC8qIDEyICovCisgIERPSF9ETlNfTkFNRV9UT09fTE9ORyAgICAgLyogMTMgKi8KIH0gRE9IY29kZTsKIAogdHlwZWRlZiBlbnVtIHsKICAgRE5TX1RZUEVfQSA9IDEsCiAgIEROU19UWVBFX05TID0gMiwKICAgRE5TX1RZUEVfQ05BTUUgPSA1LAotICBETlNfVFlQRV9BQUFBID0gMjgKKyAgRE5TX1RZUEVfQUFBQSA9IDI4LAorICBETlNfVFlQRV9ETkFNRSA9IDM5ICAgICAgICAgICAvKiBSRkM2NjcyICovCiB9IEROU3R5cGU7CiAKICNkZWZpbmUgRE9IX01BWF9BRERSIDI0CiAjZGVmaW5lIERPSF9NQVhfQ05BTUUgNAogCi1zdHJ1Y3QgY25hbWVzdG9yZSB7Ci0gIHNpemVfdCBsZW47ICAgICAgIC8qIGxlbmd0aCBvZiBjbmFtZSAqLwotICBjaGFyICphbGxvYzsgICAgICAvKiBhbGxvY2F0ZWQgcG9pbnRlciAqLwotICBzaXplX3QgYWxsb2NzaXplOyAvKiBhbGxvY2F0ZWQgc2l6ZSAqLwotfTsKLQogc3RydWN0IGRvaGFkZHIgewogICBpbnQgdHlwZTsKICAgdW5pb24gewpAQCAtODQsMTEgKzc5LDExIEBACiB9OwogCiBzdHJ1Y3QgZG9oZW50cnkgewotICB1bnNpZ25lZCBpbnQgdHRsOwotICBpbnQgbnVtYWRkcjsKKyAgc3RydWN0IGR5bmJ1ZiBjbmFtZVtET0hfTUFYX0NOQU1FXTsKICAgc3RydWN0IGRvaGFkZHIgYWRkcltET0hfTUFYX0FERFJdOworICBpbnQgbnVtYWRkcjsKKyAgdW5zaWduZWQgaW50IHR0bDsKICAgaW50IG51bWNuYW1lOwotICBzdHJ1Y3QgY25hbWVzdG9yZSBjbmFtZVtET0hfTUFYX0NOQU1FXTsKIH07CiAKIApAQCAtOTgsMTAgKzkzLDExIEBACiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZG5zcCwgLyogYnVmZmVyICovCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgIC8qIGJ1ZmZlciBzaXplICovCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuKTsgLyogb3V0cHV0IGxlbmd0aCAqLwotRE9IY29kZSBkb2hfZGVjb2RlKHVuc2lnbmVkIGNoYXIgKmRvaCwKK0RPSGNvZGUgZG9oX2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpkb2gsCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRvaGxlbiwKICAgICAgICAgICAgICAgICAgICBETlN0eXBlIGRuc3R5cGUsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRvaGVudHJ5ICpkKTsKK3ZvaWQgZGVfaW5pdChzdHJ1Y3QgZG9oZW50cnkgKmQpOwogdm9pZCBkZV9jbGVhbnVwKHN0cnVjdCBkb2hlbnRyeSAqZCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG90ZG90LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYwppbmRleCAyYzYxNzdhLi5jZTlhMDUyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzksNyArMzksNyBAQAogICogQ3VybF9kZWRvdGRvdGlmeSgpCiAgKiBAdW5pdHRlc3Q6IDEzOTUKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgYSB6ZXJvLXRlcm1pbmF0ZWQgcGF0aCB3aXRoIGRvdCBhbmQgZG90ZG90IHNlcXVlbmNlcworICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgbnVsbC10ZXJtaW5hdGVkIHBhdGggd2l0aCBkb3QgYW5kIGRvdGRvdCBzZXF1ZW5jZXMKICAqIHBhc3NlZCBpbiBhbmQgc3RyaXBzIHRoZW0gb2ZmIGFjY29yZGluZyB0byB0aGUgcnVsZXMgaW4gUkZDIDM5ODYgc2VjdGlvbgogICogNS4yLjQuCiAgKgpAQCAtNjIsNyArNjIsNyBAQAogICBpZighb3V0KQogICAgIHJldHVybiBOVUxMOyAvKiBvdXQgb2YgbWVtb3J5ICovCiAKLSAgKm91dCA9IDA7IC8qIHplcm8gdGVybWluYXRlcywgZm9yIGlucHV0cyBsaWtlICIuLyIgKi8KKyAgKm91dCA9IDA7IC8qIG51bGwtdGVybWluYXRlcywgZm9yIGlucHV0cyBsaWtlICIuLyIgKi8KIAogICAvKiBnZXQgYSBjbG9uZWQgY29weSBvZiB0aGUgaW5wdXQgKi8KICAgY2xvbmUgPSBzdHJkdXAoaW5wdXQpOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIGlmKCpvdXRwdHIgPT0gJy8nKQogICAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgKm91dHB0ciA9IDA7IC8qIHplcm8tdGVybWluYXRlIHdoZXJlIGl0IHN0b3BzICovCisgICAgICAqb3V0cHRyID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgd2hlcmUgaXQgc3RvcHMgKi8KICAgICB9CiAgICAgZWxzZSBpZighc3RyY21wKCIvLi4iLCBjbG9uZSkpIHsKICAgICAgIGNsb25lWzJdPScvJzsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBpZigqb3V0cHRyID09ICcvJykKICAgICAgICAgICBicmVhazsKICAgICAgIH0KLSAgICAgICpvdXRwdHIgPSAwOyAvKiB6ZXJvLXRlcm1pbmF0ZSB3aGVyZSBpdCBzdG9wcyAqLworICAgICAgKm91dHB0ciA9IDA7IC8qIG51bGwtdGVybWluYXRlIHdoZXJlIGl0IHN0b3BzICovCiAgICAgfQogCiAgICAgLyogIEQuICBpZiB0aGUgaW5wdXQgYnVmZmVyIGNvbnNpc3RzIG9ubHkgb2YgIi4iIG9yICIuLiIsIHRoZW4gcmVtb3ZlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvdGRvdC5oCmluZGV4IDEyNWFmNDMuLmY3MGIxZGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvdGRvdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvdGRvdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9keW5idWYuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2R5bmJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDM3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9keW5idWYuYwpAQCAtMCwwICsxLDIyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAiZHluYnVmLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBNSU5fRklSU1RfQUxMT0MgMzIKKworI2RlZmluZSBEWU5JTklUIDB4YmVlNTFkYSAvKiByYW5kb20gcGF0dGVybiAqLworCisvKgorICogSW5pdCBhIGR5bmJ1ZiBzdHJ1Y3QuCisgKi8KK3ZvaWQgQ3VybF9keW5faW5pdChzdHJ1Y3QgZHluYnVmICpzLCBzaXplX3QgdG9vYmlnKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQodG9vYmlnKTsKKyAgcy0+YnVmciA9IE5VTEw7CisgIHMtPmxlbmcgPSAwOworICBzLT5hbGxjID0gMDsKKyAgcy0+dG9vYmlnID0gdG9vYmlnOworI2lmZGVmIERFQlVHQlVJTEQKKyAgcy0+aW5pdCA9IERZTklOSVQ7CisjZW5kaWYKK30KKworLyoKKyAqIGZyZWUgdGhlIGJ1ZmZlciBhbmQgcmUtaW5pdCB0aGUgbmVjZXNzYXJ5IGZpZWxkcy4gSXQgZG9lc24ndCB0b3VjaCB0aGUKKyAqICdpbml0JyBmaWVsZCBhbmQgdGh1cyB0aGlzIGJ1ZmZlciBjYW4gYmUgcmV1c2VkIHRvIGFkZCBkYXRhIHRvIGFnYWluLgorICovCit2b2lkIEN1cmxfZHluX2ZyZWUoc3RydWN0IGR5bmJ1ZiAqcykKK3sKKyAgREVCVUdBU1NFUlQocyk7CisgIEN1cmxfc2FmZWZyZWUocy0+YnVmcik7CisgIHMtPmxlbmcgPSBzLT5hbGxjID0gMDsKK30KKworLyoKKyAqIFN0b3JlL2FwcGVuZCBhbiBjaHVuayBvZiBtZW1vcnkgdG8gdGhlIGR5bmJ1Zi4KKyAqLworc3RhdGljIENVUkxjb2RlIGR5bl9uYXBwZW5kKHN0cnVjdCBkeW5idWYgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWVtLCBzaXplX3QgbGVuKQoreworICBzaXplX3QgaW5keCA9IHMtPmxlbmc7CisgIHNpemVfdCBhID0gcy0+YWxsYzsKKyAgc2l6ZV90IGZpdCA9IGxlbiArIGluZHggKyAxOyAvKiBuZXcgc3RyaW5nICsgb2xkIHN0cmluZyArIHplcm8gYnl0ZSAqLworCisgIC8qIHRyeSB0byBkZXRlY3QgaWYgdGhlcmUncyBydWJiaXNoIGluIHRoZSBzdHJ1Y3QgKi8KKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQocy0+dG9vYmlnKTsKKyAgREVCVUdBU1NFUlQoaW5keCA8IHMtPnRvb2JpZyk7CisgIERFQlVHQVNTRVJUKCFzLT5sZW5nIHx8IHMtPmJ1ZnIpOworCisgIGlmKGZpdCA+IHMtPnRvb2JpZykgeworICAgIEN1cmxfZHluX2ZyZWUocyk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKyAgZWxzZSBpZighYSkgeworICAgIERFQlVHQVNTRVJUKCFpbmR4KTsKKyAgICAvKiBmaXJzdCBpbnZva2UgKi8KKyAgICBpZihmaXQgPCBNSU5fRklSU1RfQUxMT0MpCisgICAgICBhID0gTUlOX0ZJUlNUX0FMTE9DOworICAgIGVsc2UKKyAgICAgIGEgPSBmaXQ7CisgIH0KKyAgZWxzZSB7CisgICAgd2hpbGUoYSA8IGZpdCkKKyAgICAgIGEgKj0gMjsKKyAgfQorCisgIGlmKGEgIT0gcy0+YWxsYykgeworICAgIHMtPmJ1ZnIgPSBDdXJsX3NhZmVyZWFsbG9jKHMtPmJ1ZnIsIGEpOworICAgIGlmKCFzLT5idWZyKSB7CisgICAgICBzLT5sZW5nID0gcy0+YWxsYyA9IDA7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgcy0+YWxsYyA9IGE7CisgIH0KKworICBpZihsZW4pCisgICAgbWVtY3B5KCZzLT5idWZyW2luZHhdLCBtZW0sIGxlbik7CisgIHMtPmxlbmcgPSBpbmR4ICsgbGVuOworICBzLT5idWZyW3MtPmxlbmddID0gMDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ2xlYXJzIHRoZSBzdHJpbmcsIGtlZXBzIHRoZSBhbGxvY2F0aW9uLiBUaGlzIGNhbiBhbHNvIGJlIGNhbGxlZCBvbiBhCisgKiBidWZmZXIgdGhhdCBhbHJlYWR5IHdhcyBmcmVlZC4KKyAqLwordm9pZCBDdXJsX2R5bl9yZXNldChzdHJ1Y3QgZHluYnVmICpzKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQoIXMtPmxlbmcgfHwgcy0+YnVmcik7CisgIGlmKHMtPmxlbmcpCisgICAgcy0+YnVmclswXSA9IDA7CisgIHMtPmxlbmcgPSAwOworfQorCisjaWZkZWYgVVNFX05HVENQMgorLyoKKyAqIFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIHRhaWwgdG8ga2VlcCAobnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiB0aGUKKyAqIGJ1ZmZlcikuIFRoZSByZXN0IHdpbGwgYmUgZHJvcHBlZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9keW5fdGFpbChzdHJ1Y3QgZHluYnVmICpzLCBzaXplX3QgdHJhaWwpCit7CisgIERFQlVHQVNTRVJUKHMpOworICBERUJVR0FTU0VSVChzLT5pbml0ID09IERZTklOSVQpOworICBERUJVR0FTU0VSVCghcy0+bGVuZyB8fCBzLT5idWZyKTsKKyAgaWYodHJhaWwgPiBzLT5sZW5nKQorICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIGVsc2UgaWYodHJhaWwgPT0gcy0+bGVuZykKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGVsc2UgaWYoIXRyYWlsKSB7CisgICAgQ3VybF9keW5fcmVzZXQocyk7CisgIH0KKyAgZWxzZSB7CisgICAgbWVtbW92ZSgmcy0+YnVmclswXSwgJnMtPmJ1ZnJbcy0+bGVuZyAtIHRyYWlsXSwgdHJhaWwpOworICAgIHMtPmxlbmcgPSB0cmFpbDsKKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7CisKK30KKyNlbmRpZgorCisvKgorICogQXBwZW5kcyBhIGJ1ZmZlciB3aXRoIGxlbmd0aC4KKyAqLworQ1VSTGNvZGUgQ3VybF9keW5fYWRkbihzdHJ1Y3QgZHluYnVmICpzLCBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pCit7CisgIERFQlVHQVNTRVJUKHMpOworICBERUJVR0FTU0VSVChzLT5pbml0ID09IERZTklOSVQpOworICBERUJVR0FTU0VSVCghcy0+bGVuZyB8fCBzLT5idWZyKTsKKyAgcmV0dXJuIGR5bl9uYXBwZW5kKHMsIG1lbSwgbGVuKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgYXQgdGhlIGVuZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9keW5fYWRkKHN0cnVjdCBkeW5idWYgKnMsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgc2l6ZV90IG4gPSBzdHJsZW4oc3RyKTsKKyAgREVCVUdBU1NFUlQocyk7CisgIERFQlVHQVNTRVJUKHMtPmluaXQgPT0gRFlOSU5JVCk7CisgIERFQlVHQVNTRVJUKCFzLT5sZW5nIHx8IHMtPmJ1ZnIpOworICByZXR1cm4gZHluX25hcHBlbmQocywgKHVuc2lnbmVkIGNoYXIgKilzdHIsIG4pOworfQorCisvKgorICogQXBwZW5kIGEgc3RyaW5nIHByaW50ZigpLXN0eWxlCisgKi8KK0NVUkxjb2RlIEN1cmxfZHluX2FkZGYoc3RydWN0IGR5bmJ1ZiAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIGNoYXIgKnN0cjsKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIHN0ciA9IHZhcHJpbnRmKGZtdCwgYXApOyAvKiB0aGlzIGFsbG9jcyBhIG5ldyBzdHJpbmcgdG8gYXBwZW5kICovCisgIHZhX2VuZChhcCk7CisKKyAgaWYoc3RyKSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gZHluX25hcHBlbmQocywgKHVuc2lnbmVkIGNoYXIgKilzdHIsIHN0cmxlbihzdHIpKTsKKyAgICBmcmVlKHN0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICAvKiBJZiB3ZSBmYWlsZWQsIHdlIGNsZWFudXAgdGhlIHdob2xlIGJ1ZmZlciBhbmQgcmV0dXJuIGVycm9yICovCisgIEN1cmxfZHluX2ZyZWUocyk7CisgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworfQorCisvKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLworY2hhciAqQ3VybF9keW5fcHRyKGNvbnN0IHN0cnVjdCBkeW5idWYgKnMpCit7CisgIERFQlVHQVNTRVJUKHMpOworICBERUJVR0FTU0VSVChzLT5pbml0ID09IERZTklOSVQpOworICBERUJVR0FTU0VSVCghcy0+bGVuZyB8fCBzLT5idWZyKTsKKyAgcmV0dXJuIHMtPmJ1ZnI7Cit9CisKKy8qCisgKiBSZXR1cm5zIGFuIHVuc2lnbmVkIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLwordW5zaWduZWQgY2hhciAqQ3VybF9keW5fdXB0cihjb25zdCBzdHJ1Y3QgZHluYnVmICpzKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQoIXMtPmxlbmcgfHwgcy0+YnVmcik7CisgIHJldHVybiAodW5zaWduZWQgY2hhciAqKXMtPmJ1ZnI7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4KKyAqLworc2l6ZV90IEN1cmxfZHluX2xlbihjb25zdCBzdHJ1Y3QgZHluYnVmICpzKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQoIXMtPmxlbmcgfHwgcy0+YnVmcik7CisgIHJldHVybiBzLT5sZW5nOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZHluYnVmLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9keW5idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODAyMzllCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZHluYnVmLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9EWU5CVUZfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9EWU5CVUZfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBkeW5idWYgeworICBjaGFyICpidWZyOyAgICAvKiBwb2ludCB0byBhIG51bGwtdGVybWluYXRlZCBhbGxvY2F0ZWQgYnVmZmVyICovCisgIHNpemVfdCBsZW5nOyAgIC8qIG51bWJlciBvZiBieXRlcyAqRVhDTFVESU5HKiB0aGUgemVybyB0ZXJtaW5hdG9yICovCisgIHNpemVfdCBhbGxjOyAgIC8qIHNpemUgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiAqLworICBzaXplX3QgdG9vYmlnOyAvKiBzaXplIGxpbWl0IGZvciB0aGUgYnVmZmVyICovCisjaWZkZWYgREVCVUdCVUlMRAorICBpbnQgaW5pdDsgICAgIC8qIGRldGVjdCBBUEkgdXNhZ2UgbWlzdGFrZXMgKi8KKyNlbmRpZgorfTsKKwordm9pZCBDdXJsX2R5bl9pbml0KHN0cnVjdCBkeW5idWYgKnMsIHNpemVfdCB0b29iaWcpOwordm9pZCBDdXJsX2R5bl9mcmVlKHN0cnVjdCBkeW5idWYgKnMpOworQ1VSTGNvZGUgQ3VybF9keW5fYWRkbihzdHJ1Y3QgZHluYnVmICpzLCBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pCisgIFdBUk5fVU5VU0VEX1JFU1VMVDsKK0NVUkxjb2RlIEN1cmxfZHluX2FkZChzdHJ1Y3QgZHluYnVmICpzLCBjb25zdCBjaGFyICpzdHIpCisgIFdBUk5fVU5VU0VEX1JFU1VMVDsKK0NVUkxjb2RlIEN1cmxfZHluX2FkZGYoc3RydWN0IGR5bmJ1ZiAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCisgIFdBUk5fVU5VU0VEX1JFU1VMVDsKK3ZvaWQgQ3VybF9keW5fcmVzZXQoc3RydWN0IGR5bmJ1ZiAqcyk7CitDVVJMY29kZSBDdXJsX2R5bl90YWlsKHN0cnVjdCBkeW5idWYgKnMsIHNpemVfdCB0cmFpbCk7CitjaGFyICpDdXJsX2R5bl9wdHIoY29uc3Qgc3RydWN0IGR5bmJ1ZiAqcyk7Cit1bnNpZ25lZCBjaGFyICpDdXJsX2R5bl91cHRyKGNvbnN0IHN0cnVjdCBkeW5idWYgKnMpOworc2l6ZV90IEN1cmxfZHluX2xlbihjb25zdCBzdHJ1Y3QgZHluYnVmICpzKTsKKworLyogRHluYW1pYyBidWZmZXIgbWF4IHNpemVzICovCisjZGVmaW5lIERZTl9ET0hfUkVTUE9OU0UgICAgMzAwMAorI2RlZmluZSBEWU5fRE9IX0NOQU1FICAgICAgIDI1NgorI2RlZmluZSBEWU5fUEFVU0VfQlVGRkVSICAgICg2NCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBEWU5fSEFYUFJPWFkgICAgICAgIDIwNDgKKyNkZWZpbmUgRFlOX0hUVFBfUkVRVUVTVCAgICAoMTI4KjEwMjQpCisjZGVmaW5lIERZTl9IMl9IRUFERVJTICAgICAgKDEyOCoxMDI0KQorI2RlZmluZSBEWU5fSDJfVFJBSUxFUiAgICAgIDQwOTYKKyNkZWZpbmUgRFlOX0FQUklOVEYgICAgICAgICA4MDAwMDAwCisjZGVmaW5lIERZTl9SVFNQX1JFUV9IRUFERVIgKDY0KjEwMjQpCisjZGVmaW5lIERZTl9UUkFJTEVSUyAgICAgICAgKDY0KjEwMjQpCisjZGVmaW5lIERZTl9QUk9YWV9DT05ORUNUX0hFQURFUlMgMTYzODQKKyNkZWZpbmUgRFlOX1FMT0dfTkFNRSAgICAgICAxMDI0CisjZGVmaW5lIERZTl9IMV9UUkFJTEVSICAgICAgRFlOX0gyX1RSQUlMRVIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeS5jCmluZGV4IDRhNmY5NjUuLjI5MmNjYTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Vhc3kuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDE4ICs3MiwxOCBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInNpZ3BpcGUuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgogI2luY2x1ZGUgInNldG9wdC5oIgogI2luY2x1ZGUgImh0dHBfZGlnZXN0LmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCisjaW5jbHVkZSAiaHR0cDIuaCIKKyNpbmNsdWRlICJkeW5idWYuaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCi12b2lkIEN1cmxfdmVyc2lvbl9pbml0KHZvaWQpOwotCiAvKiB0cnVlIGdsb2JhbHMgLS0gZm9yIGN1cmxfZ2xvYmFsX2luaXQoKSBhbmQgY3VybF9nbG9iYWxfY2xlYW51cCgpICovCiBzdGF0aWMgdW5zaWduZWQgaW50ICBpbml0aWFsaXplZDsKIHN0YXRpYyBsb25nICAgICAgICAgIGluaXRfZmxhZ3M7CkBAIC0xNTcsMjAgKzE1NywyMCBAQAogCiAgIGlmKCFDdXJsX3NzbF9pbml0KCkpIHsKICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ3VybF9zc2xfaW5pdCBmYWlsZWRcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byBmYWlsOwogICB9CiAKICNpZmRlZiBXSU4zMgogICBpZihDdXJsX3dpbjMyX2luaXQoZmxhZ3MpKSB7CiAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHdpbjMyX2luaXQgZmFpbGVkXG4iKSk7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gZmFpbDsKICAgfQogI2VuZGlmCiAKICNpZmRlZiBfX0FNSUdBX18KICAgaWYoIUN1cmxfYW1pZ2FfaW5pdCgpKSB7CiAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEN1cmxfYW1pZ2FfaW5pdCBmYWlsZWRcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byBmYWlsOwogICB9CiAjZW5kaWYKIApAQCAtMTgyLDMzICsxODIsMjkgQEAKIAogICBpZihDdXJsX3Jlc29sdmVyX2dsb2JhbF9pbml0KCkpIHsKICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogcmVzb2x2ZXJfZ2xvYmFsX2luaXQgZmFpbGVkXG4iKSk7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gZmFpbDsKICAgfQogCi0gICh2b2lkKUN1cmxfaXB2NndvcmtzKCk7Ci0KLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NIMl9JTklUKQotICBpZihsaWJzc2gyX2luaXQoMCkpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoMl9pbml0IGZhaWxlZFxuIikpOwotICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyNpZiBkZWZpbmVkKFVTRV9TU0gpCisgIGlmKEN1cmxfc3NoX2luaXQoKSkgeworICAgIGdvdG8gZmFpbDsKICAgfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCi0gIGlmKHNzaF9pbml0KCkpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoX2luaXQgZmFpbGVkXG4iKSk7CisjaWZkZWYgVVNFX1dPTEZTU0gKKyAgaWYoV1NfU1VDQ0VTUyAhPSB3b2xmU1NIX0luaXQoKSkgeworICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiB3b2xmU1NIX0luaXQgZmFpbGVkXG4iKSk7CiAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwogICB9CiAjZW5kaWYKIAotICBpZihmbGFncyAmIENVUkxfR0xPQkFMX0FDS19FSU5UUikKLSAgICBDdXJsX2Fja19laW50ciA9IDE7Ci0KICAgaW5pdF9mbGFncyA9IGZsYWdzOwogCi0gIEN1cmxfdmVyc2lvbl9pbml0KCk7Ci0KICAgcmV0dXJuIENVUkxFX09LOworCisgIGZhaWw6CisgIGluaXRpYWxpemVkLS07IC8qIHVuZG8gdGhlIGluY3JlYXNlICovCisgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKIH0KIAogCkBAIC0yNzQsMTIgKzI3MCwxMCBAQAogCiAgIEN1cmxfYW1pZ2FfY2xlYW51cCgpOwogCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIMikgJiYgZGVmaW5lZChIQVZFX0xJQlNTSDJfRVhJVCkKLSAgKHZvaWQpbGlic3NoMl9leGl0KCk7Ci0jZW5kaWYKKyAgQ3VybF9zc2hfY2xlYW51cCgpOwogCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIKQotICAodm9pZClzc2hfZmluYWxpemUoKTsKKyNpZmRlZiBVU0VfV09MRlNTSAorICAodm9pZCl3b2xmU1NIX0NsZWFudXAoKTsKICNlbmRpZgogCiAgIGluaXRfZmxhZ3MgID0gMDsKQEAgLTUxNiw3ICs1MTAsNyBAQAogICAgIGJlZm9yZSA9IEN1cmxfbm93KCk7CiAKICAgICAvKiB3YWl0IGZvciBhY3Rpdml0eSBvciB0aW1lb3V0ICovCi0gICAgcG9sbHJjID0gQ3VybF9wb2xsKGZkcywgbnVtZmRzLCAoaW50KWV2LT5tcyk7CisgICAgcG9sbHJjID0gQ3VybF9wb2xsKGZkcywgbnVtZmRzLCBldi0+bXMpOwogCiAgICAgYWZ0ZXIgPSBDdXJsX25vdygpOwogCkBAIC02MDIsMjcgKzU5NiwxMSBAQAogCiAgIHdoaWxlKCFkb25lICYmICFtY29kZSkgewogICAgIGludCBzdGlsbF9ydW5uaW5nID0gMDsKLSAgICBib29sIGdvdHNvY2tldCA9IEZBTFNFOwogCi0gICAgbWNvZGUgPSBDdXJsX211bHRpX3dhaXQobXVsdGksIE5VTEwsIDAsIDEwMDAsIE5VTEwsICZnb3Rzb2NrZXQpOworICAgIG1jb2RlID0gY3VybF9tdWx0aV9wb2xsKG11bHRpLCBOVUxMLCAwLCAxMDAwLCBOVUxMKTsKIAotICAgIGlmKCFtY29kZSkgewotICAgICAgaWYoIWdvdHNvY2tldCkgewotICAgICAgICBsb25nIHNsZWVwX21zOwotCi0gICAgICAgIC8qIElmIGl0IHJldHVybnMgd2l0aG91dCBhbnkgZmlsZWRlc2NyaXB0b3IgaW5zdGFudGx5LCB3ZSBuZWVkIHRvCi0gICAgICAgICAgIGF2b2lkIGJ1c3ktbG9vcGluZyBkdXJpbmcgcGVyaW9kcyB3aGVyZSBpdCBoYXMgbm90aGluZyBwYXJ0aWN1bGFyCi0gICAgICAgICAgIHRvIHdhaXQgZm9yICovCi0gICAgICAgIGN1cmxfbXVsdGlfdGltZW91dChtdWx0aSwgJnNsZWVwX21zKTsKLSAgICAgICAgaWYoc2xlZXBfbXMpIHsKLSAgICAgICAgICBpZihzbGVlcF9tcyA+IDEwMDApCi0gICAgICAgICAgICBzbGVlcF9tcyA9IDEwMDA7Ci0gICAgICAgICAgQ3VybF93YWl0X21zKChpbnQpc2xlZXBfbXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0KKyAgICBpZighbWNvZGUpCiAgICAgICBtY29kZSA9IGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aSwgJnN0aWxsX3J1bm5pbmcpOwotICAgIH0KIAogICAgIC8qIG9ubHkgcmVhZCAnc3RpbGxfcnVubmluZycgaWYgY3VybF9tdWx0aV9wZXJmb3JtKCkgcmV0dXJuIE9LICovCiAgICAgaWYoIW1jb2RlICYmICFzdGlsbF9ydW5uaW5nKSB7CkBAIC03MDMsNiArNjgxLDcgQEAKICAgbWNvZGUgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUobXVsdGksIGRhdGEpOwogICBpZihtY29kZSkgewogICAgIGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aSk7CisgICAgZGF0YS0+bXVsdGlfZWFzeSA9IE5VTEw7CiAgICAgaWYobWNvZGUgPT0gQ1VSTE1fT1VUX09GX01FTU9SWSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKQEAgLTcxMCwxMCArNjg5LDYgQEAKIAogICBzaWdwaXBlX2lnbm9yZShkYXRhLCAmcGlwZV9zdCk7CiAKLSAgLyogYXNzaWduIHRoaXMgYWZ0ZXIgY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkgc2luY2UgdGhhdCBmdW5jdGlvbiBjaGVja3MgZm9yCi0gICAgIGl0IGFuZCByZWplY3RzIHRoaXMgaGFuZGxlIG90aGVyd2lzZSAqLwotICBkYXRhLT5tdWx0aSA9IG11bHRpOwotCiAgIC8qIHJ1biB0aGUgdHJhbnNmZXIgKi8KICAgcmVzdWx0ID0gZXZlbnRzID8gZWFzeV9ldmVudHMobXVsdGkpIDogZWFzeV90cmFuc2ZlcihtdWx0aSk7CiAKQEAgLTc2MSw3ICs3MzYsNyBAQAogICAgIHJldHVybjsKIAogICBzaWdwaXBlX2lnbm9yZShkYXRhLCAmcGlwZV9zdCk7Ci0gIEN1cmxfY2xvc2UoZGF0YSk7CisgIEN1cmxfY2xvc2UoJmRhdGEpOwogICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwogfQogCkBAIC03ODksNiArNzY0LDcgQEAKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIGVudW0gZHVwc3RyaW5nIGk7CisgIGVudW0gZHVwYmxvYiBqOwogCiAgIC8qIENvcHkgc3JjLT5zZXQgaW50byBkc3QtPnNldCBmaXJzdCwgdGhlbiBkZWFsIHdpdGggdGhlIHN0cmluZ3MKICAgICAgYWZ0ZXJ3YXJkcyAqLwpAQCAtODA1LDYgKzc4MSwxNiBAQAogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCisgIC8qIGNsZWFyIGFsbCBibG9iIHBvaW50ZXJzIGZpcnN0ICovCisgIG1lbXNldChkc3QtPnNldC5ibG9icywgMCwgQkxPQl9MQVNUICogc2l6ZW9mKHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAvKiBkdXBsaWNhdGUgYWxsIGJsb2JzICovCisgIGZvcihqID0gKGVudW0gZHVwYmxvYikwOyBqIDwgQkxPQl9MQVNUOyBqKyspIHsKKyAgICByZXN1bHQgPSBDdXJsX3NldGJsb2JvcHQoJmRzdC0+c2V0LmJsb2JzW2pdLCBzcmMtPnNldC5ibG9ic1tqXSk7CisgICAgLyogQ3VybF9zZXRzdHJvcHQgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVCB3aXRoIGJsb2IgKi8KKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKICAgLyogZHVwbGljYXRlIG1lbW9yeSBhcmVhcyBwb2ludGVkIHRvICovCiAgIGkgPSBTVFJJTkdfQ09QWVBPU1RGSUVMRFM7CiAgIGlmKHNyYy0+c2V0LnBvc3RmaWVsZHNpemUgJiYgc3JjLT5zZXQuc3RyW2ldKSB7CkBAIC04NDMsMTkgKzgyOSwxMyBAQAogICAgKiB0aGUgbGlrZWxpbmVzcyBvZiB1cyBmb3JnZXR0aW5nIHRvIGluaXQgYSBidWZmZXIgaGVyZSBpbiB0aGUgZnV0dXJlLgogICAgKi8KICAgb3V0Y3VybC0+c2V0LmJ1ZmZlcl9zaXplID0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOwotICBvdXRjdXJsLT5zdGF0ZS5idWZmZXIgPSBtYWxsb2Mob3V0Y3VybC0+c2V0LmJ1ZmZlcl9zaXplICsgMSk7Ci0gIGlmKCFvdXRjdXJsLT5zdGF0ZS5idWZmZXIpCi0gICAgZ290byBmYWlsOwotCi0gIG91dGN1cmwtPnN0YXRlLmhlYWRlcmJ1ZmYgPSBtYWxsb2MoSEVBREVSU0laRSk7Ci0gIGlmKCFvdXRjdXJsLT5zdGF0ZS5oZWFkZXJidWZmKQotICAgIGdvdG8gZmFpbDsKLSAgb3V0Y3VybC0+c3RhdGUuaGVhZGVyc2l6ZSA9IEhFQURFUlNJWkU7CiAKICAgLyogY29weSBhbGwgdXNlcmRlZmluZWQgdmFsdWVzICovCiAgIGlmKGR1cHNldChvdXRjdXJsLCBkYXRhKSkKICAgICBnb3RvIGZhaWw7CiAKKyAgQ3VybF9keW5faW5pdCgmb3V0Y3VybC0+c3RhdGUuaGVhZGVyYiwgQ1VSTF9NQVhfSFRUUF9IRUFERVIpOworCiAgIC8qIHRoZSBjb25uZWN0aW9uIGNhY2hlIGlzIHNldHVwIG9uIGRlbWFuZCAqLwogICBvdXRjdXJsLT5zdGF0ZS5jb25uX2NhY2hlID0gTlVMTDsKIApAQCAtOTEwLDYgKzg5MCwyOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXNvbHZlcikpCiAgICAgZ290byBmYWlsOwogCisjaWZkZWYgVVNFX0FSRVMKKyAgeworICAgIENVUkxjb2RlIHJjOworCisgICAgcmMgPSBDdXJsX3NldF9kbnNfc2VydmVycyhvdXRjdXJsLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfU0VSVkVSU10pOworICAgIGlmKHJjICYmIHJjICE9IENVUkxFX05PVF9CVUlMVF9JTikKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIHJjID0gQ3VybF9zZXRfZG5zX2ludGVyZmFjZShvdXRjdXJsLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfSU5URVJGQUNFXSk7CisgICAgaWYocmMgJiYgcmMgIT0gQ1VSTEVfTk9UX0JVSUxUX0lOKQorICAgICAgZ290byBmYWlsOworCisgICAgcmMgPSBDdXJsX3NldF9kbnNfbG9jYWxfaXA0KG91dGN1cmwsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0ROU19MT0NBTF9JUDRdKTsKKyAgICBpZihyYyAmJiByYyAhPSBDVVJMRV9OT1RfQlVJTFRfSU4pCisgICAgICBnb3RvIGZhaWw7CisKKyAgICByYyA9IEN1cmxfc2V0X2Ruc19sb2NhbF9pcDYob3V0Y3VybCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX0xPQ0FMX0lQNl0pOworICAgIGlmKHJjICYmIHJjICE9IENVUkxFX05PVF9CVUlMVF9JTikKKyAgICAgIGdvdG8gZmFpbDsKKyAgfQorI2VuZGlmIC8qIFVTRV9BUkVTICovCisKICAgQ3VybF9jb252ZXJ0X3NldHVwKG91dGN1cmwpOwogCiAgIEN1cmxfaW5pdGluZm8ob3V0Y3VybCk7CkBAIC05MjYsNyArOTI4LDcgQEAKICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKG91dGN1cmwtPmNoYW5nZS5jb29raWVsaXN0KTsKICAgICBvdXRjdXJsLT5jaGFuZ2UuY29va2llbGlzdCA9IE5VTEw7CiAgICAgQ3VybF9zYWZlZnJlZShvdXRjdXJsLT5zdGF0ZS5idWZmZXIpOwotICAgIEN1cmxfc2FmZWZyZWUob3V0Y3VybC0+c3RhdGUuaGVhZGVyYnVmZik7CisgICAgQ3VybF9keW5fZnJlZSgmb3V0Y3VybC0+c3RhdGUuaGVhZGVyYik7CiAgICAgQ3VybF9zYWZlZnJlZShvdXRjdXJsLT5jaGFuZ2UudXJsKTsKICAgICBDdXJsX3NhZmVmcmVlKG91dGN1cmwtPmNoYW5nZS5yZWZlcmVyKTsKICAgICBDdXJsX2ZyZWVzZXQob3V0Y3VybCk7CkBAIC05ODIsNjggKzk4NCwxMDEgQEAKICAqLwogQ1VSTGNvZGUgY3VybF9lYXN5X3BhdXNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBhY3Rpb24pCiB7Ci0gIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKms7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBpbnQgb2xkc3RhdGU7CisgIGludCBuZXdzdGF0ZTsKIAotICAvKiBmaXJzdCBzd2l0Y2ggb2ZmIGJvdGggcGF1c2UgYml0cyAqLwotICBpbnQgbmV3c3RhdGUgPSBrLT5rZWVwb24gJn4gKEtFRVBfUkVDVl9QQVVTRXwgS0VFUF9TRU5EX1BBVVNFKTsKKyAgaWYoIUdPT0RfRUFTWV9IQU5ETEUoZGF0YSkgfHwgIWRhdGEtPmNvbm4pCisgICAgLyogY3JhenkgaW5wdXQsIGRvbid0IGNvbnRpbnVlICovCisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKIAotICAvKiBzZXQgdGhlIG5ldyBkZXNpcmVkIHBhdXNlIGJpdHMgKi8KLSAgbmV3c3RhdGUgfD0gKChhY3Rpb24gJiBDVVJMUEFVU0VfUkVDVik/S0VFUF9SRUNWX1BBVVNFOjApIHwKKyAgayA9ICZkYXRhLT5yZXE7CisgIG9sZHN0YXRlID0gay0+a2VlcG9uICYgKEtFRVBfUkVDVl9QQVVTRXwgS0VFUF9TRU5EX1BBVVNFKTsKKworICAvKiBmaXJzdCBzd2l0Y2ggb2ZmIGJvdGggcGF1c2UgYml0cyB0aGVuIHNldCB0aGUgbmV3IHBhdXNlIGJpdHMgKi8KKyAgbmV3c3RhdGUgPSAoay0+a2VlcG9uICZ+IChLRUVQX1JFQ1ZfUEFVU0V8IEtFRVBfU0VORF9QQVVTRSkpIHwKKyAgICAoKGFjdGlvbiAmIENVUkxQQVVTRV9SRUNWKT9LRUVQX1JFQ1ZfUEFVU0U6MCkgfAogICAgICgoYWN0aW9uICYgQ1VSTFBBVVNFX1NFTkQpP0tFRVBfU0VORF9QQVVTRTowKTsKIAorICBpZigobmV3c3RhdGUgJiAoS0VFUF9SRUNWX1BBVVNFfCBLRUVQX1NFTkRfUEFVU0UpKSA9PSBvbGRzdGF0ZSkgeworICAgIC8qIE5vdCBjaGFuZ2luZyBhbnkgcGF1c2Ugc3RhdGUsIHJldHVybiAqLworICAgIERFQlVHRihpbmZvZihkYXRhLCAicGF1c2U6IG5vIGNoYW5nZSwgZWFybHkgcmV0dXJuXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgLyogVW5wYXVzZSBwYXJ0cyBpbiBhY3RpdmUgbWltZSB0cmVlLiAqLworICBpZigoay0+a2VlcG9uICYgfm5ld3N0YXRlICYgS0VFUF9TRU5EX1BBVVNFKSAmJgorICAgICAoZGF0YS0+bXN0YXRlID09IENVUkxNX1NUQVRFX1BFUkZPUk0gfHwKKyAgICAgIGRhdGEtPm1zdGF0ZSA9PSBDVVJMTV9TVEFURV9UT09GQVNUKSAmJgorICAgICBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jID09IChjdXJsX3JlYWRfY2FsbGJhY2spIEN1cmxfbWltZV9yZWFkKSB7CisgICAgQ3VybF9taW1lX3VucGF1c2UoZGF0YS0+c3RhdGUuaW4pOworICB9CisKICAgLyogcHV0IGl0IGJhY2sgaW4gdGhlIGtlZXBvbiAqLwogICBrLT5rZWVwb24gPSBuZXdzdGF0ZTsKIAotICBpZighKG5ld3N0YXRlICYgS0VFUF9SRUNWX1BBVVNFKSAmJiBkYXRhLT5zdGF0ZS50ZW1wY291bnQpIHsKLSAgICAvKiB0aGVyZSBhcmUgYnVmZmVycyBmb3Igc2VuZGluZyB0aGF0IGNhbiBiZSBkZWxpdmVyZWQgYXMgdGhlIHJlY2VpdmUKLSAgICAgICBwYXVzaW5nIGlzIGxpZnRlZCEgKi8KLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBkYXRhLT5zdGF0ZS50ZW1wY291bnQ7Ci0gICAgc3RydWN0IHRlbXBidWYgd3JpdGVidWZbM107IC8qIHRoZXJlIGNhbiBvbmx5IGJlIHRocmVlICovCi0gICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gZGF0YS0+Y29ubjsKLSAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpzYXZlZF9kYXRhID0gTlVMTDsKKyAgaWYoIShuZXdzdGF0ZSAmIEtFRVBfUkVDVl9QQVVTRSkpIHsKKyAgICBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShkYXRhLCBGQUxTRSk7CiAKLSAgICAvKiBjb3B5IHRoZSBzdHJ1Y3RzIHRvIGFsbG93IGZvciBpbW1lZGlhdGUgcmUtcGF1c2luZyAqLwotICAgIGZvcihpID0gMDsgaSA8IGRhdGEtPnN0YXRlLnRlbXBjb3VudDsgaSsrKSB7Ci0gICAgICB3cml0ZWJ1ZltpXSA9IGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXTsKLSAgICAgIGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXS5idWYgPSBOVUxMOworICAgIGlmKGRhdGEtPnN0YXRlLnRlbXBjb3VudCkgeworICAgICAgLyogdGhlcmUgYXJlIGJ1ZmZlcnMgZm9yIHNlbmRpbmcgdGhhdCBjYW4gYmUgZGVsaXZlcmVkIGFzIHRoZSByZWNlaXZlCisgICAgICAgICBwYXVzaW5nIGlzIGxpZnRlZCEgKi8KKyAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gZGF0YS0+c3RhdGUudGVtcGNvdW50OworICAgICAgc3RydWN0IHRlbXBidWYgd3JpdGVidWZbM107IC8qIHRoZXJlIGNhbiBvbmx5IGJlIHRocmVlICovCisgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBkYXRhLT5jb25uOworICAgICAgc3RydWN0IEN1cmxfZWFzeSAqc2F2ZWRfZGF0YSA9IE5VTEw7CisKKyAgICAgIC8qIGNvcHkgdGhlIHN0cnVjdHMgdG8gYWxsb3cgZm9yIGltbWVkaWF0ZSByZS1wYXVzaW5nICovCisgICAgICBmb3IoaSA9IDA7IGkgPCBkYXRhLT5zdGF0ZS50ZW1wY291bnQ7IGkrKykgeworICAgICAgICB3cml0ZWJ1ZltpXSA9IGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXTsKKyAgICAgICAgQ3VybF9keW5faW5pdCgmZGF0YS0+c3RhdGUudGVtcHdyaXRlW2ldLmIsIERZTl9QQVVTRV9CVUZGRVIpOworICAgICAgfQorICAgICAgZGF0YS0+c3RhdGUudGVtcGNvdW50ID0gMDsKKworICAgICAgLyogc2V0IHRoZSBjb25uZWN0aW9uJ3MgY3VycmVudCBvd25lciAqLworICAgICAgaWYoY29ubi0+ZGF0YSAhPSBkYXRhKSB7CisgICAgICAgIHNhdmVkX2RhdGEgPSBjb25uLT5kYXRhOworICAgICAgICBjb25uLT5kYXRhID0gZGF0YTsKKyAgICAgIH0KKworICAgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAvKiBldmVuIGlmIG9uZSBmdW5jdGlvbiByZXR1cm5zIGVycm9yLCB0aGlzIGxvb3BzIHRocm91Z2ggYW5kIGZyZWVzCisgICAgICAgICAgIGFsbCBidWZmZXJzICovCisgICAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgd3JpdGVidWZbaV0udHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9wdHIoJndyaXRlYnVmW2ldLmIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmd3JpdGVidWZbaV0uYikpOworICAgICAgICBDdXJsX2R5bl9mcmVlKCZ3cml0ZWJ1ZltpXS5iKTsKKyAgICAgIH0KKworICAgICAgLyogcmVjb3ZlciBwcmV2aW91cyBvd25lciBvZiB0aGUgY29ubmVjdGlvbiAqLworICAgICAgaWYoc2F2ZWRfZGF0YSkKKyAgICAgICAgY29ubi0+ZGF0YSA9IHNhdmVkX2RhdGE7CisKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgZGF0YS0+c3RhdGUudGVtcGNvdW50ID0gMDsKLQotICAgIC8qIHNldCB0aGUgY29ubmVjdGlvbidzIGN1cnJlbnQgb3duZXIgKi8KLSAgICBpZihjb25uLT5kYXRhICE9IGRhdGEpIHsKLSAgICAgIHNhdmVkX2RhdGEgPSBjb25uLT5kYXRhOwotICAgICAgY29ubi0+ZGF0YSA9IGRhdGE7Ci0gICAgfQotCi0gICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgLyogZXZlbiBpZiBvbmUgZnVuY3Rpb24gcmV0dXJucyBlcnJvciwgdGhpcyBsb29wcyB0aHJvdWdoIGFuZCBmcmVlcyBhbGwKLSAgICAgICAgIGJ1ZmZlcnMgKi8KLSAgICAgIGlmKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIHdyaXRlYnVmW2ldLnR5cGUsIHdyaXRlYnVmW2ldLmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVidWZbaV0ubGVuKTsKLSAgICAgIGZyZWUod3JpdGVidWZbaV0uYnVmKTsKLSAgICB9Ci0KLSAgICAvKiByZWNvdmVyIHByZXZpb3VzIG93bmVyIG9mIHRoZSBjb25uZWN0aW9uICovCi0gICAgaWYoc2F2ZWRfZGF0YSkKLSAgICAgIGNvbm4tPmRhdGEgPSBzYXZlZF9kYXRhOwotCi0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCiAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IgYW5kIHdlJ3JlIG5vdCBwYXVzaW5nIGJvdGggZGlyZWN0aW9ucywgd2Ugd2FudAogICAgICB0byBoYXZlIHRoaXMgaGFuZGxlIGNoZWNrZWQgc29vbiAqLwotICBpZighcmVzdWx0ICYmCi0gICAgICgobmV3c3RhdGUmKEtFRVBfUkVDVl9QQVVTRXxLRUVQX1NFTkRfUEFVU0UpKSAhPQotICAgICAgKEtFRVBfUkVDVl9QQVVTRXxLRUVQX1NFTkRfUEFVU0UpKSApCisgIGlmKChuZXdzdGF0ZSAmIChLRUVQX1JFQ1ZfUEFVU0V8S0VFUF9TRU5EX1BBVVNFKSkgIT0KKyAgICAgKEtFRVBfUkVDVl9QQVVTRXxLRUVQX1NFTkRfUEFVU0UpKSB7CiAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOyAvKiBnZXQgdGhpcyBoYW5kbGUgZ29pbmcgYWdhaW4gKi8KIAotICAvKiBUaGlzIHRyYW5zZmVyIG1heSBoYXZlIGJlZW4gbW92ZWQgaW4gb3Igb3V0IG9mIHRoZSBidW5kbGUsIHVwZGF0ZQotICAgICB0aGUgY29ycmVzcG9uZGluZyBzb2NrZXQgY2FsbGJhY2ssIGlmIHVzZWQgKi8KLSAgQ3VybF91cGRhdGVzb2NrZXQoZGF0YSk7CisgICAgLyogZm9yY2UgYSByZWN2L3NlbmQgY2hlY2sgb2YgdGhpcyBjb25uZWN0aW9uLCBhcyB0aGUgZGF0YSBtaWdodCd2ZSBiZWVuCisgICAgICAgcmVhZCBvZmYgdGhlIHNvY2tldCBhbHJlYWR5ICovCisgICAgZGF0YS0+Y29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOIHwgQ1VSTF9DU0VMRUNUX09VVDsKKyAgICBpZihkYXRhLT5tdWx0aSkKKyAgICAgIEN1cmxfdXBkYXRlX3RpbWVyKGRhdGEtPm11bHRpKTsKKyAgfQorCisgIGlmKCFkYXRhLT5zdGF0ZS5kb25lKQorICAgIC8qIFRoaXMgdHJhbnNmZXIgbWF5IGhhdmUgYmVlbiBtb3ZlZCBpbiBvciBvdXQgb2YgdGhlIGJ1bmRsZSwgdXBkYXRlIHRoZQorICAgICAgIGNvcnJlc3BvbmRpbmcgc29ja2V0IGNhbGxiYWNrLCBpZiB1c2VkICovCisgICAgQ3VybF91cGRhdGVzb2NrZXQoZGF0YSk7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExMzgsNiArMTE3MywzNSBAQAogfQogCiAvKgorICogV3JhcHBlciB0byBjYWxsIGZ1bmN0aW9ucyBpbiBDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKCkKKyAqCisgKiBSZXR1cm5zIGFsd2F5cyAwLgorICovCitzdGF0aWMgaW50IGNvbm5fdXBrZWVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0pCit7CisgIC8qIFBhcmFtIGlzIHVudXNlZC4gKi8KKyAgKHZvaWQpcGFyYW07CisKKyAgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjaykgeworICAgIC8qIERvIGEgcHJvdG9jb2wtc3BlY2lmaWMga2VlcGFsaXZlIGNoZWNrIG9uIHRoZSBjb25uZWN0aW9uLiAqLworICAgIGNvbm4tPmhhbmRsZXItPmNvbm5lY3Rpb25fY2hlY2soY29ubiwgQ09OTkNIRUNLX0tFRVBBTElWRSk7CisgIH0KKworICByZXR1cm4gMDsgLyogY29udGludWUgaXRlcmF0aW9uICovCit9CisKK3N0YXRpYyBDVVJMY29kZSB1cGtlZXAoc3RydWN0IGNvbm5jYWNoZSAqY29ubl9jYWNoZSwgdm9pZCAqZGF0YSkKK3sKKyAgLyogTG9vcCBvdmVyIGV2ZXJ5IGNvbm5lY3Rpb24gYW5kIG1ha2UgY29ubmVjdGlvbiBhbGl2ZS4gKi8KKyAgQ3VybF9jb25uY2FjaGVfZm9yZWFjaChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5fY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25uX3Vwa2VlcCk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKICAqIFBlcmZvcm1zIGNvbm5lY3Rpb24gdXBrZWVwIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiBoYW5kbGUuCiAgKi8KIENVUkxjb2RlIGN1cmxfZWFzeV91cGtlZXAoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKQEAgLTExNDgsNyArMTIxMiw3IEBACiAKICAgaWYoZGF0YS0+bXVsdGlfZWFzeSkgewogICAgIC8qIFVzZSB0aGUgY29tbW9uIGZ1bmN0aW9uIHRvIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUuICovCi0gICAgcmV0dXJuIEN1cmxfdXBrZWVwKCZkYXRhLT5tdWx0aV9lYXN5LT5jb25uX2NhY2hlLCBkYXRhKTsKKyAgICByZXR1cm4gdXBrZWVwKCZkYXRhLT5tdWx0aV9lYXN5LT5jb25uX2NhY2hlLCBkYXRhKTsKICAgfQogICBlbHNlIHsKICAgICAvKiBObyBjb25uZWN0aW9ucywgc28ganVzdCByZXR1cm4gc3VjY2VzcyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeWlmLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5aWYuaAppbmRleCA2YmE3ZTU0Li5lZGEwZDYyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5aWYuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5aWYuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lc2NhcGUuYwppbmRleCA3MTIxZGIzLi4yYmVhMTQ1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9lc2NhcGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lc2NhcGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzksODIgKzc5LDgzIEBACiBjaGFyICpjdXJsX2Vhc3lfZXNjYXBlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGNvbnN0IGNoYXIgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlubGVuZ3RoKQogewotICBzaXplX3QgYWxsb2M7Ci0gIGNoYXIgKm5zOwotICBjaGFyICp0ZXN0aW5nX3B0ciA9IE5VTEw7Ci0gIHNpemVfdCBuZXdsZW47Ci0gIHNpemVfdCBzdHJpbmRleCA9IDA7CiAgIHNpemVfdCBsZW5ndGg7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IGR5bmJ1ZiBkOwogCiAgIGlmKGlubGVuZ3RoIDwgMCkKICAgICByZXR1cm4gTlVMTDsKIAotICBhbGxvYyA9IChpbmxlbmd0aD8oc2l6ZV90KWlubGVuZ3RoOnN0cmxlbihzdHJpbmcpKSArIDE7Ci0gIG5ld2xlbiA9IGFsbG9jOworICBDdXJsX2R5bl9pbml0KCZkLCBDVVJMX01BWF9JTlBVVF9MRU5HVEgpOwogCi0gIG5zID0gbWFsbG9jKGFsbG9jKTsKLSAgaWYoIW5zKQotICAgIHJldHVybiBOVUxMOworICBsZW5ndGggPSAoaW5sZW5ndGg/KHNpemVfdClpbmxlbmd0aDpzdHJsZW4oc3RyaW5nKSk7CisgIGlmKCFsZW5ndGgpCisgICAgcmV0dXJuIHN0cmR1cCgiIik7CiAKLSAgbGVuZ3RoID0gYWxsb2MtMTsKICAgd2hpbGUobGVuZ3RoLS0pIHsKICAgICB1bnNpZ25lZCBjaGFyIGluID0gKnN0cmluZzsgLyogd2UgbmVlZCB0byB0cmVhdCB0aGUgY2hhcmFjdGVycyB1bnNpZ25lZCAqLwogCi0gICAgaWYoQ3VybF9pc3VucmVzZXJ2ZWQoaW4pKQotICAgICAgLyoganVzdCBjb3B5IHRoaXMgKi8KLSAgICAgIG5zW3N0cmluZGV4KytdID0gaW47CisgICAgaWYoQ3VybF9pc3VucmVzZXJ2ZWQoaW4pKSB7CisgICAgICAvKiBhcHBlbmQgdGhpcyAqLworICAgICAgaWYoQ3VybF9keW5fYWRkbigmZCwgJmluLCAxKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGVsc2UgewogICAgICAgLyogZW5jb2RlIGl0ICovCi0gICAgICBuZXdsZW4gKz0gMjsgLyogdGhlIHNpemUgZ3Jvd3Mgd2l0aCB0d28sIHNpbmNlIHRoaXMnbGwgYmVjb21lIGEgJVhYICovCi0gICAgICBpZihuZXdsZW4gPiBhbGxvYykgewotICAgICAgICBhbGxvYyAqPSAyOwotICAgICAgICB0ZXN0aW5nX3B0ciA9IEN1cmxfc2FmZXJlYWxsb2MobnMsIGFsbG9jKTsKLSAgICAgICAgaWYoIXRlc3RpbmdfcHRyKQotICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBucyA9IHRlc3RpbmdfcHRyOwotICAgICAgfQotCisgICAgICBjaGFyIGVuY29kZWRbNF07CiAgICAgICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhkYXRhLCAoY2hhciAqKSZpbiwgMSk7CiAgICAgICBpZihyZXN1bHQpIHsKICAgICAgICAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCi0gICAgICAgIGZyZWUobnMpOworICAgICAgICBDdXJsX2R5bl9mcmVlKCZkKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICB9CiAKLSAgICAgIG1zbnByaW50ZigmbnNbc3RyaW5kZXhdLCA0LCAiJSUlMDJYIiwgaW4pOwotCi0gICAgICBzdHJpbmRleCArPSAzOworICAgICAgbXNucHJpbnRmKGVuY29kZWQsIHNpemVvZihlbmNvZGVkKSwgIiUlJTAyWCIsIGluKTsKKyAgICAgIGlmKEN1cmxfZHluX2FkZCgmZCwgZW5jb2RlZCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzdHJpbmcrKzsKICAgfQotICBuc1tzdHJpbmRleF0gPSAwOyAvKiB0ZXJtaW5hdGUgaXQgKi8KLSAgcmV0dXJuIG5zOworCisgIHJldHVybiBDdXJsX2R5bl9wdHIoJmQpOwogfQogCiAvKgogICogQ3VybF91cmxkZWNvZGUoKSBVUkwgZGVjb2RlcyB0aGUgZ2l2ZW4gc3RyaW5nLgogICoKLSAqIE9wdGlvbmFsbHkgZGV0ZWN0cyBjb250cm9sIGNoYXJhY3RlcnMgKGJ5dGUgY29kZXMgbG93ZXIgdGhhbiAzMikgaW4gdGhlCi0gKiBkYXRhIGFuZCByZWplY3RzIHN1Y2ggZGF0YS4KLSAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG1hbGxvY2VkIHN0cmluZyBpbiAqb3N0cmluZyB3aXRoIGxlbmd0aCBnaXZlbiBpbgogICogKm9sZW4uIElmIGxlbmd0aCA9PSAwLCB0aGUgbGVuZ3RoIGlzIGFzc3VtZWQgdG8gYmUgc3RybGVuKHN0cmluZykuCiAgKgogICogJ2RhdGEnIGNhbiBiZSBzZXQgdG8gTlVMTCBidXQgdGhlbiB0aGlzIGZ1bmN0aW9uIGNhbid0IGNvbnZlcnQgbmV0d29yawogICogZGF0YSB0byBob3N0IGZvciBub24tYXNjaWkuCisgKgorICogY3RybCBvcHRpb25zOgorICogLSBSRUpFQ1RfTkFEQTogYWNjZXB0IGV2ZXJ5dGhpbmcKKyAqIC0gUkVKRUNUX0NUUkw6IHJlamVjdHMgY29udHJvbCBjaGFyYWN0ZXJzIChieXRlIGNvZGVzIGxvd2VyIHRoYW4gMzIpIGluCisgKiAgICAgICAgICAgICAgICB0aGUgZGF0YQorICogLSBSRUpFQ1RfWkVSTzogcmVqZWN0cyBkZWNvZGVkIHplcm8gYnl0ZXMKKyAqCisgKiBUaGUgdmFsdWVzIGZvciB0aGUgZW51bSBzdGFydHMgYXQgMiwgdG8gbWFrZSB0aGUgYXNzZXJ0IGRldGVjdCBsZWdhY3kKKyAqIGludm9rZXMgdGhhdCB1c2VkIFRSVUUvRkFMU0UgKDAgYW5kIDEpLgogICovCisKIENVUkxjb2RlIEN1cmxfdXJsZGVjb2RlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3N0cmluZywgc2l6ZV90ICpvbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWplY3RfY3RybCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdXJscmVqZWN0IGN0cmwpCiB7Ci0gIHNpemVfdCBhbGxvYyA9IChsZW5ndGg/bGVuZ3RoOnN0cmxlbihzdHJpbmcpKSArIDE7Ci0gIGNoYXIgKm5zID0gbWFsbG9jKGFsbG9jKTsKKyAgc2l6ZV90IGFsbG9jOworICBjaGFyICpuczsKICAgc2l6ZV90IHN0cmluZGV4ID0gMDsKICAgdW5zaWduZWQgbG9uZyBoZXg7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCisgIERFQlVHQVNTRVJUKHN0cmluZyk7CisgIERFQlVHQVNTRVJUKGN0cmwgPj0gUkVKRUNUX05BREEpOyAvKiBjcmFzaCBvbiBUUlVFL0ZBTFNFICovCisKKyAgYWxsb2MgPSAobGVuZ3RoP2xlbmd0aDpzdHJsZW4oc3RyaW5nKSkgKyAxOworICBucyA9IG1hbGxvYyhhbGxvYyk7CisKICAgaWYoIW5zKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0xODYsNyArMTg3LDggQEAKICAgICAgIGFsbG9jIC09IDI7CiAgICAgfQogCi0gICAgaWYocmVqZWN0X2N0cmwgJiYgKGluIDwgMHgyMCkpIHsKKyAgICBpZigoKGN0cmwgPT0gUkVKRUNUX0NUUkwpICYmIChpbiA8IDB4MjApKSB8fAorICAgICAgICgoY3RybCA9PSBSRUpFQ1RfWkVSTykgJiYgKGluID09IDApKSkgewogICAgICAgZnJlZShucyk7CiAgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgICB9CkBAIC0yMjAsNyArMjIyLDcgQEAKICAgICBzaXplX3QgaW5wdXRsZW4gPSBsZW5ndGg7CiAgICAgc2l6ZV90IG91dHB1dGxlbjsKICAgICBDVVJMY29kZSByZXMgPSBDdXJsX3VybGRlY29kZShkYXRhLCBzdHJpbmcsIGlucHV0bGVuLCAmc3RyLCAmb3V0cHV0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfTkFEQSk7CiAgICAgaWYocmVzKQogICAgICAgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2VzY2FwZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmgKaW5kZXggZDhiYmU1Yy4uNTg2ZGI3ZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI1LDkgKzI1LDE2IEBACiAgKiBhbGxvY2F0ZWQgc3RyaW5nIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICAqLwogCiBib29sIEN1cmxfaXN1bnJlc2VydmVkKHVuc2lnbmVkIGNoYXIgaW4pOworCitlbnVtIHVybHJlamVjdCB7CisgIFJFSkVDVF9OQURBID0gMiwKKyAgUkVKRUNUX0NUUkwsCisgIFJFSkVDVF9aRVJPCit9OworCiBDVVJMY29kZSBDdXJsX3VybGRlY29kZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm9zdHJpbmcsIHNpemVfdCAqb2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVqZWN0X2NybGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB1cmxyZWplY3QgY3RybCk7CiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9FU0NBUEVfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5jCmluZGV4IGQzNDljZDkuLmNkM2U0OWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ZpbGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9maWxlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTE0NCw3ICsxNDQsNyBAQAogICBzaXplX3QgcmVhbF9wYXRoX2xlbjsKIAogICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBkYXRhLT5zdGF0ZS51cC5wYXRoLCAwLCAmcmVhbF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVhbF9wYXRoX2xlbiwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVhbF9wYXRoX2xlbiwgUkVKRUNUX1pFUk8pOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5oCmluZGV4IDIwODI4YWQuLmY2Yjc0YTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ZpbGUuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9maWxlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Zvcm1kYXRhLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5jCmluZGV4IDQyOWQ0NzkuLjFjYWIyYzUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Zvcm1kYXRhLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZm9ybWRhdGEuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTIzLDExICsxMjMsMTEgQEAKICAqIHBhcmVudF9mb3JtX2luZm8gaXMgTlVMTC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIEZvcm1JbmZvICogQWRkRm9ybUluZm8oY2hhciAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb250ZW50dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1JbmZvICpwYXJlbnRfZm9ybV9pbmZvKQorc3RhdGljIHN0cnVjdCBGb3JtSW5mbyAqQWRkRm9ybUluZm8oY2hhciAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb250ZW50dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBGb3JtSW5mbyAqcGFyZW50X2Zvcm1faW5mbykKIHsKLSAgRm9ybUluZm8gKmZvcm1faW5mbzsKKyAgc3RydWN0IEZvcm1JbmZvICpmb3JtX2luZm87CiAgIGZvcm1faW5mbyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEZvcm1JbmZvKSk7CiAgIGlmKGZvcm1faW5mbykgewogICAgIGlmKHZhbHVlKQpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmxhc3RfcG9zdCwKICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgcGFyYW1zKQogewotICBGb3JtSW5mbyAqZmlyc3RfZm9ybSwgKmN1cnJlbnRfZm9ybSwgKmZvcm0gPSBOVUxMOworICBzdHJ1Y3QgRm9ybUluZm8gKmZpcnN0X2Zvcm0sICpjdXJyZW50X2Zvcm0sICpmb3JtID0gTlVMTDsKICAgQ1VSTEZPUk1jb2RlIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9PSzsKICAgY29uc3QgY2hhciAqcHJldnR5cGUgPSBOVUxMOwogICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdCA9IE5VTEw7CkBAIC01MjEsNyArNTIxLDcgQEAKICAgaWYoQ1VSTF9GT1JNQUREX09LICE9IHJldHVybl92YWx1ZSkgewogICAgIC8qIE9uIGVycm9yLCBmcmVlIGFsbG9jYXRlZCBmaWVsZHMgZm9yIGFsbCBub2RlcyBvZiB0aGUgRm9ybUluZm8gbGlua2VkCiAgICAgICAgbGlzdCB3aXRob3V0IGRlYWxsb2NhdGluZyBub2Rlcy4gTGlzdCBub2RlcyBhcmUgZGVhbGxvY2F0ZWQgbGF0ZXIgb24gKi8KLSAgICBGb3JtSW5mbyAqcHRyOworICAgIHN0cnVjdCBGb3JtSW5mbyAqcHRyOwogICAgIGZvcihwdHIgPSBmaXJzdF9mb3JtOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5tb3JlKSB7CiAgICAgICBpZihwdHItPm5hbWVfYWxsb2MpIHsKICAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPm5hbWUpOwpAQCAtNjAyLDcgKzYwMiw3IEBACiAgICAgICAgIC8qIE5vdGUgdGhhdCB0aGVyZSdzIHNtYWxsIHJpc2sgdGhhdCBmb3JtLT5uYW1lIGlzIE5VTEwgaGVyZSBpZiB0aGUKICAgICAgICAgICAgYXBwIHBhc3NlZCBpbiBhIGJhZCBjb21ibywgc28gd2UgYmV0dGVyIGNoZWNrIGZvciB0aGF0IGZpcnN0LiAqLwogICAgICAgICBpZihmb3JtLT5uYW1lKSB7Ci0gICAgICAgICAgLyogY29weSBuYW1lICh3aXRob3V0IHN0cmR1cDsgcG9zc2libHkgbm90IG51bC10ZXJtaW5hdGVkKSAqLworICAgICAgICAgIC8qIGNvcHkgbmFtZSAod2l0aG91dCBzdHJkdXA7IHBvc3NpYmx5IG5vdCBudWxsLXRlcm1pbmF0ZWQpICovCiAgICAgICAgICAgZm9ybS0+bmFtZSA9IEN1cmxfbWVtZHVwKGZvcm0tPm5hbWUsIGZvcm0tPm5hbWVsZW5ndGg/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0tPm5hbWVsZW5ndGg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihmb3JtLT5uYW1lKSArIDEpOwpAQCAtNjUwLDcgKzY1MCw3IEBACiAgICAgICAvKiBPbiBlcnJvciwgZnJlZSBhbGxvY2F0ZWQgZmllbGRzIGZvciBub2RlcyBvZiB0aGUgRm9ybUluZm8gbGlua2VkCiAgICAgICAgICBsaXN0IHdoaWNoIGFyZSBub3QgYWxyZWFkeSBvd25lZCBieSB0aGUgaHR0cHBvc3QgbGlua2VkIGxpc3QKICAgICAgICAgIHdpdGhvdXQgZGVhbGxvY2F0aW5nIG5vZGVzLiBMaXN0IG5vZGVzIGFyZSBkZWFsbG9jYXRlZCBsYXRlciBvbiAqLwotICAgICAgRm9ybUluZm8gKnB0cjsKKyAgICAgIHN0cnVjdCBGb3JtSW5mbyAqcHRyOwogICAgICAgZm9yKHB0ciA9IGZvcm07IHB0ciAhPSBOVUxMOyBwdHIgPSBwdHItPm1vcmUpIHsKICAgICAgICAgaWYocHRyLT5uYW1lX2FsbG9jKSB7CiAgICAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPm5hbWUpOwpAQCAtNjc2LDcgKzY3Niw3IEBACiAgICAgIGZpZWxkcyBnaXZlbiB0aGF0IHRoZXNlIGhhdmUgZWl0aGVyIGJlZW4gZGVhbGxvY2F0ZWQgb3IgYXJlIG93bmVkCiAgICAgIG5vdyBieSB0aGUgaHR0cHBvc3QgbGlua2VkIGxpc3QgKi8KICAgd2hpbGUoZmlyc3RfZm9ybSkgewotICAgIEZvcm1JbmZvICpwdHIgPSBmaXJzdF9mb3JtLT5tb3JlOworICAgIHN0cnVjdCBGb3JtSW5mbyAqcHRyID0gZmlyc3RfZm9ybS0+bW9yZTsKICAgICBmcmVlKGZpcnN0X2Zvcm0pOwogICAgIGZpcnN0X2Zvcm0gPSBwdHI7CiAgIH0KQEAgLTcyOCwxNCArNzI4LDEwIEBACiAgICAgaWYoIW5yZWFkKQogICAgICAgYnJlYWs7CiAKLSAgICBzd2l0Y2gobnJlYWQpIHsKLSAgICBkZWZhdWx0OgotICAgICAgaWYoYXBwZW5kKGFyZywgYnVmZmVyLCBucmVhZCkgIT0gbnJlYWQpCi0gICAgICAgIHJlc3VsdCA9IENVUkxFX1JFQURfRVJST1I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxfUkVBREZVTkNfQUJPUlQ6Ci0gICAgY2FzZSBDVVJMX1JFQURGVU5DX1BBVVNFOgotICAgICAgYnJlYWs7CisgICAgaWYobnJlYWQgPiBzaXplb2YoYnVmZmVyKSB8fCBhcHBlbmQoYXJnLCBidWZmZXIsIG5yZWFkKSAhPSBucmVhZCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgIGlmKG5yZWFkID09IENVUkxfUkVBREZVTkNfQUJPUlQpCisgICAgICAgIHJlc3VsdCA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CiAgICAgfQogICB9CiAKQEAgLTc3NSw3ICs3NzEsNyBAQAogfQogCiAKLS8qIFNldCBtaW1lIHBhcnQgbmFtZSwgdGFraW5nIGNhcmUgb2Ygbm9uIG51bC10ZXJtaW5hdGVkIG5hbWUgc3RyaW5nLiAqLworLyogU2V0IG1pbWUgcGFydCBuYW1lLCB0YWtpbmcgY2FyZSBvZiBub24gbnVsbC10ZXJtaW5hdGVkIG5hbWUgc3RyaW5nLiAqLwogc3RhdGljIENVUkxjb2RlIHNldG5hbWUoY3VybF9taW1lcGFydCAqcGFydCwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKIHsKICAgY2hhciAqem5hbWU7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZm9ybWRhdGEuaAppbmRleCBjYjIwODA1Li4zNzY2ZDM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Zvcm1kYXRhLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX01JTUUKIAogLyogdXNlZCBieSBGb3JtQWRkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSAqLwotdHlwZWRlZiBzdHJ1Y3QgRm9ybUluZm8geworc3RydWN0IEZvcm1JbmZvIHsKICAgY2hhciAqbmFtZTsKICAgYm9vbCBuYW1lX2FsbG9jOwogICBzaXplX3QgbmFtZWxlbmd0aDsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgY2hhciAqdXNlcnA7ICAgICAgICAvKiBwb2ludGVyIGZvciB0aGUgcmVhZCBjYWxsYmFjayAqLwogICBzdHJ1Y3QgY3VybF9zbGlzdCAqY29udGVudGhlYWRlcjsKICAgc3RydWN0IEZvcm1JbmZvICptb3JlOwotfSBGb3JtSW5mbzsKK307CiAKIENVUkxjb2RlIEN1cmxfZ2V0Zm9ybWRhdGEoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9taW1lcGFydCAqLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuYwppbmRleCA1MzUxMGY4Li5jZmQ3MGE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTUsNyArNTUsNiBAQAogI2luY2x1ZGUgInRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiZXNjYXBlLmgiCiAjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KLSNpbmNsdWRlICJzb2Nrcy5oIgogI2luY2x1ZGUgImZ0cC5oIgogI2luY2x1ZGUgImZpbGVpbmZvLmgiCiAjaW5jbHVkZSAiZnRwbGlzdHBhcnNlci5oIgpAQCAtNzgsNiArNzcsNyBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAiaHR0cF9wcm94eS5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorI2luY2x1ZGUgInNvY2tzLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtMTEzLDcgKzExMyw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgZnRwX3JlZ3VsYXJfdHJhbnNmZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogc3RhdGljIHZvaWQgZnRwX3Bhc3ZfdmVyYm9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKmFpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ld2hvc3QsIC8qIGFzY2lpIHZlcnNpb24gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQpOwogI2VuZGlmCkBAIC0xMzIsMTMgKzEzMiwxMSBAQAogc3RhdGljIENVUkxjb2RlIGZ0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOwogc3RhdGljIENVUkxjb2RlIGZ0cF9kb19tb3JlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50ICpjb21wbGV0ZWQpOwogc3RhdGljIENVUkxjb2RlIGZ0cF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBpbnQgZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKLXN0YXRpYyBpbnQgZnRwX2RvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCBmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKK3N0YXRpYyBpbnQgZnRwX2RvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIGZ0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgZnRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIAogc3RhdGljIENVUkxjb2RlIGluaXRfd2NfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIENVUkxjb2RlIHdjX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwpAQCAtMjIzLDYgKzIyMSw5IEBACiAgICAgY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdID0gQ1VSTF9TT0NLRVRfQkFEOwogICB9CiAgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtTRUNPTkRBUllTT0NLRVRdID0gRkFMU0U7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbU0VDT05EQVJZU09DS0VUXSA9IEZBTFNFOworI2VuZGlmCiB9CiAKIC8qCkBAIC0yNTUsMTggKzI1Niw2IEBACiAgIEN1cmxfc2FmZWZyZWUoZnRwYy0+bmV3aG9zdCk7CiB9CiAKLS8qIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBDUiAoXHIpIG9yIExGIChcbiksCi0gICB3aGljaCBhcmUgbm90IGFsbG93ZWQgd2l0aGluIFJGQyA5NTkgPHN0cmluZz4uCi0gICBOb3RlOiBUaGUgaW5wdXQgc3RyaW5nIGlzIGluIHRoZSBjbGllbnQncyBlbmNvZGluZyB3aGljaCBtaWdodAotICAgbm90IGJlIEFTQ0lJLCBzbyBlc2NhcGUgc2VxdWVuY2VzIFxyICYgXG4gbXVzdCBiZSB1c2VkIGluc3RlYWQKLSAgIG9mIGhleCB2YWx1ZXMgMHgwZCAmIDB4MGEuCi0qLwotc3RhdGljIGJvb2wgaXNCYWRGdHBTdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nKQotewotICByZXR1cm4gKChOVUxMICE9IHN0cmNocihzdHJpbmcsICdccicpKSB8fAotICAgICAgICAgIChOVUxMICE9IHN0cmNocihzdHJpbmcsICdcbicpKSkgPyBUUlVFIDogRkFMU0U7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEFjY2VwdFNlcnZlckNvbm5lY3QoKQpAQCAtMzA1LDcgKzI5NCw3IEBACiAKICAgY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdID0gczsKICAgKHZvaWQpY3VybHhfbm9uYmxvY2socywgVFJVRSk7IC8qIGVuYWJsZSBub24tYmxvY2tpbmcgKi8KLSAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdID0gVFJVRTsKKyAgY29ubi0+Yml0cy5zb2NrX2FjY2VwdGVkID0gVFJVRTsKIAogICBpZihkYXRhLT5zZXQuZnNvY2tvcHQpIHsKICAgICBpbnQgZXJyb3IgPSAwOwpAQCAtMzQ4LDcgKzMzNyw3IEBACiAgIG5vdyA9IEN1cmxfbm93KCk7CiAKICAgLyogY2hlY2sgaWYgdGhlIGdlbmVyaWMgdGltZW91dCBwb3NzaWJseSBpcyBzZXQgc2hvcnRlciAqLwotICBvdGhlciA9ICBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIEZBTFNFKTsKKyAgb3RoZXIgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIEZBTFNFKTsKICAgaWYob3RoZXIgJiYgKG90aGVyIDwgdGltZW91dF9tcykpCiAgICAgLyogbm90ZSB0aGF0IHRoaXMgYWxzbyB3b3JrcyBmaW5lIGZvciB3aGVuIG90aGVyIGhhcHBlbnMgdG8gYmUgbmVnYXRpdmUKICAgICAgICBkdWUgdG8gaXQgYWxyZWFkeSBoYXZpbmcgZWxhcHNlZCAqLwpAQCAtMzgyLDcgKzM3MSw3IEBACiAgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOwogICBzdHJ1Y3QgcGluZ3BvbmcgKnBwID0gJmZ0cGMtPnBwOwogICBpbnQgcmVzdWx0OwotICB0aW1lX3QgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBzc2l6ZV90IG5yZWFkOwogICBpbnQgZnRwY29kZTsKIApAQCAtNDAwLDcgKzM4OSw3IEBACiAgIGlmKHBwLT5jYWNoZV9zaXplICYmIHBwLT5jYWNoZSAmJiBwcC0+Y2FjaGVbMF0gPiAnMycpIHsKICAgICAvKiBEYXRhIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBsZXQncyByZXR1cm4gKi8KICAgICBpbmZvZihkYXRhLCAiVGhlcmUgaXMgbmVnYXRpdmUgcmVzcG9uc2UgaW4gY2FjaGUgd2hpbGUgc2VydiBjb25uZWN0XG4iKTsKLSAgICBDdXJsX0dldEZUUFJlc3BvbnNlKCZucmVhZCwgY29ubiwgJmZ0cGNvZGUpOworICAgICh2b2lkKUN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSk7CiAgICAgcmV0dXJuIENVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEOwogICB9CiAKQEAgLTQyMiw3ICs0MTEsNyBAQAogICAgIH0KICAgICBlbHNlIGlmKHJlc3VsdCAmIENVUkxfQ1NFTEVDVF9JTikgewogICAgICAgaW5mb2YoZGF0YSwgIkN0cmwgY29ubiBoYXMgZGF0YSB3aGlsZSB3YWl0aW5nIGZvciBkYXRhIGNvbm5cbiIpOwotICAgICAgQ3VybF9HZXRGVFBSZXNwb25zZSgmbnJlYWQsIGNvbm4sICZmdHBjb2RlKTsKKyAgICAgICh2b2lkKUN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSk7CiAKICAgICAgIGlmKGZ0cGNvZGUvMTAwID4gMykKICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEOwpAQCAtNDkzLDcgKzQ4Miw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgQWxsb3dTZXJ2ZXJDb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqY29ubmVjdGVkKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGltZV90IHRpbWVvdXRfbXM7CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAKICAgKmNvbm5lY3RlZCA9IEZBTFNFOwpAQCAtNTI1LDcgKzUxNCw3IEBACiAgIH0KICAgZWxzZSB7CiAgICAgLyogQWRkIHRpbWVvdXQgdG8gbXVsdGkgaGFuZGxlIGFuZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgKi8KLSAgICBpZighcmVzdWx0ICYmICpjb25uZWN0ZWQgPT0gRkFMU0UpIHsKKyAgICBpZigqY29ubmVjdGVkID09IEZBTFNFKSB7CiAgICAgICBDdXJsX2V4cGlyZShkYXRhLCBkYXRhLT5zZXQuYWNjZXB0dGltZW91dCA+IDAgPwogICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmFjY2VwdHRpbWVvdXQ6IERFRkFVTFRfQUNDRVBUX1RJTUVPVVQsIDApOwogICAgIH0KQEAgLTU2NSwxMCArNTU0LDggQEAKICNpZmRlZiBIQVZFX0dTU0FQSQogICBjaGFyICogY29uc3QgYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOwogI2VuZGlmCi0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBpbnQgY29kZTsKLQotICByZXN1bHQgPSBDdXJsX3BwX3JlYWRyZXNwKHNvY2tmZCwgcHAsICZjb2RlLCBzaXplKTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9wcF9yZWFkcmVzcChzb2NrZmQsIHBwLCAmY29kZSwgc2l6ZSk7CiAKICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKQogICAvKiBoYW5kbGUgdGhlIHNlY3VyaXR5LW9yaWVudGVkIHJlc3BvbnNlcyA2eHggKioqLwpAQCAtNjQ4LDggKzYzNSw4IEBACiAKICAgd2hpbGUoISpmdHBjb2RlICYmICFyZXN1bHQpIHsKICAgICAvKiBjaGVjayBhbmQgcmVzZXQgdGltZW91dCB2YWx1ZSBldmVyeSBsYXAgKi8KLSAgICB0aW1lX3QgdGltZW91dCA9IEN1cmxfcHBfc3RhdGVfdGltZW91dChwcCwgRkFMU0UpOwotICAgIHRpbWVfdCBpbnRlcnZhbF9tczsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXQgPSBDdXJsX3BwX3N0YXRlX3RpbWVvdXQocHAsIEZBTFNFKTsKKyAgICB0aW1lZGlmZl90IGludGVydmFsX21zOwogCiAgICAgaWYodGltZW91dCA8PSAwKSB7CiAgICAgICBmYWlsZihkYXRhLCAiRlRQIHJlc3BvbnNlIHRpbWVvdXQiKTsKQEAgLTc4OSw5ICs3NzYsOCBAQAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV91c2VyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgQ1VSTGNvZGUgcmVzdWx0OwotICBzdHJ1Y3QgRlRQICpmdHAgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOwogICAvKiBzZW5kIFVTRVIgKi8KLSAgUFBTRU5ERigmY29ubi0+cHJvdG8uZnRwYy5wcCwgIlVTRVIgJXMiLCBmdHAtPnVzZXI/ZnRwLT51c2VyOiIiKTsKKyAgUFBTRU5ERigmY29ubi0+cHJvdG8uZnRwYy5wcCwgIlVTRVIgJXMiLCBjb25uLT51c2VyP2Nvbm4tPnVzZXI6IiIpOwogCiAgIHN0YXRlKGNvbm4sIEZUUF9VU0VSKTsKICAgY29ubi0+ZGF0YS0+c3RhdGUuZnRwX3RyeWluZ19hbHRlcm5hdGl2ZSA9IEZBTFNFOwpAQCAtODEyLDI4ICs3OTgsMjcgQEAKIAogLyogRm9yIHRoZSBGVFAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCiBzdGF0aWMgaW50IGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmZ0cGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmZ0cGMucHAsIHNvY2tzKTsKIH0KIAogLyogRm9yIHRoZSBGVFAgIkRPX01PUkUiIHBoYXNlIG9ubHkgKi8KLXN0YXRpYyBpbnQgZnRwX2RvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCitzdGF0aWMgaW50IGZ0cF9kb21vcmVfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKIAotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICAgLyogV2hlbiBpbiBET19NT1JFIHN0YXRlLCB3ZSBjb3VsZCBiZSBlaXRoZXIgd2FpdGluZyBmb3IgdXMgdG8gY29ubmVjdCB0byBhCiAgICAqIHJlbW90ZSBzaXRlLCBvciB3ZSBjb3VsZCB3YWl0IGZvciB0aGF0IHNpdGUgdG8gY29ubmVjdCB0byB1cy4gT3IganVzdAogICAgKiBoYW5kbGUgb3JkaW5hcnkgY29tbWFuZHMuCiAgICAqLwogCisgIGlmKFNPQ0tTX1NUQVRFKGNvbm4tPmNubmN0LnN0YXRlKSkKKyAgICByZXR1cm4gQ3VybF9TT0NLU19nZXRzb2NrKGNvbm4sIHNvY2tzLCBTRUNPTkRBUllTT0NLRVQpOworCiAgIGlmKEZUUF9TVE9QID09IGZ0cGMtPnN0YXRlKSB7CiAgICAgaW50IGJpdHMgPSBHRVRTT0NLX1JFQURTT0NLKDApOworICAgIGJvb2wgYW55ID0gRkFMU0U7CiAKICAgICAvKiBpZiBzdG9wcGVkIGFuZCBzdGlsbCBpbiB0aGlzIHN0YXRlLCB0aGVuIHdlJ3JlIGFsc28gd2FpdGluZyBmb3IgYQogICAgICAgIGNvbm5lY3Qgb24gdGhlIHNlY29uZGFyeSBjb25uZWN0aW9uICovCkBAIC04NDgsMTcgKzgzMywxOCBAQAogICAgICAgICBpZihjb25uLT50ZW1wc29ja1tpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKICAgICAgICAgICBzb2Nrc1tzXSA9IGNvbm4tPnRlbXBzb2NrW2ldOwogICAgICAgICAgIGJpdHMgfD0gR0VUU09DS19XUklURVNPQ0socysrKTsKKyAgICAgICAgICBhbnkgPSBUUlVFOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGVsc2UgeworICAgIGlmKCFhbnkpIHsKICAgICAgIHNvY2tzWzFdID0gY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdOwogICAgICAgYml0cyB8PSBHRVRTT0NLX1dSSVRFU09DSygxKSB8IEdFVFNPQ0tfUkVBRFNPQ0soMSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGJpdHM7CiAgIH0KLSAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uZnRwYy5wcCwgc29ja3MsIG51bXNvY2tzKTsKKyAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uZnRwYy5wcCwgc29ja3MpOwogfQogCiAvKiBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgRlRQX1FVT1RFIHN0YXRlIGlzIHBhc3NlZC4KQEAgLTg3Niw2ICs4NjIsMTAgQEAKICAgICAvKiBhbHJlYWR5IGRvbmUgYW5kIGZpbmUgKi8KICAgICByZXN1bHQgPSBmdHBfc3RhdGVfbWR0bShjb25uKTsKICAgZWxzZSB7CisgICAgLyogRlRQRklMRV9OT0NXRCB3aXRoIGZ1bGwgcGF0aDogZXhwZWN0IGZ0cGMtPmN3ZGRvbmUhICovCisgICAgREVCVUdBU1NFUlQoKGNvbm4tPmRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCAhPSBGVFBGSUxFX05PQ1dEKSB8fAorICAgICAgICAgICAgICAgICEoZnRwYy0+ZGlyZGVwdGggJiYgZnRwYy0+ZGlyc1swXVswXSA9PSAnLycpKTsKKwogICAgIGZ0cGMtPmNvdW50MiA9IDA7IC8qIGNvdW50MiBjb3VudHMgZmFpbGVkIENXRHMgKi8KIAogICAgIC8qIGNvdW50MyBpcyBzZXQgdG8gYWxsb3cgYSBNS0QgdG8gZmFpbCBvbmNlLiBJbiB0aGUgY2FzZSB3aGVuIGZpcnN0IENXRApAQCAtODgzLDEwICs4NzMsOSBAQAogICAgICAgIGRpcikgdGhpcyB0aGVuIGFsbG93cyBmb3IgYSBzZWNvbmQgdHJ5IHRvIENXRCB0byBpdCAqLwogICAgIGZ0cGMtPmNvdW50MyA9IChjb25uLT5kYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgPT0gMik/MTowOwogCi0gICAgaWYoKGNvbm4tPmRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9PSBGVFBGSUxFX05PQ1dEKSAmJiAhZnRwYy0+Y3dkY291bnQpCi0gICAgICAvKiBObyBDV0QgbmVjZXNzYXJ5ICovCi0gICAgICByZXN1bHQgPSBmdHBfc3RhdGVfbWR0bShjb25uKTsKLSAgICBlbHNlIGlmKGNvbm4tPmJpdHMucmV1c2UgJiYgZnRwYy0+ZW50cnlwYXRoKSB7CisgICAgaWYoY29ubi0+Yml0cy5yZXVzZSAmJiBmdHBjLT5lbnRyeXBhdGggJiYKKyAgICAgICAvKiBubyBuZWVkIHRvIGdvIHRvIGVudHJ5cGF0aCB3aGVuIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCAqLworICAgICAgICEoZnRwYy0+ZGlyZGVwdGggJiYgZnRwYy0+ZGlyc1swXVswXSA9PSAnLycpKSB7CiAgICAgICAvKiBUaGlzIGlzIGEgcmUtdXNlZCBjb25uZWN0aW9uLiBTaW5jZSB3ZSBjaGFuZ2UgZGlyZWN0b3J5IHRvIHdoZXJlIHRoZQogICAgICAgICAgdHJhbnNmZXIgaXMgdGFraW5nIHBsYWNlLCB3ZSBtdXN0IGZpcnN0IGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBkaXIKICAgICAgICAgIHdoZXJlIHdlIGVuZGVkIHVwIGFmdGVyIGxvZ2luOiAqLwpAQCAtOTI2LDEwICs5MTUsMTAgQEAKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjdXJsX3NvY2tldF90IHBvcnRzb2NrID0gQ1VSTF9TT0NLRVRfQkFEOwotICBjaGFyIG15aG9zdFsyNTZdID0gIiI7CisgIGNoYXIgbXlob3N0W01BWF9JUEFEUl9MRU4gKyAxXSA9ICIiOwogCiAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3M7Ci0gIEN1cmxfYWRkcmluZm8gKnJlcywgKmFpOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqcmVzLCAqYWk7CiAgIGN1cmxfc29ja2xlbl90IHNzbGVuOwogICBjaGFyIGhidWZbTklfTUFYSE9TVF07CiAgIHN0cnVjdCBzb2NrYWRkciAqc2EgPSAoc3RydWN0IHNvY2thZGRyICopJnNzOwpAQCAtOTM3LDkgKzkyNiw4IEBACiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgc3RydWN0IHNvY2thZGRyX2luNiAqIGNvbnN0IHNhNiA9ICh2b2lkICopc2E7CiAjZW5kaWYKLSAgY2hhciB0bXBbMTAyNF07CiAgIHN0YXRpYyBjb25zdCBjaGFyIG1vZGVbXVs1XSA9IHsgIkVQUlQiLCAiUE9SVCIgfTsKLSAgaW50IHJjOworICBlbnVtIHJlc29sdmVfdCByYzsKICAgaW50IGVycm9yOwogICBjaGFyICpob3N0ID0gTlVMTDsKICAgY2hhciAqc3RyaW5nX2Z0cHBvcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19GVFBQT1JUXTsKQEAgLTEwNTUsNiArMTA0Myw3IEBACiAgIH0gLyogZGF0YS0+c2V0LmZ0cHBvcnQgKi8KIAogICBpZighaG9zdCkgeworICAgIGNvbnN0IGNoYXIgKnI7CiAgICAgLyogbm90IGFuIGludGVyZmFjZSBhbmQgbm90IGEgaG9zdCBuYW1lLCBnZXQgZGVmYXVsdCBieSBleHRyYWN0aW5nCiAgICAgICAgdGhlIElQIGZyb20gdGhlIGNvbnRyb2wgY29ubmVjdGlvbiAqLwogICAgIHNzbGVuID0gc2l6ZW9mKHNzKTsKQEAgLTEwNjcsMTMgKzEwNTYsMTUgQEAKICAgICBzd2l0Y2goc2EtPnNhX2ZhbWlseSkgewogI2lmZGVmIEVOQUJMRV9JUFY2CiAgICAgY2FzZSBBRl9JTkVUNjoKLSAgICAgIEN1cmxfaW5ldF9udG9wKHNhLT5zYV9mYW1pbHksICZzYTYtPnNpbjZfYWRkciwgaGJ1Ziwgc2l6ZW9mKGhidWYpKTsKKyAgICAgIHIgPSBDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2E2LT5zaW42X2FkZHIsIGhidWYsIHNpemVvZihoYnVmKSk7CiAgICAgICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6Ci0gICAgICBDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2E0LT5zaW5fYWRkciwgaGJ1Ziwgc2l6ZW9mKGhidWYpKTsKKyAgICAgIHIgPSBDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2E0LT5zaW5fYWRkciwgaGJ1Ziwgc2l6ZW9mKGhidWYpKTsKICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBpZighcikKKyAgICAgIHJldHVybiBDVVJMRV9GVFBfUE9SVF9GQUlMRUQ7CiAgICAgaG9zdCA9IGhidWY7IC8qIHVzZSB0aGlzIGhvc3QgbmFtZSAqLwogICAgIHBvc3NpYmx5X25vbl9sb2NhbCA9IEZBTFNFOyAvKiB3ZSBrbm93IGl0IGlzIGxvY2FsIG5vdyAqLwogICB9CkBAIC0xMjUyLDggKzEyNDMsMTAgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZihQT1JUID09IGZjbWQpIHsKKyAgICAgIC8qIGxhcmdlIGVub3VnaCBmb3IgW0lQIGFkZHJlc3NdLFtudW1dLFtudW1dICovCisgICAgICBjaGFyIHRhcmdldFtzaXplb2YobXlob3N0KSArIDIwXTsKICAgICAgIGNoYXIgKnNvdXJjZSA9IG15aG9zdDsKLSAgICAgIGNoYXIgKmRlc3QgPSB0bXA7CisgICAgICBjaGFyICpkZXN0ID0gdGFyZ2V0OwogCiAgICAgICAvKiB0cmFuc2xhdGUgeC54LngueCB0byB4LHgseCx4ICovCiAgICAgICB3aGlsZShzb3VyY2UgJiYgKnNvdXJjZSkgewpAQCAtMTI2Nyw3ICsxMjYwLDcgQEAKICAgICAgICpkZXN0ID0gMDsKICAgICAgIG1zbnByaW50ZihkZXN0LCAyMCwgIiwlZCwlZCIsIChpbnQpKHBvcnQ+PjgpLCAoaW50KShwb3J0JjB4ZmYpKTsKIAotICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmZnRwYy0+cHAsICIlcyAlcyIsIG1vZGVbZmNtZF0sIHRtcCk7CisgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZmdHBjLT5wcCwgIiVzICVzIiwgbW9kZVtmY21kXSwgdGFyZ2V0KTsKICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBzZW5kaW5nIFBPUlQgY29tbWFuZDogJXMiLAogICAgICAgICAgICAgICBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSk7CkBAIC0xMzA4LDcgKzEzMDEsNyBAQAogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIC8qCi0gICAgSGVyZSdzIHRoZSBleGNlY3V0aXZlIHN1bW1hcnkgb24gd2hhdCB0byBkbzoKKyAgICBIZXJlJ3MgdGhlIGV4ZWN1dGl2ZSBzdW1tYXJ5IG9uIHdoYXQgdG8gZG86CiAKICAgICBQQVNWIGlzIFJGQzk1OSwgZXhwZWN0OgogICAgIDIyNyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKGExLGEyLGEzLGE0LHAxLHAyKQpAQCAtMTQ0NSwzMSArMTQzOCwzNyBAQAogICAgICBzZXJ2ZXJzIGVpdGhlci4uLiAqLwogCiAgIC8qCi0gICAgIGlmIEZUUEZJTEVfTk9DV0Qgd2FzIHNwZWNpZmllZCwgd2UgYXJlIGN1cnJlbnRseSBpbgotICAgICB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCBzbyB3ZSBzaG91bGQgYWRkIHRoZSBwYXRoCisgICAgIGlmIEZUUEZJTEVfTk9DV0Qgd2FzIHNwZWNpZmllZCwgd2Ugc2hvdWxkIGFkZCB0aGUgcGF0aAogICAgICBhcyBhcmd1bWVudCBmb3IgdGhlIExJU1QgLyBOTFNUIC8gb3IgY3VzdG9tIGNvbW1hbmQuCiAgICAgIFdoZXRoZXIgdGhlIHNlcnZlciB3aWxsIHN1cHBvcnQgdGhpcywgaXMgdW5jZXJ0YWluLgogCiAgICAgIFRoZSBvdGhlciBmdHBfZmlsZW1ldGhvZHMgd2lsbCBDV0QgaW50byBkaXIvZGlyLyBmaXJzdCBhbmQKICAgICAgdGhlbiBqdXN0IGRvIExJU1QgKGluIHRoYXQgY2FzZTogbm90aGluZyB0byBkbyBoZXJlKQogICAqLwotICBjaGFyICpjbWQsICpsc3RBcmcsICpzbGFzaFBvczsKLSAgY29uc3QgY2hhciAqaW5wYXRoID0gZnRwLT5wYXRoOworICBjaGFyICpsc3RBcmcgPSBOVUxMOworICBjaGFyICpjbWQ7CiAKLSAgbHN0QXJnID0gTlVMTDsKLSAgaWYoKGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9PSBGVFBGSUxFX05PQ1dEKSAmJgotICAgICBpbnBhdGggJiYgaW5wYXRoWzBdICYmIHN0cmNocihpbnBhdGgsICcvJykpIHsKLSAgICBzaXplX3QgbiA9IHN0cmxlbihpbnBhdGgpOwotCi0gICAgLyogQ2hlY2sgaWYgcGF0aCBkb2VzIG5vdCBlbmQgd2l0aCAvLCBhcyB0aGVuIHdlIGN1dCBvZmYgdGhlIGZpbGUgcGFydCAqLwotICAgIGlmKGlucGF0aFtuIC0gMV0gIT0gJy8nKSB7Ci0gICAgICAvKiBjaG9wIG9mZiB0aGUgZmlsZSBwYXJ0IGlmIGZvcm1hdCBpcyBkaXIvZGlyL2ZpbGUgKi8KLSAgICAgIHNsYXNoUG9zID0gc3RycmNocihpbnBhdGgsICcvJyk7Ci0gICAgICBuID0gc2xhc2hQb3MgLSBpbnBhdGg7Ci0gICAgfQotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGlucGF0aCwgbiwgJmxzdEFyZywgTlVMTCwgVFJVRSk7CisgIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYgZnRwLT5wYXRoKSB7CisgICAgLyogdXJsLWRlY29kZSBiZWZvcmUgZXZhbHVhdGlvbjogZS5nLiBwYXRocyBzdGFydGluZy9lbmRpbmcgd2l0aCAlMmYgKi8KKyAgICBjb25zdCBjaGFyICpzbGFzaFBvcyA9IE5VTEw7CisgICAgY2hhciAqcmF3UGF0aCA9IE5VTEw7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcmF3UGF0aCwgTlVMTCwgUkVKRUNUX0NUUkwpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzbGFzaFBvcyA9IHN0cnJjaHIocmF3UGF0aCwgJy8nKTsKKyAgICBpZihzbGFzaFBvcykgeworICAgICAgLyogY2hvcCBvZmYgdGhlIGZpbGUgcGFydCBpZiBmb3JtYXQgaXMgZGlyL2ZpbGUgb3RoZXJ3aXNlIHJlbW92ZQorICAgICAgICAgdGhlIHRyYWlsaW5nIHNsYXNoIGZvciBkaXIvZGlyLyBleGNlcHQgZm9yIGFic29sdXRlIHBhdGggLyAqLworICAgICAgc2l6ZV90IG4gPSBzbGFzaFBvcyAtIHJhd1BhdGg7CisgICAgICBpZihuID09IDApCisgICAgICAgICsrbjsKKworICAgICAgbHN0QXJnID0gcmF3UGF0aDsKKyAgICAgIGxzdEFyZ1tuXSA9ICdcMCc7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZyZWUocmF3UGF0aCk7CiAgIH0KIAogICBjbWQgPSBhcHJpbnRmKCIlcyVzJXMiLApAQCAtMTQ3OCwxNSArMTQ3NywxMiBAQAogICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2xpc3Rfb25seT8iTkxTVCI6IkxJU1QiKSwKICAgICAgICAgICAgICAgICBsc3RBcmc/ICIgIjogIiIsCiAgICAgICAgICAgICAgICAgbHN0QXJnPyBsc3RBcmc6ICIiKTsKKyAgZnJlZShsc3RBcmcpOwogCi0gIGlmKCFjbWQpIHsKLSAgICBmcmVlKGxzdEFyZyk7CisgIGlmKCFjbWQpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KIAogICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5mdHBjLnBwLCAiJXMiLCBjbWQpOwotCi0gIGZyZWUobHN0QXJnKTsKICAgZnJlZShjbWQpOwogCiAgIGlmKHJlc3VsdCkKQEAgLTE0OTksMjQgKzE0OTUsMTQgQEAKIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9yZXRyX3ByZXF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogV2UndmUgc2VudCB0aGUgVFlQRSwgbm93IHdlIG11c3Qgc2VuZCB0aGUgbGlzdCBvZiBwcmVxdW90ZSBzdHJpbmdzICovCi0KLSAgcmVzdWx0ID0gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9SRVRSX1BSRVFVT1RFKTsKLQotICByZXR1cm4gcmVzdWx0OworICByZXR1cm4gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9SRVRSX1BSRVFVT1RFKTsKIH0KIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9zdG9yX3ByZXF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogV2UndmUgc2VudCB0aGUgVFlQRSwgbm93IHdlIG11c3Qgc2VuZCB0aGUgbGlzdCBvZiBwcmVxdW90ZSBzdHJpbmdzICovCi0KLSAgcmVzdWx0ID0gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9TVE9SX1BSRVFVT1RFKTsKLQotICByZXR1cm4gcmVzdWx0OworICByZXR1cm4gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9TVE9SX1BSRVFVT1RFKTsKIH0KIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV90eXBlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKQEAgLTE3ODEsNyArMTc2NywxMSBAQAogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAotICBpZihjb25uLT5iaXRzLmlwdjYgJiYgIShjb25uLT5iaXRzLnR1bm5lbF9wcm94eSB8fCBjb25uLT5iaXRzLnNvY2tzcHJveHkpKSB7CisgIGlmKGNvbm4tPmJpdHMuaXB2NgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgJiYgIShjb25uLT5iaXRzLnR1bm5lbF9wcm94eSB8fCBjb25uLT5iaXRzLnNvY2tzcHJveHkpCisjZW5kaWYKKyAgICApIHsKICAgICAvKiBXZSBjYW4ndCBkaXNhYmxlIEVQU1Ygd2hlbiBkb2luZyBJUHY2LCBzbyB0aGlzIGlzIGluc3RlYWQgYSBmYWlsICovCiAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkZhaWxlZCBFUFNWIGF0dGVtcHQsIGV4aXRpbmdcbiIpOwogICAgIHJldHVybiBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CkBAIC0xODA2LDkgKzE3OTYsMTAgQEAKICAgICAgSWYgYSBwcm94eSB0dW5uZWwgaXMgdXNlZCwgcmV0dXJucyB0aGUgb3JpZ2luYWwgaG9zdCBuYW1lIGluc3RlYWQsIGJlY2F1c2UKICAgICAgdGhlIGVmZmVjdGl2ZSBjb250cm9sIGNvbm5lY3Rpb24gYWRkcmVzcyBpcyB0aGUgcHJveHkgYWRkcmVzcywKICAgICAgbm90IHRoZSBmdHAgaG9zdC4gKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5IHx8IGNvbm4tPmJpdHMuc29ja3Nwcm94eSkKICAgICByZXR1cm4gY29ubi0+aG9zdC5uYW1lOwotCisjZW5kaWYKICAgcmV0dXJuIGNvbm4tPmlwX2FkZHJfc3RyOwogfQogCkBAIC0xODE5LDcgKzE4MTAsNyBAQAogICBDVVJMY29kZSByZXN1bHQ7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmFkZHIgPSBOVUxMOwotICBpbnQgcmM7CisgIGVudW0gcmVzb2x2ZV90IHJjOwogICB1bnNpZ25lZCBzaG9ydCBjb25uZWN0cG9ydDsgLyogdGhlIGxvY2FsIHBvcnQgY29ubmVjdCgpIHNob3VsZCB1c2UhICovCiAgIGNoYXIgKnN0ciA9ICZkYXRhLT5zdGF0ZS5idWZmZXJbNF07ICAvKiBzdGFydCBvbiB0aGUgZmlyc3QgbGV0dGVyICovCiAKQEAgLTE5MjUsNiArMTkxNiw3IEBACiAgICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF9QQVNWX1JFUExZOwogICB9CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMucHJveHkpIHsKICAgICAvKgogICAgICAqIFRoaXMgY29ubmVjdGlvbiB1c2VzIGEgcHJveHkgYW5kIHdlIG5lZWQgdG8gY29ubmVjdCB0byB0aGUgcHJveHkgYWdhaW4KQEAgLTE5NDcsNyArMTkzOSw5IEBACiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOwogICAgIH0KICAgfQotICBlbHNlIHsKKyAgZWxzZQorI2VuZGlmCisgIHsKICAgICAvKiBub3JtYWwsIGRpcmVjdCwgZnRwIGNvbm5lY3Rpb24gKi8KICAgICByYyA9IEN1cmxfcmVzb2x2KGNvbm4sIGZ0cGMtPm5ld2hvc3QsIGZ0cGMtPm5ld3BvcnQsIEZBTFNFLCAmYWRkcik7CiAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQpAQCAtMjA1MiwxMyArMjA0NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgJnllYXIsICZtb250aCwgJmRheSwgJmhvdXIsICZtaW51dGUsICZzZWNvbmQpKSB7CiAgICAgICAgIC8qIHdlIGhhdmUgYSB0aW1lLCByZWZvcm1hdCBpdCAqLwogICAgICAgICBjaGFyIHRpbWVidWZbMjRdOwotICAgICAgICB0aW1lX3Qgc2VjcyA9IHRpbWUoTlVMTCk7Ci0KICAgICAgICAgbXNucHJpbnRmKHRpbWVidWYsIHNpemVvZih0aW1lYnVmKSwKICAgICAgICAgICAgICAgICAgICIlMDRkJTAyZCUwMmQgJTAyZDolMDJkOiUwMmQgR01UIiwKICAgICAgICAgICAgICAgICAgIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKICAgICAgICAgLyogbm93LCBjb252ZXJ0IHRoaXMgaW50byBhIHRpbWUoKSB2YWx1ZTogKi8KLSAgICAgICAgZGF0YS0+aW5mby5maWxldGltZSA9IGN1cmxfZ2V0ZGF0ZSh0aW1lYnVmLCAmc2Vjcyk7CisgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBDdXJsX2dldGRhdGVfY2FwcGVkKHRpbWVidWYpOwogICAgICAgfQogCiAjaWZkZWYgQ1VSTF9GVFBfSFRUUFNUWUxFX0hFQUQKQEAgLTIyNjEsOSArMjI1MywyNSBAQAogICBjaGFyICpidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CiAKICAgLyogZ2V0IHRoZSBzaXplIGZyb20gdGhlIGFzY2lpIHN0cmluZzogKi8KLSAgaWYoZnRwY29kZSA9PSAyMTMpCisgIGlmKGZ0cGNvZGUgPT0gMjEzKSB7CisgICAgLyogVG8gYWxsb3cgc2VydmVycyB0byBwcmVwZW5kICJydWJiaXNoIiBpbiB0aGUgcmVzcG9uc2Ugc3RyaW5nLCB3ZSBzY2FuCisgICAgICAgZm9yIGFsbCB0aGUgZGlnaXRzIGF0IHRoZSBlbmQgb2YgdGhlIHJlc3BvbnNlIGFuZCBwYXJzZSBvbmx5IHRob3NlIGFzIGEKKyAgICAgICBudW1iZXIuICovCisgICAgY2hhciAqc3RhcnQgPSAmYnVmWzRdOworICAgIGNoYXIgKmZkaWdpdCA9IHN0cmNocihzdGFydCwgJ1xyJyk7CisgICAgaWYoZmRpZ2l0KSB7CisgICAgICBkbworICAgICAgICBmZGlnaXQtLTsKKyAgICAgIHdoaWxlKElTRElHSVQoKmZkaWdpdCkgJiYgKGZkaWdpdCA+IHN0YXJ0KSk7CisgICAgICBpZighSVNESUdJVCgqZmRpZ2l0KSkKKyAgICAgICAgZmRpZ2l0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZkaWdpdCA9IHN0YXJ0OwogICAgIC8qIGlnbm9yZXMgcGFyc2luZyBlcnJvcnMsIHdoaWNoIHdpbGwgbWFrZSB0aGUgc2l6ZSByZW1haW4gdW5rbm93biAqLwotICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChidWYgKyA0LCBOVUxMLCAwLCAmZmlsZXNpemUpOworICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChmZGlnaXQsIE5VTEwsIDAsICZmaWxlc2l6ZSk7CisKKyAgfQogCiAgIGlmKGluc3RhdGUgPT0gRlRQX1NJWkUpIHsKICNpZmRlZiBDVVJMX0ZUUF9IVFRQU1RZTEVfSEVBRApAQCAtMjUyNyw3ICsyNTM1LDYgQEAKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5yZXEucHJvdG9wOwogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKICAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLwogCkBAIC0yNTM1LDcgKzI1NDIsNyBAQAogICBpZigoZnRwY29kZSA9PSAzMzEpICYmIChmdHBjLT5zdGF0ZSA9PSBGVFBfVVNFUikpIHsKICAgICAvKiAzMzEgUGFzc3dvcmQgcmVxdWlyZWQgZm9yIC4uLgogICAgICAgICh0aGUgc2VydmVyIHJlcXVpcmVzIHRvIHNlbmQgdGhlIHVzZXIncyBwYXNzd29yZCB0b28pICovCi0gICAgUFBTRU5ERigmZnRwYy0+cHAsICJQQVNTICVzIiwgZnRwLT5wYXNzd2Q/ZnRwLT5wYXNzd2Q6IiIpOworICAgIFBQU0VOREYoJmZ0cGMtPnBwLCAiUEFTUyAlcyIsIGNvbm4tPnBhc3N3ZD9jb25uLT5wYXNzd2Q6IiIpOwogICAgIHN0YXRlKGNvbm4sIEZUUF9QQVNTKTsKICAgfQogICBlbHNlIGlmKGZ0cGNvZGUvMTAwID09IDIpIHsKQEAgLTI2NDMsOSArMjY1MCwxMiBAQAogI2VuZGlmCiAKICAgICAgIGlmKGRhdGEtPnNldC51c2Vfc3NsICYmCi0gICAgICAgICAoIWNvbm4tPnNzbFtGSVJTVFNPQ0tFVF0udXNlIHx8Ci0gICAgICAgICAgKGNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtGSVJTVFNPQ0tFVF0gJiYKLSAgICAgICAgICAgIWNvbm4tPnByb3h5X3NzbFtGSVJTVFNPQ0tFVF0udXNlKSkpIHsKKyAgICAgICAgICghY29ubi0+c3NsW0ZJUlNUU09DS0VUXS51c2UKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgICAgfHwgKGNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtGSVJTVFNPQ0tFVF0gJiYKKyAgICAgICAgICAgICAgIWNvbm4tPnByb3h5X3NzbFtGSVJTVFNPQ0tFVF0udXNlKQorI2VuZGlmCisgICAgICAgICAgICkpIHsKICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBhIFNTTC9UTFMgY29ubmVjdGlvbiB5ZXQsIGJ1dCBGVFBTIGlzCiAgICAgICAgICAgIHJlcXVlc3RlZC4gVHJ5IGEgRlRQUyBjb25uZWN0aW9uIG5vdyAqLwogCkBAIC0yODE3LDcgKzI4MjcsNyBAQAogICAgICAgICAgICAgc3RvcmUrKzsKICAgICAgICAgICAgIHB0cisrOwogICAgICAgICAgIH0KLSAgICAgICAgICAqc3RvcmUgPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworICAgICAgICAgICpzdG9yZSA9ICdcMCc7IC8qIG51bGwtdGVybWluYXRlICovCiAgICAgICAgIH0KICAgICAgICAgaWYoZW50cnlfZXh0cmFjdGVkKSB7CiAgICAgICAgICAgLyogSWYgdGhlIHBhdGggbmFtZSBkb2VzIG5vdCBsb29rIGxpa2UgYW4gYWJzb2x1dGUgcGF0aCAoaS5lLjogaXQKQEAgLTI4ODEsNyArMjg5MSw3IEBACiAgICAgICAgICAgcHRyKys7CiAgICAgICAgIGZvcihzdG9yZSA9IG9zOyAqcHRyICYmICpwdHIgIT0gJyAnOykKICAgICAgICAgICAqc3RvcmUrKyA9ICpwdHIrKzsKLSAgICAgICAgKnN0b3JlID0gJ1wwJzsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgICAgKnN0b3JlID0gJ1wwJzsgLyogbnVsbC10ZXJtaW5hdGUgKi8KIAogICAgICAgICAvKiBDaGVjayBmb3Igc3BlY2lhbCBzZXJ2ZXJzIGhlcmUuICovCiAKQEAgLTMxMzQsNyArMzE0NCw4IEBACiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCBmdHBjb2RlOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgY2hhciAqcGF0aCA9IE5VTEw7CisgIGNoYXIgKnJhd1BhdGggPSBOVUxMOworICBzaXplX3QgcGF0aExlbiA9IDA7CiAKICAgaWYoIWZ0cCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0zMTcyLDkgKzMxODMsNiBAQAogICAgIGJyZWFrOwogICB9CiAKLSAgLyogbm93IHN0b3JlIGEgY29weSBvZiB0aGUgZGlyZWN0b3J5IHdlIGFyZSBpbiAqLwotICBmcmVlKGZ0cGMtPnByZXZwYXRoKTsKLQogICBpZihkYXRhLT5zdGF0ZS53aWxkY2FyZG1hdGNoKSB7CiAgICAgaWYoZGF0YS0+c2V0LmNodW5rX2VuZCAmJiBmdHBjLT5maWxlKSB7CiAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKQEAgLTMxODUsNDEgKzMxOTMsNDIgQEAKICAgfQogCiAgIGlmKCFyZXN1bHQpCi0gICAgLyogZ2V0IHRoZSAicmF3IiBwYXRoICovCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcGF0aCwgTlVMTCwgVFJVRSk7CisgICAgLyogZ2V0IHRoZSB1cmwtZGVjb2RlZCAicmF3IiBwYXRoICovCisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcmF3UGF0aCwgJnBhdGhMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX0NUUkwpOwogICBpZihyZXN1bHQpIHsKICAgICAvKiBXZSBjYW4gbGltcCBhbG9uZyBhbnl3YXkgKGFuZCBzaG91bGQgdHJ5IHRvIHNpbmNlIHdlIG1heSBhbHJlYWR5IGJlIGluCiAgICAgICogdGhlIGVycm9yIHBhdGgpICovCiAgICAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7IC8qIG1hcmsgY29udHJvbCBjb25uZWN0aW9uIGFzIGJhZCAqLwogICAgIGNvbm5jbG9zZShjb25uLCAiRlRQOiBvdXQgb2YgbWVtb3J5ISIpOyAvKiBtYXJrIGZvciBjb25uZWN0aW9uIGNsb3N1cmUgKi8KKyAgICBmcmVlKGZ0cGMtPnByZXZwYXRoKTsKICAgICBmdHBjLT5wcmV2cGF0aCA9IE5VTEw7IC8qIG5vIHBhdGggcmVtZW1iZXJpbmcgKi8KICAgfQotICBlbHNlIHsKLSAgICBzaXplX3QgZmxlbiA9IGZ0cGMtPmZpbGU/c3RybGVuKGZ0cGMtPmZpbGUpOjA7IC8qIGZpbGUgaXMgInJhdyIgYWxyZWFkeSAqLwotICAgIHNpemVfdCBkbGVuID0gc3RybGVuKHBhdGgpLWZsZW47Ci0gICAgaWYoIWZ0cGMtPmN3ZGZhaWwpIHsKLSAgICAgIGZ0cGMtPnByZXZtZXRob2QgPSBkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2Q7Ci0gICAgICBpZihkbGVuICYmIChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgIT0gRlRQRklMRV9OT0NXRCkpIHsKLSAgICAgICAgZnRwYy0+cHJldnBhdGggPSBwYXRoOwotICAgICAgICBpZihmbGVuKQotICAgICAgICAgIC8qIGlmICdwYXRoJyBpcyBub3QgdGhlIHdob2xlIHN0cmluZyAqLwotICAgICAgICAgIGZ0cGMtPnByZXZwYXRoW2RsZW5dID0gMDsgLyogdGVybWluYXRlICovCisgIGVsc2UgeyAvKiByZW1lbWJlciB3b3JraW5nIGRpcmVjdG9yeSBmb3IgY29ubmVjdGlvbiByZXVzZSAqLworICAgIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYgKHJhd1BhdGhbMF0gPT0gJy8nKSkKKyAgICAgIGZyZWUocmF3UGF0aCk7IC8qIGZ1bGwgcGF0aCA9PiBubyBDV0RzIGhhcHBlbmVkID0+IGtlZXAgZnRwYy0+cHJldnBhdGggKi8KKyAgICBlbHNlIHsKKyAgICAgIGZyZWUoZnRwYy0+cHJldnBhdGgpOworCisgICAgICBpZighZnRwYy0+Y3dkZmFpbCkgeworICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkKKyAgICAgICAgICBwYXRoTGVuID0gMDsgLyogcmVsYXRpdmUgcGF0aCA9PiB3b3JraW5nIGRpcmVjdG9yeSBpcyBGVFAgaG9tZSAqLworICAgICAgICBlbHNlCisgICAgICAgICAgcGF0aExlbiAtPSBmdHBjLT5maWxlP3N0cmxlbihmdHBjLT5maWxlKTowOyAvKiBmaWxlIGlzIHVybC1kZWNvZGVkICovCisKKyAgICAgICAgcmF3UGF0aFtwYXRoTGVuXSA9ICdcMCc7CisgICAgICAgIGZ0cGMtPnByZXZwYXRoID0gcmF3UGF0aDsKICAgICAgIH0KICAgICAgIGVsc2UgewotICAgICAgICBmcmVlKHBhdGgpOwotICAgICAgICAvKiB3ZSBuZXZlciBjaGFuZ2VkIGRpciAqLwotICAgICAgICBmdHBjLT5wcmV2cGF0aCA9IHN0cmR1cCgiIik7Ci0gICAgICAgIGlmKCFmdHBjLT5wcmV2cGF0aCkKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgZnJlZShyYXdQYXRoKTsKKyAgICAgICAgZnRwYy0+cHJldnBhdGggPSBOVUxMOyAvKiBubyBwYXRoICovCiAgICAgICB9Ci0gICAgICBpZihmdHBjLT5wcmV2cGF0aCkKLSAgICAgICAgaW5mb2YoZGF0YSwgIlJlbWVtYmVyaW5nIHdlIGFyZSBpbiBkaXIgXCIlc1wiXG4iLCBmdHBjLT5wcmV2cGF0aCk7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgZnRwYy0+cHJldnBhdGggPSBOVUxMOyAvKiBubyBwYXRoICovCi0gICAgICBmcmVlKHBhdGgpOwotICAgIH0KKworICAgIGlmKGZ0cGMtPnByZXZwYXRoKQorICAgICAgaW5mb2YoZGF0YSwgIlJlbWVtYmVyaW5nIHdlIGFyZSBpbiBkaXIgXCIlc1wiXG4iLCBmdHBjLT5wcmV2cGF0aCk7CiAgIH0KKwogICAvKiBmcmVlIHRoZSBkaXIgdHJlZSBhbmQgZmlsZSBwYXJ0cyAqLwogICBmcmVlZGlycyhmdHBjKTsKIApAQCAtMzI0Miw5ICszMjUxLDkgQEAKICAgICB9CiAKICAgICBpZihjb25uLT5zc2xbU0VDT05EQVJZU09DS0VUXS51c2UpIHsKLSAgICAgIC8qIFRoZSBzZWNvbmRhcnkgc29ja2V0IGlzIHVzaW5nIFNTTCBzbyB3ZSBtdXN0IGNsb3NlIGRvd24gdGhhdCBwYXJ0Ci0gICAgICAgICBmaXJzdCBiZWZvcmUgd2UgY2xvc2UgdGhlIHNvY2tldCBmb3IgcmVhbCAqLwotICAgICAgQ3VybF9zc2xfY2xvc2UoY29ubiwgU0VDT05EQVJZU09DS0VUKTsKKyAgICAgIC8qIFRoZSBzZWNvbmRhcnkgc29ja2V0IHVzZWQgU1NMIHNvIHdlIG11c3QgY2xvc2UgZG93biB0aGF0IHBhcnQgZmlyc3QKKyAgICAgICAgIGJlZm9yZSB3ZSBjbG9zZSB0aGUgc29ja2V0IGZvciByZWFsICovCisgICAgICByZXN1bHQgPSBDdXJsX3NzbF9zaHV0ZG93bihjb25uLCBTRUNPTkRBUllTT0NLRVQpOwogCiAgICAgICAvKiBOb3RlIHRoYXQgd2Uga2VlcCAidXNlIiBzZXQgdG8gVFJVRSBzaW5jZSB0aGF0IChuZXh0KSBjb25uZWN0aW9uIGlzCiAgICAgICAgICBzdGlsbCByZXF1ZXN0ZWQgdG8gdXNlIFNTTCAqLwpAQCAtMzI2MCw3ICszMjY5LDcgQEAKICAgICAgKiBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLiBUaGlzIGhhcHBlbnMgd2hlbiBkb2luZyB0aHJvdWdoIE5BVHMgZXRjIHRoYXQKICAgICAgKiBhYmFuZG9uIG9sZCBzaWxlbnQgY29ubmVjdGlvbnMuCiAgICAgICovCi0gICAgbG9uZyBvbGRfdGltZSA9IHBwLT5yZXNwb25zZV90aW1lOworICAgIHRpbWVkaWZmX3Qgb2xkX3RpbWUgPSBwcC0+cmVzcG9uc2VfdGltZTsKIAogICAgIHBwLT5yZXNwb25zZV90aW1lID0gNjAqMTAwMDsgLyogZ2l2ZSBpdCBvbmx5IGEgbWludXRlIGZvciBub3cgKi8KICAgICBwcC0+cmVzcG9uc2UgPSBDdXJsX25vdygpOyAvKiB0aW1lb3V0IHJlbGF0aXZlIG5vdyAqLwpAQCAtMzQ1Myw3ICszNDYyLDcgQEAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogc3RhdGljIHZvaWQKIGZ0cF9wYXN2X3ZlcmJvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICphaSwKKyAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpLAogICAgICAgICAgICAgICAgICBjaGFyICpuZXdob3N0LCAvKiBhc2NpaSB2ZXJzaW9uICovCiAgICAgICAgICAgICAgICAgIGludCBwb3J0KQogewpAQCAtMzUxMSw2ICszNTIwLDcgQEAKICAgICB9CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgcmVzdWx0ID0gQ3VybF9wcm94eV9jb25uZWN0KGNvbm4sIFNFQ09OREFSWVNPQ0tFVCk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzUyMSw3ICszNTMxLDcgQEAKICAgaWYoY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYgY29ubi0+Yml0cy5odHRwcHJveHkgJiYKICAgICAgQ3VybF9jb25uZWN0X29uZ29pbmcoY29ubikpCiAgICAgcmV0dXJuIHJlc3VsdDsKLQorI2VuZGlmCiAKICAgaWYoZnRwYy0+c3RhdGUpIHsKICAgICAvKiBhbHJlYWR5IGluIGEgc3RhdGUgc28gc2tpcCB0aGUgaW5pdGlhbCBjb21tYW5kcy4KQEAgLTM1MzIsMTQgKzM1NDIsMTMgQEAKIAogICAgIC8qIGlmIHdlIGdvdCBhbiBlcnJvciBvciBpZiB3ZSBkb24ndCB3YWl0IGZvciBhIGRhdGEgY29ubmVjdGlvbiByZXR1cm4KICAgICAgICBpbW1lZGlhdGVseSAqLwotICAgIGlmKHJlc3VsdCB8fCAoZnRwYy0+d2FpdF9kYXRhX2Nvbm4gIT0gVFJVRSkpCisgICAgaWYocmVzdWx0IHx8ICFmdHBjLT53YWl0X2RhdGFfY29ubikKICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBpZihmdHBjLT53YWl0X2RhdGFfY29ubikKLSAgICAgIC8qIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIEZUUCBzdGF0ZSBtYWNoaW5lIGhlcmUsICpjb21wbGV0ZSB3aWxsIGJlCi0gICAgICAgICBUUlVFIGJ1dCBzbyBpcyBmdHBjLT53YWl0X2RhdGFfY29ubiwgd2hpY2ggc2F5cyB3ZSBuZWVkIHRvIHdhaXQgZm9yCi0gICAgICAgICB0aGUgZGF0YSBjb25uZWN0aW9uIGFuZCB0aGVyZWZvcmUgd2UncmUgbm90IGFjdHVhbGx5IGNvbXBsZXRlICovCi0gICAgICAqY29tcGxldGVwID0gMDsKKyAgICAvKiBpZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBGVFAgc3RhdGUgbWFjaGluZSBoZXJlLCAqY29tcGxldGUgd2lsbCBiZQorICAgICAgIFRSVUUgYnV0IHNvIGlzIGZ0cGMtPndhaXRfZGF0YV9jb25uLCB3aGljaCBzYXlzIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlCisgICAgICAgZGF0YSBjb25uZWN0aW9uIGFuZCB0aGVyZWZvcmUgd2UncmUgbm90IGFjdHVhbGx5IGNvbXBsZXRlICovCisgICAgKmNvbXBsZXRlcCA9IDA7CiAgIH0KIAogICBpZihmdHAtPnRyYW5zZmVyIDw9IEZUUFRSQU5TRkVSX0lORk8pIHsKQEAgLTM1NzMsMTMgKzM1ODIsOCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICByZXN1bHQgPSBmdHBfbXVsdGlfc3RhdGVtYWNoKGNvbm4sICZjb21wbGV0ZSk7Ci0gICAgICBpZihmdHBjLT53YWl0X2RhdGFfY29ubikKLSAgICAgICAgLyogaWYgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgRlRQIHN0YXRlIG1hY2hpbmUgaGVyZSwgKmNvbXBsZXRlIHdpbGwgYmUKLSAgICAgICAgICAgVFJVRSBidXQgc28gaXMgZnRwYy0+d2FpdF9kYXRhX2Nvbm4sIHdoaWNoIHNheXMgd2UgbmVlZCB0byB3YWl0IGZvcgotICAgICAgICAgICB0aGUgZGF0YSBjb25uZWN0aW9uIGFuZCB0aGVyZWZvcmUgd2UncmUgbm90IGFjdHVhbGx5IGNvbXBsZXRlICovCi0gICAgICAgICpjb21wbGV0ZXAgPSAwOwotICAgICAgZWxzZQotICAgICAgICAqY29tcGxldGVwID0gKGludCljb21wbGV0ZTsKKyAgICAgIC8qIGZ0cGMtPndhaXRfZGF0YV9jb25uIGlzIGFsd2F5cyBmYWxzZSBoZXJlICovCisgICAgICAqY29tcGxldGVwID0gKGludCljb21wbGV0ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAvKiBkb3dubG9hZCAqLwpAQCAtMzYxOSwxMCArMzYyMyw4IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCi0gIGlmKCFyZXN1bHQgJiYgKGZ0cC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkpCi0gICAgLyogbm8gZGF0YSB0byB0cmFuc2Zlci4gRklYOiBpdCBmZWVscyBsaWtlIGEga2x1ZGdlIHRvIGhhdmUgdGhpcyBoZXJlCi0gICAgICAgdG9vISAqLwotICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOwogCiAgIGlmKCFmdHBjLT53YWl0X2RhdGFfY29ubikgewogICAgIC8qIG5vIHdhaXRpbmcgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24gc28gdGhpcyBpcyBub3cgY29tcGxldGUgKi8KQEAgLTQxMDAsMTg2ICs0MTAyLDE0MiBAQAogICAvKiB0aGUgZnRwIHN0cnVjdCBpcyBhbHJlYWR5IGluaXRlZCBpbiBmdHBfY29ubmVjdCgpICovCiAgIHN0cnVjdCBGVFAgKmZ0cCA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOwotICBjb25zdCBjaGFyICpzbGFzaF9wb3M7ICAvKiBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgJy8nIGNoYXIgaW4gY3VycG9zICovCi0gIGNvbnN0IGNoYXIgKnBhdGhfdG9fdXNlID0gZnRwLT5wYXRoOwotICBjb25zdCBjaGFyICpjdXJfcG9zOwotICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IE5VTEw7Ci0KLSAgY3VyX3BvcyA9IHBhdGhfdG9fdXNlOyAvKiBjdXJyZW50IHBvc2l0aW9uIGluIHBhdGguIHBvaW50IGF0IHRoZSBiZWdpbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgcGF0aCBjb21wb25lbnQgKi8KKyAgY29uc3QgY2hhciAqc2xhc2hQb3MgPSBOVUxMOworICBjb25zdCBjaGFyICpmaWxlTmFtZSA9IE5VTEw7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBjaGFyICpyYXdQYXRoID0gTlVMTDsgLyogdXJsLWRlY29kZWQgInJhdyIgcGF0aCAqLworICBzaXplX3QgcGF0aExlbiA9IDA7CiAKICAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7CiAgIGZ0cGMtPmN3ZGZhaWwgPSBGQUxTRTsKIAorICAvKiB1cmwtZGVjb2RlIGZ0cCBwYXRoIGJlZm9yZSBmdXJ0aGVyIGV2YWx1YXRpb24gKi8KKyAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcmF3UGF0aCwgJnBhdGhMZW4sIFJFSkVDVF9DVFJMKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKICAgc3dpdGNoKGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCkgewotICBjYXNlIEZUUEZJTEVfTk9DV0Q6Ci0gICAgLyogZmFzdGVzdCwgYnV0IGxlc3Mgc3RhbmRhcmQtY29tcGxpYW50ICovCisgICAgY2FzZSBGVFBGSUxFX05PQ1dEOiAvKiBmYXN0ZXN0LCBidXQgbGVzcyBzdGFuZGFyZC1jb21wbGlhbnQgKi8KIAotICAgIC8qCi0gICAgICBUaGUgYmVzdCB0aW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHBhdGggaXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpcyByaWdodAotICAgICAgaGVyZS4gc286Ci0KLSAgICAgIHRoZSBmaXJzdCBjb25kaXRpb24gaW4gdGhlIGlmKCkgcmlnaHQgaGVyZSwgaXMgdGhlcmUganVzdCBpbiBjYXNlCi0gICAgICBzb21lb25lIGRlY2lkZXMgdG8gc2V0IHBhdGggdG8gTlVMTCBvbmUgZGF5Ci0gICAqLwotICAgIGlmKHBhdGhfdG9fdXNlWzBdICYmCi0gICAgICAgKHBhdGhfdG9fdXNlW3N0cmxlbihwYXRoX3RvX3VzZSkgLSAxXSAhPSAnLycpICkKLSAgICAgIGZpbGVuYW1lID0gcGF0aF90b191c2U7ICAvKiB0aGlzIGlzIGEgZnVsbCBmaWxlIHBhdGggKi8KLSAgICAvKgotICAgICAgZWxzZSB7Ci0gICAgICAgIGZ0cGMtPmZpbGUgaXMgbm90IHVzZWQgYW55d2hlcmUgb3RoZXIgdGhhbiBmb3Igb3BlcmF0aW9ucyBvbiBhIGZpbGUuCi0gICAgICAgIEluIG90aGVyIHdvcmRzLCBuZXZlciBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuCi0gICAgICAgIFNvIHdlIGNhbiBzYWZlbHkgbGVhdmUgZmlsZW5hbWUgYXMgTlVMTCBoZXJlIGFuZCB1c2UgaXQgYXMgYQotICAgICAgICBhcmd1bWVudCBpbiBkaXIvZmlsZSBkZWNpc2lvbnMuCi0gICAgICB9Ci0gICAgKi8KLSAgICBicmVhazsKLQotICBjYXNlIEZUUEZJTEVfU0lOR0xFQ1dEOgotICAgIC8qIGdldCB0aGUgbGFzdCBzbGFzaCAqLwotICAgIGlmKCFwYXRoX3RvX3VzZVswXSkgewotICAgICAgLyogbm8gZGlyLCBubyBmaWxlICovCi0gICAgICBmdHBjLT5kaXJkZXB0aCA9IDA7CisgICAgICBpZigocGF0aExlbiA+IDApICYmIChyYXdQYXRoW3BhdGhMZW4gLSAxXSAhPSAnLycpKQorICAgICAgICAgIGZpbGVOYW1lID0gcmF3UGF0aDsgIC8qIHRoaXMgaXMgYSBmdWxsIGZpbGUgcGF0aCAqLworICAgICAgLyoKKyAgICAgICAgZWxzZTogZnRwYy0+ZmlsZSBpcyBub3QgdXNlZCBhbnl3aGVyZSBvdGhlciB0aGFuIGZvciBvcGVyYXRpb25zIG9uCisgICAgICAgICAgICAgIGEgZmlsZS4gSW4gb3RoZXIgd29yZHMsIG5ldmVyIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgU28gd2UgY2FuIHNhZmVseSBsZWF2ZSBmaWxlbmFtZSBhcyBOVUxMIGhlcmUgYW5kIHVzZSBpdCBhcyBhCisgICAgICAgICAgICAgIGFyZ3VtZW50IGluIGRpci9maWxlIGRlY2lzaW9ucy4KKyAgICAgICovCiAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc2xhc2hfcG9zID0gc3RycmNocihjdXJfcG9zLCAnLycpOwotICAgIGlmKHNsYXNoX3BvcyB8fCAhKmN1cl9wb3MpIHsKLSAgICAgIHNpemVfdCBkaXJsZW4gPSBzbGFzaF9wb3MtY3VyX3BvczsKLSAgICAgIENVUkxjb2RlIHJlc3VsdDsKIAotICAgICAgZnRwYy0+ZGlycyA9IGNhbGxvYygxLCBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOwotICAgICAgaWYoIWZ0cGMtPmRpcnMpCi0gICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGNhc2UgRlRQRklMRV9TSU5HTEVDV0Q6CisgICAgICBzbGFzaFBvcyA9IHN0cnJjaHIocmF3UGF0aCwgJy8nKTsKKyAgICAgIGlmKHNsYXNoUG9zKSB7CisgICAgICAgIC8qIGdldCBwYXRoIGJlZm9yZSBsYXN0IHNsYXNoLCBleGNlcHQgZm9yIC8gKi8KKyAgICAgICAgc2l6ZV90IGRpcmxlbiA9IHNsYXNoUG9zIC0gcmF3UGF0aDsKKyAgICAgICAgaWYoZGlybGVuID09IDApCisgICAgICAgICAgICBkaXJsZW4rKzsKIAotICAgICAgaWYoIWRpcmxlbikKLSAgICAgICAgZGlybGVuKys7CisgICAgICAgIGZ0cGMtPmRpcnMgPSBjYWxsb2MoMSwgc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKKyAgICAgICAgaWYoIWZ0cGMtPmRpcnMpIHsKKyAgICAgICAgICBmcmVlKHJhd1BhdGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICB9CiAKLSAgICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIHNsYXNoX3BvcyA/IGN1cl9wb3MgOiAiLyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaF9wb3MgPyBkaXJsZW4gOiAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cGMtPmRpcnNbMF0sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBmcmVlZGlycyhmdHBjKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgZnRwYy0+ZGlyc1swXSA9IGNhbGxvYygxLCBkaXJsZW4gKyAxKTsKKyAgICAgICAgaWYoIWZ0cGMtPmRpcnNbMF0pIHsKKyAgICAgICAgICBmcmVlKHJhd1BhdGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShmdHBjLT5kaXJzWzBdLCByYXdQYXRoLCBkaXJsZW4pOworICAgICAgICBmdHBjLT5kaXJkZXB0aCA9IDE7IC8qIHdlIGNvbnNpZGVyIGl0IHRvIGJlIGEgc2luZ2xlIGRpciAqLworICAgICAgICBmaWxlTmFtZSA9IHNsYXNoUG9zICsgMTsgLyogcmVzdCBpcyBmaWxlIG5hbWUgKi8KICAgICAgIH0KLSAgICAgIGZ0cGMtPmRpcmRlcHRoID0gMTsgLyogd2UgY29uc2lkZXIgaXQgdG8gYmUgYSBzaW5nbGUgZGlyICovCi0gICAgICBmaWxlbmFtZSA9IHNsYXNoX3BvcyA/IHNsYXNoX3BvcyArIDEgOiBjdXJfcG9zOyAvKiByZXN0IGlzIGZpbGUgbmFtZSAqLwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmaWxlbmFtZSA9IGN1cl9wb3M7ICAvKiB0aGlzIGlzIGEgZmlsZSBuYW1lIG9ubHkgKi8KLSAgICBicmVhazsKKyAgICAgIGVsc2UKKyAgICAgICAgZmlsZU5hbWUgPSByYXdQYXRoOyAvKiBmaWxlIG5hbWUgb25seSAob3IgZW1wdHkpICovCisgICAgICBicmVhazsKIAotICBkZWZhdWx0OiAvKiBhbGxvdyBwcmV0dHkgbXVjaCBhbnl0aGluZyAqLwotICBjYXNlIEZUUEZJTEVfTVVMVElDV0Q6Ci0gICAgZnRwYy0+ZGlyZGVwdGggPSAwOwotICAgIGZ0cGMtPmRpcmFsbG9jID0gNTsgLyogZGVmYXVsdCBkaXIgZGVwdGggdG8gYWxsb2NhdGUgKi8KLSAgICBmdHBjLT5kaXJzID0gY2FsbG9jKGZ0cGMtPmRpcmFsbG9jLCBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOwotICAgIGlmKCFmdHBjLT5kaXJzKQotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZGVmYXVsdDogLyogYWxsb3cgcHJldHR5IG11Y2ggYW55dGhpbmcgKi8KKyAgICBjYXNlIEZUUEZJTEVfTVVMVElDV0Q6IHsKKyAgICAgIC8qIGN1cnJlbnQgcG9zaXRpb246IGJlZ2luIG9mIG5leHQgcGF0aCBjb21wb25lbnQgKi8KKyAgICAgIGNvbnN0IGNoYXIgKmN1clBvcyA9IHJhd1BhdGg7CiAKLSAgICAvKiB3ZSBoYXZlIGEgc3BlY2lhbCBjYXNlIGZvciBsaXN0aW5nIHRoZSByb290IGRpciBvbmx5ICovCi0gICAgaWYoIXN0cmNtcChwYXRoX3RvX3VzZSwgIi8iKSkgewotICAgICAgY3VyX3BvcysrOyAvKiBtYWtlIGl0IHBvaW50IHRvIHRoZSB6ZXJvIGJ5dGUgKi8KLSAgICAgIGZ0cGMtPmRpcnNbMF0gPSBzdHJkdXAoIi8iKTsKLSAgICAgIGZ0cGMtPmRpcmRlcHRoKys7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgLyogcGFyc2UgdGhlIFVSTCBwYXRoIGludG8gc2VwYXJhdGUgcGF0aCBjb21wb25lbnRzICovCi0gICAgICB3aGlsZSgoc2xhc2hfcG9zID0gc3RyY2hyKGN1cl9wb3MsICcvJykpICE9IE5VTEwpIHsKLSAgICAgICAgLyogMSBvciAwIHBvaW50ZXIgb2Zmc2V0IHRvIGluZGljYXRlIGFic29sdXRlIGRpcmVjdG9yeSAqLwotICAgICAgICBzc2l6ZV90IGFic29sdXRlX2RpciA9ICgoY3VyX3BvcyAtIGZ0cC0+cGF0aCA+IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdHBjLT5kaXJkZXB0aCA9PSAwKSk/MTowOworICAgICAgaW50IGRpckFsbG9jID0gMDsgLyogbnVtYmVyIG9mIGVudHJpZXMgYWxsb2NhdGVkIGZvciB0aGUgJ2RpcnMnIGFycmF5ICovCisgICAgICBjb25zdCBjaGFyICpzdHIgPSByYXdQYXRoOworICAgICAgZm9yKDsgKnN0ciAhPSAwOyArK3N0cikKKyAgICAgICAgaWYgKCpzdHIgPT0gJy8nKQorICAgICAgICAgICsrZGlyQWxsb2M7CiAKLSAgICAgICAgLyogc2VlayBvdXQgdGhlIG5leHQgcGF0aCBjb21wb25lbnQgKi8KLSAgICAgICAgaWYoc2xhc2hfcG9zLWN1cl9wb3MpIHsKKyAgICAgIGlmKGRpckFsbG9jID4gMCkgeworICAgICAgICBmdHBjLT5kaXJzID0gY2FsbG9jKGRpckFsbG9jLCBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOworICAgICAgICBpZighZnRwYy0+ZGlycykgeworICAgICAgICAgIGZyZWUocmF3UGF0aCk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIH0KKworICAgICAgICAvKiBwYXJzZSB0aGUgVVJMIHBhdGggaW50byBzZXBhcmF0ZSBwYXRoIGNvbXBvbmVudHMgKi8KKyAgICAgICAgd2hpbGUoKHNsYXNoUG9zID0gc3RyY2hyKGN1clBvcywgJy8nKSkgIT0gTlVMTCkgeworICAgICAgICAgIHNpemVfdCBjb21wTGVuID0gc2xhc2hQb3MgLSBjdXJQb3M7CisKKyAgICAgICAgICAvKiBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2g6IGFkZCB0aGF0IGFzIGEgZGlyZWN0b3J5ICovCisgICAgICAgICAgaWYoKGNvbXBMZW4gPT0gMCkgJiYgKGZ0cGMtPmRpcmRlcHRoID09IDApKQorICAgICAgICAgICAgKytjb21wTGVuOworCiAgICAgICAgICAgLyogd2Ugc2tpcCBlbXB0eSBwYXRoIGNvbXBvbmVudHMsIGxpa2UgIngvL3kiIHNpbmNlIHRoZSBGVFAgY29tbWFuZAogICAgICAgICAgICAgIENXRCByZXF1aXJlcyBhIHBhcmFtZXRlciBhbmQgYSBub24tZXhpc3RlbnQgcGFyYW1ldGVyIGEpIGRvZXNuJ3QKICAgICAgICAgICAgICB3b3JrIG9uIG1hbnkgc2VydmVycyBhbmQgYikgaGFzIG5vIGVmZmVjdCBvbiB0aGUgb3RoZXJzLiAqLwotICAgICAgICAgIHNpemVfdCBsZW4gPSBzbGFzaF9wb3MgLSBjdXJfcG9zICsgYWJzb2x1dGVfZGlyOwotICAgICAgICAgIENVUkxjb2RlIHJlc3VsdCA9Ci0gICAgICAgICAgICBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBjdXJfcG9zIC0gYWJzb2x1dGVfZGlyLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aF0sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgY3VyX3BvcyA9IHNsYXNoX3BvcyArIDE7IC8qIGp1bXAgdG8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAqLwotICAgICAgICAgIGlmKCFmdHBjLT5kaXJkZXB0aCkgewotICAgICAgICAgICAgLyogcGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoLCBhZGQgdGhhdCBhcyBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aF0gPSBzdHJkdXAoIi8iKTsKLSAgICAgICAgICAgIGlmKCFmdHBjLT5kaXJzW2Z0cGMtPmRpcmRlcHRoKytdKSB7IC8qIHJ1biBvdXQgb2YgbWVtb3J5IC4uLiAqLwotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAibm8gbWVtb3J5Iik7Ci0gICAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOworICAgICAgICAgIGlmKGNvbXBMZW4gPiAwKSB7CisgICAgICAgICAgICBjaGFyICpjb21wID0gY2FsbG9jKDEsIGNvbXBMZW4gKyAxKTsKKyAgICAgICAgICAgIGlmKCFjb21wKSB7CisgICAgICAgICAgICAgIGZyZWUocmF3UGF0aCk7CiAgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RybmNweShjb21wLCBjdXJQb3MsIGNvbXBMZW4pOworICAgICAgICAgICAgZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aCsrXSA9IGNvbXA7CiAgICAgICAgICAgfQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VyX3BvcyA9IHNsYXNoX3BvcyArIDE7IC8qIGp1bXAgdG8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAqLwotICAgICAgICBpZigrK2Z0cGMtPmRpcmRlcHRoID49IGZ0cGMtPmRpcmFsbG9jKSB7Ci0gICAgICAgICAgLyogZW5sYXJnZSBhcnJheSAqLwotICAgICAgICAgIGNoYXIgKipiaWdnZXI7Ci0gICAgICAgICAgZnRwYy0+ZGlyYWxsb2MgKj0gMjsgLyogZG91YmxlIHRoZSBzaXplIGVhY2ggdGltZSAqLwotICAgICAgICAgIGJpZ2dlciA9IHJlYWxsb2MoZnRwYy0+ZGlycywgZnRwYy0+ZGlyYWxsb2MgKiBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOwotICAgICAgICAgIGlmKCFiaWdnZXIpIHsKLSAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGZ0cGMtPmRpcnMgPSBiaWdnZXI7CisgICAgICAgICAgY3VyUG9zID0gc2xhc2hQb3MgKyAxOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBERUJVR0FTU0VSVChmdHBjLT5kaXJkZXB0aCA8PSBkaXJBbGxvYyk7CisgICAgICBmaWxlTmFtZSA9IGN1clBvczsgLyogdGhlIHJlc3QgaXMgdGhlIGZpbGUgbmFtZSAob3IgZW1wdHkpICovCiAgICAgfQotICAgIGZpbGVuYW1lID0gY3VyX3BvczsgIC8qIHRoZSByZXN0IGlzIHRoZSBmaWxlIG5hbWUgKi8KICAgICBicmVhazsKICAgfSAvKiBzd2l0Y2ggKi8KIAotICBpZihmaWxlbmFtZSAmJiAqZmlsZW5hbWUpIHsKLSAgICBDVVJMY29kZSByZXN1bHQgPQotICAgICAgQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgZmlsZW5hbWUsIDAsICAmZnRwYy0+ZmlsZSwgTlVMTCwgVFJVRSk7Ci0KLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gIH0KKyAgaWYoZmlsZU5hbWUgJiYgKmZpbGVOYW1lKQorICAgIGZ0cGMtPmZpbGUgPSBzdHJkdXAoZmlsZU5hbWUpOwogICBlbHNlCi0gICAgZnRwYy0+ZmlsZSA9IE5VTEw7IC8qIGluc3RlYWQgb2YgcG9pbnQgdG8gYSB6ZXJvIGJ5dGUsIHdlIG1ha2UgaXQgYSBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgKi8KKyAgICBmdHBjLT5maWxlID0gTlVMTDsgLyogaW5zdGVhZCBvZiBwb2ludCB0byBhIHplcm8gYnl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSBtYWtlIGl0IGEgTlVMTCBwb2ludGVyICovCiAKICAgaWYoZGF0YS0+c2V0LnVwbG9hZCAmJiAhZnRwYy0+ZmlsZSAmJiAoZnRwLT50cmFuc2ZlciA9PSBGVFBUUkFOU0ZFUl9CT0RZKSkgewogICAgIC8qIFdlIG5lZWQgYSBmaWxlIG5hbWUgd2hlbiB1cGxvYWRpbmcuIFJldHVybiBlcnJvciEgKi8KICAgICBmYWlsZihkYXRhLCAiVXBsb2FkaW5nIHRvIGEgVVJMIHdpdGhvdXQgYSBmaWxlIG5hbWUhIik7CisgICAgZnJlZShyYXdQYXRoKTsKICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgfQogCiAgIGZ0cGMtPmN3ZGRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSAqLwogCi0gIGlmKGZ0cGMtPnByZXZwYXRoKSB7Ci0gICAgLyogcHJldnBhdGggaXMgInJhdyIgc28gd2UgY29udmVydCB0aGUgaW5wdXQgcGF0aCBiZWZvcmUgd2UgY29tcGFyZSB0aGUKLSAgICAgICBzdHJpbmdzICovCi0gICAgc2l6ZV90IGRsZW47Ci0gICAgY2hhciAqcGF0aDsKLSAgICBDVVJMY29kZSByZXN1bHQgPQotICAgICAgQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgZnRwLT5wYXRoLCAwLCAmcGF0aCwgJmRsZW4sIFRSVUUpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgZnJlZWRpcnMoZnRwYyk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgaWYoKGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9PSBGVFBGSUxFX05PQ1dEKSAmJiAocmF3UGF0aFswXSA9PSAnLycpKQorICAgIGZ0cGMtPmN3ZGRvbmUgPSBUUlVFOyAvKiBza2lwIENXRCBmb3IgYWJzb2x1dGUgcGF0aHMgKi8KKyAgZWxzZSB7IC8qIG5ld2x5IGNyZWF0ZWQgRlRQIGNvbm5lY3Rpb25zIGFyZSBhbHJlYWR5IGluIGVudHJ5IHBhdGggKi8KKyAgICBjb25zdCBjaGFyICpvbGRQYXRoID0gY29ubi0+Yml0cy5yZXVzZSA/IGZ0cGMtPnByZXZwYXRoIDogIiI7CisgICAgaWYob2xkUGF0aCkgeworICAgICAgc2l6ZV90IG4gPSBwYXRoTGVuOworICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID09IEZUUEZJTEVfTk9DV0QpCisgICAgICAgIG4gPSAwOyAvKiBDV0QgdG8gZW50cnkgZm9yIHJlbGF0aXZlIHBhdGhzICovCisgICAgICBlbHNlCisgICAgICAgIG4gLT0gZnRwYy0+ZmlsZT9zdHJsZW4oZnRwYy0+ZmlsZSk6MDsKIAotICAgIGRsZW4gLT0gZnRwYy0+ZmlsZT9zdHJsZW4oZnRwYy0+ZmlsZSk6MDsKLSAgICBpZigoZGxlbiA9PSBzdHJsZW4oZnRwYy0+cHJldnBhdGgpKSAmJgotICAgICAgICFzdHJuY21wKHBhdGgsIGZ0cGMtPnByZXZwYXRoLCBkbGVuKSAmJgotICAgICAgIChmdHBjLT5wcmV2bWV0aG9kID09IGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCkpIHsKLSAgICAgIGluZm9mKGRhdGEsICJSZXF1ZXN0IGhhcyBzYW1lIHBhdGggYXMgcHJldmlvdXMgdHJhbnNmZXJcbiIpOwotICAgICAgZnRwYy0+Y3dkZG9uZSA9IFRSVUU7CisgICAgICBpZigoc3RybGVuKG9sZFBhdGgpID09IG4pICYmICFzdHJuY21wKHJhd1BhdGgsIG9sZFBhdGgsIG4pKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJSZXF1ZXN0IGhhcyBzYW1lIHBhdGggYXMgcHJldmlvdXMgdHJhbnNmZXJcbiIpOworICAgICAgICBmdHBjLT5jd2Rkb25lID0gVFJVRTsKKyAgICAgIH0KICAgICB9Ci0gICAgZnJlZShwYXRoKTsKICAgfQogCisgIGZyZWUocmF3UGF0aCk7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApAQCAtNDQwMSw3ICs0MzU5LDYgQEAKICAgICBjaGFyIGNvbW1hbmQ7CiAgICAgKnR5cGUgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGl0IHdhcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBob3N0bmFtZSAqLwogICAgIGNvbW1hbmQgPSBDdXJsX3Jhd190b3VwcGVyKHR5cGVbNl0pOwotICAgIGNvbm4tPmJpdHMudHlwZV9zZXQgPSBUUlVFOwogCiAgICAgc3dpdGNoKGNvbW1hbmQpIHsKICAgICBjYXNlICdBJzogLyogQVNDSUkgbW9kZSAqLwpAQCAtNDQyMywxOCArNDM4MCw2IEBACiAgIC8qIGdldCBzb21lIGluaXRpYWwgZGF0YSBpbnRvIHRoZSBmdHAgc3RydWN0ICovCiAgIGZ0cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9CT0RZOwogICBmdHAtPmRvd25sb2Fkc2l6ZSA9IDA7Ci0KLSAgLyogTm8gbmVlZCB0byBkdXBsaWNhdGUgdXNlcitwYXNzd29yZCwgdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB3b24ndCBjaGFuZ2UKLSAgICAgZHVyaW5nIGEgc2Vzc2lvbiwgYnV0IHdlIHJlLWluaXQgdGhlbSBoZXJlIHNpbmNlIG9uIHN1YnNlcXVlbnQgaW5pdHMKLSAgICAgc2luY2UgdGhlIGNvbm4gc3RydWN0IG1heSBoYXZlIGNoYW5nZWQgb3IgYmVlbiByZXBsYWNlZC4KLSAgKi8KLSAgZnRwLT51c2VyID0gY29ubi0+dXNlcjsKLSAgZnRwLT5wYXNzd2QgPSBjb25uLT5wYXNzd2Q7Ci0gIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cC0+dXNlcikpCi0gICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7Ci0gIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cC0+cGFzc3dkKSkKLSAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKLQogICBjb25uLT5wcm90by5mdHBjLmtub3duX2ZpbGVzaXplID0gLTE7IC8qIHVua25vd24gc2l6ZSBmb3Igbm93ICovCiAKICAgcmV0dXJuIENVUkxFX09LOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuaAppbmRleCA4MjhkNjlhLi4wNjQyMWM2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTAyLDggKzEwMiw2IEBACiAgICBwZXJoYXBzIHRoZSBDdXJsX2Vhc3kgaXMgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0aW1lcyB0aGUgY29ubmVjdGlvbiBpcwogICAgdXNlZC4gKi8KIHN0cnVjdCBGVFAgewotICBjaGFyICp1c2VyOyAgICAvKiB1c2VyIG5hbWUgc3RyaW5nICovCi0gIGNoYXIgKnBhc3N3ZDsgIC8qIHBhc3N3b3JkIHN0cmluZyAqLwogICBjaGFyICpwYXRoOyAgICAvKiBwb2ludHMgdG8gdGhlIHVybHBpZWNlcyBzdHJ1Y3QgZmllbGQgKi8KICAgY2hhciAqcGF0aGFsbG9jOyAvKiBpZiBub24tTlVMTCBhIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIHBhdGggKi8KIApAQCAtMTIxLDggKzExOSw3IEBACiAgIGNoYXIgKmVudHJ5cGF0aDsgLyogdGhlIFBXRCByZXBseSB3aGVuIHdlIGxvZ2dlZCBvbiAqLwogICBjaGFyICoqZGlyczsgICAvKiByZWFsbG9jKCllZCBhcnJheSBmb3IgcGF0aCBjb21wb25lbnRzICovCiAgIGludCBkaXJkZXB0aDsgIC8qIG51bWJlciBvZiBlbnRyaWVzIHVzZWQgaW4gdGhlICdkaXJzJyBhcnJheSAqLwotICBpbnQgZGlyYWxsb2M7ICAvKiBudW1iZXIgb2YgZW50cmllcyBhbGxvY2F0ZWQgZm9yIHRoZSAnZGlycycgYXJyYXkgKi8KLSAgY2hhciAqZmlsZTsgICAgLyogZGVjb2RlZCBmaWxlICovCisgIGNoYXIgKmZpbGU7ICAgIC8qIHVybC1kZWNvZGVkIGZpbGUgbmFtZSAob3IgcGF0aCkgKi8KICAgYm9vbCBkb250X2NoZWNrOyAgLyogU2V0IHRvIFRSVUUgdG8gcHJldmVudCB0aGUgZmluYWwgKHBvc3QtdHJhbnNmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2l6ZSBhbmQgMjI2LzI1MCBzdGF0dXMgY2hlY2suIEl0IHNob3VsZCBzdGlsbAogICAgICAgICAgICAgICAgICAgICAgICByZWFkIHRoZSBsaW5lLCBqdXN0IGlnbm9yZSB0aGUgcmVzdWx0LiAqLwpAQCAtMTM1LDggKzEzMiw3IEBACiAgIGJvb2wgY3dkZmFpbDsgICAgIC8qIHNldCBUUlVFIGlmIGEgQ1dEIGNvbW1hbmQgZmFpbHMsIGFzIHRoZW4gd2UgbXVzdCBwcmV2ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCiAgIGJvb2wgd2FpdF9kYXRhX2Nvbm47IC8qIHRoaXMgaXMgc2V0IFRSVUUgaWYgZGF0YSBjb25uZWN0aW9uIGlzIHdhaXRlZCAqLwotICBjaGFyICpwcmV2cGF0aDsgICAvKiBjb25uLT5wYXRoIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyICovCi0gIGN1cmxfZnRwZmlsZSBwcmV2bWV0aG9kOyAvKiBmdHAgbWV0aG9kIGluIHByZXZpb3VzIHRyYW5zZmVyICAqLworICBjaGFyICpwcmV2cGF0aDsgICAvKiB1cmwtZGVjb2RlZCBjb25uLT5wYXRoIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyICovCiAgIGNoYXIgdHJhbnNmZXJ0eXBlOyAvKiBzZXQgYnkgZnRwX3RyYW5zZmVydHlwZSBmb3IgdXNlIGJ5IEN1cmxfY2xpZW50X3dyaXRlKClhCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXJzIChBL0kgb3IgemVybykgKi8KICAgaW50IGNvdW50MTsgLyogZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgZm9yIHRoZSBzdGF0ZSBtYWNoaW5lICovCkBAIC0xNTQsNyArMTUwLDYgQEAKICAgICAgY29ubmVjdGlvbiB0byAqLwogICBjaGFyICpuZXdob3N0OyAgICAgICAgICAvKiB0aGlzIGlzIHRoZSBwYWlyIHRvIGNvbm5lY3QgdGhlIERBVEEuLi4gKi8KICAgdW5zaWduZWQgc2hvcnQgbmV3cG9ydDsgLyogY29ubmVjdGlvbiB0byAqLwotCiB9OwogCiAjZGVmaW5lIERFRkFVTFRfQUNDRVBUX1RJTUVPVVQgICA2MDAwMCAvKiBtaWxsaXNlY29uZHMgPT0gb25lIG1pbnV0ZSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5jCmluZGV4IGM0ZWI0MzcuLmYzOTlhNGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHBsaXN0cGFyc2VyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuaAppbmRleCA4MTI4ODg3Li5iMzRhZTliIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHBsaXN0cGFyc2VyLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRlbnYuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCmluZGV4IDg5ZDE4MWQuLjkzODViOGYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNywyNSArMjcsNDggQEAKIAogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKLXN0YXRpYwotY2hhciAqR2V0RW52KGNvbnN0IGNoYXIgKnZhcmlhYmxlKQorc3RhdGljIGNoYXIgKkdldEVudihjb25zdCBjaGFyICp2YXJpYWJsZSkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoQ1VSTF9XSU5ET1dTX0FQUCkKICAgKHZvaWQpdmFyaWFibGU7CiAgIHJldHVybiBOVUxMOwotI2Vsc2UKLSNpZmRlZiBXSU4zMgotICBjaGFyIGVudltNQVhfUEFUSF07IC8qIE1BWF9QQVRIIGlzIGZyb20gd2luZGVmLmggKi8KLSAgY2hhciAqdGVtcCA9IGdldGVudih2YXJpYWJsZSk7Ci0gIGVudlswXSA9ICdcMCc7Ci0gIGlmKHRlbXAgIT0gTlVMTCkKLSAgICBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBKHRlbXAsIGVudiwgc2l6ZW9mKGVudikpOwotICByZXR1cm4gKGVudlswXSAhPSAnXDAnKT9zdHJkdXAoZW52KTpOVUxMOworI2VsaWYgZGVmaW5lZChXSU4zMikKKyAgLyogVGhpcyB1c2VzIFdpbmRvd3MgQVBJIGluc3RlYWQgb2YgQyBydW50aW1lIGdldGVudigpIHRvIGdldCB0aGUgZW52aXJvbm1lbnQKKyAgICAgdmFyaWFibGUgc2luY2Ugc29tZSBjaGFuZ2VzIGFyZW4ndCBhbHdheXMgdmlzaWJsZSB0byB0aGUgbGF0dGVyLiAjNDc3NCAqLworICBjaGFyICpidWYgPSBOVUxMOworICBjaGFyICp0bXA7CisgIERXT1JEIGJ1ZnNpemU7CisgIERXT1JEIHJjID0gMTsKKyAgY29uc3QgRFdPUkQgbWF4ID0gMzI3Njg7IC8qIG1heCBlbnYgdmFyIHNpemUgZnJvbSBNU0NSVCBzb3VyY2UgKi8KKworICBmb3IoOzspIHsKKyAgICB0bXAgPSByZWFsbG9jKGJ1ZiwgcmMpOworICAgIGlmKCF0bXApIHsKKyAgICAgIGZyZWUoYnVmKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGJ1ZiA9IHRtcDsKKyAgICBidWZzaXplID0gcmM7CisKKyAgICAvKiBJdCdzIHBvc3NpYmxlIGZvciByYyB0byBiZSAwIGlmIHRoZSB2YXJpYWJsZSB3YXMgZm91bmQgYnV0IGVtcHR5LgorICAgICAgIFNpbmNlIGdldGVudiBkb2Vzbid0IG1ha2UgdGhhdCBkaXN0aW5jdGlvbiB3ZSBpZ25vcmUgaXQgYXMgd2VsbC4gKi8KKyAgICByYyA9IEdldEVudmlyb25tZW50VmFyaWFibGVBKHZhcmlhYmxlLCBidWYsIGJ1ZnNpemUpOworICAgIGlmKCFyYyB8fCByYyA9PSBidWZzaXplIHx8IHJjID4gbWF4KSB7CisgICAgICBmcmVlKGJ1Zik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBpZiByYyA8IGJ1ZnNpemUgdGhlbiByYyBpcyBieXRlcyB3cml0dGVuIG5vdCBpbmNsdWRpbmcgbnVsbCAqLworICAgIGlmKHJjIDwgYnVmc2l6ZSkKKyAgICAgIHJldHVybiBidWY7CisKKyAgICAvKiBlbHNlIHJjIGlzIGJ5dGVzIG5lZWRlZCwgdHJ5IGFnYWluICovCisgIH0KICNlbHNlCiAgIGNoYXIgKmVudiA9IGdldGVudih2YXJpYWJsZSk7CiAgIHJldHVybiAoZW52ICYmIGVudlswXSk/c3RyZHVwKGVudik6TlVMTDsKICNlbmRpZgotI2VuZGlmCiB9CiAKIGNoYXIgKmN1cmxfZ2V0ZW52KGNvbnN0IGNoYXIgKnYpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmMKaW5kZXggZTExOGRhOC4uNmQ1YmQ1ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZ2V0aW5mby5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTQ3LDYgKzE0NywzMyBAQAogICAgIGxvbmcgICAgICAgICAgKnRvX2xvbmc7CiAgIH0gbHB0cjsKIAorI2lmZGVmIERFQlVHQlVJTEQKKyAgY2hhciAqdGltZXN0ciA9IGdldGVudigiQ1VSTF9USU1FIik7CisgIGlmKHRpbWVzdHIpIHsKKyAgICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvbCh0aW1lc3RyLCBOVUxMLCAxMCk7CisgICAgc3dpdGNoKGluZm8pIHsKKyAgICBjYXNlIENVUkxJTkZPX0xPQ0FMX1BPUlQ6CisgICAgICAqcGFyYW1fbG9uZ3AgPSAobG9uZyl2YWw7CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAvKiB1c2UgYW5vdGhlciB2YXJpYWJsZSBmb3IgdGhpcyB0byBhbGxvdyBkaWZmZXJlbnQgdmFsdWVzICovCisgIHRpbWVzdHIgPSBnZXRlbnYoIkNVUkxfREVCVUdfU0laRSIpOworICBpZih0aW1lc3RyKSB7CisgICAgdW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b2wodGltZXN0ciwgTlVMTCwgMTApOworICAgIHN3aXRjaChpbmZvKSB7CisgICAgY2FzZSBDVVJMSU5GT19IRUFERVJfU0laRToKKyAgICBjYXNlIENVUkxJTkZPX1JFUVVFU1RfU0laRToKKyAgICAgICpwYXJhbV9sb25ncCA9IChsb25nKXZhbDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZW5kaWYKKwogICBzd2l0Y2goaW5mbykgewogICBjYXNlIENVUkxJTkZPX1JFU1BPTlNFX0NPREU6CiAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5odHRwY29kZTsKQEAgLTE3MSw5ICsxOTgsMTEgQEAKICAgY2FzZSBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUOgogICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKICAgICBicmVhazsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNhc2UgQ1VSTElORk9fUFJPWFlfU1NMX1ZFUklGWVJFU1VMVDoKICAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnR2ZXJpZnlyZXN1bHQ7CiAgICAgYnJlYWs7CisjZW5kaWYKICAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9DT1VOVDoKICAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zZXQuZm9sbG93bG9jYXRpb247CiAgICAgYnJlYWs7CkBAIC0yMTIsOCArMjQxLDExIEBACiAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5jb25uX2xvY2FsX3BvcnQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fQ09ORElUSU9OX1VOTUVUOgotICAgIC8qIHJldHVybiBpZiB0aGUgY29uZGl0aW9uIHByZXZlbnRlZCB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRyYW5zZmVycmVkICovCi0gICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby50aW1lY29uZCA/IDFMIDogMEw7CisgICAgaWYoZGF0YS0+aW5mby5odHRwY29kZSA9PSAzMDQpCisgICAgICAqcGFyYW1fbG9uZ3AgPSAxTDsKKyAgICBlbHNlCisgICAgICAvKiByZXR1cm4gaWYgdGhlIGNvbmRpdGlvbiBwcmV2ZW50ZWQgdGhlIGRvY3VtZW50IHRvIGdldCB0cmFuc2ZlcnJlZCAqLworICAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby50aW1lY29uZCA/IDFMIDogMEw7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fUlRTUF9DTElFTlRfQ1NFUToKICAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zdGF0ZS5ydHNwX25leHRfY2xpZW50X0NTZXE7CkBAIC0yMzUsNiArMjY3LDkgQEAKICAgICBjYXNlIDIwOgogICAgICAgKnBhcmFtX2xvbmdwID0gQ1VSTF9IVFRQX1ZFUlNJT05fMl8wOwogICAgICAgYnJlYWs7CisgICAgY2FzZSAzMDoKKyAgICAgICpwYXJhbV9sb25ncCA9IENVUkxfSFRUUF9WRVJTSU9OXzM7CisgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgKnBhcmFtX2xvbmdwID0gQ1VSTF9IVFRQX1ZFUlNJT05fTk9ORTsKICAgICAgIGJyZWFrOwpAQCAtMjQzLDcgKzI3OCw2IEBACiAgIGNhc2UgQ1VSTElORk9fUFJPVE9DT0w6CiAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5jb25uX3Byb3RvY29sOwogICAgIGJyZWFrOwotCiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIENVUkxFX1VOS05PV05fT1BUSU9OOwogICB9CkBAIC0yNTYsNiArMjkwLDI3IEBACiBzdGF0aWMgQ1VSTGNvZGUgZ2V0aW5mb19vZmZ0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxJTkZPIGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgKnBhcmFtX29mZnQpCiB7CisjaWZkZWYgREVCVUdCVUlMRAorICBjaGFyICp0aW1lc3RyID0gZ2V0ZW52KCJDVVJMX1RJTUUiKTsKKyAgaWYodGltZXN0cikgeworICAgIHVuc2lnbmVkIGxvbmcgdmFsID0gc3RydG9sKHRpbWVzdHIsIE5VTEwsIDEwKTsKKyAgICBzd2l0Y2goaW5mbykgeworICAgIGNhc2UgQ1VSTElORk9fVE9UQUxfVElNRV9UOgorICAgIGNhc2UgQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FX1Q6CisgICAgY2FzZSBDVVJMSU5GT19DT05ORUNUX1RJTUVfVDoKKyAgICBjYXNlIENVUkxJTkZPX0FQUENPTk5FQ1RfVElNRV9UOgorICAgIGNhc2UgQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRV9UOgorICAgIGNhc2UgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FX1Q6CisgICAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9USU1FX1Q6CisgICAgY2FzZSBDVVJMSU5GT19TUEVFRF9ET1dOTE9BRF9UOgorICAgIGNhc2UgQ1VSTElORk9fU1BFRURfVVBMT0FEX1Q6CisgICAgICAqcGFyYW1fb2ZmdCA9IChjdXJsX29mZl90KXZhbDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZW5kaWYKICAgc3dpdGNoKGluZm8pIHsKICAgY2FzZSBDVVJMSU5GT19GSUxFVElNRV9UOgogICAgICpwYXJhbV9vZmZ0ID0gKGN1cmxfb2ZmX3QpZGF0YS0+aW5mby5maWxldGltZTsKQEAgLTI2Nyw3ICszMjIsNyBAQAogICAgICpwYXJhbV9vZmZ0ID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZDsKICAgICBicmVhazsKICAgY2FzZSBDVVJMSU5GT19TUEVFRF9ET1dOTE9BRF9UOgotICAgICpwYXJhbV9vZmZ0ID0gIGRhdGEtPnByb2dyZXNzLmRsc3BlZWQ7CisgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NQRUVEX1VQTE9BRF9UOgogICAgICpwYXJhbV9vZmZ0ID0gZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZDsKQEAgLTI4MCw3ICszMzUsNyBAQAogICAgICpwYXJhbV9vZmZ0ID0gKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKT8KICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfdWw6LTE7CiAgICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTElORk9fVE9UQUxfVElNRV9UOgorICAgY2FzZSBDVVJMSU5GT19UT1RBTF9USU1FX1Q6CiAgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FX1Q6CkBAIC0zMDEsNyArMzU2LDkgQEAKICAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9USU1FX1Q6CiAgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5wcm9ncmVzcy50X3JlZGlyZWN0OwogICAgIGJyZWFrOwotCisgIGNhc2UgQ1VSTElORk9fUkVUUllfQUZURVI6CisgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5pbmZvLnJldHJ5X2FmdGVyOworICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIHJldHVybiBDVVJMRV9VTktOT1dOX09QVElPTjsKICAgfQpAQCAtMzEyLDYgKzM2OSwyNyBAQAogc3RhdGljIENVUkxjb2RlIGdldGluZm9fZG91YmxlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxJTkZPIGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpwYXJhbV9kb3VibGVwKQogeworI2lmZGVmIERFQlVHQlVJTEQKKyAgY2hhciAqdGltZXN0ciA9IGdldGVudigiQ1VSTF9USU1FIik7CisgIGlmKHRpbWVzdHIpIHsKKyAgICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvbCh0aW1lc3RyLCBOVUxMLCAxMCk7CisgICAgc3dpdGNoKGluZm8pIHsKKyAgICBjYXNlIENVUkxJTkZPX1RPVEFMX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19DT05ORUNUX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19BUFBDT05ORUNUX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FOgorICAgIGNhc2UgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FOgorICAgIGNhc2UgQ1VSTElORk9fUkVESVJFQ1RfVElNRToKKyAgICBjYXNlIENVUkxJTkZPX1NQRUVEX0RPV05MT0FEOgorICAgIGNhc2UgQ1VSTElORk9fU1BFRURfVVBMT0FEOgorICAgICAgKnBhcmFtX2RvdWJsZXAgPSAoZG91YmxlKXZhbDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZW5kaWYKICAgc3dpdGNoKGluZm8pIHsKICAgY2FzZSBDVVJMSU5GT19UT1RBTF9USU1FOgogICAgICpwYXJhbV9kb3VibGVwID0gRE9VQkxFX1NFQ1MoZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50KTsKQEAgLTMzMiwxMyArNDEwLDEzIEBACiAgICAgKnBhcmFtX2RvdWJsZXAgPSBET1VCTEVfU0VDUyhkYXRhLT5wcm9ncmVzcy50X3N0YXJ0dHJhbnNmZXIpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NJWkVfVVBMT0FEOgotICAgICpwYXJhbV9kb3VibGVwID0gIChkb3VibGUpZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQ7CisgICAgKnBhcmFtX2RvdWJsZXAgPSAoZG91YmxlKWRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NJWkVfRE9XTkxPQUQ6CiAgICAgKnBhcmFtX2RvdWJsZXAgPSAoZG91YmxlKWRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fU1BFRURfRE9XTkxPQUQ6Ci0gICAgKnBhcmFtX2RvdWJsZXAgPSAgKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOworICAgICpwYXJhbV9kb3VibGVwID0gKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NQRUVEX1VQTE9BRDoKICAgICAqcGFyYW1fZG91YmxlcCA9IChkb3VibGUpZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uaAppbmRleCBhZWNmNzE3Li44ZDJhZjQyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZ2V0aW5mby5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nb3BoZXIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5jCmluZGV4IGIyOTZjNjIuLmI0ODExYjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVkZSAidHJhbnNmZXIuaCIKICNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgImdvcGhlci5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgpAQCAtODMsOCArODQsMTAgQEAKICAgY2hhciAqcXVlcnkgPSBkYXRhLT5zdGF0ZS51cC5xdWVyeTsKICAgY2hhciAqc2VsID0gTlVMTDsKICAgY2hhciAqc2VsX29yZyA9IE5VTEw7CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgc3NpemVfdCBhbW91bnQsIGs7CiAgIHNpemVfdCBsZW47CisgIGludCB3aGF0OwogCiAgICpkb25lID0gVFJVRTsgLyogdW5jb25kaXRpb25hbGx5ICovCiAKQEAgLTExMyw3ICsxMTYsNyBAQAogICAgIG5ld3AgKz0gMjsKIAogICAgIC8qIC4uLiBhbmQgZmluYWxseSB1bmVzY2FwZSAqLwotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIG5ld3AsIDAsICZzZWwsICZsZW4sIEZBTFNFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBuZXdwLCAwLCAmc2VsLCAmbGVuLCBSRUpFQ1RfWkVSTyk7CiAgICAgZnJlZShnb3BoZXJwYXRoKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM5LDE5ICsxNDIsMjkgQEAKICAgICBlbHNlCiAgICAgICBicmVhazsKIAorICAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIEZBTFNFKTsKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmKCF0aW1lb3V0X21zKQorICAgICAgdGltZW91dF9tcyA9IFRJTUVESUZGX1RfTUFYOworCiAgICAgLyogRG9uJ3QgYnVzeWxvb3AuIFRoZSBlbnRpcmUgbG9vcCB0aGluZyBpcyBhIHdvcmstYXJvdW5kIGFzIGl0IGNhdXNlcyBhCiAgICAgICAgQkxPQ0tJTkcgYmVoYXZpb3Igd2hpY2ggaXMgYSBOTy1OTy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgcmF0aGVyIGJlCiAgICAgICAgc3BsaXQgdXAgaW4gYSBkbyBhbmQgYSBkb2luZyBwaWVjZSB3aGVyZSB0aGUgcGllY2VzIHRoYXQgYXJlbid0CiAgICAgICAgcG9zc2libGUgdG8gc2VuZCBub3cgd2lsbCBiZSBzZW50IGluIHRoZSBkb2luZyBmdW5jdGlvbiByZXBlYXRlZGx5CiAgICAgICAgdW50aWwgdGhlIGVudGlyZSByZXF1ZXN0IGlzIHNlbnQuCi0KLSAgICAgICBXYWl0IGEgd2hpbGUgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUuIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QKLSAgICAgICBhY2tub3dsZWRnZSB0aGUgdGltZW91dC4KICAgICAqLwotICAgIGlmKFNPQ0tFVF9XUklUQUJMRShzb2NrZmQsIDEwMCkgPCAwKSB7CisgICAgd2hhdCA9IFNPQ0tFVF9XUklUQUJMRShzb2NrZmQsIHRpbWVvdXRfbXMpOworICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOwogICAgICAgYnJlYWs7CiAgICAgfQorICAgIGVsc2UgaWYoIXdoYXQpIHsKKyAgICAgIHJlc3VsdCA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIGJyZWFrOworICAgIH0KICAgfQogCiAgIGZyZWUoc2VsX29yZyk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nb3BoZXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCmluZGV4IDUwMWM5OTAuLmRlYzI1NTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9oYXNoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9oYXNoLmgKaW5kZXggOTBhMjVkMS4uNTU4ZDBmNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaGFzaC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hhc2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtODAsNyArODAsNyBAQAogdm9pZCAqQ3VybF9oYXNoX3BpY2soc3RydWN0IGN1cmxfaGFzaCAqLCB2b2lkICprZXksIHNpemVfdCBrZXlfbGVuKTsKIHZvaWQgQ3VybF9oYXNoX2FwcGx5KHN0cnVjdCBjdXJsX2hhc2ggKmgsIHZvaWQgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2IpKHZvaWQgKnVzZXIsIHZvaWQgKnB0cikpOwotaW50IEN1cmxfaGFzaF9jb3VudChzdHJ1Y3QgY3VybF9oYXNoICpoKTsKKyNkZWZpbmUgQ3VybF9oYXNoX2NvdW50KGgpICgoaCktPnNpemUpCiB2b2lkIEN1cmxfaGFzaF9kZXN0cm95KHN0cnVjdCBjdXJsX2hhc2ggKmgpOwogdm9pZCBDdXJsX2hhc2hfY2xlYW4oc3RydWN0IGN1cmxfaGFzaCAqaCk7CiB2b2lkIEN1cmxfaGFzaF9jbGVhbl93aXRoX2NyaXRlcml1bShzdHJ1Y3QgY3VybF9oYXNoICpoLCB2b2lkICp1c2VyLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG1hYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG1hYy5jCmluZGV4IGJmNDllYmUuLmU0ZmVhOGEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2htYWMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9obWFjLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImN1cmxfaG1hYy5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKIAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKQEAgLTQ3LDEzICs0OCwxMyBAQAogCiAKIAotSE1BQ19jb250ZXh0ICoKLUN1cmxfSE1BQ19pbml0KGNvbnN0IEhNQUNfcGFyYW1zICogaGFzaHBhcmFtcywKK3N0cnVjdCBITUFDX2NvbnRleHQgKgorQ3VybF9ITUFDX2luaXQoY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zLAogICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKICAgc2l6ZV90IGk7Ci0gIEhNQUNfY29udGV4dCAqY3R4dDsKKyAgc3RydWN0IEhNQUNfY29udGV4dCAqY3R4dDsKICAgdW5zaWduZWQgY2hhciAqaGtleTsKICAgdW5zaWduZWQgY2hhciBiOwogCkBAIC0xMDAsNyArMTAxLDcgQEAKICAgcmV0dXJuIGN0eHQ7CiB9CiAKLWludCBDdXJsX0hNQUNfdXBkYXRlKEhNQUNfY29udGV4dCAqIGN0eHQsCitpbnQgQ3VybF9ITUFDX3VwZGF0ZShzdHJ1Y3QgSE1BQ19jb250ZXh0ICpjdHh0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pCiB7CkBAIC0xMTAsOSArMTExLDkgQEAKIH0KIAogCi1pbnQgQ3VybF9ITUFDX2ZpbmFsKEhNQUNfY29udGV4dCAqY3R4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KQoraW50IEN1cmxfSE1BQ19maW5hbChzdHJ1Y3QgSE1BQ19jb250ZXh0ICpjdHh0LCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCiB7Ci0gIGNvbnN0IEhNQUNfcGFyYW1zICogaGFzaHBhcmFtcyA9IGN0eHQtPmhtYWNfaGFzaDsKKyAgY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zID0gY3R4dC0+aG1hY19oYXNoOwogCiAgIC8qIERvIG5vdCBnZXQgcmVzdWx0IGlmIGNhbGxlZCB3aXRoIGEgbnVsbCBwYXJhbWV0ZXI6IG9ubHkgcmVsZWFzZQogICAgICBzdG9yYWdlLiAqLwpAQCAtMTI5LDQgKzEzMCw0MSBAQAogICByZXR1cm4gMDsKIH0KIAorLyoKKyAqIEN1cmxfaG1hY2l0KCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBITUFDIGhhc2gsIGZvciB0aGUgc3BlY2lmaWVkIGlucHV0IGRhdGEsIGdpdmVuCisgKiB0aGUgc3BlY2lmaWVkIGhhc2ggZnVuY3Rpb24gYW5kIGtleS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGhhc2hwYXJhbXMgW2luXSAgICAgLSBUaGUgaGFzaCBmdW5jdGlvbiAoQ3VybF9ITUFDX01ENSkuCisgKiBrZXkgICAgICAgIFtpbl0gICAgIC0gVGhlIGtleSB0byB1c2UuCisgKiBrZXlsZW4gICAgIFtpbl0gICAgIC0gVGhlIGxlbmd0aCBvZiB0aGUga2V5LgorICogZGF0YSAgICAgICBbaW5dICAgICAtIFRoZSBkYXRhIHRvIGVuY3J5cHQuCisgKiBkYXRhbGVuICAgIFtpbl0gICAgIC0gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YS4KKyAqIG91dHB1dCAgICAgW2luL291dF0gLSBUaGUgb3V0cHV0IGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKi8KK0NVUkxjb2RlIEN1cmxfaG1hY2l0KGNvbnN0IHN0cnVjdCBITUFDX3BhcmFtcyAqaGFzaHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3Qgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGNvbnN0IHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KQoreworICBzdHJ1Y3QgSE1BQ19jb250ZXh0ICpjdHh0ID0KKyAgICBDdXJsX0hNQUNfaW5pdChoYXNocGFyYW1zLCBrZXksIGN1cmx4X3V6dG91aShrZXlsZW4pKTsKKworICBpZighY3R4dCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBVcGRhdGUgdGhlIGRpZ2VzdCB3aXRoIHRoZSBnaXZlbiBjaGFsbGVuZ2UgKi8KKyAgQ3VybF9ITUFDX3VwZGF0ZShjdHh0LCBkYXRhLCBjdXJseF91enRvdWkoZGF0YWxlbikpOworCisgIC8qIEZpbmFsaXNlIHRoZSBkaWdlc3QgKi8KKyAgQ3VybF9ITUFDX2ZpbmFsKGN0eHQsIG91dHB1dCk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0YXN5bi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGFzeW4uYwppbmRleCA5OWQ4NzJiLi5lZDkxOTBmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0YXN5bi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3Rhc3luLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTExNywxMCArMTE3LDEwIEBACiAgKiBuYW1lIHJlc29sdmUgbGF5ZXJzIChzZWxlY3RlZCBhdCBidWlsZC10aW1lKS4gVGhleSBhbGwgdGFrZSB0aGlzIHNhbWUgc2V0CiAgKiBvZiBhcmd1bWVudHMKICAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQogewogICByZXR1cm4gQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbyhjb25uLCBob3N0bmFtZSwgcG9ydCwgd2FpdHApOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGNoZWNrLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suYwppbmRleCAxMTVkMjRiLi45ZTBkYjA1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGNoZWNrLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suaAppbmRleCBmNTYyZGY5Li45YzE4MDg1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuYwppbmRleCBjZjMzZWQ4Li5kZDU5MTZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgImRvaC5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCkBAIC0xMTksNyArMTIwLDcgQEAKIC8qCiAgKiBSZXR1cm4gIyBvZiBhZGRyZXNzZXMgaW4gYSBDdXJsX2FkZHJpbmZvIHN0cnVjdAogICovCi1pbnQgQ3VybF9udW1fYWRkcmVzc2VzKGNvbnN0IEN1cmxfYWRkcmluZm8gKmFkZHIpCitpbnQgQ3VybF9udW1fYWRkcmVzc2VzKGNvbnN0IHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyKQogewogICBpbnQgaSA9IDA7CiAgIHdoaWxlKGFkZHIpIHsKQEAgLTEzMCwzOSArMTMxLDM2IEBACiB9CiAKIC8qCi0gKiBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKCkgcmV0dXJucyBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoZSAxc3QgYWRkcmVzcworICogQ3VybF9wcmludGFibGVfYWRkcmVzcygpIHN0b3JlcyBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoZSAxc3QgYWRkcmVzcwogICogZ2l2ZW4gaW4gdGhlICdhaScgYXJndW1lbnQuIFRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGJ1ZiB0aGF0IGlzCiAgKiBidWZzaXplIGJ5dGVzIGJpZy4KICAqCi0gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgaXQgcmV0dXJucyBOVUxMLgorICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHRoZSB0YXJnZXQgYnVmZmVyIGlzIGVtcHR5LgogICovCi1jb25zdCBjaGFyICoKLUN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpCit2b2lkIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29uc3Qgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpLCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZnNpemUpCiB7Ci0gIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2E0OwotICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqaXBhZGRyNDsKLSNpZmRlZiBFTkFCTEVfSVBWNgotICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7Ci0gIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqaXBhZGRyNjsKLSNlbmRpZgorICBERUJVR0FTU0VSVChidWZzaXplKTsKKyAgYnVmWzBdID0gMDsKIAogICBzd2l0Y2goYWktPmFpX2ZhbWlseSkgewotICAgIGNhc2UgQUZfSU5FVDoKLSAgICAgIHNhNCA9IChjb25zdCB2b2lkICopYWktPmFpX2FkZHI7Ci0gICAgICBpcGFkZHI0ID0gJnNhNC0+c2luX2FkZHI7Ci0gICAgICByZXR1cm4gQ3VybF9pbmV0X250b3AoYWktPmFpX2ZhbWlseSwgKGNvbnN0IHZvaWQgKilpcGFkZHI0LCBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZSk7Ci0jaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBjYXNlIEFGX0lORVQ2OgotICAgICAgc2E2ID0gKGNvbnN0IHZvaWQgKilhaS0+YWlfYWRkcjsKLSAgICAgIGlwYWRkcjYgPSAmc2E2LT5zaW42X2FkZHI7Ci0gICAgICByZXR1cm4gQ3VybF9pbmV0X250b3AoYWktPmFpX2ZhbWlseSwgKGNvbnN0IHZvaWQgKilpcGFkZHI2LCBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZSk7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7CisgIGNhc2UgQUZfSU5FVDogeworICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2E0ID0gKGNvbnN0IHZvaWQgKilhaS0+YWlfYWRkcjsKKyAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqaXBhZGRyNCA9ICZzYTQtPnNpbl9hZGRyOworICAgICh2b2lkKUN1cmxfaW5ldF9udG9wKGFpLT5haV9mYW1pbHksIChjb25zdCB2b2lkICopaXBhZGRyNCwgYnVmLCBidWZzaXplKTsKKyAgICBicmVhazsKICAgfQotICByZXR1cm4gTlVMTDsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBjYXNlIEFGX0lORVQ2OiB7CisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2E2ID0gKGNvbnN0IHZvaWQgKilhaS0+YWlfYWRkcjsKKyAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmlwYWRkcjYgPSAmc2E2LT5zaW42X2FkZHI7CisgICAgKHZvaWQpQ3VybF9pbmV0X250b3AoYWktPmFpX2ZhbWlseSwgKGNvbnN0IHZvaWQgKilpcGFkZHI2LCBidWYsIGJ1ZnNpemUpOworICAgIGJyZWFrOworICB9CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfQogfQogCiAvKgpAQCAtMzM2LDcgKzMzNCw3IEBACiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1NIVUZGTEVfRE5TCiBVTklUVEVTVCBDVVJMY29kZSBDdXJsX3NodWZmbGVfYWRkcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqKmFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKiphZGRyKTsKIC8qCiAgKiBDdXJsX3NodWZmbGVfYWRkcigpIHNodWZmbGVzIHRoZSBvcmRlciBvZiBhZGRyZXNzZXMgaW4gYSAnQ3VybF9hZGRyaW5mbycKICAqIHN0cnVjdCBieSByZS1saW5raW5nIGl0cyBsaW5rZWQgbGlzdC4KQEAgLTM1MCwxMyArMzQ4LDEzIEBACiAgKiBAdW5pdHRlc3Q6IDE2MDgKICAqLwogVU5JVFRFU1QgQ1VSTGNvZGUgQ3VybF9zaHVmZmxlX2FkZHIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKiphZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKiphZGRyKQogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgY29uc3QgaW50IG51bV9hZGRycyA9IEN1cmxfbnVtX2FkZHJlc3NlcygqYWRkcik7CiAKICAgaWYobnVtX2FkZHJzID4gMSkgewotICAgIEN1cmxfYWRkcmluZm8gKipub2RlczsKKyAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqKm5vZGVzOwogICAgIGluZm9mKGRhdGEsICJTaHVmZmxpbmcgJWkgYWRkcmVzc2VzIiwgbnVtX2FkZHJzKTsKIAogICAgIG5vZGVzID0gbWFsbG9jKG51bV9hZGRycypzaXplb2YoKm5vZGVzKSk7CkBAIC0zNzUsNyArMzczLDcgQEAKICAgICAgIGlmKHJuZCkgewogICAgICAgICAvKiBGaXNoZXItWWF0ZXMgc2h1ZmZsZSAqLwogICAgICAgICBpZihDdXJsX3JhbmQoZGF0YSwgKHVuc2lnbmVkIGNoYXIgKilybmQsIHJuZF9zaXplKSA9PSBDVVJMRV9PSykgewotICAgICAgICAgIEN1cmxfYWRkcmluZm8gKnN3YXBfdG1wOworICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpzd2FwX3RtcDsKICAgICAgICAgICBmb3IoaSA9IG51bV9hZGRycyAtIDE7IGkgPiAwOyBpLS0pIHsKICAgICAgICAgICAgIHN3YXBfdG1wID0gbm9kZXNbcm5kW2ldICUgKGkgKyAxKV07CiAgICAgICAgICAgICBub2Rlc1tybmRbaV0gJSAoaSArIDEpXSA9IG5vZGVzW2ldOwpAQCAtNDE0LDcgKzQxMiw3IEBACiAgKi8KIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqCiBDdXJsX2NhY2hlX2FkZHIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICphZGRyLAorICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAogICAgICAgICAgICAgICAgIGludCBwb3J0KQogewpAQCAtNDgyLDE4ICs0ODAsMTkgQEAKICAqIENVUkxSRVNPTFZfUEVORElORyAgKDEpID0gd2FpdGluZyBmb3IgcmVzcG9uc2UsIG5vIHBvaW50ZXIKICAqLwogCi1pbnQgQ3VybF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dET0gsCi0gICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZW50cnkpCitlbnVtIHJlc29sdmVfdCBDdXJsX3Jlc29sdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0RPSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5KQogewogICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRucyA9IE5VTEw7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBDVVJMY29kZSByZXN1bHQ7Ci0gIGludCByYyA9IENVUkxSRVNPTFZfRVJST1I7IC8qIGRlZmF1bHQgdG8gZmFpbHVyZSAqLworICBlbnVtIHJlc29sdmVfdCByYyA9IENVUkxSRVNPTFZfRVJST1I7IC8qIGRlZmF1bHQgdG8gZmFpbHVyZSAqLwogCiAgICplbnRyeSA9IE5VTEw7CisgIGNvbm4tPmJpdHMuZG9oID0gRkFMU0U7IC8qIGRlZmF1bHQgaXMgbm90ICovCiAKICAgaWYoZGF0YS0+c2hhcmUpCiAgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUywgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOwpAQCAtNTEyLDEzICs1MTEsMTMgQEAKICAgaWYoIWRucykgewogICAgIC8qIFRoZSBlbnRyeSB3YXMgbm90IGluIHRoZSBjYWNoZS4gUmVzb2x2ZSBpdCB0byBJUCBhZGRyZXNzICovCiAKLSAgICBDdXJsX2FkZHJpbmZvICphZGRyOworICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyID0gTlVMTDsKICAgICBpbnQgcmVzcHdhaXQgPSAwOwotCi0gICAgLyogQ2hlY2sgd2hhdCBJUCBzcGVjaWZpY3MgdGhlIGFwcCBoYXMgcmVxdWVzdGVkIGFuZCBpZiB3ZSBjYW4gcHJvdmlkZSBpdC4KLSAgICAgKiBJZiBub3QsIGJhaWwgb3V0LiAqLwotICAgIGlmKCFDdXJsX2lwdmFsaWQoY29ubikpCi0gICAgICByZXR1cm4gQ1VSTFJFU09MVl9FUlJPUjsKKyAgICBzdHJ1Y3QgaW5fYWRkciBpbjsKKyNpZm5kZWYgVVNFX1JFU09MVkVfT05fSVBTCisgICAgY29uc3QKKyNlbmRpZgorICAgICAgYm9vbCBpcG51bSA9IEZBTFNFOwogCiAgICAgLyogbm90aWZ5IHRoZSByZXNvbHZlciBzdGFydCBjYWxsYmFjayAqLwogICAgIGlmKGRhdGEtPnNldC5yZXNvbHZlcl9zdGFydCkgewpAQCAtNTMxLDIwICs1MzAsNTkgQEAKICAgICAgICAgcmV0dXJuIENVUkxSRVNPTFZfRVJST1I7CiAgICAgfQogCi0gICAgaWYoYWxsb3dET0ggJiYgZGF0YS0+c2V0LmRvaCkgewotICAgICAgYWRkciA9IEN1cmxfZG9oKGNvbm4sIGhvc3RuYW1lLCBwb3J0LCAmcmVzcHdhaXQpOworI2lmbmRlZiBVU0VfUkVTT0xWRV9PTl9JUFMKKyAgICAvKiBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcgKi8KKyAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApCisgICAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCisgICAgICBhZGRyID0gQ3VybF9pcDJhZGRyKEFGX0lORVQsICZpbiwgaG9zdG5hbWUsIHBvcnQpOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgaWYoIWFkZHIpIHsKKyAgICAgIHN0cnVjdCBpbjZfYWRkciBpbjY7CisgICAgICAvKiBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjYgYWRkcmVzcyBzdHJpbmcgKi8KKyAgICAgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmluNikgPiAwKQorICAgICAgICAvKiBUaGlzIGlzIGFuIElQdjYgYWRkcmVzcyBsaXRlcmFsICovCisgICAgICAgIGFkZHIgPSBDdXJsX2lwMmFkZHIoQUZfSU5FVDYsICZpbjYsIGhvc3RuYW1lLCBwb3J0KTsKICAgICB9CisjZW5kaWYgLyogRU5BQkxFX0lQVjYgKi8KKworI2Vsc2UgLyogaWYgVVNFX1JFU09MVkVfT05fSVBTICovCisgICAgLyogRmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY0IGFkZHJlc3Mgc3RyaW5nICovCisgICAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZpbikgPiAwKQorICAgICAgLyogVGhpcyBpcyBhIGRvdHRlZCBJUCBhZGRyZXNzIDEyMy4xMjMuMTIzLjEyMy1zdHlsZSAqLworICAgICAgaXBudW0gPSBUUlVFOworI2lmZGVmIEVOQUJMRV9JUFY2CiAgICAgZWxzZSB7Ci0gICAgICAvKiBJZiBDdXJsX2dldGFkZHJpbmZvKCkgcmV0dXJucyBOVUxMLCAncmVzcHdhaXQnIG1pZ2h0IGJlIHNldCB0byBhCi0gICAgICAgICBub24temVybyB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgcmVzcG9uc2UgdG8gdGhlCi0gICAgICAgICByZXNvbHZlIGNhbGwgKi8KLSAgICAgIGFkZHIgPSBDdXJsX2dldGFkZHJpbmZvKGNvbm4sCisgICAgICBzdHJ1Y3QgaW42X2FkZHIgaW42OworICAgICAgLyogY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY2IGFkZHJlc3Mgc3RyaW5nICovCisgICAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZpbjYpID4gMCkKKyAgICAgICAgLyogVGhpcyBpcyBhbiBJUHY2IGFkZHJlc3MgbGl0ZXJhbCAqLworICAgICAgICBpcG51bSA9IFRSVUU7CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9JUFY2ICovCisKKyNlbmRpZiAvKiAhVVNFX1JFU09MVkVfT05fSVBTICovCisKKyAgICBpZighYWRkcikgeworICAgICAgLyogQ2hlY2sgd2hhdCBJUCBzcGVjaWZpY3MgdGhlIGFwcCBoYXMgcmVxdWVzdGVkIGFuZCBpZiB3ZSBjYW4gcHJvdmlkZQorICAgICAgICogaXQuIElmIG5vdCwgYmFpbCBvdXQuICovCisgICAgICBpZighQ3VybF9pcHZhbGlkKGNvbm4pKQorICAgICAgICByZXR1cm4gQ1VSTFJFU09MVl9FUlJPUjsKKworICAgICAgaWYoYWxsb3dET0ggJiYgZGF0YS0+c2V0LmRvaCAmJiAhaXBudW0pIHsKKyAgICAgICAgYWRkciA9IEN1cmxfZG9oKGNvbm4sIGhvc3RuYW1lLCBwb3J0LCAmcmVzcHdhaXQpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIElmIEN1cmxfZ2V0YWRkcmluZm8oKSByZXR1cm5zIE5VTEwsICdyZXNwd2FpdCcgbWlnaHQgYmUgc2V0IHRvIGEKKyAgICAgICAgICAgbm9uLXplcm8gdmFsdWUgaW5kaWNhdGluZyB0aGF0IHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJlc3BvbnNlIHRvCisgICAgICAgICAgIHRoZSByZXNvbHZlIGNhbGwgKi8KKyAgICAgICAgYWRkciA9IEN1cmxfZ2V0YWRkcmluZm8oY29ubiwKICNpZmRlZiBERUJVR0JVSUxECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzdHJjbXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NhbEhvc3QiKSk/ImxvY2FsaG9zdCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuc3RyW1NUUklOR19ERVZJQ0VdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc3RyY21wKGRhdGEtPnNldC5zdHJbU1RSSU5HX0RFVklDRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NhbEhvc3QiKSk/ImxvY2FsaG9zdCI6CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBwb3J0LCAmcmVzcHdhaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwgcG9ydCwgJnJlc3B3YWl0KTsKKyAgICAgIH0KICAgICB9CiAgICAgaWYoIWFkZHIpIHsKICAgICAgIGlmKHJlc3B3YWl0KSB7CkBAIC02MjAsMTEgKzY1OCwxMSBAQAogICogQ1VSTFJFU09MVl9QRU5ESU5HICAoMSkgPSB3YWl0aW5nIGZvciByZXNwb25zZSwgbm8gcG9pbnRlcgogICovCiAKLWludCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKiplbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0aW1lb3V0bXMpCitlbnVtIHJlc29sdmVfdCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKiplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRpZmZfdCB0aW1lb3V0bXMpCiB7CiAjaWZkZWYgVVNFX0FMQVJNX1RJTUVPVVQKICNpZmRlZiBIQVZFX1NJR0FDVElPTgpAQCAtNjQwLDcgKzY3OCw3IEBACiAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBwcmV2X2FsYXJtID0gMDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAjZW5kaWYgLyogVVNFX0FMQVJNX1RJTUVPVVQgKi8KLSAgaW50IHJjOworICBlbnVtIHJlc29sdmVfdCByYzsKIAogICAqZW50cnkgPSBOVUxMOwogCkBAIC03NDksNyArNzg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y3JlYXRlZCkgLyAxMDAwOwogCiAgICAgLyogdGhlIGFsYXJtIHBlcmlvZCBpcyBjb3VudGVkIGluIGV2ZW4gbnVtYmVyIG9mIHNlY29uZHMgKi8KLSAgICB1bnNpZ25lZCBsb25nIGFsYXJtX3NldCA9IHByZXZfYWxhcm0gLSBlbGFwc2VkX3NlY3M7CisgICAgdW5zaWduZWQgbG9uZyBhbGFybV9zZXQgPSAodW5zaWduZWQgbG9uZykocHJldl9hbGFybSAtIGVsYXBzZWRfc2Vjcyk7CiAKICAgICBpZighYWxhcm1fc2V0IHx8CiAgICAgICAgKChhbGFybV9zZXQgPj0gMHg4MDAwMDAwMCkgJiYgKHByZXZfYWxhcm0gPCAweDgwMDAwMDAwKSkgKSB7CkBAIC04NjgsNyArOTA2LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuczsKLSAgICAgIEN1cmxfYWRkcmluZm8gKmhlYWQgPSBOVUxMLCAqdGFpbCA9IE5VTEw7CisgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqaGVhZCA9IE5VTEwsICp0YWlsID0gTlVMTDsKICAgICAgIHNpemVfdCBlbnRyeV9sZW47CiAgICAgICBjaGFyIGFkZHJlc3NbNjRdOwogI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCkBAIC05MDIsNyArOTQwLDcgQEAKIAogICAgICAgd2hpbGUoKmVuZF9wdHIpIHsKICAgICAgICAgc2l6ZV90IGFsZW47Ci0gICAgICAgIEN1cmxfYWRkcmluZm8gKmFpOworICAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWk7CiAKICAgICAgICAgYWRkcl9iZWdpbiA9IGVuZF9wdHIgKyAxOwogICAgICAgICBhZGRyX2VuZCA9IHN0cmNocihhZGRyX2JlZ2luLCAnLCcpOwpAQCAtMTAyMSwyNSArMTA1OSwyNyBAQAogQ1VSTGNvZGUgQ3VybF9yZXNvbHZfY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKQogewotICBpZihjb25uLT5kYXRhLT5zZXQuZG9oKQorI2lmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX0RPSCkgJiYgIWRlZmluZWQoQ1VSTFJFU19BU1lOQ0gpCisgICh2b2lkKWRuczsKKyNlbmRpZgorCisgIGlmKGNvbm4tPmJpdHMuZG9oKQogICAgIHJldHVybiBDdXJsX2RvaF9pc19yZXNvbHZlZChjb25uLCBkbnMpOwogICByZXR1cm4gQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZChjb25uLCBkbnMpOwogfQogCiBpbnQgQ3VybF9yZXNvbHZfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogI2lmZGVmIENVUkxSRVNfQVNZTkNICi0gIGlmKGNvbm4tPmRhdGEtPnNldC5kb2gpCisgIGlmKGNvbm4tPmJpdHMuZG9oKQogICAgIC8qIG5vdGhpbmcgdG8gd2FpdCBmb3IgZHVyaW5nIERPSCByZXNvbHZlLCB0aG9zZSBoYW5kbGVzIGhhdmUgdGhlaXIgb3duCiAgICAgICAgc29ja2V0cyAqLwogICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotICByZXR1cm4gQ3VybF9yZXNvbHZlcl9nZXRzb2NrKGNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3Jlc29sdmVyX2dldHNvY2soY29ubiwgc29ja3MpOwogI2Vsc2UKICAgKHZvaWQpY29ubjsKICAgKHZvaWQpc29ja3M7Ci0gICh2b2lkKW51bXNvY2tzOwogICByZXR1cm4gR0VUU09DS19CTEFOSzsKICNlbmRpZgogfQpAQCAtMTA2MSwxMCArMTEwMSwxMiBAQAogCiAgIHJlc3VsdCA9IEN1cmxfc2V0dXBfY29ubihjb25uLCBwcm90b2NvbF9kb25lKTsKIAotICBpZihyZXN1bHQpCi0gICAgLyogV2UncmUgbm90IGFsbG93ZWQgdG8gcmV0dXJuIGZhaWx1cmUgd2l0aCBtZW1vcnkgbGVmdCBhbGxvY2F0ZWQKLSAgICAgICBpbiB0aGUgY29ubmVjdGRhdGEgc3RydWN0LCBmcmVlIHRob3NlIGhlcmUgKi8KLSAgICBDdXJsX2Rpc2Nvbm5lY3QoY29ubi0+ZGF0YSwgY29ubiwgVFJVRSk7IC8qIGNsb3NlIHRoZSBjb25uZWN0aW9uICovCi0KKyAgaWYocmVzdWx0KSB7CisgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICAgREVCVUdBU1NFUlQoZGF0YSk7CisgICAgQ3VybF9kZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisgICAgQ3VybF9jb25uY2FjaGVfcmVtb3ZlX2Nvbm4oZGF0YSwgY29ubiwgVFJVRSk7CisgICAgQ3VybF9kaXNjb25uZWN0KGRhdGEsIGNvbm4sIFRSVUUpOworICB9CiAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5oCmluZGV4IDlkYzBkNWEuLjM3NGIwNmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJjdXJsX2FkZHJpbmZvLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIiAvKiBmb3IgdGltZWRpZmZfdCAqLwogI2luY2x1ZGUgImFzeW4uaCIKIAogI2lmZGVmIEhBVkVfU0VUSk1QX0gKQEAgLTYxLDEwICs2Miw5IEBACiAgKiBSZXR1cm5zIGEgc3RydWN0IGN1cmxfaGFzaCBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RydWN0IGN1cmxfaGFzaCAqQ3VybF9nbG9iYWxfaG9zdF9jYWNoZV9pbml0KHZvaWQpOwotdm9pZCBDdXJsX2dsb2JhbF9ob3N0X2NhY2hlX2R0b3Iodm9pZCk7CiAKIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSB7Ci0gIEN1cmxfYWRkcmluZm8gKmFkZHI7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyOwogICAvKiB0aW1lc3RhbXAgPT0gMCAtLSBDVVJMT1BUX1JFU09MVkUgZW50cnksIGRvZXNuJ3QgdGltZW91dCAqLwogICB0aW1lX3QgdGltZXN0YW1wOwogICAvKiB1c2UtY291bnRlciwgdXNlIEN1cmxfcmVzb2x2X3VubG9jayB0byByZWxlYXNlIHJlZmVyZW5jZSAqLwpAQCAtNzksMjYgKzc5LDI5IEBACiAgKiB1c2UsIG9yIHdlJ2xsIGxlYWsgbWVtb3J5IQogICovCiAvKiByZXR1cm4gY29kZXMgKi8KLSNkZWZpbmUgQ1VSTFJFU09MVl9USU1FRE9VVCAtMgotI2RlZmluZSBDVVJMUkVTT0xWX0VSUk9SICAgIC0xCi0jZGVmaW5lIENVUkxSRVNPTFZfUkVTT0xWRUQgIDAKLSNkZWZpbmUgQ1VSTFJFU09MVl9QRU5ESU5HICAgMQotaW50IEN1cmxfcmVzb2x2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICBib29sIGFsbG93RE9ILAotICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmRuc2VudHJ5KTsKLWludCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZW91dG1zKTsKK2VudW0gcmVzb2x2ZV90IHsKKyAgQ1VSTFJFU09MVl9USU1FRE9VVCA9IC0yLAorICBDVVJMUkVTT0xWX0VSUk9SICAgID0gLTEsCisgIENVUkxSRVNPTFZfUkVTT0xWRUQgPSAgMCwKKyAgQ1VSTFJFU09MVl9QRU5ESU5HICA9ICAxCit9OworZW51bSByZXNvbHZlX3QgQ3VybF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dET0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSk7CitlbnVtIHJlc29sdmVfdCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRpZmZfdCB0aW1lb3V0bXMpOwogCiAjaWZkZWYgQ1VSTFJFU19JUFY2CiAvKgogICogQ3VybF9pcHY2d29ya3MoKSByZXR1cm5zIFRSVUUgaWYgSVB2NiBzZWVtcyB0byB3b3JrLgogICovCi1ib29sIEN1cmxfaXB2NndvcmtzKHZvaWQpOworYm9vbCBDdXJsX2lwdjZ3b3JrcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogI2Vsc2UKLSNkZWZpbmUgQ3VybF9pcHY2d29ya3MoKSBGQUxTRQorI2RlZmluZSBDdXJsX2lwdjZ3b3Jrcyh4KSBGQUxTRQogI2VuZGlmCiAKIC8qCkBAIC0xMTQsMTkgKzExNywxNiBAQAogICogbmFtZSByZXNvbHZlIGxheWVycyAoc2VsZWN0ZWQgYXQgYnVpbGQtdGltZSkuIFRoZXkgYWxsIHRha2UgdGhpcyBzYW1lIHNldAogICogb2YgYXJndW1lbnRzCiAgKi8KLUN1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOwogCiAKIC8qIHVubG9jayBhIHByZXZpb3VzbHkgcmVzb2x2ZWQgZG5zIGVudHJ5ICovCiB2b2lkIEN1cmxfcmVzb2x2X3VubG9jayhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMpOwogCi0vKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHk6ICovCi12b2lkIEN1cmxfc2Nhbl9jYWNoZV91c2VkKHZvaWQgKnVzZXIsIHZvaWQgKnB0cik7Ci0KIC8qIGluaXQgYSBuZXcgZG5zIGNhY2hlIGFuZCByZXR1cm4gc3VjY2VzcyAqLwogaW50IEN1cmxfbWtfZG5zY2FjaGUoc3RydWN0IGN1cmxfaGFzaCAqaGFzaCk7CiAKQEAgLTEzNCw3ICsxMzQsNyBAQAogdm9pZCBDdXJsX2hvc3RjYWNoZV9wcnVuZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAogLyogUmV0dXJuICMgb2YgYWRkcmVzc2VzIGluIGEgQ3VybF9hZGRyaW5mbyBzdHJ1Y3QgKi8KLWludCBDdXJsX251bV9hZGRyZXNzZXMoY29uc3QgQ3VybF9hZGRyaW5mbyAqYWRkcik7CitpbnQgQ3VybF9udW1fYWRkcmVzc2VzKGNvbnN0IHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyKTsKIAogI2lmIGRlZmluZWQoQ1VSTERFQlVHKSAmJiBkZWZpbmVkKEhBVkVfR0VUTkFNRUlORk8pCiBpbnQgY3VybF9kb2dldG5hbWVpbmZvKEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc2EsCkBAIC0xNDYsNyArMTQ2LDcgQEAKICNlbmRpZgogCiAvKiBJUHY0IHRocmVhZHNhZmUgcmVzb2x2ZSBmdW5jdGlvbiB1c2VkIGZvciBzeW5jaCBhbmQgYXN5bmNoIGJ1aWxkcyAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9pcHY0X3Jlc29sdmVfcihjb25zdCBjaGFyICpob3N0bmFtZSwgaW50IHBvcnQpOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KTsKIAogQ1VSTGNvZGUgQ3VybF9vbmNlX3Jlc29sdmVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqcHJvdG9jb2xfY29ubmVjdCk7CiAKQEAgLTE1OCwxNSArMTU4LDE1IEBACiAgKi8KIENVUkxjb2RlIEN1cmxfYWRkcmluZm9fY2FsbGJhY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICphaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSk7CiAKIC8qCiAgKiBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKCkgcmV0dXJucyBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoZSAxc3QgYWRkcmVzcwogICogZ2l2ZW4gaW4gdGhlICdpcCcgYXJndW1lbnQuIFRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGJ1ZiB0aGF0IGlzCiAgKiBidWZzaXplIGJ5dGVzIGJpZy4KICAqLwotY29uc3QgY2hhciAqQ3VybF9wcmludGFibGVfYWRkcmVzcyhjb25zdCBDdXJsX2FkZHJpbmZvICppcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSk7Cit2b2lkIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29uc3Qgc3RydWN0IEN1cmxfYWRkcmluZm8gKmlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpOwogCiAvKgogICogQ3VybF9mZXRjaF9hZGRyKCkgZmV0Y2hlcyBhICdDdXJsX2Ruc19lbnRyeScgYWxyZWFkeSBpbiB0aGUgRE5TIGNhY2hlLgpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgKiBSZXR1cm5zIHRoZSBDdXJsX2Ruc19lbnRyeSBlbnRyeSBwb2ludGVyIG9yIE5VTEwgaWYgdGhlIHN0b3JhZ2UgZmFpbGVkLgogICovCiBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKgotQ3VybF9jYWNoZV9hZGRyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIEN1cmxfYWRkcmluZm8gKmFkZHIsCitDdXJsX2NhY2hlX2FkZHIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFkZHIsCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KTsKIAogI2lmbmRlZiBJTkFERFJfTk9ORQpAQCAtMjM3LDExICsyMzcsNiBAQAogdm9pZCBDdXJsX2hvc3RjYWNoZV9jbGVhbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBzdHJ1Y3QgY3VybF9oYXNoICpoYXNoKTsKIAogLyoKLSAqIERlc3Ryb3kgdGhlIGhvc3RjYWNoZSBvZiB0aGlzIGhhbmRsZS4KLSAqLwotdm9pZCBDdXJsX2hvc3RjYWNoZV9kZXN0cm95KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotCi0vKgogICogUG9wdWxhdGUgdGhlIGNhY2hlIHdpdGggc3BlY2lmaWVkIGVudHJpZXMgZnJvbSBDVVJMT1BUX1JFU09MVkUuCiAgKi8KIENVUkxjb2RlIEN1cmxfbG9hZGhvc3RwYWlycyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKQEAgLTI0OSw3ICsyNDQsNiBAQAogQ1VSTGNvZGUgQ3VybF9yZXNvbHZfY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKTsKIGludCBDdXJsX3Jlc29sdl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hPU1RJUF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA0LmMKaW5kZXggZTZiYTcxMC4uZWFlOTQxNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwNC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgInNoYXJlLmgiCiAjaW5jbHVkZSAic3RyZXJyb3IuaCIKICNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJpbmV0X3B0b24uaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC04OSwxMiArODgsMTIgQEAKICAqIGZsYXZvdXJzIGhhdmUgdGhyZWFkLXNhZmUgdmVyc2lvbnMgb2YgdGhlIHBsYWluIGdldGhvc3RieW5hbWUoKSBldGMuCiAgKgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7Ci0gIEN1cmxfYWRkcmluZm8gKmFpID0gTlVMTDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpID0gTlVMTDsKIAogI2lmZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKICAgKHZvaWQpY29ubjsKQEAgLTEyMCwzNiArMTE5LDMwIEBACiAgKiBpbXBseWluZyB0aGF0IG9ubHkgdGhyZWFkc2FmZSBjb2RlIGFuZCBmdW5jdGlvbiBjYWxscyBtYXkgYmUgdXNlZC4KICAqCiAgKi8KLUN1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0KQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCkKIHsKICNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUpICYmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfMykKICAgaW50IHJlczsKICNlbmRpZgotICBDdXJsX2FkZHJpbmZvICphaSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSA9IE5VTEw7CiAgIHN0cnVjdCBob3N0ZW50ICpoID0gTlVMTDsKLSAgc3RydWN0IGluX2FkZHIgaW47CiAgIHN0cnVjdCBob3N0ZW50ICpidWYgPSBOVUxMOwogCi0gIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLQogI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFKQotICBlbHNlIHsKLSAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0gICAgY2hhciBzYnVmWzEyXTsKLSAgICBjaGFyICpzYnVmcHRyID0gTlVMTDsKKyAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworICBjaGFyIHNidWZbMTJdOworICBjaGFyICpzYnVmcHRyID0gTlVMTDsKIAotICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX0lORVQ7Ci0gICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKLSAgICBpZihwb3J0KSB7Ci0gICAgICBtc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiJWQiLCBwb3J0KTsKLSAgICAgIHNidWZwdHIgPSBzYnVmOwotICAgIH0KKyAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX0lORVQ7CisgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgIGlmKHBvcnQpIHsKKyAgICBtc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiJWQiLCBwb3J0KTsKKyAgICBzYnVmcHRyID0gc2J1ZjsKKyAgfQogCi0gICAgKHZvaWQpQ3VybF9nZXRhZGRyaW5mb19leChob3N0bmFtZSwgc2J1ZnB0ciwgJmhpbnRzLCAmYWkpOworICAodm9pZClDdXJsX2dldGFkZHJpbmZvX2V4KGhvc3RuYW1lLCBzYnVmcHRyLCAmaGludHMsICZhaSk7CiAKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1IpCiAgIC8qCkBAIC0xNTcsMTQ0ICsxNTAsMTQxIEBACiAgICAqIFNpbmNlIHRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgaXQsIHRoZSBmb2xsb3dpbmcgY29kZSBpcwogICAgKiBzb21ld2hhdCAjaWZkZWYtcmlkZGVuLgogICAgKi8KLSAgZWxzZSB7Ci0gICAgaW50IGhfZXJybm9wOworICBpbnQgaF9lcnJub3A7CiAKLSAgICBidWYgPSBjYWxsb2MoMSwgQ1VSTF9IT1NURU5UX1NJWkUpOwotICAgIGlmKCFidWYpCi0gICAgICByZXR1cm4gTlVMTDsgLyogbWFqb3IgZmFpbHVyZSAqLwotICAgIC8qCi0gICAgICogVGhlIGNsZWFyaW5nIG9mIHRoZSBidWZmZXIgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGdldGhvc3RieW5hbWVfciBidWcgaW4KLSAgICAgKiBxbnggbnRvIGFuZCBpdCBpcyBhbHNvIF9yZXF1aXJlZF8gZm9yIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG9uIHNvbWUKLSAgICAgKiBwbGF0Zm9ybXMuCi0gICAgICovCisgIGJ1ZiA9IGNhbGxvYygxLCBDVVJMX0hPU1RFTlRfU0laRSk7CisgIGlmKCFidWYpCisgICAgcmV0dXJuIE5VTEw7IC8qIG1ham9yIGZhaWx1cmUgKi8KKyAgLyoKKyAgICogVGhlIGNsZWFyaW5nIG9mIHRoZSBidWZmZXIgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGdldGhvc3RieW5hbWVfciBidWcgaW4KKyAgICogcW54IG50byBhbmQgaXQgaXMgYWxzbyBfcmVxdWlyZWRfIGZvciBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBvbiBzb21lCisgICAqIHBsYXRmb3Jtcy4KKyAgICovCiAKICNpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUpCi0gICAgLyogU29sYXJpcywgSVJJWCBhbmQgbW9yZSAqLwotICAgIGggPSBnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWJ1ZiArIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAmaF9lcnJub3ApOworICAvKiBTb2xhcmlzLCBJUklYIGFuZCBtb3JlICovCisgIGggPSBnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50ICopYnVmLAorICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCisgICAgICAgICAgICAgICAgICAgICAgJmhfZXJybm9wKTsKIAotICAgIC8qIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCBpdCByZXR1cm5zIE5VTEwgYW5kIHNldHMgZXJybm8gdG8KLSAgICAgKiBFUkFOR0UuIFRoZSBlcnJubyBpcyB0aHJlYWQgc2FmZSBpZiB0aGlzIGlzIGNvbXBpbGVkIHdpdGgKLSAgICAgKiAtRF9SRUVOVFJBTlQgYXMgdGhlbiB0aGUgJ2Vycm5vJyB2YXJpYWJsZSBpcyBhIG1hY3JvIGRlZmluZWQgdG8gZ2V0Ci0gICAgICogdXNlZCBwcm9wZXJseSBmb3IgdGhyZWFkcy4KLSAgICAgKi8KKyAgLyogSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIGl0IHJldHVybnMgTlVMTCBhbmQgc2V0cyBlcnJubyB0bworICAgKiBFUkFOR0UuIFRoZSBlcnJubyBpcyB0aHJlYWQgc2FmZSBpZiB0aGlzIGlzIGNvbXBpbGVkIHdpdGgKKyAgICogLURfUkVFTlRSQU5UIGFzIHRoZW4gdGhlICdlcnJubycgdmFyaWFibGUgaXMgYSBtYWNybyBkZWZpbmVkIHRvIGdldAorICAgKiB1c2VkIHByb3Blcmx5IGZvciB0aHJlYWRzLgorICAgKi8KIAotICAgIGlmKGgpIHsKLSAgICAgIDsKLSAgICB9Ci0gICAgZWxzZQotI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl82KQotICAgIC8qIExpbnV4ICovCi0KLSAgICAodm9pZClnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWJ1ZiArIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAmaCwgLyogRElGRkVSRU5DRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgJmhfZXJybm9wKTsKLSAgICAvKiBSZWRoYXQgOCwgdXNpbmcgZ2xpYmMgMi4yLjkzIGNoYW5nZWQgdGhlIGJlaGF2aW9yLiBOb3cgYWxsIG9mIGEKLSAgICAgKiBzdWRkZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIEVBR0FJTiBpZiB0aGUgZ2l2ZW4gYnVmZmVyIHNpemUgaXMgdG9vCi0gICAgICogc21hbGwuIFByZXZpb3VzIHZlcnNpb25zIGFyZSBrbm93biB0byByZXR1cm4gRVJBTkdFIGZvciB0aGUgc2FtZQotICAgICAqIHByb2JsZW0uCi0gICAgICoKLSAgICAgKiBUaGlzIHdvdWxkbid0IGJlIHN1Y2ggYSBiaWcgcHJvYmxlbSBpZiBvbGRlciB2ZXJzaW9ucyB3b3VsZG4ndAotICAgICAqIHNvbWV0aW1lcyByZXR1cm4gRUFHQUlOIG9uIGEgY29tbW9uIGZhaWx1cmUgY2FzZS4gQWxhcywgd2UgY2FuJ3QKLSAgICAgKiBhc3N1bWUgdGhhdCBFQUdBSU4gKm9yKiBFUkFOR0UgbWVhbnMgRVJBTkdFIGZvciBhbnkgZ2l2ZW4gdmVyc2lvbiBvZgotICAgICAqIGdsaWJjLgotICAgICAqCi0gICAgICogRm9yIG5vdywgd2UgZG8gdGhhdCBhbmQgdGh1cyB3ZSBtYXkgY2FsbCB0aGUgZnVuY3Rpb24gcmVwZWF0ZWRseSBhbmQKLSAgICAgKiBmYWlsIGZvciBvbGRlciBnbGliYyB2ZXJzaW9ucyB0aGF0IHJldHVybiBFQUdBSU4sIHVudGlsIHdlIHJ1biBvdXQgb2YKLSAgICAgKiBidWZmZXIgc2l6ZSAoc3RlcF9zaXplIGdyb3dzIGJleW9uZCBDVVJMX0hPU1RFTlRfU0laRSkuCi0gICAgICoKLSAgICAgKiBJZiBhbnlvbmUgaGFzIGEgYmV0dGVyIGZpeCwgcGxlYXNlIHRlbGwgdXMhCi0gICAgICoKLSAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICoKLSAgICAgKiBPbiBPY3RvYmVyIDIzcmQgMjAwMywgRGFuIEMgZHVnIHVwIG1vcmUgZGV0YWlscyBvbiB0aGUgbXlzdGVyaWVzIG9mCi0gICAgICogZ2V0aG9zdGJ5bmFtZV9yKCkgaW4gZ2xpYmM6Ci0gICAgICoKLSAgICAgKiBJbiBnbGliYyAyLjIuNSB0aGUgaW50ZXJmYWNlIGlzIGRpZmZlcmVudCAodGhpcyBoYXMgYWxzbyBiZWVuCi0gICAgICogZGlzY292ZXJlZCBpbiBnbGliYyAyLjEuMS02IGFzIHNoaXBwZWQgYnkgUmVkaGF0IDYpLiBXaGF0IEkgY2FuJ3QKLSAgICAgKiBleHBsYWluLCBpcyB0aGF0IHRlc3RzIHBlcmZvcm1lZCBvbiBnbGliYyAyLjIuNC0zNCBhbmQgMi4yLjQtMzIKLSAgICAgKiAoc2hpcHBlZC91cGdyYWRlZCBieSBSZWRoYXQgNy4yKSBkb24ndCBzaG93IHRoaXMgYmVoYXZpb3IhCi0gICAgICoKLSAgICAgKiBJbiB0aGlzICJidWdneSIgdmVyc2lvbiwgdGhlIHJldHVybiBjb2RlIGlzIC0xIG9uIGVycm9yIGFuZCAnZXJybm8nCi0gICAgICogaXMgc2V0IHRvIHRoZSBFUkFOR0Ugb3IgRUFHQUlOIGNvZGUuIE5vdGUgdGhhdCAnZXJybm8nIGlzIG5vdCBhCi0gICAgICogdGhyZWFkLXNhZmUgdmFyaWFibGUuCi0gICAgICovCi0KLSAgICBpZighaCkgLyogZmFpbHVyZSAqLwotI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl8zKQotICAgIC8qIEFJWCwgRGlnaXRhbCBVbml4L1RydTY0LCBIUFVYIDEwLCBtb3JlPyAqLwotCi0gICAgLyogRm9yIEFJWCA0LjMgb3IgbGF0ZXIsIHdlIGRvbid0IHVzZSBnZXRob3N0YnluYW1lX3IoKSBhdCBhbGwsIGJlY2F1c2Ugb2YKLSAgICAgKiB0aGUgcGxhaW4gZmFjdCB0aGF0IGl0IGRvZXMgbm90IHJldHVybiB1bmlxdWUgZnVsbCBidWZmZXJzIG9uIGVhY2gKLSAgICAgKiBjYWxsLCBidXQgaW5zdGVhZCBzZXZlcmFsIG9mIHRoZSBwb2ludGVycyBpbiB0aGUgaG9zdGVudCBzdHJ1Y3RzIHdpbGwKLSAgICAgKiBwb2ludCB0byB0aGUgc2FtZSBhY3R1YWwgZGF0YSEgVGhpcyBoYXZlIHRoZSB1bmZvcnR1bmF0ZSBkb3duLXNpZGUgdGhhdAotICAgICAqIG91ciBjYWNoaW5nIHN5c3RlbSBicmVha3MgZG93biBob3JyaWJseS4gTHVja2lseSBmb3IgdXMgdGhvdWdoLCBBSVggNC4zCi0gICAgICogYW5kIG1vcmUgcmVjZW50IHZlcnNpb25zIGhhdmUgYSAiY29tcGxldGVseSB0aHJlYWQtc2FmZSJbKl0gbGliYyB3aGVyZQotICAgICAqIGFsbCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gdGhyZWFkLXNwZWNpZmljIG1lbW9yeSBhcmVhcyBtYWtpbmcgY2FsbHMgdG8KLSAgICAgKiB0aGUgcGxhaW4gb2xkIGdldGhvc3RieW5hbWUoKSB3b3JrIGZpbmUgZXZlbiBmb3IgbXVsdGktdGhyZWFkZWQKLSAgICAgKiBwcm9ncmFtcy4KLSAgICAgKgotICAgICAqIFRoaXMgQUlYIDQuMyBvciBsYXRlciBkZXRlY3Rpb24gaXMgYWxsIG1hZGUgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCi0gICAgICoKLSAgICAgKiBUcm9lbHMgV2Fsc3RlZCBIYW5zZW4gaGVscGVkIHVzIHdvcmsgdGhpcyBvdXQgb24gTWFyY2ggM3JkLCAyMDAzLgotICAgICAqCi0gICAgICogWypdID0gbXVjaCBsYXRlciB3ZSd2ZSBmb3VuZCBvdXQgdGhhdCBpdCBpc24ndCBhdCBhbGwgImNvbXBsZXRlbHkKLSAgICAgKiB0aHJlYWQtc2FmZSIsIGJ1dCBhdCBsZWFzdCB0aGUgZ2V0aG9zdGJ5bmFtZSgpIGZ1bmN0aW9uIGlzLgotICAgICAqLwotCi0gICAgaWYoQ1VSTF9IT1NURU5UX1NJWkUgPj0KLSAgICAgICAoc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSArIHNpemVvZihzdHJ1Y3QgaG9zdGVudF9kYXRhKSkpIHsKLQotICAgICAgLyogQXVndXN0IDIybmQsIDIwMDA6IEFsYmVydCBDaGluLUEtWW91bmcgYnJvdWdodCBhbiB1cGRhdGVkIHZlcnNpb24KLSAgICAgICAqIHRoYXQgc2hvdWxkIHdvcmshIFNlcHRlbWJlciAyMDogUmljaGFyZCBQcmVzY290dCB3b3JrZWQgb24gdGhlIGJ1ZmZlcgotICAgICAgICogc2l6ZSBkaWxlbW1hLgotICAgICAgICovCi0KLSAgICAgIHJlcyA9IGdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50X2RhdGEgKikoKGNoYXIgKilidWYgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdGVudCkpKTsKLSAgICAgIGhfZXJybm9wID0gU09DS0VSUk5POyAvKiB3ZSBkb24ndCBkZWFsIHdpdGggdGhpcywgYnV0IHNldCBpdCBhbnl3YXkgKi8KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzID0gLTE7IC8qIGZhaWx1cmUsIHRvbyBzbWFsbGlzaCBidWZmZXIgc2l6ZSAqLwotCi0gICAgaWYoIXJlcykgeyAvKiBzdWNjZXNzICovCi0KLSAgICAgIGggPSBidWY7IC8qIHJlc3VsdCBleHBlY3RlZCBpbiBoICovCi0KLSAgICAgIC8qIFRoaXMgaXMgdGhlIHdvcnN0IGtpbmQgb2YgdGhlIGRpZmZlcmVudCBnZXRob3N0YnluYW1lX3IoKSBpbnRlcmZhY2VzLgotICAgICAgICogU2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgYmlnIGJ1ZmZlciB0aGlzIHBhcnRpY3VsYXIgbG9va3VwIHJlcXVpcmVkLAotICAgICAgICogd2UgY2FuJ3QgcmVhbGxvYyBkb3duIHRoZSBodWdlIGFsbG9jIHdpdGhvdXQgZG9pbmcgY2xvc2VyIGFuYWx5c2lzIG9mCi0gICAgICAgKiB0aGUgcmV0dXJuZWQgZGF0YS4gVGh1cywgd2UgYWx3YXlzIHVzZSBDVVJMX0hPU1RFTlRfU0laRSBmb3IgZXZlcnkKLSAgICAgICAqIG5hbWUgbG9va3VwLiBGaXhpbmcgdGhpcyB3b3VsZCByZXF1aXJlIGFuIGV4dHJhIG1hbGxvYygpIGFuZCB0aGVuCi0gICAgICAgKiBjYWxsaW5nIEN1cmxfYWRkcmluZm9fY29weSgpIHRoYXQgc3Vic2VxdWVudCByZWFsbG9jKClzIGRvd24gdGhlIG5ldwotICAgICAgICogbWVtb3J5IGFyZWEgdG8gdGhlIGFjdHVhbGx5IHVzZWQgYW1vdW50LgotICAgICAgICovCi0gICAgfQotICAgIGVsc2UKLSNlbmRpZiAvKiBIQVZFXy4uLkJZTkFNRV9SXzUgfHwgSEFWRV8uLi5CWU5BTUVfUl82IHx8IEhBVkVfLi4uQllOQU1FX1JfMyAqLwotICAgIHsKLSAgICAgIGggPSBOVUxMOyAvKiBzZXQgcmV0dXJuIGNvZGUgdG8gTlVMTCAqLwotICAgICAgZnJlZShidWYpOwotICAgIH0KLSNlbHNlIC8qIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB8fCBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLwotICAgIC8qCi0gICAgICogSGVyZSBpcyBjb2RlIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIGEgdGhyZWFkIHNhZmUKLSAgICAgKiBnZXRhZGRyaW5mbygpIG5vciBnZXRob3N0YnluYW1lX3IoKSBmdW5jdGlvbiBvciBmb3Igd2hpY2gKLSAgICAgKiBnZXRob3N0YnluYW1lKCkgaXMgdGhlIHByZWZlcnJlZCBvbmUuCi0gICAgICovCi0gIGVsc2UgewotICAgIGggPSBnZXRob3N0YnluYW1lKCh2b2lkICopaG9zdG5hbWUpOwotI2VuZGlmIC8qIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB8fCBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLworICBpZihoKSB7CisgICAgOwogICB9CisgIGVsc2UKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfNikKKyAgLyogTGludXggKi8KKworICAodm9pZClnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50ICopYnVmLAorICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCisgICAgICAgICAgICAgICAgICAgICAgJmgsIC8qIERJRkZFUkVOQ0UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAmaF9lcnJub3ApOworICAvKiBSZWRoYXQgOCwgdXNpbmcgZ2xpYmMgMi4yLjkzIGNoYW5nZWQgdGhlIGJlaGF2aW9yLiBOb3cgYWxsIG9mIGEKKyAgICogc3VkZGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBFQUdBSU4gaWYgdGhlIGdpdmVuIGJ1ZmZlciBzaXplIGlzIHRvbworICAgKiBzbWFsbC4gUHJldmlvdXMgdmVyc2lvbnMgYXJlIGtub3duIHRvIHJldHVybiBFUkFOR0UgZm9yIHRoZSBzYW1lCisgICAqIHByb2JsZW0uCisgICAqCisgICAqIFRoaXMgd291bGRuJ3QgYmUgc3VjaCBhIGJpZyBwcm9ibGVtIGlmIG9sZGVyIHZlcnNpb25zIHdvdWxkbid0CisgICAqIHNvbWV0aW1lcyByZXR1cm4gRUFHQUlOIG9uIGEgY29tbW9uIGZhaWx1cmUgY2FzZS4gQWxhcywgd2UgY2FuJ3QKKyAgICogYXNzdW1lIHRoYXQgRUFHQUlOICpvciogRVJBTkdFIG1lYW5zIEVSQU5HRSBmb3IgYW55IGdpdmVuIHZlcnNpb24gb2YKKyAgICogZ2xpYmMuCisgICAqCisgICAqIEZvciBub3csIHdlIGRvIHRoYXQgYW5kIHRodXMgd2UgbWF5IGNhbGwgdGhlIGZ1bmN0aW9uIHJlcGVhdGVkbHkgYW5kCisgICAqIGZhaWwgZm9yIG9sZGVyIGdsaWJjIHZlcnNpb25zIHRoYXQgcmV0dXJuIEVBR0FJTiwgdW50aWwgd2UgcnVuIG91dCBvZgorICAgKiBidWZmZXIgc2l6ZSAoc3RlcF9zaXplIGdyb3dzIGJleW9uZCBDVVJMX0hPU1RFTlRfU0laRSkuCisgICAqCisgICAqIElmIGFueW9uZSBoYXMgYSBiZXR0ZXIgZml4LCBwbGVhc2UgdGVsbCB1cyEKKyAgICoKKyAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKgorICAgKiBPbiBPY3RvYmVyIDIzcmQgMjAwMywgRGFuIEMgZHVnIHVwIG1vcmUgZGV0YWlscyBvbiB0aGUgbXlzdGVyaWVzIG9mCisgICAqIGdldGhvc3RieW5hbWVfcigpIGluIGdsaWJjOgorICAgKgorICAgKiBJbiBnbGliYyAyLjIuNSB0aGUgaW50ZXJmYWNlIGlzIGRpZmZlcmVudCAodGhpcyBoYXMgYWxzbyBiZWVuCisgICAqIGRpc2NvdmVyZWQgaW4gZ2xpYmMgMi4xLjEtNiBhcyBzaGlwcGVkIGJ5IFJlZGhhdCA2KS4gV2hhdCBJIGNhbid0CisgICAqIGV4cGxhaW4sIGlzIHRoYXQgdGVzdHMgcGVyZm9ybWVkIG9uIGdsaWJjIDIuMi40LTM0IGFuZCAyLjIuNC0zMgorICAgKiAoc2hpcHBlZC91cGdyYWRlZCBieSBSZWRoYXQgNy4yKSBkb24ndCBzaG93IHRoaXMgYmVoYXZpb3IhCisgICAqCisgICAqIEluIHRoaXMgImJ1Z2d5IiB2ZXJzaW9uLCB0aGUgcmV0dXJuIGNvZGUgaXMgLTEgb24gZXJyb3IgYW5kICdlcnJubycKKyAgICogaXMgc2V0IHRvIHRoZSBFUkFOR0Ugb3IgRUFHQUlOIGNvZGUuIE5vdGUgdGhhdCAnZXJybm8nIGlzIG5vdCBhCisgICAqIHRocmVhZC1zYWZlIHZhcmlhYmxlLgorICAgKi8KKworICBpZighaCkgLyogZmFpbHVyZSAqLworI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl8zKQorICAvKiBBSVgsIERpZ2l0YWwgVW5peC9UcnU2NCwgSFBVWCAxMCwgbW9yZT8gKi8KKworICAvKiBGb3IgQUlYIDQuMyBvciBsYXRlciwgd2UgZG9uJ3QgdXNlIGdldGhvc3RieW5hbWVfcigpIGF0IGFsbCwgYmVjYXVzZSBvZgorICAgKiB0aGUgcGxhaW4gZmFjdCB0aGF0IGl0IGRvZXMgbm90IHJldHVybiB1bmlxdWUgZnVsbCBidWZmZXJzIG9uIGVhY2gKKyAgICogY2FsbCwgYnV0IGluc3RlYWQgc2V2ZXJhbCBvZiB0aGUgcG9pbnRlcnMgaW4gdGhlIGhvc3RlbnQgc3RydWN0cyB3aWxsCisgICAqIHBvaW50IHRvIHRoZSBzYW1lIGFjdHVhbCBkYXRhISBUaGlzIGhhdmUgdGhlIHVuZm9ydHVuYXRlIGRvd24tc2lkZSB0aGF0CisgICAqIG91ciBjYWNoaW5nIHN5c3RlbSBicmVha3MgZG93biBob3JyaWJseS4gTHVja2lseSBmb3IgdXMgdGhvdWdoLCBBSVggNC4zCisgICAqIGFuZCBtb3JlIHJlY2VudCB2ZXJzaW9ucyBoYXZlIGEgImNvbXBsZXRlbHkgdGhyZWFkLXNhZmUiWypdIGxpYmMgd2hlcmUKKyAgICogYWxsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aHJlYWQtc3BlY2lmaWMgbWVtb3J5IGFyZWFzIG1ha2luZyBjYWxscyB0bworICAgKiB0aGUgcGxhaW4gb2xkIGdldGhvc3RieW5hbWUoKSB3b3JrIGZpbmUgZXZlbiBmb3IgbXVsdGktdGhyZWFkZWQKKyAgICogcHJvZ3JhbXMuCisgICAqCisgICAqIFRoaXMgQUlYIDQuMyBvciBsYXRlciBkZXRlY3Rpb24gaXMgYWxsIG1hZGUgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICAqCisgICAqIFRyb2VscyBXYWxzdGVkIEhhbnNlbiBoZWxwZWQgdXMgd29yayB0aGlzIG91dCBvbiBNYXJjaCAzcmQsIDIwMDMuCisgICAqCisgICAqIFsqXSA9IG11Y2ggbGF0ZXIgd2UndmUgZm91bmQgb3V0IHRoYXQgaXQgaXNuJ3QgYXQgYWxsICJjb21wbGV0ZWx5CisgICAqIHRocmVhZC1zYWZlIiwgYnV0IGF0IGxlYXN0IHRoZSBnZXRob3N0YnluYW1lKCkgZnVuY3Rpb24gaXMuCisgICAqLworCisgIGlmKENVUkxfSE9TVEVOVF9TSVpFID49CisgICAgIChzaXplb2Yoc3RydWN0IGhvc3RlbnQpICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50X2RhdGEpKSkgeworCisgICAgLyogQXVndXN0IDIybmQsIDIwMDA6IEFsYmVydCBDaGluLUEtWW91bmcgYnJvdWdodCBhbiB1cGRhdGVkIHZlcnNpb24KKyAgICAgKiB0aGF0IHNob3VsZCB3b3JrISBTZXB0ZW1iZXIgMjA6IFJpY2hhcmQgUHJlc2NvdHQgd29ya2VkIG9uIHRoZSBidWZmZXIKKyAgICAgKiBzaXplIGRpbGVtbWEuCisgICAgICovCisKKyAgICByZXMgPSBnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaG9zdGVudCAqKWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50X2RhdGEgKikoKGNoYXIgKilidWYgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RlbnQpKSk7CisgICAgaF9lcnJub3AgPSBTT0NLRVJSTk87IC8qIHdlIGRvbid0IGRlYWwgd2l0aCB0aGlzLCBidXQgc2V0IGl0IGFueXdheSAqLworICB9CisgIGVsc2UKKyAgICByZXMgPSAtMTsgLyogZmFpbHVyZSwgdG9vIHNtYWxsaXNoIGJ1ZmZlciBzaXplICovCisKKyAgaWYoIXJlcykgeyAvKiBzdWNjZXNzICovCisKKyAgICBoID0gYnVmOyAvKiByZXN1bHQgZXhwZWN0ZWQgaW4gaCAqLworCisgICAgLyogVGhpcyBpcyB0aGUgd29yc3Qga2luZCBvZiB0aGUgZGlmZmVyZW50IGdldGhvc3RieW5hbWVfcigpIGludGVyZmFjZXMuCisgICAgICogU2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgYmlnIGJ1ZmZlciB0aGlzIHBhcnRpY3VsYXIgbG9va3VwIHJlcXVpcmVkLAorICAgICAqIHdlIGNhbid0IHJlYWxsb2MgZG93biB0aGUgaHVnZSBhbGxvYyB3aXRob3V0IGRvaW5nIGNsb3NlciBhbmFseXNpcyBvZgorICAgICAqIHRoZSByZXR1cm5lZCBkYXRhLiBUaHVzLCB3ZSBhbHdheXMgdXNlIENVUkxfSE9TVEVOVF9TSVpFIGZvciBldmVyeQorICAgICAqIG5hbWUgbG9va3VwLiBGaXhpbmcgdGhpcyB3b3VsZCByZXF1aXJlIGFuIGV4dHJhIG1hbGxvYygpIGFuZCB0aGVuCisgICAgICogY2FsbGluZyBDdXJsX2FkZHJpbmZvX2NvcHkoKSB0aGF0IHN1YnNlcXVlbnQgcmVhbGxvYygpcyBkb3duIHRoZSBuZXcKKyAgICAgKiBtZW1vcnkgYXJlYSB0byB0aGUgYWN0dWFsbHkgdXNlZCBhbW91bnQuCisgICAgICovCisgIH0KKyAgZWxzZQorI2VuZGlmIC8qIEhBVkVfLi4uQllOQU1FX1JfNSB8fCBIQVZFXy4uLkJZTkFNRV9SXzYgfHwgSEFWRV8uLi5CWU5BTUVfUl8zICovCisgIHsKKyAgICBoID0gTlVMTDsgLyogc2V0IHJldHVybiBjb2RlIHRvIE5VTEwgKi8KKyAgICBmcmVlKGJ1Zik7CisgIH0KKyNlbHNlIC8qIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB8fCBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLworICAvKgorICAgKiBIZXJlIGlzIGNvZGUgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgYSB0aHJlYWQgc2FmZQorICAgKiBnZXRhZGRyaW5mbygpIG5vciBnZXRob3N0YnluYW1lX3IoKSBmdW5jdGlvbiBvciBmb3Igd2hpY2gKKyAgICogZ2V0aG9zdGJ5bmFtZSgpIGlzIHRoZSBwcmVmZXJyZWQgb25lLgorICAgKi8KKyAgaCA9IGdldGhvc3RieW5hbWUoKHZvaWQgKilob3N0bmFtZSk7CisjZW5kaWYgLyogSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIHx8IEhBVkVfR0VUSE9TVEJZTkFNRV9SICovCiAKICAgaWYoaCkgewogICAgIGFpID0gQ3VybF9oZTJhaShoLCBwb3J0KTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDYuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDYuYwppbmRleCA1NTExZjFhLi4xMTIxNTc1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA2LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwNi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02MiwxMyArNjIsMTkgQEAKIC8qCiAgKiBDdXJsX2lwdjZ3b3JrcygpIHJldHVybnMgVFJVRSBpZiBJUHY2IHNlZW1zIHRvIHdvcmsuCiAgKi8KLWJvb2wgQ3VybF9pcHY2d29ya3Modm9pZCkKK2Jvb2wgQ3VybF9pcHY2d29ya3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICAvKiB0aGUgbmF0dXJlIG9mIG1vc3Qgc3lzdGVtIGlzIHRoYXQgSVB2NiBzdGF0dXMgZG9lc24ndCBjb21lIGFuZCBnbwotICAgICBkdXJpbmcgYSBwcm9ncmFtJ3MgbGlmZXRpbWUgc28gd2Ugb25seSBwcm9iZSB0aGUgZmlyc3QgdGltZSBhbmQgdGhlbiB3ZQotICAgICBoYXZlIHRoZSBpbmZvIGtlcHQgZm9yIGZhc3QgcmUtdXNlICovCi0gIHN0YXRpYyBpbnQgaXB2Nl93b3JrcyA9IC0xOwotICBpZigtMSA9PSBpcHY2X3dvcmtzKSB7CisgIGlmKGNvbm4pIHsKKyAgICAvKiB0aGUgbmF0dXJlIG9mIG1vc3Qgc3lzdGVtIGlzIHRoYXQgSVB2NiBzdGF0dXMgZG9lc24ndCBjb21lIGFuZCBnbworICAgICAgIGR1cmluZyBhIHByb2dyYW0ncyBsaWZldGltZSBzbyB3ZSBvbmx5IHByb2JlIHRoZSBmaXJzdCB0aW1lIGFuZCB0aGVuIHdlCisgICAgICAgaGF2ZSB0aGUgaW5mbyBrZXB0IGZvciBmYXN0IHJlLXVzZSAqLworICAgIERFQlVHQVNTRVJUKGNvbm4pOworICAgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEpOworICAgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEtPm11bHRpKTsKKyAgICByZXR1cm4gY29ubi0+ZGF0YS0+bXVsdGktPmlwdjZfd29ya3M7CisgIH0KKyAgZWxzZSB7CisgICAgaW50IGlwdjZfd29ya3MgPSAtMTsKICAgICAvKiBwcm9iZSB0byBzZWUgaWYgd2UgaGF2ZSBhIHdvcmtpbmcgSVB2NiBzdGFjayAqLwogICAgIGN1cmxfc29ja2V0X3QgcyA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiAgICAgaWYocyA9PSBDVVJMX1NPQ0tFVF9CQUQpCkBAIC03OCw4ICs4NCw4IEBACiAgICAgICBpcHY2X3dvcmtzID0gMTsKICAgICAgIEN1cmxfY2xvc2Vzb2NrZXQoTlVMTCwgcyk7CiAgICAgfQorICAgIHJldHVybiAoaXB2Nl93b3Jrcz4wKT9UUlVFOkZBTFNFOwogICB9Ci0gIHJldHVybiAoaXB2Nl93b3Jrcz4wKT9UUlVFOkZBTFNFOwogfQogCiAvKgpAQCAtODksNyArOTUsNyBAQAogYm9vbCBDdXJsX2lwdmFsaWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBpZihjb25uLT5pcF92ZXJzaW9uID09IENVUkxfSVBSRVNPTFZFX1Y2KQotICAgIHJldHVybiBDdXJsX2lwdjZ3b3JrcygpOworICAgIHJldHVybiBDdXJsX2lwdjZ3b3Jrcyhjb25uKTsKIAogICByZXR1cm4gVFJVRTsKIH0KQEAgLTk3LDIwICsxMDMsMTYgQEAKICNpZiBkZWZpbmVkKENVUkxSRVNfU1lOQ0gpCiAKICNpZmRlZiBERUJVR19BRERSSU5GTwotc3RhdGljIHZvaWQgZHVtcF9hZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpKQorc3RhdGljIHZvaWQgZHVtcF9hZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSkKIHsKICAgcHJpbnRmKCJkdW1wX2FkZHJpbmZvOlxuIik7CiAgIGZvcig7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CiAgICAgY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07CiAgICAgcHJpbnRmKCIgICAgZmFtICUyZCwgQ05BTUUgJXMsICIsCiAgICAgICAgICAgIGFpLT5haV9mYW1pbHksIGFpLT5haV9jYW5vbm5hbWUgPyBhaS0+YWlfY2Fub25uYW1lIDogIjxub25lPiIpOwotICAgIGlmKEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoYWksIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQotICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKLSAgICBlbHNlIHsKLSAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07Ci0gICAgICBwcmludGYoImZhaWxlZDsgJXNcbiIsCi0gICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihTT0NLRVJSTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICB9CisgICAgQ3VybF9wcmludGFibGVfYWRkcmVzcyhhaSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKICAgfQogfQogI2Vsc2UKQEAgLTEyNiwxMyArMTI4LDEzIEBACiAgKiBtZW1vcnkgd2UgbmVlZCB0byBmcmVlIGFmdGVyIHVzZS4gVGhhdCBtZW1vcnkgKk1VU1QqIGJlIGZyZWVkIHdpdGgKICAqIEN1cmxfZnJlZWFkZHJpbmZvKCksIG5vdGhpbmcgZWxzZS4KICAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQogewogICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0gIEN1cmxfYWRkcmluZm8gKnJlczsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKnJlczsKICAgaW50IGVycm9yOwogICBjaGFyIHNidWZbMTJdOwogICBjaGFyICpzYnVmcHRyID0gTlVMTDsKQEAgLTE1OSwxMyArMTYxLDE0IEBACiAgICAgYnJlYWs7CiAgIH0KIAotICBpZigocGYgIT0gUEZfSU5FVCkgJiYgIUN1cmxfaXB2NndvcmtzKCkpCisgIGlmKChwZiAhPSBQRl9JTkVUKSAmJiAhQ3VybF9pcHY2d29ya3MoY29ubikpCiAgICAgLyogVGhlIHN0YWNrIHNlZW1zIHRvIGJlIGEgbm9uLUlQdjYgb25lICovCiAgICAgcGYgPSBQRl9JTkVUOwogCiAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwogICBoaW50cy5haV9mYW1pbHkgPSBwZjsKLSAgaGludHMuYWlfc29ja3R5cGUgPSBjb25uLT5zb2NrdHlwZTsKKyAgaGludHMuYWlfc29ja3R5cGUgPSAoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfVENQKSA/CisgICAgU09DS19TVFJFQU0gOiBTT0NLX0RHUkFNOwogCiAjaWZuZGVmIFVTRV9SRVNPTFZFX09OX0lQUwogICAvKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdHN5bi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdHN5bi5jCmluZGV4IDNkZTY3NDYuLjllMzEwMDggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RzeW4uYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0c3luLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuYwppbmRleCAzMzhjNTlhLi4yOGQ2NmMyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC04OCw4ICs4OCw3IEBACiAgKi8KIAogc3RhdGljIGludCBodHRwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIGludCBodHRwX3Nob3VsZF9mYWlsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCkBAIC05OSw4ICs5OCw3IEBACiAjaWZkZWYgVVNFX1NTTAogc3RhdGljIENVUkxjb2RlIGh0dHBzX2Nvbm5lY3Rpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBpbnQgaHR0cHNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAjZWxzZQogI2RlZmluZSBodHRwc19jb25uZWN0aW5nKHgseSkgQ1VSTEVfQ09VTEROVF9DT05ORUNUCiAjZW5kaWYKQEAgLTEyNyw3ICsxMjUsOCBAQAogICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KICAgUE9SVF9IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCiAgIENVUkxQUk9UT19IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9DUkVEU1BFUlJFUVVFU1QgICAgICAgICAgICAgICAvKiBmbGFncyAqLworICBQUk9UT1BUX0NSRURTUEVSUkVRVUVTVCB8ICAgICAgICAgICAgIC8qIGZsYWdzICovCisgIFBST1RPUFRfVVNFUlBXRENUUkwKIH07CiAKICNpZmRlZiBVU0VfU1NMCkBAIC0xNTIsNyArMTUxLDggQEAKICAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCiAgIFBPUlRfSFRUUFMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLwogICBDVVJMUFJPVE9fSFRUUFMsICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCi0gIFBST1RPUFRfU1NMIHwgUFJPVE9QVF9DUkVEU1BFUlJFUVVFU1QgfCBQUk9UT1BUX0FMUE5fTlBOIC8qIGZsYWdzICovCisgIFBST1RPUFRfU1NMIHwgUFJPVE9QVF9DUkVEU1BFUlJFUVVFU1QgfCBQUk9UT1BUX0FMUE5fTlBOIHwgLyogZmxhZ3MgKi8KKyAgUFJPVE9QVF9VU0VSUFdEQ1RSTAogfTsKICNlbmRpZgogCkBAIC0xNzEsMTAgKzE3MSwyMiBAQAogICBDdXJsX21pbWVfaW5pdHBhcnQoJmh0dHAtPmZvcm0sIGNvbm4tPmRhdGEpOwogICBkYXRhLT5yZXEucHJvdG9wID0gaHR0cDsKIAotICBpZighQ09OTl9JTlVTRShjb25uKSkKLSAgICAvKiBpZiBub3QgYWxyZWFkeSBtdWx0aS11c2luZywgc2V0dXAgY29ubmVjdGlvbiBkZXRhaWxzICovCi0gICAgQ3VybF9odHRwMl9zZXR1cF9jb25uKGNvbm4pOwotICBDdXJsX2h0dHAyX3NldHVwX3JlcShkYXRhKTsKKyAgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09IENVUkxfSFRUUF9WRVJTSU9OXzMpIHsKKyAgICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQorICAgICAgLyogT25seSBnbyBIVFRQLzMgZGlyZWN0bHkgb24gSFRUUFMgVVJMcy4gSXQgbmVlZHMgYSBVRFAgc29ja2V0IGFuZCBkb2VzCisgICAgICAgICB0aGUgUVVJQyBkYW5jZS4gKi8KKyAgICAgIGNvbm4tPnRyYW5zcG9ydCA9IFRSTlNQUlRfUVVJQzsKKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGRhdGEsICJIVFRQLzMgcmVxdWVzdGVkIGZvciBub24tSFRUUFMgVVJMIik7CisgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYoIUNPTk5fSU5VU0UoY29ubikpCisgICAgICAvKiBpZiBub3QgYWxyZWFkeSBtdWx0aS11c2luZywgc2V0dXAgY29ubmVjdGlvbiBkZXRhaWxzICovCisgICAgICBDdXJsX2h0dHAyX3NldHVwX2Nvbm4oY29ubik7CisgICAgQ3VybF9odHRwMl9zZXR1cF9yZXEoZGF0YSk7CisgIH0KICAgcmV0dXJuIENVUkxFX09LOwogfQogCkBAIC0yNTgsNyArMjcwLDcgQEAKICAgICByZXR1cm4gTlVMTDsKIAogICBtZW1jcHkodmFsdWUsIHN0YXJ0LCBsZW4pOwotICB2YWx1ZVtsZW5dID0gMDsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgdmFsdWVbbGVuXSA9IDA7IC8qIG51bGwtdGVybWluYXRlICovCiAKICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMjgyLDE3ICsyOTQsMjEgQEAKICAgY2hhciAqb3V0OwogCiAgIGlmKHByb3h5KSB7Ci0gICAgdXNlcnAgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICB1c2VycCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKICAgICB1c2VyID0gY29ubi0+aHR0cF9wcm94eS51c2VyOwogICAgIHB3ZCA9IGNvbm4tPmh0dHBfcHJveHkucGFzc3dkOworI2Vsc2UKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCiAgIH0KICAgZWxzZSB7Ci0gICAgdXNlcnAgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgICB1c2VycCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q7CiAgICAgdXNlciA9IGNvbm4tPnVzZXI7CiAgICAgcHdkID0gY29ubi0+cGFzc3dkOwogICB9CiAKLSAgb3V0ID0gYXByaW50ZigiJXM6JXMiLCB1c2VyLCBwd2QpOworICBvdXQgPSBhcHJpbnRmKCIlczolcyIsIHVzZXIsIHB3ZCA/IHB3ZCA6ICIiKTsKICAgaWYoIW91dCkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtMzMwLDExICszNDYsMTIgQEAKIHsKICAgY2hhciAqKnVzZXJwOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKLSAgdXNlcnAgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgdXNlcnAgPSAmZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOwogICBmcmVlKCp1c2VycCk7CiAgICp1c2VycCA9IGFwcmludGYoIkF1dGhvcml6YXRpb246IEJlYXJlciAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgIGNvbm4tPm9hdXRoX2JlYXJlcik7CisgICAgICAgICAgICAgICAgICAgY29ubi0+ZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSk7CiAKICAgaWYoISp1c2VycCkgewogICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CkBAIC0zODMsNyArNDAwLDcgQEAKIH0KIAogLyoKLSAqIEN1cmxfaHR0cF9wZXJoYXBzcmV3aW5kKCkKKyAqIGh0dHBfcGVyaGFwc3Jld2luZCgpCiAgKgogICogSWYgd2UgYXJlIGRvaW5nIFBPU1Qgb3IgUFVUIHsKICAqICAgSWYgd2UgaGF2ZSBtb3JlIGRhdGEgdG8gc2VuZCB7CkBAIC00MTcsNyArNDM0LDcgQEAKICAgICAgICBza2lwIHRoaXMgcmV3aW5kaW5nIHN0dWZmICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCi0gIHN3aXRjaChkYXRhLT5zZXQuaHR0cHJlcSkgeworICBzd2l0Y2goZGF0YS0+c3RhdGUuaHR0cHJlcSkgewogICBjYXNlIEhUVFBSRVFfR0VUOgogICBjYXNlIEhUVFBSRVFfSEVBRDoKICAgICByZXR1cm4gQ1VSTEVfT0s7CkBAIC00MzgsMTEgKzQ1NSw4IEBACiAgIH0KICAgZWxzZSB7CiAgICAgLyogZmlndXJlIG91dCBob3cgbXVjaCBkYXRhIHdlIGFyZSBleHBlY3RlZCB0byBzZW5kICovCi0gICAgc3dpdGNoKGRhdGEtPnNldC5odHRwcmVxKSB7CisgICAgc3dpdGNoKGRhdGEtPnN0YXRlLmh0dHByZXEpIHsKICAgICBjYXNlIEhUVFBSRVFfUE9TVDoKLSAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgIT0gLTEpCi0gICAgICAgIGV4cGVjdHNlbmQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwotICAgICAgYnJlYWs7CiAgICAgY2FzZSBIVFRQUkVRX1BVVDoKICAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgIT0gLTEpCiAgICAgICAgIGV4cGVjdHNlbmQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwpAQCAtNTQ4LDcgKzU2Miw3IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICB1bnNpZ25lZCBsb25nIGF1dGhtYXNrID0gfjB1bDsKIAotICBpZighY29ubi0+b2F1dGhfYmVhcmVyKQorICBpZighZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkKICAgICBhdXRobWFzayAmPSAodW5zaWduZWQgbG9uZyl+Q1VSTEFVVEhfQkVBUkVSOwogCiAgIGlmKDEwMCA8PSBkYXRhLT5yZXEuaHR0cGNvZGUgJiYgMTk5ID49IGRhdGEtPnJlcS5odHRwY29kZSkKQEAgLTU1OCw3ICs1NzIsNyBAQAogICBpZihkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSkKICAgICByZXR1cm4gZGF0YS0+c2V0Lmh0dHBfZmFpbF9vbl9lcnJvcj9DVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SOkNVUkxFX09LOwogCi0gIGlmKChjb25uLT5iaXRzLnVzZXJfcGFzc3dkIHx8IGNvbm4tPm9hdXRoX2JlYXJlcikgJiYKKyAgaWYoKGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgfHwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkgJiYKICAgICAgKChkYXRhLT5yZXEuaHR0cGNvZGUgPT0gNDAxKSB8fAogICAgICAgKGNvbm4tPmJpdHMuYXV0aG5lZyAmJiBkYXRhLT5yZXEuaHR0cGNvZGUgPCAzMDApKSkgewogICAgIHBpY2tob3N0ID0gcGlja29uZWF1dGgoJmRhdGEtPnN0YXRlLmF1dGhob3N0LCBhdXRobWFzayk7CkBAIC01NzEsNiArNTg1LDcgQEAKICAgICAgIGNvbm4tPmRhdGEtPnNldC5odHRwdmVyc2lvbiA9IENVUkxfSFRUUF9WRVJTSU9OXzFfMTsKICAgICB9CiAgIH0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgJiYKICAgICAgKChkYXRhLT5yZXEuaHR0cGNvZGUgPT0gNDA3KSB8fAogICAgICAgKGNvbm4tPmJpdHMuYXV0aG5lZyAmJiBkYXRhLT5yZXEuaHR0cGNvZGUgPCAzMDApKSkgewpAQCAtNTc5LDEwICs1OTQsMTEgQEAKICAgICBpZighcGlja3Byb3h5KQogICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBUUlVFOwogICB9CisjZW5kaWYKIAogICBpZihwaWNraG9zdCB8fCBwaWNrcHJveHkpIHsKLSAgICBpZigoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9HRVQpICYmCi0gICAgICAgKGRhdGEtPnNldC5odHRwcmVxICE9IEhUVFBSRVFfSEVBRCkgJiYKKyAgICBpZigoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0dFVCkgJiYKKyAgICAgICAoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpICYmCiAgICAgICAgIWNvbm4tPmJpdHMucmV3aW5kYWZ0ZXJzZW5kKSB7CiAgICAgICByZXN1bHQgPSBodHRwX3BlcmhhcHNyZXdpbmQoY29ubik7CiAgICAgICBpZihyZXN1bHQpCkBAIC02MDMsOCArNjE5LDggQEAKICAgICAgICBhdXRoZW50aWNhdGlvbiBpcyBub3QgImRvbmUiIHlldCBhbmQKICAgICAgICBubyBhdXRoZW50aWNhdGlvbiBzZWVtcyB0byBiZSByZXF1aXJlZCBhbmQKICAgICAgICB3ZSBkaWRuJ3QgdHJ5IEhFQUQgb3IgR0VUICovCi0gICAgaWYoKGRhdGEtPnNldC5odHRwcmVxICE9IEhUVFBSRVFfR0VUKSAmJgotICAgICAgIChkYXRhLT5zZXQuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpKSB7CisgICAgaWYoKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9HRVQpICYmCisgICAgICAgKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9IRUFEKSkgewogICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IHN0cmR1cChkYXRhLT5jaGFuZ2UudXJsKTsgLyogY2xvbmUgVVJMICovCiAgICAgICBpZighZGF0YS0+cmVxLm5ld3VybCkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CkBAIC02MzQsOSArNjUwLDcgQEAKIHsKICAgY29uc3QgY2hhciAqYXV0aCA9IE5VTEw7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpIHx8IGRlZmluZWQoVVNFX1NQTkVHTykKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0jZW5kaWYKIAogI2lmZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAogICAodm9pZClyZXF1ZXN0OwpAQCAtNjQ0LDcgKzY1OCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIFVTRV9TUE5FR08KLSAgaWYoKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9ORUdPVElBVEUpKSB7CisgIGlmKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9ORUdPVElBVEUpIHsKICAgICBhdXRoID0gIk5lZ290aWF0ZSI7CiAgICAgcmVzdWx0ID0gQ3VybF9vdXRwdXRfbmVnb3RpYXRlKGNvbm4sIHByb3h5KTsKICAgICBpZihyZXN1bHQpCkBAIC02ODQsMTAgKzY5OCwxMyBAQAogI2VuZGlmCiAgIGlmKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9CQVNJQykgewogICAgIC8qIEJhc2ljICovCi0gICAgaWYoKHByb3h5ICYmIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgJiYKLSAgICAgICAgIUN1cmxfY2hlY2tQcm94eWhlYWRlcnMoY29ubiwgIlByb3h5LWF1dGhvcml6YXRpb24iKSkgfHwKLSAgICAgICAoIXByb3h5ICYmIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgJiYKLSAgICAgICAgIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJBdXRob3JpemF0aW9uIikpKSB7CisgICAgaWYoCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgKHByb3h5ICYmIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgJiYKKyAgICAgICAhQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25uLCAiUHJveHktYXV0aG9yaXphdGlvbiIpKSB8fAorI2VuZGlmCisgICAgICAoIXByb3h5ICYmIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgJiYKKyAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkF1dGhvcml6YXRpb24iKSkpIHsKICAgICAgIGF1dGggPSAiQmFzaWMiOwogICAgICAgcmVzdWx0ID0gaHR0cF9vdXRwdXRfYmFzaWMoY29ubiwgcHJveHkpOwogICAgICAgaWYocmVzdWx0KQpAQCAtNzAwLDcgKzcxNyw3IEBACiAgIH0KICAgaWYoYXV0aHN0YXR1cy0+cGlja2VkID09IENVUkxBVVRIX0JFQVJFUikgewogICAgIC8qIEJlYXJlciAqLwotICAgIGlmKCghcHJveHkgJiYgY29ubi0+b2F1dGhfYmVhcmVyICYmCisgICAgaWYoKCFwcm94eSAmJiBkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdICYmCiAgICAgICAgICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQXV0aG9yaXphdGlvbjoiKSkpIHsKICAgICAgIGF1dGggPSAiQmVhcmVyIjsKICAgICAgIHJlc3VsdCA9IGh0dHBfb3V0cHV0X2JlYXJlcihjb25uKTsKQEAgLTcxNCwxMCArNzMxLDE1IEBACiAgIH0KIAogICBpZihhdXRoKSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgIGluZm9mKGRhdGEsICIlcyBhdXRoIHVzaW5nICVzIHdpdGggdXNlciAnJXMnXG4iLAogICAgICAgICAgIHByb3h5ID8gIlByb3h5IiA6ICJTZXJ2ZXIiLCBhdXRoLAogICAgICAgICAgIHByb3h5ID8gKGNvbm4tPmh0dHBfcHJveHkudXNlciA/IGNvbm4tPmh0dHBfcHJveHkudXNlciA6ICIiKSA6Ci0gICAgICAgICAgICAgICAgICAoY29ubi0+dXNlciA/IGNvbm4tPnVzZXIgOiAiIikpOworICAgICAgICAgIChjb25uLT51c2VyID8gY29ubi0+dXNlciA6ICIiKSk7CisjZWxzZQorICAgIGluZm9mKGRhdGEsICJTZXJ2ZXIgYXV0aCB1c2luZyAlcyB3aXRoIHVzZXIgJyVzJ1xuIiwKKyAgICAgICAgICBhdXRoLCBjb25uLT51c2VyID8gY29ubi0+dXNlciA6ICIiKTsKKyNlbmRpZgogICAgIGF1dGhzdGF0dXMtPm11bHRpcGFzcyA9ICghYXV0aHN0YXR1cy0+ZG9uZSkgPyBUUlVFIDogRkFMU0U7CiAgIH0KICAgZWxzZQpAQCAtNzU3LDggKzc3OSwxMSBAQAogICBhdXRoaG9zdCA9ICZkYXRhLT5zdGF0ZS5hdXRoaG9zdDsKICAgYXV0aHByb3h5ID0gJmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKIAotICBpZigoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkgfHwKLSAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCB8fCBjb25uLT5vYXV0aF9iZWFyZXIpCisgIGlmKAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkgfHwKKyNlbmRpZgorICAgICBjb25uLT5iaXRzLnVzZXJfcGFzc3dkIHx8IGRhdGEtPnNldC5zdHJbU1RSSU5HX0JFQVJFUl0pCiAgICAgLyogY29udGludWUgcGxlYXNlICovOwogICBlbHNlIHsKICAgICBhdXRoaG9zdC0+ZG9uZSA9IFRSVUU7CkBAIC0xMDYyLDggKzEwODcsMTAgQEAKICAgKi8KICAgaWYoKGh0dHBjb2RlID09IDQwMSkgJiYgIWNvbm4tPmJpdHMudXNlcl9wYXNzd2QpCiAgICAgcmV0dXJuIFRSVUU7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZigoaHR0cGNvZGUgPT0gNDA3KSAmJiAhY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkKICAgICByZXR1cm4gVFJVRTsKKyNlbmRpZgogCiAgIHJldHVybiBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbTsKIH0KQEAgLTExMjAsNDUgKzExNDcsMjAgQEAKICAgcmV0dXJuIGZ1bGxzaXplOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBhZGRfYnVmZmVyIGZ1bmN0aW9ucyAqLwotCiAvKgotICogQ3VybF9hZGRfYnVmZmVyX2luaXQoKSBzZXRzIHVwIGFuZCByZXR1cm5zIGEgZmluZSBidWZmZXIgc3RydWN0Ci0gKi8KLUN1cmxfc2VuZF9idWZmZXIgKkN1cmxfYWRkX2J1ZmZlcl9pbml0KHZvaWQpCi17Ci0gIHJldHVybiBjYWxsb2MoMSwgc2l6ZW9mKEN1cmxfc2VuZF9idWZmZXIpKTsKLX0KLQotLyoKLSAqIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCkgZnJlZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgotICovCi12b2lkIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKEN1cmxfc2VuZF9idWZmZXIgKippbnApCi17Ci0gIEN1cmxfc2VuZF9idWZmZXIgKmluID0gKmlucDsKLSAgaWYoaW4pIC8qIGRlYWwgd2l0aCBOVUxMIGlucHV0ICovCi0gICAgZnJlZShpbi0+YnVmZmVyKTsKLSAgZnJlZShpbik7Ci0gICppbnAgPSBOVUxMOwotfQotCi0vKgotICogQ3VybF9hZGRfYnVmZmVyX3NlbmQoKSBzZW5kcyBhIGhlYWRlciBidWZmZXIgYW5kIGZyZWVzIGFsbCBhc3NvY2lhdGVkCisgKiBDdXJsX2J1ZmZlcl9zZW5kKCkgc2VuZHMgYSBoZWFkZXIgYnVmZmVyIGFuZCBmcmVlcyBhbGwgYXNzb2NpYXRlZAogICogbWVtb3J5LiAgQm9keSBkYXRhIG1heSBiZSBhcHBlbmRlZCB0byB0aGUgaGVhZGVyIGRhdGEgaWYgZGVzaXJlZC4KICAqCiAgKiBSZXR1cm5zIENVUkxjb2RlCiAgKi8KLUNVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKEN1cmxfc2VuZF9idWZmZXIgKippbnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGUgbnVtYmVyIG9mIHNlbnQgYnl0ZXMgdG8gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9vZmZfdCAqYnl0ZXNfd3JpdHRlbiwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciBjb250YWlucyBib2R5IGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tldGluZGV4KQorQ1VSTGNvZGUgQ3VybF9idWZmZXJfc2VuZChzdHJ1Y3QgZHluYnVmICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlIG51bWJlciBvZiBzZW50IGJ5dGVzIHRvIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90ICpieXRlc193cml0dGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBob3cgbXVjaCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGJvZHkgZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5jbHVkZWRfYm9keV9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tldGluZGV4KQogewogICBzc2l6ZV90IGFtb3VudDsKICAgQ1VSTGNvZGUgcmVzdWx0OwpAQCAtMTE2OSw3ICsxMTcxLDYgQEAKICAgc2l6ZV90IHNlbmRzaXplOwogICBjdXJsX3NvY2tldF90IHNvY2tmZDsKICAgc2l6ZV90IGhlYWRlcnNpemU7Ci0gIEN1cmxfc2VuZF9idWZmZXIgKmluID0gKmlucDsKIAogICBERUJVR0FTU0VSVChzb2NrZXRpbmRleCA8PSBTRUNPTkRBUllTT0NLRVQpOwogCkBAIC0xMTc4LDggKzExNzksOCBAQAogICAvKiBUaGUgbG9vcGluZyBiZWxvdyBpcyByZXF1aXJlZCBzaW5jZSB3ZSB1c2Ugbm9uLWJsb2NraW5nIHNvY2tldHMsIGJ1dCBkdWUKICAgICAgdG8gdGhlIGNpcmN1bXN0YW5jZXMgd2Ugd2lsbCBqdXN0IGxvb3AgYW5kIHRyeSBhZ2FpbiBhbmQgYWdhaW4gZXRjICovCiAKLSAgcHRyID0gaW4tPmJ1ZmZlcjsKLSAgc2l6ZSA9IGluLT5zaXplX3VzZWQ7CisgIHB0ciA9IEN1cmxfZHluX3B0cihpbik7CisgIHNpemUgPSBDdXJsX2R5bl9sZW4oaW4pOwogCiAgIGhlYWRlcnNpemUgPSBzaXplIC0gaW5jbHVkZWRfYm9keV9ieXRlczsgLyogdGhlIGluaXRpYWwgcGFydCB0aGF0IGlzbid0IGJvZHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBoZWFkZXIgKi8KQEAgLTExOTAsMTIgKzExOTEsMTUgQEAKICAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCiAgIGlmKHJlc3VsdCkgewogICAgIC8qIGNvbnZlcnNpb24gZmFpbGVkLCBmcmVlIG1lbW9yeSBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgKi8KLSAgICBDdXJsX2FkZF9idWZmZXJfZnJlZShpbnApOworICAgIEN1cmxfZHluX2ZyZWUoaW4pOwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICBpZigoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCB8fAotICAgICBjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMpCisgIGlmKChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgfHwgY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFBTCisjZW5kaWYKKyAgICAgICApCiAgICAgICYmIGNvbm4tPmh0dHB2ZXJzaW9uICE9IDIwKSB7CiAgICAgLyogV2UgbmV2ZXIgc2VuZCBtb3JlIHRoYW4gQ1VSTF9NQVhfV1JJVEVfU0laRSBieXRlcyBpbiBvbmUgc2luZ2xlIGNodW5rCiAgICAgICAgd2hlbiB3ZSBzcGVhayBIVFRQUywgYXMgaWYgb25seSBhIGZyYWN0aW9uIG9mIGl0IGlzIHNlbnQgbm93LCB0aGlzIGRhdGEKQEAgLTEyMTQsMTQgKzEyMTgsMjcgQEAKICAgICByZXN1bHQgPSBDdXJsX2dldF91cGxvYWRfYnVmZmVyKGRhdGEpOwogICAgIGlmKHJlc3VsdCkgewogICAgICAgLyogbWFsbG9jIGZhaWxlZCwgZnJlZSBtZW1vcnkgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyICovCi0gICAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmaW4pOworICAgICAgQ3VybF9keW5fZnJlZShpbik7CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBtZW1jcHkoZGF0YS0+c3RhdGUudWxidWYsIHB0ciwgc2VuZHNpemUpOwogICAgIHB0ciA9IGRhdGEtPnN0YXRlLnVsYnVmOwogICB9Ci0gIGVsc2UKKyAgZWxzZSB7CisjaWZkZWYgQ1VSTERFQlVHCisgICAgLyogQWxsb3cgZGVidWcgYnVpbGRzIG92ZXJyaWRlIHRoaXMgbG9naWMgdG8gZm9yY2Ugc2hvcnQgaW5pdGlhbCBzZW5kcyAqLworICAgIGNoYXIgKnAgPSBnZXRlbnYoIkNVUkxfU01BTExSRVFTRU5EIik7CisgICAgaWYocCkgeworICAgICAgc2l6ZV90IGFsdHNpemUgPSAoc2l6ZV90KXN0cnRvdWwocCwgTlVMTCwgMTApOworICAgICAgaWYoYWx0c2l6ZSkKKyAgICAgICAgc2VuZHNpemUgPSBDVVJMTUlOKHNpemUsIGFsdHNpemUpOworICAgICAgZWxzZQorICAgICAgICBzZW5kc2l6ZSA9IHNpemU7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgogICAgIHNlbmRzaXplID0gc2l6ZTsKKyAgfQogCiAgIHJlc3VsdCA9IEN1cmxfd3JpdGUoY29ubiwgc29ja2ZkLCBwdHIsIHNlbmRzaXplLCAmYW1vdW50KTsKIApAQCAtMTI2NCw3ICsxMjgxLDcgQEAKIAogICAgICAgICBzaXplIC09IGFtb3VudDsKIAotICAgICAgICBwdHIgPSBpbi0+YnVmZmVyICsgYW1vdW50OworICAgICAgICBwdHIgPSBDdXJsX2R5bl9wdHIoaW4pICsgYW1vdW50OwogCiAgICAgICAgIC8qIGJhY2t1cCB0aGUgY3VycmVudGx5IHNldCBwb2ludGVycyAqLwogICAgICAgICBodHRwLT5iYWNrdXAuZnJlYWRfZnVuYyA9IGRhdGEtPnN0YXRlLmZyZWFkX2Z1bmM7CkBAIC0xMjc4LDcgKzEyOTUsNyBAQAogICAgICAgICBodHRwLT5wb3N0ZGF0YSA9IHB0cjsKICAgICAgICAgaHR0cC0+cG9zdHNpemUgPSAoY3VybF9vZmZfdClzaXplOwogCi0gICAgICAgIGh0dHAtPnNlbmRfYnVmZmVyID0gaW47CisgICAgICAgIGh0dHAtPnNlbmRfYnVmZmVyID0gKmluOyAvKiBjb3B5IHRoZSB3aG9sZSBzdHJ1Y3QgKi8KICAgICAgICAgaHR0cC0+c2VuZGluZyA9IEhUVFBTRU5EX1JFUVVFU1Q7CiAKICAgICAgICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMTI5OCw5MiArMTMxNSwxMSBAQAogICAgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKICAgICB9CiAgIH0KLSAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJmluKTsKKyAgQ3VybF9keW5fZnJlZShpbik7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi0vKgotICogYWRkX2J1ZmZlcmYoKSBhZGQgdGhlIGZvcm1hdHRlZCBpbnB1dCB0byB0aGUgYnVmZmVyLgotICovCi1DVVJMY29kZSBDdXJsX2FkZF9idWZmZXJmKEN1cmxfc2VuZF9idWZmZXIgKippbnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICBjaGFyICpzOwotICB2YV9saXN0IGFwOwotICBDdXJsX3NlbmRfYnVmZmVyICppbiA9ICppbnA7Ci0gIHZhX3N0YXJ0KGFwLCBmbXQpOwotICBzID0gdmFwcmludGYoZm10LCBhcCk7IC8qIHRoaXMgYWxsb2NzIGEgbmV3IHN0cmluZyB0byBhcHBlbmQgKi8KLSAgdmFfZW5kKGFwKTsKLQotICBpZihzKSB7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKGlucCwgcywgc3RybGVuKHMpKTsKLSAgICBmcmVlKHMpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgLyogSWYgd2UgZmFpbGVkLCB3ZSBjbGVhbnVwIHRoZSB3aG9sZSBidWZmZXIgYW5kIHJldHVybiBlcnJvciAqLwotICBmcmVlKGluLT5idWZmZXIpOwotICBmcmVlKGluKTsKLSAgKmlucCA9IE5VTEw7Ci0gIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotfQotCi0vKgotICogQ3VybF9hZGRfYnVmZmVyKCkgYXBwZW5kcyBhIG1lbW9yeSBjaHVuayB0byB0aGUgZXhpc3RpbmcgYnVmZmVyCi0gKi8KLUNVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcihDdXJsX3NlbmRfYnVmZmVyICoqaW5wLCBjb25zdCB2b2lkICppbnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSkKLXsKLSAgY2hhciAqbmV3X3JiOwotICBDdXJsX3NlbmRfYnVmZmVyICppbiA9ICppbnA7Ci0KLSAgaWYofnNpemUgPCBpbi0+c2l6ZV91c2VkKSB7Ci0gICAgLyogSWYgcmVzdWx0aW5nIHVzZWQgc2l6ZSBvZiBzZW5kIGJ1ZmZlciB3b3VsZCB3cmFwIHNpemVfdCwgY2xlYW51cAotICAgICAgIHRoZSB3aG9sZSBidWZmZXIgYW5kIHJldHVybiBlcnJvci4gT3RoZXJ3aXNlIHRoZSByZXF1aXJlZCBidWZmZXIKLSAgICAgICBzaXplIHdpbGwgZml0IGludG8gYSBzaW5nbGUgYWxsb2NhdGFibGUgbWVtb3J5IGNodW5rICovCi0gICAgQ3VybF9zYWZlZnJlZShpbi0+YnVmZmVyKTsKLSAgICBmcmVlKGluKTsKLSAgICAqaW5wID0gTlVMTDsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCi0gIGlmKCFpbi0+YnVmZmVyIHx8Ci0gICAgICgoaW4tPnNpemVfdXNlZCArIHNpemUpID4gKGluLT5zaXplX21heCAtIDEpKSkgewotICAgIC8qIElmIGN1cnJlbnQgYnVmZmVyIHNpemUgaXNuJ3QgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCwgdXNlIGEKLSAgICAgICBidWZmZXIgc2l6ZSB0aGF0IGRvdWJsZXMgdGhlIHJlcXVpcmVkIHNpemUuIElmIHRoaXMgbmV3IHNpemUKLSAgICAgICB3b3VsZCB3cmFwIHNpemVfdCwgdGhlbiBqdXN0IHVzZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBvbmUgKi8KLSAgICBzaXplX3QgbmV3X3NpemU7Ci0KLSAgICBpZigoc2l6ZSA+IChzaXplX3QpLTEgLyAyKSB8fCAoaW4tPnNpemVfdXNlZCA+IChzaXplX3QpLTEgLyAyKSB8fAotICAgICAgICh+KHNpemUgKiAyKSA8IChpbi0+c2l6ZV91c2VkICogMikpKQotICAgICAgbmV3X3NpemUgPSAoc2l6ZV90KS0xOwotICAgIGVsc2UKLSAgICAgIG5ld19zaXplID0gKGluLT5zaXplX3VzZWQgKyBzaXplKSAqIDI7Ci0KLSAgICBpZihpbi0+YnVmZmVyKQotICAgICAgLyogd2UgaGF2ZSBhIGJ1ZmZlciwgZW5sYXJnZSB0aGUgZXhpc3Rpbmcgb25lICovCi0gICAgICBuZXdfcmIgPSBDdXJsX3NhZmVyZWFsbG9jKGluLT5idWZmZXIsIG5ld19zaXplKTsKLSAgICBlbHNlCi0gICAgICAvKiBjcmVhdGUgYSBuZXcgYnVmZmVyICovCi0gICAgICBuZXdfcmIgPSBtYWxsb2MobmV3X3NpemUpOwotCi0gICAgaWYoIW5ld19yYikgewotICAgICAgLyogSWYgd2UgZmFpbGVkLCB3ZSBjbGVhbnVwIHRoZSB3aG9sZSBidWZmZXIgYW5kIHJldHVybiBlcnJvciAqLwotICAgICAgZnJlZShpbik7Ci0gICAgICAqaW5wID0gTlVMTDsKLSAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAgIGluLT5idWZmZXIgPSBuZXdfcmI7Ci0gICAgaW4tPnNpemVfbWF4ID0gbmV3X3NpemU7Ci0gIH0KLSAgbWVtY3B5KCZpbi0+YnVmZmVyW2luLT5zaXplX3VzZWRdLCBpbnB0ciwgc2l6ZSk7Ci0KLSAgaW4tPnNpemVfdXNlZCArPSBzaXplOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQogLyogZW5kIG9mIHRoZSBhZGRfYnVmZmVyIGZ1bmN0aW9ucyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xNDU2LDYgKzEzOTIsNyBAQAogICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCiAgIGNvbm5rZWVwKGNvbm4sICJIVFRQIGRlZmF1bHQiKTsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgLyogdGhlIENPTk5FQ1QgcHJvY2VkdXJlIG1pZ2h0IG5vdCBoYXZlIGJlZW4gY29tcGxldGVkICovCiAgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CiAgIGlmKHJlc3VsdCkKQEAgLTE0NzIsNyArMTQwOSw2IEBACiAgICAgLyogbm90aGluZyBlbHNlIHRvIGRvIGV4Y2VwdCB3YWl0IHJpZ2h0IG5vdyAtIHdlJ3JlIG5vdCBkb25lIGhlcmUuICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCi0jaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZihjb25uLT5kYXRhLT5zZXQuaGFwcm94eXByb3RvY29sKSB7CiAgICAgLyogYWRkIEhBUHJveHkgUFJPWFkgcHJvdG9jb2wgaGVhZGVyICovCiAgICAgcmVzdWx0ID0gYWRkX2hhcHJveHlfcHJvdG9jb2xfaGVhZGVyKGNvbm4pOwpAQCAtMTQ5NywxMSArMTQzMyw5IEBACiAgICBpbnRlcmZhY2UgYW5kIHRoZW4gd2UncmUgYWx3YXlzIF9zZW5kaW5nXyBhIHJlcXVlc3QgYW5kIHRodXMgd2Ugd2FpdCBmb3IKICAgIHRoZSBzaW5nbGUgc29ja2V0IHRvIGJlY29tZSB3cml0YWJsZSBvbmx5ICovCiBzdGF0aWMgaW50IGh0dHBfZ2V0c29ja19kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICAvKiB3cml0ZSBtb2RlICovCi0gICh2b2lkKW51bXNvY2tzOyAvKiB1bnVzZWQsIHdlIHRydXN0IGl0IHRvIGJlIGF0IGxlYXN0IDEgKi8KICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgcmV0dXJuIEdFVFNPQ0tfV1JJVEVTT0NLKDApOwogfQpAQCAtMTUxMCw3ICsxNDQ0LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBhZGRfaGFwcm94eV9wcm90b2NvbF9oZWFkZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBjaGFyIHByb3h5X2hlYWRlclsxMjhdOwotICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyOworICBzdHJ1Y3QgZHluYnVmIHJlcTsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBjaGFyIHRjcF92ZXJzaW9uWzVdOwogCkBAIC0xNTMxLDE5ICsxNDY1LDE0IEBACiAgICAgICAgICAgICBjb25uLT5kYXRhLT5pbmZvLmNvbm5fbG9jYWxfcG9ydCwKICAgICAgICAgICAgIGNvbm4tPmRhdGEtPmluZm8uY29ubl9wcmltYXJ5X3BvcnQpOwogCi0gIHJlcV9idWZmZXIgPSBDdXJsX2FkZF9idWZmZXJfaW5pdCgpOwotICBpZighcmVxX2J1ZmZlcikKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgQ3VybF9keW5faW5pdCgmcmVxLCBEWU5fSEFYUFJPWFkpOwogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsIHByb3h5X2hlYWRlcik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCBwcm94eV9oZWFkZXIpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZCgmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm4tPmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCk7CisgIHJlc3VsdCA9IEN1cmxfYnVmZmVyX3NlbmQoJnJlcSwgY29ubiwgJmNvbm4tPmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZJUlNUU09DS0VUKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTU1NSw2ICsxNDg0LDEzIEBACiAgIENVUkxjb2RlIHJlc3VsdDsKICAgREVCVUdBU1NFUlQoKGNvbm4pICYmIChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKSk7CiAKKyNpZmRlZiBFTkFCTEVfUVVJQworICBpZihjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9RVUlDKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorI2VuZGlmCisKICAgLyogcGVyZm9ybSBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgc29ja2V0ICovCiAgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsIGRvbmUpOwogICBpZihyZXN1bHQpCkBAIC0xNTY0LDExICsxNTAwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cHNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQotICAgIHJldHVybiBDdXJsX3NzbF9nZXRzb2NrKGNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIEN1cmxfc3NsX2dldHNvY2soY29ubiwgc29ja3MpOwogICByZXR1cm4gR0VUU09DS19CTEFOSzsKIH0KICNlbmRpZiAvKiBVU0VfU1NMICovCkBAIC0xNTk4LDEzICsxNTMzLDExIEBACiAgIGlmKCFodHRwKQogICAgIHJldHVybiBDVVJMRV9PSzsKIAotICBpZihodHRwLT5zZW5kX2J1ZmZlcikgewotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZodHRwLT5zZW5kX2J1ZmZlcik7Ci0gIH0KLQotICBDdXJsX2h0dHAyX2RvbmUoY29ubiwgcHJlbWF0dXJlKTsKLQorICBDdXJsX2R5bl9mcmVlKCZodHRwLT5zZW5kX2J1ZmZlcik7CisgIEN1cmxfaHR0cDJfZG9uZShkYXRhLCBwcmVtYXR1cmUpOworICBDdXJsX3F1aWNfZG9uZShkYXRhLCBwcmVtYXR1cmUpOwogICBDdXJsX21pbWVfY2xlYW5wYXJ0KCZodHRwLT5mb3JtKTsKKyAgQ3VybF9keW5fcmVzZXQoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogCiAgIGlmKHN0YXR1cykKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMTY1MCw2ICsxNTgzLDEyIEBACiBzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2h0dHBfc3RyaW5nKGNvbnN0IHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKKyNpZmRlZiBFTkFCTEVfUVVJQworICBpZigoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09IENVUkxfSFRUUF9WRVJTSU9OXzMpIHx8CisgICAgIChjb25uLT5odHRwdmVyc2lvbiA9PSAzMCkpCisgICAgcmV0dXJuICIzIjsKKyNlbmRpZgorCiAjaWZkZWYgVVNFX05HSFRUUDIKICAgaWYoY29ubi0+cHJvdG8uaHR0cGMuaDIpCiAgICAgcmV0dXJuICIyIjsKQEAgLTE2NjQsMTMgKzE2MDMsMTMgQEAKIC8qIGNoZWNrIGFuZCBwb3NzaWJseSBhZGQgYW4gRXhwZWN0OiBoZWFkZXIgKi8KIHN0YXRpYyBDVVJMY29kZSBleHBlY3QxMDAoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpyZXEpCiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBmYWxzZSB1bmxlc3MgaXQgaXMgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBUUlVFIGJlbG93ICovCi0gIGlmKHVzZV9odHRwXzFfMXBsdXMoZGF0YSwgY29ubikgJiYKLSAgICAgKGNvbm4tPmh0dHB2ZXJzaW9uICE9IDIwKSkgeworICBpZighZGF0YS0+c3RhdGUuZGlzYWJsZWV4cGVjdCAmJiB1c2VfaHR0cF8xXzFwbHVzKGRhdGEsIGNvbm4pICYmCisgICAgIChjb25uLT5odHRwdmVyc2lvbiA8IDIwKSkgewogICAgIC8qIGlmIG5vdCBkb2luZyBIVFRQIDEuMCBvciB2ZXJzaW9uIDIsIG9yIGRpc2FibGVkIGV4cGxpY2l0bHksIHdlIGFkZCBhbgogICAgICAgIEV4cGVjdDogMTAwLWNvbnRpbnVlIHRvIHRoZSBoZWFkZXJzIHdoaWNoIGFjdHVhbGx5IHNwZWVkcyB1cCBwb3N0CiAgICAgICAgb3BlcmF0aW9ucyAoYXMgdGhlcmUgaXMgb25lIHBhY2tldCBjb21pbmcgYmFjayBmcm9tIHRoZSB3ZWIgc2VydmVyKSAqLwpAQCAtMTY4MCw4ICsxNjE5LDcgQEAKICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKHB0ciwgIkV4cGVjdDoiLCAiMTAwLWNvbnRpbnVlIik7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdDogMTAwLWNvbnRpbnVlXHJcbiIpOworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKHJlcSwgIkV4cGVjdDogMTAwLWNvbnRpbnVlXHJcbiIpOwogICAgICAgaWYoIXJlc3VsdCkKICAgICAgICAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0gVFJVRTsKICAgICB9CkBAIC0xNzAwLDcgKzE2MzgsNyBAQAogICAgd2lsbCByZXR1cm4gYW4gZXJyb3IgY29kZSBpZiBvbmUgb2YgdGhlIGhlYWRlcnMgaXMKICAgIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5ICovCiBDVVJMY29kZSBDdXJsX2h0dHBfY29tcGlsZV90cmFpbGVycyhzdHJ1Y3QgY3VybF9zbGlzdCAqdHJhaWxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqaGFuZGxlKQogewogICBjaGFyICpwdHIgPSBOVUxMOwpAQCAtMTcyNiw4ICsxNjY0LDEwIEBACiAgICAgLyogb25seSBhZGQgY29ycmVjdGx5IGZvcm1hdHRlZCB0cmFpbGVycyAqLwogICAgIHB0ciA9IHN0cmNocih0cmFpbGVycy0+ZGF0YSwgJzonKTsKICAgICBpZihwdHIgJiYgKihwdHIgKyAxKSA9PSAnICcpIHsKLSAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJmJ1ZmZlciwgIiVzJXMiLCB0cmFpbGVycy0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kb2ZsaW5lX25hdGl2ZSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoYiwgdHJhaWxlcnMtPmRhdGEpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKGIsIGVuZG9mbGluZV9uYXRpdmUpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE3MzUsMTQgKzE2NzUsMTMgQEAKICAgICAgIGluZm9mKGhhbmRsZSwgIk1hbGZvcm1hdHRlZCB0cmFpbGluZyBoZWFkZXIgISBTa2lwcGluZyB0cmFpbGVyLiIpOwogICAgIHRyYWlsZXJzID0gdHJhaWxlcnMtPm5leHQ7CiAgIH0KLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZidWZmZXIsIGVuZG9mbGluZV9uZXR3b3JrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGVuZG9mbGluZV9uZXR3b3JrKSk7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZChiLCBlbmRvZmxpbmVfbmV0d29yayk7CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENVUkxjb2RlIEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfY29ubmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpyZXEpCiB7CiAgIGNoYXIgKnB0cjsKICAgc3RydWN0IGN1cmxfc2xpc3QgKmhbMl07CkBAIC0xNzUxLDYgKzE2OTAsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgaW50IGk7CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGVudW0gcHJveHlfdXNlIHByb3h5OwogCiAgIGlmKGlzX2Nvbm5lY3QpCkBAIC0xNzc3LDYgKzE3MTcsMTAgQEAKICAgICAgIGhbMF0gPSBkYXRhLT5zZXQuaGVhZGVyczsKICAgICBicmVhazsKICAgfQorI2Vsc2UKKyAgKHZvaWQpaXNfY29ubmVjdDsKKyAgaFswXSA9IGRhdGEtPnNldC5oZWFkZXJzOworI2VuZGlmCiAKICAgLyogbG9vcCB0aHJvdWdoIG9uZSBvciB0d28gbGlzdHMgKi8KICAgZm9yKGkgPSAwOyBpIDwgbnVtbGlzdHM7IGkrKykgewpAQCAtMTgwNCw3ICsxNzQ4LDcgQEAKICAgICAgICAgICAgICAgLyogY29weSB0aGUgc291cmNlICovCiAgICAgICAgICAgICAgIHNlbWljb2xvbnAgPSBzdHJkdXAoaGVhZGVycy0+ZGF0YSk7CiAgICAgICAgICAgICAgIGlmKCFzZW1pY29sb25wKSB7Ci0gICAgICAgICAgICAgICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcV9idWZmZXIpOworICAgICAgICAgICAgICAgIEN1cmxfZHluX2ZyZWUocmVxKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAvKiBwdXQgYSBjb2xvbiB3aGVyZSB0aGUgc2VtaWNvbG9uIGlzICovCkBAIC0xODI4LDE2ICsxNzcyLDE2IEBACiAgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgICAgICAgICAgY2hhciAqY29tcGFyZSA9IHNlbWljb2xvbnAgPyBzZW1pY29sb25wIDogaGVhZGVycy0+ZGF0YTsKIAotICAgICAgICAgIGlmKGNvbm4tPmFsbG9jcHRyLmhvc3QgJiYKKyAgICAgICAgICBpZihkYXRhLT5zdGF0ZS5hcHRyLmhvc3QgJiYKICAgICAgICAgICAgICAvKiBhIEhvc3Q6IGhlYWRlciB3YXMgc2VudCBhbHJlYWR5LCBkb24ndCBwYXNzIG9uIGFueSBjdXN0b20gSG9zdDoKICAgICAgICAgICAgICAgICBoZWFkZXIgYXMgdGhhdCB3aWxsIHByb2R1Y2UgKnR3byogaW4gdGhlIHNhbWUgcmVxdWVzdCEgKi8KICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiSG9zdDoiLCBjb21wYXJlKSkKICAgICAgICAgICAgIDsKLSAgICAgICAgICBlbHNlIGlmKGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNICYmCisgICAgICAgICAgZWxzZSBpZihkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNICYmCiAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGhlYWRlciAoZXh0ZW5kZWQgYnkgZm9ybWRhdGEuYykgaXMgc2VudCBsYXRlciAqLwogICAgICAgICAgICAgICAgICAgY2hlY2twcmVmaXgoIkNvbnRlbnQtVHlwZToiLCBjb21wYXJlKSkKICAgICAgICAgICAgIDsKLSAgICAgICAgICBlbHNlIGlmKGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FICYmCisgICAgICAgICAgZWxzZSBpZihkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FICYmCiAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGhlYWRlciBpcyBzZW50IGxhdGVyICovCiAgICAgICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiQ29udGVudC1UeXBlOiIsIGNvbXBhcmUpKQogICAgICAgICAgICAgOwpAQCAtMTg0NiwxMiArMTc5MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgd2Ugd2lsbCBmb3JjZSBsZW5ndGggemVybyB0aGVuICovCiAgICAgICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiQ29udGVudC1MZW5ndGg6IiwgY29tcGFyZSkpCiAgICAgICAgICAgICA7Ci0gICAgICAgICAgZWxzZSBpZihjb25uLT5hbGxvY3B0ci50ZSAmJgorICAgICAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUuYXB0ci50ZSAmJgogICAgICAgICAgICAgICAgICAgLyogd2hlbiBhc2tpbmcgZm9yIFRyYW5zZmVyLUVuY29kaW5nLCBkb24ndCBwYXNzIG9uIGEgY3VzdG9tCiAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uOiAqLwogICAgICAgICAgICAgICAgICAgY2hlY2twcmVmaXgoIkNvbm5lY3Rpb246IiwgY29tcGFyZSkpCiAgICAgICAgICAgICA7Ci0gICAgICAgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPT0gMjApICYmCisgICAgICAgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPj0gMjApICYmCiAgICAgICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiVHJhbnNmZXItRW5jb2Rpbmc6IiwgY29tcGFyZSkpCiAgICAgICAgICAgICAvKiBIVFRQLzIgZG9lc24ndCBzdXBwb3J0IGNodW5rZWQgcmVxdWVzdHMgKi8KICAgICAgICAgICAgIDsKQEAgLTE4NjUsNyArMTgwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIXN0cmNhc2Vjb21wYXJlKGRhdGEtPnN0YXRlLmZpcnN0X2hvc3QsIGNvbm4tPmhvc3QubmFtZSkpKQogICAgICAgICAgICAgOwogICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIiVzXHJcbiIsIGNvbXBhcmUpOworICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZihyZXEsICIlc1xyXG4iLCBjb21wYXJlKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYoc2VtaWNvbG9ucCkKICAgICAgICAgICAgIGZyZWUoc2VtaWNvbG9ucCk7CkBAIC0xODgxLDkgKzE4MjUsMTAgQEAKIH0KIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUEFSU0VEQVRFCi1DVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpCitDVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGR5bmJ1ZiAqcmVxKQogeworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY29uc3Qgc3RydWN0IHRtICp0bTsKICAgc3RydWN0IHRtIGtlZXB0aW1lOwogICBDVVJMY29kZSByZXN1bHQ7CkBAIC0xOTE2LDYgKzE4NjEsMTEgQEAKICAgICBicmVhazsKICAgfQogCisgIGlmKEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sIGNvbmRwKSkgeworICAgIC8qIEEgY3VzdG9tIGhlYWRlciB3YXMgc3BlY2lmaWVkOyBpdCB3aWxsIGJlIHNlbnQgaW5zdGVhZC4gKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKwogICAvKiBUaGUgSWYtTW9kaWZpZWQtU2luY2UgaGVhZGVyIGZhbWlseSBzaG91bGQgaGF2ZSB0aGVpciB0aW1lcyBzZXQgaW4KICAgICogR01UIGFzIFJGQzI2MTYgZGVmaW5lczogIkFsbCBIVFRQIGRhdGUvdGltZSBzdGFtcHMgTVVTVCBiZQogICAgKiByZXByZXNlbnRlZCBpbiBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLCB3aXRob3V0IGV4Y2VwdGlvbi4gRm9yIHRoZQpAQCAtMTkzNSwxNyArMTg4NSwxNyBAQAogICAgICAgICAgICAgdG0tPnRtX21pbiwKICAgICAgICAgICAgIHRtLT50bV9zZWMpOwogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgZGF0ZXN0ciwgc3RybGVuKGRhdGVzdHIpKTsKKyAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKHJlcSwgZGF0ZXN0cik7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbHNlCiAvKiBkaXNhYmxlZCAqLwotQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyKQorQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkeW5idWYgKnJlcSkKIHsKLSAgKHZvaWQpZGF0YTsKLSAgKHZvaWQpcmVxX2J1ZmZlcjsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpcmVxOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAjZW5kaWYKQEAgLTE5NjgsNjMgKzE5MTgsNjYgQEAKICAgY29uc3QgY2hhciAqdGUgPSAiIjsgLyogdHJhbnNmZXItZW5jb2RpbmcgKi8KICAgY29uc3QgY2hhciAqcHRyOwogICBjb25zdCBjaGFyICpyZXF1ZXN0OwotICBDdXJsX0h0dHBSZXEgaHR0cHJlcSA9IGRhdGEtPnNldC5odHRwcmVxOworICBDdXJsX0h0dHBSZXEgaHR0cHJlcSA9IGRhdGEtPnN0YXRlLmh0dHByZXE7CiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCiAgIGNoYXIgKmFkZGNvb2tpZXMgPSBOVUxMOwogI2VuZGlmCiAgIGN1cmxfb2ZmX3QgaW5jbHVkZWRfYm9keSA9IDA7CiAgIGNvbnN0IGNoYXIgKmh0dHBzdHJpbmc7Ci0gIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXI7CisgIHN0cnVjdCBkeW5idWYgcmVxOwogICBjdXJsX29mZl90IHBvc3RzaXplID0gMDsgLyogY3VybF9vZmZfdCB0byBoYW5kbGUgbGFyZ2UgZmlsZSBzaXplcyAqLworICBjaGFyICphbHR1c2VkID0gTlVMTDsKIAogICAvKiBBbHdheXMgY29uc2lkZXIgdGhlIERPIHBoYXNlIGRvbmUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBjYWxsLCBldmVuIGlmIHRoZXJlCiAgICAgIG1heSBiZSBwYXJ0cyBvZiB0aGUgcmVxdWVzdCB0aGF0IGlzIG5vdCB5ZXQgc2VudCwgc2luY2Ugd2UgY2FuIGRlYWwgd2l0aAogICAgICB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBpbiB0aGUgUEVSRk9STSBwaGFzZS4gKi8KICAgKmRvbmUgPSBUUlVFOwogCi0gIGlmKGNvbm4tPmh0dHB2ZXJzaW9uIDwgMjApIHsgLyogdW5sZXNzIHRoZSBjb25uZWN0aW9uIGlzIHJlLXVzZWQgYW5kIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwMiAqLwotICAgIHN3aXRjaChjb25uLT5uZWducG4pIHsKLSAgICBjYXNlIENVUkxfSFRUUF9WRVJTSU9OXzI6Ci0gICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDIwOyAvKiB3ZSBrbm93IHdlJ3JlIG9uIEhUVFAvMiBub3cgKi8KLQotICAgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zd2l0Y2hlZChjb25uLCBOVUxMLCAwKTsKLSAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOgotICAgICAgLyogY29udGludWUgd2l0aCBIVFRQLzEuMSB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkICovCi0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogQ2hlY2sgaWYgdXNlciB3YW50cyB0byB1c2UgSFRUUC8yIHdpdGggY2xlYXIgVENQKi8KLSNpZmRlZiBVU0VfTkdIVFRQMgotICAgICAgaWYoY29ubi0+ZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09Ci0gICAgICAgICBDVVJMX0hUVFBfVkVSU0lPTl8yX1BSSU9SX0tOT1dMRURHRSkgewotICAgICAgICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSAmJiAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpIHsKLSAgICAgICAgICAvKiBXZSBkb24ndCBzdXBwb3J0IEhUVFAvMiBwcm94aWVzIHlldC4gQWxzbyBpdCdzIGRlYmF0YWJsZSB3aGV0aGVyCi0gICAgICAgICAgICAgb3Igbm90IHRoaXMgc2V0dGluZyBzaG91bGQgYXBwbHkgdG8gSFRUUC8yIHByb3hpZXMuICovCi0gICAgICAgICAgaW5mb2YoZGF0YSwgIklnbm9yaW5nIEhUVFAvMiBwcmlvciBrbm93bGVkZ2UgZHVlIHRvIHByb3h5XG4iKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiSFRUUC8yIG92ZXIgY2xlYW4gVENQXG4iKSk7Ci0gICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMjA7CisgIGlmKGNvbm4tPnRyYW5zcG9ydCAhPSBUUk5TUFJUX1FVSUMpIHsKKyAgICBpZihjb25uLT5odHRwdmVyc2lvbiA8IDIwKSB7IC8qIHVubGVzcyB0aGUgY29ubmVjdGlvbiBpcyByZS11c2VkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBodHRwMiAqLworICAgICAgc3dpdGNoKGNvbm4tPm5lZ25wbikgeworICAgICAgY2FzZSBDVVJMX0hUVFBfVkVSU0lPTl8yOgorICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDIwOyAvKiB3ZSBrbm93IHdlJ3JlIG9uIEhUVFAvMiBub3cgKi8KIAogICAgICAgICByZXN1bHQgPSBDdXJsX2h0dHAyX3N3aXRjaGVkKGNvbm4sIE5VTEwsIDApOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfSFRUUF9WRVJTSU9OXzFfMToKKyAgICAgICAgLyogY29udGludWUgd2l0aCBIVFRQLzEuMSB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkICovCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogQ2hlY2sgaWYgdXNlciB3YW50cyB0byB1c2UgSFRUUC8yIHdpdGggY2xlYXIgVENQKi8KKyNpZmRlZiBVU0VfTkdIVFRQMgorICAgICAgICBpZihjb25uLT5kYXRhLT5zZXQuaHR0cHZlcnNpb24gPT0KKyAgICAgICAgICAgQ1VSTF9IVFRQX1ZFUlNJT05fMl9QUklPUl9LTk9XTEVER0UpIHsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5KSB7CisgICAgICAgICAgICAvKiBXZSBkb24ndCBzdXBwb3J0IEhUVFAvMiBwcm94aWVzIHlldC4gQWxzbyBpdCdzIGRlYmF0YWJsZQorICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdGhpcyBzZXR0aW5nIHNob3VsZCBhcHBseSB0byBIVFRQLzIgcHJveGllcy4gKi8KKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmluZyBIVFRQLzIgcHJpb3Iga25vd2xlZGdlIGR1ZSB0byBwcm94eVxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgIGJyZWFrOworICAgICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiSFRUUC8yIG92ZXIgY2xlYW4gVENQXG4iKSk7CisgICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAyMDsKKworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cDJfc3dpdGNoZWQoY29ubiwgTlVMTCwgMCk7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHByZXBhcmUgZm9yIGEgaHR0cDIgcmVxdWVzdCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zZXR1cChjb25uKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgIH0KLSAgZWxzZSB7Ci0gICAgLyogcHJlcGFyZSBmb3IgYSBodHRwMiByZXF1ZXN0ICovCi0gICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zZXR1cChjb25uKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KICAgaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIERFQlVHQVNTRVJUKGh0dHApOwogCkBAIC0yMDgwLDggKzIwMzMsOCBAQAogICAgICB3aXRoIHRoZSB1c2VyLWFnZW50IHN0cmluZyBzcGVjaWZpZWQsIHdlIGVyYXNlIHRoZSBwcmV2aW91c2x5IG1hZGUgc3RyaW5nCiAgICAgIGhlcmUuICovCiAgIGlmKEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJVc2VyLUFnZW50IikpIHsKLSAgICBmcmVlKGNvbm4tPmFsbG9jcHRyLnVhZ2VudCk7Ci0gICAgY29ubi0+YWxsb2NwdHIudWFnZW50ID0gTlVMTDsKKyAgICBmcmVlKGRhdGEtPnN0YXRlLmFwdHIudWFnZW50KTsKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCA9IE5VTEw7CiAgIH0KIAogICAvKiBzZXR1cCB0aGUgYXV0aGVudGljYXRpb24gaGVhZGVycyAqLwpAQCAtMjEwOSwxNCArMjA2MiwxNCBAQAogICBlbHNlCiAgICAgY29ubi0+Yml0cy5hdXRobmVnID0gRkFMU0U7CiAKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5yZWYpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmVmKTsKICAgaWYoZGF0YS0+Y2hhbmdlLnJlZmVyZXIgJiYgIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJSZWZlcmVyIikpIHsKLSAgICBjb25uLT5hbGxvY3B0ci5yZWYgPSBhcHJpbnRmKCJSZWZlcmVyOiAlc1xyXG4iLCBkYXRhLT5jaGFuZ2UucmVmZXJlcik7Ci0gICAgaWYoIWNvbm4tPmFsbG9jcHRyLnJlZikKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZiA9IGFwcmludGYoIlJlZmVyZXI6ICVzXHJcbiIsIGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKKyAgICBpZighZGF0YS0+c3RhdGUuYXB0ci5yZWYpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogICBlbHNlCi0gICAgY29ubi0+YWxsb2NwdHIucmVmID0gTlVMTDsKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZiA9IE5VTEw7CiAKICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09PS0lFXSAmJiAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvb2tpZSIpKQpAQCAtMjEyNSwxNSArMjA3OCwxNSBAQAogCiAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQWNjZXB0LUVuY29kaW5nIikgJiYKICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddKSB7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpOwotICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyA9CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZyk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcgPQogICAgICAgYXByaW50ZigiQWNjZXB0LUVuY29kaW5nOiAlc1xyXG4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10pOwotICAgIGlmKCFjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpCisgICAgaWYoIWRhdGEtPnN0YXRlLmFwdHIuYWNjZXB0X2VuY29kaW5nKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KICAgZWxzZSB7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpOwotICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyA9IE5VTEw7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZyk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcgPSBOVUxMOwogICB9CiAKICNpZmRlZiBIQVZFX0xJQloKQEAgLTIxNDksNyArMjEwMiw3IEBACiAgICAgY2hhciAqY3B0ciA9IEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJDb25uZWN0aW9uIik7CiAjZGVmaW5lIFRFX0hFQURFUiAiVEU6IGd6aXBcclxuIgogCi0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci50ZSk7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnRlKTsKIAogICAgIGlmKGNwdHIpIHsKICAgICAgIGNwdHIgPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGNwdHIpOwpAQCAtMjE1OCwxMSArMjExMSwxMSBAQAogICAgIH0KIAogICAgIC8qIENyZWF0ZSB0aGUgKHVwZGF0ZWQpIENvbm5lY3Rpb246IGhlYWRlciAqLwotICAgIGNvbm4tPmFsbG9jcHRyLnRlID0gYXByaW50ZigiQ29ubmVjdGlvbjogJXMlc1RFXHJcbiIgVEVfSEVBREVSLAorICAgIGRhdGEtPnN0YXRlLmFwdHIudGUgPSBhcHJpbnRmKCJDb25uZWN0aW9uOiAlcyVzVEVcclxuIiBURV9IRUFERVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHIgPyBjcHRyIDogIiIsIChjcHRyICYmICpjcHRyKSA/ICIsICI6IiIpOwogCiAgICAgZnJlZShjcHRyKTsKLSAgICBpZighY29ubi0+YWxsb2NwdHIudGUpCisgICAgaWYoIWRhdGEtPnN0YXRlLmFwdHIudGUpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogI2VuZGlmCkBAIC0yMjIwLDE0ICsyMTczLDE2IEBACiAgIGVsc2UgewogICAgIGlmKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9IVFRQKSAmJgogICAgICAgICgoKGh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX01JTUUgfHwgaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfRk9STSkgJiYKLSAgICAgICBodHRwLT5wb3N0c2l6ZSA8IDApIHx8Ci0gICAgICAgKGRhdGEtPnNldC51cGxvYWQgJiYgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9PSAtMSkpKSB7CisgICAgICAgICBodHRwLT5wb3N0c2l6ZSA8IDApIHx8CisgICAgICAgICgoZGF0YS0+c2V0LnVwbG9hZCB8fCBodHRwcmVxID09IEhUVFBSRVFfUE9TVCkgJiYKKyAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPT0gLTEpKSkgewogICAgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQogICAgICAgICAvKiBkb24ndCBlbmFibGUgY2h1bmtlZCBkdXJpbmcgYXV0aCBuZWcgKi8KICAgICAgICAgOwogICAgICAgZWxzZSBpZih1c2VfaHR0cF8xXzFwbHVzKGRhdGEsIGNvbm4pKSB7Ci0gICAgICAgIC8qIEhUVFAsIHVwbG9hZCwgdW5rbm93biBmaWxlIHNpemUgYW5kIG5vdCBIVFRQIDEuMCAqLwotICAgICAgICBkYXRhLT5yZXEudXBsb2FkX2NodW5reSA9IFRSVUU7CisgICAgICAgIGlmKGNvbm4tPmh0dHB2ZXJzaW9uIDwgMjApCisgICAgICAgICAgLyogSFRUUCwgdXBsb2FkLCB1bmtub3duIGZpbGUgc2l6ZSBhbmQgbm90IEhUVFAgMS4wICovCisgICAgICAgICAgZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kgPSBUUlVFOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJDaHVua3kgdXBsb2FkIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSFRUUCAxLjAiKTsKQEAgLTIyNDMsNyArMjE5OCw3IEBACiAgICAgICB0ZSA9ICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG4iOwogICB9CiAKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ob3N0KTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmhvc3QpOwogCiAgIHB0ciA9IEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJIb3N0Iik7CiAgIGlmKHB0ciAmJiAoIWRhdGEtPnN0YXRlLnRoaXNfaXNfYV9mb2xsb3cgfHwKQEAgLTIyNzgsMTkgKzIyMzMsMTkgQEAKICAgICAgICAgaWYoY29sb24pCiAgICAgICAgICAgKmNvbG9uID0gMDsgLyogVGhlIGhvc3QgbXVzdCBub3QgaW5jbHVkZSBhbiBlbWJlZGRlZCBwb3J0IG51bWJlciAqLwogICAgICAgfQotICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5jb29raWVob3N0KTsKLSAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3QgPSBjb29raWVob3N0OworICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmNvb2tpZWhvc3QpOworICAgICAgZGF0YS0+c3RhdGUuYXB0ci5jb29raWVob3N0ID0gY29va2llaG9zdDsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmKHN0cmNtcCgiSG9zdDoiLCBwdHIpKSB7Ci0gICAgICBjb25uLT5hbGxvY3B0ci5ob3N0ID0gYXByaW50ZigiSG9zdDolc1xyXG4iLCAmcHRyWzVdKTsKLSAgICAgIGlmKCFjb25uLT5hbGxvY3B0ci5ob3N0KQorICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ob3N0ID0gYXByaW50ZigiSG9zdDolc1xyXG4iLCAmcHRyWzVdKTsKKyAgICAgIGlmKCFkYXRhLT5zdGF0ZS5hcHRyLmhvc3QpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KICAgICBlbHNlCiAgICAgICAvKiB3aGVuIGNsZWFyaW5nIHRoZSBoZWFkZXIgKi8KLSAgICAgIGNvbm4tPmFsbG9jcHRyLmhvc3QgPSBOVUxMOworICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ob3N0ID0gTlVMTDsKICAgfQogICBlbHNlIHsKICAgICAvKiBXaGVuIGJ1aWxkaW5nIEhvc3Q6IGhlYWRlcnMsIHdlIG11c3QgcHV0IHRoZSBob3N0IG5hbWUgd2l0aGluCkBAIC0yMzAyLDE4ICsyMjU3LDE4IEBACiAgICAgICAgIChjb25uLT5yZW1vdGVfcG9ydCA9PSBQT1JUX0hUVFApKSApCiAgICAgICAvKiBpZihIVFRQUyBvbiBwb3J0IDQ0MykgT1IgKEhUVFAgb24gcG9ydCA4MCkgdGhlbiBkb24ndCBpbmNsdWRlCiAgICAgICAgICB0aGUgcG9ydCBudW1iZXIgaW4gdGhlIGhvc3Qgc3RyaW5nICovCi0gICAgICBjb25uLT5hbGxvY3B0ci5ob3N0ID0gYXByaW50ZigiSG9zdDogJXMlcyVzXHJcbiIsCisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmhvc3QgPSBhcHJpbnRmKCJIb3N0OiAlcyVzJXNcclxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuaXB2Nl9pcD8iWyI6IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5pcHY2X2lwPyJdIjoiIik7CiAgICAgZWxzZQotICAgICAgY29ubi0+YWxsb2NwdHIuaG9zdCA9IGFwcmludGYoIkhvc3Q6ICVzJXMlczolZFxyXG4iLAorICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ob3N0ID0gYXByaW50ZigiSG9zdDogJXMlcyVzOiVkXHJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmlwdjZfaXA/IlsiOiIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuaXB2Nl9pcD8iXSI6IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZW1vdGVfcG9ydCk7CiAKLSAgICBpZighY29ubi0+YWxsb2NwdHIuaG9zdCkKKyAgICBpZighZGF0YS0+c3RhdGUuYXB0ci5ob3N0KQogICAgICAgLyogd2l0aG91dCBIb3N0OiB3ZSBjYW4ndCBtYWtlIGEgbmljZSByZXF1ZXN0ICovCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQpAQCAtMjMyOCw3ICsyMjgzLDYgQEAKIAogICAgIC8qIGFuZCBubyBmcmFnbWVudCBwYXJ0ICovCiAgICAgQ1VSTFVjb2RlIHVjOwotICAgIGNoYXIgKnVybDsKICAgICBDVVJMVSAqaCA9IGN1cmxfdXJsX2R1cChkYXRhLT5zdGF0ZS51aCk7CiAgICAgaWYoIWgpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKQEAgLTIzNTksMTkgKzIzMTMsMTUgQEAKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICB9CiAgICAgfQotICAgIC8qIG5vdyBleHRyYWN0IHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgVVJMICovCi0gICAgdWMgPSBjdXJsX3VybF9nZXQoaCwgQ1VSTFVQQVJUX1VSTCwgJnVybCwgMCk7CisgICAgLyogRXh0cmFjdCB0aGUgVVJMIHRvIHVzZSBpbiB0aGUgcmVxdWVzdC4gU3RvcmUgaW4gU1RSSU5HX1RFTVBfVVJMIGZvcgorICAgICAgIGNsZWFuLXVwIHJlYXNvbnMgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYmVmb3JlIHRoZSBmcmVlKCkgZnVydGhlcgorICAgICAgIGRvd24uICovCisgICAgdWMgPSBjdXJsX3VybF9nZXQoaCwgQ1VSTFVQQVJUX1VSTCwgJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RFTVBfVVJMXSwgMCk7CiAgICAgaWYodWMpIHsKICAgICAgIGN1cmxfdXJsX2NsZWFudXAoaCk7CiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICB9CiAKLSAgICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKQotICAgICAgZnJlZShkYXRhLT5jaGFuZ2UudXJsKTsKLQotICAgIGRhdGEtPmNoYW5nZS51cmwgPSB1cmw7Ci0gICAgZGF0YS0+Y2hhbmdlLnVybF9hbGxvYyA9IFRSVUU7Ci0KICAgICBjdXJsX3VybF9jbGVhbnVwKGgpOwogCiAgICAgaWYoc3RyY2FzZWNvbXBhcmUoImZ0cCIsIGRhdGEtPnN0YXRlLnVwLnNjaGVtZSkpIHsKQEAgLTIzOTksNyArMjM0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWkgPyAnYScgOiAnaScpOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpZihjb25uLT5iaXRzLnVzZXJfcGFzc3dkICYmICFjb25uLT5iaXRzLnVzZXJwd2RfaW5fdXJsKQorICAgICAgaWYoY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkKICAgICAgICAgcGFzdGVfZnRwX3VzZXJwd2QgPSBUUlVFOwogICAgIH0KICAgfQpAQCAtMjQ4OSwyMSArMjQzOSwyMSBAQAogICAgIGlmKCgoaHR0cHJlcSA9PSBIVFRQUkVRX0dFVCkgfHwgKGh0dHByZXEgPT0gSFRUUFJFUV9IRUFEKSkgJiYKICAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIlJhbmdlIikpIHsKICAgICAgIC8qIGlmIGEgbGluZSBsaWtlIHRoaXMgd2FzIGFscmVhZHkgYWxsb2NhdGVkLCBmcmVlIHRoZSBwcmV2aW91cyBvbmUgKi8KLSAgICAgIGZyZWUoY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lKTsKLSAgICAgIGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSA9IGFwcmludGYoIlJhbmdlOiBieXRlcz0lc1xyXG4iLAorICAgICAgZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSk7CisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSA9IGFwcmludGYoIlJhbmdlOiBieXRlcz0lc1xyXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yYW5nZSk7CiAgICAgfQogICAgIGVsc2UgaWYoKGh0dHByZXEgPT0gSFRUUFJFUV9QT1NUIHx8IGh0dHByZXEgPT0gSFRUUFJFUV9QVVQpICYmCiAgICAgICAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtUmFuZ2UiKSkgewogCiAgICAgICAvKiBpZiBhIGxpbmUgbGlrZSB0aGlzIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCwgZnJlZSB0aGUgcHJldmlvdXMgb25lICovCi0gICAgICBmcmVlKGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk7CisgICAgICBmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lKTsKIAogICAgICAgaWYoZGF0YS0+c2V0LnNldF9yZXN1bWVfZnJvbSA8IDApIHsKICAgICAgICAgLyogVXBsb2FkIHJlc3VtZSB3YXMgYXNrZWQgZm9yLCBidXQgd2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUKICAgICAgICAgICAgcmVtb3RlIHBhcnQgc28gd2UgdGVsbCB0aGUgc2VydmVyIChhbmQgYWN0IGFjY29yZGluZ2x5KSB0aGF0IHdlCiAgICAgICAgICAgIHVwbG9hZCB0aGUgd2hvbGUgZmlsZSAoYWdhaW4pICovCi0gICAgICAgIGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSA9CisgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lID0KICAgICAgICAgICBhcHJpbnRmKCJDb250ZW50LVJhbmdlOiBieXRlcyAwLSUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKICAgICAgICAgICAgICAgICAgICIvJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiXHJcbiIsCiAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC0gMSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7CkBAIC0yNTEzLDcgKzI0NjMsNyBAQAogICAgICAgICAvKiBUaGlzIGlzIGJlY2F1c2UgInJlc3VtZSIgd2FzIHNlbGVjdGVkICovCiAgICAgICAgIGN1cmxfb2ZmX3QgdG90YWxfZXhwZWN0ZWRfc2l6ZSA9CiAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKyBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwotICAgICAgICBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUgPQorICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSA9CiAgICAgICAgICAgYXByaW50ZigiQ29udGVudC1SYW5nZTogYnl0ZXMgJXMlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCiAgICAgICAgICAgICAgICAgICAiLyUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIlxyXG4iLAogICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmFuZ2UsIHRvdGFsX2V4cGVjdGVkX3NpemUtMSwKQEAgLTI1MjIsMTEgKzI0NzIsMTEgQEAKICAgICAgIGVsc2UgewogICAgICAgICAvKiBSYW5nZSB3YXMgc2VsZWN0ZWQgYW5kIHRoZW4gd2UganVzdCBwYXNzIHRoZSBpbmNvbWluZyByYW5nZSBhbmQKICAgICAgICAgICAgYXBwZW5kIHRvdGFsIHNpemUgKi8KLSAgICAgICAgY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lID0KKyAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci5yYW5nZWxpbmUgPQogICAgICAgICAgIGFwcmludGYoIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICVzLyUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIlxyXG4iLAogICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmFuZ2UsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOwogICAgICAgfQotICAgICAgaWYoIWNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSkKKyAgICAgIGlmKCFkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgfQogICB9CkBAIC0yNTM0LDE0ICsyNDg0LDExIEBACiAgIGh0dHBzdHJpbmcgPSBnZXRfaHR0cF9zdHJpbmcoZGF0YSwgY29ubik7CiAKICAgLyogaW5pdGlhbGl6ZSBhIGR5bmFtaWMgc2VuZC1idWZmZXIgKi8KLSAgcmVxX2J1ZmZlciA9IEN1cmxfYWRkX2J1ZmZlcl9pbml0KCk7Ci0KLSAgaWYoIXJlcV9idWZmZXIpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIEN1cmxfZHluX2luaXQoJnJlcSwgRFlOX0hUVFBfUkVRVUVTVCk7CiAKICAgLyogYWRkIHRoZSBtYWluIHJlcXVlc3Qgc3R1ZmYgKi8KICAgLyogR0VUL0hFQUQvUE9TVC9QVVQgKi8KLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIiVzICIsIHJlcXVlc3QpOworICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIlcyAiLCByZXF1ZXN0KTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTI1NTAsNzIgKzI0OTcsOTIgQEAKICAgICBxdWVyeSA9IE5VTEw7CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgLyogdXJsICovCiAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFjb25uLT5iaXRzLnR1bm5lbF9wcm94eSkgewotICAgIGNoYXIgKnVybCA9IGRhdGEtPmNoYW5nZS51cmw7Ci0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCB1cmwsIHN0cmxlbih1cmwpKTsKKyAgICBjaGFyICp1cmwgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19URU1QX1VSTF07CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsIHVybCk7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zZXQuc3RyW1NUUklOR19URU1QX1VSTF0pOwogICB9Ci0gIGVsc2UgaWYocGFzdGVfZnRwX3VzZXJwd2QpCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgImZ0cDovLyVzOiVzQCVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsIGNvbm4tPnBhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKyBzaXplb2YoImZ0cDovLyIpIC0gMSk7CisgIGVsc2UKKyNlbmRpZgorICBpZihwYXN0ZV9mdHBfdXNlcnB3ZCkKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICJmdHA6Ly8lczolc0AlcyIsIGNvbm4tPnVzZXIsIGNvbm4tPnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKyBzaXplb2YoImZ0cDovLyIpIC0gMSk7CiAgIGVsc2UgewotICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgcGF0aCwgc3RybGVuKHBhdGgpKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgcGF0aCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBpZihxdWVyeSkKLSAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsICI/JXMiLCBxdWVyeSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICI/JXMiLCBxdWVyeSk7CiAgIH0KICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKKyNpZmRlZiBVU0VfQUxUU1ZDCisgIGlmKGNvbm4tPmJpdHMuYWx0dXNlZCAmJiAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkFsdC1Vc2VkIikpIHsKKyAgICBhbHR1c2VkID0gYXByaW50ZigiQWx0LVVzZWQ6ICVzOiVkXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUsIGNvbm4tPmNvbm5fdG9fcG9ydCk7CisgICAgaWYoIWFsdHVzZWQpIHsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJnJlcSk7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKyNlbmRpZgogICByZXN1bHQgPQotICAgIEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGZ0cCB0eXBlY29kZSAoO3R5cGU9eCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICIgSFRUUC8lc1xyXG4iIC8qIEhUVFAgdmVyc2lvbiAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBob3N0ICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHByb3h5dXNlcnB3ZCAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB1c2VycHdkICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHJhbmdlICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHVzZXIgYWdlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0ICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIFRFOiAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBhY2NlcHQtZW5jb2RpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmVmZXJlciAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBQcm94eS1Db25uZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiLC8qIHRyYW5zZmVyLWVuY29kaW5nICovCisgICAgQ3VybF9keW5fYWRkZigmcmVxLAorICAgICAgICAgICAgICAgICAgIiVzIiAvKiBmdHAgdHlwZWNvZGUgKDt0eXBlPXgpICovCisgICAgICAgICAgICAgICAgICAiIEhUVFAvJXNcclxuIiAvKiBIVFRQIHZlcnNpb24gKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogaG9zdCAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiBwcm94eXVzZXJwd2QgKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogdXNlcnB3ZCAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiByYW5nZSAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiB1c2VyIGFnZW50ICovCisgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdCAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiBURTogKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCisgICAgICAgICAgICAgICAgICAiJXMiIC8qIHJlZmVyZXIgKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogUHJveHktQ29ubmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiB0cmFuc2Zlci1lbmNvZGluZyAqLworICAgICAgICAgICAgICAgICAgIiVzIiwvKiBBbHQtVXNlZCAqLwogCi0gICAgICAgICAgICAgICAgICAgICBmdHBfdHlwZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBodHRwc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgKGNvbm4tPmFsbG9jcHRyLmhvc3Q/Y29ubi0+YWxsb2NwdHIuaG9zdDoiIiksCi0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q/Ci0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q6IiIsCi0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci51c2VycHdkP2Nvbm4tPmFsbG9jcHRyLnVzZXJwd2Q6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUudXNlX3JhbmdlICYmIGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk/Ci0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmU6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUkFHRU5UXSAmJgotICAgICAgICAgICAgICAgICAgICAgICpkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdICYmCi0gICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIudWFnZW50KT8KLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnVhZ2VudDoiIiwKLSAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBfYWNjZXB0P2h0dHAtPnBfYWNjZXB0OiIiLAotICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIudGU/Y29ubi0+YWxsb2NwdHIudGU6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddICYmCi0gICAgICAgICAgICAgICAgICAgICAgKmRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSAmJgotICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyk/Ci0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2Rpbmc6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+Y2hhbmdlLnJlZmVyZXIgJiYgY29ubi0+YWxsb2NwdHIucmVmKT8KLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnJlZjoiIiAvKiBSZWZlcmVyOiA8ZGF0YT4gKi8sCi0gICAgICAgICAgICAgICAgICAgICAoY29ubi0+Yml0cy5odHRwcHJveHkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAhQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25uLCAiUHJveHktQ29ubmVjdGlvbiIpKT8KLSAgICAgICAgICAgICAgICAgICAgICJQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlXHJcbiI6IiIsCi0gICAgICAgICAgICAgICAgICAgICB0ZQorICAgICAgICAgICAgICAgICAgZnRwX3R5cGVjb2RlLAorICAgICAgICAgICAgICAgICAgaHR0cHN0cmluZywKKyAgICAgICAgICAgICAgICAgIChkYXRhLT5zdGF0ZS5hcHRyLmhvc3Q/ZGF0YS0+c3RhdGUuYXB0ci5ob3N0OiIiKSwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIucHJveHl1c2VycHdkPworICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2Q6IiIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q/ZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOiIiLAorICAgICAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnVzZV9yYW5nZSAmJiBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSk/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZToiIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdICYmCisgICAgICAgICAgICAgICAgICAgKmRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJBR0VOVF0gJiYKKyAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCk/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudDoiIiwKKyAgICAgICAgICAgICAgICAgIGh0dHAtPnBfYWNjZXB0P2h0dHAtPnBfYWNjZXB0OiIiLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci50ZT9kYXRhLT5zdGF0ZS5hcHRyLnRlOiIiLAorICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSAmJgorICAgICAgICAgICAgICAgICAgICpkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10gJiYKKyAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZyk/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZzoiIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhLT5jaGFuZ2UucmVmZXJlciAmJiBkYXRhLT5zdGF0ZS5hcHRyLnJlZik/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZjoiIiAvKiBSZWZlcmVyOiA8ZGF0YT4gKi8sCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgICAgICAgICAgKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCisgICAgICAgICAgICAgICAgICAgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmCisgICAgICAgICAgICAgICAgICAgIUN1cmxfY2hlY2tQcm94eWhlYWRlcnMoY29ubiwgIlByb3h5LUNvbm5lY3Rpb24iKSk/CisgICAgICAgICAgICAgICAgICAiUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG4iOiIiLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICIiLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICB0ZSwKKyAgICAgICAgICAgICAgICAgIGFsdHVzZWQgPyBhbHR1c2VkIDogIiIKICAgICAgICk7CiAKICAgLyogY2xlYXIgdXNlcnB3ZCBhbmQgcHJveHl1c2VycHdkIHRvIGF2b2lkIHJlLXVzaW5nIG9sZCBjcmVkZW50aWFscwogICAgKiBmcm9tIHJlLXVzZWQgY29ubmVjdGlvbnMgKi8KLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51c2VycHdkKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2QpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2QpOworICBmcmVlKGFsdHVzZWQpOwogCiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjYyNSw3ICsyNTkyLDcgQEAKICAgICAgKGRhdGEtPnNldC5odHRwdmVyc2lvbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yKSkgewogICAgIC8qIGFwcGVuZCBIVFRQMiB1cGdyYWRlIG1hZ2ljIHN0dWZmIHRvIHRoZSBIVFRQIHJlcXVlc3QgaWYgaXQgaXNuJ3QgZG9uZQogICAgICAgIG92ZXIgU1NMICovCi0gICAgcmVzdWx0ID0gQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUocmVxX2J1ZmZlciwgY29ubik7CisgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUoJnJlcSwgY29ubik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpAQCAtMjYzNSwxMSArMjYwMiwxMSBAQAogICAgIHN0cnVjdCBDb29raWUgKmNvID0gTlVMTDsgLyogbm8gY29va2llcyBmcm9tIHN0YXJ0ICovCiAgICAgaW50IGNvdW50ID0gMDsKIAotICAgIGlmKGRhdGEtPmNvb2tpZXMpIHsKKyAgICBpZihkYXRhLT5jb29raWVzICYmIGRhdGEtPnN0YXRlLmNvb2tpZV9lbmdpbmUpIHsKICAgICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKICAgICAgIGNvID0gQ3VybF9jb29raWVfZ2V0bGlzdChkYXRhLT5jb29raWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3Q/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIuY29va2llaG9zdDpob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIuY29va2llaG9zdD8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmNvb2tpZWhvc3Q6aG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS51cC5wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCZDVVJMUFJPVE9fSFRUUFMpPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUU6RkFMU0UpOwpAQCAtMjY1MSwxMyArMjYxOCwxMiBAQAogICAgICAgd2hpbGUoY28pIHsKICAgICAgICAgaWYoY28tPnZhbHVlKSB7CiAgICAgICAgICAgaWYoMCA9PSBjb3VudCkgewotICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIkNvb2tpZTogIik7CisgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIkNvb2tpZTogIik7CiAgICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzJXM9JXMiLCBjb3VudD8iOyAiOiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28tPm5hbWUsIGNvLT52YWx1ZSk7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZigmcmVxLCAiJXMlcz0lcyIsIGNvdW50PyI7ICI6IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby0+bmFtZSwgY28tPnZhbHVlKTsKICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjb3VudCsrOwpAQCAtMjY2OCwyNiArMjYzNCwyNSBAQAogICAgIH0KICAgICBpZihhZGRjb29raWVzICYmICFyZXN1bHQpIHsKICAgICAgIGlmKCFjb3VudCkKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIkNvb2tpZTogIik7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAiQ29va2llOiAiKTsKICAgICAgIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIiVzJXMiLCBjb3VudD8iOyAiOiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGNvb2tpZXMpOworICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIlcyVzIiwgY291bnQ/IjsgIjoiIiwgYWRkY29va2llcyk7CiAgICAgICAgIGNvdW50Kys7CiAgICAgICB9CiAgICAgfQogICAgIGlmKGNvdW50ICYmICFyZXN1bHQpCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKIAogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KICNlbmRpZgogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oZGF0YSwgcmVxX2J1ZmZlcik7CisgIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oY29ubiwgJnJlcSk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKGNvbm4sIEZBTFNFLCByZXFfYnVmZmVyKTsKKyAgcmVzdWx0ID0gQ3VybF9hZGRfY3VzdG9tX2hlYWRlcnMoY29ubiwgRkFMU0UsICZyZXEpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjcxMCwyMCArMjY3NSwyMCBAQAogICAgIGlmKChwb3N0c2l6ZSAhPSAtMSkgJiYgIWRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ICYmCiAgICAgICAgKGNvbm4tPmJpdHMuYXV0aG5lZyB8fCAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtTGVuZ3RoIikpKSB7CiAgICAgICAvKiBvbmx5IGFkZCBDb250ZW50LUxlbmd0aCBpZiBub3QgdXBsb2FkaW5nIGNodW5rZWQgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbiIsIHBvc3RzaXplKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnJlcSwgIkNvbnRlbnQtTGVuZ3RoOiAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcclxuIiwgcG9zdHNpemUpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmKHBvc3RzaXplICE9IDApIHsKLSAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCByZXFfYnVmZmVyKTsKKyAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCAmcmVxKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7IC8qIGVuZCBvZiBoZWFkZXJzICovCisgICAgLyogZW5kIG9mIGhlYWRlcnMgKi8KKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0yNzMxLDggKzI2OTYsOCBAQAogICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgcG9zdHNpemUpOwogCiAgICAgLyogdGhpcyBzZW5kcyB0aGUgYnVmZmVyIGFuZCBmcmVlcyBhbGwgdGhlIGJ1ZmZlciByZXNvdXJjZXMgKi8KLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZCgmcmVxX2J1ZmZlciwgY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsIEZJUlNUU09DS0VUKTsKKyAgICByZXN1bHQgPSBDdXJsX2J1ZmZlcl9zZW5kKCZyZXEsIGNvbm4sICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJUlNUU09DS0VUKTsKICAgICBpZihyZXN1bHQpCiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgUFVUIHJlcXVlc3QiKTsKICAgICBlbHNlCkBAIC0yNzQ4LDEyICsyNzEzLDEyIEBACiAgICAgLyogVGhpcyBpcyBmb3JtIHBvc3RpbmcgdXNpbmcgbWltZSBkYXRhLiAqLwogICAgIGlmKGNvbm4tPmJpdHMuYXV0aG5lZykgewogICAgICAgLyogbm90aGluZyB0byBwb3N0ISAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIkNvbnRlbnQtTGVuZ3RoOiAwXHJcblxyXG4iKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAiQ29udGVudC1MZW5ndGg6IDBcclxuXHJcbiIpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZCgmcmVxX2J1ZmZlciwgY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgICAgcmVzdWx0ID0gQ3VybF9idWZmZXJfc2VuZCgmcmVxLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJUlNUU09DS0VUKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIFBPU1QgcmVxdWVzdCIpOwogICAgICAgZWxzZQpAQCAtMjc3MSw5ICsyNzM2LDkgQEAKICAgICAgICAoY29ubi0+Yml0cy5hdXRobmVnIHx8ICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQ29udGVudC1MZW5ndGgiKSkpIHsKICAgICAgIC8qIHdlIGFsbG93IHJlcGxhY2luZyB0aGlzIGhlYWRlciBpZiBub3QgZHVyaW5nIGF1dGggbmVnb3RpYXRpb24sCiAgICAgICAgICBhbHRob3VnaCBpdCBpc24ndCB2ZXJ5IHdpc2UgdG8gYWN0dWFsbHkgc2V0IHlvdXIgb3duICovCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxyXG4iLCBwb3N0c2l6ZSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbiIsIHBvc3RzaXplKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yNzg0LDcgKzI3NDksNyBAQAogICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmhkcjsKIAogICAgICAgZm9yKGhkciA9IGh0dHAtPnNlbmRpdC0+Y3VybGhlYWRlcnM7IGhkcjsgaGRyID0gaGRyLT5uZXh0KSB7Ci0gICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsICIlc1xyXG4iLCBoZHItPmRhdGEpOworICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIlc1xyXG4iLCBoZHItPmRhdGEpOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KQEAgLTI4MDEsNyArMjc2Niw3IEBACiAgICAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihwdHIsICJFeHBlY3Q6IiwgIjEwMC1jb250aW51ZSIpOwogICAgIH0KICAgICBlbHNlIGlmKHBvc3RzaXplID4gRVhQRUNUXzEwMF9USFJFU0hPTEQgfHwgcG9zdHNpemUgPCAwKSB7Ci0gICAgICByZXN1bHQgPSBleHBlY3QxMDAoZGF0YSwgY29ubiwgcmVxX2J1ZmZlcik7CisgICAgICByZXN1bHQgPSBleHBlY3QxMDAoZGF0YSwgY29ubiwgJnJlcSk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjgwOSw3ICsyNzc0LDcgQEAKICAgICAgIGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlciA9IEZBTFNFOwogCiAgICAgLyogbWFrZSB0aGUgcmVxdWVzdCBlbmQgaW4gYSB0cnVlIENSTEYgKi8KLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjgyMiw4ICsyNzg3LDggQEAKICAgICBodHRwLT5zZW5kaW5nID0gSFRUUFNFTkRfQk9EWTsKIAogICAgIC8qIHRoaXMgc2VuZHMgdGhlIGJ1ZmZlciBhbmQgZnJlZXMgYWxsIHRoZSBidWZmZXIgcmVzb3VyY2VzICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBGSVJTVFNPQ0tFVCk7CisgICAgcmVzdWx0ID0gQ3VybF9idWZmZXJfc2VuZCgmcmVxLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIFBPU1QgcmVxdWVzdCIpOwogICAgIGVsc2UKQEAgLTI4NTEsMTcgKzI4MTYsMTUgQEAKICAgICAgICAoY29ubi0+Yml0cy5hdXRobmVnIHx8ICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQ29udGVudC1MZW5ndGgiKSkpIHsKICAgICAgIC8qIHdlIGFsbG93IHJlcGxhY2luZyB0aGlzIGhlYWRlciBpZiBub3QgZHVyaW5nIGF1dGggbmVnb3RpYXRpb24sCiAgICAgICAgICBhbHRob3VnaCBpdCBpc24ndCB2ZXJ5IHdpc2UgdG8gYWN0dWFsbHkgc2V0IHlvdXIgb3duICovCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxyXG4iLCBwb3N0c2l6ZSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICJDb250ZW50LUxlbmd0aDogJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbiIsIHBvc3RzaXplKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtVHlwZSIpKSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi8iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIik7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjg3Niw3ICsyODM5LDcgQEAKICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKHB0ciwgIkV4cGVjdDoiLCAiMTAwLWNvbnRpbnVlIik7CiAgICAgfQogICAgIGVsc2UgaWYocG9zdHNpemUgPiBFWFBFQ1RfMTAwX1RIUkVTSE9MRCB8fCBwb3N0c2l6ZSA8IDApIHsKLSAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCByZXFfYnVmZmVyKTsKKyAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCAmcmVxKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yODk3LDMxICsyODYwLDMyIEBACiAgICAgICAgICAgIGlzIG5vIG1hZ2ljIGxpbWl0IGJ1dCBvbmx5IHNldCB0byBwcmV2ZW50IHJlYWxseSBodWdlIFBPU1RzIHRvCiAgICAgICAgICAgIGdldCB0aGUgZGF0YSBkdXBsaWNhdGVkIHdpdGggbWFsbG9jKCkgYW5kIGZhbWlseS4gKi8KIAotICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7IC8qIGVuZCBvZiBoZWFkZXJzISAqLworICAgICAgICAvKiBlbmQgb2YgaGVhZGVycyEgKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICAgIGlmKCFkYXRhLT5yZXEudXBsb2FkX2NodW5reSkgewogICAgICAgICAgIC8qIFdlJ3JlIG5vdCBzZW5kaW5nIGl0ICdjaHVua2VkJywgYXBwZW5kIGl0IHRvIHRoZSByZXF1ZXN0CiAgICAgICAgICAgICAgYWxyZWFkeSBub3cgdG8gcmVkdWNlIHRoZSBudW1iZXIgaWYgc2VuZCgpIGNhbGxzICovCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClwb3N0c2l6ZSk7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmcmVxLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOwogICAgICAgICAgIGluY2x1ZGVkX2JvZHkgPSBwb3N0c2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICBpZihwb3N0c2l6ZSkgewogICAgICAgICAgICAgLyogQXBwZW5kIHRoZSBQT1NUIGRhdGEgY2h1bmt5LXN0eWxlICovCi0gICAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLCAiJXhcclxuIiwgKGludClwb3N0c2l6ZSk7CisgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIleFxyXG4iLCAoaW50KXBvc3RzaXplKTsKICAgICAgICAgICAgIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOworICAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZyZXEsIGRhdGEtPnNldC5wb3N0ZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOwogICAgICAgICAgICAgICBpZighcmVzdWx0KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKICAgICAgICAgICAgICAgaW5jbHVkZWRfYm9keSA9IHBvc3RzaXplICsgMjsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgIlx4MzBceDBkXHgwYVx4MGRceDBhIiwgNSk7CisgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlx4MzBceDBkXHgwYVx4MGRceDBhIik7CiAgICAgICAgICAgLyogMCAgQ1IgIExGICBDUiAgTEYgKi8KICAgICAgICAgICBpbmNsdWRlZF9ib2R5ICs9IDU7CiAgICAgICAgIH0KQEAgLTI5NDMsMjEgKzI5MDcsMjIgQEAKICAgICAgICAgLyogc2V0IHRoZSB1cGxvYWQgc2l6ZSB0byB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KICAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBodHRwLT5wb3N0c2l6ZSk7CiAKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCAiXHJcbiIsIDIpOyAvKiBlbmQgb2YgaGVhZGVycyEgKi8KKyAgICAgICAgLyogZW5kIG9mIGhlYWRlcnMhICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAiXHJcbiIpOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7IC8qIGVuZCBvZiBoZWFkZXJzISAqLworICAgICAgIC8qIGVuZCBvZiBoZWFkZXJzISAqLworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAgIGlmKGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ICYmIGNvbm4tPmJpdHMuYXV0aG5lZykgewogICAgICAgICAvKiBDaHVua3kgdXBsb2FkIGlzIHNlbGVjdGVkIGFuZCB3ZSdyZSBuZWdvdGlhdGluZyBhdXRoIHN0aWxsLCBzZW5kCiAgICAgICAgICAgIGVuZC1vZi1kYXRhIG9ubHkgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MzBceDBkXHgwYVx4MGRceDBhIiwgNSk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAoY2hhciAqKSJceDMwXHgwZFx4MGFceDBkXHgwYSIpOwogICAgICAgICAvKiAwICBDUiAgTEYgIENSICBMRiAqLwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI5NzcsOCArMjk0Miw4IEBACiAgICAgICB9CiAgICAgfQogICAgIC8qIGlzc3VlIHRoZSByZXF1ZXN0ICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KWluY2x1ZGVkX2JvZHksIEZJUlNUU09DS0VUKTsKKyAgICByZXN1bHQgPSBDdXJsX2J1ZmZlcl9zZW5kKCZyZXEsIGNvbm4sICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpaW5jbHVkZWRfYm9keSwgRklSU1RTT0NLRVQpOwogCiAgICAgaWYocmVzdWx0KQogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEhUVFAgUE9TVCByZXF1ZXN0Iik7CkBAIC0yOTg4LDIzICsyOTUzLDI0IEBACiAgICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIC8qIGlzc3VlIHRoZSByZXF1ZXN0ICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBGSVJTVFNPQ0tFVCk7CisgICAgcmVzdWx0ID0gQ3VybF9idWZmZXJfc2VuZCgmcmVxLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCk7CiAKICAgICBpZihyZXN1bHQpCiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgSFRUUCByZXF1ZXN0Iik7CiAgICAgZWxzZQogICAgICAgLyogSFRUUCBHRVQvSEVBRCBkb3dubG9hZDogKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5wb3N0ZGF0YT9GSVJTVFNPQ0tFVDotMSk7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCAtMSwgVFJVRSwgLTEpOwogICB9CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OworICBpZighcG9zdHNpemUgJiYgKGh0dHAtPnNlbmRpbmcgIT0gSFRUUFNFTkRfUkVRVUVTVCkpCisgICAgZGF0YS0+cmVxLnVwbG9hZF9kb25lID0gVFJVRTsKIAogICBpZihkYXRhLT5yZXEud3JpdGVieXRlY291bnQpIHsKICAgICAvKiBpZiBhIHJlcXVlc3QtYm9keSBoYXMgYmVlbiBzZW50IG9mZiwgd2UgbWFrZSBzdXJlIHRoaXMgcHJvZ3Jlc3MgaXMgbm90ZWQKQEAgLTMxMzgsNTIgKzMxMDQsMTAgQEAKICAgcmV0dXJuIGNoZWNraHR0cHByZWZpeChkYXRhLCBzLCBsZW4pOwogfQogCi0vKgotICogaGVhZGVyX2FwcGVuZCgpIGNvcGllcyBhIGNodW5rIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgYWxyZWFkeSByZWNlaXZlZAotICogaGVhZGVyLiBXZSBtYWtlIHN1cmUgdGhhdCB0aGUgZnVsbCBzdHJpbmcgZml0IGluIHRoZSBhbGxvY2F0ZWQgaGVhZGVyCi0gKiBidWZmZXIsIG9yIGVsc2Ugd2UgZW5sYXJnZSBpdC4KLSAqLwotc3RhdGljIENVUkxjb2RlIGhlYWRlcl9hcHBlbmQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCkKLXsKLSAgc2l6ZV90IG5ld3NpemUgPSBrLT5oYnVmbGVuICsgbGVuZ3RoOwotICBpZihuZXdzaXplID4gQ1VSTF9NQVhfSFRUUF9IRUFERVIpIHsKLSAgICAvKiBUaGUgcmVhc29uIHRvIGhhdmUgYSBtYXggbGltaXQgZm9yIHRoaXMgaXMgdG8gYXZvaWQgdGhlIHJpc2sgb2YgYSBiYWQKLSAgICAgICBzZXJ2ZXIgZmVlZGluZyBsaWJjdXJsIHdpdGggYSBuZXZlci1lbmRpbmcgaGVhZGVyIHRoYXQgd2lsbCBjYXVzZQotICAgICAgIHJlYWxsb2NzIGluZmluaXRlbHkgKi8KLSAgICBmYWlsZihkYXRhLCAiUmVqZWN0ZWQgJXp1IGJ5dGVzIGhlYWRlciAobWF4IGlzICVkKSEiLCBuZXdzaXplLAotICAgICAgICAgIENVUkxfTUFYX0hUVFBfSEVBREVSKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotICBpZihuZXdzaXplID49IGRhdGEtPnN0YXRlLmhlYWRlcnNpemUpIHsKLSAgICAvKiBXZSBlbmxhcmdlIHRoZSBoZWFkZXIgYnVmZmVyIGFzIGl0IGlzIHRvbyBzbWFsbCAqLwotICAgIGNoYXIgKm5ld2J1ZmY7Ci0gICAgc2l6ZV90IGhidWZwX2luZGV4OwotCi0gICAgbmV3c2l6ZSA9IENVUkxNQVgoKGstPmhidWZsZW4gKyBsZW5ndGgpICogMyAvIDIsIGRhdGEtPnN0YXRlLmhlYWRlcnNpemUqMik7Ci0gICAgaGJ1ZnBfaW5kZXggPSBrLT5oYnVmcCAtIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0gICAgbmV3YnVmZiA9IHJlYWxsb2MoZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwgbmV3c2l6ZSk7Ci0gICAgaWYoIW5ld2J1ZmYpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGZvciBiaWcgaGVhZGVyISIpOwotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotICAgIGRhdGEtPnN0YXRlLmhlYWRlcnNpemUgPSBuZXdzaXplOwotICAgIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYgPSBuZXdidWZmOwotICAgIGstPmhidWZwID0gZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiArIGhidWZwX2luZGV4OwotICB9Ci0gIG1lbWNweShrLT5oYnVmcCwgay0+c3RyX3N0YXJ0LCBsZW5ndGgpOwotICBrLT5oYnVmcCArPSBsZW5ndGg7Ci0gIGstPmhidWZsZW4gKz0gbGVuZ3RoOwotICAqay0+aGJ1ZnAgPSAwOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQogc3RhdGljIHZvaWQgcHJpbnRfaHR0cF9lcnJvcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7Ci0gIGNoYXIgKmJlZyA9IGstPnA7CisgIGNoYXIgKmJlZyA9IEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAKICAgLyogbWFrZSBzdXJlIHRoYXQgZGF0YS0+cmVxLnAgcG9pbnRzIHRvIHRoZSBIVFRQIHN0YXR1cyBsaW5lICovCiAgIGlmKCFzdHJuY21wKGJlZywgIkhUVFAiLCA0KSkgewpAQCAtMzIyMSwxNCArMzE0NSwxNyBAQAogICogUmVhZCBhbnkgSFRUUCBoZWFkZXIgbGluZXMgZnJvbSB0aGUgc2VydmVyIGFuZCBwYXNzIHRoZW0gdG8gdGhlIGNsaWVudCBhcHAuCiAgKi8KIENVUkxjb2RlIEN1cmxfaHR0cF9yZWFkd3JpdGVfaGVhZGVycyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqbnJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpzdG9wX3JlYWRpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm5yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnN0b3BfcmVhZGluZykKIHsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CiAgIHNzaXplX3Qgb25yZWFkID0gKm5yZWFkOwogICBjaGFyICpvc3RyID0gay0+c3RyOworICBjaGFyICpoZWFkcDsKKyAgY2hhciAqc3RyX3N0YXJ0OworICBjaGFyICplbmRfcHRyOwogCiAgIC8qIGhlYWRlciBsaW5lIHdpdGhpbiBidWZmZXIgbG9vcCAqLwogICBkbyB7CkBAIC0zMjM3LDIyICszMTY0LDI1IEBACiAgICAgaW50IHdyaXRldHlwZTsKIAogICAgIC8qIHN0cl9zdGFydCBpcyBzdGFydCBvZiBsaW5lIHdpdGhpbiBidWYgKi8KLSAgICBrLT5zdHJfc3RhcnQgPSBrLT5zdHI7CisgICAgc3RyX3N0YXJ0ID0gay0+c3RyOwogCiAgICAgLyogZGF0YSBpcyBpbiBuZXR3b3JrIGVuY29kaW5nIHNvIHVzZSAweDBhIGluc3RlYWQgb2YgJ1xuJyAqLwotICAgIGstPmVuZF9wdHIgPSBtZW1jaHIoay0+c3RyX3N0YXJ0LCAweDBhLCAqbnJlYWQpOworICAgIGVuZF9wdHIgPSBtZW1jaHIoc3RyX3N0YXJ0LCAweDBhLCAqbnJlYWQpOwogCi0gICAgaWYoIWstPmVuZF9wdHIpIHsKKyAgICBpZighZW5kX3B0cikgewogICAgICAgLyogTm90IGEgY29tcGxldGUgaGVhZGVyIGxpbmUgd2l0aGluIGJ1ZmZlciwgYXBwZW5kIHRoZSBkYXRhIHRvCiAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBoZWFkZXJidWZmLiAqLwotICAgICAgcmVzdWx0ID0gaGVhZGVyX2FwcGVuZChkYXRhLCBrLCAqbnJlYWQpOworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmZGF0YS0+c3RhdGUuaGVhZGVyYiwgc3RyX3N0YXJ0LCAqbnJlYWQpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICBpZighay0+aGVhZGVybGluZSkgewogICAgICAgICAvKiBjaGVjayBpZiB0aGlzIGxvb2tzIGxpa2UgYSBwcm90b2NvbCBoZWFkZXIgKi8KLSAgICAgICAgc3RhdHVzbGluZSBzdCA9IGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgay0+aGJ1Zmxlbik7CisgICAgICAgIHN0YXR1c2xpbmUgc3QgPQorICAgICAgICAgIGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpKTsKKwogICAgICAgICBpZihzdCA9PSBTVEFUVVNfQkFEKSB7CiAgICAgICAgICAgLyogdGhpcyBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIHByb3RvY29sIGZpcnN0IGhlYWRlciBsaW5lICovCiAgICAgICAgICAgay0+aGVhZGVyID0gRkFMU0U7CkBAIC0zMjcwLDI4ICszMjAwLDI2IEBACiAgICAgfQogCiAgICAgLyogZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlbWFpbmluZyAoc3VwcG9zZWQpIGhlYWRlciBsaW5lICovCi0gICAgcmVzdF9sZW5ndGggPSAoay0+ZW5kX3B0ciAtIGstPnN0cikgKyAxOworICAgIHJlc3RfbGVuZ3RoID0gKGVuZF9wdHIgLSBrLT5zdHIpICsgMTsKICAgICAqbnJlYWQgLT0gKHNzaXplX3QpcmVzdF9sZW5ndGg7CiAKLSAgICBrLT5zdHIgPSBrLT5lbmRfcHRyICsgMTsgLyogbW92ZSBwYXN0IG5ldyBsaW5lICovCisgICAgay0+c3RyID0gZW5kX3B0ciArIDE7IC8qIG1vdmUgcGFzdCBuZXcgbGluZSAqLwogCi0gICAgZnVsbF9sZW5ndGggPSBrLT5zdHIgLSBrLT5zdHJfc3RhcnQ7CisgICAgZnVsbF9sZW5ndGggPSBrLT5zdHIgLSBzdHJfc3RhcnQ7CiAKLSAgICByZXN1bHQgPSBoZWFkZXJfYXBwZW5kKGRhdGEsIGssIGZ1bGxfbGVuZ3RoKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZkYXRhLT5zdGF0ZS5oZWFkZXJiLCBzdHJfc3RhcnQsIGZ1bGxfbGVuZ3RoKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgay0+ZW5kX3B0ciA9IGstPmhidWZwOwotICAgIGstPnAgPSBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmOwotCiAgICAgLyoqKioKLSAgICAgKiBXZSBub3cgaGF2ZSBhIEZVTEwgaGVhZGVyIGxpbmUgdGhhdCBwIHBvaW50cyB0bworICAgICAqIFdlIG5vdyBoYXZlIGEgRlVMTCBoZWFkZXIgbGluZSBpbiAnaGVhZGVyYicuCiAgICAgICoqKioqLwogCiAgICAgaWYoIWstPmhlYWRlcmxpbmUpIHsKICAgICAgIC8qIHRoZSBmaXJzdCByZWFkIGhlYWRlciAqLwotICAgICAgc3RhdHVzbGluZSBzdCA9IGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGstPmhidWZsZW4pOworICAgICAgc3RhdHVzbGluZSBzdCA9IGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpKTsKICAgICAgIGlmKHN0ID09IFNUQVRVU19CQUQpIHsKICAgICAgICAgc3RyZWFtY2xvc2UoY29ubiwgImJhZCBIVFRQOiBObyBlbmQtb2YtbWVzc2FnZSBpbmRpY2F0b3IiKTsKICAgICAgICAgLyogdGhpcyBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIHByb3RvY29sIGZpcnN0IGhlYWRlciBsaW5lICovCkBAIC0zMzE0LDI2ICszMjQyLDI3IEBACiAgICAgICB9CiAgICAgfQogCi0gICAgLyogaGVhZGVycyBhcmUgaW4gbmV0d29yayBlbmNvZGluZyBzbwotICAgICAgIHVzZSAweDBhIGFuZCAweDBkIGluc3RlYWQgb2YgJ1xuJyBhbmQgJ1xyJyAqLwotICAgIGlmKCgweDBhID09ICprLT5wKSB8fCAoMHgwZCA9PSAqay0+cCkpIHsKKyAgICAvKiBoZWFkZXJzIGFyZSBpbiBuZXR3b3JrIGVuY29kaW5nIHNvIHVzZSAweDBhIGFuZCAweDBkIGluc3RlYWQgb2YgJ1xuJworICAgICAgIGFuZCAnXHInICovCisgICAgaGVhZHAgPSBDdXJsX2R5bl9wdHIoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOworICAgIGlmKCgweDBhID09ICpoZWFkcCkgfHwgKDB4MGQgPT0gKmhlYWRwKSkgewogICAgICAgc2l6ZV90IGhlYWRlcmxlbjsKICAgICAgIC8qIFplcm8tbGVuZ3RoIGhlYWRlciBsaW5lIG1lYW5zIGVuZCBvZiBoZWFkZXJzISAqLwogCiAjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCi0gICAgICBpZigweDBkID09ICprLT5wKSB7Ci0gICAgICAgICprLT5wID0gJ1xyJzsgLyogcmVwbGFjZSB3aXRoIENSIGluIGhvc3QgZW5jb2RpbmcgKi8KLSAgICAgICAgay0+cCsrOyAgICAgICAvKiBwYXNzIHRoZSBDUiBieXRlICovCisgICAgICBpZigweDBkID09ICpoZWFkcCkgeworICAgICAgICAqaGVhZHAgPSAnXHInOyAvKiByZXBsYWNlIHdpdGggQ1IgaW4gaG9zdCBlbmNvZGluZyAqLworICAgICAgICBoZWFkcCsrOyAgICAgICAvKiBwYXNzIHRoZSBDUiBieXRlICovCiAgICAgICB9Ci0gICAgICBpZigweDBhID09ICprLT5wKSB7Ci0gICAgICAgICprLT5wID0gJ1xuJzsgLyogcmVwbGFjZSB3aXRoIExGIGluIGhvc3QgZW5jb2RpbmcgKi8KLSAgICAgICAgay0+cCsrOyAgICAgICAvKiBwYXNzIHRoZSBMRiBieXRlICovCisgICAgICBpZigweDBhID09ICpoZWFkcCkgeworICAgICAgICAqaGVhZHAgPSAnXG4nOyAvKiByZXBsYWNlIHdpdGggTEYgaW4gaG9zdCBlbmNvZGluZyAqLworICAgICAgICBoZWFkcCsrOyAgICAgICAvKiBwYXNzIHRoZSBMRiBieXRlICovCiAgICAgICB9CiAjZWxzZQotICAgICAgaWYoJ1xyJyA9PSAqay0+cCkKLSAgICAgICAgay0+cCsrOyAvKiBwYXNzIHRoZSBcciBieXRlICovCi0gICAgICBpZignXG4nID09ICprLT5wKQotICAgICAgICBrLT5wKys7IC8qIHBhc3MgdGhlIFxuIGJ5dGUgKi8KKyAgICAgIGlmKCdccicgPT0gKmhlYWRwKQorICAgICAgICBoZWFkcCsrOyAvKiBwYXNzIHRoZSBcciBieXRlICovCisgICAgICBpZignXG4nID09ICpoZWFkcCkKKyAgICAgICAgaGVhZHArKzsgLyogcGFzcyB0aGUgXG4gYnl0ZSAqLwogI2VuZGlmIC8qIENVUkxfRE9FU19DT05WRVJTSU9OUyAqLwogCiAgICAgICBpZigxMDAgPD0gay0+aHR0cGNvZGUgJiYgMTk5ID49IGstPmh0dHBjb2RlKSB7CkBAIC0zMzk0LDcgKzMzMjMsNyBAQAogICAgICAgICBpZigoay0+c2l6ZSA9PSAtMSkgJiYgIWstPmNodW5rICYmICFjb25uLT5iaXRzLmNsb3NlICYmCiAgICAgICAgICAgIChjb25uLT5odHRwdmVyc2lvbiA9PSAxMSkgJiYKICAgICAgICAgICAgIShjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19SVFNQKSAmJgotICAgICAgICAgICBkYXRhLT5zZXQuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpIHsKKyAgICAgICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpIHsKICAgICAgICAgICAvKiBPbiBIVFRQIDEuMSwgd2hlbiBjb25uZWN0aW9uIGlzIG5vdCB0byBnZXQgY2xvc2VkLCBidXQgbm8KICAgICAgICAgICAgICBDb250ZW50LUxlbmd0aCBub3IgVHJhbnNmZXItRW5jb2RpbmcgY2h1bmtlZCBoYXZlIGJlZW4KICAgICAgICAgICAgICByZWNlaXZlZCwgYWNjb3JkaW5nIHRvIFJGQzI2MTYgc2VjdGlvbiA0LjQgcG9pbnQgNSwgd2UKQEAgLTM0NTIsMTAgKzMzODEsOSBAQAogICAgICAgaWYoZGF0YS0+c2V0LmluY2x1ZGVfaGVhZGVyKQogICAgICAgICB3cml0ZXR5cGUgfD0gQ0xJRU5UV1JJVEVfQk9EWTsKIAotICAgICAgaGVhZGVybGVuID0gay0+cCAtIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0KKyAgICAgIGhlYWRlcmxlbiA9IEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCB3cml0ZXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fcHRyKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcmxlbik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0zNDkwLDcgKzM0MTgsNyBAQAogICAgICAgICAgICAqIGNvbnRpbnVlIHNlbmRpbmcgZXZlbiBpZiBpdCBnZXRzIGRpc2NhcmRlZAogICAgICAgICAgICAqLwogCi0gICAgICAgICAgc3dpdGNoKGRhdGEtPnNldC5odHRwcmVxKSB7CisgICAgICAgICAgc3dpdGNoKGRhdGEtPnN0YXRlLmh0dHByZXEpIHsKICAgICAgICAgICBjYXNlIEhUVFBSRVFfUFVUOgogICAgICAgICAgIGNhc2UgSFRUUFJFUV9QT1NUOgogICAgICAgICAgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CkBAIC0zNTAxLDcgKzM0MjksMTYgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgQ3VybF9leHBpcmVfZG9uZShkYXRhLCBFWFBJUkVfMTAwX1RJTUVPVVQpOwogICAgICAgICAgICAgaWYoIWstPnVwbG9hZF9kb25lKSB7Ci0gICAgICAgICAgICAgIGlmKGRhdGEtPnNldC5odHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcikgeworICAgICAgICAgICAgICBpZigoay0+aHR0cGNvZGUgPT0gNDE3KSAmJiBkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIpIHsKKyAgICAgICAgICAgICAgICAvKiA0MTcgRXhwZWN0YXRpb24gRmFpbGVkIC0gdHJ5IGFnYWluIHdpdGhvdXQgdGhlIEV4cGVjdAorICAgICAgICAgICAgICAgICAgIGhlYWRlciAqLworICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJHb3QgNDE3IHdoaWxlIHdhaXRpbmcgZm9yIGEgMTAwXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5kaXNhYmxlZXhwZWN0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBERUJVR0FTU0VSVCghZGF0YS0+cmVxLm5ld3VybCk7CisgICAgICAgICAgICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IHN0cmR1cChjb25uLT5kYXRhLT5jaGFuZ2UudXJsKTsKKyAgICAgICAgICAgICAgICBDdXJsX2RvbmVfc2VuZGluZyhjb25uLCBrKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmKGRhdGEtPnNldC5odHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcikgewogICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJIVFRQIGVycm9yIGJlZm9yZSBlbmQgb2Ygc2VuZCwga2VlcCBzZW5kaW5nXG4iKTsKICAgICAgICAgICAgICAgICBpZihrLT5leHAxMDAgPiBFWFAxMDBfU0VORF9EQVRBKSB7CiAgICAgICAgICAgICAgICAgICBrLT5leHAxMDAgPSBFWFAxMDBfU0VORF9EQVRBOwpAQCAtMzUxMSw4ICszNDQ4LDEwIEBACiAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJIVFRQIGVycm9yIGJlZm9yZSBlbmQgb2Ygc2VuZCwgc3RvcCBzZW5kaW5nXG4iKTsKICAgICAgICAgICAgICAgICBzdHJlYW1jbG9zZShjb25uLCAiU3RvcCBzZW5kaW5nIGRhdGEgYmVmb3JlIGV2ZXJ5dGhpbmcgc2VudCIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZG9uZV9zZW5kaW5nKGNvbm4sIGspOworICAgICAgICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgay0+dXBsb2FkX2RvbmUgPSBUUlVFOwotICAgICAgICAgICAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiBkb24ndCBzZW5kICovCiAgICAgICAgICAgICAgICAgaWYoZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyKQogICAgICAgICAgICAgICAgICAgay0+ZXhwMTAwID0gRVhQMTAwX0ZBSUxFRDsKICAgICAgICAgICAgICAgfQpAQCAtMzU5NywxNCArMzUzNiwxMiBAQAogCiAgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQogICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLAotICAgICAgICAgICAgICAgICAgICAgay0+c3RyX3N0YXJ0LCBoZWFkZXJsZW4pOworICAgICAgICAgICAgICAgICAgICAgc3RyX3N0YXJ0LCBoZWFkZXJsZW4pOwogICAgICAgICBicmVhazsgICAgICAgICAgLyogZXhpdCBoZWFkZXIgbGluZSBsb29wICovCiAgICAgICB9CiAKLSAgICAgIC8qIFdlIGNvbnRpbnVlIHJlYWRpbmcgaGVhZGVycywgc28gcmVzZXQgdGhlIGxpbmUtYmFzZWQKLSAgICAgICAgIGhlYWRlciBwYXJzaW5nIHZhcmlhYmxlcyBoYnVmcCAmJiBoYnVmbGVuICovCi0gICAgICBrLT5oYnVmcCA9IGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0gICAgICBrLT5oYnVmbGVuID0gMDsKKyAgICAgIC8qIFdlIGNvbnRpbnVlIHJlYWRpbmcgaGVhZGVycywgcmVzZXQgdGhlIGxpbmUtYmFzZWQgaGVhZGVyICovCisgICAgICBDdXJsX2R5bl9yZXNldCgmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKQEAgLTM2MjMsMTIgKzM1NjAsMTEgQEAKICNkZWZpbmUgU0NSQVRDSFNJWkUgMjEKICAgICAgIENVUkxjb2RlIHJlczsKICAgICAgIGNoYXIgc2NyYXRjaFtTQ1JBVENIU0laRSArIDFdOyAvKiAiSFRUUC9tYWpvci5taW5vciAxMjMiICovCi0gICAgICAvKiBXZSBjYW4ndCByZWFsbHkgY29udmVydCB0aGlzIHlldCBiZWNhdXNlIHdlCi0gICAgICAgICBkb24ndCBrbm93IGlmIGl0J3MgdGhlIDFzdCBoZWFkZXIgbGluZSBvciB0aGUgYm9keS4KLSAgICAgICAgIFNvIHdlIGRvIGEgcGFydGlhbCBjb252ZXJzaW9uIGludG8gYSBzY3JhdGNoIGFyZWEsCi0gICAgICAgICBsZWF2aW5nIHRoZSBkYXRhIGF0IGstPnAgYXMtaXMuCisgICAgICAvKiBXZSBjYW4ndCByZWFsbHkgY29udmVydCB0aGlzIHlldCBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgaXQncyB0aGUKKyAgICAgICAgIDFzdCBoZWFkZXIgbGluZSBvciB0aGUgYm9keS4gIFNvIHdlIGRvIGEgcGFydGlhbCBjb252ZXJzaW9uIGludG8gYQorICAgICAgICAgc2NyYXRjaCBhcmVhLCBsZWF2aW5nIHRoZSBkYXRhIGF0ICdoZWFkcCcgYXMtaXMuCiAgICAgICAqLwotICAgICAgc3RybmNweSgmc2NyYXRjaFswXSwgay0+cCwgU0NSQVRDSFNJWkUpOworICAgICAgc3RybmNweSgmc2NyYXRjaFswXSwgaGVhZHAsIFNDUkFUQ0hTSVpFKTsKICAgICAgIHNjcmF0Y2hbU0NSQVRDSFNJWkVdID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgKi8KICAgICAgIHJlcyA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjcmF0Y2hbMF0sCkBAIC0zNjM3LDcgKzM1NzMsNyBAQAogICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLwogICAgICAgICByZXR1cm4gcmVzOwogI2Vsc2UKLSNkZWZpbmUgSEVBREVSMSBrLT5wIC8qIG5vIGNvbnZlcnNpb24gbmVlZGVkLCBqdXN0IHVzZSBrLT5wICovCisjZGVmaW5lIEhFQURFUjEgaGVhZHAgLyogbm8gY29udmVyc2lvbiBuZWVkZWQsIGp1c3QgdXNlIGhlYWRwICovCiAjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCiAKICAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgUFJPVE9fRkFNSUxZX0hUVFApIHsKQEAgLTM2NDksNiArMzU4NSw3IEBACiAgICAgICAgICAqIGd1YXJhbnRlZXMgb24gZnV0dXJlIGJlaGF2aW9ycyBzaW5jZSBpdCBpc24ndCB3aXRoaW4gdGhlIHByb3RvY29sLgogICAgICAgICAgKi8KICAgICAgICAgY2hhciBzZXBhcmF0b3I7CisgICAgICAgIGNoYXIgdHdvb3J0aHJlZVsyXTsKICAgICAgICAgbmMgPSBzc2NhbmYoSEVBREVSMSwKICAgICAgICAgICAgICAgICAgICAgIiBIVFRQLyUxZC4lMWQlYyUzZCIsCiAgICAgICAgICAgICAgICAgICAgICZodHRwdmVyc2lvbl9tYWpvciwKQEAgLTM2NTYsOCArMzU5Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICZzZXBhcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICZrLT5odHRwY29kZSk7CiAKLSAgICAgICAgaWYobmMgPT0gMSAmJiBodHRwdmVyc2lvbl9tYWpvciA9PSAyICYmCi0gICAgICAgICAgIDEgPT0gc3NjYW5mKEhFQURFUjEsICIgSFRUUC8yICVkIiwgJmstPmh0dHBjb2RlKSkgeworICAgICAgICBpZihuYyA9PSAxICYmIGh0dHB2ZXJzaW9uX21ham9yID49IDIgJiYKKyAgICAgICAgICAgMiA9PSBzc2NhbmYoSEVBREVSMSwgIiBIVFRQLyUxWzIzXSAlZCIsIHR3b29ydGhyZWUsICZrLT5odHRwY29kZSkpIHsKICAgICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDA7CiAgICAgICAgICAgbmMgPSA0OwogICAgICAgICAgIHNlcGFyYXRvciA9ICcgJzsKQEAgLTM2ODcsNyArMzYyNCwxMSBAQAogICAgICAgICAgICAgIGNvbXBhcmUgaGVhZGVyIGxpbmUgYWdhaW5zdCBsaXN0IG9mIGFsaWFzZXMKICAgICAgICAgICAqLwogICAgICAgICAgIGlmKCFuYykgewotICAgICAgICAgICAgaWYoY2hlY2todHRwcHJlZml4KGRhdGEsIGstPnAsIGstPmhidWZsZW4pID09IFNUQVRVU19ET05FKSB7CisgICAgICAgICAgICBzdGF0dXNsaW5lIGNoZWNrID0KKyAgICAgICAgICAgICAgY2hlY2todHRwcHJlZml4KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9wdHIoJmRhdGEtPnN0YXRlLmhlYWRlcmIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fbGVuKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSk7CisgICAgICAgICAgICBpZihjaGVjayA9PSBTVEFUVVNfRE9ORSkgewogICAgICAgICAgICAgICBuYyA9IDE7CiAgICAgICAgICAgICAgIGstPmh0dHBjb2RlID0gMjAwOwogICAgICAgICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDEwOwpAQCAtMzY5NSw3ICszNjM2LDcgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlVuc3VwcG9ydGVkIEhUVFAgdmVyc2lvbiBpbiByZXNwb25zZVxuIik7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlVuc3VwcG9ydGVkIEhUVFAgdmVyc2lvbiBpbiByZXNwb25zZSIpOwogICAgICAgICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKICAgICAgICAgfQogICAgICAgfQpAQCAtMzczMywxNSArMzY3NCwxOCBAQAogICAgICAgICAgKiBkZXBlbmRpbmcgb24gaG93IGF1dGhlbnRpY2F0aW9uIGlzIHdvcmtpbmcuICBPdGhlciBjb2RlcwogICAgICAgICAgKiBhcmUgZGVmaW5pdGVseSBlcnJvcnMsIHNvIGdpdmUgdXAgaGVyZS4KICAgICAgICAgICovCi0gICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmIGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfR0VUICYmCisgICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmIGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9HRVQgJiYKICAgICAgICAgICAgICBrLT5odHRwY29kZSA9PSA0MTYpIHsKICAgICAgICAgICAvKiAiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSIsIGp1c3QgcHJvY2VlZCBhbmQKICAgICAgICAgICAgICBwcmV0ZW5kIHRoaXMgaXMgbm8gZXJyb3IgKi8KICAgICAgICAgICBrLT5pZ25vcmVib2R5ID0gVFJVRTsgLyogQXZvaWQgYXBwZW5kaW5nIGVycm9yIG1zZyB0byBnb29kIGRhdGEuICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZihkYXRhLT5zZXQuaHR0cF9mYWlsX29uX2Vycm9yICYmIChrLT5odHRwY29kZSA+PSA0MDApICYmCi0gICAgICAgICAgICgoay0+aHR0cGNvZGUgIT0gNDAxKSB8fCAhY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkgJiYKLSAgICAgICAgICAgKChrLT5odHRwY29kZSAhPSA0MDcpIHx8ICFjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkKSApIHsKKyAgICAgICAgICAgICAgICAoKGstPmh0dHBjb2RlICE9IDQwMSkgfHwgIWNvbm4tPmJpdHMudXNlcl9wYXNzd2QpCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgICAgICAgICYmICgoay0+aHR0cGNvZGUgIT0gNDA3KSB8fCAhY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkKKyNlbmRpZgorICAgICAgICAgICkgewogICAgICAgICAgIC8qIHNlcmlvdXMgZXJyb3IsIGdvIGhvbWUhICovCiAgICAgICAgICAgcHJpbnRfaHR0cF9lcnJvcihkYXRhKTsKICAgICAgICAgICByZXR1cm4gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUjsKQEAgLTM3NTcsOSArMzcwMSw4IEBACiAgICAgICAgIGVsc2UgaWYoY29ubi0+aHR0cHZlcnNpb24gPT0gMjAgfHwKICAgICAgICAgICAgICAgICAoay0+dXBncjEwMSA9PSBVUEdSMTAxX1JFUVVFU1RFRCAmJiBrLT5odHRwY29kZSA9PSAxMDEpKSB7CiAgICAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJIVFRQLzIgZm91bmQsIGFsbG93IG11bHRpcGxleGluZ1xuIikpOwotCi0gICAgICAgICAgLyogSFRUUC8yIGNhbm5vdCBibGFja2xpc3QgbXVsdGlwbGV4aW5nIHNpbmNlIGl0IGlzIGEgY29yZQotICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHByb3RvY29sICovCisgICAgICAgICAgLyogSFRUUC8yIGNhbm5vdCBhdm9pZCBtdWx0aXBsZXhpbmcgc2luY2UgaXQgaXMgYSBjb3JlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICBvZiB0aGUgcHJvdG9jb2wgKi8KICAgICAgICAgICBjb25uLT5idW5kbGUtPm11bHRpdXNlID0gQlVORExFX01VTFRJUExFWDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKGNvbm4tPmh0dHB2ZXJzaW9uID49IDExICYmCkBAIC0zNzY5LDYgKzM3MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAiSFRUUCAxLjEgb3IgbGF0ZXIgd2l0aCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25cbiIpKTsKICAgICAgICAgfQogCisgICAgICAgIGstPmh0dHBfYm9keWxlc3MgPSBrLT5odHRwY29kZSA+PSAxMDAgJiYgay0+aHR0cGNvZGUgPCAyMDA7CiAgICAgICAgIHN3aXRjaChrLT5odHRwY29kZSkgewogICAgICAgICBjYXNlIDMwNDoKICAgICAgICAgICAvKiAocXVvdGUgZnJvbSBSRkMyNjE2LCBzZWN0aW9uIDEwLjMuNSk6IFRoZSAzMDQgcmVzcG9uc2UKQEAgLTM3ODYsMTAgKzM3MzAsOSBAQAogICAgICAgICAgICAqIGVtcHR5IGxpbmUgYWZ0ZXIgdGhlIGhlYWRlciBmaWVsZHMuICovCiAgICAgICAgICAgay0+c2l6ZSA9IDA7CiAgICAgICAgICAgay0+bWF4ZG93bmxvYWQgPSAwOwotICAgICAgICAgIGstPmlnbm9yZWNsID0gVFJVRTsgLyogaWdub3JlIENvbnRlbnQtTGVuZ3RoIGhlYWRlcnMgKi8KKyAgICAgICAgICBrLT5odHRwX2JvZHlsZXNzID0gVFJVRTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAvKiBub3RoaW5nICovCiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTM3OTksMTYgKzM3NDIsMTYgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrKGRhdGEsIGstPnAsIHN0cmxlbihrLT5wKSk7CisgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhkYXRhLCBoZWFkcCwgc3RybGVuKGhlYWRwKSk7CiAgICAgLyogQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayBjYWxscyBmYWlsZiBpZiB1bnN1Y2Nlc3NmdWwgKi8KICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgLyogQ2hlY2sgZm9yIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgbGluZXMgdG8gZ2V0IHNpemUgKi8KLSAgICBpZighay0+aWdub3JlY2wgJiYgIWRhdGEtPnNldC5pZ25vcmVjbCAmJgotICAgICAgIGNoZWNrcHJlZml4KCJDb250ZW50LUxlbmd0aDoiLCBrLT5wKSkgeworICAgIGlmKCFrLT5odHRwX2JvZHlsZXNzICYmCisgICAgICAgIWRhdGEtPnNldC5pZ25vcmVjbCAmJiBjaGVja3ByZWZpeCgiQ29udGVudC1MZW5ndGg6IiwgaGVhZHApKSB7CiAgICAgICBjdXJsX29mZl90IGNvbnRlbnRsZW5ndGg7Ci0gICAgICBDVVJMb2ZmdCBvZmZ0ID0gY3VybHhfc3RydG9vZmZ0KGstPnAgKyAxNSwgTlVMTCwgMTAsICZjb250ZW50bGVuZ3RoKTsKKyAgICAgIENVUkxvZmZ0IG9mZnQgPSBjdXJseF9zdHJ0b29mZnQoaGVhZHAgKyAxNSwgTlVMTCwgMTAsICZjb250ZW50bGVuZ3RoKTsKIAogICAgICAgaWYob2ZmdCA9PSBDVVJMX09GRlRfT0spIHsKICAgICAgICAgaWYoZGF0YS0+c2V0Lm1heF9maWxlc2l6ZSAmJgpAQCAtMzgzOSw4ICszNzgyLDggQEAKICAgICAgIH0KICAgICB9CiAgICAgLyogY2hlY2sgZm9yIENvbnRlbnQtVHlwZTogaGVhZGVyIGxpbmVzIHRvIGdldCB0aGUgTUlNRS10eXBlICovCi0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1UeXBlOiIsIGstPnApKSB7Ci0gICAgICBjaGFyICpjb250ZW50dHlwZSA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoay0+cCk7CisgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1UeXBlOiIsIGhlYWRwKSkgeworICAgICAgY2hhciAqY29udGVudHR5cGUgPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGhlYWRwKTsKICAgICAgIGlmKCFjb250ZW50dHlwZSkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICBpZighKmNvbnRlbnR0eXBlKQpAQCAtMzg1MSwxMCArMzc5NCwxMCBAQAogICAgICAgICBkYXRhLT5pbmZvLmNvbnRlbnR0eXBlID0gY29udGVudHR5cGU7CiAgICAgICB9CiAgICAgfQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICBlbHNlIGlmKChjb25uLT5odHRwdmVyc2lvbiA9PSAxMCkgJiYKICAgICAgICAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCi0gICAgICAgICAgICBDdXJsX2NvbXBhcmVoZWFkZXIoay0+cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJveHktQ29ubmVjdGlvbjoiLCAia2VlcC1hbGl2ZSIpKSB7CisgICAgICAgICAgICBDdXJsX2NvbXBhcmVoZWFkZXIoaGVhZHAsICJQcm94eS1Db25uZWN0aW9uOiIsICJrZWVwLWFsaXZlIikpIHsKICAgICAgIC8qCiAgICAgICAgKiBXaGVuIGEgSFRUUC8xLjAgcmVwbHkgY29tZXMgd2hlbiB1c2luZyBhIHByb3h5LCB0aGUKICAgICAgICAqICdQcm94eS1Db25uZWN0aW9uOiBrZWVwLWFsaXZlJyBsaW5lIHRlbGxzIHVzIHRoZQpAQCAtMzg2Niw4ICszODA5LDcgQEAKICAgICB9CiAgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPT0gMTEpICYmCiAgICAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSAmJgotICAgICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKGstPnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3h5LUNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKKyAgICAgICAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihoZWFkcCwgIlByb3h5LUNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKICAgICAgIC8qCiAgICAgICAgKiBXZSBnZXQgYSBIVFRQLzEuMSByZXNwb25zZSBmcm9tIGEgcHJveHkgYW5kIGl0IHNheXMgaXQnbGwKICAgICAgICAqIGNsb3NlIGRvd24gYWZ0ZXIgdGhpcyB0cmFuc2Zlci4KQEAgLTM4NzUsOCArMzgxNyw5IEBACiAgICAgICBjb25uY2xvc2UoY29ubiwgIlByb3h5LUNvbm5lY3Rpb246IGFza2VkIHRvIGNsb3NlIGFmdGVyIGRvbmUiKTsKICAgICAgIGluZm9mKGRhdGEsICJIVFRQLzEuMSBwcm94eSBjb25uZWN0aW9uIHNldCBjbG9zZSFcbiIpOwogICAgIH0KKyNlbmRpZgogICAgIGVsc2UgaWYoKGNvbm4tPmh0dHB2ZXJzaW9uID09IDEwKSAmJgotICAgICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKGstPnAsICJDb25uZWN0aW9uOiIsICJrZWVwLWFsaXZlIikpIHsKKyAgICAgICAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihoZWFkcCwgIkNvbm5lY3Rpb246IiwgImtlZXAtYWxpdmUiKSkgewogICAgICAgLyoKICAgICAgICAqIEEgSFRUUC8xLjAgcmVwbHkgd2l0aCB0aGUgJ0Nvbm5lY3Rpb246IGtlZXAtYWxpdmUnIGxpbmUKICAgICAgICAqIHRlbGxzIHVzIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUga2VwdCBhbGl2ZSBmb3Igb3VyCkBAIC0zODg2LDcgKzM4MjksNyBAQAogICAgICAgY29ubmtlZXAoY29ubiwgIkNvbm5lY3Rpb24ga2VlcC1hbGl2ZSIpOwogICAgICAgaW5mb2YoZGF0YSwgIkhUVFAvMS4wIGNvbm5lY3Rpb24gc2V0IHRvIGtlZXAgYWxpdmUhXG4iKTsKICAgICB9Ci0gICAgZWxzZSBpZihDdXJsX2NvbXBhcmVoZWFkZXIoay0+cCwgIkNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKKyAgICBlbHNlIGlmKEN1cmxfY29tcGFyZWhlYWRlcihoZWFkcCwgIkNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKICAgICAgIC8qCiAgICAgICAgKiBbUkZDIDI2MTYsIHNlY3Rpb24gOC4xLjIuMV0KICAgICAgICAqICJDb25uZWN0aW9uOiBjbG9zZSIgaXMgSFRUUC8xLjEgbGFuZ3VhZ2UgYW5kIG1lYW5zIHRoYXQKQEAgLTM4OTUsNyArMzgzOCw3IEBACiAgICAgICAgKi8KICAgICAgIHN0cmVhbWNsb3NlKGNvbm4sICJDb25uZWN0aW9uOiBjbG9zZSB1c2VkIik7CiAgICAgfQotICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIGstPnApKSB7CisgICAgZWxzZSBpZighay0+aHR0cF9ib2R5bGVzcyAmJiBjaGVja3ByZWZpeCgiVHJhbnNmZXItRW5jb2Rpbmc6IiwgaGVhZHApKSB7CiAgICAgICAvKiBPbmUgb3IgbW9yZSBlbmNvZGluZ3MuIFdlIGNoZWNrIGZvciBjaHVua2VkIGFuZC9vciBhIGNvbXByZXNzaW9uCiAgICAgICAgICBhbGdvcml0aG0uICovCiAgICAgICAvKgpAQCAtMzkwNywxMSArMzg1MCwxMSBAQAogICAgICAgICogb2YgY2h1bmtzLCBhbmQgYSBjaHVuay1kYXRhIHNldCB0byB6ZXJvIHNpZ25hbHMgdGhlCiAgICAgICAgKiBlbmQtb2YtY2h1bmtzLiAqLwogCi0gICAgICByZXN1bHQgPSBDdXJsX2J1aWxkX3VuZW5jb2Rpbmdfc3RhY2soY29ubiwgay0+cCArIDE4LCBUUlVFKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhjb25uLCBoZWFkcCArIDE4LCBUUlVFKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1FbmNvZGluZzoiLCBrLT5wKSAmJgorICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIkNvbnRlbnQtRW5jb2Rpbmc6IiwgaGVhZHApICYmCiAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10pIHsKICAgICAgIC8qCiAgICAgICAgKiBQcm9jZXNzIENvbnRlbnQtRW5jb2RpbmcuIExvb2sgZm9yIHRoZSB2YWx1ZXM6IGlkZW50aXR5LApAQCAtMzkyMCwxMSArMzg2MywyNCBAQAogICAgICAgICogMjYxNikuIHpsaWIgY2Fubm90IGhhbmRsZSBjb21wcmVzcy4gIEhvd2V2ZXIsIGVycm9ycyBhcmUKICAgICAgICAqIGhhbmRsZWQgZnVydGhlciBkb3duIHdoZW4gdGhlIHJlc3BvbnNlIGJvZHkgaXMgcHJvY2Vzc2VkCiAgICAgICAgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhjb25uLCBrLT5wICsgMTcsIEZBTFNFKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhjb25uLCBoZWFkcCArIDE3LCBGQUxTRSk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIkNvbnRlbnQtUmFuZ2U6Iiwgay0+cCkpIHsKKyAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJSZXRyeS1BZnRlcjoiLCBoZWFkcCkpIHsKKyAgICAgIC8qIFJldHJ5LUFmdGVyID0gSFRUUC1kYXRlIC8gZGVsYXktc2Vjb25kcyAqLworICAgICAgY3VybF9vZmZfdCByZXRyeV9hZnRlciA9IDA7IC8qIHplcm8gZm9yIHVua25vd24gb3IgIm5vdyIgKi8KKyAgICAgIHRpbWVfdCBkYXRlID0gQ3VybF9nZXRkYXRlX2NhcHBlZCgmaGVhZHBbMTJdKTsKKyAgICAgIGlmKC0xID09IGRhdGUpIHsKKyAgICAgICAgLyogbm90IGEgZGF0ZSwgdHJ5IGl0IGFzIGEgZGVjaW1hbCBudW1iZXIgKi8KKyAgICAgICAgKHZvaWQpY3VybHhfc3RydG9vZmZ0KCZoZWFkcFsxMl0sIE5VTEwsIDEwLCAmcmV0cnlfYWZ0ZXIpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAvKiBjb252ZXJ0IGRhdGUgdG8gbnVtYmVyIG9mIHNlY29uZHMgaW50byB0aGUgZnV0dXJlICovCisgICAgICAgIHJldHJ5X2FmdGVyID0gZGF0ZSAtIHRpbWUoTlVMTCk7CisgICAgICBkYXRhLT5pbmZvLnJldHJ5X2FmdGVyID0gcmV0cnlfYWZ0ZXI7IC8qIHN0b3JlIGl0ICovCisgICAgfQorICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIkNvbnRlbnQtUmFuZ2U6IiwgaGVhZHApKSB7CiAgICAgICAvKiBDb250ZW50LVJhbmdlOiBieXRlcyBbbnVtXS0KICAgICAgICAgIENvbnRlbnQtUmFuZ2U6IGJ5dGVzOiBbbnVtXS0KICAgICAgICAgIENvbnRlbnQtUmFuZ2U6IFtudW1dLQpAQCAtMzkzNiw3ICszODkyLDcgQEAKICAgICAgICAgIFRoZSBmb3J0aCBtZWFucyB0aGUgcmVxdWVzdGVkIHJhbmdlIHdhcyB1bnNhdGlzZmllZC4KICAgICAgICovCiAKLSAgICAgIGNoYXIgKnB0ciA9IGstPnAgKyAxNDsKKyAgICAgIGNoYXIgKnB0ciA9IGhlYWRwICsgMTQ7CiAKICAgICAgIC8qIE1vdmUgZm9yd2FyZCB1bnRpbCBmaXJzdCBkaWdpdCBvciBhc3RlcmlzayAqLwogICAgICAgd2hpbGUoKnB0ciAmJiAhSVNESUdJVCgqcHRyKSAmJiAqcHRyICE9ICcqJykKQEAgLTM5NTQsMzcgKzM5MTAsMzUgQEAKICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOyAvKiBnZXQgZXZlcnl0aGluZyAqLwogICAgIH0KICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKLSAgICBlbHNlIGlmKGRhdGEtPmNvb2tpZXMgJiYKLSAgICAgICAgICAgIGNoZWNrcHJlZml4KCJTZXQtQ29va2llOiIsIGstPnApKSB7CisgICAgZWxzZSBpZihkYXRhLT5jb29raWVzICYmIGRhdGEtPnN0YXRlLmNvb2tpZV9lbmdpbmUgJiYKKyAgICAgICAgICAgIGNoZWNrcHJlZml4KCJTZXQtQ29va2llOiIsIGhlYWRwKSkgewogICAgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSwKICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CiAgICAgICBDdXJsX2Nvb2tpZV9hZGQoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb29raWVzLCBUUlVFLCBGQUxTRSwgay0+cCArIDExLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvb2tpZXMsIFRSVUUsIEZBTFNFLCBoZWFkcCArIDExLAogICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgY3VzdG9tLXNldCBIb3N0OiBuYW1lLCB1c2UgaXQKICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlLCBvciBlbHNlIHVzZSByZWFsIHBlZXIgaG9zdCBuYW1lLiAqLwotICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3Q/Ci0gICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIuY29va2llaG9zdDpjb25uLT5ob3N0Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci5jb29raWVob3N0PworICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIuY29va2llaG9zdDpjb25uLT5ob3N0Lm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUudXAucGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmQ1VSTFBST1RPX0hUVFBTKT8KICAgICAgICAgICAgICAgICAgICAgICBUUlVFOkZBTFNFKTsKICAgICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CiAgICAgfQogI2VuZGlmCi0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiTGFzdC1Nb2RpZmllZDoiLCBrLT5wKSAmJgorICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIkxhc3QtTW9kaWZpZWQ6IiwgaGVhZHApICYmCiAgICAgICAgICAgICAoZGF0YS0+c2V0LnRpbWVjb25kaXRpb24gfHwgZGF0YS0+c2V0LmdldF9maWxldGltZSkgKSB7Ci0gICAgICB0aW1lX3Qgc2VjcyA9IHRpbWUoTlVMTCk7Ci0gICAgICBrLT50aW1lb2Zkb2MgPSBjdXJsX2dldGRhdGUoay0+cCArIHN0cmxlbigiTGFzdC1Nb2RpZmllZDoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vjcyk7CisgICAgICBrLT50aW1lb2Zkb2MgPSBDdXJsX2dldGRhdGVfY2FwcGVkKGhlYWRwICsgc3RybGVuKCJMYXN0LU1vZGlmaWVkOiIpKTsKICAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpCiAgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBrLT50aW1lb2Zkb2M7CiAgICAgfQotICAgIGVsc2UgaWYoKGNoZWNrcHJlZml4KCJXV1ctQXV0aGVudGljYXRlOiIsIGstPnApICYmCisgICAgZWxzZSBpZigoY2hlY2twcmVmaXgoIldXVy1BdXRoZW50aWNhdGU6IiwgaGVhZHApICYmCiAgICAgICAgICAgICAgKDQwMSA9PSBrLT5odHRwY29kZSkpIHx8Ci0gICAgICAgICAgICAoY2hlY2twcmVmaXgoIlByb3h5LWF1dGhlbnRpY2F0ZToiLCBrLT5wKSAmJgorICAgICAgICAgICAgKGNoZWNrcHJlZml4KCJQcm94eS1hdXRoZW50aWNhdGU6IiwgaGVhZHApICYmCiAgICAgICAgICAgICAgKDQwNyA9PSBrLT5odHRwY29kZSkpKSB7CiAKICAgICAgIGJvb2wgcHJveHkgPSAoay0+aHR0cGNvZGUgPT0gNDA3KSA/IFRSVUUgOiBGQUxTRTsKLSAgICAgIGNoYXIgKmF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGstPnApOworICAgICAgY2hhciAqYXV0aCA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoaGVhZHApOwogICAgICAgaWYoIWF1dGgpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0zOTk1LDI3ICszOTQ5LDI4IEBACiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAjaWZkZWYgVVNFX1NQTkVHTwotICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlBlcnNpc3RlbnQtQXV0aCIsIGstPnApKSB7CisjaWZkZWYgVVNFX1NQTkVHTworICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlBlcnNpc3RlbnQtQXV0aCIsIGhlYWRwKSkgewogICAgICAgc3RydWN0IG5lZ290aWF0ZWRhdGEgKm5lZ2RhdGEgPSAmY29ubi0+bmVnb3RpYXRlOwogICAgICAgc3RydWN0IGF1dGggKmF1dGhwID0gJmRhdGEtPnN0YXRlLmF1dGhob3N0OwogICAgICAgaWYoYXV0aHAtPnBpY2tlZCA9PSBDVVJMQVVUSF9ORUdPVElBVEUpIHsKLSAgICAgICAgY2hhciAqcGVyc2lzdGVudGF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGstPnApOworICAgICAgICBjaGFyICpwZXJzaXN0ZW50YXV0aCA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoaGVhZHApOwogICAgICAgICBpZighcGVyc2lzdGVudGF1dGgpCiAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIG5lZ2RhdGEtPm5vYXV0aHBlcnNpc3QgPSBjaGVja3ByZWZpeCgiZmFsc2UiLCBwZXJzaXN0ZW50YXV0aCk7CisgICAgICAgIG5lZ2RhdGEtPm5vYXV0aHBlcnNpc3QgPSBjaGVja3ByZWZpeCgiZmFsc2UiLCBwZXJzaXN0ZW50YXV0aCk/CisgICAgICAgICAgVFJVRTpGQUxTRTsKICAgICAgICAgbmVnZGF0YS0+aGF2ZW5vYXV0aHBlcnNpc3QgPSBUUlVFOwogICAgICAgICBpbmZvZihkYXRhLCAiTmVnb3RpYXRlOiBub2F1dGhwZXJzaXN0IC0+ICVkLCBoZWFkZXIgcGFydDogJXMiLAogICAgICAgICAgIG5lZ2RhdGEtPm5vYXV0aHBlcnNpc3QsIHBlcnNpc3RlbnRhdXRoKTsKICAgICAgICAgZnJlZShwZXJzaXN0ZW50YXV0aCk7CiAgICAgICB9CiAgICAgfQotICAjZW5kaWYKKyNlbmRpZgogICAgIGVsc2UgaWYoKGstPmh0dHBjb2RlID49IDMwMCAmJiBrLT5odHRwY29kZSA8IDQwMCkgJiYKLSAgICAgICAgICAgIGNoZWNrcHJlZml4KCJMb2NhdGlvbjoiLCBrLT5wKSAmJgorICAgICAgICAgICAgY2hlY2twcmVmaXgoIkxvY2F0aW9uOiIsIGhlYWRwKSAmJgogICAgICAgICAgICAgIWRhdGEtPnJlcS5sb2NhdGlvbikgewogICAgICAgLyogdGhpcyBpcyB0aGUgVVJMIHRoYXQgdGhlIHNlcnZlciBhZHZpc2VzIHVzIHRvIHVzZSBpbnN0ZWFkICovCi0gICAgICBjaGFyICpsb2NhdGlvbiA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoay0+cCk7CisgICAgICBjaGFyICpsb2NhdGlvbiA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoaGVhZHApOwogICAgICAgaWYoIWxvY2F0aW9uKQogICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIGlmKCEqbG9jYXRpb24pCkBAIC00MDQwLDcgKzM5OTUsNyBAQAogICAgIH0KICNpZmRlZiBVU0VfQUxUU1ZDCiAgICAgLyogSWYgZW5hYmxlZCwgdGhlIGhlYWRlciBpcyBpbmNvbWluZyBhbmQgdGhpcyBpcyBvdmVyIEhUVFBTICovCi0gICAgZWxzZSBpZihkYXRhLT5hc2kgJiYgY2hlY2twcmVmaXgoIkFsdC1TdmM6Iiwgay0+cCkgJiYKKyAgICBlbHNlIGlmKGRhdGEtPmFzaSAmJiBjaGVja3ByZWZpeCgiQWx0LVN2YzoiLCBoZWFkcCkgJiYKICAgICAgICAgICAgICgoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkgfHwKICNpZmRlZiBDVVJMREVCVUcKICAgICAgICAgICAgICAvKiBhbGxvdyBkZWJ1ZyBidWlsZHMgdG8gY2lyY3VtdmVudCB0aGUgSFRUUFMgcmVzdHJpY3Rpb24gKi8KQEAgLTQwNTIsNyArNDAwNyw3IEBACiAgICAgICAvKiB0aGUgQUxQTiBvZiB0aGUgY3VycmVudCByZXF1ZXN0ICovCiAgICAgICBlbnVtIGFscG5pZCBpZCA9IChjb25uLT5odHRwdmVyc2lvbiA9PSAyMCkgPyBBTFBOX2gyIDogQUxQTl9oMTsKICAgICAgIHJlc3VsdCA9IEN1cmxfYWx0c3ZjX3BhcnNlKGRhdGEsIGRhdGEtPmFzaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrLT5wWyBzdHJsZW4oIkFsdC1TdmM6IikgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoZWFkcFsgc3RybGVuKCJBbHQtU3ZjOiIpIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwgY29ubi0+aG9zdC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdWl0b3VzKGNvbm4tPnJlbW90ZV9wb3J0KSk7CiAgICAgICBpZihyZXN1bHQpCkBAIC00MDYwLDcgKzQwMTUsNyBAQAogICAgIH0KICNlbmRpZgogICAgIGVsc2UgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fUlRTUCkgewotICAgICAgcmVzdWx0ID0gQ3VybF9ydHNwX3BhcnNlaGVhZGVyKGNvbm4sIGstPnApOworICAgICAgcmVzdWx0ID0gQ3VybF9ydHNwX3BhcnNlaGVhZGVyKGNvbm4sIGhlYWRwKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC00MDc0LDE4ICs0MDI5LDE4IEBACiAgICAgICB3cml0ZXR5cGUgfD0gQ0xJRU5UV1JJVEVfQk9EWTsKIAogICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQotICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIGstPnAsIChzaXplX3Qpay0+aGJ1Zmxlbik7CisgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgaGVhZHAsCisgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYikpOwogCi0gICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgd3JpdGV0eXBlLCBrLT5wLCBrLT5oYnVmbGVuKTsKKyAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCB3cml0ZXR5cGUsIGhlYWRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYikpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBkYXRhLT5pbmZvLmhlYWRlcl9zaXplICs9IChsb25nKWstPmhidWZsZW47Ci0gICAgZGF0YS0+cmVxLmhlYWRlcmJ5dGVjb3VudCArPSAobG9uZylrLT5oYnVmbGVuOworICAgIGRhdGEtPmluZm8uaGVhZGVyX3NpemUgKz0gQ3VybF9keW5fbGVuKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKTsKKyAgICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ICs9IEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAKLSAgICAvKiByZXNldCBoYnVmcCBwb2ludGVyICYmIGhidWZsZW4gKi8KLSAgICBrLT5oYnVmcCA9IGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0gICAgay0+aGJ1ZmxlbiA9IDA7CisgICAgQ3VybF9keW5fcmVzZXQoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogICB9CiAgIHdoaWxlKCprLT5zdHIpOyAvKiBoZWFkZXIgbGluZSB3aXRoaW4gYnVmZmVyICovCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuaAppbmRleCBhNTlmZTdhLi42NDFiYzBiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00NCw1NyArNDQsMzAgQEAKIAogY2hhciAqQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNoZWFkZXIpOwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFRoZSBhZGRfYnVmZmVyIHNlcmllcyBvZiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYnVpbGQgb25lIGxhcmdlIG1lbW9yeSBjaHVuawotICogZnJvbSByZXBlYXRlZCBmdW5jdGlvbiBpbnZva2VzLiBVc2VkIHNvIHRoYXQgdGhlIGVudGlyZSBIVFRQIHJlcXVlc3QgY2FuCi0gKiBiZSBzZW50IGluIG9uZSBnby4KLSAqLwotc3RydWN0IEN1cmxfc2VuZF9idWZmZXIgewotICBjaGFyICpidWZmZXI7Ci0gIHNpemVfdCBzaXplX21heDsKLSAgc2l6ZV90IHNpemVfdXNlZDsKLX07Ci10eXBlZGVmIHN0cnVjdCBDdXJsX3NlbmRfYnVmZmVyIEN1cmxfc2VuZF9idWZmZXI7CitDVVJMY29kZSBDdXJsX2J1ZmZlcl9zZW5kKHN0cnVjdCBkeW5idWYgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgKmJ5dGVzX3dyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2V0aW5kZXgpOwogCi1DdXJsX3NlbmRfYnVmZmVyICpDdXJsX2FkZF9idWZmZXJfaW5pdCh2b2lkKTsKLXZvaWQgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoQ3VybF9zZW5kX2J1ZmZlciAqKmlucCk7Ci1DVVJMY29kZSBDdXJsX2FkZF9idWZmZXJmKEN1cmxfc2VuZF9idWZmZXIgKippbnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotICBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci1DVVJMY29kZSBDdXJsX2FkZF9idWZmZXIoQ3VybF9zZW5kX2J1ZmZlciAqKmlucCwgY29uc3Qgdm9pZCAqaW5wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLUNVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKEN1cmxfc2VuZF9idWZmZXIgKippbnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90ICpieXRlc193cml0dGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluY2x1ZGVkX2JvZHlfYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2V0aW5kZXgpOwotCi1DVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKmJ1Zik7CitDVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGR5bmJ1ZiAqYnVmKTsKIENVUkxjb2RlIEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfY29ubmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGR5bmJ1ZiAqcmVxX2J1ZmZlcik7CiBDVVJMY29kZSBDdXJsX2h0dHBfY29tcGlsZV90cmFpbGVycyhzdHJ1Y3QgY3VybF9zbGlzdCAqdHJhaWxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpoYW5kbGUpOwogCiAvKiBwcm90b2NvbC1zcGVjaWZpYyBmdW5jdGlvbnMgc2V0IHVwIHRvIGJlIGNhbGxlZCBieSB0aGUgbWFpbiBlbmdpbmUgKi8KIENVUkxjb2RlIEN1cmxfaHR0cChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogQ1VSTGNvZGUgQ3VybF9odHRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICosIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CiBDVVJMY29kZSBDdXJsX2h0dHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotQ1VSTGNvZGUgQ3VybF9odHRwX3NldHVwX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLQotLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gaHR0cF9jaHVua3MuYyAqLwotdm9pZCBDdXJsX2h0dHBjaHVua19pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1DSFVOS2NvZGUgQ3VybF9odHRwY2h1bmtfcmVhZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmRhdGFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBsZW5ndGgsIHNzaXplX3QgKndyb3RlKTsKIAogLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBodHRwLmMgKi8KLXZvaWQgQ3VybF9odHRwX2F1dGhfc3RhZ2Uoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgaW50IHN0YWdlKTsKIENVUkxjb2RlIEN1cmxfaHR0cF9pbnB1dF9hdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGgpOwogQ1VSTGNvZGUgQ3VybF9odHRwX2F1dGhfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1DVVJMY29kZSBDdXJsX2h0dHBfcGVyaGFwc3Jld2luZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCiAvKiBJZiBvbmx5IHRoZSBQSUNLTk9ORSBiaXQgaXMgc2V0LCB0aGVyZSBoYXMgYmVlbiBhIHJvdW5kLXRyaXAgYW5kIHdlCiAgICBzZWxlY3RlZCB0byB1c2Ugbm8gYXV0aCBhdCBhbGwuIEllLCB3ZSBhY3RpdmVseSBzZWxlY3Qgbm8gYXV0aCwgYXMgb3Bwb3NlZApAQCAtMTI0LDExICs5NywxNSBAQAogICoKICAqLwogI2lmbmRlZiBFWFBFQ1RfMTAwX1RIUkVTSE9MRAotI2RlZmluZSBFWFBFQ1RfMTAwX1RIUkVTSE9MRCAxMDI0CisjZGVmaW5lIEVYUEVDVF8xMDBfVEhSRVNIT0xEICgxMDI0KjEwMjQpCiAjZW5kaWYKIAogI2VuZGlmIC8qIENVUkxfRElTQUJMRV9IVFRQICovCiAKKyNpZmRlZiBVU0VfTkdIVFRQMworc3RydWN0IGgzb3V0OyAvKiBzZWUgbmd0Y3AyICovCisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhUVFAgdW5pcXVlIHNldHVwCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTU4LDkgKzEzNSw5IEBACiAgIH0gc2VuZGluZzsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAotICBDdXJsX3NlbmRfYnVmZmVyICpzZW5kX2J1ZmZlcjsgLyogdXNlZCBpZiB0aGUgcmVxdWVzdCBjb3VsZG4ndCBiZSBzZW50IGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgY2h1bmssIHBvaW50cyB0byBhbiBhbGxvY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnVmZmVyIHN0cnVjdCAqLworICBzdHJ1Y3QgZHluYnVmIHNlbmRfYnVmZmVyOyAvKiB1c2VkIGlmIHRoZSByZXF1ZXN0IGNvdWxkbid0IGJlIHNlbnQgaW4gb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rLCBwb2ludHMgdG8gYW4gYWxsb2NhdGVkIHNlbmRfYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCAqLwogI2VuZGlmCiAjaWZkZWYgVVNFX05HSFRUUDIKICAgLyoqKioqKioqKioqIGZvciBIVFRQLzIgd2Ugc3RvcmUgc3RyZWFtLWxvY2FsIGRhdGEgaGVyZSAqKioqKioqKioqKioqLwpAQCAtMTY4LDI3ICsxNDUsNDQgQEAKIAogICBib29sIGJvZHlzdGFydGVkOwogICAvKiBXZSBzdG9yZSBub24tZmluYWwgYW5kIGZpbmFsIHJlc3BvbnNlIGhlYWRlcnMgaGVyZSwgcGVyLXN0cmVhbSAqLwotICBDdXJsX3NlbmRfYnVmZmVyICpoZWFkZXJfcmVjdmJ1ZjsKKyAgc3RydWN0IGR5bmJ1ZiBoZWFkZXJfcmVjdmJ1ZjsKICAgc2l6ZV90IG5yZWFkX2hlYWRlcl9yZWN2YnVmOyAvKiBudW1iZXIgb2YgYnl0ZXMgaW4gaGVhZGVyX3JlY3ZidWYgZmVkIGludG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlciBsYXllciAqLwotICBDdXJsX3NlbmRfYnVmZmVyICp0cmFpbGVyX3JlY3ZidWY7CiAgIGludCBzdGF0dXNfY29kZTsgLyogSFRUUCBzdGF0dXMgY29kZSAqLwogICBjb25zdCB1aW50OF90ICpwYXVzZWRhdGE7IC8qIHBvaW50ZXIgdG8gZGF0YSByZWNlaXZlZCBpbiBvbl9kYXRhX2NodW5rICovCiAgIHNpemVfdCBwYXVzZWxlbjsgLyogdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGRhdGEgKi8KLSAgYm9vbCBjbG9zZWQ7IC8qIFRSVUUgb24gSFRUUDIgc3RyZWFtIGNsb3NlICovCiAgIGJvb2wgY2xvc2VfaGFuZGxlZDsgLyogVFJVRSBpZiBzdHJlYW0gY2xvc3VyZSBpcyBoYW5kbGVkIGJ5IGxpYmN1cmwgKi8KLSAgY2hhciAqbWVtOyAgICAgLyogcG9pbnRzIHRvIGEgYnVmZmVyIGluIG1lbW9yeSB0byBzdG9yZSByZWNlaXZlZCBkYXRhICovCi0gIHNpemVfdCBsZW47ICAgIC8qIHNpemUgb2YgdGhlIGJ1ZmZlciAnbWVtJyBwb2ludHMgdG8gKi8KLSAgc2l6ZV90IG1lbWxlbjsgLyogc2l6ZSBvZiBkYXRhIGNvcGllZCB0byBtZW0gKi8KLQotICBjb25zdCB1aW50OF90ICp1cGxvYWRfbWVtOyAvKiBwb2ludHMgdG8gYSBidWZmZXIgdG8gcmVhZCBmcm9tICovCi0gIHNpemVfdCB1cGxvYWRfbGVuOyAvKiBzaXplIG9mIHRoZSBidWZmZXIgJ3VwbG9hZF9tZW0nIHBvaW50cyB0byAqLwotICBjdXJsX29mZl90IHVwbG9hZF9sZWZ0OyAvKiBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB1cGxvYWQgKi8KIAogICBjaGFyICoqcHVzaF9oZWFkZXJzOyAgICAgICAvKiBhbGxvY2F0ZWQgYXJyYXkgKi8KICAgc2l6ZV90IHB1c2hfaGVhZGVyc191c2VkOyAgLyogbnVtYmVyIG9mIGVudHJpZXMgZmlsbGVkIGluICovCiAgIHNpemVfdCBwdXNoX2hlYWRlcnNfYWxsb2M7IC8qIG51bWJlciBvZiBlbnRyaWVzIGFsbG9jYXRlZCAqLwogI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfTkdIVFRQMikgfHwgZGVmaW5lZChVU0VfTkdIVFRQMykKKyAgYm9vbCBjbG9zZWQ7IC8qIFRSVUUgb24gSFRUUDIgc3RyZWFtIGNsb3NlICovCisgIGNoYXIgKm1lbTsgICAgIC8qIHBvaW50cyB0byBhIGJ1ZmZlciBpbiBtZW1vcnkgdG8gc3RvcmUgcmVjZWl2ZWQgZGF0YSAqLworICBzaXplX3QgbGVuOyAgICAvKiBzaXplIG9mIHRoZSBidWZmZXIgJ21lbScgcG9pbnRzIHRvICovCisgIHNpemVfdCBtZW1sZW47IC8qIHNpemUgb2YgZGF0YSBjb3BpZWQgdG8gbWVtICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVTRV9OR0hUVFAyKSB8fCBkZWZpbmVkKEVOQUJMRV9RVUlDKQorICAvKiBmaWVsZHMgdXNlZCBieSBib3RoIEhUVFAvMiBhbmQgSFRUUC8zICovCisgIGNvbnN0IHVpbnQ4X3QgKnVwbG9hZF9tZW07IC8qIHBvaW50cyB0byBhIGJ1ZmZlciB0byByZWFkIGZyb20gKi8KKyAgc2l6ZV90IHVwbG9hZF9sZW47IC8qIHNpemUgb2YgdGhlIGJ1ZmZlciAndXBsb2FkX21lbScgcG9pbnRzIHRvICovCisgIGN1cmxfb2ZmX3QgdXBsb2FkX2xlZnQ7IC8qIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIHVwbG9hZCAqLworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfUVVJQworICAvKioqKioqKioqKiogZm9yIEhUVFAvMyB3ZSBzdG9yZSBzdHJlYW0tbG9jYWwgZGF0YSBoZXJlICoqKioqKioqKioqKiovCisgIGludDY0X3Qgc3RyZWFtM19pZDsgLyogc3RyZWFtIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisgIGJvb2wgZmlyc3RoZWFkZXI7ICAvKiBGQUxTRSB1bnRpbCBoZWFkZXJzIGFycml2ZSAqLworICBib29sIGZpcnN0Ym9keTsgIC8qIEZBTFNFIHVudGlsIGJvZHkgYXJyaXZlcyAqLworICBib29sIGgzcmVxOyAgICAvKiBGQUxTRSB1bnRpbCByZXF1ZXN0IGlzIGlzc3VlZCAqLworICBib29sIHVwbG9hZF9kb25lOworI2VuZGlmCisjaWZkZWYgVVNFX05HSFRUUDMKKyAgc2l6ZV90IHVuYWNrZWRfd2luZG93OworICBzdHJ1Y3QgaDNvdXQgKmgzb3V0OyAvKiBwZXItc3RyZWFtIGJ1ZmZlcnMgZm9yIHVwbG9hZCAqLworICBzdHJ1Y3QgZHluYnVmIG92ZXJmbG93OyAvKiBleGNlc3MgZGF0YSByZWNlaXZlZCBkdXJpbmcgYSBzaW5nbGUgQ3VybF9yZWFkICovCisjZW5kaWYKIH07CiAKICNpZmRlZiBVU0VfTkdIVFRQMgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAyLmMKaW5kZXggOGU3YmMyMS4uNmNmNjUxZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiY29ubmVjdC5oIgogI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgogI2luY2x1ZGUgInN0cmR1cC5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTQzLDE5ICs0NCwxMSBAQAogCiAjZGVmaW5lIEgyX0JVRlNJWkUgMzI3NjgKIAotI2lmIChOR0hUVFAyX1ZFUlNJT05fTlVNIDwgMHgwMTAwMDApCisjaWYgKE5HSFRUUDJfVkVSU0lPTl9OVU0gPCAweDAxMGMwMCkKICNlcnJvciB0b28gb2xkIG5naHR0cDIgdmVyc2lvbiwgdXBncmFkZSEKICNlbmRpZgogCi0jaWYgKE5HSFRUUDJfVkVSU0lPTl9OVU0gPiAweDAxMDgwMCkKLSNkZWZpbmUgTkdIVFRQMl9IQVNfSFRUUDJfU1RSRVJST1IgMQotI2VuZGlmCi0KLSNpZiAoTkdIVFRQMl9WRVJTSU9OX05VTSA+PSAweDAxMDkwMCkKLS8qIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrIGlzIHByZXNlbnQgaW4gbmdodHRwMiAxLjkuMCBvcgotICAgbGF0ZXIgKi8KLSNkZWZpbmUgTkdIVFRQMl9IQVNfRVJST1JfQ0FMTEJBQ0sgMQotI2Vsc2UKKyNpZmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAjZGVmaW5lIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrKHgseSkKICNlbmRpZgogCkBAIC02MywxMiArNTYsMTIgQEAKICNkZWZpbmUgTkdIVFRQMl9IQVNfU0VUX0xPQ0FMX1dJTkRPV19TSVpFIDEKICNlbmRpZgogCi0jZGVmaW5lIEhUVFAyX0hVR0VfV0lORE9XX1NJWkUgKDEgPDwgMzApCisjZGVmaW5lIEhUVFAyX0hVR0VfV0lORE9XX1NJWkUgKDMyICogMTAyNCAqIDEwMjQpIC8qIDMyIE1CICovCiAKICNpZmRlZiBERUJVR19IVFRQMgogI2RlZmluZSBIMkJVR0YoeCkgeAogI2Vsc2UKLSNkZWZpbmUgSDJCVUdGKHgpIGRvIHsgfSBXSElMRV9GQUxTRQorI2RlZmluZSBIMkJVR0YoeCkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAogCkBAIC0xMDAsMTYgKzkzLDExIEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cDJfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKIHsKICAgY29uc3Qgc3RydWN0IGh0dHBfY29ubiAqYyA9ICZjb25uLT5wcm90by5odHRwYzsKICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOwogICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKLSAgKHZvaWQpbnVtc29ja3M7CiAKICAgc29ja1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogCkBAIC0xMjYsMTEgKzExNCw5IEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cDJfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBodHRwMl9wZXJmb3JtX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOworICByZXR1cm4gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2tzKTsKIH0KIAogLyoKQEAgLTEzOSw4ICsxMjUsNyBAQAogc3RhdGljIHZvaWQgaHR0cDJfc3RyZWFtX2ZyZWUoc3RydWN0IEhUVFAgKmh0dHApCiB7CiAgIGlmKGh0dHApIHsKLSAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmaHR0cC0+aGVhZGVyX3JlY3ZidWYpOwotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZodHRwLT50cmFpbGVyX3JlY3ZidWYpOworICAgIEN1cmxfZHluX2ZyZWUoJmh0dHAtPmhlYWRlcl9yZWN2YnVmKTsKICAgICBmb3IoOyBodHRwLT5wdXNoX2hlYWRlcnNfdXNlZCA+IDA7IC0taHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQpIHsKICAgICAgIGZyZWUoaHR0cC0+cHVzaF9oZWFkZXJzW2h0dHAtPnB1c2hfaGVhZGVyc191c2VkIC0gMV0pOwogICAgIH0KQEAgLTI0MCw3ICsyMjUsNyBAQAogCiAgIGlmKGNoZWNrc190b19wZXJmb3JtICYgQ09OTkNIRUNLX0tFRVBBTElWRSkgewogICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICAgIHRpbWVfdCBlbGFwc2VkID0gQ3VybF90aW1lZGlmZihub3csIGNoZWNrLT5rZWVwYWxpdmUpOworICAgIHRpbWVkaWZmX3QgZWxhcHNlZCA9IEN1cmxfdGltZWRpZmYobm93LCBjaGVjay0+a2VlcGFsaXZlKTsKIAogICAgIGlmKGVsYXBzZWQgPiBjaGVjay0+dXBrZWVwX2ludGVydmFsX21zKSB7CiAgICAgICAvKiBQZXJmb3JtIGFuIEhUVFAvMiBQSU5HICovCkBAIC0yNjksMjQgKzI1NCwyMiBAQAogICByZXR1cm4gcmV0X3ZhbDsKIH0KIAotLyogY2FsbGVkIGZyb20gQ3VybF9odHRwX3NldHVwX2Nvbm4gKi8KKy8qIGNhbGxlZCBmcm9tIGh0dHBfc2V0dXBfY29ubiAqLwogdm9pZCBDdXJsX2h0dHAyX3NldHVwX3JlcShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewogICBzdHJ1Y3QgSFRUUCAqaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0KLSAgaHR0cC0+bnJlYWRfaGVhZGVyX3JlY3ZidWYgPSAwOwogICBodHRwLT5ib2R5c3RhcnRlZCA9IEZBTFNFOwogICBodHRwLT5zdGF0dXNfY29kZSA9IC0xOwogICBodHRwLT5wYXVzZWRhdGEgPSBOVUxMOwogICBodHRwLT5wYXVzZWxlbiA9IDA7CiAgIGh0dHAtPmNsb3NlZCA9IEZBTFNFOwogICBodHRwLT5jbG9zZV9oYW5kbGVkID0gRkFMU0U7Ci0gIGh0dHAtPm1lbSA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsKLSAgaHR0cC0+bGVuID0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOworICBodHRwLT5tZW0gPSBOVUxMOworICBodHRwLT5sZW4gPSAwOwogICBodHRwLT5tZW1sZW4gPSAwOwogfQogCi0vKiBjYWxsZWQgZnJvbSBDdXJsX2h0dHBfc2V0dXBfY29ubiAqLworLyogY2FsbGVkIGZyb20gaHR0cF9zZXR1cF9jb25uICovCiB2b2lkIEN1cmxfaHR0cDJfc2V0dXBfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CiAgIGNvbm4tPnByb3RvLmh0dHBjLnNldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPQpAQCAtMzQ4LDM2ICszMzEsNyBAQAogaW50IEN1cmxfaHR0cDJfdmVyKGNoYXIgKnAsIHNpemVfdCBsZW4pCiB7CiAgIG5naHR0cDJfaW5mbyAqaDIgPSBuZ2h0dHAyX3ZlcnNpb24oMCk7Ci0gIHJldHVybiBtc25wcmludGYocCwgbGVuLCAiIG5naHR0cDIvJXMiLCBoMi0+dmVyc2lvbl9zdHIpOwotfQotCi0vKiBIVFRQLzIgZXJyb3IgY29kZSB0byBuYW1lIGJhc2VkIG9uIHRoZSBFcnJvciBDb2RlIFJlZ2lzdHJ5LgotaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjcGFnZS03NwotbmdodHRwMl9lcnJvcl9jb2RlIGVudW1zIGFyZSBpZGVudGljYWwuCi0qLwotc3RhdGljIGNvbnN0IGNoYXIgKmh0dHAyX3N0cmVycm9yKHVpbnQzMl90IGVycikKLXsKLSNpZm5kZWYgTkdIVFRQMl9IQVNfSFRUUDJfU1RSRVJST1IKLSAgY29uc3QgY2hhciAqc3RyW10gPSB7Ci0gICAgIk5PX0VSUk9SIiwgICAgICAgICAgICAgLyogMHgwICovCi0gICAgIlBST1RPQ09MX0VSUk9SIiwgICAgICAgLyogMHgxICovCi0gICAgIklOVEVSTkFMX0VSUk9SIiwgICAgICAgLyogMHgyICovCi0gICAgIkZMT1dfQ09OVFJPTF9FUlJPUiIsICAgLyogMHgzICovCi0gICAgIlNFVFRJTkdTX1RJTUVPVVQiLCAgICAgLyogMHg0ICovCi0gICAgIlNUUkVBTV9DTE9TRUQiLCAgICAgICAgLyogMHg1ICovCi0gICAgIkZSQU1FX1NJWkVfRVJST1IiLCAgICAgLyogMHg2ICovCi0gICAgIlJFRlVTRURfU1RSRUFNIiwgICAgICAgLyogMHg3ICovCi0gICAgIkNBTkNFTCIsICAgICAgICAgICAgICAgLyogMHg4ICovCi0gICAgIkNPTVBSRVNTSU9OX0VSUk9SIiwgICAgLyogMHg5ICovCi0gICAgIkNPTk5FQ1RfRVJST1IiLCAgICAgICAgLyogMHhBICovCi0gICAgIkVOSEFOQ0VfWU9VUl9DQUxNIiwgICAgLyogMHhCICovCi0gICAgIklOQURFUVVBVEVfU0VDVVJJVFkiLCAgLyogMHhDICovCi0gICAgIkhUVFBfMV8xX1JFUVVJUkVEIiAgICAgLyogMHhEICovCi0gIH07Ci0gIHJldHVybiAoZXJyIDwgc2l6ZW9mKHN0cikgLyBzaXplb2Yoc3RyWzBdKSkgPyBzdHJbZXJyXSA6ICJ1bmtub3duIjsKLSNlbHNlCi0gIHJldHVybiBuZ2h0dHAyX2h0dHAyX3N0cmVycm9yKGVycik7Ci0jZW5kaWYKKyAgcmV0dXJuIG1zbnByaW50ZihwLCBsZW4sICJuZ2h0dHAyLyVzIiwgaDItPnZlcnNpb25fc3RyKTsKIH0KIAogLyoKQEAgLTUwMywyNiArNDU3LDU4IEBACiAgICAgLyogc2V0dXAgdGhlIHJlcXVlc3Qgc3RydWN0ICovCiAgICAgc3RydWN0IEhUVFAgKmh0dHAgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBIVFRQKSk7CiAgICAgaWYoIWh0dHApIHsKLSAgICAgICh2b2lkKUN1cmxfY2xvc2Uoc2Vjb25kKTsKLSAgICAgIHNlY29uZCA9IE5VTEw7CisgICAgICAodm9pZClDdXJsX2Nsb3NlKCZzZWNvbmQpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIHNlY29uZC0+cmVxLnByb3RvcCA9IGh0dHA7Ci0gICAgICBodHRwLT5oZWFkZXJfcmVjdmJ1ZiA9IEN1cmxfYWRkX2J1ZmZlcl9pbml0KCk7Ci0gICAgICBpZighaHR0cC0+aGVhZGVyX3JlY3ZidWYpIHsKLSAgICAgICAgZnJlZShodHRwKTsKLSAgICAgICAgKHZvaWQpQ3VybF9jbG9zZShzZWNvbmQpOwotICAgICAgICBzZWNvbmQgPSBOVUxMOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIEN1cmxfaHR0cDJfc2V0dXBfcmVxKHNlY29uZCk7Ci0gICAgICAgIHNlY29uZC0+c3RhdGUuc3RyZWFtX3dlaWdodCA9IGRhdGEtPnN0YXRlLnN0cmVhbV93ZWlnaHQ7Ci0gICAgICB9CisgICAgICBDdXJsX2R5bl9pbml0KCZodHRwLT5oZWFkZXJfcmVjdmJ1ZiwgRFlOX0gyX0hFQURFUlMpOworICAgICAgQ3VybF9odHRwMl9zZXR1cF9yZXEoc2Vjb25kKTsKKyAgICAgIHNlY29uZC0+c3RhdGUuc3RyZWFtX3dlaWdodCA9IGRhdGEtPnN0YXRlLnN0cmVhbV93ZWlnaHQ7CiAgICAgfQogICB9CiAgIHJldHVybiBzZWNvbmQ7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X3RyYW5zZmVyX3VybChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3B1c2hoZWFkZXJzICpocCkKK3sKKyAgY29uc3QgY2hhciAqdjsKKyAgQ1VSTFUgKnUgPSBjdXJsX3VybCgpOworICBDVVJMVWNvZGUgdWM7CisgIGNoYXIgKnVybDsKKworICB2ID0gY3VybF9wdXNoaGVhZGVyX2J5bmFtZShocCwgIjpzY2hlbWUiKTsKKyAgaWYodikgeworICAgIHVjID0gY3VybF91cmxfc2V0KHUsIENVUkxVUEFSVF9TQ0hFTUUsIHYsIDApOworICAgIGlmKHVjKQorICAgICAgcmV0dXJuIDE7CisgIH0KKworICB2ID0gY3VybF9wdXNoaGVhZGVyX2J5bmFtZShocCwgIjphdXRob3JpdHkiKTsKKyAgaWYodikgeworICAgIHVjID0gY3VybF91cmxfc2V0KHUsIENVUkxVUEFSVF9IT1NULCB2LCAwKTsKKyAgICBpZih1YykKKyAgICAgIHJldHVybiAyOworICB9CisKKyAgdiA9IGN1cmxfcHVzaGhlYWRlcl9ieW5hbWUoaHAsICI6cGF0aCIpOworICBpZih2KSB7CisgICAgdWMgPSBjdXJsX3VybF9zZXQodSwgQ1VSTFVQQVJUX1BBVEgsIHYsIDApOworICAgIGlmKHVjKQorICAgICAgcmV0dXJuIDM7CisgIH0KKworICB1YyA9IGN1cmxfdXJsX2dldCh1LCBDVVJMVVBBUlRfVVJMLCAmdXJsLCAwKTsKKyAgaWYodWMpCisgICAgcmV0dXJuIDQ7CisgIGN1cmxfdXJsX2NsZWFudXAodSk7CisKKyAgaWYoZGF0YS0+Y2hhbmdlLnVybF9hbGxvYykKKyAgICBmcmVlKGRhdGEtPmNoYW5nZS51cmwpOworICBkYXRhLT5jaGFuZ2UudXJsX2FsbG9jID0gVFJVRTsKKyAgZGF0YS0+Y2hhbmdlLnVybCA9IHVybDsKKyAgcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgcHVzaF9wcm9taXNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCkBAIC01NTQsMTEgKzU0MCwxNSBAQAogICAgIHN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CiAgICAgaWYoIXN0cmVhbSkgewogICAgICAgZmFpbGYoZGF0YSwgIkludGVybmFsIE5VTEwgc3RyZWFtIVxuIik7Ci0gICAgICAodm9pZClDdXJsX2Nsb3NlKG5ld2hhbmRsZSk7CisgICAgICAodm9pZClDdXJsX2Nsb3NlKCZuZXdoYW5kbGUpOwogICAgICAgcnYgPSAxOwogICAgICAgZ290byBmYWlsOwogICAgIH0KIAorICAgIHJ2ID0gc2V0X3RyYW5zZmVyX3VybChuZXdoYW5kbGUsICZoZWFkcyk7CisgICAgaWYocnYpCisgICAgICBnb3RvIGZhaWw7CisKICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKICAgICBydiA9IGRhdGEtPm11bHRpLT5wdXNoX2NiKGRhdGEsIG5ld2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cHVzaF9oZWFkZXJzX3VzZWQsICZoZWFkcywKQEAgLTU3Niw3ICs1NjYsNyBAQAogICAgICAgLyogZGVuaWVkLCBraWxsIG9mZiB0aGUgbmV3IGhhbmRsZSBhZ2FpbiAqLwogICAgICAgaHR0cDJfc3RyZWFtX2ZyZWUobmV3aGFuZGxlLT5yZXEucHJvdG9wKTsKICAgICAgIG5ld2hhbmRsZS0+cmVxLnByb3RvcCA9IE5VTEw7Ci0gICAgICAodm9pZClDdXJsX2Nsb3NlKG5ld2hhbmRsZSk7CisgICAgICAodm9pZClDdXJsX2Nsb3NlKCZuZXdoYW5kbGUpOwogICAgICAgZ290byBmYWlsOwogICAgIH0KIApAQCAtNTkyLDcgKzU4Miw3IEBACiAgICAgICBpbmZvZihkYXRhLCAiZmFpbGVkIHRvIGFkZCBoYW5kbGUgdG8gbXVsdGlcbiIpOwogICAgICAgaHR0cDJfc3RyZWFtX2ZyZWUobmV3aGFuZGxlLT5yZXEucHJvdG9wKTsKICAgICAgIG5ld2hhbmRsZS0+cmVxLnByb3RvcCA9IE5VTEw7Ci0gICAgICBDdXJsX2Nsb3NlKG5ld2hhbmRsZSk7CisgICAgICBDdXJsX2Nsb3NlKCZuZXdoYW5kbGUpOwogICAgICAgcnYgPSAxOwogICAgICAgZ290byBmYWlsOwogICAgIH0KQEAgLTcxNCwxNSArNzA0LDE3IEBACiAgICAgICBzdHJlYW0tPnN0YXR1c19jb2RlID0gLTE7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCAiXHJcbiIsIDIpOworICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgIlxyXG4iKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKIAotICAgIGxlZnQgPSBzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLT5zaXplX3VzZWQgLSBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmOworICAgIGxlZnQgPSBDdXJsX2R5bl9sZW4oJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpIC0KKyAgICAgIHN0cmVhbS0+bnJlYWRfaGVhZGVyX3JlY3ZidWY7CiAgICAgbmNvcHkgPSBDVVJMTUlOKHN0cmVhbS0+bGVuLCBsZWZ0KTsKIAogICAgIG1lbWNweSgmc3RyZWFtLT5tZW1bc3RyZWFtLT5tZW1sZW5dLAotICAgICAgICAgICBzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLT5idWZmZXIgKyBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmLAorICAgICAgICAgICBDdXJsX2R5bl9wdHIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpICsKKyAgICAgICAgICAgc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZiwKICAgICAgICAgICAgbmNvcHkpOwogICAgIHN0cmVhbS0+bnJlYWRfaGVhZGVyX3JlY3ZidWYgKz0gbmNvcHk7CiAKQEAgLTg0Nyw3ICs4MzksNyBAQAogICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEgyQlVHRihpbmZvZihkYXRhX3MsICJvbl9zdHJlYW1fY2xvc2UoKSwgJXMgKGVyciAlZCksIHN0cmVhbSAldVxuIiwKLSAgICAgICAgICAgICAgICAgaHR0cDJfc3RyZXJyb3IoZXJyb3JfY29kZSksIGVycm9yX2NvZGUsIHN0cmVhbV9pZCkpOworICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKGVycm9yX2NvZGUpLCBlcnJvcl9jb2RlLCBzdHJlYW1faWQpKTsKICAgICBzdHJlYW0gPSBkYXRhX3MtPnJlcS5wcm90b3A7CiAgICAgaWYoIXN0cmVhbSkKICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwpAQCAtODU1LDYgKzg0Nyw3IEBACiAgICAgc3RyZWFtLT5jbG9zZWQgPSBUUlVFOwogICAgIGh0dHBjID0gJmNvbm4tPnByb3RvLmh0dHBjOwogICAgIGRyYWluX3RoaXMoZGF0YV9zLCBodHRwYyk7CisgICAgQ3VybF9leHBpcmUoZGF0YV9zLCAwLCBFWFBJUkVfUlVOX05PVyk7CiAgICAgaHR0cGMtPmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwogCiAgICAgLyogcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSBoYXNoIGFzIHRoZSBzdHJlYW0gaXMgbm93IGdvbmUgKi8KQEAgLTg5NywxMiArODkwLDYgQEAKICAgICByZXR1cm4gMDsKICAgfQogCi0gIGlmKCFzdHJlYW0tPnRyYWlsZXJfcmVjdmJ1ZikgewotICAgIHN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmID0gQ3VybF9hZGRfYnVmZmVyX2luaXQoKTsKLSAgICBpZighc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYpIHsKLSAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFOwotICAgIH0KLSAgfQogICByZXR1cm4gMDsKIH0KIApAQCAtOTc0LDcgKzk2MSw5IEBACiAgICAgICBpZighY2hlY2spCiAgICAgICAgIC8qIG5vIG1lbW9yeSAqLwogICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICAgIGlmKCFDdXJsX3N0cmNhc2Vjb21wYXJlKGNoZWNrLCAoY29uc3QgY2hhciAqKXZhbHVlKSkgeworICAgICAgaWYoIUN1cmxfc3RyY2FzZWNvbXBhcmUoY2hlY2ssIChjb25zdCBjaGFyICopdmFsdWUpICYmCisgICAgICAgICAoKGNvbm4tPnJlbW90ZV9wb3J0ICE9IGNvbm4tPmdpdmVuLT5kZWZwb3J0KSB8fAorICAgICAgICAgICFDdXJsX3N0cmNhc2Vjb21wYXJlKGNvbm4tPmhvc3QubmFtZSwgKGNvbnN0IGNoYXIgKil2YWx1ZSkpKSB7CiAgICAgICAgIC8qIFRoaXMgaXMgcHVzaCBpcyBub3QgZm9yIHRoZSBzYW1lIGF1dGhvcml0eSB0aGF0IHdhcyBhc2tlZCBmb3IgaW4KICAgICAgICAgICogdGhlIFVSTC4gUkZDIDc1NDAgc2VjdGlvbiA4LjIgc2F5czogIkEgY2xpZW50IE1VU1QgdHJlYXQgYQogICAgICAgICAgKiBQVVNIX1BST01JU0UgZm9yIHdoaWNoIHRoZSBzZXJ2ZXIgaXMgbm90IGF1dGhvcml0YXRpdmUgYXMgYSBzdHJlYW0KQEAgLTEwMTYsMjYgKzEwMDUsMTkgQEAKICAgfQogCiAgIGlmKHN0cmVhbS0+Ym9keXN0YXJ0ZWQpIHsKLSAgICAvKiBUaGlzIGlzIHRyYWlsZXIgZmllbGRzLiAqLwotICAgIC8qIDQgaXMgZm9yICI6ICIgYW5kICJcclxuIi4gKi8KLSAgICB1aW50MzJfdCBuID0gKHVpbnQzMl90KShuYW1lbGVuICsgdmFsdWVsZW4gKyA0KTsKLQorICAgIC8qIFRoaXMgaXMgYSB0cmFpbGVyICovCisgICAgc3RydWN0IGR5bmJ1ZiB0cmFpbDsKICAgICBIMkJVR0YoaW5mb2YoZGF0YV9zLCAiaDIgdHJhaWxlcjogJS4qczogJS4qc1xuIiwgbmFtZWxlbiwgbmFtZSwgdmFsdWVsZW4sCiAgICAgICAgICAgICAgICAgIHZhbHVlKSk7Ci0KLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCAmbiwgc2l6ZW9mKG4pKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCBuYW1lLCBuYW1lbGVuKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCAiOiAiLCAyKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCB2YWx1ZSwgdmFsdWVsZW4pOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwotICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYsICJcclxuXDAiLCAzKTsKKyAgICBDdXJsX2R5bl9pbml0KCZ0cmFpbCwgRFlOX0gyX1RSQUlMRVIpOworICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnRyYWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuKnM6ICUuKnNcclxuIiwgbmFtZWxlbiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlbGVuLCB2YWx1ZSk7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmdHJhaWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fbGVuKCZ0cmFpbCkpOworICAgIEN1cmxfZHluX2ZyZWUoJnRyYWlsKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKIApAQCAtMTA1MCwxNCArMTAzMiwxNCBAQAogICAgIHN0cmVhbS0+c3RhdHVzX2NvZGUgPSBkZWNvZGVfc3RhdHVzX2NvZGUodmFsdWUsIHZhbHVlbGVuKTsKICAgICBERUJVR0FTU0VSVChzdHJlYW0tPnN0YXR1c19jb2RlICE9IC0xKTsKIAotICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgIkhUVFAvMiAiLCA3KTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICJIVFRQLzIgIik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7Ci0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCB2YWx1ZSwgdmFsdWVsZW4pOworICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZG4oJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsIHZhbHVlLCB2YWx1ZWxlbik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CiAgICAgLyogdGhlIHNwYWNlIGNoYXJhY3RlciBhZnRlciB0aGUgc3RhdHVzIGNvZGUgaXMgbWFuZGF0b3J5ICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCAiIFxyXG4iLCAzKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICIgXHJcbiIpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwogICAgIC8qIGlmIHdlIHJlY2VpdmUgZGF0YSBmb3IgYW5vdGhlciBoYW5kbGUsIHdha2UgdGhhdCB1cCAqLwpAQCAtMTA3MiwxNiArMTA1NCwxNiBAQAogICAvKiBuZ2h0dHAyIGd1YXJhbnRlZXMgdGhhdCBuYW1lbGVuID4gMCwgYW5kIDpzdGF0dXMgd2FzIGFscmVhZHkKICAgICAgcmVjZWl2ZWQsIGFuZCB0aGlzIGlzIG5vdCBwc2V1ZG8taGVhZGVyIGZpZWxkIC4gKi8KICAgLyogY29udmVydCB0byBhIEhUVFAxLXN0eWxlIGhlYWRlciAqLwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsIG5hbWUsIG5hbWVsZW4pOworICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCBuYW1lLCBuYW1lbGVuKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICI6ICIsIDIpOworICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICI6ICIpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7Ci0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgdmFsdWUsIHZhbHVlbGVuKTsKKyAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgdmFsdWUsIHZhbHVlbGVuKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICJcclxuIiwgMik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgIlxyXG4iKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwogICAvKiBpZiB3ZSByZWNlaXZlIGRhdGEgZm9yIGFub3RoZXIgaGFuZGxlLCB3YWtlIHRoYXQgdXAgKi8KQEAgLTExNDQsOCArMTEyNiw3IEBACiAgIHJldHVybiBucmVhZDsKIH0KIAotI2lmIGRlZmluZWQoTkdIVFRQMl9IQVNfRVJST1JfQ0FMTEJBQ0spICYmICAgICAgXAotICAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCiBzdGF0aWMgaW50IGVycm9yX2NhbGxiYWNrKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLApAQCAtMTE2Miw5ICsxMTQzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYykKIHsKICAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYgPSBodHRwYy0+bG9jYWxfc2V0dGluZ3M7CisgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEpOwogCiAgIGl2WzBdLnNldHRpbmdzX2lkID0gTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOwotICBpdlswXS52YWx1ZSA9IDEwMDsKKyAgaXZbMF0udmFsdWUgPSBDdXJsX211bHRpX21heF9jb25jdXJyZW50X3N0cmVhbXMoY29ubi0+ZGF0YS0+bXVsdGkpOwogCiAgIGl2WzFdLnNldHRpbmdzX2lkID0gTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOwogICBpdlsxXS52YWx1ZSA9IEhUVFAyX0hVR0VfV0lORE9XX1NJWkU7CkBAIC0xMTc1LDMzICsxMTU3LDI2IEBACiAgIGh0dHBjLT5sb2NhbF9zZXR0aW5nc19udW0gPSAzOwogfQogCi12b2lkIEN1cmxfaHR0cDJfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJlbWF0dXJlKQordm9pZCBDdXJsX2h0dHAyX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpCiB7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgSFRUUCAqaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0gIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjID0gJmNvbm4tPnByb3RvLmh0dHBjOworICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYyA9ICZkYXRhLT5jb25uLT5wcm90by5odHRwYzsKIAogICAvKiB0aGVyZSBtaWdodCBiZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGRvbmUgYmVmb3JlIHRoaXMgZ290IHRoZSAnaDInIHBvaW50ZXIKICAgICAgc2V0dXAgKi8KLSAgaWYoaHR0cC0+aGVhZGVyX3JlY3ZidWYpIHsKLSAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmaHR0cC0+aGVhZGVyX3JlY3ZidWYpOwotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZodHRwLT50cmFpbGVyX3JlY3ZidWYpOwotICAgIGlmKGh0dHAtPnB1c2hfaGVhZGVycykgewotICAgICAgLyogaWYgdGhleSB3ZXJlbid0IHVzZWQgYW5kIHRoZW4gZnJlZWQgYmVmb3JlICovCi0gICAgICBmb3IoOyBodHRwLT5wdXNoX2hlYWRlcnNfdXNlZCA+IDA7IC0taHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQpIHsKLSAgICAgICAgZnJlZShodHRwLT5wdXNoX2hlYWRlcnNbaHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQgLSAxXSk7Ci0gICAgICB9Ci0gICAgICBmcmVlKGh0dHAtPnB1c2hfaGVhZGVycyk7Ci0gICAgICBodHRwLT5wdXNoX2hlYWRlcnMgPSBOVUxMOworICBDdXJsX2R5bl9mcmVlKCZodHRwLT5oZWFkZXJfcmVjdmJ1Zik7CisgIGlmKGh0dHAtPnB1c2hfaGVhZGVycykgeworICAgIC8qIGlmIHRoZXkgd2VyZW4ndCB1c2VkIGFuZCB0aGVuIGZyZWVkIGJlZm9yZSAqLworICAgIGZvcig7IGh0dHAtPnB1c2hfaGVhZGVyc191c2VkID4gMDsgLS1odHRwLT5wdXNoX2hlYWRlcnNfdXNlZCkgeworICAgICAgZnJlZShodHRwLT5wdXNoX2hlYWRlcnNbaHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQgLSAxXSk7CiAgICAgfQorICAgIGZyZWUoaHR0cC0+cHVzaF9oZWFkZXJzKTsKKyAgICBodHRwLT5wdXNoX2hlYWRlcnMgPSBOVUxMOwogICB9CiAKICAgaWYoIWh0dHBjLT5oMikgLyogbm90IEhUVFAvMiA/ICovCiAgICAgcmV0dXJuOwogCi0gIGlmKGRhdGEtPnN0YXRlLmRyYWluKQotICAgIGRyYWluZWRfdHJhbnNmZXIoZGF0YSwgaHR0cGMpOwotCiAgIGlmKHByZW1hdHVyZSkgewogICAgIC8qIFJTVF9TVFJFQU0gKi8KICAgICBpZighbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbShodHRwYy0+aDIsIE5HSFRUUDJfRkxBR19OT05FLApAQCAtMTIxMyw2ICsxMTg4LDEwIEBACiAgICAgICBodHRwYy0+cGF1c2Vfc3RyZWFtX2lkID0gMDsKICAgICB9CiAgIH0KKworICBpZihkYXRhLT5zdGF0ZS5kcmFpbikKKyAgICBkcmFpbmVkX3RyYW5zZmVyKGRhdGEsIGh0dHBjKTsKKwogICAvKiAtMSBtZWFucyB1bmFzc2lnbmVkIGFuZCAwIG1lYW5zIGNsZWFyZWQgKi8KICAgaWYoaHR0cC0+c3RyZWFtX2lkID4gMCkgewogICAgIGludCBydiA9IG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YShodHRwYy0+aDIsCkBAIC0xMjYzLDkgKzEyNDIsNyBAQAogICAgIC8qIG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrICovCiAgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrKGNhbGxiYWNrcywgb25faGVhZGVyKTsKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZXJyb3JfY2FsbGJhY2soY2FsbGJhY2tzLCBlcnJvcl9jYWxsYmFjayk7Ci0jZW5kaWYKIAogICAgIC8qIFRoZSBuZ2h0dHAyIHNlc3Npb24gaXMgbm90IHlldCBzZXR1cCwgZG8gaXQgKi8KICAgICByYyA9IG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KCZjb25uLT5wcm90by5odHRwYy5oMiwgY2FsbGJhY2tzLCBjb25uKTsKQEAgLTEyODMsNyArMTI2MCw3IEBACiAvKgogICogQXBwZW5kIGhlYWRlcnMgdG8gYXNrIGZvciBhIEhUVFAxLjEgdG8gSFRUUDIgdXBncmFkZS4KICAqLwotQ1VSTGNvZGUgQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUoQ3VybF9zZW5kX2J1ZmZlciAqcmVxLAorQ1VSTGNvZGUgQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUoc3RydWN0IGR5bmJ1ZiAqcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBDVVJMY29kZSByZXN1bHQ7CkBAIC0xMzAyLDcgKzEyNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwYy0+bG9jYWxfc2V0dGluZ3NfbnVtKTsKICAgaWYoIWJpbmxlbikgewogICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ2h0dHAyIHVuZXhwZWN0ZWRseSBmYWlsZWQgb24gcGFja19zZXR0aW5nc19wYXlsb2FkIik7Ci0gICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcSk7CisgICAgQ3VybF9keW5fZnJlZShyZXEpOwogICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKICAgfQogICBjb25uLT5wcm90by5odHRwYy5iaW5sZW4gPSBiaW5sZW47CkBAIC0xMzEwLDE1ICsxMjg3LDE1IEBACiAgIHJlc3VsdCA9IEN1cmxfYmFzZTY0dXJsX2VuY29kZShjb25uLT5kYXRhLCAoY29uc3QgY2hhciAqKWJpbnNldHRpbmdzLCBiaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmFzZTY0LCAmYmxlbik7CiAgIGlmKHJlc3VsdCkgewotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZyZXEpOworICAgIEN1cmxfZHluX2ZyZWUocmVxKTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uOiBVcGdyYWRlLCBIVFRQMi1TZXR0aW5nc1xyXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVwZ3JhZGU6ICVzXHJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFRUUDItU2V0dGluZ3M6ICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9DTEVBUlRFWFRfUFJPVE9fVkVSU0lPTl9JRCwgYmFzZTY0KTsKKyAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZihyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb246IFVwZ3JhZGUsIEhUVFAyLVNldHRpbmdzXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXBncmFkZTogJXNcclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJIVFRQMi1TZXR0aW5nczogJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0NMRUFSVEVYVF9QUk9UT19WRVJTSU9OX0lELCBiYXNlNjQpOwogICBmcmVlKGJhc2U2NCk7CiAKICAgay0+dXBncjEwMSA9IFVQR1IxMDFfUkVRVUVTVEVEOwpAQCAtMTQxMiwxMCArMTM4OSwxMSBAQAogCiAgICAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CiAKKyAgICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYyA9ICZjb25uLT5wcm90by5odHRwYzsKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKmgyID0gaHR0cGMtPmgyOworCiAgICAgaWYoc3RyZWFtLT51cGxvYWRfbGVmdCkgewogICAgICAgLyogSWYgdGhlIHN0cmVhbSBzdGlsbCB0aGlua3MgdGhlcmUncyBkYXRhIGxlZnQgdG8gdXBsb2FkLiAqLwotICAgICAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7Ci0gICAgICBuZ2h0dHAyX3Nlc3Npb24gKmgyID0gaHR0cGMtPmgyOwogCiAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gMDsgLyogRE9ORSEgKi8KIApAQCAtMTQyNSw2ICsxNDAzLDIzIEBACiAKICAgICAgICh2b2lkKWgyX3Byb2Nlc3NfcGVuZGluZ19pbnB1dChjb25uLCBodHRwYywgJnJlc3VsdCk7CiAgICAgfQorCisgICAgLyogSWYgbmdodHRwMiBzdGlsbCBoYXMgcGVuZGluZyBmcmFtZXMgdW5zZW50ICovCisgICAgaWYobmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoaDIpKSB7CisgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKKyAgICAgIGludCBydjsKKworICAgICAgSDJCVUdGKGluZm9mKGRhdGEsICJIVFRQLzIgc3RpbGwgd2FudHMgdG8gc2VuZCBkYXRhIChlYXN5ICVwKVxuIiwgZGF0YSkpOworCisgICAgICAvKiByZS1zZXQgS0VFUF9TRU5EIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgY2FsbGVkIGFnYWluICovCisgICAgICBrLT5rZWVwb24gfD0gS0VFUF9TRU5EOworCisgICAgICAvKiBhbmQgYXR0ZW1wdCB0byBzZW5kIHRoZSBwZW5kaW5nIGZyYW1lcyAqLworICAgICAgcnYgPSBoMl9zZXNzaW9uX3NlbmQoZGF0YSwgaDIpOworICAgICAgaWYocnYgIT0gMCkKKyAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CiAgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0MzMsOCArMTQyOCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBIVFRQICpzdHJlYW0sIENVUkxjb2RlICplcnIpCiB7Ci0gIGNoYXIgKnRyYWlsZXJfcG9zLCAqdHJhaWxlcl9lbmQ7Ci0gIENVUkxjb2RlIHJlc3VsdDsKICAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7CiAKICAgaWYoaHR0cGMtPnBhdXNlX3N0cmVhbV9pZCA9PSBzdHJlYW0tPnN0cmVhbV9pZCkgewpAQCAtMTQ2Myw3ICsxNDU2LDcgQEAKICAgfQogICBlbHNlIGlmKGh0dHBjLT5lcnJvcl9jb2RlICE9IE5HSFRUUDJfTk9fRVJST1IpIHsKICAgICBmYWlsZihkYXRhLCAiSFRUUC8yIHN0cmVhbSAlZCB3YXMgbm90IGNsb3NlZCBjbGVhbmx5OiAlcyAoZXJyICV1KSIsCi0gICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIGh0dHAyX3N0cmVycm9yKGh0dHBjLT5lcnJvcl9jb2RlKSwKKyAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgbmdodHRwMl9zdHJlcnJvcihodHRwYy0+ZXJyb3JfY29kZSksCiAgICAgICAgICAgaHR0cGMtPmVycm9yX2NvZGUpOwogICAgICplcnIgPSBDVVJMRV9IVFRQMl9TVFJFQU07CiAgICAgcmV0dXJuIC0xOwpAQCAtMTQ3NywyNSArMTQ3MCw2IEBACiAgICAgcmV0dXJuIC0xOwogICB9CiAKLSAgaWYoc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYgJiYgc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYtPmJ1ZmZlcikgewotICAgIHRyYWlsZXJfcG9zID0gc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYtPmJ1ZmZlcjsKLSAgICB0cmFpbGVyX2VuZCA9IHRyYWlsZXJfcG9zICsgc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYtPnNpemVfdXNlZDsKLQotICAgIGZvcig7IHRyYWlsZXJfcG9zIDwgdHJhaWxlcl9lbmQ7KSB7Ci0gICAgICB1aW50MzJfdCBuOwotICAgICAgbWVtY3B5KCZuLCB0cmFpbGVyX3Bvcywgc2l6ZW9mKG4pKTsKLSAgICAgIHRyYWlsZXJfcG9zICs9IHNpemVvZihuKTsKLQotICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0cmFpbGVyX3Bvcywgbik7Ci0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgKmVyciA9IHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotCi0gICAgICB0cmFpbGVyX3BvcyArPSBuICsgMTsKLSAgICB9Ci0gIH0KLQogICBzdHJlYW0tPmNsb3NlX2hhbmRsZWQgPSBUUlVFOwogCiAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdiByZXR1cm5zIDAsIGh0dHAyX2hhbmRsZV9zdHJlYW1fY2xvc2VcbiIpKTsKQEAgLTE1NDEsNiArMTUxNSw3IEBACiAKICAgICBIMkJVR0YoaW5mb2YoZGF0YSwgIlF1ZXVpbmcgUFJJT1JJVFkgb24gc3RyZWFtICV1IChlYXN5ICVwKVxuIiwKICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIGRhdGEpKTsKKyAgICBERUJVR0FTU0VSVChzdHJlYW0tPnN0cmVhbV9pZCAhPSAtMSk7CiAgICAgcnYgPSBuZ2h0dHAyX3N1Ym1pdF9wcmlvcml0eShoMiwgTkdIVFRQMl9GTEFHX05PTkUsIHN0cmVhbS0+c3RyZWFtX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaV9zcGVjKTsKICAgICBpZihydikKQEAgLTE1NjUsNiArMTU0MCwxMSBAQAogICBpZihzaG91bGRfY2xvc2Vfc2Vzc2lvbihodHRwYykpIHsKICAgICBIMkJVR0YoaW5mb2YoZGF0YSwKICAgICAgICAgICAgICAgICAgImh0dHAyX3JlY3Y6IG5vdGhpbmcgdG8gZG8gaW4gdGhpcyBzZXNzaW9uXG4iKSk7CisgICAgaWYoY29ubi0+Yml0cy5jbG9zZSkgeworICAgICAgLyogYWxyZWFkeSBtYXJrZWQgZm9yIGNsb3N1cmUsIHJldHVybiBPSyBhbmQgd2UncmUgZG9uZSAqLworICAgICAgKmVyciA9IENVUkxFX09LOworICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgICplcnIgPSBDVVJMRV9IVFRQMjsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTE1ODAsMTMgKzE1NjAsMTMgQEAKICAgICovCiAKICAgaWYoc3RyZWFtLT5ib2R5c3RhcnRlZCAmJgotICAgICBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmIDwgc3RyZWFtLT5oZWFkZXJfcmVjdmJ1Zi0+c2l6ZV91c2VkKSB7Ci0gICAgLyogSWYgdGhlcmUgaXMgYm9keSBkYXRhIHBlbmRpbmcgZm9yIHRoaXMgc3RyZWFtIHRvIHJldHVybiwgZG8gdGhhdCAqLworICAgICBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmIDwgQ3VybF9keW5fbGVuKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmKSkgeworICAgIC8qIElmIHRoZXJlIGlzIGhlYWRlciBkYXRhIHBlbmRpbmcgZm9yIHRoaXMgc3RyZWFtIHRvIHJldHVybiwgZG8gdGhhdCAqLwogICAgIHNpemVfdCBsZWZ0ID0KLSAgICAgIHN0cmVhbS0+aGVhZGVyX3JlY3ZidWYtPnNpemVfdXNlZCAtIHN0cmVhbS0+bnJlYWRfaGVhZGVyX3JlY3ZidWY7CisgICAgICBDdXJsX2R5bl9sZW4oJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpIC0gc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZjsKICAgICBzaXplX3QgbmNvcHkgPSBDVVJMTUlOKGxlbiwgbGVmdCk7Ci0gICAgbWVtY3B5KG1lbSwgc3RyZWFtLT5oZWFkZXJfcmVjdmJ1Zi0+YnVmZmVyICsgc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZiwKLSAgICAgICAgICAgbmNvcHkpOworICAgIG1lbWNweShtZW0sIEN1cmxfZHluX3B0cigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZikgKworICAgICAgICAgICBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmLCBuY29weSk7CiAgICAgc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZiArPSBuY29weTsKIAogICAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdjogR290ICVkIGJ5dGVzIGZyb20gaGVhZGVyX3JlY3ZidWZcbiIsCkBAIC0xNTk0LDggKzE1NzQsMTIgQEAKICAgICByZXR1cm4gbmNvcHk7CiAgIH0KIAotICBIMkJVR0YoaW5mb2YoZGF0YSwgImh0dHAyX3JlY3Y6IGVhc3kgJXAgKHN0cmVhbSAldSlcbiIsCi0gICAgICAgICAgICAgICBkYXRhLCBzdHJlYW0tPnN0cmVhbV9pZCkpOworICBIMkJVR0YoaW5mb2YoZGF0YSwgImh0dHAyX3JlY3Y6IGVhc3kgJXAgKHN0cmVhbSAldSkgd2luICV1LyV1XG4iLAorICAgICAgICAgICAgICAgZGF0YSwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgICAgICBuZ2h0dHAyX3Nlc3Npb25fZ2V0X2xvY2FsX3dpbmRvd19zaXplKGh0dHBjLT5oMiksCisgICAgICAgICAgICAgICBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9sb2NhbF93aW5kb3dfc2l6ZShodHRwYy0+aDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCkKKyAgICAgICAgICAgKSk7CiAKICAgaWYoKGRhdGEtPnN0YXRlLmRyYWluKSAmJiBzdHJlYW0tPm1lbWxlbikgewogICAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdjogRFJBSU4gJXp1IGJ5dGVzIHN0cmVhbSAldSEhICglcCA9PiAlcClcbiIsCkBAIC0xNjI2LDcgKzE2MTAsNiBAQAogICAgIHN0cmVhbS0+cGF1c2VkYXRhICs9IG5yZWFkOwogICAgIHN0cmVhbS0+cGF1c2VsZW4gLT0gbnJlYWQ7CiAKLSAgICBpbmZvZihkYXRhLCAiJXpkIGRhdGEgYnl0ZXMgd3JpdHRlblxuIiwgbnJlYWQpOwogICAgIGlmKHN0cmVhbS0+cGF1c2VsZW4gPT0gMCkgewogICAgICAgSDJCVUdGKGluZm9mKGRhdGEsICJVbnBhdXNlZCBieSBzdHJlYW0gJXVcbiIsIHN0cmVhbS0+c3RyZWFtX2lkKSk7CiAgICAgICBERUJVR0FTU0VSVChodHRwYy0+cGF1c2Vfc3RyZWFtX2lkID09IHN0cmVhbS0+c3RyZWFtX2lkKTsKQEAgLTE2NjAsNiArMTY0Myw5IEBACiAgICAgICAgc29ja2V0IGlzIG5vdCByZWFkLiAgQnV0IGl0IHNlZW1zIHRoYXQgdXN1YWxseSBzdHJlYW1zIGFyZQogICAgICAgIG5vdGlmaWVkIHdpdGggaXRzIGRyYWluIHByb3BlcnR5LCBhbmQgc29ja2V0IGlzIHJlYWQgYWdhaW4KICAgICAgICBxdWlja2x5LiAqLworICAgIGlmKHN0cmVhbS0+Y2xvc2VkKQorICAgICAgLyogY2xvc2VkIG92ZXJyaWRlcyBwYXVzZWQgKi8KKyAgICAgIHJldHVybiAwOwogICAgIEgyQlVHRihpbmZvZihkYXRhLCAic3RyZWFtICV4IGlzIHBhdXNlZCwgcGF1c2UgaWQ6ICV4XG4iLAogICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgaHR0cGMtPnBhdXNlX3N0cmVhbV9pZCkpOwogICAgICplcnIgPSBDVVJMRV9BR0FJTjsKQEAgLTE3NTQsMTQgKzE3NDAsMTQgQEAKICAgICBlbHNlIGlmKCFzdHJlYW0tPmNsb3NlZCkgewogICAgICAgZHJhaW5lZF90cmFuc2ZlcihkYXRhLCBodHRwYyk7CiAgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIHRoaXMgc3RyZWFtIGlzIGNsb3NlZCwgdHJpZ2dlciBhIGFub3RoZXIgcmVhZCBBU0FQIHRvIGRldGVjdCB0aGF0ICovCisgICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7CiAKICAgICByZXR1cm4gcmV0bGVuOwogICB9Ci0gIC8qIElmIHN0cmVhbSBpcyBjbG9zZWQsIHJldHVybiAwIHRvIHNpZ25hbCB0aGUgaHR0cCByb3V0aW5lIHRvIGNsb3NlCi0gICAgIHRoZSBjb25uZWN0aW9uICovCi0gIGlmKHN0cmVhbS0+Y2xvc2VkKSB7Ci0gICAgcmV0dXJuIGh0dHAyX2hhbmRsZV9zdHJlYW1fY2xvc2UoY29ubiwgZGF0YSwgc3RyZWFtLCBlcnIpOwotICB9CisgIGlmKHN0cmVhbS0+Y2xvc2VkKQorICAgIHJldHVybiAwOwogICAqZXJyID0gQ1VSTEVfQUdBSU47CiAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdiByZXR1cm5zIEFHQUlOIGZvciBzdHJlYW0gJXVcbiIsCiAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCkpOwpAQCAtMTc3Miw4ICsxNzU4LDkgQEAKICAgIGZpZWxkIGxpc3QuICovCiAjZGVmaW5lIEFVVEhPUklUWV9EU1RfSURYIDMKIAorLyogVVNIUlRfTUFYIGlzIDY1NTM1ID09IDB4ZmZmZiAqLwogI2RlZmluZSBIRUFERVJfT1ZFUkZMT1coeCkgXAotICAoeC5uYW1lbGVuID4gKHVpbnQxNl90KS0xIHx8IHgudmFsdWVsZW4gPiAodWludDE2X3QpLTEgLSB4Lm5hbWVsZW4pCisgICh4Lm5hbWVsZW4gPiAweGZmZmYgfHwgeC52YWx1ZWxlbiA+IDB4ZmZmZiAtIHgubmFtZWxlbikKIAogLyoKICAqIENoZWNrIGhlYWRlciBtZW1vcnkgZm9yIHRoZSB0b2tlbiAidHJhaWxlcnMiLgpAQCAtMTg4MCw3ICsxODY3LDExIEBACiAgICAgICAgYXJlIGdvaW5nIHRvIHNlbmQgb3Igc2VuZGluZyByZXF1ZXN0IGJvZHkgaW4gREFUQSBmcmFtZSAqLwogICAgIHN0cmVhbS0+dXBsb2FkX21lbSA9IG1lbTsKICAgICBzdHJlYW0tPnVwbG9hZF9sZW4gPSBsZW47Ci0gICAgbmdodHRwMl9zZXNzaW9uX3Jlc3VtZV9kYXRhKGgyLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoaDIsIHN0cmVhbS0+c3RyZWFtX2lkKTsKKyAgICBpZihuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgKmVyciA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIHJ2ID0gaDJfc2Vzc2lvbl9zZW5kKGNvbm4tPmRhdGEsIGgyKTsKICAgICBpZihuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgewogICAgICAgKmVyciA9IENVUkxFX1NFTkRfRVJST1I7CkBAIC0yMDE5LDggKzIwMTAsMTAgQEAKICAgICAgIG52YVtpXS5uYW1lbGVuID0gc3RybGVuKChjaGFyICopbnZhW2ldLm5hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKICAgICAgIG52YVtpXS5uYW1lbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICAgICAgLyogTG93ZXIgY2FzZSB0aGUgaGVhZGVyIG5hbWUgZm9yIEhUVFAvMiAqLworICAgICAgQ3VybF9zdHJudG9sb3dlcigoY2hhciAqKWhkYnVmLCBoZGJ1ZiwgbnZhW2ldLm5hbWVsZW4pOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOwogICAgIH0KICAgICBoZGJ1ZiA9IGVuZCArIDE7CiAgICAgd2hpbGUoKmhkYnVmID09ICcgJyB8fCAqaGRidWYgPT0gJ1x0JykKQEAgLTIwODIsNyArMjA3NSw3IEBACiAKICAgaDJfcHJpX3NwZWMoY29ubi0+ZGF0YSwgJnByaV9zcGVjKTsKIAotICBzd2l0Y2goY29ubi0+ZGF0YS0+c2V0Lmh0dHByZXEpIHsKKyAgc3dpdGNoKGNvbm4tPmRhdGEtPnN0YXRlLmh0dHByZXEpIHsKICAgY2FzZSBIVFRQUkVRX1BPU1Q6CiAgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CiAgIGNhc2UgSFRUUFJFUV9QT1NUX01JTUU6CkBAIC0yMTMwLDE3ICsyMTIzLDE0IEBACiAgICAgcmV0dXJuIC0xOwogICB9CiAKLSAgaWYoc3RyZWFtLT5zdHJlYW1faWQgIT0gLTEpIHsKLSAgICAvKiBJZiB3aG9sZSBIRUFERVJTIGZyYW1lIHdhcyBzZW50IG9mZiB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQsCi0gICAgICAgdGhlIG5naHR0cDIgbGlicmFyeSBjYWxscyBkYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrLiBCdXQgb25seQotICAgICAgIGl0IGZvdW5kIHRoYXQgbm8gZGF0YSBhdmFpbGFibGUsIHNvIGl0IGRlZmVycmVkIHRoZSBEQVRBCi0gICAgICAgdHJhbnNtaXNzaW9uLiBXaGljaCBtZWFucyB0aGF0IG5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKCkKLSAgICAgICByZXR1cm5zIDAgb24gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKCksIHdoaWNoIHJlc3VsdHMgdGhhdCBubwotICAgICAgIHdyaXRhYmxlIHNvY2tldCBjaGVjayBpcyBwZXJmb3JtZWQuIFRvIHdvcmthcm91bmQgdGhpcywgd2UKLSAgICAgICBpc3N1ZSBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoKSBoZXJlIHRvIGJyaW5nIGJhY2sgREFUQQotICAgICAgIHRyYW5zbWlzc2lvbiBmcm9tIGRlZmVycmVkIHN0YXRlLiAqLwotICAgIG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YShoMiwgc3RyZWFtLT5zdHJlYW1faWQpOwotICB9CisgIC8qIElmIHdob2xlIEhFQURFUlMgZnJhbWUgd2FzIHNlbnQgb2ZmIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCwgdGhlIG5naHR0cDIKKyAgICAgbGlicmFyeSBjYWxscyBkYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrLiBCdXQgb25seSBpdCBmb3VuZCB0aGF0IG5vIGRhdGEKKyAgICAgYXZhaWxhYmxlLCBzbyBpdCBkZWZlcnJlZCB0aGUgREFUQSB0cmFuc21pc3Npb24uIFdoaWNoIG1lYW5zIHRoYXQKKyAgICAgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoKSByZXR1cm5zIDAgb24gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKCksIHdoaWNoCisgICAgIHJlc3VsdHMgdGhhdCBubyB3cml0YWJsZSBzb2NrZXQgY2hlY2sgaXMgcGVyZm9ybWVkLiBUbyB3b3JrYXJvdW5kIHRoaXMsCisgICAgIHdlIGlzc3VlIG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YSgpIGhlcmUgdG8gYnJpbmcgYmFjayBEQVRBCisgICAgIHRyYW5zbWlzc2lvbiBmcm9tIGRlZmVycmVkIHN0YXRlLiAqLworICBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoaDIsIHN0cmVhbS0+c3RyZWFtX2lkKTsKIAogICByZXR1cm4gbGVuOwogCkBAIC0yMTU2LDEzICsyMTQ2LDExIEBACiAgIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjID0gJmNvbm4tPnByb3RvLmh0dHBjOwogICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKIAorICBERUJVR0FTU0VSVChjb25uLT5kYXRhLT5zdGF0ZS5idWZmZXIpOworCiAgIHN0cmVhbS0+c3RyZWFtX2lkID0gLTE7CiAKLSAgaWYoIXN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpIHsKLSAgICBzdHJlYW0tPmhlYWRlcl9yZWN2YnVmID0gQ3VybF9hZGRfYnVmZmVyX2luaXQoKTsKLSAgICBpZighc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZikKLSAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9CisgIEN1cmxfZHluX2luaXQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsIERZTl9IMl9IRUFERVJTKTsKIAogICBpZigoY29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAyX3NzbCkgfHwKICAgICAgKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9odHRwMikpCkBAIC0yMTc1LDcgKzIxNjMsNyBAQAogCiAgIHJlc3VsdCA9IGh0dHAyX2luaXQoY29ubik7CiAgIGlmKHJlc3VsdCkgewotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmKTsKKyAgICBDdXJsX2R5bl9mcmVlKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmKTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKQEAgLTIxODMsNiArMjE3MSw4IEBACiAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSAwOwogICBzdHJlYW0tPnVwbG9hZF9tZW0gPSBOVUxMOwogICBzdHJlYW0tPnVwbG9hZF9sZW4gPSAwOworICBzdHJlYW0tPm1lbSA9IGNvbm4tPmRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgc3RyZWFtLT5sZW4gPSBjb25uLT5kYXRhLT5zZXQuYnVmZmVyX3NpemU7CiAKICAgaHR0cGMtPmluYnVmbGVuID0gMDsKICAgaHR0cGMtPm5yZWFkX2luYnVmID0gMDsKQEAgLTIyNTUsNyArMjI0NSw2IEBACiAgICAgfQogICB9CiAKLSNpZmRlZiBOR0hUVFAyX0hBU19TRVRfTE9DQUxfV0lORE9XX1NJWkUKICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fc2V0X2xvY2FsX3dpbmRvd19zaXplKGh0dHBjLT5oMiwgTkdIVFRQMl9GTEFHX05PTkUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQMl9IVUdFX1dJTkRPV19TSVpFKTsKICAgaWYocnYgIT0gMCkgewpAQCAtMjI2Myw3ICsyMjUyLDYgQEAKICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKHJ2KSwgcnYpOwogICAgIHJldHVybiBDVVJMRV9IVFRQMjsKICAgfQotI2VuZGlmCiAKICAgLyogd2UgYXJlIGdvaW5nIHRvIGNvcHkgbWVtIHRvIGh0dHBjLT5pbmJ1Zi4gIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UKICAgICAgbWVtIGlzIHBhcnQgb2YgYnVmZmVyIHBvaW50ZWQgYnkgc3RyZWFtLT5tZW0sIGFuZCBjYWxsYmFja3MKQEAgLTIzMjEsNiArMjMwOSw1MSBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK0NVUkxjb2RlIEN1cmxfaHR0cDJfc3RyZWFtX3BhdXNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgcGF1c2UpCit7CisgIERFQlVHQVNTRVJUKGRhdGEpOworICBERUJVR0FTU0VSVChkYXRhLT5jb25uKTsKKyAgLyogaWYgaXQgaXNuJ3QgSFRUUC8yLCB3ZSdyZSBkb25lICovCisgIGlmKCFkYXRhLT5jb25uLT5wcm90by5odHRwYy5oMikKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisjaWZkZWYgTkdIVFRQMl9IQVNfU0VUX0xPQ0FMX1dJTkRPV19TSVpFCisgIGVsc2UgeworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICAgIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjID0gJmRhdGEtPmNvbm4tPnByb3RvLmh0dHBjOworICAgIHVpbnQzMl90IHdpbmRvdyA9ICFwYXVzZSAqIEhUVFAyX0hVR0VfV0lORE9XX1NJWkU7CisgICAgaW50IHJ2ID0gbmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZShodHRwYy0+aDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMQUdfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93KTsKKyAgICBpZihydikgeworICAgICAgZmFpbGYoZGF0YSwgIm5naHR0cDJfc2Vzc2lvbl9zZXRfbG9jYWxfd2luZG93X3NpemUoKSBmYWlsZWQ6ICVzKCVkKSIsCisgICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKHJ2KSwgcnYpOworICAgICAgcmV0dXJuIENVUkxFX0hUVFAyOworICAgIH0KKworICAgIC8qIG1ha2Ugc3VyZSB0aGUgd2luZG93IHVwZGF0ZSBnZXRzIHNlbnQgKi8KKyAgICBydiA9IGgyX3Nlc3Npb25fc2VuZChkYXRhLCBodHRwYy0+aDIpOworICAgIGlmKHJ2KQorICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNldCBIVFRQLzIgd2luZG93IHNpemUgdG8gJXUgZm9yIHN0cmVhbSAldVxuIiwKKyAgICAgICAgICAgICAgICAgd2luZG93LCBzdHJlYW0tPnN0cmVhbV9pZCkpOworCisjaWZkZWYgREVCVUdCVUlMRAorICAgIHsKKyAgICAgIC8qIHJlYWQgb3V0IHRoZSBzdHJlYW0gbG9jYWwgd2luZG93IGFnYWluICovCisgICAgICB1aW50MzJfdCB3aW5kb3cyID0KKyAgICAgICAgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fbG9jYWxfd2luZG93X3NpemUoaHR0cGMtPmgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkhUVFAvMiB3aW5kb3cgc2l6ZSBpcyBub3cgJXUgZm9yIHN0cmVhbSAldVxuIiwKKyAgICAgICAgICAgICAgICAgICB3aW5kb3cyLCBzdHJlYW0tPnN0cmVhbV9pZCkpOworICAgIH0KKyNlbmRpZgorICB9CisjZW5kaWYKKyAgcmV0dXJuIENVUkxFX09LOworfQorCiBDVVJMY29kZSBDdXJsX2h0dHAyX2FkZF9jaGlsZChzdHJ1Y3QgQ3VybF9lYXN5ICpwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpjaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVzaXZlKQpAQCAtMjQxNCw4ICsyNDQ3LDYgQEAKICNlbHNlIC8qICFVU0VfTkdIVFRQMiAqLwogCiAvKiBTYXRpc2Z5IGV4dGVybmFsIHJlZmVyZW5jZXMgZXZlbiBpZiBodHRwMiBpcyBub3QgY29tcGlsZWQgaW4uICovCi0KLSNkZWZpbmUgQ1VSTF9ESVNBQkxFX1RZUEVDSEVDSwogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogCiBjaGFyICpjdXJsX3B1c2hoZWFkZXJfYnludW0oc3RydWN0IGN1cmxfcHVzaGhlYWRlcnMgKmgsIHNpemVfdCBudW0pCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuaAppbmRleCBkYjYyMTdiLi5lODJiMjEyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAyLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQyLDE2ICs0MiwxNSBAQAogQ1VSTGNvZGUgQ3VybF9odHRwMl9pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiB2b2lkIEN1cmxfaHR0cDJfaW5pdF9zdGF0ZShzdHJ1Y3QgVXJsU3RhdGUgKnN0YXRlKTsKIHZvaWQgQ3VybF9odHRwMl9pbml0X3VzZXJzZXQoc3RydWN0IFVzZXJEZWZpbmVkICpzZXQpOwotQ1VSTGNvZGUgQ3VybF9odHRwMl9zZW5kX3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLUNVUkxjb2RlIEN1cmxfaHR0cDJfcmVxdWVzdF91cGdyYWRlKEN1cmxfc2VuZF9idWZmZXIgKnJlcSwKK0NVUkxjb2RlIEN1cmxfaHR0cDJfcmVxdWVzdF91cGdyYWRlKHN0cnVjdCBkeW5idWYgKnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBDVVJMY29kZSBDdXJsX2h0dHAyX3NldHVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBDVVJMY29kZSBDdXJsX2h0dHAyX3N3aXRjaGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IG5yZWFkKTsKLS8qIGNhbGxlZCBmcm9tIEN1cmxfaHR0cF9zZXR1cF9jb25uICovCisvKiBjYWxsZWQgZnJvbSBodHRwX3NldHVwX2Nvbm4gKi8KIHZvaWQgQ3VybF9odHRwMl9zZXR1cF9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiB2b2lkIEN1cmxfaHR0cDJfc2V0dXBfcmVxKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotdm9pZCBDdXJsX2h0dHAyX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIHByZW1hdHVyZSk7Cit2b2lkIEN1cmxfaHR0cDJfZG9uZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBib29sIHByZW1hdHVyZSk7CiBDVVJMY29kZSBDdXJsX2h0dHAyX2RvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogQ1VSTGNvZGUgQ3VybF9odHRwMl9hZGRfY2hpbGQoc3RydWN0IEN1cmxfZWFzeSAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqY2hpbGQsCkBAIC01OSwxMSArNTgsMTEgQEAKIHZvaWQgQ3VybF9odHRwMl9yZW1vdmVfY2hpbGQoc3RydWN0IEN1cmxfZWFzeSAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpjaGlsZCk7CiB2b2lkIEN1cmxfaHR0cDJfY2xlYW51cF9kZXBlbmRlbmNpZXMoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CitDVVJMY29kZSBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBib29sIHBhdXNlKTsKIAogLyogcmV0dXJucyB0cnVlIGlmIHRoZSBIVFRQLzIgc3RyZWFtIGVycm9yIHdhcyBIVFRQXzFfMV9SRVFVSVJFRCAqLwogYm9vbCBDdXJsX2gyX2h0dHBfMV8xX2Vycm9yKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAjZWxzZSAvKiBVU0VfTkdIVFRQMiAqLwotI2RlZmluZSBDdXJsX2h0dHAyX3NlbmRfcmVxdWVzdCh4KSBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTAogI2RlZmluZSBDdXJsX2h0dHAyX3JlcXVlc3RfdXBncmFkZSh4LHkpIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MCiAjZGVmaW5lIEN1cmxfaHR0cDJfc2V0dXAoeCkgQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0wKICNkZWZpbmUgQ3VybF9odHRwMl9zd2l0Y2hlZCh4LHkseikgQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0wKQEAgLTc2LDYgKzc1LDcgQEAKICNkZWZpbmUgQ3VybF9odHRwMl9hZGRfY2hpbGQoeCwgeSwgeikKICNkZWZpbmUgQ3VybF9odHRwMl9yZW1vdmVfY2hpbGQoeCwgeSkKICNkZWZpbmUgQ3VybF9odHRwMl9jbGVhbnVwX2RlcGVuZGVuY2llcyh4KQorI2RlZmluZSBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZSh4LCB5KQogI2RlZmluZSBDdXJsX2gyX2h0dHBfMV8xX2Vycm9yKHgpIDAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9jaHVua3MuYwppbmRleCAxOGRmY2IyLi43NjdmODA2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfY2h1bmtzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgInVybGRhdGEuaCIgLyogaXQgaW5jbHVkZXMgaHR0cF9jaHVua3MuaCAqLwogI2luY2x1ZGUgInNlbmRmLmgiICAgLyogZm9yIHRoZSBjbGllbnQgd3JpdGUgc3R1ZmYgKi8KLQorI2luY2x1ZGUgImR5bmJ1Zi5oIgogI2luY2x1ZGUgImNvbnRlbnRfZW5jb2RpbmcuaCIKICNpbmNsdWRlICJodHRwLmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiIC8qIGZvciBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayBwcm90b3R5cGUgKi8KQEAgLTkzLDYgKzkzLDcgQEAKICAgY2h1bmstPmhleGluZGV4ID0gMDsgICAgICAvKiBzdGFydCBhdCAwICovCiAgIGNodW5rLT5kYXRhbGVmdCA9IDA7ICAgICAgLyogbm8gZGF0YSBsZWZ0IHlldCEgKi8KICAgY2h1bmstPnN0YXRlID0gQ0hVTktfSEVYOyAvKiB3ZSBnZXQgaGV4IGZpcnN0ISAqLworICBDdXJsX2R5bl9pbml0KCZjb25uLT50cmFpbGVyLCBEWU5fSDFfVFJBSUxFUik7CiB9CiAKIC8qCkBAIC0xMDksNyArMTEwLDggQEAKIENIVU5LY29kZSBDdXJsX2h0dHBjaHVua19yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JvdGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JvdGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmV4dHJhcCkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwpAQCAtMTI1LDggKzEyNywxMCBAQAogICAgICBjaHVuayByZWFkIHByb2Nlc3MsIHRvIHByb3Blcmx5IGNhbGN1bGF0ZSB0aGUgY29udGVudCBsZW5ndGgqLwogICBpZihkYXRhLT5zZXQuaHR0cF90ZV9za2lwICYmICFrLT5pZ25vcmVib2R5KSB7CiAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgZGF0YXAsIGRhdGFsZW4pOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisgICAgaWYocmVzdWx0KSB7CisgICAgICAqZXh0cmFwID0gcmVzdWx0OworICAgICAgcmV0dXJuIENIVU5LRV9QQVNTVEhSVV9FUlJPUjsKKyAgICB9CiAgIH0KIAogICB3aGlsZShsZW5ndGgpIHsKQEAgLTE3NCw3ICsxNzgsNiBAQAogICAgICAgICAvKiB3ZSdyZSBub3cgZXhwZWN0aW5nIGRhdGEgdG8gY29tZSwgdW5sZXNzIHNpemUgd2FzIHplcm8hICovCiAgICAgICAgIGlmKDAgPT0gY2gtPmRhdGFzaXplKSB7CiAgICAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfVFJBSUxFUjsgLyogbm93IGNoZWNrIGZvciB0cmFpbGVycyAqLwotICAgICAgICAgIGNvbm4tPnRybFBvcyA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX0RBVEE7CkBAIC0xOTcsOCArMjAwLDEwIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCBkYXRhcCwgcGllY2UpOwogCi0gICAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgICByZXR1cm4gQ0hVTktFX1dSSVRFX0VSUk9SOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAqZXh0cmFwID0gcmVzdWx0OworICAgICAgICAgIHJldHVybiBDSFVOS0VfUEFTU1RIUlVfRVJST1I7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgKndyb3RlICs9IHBpZWNlOwpAQCAtMjI0LDMwICsyMjksMzMgQEAKIAogICAgIGNhc2UgQ0hVTktfVFJBSUxFUjoKICAgICAgIGlmKCgqZGF0YXAgPT0gMHgwZCkgfHwgKCpkYXRhcCA9PSAweDBhKSkgeworICAgICAgICBjaGFyICp0ciA9IEN1cmxfZHluX3B0cigmY29ubi0+dHJhaWxlcik7CiAgICAgICAgIC8qIHRoaXMgaXMgdGhlIGVuZCBvZiBhIHRyYWlsZXIsIGJ1dCBpZiB0aGUgdHJhaWxlciB3YXMgemVybyBieXRlcwogICAgICAgICAgICB0aGVyZSB3YXMgbm8gdHJhaWxlciBhbmQgd2UgbW92ZSBvbiAqLwogCi0gICAgICAgIGlmKGNvbm4tPnRybFBvcykgewotICAgICAgICAgIC8qIHdlIGFsbG9jYXRlIHRyYWlsZXIgd2l0aCAzIGJ5dGVzIGV4dHJhIHJvb20gdG8gZml0IHRoaXMgKi8KLSAgICAgICAgICBjb25uLT50cmFpbGVyW2Nvbm4tPnRybFBvcysrXSA9IDB4MGQ7Ci0gICAgICAgICAgY29ubi0+dHJhaWxlcltjb25uLT50cmxQb3MrK10gPSAweDBhOwotICAgICAgICAgIGNvbm4tPnRyYWlsZXJbY29ubi0+dHJsUG9zXSA9IDA7CisgICAgICAgIGlmKHRyKSB7CisgICAgICAgICAgc2l6ZV90IHRybGVuOworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmY29ubi0+dHJhaWxlciwgKGNoYXIgKikiXHgwZFx4MGEiKTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gQ0hVTktFX09VVF9PRl9NRU1PUlk7CiAKKyAgICAgICAgICB0ciA9IEN1cmxfZHluX3B0cigmY29ubi0+dHJhaWxlcik7CisgICAgICAgICAgdHJsZW4gPSBDdXJsX2R5bl9sZW4oJmNvbm4tPnRyYWlsZXIpOwogICAgICAgICAgIC8qIENvbnZlcnQgdG8gaG9zdCBlbmNvZGluZyBiZWZvcmUgY2FsbGluZyBDdXJsX2NsaWVudF93cml0ZSAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoY29ubi0+ZGF0YSwgY29ubi0+dHJhaWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnRybFBvcyk7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhjb25uLT5kYXRhLCB0ciwgdHJsZW4pOwogICAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAgIC8qIEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCiAgICAgICAgICAgICAvKiBUcmVhdCBpdCBhcyBhIGJhZCBjaHVuayAqLwogICAgICAgICAgICAgcmV0dXJuIENIVU5LRV9CQURfQ0hVTks7CiAKICAgICAgICAgICBpZighZGF0YS0+c2V0Lmh0dHBfdGVfc2tpcCkgewotICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dHJhaWxlciwgY29ubi0+dHJsUG9zKTsKLSAgICAgICAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgICAgICAgcmV0dXJuIENIVU5LRV9XUklURV9FUlJPUjsKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdHIsIHRybGVuKTsKKyAgICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgICAqZXh0cmFwID0gcmVzdWx0OworICAgICAgICAgICAgICByZXR1cm4gQ0hVTktFX1BBU1NUSFJVX0VSUk9SOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgICBjb25uLT50cmxQb3MgPSAwOworICAgICAgICAgIEN1cmxfZHluX3Jlc2V0KCZjb25uLT50cmFpbGVyKTsKICAgICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSX0NSOwogICAgICAgICAgIGlmKCpkYXRhcCA9PSAweDBhKQogICAgICAgICAgICAgLyogYWxyZWFkeSBvbiB0aGUgTEYgKi8KQEAgLTI2MCwyNSArMjY4LDkgQEAKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIGNvbm4tPnRyYWlsZXIgaXMgYXNzdW1lZCB0byBiZSBmcmVlZCBpbiB1cmwuYyBvbiBhCi0gICAgICAgICAgIGNvbm5lY3Rpb24gYmFzaXMgKi8KLSAgICAgICAgaWYoY29ubi0+dHJsUG9zID49IGNvbm4tPnRybE1heCkgewotICAgICAgICAgIC8qIHdlIGFsd2F5cyBhbGxvY2F0ZSB0aHJlZSBleHRyYSBieXRlcywganVzdCBiZWNhdXNlIHdoZW4gdGhlIGZ1bGwKLSAgICAgICAgICAgICBoZWFkZXIgaGFzIGJlZW4gcmVjZWl2ZWQgd2UgYXBwZW5kIENSTEZcMCAqLwotICAgICAgICAgIGNoYXIgKnB0cjsKLSAgICAgICAgICBpZihjb25uLT50cmxNYXgpIHsKLSAgICAgICAgICAgIGNvbm4tPnRybE1heCAqPSAyOwotICAgICAgICAgICAgcHRyID0gcmVhbGxvYyhjb25uLT50cmFpbGVyLCBjb25uLT50cmxNYXggKyAzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb25uLT50cmxNYXggPSAxMjg7Ci0gICAgICAgICAgICBwdHIgPSBtYWxsb2MoY29ubi0+dHJsTWF4ICsgMyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKCFwdHIpCi0gICAgICAgICAgICByZXR1cm4gQ0hVTktFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgY29ubi0+dHJhaWxlciA9IHB0cjsKLSAgICAgICAgfQotICAgICAgICBjb25uLT50cmFpbGVyW2Nvbm4tPnRybFBvcysrXT0qZGF0YXA7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZG4oJmNvbm4tPnRyYWlsZXIsIGRhdGFwLCAxKTsKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIHJldHVybiBDSFVOS0VfT1VUX09GX01FTU9SWTsKICAgICAgIH0KICAgICAgIGRhdGFwKys7CiAgICAgICBsZW5ndGgtLTsKQEAgLTMzOSw4ICszMzEsOSBAQAogICAgIHJldHVybiAiSWxsZWdhbCBvciBtaXNzaW5nIGhleGFkZWNpbWFsIHNlcXVlbmNlIjsKICAgY2FzZSBDSFVOS0VfQkFEX0NIVU5LOgogICAgIHJldHVybiAiTWFsZm9ybWVkIGVuY29kaW5nIGZvdW5kIjsKLSAgY2FzZSBDSFVOS0VfV1JJVEVfRVJST1I6Ci0gICAgcmV0dXJuICJXcml0ZSBlcnJvciI7CisgIGNhc2UgQ0hVTktFX1BBU1NUSFJVX0VSUk9SOgorICAgIERFQlVHQVNTRVJUKDApOyAvKiBuZXZlciB1c2VkICovCisgICAgcmV0dXJuICIiOwogICBjYXNlIENIVU5LRV9CQURfRU5DT0RJTkc6CiAgICAgcmV0dXJuICJCYWQgY29udGVudC1lbmNvZGluZyBmb3VuZCI7CiAgIGNhc2UgQ0hVTktFX09VVF9PRl9NRU1PUlk6CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9jaHVua3MuaAppbmRleCBiOTY5YzU1Li44ZjRhMzNjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfY2h1bmtzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIxLDYgKzIxLDkgQEAKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGNvbm5lY3RkYXRhOworCiAvKgogICogVGhlIGxvbmdlc3QgcG9zc2libGUgaGV4YWRlY2ltYWwgbnVtYmVyIHdlIHN1cHBvcnQgaW4gYSBjaHVua2VkIHRyYW5zZmVyLgogICogV2VpcmQgZW5vdWdoLCBSRkMyNjE2IGRvZXNuJ3Qgc2V0IGEgbWF4aW11bSBzaXplISBTaW5jZSB3ZSB1c2Ugc3RydG91bCgpCkBAIC03MSw5ICs3NCw5IEBACiAgIENIVU5LRV9UT09fTE9OR19IRVggPSAxLAogICBDSFVOS0VfSUxMRUdBTF9IRVgsCiAgIENIVU5LRV9CQURfQ0hVTkssCi0gIENIVU5LRV9XUklURV9FUlJPUiwKICAgQ0hVTktFX0JBRF9FTkNPRElORywKICAgQ0hVTktFX09VVF9PRl9NRU1PUlksCisgIENIVU5LRV9QQVNTVEhSVV9FUlJPUiwgLyogQ3VybF9odHRwY2h1bmtfcmVhZCgpIHJldHVybnMgYSBDVVJMY29kZSB0byB1c2UgKi8KICAgQ0hVTktFX0xBU1QKIH0gQ0hVTktjb2RlOwogCkBAIC04Nyw0ICs5MCwxMCBAQAogICBzaXplX3QgZGF0YWxlZnQ7IC8qIHVudG91Y2hlZCBkYXRhIGFtb3VudCBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGJ1ZmZlciAqLwogfTsKIAorLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gaHR0cF9jaHVua3MuYyAqLwordm9pZCBDdXJsX2h0dHBjaHVua19pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitDSFVOS2NvZGUgQ3VybF9odHRwY2h1bmtfcmVhZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmRhdGFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBsZW5ndGgsIHNzaXplX3QgKndyb3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKnBhc3N0aHJ1KTsKKwogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfQ0hVTktTX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfZGlnZXN0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2RpZ2VzdC5jCmluZGV4IDk2MTZjMzAuLmIwNmRjMGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfZGlnZXN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9kaWdlc3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtOTQsMTUgKzk0LDE5IEBACiAgIHN0cnVjdCBhdXRoICphdXRocDsKIAogICBpZihwcm94eSkgeworI2lmZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZWxzZQogICAgIGRpZ2VzdCA9ICZkYXRhLT5zdGF0ZS5wcm94eWRpZ2VzdDsKLSAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOworICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKICAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKICAgICBwYXNzd2RwID0gY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CiAgICAgYXV0aHAgPSAmZGF0YS0+c3RhdGUuYXV0aHByb3h5OworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgZGlnZXN0ID0gJmRhdGEtPnN0YXRlLmRpZ2VzdDsKLSAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgICBhbGxvY3VzZXJwd2QgPSAmZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOwogICAgIHVzZXJwID0gY29ubi0+dXNlcjsKICAgICBwYXNzd2RwID0gY29ubi0+cGFzc3dkOwogICAgIGF1dGhwID0gJmRhdGEtPnN0YXRlLmF1dGhob3N0OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9kaWdlc3QuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfZGlnZXN0LmgKaW5kZXggNzM0MTBhZS4uOTZlMzlhNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9kaWdlc3QuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2RpZ2VzdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9uZWdvdGlhdGUuYwppbmRleCBjOGY0MDY0Li4wYTE5ZWMyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfbmVnb3RpYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTUyLDYgKzUyLDcgQEAKICAgY3VybG5lZ290aWF0ZSBzdGF0ZTsKIAogICBpZihwcm94eSkgeworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKICAgICBwYXNzd2RwID0gY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CiAgICAgc2VydmljZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZX1NFUlZJQ0VfTkFNRV0gPwpAQCAtNTksNiArNjAsOSBAQAogICAgIGhvc3QgPSBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZTsKICAgICBuZWdfY3R4ID0gJmNvbm4tPnByb3h5bmVnOwogICAgIHN0YXRlID0gY29ubi0+cHJveHlfbmVnb3RpYXRlX3N0YXRlOworI2Vsc2UKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgdXNlcnAgPSBjb25uLT51c2VyOwpAQCAtMTE5LDcgKzEyMyw4IEBACiAgIHN0cnVjdCBhdXRoICphdXRocCA9IHByb3h5ID8gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eSA6CiAgICAgJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhob3N0OwogICBjdXJsbmVnb3RpYXRlICpzdGF0ZSA9IHByb3h5ID8gJmNvbm4tPnByb3h5X25lZ290aWF0ZV9zdGF0ZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+aHR0cF9uZWdvdGlhdGVfc3RhdGU7CisgICAgJmNvbm4tPmh0dHBfbmVnb3RpYXRlX3N0YXRlOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY2hhciAqYmFzZTY0ID0gTlVMTDsKICAgc2l6ZV90IGxlbiA9IDA7CiAgIGNoYXIgKnVzZXJwOwpAQCAtMTQ4LDEwICsxNTMsMTAgQEAKICAgICB9CiAgICAgaWYoIW5lZ19jdHgtPmNvbnRleHQpIHsKICAgICAgIHJlc3VsdCA9IEN1cmxfaW5wdXRfbmVnb3RpYXRlKGNvbm4sIHByb3h5LCAiTmVnb3RpYXRlIik7Ci0gICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfTE9HSU5fREVOSUVEKSB7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfQVVUSF9FUlJPUikgewogICAgICAgICAvKiBuZWdvdGlhdGUgYXV0aCBmYWlsZWQsIGxldCdzIGNvbnRpbnVlIHVuYXV0aGVudGljYXRlZCB0byBzdGF5CiAgICAgICAgICAqIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3IgYmVmb3JlIGN1cmwtN182NF8wLTE1OC1nNmM2MDM1NTMyICovCi0gICAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gVFJVRTsKKyAgICAgICAgYXV0aHAtPmRvbmUgPSBUUlVFOwogICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICB9CiAgICAgICBlbHNlIGlmKHJlc3VsdCkKQEAgLTE2NCwxNSArMTY5LDE1IEBACiAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgdXNlcnAgPSBhcHJpbnRmKCIlc0F1dGhvcml6YXRpb246IE5lZ290aWF0ZSAlc1xyXG4iLCBwcm94eSA/ICJQcm94eS0iIDogIiIsCi0gICAgICBiYXNlNjQpOworICAgICAgICAgICAgICAgICAgICBiYXNlNjQpOwogCiAgICAgaWYocHJveHkpIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkKTsKLSAgICAgIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCA9IHVzZXJwOworICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCk7CisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCA9IHVzZXJwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudXNlcnB3ZCk7Ci0gICAgICBjb25uLT5hbGxvY3B0ci51c2VycHdkID0gdXNlcnA7CisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2QgPSB1c2VycDsKICAgICB9CiAKICAgICBmcmVlKGJhc2U2NCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9uZWdvdGlhdGUuaAppbmRleCA0ZjBhYzE2Li5hNzM3ZjZmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfbmVnb3RpYXRlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMzLDYgKzMzLDggQEAKIAogdm9pZCBDdXJsX2h0dHBfYXV0aF9jbGVhbnVwX25lZ290aWF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCi0jZW5kaWYgLyogIUNVUkxfRElTQUJMRV9IVFRQICYmIFVTRV9TUE5FR08gKi8KKyNlbHNlIC8qICFDVVJMX0RJU0FCTEVfSFRUUCAmJiBVU0VfU1BORUdPICovCisjZGVmaW5lIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbmVnb3RpYXRlKHgpCisjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfTkVHT1RJQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfbnRsbS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmMKaW5kZXggZTRhNGZlMC4uY2FiNTQzYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ0LDkgKzQ0LDcgQEAKIAogLyogU1NMIGJhY2tlbmQtc3BlY2lmaWMgI2lmIGJyYW5jaGVzIGluIHRoaXMgZmlsZSBtdXN0IGJlIGtlcHQgaW4gdGhlIG9yZGVyCiAgICBkb2N1bWVudGVkIGluIGN1cmxfbnRsbV9jb3JlLiAqLwotI2lmIGRlZmluZWQoTlRMTV9ORUVEU19OU1NfSU5JVCkKLSNpbmNsdWRlICJ2dGxzL25zc2cuaCIKLSNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAjaW5jbHVkZSAiY3VybF9zc3BpLmgiCiAjZW5kaWYKIApAQCAtMTMzLDE3ICsxMzEsMTUgQEAKICAgc3RydWN0IG50bG1kYXRhICpudGxtOwogICBjdXJsbnRsbSAqc3RhdGU7CiAgIHN0cnVjdCBhdXRoICphdXRocDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKIAogICBERUJVR0FTU0VSVChjb25uKTsKLSAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YSk7Ci0KLSNpZiBkZWZpbmVkKE5UTE1fTkVFRFNfTlNTX0lOSVQpCi0gIGlmKENVUkxFX09LICE9IEN1cmxfbnNzX2ZvcmNlX2luaXQoY29ubi0+ZGF0YSkpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0jZW5kaWYKKyAgREVCVUdBU1NFUlQoZGF0YSk7CiAKICAgaWYocHJveHkpIHsKLSAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICBhbGxvY3VzZXJwd2QgPSAmZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2Q7CiAgICAgdXNlcnAgPSBjb25uLT5odHRwX3Byb3h5LnVzZXI7CiAgICAgcGFzc3dkcCA9IGNvbm4tPmh0dHBfcHJveHkucGFzc3dkOwogICAgIHNlcnZpY2UgPSBjb25uLT5kYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV9TRVJWSUNFX05BTUVdID8KQEAgLTE1Miw5ICsxNDgsMTIgQEAKICAgICBudGxtID0gJmNvbm4tPnByb3h5bnRsbTsKICAgICBzdGF0ZSA9ICZjb25uLT5wcm94eV9udGxtX3N0YXRlOwogICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKKyNlbHNlCisgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgogICB9CiAgIGVsc2UgewotICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOworICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q7CiAgICAgdXNlcnAgPSBjb25uLT51c2VyOwogICAgIHBhc3N3ZHAgPSBjb25uLT5wYXNzd2Q7CiAgICAgc2VydmljZSA9IGNvbm4tPmRhdGEtPnNldC5zdHJbU1RSSU5HX1NFUlZJQ0VfTkFNRV0gPwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uaAppbmRleCAwMDM3MTRkLi4zZWJkZjk3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzUsNiArMzUsOCBAQAogCiB2b2lkIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbnRsbShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCi0jZW5kaWYgLyogIUNVUkxfRElTQUJMRV9IVFRQICYmIFVTRV9OVExNICovCisjZWxzZSAvKiAhQ1VSTF9ESVNBQkxFX0hUVFAgJiYgVVNFX05UTE0gKi8KKyNkZWZpbmUgQ3VybF9odHRwX2F1dGhfY2xlYW51cF9udGxtKHgpCisjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfTlRMTV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmMKaW5kZXggZDdlZDExNy4uZjE4OGNiZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9wcm94eS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfcHJveHkuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTgsOCArNTgsOSBAQAogICAgICAgQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBzb2NraW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSk7CiAgICAgaWYocmVzdWx0KQotICAgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIGEgZmFpbGVkIGNvbm5lY3Rpb24gaXMgbWFya2VkIGZvciBjbG9zdXJlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudCAoYmFkKSByZS11c2Ugb3Igc2ltaWxhciAqLworICAgICAgLyogYSBmYWlsZWQgY29ubmVjdGlvbiBpcyBtYXJrZWQgZm9yIGNsb3N1cmUgdG8gcHJldmVudCAoYmFkKSByZS11c2Ugb3IKKyAgICAgICAgIHNpbWlsYXIgKi8KKyAgICAgIGNvbm5jbG9zZShjb25uLCAiVExTIGhhbmRzaGFrZSBmYWlsZWQiKTsKICAgfQogICByZXR1cm4gcmVzdWx0OwogI2Vsc2UKQEAgLTcxLDYgKzcyLDcgQEAKIAogQ1VSTGNvZGUgQ3VybF9wcm94eV9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGlmKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUykgewogICAgIGNvbnN0IENVUkxjb2RlIHJlc3VsdCA9IGh0dHBzX3Byb3h5X2Nvbm5lY3QoY29ubiwgc29ja2luZGV4KTsKICAgICBpZihyZXN1bHQpCkBAIC0xMjYsNyArMTI4LDcgQEAKICAgICBjb25uLT5kYXRhLT5yZXEucHJvdG9wID0gcHJvdF9zYXZlOwogICAgIGlmKENVUkxFX09LICE9IHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2QpOworICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2QpOwogI2Vsc2UKICAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwogI2VuZGlmCkBAIC0xNTcsMTUgKzE1OSwxNSBAQAogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgaW5mb2YoY29ubi0+ZGF0YSwgImFsbG9jYXRlIGNvbm5lY3QgYnVmZmVyIVxuIik7CiAgICAgY29ubi0+Y29ubmVjdF9zdGF0ZSA9IHM7CisgICAgQ3VybF9keW5faW5pdCgmcy0+cmN2YnVmLCBEWU5fUFJPWFlfQ09OTkVDVF9IRUFERVJTKTsKICAgfQogICBlbHNlIHsKICAgICBERUJVR0FTU0VSVChjb25uLT5jb25uZWN0X3N0YXRlKTsKICAgICBzID0gY29ubi0+Y29ubmVjdF9zdGF0ZTsKKyAgICBDdXJsX2R5bl9yZXNldCgmcy0+cmN2YnVmKTsKICAgfQogICBzLT50dW5uZWxfc3RhdGUgPSBUVU5ORUxfSU5JVDsKICAgcy0+a2VlcG9uID0gVFJVRTsKLSAgcy0+bGluZV9zdGFydCA9IHMtPmNvbm5lY3RfYnVmZmVyOwotICBzLT5wdHIgPSBzLT5saW5lX3N0YXJ0OwogICBzLT5jbCA9IDA7CiAgIHMtPmNsb3NlX2Nvbm5lY3Rpb24gPSBGQUxTRTsKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMTc1LDYgKzE3Nyw3IEBACiB7CiAgIHN0cnVjdCBodHRwX2Nvbm5lY3Rfc3RhdGUgKnMgPSBjb25uLT5jb25uZWN0X3N0YXRlOwogICBzLT50dW5uZWxfc3RhdGUgPSBUVU5ORUxfQ09NUExFVEU7CisgIEN1cmxfZHluX2ZyZWUoJnMtPnJjdmJ1Zik7CiAgIGluZm9mKGNvbm4tPmRhdGEsICJDT05ORUNUIHBoYXNlIGNvbXBsZXRlZCFcbiIpOwogfQogCkBAIC0xODksNiArMTkyLDggQEAKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBjdXJsX3NvY2tldF90IHR1bm5lbHNvY2tldCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgc3RydWN0IGh0dHBfY29ubmVjdF9zdGF0ZSAqcyA9IGNvbm4tPmNvbm5lY3Rfc3RhdGU7CisgIGNoYXIgKmxpbmVwOworICBzaXplX3QgcGVybGluZTsKIAogI2RlZmluZSBTRUxFQ1RfT0sgICAgICAwCiAjZGVmaW5lIFNFTEVDVF9FUlJPUiAgIDEKQEAgLTIwMyw3ICsyMDgsNyBAQAogICAgIGlmKFRVTk5FTF9JTklUID09IHMtPnR1bm5lbF9zdGF0ZSkgewogICAgICAgLyogQkVHSU4gQ09OTkVDVCBQSEFTRSAqLwogICAgICAgY2hhciAqaG9zdF9wb3J0OwotICAgICAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcjsKKyAgICAgIHN0cnVjdCBkeW5idWYgcmVxOwogCiAgICAgICBpbmZvZihkYXRhLCAiRXN0YWJsaXNoIEhUVFAgcHJveHkgdHVubmVsIHRvICVzOiVkXG4iLAogICAgICAgICAgICAgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKQEAgLTIxNCwxNyArMjE5LDEyIEBACiAgICAgICBmcmVlKGRhdGEtPnJlcS5uZXd1cmwpOwogICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IE5VTEw7CiAKLSAgICAgIC8qIGluaXRpYWxpemUgYSBkeW5hbWljIHNlbmQtYnVmZmVyICovCi0gICAgICByZXFfYnVmZmVyID0gQ3VybF9hZGRfYnVmZmVyX2luaXQoKTsKLQotICAgICAgaWYoIXJlcV9idWZmZXIpCi0gICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCiAgICAgICBob3N0X3BvcnQgPSBhcHJpbnRmKCIlczolZCIsIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7Ci0gICAgICBpZighaG9zdF9wb3J0KSB7Ci0gICAgICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZyZXFfYnVmZmVyKTsKKyAgICAgIGlmKCFob3N0X3BvcnQpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgfQorCisgICAgICAvKiBpbml0aWFsaXplIGEgZHluYW1pYyBzZW5kLWJ1ZmZlciAqLworICAgICAgQ3VybF9keW5faW5pdCgmcmVxLCBEWU5fSFRUUF9SRVFVRVNUKTsKIAogICAgICAgLyogU2V0dXAgdGhlIHByb3h5LWF1dGhvcml6YXRpb24gaGVhZGVyLCBpZiBhbnkgKi8KICAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9vdXRwdXRfYXV0aChjb25uLCAiQ09OTkVDVCIsIGhvc3RfcG9ydCwgVFJVRSk7CkBAIC0yMzUsOCArMjM1LDggQEAKICAgICAgICAgY2hhciAqaG9zdCA9IE5VTEw7CiAgICAgICAgIGNvbnN0IGNoYXIgKnByb3h5Y29ubiA9ICIiOwogICAgICAgICBjb25zdCBjaGFyICp1c2VyYWdlbnQgPSAiIjsKLSAgICAgICAgY29uc3QgY2hhciAqaHR0cCA9IChjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUF8xXzApID8KLSAgICAgICAgICAiMS4wIiA6ICIxLjEiOworICAgICAgICBjb25zdCBjaGFyICpodHRwdiA9CisgICAgICAgICAgKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQXzFfMCkgPyAiMS4wIiA6ICIxLjEiOwogICAgICAgICBib29sIGlwdjZfaXAgPSBjb25uLT5iaXRzLmlwdjZfaXA7CiAgICAgICAgIGNoYXIgKmhvc3RoZWFkZXI7CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICAgIGFwcmludGYoIiVzJXMlczolZCIsIGlwdjZfaXA/IlsiOiIiLCBob3N0bmFtZSwgaXB2Nl9pcD8iXSI6IiIsCiAgICAgICAgICAgICAgICAgICByZW1vdGVfcG9ydCk7CiAgICAgICAgIGlmKCFob3N0aGVhZGVyKSB7Ci0gICAgICAgICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcV9idWZmZXIpOworICAgICAgICAgIEN1cmxfZHluX2ZyZWUoJnJlcSk7CiAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICAgIH0KIApAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICAgICAgaG9zdCA9IGFwcmludGYoIkhvc3Q6ICVzXHJcbiIsIGhvc3RoZWFkZXIpOwogICAgICAgICAgIGlmKCFob3N0KSB7CiAgICAgICAgICAgICBmcmVlKGhvc3RoZWFkZXIpOwotICAgICAgICAgICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcV9idWZmZXIpOworICAgICAgICAgICAgQ3VybF9keW5fZnJlZSgmcmVxKTsKICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjY0LDUyICsyNjQsNDkgQEAKIAogICAgICAgICBpZighQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25uLCAiVXNlci1BZ2VudCIpICYmCiAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJBR0VOVF0pCi0gICAgICAgICAgdXNlcmFnZW50ID0gY29ubi0+YWxsb2NwdHIudWFnZW50OworICAgICAgICAgIHVzZXJhZ2VudCA9IGRhdGEtPnN0YXRlLmFwdHIudWFnZW50OwogCiAgICAgICAgIHJlc3VsdCA9Ci0gICAgICAgICAgQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT05ORUNUICVzIEhUVFAvJXNcclxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAgLyogSG9zdDogKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIFByb3h5LUF1dGhvcml6YXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIFVzZXItQWdlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIC8qIFByb3h5LUNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RoZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdD9ob3N0OiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmFnZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHljb25uKTsKKyAgICAgICAgICBDdXJsX2R5bl9hZGRmKCZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ09OTkVDVCAlcyBIVFRQLyVzXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIEhvc3Q6ICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICAvKiBQcm94eS1BdXRob3JpemF0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICAvKiBVc2VyLUFnZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCAvKiBQcm94eS1Db25uZWN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0aGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHYsCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0P2hvc3Q6IiIsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZD8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIucHJveHl1c2VycHdkOiIiLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmFnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgcHJveHljb25uKTsKIAogICAgICAgICBpZihob3N0KQogICAgICAgICAgIGZyZWUoaG9zdCk7CiAgICAgICAgIGZyZWUoaG9zdGhlYWRlcik7CiAKICAgICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhjb25uLCBUUlVFLCByZXFfYnVmZmVyKTsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhjb25uLCBUUlVFLCAmcmVxKTsKIAogICAgICAgICBpZighcmVzdWx0KQogICAgICAgICAgIC8qIENSTEYgdGVybWluYXRlIHRoZSByZXF1ZXN0ICovCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIlxyXG4iKTsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKIAogICAgICAgICBpZighcmVzdWx0KSB7CiAgICAgICAgICAgLyogU2VuZCB0aGUgY29ubmVjdCByZXF1ZXN0IHRvIHRoZSBwcm94eSAqLwogICAgICAgICAgIC8qIEJMT0NLSU5HICovCi0gICAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICAgIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKCZyZXFfYnVmZmVyLCBjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBzb2NraW5kZXgpOworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYnVmZmVyX3NlbmQoJnJlcSwgY29ubiwgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4KTsKICAgICAgICAgfQotICAgICAgICByZXFfYnVmZmVyID0gTlVMTDsKICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBDT05ORUNUIHRvIHByb3h5Iik7CiAgICAgICB9CiAKLSAgICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZyZXFfYnVmZmVyKTsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJnJlcSk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAgIHMtPnR1bm5lbF9zdGF0ZSA9IFRVTk5FTF9DT05ORUNUOwotICAgICAgcy0+cGVybGluZSA9IDA7CiAgICAgfSAvKiBFTkQgQ09OTkVDVCBQSEFTRSAqLwogCiAgICAgY2hlY2sgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwpAQCAtMzI3LDE4ICszMjQsMTMgQEAKICAgICB7IC8qIFJFQURJTkcgUkVTUE9OU0UgUEhBU0UgKi8KICAgICAgIGludCBlcnJvciA9IFNFTEVDVF9PSzsKIAotICAgICAgd2hpbGUocy0+a2VlcG9uICYmICFlcnJvcikgeworICAgICAgd2hpbGUocy0+a2VlcG9uKSB7CiAgICAgICAgIHNzaXplX3QgZ290Ynl0ZXM7Ci0KLSAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgc3BhY2UgdG8gcmVhZCBtb3JlIGRhdGEgKi8KLSAgICAgICAgaWYocy0+cHRyID49ICZzLT5jb25uZWN0X2J1ZmZlcltDT05ORUNUX0JVRkZFUl9TSVpFXSkgewotICAgICAgICAgIGZhaWxmKGRhdGEsICJDT05ORUNUIHJlc3BvbnNlIHRvbyBsYXJnZSEiKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKLSAgICAgICAgfQorICAgICAgICBjaGFyIGJ5dGU7CiAKICAgICAgICAgLyogUmVhZCBvbmUgYnl0ZSBhdCBhIHRpbWUgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbi4gV2FpdCBhdCBtb3N0IG9uZQogICAgICAgICAgICBzZWNvbmQgYmVmb3JlIGxvb3BpbmcgdG8gZW5zdXJlIGNvbnRpbnVvdXMgcGdyc1VwZGF0ZXMuICovCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCB0dW5uZWxzb2NrZXQsIHMtPnB0ciwgMSwgJmdvdGJ5dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9yZWFkKGNvbm4sIHR1bm5lbHNvY2tldCwgJmJ5dGUsIDEsICZnb3RieXRlcyk7CiAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9BR0FJTikKICAgICAgICAgICAvKiBzb2NrZXQgYnVmZmVyIGRyYWluZWQsIHJldHVybiAqLwogICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKQEAgLTM2NSwxMSArMzU3LDkgQEAKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0KICAgICAgICAgaWYocy0+a2VlcG9uID4gVFJVRSkgewogICAgICAgICAgIC8qIFRoaXMgbWVhbnMgd2UgYXJlIGN1cnJlbnRseSBpZ25vcmluZyBhIHJlc3BvbnNlLWJvZHkgKi8KIAotICAgICAgICAgIHMtPnB0ciA9IHMtPmNvbm5lY3RfYnVmZmVyOwogICAgICAgICAgIGlmKHMtPmNsKSB7CiAgICAgICAgICAgICAvKiBBIENvbnRlbnQtTGVuZ3RoIGJhc2VkIGJvZHk6IHNpbXBseSBjb3VudCBkb3duIHRoZSBjb3VudGVyCiAgICAgICAgICAgICAgICBhbmQgbWFrZSBzdXJlIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCB3aGVuIHdlJ3JlIGRvbmUhICovCkBAIC0zODQsMTEgKzM3NCwxMiBAQAogICAgICAgICAgICAgLyogY2h1bmtlZC1lbmNvZGVkIGJvZHksIHNvIHdlIG5lZWQgdG8gZG8gdGhlIGNodW5rZWQgZGFuY2UKICAgICAgICAgICAgICAgIHByb3Blcmx5IHRvIGtub3cgd2hlbiB0aGUgZW5kIG9mIHRoZSBib2R5IGlzIHJlYWNoZWQgKi8KICAgICAgICAgICAgIENIVU5LY29kZSByOworICAgICAgICAgICAgQ1VSTGNvZGUgZXh0cmE7CiAgICAgICAgICAgICBzc2l6ZV90IHRvb2tjYXJlb2YgPSAwOwogCiAgICAgICAgICAgICAvKiBub3cgcGFyc2UgdGhlIGNodW5rZWQgcGllY2Ugb2YgZGF0YSBzbyB0aGF0IHdlIGNhbgogICAgICAgICAgICAgICAgcHJvcGVybHkgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLwotICAgICAgICAgICAgciA9IEN1cmxfaHR0cGNodW5rX3JlYWQoY29ubiwgcy0+cHRyLCAxLCAmdG9va2NhcmVvZik7CisgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCAmYnl0ZSwgMSwgJnRvb2tjYXJlb2YsICZleHRyYSk7CiAgICAgICAgICAgICBpZihyID09IENIVU5LRV9TVE9QKSB7CiAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgcmVhZGluZyBjaHVua3MhICovCiAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJjaHVuayByZWFkaW5nIERPTkVcbiIpOwpAQCAtNDAwLDI1ICszOTEsMjcgQEAKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHMtPnBlcmxpbmUrKzsgLyogYW1vdW50IG9mIGJ5dGVzIGluIHRoaXMgbGluZSBzbyBmYXIgKi8KLQotICAgICAgICAvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mIGEgaGVhZGVyIGxpbmUgdGhlbiBjb250aW51ZSAqLwotICAgICAgICBpZigqcy0+cHRyICE9IDB4MGEpIHsKLSAgICAgICAgICBzLT5wdHIrKzsKLSAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYoQ3VybF9keW5fYWRkbigmcy0+cmN2YnVmLCAmYnl0ZSwgMSkpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQ09OTkVDVCByZXNwb25zZSB0b28gbGFyZ2UhIik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICAvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mIGEgaGVhZGVyIGxpbmUgdGhlbiBjb250aW51ZSAqLworICAgICAgICBpZihieXRlICE9IDB4MGEpCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbGluZXAgPSBDdXJsX2R5bl9wdHIoJnMtPnJjdmJ1Zik7CisgICAgICAgIHBlcmxpbmUgPSBDdXJsX2R5bl9sZW4oJnMtPnJjdmJ1Zik7IC8qIGFtb3VudCBvZiBieXRlcyBpbiB0aGlzIGxpbmUgKi8KKwogICAgICAgICAvKiBjb252ZXJ0IGZyb20gdGhlIG5ldHdvcmsgZW5jb2RpbmcgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhkYXRhLCBzLT5saW5lX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpcy0+cGVybGluZSk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoZGF0YSwgbGluZXAsIHBlcmxpbmUpOwogICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgICAgICAvKiBvdXRwdXQgZGVidWcgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCi0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sCi0gICAgICAgICAgICAgICAgICAgICBzLT5saW5lX3N0YXJ0LCAoc2l6ZV90KXMtPnBlcmxpbmUpOworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCBsaW5lcCwgcGVybGluZSk7CiAKICAgICAgICAgaWYoIWRhdGEtPnNldC5zdXBwcmVzc19jb25uZWN0X2hlYWRlcnMpIHsKICAgICAgICAgICAvKiBzZW5kIHRoZSBoZWFkZXIgdG8gdGhlIGNhbGxiYWNrICovCkBAIC00MjYsMjMgKzQxOSwyMiBAQAogICAgICAgICAgIGlmKGRhdGEtPnNldC5pbmNsdWRlX2hlYWRlcikKICAgICAgICAgICAgIHdyaXRldHlwZSB8PSBDTElFTlRXUklURV9CT0RZOwogCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgd3JpdGV0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmxpbmVfc3RhcnQsIHMtPnBlcmxpbmUpOworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIHdyaXRldHlwZSwgbGluZXAsIHBlcmxpbmUpOwogICAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhLT5pbmZvLmhlYWRlcl9zaXplICs9IChsb25nKXMtPnBlcmxpbmU7Ci0gICAgICAgIGRhdGEtPnJlcS5oZWFkZXJieXRlY291bnQgKz0gKGxvbmcpcy0+cGVybGluZTsKKyAgICAgICAgZGF0YS0+aW5mby5oZWFkZXJfc2l6ZSArPSAobG9uZylwZXJsaW5lOworICAgICAgICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ICs9IChsb25nKXBlcmxpbmU7CiAKICAgICAgICAgLyogTmV3bGluZXMgYXJlIENSTEYsIHNvIHRoZSBDUiBpcyBpZ25vcmVkIGFzIHRoZSBsaW5lIGlzbid0CiAgICAgICAgICAgIHJlYWxseSB0ZXJtaW5hdGVkIHVudGlsIHRoZSBMRiBjb21lcy4gVHJlYXQgYSBmb2xsb3dpbmcgQ1IKICAgICAgICAgICAgYXMgZW5kLW9mLWhlYWRlcnMgYXMgd2VsbC4qLwogCi0gICAgICAgIGlmKCgnXHInID09IHMtPmxpbmVfc3RhcnRbMF0pIHx8Ci0gICAgICAgICAgICgnXG4nID09IHMtPmxpbmVfc3RhcnRbMF0pKSB7CisgICAgICAgIGlmKCgnXHInID09IGxpbmVwWzBdKSB8fAorICAgICAgICAgICAoJ1xuJyA9PSBsaW5lcFswXSkpIHsKICAgICAgICAgICAvKiBlbmQgb2YgcmVzcG9uc2UtaGVhZGVycyBmcm9tIHRoZSBwcm94eSAqLwotICAgICAgICAgIHMtPnB0ciA9IHMtPmNvbm5lY3RfYnVmZmVyOworCiAgICAgICAgICAgaWYoKDQwNyA9PSBrLT5odHRwY29kZSkgJiYgIWRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtKSB7CiAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgYSA0MDcgcmVzcG9uc2UgY29kZSB3aXRoIGNvbnRlbnQgbGVuZ3RoCiAgICAgICAgICAgICAgICB3aGVuIHdlIGhhdmUgbm8gYXV0aCBwcm9ibGVtLCB3ZSBtdXN0IGlnbm9yZSB0aGUKQEAgLTQ1NSwyNCArNDQ3LDIzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmKHMtPmNodW5rZWRfZW5jb2RpbmcpIHsKICAgICAgICAgICAgICAgQ0hVTktjb2RlIHI7CisgICAgICAgICAgICAgIENVUkxjb2RlIGV4dHJhOwogCiAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmUgY2h1bmtlZCByZXNwb25zZS1ib2R5XG4iKTsKIAotICAgICAgICAgICAgICAvKiBXZSBzZXQgaWdub3JlYm9keSB0cnVlIGhlcmUgc2luY2UgdGhlIGNodW5rZWQKLSAgICAgICAgICAgICAgICAgZGVjb2RlciBmdW5jdGlvbiB3aWxsIGFja25vd2xlZGdlIHRoYXQuIFBheQotICAgICAgICAgICAgICAgICBhdHRlbnRpb24gc28gdGhhdCB0aGlzIGlzIGNsZWFyZWQgYWdhaW4gd2hlbiB0aGlzCi0gICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMhICovCisgICAgICAgICAgICAgIC8qIFdlIHNldCBpZ25vcmVib2R5IHRydWUgaGVyZSBzaW5jZSB0aGUgY2h1bmtlZCBkZWNvZGVyCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwgYWNrbm93bGVkZ2UgdGhhdC4gUGF5IGF0dGVudGlvbiBzbyB0aGF0IHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgY2xlYXJlZCBhZ2FpbiB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyEgKi8KICAgICAgICAgICAgICAgay0+aWdub3JlYm9keSA9IFRSVUU7CiAKLSAgICAgICAgICAgICAgaWYocy0+bGluZV9zdGFydFsxXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLyogdGhpcyBjYW4gb25seSBiZSBhIExGIGlmIHRoZSBsZXR0ZXIgYXQgaW5kZXggMAotICAgICAgICAgICAgICAgICAgIHdhcyBhIENSICovCi0gICAgICAgICAgICAgICAgcy0+bGluZV9zdGFydCsrOwotICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmKGxpbmVwWzFdID09ICdcbicpCisgICAgICAgICAgICAgICAgLyogdGhpcyBjYW4gb25seSBiZSBhIExGIGlmIHRoZSBsZXR0ZXIgYXQgaW5kZXggMCB3YXMgYSBDUiAqLworICAgICAgICAgICAgICAgIGxpbmVwKys7CiAKLSAgICAgICAgICAgICAgLyogbm93IHBhcnNlIHRoZSBjaHVua2VkIHBpZWNlIG9mIGRhdGEgc28gdGhhdCB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgcHJvcGVybHkgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLwotICAgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBzLT5saW5lX3N0YXJ0ICsgMSwgMSwgJmdvdGJ5dGVzKTsKKyAgICAgICAgICAgICAgLyogbm93IHBhcnNlIHRoZSBjaHVua2VkIHBpZWNlIG9mIGRhdGEgc28gdGhhdCB3ZSBjYW4gcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLworICAgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBsaW5lcCArIDEsIDEsICZnb3RieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhKTsKICAgICAgICAgICAgICAgaWYociA9PSBDSFVOS0VfU1RPUCkgewogICAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgcmVhZGluZyBjaHVua3MhICovCiAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgImNodW5rIHJlYWRpbmcgRE9ORVxuIik7CkBAIC00OTYsMTQgKzQ4NywxMyBAQAogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcy0+bGluZV9zdGFydFtzLT5wZXJsaW5lXSA9IDA7IC8qIHplcm8gdGVybWluYXRlIHRoZSBidWZmZXIgKi8KLSAgICAgICAgaWYoKGNoZWNrcHJlZml4KCJXV1ctQXV0aGVudGljYXRlOiIsIHMtPmxpbmVfc3RhcnQpICYmCisgICAgICAgIGlmKChjaGVja3ByZWZpeCgiV1dXLUF1dGhlbnRpY2F0ZToiLCBsaW5lcCkgJiYKICAgICAgICAgICAgICg0MDEgPT0gay0+aHR0cGNvZGUpKSB8fAotICAgICAgICAgICAoY2hlY2twcmVmaXgoIlByb3h5LWF1dGhlbnRpY2F0ZToiLCBzLT5saW5lX3N0YXJ0KSAmJgorICAgICAgICAgICAoY2hlY2twcmVmaXgoIlByb3h5LWF1dGhlbnRpY2F0ZToiLCBsaW5lcCkgJiYKICAgICAgICAgICAgICg0MDcgPT0gay0+aHR0cGNvZGUpKSkgewogCiAgICAgICAgICAgYm9vbCBwcm94eSA9IChrLT5odHRwY29kZSA9PSA0MDcpID8gVFJVRSA6IEZBTFNFOwotICAgICAgICAgIGNoYXIgKmF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKHMtPmxpbmVfc3RhcnQpOworICAgICAgICAgIGNoYXIgKmF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGxpbmVwKTsKICAgICAgICAgICBpZighYXV0aCkKICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC01MTQsNyArNTA0LDcgQEAKICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIkNvbnRlbnQtTGVuZ3RoOiIsIHMtPmxpbmVfc3RhcnQpKSB7CisgICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIkNvbnRlbnQtTGVuZ3RoOiIsIGxpbmVwKSkgewogICAgICAgICAgIGlmKGstPmh0dHBjb2RlLzEwMCA9PSAyKSB7CiAgICAgICAgICAgICAvKiBBIGNsaWVudCBNVVNUIGlnbm9yZSBhbnkgQ29udGVudC1MZW5ndGggb3IgVHJhbnNmZXItRW5jb2RpbmcKICAgICAgICAgICAgICAgIGhlYWRlciBmaWVsZHMgcmVjZWl2ZWQgaW4gYSBzdWNjZXNzZnVsIHJlc3BvbnNlIHRvIENPTk5FQ1QuCkBAIC01MjMsMTMgKzUxMywxMyBAQAogICAgICAgICAgICAgICAgICAgay0+aHR0cGNvZGUpOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChzLT5saW5lX3N0YXJ0ICsKKyAgICAgICAgICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChsaW5lcCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCJDb250ZW50LUxlbmd0aDoiKSwgTlVMTCwgMTAsICZzLT5jbCk7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKHMtPmxpbmVfc3RhcnQsICJDb25uZWN0aW9uOiIsICJjbG9zZSIpKQorICAgICAgICBlbHNlIGlmKEN1cmxfY29tcGFyZWhlYWRlcihsaW5lcCwgIkNvbm5lY3Rpb246IiwgImNsb3NlIikpCiAgICAgICAgICAgcy0+Y2xvc2VfY29ubmVjdGlvbiA9IFRSVUU7Ci0gICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIHMtPmxpbmVfc3RhcnQpKSB7CisgICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIGxpbmVwKSkgewogICAgICAgICAgIGlmKGstPmh0dHBjb2RlLzEwMCA9PSAyKSB7CiAgICAgICAgICAgICAvKiBBIGNsaWVudCBNVVNUIGlnbm9yZSBhbnkgQ29udGVudC1MZW5ndGggb3IgVHJhbnNmZXItRW5jb2RpbmcKICAgICAgICAgICAgICAgIGhlYWRlciBmaWVsZHMgcmVjZWl2ZWQgaW4gYSBzdWNjZXNzZnVsIHJlc3BvbnNlIHRvIENPTk5FQ1QuCkBAIC01MzcsNyArNTI3LDcgQEAKICAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmluZyBUcmFuc2Zlci1FbmNvZGluZyBpbiAiCiAgICAgICAgICAgICAgICAgICAiQ09OTkVDVCAlMDNkIHJlc3BvbnNlXG4iLCBrLT5odHRwY29kZSk7CiAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKHMtPmxpbmVfc3RhcnQsCisgICAgICAgICAgZWxzZSBpZihDdXJsX2NvbXBhcmVoZWFkZXIobGluZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zZmVyLUVuY29kaW5nOiIsICJjaHVua2VkIikpIHsKICAgICAgICAgICAgIGluZm9mKGRhdGEsICJDT05ORUNUIHJlc3BvbmRlZCBjaHVua2VkXG4iKTsKICAgICAgICAgICAgIHMtPmNodW5rZWRfZW5jb2RpbmcgPSBUUlVFOwpAQCAtNTQ1LDE5ICs1MzUsMTYgQEAKICAgICAgICAgICAgIEN1cmxfaHR0cGNodW5rX2luaXQoY29ubik7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKHMtPmxpbmVfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm94eS1Db25uZWN0aW9uOiIsICJjbG9zZSIpKQorICAgICAgICBlbHNlIGlmKEN1cmxfY29tcGFyZWhlYWRlcihsaW5lcCwgIlByb3h5LUNvbm5lY3Rpb246IiwgImNsb3NlIikpCiAgICAgICAgICAgcy0+Y2xvc2VfY29ubmVjdGlvbiA9IFRSVUU7Ci0gICAgICAgIGVsc2UgaWYoMiA9PSBzc2NhbmYocy0+bGluZV9zdGFydCwgIkhUVFAvMS4lZCAlZCIsCisgICAgICAgIGVsc2UgaWYoMiA9PSBzc2NhbmYobGluZXAsICJIVFRQLzEuJWQgJWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJ2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrLT5odHRwY29kZSkpIHsKICAgICAgICAgICAvKiBzdG9yZSB0aGUgSFRUUCBjb2RlIGZyb20gdGhlIHByb3h5ICovCiAgICAgICAgICAgZGF0YS0+aW5mby5odHRwcHJveHljb2RlID0gay0+aHR0cGNvZGU7CiAgICAgICAgIH0KIAotICAgICAgICBzLT5wZXJsaW5lID0gMDsgLyogbGluZSBzdGFydHMgb3ZlciBoZXJlICovCi0gICAgICAgIHMtPnB0ciA9IHMtPmNvbm5lY3RfYnVmZmVyOwotICAgICAgICBzLT5saW5lX3N0YXJ0ID0gcy0+cHRyOworICAgICAgICBDdXJsX2R5bl9yZXNldCgmcy0+cmN2YnVmKTsKICAgICAgIH0gLyogd2hpbGUgdGhlcmUncyBidWZmZXIgbGVmdCBhbmQgbG9vcCBpcyByZXF1ZXN0ZWQgKi8KIAogICAgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQpAQCAtNjE4LDYgKzYwNSw3IEBACiAgICAgaWYoY29ubi0+Yml0cy5wcm94eV9jb25uZWN0X2Nsb3NlZCkKICAgICAgIC8qIHRoaXMgaXMgbm90IGFuIGVycm9yLCBqdXN0IHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gbmVnb3RpYXRpb24gKi8KICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBDdXJsX2R5bl9mcmVlKCZzLT5yY3ZidWYpOwogICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBIVFRQIGNvZGUgJWQgZnJvbSBwcm94eSBhZnRlciBDT05ORUNUIiwKICAgICAgICAgICBkYXRhLT5yZXEuaHR0cGNvZGUpOwogICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOwpAQCAtNjI4LDE2ICs2MTYsMTggQEAKICAgLyogSWYgYSBwcm94eS1hdXRob3JpemF0aW9uIGhlYWRlciB3YXMgdXNlZCBmb3IgdGhlIHByb3h5LCB0aGVuIHdlIHNob3VsZAogICAgICBtYWtlIHN1cmUgdGhhdCBpdCBpc24ndCBhY2NpZGVudGFsbHkgdXNlZCBmb3IgdGhlIGRvY3VtZW50IHJlcXVlc3QKICAgICAgYWZ0ZXIgd2UndmUgY29ubmVjdGVkLiBTbyBsZXQncyBmcmVlIGFuZCBjbGVhciBpdCBoZXJlLiAqLwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCk7Ci0gIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCA9IE5VTEw7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2QpOworICBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCA9IE5VTEw7CiAKICAgZGF0YS0+c3RhdGUuYXV0aHByb3h5LmRvbmUgPSBUUlVFOworICBkYXRhLT5zdGF0ZS5hdXRocHJveHkubXVsdGlwYXNzID0gRkFMU0U7CiAKICAgaW5mb2YoZGF0YSwgIlByb3h5IHJlcGxpZWQgJWQgdG8gQ09OTkVDVCByZXF1ZXN0XG4iLAogICAgICAgICBkYXRhLT5pbmZvLmh0dHBwcm94eWNvZGUpOwogICBkYXRhLT5yZXEuaWdub3JlYm9keSA9IEZBTFNFOyAvKiBwdXQgaXQgKGJhY2spIHRvIG5vbi1pZ25vcmUgc3RhdGUgKi8KICAgY29ubi0+Yml0cy5yZXdpbmRhZnRlcnNlbmQgPSBGQUxTRTsgLyogbWFrZSBzdXJlIHRoaXMgaXNuJ3Qgc2V0IGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgcmVxdWVzdCAgKi8KKyAgQ3VybF9keW5fZnJlZSgmcy0+cmN2YnVmKTsKICAgcmV0dXJuIENVUkxFX09LOwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmgKaW5kZXggZTE5ZmE4NS4uMjk5ODhhNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9wcm94eS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfcHJveHkuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDcsNSArNDcsNiBAQAogI2VuZGlmCiAKIHZvaWQgQ3VybF9jb25uZWN0X2ZyZWUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7Cit2b2lkIEN1cmxfY29ubmVjdF9kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfSFRUUF9QUk9YWV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pZG5fd2luMzIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2lkbl93aW4zMi5jCmluZGV4IDhkYzMwMGIuLjJmNTg1MGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2lkbl93aW4zMi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2lkbl93aW4zMi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03MiwxMyArNzIsMTMgQEAKIHsKICAgYm9vbCBzdWNjZXNzID0gRkFMU0U7CiAKLSAgd2NoYXJfdCAqaW5fdyA9IEN1cmxfY29udmVydF9VVEY4X3RvX3djaGFyKGluKTsKKyAgd2NoYXJfdCAqaW5fdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihpbik7CiAgIGlmKGluX3cpIHsKICAgICB3Y2hhcl90IHB1bnljb2RlW0lETl9NQVhfTEVOR1RIXTsKICAgICBpbnQgY2hhcnMgPSBJZG5Ub0FzY2lpKDAsIGluX3csIC0xLCBwdW55Y29kZSwgSUROX01BWF9MRU5HVEgpOwogICAgIGZyZWUoaW5fdyk7CiAgICAgaWYoY2hhcnMpIHsKLSAgICAgICpvdXQgPSBDdXJsX2NvbnZlcnRfd2NoYXJfdG9fVVRGOChwdW55Y29kZSk7CisgICAgICAqb3V0ID0gY3VybHhfY29udmVydF93Y2hhcl90b19VVEY4KHB1bnljb2RlKTsKICAgICAgIGlmKCpvdXQpCiAgICAgICAgIHN1Y2Nlc3MgPSBUUlVFOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAKIHsKICAgYm9vbCBzdWNjZXNzID0gRkFMU0U7CiAKLSAgd2NoYXJfdCAqaW5fdyA9IEN1cmxfY29udmVydF9VVEY4X3RvX3djaGFyKGluKTsKKyAgd2NoYXJfdCAqaW5fdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihpbik7CiAgIGlmKGluX3cpIHsKICAgICBzaXplX3QgaW5fbGVuID0gd2NzbGVuKGluX3cpICsgMTsKICAgICB3Y2hhcl90IHVuaWNvZGVbSUROX01BWF9MRU5HVEhdOwpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlLCBJRE5fTUFYX0xFTkdUSCk7CiAgICAgZnJlZShpbl93KTsKICAgICBpZihjaGFycykgewotICAgICAgKm91dCA9IEN1cmxfY29udmVydF93Y2hhcl90b19VVEY4KHVuaWNvZGUpOworICAgICAgKm91dCA9IGN1cmx4X2NvbnZlcnRfd2NoYXJfdG9fVVRGOCh1bmljb2RlKTsKICAgICAgIGlmKCpvdXQpCiAgICAgICAgIHN1Y2Nlc3MgPSBUUlVFOwogICAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2lmMmlwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pZjJpcC5jCmluZGV4IGQwMDNkZTYuLjM5Mzg4NjkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2lmMmlwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaWYyaXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIGlmKGlmYWNlLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IGFmKSB7CiAgICAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoaWZhY2UtPmlmYV9uYW1lLCBpbnRlcmYpKSB7CiAgICAgICAgICAgICB2b2lkICphZGRyOwotICAgICAgICAgICAgY2hhciAqaXA7CisgICAgICAgICAgICBjb25zdCBjaGFyICppcDsKICAgICAgICAgICAgIGNoYXIgc2NvcGVbMTJdID0gIiI7CiAgICAgICAgICAgICBjaGFyIGlwc3RyWzY0XTsKICNpZmRlZiBFTkFCTEVfSVBWNgpAQCAtMTI5LDExICsxMjksMTEgQEAKICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlmc2NvcGUgPSBDdXJsX2lwdjZfc2NvcGUoaWZhY2UtPmlmYV9hZGRyKTsKIAogICAgICAgICAgICAgICBpZihpZnNjb3BlICE9IHJlbW90ZV9zY29wZSkgewotICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gaW50ZXJmYWNlIGFkZHJlc3NlcyB3aG9zZQotICAgICAgICAgICAgICAgICAgIHNjb3BlIG1hdGNoZXMgdGhlIHJlbW90ZSBhZGRyZXNzIHdlIHdhbnQgdG8KLSAgICAgICAgICAgICAgICAgICBjb25uZWN0IHRvOiBnbG9iYWwgZm9yIGdsb2JhbCwgbGluay1sb2NhbCBmb3IKLSAgICAgICAgICAgICAgICAgICBsaW5rLWxvY2FsLCBldGMuLi4gKi8KLSAgICAgICAgICAgICAgICBpZihyZXMgPT0gSUYySVBfTk9UX0ZPVU5EKSByZXMgPSBJRjJJUF9BRl9OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gaW50ZXJmYWNlIGFkZHJlc3NlcyB3aG9zZSBzY29wZQorICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgdGhlIHJlbW90ZSBhZGRyZXNzIHdlIHdhbnQgdG8gY29ubmVjdCB0bzogZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgZm9yIGdsb2JhbCwgbGluay1sb2NhbCBmb3IgbGluay1sb2NhbCwgZXRjLi4uICovCisgICAgICAgICAgICAgICAgaWYocmVzID09IElGMklQX05PVF9GT1VORCkKKyAgICAgICAgICAgICAgICAgIHJlcyA9IElGMklQX0FGX05PVF9TVVBQT1JURUQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgIH0KIApAQCAtMTUzLDE1ICsxNTMsMTUgQEAKICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGlmKHNjb3BlaWQpCi0gICAgICAgICAgICAgICAgICBtc25wcmludGYoc2NvcGUsIHNpemVvZihzY29wZSksICIlJSV1Iiwgc2NvcGVpZCk7CisgICAgICAgICAgICAgICAgbXNucHJpbnRmKHNjb3BlLCBzaXplb2Yoc2NvcGUpLCAiJSUldSIsIHNjb3BlaWQpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAgYWRkciA9Ci0gICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWlmYWNlLT5pZmFfYWRkciktPnNpbl9hZGRyOworICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopaWZhY2UtPmlmYV9hZGRyKS0+c2luX2FkZHI7CiAgICAgICAgICAgICByZXMgPSBJRjJJUF9GT1VORDsKLSAgICAgICAgICAgIGlwID0gKGNoYXIgKikgQ3VybF9pbmV0X250b3AoYWYsIGFkZHIsIGlwc3RyLCBzaXplb2YoaXBzdHIpKTsKKyAgICAgICAgICAgIGlwID0gQ3VybF9pbmV0X250b3AoYWYsIGFkZHIsIGlwc3RyLCBzaXplb2YoaXBzdHIpKTsKICAgICAgICAgICAgIG1zbnByaW50ZihidWYsIGJ1Zl9zaXplLCAiJXMlcyIsIGlwLCBzY29wZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0xOTAsNiArMTkwLDcgQEAKICAgc3RydWN0IHNvY2thZGRyX2luICpzOwogICBjdXJsX3NvY2tldF90IGR1bW15OwogICBzaXplX3QgbGVuOworICBjb25zdCBjaGFyICpyOwogCiAgICh2b2lkKXJlbW90ZV9zY29wZTsKICAgKHZvaWQpbG9jYWxfc2NvcGVfaWQ7CkBAIC0yMTksOSArMjIwLDExIEBACiAKICAgcyA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKSZyZXEuaWZyX2FkZHI7CiAgIG1lbWNweSgmaW4sICZzLT5zaW5fYWRkciwgc2l6ZW9mKGluKSk7Ci0gIEN1cmxfaW5ldF9udG9wKHMtPnNpbl9mYW1pbHksICZpbiwgYnVmLCBidWZfc2l6ZSk7CisgIHIgPSBDdXJsX2luZXRfbnRvcChzLT5zaW5fZmFtaWx5LCAmaW4sIGJ1ZiwgYnVmX3NpemUpOwogCiAgIHNjbG9zZShkdW1teSk7CisgIGlmKCFyKQorICAgIHJldHVybiBJRjJJUF9OT1RfRk9VTkQ7CiAgIHJldHVybiBJRjJJUF9GT1VORDsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5jCmluZGV4IGJkY2M2OWMuLmNhZDBlNTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbWFwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTk1LDggKzk1LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBpbWFwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBDVVJMY29kZSBpbWFwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOwogc3RhdGljIENVUkxjb2RlIGltYXBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1zdGF0aWMgaW50IGltYXBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgaW1hcF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIGltYXBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb3BoYXNlX2RvbmUpOwogc3RhdGljIENVUkxjb2RlIGltYXBfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIGNoYXIgKmltYXBfYXRvbShjb25zdCBjaGFyICpzdHIsIGJvb2wgZXNjYXBlX29ubHkpOwpAQCAtMTg4LDcgKzE4Nyw3IEBACiAgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX2ltYXBzOwogCiAgIC8qIFNldCB0aGUgY29ubmVjdGlvbidzIHVwZ3JhZGVkIHRvIFRMUyBmbGFnICovCi0gIGNvbm4tPnRsc191cGdyYWRlZCA9IFRSVUU7CisgIGNvbm4tPmJpdHMudGxzX3VwZ3JhZGVkID0gVFJVRTsKIH0KICNlbHNlCiAjZGVmaW5lIGltYXBfdG9faW1hcHMoeCkgQ3VybF9ub3Bfc3RtdApAQCAtNDQ0LDEwICs0NDMsOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX3N0YXJ0dGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogU2VuZCB0aGUgU1RBUlRUTFMgY29tbWFuZCAqLwotICByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJTVEFSVFRMUyIpOworICBDVVJMY29kZSByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJTVEFSVFRMUyIpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgc3RhdGUoY29ubiwgSU1BUF9TVEFSVFRMUyk7CkBAIC00NjMsMTEgKzQ2MCwxMCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBpbWFwX2Nvbm4gKmltYXBjID0gJmNvbm4tPnByb3RvLmltYXBjOwotCiAgIC8qIFN0YXJ0IHRoZSBTU0wgY29ubmVjdGlvbiAqLwotICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmaW1hcGMtPnNzbGRvbmUpOworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hcGMtPnNzbGRvbmUpOwogCiAgIGlmKCFyZXN1bHQpIHsKICAgICBpZihpbWFwYy0+c3RhdGUgIT0gSU1BUF9VUEdSQURFVExTKQpAQCAtODI2LDEwICs4MjIsOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX2xvZ291dChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCiAgIC8qIFNlbmQgdGhlIExPR09VVCBjb21tYW5kICovCi0gIHJlc3VsdCA9IGltYXBfc2VuZGYoY29ubiwgIkxPR09VVCIpOworICBDVVJMY29kZSByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJMT0dPVVQiKTsKIAogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIElNQVBfTE9HT1VUKTsKQEAgLTEzMTIsNiArMTMwNiw3IEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgSU1BUF9MSVNUOgorICAgIGNhc2UgSU1BUF9TRUFSQ0g6CiAgICAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xpc3RzZWFyY2hfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKICAgICAgIGJyZWFrOwogCkBAIC0xMzM1LDEwICsxMzMwLDYgQEAKICAgICAgIHJlc3VsdCA9IGltYXBfc3RhdGVfYXBwZW5kX2ZpbmFsX3Jlc3AoY29ubiwgaW1hcGNvZGUsIGltYXBjLT5zdGF0ZSk7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgSU1BUF9TRUFSQ0g6Ci0gICAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xpc3RzZWFyY2hfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKLSAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBJTUFQX0xPR09VVDoKICAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCiAgICAgZGVmYXVsdDoKQEAgLTEzOTcsMTAgKzEzODgsOSBAQAogfQogCiAvKiBGb3IgdGhlIElNQVAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCi1zdGF0aWMgaW50IGltYXBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCBpbWFwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uaW1hcGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmltYXBjLnBwLCBzb2Nrcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTcyMCw3ICsxNzEwLDcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogCiAgIC8qIENsZWFyIHRoZSBUTFMgdXBncmFkZWQgZmxhZyAqLwotICBjb25uLT50bHNfdXBncmFkZWQgPSBGQUxTRTsKKyAgY29ubi0+Yml0cy50bHNfdXBncmFkZWQgPSBGQUxTRTsKIAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CkBAIC0xOTY3LDcgKzE5NTcsNyBAQAogICAgICAgZW5kLS07CiAKICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBiZWdpbiwgZW5kIC0gYmVnaW4sICZpbWFwLT5tYWlsYm94LCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9DVFJMKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CkBAIC0xOTg5LDcgKzE5NzksOCBAQAogICAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CiAKICAgICAvKiBEZWNvZGUgdGhlIG5hbWUgcGFyYW1ldGVyICovCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgYmVnaW4sIHB0ciAtIGJlZ2luLCAmbmFtZSwgTlVMTCwgVFJVRSk7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgYmVnaW4sIHB0ciAtIGJlZ2luLCAmbmFtZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfQ1RSTCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMTk5OSw3ICsxOTkwLDggQEAKICAgICAgIHB0cisrOwogCiAgICAgLyogRGVjb2RlIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgKi8KLSAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBiZWdpbiwgcHRyIC0gYmVnaW4sICZ2YWx1ZSwgJnZhbHVlbGVuLCBUUlVFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBiZWdpbiwgcHRyIC0gYmVnaW4sICZ2YWx1ZSwgJnZhbHVlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9DVFJMKTsKICAgICBpZihyZXN1bHQpIHsKICAgICAgIGZyZWUobmFtZSk7CiAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjA4Nyw3ICsyMDc5LDcgQEAKIAogICBpZihjdXN0b20pIHsKICAgICAvKiBVUkwgZGVjb2RlIHRoZSBjdXN0b20gcmVxdWVzdCAqLwotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGN1c3RvbSwgMCwgJmltYXAtPmN1c3RvbSwgTlVMTCwgVFJVRSk7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgY3VzdG9tLCAwLCAmaW1hcC0+Y3VzdG9tLCBOVUxMLCBSRUpFQ1RfQ1RSTCk7CiAKICAgICAvKiBFeHRyYWN0IHRoZSBwYXJhbWV0ZXJzIGlmIHNwZWNpZmllZCAqLwogICAgIGlmKCFyZXN1bHQpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuaAppbmRleCAwZWZjZmQyLi40Nzg2ZjU2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbWFwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X250b3AuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5jCmluZGV4IDg1NTk4MWMuLjlhNWFmN2YgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxICBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X250b3AuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5oCmluZGV4IGQxNTBiYjYuLjlkM2YyMzcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5jCmluZGV4IDBkNjVhZTAuLjljODdhMDUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5jCkBAIC0xLDYgKzEsNiBAQAogLyogVGhpcyBpcyBmcm9tIHRoZSBCSU5EIDQuOS40IHJlbGVhc2UsIG1vZGlmaWVkIHRvIGNvbXBpbGUgYnkgaXRzZWxmICovCiAKLS8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorLyogQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxOSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9wdG9uLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uaAppbmRleCAwMjA5YjliLi5lNjk1YWY5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIva3JiNS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIva3JiNS5jCmluZGV4IDE0N2FiMDIuLjViZDhlNzEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2tyYjUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9rcmI1LmMKQEAgLTEsOCArMSw4IEBACiAvKiBHU1NBUEkva3JiNSBzdXBwb3J0IGZvciBGVFAgLSBsb29zZWx5IGJhc2VkIG9uIG9sZCBrcmI0LmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSMO2Z3Nrb2xhbgorICogQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IEt1bmdsaWdhIFRla25pc2thIEjDg8K2Z3Nrb2xhbgogICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDE3IERhbmllbCBTdGVuYmVyZworICogQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAxOSBEYW5pZWwgU3RlbmJlcmcKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMjAsMTAgKzMyMCw4IEBACiAgICAgT01fdWludDMyIG1pbjsKICAgICBnc3NfY3R4X2lkX3QgKmNvbnRleHQgPSBhcHBfZGF0YTsKICAgICBpZigqY29udGV4dCAhPSBHU1NfQ19OT19DT05URVhUKSB7Ci0jaWZkZWYgREVCVUdCVUlMRAotICAgICAgT01fdWludDMyIG1haiA9Ci0jZW5kaWYKLSAgICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJm1pbiwgY29udGV4dCwgR1NTX0NfTk9fQlVGRkVSKTsKKyAgICAgIE9NX3VpbnQzMiBtYWogPSBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZtaW4sIGNvbnRleHQsIEdTU19DX05PX0JVRkZFUik7CisgICAgICAodm9pZCltYWo7CiAgICAgICBERUJVR0FTU0VSVChtYWogPT0gR1NTX1NfQ09NUExFVEUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xkYXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2xkYXAuYwppbmRleCBmZDMxZmFhLi41MTJkZWY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sZGFwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGRhcC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03NSw3ICs3NSw3IEBACiAKIC8qIFVzZSBvdXIgb3duIGltcGxlbWVudGF0aW9uLiAqLwogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgbGRhcF91cmxkZXNjIHsKICAgY2hhciAgICpsdWRfaG9zdDsKICAgaW50ICAgICBsdWRfcG9ydDsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQpAQCAtOTUsMTAgKzk1LDEwIEBACiAgIHNpemVfdCAgICBsdWRfYXR0cnNfZHVwczsgLyogaG93IG1hbnkgd2VyZSBkdXAnZWQsIHRoaXMgZmllbGQgaXMgbm90IGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFsIiBzdHJ1Y3Qgc28gY2FuIG9ubHkgYmUgdXNlZCBpbiBjb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBIQVZFX0xEQVBfVVJMX1BBUlNFIGRlZmluZWQgKi8KLX0gQ1VSTF9MREFQVVJMRGVzYzsKK307CiAKICN1bmRlZiBMREFQVVJMRGVzYwotI2RlZmluZSBMREFQVVJMRGVzYyAgICAgICAgICAgICBDVVJMX0xEQVBVUkxEZXNjCisjZGVmaW5lIExEQVBVUkxEZXNjIHN0cnVjdCBsZGFwX3VybGRlc2MKIAogc3RhdGljIGludCAgX2xkYXBfdXJsX3BhcnNlKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQVVJMRGVzYyAqKmx1ZHApOwpAQCAtMTEyLDEzICsxMTIsMTkgQEAKICAgI2RlZmluZSBMREFQX1RSQUNFKHgpICAgZG8geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xkYXBfdHJhY2UoIiV1OiAiLCBfX0xJTkVfXyk7IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbGRhcF90cmFjZSB4OyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gV0hJTEVfRkFMU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAgIHN0YXRpYyB2b2lkIF9sZGFwX3RyYWNlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKICNlbHNlCiAgICNkZWZpbmUgTERBUF9UUkFDRSh4KSAgIEN1cmxfbm9wX3N0bXQKICNlbmRpZgogCisjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkgJiYgZGVmaW5lZChsZGFwX2VycjJzdHJpbmcpCisvKiBVc2UgYW5zaSBlcnJvciBzdHJpbmdzIGluIFVOSUNPREUgYnVpbGRzICovCisjdW5kZWYgbGRhcF9lcnIyc3RyaW5nCisjZGVmaW5lIGxkYXBfZXJyMnN0cmluZyBsZGFwX2VycjJzdHJpbmdBCisjZW5kaWYKKwogCiBzdGF0aWMgQ1VSTGNvZGUgQ3VybF9sZGFwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiAKQEAgLTIzMywxMyArMjM5LDEzIEBACiAgIFBUQ0hBUiBpbnBhc3MgPSBOVUxMOwogCiAgIGlmKHVzZXIgJiYgcGFzc3dkICYmIChjb25uLT5kYXRhLT5zZXQuaHR0cGF1dGggJiBDVVJMQVVUSF9CQVNJQykpIHsKLSAgICBpbnVzZXIgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSB1c2VyKTsKLSAgICBpbnBhc3MgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSBwYXNzd2QpOworICAgIGludXNlciA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSB1c2VyKTsKKyAgICBpbnBhc3MgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKikgcGFzc3dkKTsKIAogICAgIHJjID0gbGRhcF9zaW1wbGVfYmluZF9zKHNlcnZlciwgaW51c2VyLCBpbnBhc3MpOwogCi0gICAgQ3VybF91bmljb2RlZnJlZShpbnVzZXIpOwotICAgIEN1cmxfdW5pY29kZWZyZWUoaW5wYXNzKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShpbnVzZXIpOworICAgIGN1cmx4X3VuaWNvZGVmcmVlKGlucGFzcyk7CiAgIH0KICNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAgIGVsc2UgewpAQCAtMzAwLDcgKzMwNiw3IEBACiAgICAgICAgICAgbGRhcF9zc2wgPyAiZW5jcnlwdGVkIiA6ICJjbGVhcnRleHQiKTsKIAogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gIGhvc3QgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihjb25uLT5ob3N0Lm5hbWUpOworICBob3N0ID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKGNvbm4tPmhvc3QubmFtZSk7CiAgIGlmKCFob3N0KSB7CiAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtNTExLDcgKzUxNyw3IEBACiAgICAgICBzaXplX3QgbmFtZV9sZW47CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKICAgICAgIFRDSEFSICpkbiA9IGxkYXBfZ2V0X2RuKHNlcnZlciwgZW50cnlJdGVyYXRvcik7Ci0gICAgICBuYW1lID0gQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoZG4pOworICAgICAgbmFtZSA9IGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOChkbik7CiAgICAgICBpZighbmFtZSkgewogICAgICAgICBsZGFwX21lbWZyZWUoZG4pOwogCkBAIC01MjcsNyArNTMzLDcgQEAKICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIkROOiAiLCA0KTsKICAgICAgIGlmKHJlc3VsdCkgewogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gICAgICAgIEN1cmxfdW5pY29kZWZyZWUobmFtZSk7CisgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKG5hbWUpOwogI2VuZGlmCiAgICAgICAgIGxkYXBfbWVtZnJlZShkbik7CiAKQEAgLTUzOCw3ICs1NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4pOwogICAgICAgaWYocmVzdWx0KSB7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShuYW1lKTsKKyAgICAgICAgY3VybHhfdW5pY29kZWZyZWUobmFtZSk7CiAjZW5kaWYKICAgICAgICAgbGRhcF9tZW1mcmVlKGRuKTsKIApAQCAtNTQ4LDcgKzU1NCw3IEBACiAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSJcbiIsIDEpOwogICAgICAgaWYocmVzdWx0KSB7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShuYW1lKTsKKyAgICAgICAgY3VybHhfdW5pY29kZWZyZWUobmFtZSk7CiAjZW5kaWYKICAgICAgICAgbGRhcF9tZW1mcmVlKGRuKTsKIApAQCAtNTU4LDcgKzU2NCw3IEBACiAgICAgICBkbHNpemUgKz0gbmFtZV9sZW4gKyA1OwogCiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgIEN1cmxfdW5pY29kZWZyZWUobmFtZSk7CisgICAgICBjdXJseF91bmljb2RlZnJlZShuYW1lKTsKICNlbmRpZgogICAgICAgbGRhcF9tZW1mcmVlKGRuKTsKICAgICB9CkBAIC01NzAsNyArNTc2LDcgQEAKICAgICAgIEJlclZhbHVlICoqdmFsczsKICAgICAgIHNpemVfdCBhdHRyX2xlbjsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgY2hhciAqYXR0ciA9IEN1cmxfY29udmVydF90Y2hhcl90b19VVEY4KGF0dHJpYnV0ZSk7CisgICAgICBjaGFyICphdHRyID0gY3VybHhfY29udmVydF90Y2hhcl90b19VVEY4KGF0dHJpYnV0ZSk7CiAgICAgICBpZighYXR0cikgewogICAgICAgICBpZihiZXIpCiAgICAgICAgICAgYmVyX2ZyZWUoYmVyLCAwKTsKQEAgLTU5MSw3ICs1OTcsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTYwNSw3ICs2MTEsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTYxOCw3ICs2MjQsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY0MCw3ICs2NDYsNyBAQAogICAgICAgICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgICAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4odmFscyk7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoYXR0cik7CiAjZW5kaWYKICAgICAgICAgICAgICAgbGRhcF9tZW1mcmVlKGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY1Niw3ICs2NjIsNyBAQAogICAgICAgICAgICAgICBpZihyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuKHZhbHMpOwogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gICAgICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgICAgICBjdXJseF91bmljb2RlZnJlZShhdHRyKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIGxkYXBfbWVtZnJlZShhdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY3NCw3ICs2ODAsNyBAQAogICAgICAgICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgICAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4odmFscyk7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoYXR0cik7CiAjZW5kaWYKICAgICAgICAgICAgICAgbGRhcF9tZW1mcmVlKGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY5MCw3ICs2OTYsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTcwOCw3ICs3MTQsNyBAQAogCiAgICAgICAvKiBGcmVlIHRoZSBhdHRyaWJ1dGUgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gICAgICBDdXJsX3VuaWNvZGVmcmVlKGF0dHIpOworICAgICAgY3VybHhfdW5pY29kZWZyZWUoYXR0cik7CiAjZW5kaWYKICAgICAgIGxkYXBfbWVtZnJlZShhdHRyaWJ1dGUpOwogCkBAIC03NDAsNyArNzQ2LDcgQEAKICNlbmRpZiAvKiBIQVZFX0xEQVBfU1NMICYmIENVUkxfSEFTX05PVkVMTF9MREFQU0RLICovCiAKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICBDdXJsX3VuaWNvZGVmcmVlKGhvc3QpOworICBjdXJseF91bmljb2RlZnJlZShob3N0KTsKICNlbmRpZgogCiAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KQEAgLTgzOCwxMCArODQ0LDEwIEBACiBzdGF0aWMgaW50IF9sZGFwX3VybF9wYXJzZTIoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBMREFQVVJMRGVzYyAqbHVkcCkKIHsKICAgaW50IHJjID0gTERBUF9TVUNDRVNTOwotICBjaGFyICpwYXRoOwotICBjaGFyICpxdWVyeTsKICAgY2hhciAqcDsKLSAgY2hhciAqcTsKKyAgY2hhciAqcGF0aDsKKyAgY2hhciAqcSA9IE5VTEw7CisgIGNoYXIgKnF1ZXJ5ID0gTlVMTDsKICAgc2l6ZV90IGk7CiAKICAgaWYoIWNvbm4tPmRhdGEgfHwKQEAgLTg1OSwxMSArODY1LDEzIEBACiAgIGlmKCFwYXRoKQogICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKIAotICAvKiBEdXBsaWNhdGUgdGhlIHF1ZXJ5ICovCi0gIHEgPSBxdWVyeSA9IHN0cmR1cChjb25uLT5kYXRhLT5zdGF0ZS51cC5xdWVyeSk7Ci0gIGlmKCFxdWVyeSkgewotICAgIGZyZWUocGF0aCk7Ci0gICAgcmV0dXJuIExEQVBfTk9fTUVNT1JZOworICAvKiBEdXBsaWNhdGUgdGhlIHF1ZXJ5IGlmIHByZXNlbnQgKi8KKyAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXAucXVlcnkpIHsKKyAgICBxID0gcXVlcnkgPSBzdHJkdXAoY29ubi0+ZGF0YS0+c3RhdGUudXAucXVlcnkpOworICAgIGlmKCFxdWVyeSkgeworICAgICAgZnJlZShwYXRoKTsKKyAgICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKKyAgICB9CiAgIH0KIAogICAvKiBQYXJzZSB0aGUgRE4gKERpc3Rpbmd1aXNoZWQgTmFtZSkgKi8KQEAgLTg3NSw3ICs4ODMsNyBAQAogICAgIExEQVBfVFJBQ0UoKCJETiAnJXMnXG4iLCBkbikpOwogCiAgICAgLyogVW5lc2NhcGUgdGhlIEROICovCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgZG4sIDAsICZ1bmVzY2FwZWQsIE5VTEwsIEZBTFNFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBkbiwgMCwgJnVuZXNjYXBlZCwgTlVMTCwgUkVKRUNUX1pFUk8pOwogICAgIGlmKHJlc3VsdCkgewogICAgICAgcmMgPSBMREFQX05PX01FTU9SWTsKIApAQCAtODg0LDEwICs4OTIsMTAgQEAKIAogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCiAgICAgLyogQ29udmVydCB0aGUgdW5lc2NhcGVkIHN0cmluZyB0byBhIHRjaGFyICovCi0gICAgbHVkcC0+bHVkX2RuID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIodW5lc2NhcGVkKTsKKyAgICBsdWRwLT5sdWRfZG4gPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIodW5lc2NhcGVkKTsKIAogICAgIC8qIEZyZWUgdGhlIHVuZXNjYXBlZCBzdHJpbmcgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwotICAgIEN1cmxfdW5pY29kZWZyZWUodW5lc2NhcGVkKTsKKyAgICBjdXJseF91bmljb2RlZnJlZSh1bmVzY2FwZWQpOwogCiAgICAgaWYoIWx1ZHAtPmx1ZF9kbikgewogICAgICAgcmMgPSBMREFQX05PX01FTU9SWTsKQEAgLTk0MSw3ICs5NDksNyBAQAogCiAgICAgICAvKiBVbmVzY2FwZSB0aGUgYXR0cmlidXRlICovCiAgICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBhdHRyaWJ1dGVzW2ldLCAwLCAmdW5lc2NhcGVkLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX1pFUk8pOwogICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZyZWUoYXR0cmlidXRlcyk7CiAKQEAgLTk1MiwxMCArOTYwLDEwIEBACiAKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQogICAgICAgLyogQ29udmVydCB0aGUgdW5lc2NhcGVkIHN0cmluZyB0byBhIHRjaGFyICovCi0gICAgICBsdWRwLT5sdWRfYXR0cnNbaV0gPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcih1bmVzY2FwZWQpOworICAgICAgbHVkcC0+bHVkX2F0dHJzW2ldID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKHVuZXNjYXBlZCk7CiAKICAgICAgIC8qIEZyZWUgdGhlIHVuZXNjYXBlZCBzdHJpbmcgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwotICAgICAgQ3VybF91bmljb2RlZnJlZSh1bmVzY2FwZWQpOworICAgICAgY3VybHhfdW5pY29kZWZyZWUodW5lc2NhcGVkKTsKIAogICAgICAgaWYoIWx1ZHAtPmx1ZF9hdHRyc1tpXSkgewogICAgICAgICBmcmVlKGF0dHJpYnV0ZXMpOwpAQCAtMTAxMCw3ICsxMDE4LDggQEAKICAgICBMREFQX1RSQUNFKCgiZmlsdGVyICclcydcbiIsIGZpbHRlcikpOwogCiAgICAgLyogVW5lc2NhcGUgdGhlIGZpbHRlciAqLwotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIGZpbHRlciwgMCwgJnVuZXNjYXBlZCwgTlVMTCwgRkFMU0UpOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIGZpbHRlciwgMCwgJnVuZXNjYXBlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfWkVSTyk7CiAgICAgaWYocmVzdWx0KSB7CiAgICAgICByYyA9IExEQVBfTk9fTUVNT1JZOwogCkBAIC0xMDE5LDEwICsxMDI4LDEwIEBACiAKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQogICAgIC8qIENvbnZlcnQgdGhlIHVuZXNjYXBlZCBzdHJpbmcgdG8gYSB0Y2hhciAqLwotICAgIGx1ZHAtPmx1ZF9maWx0ZXIgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcih1bmVzY2FwZWQpOworICAgIGx1ZHAtPmx1ZF9maWx0ZXIgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIodW5lc2NhcGVkKTsKIAogICAgIC8qIEZyZWUgdGhlIHVuZXNjYXBlZCBzdHJpbmcgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwotICAgIEN1cmxfdW5pY29kZWZyZWUodW5lc2NhcGVkKTsKKyAgICBjdXJseF91bmljb2RlZnJlZSh1bmVzY2FwZWQpOwogCiAgICAgaWYoIWx1ZHAtPmx1ZF9maWx0ZXIpIHsKICAgICAgIHJjID0gTERBUF9OT19NRU1PUlk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGxpc3QuYwppbmRleCBmODc2OWMyLi5lN2M2ZjUxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTE0NCw1NCArMTQ0LDMgQEAKIHsKICAgcmV0dXJuIGxpc3QtPnNpemU7CiB9Ci0KLS8qCi0gKiBAdW5pdHRlc3Q6IDEzMDAKLSAqLwotdm9pZCBDdXJsX2xsaXN0X21vdmUoc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QsIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9sbGlzdCAqdG9fbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKnRvX2UpCi17Ci0gIC8qIFJlbW92ZSBlbGVtZW50IGZyb20gbGlzdCAqLwotICBpZihlID09IE5VTEwgfHwgbGlzdC0+c2l6ZSA9PSAwKQotICAgIHJldHVybjsKLQotICBpZihlID09IGxpc3QtPmhlYWQpIHsKLSAgICBsaXN0LT5oZWFkID0gZS0+bmV4dDsKLQotICAgIGlmKGxpc3QtPmhlYWQgPT0gTlVMTCkKLSAgICAgIGxpc3QtPnRhaWwgPSBOVUxMOwotICAgIGVsc2UKLSAgICAgIGUtPm5leHQtPnByZXYgPSBOVUxMOwotICB9Ci0gIGVsc2UgewotICAgIGUtPnByZXYtPm5leHQgPSBlLT5uZXh0OwotICAgIGlmKCFlLT5uZXh0KQotICAgICAgbGlzdC0+dGFpbCA9IGUtPnByZXY7Ci0gICAgZWxzZQotICAgICAgZS0+bmV4dC0+cHJldiA9IGUtPnByZXY7Ci0gIH0KLQotICAtLWxpc3QtPnNpemU7Ci0KLSAgLyogQWRkIGVsZW1lbnQgdG8gdG9fbGlzdCBhZnRlciB0b19lICovCi0gIGlmKHRvX2xpc3QtPnNpemUgPT0gMCkgewotICAgIHRvX2xpc3QtPmhlYWQgPSBlOwotICAgIHRvX2xpc3QtPmhlYWQtPnByZXYgPSBOVUxMOwotICAgIHRvX2xpc3QtPmhlYWQtPm5leHQgPSBOVUxMOwotICAgIHRvX2xpc3QtPnRhaWwgPSBlOwotICB9Ci0gIGVsc2UgewotICAgIGUtPm5leHQgPSB0b19lLT5uZXh0OwotICAgIGUtPnByZXYgPSB0b19lOwotICAgIGlmKHRvX2UtPm5leHQpIHsKLSAgICAgIHRvX2UtPm5leHQtPnByZXYgPSBlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHRvX2xpc3QtPnRhaWwgPSBlOwotICAgIH0KLSAgICB0b19lLT5uZXh0ID0gZTsKLSAgfQotCi0gICsrdG9fbGlzdC0+c2l6ZTsKLX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5oCmluZGV4IGI5ZDRjODkuLjAxNzhjNDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGxpc3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDcsNyArNDcsNCBAQAogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOwogc2l6ZV90IEN1cmxfbGxpc3RfY291bnQoc3RydWN0IGN1cmxfbGxpc3QgKik7CiB2b2lkIEN1cmxfbGxpc3RfZGVzdHJveShzdHJ1Y3QgY3VybF9sbGlzdCAqLCB2b2lkICopOwotdm9pZCBDdXJsX2xsaXN0X21vdmUoc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqKTsKLQogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0xMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21kNC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKaW5kZXggZTdjNzdiYy4uMGZhYjUyZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKQEAgLTEsNSArMSwyMzEgQEAKLS8qCi0gKiAhY2hlY2tzcmMhIGRpc2FibGUgQ09QWVJJR0hUCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpCisKKyNpbmNsdWRlICJjdXJsX21kNC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKKyNpZmRlZiBVU0VfT1BFTlNTTAorI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKyNpZiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9NQUpPUikgJiYgKE9QRU5TU0xfVkVSU0lPTl9NQUpPUiA+PSAzKQorLyogT3BlblNTTCAzLjAuMCBtYXJrcyB0aGUgTUQ0IGZ1bmN0aW9ucyBhcyBkZXByZWNhdGVkICovCisjZGVmaW5lIE9QRU5TU0xfTk9fTUQ0CisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfT1BFTlNTTCAqLworCisjaWZkZWYgVVNFX01CRURUTFMKKyNpbmNsdWRlIDxtYmVkdGxzL2NvbmZpZy5oPgorI2luY2x1ZGUgPG1iZWR0bHMvdmVyc2lvbi5oPgorCisjaWYoTUJFRFRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAyMDcwMDAwKQorICAjZGVmaW5lIEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUworI2VuZGlmCisjZW5kaWYgLyogVVNFX01CRURUTFMgKi8KKworI2lmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisKKyNpbmNsdWRlIDxuZXR0bGUvbWQ0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIHN0cnVjdCBtZDRfY3R4IE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgbWQ0X2luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgbWQ0X3VwZGF0ZShjdHgsIHNpemUsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDRfQ1RYICpjdHgpCit7CisgIG1kNF9kaWdlc3QoY3R4LCBNRDRfRElHRVNUX1NJWkUsIHJlc3VsdCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKworI2luY2x1ZGUgPGdjcnlwdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBnY3J5X21kX2hkX3QgTUQ0X0NUWDsKKworc3RhdGljIHZvaWQgTUQ0X0luaXQoTUQ0X0NUWCAqY3R4KQoreworICBnY3J5X21kX29wZW4oY3R4LCBHQ1JZX01EX01ENCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9VcGRhdGUoTUQ0X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgIGdjcnlfbWRfd3JpdGUoKmN0eCwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIE1ENF9DVFggKmN0eCkKK3sKKyAgbWVtY3B5KHJlc3VsdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCBNRDRfRElHRVNUX0xFTkdUSCk7CisgIGdjcnlfbWRfY2xvc2UoKmN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX09QRU5TU0wpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTUQ0KQorLyogV2hlbiBPcGVuU1NMIGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhlIE1ENC1mdW5jdGlvbnMgZnJvbSBPcGVuU1NMICovCisjaW5jbHVkZSA8b3BlbnNzbC9tZDQuaD4KKworI2VsaWYgKGRlZmluZWQoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCisgICAgICAgICAgICAgIChfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTA0MCkpIHx8IFwKKyAgICAgIChkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpICYmIFwKKyAgICAgICAgICAgICAgKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMjAwMDApKQorCisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBDQ19NRDRfQ1RYIE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgKHZvaWQpQ0NfTUQ0X0luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgKHZvaWQpQ0NfTUQ0X1VwZGF0ZShjdHgsIGRhdGEsIChDQ19MT05HKXNpemUpOworfQorCitzdGF0aWMgdm9pZCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDRfQ1RYICpjdHgpCit7CisgICh2b2lkKUNDX01ENF9GaW5hbChyZXN1bHQsIGN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKworI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdHJ1Y3QgbWQ0X2N0eCB7CisgIEhDUllQVFBST1YgaENyeXB0UHJvdjsKKyAgSENSWVBUSEFTSCBoSGFzaDsKK307Cit0eXBlZGVmIHN0cnVjdCBtZDRfY3R4IE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgY3R4LT5oQ3J5cHRQcm92ID0gMDsKKyAgY3R4LT5oSGFzaCA9IDA7CisKKyAgaWYoQ3J5cHRBY3F1aXJlQ29udGV4dCgmY3R4LT5oQ3J5cHRQcm92LCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQgfCBDUllQVF9TSUxFTlQpKSB7CisgICAgQ3J5cHRDcmVhdGVIYXNoKGN0eC0+aENyeXB0UHJvdiwgQ0FMR19NRDQsIDAsIDAsICZjdHgtPmhIYXNoKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBNRDRfVXBkYXRlKE1ENF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworICBDcnlwdEhhc2hEYXRhKGN0eC0+aEhhc2gsIChCWVRFICopZGF0YSwgKHVuc2lnbmVkIGludCkgc2l6ZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIE1ENF9DVFggKmN0eCkKK3sKKyAgdW5zaWduZWQgbG9uZyBsZW5ndGggPSAwOworCisgIENyeXB0R2V0SGFzaFBhcmFtKGN0eC0+aEhhc2gsIEhQX0hBU0hWQUwsIE5VTEwsICZsZW5ndGgsIDApOworICBpZihsZW5ndGggPT0gTUQ0X0RJR0VTVF9MRU5HVEgpCisgICAgQ3J5cHRHZXRIYXNoUGFyYW0oY3R4LT5oSGFzaCwgSFBfSEFTSFZBTCwgcmVzdWx0LCAmbGVuZ3RoLCAwKTsKKworICBpZihjdHgtPmhIYXNoKQorICAgIENyeXB0RGVzdHJveUhhc2goY3R4LT5oSGFzaCk7CisKKyAgaWYoY3R4LT5oQ3J5cHRQcm92KQorICAgIENyeXB0UmVsZWFzZUNvbnRleHQoY3R4LT5oQ3J5cHRQcm92LCAwKTsKK30KKworI2VsaWYoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgZGVmaW5lZChNQkVEVExTX01ENF9DKSkKKworI2luY2x1ZGUgPG1iZWR0bHMvbWQ0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdHJ1Y3QgbWQ0X2N0eCB7CisgIHZvaWQgKmRhdGE7CisgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKK307Cit0eXBlZGVmIHN0cnVjdCBtZDRfY3R4IE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgY3R4LT5kYXRhID0gTlVMTDsKKyAgY3R4LT5zaXplID0gMDsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgaWYoY3R4LT5kYXRhID09IE5VTEwpIHsKKyAgICBjdHgtPmRhdGEgPSBtYWxsb2Moc2l6ZSk7CisgICAgaWYoY3R4LT5kYXRhICE9IE5VTEwpIHsKKyAgICAgIG1lbWNweShjdHgtPmRhdGEsIGRhdGEsIHNpemUpOworICAgICAgY3R4LT5zaXplID0gc2l6ZTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwgTUQ0X0NUWCAqY3R4KQoreworICBpZihjdHgtPmRhdGEgIT0gTlVMTCkgeworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgICBtYmVkdGxzX21kNChjdHgtPmRhdGEsIGN0eC0+c2l6ZSwgcmVzdWx0KTsKKyNlbHNlCisgICAgKHZvaWQpIG1iZWR0bHNfbWQ0X3JldChjdHgtPmRhdGEsIGN0eC0+c2l6ZSwgcmVzdWx0KTsKKyNlbmRpZgorCisgICAgQ3VybF9zYWZlZnJlZShjdHgtPmRhdGEpOworICAgIGN0eC0+c2l6ZSA9IDA7CisgIH0KK30KKworI2Vsc2UKKy8qIFdoZW4gbm8gb3RoZXIgY3J5cHRvIGxpYnJhcnkgaXMgYXZhaWxhYmxlLCBvciB0aGUgY3J5cHRvIGxpYnJhcnkgZG9lc24ndAorICogc3VwcG9ydCBNRDQsIHdlIHVzZSB0aGlzIGNvZGUgc2VnbWVudCB0aGlzIGltcGxlbWVudGF0aW9uIG9mIGl0CisgKgogICogVGhpcyBpcyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCiAgKiBNRDQgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtIChSRkMgMTMyMCkuCiAgKgpAQCAtMzYsMzEgKzI2MiwxOSBAQAogICogY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotLyogVGhlIE5TUywgT1MvNDAwLCBhbmQgd2hlbiBub3QgaW5jbHVkZWQsIE9wZW5TU0wgYW5kIG1iZWQgVExTIGNyeXB0bwotICogbGlicmFyaWVzIGRvIG5vdCBwcm92aWRlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0sIHNvIHdlIHVzZSB0aGlzCi0gKiBpbXBsZW1lbnRhdGlvbiBvZiBpdCAqLwotI2lmIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX01ENCkpIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykpCi0KLSNpbmNsdWRlICJjdXJsX21kNC5oIgotI2luY2x1ZGUgIndhcm5sZXNzLmgiCi0KLSNpZm5kZWYgSEFWRV9PUEVOU1NMCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogLyogQW55IDMyLWJpdCBvciB3aWRlciB1bnNpZ25lZCBpbnRlZ2VyIGRhdGEgdHlwZSB3aWxsIGRvICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCBNRDRfdTMycGx1czsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IG1kNF9jdHggewogICBNRDRfdTMycGx1cyBsbywgaGk7CiAgIE1ENF91MzJwbHVzIGEsIGIsIGMsIGQ7CiAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsKICAgTUQ0X3UzMnBsdXMgYmxvY2tbMTZdOwotfSBNRDRfQ1RYOworfTsKK3R5cGVkZWYgc3RydWN0IG1kNF9jdHggTUQ0X0NUWDsKIAogc3RhdGljIHZvaWQgTUQ0X0luaXQoTUQ0X0NUWCAqY3R4KTsKIHN0YXRpYyB2b2lkIE1ENF9VcGRhdGUoTUQ0X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwpAQCAtMjk4LDE2ICs1MTIsMTYgQEAKICAgbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ1JZUFRPIExJQlMgKi8KIAotdm9pZCBDdXJsX21kNGl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBsZW4pCit2b2lkIEN1cmxfbWQ0aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKQogewogICBNRDRfQ1RYIGN0eDsKKwogICBNRDRfSW5pdCgmY3R4KTsKICAgTUQ0X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKGxlbikpOwogICBNRDRfRmluYWwob3V0cHV0LCAmY3R4KTsKIH0KIAotI2VuZGlmIC8qIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8Ci0gICAgKGRlZmluZWQoVVNFX09QRU5TU0wpICYmIGRlZmluZWQoT1BFTlNTTF9OT19NRDQpKSB8fAotICAgIChkZWZpbmVkKFVTRV9NQkVEVExTKSAmJiAhZGVmaW5lZChNQkVEVExTX01ENF9DKSkgKi8KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21kNS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKaW5kZXggMmI4MWNhNC4uNTU3YTUxZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMwLDYgKzMwLDE0IEBACiAjaW5jbHVkZSAiY3VybF9obWFjLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKIAorI2lmZGVmIFVTRV9NQkVEVExTCisjaW5jbHVkZSA8bWJlZHRscy92ZXJzaW9uLmg+CisKKyNpZihNQkVEVExTX1ZFUlNJT05fTlVNQkVSID49IDB4MDIwNzAwMDApCisgICNkZWZpbmUgSEFTX01CRURUTFNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TCisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfTUJFRFRMUyAqLworCiAjaWYgZGVmaW5lZChVU0VfR05VVExTX05FVFRMRSkKIAogI2luY2x1ZGUgPG5ldHRsZS9tZDUuaD4KQEAgLTUxLDcgKzU5LDcgQEAKICAgbWQ1X3VwZGF0ZShjdHgsIGlucHV0TGVuLCBpbnB1dCk7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgbWQ1X2RpZ2VzdChjdHgsIDE2LCBkaWdlc3QpOwogfQpAQCAtNzcsNyArODUsNyBAQAogICBnY3J5X21kX3dyaXRlKCpjdHgsIGlucHV0LCBpbnB1dExlbik7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgbWVtY3B5KGRpZ2VzdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCAxNik7CiAgIGdjcnlfbWRfY2xvc2UoKmN0eCk7CkBAIC05MCw2ICs5OCw0NiBAQAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAorI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKKworI2luY2x1ZGUgPG1iZWR0bHMvbWQ1Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIG1iZWR0bHNfbWQ1X2NvbnRleHQgTUQ1X0NUWDsKKworc3RhdGljIHZvaWQgTUQ1X0luaXQoTUQ1X0NUWCAqY3R4KQoreworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19tZDVfc3RhcnRzKGN0eCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19tZDVfc3RhcnRzX3JldChjdHgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIE1ENV9VcGRhdGUoTUQ1X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19tZDVfdXBkYXRlKGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbHNlCisgICh2b2lkKSBtYmVkdGxzX21kNV91cGRhdGVfcmV0KGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBNRDVfQ1RYICpjdHgpCit7CisjaWYgIWRlZmluZWQoSEFTX01CRURUTFNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TKQorICBtYmVkdGxzX21kNV9maW5pc2goY3R4LCBkaWdlc3QpOworI2Vsc2UKKyAgKHZvaWQpIG1iZWR0bHNfbWQ1X2ZpbmlzaF9yZXQoY3R4LCBkaWdlc3QpOworI2VuZGlmCit9CisKICNlbGlmIChkZWZpbmVkKF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCkgJiYgXAogICAgICAgICAgICAgICAoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwNDApKSB8fCBcCiAgICAgICAoZGVmaW5lZChfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCkBAIC0xMTksMjcgKzE2NywyOCBAQAogICBDQ19NRDVfVXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0TGVuKTsKIH0KIAotc3RhdGljIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgTUQ1X0NUWCAqY3R4KQorc3RhdGljIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgTUQ1X0NUWCAqY3R4KQogewogICBDQ19NRDVfRmluYWwoZGlnZXN0LCBjdHgpOwogfQogCi0jZWxpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChDVVJMX1dJTkRPV1NfQVBQKQorI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQogCiAjaW5jbHVkZSA8d2luY3J5cHQuaD4KICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IG1kNV9jdHggewogICBIQ1JZUFRQUk9WIGhDcnlwdFByb3Y7CiAgIEhDUllQVEhBU0ggaEhhc2g7Ci19IE1ENV9DVFg7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbWQ1X2N0eCBNRDVfQ1RYOwogCiBzdGF0aWMgdm9pZCBNRDVfSW5pdChNRDVfQ1RYICpjdHgpCiB7Ci0gIGlmKENyeXB0QWNxdWlyZUNvbnRleHQoJmN0eC0+aENyeXB0UHJvdiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkgeworICBpZihDcnlwdEFjcXVpcmVDb250ZXh0KCZjdHgtPmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsIFBST1ZfUlNBX0ZVTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCB8IENSWVBUX1NJTEVOVCkpIHsKICAgICBDcnlwdENyZWF0ZUhhc2goY3R4LT5oQ3J5cHRQcm92LCBDQUxHX01ENSwgMCwgMCwgJmN0eC0+aEhhc2gpOwogICB9CiB9CkBAIC0xNTEsNyArMjAwLDcgQEAKICAgQ3J5cHRIYXNoRGF0YShjdHgtPmhIYXNoLCAodW5zaWduZWQgY2hhciAqKWlucHV0LCBpbnB1dExlbiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgdW5zaWduZWQgbG9uZyBsZW5ndGggPSAwOwogICBDcnlwdEdldEhhc2hQYXJhbShjdHgtPmhIYXNoLCBIUF9IQVNIVkFMLCBOVUxMLCAmbGVuZ3RoLCAwKTsKQEAgLTE2NCw3ICsyMTMsOSBAQAogfQogCiAjZWxzZQorCiAvKiBXaGVuIG5vIG90aGVyIGNyeXB0byBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcyBjb2RlIHNlZ21lbnQgKi8KKwogLyoKICAqIFRoaXMgaXMgYW4gT3BlblNTTC1jb21wYXRpYmxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLgogICogTUQ1IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSAoUkZDIDEzMjEpLgpAQCAtMjExLDEyICsyNjIsMTMgQEAKIC8qIEFueSAzMi1iaXQgb3Igd2lkZXIgdW5zaWduZWQgaW50ZWdlciBkYXRhIHR5cGUgd2lsbCBkbyAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgTUQ1X3UzMnBsdXM7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBtZDVfY3R4IHsKICAgTUQ1X3UzMnBsdXMgbG8sIGhpOwogICBNRDVfdTMycGx1cyBhLCBiLCBjLCBkOwogICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07CiAgIE1ENV91MzJwbHVzIGJsb2NrWzE2XTsKLX0gTUQ1X0NUWDsKK307Cit0eXBlZGVmIHN0cnVjdCBtZDVfY3R4IE1ENV9DVFg7CiAKIHN0YXRpYyB2b2lkIE1ENV9Jbml0KE1ENV9DVFggKmN0eCk7CiBzdGF0aWMgdm9pZCBNRDVfVXBkYXRlKE1ENV9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKQEAgLTQ3OCw3ICs1MzAsNyBAQAogCiAjZW5kaWYgLyogQ1JZUFRPIExJQlMgKi8KIAotY29uc3QgSE1BQ19wYXJhbXMgQ3VybF9ITUFDX01ENVtdID0geworY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zIEN1cmxfSE1BQ19NRDVbXSA9IHsKICAgewogICAgIC8qIEhhc2ggaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICovCiAgICAgQ1VSTFhfRlVOQ1RJT05fQ0FTVChITUFDX2hpbml0X2Z1bmMsIE1ENV9Jbml0KSwKQEAgLTQ5NSw3ICs1NDcsNyBAQAogICB9CiB9OwogCi1jb25zdCBNRDVfcGFyYW1zIEN1cmxfRElHRVNUX01ENVtdID0geworY29uc3Qgc3RydWN0IE1ENV9wYXJhbXMgQ3VybF9ESUdFU1RfTUQ1W10gPSB7CiAgIHsKICAgICAvKiBEaWdlc3QgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KICAgICBDVVJMWF9GVU5DVElPTl9DQVNUKEN1cmxfTUQ1X2luaXRfZnVuYywgTUQ1X0luaXQpLApAQCAtNTEzLDE4ICs1NjUsMTkgQEAKIC8qCiAgKiBAdW5pdHRlc3Q6IDE2MDEKICAqLwotdm9pZCBDdXJsX21kNWl0KHVuc2lnbmVkIGNoYXIgKm91dGJ1ZmZlciwgLyogMTYgYnl0ZXMgKi8KLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCkKK3ZvaWQgQ3VybF9tZDVpdCh1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsZW4pCiB7CiAgIE1ENV9DVFggY3R4OworCiAgIE1ENV9Jbml0KCZjdHgpOwotICBNRDVfVXBkYXRlKCZjdHgsIGlucHV0LCBjdXJseF91enRvdWkoc3RybGVuKChjaGFyICopaW5wdXQpKSk7CisgIE1ENV9VcGRhdGUoJmN0eCwgaW5wdXQsIGN1cmx4X3V6dG91aShsZW4pKTsKICAgTUQ1X0ZpbmFsKG91dGJ1ZmZlciwgJmN0eCk7CiB9CiAKLU1ENV9jb250ZXh0ICpDdXJsX01ENV9pbml0KGNvbnN0IE1ENV9wYXJhbXMgKm1kNXBhcmFtcykKK3N0cnVjdCBNRDVfY29udGV4dCAqQ3VybF9NRDVfaW5pdChjb25zdCBzdHJ1Y3QgTUQ1X3BhcmFtcyAqbWQ1cGFyYW1zKQogewotICBNRDVfY29udGV4dCAqY3R4dDsKKyAgc3RydWN0IE1ENV9jb250ZXh0ICpjdHh0OwogCiAgIC8qIENyZWF0ZSBNRDUgY29udGV4dCAqLwogICBjdHh0ID0gbWFsbG9jKHNpemVvZigqY3R4dCkpOwpAQCAtNTQ2LDcgKzU5OSw3IEBACiAgIHJldHVybiBjdHh0OwogfQogCi1DVVJMY29kZSBDdXJsX01ENV91cGRhdGUoTUQ1X2NvbnRleHQgKmNvbnRleHQsCitDVVJMY29kZSBDdXJsX01ENV91cGRhdGUoc3RydWN0IE1ENV9jb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKQEAgLTU1NSw3ICs2MDgsNyBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLUNVUkxjb2RlIEN1cmxfTUQ1X2ZpbmFsKE1ENV9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCitDVVJMY29kZSBDdXJsX01ENV9maW5hbChzdHJ1Y3QgTUQ1X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCkKIHsKICAgKCpjb250ZXh0LT5tZDVfaGFzaC0+bWQ1X2ZpbmFsX2Z1bmMpKHJlc3VsdCwgY29udGV4dC0+bWQ1X2hhc2hjdHgpOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWVtZGVidWcuYwppbmRleCBlZGU2MDA5Li4xYzZiMTUxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21lbWRlYnVnLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMyOCw3ICszMjgsNyBAQAogICAgIChDdXJsX2NmcmVlKShtZW0pOwogICB9CiAKLSAgaWYoc291cmNlKQorICBpZihzb3VyY2UgJiYgcHRyKQogICAgIGN1cmxfZGJnX2xvZygiTUVNICVzOiVkIGZyZWUoJXApXG4iLCBzb3VyY2UsIGxpbmUsICh2b2lkICopcHRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWVtZGVidWcuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21lbWRlYnVnLmgKaW5kZXggNTIzNmY2MC4uN2NhNDQyNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWVtZGVidWcuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5oCkBAIC0xNjksNiArMTY5LDYgQEAKICAqLwogCiAjZGVmaW5lIEN1cmxfc2FmZWZyZWUocHRyKSBcCi0gIGRvIHsgZnJlZSgocHRyKSk7IChwdHIpID0gTlVMTDt9IFdISUxFX0ZBTFNFCisgIGRvIHsgZnJlZSgocHRyKSk7IChwdHIpID0gTlVMTDt9IHdoaWxlKDApCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NRU1ERUJVR19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmMKaW5kZXggMjEzNWY3Mi4uNmE5YjY0YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWltZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAibWltZS5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAKQEAgLTUyLDYgKzUzLDEwIEBACiAKIAogI2RlZmluZSBSRUFEX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICgoc2l6ZV90KSAtMSkKKyNkZWZpbmUgU1RPUF9GSUxMSU5HICAgICAgICAgICAgICAgICAgICAoKHNpemVfdCkgLTIpCisKK3N0YXRpYyBzaXplX3QgbWltZV9zdWJwYXJ0c19yZWFkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSwgYm9vbCAqaGFzcmVhZCk7CiAKIC8qIEVuY29kZXJzLiAqLwogc3RhdGljIHNpemVfdCBlbmNvZGVyX25vcF9yZWFkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGJvb2wgYXRlb2YsCkBAIC02Niw3ICs3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX21pbWVwYXJ0ICpwYXJ0KTsKIHN0YXRpYyBjdXJsX29mZl90IGVuY29kZXJfcXBfc2l6ZShjdXJsX21pbWVwYXJ0ICpwYXJ0KTsKIAotc3RhdGljIGNvbnN0IG1pbWVfZW5jb2RlciBlbmNvZGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtaW1lX2VuY29kZXIgZW5jb2RlcnNbXSA9IHsKICAgeyJiaW5hcnkiLCBlbmNvZGVyX25vcF9yZWFkLCBlbmNvZGVyX25vcF9zaXplfSwKICAgeyI4Yml0IiwgZW5jb2Rlcl9ub3BfcmVhZCwgZW5jb2Rlcl9ub3Bfc2l6ZX0sCiAgIHsiN2JpdCIsIGVuY29kZXJfN2JpdF9yZWFkLCBlbmNvZGVyX25vcF9zaXplfSwKQEAgLTI2NCw3ICsyNjksOCBAQAogCiAKIC8qIFNldCByZWFkYmFjayBzdGF0ZS4gKi8KLXN0YXRpYyB2b2lkIG1pbWVzZXRzdGF0ZShtaW1lX3N0YXRlICpzdGF0ZSwgZW51bSBtaW1lc3RhdGUgdG9rLCB2b2lkICpwdHIpCitzdGF0aWMgdm9pZCBtaW1lc2V0c3RhdGUoc3RydWN0IG1pbWVfc3RhdGUgKnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWltZXN0YXRlIHRvaywgdm9pZCAqcHRyKQogewogICBzdGF0ZS0+c3RhdGUgPSB0b2s7CiAgIHN0YXRlLT5wdHIgPSBwdHI7CkBAIC0zMzcsNyArMzQzLDcgQEAKIH0KIAogLyogSW5pdGlhbGl6ZSBkYXRhIGVuY29kZXIgc3RhdGUuICovCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2VuY29kZXJfc3RhdGUobWltZV9lbmNvZGVyX3N0YXRlICpwKQorc3RhdGljIHZvaWQgY2xlYW51cF9lbmNvZGVyX3N0YXRlKHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgKnApCiB7CiAgIHAtPnBvcyA9IDA7CiAgIHAtPmJ1ZmJlZyA9IDA7CkBAIC0zNDcsMTcgKzM1MywyMiBAQAogCiAvKiBEdW1teSBlbmNvZGVyLiBUaGlzIGlzIHVzZWQgZm9yIDhiaXQgYW5kIGJpbmFyeSBjb250ZW50IGVuY29kaW5ncy4gKi8KIHN0YXRpYyBzaXplX3QgZW5jb2Rlcl9ub3BfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBib29sIGF0ZW9mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfbWltZXBhcnQgKnBhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQpCiB7Ci0gIG1pbWVfZW5jb2Rlcl9zdGF0ZSAqc3QgPSAmcGFydC0+ZW5jc3RhdGU7CisgIHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOwogICBzaXplX3QgaW5zaXplID0gc3QtPmJ1ZmVuZCAtIHN0LT5idWZiZWc7CiAKICAgKHZvaWQpIGF0ZW9mOwogCisgIGlmKCFzaXplKQorICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CisKICAgaWYoc2l6ZSA+IGluc2l6ZSkKICAgICBzaXplID0gaW5zaXplOworCiAgIGlmKHNpemUpCi0gICAgbWVtY3B5KGJ1ZmZlciwgc3QtPmJ1Ziwgc2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgc3QtPmJ1ZiArIHN0LT5idWZiZWcsIHNpemUpOworCiAgIHN0LT5idWZiZWcgKz0gc2l6ZTsKICAgcmV0dXJuIHNpemU7CiB9CkBAIC0zNzIsMTEgKzM4MywxNCBAQAogc3RhdGljIHNpemVfdCBlbmNvZGVyXzdiaXRfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBib29sIGF0ZW9mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX21pbWVwYXJ0ICpwYXJ0KQogewotICBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOworICBzdHJ1Y3QgbWltZV9lbmNvZGVyX3N0YXRlICpzdCA9ICZwYXJ0LT5lbmNzdGF0ZTsKICAgc2l6ZV90IGN1cnNpemUgPSBzdC0+YnVmZW5kIC0gc3QtPmJ1ZmJlZzsKIAogICAodm9pZCkgYXRlb2Y7CiAKKyAgaWYoIXNpemUpCisgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKwogICBpZihzaXplID4gY3Vyc2l6ZSkKICAgICBzaXplID0gY3Vyc2l6ZTsKIApAQCAtMzk1LDcgKzQwOSw3IEBACiBzdGF0aWMgc2l6ZV90IGVuY29kZXJfYmFzZTY0X3JlYWQoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgYm9vbCBhdGVvZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9taW1lcGFydCAqcGFydCkKIHsKLSAgbWltZV9lbmNvZGVyX3N0YXRlICpzdCA9ICZwYXJ0LT5lbmNzdGF0ZTsKKyAgc3RydWN0IG1pbWVfZW5jb2Rlcl9zdGF0ZSAqc3QgPSAmcGFydC0+ZW5jc3RhdGU7CiAgIHNpemVfdCBjdXJzaXplID0gMDsKICAgaW50IGk7CiAgIGNoYXIgKnB0ciA9IGJ1ZmZlcjsKQEAgLTQwNCw4ICs0MTgsMTEgQEAKICAgICAvKiBMaW5lIGZ1bGwgPyAqLwogICAgIGlmKHN0LT5wb3MgPiBNQVhfRU5DT0RFRF9MSU5FX0xFTkdUSCAtIDQpIHsKICAgICAgIC8qIFllcywgd2UgbmVlZCAyIGNoYXJhY3RlcnMgZm9yIENSTEYuICovCi0gICAgICBpZihzaXplIDwgMikKKyAgICAgIGlmKHNpemUgPCAyKSB7CisgICAgICAgIGlmKCFjdXJzaXplKQorICAgICAgICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CiAgICAgICAgIGJyZWFrOworICAgICAgfQogICAgICAgKnB0cisrID0gJ1xyJzsKICAgICAgICpwdHIrKyA9ICdcbic7CiAgICAgICBzdC0+cG9zID0gMDsKQEAgLTQxNCw3ICs0MzEsMTIgQEAKICAgICB9CiAKICAgICAvKiBCZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBhbmQgaW5wdXQgZGF0YSBmb3IgYSBiYXNlNjQgZ3JvdXAuICovCi0gICAgaWYoc2l6ZSA8IDQgfHwgc3QtPmJ1ZmVuZCAtIHN0LT5idWZiZWcgPCAzKQorICAgIGlmKHNpemUgPCA0KSB7CisgICAgICBpZighY3Vyc2l6ZSkKKyAgICAgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZihzdC0+YnVmZW5kIC0gc3QtPmJ1ZmJlZyA8IDMpCiAgICAgICBicmVhazsKIAogICAgIC8qIEVuY29kZSB0aHJlZSBieXRlcyBhcyBmb3VyIGNoYXJhY3RlcnMuICovCkBAIC00MzEsMjUgKzQ1MywzMSBAQAogICB9CiAKICAgLyogSWYgYXQgZW9mLCB3ZSBoYXZlIHRvIGZsdXNoIHRoZSBidWZmZXJlZCBkYXRhLiAqLwotICBpZihhdGVvZiAmJiBzaXplID49IDQpIHsKLSAgICAvKiBCdWZmZXJlZCBkYXRhIHNpemUgY2FuIG9ubHkgYmUgMCwgMSBvciAyLiAqLwotICAgIHB0clsyXSA9IHB0clszXSA9ICc9JzsKLSAgICBpID0gMDsKLSAgICBzd2l0Y2goc3QtPmJ1ZmVuZCAtIHN0LT5idWZiZWcpIHsKLSAgICBjYXNlIDI6Ci0gICAgICBpID0gKHN0LT5idWZbc3QtPmJ1ZmJlZyArIDFdICYgMHhGRikgPDwgODsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSAxOgotICAgICAgaSB8PSAoc3QtPmJ1ZltzdC0+YnVmYmVnXSAmIDB4RkYpIDw8IDE2OwotICAgICAgcHRyWzBdID0gYmFzZTY0WyhpID4+IDE4KSAmIDB4M0ZdOwotICAgICAgcHRyWzFdID0gYmFzZTY0WyhpID4+IDEyKSAmIDB4M0ZdOwotICAgICAgaWYoKytzdC0+YnVmYmVnICE9IHN0LT5idWZlbmQpIHsKLSAgICAgICAgcHRyWzJdID0gYmFzZTY0WyhpID4+IDYpICYgMHgzRl07Ci0gICAgICAgIHN0LT5idWZiZWcrKzsKKyAgaWYoYXRlb2YpIHsKKyAgICBpZihzaXplIDwgNCkgeworICAgICAgaWYoIWN1cnNpemUpCisgICAgICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogQnVmZmVyZWQgZGF0YSBzaXplIGNhbiBvbmx5IGJlIDAsIDEgb3IgMi4gKi8KKyAgICAgIHB0clsyXSA9IHB0clszXSA9ICc9JzsKKyAgICAgIGkgPSAwOworICAgICAgc3dpdGNoKHN0LT5idWZlbmQgLSBzdC0+YnVmYmVnKSB7CisgICAgICBjYXNlIDI6CisgICAgICAgIGkgPSAoc3QtPmJ1ZltzdC0+YnVmYmVnICsgMV0gJiAweEZGKSA8PCA4OworICAgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgICAgY2FzZSAxOgorICAgICAgICBpIHw9IChzdC0+YnVmW3N0LT5idWZiZWddICYgMHhGRikgPDwgMTY7CisgICAgICAgIHB0clswXSA9IGJhc2U2NFsoaSA+PiAxOCkgJiAweDNGXTsKKyAgICAgICAgcHRyWzFdID0gYmFzZTY0WyhpID4+IDEyKSAmIDB4M0ZdOworICAgICAgICBpZigrK3N0LT5idWZiZWcgIT0gc3QtPmJ1ZmVuZCkgeworICAgICAgICAgIHB0clsyXSA9IGJhc2U2NFsoaSA+PiA2KSAmIDB4M0ZdOworICAgICAgICAgIHN0LT5idWZiZWcrKzsKKyAgICAgICAgfQorICAgICAgICBjdXJzaXplICs9IDQ7CisgICAgICAgIHN0LT5wb3MgKz0gNDsKKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBjdXJzaXplICs9IDQ7Ci0gICAgICBzdC0+cG9zICs9IDQ7Ci0gICAgICBicmVhazsKICAgICB9CiAgIH0KIApAQCAtNDg1LDcgKzUxMyw3IEBACiAgKiBDaGVjayBpZiBhIENSTEYgb3IgZW5kIG9mIGRhdGEgaXMgaW4gaW5wdXQgYnVmZmVyIGF0IGN1cnJlbnQgcG9zaXRpb24gKyBuLgogICogUmV0dXJuIC0xIGlmIG1vcmUgZGF0YSBuZWVkZWQsIDEgaWYgQ1JMRiBvciBlbmQgb2YgZGF0YSwgZWxzZSAwLgogICovCi1zdGF0aWMgaW50IHFwX2xvb2thaGVhZF9lb2wobWltZV9lbmNvZGVyX3N0YXRlICpzdCwgaW50IGF0ZW9mLCBzaXplX3QgbikKK3N0YXRpYyBpbnQgcXBfbG9va2FoZWFkX2VvbChzdHJ1Y3QgbWltZV9lbmNvZGVyX3N0YXRlICpzdCwgaW50IGF0ZW9mLCBzaXplX3QgbikKIHsKICAgbiArPSBzdC0+YnVmYmVnOwogICBpZihuID49IHN0LT5idWZlbmQgJiYgYXRlb2YpCkBAIC01MDIsNyArNTMwLDcgQEAKIHN0YXRpYyBzaXplX3QgZW5jb2Rlcl9xcF9yZWFkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGJvb2wgYXRlb2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX21pbWVwYXJ0ICpwYXJ0KQogewotICBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOworICBzdHJ1Y3QgbWltZV9lbmNvZGVyX3N0YXRlICpzdCA9ICZwYXJ0LT5lbmNzdGF0ZTsKICAgY2hhciAqcHRyID0gYnVmZmVyOwogICBzaXplX3QgY3Vyc2l6ZSA9IDA7CiAgIGludCBzb2Z0bGluZWJyZWFrOwpAQCAtNTY3LDcgKzU5NSw2IEBACiAgICAgICAgIHN3aXRjaChxcF9sb29rYWhlYWRfZW9sKHN0LCBhdGVvZiwgY29uc3VtZWQpKSB7CiAgICAgICAgIGNhc2UgLTE6ICAgICAgICAvKiBOZWVkIG1vcmUgZGF0YS4gKi8KICAgICAgICAgICByZXR1cm4gY3Vyc2l6ZTsKLSAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIE5vdCBmb2xsb3dlZCBieSBhIENSTEYuICovCiAgICAgICAgICAgc29mdGxpbmVicmVhayA9IDE7CiAgICAgICAgICAgYnJlYWs7CkBAIC01ODEsOCArNjA4LDExIEBACiAgICAgfQogCiAgICAgLyogSWYgdGhlIG91dHB1dCBidWZmZXIgd291bGQgb3ZlcmZsb3csIGRvIG5vdCBzdG9yZS4gKi8KLSAgICBpZihsZW4gPiBzaXplKQorICAgIGlmKGxlbiA+IHNpemUpIHsKKyAgICAgIGlmKCFjdXJzaXplKQorICAgICAgICByZXR1cm4gU1RPUF9GSUxMSU5HOwogICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgLyogQXBwZW5kIHRvIG91dHB1dCBidWZmZXIuICovCiAgICAgbWVtY3B5KHB0ciwgYnVmLCBsZW4pOwpAQCAtNjEyLDE2ICs2NDIsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSkKIHsKICAgY3VybF9taW1lcGFydCAqcGFydCA9IChjdXJsX21pbWVwYXJ0ICopIGluc3RyZWFtOwotICBzaXplX3Qgc3ogPSAoc2l6ZV90KSBwYXJ0LT5kYXRhc2l6ZSAtIHBhcnQtPnN0YXRlLm9mZnNldDsKKyAgc2l6ZV90IHN6ID0gY3VybHhfc290b3V6KHBhcnQtPmRhdGFzaXplIC0gcGFydC0+c3RhdGUub2Zmc2V0KTsKICAgKHZvaWQpIHNpemU7ICAgLyogQWx3YXlzIDEuKi8KIAorICBpZighbml0ZW1zKQorICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CisKICAgaWYoc3ogPiBuaXRlbXMpCiAgICAgc3ogPSBuaXRlbXM7CiAKICAgaWYoc3opCi0gICAgbWVtY3B5KGJ1ZmZlciwgKGNoYXIgKikgJnBhcnQtPmRhdGFbcGFydC0+c3RhdGUub2Zmc2V0XSwgc3opOworICAgIG1lbWNweShidWZmZXIsIHBhcnQtPmRhdGEgKyBjdXJseF9zb3RvdXoocGFydC0+c3RhdGUub2Zmc2V0KSwgc3opOwogCi0gIHBhcnQtPnN0YXRlLm9mZnNldCArPSBzejsKICAgcmV0dXJuIHN6OwogfQogCkBAIC02NDEsNyArNjczLDcgQEAKICAgaWYob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBwYXJ0LT5kYXRhc2l6ZSkKICAgICByZXR1cm4gQ1VSTF9TRUVLRlVOQ19GQUlMOwogCi0gIHBhcnQtPnN0YXRlLm9mZnNldCA9IChzaXplX3QpIG9mZnNldDsKKyAgcGFydC0+c3RhdGUub2Zmc2V0ID0gb2Zmc2V0OwogICByZXR1cm4gQ1VSTF9TRUVLRlVOQ19PSzsKIH0KIApAQCAtNjUzLDcgKzY4NSw3IEBACiAKIC8qIE5hbWVkIGZpbGUgY2FsbGJhY2tzLiAqLwogLyogQXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBtaW1lIHBhcnQuICovCi1zdGF0aWMgaW50IG1pbWVfb3Blbl9maWxlKGN1cmxfbWltZXBhcnQgKiBwYXJ0KQorc3RhdGljIGludCBtaW1lX29wZW5fZmlsZShjdXJsX21pbWVwYXJ0ICpwYXJ0KQogewogICAvKiBPcGVuIGEgTUlNRUtJTkRfRklMRSBwYXJ0LiAqLwogCkBAIC02NjgsNiArNzAwLDkgQEAKIHsKICAgY3VybF9taW1lcGFydCAqcGFydCA9IChjdXJsX21pbWVwYXJ0ICopIGluc3RyZWFtOwogCisgIGlmKCFuaXRlbXMpCisgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKwogICBpZihtaW1lX29wZW5fZmlsZShwYXJ0KSkKICAgICByZXR1cm4gUkVBRF9FUlJPUjsKIApAQCAtNzA1LDIxICs3NDAsMjIgQEAKIC8qIEFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgbWltZSBzdHJ1Y3R1cmUuICovCiAKIC8qIFJlYWRiYWNrIGEgYnl0ZSBzdHJpbmcgc2VnbWVudC4gKi8KLXN0YXRpYyBzaXplX3QgcmVhZGJhY2tfYnl0ZXMobWltZV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgc2l6ZV90IHJlYWRiYWNrX2J5dGVzKHN0cnVjdCBtaW1lX3N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHNpemVfdCBudW1ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHJhaWwpCiB7CiAgIHNpemVfdCBzejsKKyAgc2l6ZV90IG9mZnNldCA9IGN1cmx4X3NvdG91eihzdGF0ZS0+b2Zmc2V0KTsKIAotICBpZihudW1ieXRlcyA+IHN0YXRlLT5vZmZzZXQpIHsKLSAgICBzeiA9IG51bWJ5dGVzIC0gc3RhdGUtPm9mZnNldDsKLSAgICBieXRlcyArPSBzdGF0ZS0+b2Zmc2V0OworICBpZihudW1ieXRlcyA+IG9mZnNldCkgeworICAgIHN6ID0gbnVtYnl0ZXMgLSBvZmZzZXQ7CisgICAgYnl0ZXMgKz0gb2Zmc2V0OwogICB9CiAgIGVsc2UgewogICAgIHNpemVfdCB0c3ogPSBzdHJsZW4odHJhaWwpOwogCi0gICAgc3ogPSBzdGF0ZS0+b2Zmc2V0IC0gbnVtYnl0ZXM7CisgICAgc3ogPSBvZmZzZXQgLSBudW1ieXRlczsKICAgICBpZihzeiA+PSB0c3opCiAgICAgICByZXR1cm4gMDsKICAgICBieXRlcyA9IHRyYWlsICsgc3o7CkBAIC03MzYsMjUgKzc3Miw3OSBAQAogCiAvKiBSZWFkIGEgbm9uLWVuY29kZWQgcGFydCBjb250ZW50LiAqLwogc3RhdGljIHNpemVfdCByZWFkX3BhcnRfY29udGVudChjdXJsX21pbWVwYXJ0ICpwYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZzaXplLCBib29sICpoYXNyZWFkKQogewogICBzaXplX3Qgc3ogPSAwOwogCi0gIGlmKHBhcnQtPnJlYWRmdW5jKQotICAgIHN6ID0gcGFydC0+cmVhZGZ1bmMoYnVmZmVyLCAxLCBidWZzaXplLCBwYXJ0LT5hcmcpOworICBzd2l0Y2gocGFydC0+bGFzdHJlYWRzdGF0dXMpIHsKKyAgY2FzZSAwOgorICBjYXNlIENVUkxfUkVBREZVTkNfQUJPUlQ6CisgIGNhc2UgQ1VSTF9SRUFERlVOQ19QQVVTRToKKyAgY2FzZSBSRUFEX0VSUk9SOgorICAgIHJldHVybiBwYXJ0LT5sYXN0cmVhZHN0YXR1czsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfQorCisgIC8qIElmIHdlIGNhbiBkZXRlcm1pbmUgd2UgYXJlIGF0IGVuZCBvZiBwYXJ0IGRhdGEsIHNwYXJlIGEgcmVhZC4gKi8KKyAgaWYocGFydC0+ZGF0YXNpemUgIT0gKGN1cmxfb2ZmX3QpIC0xICYmCisgICAgIHBhcnQtPnN0YXRlLm9mZnNldCA+PSBwYXJ0LT5kYXRhc2l6ZSkgeworICAgIC8qIHN6IGlzIGFscmVhZHkgemVyby4gKi8KKyAgfQorICBlbHNlIHsKKyAgICBzd2l0Y2gocGFydC0+a2luZCkgeworICAgIGNhc2UgTUlNRUtJTkRfTVVMVElQQVJUOgorICAgICAgLyoKKyAgICAgICAqIENhbm5vdCBiZSBwcm9jZXNzZWQgYXMgb3RoZXIga2luZHMgc2luY2UgcmVhZCBmdW5jdGlvbiByZXF1aXJlcworICAgICAgICogYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgYW5kIGlzIGhpZ2hseSByZWN1cnNpdmUuCisgICAgICAgKi8KKyAgICAgICBzeiA9IG1pbWVfc3VicGFydHNfcmVhZChidWZmZXIsIDEsIGJ1ZnNpemUsIHBhcnQtPmFyZywgaGFzcmVhZCk7CisgICAgICAgYnJlYWs7CisgICAgY2FzZSBNSU1FS0lORF9GSUxFOgorICAgICAgaWYocGFydC0+ZnAgJiYgZmVvZihwYXJ0LT5mcCkpCisgICAgICAgIGJyZWFrOyAgLyogQXQgRU9GLiAqLworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgaWYocGFydC0+cmVhZGZ1bmMpIHsKKyAgICAgICAgaWYoIShwYXJ0LT5mbGFncyAmIE1JTUVfRkFTVF9SRUFEKSkgeworICAgICAgICAgIGlmKCpoYXNyZWFkKQorICAgICAgICAgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKyAgICAgICAgICAqaGFzcmVhZCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgc3ogPSBwYXJ0LT5yZWFkZnVuYyhidWZmZXIsIDEsIGJ1ZnNpemUsIHBhcnQtPmFyZyk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBzd2l0Y2goc3opIHsKKyAgY2FzZSBTVE9QX0ZJTExJTkc6CisgICAgYnJlYWs7CisgIGNhc2UgMDoKKyAgY2FzZSBDVVJMX1JFQURGVU5DX0FCT1JUOgorICBjYXNlIENVUkxfUkVBREZVTkNfUEFVU0U6CisgIGNhc2UgUkVBRF9FUlJPUjoKKyAgICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IHN6OworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHBhcnQtPnN0YXRlLm9mZnNldCArPSBzejsKKyAgICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IHN6OworICAgIGJyZWFrOworICB9CisKICAgcmV0dXJuIHN6OwogfQogCiAvKiBSZWFkIGFuZCBlbmNvZGUgcGFydCBjb250ZW50LiAqLwotc3RhdGljIHNpemVfdCByZWFkX2VuY29kZWRfcGFydF9jb250ZW50KGN1cmxfbWltZXBhcnQgKnBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSkKK3N0YXRpYyBzaXplX3QgcmVhZF9lbmNvZGVkX3BhcnRfY29udGVudChjdXJsX21pbWVwYXJ0ICpwYXJ0LCBjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZnNpemUsIGJvb2wgKmhhc3JlYWQpCiB7Ci0gIG1pbWVfZW5jb2Rlcl9zdGF0ZSAqc3QgPSAmcGFydC0+ZW5jc3RhdGU7CisgIHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOwogICBzaXplX3QgY3Vyc2l6ZSA9IDA7CiAgIHNpemVfdCBzejsKICAgYm9vbCBhdGVvZiA9IEZBTFNFOwogCi0gIHdoaWxlKGJ1ZnNpemUpIHsKKyAgZm9yKDs7KSB7CiAgICAgaWYoc3QtPmJ1ZmJlZyA8IHN0LT5idWZlbmQgfHwgYXRlb2YpIHsKICAgICAgIC8qIEVuY29kZSBidWZmZXJlZCBkYXRhLiAqLwogICAgICAgc3ogPSBwYXJ0LT5lbmNvZGVyLT5lbmNvZGVmdW5jKGJ1ZmZlciwgYnVmc2l6ZSwgYXRlb2YsIHBhcnQpOwpAQCAtNzYzLDkgKzg1Myw4IEBACiAgICAgICAgIGlmKGF0ZW9mKQogICAgICAgICAgIHJldHVybiBjdXJzaXplOwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9SRUFERlVOQ19BQk9SVDoKLSAgICAgIGNhc2UgQ1VSTF9SRUFERlVOQ19QQVVTRToKICAgICAgIGNhc2UgUkVBRF9FUlJPUjoKKyAgICAgIGNhc2UgU1RPUF9GSUxMSU5HOgogICAgICAgICByZXR1cm4gY3Vyc2l6ZT8gY3Vyc2l6ZTogc3o7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBjdXJzaXplICs9IHN6OwpAQCAtNzg3LDcgKzg3Niw3IEBACiAgICAgaWYoc3QtPmJ1ZmVuZCA+PSBzaXplb2Yoc3QtPmJ1ZikpCiAgICAgICByZXR1cm4gY3Vyc2l6ZT8gY3Vyc2l6ZTogUkVBRF9FUlJPUjsgICAgLyogQnVmZmVyIGZ1bGwuICovCiAgICAgc3ogPSByZWFkX3BhcnRfY29udGVudChwYXJ0LCBzdC0+YnVmICsgc3QtPmJ1ZmVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdC0+YnVmKSAtIHN0LT5idWZlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0LT5idWYpIC0gc3QtPmJ1ZmVuZCwgaGFzcmVhZCk7CiAgICAgc3dpdGNoKHN6KSB7CiAgICAgY2FzZSAwOgogICAgICAgYXRlb2YgPSBUUlVFOwpAQCAtNzk1LDYgKzg4NCw3IEBACiAgICAgY2FzZSBDVVJMX1JFQURGVU5DX0FCT1JUOgogICAgIGNhc2UgQ1VSTF9SRUFERlVOQ19QQVVTRToKICAgICBjYXNlIFJFQURfRVJST1I6CisgICAgY2FzZSBTVE9QX0ZJTExJTkc6CiAgICAgICByZXR1cm4gY3Vyc2l6ZT8gY3Vyc2l6ZTogc3o7CiAgICAgZGVmYXVsdDoKICAgICAgIHN0LT5idWZlbmQgKz0gc3o7CkBAIC04MDIsMTIgKzg5MiwxMiBAQAogICAgIH0KICAgfQogCi0gIHJldHVybiBjdXJzaXplOworICAvKiBOT1RSRUFDSEVEICovCiB9CiAKIC8qIFJlYWRiYWNrIGEgbWltZSBwYXJ0LiAqLwogc3RhdGljIHNpemVfdCByZWFkYmFja19wYXJ0KGN1cmxfbWltZXBhcnQgKnBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZzaXplLCBib29sICpoYXNyZWFkKQogewogICBzaXplX3QgY3Vyc2l6ZSA9IDA7CiAjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCkBAIC04NjYsOSArOTU2LDkgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUlNRVNUQVRFX0NPTlRFTlQ6CiAgICAgICBpZihwYXJ0LT5lbmNvZGVyKQotICAgICAgICBzeiA9IHJlYWRfZW5jb2RlZF9wYXJ0X2NvbnRlbnQocGFydCwgYnVmZmVyLCBidWZzaXplKTsKKyAgICAgICAgc3ogPSByZWFkX2VuY29kZWRfcGFydF9jb250ZW50KHBhcnQsIGJ1ZmZlciwgYnVmc2l6ZSwgaGFzcmVhZCk7CiAgICAgICBlbHNlCi0gICAgICAgIHN6ID0gcmVhZF9wYXJ0X2NvbnRlbnQocGFydCwgYnVmZmVyLCBidWZzaXplKTsKKyAgICAgICAgc3ogPSByZWFkX3BhcnRfY29udGVudChwYXJ0LCBidWZmZXIsIGJ1ZnNpemUsIGhhc3JlYWQpOwogICAgICAgc3dpdGNoKHN6KSB7CiAgICAgICBjYXNlIDA6CiAgICAgICAgIG1pbWVzZXRzdGF0ZSgmcGFydC0+c3RhdGUsIE1JTUVTVEFURV9FTkQsIE5VTEwpOwpAQCAtODgxLDYgKzk3MSw3IEBACiAgICAgICBjYXNlIENVUkxfUkVBREZVTkNfQUJPUlQ6CiAgICAgICBjYXNlIENVUkxfUkVBREZVTkNfUEFVU0U6CiAgICAgICBjYXNlIFJFQURfRVJST1I6CisgICAgICBjYXNlIFNUT1BfRklMTElORzoKICAgICAgICAgcmV0dXJuIGN1cnNpemU/IGN1cnNpemU6IHN6OwogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC05MDksOSArMTAwMCw5IEBACiAgIHJldHVybiBjdXJzaXplOwogfQogCi0vKiBSZWFkYmFjayBmcm9tIG1pbWUuICovCisvKiBSZWFkYmFjayBmcm9tIG1pbWUuIFdhcm5pbmc6IG5vdCBhIHJlYWQgY2FsbGJhY2sgZnVuY3Rpb24uICovCiBzdGF0aWMgc2l6ZV90IG1pbWVfc3VicGFydHNfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbml0ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaW5zdHJlYW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSwgYm9vbCAqaGFzcmVhZCkKIHsKICAgY3VybF9taW1lICptaW1lID0gKGN1cmxfbWltZSAqKSBpbnN0cmVhbTsKICAgc2l6ZV90IGN1cnNpemUgPSAwOwpAQCAtOTMyLDcgKzEwMjMsNyBAQAogI2VuZGlmCiAgICAgICBtaW1lc2V0c3RhdGUoJm1pbWUtPnN0YXRlLCBNSU1FU1RBVEVfQk9VTkRBUlkxLCBtaW1lLT5maXJzdHBhcnQpOwogICAgICAgLyogVGhlIGZpcnN0IGJvdW5kYXJ5IGFsd2F5cyBmb2xsb3dzIHRoZSBoZWFkZXIgdGVybWluYXRpb24gZW1wdHkgbGluZSwKLSAgICAgICAgIHNvIGlzIGFsd2F5cyBwcmVjZWRlZCBieSBhIENSTEsuIFdlIGNhbiB0aGVuIHNwYXJlIDIgY2hhcmFjdGVycworICAgICAgICAgc28gaXMgYWx3YXlzIHByZWNlZGVkIGJ5IGEgQ1JMRi4gV2UgY2FuIHRoZW4gc3BhcmUgMiBjaGFyYWN0ZXJzCiAgICAgICAgICBieSBza2lwcGluZyB0aGUgbGVhZGluZyBDUkxGIGluIGJvdW5kYXJ5LiAqLwogICAgICAgbWltZS0+c3RhdGUub2Zmc2V0ICs9IDI7CiAgICAgICBicmVhazsKQEAgLTk2MiwxMSArMTA1MywxMiBAQAogICAgICAgICBtaW1lc2V0c3RhdGUoJm1pbWUtPnN0YXRlLCBNSU1FU1RBVEVfRU5ELCBOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBzeiA9IHJlYWRiYWNrX3BhcnQocGFydCwgYnVmZmVyLCBuaXRlbXMpOworICAgICAgc3ogPSByZWFkYmFja19wYXJ0KHBhcnQsIGJ1ZmZlciwgbml0ZW1zLCBoYXNyZWFkKTsKICAgICAgIHN3aXRjaChzeikgewogICAgICAgY2FzZSBDVVJMX1JFQURGVU5DX0FCT1JUOgogICAgICAgY2FzZSBDVVJMX1JFQURGVU5DX1BBVVNFOgogICAgICAgY2FzZSBSRUFEX0VSUk9SOgorICAgICAgY2FzZSBTVE9QX0ZJTExJTkc6CiAgICAgICAgIHJldHVybiBjdXJzaXplPyBjdXJzaXplOiBzejsKICAgICAgIGNhc2UgMDoKICNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKQEAgLTEwMzEsNiArMTEyMyw3IEBACiAgIGlmKHJlcyA9PSBDVVJMX1NFRUtGVU5DX09LKQogICAgIG1pbWVzZXRzdGF0ZSgmcGFydC0+c3RhdGUsIHRhcmdldHN0YXRlLCBOVUxMKTsKIAorICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IDE7IC8qIFN1Y2Nlc3NmdWwgcmVhZCBzdGF0dXMuICovCiAgIHJldHVybiByZXM7CiB9CiAKQEAgLTEwNzMsNiArMTE2Niw4IEBACiAgIHBhcnQtPmRhdGFzaXplID0gKGN1cmxfb2ZmX3QpIDA7ICAgIC8qIE5vIHNpemUgeWV0LiAqLwogICBjbGVhbnVwX2VuY29kZXJfc3RhdGUoJnBhcnQtPmVuY3N0YXRlKTsKICAgcGFydC0+a2luZCA9IE1JTUVLSU5EX05PTkU7CisgIHBhcnQtPmZsYWdzICY9IH5NSU1FX0ZBU1RfUkVBRDsKKyAgcGFydC0+bGFzdHJlYWRzdGF0dXMgPSAxOyAvKiBTdWNjZXNzZnVsIHJlYWQgc3RhdHVzLiAqLwogfQogCiBzdGF0aWMgdm9pZCBtaW1lX3N1YnBhcnRzX2ZyZWUodm9pZCAqcHRyKQpAQCAtMTEzNSw2ICsxMjMwLDggQEAKICAgY29uc3QgY3VybF9taW1lcGFydCAqczsKICAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CiAKKyAgREVCVUdBU1NFUlQoZHN0KTsKKwogICAvKiBEdXBsaWNhdGUgY29udGVudC4gKi8KICAgc3dpdGNoKHNyYy0+a2luZCkgewogICBjYXNlIE1JTUVLSU5EX05PTkU6CkBAIC0xMTg0LDIwICsxMjgxLDE4IEBACiAgICAgfQogICB9CiAKLSAgLyogRHVwbGljYXRlIG90aGVyIGZpZWxkcy4gKi8KLSAgaWYoZHN0ICE9IE5VTEwpCisgIGlmKCFyZXMpIHsKKyAgICAvKiBEdXBsaWNhdGUgb3RoZXIgZmllbGRzLiAqLwogICAgIGRzdC0+ZW5jb2RlciA9IHNyYy0+ZW5jb2RlcjsKLSAgZWxzZQotICAgIHJlcyA9IENVUkxFX1dSSVRFX0VSUk9SOwotICBpZighcmVzKQogICAgIHJlcyA9IGN1cmxfbWltZV90eXBlKGRzdCwgc3JjLT5taW1ldHlwZSk7CisgIH0KICAgaWYoIXJlcykKICAgICByZXMgPSBjdXJsX21pbWVfbmFtZShkc3QsIHNyYy0+bmFtZSk7CiAgIGlmKCFyZXMpCiAgICAgcmVzID0gY3VybF9taW1lX2ZpbGVuYW1lKGRzdCwgc3JjLT5maWxlbmFtZSk7CiAKICAgLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJvbGxiYWNrLiAqLwotICBpZihyZXMgJiYgZHN0KQorICBpZihyZXMpCiAgICAgQ3VybF9taW1lX2NsZWFucGFydChkc3QpOwogCiAgIHJldHVybiByZXM7CkBAIC0xMjM4LDYgKzEzMzMsNyBAQAogewogICBtZW1zZXQoKGNoYXIgKikgcGFydCwgMCwgc2l6ZW9mKCpwYXJ0KSk7CiAgIHBhcnQtPmVhc3kgPSBlYXN5OworICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IDE7IC8qIFN1Y2Nlc3NmdWwgcmVhZCBzdGF0dXMuICovCiAgIG1pbWVzZXRzdGF0ZSgmcGFydC0+c3RhdGUsIE1JTUVTVEFURV9CRUdJTiwgTlVMTCk7CiB9CiAKQEAgLTEzMjMsMTEgKzE0MTksMTIgQEAKIAogICAgIGlmKGRhdGFzaXplKQogICAgICAgbWVtY3B5KHBhcnQtPmRhdGEsIGRhdGEsIGRhdGFzaXplKTsKLSAgICBwYXJ0LT5kYXRhW2RhdGFzaXplXSA9ICdcMCc7ICAgIC8qIFNldCBhIG51bCB0ZXJtaW5hdG9yIGFzIHNlbnRpbmVsLiAqLworICAgIHBhcnQtPmRhdGFbZGF0YXNpemVdID0gJ1wwJzsgICAgLyogU2V0IGEgbnVsbCB0ZXJtaW5hdG9yIGFzIHNlbnRpbmVsLiAqLwogCiAgICAgcGFydC0+cmVhZGZ1bmMgPSBtaW1lX21lbV9yZWFkOwogICAgIHBhcnQtPnNlZWtmdW5jID0gbWltZV9tZW1fc2VlazsKICAgICBwYXJ0LT5mcmVlZnVuYyA9IG1pbWVfbWVtX2ZyZWU7CisgICAgcGFydC0+ZmxhZ3MgfD0gTUlNRV9GQVNUX1JFQUQ7CiAgICAgcGFydC0+a2luZCA9IE1JTUVLSU5EX0RBVEE7CiAgIH0KIApAQCAtMTQwNSw3ICsxNTAyLDcgQEAKIENVUkxjb2RlIGN1cmxfbWltZV9lbmNvZGVyKGN1cmxfbWltZXBhcnQgKnBhcnQsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7Ci0gIGNvbnN0IG1pbWVfZW5jb2RlciAqbWVwOworICBjb25zdCBzdHJ1Y3QgbWltZV9lbmNvZGVyICptZXA7CiAKICAgaWYoIXBhcnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1MDIsNyArMTU5OSw3IEBACiAgICAgfQogCiAgICAgc3VicGFydHMtPnBhcmVudCA9IHBhcnQ7Ci0gICAgcGFydC0+cmVhZGZ1bmMgPSBtaW1lX3N1YnBhcnRzX3JlYWQ7CisgICAgLyogU3VicGFydHMgYXJlIHByb2Nlc3NlZCBpbnRlcm5hbGx5OiBubyByZWFkIGNhbGxiYWNrLiAqLwogICAgIHBhcnQtPnNlZWtmdW5jID0gbWltZV9zdWJwYXJ0c19zZWVrOwogICAgIHBhcnQtPmZyZWVmdW5jID0gdGFrZV9vd25lcnNoaXA/IG1pbWVfc3VicGFydHNfZnJlZTogbWltZV9zdWJwYXJ0c191bmJpbmQ7CiAgICAgcGFydC0+YXJnID0gc3VicGFydHM7CkBAIC0xNTI0LDkgKzE2MjEsMjMgQEAKIHNpemVfdCBDdXJsX21pbWVfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbml0ZW1zLCB2b2lkICppbnN0cmVhbSkKIHsKICAgY3VybF9taW1lcGFydCAqcGFydCA9IChjdXJsX21pbWVwYXJ0ICopIGluc3RyZWFtOworICBzaXplX3QgcmV0OworICBib29sIGhhc3JlYWQ7CiAKICAgKHZvaWQpIHNpemU7ICAgLyogQWx3YXlzIDEuICovCi0gIHJldHVybiByZWFkYmFja19wYXJ0KHBhcnQsIGJ1ZmZlciwgbml0ZW1zKTsKKworICBkbyB7CisgICAgaGFzcmVhZCA9IEZBTFNFOworICAgIHJldCA9IHJlYWRiYWNrX3BhcnQocGFydCwgYnVmZmVyLCBuaXRlbXMsICZoYXNyZWFkKTsKKyAgICAvKgorICAgICAqIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlIHRvIGdldCBzb21lIGRhdGEgd2l0aG91dCBjYWxsaW5nIG1vcmUgdGhhbgorICAgICAqIG9uZSByZWFkIGNhbGxiYWNrIChwcm9iYWJseSBiZWNhdXNlIGEgY29udGVudCBlbmNvZGVyIGlzIG5vdCBhYmxlIHRvCisgICAgICogZGVsaXZlciBhIG5ldyBidW5jaCBmb3IgdGhlIGZldyBkYXRhIGFjY3VtdWxhdGVkIHNvIGZhciksIGZvcmNlIGFub3RoZXIKKyAgICAgKiByZWFkIHVudGlsIHdlIGdldCBlbm91Z2ggZGF0YSBvciBhIHNwZWNpYWwgZXhpdCBjb2RlLgorICAgICAqLworICB9IHdoaWxlKHJldCA9PSBTVE9QX0ZJTExJTkcpOworCisgIHJldHVybiByZXQ7CiB9CiAKIC8qIFJld2luZCBtaW1lIHN0cmVhbS4gKi8KQEAgLTE2NjcsNiArMTc3OCwyMyBAQAogICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGJvb2wgY29udGVudF90eXBlX21hdGNoKGNvbnN0IGNoYXIgKmNvbnRlbnR0eXBlLCBjb25zdCBjaGFyICp0YXJnZXQpCit7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4odGFyZ2V0KTsKKworICBpZihjb250ZW50dHlwZSAmJiBzdHJuY2FzZWNvbXBhcmUoY29udGVudHR5cGUsIHRhcmdldCwgbGVuKSkKKyAgICBzd2l0Y2goY29udGVudHR5cGVbbGVuXSkgeworICAgIGNhc2UgJ1wwJzoKKyAgICBjYXNlICdcdCc6CisgICAgY2FzZSAnXHInOgorICAgIGNhc2UgJ1xuJzoKKyAgICBjYXNlICcgJzoKKyAgICBjYXNlICc7JzoKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCiBDVVJMY29kZSBDdXJsX21pbWVfcHJlcGFyZV9oZWFkZXJzKGN1cmxfbWltZXBhcnQgKnBhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnR0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXNwb3NpdGlvbiwKQEAgLTE3MTgsNyArMTg0Niw3IEBACiAgICAgICBib3VuZGFyeSA9IG1pbWUtPmJvdW5kYXJ5OwogICB9CiAgIGVsc2UgaWYoY29udGVudHR5cGUgJiYgIWN1c3RvbWN0ICYmCi0gICAgICAgICAgc3RyY2FzZWNvbXBhcmUoY29udGVudHR5cGUsICJ0ZXh0L3BsYWluIikpCisgICAgICAgICAgY29udGVudF90eXBlX21hdGNoKGNvbnRlbnR0eXBlLCAidGV4dC9wbGFpbiIpKQogICAgIGlmKHN0cmF0ZWd5ID09IE1JTUVTVFJBVEVHWV9NQUlMIHx8ICFwYXJ0LT5maWxlbmFtZSkKICAgICAgIGNvbnRlbnR0eXBlID0gTlVMTDsKIApAQCAtMTc5NCw3ICsxOTIyLDcgQEAKICAgICBjdXJsX21pbWVwYXJ0ICpzdWJwYXJ0OwogCiAgICAgZGlzcG9zaXRpb24gPSBOVUxMOwotICAgIGlmKHN0cmNhc2Vjb21wYXJlKGNvbnRlbnR0eXBlLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpKQorICAgIGlmKGNvbnRlbnRfdHlwZV9tYXRjaChjb250ZW50dHlwZSwgIm11bHRpcGFydC9mb3JtLWRhdGEiKSkKICAgICAgIGRpc3Bvc2l0aW9uID0gImZvcm0tZGF0YSI7CiAgICAgZm9yKHN1YnBhcnQgPSBtaW1lLT5maXJzdHBhcnQ7IHN1YnBhcnQ7IHN1YnBhcnQgPSBzdWJwYXJ0LT5uZXh0cGFydCkgewogICAgICAgcmV0ID0gQ3VybF9taW1lX3ByZXBhcmVfaGVhZGVycyhzdWJwYXJ0LCBOVUxMLCBkaXNwb3NpdGlvbiwgc3RyYXRlZ3kpOwpAQCAtMTgwNSw2ICsxOTMzLDI2IEBACiAgIHJldHVybiByZXQ7CiB9CiAKKy8qIFJlY3Vyc2l2ZWx5IHJlc2V0IHBhdXNlZCBzdGF0dXMgaW4gdGhlIGdpdmVuIHBhcnQuICovCit2b2lkIEN1cmxfbWltZV91bnBhdXNlKGN1cmxfbWltZXBhcnQgKnBhcnQpCit7CisgIGlmKHBhcnQpIHsKKyAgICBpZihwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9PSBDVVJMX1JFQURGVU5DX1BBVVNFKQorICAgICAgcGFydC0+bGFzdHJlYWRzdGF0dXMgPSAxOyAvKiBTdWNjZXNzZnVsIHJlYWQgc3RhdHVzLiAqLworICAgIGlmKHBhcnQtPmtpbmQgPT0gTUlNRUtJTkRfTVVMVElQQVJUKSB7CisgICAgICBjdXJsX21pbWUgKm1pbWUgPSAoY3VybF9taW1lICopIHBhcnQtPmFyZzsKKworICAgICAgaWYobWltZSkgeworICAgICAgICBjdXJsX21pbWVwYXJ0ICpzdWJwYXJ0OworCisgICAgICAgIGZvcihzdWJwYXJ0ID0gbWltZS0+Zmlyc3RwYXJ0OyBzdWJwYXJ0OyBzdWJwYXJ0ID0gc3VicGFydC0+bmV4dHBhcnQpCisgICAgICAgICAgQ3VybF9taW1lX3VucGF1c2Uoc3VicGFydCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKwogI2Vsc2UgLyogIUNVUkxfRElTQUJMRV9IVFRQIHx8ICFDVVJMX0RJU0FCTEVfU01UUCB8fCAhQ1VSTF9ESVNBQkxFX0lNQVAgKi8KIAogLyogTWltZSBub3QgY29tcGlsZWQgaW46IGRlZmluZSBzdHVicyBmb3IgZXh0ZXJuYWxseS1yZWZlcmVuY2VkIGZ1bmN0aW9ucy4gKi8KQEAgLTE5MDEsNCArMjA0OSwxMSBAQAogICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwogfQogCitDVVJMY29kZSBDdXJsX21pbWVfYWRkX2hlYWRlcihzdHJ1Y3QgY3VybF9zbGlzdCAqKnNscCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgICh2b2lkKXNscDsKKyAgKHZvaWQpZm10OworICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworfQorCiAjZW5kaWYgLyogaWYgZGlzYWJsZWQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuaAppbmRleCA0YzlhNWZiLi41MGI3ZWE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWltZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMSw2ICszMSw3IEBACiAvKiBQYXJ0IGZsYWdzLiAqLwogI2RlZmluZSBNSU1FX1VTRVJIRUFERVJTX09XTkVSICAoMSA8PCAwKQogI2RlZmluZSBNSU1FX0JPRFlfT05MWSAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBNSU1FX0ZBU1RfUkVBRCAgICAgICAgICAoMSA8PCAyKQogCiAjZGVmaW5lIEZJTEVfQ09OVEVOVFRZUEVfREVGQVVMVCAgICAgICAgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIKICNkZWZpbmUgTVVMVElQQVJUX0NPTlRFTlRUWVBFX0RFRkFVTFQgICAibXVsdGlwYXJ0L21peGVkIgpAQCAtNjgsNDMgKzY5LDQzIEBACiB9OwogCiAvKiBDb250ZW50IHRyYW5zZmVyIGVuY29kZXIuICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgbWltZV9lbmNvZGVyIHsKICAgY29uc3QgY2hhciAqICAgbmFtZTsgICAgICAgICAgLyogRW5jb2RpbmcgbmFtZS4gKi8KICAgc2l6ZV90ICAgICAgICAgKCplbmNvZGVmdW5jKShjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBib29sIGF0ZW9mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfbWltZXBhcnQgKnBhcnQpOyAgLyogRW5jb2RlZCByZWFkLiAqLwogICBjdXJsX29mZl90ICAgICAoKnNpemVmdW5jKShjdXJsX21pbWVwYXJ0ICpwYXJ0KTsgIC8qIEVuY29kZWQgc2l6ZS4gKi8KLX0gIG1pbWVfZW5jb2RlcjsKK307CiAKIC8qIENvbnRlbnQgdHJhbnNmZXIgZW5jb2RlciBzdGF0ZS4gKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgewogICBzaXplX3QgICAgICAgICBwb3M7ICAgICAgICAgICAvKiBQb3NpdGlvbiBvbiBvdXRwdXQgbGluZS4gKi8KICAgc2l6ZV90ICAgICAgICAgYnVmYmVnOyAgICAgICAgLyogTmV4dCBkYXRhIGluZGV4IGluIGlucHV0IGJ1ZmZlci4gKi8KICAgc2l6ZV90ICAgICAgICAgYnVmZW5kOyAgICAgICAgLyogRmlyc3QgdW51c2VkIGJ5dGUgaW5kZXggaW4gaW5wdXQgYnVmZmVyLiAqLwogICBjaGFyICAgICAgICAgICBidWZbRU5DT0RJTkdfQlVGRkVSX1NJWkVdOyAvKiBJbnB1dCBidWZmZXIuICovCi19ICBtaW1lX2VuY29kZXJfc3RhdGU7Cit9OwogCiAvKiBNaW1lIHJlYWRiYWNrIHN0YXRlLiAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IG1pbWVfc3RhdGUgewogICBlbnVtIG1pbWVzdGF0ZSBzdGF0ZTsgICAgICAgLyogQ3VycmVudCBzdGF0ZSB0b2tlbi4gKi8KICAgdm9pZCAqcHRyOyAgICAgICAgICAgICAgICAgIC8qIFN0YXRlLWRlcGVuZGVudCBwb2ludGVyLiAqLwotICBzaXplX3Qgb2Zmc2V0OyAgICAgICAgICAgICAgLyogU3RhdGUtZGVwZW5kZW50IG9mZnNldC4gKi8KLX0gIG1pbWVfc3RhdGU7CisgIGN1cmxfb2ZmX3Qgb2Zmc2V0OyAgICAgICAgICAvKiBTdGF0ZS1kZXBlbmRlbnQgb2Zmc2V0LiAqLworfTsKIAogLyogbWluaW11bSBidWZmZXIgc2l6ZSBmb3IgdGhlIGJvdW5kYXJ5IHN0cmluZyAqLwogI2RlZmluZSBNSU1FX0JPVU5EQVJZX0xFTiAoMjQgKyBNSU1FX1JBTkRfQk9VTkRBUllfQ0hBUlMgKyAxKQogCiAvKiBBIG1pbWUgbXVsdGlwYXJ0LiAqLwotc3RydWN0IGN1cmxfbWltZV9zIHsKK3N0cnVjdCBjdXJsX21pbWUgewogICBzdHJ1Y3QgQ3VybF9lYXN5ICplYXN5OyAgICAgICAgICAvKiBUaGUgYXNzb2NpYXRlZCBlYXN5IGhhbmRsZS4gKi8KICAgY3VybF9taW1lcGFydCAqcGFyZW50OyAgICAgICAgICAgLyogUGFyZW50IHBhcnQuICovCiAgIGN1cmxfbWltZXBhcnQgKmZpcnN0cGFydDsgICAgICAgIC8qIEZpcnN0IHBhcnQuICovCiAgIGN1cmxfbWltZXBhcnQgKmxhc3RwYXJ0OyAgICAgICAgIC8qIExhc3QgcGFydC4gKi8KICAgY2hhciBib3VuZGFyeVtNSU1FX0JPVU5EQVJZX0xFTl07IC8qIFRoZSBwYXJ0IGJvdW5kYXJ5LiAqLwotICBtaW1lX3N0YXRlIHN0YXRlOyAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHJlYWRiYWNrIHN0YXRlLiAqLworICBzdHJ1Y3QgbWltZV9zdGF0ZSBzdGF0ZTsgICAgICAgICAvKiBDdXJyZW50IHJlYWRiYWNrIHN0YXRlLiAqLwogfTsKIAogLyogQSBtaW1lIHBhcnQuICovCi1zdHJ1Y3QgY3VybF9taW1lcGFydF9zIHsKK3N0cnVjdCBjdXJsX21pbWVwYXJ0IHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZWFzeTsgICAgICAgICAgLyogVGhlIGFzc29jaWF0ZWQgZWFzeSBoYW5kbGUuICovCiAgIGN1cmxfbWltZSAqcGFyZW50OyAgICAgICAgICAgICAgIC8qIFBhcmVudCBtaW1lIHN0cnVjdHVyZS4gKi8KICAgY3VybF9taW1lcGFydCAqbmV4dHBhcnQ7ICAgICAgICAgLyogRm9yd2FyZCBsaW5rZWQgbGlzdC4gKi8KQEAgLTEyMiwzMCArMTIzLDM1IEBACiAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgbmFtZS4gKi8KICAgY3VybF9vZmZfdCBkYXRhc2l6ZTsgICAgICAgICAgICAgLyogRXhwZWN0ZWQgZGF0YSBzaXplLiAqLwogICB1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAvKiBGbGFncy4gKi8KLSAgbWltZV9zdGF0ZSBzdGF0ZTsgICAgICAgICAgICAgICAgLyogQ3VycmVudCByZWFkYmFjayBzdGF0ZS4gKi8KLSAgY29uc3QgbWltZV9lbmNvZGVyICplbmNvZGVyOyAgICAgLyogQ29udGVudCBkYXRhIGVuY29kZXIuICovCi0gIG1pbWVfZW5jb2Rlcl9zdGF0ZSBlbmNzdGF0ZTsgICAgIC8qIERhdGEgZW5jb2RlciBzdGF0ZS4gKi8KKyAgc3RydWN0IG1pbWVfc3RhdGUgc3RhdGU7ICAgICAgICAgLyogQ3VycmVudCByZWFkYmFjayBzdGF0ZS4gKi8KKyAgY29uc3Qgc3RydWN0IG1pbWVfZW5jb2RlciAqZW5jb2RlcjsgLyogQ29udGVudCBkYXRhIGVuY29kZXIuICovCisgIHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgZW5jc3RhdGU7IC8qIERhdGEgZW5jb2RlciBzdGF0ZS4gKi8KKyAgc2l6ZV90IGxhc3RyZWFkc3RhdHVzOyAgICAgICAgICAgLyogTGFzdCByZWFkIGNhbGxiYWNrIHJldHVybmVkIHN0YXR1cy4gKi8KIH07CiAKLSNpZiAoIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9NSU1FKSkgfHwgXAorQ1VSTGNvZGUgQ3VybF9taW1lX2FkZF9oZWFkZXIoc3RydWN0IGN1cmxfc2xpc3QgKipzbHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2lmICghZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX01JTUUpKSB8fCAgICAgXAogICAhZGVmaW5lZChDVVJMX0RJU0FCTEVfU01UUCkgfHwgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0lNQVApCiAKIC8qIFByb3RvdHlwZXMuICovCi12b2lkIEN1cmxfbWltZV9pbml0cGFydChjdXJsX21pbWVwYXJ0ICpwYXJ0LCBzdHJ1Y3QgQ3VybF9lYXN5ICplYXN5KTsKLXZvaWQgQ3VybF9taW1lX2NsZWFucGFydChjdXJsX21pbWVwYXJ0ICpwYXJ0KTsKLUNVUkxjb2RlIEN1cmxfbWltZV9kdXBwYXJ0KGN1cmxfbWltZXBhcnQgKmRzdCwgY29uc3QgY3VybF9taW1lcGFydCAqc3JjKTsKLUNVUkxjb2RlIEN1cmxfbWltZV9zZXRfc3VicGFydHMoY3VybF9taW1lcGFydCAqcGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9taW1lICpzdWJwYXJ0cywgaW50IHRha2Vfb3duZXJzaGlwKTsKLUNVUkxjb2RlIEN1cmxfbWltZV9wcmVwYXJlX2hlYWRlcnMoY3VybF9taW1lcGFydCAqcGFydCwKK3ZvaWQgQ3VybF9taW1lX2luaXRwYXJ0KHN0cnVjdCBjdXJsX21pbWVwYXJ0ICpwYXJ0LCBzdHJ1Y3QgQ3VybF9lYXN5ICplYXN5KTsKK3ZvaWQgQ3VybF9taW1lX2NsZWFucGFydChzdHJ1Y3QgY3VybF9taW1lcGFydCAqcGFydCk7CitDVVJMY29kZSBDdXJsX21pbWVfZHVwcGFydChzdHJ1Y3QgY3VybF9taW1lcGFydCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VybF9taW1lcGFydCAqc3JjKTsKK0NVUkxjb2RlIEN1cmxfbWltZV9zZXRfc3VicGFydHMoc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX21pbWUgKnN1YnBhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFrZV9vd25lcnNoaXApOworQ1VSTGNvZGUgQ3VybF9taW1lX3ByZXBhcmVfaGVhZGVycyhzdHJ1Y3QgY3VybF9taW1lcGFydCAqcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGVudHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1pbWVzdHJhdGVneSBzdHJhdGVneSk7Ci1jdXJsX29mZl90IEN1cmxfbWltZV9zaXplKGN1cmxfbWltZXBhcnQgKnBhcnQpOworY3VybF9vZmZfdCBDdXJsX21pbWVfc2l6ZShzdHJ1Y3QgY3VybF9taW1lcGFydCAqcGFydCk7CiBzaXplX3QgQ3VybF9taW1lX3JlYWQoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5pdGVtcywKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSk7Ci1DVVJMY29kZSBDdXJsX21pbWVfcmV3aW5kKGN1cmxfbWltZXBhcnQgKnBhcnQpOwotQ1VSTGNvZGUgQ3VybF9taW1lX2FkZF9oZWFkZXIoc3RydWN0IGN1cmxfc2xpc3QgKipzbHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK0NVUkxjb2RlIEN1cmxfbWltZV9yZXdpbmQoc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQpOwogY29uc3QgY2hhciAqQ3VybF9taW1lX2NvbnRlbnR0eXBlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3ZvaWQgQ3VybF9taW1lX3VucGF1c2Uoc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQpOwogCiAjZWxzZQogLyogaWYgZGlzYWJsZWQgKi8KQEAgLTE1Nyw3ICsxNjMsNyBAQAogI2RlZmluZSBDdXJsX21pbWVfc2l6ZSh4KSAoY3VybF9vZmZfdCkgLTEKICNkZWZpbmUgQ3VybF9taW1lX3JlYWQgTlVMTAogI2RlZmluZSBDdXJsX21pbWVfcmV3aW5kKHgpICgodm9pZCl4LCBDVVJMRV9OT1RfQlVJTFRfSU4pCi0jZGVmaW5lIEN1cmxfbWltZV9hZGRfaGVhZGVyKHgseSwuLi4pIENVUkxFX05PVF9CVUlMVF9JTgorI2RlZmluZSBDdXJsX21pbWVfdW5wYXVzZSh4KQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbXByaW50Zi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXByaW50Zi5jCmluZGV4IGUxOTA5MzYuLjYzYzlkMTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21wcmludGYuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcHJpbnRmLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM2LDYgKzM2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgogI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgogCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTEwNCw3ICsxMDUsNyBAQAogICAgICAgZG9uZSsrOyBcCiAgICAgZWxzZSBcCiAgICAgIHJldHVybiBkb25lOyAvKiByZXR1cm4gaW1tZWRpYXRlbHkgb24gZmFpbHVyZSAqLyBcCi0gIH0gV0hJTEVfRkFMU0UKKyAgfSB3aGlsZSgwKQogCiAvKiBEYXRhIHR5cGUgdG8gcmVhZCBmcm9tIHRoZSBhcmdsaXN0ICovCiB0eXBlZGVmIGVudW0gewpAQCAtMTQ1LDcgKzE0Niw3IEBACiAgIEZMQUdTX0ZMT0FURyAgICAgPSAxPDwxOSAgLyogJWcgb3IgJUcgKi8KIH07CiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCB2YV9zdGFjayB7CiAgIEZvcm1hdFR5cGUgdHlwZTsKICAgaW50IGZsYWdzOwogICBsb25nIHdpZHRoOyAgICAgLyogd2lkdGggT1Igd2lkdGggcGFyYW1ldGVyIG51bWJlciAqLwpAQCAtMTU5LDcgKzE2MCw3IEBACiAgICAgfSBudW07CiAgICAgZG91YmxlIGRudW07CiAgIH0gZGF0YTsKLX0gdmFfc3RhY2tfdDsKK307CiAKIHN0cnVjdCBuc3ByaW50ZiB7CiAgIGNoYXIgKmJ1ZmZlcjsKQEAgLTE2OCwxMSArMTY5LDkgQEAKIH07CiAKIHN0cnVjdCBhc3ByaW50ZiB7Ci0gIGNoYXIgKmJ1ZmZlcjsgLyogYWxsb2NhdGVkIGJ1ZmZlciAqLwotICBzaXplX3QgbGVuOyAgIC8qIGxlbmd0aCBvZiBzdHJpbmcgKi8KLSAgc2l6ZV90IGFsbG9jOyAvKiBsZW5ndGggb2YgYWxsb2MgKi8KLSAgaW50IGZhaWw7ICAgICAvKiAoIT0gMCkgaWYgYW4gYWxsb2MgaGFzIGZhaWxlZCBhbmQgdGh1cwotICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgaXMgbm90IHRoZSBjb21wbGV0ZSBkYXRhICovCisgIHN0cnVjdCBkeW5idWYgYjsKKyAgYm9vbCBmYWlsOyAvKiBpZiBhbiBhbGxvYyBoYXMgZmFpbGVkIGFuZCB0aHVzIHRoZSBvdXRwdXQgaXMgbm90IHRoZSBjb21wbGV0ZQorICAgICAgICAgICAgICAgIGRhdGEgKi8KIH07CiAKIHN0YXRpYyBsb25nIGRwcmludGZfRG9sbGFyU3RyaW5nKGNoYXIgKmlucHV0LCBjaGFyICoqZW5kKQpAQCAtMjI0LDggKzIyMyw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBkcHJpbnRmX1Bhc3MxKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfc3RhY2tfdCAqdnRvLCBjaGFyICoqZW5kcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJnbGlzdCkKK3N0YXRpYyBpbnQgZHByaW50Zl9QYXNzMShjb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCB2YV9zdGFjayAqdnRvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiplbmRwb3MsIHZhX2xpc3QgYXJnbGlzdCkKIHsKICAgY2hhciAqZm10ID0gKGNoYXIgKilmb3JtYXQ7CiAgIGludCBwYXJhbV9udW0gPSAwOwpAQCAtNTcxLDEzICs1NzAsMTEgQEAKICAgbG9uZyBwYXJhbTsgLyogY3VycmVudCBwYXJhbWV0ZXIgdG8gcmVhZCAqLwogICBsb25nIHBhcmFtX251bSA9IDA7IC8qIHBhcmFtZXRlciBjb3VudGVyICovCiAKLSAgdmFfc3RhY2tfdCB2dG9bTUFYX1BBUkFNRVRFUlNdOworICBzdHJ1Y3QgdmFfc3RhY2sgdnRvW01BWF9QQVJBTUVURVJTXTsKICAgY2hhciAqZW5kcG9zW01BWF9QQVJBTUVURVJTXTsKICAgY2hhciAqKmVuZDsKLQogICBjaGFyIHdvcmtbQlVGRlNJWkVdOwotCi0gIHZhX3N0YWNrX3QgKnA7CisgIHN0cnVjdCB2YV9zdGFjayAqcDsKIAogICAvKiAnd29ya2VuZCcgcG9pbnRzIHRvIHRoZSBmaW5hbCBidWZmZXIgYnl0ZSBwb3NpdGlvbiwgYnV0IHdpdGggYW4gZXh0cmEKICAgICAgYnl0ZSBhcyBtYXJnaW4gdG8gYXZvaWQgdGhlIChmYWxzZT8pIHdhcm5pbmcgQ292ZXJpdHkgZ2l2ZXMgdXMKQEAgLTEwMzEsMzUgKzEwMjgsMTAgQEAKICAgc3RydWN0IGFzcHJpbnRmICppbmZvcCA9IChzdHJ1Y3QgYXNwcmludGYgKilkYXRhOwogICB1bnNpZ25lZCBjaGFyIG91dGMgPSAodW5zaWduZWQgY2hhcilvdXRwdXQ7CiAKLSAgaWYoIWluZm9wLT5idWZmZXIpIHsKLSAgICBpbmZvcC0+YnVmZmVyID0gbWFsbG9jKDMyKTsKLSAgICBpZighaW5mb3AtPmJ1ZmZlcikgewotICAgICAgaW5mb3AtPmZhaWwgPSAxOwotICAgICAgcmV0dXJuIC0xOyAvKiBmYWlsICovCi0gICAgfQotICAgIGluZm9wLT5hbGxvYyA9IDMyOwotICAgIGluZm9wLT5sZW4gPSAwOworICBpZihDdXJsX2R5bl9hZGRuKCZpbmZvcC0+YiwgJm91dGMsIDEpKSB7CisgICAgaW5mb3AtPmZhaWwgPSAxOworICAgIHJldHVybiAtMTsgLyogZmFpbCAqLwogICB9Ci0gIGVsc2UgaWYoaW5mb3AtPmxlbiArIDEgPj0gaW5mb3AtPmFsbG9jKSB7Ci0gICAgY2hhciAqbmV3cHRyID0gTlVMTDsKLSAgICBzaXplX3QgbmV3c2l6ZSA9IGluZm9wLT5hbGxvYyoyOwotCi0gICAgLyogZGV0ZWN0IHdyYXAtYXJvdW5kIG9yIG90aGVyIG92ZXJmbG93IHByb2JsZW1zICovCi0gICAgaWYobmV3c2l6ZSA+IGluZm9wLT5hbGxvYykKLSAgICAgIG5ld3B0ciA9IHJlYWxsb2MoaW5mb3AtPmJ1ZmZlciwgbmV3c2l6ZSk7Ci0KLSAgICBpZighbmV3cHRyKSB7Ci0gICAgICBpbmZvcC0+ZmFpbCA9IDE7Ci0gICAgICByZXR1cm4gLTE7IC8qIGZhaWwgKi8KLSAgICB9Ci0gICAgaW5mb3AtPmJ1ZmZlciA9IG5ld3B0cjsKLSAgICBpbmZvcC0+YWxsb2MgPSBuZXdzaXplOwotICB9Ci0KLSAgaW5mb3AtPmJ1ZmZlclsgaW5mb3AtPmxlbiBdID0gb3V0YzsKLQotICBpbmZvcC0+bGVuKys7Ci0KICAgcmV0dXJuIG91dGM7IC8qIGZwdXRjKCkgcmV0dXJucyBsaWtlIHRoaXMgb24gc3VjY2VzcyAqLwogfQogCkBAIC0xMDY4LDI0ICsxMDQwLDE4IEBACiAgIHZhX2xpc3QgYXBfc2F2ZTsgLyogYXJndW1lbnQgcG9pbnRlciAqLwogICBpbnQgcmV0Y29kZTsKICAgc3RydWN0IGFzcHJpbnRmIGluZm87Ci0KLSAgaW5mby5idWZmZXIgPSBOVUxMOwotICBpbmZvLmxlbiA9IDA7Ci0gIGluZm8uYWxsb2MgPSAwOworICBDdXJsX2R5bl9pbml0KCZpbmZvLmIsIERZTl9BUFJJTlRGKTsKICAgaW5mby5mYWlsID0gMDsKIAogICB2YV9zdGFydChhcF9zYXZlLCBmb3JtYXQpOwogICByZXRjb2RlID0gZHByaW50Zl9mb3JtYXRmKCZpbmZvLCBhbGxvY19hZGRieXRlciwgZm9ybWF0LCBhcF9zYXZlKTsKICAgdmFfZW5kKGFwX3NhdmUpOwogICBpZigoLTEgPT0gcmV0Y29kZSkgfHwgaW5mby5mYWlsKSB7Ci0gICAgaWYoaW5mby5hbGxvYykKLSAgICAgIGZyZWUoaW5mby5idWZmZXIpOworICAgIEN1cmxfZHluX2ZyZWUoJmluZm8uYik7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLSAgaWYoaW5mby5hbGxvYykgewotICAgIGluZm8uYnVmZmVyW2luZm8ubGVuXSA9IDA7IC8qIHdlIHRlcm1pbmF0ZSB0aGlzIHdpdGggYSB6ZXJvIGJ5dGUgKi8KLSAgICByZXR1cm4gaW5mby5idWZmZXI7Ci0gIH0KKyAgaWYoQ3VybF9keW5fbGVuKCZpbmZvLmIpKQorICAgIHJldHVybiBDdXJsX2R5bl9wdHIoJmluZm8uYik7CiAgIHJldHVybiBzdHJkdXAoIiIpOwogfQogCkBAIC0xMDkzLDIzICsxMDU5LDE2IEBACiB7CiAgIGludCByZXRjb2RlOwogICBzdHJ1Y3QgYXNwcmludGYgaW5mbzsKLQotICBpbmZvLmJ1ZmZlciA9IE5VTEw7Ci0gIGluZm8ubGVuID0gMDsKLSAgaW5mby5hbGxvYyA9IDA7CisgIEN1cmxfZHluX2luaXQoJmluZm8uYiwgRFlOX0FQUklOVEYpOwogICBpbmZvLmZhaWwgPSAwOwogCiAgIHJldGNvZGUgPSBkcHJpbnRmX2Zvcm1hdGYoJmluZm8sIGFsbG9jX2FkZGJ5dGVyLCBmb3JtYXQsIGFwX3NhdmUpOwogICBpZigoLTEgPT0gcmV0Y29kZSkgfHwgaW5mby5mYWlsKSB7Ci0gICAgaWYoaW5mby5hbGxvYykKLSAgICAgIGZyZWUoaW5mby5idWZmZXIpOworICAgIEN1cmxfZHluX2ZyZWUoJmluZm8uYik7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLQotICBpZihpbmZvLmFsbG9jKSB7Ci0gICAgaW5mby5idWZmZXJbaW5mby5sZW5dID0gMDsgLyogd2UgdGVybWluYXRlIHRoaXMgd2l0aCBhIHplcm8gYnl0ZSAqLwotICAgIHJldHVybiBpbmZvLmJ1ZmZlcjsKLSAgfQorICBpZihDdXJsX2R5bl9sZW4oJmluZm8uYikpCisgICAgcmV0dXJuIEN1cmxfZHluX3B0cigmaW5mby5iKTsKICAgcmV0dXJuIHN0cmR1cCgiIik7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21xdHQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21xdHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY0NDE2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXF0dC5jCkBAIC0wLDAgKzEsNjI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIEJqw7ZybiBTdGVuYmVyZywgPGJqb3JuQGhheHguc2U+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJtcXR0LmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiZXNjYXBlLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgInJhbmQuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBNUVRUX01TR19DT05ORUNUICAgMHgxMAorI2RlZmluZSBNUVRUX01TR19DT05OQUNLICAgMHgyMAorI2RlZmluZSBNUVRUX01TR19QVUJMSVNIICAgMHgzMAorI2RlZmluZSBNUVRUX01TR19TVUJTQ1JJQkUgMHg4MgorI2RlZmluZSBNUVRUX01TR19TVUJBQ0sgICAgMHg5MAorI2RlZmluZSBNUVRUX01TR19ESVNDT05ORUNUIDB4ZTAKKworI2RlZmluZSBNUVRUX0NPTk5BQ0tfTEVOIDIKKyNkZWZpbmUgTVFUVF9TVUJBQ0tfTEVOIDMKKyNkZWZpbmUgTVFUVF9DTElFTlRJRF9MRU4gMTIgLyogImN1cmwwMTIzYWJjZCIgKi8KKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIGludCBtcXR0X2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrKTsKK3N0YXRpYyBDVVJMY29kZSBtcXR0X3NldHVwX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworLyoKKyAqIE1RVFQgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9tcXR0ID0geworICAiTVFUVCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgbXF0dF9zZXR1cF9jb25uLCAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBtcXR0X2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIG1xdHRfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgbXF0dF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX01RVFQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19NUVRULCAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9zZXR1cF9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgLyogYWxsb2NhdGUgdGhlIEhUVFAtc3BlY2lmaWMgc3RydWN0IGZvciB0aGUgQ3VybF9lYXN5LCBvbmx5IHRvIHN1cnZpdmUKKyAgICAgZHVyaW5nIHRoaXMgcmVxdWVzdCAqLworICBzdHJ1Y3QgTVFUVCAqbXE7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBERUJVR0FTU0VSVChkYXRhLT5yZXEucHJvdG9wID09IE5VTEwpOworCisgIG1xID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgTVFUVCkpOworICBpZighbXEpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIGRhdGEtPnJlcS5wcm90b3AgPSBtcTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBNUVRUICptcSA9IGRhdGEtPnJlcS5wcm90b3A7CisgIHNzaXplX3QgbjsKKyAgcmVzdWx0ID0gQ3VybF93cml0ZShjb25uLCBzb2NrZmQsIGJ1ZiwgbGVuLCAmbik7CisgIGlmKCFyZXN1bHQgJiYgZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfT1VULCBidWYsIChzaXplX3Qpbik7CisgIGlmKGxlbiAhPSAoc2l6ZV90KW4pIHsKKyAgICBzaXplX3QgbnNlbmQgPSBsZW4gLSBuOworICAgIGNoYXIgKnNlbmRsZWZ0b3ZlcnMgPSBDdXJsX21lbWR1cCgmYnVmW25dLCBuc2VuZCk7CisgICAgaWYoIXNlbmRsZWZ0b3ZlcnMpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBtcS0+c2VuZGxlZnRvdmVycyA9IHNlbmRsZWZ0b3ZlcnM7CisgICAgbXEtPm5zZW5kID0gbnNlbmQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogR2VuZXJpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpCisgICB0byB3YWl0IGZvciBhbmQgZm9yIHdoYXQgYWN0aW9ucyBkdXJpbmcgdGhlIERPSU5HIGFuZCBQUk9UT0NPTk5FQ1QKKyAgIHN0YXRlcyAqLworc3RhdGljIGludCBtcXR0X2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgc29ja1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICByZXR1cm4gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgY29uc3Qgc2l6ZV90IGNsaWVudF9pZF9vZmZzZXQgPSAxNDsKKyAgY29uc3Qgc2l6ZV90IHBhY2tldGxlbiA9IGNsaWVudF9pZF9vZmZzZXQgKyBNUVRUX0NMSUVOVElEX0xFTjsKKyAgY2hhciBjbGllbnRfaWRbTVFUVF9DTElFTlRJRF9MRU4gKyAxXSA9ICJjdXJsIjsKKyAgY29uc3Qgc2l6ZV90IGN1cmxfbGVuID0gc3RybGVuKCJjdXJsIik7CisgIGNoYXIgcGFja2V0WzMyXSA9IHsKKyAgICBNUVRUX01TR19DT05ORUNULCAgLyogcGFja2V0IHR5cGUgKi8KKyAgICAweDAwLCAgICAgICAgICAgICAgLyogcmVtYWluaW5nIGxlbmd0aCAqLworICAgIDB4MDAsIDB4MDQsICAgICAgICAvKiBwcm90b2NvbCBsZW5ndGggKi8KKyAgICAnTScsJ1EnLCdUJywnVCcsICAgLyogcHJvdG9jb2wgbmFtZSAqLworICAgIDB4MDQsICAgICAgICAgICAgICAvKiBwcm90b2NvbCBsZXZlbCAqLworICAgIDB4MDIsICAgICAgICAgICAgICAvKiBDT05ORUNUIGZsYWc6IENsZWFuU2Vzc2lvbiAqLworICAgIDB4MDAsIDB4M2MsICAgICAgICAvKiBrZWVwLWFsaXZlIDAgPSBkaXNhYmxlZCAqLworICAgIDB4MDAsIDB4MDAgICAgICAgICAvKiBwYXlsb2FkMSBsZW5ndGggKi8KKyAgfTsKKyAgcGFja2V0WzFdID0gKHBhY2tldGxlbiAtIDIpICYgMHg3ZjsKKyAgcGFja2V0W2NsaWVudF9pZF9vZmZzZXQgLSAxXSA9IE1RVFRfQ0xJRU5USURfTEVOOworCisgIHJlc3VsdCA9IEN1cmxfcmFuZF9oZXgoY29ubi0+ZGF0YSwgKHVuc2lnbmVkIGNoYXIgKikmY2xpZW50X2lkW2N1cmxfbGVuXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNUVRUX0NMSUVOVElEX0xFTiAtIGN1cmxfbGVuICsgMSk7CisgIG1lbWNweSgmcGFja2V0W2NsaWVudF9pZF9vZmZzZXRdLCBjbGllbnRfaWQsIE1RVFRfQ0xJRU5USURfTEVOKTsKKyAgaW5mb2YoY29ubi0+ZGF0YSwgIlVzaW5nIGNsaWVudCBpZCAnJXMnXG4iLCBjbGllbnRfaWQpOworICBpZighcmVzdWx0KQorICAgIHJlc3VsdCA9IG1xdHRfc2VuZChjb25uLCBwYWNrZXQsIHBhY2tldGxlbik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgcmVzdWx0ID0gbXF0dF9zZW5kKGNvbm4sIChjaGFyICopIlx4ZTBceDAwIiwgMik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X3ZlcmlmeV9jb25uYWNrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICB1bnNpZ25lZCBjaGFyIHJlYWRidWZbTVFUVF9DT05OQUNLX0xFTl07CisgIHNzaXplX3QgbnJlYWQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBzb2NrZmQsIChjaGFyICopcmVhZGJ1ZiwgTVFUVF9DT05OQUNLX0xFTiwgJm5yZWFkKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZmFpbDsKKworICBpZihkYXRhLT5zZXQudmVyYm9zZSkKKyAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgKGNoYXIgKilyZWFkYnVmLCAoc2l6ZV90KW5yZWFkKTsKKworICAvKiBmaXhtZSAqLworICBpZihucmVhZCA8IE1RVFRfQ09OTkFDS19MRU4pIHsKKyAgICByZXN1bHQgPSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogdmVyaWZ5IENPTk5BQ0sgKi8KKyAgaWYocmVhZGJ1ZlswXSAhPSAweDAwIHx8IHJlYWRidWZbMV0gIT0gMHgwMCkgeworICAgIGZhaWxmKGRhdGEsICJFeHBlY3RlZCAlMDJ4JTAyeCBidXQgZ290ICUwMnglMDJ4IiwKKyAgICAgICAgICAweDAwLCAweDAwLCByZWFkYnVmWzBdLCByZWFkYnVmWzFdKTsKKyAgICByZXN1bHQgPSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CisgIH0KKworZmFpbDoKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIG1xdHRfZ2V0X3RvcGljKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdG9waWMsIHNpemVfdCAqdG9waWNsZW4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBjaGFyICpwYXRoID0gY29ubi0+ZGF0YS0+c3RhdGUudXAucGF0aDsKKworICBpZihzdHJsZW4ocGF0aCkgPiAxKSB7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgcGF0aCArIDEsIDAsIHRvcGljLCB0b3BpY2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfTkFEQSk7CisgIH0KKyAgZWxzZSB7CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkVycm9yOiBObyB0b3BpYyBzcGVjaWZpZWQuIik7CisgICAgcmVzdWx0ID0gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbnQgbXF0dF9lbmNvZGVfbGVuKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgdW5zaWduZWQgY2hhciBlbmNvZGVkOworICBpbnQgaTsKKworICBmb3IoaSA9IDA7IChsZW4gPiAwKSAmJiAoaTw0KTsgaSsrKSB7CisgICAgZW5jb2RlZCA9IGxlbiAlIDB4ODA7CisgICAgbGVuIC89IDB4ODA7CisgICAgaWYobGVuKQorICAgICAgZW5jb2RlZCB8PSAweDgwOworICAgIGJ1ZltpXSA9IGVuY29kZWQ7CisgIH0KKworICByZXR1cm4gaTsKK30KKworc3RhdGljIENVUkxjb2RlIG1xdHRfc3Vic2NyaWJlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGNoYXIgKnRvcGljID0gTlVMTDsKKyAgc2l6ZV90IHRvcGljbGVuOworICB1bnNpZ25lZCBjaGFyICpwYWNrZXQgPSBOVUxMOworICBzaXplX3QgcGFja2V0bGVuOworICBjaGFyIGVuY29kZWRzaXplWzRdOworICBzaXplX3QgbjsKKworICByZXN1bHQgPSBtcXR0X2dldF90b3BpYyhjb25uLCAmdG9waWMsICZ0b3BpY2xlbik7CisgIGlmKHJlc3VsdCkKKyAgICBnb3RvIGZhaWw7CisKKyAgY29ubi0+cHJvdG8ubXF0dC5wYWNrZXRpZCsrOworCisgIHBhY2tldGxlbiA9IHRvcGljbGVuICsgNTsgLyogcGFja2V0aWQgKyB0b3BpYyAoaGFzIGEgdHdvIGJ5dGUgbGVuZ3RoIGZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMiBieXRlcyB0b3BpYyBsZW5ndGggKyBRb1MgYnl0ZSAqLworICBuID0gbXF0dF9lbmNvZGVfbGVuKChjaGFyICopZW5jb2RlZHNpemUsIHBhY2tldGxlbik7CisgIHBhY2tldGxlbiArPSBuICsgMTsgLyogYWRkIG9uZSBmb3IgdGhlIGNvbnRyb2wgcGFja2V0IHR5cGUgYnl0ZSAqLworCisgIHBhY2tldCA9IG1hbGxvYyhwYWNrZXRsZW4pOworICBpZighcGFja2V0KSB7CisgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICBwYWNrZXRbMF0gPSBNUVRUX01TR19TVUJTQ1JJQkU7CisgIG1lbWNweSgmcGFja2V0WzFdLCBlbmNvZGVkc2l6ZSwgbik7CisgIHBhY2tldFsxICsgbl0gPSAoY29ubi0+cHJvdG8ubXF0dC5wYWNrZXRpZCA+PiA4KSAmIDB4ZmY7CisgIHBhY2tldFsyICsgbl0gPSBjb25uLT5wcm90by5tcXR0LnBhY2tldGlkICYgMHhmZjsKKyAgcGFja2V0WzMgKyBuXSA9ICh0b3BpY2xlbiA+PiA4KSAmIDB4ZmY7CisgIHBhY2tldFs0ICsgbiBdID0gdG9waWNsZW4gJiAweGZmOworICBtZW1jcHkoJnBhY2tldFs1ICsgbl0sIHRvcGljLCB0b3BpY2xlbik7CisgIHBhY2tldFs1ICsgbiArIHRvcGljbGVuXSA9IDA7IC8qIFFvUyB6ZXJvICovCisKKyAgcmVzdWx0ID0gbXF0dF9zZW5kKGNvbm4sIChjaGFyICopcGFja2V0LCBwYWNrZXRsZW4pOworCitmYWlsOgorICBmcmVlKHRvcGljKTsKKyAgZnJlZShwYWNrZXQpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGZpcnN0IGJ5dGUgd2FzIGFscmVhZHkgcmVhZC4KKyAqLworc3RhdGljIENVUkxjb2RlIG1xdHRfdmVyaWZ5X3N1YmFjayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgdW5zaWduZWQgY2hhciByZWFkYnVmW01RVFRfU1VCQUNLX0xFTl07CisgIHNzaXplX3QgbnJlYWQ7CisgIHN0cnVjdCBtcXR0X2Nvbm4gKm1xdHQgPSAmY29ubi0+cHJvdG8ubXF0dDsKKworICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCAoY2hhciAqKXJlYWRidWYsIE1RVFRfU1VCQUNLX0xFTiwgJm5yZWFkKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZmFpbDsKKworICBpZihjb25uLT5kYXRhLT5zZXQudmVyYm9zZSkKKyAgICBDdXJsX2RlYnVnKGNvbm4tPmRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgKGNoYXIgKilyZWFkYnVmLCAoc2l6ZV90KW5yZWFkKTsKKworICAvKiBmaXhtZSAqLworICBpZihucmVhZCA8IE1RVFRfU1VCQUNLX0xFTikgeworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICAvKiB2ZXJpZnkgU1VCQUNLICovCisgIGlmKHJlYWRidWZbMF0gIT0gKChtcXR0LT5wYWNrZXRpZCA+PiA4KSAmIDB4ZmYpIHx8CisgICAgIHJlYWRidWZbMV0gIT0gKG1xdHQtPnBhY2tldGlkICYgMHhmZikgfHwKKyAgICAgcmVhZGJ1ZlsyXSAhPSAweDAwKQorICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKKworZmFpbDoKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIG1xdHRfcHVibGlzaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY2hhciAqcGF5bG9hZCA9IGNvbm4tPmRhdGEtPnNldC5wb3N0ZmllbGRzOworICBzaXplX3QgcGF5bG9hZGxlbiA9IChzaXplX3QpY29ubi0+ZGF0YS0+c2V0LnBvc3RmaWVsZHNpemU7CisgIGNoYXIgKnRvcGljID0gTlVMTDsKKyAgc2l6ZV90IHRvcGljbGVuOworICB1bnNpZ25lZCBjaGFyICpwa3QgPSBOVUxMOworICBzaXplX3QgaSA9IDA7CisgIHNpemVfdCByZW1haW5pbmdsZW5ndGg7CisgIHNpemVfdCBlbmNvZGVsZW47CisgIGNoYXIgZW5jb2RlZGJ5dGVzWzRdOworCisgIHJlc3VsdCA9IG1xdHRfZ2V0X3RvcGljKGNvbm4sICZ0b3BpYywgJnRvcGljbGVuKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZmFpbDsKKworICByZW1haW5pbmdsZW5ndGggPSBwYXlsb2FkbGVuICsgMiArIHRvcGljbGVuOworICBlbmNvZGVsZW4gPSBtcXR0X2VuY29kZV9sZW4oZW5jb2RlZGJ5dGVzLCByZW1haW5pbmdsZW5ndGgpOworCisgIC8qIGFkZCB0aGUgY29udHJvbCBieXRlIGFuZCB0aGUgZW5jb2RlZCByZW1haW5pbmcgbGVuZ3RoICovCisgIHBrdCA9IG1hbGxvYyhyZW1haW5pbmdsZW5ndGggKyAxICsgZW5jb2RlbGVuKTsKKyAgaWYoIXBrdCkgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogYXNzZW1ibGUgcGFja2V0ICovCisgIHBrdFtpKytdID0gTVFUVF9NU0dfUFVCTElTSDsKKyAgbWVtY3B5KCZwa3RbaV0sIGVuY29kZWRieXRlcywgZW5jb2RlbGVuKTsKKyAgaSArPSBlbmNvZGVsZW47CisgIHBrdFtpKytdID0gKHRvcGljbGVuID4+IDgpICYgMHhmZjsKKyAgcGt0W2krK10gPSAodG9waWNsZW4gJiAweGZmKTsKKyAgbWVtY3B5KCZwa3RbaV0sIHRvcGljLCB0b3BpY2xlbik7CisgIGkgKz0gdG9waWNsZW47CisgIG1lbWNweSgmcGt0W2ldLCBwYXlsb2FkLCBwYXlsb2FkbGVuKTsKKyAgaSArPSBwYXlsb2FkbGVuOworICByZXN1bHQgPSBtcXR0X3NlbmQoY29ubiwgKGNoYXIgKilwa3QsIGkpOworCitmYWlsOgorICBmcmVlKHBrdCk7CisgIGZyZWUodG9waWMpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc2l6ZV90IG1xdHRfZGVjb2RlX2xlbih1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuLCBzaXplX3QgKmxlbmJ5dGVzKQoreworICBzaXplX3QgbGVuID0gMDsKKyAgc2l6ZV90IG11bHQgPSAxOworICBzaXplX3QgaTsKKyAgdW5zaWduZWQgY2hhciBlbmNvZGVkID0gMTI4OworCisgIGZvcihpID0gMDsgKGkgPCBidWZsZW4pICYmIChlbmNvZGVkICYgMTI4KTsgaSsrKSB7CisgICAgZW5jb2RlZCA9IGJ1ZltpXTsKKyAgICBsZW4gKz0gKGVuY29kZWQgJiAxMjcpICogbXVsdDsKKyAgICBtdWx0ICo9IDEyODsKKyAgfQorCisgIGlmKGxlbmJ5dGVzKQorICAgICpsZW5ieXRlcyA9IGk7CisKKyAgcmV0dXJuIGxlbjsKK30KKworI2lmZGVmIENVUkxERUJVRworc3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlbmFtZXNbXT17CisgICJNUVRUX0ZJUlNUIiwKKyAgIk1RVFRfUkVNQUlOSU5HX0xFTkdUSCIsCisgICJNUVRUX0NPTk5BQ0siLAorICAiTVFUVF9TVUJBQ0siLAorICAiTVFUVF9TVUJBQ0tfQ09NSU5HIiwKKyAgIk1RVFRfUFVCV0FJVCIsCisgICJNUVRUX1BVQl9SRU1BSU4iLAorCisgICJOT1QgQSBTVEFURSIKK307CisjZW5kaWYKKworLyogVGhlIG9ubHkgd2F5IHRvIGNoYW5nZSBzdGF0ZSAqLworc3RhdGljIHZvaWQgbXFzdGF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgIGVudW0gbXF0dHN0YXRlIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICBlbnVtIG1xdHRzdGF0ZSBuZXh0c3RhdGUpIC8qIHVzZWQgaWYgc3RhdGUgPT0gRklSU1QgKi8KK3sKKyAgc3RydWN0IG1xdHRfY29ubiAqbXF0dCA9ICZjb25uLT5wcm90by5tcXR0OworI2lmZGVmIENVUkxERUJVRworICBpbmZvZihjb25uLT5kYXRhLCAiJXMgKGZyb20gJXMpIChuZXh0IGlzICVzKVxuIiwKKyAgICAgICAgc3RhdGVuYW1lc1tzdGF0ZV0sCisgICAgICAgIHN0YXRlbmFtZXNbbXF0dC0+c3RhdGVdLAorICAgICAgICAoc3RhdGUgPT0gTVFUVF9GSVJTVCk/IHN0YXRlbmFtZXNbbmV4dHN0YXRlXSA6ICIiKTsKKyNlbmRpZgorICBtcXR0LT5zdGF0ZSA9IHN0YXRlOworICBpZihzdGF0ZSA9PSBNUVRUX0ZJUlNUKQorICAgIG1xdHQtPm5leHRzdGF0ZSA9IG5leHRzdGF0ZTsKK30KKworCisvKiBmb3IgdGhlIHB1Ymxpc2ggcGFja2V0ICovCisjZGVmaW5lIE1RVFRfSEVBREVSX0xFTiA1ICAgIC8qIG1heCA1IGJ5dGVzICovCisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X3JlYWRfcHVibGlzaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHNzaXplX3QgbnJlYWQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICB1bnNpZ25lZCBjaGFyICpwa3QgPSAodW5zaWduZWQgY2hhciAqKWRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgc2l6ZV90IHJlbWxlbjsKKyAgc3RydWN0IG1xdHRfY29ubiAqbXF0dCA9ICZjb25uLT5wcm90by5tcXR0OworICBzdHJ1Y3QgTVFUVCAqbXEgPSBkYXRhLT5yZXEucHJvdG9wOworICB1bnNpZ25lZCBjaGFyIHBhY2tldDsKKworICBzd2l0Y2gobXF0dC0+c3RhdGUpIHsKKyAgTVFUVF9TVUJBQ0tfQ09NSU5HOgorICBjYXNlIE1RVFRfU1VCQUNLX0NPTUlORzoKKyAgICByZXN1bHQgPSBtcXR0X3ZlcmlmeV9zdWJhY2soY29ubik7CisgICAgaWYocmVzdWx0KQorICAgICAgYnJlYWs7CisKKyAgICBtcXN0YXRlKGNvbm4sIE1RVFRfRklSU1QsIE1RVFRfUFVCV0FJVCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBNUVRUX1NVQkFDSzoKKyAgY2FzZSBNUVRUX1BVQldBSVQ6CisgICAgLyogd2UgYXJlIGV4cGVjdGluZyBQVUJMSVNIIG9yIFNVQkFDSyAqLworICAgIHBhY2tldCA9IG1xLT5maXJzdGJ5dGUgJiAweGYwOworICAgIGlmKHBhY2tldCA9PSBNUVRUX01TR19QVUJMSVNIKQorICAgICAgbXFzdGF0ZShjb25uLCBNUVRUX1BVQl9SRU1BSU4sIE1RVFRfTk9TVEFURSk7CisgICAgZWxzZSBpZihwYWNrZXQgPT0gTVFUVF9NU0dfU1VCQUNLKSB7CisgICAgICBtcXN0YXRlKGNvbm4sIE1RVFRfU1VCQUNLX0NPTUlORywgTVFUVF9OT1NUQVRFKTsKKyAgICAgIGdvdG8gTVFUVF9TVUJBQ0tfQ09NSU5HOworICAgIH0KKyAgICBlbHNlIGlmKHBhY2tldCA9PSBNUVRUX01TR19ESVNDT05ORUNUKSB7CisgICAgICBpbmZvZihkYXRhLCAiR290IERJU0NPTk5FQ1RcbiIpOworICAgICAgKmRvbmUgPSBUUlVFOworICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfV0VJUkRfU0VSVkVSX1JFUExZOworICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgLyogLS0gc3dpdGNoZWQgc3RhdGUgLS0gKi8KKyAgICByZW1sZW4gPSBtcS0+cmVtYWluaW5nX2xlbmd0aDsKKyAgICBpbmZvZihkYXRhLCAiUmVtYWluaW5nIGxlbmd0aDogJXpkIGJ5dGVzXG4iLCByZW1sZW4pOworICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCByZW1sZW4pOworICAgIGRhdGEtPnJlcS5ieXRlY291bnQgPSAwOworICAgIGRhdGEtPnJlcS5zaXplID0gcmVtbGVuOworICAgIG1xLT5ucGFja2V0ID0gcmVtbGVuOyAvKiBnZXQgdGhpcyBtYW55IGJ5dGVzICovCisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBNUVRUX1BVQl9SRU1BSU46IHsKKyAgICAvKiByZWFkIHJlc3Qgb2YgcGFja2V0LCBidXQgbm8gbW9yZS4gQ2FwIHRvIGJ1ZmZlciBzaXplICovCisgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworICAgIHNpemVfdCByZXN0ID0gbXEtPm5wYWNrZXQ7CisgICAgaWYocmVzdCA+IChzaXplX3QpZGF0YS0+c2V0LmJ1ZmZlcl9zaXplKQorICAgICAgcmVzdCA9IChzaXplX3QpZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOworICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBzb2NrZmQsIChjaGFyICopcGt0LCByZXN0LCAmbnJlYWQpOworICAgIGlmKHJlc3VsdCkgeworICAgICAgaWYoQ1VSTEVfQUdBSU4gPT0gcmVzdWx0KSB7CisgICAgICAgIGluZm9mKGRhdGEsICJFRUVFIEFBQUFHQUlOXG4iKTsKKyAgICAgIH0KKyAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZighbnJlYWQpIHsKKyAgICAgIGluZm9mKGRhdGEsICJzZXJ2ZXIgZGlzY29ubmVjdGVkXG4iKTsKKyAgICAgIHJlc3VsdCA9IENVUkxFX1BBUlRJQUxfRklMRTsKKyAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkKKyAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwgKGNoYXIgKilwa3QsIChzaXplX3QpbnJlYWQpOworCisgICAgbXEtPm5wYWNrZXQgLT0gbnJlYWQ7CisgICAgay0+Ynl0ZWNvdW50ICs9IG5yZWFkOworICAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCBrLT5ieXRlY291bnQpOworCisgICAgLyogaWYgUW9TIGlzIHNldCwgbWVzc2FnZSBjb250YWlucyBwYWNrZXQgaWQgKi8KKworICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopcGt0LCBucmVhZCk7CisgICAgaWYocmVzdWx0KQorICAgICAgZ290byBlbmQ7CisKKyAgICBpZighbXEtPm5wYWNrZXQpCisgICAgICAvKiBubyBtb3JlIFBVQkxJU0ggcGF5bG9hZCwgYmFjayB0byBzdWJzY3JpYmUgd2FpdCBzdGF0ZSAqLworICAgICAgbXFzdGF0ZShjb25uLCBNUVRUX0ZJUlNULCBNUVRUX1BVQldBSVQpOworICAgIGJyZWFrOworICB9CisgIGRlZmF1bHQ6CisgICAgREVCVUdBU1NFUlQoTlVMTCk7IC8qIGlsbGVnYWwgc3RhdGUgKi8KKyAgICByZXN1bHQgPSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgZ290byBlbmQ7CisgIH0KKyAgZW5kOgorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAqZG9uZSA9IEZBTFNFOyAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KKworICByZXN1bHQgPSBtcXR0X2Nvbm5lY3QoY29ubik7CisgIGlmKHJlc3VsdCkgeworICAgIGZhaWxmKGRhdGEsICJFcnJvciAlZCBzZW5kaW5nIE1RVFQgQ09OTiByZXF1ZXN0IiwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIG1xc3RhdGUoY29ubiwgTVFUVF9GSVJTVCwgTVFUVF9DT05OQUNLKTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgbXF0dF9jb25uICptcXR0ID0gJmNvbm4tPnByb3RvLm1xdHQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgTVFUVCAqbXEgPSBkYXRhLT5yZXEucHJvdG9wOworICBzc2l6ZV90IG5yZWFkOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICB1bnNpZ25lZCBjaGFyICpwa3QgPSAodW5zaWduZWQgY2hhciAqKWRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgdW5zaWduZWQgY2hhciBieXRlOworCisgICpkb25lID0gRkFMU0U7CisKKyAgaWYobXEtPm5zZW5kKSB7CisgICAgLyogc2VuZCB0aGUgcmVtYWluZGVyIG9mIGFuIG91dGdvaW5nIHBhY2tldCAqLworICAgIGNoYXIgKnB0ciA9IG1xLT5zZW5kbGVmdG92ZXJzOworICAgIHJlc3VsdCA9IG1xdHRfc2VuZChjb25uLCBtcS0+c2VuZGxlZnRvdmVycywgbXEtPm5zZW5kKTsKKyAgICBmcmVlKHB0cik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGluZm9mKGRhdGEsICJtcXR0X2RvaW5nOiBzdGF0ZSBbJWRdXG4iLCAoaW50KSBtcXR0LT5zdGF0ZSk7CisgIHN3aXRjaChtcXR0LT5zdGF0ZSkgeworICBjYXNlIE1RVFRfRklSU1Q6CisgICAgLyogUmVhZCB0aGUgaW5pdGlhbCBieXRlIG9ubHkgKi8KKyAgICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCAoY2hhciAqKSZtcS0+Zmlyc3RieXRlLCAxLCAmbnJlYWQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQorICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIChjaGFyICopJm1xLT5maXJzdGJ5dGUsIDEpOworICAgIC8qIHJlbWVtYmVyIHRoZSBmaXJzdCBieXRlICovCisgICAgbXEtPm5wYWNrZXQgPSAwOworICAgIG1xc3RhdGUoY29ubiwgTVFUVF9SRU1BSU5JTkdfTEVOR1RILCBNUVRUX05PU1RBVEUpOworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgTVFUVF9SRU1BSU5JTkdfTEVOR1RIOgorICAgIGRvIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBzb2NrZmQsIChjaGFyICopJmJ5dGUsIDEsICZucmVhZCk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGJyZWFrOworICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCAoY2hhciAqKSZieXRlLCAxKTsKKyAgICAgIHBrdFttcS0+bnBhY2tldCsrXSA9IGJ5dGU7CisgICAgfSB3aGlsZSgoYnl0ZSAmIDB4ODApICYmIChtcS0+bnBhY2tldCA8IDQpKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKyAgICBtcS0+cmVtYWluaW5nX2xlbmd0aCA9IG1xdHRfZGVjb2RlX2xlbigmcGt0WzBdLCBtcS0+bnBhY2tldCwgTlVMTCk7CisgICAgbXEtPm5wYWNrZXQgPSAwOworICAgIGlmKG1xLT5yZW1haW5pbmdfbGVuZ3RoKSB7CisgICAgICBtcXN0YXRlKGNvbm4sIG1xdHQtPm5leHRzdGF0ZSwgTVFUVF9OT1NUQVRFKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBtcXN0YXRlKGNvbm4sIE1RVFRfRklSU1QsIE1RVFRfRklSU1QpOworCisgICAgaWYobXEtPmZpcnN0Ynl0ZSA9PSBNUVRUX01TR19ESVNDT05ORUNUKSB7CisgICAgICBpbmZvZihkYXRhLCAiR290IERJU0NPTk5FQ1RcbiIpOworICAgICAgKmRvbmUgPSBUUlVFOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBNUVRUX0NPTk5BQ0s6CisgICAgcmVzdWx0ID0gbXF0dF92ZXJpZnlfY29ubmFjayhjb25uKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUKSB7CisgICAgICByZXN1bHQgPSBtcXR0X3B1Ymxpc2goY29ubik7CisgICAgICBpZighcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdCA9IG1xdHRfZGlzY29ubmVjdChjb25uKTsKKyAgICAgICAgKmRvbmUgPSBUUlVFOworICAgICAgfQorICAgICAgbXF0dC0+bmV4dHN0YXRlID0gTVFUVF9GSVJTVDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXN1bHQgPSBtcXR0X3N1YnNjcmliZShjb25uKTsKKyAgICAgIGlmKCFyZXN1bHQpIHsKKyAgICAgICAgbXFzdGF0ZShjb25uLCBNUVRUX0ZJUlNULCBNUVRUX1NVQkFDSyk7CisgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgTVFUVF9TVUJBQ0s6CisgIGNhc2UgTVFUVF9QVUJXQUlUOgorICBjYXNlIE1RVFRfUFVCX1JFTUFJTjoKKyAgICByZXN1bHQgPSBtcXR0X3JlYWRfcHVibGlzaChjb25uLCBkb25lKTsKKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTdGF0ZSBub3QgaGFuZGxlZCB5ZXQiKTsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgYnJlYWs7CisgIH0KKworICBpZihyZXN1bHQgPT0gQ1VSTEVfQUdBSU4pCisgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBDVVJMX0VOQUJMRV9NUVRUICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcXR0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcXR0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0NjNkNQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21xdHQuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX01RVFRfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9NUVRUX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIEJqw7ZybiBTdGVuYmVyZywgPGJqb3JuQGhheHguc2U+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9tcXR0OworI2VuZGlmCisKK2VudW0gbXF0dHN0YXRlIHsKKyAgTVFUVF9GSVJTVCwgICAgICAgICAgICAgLyogMCAqLworICBNUVRUX1JFTUFJTklOR19MRU5HVEgsICAvKiAxICovCisgIE1RVFRfQ09OTkFDSywgICAgICAgICAgIC8qIDIgKi8KKyAgTVFUVF9TVUJBQ0ssICAgICAgICAgICAgLyogMyAqLworICBNUVRUX1NVQkFDS19DT01JTkcsICAgICAvKiA0IC0gdGhlIFNVQkFDSyByZW1haW5kZXIgKi8KKyAgTVFUVF9QVUJXQUlULCAgICAvKiA1IC0gd2FpdCBmb3IgcHVibGlzaCAqLworICBNUVRUX1BVQl9SRU1BSU4sICAvKiA2IC0gd2FpdCBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHVibGlzaCAqLworCisgIE1RVFRfTk9TVEFURSAvKiA3IC0gbmV2ZXIgdXNlZCBhbiBhY3R1YWwgc3RhdGUgKi8KK307CisKK3N0cnVjdCBtcXR0X2Nvbm4geworICBlbnVtIG1xdHRzdGF0ZSBzdGF0ZTsKKyAgZW51bSBtcXR0c3RhdGUgbmV4dHN0YXRlOyAvKiBzd2l0Y2ggdG8gdGhpcyBhZnRlciByZW1haW5pbmcgbGVuZ3RoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSAqLworICB1bnNpZ25lZCBpbnQgcGFja2V0aWQ7Cit9OworCisvKiBwcm90b2NvbC1zcGVjaWZpYyB0cmFuc2Zlci1yZWxhdGVkIGRhdGEgKi8KK3N0cnVjdCBNUVRUIHsKKyAgY2hhciAqc2VuZGxlZnRvdmVyczsKKyAgc2l6ZV90IG5zZW5kOyAvKiBzaXplIG9mIHNlbmRsZWZ0b3ZlcnMgKi8KKworICAvKiB3aGVuIHJlY2VpdmluZyAqLworICBzaXplX3QgbnBhY2tldDsgLyogYnl0ZSBjb3VudGVyICovCisgIHVuc2lnbmVkIGNoYXIgZmlyc3RieXRlOworICBzaXplX3QgcmVtYWluaW5nX2xlbmd0aDsKK307CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NUVRUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aS5jCmluZGV4IGM3YzQ2ZWUuLjI0OWUzNjAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGkuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJodHRwX3Byb3h5LmgiCiAjaW5jbHVkZSAiaHR0cDIuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCisjaW5jbHVkZSAic29ja3MuaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC03MSwxNSArNzMsMTIgQEAKIAogc3RhdGljIENVUkxNY29kZSBzaW5nbGVzb2NrZXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7Ci1zdGF0aWMgaW50IHVwZGF0ZV90aW1lcihzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwotCiBzdGF0aWMgQ1VSTE1jb2RlIGFkZF9uZXh0X3RpbWVvdXQoc3RydWN0IGN1cmx0aW1lIG5vdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZCk7CiBzdGF0aWMgQ1VSTE1jb2RlIG11bHRpX3RpbWVvdXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKnRpbWVvdXRfbXMpOwogc3RhdGljIHZvaWQgcHJvY2Vzc19wZW5kaW5nX2hhbmRsZXMoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpKTsKLXN0YXRpYyB2b2lkIGRldGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAogI2lmZGVmIERFQlVHQlVJTEQKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3RhdGVuYW1lW109ewpAQCAtMTEyLDcgKzExMSw3IEBACiAKICAgLyogSW1wb3J0YW50OiByZXNldCB0aGUgY29ubiBwb2ludGVyIHNvIHRoYXQgd2UgZG9uJ3QgcG9pbnQgdG8gbWVtb3J5CiAgICAgIHRoYXQgY291bGQgYmUgZnJlZWQgYW55dGltZSAqLwotICBkZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisgIEN1cmxfZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOwogICBDdXJsX2V4cGlyZV9jbGVhcihkYXRhKTsgLyogc3RvcCBhbGwgdGltZXJzICovCiB9CiAKQEAgLTE2OSw5ICsxNjgsMTEgQEAKICAgfQogI2VuZGlmCiAKLSAgaWYoc3RhdGUgPT0gQ1VSTE1fU1RBVEVfQ09NUExFVEVEKQorICBpZihzdGF0ZSA9PSBDVVJMTV9TVEFURV9DT01QTEVURUQpIHsKICAgICAvKiBjaGFuZ2luZyB0byBDT01QTEVURUQgbWVhbnMgdGhlcmUncyBvbmUgbGVzcyBlYXN5IGhhbmRsZSAnYWxpdmUnICovCisgICAgREVCVUdBU1NFUlQoZGF0YS0+bXVsdGktPm51bV9hbGl2ZSA+IDApOwogICAgIGRhdGEtPm11bHRpLT5udW1fYWxpdmUtLTsKKyAgfQogCiAgIC8qIGlmIHRoaXMgc3RhdGUgaGFzIGFuIGluaXQtZnVuY3Rpb24sIHJ1biBpdCAqLwogICBpZihmaW5pdFtzdGF0ZV0pCkBAIC0xODksNyArMTkwLDcgQEAKICAqLwogCiBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSB7Ci0gIHN0cnVjdCBjdXJsX2xsaXN0IGxpc3Q7IC8qIGxpc3Qgb2YgZWFzeSBoYW5kbGVzIHVzaW5nIHRoaXMgc29ja2V0ICovCisgIHN0cnVjdCBjdXJsX2hhc2ggdHJhbnNmZXJzOyAvKiBoYXNoIG9mIHRyYW5zZmVycyB1c2luZyB0aGlzIHNvY2tldCAqLwogICB1bnNpZ25lZCBpbnQgYWN0aW9uOyAgLyogd2hhdCBjb21iaW5lZCBhY3Rpb24gUkVBRC9XUklURSB0aGlzIHNvY2tldCB3YWl0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICovCiAgIHZvaWQgKnNvY2tldHA7IC8qIHNldHRhYmxlIGJ5IHVzZXJzIHdpdGggY3VybF9tdWx0aV9hc3NpZ24oKSAqLwpAQCAtMjA2LDEyICsyMDcsMzYgQEAKIHN0YXRpYyBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqc2hfZ2V0ZW50cnkoc3RydWN0IGN1cmxfaGFzaCAqc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcykKIHsKLSAgaWYocyAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgIGlmKHMgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CiAgICAgLyogb25seSBsb29rIGZvciBwcm9wZXIgc29ja2V0cyAqLwogICAgIHJldHVybiBDdXJsX2hhc2hfcGljayhzaCwgKGNoYXIgKikmcywgc2l6ZW9mKGN1cmxfc29ja2V0X3QpKTsKKyAgfQogICByZXR1cm4gTlVMTDsKIH0KIAorI2RlZmluZSBUUkhBU0hfU0laRSAxMworc3RhdGljIHNpemVfdCB0cmhhc2godm9pZCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwgc2l6ZV90IHNsb3RzX251bSkKK3sKKyAgc2l6ZV90IGtleXZhbCA9IChzaXplX3QpKihzdHJ1Y3QgQ3VybF9lYXN5ICoqKWtleTsKKyAgKHZvaWQpIGtleV9sZW5ndGg7CisKKyAgcmV0dXJuIChrZXl2YWwgJSBzbG90c19udW0pOworfQorCitzdGF0aWMgc2l6ZV90IHRyaGFzaF9jb21wYXJlKHZvaWQgKmsxLCBzaXplX3QgazFfbGVuLCB2b2lkICprMiwgc2l6ZV90IGsyX2xlbikKK3sKKyAgKHZvaWQpazFfbGVuOworICAodm9pZClrMl9sZW47CisKKyAgcmV0dXJuICooc3RydWN0IEN1cmxfZWFzeSAqKilrMSA9PSAqKHN0cnVjdCBDdXJsX2Vhc3kgKiopazI7Cit9CisKK3N0YXRpYyB2b2lkIHRyaGFzaF9kdG9yKHZvaWQgKm5hZGEpCit7CisgICh2b2lkKW5hZGE7Cit9CisKKwogLyogbWFrZSBzdXJlIHRoaXMgc29ja2V0IGlzIHByZXNlbnQgaW4gdGhlIGhhc2ggZm9yIHRoaXMgaGFuZGxlICovCiBzdGF0aWMgc3RydWN0IEN1cmxfc2hfZW50cnkgKnNoX2FkZGVudHJ5KHN0cnVjdCBjdXJsX2hhc2ggKnNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHMpCkBAIC0yMTksMTkgKzI0NCwyNSBAQAogICBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqdGhlcmUgPSBzaF9nZXRlbnRyeShzaCwgcyk7CiAgIHN0cnVjdCBDdXJsX3NoX2VudHJ5ICpjaGVjazsKIAotICBpZih0aGVyZSkKKyAgaWYodGhlcmUpIHsKICAgICAvKiBpdCBpcyBwcmVzZW50LCByZXR1cm4gZmluZSAqLwogICAgIHJldHVybiB0aGVyZTsKKyAgfQogCiAgIC8qIG5vdCBwcmVzZW50LCBhZGQgaXQgKi8KICAgY2hlY2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBDdXJsX3NoX2VudHJ5KSk7CiAgIGlmKCFjaGVjaykKICAgICByZXR1cm4gTlVMTDsgLyogbWFqb3IgZmFpbHVyZSAqLwogCi0gIEN1cmxfbGxpc3RfaW5pdCgmY2hlY2stPmxpc3QsIE5VTEwpOworICBpZihDdXJsX2hhc2hfaW5pdCgmY2hlY2stPnRyYW5zZmVycywgVFJIQVNIX1NJWkUsIHRyaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgdHJoYXNoX2NvbXBhcmUsIHRyaGFzaF9kdG9yKSkgeworICAgIGZyZWUoY2hlY2spOworICAgIHJldHVybiBOVUxMOworICB9CiAKICAgLyogbWFrZS9hZGQgbmV3IGhhc2ggZW50cnkgKi8KICAgaWYoIUN1cmxfaGFzaF9hZGQoc2gsIChjaGFyICopJnMsIHNpemVvZihjdXJsX3NvY2tldF90KSwgY2hlY2spKSB7CisgICAgQ3VybF9oYXNoX2Rlc3Ryb3koJmNoZWNrLT50cmFuc2ZlcnMpOwogICAgIGZyZWUoY2hlY2spOwogICAgIHJldHVybiBOVUxMOyAvKiBtYWpvciBmYWlsdXJlICovCiAgIH0KQEAgLTI0MSw4ICsyNzIsMTEgQEAKIAogCiAvKiBkZWxldGUgdGhlIGdpdmVuIHNvY2tldCArIGhhbmRsZSBmcm9tIHRoZSBoYXNoICovCi1zdGF0aWMgdm9pZCBzaF9kZWxlbnRyeShzdHJ1Y3QgY3VybF9oYXNoICpzaCwgY3VybF9zb2NrZXRfdCBzKQorc3RhdGljIHZvaWQgc2hfZGVsZW50cnkoc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfaGFzaCAqc2gsIGN1cmxfc29ja2V0X3QgcykKIHsKKyAgQ3VybF9oYXNoX2Rlc3Ryb3koJmVudHJ5LT50cmFuc2ZlcnMpOworCiAgIC8qIFdlIHJlbW92ZSB0aGUgaGFzaCBlbnRyeS4gVGhpcyB3aWxsIGVuZCB1cCBpbiBhIGNhbGwgdG8KICAgICAgc2hfZnJlZWVudHJ5KCkuICovCiAgIEN1cmxfaGFzaF9kZWxldGUoc2gsIChjaGFyICopJnMsIHNpemVvZihjdXJsX3NvY2tldF90KSk7CkBAIC0zMTEsMTcgKzM0NSw2IEBACiAgIHJldHVybiBDVVJMTV9PSzsKIH0KIAotLyoKLSAqIG11bHRpX2ZyZWVhbXNnKCkKLSAqCi0gKiBDYWxsYmFjayB1c2VkIGJ5IHRoZSBsbGlzdCBzeXN0ZW0gd2hlbiBhIHNpbmdsZSBsaXN0IGVudHJ5IGlzIGRlc3Ryb3llZC4KLSAqLwotc3RhdGljIHZvaWQgbXVsdGlfZnJlZWFtc2codm9pZCAqYSwgdm9pZCAqYikKLXsKLSAgKHZvaWQpYTsKLSAgKHZvaWQpYjsKLX0KLQogc3RydWN0IEN1cmxfbXVsdGkgKkN1cmxfbXVsdGlfaGFuZGxlKGludCBoYXNoc2l6ZSwgLyogc29ja2V0IGhhc2ggKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhc2hzaXplKSAvKiBjb25uZWN0aW9uIGhhc2ggKi8KIHsKQEAgLTM0MSwxMSArMzY0LDMwIEBACiAgIGlmKEN1cmxfY29ubmNhY2hlX2luaXQoJm11bHRpLT5jb25uX2NhY2hlLCBjaGFzaHNpemUpKQogICAgIGdvdG8gZXJyb3I7CiAKLSAgQ3VybF9sbGlzdF9pbml0KCZtdWx0aS0+bXNnbGlzdCwgbXVsdGlfZnJlZWFtc2cpOwotICBDdXJsX2xsaXN0X2luaXQoJm11bHRpLT5wZW5kaW5nLCBtdWx0aV9mcmVlYW1zZyk7CisgIEN1cmxfbGxpc3RfaW5pdCgmbXVsdGktPm1zZ2xpc3QsIE5VTEwpOworICBDdXJsX2xsaXN0X2luaXQoJm11bHRpLT5wZW5kaW5nLCBOVUxMKTsKKworICBtdWx0aS0+bXVsdGlwbGV4aW5nID0gVFJVRTsKIAogICAvKiAtMSBtZWFucyBpdCBub3Qgc2V0IGJ5IHVzZXIsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAqLwogICBtdWx0aS0+bWF4Y29ubmVjdHMgPSAtMTsKKyAgbXVsdGktPm1heF9jb25jdXJyZW50X3N0cmVhbXMgPSAxMDA7CisgIG11bHRpLT5pcHY2X3dvcmtzID0gQ3VybF9pcHY2d29ya3MoTlVMTCk7CisKKyNpZmRlZiBFTkFCTEVfV0FLRVVQCisgIGlmKEN1cmxfc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgbXVsdGktPndha2V1cF9wYWlyKSA8IDApIHsKKyAgICBtdWx0aS0+d2FrZXVwX3BhaXJbMF0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgbXVsdGktPndha2V1cF9wYWlyWzFdID0gQ1VSTF9TT0NLRVRfQkFEOworICB9CisgIGVsc2UgaWYoY3VybHhfbm9uYmxvY2sobXVsdGktPndha2V1cF9wYWlyWzBdLCBUUlVFKSA8IDAgfHwKKyAgICAgICAgICBjdXJseF9ub25ibG9jayhtdWx0aS0+d2FrZXVwX3BhaXJbMV0sIFRSVUUpIDwgMCkgeworICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMF0pOworICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMV0pOworICAgIG11bHRpLT53YWtldXBfcGFpclswXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICBtdWx0aS0+d2FrZXVwX3BhaXJbMV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIH0KKyNlbmRpZgorCiAgIHJldHVybiBtdWx0aTsKIAogICBlcnJvcjoKQEAgLTQ1MywxOCArNDk1LDE5IEBACiAgIC8qIGluY3JlYXNlIHRoZSBhbGl2ZS1jb3VudGVyICovCiAgIG11bHRpLT5udW1fYWxpdmUrKzsKIAotICAvKiBBIHNvbWV3aGF0IGNydWRlIHdvcmstYXJvdW5kIGZvciBhIGxpdHRsZSBnbGl0Y2ggaW4gdXBkYXRlX3RpbWVyKCkgdGhhdAotICAgICBoYXBwZW5zIGlmIHRoZSBsYXN0Y2FsbCB0aW1lIGlzIHNldCB0byB0aGUgc2FtZSB0aW1lIHdoZW4gdGhlIGhhbmRsZSBpcwotICAgICByZW1vdmVkIGFzIHdoZW4gdGhlIG5leHQgaGFuZGxlIGlzIGFkZGVkLCBhcyB0aGVuIHRoZSBjaGVjayBpbgotICAgICB1cGRhdGVfdGltZXIoKSB0aGF0IHByZXZlbnRzIGNhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIG11bHRpcGxlIHRpbWVzIHdpdGgKLSAgICAgdGhlIHNhbWUgdGltZXIgaW5mbyB3aWxsIG5vdCB0cmlnZ2VyIGFuZCB0aGVuIHRoZSBuZXcgaGFuZGxlJ3MgdGltZW91dAotICAgICB3aWxsIG5vdCBiZSBub3RpZmllZCB0byB0aGUgYXBwLgorICAvKiBBIHNvbWV3aGF0IGNydWRlIHdvcmstYXJvdW5kIGZvciBhIGxpdHRsZSBnbGl0Y2ggaW4gQ3VybF91cGRhdGVfdGltZXIoKQorICAgICB0aGF0IGhhcHBlbnMgaWYgdGhlIGxhc3RjYWxsIHRpbWUgaXMgc2V0IHRvIHRoZSBzYW1lIHRpbWUgd2hlbiB0aGUgaGFuZGxlCisgICAgIGlzIHJlbW92ZWQgYXMgd2hlbiB0aGUgbmV4dCBoYW5kbGUgaXMgYWRkZWQsIGFzIHRoZW4gdGhlIGNoZWNrIGluCisgICAgIEN1cmxfdXBkYXRlX3RpbWVyKCkgdGhhdCBwcmV2ZW50cyBjYWxsaW5nIHRoZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1lcworICAgICB3aXRoIHRoZSBzYW1lIHRpbWVyIGluZm8gd2lsbCBub3QgdHJpZ2dlciBhbmQgdGhlbiB0aGUgbmV3IGhhbmRsZSdzCisgICAgIHRpbWVvdXQgd2lsbCBub3QgYmUgbm90aWZpZWQgdG8gdGhlIGFwcC4KIAogICAgICBUaGUgd29yay1hcm91bmQgaXMgdGh1cyBzaW1wbHkgdG8gY2xlYXIgdGhlICdsYXN0Y2FsbCcgdmFyaWFibGUgdG8gZm9yY2UKLSAgICAgdXBkYXRlX3RpbWVyKCkgdG8gYWx3YXlzIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIHdoZW4gYSBuZXcgZWFzeQotICAgICBoYW5kbGUgaXMgYWRkZWQgKi8KKyAgICAgQ3VybF91cGRhdGVfdGltZXIoKSB0byBhbHdheXMgdHJpZ2dlciBhIGNhbGxiYWNrIHRvIHRoZSBhcHAgd2hlbiBhIG5ldworICAgICBlYXN5IGhhbmRsZSBpcyBhZGRlZCAqLwogICBtZW1zZXQoJm11bHRpLT50aW1lcl9sYXN0Y2FsbCwgMCwgc2l6ZW9mKG11bHRpLT50aW1lcl9sYXN0Y2FsbCkpOwogCisgIENPTk5DQUNIRV9MT0NLKGRhdGEpOwogICAvKiBUaGUgY2xvc3VyZSBoYW5kbGUgb25seSBldmVyIGhhcyBkZWZhdWx0IHRpbWVvdXRzIHNldC4gVG8gaW1wcm92ZSB0aGUKICAgICAgc3RhdGUgc29tZXdoYXQgd2UgY2xvbmUgdGhlIHRpbWVvdXRzIGZyb20gZWFjaCBhZGRlZCBoYW5kbGUgc28gdGhhdCB0aGUKICAgICAgY2xvc3VyZSBoYW5kbGUgYWx3YXlzIGhhcyB0aGUgc2FtZSB0aW1lb3V0cyBhcyB0aGUgbW9zdCByZWNlbnRseSBhZGRlZApAQCAtNDc0LDggKzUxNyw5IEBACiAgICAgZGF0YS0+c2V0LnNlcnZlcl9yZXNwb25zZV90aW1lb3V0OwogICBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLT5jbG9zdXJlX2hhbmRsZS0+c2V0Lm5vX3NpZ25hbCA9CiAgICAgZGF0YS0+c2V0Lm5vX3NpZ25hbDsKKyAgQ09OTkNBQ0hFX1VOTE9DSyhkYXRhKTsKIAotICB1cGRhdGVfdGltZXIobXVsdGkpOworICBDdXJsX3VwZGF0ZV90aW1lcihtdWx0aSk7CiAgIHJldHVybiBDVVJMTV9PSzsKIH0KIApAQCAtNTEwLDYgKzU1NCw4IEBACiAgICAgLyogU3RvcCBpZiBtdWx0aV9kb25lKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKKyAgY29ubi0+ZGF0YSA9IGRhdGE7IC8qIGVuc3VyZSB0aGUgY29ubmVjdGlvbiB1c2VzIHRoaXMgdHJhbnNmZXIgbm93ICovCisKICAgLyogU3RvcCB0aGUgcmVzb2x2ZXIgYW5kIGZyZWUgaXRzIG93biByZXNvdXJjZXMgKGJ1dCBub3QgZG5zX2VudHJ5IHlldCkuICovCiAgIEN1cmxfcmVzb2x2ZXJfa2lsbChjb25uKTsKIApAQCAtNTQ2LDE1ICs1OTIsMjAgQEAKIAogICBwcm9jZXNzX3BlbmRpbmdfaGFuZGxlcyhkYXRhLT5tdWx0aSk7IC8qIGNvbm5lY3Rpb24gLyBtdWx0aXBsZXggKi8KIAotICBkZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisgIENPTk5DQUNIRV9MT0NLKGRhdGEpOworICBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihkYXRhKTsKICAgaWYoQ09OTl9JTlVTRShjb25uKSkgewogICAgIC8qIFN0b3AgaWYgc3RpbGwgdXNlZC4gKi8KKyAgICAvKiBjb25uLT5kYXRhIG11c3Qgbm90IHJlbWFpbiBwb2ludGluZyB0byB0aGlzIHRyYW5zZmVyIHNpbmNlIGl0IGlzIGdvaW5nCisgICAgICAgYXdheSEgRmluZCBhbm90aGVyIHRvIG93biBpdCEgKi8KKyAgICBjb25uLT5kYXRhID0gY29ubi0+ZWFzeXEuaGVhZC0+cHRyOworICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgREVCVUdGKGluZm9mKGRhdGEsICJDb25uZWN0aW9uIHN0aWxsIGluIHVzZSAlenUsICIKICAgICAgICAgICAgICAgICAgIm5vIG1vcmUgbXVsdGlfZG9uZSBub3chXG4iLAogICAgICAgICAgICAgICAgICBjb25uLT5lYXN5cS5zaXplKSk7CiAgICAgcmV0dXJuIENVUkxFX09LOwogICB9Ci0KKyAgY29ubi0+ZGF0YSA9IE5VTEw7IC8qIHRoZSBjb25uZWN0aW9uIG5vdyBoYXMgbm8gb3duZXIgKi8KICAgZGF0YS0+c3RhdGUuZG9uZSA9IFRSVUU7IC8qIGNhbGxlZCBqdXN0IG5vdyEgKi8KIAogICBpZihjb25uLT5kbnNfZW50cnkpIHsKQEAgLTU2Nyw3ICs2MTgsNyBAQAogICAvKiBpZiB0aGUgdHJhbnNmZXIgd2FzIGNvbXBsZXRlZCBpbiBhIHBhdXNlZCBzdGF0ZSB0aGVyZSBjYW4gYmUgYnVmZmVyZWQKICAgICAgZGF0YSBsZWZ0IHRvIGZyZWUgKi8KICAgZm9yKGkgPSAwOyBpIDwgZGF0YS0+c3RhdGUudGVtcGNvdW50OyBpKyspIHsKLSAgICBmcmVlKGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXS5idWYpOworICAgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXS5iKTsKICAgfQogICBkYXRhLT5zdGF0ZS50ZW1wY291bnQgPSAwOwogCkBAIC01OTcsNyArNjQ4LDExIEBACiAjZW5kaWYKICAgICAgKSB8fCBjb25uLT5iaXRzLmNsb3NlCiAgICAgICAgfHwgKHByZW1hdHVyZSAmJiAhKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TVFJFQU0pKSkgewotICAgIENVUkxjb2RlIHJlczIgPSBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgcHJlbWF0dXJlKTsKKyAgICBDVVJMY29kZSByZXMyOworICAgIGNvbm5jbG9zZShjb25uLCAiZGlzY29ubmVjdGluZyIpOworICAgIEN1cmxfY29ubmNhY2hlX3JlbW92ZV9jb25uKGRhdGEsIGNvbm4sIEZBTFNFKTsKKyAgICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOworICAgIHJlczIgPSBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgcHJlbWF0dXJlKTsKIAogICAgIC8qIElmIHdlIGhhZCBhbiBlcnJvciBhbHJlYWR5LCBtYWtlIHN1cmUgd2UgcmV0dXJuIHRoYXQgb25lLiBCdXQKICAgICAgICBpZiB3ZSBnb3QgYSBuZXcgZXJyb3IsIHJldHVybiB0aGF0LiAqLwpAQCAtNjA2LDE3ICs2NjEsMjEgQEAKICAgfQogICBlbHNlIHsKICAgICBjaGFyIGJ1ZmZlclsyNTZdOworICAgIGNvbnN0IGNoYXIgKmhvc3QgPQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eSA/CisgICAgICBjb25uLT5zb2Nrc19wcm94eS5ob3N0LmRpc3BuYW1lIDoKKyAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID8gY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDoKKyNlbmRpZgorICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPyBjb25uLT5jb25uX3RvX2hvc3QuZGlzcG5hbWUgOgorICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZTsKICAgICAvKiBjcmVhdGUgc3RyaW5nIGJlZm9yZSByZXR1cm5pbmcgdGhlIGNvbm5lY3Rpb24gKi8KICAgICBtc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24gIyVsZCB0byBob3N0ICVzIGxlZnQgaW50YWN0IiwKLSAgICAgICAgICAgICAgY29ubi0+Y29ubmVjdGlvbl9pZCwKLSAgICAgICAgICAgICAgY29ubi0+Yml0cy5zb2Nrc3Byb3h5ID8gY29ubi0+c29ja3NfcHJveHkuaG9zdC5kaXNwbmFtZSA6Ci0gICAgICAgICAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID8gY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDoKLSAgICAgICAgICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPyBjb25uLT5jb25uX3RvX2hvc3QuZGlzcG5hbWUgOgotICAgICAgICAgICAgICBjb25uLT5ob3N0LmRpc3BuYW1lKTsKLQorICAgICAgICAgICAgICBjb25uLT5jb25uZWN0aW9uX2lkLCBob3N0KTsKICAgICAvKiB0aGUgY29ubmVjdGlvbiBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoaXMgdHJhbnNmZXIgKi8KLSAgICBpZihDdXJsX2Nvbm5jYWNoZV9yZXR1cm5fY29ubihjb25uKSkgeworICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CisgICAgaWYoQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oZGF0YSwgY29ubikpIHsKICAgICAgIC8qIHJlbWVtYmVyIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgY29ubmVjdGlvbiAqLwogICAgICAgZGF0YS0+c3RhdGUubGFzdGNvbm5lY3QgPSBjb25uOwogICAgICAgaW5mb2YoZGF0YSwgIiVzXG4iLCBidWZmZXIpOwpAQCAtNjI1LDYgKzY4NCw3IEBACiAgICAgICBkYXRhLT5zdGF0ZS5sYXN0Y29ubmVjdCA9IE5VTEw7CiAgIH0KIAorICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmJ1ZmZlcik7CiAgIEN1cmxfZnJlZV9yZXF1ZXN0X3N0YXRlKGRhdGEpOwogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQ5LDYgKzcwOSwxMCBAQAogICBpZighZGF0YS0+bXVsdGkpCiAgICAgcmV0dXJuIENVUkxNX09LOyAvKiBpdCBpcyBhbHJlYWR5IHJlbW92ZWQgc28gbGV0J3Mgc2F5IGl0IGlzIGZpbmUhICovCiAKKyAgLyogUHJldmVudCB1c2VycyBmcm9tIHRyeWluZyB0byByZW1vdmUgYW4gZWFzeSBoYW5kbGUgZnJvbSB0aGUgd3JvbmcgbXVsdGkgKi8KKyAgaWYoZGF0YS0+bXVsdGkgIT0gbXVsdGkpCisgICAgcmV0dXJuIENVUkxNX0JBRF9FQVNZX0hBTkRMRTsKKwogICBpZihtdWx0aS0+aW5fY2FsbGJhY2spCiAgICAgcmV0dXJuIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDsKIApAQCAtNjc0LDE5ICs3MzgsMTQgQEAKICAgICBlYXN5X293bnNfY29ubiA9IFRSVUU7CiAgIH0KIAotICAvKiBUaGUgdGltZXIgbXVzdCBiZSBzaHV0IGRvd24gYmVmb3JlIGRhdGEtPm11bHRpIGlzIHNldCB0byBOVUxMLAotICAgICBlbHNlIHRoZSB0aW1lbm9kZSB3aWxsIHJlbWFpbiBpbiB0aGUgc3BsYXkgdHJlZSBhZnRlcgotICAgICBjdXJsX2Vhc3lfY2xlYW51cCBpcyBjYWxsZWQuICovCi0gIEN1cmxfZXhwaXJlX2NsZWFyKGRhdGEpOwotCiAgIGlmKGRhdGEtPmNvbm4pIHsKIAogICAgIC8qIHdlIG11c3QgY2FsbCBtdWx0aV9kb25lKCkgaGVyZSAoaWYgd2Ugc3RpbGwgb3duIHRoZSBjb25uZWN0aW9uKSBzbyB0aGF0CiAgICAgICAgd2UgZG9uJ3QgbGVhdmUgYSBoYWxmLWJha2VkIG9uZSBhcm91bmQgKi8KICAgICBpZihlYXN5X293bnNfY29ubikgewogCi0gICAgICAvKiBtdWx0aV9kb25lKCkgY2xlYXJzIHRoZSBjb25uLT5kYXRhIGZpZWxkIHRvIGxvc2UgdGhlIGFzc29jaWF0aW9uCi0gICAgICAgICBiZXR3ZWVuIHRoZSBlYXN5IGhhbmRsZSBhbmQgdGhlIGNvbm5lY3Rpb24KKyAgICAgIC8qIG11bHRpX2RvbmUoKSBjbGVhcnMgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIGVhc3kgaGFuZGxlIGFuZCB0aGUKKyAgICAgICAgIGNvbm5lY3Rpb24uCiAKICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlnbm9yZXMgdGhlIHJldHVybiBjb2RlIHNpbXBseSBiZWNhdXNlIHRoZXJlJ3MKICAgICAgICAgIG5vdGhpbmcgcmVhbGx5IHVzZWZ1bCB0byBkbyB3aXRoIGl0IGFueXdheSEgKi8KQEAgLTY5NCw2ICs3NTMsMTEgQEAKICAgICB9CiAgIH0KIAorICAvKiBUaGUgdGltZXIgbXVzdCBiZSBzaHV0IGRvd24gYmVmb3JlIGRhdGEtPm11bHRpIGlzIHNldCB0byBOVUxMLCBlbHNlIHRoZQorICAgICB0aW1lbm9kZSB3aWxsIHJlbWFpbiBpbiB0aGUgc3BsYXkgdHJlZSBhZnRlciBjdXJsX2Vhc3lfY2xlYW51cCBpcworICAgICBjYWxsZWQuIERvIGl0IGFmdGVyIG11bHRpX2RvbmUoKSBpbiBjYXNlIHRoYXQgc2V0cyBhbm90aGVyIHRpbWUhICovCisgIEN1cmxfZXhwaXJlX2NsZWFyKGRhdGEpOworCiAgIGlmKGRhdGEtPmNvbm5lY3RfcXVldWUucHRyKQogICAgIC8qIHRoZSBoYW5kbGUgd2FzIGluIHRoZSBwZW5kaW5nIGxpc3Qgd2FpdGluZyBmb3IgYW4gYXZhaWxhYmxlIGNvbm5lY3Rpb24sCiAgICAgICAgc28gZ28gYWhlYWQgYW5kIHJlbW92ZSBpdCAqLwpAQCAtNzIzLDEwICs3ODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW5pc2ggd2l0aCB0aGlzIGhhbmRsZSAqLwogCiAgIC8qIFJlbW92ZSB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgY29ubmVjdGlvbiBhbmQgdGhlIGhhbmRsZSAqLwotICBpZihkYXRhLT5jb25uKSB7Ci0gICAgZGF0YS0+Y29ubi0+ZGF0YSA9IE5VTEw7Ci0gICAgZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOwotICB9CisgIEN1cmxfZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOwogCiAjaWZkZWYgVVNFX0xJQlBTTAogICAvKiBSZW1vdmUgdGhlIFBTTCBhc3NvY2lhdGlvbi4gKi8KQEAgLTc2NSw3ICs4MjYsNyBAQAogICAgICBXZSBkbyBub3QgdG91Y2ggdGhlIGVhc3kgaGFuZGxlIGhlcmUhICovCiAgIG11bHRpLT5udW1fZWFzeS0tOyAvKiBvbmUgbGVzcyB0byBjYXJlIGFib3V0IG5vdyAqLwogCi0gIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKICAgcmV0dXJuIENVUkxNX09LOwogfQogCkBAIC03NzUsOSArODM2LDEzIEBACiAgIHJldHVybiAobXVsdGkgJiYgKG11bHRpLT5tdWx0aXBsZXhpbmcpKTsKIH0KIAotLyogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBjbGVhciBkYXRhLT5jb25uLiBUaGlzIHdpbGwKLSAgIG9jY2FzaW9uYWxseSBiZSBjYWxsZWQgd2l0aCB0aGUgcG9pbnRlciBhbHJlYWR5IGNsZWFyZWQuICovCi1zdGF0aWMgdm9pZCBkZXRhY2hfY29ubm5lY3Rpb24oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKKy8qCisgKiBDdXJsX2RldGFjaF9jb25ubmVjdGlvbigpIHJlbW92ZXMgdGhlIGdpdmVuIHRyYW5zZmVyIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKgorICogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBjbGVhciBkYXRhLT5jb25uLiBUaGlzIHdpbGwKKyAqIG9jY2FzaW9uYWxseSBiZSBjYWxsZWQgd2l0aCB0aGUgZGF0YS0+Y29ubiBwb2ludGVyIGFscmVhZHkgY2xlYXJlZC4KKyAqLwordm9pZCBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBkYXRhLT5jb25uOwogICBpZihjb25uKQpAQCAtNzg1LDcgKzg1MCwxMSBAQAogICBkYXRhLT5jb25uID0gTlVMTDsKIH0KIAotLyogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhc3NpZ24gZGF0YS0+Y29ubiAqLworLyoKKyAqIEN1cmxfYXR0YWNoX2Nvbm5uZWN0aW9uKCkgYXR0YWNoZXMgdGhpcyB0cmFuc2ZlciB0byB0aGlzIGNvbm5lY3Rpb24uCisgKgorICogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhc3NpZ24gZGF0YS0+Y29ubgorICovCiB2b2lkIEN1cmxfYXR0YWNoX2Nvbm5uZWN0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKQEAgLTc5NywyNSArODY2LDMyIEBACiB9CiAKIHN0YXRpYyBpbnQgd2FpdGNvbm5lY3RfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKIHsKICAgaW50IGk7CiAgIGludCBzID0gMDsKICAgaW50IHJjID0gMDsKIAotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICNpZmRlZiBVU0VfU1NMCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZihDT05ORUNUX0ZJUlNUU09DS0VUX1BST1hZX1NTTCgpKQotICAgIHJldHVybiBDdXJsX3NzbF9nZXRzb2NrKGNvbm4sIHNvY2ssIG51bXNvY2tzKTsKKyAgICByZXR1cm4gQ3VybF9zc2xfZ2V0c29jayhjb25uLCBzb2NrKTsKICNlbmRpZgorI2VuZGlmCisKKyAgaWYoU09DS1NfU1RBVEUoY29ubi0+Y25uY3Quc3RhdGUpKQorICAgIHJldHVybiBDdXJsX1NPQ0tTX2dldHNvY2soY29ubiwgc29jaywgRklSU1RTT0NLRVQpOwogCiAgIGZvcihpID0gMDsgaTwyOyBpKyspIHsKICAgICBpZihjb25uLT50ZW1wc29ja1tpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKICAgICAgIHNvY2tbc10gPSBjb25uLT50ZW1wc29ja1tpXTsKLSAgICAgIHJjIHw9IEdFVFNPQ0tfV1JJVEVTT0NLKHMrKyk7CisgICAgICByYyB8PSBHRVRTT0NLX1dSSVRFU09DSyhzKTsKKyNpZmRlZiBFTkFCTEVfUVVJQworICAgICAgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykKKyAgICAgICAgLyogd2hlbiBjb25uZWN0aW5nIFFVSUMsIHdlIHdhbnQgdG8gcmVhZCB0aGUgc29ja2V0IHRvbyAqLworICAgICAgICByYyB8PSBHRVRTT0NLX1JFQURTT0NLKHMpOworI2VuZGlmCisgICAgICBzKys7CiAgICAgfQogICB9CiAKQEAgLTgyMywxMiArODk5LDggQEAKIH0KIAogc3RhdGljIGludCB3YWl0cHJveHljb25uZWN0X2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCiB7Ci0gIGlmKCFudW1zb2NrcykKLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKLQogICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CiAKICAgLyogd2hlbiB3ZSd2ZSBzZW50IGEgQ09OTkVDVCB0byBhIHByb3h5LCB3ZSBzaG91bGQgcmF0aGVyIHdhaXQgZm9yIHRoZQpAQCAtODQwLDE5ICs5MTIsMzcgQEAKIH0KIAogc3RhdGljIGludCBkb21vcmVfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmRvbW9yZV9nZXRzb2NrKQotICAgIHJldHVybiBjb25uLT5oYW5kbGVyLT5kb21vcmVfZ2V0c29jayhjb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiBjb25uLT5oYW5kbGVyLT5kb21vcmVfZ2V0c29jayhjb25uLCBzb2Nrcyk7CiAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwogfQogCi0vKiByZXR1cm5zIGJpdG1hcHBlZCBmbGFncyBmb3IgdGhpcyBoYW5kbGUgYW5kIGl0cyBzb2NrZXRzICovCitzdGF0aWMgaW50IGRvaW5nX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQoreworICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmRvaW5nX2dldHNvY2spCisgICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPmRvaW5nX2dldHNvY2soY29ubiwgc29ja3MpOworICByZXR1cm4gR0VUU09DS19CTEFOSzsKK30KKworc3RhdGljIGludCBwcm90b2NvbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9fZ2V0c29jaykKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+cHJvdG9fZ2V0c29jayhjb25uLCBzb2Nrcyk7CisgIC8qIEJhY2t1cCBnZXRzb2NrIGxvZ2ljLiBTaW5jZSB0aGVyZSBpcyBhIGxpdmUgc29ja2V0IGluIHVzZSwgd2UgbXVzdCB3YWl0CisgICAgIGZvciBpdCBvciBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB3YXRjaGluZyB3aGVuIHRoZSBtdWx0aV9zb2NrZXQgQVBJIGlzCisgICAgIHVzZWQuICovCisgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApIHwgR0VUU09DS19XUklURVNPQ0soMCk7Cit9CisKKy8qIHJldHVybnMgYml0bWFwcGVkIGZsYWdzIGZvciB0aGlzIGhhbmRsZSBhbmQgaXRzIHNvY2tldHMuIFRoZSAnc29ja3NbXScKKyAgIGFycmF5IGNvbnRhaW5zIE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUgZW50cmllcy4gKi8KIHN0YXRpYyBpbnQgbXVsdGlfZ2V0c29jayhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLCAvKiBwb2ludHMgdG8gbnVtc29ja3MgbnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7CiAgIC8qIFRoZSBubyBjb25uZWN0aW9uIGNhc2UgY2FuIGhhcHBlbiB3aGVuIHRoaXMgaXMgY2FsbGVkIGZyb20KICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCkgPT4gc2luZ2xlc29ja2V0KCkgPT4gbXVsdGlfZ2V0c29jaygpLgpAQCAtODg0LDMwICs5NzQsMzAgQEAKICAgICByZXR1cm4gMDsKIAogICBjYXNlIENVUkxNX1NUQVRFX1dBSVRSRVNPTFZFOgotICAgIHJldHVybiBDdXJsX3Jlc29sdl9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIEN1cmxfcmVzb2x2X2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MpOwogCiAgIGNhc2UgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUOgogICBjYXNlIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1Q6Ci0gICAgcmV0dXJuIEN1cmxfcHJvdG9jb2xfZ2V0c29jayhkYXRhLT5jb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiBwcm90b2NvbF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKIAogICBjYXNlIENVUkxNX1NUQVRFX0RPOgogICBjYXNlIENVUkxNX1NUQVRFX0RPSU5HOgotICAgIHJldHVybiBDdXJsX2RvaW5nX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gZG9pbmdfZ2V0c29jayhkYXRhLT5jb25uLCBzb2Nrcyk7CiAKICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUOgotICAgIHJldHVybiB3YWl0cHJveHljb25uZWN0X2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gd2FpdHByb3h5Y29ubmVjdF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKIAogICBjYXNlIENVUkxNX1NUQVRFX1dBSVRDT05ORUNUOgotICAgIHJldHVybiB3YWl0Y29ubmVjdF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIHdhaXRjb25uZWN0X2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MpOwogCiAgIGNhc2UgQ1VSTE1fU1RBVEVfRE9fTU9SRToKLSAgICByZXR1cm4gZG9tb3JlX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gZG9tb3JlX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MpOwogCiAgIGNhc2UgQ1VSTE1fU1RBVEVfRE9fRE9ORTogLyogc2luY2UgaXMgc2V0IGFmdGVyIERPIGlzIGNvbXBsZXRlZCwgd2Ugc3dpdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2FpdGluZyBmb3IgdGhlIHNhbWUgYXMgdGhlICpQRVJGT1JNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzICovCiAgIGNhc2UgQ1VSTE1fU1RBVEVfUEVSRk9STToKLSAgICByZXR1cm4gQ3VybF9zaW5nbGVfZ2V0c29jayhkYXRhLT5jb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiBDdXJsX3NpbmdsZV9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKICAgfQogCiB9CkBAIC05MzMsNyArMTAyMyw3IEBACiAKICAgZGF0YSA9IG11bHRpLT5lYXN5cDsKICAgd2hpbGUoZGF0YSkgewotICAgIGludCBiaXRtYXAgPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tidW5jaCwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRSk7CisgICAgaW50IGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoKTsKIAogICAgIGZvcihpID0gMDsgaTwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRTsgaSsrKSB7CiAgICAgICBjdXJsX3NvY2tldF90IHMgPSBDVVJMX1NPQ0tFVF9CQUQ7CkBAIC05NjMsMTIgKzEwNTMsMTMgQEAKIAogI2RlZmluZSBOVU1fUE9MTFNfT05fU1RBQ0sgMTAKIAotQ1VSTE1jb2RlIEN1cmxfbXVsdGlfd2FpdChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZ290c29ja2V0KSAvKiBpZiBhbnkgc29ja2V0IHdhcyBjaGVja2VkICovCitzdGF0aWMgQ1VSTE1jb2RlIEN1cmxfbXVsdGlfd2FpdChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF93YWl0ZmQgZXh0cmFfZmRzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXh0cmFfbmZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4dHJhd2FpdCwgLyogd2hlbiBubyBzb2NrZXQsIHdhaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX3dha2V1cCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YTsKICAgY3VybF9zb2NrZXRfdCBzb2NrYnVuY2hbTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRV07CkBAIC05ODIsMTkgKzEwNzMsMTkgQEAKICAgc3RydWN0IHBvbGxmZCBhX2Zld19vbl9zdGFja1tOVU1fUE9MTFNfT05fU1RBQ0tdOwogICBzdHJ1Y3QgcG9sbGZkICp1ZmRzID0gJmFfZmV3X29uX3N0YWNrWzBdOwogCi0gIGlmKGdvdHNvY2tldCkKLSAgICAqZ290c29ja2V0ID0gRkFMU0U7Ci0KICAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKICAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKIAogICBpZihtdWx0aS0+aW5fY2FsbGJhY2spCiAgICAgcmV0dXJuIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDsKIAorICBpZih0aW1lb3V0X21zIDwgMCkKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworCiAgIC8qIENvdW50IHVwIGhvdyBtYW55IGZkcyB3ZSBoYXZlIGZyb20gdGhlIG11bHRpIGhhbmRsZSAqLwogICBkYXRhID0gbXVsdGktPmVhc3lwOwogICB3aGlsZShkYXRhKSB7Ci0gICAgYml0bWFwID0gbXVsdGlfZ2V0c29jayhkYXRhLCBzb2NrYnVuY2gsIE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUpOworICAgIGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoKTsKIAogICAgIGZvcihpID0gMDsgaTwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRTsgaSsrKSB7CiAgICAgICBjdXJsX3NvY2tldF90IHMgPSBDVVJMX1NPQ0tFVF9CQUQ7CkBAIC0xMDI1LDYgKzExMTYsMTIgQEAKICAgY3VybGZkcyA9IG5mZHM7IC8qIG51bWJlciBvZiBpbnRlcm5hbCBmaWxlIGRlc2NyaXB0b3JzICovCiAgIG5mZHMgKz0gZXh0cmFfbmZkczsgLyogYWRkIHRoZSBleHRlcm5hbGx5IHByb3ZpZGVkIG9uZXMgKi8KIAorI2lmZGVmIEVOQUJMRV9XQUtFVVAKKyAgaWYodXNlX3dha2V1cCAmJiBtdWx0aS0+d2FrZXVwX3BhaXJbMF0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgKytuZmRzOworICB9CisjZW5kaWYKKwogICBpZihuZmRzID4gTlVNX1BPTExTX09OX1NUQUNLKSB7CiAgICAgLyogJ25mZHMnIGlzIGEgMzIgYml0IHZhbHVlIGFuZCAnc3RydWN0IHBvbGxmZCcgaXMgdHlwaWNhbGx5IDggYnl0ZXMKICAgICAgICBiaWcsIHNvIGF0IDJeMjkgc29ja2V0cyB0aGlzIHZhbHVlIG1pZ2h0IHdyYXAuIFdoZW4gYSBwcm9jZXNzIGdldHMKQEAgLTEwNDQsNyArMTE0MSw3IEBACiAgICAgLyogQWRkIHRoZSBjdXJsIGhhbmRsZXMgdG8gb3VyIHBvbGxmZHMgZmlyc3QgKi8KICAgICBkYXRhID0gbXVsdGktPmVhc3lwOwogICAgIHdoaWxlKGRhdGEpIHsKLSAgICAgIGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoLCBNQVhfU09DS1NQRVJFQVNZSEFORExFKTsKKyAgICAgIGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoKTsKIAogICAgICAgZm9yKGkgPSAwOyBpPCBNQVhfU09DS1NQRVJFQVNZSEFORExFOyBpKyspIHsKICAgICAgICAgY3VybF9zb2NrZXRfdCBzID0gQ1VSTF9TT0NLRVRfQkFEOwpAQCAtMTA4Myw2ICsxMTgwLDE0IEBACiAgICAgKytuZmRzOwogICB9CiAKKyNpZmRlZiBFTkFCTEVfV0FLRVVQCisgIGlmKHVzZV93YWtldXAgJiYgbXVsdGktPndha2V1cF9wYWlyWzBdICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIHVmZHNbbmZkc10uZmQgPSBtdWx0aS0+d2FrZXVwX3BhaXJbMF07CisgICAgdWZkc1tuZmRzXS5ldmVudHMgPSBQT0xMSU47CisgICAgKytuZmRzOworICB9CisjZW5kaWYKKwogICBpZihuZmRzKSB7CiAgICAgaW50IHBvbGxyYzsKICAgICAvKiB3YWl0Li4uICovCkBAIC0xMTA2LDYgKzEyMTEsMzEgQEAKIAogICAgICAgICBleHRyYV9mZHNbaV0ucmV2ZW50cyA9IG1hc2s7CiAgICAgICB9CisKKyNpZmRlZiBFTkFCTEVfV0FLRVVQCisgICAgICBpZih1c2Vfd2FrZXVwICYmIG11bHRpLT53YWtldXBfcGFpclswXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgaWYodWZkc1tjdXJsZmRzICsgZXh0cmFfbmZkc10ucmV2ZW50cyAmIFBPTExJTikgeworICAgICAgICAgIGNoYXIgYnVmWzY0XTsKKyAgICAgICAgICBzc2l6ZV90IG5yZWFkOworICAgICAgICAgIHdoaWxlKDEpIHsKKyAgICAgICAgICAgIC8qIHRoZSByZWFkaW5nIHNvY2tldCBpcyBub24tYmxvY2tpbmcsIHRyeSB0byByZWFkCisgICAgICAgICAgICAgICBkYXRhIGZyb20gaXQgdW50aWwgaXQgcmVjZWl2ZXMgYW4gZXJyb3IgKGV4Y2VwdCBFSU5UUikuCisgICAgICAgICAgICAgICBJbiBub3JtYWwgY2FzZXMgaXQgd2lsbCBnZXQgRUFHQUlOIG9yIEVXT1VMREJMT0NLCisgICAgICAgICAgICAgICB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSwgYnJlYWtpbmcgdGhlIGxvb3AuICovCisgICAgICAgICAgICBucmVhZCA9IHNyZWFkKG11bHRpLT53YWtldXBfcGFpclswXSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICBpZihucmVhZCA8PSAwKSB7CisjaWZuZGVmIFVTRV9XSU5TT0NLCisgICAgICAgICAgICAgIGlmKG5yZWFkIDwgMCAmJiBFSU5UUiA9PSBTT0NLRVJSTk8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGRvIG5vdCBjb3VudCB0aGUgd2FrZXVwIHNvY2tldCBpbnRvIHRoZSByZXR1cm5lZCB2YWx1ZSAqLworICAgICAgICAgIHJldGNvZGUtLTsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlmCiAgICAgfQogICB9CiAKQEAgLTExMTMsOSArMTI0MywyMyBAQAogICAgIGZyZWUodWZkcyk7CiAgIGlmKHJldCkKICAgICAqcmV0ID0gcmV0Y29kZTsKLSAgaWYoZ290c29ja2V0ICYmIChleHRyYV9mZHMgfHwgY3VybGZkcykpCisgIGlmKCFleHRyYXdhaXQgfHwgbmZkcykKICAgICAvKiBpZiBhbnkgc29ja2V0IHdhcyBjaGVja2VkICovCi0gICAgKmdvdHNvY2tldCA9IFRSVUU7CisgICAgOworICBlbHNlIHsKKyAgICBsb25nIHNsZWVwX21zID0gMDsKKworICAgIC8qIEF2b2lkIGJ1c3ktbG9vcGluZyB3aGVuIHRoZXJlJ3Mgbm90aGluZyBwYXJ0aWN1bGFyIHRvIHdhaXQgZm9yICovCisgICAgaWYoIWN1cmxfbXVsdGlfdGltZW91dChtdWx0aSwgJnNsZWVwX21zKSAmJiBzbGVlcF9tcykgeworICAgICAgaWYoc2xlZXBfbXMgPiB0aW1lb3V0X21zKQorICAgICAgICBzbGVlcF9tcyA9IHRpbWVvdXRfbXM7CisgICAgICAvKiB3aGVuIHRoZXJlIGFyZSBubyBlYXN5IGhhbmRsZXMgaW4gdGhlIG11bHRpLCB0aGlzIGhvbGRzIGEgLTEKKyAgICAgICAgIHRpbWVvdXQgKi8KKyAgICAgIGVsc2UgaWYoKHNsZWVwX21zIDwgMCkgJiYgZXh0cmF3YWl0KQorICAgICAgICBzbGVlcF9tcyA9IHRpbWVvdXRfbXM7CisgICAgICBDdXJsX3dhaXRfbXMoc2xlZXBfbXMpOworICAgIH0KKyAgfQogCiAgIHJldHVybiBDVVJMTV9PSzsKIH0KQEAgLTExMjYsNyArMTI3MCw2NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dF9tcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXQpCiB7Ci0gIHJldHVybiBDdXJsX211bHRpX3dhaXQobXVsdGksIGV4dHJhX2ZkcywgZXh0cmFfbmZkcywgdGltZW91dF9tcywgcmV0LCBOVUxMKTsKKyAgcmV0dXJuIEN1cmxfbXVsdGlfd2FpdChtdWx0aSwgZXh0cmFfZmRzLCBleHRyYV9uZmRzLCB0aW1lb3V0X21zLCByZXQsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKK30KKworQ1VSTE1jb2RlIGN1cmxfbXVsdGlfcG9sbChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCkKK3sKKyAgcmV0dXJuIEN1cmxfbXVsdGlfd2FpdChtdWx0aSwgZXh0cmFfZmRzLCBleHRyYV9uZmRzLCB0aW1lb3V0X21zLCByZXQsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7Cit9CisKK0NVUkxNY29kZSBjdXJsX211bHRpX3dha2V1cChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpCit7CisgIC8qIHRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCwKKyAgICAgaXQgaGFzIHRvIGJlIGNhcmVmdWwgb25seSB0byBhY2Nlc3MgcGFydHMgb2YgdGhlCisgICAgIEN1cmxfbXVsdGkgc3RydWN0IHRoYXQgYXJlIGNvbnN0YW50ICovCisKKyAgLyogR09PRF9NVUxUSV9IQU5ETEUgY2FuIGJlIHNhZmVseSBjYWxsZWQgKi8KKyAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKKworI2lmZGVmIEVOQUJMRV9XQUtFVVAKKyAgLyogdGhlIHdha2V1cF9wYWlyIHZhcmlhYmxlIGlzIG9ubHkgd3JpdHRlbiBkdXJpbmcgaW5pdCBhbmQgY2xlYW51cCwKKyAgICAgbWFraW5nIGl0IHNhZmUgdG8gYWNjZXNzIGZyb20gYW5vdGhlciB0aHJlYWQgYWZ0ZXIgdGhlIGluaXQgcGFydAorICAgICBhbmQgYmVmb3JlIGNsZWFudXAgKi8KKyAgaWYobXVsdGktPndha2V1cF9wYWlyWzFdICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIGNoYXIgYnVmWzFdOworICAgIGJ1ZlswXSA9IDE7CisgICAgd2hpbGUoMSkgeworICAgICAgLyogc3dyaXRlKCkgaXMgbm90IHRocmVhZC1zYWZlIGluIGdlbmVyYWwsIGJlY2F1c2UgY29uY3VycmVudCBjYWxscworICAgICAgICAgY2FuIGhhdmUgdGhlaXIgbWVzc2FnZXMgaW50ZXJsZWF2ZWQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGNvbnRlbnQKKyAgICAgICAgIG9mIHRoZSBtZXNzYWdlcyBkb2VzIG5vdCBtYXR0ZXIsIHdoaWNoIG1ha2VzIGl0IG9rIHRvIGNhbGwuCisKKyAgICAgICAgIFRoZSB3cml0ZSBzb2NrZXQgaXMgc2V0IHRvIG5vbi1ibG9ja2luZywgdGhpcyB3YXkgdGhpcyBmdW5jdGlvbgorICAgICAgICAgY2Fubm90IGJsb2NrLCBtYWtpbmcgaXQgc2FmZSB0byBjYWxsIGV2ZW4gZnJvbSB0aGUgc2FtZSB0aHJlYWQKKyAgICAgICAgIHRoYXQgd2lsbCBjYWxsIEN1cmxfbXVsdGlfd2FpdCgpLiBJZiBzd3JpdGUoKSByZXR1cm5zIHRoYXQgaXQKKyAgICAgICAgIHdvdWxkIGJsb2NrLCBpdCdzIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQKKyAgICAgICAgIHByZXZpb3VzIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWtlIHVwIHRoZSBwb2xsKCkuICovCisgICAgICBpZihzd3JpdGUobXVsdGktPndha2V1cF9wYWlyWzFdLCBidWYsIHNpemVvZihidWYpKSA8IDApIHsKKyAgICAgICAgaW50IGVyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgaW50IHJldHVybl9zdWNjZXNzOworI2lmZGVmIFVTRV9XSU5TT0NLCisgICAgICAgIHJldHVybl9zdWNjZXNzID0gV1NBRVdPVUxEQkxPQ0sgPT0gZXJyOworI2Vsc2UKKyAgICAgICAgaWYoRUlOVFIgPT0gZXJyKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm5fc3VjY2VzcyA9IEVXT1VMREJMT0NLID09IGVyciB8fCBFQUdBSU4gPT0gZXJyOworI2VuZGlmCisgICAgICAgIGlmKCFyZXR1cm5fc3VjY2VzcykKKyAgICAgICAgICByZXR1cm4gQ1VSTE1fV0FLRVVQX0ZBSUxVUkU7CisgICAgICB9CisgICAgICByZXR1cm4gQ1VSTE1fT0s7CisgICAgfQorICB9CisjZW5kaWYKKyAgcmV0dXJuIENVUkxNX1dBS0VVUF9GQUlMVVJFOwogfQogCiAvKgpAQCAtMTE4OSw2ICsxMzkxLDcgQEAKIAogICBERUJVR0FTU0VSVChjb25uKTsKICAgREVCVUdBU1NFUlQoY29ubi0+aGFuZGxlcik7CisgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEgPT0gZGF0YSk7CiAKICAgaWYoY29ubi0+aGFuZGxlci0+ZG9faXQpIHsKICAgICAvKiBnZW5lcmljIHByb3RvY29sLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXIgc2V0IGluIGN1cmxfY29ubmVjdCgpICovCkBAIC0xMjI2LDYgKzE0MjksMTI0IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBXZSBhcmUgZG9pbmcgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdGluZyBhbmQgdGhpcyBpcyBiZWluZyBjYWxsZWQgb3ZlciBhbmQKKyAqIG92ZXIgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIHVudGlsIHRoZSBjb25uZWN0aW9uIHBoYXNlIGlzIGRvbmUgb24KKyAqIHByb3RvY29sIGxheWVyLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBwcm90b2NvbF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZykgeworICAgICpkb25lID0gRkFMU0U7CisgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZyhjb25uLCBkb25lKTsKKyAgfQorICBlbHNlCisgICAgKmRvbmUgPSBUUlVFOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXZSBhcmUgRE9JTkcgdGhpcyBpcyBiZWluZyBjYWxsZWQgb3ZlciBhbmQgb3ZlciBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UKKyAqIHVudGlsIHRoZSBET0lORyBwaGFzZSBpcyBkb25lIG9uIHByb3RvY29sIGxheWVyLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBwcm90b2NvbF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+ZG9pbmcpIHsKKyAgICAqZG9uZSA9IEZBTFNFOworICAgIHJlc3VsdCA9IGNvbm4tPmhhbmRsZXItPmRvaW5nKGNvbm4sIGRvbmUpOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IFRSVUU7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdlIGhhdmUgZGlzY292ZXJlZCB0aGF0IHRoZSBUQ1AgY29ubmVjdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsLCB3ZSBjYW4gbm93CisgKiBwcm9jZWVkIHdpdGggc29tZSBhY3Rpb24uCisgKgorICovCitzdGF0aWMgQ1VSTGNvZGUgcHJvdG9jb2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpwcm90b2NvbF9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICBERUJVR0FTU0VSVChjb25uKTsKKyAgREVCVUdBU1NFUlQocHJvdG9jb2xfZG9uZSk7CisKKyAgKnByb3RvY29sX2RvbmUgPSBGQUxTRTsKKworICBpZihjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdICYmIGNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQpIHsKKyAgICAvKiBXZSBhbHJlYWR5IGFyZSBjb25uZWN0ZWQsIGdldCBiYWNrLiBUaGlzIG1heSBoYXBwZW4gd2hlbiB0aGUgY29ubmVjdAorICAgICAgIHdvcmtlZCBmaW5lIGluIHRoZSBmaXJzdCBjYWxsLCBsaWtlIHdoZW4gd2UgY29ubmVjdCB0byBhIGxvY2FsIHNlcnZlcgorICAgICAgIG9yIHByb3h5LiBOb3RlIHRoYXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcHJvdG9jb2wgaXMgYWN0dWFsbHkgZG9uZS4KKworICAgICAgIFVubGVzcyB0aGlzIHByb3RvY29sIGRvZXNuJ3QgaGF2ZSBhbnkgcHJvdG9jb2wtY29ubmVjdCBjYWxsYmFjaywgYXMKKyAgICAgICB0aGVuIHdlIGtub3cgd2UncmUgZG9uZS4gKi8KKyAgICBpZighY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZykKKyAgICAgICpwcm90b2NvbF9kb25lID0gVFJVRTsKKworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCisgIGlmKCFjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0KSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmKENPTk5FQ1RfRklSU1RTT0NLRVRfUFJPWFlfU1NMKCkpCisgICAgICAvKiB3YWl0IGZvciBIVFRQUyBwcm94eSBTU0wgaW5pdGlhbGl6YXRpb24gdG8gY29tcGxldGUgKi8KKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmIGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCisgICAgICAgQ3VybF9jb25uZWN0X29uZ29pbmcoY29ubikpCisgICAgICAvKiB3aGVuIHVzaW5nIGFuIEhUVFAgdHVubmVsIHByb3h5LCBhd2FpdCBjb21wbGV0ZSB0dW5uZWwgZXN0YWJsaXNobWVudAorICAgICAgICAgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4gUmV0dXJuIENVUkxFX09LIHNvIHdlJ2xsIGJlIGNhbGxlZCBhZ2FpbiAqLworICAgICAgcmV0dXJuIENVUkxFX09LOworI2VuZGlmCisgICAgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdCkgeworICAgICAgLyogaXMgdGhlcmUgYSBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0KCkgcHJvY2VkdXJlPyAqLworCisgICAgICAvKiBDYWxsIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0IGZ1bmN0aW9uICovCisgICAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5jb25uZWN0X2l0KGNvbm4sIHByb3RvY29sX2RvbmUpOworICAgIH0KKyAgICBlbHNlCisgICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CisKKyAgICAvKiBpdCBoYXMgc3RhcnRlZCwgcG9zc2libHkgZXZlbiBjb21wbGV0ZWQgYnV0IHRoYXQga25vd2xlZGdlIGlzbid0IHN0b3JlZAorICAgICAgIGluIHRoaXMgYml0ISAqLworICAgIGlmKCFyZXN1bHQpCisgICAgICBjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0ID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7IC8qIHBhc3MgYmFjayBzdGF0dXMgKi8KK30KKworLyoKKyAqIEN1cmxfcHJlY29ubmVjdCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgYSBjb25uZWN0IHN0YXJ0cy4gV2hlbiBhCisgKiByZWRpcmVjdCBpcyBmb2xsb3dlZCwgdGhpcyBpcyB0aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBzaW5nbGUKKyAqIHRyYW5zZmVyLgorICovCitDVVJMY29kZSBDdXJsX3ByZWNvbm5lY3Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK3sKKyAgaWYoIWRhdGEtPnN0YXRlLmJ1ZmZlcikgeworICAgIGRhdGEtPnN0YXRlLmJ1ZmZlciA9IG1hbGxvYyhkYXRhLT5zZXQuYnVmZmVyX3NpemUgKyAxKTsKKyAgICBpZighZGF0YS0+c3RhdGUuYnVmZmVyKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKIHN0YXRpYyBDVVJMTWNvZGUgbXVsdGlfcnVuc2luZ2xlKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsdGltZSBub3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTIzMyw3ICsxNTU0LDcgQEAKICAgc3RydWN0IEN1cmxfbWVzc2FnZSAqbXNnID0gTlVMTDsKICAgYm9vbCBjb25uZWN0ZWQ7CiAgIGJvb2wgYXN5bmM7Ci0gIGJvb2wgcHJvdG9jb2xfY29ubmVjdCA9IEZBTFNFOworICBib29sIHByb3RvY29sX2Nvbm5lY3RlZCA9IEZBTFNFOwogICBib29sIGRvcGhhc2VfZG9uZSA9IEZBTFNFOwogICBib29sIGRvbmUgPSBGQUxTRTsKICAgQ1VSTE1jb2RlIHJjOwpAQCAtMTI1MiwxNiArMTU3Myw2IEBACiAgICAgYm9vbCBzdHJlYW1fZXJyb3IgPSBGQUxTRTsKICAgICByYyA9IENVUkxNX09LOwogCi0gICAgaWYoIWRhdGEtPmNvbm4gJiYKLSAgICAgICBkYXRhLT5tc3RhdGUgPiBDVVJMTV9TVEFURV9DT05ORUNUICYmCi0gICAgICAgZGF0YS0+bXN0YXRlIDwgQ1VSTE1fU1RBVEVfRE9ORSkgewotICAgICAgLyogSW4gYWxsIHRoZXNlIHN0YXRlcywgdGhlIGNvZGUgd2lsbCBibGluZGx5IGFjY2VzcyAnZGF0YS0+Y29ubicKLSAgICAgICAgIHNvIHRoaXMgaXMgcHJlY2F1dGlvbiB0aGF0IGl0IGlzbid0IE5VTEwuIEFuZCBpdCBzaWxlbmNlcyBzdGF0aWMKLSAgICAgICAgIGFuYWx5emVycy4gKi8KLSAgICAgIGZhaWxmKGRhdGEsICJJbiBzdGF0ZSAlZCB3aXRoIG5vIGNvbm4sIGJhaWwgb3V0IVxuIiwgZGF0YS0+bXN0YXRlKTsKLSAgICAgIHJldHVybiBDVVJMTV9JTlRFUk5BTF9FUlJPUjsKLSAgICB9Ci0KICAgICBpZihtdWx0aV9pc2NoYW5nZWQobXVsdGksIFRSVUUpKSB7CiAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIm11bHRpIGNoYW5nZWQsIGNoZWNrIENPTk5FQ1RfUEVORCBxdWV1ZSFcbiIpKTsKICAgICAgIHByb2Nlc3NfcGVuZGluZ19oYW5kbGVzKG11bHRpKTsgLyogbXVsdGlwbGV4ZWQgKi8KQEAgLTEzNDIsNiArMTY1MywxMSBAQAogCiAgICAgY2FzZSBDVVJMTV9TVEFURV9DT05ORUNUOgogICAgICAgLyogQ29ubmVjdC4gV2Ugd2FudCB0byBnZXQgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIgZmlsbGVkIGluLiAqLworICAgICAgLyogaW5pdCB0aGlzIHRyYW5zZmVyLiAqLworICAgICAgcmVzdWx0ID0gQ3VybF9wcmVjb25uZWN0KGRhdGEpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKwogICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFNJTkdMRSk7CiAgICAgICBpZihkYXRhLT5zZXQudGltZW91dCkKICAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgZGF0YS0+c2V0LnRpbWVvdXQsIEVYUElSRV9USU1FT1VUKTsKQEAgLTEzNDksNyArMTY2NSw3IEBACiAgICAgICBpZihkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQpCiAgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIGRhdGEtPnNldC5jb25uZWN0dGltZW91dCwgRVhQSVJFX0NPTk5FQ1RUSU1FT1VUKTsKIAotICAgICAgcmVzdWx0ID0gQ3VybF9jb25uZWN0KGRhdGEsICZhc3luYywgJnByb3RvY29sX2Nvbm5lY3QpOworICAgICAgcmVzdWx0ID0gQ3VybF9jb25uZWN0KGRhdGEsICZhc3luYywgJnByb3RvY29sX2Nvbm5lY3RlZCk7CiAgICAgICBpZihDVVJMRV9OT19DT05ORUNUSU9OX0FWQUlMQUJMRSA9PSByZXN1bHQpIHsKICAgICAgICAgLyogVGhlcmUgd2FzIG5vIGNvbm5lY3Rpb24gYXZhaWxhYmxlLiBXZSB3aWxsIGdvIHRvIHRoZSBwZW5kaW5nCiAgICAgICAgICAgIHN0YXRlIGFuZCB3YWl0IGZvciBhbiBhdmFpbGFibGUgY29ubmVjdGlvbi4gKi8KQEAgLTEzNzcsNyArMTY5Myw3IEBACiAgICAgICAgICAgICAgV0FJVERPIG9yIERPISAqLwogICAgICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwogCi0gICAgICAgICAgaWYocHJvdG9jb2xfY29ubmVjdCkKKyAgICAgICAgICBpZihwcm90b2NvbF9jb25uZWN0ZWQpCiAgICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPKTsKICAgICAgICAgICBlbHNlIHsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKQEAgLTEzOTksOSArMTcxNSwxMiBAQAogICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWU7CiAKICAgICAgIERFQlVHQVNTRVJUKGNvbm4pOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQogICAgICAgICBob3N0bmFtZSA9IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lOwotICAgICAgZWxzZSBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKICAgICAgICAgaG9zdG5hbWUgPSBjb25uLT5jb25uX3RvX2hvc3QubmFtZTsKICAgICAgIGVsc2UKICAgICAgICAgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CkBAIC0xNDMyLDcgKzE3NTEsNyBAQAogICAgICAgaWYoZG5zKSB7CiAgICAgICAgIC8qIFBlcmZvcm0gdGhlIG5leHQgc3RlcCBpbiB0aGUgY29ubmVjdGlvbiBwaGFzZSwgYW5kIHRoZW4gbW92ZSBvbgogICAgICAgICAgICB0byB0aGUgV0FJVENPTk5FQ1Qgc3RhdGUgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9vbmNlX3Jlc29sdmVkKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0KTsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9vbmNlX3Jlc29sdmVkKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0ZWQpOwogCiAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAvKiBpZiBDdXJsX29uY2VfcmVzb2x2ZWQoKSByZXR1cm5zIGZhaWx1cmUsIHRoZSBjb25uZWN0aW9uIHN0cnVjdApAQCAtMTQ0MSw3ICsxNzYwLDcgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgLyogY2FsbCBhZ2FpbiBwbGVhc2Ugc28gdGhhdCB3ZSBnZXQgdGhlIG5leHQgc29ja2V0IHNldHVwICovCiAgICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07Ci0gICAgICAgICAgaWYocHJvdG9jb2xfY29ubmVjdCkKKyAgICAgICAgICBpZihwcm90b2NvbF9jb25uZWN0ZWQpCiAgICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPKTsKICAgICAgICAgICBlbHNlIHsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKQEAgLTE0NjYsOCArMTc4NSw4IEBACiAgICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUOgogICAgICAgLyogdGhpcyBpcyBIVFRQLXNwZWNpZmljLCBidXQgc2VuZGluZyBDT05ORUNUIHRvIGEgcHJveHkgaXMgSFRUUC4uLiAqLwogICAgICAgREVCVUdBU1NFUlQoZGF0YS0+Y29ubik7Ci0gICAgICByZXN1bHQgPSBDdXJsX2h0dHBfY29ubmVjdChkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdCk7Ci0KKyAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9jb25uZWN0KGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0ZWQpOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKGRhdGEtPmNvbm4tPmJpdHMucHJveHlfY29ubmVjdF9jbG9zZWQpIHsKICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CiAgICAgICAgIC8qIGNvbm5lY3QgYmFjayB0byBwcm94eSBhZ2FpbiAqLwpAQCAtMTQ3NSwxNSArMTc5NCwyMCBAQAogICAgICAgICBtdWx0aV9kb25lKGRhdGEsIENVUkxFX09LLCBGQUxTRSk7CiAgICAgICAgIG11bHRpc3RhdGUoZGF0YSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CiAgICAgICB9Ci0gICAgICBlbHNlIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgaWYoKGRhdGEtPmNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlICE9IENVUkxQUk9YWV9IVFRQUyB8fAotICAgICAgICAgICBkYXRhLT5jb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbRklSU1RTT0NLRVRdKSAmJgotICAgICAgICAgICBDdXJsX2Nvbm5lY3RfY29tcGxldGUoZGF0YS0+Y29ubikpIHsKLSAgICAgICAgICByYyA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKLSAgICAgICAgICAvKiBpbml0aWF0ZSBwcm90b2NvbCBjb25uZWN0IHBoYXNlICovCi0gICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9TRU5EUFJPVE9DT05ORUNUKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZighcmVzdWx0KSB7CisgICAgICAgICAgaWYoCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgICAgKGRhdGEtPmNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlICE9IENVUkxQUk9YWV9IVFRQUyB8fAorICAgICAgICAgICAgIGRhdGEtPmNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtGSVJTVFNPQ0tFVF0pICYmCisjZW5kaWYKKyAgICAgICAgICAgIEN1cmxfY29ubmVjdF9jb21wbGV0ZShkYXRhLT5jb25uKSkgeworICAgICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICAgICAgICAvKiBpbml0aWF0ZSBwcm90b2NvbCBjb25uZWN0IHBoYXNlICovCisgICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1QpOworICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfQogICAgICAgZWxzZSBpZihyZXN1bHQpCiAgICAgICAgIHN0cmVhbV9lcnJvciA9IFRSVUU7CiAgICAgICBicmVhazsKQEAgLTE0OTUsMTcgKzE4MTksMjUgQEAKICAgICAgIHJlc3VsdCA9IEN1cmxfaXNfY29ubmVjdGVkKGRhdGEtPmNvbm4sIEZJUlNUU09DS0VULCAmY29ubmVjdGVkKTsKICAgICAgIGlmKGNvbm5lY3RlZCAmJiAhcmVzdWx0KSB7CiAjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCi0gICAgICAgIGlmKChkYXRhLT5jb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMgJiYKLSAgICAgICAgICAgICFkYXRhLT5jb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbRklSU1RTT0NLRVRdKSB8fAotICAgICAgICAgICBDdXJsX2Nvbm5lY3Rfb25nb2luZyhkYXRhLT5jb25uKSkgeworICAgICAgICBpZigKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgICAgKGRhdGEtPmNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUyAmJgorICAgICAgICAgICAhZGF0YS0+Y29ubi0+Yml0cy5wcm94eV9zc2xfY29ubmVjdGVkW0ZJUlNUU09DS0VUXSkgfHwKKyNlbmRpZgorICAgICAgICAgIEN1cmxfY29ubmVjdF9vbmdvaW5nKGRhdGEtPmNvbm4pKSB7CiAgICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwotICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIGRhdGEtPmNvbm4tPmJpdHMudHVubmVsX3Byb3h5PworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgICAgbXVsdGlzdGF0ZShkYXRhLAorICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvbm4tPmJpdHMudHVubmVsX3Byb3h5PwogICAgICAgICAgICAgICAgICAgIENVUkxNX1NUQVRFX1dBSVRQUk9YWUNPTk5FQ1Q6CiAgICAgICAgICAgICAgICAgICAgQ1VSTE1fU1RBVEVfU0VORFBST1RPQ09OTkVDVCk7CisjZWxzZQorICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1QpOworI2VuZGlmCiAgICAgICB9CiAgICAgICBlbHNlIGlmKHJlc3VsdCkgewogICAgICAgICAvKiBmYWlsdXJlIGRldGVjdGVkICovCkBAIC0xNTE3LDggKzE4NDksOCBAQAogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1Q6Ci0gICAgICByZXN1bHQgPSBDdXJsX3Byb3RvY29sX2Nvbm5lY3QoZGF0YS0+Y29ubiwgJnByb3RvY29sX2Nvbm5lY3QpOwotICAgICAgaWYoIXJlc3VsdCAmJiAhcHJvdG9jb2xfY29ubmVjdCkKKyAgICAgIHJlc3VsdCA9IHByb3RvY29sX2Nvbm5lY3QoZGF0YS0+Y29ubiwgJnByb3RvY29sX2Nvbm5lY3RlZCk7CisgICAgICBpZighcmVzdWx0ICYmICFwcm90b2NvbF9jb25uZWN0ZWQpCiAgICAgICAgIC8qIHN3aXRjaCB0byB3YWl0aW5nIHN0YXRlICovCiAgICAgICAgIG11bHRpc3RhdGUoZGF0YSwgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUKTsKICAgICAgIGVsc2UgaWYoIXJlc3VsdCkgewpAQCAtMTUzNiw4ICsxODY4LDggQEAKIAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUOgogICAgICAgLyogcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCBwaGFzZSAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0KTsKLSAgICAgIGlmKCFyZXN1bHQgJiYgcHJvdG9jb2xfY29ubmVjdCkgeworICAgICAgcmVzdWx0ID0gcHJvdG9jb2xfY29ubmVjdGluZyhkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdGVkKTsKKyAgICAgIGlmKCFyZXN1bHQgJiYgcHJvdG9jb2xfY29ubmVjdGVkKSB7CiAgICAgICAgIC8qIGFmdGVyIHRoZSBjb25uZWN0IGhhcyBjb21wbGV0ZWQsIGdvIFdBSVRETyBvciBETyAqLwogICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPKTsKICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CkBAIC0xNjU5LDggKzE5OTEsNyBAQAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfRE9JTkc6CiAgICAgICAvKiB3ZSBjb250aW51ZSBET0lORyB1bnRpbCB0aGUgRE8gcGhhc2UgaXMgY29tcGxldGUgKi8KICAgICAgIERFQlVHQVNTRVJUKGRhdGEtPmNvbm4pOwotICAgICAgcmVzdWx0ID0gQ3VybF9wcm90b2NvbF9kb2luZyhkYXRhLT5jb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9waGFzZV9kb25lKTsKKyAgICAgIHJlc3VsdCA9IHByb3RvY29sX2RvaW5nKGRhdGEtPmNvbm4sICZkb3BoYXNlX2RvbmUpOwogICAgICAgaWYoIXJlc3VsdCkgewogICAgICAgICBpZihkb3BoYXNlX2RvbmUpIHsKICAgICAgICAgICAvKiBhZnRlciBETywgZ28gRE9fRE9ORSBvciBET19NT1JFICovCkBAIC0xNzcyLDcgKzIxMDMsNyBAQAogICAgICAgY2hhciAqbmV3dXJsID0gTlVMTDsKICAgICAgIGJvb2wgcmV0cnkgPSBGQUxTRTsKICAgICAgIGJvb2wgY29tZWJhY2sgPSBGQUxTRTsKLQorICAgICAgREVCVUdBU1NFUlQoZGF0YS0+c3RhdGUuYnVmZmVyKTsKICAgICAgIC8qIGNoZWNrIGlmIG92ZXIgc2VuZCBzcGVlZCAqLwogICAgICAgc2VuZF90aW1lb3V0X21zID0gMDsKICAgICAgIGlmKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCA+IDApCkBAIC0xOTExLDggKzIyNDIsMTMgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGVsc2UgaWYoY29tZWJhY2spCi0gICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgZWxzZSBpZihjb21lYmFjaykgeworICAgICAgICAvKiBUaGlzIGF2b2lkcyBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gc28gdGhhdCBhIHZlcnkgZmFzdCB0cmFuc2ZlcgorICAgICAgICAgICB3b24ndCBnZXQgc3R1Y2sgb24gdGhpcyB0cmFuc2ZlciBhdCB0aGUgZXhwZW5zZSBvZiBvdGhlciBjb25jdXJyZW50CisgICAgICAgICAgIHRyYW5zZmVycyAqLworICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7CisgICAgICAgIHJjID0gQ1VSTE1fT0s7CisgICAgICB9CiAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE5NDAsOCArMjI3Niw3IEBACiAgICAgICAgICAqIGFjY2VzcyBmcmVlJ2QgZGF0YSwgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZnJlZSdkIGFuZCB0aGUgaGFuZGxlCiAgICAgICAgICAqIHJlbW92ZWQgYmVmb3JlIHdlIHBlcmZvcm0gdGhlIHByb2Nlc3NpbmcgaW4gQ1VSTE1fU1RBVEVfQ09NUExFVEVECiAgICAgICAgICAqLwotICAgICAgICBpZihkYXRhLT5jb25uKQotICAgICAgICAgIGRldGFjaF9jb25ubmVjdGlvbihkYXRhKTsKKyAgICAgICAgQ3VybF9kZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CiAgICAgICB9CiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUApAQCAtMTk4OCwxMyArMjMyMywxOCBAQAogICAgICAgICAgIGlmKHN0cmVhbV9lcnJvcikgewogICAgICAgICAgICAgLyogRG9uJ3QgYXR0ZW1wdCB0byBzZW5kIGRhdGEgb3ZlciBhIGNvbm5lY3Rpb24gdGhhdCB0aW1lZCBvdXQgKi8KICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uID0gcmVzdWx0ID09IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgcHJvcGVybHkgKi8KLSAgICAgICAgICAgIEN1cmxfZGlzY29ubmVjdChkYXRhLCBkYXRhLT5jb25uLCBkZWFkX2Nvbm5lY3Rpb24pOworICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gZGF0YS0+Y29ubjsKIAogICAgICAgICAgICAgLyogVGhpcyBpcyB3aGVyZSB3ZSBtYWtlIHN1cmUgdGhhdCB0aGUgY29ubiBwb2ludGVyIGlzIHJlc2V0LgogICAgICAgICAgICAgICAgV2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIGluIGV2ZXJ5IGNhc2UgYmxvY2sgYWJvdmUgd2hlcmUgYQogICAgICAgICAgICAgICAgZmFpbHVyZSBpcyBkZXRlY3RlZCAqLwotICAgICAgICAgICAgZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOworICAgICAgICAgICAgQ3VybF9kZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisKKyAgICAgICAgICAgIC8qIHJlbW92ZSBjb25uZWN0aW9uIGZyb20gY2FjaGUgKi8KKyAgICAgICAgICAgIEN1cmxfY29ubmNhY2hlX3JlbW92ZV9jb25uKGRhdGEsIGNvbm4sIFRSVUUpOworCisgICAgICAgICAgICAvKiBkaXNjb25uZWN0IHByb3Blcmx5ICovCisgICAgICAgICAgICBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgZGVhZF9jb25uZWN0aW9uKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZihkYXRhLT5tc3RhdGUgPT0gQ1VSTE1fU1RBVEVfQ09OTkVDVCkgewpAQCAtMjA5Myw3ICsyNDMzLDcgQEAKICAgKnJ1bm5pbmdfaGFuZGxlcyA9IG11bHRpLT5udW1fYWxpdmU7CiAKICAgaWYoQ1VSTE1fT0sgPj0gcmV0dXJuY29kZSkKLSAgICB1cGRhdGVfdGltZXIobXVsdGkpOworICAgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKIAogICByZXR1cm4gcmV0dXJuY29kZTsKIH0KQEAgLTIxNDUsNiArMjQ4NSwxMSBAQAogCiAgICAgQ3VybF9oYXNoX2Rlc3Ryb3koJm11bHRpLT5ob3N0Y2FjaGUpOwogICAgIEN1cmxfcHNsX2Rlc3Ryb3koJm11bHRpLT5wc2wpOworCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMF0pOworICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMV0pOworI2VuZGlmCiAgICAgZnJlZShtdWx0aSk7CiAKICAgICByZXR1cm4gQ1VSTE1fT0s7CkBAIC0yMjEwLDcgKzI1NTUsNyBAQAogCiAgIC8qIEZpbGwgaW4gdGhlICdjdXJyZW50JyBzdHJ1Y3Qgd2l0aCB0aGUgc3RhdGUgYXMgaXQgaXMgbm93OiB3aGF0IHNvY2tldHMgdG8KICAgICAgc3VwZXJ2aXNlIGFuZCBmb3Igd2hhdCBhY3Rpb25zICovCi0gIGN1cnJhY3Rpb24gPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tzLCBNQVhfU09DS1NQRVJFQVNZSEFORExFKTsKKyAgY3VycmFjdGlvbiA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja3MpOwogCiAgIC8qIFdlIGhhdmUgMCAuLiBOIHNvY2tldHMgYWxyZWFkeSBhbmQgd2UgZ2V0IHRvIGtub3cgYWJvdXQgdGhlIDAgLi4gTQogICAgICBzb2NrZXRzIHdlIHNob3VsZCBoYXZlIGZyb20gbm93IG9uLiBEZXRlY3QgdGhlIGRpZmZlcmVuY2VzLCByZW1vdmUgbm8KQEAgLTIyMzgsMTQgKzI1ODMsMTQgQEAKICAgICBhY3Rpb25zW2ldID0gYWN0aW9uOwogICAgIGlmKGVudHJ5KSB7CiAgICAgICAvKiBjaGVjayBpZiBuZXcgZm9yIHRoaXMgdHJhbnNmZXIgKi8KLSAgICAgIGZvcihpID0gMDsgaTwgZGF0YS0+bnVtc29ja3M7IGkrKykgewotICAgICAgICBpZihzID09IGRhdGEtPnNvY2tldHNbaV0pIHsKLSAgICAgICAgICBwcmV2YWN0aW9uID0gZGF0YS0+YWN0aW9uc1tpXTsKKyAgICAgIGludCBqOworICAgICAgZm9yKGogPSAwOyBqPCBkYXRhLT5udW1zb2NrczsgaisrKSB7CisgICAgICAgIGlmKHMgPT0gZGF0YS0+c29ja2V0c1tqXSkgeworICAgICAgICAgIHByZXZhY3Rpb24gPSBkYXRhLT5hY3Rpb25zW2pdOwogICAgICAgICAgIHNpbmNlYmVmb3JlID0gVFJVRTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgfQotCiAgICAgfQogICAgIGVsc2UgewogICAgICAgLyogdGhpcyBpcyBhIHNvY2tldCB3ZSBkaWRuJ3QgaGF2ZSBiZWZvcmUsIGFkZCBpdCB0byB0aGUgaGFzaCEgKi8KQEAgLTIyNzMsMjkgKzI2MTgsMjIgQEAKICAgICAgIGlmKGFjdGlvbiAmIENVUkxfUE9MTF9PVVQpCiAgICAgICAgIGVudHJ5LT53cml0ZXJzKys7CiAKLSAgICAgIC8qIGFkZCAnZGF0YScgdG8gdGhlIGxpc3Qgb2YgaGFuZGxlcyB1c2luZyB0aGlzIHNvY2tldCEgKi8KLSAgICAgIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoJmVudHJ5LT5saXN0LCBlbnRyeS0+bGlzdC50YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCAmZGF0YS0+c2hfcXVldWUpOworICAgICAgLyogYWRkICdkYXRhJyB0byB0aGUgdHJhbnNmZXIgaGFzaCBvbiB0aGlzIHNvY2tldCEgKi8KKyAgICAgIGlmKCFDdXJsX2hhc2hfYWRkKCZlbnRyeS0+dHJhbnNmZXJzLCAoY2hhciAqKSZkYXRhLCAvKiBoYXNoIGtleSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBDdXJsX2Vhc3kgKiksIGRhdGEpKQorICAgICAgICByZXR1cm4gQ1VSTE1fT1VUX09GX01FTU9SWTsKICAgICB9CiAKICAgICBjb21ib2FjdGlvbiA9IChlbnRyeS0+d3JpdGVycz8gQ1VSTF9QT0xMX09VVCA6IDApIHwKICAgICAgIChlbnRyeS0+cmVhZGVycyA/IENVUkxfUE9MTF9JTiA6IDApOwogCi0jaWYgMAotICAgIGluZm9mKGRhdGEsICItLS0gQ29tYm9hY3Rpb246ICV1IHJlYWRlcnMgJXUgd3JpdGVyc1xuIiwKLSAgICAgICAgICBlbnRyeS0+cmVhZGVycywgZW50cnktPndyaXRlcnMpOwotI2VuZGlmCi0gICAgLyogY2hlY2sgaWYgaXQgaGFzIHRoZSBzYW1lIGFjdGlvbiBzZXQgKi8KLSAgICBpZihlbnRyeS0+YWN0aW9uID09IGNvbWJvYWN0aW9uKQorICAgIC8qIHNvY2tldCBleGlzdGVkIGJlZm9yZSBhbmQgaGFzIHRoZSBzYW1lIGFjdGlvbiBzZXQgYXMgYmVmb3JlICovCisgICAgaWYoc2luY2ViZWZvcmUgJiYgKGVudHJ5LT5hY3Rpb24gPT0gY29tYm9hY3Rpb24pKQogICAgICAgLyogc2FtZSwgY29udGludWUgKi8KICAgICAgIGNvbnRpbnVlOwogCi0gICAgLyogd2Uga25vdyAoZW50cnkgIT0gTlVMTCkgYXQgdGhpcyBwb2ludCwgc2VlIHRoZSBsb2dpYyBhYm92ZSAqLwogICAgIGlmKG11bHRpLT5zb2NrZXRfY2IpCi0gICAgICBtdWx0aS0+c29ja2V0X2NiKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbWJvYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS0+c29ja2V0X3VzZXJwLAorICAgICAgbXVsdGktPnNvY2tldF9jYihkYXRhLCBzLCBjb21ib2FjdGlvbiwgbXVsdGktPnNvY2tldF91c2VycCwKICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNvY2tldHApOwogCiAgICAgZW50cnktPmFjdGlvbiA9IGNvbWJvYWN0aW9uOyAvKiBzdG9yZSB0aGUgY3VycmVudCBhY3Rpb24gc3RhdGUgKi8KQEAgLTIzMzUsMTEgKzI2NzMsMTQgQEAKICAgICAgICAgICBtdWx0aS0+c29ja2V0X2NiKGRhdGEsIHMsIENVUkxfUE9MTF9SRU1PVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS0+c29ja2V0X3VzZXJwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNvY2tldHApOwotICAgICAgICBzaF9kZWxlbnRyeSgmbXVsdGktPnNvY2toYXNoLCBzKTsKKyAgICAgICAgc2hfZGVsZW50cnkoZW50cnksICZtdWx0aS0+c29ja2hhc2gsIHMpOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIHJlbW92ZSB0aGlzIHRyYW5zZmVyIGFzIGEgdXNlciBvZiB0aGlzIHNvY2tldCAqLwotICAgICAgICBDdXJsX2xsaXN0X3JlbW92ZSgmZW50cnktPmxpc3QsICZkYXRhLT5zaF9xdWV1ZSwgTlVMTCk7CisgICAgICAgIC8qIHN0aWxsIHVzZXJzLCBidXQgcmVtb3ZlIHRoaXMgaGFuZGxlIGFzIGEgdXNlciBvZiB0aGlzIHNvY2tldCAqLworICAgICAgICBpZihDdXJsX2hhc2hfZGVsZXRlKCZlbnRyeS0+dHJhbnNmZXJzLCAoY2hhciAqKSZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgQ3VybF9lYXN5ICopKSkgeworICAgICAgICAgIERFQlVHQVNTRVJUKE5VTEwpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9IC8qIGZvciBsb29wIG92ZXIgbnVtc29ja3MgKi8KQEAgLTIzODMsNyArMjcyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c29ja2V0cCk7CiAKICAgICAgICAgLyogbm93IHJlbW92ZSBpdCBmcm9tIHRoZSBzb2NrZXQgaGFzaCAqLwotICAgICAgICBzaF9kZWxlbnRyeSgmbXVsdGktPnNvY2toYXNoLCBzKTsKKyAgICAgICAgc2hfZGVsZW50cnkoZW50cnksICZtdWx0aS0+c29ja2hhc2gsIHMpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMjQ3NCw3ICsyODE1LDYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAgIGlmKHMgIT0gQ1VSTF9TT0NLRVRfVElNRU9VVCkgewotCiAgICAgc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5ID0gc2hfZ2V0ZW50cnkoJm11bHRpLT5zb2NraGFzaCwgcyk7CiAKICAgICBpZighZW50cnkpCkBAIC0yNDg1LDM3ICsyODI1LDIyIEBACiAgICAgICAgICBhbmQganVzdCBtb3ZlIG9uLiAqLwogICAgICAgOwogICAgIGVsc2UgewotICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QgPSAmZW50cnktPmxpc3Q7Ci0gICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICplOwotICAgICAgU0lHUElQRV9WQVJJQUJMRShwaXBlX3N0KTsKKyAgICAgIHN0cnVjdCBjdXJsX2hhc2hfaXRlcmF0b3IgaXRlcjsKKyAgICAgIHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAqaGU7CiAKICAgICAgIC8qIHRoZSBzb2NrZXQgY2FuIGJlIHNoYXJlZCBieSBtYW55IHRyYW5zZmVycywgaXRlcmF0ZSAqLwotICAgICAgZm9yKGUgPSBsaXN0LT5oZWFkOyBlOyBlID0gZS0+bmV4dCkgewotICAgICAgICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKillLT5wdHI7Ci0KLSAgICAgICAgaWYoZGF0YS0+bWFnaWMgIT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKQotICAgICAgICAgIC8qIGJhZCBiYWQgYmFkIGJhZCBiYWQgYmFkIGJhZCAqLwotICAgICAgICAgIHJldHVybiBDVVJMTV9JTlRFUk5BTF9FUlJPUjsKKyAgICAgIEN1cmxfaGFzaF9zdGFydF9pdGVyYXRlKCZlbnRyeS0+dHJhbnNmZXJzLCAmaXRlcik7CisgICAgICBmb3IoaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKTsgaGU7CisgICAgICAgICAgaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKSkgeworICAgICAgICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKiloZS0+cHRyOworICAgICAgICBERUJVR0FTU0VSVChkYXRhKTsKKyAgICAgICAgREVCVUdBU1NFUlQoZGF0YS0+bWFnaWMgPT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKTsKIAogICAgICAgICBpZihkYXRhLT5jb25uICYmICEoZGF0YS0+Y29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX0RJUkxPQ0spKQogICAgICAgICAgIC8qIHNldCBzb2NrZXQgZXZlbnQgYml0bWFzayBpZiB0aGV5J3JlIG5vdCBsb2NrZWQgKi8KICAgICAgICAgICBkYXRhLT5jb25uLT5jc2VsZWN0X2JpdHMgPSBldl9iaXRtYXNrOwogCi0gICAgICAgIHNpZ3BpcGVfaWdub3JlKGRhdGEsICZwaXBlX3N0KTsKLSAgICAgICAgcmVzdWx0ID0gbXVsdGlfcnVuc2luZ2xlKG11bHRpLCBub3csIGRhdGEpOwotICAgICAgICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwotCi0gICAgICAgIGlmKGRhdGEtPmNvbm4gJiYgIShkYXRhLT5jb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfRElSTE9DSykpCi0gICAgICAgICAgLyogY2xlYXIgdGhlIGJpdG1hc2sgb25seSBpZiBub3QgbG9ja2VkICovCi0gICAgICAgICAgZGF0YS0+Y29ubi0+Y3NlbGVjdF9iaXRzID0gMDsKLQotICAgICAgICBpZihDVVJMTV9PSyA+PSByZXN1bHQpIHsKLSAgICAgICAgICAvKiBnZXQgdGhlIHNvY2tldChzKSBhbmQgY2hlY2sgaWYgdGhlIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UKLSAgICAgICAgICAgICBsYXN0ICovCi0gICAgICAgICAgcmVzdWx0ID0gc2luZ2xlc29ja2V0KG11bHRpLCBkYXRhKTsKLSAgICAgICAgICBpZihyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9CisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKICAgICAgIH0KIAogICAgICAgLyogTm93IHdlIGZhbGwtdGhyb3VnaCBhbmQgZG8gdGhlIHRpbWVyLWJhc2VkIHN0dWZmLCBzaW5jZSB3ZSBkb24ndCB3YW50CkBAIC0yNTMwLDkgKzI4NTUsMTAgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBBc2tlZCB0byBydW4gZHVlIHRvIHRpbWUtb3V0LiBDbGVhciB0aGUgJ2xhc3RjYWxsJyB2YXJpYWJsZSB0byBmb3JjZQotICAgICAgIHVwZGF0ZV90aW1lcigpIHRvIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIGFnYWluIGV2ZW4gaWYgdGhlIHNhbWUKLSAgICAgICB0aW1lb3V0IGlzIHN0aWxsIHRoZSBvbmUgdG8gcnVuIGFmdGVyIHRoaXMgY2FsbC4gVGhhdCBoYW5kbGVzIHRoZSBjYXNlCi0gICAgICAgd2hlbiB0aGUgYXBwbGljYXRpb24gYXNrcyBsaWJjdXJsIHRvIHJ1biB0aGUgdGltZW91dCBwcmVtYXR1cmVseS4gKi8KKyAgICAgICBDdXJsX3VwZGF0ZV90aW1lcigpIHRvIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIGFnYWluIGV2ZW4gaWYgdGhlCisgICAgICAgc2FtZSB0aW1lb3V0IGlzIHN0aWxsIHRoZSBvbmUgdG8gcnVuIGFmdGVyIHRoaXMgY2FsbC4gVGhhdCBoYW5kbGVzIHRoZQorICAgICAgIGNhc2Ugd2hlbiB0aGUgYXBwbGljYXRpb24gYXNrcyBsaWJjdXJsIHRvIHJ1biB0aGUgdGltZW91dAorICAgICAgIHByZW1hdHVyZWx5LiAqLwogICAgIG1lbXNldCgmbXVsdGktPnRpbWVyX2xhc3RjYWxsLCAwLCBzaXplb2YobXVsdGktPnRpbWVyX2xhc3RjYWxsKSk7CiAgIH0KIApAQCAtMjYzMSw2ICsyOTU3LDE2IEBACiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE1PUFRfUElQRUxJTklOR19TRVJWRVJfQkw6CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE1PUFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzoKKyAgICB7CisgICAgICBsb25nIHN0cmVhbXMgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgICAgaWYoc3RyZWFtcyA8IDEpCisgICAgICAgIHN0cmVhbXMgPSAxMDA7CisgICAgICBtdWx0aS0+bWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9CisgICAgICAgIChzdHJlYW1zID4gKGxvbmcpSU5JVElBTF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKT8KKyAgICAgICAgSU5JVElBTF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIDogKHVuc2lnbmVkIGludClzdHJlYW1zOworICAgIH0KKyAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICByZXMgPSBDVVJMTV9VTktOT1dOX09QVElPTjsKICAgICBicmVhazsKQEAgLTI2NTAsNyArMjk4Niw3IEBACiAgICAgcmV0dXJuIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDsKICAgcmVzdWx0ID0gbXVsdGlfc29ja2V0KG11bHRpLCBGQUxTRSwgcywgMCwgcnVubmluZ19oYW5kbGVzKTsKICAgaWYoQ1VSTE1fT0sgPj0gcmVzdWx0KQotICAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgICAgQ3VybF91cGRhdGVfdGltZXIobXVsdGkpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjYyLDcgKzI5OTgsNyBAQAogICAgIHJldHVybiBDVVJMTV9SRUNVUlNJVkVfQVBJX0NBTEw7CiAgIHJlc3VsdCA9IG11bHRpX3NvY2tldChtdWx0aSwgRkFMU0UsIHMsIGV2X2JpdG1hc2ssIHJ1bm5pbmdfaGFuZGxlcyk7CiAgIGlmKENVUkxNX09LID49IHJlc3VsdCkKLSAgICB1cGRhdGVfdGltZXIobXVsdGkpOworICAgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY3NCw3ICszMDEwLDcgQEAKICAgICByZXR1cm4gQ1VSTE1fUkVDVVJTSVZFX0FQSV9DQUxMOwogICByZXN1bHQgPSBtdWx0aV9zb2NrZXQobXVsdGksIFRSVUUsIENVUkxfU09DS0VUX0JBRCwgMCwgcnVubmluZ19oYW5kbGVzKTsKICAgaWYoQ1VSTE1fT0sgPj0gcmVzdWx0KQotICAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgICAgQ3VybF91cGRhdGVfdGltZXIobXVsdGkpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNzM0LDE0ICszMDcwLDE0IEBACiAgKiBUZWxsIHRoZSBhcHBsaWNhdGlvbiBpdCBzaG91bGQgdXBkYXRlIGl0cyB0aW1lcnMsIGlmIGl0IHN1YnNjcmliZXMgdG8gdGhlCiAgKiB1cGRhdGUgdGltZXIgY2FsbGJhY2suCiAgKi8KLXN0YXRpYyBpbnQgdXBkYXRlX3RpbWVyKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3ZvaWQgQ3VybF91cGRhdGVfdGltZXIoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpKQogewogICBsb25nIHRpbWVvdXRfbXM7CiAKICAgaWYoIW11bHRpLT50aW1lcl9jYikKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm47CiAgIGlmKG11bHRpX3RpbWVvdXQobXVsdGksICZ0aW1lb3V0X21zKSkgewotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm47CiAgIH0KICAgaWYodGltZW91dF9tcyA8IDApIHsKICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGN1cmx0aW1lIG5vbmUgPSB7MCwgMH07CkBAIC0yNzQ5LDkgKzMwODUsMTAgQEAKICAgICAgIG11bHRpLT50aW1lcl9sYXN0Y2FsbCA9IG5vbmU7CiAgICAgICAvKiB0aGVyZSdzIG5vIHRpbWVvdXQgbm93IGJ1dCB0aGVyZSB3YXMgb25lIHByZXZpb3VzbHksIHRlbGwgdGhlIGFwcCB0bwogICAgICAgICAgZGlzYWJsZSBpdCAqLwotICAgICAgcmV0dXJuIG11bHRpLT50aW1lcl9jYihtdWx0aSwgLTEsIG11bHRpLT50aW1lcl91c2VycCk7CisgICAgICBtdWx0aS0+dGltZXJfY2IobXVsdGksIC0xLCBtdWx0aS0+dGltZXJfdXNlcnApOworICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm47CiAgIH0KIAogICAvKiBXaGVuIG11bHRpX3RpbWVvdXQoKSBpcyBkb25lLCBtdWx0aS0+dGltZXRyZWUgcG9pbnRzIHRvIHRoZSBub2RlIHdpdGggdGhlCkBAIC0yNzU5LDExICszMDk2LDExIEBACiAgICAqIGlmIHRoaXMgaXMgdGhlIHNhbWUgKGZpeGVkKSB0aW1lIGFzIHdlIGdvdCBpbiBhIHByZXZpb3VzIGNhbGwgYW5kIHRoZW4KICAgICogYXZvaWQgY2FsbGluZyB0aGUgY2FsbGJhY2sgYWdhaW4uICovCiAgIGlmKEN1cmxfc3BsYXljb21wYXJla2V5cyhtdWx0aS0+dGltZXRyZWUtPmtleSwgbXVsdGktPnRpbWVyX2xhc3RjYWxsKSA9PSAwKQotICAgIHJldHVybiAwOworICAgIHJldHVybjsKIAogICBtdWx0aS0+dGltZXJfbGFzdGNhbGwgPSBtdWx0aS0+dGltZXRyZWUtPmtleTsKIAotICByZXR1cm4gbXVsdGktPnRpbWVyX2NiKG11bHRpLCB0aW1lb3V0X21zLCBtdWx0aS0+dGltZXJfdXNlcnApOworICBtdWx0aS0+dGltZXJfY2IobXVsdGksIHRpbWVvdXRfbXMsIG11bHRpLT50aW1lcl91c2VycCk7CiB9CiAKIC8qCkBAIC0yODQwLDcgKzMxNzcsNyBAQAogICoKICAqIEV4cGlyZSByZXBsYWNlcyBhIGZvcm1lciB0aW1lb3V0IHVzaW5nIHRoZSBzYW1lIGlkIGlmIGFscmVhZHkgc2V0LgogICovCi12b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVfdCBtaWxsaSwgZXhwaXJlX2lkIGlkKQordm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB0aW1lZGlmZl90IG1pbGxpLCBleHBpcmVfaWQgaWQpCiB7CiAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSA9IGRhdGEtPm11bHRpOwogICBzdHJ1Y3QgY3VybHRpbWUgKm5vd3AgPSAmZGF0YS0+c3RhdGUuZXhwaXJldGltZTsKQEAgLTI4NTQsNyArMzE5MSw3IEBACiAgIERFQlVHQVNTRVJUKGlkIDwgRVhQSVJFX0xBU1QpOwogCiAgIHNldCA9IEN1cmxfbm93KCk7Ci0gIHNldC50dl9zZWMgKz0gbWlsbGkvMTAwMDsKKyAgc2V0LnR2X3NlYyArPSAodGltZV90KShtaWxsaS8xMDAwKTsgLyogbWlnaHQgYmUgYSA2NCB0byAzMiBiaXQgY29udmVyc2lvbiAqLwogICBzZXQudHZfdXNlYyArPSAodW5zaWduZWQgaW50KShtaWxsaSUxMDAwKSoxMDAwOwogCiAgIGlmKHNldC50dl91c2VjID49IDEwMDAwMDApIHsKQEAgLTMwNjgsMyArMzQwNSw5IEBACiAgIH0KIH0KICNlbmRpZgorCit1bnNpZ25lZCBpbnQgQ3VybF9tdWx0aV9tYXhfY29uY3VycmVudF9zdHJlYW1zKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3sKKyAgREVCVUdBU1NFUlQobXVsdGkpOworICByZXR1cm4gbXVsdGktPm1heF9jb25jdXJyZW50X3N0cmVhbXM7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWhhbmRsZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGloYW5kbGUuaAppbmRleCAyNzkzNzlhLi45MWVjYTE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWhhbmRsZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaGFuZGxlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgImNvbm5jYWNoZS5oIgogI2luY2x1ZGUgInBzbC5oIgorI2luY2x1ZGUgInNvY2tldHBhaXIuaCIKIAogc3RydWN0IEN1cmxfbWVzc2FnZSB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgbGlzdDsKQEAgLTY2LDYgKzY3LDE0IEBACiAKICNkZWZpbmUgQ1VSTFBJUEVfQU5ZIChDVVJMUElQRV9NVUxUSVBMRVgpCiAKKyNpZiBkZWZpbmVkKFVTRV9TT0NLRVRQQUlSKSAmJiAhZGVmaW5lZChVU0VfQkxPQ0tJTkdfU09DS0VUUykKKyNkZWZpbmUgRU5BQkxFX1dBS0VVUAorI2VuZGlmCisKKworLyogdmFsdWUgZm9yIE1BWElNVU0gQ09OQ1VSUkVOVCBTVFJFQU1TIHVwcGVyIGxpbWl0ICovCisjZGVmaW5lIElOSVRJQUxfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyAoKDFVIDw8IDMxKSAtIDEpCisKIC8qIFRoaXMgaXMgdGhlIHN0cnVjdCBrbm93biBhcyBDVVJMTSBvbiB0aGUgb3V0c2lkZSAqLwogc3RydWN0IEN1cmxfbXVsdGkgewogICAvKiBGaXJzdCBhIHNpbXBsZSBpZGVudGlmaWVyIHRvIGVhc2llciBkZXRlY3QgaWYgYSB1c2VyIG1peCB1cApAQCAtMTEwLDExICsxMTksNiBAQAogICAgICBzYW1lIGFjdHVhbCBzb2NrZXQpICovCiAgIHN0cnVjdCBjdXJsX2hhc2ggc29ja2hhc2g7CiAKLSAgLyogbXVsdGlwbGV4aW5nIHdhbnRlZCAqLwotICBib29sIG11bHRpcGxleGluZzsKLQotICBib29sIHJlY2hlY2tzdGF0ZTsgLyogc2VlIEN1cmxfbXVsdGlfY29ubmNoYW5nZWQgKi8KLQogICAvKiBTaGFyZWQgY29ubmVjdGlvbiBjYWNoZSAoYnVuZGxlcykqLwogICBzdHJ1Y3QgY29ubmNhY2hlIGNvbm5fY2FjaGU7CiAKQEAgLTEzMiw3ICsxMzYsMTcgQEAKICAgdm9pZCAqdGltZXJfdXNlcnA7CiAgIHN0cnVjdCBjdXJsdGltZSB0aW1lcl9sYXN0Y2FsbDsgLyogdGhlIGZpeGVkIHRpbWUgZm9yIHRoZSB0aW1lb3V0IGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGNhbGxiYWNrICovCisgIHVuc2lnbmVkIGludCBtYXhfY29uY3VycmVudF9zdHJlYW1zOworCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICBjdXJsX3NvY2tldF90IHdha2V1cF9wYWlyWzJdOyAvKiBzb2NrZXRwYWlyKCkgdXNlZCBmb3Igd2FrZXVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgaXMgdXNlZCBmb3IgcmVhZCwgMSBpcyB1c2VkIGZvciB3cml0ZSAqLworI2VuZGlmCisgIC8qIG11bHRpcGxleGluZyB3YW50ZWQgKi8KKyAgYm9vbCBtdWx0aXBsZXhpbmc7CisgIGJvb2wgcmVjaGVja3N0YXRlOyAvKiBzZWUgQ3VybF9tdWx0aV9jb25uY2hhbmdlZCAqLwogICBib29sIGluX2NhbGxiYWNrOyAgICAgICAgICAgIC8qIHRydWUgd2hpbGUgZXhlY3V0aW5nIGEgY2FsbGJhY2sgKi8KKyAgYm9vbCBpcHY2X3dvcmtzOwogfTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX01VTFRJSEFORExFX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaWYuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaWYuaAppbmRleCBlOGE1ZTcwLi43ZDU3NGRmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWlmLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGlpZi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNywxNSArMjcsMTcgQEAKICAqLwogCiB2b2lkIEN1cmxfdXBkYXRlc29ja2V0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotdm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB0aW1lX3QgbWlsbGksIGV4cGlyZV9pZCk7Cit2b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVkaWZmX3QgbWlsbGksIGV4cGlyZV9pZCk7CiB2b2lkIEN1cmxfZXhwaXJlX2NsZWFyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogdm9pZCBDdXJsX2V4cGlyZV9kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGV4cGlyZV9pZCBpZCk7Ci12b2lkIEN1cmxfZGV0YWNoX2Nvbm5uZWN0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX3VwZGF0ZV90aW1lcihzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwogdm9pZCBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwordm9pZCBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIGJvb2wgQ3VybF9tdWx0aXBsZXhfd2FudGVkKGNvbnN0IHN0cnVjdCBDdXJsX211bHRpICptdWx0aSk7CiB2b2lkIEN1cmxfc2V0X2luX2NhbGxiYWNrKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgdmFsdWUpOwogYm9vbCBDdXJsX2lzX2luX2NhbGxiYWNrKHN0cnVjdCBDdXJsX2Vhc3kgKmVhc3kpOworQ1VSTGNvZGUgQ3VybF9wcmVjb25uZWN0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogCiAvKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGN1cmxfbXVsdGlfaW5pdCgpIGFjY2VwdHMgc2l6ZSBwYXJhbWV0ZXJzIGZvciB0aGUKICAgIHNvY2tldCBhbmQgY29ubmVjdGlvbiBoYXNoZXMgKi8KQEAgLTg5LDExICs5MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIAotQ1VSTE1jb2RlIEN1cmxfbXVsdGlfd2FpdChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZ290c29ja2V0KTsgLyogaWYgYW55IHNvY2tldCB3YXMgY2hlY2tlZCAqLworCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBDVVJMTU9QVF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIG9wdGlvbiAqLwordW5zaWduZWQgaW50IEN1cmxfbXVsdGlfbWF4X2NvbmN1cnJlbnRfc3RyZWFtcyhzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfTVVMVElJRl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9uZXRyYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbmV0cmMuYwppbmRleCAxYmQ5OThmLi4xYzlkYTMxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9uZXRyYy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL25ldHJjLmMKQEAgLTQ1LDI3ICs0NSwyNyBAQAogICBIT1NUVkFMSUQgICAgIC8qIHRoaXMgaXMgIm91ciIgbWFjaGluZSEgKi8KIH07CiAKKyNkZWZpbmUgTkVUUkNfRklMRV9NSVNTSU5HIDEKKyNkZWZpbmUgTkVUUkNfRkFJTEVEIC0xCisjZGVmaW5lIE5FVFJDX1NVQ0NFU1MgMAorCiAvKgotICogQHVuaXR0ZXN0OiAxMzA0Ci0gKgotICogKmxvZ2lucCBhbmQgKnBhc3N3b3JkcCBNVVNUIGJlIGFsbG9jYXRlZCBpZiB0aGV5IGFyZW4ndCBOVUxMIHdoZW4gcGFzc2VkCi0gKiBpbi4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLgogICovCi1pbnQgQ3VybF9wYXJzZW5ldHJjKGNvbnN0IGNoYXIgKmhvc3QsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKipsb2dpbnAsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKipwYXNzd29yZHAsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgKmxvZ2luX2NoYW5nZWQsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgKnBhc3N3b3JkX2NoYW5nZWQsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ldHJjZmlsZSkKK3N0YXRpYyBpbnQgcGFyc2VuZXRyYyhjb25zdCBjaGFyICpob3N0LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipsb2dpbnAsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkcCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpsb2dpbl9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnBhc3N3b3JkX2NoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV0cmNmaWxlKQogewogICBGSUxFICpmaWxlOwotICBpbnQgcmV0Y29kZSA9IDE7CisgIGludCByZXRjb2RlID0gTkVUUkNfRklMRV9NSVNTSU5HOwogICBjaGFyICpsb2dpbiA9ICpsb2dpbnA7CiAgIGNoYXIgKnBhc3N3b3JkID0gKnBhc3N3b3JkcDsKICAgYm9vbCBzcGVjaWZpY19sb2dpbiA9IChsb2dpbiAmJiAqbG9naW4gIT0gMCk7CiAgIGJvb2wgbG9naW5fYWxsb2MgPSBGQUxTRTsKICAgYm9vbCBwYXNzd29yZF9hbGxvYyA9IEZBTFNFOwotICBib29sIG5ldHJjX2FsbG9jID0gRkFMU0U7CiAgIGVudW0gaG9zdF9sb29rdXBfc3RhdGUgc3RhdGUgPSBOT1RISU5HOwogCiAgIGNoYXIgc3RhdGVfbG9naW4gPSAwOyAgICAgIC8qIEZvdW5kIGEgbG9naW4ga2V5d29yZCAqLwpAQCAtNzMsNTEgKzczLDkgQEAKICAgaW50IHN0YXRlX291cl9sb2dpbiA9IEZBTFNFOyAgLyogV2l0aCBzcGVjaWZpY19sb2dpbiwgZm91bmQgKm91ciogbG9naW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAqLwogCi0jZGVmaW5lIE5FVFJDIERPVF9DSEFSICJuZXRyYyIKLQotICBpZighbmV0cmNmaWxlKSB7Ci0gICAgYm9vbCBob21lX2FsbG9jID0gRkFMU0U7Ci0gICAgY2hhciAqaG9tZSA9IGN1cmxfZ2V0ZW52KCJIT01FIik7IC8qIHBvcnRhYmxlIGVudmlyb25tZW50IHJlYWRlciAqLwotICAgIGlmKGhvbWUpIHsKLSAgICAgIGhvbWVfYWxsb2MgPSBUUlVFOwotI2lmIGRlZmluZWQoSEFWRV9HRVRQV1VJRF9SKSAmJiBkZWZpbmVkKEhBVkVfR0VURVVJRCkKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzdHJ1Y3QgcGFzc3dkIHB3LCAqcHdfcmVzOwotICAgICAgY2hhciBwd2J1ZlsxMDI0XTsKLSAgICAgIGlmKCFnZXRwd3VpZF9yKGdldGV1aWQoKSwgJnB3LCBwd2J1Ziwgc2l6ZW9mKHB3YnVmKSwgJnB3X3JlcykKLSAgICAgICAgICYmIHB3X3JlcykgewotICAgICAgICBob21lID0gc3RyZHVwKHB3LnB3X2Rpcik7Ci0gICAgICAgIGlmKCFob21lKQotICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICBob21lX2FsbG9jID0gVFJVRTsKLSAgICAgIH0KLSNlbGlmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCi0gICAgfQotICAgIGVsc2UgewotICAgICAgc3RydWN0IHBhc3N3ZCAqcHc7Ci0gICAgICBwdyA9IGdldHB3dWlkKGdldGV1aWQoKSk7Ci0gICAgICBpZihwdykgewotICAgICAgICBob21lID0gcHctPnB3X2RpcjsKLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIGlmKCFob21lKQotICAgICAgcmV0dXJuIHJldGNvZGU7IC8qIG5vIGhvbWUgZGlyZWN0b3J5IGZvdW5kIChvciBwb3NzaWJseSBvdXQgb2YgbWVtb3J5KSAqLwotCi0gICAgbmV0cmNmaWxlID0gY3VybF9tYXByaW50ZigiJXMlcyVzIiwgaG9tZSwgRElSX0NIQVIsIE5FVFJDKTsKLSAgICBpZihob21lX2FsbG9jKQotICAgICAgZnJlZShob21lKTsKLSAgICBpZighbmV0cmNmaWxlKSB7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIG5ldHJjX2FsbG9jID0gVFJVRTsKLSAgfQorICBERUJVR0FTU0VSVChuZXRyY2ZpbGUpOwogCiAgIGZpbGUgPSBmb3BlbihuZXRyY2ZpbGUsIEZPUEVOX1JFQURURVhUKTsKLSAgaWYobmV0cmNfYWxsb2MpCi0gICAgZnJlZShuZXRyY2ZpbGUpOwogICBpZihmaWxlKSB7CiAgICAgY2hhciAqdG9rOwogICAgIGNoYXIgKnRva19idWY7CkBAIC0xMzAsNyArODgsNyBAQAogICAgICAgaWYodG9rICYmICp0b2sgPT0gJyMnKQogICAgICAgICAvKiB0cmVhdCBhbiBpbml0aWFsIGhhc2ggYXMgYSBjb21tZW50IGxpbmUgKi8KICAgICAgICAgY29udGludWU7Ci0gICAgICB3aGlsZSghZG9uZSAmJiB0b2spIHsKKyAgICAgIHdoaWxlKHRvaykgewogCiAgICAgICAgIGlmKChsb2dpbiAmJiAqbG9naW4pICYmIChwYXNzd29yZCAmJiAqcGFzc3dvcmQpKSB7CiAgICAgICAgICAgZG9uZSA9IFRSVUU7CkBAIC0xNDgsMTQgKzEwNiwxNCBAQAogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKCJkZWZhdWx0IiwgdG9rKSkgewogICAgICAgICAgICAgc3RhdGUgPSBIT1NUVkFMSUQ7Ci0gICAgICAgICAgICByZXRjb2RlID0gMDsgLyogd2UgZGlkIGZpbmQgb3VyIGhvc3QgKi8KKyAgICAgICAgICAgIHJldGNvZGUgPSBORVRSQ19TVUNDRVNTOyAvKiB3ZSBkaWQgZmluZCBvdXIgaG9zdCAqLwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIT1NURk9VTkQ6CiAgICAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoaG9zdCwgdG9rKSkgewogICAgICAgICAgICAgLyogYW5kIHllcywgdGhpcyBpcyBvdXIgaG9zdCEgKi8KICAgICAgICAgICAgIHN0YXRlID0gSE9TVFZBTElEOwotICAgICAgICAgICAgcmV0Y29kZSA9IDA7IC8qIHdlIGRpZCBmaW5kIG91ciBob3N0ICovCisgICAgICAgICAgICByZXRjb2RlID0gTkVUUkNfU1VDQ0VTUzsgLyogd2UgZGlkIGZpbmQgb3VyIGhvc3QgKi8KICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgLyogbm90IG91ciBob3N0ICovCkBAIC0xNzQsNyArMTMyLDcgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBsb2dpbiA9IHN0cmR1cCh0b2spOwogICAgICAgICAgICAgICBpZighbG9naW4pIHsKLSAgICAgICAgICAgICAgICByZXRjb2RlID0gLTE7IC8qIGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgICAgICAgICAgcmV0Y29kZSA9IE5FVFJDX0ZBSUxFRDsgLyogYWxsb2NhdGlvbiBmYWlsZWQgKi8KICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBsb2dpbl9hbGxvYyA9IFRSVUU7CkBAIC0xOTAsNyArMTQ4LDcgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBwYXNzd29yZCA9IHN0cmR1cCh0b2spOwogICAgICAgICAgICAgICBpZighcGFzc3dvcmQpIHsKLSAgICAgICAgICAgICAgICByZXRjb2RlID0gLTE7IC8qIGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgICAgICAgICAgcmV0Y29kZSA9IE5FVFJDX0ZBSUxFRDsgLyogYWxsb2NhdGlvbiBmYWlsZWQgKi8KICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBwYXNzd29yZF9hbGxvYyA9IFRSVUU7CkBAIC0yMTUsNiArMTczLDcgQEAKIAogICAgIG91dDoKICAgICBpZighcmV0Y29kZSkgeworICAgICAgLyogc3VjY2VzcyAqLwogICAgICAgKmxvZ2luX2NoYW5nZWQgPSBGQUxTRTsKICAgICAgICpwYXNzd29yZF9jaGFuZ2VkID0gRkFMU0U7CiAgICAgICBpZihsb2dpbl9hbGxvYykgewpAQCAtMjQyLDQgKzIwMSw3OCBAQAogICByZXR1cm4gcmV0Y29kZTsKIH0KIAorLyoKKyAqIEB1bml0dGVzdDogMTMwNAorICoKKyAqICpsb2dpbnAgYW5kICpwYXNzd29yZHAgTVVTVCBiZSBhbGxvY2F0ZWQgaWYgdGhleSBhcmVuJ3QgTlVMTCB3aGVuIHBhc3NlZAorICogaW4uCisgKi8KK2ludCBDdXJsX3BhcnNlbmV0cmMoY29uc3QgY2hhciAqaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKmxvZ2lucCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkcCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAqbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAqcGFzc3dvcmRfY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV0cmNmaWxlKQoreworICBpbnQgcmV0Y29kZSA9IDE7CisgIGNoYXIgKmZpbGVhbGxvYyA9IE5VTEw7CisKKyAgaWYoIW5ldHJjZmlsZSkgeworICAgIGNoYXIgKmhvbWUgPSBOVUxMOworICAgIGNoYXIgKmhvbWVhID0gY3VybF9nZXRlbnYoIkhPTUUiKTsgLyogcG9ydGFibGUgZW52aXJvbm1lbnQgcmVhZGVyICovCisgICAgaWYoaG9tZWEpIHsKKyAgICAgIGhvbWUgPSBob21lYTsKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUFdVSURfUikgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RydWN0IHBhc3N3ZCBwdywgKnB3X3JlczsKKyAgICAgIGNoYXIgcHdidWZbMTAyNF07CisgICAgICBpZighZ2V0cHd1aWRfcihnZXRldWlkKCksICZwdywgcHdidWYsIHNpemVvZihwd2J1ZiksICZwd19yZXMpCisgICAgICAgICAmJiBwd19yZXMpIHsKKyAgICAgICAgaG9tZSA9IHB3LnB3X2RpcjsKKyAgICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RydWN0IHBhc3N3ZCAqcHc7CisgICAgICBwdyA9IGdldHB3dWlkKGdldGV1aWQoKSk7CisgICAgICBpZihwdykgeworICAgICAgICBob21lID0gcHctPnB3X2RpcjsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmKCFob21lKQorICAgICAgcmV0dXJuIHJldGNvZGU7IC8qIG5vIGhvbWUgZGlyZWN0b3J5IGZvdW5kIChvciBwb3NzaWJseSBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkpICovCisKKyAgICBmaWxlYWxsb2MgPSBjdXJsX21hcHJpbnRmKCIlcyVzLm5ldHJjIiwgaG9tZSwgRElSX0NIQVIpOworICAgIGlmKCFmaWxlYWxsb2MpIHsKKyAgICAgIGZyZWUoaG9tZWEpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXRjb2RlID0gcGFyc2VuZXRyYyhob3N0LCBsb2dpbnAsIHBhc3N3b3JkcCwgbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZF9jaGFuZ2VkLCBmaWxlYWxsb2MpOworICAgIGZyZWUoZmlsZWFsbG9jKTsKKyNpZmRlZiBXSU4zMgorICAgIGlmKHJldGNvZGUgPT0gTkVUUkNfRklMRV9NSVNTSU5HKSB7CisgICAgICAvKiBmYWxsYmFjayB0byB0aGUgb2xkLXN0eWxlICJfbmV0cmMiIGZpbGUgKi8KKyAgICAgIGZpbGVhbGxvYyA9IGN1cmxfbWFwcmludGYoIiVzJXNfbmV0cmMiLCBob21lLCBESVJfQ0hBUik7CisgICAgICBpZighZmlsZWFsbG9jKSB7CisgICAgICAgIGZyZWUoaG9tZWEpOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICByZXRjb2RlID0gcGFyc2VuZXRyYyhob3N0LCBsb2dpbnAsIHBhc3N3b3JkcCwgbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NoYW5nZWQsIGZpbGVhbGxvYyk7CisgICAgICBmcmVlKGZpbGVhbGxvYyk7CisgICAgfQorI2VuZGlmCisgICAgZnJlZShob21lYSk7CisgIH0KKyAgZWxzZQorICAgIHJldGNvZGUgPSBwYXJzZW5ldHJjKGhvc3QsIGxvZ2lucCwgcGFzc3dvcmRwLCBsb2dpbl9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NoYW5nZWQsIG5ldHJjZmlsZSk7CisgIHJldHVybiByZXRjb2RlOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbi1hc2NpaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKaW5kZXggNDJiZWFlYy4uYTQ4ZTY3ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ub25ibG9jay5jCmluZGV4IDRkMTA1YzEuLmFiZWI2NTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmgKaW5kZXggZWIxOGVhMS4uZDUwZDMxNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ub25ibG9jay5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ud2xpYi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbndsaWIuYwppbmRleCA3YmY1ZjUxLi5iZWVjMGIzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ud2xpYi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL253bGliLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM2LDIxICszNiwxOSBAQAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAotdHlwZWRlZiBzdHJ1Y3QKLXsKK3N0cnVjdCBsaWJ0aHJlYWRkYXRhIHsKICAgaW50ICAgICBfZXJybm87CiAgIHZvaWQgICAgKnR3ZW50eWJ5dGVzOwotfSBsaWJ0aHJlYWRkYXRhX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdAoteworc3RydWN0IGxpYmRhdGEgewogICBpbnQgICAgICAgICB4OwogICBpbnQgICAgICAgICB5OwogICBpbnQgICAgICAgICB6OwogICB2b2lkICAgICAgICAqdGVuYnl0ZXM7CiAgIE5YS2V5X3QgICAgIHBlcnRocmVhZGtleTsgICAvKiBpZiAtMSwgbm8ga2V5IG9idGFpbmVkLi4uICovCiAgIE5YTXV0ZXhfdCAgICpsb2NrOwotfSBsaWJkYXRhX3Q7Cit9OwogCiBpbnQgICAgICAgICBnTGliSWQgICAgICA9IC0xOwogdm9pZCAgICAgICAgKmdMaWJIYW5kbGUgPSAodm9pZCAqKSBOVUxMOwpAQCAtNjAsNyArNTgsOCBAQAogLyogaW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbiBwcm90b3R5cGVzLi4uICovCiBpbnQgIERpc3Bvc2VMaWJyYXJ5RGF0YSh2b2lkICopOwogdm9pZCBEaXNwb3NlVGhyZWFkRGF0YSh2b2lkICopOwotaW50ICBHZXRPclNldFVwRGF0YShpbnQgaWQsIGxpYmRhdGFfdCAqKmRhdGEsIGxpYnRocmVhZGRhdGFfdCAqKnRocmVhZGRhdGEpOworaW50ICBHZXRPclNldFVwRGF0YShpbnQgaWQsIHN0cnVjdCBsaWJkYXRhICoqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxpYnRocmVhZGRhdGEgKip0aHJlYWRkYXRhKTsKIAogCiBpbnQgX05vbkFwcFN0YXJ0KHZvaWQgICAgICAgICpOTE1IYW5kbGUsCkBAIC0xNTQsMjQgKzE1MywyNCBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQgR2V0T3JTZXRVcERhdGEoaW50IGlkLCBsaWJkYXRhX3QgKiphcHBEYXRhLAotICAgICAgICAgICAgICAgICAgIGxpYnRocmVhZGRhdGFfdCAqKnRocmVhZERhdGEpCitpbnQgR2V0T3JTZXRVcERhdGEoaW50IGlkLCBzdHJ1Y3QgbGliZGF0YSAqKmFwcERhdGEsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IGxpYnRocmVhZGRhdGEgKip0aHJlYWREYXRhKQogewogICBpbnQgICAgICAgICAgICAgICAgIGVycjsKLSAgbGliZGF0YV90ICAgICAgICAgICAqYXBwX2RhdGE7Ci0gIGxpYnRocmVhZGRhdGFfdCAqdGhyZWFkX2RhdGE7CisgIHN0cnVjdCBsaWJkYXRhICAgICAgKmFwcF9kYXRhOworICBzdHJ1Y3QgbGlidGhyZWFkZGF0YSAqdGhyZWFkX2RhdGE7CiAgIE5YS2V5X3QgICAgICAgICAgICAga2V5OwogICBOWF9MT0NLX0lORk9fQUxMT0MobGlibG9jaywgIkFwcGxpY2F0aW9uIERhdGEgTG9jayIsIDApOwogCiAgIGVyciAgICAgICAgID0gMDsKLSAgdGhyZWFkX2RhdGEgPSAobGlidGhyZWFkZGF0YV90ICopIE5VTEw7CisgIHRocmVhZF9kYXRhID0gKHN0cnVjdCBsaWJ0aHJlYWRkYXRhX3QgKikgTlVMTDsKIAogICAvKgogICAgKiBBdHRlbXB0IHRvIGdldCBvdXIgZGF0YSBmb3IgdGhlIGFwcGxpY2F0aW9uIGNhbGxpbmcgdXMuIFRoaXMgaXMgd2hlcmUgd2UKICAgICogc3RvcmUgd2hhdGV2ZXIgYXBwbGljYXRpb24tc3BlY2lmaWMgaW5mb3JtYXRpb24gd2UgbmVlZCB0byBjYXJyeSBpbgogICAgKiBzdXBwb3J0IG9mIGNhbGxpbmcgYXBwbGljYXRpb25zLgogICAgKi8KLSAgYXBwX2RhdGEgPSAobGliZGF0YV90ICopIGdldF9hcHBfZGF0YShpZCk7CisgIGFwcF9kYXRhID0gKHN0cnVjdCBsaWJkYXRhICopIGdldF9hcHBfZGF0YShpZCk7CiAKICAgaWYoIWFwcF9kYXRhKSB7CiAgICAgLyoKQEAgLTE4NCw5ICsxODMsOSBAQAogICAgICAqLwogICAgIE5YTG9jayhnTGliTG9jayk7CiAKLSAgICBhcHBfZGF0YSA9IChsaWJkYXRhX3QgKikgZ2V0X2FwcF9kYXRhKGlkKTsKKyAgICBhcHBfZGF0YSA9IChzdHJ1Y3QgbGliZGF0YSAqKSBnZXRfYXBwX2RhdGEoaWQpOwogICAgIGlmKCFhcHBfZGF0YSkgewotICAgICAgYXBwX2RhdGEgPSBjYWxsb2MoMSwgc2l6ZW9mKGxpYmRhdGFfdCkpOworICAgICAgYXBwX2RhdGEgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsaWJkYXRhKSk7CiAKICAgICAgIGlmKGFwcF9kYXRhKSB7CiAgICAgICAgIGFwcF9kYXRhLT50ZW5ieXRlcyA9IG1hbGxvYygxMCk7CkBAIC0yNDksNyArMjQ4LDcgQEAKICAgICAgICAqIGEgcG9pbnRlciBpcyBub3QgdmVyeSBpbXBvcnRhbnQsIHRoaXMganVzdCBoZWxwcyB0byBkZW1vbnN0cmF0ZSB0aGF0CiAgICAgICAgKiB3ZSBjYW4gaGF2ZSBhcmJpdHJhcmlseSBjb21wbGV4IHBlci10aHJlYWQgZGF0YS4KICAgICAgICAqLwotICAgICAgdGhyZWFkX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKGxpYnRocmVhZGRhdGFfdCkpOworICAgICAgdGhyZWFkX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaWJ0aHJlYWRkYXRhKSk7CiAKICAgICAgIGlmKHRocmVhZF9kYXRhKSB7CiAgICAgICAgIHRocmVhZF9kYXRhLT5fZXJybm8gICAgICA9IDA7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAogICAgICAgICBpZighdGhyZWFkX2RhdGEtPnR3ZW50eWJ5dGVzKSB7CiAgICAgICAgICAgZnJlZSh0aHJlYWRfZGF0YSk7Ci0gICAgICAgICAgdGhyZWFkX2RhdGEgPSAobGlidGhyZWFkZGF0YV90ICopIE5VTEw7CisgICAgICAgICAgdGhyZWFkX2RhdGEgPSAoc3RydWN0IGxpYnRocmVhZGRhdGEgKikgTlVMTDsKICAgICAgICAgICBlcnIgICAgICAgICA9IEVOT01FTTsKICAgICAgICAgfQogCkBAIC0yNjUsNyArMjY0LDcgQEAKICAgICAgICAgaWYoZXJyKSB7CiAgICAgICAgICAgZnJlZSh0aHJlYWRfZGF0YS0+dHdlbnR5Ynl0ZXMpOwogICAgICAgICAgIGZyZWUodGhyZWFkX2RhdGEpOwotICAgICAgICAgIHRocmVhZF9kYXRhID0gKGxpYnRocmVhZGRhdGFfdCAqKSBOVUxMOworICAgICAgICAgIHRocmVhZF9kYXRhID0gKHN0cnVjdCBsaWJ0aHJlYWRkYXRhICopIE5VTEw7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0yOTUsNyArMjk0LDcgQEAKIHZvaWQgRGlzcG9zZVRocmVhZERhdGEodm9pZCAqZGF0YSkKIHsKICAgaWYoZGF0YSkgewotICAgIHZvaWQgKnR3ZW50eWJ5dGVzID0gKChsaWJ0aHJlYWRkYXRhX3QgKikgZGF0YSktPnR3ZW50eWJ5dGVzOworICAgIHZvaWQgKnR3ZW50eWJ5dGVzID0gKChzdHJ1Y3QgbGlidGhyZWFkZGF0YSAqKSBkYXRhKS0+dHdlbnR5Ynl0ZXM7CiAKICAgICBmcmVlKHR3ZW50eWJ5dGVzKTsKICAgICBmcmVlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvb3BlbmxkYXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL29wZW5sZGFwLmMKaW5kZXggZWVhYjJjNy4uNzgyZDZhMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvb3BlbmxkYXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9vcGVubGRhcC5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb3dhcmQgQ2h1LCA8aHljQG9wZW5sZGFwLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgImJhZCBvciBtaXNzaW5nIGV4dGVuc2lvbnMiCiB9OwogCi10eXBlZGVmIHN0cnVjdCBsZGFwY29ubmluZm8geworc3RydWN0IGxkYXBjb25uaW5mbyB7CiAgIExEQVAgKmxkOwogICBDdXJsX3JlY3YgKnJlY3Y7ICAvKiBmb3Igc3RhY2tpbmcgU1NMIGhhbmRsZXIgKi8KICAgQ3VybF9zZW5kICpzZW5kOwpAQCAtMTYwLDE2ICsxNjAsMTYgQEAKICAgYm9vbCBzc2xkb25lOwogICBib29sIHNzbGluc3Q7CiAgIGJvb2wgZGlkYmluZDsKLX0gbGRhcGNvbm5pbmZvOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbGRhcHJlcWluZm8geworc3RydWN0IGxkYXByZXFpbmZvIHsKICAgaW50IG1zZ2lkOwogICBpbnQgbnVtZW50OwotfSBsZGFwcmVxaW5mbzsKK307CiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBsZGFwY29ubmluZm8gKmxpOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaTsKICAgTERBUFVSTERlc2MgKmx1ZDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGludCByYywgcHJvdG87CkBAIC0xOTAsMTEgKzE5MCwxMSBAQAogICBwcm90byA9IGxkYXBfcHZ0X3VybF9zY2hlbWUycHJvdG8obHVkLT5sdWRfc2NoZW1lKTsKICAgbGRhcF9mcmVlX3VybGRlc2MobHVkKTsKIAotICBsaSA9IGNhbGxvYygxLCBzaXplb2YobGRhcGNvbm5pbmZvKSk7CisgIGxpID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbGRhcGNvbm5pbmZvKSk7CiAgIGlmKCFsaSkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgbGktPnByb3RvID0gcHJvdG87Ci0gIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBsaTsKKyAgY29ubi0+cHJvdG8ubGRhcGMgPSBsaTsKICAgY29ubmtlZXAoY29ubiwgIk9wZW5MREFQIGRlZmF1bHQiKTsKICAgcmV0dXJuIENVUkxFX09LOwogfQpAQCAtMjA1LDcgKzIwNSw3IEBACiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQogewotICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGludCByYywgcHJvdG8gPSBMREFQX1ZFUlNJT04zOwogICBjaGFyIGhvc3R1cmxbMTAyNF07CkBAIC0yNTIsNyArMjUyLDcgQEAKIAogc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgTERBUE1lc3NhZ2UgKm1zZyA9IE5VTEw7CiAgIHN0cnVjdCB0aW1ldmFsIHR2ID0gezAsIDF9LCAqdHZwOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKIHsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8ubGRhcGM7CiAgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CiAKICAgaWYobGkpIHsKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgICAgbGRhcF91bmJpbmRfZXh0KGxpLT5sZCwgTlVMTCwgTlVMTCk7CiAgICAgICBsaS0+bGQgPSBOVUxMOwogICAgIH0KLSAgICBjb25uLT5wcm90by5nZW5lcmljID0gTlVMTDsKKyAgICBjb25uLT5wcm90by5sZGFwYyA9IE5VTEw7CiAgICAgZnJlZShsaSk7CiAgIH0KICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMzczLDggKzM3Myw4IEBACiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKIHsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7Ci0gIGxkYXByZXFpbmZvICpscjsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKKyAgc3RydWN0IGxkYXByZXFpbmZvICpscjsKICAgQ1VSTGNvZGUgc3RhdHVzID0gQ1VSTEVfT0s7CiAgIGludCByYyA9IDA7CiAgIExEQVBVUkxEZXNjICpsdWRwID0gTlVMTDsKQEAgLTQwNiw3ICs0MDYsNyBAQAogICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBsZGFwX3NlYXJjaF9leHQgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKICAgICByZXR1cm4gQ1VSTEVfTERBUF9TRUFSQ0hfRkFJTEVEOwogICB9Ci0gIGxyID0gY2FsbG9jKDEsIHNpemVvZihsZGFwcmVxaW5mbykpOworICBsciA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxkYXByZXFpbmZvKSk7CiAgIGlmKCFscikKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgbHItPm1zZ2lkID0gbXNnaWQ7CkBAIC00MTksNyArNDE5LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSByZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQogewotICBsZGFwcmVxaW5mbyAqbHIgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3QgbGRhcHJlcWluZm8gKmxyID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKIAogICAodm9pZClyZXM7CiAgICh2b2lkKXByZW1hdHVyZTsKQEAgLTQyNyw3ICs0MjcsNyBAQAogICBpZihscikgewogICAgIC8qIGlmIHRoZXJlIHdhcyBhIHNlYXJjaCBpbiBwcm9ncmVzcywgYWJhbmRvbiBpdCAqLwogICAgIGlmKGxyLT5tc2dpZCkgewotICAgICAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgICAgICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICAgICAgbGRhcF9hYmFuZG9uX2V4dChsaS0+bGQsIGxyLT5tc2dpZCwgTlVMTCwgTlVMTCk7CiAgICAgICBsci0+bXNnaWQgPSAwOwogICAgIH0KQEAgLTQ0MSw5ICs0NDEsOSBAQAogc3RhdGljIHNzaXplX3QgbGRhcF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwgY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7Ci0gIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgbGRhcHJlcWluZm8gKmxyID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgc3RydWN0IGxkYXByZXFpbmZvICpsciA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIGludCByYywgcmV0OwogICBMREFQTWVzc2FnZSAqbXNnID0gTlVMTDsKICAgTERBUE1lc3NhZ2UgKmVudDsKQEAgLTcxOCw3ICs3MTgsNyBAQAogbGRhcHNiX3Rsc19yZWFkKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIHZvaWQgKmJ1ZiwgYmVyX2xlbl90IGxlbikKIHsKICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gc2Jpb2QtPnNiaW9kX3B2dDsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8ubGRhcGM7CiAgIGJlcl9zbGVuX3QgcmV0OwogICBDVVJMY29kZSBlcnIgPSBDVVJMRV9SRUNWX0VSUk9SOwogCkBAIC03MzMsNyArNzMzLDcgQEAKIGxkYXBzYl90bHNfd3JpdGUoU29ja2J1Zl9JT19EZXNjICpzYmlvZCwgdm9pZCAqYnVmLCBiZXJfbGVuX3QgbGVuKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBzYmlvZC0+c2Jpb2RfcHZ0OwotICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKICAgYmVyX3NsZW5fdCByZXQ7CiAgIENVUkxjb2RlIGVyciA9IENVUkxFX1NFTkRfRVJST1I7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGFyc2VkYXRlLmMKaW5kZXggN2FlNWViOC4uNTg1ZDdlYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcGFyc2VkYXRlLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGFyc2VkYXRlLmMKQEAgLTEwMCwxNiArMTAwLDIwIEBACiAjZGVmaW5lIFBBUlNFREFURV9MQVRFUiAgMQogI2RlZmluZSBQQVJTRURBVEVfU09PTkVSIDIKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfUEFSU0VEQVRFCi0KKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfUEFSU0VEQVRFKSB8fCAhZGVmaW5lZChDVVJMX0RJU0FCTEVfRlRQKSB8fCBcCisgICFkZWZpbmVkKENVUkxfRElTQUJMRV9GSUxFKQorLyogVGhlc2UgbmFtZXMgYXJlIGFsc28gdXNlZCBieSBGVFAgYW5kIEZJTEUgY29kZSAqLwogY29uc3QgY2hhciAqIGNvbnN0IEN1cmxfd2tkYXlbXSA9CiB7Ik1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biJ9Owotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3ZWVrZGF5W10gPQoteyAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwKLSAgIkZyaWRheSIsICJTYXR1cmRheSIsICJTdW5kYXkiIH07CiBjb25zdCBjaGFyICogY29uc3QgQ3VybF9tb250aFtdPQogeyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAogICAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiIH07CisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUEFSU0VEQVRFCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHdlZWtkYXlbXSA9Cit7ICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLAorICAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgIlN1bmRheSIgfTsKIAogc3RydWN0IHR6aW5mbyB7CiAgIGNoYXIgbmFtZVs1XTsKQEAgLTU4Myw2ICs1ODcsMzAgQEAKICAgcmV0dXJuIC0xOwogfQogCisvKiBDdXJsX2dldGRhdGVfY2FwcGVkKCkgZGlmZmVycyBmcm9tIGN1cmxfZ2V0ZGF0ZSgpIGluIHRoYXQgdGhpcyB3aWxsIHJldHVybgorICAgVElNRV9UX01BWCBpbiBjYXNlIHRoZSBwYXJzZWQgdGltZSB2YWx1ZSB3YXMgdG9vIGJpZywgaW5zdGVhZCBvZiBhbgorICAgZXJyb3IuICovCisKK3RpbWVfdCBDdXJsX2dldGRhdGVfY2FwcGVkKGNvbnN0IGNoYXIgKnApCit7CisgIHRpbWVfdCBwYXJzZWQgPSAtMTsKKyAgaW50IHJjID0gcGFyc2VkYXRlKHAsICZwYXJzZWQpOworCisgIHN3aXRjaChyYykgeworICBjYXNlIFBBUlNFREFURV9PSzoKKyAgICBpZihwYXJzZWQgPT0gLTEpCisgICAgICAvKiBhdm9pZCByZXR1cm5pbmcgLTEgZm9yIGEgd29ya2luZyBzY2VuYXJpbyAqLworICAgICAgcGFyc2VkKys7CisgICAgcmV0dXJuIHBhcnNlZDsKKyAgY2FzZSBQQVJTRURBVEVfTEFURVI6CisgICAgLyogdGhpcyByZXR1cm5zIHRoZSBtYXhpbXVtIHRpbWUgdmFsdWUgKi8KKyAgICByZXR1cm4gcGFyc2VkOworICBkZWZhdWx0OgorICAgIHJldHVybiAtMTsgLyogZXZlcnl0aGluZyBlbHNlIGlzIGZhaWwgKi8KKyAgfQorICAvKiBVTlJFQUNIQUJMRSAqLworfQorCiAvKgogICogQ3VybF9nbXRpbWUoKSBpcyBhIGdtdGltZSgpIHJlcGxhY2VtZW50IGZvciBwb3J0YWJpbGl0eS4gRG8gbm90IHVzZSB0aGUKICAqIGdtdGltZV9yKCkgb3IgZ210aW1lKCkgZnVuY3Rpb25zIGFueXdoZXJlIGVsc2UgYnV0IGhlcmUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9wYXJzZWRhdGUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5oCmluZGV4IDhkYzNiOTAuLjhjN2FlOTQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNyw0ICsyNywxMCBAQAogCiBDVVJMY29kZSBDdXJsX2dtdGltZSh0aW1lX3QgaW50aW1lLCBzdHJ1Y3QgdG0gKnN0b3JlKTsKIAorLyogQ3VybF9nZXRkYXRlX2NhcHBlZCgpIGRpZmZlcnMgZnJvbSBjdXJsX2dldGRhdGUoKSBpbiB0aGF0IHRoaXMgd2lsbCByZXR1cm4KKyAgIFRJTUVfVF9NQVggaW4gY2FzZSB0aGUgcGFyc2VkIHRpbWUgdmFsdWUgd2FzIHRvbyBiaWcsIGluc3RlYWQgb2YgYW4KKyAgIGVycm9yLiAqLworCit0aW1lX3QgQ3VybF9nZXRkYXRlX2NhcHBlZChjb25zdCBjaGFyICpwKTsKKwogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1BBUlNFREFURV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGluZ3BvbmcuYwppbmRleCBlOTU2OGVlLi4zMTQzMzE1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ0LDEyICs0NCwxMiBAQAogCiAvKiBSZXR1cm5zIHRpbWVvdXQgaW4gbXMuIDAgb3IgbmVnYXRpdmUgbnVtYmVyIG1lYW5zIHRoZSB0aW1lb3V0IGhhcyBhbHJlYWR5CiAgICB0cmlnZ2VyZWQgKi8KLXRpbWVfdCBDdXJsX3BwX3N0YXRlX3RpbWVvdXQoc3RydWN0IHBpbmdwb25nICpwcCwgYm9vbCBkaXNjb25uZWN0aW5nKQordGltZWRpZmZfdCBDdXJsX3BwX3N0YXRlX3RpbWVvdXQoc3RydWN0IHBpbmdwb25nICpwcCwgYm9vbCBkaXNjb25uZWN0aW5nKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHRpbWVfdCB0aW1lb3V0X21zOyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KLSAgbG9uZyByZXNwb25zZV90aW1lID0gKGRhdGEtPnNldC5zZXJ2ZXJfcmVzcG9uc2VfdGltZW91dCk/CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsgLyogaW4gbWlsbGlzZWNvbmRzICovCisgIHRpbWVkaWZmX3QgcmVzcG9uc2VfdGltZSA9IChkYXRhLT5zZXQuc2VydmVyX3Jlc3BvbnNlX3RpbWVvdXQpPwogICAgIGRhdGEtPnNldC5zZXJ2ZXJfcmVzcG9uc2VfdGltZW91dDogcHAtPnJlc3BvbnNlX3RpbWU7CiAKICAgLyogaWYgQ1VSTE9QVF9TRVJWRVJfUkVTUE9OU0VfVElNRU9VVCBpcyBzZXQsIHVzZSB0aGF0IHRvIGRldGVybWluZQpAQCAtNjQsNyArNjQsNyBAQAogCiAgIGlmKGRhdGEtPnNldC50aW1lb3V0ICYmICFkaXNjb25uZWN0aW5nKSB7CiAgICAgLyogaWYgdGltZW91dCBpcyByZXF1ZXN0ZWQsIGZpbmQgb3V0IGhvdyBtdWNoIHJlbWFpbmluZyB0aW1lIHdlIGhhdmUgKi8KLSAgICB0aW1lX3QgdGltZW91dDJfbXMgPSBkYXRhLT5zZXQudGltZW91dCAtIC8qIHRpbWVvdXQgdGltZSAqLworICAgIHRpbWVkaWZmX3QgdGltZW91dDJfbXMgPSBkYXRhLT5zZXQudGltZW91dCAtIC8qIHRpbWVvdXQgdGltZSAqLwogICAgICAgQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCBjb25uLT5ub3cpOyAvKiBzcGVudCB0aW1lICovCiAKICAgICAvKiBwaWNrIHRoZSBsb3dlc3QgbnVtYmVyICovCkBAIC04Myw4ICs4Myw4IEBACiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHBwLT5jb25uOwogICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgaW50IHJjOwotICB0aW1lX3QgaW50ZXJ2YWxfbXM7Ci0gIHRpbWVfdCB0aW1lb3V0X21zID0gQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHBwLCBkaXNjb25uZWN0aW5nKTsKKyAgdGltZWRpZmZfdCBpbnRlcnZhbF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHBwLCBkaXNjb25uZWN0aW5nKTsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCkBAIC0zODQsMTAgKzM4NCwxMCBAQAogCiAgICAgICAgICAgaWYocHAtPmVuZG9mcmVzcChjb25uLCBwcC0+bGluZXN0YXJ0X3Jlc3AsIHBlcmxpbmUsIGNvZGUpKSB7CiAgICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSwgY29weSB0aGUgbGFzdCBsaW5lIHRvIHRoZQotICAgICAgICAgICAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciBhbmQgemVybyB0ZXJtaW5hdGUsIGZvciBvbGQgdGltZXMgc2FrZSAqLworICAgICAgICAgICAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciBhbmQgbnVsbC10ZXJtaW5hdGUsIGZvciBvbGQgdGltZXMgc2FrZSAqLwogICAgICAgICAgICAgc2l6ZV90IG4gPSBwdHIgLSBwcC0+bGluZXN0YXJ0X3Jlc3A7CiAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiwgcHAtPmxpbmVzdGFydF9yZXNwLCBuKTsKLSAgICAgICAgICAgIGJ1ZltuXSA9IDA7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgICAgICAgICBidWZbbl0gPSAwOyAvKiBudWxsLXRlcm1pbmF0ZSAqLwogICAgICAgICAgICAga2VlcG9uID0gRkFMU0U7CiAgICAgICAgICAgICBwcC0+bGluZXN0YXJ0X3Jlc3AgPSBwdHIgKyAxOyAvKiBhZHZhbmNlIHBvaW50ZXIgKi8KICAgICAgICAgICAgIGkrKzsgLyogc2tpcCB0aGlzIGJlZm9yZSBnZXR0aW5nIG91dCAqLwpAQCAtNDYzLDE0ICs0NjMsOSBAQAogfQogCiBpbnQgQ3VybF9wcF9nZXRzb2NrKHN0cnVjdCBwaW5ncG9uZyAqcHAsCi0gICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKLQotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKIAogICBpZihwcC0+c2VuZGxlZnQpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5oCmluZGV4IGRiZTFmOGQuLmU4NzQ3OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGluZ3BvbmcuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjAsOSArNjAsOCBAQAogICBzaXplX3Qgc2VuZHNpemU7IC8qIHRvdGFsIHNpemUgb2YgdGhlIHNlbmR0aGlzIGJ1ZmZlciAqLwogICBzdHJ1Y3QgY3VybHRpbWUgcmVzcG9uc2U7IC8qIHNldCB0byBDdXJsX25vdygpIHdoZW4gYSBjb21tYW5kIGhhcyBiZWVuIHNlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmYsIHVzZWQgdG8gdGltZS1vdXQgcmVzcG9uc2UgcmVhZGluZyAqLwotICBsb25nIHJlc3BvbnNlX3RpbWU7IC8qIFdoZW4gbm8gdGltZW91dCBpcyBnaXZlbiwgdGhpcyBpcyB0aGUgYW1vdW50IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzIHdlIGF3YWl0IGZvciBhIHNlcnZlciByZXNwb25zZS4gKi8KLQorICB0aW1lZGlmZl90IHJlc3BvbnNlX3RpbWU7IC8qIFdoZW4gbm8gdGltZW91dCBpcyBnaXZlbiwgdGhpcyBpcyB0aGUgYW1vdW50IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzIHdlIGF3YWl0IGZvciBhIHNlcnZlciByZXNwb25zZS4gKi8KICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOyAvKiBwb2ludHMgdG8gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB0aGF0IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvbmdzIHRvICovCiAKQEAgLTg5LDcgKzg4LDcgQEAKIAogLyogUmV0dXJucyB0aW1lb3V0IGluIG1zLiAwIG9yIG5lZ2F0aXZlIG51bWJlciBtZWFucyB0aGUgdGltZW91dCBoYXMgYWxyZWFkeQogICAgdHJpZ2dlcmVkICovCi10aW1lX3QgQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHN0cnVjdCBwaW5ncG9uZyAqcHAsIGJvb2wgZGlzY29ubmVjdGluZyk7Cit0aW1lZGlmZl90IEN1cmxfcHBfc3RhdGVfdGltZW91dChzdHJ1Y3QgcGluZ3BvbmcgKnBwLCBib29sIGRpc2Nvbm5lY3RpbmcpOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM1LDggKzEzNCw3IEBACiAvKiBjYWxsIHRoaXMgd2hlbiBhIHBpbmdwb25nIGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkICovCiBDVVJMY29kZSBDdXJsX3BwX2Rpc2Nvbm5lY3Qoc3RydWN0IHBpbmdwb25nICpwcCk7CiAKLWludCBDdXJsX3BwX2dldHNvY2soc3RydWN0IHBpbmdwb25nICpwcCwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitpbnQgQ3VybF9wcF9nZXRzb2NrKHN0cnVjdCBwaW5ncG9uZyAqcHAsIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuYwppbmRleCBjOGYzOTY1Li45ZmY1Yzc4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9wb3AzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC05NSw4ICs5NSw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgaW50IHBvcDNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX3BhcnNlX3VybF9vcHRpb25zKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CkBAIC0xNzksNyArMTc4LDcgQEAKICAgY29ubi0+aGFuZGxlciA9ICZDdXJsX2hhbmRsZXJfcG9wM3M7CiAKICAgLyogU2V0IHRoZSBjb25uZWN0aW9uJ3MgdXBncmFkZWQgdG8gVExTIGZsYWcgKi8KLSAgY29ubi0+dGxzX3VwZ3JhZGVkID0gVFJVRTsKKyAgY29ubi0+Yml0cy50bHNfdXBncmFkZWQgPSBUUlVFOwogfQogI2Vsc2UKICNkZWZpbmUgcG9wM190b19wb3Azcyh4KSBDdXJsX25vcF9zdG10CkBAIC0zMzksMTAgKzMzOCw4IEBACiAgKi8KIHN0YXRpYyBDVVJMY29kZSBwb3AzX3BlcmZvcm1fc3RhcnR0bHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQogICAvKiBTZW5kIHRoZSBTVExTIGNvbW1hbmQgKi8KLSAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8ucG9wM2MucHAsICIlcyIsICJTVExTIik7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiJXMiLCAiU1RMUyIpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgc3RhdGUoY29ubiwgUE9QM19TVEFSVFRMUyk7CkBAIC0zNTgsMTEgKzM1NSwxMCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19wZXJmb3JtX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBwb3AzX2Nvbm4gKnBvcDNjID0gJmNvbm4tPnByb3RvLnBvcDNjOwotCiAgIC8qIFN0YXJ0IHRoZSBTU0wgY29ubmVjdGlvbiAqLwotICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmcG9wM2MtPnNzbGRvbmUpOworICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9wM2MtPnNzbGRvbmUpOwogCiAgIGlmKCFyZXN1bHQpIHsKICAgICBpZihwb3AzYy0+c3RhdGUgIT0gUE9QM19VUEdSQURFVExTKQpAQCAtNDE2LDcgKzQxMiw3IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKICAgc2l6ZV90IGk7Ci0gIE1ENV9jb250ZXh0ICpjdHh0OworICBzdHJ1Y3QgTUQ1X2NvbnRleHQgKmN0eHQ7CiAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W01ENV9ESUdFU1RfTEVOXTsKICAgY2hhciBzZWNyZXRbMiAqIE1ENV9ESUdFU1RfTEVOICsgMV07CiAKQEAgLTU5MywxMCArNTg5LDggQEAKICAqLwogc3RhdGljIENVUkxjb2RlIHBvcDNfcGVyZm9ybV9xdWl0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogU2VuZCB0aGUgUVVJVCBjb21tYW5kICovCi0gIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiJXMiLCAiUVVJVCIpOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5wb3AzYy5wcCwgIiVzIiwgIlFVSVQiKTsKIAogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIFBPUDNfUVVJVCk7CkBAIC0xMDYwLDEwICsxMDU0LDkgQEAKIH0KIAogLyogRm9yIHRoZSBQT1AzICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLwotc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3N0YXRpYyBpbnQgcG9wM19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnBvcDNjLnBwLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5wb3AzYy5wcCwgc29ja3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzMTksNyArMTMxMiw3IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAvKiBDbGVhciB0aGUgVExTIHVwZ3JhZGVkIGZsYWcgKi8KLSAgY29ubi0+dGxzX3VwZ3JhZGVkID0gRkFMU0U7CisgIGNvbm4tPmJpdHMudGxzX3VwZ3JhZGVkID0gRkFMU0U7CiAKICAgcmV0dXJuIENVUkxFX09LOwogfQpAQCAtMTM5Nyw3ICsxMzkwLDcgQEAKICAgY29uc3QgY2hhciAqcGF0aCA9ICZkYXRhLT5zdGF0ZS51cC5wYXRoWzFdOyAvKiBza2lwIGxlYWRpbmcgcGF0aCAqLwogCiAgIC8qIFVSTCBkZWNvZGUgdGhlIHBhdGggZm9yIHRoZSBtZXNzYWdlIElEICovCi0gIHJldHVybiBDdXJsX3VybGRlY29kZShkYXRhLCBwYXRoLCAwLCAmcG9wMy0+aWQsIE5VTEwsIFRSVUUpOworICByZXR1cm4gQ3VybF91cmxkZWNvZGUoZGF0YSwgcGF0aCwgMCwgJnBvcDMtPmlkLCBOVUxMLCBSRUpFQ1RfQ1RSTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTQxNSw3ICsxNDA4LDcgQEAKIAogICAvKiBVUkwgZGVjb2RlIHRoZSBjdXN0b20gcmVxdWVzdCAqLwogICBpZihjdXN0b20pCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgY3VzdG9tLCAwLCAmcG9wMy0+Y3VzdG9tLCBOVUxMLCBUUlVFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBjdXN0b20sIDAsICZwb3AzLT5jdXN0b20sIE5VTEwsIFJFSkVDVF9DVFJMKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5oCmluZGV4IGE4ZTY5N2MuLjNiYTc5OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wb3AzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Byb2dyZXNzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wcm9ncmVzcy5jCmluZGV4IGY1ODZkNTkuLjg5NTEzODQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Byb2dyZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcHJvZ3Jlc3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAKIC8qIGNoZWNrIHJhdGUgbGltaXRzIHdpdGhpbiB0aGlzIG1hbnkgcmVjZW50IG1pbGxpc2Vjb25kcywgYXQgbWluaW11bS4gKi8KQEAgLTE2OCw3ICsxNjksNyBAQAogdm9pZCBDdXJsX3BncnNUaW1lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVyaWQgdGltZXIpCiB7CiAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICB0aW1lX3QgKmRlbHRhID0gTlVMTDsKKyAgdGltZWRpZmZfdCAqZGVsdGEgPSBOVUxMOwogCiAgIHN3aXRjaCh0aW1lcikgewogICBkZWZhdWx0OgpAQCAtMjM4LDYgKzIzOSw4IEBACiAgIGRhdGEtPnByb2dyZXNzLnVsX2xpbWl0X3N0YXJ0LnR2X3VzZWMgPSAwOwogICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zdGFydC50dl9zZWMgPSAwOwogICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zdGFydC50dl91c2VjID0gMDsKKyAgZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCA9IDA7CisgIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkID0gMDsKICAgLyogY2xlYXIgYWxsIGJpdHMgZXhjZXB0IEhJREUgYW5kIEhFQURFUlNfT1VUICovCiAgIGRhdGEtPnByb2dyZXNzLmZsYWdzICY9IFBHUlNfSElERXxQR1JTX0hFQURFUlNfT1VUOwogICBDdXJsX3JhdGVsaW1pdChkYXRhLCBkYXRhLT5wcm9ncmVzcy5zdGFydCk7CkBAIC0yNjgsOCArMjcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybHRpbWUgbm93KQogewogICBjdXJsX29mZl90IHNpemUgPSBjdXJzaXplIC0gc3RhcnRzaXplOwotICB0aW1lX3QgbWluaW11bTsKLSAgdGltZV90IGFjdHVhbDsKKyAgdGltZWRpZmZfdCBtaW5pbXVtOworICB0aW1lZGlmZl90IGFjdHVhbDsKIAogICBpZighbGltaXQgfHwgIXNpemUpCiAgICAgcmV0dXJuIDA7CkBAIC0yNzksMTMgKzI4MiwxMyBAQAogICAgKiBzdGF5IGJlbG93ICdsaW1pdCcuCiAgICAqLwogICBpZihzaXplIDwgQ1VSTF9PRkZfVF9NQVgvMTAwMCkKLSAgICBtaW5pbXVtID0gKHRpbWVfdCkgKENVUkxfT0ZGX1RfQygxMDAwKSAqIHNpemUgLyBsaW1pdCk7CisgICAgbWluaW11bSA9ICh0aW1lZGlmZl90KSAoQ1VSTF9PRkZfVF9DKDEwMDApICogc2l6ZSAvIGxpbWl0KTsKICAgZWxzZSB7Ci0gICAgbWluaW11bSA9ICh0aW1lX3QpIChzaXplIC8gbGltaXQpOwotICAgIGlmKG1pbmltdW0gPCBUSU1FX1RfTUFYLzEwMDApCisgICAgbWluaW11bSA9ICh0aW1lZGlmZl90KSAoc2l6ZSAvIGxpbWl0KTsKKyAgICBpZihtaW5pbXVtIDwgVElNRURJRkZfVF9NQVgvMTAwMCkKICAgICAgIG1pbmltdW0gKj0gMTAwMDsKICAgICBlbHNlCi0gICAgICBtaW5pbXVtID0gVElNRV9UX01BWDsKKyAgICAgIG1pbmltdW0gPSBUSU1FRElGRl9UX01BWDsKICAgfQogCiAgIC8qCkBAIC0zNjQsMTggKzM2NywxNSBAQAogICB9CiB9CiAKLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST0dSRVNTX01FVEVSCi1zdGF0aWMgdm9pZCBwcm9ncmVzc19tZXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCisvKiByZXR1cm5zIFRSVUUgaWYgaXQncyB0aW1lIHRvIHNob3cgdGhlIHByb2dyZXNzIG1ldGVyICovCitzdGF0aWMgYm9vbCBwcm9ncmVzc19jYWxjKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3RydWN0IGN1cmx0aW1lIG5vdykKIHsKLSAgc3RydWN0IGN1cmx0aW1lIG5vdzsKICAgY3VybF9vZmZfdCB0aW1lc3BlbnQ7CiAgIGN1cmxfb2ZmX3QgdGltZXNwZW50X21zOyAvKiBtaWxsaXNlY29uZHMgKi8KICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIGJvb2wgc2hvd25vdyA9IEZBTFNFOwogICBjdXJsX29mZl90IGRsID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZDsKICAgY3VybF9vZmZfdCB1bCA9IGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOwotCi0gIG5vdyA9IEN1cmxfbm93KCk7IC8qIHdoYXQgdGltZSBpcyBpdCAqLworICBib29sIHRpbWV0b3Nob3cgPSBGQUxTRTsKIAogICAvKiBUaGUgdGltZSBzcGVudCBzbyBmYXIgKGZyb20gdGhlIHN0YXJ0KSAqLwogICBkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQgPSBDdXJsX3RpbWVkaWZmX3VzKG5vdywgZGF0YS0+cHJvZ3Jlc3Muc3RhcnQpOwpAQCAtMzk4LDEwICszOTgsOCBAQAogICBpZihkYXRhLT5wcm9ncmVzcy5sYXN0c2hvdyAhPSBub3cudHZfc2VjKSB7CiAgICAgaW50IGNvdW50aW5kZXg7IC8qIGFtb3VudCBvZiBzZWNvbmRzIHN0b3JlZCBpbiB0aGUgc3BlZWRlciBhcnJheSAqLwogICAgIGludCBub3dpbmRleCA9IGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfYyUgQ1VSUl9USU1FOwotICAgIGlmKCEoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0hJREUpKQotICAgICAgc2hvd25vdyA9IFRSVUU7Ci0KICAgICBkYXRhLT5wcm9ncmVzcy5sYXN0c2hvdyA9IG5vdy50dl9zZWM7CisgICAgdGltZXRvc2hvdyA9IFRSVUU7CiAKICAgICAvKiBMZXQncyBkbyB0aGUgImN1cnJlbnQgc3BlZWQiIHRoaW5nLCB3aXRoIHRoZSBkbCArIHVsIHNwZWVkcwogICAgICAgIGNvbWJpbmVkLiBTdG9yZSB0aGUgc3BlZWQgYXQgZW50cnkgJ25vd2luZGV4Jy4gKi8KQEAgLTQzNCw4ICs0MzIsNyBAQAogICAgICAgICBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX2MlQ1VSUl9USU1FOjA7CiAKICAgICAgIC8qIEZpZ3VyZSBvdXQgdGhlIGV4YWN0IHRpbWUgZm9yIHRoZSB0aW1lIHNwYW4gKi8KLSAgICAgIHNwYW5fbXMgPSBDdXJsX3RpbWVkaWZmKG5vdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfdGltZVtjaGVja2luZGV4XSk7CisgICAgICBzcGFuX21zID0gQ3VybF90aW1lZGlmZihub3csIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfdGltZVtjaGVja2luZGV4XSk7CiAgICAgICBpZigwID09IHNwYW5fbXMpCiAgICAgICAgIHNwYW5fbXMgPSAxOyAvKiBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgTVVTVCBoYXZlIHBhc3NlZCAqLwogCkBAIC00NjEsMTE4ICs0NTgsMTE5IEBACiAgICAgICAgIGRhdGEtPnByb2dyZXNzLnVsc3BlZWQgKyBkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwogCiAgIH0gLyogQ2FsY3VsYXRpb25zIGVuZCAqLwotICBpZighc2hvd25vdykKLSAgICAvKiBvbmx5IHNob3cgdGhlIGludGVybmFsIHByb2dyZXNzIG1ldGVyIG9uY2UgcGVyIHNlY29uZCAqLwotICAgIHJldHVybjsKLSAgZWxzZSB7Ci0gICAgLyogSWYgdGhlcmUncyBubyBleHRlcm5hbCBjYWxsYmFjayBzZXQsIHVzZSBpbnRlcm5hbCBjb2RlIHRvIHNob3cKLSAgICAgICBwcm9ncmVzcyAqLwotICAgIC8qIHByb2dyZXNzIG1ldGVyIGhhcyBub3QgYmVlbiBzaHV0IG9mZiAqLwotICAgIGNoYXIgbWF4NVs2XVsxMF07Ci0gICAgY3VybF9vZmZfdCBkbHBlcmNlbiA9IDA7Ci0gICAgY3VybF9vZmZfdCB1bHBlcmNlbiA9IDA7Ci0gICAgY3VybF9vZmZfdCB0b3RhbF9wZXJjZW4gPSAwOwotICAgIGN1cmxfb2ZmX3QgdG90YWxfdHJhbnNmZXI7Ci0gICAgY3VybF9vZmZfdCB0b3RhbF9leHBlY3RlZF90cmFuc2ZlcjsKLSAgICBjaGFyIHRpbWVfbGVmdFsxMF07Ci0gICAgY2hhciB0aW1lX3RvdGFsWzEwXTsKLSAgICBjaGFyIHRpbWVfc3BlbnRbMTBdOwotICAgIGN1cmxfb2ZmX3QgdWxlc3RpbWF0ZSA9IDA7Ci0gICAgY3VybF9vZmZfdCBkbGVzdGltYXRlID0gMDsKLSAgICBjdXJsX29mZl90IHRvdGFsX2VzdGltYXRlOworICByZXR1cm4gdGltZXRvc2hvdzsKK30KIAotICAgIGlmKCEoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0hFQURFUlNfT1VUKSkgewotICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKLSAgICAgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAotICAgICAgICAgICAgICAgICIqKiBSZXN1bWluZyB0cmFuc2ZlciBmcm9tIGJ5dGUgcG9zaXRpb24gJSIKLSAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJcbiIsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgIH0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST0dSRVNTX01FVEVSCitzdGF0aWMgdm9pZCBwcm9ncmVzc19tZXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyIG1heDVbNl1bMTBdOworICBjdXJsX29mZl90IGRscGVyY2VuID0gMDsKKyAgY3VybF9vZmZfdCB1bHBlcmNlbiA9IDA7CisgIGN1cmxfb2ZmX3QgdG90YWxfcGVyY2VuID0gMDsKKyAgY3VybF9vZmZfdCB0b3RhbF90cmFuc2ZlcjsKKyAgY3VybF9vZmZfdCB0b3RhbF9leHBlY3RlZF90cmFuc2ZlcjsKKyAgY2hhciB0aW1lX2xlZnRbMTBdOworICBjaGFyIHRpbWVfdG90YWxbMTBdOworICBjaGFyIHRpbWVfc3BlbnRbMTBdOworICBjdXJsX29mZl90IHVsZXN0aW1hdGUgPSAwOworICBjdXJsX29mZl90IGRsZXN0aW1hdGUgPSAwOworICBjdXJsX29mZl90IHRvdGFsX2VzdGltYXRlOworICBjdXJsX29mZl90IHRpbWVzcGVudCA9CisgICAgKGN1cmxfb2ZmX3QpZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50LzEwMDAwMDA7IC8qIHNlY29uZHMgKi8KKworICBpZighKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19IRUFERVJTX09VVCkpIHsKKyAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewogICAgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAotICAgICAgICAgICAgICAiICAlJSBUb3RhbCAgICAlJSBSZWNlaXZlZCAlJSBYZmVyZCAgQXZlcmFnZSBTcGVlZCAgICIKLSAgICAgICAgICAgICAgIlRpbWUgICAgVGltZSAgICAgVGltZSAgQ3VycmVudFxuIgotICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGxvYWQgIFVwbG9hZCAgICIKLSAgICAgICAgICAgICAgIlRvdGFsICAgU3BlbnQgICAgTGVmdCAgU3BlZWRcbiIpOwotICAgICAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgfD0gUEdSU19IRUFERVJTX09VVDsgLyogaGVhZGVycyBhcmUgc2hvd24gKi8KKyAgICAgICAgICAgICAgIioqIFJlc3VtaW5nIHRyYW5zZmVyIGZyb20gYnl0ZSBwb3NpdGlvbiAlIgorICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJcbiIsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKICAgICB9Ci0KLSAgICAvKiBGaWd1cmUgb3V0IHRoZSBlc3RpbWF0ZWQgdGltZSBvZiBhcnJpdmFsIGZvciB0aGUgdXBsb2FkICovCi0gICAgaWYoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKSAmJgotICAgICAgIChkYXRhLT5wcm9ncmVzcy51bHNwZWVkID4gQ1VSTF9PRkZfVF9DKDApKSkgewotICAgICAgdWxlc3RpbWF0ZSA9IGRhdGEtPnByb2dyZXNzLnNpemVfdWwgLyBkYXRhLT5wcm9ncmVzcy51bHNwZWVkOwotCi0gICAgICBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKLSAgICAgICAgdWxwZXJjZW4gPSBkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCAvCi0gICAgICAgICAgKGRhdGEtPnByb2dyZXNzLnNpemVfdWwvQ1VSTF9PRkZfVF9DKDEwMCkpOwotICAgICAgZWxzZSBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDApKQotICAgICAgICB1bHBlcmNlbiA9IChkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCoxMDApIC8KLSAgICAgICAgICBkYXRhLT5wcm9ncmVzcy5zaXplX3VsOwotICAgIH0KLQotICAgIC8qIC4uLiBhbmQgdGhlIGRvd25sb2FkICovCi0gICAgaWYoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19ETF9TSVpFX0tOT1dOKSAmJgotICAgICAgIChkYXRhLT5wcm9ncmVzcy5kbHNwZWVkID4gQ1VSTF9PRkZfVF9DKDApKSkgewotICAgICAgZGxlc3RpbWF0ZSA9IGRhdGEtPnByb2dyZXNzLnNpemVfZGwgLyBkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwotCi0gICAgICBpZihkYXRhLT5wcm9ncmVzcy5zaXplX2RsID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKLSAgICAgICAgZGxwZXJjZW4gPSBkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkIC8KLSAgICAgICAgICAoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbC9DVVJMX09GRl9UX0MoMTAwKSk7Ci0gICAgICBlbHNlIGlmKGRhdGEtPnByb2dyZXNzLnNpemVfZGwgPiBDVVJMX09GRl9UX0MoMCkpCi0gICAgICAgIGRscGVyY2VuID0gKGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQqMTAwKSAvCi0gICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbDsKLSAgICB9Ci0KLSAgICAvKiBOb3cgZmlndXJlIG91dCB3aGljaCBvZiB0aGVtIGlzIHNsb3dlciBhbmQgdXNlIHRoYXQgb25lIGZvciB0aGUKLSAgICAgICB0b3RhbCBlc3RpbWF0ZSEgKi8KLSAgICB0b3RhbF9lc3RpbWF0ZSA9IHVsZXN0aW1hdGU+ZGxlc3RpbWF0ZT91bGVzdGltYXRlOmRsZXN0aW1hdGU7Ci0KLSAgICAvKiBjcmVhdGUgdGhlIHRocmVlIHRpbWUgc3RyaW5ncyAqLwotICAgIHRpbWUyc3RyKHRpbWVfbGVmdCwgdG90YWxfZXN0aW1hdGUgPiAwPyh0b3RhbF9lc3RpbWF0ZSAtIHRpbWVzcGVudCk6MCk7Ci0gICAgdGltZTJzdHIodGltZV90b3RhbCwgdG90YWxfZXN0aW1hdGUpOwotICAgIHRpbWUyc3RyKHRpbWVfc3BlbnQsIHRpbWVzcGVudCk7Ci0KLSAgICAvKiBHZXQgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIGV4cGVjdGVkIHRvIGdldCB0cmFuc2ZlcnJlZCAqLwotICAgIHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID0KLSAgICAgICgoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX1VMX1NJWkVfS05PV04pPwotICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfdWw6ZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQpKwotICAgICAgKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfRExfU0laRV9LTk9XTik/Ci0gICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbDpkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKTsKLQotICAgIC8qIFdlIGhhdmUgdHJhbnNmZXJyZWQgdGhpcyBtdWNoIHNvIGZhciAqLwotICAgIHRvdGFsX3RyYW5zZmVyID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCArIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOwotCi0gICAgLyogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGRhdGEgdHJhbnNmZXJyZWQgc28gZmFyICovCi0gICAgaWYodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPiBDVVJMX09GRl9UX0MoMTAwMDApKQotICAgICAgdG90YWxfcGVyY2VuID0gdG90YWxfdHJhbnNmZXIgLwotICAgICAgICAodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIvQ1VSTF9PRkZfVF9DKDEwMCkpOwotICAgIGVsc2UgaWYodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPiBDVVJMX09GRl9UX0MoMCkpCi0gICAgICB0b3RhbF9wZXJjZW4gPSAodG90YWxfdHJhbnNmZXIqMTAwKSAvIHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyOwotCiAgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAotICAgICAgICAgICAgIlxyIgotICAgICAgICAgICAgIiUzIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIgJXMgICIKLSAgICAgICAgICAgICIlMyIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiICVzICAiCi0gICAgICAgICAgICAiJTMiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiAlcyAgJXMgICVzICVzICVzICVzICVzIiwKLSAgICAgICAgICAgIHRvdGFsX3BlcmNlbiwgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0b3RhbCAlICovCi0gICAgICAgICAgICBtYXg1ZGF0YSh0b3RhbF9leHBlY3RlZF90cmFuc2ZlciwgbWF4NVsyXSksICAgLyogdG90YWwgc2l6ZSAqLwotICAgICAgICAgICAgZGxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHJjdmQgJSAqLwotICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCwgbWF4NVswXSksIC8qIHJjdmQgc2l6ZSAqLwotICAgICAgICAgICAgdWxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHhmZXIgJSAqLwotICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQsIG1heDVbMV0pLCAgIC8qIHhmZXIgc2l6ZSAqLwotICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCwgbWF4NVszXSksICAgIC8qIGF2cmcgZGwgc3BlZWQgKi8KLSAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQsIG1heDVbNF0pLCAgICAvKiBhdnJnIHVsIHNwZWVkICovCi0gICAgICAgICAgICB0aW1lX3RvdGFsLCAgICAvKiA4IGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdG90YWwgdGltZSAqLwotICAgICAgICAgICAgdGltZV9zcGVudCwgICAgLyogOCBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRpbWUgc3BlbnQgKi8KLSAgICAgICAgICAgIHRpbWVfbGVmdCwgICAgIC8qIDggbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0aW1lIGxlZnQgKi8KLSAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLmN1cnJlbnRfc3BlZWQsIG1heDVbNV0pCi0gICAgICApOworICAgICAgICAgICAgIiAgJSUgVG90YWwgICAgJSUgUmVjZWl2ZWQgJSUgWGZlcmQgIEF2ZXJhZ2UgU3BlZWQgICAiCisgICAgICAgICAgICAiVGltZSAgICBUaW1lICAgICBUaW1lICBDdXJyZW50XG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGxvYWQgIFVwbG9hZCAgICIKKyAgICAgICAgICAgICJUb3RhbCAgIFNwZW50ICAgIExlZnQgIFNwZWVkXG4iKTsKKyAgICBkYXRhLT5wcm9ncmVzcy5mbGFncyB8PSBQR1JTX0hFQURFUlNfT1VUOyAvKiBoZWFkZXJzIGFyZSBzaG93biAqLworICB9CiAKLSAgICAvKiB3ZSBmbHVzaCB0aGUgb3V0cHV0IHN0cmVhbSB0byBtYWtlIGl0IGFwcGVhciBhcyBzb29uIGFzIHBvc3NpYmxlICovCi0gICAgZmZsdXNoKGRhdGEtPnNldC5lcnIpOwotICB9IC8qIGRvbid0IHNob3cgbm93ICovCisgIC8qIEZpZ3VyZSBvdXQgdGhlIGVzdGltYXRlZCB0aW1lIG9mIGFycml2YWwgZm9yIHRoZSB1cGxvYWQgKi8KKyAgaWYoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKSAmJgorICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA+IENVUkxfT0ZGX1RfQygwKSkpIHsKKyAgICB1bGVzdGltYXRlID0gZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCAvIGRhdGEtPnByb2dyZXNzLnVsc3BlZWQ7CisKKyAgICBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKKyAgICAgIHVscGVyY2VuID0gZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQgLworICAgICAgICAoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bC9DVVJMX09GRl9UX0MoMTAwKSk7CisgICAgZWxzZSBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDApKQorICAgICAgdWxwZXJjZW4gPSAoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQqMTAwKSAvCisgICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfdWw7CisgIH0KKworICAvKiAuLi4gYW5kIHRoZSBkb3dubG9hZCAqLworICBpZigoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0RMX1NJWkVfS05PV04pICYmCisgICAgIChkYXRhLT5wcm9ncmVzcy5kbHNwZWVkID4gQ1VSTF9PRkZfVF9DKDApKSkgeworICAgIGRsZXN0aW1hdGUgPSBkYXRhLT5wcm9ncmVzcy5zaXplX2RsIC8gZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZDsKKworICAgIGlmKGRhdGEtPnByb2dyZXNzLnNpemVfZGwgPiBDVVJMX09GRl9UX0MoMTAwMDApKQorICAgICAgZGxwZXJjZW4gPSBkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkIC8KKyAgICAgICAgKGRhdGEtPnByb2dyZXNzLnNpemVfZGwvQ1VSTF9PRkZfVF9DKDEwMCkpOworICAgIGVsc2UgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbCA+IENVUkxfT0ZGX1RfQygwKSkKKyAgICAgIGRscGVyY2VuID0gKGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQqMTAwKSAvCisgICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfZGw7CisgIH0KKworICAvKiBOb3cgZmlndXJlIG91dCB3aGljaCBvZiB0aGVtIGlzIHNsb3dlciBhbmQgdXNlIHRoYXQgb25lIGZvciB0aGUKKyAgICAgdG90YWwgZXN0aW1hdGUhICovCisgIHRvdGFsX2VzdGltYXRlID0gdWxlc3RpbWF0ZT5kbGVzdGltYXRlP3VsZXN0aW1hdGU6ZGxlc3RpbWF0ZTsKKworICAvKiBjcmVhdGUgdGhlIHRocmVlIHRpbWUgc3RyaW5ncyAqLworICB0aW1lMnN0cih0aW1lX2xlZnQsIHRvdGFsX2VzdGltYXRlID4gMD8odG90YWxfZXN0aW1hdGUgLSB0aW1lc3BlbnQpOjApOworICB0aW1lMnN0cih0aW1lX3RvdGFsLCB0b3RhbF9lc3RpbWF0ZSk7CisgIHRpbWUyc3RyKHRpbWVfc3BlbnQsIHRpbWVzcGVudCk7CisKKyAgLyogR2V0IHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBleHBlY3RlZCB0byBnZXQgdHJhbnNmZXJyZWQgKi8KKyAgdG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPQorICAgICgoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX1VMX1NJWkVfS05PV04pPworICAgICBkYXRhLT5wcm9ncmVzcy5zaXplX3VsOmRhdGEtPnByb2dyZXNzLnVwbG9hZGVkKSsKKyAgICAoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19ETF9TSVpFX0tOT1dOKT8KKyAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbDpkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKTsKKworICAvKiBXZSBoYXZlIHRyYW5zZmVycmVkIHRoaXMgbXVjaCBzbyBmYXIgKi8KKyAgdG90YWxfdHJhbnNmZXIgPSBkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkICsgZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQ7CisKKyAgLyogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGRhdGEgdHJhbnNmZXJyZWQgc28gZmFyICovCisgIGlmKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKKyAgICB0b3RhbF9wZXJjZW4gPSB0b3RhbF90cmFuc2ZlciAvCisgICAgICAodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIvQ1VSTF9PRkZfVF9DKDEwMCkpOworICBlbHNlIGlmKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID4gQ1VSTF9PRkZfVF9DKDApKQorICAgIHRvdGFsX3BlcmNlbiA9ICh0b3RhbF90cmFuc2ZlcioxMDApIC8gdG90YWxfZXhwZWN0ZWRfdHJhbnNmZXI7CisKKyAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAorICAgICAgICAgICJcciIKKyAgICAgICAgICAiJTMiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiAlcyAgIgorICAgICAgICAgICIlMyIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiICVzICAiCisgICAgICAgICAgIiUzIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIgJXMgICVzICAlcyAlcyAlcyAlcyAlcyIsCisgICAgICAgICAgdG90YWxfcGVyY2VuLCAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRvdGFsICUgKi8KKyAgICAgICAgICBtYXg1ZGF0YSh0b3RhbF9leHBlY3RlZF90cmFuc2ZlciwgbWF4NVsyXSksICAgLyogdG90YWwgc2l6ZSAqLworICAgICAgICAgIGRscGVyY2VuLCAgICAgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiByY3ZkICUgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkLCBtYXg1WzBdKSwgLyogcmN2ZCBzaXplICovCisgICAgICAgICAgdWxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHhmZXIgJSAqLworICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkLCBtYXg1WzFdKSwgICAvKiB4ZmVyIHNpemUgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy5kbHNwZWVkLCBtYXg1WzNdKSwgICAgLyogYXZyZyBkbCBzcGVlZCAqLworICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQsIG1heDVbNF0pLCAgICAvKiBhdnJnIHVsIHNwZWVkICovCisgICAgICAgICAgdGltZV90b3RhbCwgICAgLyogOCBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRvdGFsIHRpbWUgKi8KKyAgICAgICAgICB0aW1lX3NwZW50LCAgICAvKiA4IGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdGltZSBzcGVudCAqLworICAgICAgICAgIHRpbWVfbGVmdCwgICAgIC8qIDggbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0aW1lIGxlZnQgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy5jdXJyZW50X3NwZWVkLCBtYXg1WzVdKQorICAgICk7CisKKyAgLyogd2UgZmx1c2ggdGhlIG91dHB1dCBzdHJlYW0gdG8gbWFrZSBpdCBhcHBlYXIgYXMgc29vbiBhcyBwb3NzaWJsZSAqLworICBmZmx1c2goZGF0YS0+c2V0LmVycik7CiB9CiAjZWxzZQogIC8qIHByb2dyZXNzIGJhciBkaXNhYmxlZCAqLwotI2RlZmluZSBwcm9ncmVzc19tZXRlcih4KQorI2RlZmluZSBwcm9ncmVzc19tZXRlcih4KSBDdXJsX25vcF9zdG10CiAjZW5kaWYKIAogCkBAIC01ODMsNiArNTgxLDggQEAKIGludCBDdXJsX3BncnNVcGRhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGN1cmx0aW1lIG5vdyA9IEN1cmxfbm93KCk7IC8qIHdoYXQgdGltZSBpcyBpdCAqLworICBib29sIHNob3dwcm9ncmVzcyA9IHByb2dyZXNzX2NhbGMoY29ubiwgbm93KTsKICAgaWYoIShkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfSElERSkpIHsKICAgICBpZihkYXRhLT5zZXQuZnhmZXJpbmZvKSB7CiAgICAgICBpbnQgcmVzdWx0OwpAQCAtNTk0LDExICs1OTQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQpOwogICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotICAgICAgaWYocmVzdWx0KQotICAgICAgICBmYWlsZihkYXRhLCAiQ2FsbGJhY2sgYWJvcnRlZCIpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIGlmKHJlc3VsdCAhPSBDVVJMX1BST0dSRVNTRlVOQ19DT05USU5VRSkgeworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgZmFpbGYoZGF0YSwgIkNhbGxiYWNrIGFib3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KICAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LmZwcm9ncmVzcykgeworICAgIGVsc2UgaWYoZGF0YS0+c2V0LmZwcm9ncmVzcykgewogICAgICAgaW50IHJlc3VsdDsKICAgICAgIC8qIFRoZSBvbGRlciBkZXByZWNhdGVkIGNhbGxiYWNrIGlzIHNldCwgY2FsbCB0aGF0ICovCiAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKQEAgLTYwOCwxMiArNjEwLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCk7CiAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7Ci0gICAgICBpZihyZXN1bHQpCi0gICAgICAgIGZhaWxmKGRhdGEsICJDYWxsYmFjayBhYm9ydGVkIik7Ci0gICAgICByZXR1cm4gcmVzdWx0OworICAgICAgaWYocmVzdWx0ICE9IENVUkxfUFJPR1JFU1NGVU5DX0NPTlRJTlVFKSB7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQ2FsbGJhY2sgYWJvcnRlZCIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQogICAgIH0KKworICAgIGlmKHNob3dwcm9ncmVzcykKKyAgICAgIHByb2dyZXNzX21ldGVyKGNvbm4pOwogICB9Ci0gIHByb2dyZXNzX21ldGVyKGNvbm4pOwogCiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcXVpYy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcXVpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlN2RmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9xdWljLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9RVUlDX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfUVVJQ19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBFTkFCTEVfUVVJQworI2lmZGVmIFVTRV9OR1RDUDIKKyNpbmNsdWRlICJ2cXVpYy9uZ3RjcDIuaCIKKyNlbmRpZgorI2lmZGVmIFVTRV9RVUlDSEUKKyNpbmNsdWRlICJ2cXVpYy9xdWljaGUuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorCisvKiBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIHNwZWNpZmljIGJhY2tlbmRzICovCitDVVJMY29kZSBDdXJsX3F1aWNfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgYWRkcmxlbik7CitDVVJMY29kZSBDdXJsX3F1aWNfaXNfY29ubmVjdGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCk7CitpbnQgQ3VybF9xdWljX3ZlcihjaGFyICpwLCBzaXplX3QgbGVuKTsKK0NVUkxjb2RlIEN1cmxfcXVpY19kb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3ZvaWQgQ3VybF9xdWljX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpOworYm9vbCBDdXJsX3F1aWNfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX3F1aWNfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCB0ZW1waW5kZXgpOworCisjZWxzZSAvKiBFTkFCTEVfUVVJQyAqLworI2RlZmluZSBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nKHgpCisjZGVmaW5lIEN1cmxfcXVpY19kb25lKHgseSkKKyNkZWZpbmUgQ3VybF9xdWljX2RhdGFfcGVuZGluZyh4KQorI2RlZmluZSBDdXJsX3F1aWNfZGlzY29ubmVjdCh4LHkpCisjZW5kaWYgLyogIUVOQUJMRV9RVUlDICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9RVUlDX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuYwppbmRleCA2ZWU0NWZlLi5jNDE1MDQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9yYW5kLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMDYsOCArMTA2LDcgQEAKICAqICdybmRwdHInIHBvaW50cyB0by4KICAqCiAgKiBJZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgVExTIHN1cHBvcnQgb3Igd2l0aCBhIFRMUyBiYWNrZW5kIHRoYXQgbGFja3MgYQotICogcHJvcGVyIHJhbmRvbSBBUEkgKEdza2l0LCBQb2xhclNTTCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZQotICogIndlYWsiIHJhbmRvbS4KKyAqIHByb3BlciByYW5kb20gQVBJIChHc2tpdCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZSAid2VhayIgcmFuZG9tLgogICoKICAqIFdoZW4gYnVpbHQgKndpdGgqIFRMUyBzdXBwb3J0IGFuZCBhIGJhY2tlbmQgdGhhdCBvZmZlcnMgc3Ryb25nIHJhbmRvbSwgaXQKICAqIHdpbGwgcmV0dXJuIGVycm9yIGlmIGl0IGNhbm5vdCBwcm92aWRlIHN0cm9uZyByYW5kb20gdmFsdWVzLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5oCmluZGV4IDVkZWIwNDEuLjNjOGUyYjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yYW5kLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDggKzI3LDcgQEAKICAqICdybmQnIHBvaW50cyB0by4KICAqCiAgKiBJZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgVExTIHN1cHBvcnQgb3Igd2l0aCBhIFRMUyBiYWNrZW5kIHRoYXQgbGFja3MgYQotICogcHJvcGVyIHJhbmRvbSBBUEkgKEdza2l0LCBQb2xhclNTTCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZQotICogIndlYWsiIHJhbmRvbS4KKyAqIHByb3BlciByYW5kb20gQVBJIChHc2tpdCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZSAid2VhayIgcmFuZG9tLgogICoKICAqIFdoZW4gYnVpbHQgKndpdGgqIFRMUyBzdXBwb3J0IGFuZCBhIGJhY2tlbmQgdGhhdCBvZmZlcnMgc3Ryb25nIHJhbmRvbSwgaXQKICAqIHdpbGwgcmV0dXJuIGVycm9yIGlmIGl0IGNhbm5vdCBwcm92aWRlIHN0cm9uZyByYW5kb20gdmFsdWVzLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjE3MGQzCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJyZW5hbWUuaCIKKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmICghZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpKSB8fCAgXAorICBkZWZpbmVkKFVTRV9BTFRTVkMpCisKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogcmV0dXJuIDAgb24gc3VjY2VzcywgMSBvbiBlcnJvciAqLworaW50IEN1cmxfcmVuYW1lKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCit7CisjaWZkZWYgV0lOMzIKKyAgLyogcmVuYW1lKCkgb24gV2luZG93cyBkb2Vzbid0IG92ZXJ3cml0ZSwgc28gd2UgY2FuJ3QgdXNlIGl0IGhlcmUuCisgICAgIE1vdmVGaWxlRXhBKCkgd2lsbCBvdmVyd3JpdGUgYW5kIGlzIHVzdWFsbHkgYXRvbWljLCBob3dldmVyIGl0IGZhaWxzCisgICAgIHdoZW4gdGhlcmUgYXJlIG9wZW4gaGFuZGxlcyB0byB0aGUgZmlsZS4gKi8KKyAgY29uc3QgaW50IG1heF93YWl0X21zID0gMTAwMDsKKyAgc3RydWN0IGN1cmx0aW1lIHN0YXJ0ID0gQ3VybF9ub3coKTsKKyAgZm9yKDs7KSB7CisgICAgdGltZWRpZmZfdCBkaWZmOworICAgIGlmKE1vdmVGaWxlRXhBKG9sZHBhdGgsIG5ld3BhdGgsIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcpKQorICAgICAgYnJlYWs7CisgICAgZGlmZiA9IEN1cmxfdGltZWRpZmYoQ3VybF9ub3coKSwgc3RhcnQpOworICAgIGlmKGRpZmYgPCAwIHx8IGRpZmYgPiBtYXhfd2FpdF9tcykKKyAgICAgIHJldHVybiAxOworICAgIFNsZWVwKDEpOworICB9CisjZWxzZQorICBpZihyZW5hbWUob2xkcGF0aCwgbmV3cGF0aCkpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ0MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9SRU5BTUVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9SRU5BTUVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBDdXJsX3JlbmFtZShjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1JFTkFNRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmMKaW5kZXggNzRjZjIzMi4uZGJkN2RjNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcnRzcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTIsMTAgKzUyLDcgQEAKIHN0YXRpYyBDVVJMY29kZSBydHNwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOwogc3RhdGljIENVUkxjb2RlIHJ0c3BfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogc3RhdGljIENVUkxjb2RlIHJ0c3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7Ci0KLXN0YXRpYyBpbnQgcnRzcF9nZXRzb2NrX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgcnRzcF9nZXRzb2NrX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogCiAvKgogICogUGFyc2UgYW5kIHdyaXRlIG91dCBhbnkgYXZhaWxhYmxlIFJUUCBkYXRhLgpAQCAtNzcsMTEgKzc0LDkgQEAKICAgIGludGVyZmFjZSBhbmQgdGhlbiB3ZSdyZSBhbHdheXMgX3NlbmRpbmdfIGEgcmVxdWVzdCBhbmQgdGh1cyB3ZSB3YWl0IGZvcgogICAgdGhlIHNpbmdsZSBzb2NrZXQgdG8gYmVjb21lIHdyaXRhYmxlIG9ubHkgKi8KIHN0YXRpYyBpbnQgcnRzcF9nZXRzb2NrX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7CiAgIC8qIHdyaXRlIG1vZGUgKi8KLSAgKHZvaWQpbnVtc29ja3M7IC8qIHVudXNlZCwgd2UgdHJ1c3QgaXQgdG8gYmUgYXQgbGVhc3QgMSAqLwogICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogICByZXR1cm4gR0VUU09DS19XUklURVNPQ0soMCk7CiB9CkBAIC0yMzgsNyArMjMzLDcgQEAKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIEN1cmxfUnRzcFJlcSBydHNwcmVxID0gZGF0YS0+c2V0LnJ0c3ByZXE7CiAgIHN0cnVjdCBSVFNQICpydHNwID0gZGF0YS0+cmVxLnByb3RvcDsKLSAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcjsKKyAgc3RydWN0IGR5bmJ1ZiByZXFfYnVmZmVyOwogICBjdXJsX29mZl90IHBvc3RzaXplID0gMDsgLyogZm9yIEFOTk9VTkNFIGFuZCBTRVRfUEFSQU1FVEVSICovCiAgIGN1cmxfb2ZmX3QgcHV0c2l6ZSA9IDA7IC8qIGZvciBBTk5PVU5DRSBhbmQgU0VUX1BBUkFNRVRFUiAqLwogCkBAIC0zMzgsMTIgKzMzMywxMiBAQAogICBpZihydHNwcmVxID09IFJUU1BSRVFfU0VUVVAgJiYgIXBfdHJhbnNwb3J0KSB7CiAgICAgLyogTmV3IFRyYW5zcG9ydDogc2V0dGluZz8gKi8KICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1RSQU5TUE9SVF0pIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucnRzcF90cmFuc3BvcnQpOworICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJ0c3BfdHJhbnNwb3J0KTsKIAotICAgICAgY29ubi0+YWxsb2NwdHIucnRzcF90cmFuc3BvcnQgPQorICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ydHNwX3RyYW5zcG9ydCA9CiAgICAgICAgIGFwcmludGYoIlRyYW5zcG9ydDogJXNcclxuIiwKICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1RSQU5TUE9SVF0pOwotICAgICAgaWYoIWNvbm4tPmFsbG9jcHRyLnJ0c3BfdHJhbnNwb3J0KQorICAgICAgaWYoIWRhdGEtPnN0YXRlLmFwdHIucnRzcF90cmFuc3BvcnQpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTM1Miw3ICszNDcsNyBAQAogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICB9CiAKLSAgICBwX3RyYW5zcG9ydCA9IGNvbm4tPmFsbG9jcHRyLnJ0c3BfdHJhbnNwb3J0OworICAgIHBfdHJhbnNwb3J0ID0gZGF0YS0+c3RhdGUuYXB0ci5ydHNwX3RyYW5zcG9ydDsKICAgfQogCiAgIC8qIEFjY2VwdCBIZWFkZXJzIGZvciBERVNDUklCRSByZXF1ZXN0cyAqLwpAQCAtMzY0LDE0ICszNTksMTQgQEAKICAgICAvKiBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyICovCiAgICAgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJBY2NlcHQtRW5jb2RpbmciKSAmJgogICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSkgewotICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpOwotICAgICAgY29ubi0+YWxsb2NwdHIuYWNjZXB0X2VuY29kaW5nID0KKyAgICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcpOworICAgICAgZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcgPQogICAgICAgICBhcHJpbnRmKCJBY2NlcHQtRW5jb2Rpbmc6ICVzXHJcbiIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSk7CiAKLSAgICAgIGlmKCFjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpCisgICAgICBpZighZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCi0gICAgICBwX2FjY2VwdF9lbmNvZGluZyA9IGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZzsKKyAgICAgIHBfYWNjZXB0X2VuY29kaW5nID0gZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2Rpbmc7CiAgICAgfQogICB9CiAKQEAgLTM3OSwxMyArMzc0LDEzIEBACiAgICAgIGl0IG1pZ2h0IGhhdmUgYmVlbiB1c2VkIGluIHRoZSBwcm94eSBjb25uZWN0LCBidXQgaWYgd2UgaGF2ZSBnb3QgYSBoZWFkZXIKICAgICAgd2l0aCB0aGUgdXNlci1hZ2VudCBzdHJpbmcgc3BlY2lmaWVkLCB3ZSBlcmFzZSB0aGUgcHJldmlvdXNseSBtYWRlIHN0cmluZwogICAgICBoZXJlLiAqLwotICBpZihDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiVXNlci1BZ2VudCIpICYmIGNvbm4tPmFsbG9jcHRyLnVhZ2VudCkgewotICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudWFnZW50KTsKLSAgICBjb25uLT5hbGxvY3B0ci51YWdlbnQgPSBOVUxMOworICBpZihDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiVXNlci1BZ2VudCIpICYmIGRhdGEtPnN0YXRlLmFwdHIudWFnZW50KSB7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQgPSBOVUxMOwogICB9CiAgIGVsc2UgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJVc2VyLUFnZW50IikgJiYKICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdKSB7Ci0gICAgcF91YWdlbnQgPSBjb25uLT5hbGxvY3B0ci51YWdlbnQ7CisgICAgcF91YWdlbnQgPSBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudDsKICAgfQogCiAgIC8qIHNldHVwIHRoZSBhdXRoZW50aWNhdGlvbiBoZWFkZXJzICovCkBAIC0zOTMsMTcgKzM4OCwxNyBAQAogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICBwX3Byb3h5dXNlcnB3ZCA9IGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZDsKLSAgcF91c2VycHdkID0gY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgcF9wcm94eXVzZXJwd2QgPSBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKKyAgcF91c2VycHdkID0gZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOwogCiAgIC8qIFJlZmVycmVyICovCi0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucmVmKTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJlZik7CiAgIGlmKGRhdGEtPmNoYW5nZS5yZWZlcmVyICYmICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiUmVmZXJlciIpKQotICAgIGNvbm4tPmFsbG9jcHRyLnJlZiA9IGFwcmludGYoIlJlZmVyZXI6ICVzXHJcbiIsIGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZiA9IGFwcmludGYoIlJlZmVyZXI6ICVzXHJcbiIsIGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKICAgZWxzZQotICAgIGNvbm4tPmFsbG9jcHRyLnJlZiA9IE5VTEw7CisgICAgZGF0YS0+c3RhdGUuYXB0ci5yZWYgPSBOVUxMOwogCi0gIHBfcmVmZXJyZXIgPSBjb25uLT5hbGxvY3B0ci5yZWY7CisgIHBfcmVmZXJyZXIgPSBkYXRhLT5zdGF0ZS5hcHRyLnJlZjsKIAogICAvKgogICAgKiBSYW5nZSBIZWFkZXIKQEAgLTQxNiw5ICs0MTEsOSBAQAogCiAgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgcmFuZ2Ugc2V0IGluIHRoZSBjdXN0b20gaGVhZGVycyAqLwogICAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiUmFuZ2UiKSAmJiBkYXRhLT5zdGF0ZS5yYW5nZSkgewotICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUpOwotICAgICAgY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lID0gYXByaW50ZigiUmFuZ2U6ICVzXHJcbiIsIGRhdGEtPnN0YXRlLnJhbmdlKTsKLSAgICAgIHBfcmFuZ2UgPSBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmU7CisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lKTsKKyAgICAgIGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lID0gYXByaW50ZigiUmFuZ2U6ICVzXHJcbiIsIGRhdGEtPnN0YXRlLnJhbmdlKTsKKyAgICAgIHBfcmFuZ2UgPSBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZTsKICAgICB9CiAgIH0KIApAQCAtNDM1LDE2ICs0MzAsMTMgQEAKICAgfQogCiAgIC8qIEluaXRpYWxpemUgYSBkeW5hbWljIHNlbmQgYnVmZmVyICovCi0gIHJlcV9idWZmZXIgPSBDdXJsX2FkZF9idWZmZXJfaW5pdCgpOwotCi0gIGlmKCFyZXFfYnVmZmVyKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBDdXJsX2R5bl9pbml0KCZyZXFfYnVmZmVyLCBEWU5fUlRTUF9SRVFfSEVBREVSKTsKIAogICByZXN1bHQgPQotICAgIEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAiJXMgJXMgUlRTUC8xLjBcclxuIiAvKiBSZXF1ZXN0IFN0cmVhbS1VUkkgUlRTUC8xLjAgKi8KLSAgICAgICAgICAgICAgICAgICAgICJDU2VxOiAlbGRcclxuIiwgLyogQ1NlcSAqLwotICAgICAgICAgICAgICAgICAgICAgcF9yZXF1ZXN0LCBwX3N0cmVhbV91cmksIHJ0c3AtPkNTZXFfc2VudCk7CisgICAgQ3VybF9keW5fYWRkZigmcmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICIlcyAlcyBSVFNQLzEuMFxyXG4iIC8qIFJlcXVlc3QgU3RyZWFtLVVSSSBSVFNQLzEuMCAqLworICAgICAgICAgICAgICAgICAgIkNTZXE6ICVsZFxyXG4iLCAvKiBDU2VxICovCisgICAgICAgICAgICAgICAgICBwX3JlcXVlc3QsIHBfc3RyZWFtX3VyaSwgcnRzcC0+Q1NlcV9zZW50KTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTQ1Myw3ICs0NDUsNyBAQAogICAgKiB0byBtYWtlIGNvbXBhcmlzb24gZWFzaWVyCiAgICAqLwogICBpZihwX3Nlc3Npb25faWQpIHsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLCAiU2Vzc2lvbjogJXNcclxuIiwgcF9zZXNzaW9uX2lkKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXFfYnVmZmVyLCAiU2Vzc2lvbjogJXNcclxuIiwgcF9zZXNzaW9uX2lkKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CkBAIC00NjEsNDIgKzQ1Myw0MiBAQAogICAvKgogICAgKiBTaGFyZWQgSFRUUC1saWtlIG9wdGlvbnMKICAgICovCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB0cmFuc3BvcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiByYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmVmZXJyZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHVzZXItYWdlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHByb3h5dXNlcnB3ZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogdXNlcnB3ZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3RyYW5zcG9ydCA/IHBfdHJhbnNwb3J0IDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9hY2NlcHQgPyBwX2FjY2VwdCA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYWNjZXB0X2VuY29kaW5nID8gcF9hY2NlcHRfZW5jb2RpbmcgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3JhbmdlID8gcF9yYW5nZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfcmVmZXJyZXIgPyBwX3JlZmVycmVyIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcF91YWdlbnQgPyBwX3VhZ2VudCA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfcHJveHl1c2VycHdkID8gcF9wcm94eXVzZXJwd2QgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3VzZXJwd2QgPyBwX3VzZXJwd2QgOiAiIik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnJlcV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB0cmFuc3BvcnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiByYW5nZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmVmZXJyZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHVzZXItYWdlbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHByb3h5dXNlcnB3ZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogdXNlcnB3ZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwX3RyYW5zcG9ydCA/IHBfdHJhbnNwb3J0IDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcF9hY2NlcHQgPyBwX2FjY2VwdCA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBfYWNjZXB0X2VuY29kaW5nID8gcF9hY2NlcHRfZW5jb2RpbmcgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwX3JhbmdlID8gcF9yYW5nZSA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBfcmVmZXJyZXIgPyBwX3JlZmVycmVyIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcF91YWdlbnQgPyBwX3VhZ2VudCA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBfcHJveHl1c2VycHdkID8gcF9wcm94eXVzZXJwd2QgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwX3VzZXJwd2QgPyBwX3VzZXJwd2QgOiAiIik7CiAKICAgLyoKICAgICogRnJlZSB1c2VycHdkIG5vdyAtLS0gY2Fubm90IHJldXNlIHRoaXMgZm9yIE5lZ290aWF0ZSBhbmQgcG9zc2libHkgTlRMTQogICAgKiB3aXRoIGJhc2ljIGFuZCBkaWdlc3QsIGl0IHdpbGwgYmUgZnJlZWQgYW55d2F5IGJ5IHRoZSBuZXh0IHJlcXVlc3QKICAgICovCi0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudXNlcnB3ZCk7Ci0gIGNvbm4tPmFsbG9jcHRyLnVzZXJwd2QgPSBOVUxMOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgIGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCA9IE5VTEw7CiAKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKICAgaWYoKHJ0c3ByZXEgPT0gUlRTUFJFUV9TRVRVUCkgfHwgKHJ0c3ByZXEgPT0gUlRTUFJFUV9ERVNDUklCRSkpIHsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGRhdGEsIHJlcV9idWZmZXIpOworICAgIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oY29ubiwgJnJlcV9idWZmZXIpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICByZXN1bHQgPSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhjb25uLCBGQUxTRSwgcmVxX2J1ZmZlcik7CisgIHJlc3VsdCA9IEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKGNvbm4sIEZBTFNFLCAmcmVxX2J1ZmZlcik7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC01MDYsMTQgKzQ5OCwxNCBAQAogCiAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgewogICAgICAgcHV0c2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7Ci0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfUFVUOworICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfUFVUOwogCiAgICAgfQogICAgIGVsc2UgewogICAgICAgcG9zdHNpemUgPSAoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSk/CiAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemU6CiAgICAgICAgIChkYXRhLT5zZXQucG9zdGZpZWxkcz8gKGN1cmxfb2ZmX3Qpc3RybGVuKGRhdGEtPnNldC5wb3N0ZmllbGRzKTowKTsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfUE9TVDsKICAgICB9CiAKICAgICBpZihwdXRzaXplID4gMCB8fCBwb3N0c2l6ZSA+IDApIHsKQEAgLTUyMSw5ICs1MTMsOSBAQAogICAgICAgICogYWN0dWFsbHkgc2V0IGEgY3VzdG9tIENvbnRlbnQtTGVuZ3RoIGluIHRoZSBoZWFkZXJzICovCiAgICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtTGVuZ3RoIikpIHsKICAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UIlxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC51cGxvYWQgPyBwdXRzaXplIDogcG9zdHNpemUpKTsKKyAgICAgICAgICBDdXJsX2R5bl9hZGRmKCZyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UIlxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC51cGxvYWQgPyBwdXRzaXplIDogcG9zdHNpemUpKTsKICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICB9CkBAIC01MzEsOCArNTIzLDggQEAKICAgICAgIGlmKHJ0c3ByZXEgPT0gUlRTUFJFUV9TRVRfUEFSQU1FVEVSIHx8CiAgICAgICAgICBydHNwcmVxID09IFJUU1BSRVFfR0VUX1BBUkFNRVRFUikgewogICAgICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtVHlwZSIpKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGFyYW1ldGVyc1xyXG4iKTsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wYXJhbWV0ZXJzXHJcbiIpOwogICAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTU0MCw4ICs1MzIsOCBAQAogCiAgICAgICBpZihydHNwcmVxID09IFJUU1BSRVFfQU5OT1VOQ0UpIHsKICAgICAgICAgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJDb250ZW50LVR5cGUiKSkgewotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9zZHBcclxuIik7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZigmcmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NkcFxyXG4iKTsKICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC01NTEsNyArNTQzLDcgQEAKICAgICB9CiAgICAgZWxzZSBpZihydHNwcmVxID09IFJUU1BSRVFfR0VUX1BBUkFNRVRFUikgewogICAgICAgLyogQ2hlY2sgZm9yIGFuIGVtcHR5IEdFVF9QQVJBTUVURVIgKGhlYXJ0YmVhdCkgcmVxdWVzdCAqLwotICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0hFQUQ7CisgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxID0gSFRUUFJFUV9IRUFEOwogICAgICAgZGF0YS0+c2V0Lm9wdF9ub19ib2R5ID0gVFJVRTsKICAgICB9CiAgIH0KQEAgLTU1OSwyMCArNTUxLDIwIEBACiAgIC8qIFJUU1AgbmV2ZXIgYWxsb3dzIGNodW5rZWQgdHJhbnNmZXIgKi8KICAgZGF0YS0+cmVxLmZvcmJpZGNodW5rID0gVFJVRTsKICAgLyogRmluaXNoIHRoZSByZXF1ZXN0IGJ1ZmZlciAqLwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxX2J1ZmZlciwgIlxyXG4iKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKICAgaWYocG9zdHNpemUgPiAwKSB7Ci0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClwb3N0c2l6ZSk7CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmcmVxX2J1ZmZlciwgZGF0YS0+c2V0LnBvc3RmaWVsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KXBvc3RzaXplKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgLyogaXNzdWUgdGhlIHJlcXVlc3QgKi8KLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICByZXN1bHQgPSBDdXJsX2J1ZmZlcl9zZW5kKCZyZXFfYnVmZmVyLCBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOwogICBpZihyZXN1bHQpIHsKICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgUlRTUCByZXF1ZXN0Iik7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuaAppbmRleCAyZjljYzMyLi4xYWFlODY0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcnRzcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWN1cml0eS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VjdXJpdHkuYwppbmRleCA3Njk1MTU0Li4zYjljMjBhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWN1cml0eS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlY3VyaXR5LmMKQEAgLTcsNyArNyw3IEBACiAgKiByZXdyaXRlIHRvIHdvcmsgYXJvdW5kIHRoZSBwYXJhZ3JhcGggMiBpbiB0aGUgQlNEIGxpY2Vuc2VzIGFzIGV4cGxhaW5lZAogICogYmVsb3cuCiAgKgotICogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5LCAyMDE3IEt1bmdsaWdhIFRla25pc2thIEjDtmdza29sYW4KKyAqIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAxNyBLdW5nbGlnYSBUZWtuaXNrYSBIw4PCtmdza29sYW4KICAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCkBAIC0xOTEsNyArMTkxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtyYjVidWZmZXIgKmJ1ZikKIHsKICAgaW50IGxlbjsKLSAgdm9pZCAqdG1wID0gTlVMTDsKICAgQ1VSTGNvZGUgcmVzdWx0OwogCiAgIHJlc3VsdCA9IHNvY2tldF9yZWFkKGZkLCAmbGVuLCBzaXplb2YobGVuKSk7CkBAIC0yMDEsMTIgKzIwMCwxMSBAQAogICBpZihsZW4pIHsKICAgICAvKiBvbmx5IHJlYWxsb2MgaWYgdGhlcmUgd2FzIGEgbGVuZ3RoICovCiAgICAgbGVuID0gbnRvaGwobGVuKTsKLSAgICB0bXAgPSBDdXJsX3NhZmVyZWFsbG9jKGJ1Zi0+ZGF0YSwgbGVuKTsKKyAgICBidWYtPmRhdGEgPSBDdXJsX3NhZmVyZWFsbG9jKGJ1Zi0+ZGF0YSwgbGVuKTsKICAgfQotICBpZih0bXAgPT0gTlVMTCkKKyAgaWYoIWxlbiB8fCAhYnVmLT5kYXRhKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCi0gIGJ1Zi0+ZGF0YSA9IHRtcDsKICAgcmVzdWx0ID0gc29ja2V0X3JlYWQoZmQsIGJ1Zi0+ZGF0YSwgbGVuKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMzgsNyArMjM2LDcgQEAKIAogICAvKiBIYW5kbGUgY2xlYXIgdGV4dCByZXNwb25zZS4gKi8KICAgaWYoY29ubi0+c2VjX2NvbXBsZXRlID09IDAgfHwgY29ubi0+ZGF0YV9wcm90ID09IFBST1RfQ0xFQVIpCi0gICAgICByZXR1cm4gcmVhZChmZCwgYnVmZmVyLCBsZW4pOworICAgICAgcmV0dXJuIHNyZWFkKGZkLCBidWZmZXIsIGxlbik7CiAKICAgaWYoY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnKSB7CiAgICAgY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnID0gMDsKQEAgLTI2Nyw3ICsyNjUsNyBAQAogfQogCiAvKiBTZW5kIHxsZW5ndGh8IGJ5dGVzIGZyb20gfGZyb218IHRvIHRoZSB8ZmR8IHNvY2tldCB0YWtpbmcgY2FyZSBvZiBlbmNvZGluZwotICAgYW5kIG5lZ29jaWF0aW5nIHdpdGggdGhlIHNlcnZlci4gfGZyb218IGNhbiBiZSBOVUxMLiAqLworICAgYW5kIG5lZ290aWF0aW5nIHdpdGggdGhlIHNlcnZlci4gfGZyb218IGNhbiBiZSBOVUxMLiAqLwogc3RhdGljIHZvaWQgZG9fc2VjX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IGZkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnJvbSwgaW50IGxlbmd0aCkKIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbGVjdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmMKaW5kZXggNmU3Mzg5MC4uNjgzMmI0MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIyLDggKzIyLDEyIEBACiAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1VOSVNURF9IKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChIQVZFX1NFTEVDVCkgJiYgIWRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpCkBAIC00OCwxNCArNTIsOSBAQAogI2luY2x1ZGUgInVybGRhdGEuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAKLS8qIENvbnZlbmllbmNlIGxvY2FsIG1hY3JvcyAqLwotI2RlZmluZSBFTEFQU0VEX01TKCkgKGludClDdXJsX3RpbWVkaWZmKEN1cmxfbm93KCksIGluaXRpYWxfdHYpCi0KLWludCBDdXJsX2Fja19laW50ciA9IDA7Ci0jZGVmaW5lIEVSUk9SX05PVF9FSU5UUihlcnJvcikgKEN1cmxfYWNrX2VpbnRyIHx8IGVycm9yICE9IEVJTlRSKQotCiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3Igd2FpdGluZyBhIHNwZWNpZmljIGFtb3VudCBvZiBtcwogICogaW4gQ3VybF9zb2NrZXRfY2hlY2soKSBhbmQgQ3VybF9wb2xsKCkgd2hlbiBubyBmaWxlIGRlc2NyaXB0b3IKQEAgLTcyLDE1ICs3MSw4IEBACiAgKiAgIC0xID0gc3lzdGVtIGNhbGwgZXJyb3IsIGludmFsaWQgdGltZW91dCB2YWx1ZSwgb3IgaW50ZXJydXB0ZWQKICAqICAgIDAgPSBzcGVjaWZpZWQgdGltZW91dCBoYXMgZWxhcHNlZAogICovCi1pbnQgQ3VybF93YWl0X21zKGludCB0aW1lb3V0X21zKQoraW50IEN1cmxfd2FpdF9tcyh0aW1lZGlmZl90IHRpbWVvdXRfbXMpCiB7Ci0jaWYgIWRlZmluZWQoTVNET1MpICYmICFkZWZpbmVkKFVTRV9XSU5TT0NLKQotI2lmbmRlZiBIQVZFX1BPTExfRklORQotICBzdHJ1Y3QgdGltZXZhbCBwZW5kaW5nX3R2OwotI2VuZGlmCi0gIHN0cnVjdCBjdXJsdGltZSBpbml0aWFsX3R2OwotICBpbnQgcGVuZGluZ19tczsKLSNlbmRpZgogICBpbnQgciA9IDA7CiAKICAgaWYoIXRpbWVvdXRfbXMpCkBAIC05MSwzMSArODMsNDcgQEAKICAgfQogI2lmIGRlZmluZWQoTVNET1MpCiAgIGRlbGF5KHRpbWVvdXRfbXMpOwotI2VsaWYgZGVmaW5lZChVU0VfV0lOU09DSykKLSAgU2xlZXAodGltZW91dF9tcyk7CisjZWxpZiBkZWZpbmVkKFdJTjMyKQorICAvKiBwcmV2ZW50IG92ZXJmbG93LCB0aW1lb3V0X21zIGlzIHR5cGVjYXN0IHRvIFVMT05HL0RXT1JELiAqLworI2lmIFRJTUVESUZGX1RfTUFYID49IFVMT05HX01BWAorICBpZih0aW1lb3V0X21zID49IFVMT05HX01BWCkKKyAgICB0aW1lb3V0X21zID0gVUxPTkdfTUFYLTE7CisgICAgLyogZG9uJ3QgdXNlIFVMT05HX01BWCwgYmVjYXVzZSB0aGF0IGlzIGVxdWFsIHRvIElORklOSVRFICovCisjZW5kaWYKKyAgU2xlZXAoKFVMT05HKXRpbWVvdXRfbXMpOwogI2Vsc2UKLSAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXM7Ci0gIGluaXRpYWxfdHYgPSBDdXJsX25vdygpOwotICBkbyB7Ci0gICAgaW50IGVycm9yOwogI2lmIGRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpCi0gICAgciA9IHBvbGwoTlVMTCwgMCwgcGVuZGluZ19tcyk7CisgIC8qIHByZXZlbnQgb3ZlcmZsb3csIHRpbWVvdXRfbXMgaXMgdHlwZWNhc3QgdG8gaW50LiAqLworI2lmIFRJTUVESUZGX1RfTUFYID4gSU5UX01BWAorICBpZih0aW1lb3V0X21zID4gSU5UX01BWCkKKyAgICB0aW1lb3V0X21zID0gSU5UX01BWDsKKyNlbmRpZgorICByID0gcG9sbChOVUxMLCAwLCAoaW50KXRpbWVvdXRfbXMpOwogI2Vsc2UKLSAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOwotICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChwZW5kaW5nX21zICUgMTAwMCkgKiAxMDAwOworICB7CisgICAgc3RydWN0IHRpbWV2YWwgcGVuZGluZ190djsKKyAgICB0aW1lZGlmZl90IHR2X3NlYyA9IHRpbWVvdXRfbXMgLyAxMDAwOworICAgIHRpbWVkaWZmX3QgdHZfdXNlYyA9ICh0aW1lb3V0X21zICUgMTAwMCkgKiAxMDAwOyAvKiBtYXg9OTk5OTk5ICovCisjaWZkZWYgSEFWRV9TVVNFQ09ORFNfVAorI2lmIFRJTUVESUZGX1RfTUFYID4gVElNRV9UX01BWAorICAgIC8qIHR2X3NlYyBvdmVyZmxvdyBjaGVjayBpbiBjYXNlIHRpbWVfdCBpcyBzaWduZWQgKi8KKyAgICBpZih0dl9zZWMgPiBUSU1FX1RfTUFYKQorICAgICAgdHZfc2VjID0gVElNRV9UX01BWDsKKyNlbmRpZgorICAgIHBlbmRpbmdfdHYudHZfc2VjID0gKHRpbWVfdCl0dl9zZWM7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKHN1c2Vjb25kc190KXR2X3VzZWM7CisjZWxzZQorI2lmIFRJTUVESUZGX1RfTUFYID4gSU5UX01BWAorICAgIC8qIHR2X3NlYyBvdmVyZmxvdyBjaGVjayBpbiBjYXNlIHRpbWVfdCBpcyBzaWduZWQgKi8KKyAgICBpZih0dl9zZWMgPiBJTlRfTUFYKQorICAgICAgdHZfc2VjID0gSU5UX01BWDsKKyNlbmRpZgorICAgIHBlbmRpbmdfdHYudHZfc2VjID0gKGludCl0dl9zZWM7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKGludCl0dl91c2VjOworI2VuZGlmCiAgICAgciA9IHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmcGVuZGluZ190dik7CisgIH0KICNlbmRpZiAvKiBIQVZFX1BPTExfRklORSAqLwotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCk7Ci0gICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICByID0gMDsgIC8qIFNpbXVsYXRlIGEgImNhbGwgdGltZWQgb3V0IiBjYXNlICovCi0gICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUociA9PSAtMSk7CiAjZW5kaWYgLyogVVNFX1dJTlNPQ0sgKi8KICAgaWYocikKICAgICByID0gLTE7CkBAIC0xMjMsNiArMTMxLDk4IEBACiB9CiAKIC8qCisgKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgc2VsZWN0KCkgdG8gYWlkIGluIFdpbmRvd3MgY29tcGF0aWJpbGl0eS4KKyAqIEEgbmVnYXRpdmUgdGltZW91dCB2YWx1ZSBtYWtlcyB0aGlzIGZ1bmN0aW9uIHdhaXQgaW5kZWZpbml0ZWx5LAorICogdW5sZXNzIG5vIHZhbGlkIGZpbGUgZGVzY3JpcHRvciBpcyBnaXZlbiwgd2hlbiB0aGlzIGhhcHBlbnMgdGhlCisgKiBuZWdhdGl2ZSB0aW1lb3V0IGlzIGlnbm9yZWQgYW5kIHRoZSBmdW5jdGlvbiB0aW1lcyBvdXQgaW1tZWRpYXRlbHkuCisgKgorICogUmV0dXJuIHZhbHVlczoKKyAqICAgLTEgPSBzeXN0ZW0gY2FsbCBlcnJvciBvciBmZCA+PSBGRF9TRVRTSVpFCisgKiAgICAwID0gdGltZW91dAorICogICAgTiA9IG51bWJlciBvZiBzaWduYWxsZWQgZmlsZSBkZXNjcmlwdG9ycworICovCitpbnQgQ3VybF9zZWxlY3QoY3VybF9zb2NrZXRfdCBtYXhmZCwgICAvKiBoaWdoZXN0IHNvY2tldCBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICBmZF9zZXQgKmZkc19yZWFkLCAgICAgIC8qIHNvY2tldHMgcmVhZHkgZm9yIHJlYWRpbmcgKi8KKyAgICAgICAgICAgICAgICBmZF9zZXQgKmZkc193cml0ZSwgICAgIC8qIHNvY2tldHMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKyAgICAgICAgICAgICAgICBmZF9zZXQgKmZkc19lcnIsICAgICAgIC8qIHNvY2tldHMgd2l0aCBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMpIC8qIG1pbGxpc2Vjb25kcyB0byB3YWl0ICovCit7CisgIHN0cnVjdCB0aW1ldmFsIHBlbmRpbmdfdHY7CisgIHN0cnVjdCB0aW1ldmFsICpwdGltZW91dDsKKyAgaW50IHI7CisKKyNpZmRlZiBVU0VfV0lOU09DSworICAvKiBXaW5Tb2NrIHNlbGVjdCgpIGNhbid0IGhhbmRsZSB6ZXJvIGV2ZW50cy4gIFNlZSB0aGUgY29tbWVudCBiZWxvdy4gKi8KKyAgaWYoKCFmZHNfcmVhZCB8fCBmZHNfcmVhZC0+ZmRfY291bnQgPT0gMCkgJiYKKyAgICAgKCFmZHNfd3JpdGUgfHwgZmRzX3dyaXRlLT5mZF9jb3VudCA9PSAwKSAmJgorICAgICAoIWZkc19lcnIgfHwgZmRzX2Vyci0+ZmRfY291bnQgPT0gMCkpIHsKKyAgICByID0gQ3VybF93YWl0X21zKHRpbWVvdXRfbXMpOworICAgIHJldHVybiByOworICB9CisjZW5kaWYKKworICBwdGltZW91dCA9ICZwZW5kaW5nX3R2OworICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgIHB0aW1lb3V0ID0gTlVMTDsKKyAgfQorICBlbHNlIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgdGltZWRpZmZfdCB0dl9zZWMgPSB0aW1lb3V0X21zIC8gMTAwMDsKKyAgICB0aW1lZGlmZl90IHR2X3VzZWMgPSAodGltZW91dF9tcyAlIDEwMDApICogMTAwMDsgLyogbWF4PTk5OTk5OSAqLworI2lmZGVmIEhBVkVfU1VTRUNPTkRTX1QKKyNpZiBUSU1FRElGRl9UX01BWCA+IFRJTUVfVF9NQVgKKyAgICAvKiB0dl9zZWMgb3ZlcmZsb3cgY2hlY2sgaW4gY2FzZSB0aW1lX3QgaXMgc2lnbmVkICovCisgICAgaWYodHZfc2VjID4gVElNRV9UX01BWCkKKyAgICAgIHR2X3NlYyA9IFRJTUVfVF9NQVg7CisjZW5kaWYKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9ICh0aW1lX3QpdHZfc2VjOworICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChzdXNlY29uZHNfdCl0dl91c2VjOworI2VsaWYgZGVmaW5lZChXSU4zMikgLyogbWF5YmUgYWxzbyBvdGhlcnMgaW4gdGhlIGZ1dHVyZSAqLworI2lmIFRJTUVESUZGX1RfTUFYID4gTE9OR19NQVgKKyAgICAvKiB0dl9zZWMgb3ZlcmZsb3cgY2hlY2sgb24gV2luZG93cyB0aGVyZSB3ZSBrbm93IGl0IGlzIGxvbmcgKi8KKyAgICBpZih0dl9zZWMgPiBMT05HX01BWCkKKyAgICAgIHR2X3NlYyA9IExPTkdfTUFYOworI2VuZGlmCisgICAgcGVuZGluZ190di50dl9zZWMgPSAobG9uZyl0dl9zZWM7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKGxvbmcpdHZfdXNlYzsKKyNlbHNlCisjaWYgVElNRURJRkZfVF9NQVggPiBJTlRfTUFYCisgICAgLyogdHZfc2VjIG92ZXJmbG93IGNoZWNrIGluIGNhc2UgdGltZV90IGlzIHNpZ25lZCAqLworICAgIGlmKHR2X3NlYyA+IElOVF9NQVgpCisgICAgICB0dl9zZWMgPSBJTlRfTUFYOworI2VuZGlmCisgICAgcGVuZGluZ190di50dl9zZWMgPSAoaW50KXR2X3NlYzsKKyAgICBwZW5kaW5nX3R2LnR2X3VzZWMgPSAoaW50KXR2X3VzZWM7CisjZW5kaWYKKyAgfQorICBlbHNlIHsKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IDA7CisgICAgcGVuZGluZ190di50dl91c2VjID0gMDsKKyAgfQorCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgLyogV2luU29jayBzZWxlY3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBmZF9zZXQgdGhhdCBjb250YWlucyB6ZXJvCisgICAgZmQgZmxhZ3MsIG9yIGl0IHdpbGwgcmV0dXJuIFdTQUVJTlZBTC4gIEJ1dCwgaXQgYWxzbyBjYW4ndCBiZSBjYWxsZWQKKyAgICB3aXRoIG5vIGZkX3NldHMgYXQgYWxsISAgRnJvbSB0aGUgZG9jdW1lbnRhdGlvbjoKKworICAgIEFueSB0d28gb2YgdGhlIHBhcmFtZXRlcnMsIHJlYWRmZHMsIHdyaXRlZmRzLCBvciBleGNlcHRmZHMsIGNhbiBiZQorICAgIGdpdmVuIGFzIG51bGwuIEF0IGxlYXN0IG9uZSBtdXN0IGJlIG5vbi1udWxsLCBhbmQgYW55IG5vbi1udWxsCisgICAgZGVzY3JpcHRvciBzZXQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBoYW5kbGUgdG8gYSBzb2NrZXQuCisKKyAgICBJdCBpcyB1bmNsZWFyIHdoeSBXaW5Tb2NrIGRvZXNuJ3QganVzdCBoYW5kbGUgdGhpcyBmb3IgdXMgaW5zdGVhZCBvZgorICAgIGNhbGxpbmcgdGhpcyBhbiBlcnJvci4KKyAgKi8KKyAgciA9IHNlbGVjdCgoaW50KW1heGZkICsgMSwKKyAgICAgICAgICAgICBmZHNfcmVhZCAmJiBmZHNfcmVhZC0+ZmRfY291bnQgPyBmZHNfcmVhZCA6IE5VTEwsCisgICAgICAgICAgICAgZmRzX3dyaXRlICYmIGZkc193cml0ZS0+ZmRfY291bnQgPyBmZHNfd3JpdGUgOiBOVUxMLAorICAgICAgICAgICAgIGZkc19lcnIgJiYgZmRzX2Vyci0+ZmRfY291bnQgPyBmZHNfZXJyIDogTlVMTCwgcHRpbWVvdXQpOworI2Vsc2UKKyAgciA9IHNlbGVjdCgoaW50KW1heGZkICsgMSwgZmRzX3JlYWQsIGZkc193cml0ZSwgZmRzX2VyciwgcHRpbWVvdXQpOworI2VuZGlmCisKKyAgcmV0dXJuIHI7Cit9CisKKy8qCiAgKiBXYWl0IGZvciByZWFkIG9yIHdyaXRlIGV2ZW50cyBvbiBhIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzLiBJdCB1c2VzIHBvbGwoKQogICogd2hlbiBhIGZpbmUgcG9sbCgpIGlzIGF2YWlsYWJsZSwgaW4gb3JkZXIgdG8gYXZvaWQgbGltaXRzIHdpdGggRkRfU0VUU0laRSwKICAqIG90aGVyd2lzZSBzZWxlY3QoKSBpcyB1c2VkLiAgQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgc2VsZWN0KCkgaXMgYmVpbmcgdXNlZApAQCAtMTQ1LDM0ICsyNDUsMjQgQEAKIGludCBDdXJsX3NvY2tldF9jaGVjayhjdXJsX3NvY2tldF90IHJlYWRmZDAsIC8qIHR3byBzb2NrZXRzIHRvIHJlYWQgZnJvbSAqLwogICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkMSwKICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHdyaXRlZmQsIC8qIHNvY2tldCB0byB3cml0ZSB0byAqLwotICAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0aW1lb3V0X21zKSAgICAgLyogbWlsbGlzZWNvbmRzIHRvIHdhaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMpIC8qIG1pbGxpc2Vjb25kcyB0byB3YWl0ICovCiB7CiAjaWZkZWYgSEFWRV9QT0xMX0ZJTkUKICAgc3RydWN0IHBvbGxmZCBwZmRbM107CiAgIGludCBudW07CiAjZWxzZQotICBzdHJ1Y3QgdGltZXZhbCBwZW5kaW5nX3R2OwotICBzdHJ1Y3QgdGltZXZhbCAqcHRpbWVvdXQ7CiAgIGZkX3NldCBmZHNfcmVhZDsKICAgZmRfc2V0IGZkc193cml0ZTsKICAgZmRfc2V0IGZkc19lcnI7CiAgIGN1cmxfc29ja2V0X3QgbWF4ZmQ7CiAjZW5kaWYKLSAgc3RydWN0IGN1cmx0aW1lIGluaXRpYWxfdHYgPSB7MCwgMH07Ci0gIGludCBwZW5kaW5nX21zID0gMDsKICAgaW50IHI7CiAgIGludCByZXQ7CiAKLSNpZiBTSVpFT0ZfVElNRV9UICE9IFNJWkVPRl9JTlQKLSAgLyogd3JhcC1hcm91bmQgcHJlY2F1dGlvbiAqLwotICBpZih0aW1lb3V0X21zID49IElOVF9NQVgpCi0gICAgdGltZW91dF9tcyA9IElOVF9NQVg7Ci0jZW5kaWYKLQogICBpZigocmVhZGZkMCA9PSBDVVJMX1NPQ0tFVF9CQUQpICYmIChyZWFkZmQxID09IENVUkxfU09DS0VUX0JBRCkgJiYKICAgICAgKHdyaXRlZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKSkgewogICAgIC8qIG5vIHNvY2tldHMsIGp1c3Qgd2FpdCAqLwotICAgIHIgPSBDdXJsX3dhaXRfbXMoKGludCl0aW1lb3V0X21zKTsKKyAgICByID0gQ3VybF93YWl0X21zKHRpbWVvdXRfbXMpOwogICAgIHJldHVybiByOwogICB9CiAKQEAgLTE4MSwxMSArMjcxLDYgQEAKICAgICAgd2hlbiBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHplcm8gdGltZW91dCBvciBhIG5lZ2F0aXZlIHRpbWVvdXQKICAgICAgdmFsdWUgaW5kaWNhdGluZyBhIGJsb2NraW5nIGNhbGwgc2hvdWxkIGJlIHBlcmZvcm1lZC4gKi8KIAotICBpZih0aW1lb3V0X21zID4gMCkgewotICAgIHBlbmRpbmdfbXMgPSAoaW50KXRpbWVvdXRfbXM7Ci0gICAgaW5pdGlhbF90diA9IEN1cmxfbm93KCk7Ci0gIH0KLQogI2lmZGVmIEhBVkVfUE9MTF9GSU5FCiAKICAgbnVtID0gMDsKQEAgLTIwOCwzMSArMjkzLDkgQEAKICAgICBudW0rKzsKICAgfQogCi0gIGRvIHsKLSAgICBpbnQgZXJyb3I7Ci0gICAgaWYodGltZW91dF9tcyA8IDApCi0gICAgICBwZW5kaW5nX21zID0gLTE7Ci0gICAgZWxzZSBpZighdGltZW91dF9tcykKLSAgICAgIHBlbmRpbmdfbXMgPSAwOwotICAgIHIgPSBwb2xsKHBmZCwgbnVtLCBwZW5kaW5nX21zKTsKLSAgICBpZihyICE9IC0xKQotICAgICAgYnJlYWs7Ci0gICAgZXJyb3IgPSBTT0NLRVJSTk87Ci0gICAgaWYoZXJyb3IgJiYgRVJST1JfTk9UX0VJTlRSKGVycm9yKSkKLSAgICAgIGJyZWFrOwotICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX21zID0gKGludCkodGltZW91dF9tcyAtIEVMQVBTRURfTVMoKSk7Ci0gICAgICBpZihwZW5kaW5nX21zIDw9IDApIHsKLSAgICAgICAgciA9IDA7ICAvKiBTaW11bGF0ZSBhICJjYWxsIHRpbWVkIG91dCIgY2FzZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0gd2hpbGUociA9PSAtMSk7Ci0KLSAgaWYociA8IDApCi0gICAgcmV0dXJuIC0xOwotICBpZihyID09IDApCi0gICAgcmV0dXJuIDA7CisgIHIgPSBDdXJsX3BvbGwocGZkLCBudW0sIHRpbWVvdXRfbXMpOworICBpZihyIDw9IDApCisgICAgcmV0dXJuIHI7CiAKICAgcmV0ID0gMDsKICAgbnVtID0gMDsKQEAgLTI4OCw2MiArMzUxLDE3IEBACiAgICAgICBtYXhmZCA9IHdyaXRlZmQ7CiAgIH0KIAotICBwdGltZW91dCA9ICh0aW1lb3V0X21zIDwgMCkgPyBOVUxMIDogJnBlbmRpbmdfdHY7CisgIC8qIFdlIGtub3cgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBiaXQgc2V0IGluIGF0IGxlYXN0IHR3byBmZF9zZXRzIGluCisgICAgIHRoaXMgY2FzZSwgYnV0IHdlIG1heSBoYXZlIG5vIGJpdHMgc2V0IGluIGVpdGhlciBmZHNfcmVhZCBvciBmZF93cml0ZSwKKyAgICAgc28gY2hlY2sgZm9yIHRoYXQgYW5kIGhhbmRsZSBpdC4gIEx1Y2tpbHksIHdpdGggV2luU29jaywgd2UgY2FuIF9hbHNvXworICAgICBhc2sgaG93IG1hbnkgYml0cyBhcmUgc2V0IG9uIGFuIGZkX3NldC4KIAotICBkbyB7Ci0gICAgaW50IGVycm9yOwotICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOwotICAgICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7Ci0gICAgfQotICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKLSAgICAgIHBlbmRpbmdfdHYudHZfc2VjID0gMDsKLSAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IDA7Ci0gICAgfQotCi0gICAgLyogV2luU29jayBzZWxlY3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBmZF9zZXQgdGhhdCBjb250YWlucyB6ZXJvCi0gICAgICAgZmQgZmxhZ3MsIG9yIGl0IHdpbGwgcmV0dXJuIFdTQUVJTlZBTC4gIEJ1dCwgaXQgYWxzbyBjYW4ndCBiZSBjYWxsZWQKLSAgICAgICB3aXRoIG5vIGZkX3NldHMgYXQgYWxsISAgRnJvbSB0aGUgZG9jdW1lbnRhdGlvbjoKLQotICAgICAgICAgQW55IHR3byBvZiB0aGUgcGFyYW1ldGVycywgcmVhZGZkcywgd3JpdGVmZHMsIG9yIGV4Y2VwdGZkcywgY2FuIGJlCi0gICAgICAgICBnaXZlbiBhcyBudWxsLiBBdCBsZWFzdCBvbmUgbXVzdCBiZSBub24tbnVsbCwgYW5kIGFueSBub24tbnVsbAotICAgICAgICAgZGVzY3JpcHRvciBzZXQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBoYW5kbGUgdG8gYSBzb2NrZXQuCi0KLSAgICAgICBXZSBrbm93IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgYml0IHNldCBpbiBhdCBsZWFzdCB0d28gZmRfc2V0cyBpbgotICAgICAgIHRoaXMgY2FzZSwgYnV0IHdlIG1heSBoYXZlIG5vIGJpdHMgc2V0IGluIGVpdGhlciBmZHNfcmVhZCBvciBmZF93cml0ZSwKLSAgICAgICBzbyBjaGVjayBmb3IgdGhhdCBhbmQgaGFuZGxlIGl0LiAgTHVja2lseSwgd2l0aCBXaW5Tb2NrLCB3ZSBjYW4gX2Fsc29fCi0gICAgICAgYXNrIGhvdyBtYW55IGJpdHMgYXJlIHNldCBvbiBhbiBmZF9zZXQuCi0KLSAgICAgICBJdCBpcyB1bmNsZWFyIHdoeSBXaW5Tb2NrIGRvZXNuJ3QganVzdCBoYW5kbGUgdGhpcyBmb3IgdXMgaW5zdGVhZCBvZgotICAgICAgIGNhbGxpbmcgdGhpcyBhbiBlcnJvci4KLQotICAgICAgIE5vdGUgYWxzbyB0aGF0IFdpblNvY2sgaWdub3JlcyB0aGUgZmlyc3QgYXJndW1lbnQsIHNvIHdlIGRvbid0IHdvcnJ5Ci0gICAgICAgYWJvdXQgdGhlIGZhY3QgdGhhdCBtYXhmZCBpcyBjb21wdXRlZCBpbmNvcnJlY3RseSB3aXRoIFdpblNvY2sgKHNpbmNlCi0gICAgICAgY3VybF9zb2NrZXRfdCBpcyB1bnNpZ25lZCBpbiBzdWNoIGNhc2VzIGFuZCB0aHVzIC0xIGlzIHRoZSBsYXJnZXN0Ci0gICAgICAgdmFsdWUpLgotICAgICovCi0jaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLAotICAgICAgICAgICAgICAgZmRzX3JlYWQuZmRfY291bnQgPyAmZmRzX3JlYWQgOiBOVUxMLAotICAgICAgICAgICAgICAgZmRzX3dyaXRlLmZkX2NvdW50ID8gJmZkc193cml0ZSA6IE5VTEwsCi0gICAgICAgICAgICAgICAmZmRzX2VyciwgcHRpbWVvdXQpOwotI2Vsc2UKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLCAmZmRzX3JlYWQsICZmZHNfd3JpdGUsICZmZHNfZXJyLCBwdGltZW91dCk7Ci0jZW5kaWYKLQotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgaWYodGltZW91dF9tcyA+IDApIHsKLSAgICAgIHBlbmRpbmdfbXMgPSAoaW50KSh0aW1lb3V0X21zIC0gRUxBUFNFRF9NUygpKTsKLSAgICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkgewotICAgICAgICByID0gMDsgIC8qIFNpbXVsYXRlIGEgImNhbGwgdGltZWQgb3V0IiBjYXNlICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfSB3aGlsZShyID09IC0xKTsKKyAgICAgTm90ZSBhbHNvIHRoYXQgV2luU29jayBpZ25vcmVzIHRoZSBmaXJzdCBhcmd1bWVudCwgc28gd2UgZG9uJ3Qgd29ycnkKKyAgICAgYWJvdXQgdGhlIGZhY3QgdGhhdCBtYXhmZCBpcyBjb21wdXRlZCBpbmNvcnJlY3RseSB3aXRoIFdpblNvY2sgKHNpbmNlCisgICAgIGN1cmxfc29ja2V0X3QgaXMgdW5zaWduZWQgaW4gc3VjaCBjYXNlcyBhbmQgdGh1cyAtMSBpcyB0aGUgbGFyZ2VzdAorICAgICB2YWx1ZSkuCisgICovCisgIHIgPSBDdXJsX3NlbGVjdChtYXhmZCwgJmZkc19yZWFkLCAmZmRzX3dyaXRlLCAmZmRzX2VyciwgdGltZW91dF9tcyk7CiAKICAgaWYociA8IDApCiAgICAgcmV0dXJuIC0xOwpAQCAtMzg5LDIwICs0MDcsMTggQEAKICAqICAgIDAgPSB0aW1lb3V0CiAgKiAgICBOID0gbnVtYmVyIG9mIHN0cnVjdHVyZXMgd2l0aCBub24gemVybyByZXZlbnQgZmllbGRzCiAgKi8KLWludCBDdXJsX3BvbGwoc3RydWN0IHBvbGxmZCB1ZmRzW10sIHVuc2lnbmVkIGludCBuZmRzLCBpbnQgdGltZW91dF9tcykKK2ludCBDdXJsX3BvbGwoc3RydWN0IHBvbGxmZCB1ZmRzW10sIHVuc2lnbmVkIGludCBuZmRzLCB0aW1lZGlmZl90IHRpbWVvdXRfbXMpCiB7Ci0jaWZuZGVmIEhBVkVfUE9MTF9GSU5FCi0gIHN0cnVjdCB0aW1ldmFsIHBlbmRpbmdfdHY7Ci0gIHN0cnVjdCB0aW1ldmFsICpwdGltZW91dDsKKyNpZmRlZiBIQVZFX1BPTExfRklORQorICBpbnQgcGVuZGluZ19tczsKKyNlbHNlCiAgIGZkX3NldCBmZHNfcmVhZDsKICAgZmRfc2V0IGZkc193cml0ZTsKICAgZmRfc2V0IGZkc19lcnI7CiAgIGN1cmxfc29ja2V0X3QgbWF4ZmQ7CiAjZW5kaWYKLSAgc3RydWN0IGN1cmx0aW1lIGluaXRpYWxfdHYgPSB7MCwgMH07CiAgIGJvb2wgZmRzX25vbmUgPSBUUlVFOwogICB1bnNpZ25lZCBpbnQgaTsKLSAgaW50IHBlbmRpbmdfbXMgPSAwOwogICBpbnQgcjsKIAogICBpZih1ZmRzKSB7CkBAIC00MTQsNiArNDMwLDcgQEAKICAgICB9CiAgIH0KICAgaWYoZmRzX25vbmUpIHsKKyAgICAvKiBubyBzb2NrZXRzLCBqdXN0IHdhaXQgKi8KICAgICByID0gQ3VybF93YWl0X21zKHRpbWVvdXRfbXMpOwogICAgIHJldHVybiByOwogICB9CkBAIC00MjMsMzMgKzQ0MCwyMCBAQAogICAgICB3aGVuIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgemVybyB0aW1lb3V0IG9yIGEgbmVnYXRpdmUgdGltZW91dAogICAgICB2YWx1ZSBpbmRpY2F0aW5nIGEgYmxvY2tpbmcgY2FsbCBzaG91bGQgYmUgcGVyZm9ybWVkLiAqLwogCi0gIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXM7Ci0gICAgaW5pdGlhbF90diA9IEN1cmxfbm93KCk7Ci0gIH0KLQogI2lmZGVmIEhBVkVfUE9MTF9GSU5FCiAKLSAgZG8gewotICAgIGludCBlcnJvcjsKLSAgICBpZih0aW1lb3V0X21zIDwgMCkKLSAgICAgIHBlbmRpbmdfbXMgPSAtMTsKLSAgICBlbHNlIGlmKCF0aW1lb3V0X21zKQotICAgICAgcGVuZGluZ19tcyA9IDA7Ci0gICAgciA9IHBvbGwodWZkcywgbmZkcywgcGVuZGluZ19tcyk7Ci0gICAgaWYociAhPSAtMSkKLSAgICAgIGJyZWFrOwotICAgIGVycm9yID0gU09DS0VSUk5POwotICAgIGlmKGVycm9yICYmIEVSUk9SX05PVF9FSU5UUihlcnJvcikpCi0gICAgICBicmVhazsKLSAgICBpZih0aW1lb3V0X21zID4gMCkgewotICAgICAgcGVuZGluZ19tcyA9IChpbnQpKHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCkpOwotICAgICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICAgIHIgPSAwOyAgLyogU2ltdWxhdGUgYSAiY2FsbCB0aW1lZCBvdXQiIGNhc2UgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlKHIgPT0gLTEpOworICAvKiBwcmV2ZW50IG92ZXJmbG93LCB0aW1lb3V0X21zIGlzIHR5cGVjYXN0IHRvIGludC4gKi8KKyNpZiBUSU1FRElGRl9UX01BWCA+IElOVF9NQVgKKyAgaWYodGltZW91dF9tcyA+IElOVF9NQVgpCisgICAgdGltZW91dF9tcyA9IElOVF9NQVg7CisjZW5kaWYKKyAgaWYodGltZW91dF9tcyA+IDApCisgICAgcGVuZGluZ19tcyA9IChpbnQpdGltZW91dF9tczsKKyAgZWxzZSBpZih0aW1lb3V0X21zIDwgMCkKKyAgICBwZW5kaW5nX21zID0gLTE7CisgIGVsc2UKKyAgICBwZW5kaW5nX21zID0gMDsKKyAgciA9IHBvbGwodWZkcywgbmZkcywgcGVuZGluZ19tcyk7CiAKICAgaWYociA8IDApCiAgICAgcmV0dXJuIC0xOwpAQCAtNDkwLDU0ICs0OTQsNyBAQAogICAgIH0KICAgfQogCi0jaWZkZWYgVVNFX1dJTlNPQ0sKLSAgLyogV2luU29jayBzZWxlY3QoKSBjYW4ndCBoYW5kbGUgemVybyBldmVudHMuICBTZWUgdGhlIGNvbW1lbnQgYWJvdXQgdGhpcyBpbgotICAgICBDdXJsX2NoZWNrX3NvY2tldCgpLiAqLwotICBpZihmZHNfcmVhZC5mZF9jb3VudCA9PSAwICYmIGZkc193cml0ZS5mZF9jb3VudCA9PSAwCi0gICAgICYmIGZkc19lcnIuZmRfY291bnQgPT0gMCkgewotICAgIHIgPSBDdXJsX3dhaXRfbXModGltZW91dF9tcyk7Ci0gICAgcmV0dXJuIHI7Ci0gIH0KLSNlbmRpZgotCi0gIHB0aW1lb3V0ID0gKHRpbWVvdXRfbXMgPCAwKSA/IE5VTEwgOiAmcGVuZGluZ190djsKLQotICBkbyB7Ci0gICAgaW50IGVycm9yOwotICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOwotICAgICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7Ci0gICAgfQotICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKLSAgICAgIHBlbmRpbmdfdHYudHZfc2VjID0gMDsKLSAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IDA7Ci0gICAgfQotCi0jaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLAotICAgICAgICAgICAgICAgLyogV2luU29jayBzZWxlY3QoKSBjYW4ndCBoYW5kbGUgZmRfc2V0cyB3aXRoIHplcm8gYml0cyBzZXQsIHNvCi0gICAgICAgICAgICAgICAgICBkb24ndCBnaXZlIGl0IHN1Y2ggYXJndW1lbnRzLiAgU2VlIHRoZSBjb21tZW50IGFib3V0IHRoaXMgaW4KLSAgICAgICAgICAgICAgICAgIEN1cmxfY2hlY2tfc29ja2V0KCkuCi0gICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgZmRzX3JlYWQuZmRfY291bnQgPyAmZmRzX3JlYWQgOiBOVUxMLAotICAgICAgICAgICAgICAgZmRzX3dyaXRlLmZkX2NvdW50ID8gJmZkc193cml0ZSA6IE5VTEwsCi0gICAgICAgICAgICAgICBmZHNfZXJyLmZkX2NvdW50ID8gJmZkc19lcnIgOiBOVUxMLCBwdGltZW91dCk7Ci0jZWxzZQotICAgIHIgPSBzZWxlY3QoKGludCltYXhmZCArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHB0aW1lb3V0KTsKLSNlbmRpZgotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgaWYodGltZW91dF9tcyA+IDApIHsKLSAgICAgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zIC0gRUxBUFNFRF9NUygpOwotICAgICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICAgIHIgPSAwOyAgLyogU2ltdWxhdGUgYSAiY2FsbCB0aW1lZCBvdXQiIGNhc2UgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlKHIgPT0gLTEpOworICByID0gQ3VybF9zZWxlY3QobWF4ZmQsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHRpbWVvdXRfbXMpOwogCiAgIGlmKHIgPCAwKQogICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbGVjdC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmgKaW5kZXggOWExYmE0NS4uOTUxODFmNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDI4ICs3MiwyNiBAQAogICAgdGhlcmVmb3JlIGRlZmluZWQgaGVyZSAqLwogI2RlZmluZSBDVVJMX0NTRUxFQ1RfSU4yIChDVVJMX0NTRUxFQ1RfRVJSIDw8IDEpCiAKK2ludCBDdXJsX3NlbGVjdChjdXJsX3NvY2tldF90IG1heGZkLAorICAgICAgICAgICAgICAgIGZkX3NldCAqZmRzX3JlYWQsCisgICAgICAgICAgICAgICAgZmRfc2V0ICpmZHNfd3JpdGUsCisgICAgICAgICAgICAgICAgZmRfc2V0ICpmZHNfZXJyLAorICAgICAgICAgICAgICAgIHRpbWVkaWZmX3QgdGltZW91dF9tcyk7CisKIGludCBDdXJsX3NvY2tldF9jaGVjayhjdXJsX3NvY2tldF90IHJlYWRmZCwgY3VybF9zb2NrZXRfdCByZWFkZmQyLAogICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCwKLSAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZW91dF9tcyk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMpOwogI2RlZmluZSBTT0NLRVRfUkVBREFCTEUoeCx6KSBcCiAgIEN1cmxfc29ja2V0X2NoZWNrKHgsIENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCB6KQogI2RlZmluZSBTT0NLRVRfV1JJVEFCTEUoeCx6KSBcCiAgIEN1cmxfc29ja2V0X2NoZWNrKENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCB4LCB6KQogCi1pbnQgQ3VybF9wb2xsKHN0cnVjdCBwb2xsZmQgdWZkc1tdLCB1bnNpZ25lZCBpbnQgbmZkcywgaW50IHRpbWVvdXRfbXMpOwotCi0vKiBPbiBub24tRE9TIGFuZCBub24tV2luc29jayBwbGF0Zm9ybXMsIHdoZW4gQ3VybF9hY2tfZWludHIgaXMgc2V0LAotICogRUlOVFIgY29uZGl0aW9uIGlzIGhvbm9yZWQgYW5kIGZ1bmN0aW9uIG1pZ2h0IGV4aXQgZWFybHkgd2l0aG91dAotICogYXdhaXRpbmcgZnVsbCB0aW1lb3V0LiAgT3RoZXJ3aXNlIEVJTlRSIHdpbGwgYmUgaWdub3JlZCBhbmQgZnVsbAotICogdGltZW91dCB3aWxsIGVsYXBzZS4gKi8KLWV4dGVybiBpbnQgQ3VybF9hY2tfZWludHI7Ci0KLWludCBDdXJsX3dhaXRfbXMoaW50IHRpbWVvdXRfbXMpOworaW50IEN1cmxfcG9sbChzdHJ1Y3QgcG9sbGZkIHVmZHNbXSwgdW5zaWduZWQgaW50IG5mZHMsIHRpbWVkaWZmX3QgdGltZW91dF9tcyk7CitpbnQgQ3VybF93YWl0X21zKHRpbWVkaWZmX3QgdGltZW91dF9tcyk7CiAKICNpZmRlZiBUUEYKIGludCB0cGZfc2VsZWN0X2xpYmN1cmwoaW50IG1heGZkcywgZmRfc2V0KiByZWFkcywgZmRfc2V0KiB3cml0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCogZXhjZXB0cywgc3RydWN0IHRpbWV2YWwqIHR2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0KiBleGNlcHRzLCBzdHJ1Y3QgdGltZXZhbCAqdHYpOwogI2VuZGlmCiAKIC8qIFdpbnNvY2sgYW5kIFRQRiBzb2NrZXRzIGFyZSBub3QgaW4gcmFuZ2UgWzAuLkZEX1NFVFNJWkUtMV0sIHdoaWNoCkBAIC0xMDksNyArMTA3LDcgQEAKICAgICBTRVRfU09DS0VSUk5PKEVJTlZBTCk7IFwKICAgICByZXR1cm4gLTE7IFwKICAgfSBcCi19IFdISUxFX0ZBTFNFCit9IHdoaWxlKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFTEVDVF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZW5kZi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VuZGYuYwppbmRleCA1OTEzZWE0Li42OTQzZmE4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZW5kZi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbmRmLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM2LDEzICszNiwxNCBAQAogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgotI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgInZzc2gvc3NoLmgiCiAjaW5jbHVkZSAiZWFzeWlmLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAic2VsZWN0LmgiCiAjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAiaHR0cDIuaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCkBAIC0yMjQsNyArMjI1LDcgQEAKICAgKHZvaWQpc29ja2luZGV4OwogICByZXR1cm4gZmFsc2U7CiB9Ci0jZGVmaW5lIHByZV9yZWNlaXZlX3BsYWluKGMsbikgZG8ge30gV0hJTEVfRkFMU0UKKyNkZWZpbmUgcHJlX3JlY2VpdmVfcGxhaW4oYyxuKSBkbyB7fSB3aGlsZSgwKQogI2RlZmluZSBnZXRfcHJlX3JlY3ZlZChjLG4sYixsKSAwCiAjZW5kaWYgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAKQEAgLTI2Niw3ICsyNjcsNyBAQAogICAgIHNpemVfdCBsZW47CiAgICAgY2hhciBlcnJvcltDVVJMX0VSUk9SX1NJWkUgKyAyXTsKICAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICBtdnNucHJpbnRmKGVycm9yLCBDVVJMX0VSUk9SX1NJWkUsIGZtdCwgYXApOworICAgICh2b2lkKW12c25wcmludGYoZXJyb3IsIENVUkxfRVJST1JfU0laRSwgZm10LCBhcCk7CiAgICAgbGVuID0gc3RybGVuKGVycm9yKTsKIAogICAgIGlmKGRhdGEtPnNldC5lcnJvcmJ1ZmZlciAmJiAhZGF0YS0+c3RhdGUuZXJyb3JidWYpIHsKQEAgLTQ5NywxMCArNDk4LDEyIEBACiAgICAgIGlzIGFnYWluIGVuYWJsZWQgKi8KICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOwogICBzdHJ1Y3QgVXJsU3RhdGUgKnMgPSAmZGF0YS0+c3RhdGU7Ci0gIGNoYXIgKmR1cGw7CiAgIHVuc2lnbmVkIGludCBpOwogICBib29sIG5ld3R5cGUgPSBUUlVFOwogCisgIC8qIElmIHRoaXMgdHJhbnNmZXJzIG92ZXIgSFRUUC8yLCBwYXVzZSB0aGUgc3RyZWFtISAqLworICBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShkYXRhLCBUUlVFKTsKKwogICBpZihzLT50ZW1wY291bnQpIHsKICAgICBmb3IoaSA9IDA7IGk8IHMtPnRlbXBjb3VudDsgaSsrKSB7CiAgICAgICBpZihzLT50ZW1wd3JpdGVbaV0udHlwZSA9PSB0eXBlKSB7CkBAIC01MTQsNDIgKzUxNywyMSBAQAogICBlbHNlCiAgICAgaSA9IDA7CiAKLSAgaWYoIW5ld3R5cGUpIHsKLSAgICAvKiBhcHBlbmQgbmV3IGRhdGEgdG8gb2xkIGRhdGEgKi8KLQotICAgIC8qIGZpZ3VyZSBvdXQgdGhlIG5ldyBzaXplIG9mIHRoZSBkYXRhIHRvIHNhdmUgKi8KLSAgICBzaXplX3QgbmV3bGVuID0gbGVuICsgcy0+dGVtcHdyaXRlW2ldLmxlbjsKLSAgICAvKiBhbGxvY2F0ZSB0aGUgbmV3IG1lbW9yeSBhcmVhICovCi0gICAgY2hhciAqbmV3cHRyID0gcmVhbGxvYyhzLT50ZW1wd3JpdGVbaV0uYnVmLCBuZXdsZW4pOwotICAgIGlmKCFuZXdwdHIpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAvKiBjb3B5IHRoZSBuZXcgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBuZXcgYXJlYSAqLwotICAgIG1lbWNweShuZXdwdHIgKyBzLT50ZW1wd3JpdGVbaV0ubGVuLCBwdHIsIGxlbik7Ci0KLSAgICAvKiB1cGRhdGUgdGhlIHBvaW50ZXIgYW5kIHRoZSBzaXplICovCi0gICAgcy0+dGVtcHdyaXRlW2ldLmJ1ZiA9IG5ld3B0cjsKLSAgICBzLT50ZW1wd3JpdGVbaV0ubGVuID0gbmV3bGVuOwotICB9Ci0gIGVsc2UgewotICAgIGR1cGwgPSBDdXJsX21lbWR1cChwdHIsIGxlbik7Ci0gICAgaWYoIWR1cGwpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQorICBpZihuZXd0eXBlKSB7CiAgICAgLyogc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgc3RhdGUgc3RydWN0IGZvciBsYXRlciB1c2UgKi8KLSAgICBzLT50ZW1wd3JpdGVbaV0uYnVmID0gZHVwbDsKLSAgICBzLT50ZW1wd3JpdGVbaV0ubGVuID0gbGVuOworICAgIEN1cmxfZHluX2luaXQoJnMtPnRlbXB3cml0ZVtpXS5iLCBEWU5fUEFVU0VfQlVGRkVSKTsKICAgICBzLT50ZW1wd3JpdGVbaV0udHlwZSA9IHR5cGU7CiAKICAgICBpZihuZXd0eXBlKQogICAgICAgcy0+dGVtcGNvdW50Kys7CiAgIH0KIAorICBpZihDdXJsX2R5bl9hZGRuKCZzLT50ZW1wd3JpdGVbaV0uYiwgKHVuc2lnbmVkIGNoYXIgKilwdHIsIGxlbikpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKICAgLyogbWFyayB0aGUgY29ubmVjdGlvbiBhcyBSRUNWIHBhdXNlZCAqLwogICBrLT5rZWVwb24gfD0gS0VFUF9SRUNWX1BBVVNFOwogCi0gIERFQlVHRihpbmZvZihkYXRhLCAiUGF1c2VkICV6dSBieXRlcyBpbiBidWZmZXIgZm9yIHR5cGUgJTAyeFxuIiwKLSAgICAgICAgICAgICAgIGxlbiwgdHlwZSkpOwotCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApAQCAtNjExLDcgKzU5Myw3IEBACiAgICAgICAgIHJldHVybiBwYXVzZXdyaXRlKGRhdGEsIHR5cGUsIHB0ciwgbGVuKTsKICAgICAgIH0KICAgICAgIGlmKHdyb3RlICE9IGNodW5rbGVuKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgd3JpdGluZyBib2R5ICglenUgIT0gJXp1KSIsIHdyb3RlLCBjaHVua2xlbik7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIHdyaXRpbmcgb3V0cHV0IHRvIGRlc3RpbmF0aW9uIik7CiAgICAgICAgIHJldHVybiBDVVJMRV9XUklURV9FUlJPUjsKICAgICAgIH0KICAgICB9CkBAIC02OTIsMTkgKzY3NCwyMCBAQAogICBzc2l6ZV90IG5yZWFkID0gc3JlYWQoc29ja2ZkLCBidWYsIGJ5dGVzZnJvbXNvY2tldCk7CiAKICAgaWYoLTEgPT0gbnJlYWQpIHsKLSAgICBpbnQgZXJyID0gU09DS0VSUk5POwotICAgIGludCByZXR1cm5fZXJyb3I7CisgICAgY29uc3QgaW50IGVyciA9IFNPQ0tFUlJOTzsKKyAgICBjb25zdCBib29sIHJldHVybl9lcnJvciA9CiAjaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByZXR1cm5fZXJyb3IgPSBXU0FFV09VTERCTE9DSyA9PSBlcnI7CisgICAgICBXU0FFV09VTERCTE9DSyA9PSBlcnIKICNlbHNlCi0gICAgcmV0dXJuX2Vycm9yID0gRVdPVUxEQkxPQ0sgPT0gZXJyIHx8IEVBR0FJTiA9PSBlcnIgfHwgRUlOVFIgPT0gZXJyOworICAgICAgRVdPVUxEQkxPQ0sgPT0gZXJyIHx8IEVBR0FJTiA9PSBlcnIgfHwgRUlOVFIgPT0gZXJyCiAjZW5kaWYKKyAgICAgIDsKKyAgICAqbiA9IDA7IC8qIG5vIGRhdGEgcmV0dXJuZWQgKi8KICAgICBpZihyZXR1cm5fZXJyb3IpCiAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CiAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CiAgIH0KIAotICAvKiB3ZSBvbmx5IHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCB3aGVuIHdlIHJldHVybiBPSyAqLwogICAqbiA9IG5yZWFkOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXRvcHQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCmluZGV4IDkyY2Q1YjIuLjkwZWRmNmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03Nyw2ICs3NywzNyBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK0NVUkxjb2RlIEN1cmxfc2V0YmxvYm9wdChzdHJ1Y3QgY3VybF9ibG9iICoqYmxvYnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqYmxvYikKK3sKKyAgLyogZnJlZSB0aGUgcHJldmlvdXMgc3RvcmFnZSBhdCBgYmxvYnAnIGFuZCByZXBsYWNlIGJ5IGEgZHluYW1pYyBzdG9yYWdlCisgICAgIGNvcHkgb2YgYmxvYi4gSWYgQ1VSTF9CTE9CX0NPUFkgaXMgc2V0LCB0aGUgZGF0YSBpcyBjb3BpZWQuICovCisKKyAgQ3VybF9zYWZlZnJlZSgqYmxvYnApOworCisgIGlmKGJsb2IpIHsKKyAgICBzdHJ1Y3QgY3VybF9ibG9iICpuYmxvYjsKKyAgICBpZihibG9iLT5sZW4gPiBDVVJMX01BWF9JTlBVVF9MRU5HVEgpCisgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICAgIG5ibG9iID0gKHN0cnVjdCBjdXJsX2Jsb2IgKikKKyAgICAgIG1hbGxvYyhzaXplb2Yoc3RydWN0IGN1cmxfYmxvYikgKworICAgICAgICAgICAgICgoYmxvYi0+ZmxhZ3MgJiBDVVJMX0JMT0JfQ09QWSkgPyBibG9iLT5sZW4gOiAwKSk7CisgICAgaWYoIW5ibG9iKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgKm5ibG9iID0gKmJsb2I7CisgICAgaWYoYmxvYi0+ZmxhZ3MgJiBDVVJMX0JMT0JfQ09QWSkgeworICAgICAgLyogcHV0IHRoZSBkYXRhIGFmdGVyIHRoZSBibG9iIHN0cnVjdCBpbiBtZW1vcnkgKi8KKyAgICAgIG5ibG9iLT5kYXRhID0gKGNoYXIgKiluYmxvYiArIHNpemVvZihzdHJ1Y3QgY3VybF9ibG9iKTsKKyAgICAgIG1lbWNweShuYmxvYi0+ZGF0YSwgYmxvYi0+ZGF0YSwgYmxvYi0+bGVuKTsKKyAgICB9CisKKyAgICAqYmxvYnAgPSBuYmxvYjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKIHN0YXRpYyBDVVJMY29kZSBzZXRzdHJvcHRfdXNlcnB3ZChjaGFyICpvcHRpb24sIGNoYXIgKip1c2VycCwgY2hhciAqKnBhc3N3ZHApCiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwpAQCAtMTE5LDggKzE1MCwxMSBAQAogI2RlZmluZSBDX1NTTFZFUlNJT05fVkFMVUUoeCkgKHggJiAweGZmZmYpCiAjZGVmaW5lIENfU1NMVkVSU0lPTl9NQVhfVkFMVUUoeCkgKHggJiAweGZmZmYwMDAwKQogCi1zdGF0aWMgQ1VSTGNvZGUgdnNldG9wdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBDVVJMb3B0aW9uIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgcGFyYW0pCisvKgorICogRG8gbm90IG1ha2UgQ3VybF92c2V0b3B0KCkgc3RhdGljOiBpdCBpcyBjYWxsZWQgZnJvbQorICogcGFja2FnZXMvT1M0MDAvY2NzaWRjdXJsLmMuCisgKi8KK0NVUkxjb2RlIEN1cmxfdnNldG9wdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBDVVJMb3B0aW9uIG9wdGlvbiwgdmFfbGlzdCBwYXJhbSkKIHsKICAgY2hhciAqYXJncHRyOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKQEAgLTIzNyw2ICsyNzEsOSBAQAogICAgICAqIERvIG5vdCBpbmNsdWRlIHRoZSBib2R5IHBhcnQgaW4gdGhlIG91dHB1dCBkYXRhIHN0cmVhbS4KICAgICAgKi8KICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKKyAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpCisgICAgICAvKiBpbiBIVFRQIGxpbmdvLCBubyBib2R5IG1lYW5zIHVzaW5nIHRoZSBIRUFEIHJlcXVlc3QuLi4gKi8KKyAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX0hFQUQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9GQUlMT05FUlJPUjoKICAgICAvKgpAQCAtMjU4LDEzICsyOTUsMTMgQEAKICAgICBkYXRhLT5zZXQudXBsb2FkID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CiAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgewogICAgICAgLyogSWYgdGhpcyBpcyBIVFRQLCBQVVQgaXMgd2hhdCdzIG5lZWRlZCB0byAidXBsb2FkIiAqLwotICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX1BVVDsKKyAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX1BVVDsKICAgICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IEZBTFNFOyAvKiB0aGlzIGlzIGltcGxpZWQgKi8KICAgICB9CiAgICAgZWxzZQogICAgICAgLyogSW4gSFRUUCwgdGhlIG9wcG9zaXRlIG9mIHVwbG9hZCBpcyBHRVQgKHVubGVzcyBOT0JPRFkgaXMgdHJ1ZSBhcwogICAgICAgICAgdGhlbiB0aGlzIGNhbiBiZSBjaGFuZ2VkIHRvIEhFQUQgbGF0ZXIgb24pICovCi0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOworICAgICAgZGF0YS0+c2V0Lm1ldGhvZCA9IEhUVFBSRVFfR0VUOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfUkVRVUVTVF9UQVJHRVQ6CiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RBUkdFVF0sCkBAIC0zMTIsNyArMzQ5LDcgQEAKICAgICAgKiBQYXJzZSB0aGUgJEhPTUUvLm5ldHJjIGZpbGUKICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMX05FVFJDX0lHTk9SRUQpIHx8IChhcmcgPiBDVVJMX05FVFJDX1JFUVVJUkVEKSkKKyAgICBpZigoYXJnIDwgQ1VSTF9ORVRSQ19JR05PUkVEKSB8fCAoYXJnID49IENVUkxfTkVUUkNfTEFTVCkpCiAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwogICAgIGRhdGEtPnNldC51c2VfbmV0cmMgPSAoZW51bSBDVVJMX05FVFJDX09QVElPTilhcmc7CiAgICAgYnJlYWs7CkBAIC0zMzksNyArMzc2LDcgQEAKICAgICAgKiBjdXJsL2N1cmwuaCBoZWFkZXIgZmlsZS4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMX1RJTUVDT05EX05PTkUpIHx8IChhcmcgPiBDVVJMX1RJTUVDT05EX0xBU1RNT0QpKQorICAgIGlmKChhcmcgPCBDVVJMX1RJTUVDT05EX05PTkUpIHx8IChhcmcgPj0gQ1VSTF9USU1FQ09ORF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LnRpbWVjb25kaXRpb24gPSAoY3VybF9UaW1lQ29uZClhcmc7CiAgICAgYnJlYWs7CkBAIC0zNjAsNyArMzk3LDkgQEAKICAgICBicmVhazsKIAogICBjYXNlIENVUkxPUFRfU1NMVkVSU0lPTjoKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNhc2UgQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OOgorI2VuZGlmCiAgICAgLyoKICAgICAgKiBTZXQgZXhwbGljaXQgU1NMIHZlcnNpb24gdG8gdHJ5IHRvIGNvbm5lY3Qgd2l0aCwgYXMgc29tZSBTU0wKICAgICAgKiBpbXBsZW1lbnRhdGlvbnMgYXJlIGxhbWUuCkBAIC0zNjgsOSArNDA3LDExIEBACiAjaWZkZWYgVVNFX1NTTAogICAgIHsKICAgICAgIGxvbmcgdmVyc2lvbiwgdmVyc2lvbl9tYXg7Ci0gICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpwcmltYXJ5ID0gKG9wdGlvbiA9PSBDVVJMT1BUX1NTTFZFUlNJT04gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+c2V0LnNzbC5wcmltYXJ5IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeSk7CisgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpwcmltYXJ5ID0gJmRhdGEtPnNldC5zc2wucHJpbWFyeTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICBpZihvcHRpb24gIT0gQ1VSTE9QVF9TU0xWRVJTSU9OKQorICAgICAgICBwcmltYXJ5ID0gJmRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeTsKKyNlbmRpZgogCiAgICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogCkBAIC00NzgsMTEgKzUxOSwxMSBAQAogICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyBpc24ndCB1c2VkIGFuZCB0aGUgUE9TVCBkYXRhIGlzIHJlYWQgb2ZmIHRoZQogICAgICAgIGNhbGxiYWNrISAqLwogICAgIGlmKHZhX2FyZyhwYXJhbSwgbG9uZykpIHsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgICAgZGF0YS0+c2V0Lm1ldGhvZCA9IEhUVFBSRVFfUE9TVDsKICAgICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IEZBTFNFOyAvKiB0aGlzIGlzIGltcGxpZWQgKi8KICAgICB9CiAgICAgZWxzZQotICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0dFVDsKKyAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX0dFVDsKICAgICBicmVhazsKIAogICBjYXNlIENVUkxPUFRfQ09QWVBPU1RGSUVMRFM6CkBAIC01MjksNyArNTcwLDcgQEAKICAgICB9CiAKICAgICBkYXRhLT5zZXQucG9zdGZpZWxkcyA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NPUFlQT1NURklFTERTXTsKLSAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfUE9TVDsKKyAgICBkYXRhLT5zZXQubWV0aG9kID0gSFRUUFJFUV9QT1NUOwogICAgIGJyZWFrOwogCiAgIGNhc2UgQ1VSTE9QVF9QT1NURklFTERTOgpAQCAtNTM5LDcgKzU4MCw3IEBACiAgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHMgPSB2YV9hcmcocGFyYW0sIHZvaWQgKik7CiAgICAgLyogUmVsZWFzZSBvbGQgY29waWVkIGRhdGEuICovCiAgICAgKHZvaWQpIEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DT1BZUE9TVEZJRUxEU10sIE5VTEwpOwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX1BPU1Q7CiAgICAgYnJlYWs7CiAKICAgY2FzZSBDVVJMT1BUX1BPU1RGSUVMRFNJWkU6CkBAIC01ODUsNyArNjI2LDcgQEAKICAgICAgKiBTZXQgdG8gbWFrZSB1cyBkbyBIVFRQIFBPU1QKICAgICAgKi8KICAgICBkYXRhLT5zZXQuaHR0cHBvc3QgPSB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICopOwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUX0ZPUk07CisgICAgZGF0YS0+c2V0Lm1ldGhvZCA9IEhUVFBSRVFfUE9TVF9GT1JNOwogICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IEZBTFNFOyAvKiB0aGlzIGlzIGltcGxpZWQgKi8KICAgICBicmVhazsKICNlbmRpZiAgIC8qIENVUkxfRElTQUJMRV9IVFRQICovCkBAIC01OTcsNyArNjM4LDcgQEAKICAgICByZXN1bHQgPSBDdXJsX21pbWVfc2V0X3N1YnBhcnRzKCZkYXRhLT5zZXQubWltZXBvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGN1cmxfbWltZSAqKSwgRkFMU0UpOwogICAgIGlmKCFyZXN1bHQpIHsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUX01JTUU7CisgICAgICBkYXRhLT5zZXQubWV0aG9kID0gSFRUUFJFUV9QT1NUX01JTUU7CiAgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSBGQUxTRTsgLyogdGhpcyBpcyBpbXBsaWVkICovCiAgICAgfQogICAgIGJyZWFrOwpAQCAtNzQ5LDcgKzc5MCw3IEBACiAgICAgfQogICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoYXJncHRyLCAiRkxVU0giKSkgewogICAgICAgLyogZmx1c2ggY29va2llcyB0byBmaWxlLCB0YWtlcyBjYXJlIG9mIHRoZSBsb2NraW5nICovCi0gICAgICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgMCk7CisgICAgICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgRkFMU0UpOwogICAgIH0KICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKGFyZ3B0ciwgIlJFTE9BRCIpKSB7CiAgICAgICAvKiByZWxvYWQgY29va2llcyBmcm9tIGZpbGUgKi8KQEAgLTc5Miw3ICs4MzMsNyBAQAogICAgICAqIFNldCB0byBmb3JjZSB1cyBkbyBIVFRQIEdFVAogICAgICAqLwogICAgIGlmKHZhX2FyZyhwYXJhbSwgbG9uZykpIHsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgICBkYXRhLT5zZXQubWV0aG9kID0gSFRUUFJFUV9HRVQ7CiAgICAgICBkYXRhLT5zZXQudXBsb2FkID0gRkFMU0U7IC8qIHN3aXRjaCBvZmYgdXBsb2FkICovCiAgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSBGQUxTRTsgLyogdGhpcyBpcyBpbXBsaWVkICovCiAgICAgfQpAQCAtODA2LDExICs4NDcsMTYgQEAKICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogICAgIGlmKGFyZyA8IENVUkxfSFRUUF9WRVJTSU9OX05PTkUpCiAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworI2lmZGVmIEVOQUJMRV9RVUlDCisgICAgaWYoYXJnID09IENVUkxfSFRUUF9WRVJTSU9OXzMpCisgICAgICA7CisgICAgZWxzZQorI2VuZGlmCiAjaWZuZGVmIFVTRV9OR0hUVFAyCiAgICAgaWYoYXJnID49IENVUkxfSFRUUF9WRVJTSU9OXzIpCiAgICAgICByZXR1cm4gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CiAjZWxzZQotICAgIGlmKGFyZyA+IENVUkxfSFRUUF9WRVJTSU9OXzJfUFJJT1JfS05PV0xFREdFKQorICAgIGlmKGFyZyA+PSBDVVJMX0hUVFBfVkVSU0lPTl9MQVNUKQogICAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOwogICAgIGlmKGFyZyA9PSBDVVJMX0hUVFBfVkVSU0lPTl9OT05FKQogICAgICAgYXJnID0gQ1VSTF9IVFRQX1ZFUlNJT05fMlRMUzsKQEAgLTg5Nyw3ICs5NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CiAKICAgICAvKiB3ZSBkb24ndCBzZXQKLSAgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfQ1VTVE9NOworICAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX0NVU1RPTTsKICAgICAgICBoZXJlLCB3ZSBjb250aW51ZSBhcyBpZiB3ZSB3ZXJlIHVzaW5nIHRoZSBhbHJlYWR5IHNldCB0eXBlCiAgICAgICAgYW5kIHRoaXMganVzdCBjaGFuZ2VzIHRoZSBhY3R1YWwgcmVxdWVzdCBrZXl3b3JkICovCiAgICAgYnJlYWs7CkBAIC0xMTAxLDcgKzExNDcsNyBAQAogICAgICAqIEhvdyBkbyBhY2Nlc3MgZmlsZXMgb3ZlciBGVFAuCiAgICAgICovCiAgICAgYXJnID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKLSAgICBpZigoYXJnIDwgQ1VSTEZUUE1FVEhPRF9ERUZBVUxUKSB8fCAoYXJnID4gQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0QpKQorICAgIGlmKChhcmcgPCBDVVJMRlRQTUVUSE9EX0RFRkFVTFQpIHx8IChhcmcgPj0gQ1VSTEZUUE1FVEhPRF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID0gKGN1cmxfZnRwZmlsZSlhcmc7CiAgICAgYnJlYWs7CkBAIC0xMTI4LDcgKzExNzQsNyBAQAogCiAgIGNhc2UgQ1VSTE9QVF9GVFBfU1NMX0NDQzoKICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMRlRQU1NMX0NDQ19OT05FKSB8fCAoYXJnID4gQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFKSkKKyAgICBpZigoYXJnIDwgQ1VSTEZUUFNTTF9DQ0NfTk9ORSkgfHwgKGFyZyA+PSBDVVJMRlRQU1NMX0NDQ19MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cF9jY2MgPSAoY3VybF9mdHBjY2MpYXJnOwogICAgIGJyZWFrOwpAQCAtMTE1Niw3ICsxMjAyLDcgQEAKICAgICAgKiBTZXQgYSBzcGVjaWZpYyBhdXRoIGZvciBGVFAtU1NMIHRyYW5zZmVycy4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMRlRQQVVUSF9ERUZBVUxUKSB8fCAoYXJnID4gQ1VSTEZUUEFVVEhfVExTKSkKKyAgICBpZigoYXJnIDwgQ1VSTEZUUEFVVEhfREVGQVVMVCkgfHwgKGFyZyA+PSBDVVJMRlRQQVVUSF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cHNzbGF1dGggPSAoY3VybF9mdHBhdXRoKWFyZzsKICAgICBicmVhazsKQEAgLTE1OTgsNiArMTY0NCwxMyBAQAogICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9TU0xDRVJUX0JMT0I6CisgICAgLyoKKyAgICAgKiBCbG9iIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wgY2VydGlmaWNhdGUgdG8gdXNlCisgICAgICovCisgICAgcmVzdWx0ID0gQ3VybF9zZXRibG9ib3B0KCZkYXRhLT5zZXQuYmxvYnNbQkxPQl9DRVJUX09SSUddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTENFUlQ6CiAgICAgLyoKQEAgLTE2MDYsNiArMTY1OSwxMyBAQAogICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwogICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfUFJPWFlfU1NMQ0VSVF9CTE9COgorICAgIC8qCisgICAgICogQmxvYiB0aGF0IGhvbGRzIGZpbGUgbmFtZSBvZiB0aGUgU1NMIGNlcnRpZmljYXRlIHRvIHVzZSBmb3IgcHJveHkKKyAgICAgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldGJsb2JvcHQoJmRhdGEtPnNldC5ibG9ic1tCTE9CX0NFUlRfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2VuZGlmCiAgIGNhc2UgQ1VSTE9QVF9TU0xDRVJUVFlQRToKICAgICAvKgpAQCAtMTYzMCw2ICsxNjkwLDEzIEBACiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9PUklHXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwogICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfU1NMS0VZX0JMT0I6CisgICAgLyoKKyAgICAgKiBCbG9iIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wga2V5IHRvIHVzZQorICAgICAqLworICAgIHJlc3VsdCA9IEN1cmxfc2V0YmxvYm9wdCgmZGF0YS0+c2V0LmJsb2JzW0JMT0JfS0VZX09SSUddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTEtFWToKICAgICAvKgpAQCAtMTYzOCw2ICsxNzA1LDEzIEBACiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QUk9YWV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTEtFWV9CTE9COgorICAgIC8qCisgICAgICogQmxvYiB0aGF0IGhvbGRzIGZpbGUgbmFtZSBvZiB0aGUgU1NMIGtleSB0byB1c2UgZm9yIHByb3h5CisgICAgICovCisgICAgcmVzdWx0ID0gQ3VybF9zZXRibG9ib3B0KCZkYXRhLT5zZXQuYmxvYnNbQkxPQl9LRVlfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2VuZGlmCiAgIGNhc2UgQ1VSTE9QVF9TU0xLRVlUWVBFOgogICAgIC8qCkBAIC0xNzc1LDE2ICsxODQ5LDkgQEAKICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogCiAgICAgLyogT2J2aW91c2x5IHBlb3BsZSBhcmUgbm90IHJlYWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdG9vIG1hbnkgdGhvdWdodAotICAgICAgIHRoaXMgYXJndW1lbnQgdG9vayBhIGJvb2xlYW4gd2hlbiBpdCB3YXNuJ3QgYW5kIG1pc3VzZWQgaXQuIFdlIHRodXMgYmFuCi0gICAgICAgMSBhcyBhIHNlbnNpYmxlIGlucHV0IGFuZCB3ZSB3YXJuIGFib3V0IGl0cyB1c2UuIFRoZW4gd2Ugb25seSBoYXZlIHRoZQotICAgICAgIDIgYWN0aW9uIGludGVybmFsbHkgc3RvcmVkIGFzIFRSVUUuICovCi0KLSAgICBpZigxID09IGFyZykgewotICAgICAgZmFpbGYoZGF0YSwgIkNVUkxPUFRfU1NMX1ZFUklGWUhPU1Qgbm8gbG9uZ2VyIHN1cHBvcnRzIDEgYXMgdmFsdWUhIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwotICAgIH0KLQotICAgIGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlob3N0ID0gKDAgIT0gYXJnKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICB0aGlzIGFyZ3VtZW50IHRvb2sgYSBib29sZWFuIHdoZW4gaXQgd2Fzbid0IGFuZCBtaXN1c2VkIGl0LgorICAgICAgIFRyZWF0IDEgYW5kIDIgdGhlIHNhbWUgKi8KKyAgICBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5aG9zdCA9IChib29sKSgoYXJnICYgMykgPyBUUlVFIDogRkFMU0UpOwogCiAgICAgLyogVXBkYXRlIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3NsX2NvbmZpZy4gKi8KICAgICBpZihkYXRhLT5jb25uKSB7CkBAIC0xNzk5LDE3ICsxODY2LDggQEAKICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogCi0gICAgLyogT2J2aW91c2x5IHBlb3BsZSBhcmUgbm90IHJlYWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdG9vIG1hbnkgdGhvdWdodAotICAgICAgIHRoaXMgYXJndW1lbnQgdG9vayBhIGJvb2xlYW4gd2hlbiBpdCB3YXNuJ3QgYW5kIG1pc3VzZWQgaXQuIFdlIHRodXMgYmFuCi0gICAgICAgMSBhcyBhIHNlbnNpYmxlIGlucHV0IGFuZCB3ZSB3YXJuIGFib3V0IGl0cyB1c2UuIFRoZW4gd2Ugb25seSBoYXZlIHRoZQotICAgICAgIDIgYWN0aW9uIGludGVybmFsbHkgc3RvcmVkIGFzIFRSVUUuICovCi0KLSAgICBpZigxID09IGFyZykgewotICAgICAgZmFpbGYoZGF0YSwgIkNVUkxPUFRfU1NMX1ZFUklGWUhPU1Qgbm8gbG9uZ2VyIHN1cHBvcnRzIDEgYXMgdmFsdWUhIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwotICAgIH0KLQotICAgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS52ZXJpZnlob3N0ID0gKDAgIT0gYXJnKT9UUlVFOkZBTFNFOworICAgIC8qIFRyZWF0IGJvdGggMSBhbmQgMiBhcyBUUlVFICovCisgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeWhvc3QgPSAoYm9vbCkoKGFyZyAmIDMpP1RSVUU6RkFMU0UpOwogCiAgICAgLyogVXBkYXRlIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gcHJveHlfc3NsX2NvbmZpZy4gKi8KICAgICBpZihkYXRhLT5jb25uKSB7CkBAIC0xOTc4LDYgKzIwMzYsMzAgQEAKICAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfT1JJR10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0lTU1VFUkNFUlRfQkxPQjoKKyAgICAvKgorICAgICAqIEJsb2IgdGhhdCBob2xkcyBJc3N1ZXIgY2VydGlmaWNhdGUgdG8gY2hlY2sgY2VydGlmaWNhdGVzIGlzc3VlcgorICAgICAqLworICAgIHJlc3VsdCA9IEN1cmxfc2V0YmxvYm9wdCgmZGF0YS0+c2V0LmJsb2JzW0JMT0JfU1NMX0lTU1VFUkNFUlRfT1JJR10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgc3RydWN0IGN1cmxfYmxvYiAqKSk7CisgICAgYnJlYWs7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBjYXNlIENVUkxPUFRfUFJPWFlfSVNTVUVSQ0VSVDoKKyAgICAvKgorICAgICAqIFNldCBJc3N1ZXIgY2VydGlmaWNhdGUgZmlsZQorICAgICAqIHRvIGNoZWNrIGNlcnRpZmljYXRlcyBpc3N1ZXIKKyAgICAgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9JU1NVRVJDRVJUX0JMT0I6CisgICAgLyoKKyAgICAgKiBCbG9iIHRoYXQgaG9sZHMgSXNzdWVyIGNlcnRpZmljYXRlIHRvIGNoZWNrIGNlcnRpZmljYXRlcyBpc3N1ZXIKKyAgICAgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldGJsb2JvcHQoJmRhdGEtPnNldC5ibG9ic1tCTE9CX1NTTF9JU1NVRVJDRVJUX1BST1hZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBzdHJ1Y3QgY3VybF9ibG9iICopKTsKKyAgICBicmVhazsKKyNlbmRpZgogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVEVMTkVUCiAgIGNhc2UgQ1VSTE9QVF9URUxORVRPUFRJT05TOgogICAgIC8qCkBAIC0yMDAxLDcgKzIwODMsNyBAQAogICAgICAgYXJnID0gUkVBREJVRkZFUl9NSU47CiAKICAgICAvKiBSZXNpemUgaWYgbmV3IHNpemUgKi8KLSAgICBpZihhcmcgIT0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplKSB7CisgICAgaWYoKGFyZyAhPSBkYXRhLT5zZXQuYnVmZmVyX3NpemUpICYmIGRhdGEtPnN0YXRlLmJ1ZmZlcikgewogICAgICAgY2hhciAqbmV3YnVmZiA9IHJlYWxsb2MoZGF0YS0+c3RhdGUuYnVmZmVyLCBhcmcgKyAxKTsKICAgICAgIGlmKCFuZXdidWZmKSB7CiAgICAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiByZWFsbG9jIG9mIGJ1ZmZlciBmYWlsZWRcbiIpKTsKQEAgLTIxMzEsNyArMjIxMyw3IEBACiAgICAgICogTWFrZSB0cmFuc2ZlcnMgYXR0ZW1wdCB0byB1c2UgU1NML1RMUy4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMVVNFU1NMX05PTkUpIHx8IChhcmcgPiBDVVJMVVNFU1NMX0FMTCkpCisgICAgaWYoKGFyZyA8IENVUkxVU0VTU0xfTk9ORSkgfHwgKGFyZyA+PSBDVVJMVVNFU1NMX0xBU1QpKQogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICBkYXRhLT5zZXQudXNlX3NzbCA9IChjdXJsX3VzZXNzbClhcmc7CiAgICAgYnJlYWs7CkBAIC0yMTQxLDYgKzIyMjMsOSBAQAogICAgIGRhdGEtPnNldC5zc2wuZW5hYmxlX2JlYXN0ID0KICAgICAgIChib29sKSgoYXJnJkNVUkxTU0xPUFRfQUxMT1dfQkVBU1QpID8gVFJVRSA6IEZBTFNFKTsKICAgICBkYXRhLT5zZXQuc3NsLm5vX3Jldm9rZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBkYXRhLT5zZXQuc3NsLm5vX3BhcnRpYWxjaGFpbiA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUEFSVElBTENIQUlOKTsKKyAgICBkYXRhLT5zZXQuc3NsLnJldm9rZV9iZXN0X2VmZm9ydCA9ICEhKGFyZyAmIENVUkxTU0xPUFRfUkVWT0tFX0JFU1RfRUZGT1JUKTsKKyAgICBkYXRhLT5zZXQuc3NsLm5hdGl2ZV9jYV9zdG9yZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTkFUSVZFX0NBKTsKICAgICBicmVhazsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKQEAgLTIxNDksNiArMjIzNCwxMCBAQAogICAgIGRhdGEtPnNldC5wcm94eV9zc2wuZW5hYmxlX2JlYXN0ID0KICAgICAgIChib29sKSgoYXJnJkNVUkxTU0xPUFRfQUxMT1dfQkVBU1QpID8gVFJVRSA6IEZBTFNFKTsKICAgICBkYXRhLT5zZXQucHJveHlfc3NsLm5vX3Jldm9rZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLm5vX3BhcnRpYWxjaGFpbiA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUEFSVElBTENIQUlOKTsKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLm5hdGl2ZV9jYV9zdG9yZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTkFUSVZFX0NBKTsKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLnJldm9rZV9iZXN0X2VmZm9ydCA9CisgICAgICAhIShhcmcgJiBDVVJMU1NMT1BUX1JFVk9LRV9CRVNUX0VGRk9SVCk7CiAgICAgYnJlYWs7CiAjZW5kaWYKIApAQCAtMjI1MSw3ICsyMzQwLDkgQEAKICAgY2FzZSBDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEU6CiAgICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnNlc3Npb25pZCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpID8KICAgICAgIFRSVUUgOiBGQUxTRTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnNlc3Npb25pZCA9IGRhdGEtPnNldC5zc2wucHJpbWFyeS5zZXNzaW9uaWQ7CisjZW5kaWYKICAgICBicmVhazsKIAogI2lmZGVmIFVTRV9TU0gKQEAgLTIyOTQsNyArMjM4NSw3IEBACiAKICAgY2FzZSBDVVJMT1BUX1NTSF9LRVlGVU5DVElPTjoKICAgICAvKiBzZXR0aW5nIHRvIE5VTEwgaXMgZmluZSBzaW5jZSB0aGUgc3NoLmMgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgd2lsbAotICAgICAgIHRoZW4gcmV2ZXIgdG8gdXNlIHRoZSBpbnRlcm5hbCBkZWZhdWx0ICovCisgICAgICAgdGhlbiByZXZlcnQgdG8gdXNlIHRoZSBpbnRlcm5hbCBkZWZhdWx0ICovCiAgICAgZGF0YS0+c2V0LnNzaF9rZXlmdW5jID0gdmFfYXJnKHBhcmFtLCBjdXJsX3NzaGtleWNhbGxiYWNrKTsKICAgICBicmVhazsKIApAQCAtMjM3MSw4ICsyNDYyLDcgQEAKICAgY2FzZSBDVVJMT1BUX1JFRElSX1BST1RPQ09MUzoKICAgICAvKiBzZXQgdGhlIGJpdG1hc2sgZm9yIHRoZSBwcm90b2NvbHMgdGhhdCBsaWJjdXJsIGlzIGFsbG93ZWQgdG8gZm9sbG93IHRvLAogICAgICAgIGFzIGEgc3Vic2V0IG9mIHRoZSBDVVJMT1BUX1BST1RPQ09MUyBvbmVzLiBUaGF0IG1lYW5zIHRoZSBwcm90b2NvbCBuZWVkcwotICAgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uIERlZmF1bHRzCi0gICAgICAgdG8gYWxsIHByb3RvY29scyBleGNlcHQgRklMRSBhbmQgU0NQLiAqLworICAgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uICovCiAgICAgZGF0YS0+c2V0LnJlZGlyX3Byb3RvY29scyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAgICAgYnJlYWs7CiAKQEAgLTIzOTgsOCArMjQ4OCwxOCBAQAogICAgIC8qIFNldCB0aGUgbGlzdCBvZiBtYWlsIHJlY2lwaWVudHMgKi8KICAgICBkYXRhLT5zZXQubWFpbF9yY3B0ID0gdmFfYXJnKHBhcmFtLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX01BSUxfUkNQVF9BTExMT1dGQUlMUzoKKyAgICAvKiBhbGxvdyBSQ1BUIFRPIGNvbW1hbmQgdG8gZmFpbCBmb3Igc29tZSByZWNpcGllbnRzICovCisgICAgZGF0YS0+c2V0Lm1haWxfcmNwdF9hbGxvd2ZhaWxzID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CisgICAgYnJlYWs7CiAjZW5kaWYKIAorICBjYXNlIENVUkxPUFRfU0FTTF9BVVRIWklEOgorICAgIC8qIEF1dGhvcmlzYXRpb24gaWRlbnRpdHkgKGlkZW50aXR5IHRvIGFjdCBhcykgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU0FTTF9BVVRIWklEXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCiAgIGNhc2UgQ1VSTE9QVF9TQVNMX0lSOgogICAgIC8qIEVuYWJsZS9kaXNhYmxlIFNBU0wgaW5pdGlhbCByZXNwb25zZSAqLwogICAgIGRhdGEtPnNldC5zYXNsX2lyID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CkBAIC0yNTAzLDcgKzI2MDMsNyBAQAogCiAgIGNhc2UgQ1VSTE9QVF9SVFNQX1NFUlZFUl9DU0VROgogICAgIC8qIFNhbWUgYXMgdGhlIGFib3ZlLCBidXQgZm9yIHNlcnZlci1pbml0aWF0ZWQgcmVxdWVzdHMgKi8KLSAgICBkYXRhLT5zdGF0ZS5ydHNwX25leHRfY2xpZW50X0NTZXEgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9zZXJ2ZXJfQ1NlcSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAgICAgYnJlYWs7CiAKICAgY2FzZSBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBOgpAQCAtMjU0NCw5ICsyNjQ0LDExIEBACiAgIGNhc2UgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1VTRVJOQU1FOgogICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXSAmJgogICAgICAgICFkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlKQogICAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9TUlA7IC8qIGRlZmF1bHQgdG8gU1JQICovCisjZW5kaWYKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQ6CiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfT1JJR10sCkBAIC0yNTU3LDkgKzI2NTksMTEgQEAKICAgY2FzZSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQ6CiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfUFJPWFldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfUFJPWFldICYmCiAgICAgICAgIWRhdGEtPnNldC5wcm94eV9zc2wuYXV0aHR5cGUpCiAgICAgICBkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX1NSUDsgLyogZGVmYXVsdCB0byBTUlAgKi8KKyNlbmRpZgogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfVExTQVVUSF9UWVBFOgogICAgIGFyZ3B0ciA9IHZhX2FyZyhwYXJhbSwgY2hhciAqKTsKQEAgLTI1NjksNiArMjY3Myw3IEBACiAgICAgZWxzZQogICAgICAgZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9OT05FOwogICAgIGJyZWFrOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY2FzZSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRToKICAgICBhcmdwdHIgPSB2YV9hcmcocGFyYW0sIGNoYXIgKik7CiAgICAgaWYoIWFyZ3B0ciB8fApAQCAtMjU3OCwxOCArMjY4MywzNSBAQAogICAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9OT05FOwogICAgIGJyZWFrOwogI2VuZGlmCisjZW5kaWYKICNpZmRlZiBVU0VfQVJFUwogICBjYXNlIENVUkxPUFRfRE5TX1NFUlZFUlM6Ci0gICAgcmVzdWx0ID0gQ3VybF9zZXRfZG5zX3NlcnZlcnMoZGF0YSwgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX1NFUlZFUlNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXN1bHQgPSBDdXJsX3NldF9kbnNfc2VydmVycyhkYXRhLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfU0VSVkVSU10pOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfRE5TX0lOVEVSRkFDRToKLSAgICByZXN1bHQgPSBDdXJsX3NldF9kbnNfaW50ZXJmYWNlKGRhdGEsIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0ROU19JTlRFUkZBQ0VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXN1bHQgPSBDdXJsX3NldF9kbnNfaW50ZXJmYWNlKGRhdGEsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0ROU19JTlRFUkZBQ0VdKTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX0ROU19MT0NBTF9JUDQ6Ci0gICAgcmVzdWx0ID0gQ3VybF9zZXRfZG5zX2xvY2FsX2lwNChkYXRhLCB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfTE9DQUxfSVA0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gQ3VybF9zZXRfZG5zX2xvY2FsX2lwNChkYXRhLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfTE9DQUxfSVA0XSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9ETlNfTE9DQUxfSVA2OgotICAgIHJlc3VsdCA9IEN1cmxfc2V0X2Ruc19sb2NhbF9pcDYoZGF0YSwgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX0xPQ0FMX0lQNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdCA9IEN1cmxfc2V0X2Ruc19sb2NhbF9pcDYoZGF0YSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX0xPQ0FMX0lQNl0pOwogICAgIGJyZWFrOwogI2VuZGlmCiAgIGNhc2UgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFOgpAQCAtMjYxNSwxNCArMjczNywxMiBAQAogICAgIHJlc3VsdCA9IENVUkxFX05PVF9CVUlMVF9JTjsKICNlbmRpZgogICAgIGJyZWFrOwotI2lmZGVmIFVTRV9OR0hUVFAyCiAgIGNhc2UgQ1VSTE9QVF9TU0xfRU5BQkxFX05QTjoKICAgICBkYXRhLT5zZXQuc3NsX2VuYWJsZV9ucG4gPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1NTTF9FTkFCTEVfQUxQTjoKICAgICBkYXRhLT5zZXQuc3NsX2VuYWJsZV9hbHBuID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CiAgICAgYnJlYWs7Ci0jZW5kaWYKICNpZmRlZiBVU0VfVU5JWF9TT0NLRVRTCiAgIGNhc2UgQ1VSTE9QVF9VTklYX1NPQ0tFVF9QQVRIOgogICAgIGRhdGEtPnNldC5hYnN0cmFjdF91bml4X3NvY2tldCA9IEZBTFNFOwpAQCAtMjcyOCw3ICsyODQ4LDggQEAKICAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQUxUU1ZDXSwgYXJncHRyKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICh2b2lkKUN1cmxfYWx0c3ZjX2xvYWQoZGF0YS0+YXNpLCBhcmdwdHIpOworICAgIGlmKGFyZ3B0cikKKyAgICAgICh2b2lkKUN1cmxfYWx0c3ZjX2xvYWQoZGF0YS0+YXNpLCBhcmdwdHIpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfQUxUU1ZDX0NUUkw6CiAgICAgaWYoIWRhdGEtPmFzaSkgewpAQCAtMjc3MCw3ICsyODkxLDcgQEAKIAogICB2YV9zdGFydChhcmcsIHRhZyk7CiAKLSAgcmVzdWx0ID0gdnNldG9wdChkYXRhLCB0YWcsIGFyZyk7CisgIHJlc3VsdCA9IEN1cmxfdnNldG9wdChkYXRhLCB0YWcsIGFyZyk7CiAKICAgdmFfZW5kKGFyZyk7CiAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXRvcHQuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCmluZGV4IGM2NThlMDQuLjVmYzQzNjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMyw3ICsyMyw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBDVVJMY29kZSBDdXJsX3NldHN0cm9wdChjaGFyICoqY2hhcnAsIGNvbnN0IGNoYXIgKnMpOwotQ1VSTGNvZGUgQ3VybF92c2V0b3B0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxvcHRpb24gb3B0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJnKTsKK0NVUkxjb2RlIEN1cmxfc2V0YmxvYm9wdChzdHJ1Y3QgY3VybF9ibG9iICoqYmxvYnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqYmxvYik7CitDVVJMY29kZSBDdXJsX3ZzZXRvcHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgQ1VSTG9wdGlvbiBvcHRpb24sIHZhX2xpc3QgYXJnKTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFVE9QVF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC1vczQwMC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2V0dXAtb3M0MDAuaAppbmRleCBhM2MyYTdiLi5iNjkzY2IzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC1vczQwMC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLW9zNDAwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIwMCwxNyArMjAwLDIxIEBACiAvKiBTb21lIHNvY2tldCBmdW5jdGlvbnMgbXVzdCBiZSB3cmFwcGVkIHRvIHByb2Nlc3MgdGV4dHVhbCBhZGRyZXNzZXMKICAgIGxpa2UgQUZfVU5JWC4gKi8KIAotZXh0ZXJuIGludCBDdXJsX29zNDAwX2Nvbm5lY3QoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKiBkZXN0YWRkciwgaW50IGFkZHJsZW4pOwotZXh0ZXJuIGludCBDdXJsX29zNDAwX2JpbmQoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKiBsb2NhbGFkZHIsIGludCBhZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9jb25uZWN0KGludCBzZCwgc3RydWN0IHNvY2thZGRyICpkZXN0YWRkciwgaW50IGFkZHJsZW4pOworZXh0ZXJuIGludCBDdXJsX29zNDAwX2JpbmQoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKmxvY2FsYWRkciwgaW50IGFkZHJsZW4pOwogZXh0ZXJuIGludCBDdXJsX29zNDAwX3NlbmR0byhpbnQgc2QsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgaW50IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBkc3RhZGRyLCBpbnQgYWRkcmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZHN0YWRkciwgaW50IGFkZHJsZW4pOwogZXh0ZXJuIGludCBDdXJsX29zNDAwX3JlY3Zmcm9tKGludCBzZCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tYWRkciwgaW50ICphZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9nZXRwZWVybmFtZShpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9nZXRzb2NrbmFtZShpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKTsKIAogI2RlZmluZSBjb25uZWN0ICAgICAgICAgICAgICAgICBDdXJsX29zNDAwX2Nvbm5lY3QKICNkZWZpbmUgYmluZCAgICAgICAgICAgICAgICAgICAgQ3VybF9vczQwMF9iaW5kCiAjZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfc2VuZHRvCiAjZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfcmVjdmZyb20KKyNkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICAgICAgQ3VybF9vczQwMF9nZXRwZWVybmFtZQorI2RlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgICAgICBDdXJsX29zNDAwX2dldHNvY2tuYW1lCiAKICNpZmRlZiBIQVZFX0xJQloKICNkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgICAgQ3VybF9vczQwMF96bGliVmVyc2lvbgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2V0dXAtdm1zLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC12bXMuaAppbmRleCA2YzQ1NGFlLi4wZTM5YzlmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC12bXMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC12bXMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzMsNyArNzMsNyBAQAogIyAgIGVuZGlmCiAjZW5kaWYKIAotICAgIHN0cnVjdCBwYXNzd2QgKiBkZWNjX2dldHB3dWlkKHVpZF90IHVpZCk7CisgICAgc3RydWN0IHBhc3N3ZCAqZGVjY19nZXRwd3VpZCh1aWRfdCB1aWQpOwogCiAjaWZkZWYgX19ERUNDCiAjICAgaWYgX19JTklUSUFMX1BPSU5URVJfU0laRSA9PSAzMgpAQCAtMTM4LDkgKzEzOCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGFzc3dkIHZtc19wYXNzd2RfY2FjaGU7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFzc3dkICogdm1zX2dldHB3dWlkKHVpZF90IHVpZCkKK3N0YXRpYyBzdHJ1Y3QgcGFzc3dkICp2bXNfZ2V0cHd1aWQodWlkX3QgdWlkKQogewotICBzdHJ1Y3QgcGFzc3dkICogbXlfcGFzc3dkOworICBzdHJ1Y3QgcGFzc3dkICpteV9wYXNzd2Q7CiAKIC8qIEhhY2sgbmVlZGVkIHRvIHN1cHBvcnQgNjQgYml0IGJ1aWxkcywgZGVjY19nZXRwd25hbSBpcyAzMiBiaXQgb25seSAqLwogI2lmZGVmIF9fREVDQwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2V0dXAtd2luMzIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLXdpbjMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViNTg0NwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLXdpbjMyLmgKQEAgLTAsMCArMSwxMjMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU0VUVVBfV0lOMzJfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9TRVRVUF9XSU4zMl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJbmNsdWRlIGhlYWRlciBmaWxlcyBmb3Igd2luZG93cyBidWlsZHMgYmVmb3JlIHJlZGVmaW5pbmcgYW55dGhpbmcuCisgKiBVc2UgdGhpcyBwcmVwcm9jZXNzb3IgYmxvY2sgb25seSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgd2luZG93cy5oLAorICogd2luc29jazIuaCwgd3MydGNwaXAuaCBvciB3aW5zb2NrLmguIEFueSBvdGhlciB3aW5kb3dzIHRoaW5nIGJlbG9uZ3MKKyAqIHRvIGFueSBvdGhlciBmdXJ0aGVyIGFuZCBpbmRlcGVuZGVudCBibG9jay4gIFVuZGVyIEN5Z3dpbiB0aGluZ3Mgd29yaworICoganVzdCBhcyB1bmRlciBsaW51eCAoZS5nLiA8c3lzL3NvY2tldC5oPikgYW5kIHRoZSB3aW5zb2NrIGhlYWRlcnMgc2hvdWxkCisgKiBuZXZlciBiZSBpbmNsdWRlZCB3aGVuIF9fQ1lHV0lOX18gaXMgZGVmaW5lZC4gIGNvbmZpZ3VyZSBzY3JpcHQgdGFrZXMKKyAqIGNhcmUgb2YgdGhpcywgbm90IGRlZmluaW5nIEhBVkVfV0lORE9XU19ILCBIQVZFX1dJTlNPQ0tfSCwgSEFWRV9XSU5TT0NLMl9ILAorICogbmVpdGhlciBIQVZFX1dTMlRDUElQX0ggd2hlbiBfX0NZR1dJTl9fIGlzIGRlZmluZWQuCisgKi8KKworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZiBkZWZpbmVkKFVOSUNPREUpICYmICFkZWZpbmVkKF9VTklDT0RFKQorIyAgICBkZWZpbmUgX1VOSUNPREUKKyMgIGVuZGlmCisjICBpZiBkZWZpbmVkKF9VTklDT0RFKSAmJiAhZGVmaW5lZChVTklDT0RFKQorIyAgICBkZWZpbmUgVU5JQ09ERQorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmVycm9yLmg+CisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgICAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgICAgaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjICAgICAgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyMgICAgZW5kaWYKKyMgIGVsc2UKKyMgICAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgICBpbmNsdWRlIDx3aW5zb2NrLmg+CisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaW5jbHVkZSA8dGNoYXIuaD4KKyMgIGlmZGVmIFVOSUNPREUKKyAgICAgdHlwZWRlZiB3Y2hhcl90ICooKmN1cmxfd2NzZHVwX2NhbGxiYWNrKShjb25zdCB3Y2hhcl90ICpzdHIpOworIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogRGVmaW5lIFVTRV9XSU5TT0NLIHRvIDIgaWYgd2UgaGF2ZSBhbmQgdXNlIFdJTlNPQ0syIEFQSSwgZWxzZQorICogZGVmaW5lIFVTRV9XSU5TT0NLIHRvIDEgaWYgd2UgaGF2ZSBhbmQgdXNlIFdJTlNPQ0sgIEFQSSwgZWxzZQorICogdW5kZWZpbmUgVVNFX1dJTlNPQ0suCisgKi8KKworI3VuZGVmIFVTRV9XSU5TT0NLCisKKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgIGRlZmluZSBVU0VfV0lOU09DSyAyCisjZWxzZQorIyAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgZGVmaW5lIFVTRV9XSU5TT0NLIDEKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIERlZmluZSBfV0lOMzJfV0lOTlRfW09TXSBzeW1ib2xzIGJlY2F1c2Ugbm90IGFsbCBXaW5kb3dzIGJ1aWxkIHN5c3RlbXMgaGF2ZQorICogdGhvc2Ugc3ltYm9scyB0byBjb21wYXJlIGFnYWluc3QsIGFuZCBldmVuIHRob3NlIHRoYXQgZG8gbWF5IGJlIG1pc3NpbmcKKyAqIG5ld2VyIHN5bWJvbHMuCisgKi8KKworI2lmbmRlZiBfV0lOMzJfV0lOTlRfTlQ0CisjZGVmaW5lIF9XSU4zMl9XSU5OVF9OVDQgICAgICAgICAgICAweDA0MDAgICAvKiBXaW5kb3dzIE5UIDQuMCAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XSU4ySworI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lOMksgICAgICAgICAgMHgwNTAwICAgLyogV2luZG93cyAyMDAwICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dJTlhQCisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU5YUCAgICAgICAgICAweDA1MDEgICAvKiBXaW5kb3dzIFhQICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dTMDMKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX1dTMDMgICAgICAgICAgIDB4MDUwMiAgIC8qIFdpbmRvd3MgU2VydmVyIDIwMDMgKi8KKyNlbmRpZgorI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lONgorI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lONiAgICAgICAgICAgMHgwNjAwICAgLyogV2luZG93cyBWaXN0YSAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9WSVNUQQorI2RlZmluZSBfV0lOMzJfV0lOTlRfVklTVEEgICAgICAgICAgMHgwNjAwICAgLyogV2luZG93cyBWaXN0YSAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XUzA4CisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XUzA4ICAgICAgICAgICAweDA2MDAgICAvKiBXaW5kb3dzIFNlcnZlciAyMDA4ICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX0xPTkdIT1JOCisjZGVmaW5lIF9XSU4zMl9XSU5OVF9MT05HSE9STiAgICAgICAweDA2MDAgICAvKiBXaW5kb3dzIFZpc3RhICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dJTjcKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX1dJTjcgICAgICAgICAgIDB4MDYwMSAgIC8qIFdpbmRvd3MgNyAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XSU44CisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU44ICAgICAgICAgICAweDA2MDIgICAvKiBXaW5kb3dzIDggKi8KKyNlbmRpZgorI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lOQkxVRQorI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lOQkxVRSAgICAgICAgMHgwNjAzICAgLyogV2luZG93cyA4LjEgKi8KKyNlbmRpZgorI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lOVEhSRVNIT0xECisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU5USFJFU0hPTEQgICAweDBBMDAgICAvKiBXaW5kb3dzIDEwICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dJTjEwCisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU4xMCAgICAgICAgICAweDBBMDAgICAvKiBXaW5kb3dzIDEwICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFVFVQX1dJTjMyX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NoYTI1Ni5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhMjU2LmMKaW5kZXggZjkyODdhZi4uZWU1ZDI3MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhMjU2LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhMjU2LmMKQEAgLTUsNyArNSw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRmxvcmluIFBldHJpdWMsIDxwZXRyaXVjLmZsb3JpbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIEZsb3JpbiBQZXRyaXVjLCA8cGV0cml1Yy5mbG9yaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzUsMTYgKzM2LDIxMCBAQAogI2RlZmluZSBVU0VfT1BFTlNTTF9TSEEyNTYKICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfT1BFTlNTTCAqLwogCi0jaWZkZWYgVVNFX09QRU5TU0xfU0hBMjU2CisjaWZkZWYgVVNFX01CRURUTFMKKyNpbmNsdWRlIDxtYmVkdGxzL3ZlcnNpb24uaD4KKworI2lmKE1CRURUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMjA3MDAwMCkKKyAgI2RlZmluZSBIQVNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TCisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfTUJFRFRMUyAqLworCisvKiBQbGVhc2Uga2VlcCB0aGUgU1NMIGJhY2tlbmQtc3BlY2lmaWMgI2lmIGJyYW5jaGVzIGluIHRoaXMgb3JkZXI6CisgKgorICogMS4gVVNFX09QRU5TU0wKKyAqIDIuIFVTRV9HTlVUTFNfTkVUVExFCisgKiAzLiBVU0VfR05VVExTCisgKiA0LiBVU0VfTUJFRFRMUworICogNS4gVVNFX0NPTU1PTl9DUllQVE8KKyAqIDYuIFVTRV9XSU4zMl9DUllQVE8KKyAqCisgKiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgc2FtZSBTU0wgYnJhbmNoIGdldHMgYWN0aXZhdGVkIHRocm91Z2hvdXQgdGhpcyBzb3VyY2UKKyAqIGZpbGUgZXZlbiBpZiBtdWx0aXBsZSBiYWNrZW5kcyBhcmUgZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lLgorICovCisKKyNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMX1NIQTI1NikKKwogLyogV2hlbiBPcGVuU1NMIGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhlIFNIQTI1Ni1mdW5jdGlvbiBmcm9tIE9wZW5TU0wgKi8KICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorCisjZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFNfTkVUVExFKQorCisjaW5jbHVkZSA8bmV0dGxlL3NoYS5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBzdHJ1Y3Qgc2hhMjU2X2N0eCBTSEEyNTZfQ1RYOworCitzdGF0aWMgdm9pZCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjdHgpCit7CisgIHNoYTI1Nl9pbml0KGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICBzaGEyNTZfdXBkYXRlKGN0eCwgbGVuZ3RoLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgU0hBMjU2X0NUWCAqY3R4KQoreworICBzaGEyNTZfZGlnZXN0KGN0eCwgU0hBMjU2X0RJR0VTVF9TSVpFLCBkaWdlc3QpOworfQorCisjZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFMpCisKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3R5cGVkZWYgZ2NyeV9tZF9oZF90IFNIQTI1Nl9DVFg7CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgZ2NyeV9tZF9vcGVuKGN0eCwgR0NSWV9NRF9TSEEyNTYsIDApOworfQorCitzdGF0aWMgdm9pZCBTSEEyNTZfVXBkYXRlKFNIQTI1Nl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKyAgZ2NyeV9tZF93cml0ZSgqY3R4LCBkYXRhLCBsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCBTSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBTSEEyNTZfQ1RYICpjdHgpCit7CisgIG1lbWNweShkaWdlc3QsIGdjcnlfbWRfcmVhZCgqY3R4LCAwKSwgU0hBMjU2X0RJR0VTVF9MRU5HVEgpOworICBnY3J5X21kX2Nsb3NlKCpjdHgpOworfQorCisjZWxpZiBkZWZpbmVkKFVTRV9NQkVEVExTKQorCisjaW5jbHVkZSA8bWJlZHRscy9zaGEyNTYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3R5cGVkZWYgbWJlZHRsc19zaGEyNTZfY29udGV4dCBTSEEyNTZfQ1RYOworCitzdGF0aWMgdm9pZCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjdHgpCit7CisjaWYgIWRlZmluZWQoSEFTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19zaGEyNTZfc3RhcnRzKGN0eCwgMCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19zaGEyNTZfc3RhcnRzX3JldChjdHgsIDApOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworI2lmICFkZWZpbmVkKEhBU19SRVNVTFRfQ09ERV9CQVNFRF9GVU5DVElPTlMpCisgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZShjdHgsIGRhdGEsIGxlbmd0aCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19zaGEyNTZfdXBkYXRlX3JldChjdHgsIGRhdGEsIGxlbmd0aCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgU0hBMjU2X0NUWCAqY3R4KQoreworI2lmICFkZWZpbmVkKEhBU19SRVNVTFRfQ09ERV9CQVNFRF9GVU5DVElPTlMpCisgIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaChjdHgsIGRpZ2VzdCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19zaGEyNTZfZmluaXNoX3JldChjdHgsIGRpZ2VzdCk7CisjZW5kaWYKK30KKworI2VsaWYgKGRlZmluZWQoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCisgICAgICAgICAgICAgIChfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTA0MCkpIHx8IFwKKyAgICAgIChkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpICYmIFwKKyAgICAgICAgICAgICAgKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMjAwMDApKQorCisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBDQ19TSEEyNTZfQ1RYIFNIQTI1Nl9DVFg7CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgKHZvaWQpIENDX1NIQTI1Nl9Jbml0KGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICAodm9pZCkgQ0NfU0hBMjU2X1VwZGF0ZShjdHgsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgKHZvaWQpIENDX1NIQTI1Nl9GaW5hbChkaWdlc3QsIGN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKworI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisKK3N0cnVjdCBzaGEyNTZfY3R4IHsKKyAgSENSWVBUUFJPViBoQ3J5cHRQcm92OworICBIQ1JZUFRIQVNIIGhIYXNoOworfTsKK3R5cGVkZWYgc3RydWN0IHNoYTI1Nl9jdHggU0hBMjU2X0NUWDsKKworI2lmICFkZWZpbmVkKENBTEdfU0hBXzI1NikKKyNkZWZpbmUgQ0FMR19TSEFfMjU2IDB4MDAwMDgwMGMKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjdHgpCit7CisgIGlmKENyeXB0QWNxdWlyZUNvbnRleHQoJmN0eC0+aENyeXB0UHJvdiwgTlVMTCwgTlVMTCwgUFJPVl9SU0FfQUVTLAorICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQgfCBDUllQVF9TSUxFTlQpKSB7CisgICAgQ3J5cHRDcmVhdGVIYXNoKGN0eC0+aENyeXB0UHJvdiwgQ0FMR19TSEFfMjU2LCAwLCAwLCAmY3R4LT5oSGFzaCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgU0hBMjU2X1VwZGF0ZShTSEEyNTZfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisgIENyeXB0SGFzaERhdGEoY3R4LT5oSGFzaCwgKHVuc2lnbmVkIGNoYXIgKikgZGF0YSwgbGVuZ3RoLCAwKTsKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgU0hBMjU2X0NUWCAqY3R4KQoreworICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IDA7CisKKyAgQ3J5cHRHZXRIYXNoUGFyYW0oY3R4LT5oSGFzaCwgSFBfSEFTSFZBTCwgTlVMTCwgJmxlbmd0aCwgMCk7CisgIGlmKGxlbmd0aCA9PSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKKyAgICBDcnlwdEdldEhhc2hQYXJhbShjdHgtPmhIYXNoLCBIUF9IQVNIVkFMLCBkaWdlc3QsICZsZW5ndGgsIDApOworCisgIGlmKGN0eC0+aEhhc2gpCisgICAgQ3J5cHREZXN0cm95SGFzaChjdHgtPmhIYXNoKTsKKworICBpZihjdHgtPmhDcnlwdFByb3YpCisgICAgQ3J5cHRSZWxlYXNlQ29udGV4dChjdHgtPmhDcnlwdFByb3YsIDApOworfQorCiAjZWxzZQogCiAvKiBXaGVuIG5vIG90aGVyIGNyeXB0byBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcyBjb2RlIHNlZ21lbnQgKi8KIAotLyogPT09PT0gc3RhcnQgLSBwdWJsaWMgZG9tYWluIFNIQTI1NiBpbXBsZW1lbnRhdGlvbiA9PT09PSAqLwogLyogVGhpcyBpcyBiYXNlZCBvbiBTSEEyNTYgaW1wbGVtZW50YXRpb24gaW4gTGliVG9tQ3J5cHQgdGhhdCB3YXMgcmVsZWFzZWQgaW50bwogICogcHVibGljIGRvbWFpbiBieSBUb20gU3QgRGVuaXMuICovCiAKQEAgLTg2LDcgKzI4MSw3IEBACiB9IHdoaWxlKDApCiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3Qgc2hhMjU2X3N0YXRlIHsKK3N0cnVjdCBzaGEyNTZfc3RhdGUgewogI2lmZGVmIEhBVkVfTE9OR0xPTkcKICAgdW5zaWduZWQgbG9uZyBsb25nIGxlbmd0aDsKICNlbHNlCkBAIC05NCw4ICsyODksMTAgQEAKICNlbmRpZgogICB1bnNpZ25lZCBsb25nIHN0YXRlWzhdLCBjdXJsZW47CiAgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKLX0gU0hBMjU2X0NUWDsKLS8qIHRoZSBLIGFycmF5ICovCit9OwordHlwZWRlZiBzdHJ1Y3Qgc2hhMjU2X3N0YXRlIFNIQTI1Nl9DVFg7CisKKy8qIFRoZSBLIGFycmF5ICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBLWzY0XSA9IHsKICAgMHg0MjhhMmY5OFVMLCAweDcxMzc0NDkxVUwsIDB4YjVjMGZiY2ZVTCwgMHhlOWI1ZGJhNVVMLCAweDM5NTZjMjViVUwsCiAgIDB4NTlmMTExZjFVTCwgMHg5MjNmODJhNFVMLCAweGFiMWM1ZWQ1VUwsIDB4ZDgwN2FhOThVTCwgMHgxMjgzNWIwMVVMLApAQCAtMTExLDYgKzMwOCw3IEBACiAgIDB4NjgyZTZmZjNVTCwgMHg3NDhmODJlZVVMLCAweDc4YTU2MzZmVUwsIDB4ODRjODc4MTRVTCwgMHg4Y2M3MDIwOFVMLAogICAweDkwYmVmZmZhVUwsIDB4YTQ1MDZjZWJVTCwgMHhiZWY5YTNmN1VMLCAweGM2NzE3OGYyVUwKIH07CisKIC8qIFZhcmlvdXMgbG9naWNhbCBmdW5jdGlvbnMgKi8KICNkZWZpbmUgUk9SYyh4LCB5KSBcCiAoKCgoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHhGRkZGRkZGRlVMKSA+PiAodW5zaWduZWQgbG9uZykoKHkpICYgMzEpKSB8IFwKQEAgLTEyMywxMyArMzIxLDE1IEBACiAjZGVmaW5lIFNpZ21hMSh4KSAgIChTKHgsIDYpIF4gUyh4LCAxMSkgXiBTKHgsIDI1KSkKICNkZWZpbmUgR2FtbWEwKHgpICAgKFMoeCwgNykgXiBTKHgsIDE4KSBeIFIoeCwgMykpCiAjZGVmaW5lIEdhbW1hMSh4KSAgIChTKHgsIDE3KSBeIFMoeCwgMTkpIF4gUih4LCAxMCkpCi0vKiBjb21wcmVzcyA1MTItYml0cyAqLworCisvKiBDb21wcmVzcyA1MTItYml0cyAqLwogc3RhdGljIGludCBzaGEyNTZfY29tcHJlc3Moc3RydWN0IHNoYTI1Nl9zdGF0ZSAqbWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAgIHVuc2lnbmVkIGxvbmcgU1s4XSwgV1s2NF07CiAgIGludCBpOwotICAvKiBjb3B5IHN0YXRlIGludG8gUyAqLworCisgIC8qIENvcHkgc3RhdGUgaW50byBTICovCiAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgewogICAgIFNbaV0gPSBtZC0+c3RhdGVbaV07CiAgIH0KQEAgLTE0MSw2ICszNDEsNyBAQAogICAgIFdbaV0gPSBHYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBHYW1tYTAoV1tpIC0gMTVdKSArCiAgICAgICBXW2kgLSAxNl07CiAgIH0KKwogICAvKiBDb21wcmVzcyAqLwogI2RlZmluZSBSTkQoYSxiLGMsZCxlLGYsZyxoLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgdW5zaWduZWQgbG9uZyB0MCA9IGggKyBTaWdtYTEoZSkgKyBDaChlLCBmLCBnKSArIEtbaV0gKyBXW2ldOyBcCkBAIC0xNTMsMTIgKzM1NCwxNSBAQAogICAgIHQgPSBTWzddOyBTWzddID0gU1s2XTsgU1s2XSA9IFNbNV07IFNbNV0gPSBTWzRdOwogICAgIFNbNF0gPSBTWzNdOyBTWzNdID0gU1syXTsgU1syXSA9IFNbMV07IFNbMV0gPSBTWzBdOyBTWzBdID0gdDsKICAgfQotICAvKiBmZWVkYmFjayAqLworCisgIC8qIEZlZWRiYWNrICovCiAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgewogICAgIG1kLT5zdGF0ZVtpXSA9IG1kLT5zdGF0ZVtpXSArIFNbaV07CiAgIH0KKwogICByZXR1cm4gMDsKIH0KKwogLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdGF0ZSAqLwogc3RhdGljIHZvaWQgU0hBMjU2X0luaXQoc3RydWN0IHNoYTI1Nl9zdGF0ZSAqbWQpCiB7CkBAIC0xNzMsNyArMzc3LDggQEAKICAgbWQtPnN0YXRlWzZdID0gMHgxRjgzRDlBQlVMOwogICBtZC0+c3RhdGVbN10gPSAweDVCRTBDRDE5VUw7CiB9Ci0vKioKKworLyoKICAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCiAgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCiAgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKQEAgLTE4NSw2ICszOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4pCiB7CiAgIHVuc2lnbmVkIGxvbmcgbjsKKwogI2RlZmluZSBibG9ja19zaXplIDY0CiAgIGlmKG1kLT5jdXJsZW4gPiBzaXplb2YobWQtPmJ1ZikpCiAgICAgcmV0dXJuIC0xOwpAQCAtMjEwLDkgKzQxNiwxMSBAQAogICAgICAgfQogICAgIH0KICAgfQorCiAgIHJldHVybiAwOwogfQotLyoqCisKKy8qCiAgICBUZXJtaW5hdGUgdGhlIGhhc2ggdG8gZ2V0IHRoZSBkaWdlc3QKICAgIEBwYXJhbSBtZCAgVGhlIGhhc2ggc3RhdGUKICAgIEBwYXJhbSBvdXQgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBoYXNoICgzMiBieXRlcykKQEAgLTIyMiwxMyArNDMwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2hhMjU2X3N0YXRlICptZCkKIHsKICAgaW50IGk7CisKICAgaWYobWQtPmN1cmxlbiA+PSBzaXplb2YobWQtPmJ1ZikpCiAgICAgcmV0dXJuIC0xOwotICAvKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlICovCisKKyAgLyogSW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAqLwogICBtZC0+bGVuZ3RoICs9IG1kLT5jdXJsZW4gKiA4OwotICAvKiBhcHBlbmQgdGhlICcxJyBiaXQgKi8KKworICAvKiBBcHBlbmQgdGhlICcxJyBiaXQgKi8KICAgbWQtPmJ1ZlttZC0+Y3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHg4MDsKLSAgLyogaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCisKKyAgLyogSWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCiAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCiAgICAqIGVuY29kaW5nIGxpa2Ugbm9ybWFsLgogICAgKi8KQEAgLTIzOSwyOSArNDUxLDQ0IEBACiAgICAgc2hhMjU2X2NvbXByZXNzKG1kLCBtZC0+YnVmKTsKICAgICBtZC0+Y3VybGVuID0gMDsKICAgfQotICAvKiBwYWQgdXAgdG8gNTYgYnl0ZXMgb2YgemVyb2VzICovCisKKyAgLyogUGFkIHVwIHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAqLwogICB3aGlsZShtZC0+Y3VybGVuIDwgNTYpIHsKICAgICBtZC0+YnVmW21kLT5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOwogICB9Ci0gIC8qIHN0b3JlIGxlbmd0aCAqLworCisgIC8qIFN0b3JlIGxlbmd0aCAqLwogICBXUEFfUFVUX0JFNjQobWQtPmJ1ZiArIDU2LCBtZC0+bGVuZ3RoKTsKICAgc2hhMjU2X2NvbXByZXNzKG1kLCBtZC0+YnVmKTsKLSAgLyogY29weSBvdXRwdXQgKi8KKworICAvKiBDb3B5IG91dHB1dCAqLwogICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspCiAgICAgV1BBX1BVVF9CRTMyKG91dCArICg0ICogaSksIG1kLT5zdGF0ZVtpXSk7CisKICAgcmV0dXJuIDA7CiB9Ci0vKiA9PT09PSBlbmQgLSBwdWJsaWMgZG9tYWluIFNIQTI1NiBpbXBsZW1lbnRhdGlvbiA9PT09PSAqLwogCi0jZW5kaWYKKyNlbmRpZiAvKiBDUllQVE8gTElCUyAqLwogCi12b2lkIEN1cmxfc2hhMjU2aXQodW5zaWduZWQgY2hhciAqb3V0YnVmZmVyLCAvKiAzMiB1bnNpZ25lZCBjaGFycyAqLwotICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0KQorLyoKKyAqIEN1cmxfc2hhMjU2aXQoKQorICoKKyAqIEdlbmVyYXRlcyBhIFNIQTI1NiBoYXNoIGZvciB0aGUgZ2l2ZW4gaW5wdXQgZGF0YS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIG91dHB1dCBbaW4vb3V0XSAtIFRoZSBvdXRwdXQgYnVmZmVyLgorICogaW5wdXQgIFtpbl0gICAgIC0gVGhlIGlucHV0IGRhdGEuCisgKiBsZW5ndGggW2luXSAgICAgLSBUaGUgaW5wdXQgbGVuZ3RoLgorICovCit2b2lkIEN1cmxfc2hhMjU2aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuZ3RoKQogewogICBTSEEyNTZfQ1RYIGN0eDsKKwogICBTSEEyNTZfSW5pdCgmY3R4KTsKLSAgU0hBMjU2X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKHN0cmxlbigoY2hhciAqKWlucHV0KSkpOwotICBTSEEyNTZfRmluYWwob3V0YnVmZmVyLCAmY3R4KTsKKyAgU0hBMjU2X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKGxlbmd0aCkpOworICBTSEEyNTZfRmluYWwob3V0cHV0LCAmY3R4KTsKIH0KIAogI2VuZGlmIC8qIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhcmUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NoYXJlLmMKaW5kZXggM2Q1MTA4Ni4uYTJkODk2MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhcmUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zaGFyZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03MCw3ICs3MCw3IEBACiAgIGNhc2UgQ1VSTFNIT1BUX1NIQVJFOgogICAgIC8qIHRoaXMgaXMgYSB0eXBlIHRoaXMgc2hhcmUgd2lsbCBzaGFyZSAqLwogICAgIHR5cGUgPSB2YV9hcmcocGFyYW0sIGludCk7Ci0gICAgc2hhcmUtPnNwZWNpZmllciB8PSAoMTw8dHlwZSk7CisKICAgICBzd2l0Y2godHlwZSkgewogICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfRE5TOgogICAgICAgYnJlYWs7CkBAIC0xMDIsNyArMTAyLDcgQEAKICNlbmRpZgogICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPTk5FQ1Q6ICAgICAvKiBub3Qgc3VwcG9ydGVkICh5ZXQpICovCisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT05ORUNUOgogICAgICAgaWYoQ3VybF9jb25uY2FjaGVfaW5pdCgmc2hhcmUtPmNvbm5fY2FjaGUsIDEwMykpCiAgICAgICAgIHJlcyA9IENVUkxTSEVfTk9NRU07CiAgICAgICBicmVhazsKQEAgLTExNiw2ICsxMTYsOCBAQAogICAgIGRlZmF1bHQ6CiAgICAgICByZXMgPSBDVVJMU0hFX0JBRF9PUFRJT047CiAgICAgfQorICAgIGlmKCFyZXMpCisgICAgICBzaGFyZS0+c3BlY2lmaWVyIHw9ICgxPDx0eXBlKTsKICAgICBicmVhazsKIAogICBjYXNlIENVUkxTSE9QVF9VTlNIQVJFOgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NsaXN0LmMKaW5kZXggMzkyYjg0ZC4uZDI3ZmJlMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuaAppbmRleCBkNzNkYmY2Li43OTliM2MwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NsaXN0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtYi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmMKaW5kZXggNzZjOTlhMi4uZDQ5M2FkYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmMKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEJpbGwgTmFnZWwgPHduYWdlbEB0eWNvaW50LmNvbT4sIEV4YWNxIFRlY2hub2xvZ2llcwotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjQsOCArNjQsNyBAQAogc3RhdGljIENVUkxjb2RlIHNtYl9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKTsKIHN0YXRpYyBDVVJMY29kZSBzbWJfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7Ci1zdGF0aWMgaW50IHNtYl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgaW50IHNtYl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIHNtYl9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCiAvKgpAQCAtNjA3LDYgKzYwNiw3IEBACiB7CiAgIHN0cnVjdCBzbWJfY29ubiAqc21iYyA9ICZjb25uLT5wcm90by5zbWJjOwogICBDVVJMY29kZSByZXN1bHQ7CisgICptc2cgPSBOVUxMOyAvKiBpZiBpdCByZXR1cm5zIGVhcmx5ICovCiAKICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyICovCiAgIGlmKCFzbWJjLT5zZW5kX3NpemUgJiYgc21iYy0+dXBsb2FkX3NpemUpIHsKQEAgLTY4Miw3ICs2ODIsOCBAQAogCiAgIHN3aXRjaChzbWJjLT5zdGF0ZSkgewogICBjYXNlIFNNQl9ORUdPVElBVEU6Ci0gICAgaWYoaC0+c3RhdHVzIHx8IHNtYmMtPmdvdCA8IHNpemVvZigqbnJzcCkgKyBzaXplb2Yoc21iYy0+Y2hhbGxlbmdlKSAtIDEpIHsKKyAgICBpZigoc21iYy0+Z290IDwgc2l6ZW9mKCpucnNwKSArIHNpemVvZihzbWJjLT5jaGFsbGVuZ2UpIC0gMSkgfHwKKyAgICAgICBoLT5zdGF0dXMpIHsKICAgICAgIGNvbm5jbG9zZShjb25uLCAiU01COiBuZWdvdGlhdGlvbiBmYWlsZWQiKTsKICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgICAgfQpAQCAtNzg1LDYgKzc4Niw4IEBACiAgIGNhc2UgU01CX09QRU46CiAgICAgaWYoaC0+c3RhdHVzIHx8IHNtYmMtPmdvdCA8IHNpemVvZihzdHJ1Y3Qgc21iX250X2NyZWF0ZV9yZXNwb25zZSkpIHsKICAgICAgIHJlcS0+cmVzdWx0ID0gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOworICAgICAgaWYoaC0+c3RhdHVzID09IHNtYl9zd2FwMzIoU01CX0VSUl9OT0FDQ0VTUykpCisgICAgICAgIHJlcS0+cmVzdWx0ID0gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CiAgICAgICBuZXh0X3N0YXRlID0gU01CX1RSRUVfRElTQ09OTkVDVDsKICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkzNCwxMiArOTM3LDggQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCi1zdGF0aWMgaW50IHNtYl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3N0YXRpYyBpbnQgc21iX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgaWYoIW51bXNvY2tzKQotICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotCiAgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CiAgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApIHwgR0VUU09DS19XUklURVNPQ0soMCk7CiB9CkBAIC05NTcsNyArOTU2LDYgQEAKIAogc3RhdGljIENVUkxjb2RlIHNtYl9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNtYl9yZXF1ZXN0ICpyZXEgPSBkYXRhLT5yZXEucHJvdG9wOwogICBzdHJ1Y3Qgc21iX2Nvbm4gKnNtYmMgPSAmY29ubi0+cHJvdG8uc21iYzsKQEAgLTk2NSw3ICs5NjMsOCBAQAogICBjaGFyICpzbGFzaDsKIAogICAvKiBVUkwgZGVjb2RlIHRoZSBwYXRoICovCi0gIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGRhdGEtPnN0YXRlLnVwLnBhdGgsIDAsICZwYXRoLCBOVUxMLCBUUlVFKTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZGF0YS0+c3RhdGUudXAucGF0aCwgMCwgJnBhdGgsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9DVFJMKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtYi5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmgKaW5kZXggOWNlNmI1Ni4uMTM2YTg5YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEJpbGwgTmFnZWwgPHduYWdlbEB0eWNvaW50LmNvbT4sIEV4YWNxIFRlY2hub2xvZ2llcwotICogQ29weXJpZ2h0IChDKSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTkzLDcgKzE5Myw2IEBACiAgIHVuc2lnbmVkIGludCBleHRfZmlsZV9hdHRyaWJ1dGVzOwogICBjdXJsX29mZl90IGFsbG9jYXRpb25fc2l6ZTsKICAgY3VybF9vZmZfdCBlbmRfb2ZfZmlsZTsKLQogfSBQQUNLOwogCiBzdHJ1Y3Qgc21iX3JlYWQgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5jCmluZGV4IDRhMzQ2MmIuLjY4NTUxM2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtdHAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDYgKzI3LDkgQEAKICAqIFJGQzQ3NTIgVGhlIEtlcmJlcm9zIFY1ICgiR1NTQVBJIikgU0FTTCBNZWNoYW5pc20KICAqIFJGQzQ5NTQgU01UUCBBdXRoZW50aWNhdGlvbgogICogUkZDNTMyMSBTTVRQIHByb3RvY29sCisgKiBSRkM1ODkwIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBmb3IgQXBwbGljYXRpb25zIChJRE5BKQorICogUkZDNjUzMSBTTVRQIEV4dGVuc2lvbiBmb3IgSW50ZXJuYXRpb25hbGl6ZWQgRW1haWwKKyAqIFJGQzY1MzIgSW50ZXJuYXRpb25hbGl6ZWQgRW1haWwgSGVhZGVycwogICogUkZDNjc0OSBPQXV0aCAyLjAgQXV0aG9yaXphdGlvbiBGcmFtZXdvcmsKICAqIFJGQzgzMTQgVXNlIG9mIFRMUyBmb3IgRW1haWwgU3VibWlzc2lvbiBhbmQgQWNjZXNzCiAgKiBEcmFmdCAgIFNNVFAgVVJMIEludGVyZmFjZSAgIDxkcmFmdC1lYXJoYXJ0LXVybC1zbXRwLTAwLnR4dD4KQEAgLTk1LDEzICs5OCwxNCBAQAogc3RhdGljIENVUkxjb2RlIHNtdHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogc3RhdGljIENVUkxjb2RlIHNtdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBpbnQgc210cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV91cmxfb3B0aW9ucyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIENVUkxjb2RlIHNtdHBfcGFyc2VfdXJsX3BhdGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BhcnNlX2N1c3RvbV9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV9hZGRyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqZnFtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFkZHJlc3MsIHN0cnVjdCBob3N0bmFtZSAqaG9zdCk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9wZXJmb3JtX2F1dGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICptZWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZXNwKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX2NvbnRpbnVlX2F1dGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpyZXNwKTsKQEAgLTE3OSw3ICsxODMsNyBAQAogICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9zbXRwczsKIAogICAvKiBTZXQgdGhlIGNvbm5lY3Rpb24ncyB1cGdyYWRlZCB0byBUTFMgZmxhZyAqLwotICBjb25uLT50bHNfdXBncmFkZWQgPSBUUlVFOworICBjb25uLT5iaXRzLnRsc191cGdyYWRlZCA9IFRSVUU7CiB9CiAjZWxzZQogI2RlZmluZSBzbXRwX3RvX3NtdHBzKHgpIEN1cmxfbm9wX3N0bXQKQEAgLTM1OSwxMCArMzYzLDggQEAKICAqLwogc3RhdGljIENVUkxjb2RlIHNtdHBfcGVyZm9ybV9zdGFydHRscyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCiAgIC8qIFNlbmQgdGhlIFNUQVJUVExTIGNvbW1hbmQgKi8KLSAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsICJTVEFSVFRMUyIpOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIlNUQVJUVExTIik7CiAKICAgaWYoIXJlc3VsdCkKICAgICBzdGF0ZShjb25uLCBTTVRQX1NUQVJUVExTKTsKQEAgLTM3OCwxMSArMzgwLDEwIEBACiAgKi8KIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BlcmZvcm1fdXBncmFkZV90bHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7Ci0KICAgLyogU3RhcnQgdGhlIFNTTCBjb25uZWN0aW9uICovCi0gIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsICZzbXRwYy0+c3NsZG9uZSk7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbXRwYy0+c3NsZG9uZSk7CiAKICAgaWYoIXJlc3VsdCkgewogICAgIGlmKHNtdHBjLT5zdGF0ZSAhPSBTTVRQX1VQR1JBREVUTFMpCkBAIC00ODUsMTMgKzQ4Niw1NSBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IFNNVFAgKnNtdHAgPSBkYXRhLT5yZXEucHJvdG9wOwogCi0gIC8qIFNlbmQgdGhlIGNvbW1hbmQgKi8KLSAgaWYoc210cC0+cmNwdCkKLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAtPmN1c3RvbSAmJiBzbXRwLT5jdXN0b21bMF0gIT0gJ1wwJyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5jdXN0b20gOiAiVlJGWSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5yY3B0LT5kYXRhKTsKKyAgaWYoc210cC0+cmNwdCkgeworICAgIC8qIFdlIG5vdGlmeSB0aGUgc2VydmVyIHdlIGFyZSBzZW5kaW5nIFVURi04IGRhdGEgaWYgYSkgaXQgc3VwcG9ydHMgdGhlCisgICAgICAgU01UUFVURjggZXh0ZW5zaW9uIGFuZCBiKSBUaGUgbWFpbGJveCBjb250YWlucyBVVEYtOCBjaGFyYWFjdGVycywgaW4KKyAgICAgICBlaXRoZXIgdGhlIGxvY2FsIGFkZHJlc3Mgb3IgaG9zdCBuYW1lIHBhcnRzLiBUaGlzIGlzIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICB3aGV0aGVyIHRoZSBob3N0IG5hbWUgaXMgZW5jb2RlZCB1c2luZyBJRE4gQUNFICovCisgICAgYm9vbCB1dGY4ID0gRkFMU0U7CisKKyAgICBpZigoIXNtdHAtPmN1c3RvbSkgfHwgKCFzbXRwLT5jdXN0b21bMF0pKSB7CisgICAgICBjaGFyICphZGRyZXNzID0gTlVMTDsKKyAgICAgIHN0cnVjdCBob3N0bmFtZSBob3N0ID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKKyAgICAgIC8qIFBhcnNlIHRoZSBtYWlsYm94IHRvIHZlcmlmeSBpbnRvIHRoZSBsb2NhbCBhZGRyZXNzIGFuZCBob3N0IG5hbWUKKyAgICAgICAgIHBhcnRzLCBjb252ZXJ0aW5nIHRoZSBob3N0IG5hbWUgdG8gYW4gSUROIEEtbGFiZWwgaWYgbmVjZXNzYXJ5ICovCisgICAgICByZXN1bHQgPSBzbXRwX3BhcnNlX2FkZHJlc3MoY29ubiwgc210cC0+cmNwdC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywgJmhvc3QpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAvKiBFc3RhYmxpc2ggd2hldGhlciB3ZSBzaG91bGQgcmVwb3J0IFNNVFBVVEY4IHRvIHRoZSBzZXJ2ZXIgZm9yIHRoaXMKKyAgICAgICAgIG1haWxib3ggYXMgcGVyIFJGQy02NTMxIHNlY3QuIDMuMSBwb2ludCA2ICovCisgICAgICB1dGY4ID0gKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkKSAmJgorICAgICAgICAgICAgICgoaG9zdC5lbmNhbGxvYykgfHwgKCFDdXJsX2lzX0FTQ0lJX25hbWUoYWRkcmVzcykpIHx8CisgICAgICAgICAgICAgICghQ3VybF9pc19BU0NJSV9uYW1lKGhvc3QubmFtZSkpKTsKKworICAgICAgLyogU2VuZCB0aGUgVlJGWSBjb21tYW5kIChOb3RlOiBUaGUgaG9zdCBuYW1lIHBhcnQgbWF5IGJlIGFic2VudCB3aGVuIHRoZQorICAgICAgICAgaG9zdCBpcyBhIGxvY2FsIHN5c3RlbSkgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiVlJGWSAlcyVzJXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QubmFtZSA/ICJAIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0Lm5hbWUgPyBob3N0Lm5hbWUgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOCA/ICIgU01UUFVURjgiIDogIiIpOworCisgICAgICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZob3N0KTsKKyAgICAgIGZyZWUoYWRkcmVzcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogRXN0YWJsaXNoIHdoZXRoZXIgd2Ugc2hvdWxkIHJlcG9ydCB0aGF0IHdlIHN1cHBvcnQgU01UUFVURjggZm9yIEVYUE4KKyAgICAgICAgIGNvbW1hbmRzIHRvIHRoZSBzZXJ2ZXIgYXMgcGVyIFJGQy02NTMxIHNlY3QuIDMuMSBwb2ludCA2ICovCisgICAgICB1dGY4ID0gKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkKSAmJgorICAgICAgICAgICAgICghc3RyY21wKHNtdHAtPmN1c3RvbSwgIkVYUE4iKSk7CisKKyAgICAgIC8qIFNlbmQgdGhlIGN1c3RvbSByZWNpcGllbnQgYmFzZWQgY29tbWFuZCBzdWNoIGFzIHRoZSBFWFBOIGNvbW1hbmQgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMgJXMlcyIsIHNtdHAtPmN1c3RvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cmNwdC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOCA/ICIgU01UUFVURjgiIDogIiIpOworICAgIH0KKyAgfQogICBlbHNlCisgICAgLyogU2VuZCB0aGUgbm9uLXJlY2lwaWVudCBiYXNlZCBjb21tYW5kIHN1Y2ggYXMgSEVMUCAqLwogICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+Y3VzdG9tICYmIHNtdHAtPmN1c3RvbVswXSAhPSAnXDAnID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAtPmN1c3RvbSA6ICJIRUxQIik7CkBAIC01MTYsMjIgKzU1OSw4MyBAQAogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKKyAgLyogV2Ugbm90aWZ5IHRoZSBzZXJ2ZXIgd2UgYXJlIHNlbmRpbmcgVVRGLTggZGF0YSBpZiBhKSBpdCBzdXBwb3J0cyB0aGUKKyAgICAgU01UUFVURjggZXh0ZW5zaW9uIGFuZCBiKSBUaGUgbWFpbGJveCBjb250YWlucyBVVEYtOCBjaGFyYWFjdGVycywgaW4KKyAgICAgZWl0aGVyIHRoZSBsb2NhbCBhZGRyZXNzIG9yIGhvc3QgbmFtZSBwYXJ0cy4gVGhpcyBpcyByZWdhcmRsZXNzIG9mCisgICAgIHdoZXRoZXIgdGhlIGhvc3QgbmFtZSBpcyBlbmNvZGVkIHVzaW5nIElETiBBQ0UgKi8KKyAgYm9vbCB1dGY4ID0gRkFMU0U7CisKICAgLyogQ2FsY3VsYXRlIHRoZSBGUk9NIHBhcmFtZXRlciAqLwotICBpZighZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSkKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSkgeworICAgIGNoYXIgKmFkZHJlc3MgPSBOVUxMOworICAgIHN0cnVjdCBob3N0bmFtZSBob3N0ID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKKyAgICAvKiBQYXJzZSB0aGUgRlJPTSBtYWlsYm94IGludG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGhvc3QgbmFtZSBwYXJ0cywKKyAgICAgICBjb252ZXJ0aW5nIHRoZSBob3N0IG5hbWUgdG8gYW4gSUROIEEtbGFiZWwgaWYgbmVjZXNzYXJ5ICovCisgICAgcmVzdWx0ID0gc210cF9wYXJzZV9hZGRyZXNzKGNvbm4sIGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfRlJPTV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLCAmaG9zdCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8qIEVzdGFibGlzaCB3aGV0aGVyIHdlIHNob3VsZCByZXBvcnQgU01UUFVURjggdG8gdGhlIHNlcnZlciBmb3IgdGhpcworICAgICAgIG1haWxib3ggYXMgcGVyIFJGQy02NTMxIHNlY3QuIDMuMSBwb2ludCA0IGFuZCBzZWN0LiAzLjQgKi8KKyAgICB1dGY4ID0gKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkKSAmJgorICAgICAgICAgICAoKGhvc3QuZW5jYWxsb2MpIHx8ICghQ3VybF9pc19BU0NJSV9uYW1lKGFkZHJlc3MpKSB8fAorICAgICAgICAgICAgKCFDdXJsX2lzX0FTQ0lJX25hbWUoaG9zdC5uYW1lKSkpOworCisgICAgaWYoaG9zdC5uYW1lKSB7CisgICAgICBmcm9tID0gYXByaW50ZigiPCVzQCVzPiIsIGFkZHJlc3MsIGhvc3QubmFtZSk7CisKKyAgICAgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmhvc3QpOworICAgIH0KKyAgICBlbHNlCisgICAgICAvKiBBbiBpbnZhbGlkIG1haWxib3ggd2FzIHByb3ZpZGVkIGJ1dCB3ZSdsbCBzaW1wbHkgbGV0IHRoZSBzZXJ2ZXIgd29ycnkKKyAgICAgICAgIGFib3V0IHRoYXQgYW5kIHJlcGx5IHdpdGggYSA1MDEgZXJyb3IgKi8KKyAgICAgIGZyb20gPSBhcHJpbnRmKCI8JXM+IiwgYWRkcmVzcyk7CisKKyAgICBmcmVlKGFkZHJlc3MpOworICB9CisgIGVsc2UKICAgICAvKiBOdWxsIHJldmVyc2UtcGF0aCwgUkZDLTUzMjEsIHNlY3QuIDMuNi4zICovCiAgICAgZnJvbSA9IHN0cmR1cCgiPD4iKTsKLSAgZWxzZSBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dWzBdID09ICc8JykKLSAgICBmcm9tID0gYXByaW50ZigiJXMiLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dKTsKLSAgZWxzZQotICAgIGZyb20gPSBhcHJpbnRmKCI8JXM+IiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSk7CiAKICAgaWYoIWZyb20pCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgLyogQ2FsY3VsYXRlIHRoZSBvcHRpb25hbCBBVVRIIHBhcmFtZXRlciAqLwogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdICYmIGNvbm4tPnByb3RvLnNtdHBjLnNhc2wuYXV0aHVzZWQpIHsKLSAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdWzBdICE9ICdcMCcpCi0gICAgICBhdXRoID0gYXByaW50ZigiJXMiLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdKTsKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdWzBdICE9ICdcMCcpIHsKKyAgICAgIGNoYXIgKmFkZHJlc3MgPSBOVUxMOworICAgICAgc3RydWN0IGhvc3RuYW1lIGhvc3QgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworICAgICAgLyogUGFyc2UgdGhlIEFVVEggbWFpbGJveCBpbnRvIHRoZSBsb2NhbCBhZGRyZXNzIGFuZCBob3N0IG5hbWUgcGFydHMsCisgICAgICAgICBjb252ZXJ0aW5nIHRoZSBob3N0IG5hbWUgdG8gYW4gSUROIEEtbGFiZWwgaWYgbmVjZXNzYXJ5ICovCisgICAgICByZXN1bHQgPSBzbXRwX3BhcnNlX2FkZHJlc3MoY29ubiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9BVVRIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywgJmhvc3QpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGZyZWUoZnJvbSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisKKyAgICAgIC8qIEVzdGFibGlzaCB3aGV0aGVyIHdlIHNob3VsZCByZXBvcnQgU01UUFVURjggdG8gdGhlIHNlcnZlciBmb3IgdGhpcworICAgICAgICAgbWFpbGJveCBhcyBwZXIgUkZDLTY1MzEgc2VjdC4gMy4xIHBvaW50IDQgYW5kIHNlY3QuIDMuNCAqLworICAgICAgaWYoKCF1dGY4KSAmJiAoY29ubi0+cHJvdG8uc210cGMudXRmOF9zdXBwb3J0ZWQpICYmCisgICAgICAgICAoKGhvc3QuZW5jYWxsb2MpIHx8ICghQ3VybF9pc19BU0NJSV9uYW1lKGFkZHJlc3MpKSB8fAorICAgICAgICAgICghQ3VybF9pc19BU0NJSV9uYW1lKGhvc3QubmFtZSkpKSkKKyAgICAgICAgdXRmOCA9IFRSVUU7CisKKyAgICAgIGlmKGhvc3QubmFtZSkgeworICAgICAgICBhdXRoID0gYXByaW50ZigiPCVzQCVzPiIsIGFkZHJlc3MsIGhvc3QubmFtZSk7CisKKyAgICAgICAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmaG9zdCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIEFuIGludmFsaWQgbWFpbGJveCB3YXMgcHJvdmlkZWQgYnV0IHdlJ2xsIHNpbXBseSBsZXQgdGhlIHNlcnZlcgorICAgICAgICAgICB3b3JyeSBhYm91dCBpdCAqLworICAgICAgICBhdXRoID0gYXByaW50ZigiPCVzPiIsIGFkZHJlc3MpOworCisgICAgICBmcmVlKGFkZHJlc3MpOworICAgIH0KICAgICBlbHNlCiAgICAgICAvKiBFbXB0eSBBVVRILCBSRkMtMjU1NCwgc2VjdC4gNSAqLwogICAgICAgYXV0aCA9IHN0cmR1cCgiPD4iKTsKQEAgLTU2NSw2ICs2NjksNyBAQAogICAgIGlmKHJlc3VsdCkgewogICAgICAgZnJlZShmcm9tKTsKICAgICAgIGZyZWUoYXV0aCk7CisKICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC01ODcsMTkgKzY5MiwzMyBAQAogICAgIH0KICAgfQogCisgIC8qIElmIHRoZSBtYWlsYm94ZXMgaW4gdGhlIEZST00gYW5kIEFVVEggcGFyYW1ldGVycyBkb24ndCBpbmNsdWRlIGEgVVRGLTgKKyAgICAgYmFzZWQgYWRkcmVzcyB0aGVuIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSByZWNpcGllbnQgbGlzdCBhbmQgY2hlY2sgaWYKKyAgICAgYW55IHRoZXJlIGRvLCBhcyB3ZSBuZWVkIHRvIGNvcnJlY3RseSBpZGVudGlmeSBvdXIgc3VwcG9ydCBmb3IgU01UUFVURjgKKyAgICAgaW4gdGhlIGVudmVsb3BlLCBhcyBwZXIgUkZDLTY1MzEgc2VjdC4gMy40ICovCisgIGlmKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkICYmICF1dGY4KSB7CisgICAgc3RydWN0IFNNVFAgKnNtdHAgPSBkYXRhLT5yZXEucHJvdG9wOworICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpyY3B0ID0gc210cC0+cmNwdDsKKworICAgIHdoaWxlKHJjcHQgJiYgIXV0ZjgpIHsKKyAgICAgIC8qIERvZXMgdGhlIGhvc3QgbmFtZSBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzPyAqLworICAgICAgaWYoIUN1cmxfaXNfQVNDSUlfbmFtZShyY3B0LT5kYXRhKSkKKyAgICAgICAgdXRmOCA9IFRSVUU7CisKKyAgICAgIHJjcHQgPSByY3B0LT5uZXh0OworICAgIH0KKyAgfQorCiAgIC8qIFNlbmQgdGhlIE1BSUwgY29tbWFuZCAqLwotICBpZighYXV0aCAmJiAhc2l6ZSkKLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJNQUlMIEZST006JXMiLCBmcm9tKTsKLSAgZWxzZSBpZihhdXRoICYmICFzaXplKQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyBBVVRIPSVzIiwgZnJvbSwgYXV0aCk7Ci0gIGVsc2UgaWYoYXV0aCAmJiBzaXplKQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyBBVVRIPSVzIFNJWkU9JXMiLCBmcm9tLCBhdXRoLCBzaXplKTsKLSAgZWxzZQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyBTSVpFPSVzIiwgZnJvbSwgc2l6ZSk7CisgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJNQUlMIEZST006JXMlcyVzJXMlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLCAgICAgICAgICAgICAgICAgLyogTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGggPyAiIEFVVEg9IiA6ICIiLCAvKiBPcHRpb25hbCBvbiBBVVRIIHN1cHBvcnQgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aCA/IGF1dGggOiAiIiwgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID8gIiBTSVpFPSIgOiAiIiwgLyogT3B0aW9uYWwgb24gU0laRSBzdXBwb3J0ICAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPyBzaXplIDogIiIsICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOCA/ICIgU01UUFVURjgiICAgIC8qIEludGVybmF0aW9uYWxpc2VkIG1haWxib3ggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIiKTsgICAgICAgICAgLyogaW5jbHVkZWQgaW4gb3VyIGVudmVsb3BlICAqLwogCiAgIGZyZWUoZnJvbSk7CiAgIGZyZWUoYXV0aCk7CkBAIC02MjMsMTQgKzc0MiwyOCBAQAogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBTTVRQICpzbXRwID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgY2hhciAqYWRkcmVzcyA9IE5VTEw7CisgIHN0cnVjdCBob3N0bmFtZSBob3N0ID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKKyAgLyogUGFyc2UgdGhlIHJlY2lwaWVudCBtYWlsYm94IGludG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGhvc3QgbmFtZSBwYXJ0cywKKyAgICAgY29udmVydGluZyB0aGUgaG9zdCBuYW1lIHRvIGFuIElETiBBLWxhYmVsIGlmIG5lY2Vzc2FyeSAqLworICByZXN1bHQgPSBzbXRwX3BhcnNlX2FkZHJlc3MoY29ubiwgc210cC0+cmNwdC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLCAmaG9zdCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OwogCiAgIC8qIFNlbmQgdGhlIFJDUFQgVE8gY29tbWFuZCAqLwotICBpZihzbXRwLT5yY3B0LT5kYXRhWzBdID09ICc8JykKLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlJDUFQgVE86JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cmNwdC0+ZGF0YSk7CisgIGlmKGhvc3QubmFtZSkKKyAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlJDUFQgVE86PCVzQCVzPiIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0Lm5hbWUpOwogICBlbHNlCi0gICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICJSQ1BUIFRPOjwlcz4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cmNwdC0+ZGF0YSk7CisgICAgLyogQW4gaW52YWxpZCBtYWlsYm94IHdhcyBwcm92aWRlZCBidXQgd2UnbGwgc2ltcGx5IGxldCB0aGUgc2VydmVyIHdvcnJ5CisgICAgICAgYWJvdXQgdGhhdCBhbmQgcmVwbHkgd2l0aCBhIDUwMSBlcnJvciAqLworICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiUkNQVCBUTzo8JXM+IiwgYWRkcmVzcyk7CisKKyAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmaG9zdCk7CisgIGZyZWUoYWRkcmVzcyk7CisKICAgaWYoIXJlc3VsdCkKICAgICBzdGF0ZShjb25uLCBTTVRQX1JDUFQpOwogCkBAIC02NDUsMTAgKzc3OCw4IEBACiAgKi8KIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BlcmZvcm1fcXVpdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCiAgIC8qIFNlbmQgdGhlIFFVSVQgY29tbWFuZCAqLwotICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIlFVSVQiKTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsICJRVUlUIik7CiAKICAgaWYoIXJlc3VsdCkKICAgICBzdGF0ZShjb25uLCBTTVRQX1FVSVQpOwpAQCAtNzIwLDcgKzg1MSw3IEBACiAgICAgICByZXN1bHQgPSBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKICAgICB9CiAgIH0KLSAgZWxzZSB7CisgIGVsc2UgaWYobGVuID49IDQpIHsKICAgICBsaW5lICs9IDQ7CiAgICAgbGVuIC09IDQ7CiAKQEAgLTczMiw2ICs4NjMsMTAgQEAKICAgICBlbHNlIGlmKGxlbiA+PSA0ICYmICFtZW1jbXAobGluZSwgIlNJWkUiLCA0KSkKICAgICAgIHNtdHBjLT5zaXplX3N1cHBvcnRlZCA9IFRSVUU7CiAKKyAgICAvKiBEb2VzIHRoZSBzZXJ2ZXIgc3VwcG9ydCB0aGUgVVRGLTggY2FwYWJpbGl0eT8gKi8KKyAgICBlbHNlIGlmKGxlbiA+PSA4ICYmICFtZW1jbXAobGluZSwgIlNNVFBVVEY4IiwgOCkpCisgICAgICBzbXRwYy0+dXRmOF9zdXBwb3J0ZWQgPSBUUlVFOworCiAgICAgLyogRG9lcyB0aGUgc2VydmVyIHN1cHBvcnQgYXV0aGVudGljYXRpb24/ICovCiAgICAgZWxzZSBpZihsZW4gPj0gNSAmJiAhbWVtY21wKGxpbmUsICJBVVRIICIsIDUpKSB7CiAgICAgICBzbXRwYy0+YXV0aF9zdXBwb3J0ZWQgPSBUUlVFOwpAQCAtNzkxLDYgKzkyNiwxMCBAQAogICAgICAgICByZXN1bHQgPSBzbXRwX3BlcmZvcm1fYXV0aGVudGljYXRpb24oY29ubik7CiAgICAgfQogICB9CisgIGVsc2UgeworICAgIGZhaWxmKGRhdGEsICJVbmV4cGVjdGVkbHkgc2hvcnQgRUhMTyByZXNwb25zZSIpOworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKKyAgfQogCiAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05MTcsMjUgKzEwNTYsNTMgQEAKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgU01UUCAqc210cCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIGJvb2wgaXNfc210cF9lcnIgPSBGQUxTRTsKKyAgYm9vbCBpc19zbXRwX2Jsb2NraW5nX2VyciA9IEZBTFNFOwogCiAgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KIAotICBpZihzbXRwY29kZS8xMDAgIT0gMikgewotICAgIGZhaWxmKGRhdGEsICJSQ1BUIGZhaWxlZDogJWQiLCBzbXRwY29kZSk7Ci0gICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgaXNfc210cF9lcnIgPSAoc210cGNvZGUvMTAwICE9IDIpID8gVFJVRSA6IEZBTFNFOworCisgIC8qIElmIHRoZXJlJ3MgbXVsdGlwbGUgUkNQVCBUTyB0byBiZSBpc3N1ZWQsIGl0J3MgcG9zc2libGUgdG8gaWdub3JlIGVycm9ycworICAgICBhbmQgcHJvY2VlZCB3aXRoIG9ubHkgdGhlIHZhbGlkIGFkZHJlc3Nlcy4gKi8KKyAgaXNfc210cF9ibG9ja2luZ19lcnIgPQorICAgIChpc19zbXRwX2VyciAmJiAhZGF0YS0+c2V0Lm1haWxfcmNwdF9hbGxvd2ZhaWxzKSA/IFRSVUUgOiBGQUxTRTsKKworICBpZihpc19zbXRwX2VycikgeworICAgIC8qIFJlbWVtYmVyaW5nIHRoZSBsYXN0IGZhaWx1cmUgd2hpY2ggd2UgY2FuIHJlcG9ydCBpZiBhbGwgIlJDUFQgVE8iIGhhdmUKKyAgICAgICBmYWlsZWQgYW5kIHdlIGNhbm5vdCBwcm9jZWVkLiAqLworICAgIHNtdHAtPnJjcHRfbGFzdF9lcnJvciA9IHNtdHBjb2RlOworCisgICAgaWYoaXNfc210cF9ibG9ja2luZ19lcnIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJSQ1BUIGZhaWxlZDogJWQiLCBzbXRwY29kZSk7CisgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIH0KICAgfQogICBlbHNlIHsKKyAgICAvKiBTb21lIFJDUFQgVE8gY29tbWFuZHMgaGF2ZSBzdWNjZWVkZWQuICovCisgICAgc210cC0+cmNwdF9oYWRfb2sgPSBUUlVFOworICB9CisKKyAgaWYoIWlzX3NtdHBfYmxvY2tpbmdfZXJyKSB7CiAgICAgc210cC0+cmNwdCA9IHNtdHAtPnJjcHQtPm5leHQ7CiAKICAgICBpZihzbXRwLT5yY3B0KQogICAgICAgLyogU2VuZCB0aGUgbmV4dCBSQ1BUIFRPIGNvbW1hbmQgKi8KICAgICAgIHJlc3VsdCA9IHNtdHBfcGVyZm9ybV9yY3B0X3RvKGNvbm4pOwogICAgIGVsc2UgewotICAgICAgLyogU2VuZCB0aGUgREFUQSBjb21tYW5kICovCi0gICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIkRBVEEiKTsKKyAgICAgIC8qIFdlIHdlcmVuJ3QgYWJsZSB0byBpc3N1ZSBhIHN1Y2Nlc3NmdWwgUkNQVCBUTyBjb21tYW5kIHdoaWxlIGdvaW5nCisgICAgICAgICBvdmVyIHJlY2lwaWVudHMgKHBvdGVudGlhbGx5IG11bHRpcGxlKS4gU2VuZGluZyBiYWNrIGxhc3QgZXJyb3IuICovCisgICAgICBpZighc210cC0+cmNwdF9oYWRfb2spIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlJDUFQgZmFpbGVkOiAlZCAobGFzdCBlcnJvcikiLCBzbXRwLT5yY3B0X2xhc3RfZXJyb3IpOworICAgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIFNlbmQgdGhlIERBVEEgY29tbWFuZCAqLworICAgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIkRBVEEiKTsKIAotICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgc3RhdGUoY29ubiwgU01UUF9EQVRBKTsKKyAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICBzdGF0ZShjb25uLCBTTVRQX0RBVEEpOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0xMTE5LDEwICsxMjg2LDkgQEAKIH0KIAogLyogRm9yIHRoZSBTTVRQICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLwotc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3N0YXRpYyBpbnQgc210cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnNtdHBjLnBwLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5zbXRwYy5wcCwgc29ja3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyOTAsNiArMTQ1NiwxMiBAQAogICAvKiBTdG9yZSB0aGUgZmlyc3QgcmVjaXBpZW50IChvciBOVUxMIGlmIG5vdCBzcGVjaWZpZWQpICovCiAgIHNtdHAtPnJjcHQgPSBkYXRhLT5zZXQubWFpbF9yY3B0OwogCisgIC8qIFRyYWNrIG9mIHdoZXRoZXIgd2UndmUgc3VjY2Vzc2Z1bGx5IHNlbnQgYXQgbGVhc3Qgb25lIFJDUFQgVE8gY29tbWFuZCAqLworICBzbXRwLT5yY3B0X2hhZF9vayA9IEZBTFNFOworCisgIC8qIFRyYWNrIG9mIHRoZSBsYXN0IGVycm9yIHdlJ3ZlIHJlY2VpdmVkIGJ5IHNlbmRpbmcgUkNQVCBUTyBjb21tYW5kICovCisgIHNtdHAtPnJjcHRfbGFzdF9lcnJvciA9IDA7CisKICAgLyogSW5pdGlhbCBkYXRhIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGxpbmU6IGl0IGlzIGltcGxpY2l0bHkKICAgICAgcHJlY2VkZWQgYnkgYSB2aXJ0dWFsIENSTEYuICovCiAgIHNtdHAtPnRyYWlsaW5nX2NybGYgPSBUUlVFOwpAQCAtMTQ0NSw3ICsxNjE3LDcgQEAKICAgQ1VSTGNvZGUgcmVzdWx0OwogCiAgIC8qIENsZWFyIHRoZSBUTFMgdXBncmFkZWQgZmxhZyAqLwotICBjb25uLT50bHNfdXBncmFkZWQgPSBGQUxTRTsKKyAgY29ubi0+Yml0cy50bHNfdXBncmFkZWQgPSBGQUxTRTsKIAogICAvKiBJbml0aWFsaXNlIHRoZSBTTVRQIGxheWVyICovCiAgIHJlc3VsdCA9IHNtdHBfaW5pdChjb25uKTsKQEAgLTE1MTcsNyArMTY4OSw4IEBACiAgIH0KIAogICAvKiBVUkwgZGVjb2RlIHRoZSBwYXRoIGFuZCB1c2UgaXQgYXMgdGhlIGRvbWFpbiBpbiBvdXIgRUhMTyAqLwotICByZXR1cm4gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgcGF0aCwgMCwgJnNtdHBjLT5kb21haW4sIE5VTEwsIFRSVUUpOworICByZXR1cm4gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgcGF0aCwgMCwgJnNtdHBjLT5kb21haW4sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfQ1RSTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTUzNSw3ICsxNzA4LDc3IEBACiAKICAgLyogVVJMIGRlY29kZSB0aGUgY3VzdG9tIHJlcXVlc3QgKi8KICAgaWYoY3VzdG9tKQotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGN1c3RvbSwgMCwgJnNtdHAtPmN1c3RvbSwgTlVMTCwgVFJVRSk7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgY3VzdG9tLCAwLCAmc210cC0+Y3VzdG9tLCBOVUxMLCBSRUpFQ1RfQ1RSTCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc210cF9wYXJzZV9hZGRyZXNzKCkKKyAqCisgKiBQYXJzZSB0aGUgZnVsbHkgcXVhbGlmaWVkIG1haWxib3ggYWRkcmVzcyBpbnRvIGEgbG9jYWwgYWRkcmVzcyBwYXJ0IGFuZCB0aGUKKyAqIGhvc3QgbmFtZSwgY29udmVydGluZyB0aGUgaG9zdCBuYW1lIHRvIGFuIElETiBBLWxhYmVsLCBhcyBwZXIgUkZDLTU4OTAsIGlmCisgKiBuZWNlc3NhcnkuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBjb25uICBbaW5dICAgICAgICAgICAgICAtIFRoZSBjb25uZWN0aW9uIGhhbmRsZS4KKyAqIGZxbWEgIFtpbl0gICAgICAgICAgICAgIC0gVGhlIGZ1bGx5IHF1YWxpZmllZCBtYWlsYm94IGFkZHJlc3MgKHdoaWNoIG1heSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgbm90IGNvbnRhaW4gVVRGLTggY2hhcmFjdGVycykuCisgKiBhZGRyZXNzICAgICAgICBbaW4vb3V0XSAtIEEgbmV3IGFsbG9jYXRlZCBidWZmZXIgd2hpY2ggaG9sZHMgdGhlIGxvY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgcGFydCBvZiB0aGUgbWFpbGJveC4gVGhpcyBidWZmZXIgbXVzdCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlJ2VkIGJ5IHRoZSBjYWxsZXIuCisgKiBob3N0ICAgICAgICAgICBbaW4vb3V0XSAtIFRoZSBob3N0IG5hbWUgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIG9yaWdpbmFsLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3B0aW9uYWxseSBlbmNvZGVkLCBob3N0IG5hbWUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoKSBtdXN0IGJlIGNhbGxlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNlIHRoZSBjYWxsZXIgaGFzIGZpbmlzaGVkIHdpdGggdGhlIHN0cnVjdHVyZS4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKgorICogTm90ZXM6CisgKgorICogU2hvdWxkIGEgVVRGLTggaG9zdCBuYW1lIHJlcXVpcmUgY29udmVyc2lvbiB0byBJRE4gQUNFIGFuZCB3ZSBjYW5ub3QgaG9ub3IKKyAqIHRoYXQgY29udmVyc2lvbiB0aGVuIHdlIHNoYWxsIHJldHVybiBzdWNjZXNzLiBUaGlzIGFsbG93IHRoZSBjYWxsZXIgdG8gc2VuZAorICogdGhlIGRhdGEgdG8gdGhlIHNlcnZlciBhcyBhIFUtbGFiZWwgKGFzIHBlciBSRkMtNjUzMSBzZWN0LiAzLjIpLgorICoKKyAqIElmIGFuIG1haWxib3ggJ0AnIHNlcGFyYXRvciBjYW5ub3QgYmUgbG9jYXRlZCB0aGVuIHRoZSBtYWlsYm94IGlzIGNvbnNpZGVyZWQKKyAqIHRvIGJlIGVpdGhlciBhIGxvY2FsIG1haWxib3ggb3IgYW4gaW52YWxpZCBtYWlsYm94IChkZXBlbmRpbmcgb24gd2hhdCB0aGUKKyAqIGNhbGxpbmcgZnVuY3Rpb24gZGVlbXMgaXQgdG8gYmUpIHRoZW4gdGhlIGlucHV0IHdpbGwgc2ltcGx5IGJlIHJldHVybmVkIGluCisgKiB0aGUgYWRkcmVzcyBwYXJ0IHdpdGggdGhlIGhvc3QgbmFtZSBiZWluZyBOVUxMLgorICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV9hZGRyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqZnFtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFkZHJlc3MsIHN0cnVjdCBob3N0bmFtZSAqaG9zdCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgLyogRHVwbGljYXRlIHRoZSBmdWxseSBxdWFsaWZpZWQgZW1haWwgYWRkcmVzcyBzbyB3ZSBjYW4gbWFuaXB1bGF0ZSBpdCwKKyAgICAgZW5zdXJpbmcgaXQgZG9lc24ndCBjb250YWluIHRoZSBkZWxpbWl0ZXJzIGlmIHNwZWNpZmllZCAqLworICBjaGFyICpkdXAgPSBzdHJkdXAoZnFtYVswXSA9PSAnPCcgPyBmcW1hICsgMSAgOiBmcW1hKTsKKyAgaWYoIWR1cCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBsZW5ndGggPSBzdHJsZW4oZHVwKTsKKyAgaWYoZHVwW2xlbmd0aCAtIDFdID09ICc+JykKKyAgICBkdXBbbGVuZ3RoIC0gMV0gPSAnXDAnOworCisgIC8qIEV4dHJhY3QgdGhlIGhvc3QgbmFtZSBmcm9tIHRoZSBhZGRyZXNzIChpZiB3ZSBjYW4pICovCisgIGhvc3QtPm5hbWUgPSBzdHJwYnJrKGR1cCwgIkAiKTsKKyAgaWYoaG9zdC0+bmFtZSkgeworICAgICpob3N0LT5uYW1lID0gJ1wwJzsKKyAgICBob3N0LT5uYW1lID0gaG9zdC0+bmFtZSArIDE7CisKKyAgICAvKiBBdHRlbXB0IHRvIGNvbnZlcnQgdGhlIGhvc3QgbmFtZSB0byBJRE4gQUNFICovCisgICAgKHZvaWQpIEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShjb25uLCBob3N0KTsKKworICAgIC8qIElmIEN1cmxfaWRuY29udmVydF9ob3N0bmFtZSgpIGZhaWxzIHRoZW4gd2Ugc2hhbGwgYXR0ZW1wdCB0byBjb250aW51ZQorICAgICAgIGFuZCBzZW5kIHRoZSBob3N0IG5hbWUgdXNpbmcgVVRGLTggcmF0aGVyIHRoYW4gYXMgNy1iaXQgQUNFICh3aGljaCBpcworICAgICAgIG91ciBwcmVmZXJlbmNlKSAqLworICB9CisKKyAgLyogRXh0cmFjdCB0aGUgbG9jYWwgYWRkcmVzcyBmcm9tIHRoZSBtYWlsYm94ICovCisgICphZGRyZXNzID0gZHVwOwogCiAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmgKaW5kZXggYjY3MzQwYS4uMTY0YTE3NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtdHAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTUsNiArNTUsOSBAQAogICBjdXJsX3BwX3RyYW5zZmVyIHRyYW5zZmVyOwogICBjaGFyICpjdXN0b207ICAgICAgICAgICAgLyogQ3VzdG9tIFJlcXVlc3QgKi8KICAgc3RydWN0IGN1cmxfc2xpc3QgKnJjcHQ7IC8qIFJlY2lwaWVudCBsaXN0ICovCisgIGJvb2wgcmNwdF9oYWRfb2s7ICAgICAgICAvKiBXaGV0aGVyIGFueSBvZiBSQ1BUIFRPIGNvbW1hbmRzIChkZXBlbmRzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCBudW1iZXIgb2YgcmVjaXBpZW50cykgc3VjY2VlZGVkIHNvIGZhciAqLworICBpbnQgcmNwdF9sYXN0X2Vycm9yOyAgICAgLyogVGhlIGxhc3QgZXJyb3IgcmVjZWl2ZWQgZm9yIFJDUFQgVE8gY29tbWFuZCAqLwogICBzaXplX3QgZW9iOyAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBFT0IgKEVuZCBPZiBCb2R5KSB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gcmVjZWl2ZWQgc28gZmFyICovCiAgIGJvb2wgdHJhaWxpbmdfY3JsZjsgICAgICAvKiBTcGVjaWZpZXMgaWYgdGhlIHRhaWxpbmcgQ1JMRiBpcyBwcmVzZW50ICovCkBAIC03MSw2ICs3NCw4IEBACiAgIGJvb2wgdGxzX3N1cHBvcnRlZDsgICAgICAvKiBTdGFydFRMUyBjYXBhYmlsaXR5IHN1cHBvcnRlZCBieSBzZXJ2ZXIgKi8KICAgYm9vbCBzaXplX3N1cHBvcnRlZDsgICAgIC8qIElmIHNlcnZlciBzdXBwb3J0cyBTSVpFIGV4dGVuc2lvbiBhY2NvcmRpbmcgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQyAxODcwICovCisgIGJvb2wgdXRmOF9zdXBwb3J0ZWQ7ICAgICAvKiBJZiBzZXJ2ZXIgc3VwcG9ydHMgU01UUFVURjggZXh0ZW5zaW9uIGFjY29yZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gUkZDIDY1MzEgKi8KICAgYm9vbCBhdXRoX3N1cHBvcnRlZDsgICAgIC8qIEFVVEggY2FwYWJpbGl0eSBzdXBwb3J0ZWQgYnkgc2VydmVyICovCiB9OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2NrYWRkci5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2FkZHIuaAppbmRleCBkYjE0NjgwLi5iMDM3ZWUwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2NrYWRkci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2thZGRyLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMwZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5jCkBAIC0wLDAgKzEsMTIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCisKKyNpZm5kZWYgSEFWRV9TT0NLRVRQQUlSCisjaWZkZWYgV0lOMzIKKy8qCisgKiBUaGlzIGlzIGEgc29ja2V0cGFpcigpIGltcGxlbWVudGF0aW9uIGZvciBXaW5kb3dzLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+IC8qIElQUFJPVE9fVENQICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZm5kZWYgSU5BRERSX0xPT1BCQUNLCisjZGVmaW5lIElOQUREUl9MT09QQkFDSyAweDdmMDAwMDAxCisjZW5kaWYgLyogIUlOQUREUl9MT09QQkFDSyAqLworI2VuZGlmIC8qICFXSU4zMiAqLworCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK2ludCBDdXJsX3NvY2tldHBhaXIoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2Nrc1syXSkKK3sKKyAgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBpbmFkZHI7CisgICAgc3RydWN0IHNvY2thZGRyIGFkZHI7CisgIH0gYTsKKyAgY3VybF9zb2NrZXRfdCBsaXN0ZW5lcjsKKyAgY3VybF9zb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZihhLmluYWRkcik7CisgIGludCByZXVzZSA9IDE7CisgIGNoYXIgZGF0YVsyXVsxMl07CisgIHNzaXplX3QgZGxlbjsKKyAgKHZvaWQpZG9tYWluOworICAodm9pZCl0eXBlOworICAodm9pZClwcm90b2NvbDsKKworICBsaXN0ZW5lciA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOworICBpZihsaXN0ZW5lciA9PSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgcmV0dXJuIC0xOworCisgIG1lbXNldCgmYSwgMCwgc2l6ZW9mKGEpKTsKKyAgYS5pbmFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIGEuaW5hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisgIGEuaW5hZGRyLnNpbl9wb3J0ID0gMDsKKworICBzb2Nrc1swXSA9IHNvY2tzWzFdID0gQ1VSTF9TT0NLRVRfQkFEOworCisgIGlmKHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKyAgICAgICAgICAgICAgICAoY2hhciAqKSZyZXVzZSwgKGN1cmxfc29ja2xlbl90KXNpemVvZihyZXVzZSkpID09IC0xKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKGJpbmQobGlzdGVuZXIsICZhLmFkZHIsIHNpemVvZihhLmluYWRkcikpID09IC0xKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKGdldHNvY2tuYW1lKGxpc3RlbmVyLCAmYS5hZGRyLCAmYWRkcmxlbikgPT0gLTEpCisgICAgZ290byBlcnJvcjsKKyAgaWYobGlzdGVuKGxpc3RlbmVyLCAxKSA9PSAtMSkKKyAgICBnb3RvIGVycm9yOworICBzb2Nrc1swXSA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgIGlmKHNvY2tzWzBdID09IENVUkxfU09DS0VUX0JBRCkKKyAgICBnb3RvIGVycm9yOworICBpZihjb25uZWN0KHNvY2tzWzBdLCAmYS5hZGRyLCBzaXplb2YoYS5pbmFkZHIpKSA9PSAtMSkKKyAgICBnb3RvIGVycm9yOworICBzb2Nrc1sxXSA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7CisgIGlmKHNvY2tzWzFdID09IENVUkxfU09DS0VUX0JBRCkKKyAgICBnb3RvIGVycm9yOworCisgIC8qIHZlcmlmeSB0aGF0IG5vdGhpbmcgZWxzZSBjb25uZWN0ZWQgKi8KKyAgbXNucHJpbnRmKGRhdGFbMF0sIHNpemVvZihkYXRhWzBdKSwgIiVwIiwgc29ja3MpOworICBkbGVuID0gc3RybGVuKGRhdGFbMF0pOworICBpZihzd3JpdGUoc29ja3NbMF0sIGRhdGFbMF0sIGRsZW4pICE9IGRsZW4pCisgICAgZ290byBlcnJvcjsKKyAgaWYoc3JlYWQoc29ja3NbMV0sIGRhdGFbMV0sIHNpemVvZihkYXRhWzFdKSkgIT0gZGxlbikKKyAgICBnb3RvIGVycm9yOworICBpZihtZW1jbXAoZGF0YVswXSwgZGF0YVsxXSwgZGxlbikpCisgICAgZ290byBlcnJvcjsKKworICBzY2xvc2UobGlzdGVuZXIpOworICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgc2Nsb3NlKGxpc3RlbmVyKTsKKyAgc2Nsb3NlKHNvY2tzWzBdKTsKKyAgc2Nsb3NlKHNvY2tzWzFdKTsKKyAgcmV0dXJuIC0xOworfQorCisjZW5kaWYgLyogISBIQVZFX1NPQ0tFVFBBSVIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTlmYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU09DS0VUUEFJUl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1NPQ0tFVFBBSVJfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisjaWZuZGVmIEhBVkVfU09DS0VUUEFJUgoraW50IEN1cmxfc29ja2V0cGFpcihpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tzWzJdKTsKKyNlbHNlCisjZGVmaW5lIEN1cmxfc29ja2V0cGFpcihhLGIsYyxkKSBzb2NrZXRwYWlyKGEsYixjLGQpCisjZW5kaWYKKworLyogRGVmaW5lZCBoZXJlIHRvIGFsbG93IHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3MgdG8gZGlzYWJsZSBpdCBjb21wbGV0ZWx5ICovCisjZGVmaW5lIFVTRV9TT0NLRVRQQUlSIDEKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NPQ0tFVFBBSVJfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmMKaW5kZXggZDhmY2MzYi4uYjIyMTVmZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrcy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNywxNiArMzcsMTkgQEAKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAidGltZXZhbC5oIgogI2luY2x1ZGUgInNvY2tzLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIiAvKiBmb3IgZ2V0c29jayBtYWNyb3MgKi8KIAotLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAvKgogICogSGVscGVyIHJlYWQtZnJvbS1zb2NrZXQgZnVuY3Rpb25zLiBEb2VzIHRoZSBzYW1lIGFzIEN1cmxfcmVhZCgpIGJ1dCBpdAogICogYmxvY2tzIHVudGlsIGFsbCBieXRlcyBhbW91bnQgb2YgYnVmZmVyc2l6ZSB3aWxsIGJlIHJlYWQuIE5vIG1vcmUsIG5vIGxlc3MuCiAgKgotICogVGhpcyBpcyBTVFVQSUQgQkxPQ0tJTkcgYmVoYXZpb3VyIHdoaWNoIHdlIGZyb3duIHVwb24sIGJ1dCByaWdodCBub3cgdGhpcwotICogaXMgd2hhdCB3ZSBoYXZlLi4uCisgKiBUaGlzIGlzIFNUVVBJRCBCTE9DS0lORyBiZWhhdmlvci4gT25seSB1c2VkIGJ5IHRoZSBTT0NLUyBHU1NBUEkgZnVuY3Rpb25zLgogICovCiBpbnQgQ3VybF9ibG9ja3JlYWRfYWxsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgLyogY29ubmVjdGlvbiBkYXRhICovCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLCAgICAgLyogcmVhZCBmcm9tIHRoaXMgc29ja2V0ICovCkBAIC01OSwxMyArNjIsMTUgQEAKICAgaW50IHJlc3VsdDsKICAgKm4gPSAwOwogICBmb3IoOzspIHsKLSAgICB0aW1lZGlmZl90IHRpbWVsZWZ0ID0gQ3VybF90aW1lbGVmdChjb25uLT5kYXRhLCBOVUxMLCBUUlVFKTsKLSAgICBpZih0aW1lbGVmdCA8IDApIHsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIFRSVUUpOworICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiB3ZSBhbHJlYWR5IGdvdCB0aGUgdGltZW91dCAqLwogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmKFNPQ0tFVF9SRUFEQUJMRShzb2NrZmQsIHRpbWVsZWZ0KSA8PSAwKSB7CisgICAgaWYoIXRpbWVvdXRfbXMpCisgICAgICB0aW1lb3V0X21zID0gVElNRURJRkZfVF9NQVg7CisgICAgaWYoU09DS0VUX1JFQURBQkxFKHNvY2tmZCwgdGltZW91dF9tcykgPD0gMCkgewogICAgICAgcmVzdWx0ID0gfkNVUkxFX09LOwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTIsNiArOTcsODEgQEAKICAgfQogICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmCisKKyNpZm5kZWYgREVCVUdCVUlMRAorI2RlZmluZSBzeHN0YXRlKHgseSkgc29ja3NzdGF0ZSh4LHkpCisjZWxzZQorI2RlZmluZSBzeHN0YXRlKHgseSkgc29ja3NzdGF0ZSh4LHksIF9fTElORV9fKQorI2VuZGlmCisKKworLyogYWx3YXlzIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSBzdGF0ZSwgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyICovCitzdGF0aWMgdm9pZCBzb2Nrc3N0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjb25uZWN0X3Qgc3RhdGUKKyNpZmRlZiBERUJVR0JVSUxECisgICAgICAgICAgICAgICAgICAgICAgICwgaW50IGxpbmVubworI2VuZGlmCispCit7CisgIGVudW0gY29ubmVjdF90IG9sZHN0YXRlID0gY29ubi0+Y25uY3Quc3RhdGU7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAvKiBzeW5jZWQgd2l0aCB0aGUgc3RhdGUgbGlzdCBpbiB1cmxkYXRhLmggKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzdGF0ZW5hbWVbXSA9IHsKKyAgICAiSU5JVCIsCisgICAgIlNPQ0tTX0lOSVQiLAorICAgICJTT0NLU19TRU5EIiwKKyAgICAiU09DS1NfUkVBRF9JTklUIiwKKyAgICAiU09DS1NfUkVBRCIsCisgICAgIkdTU0FQSV9JTklUIiwKKyAgICAiQVVUSF9JTklUIiwKKyAgICAiQVVUSF9TRU5EIiwKKyAgICAiQVVUSF9SRUFEIiwKKyAgICAiUkVRX0lOSVQiLAorICAgICJSRVNPTFZJTkciLAorICAgICJSRVNPTFZFRCIsCisgICAgIlJFU09MVkVfUkVNT1RFIiwKKyAgICAiUkVRX1NFTkQiLAorICAgICJSRVFfU0VORElORyIsCisgICAgIlJFUV9SRUFEIiwKKyAgICAiUkVRX1JFQURfTU9SRSIsCisgICAgIkRPTkUiCisgIH07CisjZW5kaWYKKworICBpZihvbGRzdGF0ZSA9PSBzdGF0ZSkKKyAgICAvKiBkb24ndCBib3RoZXIgd2hlbiB0aGUgbmV3IHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgc3RhdGUgKi8KKyAgICByZXR1cm47CisKKyAgY29ubi0+Y25uY3Quc3RhdGUgPSBzdGF0ZTsKKworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgaW5mb2YoY29ubi0+ZGF0YSwKKyAgICAgICAgIlNYU1RBVEU6ICVzID0+ICVzIGNvbm4gJXA7IGxpbmUgJWRcbiIsCisgICAgICAgIHN0YXRlbmFtZVtvbGRzdGF0ZV0sIHN0YXRlbmFtZVtjb25uLT5jbm5jdC5zdGF0ZV0sIGNvbm4sCisgICAgICAgIGxpbmVubyk7CisjZW5kaWYKK30KKworaW50IEN1cmxfU09DS1NfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIGludCByYyA9IDA7CisgIHNvY2tbMF0gPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN3aXRjaChjb25uLT5jbm5jdC5zdGF0ZSkgeworICBjYXNlIENPTk5FQ1RfUkVTT0xWSU5HOgorICBjYXNlIENPTk5FQ1RfU09DS1NfUkVBRDoKKyAgY2FzZSBDT05ORUNUX0FVVEhfUkVBRDoKKyAgY2FzZSBDT05ORUNUX1JFUV9SRUFEOgorICBjYXNlIENPTk5FQ1RfUkVRX1JFQURfTU9SRToKKyAgICByYyA9IEdFVFNPQ0tfUkVBRFNPQ0soMCk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmMgPSBHRVRTT0NLX1dSSVRFU09DSygwKTsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmM7Cit9CiAKIC8qCiAqIFRoaXMgZnVuY3Rpb24gbG9ncyBpbiB0byBhIFNPQ0tTNCBwcm94eSBhbmQgc2VuZHMgdGhlIHNwZWNpZmljcyB0byB0aGUgZmluYWwKQEAgLTEwOCw2MiArMTg4LDkxIEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQogewogICBjb25zdCBib29sIHByb3RvY29sNGEgPQogICAgIChjb25uLT5zb2Nrc19wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNEEpID8gVFJVRSA6IEZBTFNFOwotI2RlZmluZSBTT0NLUzRSRVFMRU4gMjYyCi0gIHVuc2lnbmVkIGNoYXIgc29ja3NyZXFbU09DS1M0UkVRTEVOXTsgLyogcm9vbSBmb3IgU09DS1M0IHJlcXVlc3QgaW5jbC4gdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICovCi0gIENVUkxjb2RlIGNvZGU7Ci0gIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgdW5zaWduZWQgY2hhciAqc29ja3NyZXEgPSAmY29ubi0+Y25uY3Quc29ja3NyZXFbMF07CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgY29ubnN0YXRlICpzeCA9ICZjb25uLT5jbm5jdDsKKyAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMgPSBOVUxMOworICBzc2l6ZV90IGFjdHVhbHJlYWQ7CisgIHNzaXplX3Qgd3JpdHRlbjsKIAotICBpZihDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpIDwgMCkgewotICAgIC8qIHRpbWUtb3V0LCBiYWlsIG91dCwgZ28gaG9tZSAqLwotICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIHRpbWUtb3V0Iik7Ci0gICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgfQorICBpZighU09DS1NfU1RBVEUoc3gtPnN0YXRlKSAmJiAhKmRvbmUpCisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1NPQ0tTX0lOSVQpOwogCi0gIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQotICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzQlczogY29ubmVjdGluZyB0byBIVFRQIHByb3h5ICVzIHBvcnQgJWRcbiIsCi0gICAgICAgICAgcHJvdG9jb2w0YSA/ICJhIiA6ICIiLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOworICBzd2l0Y2goc3gtPnN0YXRlKSB7CisgIGNhc2UgQ09OTkVDVF9TT0NLU19JTklUOgorICAgIC8qIFNPQ0tTNCBjYW4gb25seSBkbyBJUHY0LCBpbnNpc3QhICovCisgICAgY29ubi0+aXBfdmVyc2lvbiA9IENVUkxfSVBSRVNPTFZFX1Y0OworICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQorICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNPQ0tTNCVzOiBjb25uZWN0aW5nIHRvIEhUVFAgcHJveHkgJXMgcG9ydCAlZFxuIiwKKyAgICAgICAgICAgIHByb3RvY29sNGEgPyAiYSIgOiAiIiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKIAotICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7CisgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCBjb21tdW5pY2F0aW9uIHRvICVzOiVkXG4iLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOwogCi0gIGluZm9mKGRhdGEsICJTT0NLUzQgY29tbXVuaWNhdGlvbiB0byAlczolZFxuIiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKKyAgICAvKgorICAgICAqIENvbXBvc2Ugc29ja3M0IHJlcXVlc3QKKyAgICAgKgorICAgICAqIFJlcXVlc3QgZm9ybWF0CisgICAgICoKKyAgICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLi4uListLS0tKworICAgICAqICAgICB8IFZOIHwgQ0QgfCBEU1RQT1JUIHwgICAgICBEU1RJUCAgICAgICAgfCBVU0VSSUQgICAgICAgfE5VTEx8CisgICAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy4uLi4rLS0tLSsKKyAgICAgKiAjIG9mIGJ5dGVzOiAgMSAgICAxICAgICAgMiAgICAgICAgICAgICAgNCAgICAgICAgICAgdmFyaWFibGUgICAgICAgMQorICAgICAqLwogCi0gIC8qCi0gICAqIENvbXBvc2Ugc29ja3M0IHJlcXVlc3QKLSAgICoKLSAgICogUmVxdWVzdCBmb3JtYXQKLSAgICoKLSAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy4uLi4rLS0tLSsKLSAgICogICAgIHwgVk4gfCBDRCB8IERTVFBPUlQgfCAgICAgIERTVElQICAgICAgICB8IFVTRVJJRCAgICAgICB8TlVMTHwKLSAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy4uLi4rLS0tLSsKLSAgICogIyBvZiBieXRlczogIDEgICAgMSAgICAgIDIgICAgICAgICAgICAgIDQgICAgICAgICAgIHZhcmlhYmxlICAgICAgIDEKLSAgICovCisgICAgc29ja3NyZXFbMF0gPSA0OyAvKiB2ZXJzaW9uIChTT0NLUzQpICovCisgICAgc29ja3NyZXFbMV0gPSAxOyAvKiBjb25uZWN0ICovCisgICAgc29ja3NyZXFbMl0gPSAodW5zaWduZWQgY2hhcikoKHJlbW90ZV9wb3J0ID4+IDgpICYgMHhmZik7IC8qIFBPUlQgTVNCICovCisgICAgc29ja3NyZXFbM10gPSAodW5zaWduZWQgY2hhcikocmVtb3RlX3BvcnQgJiAweGZmKTsgICAgICAgIC8qIFBPUlQgTFNCICovCiAKLSAgc29ja3NyZXFbMF0gPSA0OyAvKiB2ZXJzaW9uIChTT0NLUzQpICovCi0gIHNvY2tzcmVxWzFdID0gMTsgLyogY29ubmVjdCAqLwotICBzb2Nrc3JlcVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgocmVtb3RlX3BvcnQgPj4gOCkgJiAweGZmKTsgLyogUE9SVCBNU0IgKi8KLSAgc29ja3NyZXFbM10gPSAodW5zaWduZWQgY2hhcikocmVtb3RlX3BvcnQgJiAweGZmKTsgICAgICAgIC8qIFBPUlQgTFNCICovCisgICAgLyogRE5TIHJlc29sdmUgb25seSBmb3IgU09DS1M0LCBub3QgU09DS1M0YSAqLworICAgIGlmKCFwcm90b2NvbDRhKSB7CisgICAgICBlbnVtIHJlc29sdmVfdCByYyA9CisgICAgICAgIEN1cmxfcmVzb2x2KGNvbm4sIGhvc3RuYW1lLCByZW1vdGVfcG9ydCwgRkFMU0UsICZkbnMpOwogCi0gIC8qIEROUyByZXNvbHZlIG9ubHkgZm9yIFNPQ0tTNCwgbm90IFNPQ0tTNGEgKi8KLSAgaWYoIXByb3RvY29sNGEpIHsKLSAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuczsKLSAgICBDdXJsX2FkZHJpbmZvICpocCA9IE5VTEw7Ci0gICAgaW50IHJjOworICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9FUlJPUikKKyAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKKyAgICAgIGVsc2UgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKSB7CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVNPTFZJTkcpOworICAgICAgICBpbmZvZihkYXRhLCAiU09DS1M0IG5vbi1ibG9ja2luZyByZXNvbHZlIG9mICVzXG4iLCBob3N0bmFtZSk7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVNPTFZFRCk7CisgICAgICBnb3RvIENPTk5FQ1RfUkVTT0xWRUQ7CisgICAgfQogCi0gICAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQsIEZBTFNFLCAmZG5zKTsKKyAgICAvKiBzb2NrczRhIGRvZXNuJ3QgcmVzb2x2ZSBhbnl0aGluZyBsb2NhbGx5ICovCisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICBnb3RvIENPTk5FQ1RfUkVRX0lOSVQ7CiAKLSAgICBpZihyYyA9PSBDVVJMUkVTT0xWX0VSUk9SKQotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKKyAgY2FzZSBDT05ORUNUX1JFU09MVklORzoKKyAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRoZSBuYW1lIHJlc29sdmVkIGJ5IG5vdyAqLworICAgIGRucyA9IEN1cmxfZmV0Y2hfYWRkcihjb25uLCBob3N0bmFtZSwgKGludCljb25uLT5wb3J0KTsKIAotICAgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKLSAgICAgIC8qIGlnbm9yZXMgdGhlIHJldHVybiBjb2RlLCBidXQgJ2RucycgcmVtYWlucyBOVUxMIG9uIGZhaWx1cmUgKi8KLSAgICAgICh2b2lkKUN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoY29ubiwgJmRucyk7Ci0KKyAgICBpZihkbnMpIHsKKyNpZmRlZiBDVVJMUkVTX0FTWU5DSAorICAgICAgY29ubi0+YXN5bmMuZG5zID0gZG5zOworICAgICAgY29ubi0+YXN5bmMuZG9uZSA9IFRSVUU7CisjZW5kaWYKKyAgICAgIGluZm9mKGRhdGEsICJIb3N0bmFtZSAnJXMnIHdhcyBmb3VuZFxuIiwgaG9zdG5hbWUpOworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFU09MVkVEKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXN1bHQgPSBDdXJsX3Jlc29sdl9jaGVjayhkYXRhLT5jb25uLCAmZG5zKTsKKyAgICAgIGlmKCFkbnMpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisgIENPTk5FQ1RfUkVTT0xWRUQ6CisgIGNhc2UgQ09OTkVDVF9SRVNPTFZFRDogeworICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpocCA9IE5VTEw7CisgICAgY2hhciBidWZbNjRdOwogICAgIC8qCiAgICAgICogV2UgY2Fubm90IHVzZSAnaG9zdGVudCcgYXMgYSBzdHJ1Y3QgdGhhdCBDdXJsX3Jlc29sdigpIHJldHVybnMuICBJdAogICAgICAqIHJldHVybnMgYSBDdXJsX2FkZHJpbmZvIHBvaW50ZXIgdGhhdCBtYXkgbm90IGFsd2F5cyBsb29rIHRoZSBzYW1lLgpAQCAtMTcxLDcgKzI4MCw2IEBACiAgICAgaWYoZG5zKQogICAgICAgaHAgPSBkbnMtPmFkZHI7CiAgICAgaWYoaHApIHsKLSAgICAgIGNoYXIgYnVmWzY0XTsKICAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoaHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAgICAgICBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQpIHsKQEAgLTE4Nyw3ICsyOTUsNiBAQAogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KLQogICAgICAgICBmYWlsZihkYXRhLCAiU09DS1M0IGNvbm5lY3Rpb24gdG8gJXMgbm90IHN1cHBvcnRlZFxuIiwgYnVmKTsKICAgICAgIH0KIApAQCAtMTk5LDE0OSArMzA2LDE3MSBAQAogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICAgIH0KICAgfQotCi0gIC8qCi0gICAqIFRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0aW5nICJJZGVudGlmaWNhdGlvbiBQcm90b2NvbCAoUkZDMTQxMykiLgotICAgKi8KLSAgc29ja3NyZXFbOF0gPSAwOyAvKiBlbnN1cmUgZW1wdHkgdXNlcmlkIGlzIE5VTC10ZXJtaW5hdGVkICovCi0gIGlmKHByb3h5X3VzZXIpIHsKLSAgICBzaXplX3QgcGxlbiA9IHN0cmxlbihwcm94eV91c2VyKTsKLSAgICBpZihwbGVuID49IHNpemVvZihzb2Nrc3JlcSkgLSA4KSB7Ci0gICAgICBmYWlsZihkYXRhLCAiVG9vIGxvbmcgU09DS1MgcHJveHkgbmFtZSwgY2FuJ3QgdXNlIVxuIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0KLSAgICAvKiBjb3B5IHRoZSBwcm94eSBuYW1lIFdJVEggdHJhaWxpbmcgemVybyAqLwotICAgIG1lbWNweShzb2Nrc3JlcSArIDgsIHByb3h5X3VzZXIsIHBsZW4gKyAxKTsKLSAgfQotCi0gIC8qCi0gICAqIE1ha2UgY29ubmVjdGlvbgotICAgKi8KLSAgewotICAgIGludCByZXN1bHQ7Ci0gICAgc3NpemVfdCBhY3R1YWxyZWFkOwotICAgIHNzaXplX3Qgd3JpdHRlbjsKLSAgICBzc2l6ZV90IGhvc3RuYW1lbGVuID0gMDsKLSAgICBzc2l6ZV90IHBhY2tldHNpemUgPSA5ICsKLSAgICAgIHN0cmxlbigoY2hhciAqKXNvY2tzcmVxICsgOCk7IC8qIHNpemUgaW5jbHVkaW5nIE5VTCAqLwotCi0gICAgLyogSWYgU09DS1M0YSwgc2V0IHNwZWNpYWwgaW52YWxpZCBJUCBhZGRyZXNzIDAuMC4wLnggKi8KLSAgICBpZihwcm90b2NvbDRhKSB7Ci0gICAgICBzb2Nrc3JlcVs0XSA9IDA7Ci0gICAgICBzb2Nrc3JlcVs1XSA9IDA7Ci0gICAgICBzb2Nrc3JlcVs2XSA9IDA7Ci0gICAgICBzb2Nrc3JlcVs3XSA9IDE7Ci0gICAgICAvKiBJZiBzdGlsbCBlbm91Z2ggcm9vbSBpbiBidWZmZXIsIGFsc28gYXBwZW5kIGhvc3RuYW1lICovCi0gICAgICBob3N0bmFtZWxlbiA9IChzc2l6ZV90KXN0cmxlbihob3N0bmFtZSkgKyAxOyAvKiBsZW5ndGggaW5jbHVkaW5nIE5VTCAqLwotICAgICAgaWYocGFja2V0c2l6ZSArIGhvc3RuYW1lbGVuIDw9IFNPQ0tTNFJFUUxFTikKLSAgICAgICAgc3RyY3B5KChjaGFyICopc29ja3NyZXEgKyBwYWNrZXRzaXplLCBob3N0bmFtZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGhvc3RuYW1lbGVuID0gMDsgLyogRmxhZzogaG9zdG5hbWUgZGlkIG5vdCBmaXQgaW4gYnVmZmVyICovCi0gICAgfQotCi0gICAgLyogU2VuZCByZXF1ZXN0ICovCi0gICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRzaXplICsgaG9zdG5hbWVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4pOwotICAgIGlmKGNvZGUgfHwgKHdyaXR0ZW4gIT0gcGFja2V0c2l6ZSArIGhvc3RuYW1lbGVuKSkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QuIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0KLSAgICBpZihwcm90b2NvbDRhICYmIGhvc3RuYW1lbGVuID09IDApIHsKLSAgICAgIC8qIFNPQ0tTNGEgd2l0aCB2ZXJ5IGxvbmcgaG9zdG5hbWUgLSBzZW5kIHRoYXQgbmFtZSBzZXBhcmF0ZWx5ICovCi0gICAgICBob3N0bmFtZWxlbiA9IChzc2l6ZV90KXN0cmxlbihob3N0bmFtZSkgKyAxOwotICAgICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilob3N0bmFtZSwgaG9zdG5hbWVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpdHRlbik7Ci0gICAgICBpZihjb2RlIHx8ICh3cml0dGVuICE9IGhvc3RuYW1lbGVuKSkgewotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M0IGNvbm5lY3QgcmVxdWVzdC4iKTsKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFUV9JTklUOgorICBjYXNlIENPTk5FQ1RfUkVRX0lOSVQ6CisgICAgLyoKKyAgICAgKiBUaGlzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGluZyAiSWRlbnRpZmljYXRpb24gUHJvdG9jb2wgKFJGQzE0MTMpIi4KKyAgICAgKi8KKyAgICBzb2Nrc3JlcVs4XSA9IDA7IC8qIGVuc3VyZSBlbXB0eSB1c2VyaWQgaXMgTlVMLXRlcm1pbmF0ZWQgKi8KKyAgICBpZihwcm94eV91c2VyKSB7CisgICAgICBzaXplX3QgcGxlbiA9IHN0cmxlbihwcm94eV91c2VyKTsKKyAgICAgIGlmKHBsZW4gPj0gc2l6ZW9mKHN4LT5zb2Nrc3JlcSkgLSA4KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJUb28gbG9uZyBTT0NLUyBwcm94eSBuYW1lLCBjYW4ndCB1c2UhXG4iKTsKICAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYWNrZXRzaXplID0gODsgLyogcmVjZWl2ZSBkYXRhIHNpemUgKi8KLQotICAgIC8qIFJlY2VpdmUgcmVzcG9uc2UgKi8KLSAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgcGFja2V0c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFjdHVhbHJlYWQpOwotICAgIGlmKHJlc3VsdCB8fCAoYWN0dWFscmVhZCAhPSBwYWNrZXRzaXplKSkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QgYWNrLiIpOwotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICAgIC8qIGNvcHkgdGhlIHByb3h5IG5hbWUgV0lUSCB0cmFpbGluZyB6ZXJvICovCisgICAgICBtZW1jcHkoc29ja3NyZXEgKyA4LCBwcm94eV91c2VyLCBwbGVuICsgMSk7CiAgICAgfQogCiAgICAgLyoKLSAgICAgKiBSZXNwb25zZSBmb3JtYXQKLSAgICAgKgotICAgICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKwotICAgICAqICAgICB8IFZOIHwgQ0QgfCBEU1RQT1JUIHwgICAgICBEU1RJUCAgICAgICAgfAotICAgICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKwotICAgICAqICMgb2YgYnl0ZXM6ICAxICAgIDEgICAgICAyICAgICAgICAgICAgICA0Ci0gICAgICoKLSAgICAgKiBWTiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgcmVwbHkgY29kZSBhbmQgc2hvdWxkIGJlIDAuIENEIGlzIHRoZSByZXN1bHQKLSAgICAgKiBjb2RlIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAgICAqCi0gICAgICogOTA6IHJlcXVlc3QgZ3JhbnRlZAotICAgICAqIDkxOiByZXF1ZXN0IHJlamVjdGVkIG9yIGZhaWxlZAotICAgICAqIDkyOiByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvCi0gICAgICogICAgIGlkZW50ZCBvbiB0aGUgY2xpZW50Ci0gICAgICogOTM6IHJlcXVlc3QgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgY2xpZW50IHByb2dyYW0gYW5kIGlkZW50ZAotICAgICAqICAgICByZXBvcnQgZGlmZmVyZW50IHVzZXItaWRzCisgICAgICogTWFrZSBjb25uZWN0aW9uCiAgICAgICovCisgICAgeworICAgICAgc3NpemVfdCBwYWNrZXRzaXplID0gOSArCisgICAgICAgIHN0cmxlbigoY2hhciAqKXNvY2tzcmVxICsgOCk7IC8qIHNpemUgaW5jbHVkaW5nIE5VTCAqLwogCi0gICAgLyogd3JvbmcgdmVyc2lvbiA/ICovCi0gICAgaWYoc29ja3NyZXFbMF0gIT0gMCkgewotICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJTT0NLUzQgcmVwbHkgaGFzIHdyb25nIHZlcnNpb24sIHZlcnNpb24gc2hvdWxkIGJlIDAuIik7CisgICAgICAvKiBJZiBTT0NLUzRhLCBzZXQgc3BlY2lhbCBpbnZhbGlkIElQIGFkZHJlc3MgMC4wLjAueCAqLworICAgICAgaWYocHJvdG9jb2w0YSkgeworICAgICAgICBzc2l6ZV90IGhvc3RuYW1lbGVuID0gMDsKKyAgICAgICAgc29ja3NyZXFbNF0gPSAwOworICAgICAgICBzb2Nrc3JlcVs1XSA9IDA7CisgICAgICAgIHNvY2tzcmVxWzZdID0gMDsKKyAgICAgICAgc29ja3NyZXFbN10gPSAxOworICAgICAgICAvKiBhcHBlbmQgaG9zdG5hbWUgKi8KKyAgICAgICAgaG9zdG5hbWVsZW4gPSAoc3NpemVfdClzdHJsZW4oaG9zdG5hbWUpICsgMTsgLyogbGVuZ3RoIGluY2x1ZGluZyBOVUwgKi8KKyAgICAgICAgaWYoaG9zdG5hbWVsZW4gPD0gMjU1KQorICAgICAgICAgIHN0cmNweSgoY2hhciAqKXNvY2tzcmVxICsgcGFja2V0c2l6ZSwgaG9zdG5hbWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU09DS1M0OiB0b28gbG9uZyBob3N0IG5hbWUiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgICB9CisgICAgICAgIHBhY2tldHNpemUgKz0gaG9zdG5hbWVsZW47CisgICAgICB9CisgICAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgICAgc3gtPm91dHN0YW5kaW5nID0gcGFja2V0c2l6ZTsKKyAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfU0VORElORyk7CisgICAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9SRVFfU0VORElORzoKKyAgICAvKiBTZW5kIHJlcXVlc3QgKi8KKyAgICByZXN1bHQgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QuIik7CiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KKyAgICBpZih3cml0dGVuICE9IHN4LT5vdXRzdGFuZGluZykgeworICAgICAgLyogbm90IGRvbmUsIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IHdyaXR0ZW47CisgICAgICBzeC0+b3V0cCArPSB3cml0dGVuOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KIAotICAgIC8qIFJlc3VsdCAqLwotICAgIHN3aXRjaChzb2Nrc3JlcVsxXSkgewotICAgIGNhc2UgOTA6Ci0gICAgICBpbmZvZihkYXRhLCAiU09DS1M0JXMgcmVxdWVzdCBncmFudGVkLlxuIiwgcHJvdG9jb2w0YT8iYSI6IiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA5MToKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCi0gICAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIG9yIGZhaWxlZC4iLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gICAgY2FzZSA5MjoKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCi0gICAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvICIKLSAgICAgICAgICAgICJpZGVudGQgb24gdGhlIGNsaWVudC4iLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gICAgY2FzZSA5MzoKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCi0gICAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgdGhlIGNsaWVudCBwcm9ncmFtIGFuZCBpZGVudGQgIgotICAgICAgICAgICAgInJlcG9ydCBkaWZmZXJlbnQgdXNlci1pZHMuIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgotICAgICAgICAgICAgIiwgVW5rbm93bi4iLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAvKiBkb25lIHNlbmRpbmchICovCisgICAgc3gtPm91dHN0YW5kaW5nID0gODsgLyogcmVjZWl2ZSBkYXRhIHNpemUgKi8KKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9TT0NLU19SRUFEKTsKKworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9TT0NLU19SRUFEOgorICAgIC8qIFJlY2VpdmUgcmVzcG9uc2UgKi8KKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZhY3R1YWxyZWFkKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTT0NLUzQ6IEZhaWxlZCByZWNlaXZpbmcgY29ubmVjdCByZXF1ZXN0IGFjazogJXMiLAorICAgICAgICAgICAgY3VybF9lYXN5X3N0cmVycm9yKHJlc3VsdCkpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9CisgICAgZWxzZSBpZighcmVzdWx0ICYmICFhY3R1YWxyZWFkKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlZCAqLworICAgICAgZmFpbGYoZGF0YSwgImNvbm5lY3Rpb24gdG8gcHJveHkgY2xvc2VkIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gcmVhZGluZyBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IGFjdHVhbHJlYWQ7CisgICAgICBzeC0+b3V0cCArPSBhY3R1YWxyZWFkOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfRE9ORSk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6IC8qIGxvdHMgb2YgdW51c2VkIHN0YXRlcyBpbiBTT0NLUzQgKi8KKyAgICBicmVhazsKICAgfQogCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOworICAvKgorICAgKiBSZXNwb25zZSBmb3JtYXQKKyAgICoKKyAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICAqICAgICB8IFZOIHwgQ0QgfCBEU1RQT1JUIHwgICAgICBEU1RJUCAgICAgICAgfAorICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgICogIyBvZiBieXRlczogIDEgICAgMSAgICAgIDIgICAgICAgICAgICAgIDQKKyAgICoKKyAgICogVk4gaXMgdGhlIHZlcnNpb24gb2YgdGhlIHJlcGx5IGNvZGUgYW5kIHNob3VsZCBiZSAwLiBDRCBpcyB0aGUgcmVzdWx0CisgICAqIGNvZGUgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICAqCisgICAqIDkwOiByZXF1ZXN0IGdyYW50ZWQKKyAgICogOTE6IHJlcXVlc3QgcmVqZWN0ZWQgb3IgZmFpbGVkCisgICAqIDkyOiByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvCisgICAqICAgICBpZGVudGQgb24gdGhlIGNsaWVudAorICAgKiA5MzogcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIHRoZSBjbGllbnQgcHJvZ3JhbSBhbmQgaWRlbnRkCisgICAqICAgICByZXBvcnQgZGlmZmVyZW50IHVzZXItaWRzCisgICAqLwogCisgIC8qIHdyb25nIHZlcnNpb24gPyAqLworICBpZihzb2Nrc3JlcVswXSAhPSAwKSB7CisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAiU09DS1M0IHJlcGx5IGhhcyB3cm9uZyB2ZXJzaW9uLCB2ZXJzaW9uIHNob3VsZCBiZSAwLiIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKworICAvKiBSZXN1bHQgKi8KKyAgc3dpdGNoKHNvY2tzcmVxWzFdKSB7CisgIGNhc2UgOTA6CisgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCVzIHJlcXVlc3QgZ3JhbnRlZC5cbiIsIHByb3RvY29sNGE/ImEiOiIiKTsKKyAgICBicmVhazsKKyAgY2FzZSA5MToKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIG9yIGZhaWxlZC4iLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCisgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgY2FzZSA5MjoKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvICIKKyAgICAgICAgICAiaWRlbnRkIG9uIHRoZSBjbGllbnQuIiwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs0XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNV0sCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAorICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMV0pOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIGNhc2UgOTM6CisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCisgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIHRoZSBjbGllbnQgcHJvZ3JhbSBhbmQgaWRlbnRkICIKKyAgICAgICAgICAicmVwb3J0IGRpZmZlcmVudCB1c2VyLWlkcy4iLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCisgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAiLCBVbmtub3duLiIsCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzJdIDw8IDgpIHwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbM10pLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgKmRvbmUgPSBUUlVFOwogICByZXR1cm4gQ1VSTEVfT0s7IC8qIFByb3h5IHdhcyBzdWNjZXNzZnVsISAqLwogfQogCkBAIC0zNTQsNyArNDgzLDggQEAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgaW50IHJlbW90ZV9wb3J0LAogICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCiB7CiAgIC8qCiAgICAgQWNjb3JkaW5nIHRvIHRoZSBSRkMxOTI4LCBzZWN0aW9uICI2LiAgUmVwbGllcyIuIFRoaXMgaXMgd2hhdCBhIFNPQ0s1CkBAIC0zNzIsMTQwICs1MDIsMTYyIEBACiAgICAgbyAgUkVQICAgIFJlcGx5IGZpZWxkOgogICAgIG8gIFgnMDAnIHN1Y2NlZWRlZAogICAqLwotCi0gIHVuc2lnbmVkIGNoYXIgc29ja3NyZXFbNjAwXTsgLyogcm9vbSBmb3IgbGFyZ2UgdXNlci9wdyAoMjU1IG1heCBlYWNoKSAqLworICB1bnNpZ25lZCBjaGFyICpzb2Nrc3JlcSA9ICZjb25uLT5jbm5jdC5zb2Nrc3JlcVswXTsKKyAgY2hhciBkZXN0WzI1Nl0gPSAidW5rbm93biI7ICAvKiBwcmludGFibGUgaG9zdG5hbWU6cG9ydCAqLwogICBpbnQgaWR4OwogICBzc2l6ZV90IGFjdHVhbHJlYWQ7CiAgIHNzaXplX3Qgd3JpdHRlbjsKLSAgaW50IHJlc3VsdDsKLSAgQ1VSTGNvZGUgY29kZTsKLSAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBDVVJMY29kZSByZXN1bHQ7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGltZWRpZmZfdCB0aW1lb3V0OwogICBib29sIHNvY2tzNV9yZXNvbHZlX2xvY2FsID0KICAgICAoY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzUpID8gVFJVRSA6IEZBTFNFOwogICBjb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKICAgc3NpemVfdCBsZW4gPSAwOwogICBjb25zdCB1bnNpZ25lZCBsb25nIGF1dGggPSBkYXRhLT5zZXQuc29ja3M1YXV0aDsKICAgYm9vbCBhbGxvd19nc3NhcGkgPSBGQUxTRTsKKyAgc3RydWN0IGNvbm5zdGF0ZSAqc3ggPSAmY29ubi0+Y25uY3Q7CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zID0gTlVMTDsKIAotICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKLSAgICBpbmZvZihjb25uLT5kYXRhLCAiU09DS1M1OiBjb25uZWN0aW5nIHRvIEhUVFAgcHJveHkgJXMgcG9ydCAlZFxuIiwKLSAgICAgICAgICBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOworICBpZighU09DS1NfU1RBVEUoc3gtPnN0YXRlKSAmJiAhKmRvbmUpCisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1NPQ0tTX0lOSVQpOwogCi0gIC8qIFJGQzE5MjggY2hhcHRlciA1IHNwZWNpZmllcyBtYXggMjU1IGNoYXJzIGZvciBkb21haW4gbmFtZSBpbiBwYWNrZXQgKi8KLSAgaWYoIXNvY2tzNV9yZXNvbHZlX2xvY2FsICYmIGhvc3RuYW1lX2xlbiA+IDI1NSkgewotICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzU6IHNlcnZlciByZXNvbHZpbmcgZGlzYWJsZWQgZm9yIGhvc3RuYW1lcyBvZiAiCi0gICAgICAgICAgImxlbmd0aCA+IDI1NSBbYWN0dWFsIGxlbj0lenVdXG4iLCBob3N0bmFtZV9sZW4pOwotICAgIHNvY2tzNV9yZXNvbHZlX2xvY2FsID0gVFJVRTsKLSAgfQorICBzd2l0Y2goc3gtPnN0YXRlKSB7CisgIGNhc2UgQ09OTkVDVF9TT0NLU19JTklUOgorICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQorICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNPQ0tTNTogY29ubmVjdGluZyB0byBIVFRQIHByb3h5ICVzIHBvcnQgJWRcbiIsCisgICAgICAgICAgICBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOwogCi0gIC8qIGdldCB0aW1lb3V0ICovCi0gIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworICAgIC8qIFJGQzE5MjggY2hhcHRlciA1IHNwZWNpZmllcyBtYXggMjU1IGNoYXJzIGZvciBkb21haW4gbmFtZSBpbiBwYWNrZXQgKi8KKyAgICBpZighc29ja3M1X3Jlc29sdmVfbG9jYWwgJiYgaG9zdG5hbWVfbGVuID4gMjU1KSB7CisgICAgICBpbmZvZihjb25uLT5kYXRhLCAiU09DS1M1OiBzZXJ2ZXIgcmVzb2x2aW5nIGRpc2FibGVkIGZvciBob3N0bmFtZXMgb2YgIgorICAgICAgICAgICAgImxlbmd0aCA+IDI1NSBbYWN0dWFsIGxlbj0lenVdXG4iLCBob3N0bmFtZV9sZW4pOworICAgICAgc29ja3M1X3Jlc29sdmVfbG9jYWwgPSBUUlVFOworICAgIH0KIAotICBpZih0aW1lb3V0IDwgMCkgewotICAgIC8qIHRpbWUtb3V0LCBiYWlsIG91dCwgZ28gaG9tZSAqLwotICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIHRpbWUtb3V0Iik7Ci0gICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgfQotCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOwotCi0gIC8qIHdhaXQgdW50aWwgc29ja2V0IGdldHMgY29ubmVjdGVkICovCi0gIHJlc3VsdCA9IFNPQ0tFVF9XUklUQUJMRShzb2NrLCB0aW1lb3V0KTsKLQotICBpZigtMSA9PSByZXN1bHQpIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1OiBubyBjb25uZWN0aW9uIGhlcmUiKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0gIGlmKDAgPT0gcmVzdWx0KSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNTogY29ubmVjdGlvbiB0aW1lb3V0Iik7Ci0gICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgfQotCi0gIGlmKHJlc3VsdCAmIENVUkxfQ1NFTEVDVF9FUlIpIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1OiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY29ubmVjdGlvbiIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLQotICBpZihhdXRoICYgfihDVVJMQVVUSF9CQVNJQyB8IENVUkxBVVRIX0dTU0FQSSkpCi0gICAgaW5mb2YoY29ubi0+ZGF0YSwKLSAgICAgICAgIndhcm5pbmc6IHVuc3VwcG9ydGVkIHZhbHVlIHBhc3NlZCB0byBDVVJMT1BUX1NPQ0tTNV9BVVRIOiAlbHVcbiIsCi0gICAgICAgIGF1dGgpOwotICBpZighKGF1dGggJiBDVVJMQVVUSF9CQVNJQykpCi0gICAgLyogZGlzYWJsZSB1c2VybmFtZS9wYXNzd29yZCBhdXRoICovCi0gICAgcHJveHlfdXNlciA9IE5VTEw7CisgICAgaWYoYXV0aCAmIH4oQ1VSTEFVVEhfQkFTSUMgfCBDVVJMQVVUSF9HU1NBUEkpKQorICAgICAgaW5mb2YoY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICJ3YXJuaW5nOiB1bnN1cHBvcnRlZCB2YWx1ZSBwYXNzZWQgdG8gQ1VSTE9QVF9TT0NLUzVfQVVUSDogJWx1XG4iLAorICAgICAgICAgICAgYXV0aCk7CisgICAgaWYoIShhdXRoICYgQ1VSTEFVVEhfQkFTSUMpKQorICAgICAgLyogZGlzYWJsZSB1c2VybmFtZS9wYXNzd29yZCBhdXRoICovCisgICAgICBwcm94eV91c2VyID0gTlVMTDsKICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGlmKGF1dGggJiBDVVJMQVVUSF9HU1NBUEkpCi0gICAgYWxsb3dfZ3NzYXBpID0gVFJVRTsKKyAgICBpZihhdXRoICYgQ1VSTEFVVEhfR1NTQVBJKQorICAgICAgYWxsb3dfZ3NzYXBpID0gVFJVRTsKICNlbmRpZgogCi0gIGlkeCA9IDA7Ci0gIHNvY2tzcmVxW2lkeCsrXSA9IDU7ICAgLyogdmVyc2lvbiAqLwotICBpZHgrKzsgICAgICAgICAgICAgICAgIC8qIHJlc2VydmUgZm9yIHRoZSBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyAqLwotICBzb2Nrc3JlcVtpZHgrK10gPSAwOyAgIC8qIG5vIGF1dGhlbnRpY2F0aW9uICovCi0gIGlmKGFsbG93X2dzc2FwaSkKLSAgICBzb2Nrc3JlcVtpZHgrK10gPSAxOyAvKiBHU1MtQVBJICovCi0gIGlmKHByb3h5X3VzZXIpCi0gICAgc29ja3NyZXFbaWR4KytdID0gMjsgLyogdXNlcm5hbWUvcGFzc3dvcmQgKi8KLSAgLyogd3JpdGUgdGhlIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2RzICovCi0gIHNvY2tzcmVxWzFdID0gKHVuc2lnbmVkIGNoYXIpIChpZHggLSAyKTsKKyAgICBpZHggPSAwOworICAgIHNvY2tzcmVxW2lkeCsrXSA9IDU7ICAgLyogdmVyc2lvbiAqLworICAgIGlkeCsrOyAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKi8KKyAgICBzb2Nrc3JlcVtpZHgrK10gPSAwOyAgIC8qIG5vIGF1dGhlbnRpY2F0aW9uICovCisgICAgaWYoYWxsb3dfZ3NzYXBpKQorICAgICAgc29ja3NyZXFbaWR4KytdID0gMTsgLyogR1NTLUFQSSAqLworICAgIGlmKHByb3h5X3VzZXIpCisgICAgICBzb2Nrc3JlcVtpZHgrK10gPSAyOyAvKiB1c2VybmFtZS9wYXNzd29yZCAqLworICAgIC8qIHdyaXRlIHRoZSBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyAqLworICAgIHNvY2tzcmVxWzFdID0gKHVuc2lnbmVkIGNoYXIpIChpZHggLSAyKTsKIAotICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7Ci0KLSAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBjb21tdW5pY2F0aW9uIHRvICVzOiVkXG4iLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOwotCi0gIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsICgyICsgKGludClzb2Nrc3JlcVsxXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuKTsKLSAgaWYoY29kZSB8fCAod3JpdHRlbiAhPSAoMiArIChpbnQpc29ja3NyZXFbMV0pKSkgewotICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gc2VuZCBpbml0aWFsIFNPQ0tTNSByZXF1ZXN0LiIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLQotICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBUUlVFKTsKLQotICByZXN1bHQgPSBTT0NLRVRfUkVBREFCTEUoc29jaywgdGltZW91dCk7Ci0KLSAgaWYoLTEgPT0gcmVzdWx0KSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNSBub3RoaW5nIHRvIHJlYWQiKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0gIGlmKDAgPT0gcmVzdWx0KSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNSByZWFkIHRpbWVvdXQiKTsKLSAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICB9Ci0KLSAgaWYocmVzdWx0ICYgQ1VSTF9DU0VMRUNUX0VSUikgewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTT0NLUzUgcmVhZCBlcnJvciBvY2N1cnJlZCIpOwotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOwotICB9Ci0KLSAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgRkFMU0UpOwotCi0gIHJlc3VsdCA9IEN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCAyLCAmYWN0dWFscmVhZCk7Ci0gIGlmKHJlc3VsdCB8fCAoYWN0dWFscmVhZCAhPSAyKSkgewotICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gcmVjZWl2ZSBpbml0aWFsIFNPQ0tTNSByZXNwb25zZS4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0KLSAgaWYoc29ja3NyZXFbMF0gIT0gNSkgewotICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBpbnZhbGlkIHZlcnNpb24gaW4gaW5pdGlhbCBTT0NLUzUgcmVzcG9uc2UuIik7Ci0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgfQotICBpZihzb2Nrc3JlcVsxXSA9PSAwKSB7Ci0gICAgLyogTm90aGluZyB0byBkbywgbm8gYXV0aGVudGljYXRpb24gbmVlZGVkICovCi0gICAgOwotICB9Ci0jaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQotICBlbHNlIGlmKGFsbG93X2dzc2FwaSAmJiAoc29ja3NyZXFbMV0gPT0gMSkpIHsKLSAgICBjb2RlID0gQ3VybF9TT0NLUzVfZ3NzYXBpX25lZ290aWF0ZShzb2NraW5kZXgsIGNvbm4pOwotICAgIGlmKGNvZGUpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gbmVnb3RpYXRlIFNPQ0tTNSBHU1MtQVBJIGNvbnRleHQuIik7CisgICAgcmVzdWx0ID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrZmQsIChjaGFyICopc29ja3NyZXEsIGlkeCwgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byBzZW5kIGluaXRpYWwgU09DS1M1IHJlcXVlc3QuIik7CiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KLSAgfQorICAgIGlmKHdyaXR0ZW4gIT0gaWR4KSB7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfU09DS1NfU0VORCk7CisgICAgICBzeC0+b3V0c3RhbmRpbmcgPSBpZHggLSB3cml0dGVuOworICAgICAgc3gtPm91dHAgPSAmc29ja3NyZXFbd3JpdHRlbl07CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9TT0NLU19SRUFEKTsKKyAgICBnb3RvIENPTk5FQ1RfU09DS1NfUkVBRF9JTklUOworICBjYXNlIENPTk5FQ1RfU09DS1NfU0VORDoKKyAgICByZXN1bHQgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byBzZW5kIGluaXRpYWwgU09DS1M1IHJlcXVlc3QuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBpZih3cml0dGVuICE9IHN4LT5vdXRzdGFuZGluZykgeworICAgICAgLyogbm90IGRvbmUsIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IHdyaXR0ZW47CisgICAgICBzeC0+b3V0cCArPSB3cml0dGVuOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1NPQ0tTX1JFQURfSU5JVDoKKyAgY2FzZSBDT05ORUNUX1NPQ0tTX1JFQURfSU5JVDoKKyAgICBzeC0+b3V0c3RhbmRpbmcgPSAyOyAvKiBleHBlY3QgdHdvIGJ5dGVzICovCisgICAgc3gtPm91dHAgPSBzb2Nrc3JlcTsgLyogc3RvcmUgaXQgaGVyZSAqLworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9TT0NLU19SRUFEOgorICAgIHJlc3VsdCA9IEN1cmxfcmVhZF9wbGFpbihzb2NrZmQsIChjaGFyICopc3gtPm91dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJmFjdHVhbHJlYWQpOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byByZWNlaXZlIGluaXRpYWwgU09DS1M1IHJlc3BvbnNlLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgZWxzZSBpZighcmVzdWx0ICYmICFhY3R1YWxyZWFkKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlZCAqLworICAgICAgZmFpbGYoZGF0YSwgIkNvbm5lY3Rpb24gdG8gcHJveHkgY2xvc2VkIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gcmVhZGluZyBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IGFjdHVhbHJlYWQ7CisgICAgICBzeC0+b3V0cCArPSBhY3R1YWxyZWFkOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzBdICE9IDUpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBpbnZhbGlkIHZlcnNpb24gaW4gaW5pdGlhbCBTT0NLUzUgcmVzcG9uc2UuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzFdID09IDApIHsKKyAgICAgIC8qIERPTkUhIE5vIGF1dGhlbnRpY2F0aW9uIG5lZWRlZC4gU2VuZCByZXF1ZXN0LiAqLworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICAgIGdvdG8gQ09OTkVDVF9SRVFfSU5JVDsKKyAgICB9CisgICAgZWxzZSBpZihzb2Nrc3JlcVsxXSA9PSAyKSB7CisgICAgICAvKiByZWd1bGFyIG5hbWUgKyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiAqLworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX0FVVEhfSU5JVCk7CisgICAgICBnb3RvIENPTk5FQ1RfQVVUSF9JTklUOworICAgIH0KKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgICAgZWxzZSBpZihhbGxvd19nc3NhcGkgJiYgKHNvY2tzcmVxWzFdID09IDEpKSB7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfR1NTQVBJX0lOSVQpOworICAgICAgcmVzdWx0ID0gQ3VybF9TT0NLUzVfZ3NzYXBpX25lZ290aWF0ZShzb2NraW5kZXgsIGNvbm4pOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gbmVnb3RpYXRlIFNPQ0tTNSBHU1MtQVBJIGNvbnRleHQuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgfQogI2VuZGlmCi0gIGVsc2UgaWYoc29ja3NyZXFbMV0gPT0gMikgeworICAgIGVsc2UgeworICAgICAgLyogZXJyb3IgKi8KKyAgICAgIGlmKCFhbGxvd19nc3NhcGkgJiYgKHNvY2tzcmVxWzFdID09IDEpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICJTT0NLUzUgR1NTQVBJIHBlci1tZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgICBlbHNlIGlmKHNvY2tzcmVxWzFdID09IDI1NSkgeworICAgICAgICBmYWlsZihkYXRhLCAiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIHdhcyBhY2NlcHRhYmxlLiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgfQorICAgIH0KKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJVbmRvY3VtZW50ZWQgU09DS1M1IG1vZGUgYXR0ZW1wdGVkIHRvIGJlIHVzZWQgYnkgc2VydmVyLiIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorICBjYXNlIENPTk5FQ1RfR1NTQVBJX0lOSVQ6CisgICAgLyogR1NTQVBJIHN0dWZmIGRvbmUgbm9uLWJsb2NraW5nICovCisgICAgYnJlYWs7CisjZW5kaWYKKworICBkZWZhdWx0OiAvKiBkbyBub3RoaW5nISAqLworICAgIGJyZWFrOworCisgIENPTk5FQ1RfQVVUSF9JTklUOgorICBjYXNlIENPTk5FQ1RfQVVUSF9JTklUOiB7CiAgICAgLyogTmVlZHMgdXNlciBuYW1lIGFuZCBwYXNzd29yZCAqLwogICAgIHNpemVfdCBwcm94eV91c2VyX2xlbiwgcHJveHlfcGFzc3dvcmRfbGVuOwogICAgIGlmKHByb3h5X3VzZXIgJiYgcHJveHlfcGFzc3dvcmQpIHsKQEAgLTU0NiwyNTcgKzY5OCwzMTAgQEAKICAgICAgIG1lbWNweShzb2Nrc3JlcSArIGxlbiwgcHJveHlfcGFzc3dvcmQsIHByb3h5X3Bhc3N3b3JkX2xlbik7CiAgICAgfQogICAgIGxlbiArPSBwcm94eV9wYXNzd29yZF9sZW47Ci0KLSAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCBsZW4sICZ3cml0dGVuKTsKLSAgICBpZihjb2RlIHx8IChsZW4gIT0gd3JpdHRlbikpIHsKKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfQVVUSF9TRU5EKTsKKyAgICBzeC0+b3V0c3RhbmRpbmcgPSBsZW47CisgICAgc3gtPm91dHAgPSBzb2Nrc3JlcTsKKyAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9BVVRIX1NFTkQ6CisgICAgcmVzdWx0ID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrZmQsIChjaGFyICopc3gtPm91dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZ3cml0dGVuKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBTT0NLUzUgc3ViLW5lZ290aWF0aW9uIHJlcXVlc3QuIik7CiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KLQotICAgIHJlc3VsdCA9IEN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCAyLCAmYWN0dWFscmVhZCk7Ci0gICAgaWYocmVzdWx0IHx8IChhY3R1YWxyZWFkICE9IDIpKSB7CisgICAgaWYoc3gtPm91dHN0YW5kaW5nICE9IHdyaXR0ZW4pIHsKKyAgICAgIC8qIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IHdyaXR0ZW47CisgICAgICBzeC0+b3V0cCArPSB3cml0dGVuOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4LT5vdXRzdGFuZGluZyA9IDI7CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX0FVVEhfUkVBRCk7CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBDT05ORUNUX0FVVEhfUkVBRDoKKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZhY3R1YWxyZWFkKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gcmVjZWl2ZSBTT0NLUzUgc3ViLW5lZ290aWF0aW9uIHJlc3BvbnNlLiIpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9Ci0KKyAgICBlbHNlIGlmKCFyZXN1bHQgJiYgIWFjdHVhbHJlYWQpIHsKKyAgICAgIC8qIGNvbm5lY3Rpb24gY2xvc2VkICovCisgICAgICBmYWlsZihkYXRhLCAiY29ubmVjdGlvbiB0byBwcm94eSBjbG9zZWQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGVsc2UgaWYoYWN0dWFscmVhZCAhPSBzeC0+b3V0c3RhbmRpbmcpIHsKKyAgICAgIC8qIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IGFjdHVhbHJlYWQ7CisgICAgICBzeC0+b3V0cCArPSBhY3R1YWxyZWFkOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KICAgICAvKiBpZ25vcmUgdGhlIGZpcnN0IChWRVIpIGJ5dGUgKi8KLSAgICBpZihzb2Nrc3JlcVsxXSAhPSAwKSB7IC8qIHN0YXR1cyAqLworICAgIGVsc2UgaWYoc29ja3NyZXFbMV0gIT0gMCkgeyAvKiBzdGF0dXMgKi8KICAgICAgIGZhaWxmKGRhdGEsICJVc2VyIHdhcyByZWplY3RlZCBieSB0aGUgU09DS1M1IHNlcnZlciAoJWQgJWQpLiIsCiAgICAgICAgICAgICBzb2Nrc3JlcVswXSwgc29ja3NyZXFbMV0pOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9CiAKICAgICAvKiBFdmVyeXRoaW5nIGlzIGdvb2Qgc28gZmFyLCB1c2VyIHdhcyBhdXRoZW50aWNhdGVkISAqLwotICB9Ci0gIGVsc2UgewotICAgIC8qIGVycm9yICovCi0gICAgaWYoIWFsbG93X2dzc2FwaSAmJiAoc29ja3NyZXFbMV0gPT0gMSkpIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiU09DS1M1IEdTU0FQSSBwZXItbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgICB9Ci0gICAgaWYoc29ja3NyZXFbMV0gPT0gMjU1KSB7Ci0gICAgICBpZighcHJveHlfdXNlciB8fCAhKnByb3h5X3VzZXIpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICAgIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgYWNjZXB0YWJsZS4gKEl0IGlzIHF1aXRlIGxpa2VseSIKLSAgICAgICAgICAgICAgIiB0aGF0IHRoZSBTT0NLUzUgc2VydmVyIHdhbnRlZCBhIHVzZXJuYW1lL3Bhc3N3b3JkLCBzaW5jZSBub25lIgotICAgICAgICAgICAgICAiIHdhcyBzdXBwbGllZCB0byB0aGUgc2VydmVyIG9uIHRoaXMgY29ubmVjdGlvbi4pIik7CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFUV9JTklUOgorICBjYXNlIENPTk5FQ1RfUkVRX0lOSVQ6CisgICAgaWYoc29ja3M1X3Jlc29sdmVfbG9jYWwpIHsKKyAgICAgIGVudW0gcmVzb2x2ZV90IHJjID0gQ3VybF9yZXNvbHYoY29ubiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgJmRucyk7CisKKyAgICAgIGlmKHJjID09IENVUkxSRVNPTFZfRVJST1IpCisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVDsKKworICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKSB7CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVNPTFZJTkcpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgYWNjZXB0YWJsZS4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfUkVTT0xWRUQpOworICAgICAgZ290byBDT05ORUNUX1JFU09MVkVEOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiVW5kb2N1bWVudGVkIFNPQ0tTNSBtb2RlIGF0dGVtcHRlZCB0byBiZSB1c2VkIGJ5IHNlcnZlci4iKTsKLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gICAgfQotICB9CisgICAgZ290byBDT05ORUNUX1JFU09MVkVfUkVNT1RFOwogCi0gIC8qIEF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLCBub3cgc3BlY2lmeSBkZXN0aW5hdGlvbiB0byB0aGUgcHJveHkgKi8KLSAgbGVuID0gMDsKLSAgc29ja3NyZXFbbGVuKytdID0gNTsgLyogdmVyc2lvbiAoU09DS1M1KSAqLwotICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBjb25uZWN0ICovCi0gIHNvY2tzcmVxW2xlbisrXSA9IDA7IC8qIG11c3QgYmUgemVybyAqLworICBjYXNlIENPTk5FQ1RfUkVTT0xWSU5HOgorICAgIC8qIGNoZWNrIGlmIHdlIGhhdmUgdGhlIG5hbWUgcmVzb2x2ZWQgYnkgbm93ICovCisgICAgZG5zID0gQ3VybF9mZXRjaF9hZGRyKGNvbm4sIGhvc3RuYW1lLCAoaW50KWNvbm4tPnBvcnQpOwogCi0gIGlmKCFzb2NrczVfcmVzb2x2ZV9sb2NhbCkgewotICAgIHNvY2tzcmVxW2xlbisrXSA9IDM7IC8qIEFUWVA6IGRvbWFpbiBuYW1lID0gMyAqLwotICAgIHNvY2tzcmVxW2xlbisrXSA9IChjaGFyKSBob3N0bmFtZV9sZW47IC8qIGFkZHJlc3MgbGVuZ3RoICovCi0gICAgbWVtY3B5KCZzb2Nrc3JlcVtsZW5dLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKTsgLyogYWRkcmVzcyBzdHIgdy9vIE5VTEwgKi8KLSAgICBsZW4gKz0gaG9zdG5hbWVfbGVuOwotICB9Ci0gIGVsc2UgewotICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOwotICAgIEN1cmxfYWRkcmluZm8gKmhwID0gTlVMTDsKLSAgICBpbnQgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQsIEZBTFNFLCAmZG5zKTsKLQotICAgIGlmKHJjID09IENVUkxSRVNPTFZfRVJST1IpCi0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7Ci0KLSAgICBpZihyYyA9PSBDVVJMUkVTT0xWX1BFTkRJTkcpIHsKLSAgICAgIC8qIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSdyZSBpbiAid2FpdCBmb3IgcmVzb2x2ZSIgc3RhdGUgKi8KLSAgICAgIGNvZGUgPSBDdXJsX3Jlc29sdmVyX3dhaXRfcmVzb2x2KGNvbm4sICZkbnMpOwotICAgICAgaWYoY29kZSkKLSAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgaWYoZG5zKSB7CisjaWZkZWYgQ1VSTFJFU19BU1lOQ0gKKyAgICAgIGNvbm4tPmFzeW5jLmRucyA9IGRuczsKKyAgICAgIGNvbm4tPmFzeW5jLmRvbmUgPSBUUlVFOworI2VuZGlmCisgICAgICBpbmZvZihkYXRhLCAiU09DS1M1OiBob3N0bmFtZSAnJXMnIGZvdW5kXG4iLCBob3N0bmFtZSk7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBXZSBjYW5ub3QgdXNlICdob3N0ZW50JyBhcyBhIHN0cnVjdCB0aGF0IEN1cmxfcmVzb2x2KCkgcmV0dXJucy4gIEl0Ci0gICAgICogcmV0dXJucyBhIEN1cmxfYWRkcmluZm8gcG9pbnRlciB0aGF0IG1heSBub3QgYWx3YXlzIGxvb2sgdGhlIHNhbWUuCi0gICAgICovCisgICAgaWYoIWRucykgeworICAgICAgcmVzdWx0ID0gQ3VybF9yZXNvbHZfY2hlY2soZGF0YS0+Y29ubiwgJmRucyk7CisgICAgICBpZighZG5zKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFU09MVkVEOgorICBjYXNlIENPTk5FQ1RfUkVTT0xWRUQ6IHsKKyAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqaHAgPSBOVUxMOworICAgIHNpemVfdCBkZXN0bGVuOwogICAgIGlmKGRucykKICAgICAgIGhwID0gZG5zLT5hZGRyOwotICAgIGlmKGhwKSB7Ci0gICAgICBjaGFyIGJ1Zls2NF07Ci0gICAgICBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKGhwLCBidWYsIHNpemVvZihidWYpKTsKLQotICAgICAgaWYoaHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyX2luOwotICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBBVFlQOiBJUHY0ID0gMSAqLwotCi0gICAgICAgIHNhZGRyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopaHAtPmFpX2FkZHI7Ci0gICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgIHNvY2tzcmVxW2xlbisrXSA9ICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY0ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKLSAgICAgIH0KLSNpZmRlZiBFTkFCTEVfSVBWNgotICAgICAgZWxzZSBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYWRkcl9pbjY7Ci0gICAgICAgIHNvY2tzcmVxW2xlbisrXSA9IDQ7IC8qIEFUWVA6IElQdjYgPSA0ICovCi0KLSAgICAgICAgc2FkZHJfaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWhwLT5haV9hZGRyOwotICAgICAgICBmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgICAgc29ja3NyZXFbbGVuKytdID0KLSAgICAgICAgICAgICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbjYtPnNpbjZfYWRkci5zNl9hZGRyKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY2ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKLSAgICAgIH0KLSNlbmRpZgotICAgICAgZWxzZSB7Ci0gICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KLQotICAgICAgICBmYWlsZihkYXRhLCAiU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMgbm90IHN1cHBvcnRlZFxuIiwgYnVmKTsKLSAgICAgIH0KLQotICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGRucyk7IC8qIG5vdCB1c2VkIGFueW1vcmUgZnJvbSBub3cgb24gKi8KLSAgICB9CiAgICAgaWYoIWhwKSB7CiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlc29sdmUgXCIlc1wiIGZvciBTT0NLUzUgY29ubmVjdC4iLAogICAgICAgICAgICAgaG9zdG5hbWUpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICAgIH0KLSAgfQogCi0gIHNvY2tzcmVxW2xlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSgocmVtb3RlX3BvcnQgPj4gOCkgJiAweGZmKTsgLyogUE9SVCBNU0IgKi8KLSAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7ICAgICAgICAvKiBQT1JUIExTQiAqLworICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoaHAsIGRlc3QsIHNpemVvZihkZXN0KSk7CisgICAgZGVzdGxlbiA9IHN0cmxlbihkZXN0KTsKKyAgICBtc25wcmludGYoZGVzdCArIGRlc3RsZW4sIHNpemVvZihkZXN0KSAtIGRlc3RsZW4sICI6JWQiLCByZW1vdGVfcG9ydCk7CiAKLSNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGlmKGNvbm4tPnNvY2tzNV9nc3NhcGlfZW5jdHlwZSkgewotICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgR1NTLUFQSSBwcm90ZWN0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7Ci0gIH0KLSAgZWxzZQotI2VuZGlmCi0gICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgbGVuLCAmd3JpdHRlbik7CisgICAgbGVuID0gMDsKKyAgICBzb2Nrc3JlcVtsZW4rK10gPSA1OyAvKiB2ZXJzaW9uIChTT0NLUzUpICovCisgICAgc29ja3NyZXFbbGVuKytdID0gMTsgLyogY29ubmVjdCAqLworICAgIHNvY2tzcmVxW2xlbisrXSA9IDA7IC8qIG11c3QgYmUgemVybyAqLworICAgIGlmKGhwLT5haV9mYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgaW50IGk7CisgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyX2luOworICAgICAgc29ja3NyZXFbbGVuKytdID0gMTsgLyogQVRZUDogSVB2NCA9IDEgKi8KIAotICBpZihjb2RlIHx8IChsZW4gIT0gd3JpdHRlbikpIHsKLSAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M1IGNvbm5lY3QgcmVxdWVzdC4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0KLSAgbGVuID0gMTA7IC8qIG1pbmltdW0gcGFja2V0IHNpemUgaXMgMTAgKi8KLQotI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSAgaWYoY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlNPQ0tTNSBHU1MtQVBJIHByb3RlY3Rpb24gbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKLSAgfQotICBlbHNlCi0jZW5kaWYKLSAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLCAmYWN0dWFscmVhZCk7Ci0KLSAgaWYocmVzdWx0IHx8IChsZW4gIT0gYWN0dWFscmVhZCkpIHsKLSAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlY2VpdmUgU09DS1M1IGNvbm5lY3QgcmVxdWVzdCBhY2suIik7Ci0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgfQotCi0gIGlmKHNvY2tzcmVxWzBdICE9IDUpIHsgLyogdmVyc2lvbiAqLwotICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgIlNPQ0tTNSByZXBseSBoYXMgd3JvbmcgdmVyc2lvbiwgdmVyc2lvbiBzaG91bGQgYmUgNS4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0KLSAgLyogRml4OiBpbiBnZW5lcmFsLCByZXR1cm5lZCBCTkQuQUREUiBpcyB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIGJ5IFJGQwotICAgICAxOTI4LCBzbyB0aGUgcmVwbHkgcGFja2V0IHNob3VsZCBiZSByZWFkIHVudGlsIHRoZSBlbmQgdG8gYXZvaWQgZXJyb3JzIGF0Ci0gICAgIHN1YnNlcXVlbnQgcHJvdG9jb2wgbGV2ZWwuCi0KLSAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi0gICAgfFZFUiB8IFJFUCB8ICBSU1YgIHwgQVRZUCB8IEJORC5BRERSIHwgQk5ELlBPUlQgfAotICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLSAgICB8IDEgIHwgIDEgIHwgWCcwMCcgfCAgMSAgIHwgVmFyaWFibGUgfCAgICAyICAgICB8Ci0gICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotCi0gICAgIEFUWVA6Ci0gICAgIG8gIElQIHY0IGFkZHJlc3M6IFgnMDEnLCBCTkQuQUREUiA9IDQgYnl0ZQotICAgICBvICBkb21haW4gbmFtZTogIFgnMDMnLCBCTkQuQUREUiA9IFsgMSBieXRlIGxlbmd0aCwgc3RyaW5nIF0KLSAgICAgbyAgSVAgdjYgYWRkcmVzczogWCcwNCcsIEJORC5BRERSID0gMTYgYnl0ZQotICAgICAqLwotCi0gIC8qIENhbGN1bGF0ZSByZWFsIHBhY2tldCBzaXplICovCi0gIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKLSAgICAvKiBkb21haW4gbmFtZSAqLwotICAgIGludCBhZGRybGVuID0gKGludCkgc29ja3NyZXFbNF07Ci0gICAgbGVuID0gNSArIGFkZHJsZW4gKyAyOwotICB9Ci0gIGVsc2UgaWYoc29ja3NyZXFbM10gPT0gNCkgewotICAgIC8qIElQdjYgKi8KLSAgICBsZW4gPSA0ICsgMTYgKyAyOwotICB9Ci0KLSAgLyogQXQgdGhpcyBwb2ludCB3ZSBhbHJlYWR5IHJlYWQgZmlyc3QgMTAgYnl0ZXMgKi8KLSNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGlmKCFjb25uLT5zb2NrczVfZ3NzYXBpX2VuY3R5cGUpIHsKLSAgICAvKiBkZWNyeXB0X2dzc2FwaV9ibG9ja3JlYWQgYWxyZWFkeSByZWFkIHRoZSB3aG9sZSBwYWNrZXQgKi8KLSNlbmRpZgotICAgIGlmKGxlbiA+IDEwKSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKikmc29ja3NyZXFbMTBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIDEwLCAmYWN0dWFscmVhZCk7Ci0gICAgICBpZihyZXN1bHQgfHwgKChsZW4gLSAxMCkgIT0gYWN0dWFscmVhZCkpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNPQ0tTNSBjb25uZWN0IHJlcXVlc3QgYWNrLiIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgc2FkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilocC0+YWlfYWRkcjsKKyAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAoKHVuc2lnbmVkIGNoYXIgKikmc2FkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcilbaV07CiAgICAgICB9CisKKyAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY0ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgZGVzdCk7CisgICAgfQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgZWxzZSBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICBpbnQgaTsKKyAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhZGRyX2luNjsKKyAgICAgIHNvY2tzcmVxW2xlbisrXSA9IDQ7IC8qIEFUWVA6IElQdjYgPSA0ICovCisKKyAgICAgIHNhZGRyX2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKilocC0+YWlfYWRkcjsKKyAgICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgc29ja3NyZXFbbGVuKytdID0KKyAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikmc2FkZHJfaW42LT5zaW42X2FkZHIuczZfYWRkcilbaV07CisgICAgICB9CisKKyAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY2ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgZGVzdCk7CisgICAgfQorI2VuZGlmCisgICAgZWxzZSB7CisgICAgICBocCA9IE5VTEw7IC8qIGZhaWwhICovCisgICAgICBmYWlsZihkYXRhLCAiU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMgbm90IHN1cHBvcnRlZFxuIiwgZGVzdCk7CisgICAgfQorCisgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGRucyk7IC8qIG5vdCB1c2VkIGFueW1vcmUgZnJvbSBub3cgb24gKi8KKyAgICBnb3RvIENPTk5FQ1RfUkVRX1NFTkQ7CisgIH0KKyAgQ09OTkVDVF9SRVNPTFZFX1JFTU9URToKKyAgY2FzZSBDT05ORUNUX1JFU09MVkVfUkVNT1RFOgorICAgIC8qIEF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLCBub3cgc3BlY2lmeSBkZXN0aW5hdGlvbiB0byB0aGUgcHJveHkgKi8KKyAgICBsZW4gPSAwOworICAgIHNvY2tzcmVxW2xlbisrXSA9IDU7IC8qIHZlcnNpb24gKFNPQ0tTNSkgKi8KKyAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBjb25uZWN0ICovCisgICAgc29ja3NyZXFbbGVuKytdID0gMDsgLyogbXVzdCBiZSB6ZXJvICovCisKKyAgICBpZighc29ja3M1X3Jlc29sdmVfbG9jYWwpIHsKKyAgICAgIHNvY2tzcmVxW2xlbisrXSA9IDM7IC8qIEFUWVA6IGRvbWFpbiBuYW1lID0gMyAqLworICAgICAgc29ja3NyZXFbbGVuKytdID0gKGNoYXIpIGhvc3RuYW1lX2xlbjsgLyogb25lIGJ5dGUgYWRkcmVzcyBsZW5ndGggKi8KKyAgICAgIG1lbWNweSgmc29ja3NyZXFbbGVuXSwgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbik7IC8qIGFkZHJlc3Mgdy9vIE5VTEwgKi8KKyAgICAgIGxlbiArPSBob3N0bmFtZV9sZW47CisgICAgICBpbmZvZihkYXRhLCAiU09DS1M1IGNvbm5lY3QgdG8gJXM6JWQgKHJlbW90ZWx5IHJlc29sdmVkKVxuIiwKKyAgICAgICAgICAgIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CisgICAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisKKyAgQ09OTkVDVF9SRVFfU0VORDoKKyAgY2FzZSBDT05ORUNUX1JFUV9TRU5EOgorICAgIC8qIFBPUlQgTVNCICovCisgICAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKChyZW1vdGVfcG9ydCA+PiA4KSAmIDB4ZmYpOworICAgIC8qIFBPUlQgTFNCICovCisgICAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7CisKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgICAgaWYoY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7CisgICAgICBmYWlsZihkYXRhLCAiU09DS1M1IEdTUy1BUEkgcHJvdGVjdGlvbiBub3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisjZW5kaWYKKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4LT5vdXRzdGFuZGluZyA9IGxlbjsKKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfUkVRX1NFTkRJTkcpOworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9SRVFfU0VORElORzoKKyAgICByZXN1bHQgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNSBjb25uZWN0IHJlcXVlc3QuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBpZihzeC0+b3V0c3RhbmRpbmcgIT0gd3JpdHRlbikgeworICAgICAgLyogcmVtYWluIGluIHN0YXRlICovCisgICAgICBzeC0+b3V0c3RhbmRpbmcgLT0gd3JpdHRlbjsKKyAgICAgIHN4LT5vdXRwICs9IHdyaXR0ZW47CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgfQogI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSAgfQotI2VuZGlmCi0KLSAgaWYoc29ja3NyZXFbMV0gIT0gMCkgeyAvKiBBbnl0aGluZyBiZXNpZGVzIDAgaXMgYW4gZXJyb3IgKi8KLSAgICBpZihzb2Nrc3JlcVszXSA9PSAxKSB7Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNSBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOF0gPDwgOCkgfAotICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzldKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICBpZihjb25uLT5zb2NrczVfZ3NzYXBpX2VuY3R5cGUpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgR1NTLUFQSSBwcm90ZWN0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KLSAgICBlbHNlIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKLSAgICAgIHVuc2lnbmVkIGNoYXIgcG9ydF91cHBlciA9ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxW2xlbiAtIDJdOwotICAgICAgc29ja3NyZXFbbGVuIC0gMl0gPSAwOworI2VuZGlmCisgICAgc3gtPm91dHN0YW5kaW5nID0gMTA7IC8qIG1pbmltdW0gcGFja2V0IHNpemUgaXMgMTAgKi8KKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfUkVBRCk7CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBDT05ORUNUX1JFUV9SRUFEOgorICAgIHJlc3VsdCA9IEN1cmxfcmVhZF9wbGFpbihzb2NrZmQsIChjaGFyICopc3gtPm91dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJmFjdHVhbHJlYWQpOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNPQ0tTNSBjb25uZWN0IHJlcXVlc3QgYWNrLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgZWxzZSBpZighcmVzdWx0ICYmICFhY3R1YWxyZWFkKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlZCAqLworICAgICAgZmFpbGYoZGF0YSwgImNvbm5lY3Rpb24gdG8gcHJveHkgY2xvc2VkIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSBhY3R1YWxyZWFkOworICAgICAgc3gtPm91dHAgKz0gYWN0dWFscmVhZDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisKKyAgICBpZihzb2Nrc3JlcVswXSAhPSA1KSB7IC8qIHZlcnNpb24gKi8KICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJXM6JWQuICglZCkiLAotICAgICAgICAgICAgKGNoYXIgKikmc29ja3NyZXFbNV0sCi0gICAgICAgICAgICAoKHBvcnRfdXBwZXIgPDwgOCkgfAotICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxW2xlbiAtIDFdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKLSAgICAgIHNvY2tzcmVxW2xlbiAtIDJdID0gcG9ydF91cHBlcjsKKyAgICAgICAgICAgICJTT0NLUzUgcmVwbHkgaGFzIHdyb25nIHZlcnNpb24sIHZlcnNpb24gc2hvdWxkIGJlIDUuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzFdICE9IDApIHsgLyogQW55dGhpbmcgYmVzaWRlcyAwIGlzIGFuIGVycm9yICovCisgICAgICBmYWlsZihkYXRhLCAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMuICglZCkiLAorICAgICAgICAgICAgaG9zdG5hbWUsICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgLyogRml4OiBpbiBnZW5lcmFsLCByZXR1cm5lZCBCTkQuQUREUiBpcyB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIGJ5IFJGQworICAgICAgIDE5MjgsIHNvIHRoZSByZXBseSBwYWNrZXQgc2hvdWxkIGJlIHJlYWQgdW50aWwgdGhlIGVuZCB0byBhdm9pZCBlcnJvcnMKKyAgICAgICBhdCBzdWJzZXF1ZW50IHByb3RvY29sIGxldmVsLgorCisgICAgICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAgIHxWRVIgfCBSRVAgfCAgUlNWICB8IEFUWVAgfCBCTkQuQUREUiB8IEJORC5QT1JUIHwKKyAgICAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgfCAxICB8ICAxICB8IFgnMDAnIHwgIDEgICB8IFZhcmlhYmxlIHwgICAgMiAgICAgfAorICAgICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKworICAgICAgIEFUWVA6CisgICAgICAgbyAgSVAgdjQgYWRkcmVzczogWCcwMScsIEJORC5BRERSID0gNCBieXRlCisgICAgICAgbyAgZG9tYWluIG5hbWU6ICBYJzAzJywgQk5ELkFERFIgPSBbIDEgYnl0ZSBsZW5ndGgsIHN0cmluZyBdCisgICAgICAgbyAgSVAgdjYgYWRkcmVzczogWCcwNCcsIEJORC5BRERSID0gMTYgYnl0ZQorICAgICovCisKKyAgICAvKiBDYWxjdWxhdGUgcmVhbCBwYWNrZXQgc2l6ZSAqLworICAgIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKKyAgICAgIC8qIGRvbWFpbiBuYW1lICovCisgICAgICBpbnQgYWRkcmxlbiA9IChpbnQpIHNvY2tzcmVxWzRdOworICAgICAgbGVuID0gNSArIGFkZHJsZW4gKyAyOwogICAgIH0KICAgICBlbHNlIGlmKHNvY2tzcmVxWzNdID09IDQpIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJTAyeCUwMng6JTAyeCUwMng6IgotICAgICAgICAgICAgIiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiVkLiAoJWQpIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzhdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs5XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzEwXSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTFdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTJdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxM10sCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTddLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMThdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxOV0sCi0gICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzIwXSA8PCA4KSB8Ci0gICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMjFdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAgIC8qIElQdjYgKi8KKyAgICAgIGxlbiA9IDQgKyAxNiArIDI7CiAgICAgfQotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgZWxzZSBpZihzb2Nrc3JlcVszXSA9PSAxKSB7CisgICAgICBsZW4gPSA0ICsgNCArIDI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlNPQ0tTNSByZXBseSBoYXMgd3JvbmcgYWRkcmVzcyB0eXBlLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgcmVhZCBmaXJzdCAxMCBieXRlcyAqLworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICBpZighY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7CisgICAgICAvKiBkZWNyeXB0X2dzc2FwaV9ibG9ja3JlYWQgYWxyZWFkeSByZWFkIHRoZSB3aG9sZSBwYWNrZXQgKi8KKyNlbmRpZgorICAgICAgaWYobGVuID4gMTApIHsKKyAgICAgICAgc3gtPm91dHN0YW5kaW5nID0gbGVuIC0gMTA7IC8qIGdldCB0aGUgcmVzdCAqLworICAgICAgICBzeC0+b3V0cCA9ICZzb2Nrc3JlcVsxMF07CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfUkVBRF9NT1JFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfRE9ORSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICB9CisjZW5kaWYKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBjYXNlIENPTk5FQ1RfUkVRX1JFQURfTU9SRToKKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZhY3R1YWxyZWFkKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTT0NLUzUgY29ubmVjdCByZXF1ZXN0IGFjay4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGVsc2UgaWYoIXJlc3VsdCAmJiAhYWN0dWFscmVhZCkgeworICAgICAgLyogY29ubmVjdGlvbiBjbG9zZWQgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJjb25uZWN0aW9uIHRvIHByb3h5IGNsb3NlZCIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgZWxzZSBpZihhY3R1YWxyZWFkICE9IHN4LT5vdXRzdGFuZGluZykgeworICAgICAgLyogcmVtYWluIGluIHN0YXRlICovCisgICAgICBzeC0+b3V0c3RhbmRpbmcgLT0gYWN0dWFscmVhZDsKKyAgICAgIHN4LT5vdXRwICs9IGFjdHVhbHJlYWQ7CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9ET05FKTsKICAgfQogICBpbmZvZihkYXRhLCAiU09DS1M1IHJlcXVlc3QgZ3JhbnRlZC5cbiIpOwogCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOworICAqZG9uZSA9IFRSVUU7CiAgIHJldHVybiBDVVJMRV9PSzsgLyogUHJveHkgd2FzIHN1Y2Nlc3NmdWwhICovCiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrcy5oCmluZGV4IGRhYTA3YzEuLjY0YTc1NjMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjcsMTMgKzI3LDEzIEBACiAjaWZkZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAjZGVmaW5lIEN1cmxfU09DS1M0KGEsYixjLGQsZSkgQ1VSTEVfTk9UX0JVSUxUX0lOCiAjZGVmaW5lIEN1cmxfU09DS1M1KGEsYixjLGQsZSxmKSBDVVJMRV9OT1RfQlVJTFRfSU4KKyNkZWZpbmUgQ3VybF9TT0NLU19nZXRzb2NrKHgseSx6KSAwCiAjZWxzZQogLyoKICAqIEhlbHBlciByZWFkLWZyb20tc29ja2V0IGZ1bmN0aW9ucy4gRG9lcyB0aGUgc2FtZSBhcyBDdXJsX3JlYWQoKSBidXQgaXQKICAqIGJsb2NrcyB1bnRpbCBhbGwgYnl0ZXMgYW1vdW50IG9mIGJ1ZmZlcnNpemUgd2lsbCBiZSByZWFkLiBObyBtb3JlLCBubyBsZXNzLgogICoKLSAqIFRoaXMgaXMgU1RVUElEIEJMT0NLSU5HIGJlaGF2aW91ciB3aGljaCB3ZSBmcm93biB1cG9uLCBidXQgcmlnaHQgbm93IHRoaXMKLSAqIGlzIHdoYXQgd2UgaGF2ZS4uLgorICogVGhpcyBpcyBTVFVQSUQgQkxPQ0tJTkcgYmVoYXZpb3IKICAqLwogaW50IEN1cmxfYmxvY2tyZWFkX2FsbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLApAQCAtNDEsNiArNDEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGJ1ZmZlcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm4pOwogCitpbnQgQ3VybF9TT0NLU19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCk7CiAvKgogICogVGhpcyBmdW5jdGlvbiBsb2dzIGluIHRvIGEgU09DS1M0KGEpIHByb3h5IGFuZCBzZW5kcyB0aGUgc3BlY2lmaWNzIHRvIHRoZQogICogZmluYWwgZGVzdGluYXRpb24gc2VydmVyLgpAQCAtNDksNyArNTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiBsb2dzIGluIHRvIGEgU09DS1M1IHByb3h5IGFuZCBzZW5kcyB0aGUgc3BlY2lmaWNzIHRvIHRoZQpAQCAtNjAsNyArNjQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpOwogCiAjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQogLyoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzX2dzc2FwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3NfZ3NzYXBpLmMKaW5kZXggNjUyOTRiYi4uMmUzNmI5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3NfZ3NzYXBpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3NfZ3NzYXBpLmMKQEAgLTUsOCArNSw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFya3VzIE1vZWxsZXIsIDxtYXJrdXNfbW9lbGxlckBjb21wdXNlcnZlLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTExNSw3ICsxMTUsNyBAQAogICBnc3NfYnVmZmVyX2Rlc2MgIGdzc19zZW5kX3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOwogICBnc3NfYnVmZmVyX2Rlc2MgIGdzc19yZWN2X3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOwogICBnc3NfYnVmZmVyX2Rlc2MgIGdzc193X3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotICBnc3NfYnVmZmVyX2Rlc2MqIGdzc190b2tlbiA9IEdTU19DX05PX0JVRkZFUjsKKyAgZ3NzX2J1ZmZlcl9kZXNjICpnc3NfdG9rZW4gPSBHU1NfQ19OT19CVUZGRVI7CiAgIGdzc19uYW1lX3QgICAgICAgc2VydmVyID0gR1NTX0NfTk9fTkFNRTsKICAgZ3NzX25hbWVfdCAgICAgICBnc3NfY2xpZW50X25hbWUgPSBHU1NfQ19OT19OQU1FOwogICB1bnNpZ25lZCBzaG9ydCAgIHVzX2xlbmd0aDsKQEAgLTE2Nyw2ICsxNjcsOCBAQAogICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgIH0KIAorICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7CisKICAgLyogQXMgbG9uZyBhcyB3ZSBuZWVkIHRvIGtlZXAgc2VuZGluZyBzb21lIGNvbnRleHQgaW5mbywgYW5kIHRoZXJlJ3Mgbm8gICovCiAgIC8qIGVycm9ycywga2VlcCBzZW5kaW5nIGl0Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBmb3IoOzspIHsKQEAgLTIyNSw3ICsyMjcsOCBAQAogCiAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3NlbmRfdG9rZW4pOwogICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc19yZWN2X3Rva2VuKTsKLSAgICBpZihnc3NfbWFqb3Jfc3RhdHVzICE9IEdTU19TX0NPTlRJTlVFX05FRURFRCkgYnJlYWs7CisgICAgaWYoZ3NzX21ham9yX3N0YXR1cyAhPSBHU1NfU19DT05USU5VRV9ORUVERUQpCisgICAgICBicmVhazsKIAogICAgIC8qIGFuYWx5c2UgcmVzcG9uc2UgKi8KIApAQCAtMzI1LDcgKzMyOCw3IEBACiAgIHVzZXJbZ3NzX3NlbmRfdG9rZW4ubGVuZ3RoXSA9ICdcMCc7CiAgIGdzc19yZWxlYXNlX25hbWUoJmdzc19zdGF0dXMsICZnc3NfY2xpZW50X25hbWUpOwogICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3Nfc2VuZF90b2tlbik7Ci0gIGluZm9mKGRhdGEsICJTT0NLUzUgc2VydmVyIGF1dGhlbmN0aWNhdGVkIHVzZXIgJXMgd2l0aCBHU1MtQVBJLlxuIix1c2VyKTsKKyAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBzZXJ2ZXIgYXV0aGVudGljYXRlZCB1c2VyICVzIHdpdGggR1NTLUFQSS5cbiIsdXNlcik7CiAgIGZyZWUodXNlcik7CiAgIHVzZXIgPSBOVUxMOwogCkBAIC01MTMsNiArNTE2LDggQEAKICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3NfcmVjdl90b2tlbik7CiAgIH0KIAorICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBUUlVFKTsKKwogICBpbmZvZihkYXRhLCAiU09DS1M1IGFjY2VzcyB3aXRoJXMgcHJvdGVjdGlvbiBncmFudGVkLlxuIiwKICAgICAgICAgKHNvY2tzcmVxWzBdID09IDApPyJvdXQgR1NTLUFQSSBkYXRhIjoKICAgICAgICAgKChzb2Nrc3JlcVswXSA9PSAxKT8iIEdTUy1BUEkgaW50ZWdyaXR5IjoiIEdTUy1BUEkgY29uZmlkZW50aWFsaXR5IikpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3Nfc3NwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3Nfc3NwaS5jCmluZGV4IDU3MDI3ZWYuLjJmMWZkMzYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzX3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrc19zc3BpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIE1hcmt1cyBNb2VsbGVyLCA8bWFya3VzX21vZWxsZXJAY29tcHVzZXJ2ZS5jb20+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKQEAgLTE1MywxMiArMTUzLDE0IEBACiAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgfQogCisgICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIEZBTFNFKTsKKwogICAvKiBBcyBsb25nIGFzIHdlIG5lZWQgdG8ga2VlcCBzZW5kaW5nIHNvbWUgY29udGV4dCBpbmZvLCBhbmQgdGhlcmUncyBubyAgKi8KICAgLyogZXJyb3JzLCBrZWVwIHNlbmRpbmcgaXQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIGZvcig7OykgewogICAgIFRDSEFSICpzbmFtZTsKIAotICAgIHNuYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoc2VydmljZV9uYW1lKTsKKyAgICBzbmFtZSA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcihzZXJ2aWNlX25hbWUpOwogICAgIGlmKCFzbmFtZSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0xNzgsNyArMTgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NwaV9yZXRfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cGlyeSk7CiAKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHNuYW1lKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShzbmFtZSk7CiAKICAgICBpZihzc3BpX3JlY3ZfdG9rZW4ucHZCdWZmZXIpIHsKICAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3JlY3ZfdG9rZW4ucHZCdWZmZXIpOwpAQCAtMzI1LDcgKzMyNyw3IEBACiAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBkZXRlcm1pbmUgdXNlciBuYW1lLiIpOwogICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgIH0KLSAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBzZXJ2ZXIgYXV0aGVuY3RpY2F0ZWQgdXNlciAlcyB3aXRoIEdTUy1BUEkuXG4iLAorICBpbmZvZihkYXRhLCAiU09DS1M1IHNlcnZlciBhdXRoZW50aWNhdGVkIHVzZXIgJXMgd2l0aCBHU1MtQVBJLlxuIiwKICAgICAgICAgbmFtZXMuc1VzZXJOYW1lKTsKICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKG5hbWVzLnNVc2VyTmFtZSk7CiAKQEAgLTU4Nyw2ICs1ODksNyBAQAogICAgIG1lbWNweShzb2Nrc3JlcSwgc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyLCBzc3BpX3dfdG9rZW5bMF0uY2JCdWZmZXIpOwogICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMF0ucHZCdWZmZXIpOwogICB9CisgICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOwogCiAgIGluZm9mKGRhdGEsICJTT0NLUzUgYWNjZXNzIHdpdGglcyBwcm90ZWN0aW9uIGdyYW50ZWQuXG4iLAogICAgICAgICAoc29ja3NyZXFbMF0gPT0gMCk/Im91dCBHU1MtQVBJIGRhdGEiOgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3BsYXkuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NwbGF5LmgKaW5kZXggNDYxMmVjMi4uOTI5MmYzNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3BsYXkuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zcGxheS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01OSwxMCArNTksNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgoaS50dl91c2VjKSA8IChqLnR2X3VzZWMpKSA/IC0xIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgoaS50dl91c2VjKSA+IChqLnR2X3VzZWMpKSA/ICAxIDogMCkpKSkKIAotI2lmZGVmIERFQlVHQlVJTEQKLXZvaWQgQ3VybF9zcGxheXByaW50KHN0cnVjdCBDdXJsX3RyZWUgKiB0LCBpbnQgZCwgY2hhciBvdXRwdXQpOwotI2Vsc2UKLSNkZWZpbmUgQ3VybF9zcGxheXByaW50KHgseSx6KSBDdXJsX25vcF9zdG10Ci0jZW5kaWYKLQogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NQTEFZX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC1saWJzc2guYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC1saWJzc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNmZDZiZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2gtbGlic3NoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMTkgUmVkIEhhdCwgSW5jLgotICoKLSAqIEF1dGhvcnM6IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zLCBUb21hcyBNcmF6LCBTdGFuaXNsYXYgWmlkZWssCi0gKiAgICAgICAgICBSb2JlcnQgS29sY3VuLCBBbmRyZWFzIFNjaG5laWRlcgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfTElCU1NICi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgPGxpYnNzaC9saWJzc2guaD4KLSNpbmNsdWRlIDxsaWJzc2gvc2Z0cC5oPgotCi0jaWZkZWYgSEFWRV9GQ05UTF9ICi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1VUU05BTUVfSAotI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX05FVERCX0gKLSNpbmNsdWRlIDxuZXRkYi5oPgotI2VuZGlmCi0jaWZkZWYgX19WTVMKLSNpbmNsdWRlIDxpbi5oPgotI2luY2x1ZGUgPGluZXQuaD4KLSNlbmRpZgotCi0jaWYgKGRlZmluZWQoTkVUV0FSRSkgJiYgZGVmaW5lZChfX05PVkVMTF9MSUJDX18pKQotI3VuZGVmIGluX2FkZHJfdAotI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZwotI2VuZGlmCi0KLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLSNpbmNsdWRlICJ1cmxkYXRhLmgiCi0jaW5jbHVkZSAic2VuZGYuaCIKLSNpbmNsdWRlICJob3N0aXAuaCIKLSNpbmNsdWRlICJwcm9ncmVzcy5oIgotI2luY2x1ZGUgInRyYW5zZmVyLmgiCi0jaW5jbHVkZSAiZXNjYXBlLmgiCi0jaW5jbHVkZSAiaHR0cC5oIiAgICAgICAgICAgICAgIC8qIGZvciBIVFRQIHByb3h5IHR1bm5lbCBzdHVmZiAqLwotI2luY2x1ZGUgInNzaC5oIgotI2luY2x1ZGUgInVybC5oIgotI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKLSNpbmNsdWRlICJnZXRpbmZvLmgiCi0jaW5jbHVkZSAic3RyZHVwLmgiCi0jaW5jbHVkZSAic3RyY2FzZS5oIgotI2luY2x1ZGUgInZ0bHMvdnRscy5oIgotI2luY2x1ZGUgImNvbm5lY3QuaCIKLSNpbmNsdWRlICJzdHJlcnJvci5oIgotI2luY2x1ZGUgImluZXRfbnRvcC5oIgotI2luY2x1ZGUgInBhcnNlZGF0ZS5oIiAgICAgICAgICAvKiBmb3IgdGhlIHdlZWsgZGF5IGFuZCBtb250aCBuYW1lcyAqLwotI2luY2x1ZGUgInNvY2thZGRyLmgiICAgICAgICAgICAvKiByZXF1aXJlZCBmb3IgQ3VybF9zb2NrYWRkcl9zdG9yYWdlICovCi0jaW5jbHVkZSAic3RydG9vZmZ0LmgiCi0jaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgIndhcm5sZXNzLmgiCi0KLS8qIGZvciBwZXJtaXNzaW9uIGFuZCBvcGVuIGZsYWdzICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi0vKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0jaW5jbHVkZSAiY3VybF9wYXRoLmgiCi0KLS8qIEEgcmVjZW50IG1hY3JvIHByb3ZpZGVkIGJ5IGxpYnNzaC4gT3IgbWFrZSBvdXIgb3duLiAqLwotI2lmbmRlZiBTU0hfU1RSSU5HX0ZSRUVfQ0hBUgotLyogIWNoZWNrc3JjISBkaXNhYmxlIEFTU0lHTldJVEhJTkNPTkRJVElPTiAxICovCi0jZGVmaW5lIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHgpIFwKLSAgICBkbyB7IGlmKCh4KSAhPSBOVUxMKSB7IHNzaF9zdHJpbmdfZnJlZV9jaGFyKHgpOyB4ID0gTlVMTDsgfSB9IHdoaWxlKDApCi0jZW5kaWYKLQotLyogTG9jYWwgZnVuY3Rpb25zOiAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBDVVJMY29kZSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKTsKLXN0YXRpYyBDVVJMY29kZSBteXNzaF9kb19pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKLXN0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOwotCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKLXN0YXRpYwotQ1VSTGNvZGUgc2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKLQotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZV9zdGF0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci0KLXN0YXRpYyBpbnQgbXlzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKLQotc3RhdGljIGludCBteXNzaF9wZXJmb3JtX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Ci0KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci0KLS8qCi0gKiBTQ1AgcHJvdG9jb2wgaGFuZGxlci4KLSAqLwotCi1jb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zY3AgPSB7Ci0gICJTQ1AiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLwotICBteXNzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCi0gIG15c3NoX2RvX2l0LCAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCi0gIHNjcF9kb25lLCAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLwotICBteXNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCi0gIG15c3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KLSAgc2NwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KLSAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLwotICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCi0gIG15c3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLwotICBzY3BfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCi0gIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KLSAgQ1VSTFBST1RPX1NDUCwgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTiB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAvKiBmbGFncyAqLwotfTsKLQotLyoKLSAqIFNGVFAgcHJvdG9jb2wgaGFuZGxlci4KLSAqLwotCi1jb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwID0gewotICAiU0ZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLwotICBteXNzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KLSAgbXlzc2hfZG9faXQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLwotICBzZnRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCi0gIG15c3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLwotICBteXNzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KLSAgc2Z0cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLwotICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KLSAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KLSAgbXlzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KLSAgc2Z0cF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLwotICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KLSAgQ1VSTFBST1RPX1NGVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLwotICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCi0gIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KLX07Ci0KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2Vycm9yX3RvX0NVUkxFKGludCBlcnIpCi17Ci0gIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlIFNTSF9GWF9PSzoKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLQotICAgIGNhc2UgU1NIX0ZYX05PX1NVQ0hfRklMRToKLSAgICBjYXNlIFNTSF9GWF9OT19TVUNIX1BBVEg6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgY2FzZSBTU0hfRlhfUEVSTUlTU0lPTl9ERU5JRUQ6Ci0gICAgY2FzZSBTU0hfRlhfV1JJVEVfUFJPVEVDVDoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKLQotICAgIGNhc2UgU1NIX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFM6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfRVhJU1RTOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIENVUkxFX1NTSDsKLX0KLQotI2lmbmRlZiBERUJVR0JVSUxECi0jZGVmaW5lIHN0YXRlKHgseSkgbXlzdGF0ZSh4LHkpCi0jZWxzZQotI2RlZmluZSBzdGF0ZSh4LHkpIG15c3RhdGUoeCx5LCBfX0xJTkVfXykKLSNlbmRpZgotCi0vKgotICogU1NIIFN0YXRlIG1hY2hpbmUgcmVsYXRlZCBjb2RlCi0gKi8KLS8qIFRoaXMgaXMgdGhlIE9OTFkgd2F5IHRvIGNoYW5nZSBTU0ggc3RhdGUhICovCi1zdGF0aWMgdm9pZCBteXN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUKLSNpZmRlZiBERUJVR0JVSUxECi0gICAgICAgICAgICAgICAgICAgICwgaW50IGxpbmVubwotI2VuZGlmCi0gICkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0jaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQotICAvKiBmb3IgZGVidWcgcHVycG9zZXMgKi8KLSAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7Ci0gICAgIlNTSF9TVE9QIiwKLSAgICAiU1NIX0lOSVQiLAotICAgICJTU0hfU19TVEFSVFVQIiwKLSAgICAiU1NIX0hPU1RLRVkiLAotICAgICJTU0hfQVVUSExJU1QiLAotICAgICJTU0hfQVVUSF9QS0VZX0lOSVQiLAotICAgICJTU0hfQVVUSF9QS0VZIiwKLSAgICAiU1NIX0FVVEhfUEFTU19JTklUIiwKLSAgICAiU1NIX0FVVEhfUEFTUyIsCi0gICAgIlNTSF9BVVRIX0FHRU5UX0lOSVQiLAotICAgICJTU0hfQVVUSF9BR0VOVF9MSVNUIiwKLSAgICAiU1NIX0FVVEhfQUdFTlQiLAotICAgICJTU0hfQVVUSF9IT1NUX0lOSVQiLAotICAgICJTU0hfQVVUSF9IT1NUIiwKLSAgICAiU1NIX0FVVEhfS0VZX0lOSVQiLAotICAgICJTU0hfQVVUSF9LRVkiLAotICAgICJTU0hfQVVUSF9HU1NBUEkiLAotICAgICJTU0hfQVVUSF9ET05FIiwKLSAgICAiU1NIX1NGVFBfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1JFQUxQQVRIIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1BPU1RRVU9URV9JTklUIiwKLSAgICAiU1NIX1NGVFBfUVVPVEUiLAotICAgICJTU0hfU0ZUUF9ORVhUX1FVT1RFIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVCIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NFVFNUQVQiLAotICAgICJTU0hfU0ZUUF9RVU9URV9TWU1MSU5LIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfTUtESVIiLAotICAgICJTU0hfU0ZUUF9RVU9URV9SRU5BTUUiLAotICAgICJTU0hfU0ZUUF9RVU9URV9STURJUiIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1VOTElOSyIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NUQVRWRlMiLAotICAgICJTU0hfU0ZUUF9HRVRJTkZPIiwKLSAgICAiU1NIX1NGVFBfRklMRVRJTUUiLAotICAgICJTU0hfU0ZUUF9UUkFOU19JTklUIiwKLSAgICAiU1NIX1NGVFBfVVBMT0FEX0lOSVQiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUIiwKLSAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlMiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUiIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1JFQURESVIiLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0xJTksiLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfRE9ORSIsCi0gICAgIlNTSF9TRlRQX0RPV05MT0FEX0lOSVQiLAotICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUIiwKLSAgICAiU1NIX1NGVFBfQ0xPU0UiLAotICAgICJTU0hfU0ZUUF9TSFVURE9XTiIsCi0gICAgIlNTSF9TQ1BfVFJBTlNfSU5JVCIsCi0gICAgIlNTSF9TQ1BfVVBMT0FEX0lOSVQiLAotICAgICJTU0hfU0NQX0RPV05MT0FEX0lOSVQiLAotICAgICJTU0hfU0NQX0RPV05MT0FEIiwKLSAgICAiU1NIX1NDUF9ET05FIiwKLSAgICAiU1NIX1NDUF9TRU5EX0VPRiIsCi0gICAgIlNTSF9TQ1BfV0FJVF9FT0YiLAotICAgICJTU0hfU0NQX1dBSVRfQ0xPU0UiLAotICAgICJTU0hfU0NQX0NIQU5ORUxfRlJFRSIsCi0gICAgIlNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QiLAotICAgICJTU0hfU0VTU0lPTl9GUkVFIiwKLSAgICAiUVVJVCIKLSAgfTsKLQotCi0gIGlmKHNzaGMtPnN0YXRlICE9IG5vd3N0YXRlKSB7Ci0gICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlcyAobGluZSAlZClcbiIsCi0gICAgICAgICAgKHZvaWQgKikgc3NoYywgbmFtZXNbc3NoYy0+c3RhdGVdLCBuYW1lc1tub3dzdGF0ZV0sCi0gICAgICAgICAgbGluZW5vKTsKLSAgfQotI2VuZGlmCi0KLSAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKLX0KLQotLyogTXVsdGlwbGUgb3B0aW9uczoKLSAqIDEuIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSBpcyBzZXQgd2l0aCBhbiBNRDUKLSAqICAgIGhhc2ggKDkwcyBzdHlsZSBhdXRoLCBub3Qgc3VyZSB3ZSBzaG91bGQgaGF2ZSBpdCBoZXJlKQotICogMi4gZGF0YS0+c2V0LnNzaF9rZXlmdW5jIGNhbGxiYWNrIGlzIHNldC4gVGhlbiB3ZSBkbyB0cnVzdCBvbiBmaXJzdAotICogICAgdXNlLiBXZSBldmVuIHNhdmUgb24ga25vd25ob3N0cyBpZiBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEUKLSAqICAgIGlzIHJldHVybmVkIGJ5IGl0LgotICogMy4gbm9uZSBvZiB0aGUgYWJvdmUuIFdlIG9ubHkgYWNjZXB0IGlmIGl0IGlzIHByZXNlbnQgb24ga25vd24gaG9zdHMuCi0gKgotICogUmV0dXJucyBTU0hfT0sgb3IgU1NIX0VSUk9SLgotICovCi1zdGF0aWMgaW50IG15c3NoX2lzX2tub3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgaW50IHJjOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIHNzaF9rZXkgcHVia2V5OwotICBzaXplX3QgaGxlbjsKLSAgdW5zaWduZWQgY2hhciAqaGFzaCA9IE5VTEw7Ci0gIGNoYXIgKmJhc2U2NCA9IE5VTEw7Ci0gIGludCB2c3RhdGU7Ci0gIGVudW0gY3VybF9raG1hdGNoIGtleW1hdGNoOwotICBzdHJ1Y3QgY3VybF9raGtleSBmb3VuZGtleTsKLSAgY3VybF9zc2hrZXljYWxsYmFjayBmdW5jID0KLSAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM7Ci0KLSAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgJnB1YmtleSk7Ci0gIGlmKHJjICE9IFNTSF9PSykKLSAgICByZXR1cm4gcmM7Ci0KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdKSB7Ci0gICAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleV9oYXNoKHB1YmtleSwgU1NIX1BVQkxJQ0tFWV9IQVNIX01ENSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhc2gsICZobGVuKTsKLSAgICBpZihyYyAhPSBTU0hfT0spCi0gICAgICBnb3RvIGNsZWFudXA7Ci0KLSAgICBpZihobGVuICE9IHN0cmxlbihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0pIHx8Ci0gICAgICAgbWVtY21wKCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0sIGhhc2gsIGhsZW4pKSB7Ci0gICAgICByYyA9IFNTSF9FUlJPUjsKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICByYyA9IFNTSF9PSzsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5aG9zdCAhPSBUUlVFKSB7Ci0gICAgcmMgPSBTU0hfT0s7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci0KLSAgdnN0YXRlID0gc3NoX2lzX3NlcnZlcl9rbm93bihzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gIHN3aXRjaCh2c3RhdGUpIHsKLSAgICBjYXNlIFNTSF9TRVJWRVJfS05PV05fT0s6Ci0gICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX09LOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTU0hfU0VSVkVSX0ZJTEVfTk9UX0ZPVU5EOgotICAgICAgLyogZmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFNTSF9TRVJWRVJfTk9UX0tOT1dOOgotICAgICAga2V5bWF0Y2ggPSBDVVJMS0hNQVRDSF9NSVNTSU5HOwotICAgICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU01BVENIOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZihmdW5jKSB7IC8qIHVzZSBjYWxsYmFjayB0byBkZXRlcm1pbmUgYWN0aW9uICovCi0gICAgcmMgPSBzc2hfcGtpX2V4cG9ydF9wdWJrZXlfYmFzZTY0KHB1YmtleSwgJmJhc2U2NCk7Ci0gICAgaWYocmMgIT0gU1NIX09LKQotICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgZm91bmRrZXkua2V5ID0gYmFzZTY0OwotICAgIGZvdW5ka2V5LmxlbiA9IHN0cmxlbihiYXNlNjQpOwotCi0gICAgc3dpdGNoKHNzaF9rZXlfdHlwZShwdWJrZXkpKSB7Ci0gICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQToKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfUlNBOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU1NIX0tFWVRZUEVfUlNBMToKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfUlNBMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNTSF9LRVlUWVBFX0VDRFNBOgotICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9FQ0RTQTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLDcsMCkKLSAgICAgIGNhc2UgU1NIX0tFWVRZUEVfRUQyNTUxOToKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRUQyNTUxOTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgIGNhc2UgU1NIX0tFWVRZUEVfRFNTOgotICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9EU1M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmMgPSBTU0hfRVJST1I7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICAvKiB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIGVxdWl2YWxlbnQgdG8ga25vd25rZXkuIEFsd2F5cyBOVUxMICovCi0gICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7Ci0gICAgcmMgPSBmdW5jKGRhdGEsIE5VTEwsICZmb3VuZGtleSwgLyogZnJvbSB0aGUgcmVtb3RlIGhvc3QgKi8KLSAgICAgICAgICAgICAga2V5bWF0Y2gsIGRhdGEtPnNldC5zc2hfa2V5ZnVuY191c2VycCk7Ci0gICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotCi0gICAgc3dpdGNoKHJjKSB7Ci0gICAgICBjYXNlIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRToKLSAgICAgICAgcmMgPSBzc2hfd3JpdGVfa25vd25ob3N0KHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkU6Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogLyogUkVKRUNUL0RFRkVSICovCi0gICAgICAgIHJjID0gU1NIX0VSUk9SOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICB9Ci0gIGVsc2UgewotICAgIGlmKGtleW1hdGNoICE9IENVUkxLSE1BVENIX09LKSB7Ci0gICAgICByYyA9IFNTSF9FUlJPUjsKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gIH0KLSAgcmMgPSBTU0hfT0s7Ci0KLWNsZWFudXA6Ci0gIGlmKGhhc2gpCi0gICAgc3NoX2NsZWFuX3B1YmtleV9oYXNoKCZoYXNoKTsKLSAgc3NoX2tleV9mcmVlKHB1YmtleSk7Ci0gIHJldHVybiByYzsKLX0KLQotI2RlZmluZSBNT1ZFX1RPX0VSUk9SX1NUQVRFKF9yKSB7IFwKLSAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7IFwKLSAgc3NoYy0+YWN0dWFsY29kZSA9IF9yOyBcCi0gIHJjID0gU1NIX0VSUk9SOyBcCi0gIGJyZWFrOyBcCi19Ci0KLSNkZWZpbmUgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCkgeyBcCi0gIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsgXAotICBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cF9lcnJvcl90b19DVVJMRShzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsgXAotICByYyA9IFNTSF9FUlJPUjsgXAotICBicmVhazsgXAotfQotCi0jZGVmaW5lIE1PVkVfVE9fTEFTVF9BVVRIIFwKLSAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSB7IFwKLSAgICByYyA9IFNTSF9PSzsgXAotICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7IFwKLSAgICBicmVhazsgXAotICB9IFwKLSAgZWxzZSB7IFwKLSAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7IFwKLSAgfQotCi0jZGVmaW5lIE1PVkVfVE9fVEVSVElBUllfQVVUSCBcCi0gIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9JTlRFUkFDVElWRSkgeyBcCi0gICAgcmMgPSBTU0hfT0s7IFwKLSAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7IFwKLSAgICBicmVhazsgXAotICB9IFwKLSAgZWxzZSB7IFwKLSAgICBNT1ZFX1RPX0xBU1RfQVVUSDsgXAotICB9Ci0KLSNkZWZpbmUgTU9WRV9UT19TRUNPTkRBUllfQVVUSCBcCi0gIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9HU1NBUElfTUlDKSB7IFwKLSAgICByYyA9IFNTSF9PSzsgXAotICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0dTU0FQSSk7IFwKLSAgICBicmVhazsgXAotICB9IFwKLSAgZWxzZSB7IFwKLSAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7IFwKLSAgfQotCi1zdGF0aWMKLWludCBteXNzaF9hdXRoX2ludGVyYWN0aXZlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgaW50IHJjOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgaW50IG5wcm9tcHRzOwotCi1yZXN0YXJ0OgotICBzd2l0Y2goc3NoYy0+a2JkX3N0YXRlKSB7Ci0gICAgY2FzZSAwOgotICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQotICAgICAgICByZXR1cm4gU1NIX0FHQUlOOwotCi0gICAgICBpZihyYyAhPSBTU0hfQVVUSF9JTkZPKQotICAgICAgICByZXR1cm4gU1NIX0VSUk9SOwotCi0gICAgICBucHJvbXB0cyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0bnByb21wdHMoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgaWYobnByb21wdHMgPT0gU1NIX0VSUk9SIHx8IG5wcm9tcHRzICE9IDEpCi0gICAgICAgIHJldHVybiBTU0hfRVJST1I7Ci0KLSAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2tiZGludF9zZXRhbnN3ZXIoc3NoYy0+c3NoX3Nlc3Npb24sIDAsIGNvbm4tPnBhc3N3ZCk7Ci0gICAgICBpZihyYyA8IDApCi0gICAgICAgIHJldHVybiBTU0hfRVJST1I7Ci0KLSAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgMToKLSAgICAgIHNzaGMtPmtiZF9zdGF0ZSA9IDE7Ci0KLSAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2tiZGludChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikKLSAgICAgICAgcmV0dXJuIFNTSF9BR0FJTjsKLSAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykKLSAgICAgICAgcmMgPSBTU0hfT0s7Ci0gICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX0lORk8pIHsKLSAgICAgICAgbnByb21wdHMgPSBzc2hfdXNlcmF1dGhfa2JkaW50X2dldG5wcm9tcHRzKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgaWYobnByb21wdHMgIT0gMCkKLSAgICAgICAgICByZXR1cm4gU1NIX0VSUk9SOwotCi0gICAgICAgIHNzaGMtPmtiZF9zdGF0ZSA9IDI7Ci0gICAgICAgIGdvdG8gcmVzdGFydDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmMgPSBTU0hfRVJST1I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICBzc2hjLT5rYmRfc3RhdGUgPSAyOwotCi0gICAgICByYyA9IHNzaF91c2VyYXV0aF9rYmRpbnQoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIE5VTEwpOwotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pCi0gICAgICAgIHJldHVybiBTU0hfQUdBSU47Ci0gICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpCi0gICAgICAgIHJjID0gU1NIX09LOwotICAgICAgZWxzZQotICAgICAgICByYyA9IFNTSF9FUlJPUjsKLQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBTU0hfRVJST1I7Ci0gIH0KLQotICBzc2hjLT5rYmRfc3RhdGUgPSAwOwotICByZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBzc2hfc3RhdGVtYWNoX2FjdCgpIHJ1bnMgdGhlIFNTSCBzdGF0ZSBtYWNoaW5lIGFzIGZhciBhcyBpdCBjYW4gd2l0aG91dAotICogYmxvY2tpbmcgYW5kIHdpdGhvdXQgcmVhY2hpbmcgdGhlIGVuZC4gIFRoZSBkYXRhIHRoZSBwb2ludGVyICdibG9jaycgcG9pbnRzCi0gKiB0byB3aWxsIGJlIHNldCB0byBUUlVFIGlmIHRoZSBsaWJzc2ggZnVuY3Rpb24gcmV0dXJucyBTU0hfQUdBSU4KLSAqIG1lYW5pbmcgaXQgd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQotICovCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmJsb2NrKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBTU0hQUk9UTyAqcHJvdG9wID0gZGF0YS0+cmVxLnByb3RvcDsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwotICBpbnQgcmMgPSBTU0hfTk9fRVJST1IsIGVycjsKLSAgY2hhciAqbmV3X3JlYWRkaXJfbGluZTsKLSAgaW50IHNlZWtlcnIgPSBDVVJMX1NFRUtGVU5DX09LOwotICBjb25zdCBjaGFyICplcnJfbXNnOwotICAqYmxvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBub3QgYmxvY2tpbmcgYnkgZGVmYXVsdCAqLwotCi0gIGRvIHsKLQotICAgIHN3aXRjaChzc2hjLT5zdGF0ZSkgewotICAgIGNhc2UgU1NIX0lOSVQ6Ci0gICAgICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMDsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PSzsKLQotI2lmIDAKLSAgICAgIHNzaF9zZXRfbG9nX2xldmVsKFNTSF9MT0dfUFJPVE9DT0wpOwotI2VuZGlmCi0KLSAgICAgIC8qIFNldCBsaWJzc2ggdG8gbm9uLWJsb2NraW5nLCBzaW5jZSBldmVyeXRoaW5nIGludGVybmFsbHkgaXMKLSAgICAgICAgIG5vbi1ibG9ja2luZyAqLwotICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMCk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TX1NUQVJUVVApOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLQotICAgIGNhc2UgU1NIX1NfU1RBUlRVUDoKLSAgICAgIHJjID0gc3NoX2Nvbm5lY3Qoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgaWYocmMgPT0gU1NIX0FHQUlOKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbiIpOwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0ZBSUxFRF9JTklUKTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX0hPU1RLRVkpOwotCi0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgU1NIX0hPU1RLRVk6Ci0KLSAgICAgIHJjID0gbXlzc2hfaXNfa25vd24oY29ubik7Ci0gICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04pOwotICAgICAgfQotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSExJU1QpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIFNTSF9BVVRITElTVDp7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IEZBTFNFOwotCi0gICAgICAgIHJjID0gc3NoX3VzZXJhdXRoX25vbmUoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwpOwotICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgewotICAgICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0ZWQgd2l0aCBub25lXG4iKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX0VSUk9SKSB7Ci0gICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3NoYy0+YXV0aF9tZXRob2RzID0gc3NoX3VzZXJhdXRoX2xpc3Qoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwpOwotICAgICAgICBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfUFVCTElDS0VZKSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWV9JTklUKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRpb24gdXNpbmcgU1NIIHB1YmxpYyBrZXkgZmlsZVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfR1NTQVBJX01JQykgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0dTU0FQSSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfSU5URVJBQ1RJVkUpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfUEFTU1dPUkQpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgIC8qIHVuc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAqLwotICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIGNhc2UgU1NIX0FVVEhfUEtFWV9JTklUOgotICAgICAgaWYoIShkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfUFVCTElDS0VZKSkgewotICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOwotICAgICAgfQotCi0gICAgICAvKiBUd28gY2hvaWNlcywgKDEpIHByaXZhdGUga2V5IHdhcyBnaXZlbiBvbiBDTUQsCi0gICAgICAgKiAoMikgdXNlIHRoZSAiZGVmYXVsdCIga2V5cy4gKi8KLSAgICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0pIHsKLSAgICAgICAgaWYoc3NoYy0+cHVia2V5ICYmICFkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QpIHsKLSAgICAgICAgICByYyA9IHNzaF91c2VyYXV0aF90cnlfcHVibGlja2V5KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cHVia2V5KTsKLSAgICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgewotICAgICAgICAgICAgcmMgPSBTU0hfQUdBSU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBzc2hfcGtpX2ltcG9ydF9wcml2a2V5X2ZpbGUoZGF0YS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnNzaGMtPnByaXZrZXkpOwotICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IGxvYWQgcHJpdmF0ZSBrZXkgZmlsZSAlcyIsCi0gICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSk7Ci0gICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfcHVibGlja2V5X2F1dG8oc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCk7Ci0gICAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7Ci0gICAgICAgICAgcmMgPSBTU0hfQUdBSU47Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICAgIHJjID0gU1NIX09LOwotICAgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNTSF9BVVRIX1BLRVk6Ci0gICAgICByYyA9IHNzaF91c2VyYXV0aF9wdWJsaWNrZXkoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIHNzaGMtPnByaXZrZXkpOwotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKLSAgICAgICAgcmMgPSBTU0hfQUdBSU47Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgcHVibGljIGtleSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gKHJjOiAlZClcbiIsIHJjKTsKLSAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9HU1NBUEk6Ci0gICAgICBpZighKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9HU1NBUEkpKSB7Ci0gICAgICAgIE1PVkVfVE9fVEVSVElBUllfQVVUSDsKLSAgICAgIH0KLQotICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfZ3NzYXBpKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7Ci0gICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICByYyA9IFNTSF9PSzsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBnc3NhcGkgYXV0aGVudGljYXRpb25cbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIE1PVkVfVE9fVEVSVElBUllfQVVUSDsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9LRVlfSU5JVDoKLSAgICAgIGlmKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9LRVlCT0FSRCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVkpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIE1PVkVfVE9fTEFTVF9BVVRIOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0tFWToKLQotICAgICAgLyogQXV0aGVudGljYXRpb24gZmFpbGVkLiBDb250aW51ZSB3aXRoIGtleWJvYXJkLWludGVyYWN0aXZlIG5vdy4gKi8KLSAgICAgIHJjID0gbXlzc2hfYXV0aF9pbnRlcmFjdGl2ZShjb25uKTsKLSAgICAgIGlmKHJjID09IFNTSF9BR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjID09IFNTSF9PSykgewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICBpbmZvZihkYXRhLCAiY29tcGxldGVkIGtleWJvYXJkIGludGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX1BBU1NfSU5JVDoKLSAgICAgIGlmKCEoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BBU1NXT1JEKSkgewotICAgICAgICAvKiBIb3N0IGtleSBhdXRoZW50aWNhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG5vdCBpbXBsZW1lbnRlZCAqLwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0KLSAgICBjYXNlIFNTSF9BVVRIX1BBU1M6Ci0gICAgICByYyA9IHNzaF91c2VyYXV0aF9wYXNzd29yZChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgY29ubi0+cGFzc3dkKTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7Ci0gICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0RPTkU6Ci0gICAgICBpZighc3NoYy0+YXV0aGVkKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJBdXRoZW50aWNhdGlvbiBmYWlsdXJlIik7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gYXV0aGVudGljYXRlZCBzc2ggc2Vzc2lvbi4KLSAgICAgICAqLwotICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlXG4iKTsKLQotICAgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgICAgICAvKiBTU0ggaXMgY29ubmVjdGVkICovCi0KLSAgICAgIGNvbm4tPnNvY2tmZCA9IHNvY2s7Ci0gICAgICBjb25uLT53cml0ZXNvY2tmZCA9IENVUkxfU09DS0VUX0JBRDsKLQotICAgICAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgPT0gQ1VSTFBST1RPX1NGVFApIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfSU5JVCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaW5mb2YoZGF0YSwgIlNTSCBDT05ORUNUIHBoYXNlIGRvbmVcbiIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0lOSVQ6Ci0gICAgICBzc2hfc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAxKTsKLQotICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gc2Z0cF9uZXcoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgaWYoIXNzaGMtPnNmdHBfc2Vzc2lvbikgewotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBpbml0aWFsaXppbmcgc2Z0cCBzZXNzaW9uOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9DT1VMRE5UX0NPTk5FQ1QpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgcmMgPSBzZnRwX2luaXQoc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgIGlmKHJjICE9IFNTSF9PSykgewotICAgICAgICByYyA9IHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpemluZyBzZnRwIHNlc3Npb246ICVzIiwKLSAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKHNmdHBfZXJyb3JfdG9fQ1VSTEUocmMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFMUEFUSCk7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgU1NIX1NGVFBfUkVBTFBBVEg6Ci0gICAgICAvKgotICAgICAgICogR2V0IHRoZSAiaG9tZSIgZGlyZWN0b3J5Ci0gICAgICAgKi8KLSAgICAgIHNzaGMtPmhvbWVkaXIgPSBzZnRwX2Nhbm9uaWNhbGl6ZV9wYXRoKHNzaGMtPnNmdHBfc2Vzc2lvbiwgIi4iKTsKLSAgICAgIGlmKHNzaGMtPmhvbWVkaXIgPT0gTlVMTCkgewotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0NPVUxETlRfQ09OTkVDVCk7Ci0gICAgICB9Ci0gICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gc3NoYy0+aG9tZWRpcjsKLQotICAgICAgLyogVGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBTRlRQIGNvbm5lY3QgcGhhc2UuIERvIG5vdGUgdGhhdCB3aGlsZQotICAgICAgICAgd2UgZ2V0IHRoZSBob21lZGlyIGhlcmUsIHdlIGdldCB0aGUgIndvcmtpbmdwYXRoIiBpbiB0aGUgRE8gYWN0aW9uCi0gICAgICAgICBzaW5jZSB0aGUgaG9tZWRpciB3aWxsIHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIHJlcXVlc3QgYnV0IHRoZQotICAgICAgICAgd29ya2luZyBwYXRoIHdpbGwgbm90LiAqLwotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKSk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfSU5JVDoKLQotICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmcHJvdG9wLT5wYXRoKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQucXVvdGUpIHsKLSAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOwotICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnF1b3RlOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfR0VUSU5GTyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ6Ci0gICAgICBpZihkYXRhLT5zZXQucG9zdHF1b3RlKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJTZW5kaW5nIHF1b3RlIGNvbW1hbmRzXG4iKTsKLSAgICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IGRhdGEtPnNldC5wb3N0cXVvdGU7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEU6Ci0gICAgICAvKiBTZW5kIGFueSBxdW90ZSBjb21tYW5kcyAqLwotICAgICAgc2Z0cF9xdW90ZShjb25uKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9ORVhUX1FVT1RFOgotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLQotICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IHNzaGMtPnF1b3RlX2l0ZW0tPm5leHQ7Ci0KLSAgICAgIGlmKHNzaGMtPnF1b3RlX2l0ZW0pIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NUQVQ6Ci0gICAgICBzZnRwX3F1b3RlX3N0YXQoY29ubik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVDoKLSAgICAgIHJjID0gc2Z0cF9zZXRzdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9hdHRycyk7Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gc2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgLyogc3NoYy0+YWN0dWFsY29kZSA9IHNmdHBfZXJyb3JfdG9fQ1VSTEUoZXJyKTsKLSAgICAgICAgICogd2UgZG8gbm90IHNlbmQgdGhlIGFjdHVhbCBlcnJvcjsgd2UgcmV0dXJuCi0gICAgICAgICAqIHRoZSBlcnJvciB0aGUgbGlic3NoMiBiYWNrZW5kIGlzIHJldHVybmluZyAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NZTUxJTks6Ci0gICAgICByYyA9IHNmdHBfc3ltbGluayhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzeW1saW5rIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9NS0RJUjoKLSAgICAgIHJjID0gc2Z0cF9ta2Rpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19kaXJlY3RvcnlfcGVybXMpOwotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIm1rZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9SRU5BTUU6Ci0gICAgICByYyA9IHNmdHBfcmVuYW1lKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICBmYWlsZihkYXRhLCAicmVuYW1lIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9STURJUjoKLSAgICAgIHJjID0gc2Z0cF9ybWRpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJybWRpciBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfVU5MSU5LOgotICAgICAgcmMgPSBzZnRwX3VubGluayhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJybSBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUzoKLSAgICB7Ci0gICAgICBzZnRwX3N0YXR2ZnNfdCBzdGF0dmZzOwotCi0gICAgICBzdGF0dmZzID0gc2Z0cF9zdGF0dmZzKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgaWYoIXN0YXR2ZnMgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzdGF0dmZzIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHN0YXR2ZnMpIHsKLSAgICAgICAgY2hhciAqdG1wID0gYXByaW50Zigic3RhdHZmczpcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ic2l6ZTogJWxsdVxuIiAiZl9mcnNpemU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ibG9ja3M6ICVsbHVcbiIgImZfYmZyZWU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9iYXZhaWw6ICVsbHVcbiIgImZfZmlsZXM6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mZnJlZTogJWxsdVxuIiAiZl9mYXZhaWw6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mc2lkOiAlbGx1XG4iICJmX2ZsYWc6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9uYW1lbWF4OiAlbGx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfYnNpemUsIHN0YXR2ZnMtPmZfZnJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfYmxvY2tzLCBzdGF0dmZzLT5mX2JmcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfYmF2YWlsLCBzdGF0dmZzLT5mX2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfZmZyZWUsIHN0YXR2ZnMtPmZfZmF2YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfZnNpZCwgc3RhdHZmcy0+Zl9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfbmFtZW1heCk7Ci0gICAgICAgIHNmdHBfc3RhdHZmc19mcmVlKHN0YXR2ZnMpOwotCi0gICAgICAgIGlmKCF0bXApIHsKLSAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIHRtcCwgc3RybGVuKHRtcCkpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0dFVElORk86Ci0gICAgICBpZihkYXRhLT5zZXQuZ2V0X2ZpbGV0aW1lKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0ZJTEVUSU1FKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9UUkFOU19JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9GSUxFVElNRToKLSAgICB7Ci0gICAgICBzZnRwX2F0dHJpYnV0ZXMgYXR0cnM7Ci0KLSAgICAgIGF0dHJzID0gc2Z0cF9zdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoKTsKLSAgICAgIGlmKGF0dHJzICE9IDApIHsKLSAgICAgICAgZGF0YS0+aW5mby5maWxldGltZSA9IGF0dHJzLT5tdGltZTsKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoYXR0cnMpOwotICAgICAgfQotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9UUkFOU19JTklUKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfVFJBTlNfSU5JVDoKLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKLSAgICAgIGVsc2UgewotICAgICAgICBpZihwcm90b3AtPnBhdGhbc3RybGVuKHByb3RvcC0+cGF0aCktMV0gPT0gJy8nKQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfSU5JVCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9VUExPQURfSU5JVDoKLSAgICB7Ci0gICAgICBpbnQgZmxhZ3M7Ci0KLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICE9IDApIHsKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzIGF0dHJzOwotCi0gICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgewotICAgICAgICAgIGF0dHJzID0gc2Z0cF9zdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoKTsKLSAgICAgICAgICBpZihhdHRycyAhPSAwKSB7Ci0gICAgICAgICAgICBjdXJsX29mZl90IHNpemUgPSBhdHRycy0+c2l6ZTsKLSAgICAgICAgICAgIGlmKHNpemUgPCAwKSB7Ci0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJCYWQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgc2l6ZSk7Ci0gICAgICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGF0dHJzLT5zaXplOwotCi0gICAgICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShhdHRycyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQuZnRwX2FwcGVuZCkKLSAgICAgICAgLyogVHJ5IHRvIG9wZW4gZm9yIGFwcGVuZCwgYnV0IGNyZWF0ZSBpZiBub25leGlzdGluZyAqLwotICAgICAgICBmbGFncyA9IE9fV1JPTkxZfE9fQ1JFQVR8T19BUFBFTkQ7Ci0gICAgICBlbHNlIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkKLSAgICAgICAgLyogSWYgd2UgaGF2ZSByZXN0YXJ0IHBvc2l0aW9uIHRoZW4gb3BlbiBmb3IgYXBwZW5kICovCi0gICAgICAgIGZsYWdzID0gT19XUk9OTFl8T19BUFBFTkQ7Ci0gICAgICBlbHNlCi0gICAgICAgIC8qIENsZWFyIGZpbGUgYmVmb3JlIHdyaXRpbmcgKG5vcm1hbCBiZWhhdmlvdXIpICovCi0gICAgICAgIGZsYWdzID0gT19XUk9OTFl8T19BUFBFTkR8T19DUkVBVHxPX1RSVU5DOwotCi0gICAgICBpZihzc2hjLT5zZnRwX2ZpbGUpCi0gICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKLSAgICAgIHNzaGMtPnNmdHBfZmlsZSA9Ci0gICAgICAgIHNmdHBfb3Blbihzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgIGZsYWdzLCAobW9kZV90KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7Ci0gICAgICBpZighc3NoYy0+c2Z0cF9maWxlKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0KLSAgICAgICAgaWYoKChlcnIgPT0gU1NIX0ZYX05PX1NVQ0hfRklMRSB8fCBlcnIgPT0gU1NIX0ZYX0ZBSUxVUkUgfHwKLSAgICAgICAgICAgICBlcnIgPT0gU1NIX0ZYX05PX1NVQ0hfUEFUSCkpICYmCi0gICAgICAgICAgICAgKGRhdGEtPnNldC5mdHBfY3JlYXRlX21pc3NpbmdfZGlycyAmJgotICAgICAgICAgICAgIChzdHJsZW4ocHJvdG9wLT5wYXRoKSA+IDEpKSkgewotICAgICAgICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSB0aGUgcGF0aCByZW1vdGVseSAqLwotICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDE7Ci0gICAgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIElmIHdlIGhhdmUgYSByZXN0YXJ0IHBvaW50IHRoZW4gd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBjb3JyZWN0Ci0gICAgICAgICBwb3NpdGlvbi4gKi8KLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkgewotICAgICAgICAvKiBMZXQncyByZWFkIG9mZiB0aGUgcHJvcGVyIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dC4gKi8KLSAgICAgICAgaWYoY29ubi0+c2Vla19mdW5jKSB7Ci0gICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7Ci0gICAgICAgICAgc2Vla2VyciA9IGNvbm4tPnNlZWtfZnVuYyhjb25uLT5zZWVrX2NsaWVudCwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUVLX1NFVCk7Ci0gICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoc2Vla2VyciAhPSBDVVJMX1NFRUtGVU5DX09LKSB7Ci0gICAgICAgICAgY3VybF9vZmZfdCBwYXNzZWQgPSAwOwotCi0gICAgICAgICAgaWYoc2Vla2VyciAhPSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHNlZWsgc3RyZWFtIik7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1Q7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIHNlZWtlcnIgPT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSyAoY2FuJ3Qgc2VlayB0byBvZmZzZXQpICovCi0gICAgICAgICAgZG8gewotICAgICAgICAgICAgc2l6ZV90IHJlYWR0aGlzYW1vdW50bm93ID0KLSAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkID4gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplKSA/Ci0gICAgICAgICAgICAgIChzaXplX3QpZGF0YS0+c2V0LmJ1ZmZlcl9zaXplIDoKLSAgICAgICAgICAgICAgY3VybHhfc290b3V6KGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkKTsKLQotICAgICAgICAgICAgc2l6ZV90IGFjdHVhbGx5cmVhZCA9Ci0gICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmZyZWFkX2Z1bmMoZGF0YS0+c3RhdGUuYnVmZmVyLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR0aGlzYW1vdW50bm93LCBkYXRhLT5zdGF0ZS5pbik7Ci0KLSAgICAgICAgICAgIHBhc3NlZCArPSBhY3R1YWxseXJlYWQ7Ci0gICAgICAgICAgICBpZigoYWN0dWFsbHlyZWFkID09IDApIHx8IChhY3R1YWxseXJlYWQgPiByZWFkdGhpc2Ftb3VudG5vdykpIHsKLSAgICAgICAgICAgICAgLyogdGhpcyBjaGVja3MgZm9yIGdyZWF0ZXItdGhhbiBvbmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQotICAgICAgICAgICAgICAgICBDVVJMX1JFQURGVU5DX0FCT1JUIHJldHVybiBjb2RlIHN0aWxsIGFib3J0cyAqLwotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlYWQgZGF0YSIpOwotICAgICAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KLSAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKLSAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKLSAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBzZnRwX3NlZWs2NChzc2hjLT5zZnRwX2ZpbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgICAgaWYocmMgIT0gMCkgewotICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgewotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7Ci0gICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7Ci0gICAgICB9Ci0gICAgICAvKiB1cGxvYWQgZGF0YSAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCBGSVJTVFNPQ0tFVCk7Ci0KLSAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLwotICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7Ci0KLSAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKLSAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLwotICAgICAgc3NoYy0+b3JpZ193YWl0Zm9yID0gZGF0YS0+cmVxLmtlZXBvbjsKLQotICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaCBzZnRwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7Ci0KLSAgICAgIC8qIHNpbmNlIHdlIGRvbid0IHJlYWxseSB3YWl0IGZvciBhbnl0aGluZyBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRoZQotICAgICAgICAgc3RhdGUgbWFjaGluZSB0byBtb3ZlIG9uIGFzIHNvb24gYXMgcG9zc2libGUgc28gd2Ugc2V0IGEgdmVyeSBzaG9ydAotICAgICAgICAgdGltZW91dCBoZXJlICovCi0gICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVDoKLSAgICAgIGlmKHN0cmxlbihwcm90b3AtPnBhdGgpID4gMSkgewotICAgICAgICBzc2hjLT5zbGFzaF9wb3MgPSBwcm90b3AtPnBhdGggKyAxOyAvKiBpZ25vcmUgdGhlIGxlYWRpbmcgJy8nICovCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlM6Ci0gICAgICBzc2hjLT5zbGFzaF9wb3MgPSBzdHJjaHIoc3NoYy0+c2xhc2hfcG9zLCAnLycpOwotICAgICAgaWYoc3NoYy0+c2xhc2hfcG9zKSB7Ci0gICAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAwOwotCi0gICAgICAgIGluZm9mKGRhdGEsICJDcmVhdGluZyBkaXJlY3RvcnkgJyVzJ1xuIiwgcHJvdG9wLT5wYXRoKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUjoKLSAgICAgIC8qICdtb2RlJyAtIHBhcmFtZXRlciBpcyBwcmVsaW1pbmFyeSAtIGRlZmF1bHQgdG8gMDY0NCAqLwotICAgICAgcmMgPSBzZnRwX21rZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19kaXJlY3RvcnlfcGVybXMpOwotICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9ICcvJzsKLSAgICAgICsrc3NoYy0+c2xhc2hfcG9zOwotICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEFib3J0IGlmIGZhaWx1cmUgd2Fzbid0IHRoYXQgdGhlIGRpciBhbHJlYWR5IGV4aXN0cyBvciB0aGUKLSAgICAgICAgICogcGVybWlzc2lvbiB3YXMgZGVuaWVkIChjcmVhdGlvbiBtaWdodCBzdWNjZWVkIGZ1cnRoZXIgZG93biB0aGUKLSAgICAgICAgICogcGF0aCkgLSByZXRyeSBvbiB1bnNwZWNpZmljIEZBSUxVUkUgYWxzbwotICAgICAgICAgKi8KLSAgICAgICAgZXJyID0gc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgaWYoKGVyciAhPSBTU0hfRlhfRklMRV9BTFJFQURZX0VYSVNUUykgJiYKLSAgICAgICAgICAgKGVyciAhPSBTU0hfRlhfRkFJTFVSRSkgJiYKLSAgICAgICAgICAgKGVyciAhPSBTU0hfRlhfUEVSTUlTU0lPTl9ERU5JRUQpKSB7Ci0gICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0lOSVQ6Ci0gICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOwotICAgICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBUaGlzIGlzIGEgZGlyZWN0b3J5IHRoYXQgd2UgYXJlIHRyeWluZyB0byBnZXQsIHNvIHByb2R1Y2UgYSBkaXJlY3RvcnkKLSAgICAgICAqIGxpc3RpbmcKLSAgICAgICAqLwotICAgICAgc3NoYy0+c2Z0cF9kaXIgPSBzZnRwX29wZW5kaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9wLT5wYXRoKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX2RpcikgewotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gZGlyZWN0b3J5IGZvciByZWFkaW5nOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgotCi0gICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2F0dHJzKTsKLQotICAgICAgc3NoYy0+cmVhZGRpcl9hdHRycyA9IHNmdHBfcmVhZGRpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnNmdHBfZGlyKTsKLSAgICAgIGlmKHNzaGMtPnJlYWRkaXJfYXR0cnMpIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IHNzaGMtPnJlYWRkaXJfYXR0cnMtPm5hbWU7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gc3NoYy0+cmVhZGRpcl9hdHRycy0+bG9uZ25hbWU7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotCi0gICAgICAgIGlmKGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5KSB7Ci0gICAgICAgICAgY2hhciAqdG1wTGluZTsKLQotICAgICAgICAgIHRtcExpbmUgPSBhcHJpbnRmKCIlc1xuIiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgICAgaWYodG1wTGluZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcExpbmUsIHNzaGMtPnJlYWRkaXJfbGVuICsgMSk7Ci0gICAgICAgICAgZnJlZSh0bXBMaW5lKTsKLQotICAgICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIHNpbmNlIHRoaXMgY291bnRzIHdoYXQgd2Ugc2VuZCB0byB0aGUgY2xpZW50LCB3ZSBpbmNsdWRlIHRoZQotICAgICAgICAgICAgIG5ld2xpbmUgaW4gdGhpcyBjb3VudGVyICovCi0gICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBzc2hjLT5yZWFkZGlyX2xlbiArIDE7Ci0KLSAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCi0gICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9PVVQsCi0gICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gPSBzdHJsZW4oc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gPSA4MCArIHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmUgPSBjYWxsb2Moc3NoYy0+cmVhZGRpcl90b3RhbExlbiwgMSk7Ci0gICAgICAgICAgaWYoIXNzaGMtPnJlYWRkaXJfbGluZSkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBtZW1jcHkoc3NoYy0+cmVhZGRpcl9saW5lLCBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSwKLSAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKLSAgICAgICAgICBpZigoc3NoYy0+cmVhZGRpcl9hdHRycy0+ZmxhZ3MgJiBTU0hfRklMRVhGRVJfQVRUUl9QRVJNSVNTSU9OUykgJiYKLSAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMtPnBlcm1pc3Npb25zICYgU19JRk1UKSA9PQotICAgICAgICAgICAgICBTX0lGTE5LKSkgewotICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCA9IG1hbGxvYyhQQVRIX01BWCArIDEpOwotICAgICAgICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtc25wcmludGYoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCwgUEFUSF9NQVgsICIlcyVzIiwgcHJvdG9wLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotCi0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0xJTkspOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihzc2hjLT5yZWFkZGlyX2F0dHJzID09IE5VTEwgJiYgc2Z0cF9kaXJfZW9mKHNzaGMtPnNmdHBfZGlyKSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0RPTkUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gcmVtb3RlIGZpbGUgZm9yIHJlYWRpbmc6ICVzIiwKLSAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9MSU5LOgotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOwotCi0gICAgICBzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMgPSBzZnRwX2xzdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0gICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMgPT0gMCkgewotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHJlYWQgc3ltbGluayBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgfQotCi0gICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWUgPT0gTlVMTCkgewotICAgICAgICBzc2hjLT5yZWFkZGlyX3RtcCA9IHNmdHBfcmVhZGxpbmsoc3NoYy0+c2Z0cF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0gICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX3RtcCk7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IHNzaGMtPnJlYWRkaXJfdG1wOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycy0+bmFtZSk7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWU7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5sb25nbmFtZTsKLSAgICAgIH0KLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKLQotICAgICAgLyogZ2V0IHJvb20gZm9yIHRoZSBmaWxlbmFtZSBhbmQgZXh0cmEgb3V0cHV0ICovCi0gICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuICs9IDQgKyBzc2hjLT5yZWFkZGlyX2xlbjsKLSAgICAgIG5ld19yZWFkZGlyX2xpbmUgPSBDdXJsX3NhZmVyZWFsbG9jKHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOwotICAgICAgaWYoIW5ld19yZWFkZGlyX2xpbmUpIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gTlVMTDsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzc2hjLT5yZWFkZGlyX2xpbmUgPSBuZXdfcmVhZGRpcl9saW5lOwotCi0gICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGluZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtPiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotCi0gICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOwotICAgICAgc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID0gTlVMTDsKLSAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBOVUxMOwotICAgICAgc3NoYy0+cmVhZGRpcl9sb25nZW50cnkgPSBOVUxMOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9CT1RUT006Ci0gICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGluZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwgIlxuIik7Ci0gICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKLQotICAgICAgaWYoIXJlc3VsdCkgewotCi0gICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KLSAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULCBzc2hjLT5yZWFkZGlyX2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOwotICAgICAgICB9Ci0gICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gc3NoYy0+cmVhZGRpcl9jdXJyTGVuOwotICAgICAgfQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmUpOwotICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoc3NoYy0+cmVhZGRpcl90bXApOwotICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBOVUxMOwotCi0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0RPTkU6Ci0gICAgICBzZnRwX2Nsb3NlZGlyKHNzaGMtPnNmdHBfZGlyKTsKLSAgICAgIHNzaGMtPnNmdHBfZGlyID0gTlVMTDsKLQotICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfSU5JVDoKLSAgICAgIC8qCi0gICAgICAgKiBXb3JrIG9uIGdldHRpbmcgdGhlIHNwZWNpZmllZCBmaWxlCi0gICAgICAgKi8KLSAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkKLSAgICAgICAgc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2ZpbGUpOwotCi0gICAgICBzc2hjLT5zZnRwX2ZpbGUgPSBzZnRwX29wZW4oc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT19SRE9OTFksIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX2ZpbGUpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLQotICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfU1RBVDoKLSAgICB7Ci0gICAgICBzZnRwX2F0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICBjdXJsX29mZl90IHNpemU7Ci0KLSAgICAgIGF0dHJzID0gc2Z0cF9mc3RhdChzc2hjLT5zZnRwX2ZpbGUpOwotICAgICAgaWYoIWF0dHJzIHx8Ci0gICAgICAgICAgICAgICEoYXR0cnMtPmZsYWdzICYgU1NIX0ZJTEVYRkVSX0FUVFJfU0laRSkgfHwKLSAgICAgICAgICAgICAgKGF0dHJzLT5zaXplID09IDApKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHNmdHBfZnN0YXQgZGlkbid0IHJldHVybiBhbiBlcnJvciwgc28gbWF5YmUgdGhlIHNlcnZlcgotICAgICAgICAgKiBqdXN0IGRvZXNuJ3Qgc3VwcG9ydCBzdGF0KCkKLSAgICAgICAgICogT1IgdGhlIHNlcnZlciBkb2Vzbid0IHJldHVybiBhIGZpbGUgc2l6ZSB3aXRoIGEgc3RhdCgpCi0gICAgICAgICAqIE9SIGZpbGUgc2l6ZSBpcyAwCi0gICAgICAgICAqLwotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IC0xOwotICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSAtMTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKLSAgICAgICAgc2l6ZSA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc2l6ZSA9IGF0dHJzLT5zaXplOwotCi0gICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKGF0dHJzKTsKLQotICAgICAgICBpZihzaXplIDwgMCkgewotICAgICAgICAgIGZhaWxmKGRhdGEsICJCYWQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgc2l6ZSk7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlX3JhbmdlKSB7Ci0gICAgICAgICAgY3VybF9vZmZfdCBmcm9tLCB0bzsKLSAgICAgICAgICBjaGFyICpwdHI7Ci0gICAgICAgICAgY2hhciAqcHRyMjsKLSAgICAgICAgICBDVVJMb2ZmdCB0b190OwotICAgICAgICAgIENVUkxvZmZ0IGZyb21fdDsKLQotICAgICAgICAgIGZyb21fdCA9IGN1cmx4X3N0cnRvb2ZmdChjb25uLT5kYXRhLT5zdGF0ZS5yYW5nZSwgJnB0ciwgMCwgJmZyb20pOwotICAgICAgICAgIGlmKGZyb21fdCA9PSBDVVJMX09GRlRfRkxPVykgewotICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOwotICAgICAgICAgIH0KLSAgICAgICAgICB3aGlsZSgqcHRyICYmIChJU1NQQUNFKCpwdHIpIHx8ICgqcHRyID09ICctJykpKQotICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgdG9fdCA9IGN1cmx4X3N0cnRvb2ZmdChwdHIsICZwdHIyLCAwLCAmdG8pOwotICAgICAgICAgIGlmKHRvX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpIHsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9SQU5HRV9FUlJPUjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoKHRvX3QgPT0gQ1VSTF9PRkZUX0lOVkFMKSAvKiBubyAidG8iIHZhbHVlIGdpdmVuICovCi0gICAgICAgICAgICAgfHwgKHRvID49IHNpemUpKSB7Ci0gICAgICAgICAgICB0byA9IHNpemUgLSAxOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihmcm9tX3QpIHsKLSAgICAgICAgICAgIC8qIGZyb20gaXMgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUgKi8KLSAgICAgICAgICAgIGZyb20gPSBzaXplIC0gdG87Ci0gICAgICAgICAgICB0byA9IHNpemUgLSAxOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihmcm9tID4gc2l6ZSkgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKLSAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgZnJvbSwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbSA+IHRvKSB7Ci0gICAgICAgICAgICBmcm9tID0gdG87Ci0gICAgICAgICAgICBzaXplID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplID0gdG8gLSBmcm9tICsgMTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByYyA9IHNmdHBfc2VlazY0KHNzaGMtPnNmdHBfZmlsZSwgZnJvbSk7Ci0gICAgICAgICAgaWYocmMgIT0gMCkgewotICAgICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRhdGEtPnJlcS5zaXplID0gc2l6ZTsKLSAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gc2l6ZTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIHNpemUpOwotICAgICAgfQotCi0gICAgICAvKiBXZSBjYW4gcmVzdW1lIGlmIHdlIGNhbiBzZWVrIHRvIHRoZSByZXN1bWUgcG9zaXRpb24gKi8KLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7Ci0gICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgewotICAgICAgICAgIC8qIFdlJ3JlIHN1cHBvc2VkIHRvIGRvd25sb2FkIHRoZSBsYXN0IGFicyhmcm9tKSBieXRlcyAqLwotICAgICAgICAgIGlmKChjdXJsX29mZl90KXNpemUgPCAtZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCi0gICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KLSAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBzaXplOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGlmKChjdXJsX29mZl90KXNpemUgPCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAotICAgICAgICAgICAgICAgICAgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLAotICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIHNpemUpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIERvZXMgYSBjb21wbGV0ZWQgZmlsZSBuZWVkIHRvIGJlIHNlZWtlZCBhbmQgc3RhcnRlZCBvciBjbG9zZWQgPyAqLwotICAgICAgICAvKiBOb3cgc3RvcmUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBhcmUgZXhwZWN0ZWQgdG8gZG93bmxvYWQgKi8KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOwotCi0gICAgICAgIHJjID0gc2Z0cF9zZWVrNjQoc3NoYy0+c2Z0cF9maWxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7Ci0gICAgICAgIGlmKHJjICE9IDApIHsKLSAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KLSAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7Ci0gICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKLSAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKLQotICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLwotICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOwotCi0gICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCi0gICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKLSAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47Ci0KLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyOyB0aGUgY2xvc2Ugc3RhdGUgc2hvdWxkIGJlIGVudGVyZWQKLSAgICAgICAgIGF0IHRoZSB0aW1lIHRoZSBlcnJvciBvY2N1cnMgKi8KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgc3NoYy0+c2Z0cF9yZWN2X3N0YXRlID0gMDsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0NMT1NFOgotICAgICAgaWYoc3NoYy0+c2Z0cF9maWxlKSB7Ci0gICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKLSAgICAgICAgc3NoYy0+c2Z0cF9maWxlID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIEN1cmxfc2FmZWZyZWUocHJvdG9wLT5wYXRoKTsKLQotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTRlRQIERPTkUgZG9uZVxuIikpOwotCi0gICAgICAvKiBDaGVjayBpZiBuZXh0c3RhdGUgaXMgc2V0IGFuZCBtb3ZlIC5uZXh0c3RhdGUgY291bGQgYmUgUE9TVFFVT1RFX0lOSVQKLSAgICAgICAgIEFmdGVyIG5leHRzdGF0ZSBpcyBleGVjdXRlZCwgdGhlIGNvbnRyb2wgc2hvdWxkIGNvbWUgYmFjayB0bwotICAgICAgICAgU1NIX1NGVFBfQ0xPU0UgdG8gcGFzcyB0aGUgY29ycmVjdCByZXN1bHQgYmFjayAgKi8KLSAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUgJiYKLSAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfU0ZUUF9DTE9TRSkgewotICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9DTE9TRTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfU0hVVERPV046Ci0gICAgICAvKiBkdXJpbmcgdGltZXMgd2UgZ2V0IGhlcmUgZHVlIHRvIGEgYnJva2VuIHRyYW5zZmVyIGFuZCB0aGVuIHRoZQotICAgICAgICAgc2Z0cF9oYW5kbGUgbWlnaHQgbm90IGhhdmUgYmVlbiB0YWtlbiBkb3duIHNvIG1ha2Ugc3VyZSB0aGF0IGlzIGRvbmUKLSAgICAgICAgIGJlZm9yZSB3ZSBwcm9jZWVkICovCi0KLSAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkgewotICAgICAgICBzZnRwX2Nsb3NlKHNzaGMtPnNmdHBfZmlsZSk7Ci0gICAgICAgIHNzaGMtPnNmdHBfZmlsZSA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHNzaGMtPnNmdHBfc2Vzc2lvbikgewotICAgICAgICBzZnRwX2ZyZWUoc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgU1NIX1NUUklOR19GUkVFX0NIQVIoc3NoYy0+aG9tZWRpcik7Ci0gICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7Ci0gICAgICBicmVhazsKLQotCi0gICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6Ci0gICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZwcm90b3AtPnBhdGgpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEZ1bmN0aW9ucyBmcm9tIHRoZSBTQ1Agc3Vic3lzdGVtIGNhbm5vdCBoYW5kbGUvcmV0dXJuIFNTSF9BR0FJTiAqLwotICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMSk7Ci0KLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKLSAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA8IDApIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU0NQIHJlcXVpcmVzIGEga25vd24gZmlsZSBzaXplIGZvciB1cGxvYWQiKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKLSAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1VQTE9BRF9GQUlMRUQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPQotICAgICAgICAgIHNzaF9zY3BfbmV3KHNzaGMtPnNzaF9zZXNzaW9uLCBTU0hfU0NQX1dSSVRFLCBwcm90b3AtPnBhdGgpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzc2hjLT5zY3Bfc2Vzc2lvbiA9Ci0gICAgICAgICAgc3NoX3NjcF9uZXcoc3NoYy0+c3NoX3Nlc3Npb24sIFNTSF9TQ1BfUkVBRCwgcHJvdG9wLT5wYXRoKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET1dOTE9BRF9JTklUKTsKLSAgICAgIH0KLQotICAgICAgaWYoIXNzaGMtPnNjcF9zZXNzaW9uKSB7Ci0gICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfVVBMT0FEX0ZBSUxFRCk7Ci0gICAgICB9Ci0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX1VQTE9BRF9JTklUOgotCi0gICAgICByYyA9IHNzaF9zY3BfaW5pdChzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKLSAgICAgIH0KLQotICAgICAgcmMgPSBzc2hfc2NwX3B1c2hfZmlsZShzc2hjLT5zY3Bfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7Ci0gICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKLSAgICAgIH0KLQotICAgICAgLyogdXBsb2FkIGRhdGEgKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgRklSU1RTT0NLRVQpOwotCi0gICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOwotCi0gICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0Ci0gICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KLSAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247Ci0KLSAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggc2NwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKLQotICAgICAgcmMgPSBzc2hfc2NwX2luaXQoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9XTkxPQUQpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLQotICAgIGNhc2UgU1NIX1NDUF9ET1dOTE9BRDp7Ci0gICAgICAgIGN1cmxfb2ZmX3QgYnl0ZWNvdW50OwotCi0gICAgICAgIHJjID0gc3NoX3NjcF9wdWxsX3JlcXVlc3Qoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgICBpZihyYyAhPSBTU0hfU0NQX1JFUVVFU1RfTkVXRklMRSkgewotICAgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBkb3dubG9hZCBkYXRhICovCi0gICAgICAgIGJ5dGVjb3VudCA9IHNzaF9zY3BfcmVxdWVzdF9nZXRfc2l6ZShzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IChjdXJsX29mZl90KSBieXRlY291bnQ7Ci0gICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIGJ5dGVjb3VudCwgRkFMU0UsIC0xKTsKLQotICAgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7Ci0KLSAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCi0gICAgICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLwotICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47Ci0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICBjYXNlIFNTSF9TQ1BfRE9ORToKLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfU0VORF9FT0YpOwotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9TRU5EX0VPRjoKLSAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gc3NoX3NjcF9jbG9zZShzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICAgIGlmKHJjID09IFNTSF9BR0FJTikgewotICAgICAgICAgIC8qIEN1cnJlbnRseSB0aGUgc3NoX3NjcF9jbG9zZSBoYW5kbGVzIHdhaXRpbmcgZm9yIEVPRiBpbgotICAgICAgICAgICAqIGJsb2NraW5nIHdheS4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaCBzY3AgY2hhbm5lbDogJXNcbiIsCi0gICAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX0NIQU5ORUxfRlJFRToKLSAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7Ci0gICAgICAgIHNzaF9zY3BfZnJlZShzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICAgIHNzaGMtPnNjcF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU0NQIERPTkUgcGhhc2UgY29tcGxldGVcbiIpKTsKLQotICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMCk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLQotICAgIGNhc2UgU1NIX1NFU1NJT05fRElTQ09OTkVDVDoKLSAgICAgIC8qIGR1cmluZyB3ZWlyZCB0aW1lcyB3aGVuIHdlJ3ZlIGJlZW4gcHJlbWF0dXJlbHkgYWJvcnRlZCwgdGhlIGNoYW5uZWwKLSAgICAgICAgIGlzIHN0aWxsIGFsaXZlIHdoZW4gd2UgcmVhY2ggdGhpcyBzdGF0ZSBhbmQgd2UgTVVTVCBraWxsIHRoZSBjaGFubmVsCi0gICAgICAgICBwcm9wZXJseSBmaXJzdCAqLwotICAgICAgaWYoc3NoYy0+c2NwX3Nlc3Npb24pIHsKLSAgICAgICAgc3NoX3NjcF9mcmVlKHNzaGMtPnNjcF9zZXNzaW9uKTsKLSAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPSBOVUxMOwotICAgICAgfQotCi0gICAgICBzc2hfZGlzY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7Ci0KLSAgICAgIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHNzaGMtPmhvbWVkaXIpOwotICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6Ci0gICAgICBpZihzc2hjLT5zc2hfc2Vzc2lvbikgewotICAgICAgICBzc2hfZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIHNzaGMtPnNzaF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgLyogd29yc3QtY2FzZSBzY2VuYXJpbyBjbGVhbnVwICovCi0KLSAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9zZXNzaW9uID09IE5VTEwpOwotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2NwX3Nlc3Npb24gPT0gTlVMTCk7Ci0KLSAgICAgIGlmKHNzaGMtPnJlYWRkaXJfdG1wKSB7Ci0gICAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHNzaGMtPnJlYWRkaXJfdG1wKTsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBpZihzc2hjLT5xdW90ZV9hdHRycykKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cXVvdGVfYXR0cnMpOwotCi0gICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2F0dHJzKTsKLQotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOwotCi0gICAgICBpZihzc2hjLT5wcml2a2V5KQotICAgICAgICBzc2hfa2V5X2ZyZWUoc3NoYy0+cHJpdmtleSk7Ci0gICAgICBpZihzc2hjLT5wdWJrZXkpCi0gICAgICAgIHNzaF9rZXlfZnJlZShzc2hjLT5wdWJrZXkpOwotCi0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0gICAgICBTU0hfU1RSSU5HX0ZSRUVfQ0hBUihzc2hjLT5ob21lZGlyKTsKLQotICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLwotICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKLQotICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKLQotICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7Ci0gICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7ICAgLyogY3VycmVudCAqLwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9RVUlUOgotICAgICAgLyogZmFsbHRocm91Z2gsIGp1c3Qgc3RvcCEgKi8KLSAgICBkZWZhdWx0OgotICAgICAgLyogaW50ZXJuYWwgZXJyb3IgKi8KLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgfQotICB9IHdoaWxlKCFyYyAmJiAoc3NoYy0+c3RhdGUgIT0gU1NIX1NUT1ApKTsKLQotCi0gIGlmKHJjID09IFNTSF9BR0FJTikgewotICAgIC8qIHdlIHdvdWxkIGJsb2NrLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgcmVhZHkgKGluIHRoZQotICAgICAgIHJpZ2h0IGRpcmVjdGlvbiB0b28pISAqLwotICAgICpibG9jayA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0KLS8qIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykgdG8gd2FpdCBmb3IgYW5kCi0gICBmb3Igd2hhdCBhY3Rpb25zIGluIHRoZSBET19ET05FLCBQRVJGT1JNIGFuZCBXQUlUUEVSRk9STSBzdGF0ZXMgKi8KLXN0YXRpYyBpbnQgbXlzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssICAvKiBwb2ludHMgdG8gbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQotewotICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKLSAgKHZvaWQpIG51bXNvY2tzOwotCi0gIHNvY2tbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9SRUNWKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9TRU5EKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7Ci0KLSAgcmV0dXJuIGJpdG1hcDsKLX0KLQotLyogR2VuZXJpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpCi0gICB0byB3YWl0IGZvciBhbmQgZm9yIHdoYXQgYWN0aW9ucyBkdXJpbmcgdGhlIERPSU5HIGFuZCBQUk9UT0NPTk5FQ1Qgc3RhdGVzKi8KLXN0YXRpYyBpbnQgbXlzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgIC8qIHBvaW50cyB0byBudW1zb2NrcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0gIC8qIGlmIHdlIGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpIGZ1bmN0aW9uIGV2ZW4KLSAgICAgZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KLSAgcmV0dXJuIG15c3NoX3BlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrLCBudW1zb2Nrcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG15c3NoX2Jsb2NrMndhaXRmb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGJsb2NrKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLQotICAvKiBJZiBpdCBkaWRuJ3QgYmxvY2ssIG9yIG5vdGhpbmcgd2FzIHJldHVybmVkIGJ5IHNzaF9nZXRfcG9sbF9mbGFncwotICAgKiBoYXZlIHRoZSBvcmlnaW5hbCBzZXQgKi8KLSAgY29ubi0+d2FpdGZvciA9IHNzaGMtPm9yaWdfd2FpdGZvcjsKLQotICBpZihibG9jaykgewotICAgIGludCBkaXIgPSBzc2hfZ2V0X3BvbGxfZmxhZ3Moc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgIGlmKGRpciAmIFNTSF9SRUFEX1BFTkRJTkcpIHsKLSAgICAgIC8qIHRyYW5zbGF0ZSB0aGUgbGlic3NoIGRlZmluZSBiaXRzIGludG8gb3VyIG93biBiaXQgZGVmaW5lcyAqLwotICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKLSAgICB9Ci0gICAgZWxzZSBpZihkaXIgJiBTU0hfV1JJVEVfUEVORElORykgewotICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKLSAgICB9Ci0gIH0KLX0KLQotLyogY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgZG9uZSBmcm9tIG11bHRpLmMgKi8KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIGJvb2wgYmxvY2s7ICAgIC8qIHdlIHN0b3JlIHRoZSBzdGF0dXMgYW5kIHVzZSB0aGF0IHRvIHByb3ZpZGUgYSBzc2hfZ2V0c29jaygpCi0gICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uICovCi0KLSAgcmVzdWx0ID0gbXlzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOwotICAqZG9uZSA9IChzc2hjLT5zdGF0ZSA9PSBTU0hfU1RPUCkgPyBUUlVFIDogRkFMU0U7Ci0gIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgYmxvY2spOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRpc2Nvbm5lY3QpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7Ci0gICAgYm9vbCBibG9jazsKLSAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOwotICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotCi0gICAgcmVzdWx0ID0gbXlzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIGJyZWFrOwotCi0gICAgaWYoIWRpc2Nvbm5lY3QpIHsKLSAgICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKLSAgICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7Ci0KLSAgICAgIHJlc3VsdCA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBub3cpOwotICAgICAgaWYocmVzdWx0KQotICAgICAgICBicmVhazsKLQotICAgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgRkFMU0UpOwotICAgICAgaWYobGVmdCA8IDApIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZighcmVzdWx0ICYmIGJsb2NrKSB7Ci0gICAgICBjdXJsX3NvY2tldF90IGZkX3JlYWQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCi0gICAgICAodm9pZCkgQ3VybF9zb2NrZXRfY2hlY2soZmRfcmVhZCwgQ1VSTF9TT0NLRVRfQkFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgbGVmdCA+IDEwMDAgPyAxMDAwIDogbGVmdCk7Ci0gICAgfQotCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogU1NIIHNldHVwIGNvbm5lY3Rpb24KLSAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQotewotICBzdHJ1Y3QgU1NIUFJPVE8gKnNzaDsKLQotICBjb25uLT5kYXRhLT5yZXEucHJvdG9wID0gc3NoID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgU1NIUFJPVE8pKTsKLSAgaWYoIXNzaCkKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyBDdXJsX3JlY3Ygc2NwX3JlY3YsIHNmdHBfcmVjdjsKLXN0YXRpYyBDdXJsX3NlbmQgc2NwX3NlbmQsIHNmdHBfc2VuZDsKLQotLyoKLSAqIEN1cmxfc3NoX2Nvbm5lY3QoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIHRvIGFsbG93IHVzIHRvCi0gKiBkbyBwcm90b2NvbC1zcGVjaWZpYyBhY3Rpb25zIGF0IGNvbm5lY3QtdGltZS4KLSAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaDsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgLyogaW5pdGlhbGl6ZSBwZXItaGFuZGxlIGRhdGEgaWYgbm90IGFscmVhZHkgKi8KLSAgaWYoIWRhdGEtPnJlcS5wcm90b3ApCi0gICAgbXlzc2hfc2V0dXBfY29ubmVjdGlvbihjb25uKTsKLQotICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0Ci0gICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KLSAgY29ubmtlZXAoY29ubiwgIlNTSCBkZWZhdWx0Iik7Ci0KLSAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKSB7Ci0gICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzY3BfcmVjdjsKLSAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNjcF9zZW5kOwotICB9Ci0gIGVsc2UgewotICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2Z0cF9yZWN2OwotICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2Z0cF9zZW5kOwotICB9Ci0KLSAgc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgc3NoLT5zc2hfc2Vzc2lvbiA9IHNzaF9uZXcoKTsKLSAgaWYoc3NoLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKSB7Ci0gICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGlzaW5nIHNzaCBzZXNzaW9uIik7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICB9Ci0KLSAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0ZELCAmc29jayk7Ci0KLSAgaWYoY29ubi0+dXNlcikgewotICAgIGluZm9mKGRhdGEsICJVc2VyOiAlc1xuIiwgY29ubi0+dXNlcik7Ci0gICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1VTRVIsIGNvbm4tPnVzZXIpOwotICB9Ci0KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7Ci0gICAgaW5mb2YoZGF0YSwgIktub3duIGhvc3RzOiAlc1xuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgICBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfS05PV05IT1NUUywKLSAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgfQotCi0gIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCBjb25uLT5ob3N0Lm5hbWUpOwotICBpZihjb25uLT5yZW1vdGVfcG9ydCkKLSAgICBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfUE9SVCwKLSAgICAgICAgICAgICAgICAgICAgJmNvbm4tPnJlbW90ZV9wb3J0KTsKLQotICBpZihkYXRhLT5zZXQuc3NoX2NvbXByZXNzaW9uKSB7Ci0gICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0NPTVBSRVNTSU9OLAotICAgICAgICAgICAgICAgICAgICAiemxpYix6bGliQG9wZW5zc2guY29tLG5vbmUiKTsKLSAgfQotCi0gIHNzaC0+cHJpdmtleSA9IE5VTEw7Ci0gIHNzaC0+cHVia2V5ID0gTlVMTDsKLQotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0pIHsKLSAgICBpbnQgcmMgPSBzc2hfcGtpX2ltcG9ydF9wdWJrZXlfZmlsZShkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaC0+cHVia2V5KTsKLSAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgbG9hZCBwdWJsaWMga2V5IGZpbGUiKTsKLSAgICAgIC8qIGlnbm9yZSAqLwotICAgIH0KLSAgfQotCi0gIC8qIHdlIGRvIG5vdCB2ZXJpZnkgaGVyZSwgd2UgZG8gaXQgYXQgdGhlIHN0YXRlIG1hY2hpbmUsCi0gICAqIGFmdGVyIGNvbm5lY3Rpb24gKi8KLQotICBzdGF0ZShjb25uLCBTU0hfSU5JVCk7Ci0KLSAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvbmUpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KLXN0YXRpYyBDVVJMY29kZSBzY3BfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb3BoYXNlX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLQotICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBzY3BfcGVyZm9ybSgpCi0gKgotICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTQ1AuIEdldCBhIGZpbGUgYWNjb3JkaW5nIHRvCi0gKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgotICovCi0KLXN0YXRpYwotQ1VSTGNvZGUgc2NwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLCBib29sICpkb3BoYXNlX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7Ci0KLSAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAgICAgICAgLyogbm90IGRvbmUgeWV0ICovCi0KLSAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCi0gIHN0YXRlKGNvbm4sIFNTSF9TQ1BfVFJBTlNfSU5JVCk7Ci0KLSAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0KLSAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07Ci0KLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9kb19pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBjb25uZWN0ZWQgPSAwOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgKmRvbmUgPSBGQUxTRTsgICAgICAgICAgICAgICAgLyogZGVmYXVsdCB0byBmYWxzZSAqLwotCi0gIGRhdGEtPnJlcS5zaXplID0gLTE7ICAgICAgICAgIC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLwotCi0gIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PSzsgIC8qIHJlc2V0IGVycm9yIGNvZGUgKi8KLSAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAqLwotCi0gIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7Ci0gIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKLSAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAtMSk7Ci0gIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0KLSAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQotICAgIHJlc3VsdCA9IHNjcF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsIGRvbmUpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gc2Z0cF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsIGRvbmUpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgotICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKLSAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KLXN0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaCA9ICZjb25uLT5wcm90by5zc2hjOwotICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOwotCi0gIGlmKHNzaC0+c3NoX3Nlc3Npb24pIHsKLSAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCi0KLSAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKLQotICAgIHJlc3VsdCA9IG15c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGdlbmVyaWMgZG9uZSBmdW5jdGlvbiBmb3IgYm90aCBTQ1AgYW5kIFNGVFAgY2FsbGVkIGZyb20gdGhlaXIgc3BlY2lmaWMKLSAgIGRvbmUgZnVuY3Rpb25zICovCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cykKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBTU0hQUk9UTyAqcHJvdG9wID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKLQotICBpZighc3RhdHVzKSB7Ci0gICAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCi0gICAgcmVzdWx0ID0gbXlzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIEZBTFNFKTsKLSAgfQotICBlbHNlCi0gICAgcmVzdWx0ID0gc3RhdHVzOwotCi0gIGlmKHByb3RvcCkKLSAgICBDdXJsX3NhZmVmcmVlKHByb3RvcC0+cGF0aCk7Ci0gIGlmKEN1cmxfcGdyc0RvbmUoY29ubikpCi0gICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7Ci0KLSAgY29ubi0+ZGF0YS0+cmVxLmtlZXBvbiA9IDA7ICAgLyogY2xlYXIgYWxsIGJpdHMgKi8KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCi17Ci0gICh2b2lkKSBwcmVtYXR1cmU7ICAgICAgICAgICAgIC8qIG5vdCB1c2VkICovCi0KLSAgaWYoIXN0YXR1cykKLSAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPTkUpOwotCi0gIHJldHVybiBteXNzaF9kb25lKGNvbm4sIHN0YXR1cyk7Ci0KLX0KLQotc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBpbnQgcmM7Ci0gICh2b2lkKSBzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCi0gICh2b2lkKSBlcnI7Ci0KLSAgcmMgPSBzc2hfc2NwX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc2NwX3Nlc3Npb24sIG1lbSwgbGVuKTsKLQotI2lmIDAKLSAgLyogVGhlIGZvbGxvd2luZyBjb2RlIGlzIG1pc2xlYWRpbmcsIG1vc3RseSBhZGRlZCBhcyB3aXNoZnVsIHRoaW5raW5nCi0gICAqIHRoYXQgbGlic3NoIGF0IHNvbWUgcG9pbnQgd2lsbCBpbXBsZW1lbnQgbm9uLWJsb2NraW5nIHNzaF9zY3Bfd3JpdGUvcmVhZC4KLSAgICogQ3VycmVudGx5IHJjIGNhbiBvbmx5IGJlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIFNTSF9FUlJPUi4gKi8KLSAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCAocmMgPT0gU1NIX0FHQUlOKSA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgaWYocmMgPT0gU1NIX0FHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIHJldHVybiAwOwotICB9Ci0gIGVsc2UKLSNlbmRpZgotICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAqZXJyID0gQ1VSTEVfU1NIOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNjcF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKLXsKLSAgc3NpemVfdCBucmVhZDsKLSAgKHZvaWQpIGVycjsKLSAgKHZvaWQpIHNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KLQotICAvKiBsaWJzc2ggcmV0dXJucyBpbnQgKi8KLSAgbnJlYWQgPSBzc2hfc2NwX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zY3Bfc2Vzc2lvbiwgbWVtLCBsZW4pOwotCi0jaWYgMAotICAvKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgbWlzbGVhZGluZywgbW9zdGx5IGFkZGVkIGFzIHdpc2hmdWwgdGhpbmtpbmcKLSAgICogdGhhdCBsaWJzc2ggYXQgc29tZSBwb2ludCB3aWxsIGltcGxlbWVudCBub24tYmxvY2tpbmcgc3NoX3NjcF93cml0ZS9yZWFkLgotICAgKiBDdXJyZW50bHkgcmMgY2FuIG9ubHkgYmUgU1NIX09LIG9yIFNTSF9FUlJPUi4gKi8KLQotICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBTU0hfQUdBSU4pID8gVFJVRSA6IEZBTFNFKTsKLSAgaWYobnJlYWQgPT0gU1NIX0FHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIG5yZWFkID0gLTE7Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiBucmVhZDsKLX0KLQotLyoKLSAqID09PT09PT09PT09PT09PSBTRlRQID09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBzZnRwX3BlcmZvcm0oKQotICoKLSAqIFRoaXMgaXMgdGhlIGFjdHVhbCBETyBmdW5jdGlvbiBmb3IgU0ZUUC4gR2V0IGEgZmlsZS9kaXJlY3RvcnkgYWNjb3JkaW5nIHRvCi0gKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgotICovCi0KLXN0YXRpYwotQ1VSTGNvZGUgc2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIHN0YXJ0c1xuIikpOwotCi0gICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgLyogbm90IGRvbmUgeWV0ICovCi0KLSAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCi0gIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX0lOSVQpOwotCi0gIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLwotICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLwotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KLSAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCi0gICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOwotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1Qgc3RhcnRzIG5vd1xuIikpOwotCi0gIGlmKGNvbm4tPnByb3RvLnNzaGMuc3NoX3Nlc3Npb24pIHsKLSAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCi0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfU0hVVERPV04pOwotICAgIHJlc3VsdCA9IG15c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1QgaXMgZG9uZVxuIikpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLX0KLQotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgaWYoIXN0YXR1cykgewotICAgIC8qIFBvc3QgcXVvdGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBTRlRQX0NMT1NFIHN0YXRlIHRvIGF2b2lkCi0gICAgICAgZXJyb3JzIHRoYXQgY291bGQgaGFwcGVuIGR1ZSB0byBvcGVuIGZpbGUgaGFuZGxlcyBkdXJpbmcgUE9TVFFVT1RFCi0gICAgICAgb3BlcmF0aW9uICovCi0gICAgaWYoIXByZW1hdHVyZSAmJiBjb25uLT5kYXRhLT5zZXQucG9zdHF1b3RlICYmICFjb25uLT5iaXRzLnJldHJ5KQotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ7Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICB9Ci0gIHJldHVybiBteXNzaF9kb25lKGNvbm4sIHN0YXR1cyk7Ci19Ci0KLS8qIHJldHVybiBudW1iZXIgb2Ygc2VudCBieXRlcyAqLwotc3RhdGljIHNzaXplX3Qgc2Z0cF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCi17Ci0gIHNzaXplX3QgbndyaXRlOwotICAodm9pZClzb2NraW5kZXg7Ci0KLSAgbndyaXRlID0gc2Z0cF93cml0ZShjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZSwgbWVtLCBsZW4pOwotCi0gIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgRkFMU0UpOwotCi0jaWYgMCAvKiBub3QgcmV0dXJuZWQgYnkgbGlic3NoIG9uIHdyaXRlICovCi0gIGlmKG53cml0ZSA9PSBTU0hfQUdBSU4pIHsKLSAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgbndyaXRlID0gMDsKLSAgfQotICBlbHNlCi0jZW5kaWYKLSAgaWYobndyaXRlIDwgMCkgewotICAgICplcnIgPSBDVVJMRV9TU0g7Ci0gICAgbndyaXRlID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbndyaXRlOwotfQotCi0vKgotICogUmV0dXJuIG51bWJlciBvZiByZWNlaXZlZCAoZGVjcnlwdGVkKSBieXRlcwotICogb3IgPDAgb24gZXJyb3IKLSAqLwotc3RhdGljIHNzaXplX3Qgc2Z0cF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCi17Ci0gIHNzaXplX3QgbnJlYWQ7Ci0gICh2b2lkKXNvY2tpbmRleDsKLQotICBERUJVR0FTU0VSVChsZW4gPCBDVVJMX01BWF9SRUFEX1NJWkUpOwotCi0gIHN3aXRjaChjb25uLT5wcm90by5zc2hjLnNmdHBfcmVjdl9zdGF0ZSkgewotICAgIGNhc2UgMDoKLSAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlX2luZGV4ID0KLSAgICAgICAgICAgIHNmdHBfYXN5bmNfcmVhZF9iZWdpbihjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpbGVuKTsKLSAgICAgIGlmKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlX2luZGV4IDwgMCkgewotICAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotCi0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgMToKLSAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9yZWN2X3N0YXRlID0gMTsKLQotICAgICAgbnJlYWQgPSBzZnRwX2FzeW5jX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0sICh1aW50MzJfdClsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZV9pbmRleCk7Ci0KLSAgICAgIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG5yZWFkID09IFNTSF9BR0FJTik/VFJVRTpGQUxTRSk7Ci0KLSAgICAgIGlmKG5yZWFkID09IFNTSF9BR0FJTikgewotICAgICAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobnJlYWQgPCAwKSB7Ci0gICAgICAgICplcnIgPSBDVVJMRV9SRUNWX0VSUk9SOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0KLSAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9yZWN2X3N0YXRlID0gMDsKLSAgICAgIHJldHVybiBucmVhZDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiB3ZSBuZXZlciByZWFjaCBoZXJlICovCi0gICAgICByZXR1cm4gLTE7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIGNvbnN0IGNoYXIgKmNwOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IFNTSFBST1RPICpwcm90b3AgPSBkYXRhLT5yZXEucHJvdG9wOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotCi0gIC8qCi0gICAqIFN1cHBvcnQgc29tZSBvZiB0aGUgIkZUUCIgY29tbWFuZHMKLSAgICovCi0gIGNoYXIgKmNtZCA9IHNzaGMtPnF1b3RlX2l0ZW0tPmRhdGE7Ci0gIHNzaGMtPmFjY2VwdGZhaWwgPSBGQUxTRTsKLQotICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCi0gICAgIGNhbiwgdGhlIGNvbW1hbmQgd2lsbCBiZSBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dCBpdCBjYXVzaW5nIGFueQotICAgICBhYm9ydHMgb3IgY2FuY2VscyBldGMuIEl0IHdpbGwgY2F1c2UgbGliY3VybCB0byBhY3QgYXMgaWYgdGhlIGNvbW1hbmQKLSAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLwotCi0gIGlmKGNtZFswXSA9PSAnKicpIHsKLSAgICBjbWQrKzsKLSAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKLSAgfQotCi0gIGlmKHN0cmNhc2Vjb21wYXJlKCJwd2QiLCBjbWQpKSB7Ci0gICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLwotICAgIGNoYXIgKnRtcCA9IGFwcmludGYoIjI1NyBcIiVzXCIgaXMgY3VycmVudCBkaXJlY3RvcnkuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9wLT5wYXRoKTsKLSAgICBpZighdG1wKSB7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX09VVCwgKGNoYXIgKikgIlBXRFxuIiwgNCk7Ci0gICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgdG1wLCBzdHJsZW4odG1wKSk7Ci0gICAgfQotICAgIC8qIHRoaXMgc2VuZHMgYW4gRlRQLWxpa2UgImhlYWRlciIgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBzbyB0aGF0IHRoZQotICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5IGNhbiBiZSByZWFkIHZlcnkgc2ltaWxhciB0byBob3cgaXQgaXMgcmVhZCB3aGVuCi0gICAgICAgdXNpbmcgb3JkaW5hcnkgRlRQLiAqLwotICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7Ci0gICAgZnJlZSh0bXApOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyoKLSAgICogdGhlIGFyZ3VtZW50cyBmb2xsb3dpbmcgdGhlIGNvbW1hbmQgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUKLSAgICogY29tbWFuZCB3aXRoIGEgc3BhY2Ugc28gd2UgY2FuIGNoZWNrIGZvciBpdCB1bmNvbmRpdGlvbmFsbHkKLSAgICovCi0gIGNwID0gc3RyY2hyKGNtZCwgJyAnKTsKLSAgaWYoY3AgPT0gTlVMTCkgewotICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gU0ZUUCBjb21tYW5kLiBTdXBwbHkgcGFyYW1ldGVyKHMpISIpOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qCi0gICAqIGFsc28sIGV2ZXJ5IGNvbW1hbmQgdGFrZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IHNvIHdlIGdldCB0aGF0Ci0gICAqIGZpcnN0IGFyZ3VtZW50IHJpZ2h0IG5vdwotICAgKi8KLSAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDEsIHNzaGMtPmhvbWVkaXIpOwotICBpZihyZXN1bHQpIHsKLSAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgZWxzZQotICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogQmFkIGZpcnN0IHBhcmFtZXRlciIpOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKgotICAgKiBTRlRQIGlzIGEgYmluYXJ5IHByb3RvY29sLCBzbyB3ZSBkb24ndCBzZW5kIHRleHQgY29tbWFuZHMKLSAgICogdG8gdGhlIHNlcnZlci4gSW5zdGVhZCwgd2Ugc2NhbiBmb3IgY29tbWFuZHMgdXNlZCBieQotICAgKiBPcGVuU1NIJ3Mgc2Z0cCBwcm9ncmFtIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBsaWJzc2gKLSAgICogZnVuY3Rpb25zLgotICAgKi8KLSAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8Ci0gICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAotICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikpIHsKLSAgICAvKiBhdHRyaWJ1dGUgY2hhbmdlICovCi0KLSAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBjb250YWlucyB0aGUgbW9kZSB0byBzZXQgKi8KLSAgICAvKiBnZXQgdGhlIGRlc3RpbmF0aW9uICovCi0gICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gY2hncnAvY2htb2QvY2hvd246ICIKLSAgICAgICAgICAgICAgIkJhZCBzZWNvbmQgcGFyYW1ldGVyIik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHNzaGMtPnF1b3RlX2F0dHJzID0gTlVMTDsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TVEFUKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImxuICIsIDMpIHx8Ci0gICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJzeW1saW5rICIsIDgpKSB7Ci0gICAgLyogc3ltYm9saWMgbGlua2luZyAqLwotICAgIC8qIHNzaGMtPnF1b3RlX3BhdGgxIGlzIHRoZSBzb3VyY2UgKi8KLSAgICAvKiBnZXQgdGhlIGRlc3RpbmF0aW9uICovCi0gICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gbG4vc3ltbGluazogQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1lNTElOSyk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgIm1rZGlyICIsIDYpKSB7Ci0gICAgLyogY3JlYXRlIGRpciAqLwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX01LRElSKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicmVuYW1lICIsIDcpKSB7Ci0gICAgLyogcmVuYW1lIGZpbGUgKi8KLSAgICAvKiBmaXJzdCBwYXJhbSBpcyB0aGUgc291cmNlIHBhdGggKi8KLSAgICAvKiBzZWNvbmQgcGFyYW0gaXMgdGhlIGRlc3QuIHBhdGggKi8KLSAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7Ci0gICAgaWYocmVzdWx0KSB7Ci0gICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiByZW5hbWU6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtZGlyICIsIDYpKSB7Ci0gICAgLyogZGVsZXRlIGRpciAqLwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JNRElSKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm0gIiwgMykpIHsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9VTkxJTkspOwotICAgIHJldHVybjsKLSAgfQotI2lmZGVmIEhBU19TVEFUVkZTX1NVUFBPUlQKLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAic3RhdHZmcyAiLCA4KSkgewotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlMpOwotICAgIHJldHVybjsKLSAgfQotI2VuZGlmCi0KLSAgZmFpbGYoZGF0YSwgIlVua25vd24gU0ZUUCBjb21tYW5kIik7Ci0gIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLX0KLQotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZV9zdGF0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOwotICBzc2hjLT5hY2NlcHRmYWlsID0gRkFMU0U7Ci0KLSAgLyogaWYgYSBjb21tYW5kIHN0YXJ0cyB3aXRoIGFuIGFzdGVyaXNrLCB3aGljaCBhIGxlZ2FsIFNGVFAgY29tbWFuZCBuZXZlcgotICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKLSAgICAgYWJvcnRzIG9yIGNhbmNlbHMgZXRjLiBJdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWN0IGFzIGlmIHRoZSBjb21tYW5kCi0gICAgIGlzIHN1Y2Nlc3NmdWwsIHdoYXRldmVyIHRoZSBzZXJ2ZXIgcmVwb25kcy4gKi8KLQotICBpZihjbWRbMF0gPT0gJyonKSB7Ci0gICAgY21kKys7Ci0gICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7Ci0gIH0KLQotICAvKiBXZSByZWFkIHRoZSBmaWxlIGF0dHJpYnV0ZXMsIHN0b3JlIHRoZW0gaW4gc3NoYy0+cXVvdGVfYXR0cnMKLSAgICogYW5kIG1vZGlmeSB0aGVtIGFjY29yZGluZ2x5IHRvIGNvbW1hbmQuIFRoZW4gd2Ugc3dpdGNoIHRvCi0gICAqIFFVT1RFX1NFVFNUQVQgc3RhdGUgdG8gd3JpdGUgbmV3IG9uZXMuCi0gICAqLwotCi0gIGlmKHNzaGMtPnF1b3RlX2F0dHJzKQotICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKHNzaGMtPnF1b3RlX2F0dHJzKTsKLSAgc3NoYy0+cXVvdGVfYXR0cnMgPSBzZnRwX3N0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMik7Ci0gIGlmKHNzaGMtPnF1b3RlX2F0dHJzID09IE5VTEwpIHsKLSAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBnZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVkIiwKLSAgICAgICAgICBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBOb3cgc2V0IHRoZSBuZXcgYXR0cmlidXRlcy4uLiAqLwotICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAiLCA1KSkgewotICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5naWQgPSAodWludDMyX3Qpc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgMTApOwotICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLT5naWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKLSAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaGdycCBnaWQgbm90IGEgbnVtYmVyIik7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5mbGFncyB8PSBTU0hfRklMRVhGRVJfQVRUUl9VSURHSUQ7Ci0gIH0KLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QiLCA1KSkgewotICAgIG1vZGVfdCBwZXJtczsKLSAgICBwZXJtcyA9IChtb2RlX3Qpc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgOCk7Ci0gICAgLyogcGVybWlzc2lvbnMgYXJlIG9jdGFsICovCi0gICAgaWYocGVybXMgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkpIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG1vZCBwZXJtaXNzaW9ucyBub3QgYSBudW1iZXIiKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3NoYy0+cXVvdGVfYXR0cnMtPnBlcm1pc3Npb25zID0gcGVybXM7Ci0gICAgc3NoYy0+cXVvdGVfYXR0cnMtPmZsYWdzIHw9IFNTSF9GSUxFWEZFUl9BVFRSX1BFUk1JU1NJT05TOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duIiwgNSkpIHsKLSAgICBzc2hjLT5xdW90ZV9hdHRycy0+dWlkID0gKHVpbnQzMl90KXN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDEwKTsKLSAgICBpZihzc2hjLT5xdW90ZV9hdHRycy0+dWlkID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pICYmCi0gICAgICAgICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2hvd24gdWlkIG5vdCBhIG51bWJlciIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzc2hjLT5xdW90ZV9hdHRycy0+ZmxhZ3MgfD0gU1NIX0ZJTEVYRkVSX0FUVFJfVUlER0lEOwotICB9Ci0KLSAgLyogTm93IHNlbmQgdGhlIGNvbXBsZXRlZCBzdHJ1Y3R1cmUuLi4gKi8KLSAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCk7Ci0gIHJldHVybjsKLX0KLQotCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTRV9MSUJTU0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3NoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjVjM2MuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3NoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogI2RlZmluZSBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLQotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotI2lmZGVmIFVTRV9MSUJTU0gyCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgPGxpYnNzaDIuaD4KLSNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KLQotI2lmZGVmIEhBVkVfRkNOVExfSAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9VVFNOQU1FX0gKLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVREQl9ICi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNlbmRpZgotI2lmZGVmIF9fVk1TCi0jaW5jbHVkZSA8aW4uaD4KLSNpbmNsdWRlIDxpbmV0Lmg+Ci0jZW5kaWYKLQotI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKLSN1bmRlZiBpbl9hZGRyX3QKLSNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+Ci0jaW5jbHVkZSAidXJsZGF0YS5oIgotI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAiaG9zdGlwLmgiCi0jaW5jbHVkZSAicHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJ0cmFuc2Zlci5oIgotI2luY2x1ZGUgImVzY2FwZS5oIgotI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCi0jaW5jbHVkZSAic3NoLmgiCi0jaW5jbHVkZSAidXJsLmgiCi0jaW5jbHVkZSAic3BlZWRjaGVjay5oIgotI2luY2x1ZGUgImdldGluZm8uaCIKLSNpbmNsdWRlICJzdHJkdXAuaCIKLSNpbmNsdWRlICJzdHJjYXNlLmgiCi0jaW5jbHVkZSAidnRscy92dGxzLmgiCi0jaW5jbHVkZSAiY29ubmVjdC5oIgotI2luY2x1ZGUgInN0cmVycm9yLmgiCi0jaW5jbHVkZSAiaW5ldF9udG9wLmgiCi0jaW5jbHVkZSAicGFyc2VkYXRlLmgiIC8qIGZvciB0aGUgd2VlayBkYXkgYW5kIG1vbnRoIG5hbWVzICovCi0jaW5jbHVkZSAic29ja2FkZHIuaCIgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLwotI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgotI2luY2x1ZGUgIm11bHRpaWYuaCIKLSNpbmNsdWRlICJzZWxlY3QuaCIKLSNpbmNsdWRlICJ3YXJubGVzcy5oIgotI2luY2x1ZGUgImN1cmxfcGF0aC5oIgotCi0vKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLSNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA2Ci0vKiBsaWJzc2gyX3NmdHBfc3RhdHZmcyBhbmQgZnJpZW5kcyB3ZXJlIGFkZGVkIGluIDEuMi42ICovCi0jZGVmaW5lIEhBU19TVEFUVkZTX1NVUFBPUlQgMQotI2VuZGlmCi0KLSNkZWZpbmUgc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3IocykgY3VybHhfdWx0b3NpKGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHMpKQotCi0jZGVmaW5lIHNmdHBfbGlic3NoMl9yZWFscGF0aChzLHAsdCxtKSBcCi0gICAgICAgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KChzKSwgKHApLCBjdXJseF91enRvdWkoc3RybGVuKHApKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCksIChtKSwgTElCU1NIMl9TRlRQX1JFQUxQQVRIKQotCi0KLS8qIExvY2FsIGZ1bmN0aW9uczogKi8KLXN0YXRpYyBjb25zdCBjaGFyICpzZnRwX2xpYnNzaDJfc3RyZXJyb3IoaW50IGVycik7Ci1zdGF0aWMgTElCU1NIMl9BTExPQ19GVU5DKG15X2xpYnNzaDJfbWFsbG9jKTsKLXN0YXRpYyBMSUJTU0gyX1JFQUxMT0NfRlVOQyhteV9saWJzc2gyX3JlYWxsb2MpOwotc3RhdGljIExJQlNTSDJfRlJFRV9GVU5DKG15X2xpYnNzaDJfZnJlZSk7Ci0KLXN0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLQotc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOwotc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbik7Ci0KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOwotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKLXN0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOwotc3RhdGljCi1DVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOwotCi1zdGF0aWMgaW50IHNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Ci0KLXN0YXRpYyBpbnQgc3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLQotLyoKLSAqIFNDUCBwcm90b2NvbCBoYW5kbGVyLgotICovCi0KLWNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcCA9IHsKLSAgIlNDUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KLSAgc3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCi0gIHNzaF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KLSAgc2NwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLwotICBzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KLSAgc3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCi0gIHNjcF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KLSAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCi0gIHNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCi0gIHNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCi0gIHNjcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KLSAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCi0gIENVUkxQUk9UT19TQ1AsICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgotICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCi19OwotCi0KLS8qCi0gKiBTRlRQIHByb3RvY29sIGhhbmRsZXIuCi0gKi8KLQotY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2Z0cCA9IHsKLSAgIlNGVFAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KLSAgc3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCi0gIHNzaF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KLSAgc2Z0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLwotICBzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KLSAgc3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCi0gIHNmdHBfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KLSAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCi0gIHNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCi0gIHNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCi0gIHNmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KLSAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCi0gIENVUkxQUk9UT19TRlRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgotICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCi19OwotCi1zdGF0aWMgdm9pZAota2JkX2NhbGxiYWNrKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lX2xlbiwgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb24sCi0gICAgICAgICAgICAgaW50IGluc3RydWN0aW9uX2xlbiwgaW50IG51bV9wcm9tcHRzLAotICAgICAgICAgICAgIGNvbnN0IExJQlNTSDJfVVNFUkFVVEhfS0JESU5UX1BST01QVCAqcHJvbXB0cywKLSAgICAgICAgICAgICBMSUJTU0gyX1VTRVJBVVRIX0tCRElOVF9SRVNQT05TRSAqcmVzcG9uc2VzLAotICAgICAgICAgICAgIHZvaWQgKiphYnN0cmFjdCkKLXsKLSAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gKHN0cnVjdCBjb25uZWN0ZGF0YSAqKSphYnN0cmFjdDsKLQotI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRwotICBmcHJpbnRmKHN0ZGVyciwgIm5hbWU9JXNcbiIsIG5hbWUpOwotICBmcHJpbnRmKHN0ZGVyciwgIm5hbWVfbGVuPSVkXG4iLCBuYW1lX2xlbik7Ci0gIGZwcmludGYoc3RkZXJyLCAiaW5zdHJ1Y3Rpb249JXNcbiIsIGluc3RydWN0aW9uKTsKLSAgZnByaW50ZihzdGRlcnIsICJpbnN0cnVjdGlvbl9sZW49JWRcbiIsIGluc3RydWN0aW9uX2xlbik7Ci0gIGZwcmludGYoc3RkZXJyLCAibnVtX3Byb21wdHM9JWRcbiIsIG51bV9wcm9tcHRzKTsKLSNlbHNlCi0gICh2b2lkKW5hbWU7Ci0gICh2b2lkKW5hbWVfbGVuOwotICAodm9pZClpbnN0cnVjdGlvbjsKLSAgKHZvaWQpaW5zdHJ1Y3Rpb25fbGVuOwotI2VuZGlmICAvKiBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLSAgaWYobnVtX3Byb21wdHMgPT0gMSkgewotICAgIHJlc3BvbnNlc1swXS50ZXh0ID0gc3RyZHVwKGNvbm4tPnBhc3N3ZCk7Ci0gICAgcmVzcG9uc2VzWzBdLmxlbmd0aCA9IGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+cGFzc3dkKSk7Ci0gIH0KLSAgKHZvaWQpcHJvbXB0czsKLSAgKHZvaWQpYWJzdHJhY3Q7Ci19IC8qIGtiZF9jYWxsYmFjayAqLwotCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGludCBlcnIpCi17Ci0gIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlIExJQlNTSDJfRlhfT0s6Ci0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9GSUxFOgotICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX1BBVEg6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgotICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgotICAgIGNhc2UgTElCU1NIMl9GWF9MT0NLX0NPTkZsSUNUOgotICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NQQUNFX09OX0ZJTEVTWVNURU06Ci0gICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgotICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9ESVNLX0ZVTEw7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKLSAgICAgIHJldHVybiBDVVJMRV9RVU9URV9FUlJPUjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBDVVJMRV9TU0g7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKLXsKLSAgc3dpdGNoKGVycikgewotICAgIC8qIE9yZGVyZWQgYnkgb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiBsaWJzc2gyLmggKi8KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfTk9ORToKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLQotICAgIC8qIFRoaXMgaXMgdGhlIGVycm9yIHJldHVybmVkIGJ5IGxpYnNzaDJfc2NwX3JlY3YyCi0gICAgICogb24gdW5rbm93biBmaWxlICovCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NDUF9QUk9UT0NPTDoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX05PTkU6Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX0FMTE9DOgotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX1NFTkQ6Ci0gICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKLQotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9IT1NUS0VZX0lOSVQ6Ci0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX0hPU1RLRVlfU0lHTjoKLSAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOUkVDT0dOSVpFRDoKLSAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOVkVSSUZJRUQ6Ci0gICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1BBU1NXT1JEX0VYUElSRUQ6Ci0gICAgICByZXR1cm4gQ1VSTEVfTE9HSU5fREVOSUVEOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NPQ0tFVF9USU1FT1VUOgotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9USU1FT1VUOgotICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLQotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9FQUdBSU46Ci0gICAgICByZXR1cm4gQ1VSTEVfQUdBSU47Ci0gIH0KLQotICByZXR1cm4gQ1VSTEVfU1NIOwotfQotCi1zdGF0aWMgTElCU1NIMl9BTExPQ19GVU5DKG15X2xpYnNzaDJfbWFsbG9jKQotewotICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCi0gIHJldHVybiBtYWxsb2MoY291bnQpOwotfQotCi1zdGF0aWMgTElCU1NIMl9SRUFMTE9DX0ZVTkMobXlfbGlic3NoMl9yZWFsbG9jKQotewotICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCi0gIHJldHVybiByZWFsbG9jKHB0ciwgY291bnQpOwotfQotCi1zdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKQotewotICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCi0gIGlmKHB0cikgLyogc3NoMiBhZ2VudCBzb21ldGltZXMgY2FsbCBmcmVlIHdpdGggbnVsbCBwdHIgKi8KLSAgICBmcmVlKHB0cik7Ci19Ci0KLS8qCi0gKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKLSAqLwotLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KLXN0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKLSAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCi0gIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKLSAgICAiU1NIX1NUT1AiLAotICAgICJTU0hfSU5JVCIsCi0gICAgIlNTSF9TX1NUQVJUVVAiLAotICAgICJTU0hfSE9TVEtFWSIsCi0gICAgIlNTSF9BVVRITElTVCIsCi0gICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCi0gICAgIlNTSF9BVVRIX1BLRVkiLAotICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAotICAgICJTU0hfQVVUSF9QQVNTIiwKLSAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCi0gICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAotICAgICJTU0hfQVVUSF9BR0VOVCIsCi0gICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCi0gICAgIlNTSF9BVVRIX0hPU1QiLAotICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCi0gICAgIlNTSF9BVVRIX0tFWSIsCi0gICAgIlNTSF9BVVRIX0dTU0FQSSIsCi0gICAgIlNTSF9BVVRIX0RPTkUiLAotICAgICJTU0hfU0ZUUF9JTklUIiwKLSAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAotICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKLSAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAotICAgICJTU0hfU0ZUUF9RVU9URSIsCi0gICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAotICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAotICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCi0gICAgIlNTSF9TRlRQX0dFVElORk8iLAotICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCi0gICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAotICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCi0gICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCi0gICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUiIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKLSAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCi0gICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAotICAgICJTU0hfU0ZUUF9DTE9TRSIsCi0gICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKLSAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKLSAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCi0gICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCi0gICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAotICAgICJTU0hfU0NQX0RPTkUiLAotICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKLSAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCi0gICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCi0gICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKLSAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCi0gICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAotICAgICJRVUlUIgotICB9OwotCi0gIC8qIGEgcHJlY2F1dGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpc3RzIGFyZSBpbiBzeW5jICovCi0gIERFQlVHQVNTRVJUKHNpemVvZihuYW1lcykvc2l6ZW9mKG5hbWVzWzBdKSA9PSBTU0hfTEFTVCk7Ci0KLSAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKLSAgICBpbmZvZihjb25uLT5kYXRhLCAiU0ZUUCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlc1xuIiwKLSAgICAgICAgICAodm9pZCAqKXNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdKTsKLSAgfQotI2VuZGlmCi0KLSAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKLX0KLQotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLXN0YXRpYyBpbnQgc3Noa2V5Y2FsbGJhY2soc3RydWN0IEN1cmxfZWFzeSAqZWFzeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfa2hrZXkgKmtub3dua2V5LCAvKiBrbm93biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3VybF9raGtleSAqZm91bmRrZXksIC8qIGZvdW5kICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gY3VybF9raG1hdGNoIG1hdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRwKQotewotICAodm9pZCllYXN5OwotICAodm9pZClrbm93bmtleTsKLSAgKHZvaWQpZm91bmRrZXk7Ci0gICh2b2lkKWNsaWVudHA7Ci0KLSAgLyogd2Ugb25seSBhbGxvdyBwZXJmZWN0IG1hdGNoZXMsIGFuZCB3ZSByZWplY3QgZXZlcnl0aGluZyBlbHNlICovCi0gIHJldHVybiAobWF0Y2ggIT0gQ1VSTEtITUFUQ0hfT0spP0NVUkxLSFNUQVRfUkVKRUNUOkNVUkxLSFNUQVRfRklORTsKLX0KLSNlbmRpZgotCi0vKgotICogRWFybGllciBsaWJzc2gyIHZlcnNpb25zIGRpZG4ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHNlZWsgdG8gNjRiaXQgcG9zaXRpb25zCi0gKiB3aXRoIDMyYml0IHNpemVfdC4KLSAqLwotI2lmZGVmIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NAotI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2VlazY0KHgsIChsaWJzc2gyX3VpbnQ2NF90KXkpCi0jZWxzZQotI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2Vlayh4LCAoc2l6ZV90KXkpCi0jZW5kaWYKLQotLyoKLSAqIEVhcmxpZXIgbGlic3NoMiB2ZXJzaW9ucyBkaWRuJ3QgZG8gU0NQIHByb3Blcmx5IGJleW9uZCAzMmJpdCBzaXplcyBvbiAzMmJpdAotICogYXJjaGl0ZWN0dXJlcyBzbyB3ZSBjaGVjayBvZiB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uIGlzIHByZXNlbnQuCi0gKi8KLSNpZm5kZWYgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQKLSNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZF9leChhLCBiLCAoaW50KShjKSwgKHNpemVfdClkLCAwLCAwKQotI2Vsc2UKLSNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZDY0KGEsIGIsIChpbnQpKGMpLCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaWJzc2gyX3VpbnQ2NF90KWQsIDAsIDApCi0jZW5kaWYKLQotLyoKLSAqIGxpYnNzaDIgMS4yLjggZml4ZWQgdGhlIHByb2JsZW0gd2l0aCAzMmJpdCBpbnRzIHVzZWQgZm9yIHNvY2tldHMgb24gd2luNjQuCi0gKi8KLSNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9IQU5EU0hBS0UKLSNkZWZpbmUgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAoeCx5KSBsaWJzc2gyX3Nlc3Npb25faGFuZHNoYWtlKHgseSkKLSNlbmRpZgotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2tub3duaG9zdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7Ci0gICAgLyogd2UncmUgYXNrZWQgdG8gdmVyaWZ5IHRoZSBob3N0IGFnYWluc3QgYSBmaWxlICovCi0gICAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gICAgaW50IHJjOwotICAgIGludCBrZXl0eXBlOwotICAgIHNpemVfdCBrZXlsZW47Ci0gICAgY29uc3QgY2hhciAqcmVtb3Rla2V5ID0gbGlic3NoMl9zZXNzaW9uX2hvc3RrZXkoc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWxlbiwgJmtleXR5cGUpOwotICAgIGludCBrZXljaGVjayA9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX0ZBSUxVUkU7Ci0gICAgaW50IGtleWJpdCA9IDA7Ci0KLSAgICBpZihyZW1vdGVrZXkpIHsKLSAgICAgIC8qCi0gICAgICAgKiBBIHN1YmplY3QgdG8gZmlndXJlIG91dCBpcyB3aGF0IGhvc3QgbmFtZSB3ZSBuZWVkIHRvIHBhc3MgaW4gaGVyZS4KLSAgICAgICAqIFdoYXQgaG9zdCBuYW1lIGRvZXMgT3BlblNTSCBzdG9yZSBpbiBpdHMgZmlsZSBpZiBhbiBJRE4gbmFtZSBpcwotICAgICAgICogdXNlZD8KLSAgICAgICAqLwotICAgICAgc3RydWN0IGxpYnNzaDJfa25vd25ob3N0ICpob3N0OwotICAgICAgZW51bSBjdXJsX2tobWF0Y2gga2V5bWF0Y2g7Ci0gICAgICBjdXJsX3NzaGtleWNhbGxiYWNrIGZ1bmMgPQotICAgICAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM/ZGF0YS0+c2V0LnNzaF9rZXlmdW5jOnNzaGtleWNhbGxiYWNrOwotICAgICAgc3RydWN0IGN1cmxfa2hrZXkga25vd25rZXk7Ci0gICAgICBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXlwID0gTlVMTDsKLSAgICAgIHN0cnVjdCBjdXJsX2toa2V5IGZvdW5ka2V5OwotCi0gICAgICBrZXliaXQgPSAoa2V5dHlwZSA9PSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0EpPwotICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfU1NIUlNBOkxJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hEU1M7Ci0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0NIRUNLUAotICAgICAga2V5Y2hlY2sgPSBsaWJzc2gyX2tub3duaG9zdF9jaGVja3Aoc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ubi0+cmVtb3RlX3BvcnQgIT0gUE9SVF9TU0gpPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cmVtb3RlX3BvcnQ6LTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVrZXksIGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Yml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QpOwotI2Vsc2UKLSAgICAgIGtleWNoZWNrID0gbGlic3NoMl9rbm93bmhvc3RfY2hlY2soc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Rla2V5LCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0tFWUVOQ19SQVd8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QpOwotI2VuZGlmCi0KLSAgICAgIGluZm9mKGRhdGEsICJTU0ggaG9zdCBjaGVjazogJWQsIGtleTogJXNcbiIsIGtleWNoZWNrLAotICAgICAgICAgICAgKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKT8KLSAgICAgICAgICAgIGhvc3QtPmtleToiPG5vbmU+Iik7Ci0KLSAgICAgIC8qIHNldHVwICdrbm93bmtleScgKi8KLSAgICAgIGlmKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKSB7Ci0gICAgICAgIGtub3dua2V5LmtleSA9IGhvc3QtPmtleTsKLSAgICAgICAga25vd25rZXkubGVuID0gMDsKLSAgICAgICAga25vd25rZXkua2V5dHlwZSA9IChrZXl0eXBlID09IExJQlNTSDJfSE9TVEtFWV9UWVBFX1JTQSk/Ci0gICAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKLSAgICAgICAga25vd25rZXlwID0gJmtub3dua2V5OwotICAgICAgfQotCi0gICAgICAvKiBzZXR1cCAnZm91bmRrZXknICovCi0gICAgICBmb3VuZGtleS5rZXkgPSByZW1vdGVrZXk7Ci0gICAgICBmb3VuZGtleS5sZW4gPSBrZXlsZW47Ci0gICAgICBmb3VuZGtleS5rZXl0eXBlID0gKGtleXR5cGUgPT0gTElCU1NIMl9IT1NUS0VZX1RZUEVfUlNBKT8KLSAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKLQotICAgICAgLyoKLSAgICAgICAqIGlmIGFueSBvZiB0aGUgTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfKiBkZWZpbmVzIGFuZCB0aGUKLSAgICAgICAqIGN1cmxfa2htYXRjaCBlbnVtIGFyZSBldmVyIG1vZGlmaWVkLCB3ZSBuZWVkIHRvIGludHJvZHVjZSBhCi0gICAgICAgKiB0cmFuc2xhdGlvbiB0YWJsZSBoZXJlIQotICAgICAgICovCi0gICAgICBrZXltYXRjaCA9IChlbnVtIGN1cmxfa2htYXRjaClrZXljaGVjazsKLQotICAgICAgLyogQXNrIHRoZSBjYWxsYmFjayBob3cgdG8gYmVoYXZlICovCi0gICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKLSAgICAgIHJjID0gZnVuYyhkYXRhLCBrbm93bmtleXAsIC8qIGZyb20gdGhlIGtub3duaG9zdHMgZmlsZSAqLwotICAgICAgICAgICAgICAgICZmb3VuZGtleSwgLyogZnJvbSB0aGUgcmVtb3RlIGhvc3QgKi8KLSAgICAgICAgICAgICAgICBrZXltYXRjaCwgZGF0YS0+c2V0LnNzaF9rZXlmdW5jX3VzZXJwKTsKLSAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgLyogbm8gcmVtb3Rla2V5IG1lYW5zIGZhaWx1cmUhICovCi0gICAgICByYyA9IENVUkxLSFNUQVRfUkVKRUNUOwotCi0gICAgc3dpdGNoKHJjKSB7Ci0gICAgZGVmYXVsdDogLyogdW5rbm93biByZXR1cm4gY29kZXMgd2lsbCBlcXVhbCByZWplY3QgKi8KLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSBDVVJMS0hTVEFUX1JFSkVDVDoKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIENVUkxLSFNUQVRfREVGRVI6Ci0gICAgICAvKiBERUZFUiBtZWFucyBiYWlsIG91dCBidXQga2VlcCB0aGUgU1NIX0hPU1RLRVkgc3RhdGUgKi8KLSAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxLSFNUQVRfRklORToKLSAgICBjYXNlIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRToKLSAgICAgIC8qIHByb2NlZWQgKi8KLSAgICAgIGlmKGtleWNoZWNrICE9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01BVENIKSB7Ci0gICAgICAgIC8qIHRoZSBmb3VuZCBob3N0K2tleSBkaWRuJ3QgbWF0Y2ggYnV0IGhhcyBiZWVuIHRvbGQgdG8gYmUgZmluZQotICAgICAgICAgICBhbnl3YXkgc28gd2UgYWRkIGl0IGluIG1lbW9yeSAqLwotICAgICAgICBpbnQgYWRkcmMgPSBsaWJzc2gyX2tub3duaG9zdF9hZGQoc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVrZXksIGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Yml0LCBOVUxMKTsKLSAgICAgICAgaWYoYWRkcmMpCi0gICAgICAgICAgaW5mb2YoZGF0YSwgIldhcm5pbmcgYWRkaW5nIHRoZSBrbm93biBob3N0ICVzIGZhaWxlZCFcbiIsCi0gICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKTsKLSAgICAgICAgZWxzZSBpZihyYyA9PSBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEUpIHsKLSAgICAgICAgICAvKiBub3cgd2Ugd3JpdGUgdGhlIGVudGlyZSBpbi1tZW1vcnkgbGlzdCBvZiBrbm93biBob3N0cyB0byB0aGUKLSAgICAgICAgICAgICBrbm93bl9ob3N0cyBmaWxlICovCi0gICAgICAgICAgaW50IHdyYyA9Ci0gICAgICAgICAgICBsaWJzc2gyX2tub3duaG9zdF93cml0ZWZpbGUoc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0ZJTEVfT1BFTlNTSCk7Ci0gICAgICAgICAgaWYod3JjKSB7Ci0gICAgICAgICAgICBpbmZvZihkYXRhLCAiV2FybmluZywgd3JpdGluZyAlcyBmYWlsZWQhXG4iLAotICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotI2Vsc2UgLyogSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgKi8KLSAgKHZvaWQpY29ubjsKLSNlbmRpZgotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2NoZWNrX2ZpbmdlcnByaW50KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBjb25zdCBjaGFyICpwdWJrZXlfbWQ1ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdOwotICBjaGFyIG1kNWJ1ZmZlclszM107Ci0KLSAgY29uc3QgY2hhciAqZmluZ2VycHJpbnQgPSBsaWJzc2gyX2hvc3RrZXlfaGFzaChzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgIExJQlNTSDJfSE9TVEtFWV9IQVNIX01ENSk7Ci0KLSAgaWYoZmluZ2VycHJpbnQpIHsKLSAgICAvKiBUaGUgZmluZ2VycHJpbnQgcG9pbnRzIHRvIHN0YXRpYyBzdG9yYWdlICghKSwgZG9uJ3QgZnJlZSgpIGl0LiAqLwotICAgIGludCBpOwotICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspCi0gICAgICBtc25wcmludGYoJm1kNWJ1ZmZlcltpKjJdLCAzLCAiJTAyeCIsICh1bnNpZ25lZCBjaGFyKSBmaW5nZXJwcmludFtpXSk7Ci0gICAgaW5mb2YoZGF0YSwgIlNTSCBNRDUgZmluZ2VycHJpbnQ6ICVzXG4iLCBtZDVidWZmZXIpOwotICB9Ci0KLSAgLyogQmVmb3JlIHdlIGF1dGhlbnRpY2F0ZSB3ZSBjaGVjayB0aGUgaG9zdGtleSdzIE1ENSBmaW5nZXJwcmludAotICAgKiBhZ2FpbnN0IGEga25vd24gZmluZ2VycHJpbnQsIGlmIGF2YWlsYWJsZS4KLSAgICovCi0gIGlmKHB1YmtleV9tZDUgJiYgc3RybGVuKHB1YmtleV9tZDUpID09IDMyKSB7Ci0gICAgaWYoIWZpbmdlcnByaW50IHx8ICFzdHJjYXNlY29tcGFyZShtZDVidWZmZXIsIHB1YmtleV9tZDUpKSB7Ci0gICAgICBpZihmaW5nZXJwcmludCkKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJEZW5pZWQgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uOiBtaXNtYXRjaCBtZDUgZmluZ2VycHJpbnQuICIKLSAgICAgICAgICAgICJSZW1vdGUgJXMgaXMgbm90IGVxdWFsIHRvICVzIiwgbWQ1YnVmZmVyLCBwdWJrZXlfbWQ1KTsKLSAgICAgIGVsc2UKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJEZW5pZWQgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uOiBtZDUgZmluZ2VycHJpbnQgbm90IGF2YWlsYWJsZSIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwotICAgICAgcmV0dXJuIHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgfQotICAgIGluZm9mKGRhdGEsICJNRDUgY2hlY2tzdW0gbWF0Y2ghXG4iKTsKLSAgICAvKiBhcyB3ZSBhbHJlYWR5IG1hdGNoZWQsIHdlIHNraXAgdGhlIGNoZWNrIGZvciBrbm93biBob3N0cyAqLwotICAgIHJldHVybiBDVVJMRV9PSzsKLSAgfQotICByZXR1cm4gc3NoX2tub3duaG9zdChjb25uKTsKLX0KLQotLyoKLSAqIHNzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0Ci0gKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKLSAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIGxpYnNzaDIgZnVuY3Rpb24gcmV0dXJucyBMSUJTU0gyX0VSUk9SX0VBR0FJTgotICogbWVhbmluZyBpdCB3YW50cyB0byBiZSBjYWxsZWQgYWdhaW4gd2hlbiB0aGUgc29ja2V0IGlzIHJlYWR5Ci0gKi8KLQotc3RhdGljIENVUkxjb2RlIHNzaF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqYmxvY2spCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IFNTSFBST1RPICpzZnRwX3NjcCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgY2hhciAqbmV3X3JlYWRkaXJfbGluZTsKLSAgaW50IHJjID0gTElCU1NIMl9FUlJPUl9OT05FOwotICBpbnQgZXJyOwotICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7Ci0gICpibG9jayA9IDA7IC8qIHdlJ3JlIG5vdCBibG9ja2luZyBieSBkZWZhdWx0ICovCi0KLSAgZG8gewotCi0gICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7Ci0gICAgY2FzZSBTU0hfSU5JVDoKLSAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOwotCi0gICAgICAvKiBTZXQgbGlic3NoMiB0byBub24tYmxvY2tpbmcsIHNpbmNlIGV2ZXJ5dGhpbmcgaW50ZXJuYWxseSBpcwotICAgICAgICAgbm9uLWJsb2NraW5nICovCi0gICAgICBsaWJzc2gyX3Nlc3Npb25fc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAwKTsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotCi0gICAgY2FzZSBTU0hfU19TVEFSVFVQOgotICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMpIHsKLSAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogJWQsICVzIiwgcmMsIGVycl9tc2cpOwotCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7Ci0KLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSBTU0hfSE9TVEtFWToKLSAgICAgIC8qCi0gICAgICAgKiBCZWZvcmUgd2UgYXV0aGVudGljYXRlIHdlIHNob3VsZCBjaGVjayB0aGUgaG9zdGtleSdzIGZpbmdlcnByaW50Ci0gICAgICAgKiBhZ2FpbnN0IG91ciBrbm93biBob3N0cy4gSG93IHRoYXQgaXMgaGFuZGxlZCAocmVhZGluZyBmcm9tIGZpbGUsCi0gICAgICAgKiB3aGF0ZXZlcikgaXMgdXAgdG8gdXMuCi0gICAgICAgKi8KLSAgICAgIHJlc3VsdCA9IHNzaF9jaGVja19maW5nZXJwcmludChjb25uKTsKLSAgICAgIGlmKCFyZXN1bHQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7Ci0gICAgICAvKiBzc2hfY2hlY2tfZmluZ2VycHJpbnQgc2V0cyBzdGF0ZSBhcHByb3ByaWF0ZWx5IG9uIGVycm9yICovCi0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhMSVNUOgotICAgICAgLyoKLSAgICAgICAqIEZpZ3VyZSBvdXQgYXV0aGVudGljYXRpb24gbWV0aG9kcwotICAgICAgICogTkI6IEFzIHNvb24gYXMgd2UgaGF2ZSBwcm92aWRlZCBhIHVzZXJuYW1lIHRvIGFuIG9wZW5zc2ggc2VydmVyIHdlCi0gICAgICAgKiBtdXN0IG5ldmVyIGNoYW5nZSBpdCBsYXRlci4gVGh1cywgYWx3YXlzIHNwZWNpZnkgdGhlIGNvcnJlY3QgdXNlcm5hbWUKLSAgICAgICAqIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBsaWJzc2gyIGRvY3Mga2luZCBvZiBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBiZQotICAgICAgICogcG9zc2libGUgdG8gZ2V0IGEgJ2dlbmVyaWMnIGxpc3QgKG5vdCB1c2VyLXNwZWNpZmljKSBvZiBhdXRoZW50aWNhdGlvbgotICAgICAgICogbWV0aG9kcywgcHJlc3VtYWJseSB3aXRoIGEgYmxhbmsgdXNlcm5hbWUuIFRoYXQgd29uJ3Qgd29yayBpbiBteQotICAgICAgICogZXhwZXJpZW5jZS4KLSAgICAgICAqIFNvIGFsd2F5cyBzcGVjaWZ5IGl0IGhlcmUuCi0gICAgICAgKi8KLSAgICAgIHNzaGMtPmF1dGhsaXN0ID0gbGlic3NoMl91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpKTsKLQotICAgICAgaWYoIXNzaGMtPmF1dGhsaXN0KSB7Ci0gICAgICAgIGlmKGxpYnNzaDJfdXNlcmF1dGhfYXV0aGVudGljYXRlZChzc2hjLT5zc2hfc2Vzc2lvbikpIHsKLSAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICAgIGluZm9mKGRhdGEsICJTU0ggdXNlciBhY2NlcHRlZCB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIGlmKGVyciA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpbmZvZihkYXRhLCAiU1NIIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXZhaWxhYmxlOiAlc1xuIiwKLSAgICAgICAgICAgIHNzaGMtPmF1dGhsaXN0KTsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWV9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QS0VZX0lOSVQ6Ci0gICAgICAvKgotICAgICAgICogQ2hlY2sgdGhlIHN1cHBvcnRlZCBhdXRoIHR5cGVzIGluIHRoZSBvcmRlciBJIGZlZWwgaXMgbW9zdCBzZWN1cmUKLSAgICAgICAqIHdpdGggdGhlIHJlcXVlc3RlZCB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uCi0gICAgICAgKi8KLSAgICAgIHNzaGMtPmF1dGhlZCA9IEZBTFNFOwotCi0gICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSkgJiYKLSAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJwdWJsaWNrZXkiKSAhPSBOVUxMKSkgewotICAgICAgICBib29sIG91dF9vZl9tZW1vcnkgPSBGQUxTRTsKLQotICAgICAgICBzc2hjLT5yc2FfcHViID0gc3NoYy0+cnNhID0gTlVMTDsKLQotICAgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKQotICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLyogVG8gcG9uZGVyIGFib3V0OiBzaG91bGQgcmVhbGx5IHRoZSBsaWIgYmUgbWVzc2luZyBhYm91dCB3aXRoIHRoZQotICAgICAgICAgICAgIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgZXRjPyAqLwotICAgICAgICAgIGNoYXIgKmhvbWUgPSBjdXJsX2dldGVudigiSE9NRSIpOwotCi0gICAgICAgICAgLyogSWYgbm8gcHJpdmF0ZSBrZXkgZmlsZSBpcyBzcGVjaWZpZWQsIHRyeSBzb21lIGNvbW1vbiBwYXRocy4gKi8KLSAgICAgICAgICBpZihob21lKSB7Ci0gICAgICAgICAgICAvKiBUcnkgfi8uc3NoIGZpcnN0LiAqLwotICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9yc2EiLCBob21lKTsKLSAgICAgICAgICAgIGlmKCFzc2hjLT5yc2EpCi0gICAgICAgICAgICAgIG91dF9vZl9tZW1vcnkgPSBUUlVFOwotICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7Ci0gICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLSAgICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9kc2EiLCBob21lKTsKLSAgICAgICAgICAgICAgaWYoIXNzaGMtPnJzYSkKLSAgICAgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKLSAgICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmVlKGhvbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZighb3V0X29mX21lbW9yeSAmJiAhc3NoYy0+cnNhKSB7Ci0gICAgICAgICAgICAvKiBOb3RoaW5nIGZvdW5kOyB0cnkgdGhlIGN1cnJlbnQgZGlyLiAqLwotICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9yc2EiKTsKLSAgICAgICAgICAgIGlmKHNzaGMtPnJzYSAmJiBhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7Ci0gICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLSAgICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9kc2EiKTsKLSAgICAgICAgICAgICAgaWYoc3NoYy0+cnNhICYmIGFjY2Vzcyhzc2hjLT5yc2EsIFJfT0spICE9IDApIHsKLSAgICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0gICAgICAgICAgICAgICAgLyogT3V0IG9mIGd1ZXNzZXMuIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIGF2b2lkCi0gICAgICAgICAgICAgICAgICogc3VycHJpc2luZyBpbmZvIG1lc3NhZ2VzLiAqLwotICAgICAgICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cCgiIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBVbmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseSBzcGVjaWZpZXMgYSBwdWJsaWMga2V5IGZpbGUsIGxldAotICAgICAgICAgKiBsaWJzc2gyIGV4dHJhY3QgdGhlIHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXkgZmlsZS4KLSAgICAgICAgICogVGhpcyBpcyBkb25lIGJ5IHNpbXBseSBwYXNzaW5nIHNzaGMtPnJzYV9wdWIgPSBOVUxMLgotICAgICAgICAgKi8KLSAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldCi0gICAgICAgICAgIC8qIHRyZWF0IGVtcHR5IHN0cmluZyB0aGUgc2FtZSB3YXkgYXMgTlVMTCAqLwotICAgICAgICAgICAmJiBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV1bMF0pIHsKLSAgICAgICAgICBzc2hjLT5yc2FfcHViID0gc3RyZHVwKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSk7Ci0gICAgICAgICAgaWYoIXNzaGMtPnJzYV9wdWIpCi0gICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKG91dF9vZl9tZW1vcnkgfHwgc3NoYy0+cnNhID09IE5VTEwpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2Q7Ci0gICAgICAgIGlmKCFzc2hjLT5wYXNzcGhyYXNlKQotICAgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSAiIjsKLQotICAgICAgICBpZihzc2hjLT5yc2FfcHViKQotICAgICAgICAgIGluZm9mKGRhdGEsICJVc2luZyBTU0ggcHVibGljIGtleSBmaWxlICclcydcbiIsIHNzaGMtPnJzYV9wdWIpOwotICAgICAgICBpbmZvZihkYXRhLCAiVXNpbmcgU1NIIHByaXZhdGUga2V5IGZpbGUgJyVzJ1xuIiwgc3NoYy0+cnNhKTsKLQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX1BLRVk6Ci0gICAgICAvKiBUaGUgZnVuY3Rpb24gYmVsb3cgY2hlY2tzIGlmIHRoZSBmaWxlcyBleGlzdHMsIG5vIG5lZWQgdG8gc3RhdCgpIGhlcmUuCi0gICAgICAgKi8KLSAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXlfZnJvbWZpbGVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2FfcHViLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2EsIHNzaGMtPnBhc3NwaHJhc2UpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0KLSAgICAgIGlmKHJjID09IDApIHsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkluaXRpYWxpemVkIFNTSCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgIGluZm9mKGRhdGEsICJTU0ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICVzXG4iLCBlcnJfbXNnKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKLSAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QQVNTX0lOSVQ6Ci0gICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BBU1NXT1JEKSAmJgotICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgInBhc3N3b3JkIikgIT0gTlVMTCkpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTUyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfSE9TVF9JTklUKTsKLSAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QQVNTOgotICAgICAgcmMgPSBsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3JkX2V4KHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnBhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfSE9TVF9JTklUOgotICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9IT1NUKSAmJgotICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgImhvc3RiYXNlZCIpICE9IE5VTEwpKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1QpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0hPU1Q6Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9BR0VOVF9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9BR0VOVF9JTklUOgotI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKLSAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfQUdFTlQpCi0gICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAicHVibGlja2V5IikgIT0gTlVMTCkpIHsKLQotICAgICAgICAvKiBDb25uZWN0IHRvIHRoZSBzc2gtYWdlbnQgKi8KLSAgICAgICAgLyogVGhlIGFnZW50IGNvdWxkIGJlIHNoYXJlZCBieSBhIGN1cmwgdGhyZWFkIGkgYmVsaWV2ZQotICAgICAgICAgICBidXQgbm90aGluZyBvYnZpb3VzIGFzIGtleXMgY2FuIGJlIGFkZGVkL3JlbW92ZWQgYXQgYW55IHRpbWUgKi8KLSAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgewotICAgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IGxpYnNzaDJfYWdlbnRfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgewotICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNvdWxkIG5vdCBjcmVhdGUgYWdlbnQgb2JqZWN0XG4iKTsKLQotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2Nvbm5lY3Qoc3NoYy0+c3NoX2FnZW50KTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsdXJlIGNvbm5lY3RpbmcgdG8gYWdlbnRcbiIpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKLSAgICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0xJU1QpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0jZW5kaWYgLyogSEFWRV9MSUJTU0gyX0FHRU5UX0FQSSAqLwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfQUdFTlRfTElTVDoKLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICByYyA9IGxpYnNzaDJfYWdlbnRfbGlzdF9pZGVudGl0aWVzKHNzaGMtPnNzaF9hZ2VudCk7Ci0KLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQotICAgICAgICBicmVhazsKLSAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfQUdFTlQpOwotICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5ID0gTlVMTDsKLSAgICAgIH0KLSNlbmRpZgotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0FHRU5UOgotI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKLSAgICAgIC8qIGFzIHByZXZfaWRlbnRpdHkgZXZvbHZlcyBvbmx5IGFmdGVyIGFuIGlkZW50aXR5IHVzZXIgYXV0aCBmaW5pc2hlZCB3ZQotICAgICAgICAgY2FuIHNhZmVseSByZXF1ZXN0IGl0IGFnYWluIGFzIGxvbmcgYXMgRUFHQUlOIGlzIHJldHVybmVkIGhlcmUgb3IgYnkKLSAgICAgICAgIGxpYnNzaDJfYWdlbnRfdXNlcmF1dGggKi8KLSAgICAgIHJjID0gbGlic3NoMl9hZ2VudF9nZXRfaWRlbnRpdHkoc3NoYy0+c3NoX2FnZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9hZ2VudF91c2VyYXV0aChzc2hjLT5zc2hfYWdlbnQsIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eSk7Ci0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgaWYocmMgIT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICAgIC8qIHRyaWVkIGFuZCBmYWlsZWQ/IGdvIHRvIG5leHQgaWRlbnRpdHkgKi8KLSAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkgPSBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYocmMgPCAwKQotICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOwotICAgICAgZWxzZSBpZihyYyA9PSAxKQotICAgICAgICBpbmZvZihkYXRhLCAiTm8gaWRlbnRpdHkgd291bGQgbWF0Y2hcbiIpOwotCi0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX05PTkUpIHsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkFnZW50IGJhc2VkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0jZW5kaWYKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9LRVlfSU5JVDoKLSAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQpCi0gICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAia2V5Ym9hcmQtaW50ZXJhY3RpdmUiKSAhPSBOVUxMKSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVkpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0tFWToKLSAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gQ29udGludWUgd2l0aCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBub3cuICovCi0gICAgICByYyA9IGxpYnNzaDJfdXNlcmF1dGhfa2V5Ym9hcmRfaW50ZXJhY3RpdmVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrYmRfY2FsbGJhY2spOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9ET05FOgotICAgICAgaWYoIXNzaGMtPmF1dGhlZCkgewotICAgICAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbHVyZSIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX0xPR0lOX0RFTklFRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gYXV0aGVudGljYXRlZCBzc2ggc2Vzc2lvbi4KLSAgICAgICAqLwotICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlXG4iKTsKLQotICAgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogU1NIIGlzIGNvbm5lY3RlZCAqLwotCi0gICAgICBjb25uLT5zb2NrZmQgPSBzb2NrOwotICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7Ci0KLSAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19TRlRQKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9JTklUOgotICAgICAgLyoKLSAgICAgICAqIFN0YXJ0IHRoZSBsaWJzc2gyIHNmdHAgc2Vzc2lvbgotICAgICAgICovCi0gICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBsaWJzc2gyX3NmdHBfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICBpZighc3NoYy0+c2Z0cF9zZXNzaW9uKSB7Ci0gICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KLSAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9GQUlMRURfSU5JVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFMUEFUSCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBTFBBVEg6Ci0gICAgewotICAgICAgY2hhciB0ZW1wSG9tZVtQQVRIX01BWF07Ci0KLSAgICAgIC8qCi0gICAgICAgKiBHZXQgdGhlICJob21lIiBkaXJlY3RvcnkKLSAgICAgICAqLwotICAgICAgcmMgPSBzZnRwX2xpYnNzaDJfcmVhbHBhdGgoc3NoYy0+c2Z0cF9zZXNzaW9uLCAiLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wSG9tZSwgUEFUSF9NQVgtMSk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjID4gMCkgewotICAgICAgICAvKiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RyaW5nIGlzIG5vdCBhbHdheXMgTlVMTCB0ZXJtaW5hdGVkICovCi0gICAgICAgIHRlbXBIb21lW3JjXSA9ICdcMCc7Ci0gICAgICAgIHNzaGMtPmhvbWVkaXIgPSBzdHJkdXAodGVtcEhvbWUpOwotICAgICAgICBpZighc3NoYy0+aG9tZWRpcikgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gc3NoYy0+aG9tZWRpcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBSZXR1cm4gdGhlIGVycm9yIHR5cGUgKi8KLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgaWYoZXJyKQotICAgICAgICAgIHJlc3VsdCA9IHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgZXJyb3Igd2Fzbid0IGluIHRoZSBTRlRQIGxldmVsIGJ1dCBmb3IgZXhhbXBsZQotICAgICAgICAgICAgIGEgdGltZS1vdXQgb3Igc2ltaWxhciAqLwotICAgICAgICAgIHJlc3VsdCA9IENVUkxFX1NTSDsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJlcnJvciA9ICVkIG1ha2VzIGxpYmN1cmwgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGVyciwgKGludClyZXN1bHQpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyogVGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBTRlRQIGNvbm5lY3QgcGhhc2UuIERvIG5vdGUgdGhhdCB3aGlsZQotICAgICAgIHdlIGdldCB0aGUgaG9tZWRpciBoZXJlLCB3ZSBnZXQgdGhlICJ3b3JraW5ncGF0aCIgaW4gdGhlIERPIGFjdGlvbgotICAgICAgIHNpbmNlIHRoZSBob21lZGlyIHdpbGwgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gcmVxdWVzdCBidXQgdGhlCi0gICAgICAgd29ya2luZyBwYXRoIHdpbGwgbm90LiAqLwotICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIikpOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfSU5JVDoKLQotICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgewotICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDoKLSAgICAgIGlmKGRhdGEtPnNldC5wb3N0cXVvdGUpIHsKLSAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOwotICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URToKLSAgICAgIC8qIFNlbmQgYW55IHF1b3RlIGNvbW1hbmRzICovCi0gICAgewotICAgICAgY29uc3QgY2hhciAqY3A7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBTdXBwb3J0IHNvbWUgb2YgdGhlICJGVFAiIGNvbW1hbmRzCi0gICAgICAgKgotICAgICAgICogJ3NzaGMtPnF1b3RlX2l0ZW0nIGlzIGFscmVhZHkgdmVyaWZpZWQgdG8gYmUgbm9uLU5VTEwgYmVmb3JlIGl0Ci0gICAgICAgKiBzd2l0Y2hlZCB0byB0aGlzIHN0YXRlLgotICAgICAgICovCi0gICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOwotICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOwotCi0gICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCi0gICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKLSAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAotICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLwotCi0gICAgICBpZihjbWRbMF0gPT0gJyonKSB7Ci0gICAgICAgIGNtZCsrOwotICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoInB3ZCIsIGNtZCkpIHsKLSAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLwotICAgICAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCIyNTcgXCIlc1wiIGlzIGN1cnJlbnQgZGlyZWN0b3J5LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZnRwX3NjcC0+cGF0aCk7Ci0gICAgICAgIGlmKCF0bXApIHsKLSAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsIChjaGFyICopIlBXRFxuIiwgNCk7Ci0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIHRtcCwgc3RybGVuKHRtcCkpOwotICAgICAgICB9Ci0gICAgICAgIC8qIHRoaXMgc2VuZHMgYW4gRlRQLWxpa2UgImhlYWRlciIgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBzbyB0aGF0IHRoZQotICAgICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSBjYW4gYmUgcmVhZCB2ZXJ5IHNpbWlsYXIgdG8gaG93IGl0IGlzIHJlYWQgd2hlbgotICAgICAgICAgICB1c2luZyBvcmRpbmFyeSBGVFAuICovCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBjb21tYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCi0gICAgICAgICAqIGNvbW1hbmQgd2l0aCBhIHNwYWNlIHNvIHdlIGNhbiBjaGVjayBmb3IgaXQgdW5jb25kaXRpb25hbGx5Ci0gICAgICAgICAqLwotICAgICAgICBjcCA9IHN0cmNocihjbWQsICcgJyk7Ci0gICAgICAgIGlmKGNwID09IE5VTEwpIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIFNGVFAgY29tbWFuZC4gU3VwcGx5IHBhcmFtZXRlcihzKSEiKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIGFsc28sIGV2ZXJ5IGNvbW1hbmQgdGFrZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IHNvIHdlIGdldCB0aGF0Ci0gICAgICAgICAqIGZpcnN0IGFyZ3VtZW50IHJpZ2h0IG5vdwotICAgICAgICAgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDEsIHNzaGMtPmhvbWVkaXIpOwotICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogQmFkIGZpcnN0IHBhcmFtZXRlciIpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wsIHNvIHdlIGRvbid0IHNlbmQgdGV4dCBjb21tYW5kcwotICAgICAgICAgKiB0byB0aGUgc2VydmVyLiBJbnN0ZWFkLCB3ZSBzY2FuIGZvciBjb21tYW5kcyB1c2VkIGJ5Ci0gICAgICAgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaDIKLSAgICAgICAgICogZnVuY3Rpb25zLgotICAgICAgICAgKi8KLSAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8Ci0gICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAotICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikgKSB7Ci0gICAgICAgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLwotCi0gICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCi0gICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIGNoZ3JwL2NobW9kL2Nob3duOiAiCi0gICAgICAgICAgICAgICAgICAgICJCYWQgc2Vjb25kIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIG1lbXNldCgmc3NoYy0+cXVvdGVfYXR0cnMsIDAsIHNpemVvZihMSUJTU0gyX1NGVFBfQVRUUklCVVRFUykpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJsbiAiLCAzKSB8fAotICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAic3ltbGluayAiLCA4KSkgewotICAgICAgICAgIC8qIHN5bWJvbGljIGxpbmtpbmcgKi8KLSAgICAgICAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBpcyB0aGUgc291cmNlICovCi0gICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgICAgICAgICAiU3ludGF4IGVycm9yIGluIGxuL3N5bWxpbms6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7Ci0gICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1lNTElOSyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibWtkaXIgIiwgNikpIHsKLSAgICAgICAgICAvKiBjcmVhdGUgZGlyICovCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfTUtESVIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJlbmFtZSAiLCA3KSkgewotICAgICAgICAgIC8qIHJlbmFtZSBmaWxlICovCi0gICAgICAgICAgLyogZmlyc3QgcGFyYW0gaXMgdGhlIHNvdXJjZSBwYXRoICovCi0gICAgICAgICAgLyogc2Vjb25kIHBhcmFtIGlzIHRoZSBkZXN0LiBwYXRoICovCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOwotICAgICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gcmVuYW1lOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm1kaXIgIiwgNikpIHsKLSAgICAgICAgICAvKiBkZWxldGUgZGlyICovCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUk1ESVIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtICIsIDMpKSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfVU5MSU5LKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIEhBU19TVEFUVkZTX1NVUFBPUlQKLSAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAic3RhdHZmcyAiLCA4KSkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlMpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmYWlsZihkYXRhLCAiVW5rbm93biBTRlRQIGNvbW1hbmQiKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX05FWFRfUVVPVEU6Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotCi0gICAgICBzc2hjLT5xdW90ZV9pdGVtID0gc3NoYy0+cXVvdGVfaXRlbS0+bmV4dDsKLQotICAgICAgaWYoc3NoYy0+cXVvdGVfaXRlbSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0dFVElORk8pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVDoKLSAgICB7Ci0gICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOwotICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOwotCi0gICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCi0gICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKLSAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAotICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLwotCi0gICAgICBpZihjbWRbMF0gPT0gJyonKSB7Ci0gICAgICAgIGNtZCsrOwotICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYoIXN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCIsIDUpKSB7Ci0gICAgICAgIC8qIFNpbmNlIGNob3duIGFuZCBjaGdycCBvbmx5IHNldCBvd25lciBPUiBncm91cCBidXQgbGlic3NoMiB3YW50cyB0bwotICAgICAgICAgKiBzZXQgdGhlbSBib3RoIGF0IG9uY2UsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBjdXJyZW50IG93bmVyc2hpcAotICAgICAgICAgKiBmaXJzdC4gIFRoaXMgdGFrZXMgYW4gZXh0cmEgcHJvdG9jb2wgcm91bmQgdHJpcC4KLSAgICAgICAgICovCi0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnF1b3RlX2F0dHJzKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7IC8qIGdldCB0aG9zZSBhdHRyaWJ1dGVzICovCi0gICAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBnZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLyogTm93IHNldCB0aGUgbmV3IGF0dHJpYnV0ZXMuLi4gKi8KLSAgICAgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCIsIDUpKSB7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmdpZCA9IHN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDEwKTsKLSAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMuZmxhZ3MgPSBMSUJTU0gyX1NGVFBfQVRUUl9VSURHSUQ7Ci0gICAgICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLmdpZCA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSAmJgotICAgICAgICAgICAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNoZ3JwIGdpZCBub3QgYSBudW1iZXIiKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QiLCA1KSkgewotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5wZXJtaXNzaW9ucyA9IHN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDgpOwotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5mbGFncyA9IExJQlNTSDJfU0ZUUF9BVFRSX1BFUk1JU1NJT05TOwotICAgICAgICAvKiBwZXJtaXNzaW9ucyBhcmUgb2N0YWwgKi8KLSAgICAgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMucGVybWlzc2lvbnMgPT0gMCAmJgotICAgICAgICAgICAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG1vZCBwZXJtaXNzaW9ucyBub3QgYSBudW1iZXIiKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24iLCA1KSkgewotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy51aWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOwotICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy51aWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKLSAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG93biB1aWQgbm90IGEgbnVtYmVyIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLyogTm93IHNlbmQgdGhlIGNvbXBsZXRlZCBzdHJ1Y3R1cmUuLi4gKi8KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TRVRTVEFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+cXVvdGVfYXR0cnMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gc2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TWU1MSU5LKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzeW1saW5rIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9NS0RJUjoKLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX21rZGlyX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUkVOQU1FOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcmVuYW1lX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfUkVOQU1FX09WRVJXUklURSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1JFTkFNRV9BVE9NSUMgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9SRU5BTUVfTkFUSVZFKTsKLQotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgInJlbmFtZSBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUk1ESVI6Ci0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF9ybWRpcl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgInJtZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9VTkxJTks6Ci0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF91bmxpbmtfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSkpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBmYWlsZihkYXRhLCAicm0gY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBIQVNfU1RBVFZGU19TVVBQT1JUCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTOgotICAgIHsKLSAgICAgIExJQlNTSDJfU0ZUUF9TVEFUVkZTIHN0YXR2ZnM7Ci0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0dmZzKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR2ZnMpOwotCi0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzdGF0dmZzIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHJjID09IDApIHsKLSAgICAgICAgY2hhciAqdG1wID0gYXByaW50Zigic3RhdHZmczpcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ic2l6ZTogJWxsdVxuIiAiZl9mcnNpemU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ibG9ja3M6ICVsbHVcbiIgImZfYmZyZWU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9iYXZhaWw6ICVsbHVcbiIgImZfZmlsZXM6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mZnJlZTogJWxsdVxuIiAiZl9mYXZhaWw6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mc2lkOiAlbGx1XG4iICJmX2ZsYWc6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9uYW1lbWF4OiAlbGx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9ic2l6ZSwgc3RhdHZmcy5mX2Zyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfYmxvY2tzLCBzdGF0dmZzLmZfYmZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX2JhdmFpbCwgc3RhdHZmcy5mX2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9mZnJlZSwgc3RhdHZmcy5mX2ZhdmFpbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfZnNpZCwgc3RhdHZmcy5mX2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX25hbWVtYXgpOwotICAgICAgICBpZighdG1wKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKLSAgICAgICAgZnJlZSh0bXApOwotICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgY2FzZSBTU0hfU0ZUUF9HRVRJTkZPOgotICAgIHsKLSAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTU0hfU0ZUUF9GSUxFVElNRToKLSAgICB7Ci0gICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKLQotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBhdHRycy5tdGltZTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1RSQU5TX0lOSVQ6Ci0gICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaWYoc2Z0cF9zY3AtPnBhdGhbc3RybGVuKHNmdHBfc2NwLT5wYXRoKS0xXSA9PSAnLycpCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9JTklUKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1VQTE9BRF9JTklUOgotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAvKgotICAgICAgICogTk9URSEhISAgbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoCi0gICAgICAgKiAgICAgICAgICB0aGF0IGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIKLSAgICAgICAqICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUKLSAgICAgICAqICAgICAgICAgIHNhbWUgbmFtZSBhcyB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCi0gICAgICAgKi8KLQotICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gIT0gMCkgewotICAgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKLSAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7Ci0gICAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7Ci0gICAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihyYykgewotICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOwotICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKLSAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGF0dHJzLmZpbGVzaXplOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQuZnRwX2FwcGVuZCkKLSAgICAgICAgLyogVHJ5IHRvIG9wZW4gZm9yIGFwcGVuZCwgYnV0IGNyZWF0ZSBpZiBub25leGlzdGluZyAqLwotICAgICAgICBmbGFncyA9IExJQlNTSDJfRlhGX1dSSVRFfExJQlNTSDJfRlhGX0NSRUFUfExJQlNTSDJfRlhGX0FQUEVORDsKLSAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKQotICAgICAgICAvKiBJZiB3ZSBoYXZlIHJlc3RhcnQgcG9zaXRpb24gdGhlbiBvcGVuIGZvciBhcHBlbmQgKi8KLSAgICAgICAgZmxhZ3MgPSBMSUJTU0gyX0ZYRl9XUklURXxMSUJTU0gyX0ZYRl9BUFBFTkQ7Ci0gICAgICBlbHNlCi0gICAgICAgIC8qIENsZWFyIGZpbGUgYmVmb3JlIHdyaXRpbmcgKG5vcm1hbCBiZWhhdmlvdXIpICovCi0gICAgICAgIGZsYWdzID0gTElCU1NIMl9GWEZfV1JJVEV8TElCU1NIMl9GWEZfQ1JFQVR8TElCU1NIMl9GWEZfVFJVTkM7Ci0KLSAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0KLSAgICAgICAgbGlic3NoMl9zZnRwX29wZW5fZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfT1BFTkZJTEUpOwotCi0gICAgICBpZighc3NoYy0+c2Z0cF9oYW5kbGUpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0KLSAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9FQUdBSU4gPT0gcmMpCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MID09IHJjKQotICAgICAgICAgIC8qIG9ubHkgd2hlbiB0aGVyZSB3YXMgYW4gU0ZUUCBwcm90b2NvbCBlcnJvciBjYW4gd2UgZXh0cmFjdAotICAgICAgICAgICAgIHRoZSBzZnRwIGVycm9yISAqLwotICAgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBlcnIgPSAtMTsgLyogbm90IGFuIHNmdHAgZXJyb3IgYXQgYWxsICovCi0KLSAgICAgICAgaWYoc3NoYy0+c2Vjb25kQ3JlYXRlRGlycykgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gZXJyPj0gTElCU1NIMl9GWF9PSz8KLSAgICAgICAgICAgIHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOkNVUkxFX1NTSDsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQ3JlYXRpbmcgdGhlIGRpci9maWxlIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZigoKGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfRklMRSkgfHwKLSAgICAgICAgICAgIChlcnIgPT0gTElCU1NIMl9GWF9GQUlMVVJFKSB8fAotICAgICAgICAgICAgKGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSCkpICYmCi0gICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgJiYKLSAgICAgICAgICAgIChzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkpKSB7Ci0gICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSB0aGUgcGF0aCByZW1vdGVseSAqLwotICAgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDE7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gZXJyPj0gTElCU1NIMl9GWF9PSz8KLSAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoZXJyKTpDVVJMRV9TU0g7Ci0gICAgICAgIGlmKCFzc2hjLT5hY3R1YWxjb2RlKSB7Ci0gICAgICAgICAgLyogU29tZXRpbWVzLCBmb3Igc29tZSByZWFzb24gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3IoKSByZXR1cm5zCi0gICAgICAgICAgICAgemVybyBldmVuIHRob3VnaCBsaWJzc2gyX3NmdHBfb3BlbigpIGZhaWxlZCBwcmV2aW91c2x5ISBXZSBuZWVkCi0gICAgICAgICAgICAgdG8gd29yayBhcm91bmQgdGhhdCEgKi8KLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfU1NIOwotICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGZhaWxmKGRhdGEsICJVcGxvYWQgZmFpbGVkOiAlcyAoJWQvJWQpIiwKLSAgICAgICAgICAgICAgZXJyPj0gTElCU1NIMl9GWF9PSz9zZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKToic3NoIGVycm9yIiwKLSAgICAgICAgICAgICAgZXJyLCByYyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBJZiB3ZSBoYXZlIGEgcmVzdGFydCBwb2ludCB0aGVuIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgY29ycmVjdAotICAgICAgICAgcG9zaXRpb24uICovCi0gICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApIHsKLSAgICAgICAgLyogTGV0J3MgcmVhZCBvZmYgdGhlIHByb3BlciBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgaW5wdXQuICovCi0gICAgICAgIGlmKGNvbm4tPnNlZWtfZnVuYykgewotICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOwotICAgICAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VFS19TRVQpOwotICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19PSykgewotICAgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkID0gMDsKLQotICAgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSykgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZWVrIHN0cmVhbSIpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOwotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBzZWVrZXJyID09IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUsgKGNhbid0IHNlZWsgdG8gb2Zmc2V0KSAqLwotICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHNpemVfdCByZWFkdGhpc2Ftb3VudG5vdyA9Ci0gICAgICAgICAgICAgIChkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCA+IGRhdGEtPnNldC5idWZmZXJfc2l6ZSkgPwotICAgICAgICAgICAgICAoc2l6ZV90KWRhdGEtPnNldC5idWZmZXJfc2l6ZSA6Ci0gICAgICAgICAgICAgIGN1cmx4X3NvdG91eihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCk7Ci0KLSAgICAgICAgICAgIHNpemVfdCBhY3R1YWxseXJlYWQ7Ci0gICAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKLSAgICAgICAgICAgIGFjdHVhbGx5cmVhZCA9IGRhdGEtPnN0YXRlLmZyZWFkX2Z1bmMoZGF0YS0+c3RhdGUuYnVmZmVyLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkdGhpc2Ftb3VudG5vdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuaW4pOwotICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotCi0gICAgICAgICAgICBwYXNzZWQgKz0gYWN0dWFsbHlyZWFkOwotICAgICAgICAgICAgaWYoKGFjdHVhbGx5cmVhZCA9PSAwKSB8fCAoYWN0dWFsbHlyZWFkID4gcmVhZHRoaXNhbW91bnRub3cpKSB7Ci0gICAgICAgICAgICAgIC8qIHRoaXMgY2hlY2tzIGZvciBncmVhdGVyLXRoYW4gb25seSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgQ1VSTF9SRUFERlVOQ19BQk9SVCByZXR1cm4gY29kZSBzdGlsbCBhYm9ydHMgKi8KLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWFkIGRhdGEiKTsKLSAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gd2hpbGUocGFzc2VkIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogbm93LCBkZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVhZCAqLwotICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgewotICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgLT0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207Ci0gICAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwotICAgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTRlRQX1NFRUsoc3NoYy0+c2Z0cF9oYW5kbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgIH0KLSAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPiAwKSB7Ci0gICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKLSAgICAgIH0KLSAgICAgIC8qIHVwbG9hZCBkYXRhICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIEZJUlNUU09DS0VUKTsKLQotICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCi0gICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKLQotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0Ci0gICAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLwotICAgICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOwotCi0gICAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgc2Z0cCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKLQotICAgICAgICAvKiBzaW5jZSB3ZSBkb24ndCByZWFsbHkgd2FpdCBmb3IgYW55dGhpbmcgYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0aGUKLSAgICAgICAgICAgc3RhdGUgbWFjaGluZSB0byBtb3ZlIG9uIGFzIHNvb24gYXMgcG9zc2libGUgc28gd2Ugc2V0IGEgdmVyeSBzaG9ydAotICAgICAgICAgICB0aW1lb3V0IGhlcmUgKi8KLSAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOwotCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVDoKLSAgICAgIGlmKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkgPiAxKSB7Ci0gICAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHNmdHBfc2NwLT5wYXRoICsgMTsgLyogaWdub3JlIHRoZSBsZWFkaW5nICcvJyAqLwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTOgotICAgICAgc3NoYy0+c2xhc2hfcG9zID0gc3RyY2hyKHNzaGMtPnNsYXNoX3BvcywgJy8nKTsKLSAgICAgIGlmKHNzaGMtPnNsYXNoX3BvcykgewotICAgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gMDsKLQotICAgICAgICBpbmZvZihkYXRhLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICclcydcbiIsIHNmdHBfc2NwLT5wYXRoKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUjoKLSAgICAgIC8qICdtb2RlJyAtIHBhcmFtZXRlciBpcyBwcmVsaW1pbmFyeSAtIGRlZmF1bHQgdG8gMDY0NCAqLwotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfbWtkaXJfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9ICcvJzsKLSAgICAgICsrc3NoYy0+c2xhc2hfcG9zOwotICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEFib3J0IGlmIGZhaWx1cmUgd2Fzbid0IHRoYXQgdGhlIGRpciBhbHJlYWR5IGV4aXN0cyBvciB0aGUKLSAgICAgICAgICogcGVybWlzc2lvbiB3YXMgZGVuaWVkIChjcmVhdGlvbiBtaWdodCBzdWNjZWVkIGZ1cnRoZXIgZG93biB0aGUKLSAgICAgICAgICogcGF0aCkgLSByZXRyeSBvbiB1bnNwZWNpZmljIEZBSUxVUkUgYWxzbwotICAgICAgICAgKi8KLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgaWYoKGVyciAhPSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFMpICYmCi0gICAgICAgICAgIChlcnIgIT0gTElCU1NIMl9GWF9GQUlMVVJFKSAmJgotICAgICAgICAgICAoZXJyICE9IExJQlNTSDJfRlhfUEVSTUlTU0lPTl9ERU5JRUQpKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfSU5JVDoKLSAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0gICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyoKLSAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQotICAgICAgICogbGlzdGluZwotICAgICAgICovCi0gICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTElCU1NIMl9TRlRQX09QRU5ESVIpOwotICAgICAgaWYoIXNzaGMtPnNmdHBfaGFuZGxlKSB7Ci0gICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQotICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7Ci0gICAgICBpZighc3NoYy0+cmVhZGRpcl9maWxlbmFtZSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7Ci0gICAgICBpZighc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcmVhZGRpcl9leChzc2hjLT5zZnRwX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9NQVgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX01BWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnJlYWRkaXJfYXR0cnMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA+IDApIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSAoc2l6ZV90KSByYzsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZVtzc2hjLT5yZWFkZGlyX2xlbl0gPSAnXDAnOwotCi0gICAgICAgIGlmKGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5KSB7Ci0gICAgICAgICAgY2hhciAqdG1wTGluZTsKLQotICAgICAgICAgIHRtcExpbmUgPSBhcHJpbnRmKCIlc1xuIiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgICAgaWYodG1wTGluZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcExpbmUsIHNzaGMtPnJlYWRkaXJfbGVuICsgMSk7Ci0gICAgICAgICAgZnJlZSh0bXBMaW5lKTsKLQotICAgICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIHNpbmNlIHRoaXMgY291bnRzIHdoYXQgd2Ugc2VuZCB0byB0aGUgY2xpZW50LCB3ZSBpbmNsdWRlIHRoZQotICAgICAgICAgICAgIG5ld2xpbmUgaW4gdGhpcyBjb3VudGVyICovCi0gICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBzc2hjLT5yZWFkZGlyX2xlbiArIDE7Ci0KLSAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCi0gICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9PVVQsIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuID0gODAgKyBzc2hjLT5yZWFkZGlyX2N1cnJMZW47Ci0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gY2FsbG9jKHNzaGMtPnJlYWRkaXJfdG90YWxMZW4sIDEpOwotICAgICAgICAgIGlmKCFzc2hjLT5yZWFkZGlyX2xpbmUpIHsKLSAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbWVtY3B5KHNzaGMtPnJlYWRkaXJfbGluZSwgc3NoYy0+cmVhZGRpcl9sb25nZW50cnksCi0gICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7Ci0gICAgICAgICAgaWYoKHNzaGMtPnJlYWRkaXJfYXR0cnMuZmxhZ3MgJiBMSUJTU0gyX1NGVFBfQVRUUl9QRVJNSVNTSU9OUykgJiYKLSAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMucGVybWlzc2lvbnMgJiBMSUJTU0gyX1NGVFBfU19JRk1UKSA9PQotICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU19JRkxOSykpIHsKLSAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPSBtYWxsb2MoUEFUSF9NQVggKyAxKTsKLSAgICAgICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPT0gTlVMTCkgewotICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoLCBQQVRIX01BWCwgIiVzJXMiLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfTElOSyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHJjID09IDApIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfRE9ORSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZWxzZSBpZihyYyA8IDApIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyA6OiAlZCIsCi0gICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpLAotICAgICAgICAgICAgICBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0xJTks6Ci0gICAgICByYyA9Ci0gICAgICAgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLCBMSUJTU0gyX1NGVFBfUkVBRExJTkspOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IChzaXplX3QpIHJjOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKLQotICAgICAgLyogZ2V0IHJvb20gZm9yIHRoZSBmaWxlbmFtZSBhbmQgZXh0cmEgb3V0cHV0ICovCi0gICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuICs9IDQgKyBzc2hjLT5yZWFkZGlyX2xlbjsKLSAgICAgIG5ld19yZWFkZGlyX2xpbmUgPSBDdXJsX3NhZmVyZWFsbG9jKHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOwotICAgICAgaWYoIW5ld19yZWFkZGlyX2xpbmUpIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gTlVMTDsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gbmV3X3JlYWRkaXJfbGluZTsKLQotICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NOgotICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sICJcbiIpOwotICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7Ci0KLSAgICAgIGlmKCFyZXN1bHQpIHsKLQotICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCi0gICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7Ci0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9saW5lLAotICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKLSAgICAgICAgfQotICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKLSAgICAgIH0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfRE9ORToKLSAgICAgIGlmKGxpYnNzaDJfc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2hhbmRsZSkgPT0KLSAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotCi0gICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUOgotICAgICAgLyoKLSAgICAgICAqIFdvcmsgb24gZ2V0dGluZyB0aGUgc3BlY2lmaWVkIGZpbGUKLSAgICAgICAqLwotICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPQotICAgICAgICBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfRlhGX1JFQUQsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX09QRU5GSUxFKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgewotICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KLSAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUOgotICAgIHsKLSAgICAgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIGF0dHJzOwotCi0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjIHx8Ci0gICAgICAgICAhKGF0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfU0laRSkgfHwKLSAgICAgICAgIChhdHRycy5maWxlc2l6ZSA9PSAwKSkgewotICAgICAgICAvKgotICAgICAgICAgKiBsaWJzc2gyX3NmdHBfb3BlbigpIGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKLSAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCi0gICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQotICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAotICAgICAgICAgKi8KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKLSAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7Ci0gICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMuZmlsZXNpemU7Ci0KLSAgICAgICAgaWYoc2l6ZSA8IDApIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICB9Ci0gICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgewotICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87Ci0gICAgICAgICAgY2hhciAqcHRyOwotICAgICAgICAgIGNoYXIgKnB0cjI7Ci0gICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKLSAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7Ci0KLSAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKLSAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpCi0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7Ci0gICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKLSAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKLSAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKQotICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOwotICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLwotICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgewotICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbV90KSB7Ci0gICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCi0gICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOwotICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIGF0dHJzLmZpbGVzaXplKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihmcm9tID4gdG8pIHsKLSAgICAgICAgICAgIGZyb20gPSB0bzsKLSAgICAgICAgICAgIHNpemUgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpemUgPSB0byAtIGZyb20gKyAxOwotICAgICAgICAgIH0KLQotICAgICAgICAgIFNGVFBfU0VFSyhjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBmcm9tKTsKLSAgICAgICAgfQotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7Ci0gICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKLSAgICAgIH0KLQotICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCi0gICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKLSAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KLSAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IC1kYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKLSAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKLSAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBhdHRycy5maWxlc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KLSAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBhdHRycy5maWxlc2l6ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCi0gICAgICAgICAgICAgICAgICAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCi0gICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgYXR0cnMuZmlsZXNpemUpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIERvZXMgYSBjb21wbGV0ZWQgZmlsZSBuZWVkIHRvIGJlIHNlZWtlZCBhbmQgc3RhcnRlZCBvciBjbG9zZWQgPyAqLwotICAgICAgICAvKiBOb3cgc3RvcmUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBhcmUgZXhwZWN0ZWQgdG8gZG93bmxvYWQgKi8KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBhdHRycy5maWxlc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSBhdHRycy5maWxlc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOwotICAgICAgICBTRlRQX1NFRUsoc3NoYy0+c2Z0cF9oYW5kbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBTZXR1cCB0aGUgYWN0dWFsIGRvd25sb2FkICovCi0gICAgaWYoZGF0YS0+cmVxLnNpemUgPT0gMCkgewotICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7Ci0gICAgICBpbmZvZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgZG93bmxvYWRlZFxuIik7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCBGSVJTVFNPQ0tFVCwgZGF0YS0+cmVxLnNpemUsIEZBTFNFLCAtMSk7Ci0KLSAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKLQotICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfcmVjZWl2aW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiByZWN2IGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLwotICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKLQotICAgIGlmKHJlc3VsdCkgewotICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXI7IHRoZSBjbG9zZSBzdGF0ZSBzaG91bGQgYmUgZW50ZXJlZAotICAgICAgICAgYXQgdGhlIHRpbWUgdGhlIGVycm9yIG9jY3VycyAqLwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DTE9TRToKLSAgICAgIGlmKHNzaGMtPnNmdHBfaGFuZGxlKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX2Nsb3NlKHNzaGMtPnNmdHBfaGFuZGxlKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBjbG9zZSBsaWJzc2gyIGZpbGU6ICVkICVzXG4iLCByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKLQotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTRlRQIERPTkUgZG9uZVxuIikpOwotCi0gICAgICAvKiBDaGVjayBpZiBuZXh0c3RhdGUgaXMgc2V0IGFuZCBtb3ZlIC5uZXh0c3RhdGUgY291bGQgYmUgUE9TVFFVT1RFX0lOSVQKLSAgICAgICAgIEFmdGVyIG5leHRzdGF0ZSBpcyBleGVjdXRlZCwgdGhlIGNvbnRyb2wgc2hvdWxkIGNvbWUgYmFjayB0bwotICAgICAgICAgU1NIX1NGVFBfQ0xPU0UgdG8gcGFzcyB0aGUgY29ycmVjdCByZXN1bHQgYmFjayAgKi8KLSAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUgJiYKLSAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfU0ZUUF9DTE9TRSkgewotICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9DTE9TRTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfU0hVVERPV046Ci0gICAgICAvKiBkdXJpbmcgdGltZXMgd2UgZ2V0IGhlcmUgZHVlIHRvIGEgYnJva2VuIHRyYW5zZmVyIGFuZCB0aGVuIHRoZQotICAgICAgICAgc2Z0cF9oYW5kbGUgbWlnaHQgbm90IGhhdmUgYmVlbiB0YWtlbiBkb3duIHNvIG1ha2Ugc3VyZSB0aGF0IGlzIGRvbmUKLSAgICAgICAgIGJlZm9yZSB3ZSBwcm9jZWVkICovCi0KLSAgICAgIGlmKHNzaGMtPnNmdHBfaGFuZGxlKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX2Nsb3NlKHNzaGMtPnNmdHBfaGFuZGxlKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwgJmVycl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBjbG9zZSBsaWJzc2gyIGZpbGU6ICVkICVzXG4iLCByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOwotICAgICAgfQotICAgICAgaWYoc3NoYy0+c2Z0cF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3NodXRkb3duKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBzdG9wIGxpYnNzaDIgc2Z0cCBzdWJzeXN0ZW1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIHNzaGMtPnNmdHBfc2Vzc2lvbiA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7Ci0gICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9UUkFOU19JTklUOgotICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKLSAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA8IDApIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU0NQIHJlcXVpcmVzIGEga25vd24gZmlsZSBzaXplIGZvciB1cGxvYWQiKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9VUExPQURfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET1dOTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX1VQTE9BRF9JTklUOgotICAgICAgLyoKLSAgICAgICAqIGxpYnNzaDIgcmVxdWlyZXMgdGhhdCB0aGUgZGVzdGluYXRpb24gcGF0aCBpcyBhIGZ1bGwgcGF0aCB0aGF0Ci0gICAgICAgKiBpbmNsdWRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSBhbmQgbmFtZSBPUiBlbmRzIGluIGEgIi8iIC4gIElmIHRoaXMgaXMKLSAgICAgICAqIG5vdCBkb25lIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHdpbGwgYmUgbmFtZWQgdGhlIHNhbWUgbmFtZSBhcyB0aGUgbGFzdAotICAgICAgICogZGlyZWN0b3J5IGluIHRoZSBwYXRoLgotICAgICAgICovCi0gICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9Ci0gICAgICAgIFNDUF9TRU5EKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zLAotICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKLSAgICAgIGlmKCFzc2hjLT5zc2hfY2hhbm5lbCkgewotICAgICAgICBpbnQgc3NoX2VycjsKLSAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0KLSAgICAgICAgaWYobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pID09Ci0gICAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaF9lcnIgPSAoaW50KShsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKSk7Ci0gICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoc3NoX2Vycik7Ci0gICAgICAgIC8qIE1hcCBnZW5lcmljIGVycm9ycyB0byB1cGxvYWQgZmFpbGVkICovCi0gICAgICAgIGlmKHNzaGMtPmFjdHVhbGNvZGUgPT0gQ1VSTEVfU1NIIHx8Ci0gICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPT0gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EKQotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9VUExPQURfRkFJTEVEOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogdXBsb2FkIGRhdGEgKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgRklSU1RTT0NLRVQpOwotCi0gICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOwotCi0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKLSAgICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCi0gICAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247Ci0KLSAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiBzY3Agc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKLSAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7Ci0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKLSAgICB7Ci0gICAgICBjdXJsX29mZl90IGJ5dGVjb3VudDsKLQotICAgICAgLyoKLSAgICAgICAqIFdlIG11c3QgY2hlY2sgdGhlIHJlbW90ZSBmaWxlOyBpZiBpdCBpcyBhIGRpcmVjdG9yeSBubyB2YWx1ZXMgd2lsbAotICAgICAgICogYmUgc2V0IGluIHNiCi0gICAgICAgKi8KLQotICAgICAgLyoKLSAgICAgICAqIElmIHN1cHBvcnQgZm9yID4yR0IgZmlsZXMgZXhpc3RzLCB1c2UgaXQuCi0gICAgICAgKi8KLQotICAgICAgLyogZ2V0IGEgZnJlc2ggbmV3IGNoYW5uZWwgZnJvbSB0aGUgc3NoIGxheWVyICovCi0jaWYgTElCU1NIMl9WRVJTSU9OX05VTSA8IDB4MDEwNzAwCi0gICAgICBzdHJ1Y3Qgc3RhdCBzYjsKLSAgICAgIG1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOwotICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2KHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdHBfc2NwLT5wYXRoLCAmc2IpOwotI2Vsc2UKLSAgICAgIGxpYnNzaDJfc3RydWN0X3N0YXQgc2I7Ci0gICAgICBtZW1zZXQoJnNiLCAwLCBzaXplb2YobGlic3NoMl9zdHJ1Y3Rfc3RhdCkpOwotICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2Mihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsICZzYik7Ci0jZW5kaWYKLQotICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIGludCBzc2hfZXJyOwotICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLQotICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KLSAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLQotICAgICAgICBzc2hfZXJyID0gKGludCkobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCkpOwotICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaF9lcnIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogZG93bmxvYWQgZGF0YSAqLwotICAgICAgYnl0ZWNvdW50ID0gKGN1cmxfb2ZmX3Qpc2Iuc3Rfc2l6ZTsKLSAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9ICAoY3VybF9vZmZfdClzYi5zdF9zaXplOwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCBGSVJTVFNPQ0tFVCwgYnl0ZWNvdW50LCBGQUxTRSwgLTEpOwotCi0gICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOwotCi0gICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3JlY2VpdmluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiByZWN2IGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47Ci0KLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfRE9ORToKLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfU0VORF9FT0YpOwotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9TRU5EX0VPRjoKLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX3NlbmRfZW9mKHNzaGMtPnNzaF9jaGFubmVsKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYykgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgbGlic3NoMiBjaGFubmVsIEVPRjogJWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1dBSVRfRU9GKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX1dBSVRfRU9GOgotICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd2FpdF9lb2Yoc3NoYy0+c3NoX2NoYW5uZWwpOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjKSB7Ci0gICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZ2V0IGNoYW5uZWwgRU9GOiAlZCAlc1xuIiwgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1dBSVRfQ0xPU0UpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfV0FJVF9DTE9TRToKLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX3dhaXRfY2xvc2VkKHNzaGMtPnNzaF9jaGFubmVsKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYykgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiQ2hhbm5lbCBmYWlsZWQgdG8gY2xvc2U6ICVkICVzXG4iLCByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX0NIQU5ORUxfRlJFRToKLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX2ZyZWUoc3NoYy0+c3NoX2NoYW5uZWwpOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZyZWUgbGlic3NoMiBzY3Agc3Vic3lzdGVtOiAlZCAlc1xuIiwKLSAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBOVUxMOwotICAgICAgfQotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTQ1AgRE9ORSBwaGFzZSBjb21wbGV0ZVxuIikpOwotI2lmIDAgLyogUFJFViAqLwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7Ci0jZW5kaWYKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NFU1NJT05fRElTQ09OTkVDVDoKLSAgICAgIC8qIGR1cmluZyB3ZWlyZCB0aW1lcyB3aGVuIHdlJ3ZlIGJlZW4gcHJlbWF0dXJlbHkgYWJvcnRlZCwgdGhlIGNoYW5uZWwKLSAgICAgICAgIGlzIHN0aWxsIGFsaXZlIHdoZW4gd2UgcmVhY2ggdGhpcyBzdGF0ZSBhbmQgd2UgTVVTVCBraWxsIHRoZSBjaGFubmVsCi0gICAgICAgICBwcm9wZXJseSBmaXJzdCAqLwotICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfZnJlZShzc2hjLT5zc2hfY2hhbm5lbCk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNjcCBzdWJzeXN0ZW06ICVkICVzXG4iLAotICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKLSAgICAgICAgfQotICAgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHNzaGMtPnNzaF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX2Rpc2Nvbm5lY3Qoc3NoYy0+c3NoX3Nlc3Npb24sICJTaHV0ZG93biIpOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGRpc2Nvbm5lY3QgbGlic3NoMiBzZXNzaW9uOiAlZCAlc1xuIiwKLSAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKLSAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0VTU0lPTl9GUkVFOgotI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCi0gICAgICBpZihzc2hjLT5raCkgewotICAgICAgICBsaWJzc2gyX2tub3duaG9zdF9mcmVlKHNzaGMtPmtoKTsKLSAgICAgICAgc3NoYy0+a2ggPSBOVUxMOwotICAgICAgfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICBpZihzc2hjLT5zc2hfYWdlbnQpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2Rpc2Nvbm5lY3Qoc3NoYy0+c3NoX2FnZW50KTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBkaXNjb25uZWN0IGZyb20gbGlic3NoMiBhZ2VudDogJWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIGxpYnNzaDJfYWdlbnRfZnJlZShzc2hjLT5zc2hfYWdlbnQpOwotICAgICAgICBzc2hjLT5zc2hfYWdlbnQgPSBOVUxMOwotCi0gICAgICAgIC8qIE5COiB0aGVyZSBpcyBubyBuZWVkIHRvIGZyZWUgaWRlbnRpdGllcywgdGhleSBhcmUgcGFydCBvZiBpbnRlcm5hbAotICAgICAgICAgICBhZ2VudCBzdHVmZiAqLwotICAgICAgICBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eSA9IE5VTEw7Ci0gICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkgPSBOVUxMOwotICAgICAgfQotI2VuZGlmCi0KLSAgICAgIGlmKHNzaGMtPnNzaF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX2ZyZWUoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZyZWUgbGlic3NoMiBzZXNzaW9uOiAlZCAlc1xuIiwgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIHNzaGMtPnNzaF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgLyogd29yc3QtY2FzZSBzY2VuYXJpbyBjbGVhbnVwICovCi0KLSAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9zZXNzaW9uID09IE5VTEwpOwotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c3NoX2NoYW5uZWwgPT0gTlVMTCk7Ci0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zZnRwX3Nlc3Npb24gPT0gTlVMTCk7Ci0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zZnRwX2hhbmRsZSA9PSBOVUxMKTsKLSNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+a2ggPT0gTlVMTCk7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfYWdlbnQgPT0gTlVMTCk7Ci0jZW5kaWYKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmUpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKLQotICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLwotICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKLQotICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKLQotICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7Ci0gICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7IC8qIGN1cnJlbnQgKi8KLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfUVVJVDoKLSAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCi0gICAgZGVmYXVsdDoKLSAgICAgIC8qIGludGVybmFsIGVycm9yICovCi0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgfSB3aGlsZSghcmMgJiYgKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSk7Ci0KLSAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAvKiB3ZSB3b3VsZCBibG9jaywgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlIHJlYWR5IChpbiB0aGUKLSAgICAgICByaWdodCBkaXJlY3Rpb24gdG9vKSEgKi8KLSAgICAqYmxvY2sgPSBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKSB0byB3YWl0IGZvciBhbmQKLSAgIGZvciB3aGF0IGFjdGlvbnMgaW4gdGhlIERPX0RPTkUsIFBFUkZPUk0gYW5kIFdBSVRQRVJGT1JNIHN0YXRlcyAqLwotc3RhdGljIGludCBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrLCAvKiBwb2ludHMgdG8gbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLXsKLSNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9CTE9DS19ESVJFQ1RJT04KLSAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7Ci0gICh2b2lkKW51bXNvY2tzOwotCi0gIHNvY2tbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9SRUNWKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9TRU5EKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7Ci0KLSAgcmV0dXJuIGJpdG1hcDsKLSNlbHNlCi0gIC8qIGlmIHdlIGRvbid0IGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpCi0gICAgIGZ1bmN0aW9uIGV2ZW4gZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KLSAgcmV0dXJuIEN1cmxfc2luZ2xlX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOwotI2VuZGlmCi19Ci0KLS8qIEdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKQotICAgdG8gd2FpdCBmb3IgYW5kIGZvciB3aGF0IGFjdGlvbnMgZHVyaW5nIHRoZSBET0lORyBhbmQgUFJPVE9DT05ORUNUIHN0YXRlcyovCi1zdGF0aWMgaW50IHNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLXsKLSNpZm5kZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCi0gICh2b2lkKWNvbm47Ci0gICh2b2lkKXNvY2s7Ci0gICh2b2lkKW51bXNvY2tzOwotICAvKiBpZiB3ZSBkb24ndCBrbm93IGFueSBkaXJlY3Rpb24gd2UgY2FuIGp1c3QgcGxheSBhbG9uZyBhcyB3ZSB1c2VkIHRvIGFuZAotICAgICBub3QgcHJvdmlkZSBhbnkgc2Vuc2libGUgaW5mbyAqLwotICByZXR1cm4gR0VUU09DS19CTEFOSzsKLSNlbHNlCi0gIC8qIGlmIHdlIGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpIGZ1bmN0aW9uIGV2ZW4KLSAgICAgZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KLSAgcmV0dXJuIHNzaF9wZXJmb3JtX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9CTE9DS19ESVJFQ1RJT04KLS8qCi0gKiBXaGVuIG9uZSBvZiB0aGUgbGlic3NoMiBmdW5jdGlvbnMgaGFzIHJldHVybmVkIExJQlNTSDJfRVJST1JfRUFHQUlOIHRoaXMKLSAqIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZmlndXJlIG91dCBpbiB3aGF0IGRpcmVjdGlvbiBhbmQgc3RvcmVzIHRoaXMgaW5mbyBzbwotICogdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBpdC4gTWFrZSBzdXJlIHRvIGNhbGwgdGhpcwotICogZnVuY3Rpb24gaW4gYWxsIGNhc2VzIHNvIHRoYXQgd2hlbiBpdCBfZG9lc24ndF8gcmV0dXJuIEVBR0FJTiB3ZSBjYW4KLSAqIHJlc3RvcmUgdGhlIGRlZmF1bHQgd2FpdCBiaXRzLgotICovCi1zdGF0aWMgdm9pZCBzc2hfYmxvY2syd2FpdGZvcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgYmxvY2spCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBpbnQgZGlyID0gMDsKLSAgaWYoYmxvY2spIHsKLSAgICBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgaWYoZGlyKSB7Ci0gICAgICAvKiB0cmFuc2xhdGUgdGhlIGxpYnNzaDIgZGVmaW5lIGJpdHMgaW50byBvdXIgb3duIGJpdCBkZWZpbmVzICovCi0gICAgICBjb25uLT53YWl0Zm9yID0gKChkaXImTElCU1NIMl9TRVNTSU9OX0JMT0NLX0lOQk9VTkQpP0tFRVBfUkVDVjowKSB8Ci0gICAgICAgICgoZGlyJkxJQlNTSDJfU0VTU0lPTl9CTE9DS19PVVRCT1VORCk/S0VFUF9TRU5EOjApOwotICAgIH0KLSAgfQotICBpZighZGlyKQotICAgIC8qIEl0IGRpZG4ndCBibG9jayBvciBsaWJzc2gyIGRpZG4ndCByZXZlYWwgaW4gd2hpY2ggZGlyZWN0aW9uLCBwdXQgYmFjawotICAgICAgIHRoZSBvcmlnaW5hbCBzZXQgKi8KLSAgICBjb25uLT53YWl0Zm9yID0gc3NoYy0+b3JpZ193YWl0Zm9yOwotfQotI2Vsc2UKLSAgLyogbm8gbGlic3NoMiBkaXJlY3Rpb25hbCBzdXBwb3J0IHNvIHdlIHNpbXBseSBkb24ndCBrbm93ICovCi0jZGVmaW5lIHNzaF9ibG9jazJ3YWl0Zm9yKHgseSkgQ3VybF9ub3Bfc3RtdAotI2VuZGlmCi0KLS8qIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgZnJvbSBtdWx0aS5jICovCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgYm9vbCBibG9jazsgLyogd2Ugc3RvcmUgdGhlIHN0YXR1cyBhbmQgdXNlIHRoYXQgdG8gcHJvdmlkZSBhIHNzaF9nZXRzb2NrKCkKLSAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKi8KLSAgZG8gewotICAgIHJlc3VsdCA9IHNzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7Ci0gICAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOwotICAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IsIGl0IGlzbid0IGRvbmUgYW5kIGl0IGRpZG4ndCBFV09VTERCTE9DSywgdGhlbgotICAgICAgIHRyeSBhZ2FpbiAqLwotICB9IHdoaWxlKCFyZXN1bHQgJiYgISpkb25lICYmICFibG9jayk7Ci0gIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIGJsb2NrKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2Jsb2NrX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRpc2Nvbm5lY3QpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7Ci0gICAgYm9vbCBibG9jazsKLSAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOwotICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotCi0gICAgcmVzdWx0ID0gc3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICBicmVhazsKLQotICAgIGlmKCFkaXNjb25uZWN0KSB7Ci0gICAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCi0gICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwotCi0gICAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKLSAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGxlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIEZBTFNFKTsKLSAgICAgIGlmKGxlZnQgPCAwKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0Iik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgICB9Ci0gICAgfQotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCi0gICAgaWYoIXJlc3VsdCAmJiBibG9jaykgewotICAgICAgaW50IGRpciA9IGxpYnNzaDJfc2Vzc2lvbl9ibG9ja19kaXJlY3Rpb25zKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwotICAgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gQ1VSTF9TT0NLRVRfQkFEOwotICAgICAgY3VybF9zb2NrZXRfdCBmZF93cml0ZSA9IENVUkxfU09DS0VUX0JBRDsKLSAgICAgIGlmKExJQlNTSDJfU0VTU0lPTl9CTE9DS19JTkJPVU5EICYgZGlyKQotICAgICAgICBmZF9yZWFkID0gc29jazsKLSAgICAgIGlmKExJQlNTSDJfU0VTU0lPTl9CTE9DS19PVVRCT1VORCAmIGRpcikKLSAgICAgICAgZmRfd3JpdGUgPSBzb2NrOwotICAgICAgLyogd2FpdCBmb3IgdGhlIHNvY2tldCB0byBiZWNvbWUgcmVhZHkgKi8KLSAgICAgICh2b2lkKUN1cmxfc29ja2V0X2NoZWNrKGZkX3JlYWQsIENVUkxfU09DS0VUX0JBRCwgZmRfd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0PjEwMDA/MTAwMDpsZWZ0KTsgLyogaWdub3JlIHJlc3VsdCAqLwotICAgIH0KLSNlbmRpZgotCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogU1NIIHNldHVwIGFuZCBjb25uZWN0aW9uCi0gKi8KLXN0YXRpYyBDVVJMY29kZSBzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIHN0cnVjdCBTU0hQUk9UTyAqc3NoOwotCi0gIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOwotICBpZighc3NoKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIEN1cmxfcmVjdiBzY3BfcmVjdiwgc2Z0cF9yZWN2Owotc3RhdGljIEN1cmxfc2VuZCBzY3Bfc2VuZCwgc2Z0cF9zZW5kOwotCi0vKgotICogQ3VybF9zc2hfY29ubmVjdCgpIGdldHMgY2FsbGVkIGZyb20gQ3VybF9wcm90b2NvbF9jb25uZWN0KCkgdG8gYWxsb3cgdXMgdG8KLSAqIGRvIHByb3RvY29sLXNwZWNpZmljIGFjdGlvbnMgYXQgY29ubmVjdC10aW1lLgotICovCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQotewotI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRwotICBjdXJsX3NvY2tldF90IHNvY2s7Ci0jZW5kaWYKLSAgc3RydWN0IHNzaF9jb25uICpzc2g7Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgLyogaW5pdGlhbGl6ZSBwZXItaGFuZGxlIGRhdGEgaWYgbm90IGFscmVhZHkgKi8KLSAgaWYoIWRhdGEtPnJlcS5wcm90b3ApCi0gICAgc3NoX3NldHVwX2Nvbm5lY3Rpb24oY29ubik7Ci0KLSAgLyogV2UgZGVmYXVsdCB0byBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiBXZSBzZXQgdGhpcyBhbHJlYWR5IGluIHRoaXMgY29ubmVjdAotICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCi0gIGNvbm5rZWVwKGNvbm4sICJTU0ggZGVmYXVsdCIpOwotCi0gIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgewotICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2NwX3JlY3Y7Ci0gICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzY3Bfc2VuZDsKLSAgfQotICBlbHNlIHsKLSAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNmdHBfcmVjdjsKLSAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNmdHBfc2VuZDsKLSAgfQotICBzc2ggPSAmY29ubi0+cHJvdG8uc3NoYzsKLQotI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRwotICBpZihjb25uLT51c2VyKSB7Ci0gICAgaW5mb2YoZGF0YSwgIlVzZXI6ICVzXG4iLCBjb25uLT51c2VyKTsKLSAgfQotICBpZihjb25uLT5wYXNzd2QpIHsKLSAgICBpbmZvZihkYXRhLCAiUGFzc3dvcmQ6ICVzXG4iLCBjb25uLT5wYXNzd2QpOwotICB9Ci0gIHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSNlbmRpZiAvKiBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLQotICBzc2gtPnNzaF9zZXNzaW9uID0gbGlic3NoMl9zZXNzaW9uX2luaXRfZXgobXlfbGlic3NoMl9tYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV9saWJzc2gyX2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV9saWJzc2gyX3JlYWxsb2MsIGNvbm4pOwotICBpZihzc2gtPnNzaF9zZXNzaW9uID09IE5VTEwpIHsKLSAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBpbml0aWFsaXNpbmcgc3NoIHNlc3Npb24iKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gIH0KLQotICBpZihkYXRhLT5zZXQuc3NoX2NvbXByZXNzaW9uKSB7Ci0jaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwOAotICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9mbGFnKHNzaC0+c3NoX3Nlc3Npb24sIExJQlNTSDJfRkxBR19DT01QUkVTUywgMSkgPCAwKQotI2VuZGlmCi0gICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGVuYWJsZSBjb21wcmVzc2lvbiBmb3Igc3NoIHNlc3Npb25cbiIpOwotICB9Ci0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pIHsKLSAgICBpbnQgcmM7Ci0gICAgc3NoLT5raCA9IGxpYnNzaDJfa25vd25ob3N0X2luaXQoc3NoLT5zc2hfc2Vzc2lvbik7Ci0gICAgaWYoIXNzaC0+a2gpIHsKLSAgICAgIGxpYnNzaDJfc2Vzc2lvbl9mcmVlKHNzaC0+c3NoX3Nlc3Npb24pOwotICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICAgIH0KLQotICAgIC8qIHJlYWQgYWxsIGtub3duIGhvc3RzIGZyb20gdGhlcmUgKi8KLSAgICByYyA9IGxpYnNzaDJfa25vd25ob3N0X3JlYWRmaWxlKHNzaC0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9GSUxFX09QRU5TU0gpOwotICAgIGlmKHJjIDwgMCkKLSAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBrbm93biBob3N0cyBmcm9tICVzXG4iLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgfQotI2VuZGlmIC8qIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJICovCi0KLSNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKLSAgbGlic3NoMl90cmFjZShzc2gtPnNzaF9zZXNzaW9uLCB+MCk7Ci0gIGluZm9mKGRhdGEsICJTU0ggc29ja2V0OiAlZFxuIiwgKGludClzb2NrKTsKLSNlbmRpZiAvKiBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLQotICBzdGF0ZShjb25uLCBTU0hfSU5JVCk7Ci0KLSAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogc2NwX3BlcmZvcm0oKQotICoKLSAqIFRoaXMgaXMgdGhlIGFjdHVhbCBETyBmdW5jdGlvbiBmb3IgU0NQLiBHZXQgYSBmaWxlIGFjY29yZGluZyB0bwotICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KLSAqLwotCi1zdGF0aWMKLUNVUkxjb2RlIHNjcF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIHN0YXJ0c1xuIikpOwotCi0gICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgLyogbm90IGRvbmUgeWV0ICovCi0KLSAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCi0gIHN0YXRlKGNvbm4sIFNTSF9TQ1BfVFJBTlNfSU5JVCk7Ci0KLSAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCi0gIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLwotc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0gIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBUaGUgRE8gZnVuY3Rpb24gaXMgZ2VuZXJpYyBmb3IgYm90aCBwcm90b2NvbHMuIFRoZXJlIHdhcyBwcmV2aW91c2x5IHR3bwotICogc2VwYXJhdGUgb25lcyBidXQgdGhpcyB3YXkgbWVhbnMgbGVzcyBkdXBsaWNhdGVkIGNvZGUuCi0gKi8KLQotc3RhdGljIENVUkxjb2RlIHNzaF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBjb25uZWN0ZWQgPSAwOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgKmRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBmYWxzZSAqLwotCi0gIGRhdGEtPnJlcS5zaXplID0gLTE7IC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLwotCi0gIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PSzsgLyogcmVzZXQgZXJyb3IgY29kZSAqLwotICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMDsgICAvKiByZXNldCB0aGUgY3JlYXRlIGRpciBhdHRlbXB0IHN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICovCi0KLSAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCAwKTsKLSAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIDApOwotICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIC0xKTsKLSAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKLQotICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TQ1ApCi0gICAgcmVzdWx0ID0gc2NwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgIGRvbmUpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gc2Z0cF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsICBkb25lKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KLSAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCi0gICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247Ci0KLSAgaWYoc3NoLT5zc2hfc2Vzc2lvbikgewotICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KLQotICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwotCi0gICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGdlbmVyaWMgZG9uZSBmdW5jdGlvbiBmb3IgYm90aCBTQ1AgYW5kIFNGVFAgY2FsbGVkIGZyb20gdGhlaXIgc3BlY2lmaWMKLSAgIGRvbmUgZnVuY3Rpb25zICovCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3QgU1NIUFJPVE8gKnNmdHBfc2NwID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKLQotICBpZighc3RhdHVzKSB7Ci0gICAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCi0gICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7Ci0gIH0KLSAgZWxzZQotICAgIHJlc3VsdCA9IHN0YXR1czsKLQotICBpZihzZnRwX3NjcCkKLSAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKLSAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKLSAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKLQotICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCi17Ci0gICh2b2lkKXByZW1hdHVyZTsgLyogbm90IHVzZWQgKi8KLQotICBpZighc3RhdHVzKQotICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9ORSk7Ci0KLSAgcmV0dXJuIHNzaF9kb25lKGNvbm4sIHN0YXR1cyk7Ci0KLX0KLQotc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG53cml0ZTsKLSAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLwotCi0gIC8qIGxpYnNzaDJfY2hhbm5lbF93cml0ZSgpIHJldHVybnMgaW50ISAqLwotICBud3JpdGUgPSAoc3NpemVfdCkKLSAgICBsaWJzc2gyX2NoYW5uZWxfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOwotCi0gIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOwotCi0gIGlmKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICplcnIgPSBDVVJMRV9BR0FJTjsKLSAgICBud3JpdGUgPSAwOwotICB9Ci0gIGVsc2UgaWYobndyaXRlIDwgTElCU1NIMl9FUlJPUl9OT05FKSB7Ci0gICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW53cml0ZSk7Ci0gICAgbndyaXRlID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbndyaXRlOwotfQotCi1zdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCi17Ci0gIHNzaXplX3QgbnJlYWQ7Ci0gICh2b2lkKXNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KLQotICAvKiBsaWJzc2gyX2NoYW5uZWxfcmVhZCgpIHJldHVybnMgaW50ICovCi0gIG5yZWFkID0gKHNzaXplX3QpCi0gICAgbGlic3NoMl9jaGFubmVsX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOwotCi0gIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7Ci0gIGlmKG5yZWFkID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIG5yZWFkID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbnJlYWQ7Ci19Ci0KLS8qCi0gKiA9PT09PT09PT09PT09PT0gU0ZUUCA9PT09PT09PT09PT09PT0KLSAqLwotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogc2Z0cF9wZXJmb3JtKCkKLSAqCi0gKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNGVFAuIEdldCBhIGZpbGUvZGlyZWN0b3J5IGFjY29yZGluZyB0bwotICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KLSAqLwotCi1zdGF0aWMKLUNVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKLQotICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLwotCi0gIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLwotICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9JTklUKTsKLQotICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KLSAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOwotCi0gICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOwotCi0gIGlmKCpkb3BoYXNlX2RvbmUpIHsKLSAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgotICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKLSAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247Ci0KLSAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7Ci0KLSAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgewotICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7Ci0gICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1QgaXMgZG9uZVxuIikpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLX0KLQotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgaWYoIXN0YXR1cykgewotICAgIC8qIFBvc3QgcXVvdGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBTRlRQX0NMT1NFIHN0YXRlIHRvIGF2b2lkCi0gICAgICAgZXJyb3JzIHRoYXQgY291bGQgaGFwcGVuIGR1ZSB0byBvcGVuIGZpbGUgaGFuZGxlcyBkdXJpbmcgUE9TVFFVT1RFCi0gICAgICAgb3BlcmF0aW9uICovCi0gICAgaWYoIXByZW1hdHVyZSAmJiBjb25uLT5kYXRhLT5zZXQucG9zdHF1b3RlICYmICFjb25uLT5iaXRzLnJldHJ5KQotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ7Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICB9Ci0gIHJldHVybiBzc2hfZG9uZShjb25uLCBzdGF0dXMpOwotfQotCi0vKiByZXR1cm4gbnVtYmVyIG9mIHNlbnQgYnl0ZXMgKi8KLXN0YXRpYyBzc2l6ZV90IHNmdHBfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG53cml0ZTsgICAvKiBsaWJzc2gyX3NmdHBfd3JpdGUoKSB1c2VkIHRvIHJldHVybiBzaXplX3QgaW4gMC4xNAotICAgICAgICAgICAgICAgICAgICAgICBidXQgaXMgY2hhbmdlZCB0byBzc2l6ZV90IGluIDAuMTUuIFRoZXNlIGRheXMgd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBsaWJzc2gyIDAuMTUqLwotICAodm9pZClzb2NraW5kZXg7Ci0KLSAgbndyaXRlID0gbGlic3NoMl9zZnRwX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9oYW5kbGUsIG1lbSwgbGVuKTsKLQotICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKT9UUlVFOkZBTFNFKTsKLQotICBpZihud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgbndyaXRlID0gMDsKLSAgfQotICBlbHNlIGlmKG53cml0ZSA8IExJQlNTSDJfRVJST1JfTk9ORSkgewotICAgICplcnIgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoKGludClud3JpdGUpOwotICAgIG53cml0ZSA9IC0xOwotICB9Ci0KLSAgcmV0dXJuIG53cml0ZTsKLX0KLQotLyoKLSAqIFJldHVybiBudW1iZXIgb2YgcmVjZWl2ZWQgKGRlY3J5cHRlZCkgYnl0ZXMKLSAqIG9yIDwwIG9uIGVycm9yCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHNmdHBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG5yZWFkOwotICAodm9pZClzb2NraW5kZXg7Ci0KLSAgbnJlYWQgPSBsaWJzc2gyX3NmdHBfcmVhZChjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBtZW0sIGxlbik7Ci0KLSAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG5yZWFkID09IExJQlNTSDJfRVJST1JfRUFHQUlOKT9UUlVFOkZBTFNFKTsKLQotICBpZihucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICplcnIgPSBDVVJMRV9BR0FJTjsKLSAgICBucmVhZCA9IC0xOwotCi0gIH0KLSAgZWxzZSBpZihucmVhZCA8IDApIHsKLSAgICAqZXJyID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKChpbnQpbnJlYWQpOwotICB9Ci0gIHJldHVybiBucmVhZDsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnNmdHBfbGlic3NoMl9zdHJlcnJvcihpbnQgZXJyKQotewotICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NVQ0hfRklMRToKLSAgICAgIHJldHVybiAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfUEVSTUlTU0lPTl9ERU5JRUQ6Ci0gICAgICByZXR1cm4gIlBlcm1pc3Npb24gZGVuaWVkIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9GQUlMVVJFOgotICAgICAgcmV0dXJuICJPcGVyYXRpb24gZmFpbGVkIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9CQURfTUVTU0FHRToKLSAgICAgIHJldHVybiAiQmFkIG1lc3NhZ2UgZnJvbSBTRlRQIHNlcnZlciI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTk9fQ09OTkVDVElPTjoKLSAgICAgIHJldHVybiAiTm90IGNvbm5lY3RlZCB0byBTRlRQIHNlcnZlciI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfQ09OTkVDVElPTl9MT1NUOgotICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHRvIFNGVFAgc2VydmVyIGxvc3QiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX09QX1VOU1VQUE9SVEVEOgotICAgICAgcmV0dXJuICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBTRlRQIHNlcnZlciI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfSU5WQUxJRF9IQU5ETEU6Ci0gICAgICByZXR1cm4gIkludmFsaWQgaGFuZGxlIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX1BBVEg6Ci0gICAgICByZXR1cm4gIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFM6Ci0gICAgICByZXR1cm4gIkZpbGUgYWxyZWFkeSBleGlzdHMiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1dSSVRFX1BST1RFQ1Q6Ci0gICAgICByZXR1cm4gIkZpbGUgaXMgd3JpdGUgcHJvdGVjdGVkIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT19NRURJQToKLSAgICAgIHJldHVybiAiTm8gbWVkaWEiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NQQUNFX09OX0ZJTEVTWVNURU06Ci0gICAgICByZXR1cm4gIkRpc2sgZnVsbCI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfUVVPVEFfRVhDRUVERUQ6Ci0gICAgICByZXR1cm4gIlVzZXIgcXVvdGEgZXhjZWVkZWQiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1VOS05PV05fUFJJTkNJUExFOgotICAgICAgcmV0dXJuICJVbmtub3duIHByaW5jaXBsZSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTE9DS19DT05GbElDVDoKLSAgICAgIHJldHVybiAiRmlsZSBsb2NrIGNvbmZsaWN0IjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9ESVJfTk9UX0VNUFRZOgotICAgICAgcmV0dXJuICJEaXJlY3Rvcnkgbm90IGVtcHR5IjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT1RfQV9ESVJFQ1RPUlk6Ci0gICAgICByZXR1cm4gIk5vdCBhIGRpcmVjdG9yeSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfSU5WQUxJRF9GSUxFTkFNRToKLSAgICAgIHJldHVybiAiSW52YWxpZCBmaWxlbmFtZSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTElOS19MT09QOgotICAgICAgcmV0dXJuICJMaW5rIHBvaW50cyB0byBpdHNlbGYiOwotICB9Ci0gIHJldHVybiAiVW5rbm93biBlcnJvciBpbiBsaWJzc2gyIjsKLX0KLQotI2VuZGlmIC8qIFVTRV9MSUJTU0gyICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2guaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjIwYWFjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfU1NIX0gKLSNkZWZpbmUgSEVBREVSX0NVUkxfU1NIX0gKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotI2lmIGRlZmluZWQoSEFWRV9MSUJTU0gyX0gpCi0jaW5jbHVkZSA8bGlic3NoMi5oPgotI2luY2x1ZGUgPGxpYnNzaDJfc2Z0cC5oPgotI2VsaWYgZGVmaW5lZChIQVZFX0xJQlNTSF9MSUJTU0hfSCkKLSNpbmNsdWRlIDxsaWJzc2gvbGlic3NoLmg+Ci0jaW5jbHVkZSA8bGlic3NoL3NmdHAuaD4KLSNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfSCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU1NIIHVuaXF1ZSBzZXR1cAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgZW51bSB7Ci0gIFNTSF9OT19TVEFURSA9IC0xLCAgLyogVXNlZCBmb3IgIm5leHRTdGF0ZSIgc28gc2F5IHRoZXJlIGlzIG5vbmUgKi8KLSAgU1NIX1NUT1AgPSAwLCAgICAgICAvKiBkbyBub3RoaW5nIHN0YXRlLCBzdG9wcyB0aGUgc3RhdGUgbWFjaGluZSAqLwotCi0gIFNTSF9JTklULCAgICAgICAgICAgLyogRmlyc3Qgc3RhdGUgaW4gU1NILUNPTk5FQ1QgKi8KLSAgU1NIX1NfU1RBUlRVUCwgICAgICAvKiBTZXNzaW9uIHN0YXJ0dXAgKi8KLSAgU1NIX0hPU1RLRVksICAgICAgICAvKiB2ZXJpZnkgaG9zdGtleSAqLwotICBTU0hfQVVUSExJU1QsCi0gIFNTSF9BVVRIX1BLRVlfSU5JVCwKLSAgU1NIX0FVVEhfUEtFWSwKLSAgU1NIX0FVVEhfUEFTU19JTklULAotICBTU0hfQVVUSF9QQVNTLAotICBTU0hfQVVUSF9BR0VOVF9JTklULCAvKiBpbml0aWFsaXplIHRoZW4gd2FpdCBmb3IgY29ubmVjdGlvbiB0byBhZ2VudCAqLwotICBTU0hfQVVUSF9BR0VOVF9MSVNULCAvKiBhc2sgZm9yIGxpc3QgdGhlbiB3YWl0IGZvciBlbnRpcmUgbGlzdCB0byBjb21lICovCi0gIFNTSF9BVVRIX0FHRU5ULCAgICAgIC8qIGF0dGVtcHQgb25lIGtleSBhdCBhIHRpbWUgKi8KLSAgU1NIX0FVVEhfSE9TVF9JTklULAotICBTU0hfQVVUSF9IT1NULAotICBTU0hfQVVUSF9LRVlfSU5JVCwKLSAgU1NIX0FVVEhfS0VZLAotICBTU0hfQVVUSF9HU1NBUEksCi0gIFNTSF9BVVRIX0RPTkUsCi0gIFNTSF9TRlRQX0lOSVQsCi0gIFNTSF9TRlRQX1JFQUxQQVRILCAgIC8qIExhc3Qgc3RhdGUgaW4gU1NILUNPTk5FQ1QgKi8KLQotICBTU0hfU0ZUUF9RVU9URV9JTklULCAvKiBGaXJzdCBzdGF0ZSBpbiBTRlRQLURPICovCi0gIFNTSF9TRlRQX1BPU1RRVU9URV9JTklULCAvKiAoUG9zc2libHkpIEZpcnN0IHN0YXRlIGluIFNGVFAtRE9ORSAqLwotICBTU0hfU0ZUUF9RVU9URSwKLSAgU1NIX1NGVFBfTkVYVF9RVU9URSwKLSAgU1NIX1NGVFBfUVVPVEVfU1RBVCwKLSAgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCwKLSAgU1NIX1NGVFBfUVVPVEVfU1lNTElOSywKLSAgU1NIX1NGVFBfUVVPVEVfTUtESVIsCi0gIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSwKLSAgU1NIX1NGVFBfUVVPVEVfUk1ESVIsCi0gIFNTSF9TRlRQX1FVT1RFX1VOTElOSywKLSAgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUywKLSAgU1NIX1NGVFBfR0VUSU5GTywKLSAgU1NIX1NGVFBfRklMRVRJTUUsCi0gIFNTSF9TRlRQX1RSQU5TX0lOSVQsCi0gIFNTSF9TRlRQX1VQTE9BRF9JTklULAotICBTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklULAotICBTU0hfU0ZUUF9DUkVBVEVfRElSUywKLSAgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIsCi0gIFNTSF9TRlRQX1JFQURESVJfSU5JVCwKLSAgU1NIX1NGVFBfUkVBRERJUiwKLSAgU1NIX1NGVFBfUkVBRERJUl9MSU5LLAotICBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSwKLSAgU1NIX1NGVFBfUkVBRERJUl9ET05FLAotICBTU0hfU0ZUUF9ET1dOTE9BRF9JTklULAotICBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFULCAvKiBMYXN0IHN0YXRlIGluIFNGVFAtRE8gKi8KLSAgU1NIX1NGVFBfQ0xPU0UsICAgIC8qIExhc3Qgc3RhdGUgaW4gU0ZUUC1ET05FICovCi0gIFNTSF9TRlRQX1NIVVRET1dOLCAvKiBGaXJzdCBzdGF0ZSBpbiBTRlRQLURJU0NPTk5FQ1QgKi8KLSAgU1NIX1NDUF9UUkFOU19JTklULCAvKiBGaXJzdCBzdGF0ZSBpbiBTQ1AtRE8gKi8KLSAgU1NIX1NDUF9VUExPQURfSU5JVCwKLSAgU1NIX1NDUF9ET1dOTE9BRF9JTklULAotICBTU0hfU0NQX0RPV05MT0FELAotICBTU0hfU0NQX0RPTkUsCi0gIFNTSF9TQ1BfU0VORF9FT0YsCi0gIFNTSF9TQ1BfV0FJVF9FT0YsCi0gIFNTSF9TQ1BfV0FJVF9DTE9TRSwKLSAgU1NIX1NDUF9DSEFOTkVMX0ZSRUUsICAgLyogTGFzdCBzdGF0ZSBpbiBTQ1AtRE9ORSAqLwotICBTU0hfU0VTU0lPTl9ESVNDT05ORUNULCAvKiBGaXJzdCBzdGF0ZSBpbiBTQ1AtRElTQ09OTkVDVCAqLwotICBTU0hfU0VTU0lPTl9GUkVFLCAgICAgICAvKiBMYXN0IHN0YXRlIGluIFNDUC9TRlRQLURJU0NPTk5FQ1QgKi8KLSAgU1NIX1FVSVQsCi0gIFNTSF9MQVNUICAvKiBuZXZlciB1c2VkICovCi19IHNzaHN0YXRlOwotCi0vKiB0aGlzIHN0cnVjdCBpcyB1c2VkIGluIHRoZSBIYW5kbGVEYXRhIHN0cnVjdCB3aGljaCBpcyBwYXJ0IG9mIHRoZQotICAgQ3VybF9lYXN5LCB3aGljaCBtZWFucyB0aGlzIGlzIHVzZWQgb24gYSBwZXItZWFzeSBoYW5kbGUgYmFzaXMuCi0gICBFdmVyeXRoaW5nIHRoYXQgaXMgc3RyaWN0bHkgcmVsYXRlZCB0byBhIGNvbm5lY3Rpb24gaXMgYmFubmVkIGZyb20gdGhpcwotICAgc3RydWN0LiAqLwotc3RydWN0IFNTSFBST1RPIHsKLSAgY2hhciAqcGF0aDsgICAgICAgICAgICAgICAgICAvKiB0aGUgcGF0aCB3ZSBvcGVyYXRlIG9uICovCi19OwotCi0vKiBzc2hfY29ubiBpcyB1c2VkIGZvciBzdHJ1Y3QgY29ubmVjdGlvbi1vcmllbnRlZCBkYXRhIGluIHRoZSBjb25uZWN0ZGF0YQotICAgc3RydWN0ICovCi1zdHJ1Y3Qgc3NoX2Nvbm4gewotICBjb25zdCBjaGFyICphdXRobGlzdDsgICAgICAgLyogTGlzdCBvZiBhdXRoLiBtZXRob2RzLCBtYW5hZ2VkIGJ5IGxpYnNzaDIgKi8KLQotICAvKiBjb21tb24gKi8KLSAgY29uc3QgY2hhciAqcGFzc3BocmFzZTsgICAgIC8qIHBhc3MtcGhyYXNlIHRvIHVzZSAqLwotICBjaGFyICpyc2FfcHViOyAgICAgICAgICAgICAgLyogcGF0aCBuYW1lICovCi0gIGNoYXIgKnJzYTsgICAgICAgICAgICAgICAgICAvKiBwYXRoIG5hbWUgKi8KLSAgYm9vbCBhdXRoZWQ7ICAgICAgICAgICAgICAgIC8qIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgZmluZSAqLwotICBzc2hzdGF0ZSBzdGF0ZTsgICAgICAgICAgICAgLyogYWx3YXlzIHVzZSBzc2guYzpzdGF0ZSgpIHRvIGNoYW5nZSBzdGF0ZSEgKi8KLSAgc3Noc3RhdGUgbmV4dHN0YXRlOyAgICAgICAgIC8qIHRoZSBzdGF0ZSB0byBnb3RvIGFmdGVyIHN0b3BwaW5nICovCi0gIENVUkxjb2RlIGFjdHVhbGNvZGU7ICAgICAgICAvKiB0aGUgYWN0dWFsIGVycm9yIGNvZGUgKi8KLSAgc3RydWN0IGN1cmxfc2xpc3QgKnF1b3RlX2l0ZW07IC8qIGZvciB0aGUgcXVvdGUgb3B0aW9uICovCi0gIGNoYXIgKnF1b3RlX3BhdGgxOyAgICAgICAgICAvKiB0d28gZ2VuZXJpYyBwb2ludGVycyBmb3IgdGhlIFFVT1RFIHN0dWZmICovCi0gIGNoYXIgKnF1b3RlX3BhdGgyOwotCi0gIGJvb2wgYWNjZXB0ZmFpbDsgICAgICAgICAgICAvKiB1c2VkIGJ5IHRoZSBTRlRQX1FVT1RFIChjb250aW51ZSBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgY29tbWFuZCBmYWlscykgKi8KLSAgY2hhciAqaG9tZWRpcjsgICAgICAgICAgICAgIC8qIHdoZW4gZG9pbmcgU0ZUUCB3ZSBmaWd1cmUgb3V0IGhvbWUgZGlyIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdCBwaGFzZSAqLwotICBzaXplX3QgcmVhZGRpcl9sZW4sIHJlYWRkaXJfdG90YWxMZW4sIHJlYWRkaXJfY3VyckxlbjsKLSAgY2hhciAqcmVhZGRpcl9saW5lOwotICBjaGFyICpyZWFkZGlyX2xpbmtQYXRoOwotICAvKiBlbmQgb2YgUkVBRERJUiBzdHVmZiAqLwotCi0gIGludCBzZWNvbmRDcmVhdGVEaXJzOyAgICAgICAgIC8qIGNvdW50ZXIgdXNlIGJ5IHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBjaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8vY3JlYXRlIGEgZGlyZWN0b3J5ICovCi0gIGNoYXIgKnNsYXNoX3BvczsgICAgICAgICAgICAgIC8qIHVzZWQgYnkgdGhlIFNGVFBfQ1JFQVRFX0RJUlMgc3RhdGUgKi8KLQotICBpbnQgb3JpZ193YWl0Zm9yOyAgICAgICAgICAgICAvKiBkZWZhdWx0IFJFQUQvV1JJVEUgYml0cyB3YWl0IGZvciAqLwotCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIKQotLyogb3VyIHZhcmlhYmxlcyAqLwotICB1bnNpZ25lZCBrYmRfc3RhdGU7IC8qIDAgb3IgMSAqLwotICBzc2hfa2V5IHByaXZrZXk7Ci0gIHNzaF9rZXkgcHVia2V5OwotICBpbnQgYXV0aF9tZXRob2RzOwotICBzc2hfc2Vzc2lvbiBzc2hfc2Vzc2lvbjsKLSAgc3NoX3NjcCBzY3Bfc2Vzc2lvbjsKLSAgc2Z0cF9zZXNzaW9uIHNmdHBfc2Vzc2lvbjsKLSAgc2Z0cF9maWxlIHNmdHBfZmlsZTsKLSAgc2Z0cF9kaXIgc2Z0cF9kaXI7Ci0KLSAgdW5zaWduZWQgc2Z0cF9yZWN2X3N0YXRlOyAvKiAwIG9yIDEgKi8KLSAgaW50IHNmdHBfZmlsZV9pbmRleDsgLyogZm9yIGFzeW5jIHJlYWQgKi8KLSAgc2Z0cF9hdHRyaWJ1dGVzIHJlYWRkaXJfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFAgcmVhZGRpciBhY3Rpb25zICovCi0gIHNmdHBfYXR0cmlidXRlcyByZWFkZGlyX2xpbmtfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFAgcmVhZGRpciBhY3Rpb25zICovCi0gIHNmdHBfYXR0cmlidXRlcyBxdW90ZV9hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUF9RVU9URSBzdGF0ZSAqLwotCi0gIGNvbnN0IGNoYXIgKnJlYWRkaXJfZmlsZW5hbWU7IC8qIHBvaW50cyB3aXRoaW4gcmVhZGRpcl9hdHRycyAqLwotICBjb25zdCBjaGFyICpyZWFkZGlyX2xvbmdlbnRyeTsKLSAgY2hhciAqcmVhZGRpcl90bXA7Ci0jZWxpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKQotICBjaGFyICpyZWFkZGlyX2ZpbGVuYW1lOwotICBjaGFyICpyZWFkZGlyX2xvbmdlbnRyeTsKLQotICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBxdW90ZV9hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUF9RVU9URSBzdGF0ZSAqLwotCi0gIC8qIEhlcmUncyBhIHNldCBvZiBzdHJ1Y3QgbWVtYmVycyB1c2VkIGJ5IHRoZSBTRlRQX1JFQURESVIgc3RhdGUgKi8KLSAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgcmVhZGRpcl9hdHRyczsKLSAgTElCU1NIMl9TRVNTSU9OICpzc2hfc2Vzc2lvbjsgLyogU2VjdXJlIFNoZWxsIHNlc3Npb24gKi8KLSAgTElCU1NIMl9DSEFOTkVMICpzc2hfY2hhbm5lbDsgLyogU2VjdXJlIFNoZWxsIGNoYW5uZWwgaGFuZGxlICovCi0gIExJQlNTSDJfU0ZUUCAqc2Z0cF9zZXNzaW9uOyAgIC8qIFNGVFAgaGFuZGxlICovCi0gIExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNmdHBfaGFuZGxlOwotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0FHRU5UX0FQSQotICBMSUJTU0gyX0FHRU5UICpzc2hfYWdlbnQ7ICAgICAvKiBwcm94eSB0byBzc2gtYWdlbnQvcGFnZWFudCAqLwotICBzdHJ1Y3QgbGlic3NoMl9hZ2VudF9wdWJsaWNrZXkgKnNzaGFnZW50X2lkZW50aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNzaGFnZW50X3ByZXZfaWRlbnRpdHk7Ci0jZW5kaWYKLQotICAvKiBub3RlIHRoYXQgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgaXMgYSBkZWZpbmUgc2V0IGluIHRoZSBsaWJzc2gyLmgKLSAgICAgaGVhZGVyICovCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLSAgTElCU1NIMl9LTk9XTkhPU1RTICpraDsKLSNlbmRpZgotI2VuZGlmIC8qIFVTRV9MSUJTU0ggKi8KLX07Ci0KLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCi0KLSNkZWZpbmUgQ1VSTF9MSUJTU0hfVkVSU0lPTiBzc2hfdmVyc2lvbigwKQotCi1leHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHA7Ci0KLSNlbGlmIGRlZmluZWQoVVNFX0xJQlNTSDIpCi0KLS8qIEZlYXR1cmUgZGV0ZWN0aW9uIGJhc2VkIG9uIHZlcnNpb24gbnVtYmVycyB0byBiZXR0ZXIgd29yayB3aXRoCi0gICBub24tY29uZmlndXJlIHBsYXRmb3JtcyAqLwotCi0jaWYgIWRlZmluZWQoTElCU1NIMl9WRVJTSU9OX05VTSkgfHwgKExJQlNTSDJfVkVSU0lPTl9OVU0gPCAweDAwMTAwMCkKLSMgIGVycm9yICJTQ1AvU0ZUUCBwcm90b2NvbHMgcmVxdWlyZSBsaWJzc2gyIDAuMTYgb3IgbGF0ZXIiCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAwMDAKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX1NGVFBfU0VFSzY0IDEKLSNlbmRpZgotCi0jaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDEwMAotI2RlZmluZSBIQVZFX0xJQlNTSDJfVkVSU0lPTiAxCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDUKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX0lOSVQgMQotI2RlZmluZSBIQVZFX0xJQlNTSDJfRVhJVCAxCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDYKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9DSEVDS1AgMQotI2RlZmluZSBIQVZFX0xJQlNTSDJfU0NQX1NFTkQ2NCAxCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDgKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX1NFU1NJT05fSEFORFNIQUtFIDEKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX1ZFUlNJT04KLS8qIGdldCBpdCBydW4tdGltZSBpZiBwb3NzaWJsZSAqLwotI2RlZmluZSBDVVJMX0xJQlNTSDJfVkVSU0lPTiBsaWJzc2gyX3ZlcnNpb24oMCkKLSNlbHNlCi0vKiB1c2UgYnVpbGQtdGltZSBpZiBydW4tdGltZSBub3QgcG9zc2libGUgKi8KLSNkZWZpbmUgQ1VSTF9MSUJTU0gyX1ZFUlNJT04gTElCU1NIMl9WRVJTSU9OCi0jZW5kaWYKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwOwotCi0jZW5kaWYgLyogVVNFX0xJQlNTSDIgKi8KLQotI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NTSF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmMKaW5kZXggMjRiY2NhOS4uYTMwOWUzNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyY2FzZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSAic3RyY2FzZS5oIgogCitzdGF0aWMgY2hhciByYXdfdG9sb3dlcihjaGFyIGluKTsKKwogLyogUG9ydGFibGUsIGNvbnNpc3RlbnQgdG91cHBlciAocmVtZW1iZXIgRUJDRElDKS4gRG8gbm90IHVzZSB0b3VwcGVyKCkgYmVjYXVzZQogICAgaXRzIGJlaGF2aW9yIGlzIGFsdGVyZWQgYnkgdGhlIGN1cnJlbnQgbG9jYWxlLiAqLwogY2hhciBDdXJsX3Jhd190b3VwcGVyKGNoYXIgaW4pCkBAIC05Myw2ICs5NSw3NSBAQAogICByZXR1cm4gaW47CiB9CiAKKworLyogUG9ydGFibGUsIGNvbnNpc3RlbnQgdG9sb3dlciAocmVtZW1iZXIgRUJDRElDKS4gRG8gbm90IHVzZSB0b2xvd2VyKCkgYmVjYXVzZQorICAgaXRzIGJlaGF2aW9yIGlzIGFsdGVyZWQgYnkgdGhlIGN1cnJlbnQgbG9jYWxlLiAqLworc3RhdGljIGNoYXIgcmF3X3RvbG93ZXIoY2hhciBpbikKK3sKKyNpZiAhZGVmaW5lZChDVVJMX0RPRVNfQ09OVkVSU0lPTlMpCisgIGlmKGluID49ICdBJyAmJiBpbiA8PSAnWicpCisgICAgcmV0dXJuIChjaGFyKSgnYScgKyBpbiAtICdBJyk7CisjZWxzZQorICBzd2l0Y2goaW4pIHsKKyAgY2FzZSAnQSc6CisgICAgcmV0dXJuICdhJzsKKyAgY2FzZSAnQic6CisgICAgcmV0dXJuICdiJzsKKyAgY2FzZSAnQyc6CisgICAgcmV0dXJuICdjJzsKKyAgY2FzZSAnRCc6CisgICAgcmV0dXJuICdkJzsKKyAgY2FzZSAnRSc6CisgICAgcmV0dXJuICdlJzsKKyAgY2FzZSAnRic6CisgICAgcmV0dXJuICdmJzsKKyAgY2FzZSAnRyc6CisgICAgcmV0dXJuICdnJzsKKyAgY2FzZSAnSCc6CisgICAgcmV0dXJuICdoJzsKKyAgY2FzZSAnSSc6CisgICAgcmV0dXJuICdpJzsKKyAgY2FzZSAnSic6CisgICAgcmV0dXJuICdqJzsKKyAgY2FzZSAnSyc6CisgICAgcmV0dXJuICdrJzsKKyAgY2FzZSAnTCc6CisgICAgcmV0dXJuICdsJzsKKyAgY2FzZSAnTSc6CisgICAgcmV0dXJuICdtJzsKKyAgY2FzZSAnTic6CisgICAgcmV0dXJuICduJzsKKyAgY2FzZSAnTyc6CisgICAgcmV0dXJuICdvJzsKKyAgY2FzZSAnUCc6CisgICAgcmV0dXJuICdwJzsKKyAgY2FzZSAnUSc6CisgICAgcmV0dXJuICdxJzsKKyAgY2FzZSAnUic6CisgICAgcmV0dXJuICdyJzsKKyAgY2FzZSAnUyc6CisgICAgcmV0dXJuICdzJzsKKyAgY2FzZSAnVCc6CisgICAgcmV0dXJuICd0JzsKKyAgY2FzZSAnVSc6CisgICAgcmV0dXJuICd1JzsKKyAgY2FzZSAnVic6CisgICAgcmV0dXJuICd2JzsKKyAgY2FzZSAnVyc6CisgICAgcmV0dXJuICd3JzsKKyAgY2FzZSAnWCc6CisgICAgcmV0dXJuICd4JzsKKyAgY2FzZSAnWSc6CisgICAgcmV0dXJuICd5JzsKKyAgY2FzZSAnWic6CisgICAgcmV0dXJuICd6JzsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIGluOworfQorCisKIC8qCiAgKiBDdXJsX3N0cmNhc2Vjb21wYXJlKCkgaXMgZm9yIGRvaW5nICJyYXciIGNhc2UgaW5zZW5zaXRpdmUgc3RyaW5ncy4gVGhpcyBpcwogICogbWVhbnQgdG8gYmUgbG9jYWxlIGluZGVwZW5kZW50IGFuZCBvbmx5IGNvbXBhcmUgc3RyaW5ncyB3ZSBrbm93IGFyZSBzYWZlCkBAIC0xNjUsNiArMjM2LDIxIEBACiAgIH0gd2hpbGUoKnNyYysrICYmIC0tbik7CiB9CiAKKy8qIENvcHkgYSBsb3dlciBjYXNlIHZlcnNpb24gb2YgdGhlIHN0cmluZyBmcm9tIHNyYyB0byBkZXN0LiAgVGhlCisgKiBzdHJpbmdzIG1heSBvdmVybGFwLiAgTm8gbW9yZSB0aGFuIG4gY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFyZSBjb3BpZWQKKyAqIChpbmNsdWRpbmcgYW55IE5VTCkgYW5kIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgd2lsbCBOT1QgYmUKKyAqIE5VTC10ZXJtaW5hdGVkIGlmIHRoYXQgbGltaXQgaXMgcmVhY2hlZC4KKyAqLwordm9pZCBDdXJsX3N0cm50b2xvd2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pCit7CisgIGlmKG4gPCAxKQorICAgIHJldHVybjsKKworICBkbyB7CisgICAgKmRlc3QrKyA9IHJhd190b2xvd2VyKCpzcmMpOworICB9IHdoaWxlKCpzcmMrKyAmJiAtLW4pOworfQorCiAvKiAtLS0gcHVibGljIGZ1bmN0aW9ucyAtLS0gKi8KIAogaW50IGN1cmxfc3RyZXF1YWwoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuaAppbmRleCA2ZmVlMzg0Li5jZDRjNDE5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyY2FzZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00Niw1ICs0Niw2IEBACiAjZGVmaW5lIGNoZWNrcHJlZml4KGEsYikgICAgY3VybF9zdHJuZXF1YWwoYSxiLHN0cmxlbihhKSkKIAogdm9pZCBDdXJsX3N0cm50b3VwcGVyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pOwordm9pZCBDdXJsX3N0cm50b2xvd2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU1RSQ0FTRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJkdXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmR1cC5jCmluZGV4IDUxZTc5NzguLjFhYjEwZmQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmR1cC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmR1cC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuYwppbmRleCBlMjczZjM3Li4wMTVlNTg4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmVycm9yLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMxMSw2ICszMTEsMTUgQEAKICAgY2FzZSBDVVJMRV9SRUNVUlNJVkVfQVBJX0NBTEw6CiAgICAgcmV0dXJuICJBUEkgZnVuY3Rpb24gY2FsbGVkIGZyb20gd2l0aGluIGNhbGxiYWNrIjsKIAorICBjYXNlIENVUkxFX0FVVEhfRVJST1I6CisgICAgcmV0dXJuICJBbiBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiByZXR1cm5lZCBhbiBlcnJvciI7CisKKyAgY2FzZSBDVVJMRV9IVFRQMzoKKyAgICByZXR1cm4gIkhUVFAvMyBlcnJvciI7CisKKyAgY2FzZSBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I6CisgICAgcmV0dXJuICJRVUlDIGNvbm5lY3Rpb24gZXJyb3IiOworCiAgICAgLyogZXJyb3IgY29kZXMgbm90IHVzZWQgYnkgY3VycmVudCBsaWJjdXJsICovCiAgIGNhc2UgQ1VSTEVfT0JTT0xFVEUyMDoKICAgY2FzZSBDVVJMRV9PQlNPTEVURTI0OgpAQCAtMzgzLDYgKzM5MiwxMiBAQAogICBjYXNlIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDoKICAgICByZXR1cm4gIkFQSSBmdW5jdGlvbiBjYWxsZWQgZnJvbSB3aXRoaW4gY2FsbGJhY2siOwogCisgIGNhc2UgQ1VSTE1fV0FLRVVQX0ZBSUxVUkU6CisgICAgcmV0dXJuICJXYWtldXAgaXMgdW5hdmFpbGFibGUgb3IgZmFpbGVkIjsKKworICBjYXNlIENVUkxNX0JBRF9GVU5DVElPTl9BUkdVTUVOVDoKKyAgICByZXR1cm4gIkEgbGliY3VybCBmdW5jdGlvbiB3YXMgZ2l2ZW4gYSBiYWQgYXJndW1lbnQiOworCiAgIGNhc2UgQ1VSTE1fTEFTVDoKICAgICBicmVhazsKICAgfQpAQCAtNDMzLDE5ICs0NDgsMjYgQEAKIH0KIAogI2lmZGVmIFVTRV9XSU5TT0NLCi0KLS8qIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBtb3N0IC8gYWxsICg/KSBXaW5zb2NrIGVycm9ycyBjdXJsIGlzIGFibGUgdG8gcHJvZHVjZS4KKy8qIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIEN1cmxfc3RyZXJyb3IgdGhhdCBjb252ZXJ0cyBXaW5zb2NrIGVycm9yCisgKiBjb2RlcyAoV1NBR2V0TGFzdEVycm9yKSB0byBlcnJvciBtZXNzYWdlcy4KKyAqIFJldHVybnMgTlVMTCBpZiBubyBlcnJvciBtZXNzYWdlIHdhcyBmb3VuZCBmb3IgZXJyb3IgY29kZS4KICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKgogZ2V0X3dpbnNvY2tfZXJyb3IgKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLSNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKLSAgRFdPUkQgb2xkX3dpbl9lcnIgPSBHZXRMYXN0RXJyb3IoKTsKLSNlbmRpZgotICBpbnQgb2xkX2Vycm5vID0gZXJybm87Ci0gIGNvbnN0IGNoYXIgKnA7Ci0KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworICBjb25zdCBjaGFyICpwOworI2VuZGlmCisKKyAgaWYoIWxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKKworI2lmZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyAgKHZvaWQpZXJyOworICByZXR1cm4gTlVMTDsKKyNlbHNlCiAgIHN3aXRjaChlcnIpIHsKICAgY2FzZSBXU0FFSU5UUjoKICAgICBwID0gIkNhbGwgaW50ZXJydXB0ZWQiOwpAQCAtNjE0LDI3ICs2MzYsNjQgQEAKICAgZGVmYXVsdDoKICAgICByZXR1cm4gTlVMTDsKICAgfQotI2Vsc2UKLSAgaWYoIWVycikKLSAgICByZXR1cm4gTlVMTDsKLSAgZWxzZQotICAgIHAgPSAiZXJyb3IiOwotI2VuZGlmCiAgIHN0cm5jcHkoYnVmLCBwLCBsZW4pOwogICBidWYgW2xlbi0xXSA9ICdcMCc7Ci0KLSAgaWYoZXJybm8gIT0gb2xkX2Vycm5vKQotICAgIGVycm5vID0gb2xkX2Vycm5vOwotCi0jaWZkZWYgUFJFU0VSVkVfV0lORE9XU19FUlJPUl9DT0RFCi0gIGlmKG9sZF93aW5fZXJyICE9IEdldExhc3RFcnJvcigpKQotICAgIFNldExhc3RFcnJvcihvbGRfd2luX2Vycik7Ci0jZW5kaWYKLQogICByZXR1cm4gYnVmOworI2VuZGlmCiB9CiAjZW5kaWYgICAvKiBVU0VfV0lOU09DSyAqLwogCisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgQ3VybF9zdHJlcnJvciB0aGF0IGNvbnZlcnRzIFdpbmRvd3MgQVBJIGVycm9yCisgKiBjb2RlcyAoR2V0TGFzdEVycm9yKSB0byBlcnJvciBtZXNzYWdlcy4KKyAqIFJldHVybnMgTlVMTCBpZiBubyBlcnJvciBtZXNzYWdlIHdhcyBmb3VuZCBmb3IgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X3dpbmFwaV9lcnJvcihpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIGNoYXIgKnA7CisKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKKworI2lmZGVmIF9XSU4zMl9XQ0UKKyAgeworICAgIHdjaGFyX3Qgd2J1ZlsyNTZdOworICAgIHdidWZbMF0gPSBMJ1wwJzsKKworICAgIGlmKEZvcm1hdE1lc3NhZ2UoKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKKyAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUyksIE5VTEwsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgIExBTkdfTkVVVFJBTCwgd2J1Ziwgc2l6ZW9mKHdidWYpL3NpemVvZih3Y2hhcl90KSwgTlVMTCkpIHsKKyAgICAgIHNpemVfdCB3cml0dGVuID0gd2NzdG9tYnMoYnVmLCB3YnVmLCBidWZsZW4gLSAxKTsKKyAgICAgIGlmKHdyaXR0ZW4gIT0gKHNpemVfdCktMSkKKyAgICAgICAgYnVmW3dyaXR0ZW5dID0gJ1wwJzsKKyAgICAgIGVsc2UKKyAgICAgICAgKmJ1ZiA9ICdcMCc7CisgICAgfQorICB9CisjZWxzZQorICBpZighRm9ybWF0TWVzc2FnZUEoKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKKyAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUyksIE5VTEwsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgIExBTkdfTkVVVFJBTCwgYnVmLCAoRFdPUkQpYnVmbGVuLCBOVUxMKSkgeworICAgICpidWYgPSAnXDAnOworICB9CisjZW5kaWYKKworICAvKiBUcnVuY2F0ZSBtdWx0aXBsZSBsaW5lcyAqLworICBwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisgIGlmKHApIHsKKyAgICBpZihwID4gYnVmICYmICoocC0xKSA9PSAnXHInKQorICAgICAgKihwLTEpID0gJ1wwJzsKKyAgICBlbHNlCisgICAgICAqcCA9ICdcMCc7CisgIH0KKworICByZXR1cm4gKCpidWYgPyBidWYgOiBOVUxMKTsKK30KKyNlbmRpZiAvKiBXSU4zMiB8fCBfV0lOMzJfV0NFICovCisKIC8qCiAgKiBPdXIgdGhyZWFkLXNhZmUgYW5kIHNtYXJ0IHN0cmVycm9yKCkgcmVwbGFjZW1lbnQuCiAgKgpAQCAtNjQ1LDYgKzcwNCwxNCBAQAogICoKICAqIFdlIGRvbid0IGRvIHJhbmdlIGNoZWNraW5nIChvbiBzeXN0ZW1zIG90aGVyIHRoYW4gV2luZG93cykgc2luY2UgdGhlcmUgaXMKICAqIG5vIGdvb2QgcmVsaWFibGUgYW5kIHBvcnRhYmxlIHdheSB0byBkbyBpdC4KKyAqCisgKiBPbiBXaW5kb3dzIGRpZmZlcmVudCB0eXBlcyBvZiBlcnJvciBjb2RlcyBvdmVybGFwLiBUaGlzIGZ1bmN0aW9uIGhhcyBhbgorICogb3JkZXIgb2YgcHJlZmVyZW5jZSB3aGVuIHRyeWluZyB0byBtYXRjaCBlcnJvciBjb2RlczoKKyAqIENSVCAoZXJybm8pLCBXaW5zb2NrIChXU0FHZXRMYXN0RXJyb3IpLCBXaW5kb3dzIEFQSSAoR2V0TGFzdEVycm9yKS4KKyAqCisgKiBJdCBtYXkgYmUgbW9yZSBjb3JyZWN0IHRvIGNhbGwgb25lIG9mIHRoZSB2YXJpYW50IGZ1bmN0aW9ucyBpbnN0ZWFkOgorICogQ2FsbCBDdXJsX3NzcGlfc3RyZXJyb3IgaWYgdGhlIGVycm9yIGNvZGUgaXMgZGVmaW5pdGVseSBXaW5kb3dzIFNTUEkuCisgKiBDYWxsIEN1cmxfd2luYXBpX3N0cmVycm9yIGlmIHRoZSBlcnJvciBjb2RlIGlzIGRlZmluaXRlbHkgV2luZG93cyBBUEkuCiAgKi8KIGNvbnN0IGNoYXIgKkN1cmxfc3RyZXJyb3IoaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQogewpAQCAtNjU1LDM1ICs3MjIsMzAgQEAKICAgY2hhciAqcDsKICAgc2l6ZV90IG1heDsKIAorICBpZighYnVmbGVuKQorICAgIHJldHVybiBOVUxMOworCiAgIERFQlVHQVNTRVJUKGVyciA+PSAwKTsKIAogICBtYXggPSBidWZsZW4gLSAxOwogICAqYnVmID0gJ1wwJzsKIAotI2lmZGVmIFVTRV9XSU5TT0NLCi0KLSNpZmRlZiBfV0lOMzJfV0NFCi0gIHsKLSAgICB3Y2hhcl90IHdidWZbMjU2XTsKLSAgICB3YnVmWzBdID0gTCdcMCc7Ci0KLSAgICBGb3JtYXRNZXNzYWdlKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLCBOVUxMLCBlcnIsCi0gICAgICAgICAgICAgICAgICBMQU5HX05FVVRSQUwsIHdidWYsIHNpemVvZih3YnVmKS9zaXplb2Yod2NoYXJfdCksIE5VTEwpOwotICAgIHdjc3RvbWJzKGJ1Ziwgd2J1ZiwgbWF4KTsKLSAgfQotI2Vsc2UKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisjaWYgZGVmaW5lZChXSU4zMikKICAgLyogJ3N5c19uZXJyJyBpcyB0aGUgbWF4aW11bSBlcnJubyBudW1iZXIsIGl0IGlzIG5vdCB3aWRlbHkgcG9ydGFibGUgKi8KICAgaWYoZXJyID49IDAgJiYgZXJyIDwgc3lzX25lcnIpCiAgICAgc3RybmNweShidWYsIHN0cmVycm9yKGVyciksIG1heCk7Ci0gIGVsc2UgewotICAgIGlmKCFnZXRfd2luc29ja19lcnJvcihlcnIsIGJ1ZiwgbWF4KSAmJgotICAgICAgICFGb3JtYXRNZXNzYWdlQShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwgTlVMTCwgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICBMQU5HX05FVVRSQUwsIGJ1ZiwgKERXT1JEKW1heCwgTlVMTCkpCisgIGVsc2UKKyNlbmRpZgorICB7CisgICAgaWYoCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgICAgICAhZ2V0X3dpbnNvY2tfZXJyb3IoZXJyLCBidWYsIG1heCkgJiYKKyNlbmRpZgorICAgICAgICFnZXRfd2luYXBpX2Vycm9yKChEV09SRCllcnIsIGJ1ZiwgbWF4KSkKICAgICAgIG1zbnByaW50ZihidWYsIG1heCwgIlVua25vd24gZXJyb3IgJWQgKCUjeCkiLCBlcnIsIGVycik7CiAgIH0KLSNlbmRpZgotCi0jZWxzZSAvKiBub3QgVVNFX1dJTlNPQ0sgY29taW5nIHVwICovCisjZWxzZSAvKiBub3QgV2luZG93cyBjb21pbmcgdXAgKi8KIAogI2lmIGRlZmluZWQoSEFWRV9TVFJFUlJPUl9SKSAmJiBkZWZpbmVkKEhBVkVfUE9TSVhfU1RSRVJST1JfUikKICAvKgpAQCAtNzMxLDkgKzc5Myw5IEBACiAgIH0KICNlbmRpZgogCi0jZW5kaWYgLyogZW5kIG9mICEgVVNFX1dJTlNPQ0sgKi8KKyNlbmRpZiAvKiBlbmQgb2Ygbm90IFdpbmRvd3MgKi8KIAotICBidWZbbWF4XSA9ICdcMCc7IC8qIG1ha2Ugc3VyZSB0aGUgc3RyaW5nIGlzIHplcm8gdGVybWluYXRlZCAqLworICBidWZbbWF4XSA9ICdcMCc7IC8qIG1ha2Ugc3VyZSB0aGUgc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZCAqLwogCiAgIC8qIHN0cmlwIHRyYWlsaW5nICdcclxuJyBvciAnXG4nLiAqLwogICBwID0gc3RycmNocihidWYsICdcbicpOwpAQCAtNzU0LDM0MSArODE2LDM1IEBACiAgIHJldHVybiBidWY7CiB9CiAKLSNpZmRlZiBVU0VfV0lORE9XU19TU1BJCi1jb25zdCBjaGFyICpDdXJsX3NzcGlfc3RyZXJyb3IoaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorLyoKKyAqIEN1cmxfd2luYXBpX3N0cmVycm9yOgorICogVmFyaWFudCBvZiBDdXJsX3N0cmVycm9yIGlmIHRoZSBlcnJvciBjb2RlIGlzIGRlZmluaXRlbHkgV2luZG93cyBBUEkuCisgKi8KKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCitjb25zdCBjaGFyICpDdXJsX3dpbmFwaV9zdHJlcnJvcihEV09SRCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKIHsKICNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKICAgRFdPUkQgb2xkX3dpbl9lcnIgPSBHZXRMYXN0RXJyb3IoKTsKICNlbmRpZgogICBpbnQgb2xkX2Vycm5vID0gZXJybm87Ci0gIGNvbnN0IGNoYXIgKnR4dDsKLSAgY2hhciAqb3V0YnVmOwotICBzaXplX3Qgb3V0bWF4OwotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCi0gIGNoYXIgdHh0YnVmWzgwXTsKLSAgY2hhciBtc2didWZbMjU2XTsKLSAgY2hhciAqcCwgKnN0ciwgKm1zZyA9IE5VTEw7Ci0gIGJvb2wgbXNnX2Zvcm1hdHRlZCA9IEZBTFNFOwotI2VuZGlmCiAKLSAgb3V0YnVmID0gYnVmOwotICBvdXRtYXggPSBidWZsZW4gLSAxOwotICAqb3V0YnVmID0gJ1wwJzsKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCi0KLSAgc3dpdGNoKGVycikgewotICAgIGNhc2UgU0VDX0VfT0s6Ci0gICAgICB0eHQgPSAiTm8gZXJyb3IiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDUllQVF9FX1JFVk9LRUQ6Ci0gICAgICB0eHQgPSAiQ1JZUFRfRV9SRVZPS0VEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQUxHT1JJVEhNX01JU01BVENIOgotICAgICAgdHh0ID0gIlNFQ19FX0FMR09SSVRITV9NSVNNQVRDSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0JBRF9CSU5ESU5HUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9CQURfQklORElOR1MiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9CQURfUEtHSUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfQkFEX1BLR0lEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQlVGRkVSX1RPT19TTUFMTDoKLSAgICAgIHR4dCA9ICJTRUNfRV9CVUZGRVJfVE9PX1NNQUxMIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ0FOTk9UX0lOU1RBTEw6Ci0gICAgICB0eHQgPSAiU0VDX0VfQ0FOTk9UX0lOU1RBTEwiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9DQU5OT1RfUEFDSzoKLSAgICAgIHR4dCA9ICJTRUNfRV9DQU5OT1RfUEFDSyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0NFUlRfRVhQSVJFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9DRVJUX0VYUElSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9DRVJUX1VOS05PV046Ci0gICAgICB0eHQgPSAiU0VDX0VfQ0VSVF9VTktOT1dOIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ0VSVF9XUk9OR19VU0FHRToKLSAgICAgIHR4dCA9ICJTRUNfRV9DRVJUX1dST05HX1VTQUdFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ09OVEVYVF9FWFBJUkVEOgotICAgICAgdHh0ID0gIlNFQ19FX0NPTlRFWFRfRVhQSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0NST1NTUkVBTE1fREVMRUdBVElPTl9GQUlMVVJFOgotICAgICAgdHh0ID0gIlNFQ19FX0NST1NTUkVBTE1fREVMRUdBVElPTl9GQUlMVVJFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElEOgotICAgICAgdHh0ID0gIlNFQ19FX0NSWVBUT19TWVNURU1fSU5WQUxJRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RFQ1JZUFRfRkFJTFVSRToKLSAgICAgIHR4dCA9ICJTRUNfRV9ERUNSWVBUX0ZBSUxVUkUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9ERUxFR0FUSU9OX1BPTElDWToKLSAgICAgIHR4dCA9ICJTRUNfRV9ERUxFR0FUSU9OX1BPTElDWSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RFTEVHQVRJT05fUkVRVUlSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfREVMRUdBVElPTl9SRVFVSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RPV05HUkFERV9ERVRFQ1RFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9ET1dOR1JBREVfREVURUNURUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9FTkNSWVBUX0ZBSUxVUkU6Ci0gICAgICB0eHQgPSAiU0VDX0VfRU5DUllQVF9GQUlMVVJFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfSUxMRUdBTF9NRVNTQUdFOgotICAgICAgdHh0ID0gIlNFQ19FX0lMTEVHQUxfTUVTU0FHRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOQ09NUExFVEVfQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfSU5DT01QTEVURV9DUkVERU5USUFMUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOQ09NUExFVEVfTUVTU0FHRToKLSAgICAgIHR4dCA9ICJTRUNfRV9JTkNPTVBMRVRFX01FU1NBR0UiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZOgotICAgICAgdHh0ID0gIlNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKLSAgICAgIHR4dCA9ICJTRUNfRV9JTlRFUk5BTF9FUlJPUiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOVkFMSURfSEFORExFOgotICAgICAgdHh0ID0gIlNFQ19FX0lOVkFMSURfSEFORExFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9QQVJBTUVURVI6Ci0gICAgICB0eHQgPSAiU0VDX0VfSU5WQUxJRF9QQVJBTUVURVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlZBTElEX1RPS0VOOgotICAgICAgdHh0ID0gIlNFQ19FX0lOVkFMSURfVE9LRU4iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lTU1VJTkdfQ0FfVU5UUlVTVEVEX0tEQzoKLSAgICAgIHR4dCA9ICJTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRF9LREMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfQ0VSVF9FWFBJUkVEOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19DRVJUX0VYUElSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfQ0VSVF9SRVZPS0VEOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19DRVJUX1JFVk9LRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfSU5WQUxJRF9SRVFVRVNUOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19JTlZBTElEX1JFUVVFU1QiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfVU5BQkxFX1RPX1JFRkVSOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19VTkFCTEVfVE9fUkVGRVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfVU5LTk9XTl9FVFlQRToKLSAgICAgIHR4dCA9ICJTRUNfRV9LRENfVU5LTk9XTl9FVFlQRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0xPR09OX0RFTklFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9MT0dPTl9ERU5JRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NQVhfUkVGRVJSQUxTX0VYQ0VFREVEOgotICAgICAgdHh0ID0gIlNFQ19FX01BWF9SRUZFUlJBTFNfRVhDRUVERUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NRVNTQUdFX0FMVEVSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfTUVTU0FHRV9BTFRFUkVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTVVMVElQTEVfQUNDT1VOVFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTVVMVElQTEVfQUNDT1VOVFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NVVNUX0JFX0tEQzoKLSAgICAgIHR4dCA9ICJTRUNfRV9NVVNUX0JFX0tEQyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX05PVF9PV05FUjoKLSAgICAgIHR4dCA9ICJTRUNfRV9OT1RfT1dORVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19BVVRIRU5USUNBVElOR19BVVRIT1JJVFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fQVVUSEVOVElDQVRJTkdfQVVUSE9SSVRZIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fQ1JFREVOVElBTFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19JTVBFUlNPTkFUSU9OOgotICAgICAgdHh0ID0gIlNFQ19FX05PX0lNUEVSU09OQVRJT04iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19JUF9BRERSRVNTRVM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fSVBfQUREUkVTU0VTIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTk9fS0VSQl9LRVk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fS0VSQl9LRVkiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19QQV9EQVRBOgotICAgICAgdHh0ID0gIlNFQ19FX05PX1BBX0RBVEEiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19TNFVfUFJPVF9TVVBQT1JUOgotICAgICAgdHh0ID0gIlNFQ19FX05PX1M0VV9QUk9UX1NVUFBPUlQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19UR1RfUkVQTFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fVEdUX1JFUExZIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfT1VUX09GX1NFUVVFTkNFOgotICAgICAgdHh0ID0gIlNFQ19FX09VVF9PRl9TRVFVRU5DRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1BLSU5JVF9DTElFTlRfRkFJTFVSRToKLSAgICAgIHR4dCA9ICJTRUNfRV9QS0lOSVRfQ0xJRU5UX0ZBSUxVUkUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9QS0lOSVRfTkFNRV9NSVNNQVRDSDoKLSAgICAgIHR4dCA9ICJTRUNfRV9QS0lOSVRfTkFNRV9NSVNNQVRDSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1BPTElDWV9OTFRNX09OTFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfUE9MSUNZX05MVE1fT05MWSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1FPUF9OT1RfU1VQUE9SVEVEOgotICAgICAgdHh0ID0gIlNFQ19FX1FPUF9OT1RfU1VQUE9SVEVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfUkVWT0NBVElPTl9PRkZMSU5FX0M6Ci0gICAgICB0eHQgPSAiU0VDX0VfUkVWT0NBVElPTl9PRkZMSU5FX0MiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfS0RDOgotICAgICAgdHh0ID0gIlNFQ19FX1JFVk9DQVRJT05fT0ZGTElORV9LREMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TRUNQS0dfTk9UX0ZPVU5EOgotICAgICAgdHh0ID0gIlNFQ19FX1NFQ1BLR19OT1RfRk9VTkQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TRUNVUklUWV9RT1NfRkFJTEVEOgotICAgICAgdHh0ID0gIlNFQ19FX1NFQ1VSSVRZX1FPU19GQUlMRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9DRVJUX0VYUElSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU01BUlRDQVJEX0NFUlRfRVhQSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9DRVJUX1JFVk9LRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU01BUlRDQVJEX0NFUlRfUkVWT0tFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9MT0dPTl9SRVFVSVJFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9TTUFSVENBUkRfTE9HT05fUkVRVUlSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TVFJPTkdfQ1JZUFRPX05PVF9TVVBQT1JURUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU1RST05HX0NSWVBUT19OT1RfU1VQUE9SVEVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVEFSR0VUX1VOS05PV046Ci0gICAgICB0eHQgPSAiU0VDX0VfVEFSR0VUX1VOS05PV04iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9USU1FX1NLRVc6Ci0gICAgICB0eHQgPSAiU0VDX0VfVElNRV9TS0VXIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVE9PX01BTllfUFJJTkNJUEFMUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9UT09fTUFOWV9QUklOQ0lQQUxTIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVU5GSU5JU0hFRF9DT05URVhUX0RFTEVURUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfVU5GSU5JU0hFRF9DT05URVhUX0RFTEVURUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTOgotICAgICAgdHh0ID0gIlNFQ19FX1VOS05PV05fQ1JFREVOVElBTFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKLSAgICAgIHR4dCA9ICJTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1VOU1VQUE9SVEVEX1BSRUFVVEg6Ci0gICAgICB0eHQgPSAiU0VDX0VfVU5TVVBQT1JURURfUFJFQVVUSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1VOVFJVU1RFRF9ST09UOgotICAgICAgdHh0ID0gIlNFQ19FX1VOVFJVU1RFRF9ST09UIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEU6Ci0gICAgICB0eHQgPSAiU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6Ci0gICAgICB0eHQgPSAiU0VDX0VfV1JPTkdfUFJJTkNJUEFMIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFOgotICAgICAgdHh0ID0gIlNFQ19JX0NPTVBMRVRFX0FORF9DT05USU5VRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0NPTVBMRVRFX05FRURFRDoKLSAgICAgIHR4dCA9ICJTRUNfSV9DT01QTEVURV9ORUVERUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfSV9DT05URVhUX0VYUElSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfQ09OVEVYVF9FWFBJUkVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfQ09OVElOVUVfTkVFREVEOgotICAgICAgdHh0ID0gIlNFQ19JX0NPTlRJTlVFX05FRURFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0lOQ09NUExFVEVfQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0lfSU5DT01QTEVURV9DUkVERU5USUFMUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0xPQ0FMX0xPR09OOgotICAgICAgdHh0ID0gIlNFQ19JX0xPQ0FMX0xPR09OIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfTk9fTFNBX0NPTlRFWFQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfTk9fTFNBX0NPTlRFWFQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfSV9SRU5FR09USUFURToKLSAgICAgIHR4dCA9ICJTRUNfSV9SRU5FR09USUFURSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX1NJR05BVFVSRV9ORUVERUQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfU0lHTkFUVVJFX05FRURFRCI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgdHh0ID0gIlVua25vd24gZXJyb3IiOworICBpZighZ2V0X3dpbmFwaV9lcnJvcihlcnIsIGJ1ZiwgYnVmbGVuKSkgeworICAgIG1zbnByaW50ZihidWYsIGJ1ZmxlbiwgIlVua25vd24gZXJyb3IgJXUgKDB4JTA4WCkiLCBlcnIsIGVycik7CiAgIH0KLQotICBpZihlcnIgPT0gU0VDX0VfT0spCi0gICAgc3RybmNweShvdXRidWYsIHR4dCwgb3V0bWF4KTsKLSAgZWxzZSBpZihlcnIgPT0gU0VDX0VfSUxMRUdBTF9NRVNTQUdFKQotICAgIG1zbnByaW50ZihvdXRidWYsIG91dG1heCwKLSAgICAgICAgICAgICAgIlNFQ19FX0lMTEVHQUxfTUVTU0FHRSAoMHglMDhYKSAtIFRoaXMgZXJyb3IgdXN1YWxseSBvY2N1cnMgIgotICAgICAgICAgICAgICAid2hlbiBhIGZhdGFsIFNTTC9UTFMgYWxlcnQgaXMgcmVjZWl2ZWQgKGUuZy4gaGFuZHNoYWtlIGZhaWxlZCkuIgotICAgICAgICAgICAgICAiIE1vcmUgZGV0YWlsIG1heSBiZSBhdmFpbGFibGUgaW4gdGhlIFdpbmRvd3MgU3lzdGVtIGV2ZW50IGxvZy4iLAotICAgICAgICAgICAgICBlcnIpOwotICBlbHNlIHsKLSAgICBzdHIgPSB0eHRidWY7Ci0gICAgbXNucHJpbnRmKHR4dGJ1Ziwgc2l6ZW9mKHR4dGJ1ZiksICIlcyAoMHglMDhYKSIsIHR4dCwgZXJyKTsKLSAgICB0eHRidWZbc2l6ZW9mKHR4dGJ1ZiktMV0gPSAnXDAnOwotCi0jaWZkZWYgX1dJTjMyX1dDRQotICAgIHsKLSAgICAgIHdjaGFyX3Qgd2J1ZlsyNTZdOwotICAgICAgd2J1ZlswXSA9IEwnXDAnOwotCi0gICAgICBpZihGb3JtYXRNZXNzYWdlKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfSUdOT1JFX0lOU0VSVFMsCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGVyciwgTEFOR19ORVVUUkFMLAotICAgICAgICAgICAgICAgICAgICAgICB3YnVmLCBzaXplb2Yod2J1Zikvc2l6ZW9mKHdjaGFyX3QpLCBOVUxMKSkgewotICAgICAgICB3Y3N0b21icyhtc2didWYsIHdidWYsIHNpemVvZihtc2didWYpLTEpOwotICAgICAgICBtc2dfZm9ybWF0dGVkID0gVFJVRTsKLSAgICAgIH0KLSAgICB9CiAjZWxzZQotICAgIGlmKEZvcm1hdE1lc3NhZ2VBKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKLSAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUywKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBlcnIsIExBTkdfTkVVVFJBTCwKLSAgICAgICAgICAgICAgICAgICAgICBtc2didWYsIHNpemVvZihtc2didWYpLTEsIE5VTEwpKSB7Ci0gICAgICBtc2dfZm9ybWF0dGVkID0gVFJVRTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZihtc2dfZm9ybWF0dGVkKSB7Ci0gICAgICBtc2didWZbc2l6ZW9mKG1zZ2J1ZiktMV0gPSAnXDAnOwotICAgICAgLyogc3RyaXAgdHJhaWxpbmcgJ1xyXG4nIG9yICdcbicgKi8KLSAgICAgIHAgPSBzdHJyY2hyKG1zZ2J1ZiwgJ1xuJyk7Ci0gICAgICBpZihwICYmIChwIC0gbXNnYnVmKSA+PSAyKQotICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICBwID0gc3RycmNocihtc2didWYsICdccicpOwotICAgICAgaWYocCAmJiAocCAtIG1zZ2J1ZikgPj0gMSkKLSAgICAgICAgKnAgPSAnXDAnOwotICAgICAgbXNnID0gbXNnYnVmOwotICAgIH0KLSAgICBpZihtc2cpCi0gICAgICBtc25wcmludGYob3V0YnVmLCBvdXRtYXgsICIlcyAtICVzIiwgc3RyLCBtc2cpOwotICAgIGVsc2UKLSAgICAgIHN0cm5jcHkob3V0YnVmLCBzdHIsIG91dG1heCk7CisgIHsKKyAgICBjb25zdCBjaGFyICp0eHQgPSAoZXJyID09IEVSUk9SX1NVQ0NFU1MpID8gIk5vIGVycm9yIiA6ICJFcnJvciI7CisgICAgc3RybmNweShidWYsIHR4dCwgYnVmbGVuKTsKKyAgICBidWZbYnVmbGVuIC0gMV0gPSAnXDAnOwogICB9Ci0KLSNlbHNlCi0KLSAgaWYoZXJyID09IFNFQ19FX09LKQotICAgIHR4dCA9ICJObyBlcnJvciI7Ci0gIGVsc2UKLSAgICB0eHQgPSAiRXJyb3IiOwotCi0gIHN0cm5jcHkob3V0YnVmLCB0eHQsIG91dG1heCk7Ci0KICNlbmRpZgogCi0gIG91dGJ1ZltvdXRtYXhdID0gJ1wwJzsKLQogICBpZihlcnJubyAhPSBvbGRfZXJybm8pCiAgICAgZXJybm8gPSBvbGRfZXJybm87CiAKQEAgLTEwOTcsNiArODUzLDE1NyBAQAogICAgIFNldExhc3RFcnJvcihvbGRfd2luX2Vycik7CiAjZW5kaWYKIAotICByZXR1cm4gb3V0YnVmOworICByZXR1cm4gYnVmOworfQorI2VuZGlmIC8qIFdJTjMyIHx8IF9XSU4zMl9XQ0UgKi8KKworI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKKy8qCisgKiBDdXJsX3NzcGlfc3RyZXJyb3I6CisgKiBWYXJpYW50IG9mIEN1cmxfc3RyZXJyb3IgaWYgdGhlIGVycm9yIGNvZGUgaXMgZGVmaW5pdGVseSBXaW5kb3dzIFNTUEkuCisgKi8KK2NvbnN0IGNoYXIgKkN1cmxfc3NwaV9zdHJlcnJvcihpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisjaWZkZWYgUFJFU0VSVkVfV0lORE9XU19FUlJPUl9DT0RFCisgIERXT1JEIG9sZF93aW5fZXJyID0gR2V0TGFzdEVycm9yKCk7CisjZW5kaWYKKyAgaW50IG9sZF9lcnJubyA9IGVycm5vOworICBjb25zdCBjaGFyICp0eHQ7CisKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisKKyAgc3dpdGNoKGVycikgeworICAgIGNhc2UgU0VDX0VfT0s6CisgICAgICB0eHQgPSAiTm8gZXJyb3IiOworICAgICAgYnJlYWs7CisjZGVmaW5lIFNFQzJUWFQoc2VjKSBjYXNlIHNlYzogdHh0ID0gI3NlYzsgYnJlYWsKKyAgICBTRUMyVFhUKENSWVBUX0VfUkVWT0tFRCk7CisgICAgU0VDMlRYVChTRUNfRV9BTEdPUklUSE1fTUlTTUFUQ0gpOworICAgIFNFQzJUWFQoU0VDX0VfQkFEX0JJTkRJTkdTKTsKKyAgICBTRUMyVFhUKFNFQ19FX0JBRF9QS0dJRCk7CisgICAgU0VDMlRYVChTRUNfRV9CVUZGRVJfVE9PX1NNQUxMKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NBTk5PVF9JTlNUQUxMKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NBTk5PVF9QQUNLKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NFUlRfRVhQSVJFRCk7CisgICAgU0VDMlRYVChTRUNfRV9DRVJUX1VOS05PV04pOworICAgIFNFQzJUWFQoU0VDX0VfQ0VSVF9XUk9OR19VU0FHRSk7CisgICAgU0VDMlRYVChTRUNfRV9DT05URVhUX0VYUElSRUQpOworICAgIFNFQzJUWFQoU0VDX0VfQ1JPU1NSRUFMTV9ERUxFR0FUSU9OX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0RFQ1JZUFRfRkFJTFVSRSk7CisgICAgU0VDMlRYVChTRUNfRV9ERUxFR0FUSU9OX1BPTElDWSk7CisgICAgU0VDMlRYVChTRUNfRV9ERUxFR0FUSU9OX1JFUVVJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0RPV05HUkFERV9ERVRFQ1RFRCk7CisgICAgU0VDMlRYVChTRUNfRV9FTkNSWVBUX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfSUxMRUdBTF9NRVNTQUdFKTsKKyAgICBTRUMyVFhUKFNFQ19FX0lOQ09NUExFVEVfQ1JFREVOVElBTFMpOworICAgIFNFQzJUWFQoU0VDX0VfSU5DT01QTEVURV9NRVNTQUdFKTsKKyAgICBTRUMyVFhUKFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpOworICAgIFNFQzJUWFQoU0VDX0VfSU5URVJOQUxfRVJST1IpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9IQU5ETEUpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9QQVJBTUVURVIpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9UT0tFTik7CisgICAgU0VDMlRYVChTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRCk7CisgICAgU0VDMlRYVChTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRF9LREMpOworICAgIFNFQzJUWFQoU0VDX0VfS0RDX0NFUlRfRVhQSVJFRCk7CisgICAgU0VDMlRYVChTRUNfRV9LRENfQ0VSVF9SRVZPS0VEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0tEQ19JTlZBTElEX1JFUVVFU1QpOworICAgIFNFQzJUWFQoU0VDX0VfS0RDX1VOQUJMRV9UT19SRUZFUik7CisgICAgU0VDMlRYVChTRUNfRV9LRENfVU5LTk9XTl9FVFlQRSk7CisgICAgU0VDMlRYVChTRUNfRV9MT0dPTl9ERU5JRUQpOworICAgIFNFQzJUWFQoU0VDX0VfTUFYX1JFRkVSUkFMU19FWENFRURFRCk7CisgICAgU0VDMlRYVChTRUNfRV9NRVNTQUdFX0FMVEVSRUQpOworICAgIFNFQzJUWFQoU0VDX0VfTVVMVElQTEVfQUNDT1VOVFMpOworICAgIFNFQzJUWFQoU0VDX0VfTVVTVF9CRV9LREMpOworICAgIFNFQzJUWFQoU0VDX0VfTk9UX09XTkVSKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWSk7CisgICAgU0VDMlRYVChTRUNfRV9OT19DUkVERU5USUFMUyk7CisgICAgU0VDMlRYVChTRUNfRV9OT19JTVBFUlNPTkFUSU9OKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX0lQX0FERFJFU1NFUyk7CisgICAgU0VDMlRYVChTRUNfRV9OT19LRVJCX0tFWSk7CisgICAgU0VDMlRYVChTRUNfRV9OT19QQV9EQVRBKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX1M0VV9QUk9UX1NVUFBPUlQpOworICAgIFNFQzJUWFQoU0VDX0VfTk9fVEdUX1JFUExZKTsKKyAgICBTRUMyVFhUKFNFQ19FX09VVF9PRl9TRVFVRU5DRSk7CisgICAgU0VDMlRYVChTRUNfRV9QS0lOSVRfQ0xJRU5UX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfUEtJTklUX05BTUVfTUlTTUFUQ0gpOworICAgIFNFQzJUWFQoU0VDX0VfUE9MSUNZX05MVE1fT05MWSk7CisgICAgU0VDMlRYVChTRUNfRV9RT1BfTk9UX1NVUFBPUlRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfQyk7CisgICAgU0VDMlRYVChTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfS0RDKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NFQ1BLR19OT1RfRk9VTkQpOworICAgIFNFQzJUWFQoU0VDX0VfU0VDVVJJVFlfUU9TX0ZBSUxFRCk7CisgICAgU0VDMlRYVChTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUyk7CisgICAgU0VDMlRYVChTRUNfRV9TTUFSVENBUkRfQ0VSVF9FWFBJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NNQVJUQ0FSRF9DRVJUX1JFVk9LRUQpOworICAgIFNFQzJUWFQoU0VDX0VfU01BUlRDQVJEX0xPR09OX1JFUVVJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NUUk9OR19DUllQVE9fTk9UX1NVUFBPUlRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9UQVJHRVRfVU5LTk9XTik7CisgICAgU0VDMlRYVChTRUNfRV9USU1FX1NLRVcpOworICAgIFNFQzJUWFQoU0VDX0VfVE9PX01BTllfUFJJTkNJUEFMUyk7CisgICAgU0VDMlRYVChTRUNfRV9VTkZJTklTSEVEX0NPTlRFWFRfREVMRVRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTKTsKKyAgICBTRUMyVFhUKFNFQ19FX1VOU1VQUE9SVEVEX0ZVTkNUSU9OKTsKKyAgICBTRUMyVFhUKFNFQ19FX1VOU1VQUE9SVEVEX1BSRUFVVEgpOworICAgIFNFQzJUWFQoU0VDX0VfVU5UUlVTVEVEX1JPT1QpOworICAgIFNFQzJUWFQoU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEUpOworICAgIFNFQzJUWFQoU0VDX0VfV1JPTkdfUFJJTkNJUEFMKTsKKyAgICBTRUMyVFhUKFNFQ19JX0NPTVBMRVRFX0FORF9DT05USU5VRSk7CisgICAgU0VDMlRYVChTRUNfSV9DT01QTEVURV9ORUVERUQpOworICAgIFNFQzJUWFQoU0VDX0lfQ09OVEVYVF9FWFBJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19JX0NPTlRJTlVFX05FRURFRCk7CisgICAgU0VDMlRYVChTRUNfSV9JTkNPTVBMRVRFX0NSRURFTlRJQUxTKTsKKyAgICBTRUMyVFhUKFNFQ19JX0xPQ0FMX0xPR09OKTsKKyAgICBTRUMyVFhUKFNFQ19JX05PX0xTQV9DT05URVhUKTsKKyAgICBTRUMyVFhUKFNFQ19JX1JFTkVHT1RJQVRFKTsKKyAgICBTRUMyVFhUKFNFQ19JX1NJR05BVFVSRV9ORUVERUQpOworICAgIGRlZmF1bHQ6CisgICAgICB0eHQgPSAiVW5rbm93biBlcnJvciI7CisgIH0KKworICBpZihlcnIgPT0gU0VDX0VfSUxMRUdBTF9NRVNTQUdFKSB7CisgICAgbXNucHJpbnRmKGJ1ZiwgYnVmbGVuLAorICAgICAgICAgICAgICAiU0VDX0VfSUxMRUdBTF9NRVNTQUdFICgweCUwOFgpIC0gVGhpcyBlcnJvciB1c3VhbGx5IG9jY3VycyAiCisgICAgICAgICAgICAgICJ3aGVuIGEgZmF0YWwgU1NML1RMUyBhbGVydCBpcyByZWNlaXZlZCAoZS5nLiBoYW5kc2hha2UgZmFpbGVkKS4iCisgICAgICAgICAgICAgICIgTW9yZSBkZXRhaWwgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgV2luZG93cyBTeXN0ZW0gZXZlbnQgbG9nLiIsCisgICAgICAgICAgICAgIGVycik7CisgIH0KKyAgZWxzZSB7CisgICAgY2hhciB0eHRidWZbODBdOworICAgIGNoYXIgbXNnYnVmWzI1Nl07CisKKyAgICBtc25wcmludGYodHh0YnVmLCBzaXplb2YodHh0YnVmKSwgIiVzICgweCUwOFgpIiwgdHh0LCBlcnIpOworCisgICAgaWYoZ2V0X3dpbmFwaV9lcnJvcihlcnIsIG1zZ2J1Ziwgc2l6ZW9mKG1zZ2J1ZikpKQorICAgICAgbXNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMgLSAlcyIsIHR4dGJ1ZiwgbXNnYnVmKTsKKyAgICBlbHNlIHsKKyAgICAgIHN0cm5jcHkoYnVmLCB0eHRidWYsIGJ1Zmxlbik7CisgICAgICBidWZbYnVmbGVuIC0gMV0gPSAnXDAnOworICAgIH0KKyAgfQorCisjZWxzZQorICBpZihlcnIgPT0gU0VDX0VfT0spCisgICAgdHh0ID0gIk5vIGVycm9yIjsKKyAgZWxzZQorICAgIHR4dCA9ICJFcnJvciI7CisgIHN0cm5jcHkoYnVmLCB0eHQsIGJ1Zmxlbik7CisgIGJ1ZltidWZsZW4gLSAxXSA9ICdcMCc7CisjZW5kaWYKKworICBpZihlcnJubyAhPSBvbGRfZXJybm8pCisgICAgZXJybm8gPSBvbGRfZXJybm87CisKKyNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKKyAgaWYob2xkX3dpbl9lcnIgIT0gR2V0TGFzdEVycm9yKCkpCisgICAgU2V0TGFzdEVycm9yKG9sZF93aW5fZXJyKTsKKyNlbmRpZgorCisgIHJldHVybiBidWY7CiB9CiAjZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmVycm9yLmgKaW5kZXggNjgzYjViNC4uYmFlOGY4OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNCw5ICsyNCwxMiBAQAogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogCi0jZGVmaW5lIFNUUkVSUk9SX0xFTiAxMjggLyogYSBzdWl0YWJsZSBsZW5ndGggKi8KKyNkZWZpbmUgU1RSRVJST1JfTEVOIDI1NiAvKiBhIHN1aXRhYmxlIGxlbmd0aCAqLwogCiBjb25zdCBjaGFyICpDdXJsX3N0cmVycm9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorY29uc3QgY2hhciAqQ3VybF93aW5hcGlfc3RyZXJyb3IoRFdPUkQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworI2VuZGlmCiAjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQogY29uc3QgY2hhciAqQ3VybF9zc3BpX3N0cmVycm9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cnRvay5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKaW5kZXggNDYwZWI4Ny4uYmE2ZTAyNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIGlmKCoqZW5kKSB7CiAgICAgICAvKiB0aGUgZW5kIGlzIG5vdCBhIG51bGwgYnl0ZSAqLwotICAgICAgKiplbmQgPSAnXDAnOyAgLyogemVybyB0ZXJtaW5hdGUgaXQhICovCisgICAgICAqKmVuZCA9ICdcMCc7ICAvKiBudWxsLXRlcm1pbmF0ZSBpdCEgKi8KICAgICAgICsrKmVuZDsgICAgICAgIC8qIGFkdmFuY2UgdGhlIGxhc3QgcG9pbnRlciB0byBiZXlvbmQgdGhlIG51bGwgYnl0ZSAqLwogICAgIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b2suaAppbmRleCA5MGI4MzFlLi5lMjIxZmE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b2suaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b2suaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9vZmZ0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b29mZnQuYwppbmRleCA1NDZhM2ZmLi45NmUzODIwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b29mZnQuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b29mZnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuYwppbmRleCBmN2Y4MTdkLi5iOTU4N2I1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgLSAyMDE3LCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiAtIDIwMjAsIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNiw2ICszNiwxMiBAQAogTEFSR0VfSU5URUdFUiBDdXJsX2ZyZXE7CiBib29sIEN1cmxfaXNWaXN0YU9yR3JlYXRlcjsKIAorLyogSGFuZGxlIG9mIGlwaGxwYXBwLmRsbCAqLworc3RhdGljIEhNT0RVTEUgc19oSXBIbHBBcGlEbGwgPSBOVUxMOworCisvKiBQb2ludGVyIHRvIHRoZSBpZl9uYW1ldG9pbmRleCBmdW5jdGlvbiAqLworSUZfTkFNRVRPSU5ERVhfRk4gQ3VybF9pZl9uYW1ldG9pbmRleCA9IE5VTEw7CisKIC8qIEN1cmxfd2luMzJfaW5pdCgpIHBlcmZvcm1zIHdpbjMyIGdsb2JhbCBpbml0aWFsaXphdGlvbiAqLwogQ1VSTGNvZGUgQ3VybF93aW4zMl9pbml0KGxvbmcgZmxhZ3MpCiB7CkBAIC04OSwyMCArOTUsMzcgQEAKICAgfQogI2VuZGlmCiAKKyAgc19oSXBIbHBBcGlEbGwgPSBDdXJsX2xvYWRfbGlicmFyeShURVhUKCJpcGhscGFwaS5kbGwiKSk7CisgIGlmKHNfaElwSGxwQXBpRGxsKSB7CisgICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBpZl9uYW1ldG9pbmRleCBmdW5jdGlvbiAqLworICAgIElGX05BTUVUT0lOREVYX0ZOIHBJZk5hbWVUb0luZGV4ID0KKyAgICAgIENVUkxYX0ZVTkNUSU9OX0NBU1QoSUZfTkFNRVRPSU5ERVhfRk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIChHZXRQcm9jQWRkcmVzcyhzX2hJcEhscEFwaURsbCwgImlmX25hbWV0b2luZGV4IikpKTsKKworICAgIGlmKHBJZk5hbWVUb0luZGV4KQorICAgICAgQ3VybF9pZl9uYW1ldG9pbmRleCA9IHBJZk5hbWVUb0luZGV4OworICB9CisKICAgaWYoQ3VybF92ZXJpZnlfd2luZG93c192ZXJzaW9uKDYsIDAsIFBMQVRGT1JNX1dJTk5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9HUkVBVEVSX1RIQU5fRVFVQUwpKSB7CiAgICAgQ3VybF9pc1Zpc3RhT3JHcmVhdGVyID0gVFJVRTsKLSAgICBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZDdXJsX2ZyZXEpOwogICB9CiAgIGVsc2UKICAgICBDdXJsX2lzVmlzdGFPckdyZWF0ZXIgPSBGQUxTRTsKIAorICBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZDdXJsX2ZyZXEpOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKIC8qIEN1cmxfd2luMzJfY2xlYW51cCgpIGlzIHRoZSBvcHBvc2l0ZSBvZiBDdXJsX3dpbjMyX2luaXQoKSAqLwogdm9pZCBDdXJsX3dpbjMyX2NsZWFudXAobG9uZyBpbml0X2ZsYWdzKQogeworICBpZihzX2hJcEhscEFwaURsbCkgeworICAgIEZyZWVMaWJyYXJ5KHNfaElwSGxwQXBpRGxsKTsKKyAgICBzX2hJcEhscEFwaURsbCA9IE5VTEw7CisgICAgQ3VybF9pZl9uYW1ldG9pbmRleCA9IE5VTEw7CisgIH0KKwogI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKICAgQ3VybF9zc3BpX2dsb2JhbF9jbGVhbnVwKCk7CiAjZW5kaWYKQEAgLTExNCwxMCArMTM3LDYgQEAKICAgfQogfQogCi0jaWYgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCAoIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1RFTE5FVCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTlNPQ0spKQotCi0KICNpZiAhZGVmaW5lZChMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCkKICNkZWZpbmUgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEggIDB4MDAwMDAwMDgKICNlbmRpZgpAQCAtMTQwLDggKzE1OSw2IEBACiAjICBkZWZpbmUgTE9BRExJQkFSWUVYICAgICJMb2FkTGlicmFyeUV4QSIKICNlbmRpZgogCi0jZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSB8fCAoIUNVUkxfRElTQUJMRV9URUxORVQgJiYgVVNFX1dJTlNPQ0spICovCi0KIC8qCiAgKiBDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oKQogICoKQEAgLTMzNCw5ICszNTEsNiBAQAogICByZXR1cm4gbWF0Y2hlZDsKIH0KIAotI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkgfHwgKCFkZWZpbmVkKENVUkxfRElTQUJMRV9URUxORVQpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFVTRV9XSU5TT0NLKSkKLQogLyoKICAqIEN1cmxfbG9hZF9saWJyYXJ5KCkKICAqCkBAIC0zNTMsNiArMzY3LDcgQEAKICAqLwogSE1PRFVMRSBDdXJsX2xvYWRfbGlicmFyeShMUENUU1RSIGZpbGVuYW1lKQogeworI2lmbmRlZiBDVVJMX1dJTkRPV1NfQVBQCiAgIEhNT0RVTEUgaE1vZHVsZSA9IE5VTEw7CiAgIExPQURMSUJSQVJZRVhfRk4gcExvYWRMaWJyYXJ5RXggPSBOVUxMOwogCkBAIC00MDcsMTAgKzQyMiwxMiBAQAogICAgICAgZnJlZShwYXRoKTsKICAgICB9CiAgIH0KLQogICByZXR1cm4gaE1vZHVsZTsKKyNlbHNlCisgIC8qIHRoZSBVbml2ZXJzYWwgV2luZG93cyBQbGF0Zm9ybSAoVVdQKSBjYW4ndCBkbyB0aGlzICovCisgICh2b2lkKWZpbGVuYW1lOworICByZXR1cm4gTlVMTDsKKyNlbmRpZgogfQogCi0jZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSB8fCAoIUNVUkxfRElTQUJMRV9URUxORVQgJiYgVVNFX1dJTlNPQ0spICovCi0KICNlbmRpZiAvKiBXSU4zMiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuaAppbmRleCA5MjYzMjhhLi5kMjg4MmZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYsIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE2IC0gMjAxOSwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ4LDIwICs0OCwyMSBAQAogICBQTEFURk9STV9XSU5OVAogfSBQbGF0Zm9ybUlkZW50aWZpZXI7CiAKKy8qIFdlIHVzZSBvdXIgb3duIHR5cGVkZWYgaGVyZSBzaW5jZSBzb21lIGhlYWRlcnMgbWlnaHQgbGFjayB0aGlzICovCit0eXBlZGVmIHVuc2lnbmVkIGludChXSU5BUEkgKklGX05BTUVUT0lOREVYX0ZOKShjb25zdCBjaGFyICopOworCisvKiBUaGlzIGlzIHVzZWQgaW5zdGVhZCBvZiBpZl9uYW1ldG9pbmRleCBpZiBhdmFpbGFibGUgb24gV2luZG93cyAqLworZXh0ZXJuIElGX05BTUVUT0lOREVYX0ZOIEN1cmxfaWZfbmFtZXRvaW5kZXg7CisKIC8qIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgaWYgd2UgYXJlIHJ1bm5pbmcgb24gYSBzcGVjaWZpYyB3aW5kb3dzIHZlcnNpb24gKi8KIGJvb2wgQ3VybF92ZXJpZnlfd2luZG93c192ZXJzaW9uKGNvbnN0IHVuc2lnbmVkIGludCBtYWpvclZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWlub3JWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm1JZGVudGlmaWVyIHBsYXRmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVyc2lvbkNvbmRpdGlvbiBjb25kaXRpb24pOwogCi0jaWYgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCAoIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1RFTE5FVCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTlNPQ0spKQotCiAvKiBUaGlzIGlzIHVzZWQgdG8gZHluYW1pY2FsbHkgbG9hZCBETExzICovCiBITU9EVUxFIEN1cmxfbG9hZF9saWJyYXJ5KExQQ1RTVFIgZmlsZW5hbWUpOwogCi0jZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSB8fCAoIUNVUkxfRElTQUJMRV9URUxORVQgJiYgVVNFX1dJTlNPQ0spICovCi0KICNlbmRpZiAvKiBXSU4zMiAqLwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU1lTVEVNX1dJTjMyX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmMKaW5kZXggOTU1MjU1Yy4uYzNiNThlNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTY5LDEyICs2OSwxMiBAQAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeC0+c3ViZW5kID0geC0+c3VicG9pbnRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBDVVJMX1NCX0NMRUFSKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IFdISUxFX0ZBTFNFCisgIH0gd2hpbGUoMCkKICNkZWZpbmUgQ1VSTF9TQl9BQ0NVTSh4LGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKHgtPnN1YnBvaW50ZXIgPCAoeC0+c3ViYnVmZmVyICsgc2l6ZW9mKHgtPnN1YmJ1ZmZlcikpKSAgIFwKICAgICAgICp4LT5zdWJwb2ludGVyKysgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gV0hJTEVfRkFMU0UKKyAgfSB3aGlsZSgwKQogCiAjZGVmaW5lICBDVVJMX1NCX0dFVCh4KSAoKCp4LT5zdWJwb2ludGVyKyspJjB4ZmYpCiAjZGVmaW5lICBDVVJMX1NCX0xFTih4KSAoeC0+c3ViZW5kIC0geC0+c3VicG9pbnRlcikKQEAgLTEzMTUsNyArMTMxNSw3IEBACiAgIERXT1JEIHJlYWRmaWxlX3JlYWQ7CiAgIGludCBlcnI7CiAjZWxzZQotICBpbnQgaW50ZXJ2YWxfbXM7CisgIHRpbWVkaWZmX3QgaW50ZXJ2YWxfbXM7CiAgIHN0cnVjdCBwb2xsZmQgcGZkWzJdOwogICBpbnQgcG9sbF9jbnQ7CiAgIGN1cmxfb2ZmX3QgdG90YWxfZGwgPSAwOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuaAppbmRleCA2NjhhNzhhLi40MzE0MjdmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5jCmluZGV4IDI4OWNkYTIuLjM3OGQ5NTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZnRwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTExNSwxMSArMTE1LDExIEBACiAgIFRGVFBfRVJSX05PUkVTUE9OU0UKIH0gdGZ0cF9lcnJvcl90OwogCi10eXBlZGVmIHN0cnVjdCB0ZnRwX3BhY2tldCB7CitzdHJ1Y3QgdGZ0cF9wYWNrZXQgewogICB1bnNpZ25lZCBjaGFyICpkYXRhOwotfSB0ZnRwX3BhY2tldF90OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhIHsKK3N0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgewogICB0ZnRwX3N0YXRlX3QgICAgc3RhdGU7CiAgIHRmdHBfbW9kZV90ICAgICBtb2RlOwogICB0ZnRwX2Vycm9yX3QgICAgZXJyb3I7CkBAIC0xNDAsMjUgKzE0MCwyNCBAQAogICBpbnQgICAgICAgICAgICAgc2J5dGVzOwogICBpbnQgICAgICAgICAgICAgYmxrc2l6ZTsKICAgaW50ICAgICAgICAgICAgIHJlcXVlc3RlZF9ibGtzaXplOwotICB0ZnRwX3BhY2tldF90ICAgcnBhY2tldDsKLSAgdGZ0cF9wYWNrZXRfdCAgIHNwYWNrZXQ7Ci19IHRmdHBfc3RhdGVfZGF0YV90OworICBzdHJ1Y3QgdGZ0cF9wYWNrZXQgcnBhY2tldDsKKyAgc3RydWN0IHRmdHBfcGFja2V0IHNwYWNrZXQ7Cit9OwogCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9yeCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsIHRmdHBfZXZlbnRfdCBldmVudCk7Ci1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF90eCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsIHRmdHBfZXZlbnRfdCBldmVudCk7CitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9yeChzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KTsKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3R4KHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlLCB0ZnRwX2V2ZW50X3QgZXZlbnQpOwogc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogc3RhdGljIENVUkxjb2RlIHRmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKIHN0YXRpYyBDVVJMY29kZSB0ZnRwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBDVVJMY29kZSB0ZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKLXN0YXRpYyBpbnQgdGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCB0ZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF90cmFuc2xhdGVfY29kZSh0ZnRwX2Vycm9yX3QgZXJyb3IpOwogCiAKQEAgLTE5Nyw3ICsxOTYsNyBAQAogICoKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3NldF90aW1lb3V0cyh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUpCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXRfdGltZW91dHMoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUpCiB7CiAgIHRpbWVfdCBtYXh0aW1lLCB0aW1lb3V0OwogICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CkBAIC0yODAsMjUgKzI3OSwyNSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzZXRwYWNrZXRldmVudCh0ZnRwX3BhY2tldF90ICpwYWNrZXQsIHVuc2lnbmVkIHNob3J0IG51bSkKK3N0YXRpYyB2b2lkIHNldHBhY2tldGV2ZW50KHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0LCB1bnNpZ25lZCBzaG9ydCBudW0pCiB7CiAgIHBhY2tldC0+ZGF0YVswXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gPj4gOCk7CiAgIHBhY2tldC0+ZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gJiAweGZmKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBzZXRwYWNrZXRibG9jayh0ZnRwX3BhY2tldF90ICpwYWNrZXQsIHVuc2lnbmVkIHNob3J0IG51bSkKK3N0YXRpYyB2b2lkIHNldHBhY2tldGJsb2NrKHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0LCB1bnNpZ25lZCBzaG9ydCBudW0pCiB7CiAgIHBhY2tldC0+ZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gPj4gOCk7CiAgIHBhY2tldC0+ZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gJiAweGZmKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldHJwYWNrZXRldmVudChjb25zdCB0ZnRwX3BhY2tldF90ICpwYWNrZXQpCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0cnBhY2tldGV2ZW50KGNvbnN0IHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0KQogewogICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgocGFja2V0LT5kYXRhWzBdIDw8IDgpIHwgcGFja2V0LT5kYXRhWzFdKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldHJwYWNrZXRibG9jayhjb25zdCB0ZnRwX3BhY2tldF90ICpwYWNrZXQpCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0cnBhY2tldGJsb2NrKGNvbnN0IHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0KQogewogICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgocGFja2V0LT5kYXRhWzJdIDw8IDgpIHwgcGFja2V0LT5kYXRhWzNdKTsKIH0KQEAgLTMzMSw3ICszMzAsNyBAQAogICByZXR1cm4gJmJ1Zltsb2NdOwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9wYXJzZV9vcHRpb25fYWNrKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3BhcnNlX29wdGlvbl9hY2soc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgaW50IGxlbikKIHsKICAgY29uc3QgY2hhciAqdG1wID0gcHRyOwpAQCAtNDA0LDE2ICs0MDMsMTcgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCi1zdGF0aWMgc2l6ZV90IHRmdHBfb3B0aW9uX2FkZCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsIHNpemVfdCBjc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqb3B0aW9uKQorc3RhdGljIENVUkxjb2RlIHRmdHBfb3B0aW9uX2FkZChzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSwgc2l6ZV90ICpjc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBjb25zdCBjaGFyICpvcHRpb24pCiB7Ci0gIGlmKCggc3RybGVuKG9wdGlvbikgKyBjc2l6ZSArIDEpID4gKHNpemVfdClzdGF0ZS0+Ymxrc2l6ZSkKLSAgICByZXR1cm4gMDsKKyAgaWYoKCBzdHJsZW4ob3B0aW9uKSArICpjc2l6ZSArIDEpID4gKHNpemVfdClzdGF0ZS0+Ymxrc2l6ZSkKKyAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICBzdHJjcHkoYnVmLCBvcHRpb24pOwotICByZXR1cm4gc3RybGVuKG9wdGlvbikgKyAxOworICAqY3NpemUgKz0gc3RybGVuKG9wdGlvbikgKyAxOworICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBDVVJMY29kZSB0ZnRwX2Nvbm5lY3RfZm9yX3R4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX2Nvbm5lY3RfZm9yX3R4KHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0cF9ldmVudF90IGV2ZW50KQogewogICBDVVJMY29kZSByZXN1bHQ7CkBAIC00MjksNyArNDI5LDcgQEAKICAgcmV0dXJuIHRmdHBfdHgoc3RhdGUsIGV2ZW50KTsKIH0KIAotc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdF9mb3JfcngodGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlLAorc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdF9mb3Jfcngoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRwX2V2ZW50X3QgZXZlbnQpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKQEAgLTQ0NSw3ICs0NDUsOCBAQAogICByZXR1cm4gdGZ0cF9yeChzdGF0ZSwgZXZlbnQpOwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZW5kX2ZpcnN0KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KQorc3RhdGljIENVUkxjb2RlIHRmdHBfc2VuZF9maXJzdChzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0cF9ldmVudF90IGV2ZW50KQogewogICBzaXplX3Qgc2J5dGVzOwogICBzc2l6ZV90IHNlbmRkYXRhOwpAQCAtNDg2LDcgKzQ4Nyw3IEBACiAgICAgICAgZmlsZSBuYW1lIHNvIHdlIHNraXAgdGhlIGFsd2F5cy1wcmVzZW50IGZpcnN0IGxldHRlciBvZiB0aGUgcGF0aAogICAgICAgIHN0cmluZy4gKi8KICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCAmc3RhdGUtPmNvbm4tPmRhdGEtPnN0YXRlLnVwLnBhdGhbMV0sIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCBOVUxMLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCBOVUxMLCBSRUpFQ1RfWkVSTyk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNTExLDI2ICs1MTIsMzggQEAKICAgICAgIGVsc2UKICAgICAgICAgc3RyY3B5KGJ1ZiwgIjAiKTsgLyogdGhlIGRlc3RpbmF0aW9uIGlzIGxhcmdlIGVub3VnaCAqLwogCi0gICAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZUUF9PUFRJT05fVFNJWkUpOwotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CisgICAgICByZXN1bHQgPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsICZzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX1RTSVpFKTsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgcmVzdWx0ID0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCAmc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLCBidWYpOworCiAgICAgICAvKiBhZGQgYmxrc2l6ZSBvcHRpb24gKi8KICAgICAgIG1zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBzdGF0ZS0+cmVxdWVzdGVkX2Jsa3NpemUpOwotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX0JMS1NJWkUpOwotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spCisgICAgICAgIHJlc3VsdCA9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgJnNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX0JMS1NJWkUpOworICAgICAgaWYocmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICByZXN1bHQgPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsICZzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CiAKICAgICAgIC8qIGFkZCB0aW1lb3V0IG9wdGlvbiAqLwogICAgICAgbXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHN0YXRlLT5yZXRyeV90aW1lKTsKLSAgICAgIHNieXRlcyArPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURlRQX09QVElPTl9JTlRFUlZBTCk7Ci0gICAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywgYnVmKTsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgcmVzdWx0ID0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCAmc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZUUF9PUFRJT05fSU5URVJWQUwpOworICAgICAgaWYocmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICByZXN1bHQgPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsICZzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CisKKyAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykgeworICAgICAgICBmYWlsZihkYXRhLCAiVEZUUCBidWZmZXIgdG9vIHNtYWxsIGZvciBvcHRpb25zIik7CisgICAgICAgIGZyZWUoZmlsZW5hbWUpOworICAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOworICAgICAgfQogICAgIH0KIAogICAgIC8qIHRoZSB0eXBlY2FzZSBmb3IgdGhlIDNyZCBhcmd1bWVudCBpcyBtb3N0bHkgZm9yIHN5c3RlbXMgdGhhdCBkbwpAQCAtNTg2LDcgKzU5OSw4IEBACiAgKiBFdmVudCBoYW5kbGVyIGZvciB0aGUgUlggc3RhdGUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3J4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KQorc3RhdGljIENVUkxjb2RlIHRmdHBfcngoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZnRwX2V2ZW50X3QgZXZlbnQpCiB7CiAgIHNzaXplX3Qgc2J5dGVzOwogICBpbnQgcmJsb2NrOwpAQCAtNzA4LDcgKzcyMiw3IEBACiAgKiBFdmVudCBoYW5kbGVyIGZvciB0aGUgVFggc3RhdGUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3R4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KQorc3RhdGljIENVUkxjb2RlIHRmdHBfdHgoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsIHRmdHBfZXZlbnRfdCBldmVudCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IHN0YXRlLT5jb25uLT5kYXRhOwogICBzc2l6ZV90IHNieXRlczsKQEAgLTkwOCw3ICs5MjIsNyBAQAogICogVGhlIHRmdHAgc3RhdGUgbWFjaGluZSBldmVudCBkaXNwYXRjaGVyCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zdGF0ZV9tYWNoaW5lKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3N0YXRlX21hY2hpbmUoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdHBfZXZlbnRfdCBldmVudCkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CkBAIC05NDksNyArOTYzLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIENVUkxjb2RlIHRmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICB0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUgPSBjb25uLT5wcm90by50ZnRwYzsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUgPSBjb25uLT5wcm90by50ZnRwYzsKICAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKIAogICAvKiBkb25lLCBmcmVlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBwa3QgYnVmZmVycyAqLwpAQCAtOTcxLDEyICs5ODUsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZTsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGU7CiAgIGludCBibGtzaXplOworICBpbnQgbmVlZF9ibGtzaXplOwogCiAgIGJsa3NpemUgPSBURlRQX0JMS1NJWkVfREVGQVVMVDsKIAotICBzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjID0gY2FsbG9jKDEsIHNpemVvZih0ZnRwX3N0YXRlX2RhdGFfdCkpOworICBzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhKSk7CiAgIGlmKCFzdGF0ZSkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtOTg3LDE1ICsxMDAyLDIwIEBACiAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICB9CiAKKyAgbmVlZF9ibGtzaXplID0gYmxrc2l6ZTsKKyAgLyogZGVmYXVsdCBzaXplIGlzIHRoZSBmYWxsYmFjayB3aGVuIG5vIE9BQ0sgaXMgcmVjZWl2ZWQgKi8KKyAgaWYobmVlZF9ibGtzaXplIDwgVEZUUF9CTEtTSVpFX0RFRkFVTFQpCisgICAgbmVlZF9ibGtzaXplID0gVEZUUF9CTEtTSVpFX0RFRkFVTFQ7CisKICAgaWYoIXN0YXRlLT5ycGFja2V0LmRhdGEpIHsKLSAgICBzdGF0ZS0+cnBhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisgICAgc3RhdGUtPnJwYWNrZXQuZGF0YSA9IGNhbGxvYygxLCBuZWVkX2Jsa3NpemUgKyAyICsgMik7CiAKICAgICBpZighc3RhdGUtPnJwYWNrZXQuZGF0YSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKICAgaWYoIXN0YXRlLT5zcGFja2V0LmRhdGEpIHsKLSAgICBzdGF0ZS0+c3BhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisgICAgc3RhdGUtPnNwYWNrZXQuZGF0YSA9IGNhbGxvYygxLCBuZWVkX2Jsa3NpemUgKyAyICsgMik7CiAKICAgICBpZighc3RhdGUtPnNwYWNrZXQuZGF0YSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMTAwOSw3ICsxMDI5LDcgQEAKICAgc3RhdGUtPnNvY2tmZCA9IHN0YXRlLT5jb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9TVEFSVDsKICAgc3RhdGUtPmVycm9yID0gVEZUUF9FUlJfTk9ORTsKLSAgc3RhdGUtPmJsa3NpemUgPSBibGtzaXplOworICBzdGF0ZS0+Ymxrc2l6ZSA9IFRGVFBfQkxLU0laRV9ERUZBVUxUOyAvKiBVbmxlc3MgdXBkYXRlZCBieSBPQUNLIHJlc3BvbnNlICovCiAgIHN0YXRlLT5yZXF1ZXN0ZWRfYmxrc2l6ZSA9IGJsa3NpemU7CiAKICAgKChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPmxvY2FsX2FkZHIpLT5zYV9mYW1pbHkgPQpAQCAtMTA2MCw3ICsxMDgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICB0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUgPSAodGZ0cF9zdGF0ZV9kYXRhX3QgKiljb25uLT5wcm90by50ZnRwYzsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUgPSBjb25uLT5wcm90by50ZnRwYzsKIAogICAodm9pZClzdGF0dXM7IC8qIHVudXNlZCAqLwogICAodm9pZClwcmVtYXR1cmU7IC8qIG5vdCB1c2VkICovCkBAIC0xMDgyLDE0ICsxMTAyLDkgQEAKICAqIFRoZSBnZXRzb2NrIGNhbGxiYWNrCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHRmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCB0ZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgaWYoIW51bXNvY2tzKQotICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotCiAgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0KICAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCk7CiB9CiAKQEAgLTExMDYsNyArMTEyMSw3IEBACiAgIGN1cmxfc29ja2xlbl90ICAgICAgICBmcm9tbGVuOwogICBDVVJMY29kZSAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGZ0cF9zdGF0ZV9kYXRhX3QgICAgICpzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOworICBzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjOwogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAgKmsgPSAmZGF0YS0+cmVxOwogCiAgIC8qIFJlY2VpdmUgdGhlIHBhY2tldCAqLwpAQCAtMTE5Myw4ICsxMjA4LDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGxvbmcgdGZ0cF9zdGF0ZV90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgdGZ0cF9ldmVudF90ICpldmVudCkKIHsKLSAgdGltZV90ICAgICAgICAgICAgICAgIGN1cnJlbnQ7Ci0gIHRmdHBfc3RhdGVfZGF0YV90ICAgICAqc3RhdGUgPSAodGZ0cF9zdGF0ZV9kYXRhX3QgKiljb25uLT5wcm90by50ZnRwYzsKKyAgdGltZV90IGN1cnJlbnQ7CisgIHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlID0gY29ubi0+cHJvdG8udGZ0cGM7CiAKICAgaWYoZXZlbnQpCiAgICAgKmV2ZW50ID0gVEZUUF9FVkVOVF9OT05FOwpAQCAtMTIzMSw3ICsxMjQ2LDcgQEAKICAgdGZ0cF9ldmVudF90ICAgICAgICAgIGV2ZW50OwogICBDVVJMY29kZSAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGZ0cF9zdGF0ZV9kYXRhX3QgICAgICpzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOworICBzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjOwogICBsb25nICAgICAgICAgICAgICAgICAgdGltZW91dF9tcyA9IHRmdHBfc3RhdGVfdGltZW91dChjb25uLCAmZXZlbnQpOwogCiAgICpkb25lID0gRkFMU0U7CkBAIC0xMzE1LDcgKzEzMzAsNyBAQAogc3RhdGljIENVUkxjb2RlIHRmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSkKIHsKICAgQ1VSTGNvZGUgICAgICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09LOwotICB0ZnRwX3N0YXRlX2RhdGFfdCAgICAgKnN0YXRlID0gKHRmdHBfc3RhdGVfZGF0YV90ICopY29ubi0+cHJvdG8udGZ0cGM7CisgIHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlID0gY29ubi0+cHJvdG8udGZ0cGM7CiAKICAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOwogCkBAIC0xMzQ1LDcgKzEzNjAsNyBAQAogCiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZTsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGU7CiAgIENVUkxjb2RlIHJlc3VsdDsKIAogICAqZG9uZSA9IEZBTFNFOwpAQCAtMTM1Niw3ICsxMzcxLDcgQEAKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICBzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOworICBzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjOwogICBpZighc3RhdGUpCiAgICAgcmV0dXJuIENVUkxFX1RGVFBfSUxMRUdBTDsKIApAQCAtMTM3MSwxMiArMTM4NiwxMiBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGNoYXIgKnR5cGU7CiAKLSAgY29ubi0+c29ja3R5cGUgPSBTT0NLX0RHUkFNOyAgIC8qIFVEUCBkYXRhZ3JhbSBiYXNlZCAqLworICBjb25uLT50cmFuc3BvcnQgPSBUUk5TUFJUX1VEUDsKIAogICAvKiBURlRQIFVSTHMgc3VwcG9ydCBhbiBleHRlbnNpb24gbGlrZSAiO21vZGU9PHR5cGVjb2RlPiIgdGhhdAogICAgKiB3ZSdsbCB0cnkgdG8gZ2V0IG5vdyEgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuaAppbmRleCAxMzM1ZjY0Li4zMzM0ODMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZnRwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmMKaW5kZXggZTJiZDdmZC4uZTc2MTk2NiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RpbWV2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjgsNiArMjgsNyBAQAogZXh0ZXJuIExBUkdFX0lOVEVHRVIgQ3VybF9mcmVxOwogZXh0ZXJuIGJvb2wgQ3VybF9pc1Zpc3RhT3JHcmVhdGVyOwogCisvKiBJbiBjYXNlIG9mIGJ1ZyBmaXggdGhpcyBmdW5jdGlvbiBoYXMgYSBjb3VudGVycGFydCBpbiB0b29sX3V0aWwuYyAqLwogc3RydWN0IGN1cmx0aW1lIEN1cmxfbm93KHZvaWQpCiB7CiAgIHN0cnVjdCBjdXJsdGltZSBub3c7CkBAIC0xNzQsMTQgKzE3NSw2IEBACiAKICNlbmRpZgogCi0jaWYgU0laRU9GX1RJTUVfVCA8IDgKLSNkZWZpbmUgVElNRV9NQVggSU5UX01BWAotI2RlZmluZSBUSU1FX01JTiBJTlRfTUlOCi0jZWxzZQotI2RlZmluZSBUSU1FX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKLSNkZWZpbmUgVElNRV9NSU4gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTAotI2VuZGlmCi0KIC8qCiAgKiBSZXR1cm5zOiB0aW1lIGRpZmZlcmVuY2UgaW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gRm9yIHRvbyBsYXJnZSBkaWZmcyBpdAogICogcmV0dXJucyBtYXggdmFsdWUuCkBAIC0xOTEsMTAgKzE4NCwxMCBAQAogdGltZWRpZmZfdCBDdXJsX3RpbWVkaWZmKHN0cnVjdCBjdXJsdGltZSBuZXdlciwgc3RydWN0IGN1cmx0aW1lIG9sZGVyKQogewogICB0aW1lZGlmZl90IGRpZmYgPSAodGltZWRpZmZfdCluZXdlci50dl9zZWMtb2xkZXIudHZfc2VjOwotICBpZihkaWZmID49IChUSU1FX01BWC8xMDAwKSkKLSAgICByZXR1cm4gVElNRV9NQVg7Ci0gIGVsc2UgaWYoZGlmZiA8PSAoVElNRV9NSU4vMTAwMCkpCi0gICAgcmV0dXJuIFRJTUVfTUlOOworICBpZihkaWZmID49IChUSU1FRElGRl9UX01BWC8xMDAwKSkKKyAgICByZXR1cm4gVElNRURJRkZfVF9NQVg7CisgIGVsc2UgaWYoZGlmZiA8PSAoVElNRURJRkZfVF9NSU4vMTAwMCkpCisgICAgcmV0dXJuIFRJTUVESUZGX1RfTUlOOwogICByZXR1cm4gZGlmZiAqIDEwMDAgKyAobmV3ZXIudHZfdXNlYy1vbGRlci50dl91c2VjKS8xMDAwOwogfQogCkBAIC0yMDUsOSArMTk4LDkgQEAKIHRpbWVkaWZmX3QgQ3VybF90aW1lZGlmZl91cyhzdHJ1Y3QgY3VybHRpbWUgbmV3ZXIsIHN0cnVjdCBjdXJsdGltZSBvbGRlcikKIHsKICAgdGltZWRpZmZfdCBkaWZmID0gKHRpbWVkaWZmX3QpbmV3ZXIudHZfc2VjLW9sZGVyLnR2X3NlYzsKLSAgaWYoZGlmZiA+PSAoVElNRV9NQVgvMTAwMDAwMCkpCi0gICAgcmV0dXJuIFRJTUVfTUFYOwotICBlbHNlIGlmKGRpZmYgPD0gKFRJTUVfTUlOLzEwMDAwMDApKQotICAgIHJldHVybiBUSU1FX01JTjsKKyAgaWYoZGlmZiA+PSAoVElNRURJRkZfVF9NQVgvMTAwMDAwMCkpCisgICAgcmV0dXJuIFRJTUVESUZGX1RfTUFYOworICBlbHNlIGlmKGRpZmYgPD0gKFRJTUVESUZGX1RfTUlOLzEwMDAwMDApKQorICAgIHJldHVybiBUSU1FRElGRl9UX01JTjsKICAgcmV0dXJuIGRpZmYgKiAxMDAwMDAwICsgbmV3ZXIudHZfdXNlYy1vbGRlci50dl91c2VjOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5oCmluZGV4IDk2ODY3ZDcuLjUzZTA2MzYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RpbWV2YWwuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmgKQEAgLTI0LDEzICsyNCwxMyBAQAogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaWYgU0laRU9GX1RJTUVfVCA8IDgKLXR5cGVkZWYgaW50IHRpbWVkaWZmX3Q7Ci0jZGVmaW5lIENVUkxfRk9STUFUX1RJTUVESUZGX1QgImQiCi0jZWxzZQorLyogVXNlIGEgbGFyZ2VyIHR5cGUgZXZlbiBmb3IgMzIgYml0IHRpbWVfdCBzeXN0ZW1zIHNvIHRoYXQgd2UgY2FuIGtlZXAKKyAgIG1pY3Jvc2Vjb25kIGFjY3VyYWN5IGluIGl0ICovCiB0eXBlZGVmIGN1cmxfb2ZmX3QgdGltZWRpZmZfdDsKICNkZWZpbmUgQ1VSTF9GT1JNQVRfVElNRURJRkZfVCBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCi0jZW5kaWYKKworI2RlZmluZSBUSU1FRElGRl9UX01BWCBDVVJMX09GRl9UX01BWAorI2RlZmluZSBUSU1FRElGRl9UX01JTiBDVVJMX09GRl9UX01JTgogCiBzdHJ1Y3QgY3VybHRpbWUgewogICB0aW1lX3QgdHZfc2VjOyAvKiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdHJhbnNmZXIuYwppbmRleCA1MTQzMzBlLi4xMzNhNDc4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ4LDYgKzQ4LDggQEAKIAogI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1VOSVNURF9IKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKICNpZm5kZWYgSEFWRV9TT0NLRVQKQEAgLTEyNiwxMiArMTI4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyYXcpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSAoc3RydWN0IEN1cmxfZWFzeSAqKXJhdzsKLSAgQ3VybF9zZW5kX2J1ZmZlciAqdHJhaWxlcnNfYnVmID0gZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmOwotICBzaXplX3QgYnl0ZXNfbGVmdCA9IHRyYWlsZXJzX2J1Zi0+c2l6ZV91c2VkLWRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CisgIHN0cnVjdCBkeW5idWYgKnRyYWlsZXJzX2J1ZiA9ICZkYXRhLT5zdGF0ZS50cmFpbGVyc19idWY7CisgIHNpemVfdCBieXRlc19sZWZ0ID0gQ3VybF9keW5fbGVuKHRyYWlsZXJzX2J1ZikgLQorICAgIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CiAgIHNpemVfdCB0b19jb3B5ID0gKHNpemUqbml0ZW1zIDwgYnl0ZXNfbGVmdCkgPyBzaXplKm5pdGVtcyA6IGJ5dGVzX2xlZnQ7CiAgIGlmKHRvX2NvcHkpIHsKICAgICBtZW1jcHkoYnVmZmVyLAotICAgICAgICAgICAmdHJhaWxlcnNfYnVmLT5idWZmZXJbZGF0YS0+c3RhdGUudHJhaWxlcnNfYnl0ZXNfc2VudF0sCisgICAgICAgICAgIEN1cmxfZHluX3B0cih0cmFpbGVyc19idWYpICsgZGF0YS0+c3RhdGUudHJhaWxlcnNfYnl0ZXNfc2VudCwKICAgICAgICAgICAgdG9fY29weSk7CiAgICAgZGF0YS0+c3RhdGUudHJhaWxlcnNfYnl0ZXNfc2VudCArPSB0b19jb3B5OwogICB9CkBAIC0xNDEsOCArMTQ0LDggQEAKIHN0YXRpYyBzaXplX3QgQ3VybF90cmFpbGVyc19sZWZ0KHZvaWQgKnJhdykKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IChzdHJ1Y3QgQ3VybF9lYXN5ICopcmF3OwotICBDdXJsX3NlbmRfYnVmZmVyICp0cmFpbGVyc19idWYgPSBkYXRhLT5zdGF0ZS50cmFpbGVyc19idWY7Ci0gIHJldHVybiB0cmFpbGVyc19idWYtPnNpemVfdXNlZCAtIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CisgIHN0cnVjdCBkeW5idWYgKnRyYWlsZXJzX2J1ZiA9ICZkYXRhLT5zdGF0ZS50cmFpbGVyc19idWY7CisgIHJldHVybiBDdXJsX2R5bl9sZW4odHJhaWxlcnNfYnVmKSAtIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CiB9CiAjZW5kaWYKIApAQCAtMTc2LDcgKzE3OSw3IEBACiAjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCiAgIGlmKGRhdGEtPnN0YXRlLnRyYWlsZXJzX3N0YXRlID09IFRSQUlMRVJTX0lOSVRJQUxJWkVEKSB7CiAgICAgc3RydWN0IGN1cmxfc2xpc3QgKnRyYWlsZXJzID0gTlVMTDsKLSAgICBDVVJMY29kZSBjOworICAgIENVUkxjb2RlIHJlc3VsdDsKICAgICBpbnQgdHJhaWxlcnNfcmV0X2NvZGU7CiAKICAgICAvKiBhdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGUgY2FsbGJhY2sgZXhpc3RzCkBAIC0xODQsMjggKzE4NywyNiBAQAogICAgIGluZm9mKGRhdGEsCiAgICAgICAgICAgIk1vdmluZyB0cmFpbGVycyBzdGF0ZSBtYWNoaW5lIGZyb20gaW5pdGlhbGl6ZWQgdG8gc2VuZGluZy5cbiIpOwogICAgIGRhdGEtPnN0YXRlLnRyYWlsZXJzX3N0YXRlID0gVFJBSUxFUlNfU0VORElORzsKLSAgICBkYXRhLT5zdGF0ZS50cmFpbGVyc19idWYgPSBDdXJsX2FkZF9idWZmZXJfaW5pdCgpOwotICAgIGlmKCFkYXRhLT5zdGF0ZS50cmFpbGVyc19idWYpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhaWxpbmcgaGVhZGVycyBidWZmZXIgISIpOwotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQorICAgIEN1cmxfZHluX2luaXQoJmRhdGEtPnN0YXRlLnRyYWlsZXJzX2J1ZiwgRFlOX1RSQUlMRVJTKTsKKwogICAgIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQgPSAwOwogICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOwogICAgIHRyYWlsZXJzX3JldF9jb2RlID0gZGF0YS0+c2V0LnRyYWlsZXJfY2FsbGJhY2soJnRyYWlsZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnRyYWlsZXJfZGF0YSk7CiAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwogICAgIGlmKHRyYWlsZXJzX3JldF9jb2RlID09IENVUkxfVFJBSUxFUkZVTkNfT0spIHsKLSAgICAgIGMgPSBDdXJsX2h0dHBfY29tcGlsZV90cmFpbGVycyh0cmFpbGVycywgZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmLCBkYXRhKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9jb21waWxlX3RyYWlsZXJzKHRyYWlsZXJzLCAmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgZmFpbGYoZGF0YSwgIm9wZXJhdGlvbiBhYm9ydGVkIGJ5IHRyYWlsaW5nIGhlYWRlcnMgY2FsbGJhY2siKTsKICAgICAgICpucmVhZHAgPSAwOwotICAgICAgYyA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgICAgICByZXN1bHQgPSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwogICAgIH0KLSAgICBpZihjICE9IENVUkxFX09LKSB7Ci0gICAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLnRyYWlsZXJzX2J1Zik7CiAgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHRyYWlsZXJzKTsKLSAgICAgIHJldHVybiBjOworICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgaW5mb2YoZGF0YSwgIlN1Y2Nlc3NmdWxseSBjb21waWxlZCB0cmFpbGVycy5cclxuIik7CiAgICAgY3VybF9zbGlzdF9mcmVlX2FsbCh0cmFpbGVycyk7CkBAIC0yMjUsNyArMjI2LDcgQEAKICAgaWYoZGF0YS0+c3RhdGUudHJhaWxlcnNfc3RhdGUgPT0gVFJBSUxFUlNfU0VORElORykgewogICAgIC8qIGlmIHdlJ3JlIGhlcmUgdGhlbiB0aGF0IG1lYW5zIHRoYXQgd2UgYWxyZWFkeSBzZW50IHRoZSBsYXN0IGVtcHR5IGNodW5rCiAgICAgICAgYnV0IHdlIGRpZG4ndCBzZW5kIGEgZmluYWwgQ1IgTEYsIHNvIHdlIHNlbnQgMCBDUiBMRi4gV2UgdGhlbiBzdGFydAotICAgICAgIHB1bGxpbmcgdHJhaWxpbmcgZGF0YSB1bnRpbCB3ZSDCsmhhdmUgbm8gbW9yZSBhdCB3aGljaCBwb2ludCB3ZQorICAgICAgIHB1bGxpbmcgdHJhaWxpbmcgZGF0YSB1bnRpbCB3ZSBoYXZlIG5vIG1vcmUgYXQgd2hpY2ggcG9pbnQgd2UKICAgICAgICBzaW1wbHkgcmV0dXJuIHRvIHRoZSBwcmV2aW91cyBwb2ludCBpbiB0aGUgc3RhdGUgbWFjaGluZSBhcyBpZgogICAgICAgIG5vdGhpbmcgaGFwcGVuZWQuCiAgICAgICAgKi8KQEAgLTM2Niw3ICszNjcsNyBAQAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAogICAgIGlmKGRhdGEtPnN0YXRlLnRyYWlsZXJzX3N0YXRlID09IFRSQUlMRVJTX1NFTkRJTkcgJiYKICAgICAgICAhQ3VybF90cmFpbGVyc19sZWZ0KGRhdGEpKSB7Ci0gICAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmKTsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLnRyYWlsZXJzX2J1Zik7CiAgICAgICBkYXRhLT5zdGF0ZS50cmFpbGVyc19zdGF0ZSA9IFRSQUlMRVJTX0RPTkU7CiAgICAgICBkYXRhLT5zZXQudHJhaWxlcl9kYXRhID0gTlVMTDsKICAgICAgIGRhdGEtPnNldC50cmFpbGVyX2NhbGxiYWNrID0gTlVMTDsKQEAgLTQzMiw4ICs0MzMsOCBAQAogICB9CiAgIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzKQogICAgIDsgLyogZG8gbm90aGluZyAqLwotICBlbHNlIGlmKGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FIHx8Ci0gICAgICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX0ZPUk0pIHsKKyAgZWxzZSBpZihkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FIHx8CisgICAgICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfRk9STSkgewogICAgIGlmKEN1cmxfbWltZV9yZXdpbmQobWltZXBhcnQpKSB7CiAgICAgICBmYWlsZihkYXRhLCAiQ2Fubm90IHJld2luZCBtaW1lL3Bvc3QgZGF0YSIpOwogICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRkFJTF9SRVdJTkQ7CkBAIC00ODMsOCArNDg0LDkgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCi1zdGF0aWMgaW50IGRhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCitzdGF0aWMgaW50IGRhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogeworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBkYXRhLT5jb25uOwogICAvKiBpbiB0aGUgY2FzZSBvZiBsaWJzc2gyLCB3ZSBjYW4gbmV2ZXIgYmUgcmVhbGx5IHN1cmUgdGhhdCB3ZSBoYXZlIGVtcHRpZWQKICAgICAgaXRzIGludGVybmFsIGJ1ZmZlcnMgc28gd2UgTVVTVCBhbHdheXMgdHJ5IHVudGlsIHdlIGdldCBFQUdBSU4gYmFjayAqLwogICByZXR1cm4gY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmKENVUkxQUk9UT19TQ1B8Q1VSTFBST1RPX1NGVFApIHx8CkBAIC00OTcsNyArNDk5LDkgQEAKICAgICAgICBUUlVFLiBUaGUgdGhpbmcgaXMgaWYgd2UgcmVhZCBldmVyeXRoaW5nLCB0aGVuIGh0dHAyX3JlY3Ygd29uJ3QKICAgICAgICBiZSBjYWxsZWQgYW5kIHdlIGNhbm5vdCBzaWduYWwgdGhlIEhUVFAvMiBzdHJlYW0gaGFzIGNsb3NlZC4gQXMKICAgICAgICBhIHdvcmthcm91bmQsIHdlIHJldHVybiBub256ZXJvIGhlcmUgdG8gY2FsbCBodHRwMl9yZWN2LiAqLwotICAgICgoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmUFJPVE9fRkFNSUxZX0hUVFApICYmIGNvbm4tPmh0dHB2ZXJzaW9uID09IDIwKTsKKyAgICAoKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJlBST1RPX0ZBTUlMWV9IVFRQKSAmJiBjb25uLT5odHRwdmVyc2lvbiA+PSAyMCk7CisjZWxpZiBkZWZpbmVkKEVOQUJMRV9RVUlDKQorICAgIEN1cmxfc3NsX2RhdGFfcGVuZGluZyhjb25uLCBGSVJTVFNPQ0tFVCkgfHwgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhkYXRhKTsKICNlbHNlCiAgICAgQ3VybF9zc2xfZGF0YV9wZW5kaW5nKGNvbm4sIEZJUlNUU09DS0VUKTsKICNlbmRpZgpAQCAtNTU0LDYgKzU1OCw4IEBACiAgIHNpemVfdCBleGNlc3MgPSAwOyAvKiBleGNlc3MgYnl0ZXMgcmVhZCAqLwogICBib29sIHJlYWRtb3JlID0gRkFMU0U7IC8qIHVzZWQgYnkgUlRQIHRvIHNpZ25hbCBmb3IgbW9yZSBkYXRhICovCiAgIGludCBtYXhsb29wcyA9IDEwMDsKKyAgY2hhciAqYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOworICBERUJVR0FTU0VSVChidWYpOwogCiAgICpkb25lID0gRkFMU0U7CiAgICpjb21lYmFjayA9IEZBTFNFOwpAQCAtNTY0LDE3ICs1NzAsMjAgQEAKICAgICBib29sIGlzX2VtcHR5X2RhdGEgPSBGQUxTRTsKICAgICBzaXplX3QgYnVmZmVyc2l6ZSA9IGRhdGEtPnNldC5idWZmZXJfc2l6ZTsKICAgICBzaXplX3QgYnl0ZXN0b3JlYWQgPSBidWZmZXJzaXplOworI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgYm9vbCBpc19odHRwMiA9ICgoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBQUk9UT19GQU1JTFlfSFRUUCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChjb25uLT5odHRwdmVyc2lvbiA9PSAyMCkpOworI2VuZGlmCiAKICAgICBpZigKLSNpZiBkZWZpbmVkKFVTRV9OR0hUVFAyKQorI2lmZGVmIFVTRV9OR0hUVFAyCiAgICAgICAgLyogRm9yIEhUVFAvMiwgcmVhZCBkYXRhIHdpdGhvdXQgY2FyaW5nIGFib3V0IHRoZSBjb250ZW50CiAgICAgICAgICAgbGVuZ3RoLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBib2R5IGluIEhUVFAvMiBpcyBhbHdheXMKICAgICAgICAgICBzZWdtZW50ZWQgdGhhbmtzIHRvIGl0cyBmcmFtaW5nIGxheWVyLiBNZWFud2hpbGUsIHdlIGhhdmUgdG8KICAgICAgICAgICBjYWxsIEN1cmxfcmVhZCB0byBlbnN1cmUgdGhhdCBodHRwMl9oYW5kbGVfc3RyZWFtX2Nsb3NlIGlzCiAgICAgICAgICAgY2FsbGVkIHdoZW4gd2UgcmVhZCBhbGwgaW5jb21pbmcgYnl0ZXMgZm9yIGEgcGFydGljdWxhcgogICAgICAgICAgIHN0cmVhbS4gKi8KLSAgICAgICAhKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9IVFRQKSAmJgotICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPT0gMjApICYmCisgICAgICAgIWlzX2h0dHAyICYmCiAjZW5kaWYKICAgICAgICBrLT5zaXplICE9IC0xICYmICFrLT5oZWFkZXIpIHsKICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIHRvbyBtdWNoICovCkBAIC01ODUsNyArNTk0LDcgQEAKIAogICAgIGlmKGJ5dGVzdG9yZWFkKSB7CiAgICAgICAvKiByZWNlaXZlIGRhdGEgZnJvbSB0aGUgbmV0d29yayEgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBjb25uLT5zb2NrZmQsIGstPmJ1ZiwgYnl0ZXN0b3JlYWQsICZucmVhZCk7CisgICAgICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgY29ubi0+c29ja2ZkLCBidWYsIGJ5dGVzdG9yZWFkLCAmbnJlYWQpOwogCiAgICAgICAvKiByZWFkIHdvdWxkJ3ZlIGJsb2NrZWQgKi8KICAgICAgIGlmKENVUkxFX0FHQUlOID09IHJlc3VsdCkKQEAgLTYwMSw3ICs2MTAsNyBAQAogICAgICAgbnJlYWQgPSAwOwogICAgIH0KIAotICAgIGlmKChrLT5ieXRlY291bnQgPT0gMCkgJiYgKGstPndyaXRlYnl0ZWNvdW50ID09IDApKSB7CisgICAgaWYoIWstPmJ5dGVjb3VudCkgewogICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFRSQU5TRkVSKTsKICAgICAgIGlmKGstPmV4cDEwMCA+IEVYUDEwMF9TRU5EX0RBVEEpCiAgICAgICAgIC8qIHNldCB0aW1lIHN0YW1wIHRvIGNvbXBhcmUgd2l0aCB3aGVuIHdhaXRpbmcgZm9yIHRoZSAxMDAgKi8KQEAgLTYxMiwyMSArNjIxLDI1IEBACiAgICAgLyogaW5kaWNhdGVzIGRhdGEgb2YgemVybyBzaXplLCBpLmUuIGVtcHR5IGZpbGUgKi8KICAgICBpc19lbXB0eV9kYXRhID0gKChucmVhZCA9PSAwKSAmJiAoay0+Ym9keXdyaXRlcyA9PSAwKSkgPyBUUlVFIDogRkFMU0U7CiAKLSAgICAvKiBOVUwgdGVybWluYXRlLCBhbGxvd2luZyBzdHJpbmcgb3BzIHRvIGJlIHVzZWQgKi8KICAgICBpZigwIDwgbnJlYWQgfHwgaXNfZW1wdHlfZGF0YSkgewotICAgICAgay0+YnVmW25yZWFkXSA9IDA7CisgICAgICBidWZbbnJlYWRdID0gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAvKiBpZiB3ZSByZWNlaXZlIDAgb3IgbGVzcyBoZXJlLCB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbgotICAgICAgICAgYW5kIHdlIGJhaWwgb3V0IGZyb20gdGhpcyEgKi8KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAibnJlYWQgPD0gMCwgc2VydmVyIGNsb3NlZCBjb25uZWN0aW9uLCBiYWlsaW5nXG4iKSk7CisgICAgICAvKiBpZiB3ZSByZWNlaXZlIDAgb3IgbGVzcyBoZXJlLCBlaXRoZXIgdGhlIGh0dHAyIHN0cmVhbSBpcyBjbG9zZWQgb3IgdGhlCisgICAgICAgICBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIGFuZCB3ZSBiYWlsIG91dCBmcm9tIHRoaXMhICovCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICAgIGlmKGlzX2h0dHAyICYmICFucmVhZCkKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJucmVhZCA9PSAwLCBzdHJlYW0gY2xvc2VkLCBiYWlsaW5nXG4iKSk7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJucmVhZCA8PSAwLCBzZXJ2ZXIgY2xvc2VkIGNvbm5lY3Rpb24sIGJhaWxpbmdcbiIpKTsKICAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9SRUNWOwogICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyogRGVmYXVsdCBidWZmZXIgdG8gdXNlIHdoZW4gd2Ugd3JpdGUgdGhlIGJ1ZmZlciwgaXQgbWF5IGJlIGNoYW5nZWQKICAgICAgICBpbiB0aGUgZmxvdyBiZWxvdyBiZWZvcmUgdGhlIGFjdHVhbCBzdG9yaW5nIGlzIGRvbmUuICovCi0gICAgay0+c3RyID0gay0+YnVmOworICAgIGstPnN0ciA9IGJ1ZjsKIAogICAgIGlmKGNvbm4tPmhhbmRsZXItPnJlYWR3cml0ZSkgewogICAgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlKGRhdGEsIGNvbm4sICZucmVhZCwgJnJlYWRtb3JlKTsKQEAgLTY3NSw3ICs2ODgsNyBAQAogICAgIC8qIFRoaXMgaXMgbm90IGFuICdlbHNlIGlmJyBzaW5jZSBpdCBtYXkgYmUgYSByZXN0IGZyb20gdGhlIGhlYWRlcgogICAgICAgIHBhcnNpbmcsIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBpcyBoZWFkZXJzIGFuZCB0aGUgZW5kCiAgICAgICAgaXMgbm9uLWhlYWRlcnMuICovCi0gICAgaWYoay0+c3RyICYmICFrLT5oZWFkZXIgJiYgKG5yZWFkID4gMCB8fCBpc19lbXB0eV9kYXRhKSkgeworICAgIGlmKCFrLT5oZWFkZXIgJiYgKG5yZWFkID4gMCB8fCBpc19lbXB0eV9kYXRhKSkgewogCiAgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKICAgICAgICAgLyogZGF0YSBhcnJpdmVzIGFsdGhvdWdoIHdlIHdhbnQgbm9uZSwgYmFpbCBvdXQgKi8KQEAgLTcwNiw3ICs3MTksNyBAQAogICAgICAgICAgICAgaW5mb2YoZGF0YSwgIklnbm9yaW5nIHRoZSByZXNwb25zZS1ib2R5XG4iKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gJiYgIWstPmNvbnRlbnRfcmFuZ2UgJiYKLSAgICAgICAgICAgICAoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9HRVQpICYmCisgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9HRVQpICYmCiAgICAgICAgICAgICAgIWstPmlnbm9yZWJvZHkpIHsKIAogICAgICAgICAgICAgaWYoay0+c2l6ZSA9PSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewpAQCAtNzU2LDggKzc2OSw5IEBACiAgICAgICAvKiBwYXNzIGRhdGEgdG8gdGhlIGRlYnVnIGZ1bmN0aW9uIGJlZm9yZSBpdCBnZXRzICJkZWNodW5rZWQiICovCiAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgewogICAgICAgICBpZihrLT5iYWRoZWFkZXIpIHsKLSAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfSU4sIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KWstPmhidWZsZW4pOworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwKKyAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYiksCisgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpKTsKICAgICAgICAgICBpZihrLT5iYWRoZWFkZXIgPT0gSEVBREVSX1BBUlRIRUFERVIpCiAgICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfSU4sCiAgICAgICAgICAgICAgICAgICAgICAgIGstPnN0ciwgKHNpemVfdClucmVhZCk7CkBAIC03NzUsMTQgKzc4OSwxNCBAQAogICAgICAgICAgKiBhbmQgd3JpdGVzIGF3YXkgdGhlIGRhdGEuIFRoZSByZXR1cm5lZCAnbnJlYWQnIGhvbGRzIHRoZSBudW1iZXIKICAgICAgICAgICogb2YgYWN0dWFsIGRhdGEgaXQgd3JvdGUgdG8gdGhlIGNsaWVudC4KICAgICAgICAgICovCi0KKyAgICAgICAgQ1VSTGNvZGUgZXh0cmE7CiAgICAgICAgIENIVU5LY29kZSByZXMgPQotICAgICAgICAgIEN1cmxfaHR0cGNodW5rX3JlYWQoY29ubiwgay0+c3RyLCBucmVhZCwgJm5yZWFkKTsKKyAgICAgICAgICBDdXJsX2h0dHBjaHVua19yZWFkKGNvbm4sIGstPnN0ciwgbnJlYWQsICZucmVhZCwgJmV4dHJhKTsKIAogICAgICAgICBpZihDSFVOS0VfT0sgPCByZXMpIHsKLSAgICAgICAgICBpZihDSFVOS0VfV1JJVEVfRVJST1IgPT0gcmVzKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHdyaXRpbmcgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICAgICAgICAgIGlmKENIVU5LRV9QQVNTVEhSVV9FUlJPUiA9PSByZXMpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgcmVhZGluZyB0aGUgY2h1bmtlZC1lbmNvZGVkIHN0cmVhbSIpOworICAgICAgICAgICAgcmV0dXJuIGV4dHJhOwogICAgICAgICAgIH0KICAgICAgICAgICBmYWlsZihkYXRhLCAiJXMgaW4gY2h1bmtlZC1lbmNvZGluZyIsIEN1cmxfY2h1bmtlZF9zdHJlcnJvcihyZXMpKTsKICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKQEAgLTgwOCw5ICs4MjIsOSBAQAogCiAgICAgICAvKiBBY2NvdW50IGZvciBib2R5IGNvbnRlbnQgc3RvcmVkIGluIHRoZSBoZWFkZXIgYnVmZmVyICovCiAgICAgICBpZigoay0+YmFkaGVhZGVyID09IEhFQURFUl9QQVJUSEVBREVSKSAmJiAhay0+aWdub3JlYm9keSkgewotICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkluY3JlYXNpbmcgYnl0ZWNvdW50IGJ5ICV6dSBmcm9tIGhidWZsZW5cbiIsCi0gICAgICAgICAgICAgICAgICAgICBrLT5oYnVmbGVuKSk7Ci0gICAgICAgIGstPmJ5dGVjb3VudCArPSBrLT5oYnVmbGVuOworICAgICAgICBzaXplX3QgaGVhZGxlbiA9IEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CisgICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiSW5jcmVhc2luZyBieXRlY291bnQgYnkgJXp1XG4iLCBoZWFkbGVuKSk7CisgICAgICAgIGstPmJ5dGVjb3VudCArPSBoZWFkbGVuOwogICAgICAgfQogCiAgICAgICBpZigoLTEgIT0gay0+bWF4ZG93bmxvYWQpICYmCkBAIC04MjUsNiArODM5LDcgQEAKICAgICAgICAgICAgICAgICAiLCBtYXhkb3dubG9hZCA9ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKICAgICAgICAgICAgICAgICAiLCBieXRlY291bnQgPSAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJcbiIsCiAgICAgICAgICAgICAgICAgZXhjZXNzLCBrLT5zaXplLCBrLT5tYXhkb3dubG9hZCwgay0+Ynl0ZWNvdW50KTsKKyAgICAgICAgICBjb25uY2xvc2UoY29ubiwgImV4Y2VzcyBmb3VuZCBpbiBhIHJlYWQiKTsKICAgICAgICAgfQogCiAgICAgICAgIG5yZWFkID0gKHNzaXplX3QpIChrLT5tYXhkb3dubG9hZCAtIGstPmJ5dGVjb3VudCk7CkBAIC04NDQsMTUgKzg1OSwxNiBAQAogICAgICAgICBpZihrLT5iYWRoZWFkZXIgJiYgIWstPmlnbm9yZWJvZHkpIHsKICAgICAgICAgICAvKiB3ZSBwYXJzZWQgYSBwaWVjZSBvZiBkYXRhIHdyb25nbHkgYXNzdW1pbmcgaXQgd2FzIGEgaGVhZGVyCiAgICAgICAgICAgICAgYW5kIG5vdyB3ZSBvdXRwdXQgaXQgYXMgYm9keSBpbnN0ZWFkICovCisgICAgICAgICAgc2l6ZV90IGhlYWRsZW4gPSBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogCiAgICAgICAgICAgLyogRG9uJ3QgbGV0IGV4Y2VzcyBkYXRhIHBvbGx1dGUgYm9keSB3cml0ZXMgKi8KLSAgICAgICAgICBpZihrLT5tYXhkb3dubG9hZCA9PSAtMSB8fCAoY3VybF9vZmZfdClrLT5oYnVmbGVuIDw9IGstPm1heGRvd25sb2FkKQorICAgICAgICAgIGlmKGstPm1heGRvd25sb2FkID09IC0xIHx8IChjdXJsX29mZl90KWhlYWRsZW4gPD0gay0+bWF4ZG93bmxvYWQpCiAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGstPmhidWZsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fcHRyKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRsZW4pOwogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fcHRyKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpay0+bWF4ZG93bmxvYWQpOwogCiAgICAgICAgICAgaWYocmVzdWx0KQpAQCAtODg2LDE0ICs5MDIsMTQgQEAKIAogICAgIH0gLyogaWYoIWhlYWRlciBhbmQgZGF0YSB0byByZWFkKSAqLwogCi0gICAgaWYoY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlICYmIGV4Y2VzcyAmJiAhY29ubi0+Yml0cy5zdHJlYW1fd2FzX3Jld291bmQpIHsKKyAgICBpZihjb25uLT5oYW5kbGVyLT5yZWFkd3JpdGUgJiYgZXhjZXNzKSB7CiAgICAgICAvKiBQYXJzZSB0aGUgZXhjZXNzIGRhdGEgKi8KICAgICAgIGstPnN0ciArPSBucmVhZDsKIAotICAgICAgaWYoJmstPnN0cltleGNlc3NdID4gJmstPmJ1ZltkYXRhLT5zZXQuYnVmZmVyX3NpemVdKSB7CisgICAgICBpZigmay0+c3RyW2V4Y2Vzc10gPiAmYnVmW2RhdGEtPnNldC5idWZmZXJfc2l6ZV0pIHsKICAgICAgICAgLyogdGhlIGV4Y2VzcyBhbW91bnQgd2FzIHRvbyBleGNlc3NpdmUoISksIG1ha2Ugc3VyZQogICAgICAgICAgICBpdCBkb2Vzbid0IHJlYWQgb3V0IG9mIGJ1ZmZlciAqLwotICAgICAgICBleGNlc3MgPSAmay0+YnVmW2RhdGEtPnNldC5idWZmZXJfc2l6ZV0gLSBrLT5zdHI7CisgICAgICAgIGV4Y2VzcyA9ICZidWZbZGF0YS0+c2V0LmJ1ZmZlcl9zaXplXSAtIGstPnN0cjsKICAgICAgIH0KICAgICAgIG5yZWFkID0gKHNzaXplX3QpZXhjZXNzOwogCkBAIC05MTcsNyArOTMzLDcgQEAKICAgICAgIGJyZWFrOwogICAgIH0KIAotICB9IHdoaWxlKGRhdGFfcGVuZGluZyhjb25uKSAmJiBtYXhsb29wcy0tKTsKKyAgfSB3aGlsZShkYXRhX3BlbmRpbmcoZGF0YSkgJiYgbWF4bG9vcHMtLSk7CiAKICAgaWYobWF4bG9vcHMgPD0gMCkgewogICAgIC8qIHdlIG1hcmsgaXQgYXMgcmVhZC1hZ2Fpbi1wbGVhc2UgKi8KQEAgLTkzNywxMiArOTUzLDE0IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIENVUkxjb2RlIGRvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprKQorQ1VSTGNvZGUgQ3VybF9kb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmspCiB7CiAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiB3ZSdyZSBkb25lIHdyaXRpbmcgKi8KIAorICAvKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG1vdmVkIGludG8gdGhlIGhhbmRsZXIgc3RydWN0ISAqLwogICBDdXJsX2h0dHAyX2RvbmVfc2VuZGluZyhjb25uKTsKKyAgQ3VybF9xdWljX2RvbmVfc2VuZGluZyhjb25uKTsKIAogICBpZihjb25uLT5iaXRzLnJld2luZGFmdGVyc2VuZCkgewogICAgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcmVhZHJld2luZChjb25uKTsKQEAgLTEwNDYsNyArMTA2NCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgaWYobnJlYWQgPD0gMCkgewotICAgICAgICByZXN1bHQgPSBkb25lX3NlbmRpbmcoY29ubiwgayk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZG9uZV9zZW5kaW5nKGNvbm4sIGspOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgYnJlYWs7CkBAIC0xMTY0LDE0ICsxMTgyLDE0IEBACiAgICAgICBrLT51cGxvYWRfcHJlc2VudCA9IDA7IC8qIG5vIG1vcmUgYnl0ZXMgbGVmdCAqLwogCiAgICAgICBpZihrLT51cGxvYWRfZG9uZSkgewotICAgICAgICByZXN1bHQgPSBkb25lX3NlbmRpbmcoY29ubiwgayk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZG9uZV9zZW5kaW5nKGNvbm4sIGspOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KICAgICB9CiAKIAotICB9IFdISUxFX0ZBTFNFOyAvKiBqdXN0IHRvIGJyZWFrIG91dCBmcm9tISAqLworICB9IHdoaWxlKDApOyAvKiBqdXN0IHRvIGJyZWFrIG91dCBmcm9tISAqLwogCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KQEAgLTEyMjgsOSArMTI0Niw3IEBACiAgIC8qIFdlIGdvIGFoZWFkIGFuZCBkbyBhIHJlYWQgaWYgd2UgaGF2ZSBhIHJlYWRhYmxlIHNvY2tldCBvciBpZgogICAgICB0aGUgc3RyZWFtIHdhcyByZXdvdW5kIChpbiB3aGljaCBjYXNlIHdlIGhhdmUgZGF0YSBpbiBhCiAgICAgIGJ1ZmZlcikgKi8KLSAgaWYoKGstPmtlZXBvbiAmIEtFRVBfUkVDVikgJiYKLSAgICAgKChzZWxlY3RfcmVzICYgQ1VSTF9DU0VMRUNUX0lOKSB8fCBjb25uLT5iaXRzLnN0cmVhbV93YXNfcmV3b3VuZCkpIHsKLQorICBpZigoay0+a2VlcG9uICYgS0VFUF9SRUNWKSAmJiAoc2VsZWN0X3JlcyAmIENVUkxfQ1NFTEVDVF9JTikpIHsKICAgICByZXN1bHQgPSByZWFkd3JpdGVfZGF0YShkYXRhLCBjb25uLCBrLCAmZGlkd2hhdCwgZG9uZSwgY29tZWJhY2spOwogICAgIGlmKHJlc3VsdCB8fCAqZG9uZSkKICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzU0LDIwICsxMzcwLDE0IEBACiAgKiBpbiB0aGUgcHJvcGVyIHN0YXRlIHRvIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuCiAgKi8KIGludCBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0byBudW1zb2NrcyBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCiB7CiAgIGNvbnN0IHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKICAgdW5zaWduZWQgc29ja2luZGV4ID0gMDsKIAogICBpZihjb25uLT5oYW5kbGVyLT5wZXJmb3JtX2dldHNvY2spCi0gICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPnBlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrLCBudW1zb2Nrcyk7Ci0KLSAgaWYobnVtc29ja3MgPCAyKQotICAgIC8qIHNpbXBsZSBjaGVjayBidXQgd2UgbWlnaHQgbmVlZCB0d28gc2xvdHMgKi8KLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+cGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOwogCiAgIC8qIGRvbid0IGluY2x1ZGUgSE9MRCBhbmQgUEFVU0UgY29ubmVjdGlvbnMgKi8KICAgaWYoKGRhdGEtPnJlcS5rZWVwb24gJiBLRUVQX1JFQ1ZCSVRTKSA9PSBLRUVQX1JFQ1YpIHsKQEAgLTE0MzksNiArMTQ0OSw3IEBACiAgICAgfQogICB9CiAKKyAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IGRhdGEtPnNldC5tZXRob2Q7CiAgIGRhdGEtPmNoYW5nZS51cmwgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVRfVVJMXTsKIAogICAvKiBJbml0IHRoZSBTU0wgc2Vzc2lvbiBJRCBjYWNoZSBoZXJlLiBXZSBkbyBpdCBoZXJlIHNpbmNlIHdlIHdhbnQgdG8gZG8gaXQKQEAgLTE0NTgsMTIgKzE0NjksMTEgQEAKICAgZGF0YS0+c3RhdGUuYXV0aGhvc3Qud2FudCA9IGRhdGEtPnNldC5odHRwYXV0aDsKICAgZGF0YS0+c3RhdGUuYXV0aHByb3h5LndhbnQgPSBkYXRhLT5zZXQucHJveHlhdXRoOwogICBDdXJsX3NhZmVmcmVlKGRhdGEtPmluZm8ud291bGRyZWRpcmVjdCk7Ci0gIGRhdGEtPmluZm8ud291bGRyZWRpcmVjdCA9IE5VTEw7CiAKLSAgaWYoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QVVQpCisgIGlmKGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QVVQpCiAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9IGRhdGEtPnNldC5maWxlc2l6ZTsKLSAgZWxzZSBpZigoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9HRVQpICYmCi0gICAgICAgICAgKGRhdGEtPnNldC5odHRwcmVxICE9IEhUVFBSRVFfSEVBRCkpIHsKKyAgZWxzZSBpZigoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0dFVCkgJiYKKyAgICAgICAgICAoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpKSB7CiAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9IGRhdGEtPnNldC5wb3N0ZmllbGRzaXplOwogICAgIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzICYmIChkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID09IC0xKSkKICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPSAoY3VybF9vZmZfdClzdHJsZW4oZGF0YS0+c2V0LnBvc3RmaWVsZHMpOwpAQCAtMTUxMyw2ICsxNTIzLDcgQEAKICAgICAgIH0KICAgICB9CiAjZW5kaWYKKyAgICBDdXJsX2h0dHAyX2luaXRfc3RhdGUoJmRhdGEtPnN0YXRlKTsKICAgfQogCiAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTk0LDcgKzE2MDUsOCBAQAogCiAgIERFQlVHQVNTRVJUKGRhdGEtPnN0YXRlLnVoKTsKICAgdWMgPSBjdXJsX3VybF9zZXQoZGF0YS0+c3RhdGUudWgsIENVUkxVUEFSVF9VUkwsIG5ld3VybCwKLSAgICAgICAgICAgICAgICAgICAgKHR5cGUgPT0gRk9MTE9XX0ZBS0UpID8gQ1VSTFVfTk9OX1NVUFBPUlRfU0NIRU1FIDogMCk7CisgICAgICAgICAgICAgICAgICAgICh0eXBlID09IEZPTExPV19GQUtFKSA/IENVUkxVX05PTl9TVVBQT1JUX1NDSEVNRSA6CisgICAgICAgICAgICAgICAgICAgICgodHlwZSA9PSBGT0xMT1dfUkVESVIpID8gQ1VSTFVfVVJMRU5DT0RFIDogMCkgKTsKICAgaWYodWMpIHsKICAgICBpZih0eXBlICE9IEZPTExPV19GQUtFKQogICAgICAgcmV0dXJuIEN1cmxfdWNfdG9fY3VybGNvZGUodWMpOwpAQCAtMTY3MiwxMiArMTY4NCwxMiBAQAogICAgICAqIFRoaXMgYmVoYXZpb3VyIGlzIGZvcmJpZGRlbiBieSBSRkMxOTQ1IGFuZCB0aGUgb2Jzb2xldGUgUkZDMjYxNiwgYW5kCiAgICAgICogY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBDVVJMT1BUX1BPU1RSRURJUi4KICAgICAgKi8KLSAgICBpZigoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUCi0gICAgICAgIHx8IGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNCi0gICAgICAgIHx8IGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FKQorICAgIGlmKChkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVAorICAgICAgICB8fCBkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNCisgICAgICAgIHx8IGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX01JTUUpCiAgICAgICAgJiYgIShkYXRhLT5zZXQua2VlcF9wb3N0ICYgQ1VSTF9SRURJUl9QT1NUXzMwMSkpIHsKICAgICAgIGluZm9mKGRhdGEsICJTd2l0Y2ggZnJvbSBQT1NUIHRvIEdFVFxuIik7Ci0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOworICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOwogICAgIH0KICAgICBicmVhazsKICAgY2FzZSAzMDI6IC8qIEZvdW5kICovCkBAIC0xNjk3LDIyICsxNzA5LDI5IEBACiAgICAgICogVGhpcyBiZWhhdmlvdXIgaXMgZm9yYmlkZGVuIGJ5IFJGQzE5NDUgYW5kIHRoZSBvYnNvbGV0ZSBSRkMyNjE2LCBhbmQKICAgICAgKiBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIENVUkxPUFRfUE9TVFJFRElSLgogICAgICAqLwotICAgIGlmKChkYXRhLT5zZXQuaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1QKLSAgICAgICAgfHwgZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX0ZPUk0KLSAgICAgICAgfHwgZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX01JTUUpCisgICAgaWYoKGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUCisgICAgICAgIHx8IGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX0ZPUk0KKyAgICAgICAgfHwgZGF0YS0+c3RhdGUuaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfTUlNRSkKICAgICAgICAmJiAhKGRhdGEtPnNldC5rZWVwX3Bvc3QgJiBDVVJMX1JFRElSX1BPU1RfMzAyKSkgewogICAgICAgaW5mb2YoZGF0YSwgIlN3aXRjaCBmcm9tIFBPU1QgdG8gR0VUXG4iKTsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzAzOiAvKiBTZWUgT3RoZXIgKi8KLSAgICAvKiBEaXNhYmxlIGJvdGggdHlwZXMgb2YgUE9TVHMsIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5Ci0gICAgICAgYXNrcyBmb3IgUE9TVCBhZnRlciBQT1NUICovCi0gICAgaWYoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9HRVQKLSAgICAgICYmICEoZGF0YS0+c2V0LmtlZXBfcG9zdCAmIENVUkxfUkVESVJfUE9TVF8zMDMpKSB7Ci0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOyAvKiBlbmZvcmNlIEdFVCByZXF1ZXN0ICovCi0gICAgICBpbmZvZihkYXRhLCAiRGlzYWJsZXMgUE9TVCwgZ29lcyB3aXRoICVzXG4iLAorICAgIC8qICdTZWUgT3RoZXInIGxvY2F0aW9uIGlzIG5vdCB0aGUgcmVzb3VyY2UgYnV0IGEgc3Vic3RpdHV0ZSBmb3IgdGhlCisgICAgICogcmVzb3VyY2UuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdGhlIG1ldGhvZCB0byBHRVQvSEVBRCwgdW5sZXNzIHRoZQorICAgICAqIG1ldGhvZCBpcyBQT1NUIGFuZCB0aGUgdXNlciBzcGVjaWZpZWQgdG8ga2VlcCBpdCBhcyBQT1NULgorICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvaXNzdWVzLzUyMzcjaXNzdWVjb21tZW50LTYxNDY0MTA0OQorICAgICAqLworICAgIGlmKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9HRVQgJiYKKyAgICAgICAoKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9QT1NUICYmCisgICAgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxICE9IEhUVFBSRVFfUE9TVF9GT1JNICYmCisgICAgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxICE9IEhUVFBSRVFfUE9TVF9NSU1FKSB8fAorICAgICAgICAhKGRhdGEtPnNldC5rZWVwX3Bvc3QgJiBDVVJMX1JFRElSX1BPU1RfMzAzKSkpIHsKKyAgICAgIGRhdGEtPnN0YXRlLmh0dHByZXEgPSBIVFRQUkVRX0dFVDsKKyAgICAgIGRhdGEtPnNldC51cGxvYWQgPSBmYWxzZTsKKyAgICAgIGluZm9mKGRhdGEsICJTd2l0Y2ggdG8gJXNcbiIsCiAgICAgICAgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHk/IkhFQUQiOiJHRVQiKTsKICAgICB9CiAgICAgYnJlYWs7CkBAIC0xNzc5LDYgKzE3OTgsMTIgQEAKICAgICByZXRyeSA9IFRSVUU7CiAgIH0KICAgaWYocmV0cnkpIHsKKyNkZWZpbmUgQ09OTl9NQVhfUkVUUklFUyA1CisgICAgaWYoY29ubi0+cmV0cnljb3VudCsrID49IENPTk5fTUFYX1JFVFJJRVMpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIGRpZWQsIHRyaWVkICVkIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXAiLAorICAgICAgICAgICAgQ09OTl9NQVhfUkVUUklFUyk7CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CiAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIkNvbm5lY3Rpb24gZGllZCwgcmV0cnlpbmcgYSBmcmVzaCBjb25uZWN0XG4iKTsKICAgICAqdXJsID0gc3RyZHVwKGNvbm4tPmRhdGEtPmNoYW5nZS51cmwpOwogICAgIGlmKCEqdXJsKQpAQCAtMTgyMSwxNSArMTg0NiwyMSBAQAogewogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IGRhdGEtPmNvbm47CisgIHN0cnVjdCBIVFRQICpodHRwID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgYm9vbCBodHRwc2VuZGluZyA9ICgoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmUFJPVE9fRkFNSUxZX0hUVFApICYmCisgICAgICAgICAgICAgICAgICAgICAgKGh0dHAtPnNlbmRpbmcgPT0gSFRUUFNFTkRfUkVRVUVTVCkpOwogICBERUJVR0FTU0VSVChjb25uICE9IE5VTEwpOwogICBERUJVR0FTU0VSVCgoc29ja2luZGV4IDw9IDEpICYmIChzb2NraW5kZXggPj0gLTEpKTsKIAotICBpZihjb25uLT5iaXRzLm11bHRpcGxleCB8fCBjb25uLT5odHRwdmVyc2lvbiA9PSAyMCkgeworICBpZihjb25uLT5iaXRzLm11bHRpcGxleCB8fCBjb25uLT5odHRwdmVyc2lvbiA9PSAyMCB8fCBodHRwc2VuZGluZykgewogICAgIC8qIHdoZW4gbXVsdGlwbGV4aW5nLCB0aGUgcmVhZC93cml0ZSBzb2NrZXRzIG5lZWQgdG8gYmUgdGhlIHNhbWUhICovCiAgICAgY29ubi0+c29ja2ZkID0gc29ja2luZGV4ID09IC0xID8KICAgICAgICgod3JpdGVzb2NraW5kZXggPT0gLTEgPyBDVVJMX1NPQ0tFVF9CQUQgOiBjb25uLT5zb2NrW3dyaXRlc29ja2luZGV4XSkpIDoKICAgICAgIGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKKyAgICBpZihodHRwc2VuZGluZykKKyAgICAgIC8qIHNwZWNpYWwgYW5kIHZlcnkgSFRUUC1zcGVjaWZpYyAqLworICAgICAgd3JpdGVzb2NraW5kZXggPSBGSVJTVFNPQ0tFVDsKICAgfQogICBlbHNlIHsKICAgICBjb25uLT5zb2NrZmQgPSBzb2NraW5kZXggPT0gLTEgPwpAQCAtMTg1Nyw3ICsxODg4LDYgQEAKICAgICAgIGstPmtlZXBvbiB8PSBLRUVQX1JFQ1Y7CiAKICAgICBpZih3cml0ZXNvY2tpbmRleCAhPSAtMSkgewotICAgICAgc3RydWN0IEhUVFAgKmh0dHAgPSBkYXRhLT5yZXEucHJvdG9wOwogICAgICAgLyogSFRUUCAxLjEgbWFnaWM6CiAKICAgICAgICAgIEV2ZW4gaWYgd2UgcmVxdWlyZSBhIDEwMC1yZXR1cm4gY29kZSBiZWZvcmUgdXBsb2FkaW5nIGRhdGEsIHdlIG1pZ2h0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdHJhbnNmZXIuaAppbmRleCBhOWJmZjYzLi42N2ZkOTFmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmgKQEAgLTI5LDcgKzI5LDYgQEAKIHZvaWQgQ3VybF9pbml0X0NPTk5FQ1Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CiAKIENVUkxjb2RlIEN1cmxfcHJldHJhbnNmZXIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7Ci1DVVJMY29kZSBDdXJsX3NlY29uZF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBDVVJMY29kZSBDdXJsX3Bvc3R0cmFuc2ZlcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTQ4LDggKzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgKmRvbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpjb21lYmFjayk7CiBpbnQgQ3VybF9zaW5nbGVfZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBDVVJMY29kZSBDdXJsX3JlYWRyZXdpbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIENVUkxjb2RlIEN1cmxfZmlsbHJlYWRidWZmZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzaXplX3QgYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbnJlYWRwKTsKQEAgLTU3LDYgKzU1LDkgQEAKIGJvb2wgQ3VybF9tZWV0c190aW1lY29uZGl0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVfdCB0aW1lb2Zkb2MpOwogQ1VSTGNvZGUgQ3VybF9nZXRfdXBsb2FkX2J1ZmZlcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAorQ1VSTGNvZGUgQ3VybF9kb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmspOworCiAvKiBUaGlzIHNldHMgdXAgYSBmb3J0aGNvbWluZyB0cmFuc2ZlciAqLwogdm9pZAogQ3VybF9zZXR1cF90cmFuc2ZlciAoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmMKaW5kZXggYzQ0MWFlNy4uYTFhNmI2OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM0LDEwICszNCwxMiBAQAogI2lmZGVmIEhBVkVfTkVUX0lGX0gKICNpbmNsdWRlIDxuZXQvaWYuaD4KICNlbmRpZgorI2lmZGVmIEhBVkVfSVBITFBBUElfSAorI2luY2x1ZGUgPElwaGxwYXBpLmg+CisjZW5kaWYKICNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjZW5kaWYKLQogI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgpAQCAtOTMsNiArOTUsNyBAQAogI2luY2x1ZGUgImluZXRfcHRvbi5oIgogI2luY2x1ZGUgImdldGluZm8uaCIKICNpbmNsdWRlICJ1cmxhcGktaW50LmgiCisjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCiAKIC8qIEFuZCBub3cgZm9yIHRoZSBwcm90b2NvbHMgKi8KICNpbmNsdWRlICJmdHAuaCIKQEAgLTEwMywxNSArMTA2LDE1IEBACiAjaW5jbHVkZSAiaHR0cDIuaCIKICNpbmNsdWRlICJmaWxlLmgiCiAjaW5jbHVkZSAiY3VybF9sZGFwLmgiCi0jaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidnNzaC9zc2guaCIKICNpbmNsdWRlICJpbWFwLmgiCiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIgogI2luY2x1ZGUgImluZXRfbnRvcC5oIgogI2luY2x1ZGUgImh0dHBfbnRsbS5oIgotI2luY2x1ZGUgInNvY2tzLmgiCiAjaW5jbHVkZSAiY3VybF9ydG1wLmgiCiAjaW5jbHVkZSAiZ29waGVyLmgiCisjaW5jbHVkZSAibXF0dC5oIgogI2luY2x1ZGUgImh0dHBfcHJveHkuaCIKICNpbmNsdWRlICJjb25uY2FjaGUuaCIKICNpbmNsdWRlICJtdWx0aWhhbmRsZS5oIgpAQCAtMTE5LDYgKzEyMiw3IEBACiAjaW5jbHVkZSAic3RyZHVwLmgiCiAjaW5jbHVkZSAic2V0b3B0LmgiCiAjaW5jbHVkZSAiYWx0c3ZjLmgiCisjaW5jbHVkZSAiZHluYnVmLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtMTI2LDcgKzEzMCw2IEBACiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAogc3RhdGljIHZvaWQgY29ubl9mcmVlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1zdGF0aWMgdm9pZCBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZShzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpOwogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcHJvdG9jb2xfZmFtaWx5KHVuc2lnbmVkIGludCBwcm90b2NvbCk7CiAKIC8qIFNvbWUgcGFydHMgb2YgdGhlIGNvZGUgKGUuZy4gY2h1bmtlZCBlbmNvZGluZykgYXNzdW1lIHRoaXMgYnVmZmVyIGhhcyBhdApAQCAtMTM5LDE5ICsxNDIsMjEgQEAKIAogCiAvKgotICogUHJvdG9jb2wgdGFibGUuCisgKiBQcm90b2NvbCB0YWJsZS4gU2NoZW1lcyAocm91Z2hseSkgaW4gMjAxOSBwb3B1bGFyaXR5IG9yZGVyOgorICoKKyAqIEhUVFBTLCBIVFRQLCBGVFAsIEZUUFMsIFNGVFAsIEZJTEUsIFNDUCwgU01UUCwgTERBUCwgSU1BUFMsIFRFTE5FVCwgSU1BUCwKKyAqIExEQVBTLCBTTVRQUywgVEZUUCwgU01CLCBQT1AzLCBHT1BIRVIgUE9QM1MsIFJUU1AsIFJUTVAsIFNNQlMsIERJQ1QKICAqLwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqIGNvbnN0IHByb3RvY29sc1tdID0gewogCi0jaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCi0gICZDdXJsX2hhbmRsZXJfaHR0cCwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChVU0VfU1NMKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkKICAgJkN1cmxfaGFuZGxlcl9odHRwcywKICNlbmRpZgogCisjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCisgICZDdXJsX2hhbmRsZXJfaHR0cCwKKyNlbmRpZgorCiAjaWZuZGVmIENVUkxfRElTQUJMRV9GVFAKICAgJkN1cmxfaGFuZGxlcl9mdHAsCiAjZW5kaWYKQEAgLTE2MCwxMiArMTY1LDIzIEBACiAgICZDdXJsX2hhbmRsZXJfZnRwcywKICNlbmRpZgogCi0jaWZuZGVmIENVUkxfRElTQUJMRV9URUxORVQKLSAgJkN1cmxfaGFuZGxlcl90ZWxuZXQsCisjaWYgZGVmaW5lZChVU0VfU1NIKQorICAmQ3VybF9oYW5kbGVyX3NmdHAsCiAjZW5kaWYKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfRElDVAotICAmQ3VybF9oYW5kbGVyX2RpY3QsCisjaWZuZGVmIENVUkxfRElTQUJMRV9GSUxFCisgICZDdXJsX2hhbmRsZXJfZmlsZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0VfU1NIKSAmJiAhZGVmaW5lZChVU0VfV09MRlNTSCkKKyAgJkN1cmxfaGFuZGxlcl9zY3AsCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfU01UUAorICAmQ3VybF9oYW5kbGVyX3NtdHAsCisjaWZkZWYgVVNFX1NTTAorICAmQ3VybF9oYW5kbGVyX3NtdHBzLAorI2VuZGlmCiAjZW5kaWYKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUApAQCAtMTc3LDIyICsxOTMsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfRklMRQotICAmQ3VybF9oYW5kbGVyX2ZpbGUsCi0jZW5kaWYKLQotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVEZUUAotICAmQ3VybF9oYW5kbGVyX3RmdHAsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoVVNFX1NTSCkKLSAgJkN1cmxfaGFuZGxlcl9zY3AsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoVVNFX1NTSCkKLSAgJkN1cmxfaGFuZGxlcl9zZnRwLAotI2VuZGlmCi0KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0lNQVAKICAgJkN1cmxfaGFuZGxlcl9pbWFwLAogI2lmZGVmIFVTRV9TU0wKQEAgLTIwMCw2ICsyMDAsMTQgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1RFTE5FVAorICAmQ3VybF9oYW5kbGVyX3RlbG5ldCwKKyNlbmRpZgorCisjaWZuZGVmIENVUkxfRElTQUJMRV9URlRQCisgICZDdXJsX2hhbmRsZXJfdGZ0cCwKKyNlbmRpZgorCiAjaWZuZGVmIENVUkxfRElTQUJMRV9QT1AzCiAgICZDdXJsX2hhbmRsZXJfcG9wMywKICNpZmRlZiBVU0VfU1NMCkBAIC0yMTYsMTcgKzIyNCwxNCBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfU01UUAotICAmQ3VybF9oYW5kbGVyX3NtdHAsCi0jaWZkZWYgVVNFX1NTTAotICAmQ3VybF9oYW5kbGVyX3NtdHBzLAotI2VuZGlmCi0jZW5kaWYKLQogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUlRTUAogICAmQ3VybF9oYW5kbGVyX3J0c3AsCiAjZW5kaWYKIAorI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKKyAgJkN1cmxfaGFuZGxlcl9tcXR0LAorI2VuZGlmCisKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0dPUEhFUgogICAmQ3VybF9oYW5kbGVyX2dvcGhlciwKICNlbmRpZgpAQCAtMjQwLDYgKzI0NSwxMCBAQAogICAmQ3VybF9oYW5kbGVyX3J0bXB0cywKICNlbmRpZgogCisjaWZuZGVmIENVUkxfRElTQUJMRV9ESUNUCisgICZDdXJsX2hhbmRsZXJfZGljdCwKKyNlbmRpZgorCiAgIChzdHJ1Y3QgQ3VybF9oYW5kbGVyICopIE5VTEwKIH07CiAKQEAgLTI3MiwxMCArMjgxLDE2IEBACiB7CiAgIC8qIEZyZWUgYWxsIGR5bmFtaWMgc3RyaW5ncyBzdG9yZWQgaW4gdGhlIGRhdGEtPnNldCBzdWJzdHJ1Y3R1cmUuICovCiAgIGVudW0gZHVwc3RyaW5nIGk7CisgIGVudW0gZHVwYmxvYiBqOworCiAgIGZvcihpID0gKGVudW0gZHVwc3RyaW5nKTA7IGkgPCBTVFJJTkdfTEFTVDsgaSsrKSB7CiAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zZXQuc3RyW2ldKTsKICAgfQogCisgIGZvcihqID0gKGVudW0gZHVwYmxvYikwOyBqIDwgQkxPQl9MQVNUOyBqKyspIHsKKyAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnNldC5ibG9ic1tqXSk7CisgIH0KKwogICBpZihkYXRhLT5jaGFuZ2UucmVmZXJlcl9hbGxvYykgewogICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+Y2hhbmdlLnJlZmVyZXIpOwogICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyX2FsbG9jID0gRkFMU0U7CkBAIC0zMTUsMTMgKzMzMCwxNyBAQAogICogd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGludm9rZWQuCiAgKi8KIAotQ1VSTGNvZGUgQ3VybF9jbG9zZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQorQ1VSTGNvZGUgQ3VybF9jbG9zZShzdHJ1Y3QgQ3VybF9lYXN5ICoqZGF0YXApCiB7CiAgIHN0cnVjdCBDdXJsX211bHRpICptOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhOwogCi0gIGlmKCFkYXRhKQorICBpZighZGF0YXAgfHwgISpkYXRhcCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKKyAgZGF0YSA9ICpkYXRhcDsKKyAgKmRhdGFwID0gTlVMTDsKKwogICBDdXJsX2V4cGlyZV9jbGVhcihkYXRhKTsgLyogc2h1dCBvZmYgdGltZXJzICovCiAKICAgbSA9IGRhdGEtPm11bHRpOwpAQCAtMzcwLDExICszODksMTEgQEAKIAogICB1cF9mcmVlKGRhdGEpOwogICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmJ1ZmZlcik7Ci0gIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuaGVhZGVyYnVmZik7CisgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLnVsYnVmKTsKLSAgQ3VybF9mbHVzaF9jb29raWVzKGRhdGEsIDEpOworICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgVFJVRSk7CiAjaWZkZWYgVVNFX0FMVFNWQwotICBDdXJsX2FsdHN2Y19zYXZlKGRhdGEtPmFzaSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQUxUU1ZDXSk7CisgIEN1cmxfYWx0c3ZjX3NhdmUoZGF0YSwgZGF0YS0+YXNpLCBkYXRhLT5zZXQuc3RyW1NUUklOR19BTFRTVkNdKTsKICAgQ3VybF9hbHRzdmNfY2xlYW51cChkYXRhLT5hc2kpOwogICBkYXRhLT5hc2kgPSBOVUxMOwogI2VuZGlmCkBAIC0zOTcsNiArNDE2LDIzIEBACiAgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU0hBUkUpOwogICB9CiAKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCk7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudGUpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lKTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJlZik7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5ob3N0KTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmNvb2tpZWhvc3QpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucnRzcF90cmFuc3BvcnQpOworCisjaWZuZGVmIENVUkxfRElTQUJMRV9ET0gKKyAgQ3VybF9keW5fZnJlZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5zZXJ2ZXJkb2gpOworICBDdXJsX2R5bl9mcmVlKCZkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaCk7CisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoZGF0YS0+cmVxLmRvaC5oZWFkZXJzKTsKKyNlbmRpZgorCiAgIC8qIGRlc3RydWN0IHdpbGRjYXJkIHN0cnVjdHVyZXMgaWYgaXQgaXMgbmVlZGVkICovCiAgIEN1cmxfd2lsZGNhcmRfZHRvcigmZGF0YS0+d2lsZGNhcmQpOwogICBDdXJsX2ZyZWVzZXQoZGF0YSk7CkBAIC00MzcsOSArNDczLDkgQEAKICAgc2V0LT5wb3N0ZmllbGRzaXplID0gLTE7ICAgLyogdW5rbm93biBzaXplICovCiAgIHNldC0+bWF4cmVkaXJzID0gLTE7ICAgICAgIC8qIGFsbG93IGFueSBhbW91bnQgYnkgZGVmYXVsdCAqLwogCi0gIHNldC0+aHR0cHJlcSA9IEhUVFBSRVFfR0VUOyAvKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCAqLworICBzZXQtPm1ldGhvZCA9IEhUVFBSRVFfR0VUOyAvKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCAqLwogICBzZXQtPnJ0c3ByZXEgPSBSVFNQUkVRX09QVElPTlM7IC8qIERlZmF1bHQgUlRTUCByZXF1ZXN0ICovCi0jaWZuZGVmIENVUkxfRElTQUJMRV9GSUxFCisjaWZuZGVmIENVUkxfRElTQUJMRV9GVFAKICAgc2V0LT5mdHBfdXNlX2Vwc3YgPSBUUlVFOyAgIC8qIEZUUCBkZWZhdWx0cyB0byBFUFNWIG9wZXJhdGlvbnMgKi8KICAgc2V0LT5mdHBfdXNlX2VwcnQgPSBUUlVFOyAgIC8qIEZUUCBkZWZhdWx0cyB0byBFUFJUIG9wZXJhdGlvbnMgKi8KICAgc2V0LT5mdHBfdXNlX3ByZXQgPSBGQUxTRTsgIC8qIG1haW5seSB1c2VmdWwgZm9yIGRyZnRwZCBzZXJ2ZXJzICovCkBAIC00NzYsNyArNTEyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgKi8KICAgc2V0LT5zc2wucHJpbWFyeS5zZXNzaW9uaWQgPSBUUlVFOyAvKiBzZXNzaW9uIElEIGNhY2hpbmcgZW5hYmxlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIHNldC0+cHJveHlfc3NsID0gc2V0LT5zc2w7CisjZW5kaWYKIAogICBzZXQtPm5ld19maWxlX3Blcm1zID0gMDY0NDsgICAgLyogRGVmYXVsdCBwZXJtaXNzaW9ucyAqLwogICBzZXQtPm5ld19kaXJlY3RvcnlfcGVybXMgPSAwNzU1OyAvKiBEZWZhdWx0IHBlcm1pc3Npb25zICovCkBAIC00ODUsOSArNTIzLDggQEAKICAgICAgZGVmaW5lIHNpbmNlIHdlIGludGVybmFsbHkgb25seSB1c2UgdGhlIGxvd2VyIDE2IGJpdHMgZm9yIHRoZSBwYXNzZWQKICAgICAgaW4gYml0bWFzayB0byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcHJpdmF0ZSBiaXRzICovCiAgIHNldC0+YWxsb3dlZF9wcm90b2NvbHMgPSBDVVJMUFJPVE9fQUxMOwotICBzZXQtPnJlZGlyX3Byb3RvY29scyA9IENVUkxQUk9UT19BTEwgJiAgLyogQWxsIGV4Y2VwdCBGSUxFLCBTQ1AgYW5kIFNNQiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICB+KENVUkxQUk9UT19GSUxFIHwgQ1VSTFBST1RPX1NDUCB8IENVUkxQUk9UT19TTUIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxQUk9UT19TTUJTKTsKKyAgc2V0LT5yZWRpcl9wcm90b2NvbHMgPSBDVVJMUFJPVE9fSFRUUCB8IENVUkxQUk9UT19IVFRQUyB8IENVUkxQUk9UT19GVFAgfAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxQUk9UT19GVFBTOwogCiAjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQogICAvKgpAQCAtNTQ0LDcgKzU4MSw3IEBACiAgIHNldC0+dXBrZWVwX2ludGVydmFsX21zID0gQ1VSTF9VUEtFRVBfSU5URVJWQUxfREVGQVVMVDsKICAgc2V0LT5tYXhjb25uZWN0cyA9IERFRkFVTFRfQ09OTkNBQ0hFX1NJWkU7IC8qIGZvciBlYXN5IGhhbmRsZXMgKi8KICAgc2V0LT5tYXhhZ2VfY29ubiA9IDExODsKLSAgc2V0LT5odHRwMDlfYWxsb3dlZCA9IFRSVUU7CisgIHNldC0+aHR0cDA5X2FsbG93ZWQgPSBGQUxTRTsKICAgc2V0LT5odHRwdmVyc2lvbiA9CiAjaWZkZWYgVVNFX05HSFRUUDIKICAgICBDVVJMX0hUVFBfVkVSU0lPTl8yVExTCkBAIC01ODYsNDAgKzYyMywyMiBAQAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICAvKiBXZSBkbyBzb21lIGluaXRpYWwgc2V0dXAgaGVyZSwgYWxsIHRob3NlIGZpZWxkcyB0aGF0IGNhbid0IGJlIGp1c3QgMCAqLworICByZXN1bHQgPSBDdXJsX2luaXRfdXNlcmRlZmluZWQoZGF0YSk7CisgIGlmKCFyZXN1bHQpIHsKKyAgICBDdXJsX2R5bl9pbml0KCZkYXRhLT5zdGF0ZS5oZWFkZXJiLCBDVVJMX01BWF9IVFRQX0hFQURFUik7CisgICAgQ3VybF9jb252ZXJ0X2luaXQoZGF0YSk7CisgICAgQ3VybF9pbml0aW5mbyhkYXRhKTsKIAotICBkYXRhLT5zdGF0ZS5idWZmZXIgPSBtYWxsb2MoUkVBREJVRkZFUl9TSVpFICsgMSk7Ci0gIGlmKCFkYXRhLT5zdGF0ZS5idWZmZXIpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbWFsbG9jIG9mIGJ1ZmZlciBmYWlsZWRcbiIpKTsKLSAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9Ci0gIGVsc2UgewotICAgIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYgPSBtYWxsb2MoSEVBREVSU0laRSk7Ci0gICAgaWYoIWRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYpIHsKLSAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBtYWxsb2Mgb2YgaGVhZGVyYnVmZiBmYWlsZWRcbiIpKTsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcmVzdWx0ID0gQ3VybF9pbml0X3VzZXJkZWZpbmVkKGRhdGEpOworICAgIC8qIG1vc3QgcmVjZW50IGNvbm5lY3Rpb24gaXMgbm90IHlldCBkZWZpbmVkICovCisgICAgZGF0YS0+c3RhdGUubGFzdGNvbm5lY3QgPSBOVUxMOwogCi0gICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJzaXplID0gSEVBREVSU0laRTsKLSAgICAgIEN1cmxfY29udmVydF9pbml0KGRhdGEpOwotICAgICAgQ3VybF9pbml0aW5mbyhkYXRhKTsKLQotICAgICAgLyogbW9zdCByZWNlbnQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGRlZmluZWQgKi8KLSAgICAgIGRhdGEtPnN0YXRlLmxhc3Rjb25uZWN0ID0gTlVMTDsKLQotICAgICAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgfD0gUEdSU19ISURFOwotICAgICAgZGF0YS0+c3RhdGUuY3VycmVudF9zcGVlZCA9IC0xOyAvKiBpbml0IHRvIG5lZ2F0aXZlID09IGltcG9zc2libGUgKi8KLQotICAgICAgQ3VybF9odHRwMl9pbml0X3N0YXRlKCZkYXRhLT5zdGF0ZSk7Ci0gICAgfQorICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfSElERTsKKyAgICBkYXRhLT5zdGF0ZS5jdXJyZW50X3NwZWVkID0gLTE7IC8qIGluaXQgdG8gbmVnYXRpdmUgPT0gaW1wb3NzaWJsZSAqLwogICB9CiAKICAgaWYocmVzdWx0KSB7CiAgICAgQ3VybF9yZXNvbHZlcl9jbGVhbnVwKGRhdGEtPnN0YXRlLnJlc29sdmVyKTsKLSAgICBmcmVlKGRhdGEtPnN0YXRlLmJ1ZmZlcik7Ci0gICAgZnJlZShkYXRhLT5zdGF0ZS5oZWFkZXJidWZmKTsKKyAgICBDdXJsX2R5bl9mcmVlKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKTsKICAgICBDdXJsX2ZyZWVzZXQoZGF0YSk7CiAgICAgZnJlZShkYXRhKTsKICAgICBkYXRhID0gTlVMTDsKQEAgLTY2NSwxNSArNjg0LDEzIEBACiB9CiAjZWxzZSAgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAvKiBVc2UgImRvLW5vdGhpbmciIG1hY3JvIGluc3RlYWQgb2YgZnVuY3Rpb24gd2hlbiB3b3JrYXJvdW5kIG5vdCB1c2VkICovCi0jZGVmaW5lIGNvbm5fcmVzZXRfYWxsX3Bvc3Rwb25lZF9kYXRhKGMpIGRvIHt9IFdISUxFX0ZBTFNFCisjZGVmaW5lIGNvbm5fcmVzZXRfYWxsX3Bvc3Rwb25lZF9kYXRhKGMpIGRvIHt9IHdoaWxlKDApCiAjZW5kaWYgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAKIAogc3RhdGljIHZvaWQgY29ubl9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGlmKCFjb25uKQotICAgIHJldHVybjsKLQorICBERUJVR0FTU0VSVChjb25uKTsKICAgaW5mb2YoY29ubi0+ZGF0YSwgIkNsb3NpbmcgY29ubmVjdGlvbiAlbGRcbiIsIGNvbm4tPmNvbm5lY3Rpb25faWQpOwogICBERUJVR0FTU0VSVChjb25uLT5kYXRhKTsKIApAQCAtNjk0LDU0ICs3MTEsNDAgQEAKICAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIGNvbm4tPnRlbXBzb2NrWzBdKTsKICAgaWYoQ1VSTF9TT0NLRVRfQkFEICE9IGNvbm4tPnRlbXBzb2NrWzFdKQogICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgY29ubi0+dGVtcHNvY2tbMV0pOwotCi0gIC8qIHVubGluayBvdXJzZWx2ZXMuIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBsYXN0IHNpbmNlIG90aGVyIHNodXRkb3duCi0gICAgIHByb2NlZHVyZXMgbmVlZCBhIHZhbGlkIGNvbm4tPmRhdGEgYW5kIHRoaXMgbWF5IGNsZWFyIGl0LiAqLwotICBDdXJsX2Nvbm5jYWNoZV9yZW1vdmVfY29ubihjb25uLT5kYXRhLCBjb25uLCBUUlVFKTsKIH0KIAogc3RhdGljIHZvaWQgY29ubl9mcmVlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgaWYoIWNvbm4pCi0gICAgcmV0dXJuOworICBERUJVR0FTU0VSVChjb25uKTsKIAotICBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+aG9zdCk7Ci0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5jb25uX3RvX2hvc3QpOwotICBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOwotCi0gIEN1cmxfc2FmZWZyZWUoY29ubi0+dXNlcik7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+cGFzc3dkKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5vYXV0aF9iZWFyZXIpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPm9wdGlvbnMpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5ob3N0KTsKKyAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+Y29ubl90b19ob3N0KTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmh0dHBfcHJveHkuaG9zdCk7CisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmh0dHBfcHJveHkudXNlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+c29ja3NfcHJveHkudXNlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+aHR0cF9wcm94eS5wYXNzd2QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51YWdlbnQpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnVzZXJwd2QpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudGUpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucmVmKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ob3N0KTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5jb29raWVob3N0KTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ydHNwX3RyYW5zcG9ydCk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+dHJhaWxlcik7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+aHR0cF9wcm94eS5ob3N0LnJhd2FsbG9jKTsgLyogaHR0cCBwcm94eSBuYW1lIGJ1ZmZlciAqLworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QucmF3YWxsb2MpOyAvKiBzb2NrcyBwcm94eSBuYW1lIGJ1ZmZlciAqLworICBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKCZjb25uLT5wcm94eV9zc2xfY29uZmlnKTsKKyNlbmRpZgorICBDdXJsX3NhZmVmcmVlKGNvbm4tPnVzZXIpOworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnBhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+c2FzbF9hdXRoemlkKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5vcHRpb25zKTsKKyAgQ3VybF9keW5fZnJlZSgmY29ubi0+dHJhaWxlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+aG9zdC5yYXdhbGxvYyk7IC8qIGhvc3QgbmFtZSBidWZmZXIgKi8KICAgQ3VybF9zYWZlZnJlZShjb25uLT5jb25uX3RvX2hvc3QucmF3YWxsb2MpOyAvKiBob3N0IG5hbWUgYnVmZmVyICovCiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+aG9zdG5hbWVfcmVzb2x2ZSk7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+c2Vjb25kYXJ5aG9zdG5hbWUpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmh0dHBfcHJveHkuaG9zdC5yYXdhbGxvYyk7IC8qIGh0dHAgcHJveHkgbmFtZSBidWZmZXIgKi8KLSAgQ3VybF9zYWZlZnJlZShjb25uLT5zb2Nrc19wcm94eS5ob3N0LnJhd2FsbG9jKTsgLyogc29ja3MgcHJveHkgbmFtZSBidWZmZXIgKi8KICAgQ3VybF9zYWZlZnJlZShjb25uLT5jb25uZWN0X3N0YXRlKTsKIAogICBjb25uX3Jlc2V0X2FsbF9wb3N0cG9uZWRfZGF0YShjb25uKTsKICAgQ3VybF9sbGlzdF9kZXN0cm95KCZjb25uLT5lYXN5cSwgTlVMTCk7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+bG9jYWxkZXYpOwogICBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKCZjb25uLT5zc2xfY29uZmlnKTsKLSAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmY29ubi0+cHJveHlfc3NsX2NvbmZpZyk7CiAKICNpZmRlZiBVU0VfVU5JWF9TT0NLRVRTCiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+dW5peF9kb21haW5fc29ja2V0KTsKQEAgLTc3MCwxMyArNzczLDE3IEBACiBDVVJMY29kZSBDdXJsX2Rpc2Nvbm5lY3Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICBpZighY29ubikKLSAgICByZXR1cm4gQ1VSTEVfT0s7IC8qIHRoaXMgaXMgY2xvc2VkIGFuZCBmaW5lIGFscmVhZHkgKi8KKyAgLyogdGhlcmUgbXVzdCBiZSBhIGNvbm5lY3Rpb24gdG8gY2xvc2UgKi8KKyAgREVCVUdBU1NFUlQoY29ubik7CiAKLSAgaWYoIWRhdGEpIHsKLSAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkRJU0NPTk5FQ1Qgd2l0aG91dCBlYXN5IGhhbmRsZSwgaWdub3JpbmdcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gIH0KKyAgLyogaXQgbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KKyAgREVCVUdBU1NFUlQoIWNvbm4tPmJ1bmRsZSk7CisKKyAgLyogdGhlcmUgbXVzdCBiZSBhbiBhc3NvY2lhdGVkIHRyYW5zZmVyICovCisgIERFQlVHQVNTRVJUKGRhdGEpOworCisgIC8qIHRoZSB0cmFuc2ZlciBtdXN0IGJlIGRldGFjaGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gKi8KKyAgREVCVUdBU1NFUlQoIWRhdGEtPmNvbm4pOwogCiAgIC8qCiAgICAqIElmIHRoaXMgY29ubmVjdGlvbiBpc24ndCBtYXJrZWQgdG8gZm9yY2UtY2xvc2UsIGxlYXZlIGl0IG9wZW4gaWYgdGhlcmUKQEAgLTc5MiwxNiArNzk5LDExIEBACiAgICAgY29ubi0+ZG5zX2VudHJ5ID0gTlVMTDsKICAgfQogCi0gIEN1cmxfaG9zdGNhY2hlX3BydW5lKGRhdGEpOyAvKiBraWxsIG9sZCBETlMgY2FjaGUgZW50cmllcyAqLwotCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmIGRlZmluZWQoVVNFX05UTE0pCiAgIC8qIENsZWFudXAgTlRMTSBjb25uZWN0aW9uLXJlbGF0ZWQgZGF0YSAqLwogICBDdXJsX2h0dHBfYXV0aF9jbGVhbnVwX250bG0oY29ubik7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgZGVmaW5lZChVU0VfU1BORUdPKQorCiAgIC8qIENsZWFudXAgTkVHT1RJQVRFIGNvbm5lY3Rpb24tcmVsYXRlZCBkYXRhICovCiAgIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbmVnb3RpYXRlKGNvbm4pOwotI2VuZGlmCiAKICAgLyogdGhlIHByb3RvY29sIHNwZWNpZmljIGRpc2Nvbm5lY3QgaGFuZGxlciBhbmQgY29ubl9zaHV0ZG93biBuZWVkIGEgdHJhbnNmZXIKICAgICAgZm9yIHRoZSBjb25uZWN0aW9uISAqLwpAQCAtODYzLDggKzg2NSw4IEBACiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiBzdGF0aWMgYm9vbAotcHJveHlfaW5mb19tYXRjaGVzKGNvbnN0IHN0cnVjdCBwcm94eV9pbmZvKiBkYXRhLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwcm94eV9pbmZvKiBuZWVkbGUpCitwcm94eV9pbmZvX21hdGNoZXMoY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKmRhdGEsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKm5lZWRsZSkKIHsKICAgaWYoKGRhdGEtPnByb3h5dHlwZSA9PSBuZWVkbGUtPnByb3h5dHlwZSkgJiYKICAgICAgKGRhdGEtPnBvcnQgPT0gbmVlZGxlLT5wb3J0KSAmJgpAQCAtODczLDExICs4NzUsNTkgQEAKIAogICByZXR1cm4gRkFMU0U7CiB9CisKK3N0YXRpYyBib29sCitzb2Nrc19wcm94eV9pbmZvX21hdGNoZXMoY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKm5lZWRsZSkKK3sKKyAgaWYoIXByb3h5X2luZm9fbWF0Y2hlcyhkYXRhLCBuZWVkbGUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiB0aGUgdXNlciBpbmZvcm1hdGlvbiBpcyBjYXNlLXNlbnNpdGl2ZQorICAgICBvciBhdCBsZWFzdCBpdCBpcyBub3QgZGVmaW5lZCBhcyBjYXNlLWluc2Vuc2l0aXZlCisgICAgIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4xICovCisgIGlmKChkYXRhLT51c2VyID09IE5VTEwpICE9IChuZWVkbGUtPnVzZXIgPT0gTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworICAvKiBjdXJsX3N0cmVxdWFsIGRvZXMgYSBjYXNlIGluc2VudGl2ZSBjb21wYXJpc29uLCBzbyBkbyBub3QgdXNlIGl0IGhlcmUhICovCisgIGlmKGRhdGEtPnVzZXIgJiYKKyAgICAgbmVlZGxlLT51c2VyICYmCisgICAgIHN0cmNtcChkYXRhLT51c2VyLCBuZWVkbGUtPnVzZXIpICE9IDApCisgICAgcmV0dXJuIEZBTFNFOworICBpZigoZGF0YS0+cGFzc3dkID09IE5VTEwpICE9IChuZWVkbGUtPnBhc3N3ZCA9PSBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIC8qIGN1cmxfc3RyZXF1YWwgZG9lcyBhIGNhc2UgaW5zZW50aXZlIGNvbXBhcmlzb24sIHNvIGRvIG5vdCB1c2UgaXQgaGVyZSEgKi8KKyAgaWYoZGF0YS0+cGFzc3dkICYmCisgICAgIG5lZWRsZS0+cGFzc3dkICYmCisgICAgIHN0cmNtcChkYXRhLT5wYXNzd2QsIG5lZWRsZS0+cGFzc3dkKSAhPSAwKQorICAgIHJldHVybiBGQUxTRTsKKyAgcmV0dXJuIFRSVUU7Cit9CiAjZWxzZQogLyogZGlzYWJsZWQsIHdvbid0IGdldCBjYWxsZWQgKi8KICNkZWZpbmUgcHJveHlfaW5mb19tYXRjaGVzKHgseSkgRkFMU0UKKyNkZWZpbmUgc29ja3NfcHJveHlfaW5mb19tYXRjaGVzKHgseSkgRkFMU0UKICNlbmRpZgogCisvKiBBIGNvbm5lY3Rpb24gaGFzIHRvIGhhdmUgYmVlbiBpZGxlIGZvciBhIHNob3J0ZXIgdGltZSB0aGFuICdtYXhhZ2VfY29ubicgdG8KKyAgIGJlIHN1YmplY3QgZm9yIHJldXNlLiBUaGUgc3VjY2VzcyByYXRlIGlzIGp1c3QgdG9vIGxvdyBhZnRlciB0aGlzLiAqLworCitzdGF0aWMgYm9vbCBjb25uX21heGFnZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmx0aW1lIG5vdykKK3sKKyAgaWYoIWNvbm4tPmRhdGEpIHsKKyAgICB0aW1lZGlmZl90IGlkbGV0aW1lID0gQ3VybF90aW1lZGlmZihub3csIGNvbm4tPmxhc3R1c2VkKTsKKyAgICBpZGxldGltZSAvPSAxMDAwOyAvKiBpbnRlZ2VyIHNlY29uZHMgaXMgZmluZSAqLworCisgICAgaWYoaWRsZXRpbWUgPiBkYXRhLT5zZXQubWF4YWdlX2Nvbm4pIHsKKyAgICAgIGluZm9mKGRhdGEsICJUb28gb2xkIGNvbm5lY3Rpb24gKCVsZCBzZWNvbmRzKSwgZGlzY29ubmVjdCBpdFxuIiwKKyAgICAgICAgICAgIGlkbGV0aW1lKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gY29ubmVjdGlvbiBpcyBkZWFkIGFuZCBleHRyYWN0cyBpdCBmcm9tCiAgKiB0aGUgY29ubmVjdGlvbiBjYWNoZSBpZiBzby4KQEAgLTg5NCw3ICs5NDQsMTEgQEAKICAgICAvKiBUaGUgY2hlY2sgZm9yIGEgZGVhZCBzb2NrZXQgbWFrZXMgc2Vuc2Ugb25seSBpZiB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgogICAgICAgIHVzZSAqLwogICAgIGJvb2wgZGVhZDsKLSAgICBpZihjb25uLT5oYW5kbGVyLT5jb25uZWN0aW9uX2NoZWNrKSB7CisgICAgc3RydWN0IGN1cmx0aW1lIG5vdyA9IEN1cmxfbm93KCk7CisgICAgaWYoY29ubl9tYXhhZ2UoZGF0YSwgY29ubiwgbm93KSkgeworICAgICAgZGVhZCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjaykgewogICAgICAgLyogVGhlIHByb3RvY29sIGhhcyBhIHNwZWNpYWwgbWV0aG9kIGZvciBjaGVja2luZyB0aGUgc3RhdGUgb2YgdGhlCiAgICAgICAgICBjb25uZWN0aW9uLiBVc2UgaXQgdG8gY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZGVhZC4gKi8KICAgICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKQEAgLTk0Niw3ICsxMDAwLDEyIEBACiBzdGF0aWMgdm9pZCBwcnVuZV9kZWFkX2Nvbm5lY3Rpb25zKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpCiB7CiAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICB0aW1lX3QgZWxhcHNlZCA9IEN1cmxfdGltZWRpZmYobm93LCBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLT5sYXN0X2NsZWFudXApOworICB0aW1lZGlmZl90IGVsYXBzZWQ7CisKKyAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CisgIGVsYXBzZWQgPQorICAgIEN1cmxfdGltZWRpZmYobm93LCBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLT5sYXN0X2NsZWFudXApOworICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgIGlmKGVsYXBzZWQgPj0gMTAwMEwpIHsKICAgICBzdHJ1Y3QgcHJ1bmVkZWFkIHBydW5lOwpAQCAtOTU0LDMyICsxMDEzLDIwIEBACiAgICAgcHJ1bmUuZXh0cmFjdGVkID0gTlVMTDsKICAgICB3aGlsZShDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKGRhdGEsIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUsICZwcnVuZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfZXh0cmFjdF9pZl9kZWFkKSkgeworICAgICAgLyogdW5sb2NrZWQgKi8KKworICAgICAgLyogcmVtb3ZlIGNvbm5lY3Rpb24gZnJvbSBjYWNoZSAqLworICAgICAgQ3VybF9jb25uY2FjaGVfcmVtb3ZlX2Nvbm4oZGF0YSwgcHJ1bmUuZXh0cmFjdGVkLCBUUlVFKTsKKwogICAgICAgLyogZGlzY29ubmVjdCBpdCAqLwogICAgICAgKHZvaWQpQ3VybF9kaXNjb25uZWN0KGRhdGEsIHBydW5lLmV4dHJhY3RlZCwgLyogZGVhZF9jb25uZWN0aW9uICovVFJVRSk7CiAgICAgfQorICAgIENPTk5DQUNIRV9MT0NLKGRhdGEpOwogICAgIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUtPmxhc3RfY2xlYW51cCA9IG5vdzsKKyAgICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogICB9CiB9CiAKLS8qIEEgY29ubmVjdGlvbiBoYXMgdG8gaGF2ZSBiZWVuIGlkbGUgZm9yIGEgc2hvcnRlciB0aW1lIHRoYW4gJ21heGFnZV9jb25uJyB0bwotICAgYmUgc3ViamVjdCBmb3IgcmV1c2UuIFRoZSBzdWNjZXNzIHJhdGUgaXMganVzdCB0b28gbG93IGFmdGVyIHRoaXMuICovCi0KLXN0YXRpYyBib29sIGNvbm5fbWF4YWdlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybHRpbWUgbm93KQotewotICBpZighY29ubi0+ZGF0YSkgewotICAgIHRpbWVkaWZmX3QgaWRsZXRpbWUgPSBDdXJsX3RpbWVkaWZmKG5vdywgY29ubi0+bGFzdHVzZWQpOwotICAgIGlkbGV0aW1lIC89IDEwMDA7IC8qIGludGVnZXIgc2Vjb25kcyBpcyBmaW5lICovCi0KLSAgICBpZihpZGxldGltZS8xMDAwID4gZGF0YS0+c2V0Lm1heGFnZV9jb25uKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiVG9vIG9sZCBjb25uZWN0aW9uICglbGQgc2Vjb25kcyksIGRpc2Nvbm5lY3QgaXRcbiIsCi0gICAgICAgICAgICBpZGxldGltZSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQogLyoKICAqIEdpdmVuIG9uZSBmaWxsZWQgaW4gY29ubmVjdGlvbiBzdHJ1Y3QgKG5hbWVkIG5lZWRsZSksIHRoaXMgZnVuY3Rpb24gc2hvdWxkCiAgKiBkZXRlY3QgaWYgdGhlcmUgYWxyZWFkeSBpcyBvbmUgdGhhdCBoYXMgYWxsIHRoZSBzaWduaWZpY2FudCBkZXRhaWxzCkBAIC0xMDAzLDE2ICsxMDUwLDIwIEBACiAgIGJvb2wgZm91bmRQZW5kaW5nQ2FuZGlkYXRlID0gRkFMU0U7CiAgIGJvb2wgY2FubXVsdGlwbGV4ID0gSXNNdWx0aXBsZXhpbmdQb3NzaWJsZShkYXRhLCBuZWVkbGUpOwogICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlOwotICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKyAgY29uc3QgY2hhciAqaG9zdGJ1bmRsZTsKIAogI2lmZGVmIFVTRV9OVExNCiAgIGJvb2wgd2FudE5UTE1odHRwID0gKChkYXRhLT5zdGF0ZS5hdXRoaG9zdC53YW50ICYKICAgICAgICAgICAgICAgICAgICAgICAoQ1VSTEFVVEhfTlRMTSB8IENVUkxBVVRIX05UTE1fV0IpKSAmJgogICAgICAgICAgICAgICAgICAgICAgIChuZWVkbGUtPmhhbmRsZXItPnByb3RvY29sICYgUFJPVE9fRkFNSUxZX0hUVFApKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGJvb2wgd2FudFByb3h5TlRMTWh0dHAgPSAobmVlZGxlLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRhdGEtPnN0YXRlLmF1dGhwcm94eS53YW50ICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDVVJMQVVUSF9OVExNIHwgQ1VSTEFVVEhfTlRMTV9XQikpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmVlZGxlLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9IVFRQKSkpOworI2Vsc2UKKyAgYm9vbCB3YW50UHJveHlOVExNaHR0cCA9IEZBTFNFOworI2VuZGlmCiAjZW5kaWYKIAogICAqZm9yY2VfcmV1c2UgPSBGQUxTRTsKQEAgLTEwMjAsMjQgKzEwNzEsMjMgQEAKIAogICAvKiBMb29rIHVwIHRoZSBidW5kbGUgd2l0aCBhbGwgdGhlIGNvbm5lY3Rpb25zIHRvIHRoaXMgcGFydGljdWxhciBob3N0LgogICAgICBMb2NrcyB0aGUgY29ubmVjdGlvbiBjYWNoZSwgYmV3YXJlIG9mIGVhcmx5IHJldHVybnMhICovCi0gIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKG5lZWRsZSwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSk7CisgIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKG5lZWRsZSwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3RidW5kbGUpOwogICBpZihidW5kbGUpIHsKICAgICAvKiBNYXggcGlwZSBsZW5ndGggaXMgemVybyAodW5saW1pdGVkKSBmb3IgbXVsdGlwbGV4ZWQgY29ubmVjdGlvbnMgKi8KICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOwogCiAgICAgaW5mb2YoZGF0YSwgIkZvdW5kIGJ1bmRsZSBmb3IgaG9zdCAlczogJXAgWyVzXVxuIiwKLSAgICAgICAgICAobmVlZGxlLT5iaXRzLmNvbm5fdG9faG9zdCA/IG5lZWRsZS0+Y29ubl90b19ob3N0Lm5hbWUgOgotICAgICAgICAgICBuZWVkbGUtPmhvc3QubmFtZSksICh2b2lkICopYnVuZGxlLAotICAgICAgICAgIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVggPwotICAgICAgICAgICAiY2FuIG11bHRpcGxleCIgOiAic2VyaWFsbHkiKSk7CisgICAgICAgICAgaG9zdGJ1bmRsZSwgKHZvaWQgKilidW5kbGUsIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVggPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBtdWx0aXBsZXgiIDogInNlcmlhbGx5IikpOwogCiAgICAgLyogV2UgY2FuJ3QgbXVsdGlwbGV4IGlmIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHNlcnZlciAqLwogICAgIGlmKGNhbm11bHRpcGxleCkgewogICAgICAgaWYoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfVU5LTk9XTikgewotICAgICAgICBpZigoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfVU5LTk9XTikgJiYgZGF0YS0+c2V0LnBpcGV3YWl0KSB7CisgICAgICAgIGlmKGRhdGEtPnNldC5waXBld2FpdCkgewogICAgICAgICAgIGluZm9mKGRhdGEsICJTZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxleCB5ZXQsIHdhaXRcbiIpOwogICAgICAgICAgICp3YWl0cGlwZSA9IFRSVUU7Ci0gICAgICAgICAgQ3VybF9jb25uY2FjaGVfdW5sb2NrKGRhdGEpOworICAgICAgICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAvKiBubyByZS11c2UgKi8KICAgICAgICAgfQogCkBAIC0xMDU4LDcgKzExMDgsNyBAQAogICAgIGN1cnIgPSBidW5kbGUtPmNvbm5fbGlzdC5oZWFkOwogICAgIHdoaWxlKGN1cnIpIHsKICAgICAgIGJvb2wgbWF0Y2ggPSBGQUxTRTsKLSAgICAgIHNpemVfdCBtdWx0aXBsZXhlZDsKKyAgICAgIHNpemVfdCBtdWx0aXBsZXhlZCA9IDA7CiAKICAgICAgIC8qCiAgICAgICAgKiBOb3RlIHRoYXQgaWYgd2UgdXNlIGEgSFRUUCBwcm94eSBpbiBub3JtYWwgbW9kZSAobm8gdHVubmVsaW5nKSwgd2UKQEAgLTEwNjcsMjIgKzExMTcsMTUgQEAKICAgICAgIGNoZWNrID0gY3Vyci0+cHRyOwogICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAKLSAgICAgIGlmKGNoZWNrLT5iaXRzLmNvbm5lY3Rfb25seSkKLSAgICAgICAgLyogY29ubmVjdC1vbmx5IGNvbm5lY3Rpb25zIHdpbGwgbm90IGJlIHJldXNlZCAqLworICAgICAgaWYoY2hlY2stPmJpdHMuY29ubmVjdF9vbmx5IHx8IGNoZWNrLT5iaXRzLmNsb3NlKQorICAgICAgICAvKiBjb25uZWN0LW9ubHkgb3IgdG8tYmUtY2xvc2VkIGNvbm5lY3Rpb25zIHdpbGwgbm90IGJlIHJldXNlZCAqLwogICAgICAgICBjb250aW51ZTsKIAotICAgICAgaWYoY29ubl9tYXhhZ2UoZGF0YSwgY2hlY2ssIG5vdykgfHwgZXh0cmFjdF9pZl9kZWFkKGNoZWNrLCBkYXRhKSkgewotICAgICAgICAvKiBkaXNjb25uZWN0IGl0ICovCi0gICAgICAgICh2b2lkKUN1cmxfZGlzY29ubmVjdChkYXRhLCBjaGVjaywgLyogZGVhZF9jb25uZWN0aW9uICovVFJVRSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBtdWx0aXBsZXhlZCA9IENPTk5fSU5VU0UoY2hlY2spICYmCi0gICAgICAgIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVgpOworICAgICAgaWYoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfTVVMVElQTEVYKQorICAgICAgICBtdWx0aXBsZXhlZCA9IENPTk5fSU5VU0UoY2hlY2spOwogCiAgICAgICBpZihjYW5tdWx0aXBsZXgpIHsKLSAgICAgICAgaWYoY2hlY2stPmJpdHMucHJvdG9jb25uc3RhcnQgJiYgY2hlY2stPmJpdHMuY2xvc2UpCi0gICAgICAgICAgY29udGludWU7CisgICAgICAgIDsKICAgICAgIH0KICAgICAgIGVsc2UgewogICAgICAgICBpZihtdWx0aXBsZXhlZCkgewpAQCAtMTEwMiwxMiArMTE0NSw5IEBACiAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYoKGNoZWNrLT5zb2NrW0ZJUlNUU09DS0VUXSA9PSBDVVJMX1NPQ0tFVF9CQUQpIHx8Ci0gICAgICAgICAgIGNoZWNrLT5iaXRzLmNsb3NlKSB7Ci0gICAgICAgICAgaWYoIWNoZWNrLT5iaXRzLmNsb3NlKQotICAgICAgICAgICAgZm91bmRQZW5kaW5nQ2FuZGlkYXRlID0gVFJVRTsKLSAgICAgICAgICAvKiBEb24ndCBwaWNrIGEgY29ubmVjdGlvbiB0aGF0IGhhc24ndCBjb25uZWN0ZWQgeWV0IG9yIHRoYXQgaXMgZ29pbmcKLSAgICAgICAgICAgICB0byBnZXQgY2xvc2VkLiAqLworICAgICAgICBpZihjaGVjay0+c29ja1tGSVJTVFNPQ0tFVF0gPT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgICAgZm91bmRQZW5kaW5nQ2FuZGlkYXRlID0gVFJVRTsKKyAgICAgICAgICAvKiBEb24ndCBwaWNrIGEgY29ubmVjdGlvbiB0aGF0IGhhc24ndCBjb25uZWN0ZWQgeWV0ICovCiAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNvbm5lY3Rpb24gIyVsZCBpc24ndCBvcGVuIGVub3VnaCwgY2FuJ3QgcmV1c2VcbiIsCiAgICAgICAgICAgICAgICAgY2hlY2stPmNvbm5lY3Rpb25faWQpOwogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTEyMCw3ICsxMTYwLDggQEAKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYoc3RyY21wKG5lZWRsZS0+dW5peF9kb21haW5fc29ja2V0LCBjaGVjay0+dW5peF9kb21haW5fc29ja2V0KSkKICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYobmVlZGxlLT5hYnN0cmFjdF91bml4X3NvY2tldCAhPSBjaGVjay0+YWJzdHJhY3RfdW5peF9zb2NrZXQpCisgICAgICAgIGlmKG5lZWRsZS0+Yml0cy5hYnN0cmFjdF91bml4X3NvY2tldCAhPQorICAgICAgICAgICBjaGVjay0+Yml0cy5hYnN0cmFjdF91bml4X3NvY2tldCkKICAgICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIGVsc2UgaWYoY2hlY2stPnVuaXhfZG9tYWluX3NvY2tldCkKQEAgLTExMzEsMTggKzExNzIsMjAgQEAKICAgICAgICAgIChjaGVjay0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wpKQogICAgICAgICAvKiBkb24ndCBkbyBtaXhlZCBTU0wgYW5kIG5vbi1TU0wgY29ubmVjdGlvbnMgKi8KICAgICAgICAgaWYoZ2V0X3Byb3RvY29sX2ZhbWlseShjaGVjay0+aGFuZGxlci0+cHJvdG9jb2wpICE9Ci0gICAgICAgICAgIG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgfHwgIWNoZWNrLT50bHNfdXBncmFkZWQpCisgICAgICAgICAgIG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgfHwgIWNoZWNrLT5iaXRzLnRsc191cGdyYWRlZCkKICAgICAgICAgICAvKiBleGNlcHQgcHJvdG9jb2xzIHRoYXQgaGF2ZSBiZWVuIHVwZ3JhZGVkIHZpYSBUTFMgKi8KICAgICAgICAgICBjb250aW51ZTsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKG5lZWRsZS0+Yml0cy5odHRwcHJveHkgIT0gY2hlY2stPmJpdHMuaHR0cHByb3h5IHx8CiAgICAgICAgICBuZWVkbGUtPmJpdHMuc29ja3Nwcm94eSAhPSBjaGVjay0+Yml0cy5zb2Nrc3Byb3h5KQogICAgICAgICBjb250aW51ZTsKIAotICAgICAgaWYobmVlZGxlLT5iaXRzLnNvY2tzcHJveHkgJiYgIXByb3h5X2luZm9fbWF0Y2hlcygmbmVlZGxlLT5zb2Nrc19wcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrLT5zb2Nrc19wcm94eSkpCisgICAgICBpZihuZWVkbGUtPmJpdHMuc29ja3Nwcm94eSAmJgorICAgICAgICAhc29ja3NfcHJveHlfaW5mb19tYXRjaGVzKCZuZWVkbGUtPnNvY2tzX3Byb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVjay0+c29ja3NfcHJveHkpKQogICAgICAgICBjb250aW51ZTsKLQorI2VuZGlmCiAgICAgICBpZihuZWVkbGUtPmJpdHMuY29ubl90b19ob3N0ICE9IGNoZWNrLT5iaXRzLmNvbm5fdG9faG9zdCkKICAgICAgICAgLyogZG9uJ3QgbWl4IGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSAiY29ubmVjdCB0byBob3N0IiBmZWF0dXJlIGFuZAogICAgICAgICAgKiBjb25uZWN0aW9ucyB0aGF0IGRvbid0IHVzZSB0aGlzIGZlYXR1cmUgKi8KQEAgLTExNTMsNiArMTE5Niw3IEBACiAgICAgICAgICAqIGNvbm5lY3Rpb25zIHRoYXQgZG9uJ3QgdXNlIHRoaXMgZmVhdHVyZSAqLwogICAgICAgICBjb250aW51ZTsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKG5lZWRsZS0+Yml0cy5odHRwcHJveHkpIHsKICAgICAgICAgaWYoIXByb3h5X2luZm9fbWF0Y2hlcygmbmVlZGxlLT5odHRwX3Byb3h5LCAmY2hlY2stPmh0dHBfcHJveHkpKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTE3OSwxNCArMTIyMywxNiBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQorI2VuZGlmCisKKyAgICAgIERFQlVHQVNTRVJUKCFjaGVjay0+ZGF0YSB8fCBHT09EX0VBU1lfSEFORExFKGNoZWNrLT5kYXRhKSk7CiAKICAgICAgIGlmKCFjYW5tdWx0aXBsZXggJiYgY2hlY2stPmRhdGEpCiAgICAgICAgIC8qIHRoaXMgcmVxdWVzdCBjYW4ndCBiZSBtdWx0aXBsZXhlZCBidXQgdGhlIGNoZWNrZWQgY29ubmVjdGlvbiBpcwogICAgICAgICAgICBhbHJlYWR5IGluIHVzZSBzbyB3ZSBza2lwIGl0ICovCiAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBpZihDT05OX0lOVVNFKGNoZWNrKSAmJiBjaGVjay0+ZGF0YSAmJgotICAgICAgICAgKGNoZWNrLT5kYXRhLT5tdWx0aSAhPSBuZWVkbGUtPmRhdGEtPm11bHRpKSkKKyAgICAgIGlmKGNoZWNrLT5kYXRhICYmIChjaGVjay0+ZGF0YS0+bXVsdGkgIT0gbmVlZGxlLT5kYXRhLT5tdWx0aSkpCiAgICAgICAgIC8qIHRoaXMgY291bGQgYmUgc3ViamVjdCBmb3IgbXVsdGlwbGV4IHVzZSwgYnV0IG9ubHkgaWYgdGhleSBiZWxvbmcgdG8KICAgICAgICAgICogdGhlIHNhbWUgbXVsdGkgaGFuZGxlICovCiAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTIyMCwyMiArMTI2NiwyNSBAQAogICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGlmKCFuZWVkbGUtPmJpdHMuaHR0cHByb3h5IHx8IChuZWVkbGUtPmhhbmRsZXItPmZsYWdzJlBST1RPUFRfU1NMKSB8fAotICAgICAgICAgbmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eSkgeworICAgICAgaWYoKG5lZWRsZS0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wpCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgfHwgIW5lZWRsZS0+Yml0cy5odHRwcHJveHkgfHwgbmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eQorI2VuZGlmCisgICAgICAgICkgewogICAgICAgICAvKiBUaGUgcmVxdWVzdGVkIGNvbm5lY3Rpb24gZG9lcyBub3QgdXNlIGEgSFRUUCBwcm94eSBvciBpdCB1c2VzIFNTTCBvcgogICAgICAgICAgICBpdCBpcyBhIG5vbi1TU0wgcHJvdG9jb2wgdHVubmVsZWQgb3IgaXQgaXMgYSBub24tU1NMIHByb3RvY29sIHdoaWNoCiAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gYmUgdXBncmFkZWQgdmlhIFRMUyAqLwogCiAgICAgICAgIGlmKChzdHJjYXNlY29tcGFyZShuZWVkbGUtPmhhbmRsZXItPnNjaGVtZSwgY2hlY2stPmhhbmRsZXItPnNjaGVtZSkgfHwKICAgICAgICAgICAgIChnZXRfcHJvdG9jb2xfZmFtaWx5KGNoZWNrLT5oYW5kbGVyLT5wcm90b2NvbCkgPT0KLSAgICAgICAgICAgICBuZWVkbGUtPmhhbmRsZXItPnByb3RvY29sICYmIGNoZWNrLT50bHNfdXBncmFkZWQpKSAmJgorICAgICAgICAgICAgIG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgJiYgY2hlY2stPmJpdHMudGxzX3VwZ3JhZGVkKSkgJiYKICAgICAgICAgICAgKCFuZWVkbGUtPmJpdHMuY29ubl90b19ob3N0IHx8IHN0cmNhc2Vjb21wYXJlKAogICAgICAgICAgICAgbmVlZGxlLT5jb25uX3RvX2hvc3QubmFtZSwgY2hlY2stPmNvbm5fdG9faG9zdC5uYW1lKSkgJiYKICAgICAgICAgICAgKCFuZWVkbGUtPmJpdHMuY29ubl90b19wb3J0IHx8CiAgICAgICAgICAgICAgbmVlZGxlLT5jb25uX3RvX3BvcnQgPT0gY2hlY2stPmNvbm5fdG9fcG9ydCkgJiYKICAgICAgICAgICAgc3RyY2FzZWNvbXBhcmUobmVlZGxlLT5ob3N0Lm5hbWUsIGNoZWNrLT5ob3N0Lm5hbWUpICYmCiAgICAgICAgICAgIG5lZWRsZS0+cmVtb3RlX3BvcnQgPT0gY2hlY2stPnJlbW90ZV9wb3J0KSB7Ci0gICAgICAgICAgLyogVGhlIHNjaGVtZXMgbWF0Y2ggb3IgdGhlIHRoZSBwcm90b2NvbCBmYW1pbHkgaXMgdGhlIHNhbWUgYW5kIHRoZQorICAgICAgICAgIC8qIFRoZSBzY2hlbWVzIG1hdGNoIG9yIHRoZSBwcm90b2NvbCBmYW1pbHkgaXMgdGhlIHNhbWUgYW5kIHRoZQogICAgICAgICAgICAgIHByZXZpb3VzIGNvbm5lY3Rpb24gd2FzIFRMUyB1cGdyYWRlZCwgYW5kIHRoZSBob3N0bmFtZSBhbmQgaG9zdAogICAgICAgICAgICAgIHBvcnQgbWF0Y2ggKi8KICAgICAgICAgICBpZihuZWVkbGUtPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpIHsKQEAgLTEyNzYsMTQgKzEzMjUsMjEgQEAKICAgICAgICAgICAgcGFydHdheSB0aHJvdWdoIGEgaGFuZHNoYWtlISkgKi8KICAgICAgICAgaWYod2FudE5UTE1odHRwKSB7CiAgICAgICAgICAgaWYoc3RyY21wKG5lZWRsZS0+dXNlciwgY2hlY2stPnVzZXIpIHx8Ci0gICAgICAgICAgICAgc3RyY21wKG5lZWRsZS0+cGFzc3dkLCBjaGVjay0+cGFzc3dkKSkKKyAgICAgICAgICAgICBzdHJjbXAobmVlZGxlLT5wYXNzd2QsIGNoZWNrLT5wYXNzd2QpKSB7CisKKyAgICAgICAgICAgIC8qIHdlIHByZWZlciBhIGNyZWRlbnRpYWwgbWF0Y2gsIGJ1dCB0aGlzIGlzIGF0IGxlYXN0IGEgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgcmV1c2VkIGFuZCAidXBncmFkZWQiIHRvIE5UTE0gKi8KKyAgICAgICAgICAgIGlmKGNoZWNrLT5odHRwX250bG1fc3RhdGUgPT0gTlRMTVNUQVRFX05PTkUpCisgICAgICAgICAgICAgIGNob3NlbiA9IGNoZWNrOwogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoY2hlY2stPmh0dHBfbnRsbV9zdGF0ZSAhPSBOVExNU1RBVEVfTk9ORSkgewogICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgdXNpbmcgTlRMTSBhdXRoIGJ1dCB3ZSBkb24ndCB3YW50IE5UTE0gKi8KICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgICAgICAvKiBTYW1lIGZvciBQcm94eSBOVExNIGF1dGhlbnRpY2F0aW9uICovCiAgICAgICAgIGlmKHdhbnRQcm94eU5UTE1odHRwKSB7CiAgICAgICAgICAgLyogQm90aCBjaGVjay0+aHR0cF9wcm94eS51c2VyIGFuZCBjaGVjay0+aHR0cF9wcm94eS5wYXNzd2QgY2FuIGJlCkBAIC0xMjk5LDcgKzEzNTUsNyBAQAogICAgICAgICAgIC8qIFByb3h5IGNvbm5lY3Rpb24gaXMgdXNpbmcgTlRMTSBhdXRoIGJ1dCB3ZSBkb24ndCB3YW50IE5UTE0gKi8KICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCisjZW5kaWYKICAgICAgICAgaWYod2FudE5UTE1odHRwIHx8IHdhbnRQcm94eU5UTE1odHRwKSB7CiAgICAgICAgICAgLyogQ3JlZGVudGlhbHMgYXJlIGFscmVhZHkgY2hlY2tlZCwgd2UgY2FuIHVzZSB0aGlzIGNvbm5lY3Rpb24gKi8KICAgICAgICAgICBjaG9zZW4gPSBjaGVjazsKQEAgLTEzMzcsNiArMTM5MywxMyBAQAogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZXhlZCk7CiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihtdWx0aXBsZXhlZCA+PQorICAgICAgICAgICAgICAgICAgICBDdXJsX211bHRpX21heF9jb25jdXJyZW50X3N0cmVhbXMobmVlZGxlLT5kYXRhLT5tdWx0aSkpIHsKKyAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgImNsaWVudCBzaWRlIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgcmVhY2hlZCIKKyAgICAgICAgICAgICAgICAgICAgIiwgc2tpcCAoJXp1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGV4ZWQpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAvKiBXaGVuIG5vdCBtdWx0aXBsZXhlZCwgd2UgaGF2ZSBhIG1hdGNoIGhlcmUhICovCkBAIC0xMzU2LDExICsxNDE5LDEyIEBACiAgIGlmKGNob3NlbikgewogICAgIC8qIG1hcmsgaXQgYXMgdXNlZCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrICovCiAgICAgY2hvc2VuLT5kYXRhID0gZGF0YTsgLyogb3duIGl0ISAqLwotICAgIEN1cmxfY29ubmNhY2hlX3VubG9jayhkYXRhKTsKKyAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjaG9zZW4pOworICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgKnVzZXRoaXMgPSBjaG9zZW47CiAgICAgcmV0dXJuIFRSVUU7IC8qIHllcywgd2UgZm91bmQgb25lIHRvIHVzZSEgKi8KICAgfQotICBDdXJsX2Nvbm5jYWNoZV91bmxvY2soZGF0YSk7CisgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAKICAgaWYoZm91bmRQZW5kaW5nQ2FuZGlkYXRlICYmIGRhdGEtPnNldC5waXBld2FpdCkgewogICAgIGluZm9mKGRhdGEsCkBAIC0xMzcxLDU4ICsxNDM1LDYgQEAKICAgcmV0dXJuIEZBTFNFOyAvKiBubyBtYXRjaGluZyBjb25uZWN0aW5nIGV4aXN0cyAqLwogfQogCi0vKiBhZnRlciBhIFRDUCBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBoYXMgYmVlbiB2ZXJpZmllZCwgdGhpcyBmdW5jdGlvbiBkb2VzCi0gICB0aGUgbmV4dCBtYWdpYyBzdGVwLgotCi0gICBOb3RlOiB0aGlzIGZ1bmN0aW9uJ3Mgc3ViLWZ1bmN0aW9ucyBjYWxsIGZhaWxmKCkKLQotKi8KLUNVUkxjb2RlIEN1cmxfY29ubmVjdGVkX3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KSB7Ci0jaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQotICAgIC8qIGZvciB0aGUgc2Vjb25kYXJ5IHNvY2tldCAoRlRQKSwgdXNlIHRoZSAiY29ubmVjdCB0byBob3N0IgotICAgICAqIGJ1dCBpZ25vcmUgdGhlICJjb25uZWN0IHRvIHBvcnQiICh1c2UgdGhlIHNlY29uZGFyeSBwb3J0KQotICAgICAqLwotICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0ID0gY29ubi0+Yml0cy5odHRwcHJveHkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5zZWNvbmRhcnlob3N0bmFtZSA6IGNvbm4tPmhvc3QubmFtZTsKLSAgICBjb25zdCBpbnQgcG9ydCA9IGNvbm4tPmJpdHMuaHR0cHByb3h5ID8gKGludCljb25uLT5odHRwX3Byb3h5LnBvcnQgOgotICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/IGNvbm4tPnNlY29uZGFyeV9wb3J0IDoKLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19wb3J0ID8gY29ubi0+Y29ubl90b19wb3J0IDoKLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlbW90ZV9wb3J0OwotICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eV9jb25uZWN0aW5nID0gVFJVRTsKLSAgICBzd2l0Y2goY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlKSB7Ci0gICAgY2FzZSBDVVJMUFJPWFlfU09DS1M1OgotICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRToKLSAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M1KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBzb2NraW5kZXgsIGNvbm4pOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzQ6Ci0gICAgY2FzZSBDVVJMUFJPWFlfU09DS1M0QToKLSAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M0KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGhvc3QsIHBvcnQsIHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4pOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInVua25vd24gcHJveHl0eXBlIG9wdGlvbiBnaXZlbiIpOwotICAgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0gLyogc3dpdGNoIHByb3h5dHlwZSAqLwotICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eV9jb25uZWN0aW5nID0gRkFMU0U7Ci0jZWxzZQotICAodm9pZClzb2NraW5kZXg7Ci0jZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCiAvKgogICogdmVyYm9zZWNvbm5lY3QoKSBkaXNwbGF5cyB2ZXJib3NlIGluZm9ybWF0aW9uIGFmdGVyIGEgY29ubmVjdAogICovCkBAIC0xNDMxLDE0MiArMTQ0MywyNyBAQAogewogICBpZihjb25uLT5kYXRhLT5zZXQudmVyYm9zZSkKICAgICBpbmZvZihjb25uLT5kYXRhLCAiQ29ubmVjdGVkIHRvICVzICglcykgcG9ydCAlbGQgKCMlbGQpXG4iLAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgICAgICBjb25uLT5iaXRzLnNvY2tzcHJveHkgPyBjb25uLT5zb2Nrc19wcm94eS5ob3N0LmRpc3BuYW1lIDoKICAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5kaXNwbmFtZSA6CisjZW5kaWYKICAgICAgICAgICBjb25uLT5iaXRzLmNvbm5fdG9faG9zdCA/IGNvbm4tPmNvbm5fdG9faG9zdC5kaXNwbmFtZSA6CiAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSwKICAgICAgICAgICBjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cG9ydCwgY29ubi0+Y29ubmVjdGlvbl9pZCk7CiB9CiAjZW5kaWYKIAotaW50IEN1cmxfcHJvdG9jb2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0gIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvX2dldHNvY2spCi0gICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPnByb3RvX2dldHNvY2soY29ubiwgc29ja3MsIG51bXNvY2tzKTsKLSAgLyogQmFja3VwIGdldHNvY2sgbG9naWMuIFNpbmNlIHRoZXJlIGlzIGEgbGl2ZSBzb2NrZXQgaW4gdXNlLCB3ZSBtdXN0IHdhaXQKLSAgICAgZm9yIGl0IG9yIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHdhdGNoaW5nIHdoZW4gdGhlIG11bHRpX3NvY2tldCBBUEkgaXMKLSAgICAgdXNlZC4gKi8KLSAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCkgfCBHRVRTT0NLX1dSSVRFU09DSygwKTsKLX0KLQotaW50IEN1cmxfZG9pbmdfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0gIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+ZG9pbmdfZ2V0c29jaykKLSAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+ZG9pbmdfZ2V0c29jayhjb25uLCBzb2NrcywgbnVtc29ja3MpOwotICByZXR1cm4gR0VUU09DS19CTEFOSzsKLX0KLQotLyoKLSAqIFdlIGFyZSBkb2luZyBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW5nIGFuZCB0aGlzIGlzIGJlaW5nIGNhbGxlZCBvdmVyIGFuZAotICogb3ZlciBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gcGhhc2UgaXMgZG9uZSBvbgotICogcHJvdG9jb2wgbGF5ZXIuCi0gKi8KLQotQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmNvbm5lY3RpbmcpIHsKLSAgICAqZG9uZSA9IEZBTFNFOwotICAgIHJlc3VsdCA9IGNvbm4tPmhhbmRsZXItPmNvbm5lY3RpbmcoY29ubiwgZG9uZSk7Ci0gIH0KLSAgZWxzZQotICAgICpkb25lID0gVFJVRTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogV2UgYXJlIERPSU5HIHRoaXMgaXMgYmVpbmcgY2FsbGVkIG92ZXIgYW5kIG92ZXIgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlCi0gKiB1bnRpbCB0aGUgRE9JTkcgcGhhc2UgaXMgZG9uZSBvbiBwcm90b2NvbCBsYXllci4KLSAqLwotCi1DVVJMY29kZSBDdXJsX3Byb3RvY29sX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5kb2luZykgewotICAgICpkb25lID0gRkFMU0U7Ci0gICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+ZG9pbmcoY29ubiwgZG9uZSk7Ci0gIH0KLSAgZWxzZQotICAgICpkb25lID0gVFJVRTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogV2UgaGF2ZSBkaXNjb3ZlcmVkIHRoYXQgdGhlIFRDUCBjb25uZWN0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWwsIHdlIGNhbiBub3cKLSAqIHByb2NlZWQgd2l0aCBzb21lIGFjdGlvbi4KLSAqCi0gKi8KLUNVUkxjb2RlIEN1cmxfcHJvdG9jb2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcHJvdG9jb2xfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgKnByb3RvY29sX2RvbmUgPSBGQUxTRTsKLQotICBpZihjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdICYmIGNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQpIHsKLSAgICAvKiBXZSBhbHJlYWR5IGFyZSBjb25uZWN0ZWQsIGdldCBiYWNrLiBUaGlzIG1heSBoYXBwZW4gd2hlbiB0aGUgY29ubmVjdAotICAgICAgIHdvcmtlZCBmaW5lIGluIHRoZSBmaXJzdCBjYWxsLCBsaWtlIHdoZW4gd2UgY29ubmVjdCB0byBhIGxvY2FsIHNlcnZlcgotICAgICAgIG9yIHByb3h5LiBOb3RlIHRoYXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcHJvdG9jb2wgaXMgYWN0dWFsbHkgZG9uZS4KLQotICAgICAgIFVubGVzcyB0aGlzIHByb3RvY29sIGRvZXNuJ3QgaGF2ZSBhbnkgcHJvdG9jb2wtY29ubmVjdCBjYWxsYmFjaywgYXMKLSAgICAgICB0aGVuIHdlIGtub3cgd2UncmUgZG9uZS4gKi8KLSAgICBpZighY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZykKLSAgICAgICpwcm90b2NvbF9kb25lID0gVFJVRTsKLQotICAgIHJldHVybiBDVVJMRV9PSzsKLSAgfQotCi0gIGlmKCFjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0KSB7Ci0KLSAgICByZXN1bHQgPSBDdXJsX3Byb3h5X2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZihDT05ORUNUX0ZJUlNUU09DS0VUX1BST1hZX1NTTCgpKQotICAgICAgLyogd2FpdCBmb3IgSFRUUFMgcHJveHkgU1NMIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlICovCi0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgICBpZihjb25uLT5iaXRzLnR1bm5lbF9wcm94eSAmJiBjb25uLT5iaXRzLmh0dHBwcm94eSAmJgotICAgICAgIEN1cmxfY29ubmVjdF9vbmdvaW5nKGNvbm4pKQotICAgICAgLyogd2hlbiB1c2luZyBhbiBIVFRQIHR1bm5lbCBwcm94eSwgYXdhaXQgY29tcGxldGUgdHVubmVsIGVzdGFibGlzaG1lbnQKLSAgICAgICAgIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuIFJldHVybiBDVVJMRV9PSyBzbyB3ZSdsbCBiZSBjYWxsZWQgYWdhaW4gKi8KLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLQotICAgIGlmKGNvbm4tPmhhbmRsZXItPmNvbm5lY3RfaXQpIHsKLSAgICAgIC8qIGlzIHRoZXJlIGEgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCgpIHByb2NlZHVyZT8gKi8KLQotICAgICAgLyogQ2FsbCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCBmdW5jdGlvbiAqLwotICAgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdChjb25uLCBwcm90b2NvbF9kb25lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOwotCi0gICAgLyogaXQgaGFzIHN0YXJ0ZWQsIHBvc3NpYmx5IGV2ZW4gY29tcGxldGVkIGJ1dCB0aGF0IGtub3dsZWRnZSBpc24ndCBzdG9yZWQKLSAgICAgICBpbiB0aGlzIGJpdCEgKi8KLSAgICBpZighcmVzdWx0KQotICAgICAgY29ubi0+Yml0cy5wcm90b2Nvbm5zdGFydCA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OyAvKiBwYXNzIGJhY2sgc3RhdHVzICovCi19Ci0KIC8qCiAgKiBIZWxwZXJzIGZvciBJRE5BIGNvbnZlcnNpb25zLgogICovCi1zdGF0aWMgYm9vbCBpc19BU0NJSV9uYW1lKGNvbnN0IGNoYXIgKmhvc3RuYW1lKQorYm9vbCBDdXJsX2lzX0FTQ0lJX25hbWUoY29uc3QgY2hhciAqaG9zdG5hbWUpCiB7CisgIC8qIGdldCBhbiBVTlNJR05FRCBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBwb2ludGVyICovCiAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilob3N0bmFtZTsKIAorICBpZighaG9zdG5hbWUpIC8qIGJhZCBpbnB1dCwgY29uc2lkZXIgaXQgQVNDSUkhICovCisgICAgcmV0dXJuIFRSVUU7CisKICAgd2hpbGUoKmNoKSB7CiAgICAgaWYoKmNoKysgJiAweDgwKQogICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTU5MSw4ICsxNDg4LDggQEAKIC8qCiAgKiBQZXJmb3JtIGFueSBuZWNlc3NhcnkgSUROIGNvbnZlcnNpb24gb2YgaG9zdG5hbWUKICAqLwotc3RhdGljIENVUkxjb2RlIGlkbmNvbnZlcnRfaG9zdG5hbWUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RuYW1lICpob3N0KQorQ1VSTGNvZGUgQ3VybF9pZG5jb252ZXJ0X2hvc3RuYW1lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogCkBAIC0xNjA3LDcgKzE1MDQsNyBAQAogICBob3N0LT5kaXNwbmFtZSA9IGhvc3QtPm5hbWU7CiAKICAgLyogQ2hlY2sgbmFtZSBmb3Igbm9uLUFTQ0lJIGFuZCBjb252ZXJ0IGhvc3RuYW1lIHRvIEFDRSBmb3JtIGlmIHdlIGNhbiAqLwotICBpZighaXNfQVNDSUlfbmFtZShob3N0LT5uYW1lKSkgeworICBpZighQ3VybF9pc19BU0NJSV9uYW1lKGhvc3QtPm5hbWUpKSB7CiAjaWZkZWYgVVNFX0xJQklETjIKICAgICBpZihpZG4yX2NoZWNrX3ZlcnNpb24oSUROMl9WRVJTSU9OKSkgewogICAgICAgY2hhciAqYWNlX2hvc3RuYW1lID0gTlVMTDsKQEAgLTE2NDAsNyArMTUzNyw5IEBACiAgICAgICBob3N0LT5uYW1lID0gaG9zdC0+ZW5jYWxsb2M7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBjb252ZXJ0ICVzIHRvIEFDRTtcbiIsIGhvc3QtPm5hbWUpOworICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gY29udmVydCAlcyB0byBBQ0U7ICVzXG4iLCBob3N0LT5uYW1lLAorICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgIHJldHVybiBDVVJMRV9VUkxfTUFMRk9STUFUOwogICAgIH0KICNlbHNlCkBAIC0xNjUzLDcgKzE1NTIsNyBAQAogLyoKICAqIEZyZWVzIGRhdGEgYWxsb2NhdGVkIGJ5IGlkbmNvbnZlcnRfaG9zdG5hbWUoKQogICovCi1zdGF0aWMgdm9pZCBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZShzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpCit2b2lkIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoc3RydWN0IGhvc3RuYW1lICpob3N0KQogewogI2lmIGRlZmluZWQoVVNFX0xJQklETjIpCiAgIGlmKGhvc3QtPmVuY2FsbG9jKSB7CkBAIC0xNjcwLDEzICsxNTY5LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBsbGlzdF9kdG9yKHZvaWQgKnVzZXIsIHZvaWQgKmVsZW1lbnQpCi17Ci0gICh2b2lkKXVzZXI7Ci0gICh2b2lkKWVsZW1lbnQ7Ci0gIC8qIERvIG5vdGhpbmcgKi8KLX0KLQogLyoKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IGNvbm5lY3RkYXRhIG9iamVjdC4KICAqLwpAQCAtMTcwMSw4ICsxNTkzLDEwIEBACiAgICAgY29ubi0+c3NsX2V4dHJhID0gc3NsOwogICAgIGNvbm4tPnNzbFswXS5iYWNrZW5kID0gKHZvaWQgKilzc2w7CiAgICAgY29ubi0+c3NsWzFdLmJhY2tlbmQgPSAodm9pZCAqKShzc2wgKyBzc2xzaXplKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgY29ubi0+cHJveHlfc3NsWzBdLmJhY2tlbmQgPSAodm9pZCAqKShzc2wgKyAyICogc3Nsc2l6ZSk7CiAgICAgY29ubi0+cHJveHlfc3NsWzFdLmJhY2tlbmQgPSAodm9pZCAqKShzc2wgKyAzICogc3Nsc2l6ZSk7CisjZW5kaWYKICAgfQogI2VuZGlmCiAKQEAgLTE3NDEsMTAgKzE2MzUsMTAgQEAKICAgY29ubi0+ZGF0YSA9IGRhdGE7IC8qIFNldHVwIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoaXMgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBDdXJsX2Vhc3kgKi8KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUgPSBkYXRhLT5zZXQucHJveHl0eXBlOwogICBjb25uLT5zb2Nrc19wcm94eS5wcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M0OwogCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1BST1hZKQogICAvKiBub3RlIHRoYXQgdGhlc2UgdHdvIHByb3h5IGJpdHMgYXJlIG5vdyBqdXN0IG9uIHdoYXQgbG9va3MgdG8gYmUKICAgICAgcmVxdWVzdGVkLCB0aGV5IG1heSBiZSBhbHRlcmVkIGRvd24gdGhlIHJvYWQgKi8KICAgY29ubi0+Yml0cy5wcm94eSA9IChkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV0gJiYKQEAgLTE3NzUsMjAgKzE2NjksMjQgQEAKICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlzdGF0dXMgPSBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5c3RhdHVzOwogICBjb25uLT5zc2xfY29uZmlnLnZlcmlmeXBlZXIgPSBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5cGVlcjsKICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0ID0gZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeWhvc3Q7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25uLT5wcm94eV9zc2xfY29uZmlnLnZlcmlmeXN0YXR1cyA9CiAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeXN0YXR1czsKICAgY29ubi0+cHJveHlfc3NsX2NvbmZpZy52ZXJpZnlwZWVyID0gZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeXBlZXI7CiAgIGNvbm4tPnByb3h5X3NzbF9jb25maWcudmVyaWZ5aG9zdCA9IGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS52ZXJpZnlob3N0OworI2VuZGlmCiAgIGNvbm4tPmlwX3ZlcnNpb24gPSBkYXRhLT5zZXQuaXB2ZXI7CiAgIGNvbm4tPmJpdHMuY29ubmVjdF9vbmx5ID0gZGF0YS0+c2V0LmNvbm5lY3Rfb25seTsKKyAgY29ubi0+dHJhbnNwb3J0ID0gVFJOU1BSVF9UQ1A7IC8qIG1vc3Qgb2YgdGhlbSBhcmUgVENQIHN0cmVhbXMgKi8KIAogI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiBkZWZpbmVkKFVTRV9OVExNKSAmJiBcCiAgICAgZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCi0gIGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCA9IENVUkxfU09DS0VUX0JBRDsKKyAgY29ubi0+bnRsbS5udGxtX2F1dGhfaGxwcl9zb2NrZXQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGNvbm4tPnByb3h5bnRsbS5udGxtX2F1dGhfaGxwcl9zb2NrZXQgPSBDVVJMX1NPQ0tFVF9CQUQ7CiAjZW5kaWYKIAogICAvKiBJbml0aWFsaXplIHRoZSBlYXN5IGhhbmRsZSBsaXN0ICovCi0gIEN1cmxfbGxpc3RfaW5pdCgmY29ubi0+ZWFzeXEsIChjdXJsX2xsaXN0X2R0b3IpIGxsaXN0X2R0b3IpOworICBDdXJsX2xsaXN0X2luaXQoJmNvbm4tPmVhc3lxLCBOVUxMKTsKIAogI2lmZGVmIEhBVkVfR1NTQVBJCiAgIGNvbm4tPmRhdGFfcHJvdCA9IFBST1RfQ0xFQVI7CkBAIC0xODA3LDYgKzE3MDUsNyBAQAogICAgICBpdCBtYXkgbGl2ZSBvbiB3aXRob3V0ICh0aGlzIHNwZWNpZmljKSBDdXJsX2Vhc3kgKi8KICAgY29ubi0+ZmNsb3Nlc29ja2V0ID0gZGF0YS0+c2V0LmZjbG9zZXNvY2tldDsKICAgY29ubi0+Y2xvc2Vzb2NrZXRfY2xpZW50ID0gZGF0YS0+c2V0LmNsb3Nlc29ja2V0X2NsaWVudDsKKyAgY29ubi0+bGFzdHVzZWQgPSBDdXJsX25vdygpOyAvKiB1c2VkIG5vdyAqLwogCiAgIHJldHVybiBjb25uOwogICBlcnJvcjoKQEAgLTE4ODQsNiArMTc4Myw1MCBAQAogfQogCiAvKgorICogSWYgdGhlIFVSTCB3YXMgc2V0IHdpdGggYW4gSVB2NiBudW1lcmljYWwgYWRkcmVzcyB3aXRoIGEgem9uZSBpZCBwYXJ0LCBzZXQKKyAqIHRoZSBzY29wZV9pZCBiYXNlZCBvbiB0aGF0IQorICovCisKK3N0YXRpYyB2b2lkIHpvbmVmcm9tX3VybChDVVJMVSAqdWgsIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY2hhciAqem9uZWlkOworICBDVVJMVWNvZGUgdWM7CisKKyAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9aT05FSUQsICZ6b25laWQsIDApOworCisgIGlmKCF1YyAmJiB6b25laWQpIHsKKyAgICBjaGFyICplbmRwOworICAgIHVuc2lnbmVkIGxvbmcgc2NvcGUgPSBzdHJ0b3VsKHpvbmVpZCwgJmVuZHAsIDEwKTsKKyAgICBpZighKmVuZHAgJiYgKHNjb3BlIDwgVUlOVF9NQVgpKQorICAgICAgLyogQSBwbGFpbiBudW1iZXIsIHVzZSBpdCBkaXJlY3RseSBhcyBhIHNjb3BlIGlkLiAqLworICAgICAgY29ubi0+c2NvcGVfaWQgPSAodW5zaWduZWQgaW50KXNjb3BlOworI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkKKyAgICBlbHNlIHsKKyNlbGlmIGRlZmluZWQoV0lOMzIpCisgICAgZWxzZSBpZihDdXJsX2lmX25hbWV0b2luZGV4KSB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkgfHwgZGVmaW5lZChXSU4zMikKKyAgICAgIC8qIFpvbmUgaWRlbnRpZmllciBpcyBub3QgbnVtZXJpYyAqLworICAgICAgdW5zaWduZWQgaW50IHNjb3BlaWR4ID0gMDsKKyNpZiBkZWZpbmVkKFdJTjMyKQorICAgICAgc2NvcGVpZHggPSBDdXJsX2lmX25hbWV0b2luZGV4KHpvbmVpZCk7CisjZWxzZQorICAgICAgc2NvcGVpZHggPSBpZl9uYW1ldG9pbmRleCh6b25laWQpOworI2VuZGlmCisgICAgICBpZighc2NvcGVpZHgpCisgICAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJJbnZhbGlkIHpvbmVpZDogJXM7ICVzXG4iLCB6b25laWQsCisgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBlbHNlCisgICAgICAgIGNvbm4tPnNjb3BlX2lkID0gc2NvcGVpZHg7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfSUZfTkFNRVRPSU5ERVggfHwgV0lOMzIgKi8KKworICAgIGZyZWUoem9uZWlkKTsKKyAgfQorfQorCisvKgogICogUGFyc2UgVVJMIGFuZCBmaWxsIGluIHRoZSByZWxldmFudCBtZW1iZXJzIG9mIHRoZSBjb25uZWN0aW9uIHN0cnVjdC4KICAqLwogc3RhdGljIENVUkxjb2RlIHBhcnNldXJsYW5kZmlsbGNvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKQEAgLTE5MjEsNiArMTg2NCw3IEBACiAgIH0KIAogICBpZighZGF0YS0+c2V0LnVoKSB7CisgICAgY2hhciAqbmV3dXJsOwogICAgIHVjID0gY3VybF91cmxfc2V0KHVoLCBDVVJMVVBBUlRfVVJMLCBkYXRhLT5jaGFuZ2UudXJsLAogICAgICAgICAgICAgICAgICAgICBDVVJMVV9HVUVTU19TQ0hFTUUgfAogICAgICAgICAgICAgICAgICAgICBDVVJMVV9OT05fU1VQUE9SVF9TQ0hFTUUgfApAQCAtMTkzMSw2ICsxODc1LDE1IEBACiAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgImN1cmxfdXJsX3NldCByZWplY3RlZCAlc1xuIiwgZGF0YS0+Y2hhbmdlLnVybCkpOwogICAgICAgcmV0dXJuIEN1cmxfdWNfdG9fY3VybGNvZGUodWMpOwogICAgIH0KKworICAgIC8qIGFmdGVyIGl0IHdhcyBwYXJzZWQsIGdldCB0aGUgZ2VuZXJhdGVkIG5vcm1hbGl6ZWQgdmVyc2lvbiAqLworICAgIHVjID0gY3VybF91cmxfZ2V0KHVoLCBDVVJMVVBBUlRfVVJMLCAmbmV3dXJsLCAwKTsKKyAgICBpZih1YykKKyAgICAgIHJldHVybiBDdXJsX3VjX3RvX2N1cmxjb2RlKHVjKTsKKyAgICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKQorICAgICAgZnJlZShkYXRhLT5jaGFuZ2UudXJsKTsKKyAgICBkYXRhLT5jaGFuZ2UudXJsID0gbmV3dXJsOworICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBUUlVFOwogICB9CiAKICAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9TQ0hFTUUsICZkYXRhLT5zdGF0ZS51cC5zY2hlbWUsIDApOwpAQCAtMTk0MSwyMyArMTg5NCwzMiBAQAogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICB1YyA9IGN1cmxfdXJsX2dldCh1aCwgQ1VSTFVQQVJUX1VTRVIsICZkYXRhLT5zdGF0ZS51cC51c2VyLAotICAgICAgICAgICAgICAgICAgICBDVVJMVV9VUkxERUNPREUpOworICAvKiB3ZSBkb24ndCB1c2UgdGhlIFVSTCBBUEkncyBVUkwgZGVjb2RlciBvcHRpb24gaGVyZSBzaW5jZSBpdCByZWplY3RzCisgICAgIGNvbnRyb2wgY29kZXMgYW5kIHdlIHdhbnQgdG8gYWxsb3cgdGhlbSBmb3Igc29tZSBzY2hlbWVzIGluIHRoZSB1c2VyIGFuZAorICAgICBwYXNzd29yZCBmaWVsZHMgKi8KKyAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9VU0VSLCAmZGF0YS0+c3RhdGUudXAudXNlciwgMCk7CiAgIGlmKCF1YykgewotICAgIGNvbm4tPnVzZXIgPSBzdHJkdXAoZGF0YS0+c3RhdGUudXAudXNlcik7Ci0gICAgaWYoIWNvbm4tPnVzZXIpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBjaGFyICpkZWNvZGVkOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKE5VTEwsIGRhdGEtPnN0YXRlLnVwLnVzZXIsIDAsICZkZWNvZGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhhbmRsZXItPmZsYWdzJlBST1RPUFRfVVNFUlBXRENUUkwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9aRVJPIDogUkVKRUNUX0NUUkwpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgY29ubi0+dXNlciA9IGRlY29kZWQ7CiAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCA9IFRSVUU7CiAgIH0KICAgZWxzZSBpZih1YyAhPSBDVVJMVUVfTk9fVVNFUikKICAgICByZXR1cm4gQ3VybF91Y190b19jdXJsY29kZSh1Yyk7CiAKLSAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9QQVNTV09SRCwgJmRhdGEtPnN0YXRlLnVwLnBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICBDVVJMVV9VUkxERUNPREUpOworICB1YyA9IGN1cmxfdXJsX2dldCh1aCwgQ1VSTFVQQVJUX1BBU1NXT1JELCAmZGF0YS0+c3RhdGUudXAucGFzc3dvcmQsIDApOwogICBpZighdWMpIHsKLSAgICBjb25uLT5wYXNzd2QgPSBzdHJkdXAoZGF0YS0+c3RhdGUudXAucGFzc3dvcmQpOwotICAgIGlmKCFjb25uLT5wYXNzd2QpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBjaGFyICpkZWNvZGVkOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKE5VTEwsIGRhdGEtPnN0YXRlLnVwLnBhc3N3b3JkLCAwLCAmZGVjb2RlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5oYW5kbGVyLT5mbGFncyZQUk9UT1BUX1VTRVJQV0RDVFJMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfWkVSTyA6IFJFSkVDVF9DVFJMKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIGNvbm4tPnBhc3N3ZCA9IGRlY29kZWQ7CiAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCA9IFRSVUU7CiAgIH0KICAgZWxzZSBpZih1YyAhPSBDVVJMVUVfTk9fUEFTU1dPUkQpCkBAIC0xOTkxLDU1ICsxOTUzLDI3IEBACiAgIH0KICAgZWxzZSB7CiAgICAgdW5zaWduZWQgbG9uZyBwb3J0ID0gc3RydG91bChkYXRhLT5zdGF0ZS51cC5wb3J0LCBOVUxMLCAxMCk7Ci0gICAgY29ubi0+cmVtb3RlX3BvcnQgPSBjdXJseF91bHRvdXMocG9ydCk7CisgICAgY29ubi0+cG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0ID0gY3VybHhfdWx0b3VzKHBvcnQpOwogICB9CiAKICAgKHZvaWQpY3VybF91cmxfZ2V0KHVoLCBDVVJMVVBBUlRfUVVFUlksICZkYXRhLT5zdGF0ZS51cC5xdWVyeSwgMCk7CiAKICAgaG9zdG5hbWUgPSBkYXRhLT5zdGF0ZS51cC5ob3N0bmFtZTsKLSAgaWYoIWhvc3RuYW1lKQotICAgIC8qIHRoaXMgaXMgZm9yIGZpbGU6Ly8gdHJhbnNmZXJzLCBnZXQgYSBkdW1teSBtYWRlICovCi0gICAgaG9zdG5hbWUgPSAoY2hhciAqKSIiOwotCi0gIGlmKGhvc3RuYW1lWzBdID09ICdbJykgeworICBpZihob3N0bmFtZSAmJiBob3N0bmFtZVswXSA9PSAnWycpIHsKICAgICAvKiBUaGlzIGxvb2tzIGxpa2UgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwuIFNlZSBpZiB0aGVyZSBpcyBhbiBhZGRyZXNzCiAgICAgICAgc2NvcGUuICovCi0gICAgY2hhciAqem9uZWlkOwogICAgIHNpemVfdCBobGVuOwotICAgIHVjID0gY3VybF91cmxfZ2V0KHVoLCBDVVJMVVBBUlRfWk9ORUlELCAmem9uZWlkLCAwKTsKICAgICBjb25uLT5iaXRzLmlwdjZfaXAgPSBUUlVFOwotCiAgICAgLyogY3V0IG9mZiB0aGUgYnJhY2tldHMhICovCiAgICAgaG9zdG5hbWUrKzsKICAgICBobGVuID0gc3RybGVuKGhvc3RuYW1lKTsKICAgICBob3N0bmFtZVtobGVuIC0gMV0gPSAwOwotICAgIGlmKCF1YyAmJiB6b25laWQpIHsKLSAgICAgIGNoYXIgKmVuZHA7Ci0gICAgICB1bnNpZ25lZCBsb25nIHNjb3BlOwotICAgICAgc2NvcGUgPSBzdHJ0b3VsKHpvbmVpZCwgJmVuZHAsIDEwKTsKLSAgICAgIGlmKCEqZW5kcCAmJiAoc2NvcGUgPCBVSU5UX01BWCkpIHsKLSAgICAgICAgLyogQSBwbGFpbiBudW1iZXIsIHVzZSBpdCBkaXJlY2x5IGFzIGEgc2NvcGUgaWQuICovCi0gICAgICAgIGNvbm4tPnNjb3BlX2lkID0gKHVuc2lnbmVkIGludClzY29wZTsKLSAgICAgIH0KLSNpZmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCi0gICAgICBlbHNlIHsKLSAgICAgICAgLyogWm9uZSBpZGVudGlmaWVyIGlzIG5vdCBudW1lcmljICovCi0gICAgICAgIHVuc2lnbmVkIGludCBzY29wZWlkeCA9IDA7Ci0gICAgICAgIHNjb3BlaWR4ID0gaWZfbmFtZXRvaW5kZXgoem9uZWlkKTsKLSAgICAgICAgaWYoIXNjb3BlaWR4KQotICAgICAgICAgIGluZm9mKGRhdGEsICJJbnZhbGlkIHpvbmVpZCBpZDogJXM7ICVzXG4iLCB6b25laWQsCi0gICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbm4tPnNjb3BlX2lkID0gc2NvcGVpZHg7CiAKLSAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX0lGX05BTUVUT0lOREVYICovCi0gICAgICBmcmVlKHpvbmVpZCk7Ci0gICAgfQorICAgIHpvbmVmcm9tX3VybCh1aCwgY29ubik7CiAgIH0KIAogICAvKiBtYWtlIHN1cmUgdGhlIGNvbm5lY3Qgc3RydWN0IGdldHMgaXRzIG93biBjb3B5IG9mIHRoZSBob3N0IG5hbWUgKi8KLSAgY29ubi0+aG9zdC5yYXdhbGxvYyA9IHN0cmR1cChob3N0bmFtZSk7CisgIGNvbm4tPmhvc3QucmF3YWxsb2MgPSBzdHJkdXAoaG9zdG5hbWUgPyBob3N0bmFtZSA6ICIiKTsKICAgaWYoIWNvbm4tPmhvc3QucmF3YWxsb2MpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIGNvbm4tPmhvc3QubmFtZSA9IGNvbm4tPmhvc3QucmF3YWxsb2M7CkBAIC0yMDk1LDkgKzIwMjksOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgc2V0dXBfY29ubmVjdGlvbl9pbnRlcm5hbHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICogcDsKKyAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqcDsKICAgQ1VSTGNvZGUgcmVzdWx0OwotICBjb25uLT5zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOyAvKiBtb3N0IG9mIHRoZW0gYXJlIFRDUCBzdHJlYW1zICovCiAKICAgLyogUGVyZm9ybSBzZXR1cCBjb21wbGVtZW50IGlmIHNvbWUuICovCiAgIHAgPSBjb25uLT5oYW5kbGVyOwpAQCAtMjEyOCw2ICsyMDYxLDExIEBACiB7CiAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+cmVxLnByb3RvcCk7CiAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+cmVxLm5ld3VybCk7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0RPSAorICBDdXJsX2Nsb3NlKCZkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmVhc3kpOworICBDdXJsX2Nsb3NlKCZkYXRhLT5yZXEuZG9oLnByb2JlWzFdLmVhc3kpOworI2VuZGlmCiB9CiAKIApAQCAtMjI5OCw3ICsyMjM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKnByb3h5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfcHJveHl0eXBlIHByb3h5dHlwZSkKIHsKLSAgY2hhciAqcG9ydHB0cjsKKyAgY2hhciAqcG9ydHB0ciA9IE5VTEw7CiAgIGxvbmcgcG9ydCA9IC0xOwogICBjaGFyICpwcm94eXVzZXIgPSBOVUxMOwogICBjaGFyICpwcm94eXBhc3N3ZCA9IE5VTEw7CkBAIC0yNDIyLDYgKzIzNjAsNyBAQAogICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oaG9zdCk7CiAgICAgaG9zdFtsZW4tMV0gPSAwOyAvKiBjbGVhciB0aGUgdHJhaWxpbmcgYnJhY2tldCAqLwogICAgIGhvc3QrKzsKKyAgICB6b25lZnJvbV91cmwodWhwLCBjb25uKTsKICAgfQogICBwcm94eWluZm8tPmhvc3QubmFtZSA9IGhvc3Q7CiAKQEAgLTI0MzcsMjYgKzIzNzYsMTYgQEAKIHN0YXRpYyBDVVJMY29kZSBwYXJzZV9wcm94eV9hdXRoKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGNoYXIgcHJveHl1c2VyW01BWF9DVVJMX1VTRVJfTEVOR1RIXT0iIjsKLSAgY2hhciBwcm94eXBhc3N3ZFtNQVhfQ1VSTF9QQVNTV09SRF9MRU5HVEhdPSIiOwotICBDVVJMY29kZSByZXN1bHQ7CisgIGNoYXIgKnByb3h5dXNlciA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZVVNFUk5BTUVdOworICBjaGFyICpwcm94eXBhc3N3ZCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZUEFTU1dPUkRdOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWVVTRVJOQU1FXSAhPSBOVUxMKSB7Ci0gICAgc3RybmNweShwcm94eXVzZXIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZVVNFUk5BTUVdLAotICAgICAgICAgICAgTUFYX0NVUkxfVVNFUl9MRU5HVEgpOwotICAgIHByb3h5dXNlcltNQVhfQ1VSTF9VU0VSX0xFTkdUSC0xXSA9ICdcMCc7ICAgLypUbyBiZSBvbiBzYWZlIHNpZGUqLwotICB9Ci0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZUEFTU1dPUkRdICE9IE5VTEwpIHsKLSAgICBzdHJuY3B5KHByb3h5cGFzc3dkLCBkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWVBBU1NXT1JEXSwKLSAgICAgICAgICAgIE1BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSCk7Ci0gICAgcHJveHlwYXNzd2RbTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RILTFdID0gJ1wwJzsgLypUbyBiZSBvbiBzYWZlIHNpZGUqLwotICB9Ci0KLSAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgcHJveHl1c2VyLCAwLCAmY29ubi0+aHR0cF9wcm94eS51c2VyLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7Ci0gIGlmKCFyZXN1bHQpCisgIGlmKHByb3h5dXNlcikKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBwcm94eXVzZXIsIDAsICZjb25uLT5odHRwX3Byb3h5LnVzZXIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX1pFUk8pOworICBpZighcmVzdWx0ICYmIHByb3h5cGFzc3dkKQogICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIHByb3h5cGFzc3dkLCAwLCAmY29ubi0+aHR0cF9wcm94eS5wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFJFSkVDVF9aRVJPKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY3NCw2ICsyNjAzLDEyIEBACiAgIHNpemVfdCBwbGVuOwogICBzaXplX3Qgb2xlbjsKIAorICAvKiB0aGUgaW5wdXQgbGVuZ3RoIGNoZWNrIGlzIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZGlyZWN0Y2x5IGZyb20gc2V0b3B0CisgICAgIGFuZCBpc24ndCBnb2luZyB0aHJvdWdoIHRoZSByZWd1bGFyIHN0cmluZyBsZW5ndGggY2hlY2sgKi8KKyAgc2l6ZV90IGxsZW4gPSBzdHJsZW4obG9naW4pOworICBpZihsbGVuID4gQ1VSTF9NQVhfSU5QVVRfTEVOR1RIKQorICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisKICAgLyogQXR0ZW1wdCB0byBmaW5kIHRoZSBwYXNzd29yZCBzZXBhcmF0b3IgKi8KICAgaWYocGFzc3dkcCkgewogICAgIHBzZXAgPSBzdHJjaHIobG9naW4sICc6Jyk7CkBAIC0yODQ2LDggKzI3ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV0cmNfdXNlcl9jaGFuZ2VkLCAmbmV0cmNfcGFzc3dkX2NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX05FVFJDX0ZJTEVdKTsKICAgICBpZihyZXQgPiAwKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiQ291bGRuJ3QgZmluZCBob3N0ICVzIGluIHRoZSAiCi0gICAgICAgICAgICBET1RfQ0hBUiAibmV0cmMgZmlsZTsgdXNpbmcgZGVmYXVsdHNcbiIsCisgICAgICBpbmZvZihkYXRhLCAiQ291bGRuJ3QgZmluZCBob3N0ICVzIGluIHRoZSAubmV0cmMgZmlsZTsgdXNpbmcgZGVmYXVsdHNcbiIsCiAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUpOwogICAgIH0KICAgICBlbHNlIGlmKHJldCA8IDApIHsKQEAgLTI4NzEsMTIgKzI4MDUsMTQgQEAKIAogICAvKiBmb3IgdXBkYXRlZCBzdHJpbmdzLCB3ZSB1cGRhdGUgdGhlbSBpbiB0aGUgVVJMICovCiAgIGlmKHVzZXJfY2hhbmdlZCkgewotICAgIHVjID0gY3VybF91cmxfc2V0KGRhdGEtPnN0YXRlLnVoLCBDVVJMVVBBUlRfVVNFUiwgKnVzZXJwLCAwKTsKKyAgICB1YyA9IGN1cmxfdXJsX3NldChkYXRhLT5zdGF0ZS51aCwgQ1VSTFVQQVJUX1VTRVIsICp1c2VycCwKKyAgICAgICAgICAgICAgICAgICAgICBDVVJMVV9VUkxFTkNPREUpOwogICAgIGlmKHVjKQogICAgICAgcmV0dXJuIEN1cmxfdWNfdG9fY3VybGNvZGUodWMpOwogICB9CiAgIGlmKHBhc3N3ZF9jaGFuZ2VkKSB7Ci0gICAgdWMgPSBjdXJsX3VybF9zZXQoZGF0YS0+c3RhdGUudWgsIENVUkxVUEFSVF9QQVNTV09SRCwgKnBhc3N3ZHAsIDApOworICAgIHVjID0gY3VybF91cmxfc2V0KGRhdGEtPnN0YXRlLnVoLCBDVVJMVVBBUlRfUEFTU1dPUkQsICpwYXNzd2RwLAorICAgICAgICAgICAgICAgICAgICAgIENVUkxVX1VSTEVOQ09ERSk7CiAgICAgaWYodWMpCiAgICAgICByZXR1cm4gQ3VybF91Y190b19jdXJsY29kZSh1Yyk7CiAgIH0KQEAgLTI5MTMsMTMgKzI4NDksNiBAQAogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogCi0gIC8qIGlmIHRoZXJlJ3MgYSB1c2VyIHdpdGhvdXQgcGFzc3dvcmQsIGNvbnNpZGVyIHBhc3N3b3JkIGJsYW5rICovCi0gIGlmKGNvbm4tPnVzZXIgJiYgIWNvbm4tPnBhc3N3ZCkgewotICAgIGNvbm4tPnBhc3N3ZCA9IHN0cmR1cCgiIik7Ci0gICAgaWYoIWNvbm4tPnBhc3N3ZCkKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTQyLDI4ICszMDcxLDc0IEBACiAKICNpZmRlZiBVU0VfQUxUU1ZDCiAgIGlmKGRhdGEtPmFzaSAmJiAhaG9zdCAmJiAocG9ydCA9PSAtMSkgJiYKLSAgICAgKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19IVFRQUykpIHsKKyAgICAgKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCA9PSBDVVJMUFJPVE9fSFRUUFMpIHx8CisjaWZkZWYgQ1VSTERFQlVHCisgICAgICAvKiBhbGxvdyBkZWJ1ZyBidWlsZHMgdG8gY2lyY3VtdmVudCB0aGUgSFRUUFMgcmVzdHJpY3Rpb24gKi8KKyAgICAgIGdldGVudigiQ1VSTF9BTFRTVkNfSFRUUCIpCisjZWxzZQorICAgICAgMAorI2VuZGlmCisgICAgICAgKSkgewogICAgIC8qIG5vIGNvbm5lY3RfdG8gbWF0Y2gsIHRyeSBhbHQtc3ZjISAqLwotICAgIGNvbnN0IGNoYXIgKm5ob3N0OwotICAgIGludCBucG9ydDsKLSAgICBlbnVtIGFscG5pZCBuYWxwbmlkOworICAgIGVudW0gYWxwbmlkIHNyY2FscG5pZDsKICAgICBib29sIGhpdDsKKyAgICBzdHJ1Y3QgYWx0c3ZjICphczsKKyAgICBjb25zdCBpbnQgYWxsb3dlZF92ZXJzaW9ucyA9ICggQUxQTl9oMQorI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgICB8IEFMUE5faDIKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9RVUlDCisgICAgICB8IEFMUE5faDMKKyNlbmRpZgorICAgICAgKSAmIGRhdGEtPmFzaS0+ZmxhZ3M7CisKICAgICBob3N0ID0gY29ubi0+aG9zdC5yYXdhbGxvYzsKKyNpZmRlZiBVU0VfTkdIVFRQMgorICAgIC8qIHdpdGggaDIgc3VwcG9ydCwgY2hlY2sgdGhhdCBmaXJzdCAqLworICAgIHNyY2FscG5pZCA9IEFMUE5faDI7CiAgICAgaGl0ID0gQ3VybF9hbHRzdmNfbG9va3VwKGRhdGEtPmFzaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxQTl9oMSwgaG9zdCwgY29ubi0+cmVtb3RlX3BvcnQsIC8qIGZyb20gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbHBuaWQsICZuaG9zdCwgJm5wb3J0IC8qIHRvICovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjYWxwbmlkLCBob3N0LCBjb25uLT5yZW1vdGVfcG9ydCwgLyogZnJvbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXMgLyogdG8gKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfdmVyc2lvbnMpOworICAgIGlmKCFoaXQpCisjZW5kaWYKKyAgICB7CisgICAgICBzcmNhbHBuaWQgPSBBTFBOX2gxOworICAgICAgaGl0ID0gQ3VybF9hbHRzdmNfbG9va3VwKGRhdGEtPmFzaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNhbHBuaWQsIGhvc3QsIGNvbm4tPnJlbW90ZV9wb3J0LCAvKiBmcm9tICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzIC8qIHRvICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfdmVyc2lvbnMpOworICAgIH0KICAgICBpZihoaXQpIHsKLSAgICAgIGNoYXIgKmhvc3RkID0gc3RyZHVwKChjaGFyICopbmhvc3QpOworICAgICAgY2hhciAqaG9zdGQgPSBzdHJkdXAoKGNoYXIgKilhcy0+ZHN0Lmhvc3QpOwogICAgICAgaWYoIWhvc3RkKQogICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIGNvbm4tPmNvbm5fdG9faG9zdC5yYXdhbGxvYyA9IGhvc3RkOwogICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUgPSBob3N0ZDsKICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19ob3N0ID0gVFJVRTsKLSAgICAgIGNvbm4tPmNvbm5fdG9fcG9ydCA9IG5wb3J0OworICAgICAgY29ubi0+Y29ubl90b19wb3J0ID0gYXMtPmRzdC5wb3J0OwogICAgICAgY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgPSBUUlVFOworICAgICAgY29ubi0+Yml0cy5hbHR1c2VkID0gVFJVRTsKICAgICAgIGluZm9mKGRhdGEsICJBbHQtc3ZjIGNvbm5lY3RpbmcgZnJvbSBbJXNdJXM6JWQgdG8gWyVzXSVzOiVkXG4iLAotICAgICAgICAgICAgQ3VybF9hbHBuaWQyc3RyKEFMUE5faDEpLCBob3N0LCBjb25uLT5yZW1vdGVfcG9ydCwKLSAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihuYWxwbmlkKSwgaG9zdGQsIG5wb3J0KTsKKyAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihzcmNhbHBuaWQpLCBob3N0LCBjb25uLT5yZW1vdGVfcG9ydCwKKyAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihhcy0+ZHN0LmFscG5pZCksIGhvc3RkLCBhcy0+ZHN0LnBvcnQpOworICAgICAgaWYoc3JjYWxwbmlkICE9IGFzLT5kc3QuYWxwbmlkKSB7CisgICAgICAgIC8qIHByb3RvY29sIHZlcnNpb24gc3dpdGNoICovCisgICAgICAgIHN3aXRjaChhcy0+ZHN0LmFscG5pZCkgeworICAgICAgICBjYXNlIEFMUE5faDE6CisgICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAxMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTFBOX2gyOgorICAgICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMjA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxQTl9oMzoKKyAgICAgICAgICBjb25uLT50cmFuc3BvcnQgPSBUUk5TUFJUX1FVSUM7CisgICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAzMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KICAgICB9CiAgIH0KICNlbmRpZgpAQCAtMzIxMCw3ICszMTg1LDcgQEAKICAgICAgIGVsc2UgewogICAgICAgICBib29sIGxvbmdwYXRoID0gRkFMU0U7CiAgICAgICAgIGhvc3RhZGRyLT5hZGRyID0gQ3VybF91bml4MmFkZHIocGF0aCwgJmxvbmdwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFic3RyYWN0X3VuaXhfc29ja2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmFic3RyYWN0X3VuaXhfc29ja2V0KTsKICAgICAgICAgaWYoaG9zdGFkZHItPmFkZHIpCiAgICAgICAgICAgaG9zdGFkZHItPmludXNlKys7CiAgICAgICAgIGVsc2UgewpAQCAtMzIyOCw2ICszMjAzLDcgQEAKICAgICB9CiAgICAgZWxzZQogI2VuZGlmCisKICAgICBpZighY29ubi0+Yml0cy5wcm94eSkgewogICAgICAgc3RydWN0IGhvc3RuYW1lICpjb25uaG9zdDsKICAgICAgIGlmKGNvbm4tPmJpdHMuY29ubl90b19ob3N0KQpAQCAtMzI1NiwxMCArMzIzMiwxMSBAQAogCiAgICAgICBlbHNlIGlmKCFob3N0YWRkcikgewogICAgICAgICBmYWlsZihkYXRhLCAiQ291bGRuJ3QgcmVzb2x2ZSBob3N0ICclcyciLCBjb25uaG9zdC0+ZGlzcG5hbWUpOwotICAgICAgICByZXN1bHQgPSAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICAgICAgICAvKiBkb24ndCByZXR1cm4geWV0LCB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSB0aW1lb3V0IGZpcnN0ICovCiAgICAgICB9CiAgICAgfQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICBlbHNlIHsKICAgICAgIC8qIFRoaXMgaXMgYSBwcm94eSB0aGF0IGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gKi8KIApAQCAtMzI4NSw2ICszMjYyLDcgQEAKICAgICAgICAgLyogZG9uJ3QgcmV0dXJuIHlldCwgd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgdGltZW91dCBmaXJzdCAqLwogICAgICAgfQogICAgIH0KKyNlbmRpZgogICAgIERFQlVHQVNTRVJUKGNvbm4tPmRuc19lbnRyeSA9PSBOVUxMKTsKICAgICBjb25uLT5kbnNfZW50cnkgPSBob3N0YWRkcjsKICAgfQpAQCAtMzMwMCwxNiArMzI3OCwxNyBAQAogc3RhdGljIHZvaWQgcmV1c2VfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKm9sZF9jb25uLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZvbGRfY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJm9sZF9jb25uLT5zb2Nrc19wcm94eS5ob3N0KTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJm9sZF9jb25uLT5odHRwX3Byb3h5Lmhvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZvbGRfY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CiAKICAgZnJlZShvbGRfY29ubi0+aHR0cF9wcm94eS5ob3N0LnJhd2FsbG9jKTsKICAgZnJlZShvbGRfY29ubi0+c29ja3NfcHJveHkuaG9zdC5yYXdhbGxvYyk7Ci0KKyAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmb2xkX2Nvbm4tPnByb3h5X3NzbF9jb25maWcpOworI2VuZGlmCiAgIC8qIGZyZWUgdGhlIFNTTCBjb25maWcgc3RydWN0IGZyb20gdGhpcyBjb25uZWN0aW9uIHN0cnVjdCBhcyB0aGlzIHdhcwogICAgICBhbGxvY2F0ZWQgaW4gdmFpbiBhbmQgaXMgdGFyZ2V0ZWQgZm9yIGRlc3RydWN0aW9uICovCiAgIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoJm9sZF9jb25uLT5zc2xfY29uZmlnKTsKLSAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmb2xkX2Nvbm4tPnByb3h5X3NzbF9jb25maWcpOwogCiAgIGNvbm4tPmRhdGEgPSBvbGRfY29ubi0+ZGF0YTsKIApAQCAtMzMyNiw2ICszMzA1LDcgQEAKICAgICBvbGRfY29ubi0+cGFzc3dkID0gTlVMTDsKICAgfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkID0gb2xkX2Nvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2Q7CiAgIGlmKGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QpIHsKICAgICAvKiB1c2UgdGhlIG5ldyBwcm94eSB1c2VyIG5hbWUgYW5kIHByb3h5IHBhc3N3b3JkIHRob3VnaCAqLwpAQCAtMzM0MiwxMSArMzMyMiwxNiBAQAogICAgIG9sZF9jb25uLT5odHRwX3Byb3h5LnBhc3N3ZCA9IE5VTEw7CiAgICAgb2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCA9IE5VTEw7CiAgIH0KKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+aHR0cF9wcm94eS51c2VyKTsKKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+c29ja3NfcHJveHkudXNlcik7CisgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPmh0dHBfcHJveHkucGFzc3dkKTsKKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+c29ja3NfcHJveHkucGFzc3dkKTsKKyNlbmRpZgogCiAgIC8qIGhvc3QgY2FuIGNoYW5nZSwgd2hlbiBkb2luZyBrZWVwYWxpdmUgd2l0aCBhIHByb3h5IG9yIGlmIHRoZSBjYXNlIGlzCiAgICAgIGRpZmZlcmVudCB0aGlzIHRpbWUgZXRjICovCi0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5ob3N0KTsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmNvbm5fdG9faG9zdCk7CisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmhvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5jb25uX3RvX2hvc3QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmhvc3QucmF3YWxsb2MpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmNvbm5fdG9faG9zdC5yYXdhbGxvYyk7CiAgIGNvbm4tPmhvc3QgPSBvbGRfY29ubi0+aG9zdDsKQEAgLTMzNjksMTAgKzMzNTQsNiBAQAogICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT51c2VyKTsKICAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+cGFzc3dkKTsKICAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+b3B0aW9ucyk7Ci0gIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPmh0dHBfcHJveHkudXNlcik7Ci0gIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnVzZXIpOwotICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT5odHRwX3Byb3h5LnBhc3N3ZCk7Ci0gIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCk7CiAgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPmxvY2FsZGV2KTsKICAgQ3VybF9sbGlzdF9kZXN0cm95KCZvbGRfY29ubi0+ZWFzeXEsIE5VTEwpOwogCkBAIC0zNDQyLDkgKzM0MjMsOSBAQAogICBpZihyZXN1bHQpCiAgICAgZ290byBvdXQ7CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkgewotICAgIGNvbm4tPm9hdXRoX2JlYXJlciA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdKTsKLSAgICBpZighY29ubi0+b2F1dGhfYmVhcmVyKSB7CisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NBU0xfQVVUSFpJRF0pIHsKKyAgICBjb25uLT5zYXNsX2F1dGh6aWQgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfU0FTTF9BVVRIWklEXSk7CisgICAgaWYoIWNvbm4tPnNhc2xfYXV0aHppZCkgewogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTM0NTcsNyArMzQzOCw3IEBACiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgZ290byBvdXQ7CiAgICAgfQotICAgIGNvbm4tPmFic3RyYWN0X3VuaXhfc29ja2V0ID0gZGF0YS0+c2V0LmFic3RyYWN0X3VuaXhfc29ja2V0OworICAgIGNvbm4tPmJpdHMuYWJzdHJhY3RfdW5peF9zb2NrZXQgPSBkYXRhLT5zZXQuYWJzdHJhY3RfdW5peF9zb2NrZXQ7CiAgIH0KICNlbmRpZgogCkBAIC0zNDY3LDcgKzM0NDgsNiBAQAogICByZXN1bHQgPSBjcmVhdGVfY29ubl9oZWxwZXJfaW5pdF9wcm94eShjb25uKTsKICAgaWYocmVzdWx0KQogICAgIGdvdG8gb3V0OwotI2VuZGlmCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICogSWYgdGhlIHByb3RvY29sIGlzIHVzaW5nIFNTTCBhbmQgSFRUUCBwcm94eSBpcyB1c2VkLCB3ZSBzZXQKQEAgLTM0NzUsNiArMzQ1NSw3IEBACiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICBpZigoY29ubi0+Z2l2ZW4tPmZsYWdzJlBST1RPUFRfU1NMKSAmJiBjb25uLT5iaXRzLmh0dHBwcm94eSkKICAgICBjb25uLT5iaXRzLnR1bm5lbF9wcm94eSA9IFRSVUU7CisjZW5kaWYKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKiBGaWd1cmUgb3V0IHRoZSByZW1vdGUgcG9ydCBudW1iZXIgYW5kIGZpeCBpdCBpbiB0aGUgVVJMCkBAIC0zNTA1LDI0ICszNDg2LDI2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqIElETi1jb252ZXJ0IHRoZSBob3N0bmFtZXMKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIHJlc3VsdCA9IGlkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmhvc3QpOworICByZXN1bHQgPSBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmhvc3QpOwogICBpZihyZXN1bHQpCiAgICAgZ290byBvdXQ7CiAgIGlmKGNvbm4tPmJpdHMuY29ubl90b19ob3N0KSB7Ci0gICAgcmVzdWx0ID0gaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+Y29ubl90b19ob3N0KTsKKyAgICByZXN1bHQgPSBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmNvbm5fdG9faG9zdCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBvdXQ7CiAgIH0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KSB7Ci0gICAgcmVzdWx0ID0gaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKKyAgICByZXN1bHQgPSBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmh0dHBfcHJveHkuaG9zdCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBvdXQ7CiAgIH0KICAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KSB7Ci0gICAgcmVzdWx0ID0gaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CisgICAgcmVzdWx0ID0gQ3VybF9pZG5jb252ZXJ0X2hvc3RuYW1lKGNvbm4sICZjb25uLT5zb2Nrc19wcm94eS5ob3N0KTsKICAgICBpZihyZXN1bHQpCiAgICAgICBnb3RvIG91dDsKICAgfQorI2VuZGlmCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICogQ2hlY2sgd2hldGhlciB0aGUgaG9zdCBhbmQgdGhlICJjb25uZWN0IHRvIGhvc3QiIGFyZSBlcXVhbC4KQEAgLTM1NDEsNiArMzUyNCw3IEBACiAgICAgY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgPSBGQUxTRTsKICAgfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKiBJZiB0aGUgImNvbm5lY3QgdG8iIGZlYXR1cmUgaXMgdXNlZCB3aXRoIGFuIEhUVFAgcHJveHksCiAgICAqIHdlIHNldCB0aGUgdHVubmVsX3Byb3h5IGJpdC4KQEAgLTM1NDgsNiArMzUzMiw3IEBACiAgIGlmKChjb25uLT5iaXRzLmNvbm5fdG9faG9zdCB8fCBjb25uLT5iaXRzLmNvbm5fdG9fcG9ydCkgJiYKICAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5KQogICAgIGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ID0gVFJVRTsKKyNlbmRpZgogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqIFNldHVwIGludGVybmFscyBkZXBlbmRpbmcgb24gcHJvdG9jb2wuIE5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIKQEAgLTM1ODAsNiArMzU2NSw3IEBACiAgICAgaWYoIXJlc3VsdCkgewogICAgICAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXSA9IFRSVUU7IC8qIHdlIGFyZSAiY29ubmVjdGVkICovCiAKKyAgICAgIEN1cmxfYXR0YWNoX2Nvbm5uZWN0aW9uKGRhdGEsIGNvbm4pOwogICAgICAgcmVzdWx0ID0gQ3VybF9jb25uY2FjaGVfYWRkX2Nvbm4oZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwgY29ubik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIGdvdG8gb3V0OwpAQCAtMzU5NCw3ICszNTgwLDYgQEAKICAgICAgICAgKHZvaWQpY29ubi0+aGFuZGxlci0+ZG9uZShjb25uLCByZXN1bHQsIEZBTFNFKTsKICAgICAgICAgZ290byBvdXQ7CiAgICAgICB9Ci0gICAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjb25uKTsKICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOwogICAgIH0KIApAQCAtMzYxNSw1NyArMzYwMCw3NSBAQAogICAgICBjb3BpZXMgd2lsbCBiZSBzZXBhcmF0ZWx5IGFsbG9jYXRlZC4KICAgKi8KICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LkNBcGF0aCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQXBhdGggPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LkNBZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQWZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnJhbmRvbV9maWxlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXTsKLSAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnJhbmRvbV9maWxlID0KLSAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdOwogICBkYXRhLT5zZXQuc3NsLnByaW1hcnkuZWdkc29ja2V0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0VHRFNPQ0tFVF07Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5lZ2Rzb2NrZXQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNpcGhlcl9saXN0ID0KICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5jaXBoZXJfbGlzdCA9Ci0gICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUl9MSVNUX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNpcGhlcl9saXN0MTMgPQogICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DSVBIRVIxM19MSVNUX09SSUddOworICBkYXRhLT5zZXQuc3NsLnByaW1hcnkucGlubmVkX2tleSA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKKyAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNlcnRfYmxvYiA9IGRhdGEtPnNldC5ibG9ic1tCTE9CX0NFUlRfT1JJR107CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQXBhdGggPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIX1BST1hZXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LkNBZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfUFJPWFldOworICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkucmFuZG9tX2ZpbGUgPQorICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9SQU5ET01fRklMRV07CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5lZ2Rzb2NrZXQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LmNpcGhlcl9saXN0ID0KKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RfUFJPWFldOwogICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkuY2lwaGVyX2xpc3QxMyA9CiAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUjEzX0xJU1RfUFJPWFldOwotCi0gIGRhdGEtPnNldC5zc2wuQ1JMZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX09SSUddOworICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkucGlubmVkX2tleSA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV07CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5jZXJ0X2Jsb2IgPSBkYXRhLT5zZXQuYmxvYnNbQkxPQl9DRVJUX1BST1hZXTsKICAgZGF0YS0+c2V0LnByb3h5X3NzbC5DUkxmaWxlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldOwotICBkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF9PUklHXTsKICAgZGF0YS0+c2V0LnByb3h5X3NzbC5pc3N1ZXJjZXJ0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfUFJPWFldOwotICBkYXRhLT5zZXQuc3NsLmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVfT1JJR107CiAgIGRhdGEtPnNldC5wcm94eV9zc2wuY2VydF90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5rZXkgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfT1JJR107CiAgIGRhdGEtPnNldC5wcm94eV9zc2wua2V5ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5rZXlfdHlwZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9UWVBFX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1RZUEVfUFJPWFldOwotICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNsaWVudGNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkuY2xpZW50Y2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfUFJPWFldOworICBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnRfYmxvYiA9IGRhdGEtPnNldC5ibG9ic1tCTE9CX0NFUlRfUFJPWFldOworICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV9ibG9iID0gZGF0YS0+c2V0LmJsb2JzW0JMT0JfS0VZX1BST1hZXTsKKyNlbmRpZgorICBkYXRhLT5zZXQuc3NsLkNSTGZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9PUklHXTsKKyAgZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfT1JJR107CisgIGRhdGEtPnNldC5zc2wuY2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfT1JJR107CisgIGRhdGEtPnNldC5zc2wuY2VydF90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFX09SSUddOworICBkYXRhLT5zZXQuc3NsLmtleSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9PUklHXTsKKyAgZGF0YS0+c2V0LnNzbC5rZXlfdHlwZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9UWVBFX09SSUddOworICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX09SSUddOworICBkYXRhLT5zZXQuc3NsLnByaW1hcnkuY2xpZW50Y2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfT1JJR107CiAjaWZkZWYgVVNFX1RMU19TUlAKICAgZGF0YS0+c2V0LnNzbC51c2VybmFtZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wudXNlcm5hbWUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wYXNzd29yZCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfT1JJR107CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBkYXRhLT5zZXQucHJveHlfc3NsLnVzZXJuYW1lID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV9QUk9YWV07CiAgIGRhdGEtPnNldC5wcm94eV9zc2wucGFzc3dvcmQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1BBU1NXT1JEX1BST1hZXTsKICNlbmRpZgorI2VuZGlmCisKKyAgZGF0YS0+c2V0LnNzbC5jZXJ0X2Jsb2IgPSBkYXRhLT5zZXQuYmxvYnNbQkxPQl9DRVJUX09SSUddOworICBkYXRhLT5zZXQuc3NsLmtleV9ibG9iID0gZGF0YS0+c2V0LmJsb2JzW0JMT0JfS0VZX09SSUddOworICBkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnRfYmxvYiA9IGRhdGEtPnNldC5ibG9ic1tCTE9CX1NTTF9JU1NVRVJDRVJUX09SSUddOwogCiAgIGlmKCFDdXJsX2Nsb25lX3ByaW1hcnlfc3NsX2NvbmZpZygmZGF0YS0+c2V0LnNzbC5wcmltYXJ5LAotICAgICAmY29ubi0+c3NsX2NvbmZpZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uLT5zc2xfY29uZmlnKSkgewogICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgZ290byBvdXQ7CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgaWYoIUN1cmxfY2xvbmVfcHJpbWFyeV9zc2xfY29uZmlnKCZkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+cHJveHlfc3NsX2NvbmZpZykpIHsKICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIGdvdG8gb3V0OwogICB9CisjZW5kaWYKIAogICBwcnVuZV9kZWFkX2Nvbm5lY3Rpb25zKGRhdGEpOwogCkBAIC0zNjg4LDI1ICszNjkxLDYgQEAKICAgZWxzZQogICAgIHJldXNlID0gQ29ubmVjdGlvbkV4aXN0cyhkYXRhLCBjb25uLCAmY29ubl90ZW1wLCAmZm9yY2VfcmV1c2UsICZ3YWl0cGlwZSk7CiAKLSAgLyogSWYgd2UgZm91bmQgYSByZXVzYWJsZSBjb25uZWN0aW9uIHRoYXQgaXMgbm93IG1hcmtlZCBhcyBpbiB1c2UsIHdlIG1heQotICAgICBzdGlsbCB3YW50IHRvIG9wZW4gYSBuZXcgY29ubmVjdGlvbiBpZiB3ZSBhcmUgbXVsdGlwbGV4aW5nLiAqLwotICBpZihyZXVzZSAmJiAhZm9yY2VfcmV1c2UgJiYgSXNNdWx0aXBsZXhpbmdQb3NzaWJsZShkYXRhLCBjb25uX3RlbXApKSB7Ci0gICAgc2l6ZV90IG11bHRpcGxleGVkID0gQ09OTl9JTlVTRShjb25uX3RlbXApOwotICAgIGlmKG11bHRpcGxleGVkID4gMCkgewotICAgICAgaW5mb2YoZGF0YSwgIkZvdW5kIGNvbm5lY3Rpb24gJWxkLCB3aXRoICV6dSByZXF1ZXN0cyBvbiBpdFxuIiwKLSAgICAgICAgICAgIGNvbm5fdGVtcC0+Y29ubmVjdGlvbl9pZCwgbXVsdGlwbGV4ZWQpOwotCi0gICAgICBpZihDdXJsX2Nvbm5jYWNoZV9idW5kbGVfc2l6ZShjb25uX3RlbXApIDwgbWF4X2hvc3RfY29ubmVjdGlvbnMgJiYKLSAgICAgICAgIEN1cmxfY29ubmNhY2hlX3NpemUoZGF0YSkgPCBtYXhfdG90YWxfY29ubmVjdGlvbnMpIHsKLSAgICAgICAgLyogV2Ugd2FudCBhIG5ldyBjb25uZWN0aW9uIGFueXdheSAqLwotICAgICAgICByZXVzZSA9IEZBTFNFOwotCi0gICAgICAgIGluZm9mKGRhdGEsICJXZSBjYW4gcmV1c2UsIGJ1dCB3ZSB3YW50IGEgbmV3IGNvbm5lY3Rpb24gYW55d2F5XG4iKTsKLSAgICAgICAgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oY29ubl90ZW1wKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQogICBpZihyZXVzZSkgewogICAgIC8qCiAgICAgICogV2UgYWxyZWFkeSBoYXZlIGEgY29ubmVjdGlvbiBmb3IgdGhpcywgd2UgZ290IHRoZSBmb3JtZXIgY29ubmVjdGlvbgpAQCAtMzcyMiwxMiArMzcwNiwxNyBAQAogICAgIGNvbm4gPSBjb25uX3RlbXA7CiAgICAgKmluX2Nvbm5lY3QgPSBjb25uOwogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgIGluZm9mKGRhdGEsICJSZS11c2luZyBleGlzdGluZyBjb25uZWN0aW9uISAoIyVsZCkgd2l0aCAlcyAlc1xuIiwKICAgICAgICAgICBjb25uLT5jb25uZWN0aW9uX2lkLAogICAgICAgICAgIGNvbm4tPmJpdHMucHJveHk/InByb3h5IjoiaG9zdCIsCiAgICAgICAgICAgY29ubi0+c29ja3NfcHJveHkuaG9zdC5uYW1lID8gY29ubi0+c29ja3NfcHJveHkuaG9zdC5kaXNwbmFtZSA6CiAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisjZWxzZQorICAgIGluZm9mKGRhdGEsICJSZS11c2luZyBleGlzdGluZyBjb25uZWN0aW9uISAoIyVsZCkgd2l0aCBob3N0ICVzXG4iLAorICAgICAgICAgIGNvbm4tPmNvbm5lY3Rpb25faWQsIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgLyogV2UgaGF2ZSBkZWNpZGVkIHRoYXQgd2Ugd2FudCBhIG5ldyBjb25uZWN0aW9uLiBIb3dldmVyLCB3ZSBtYXkgbm90CkBAIC0zNzQ5LDggKzM3MzgsOSBAQAogICAgICAgY29ubmVjdGlvbnNfYXZhaWxhYmxlID0gRkFMU0U7CiAgICAgZWxzZSB7CiAgICAgICAvKiB0aGlzIGdldHMgYSBsb2NrIG9uIHRoZSBjb25uY2FjaGUgKi8KKyAgICAgIGNvbnN0IGNoYXIgKmJ1bmRsZWhvc3Q7CiAgICAgICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlID0KLSAgICAgICAgQ3VybF9jb25uY2FjaGVfZmluZF9idW5kbGUoY29ubiwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSk7CisgICAgICAgIEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKGNvbm4sIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUsICZidW5kbGVob3N0KTsKIAogICAgICAgaWYobWF4X2hvc3RfY29ubmVjdGlvbnMgPiAwICYmIGJ1bmRsZSAmJgogICAgICAgICAgKGJ1bmRsZS0+bnVtX2Nvbm5lY3Rpb25zID49IG1heF9ob3N0X2Nvbm5lY3Rpb25zKSkgewpAQCAtMzc1OCwxOSArMzc0OCwxOSBAQAogCiAgICAgICAgIC8qIFRoZSBidW5kbGUgaXMgZnVsbC4gRXh0cmFjdCB0aGUgb2xkZXN0IGNvbm5lY3Rpb24uICovCiAgICAgICAgIGNvbm5fY2FuZGlkYXRlID0gQ3VybF9jb25uY2FjaGVfZXh0cmFjdF9idW5kbGUoZGF0YSwgYnVuZGxlKTsKLSAgICAgICAgQ3VybF9jb25uY2FjaGVfdW5sb2NrKGRhdGEpOworICAgICAgICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgICAgICAgIGlmKGNvbm5fY2FuZGlkYXRlKQogICAgICAgICAgICh2b2lkKUN1cmxfZGlzY29ubmVjdChkYXRhLCBjb25uX2NhbmRpZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVhZF9jb25uZWN0aW9uICovIEZBTFNFKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIk5vIG1vcmUgY29ubmVjdGlvbnMgYWxsb3dlZCB0byBob3N0OiAlenVcbiIsCi0gICAgICAgICAgICAgICAgbWF4X2hvc3RfY29ubmVjdGlvbnMpOworICAgICAgICAgIGluZm9mKGRhdGEsICJObyBtb3JlIGNvbm5lY3Rpb25zIGFsbG93ZWQgdG8gaG9zdCAlczogJXp1XG4iLAorICAgICAgICAgICAgICAgIGJ1bmRsZWhvc3QsIG1heF9ob3N0X2Nvbm5lY3Rpb25zKTsKICAgICAgICAgICBjb25uZWN0aW9uc19hdmFpbGFibGUgPSBGQUxTRTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQotICAgICAgICBDdXJsX2Nvbm5jYWNoZV91bmxvY2soZGF0YSk7CisgICAgICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAKICAgICB9CiAKQEAgLTM4MDQsNiArMzc5NCw4IEBACiAgICAgICAgKiBUaGlzIGlzIGEgYnJhbmQgbmV3IGNvbm5lY3Rpb24sIHNvIGxldCdzIHN0b3JlIGl0IGluIHRoZSBjb25uZWN0aW9uCiAgICAgICAgKiBjYWNoZSBvZiBvdXJzIQogICAgICAgICovCisgICAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjb25uKTsKKwogICAgICAgcmVzdWx0ID0gQ3VybF9jb25uY2FjaGVfYWRkX2Nvbm4oZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwgY29ubik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIGdvdG8gb3V0OwpAQCAtMzg1NSwxMCArMzg0NywxMiBAQAogCiAgIC8qIFN0cmlwIHRyYWlsaW5nIGRvdHMuIHJlc29sdmVfc2VydmVyIGNvcGllZCB0aGUgbmFtZS4gKi8KICAgc3RyaXBfdHJhaWxpbmdfZG90KCZjb25uLT5ob3N0KTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQogICAgIHN0cmlwX3RyYWlsaW5nX2RvdCgmY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKICAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KQogICAgIHN0cmlwX3RyYWlsaW5nX2RvdCgmY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CisjZW5kaWYKICAgaWYoY29ubi0+Yml0cy5jb25uX3RvX2hvc3QpCiAgICAgc3RyaXBfdHJhaWxpbmdfZG90KCZjb25uLT5jb25uX3RvX2hvc3QpOwogCkBAIC0zODg5LDIyICszODgzLDIzIEBACiAgIH0KICAgKnByb3RvY29sX2RvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSAqLwogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAvKiBzZXQgcHJveHlfY29ubmVjdF9jbG9zZWQgdG8gZmFsc2UgdW5jb25kaXRpb25hbGx5IGFscmVhZHkgaGVyZSBzaW5jZSBpdAogICAgICBpcyB1c2VkIHN0cmljdGx5IHRvIHByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gYSBwYXJlbnQgZnVuY3Rpb24gaW4gdGhlCiAgICAgIGNhc2Ugb2YgcHJveHkgQ09OTkVDVCBmYWlsdXJlcyBhbmQgd2UgbXVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBpdAogICAgICBsaW5nZXJpbmcgc2V0IGZyb20gYSBwcmV2aW91cyBpbnZva2UgKi8KICAgY29ubi0+Yml0cy5wcm94eV9jb25uZWN0X2Nsb3NlZCA9IEZBTFNFOwotCisjZW5kaWYKICAgLyoKICAgICogU2V0IHVzZXItYWdlbnQuIFVzZWQgZm9yIEhUVFAsIGJ1dCBzaW5jZSB3ZSBjYW4gYXR0ZW1wdCB0byB0dW5uZWwKICAgICogYmFzaWNhbGx5IGFueXRoaW5nIHRocm91Z2ggYSBodHRwIHByb3h5IHdlIGNhbid0IGxpbWl0IHRoaXMgYmFzZWQgb24KICAgICogcHJvdG9jb2wuCiAgICAqLwogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdKSB7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51YWdlbnQpOwotICAgIGNvbm4tPmFsbG9jcHRyLnVhZ2VudCA9CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQgPQogICAgICAgYXByaW50ZigiVXNlci1BZ2VudDogJXNcclxuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUkFHRU5UXSk7Ci0gICAgaWYoIWNvbm4tPmFsbG9jcHRyLnVhZ2VudCkKKyAgICBpZighZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogCkBAIC0zOTI2LDcgKzM5MjEsOSBAQAogICB9CiAgIGVsc2UgewogICAgIEN1cmxfcGdyc1RpbWUoZGF0YSwgVElNRVJfQ09OTkVDVCk7ICAgIC8qIHdlJ3JlIGNvbm5lY3RlZCBhbHJlYWR5ICovCi0gICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogd2UncmUgY29ubmVjdGVkIGFscmVhZHkgKi8KKyAgICBpZihjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSB8fAorICAgICAgIChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9TU0gpKQorICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogd2UncmUgY29ubmVjdGVkIGFscmVhZHkgKi8KICAgICBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdID0gVFJVRTsKICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CiAgICAgQ3VybF91cGRhdGVjb25uaW5mbyhjb25uLCBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSk7CkBAIC0zOTU2LDcgKzM5NTMsNyBAQAogICByZXN1bHQgPSBjcmVhdGVfY29ubihkYXRhLCAmY29ubiwgYXN5bmNwKTsKIAogICBpZighcmVzdWx0KSB7Ci0gICAgaWYoQ09OTl9JTlVTRShjb25uKSkKKyAgICBpZihDT05OX0lOVVNFKGNvbm4pID4gMSkKICAgICAgIC8qIG11bHRpcGxleGVkICovCiAgICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CiAgICAgZWxzZSBpZighKmFzeW5jcCkgewpAQCAtMzk3MywxMSArMzk3MCwxMCBAQAogICBlbHNlIGlmKHJlc3VsdCAmJiBjb25uKSB7CiAgICAgLyogV2UncmUgbm90IGFsbG93ZWQgdG8gcmV0dXJuIGZhaWx1cmUgd2l0aCBtZW1vcnkgbGVmdCBhbGxvY2F0ZWQgaW4gdGhlCiAgICAgICAgY29ubmVjdGRhdGEgc3RydWN0LCBmcmVlIHRob3NlIGhlcmUgKi8KKyAgICBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihkYXRhKTsKKyAgICBDdXJsX2Nvbm5jYWNoZV9yZW1vdmVfY29ubihkYXRhLCBjb25uLCBUUlVFKTsKICAgICBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgVFJVRSk7CiAgIH0KLSAgZWxzZSBpZighcmVzdWx0ICYmICFkYXRhLT5jb25uKQotICAgIC8qIEZJTEU6IHRyYW5zZmVycyBhbHJlYWR5IGhhdmUgdGhlIGNvbm5lY3Rpb24gYXR0YWNoZWQgKi8KLSAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjb25uKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzk5Niw2ICszOTkyLDExIEBACiB7CiAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKIAorICAvKiBpZiB0aGlzIGlzIGEgcHVzaGVkIHN0cmVhbSwgd2UgbmVlZCB0aGlzOiAqLworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3ByZWNvbm5lY3QoZGF0YSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCiAgIGlmKGNvbm4pIHsKICAgICBjb25uLT5iaXRzLmRvX21vcmUgPSBGQUxTRTsgLyogYnkgZGVmYXVsdCB0aGVyZSdzIG5vIGN1cmxfZG9fbW9yZSgpIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSAqLwpAQCAtNDAwOCwzMCArNDAwOSwxNyBAQAogICBkYXRhLT5zdGF0ZS5kb25lID0gRkFMU0U7IC8qICpfZG9uZSgpIGlzIG5vdCBjYWxsZWQgeWV0ICovCiAgIGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlciA9IEZBTFNFOwogCi0KICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KQogICAgIC8qIGluIEhUVFAgbGluZ28sIG5vIGJvZHkgbWVhbnMgdXNpbmcgdGhlIEhFQUQgcmVxdWVzdC4uLiAqLwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9IRUFEOwotICBlbHNlIGlmKEhUVFBSRVFfSEVBRCA9PSBkYXRhLT5zZXQuaHR0cHJlcSkKLSAgICAvKiAuLi4gYnV0IGlmIHVuc2V0IHRoZXJlIHJlYWxseSBpcyBubyBwZXJmZWN0IG1ldGhvZCB0aGF0IGlzIHRoZQotICAgICAgICJvcHBvc2l0ZSIgb2YgSEVBRCBidXQgaW4gcmVhbGl0eSBtb3N0IHBlb3BsZSBwcm9iYWJseSB0aGluayBHRVQKLSAgICAgICB0aGVuLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgd2UgY2FuJ3QgbGV0IGl0IHJlbWFpbiBIRUFEIGlmIHRoZQotICAgICAgIG9wdF9ub19ib2R5IGlzIHNldCBGQUxTRSBzaW5jZSB0aGVuIHdlJ2xsIGJlaGF2ZSB3cm9uZyB3aGVuIGdldHRpbmcKLSAgICAgICBIVFRQLiAqLwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfSEVBRDsKIAogICBrLT5zdGFydCA9IEN1cmxfbm93KCk7IC8qIHN0YXJ0IHRpbWUgKi8KICAgay0+bm93ID0gay0+c3RhcnQ7ICAgLyogY3VycmVudCB0aW1lIGlzIG5vdyAqLwogICBrLT5oZWFkZXIgPSBUUlVFOyAvKiBhc3N1bWUgaGVhZGVyICovCi0KICAgay0+Ynl0ZWNvdW50ID0gMDsKLQotICBrLT5idWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7Ci0gIGstPmhidWZwID0gZGF0YS0+c3RhdGUuaGVhZGVyYnVmZjsKICAgay0+aWdub3JlYm9keSA9IEZBTFNFOwogCiAgIEN1cmxfc3BlZWRpbml0KGRhdGEpOwotCiAgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CiAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKIApAQCAtNDE0NywzNCArNDEzNSwzIEBACiAKICAgcmV0dXJuIGZhbWlseTsKIH0KLQotCi0vKgotICogV3JhcHBlciB0byBjYWxsIGZ1bmN0aW9ucyBpbiBDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKCkKLSAqCi0gKiBSZXR1cm5zIGFsd2F5cyAwLgotICovCi1zdGF0aWMgaW50IGNvbm5fdXBrZWVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0pCi17Ci0gIC8qIFBhcmFtIGlzIHVudXNlZC4gKi8KLSAgKHZvaWQpcGFyYW07Ci0KLSAgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjaykgewotICAgIC8qIERvIGEgcHJvdG9jb2wtc3BlY2lmaWMga2VlcGFsaXZlIGNoZWNrIG9uIHRoZSBjb25uZWN0aW9uLiAqLwotICAgIGNvbm4tPmhhbmRsZXItPmNvbm5lY3Rpb25fY2hlY2soY29ubiwgQ09OTkNIRUNLX0tFRVBBTElWRSk7Ci0gIH0KLQotICByZXR1cm4gMDsgLyogY29udGludWUgaXRlcmF0aW9uICovCi19Ci0KLUNVUkxjb2RlIEN1cmxfdXBrZWVwKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5fY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCi17Ci0gIC8qIExvb3Agb3ZlciBldmVyeSBjb25uZWN0aW9uIGFuZCBtYWtlIGNvbm5lY3Rpb24gYWxpdmUuICovCi0gIEN1cmxfY29ubmNhY2hlX2ZvcmVhY2goZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25uX2NhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29ubl91cGtlZXApOwotICByZXR1cm4gQ1VSTEVfT0s7Ci19CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmwuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5oCmluZGV4IDRkYjllODYuLjE5NDFkYzYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00Nyw0NyArNDcsNDAgQEAKIENVUkxjb2RlIEN1cmxfb3BlbihzdHJ1Y3QgQ3VybF9lYXN5ICoqY3VybCk7CiBDVVJMY29kZSBDdXJsX2luaXRfdXNlcmRlZmluZWQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CiAKLXZvaWQgQ3VybF9mcmVlc2V0KHN0cnVjdCBDdXJsX2Vhc3kgKiBkYXRhKTsKLS8qIGZyZWUgdGhlIFVSTCBwaWVjZXMgKi8KLXZvaWQgQ3VybF91cF9mcmVlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX2ZyZWVzZXQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CiBDVVJMY29kZSBDdXJsX3VjX3RvX2N1cmxjb2RlKENVUkxVY29kZSB1Yyk7Ci1DVVJMY29kZSBDdXJsX2Nsb3NlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOyAvKiBvcHBvc2l0ZSBvZiBjdXJsX29wZW4oKSAqLworQ1VSTGNvZGUgQ3VybF9jbG9zZShzdHJ1Y3QgQ3VybF9lYXN5ICoqZGF0YXApOyAvKiBvcHBvc2l0ZSBvZiBjdXJsX29wZW4oKSAqLwogQ1VSTGNvZGUgQ3VybF9jb25uZWN0KHN0cnVjdCBDdXJsX2Vhc3kgKiwgYm9vbCAqYXN5bmMsIGJvb2wgKnByb3RvY29sX2Nvbm5lY3QpOwogQ1VSTGNvZGUgQ3VybF9kaXNjb25uZWN0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICosIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKLUNVUkxjb2RlIEN1cmxfcHJvdG9jb2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1DVVJMY29kZSBDdXJsX3Byb3RvY29sX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBDVVJMY29kZSBDdXJsX3NldHVwX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnByb3RvY29sX2RvbmUpOwogdm9pZCBDdXJsX2ZyZWVfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLQotaW50IEN1cmxfcHJvdG9jb2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwotaW50IEN1cmxfZG9pbmdfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwogQ1VSTGNvZGUgQ3VybF9wYXJzZV9sb2dpbl9kZXRhaWxzKGNvbnN0IGNoYXIgKmxvZ2luLCBjb25zdCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip1c2VycHRyLCBjaGFyICoqcGFzc3dkcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvcHRpb25zcHRyKTsKLXZvaWQgQ3VybF9jbG9zZV9jb25uZWN0aW9ucyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLUNVUkxjb2RlIEN1cmxfdXBrZWVwKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5fY2FjaGUsIHZvaWQgKmRhdGEpOwogCiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICpDdXJsX2J1aWx0aW5fc2NoZW1lKGNvbnN0IGNoYXIgKnNjaGVtZSk7CiAKK2Jvb2wgQ3VybF9pc19BU0NJSV9uYW1lKGNvbnN0IGNoYXIgKmhvc3RuYW1lKTsKK0NVUkxjb2RlIEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RuYW1lICpob3N0KTsKK3ZvaWQgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZShzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpOworCiAjZGVmaW5lIENVUkxfREVGQVVMVF9QUk9YWV9QT1JUIDEwODAgLyogZGVmYXVsdCBwcm94eSBwb3J0IHVubGVzcyBzcGVjaWZpZWQgKi8KICNkZWZpbmUgQ1VSTF9ERUZBVUxUX0hUVFBTX1BST1hZX1BPUlQgNDQzIC8qIGRlZmF1bHQgaHR0cHMgcHJveHkgcG9ydCB1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCAqLwogCi1DVVJMY29kZSBDdXJsX2Nvbm5lY3RlZF9wcm94eShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOwotCiAjaWZkZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogI2RlZmluZSBDdXJsX3ZlcmJvc2Vjb25uZWN0KHgpICBDdXJsX25vcF9zdG10CiAjZWxzZQogdm9pZCBDdXJsX3ZlcmJvc2Vjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAjZW5kaWYKIAorI2lmZGVmIENVUkxfRElTQUJMRV9QUk9YWQorI2RlZmluZSBDT05ORUNUX1BST1hZX1NTTCgpIEZBTFNFCisjZWxzZQorCiAjZGVmaW5lIENPTk5FQ1RfUFJPWFlfU1NMKClcCiAgIChjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMgJiZcCiAgICFjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSkKQEAgLTk5LDUgKzkyLDYgQEAKICNkZWZpbmUgQ09OTkVDVF9TRUNPTkRBUllTT0NLRVRfUFJPWFlfU1NMKClcCiAgIChjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMgJiZcCiAgICFjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbU0VDT05EQVJZU09DS0VUXSkKKyNlbmRpZiAvKiAhQ1VSTF9ESVNBQkxFX1BST1hZICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9VUkxfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLWludC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLWludC5oCmluZGV4IDVmMDU5YzIuLmQxNGQ1M2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS1pbnQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxhcGktaW50LmgKQEAgLTI2LDkgKzI2LDYgQEAKICNkZWZpbmUgTUFYX1NDSEVNRV9MRU4gNDAKIAogYm9vbCBDdXJsX2lzX2Fic29sdXRlX3VybChjb25zdCBjaGFyICp1cmwsIGNoYXIgKnNjaGVtZSwgc2l6ZV90IGJ1Zmxlbik7Ci1jaGFyICpDdXJsX2NvbmNhdF91cmwoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcmVsdXJsKTsKLXNpemVfdCBDdXJsX3N0cmxlbl91cmwoY29uc3QgY2hhciAqdXJsLCBib29sIHJlbGF0aXZlKTsKLXZvaWQgQ3VybF9zdHJjcHlfdXJsKGNoYXIgKm91dHB1dCwgY29uc3QgY2hhciAqdXJsLCBib29sIHJlbGF0aXZlKTsKIAogI2lmZGVmIERFQlVHQlVJTEQKIENVUkxVY29kZSBDdXJsX3BhcnNlX3BvcnQoc3RydWN0IEN1cmxfVVJMICp1LCBjaGFyICpob3N0bmFtZSk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS5jCmluZGV4IGQwN2U0ZjUuLmFjYmZiODIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAiZXNjYXBlLmgiCiAjaW5jbHVkZSAiY3VybF9jdHlwZS5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTYzLDYgKzY0LDcgQEAKICAgY2hhciAqZnJhZ21lbnQ7CiAKICAgY2hhciAqc2NyYXRjaDsgLyogdGVtcG9yYXJ5IHNjcmF0Y2ggYXJlYSAqLworICBjaGFyICp0ZW1wcGF0aDsgLyogdGVtcG9yYXJ5IHBhdGggcG9pbnRlciAqLwogICBsb25nIHBvcnRudW07IC8qIHRoZSBudW1lcmljYWwgdmVyc2lvbiAqLwogfTsKIApAQCAtODEsNiArODMsNyBAQAogICBmcmVlKHUtPnF1ZXJ5KTsKICAgZnJlZSh1LT5mcmFnbWVudCk7CiAgIGZyZWUodS0+c2NyYXRjaCk7CisgIGZyZWUodS0+dGVtcHBhdGgpOwogfQogCiAvKiBtb3ZlIHRoZSBmdWxsIGNvbnRlbnRzIG9mIG9uZSBoYW5kbGUgb250byBhbm90aGVyIGFuZApAQCAtMjIyLDcgKzIyNSw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgIH0KLSAgKm9wdHIgPSAwOyAvKiB6ZXJvIHRlcm1pbmF0ZSBvdXRwdXQgYnVmZmVyICovCisgICpvcHRyID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgb3V0cHV0IGJ1ZmZlciAqLwogCiB9CiAKQEAgLTM1MCw3ICszNTMsNyBAQAogICBlbHNlIHsKICAgICAvKiBXZSBnb3QgYSBuZXcgYWJzb2x1dGUgcGF0aCBmb3IgdGhpcyBzZXJ2ZXIgKi8KIAotICAgIGlmKChyZWx1cmxbMF0gPT0gJy8nKSAmJiAocmVsdXJsWzFdID09ICcvJykpIHsKKyAgICBpZihyZWx1cmxbMV0gPT0gJy8nKSB7CiAgICAgICAvKiB0aGUgbmV3IFVSTCBzdGFydHMgd2l0aCAvLywganVzdCBrZWVwIHRoZSBwcm90b2NvbCBwYXJ0IGZyb20gdGhlCiAgICAgICAgICBvcmlnaW5hbCBvbmUgKi8KICAgICAgICpwcm90c2VwID0gMDsKQEAgLTQyNSw3ICs0MjgsNiBAQAogICoKICAqLwogc3RhdGljIENVUkxVY29kZSBwYXJzZV9ob3N0bmFtZV9sb2dpbihzdHJ1Y3QgQ3VybF9VUkwgKnUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewpAQCAtNDM0LDYgKzQzNiw3IEBACiAgIGNoYXIgKnVzZXJwID0gTlVMTDsKICAgY2hhciAqcGFzc3dkcCA9IE5VTEw7CiAgIGNoYXIgKm9wdGlvbnNwID0gTlVMTDsKKyAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqaCA9IE5VTEw7CiAKICAgLyogQXQgdGhpcyBwb2ludCwgd2UncmUgaG9waW5nIGFsbCB0aGUgb3RoZXIgc3BlY2lhbCBjYXNlcyBoYXZlCiAgICAqIGJlZW4gdGFrZW4gY2FyZSBvZiwgc28gY29ubi0+aG9zdC5uYW1lIGlzIGF0IG1vc3QKQEAgLTQ1Myw2ICs0NTYsMTAgQEAKICAgICogZnRwOi8vdXNlcjpwYXNzd29yZEBmdHAubXkuc2l0ZTo4MDIxL1JFQURNRSAqLwogICAqaG9zdG5hbWUgPSArK3B0cjsKIAorICAvKiBpZiB0aGlzIGlzIGEga25vd24gc2NoZW1lLCBnZXQgc29tZSBkZXRhaWxzICovCisgIGlmKHUtPnNjaGVtZSkKKyAgICBoID0gQ3VybF9idWlsdGluX3NjaGVtZSh1LT5zY2hlbWUpOworCiAgIC8qIFdlIGNvdWxkIHVzZSB0aGUgbG9naW4gaW5mb3JtYXRpb24gaW4gdGhlIFVSTCBzbyBleHRyYWN0IGl0LiBPbmx5IHBhcnNlCiAgICAgIG9wdGlvbnMgaWYgdGhlIGhhbmRsZXIgc2F5cyB3ZSBzaG91bGQuIE5vdGUgdGhhdCAnaCcgbWlnaHQgYmUgTlVMTCEgKi8KICAgY2NvZGUgPSBDdXJsX3BhcnNlX2xvZ2luX2RldGFpbHMobG9naW4sIHB0ciAtIGxvZ2luIC0gMSwKQEAgLTU2OCw3ICs1NzUsNyBAQAogfQogCiAvKiBzY2FuIGZvciBieXRlIHZhbHVlcyA8IDMxIG9yIDEyNyAqLwotc3RhdGljIENVUkxVY29kZSBqdW5rc2NhbihjaGFyICpwYXJ0KQorc3RhdGljIENVUkxVY29kZSBqdW5rc2Nhbihjb25zdCBjaGFyICpwYXJ0KQogewogICBpZihwYXJ0KSB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgYmFkYnl0ZXNbXT17CkBAIC01NzcsNyArNTg0LDcgQEAKICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCiAgICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAogICAgICAgMHg3ZiwKLSAgICAgIDB4MDAgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgIDB4MDAgLyogbnVsbC10ZXJtaW5hdGUgKi8KICAgICB9OwogICAgIHNpemVfdCBuID0gc3RybGVuKHBhcnQpOwogICAgIHNpemVfdCBuZmluZSA9IHN0cmNzcG4ocGFydCwgYmFkYnl0ZXMpOwpAQCAtNTkxLDIwICs1OTgsMjYgQEAKIAogc3RhdGljIENVUkxVY29kZSBob3N0bmFtZV9jaGVjayhzdHJ1Y3QgQ3VybF9VUkwgKnUsIGNoYXIgKmhvc3RuYW1lKQogewotICBjb25zdCBjaGFyICpsID0gTlVMTDsgLyogYWNjZXB0ZWQgY2hhcmFjdGVycyAqLwogICBzaXplX3QgbGVuOwogICBzaXplX3QgaGxlbiA9IHN0cmxlbihob3N0bmFtZSk7CiAKICAgaWYoaG9zdG5hbWVbMF0gPT0gJ1snKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjaGFyIGRlc3RbMTZdOyAvKiBmaXRzIGEgYmluYXJ5IElQdjYgYWRkcmVzcyAqLworI2VuZGlmCisgICAgY29uc3QgY2hhciAqbCA9ICIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGOi4iOworICAgIGlmKGhsZW4gPCA0KSAvKiAnWzo6XScgaXMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIHZhbGlkIHN0cmluZyAqLworICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAgICAgaG9zdG5hbWUrKzsKLSAgICBsID0gIjAxMjM0NTY3ODlhYmNkZWZBQkNERUY6Oi4iOwogICAgIGhsZW4gLT0gMjsKLSAgfQogCi0gIGlmKGwpIHsKKyAgICBpZihob3N0bmFtZVtobGVuXSAhPSAnXScpCisgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKKwogICAgIC8qIG9ubHkgdmFsaWQgbGV0dGVycyBhcmUgb2sgKi8KICAgICBsZW4gPSBzdHJzcG4oaG9zdG5hbWUsIGwpOwogICAgIGlmKGhsZW4gIT0gbGVuKSB7CisgICAgICBobGVuID0gbGVuOwogICAgICAgaWYoaG9zdG5hbWVbbGVuXSA9PSAnJScpIHsKICAgICAgICAgLyogdGhpcyBjb3VsZCBub3cgYmUgJyVbem9uZSBpZF0nICovCiAgICAgICAgIGNoYXIgem9uZWlkWzE2XTsKQEAgLTYyOCw2ICs2NDEsMTIgQEAKICAgICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAgICAgICAvKiBob3N0bmFtZSBpcyBmaW5lICovCiAgICAgfQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgaG9zdG5hbWVbaGxlbl0gPSAwOyAvKiBlbmQgdGhlIGFkZHJlc3MgdGhlcmUgKi8KKyAgICBpZigxICE9IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgZGVzdCkpCisgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKKyAgICBob3N0bmFtZVtobGVuXSA9ICddJzsgLyogcmVzdG9yZSBlbmRpbmcgYnJhY2tldCAqLworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgLyogbGV0dGVycyBmcm9tIHRoZSBzZWNvbmQgc3RyaW5nIGlzIG5vdCBvayAqLwpAQCAtNjUzLDEwICs2NzIsOSBAQAogICBDVVJMVWNvZGUgcmVzdWx0OwogICBib29sIHVybF9oYXNfc2NoZW1lID0gRkFMU0U7CiAgIGNoYXIgc2NoZW1lYnVmW01BWF9TQ0hFTUVfTEVOICsgMV07Ci0gIGNoYXIgKnNjaGVtZXAgPSBOVUxMOworICBjb25zdCBjaGFyICpzY2hlbWVwID0gTlVMTDsKICAgc2l6ZV90IHNjaGVtZWxlbiA9IDA7CiAgIHNpemVfdCB1cmxsZW47Ci0gIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmggPSBOVUxMOwogCiAgIGlmKCF1cmwpCiAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CkBAIC03NzUsNiArNzkzLDcgQEAKIAogICAgICAgaWYoanVua3NjYW4oc2NoZW1lcCkpCiAgICAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOworCiAgICAgfQogICAgIGVsc2UgewogICAgICAgLyogbm8gc2NoZW1lISAqLwpAQCAtNzgyLDcgKzgwMSw3IEBACiAgICAgICBpZighKGZsYWdzICYgKENVUkxVX0RFRkFVTFRfU0NIRU1FfENVUkxVX0dVRVNTX1NDSEVNRSkpKQogICAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKICAgICAgIGlmKGZsYWdzICYgQ1VSTFVfREVGQVVMVF9TQ0hFTUUpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSBERUZBVUxUX1NDSEVNRTsKKyAgICAgICAgc2NoZW1lcCA9IERFRkFVTFRfU0NIRU1FOwogCiAgICAgICAvKgogICAgICAgICogVGhlIFVSTCB3YXMgYmFkbHkgZm9ybWF0dGVkLCBsZXQncyB0cnkgd2l0aG91dCBzY2hlbWUgc3BlY2lmaWVkLgpAQCAtNzk1LDc0ICs4MTQsODMgQEAKICAgICAgIHArKzsKIAogICAgIGxlbiA9IHAgLSBob3N0cDsKLSAgICBpZighbGVuKQotICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7Ci0KLSAgICBtZW1jcHkoaG9zdG5hbWUsIGhvc3RwLCBsZW4pOwotICAgIGhvc3RuYW1lW2xlbl0gPSAwOwotCi0gICAgaWYoKGZsYWdzICYgQ1VSTFVfR1VFU1NfU0NIRU1FKSAmJiAhc2NoZW1lcCkgewotICAgICAgLyogbGVnYWN5IGN1cmwtc3R5bGUgZ3Vlc3MgYmFzZWQgb24gaG9zdCBuYW1lICovCi0gICAgICBpZihjaGVja3ByZWZpeCgiZnRwLiIsIGhvc3RuYW1lKSkKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopImZ0cCI7Ci0gICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJkaWN0LiIsIGhvc3RuYW1lKSkKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopImRpY3QiOwotICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgibGRhcC4iLCBob3N0bmFtZSkpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJsZGFwIjsKLSAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImltYXAuIiwgaG9zdG5hbWUpKQotICAgICAgICBzY2hlbWVwID0gKGNoYXIgKikiaW1hcCI7Ci0gICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJzbXRwLiIsIGhvc3RuYW1lKSkKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopInNtdHAiOwotICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgicG9wMy4iLCBob3N0bmFtZSkpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJwb3AzIjsKLSAgICAgIGVsc2UKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopImh0dHAiOworICAgIGlmKGxlbikgeworICAgICAgbWVtY3B5KGhvc3RuYW1lLCBob3N0cCwgbGVuKTsKKyAgICAgIGhvc3RuYW1lW2xlbl0gPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKCEoZmxhZ3MgJiBDVVJMVV9OT19BVVRIT1JJVFkpKQorICAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKICAgICB9CiAKICAgICBsZW4gPSBzdHJsZW4ocCk7CiAgICAgbWVtY3B5KHBhdGgsIHAsIGxlbik7CiAgICAgcGF0aFtsZW5dID0gMDsKIAotICAgIHUtPnNjaGVtZSA9IHN0cmR1cChzY2hlbWVwKTsKLSAgICBpZighdS0+c2NoZW1lKQotICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworICAgIGlmKHNjaGVtZXApIHsKKyAgICAgIHUtPnNjaGVtZSA9IHN0cmR1cChzY2hlbWVwKTsKKyAgICAgIGlmKCF1LT5zY2hlbWUpCisgICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKyAgICB9CiAgIH0KIAotICAvKiBpZiB0aGlzIGlzIGEga25vd24gc2NoZW1lLCBnZXQgc29tZSBkZXRhaWxzICovCi0gIGggPSBDdXJsX2J1aWx0aW5fc2NoZW1lKHUtPnNjaGVtZSk7Ci0KICAgaWYoanVua3NjYW4ocGF0aCkpCiAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAKLSAgcXVlcnkgPSBzdHJjaHIocGF0aCwgJz8nKTsKLSAgaWYocXVlcnkpCi0gICAgKnF1ZXJ5KysgPSAwOwotCi0gIGZyYWdtZW50ID0gc3RyY2hyKHF1ZXJ5P3F1ZXJ5OnBhdGgsICcjJyk7Ci0gIGlmKGZyYWdtZW50KQotICAgICpmcmFnbWVudCsrID0gMDsKLQotICBpZighcGF0aFswXSkKLSAgICAvKiBpZiB0aGVyZSdzIG5vIHBhdGggc2V0LCB1bnNldCAqLwotICAgIHBhdGggPSBOVUxMOwotICBlbHNlIGlmKCEoZmxhZ3MgJiBDVVJMVV9QQVRIX0FTX0lTKSkgewotICAgIC8qIHNhbml0aXNlIHBhdGhzIGFuZCByZW1vdmUgLi4vIGFuZCAuLyBzZXF1ZW5jZXMgYWNjb3JkaW5nIHRvIFJGQzM5ODYgKi8KLSAgICBjaGFyICpuZXdwID0gQ3VybF9kZWRvdGRvdGlmeShwYXRoKTsKKyAgaWYoKGZsYWdzICYgQ1VSTFVfVVJMRU5DT0RFKSAmJiBwYXRoWzBdKSB7CisgICAgLyogd29yc3QgY2FzZSBvdXRwdXQgbGVuZ3RoIGlzIDN4IHRoZSBvcmlnaW5hbCEgKi8KKyAgICBjaGFyICpuZXdwID0gbWFsbG9jKHN0cmxlbihwYXRoKSAqIDMpOwogICAgIGlmKCFuZXdwKQogICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOwotCi0gICAgaWYoc3RyY21wKG5ld3AsIHBhdGgpKSB7Ci0gICAgICAvKiBpZiB3ZSBnb3QgYSBuZXcgdmVyc2lvbiAqLwotICAgICAgcGF0aCA9IG5ld3A7Ci0gICAgICBwYXRoX2FsbG9jZWQgPSBUUlVFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmcmVlKG5ld3ApOworICAgIHBhdGhfYWxsb2NlZCA9IFRSVUU7CisgICAgc3RyY3B5X3VybChuZXdwLCBwYXRoLCBUUlVFKTsgLyogY29uc2lkZXIgaXQgcmVsYXRpdmUgKi8KKyAgICB1LT50ZW1wcGF0aCA9IHBhdGggPSBuZXdwOwogICB9Ci0gIGlmKHBhdGgpIHsKKworICBmcmFnbWVudCA9IHN0cmNocihwYXRoLCAnIycpOworICBpZihmcmFnbWVudCkgeworICAgICpmcmFnbWVudCsrID0gMDsKKyAgICBpZihmcmFnbWVudFswXSkgeworICAgICAgdS0+ZnJhZ21lbnQgPSBzdHJkdXAoZnJhZ21lbnQpOworICAgICAgaWYoIXUtPmZyYWdtZW50KQorICAgICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICB9CisKKyAgcXVlcnkgPSBzdHJjaHIocGF0aCwgJz8nKTsKKyAgaWYocXVlcnkpIHsKKyAgICAqcXVlcnkrKyA9IDA7CisgICAgLyogZG9uZSBldmVuIGlmIHRoZSBxdWVyeSBwYXJ0IGlzIGEgYmxhbmsgc3RyaW5nICovCisgICAgdS0+cXVlcnkgPSBzdHJkdXAocXVlcnkpOworICAgIGlmKCF1LT5xdWVyeSkKKyAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIGlmKCFwYXRoWzBdKQorICAgIC8qIGlmIHRoZXJlJ3Mgbm8gcGF0aCBsZWZ0IHNldCwgdW5zZXQgKi8KKyAgICBwYXRoID0gTlVMTDsKKyAgZWxzZSB7CisgICAgaWYoIShmbGFncyAmIENVUkxVX1BBVEhfQVNfSVMpKSB7CisgICAgICAvKiByZW1vdmUgLi4vIGFuZCAuLyBzZXF1ZW5jZXMgYWNjb3JkaW5nIHRvIFJGQzM5ODYgKi8KKyAgICAgIGNoYXIgKm5ld3AgPSBDdXJsX2RlZG90ZG90aWZ5KHBhdGgpOworICAgICAgaWYoIW5ld3ApCisgICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKworICAgICAgaWYoc3RyY21wKG5ld3AsIHBhdGgpKSB7CisgICAgICAgIC8qIGlmIHdlIGdvdCBhIG5ldyB2ZXJzaW9uICovCisgICAgICAgIGlmKHBhdGhfYWxsb2NlZCkKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHUtPnRlbXBwYXRoKTsKKyAgICAgICAgdS0+dGVtcHBhdGggPSBwYXRoID0gbmV3cDsKKyAgICAgICAgcGF0aF9hbGxvY2VkID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZnJlZShuZXdwKTsKKyAgICB9CisKICAgICB1LT5wYXRoID0gcGF0aF9hbGxvY2VkP3BhdGg6c3RyZHVwKHBhdGgpOwogICAgIGlmKCF1LT5wYXRoKQogICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworICAgIHUtPnRlbXBwYXRoID0gTlVMTDsgLyogdXNlZCBub3cgKi8KICAgfQogCiAgIGlmKGhvc3RuYW1lKSB7CkBAIC04NzIsNyArOTAwLDcgQEAKICAgICBpZihqdW5rc2Nhbihob3N0bmFtZSkpCiAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKIAotICAgIHJlc3VsdCA9IHBhcnNlX2hvc3RuYW1lX2xvZ2luKHUsIGgsICZob3N0bmFtZSwgZmxhZ3MpOworICAgIHJlc3VsdCA9IHBhcnNlX2hvc3RuYW1lX2xvZ2luKHUsICZob3N0bmFtZSwgZmxhZ3MpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTg4MCwyOCArOTA4LDQ0IEBACiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdCA9IGhvc3RuYW1lX2NoZWNrKHUsIGhvc3RuYW1lKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmKDAgPT0gc3RybGVuKGhvc3RuYW1lKSAmJiAoZmxhZ3MgJiBDVVJMVV9OT19BVVRIT1JJVFkpKSB7CisgICAgICAvKiBTa2lwIGhvc3RuYW1lIGNoZWNrLCBpdCdzIGFsbG93ZWQgdG8gYmUgZW1wdHkuICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVzdWx0ID0gaG9zdG5hbWVfY2hlY2sodSwgaG9zdG5hbWUpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAogICAgIHUtPmhvc3QgPSBzdHJkdXAoaG9zdG5hbWUpOwogICAgIGlmKCF1LT5ob3N0KQogICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworCisgICAgaWYoKGZsYWdzICYgQ1VSTFVfR1VFU1NfU0NIRU1FKSAmJiAhc2NoZW1lcCkgeworICAgICAgLyogbGVnYWN5IGN1cmwtc3R5bGUgZ3Vlc3MgYmFzZWQgb24gaG9zdCBuYW1lICovCisgICAgICBpZihjaGVja3ByZWZpeCgiZnRwLiIsIGhvc3RuYW1lKSkKKyAgICAgICAgc2NoZW1lcCA9ICJmdHAiOworICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiZGljdC4iLCBob3N0bmFtZSkpCisgICAgICAgIHNjaGVtZXAgPSAiZGljdCI7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJsZGFwLiIsIGhvc3RuYW1lKSkKKyAgICAgICAgc2NoZW1lcCA9ICJsZGFwIjsKKyAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImltYXAuIiwgaG9zdG5hbWUpKQorICAgICAgICBzY2hlbWVwID0gImltYXAiOworICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgic210cC4iLCBob3N0bmFtZSkpCisgICAgICAgIHNjaGVtZXAgPSAic210cCI7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJwb3AzLiIsIGhvc3RuYW1lKSkKKyAgICAgICAgc2NoZW1lcCA9ICJwb3AzIjsKKyAgICAgIGVsc2UKKyAgICAgICAgc2NoZW1lcCA9ICJodHRwIjsKKworICAgICAgdS0+c2NoZW1lID0gc3RyZHVwKHNjaGVtZXApOworICAgICAgaWYoIXUtPnNjaGVtZSkKKyAgICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KICAgfQogCi0gIGlmKHF1ZXJ5KSB7Ci0gICAgdS0+cXVlcnkgPSBzdHJkdXAocXVlcnkpOwotICAgIGlmKCF1LT5xdWVyeSkKLSAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKLSAgfQotICBpZihmcmFnbWVudCAmJiBmcmFnbWVudFswXSkgewotICAgIHUtPmZyYWdtZW50ID0gc3RyZHVwKGZyYWdtZW50KTsKLSAgICBpZighdS0+ZnJhZ21lbnQpCi0gICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQotICBmcmVlKHUtPnNjcmF0Y2gpOwotICB1LT5zY3JhdGNoID0gTlVMTDsKKyAgQ3VybF9zYWZlZnJlZSh1LT5zY3JhdGNoKTsKKyAgQ3VybF9zYWZlZnJlZSh1LT50ZW1wcGF0aCk7CiAKICAgcmV0dXJuIENVUkxVRV9PSzsKIH0KQEAgLTEwNjYsMjQgKzExMTAsMjMgQEAKICAgICAgIGVsc2UKICAgICAgICAgcmV0dXJuIENVUkxVRV9OT19TQ0hFTUU7CiAKLSAgICAgIGlmKHNjaGVtZSkgewotICAgICAgICBoID0gQ3VybF9idWlsdGluX3NjaGVtZShzY2hlbWUpOwotICAgICAgICBpZighcG9ydCAmJiAoZmxhZ3MgJiBDVVJMVV9ERUZBVUxUX1BPUlQpKSB7Ci0gICAgICAgICAgLyogdGhlcmUncyBubyBzdG9yZWQgcG9ydCBudW1iZXIsIGJ1dCBhc2tlZCB0byBkZWxpdmVyCi0gICAgICAgICAgICAgYSBkZWZhdWx0IG9uZSBmb3IgdGhlIHNjaGVtZSAqLwotICAgICAgICAgIGlmKGgpIHsKLSAgICAgICAgICAgIG1zbnByaW50Zihwb3J0YnVmLCBzaXplb2YocG9ydGJ1ZiksICIlbGQiLCBoLT5kZWZwb3J0KTsKLSAgICAgICAgICAgIHBvcnQgPSBwb3J0YnVmOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHBvcnQpIHsKLSAgICAgICAgICAvKiB0aGVyZSBpcyBhIHN0b3JlZCBwb3J0IG51bWJlciwgYnV0IGFza2VkIHRvIGluaGliaXQgaWYgaXQgbWF0Y2hlcwotICAgICAgICAgICAgIHRoZSBkZWZhdWx0IG9uZSBmb3IgdGhlIHNjaGVtZSAqLwotICAgICAgICAgIGlmKGggJiYgKGgtPmRlZnBvcnQgPT0gdS0+cG9ydG51bSkgJiYKLSAgICAgICAgICAgICAoZmxhZ3MgJiBDVVJMVV9OT19ERUZBVUxUX1BPUlQpKQotICAgICAgICAgICAgcG9ydCA9IE5VTEw7CisgICAgICBoID0gQ3VybF9idWlsdGluX3NjaGVtZShzY2hlbWUpOworICAgICAgaWYoIXBvcnQgJiYgKGZsYWdzICYgQ1VSTFVfREVGQVVMVF9QT1JUKSkgeworICAgICAgICAvKiB0aGVyZSdzIG5vIHN0b3JlZCBwb3J0IG51bWJlciwgYnV0IGFza2VkIHRvIGRlbGl2ZXIKKyAgICAgICAgICAgYSBkZWZhdWx0IG9uZSBmb3IgdGhlIHNjaGVtZSAqLworICAgICAgICBpZihoKSB7CisgICAgICAgICAgbXNucHJpbnRmKHBvcnRidWYsIHNpemVvZihwb3J0YnVmKSwgIiVsZCIsIGgtPmRlZnBvcnQpOworICAgICAgICAgIHBvcnQgPSBwb3J0YnVmOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBlbHNlIGlmKHBvcnQpIHsKKyAgICAgICAgLyogdGhlcmUgaXMgYSBzdG9yZWQgcG9ydCBudW1iZXIsIGJ1dCBhc2tlZCB0byBpbmhpYml0IGlmIGl0IG1hdGNoZXMKKyAgICAgICAgICAgdGhlIGRlZmF1bHQgb25lIGZvciB0aGUgc2NoZW1lICovCisgICAgICAgIGlmKGggJiYgKGgtPmRlZnBvcnQgPT0gdS0+cG9ydG51bSkgJiYKKyAgICAgICAgICAgKGZsYWdzICYgQ1VSTFVfTk9fREVGQVVMVF9QT1JUKSkKKyAgICAgICAgICBwb3J0ID0gTlVMTDsKKyAgICAgIH0KKwogICAgICAgaWYoaCAmJiAhKGgtPmZsYWdzICYgUFJPVE9QVF9VUkxPUFRJT05TKSkKICAgICAgICAgb3B0aW9ucyA9IE5VTEw7CiAKQEAgLTExNDIsNyArMTE4NSwxMCBAQAogICAgIGlmKHVybGRlY29kZSkgewogICAgICAgY2hhciAqZGVjb2RlZDsKICAgICAgIHNpemVfdCBkbGVuOwotICAgICAgQ1VSTGNvZGUgcmVzID0gQ3VybF91cmxkZWNvZGUoTlVMTCwgKnBhcnQsIDAsICZkZWNvZGVkLCAmZGxlbiwgVFJVRSk7CisgICAgICAvKiB0aGlzIHVuY29uZGl0aW9uYWwgcmVqZWN0aW9uIG9mIGNvbnRyb2wgYnl0ZXMgaXMgZG9jdW1lbnRlZAorICAgICAgICAgQVBJIGJlaGF2aW9yICovCisgICAgICBDVVJMY29kZSByZXMgPSBDdXJsX3VybGRlY29kZShOVUxMLCAqcGFydCwgMCwgJmRlY29kZWQsICZkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX0NUUkwpOwogICAgICAgZnJlZSgqcGFydCk7CiAgICAgICBpZihyZXMpIHsKICAgICAgICAgKnBhcnQgPSBOVUxMOwpAQCAtMTMzMSw3ICsxMzc3LDggQEAKICAgZGVmYXVsdDoKICAgICByZXR1cm4gQ1VSTFVFX1VOS05PV05fUEFSVDsKICAgfQotICBpZihzdG9yZXApIHsKKyAgREVCVUdBU1NFUlQoc3RvcmVwKTsKKyAgewogICAgIGNvbnN0IGNoYXIgKm5ld3AgPSBwYXJ0OwogICAgIHNpemVfdCBuYWxsb2MgPSBzdHJsZW4ocGFydCk7CiAKQEAgLTEzNTEsNyArMTM5OCw3IEBACiAgICAgICAgIGkgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXBhcnQ7CiAgICAgICAgIGZvcihvID0gZW5jOyAqaTsgKytvLCArK2kpCiAgICAgICAgICAgKm8gPSAoKmkgPT0gJyAnKSA/ICcrJyA6ICppOwotICAgICAgICAqbyA9IDA7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgICAgICpvID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgKi8KICAgICAgICAgcGFydCA9IHN0cmR1cChlbmMpOwogICAgICAgICBpZighcGFydCkgewogICAgICAgICAgIGZyZWUoZW5jKTsKQEAgLTEzNzUsNyArMTQyMiw3IEBACiAgICAgICAgICAgbyArPSAzOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICAqbyA9IDA7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgICAqbyA9IDA7IC8qIG51bGwtdGVybWluYXRlICovCiAgICAgICBuZXdwID0gZW5jOwogICAgICAgaWYoZnJlZV9wYXJ0KQogICAgICAgICBmcmVlKChjaGFyICopcGFydCk7CkBAIC0xNDIzLDkgKzE0NzAsMTQgQEAKICAgICB9CiAKICAgICBpZih3aGF0ID09IENVUkxVUEFSVF9IT1NUKSB7Ci0gICAgICBpZihob3N0bmFtZV9jaGVjayh1LCAoY2hhciAqKW5ld3ApKSB7Ci0gICAgICAgIGZyZWUoKGNoYXIgKiluZXdwKTsKLSAgICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CisgICAgICBpZigwID09IHN0cmxlbihuZXdwKSAmJiAoZmxhZ3MgJiBDVVJMVV9OT19BVVRIT1JJVFkpKSB7CisgICAgICAgIC8qIFNraXAgaG9zdG5hbWUgY2hlY2ssIGl0J3MgYWxsb3dlZCB0byBiZSBlbXB0eS4gKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihob3N0bmFtZV9jaGVjayh1LCAoY2hhciAqKW5ld3ApKSB7CisgICAgICAgICAgZnJlZSgoY2hhciAqKW5ld3ApOworICAgICAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxkYXRhLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxkYXRhLmgKaW5kZXggZDc1OTU5Mi4uZjgwYTAyZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsZGF0YS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGRhdGEuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDksNiArNDksNyBAQAogI2RlZmluZSBQT1JUX1JUTVBUIFBPUlRfSFRUUAogI2RlZmluZSBQT1JUX1JUTVBTIFBPUlRfSFRUUFMKICNkZWZpbmUgUE9SVF9HT1BIRVIgNzAKKyNkZWZpbmUgUE9SVF9NUVRUIDE4ODMKIAogI2RlZmluZSBESUNUX01BVENIICIvTUFUQ0g6IgogI2RlZmluZSBESUNUX01BVENIMiAiL006IgpAQCAtNjgsNiArNjksNyBAQAogI2RlZmluZSBQUk9UT19GQU1JTFlfUE9QMyAoQ1VSTFBST1RPX1BPUDN8Q1VSTFBST1RPX1BPUDNTKQogI2RlZmluZSBQUk9UT19GQU1JTFlfU01CICAoQ1VSTFBST1RPX1NNQnxDVVJMUFJPVE9fU01CUykKICNkZWZpbmUgUFJPVE9fRkFNSUxZX1NNVFAgKENVUkxQUk9UT19TTVRQfENVUkxQUk9UT19TTVRQUykKKyNkZWZpbmUgUFJPVE9fRkFNSUxZX1NTSCAgKENVUkxQUk9UT19TQ1B8Q1VSTFBST1RPX1NGVFApCiAKICNkZWZpbmUgREVGQVVMVF9DT05OQ0FDSEVfU0laRSA1CiAKQEAgLTc5LDcgKzgxLDcgQEAKICovCiAjZGVmaW5lIFJFU1BfVElNRU9VVCAoMTIwKjEwMDApCiAKLS8qIE1heCBzdHJpbmcgaW50cHV0IGxlbmd0aCBpcyBhIHByZWNhdXRpb24gYWdhaW5zdCBhYnVzZSBhbmQgdG8gZGV0ZWN0IGp1bmsKKy8qIE1heCBzdHJpbmcgaW5wdXQgbGVuZ3RoIGlzIGEgcHJlY2F1dGlvbiBhZ2FpbnN0IGFidXNlIGFuZCB0byBkZXRlY3QganVuawogICAgaW5wdXQgZWFzaWVyIGFuZCBiZXR0ZXIuICovCiAjZGVmaW5lIENVUkxfTUFYX0lOUFVUX0xFTkdUSCA4MDAwMDAwCiAKQEAgLTEwMiw2ICsxMDQsNyBAQAogI2luY2x1ZGUgImhvc3RpcC5oIgogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJzcGxheS5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgogCiAvKiByZXR1cm4gdGhlIGNvdW50IG9mIGJ5dGVzIHNlbnQsIG9yIC0xIG9uIGVycm9yICovCiB0eXBlZGVmIHNzaXplX3QgKEN1cmxfc2VuZCkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KQEAgLTEyMywxMiArMTI2LDE0IEBACiAjaW5jbHVkZSAic210cC5oIgogI2luY2x1ZGUgImZ0cC5oIgogI2luY2x1ZGUgImZpbGUuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgogI2luY2x1ZGUgImh0dHAuaCIKICNpbmNsdWRlICJydHNwLmgiCiAjaW5jbHVkZSAic21iLmgiCisjaW5jbHVkZSAibXF0dC5oIgogI2luY2x1ZGUgIndpbGRjYXJkLmgiCiAjaW5jbHVkZSAibXVsdGloYW5kbGUuaCIKKyNpbmNsdWRlICJxdWljLmgiCiAKICNpZmRlZiBIQVZFX0dTU0FQSQogIyBpZmRlZiBIQVZFX0dTU0dOVQpAQCAtMTQ4LDE2ICsxNTMsMTggQEAKICNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KICNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfSCAqLwogCi0vKiBJbml0aWFsIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBzdG9yZSBoZWFkZXJzIGluLCBpdCdsbCBiZSBlbmxhcmdlZCBpbiBjYXNlCi0gICBvZiBuZWVkLiAqLwotI2RlZmluZSBIRUFERVJTSVpFIDI1NgotCiAjZGVmaW5lIENVUkxFQVNZX01BR0lDX05VTUJFUiAweGMwZGVkYmFkVQogI2RlZmluZSBHT09EX0VBU1lfSEFORExFKHgpIFwKICAgKCh4KSAmJiAoKHgpLT5tYWdpYyA9PSBDVVJMRUFTWV9NQUdJQ19OVU1CRVIpKQogCiAvKiB0aGUgdHlwZSB3ZSB1c2UgZm9yIHN0b3JpbmcgYSBzaW5nbGUgYm9vbGVhbiBiaXQgKi8KKyNpZmRlZiBfTVNDX1ZFUgordHlwZWRlZiBib29sIGJpdDsKKyNkZWZpbmUgQklUKHgpIGJvb2wgeAorI2Vsc2UKIHR5cGVkZWYgdW5zaWduZWQgaW50IGJpdDsKKyNkZWZpbmUgQklUKHgpIGJpdCB4OjEKKyNlbmRpZgogCiAjaWZkZWYgSEFWRV9HU1NBUEkKIC8qIFR5cGVzIG5lZWRlZCBmb3Iga3JiNS1mdHAgY29ubmVjdGlvbnMgKi8KQEAgLTE2NSw3ICsxNzIsNyBAQAogICB2b2lkICpkYXRhOwogICBzaXplX3Qgc2l6ZTsKICAgc2l6ZV90IGluZGV4OwotICBiaXQgZW9mX2ZsYWc6MTsKKyAgQklUKGVvZl9mbGFnKTsKIH07CiAKIGVudW0gcHJvdGVjdGlvbl9sZXZlbCB7CkBAIC0yMDgsNyArMjE1LDcgQEAKICNpZiBkZWZpbmVkKFVTRV9TU0wpCiAgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kOwogI2VuZGlmCi0gIGJpdCB1c2U6MTsKKyAgQklUKHVzZSk7CiB9OwogCiBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnIHsKQEAgLTIyMSwxMCArMjI4LDEyIEBACiAgIGNoYXIgKmVnZHNvY2tldDsgICAgICAgLyogcGF0aCB0byBmaWxlIGNvbnRhaW5pbmcgdGhlIEVHRCBkYWVtb24gc29ja2V0ICovCiAgIGNoYXIgKmNpcGhlcl9saXN0OyAgICAgLyogbGlzdCBvZiBjaXBoZXJzIHRvIHVzZSAqLwogICBjaGFyICpjaXBoZXJfbGlzdDEzOyAgIC8qIGxpc3Qgb2YgVExTIDEuMyBjaXBoZXIgc3VpdGVzIHRvIHVzZSAqLwotICBiaXQgdmVyaWZ5cGVlcjoxOyAgICAgIC8qIHNldCBUUlVFIGlmIHRoaXMgaXMgZGVzaXJlZCAqLwotICBiaXQgdmVyaWZ5aG9zdDoxOyAgICAgIC8qIHNldCBUUlVFIGlmIENOL1NBTiBtdXN0IG1hdGNoIGhvc3RuYW1lICovCi0gIGJpdCB2ZXJpZnlzdGF0dXM6MTsgICAgLyogc2V0IFRSVUUgaWYgY2VydGlmaWNhdGUgc3RhdHVzIG11c3QgYmUgY2hlY2tlZCAqLwotICBiaXQgc2Vzc2lvbmlkOjE7ICAgICAgIC8qIGNhY2hlIHNlc3Npb24gSURzIG9yIG5vdCAqLworICBjaGFyICpwaW5uZWRfa2V5OworICBzdHJ1Y3QgY3VybF9ibG9iICpjZXJ0X2Jsb2I7CisgIEJJVCh2ZXJpZnlwZWVyKTsgICAgICAgLyogc2V0IFRSVUUgaWYgdGhpcyBpcyBkZXNpcmVkICovCisgIEJJVCh2ZXJpZnlob3N0KTsgICAgICAgLyogc2V0IFRSVUUgaWYgQ04vU0FOIG11c3QgbWF0Y2ggaG9zdG5hbWUgKi8KKyAgQklUKHZlcmlmeXN0YXR1cyk7ICAgICAvKiBzZXQgVFJVRSBpZiBjZXJ0aWZpY2F0ZSBzdGF0dXMgbXVzdCBiZSBjaGVja2VkICovCisgIEJJVChzZXNzaW9uaWQpOyAgICAgICAgLyogY2FjaGUgc2Vzc2lvbiBJRHMgb3Igbm90ICovCiB9OwogCiBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHsKQEAgLTIzMiwxMSArMjQxLDE0IEBACiAgIGxvbmcgY2VydHZlcmlmeXJlc3VsdDsgLyogcmVzdWx0IGZyb20gdGhlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAqLwogICBjaGFyICpDUkxmaWxlOyAgIC8qIENSTCB0byBjaGVjayBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uICovCiAgIGNoYXIgKmlzc3VlcmNlcnQ7Lyogb3B0aW9uYWwgaXNzdWVyIGNlcnRpZmljYXRlIGZpbGVuYW1lICovCisgIHN0cnVjdCBjdXJsX2Jsb2IgKmlzc3VlcmNlcnRfYmxvYjsKICAgY3VybF9zc2xfY3R4X2NhbGxiYWNrIGZzc2xjdHg7IC8qIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgc3NsIGN0eCAqLwogICB2b2lkICpmc3NsY3R4cDsgICAgICAgIC8qIHBhcmFtZXRlciBmb3IgY2FsbCBiYWNrICovCiAgIGNoYXIgKmNlcnQ7IC8qIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUgKi8KKyAgc3RydWN0IGN1cmxfYmxvYiAqY2VydF9ibG9iOwogICBjaGFyICpjZXJ0X3R5cGU7IC8qIGZvcm1hdCBmb3IgY2VydGlmaWNhdGUgKGRlZmF1bHQ6IFBFTSkqLwogICBjaGFyICprZXk7IC8qIHByaXZhdGUga2V5IGZpbGUgbmFtZSAqLworICBzdHJ1Y3QgY3VybF9ibG9iICprZXlfYmxvYjsKICAgY2hhciAqa2V5X3R5cGU7IC8qIGZvcm1hdCBmb3IgcHJpdmF0ZSBrZXkgKGRlZmF1bHQ6IFBFTSkgKi8KICAgY2hhciAqa2V5X3Bhc3N3ZDsgLyogcGxhaW4gdGV4dCBwcml2YXRlIGtleSBwYXNzd29yZCAqLwogI2lmZGVmIFVTRV9UTFNfU1JQCkBAIC0yNDQsMTAgKzI1NiwxNCBAQAogICBjaGFyICpwYXNzd29yZDsgLyogVExTIHBhc3N3b3JkIChmb3IsIGUuZy4sIFNSUCkgKi8KICAgZW51bSBDVVJMX1RMU0FVVEggYXV0aHR5cGU7IC8qIFRMUyBhdXRoZW50aWNhdGlvbiB0eXBlIChkZWZhdWx0IFNSUCkgKi8KICNlbmRpZgotICBiaXQgY2VydGluZm86MTsgICAgIC8qIGdhdGhlciBsb3RzIG9mIGNlcnRpZmljYXRlIGluZm8gKi8KLSAgYml0IGZhbHNlc3RhcnQ6MTsKLSAgYml0IGVuYWJsZV9iZWFzdDoxOyAvKiBhbGxvdyB0aGlzIGZsYXcgZm9yIGludGVyb3BlcmFiaWxpdHkncyBzYWtlKi8KLSAgYml0IG5vX3Jldm9rZToxOyAgICAvKiBkaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNrcyAqLworICBCSVQoY2VydGluZm8pOyAgICAgLyogZ2F0aGVyIGxvdHMgb2YgY2VydGlmaWNhdGUgaW5mbyAqLworICBCSVQoZmFsc2VzdGFydCk7CisgIEJJVChlbmFibGVfYmVhc3QpOyAvKiBhbGxvdyB0aGlzIGZsYXcgZm9yIGludGVyb3BlcmFiaWxpdHkncyBzYWtlKi8KKyAgQklUKG5vX3Jldm9rZSk7ICAgIC8qIGRpc2FibGUgU1NMIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tzICovCisgIEJJVChub19wYXJ0aWFsY2hhaW4pOyAvKiBkb24ndCBhY2NlcHQgcGFydGlhbCBjZXJ0aWZpY2F0ZSBjaGFpbnMgKi8KKyAgQklUKHJldm9rZV9iZXN0X2VmZm9ydCk7IC8qIGlnbm9yZSBTU0wgcmV2b2NhdGlvbiBvZmZsaW5lL21pc3NpbmcgcmV2b2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBlcnJvcnMgKi8KKyAgQklUKG5hdGl2ZV9jYV9zdG9yZSk7IC8qIHVzZSB0aGUgbmF0aXZlIGNhIHN0b3JlIG9mIG9wZXJhdGluZyBzeXN0ZW0gKi8KIH07CiAKIHN0cnVjdCBzc2xfZ2VuZXJhbF9jb25maWcgewpAQCAtMjkwLDggKzMwNiw4IEBACiAgIGNoYXIgKnFvcDsKICAgY2hhciAqYWxnb3JpdGhtOwogICBpbnQgbmM7IC8qIG5vdW5jZSBjb3VudCAqLwotICBiaXQgc3RhbGU6MTsgLyogc2V0IHRydWUgZm9yIHJlLW5lZ290aWF0aW9uICovCi0gIGJpdCB1c2VyaGFzaDoxOworICBCSVQoc3RhbGUpOyAvKiBzZXQgdHJ1ZSBmb3IgcmUtbmVnb3RpYXRpb24gKi8KKyAgQklUKHVzZXJoYXNoKTsKICNlbmRpZgogfTsKIApAQCAtMzU3LDYgKzM3MywxNCBAQAogICB1bnNpZ25lZCBjaGFyIG5vbmNlWzhdOwogICB2b2lkICp0YXJnZXRfaW5mbzsgLyogVGFyZ2V0SW5mbyByZWNlaXZlZCBpbiB0aGUgbnRsbSB0eXBlLTIgbWVzc2FnZSAqLwogICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2luZm9fbGVuOworCisjaWYgZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCisgIC8qIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBTYW1iYSdzIHdpbmJpbmQgZGFlbW9uIGhlbHBlciBudGxtX2F1dGggKi8KKyAgY3VybF9zb2NrZXRfdCBudGxtX2F1dGhfaGxwcl9zb2NrZXQ7CisgIHBpZF90IG50bG1fYXV0aF9obHByX3BpZDsKKyAgY2hhciAqY2hhbGxlbmdlOyAvKiBUaGUgcmVjZWl2ZWQgYmFzZTY0IGVuY29kZWQgbnRsbSB0eXBlLTIgbWVzc2FnZSAqLworICBjaGFyICpyZXNwb25zZTsgIC8qIFRoZSBnZW5lcmF0ZWQgYmFzZTY0IG50bG0gdHlwZS0xL3R5cGUtMyBtZXNzYWdlICovCisjZW5kaWYKICNlbmRpZgogfTsKICNlbmRpZgpAQCAtMzg1LDEwICs0MDksMTAgQEAKICAgc2l6ZV90IG91dHB1dF90b2tlbl9sZW5ndGg7CiAjZW5kaWYKICNlbmRpZgotICBib29sIG5vYXV0aHBlcnNpc3Q7Ci0gIGJvb2wgaGF2ZW5vYXV0aHBlcnNpc3Q7Ci0gIGJvb2wgaGF2ZW5lZ2RhdGE7Ci0gIGJvb2wgaGF2ZW11bHRpcGxlcmVxdWVzdHM7CisgIEJJVChub2F1dGhwZXJzaXN0KTsKKyAgQklUKGhhdmVub2F1dGhwZXJzaXN0KTsKKyAgQklUKGhhdmVuZWdkYXRhKTsKKyAgQklUKGhhdmVtdWx0aXBsZXJlcXVlc3RzKTsKIH07CiAjZW5kaWYKIApAQCAtMzk3LDY4ICs0MjEsNzUgQEAKICAqIEJvb2xlYW4gdmFsdWVzIHRoYXQgY29uY2VybnMgdGhpcyBjb25uZWN0aW9uLgogICovCiBzdHJ1Y3QgQ29ubmVjdEJpdHMgewotICAvKiBhbHdheXMgbW9kaWZ5IGJpdHMuY2xvc2Ugd2l0aCB0aGUgY29ubmNsb3NlKCkgYW5kIGNvbm5rZWVwKCkgbWFjcm9zISAqLwotICBib29sIHByb3h5X3NzbF9jb25uZWN0ZWRbMl07IC8qIFRSVUUgd2hlbiBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIEhUVFBTIHByb3h5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY29tcGxldGUgKi8KICAgYm9vbCB0Y3Bjb25uZWN0WzJdOyAvKiB0aGUgVENQIGxheWVyIChvciBzaW1pbGFyKSBpcyBjb25uZWN0ZWQsIHRoaXMgaXMgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IHRpbWUgb24gdGhlIGZpcnN0IGNvbm5lY3QgZnVuY3Rpb24gY2FsbCAqLwotICBiaXQgY2xvc2U6MTsgLyogaWYgc2V0LCB3ZSBjbG9zZSB0aGUgY29ubmVjdGlvbiBhZnRlciB0aGlzIHJlcXVlc3QgKi8KLSAgYml0IHJldXNlOjE7IC8qIGlmIHNldCwgdGhpcyBpcyBhIHJlLXVzZWQgY29ubmVjdGlvbiAqLwotICBiaXQgY29ubl90b19ob3N0OjE7IC8qIGlmIHNldCwgdGhpcyBjb25uZWN0aW9uIGhhcyBhICJjb25uZWN0IHRvIGhvc3QiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdmVycmlkZXMgdGhlIGhvc3QgaW4gdGhlIFVSTCAqLwotICBiaXQgY29ubl90b19wb3J0OjE7IC8qIGlmIHNldCwgdGhpcyBjb25uZWN0aW9uIGhhcyBhICJjb25uZWN0IHRvIHBvcnQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdmVycmlkZXMgdGhlIHBvcnQgaW4gdGhlIFVSTCAocmVtb3RlIHBvcnQpICovCi0gIGJpdCBwcm94eToxOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgcHJveHkgLSBhbnkgdHlwZSAqLwotICBiaXQgaHR0cHByb3h5OjE7ICAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgaHR0cCBwcm94eSAqLwotICBiaXQgc29ja3Nwcm94eToxOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgc29ja3MgcHJveHkgKi8KLSAgYml0IHVzZXJfcGFzc3dkOjE7IC8qIGRvIHdlIHVzZSB1c2VyK3Bhc3N3b3JkIGZvciB0aGlzIGNvbm5lY3Rpb24/ICovCi0gIGJpdCBwcm94eV91c2VyX3Bhc3N3ZDoxOyAvKiB1c2VyK3Bhc3N3b3JkIGZvciB0aGUgcHJveHk/ICovCi0gIGJpdCBpcHY2X2lwOjE7IC8qIHdlIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgc2l0ZSBzcGVjaWZpZWQgd2l0aCBwdXJlIElQdjYKLSAgICAgICAgICAgICAgICAgICAgSVAgYWRkcmVzcyAqLwotICBiaXQgaXB2NjoxOyAgICAvKiB3ZSBjb21tdW5pY2F0ZSB3aXRoIGEgc2l0ZSB1c2luZyBhbiBJUHY2IGFkZHJlc3MgKi8KLSAgYml0IGRvX21vcmU6MTsgLyogdGhpcyBpcyBzZXQgVFJVRSBpZiB0aGUgLT5jdXJsX2RvX21vcmUoKSBmdW5jdGlvbiBpcwotICAgICAgICAgICAgICAgICAgICBzdXBwb3NlZCB0byBiZSBjYWxsZWQsIGFmdGVyIC0+Y3VybF9kbygpICovCi0gIGJpdCBwcm90b2Nvbm5zdGFydDoxOy8qIHRoZSBwcm90b2NvbCBsYXllciBoYXMgU1RBUlRFRCBpdHMgb3BlcmF0aW9uIGFmdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBUQ1AgbGF5ZXIgY29ubmVjdCAqLwotICBiaXQgcmV0cnk6MTsgICAgICAgICAvKiB0aGlzIGNvbm5lY3Rpb24gaXMgYWJvdXQgdG8gZ2V0IGNsb3NlZCBhbmQgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICByZS1hdHRlbXB0ZWQgYXQgYW5vdGhlciBjb25uZWN0aW9uLiAqLwotICBiaXQgdHVubmVsX3Byb3h5OjE7ICAvKiBpZiBDT05ORUNUIGlzIHVzZWQgdG8gInR1bm5lbCIgdGhyb3VnaCB0aGUgcHJveHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaW1wbGljaXQgd2hlbiBTU0wtcHJvdG9jb2xzIGFyZSB1c2VkIHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllcywgYnV0IGNhbiBhbHNvIGJlIGVuYWJsZWQgZXhwbGljaXRseSBieQotICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBzICovCi0gIGJpdCBhdXRobmVnOjE7ICAgICAgIC8qIFRSVUUgd2hlbiB0aGUgYXV0aCBwaGFzZSBoYXMgc3RhcnRlZCwgd2hpY2ggbWVhbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgYSByZXF1ZXN0IHdpdGggYW4gYXV0aCBoZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBpdCBpcyBub3QgdGhlIGZpbmFsIHJlcXVlc3QgaW4gdGhlIGF1dGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnb3RpYXRpb24uICovCi0gIGJpdCByZXdpbmRhZnRlcnNlbmQ6MTsvKiBUUlVFIHdoZW4gdGhlIHNlbmRpbmcgY291bGRuJ3QgYmUgc3RvcHBlZCBldmVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aG91Z2ggaXQgd2lsbCBiZSBkaXNjYXJkZWQuIFdoZW4gdGhlIHdob2xlIHNlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBpcyBkb25lLCB3ZSBtdXN0IGNhbGwgdGhlIGRhdGEgcmV3aW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay4gKi8KLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAotICBiaXQgZnRwX3VzZV9lcHN2OjE7ICAvKiBBcyBzZXQgd2l0aCBDVVJMT1BUX0ZUUF9VU0VfRVBTViwgYnV0IGlmIHdlIGZpbmQgb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEVQU1YgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLwotICBiaXQgZnRwX3VzZV9lcHJ0OjE7ICAvKiBBcyBzZXQgd2l0aCBDVVJMT1BUX0ZUUF9VU0VfRVBSVCwgYnV0IGlmIHdlIGZpbmQgb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEVQUlQgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLwotICBiaXQgZnRwX3VzZV9kYXRhX3NzbDoxOyAvKiBFbmFibGVkIFNTTCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgYm9vbCBwcm94eV9zc2xfY29ubmVjdGVkWzJdOyAvKiBUUlVFIHdoZW4gU1NMIGluaXRpYWxpemF0aW9uIGZvciBIVFRQUyBwcm94eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNvbXBsZXRlICovCisgIEJJVChodHRwcHJveHkpOyAgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIGh0dHAgcHJveHkgKi8KKyAgQklUKHNvY2tzcHJveHkpOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgc29ja3MgcHJveHkgKi8KKyAgQklUKHByb3h5X3VzZXJfcGFzc3dkKTsgLyogdXNlcitwYXNzd29yZCBmb3IgdGhlIHByb3h5PyAqLworICBCSVQodHVubmVsX3Byb3h5KTsgIC8qIGlmIENPTk5FQ1QgaXMgdXNlZCB0byAidHVubmVsIiB0aHJvdWdoIHRoZSBwcm94eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGltcGxpY2l0IHdoZW4gU1NMLXByb3RvY29scyBhcmUgdXNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllcywgYnV0IGNhbiBhbHNvIGJlIGVuYWJsZWQgZXhwbGljaXRseSBieQorICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHMgKi8KKyAgQklUKHByb3h5X2Nvbm5lY3RfY2xvc2VkKTsgLyogVFJVRSBpZiBhIHByb3h5IGRpc2Nvbm5lY3RlZCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIENPTk5FQ1QgcmVxdWVzdCB3aXRoIGF1dGgsIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY3VybCBzaG91bGQgcmVjb25uZWN0IGFuZCBjb250aW51ZS4gKi8KICNlbmRpZgotICBiaXQgbmV0cmM6MTsgICAgICAgICAvKiBuYW1lK3Bhc3N3b3JkIHByb3ZpZGVkIGJ5IG5ldHJjICovCi0gIGJpdCB1c2VycHdkX2luX3VybDoxOyAvKiBuYW1lK3Bhc3N3b3JkIGZvdW5kIGluIHVybCAqLwotICBiaXQgc3RyZWFtX3dhc19yZXdvdW5kOjE7IC8qIFRoZSBzdHJlYW0gd2FzIHJld291bmQgYWZ0ZXIgYSByZXF1ZXN0IHJlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0IHRoZSBlbmQgb2YgaXRzIHJlc3BvbnNlIGJ5dGUgYm91bmRhcnkgKi8KLSAgYml0IHByb3h5X2Nvbm5lY3RfY2xvc2VkOjE7IC8qIFRSVUUgaWYgYSBwcm94eSBkaXNjb25uZWN0ZWQgdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgQ09OTkVDVCByZXF1ZXN0IHdpdGggYXV0aCwgc28gdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY3VybCBzaG91bGQgcmVjb25uZWN0IGFuZCBjb250aW51ZS4gKi8KLSAgYml0IGJvdW5kOjE7IC8qIHNldCB0cnVlIGlmIGJpbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgb24gdGhpcyBzb2NrZXQvCi0gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCi0gIGJpdCB0eXBlX3NldDoxOyAgLyogdHlwZT0gd2FzIHVzZWQgaW4gdGhlIFVSTCAqLwotICBiaXQgbXVsdGlwbGV4OjE7IC8qIGNvbm5lY3Rpb24gaXMgbXVsdGlwbGV4ZWQgKi8KLSAgYml0IHRjcF9mYXN0b3BlbjoxOyAvKiB1c2UgVENQIEZhc3QgT3BlbiAqLwotICBiaXQgdGxzX2VuYWJsZV9ucG46MTsgIC8qIFRMUyBOUE4gZXh0ZW5zaW9uPyAqLwotICBiaXQgdGxzX2VuYWJsZV9hbHBuOjE7IC8qIFRMUyBBTFBOIGV4dGVuc2lvbj8gKi8KLSAgYml0IHNvY2tzcHJveHlfY29ubmVjdGluZzoxOyAvKiBjb25uZWN0aW5nIHRocm91Z2ggYSBzb2NrcyBwcm94eSAqLwotICBiaXQgY29ubmVjdF9vbmx5OjE7CisgIC8qIGFsd2F5cyBtb2RpZnkgYml0cy5jbG9zZSB3aXRoIHRoZSBjb25uY2xvc2UoKSBhbmQgY29ubmtlZXAoKSBtYWNyb3MhICovCisgIEJJVChjbG9zZSk7IC8qIGlmIHNldCwgd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhpcyByZXF1ZXN0ICovCisgIEJJVChyZXVzZSk7IC8qIGlmIHNldCwgdGhpcyBpcyBhIHJlLXVzZWQgY29ubmVjdGlvbiAqLworICBCSVQoYWx0dXNlZCk7IC8qIHRoaXMgaXMgYW4gYWx0LXN2YyAicmVkaXJlY3QiICovCisgIEJJVChjb25uX3RvX2hvc3QpOyAvKiBpZiBzZXQsIHRoaXMgY29ubmVjdGlvbiBoYXMgYSAiY29ubmVjdCB0byBob3N0IgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdmVycmlkZXMgdGhlIGhvc3QgaW4gdGhlIFVSTCAqLworICBCSVQoY29ubl90b19wb3J0KTsgLyogaWYgc2V0LCB0aGlzIGNvbm5lY3Rpb24gaGFzIGEgImNvbm5lY3QgdG8gcG9ydCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3ZlcnJpZGVzIHRoZSBwb3J0IGluIHRoZSBVUkwgKHJlbW90ZSBwb3J0KSAqLworICBCSVQocHJveHkpOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgcHJveHkgLSBhbnkgdHlwZSAqLworICBCSVQodXNlcl9wYXNzd2QpOyAvKiBkbyB3ZSB1c2UgdXNlcitwYXNzd29yZCBmb3IgdGhpcyBjb25uZWN0aW9uPyAqLworICBCSVQoaXB2Nl9pcCk7IC8qIHdlIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgc2l0ZSBzcGVjaWZpZWQgd2l0aCBwdXJlIElQdjYKKyAgICAgICAgICAgICAgICAgICBJUCBhZGRyZXNzICovCisgIEJJVChpcHY2KTsgICAgLyogd2UgY29tbXVuaWNhdGUgd2l0aCBhIHNpdGUgdXNpbmcgYW4gSVB2NiBhZGRyZXNzICovCisgIEJJVChkb19tb3JlKTsgLyogdGhpcyBpcyBzZXQgVFJVRSBpZiB0aGUgLT5jdXJsX2RvX21vcmUoKSBmdW5jdGlvbiBpcworICAgICAgICAgICAgICAgICAgIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCwgYWZ0ZXIgLT5jdXJsX2RvKCkgKi8KKyAgQklUKHByb3RvY29ubnN0YXJ0KTsvKiB0aGUgcHJvdG9jb2wgbGF5ZXIgaGFzIFNUQVJURUQgaXRzIG9wZXJhdGlvbiBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBUQ1AgbGF5ZXIgY29ubmVjdCAqLworICBCSVQocmV0cnkpOyAgICAgICAgIC8qIHRoaXMgY29ubmVjdGlvbiBpcyBhYm91dCB0byBnZXQgY2xvc2VkIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgcmUtYXR0ZW1wdGVkIGF0IGFub3RoZXIgY29ubmVjdGlvbi4gKi8KKyAgQklUKGF1dGhuZWcpOyAgICAgICAvKiBUUlVFIHdoZW4gdGhlIGF1dGggcGhhc2UgaGFzIHN0YXJ0ZWQsIHdoaWNoIG1lYW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgYSByZXF1ZXN0IHdpdGggYW4gYXV0aCBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGl0IGlzIG5vdCB0aGUgZmluYWwgcmVxdWVzdCBpbiB0aGUgYXV0aAorICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ290aWF0aW9uLiAqLworICBCSVQocmV3aW5kYWZ0ZXJzZW5kKTsvKiBUUlVFIHdoZW4gdGhlIHNlbmRpbmcgY291bGRuJ3QgYmUgc3RvcHBlZCBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRob3VnaCBpdCB3aWxsIGJlIGRpc2NhcmRlZC4gV2hlbiB0aGUgd2hvbGUgc2VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gaXMgZG9uZSwgd2UgbXVzdCBjYWxsIHRoZSBkYXRhIHJld2luZAorICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay4gKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorICBCSVQoZnRwX3VzZV9lcHN2KTsgIC8qIEFzIHNldCB3aXRoIENVUkxPUFRfRlRQX1VTRV9FUFNWLCBidXQgaWYgd2UgZmluZCBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICBFUFNWIGRvZXNuJ3Qgd29yayB3ZSBkaXNhYmxlIGl0IGZvciB0aGUgZm9ydGhjb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLworICBCSVQoZnRwX3VzZV9lcHJ0KTsgIC8qIEFzIHNldCB3aXRoIENVUkxPUFRfRlRQX1VTRV9FUFJULCBidXQgaWYgd2UgZmluZCBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICBFUFJUIGRvZXNuJ3Qgd29yayB3ZSBkaXNhYmxlIGl0IGZvciB0aGUgZm9ydGhjb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLworICBCSVQoZnRwX3VzZV9kYXRhX3NzbCk7IC8qIEVuYWJsZWQgU1NMIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uICovCisjZW5kaWYKKyAgQklUKG5ldHJjKTsgICAgICAgICAvKiBuYW1lK3Bhc3N3b3JkIHByb3ZpZGVkIGJ5IG5ldHJjICovCisgIEJJVChib3VuZCk7IC8qIHNldCB0cnVlIGlmIGJpbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgb24gdGhpcyBzb2NrZXQvCisgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgQklUKG11bHRpcGxleCk7IC8qIGNvbm5lY3Rpb24gaXMgbXVsdGlwbGV4ZWQgKi8KKyAgQklUKHRjcF9mYXN0b3Blbik7IC8qIHVzZSBUQ1AgRmFzdCBPcGVuICovCisgIEJJVCh0bHNfZW5hYmxlX25wbik7ICAvKiBUTFMgTlBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKHRsc19lbmFibGVfYWxwbik7IC8qIFRMUyBBTFBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKGNvbm5lY3Rfb25seSk7CisgIEJJVChkb2gpOworI2lmZGVmIFVTRV9VTklYX1NPQ0tFVFMKKyAgQklUKGFic3RyYWN0X3VuaXhfc29ja2V0KTsKKyNlbmRpZgorICBCSVQodGxzX3VwZ3JhZGVkKTsKKyAgQklUKHNvY2tfYWNjZXB0ZWQpOyAvKiBUUlVFIGlmIHRoZSBTRUNPTkRBUllTT0NLRVQgd2FzIGNyZWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdCgpICovCisgIEJJVChwYXJhbGxlbF9jb25uZWN0KTsgLyogc2V0IFRSVUUgd2hlbiBhIHBhcmFsbGVsIGNvbm5lY3QgYXR0ZW1wdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkIChoYXBweSBleWViYWxscykgKi8KIH07CiAKIHN0cnVjdCBob3N0bmFtZSB7CkBAIC00OTEsNyArNTIyLDcgQEAKICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnM7CiAgIGludCBzdGF0dXM7IC8qIGlmIGRvbmUgaXMgVFJVRSwgdGhpcyBpcyB0aGUgc3RhdHVzIGZyb20gdGhlIGNhbGxiYWNrICovCiAgIHZvaWQgKm9zX3NwZWNpZmljOyAgLyogJ3N0cnVjdCB0aHJlYWRfZGF0YScgZm9yIFdpbmRvd3MgKi8KLSAgYml0IGRvbmU6MTsgIC8qIHNldCBUUlVFIHdoZW4gdGhlIGxvb2t1cCBpcyBjb21wbGV0ZSAqLworICBCSVQoZG9uZSk7ICAvKiBzZXQgVFJVRSB3aGVuIHRoZSBsb29rdXAgaXMgY29tcGxldGUgKi8KIH07CiAKICNkZWZpbmUgRklSU1RTT0NLRVQgICAgIDAKQEAgLTUxOCw5ICs1NDksMjIgQEAKICAgVVBHUjEwMV9XT1JLSU5HICAgICAgICAgICAgIC8qIHRhbGtpbmcgdXBncmFkZWQgcHJvdG9jb2wgKi8KIH07CiAKLXN0cnVjdCBkb2hyZXNwb25zZSB7Ci0gIHVuc2lnbmVkIGNoYXIgKm1lbW9yeTsKLSAgc2l6ZV90IHNpemU7CitlbnVtIGRvaF9zbG90cyB7CisgIC8qIEV4cGxpY2l0IHZhbHVlcyBmb3IgZmlyc3QgdHdvIHN5bWJvbHMgc28gYXMgdG8gbWF0Y2ggaGFyZC1jb2RlZAorICAgKiBjb25zdGFudHMgaW4gZXhpc3RpbmcgY29kZQorICAgKi8KKyAgRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y0ID0gMCwgLyogbWFrZSAnVjQnIHN0YW5kIG91dCBmb3IgcmVhZGFiaWxpdHkgKi8KKyAgRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y2ID0gMSwgLyogJ1Y2JyBsaWtld2lzZSAqLworCisgIC8qIFNwYWNlIGhlcmUgZm9yIChwb3NzaWJseSBidWlsZC1zcGVjaWZpYykgYWRkaXRpb25hbCBzbG90IGRlZmluaXRpb25zICovCisKKyAgLyogZm9yIGV4YW1wbGUgKi8KKyAgLyogI2lmZGVmIFdBTlRfRE9IX0ZPT0JBUl9UWFQgKi8KKyAgLyogICBET0hfUFJPQkVfU0xPVF9GT09CQVJfVFhULCAqLworICAvKiAjZW5kaWYgKi8KKworICAvKiBBRlRFUiBhbGwgc2xvdCBkZWZpbml0aW9ucywgZXN0YWJsaXNoIGhvdyBtYW55IHdlIGhhdmUgKi8KKyAgRE9IX1BST0JFX1NMT1RTCiB9OwogCiAvKiBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggRG9IIHJlcXVlc3QgKi8KQEAgLTUyOSwxMiArNTczLDEyIEBACiAgIGludCBkbnN0eXBlOwogICB1bnNpZ25lZCBjaGFyIGRvaGJ1ZmZlcls1MTJdOwogICBzaXplX3QgZG9obGVuOwotICBzdHJ1Y3QgZG9ocmVzcG9uc2Ugc2VydmVyZG9oOworICBzdHJ1Y3QgZHluYnVmIHNlcnZlcmRvaDsKIH07CiAKIHN0cnVjdCBkb2hkYXRhIHsKICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM7Ci0gIHN0cnVjdCBkbnNwcm9iZSBwcm9iZVsyXTsKKyAgc3RydWN0IGRuc3Byb2JlIHByb2JlW0RPSF9QUk9CRV9TTE9UU107CiAgIHVuc2lnbmVkIGludCBwZW5kaW5nOyAvKiBzdGlsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyAqLwogICBjb25zdCBjaGFyICpob3N0OwogICBpbnQgcG9ydDsKQEAgLTU3MywxMiArNjE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiBhcyBib2R5ICovCiAgIGludCBoZWFkZXJsaW5lOyAgICAgICAgICAgICAgIC8qIGNvdW50cyBoZWFkZXIgbGluZXMgdG8gYmV0dGVyIHRyYWNrIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBvbmUgKi8KLSAgY2hhciAqaGJ1ZnA7ICAgICAgICAgICAgICAgICAgLyogcG9pbnRzIGF0ICplbmQqIG9mIGhlYWRlciBsaW5lICovCi0gIHNpemVfdCBoYnVmbGVuOwogICBjaGFyICpzdHI7ICAgICAgICAgICAgICAgICAgICAvKiB3aXRoaW4gYnVmICovCi0gIGNoYXIgKnN0cl9zdGFydDsgICAgICAgICAgICAgIC8qIHdpdGhpbiBidWYgKi8KLSAgY2hhciAqZW5kX3B0cjsgICAgICAgICAgICAgICAgLyogd2l0aGluIGJ1ZiAqLwotICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRoaW4gaGVhZGVyYnVmZiAqLwogICBjdXJsX29mZl90IG9mZnNldDsgICAgICAgICAgICAvKiBwb3NzaWJsZSByZXN1bWUgb2Zmc2V0IHJlYWQgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudC1SYW5nZTogaGVhZGVyICovCiAgIGludCBodHRwY29kZTsgICAgICAgICAgICAgICAgIC8qIGVycm9yIGNvZGUgZnJvbSB0aGUgJ0hUVFAvMS4/IFhYWCcgb3IKQEAgLTU4NywxMSArNjI2LDEwIEBACiAgIGVudW0gZXhwZWN0MTAwIGV4cDEwMDsgICAgICAgIC8qIGV4cGVjdCAxMDAgY29udGludWUgc3RhdGUgKi8KICAgZW51bSB1cGdyYWRlMTAxIHVwZ3IxMDE7ICAgICAgLyogMTAxIHVwZ3JhZGUgc3RhdGUgKi8KIAotICBzdHJ1Y3QgY29udGVuY193cml0ZXJfcyAqd3JpdGVyX3N0YWNrOyAgLyogQ29udGVudCB1bmVuY29kaW5nIHN0YWNrLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VlIHNlYyAzLjUsIFJGQzI2MTYuICovCisgIC8qIENvbnRlbnQgdW5lbmNvZGluZyBzdGFjay4gU2VlIHNlYyAzLjUsIFJGQzI2MTYuICovCisgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyX3N0YWNrOwogICB0aW1lX3QgdGltZW9mZG9jOwogICBsb25nIGJvZHl3cml0ZXM7Ci0gIGNoYXIgKmJ1ZjsKICAgaW50IGtlZXBvbjsKICAgY2hhciAqbG9jYXRpb247ICAgLyogVGhpcyBwb2ludHMgdG8gYW4gYWxsb2NhdGVkIHZlcnNpb24gb2YgdGhlIExvY2F0aW9uOgogICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgZGF0YSAqLwpAQCAtNjEyLDIwICs2NTAsMjAgQEAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0RPSAogICBzdHJ1Y3QgZG9oZGF0YSBkb2g7IC8qIERvSCBzcGVjaWZpYyBkYXRhIGZvciB0aGlzIHJlcXVlc3QgKi8KICNlbmRpZgotICBiaXQgaGVhZGVyOjE7ICAgICAgIC8qIGluY29taW5nIGRhdGEgaGFzIEhUVFAgaGVhZGVyICovCi0gIGJpdCBjb250ZW50X3JhbmdlOjE7IC8qIHNldCBUUlVFIGlmIENvbnRlbnQtUmFuZ2U6IHdhcyBmb3VuZCAqLwotICBiaXQgdXBsb2FkX2RvbmU6MTsgIC8qIHNldCB0byBUUlVFIHdoZW4gZG9pbmcgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZCBhbmQgd2UncmUgdXBsb2FkaW5nIHRoZSBsYXN0IGNodW5rICovCi0gIGJpdCBpZ25vcmVib2R5OjE7ICAgLyogd2UgcmVhZCBhIHJlc3BvbnNlLWJvZHkgYnV0IHdlIGlnbm9yZSBpdCEgKi8KLSAgYml0IGlnbm9yZWNsOjE7ICAgICAvKiBUaGlzIEhUVFAgcmVzcG9uc2UgaGFzIG5vIGJvZHkgc28gd2UgaWdub3JlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgKi8KLSAgYml0IGNodW5rOjE7IC8qIGlmIHNldCwgdGhpcyBpcyBhIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcgKi8KLSAgYml0IHVwbG9hZF9jaHVua3k6MTsgLyogc2V0IFRSVUUgaWYgd2UgYXJlIGRvaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdXBsb2FkICovCi0gIGJpdCBnZXRoZWFkZXI6MTsgICAgLyogVFJVRSBpZiBoZWFkZXIgcGFyc2luZyBpcyB3YW50ZWQgKi8KLSAgYml0IGZvcmJpZGNodW5rOjE7ICAvKiB1c2VkIG9ubHkgdG8gZXhwbGljaXRseSBmb3JiaWQgY2h1bmstdXBsb2FkIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHVwbG9hZCBidWZmZXJzLiBTZWUgcmVhZG1vcmVkYXRhKCkgaW4gaHR0cC5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRldGFpbHMuICovCisgIEJJVChoZWFkZXIpOyAgICAgICAvKiBpbmNvbWluZyBkYXRhIGhhcyBIVFRQIGhlYWRlciAqLworICBCSVQoY29udGVudF9yYW5nZSk7IC8qIHNldCBUUlVFIGlmIENvbnRlbnQtUmFuZ2U6IHdhcyBmb3VuZCAqLworICBCSVQodXBsb2FkX2RvbmUpOyAgLyogc2V0IHRvIFRSVUUgd2hlbiBkb2luZyBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgYW5kIHdlJ3JlIHVwbG9hZGluZyB0aGUgbGFzdCBjaHVuayAqLworICBCSVQoaWdub3JlYm9keSk7ICAgLyogd2UgcmVhZCBhIHJlc3BvbnNlLWJvZHkgYnV0IHdlIGlnbm9yZSBpdCEgKi8KKyAgQklUKGh0dHBfYm9keWxlc3MpOyAvKiBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIGJldHdlZW4gMTAwIGFuZCAxOTksCisgICAgICAgICAgICAgICAgICAgICAgICAgMjA0IG9yIDMwNCAqLworICBCSVQoY2h1bmspOyAvKiBpZiBzZXQsIHRoaXMgaXMgYSBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nICovCisgIEJJVCh1cGxvYWRfY2h1bmt5KTsgLyogc2V0IFRSVUUgaWYgd2UgYXJlIGRvaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICBvbiB1cGxvYWQgKi8KKyAgQklUKGdldGhlYWRlcik7ICAgIC8qIFRSVUUgaWYgaGVhZGVyIHBhcnNpbmcgaXMgd2FudGVkICovCisgIEJJVChmb3JiaWRjaHVuayk7ICAvKiB1c2VkIG9ubHkgdG8gZXhwbGljaXRseSBmb3JiaWQgY2h1bmstdXBsb2FkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgdXBsb2FkIGJ1ZmZlcnMuIFNlZSByZWFkbW9yZWRhdGEoKSBpbiBodHRwLmMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXRhaWxzLiAqLwogfTsKIAogLyoKQEAgLTY2MywyNyArNzAxLDIzIEBACiAgIC8qIENhbGxlZCBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgZHVyaW5nIHRoZSBQUk9UT0NPTk5FQ1QgcGhhc2UsIGFuZCBpdAogICAgICBzaG91bGQgdGhlbiByZXR1cm4gYSBwcm9wZXIgZmQgc2V0ICovCiAgIGludCAoKnByb3RvX2dldHNvY2spKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9JTkcgcGhhc2UsIGFuZCBpdCBzaG91bGQKICAgICAgdGhlbiByZXR1cm4gYSBwcm9wZXIgZmQgc2V0ICovCiAgIGludCAoKmRvaW5nX2dldHNvY2spKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9fTU9SRSBwaGFzZSwgYW5kIGl0IHNob3VsZAogICAgICB0aGVuIHJldHVybiBhIHByb3BlciBmZCBzZXQgKi8KICAgaW50ICgqZG9tb3JlX2dldHNvY2spKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9fRE9ORSwgUEVSRk9STSBhbmQKICAgICAgV0FJVFBFUkZPUk0gcGhhc2VzLCBhbmQgaXQgc2hvdWxkIHRoZW4gcmV0dXJuIGEgcHJvcGVyIGZkIHNldC4gTm90IHNldHRpbmcKICAgICAgdGhpcyB3aWxsIG1ha2UgbGliY3VybCB1c2UgdGhlIGdlbmVyaWMgZGVmYXVsdCBvbmUuICovCiAgIGludCAoKnBlcmZvcm1fZ2V0c29jaykoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogCiAgIC8qIFRoaXMgZnVuY3Rpb24gKk1BWSogYmUgc2V0IHRvIGEgcHJvdG9jb2wtZGVwZW5kZW50IGZ1bmN0aW9uIHRoYXQgaXMgcnVuCiAgICAqIGJ5IHRoZSBjdXJsX2Rpc2Nvbm5lY3QoKSwgYXMgYSBzdGVwIGluIHRoZSBkaXNjb25uZWN0aW9uLiAgSWYgdGhlIGhhbmRsZXIKQEAgLTczMyw2ICs3NjcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQIHByb3h5IGFzIEhUVFAgcHJveGllcyBtYXkga25vdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHByb3RvY29sIGFuZCBhY3QgYXMgYSBnYXRld2F5ICovCiAjZGVmaW5lIFBST1RPUFRfV0lMRENBUkQgKDE8PDEyKSAvKiBwcm90b2NvbCBzdXBwb3J0cyB3aWxkY2FyZCBtYXRjaGluZyAqLworI2RlZmluZSBQUk9UT1BUX1VTRVJQV0RDVFJMICgxPDwxMykgLyogQWxsb3cgImNvbnRyb2wgYnl0ZXMiICg8IDMyIGFzY2lpKSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBuYW1lIGFuZCBwYXNzd29yZCAqLwogCiAjZGVmaW5lIENPTk5DSEVDS19OT05FIDAgICAgICAgICAgICAgICAgIC8qIE5vIGNoZWNrcyAqLwogI2RlZmluZSBDT05OQ0hFQ0tfSVNERUFEICgxPDwwKSAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLiAqLwpAQCAtNzYzLDIzICs3OTksNTUgQEAKICAgY2hhciAqcGFzc3dkOyAgLyogcHJveHkgcGFzc3dvcmQgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KIH07CiAKLSNkZWZpbmUgQ09OTkVDVF9CVUZGRVJfU0laRSAxNjM4NAotCiAvKiBzdHJ1Y3QgZm9yIEhUVFAgQ09OTkVDVCBzdGF0ZSBkYXRhICovCiBzdHJ1Y3QgaHR0cF9jb25uZWN0X3N0YXRlIHsKLSAgY2hhciBjb25uZWN0X2J1ZmZlcltDT05ORUNUX0JVRkZFUl9TSVpFXTsKLSAgaW50IHBlcmxpbmU7IC8qIGNvdW50IGJ5dGVzIHBlciBsaW5lICovCisgIHN0cnVjdCBkeW5idWYgcmN2YnVmOwogICBpbnQga2VlcG9uOwotICBjaGFyICpsaW5lX3N0YXJ0OwotICBjaGFyICpwdHI7IC8qIHdoZXJlIHRvIHN0b3JlIG1vcmUgZGF0YSAqLwogICBjdXJsX29mZl90IGNsOyAvKiBzaXplIG9mIGNvbnRlbnQgdG8gcmVhZCBhbmQgaWdub3JlICovCiAgIGVudW0gewogICAgIFRVTk5FTF9JTklULCAgICAvKiBpbml0L2RlZmF1bHQvbm8gdHVubmVsIHN0YXRlICovCiAgICAgVFVOTkVMX0NPTk5FQ1QsIC8qIENPTk5FQ1QgaGFzIGJlZW4gc2VudCBvZmYgKi8KICAgICBUVU5ORUxfQ09NUExFVEUgLyogQ09OTkVDVCByZXNwb25zZSByZWNlaXZlZCBjb21wbGV0ZWx5ICovCiAgIH0gdHVubmVsX3N0YXRlOwotICBiaXQgY2h1bmtlZF9lbmNvZGluZzoxOwotICBiaXQgY2xvc2VfY29ubmVjdGlvbjoxOworICBCSVQoY2h1bmtlZF9lbmNvZGluZyk7CisgIEJJVChjbG9zZV9jb25uZWN0aW9uKTsKK307CisKK3N0cnVjdCBsZGFwY29ubmluZm87CisKKy8qIGZvciB0aGUgKFNPQ0tTKSBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KK2VudW0gY29ubmVjdF90IHsKKyAgQ09OTkVDVF9JTklULAorICBDT05ORUNUX1NPQ0tTX0lOSVQsIC8qIDEgKi8KKyAgQ09OTkVDVF9TT0NLU19TRU5ELCAvKiAyIHdhaXRpbmcgdG8gc2VuZCBtb3JlIGZpcnN0IGRhdGEgKi8KKyAgQ09OTkVDVF9TT0NLU19SRUFEX0lOSVQsIC8qIDMgc2V0IHVwIHJlYWQgKi8KKyAgQ09OTkVDVF9TT0NLU19SRUFELCAvKiA0IHJlYWQgc2VydmVyIHJlc3BvbnNlICovCisgIENPTk5FQ1RfR1NTQVBJX0lOSVQsIC8qIDUgKi8KKyAgQ09OTkVDVF9BVVRIX0lOSVQsIC8qIDYgc2V0dXAgb3V0Z29pbmcgYXV0aCBidWZmZXIgKi8KKyAgQ09OTkVDVF9BVVRIX1NFTkQsIC8qIDcgc2VuZCBhdXRoICovCisgIENPTk5FQ1RfQVVUSF9SRUFELCAvKiA4IHJlYWQgYXV0aCByZXNwb25zZSAqLworICBDT05ORUNUX1JFUV9JTklULCAgLyogOSBpbml0IFNPQ0tTICJyZXF1ZXN0IiAqLworICBDT05ORUNUX1JFU09MVklORywgLyogMTAgKi8KKyAgQ09OTkVDVF9SRVNPTFZFRCwgIC8qIDExICovCisgIENPTk5FQ1RfUkVTT0xWRV9SRU1PVEUsIC8qIDEyICovCisgIENPTk5FQ1RfUkVRX1NFTkQsICAvKiAxMyAqLworICBDT05ORUNUX1JFUV9TRU5ESU5HLCAvKiAxNCAqLworICBDT05ORUNUX1JFUV9SRUFELCAgLyogMTUgKi8KKyAgQ09OTkVDVF9SRVFfUkVBRF9NT1JFLCAvKiAxNiAqLworICBDT05ORUNUX0RPTkUgLyogMTcgY29ubmVjdGVkIGZpbmUgdG8gdGhlIHJlbW90ZSBvciB0aGUgU09DS1MgcHJveHkgKi8KK307CisKKyNkZWZpbmUgU09DS1NfU1RBVEUoeCkgKCgoeCkgPj0gQ09OTkVDVF9TT0NLU19JTklUKSAmJiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8IENPTk5FQ1RfRE9ORSkpCisjZGVmaW5lIFNPQ0tTX1JFUVVFU1RfQlVGU0laRSA2MDAgIC8qIHJvb20gZm9yIGxhcmdlIHVzZXIvcHcgKDI1NSBtYXggZWFjaCkgKi8KKworc3RydWN0IGNvbm5zdGF0ZSB7CisgIGVudW0gY29ubmVjdF90IHN0YXRlOworICB1bnNpZ25lZCBjaGFyIHNvY2tzcmVxW1NPQ0tTX1JFUVVFU1RfQlVGU0laRV07CisKKyAgLyogQ09OTkVDVF9TT0NLU19TRU5EICovCisgIHNzaXplX3Qgb3V0c3RhbmRpbmc7ICAvKiBzZW5kIHRoaXMgbWFueSBieXRlcyBtb3JlICovCisgIHVuc2lnbmVkIGNoYXIgKm91dHA7IC8qIHNlbmQgZnJvbSB0aGlzIHBvaW50ZXIgKi8KIH07CiAKIC8qCkBAIC03OTEsNyArODU5LDcgQEAKICAgICAgY2F1dGlvbiB0aGF0IHRoaXMgbWlnaHQgdmVyeSB3ZWxsIHZhcnkgYmV0d2VlbiBkaWZmZXJlbnQgdGltZXMgdGhpcwogICAgICBjb25uZWN0aW9uIGlzIHVzZWQhICovCiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGE7Ci0KKyAgc3RydWN0IGNvbm5zdGF0ZSBjbm5jdDsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBidW5kbGVfbm9kZTsgLyogY29ubmNhY2hlICovCiAKICAgLyogY2h1bmsgaXMgZm9yIEhUVFAgY2h1bmtlZCBlbmNvZGluZywgYnV0IGlzIGluIHRoZSBnZW5lcmFsIGNvbm5lY3RkYXRhCkBAIC04MTQsMTUgKzg4MiwxNSBAQAogCiAgIC8qICdkbnNfZW50cnknIGlzIHRoZSBwYXJ0aWN1bGFyIGhvc3Qgd2UgdXNlLiBUaGlzIHBvaW50cyB0byBhbiBlbnRyeSBpbiB0aGUKICAgICAgRE5TIGNhY2hlIGFuZCBpdCB3aWxsIG5vdCBnZXQgcHJ1bmVkIHdoaWxlIGxvY2tlZC4gSXQgZ2V0cyB1bmxvY2tlZCBpbgotICAgICBDdXJsX2RvbmUoKS4gVGhpcyBlbnRyeSB3aWxsIGJlIE5VTEwgaWYgdGhlIGNvbm5lY3Rpb24gaXMgcmUtdXNlZCBhcyB0aGVuCisgICAgIG11bHRpX2RvbmUoKS4gVGhpcyBlbnRyeSB3aWxsIGJlIE5VTEwgaWYgdGhlIGNvbm5lY3Rpb24gaXMgcmUtdXNlZCBhcyB0aGVuCiAgICAgIHRoZXJlIGlzIG5vIG5hbWUgcmVzb2x2ZSBkb25lLiAqLwogICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuc19lbnRyeTsKIAogICAvKiAnaXBfYWRkcicgaXMgdGhlIHBhcnRpY3VsYXIgSVAgd2UgY29ubmVjdGVkIHRvLiBJdCBwb2ludHMgdG8gYSBzdHJ1Y3QKICAgICAgd2l0aGluIHRoZSBETlMgY2FjaGUsIHNvIHRoaXMgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGFzIGxvbmcgYXMgdGhlIEROUwotICAgICBjYWNoZSBlbnRyeSByZW1haW5zIGxvY2tlZC4gSXQgZ2V0cyB1bmxvY2tlZCBpbiBDdXJsX2RvbmUoKSAqLwotICBDdXJsX2FkZHJpbmZvICppcF9hZGRyOwotICBDdXJsX2FkZHJpbmZvICp0ZW1wYWRkclsyXTsgLyogZm9yIGhhcHB5IGV5ZWJhbGxzICovCisgICAgIGNhY2hlIGVudHJ5IHJlbWFpbnMgbG9ja2VkLiBJdCBnZXRzIHVubG9ja2VkIGluIG11bHRpX2RvbmUoKSAqLworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqaXBfYWRkcjsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKnRlbXBhZGRyWzJdOyAvKiBmb3IgaGFwcHkgZXllYmFsbHMgKi8KIAogICAvKiAnaXBfYWRkcl9zdHInIGlzIHRoZSBpcF9hZGRyIGRhdGEgYXMgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcuCiAgICAgIEl0IHJlbWFpbnMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgdGhlIGNvbm5lY3Rpb24gZG9lcywgd2hpY2ggaXMgbG9uZ2VyIHRoYW4KQEAgLTgzMSwxNyArODk5LDI2IEBACiAKICAgdW5zaWduZWQgaW50IHNjb3BlX2lkOyAgLyogU2NvcGUgaWQgZm9yIElQdjYgKi8KIAotICBpbnQgc29ja3R5cGU7ICAvKiBTT0NLX1NUUkVBTSBvciBTT0NLX0RHUkFNICovCisgIGVudW0geworICAgIFRSTlNQUlRfVENQID0gMywKKyAgICBUUk5TUFJUX1VEUCA9IDQsCisgICAgVFJOU1BSVF9RVUlDID0gNQorICB9IHRyYW5zcG9ydDsKKworI2lmZGVmIEVOQUJMRV9RVUlDCisgIHN0cnVjdCBxdWljc29ja2V0IGhlcXVpY1syXTsgLyogdHdvLCBmb3IgaGFwcHkgZXllYmFsbHMhICovCisgIHN0cnVjdCBxdWljc29ja2V0ICpxdWljOworI2VuZGlmCiAKICAgc3RydWN0IGhvc3RuYW1lIGhvc3Q7CiAgIGNoYXIgKmhvc3RuYW1lX3Jlc29sdmU7IC8qIGhvc3QgbmFtZSB0byByZXNvbHZlIHRvIGFkZHJlc3MsIGFsbG9jYXRlZCAqLwogICBjaGFyICpzZWNvbmRhcnlob3N0bmFtZTsgLyogc2Vjb25kYXJ5IHNvY2tldCBob3N0IG5hbWUgKGZ0cCkgKi8KICAgc3RydWN0IGhvc3RuYW1lIGNvbm5fdG9faG9zdDsgLyogdGhlIGhvc3QgdG8gY29ubmVjdCB0by4gdmFsaWQgb25seSBpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzLmNvbm5fdG9faG9zdCBpcyBzZXQgKi8KLQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgc3RydWN0IHByb3h5X2luZm8gc29ja3NfcHJveHk7CiAgIHN0cnVjdCBwcm94eV9pbmZvIGh0dHBfcHJveHk7Ci0KKyNlbmRpZgogICBsb25nIHBvcnQ7ICAgICAgIC8qIHdoaWNoIHBvcnQgdG8gdXNlIGxvY2FsbHkgKi8KICAgaW50IHJlbW90ZV9wb3J0OyAvKiB0aGUgcmVtb3RlIHBvcnQsIG5vdCB0aGUgcHJveHkgcG9ydCEgKi8KICAgaW50IGNvbm5fdG9fcG9ydDsgLyogdGhlIHJlbW90ZSBwb3J0IHRvIGNvbm5lY3QgdG8uIHZhbGlkIG9ubHkgaWYKQEAgLTg3MCw3ICs5NDcsNyBAQAogICBjaGFyICpwYXNzd2Q7ICAvKiBwYXNzd29yZCBzdHJpbmcsIGFsbG9jYXRlZCAqLwogICBjaGFyICpvcHRpb25zOyAvKiBvcHRpb25zIHN0cmluZywgYWxsb2NhdGVkICovCiAKLSAgY2hhciAqb2F1dGhfYmVhcmVyOyAvKiBiZWFyZXIgdG9rZW4gZm9yIE9BdXRoIDIuMCwgYWxsb2NhdGVkICovCisgIGNoYXIgKnNhc2xfYXV0aHppZDsgICAgIC8qIGF1dGhvcmlzYXRpb24gaWRlbnRpdHkgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KIAogICBpbnQgaHR0cHZlcnNpb247ICAgICAgICAvKiB0aGUgSFRUUCB2ZXJzaW9uKjEwIHJlcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgKi8KICAgaW50IHJ0c3B2ZXJzaW9uOyAgICAgICAgLyogdGhlIFJUU1AgdmVyc2lvbioxMCByZXBvcnRlZCBieSB0aGUgc2VydmVyICovCkBAIC04ODEsOCArOTU4LDcgQEAKICAgY3VybF9zb2NrZXRfdCBzb2NrWzJdOyAvKiB0d28gc29ja2V0cywgdGhlIHNlY29uZCBpcyB1c2VkIGZvciB0aGUgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIHdoZW4gZG9pbmcgRlRQICovCiAgIGN1cmxfc29ja2V0X3QgdGVtcHNvY2tbMl07IC8qIHRlbXBvcmFyeSBzb2NrZXRzIGZvciBoYXBweSBleWViYWxscyAqLwotICBib29sIHNvY2tfYWNjZXB0ZWRbMl07IC8qIFRSVUUgaWYgdGhlIHNvY2tldCBvbiB0aGlzIGluZGV4IHdhcyBjcmVhdGVkIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQoKSAqLworICBpbnQgdGVtcGZhbWlseVsyXTsgLyogZmFtaWx5IHVzZWQgZm9yIHRoZSB0ZW1wIHNvY2tldHMgKi8KICAgQ3VybF9yZWN2ICpyZWN2WzJdOwogICBDdXJsX3NlbmQgKnNlbmRbMl07CiAKQEAgLTg5MCwxMiArOTY2LDE2IEBACiAgIHN0cnVjdCBwb3N0cG9uZWRfZGF0YSBwb3N0cG9uZWRbMl07IC8qIHR3byBidWZmZXJzIGZvciB0d28gc29ja2V0cyAqLwogI2VuZGlmIC8qIFVTRV9SRUNWX0JFRk9SRV9TRU5EX1dPUktBUk9VTkQgKi8KICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgc3NsWzJdOyAvKiB0aGlzIGlzIGZvciBzc2wtc3R1ZmYgKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhIHByb3h5X3NzbFsyXTsgLyogdGhpcyBpcyBmb3IgcHJveHkgc3NsLXN0dWZmICovCisjZW5kaWYKICNpZmRlZiBVU0VfU1NMCiAgIHZvaWQgKnNzbF9leHRyYTsgLyogc2VwYXJhdGVseSBhbGxvY2F0ZWQgYmFja2VuZC1zcGVjaWZpYyBkYXRhICovCiAjZW5kaWYKICAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyBzc2xfY29uZmlnOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyBwcm94eV9zc2xfY29uZmlnOworI2VuZGlmCiAgIHN0cnVjdCBDb25uZWN0Qml0cyBiaXRzOyAgICAvKiB2YXJpb3VzIHN0YXRlLWZsYWdzIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KIAogIC8qIGNvbm5lY3R0aW1lOiB3aGVuIGNvbm5lY3QoKSBpcyBjYWxsZWQgb24gdGhlIGN1cnJlbnQgSVAgYWRkcmVzcy4gVXNlZCB0bwpAQCAtOTA0LDggKzk4NCwxMCBAQAogICBzdHJ1Y3QgY3VybHRpbWUgY29ubmVjdHRpbWU7CiAgIC8qIFRoZSB0d28gZmllbGRzIGJlbG93IGdldCBzZXQgaW4gQ3VybF9jb25uZWN0aG9zdCAqLwogICBpbnQgbnVtX2FkZHI7IC8qIG51bWJlciBvZiBhZGRyZXNzZXMgdG8gdHJ5IHRvIGNvbm5lY3QgdG8gKi8KLSAgdGltZV90IHRpbWVvdXRtc19wZXJfYWRkcjsgLyogaG93IGxvbmcgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gZWFjaCBJUCBhZGRyZXNzICovCisKKyAgLyogaG93IGxvbmcgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgb24gdHJ5aW5nIHRvIGNvbm5lY3QgdG8gZWFjaCBJUAorICAgICBhZGRyZXNzLCBwZXIgZmFtaWx5ICovCisgIHRpbWVkaWZmX3QgdGltZW91dG1zX3Blcl9hZGRyWzJdOwogCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmhhbmRsZXI7IC8qIENvbm5lY3Rpb24ncyBwcm90b2NvbCBoYW5kbGVyICovCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmdpdmVuOyAgIC8qIFRoZSBwcm90b2NvbCBmaXJzdCBnaXZlbiAqLwpAQCAtOTI2LDIzICsxMDA4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VsbCBiZSB0aGUgc2FtZSB3ZSByZWFkIGZyb20uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCBkaXNhYmxlcyAqLwogCi0gIC8qKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncywgTVVTVCBiZSBmcmVlZCBiZWZvcmUgdGhpcyAqKi8KLSAgLyoqIHN0cnVjdCBpcyBraWxsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KLSAgc3RydWN0IGR5bmFtaWNhbGx5X2FsbG9jYXRlZF9kYXRhIHsKLSAgICBjaGFyICpwcm94eXVzZXJwd2Q7Ci0gICAgY2hhciAqdWFnZW50OwotICAgIGNoYXIgKmFjY2VwdF9lbmNvZGluZzsKLSAgICBjaGFyICp1c2VycHdkOwotICAgIGNoYXIgKnJhbmdlbGluZTsKLSAgICBjaGFyICpyZWY7Ci0gICAgY2hhciAqaG9zdDsKLSAgICBjaGFyICpjb29raWVob3N0OwotICAgIGNoYXIgKnJ0c3BfdHJhbnNwb3J0OwotICAgIGNoYXIgKnRlOyAvKiBURTogcmVxdWVzdCBoZWFkZXIgKi8KLSAgfSBhbGxvY3B0cjsKLQogI2lmZGVmIEhBVkVfR1NTQVBJCi0gIGJpdCBzZWNfY29tcGxldGU6MTsgLyogaWYgS2VyYmVyb3MgaXMgZW5hYmxlZCBmb3IgdGhpcyBjb25uZWN0aW9uICovCisgIEJJVChzZWNfY29tcGxldGUpOyAvKiBpZiBLZXJiZXJvcyBpcyBlbmFibGVkIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIGNvbW1hbmRfcHJvdDsKICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIGRhdGFfcHJvdDsKICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIHJlcXVlc3RfZGF0YV9wcm90OwpAQCAtOTc0LDE0ICsxMDQxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGl0IGF1dGhlbnRpY2F0ZXMgY29ubmVjdGlvbnMsIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSByZXF1ZXN0cyEgKi8KICAgc3RydWN0IG50bG1kYXRhIHByb3h5bnRsbTsgLyogTlRMTSBkYXRhIGZvciBwcm94eSAqLwotCi0jaWYgZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCi0gIC8qIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBTYW1iYSdzIHdpbmJpbmQgZGFlbW9uIGhlbHBlciBudGxtX2F1dGggKi8KLSAgY3VybF9zb2NrZXRfdCBudGxtX2F1dGhfaGxwcl9zb2NrZXQ7Ci0gIHBpZF90IG50bG1fYXV0aF9obHByX3BpZDsKLSAgY2hhciAqY2hhbGxlbmdlX2hlYWRlcjsKLSAgY2hhciAqcmVzcG9uc2VfaGVhZGVyOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFVTRV9TUE5FR08KQEAgLTk5NSwxMCArMTA1NCw4IEBACiAgIC8qIGRhdGEgdXNlZCBmb3IgdGhlIGFzeW5jaCBuYW1lIHJlc29sdmUgY2FsbGJhY2sgKi8KICAgc3RydWN0IEN1cmxfYXN5bmMgYXN5bmM7CiAKLSAgLyogVGhlc2UgdGhyZWUgYXJlIHVzZWQgZm9yIGNodW5rZWQtZW5jb2RpbmcgdHJhaWxlciBzdXBwb3J0ICovCi0gIGNoYXIgKnRyYWlsZXI7IC8qIGFsbG9jYXRlZCBidWZmZXIgdG8gc3RvcmUgdHJhaWxlciBpbiAqLwotICBpbnQgdHJsTWF4OyAgICAvKiBhbGxvY2F0ZWQgYnVmZmVyIHNpemUgKi8KLSAgaW50IHRybFBvczsgICAgLyogaW5kZXggb2Ygd2hlcmUgdG8gc3RvcmUgZGF0YSAqLworICAvKiBmb3IgY2h1bmtlZC1lbmNvZGVkIHRyYWlsZXIgKi8KKyAgc3RydWN0IGR5bmJ1ZiB0cmFpbGVyOwogCiAgIHVuaW9uIHsKICAgICBzdHJ1Y3QgZnRwX2Nvbm4gZnRwYzsKQEAgLTEwMTAsNyArMTA2Nyw5IEBACiAgICAgc3RydWN0IHNtdHBfY29ubiBzbXRwYzsKICAgICBzdHJ1Y3QgcnRzcF9jb25uIHJ0c3BjOwogICAgIHN0cnVjdCBzbWJfY29ubiBzbWJjOwotICAgIHZvaWQgKmdlbmVyaWM7IC8qIFJUTVAgYW5kIExEQVAgdXNlIHRoaXMgKi8KKyAgICB2b2lkICpydG1wOworICAgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxkYXBjOworICAgIHN0cnVjdCBtcXR0X2Nvbm4gbXF0dDsKICAgfSBwcm90bzsKIAogICBpbnQgY3NlbGVjdF9iaXRzOyAvKiBiaXRtYXNrIG9mIHNvY2tldCBldmVudHMgKi8KQEAgLTEwMzEsMTkgKzEwOTAsMTAgQEAKICAgc3RydWN0IGh0dHBfY29ubmVjdF9zdGF0ZSAqY29ubmVjdF9zdGF0ZTsgLyogZm9yIEhUVFAgQ09OTkVDVCAqLwogICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlOyAvKiBUaGUgYnVuZGxlIHdlIGFyZSBtZW1iZXIgb2YgKi8KICAgaW50IG5lZ25wbjsgLyogQVBMTiBvciBOUE4gVExTIG5lZ290aWF0ZWQgcHJvdG9jb2wsIENVUkxfSFRUUF9WRVJTSU9OKiAqLwotCisgIGludCByZXRyeWNvdW50OyAvKiBudW1iZXIgb2YgcmV0cmllcyBvbiBhIG5ldyBjb25uZWN0aW9uICovCiAjaWZkZWYgVVNFX1VOSVhfU09DS0VUUwogICBjaGFyICp1bml4X2RvbWFpbl9zb2NrZXQ7Ci0gIGJpdCBhYnN0cmFjdF91bml4X3NvY2tldDoxOwogI2VuZGlmCi0gIGJpdCB0bHNfdXBncmFkZWQ6MTsKLSAgLyogdGhlIHR3byBmb2xsb3dpbmcgKl9pbnVzZSBmaWVsZHMgYXJlIG9ubHkgZmxhZ3MsIG5vdCBjb3VudGVycyBpbiBhbnkgd2F5LgotICAgICBJZiBUUlVFIGl0IG1lYW5zIHRoZSBjaGFubmVsIGlzIGluIHVzZSwgYW5kIGlmIEZBTFNFIGl0IG1lYW5zIHRoZSBjaGFubmVsCi0gICAgIGlzIHVwIGZvciBncmFicyBieSBvbmUuICovCi0gIGJpdCByZWFkY2hhbm5lbF9pbnVzZToxOyAgLyogd2hldGhlciB0aGUgcmVhZCBjaGFubmVsIGlzIGluIHVzZSBieSBhbiBlYXN5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlICovCi0gIGJpdCB3cml0ZWNoYW5uZWxfaW51c2U6MTsgLyogd2hldGhlciB0aGUgd3JpdGUgY2hhbm5lbCBpcyBpbiB1c2UgYnkgYW4gZWFzeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSAqLwogfTsKIAogLyogVGhlIGVuZCBvZiBjb25uZWN0ZGF0YS4gKi8KQEAgLTEwNjUsNiArMTExNSw3IEBACiAgIGxvbmcgbnVtY29ubmVjdHM7IC8qIGhvdyBtYW55IG5ldyBjb25uZWN0aW9uIGRpZCBsaWJjdXJsIGNyZWF0ZWQgKi8KICAgY2hhciAqY29udGVudHR5cGU7IC8qIHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIG9iamVjdCAqLwogICBjaGFyICp3b3VsZHJlZGlyZWN0OyAvKiBVUkwgdGhpcyB3b3VsZCd2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8gaWYgYXNrZWQgdG8gKi8KKyAgY3VybF9vZmZfdCByZXRyeV9hZnRlcjsgLyogaW5mbyBmcm9tIFJldHJ5LUFmdGVyOiBoZWFkZXIgKi8KIAogICAvKiBQdXJlSW5mbyBtZW1iZXJzICdjb25uX3ByaW1hcnlfaXAnLCAnY29ubl9wcmltYXJ5X3BvcnQnLCAnY29ubl9sb2NhbF9pcCcKICAgICAgYW5kLCAnY29ubl9sb2NhbF9wb3J0JyBhcmUgY29waWVkIG92ZXIgZnJvbSB0aGUgY29ubmVjdGRhdGEgc3RydWN0IGluCkBAIC0xMDgxLDExICsxMTMyLDExIEBACiAgIGNvbnN0IGNoYXIgKmNvbm5fc2NoZW1lOwogICB1bnNpZ25lZCBpbnQgY29ubl9wcm90b2NvbDsKICAgc3RydWN0IGN1cmxfY2VydGluZm8gY2VydHM7IC8qIGluZm8gYWJvdXQgdGhlIGNlcnRzLCBvbmx5IHBvcHVsYXRlZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBidWlsZHMuIEFza2VkIGZvciB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KLQotICBiaXQgdGltZWNvbmQ6MTsgIC8qIHNldCB0byBUUlVFIGlmIHRoZSB0aW1lIGNvbmRpdGlvbiBkaWRuJ3QgbWF0Y2gsIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgdGh1cyBtYWRlIHRoZSBkb2N1bWVudCBOT1QgZ2V0IGZldGNoZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5TU0wsIEdudVRMUywgU2NoYW5uZWwsIE5TUyBhbmQgR1NLaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcy4gQXNrZWQgZm9yIHdpdGggQ1VSTE9QVF9DRVJUSU5GTworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBDVVJMSU5GT19DRVJUSU5GTyAqLworICBCSVQodGltZWNvbmQpOyAgLyogc2V0IHRvIFRSVUUgaWYgdGhlIHRpbWUgY29uZGl0aW9uIGRpZG4ndCBtYXRjaCwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgIHRodXMgbWFkZSB0aGUgZG9jdW1lbnQgTk9UIGdldCBmZXRjaGVkICovCiB9OwogCiAKQEAgLTExMDIsMTcgKzExNTMsMTcgQEAKICAgaW50IHdpZHRoOyAvKiBzY3JlZW4gd2lkdGggYXQgZG93bmxvYWQgc3RhcnQgKi8KICAgaW50IGZsYWdzOyAvKiBzZWUgcHJvZ3Jlc3MuaCAqLwogCi0gIHRpbWVfdCB0aW1lc3BlbnQ7CisgIHRpbWVkaWZmX3QgdGltZXNwZW50OwogCiAgIGN1cmxfb2ZmX3QgZGxzcGVlZDsKICAgY3VybF9vZmZfdCB1bHNwZWVkOwogCi0gIHRpbWVfdCB0X25zbG9va3VwOwotICB0aW1lX3QgdF9jb25uZWN0OwotICB0aW1lX3QgdF9hcHBjb25uZWN0OwotICB0aW1lX3QgdF9wcmV0cmFuc2ZlcjsKLSAgdGltZV90IHRfc3RhcnR0cmFuc2ZlcjsKLSAgdGltZV90IHRfcmVkaXJlY3Q7CisgIHRpbWVkaWZmX3QgdF9uc2xvb2t1cDsKKyAgdGltZWRpZmZfdCB0X2Nvbm5lY3Q7CisgIHRpbWVkaWZmX3QgdF9hcHBjb25uZWN0OworICB0aW1lZGlmZl90IHRfcHJldHJhbnNmZXI7CisgIHRpbWVkaWZmX3QgdF9zdGFydHRyYW5zZmVyOworICB0aW1lZGlmZl90IHRfcmVkaXJlY3Q7CiAKICAgc3RydWN0IGN1cmx0aW1lIHN0YXJ0OwogICBzdHJ1Y3QgY3VybHRpbWUgdF9zdGFydHNpbmdsZTsKQEAgLTExMzIsOCArMTE4Myw4IEBACiAgIGN1cmxfb2ZmX3Qgc3BlZWRlclsgQ1VSUl9USU1FIF07CiAgIHN0cnVjdCBjdXJsdGltZSBzcGVlZGVyX3RpbWVbIENVUlJfVElNRSBdOwogICBpbnQgc3BlZWRlcl9jOwotICBiaXQgY2FsbGJhY2s6MTsgIC8qIHNldCB3aGVuIHByb2dyZXNzIGNhbGxiYWNrIGlzIHVzZWQgKi8KLSAgYml0IGlzX3Rfc3RhcnRyYW5zZmVyX3NldDoxOworICBCSVQoY2FsbGJhY2spOyAgLyogc2V0IHdoZW4gcHJvZ3Jlc3MgY2FsbGJhY2sgaXMgdXNlZCAqLworICBCSVQoaXNfdF9zdGFydHJhbnNmZXJfc2V0KTsKIH07CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0xMTY0LDI5ICsxMjE1LDE4IEBACiAgICAgUlRTUFJFUV9MQVNUIC8qIGxhc3QgaW4gbGlzdCAqLwogfSBDdXJsX1J0c3BSZXE7CiAKLS8qCi0gKiBWYWx1ZXMgdGhhdCBhcmUgZ2VuZXJhdGVkLCB0ZW1wb3Jhcnkgb3IgY2FsY3VsYXRlZCBpbnRlcm5hbGx5IGZvciBhCi0gKiAic2Vzc2lvbiBoYW5kbGUiIG11c3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlICdzdHJ1Y3QgVXJsU3RhdGUnLiAgVGhpcyBzdHJ1Y3QKLSAqIHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIEN1cmxfZWFzeSBzdHJ1Y3QuIFdoZW4gdGhlICdDdXJsX2Vhc3knCi0gKiBzdHJ1Y3QgaXMgY2xvbmVkLCB0aGlzIGRhdGEgTVVTVCBOT1QgYmUgY29waWVkLgotICoKLSAqIFJlbWVtYmVyIHRoYXQgYW55ICJzdGF0ZSIgaW5mb3JtYXRpb24gZ29lcyBnbG9iYWxseSBmb3IgdGhlIGN1cmwgaGFuZGxlLgotICogU2Vzc2lvbi1kYXRhIE1VU1QgYmUgcHV0IGluIHRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QgYW5kIGhlcmUuICAqLwotI2RlZmluZSBNQVhfQ1VSTF9VU0VSX0xFTkdUSCAyNTYKLSNkZWZpbmUgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIIDI1NgotCiBzdHJ1Y3QgYXV0aCB7CiAgIHVuc2lnbmVkIGxvbmcgd2FudDsgIC8qIEJpdG1hc2sgc2V0IHRvIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHdhbnRlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgKHdpdGggQ1VSTE9QVF9IVFRQQVVUSCBvciBDVVJMT1BUX1BST1hZQVVUSCkuICovCiAgIHVuc2lnbmVkIGxvbmcgcGlja2VkOwogICB1bnNpZ25lZCBsb25nIGF2YWlsOyAvKiBCaXRtYXNrIGZvciB3aGF0IHRoZSBzZXJ2ZXIgcmVwb3J0cyB0byBzdXBwb3J0IGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHJlc291cmNlICovCi0gIGJpdCBkb25lOjE7ICAvKiBUUlVFIHdoZW4gdGhlIGF1dGggcGhhc2UgaXMgZG9uZSBhbmQgcmVhZHkgdG8gZG8gdGhlCi0gICAgICAgICAgICAgICAgICphY3R1YWwqIHJlcXVlc3QgKi8KLSAgYml0IG11bHRpcGFzczoxOyAvKiBUUlVFIGlmIHRoaXMgaXMgbm90IHlldCBhdXRoZW50aWNhdGVkIGJ1dCB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgIGF1dGggbXVsdGlwYXNzIG5lZ290aWF0aW9uICovCi0gIGJpdCBpZXN0eWxlOjE7IC8qIFRSVUUgaWYgZGlnZXN0IHNob3VsZCBiZSBkb25lIElFLXN0eWxlIG9yIEZBTFNFIGlmIGl0Ci0gICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgUkZDIGNvbXBsaWFudCAqLworICBCSVQoZG9uZSk7ICAvKiBUUlVFIHdoZW4gdGhlIGF1dGggcGhhc2UgaXMgZG9uZSBhbmQgcmVhZHkgdG8gZG8gdGhlCisgICAgICAgICAgICAgICAgIGFjdHVhbCByZXF1ZXN0ICovCisgIEJJVChtdWx0aXBhc3MpOyAvKiBUUlVFIGlmIHRoaXMgaXMgbm90IHlldCBhdXRoZW50aWNhdGVkIGJ1dCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICBhdXRoIG11bHRpcGFzcyBuZWdvdGlhdGlvbiAqLworICBCSVQoaWVzdHlsZSk7IC8qIFRSVUUgaWYgZGlnZXN0IHNob3VsZCBiZSBkb25lIElFLXN0eWxlIG9yIEZBTFNFIGlmIGl0CisgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIFJGQyBjb21wbGlhbnQgKi8KIH07CiAKIHN0cnVjdCBDdXJsX2h0dHAyX2RlcCB7CkBAIC0xMjAwLDkgKzEyNDAsNyBAQAogICogQk9EWSkuCiAgKi8KIHN0cnVjdCB0ZW1wYnVmIHsKLSAgY2hhciAqYnVmOyAgLyogYWxsb2NhdGVkIGJ1ZmZlciB0byBrZWVwIGRhdGEgaW4gd2hlbiBhIHdyaXRlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgIHJldHVybnMgdG8gbWFrZSB0aGUgY29ubmVjdGlvbiBwYXVzZWQgKi8KLSAgc2l6ZV90IGxlbjsgLyogc2l6ZSBvZiB0aGUgJ3RlbXB3cml0ZScgYWxsb2NhdGVkIGJ1ZmZlciAqLworICBzdHJ1Y3QgZHluYnVmIGI7CiAgIGludCB0eXBlOyAgIC8qIHR5cGUgb2YgdGhlICd0ZW1wd3JpdGUnIGJ1ZmZlciBhcyBhIGJpdG1hc2sgdGhhdCBpcyB1c2VkIHdpdGgKICAgICAgICAgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoKSAqLwogfTsKQEAgLTEyMTIsNyArMTI1MCw4IEBACiAgIEVYUElSRV8xMDBfVElNRU9VVCwKICAgRVhQSVJFX0FTWU5DX05BTUUsCiAgIEVYUElSRV9DT05ORUNUVElNRU9VVCwKLSAgRVhQSVJFX0ROU19QRVJfTkFNRSwKKyAgRVhQSVJFX0ROU19QRVJfTkFNRSwgLyogZmFtaWx5MSAqLworICBFWFBJUkVfRE5TX1BFUl9OQU1FMiwgLyogZmFtaWx5MiAqLwogICBFWFBJUkVfSEFQUFlfRVlFQkFMTFNfRE5TLCAvKiBTZWUgYXN5bi1hcmVzLmMgKi8KICAgRVhQSVJFX0hBUFBZX0VZRUJBTExTLAogICBFWFBJUkVfTVVMVElfUEVORElORywKQEAgLTEyMjAsNiArMTI1OSw3IEBACiAgIEVYUElSRV9TUEVFRENIRUNLLAogICBFWFBJUkVfVElNRU9VVCwKICAgRVhQSVJFX1RPT0ZBU1QsCisgIEVYUElSRV9RVUlDLAogICBFWFBJUkVfTEFTVCAvKiBub3QgYW4gYWN0dWFsIHRpbWVyLCB1c2VkIGFzIGEgbWFya2VyIG9ubHkgKi8KIH0gZXhwaXJlX2lkOwogCkBAIC0xMjU0LDcgKzEyOTQsNiBAQAogfTsKIAogc3RydWN0IFVybFN0YXRlIHsKLQogICAvKiBQb2ludHMgdG8gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KICAgc3RydWN0IGNvbm5jYWNoZSAqY29ubl9jYWNoZTsKIApAQCAtMTI2Miw5ICsxMzAxLDcgQEAKICAgc3RydWN0IGN1cmx0aW1lIGtlZXBzX3NwZWVkOyAvKiBmb3IgdGhlIHByb2dyZXNzIG1ldGVyIHJlYWxseSAqLwogCiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqbGFzdGNvbm5lY3Q7IC8qIFRoZSBsYXN0IGNvbm5lY3Rpb24sIE5VTEwgaWYgdW5kZWZpbmVkICovCi0KLSAgY2hhciAqaGVhZGVyYnVmZjsgLyogYWxsb2NhdGVkIGJ1ZmZlciB0byBzdG9yZSBoZWFkZXJzIGluICovCi0gIHNpemVfdCBoZWFkZXJzaXplOyAgIC8qIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gKi8KKyAgc3RydWN0IGR5bmJ1ZiBoZWFkZXJiOyAvKiBidWZmZXIgdG8gc3RvcmUgaGVhZGVycyBpbiAqLwogCiAgIGNoYXIgKmJ1ZmZlcjsgLyogZG93bmxvYWQgYnVmZmVyICovCiAgIGNoYXIgKnVsYnVmOyAvKiBhbGxvY2F0ZWQgdXBsb2FkIGJ1ZmZlciBvciBOVUxMICovCkBAIC0xMzE1LDcgKzEzNTIsNyBAQAogLyogZG8gRlRQIGxpbmUtZW5kIGNvbnZlcnNpb25zIG9uIG1vc3QgcGxhdGZvcm1zICovCiAjZGVmaW5lIENVUkxfRE9fTElORUVORF9DT05WCiAgIC8qIGZvciBGVFAgZG93bmxvYWRzOiB0cmFjayBDUkxGIHNlcXVlbmNlcyB0aGF0IHNwYW4gYmxvY2tzICovCi0gIGJpdCBwcmV2X2Jsb2NrX2hhZF90cmFpbGluZ19jcjoxOworICBCSVQocHJldl9ibG9ja19oYWRfdHJhaWxpbmdfY3IpOwogICAvKiBmb3IgRlRQIGRvd25sb2FkczogaG93IG1hbnkgQ1JMRnMgZGlkIHdlIGNvbnZlcnRlZCB0byBMRnM/ICovCiAgIGN1cmxfb2ZmX3QgY3JsZl9jb252ZXJzaW9uczsKICNlbmRpZgpAQCAtMTM0Miw0MCArMTM3OSw2MCBAQAogICBpbnQgc3RyZWFtX3dlaWdodDsKICAgQ1VSTFUgKnVoOyAvKiBVUkwgaGFuZGxlIGZvciB0aGUgY3VycmVudCBwYXJzZWQgVVJMICovCiAgIHN0cnVjdCB1cmxwaWVjZXMgdXA7CisgIEN1cmxfSHR0cFJlcSBodHRwcmVxOyAvKiB3aGF0IGtpbmQgb2YgSFRUUCByZXF1ZXN0IChpZiBhbnkpIGlzIHRoaXMgKi8KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKICAgc2l6ZV90IHRyYWlsZXJzX2J5dGVzX3NlbnQ7Ci0gIEN1cmxfc2VuZF9idWZmZXIgKnRyYWlsZXJzX2J1ZjsgLyogYSBidWZmZXIgY29udGFpbmluZyB0aGUgY29tcGlsZWQgdHJhaWxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzICovCisgIHN0cnVjdCBkeW5idWYgdHJhaWxlcnNfYnVmOyAvKiBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBjb21waWxlZCB0cmFpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyAqLwogI2VuZGlmCiAgIHRyYWlsZXJzX3N0YXRlIHRyYWlsZXJzX3N0YXRlOyAvKiB3aGV0aGVyIHdlIGFyZSBzZW5kaW5nIHRyYWlsZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2hhdCBzdGFnZSBhcmUgd2UgYXQgKi8KKworICAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncywgTVVTVCBiZSBmcmVlZCBiZWZvcmUgdGhpcyBzdHJ1Y3QgaXMKKyAgICAga2lsbGVkLiAqLworICBzdHJ1Y3QgZHluYW1pY2FsbHlfYWxsb2NhdGVkX2RhdGEgeworICAgIGNoYXIgKnByb3h5dXNlcnB3ZDsKKyAgICBjaGFyICp1YWdlbnQ7CisgICAgY2hhciAqYWNjZXB0X2VuY29kaW5nOworICAgIGNoYXIgKnVzZXJwd2Q7CisgICAgY2hhciAqcmFuZ2VsaW5lOworICAgIGNoYXIgKnJlZjsKKyAgICBjaGFyICpob3N0OworICAgIGNoYXIgKmNvb2tpZWhvc3Q7CisgICAgY2hhciAqcnRzcF90cmFuc3BvcnQ7CisgICAgY2hhciAqdGU7IC8qIFRFOiByZXF1ZXN0IGhlYWRlciAqLworICB9IGFwdHI7CisKICNpZmRlZiBDVVJMREVCVUcKLSAgYml0IGNvbm5jYWNoZV9sb2NrOjE7CisgIEJJVChjb25uY2FjaGVfbG9jayk7CiAjZW5kaWYKICAgLyogd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGNhbGxlZCwgdGhlIG11bHRpIGhhbmRsZSBpcyAib3duZWQiIGJ5CiAgICAgIHRoZSBlYXN5IGhhbmRsZSBzbyBjdXJsX2Vhc3lfY2xlYW51cCgpIG9uIHN1Y2ggYW4gZWFzeSBoYW5kbGUgd2lsbAogICAgICBhbHNvIGNsb3NlIHRoZSBtdWx0aSBoYW5kbGUhICovCi0gIGJpdCBtdWx0aV9vd25lZF9ieV9lYXN5OjE7CisgIEJJVChtdWx0aV9vd25lZF9ieV9lYXN5KTsKIAotICBiaXQgdGhpc19pc19hX2ZvbGxvdzoxOyAvKiB0aGlzIGlzIGEgZm9sbG93ZWQgTG9jYXRpb246IHJlcXVlc3QgKi8KLSAgYml0IHJlZnVzZWRfc3RyZWFtOjE7IC8qIHRoaXMgd2FzIHJlZnVzZWQsIHRyeSBhZ2FpbiAqLwotICBiaXQgZXJyb3JidWY6MTsgLyogU2V0IHRvIFRSVUUgaWYgdGhlIGVycm9yIGJ1ZmZlciBpcyBhbHJlYWR5IGZpbGxlZCBpbi4KKyAgQklUKHRoaXNfaXNfYV9mb2xsb3cpOyAvKiB0aGlzIGlzIGEgZm9sbG93ZWQgTG9jYXRpb246IHJlcXVlc3QgKi8KKyAgQklUKHJlZnVzZWRfc3RyZWFtKTsgLyogdGhpcyB3YXMgcmVmdXNlZCwgdHJ5IGFnYWluICovCisgIEJJVChlcnJvcmJ1Zik7IC8qIFNldCB0byBUUlVFIGlmIHRoZSBlcnJvciBidWZmZXIgaXMgYWxyZWFkeSBmaWxsZWQgaW4uCiAgICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBzZXQgdG8gRkFMU0UgZXZlcnkgdGltZSBfZWFzeV9wZXJmb3JtKCkgaXMKICAgICAgICAgICAgICAgICAgICAgY2FsbGVkLiAqLwotICBiaXQgYWxsb3dfcG9ydDoxOyAvKiBJcyBzZXQudXNlX3BvcnQgYWxsb3dlZCB0byB0YWtlIGVmZmVjdCBvciBub3QuIFRoaXMKKyAgQklUKGFsbG93X3BvcnQpOyAvKiBJcyBzZXQudXNlX3BvcnQgYWxsb3dlZCB0byB0YWtlIGVmZmVjdCBvciBub3QuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHdheXMgc2V0IFRSVUUgd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGNhbGxlZC4gKi8KLSAgYml0IGF1dGhwcm9ibGVtOjE7IC8qIFRSVUUgaWYgdGhlcmUncyBzb21lIHByb2JsZW0gYXV0aGVudGljYXRpbmcgKi8KKyAgQklUKGF1dGhwcm9ibGVtKTsgLyogVFJVRSBpZiB0aGVyZSdzIHNvbWUgcHJvYmxlbSBhdXRoZW50aWNhdGluZyAqLwogICAvKiBzZXQgYWZ0ZXIgaW5pdGlhbCBVU0VSIGZhaWx1cmUsIHRvIHByZXZlbnQgYW4gYXV0aGVudGljYXRpb24gbG9vcCAqLwotICBiaXQgZnRwX3RyeWluZ19hbHRlcm5hdGl2ZToxOwotICBiaXQgd2lsZGNhcmRtYXRjaDoxOyAvKiBlbmFibGUgd2lsZGNhcmQgbWF0Y2hpbmcgKi8KLSAgYml0IGV4cGVjdDEwMGhlYWRlcjoxOyAgLyogVFJVRSBpZiB3ZSBhZGRlZCBFeHBlY3Q6IDEwMC1jb250aW51ZSAqLwotICBiaXQgdXNlX3JhbmdlOjE7Ci0gIGJpdCByYW5nZXN0cmluZ2FsbG9jOjE7IC8qIHRoZSByYW5nZSBzdHJpbmcgaXMgbWFsbG9jKCknZWQgKi8KLSAgYml0IGRvbmU6MTsgLyogc2V0IHRvIEZBTFNFIHdoZW4gQ3VybF9pbml0X2RvKCkgaXMgY2FsbGVkIGFuZCBzZXQgdG8gVFJVRQorICBCSVQoZnRwX3RyeWluZ19hbHRlcm5hdGl2ZSk7CisgIEJJVCh3aWxkY2FyZG1hdGNoKTsgLyogZW5hYmxlIHdpbGRjYXJkIG1hdGNoaW5nICovCisgIEJJVChleHBlY3QxMDBoZWFkZXIpOyAgLyogVFJVRSBpZiB3ZSBhZGRlZCBFeHBlY3Q6IDEwMC1jb250aW51ZSAqLworICBCSVQoZGlzYWJsZWV4cGVjdCk7ICAgIC8qIFRSVUUgaWYgRXhwZWN0OiBpcyBkaXNhYmxlZCBkdWUgdG8gYSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxNyByZXNwb25zZSAqLworICBCSVQodXNlX3JhbmdlKTsKKyAgQklUKHJhbmdlc3RyaW5nYWxsb2MpOyAvKiB0aGUgcmFuZ2Ugc3RyaW5nIGlzIG1hbGxvYygpJ2VkICovCisgIEJJVChkb25lKTsgLyogc2V0IHRvIEZBTFNFIHdoZW4gQ3VybF9pbml0X2RvKCkgaXMgY2FsbGVkIGFuZCBzZXQgdG8gVFJVRQogICAgICAgICAgICAgICAgICAgd2hlbiBtdWx0aV9kb25lKCkgaXMgY2FsbGVkLCB0byBwcmV2ZW50IG11bHRpX2RvbmUoKSB0byBnZXQKICAgICAgICAgICAgICAgICAgIGludm9rZWQgdHdpY2Ugd2hlbiB0aGUgbXVsdGkgaW50ZXJmYWNlIGlzIHVzZWQuICovCi0gIGJpdCBzdHJlYW1fZGVwZW5kc19lOjE7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KLSAgYml0IHByZXZpb3VzbHlwZW5kaW5nOjE7IC8qIHRoaXMgdHJhbnNmZXIgV0FTIGluIHRoZSBtdWx0aS0+cGVuZGluZyBxdWV1ZSAqLworICBCSVQoc3RyZWFtX2RlcGVuZHNfZSk7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KKyAgQklUKHByZXZpb3VzbHlwZW5kaW5nKTsgLyogdGhpcyB0cmFuc2ZlciBXQVMgaW4gdGhlIG11bHRpLT5wZW5kaW5nIHF1ZXVlICovCisgIEJJVChjb29raWVfZW5naW5lKTsKIH07CiAKIApAQCAtMTM5Myw5ICsxNDUwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoQ09PS0lFRklMRSkgY2FsbHMgKi8KICAgc3RydWN0IGN1cmxfc2xpc3QgKnJlc29sdmU7IC8qIHNldCB0byBwb2ludCB0byB0aGUgc2V0LnJlc29sdmUgbGlzdCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNob3VsZCBiZSBkZWFsdCB3aXRoIGluIHByZXRyYW5zZmVyICovCi0gIGJpdCB1cmxfYWxsb2M6MTsgICAvKiBVUkwgc3RyaW5nIGlzIG1hbGxvYygpJ2VkICovCi0gIGJpdCByZWZlcmVyX2FsbG9jOjE7IC8qIHJlZmVyZXIgc3RyaW5nIGlzIG1hbGxvYygpZWQgKi8KLSAgYml0IHdpbGRjYXJkX3Jlc29sdmU6MTsgLyogU2V0IHRvIHRydWUgaWYgYW55IHJlc29sdmUgY2hhbmdlIGlzIGEKKyAgQklUKHVybF9hbGxvYyk7ICAgLyogVVJMIHN0cmluZyBpcyBtYWxsb2MoKSdlZCAqLworICBCSVQocmVmZXJlcl9hbGxvYyk7IC8qIHJlZmVyZXIgc3RyaW5nIGlzIG1hbGxvYygpZWQgKi8KKyAgQklUKHdpbGRjYXJkX3Jlc29sdmUpOyAvKiBTZXQgdG8gdHJ1ZSBpZiBhbnkgcmVzb2x2ZSBjaGFuZ2UgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmQgKi8KIH07CiAKQEAgLTE0MTAsNiArMTQ2NywxNCBAQAogCiBzdHJ1Y3QgQ3VybF9tdWx0aTsgICAgLyogZGVjbGFyZWQgYW5kIHVzZWQgb25seSBpbiBtdWx0aS5jICovCiAKKy8qCisgKiBUaGlzIGVudW1lcmF0aW9uIE1VU1Qgbm90IHVzZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzICgjaWZkZWZzKSwgbmV3CisgKiBudWxsIHRlcm1pbmF0ZWQgc3RyaW5ncyBNVVNUIGJlIGFkZGVkIHRvIHRoZSBlbnVtZXJhdGlvbiBpbW1lZGlhdGVseQorICogYmVmb3JlIFNUUklOR19MQVNUWkVST1RFUk1JTkFURUQsIGJpbmFyeSBmaWVsZHMgaW1tZWRpYXRlbHkgYmVmb3JlCisgKiBTVFJJTkdfTEFTVC4gV2hlbiBkb2luZyBzbywgZW5zdXJlIHRoYXQgdGhlIHBhY2thZ2VzL09TNDAwL2Noa3N0cmluZy5jCisgKiB0ZXN0IGlzIHVwZGF0ZWQgYW5kIGFwcGxpY2FibGUgY2hhbmdlcyBmb3IgRUJDRElDIHRvIEFTQ0lJIGNvbnZlcnNpb24KKyAqIGFyZSBjYXRlcmVkIGZvciBpbiBjdXJsX2Vhc3lfc2V0b3B0X2Njc2lkKCkKKyAqLwogZW51bSBkdXBzdHJpbmcgewogICBTVFJJTkdfQ0VSVF9PUklHLCAgICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBuYW1lICovCiAgIFNUUklOR19DRVJUX1BST1hZLCAgICAgIC8qIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUgKi8KQEAgLTE0NjYsMzMgKzE1MzEsNDEgQEAKICAgU1RSSU5HX1JUU1BfU0VTU0lPTl9JRCwgLyogU2Vzc2lvbiBJRCB0byB1c2UgKi8KICAgU1RSSU5HX1JUU1BfU1RSRUFNX1VSSSwgLyogU3RyZWFtIFVSSSBmb3IgdGhpcyByZXF1ZXN0ICovCiAgIFNUUklOR19SVFNQX1RSQU5TUE9SVCwgIC8qIFRyYW5zcG9ydCBmb3IgdGhpcyBzZXNzaW9uICovCi0jaWZkZWYgVVNFX1NTSAorCiAgIFNUUklOR19TU0hfUFJJVkFURV9LRVksIC8qIHBhdGggdG8gdGhlIHByaXZhdGUga2V5IGZpbGUgZm9yIGF1dGggKi8KICAgU1RSSU5HX1NTSF9QVUJMSUNfS0VZLCAgLyogcGF0aCB0byB0aGUgcHVibGljIGtleSBmaWxlIGZvciBhdXRoICovCiAgIFNUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENSwgLyogbWQ1IG9mIGhvc3QgcHVibGljIGtleSBpbiBhc2NpaSBoZXggKi8KICAgU1RSSU5HX1NTSF9LTk9XTkhPU1RTLCAgLyogZmlsZSBuYW1lIG9mIGtub3duaG9zdHMgZmlsZSAqLwotI2VuZGlmCisKICAgU1RSSU5HX1BST1hZX1NFUlZJQ0VfTkFNRSwgLyogUHJveHkgc2VydmljZSBuYW1lICovCiAgIFNUUklOR19TRVJWSUNFX05BTUUsICAgIC8qIFNlcnZpY2UgbmFtZSAqLwogICBTVFJJTkdfTUFJTF9GUk9NLAogICBTVFJJTkdfTUFJTF9BVVRILAogCi0jaWZkZWYgVVNFX1RMU19TUlAKICAgU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfT1JJRywgIC8qIFRMUyBhdXRoIDx1c2VybmFtZT4gKi8KICAgU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfUFJPWFksIC8qIFRMUyBhdXRoIDx1c2VybmFtZT4gKi8KICAgU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfT1JJRywgIC8qIFRMUyBhdXRoIDxwYXNzd29yZD4gKi8KICAgU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfUFJPWFksIC8qIFRMUyBhdXRoIDxwYXNzd29yZD4gKi8KLSNlbmRpZgorCiAgIFNUUklOR19CRUFSRVIsICAgICAgICAgICAgICAgIC8qIDxiZWFyZXI+LCBpZiB1c2VkICovCi0jaWZkZWYgVVNFX1VOSVhfU09DS0VUUworCiAgIFNUUklOR19VTklYX1NPQ0tFVF9QQVRILCAgICAgIC8qIHBhdGggdG8gVW5peCBzb2NrZXQsIGlmIHVzZWQgKi8KLSNlbmRpZgorCiAgIFNUUklOR19UQVJHRVQsICAgICAgICAgICAgICAgIC8qIENVUkxPUFRfUkVRVUVTVF9UQVJHRVQgKi8KICAgU1RSSU5HX0RPSCwgICAgICAgICAgICAgICAgICAgLyogQ1VSTE9QVF9ET0hfVVJMICovCi0jaWZkZWYgVVNFX0FMVFNWQworCiAgIFNUUklOR19BTFRTVkMsICAgICAgICAgICAgICAgIC8qIENVUkxPUFRfQUxUU1ZDICovCi0jZW5kaWYKLSAgLyogLS0gZW5kIG9mIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIC0tICovCisKKyAgU1RSSU5HX1NBU0xfQVVUSFpJRCwgICAgICAgICAgLyogQ1VSTE9QVF9TQVNMX0FVVEhaSUQgKi8KKworICBTVFJJTkdfVEVNUF9VUkwsICAgICAgICAgICAgICAvKiB0ZW1wIFVSTCBzdG9yYWdlIGZvciBwcm94eSB1c2UgKi8KKworICBTVFJJTkdfRE5TX1NFUlZFUlMsCisgIFNUUklOR19ETlNfSU5URVJGQUNFLAorICBTVFJJTkdfRE5TX0xPQ0FMX0lQNCwKKyAgU1RSSU5HX0ROU19MT0NBTF9JUDYsCisKKyAgLyogLS0gZW5kIG9mIG51bGwtdGVybWluYXRlZCBzdHJpbmdzIC0tICovCiAKICAgU1RSSU5HX0xBU1RaRVJPVEVSTUlOQVRFRCwKIApAQCAtMTUwMCw5ICsxNTczLDIwIEBACiAKICAgU1RSSU5HX0NPUFlQT1NURklFTERTLCAgLyogaWYgUE9TVCwgc2V0IHRoZSBmaWVsZHMnIHZhbHVlcyBoZXJlICovCiAKKwogICBTVFJJTkdfTEFTVCAvKiBub3QgdXNlZCwganVzdCBhbiBlbmQtb2YtbGlzdCBtYXJrZXIgKi8KIH07CiAKK2VudW0gZHVwYmxvYiB7CisgIEJMT0JfQ0VSVF9PUklHLAorICBCTE9CX0NFUlRfUFJPWFksCisgIEJMT0JfS0VZX09SSUcsCisgIEJMT0JfS0VZX1BST1hZLAorICBCTE9CX1NTTF9JU1NVRVJDRVJUX09SSUcsCisgIEJMT0JfU1NMX0lTU1VFUkNFUlRfUFJPWFksCisgIEJMT0JfTEFTVAorfTsKKwogLyogY2FsbGJhY2sgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoaXMgZWFzeSBoYW5kbGUgaXMgY29tcGxldGVkIHdpdGhpbiBhIG11bHRpCiAgICBoYW5kbGUuICBPbmx5IHVzZWQgZm9yIGludGVybmFsbHkgY3JlYXRlZCB0cmFuc2ZlcnMsIGxpa2UgZm9yIGV4YW1wbGUKICAgIERvSC4gKi8KQEAgLTE2MDAsMTEgKzE2ODQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0bmFtZSBhbmQgcG9ydCB0byBjb25uZWN0IHRvICovCiAgIGN1cmxfVGltZUNvbmQgdGltZWNvbmRpdGlvbjsgLyoga2luZCBvZiB0aW1lL2RhdGUgY29tcGFyaXNvbiAqLwogICB0aW1lX3QgdGltZXZhbHVlOyAgICAgICAvKiB3aGF0IHRpbWUgdG8gY29tcGFyZSB3aXRoICovCi0gIEN1cmxfSHR0cFJlcSBodHRwcmVxOyAgIC8qIHdoYXQga2luZCBvZiBIVFRQIHJlcXVlc3QgKGlmIGFueSkgaXMgdGhpcyAqLworICBDdXJsX0h0dHBSZXEgbWV0aG9kOyAgIC8qIHdoYXQga2luZCBvZiBIVFRQIHJlcXVlc3QgKGlmIGFueSkgaXMgdGhpcyAqLwogICBsb25nIGh0dHB2ZXJzaW9uOyAvKiB3aGVuIG5vbi16ZXJvLCBhIHNwZWNpZmljIEhUVFAgdmVyc2lvbiByZXF1ZXN0ZWQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCBpbiB0aGUgbGlicmFyeSdzIHJlcXVlc3QocykgKi8KICAgc3RydWN0IHNzbF9jb25maWdfZGF0YSBzc2w7ICAvKiB1c2VyIGRlZmluZWQgU1NMIHN0dWZmICovCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHByb3h5X3NzbDsgIC8qIHVzZXIgZGVmaW5lZCBTU0wgc3R1ZmYgZm9yIHByb3h5ICovCisjZW5kaWYKICAgc3RydWN0IHNzbF9nZW5lcmFsX2NvbmZpZyBnZW5lcmFsX3NzbDsgLyogZ2VuZXJhbCB1c2VyIGRlZmluZWQgU1NMIHN0dWZmICovCiAgIGN1cmxfcHJveHl0eXBlIHByb3h5dHlwZTsgLyogd2hhdCBraW5kIG9mIHByb3h5IHRoYXQgaXMgaW4gdXNlICovCiAgIGxvbmcgZG5zX2NhY2hlX3RpbWVvdXQ7IC8qIEROUyBjYWNoZSB0aW1lb3V0ICovCkBAIC0xNjM0LDYgKzE3MjAsNyBAQAogICBsb25nIG5ld19kaXJlY3RvcnlfcGVybXM7IC8qIFBlcm1pc3Npb25zIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHJlbW90ZSBkaXJzICovCiAgIGxvbmcgc3NoX2F1dGhfdHlwZXM7ICAgLyogYWxsb3dlZCBTU0ggYXV0aCB0eXBlcyAqLwogICBjaGFyICpzdHJbU1RSSU5HX0xBU1RdOyAvKiBhcnJheSBvZiBzdHJpbmdzLCBwb2ludGluZyB0byBhbGxvY2F0ZWQgbWVtb3J5ICovCisgIHN0cnVjdCBjdXJsX2Jsb2IgKmJsb2JzW0JMT0JfTEFTVF07CiAgIHVuc2lnbmVkIGludCBzY29wZV9pZDsgIC8qIFNjb3BlIGlkIGZvciBJUHY2ICovCiAgIGxvbmcgYWxsb3dlZF9wcm90b2NvbHM7CiAgIGxvbmcgcmVkaXJfcHJvdG9jb2xzOwpAQCAtMTY3MSw4NCArMTc1OCw4NCBAQAogICBDVVJMVSAqdWg7IC8qIFVSTCBoYW5kbGUgZm9yIHRoZSBjdXJyZW50IHBhcnNlZCBVUkwgKi8KICAgdm9pZCAqdHJhaWxlcl9kYXRhOyAvKiBwb2ludGVyIHRvIHBhc3MgdG8gdHJhaWxlciBkYXRhIGNhbGxiYWNrICovCiAgIGN1cmxfdHJhaWxlcl9jYWxsYmFjayB0cmFpbGVyX2NhbGxiYWNrOyAvKiB0cmFpbGluZyBkYXRhIGNhbGxiYWNrICovCi0gIGJpdCBpc19mcmVhZF9zZXQ6MTsgLyogaGFzIHJlYWQgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCi0gIGJpdCBpc19md3JpdGVfc2V0OjE7IC8qIGhhcyB3cml0ZSBjYWxsYmFjayBiZWVuIHNldCB0byBub24tTlVMTD8gKi8KLSAgYml0IGZyZWVfcmVmZXJlcjoxOyAvKiBzZXQgVFJVRSBpZiAncmVmZXJlcicgcG9pbnRzIHRvIGEgc3RyaW5nIHdlCisgIEJJVChpc19mcmVhZF9zZXQpOyAvKiBoYXMgcmVhZCBjYWxsYmFjayBiZWVuIHNldCB0byBub24tTlVMTD8gKi8KKyAgQklUKGlzX2Z3cml0ZV9zZXQpOyAvKiBoYXMgd3JpdGUgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCisgIEJJVChmcmVlX3JlZmVyZXIpOyAvKiBzZXQgVFJVRSBpZiAncmVmZXJlcicgcG9pbnRzIHRvIGEgc3RyaW5nIHdlCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgKi8KLSAgYml0IHRmdHBfbm9fb3B0aW9uczoxOyAvKiBkbyBub3Qgc2VuZCBURlRQIG9wdGlvbnMgcmVxdWVzdHMgKi8KLSAgYml0IHNlcF9oZWFkZXJzOjE7ICAgICAvKiBoYW5kbGUgaG9zdCBhbmQgcHJveHkgaGVhZGVycyBzZXBhcmF0ZWx5ICovCi0gIGJpdCBjb29raWVzZXNzaW9uOjE7ICAgLyogbmV3IGNvb2tpZSBzZXNzaW9uPyAqLwotICBiaXQgY3JsZjoxOyAgICAgICAgICAgIC8qIGNvbnZlcnQgY3JsZiBvbiBmdHAgdXBsb2FkKD8pICovCi0gIGJpdCBzdHJpcF9wYXRoX3NsYXNoOjE7IC8qIHN0cmlwIG9mZiBpbml0aWFsIHNsYXNoIGZyb20gcGF0aCAqLwotICBiaXQgc3NoX2NvbXByZXNzaW9uOjE7ICAgICAgICAgICAgLyogZW5hYmxlIFNTSCBjb21wcmVzc2lvbiAqLworICBCSVQodGZ0cF9ub19vcHRpb25zKTsgLyogZG8gbm90IHNlbmQgVEZUUCBvcHRpb25zIHJlcXVlc3RzICovCisgIEJJVChzZXBfaGVhZGVycyk7ICAgICAvKiBoYW5kbGUgaG9zdCBhbmQgcHJveHkgaGVhZGVycyBzZXBhcmF0ZWx5ICovCisgIEJJVChjb29raWVzZXNzaW9uKTsgICAvKiBuZXcgY29va2llIHNlc3Npb24/ICovCisgIEJJVChjcmxmKTsgICAgICAgICAgICAvKiBjb252ZXJ0IGNybGYgb24gZnRwIHVwbG9hZCg/KSAqLworICBCSVQoc3RyaXBfcGF0aF9zbGFzaCk7IC8qIHN0cmlwIG9mZiBpbml0aWFsIHNsYXNoIGZyb20gcGF0aCAqLworICBCSVQoc3NoX2NvbXByZXNzaW9uKTsgICAgICAgICAgICAvKiBlbmFibGUgU1NIIGNvbXByZXNzaW9uICovCiAKIC8qIEhlcmUgZm9sbG93cyBib29sZWFuIHNldHRpbmdzIHRoYXQgZGVmaW5lIGhvdyB0byBiZWhhdmUgZHVyaW5nCiAgICB0aGlzIHNlc3Npb24uIFRoZXkgYXJlIFNUQVRJQywgc2V0IGJ5IGxpYmN1cmwgdXNlcnMgb3IgYXQgbGVhc3QgaW5pdGlhbGx5CiAgICBhbmQgdGhleSBkb24ndCBjaGFuZ2UgZHVyaW5nIG9wZXJhdGlvbnMuICovCi0gIGJpdCBnZXRfZmlsZXRpbWU6MTsgICAgIC8qIGdldCB0aGUgdGltZSBhbmQgZ2V0IG9mIHRoZSByZW1vdGUgZmlsZSAqLwotICBiaXQgdHVubmVsX3RocnVfaHR0cHByb3h5OjE7IC8qIHVzZSBDT05ORUNUIHRocm91Z2ggYSBIVFRQIHByb3h5ICovCi0gIGJpdCBwcmVmZXJfYXNjaWk6MTsgICAgIC8qIEFTQ0lJIHJhdGhlciB0aGFuIGJpbmFyeSAqLwotICBiaXQgZnRwX2FwcGVuZDoxOyAgICAgICAvKiBhcHBlbmQsIG5vdCBvdmVyd3JpdGUsIG9uIHVwbG9hZCAqLwotICBiaXQgZnRwX2xpc3Rfb25seToxOyAgICAvKiBzd2l0Y2ggRlRQIGNvbW1hbmQgZm9yIGxpc3RpbmcgZGlyZWN0b3JpZXMgKi8KKyAgQklUKGdldF9maWxldGltZSk7ICAgICAvKiBnZXQgdGhlIHRpbWUgYW5kIGdldCBvZiB0aGUgcmVtb3RlIGZpbGUgKi8KKyAgQklUKHR1bm5lbF90aHJ1X2h0dHBwcm94eSk7IC8qIHVzZSBDT05ORUNUIHRocm91Z2ggYSBIVFRQIHByb3h5ICovCisgIEJJVChwcmVmZXJfYXNjaWkpOyAgICAgLyogQVNDSUkgcmF0aGVyIHRoYW4gYmluYXJ5ICovCisgIEJJVChmdHBfYXBwZW5kKTsgICAgICAgLyogYXBwZW5kLCBub3Qgb3ZlcndyaXRlLCBvbiB1cGxvYWQgKi8KKyAgQklUKGZ0cF9saXN0X29ubHkpOyAgICAvKiBzd2l0Y2ggRlRQIGNvbW1hbmQgZm9yIGxpc3RpbmcgZGlyZWN0b3JpZXMgKi8KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAotICBiaXQgZnRwX3VzZV9wb3J0OjE7ICAgICAvKiB1c2UgdGhlIEZUUCBQT1JUIGNvbW1hbmQgKi8KLSAgYml0IGZ0cF91c2VfZXBzdjoxOyAgIC8qIGlmIEVQU1YgaXMgdG8gYmUgYXR0ZW1wdGVkIG9yIG5vdCAqLwotICBiaXQgZnRwX3VzZV9lcHJ0OjE7ICAgLyogaWYgRVBSVCBpcyB0byBiZSBhdHRlbXB0ZWQgb3Igbm90ICovCi0gIGJpdCBmdHBfdXNlX3ByZXQ6MTsgICAvKiBpZiBQUkVUIGlzIHRvIGJlIHVzZWQgYmVmb3JlIFBBU1Ygb3Igbm90ICovCi0gIGJpdCBmdHBfc2tpcF9pcDoxOyAgICAvKiBza2lwIHRoZSBJUCBhZGRyZXNzIHRoZSBGVFAgc2VydmVyIHBhc3NlcyBvbiB0bworICBCSVQoZnRwX3VzZV9wb3J0KTsgICAgIC8qIHVzZSB0aGUgRlRQIFBPUlQgY29tbWFuZCAqLworICBCSVQoZnRwX3VzZV9lcHN2KTsgICAgIC8qIGlmIEVQU1YgaXMgdG8gYmUgYXR0ZW1wdGVkIG9yIG5vdCAqLworICBCSVQoZnRwX3VzZV9lcHJ0KTsgICAgIC8qIGlmIEVQUlQgaXMgdG8gYmUgYXR0ZW1wdGVkIG9yIG5vdCAqLworICBCSVQoZnRwX3VzZV9wcmV0KTsgICAgIC8qIGlmIFBSRVQgaXMgdG8gYmUgdXNlZCBiZWZvcmUgUEFTViBvciBub3QgKi8KKyAgQklUKGZ0cF9za2lwX2lwKTsgICAgICAvKiBza2lwIHRoZSBJUCBhZGRyZXNzIHRoZSBGVFAgc2VydmVyIHBhc3NlcyBvbiB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzICovCiAjZW5kaWYKLSAgYml0IGhpZGVfcHJvZ3Jlc3M6MTsgICAgLyogZG9uJ3QgdXNlIHRoZSBwcm9ncmVzcyBtZXRlciAqLwotICBiaXQgaHR0cF9mYWlsX29uX2Vycm9yOjE7ICAvKiBmYWlsIG9uIEhUVFAgZXJyb3IgY29kZXMgPj0gNDAwICovCi0gIGJpdCBodHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcjoxOyAvKiBmb3IgSFRUUCBzdGF0dXMgY29kZXMgPj0gMzAwICovCi0gIGJpdCBodHRwX2ZvbGxvd19sb2NhdGlvbjoxOyAvKiBmb2xsb3cgSFRUUCByZWRpcmVjdHMgKi8KLSAgYml0IGh0dHBfdHJhbnNmZXJfZW5jb2Rpbmc6MTsgLyogcmVxdWVzdCBjb21wcmVzc2VkIEhUVFAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyLWVuY29kaW5nICovCi0gIGJpdCBhbGxvd19hdXRoX3RvX290aGVyX2hvc3RzOjE7Ci0gIGJpdCBpbmNsdWRlX2hlYWRlcjoxOyAvKiBpbmNsdWRlIHJlY2VpdmVkIHByb3RvY29sIGhlYWRlcnMgaW4gZGF0YSBvdXRwdXQgKi8KLSAgYml0IGh0dHBfc2V0X3JlZmVyZXI6MTsgLyogaXMgYSBjdXN0b20gcmVmZXJlciB1c2VkICovCi0gIGJpdCBodHRwX2F1dG9fcmVmZXJlcjoxOyAvKiBzZXQgImNvcnJlY3QiIHJlZmVyZXIgd2hlbiBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogKi8KLSAgYml0IG9wdF9ub19ib2R5OjE7ICAgIC8qIGFzIHNldCB3aXRoIENVUkxPUFRfTk9CT0RZICovCi0gIGJpdCB1cGxvYWQ6MTsgICAgICAgICAvKiB1cGxvYWQgcmVxdWVzdCAqLwotICBiaXQgdmVyYm9zZToxOyAgICAgICAgLyogb3V0cHV0IHZlcmJvc2l0eSAqLwotICBiaXQga3JiOjE7ICAgICAgICAgICAgLyogS2VyYmVyb3MgY29ubmVjdGlvbiByZXF1ZXN0ZWQgKi8KLSAgYml0IHJldXNlX2ZvcmJpZDoxOyAgIC8qIGZvcmJpZGRlbiB0byBiZSByZXVzZWQsIGNsb3NlIGFmdGVyIHVzZSAqLwotICBiaXQgcmV1c2VfZnJlc2g6MTsgICAgLyogZG8gbm90IHJlLXVzZSBhbiBleGlzdGluZyBjb25uZWN0aW9uICAqLwotCi0gIGJpdCBub19zaWduYWw6MTsgICAgICAvKiBkbyBub3QgdXNlIGFueSBzaWduYWwvYWxhcm0gaGFuZGxlciAqLwotICBiaXQgdGNwX25vZGVsYXk6MTsgICAgLyogd2hldGhlciB0byBlbmFibGUgVENQX05PREVMQVkgb3Igbm90ICovCi0gIGJpdCBpZ25vcmVjbDoxOyAgICAgICAvKiBpZ25vcmUgY29udGVudCBsZW5ndGggKi8KLSAgYml0IGNvbm5lY3Rfb25seToxOyAgIC8qIG1ha2UgY29ubmVjdGlvbiwgbGV0IGFwcGxpY2F0aW9uIHVzZSB0aGUgc29ja2V0ICovCi0gIGJpdCBodHRwX3RlX3NraXA6MTsgICAvKiBwYXNzIHRoZSByYXcgYm9keSBkYXRhIHRvIHRoZSB1c2VyLCBldmVuIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlci1lbmNvZGVkIChjaHVua2VkLCBjb21wcmVzc2VkKSAqLwotICBiaXQgaHR0cF9jZV9za2lwOjE7ICAgLyogcGFzcyB0aGUgcmF3IGJvZHkgZGF0YSB0byB0aGUgdXNlciwgZXZlbiB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC1lbmNvZGVkIChjaHVua2VkLCBjb21wcmVzc2VkKSAqLwotICBiaXQgcHJveHlfdHJhbnNmZXJfbW9kZToxOyAvKiBzZXQgdHJhbnNmZXIgbW9kZSAoO3R5cGU9PGF8aT4pIHdoZW4gZG9pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUUCB2aWEgYW4gSFRUUCBwcm94eSAqLworICBCSVQoaGlkZV9wcm9ncmVzcyk7ICAgIC8qIGRvbid0IHVzZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KKyAgQklUKGh0dHBfZmFpbF9vbl9lcnJvcik7ICAvKiBmYWlsIG9uIEhUVFAgZXJyb3IgY29kZXMgPj0gNDAwICovCisgIEJJVChodHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcik7IC8qIGZvciBIVFRQIHN0YXR1cyBjb2RlcyA+PSAzMDAgKi8KKyAgQklUKGh0dHBfZm9sbG93X2xvY2F0aW9uKTsgLyogZm9sbG93IEhUVFAgcmVkaXJlY3RzICovCisgIEJJVChodHRwX3RyYW5zZmVyX2VuY29kaW5nKTsgLyogcmVxdWVzdCBjb21wcmVzc2VkIEhUVFAgdHJhbnNmZXItZW5jb2RpbmcgKi8KKyAgQklUKGFsbG93X2F1dGhfdG9fb3RoZXJfaG9zdHMpOworICBCSVQoaW5jbHVkZV9oZWFkZXIpOyAvKiBpbmNsdWRlIHJlY2VpdmVkIHByb3RvY29sIGhlYWRlcnMgaW4gZGF0YSBvdXRwdXQgKi8KKyAgQklUKGh0dHBfc2V0X3JlZmVyZXIpOyAvKiBpcyBhIGN1c3RvbSByZWZlcmVyIHVzZWQgKi8KKyAgQklUKGh0dHBfYXV0b19yZWZlcmVyKTsgLyogc2V0ICJjb3JyZWN0IiByZWZlcmVyIHdoZW4gZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAqLworICBCSVQob3B0X25vX2JvZHkpOyAgICAvKiBhcyBzZXQgd2l0aCBDVVJMT1BUX05PQk9EWSAqLworICBCSVQodXBsb2FkKTsgICAgICAgICAvKiB1cGxvYWQgcmVxdWVzdCAqLworICBCSVQodmVyYm9zZSk7ICAgICAgICAvKiBvdXRwdXQgdmVyYm9zaXR5ICovCisgIEJJVChrcmIpOyAgICAgICAgICAgIC8qIEtlcmJlcm9zIGNvbm5lY3Rpb24gcmVxdWVzdGVkICovCisgIEJJVChyZXVzZV9mb3JiaWQpOyAgIC8qIGZvcmJpZGRlbiB0byBiZSByZXVzZWQsIGNsb3NlIGFmdGVyIHVzZSAqLworICBCSVQocmV1c2VfZnJlc2gpOyAgICAvKiBkbyBub3QgcmUtdXNlIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gICovCisgIEJJVChub19zaWduYWwpOyAgICAgIC8qIGRvIG5vdCB1c2UgYW55IHNpZ25hbC9hbGFybSBoYW5kbGVyICovCisgIEJJVCh0Y3Bfbm9kZWxheSk7ICAgIC8qIHdoZXRoZXIgdG8gZW5hYmxlIFRDUF9OT0RFTEFZIG9yIG5vdCAqLworICBCSVQoaWdub3JlY2wpOyAgICAgICAvKiBpZ25vcmUgY29udGVudCBsZW5ndGggKi8KKyAgQklUKGNvbm5lY3Rfb25seSk7ICAgLyogbWFrZSBjb25uZWN0aW9uLCBsZXQgYXBwbGljYXRpb24gdXNlIHRoZSBzb2NrZXQgKi8KKyAgQklUKGh0dHBfdGVfc2tpcCk7ICAgLyogcGFzcyB0aGUgcmF3IGJvZHkgZGF0YSB0byB0aGUgdXNlciwgZXZlbiB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyLWVuY29kZWQgKGNodW5rZWQsIGNvbXByZXNzZWQpICovCisgIEJJVChodHRwX2NlX3NraXApOyAgIC8qIHBhc3MgdGhlIHJhdyBib2R5IGRhdGEgdG8gdGhlIHVzZXIsIGV2ZW4gd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LWVuY29kZWQgKGNodW5rZWQsIGNvbXByZXNzZWQpICovCisgIEJJVChwcm94eV90cmFuc2Zlcl9tb2RlKTsgLyogc2V0IHRyYW5zZmVyIG1vZGUgKDt0eXBlPTxhfGk+KSB3aGVuIGRvaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRQIHZpYSBhbiBIVFRQIHByb3h5ICovCiAjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQotICBiaXQgc29ja3M1X2dzc2FwaV9uZWM6MTsgLyogRmxhZyB0byBzdXBwb3J0IE5FQyBTT0NLUzUgc2VydmVyICovCisgIEJJVChzb2NrczVfZ3NzYXBpX25lYyk7IC8qIEZsYWcgdG8gc3VwcG9ydCBORUMgU09DS1M1IHNlcnZlciAqLwogI2VuZGlmCi0gIGJpdCBzYXNsX2lyOjE7ICAgICAgICAgLyogRW5hYmxlL2Rpc2FibGUgU0FTTCBpbml0aWFsIHJlc3BvbnNlICovCi0gIGJpdCB3aWxkY2FyZF9lbmFibGVkOjE7IC8qIGVuYWJsZSB3aWxkY2FyZCBtYXRjaGluZyAqLwotICBiaXQgdGNwX2tlZXBhbGl2ZToxOyAgLyogdXNlIFRDUCBrZWVwYWxpdmVzICovCi0gIGJpdCB0Y3BfZmFzdG9wZW46MTsgICAvKiB1c2UgVENQIEZhc3QgT3BlbiAqLwotICBiaXQgc3NsX2VuYWJsZV9ucG46MTsgLyogVExTIE5QTiBleHRlbnNpb24/ICovCi0gIGJpdCBzc2xfZW5hYmxlX2FscG46MTsvKiBUTFMgQUxQTiBleHRlbnNpb24/ICovCi0gIGJpdCBwYXRoX2FzX2lzOjE7ICAgICAvKiBhbGxvdyBkb3Rkb3RzPyAqLwotICBiaXQgcGlwZXdhaXQ6MTsgICAgICAgLyogd2FpdCBmb3IgbXVsdGlwbGV4IHN0YXR1cyBiZWZvcmUgc3RhcnRpbmcgYSBuZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KLSAgYml0IHN1cHByZXNzX2Nvbm5lY3RfaGVhZGVyczoxOyAvKiBzdXBwcmVzcyBwcm94eSBDT05ORUNUIHJlc3BvbnNlIGhlYWRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB1c2VyIGNhbGxiYWNrcyAqLwotICBiaXQgZG5zX3NodWZmbGVfYWRkcmVzc2VzOjE7IC8qIHdoZXRoZXIgdG8gc2h1ZmZsZSBhZGRyZXNzZXMgYmVmb3JlIHVzZSAqLwotICBiaXQgc3RyZWFtX2RlcGVuZHNfZToxOyAvKiBzZXQgb3IgZG9uJ3Qgc2V0IHRoZSBFeGNsdXNpdmUgYml0ICovCi0gIGJpdCBoYXByb3h5cHJvdG9jb2w6MTsgLyogd2hldGhlciB0byBzZW5kIEhBUHJveHkgUFJPWFkgcHJvdG9jb2wgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyICovCi0gIGJpdCBhYnN0cmFjdF91bml4X3NvY2tldDoxOwotICBiaXQgZGlzYWxsb3dfdXNlcm5hbWVfaW5fdXJsOjE7IC8qIGRpc2FsbG93IHVzZXJuYW1lIGluIHVybCAqLwotICBiaXQgZG9oOjE7IC8qIEROUy1vdmVyLUhUVFBTIGVuYWJsZWQgKi8KLSAgYml0IGRvaF9nZXQ6MTsgLyogdXNlIEdFVCBmb3IgRG9IIHJlcXVlc3RzLCBpbnN0ZWFkIG9mIFBPU1QgKi8KLSAgYml0IGh0dHAwOV9hbGxvd2VkOjE7IC8qIGFsbG93IEhUVFAvMC45IHJlc3BvbnNlcyAqLworICBCSVQoc2FzbF9pcik7ICAgICAgICAgLyogRW5hYmxlL2Rpc2FibGUgU0FTTCBpbml0aWFsIHJlc3BvbnNlICovCisgIEJJVCh3aWxkY2FyZF9lbmFibGVkKTsgLyogZW5hYmxlIHdpbGRjYXJkIG1hdGNoaW5nICovCisgIEJJVCh0Y3Bfa2VlcGFsaXZlKTsgIC8qIHVzZSBUQ1Aga2VlcGFsaXZlcyAqLworICBCSVQodGNwX2Zhc3RvcGVuKTsgICAvKiB1c2UgVENQIEZhc3QgT3BlbiAqLworICBCSVQoc3NsX2VuYWJsZV9ucG4pOyAvKiBUTFMgTlBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKHNzbF9lbmFibGVfYWxwbik7LyogVExTIEFMUE4gZXh0ZW5zaW9uPyAqLworICBCSVQocGF0aF9hc19pcyk7ICAgICAvKiBhbGxvdyBkb3Rkb3RzPyAqLworICBCSVQocGlwZXdhaXQpOyAgICAgICAvKiB3YWl0IGZvciBtdWx0aXBsZXggc3RhdHVzIGJlZm9yZSBzdGFydGluZyBhIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCisgIEJJVChzdXBwcmVzc19jb25uZWN0X2hlYWRlcnMpOyAvKiBzdXBwcmVzcyBwcm94eSBDT05ORUNUIHJlc3BvbnNlIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdXNlciBjYWxsYmFja3MgKi8KKyAgQklUKGRuc19zaHVmZmxlX2FkZHJlc3Nlcyk7IC8qIHdoZXRoZXIgdG8gc2h1ZmZsZSBhZGRyZXNzZXMgYmVmb3JlIHVzZSAqLworICBCSVQoc3RyZWFtX2RlcGVuZHNfZSk7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KKyAgQklUKGhhcHJveHlwcm90b2NvbCk7IC8qIHdoZXRoZXIgdG8gc2VuZCBIQVByb3h5IFBST1hZIHByb3RvY29sIHYxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKi8KKyAgQklUKGFic3RyYWN0X3VuaXhfc29ja2V0KTsKKyAgQklUKGRpc2FsbG93X3VzZXJuYW1lX2luX3VybCk7IC8qIGRpc2FsbG93IHVzZXJuYW1lIGluIHVybCAqLworICBCSVQoZG9oKTsgLyogRE5TLW92ZXItSFRUUFMgZW5hYmxlZCAqLworICBCSVQoZG9oX2dldCk7IC8qIHVzZSBHRVQgZm9yIERvSCByZXF1ZXN0cywgaW5zdGVhZCBvZiBQT1NUICovCisgIEJJVChodHRwMDlfYWxsb3dlZCk7IC8qIGFsbG93IEhUVFAvMC45IHJlc3BvbnNlcyAqLworICBCSVQobWFpbF9yY3B0X2FsbG93ZmFpbHMpOyAvKiBhbGxvdyBSQ1BUIFRPIGNvbW1hbmQgdG8gZmFpbCBmb3Igc29tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGllbnRzICovCiB9OwogCiBzdHJ1Y3QgTmFtZXMgewpAQCAtMTc3Nyw3ICsxODY0LDYgQEAKIAogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgY29ubmVjdF9xdWV1ZTsKLSAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBzaF9xdWV1ZTsgLyogbGlzdCBwZXIgQ3VybF9zaF9lbnRyeSAqLwogICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50IGNvbm5fcXVldWU7IC8qIGxpc3QgcGVyIGNvbm5lY3RkYXRhICovCiAKICAgQ1VSTE1zdGF0ZSBtc3RhdGU7ICAvKiB0aGUgaGFuZGxlJ3Mgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2NsZWFydGV4dC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY2xlYXJ0ZXh0LmMKaW5kZXggNmY0NTJjMS4uM2E1Yzk0MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY2xlYXJ0ZXh0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY2xlYXJ0ZXh0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTgxLDcgKzgxLDggQEAKICAgcGxlbiA9IHN0cmxlbihwYXNzd2QpOwogCiAgIC8qIENvbXB1dGUgYmluYXJ5IG1lc3NhZ2UgbGVuZ3RoLiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLwotICBpZigoKHpsZW4gKyBjbGVuKSA+IFNJWkVfVF9NQVgvNCkgfHwgKHBsZW4gPiAoU0laRV9UX01BWC8yIC0gMikpKQorICBpZigoemxlbiA+IFNJWkVfVF9NQVgvNCkgfHwgKGNsZW4gPiBTSVpFX1RfTUFYLzQpIHx8CisgICAgIChwbGVuID4gKFNJWkVfVF9NQVgvMiAtIDIpKSkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgcGxhaW5sZW4gPSB6bGVuICsgY2xlbiArIHBsZW4gKyAyOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9jcmFtLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9jcmFtLmMKaW5kZXggZDE0ODYxOC4uNzE3ZDdmMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY3JhbS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2NyYW0uYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtOTYsNyArOTYsNyBAQAogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc2l6ZV90IGNobGdsZW4gPSAwOwotICBITUFDX2NvbnRleHQgKmN0eHQ7CisgIHN0cnVjdCBITUFDX2NvbnRleHQgKmN0eHQ7CiAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W01ENV9ESUdFU1RfTEVOXTsKICAgY2hhciAqcmVzcG9uc2U7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2RpZ2VzdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKaW5kZXggZjljZGM5ZC4uYjkyMTBhOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTYyLDcgKzYyLDcgQEAKICAgIHdoYXQgdWx0aW1hdGVseSBnb2VzIG92ZXIgdGhlIG5ldHdvcmsuCiAqLwogI2RlZmluZSBDVVJMX09VVFBVVF9ESUdFU1RfQ09OVihhLCBiKSBcCi0gIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGEsIChjaGFyICopYiwgc3RybGVuKChjb25zdCBjaGFyICopYikpOyBcCisgIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGEsIGIsIHN0cmxlbihiKSk7IFwKICAgaWYocmVzdWx0KSB7IFwKICAgICBmcmVlKGIpOyBcCiAgICAgcmV0dXJuIHJlc3VsdDsgXApAQCAtMzU3LDkgKzM1Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dHB0ciwgc2l6ZV90ICpvdXRsZW4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzaXplX3QgaTsKLSAgTUQ1X2NvbnRleHQgKmN0eHQ7CisgIHN0cnVjdCBNRDVfY29udGV4dCAqY3R4dDsKICAgY2hhciAqcmVzcG9uc2UgPSBOVUxMOwogICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtNRDVfRElHRVNUX0xFTl07CiAgIGNoYXIgSEExX2hleFsyICogTUQ1X0RJR0VTVF9MRU4gKyAxXTsKQEAgLTM3NywxMCArMzc2LDEyIEBACiAgIGNoYXIgKnNwbiAgICAgICAgID0gTlVMTDsKIAogICAvKiBEZWNvZGUgdGhlIGNoYWxsZW5nZSBtZXNzYWdlICovCi0gIHJlc3VsdCA9IGF1dGhfZGVjb2RlX2RpZ2VzdF9tZDVfbWVzc2FnZShjaGxnNjQsIG5vbmNlLCBzaXplb2Yobm9uY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIHNpemVvZihyZWFsbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG0sIHNpemVvZihhbGdvcml0aG0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcW9wX29wdGlvbnMsIHNpemVvZihxb3Bfb3B0aW9ucykpOworICBDVVJMY29kZSByZXN1bHQgPSBhdXRoX2RlY29kZV9kaWdlc3RfbWQ1X21lc3NhZ2UoY2hsZzY0LCBub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihub25jZSksIHJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlYWxtKSwgYWxnb3JpdGhtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFsZ29yaXRobSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxb3Bfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihxb3Bfb3B0aW9ucykpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNjU5LDcgKzY2MCw3IEBACiB9CiAKIC8qCi0gKiBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKCkKKyAqIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoKQogICoKICAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIEhUVFAgRElHRVNUIHJlc3BvbnNlIG1lc3NhZ2UgcmVhZHkgZm9yIHNlbmRpbmcKICAqIHRvIHRoZSByZWNpcGllbnQuCkBAIC02NzgsNyArNjc5LDcgQEAKICAqCiAgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBDVVJMY29kZSBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKAorc3RhdGljIENVUkxjb2RlIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNlcnAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd2RwLApAQCAtNjg3LDEyICs2ODgsMTIgQEAKICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaWdlc3RkYXRhICpkaWdlc3QsCiAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLCBzaXplX3QgKm91dGxlbiwKICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjb252ZXJ0X3RvX2FzY2lpKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiksCi0gICAgICAgICAgICAgICAgICB2b2lkICgqaGFzaCkodW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICopKQorICAgICAgICAgICAgICAgICAgdm9pZCAoKmhhc2gpKHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCkpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKICAgdW5zaWduZWQgY2hhciBoYXNoYnVmWzMyXTsgLyogMzIgYnl0ZXMvMjU2IGJpdHMgKi8KICAgdW5zaWduZWQgY2hhciByZXF1ZXN0X2RpZ2VzdFs2NV07Ci0gIHVuc2lnbmVkIGNoYXIgKmhhc2h0aGlzOwogICB1bnNpZ25lZCBjaGFyIGhhMVs2NV07ICAgIC8qIDY0IGRpZ2l0cyBhbmQgMSB6ZXJvIGJ5dGUgKi8KICAgdW5zaWduZWQgY2hhciBoYTJbNjVdOyAgICAvKiA2NCBkaWdpdHMgYW5kIDEgemVybyBieXRlICovCiAgIGNoYXIgdXNlcmhbNjVdOwpAQCAtNzAwLDYgKzcwMSw3IEBACiAgIHNpemVfdCBjbm9uY2Vfc3ogPSAwOwogICBjaGFyICp1c2VycF9xdW90ZWQ7CiAgIGNoYXIgKnJlc3BvbnNlID0gTlVMTDsKKyAgY2hhciAqaGFzaHRoaXMgPSBOVUxMOwogICBjaGFyICp0bXAgPSBOVUxMOwogCiAgIGlmKCFkaWdlc3QtPm5jKQpAQCAtNzIxLDEyICs3MjMsMTIgQEAKICAgfQogCiAgIGlmKGRpZ2VzdC0+dXNlcmhhc2gpIHsKLSAgICBoYXNodGhpcyA9ICh1bnNpZ25lZCBjaGFyICopIGFwcmludGYoIiVzOiVzIiwgdXNlcnAsIGRpZ2VzdC0+cmVhbG0pOworICAgIGhhc2h0aGlzID0gYXByaW50ZigiJXM6JXMiLCB1c2VycCwgZGlnZXN0LT5yZWFsbSk7CiAgICAgaWYoIWhhc2h0aGlzKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgICBDVVJMX09VVFBVVF9ESUdFU1RfQ09OVihkYXRhLCBoYXNodGhpcyk7Ci0gICAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgICAgaGFzaChoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKSBoYXNodGhpcywgc3RybGVuKGhhc2h0aGlzKSk7CiAgICAgZnJlZShoYXNodGhpcyk7CiAgICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKXVzZXJoKTsKICAgfQpAQCAtNzQyLDE0ICs3NDQsMTMgQEAKICAgICAgICAgICAgdW5xKG5vbmNlLXZhbHVlKSAiOiIgdW5xKGNub25jZS12YWx1ZSkKICAgKi8KIAotICBoYXNodGhpcyA9ICh1bnNpZ25lZCBjaGFyICopCi0gICAgYXByaW50ZigiJXM6JXM6JXMiLCBkaWdlc3QtPnVzZXJoYXNoID8gdXNlcmggOiB1c2VycCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+cmVhbG0sIHBhc3N3ZHApOworICBoYXNodGhpcyA9IGFwcmludGYoIiVzOiVzOiVzIiwgZGlnZXN0LT51c2VyaGFzaCA/IHVzZXJoIDogdXNlcnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPnJlYWxtLCBwYXNzd2RwKTsKICAgaWYoIWhhc2h0aGlzKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTEpOwogCkBAIC03NjIsNyArNzYzLDcgQEAKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgICAgQ1VSTF9PVVRQVVRfRElHRVNUX0NPTlYoZGF0YSwgdG1wKTsgLyogQ29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgICBoYXNoKGhhc2hidWYsICh1bnNpZ25lZCBjaGFyICopIHRtcCk7CisgICAgaGFzaChoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKSB0bXAsIHN0cmxlbih0bXApKTsKICAgICBmcmVlKHRtcCk7CiAgICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTEpOwogICB9CkBAIC03ODAsMTkgKzc4MSwxOSBAQAogICAgIDUuMS4xIG9mIFJGQyAyNjE2KQogICAqLwogCi0gIGhhc2h0aGlzID0gKHVuc2lnbmVkIGNoYXIgKikgYXByaW50ZigiJXM6JXMiLCByZXF1ZXN0LCB1cmlwYXRoKTsKKyAgaGFzaHRoaXMgPSBhcHJpbnRmKCIlczolcyIsIHJlcXVlc3QsIHVyaXBhdGgpOwogICBpZighaGFzaHRoaXMpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgaWYoZGlnZXN0LT5xb3AgJiYgc3RyY2FzZWNvbXBhcmUoZGlnZXN0LT5xb3AsICJhdXRoLWludCIpKSB7CiAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBhdXRoLWludCBmb3IgUFVUIG9yIFBPU1QgKi8KICAgICBjaGFyIGhhc2hlZFs2NV07Ci0gICAgdW5zaWduZWQgY2hhciAqaGFzaHRoaXMyOworICAgIGNoYXIgKmhhc2h0aGlzMjsKIAotICAgIGhhc2goaGFzaGJ1ZiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikiIik7CisgICAgaGFzaChoYXNoYnVmLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSIiLCAwKTsKICAgICBjb252ZXJ0X3RvX2FzY2lpKGhhc2hidWYsICh1bnNpZ25lZCBjaGFyICopaGFzaGVkKTsKIAotICAgIGhhc2h0aGlzMiA9ICh1bnNpZ25lZCBjaGFyICopYXByaW50ZigiJXM6JXMiLCBoYXNodGhpcywgaGFzaGVkKTsKKyAgICBoYXNodGhpczIgPSBhcHJpbnRmKCIlczolcyIsIGhhc2h0aGlzLCBoYXNoZWQpOwogICAgIGZyZWUoaGFzaHRoaXMpOwogICAgIGhhc2h0aGlzID0gaGFzaHRoaXMyOwogICB9CkBAIC04MDEsMzEgKzgwMiwyMyBAQAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTIpOwogCiAgIGlmKGRpZ2VzdC0+cW9wKSB7Ci0gICAgaGFzaHRoaXMgPSAodW5zaWduZWQgY2hhciAqKSBhcHJpbnRmKCIlczolczolMDh4OiVzOiVzOiVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0LT5ub25jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPm5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+Y25vbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+cW9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhMik7CisgICAgaGFzaHRoaXMgPSBhcHJpbnRmKCIlczolczolMDh4OiVzOiVzOiVzIiwgaGExLCBkaWdlc3QtPm5vbmNlLCBkaWdlc3QtPm5jLAorICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPmNub25jZSwgZGlnZXN0LT5xb3AsIGhhMik7CiAgIH0KICAgZWxzZSB7Ci0gICAgaGFzaHRoaXMgPSAodW5zaWduZWQgY2hhciAqKSBhcHJpbnRmKCIlczolczolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+bm9uY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGEyKTsKKyAgICBoYXNodGhpcyA9IGFwcmludGYoIiVzOiVzOiVzIiwgaGExLCBkaWdlc3QtPm5vbmNlLCBoYTIpOwogICB9CiAKICAgaWYoIWhhc2h0aGlzKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCByZXF1ZXN0X2RpZ2VzdCk7CiAKQEAgLTg5OCw3ICs4OTEsNyBAQAogCiAgIGlmKGRpZ2VzdC0+YWxnb3JpdGhtKSB7CiAgICAgLyogQXBwZW5kIHRoZSBhbGdvcml0aG0gKi8KLSAgICB0bXAgPSBhcHJpbnRmKCIlcywgYWxnb3JpdGhtPVwiJXNcIiIsIHJlc3BvbnNlLCBkaWdlc3QtPmFsZ29yaXRobSk7CisgICAgdG1wID0gYXByaW50ZigiJXMsIGFsZ29yaXRobT0lcyIsIHJlc3BvbnNlLCBkaWdlc3QtPmFsZ29yaXRobSk7CiAgICAgZnJlZShyZXNwb25zZSk7CiAgICAgaWYoIXRtcCkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtOTU0LDIxICs5NDcsMjEgQEAKICAgc3dpdGNoKGRpZ2VzdC0+YWxnbykgewogICBjYXNlIENVUkxESUdFU1RBTEdPX01ENToKICAgY2FzZSBDVVJMRElHRVNUQUxHT19NRDVTRVNTOgotICAgIHJldHVybiBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKGRhdGEsIHVzZXJwLCBwYXNzd2RwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIHVyaXBhdGgsIGRpZ2VzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdHIsIG91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2RpZ2VzdF9tZDVfdG9fYXNjaWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9tZDVpdCk7CisgICAgcmV0dXJuIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdXJpcGF0aCwgZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB0ciwgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZGlnZXN0X21kNV90b19hc2NpaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX21kNWl0KTsKIAogICBjYXNlIENVUkxESUdFU1RBTEdPX1NIQTI1NjoKICAgY2FzZSBDVVJMRElHRVNUQUxHT19TSEEyNTZTRVNTOgogICBjYXNlIENVUkxESUdFU1RBTEdPX1NIQTUxMl8yNTY6CiAgIGNhc2UgQ1VSTERJR0VTVEFMR09fU0hBNTEyXzI1NlNFU1M6Ci0gICAgcmV0dXJuIF9DdXJsX2F1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdXJpcGF0aCwgZGlnZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB0ciwgb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZGlnZXN0X3NoYTI1Nl90b19hc2NpaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NoYTI1Nml0KTsKKyAgICByZXR1cm4gYXV0aF9jcmVhdGVfZGlnZXN0X2h0dHBfbWVzc2FnZShkYXRhLCB1c2VycCwgcGFzc3dkcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB1cmlwYXRoLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHRyLCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9kaWdlc3Rfc2hhMjU2X3RvX2FzY2lpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2hhMjU2aXQpOwogCiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaAppbmRleCA4Njg2YzQ0Li5jYzA1ZmRiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0X3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2RpZ2VzdF9zc3BpLmMKaW5kZXggZmU4MDkzZS4uNDk5ODMwNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0X3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3Rfc3NwaS5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDE0IC0gMjAxNiwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjEsNiArNjEsMTEgQEAKICAgc3RhdHVzID0gc19wU2VjRm4tPlF1ZXJ5U2VjdXJpdHlQYWNrYWdlSW5mbygoVENIQVIgKikgVEVYVChTUF9OQU1FX0RJR0VTVCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKwogICByZXR1cm4gKHN0YXR1cyA9PSBTRUNfRV9PSyA/IFRSVUUgOiBGQUxTRSk7CiB9CiAKQEAgLTEyOSw3ICsxMzQsOCBAQAogICBpZihzdGF0dXMgIT0gU0VDX0VfT0spIHsKICAgICBmcmVlKGlucHV0X3Rva2VuKTsKIAotICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisgICAgZmFpbGYoZGF0YSwgIlNTUEk6IGNvdWxkbid0IGdldCBhdXRoIGluZm9cbiIpOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgdG9rZW5fbWF4ID0gU2VjdXJpdHlQYWNrYWdlLT5jYk1heFRva2VuOwpAQCAtMjIwLDcgKzIyNiwxMCBAQAogICAgIGZyZWUob3V0cHV0X3Rva2VuKTsKICAgICBmcmVlKGlucHV0X3Rva2VuKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCkBAIC0yODAsMTMgKzI4OSwxMyBAQAogICAgICAgICBpZihzdHJjYXNlY29tcGFyZSh2YWx1ZSwgInJlYWxtIikpIHsKIAogICAgICAgICAgIC8qIFNldHVwIGlkZW50aXR5J3MgZG9tYWluIGFuZCBsZW5ndGggKi8KLSAgICAgICAgICBkb21haW4udGNoYXJfcHRyID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKikgY29udGVudCk7CisgICAgICAgICAgZG9tYWluLnRjaGFyX3B0ciA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSBjb250ZW50KTsKICAgICAgICAgICBpZighZG9tYWluLnRjaGFyX3B0cikKICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgICAgICAgICAgZHVwX2RvbWFpbi50Y2hhcl9wdHIgPSBfdGNzZHVwKGRvbWFpbi50Y2hhcl9wdHIpOwogICAgICAgICAgIGlmKCFkdXBfZG9tYWluLnRjaGFyX3B0cikgewotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShkb21haW4udGNoYXJfcHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGRvbWFpbi50Y2hhcl9wdHIpOwogICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgfQogCkBAIC0yOTUsNyArMzA0LDcgQEAKICAgICAgICAgICBpZGVudGl0eS0+RG9tYWluTGVuZ3RoID0gY3VybHhfdXp0b3VsKF90Y3NsZW4oZHVwX2RvbWFpbi50Y2hhcl9wdHIpKTsKICAgICAgICAgICBkdXBfZG9tYWluLnRjaGFyX3B0ciA9IE5VTEw7CiAKLSAgICAgICAgICBDdXJsX3VuaWNvZGVmcmVlKGRvbWFpbi50Y2hhcl9wdHIpOworICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGRvbWFpbi50Y2hhcl9wdHIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgIC8qIFVua25vd24gc3BlY2lmaWVyLCBpZ25vcmUgaXQhICovCkBAIC00MjMsOCArNDMyLDEwIEBACiAgIC8qIFF1ZXJ5IHRoZSBzZWN1cml0eSBwYWNrYWdlIGZvciBEaWdlc3RTU1AgKi8KICAgc3RhdHVzID0gc19wU2VjRm4tPlF1ZXJ5U2VjdXJpdHlQYWNrYWdlSW5mbygoVENIQVIgKikgVEVYVChTUF9OQU1FX0RJR0VTVCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7Ci0gIGlmKHN0YXR1cyAhPSBTRUNfRV9PSykKLSAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworICBpZihzdGF0dXMgIT0gU0VDX0VfT0spIHsKKyAgICBmYWlsZihkYXRhLCAiU1NQSTogY291bGRuJ3QgZ2V0IGF1dGggaW5mb1xuIik7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CisgIH0KIAogICB0b2tlbl9tYXggPSBTZWN1cml0eVBhY2thZ2UtPmNiTWF4VG9rZW47CiAKQEAgLTU3Miw3ICs1ODMsNyBAQAogICAgIHJlc3BfYnVmLnB2QnVmZmVyICAgPSBvdXRwdXRfdG9rZW47CiAgICAgcmVzcF9idWYuY2JCdWZmZXIgICA9IGN1cmx4X3V6dG91bCh0b2tlbl9tYXgpOwogCi0gICAgc3BuID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKikgdXJpcGF0aCk7CisgICAgc3BuID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKChjaGFyICopIHVyaXBhdGgpOwogICAgIGlmKCFzcG4pIHsKICAgICAgIHNfcFNlY0ZuLT5GcmVlQ3JlZGVudGlhbHNIYW5kbGUoJmNyZWRlbnRpYWxzKTsKIApAQCAtNTk0LDcgKzYwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNobGdfZGVzYywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPmh0dHBfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcF9kZXNjLCAmYXR0cnMsICZleHBpcnkpOwotICAgIEN1cmxfdW5pY29kZWZyZWUoc3BuKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShzcG4pOwogCiAgICAgaWYoc3RhdHVzID09IFNFQ19JX0NPTVBMRVRFX05FRURFRCB8fAogICAgICAgIHN0YXR1cyA9PSBTRUNfSV9DT01QTEVURV9BTkRfQ09OVElOVUUpCkBAIC02MDcsNyArNjE4LDEwIEBACiAKICAgICAgIEN1cmxfc2FmZWZyZWUoZGlnZXN0LT5odHRwX2NvbnRleHQpOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgICAgfQogCiAgICAgb3V0cHV0X3Rva2VuX2xlbiA9IHJlc3BfYnVmLmNiQnVmZmVyOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgva3JiNV9nc3NhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfZ3NzYXBpLmMKaW5kZXggZWEwYTVmMS4uOTViYWIwZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgva3JiNV9nc3NhcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9rcmI1X2dzc2FwaS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgICAgZnJlZShzcG4pOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KIAogICAgIGZyZWUoc3BuKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgIEN1cmxfZ3NzX2xvZ19lcnJvcihkYXRhLCAiZ3NzX2luaXRfc2VjX2NvbnRleHQoKSBmYWlsZWQ6ICIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1ham9yX3N0YXR1cywgbWlub3Jfc3RhdHVzKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgaWYob3V0cHV0X3Rva2VuLnZhbHVlICYmIG91dHB1dF90b2tlbi5sZW5ndGgpIHsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCiAgICAgZnJlZShjaGxnKTsKIAotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgLyogQ29udmVydCB0aGUgdXNlcm5hbWUgZnJvbSBpbnRlcm5hbCBmb3JtYXQgdG8gYSBkaXNwbGF5YWJsZSB0b2tlbiAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKICAgICBmcmVlKGNobGcpOwogCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBTZXR1cCB0aGUgY2hhbGxlbmdlICJpbnB1dCIgc2VjdXJpdHkgYnVmZmVyICovCkBAIC0zNTUsNyArMzU1LDcgQEAKIAogICAgIGZyZWUobWVzc2FnZSk7CiAKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9rcmI1X3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCmluZGV4IDFmNmU0NjIuLjFmYjYyNTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNCAtIDIwMTksIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE0IC0gMjAyMCwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU4LDYgKzU4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVChTUF9OQU1FX0tFUkJFUk9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdXJpdHlQYWNrYWdlKTsKIAorICAvKiBSZWxlYXNlIHRoZSBwYWNrYWdlIGJ1ZmZlciBhcyBpdCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSAqLworICBpZihzdGF0dXMgPT0gU0VDX0VfT0spIHsKKyAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoU2VjdXJpdHlQYWNrYWdlKTsKKyAgfQorCiAgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKIH0KIApAQCAtMTIwLDcgKzEyNSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVhUKFNQX05BTUVfS0VSQkVST1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAgICAgaWYoc3RhdHVzICE9IFNFQ19FX09LKSB7Ci0gICAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworICAgICAgZmFpbGYoZGF0YSwgIlNTUEk6IGNvdWxkbid0IGdldCBhdXRoIGluZm9cbiIpOworICAgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgICAgfQogCiAgICAga3JiNS0+dG9rZW5fbWF4ID0gU2VjdXJpdHlQYWNrYWdlLT5jYk1heFRva2VuOwpAQCAtMjE3LDggKzIyMywxMiBAQAogICAvKiBGcmVlIHRoZSBkZWNvZGVkIGNoYWxsZW5nZSBhcyBpdCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSAqLwogICBmcmVlKGNobGcpOwogCisgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKSB7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKwogICBpZihzdGF0dXMgIT0gU0VDX0VfT0sgJiYgc3RhdHVzICE9IFNFQ19JX0NPTlRJTlVFX05FRURFRCkgewotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgaWYobWVtY21wKCZjb250ZXh0LCBrcmI1LT5jb250ZXh0LCBzaXplb2YoY29udGV4dCkpKSB7CkBAIC0zMDksNyArMzE5LDEwIEBACiAgIGlmKHN0YXR1cyAhPSBTRUNfRV9PSykgewogICAgIGZyZWUoY2hsZyk7CiAKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBpZihzdGF0dXMgPT0gU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBHZXQgdGhlIGZ1bGx5IHF1YWxpZmllZCB1c2VybmFtZSBiYWNrIGZyb20gdGhlIGNvbnRleHQgKi8KQEAgLTMxOSw3ICszMzIsMTAgQEAKICAgaWYoc3RhdHVzICE9IFNFQ19FX09LKSB7CiAgICAgZnJlZShjaGxnKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIFNldHVwIHRoZSAiaW5wdXQiIHNlY3VyaXR5IGJ1ZmZlciAqLwpAQCAtMzgwLDcgKzM5Niw3IEBACiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgLyogQ29udmVydCB0aGUgdXNlciBuYW1lIHRvIFVURjggd2hlbiBvcGVyYXRpbmcgd2l0aCBVbmljb2RlICovCi0gIHVzZXJfbmFtZSA9IEN1cmxfY29udmVydF90Y2hhcl90b19VVEY4KG5hbWVzLnNVc2VyTmFtZSk7CisgIHVzZXJfbmFtZSA9IGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOChuYW1lcy5zVXNlck5hbWUpOwogICBpZighdXNlcl9uYW1lKSB7CiAgICAgZnJlZSh0cmFpbGVyKTsKIApAQCAtMzkyLDcgKzQwOCw3IEBACiAgIG1lc3NhZ2UgPSBtYWxsb2MobWVzc2FnZWxlbik7CiAgIGlmKCFtZXNzYWdlKSB7CiAgICAgZnJlZSh0cmFpbGVyKTsKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHVzZXJfbmFtZSk7CisgICAgY3VybHhfdW5pY29kZWZyZWUodXNlcl9uYW1lKTsKIAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CkBAIC00MDUsNyArNDIxLDcgQEAKICAgb3V0ZGF0YSA9IGh0b25sKG1heF9zaXplKSB8IHNlY19sYXllcjsKICAgbWVtY3B5KG1lc3NhZ2UsICZvdXRkYXRhLCBzaXplb2Yob3V0ZGF0YSkpOwogICBzdHJjcHkoKGNoYXIgKikgbWVzc2FnZSArIHNpemVvZihvdXRkYXRhKSwgdXNlcl9uYW1lKTsKLSAgQ3VybF91bmljb2RlZnJlZSh1c2VyX25hbWUpOworICBjdXJseF91bmljb2RlZnJlZSh1c2VyX25hbWUpOwogCiAgIC8qIEFsbG9jYXRlIHRoZSBwYWRkaW5nICovCiAgIHBhZGRpbmcgPSBtYWxsb2Moc2l6ZXMuY2JCbG9ja1NpemUpOwpAQCAtNDM4LDcgKzQ1NCwxMCBAQAogICAgIGZyZWUobWVzc2FnZSk7CiAgICAgZnJlZSh0cmFpbGVyKTsKIAotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEFsbG9jYXRlIHRoZSBlbmNyeXB0aW9uICh3cmFwKSBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG0uYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG0uYwppbmRleCAwNDdjMmI1Li4zYjQ2ZTFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvbnRsbS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiY3VybF9udGxtX2NvcmUuaCIKICNpbmNsdWRlICJjdXJsX2dldGhvc3RuYW1lLmgiCiAjaW5jbHVkZSAiY3VybF9tdWx0aWJ5dGUuaCIKKyNpbmNsdWRlICJjdXJsX21kNS5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAicmFuZC5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgpAQCAtNTk5LDExICs2MDAsMTQgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChVU0VfTlRSRVNQT05TRVMpICYmIGRlZmluZWQoVVNFX05UTE0yU0VTU0lPTikKKworI2RlZmluZSBDVVJMX01ENV9ESUdFU1RfTEVOR1RIIDE2IC8qIGZpeGVkIHNpemUgKi8KKwogICAvKiBXZSBkb24ndCBzdXBwb3J0IE5UTE0yIGlmIHdlIGRvbid0IGhhdmUgVVNFX05UUkVTUE9OU0VTICovCiAgIGlmKG50bG0tPmZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX05UTE1fS0VZKSB7CiAgICAgdW5zaWduZWQgY2hhciBudGJ1ZmZlclsweDE4XTsKICAgICB1bnNpZ25lZCBjaGFyIHRtcFsweDE4XTsKLSAgICB1bnNpZ25lZCBjaGFyIG1kNXN1bVtNRDVfRElHRVNUX0xFTkdUSF07CisgICAgdW5zaWduZWQgY2hhciBtZDVzdW1bQ1VSTF9NRDVfRElHRVNUX0xFTkdUSF07CiAgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5WzhdOwogCiAgICAgLyogTmVlZCB0byBjcmVhdGUgOCBieXRlcyByYW5kb20gZGF0YSAqLwpAQCAtNjIxLDExICs2MjUsMTEgQEAKICAgICBtZW1jcHkodG1wLCAmbnRsbS0+bm9uY2VbMF0sIDgpOwogICAgIG1lbWNweSh0bXAgKyA4LCBlbnRyb3B5LCA4KTsKIAotICAgIHJlc3VsdCA9IEN1cmxfc3NsX21kNXN1bSh0bXAsIDE2LCBtZDVzdW0sIE1ENV9ESUdFU1RfTEVOR1RIKTsKLSAgICBpZighcmVzdWx0KQotICAgICAgLyogV2Ugc2hhbGwgb25seSB1c2UgdGhlIGZpcnN0IDggYnl0ZXMgb2YgbWQ1c3VtLCBidXQgdGhlIGRlcyBjb2RlIGluCi0gICAgICAgICBDdXJsX250bG1fY29yZV9sbV9yZXNwIG9ubHkgZW5jcnlwdCB0aGUgZmlyc3QgOCBieXRlcyAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9udGxtX2NvcmVfbWtfbnRfaGFzaChkYXRhLCBwYXNzd2RwLCBudGJ1ZmZlcik7CisgICAgQ3VybF9tZDVpdChtZDVzdW0sIHRtcCwgMTYpOworCisgICAgLyogV2Ugc2hhbGwgb25seSB1c2UgdGhlIGZpcnN0IDggYnl0ZXMgb2YgbWQ1c3VtLCBidXQgdGhlIGRlcyBjb2RlIGluCisgICAgICAgQ3VybF9udGxtX2NvcmVfbG1fcmVzcCBvbmx5IGVuY3J5cHQgdGhlIGZpcnN0IDggYnl0ZXMgKi8KKyAgICByZXN1bHQgPSBDdXJsX250bG1fY29yZV9ta19udF9oYXNoKGRhdGEsIHBhc3N3ZHAsIG50YnVmZmVyKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtX3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG1fc3NwaS5jCmluZGV4IDU4OWNjYTEuLjg0ZWE1MWQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG1fc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG1fc3NwaS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01Niw2ICs1NiwxMSBAQAogICBzdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlTZWN1cml0eVBhY2thZ2VJbmZvKChUQ0hBUiAqKSBURVhUKFNQX05BTUVfTlRMTSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKwogICByZXR1cm4gKHN0YXR1cyA9PSBTRUNfRV9PSyA/IFRSVUUgOiBGQUxTRSk7CiB9CiAKQEAgLTEwMCw4ICsxMDUsMTAgQEAKICAgLyogUXVlcnkgdGhlIHNlY3VyaXR5IHBhY2thZ2UgZm9yIE5UTE0gKi8KICAgc3RhdHVzID0gc19wU2VjRm4tPlF1ZXJ5U2VjdXJpdHlQYWNrYWdlSW5mbygoVENIQVIgKikgVEVYVChTUF9OQU1FX05UTE0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZWN1cml0eVBhY2thZ2UpOwotICBpZihzdGF0dXMgIT0gU0VDX0VfT0spCi0gICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyAgaWYoc3RhdHVzICE9IFNFQ19FX09LKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTUEk6IGNvdWxkbid0IGdldCBhdXRoIGluZm9cbiIpOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOworICB9CiAKICAgbnRsbS0+dG9rZW5fbWF4ID0gU2VjdXJpdHlQYWNrYWdlLT5jYk1heFRva2VuOwogCkBAIC0xNjksOCArMTc2LDEwIEBACiAgIGlmKHN0YXR1cyA9PSBTRUNfSV9DT01QTEVURV9ORUVERUQgfHwKICAgICBzdGF0dXMgPT0gU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFKQogICAgIHNfcFNlY0ZuLT5Db21wbGV0ZUF1dGhUb2tlbihudGxtLT5jb250ZXh0LCAmdHlwZV8xX2Rlc2MpOworICBlbHNlIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICBlbHNlIGlmKHN0YXR1cyAhPSBTRUNfRV9PSyAmJiBzdGF0dXMgIT0gU0VDX0lfQ09OVElOVUVfTkVFREVEKQotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCiAgIHJldHVybiBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgKGNoYXIgKikgbnRsbS0+b3V0cHV0X3Rva2VuLApAQCAtMzE2LDcgKzMyNSwxMCBAQAogICAgIGluZm9mKGRhdGEsICJOVExNIGhhbmRzaGFrZSBmYWlsdXJlICh0eXBlLTMgbWVzc2FnZSk6IFN0YXR1cz0leFxuIiwKICAgICAgICAgICBzdGF0dXMpOwogCi0gICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgaWYoc3RhdHVzID09IFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgLyogQmFzZTY0IGVuY29kZSB0aGUgcmVzcG9uc2UgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYwppbmRleCA1ZDQzZTExLi5lZDdjZTAyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fZ3NzYXBpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvc3BuZWdvX2dzc2FwaS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgICAgZnJlZShzcG4pOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KIAogICAgIGZyZWUoc3BuKTsKQEAgLTE3MCwxNCArMTcwLDE0IEBACiAgICAgQ3VybF9nc3NfbG9nX2Vycm9yKGRhdGEsICJnc3NfaW5pdF9zZWNfY29udGV4dCgpIGZhaWxlZDogIiwKICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3Jfc3RhdHVzLCBtaW5vcl9zdGF0dXMpOwogCi0gICAgcmV0dXJuIENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIGlmKCFvdXRwdXRfdG9rZW4udmFsdWUgfHwgIW91dHB1dF90b2tlbi5sZW5ndGgpIHsKICAgICBpZihvdXRwdXRfdG9rZW4udmFsdWUpCiAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJnVudXNlZF9zdGF0dXMsICZvdXRwdXRfdG9rZW4pOwogCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBGcmVlIHByZXZpb3VzIHRva2VuICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvc3BuZWdvX3NzcGkuYwppbmRleCA0YjIxY2M3Li4xOTRmMjUwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19zc3BpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU5LDYgKzU5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVChTUF9OQU1FX05FR09USUFURSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKworCiAgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKIH0KIApAQCAtMTIzLDggKzEyOSwxMCBAQAogICAgIG5lZ28tPnN0YXR1cyA9IHNfcFNlY0ZuLT5RdWVyeVNlY3VyaXR5UGFja2FnZUluZm8oKFRDSEFSICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVhUKFNQX05BTUVfTkVHT1RJQVRFKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZWN1cml0eVBhY2thZ2UpOwotICAgIGlmKG5lZ28tPnN0YXR1cyAhPSBTRUNfRV9PSykKLSAgICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisgICAgaWYobmVnby0+c3RhdHVzICE9IFNFQ19FX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NQSTogY291bGRuJ3QgZ2V0IGF1dGggaW5mb1xuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKKyAgICB9CiAKICAgICBuZWdvLT50b2tlbl9tYXggPSBTZWN1cml0eVBhY2thZ2UtPmNiTWF4VG9rZW47CiAKQEAgLTE2NSw3ICsxNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdvLT5wX2lkZW50aXR5LCBOVUxMLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdvLT5jcmVkZW50aWFscywgJmV4cGlyeSk7CiAgICAgaWYobmVnby0+c3RhdHVzICE9IFNFQ19FX09LKQotICAgICAgcmV0dXJuIENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogCiAgICAgLyogQWxsb2NhdGUgb3VyIG5ldyBjb250ZXh0IGhhbmRsZSAqLwogICAgIG5lZ28tPmNvbnRleHQgPSBjYWxsb2MoMSwgc2l6ZW9mKEN0eHRIYW5kbGUpKTsKQEAgLTI1MSwxNCArMjU5LDI1IEBACiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICBmYWlsZihkYXRhLCAiSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3IobmVnby0+c3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICBpZihuZWdvLT5zdGF0dXMgPT0gKERXT1JEKVNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgaWYobmVnby0+c3RhdHVzID09IFNFQ19JX0NPTVBMRVRFX05FRURFRCB8fAogICAgICBuZWdvLT5zdGF0dXMgPT0gU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFKSB7CiAgICAgbmVnby0+c3RhdHVzID0gc19wU2VjRm4tPkNvbXBsZXRlQXV0aFRva2VuKG5lZ28tPmNvbnRleHQsICZyZXNwX2Rlc2MpOwogICAgIGlmKEdTU19FUlJPUihuZWdvLT5zdGF0dXMpKSB7Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CisgICAgICBmYWlsZihkYXRhLCAiQ29tcGxldGVBdXRoVG9rZW4gZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3IobmVnby0+c3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisKKyAgICAgIGlmKG5lZ28tPnN0YXR1cyA9PSAoRFdPUkQpU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC92YXV0aC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvdmF1dGguYwppbmRleCBhOWM1YzljLi5kOThlNjZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC92YXV0aC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3ZhdXRoLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE0IC0gMjAxOSwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgLSAyMDIwLCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtODksNyArODksNyBAQAogICB9CiAKICAgLyogQWxsb2NhdGUgb3VyIFRDSEFSIGJhc2VkIFNQTiAqLwotICB0Y2hhcl9zcG4gPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcih1dGY4X3Nwbik7CisgIHRjaGFyX3NwbiA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcih1dGY4X3Nwbik7CiAgIGlmKCF0Y2hhcl9zcG4pIHsKICAgICBmcmVlKHV0Zjhfc3BuKTsKIApAQCAtOTcsNyArOTcsNyBAQAogICB9CiAKICAgLyogUmVsZWFzZSB0aGUgVVRGOCB2YXJpYW50IHdoZW4gb3BlcmF0aW5nIHdpdGggVW5pY29kZSAqLwotICBDdXJsX3VuaWNvZGVmcmVlKHV0Zjhfc3BuKTsKKyAgY3VybHhfdW5pY29kZWZyZWUodXRmOF9zcG4pOwogCiAgIC8qIFJldHVybiBvdXIgbmV3bHkgYWxsb2NhdGVkIFNQTiAqLwogICByZXR1cm4gdGNoYXJfc3BuOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvdmF1dGguaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3ZhdXRoLmgKaW5kZXggNzNiZDI1ZS4uYTFhNTU3ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvdmF1dGguaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC92YXV0aC5oCkBAIC00Myw3ICs0Myw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSNkZWZpbmUgR1NTX0VSUk9SKHN0YXR1cykgKHN0YXR1cyAmIDB4ODAwMDAwMDApCisjZGVmaW5lIEdTU19FUlJPUihzdGF0dXMpICgoc3RhdHVzKSAmIDB4ODAwMDAwMDApCiAjZW5kaWYKIAogLyogVGhpcyBpcyB1c2VkIHRvIGJ1aWxkIGEgU1BOIHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmVyc2lvbi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmVyc2lvbi5jCmluZGV4IDE0YjA1MzEuLjE0ZTUwOTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZlcnNpb24uYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92ZXJzaW9uLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDcgKzI2LDggQEAKICNpbmNsdWRlICJ1cmxkYXRhLmgiCiAjaW5jbHVkZSAidnRscy92dGxzLmgiCiAjaW5jbHVkZSAiaHR0cDIuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgorI2luY2x1ZGUgInF1aWMuaCIKICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogCiAjaWZkZWYgVVNFX0FSRVMKQEAgLTUzLDE4ICs1NCw2IEBACiAjaW5jbHVkZSA8bGlicnRtcC9ydG1wLmg+CiAjZW5kaWYKIAotI2lmZGVmIFVTRV9MSUJTU0gyCi0jaW5jbHVkZSA8bGlic3NoMi5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfVkVSU0lPTgotLyogZ2V0IGl0IHJ1bi10aW1lIGlmIHBvc3NpYmxlICovCi0jZGVmaW5lIENVUkxfTElCU1NIMl9WRVJTSU9OIGxpYnNzaDJfdmVyc2lvbigwKQotI2Vsc2UKLS8qIHVzZSBidWlsZC10aW1lIGlmIHJ1bi10aW1lIG5vdCBwb3NzaWJsZSAqLwotI2RlZmluZSBDVVJMX0xJQlNTSDJfVkVSU0lPTiBMSUJTU0gyX1ZFUlNJT04KLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9aTElCX0gKICNpbmNsdWRlIDx6bGliLmg+CiAjaWZkZWYgX19TWU1CSUFOMzJfXwpAQCAtNzcsMTYgKzY2LDYgQEAKICNpbmNsdWRlIDxicm90bGkvZGVjb2RlLmg+CiAjZW5kaWYKIAotdm9pZCBDdXJsX3ZlcnNpb25faW5pdCh2b2lkKTsKLQotLyogRm9yIHRocmVhZCBzYWZldHkgcHVycG9zZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZ2xvYmFsX2luaXQgc28gdGhhdAotICAgdGhlIHN0YXRpYyBkYXRhIGluIGJvdGggdmVyc2lvbiBmdW5jdGlvbnMgaXMgaW5pdGlhbGl6ZWQuICovCi12b2lkIEN1cmxfdmVyc2lvbl9pbml0KHZvaWQpCi17Ci0gIGN1cmxfdmVyc2lvbigpOwotICBjdXJsX3ZlcnNpb25faW5mbyhDVVJMVkVSU0lPTl9OT1cpOwotfQotCiAjaWZkZWYgSEFWRV9CUk9UTEkKIHN0YXRpYyBzaXplX3QgYnJvdGxpX3ZlcnNpb24oY2hhciAqYnVmLCBzaXplX3QgYnVmc3opCiB7CkBAIC05OSw5MyArNzgsMTE4IEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIGN1cmxfdmVyc2lvbigpIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RhdGljIGJ1ZmZlci4KKyAqCisgKiBJdCBpcyBpbXBsZW1lbnRlZCB0byB3b3JrIG11bHRpLXRocmVhZGVkIGJ5IG1ha2luZyBzdXJlIHJlcGVhdGVkIGludm9rZXMKKyAqIGdlbmVyYXRlIHRoZSBleGFjdCBzYW1lIHN0cmluZyBhbmQgbmV2ZXIgd3JpdGUgYW55IHRlbXBvcmFyeSBkYXRhIGxpa2UKKyAqIHplcm9zIGluIHRoZSBkYXRhLgorICovCisKKyNkZWZpbmUgVkVSU0lPTl9QQVJUUyAxNCAvKiBudW1iZXIgb2Ygc3Vic3RyaW5ncyB3ZSBjYW4gY29uY2F0ZW5hdGUgKi8KKwogY2hhciAqY3VybF92ZXJzaW9uKHZvaWQpCiB7Ci0gIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwotICBzdGF0aWMgY2hhciB2ZXJzaW9uWzIwMF07Ci0gIGNoYXIgKnB0ciA9IHZlcnNpb247Ci0gIHNpemVfdCBsZW47Ci0gIHNpemVfdCBsZWZ0ID0gc2l6ZW9mKHZlcnNpb24pOwotCi0gIGlmKGluaXRpYWxpemVkKQotICAgIHJldHVybiB2ZXJzaW9uOwotCi0gIHN0cmNweShwdHIsIExJQkNVUkxfTkFNRSAiLyIgTElCQ1VSTF9WRVJTSU9OKTsKLSAgbGVuID0gc3RybGVuKHB0cik7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOwotCi0gIGlmKGxlZnQgPiAxKSB7Ci0gICAgbGVuID0gQ3VybF9zc2xfdmVyc2lvbihwdHIgKyAxLCBsZWZ0IC0gMSk7Ci0KLSAgICBpZihsZW4gPiAwKSB7Ci0gICAgICAqcHRyID0gJyAnOwotICAgICAgbGVmdCAtPSArK2xlbjsKLSAgICAgIHB0ciArPSBsZW47Ci0gICAgfQotICB9Ci0KKyAgc3RhdGljIGNoYXIgb3V0WzMwMF07CisgIGNoYXIgKm91dHA7CisgIHNpemVfdCBvdXRsZW47CisgIGNvbnN0IGNoYXIgKnNyY1tWRVJTSU9OX1BBUlRTXTsKKyNpZmRlZiBVU0VfU1NMCisgIGNoYXIgc3NsX3ZlcnNpb25bMjAwXTsKKyNlbmRpZgogI2lmZGVmIEhBVkVfTElCWgotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIHpsaWIvJXMiLCB6bGliVmVyc2lvbigpKTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisgIGNoYXIgel92ZXJzaW9uWzQwXTsKICNlbmRpZgogI2lmZGVmIEhBVkVfQlJPVExJCi0gIGxlbiA9IG1zbnByaW50ZihwdHIsIGxlZnQsICIlcyIsICIgYnJvdGxpLyIpOwotICBsZWZ0IC09IGxlbjsKLSAgcHRyICs9IGxlbjsKLSAgbGVuID0gYnJvdGxpX3ZlcnNpb24ocHRyLCBsZWZ0KTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisgIGNoYXIgYnJfdmVyc2lvbls0MF0gPSAiYnJvdGxpLyI7CiAjZW5kaWYKICNpZmRlZiBVU0VfQVJFUwotICAvKiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgcHJlc2VudCBpbiBjLWFyZXMsIG5vdCBpbiB0aGUgb3JpZ2luYWwgYXJlcyAqLwotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGMtYXJlcy8lcyIsIGFyZXNfdmVyc2lvbihOVUxMKSk7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOworICBjaGFyIGNhcmVzX3ZlcnNpb25bNDBdOwogI2VuZGlmCi0jaWZkZWYgVVNFX0xJQklETjIKLSAgaWYoaWRuMl9jaGVja192ZXJzaW9uKElETjJfVkVSU0lPTikpIHsKLSAgICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGxpYmlkbjIvJXMiLCBpZG4yX2NoZWNrX3ZlcnNpb24oTlVMTCkpOwotICAgIGxlZnQgLT0gbGVuOwotICAgIHB0ciArPSBsZW47Ci0gIH0KKyNpZiBkZWZpbmVkKFVTRV9MSUJJRE4yKQorICBjaGFyIGlkbl92ZXJzaW9uWzQwXTsKICNlbmRpZgogI2lmZGVmIFVTRV9MSUJQU0wKLSAgbGVuID0gbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJwc2wvJXMiLCBwc2xfZ2V0X3ZlcnNpb24oKSk7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOworICBjaGFyIHBzbF92ZXJzaW9uWzQwXTsKICNlbmRpZgotI2lmZGVmIFVTRV9XSU4zMl9JRE4KLSAgbGVuID0gbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBXaW5JRE4iKTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisjaWYgZGVmaW5lZChIQVZFX0lDT05WKSAmJiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykKKyAgY2hhciBpY29udl92ZXJzaW9uWzQwXT0iaWNvbnYiOworI2VuZGlmCisjaWZkZWYgVVNFX1NTSAorICBjaGFyIHNzaF92ZXJzaW9uWzQwXTsKKyNlbmRpZgorI2lmZGVmIFVTRV9OR0hUVFAyCisgIGNoYXIgaDJfdmVyc2lvbls0MF07CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfUVVJQworICBjaGFyIGgzX3ZlcnNpb25bNDBdOworI2VuZGlmCisjaWZkZWYgVVNFX0xJQlJUTVAKKyAgY2hhciBydG1wX3ZlcnNpb25bNDBdOworI2VuZGlmCisgIGludCBpID0gMDsKKyAgaW50IGo7CisKKyNpZmRlZiBERUJVR0JVSUxECisgIC8qIE92ZXJyaWRlIHZlcnNpb24gc3RyaW5nIHdoZW4gZW52aXJvbm1lbnQgdmFyaWFibGUgQ1VSTF9WRVJTSU9OIGlzIHNldCAqLworICBjb25zdCBjaGFyICpkZWJ1Z3ZlcnNpb24gPSBnZXRlbnYoIkNVUkxfVkVSU0lPTiIpOworICBpZihkZWJ1Z3ZlcnNpb24pIHsKKyAgICBzdHJuY3B5KG91dCwgZGVidWd2ZXJzaW9uLCBzaXplb2Yob3V0KS0xKTsKKyAgICBvdXRbc2l6ZW9mKG91dCktMV0gPSAnXDAnOworICAgIHJldHVybiBvdXQ7CisgIH0KKyNlbmRpZgorCisgIHNyY1tpKytdID0gTElCQ1VSTF9OQU1FICIvIiBMSUJDVVJMX1ZFUlNJT047CisjaWZkZWYgVVNFX1NTTAorICBDdXJsX3NzbF92ZXJzaW9uKHNzbF92ZXJzaW9uLCBzaXplb2Yoc3NsX3ZlcnNpb24pKTsKKyAgc3JjW2krK10gPSBzc2xfdmVyc2lvbjsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElCWgorICBtc25wcmludGYoel92ZXJzaW9uLCBzaXplb2Yoel92ZXJzaW9uKSwgInpsaWIvJXMiLCB6bGliVmVyc2lvbigpKTsKKyAgc3JjW2krK10gPSB6X3ZlcnNpb247CisjZW5kaWYKKyNpZmRlZiBIQVZFX0JST1RMSQorICBicm90bGlfdmVyc2lvbigmYnJfdmVyc2lvbls3XSwgc2l6ZW9mKGJyX3ZlcnNpb24pIC0gNyk7CisgIHNyY1tpKytdID0gYnJfdmVyc2lvbjsKKyNlbmRpZgorI2lmZGVmIFVTRV9BUkVTCisgIG1zbnByaW50ZihjYXJlc192ZXJzaW9uLCBzaXplb2YoY2FyZXNfdmVyc2lvbiksCisgICAgICAgICAgICAiYy1hcmVzLyVzIiwgYXJlc192ZXJzaW9uKE5VTEwpKTsKKyAgc3JjW2krK10gPSBjYXJlc192ZXJzaW9uOworI2VuZGlmCisjaWZkZWYgVVNFX0xJQklETjIKKyAgbXNucHJpbnRmKGlkbl92ZXJzaW9uLCBzaXplb2YoaWRuX3ZlcnNpb24pLAorICAgICAgICAgICAgImxpYmlkbjIvJXMiLCBpZG4yX2NoZWNrX3ZlcnNpb24oTlVMTCkpOworICBzcmNbaSsrXSA9IGlkbl92ZXJzaW9uOworI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfSUROKQorICBzcmNbaSsrXSA9IChjaGFyICopIldpbklETiI7CisjZW5kaWYKKworI2lmZGVmIFVTRV9MSUJQU0wKKyAgbXNucHJpbnRmKHBzbF92ZXJzaW9uLCBzaXplb2YocHNsX3ZlcnNpb24pLCAibGlicHNsLyVzIiwgcHNsX2dldF92ZXJzaW9uKCkpOworICBzcmNbaSsrXSA9IHBzbF92ZXJzaW9uOwogI2VuZGlmCiAjaWYgZGVmaW5lZChIQVZFX0lDT05WKSAmJiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykKICNpZmRlZiBfTElCSUNPTlZfVkVSU0lPTgotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGljb252LyVkLiVkIiwKLSAgICAgICAgICAgICAgICAgIF9MSUJJQ09OVl9WRVJTSU9OID4+IDgsIF9MSUJJQ09OVl9WRVJTSU9OICYgMjU1KTsKKyAgbXNucHJpbnRmKGljb252X3ZlcnNpb24sIHNpemVvZihpY29udl92ZXJzaW9uKSwgImljb252LyVkLiVkIiwKKyAgICAgICAgICAgIF9MSUJJQ09OVl9WRVJTSU9OID4+IDgsIF9MSUJJQ09OVl9WRVJTSU9OICYgMjU1KTsKICNlbHNlCi0gIC8qIHZlcnNpb24gdW5rbm93biAqLwotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGljb252Iik7CisgIC8qIHZlcnNpb24gdW5rbm93biwgbGV0IHRoZSBkZWZhdWx0IHN0YW5kICovCiAjZW5kaWYgLyogX0xJQklDT05WX1ZFUlNJT04gKi8KLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisgIHNyY1tpKytdID0gaWNvbnZfdmVyc2lvbjsKICNlbmRpZgotI2lmZGVmIFVTRV9MSUJTU0gyCi0gIGxlbiA9IG1zbnByaW50ZihwdHIsIGxlZnQsICIgbGlic3NoMi8lcyIsIENVUkxfTElCU1NIMl9WRVJTSU9OKTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47Ci0jZW5kaWYKLSNpZmRlZiBVU0VfTElCU1NICi0gIGxlbiA9IG1zbnByaW50ZihwdHIsIGxlZnQsICIgbGlic3NoLyVzIiwgQ1VSTF9MSUJTU0hfVkVSU0lPTik7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOworI2lmZGVmIFVTRV9TU0gKKyAgQ3VybF9zc2hfdmVyc2lvbihzc2hfdmVyc2lvbiwgc2l6ZW9mKHNzaF92ZXJzaW9uKSk7CisgIHNyY1tpKytdID0gc3NoX3ZlcnNpb247CiAjZW5kaWYKICNpZmRlZiBVU0VfTkdIVFRQMgotICBsZW4gPSBDdXJsX2h0dHAyX3ZlcihwdHIsIGxlZnQpOwotICBsZWZ0IC09IGxlbjsKLSAgcHRyICs9IGxlbjsKKyAgQ3VybF9odHRwMl92ZXIoaDJfdmVyc2lvbiwgc2l6ZW9mKGgyX3ZlcnNpb24pKTsKKyAgc3JjW2krK10gPSBoMl92ZXJzaW9uOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgQ3VybF9xdWljX3ZlcihoM192ZXJzaW9uLCBzaXplb2YoaDNfdmVyc2lvbikpOworICBzcmNbaSsrXSA9IGgzX3ZlcnNpb247CiAjZW5kaWYKICNpZmRlZiBVU0VfTElCUlRNUAogICB7CkBAIC0xOTcsMjcgKzIwMSwzNCBAQAogICAgIGVsc2UKICAgICAgIHN1ZmZbMF0gPSAnXDAnOwogCi0gICAgbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJydG1wLyVkLiVkJXMiLAorICAgIG1zbnByaW50ZihydG1wX3ZlcnNpb24sIHNpemVvZihydG1wX3ZlcnNpb24pLCAibGlicnRtcC8lZC4lZCVzIiwKICAgICAgICAgICAgICAgUlRNUF9MSUJfVkVSU0lPTiA+PiAxNiwgKFJUTVBfTElCX1ZFUlNJT04gPj4gOCkgJiAweGZmLAogICAgICAgICAgICAgICBzdWZmKTsKLS8qCi0gIElmIGFub3RoZXIgbGliIHZlcnNpb24gaXMgYWRkZWQgYmVsb3cgdGhpcyBvbmUsIHRoaXMgY29kZSB3b3VsZAotICBhbHNvIGhhdmUgdG8gZG86Ci0KLSAgICBsZW4gPSB3aGF0IG1zbnByaW50ZigpIHJldHVybmVkCi0KLSAgICBsZWZ0IC09IGxlbjsKLSAgICBwdHIgKz0gbGVuOwotKi8KKyAgICBzcmNbaSsrXSA9IHJ0bXBfdmVyc2lvbjsKICAgfQogI2VuZGlmCiAKLSAgLyogU2lsZW50IHNjYW4tYnVpbGQgZXZlbiBpZiBsaWJydG1wIGlzIG5vdCBlbmFibGVkLiAqLwotICAodm9pZCkgbGVmdDsKLSAgKHZvaWQpIHB0cjsKKyAgREVCVUdBU1NFUlQoaSA8PSBWRVJTSU9OX1BBUlRTKTsKIAotICBpbml0aWFsaXplZCA9IHRydWU7Ci0gIHJldHVybiB2ZXJzaW9uOworICBvdXRwID0gJm91dFswXTsKKyAgb3V0bGVuID0gc2l6ZW9mKG91dCk7CisgIGZvcihqID0gMDsgaiA8IGk7IGorKykgeworICAgIHNpemVfdCBuID0gc3RybGVuKHNyY1tqXSk7CisgICAgLyogd2UgbmVlZCByb29tIGZvciBhIHNwYWNlLCB0aGUgc3RyaW5nIGFuZCB0aGUgZmluYWwgemVybyAqLworICAgIGlmKG91dGxlbiA8PSAobiArIDIpKQorICAgICAgYnJlYWs7CisgICAgaWYoaikgeworICAgICAgLyogcHJlcGVuZCBhIHNwYWNlIGlmIG5vdCB0aGUgZmlyc3QgKi8KKyAgICAgICpvdXRwKysgPSAnICc7CisgICAgICBvdXRsZW4tLTsKKyAgICB9CisgICAgbWVtY3B5KG91dHAsIHNyY1tqXSwgbik7CisgICAgb3V0cCArPSBuOworICAgIG91dGxlbiAtPSBuOworICB9CisgICpvdXRwID0gMDsKKworICByZXR1cm4gb3V0OwogfQogCiAvKiBkYXRhIGZvciBjdXJsX3ZlcnNpb25faW5mbwpAQCAtMjYyLDYgKzI3Myw5IEBACiAgICJsZGFwcyIsCiAjZW5kaWYKICNlbmRpZgorI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKKyAgIm1xdHQiLAorI2VuZGlmCiAjaWZuZGVmIENVUkxfRElTQUJMRV9QT1AzCiAgICJwb3AzIiwKICNlbmRpZgpAQCAtMjc0LDggKzI4OCwxMCBAQAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUlRTUAogICAicnRzcCIsCiAjZW5kaWYKLSNpZiBkZWZpbmVkKFVTRV9TU0gpCisjaWYgZGVmaW5lZChVU0VfU1NIKSAmJiAhZGVmaW5lZChVU0VfV09MRlNTSCkKICAgInNjcCIsCisjZW5kaWYKKyNpZmRlZiBVU0VfU1NICiAgICJzZnRwIiwKICNlbmRpZgogI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9TTUIpICYmIGRlZmluZWQoVVNFX05UTE0pICYmIFwKQEAgLTM1OCw2ICszNzQsOSBAQAogI2lmIGRlZmluZWQoVVNFX05HSFRUUDIpCiAgIHwgQ1VSTF9WRVJTSU9OX0hUVFAyCiAjZW5kaWYKKyNpZiBkZWZpbmVkKEVOQUJMRV9RVUlDKQorICB8IENVUkxfVkVSU0lPTl9IVFRQMworI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfVU5JWF9TT0NLRVRTKQogICB8IENVUkxfVkVSU0lPTl9VTklYX1NPQ0tFVFMKICNlbmRpZgpAQCAtMzg1LDExICs0MDQsMjMgQEAKICAgTlVMTCwgLyogc3NoIGxpYiB2ZXJzaW9uICovCiAgIDAsICAgIC8qIGJyb3RsaV92ZXJfbnVtICovCiAgIE5VTEwsIC8qIGJyb3RsaSB2ZXJzaW9uICovCisgIDAsICAgIC8qIG5naHR0cDIgdmVyc2lvbiBudW1iZXIgKi8KKyAgTlVMTCwgLyogbmdodHRwMiB2ZXJzaW9uIHN0cmluZyAqLworICBOVUxMLCAvKiBxdWljIGxpYnJhcnkgc3RyaW5nICovCisjaWZkZWYgQ1VSTF9DQV9CVU5ETEUKKyAgQ1VSTF9DQV9CVU5ETEUsIC8qIGNhaW5mbyAqLworI2Vsc2UKKyAgTlVMTCwKKyNlbmRpZgorI2lmZGVmIENVUkxfQ0FfUEFUSAorICBDVVJMX0NBX1BBVEggIC8qIGNhcGF0aCAqLworI2Vsc2UKKyAgTlVMTAorI2VuZGlmCiB9OwogCiBjdXJsX3ZlcnNpb25faW5mb19kYXRhICpjdXJsX3ZlcnNpb25faW5mbyhDVVJMdmVyc2lvbiBzdGFtcCkKIHsKLSAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAjaWYgZGVmaW5lZChVU0VfU1NIKQogICBzdGF0aWMgY2hhciBzc2hfYnVmZmVyWzgwXTsKICNlbmRpZgpAQCAtNDA0LDkgKzQzNSw2IEBACiAgIHN0YXRpYyBjaGFyIGJyb3RsaV9idWZmZXJbODBdOwogI2VuZGlmCiAKLSAgaWYoaW5pdGlhbGl6ZWQpCi0gICAgcmV0dXJuICZ2ZXJzaW9uX2luZm87Ci0KICNpZmRlZiBVU0VfU1NMCiAgIEN1cmxfc3NsX3ZlcnNpb24oc3NsX2J1ZmZlciwgc2l6ZW9mKHNzbF9idWZmZXIpKTsKICAgdmVyc2lvbl9pbmZvLnNzbF92ZXJzaW9uID0gc3NsX2J1ZmZlcjsKQEAgLTQ0NiwxMSArNDc0LDggQEAKICNlbmRpZiAvKiBfTElCSUNPTlZfVkVSU0lPTiAqLwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKQotICBtc25wcmludGYoc3NoX2J1ZmZlciwgc2l6ZW9mKHNzaF9idWZmZXIpLCAibGlic3NoMi8lcyIsIExJQlNTSDJfVkVSU0lPTik7Ci0gIHZlcnNpb25faW5mby5saWJzc2hfdmVyc2lvbiA9IHNzaF9idWZmZXI7Ci0jZWxpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCi0gIG1zbnByaW50Zihzc2hfYnVmZmVyLCBzaXplb2Yoc3NoX2J1ZmZlciksICJsaWJzc2gvJXMiLCBDVVJMX0xJQlNTSF9WRVJTSU9OKTsKKyNpZiBkZWZpbmVkKFVTRV9TU0gpCisgIEN1cmxfc3NoX3ZlcnNpb24oc3NoX2J1ZmZlciwgc2l6ZW9mKHNzaF9idWZmZXIpKTsKICAgdmVyc2lvbl9pbmZvLmxpYnNzaF92ZXJzaW9uID0gc3NoX2J1ZmZlcjsKICNlbmRpZgogCkBAIC00NjAsOCArNDg1LDIyIEBACiAgIHZlcnNpb25faW5mby5icm90bGlfdmVyc2lvbiA9IGJyb3RsaV9idWZmZXI7CiAjZW5kaWYKIAotICAodm9pZClzdGFtcDsgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MsIHdlIGRvbid0IHVzZSB0aGlzICovCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgeworICAgIG5naHR0cDJfaW5mbyAqaDIgPSBuZ2h0dHAyX3ZlcnNpb24oMCk7CisgICAgdmVyc2lvbl9pbmZvLm5naHR0cDJfdmVyX251bSA9IGgyLT52ZXJzaW9uX251bTsKKyAgICB2ZXJzaW9uX2luZm8ubmdodHRwMl92ZXJzaW9uID0gaDItPnZlcnNpb25fc3RyOworICB9CisjZW5kaWYKIAotICBpbml0aWFsaXplZCA9IHRydWU7CisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgeworICAgIHN0YXRpYyBjaGFyIHF1aWNidWZmZXJbODBdOworICAgIEN1cmxfcXVpY192ZXIocXVpY2J1ZmZlciwgc2l6ZW9mKHF1aWNidWZmZXIpKTsKKyAgICB2ZXJzaW9uX2luZm8ucXVpY192ZXJzaW9uID0gcXVpY2J1ZmZlcjsKKyAgfQorI2VuZGlmCisKKyAgKHZvaWQpc3RhbXA7IC8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLCB3ZSBkb24ndCB1c2UgdGhpcyAqLwogICByZXR1cm4gJnZlcnNpb25faW5mbzsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5Y2IzNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5jCkBAIC0wLDAgKzEsMTk0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX05HVENQMgorI2luY2x1ZGUgPG5ndGNwMi9uZ3RjcDIuaD4KKyNpbmNsdWRlIDxuZ3RjcDIvbmd0Y3AyX2NyeXB0by5oPgorI2luY2x1ZGUgPG5naHR0cDMvbmdodHRwMy5oPgorI2lmZGVmIFVTRV9PUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNlbmRpZgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgInN0cmR1cC5oIgorI2luY2x1ZGUgInJhbmQuaCIKKyNpbmNsdWRlICJuZ3RjcDIuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgorI2luY2x1ZGUgInZxdWljLmgiCisjaW5jbHVkZSAidnRscy9rZXlsb2cuaCIKKworLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLworI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiAjZGVmaW5lIERFQlVHX05HVENQMiAqLworI2lmZGVmIENVUkxERUJVRworI2RlZmluZSBERUJVR19IVFRQMworI2VuZGlmCisjaWZkZWYgREVCVUdfSFRUUDMKKyNkZWZpbmUgSDNCVUdGKHgpIHgKKyNlbHNlCisjZGVmaW5lIEgzQlVHRih4KSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKgorICogVGhpcyBob2xkcyBvdXRnb2luZyBIVFRQLzMgc3RyZWFtIGRhdGEgdGhhdCBpcyB1c2VkIGJ5IG5naHR0cDMgdW50aWwgYWNrZWQuCisgKiBJdCBpcyB1c2VkIGFzIGEgY2lyY3VsYXIgYnVmZmVyLiBBZGQgbmV3IGJ5dGVzIGF0IHRoZSBlbmQgdW50aWwgaXQgcmVhY2hlcworICogdGhlIGZhciBlbmQsIHRoZW4gc3RhcnQgb3ZlciBhdCBpbmRleCAwIGFnYWluLgorICovCisKKyNkZWZpbmUgSDNfU0VORF9TSVpFICgyMCoxMDI0KQorc3RydWN0IGgzb3V0IHsKKyAgdWludDhfdCBidWZbSDNfU0VORF9TSVpFXTsKKyAgc2l6ZV90IHVzZWQ7ICAgLyogbnVtYmVyIG9mIGJ5dGVzIHVzZWQgaW4gdGhlIGJ1ZmZlciAqLworICBzaXplX3Qgd2luZGV4OyAvKiBpbmRleCBpbiB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0YXJ0IHdyaXRpbmcgdGhlIG5leHQKKyAgICAgICAgICAgICAgICAgICAgZGF0YSBibG9jayAqLworfTsKKworI2RlZmluZSBRVUlDX01BWF9TVFJFQU1TICgyNTYqMTAyNCkKKyNkZWZpbmUgUVVJQ19NQVhfREFUQSAoMSoxMDI0KjEwMjQpCisjZGVmaW5lIFFVSUNfSURMRV9USU1FT1VUIDYwMDAwIC8qIG1pbGxpc2Vjb25kcyAqLworCisjaWZkZWYgVVNFX09QRU5TU0wKKyNkZWZpbmUgUVVJQ19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIlRMU19BRVNfMTI4X0dDTV9TSEEyNTY6VExTX0FFU18yNTZfR0NNX1NIQTM4NDpUTFNfQ0hBQ0hBMjBfIiAgICAgICAgICAgICAgIFwKKyAgIlBPTFkxMzA1X1NIQTI1NjpUTFNfQUVTXzEyOF9DQ01fU0hBMjU2IgorI2RlZmluZSBRVUlDX0dST1VQUyAiUC0yNTY6WDI1NTE5OlAtMzg0OlAtNTIxIgorI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorI2RlZmluZSBRVUlDX1BSSU9SSVRZIFwKKyAgIk5PUk1BTDotVkVSUy1BTEw6K1ZFUlMtVExTMS4zOi1DSVBIRVItQUxMOitBRVMtMTI4LUdDTTorQUVTLTI1Ni1HQ006IiBcCisgICIrQ0hBQ0hBMjAtUE9MWTEzMDU6K0FFUy0xMjgtQ0NNOi1HUk9VUC1BTEw6K0dST1VQLVNFQ1AyNTZSMToiIFwKKyAgIitHUk9VUC1YMjU1MTk6K0dST1VQLVNFQ1AzODRSMTorR1JPVVAtU0VDUDUyMVIxIgorI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSBuZ19wcm9jZXNzX2luZ3Jlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKTsKK3N0YXRpYyBDVVJMY29kZSBuZ19mbHVzaF9lZ3Jlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpOworc3RhdGljIGludCBjYl9oM19hY2tlZF9zdHJlYW1fZGF0YShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKTsKKworc3RhdGljIG5ndGNwMl90c3RhbXAgdGltZXN0YW1wKHZvaWQpCit7CisgIHN0cnVjdCBjdXJsdGltZSBjdCA9IEN1cmxfbm93KCk7CisgIHJldHVybiBjdC50dl9zZWMgKiBOR1RDUDJfU0VDT05EUyArIGN0LnR2X3VzZWMgKiBOR1RDUDJfTUlDUk9TRUNPTkRTOworfQorCisjaWZkZWYgREVCVUdfTkdUQ1AyCitzdGF0aWMgdm9pZCBxdWljX3ByaW50Zih2b2lkICp1c2VyX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFwOworICAodm9pZCl1c2VyX2RhdGE7IC8qIFRPRE8sIHVzZSB0aGlzIHRvIGRvIGluZm9mKCkgaW5zdGVhZCBsb25nLXRlcm0gKi8KKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgVVNFX09QRU5TU0wKK3N0YXRpYyBuZ3RjcDJfY3J5cHRvX2xldmVsCitxdWljX2Zyb21fb3NzbF9sZXZlbChPU1NMX0VOQ1JZUFRJT05fTEVWRUwgb3NzbF9sZXZlbCkKK3sKKyAgc3dpdGNoKG9zc2xfbGV2ZWwpIHsKKyAgY2FzZSBzc2xfZW5jcnlwdGlvbl9pbml0aWFsOgorICAgIHJldHVybiBOR1RDUDJfQ1JZUFRPX0xFVkVMX0lOSVRJQUw7CisgIGNhc2Ugc3NsX2VuY3J5cHRpb25fZWFybHlfZGF0YToKKyAgICByZXR1cm4gTkdUQ1AyX0NSWVBUT19MRVZFTF9FQVJMWTsKKyAgY2FzZSBzc2xfZW5jcnlwdGlvbl9oYW5kc2hha2U6CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfSEFORFNIQUtFOworICBjYXNlIHNzbF9lbmNyeXB0aW9uX2FwcGxpY2F0aW9uOgorICAgIHJldHVybiBOR1RDUDJfQ1JZUFRPX0xFVkVMX0FQUDsKKyAgZGVmYXVsdDoKKyAgICBhc3NlcnQoMCk7CisgIH0KK30KKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKK3N0YXRpYyBuZ3RjcDJfY3J5cHRvX2xldmVsCitxdWljX2Zyb21fZ3Rsc19sZXZlbChnbnV0bHNfcmVjb3JkX2VuY3J5cHRpb25fbGV2ZWxfdCBndGxzX2xldmVsKQoreworICBzd2l0Y2goZ3Rsc19sZXZlbCkgeworICBjYXNlIEdOVVRMU19FTkNSWVBUSU9OX0xFVkVMX0lOSVRJQUw6CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfSU5JVElBTDsKKyAgY2FzZSBHTlVUTFNfRU5DUllQVElPTl9MRVZFTF9FQVJMWToKKyAgICByZXR1cm4gTkdUQ1AyX0NSWVBUT19MRVZFTF9FQVJMWTsKKyAgY2FzZSBHTlVUTFNfRU5DUllQVElPTl9MRVZFTF9IQU5EU0hBS0U6CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfSEFORFNIQUtFOworICBjYXNlIEdOVVRMU19FTkNSWVBUSU9OX0xFVkVMX0FQUExJQ0FUSU9OOgorICAgIHJldHVybiBOR1RDUDJfQ1JZUFRPX0xFVkVMX0FQUDsKKyAgZGVmYXVsdDoKKyAgICBhc3NlcnQoMCk7CisgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBxbG9nX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgaWYocXMtPnFsb2dmZCAhPSAtMSkgeworICAgIHNzaXplX3QgcmMgPSB3cml0ZShxcy0+cWxvZ2ZkLCBkYXRhLCBkYXRhbGVuKTsKKyAgICBpZihyYyA9PSAtMSkgeworICAgICAgLyogb24gd3JpdGUgZXJyb3IsIHN0b3AgZnVydGhlciB3cml0ZSBhdHRlbXB0cyAqLworICAgICAgY2xvc2UocXMtPnFsb2dmZCk7CisgICAgICBxcy0+cWxvZ2ZkID0gLTE7CisgICAgfQorICB9CisKK30KKworc3RhdGljIHZvaWQgcXVpY19zZXR0aW5ncyhzdHJ1Y3QgcXVpY3NvY2tldCAqcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHN0cmVhbV9idWZmZXJfc2l6ZSkKK3sKKyAgbmd0Y3AyX3NldHRpbmdzICpzID0gJnFzLT5zZXR0aW5nczsKKyAgbmd0Y3AyX3NldHRpbmdzX2RlZmF1bHQocyk7CisjaWZkZWYgREVCVUdfTkdUQ1AyCisgIHMtPmxvZ19wcmludGYgPSBxdWljX3ByaW50ZjsKKyNlbHNlCisgIHMtPmxvZ19wcmludGYgPSBOVUxMOworI2VuZGlmCisgIHMtPmluaXRpYWxfdHMgPSB0aW1lc3RhbXAoKTsKKyAgcy0+dHJhbnNwb3J0X3BhcmFtcy5pbml0aWFsX21heF9zdHJlYW1fZGF0YV9iaWRpX2xvY2FsID0gc3RyZWFtX2J1ZmZlcl9zaXplOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X3N0cmVhbV9kYXRhX2JpZGlfcmVtb3RlID0gUVVJQ19NQVhfU1RSRUFNUzsKKyAgcy0+dHJhbnNwb3J0X3BhcmFtcy5pbml0aWFsX21heF9zdHJlYW1fZGF0YV91bmkgPSBRVUlDX01BWF9TVFJFQU1TOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X2RhdGEgPSBRVUlDX01BWF9EQVRBOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X3N0cmVhbXNfYmlkaSA9IDE7CisgIHMtPnRyYW5zcG9ydF9wYXJhbXMuaW5pdGlhbF9tYXhfc3RyZWFtc191bmkgPSAzOworICBzLT50cmFuc3BvcnRfcGFyYW1zLm1heF9pZGxlX3RpbWVvdXQgPSBRVUlDX0lETEVfVElNRU9VVDsKKyAgaWYocXMtPnFsb2dmZCAhPSAtMSkgeworICAgIHMtPnFsb2cud3JpdGUgPSBxbG9nX2NhbGxiYWNrOworICB9Cit9CisKKyNpZmRlZiBVU0VfT1BFTlNTTAorc3RhdGljIHZvaWQga2V5bG9nX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsLCBjb25zdCBjaGFyICpsaW5lKQoreworICAodm9pZClzc2w7CisgIEN1cmxfdGxzX2tleWxvZ193cml0ZV9saW5lKGxpbmUpOworfQorI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorc3RhdGljIGludCBrZXlsb2dfY2FsbGJhY2soZ251dGxzX3Nlc3Npb25fdCBzZXNzaW9uLCBjb25zdCBjaGFyICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX2RhdHVtX3QgKnNlY3JldCkKK3sKKyAgZ251dGxzX2RhdHVtX3QgY3JhbmRvbTsKKyAgZ251dGxzX2RhdHVtX3Qgc3JhbmRvbTsKKworICBnbnV0bHNfc2Vzc2lvbl9nZXRfcmFuZG9tKHNlc3Npb24sICZjcmFuZG9tLCAmc3JhbmRvbSk7CisgIGlmKGNyYW5kb20uc2l6ZSAhPSAzMikgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIEN1cmxfdGxzX2tleWxvZ193cml0ZShsYWJlbCwgY3JhbmRvbS5kYXRhLCBzZWNyZXQtPmRhdGEsIHNlY3JldC0+c2l6ZSk7CisgIHJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5pdF9uZ2gzX2Nvbm4oc3RydWN0IHF1aWNzb2NrZXQgKnFzKTsKKworc3RhdGljIGludCB3cml0ZV9jbGllbnRfaGFuZHNoYWtlKHN0cnVjdCBxdWljc29ja2V0ICpxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3RjcDJfY3J5cHRvX2xldmVsIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBxdWljX2hhbmRzaGFrZSAqY3J5cHRvX2RhdGE7CisgIGludCBydjsKKworICBjcnlwdG9fZGF0YSA9ICZxcy0+Y3J5cHRvX2RhdGFbbGV2ZWxdOworICBpZihjcnlwdG9fZGF0YS0+YnVmID09IE5VTEwpIHsKKyAgICBjcnlwdG9fZGF0YS0+YnVmID0gbWFsbG9jKDQwOTYpOworICAgIGlmKCFjcnlwdG9fZGF0YS0+YnVmKQorICAgICAgcmV0dXJuIDA7CisgICAgY3J5cHRvX2RhdGEtPmFsbG9jbGVuID0gNDA5NjsKKyAgfQorCisgIC8qIFRPRE8gSnVzdCBwcmV0ZW5kIHRoYXQgaGFuZHNoYWtlIGRvZXMgbm90IGdyb3cgbW9yZSB0aGFuIDRLaUIgZm9yCisgICAgIG5vdyAqLworICBhc3NlcnQoY3J5cHRvX2RhdGEtPmxlbiArIGxlbiA8PSBjcnlwdG9fZGF0YS0+YWxsb2NsZW4pOworCisgIG1lbWNweSgmY3J5cHRvX2RhdGEtPmJ1ZltjcnlwdG9fZGF0YS0+bGVuXSwgZGF0YSwgbGVuKTsKKyAgY3J5cHRvX2RhdGEtPmxlbiArPSBsZW47CisKKyAgcnYgPSBuZ3RjcDJfY29ubl9zdWJtaXRfY3J5cHRvX2RhdGEoCisgICAgcXMtPnFjb25uLCBsZXZlbCwgKHVpbnQ4X3QgKikoJmNyeXB0b19kYXRhLT5idWZbY3J5cHRvX2RhdGEtPmxlbl0gLSBsZW4pLAorICAgIGxlbik7CisgIGlmKHJ2KSB7CisgICAgSDNCVUdGKGZwcmludGYoc3RkZXJyLCAid3JpdGVfY2xpZW50X2hhbmRzaGFrZSBmYWlsZWRcbiIpKTsKKyAgfQorICBhc3NlcnQoMCA9PSBydik7CisKKyAgcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBVU0VfT1BFTlNTTAorc3RhdGljIGludCBxdWljX3NldF9lbmNyeXB0aW9uX3NlY3JldHMoU1NMICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPU1NMX0VOQ1JZUFRJT05fTEVWRUwgb3NzbF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnJ4X3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnR4X3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWNyZXRsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKVNTTF9nZXRfYXBwX2RhdGEoc3NsKTsKKyAgaW50IGxldmVsID0gcXVpY19mcm9tX29zc2xfbGV2ZWwob3NzbF9sZXZlbCk7CisKKyAgaWYobmd0Y3AyX2NyeXB0b19kZXJpdmVfYW5kX2luc3RhbGxfcnhfa2V5KAorICAgICAgIHFzLT5xY29ubiwgTlVMTCwgTlVMTCwgTlVMTCwgbGV2ZWwsIHJ4X3NlY3JldCwgc2VjcmV0bGVuKSAhPSAwKQorICAgIHJldHVybiAwOworCisgIGlmKG5ndGNwMl9jcnlwdG9fZGVyaXZlX2FuZF9pbnN0YWxsX3R4X2tleSgKKyAgICAgICBxcy0+cWNvbm4sIE5VTEwsIE5VTEwsIE5VTEwsIGxldmVsLCB0eF9zZWNyZXQsIHNlY3JldGxlbikgIT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZihsZXZlbCA9PSBOR1RDUDJfQ1JZUFRPX0xFVkVMX0FQUCkgeworICAgIGlmKGluaXRfbmdoM19jb25uKHFzKSAhPSBDVVJMRV9PSykKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19hZGRfaGFuZHNoYWtlX2RhdGEoU1NMICpzc2wsIE9TU0xfRU5DUllQVElPTl9MRVZFTCBvc3NsX2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKilTU0xfZ2V0X2FwcF9kYXRhKHNzbCk7CisgIG5ndGNwMl9jcnlwdG9fbGV2ZWwgbGV2ZWwgPSBxdWljX2Zyb21fb3NzbF9sZXZlbChvc3NsX2xldmVsKTsKKworICByZXR1cm4gd3JpdGVfY2xpZW50X2hhbmRzaGFrZShxcywgbGV2ZWwsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19mbHVzaF9mbGlnaHQoU1NMICpzc2wpCit7CisgICh2b2lkKXNzbDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19zZW5kX2FsZXJ0KFNTTCAqc3NsLCBlbnVtIHNzbF9lbmNyeXB0aW9uX2xldmVsX3QgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFsZXJ0KQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKilTU0xfZ2V0X2FwcF9kYXRhKHNzbCk7CisgICh2b2lkKWxldmVsOworCisgIHFzLT50bHNfYWxlcnQgPSBhbGVydDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBTU0xfUVVJQ19NRVRIT0QgcXVpY19tZXRob2QgPSB7cXVpY19zZXRfZW5jcnlwdGlvbl9zZWNyZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWljX2FkZF9oYW5kc2hha2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpY19mbHVzaF9mbGlnaHQsIHF1aWNfc2VuZF9hbGVydH07CisKK3N0YXRpYyBTU0xfQ1RYICpxdWljX3NzbF9jdHgoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK3sKKyAgU1NMX0NUWCAqc3NsX2N0eCA9IFNTTF9DVFhfbmV3KFRMU19tZXRob2QoKSk7CisKKyAgU1NMX0NUWF9zZXRfbWluX3Byb3RvX3ZlcnNpb24oc3NsX2N0eCwgVExTMV8zX1ZFUlNJT04pOworICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihzc2xfY3R4LCBUTFMxXzNfVkVSU0lPTik7CisKKyAgU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc3NsX2N0eCk7CisKKyAgaWYoU1NMX0NUWF9zZXRfY2lwaGVyc3VpdGVzKHNzbF9jdHgsIFFVSUNfQ0lQSEVSUykgIT0gMSkgeworICAgIGNoYXIgZXJyb3JfYnVmZmVyWzI1Nl07CisgICAgRVJSX2Vycm9yX3N0cmluZ19uKEVSUl9nZXRfZXJyb3IoKSwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgZmFpbGYoZGF0YSwgIlNTTF9DVFhfc2V0X2NpcGhlcnN1aXRlczogJXMiLCBlcnJvcl9idWZmZXIpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaWYoU1NMX0NUWF9zZXQxX2dyb3Vwc19saXN0KHNzbF9jdHgsIFFVSUNfR1JPVVBTKSAhPSAxKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTF9DVFhfc2V0MV9ncm91cHNfbGlzdCBmYWlsZWQiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIFNTTF9DVFhfc2V0X3F1aWNfbWV0aG9kKHNzbF9jdHgsICZxdWljX21ldGhvZCk7CisKKyAgLyogT3BlbiB0aGUgZmlsZSBpZiBhIFRMUyBvciBRVUlDIGJhY2tlbmQgaGFzIG5vdCBkb25lIHRoaXMgYmVmb3JlLiAqLworICBDdXJsX3Rsc19rZXlsb2dfb3BlbigpOworICBpZihDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCgpKSB7CisgICAgU1NMX0NUWF9zZXRfa2V5bG9nX2NhbGxiYWNrKHNzbF9jdHgsIGtleWxvZ19jYWxsYmFjayk7CisgIH0KKworICByZXR1cm4gc3NsX2N0eDsKK30KKworLyoqIFNTTCBjYWxsYmFja3MgKioqLworCitzdGF0aWMgaW50IHF1aWNfaW5pdF9zc2woc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBjb25zdCB1aW50OF90ICphbHBuID0gTlVMTDsKKyAgc2l6ZV90IGFscG5sZW4gPSAwOworICAvKiB0aGlzIHdpbGwgbmVlZCBzb21lIGF0dGVudGlvbiB3aGVuIEhUVFBTIHByb3h5IG92ZXIgUVVJQyBnZXQgZml4ZWQgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gcXMtPmNvbm4tPmhvc3QubmFtZTsKKworICBERUJVR0FTU0VSVCghcXMtPnNzbCk7CisgIHFzLT5zc2wgPSBTU0xfbmV3KHFzLT5zc2xjdHgpOworCisgIFNTTF9zZXRfYXBwX2RhdGEocXMtPnNzbCwgcXMpOworICBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUocXMtPnNzbCk7CisKKyAgc3dpdGNoKHFzLT52ZXJzaW9uKSB7CisjaWZkZWYgTkdUQ1AyX1BST1RPX1ZFUgorICBjYXNlIE5HVENQMl9QUk9UT19WRVI6CisgICAgYWxwbiA9IChjb25zdCB1aW50OF90ICopTkdIVFRQM19BTFBOX0gzOworICAgIGFscG5sZW4gPSBzaXplb2YoTkdIVFRQM19BTFBOX0gzKSAtIDE7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgfQorICBpZihhbHBuKQorICAgIFNTTF9zZXRfYWxwbl9wcm90b3MocXMtPnNzbCwgYWxwbiwgKGludClhbHBubGVuKTsKKworICAvKiBzZXQgU05JICovCisgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShxcy0+c3NsLCBob3N0bmFtZSk7CisgIHJldHVybiAwOworfQorI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorc3RhdGljIGludCBzZWNyZXRfZnVuYyhnbnV0bHNfc2Vzc2lvbl90IHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgZ251dGxzX3JlY29yZF9lbmNyeXB0aW9uX2xldmVsX3QgZ3Rsc19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcnhfc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp0eF9zZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGdudXRsc19zZXNzaW9uX2dldF9wdHIoc3NsKTsKKyAgaW50IGxldmVsID0gcXVpY19mcm9tX2d0bHNfbGV2ZWwoZ3Rsc19sZXZlbCk7CisKKyAgaWYobGV2ZWwgIT0gTkdUQ1AyX0NSWVBUT19MRVZFTF9FQVJMWSAmJgorICAgICBuZ3RjcDJfY3J5cHRvX2Rlcml2ZV9hbmRfaW5zdGFsbF9yeF9rZXkoCisgICAgICAgcXMtPnFjb25uLCBOVUxMLCBOVUxMLCBOVUxMLCBsZXZlbCwgcnhfc2VjcmV0LCBzZWNyZXRsZW4pICE9IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYobmd0Y3AyX2NyeXB0b19kZXJpdmVfYW5kX2luc3RhbGxfdHhfa2V5KAorICAgICAgIHFzLT5xY29ubiwgTlVMTCwgTlVMTCwgTlVMTCwgbGV2ZWwsIHR4X3NlY3JldCwgc2VjcmV0bGVuKSAhPSAwKQorICAgIHJldHVybiAwOworCisgIGlmKGxldmVsID09IE5HVENQMl9DUllQVE9fTEVWRUxfQVBQKSB7CisgICAgaWYoaW5pdF9uZ2gzX2Nvbm4ocXMpICE9IENVUkxFX09LKQorICAgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9mdW5jKGdudXRsc19zZXNzaW9uX3Qgc3NsLAorICAgICAgICAgICAgICAgICAgICAgZ251dGxzX3JlY29yZF9lbmNyeXB0aW9uX2xldmVsX3QgZ3Rsc19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIGdudXRsc19oYW5kc2hha2VfZGVzY3JpcHRpb25fdCBodHlwZSwgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGdudXRsc19zZXNzaW9uX2dldF9wdHIoc3NsKTsKKyAgbmd0Y3AyX2NyeXB0b19sZXZlbCBsZXZlbCA9IHF1aWNfZnJvbV9ndGxzX2xldmVsKGd0bHNfbGV2ZWwpOworICBpbnQgcnY7CisKKyAgaWYoaHR5cGUgPT0gR05VVExTX0hBTkRTSEFLRV9DSEFOR0VfQ0lQSEVSX1NQRUMpCisgICAgcmV0dXJuIDA7CisKKyAgcnYgPSB3cml0ZV9jbGllbnRfaGFuZHNoYWtlKHFzLCBsZXZlbCwgZGF0YSwgbGVuKTsKKyAgaWYocnYgPT0gMCkKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxlcnRfcmVhZF9mdW5jKGdudXRsc19zZXNzaW9uX3Qgc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251dGxzX3JlY29yZF9lbmNyeXB0aW9uX2xldmVsX3QgZ3Rsc19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdudXRsc19hbGVydF9sZXZlbF90IGFsZXJ0X2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251dGxzX2FsZXJ0X2Rlc2NyaXB0aW9uX3QgYWxlcnRfZGVzYykKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gZ251dGxzX3Nlc3Npb25fZ2V0X3B0cihzc2wpOworICAodm9pZClndGxzX2xldmVsOworICAodm9pZClhbGVydF9sZXZlbDsKKworICBxcy0+dGxzX2FsZXJ0ID0gYWxlcnRfZGVzYzsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdHBfcmVjdl9mdW5jKGdudXRsc19zZXNzaW9uX3Qgc3NsLCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gZ251dGxzX3Nlc3Npb25fZ2V0X3B0cihzc2wpOworICBuZ3RjcDJfdHJhbnNwb3J0X3BhcmFtcyBwYXJhbXM7CisKKyAgaWYobmd0Y3AyX2RlY29kZV90cmFuc3BvcnRfcGFyYW1zKAorICAgICAgICZwYXJhbXMsIE5HVENQMl9UUkFOU1BPUlRfUEFSQU1TX1RZUEVfRU5DUllQVEVEX0VYVEVOU0lPTlMsCisgICAgICAgZGF0YSwgZGF0YV9zaXplKSAhPSAwKQorICAgIHJldHVybiAtMTsKKworICBpZihuZ3RjcDJfY29ubl9zZXRfcmVtb3RlX3RyYW5zcG9ydF9wYXJhbXMocXMtPnFjb25uLCAmcGFyYW1zKSAhPSAwKQorICAgIHJldHVybiAtMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cF9zZW5kX2Z1bmMoZ251dGxzX3Nlc3Npb25fdCBzc2wsIGdudXRsc19idWZmZXJfdCBleHRkYXRhKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSBnbnV0bHNfc2Vzc2lvbl9nZXRfcHRyKHNzbCk7CisgIHVpbnQ4X3QgcGFyYW1zYnVmWzY0XTsKKyAgbmd0Y3AyX3RyYW5zcG9ydF9wYXJhbXMgcGFyYW1zOworICBzc2l6ZV90IG53cml0ZTsKKyAgaW50IHJjOworCisgIG5ndGNwMl9jb25uX2dldF9sb2NhbF90cmFuc3BvcnRfcGFyYW1zKHFzLT5xY29ubiwgJnBhcmFtcyk7CisgIG53cml0ZSA9IG5ndGNwMl9lbmNvZGVfdHJhbnNwb3J0X3BhcmFtcygKKyAgICBwYXJhbXNidWYsIHNpemVvZihwYXJhbXNidWYpLCBOR1RDUDJfVFJBTlNQT1JUX1BBUkFNU19UWVBFX0NMSUVOVF9IRUxMTywKKyAgICAmcGFyYW1zKTsKKyAgaWYobndyaXRlIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgIm5ndGNwMl9lbmNvZGVfdHJhbnNwb3J0X3BhcmFtczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgbmd0Y3AyX3N0cmVycm9yKChpbnQpbndyaXRlKSkpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJjID0gZ251dGxzX2J1ZmZlcl9hcHBlbmRfZGF0YShleHRkYXRhLCBwYXJhbXNidWYsIG53cml0ZSk7CisgIGlmKHJjIDwgMCkKKyAgICByZXR1cm4gcmM7CisKKyAgcmV0dXJuIChpbnQpbndyaXRlOworfQorCitzdGF0aWMgaW50IHF1aWNfaW5pdF9zc2woc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBnbnV0bHNfZGF0dW1fdCBhbHBuID0ge05VTEwsIDB9OworICAvKiB0aGlzIHdpbGwgbmVlZCBzb21lIGF0dGVudGlvbiB3aGVuIEhUVFBTIHByb3h5IG92ZXIgUVVJQyBnZXQgZml4ZWQgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gcXMtPmNvbm4tPmhvc3QubmFtZTsKKyAgaW50IHJjOworCisgIERFQlVHQVNTRVJUKCFxcy0+c3NsKTsKKworICBnbnV0bHNfaW5pdCgmcXMtPnNzbCwgR05VVExTX0NMSUVOVCk7CisgIGdudXRsc19zZXNzaW9uX3NldF9wdHIocXMtPnNzbCwgcXMpOworCisgIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3QocXMtPnNzbCwgUVVJQ19QUklPUklUWSwgTlVMTCk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgImdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZ251dGxzX3N0cmVycm9yKHJjKSkpOworICAgIHJldHVybiAxOworICB9CisKKyAgZ251dGxzX2hhbmRzaGFrZV9zZXRfc2VjcmV0X2Z1bmN0aW9uKHFzLT5zc2wsIHNlY3JldF9mdW5jKTsKKyAgZ251dGxzX2hhbmRzaGFrZV9zZXRfcmVhZF9mdW5jdGlvbihxcy0+c3NsLCByZWFkX2Z1bmMpOworICBnbnV0bHNfYWxlcnRfc2V0X3JlYWRfZnVuY3Rpb24ocXMtPnNzbCwgYWxlcnRfcmVhZF9mdW5jKTsKKworICByYyA9IGdudXRsc19zZXNzaW9uX2V4dF9yZWdpc3Rlcihxcy0+c3NsLCAiUVVJQyBUcmFuc3BvcnQgUGFyYW1ldGVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZhNSwgR05VVExTX0VYVF9UTFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwX3JlY3ZfZnVuYywgdHBfc2VuZF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfRVhUX0ZMQUdfVExTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX0VYVF9GTEFHX0NMSUVOVF9IRUxMTyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19FWFRfRkxBR19FRSk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgImdudXRsc19zZXNzaW9uX2V4dF9yZWdpc3RlciBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIC8qIE9wZW4gdGhlIGZpbGUgaWYgYSBUTFMgb3IgUVVJQyBiYWNrZW5kIGhhcyBub3QgZG9uZSB0aGlzIGJlZm9yZS4gKi8KKyAgQ3VybF90bHNfa2V5bG9nX29wZW4oKTsKKyAgaWYoQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIGdudXRsc19zZXNzaW9uX3NldF9rZXlsb2dfZnVuY3Rpb24ocXMtPnNzbCwga2V5bG9nX2NhbGxiYWNrKTsKKyAgfQorCisgIGlmKHFzLT5jcmVkKQorICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9mcmVlX2NyZWRlbnRpYWxzKHFzLT5jcmVkKTsKKworICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscygmcXMtPmNyZWQpOworICBpZihyYyA8IDApIHsKKyAgICBIM0JVR0YoZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgImdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3N5c3RlbV90cnVzdChxcy0+Y3JlZCk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAiZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3N5c3RlbV90cnVzdCBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJjID0gZ251dGxzX2NyZWRlbnRpYWxzX3NldChxcy0+c3NsLCBHTlVUTFNfQ1JEX0NFUlRJRklDQVRFLCBxcy0+Y3JlZCk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgImdudXRsc19jcmVkZW50aWFsc19zZXQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfc3RyZXJyb3IocmMpKSk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBzd2l0Y2gocXMtPnZlcnNpb24pIHsKKyNpZmRlZiBOR1RDUDJfUFJPVE9fVkVSCisgIGNhc2UgTkdUQ1AyX1BST1RPX1ZFUjoKKyAgICAvKiBzdHJpcCB0aGUgZmlyc3QgYnl0ZSAodGhlIGxlbmd0aCkgZnJvbSBOR0hUVFAzX0FMUE5fSDMgKi8KKyAgICBhbHBuLmRhdGEgPSAodW5zaWduZWQgY2hhciAqKU5HSFRUUDNfQUxQTl9IMyArIDE7CisgICAgYWxwbi5zaXplID0gc2l6ZW9mKE5HSFRUUDNfQUxQTl9IMykgLSAyOworICAgIGJyZWFrOworI2VuZGlmCisgIH0KKyAgaWYoYWxwbi5kYXRhKQorICAgIGdudXRsc19hbHBuX3NldF9wcm90b2NvbHMocXMtPnNzbCwgJmFscG4sIDEsIDApOworCisgIC8qIHNldCBTTkkgKi8KKyAgZ251dGxzX3NlcnZlcl9uYW1lX3NldChxcy0+c3NsLCBHTlVUTFNfTkFNRV9ETlMsIGhvc3RuYW1lLCBzdHJsZW4oaG9zdG5hbWUpKTsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorY2JfcmVjdl9jcnlwdG9fZGF0YShuZ3RjcDJfY29ubiAqdGNvbm4sIG5ndGNwMl9jcnlwdG9fbGV2ZWwgY3J5cHRvX2xldmVsLAorICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgICh2b2lkKW9mZnNldDsKKyAgKHZvaWQpdXNlcl9kYXRhOworCisgIGlmKG5ndGNwMl9jcnlwdG9fcmVhZF93cml0ZV9jcnlwdG9fZGF0YSh0Y29ubiwgY3J5cHRvX2xldmVsLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWxlbikgIT0gMCkKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DUllQVE87CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaGFuZHNoYWtlX2NvbXBsZXRlZChuZ3RjcDJfY29ubiAqdGNvbm4sIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICAodm9pZCl0Y29ubjsKKyAgaW5mb2YocXMtPmNvbm4tPmRhdGEsICJRVUlDIGhhbmRzaGFrZSBpcyBjb21wbGV0ZWRcbiIpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBleHRlbmRfc3RyZWFtX3dpbmRvdyhuZ3RjcDJfY29ubiAqdGNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgSFRUUCAqc3RyZWFtKQoreworICBzaXplX3QgdGhpc211Y2ggPSBzdHJlYW0tPnVuYWNrZWRfd2luZG93OworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X3N0cmVhbV9vZmZzZXQodGNvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCwgdGhpc211Y2gpOworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X29mZnNldCh0Y29ubiwgdGhpc211Y2gpOworICBzdHJlYW0tPnVuYWNrZWRfd2luZG93ID0gMDsKK30KKworCitzdGF0aWMgaW50IGNiX3JlY3Zfc3RyZWFtX2RhdGEobmd0Y3AyX2Nvbm4gKnRjb25uLCB1aW50MzJfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHN0cmVhbV9pZCwgdWludDY0X3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgc3NpemVfdCBuY29uc3VtZWQ7CisgIGludCBmaW4gPSBmbGFncyAmIE5HVENQMl9TVFJFQU1fREFUQV9GTEFHX0ZJTiA/IDEgOiAwOworICAodm9pZClvZmZzZXQ7CisgICh2b2lkKXN0cmVhbV91c2VyX2RhdGE7CisKKyAgbmNvbnN1bWVkID0KKyAgICBuZ2h0dHAzX2Nvbm5fcmVhZF9zdHJlYW0ocXMtPmgzY29ubiwgc3RyZWFtX2lkLCBidWYsIGJ1ZmxlbiwgZmluKTsKKyAgaWYobmNvbnN1bWVkIDwgMCkgeworICAgIGZhaWxmKHFzLT5jb25uLT5kYXRhLCAibmdodHRwM19jb25uX3JlYWRfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKChpbnQpbmNvbnN1bWVkKSk7CisgICAgcmV0dXJuIE5HVENQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIC8qIG51bWJlciBvZiBieXRlcyBpbnNpZGUgYnVmbGVuIHdoaWNoIGNvbnNpc3RzIG9mIGZyYW1pbmcgb3ZlcmhlYWQKKyAgICogaW5jbHVkaW5nIFFQQUNLIEhFQURFUlMuIEluIG90aGVyIHdvcmRzLCBpdCBkb2VzIG5vdCBjb25zdW1lIHBheWxvYWQgb2YKKyAgICogREFUQSBmcmFtZS4gKi8KKyAgbmd0Y3AyX2Nvbm5fZXh0ZW5kX21heF9zdHJlYW1fb2Zmc2V0KHRjb25uLCBzdHJlYW1faWQsIG5jb25zdW1lZCk7CisgIG5ndGNwMl9jb25uX2V4dGVuZF9tYXhfb2Zmc2V0KHRjb25uLCBuY29uc3VtZWQpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjYl9hY2tlZF9zdHJlYW1fZGF0YV9vZmZzZXQobmd0Y3AyX2Nvbm4gKnRjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsIHNpemVfdCBkYXRhbGVuLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICBpbnQgcnY7CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKW9mZnNldDsKKyAgKHZvaWQpZGF0YWxlbjsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKworICBydiA9IG5naHR0cDNfY29ubl9hZGRfYWNrX29mZnNldChxcy0+aDNjb25uLCBzdHJlYW1faWQsIGRhdGFsZW4pOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fYWRkX2Fja19vZmZzZXQgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Jfc3RyZWFtX2Nsb3NlKG5ndGNwMl9jb25uICp0Y29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBhcHBfZXJyb3JfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICBpbnQgcnY7CisgICh2b2lkKXRjb25uOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworICAvKiBzdHJlYW0gaXMgY2xvc2VkLi4uICovCisKKyAgcnYgPSBuZ2h0dHAzX2Nvbm5fY2xvc2Vfc3RyZWFtKHFzLT5oM2Nvbm4sIHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcF9lcnJvcl9jb2RlKTsKKyAgaWYocnYgIT0gMCkgeworICAgIGZhaWxmKHFzLT5jb25uLT5kYXRhLCAibmdodHRwM19jb25uX2Nsb3NlX3N0cmVhbSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgbmdodHRwM19zdHJlcnJvcihydikpOworICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9zdHJlYW1fcmVzZXQobmd0Y3AyX2Nvbm4gKnRjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbmFsX3NpemUsIHVpbnQ2NF90IGFwcF9lcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKil1c2VyX2RhdGE7CisgIGludCBydjsKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKWZpbmFsX3NpemU7CisgICh2b2lkKWFwcF9lcnJvcl9jb2RlOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworCisgIHJ2ID0gbmdodHRwM19jb25uX3Jlc2V0X3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQpOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fcmVzZXRfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKHJ2KSk7CisgICAgcmV0dXJuIE5HVENQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX2V4dGVuZF9tYXhfbG9jYWxfc3RyZWFtc19iaWRpKG5ndGNwMl9jb25uICp0Y29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWF4X3N0cmVhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKW1heF9zdHJlYW1zOworICAodm9pZCl1c2VyX2RhdGE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfZXh0ZW5kX21heF9zdHJlYW1fZGF0YShuZ3RjcDJfY29ubiAqdGNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kYXRhLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICBpbnQgcnY7CisgICh2b2lkKXRjb25uOworICAodm9pZCltYXhfZGF0YTsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKworICBydiA9IG5naHR0cDNfY29ubl91bmJsb2NrX3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQpOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fdW5ibG9ja19zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfZ2V0X25ld19jb25uZWN0aW9uX2lkKG5ndGNwMl9jb25uICp0Y29ubiwgbmd0Y3AyX2NpZCAqY2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdG9rZW4sIHNpemVfdCBjaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICAodm9pZCl0Y29ubjsKKworICByZXN1bHQgPSBDdXJsX3JhbmQocXMtPmNvbm4tPmRhdGEsIGNpZC0+ZGF0YSwgY2lkbGVuKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIGNpZC0+ZGF0YWxlbiA9IGNpZGxlbjsKKworICByZXN1bHQgPSBDdXJsX3JhbmQocXMtPmNvbm4tPmRhdGEsIHRva2VuLCBOR1RDUDJfU1RBVEVMRVNTX1JFU0VUX1RPS0VOTEVOKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBuZ3RjcDJfY29ubl9jYWxsYmFja3MgbmdfY2FsbGJhY2tzID0geworICBuZ3RjcDJfY3J5cHRvX2NsaWVudF9pbml0aWFsX2NiLAorICBOVUxMLCAvKiByZWN2X2NsaWVudF9pbml0aWFsICovCisgIGNiX3JlY3ZfY3J5cHRvX2RhdGEsCisgIGNiX2hhbmRzaGFrZV9jb21wbGV0ZWQsCisgIE5VTEwsIC8qIHJlY3ZfdmVyc2lvbl9uZWdvdGlhdGlvbiAqLworICBuZ3RjcDJfY3J5cHRvX2VuY3J5cHRfY2IsCisgIG5ndGNwMl9jcnlwdG9fZGVjcnlwdF9jYiwKKyAgbmd0Y3AyX2NyeXB0b19ocF9tYXNrX2NiLAorICBjYl9yZWN2X3N0cmVhbV9kYXRhLAorICBOVUxMLCAvKiBhY2tlZF9jcnlwdG9fb2Zmc2V0ICovCisgIGNiX2Fja2VkX3N0cmVhbV9kYXRhX29mZnNldCwKKyAgTlVMTCwgLyogc3RyZWFtX29wZW4gKi8KKyAgY2Jfc3RyZWFtX2Nsb3NlLAorICBOVUxMLCAvKiByZWN2X3N0YXRlbGVzc19yZXNldCAqLworICBuZ3RjcDJfY3J5cHRvX3JlY3ZfcmV0cnlfY2IsCisgIGNiX2V4dGVuZF9tYXhfbG9jYWxfc3RyZWFtc19iaWRpLAorICBOVUxMLCAvKiBleHRlbmRfbWF4X2xvY2FsX3N0cmVhbXNfdW5pICovCisgIE5VTEwsIC8qIHJhbmQgICovCisgIGNiX2dldF9uZXdfY29ubmVjdGlvbl9pZCwKKyAgTlVMTCwgLyogcmVtb3ZlX2Nvbm5lY3Rpb25faWQgKi8KKyAgbmd0Y3AyX2NyeXB0b191cGRhdGVfa2V5X2NiLCAvKiB1cGRhdGVfa2V5ICovCisgIE5VTEwsIC8qIHBhdGhfdmFsaWRhdGlvbiAqLworICBOVUxMLCAvKiBzZWxlY3RfcHJlZmVycmVkX2FkZHIgKi8KKyAgY2Jfc3RyZWFtX3Jlc2V0LAorICBOVUxMLCAvKiBleHRlbmRfbWF4X3JlbW90ZV9zdHJlYW1zX2JpZGkgKi8KKyAgTlVMTCwgLyogZXh0ZW5kX21heF9yZW1vdGVfc3RyZWFtc191bmkgKi8KKyAgY2JfZXh0ZW5kX21heF9zdHJlYW1fZGF0YSwKKyAgTlVMTCwgLyogZGNpZF9zdGF0dXMgKi8KKyAgTlVMTCwgLyogaGFuZHNoYWtlX2NvbmZpcm1lZCAqLworICBOVUxMLCAvKiByZWN2X25ld190b2tlbiAqLworICBuZ3RjcDJfY3J5cHRvX2RlbGV0ZV9jcnlwdG9fYWVhZF9jdHhfY2IsCisgIG5ndGNwMl9jcnlwdG9fZGVsZXRlX2NyeXB0b19jaXBoZXJfY3R4X2NiCit9OworCisvKgorICogTWlnaHQgYmUgY2FsbGVkIHR3aWNlIGZvciBoYXBweSBleWViYWxscy4KKyAqLworQ1VSTGNvZGUgQ3VybF9xdWljX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCit7CisgIGludCByYzsKKyAgaW50IHJ2OworICBDVVJMY29kZSByZXN1bHQ7CisgIG5ndGNwMl9wYXRoIHBhdGg7IC8qIFRPRE86IHRoaXMgbXVzdCBiZSBpbml0aWFsaXplZCBwcm9wZXJseSAqLworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gJmNvbm4tPmhlcXVpY1tzb2NraW5kZXhdOworICBjaGFyIGlwYnVmWzQwXTsKKyAgbG9uZyBwb3J0OworICBpbnQgcWZkOworCisgIGlmKHFzLT5jb25uKQorICAgIEN1cmxfcXVpY19kaXNjb25uZWN0KGNvbm4sIHNvY2tpbmRleCk7CisgIHFzLT5jb25uID0gY29ubjsKKworICAvKiBleHRyYWN0IHRoZSB1c2VkIGFkZHJlc3MgYXMgYSBzdHJpbmcgKi8KKyAgaWYoIUN1cmxfYWRkcjJzdHJpbmcoKHN0cnVjdCBzb2NrYWRkciopYWRkciwgYWRkcmxlbiwgaXBidWYsICZwb3J0KSkgeworICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CisgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgU09DS0VSUk5PLCBDdXJsX3N0cmVycm9yKFNPQ0tFUlJOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIH0KKworICBpbmZvZihkYXRhLCAiQ29ubmVjdCBzb2NrZXQgJWQgb3ZlciBRVUlDIHRvICVzOiVsZFxuIiwKKyAgICAgICAgc29ja2ZkLCBpcGJ1ZiwgcG9ydCk7CisKKyAgcXMtPnZlcnNpb24gPSBOR1RDUDJfUFJPVE9fVkVSOworI2lmZGVmIFVTRV9PUEVOU1NMCisgIHFzLT5zc2xjdHggPSBxdWljX3NzbF9jdHgoZGF0YSk7CisgIGlmKCFxcy0+c3NsY3R4KQorICAgIHJldHVybiBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisjZW5kaWYKKworICBpZihxdWljX2luaXRfc3NsKHFzKSkKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIHFzLT5kY2lkLmRhdGFsZW4gPSBOR1RDUDJfTUFYX0NJRExFTjsKKyAgcmVzdWx0ID0gQ3VybF9yYW5kKGRhdGEsIHFzLT5kY2lkLmRhdGEsIE5HVENQMl9NQVhfQ0lETEVOKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgcXMtPnNjaWQuZGF0YWxlbiA9IE5HVENQMl9NQVhfQ0lETEVOOworICByZXN1bHQgPSBDdXJsX3JhbmQoZGF0YSwgcXMtPnNjaWQuZGF0YSwgTkdUQ1AyX01BWF9DSURMRU4pOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAodm9pZClDdXJsX3Fsb2dkaXIoZGF0YSwgcXMtPnNjaWQuZGF0YSwgTkdUQ1AyX01BWF9DSURMRU4sICZxZmQpOworICBxcy0+cWxvZ2ZkID0gcWZkOyAvKiAtMSBpZiBmYWlsdXJlIGFib3ZlICovCisgIHF1aWNfc2V0dGluZ3MocXMsIGRhdGEtPnNldC5idWZmZXJfc2l6ZSk7CisKKyAgcXMtPmxvY2FsX2FkZHJsZW4gPSBzaXplb2YocXMtPmxvY2FsX2FkZHIpOworICBydiA9IGdldHNvY2tuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZxcy0+bG9jYWxfYWRkciwKKyAgICAgICAgICAgICAgICAgICAmcXMtPmxvY2FsX2FkZHJsZW4pOworICBpZihydiA9PSAtMSkKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIG5ndGNwMl9hZGRyX2luaXQoJnBhdGgubG9jYWwsICh1aW50OF90ICopJnFzLT5sb2NhbF9hZGRyLCBxcy0+bG9jYWxfYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgbmd0Y3AyX2FkZHJfaW5pdCgmcGF0aC5yZW1vdGUsICh1aW50OF90KilhZGRyLCBhZGRybGVuLCBOVUxMKTsKKworI2lmZGVmIE5HVENQMl9QUk9UT19WRVIKKyNkZWZpbmUgUVVJQ1ZFUiBOR1RDUDJfUFJPVE9fVkVSCisjZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBuZ3RjcDIgdmVyc2lvbiIKKyNlbmRpZgorICByYyA9IG5ndGNwMl9jb25uX2NsaWVudF9uZXcoJnFzLT5xY29ubiwgJnFzLT5kY2lkLCAmcXMtPnNjaWQsICZwYXRoLCBRVUlDVkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5nX2NhbGxiYWNrcywgJnFzLT5zZXR0aW5ncywgTlVMTCwgcXMpOworICBpZihyYykKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIG5ndGNwMl9jb25uX3NldF90bHNfbmF0aXZlX2hhbmRsZShxcy0+cWNvbm4sIHFzLT5zc2wpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIFN0b3JlIG5ndHAyIHZlcnNpb24gaW5mbyBpbiB0aGlzIGJ1ZmZlciwgUHJlZml4IHdpdGggYSBzcGFjZS4gIFJldHVybiB0b3RhbAorICogbGVuZ3RoIHdyaXR0ZW4uCisgKi8KK2ludCBDdXJsX3F1aWNfdmVyKGNoYXIgKnAsIHNpemVfdCBsZW4pCit7CisgIG5ndGNwMl9pbmZvICpuZzIgPSBuZ3RjcDJfdmVyc2lvbigwKTsKKyAgbmdodHRwM19pbmZvICpodDMgPSBuZ2h0dHAzX3ZlcnNpb24oMCk7CisgIHJldHVybiBtc25wcmludGYocCwgbGVuLCAibmd0Y3AyLyVzIG5naHR0cDMvJXMiLAorICAgICAgICAgICAgICAgICAgIG5nMi0+dmVyc2lvbl9zdHIsIGh0My0+dmVyc2lvbl9zdHIpOworfQorCitzdGF0aWMgaW50IG5nX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOworICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKKworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworCisgIC8qIGluIGEgSFRUUC8yIGNvbm5lY3Rpb24gd2UgY2FuIGJhc2ljYWxseSBhbHdheXMgZ2V0IGEgZnJhbWUgc28gd2Ugc2hvdWxkCisgICAgIGFsd2F5cyBiZSByZWFkeSBmb3Igb25lICovCisgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKworICAvKiB3ZSdyZSBzdGlsbCB1cGxvYWRpbmcgb3IgdGhlIEhUVFAvMiBsYXllciB3YW50cyB0byBzZW5kIGRhdGEgKi8KKyAgaWYoKGstPmtlZXBvbiAmIChLRUVQX1NFTkR8S0VFUF9TRU5EX1BBVVNFKSkgPT0gS0VFUF9TRU5EKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgcmV0dXJuIGJpdG1hcDsKK30KKworc3RhdGljIGludCBuZ19wZXJmb3JtX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCit7CisgIHJldHVybiBuZ19nZXRzb2NrKChzdHJ1Y3QgY29ubmVjdGRhdGEgKiljb25uLCBzb2Nrcyk7Cit9CisKK3N0YXRpYyB2b2lkIHFzX2Rpc2Nvbm5lY3Qoc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBpbnQgaTsKKyAgaWYoIXFzLT5jb25uKSAvKiBhbHJlYWR5IGNsb3NlZCAqLworICAgIHJldHVybjsKKyAgcXMtPmNvbm4gPSBOVUxMOworICBpZihxcy0+cWxvZ2ZkICE9IC0xKSB7CisgICAgY2xvc2UocXMtPnFsb2dmZCk7CisgICAgcXMtPnFsb2dmZCA9IC0xOworICB9CisgIGlmKHFzLT5zc2wpCisjaWZkZWYgVVNFX09QRU5TU0wKKyAgICBTU0xfZnJlZShxcy0+c3NsKTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKyAgICBnbnV0bHNfZGVpbml0KHFzLT5zc2wpOworI2VuZGlmCisgIHFzLT5zc2wgPSBOVUxMOworI2lmZGVmIFVTRV9HTlVUTFMKKyAgaWYocXMtPmNyZWQpCisgICAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMocXMtPmNyZWQpOworI2VuZGlmCisgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKKyAgICBDdXJsX3NhZmVmcmVlKHFzLT5jcnlwdG9fZGF0YVtpXS5idWYpOworICBuZ2h0dHAzX2Nvbm5fZGVsKHFzLT5oM2Nvbm4pOworICBuZ3RjcDJfY29ubl9kZWwocXMtPnFjb25uKTsKKyNpZmRlZiBVU0VfT1BFTlNTTAorICBTU0xfQ1RYX2ZyZWUocXMtPnNzbGN0eCk7CisjZW5kaWYKK30KKwordm9pZCBDdXJsX3F1aWNfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpCit7CisgIGlmKGNvbm4tPnRyYW5zcG9ydCA9PSBUUk5TUFJUX1FVSUMpCisgICAgcXNfZGlzY29ubmVjdCgmY29ubi0+aGVxdWljW3RlbXBpbmRleF0pOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbmdfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgKHZvaWQpZGVhZF9jb25uZWN0aW9uOworICBDdXJsX3F1aWNfZGlzY29ubmVjdChjb25uLCAwKTsKKyAgQ3VybF9xdWljX2Rpc2Nvbm5lY3QoY29ubiwgMSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBuZ19jb25uY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoZWNrc190b19wZXJmb3JtKQoreworICAodm9pZCljb25uOworICAodm9pZCljaGVja3NfdG9fcGVyZm9ybTsKKyAgcmV0dXJuIENPTk5SRVNVTFRfTk9ORTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2h0dHAzID0geworICAiSFRUUFMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgQ3VybF9odHRwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBuZ19nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgbmdfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgbmdfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgbmdfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIG5nX2Nvbm5jaGVjaywgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0hUVFBTLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX1NTTCB8IFBST1RPUFRfU1RSRUFNICAgICAgICAgIC8qIGZsYWdzICovCit9OworCitzdGF0aWMgaW50IGNiX2gzX3N0cmVhbV9jbG9zZShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYXBwX2Vycm9yX2NvZGUsIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZClhcHBfZXJyb3JfY29kZTsKKyAgKHZvaWQpdXNlcl9kYXRhOworICBIM0JVR0YoaW5mb2YoZGF0YSwgImNiX2gzX3N0cmVhbV9jbG9zZSBDQUxMRURcbiIpKTsKKworICBzdHJlYW0tPmNsb3NlZCA9IFRSVUU7CisgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9RVUlDKTsKKyAgLyogbWFrZSBzdXJlIHRoYXQgbmdoM19zdHJlYW1fcmVjdiBpcyBjYWxsZWQgYWdhaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZmVyCisgICAgIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgcGFja2V0cyB0byBiZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuICovCisgIGRhdGEtPnN0YXRlLmRyYWluID0gMTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiB3cml0ZV9kYXRhKCkgY29waWVzIGRhdGEgdG8gdGhlIHN0cmVhbSdzIHJlY2VpdmUgYnVmZmVyLiBJZiBub3QgZW5vdWdoCisgKiBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIHJlY2VpdmUgYnVmZmVyLCBpdCBjb3BpZXMgdGhlIHJlc3QgdG8gdGhlCisgKiBzdHJlYW0ncyBvdmVyZmxvdyBidWZmZXIuCisgKi8KK3N0YXRpYyBDVVJMY29kZSB3cml0ZV9kYXRhKHN0cnVjdCBIVFRQICpzdHJlYW0sIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IG1lbWxlbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGNvbnN0IGNoYXIgKmJ1ZiA9IG1lbTsKKyAgc2l6ZV90IG5jb3B5ID0gbWVtbGVuOworICAvKiBjb3B5IGFzIG11Y2ggYXMgcG9zc2libGUgdG8gdGhlIHJlY2VpdmUgYnVmZmVyICovCisgIGlmKHN0cmVhbS0+bGVuKSB7CisgICAgc2l6ZV90IGxlbiA9IENVUkxNSU4obmNvcHksIHN0cmVhbS0+bGVuKTsKKyAgICBtZW1jcHkoc3RyZWFtLT5tZW0sIGJ1ZiwgbGVuKTsKKyAgICBzdHJlYW0tPmxlbiAtPSBsZW47CisgICAgc3RyZWFtLT5tZW1sZW4gKz0gbGVuOworICAgIHN0cmVhbS0+bWVtICs9IGxlbjsKKyAgICBidWYgKz0gbGVuOworICAgIG5jb3B5IC09IGxlbjsKKyAgfQorICAvKiBjb3B5IHRoZSByZXN0IHRvIHRoZSBvdmVyZmxvdyBidWZmZXIgKi8KKyAgaWYobmNvcHkpCisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmc3RyZWFtLT5vdmVyZmxvdywgYnVmLCBuY29weSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfcmVjdl9kYXRhKG5naHR0cDNfY29ubiAqY29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisKKyAgcmVzdWx0ID0gd3JpdGVfZGF0YShzdHJlYW0sIGJ1ZiwgYnVmbGVuKTsKKyAgaWYocmVzdWx0KSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHN0cmVhbS0+dW5hY2tlZF93aW5kb3cgKz0gYnVmbGVuOworICAodm9pZClzdHJlYW1faWQ7CisgICh2b2lkKXVzZXJfZGF0YTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfZGVmZXJyZWRfY29uc3VtZShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb25zdW1lZCwgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IHVzZXJfZGF0YTsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKyAgKHZvaWQpc3RyZWFtX2lkOworCisgIG5ndGNwMl9jb25uX2V4dGVuZF9tYXhfc3RyZWFtX29mZnNldChxcy0+cWNvbm4sIHN0cmVhbV9pZCwgY29uc3VtZWQpOworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X29mZnNldChxcy0+cWNvbm4sIGNvbnN1bWVkKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIERlY29kZSBIVFRQIHN0YXR1cyBjb2RlLiAgUmV0dXJucyAtMSBpZiBubyB2YWxpZCBzdGF0dXMgY29kZSB3YXMKKyAgIGRlY29kZWQuIChkdXBsaWNhdGUgZnJvbSBodHRwMi5jKSAqLworc3RhdGljIGludCBkZWNvZGVfc3RhdHVzX2NvZGUoY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCBsZW4pCit7CisgIGludCBpOworICBpbnQgcmVzOworCisgIGlmKGxlbiAhPSAzKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmVzID0gMDsKKworICBmb3IoaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICBjaGFyIGMgPSB2YWx1ZVtpXTsKKworICAgIGlmKGMgPCAnMCcgfHwgYyA+ICc5JykgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJlcyAqPSAxMDsKKyAgICByZXMgKz0gYyAtICcwJzsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfZW5kX2hlYWRlcnMobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICAodm9pZCljb25uOworICAodm9pZClzdHJlYW1faWQ7CisgICh2b2lkKXVzZXJfZGF0YTsKKworICAvKiBhZGQgYSBDUkxGIG9ubHkgaWYgd2UndmUgcmVjZWl2ZWQgc29tZSBoZWFkZXJzICovCisgIGlmKHN0cmVhbS0+Zmlyc3RoZWFkZXIpIHsKKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfcmVjdl9oZWFkZXIobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB0b2tlbiwgbmdodHRwM19yY2J1ZiAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwM19yY2J1ZiAqdmFsdWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgbmdodHRwM192ZWMgaDNuYW1lID0gbmdodHRwM19yY2J1Zl9nZXRfYnVmKG5hbWUpOworICBuZ2h0dHAzX3ZlYyBoM3ZhbCA9IG5naHR0cDNfcmNidWZfZ2V0X2J1Zih2YWx1ZSk7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdG9rZW47CisgICh2b2lkKWZsYWdzOworICAodm9pZCl1c2VyX2RhdGE7CisKKyAgaWYoaDNuYW1lLmxlbiA9PSBzaXplb2YoIjpzdGF0dXMiKSAtIDEgJiYKKyAgICAgIW1lbWNtcCgiOnN0YXR1cyIsIGgzbmFtZS5iYXNlLCBoM25hbWUubGVuKSkgeworICAgIGNoYXIgbGluZVsxNF07IC8qIHN0YXR1cyBsaW5lIGlzIGFsd2F5cyAxMyBjaGFyYWN0ZXJzIGxvbmcgKi8KKyAgICBzaXplX3QgbmNvcHk7CisgICAgaW50IHN0YXR1cyA9IGRlY29kZV9zdGF0dXNfY29kZShoM3ZhbC5iYXNlLCBoM3ZhbC5sZW4pOworICAgIERFQlVHQVNTRVJUKHN0YXR1cyAhPSAtMSk7CisgICAgbmNvcHkgPSBtc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiSFRUUC8zICUwM2QgXHJcbiIsIHN0YXR1cyk7CisgICAgcmVzdWx0ID0gd3JpdGVfZGF0YShzdHJlYW0sIGxpbmUsIG5jb3B5KTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogc3RvcmUgYXMgYSBIVFRQMS1zdHlsZSBoZWFkZXIgKi8KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgaDNuYW1lLmJhc2UsIGgzbmFtZS5sZW4pOworICAgIGlmKHJlc3VsdCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgIjogIiwgMik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJlc3VsdCA9IHdyaXRlX2RhdGEoc3RyZWFtLCBoM3ZhbC5iYXNlLCBoM3ZhbC5sZW4pOworICAgIGlmKHJlc3VsdCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKworICBzdHJlYW0tPmZpcnN0aGVhZGVyID0gVFJVRTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfc2VuZF9zdG9wX3NlbmRpbmcobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYXBwX2Vycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZClhcHBfZXJyb3JfY29kZTsKKyAgKHZvaWQpdXNlcl9kYXRhOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworICByZXR1cm4gMDsKK30KKworc3RhdGljIG5naHR0cDNfY29ubl9jYWxsYmFja3MgbmdoM19jYWxsYmFja3MgPSB7CisgIGNiX2gzX2Fja2VkX3N0cmVhbV9kYXRhLCAvKiBhY2tlZF9zdHJlYW1fZGF0YSAqLworICBjYl9oM19zdHJlYW1fY2xvc2UsCisgIGNiX2gzX3JlY3ZfZGF0YSwKKyAgY2JfaDNfZGVmZXJyZWRfY29uc3VtZSwKKyAgTlVMTCwgLyogYmVnaW5faGVhZGVycyAqLworICBjYl9oM19yZWN2X2hlYWRlciwKKyAgY2JfaDNfZW5kX2hlYWRlcnMsCisgIE5VTEwsIC8qIGJlZ2luX3RyYWlsZXJzICovCisgIGNiX2gzX3JlY3ZfaGVhZGVyLAorICBOVUxMLCAvKiBlbmRfdHJhaWxlcnMgKi8KKyAgTlVMTCwgLyogaHR0cF9iZWdpbl9wdXNoX3Byb21pc2UgKi8KKyAgTlVMTCwgLyogaHR0cF9yZWN2X3B1c2hfcHJvbWlzZSAqLworICBOVUxMLCAvKiBodHRwX2VuZF9wdXNoX3Byb21pc2UgKi8KKyAgTlVMTCwgLyogaHR0cF9jYW5jZWxfcHVzaCAqLworICBjYl9oM19zZW5kX3N0b3Bfc2VuZGluZywKKyAgTlVMTCwgLyogcHVzaF9zdHJlYW0gKi8KKyAgTlVMTCwgLyogZW5kX3N0cmVhbSAqLworfTsKKworc3RhdGljIGludCBpbml0X25naDNfY29ubihzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgaW50IHJjOworICBpbnQ2NF90IGN0cmxfc3RyZWFtX2lkLCBxcGFja19lbmNfc3RyZWFtX2lkLCBxcGFja19kZWNfc3RyZWFtX2lkOworCisgIGlmKG5ndGNwMl9jb25uX2dldF9tYXhfbG9jYWxfc3RyZWFtc191bmkocXMtPnFjb25uKSA8IDMpIHsKKyAgICBmYWlsZihxcy0+Y29ubi0+ZGF0YSwgInRvbyBmZXcgYXZhaWxhYmxlIFFVSUMgc3RyZWFtcyIpOworICAgIHJldHVybiBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBuZ2h0dHAzX2Nvbm5fc2V0dGluZ3NfZGVmYXVsdCgmcXMtPmgzc2V0dGluZ3MpOworCisgIHJjID0gbmdodHRwM19jb25uX2NsaWVudF9uZXcoJnFzLT5oM2Nvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5naDNfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxcy0+aDNzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAzX21lbV9kZWZhdWx0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXMpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgcmMgPSBuZ3RjcDJfY29ubl9vcGVuX3VuaV9zdHJlYW0ocXMtPnFjb25uLCAmY3RybF9zdHJlYW1faWQsIE5VTEwpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByYyA9IG5naHR0cDNfY29ubl9iaW5kX2NvbnRyb2xfc3RyZWFtKHFzLT5oM2Nvbm4sIGN0cmxfc3RyZWFtX2lkKTsKKyAgaWYocmMpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisgICAgZ290byBmYWlsOworICB9CisKKyAgcmMgPSBuZ3RjcDJfY29ubl9vcGVuX3VuaV9zdHJlYW0ocXMtPnFjb25uLCAmcXBhY2tfZW5jX3N0cmVhbV9pZCwgTlVMTCk7CisgIGlmKHJjKSB7CisgICAgcmVzdWx0ID0gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIHJjID0gbmd0Y3AyX2Nvbm5fb3Blbl91bmlfc3RyZWFtKHFzLT5xY29ubiwgJnFwYWNrX2RlY19zdHJlYW1faWQsIE5VTEwpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByYyA9IG5naHR0cDNfY29ubl9iaW5kX3FwYWNrX3N0cmVhbXMocXMtPmgzY29ubiwgcXBhY2tfZW5jX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFwYWNrX2RlY19zdHJlYW1faWQpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7CisgIGZhaWw6CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEN1cmxfcmVjdiBuZ2gzX3N0cmVhbV9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBuZ2gzX3N0cmVhbV9zZW5kOworCitzdGF0aWMgc2l6ZV90IGRyYWluX292ZXJmbG93X2J1ZmZlcihzdHJ1Y3QgSFRUUCAqc3RyZWFtKQoreworICBzaXplX3Qgb3ZlcmxlbiA9IEN1cmxfZHluX2xlbigmc3RyZWFtLT5vdmVyZmxvdyk7CisgIHNpemVfdCBuY29weSA9IENVUkxNSU4ob3Zlcmxlbiwgc3RyZWFtLT5sZW4pOworICBpZihuY29weSA+IDApIHsKKyAgICBtZW1jcHkoc3RyZWFtLT5tZW0sIEN1cmxfZHluX3B0cigmc3RyZWFtLT5vdmVyZmxvdyksIG5jb3B5KTsKKyAgICBzdHJlYW0tPmxlbiAtPSBuY29weTsKKyAgICBzdHJlYW0tPm1lbSArPSBuY29weTsKKyAgICBzdHJlYW0tPm1lbWxlbiArPSBuY29weTsKKyAgICBpZihuY29weSAhPSBvdmVybGVuKQorICAgICAgLyogbWFrZSB0aGUgYnVmZmVyIG9ubHkga2VlcCB0aGUgdGFpbCAqLworICAgICAgKHZvaWQpQ3VybF9keW5fdGFpbCgmc3RyZWFtLT5vdmVyZmxvdywgb3ZlcmxlbiAtIG5jb3B5KTsKKyAgfQorICByZXR1cm4gbmNvcHk7Cit9CisKKy8qIGluY29taW5nIGRhdGEgZnJhbWVzIG9uIHRoZSBoMyBzdHJlYW0gKi8KK3N0YXRpYyBzc2l6ZV90IG5naDNfc3RyZWFtX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKworICBpZighc3RyZWFtLT5tZW1sZW4pIHsKKyAgICAvKiByZW1lbWJlciB3aGVyZSB0byBzdG9yZSBpbmNvbWluZyBkYXRhIGZvciB0aGlzIHN0cmVhbSBhbmQgaG93IGJpZyB0aGUKKyAgICAgICBidWZmZXIgaXMgKi8KKyAgICBzdHJlYW0tPm1lbSA9IGJ1ZjsKKyAgICBzdHJlYW0tPmxlbiA9IGJ1ZmZlcnNpemU7CisgIH0KKyAgLyogZWxzZSwgdGhlcmUncyBkYXRhIGluIHRoZSBidWZmZXIgYWxyZWFkeSAqLworCisgIC8qIGlmIHRoZXJlJ3MgZGF0YSBpbiB0aGUgb3ZlcmZsb3cgYnVmZmVyIGZyb20gYSBwcmV2aW91cyBjYWxsLCBjb3B5IGFzIG11Y2gKKyAgICAgYXMgcG9zc2libGUgdG8gdGhlIHJlY2VpdmUgYnVmZmVyIGJlZm9yZSByZWNlaXZpbmcgbW9yZSAqLworICBkcmFpbl9vdmVyZmxvd19idWZmZXIoc3RyZWFtKTsKKworICBpZihuZ19wcm9jZXNzX2luZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorICBpZihuZ19mbHVzaF9lZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmKHN0cmVhbS0+bWVtbGVuKSB7CisgICAgc3NpemVfdCBtZW1sZW4gPSBzdHJlYW0tPm1lbWxlbjsKKyAgICAvKiBkYXRhIGFycml2ZWQgKi8KKyAgICAqY3VybGNvZGUgPSBDVVJMRV9PSzsKKyAgICAvKiByZXNldCB0byBhbGxvdyBtb3JlIGRhdGEgdG8gY29tZSAqLworICAgIHN0cmVhbS0+bWVtbGVuID0gMDsKKyAgICBzdHJlYW0tPm1lbSA9IGJ1ZjsKKyAgICBzdHJlYW0tPmxlbiA9IGJ1ZmZlcnNpemU7CisgICAgLyogZXh0ZW5kIHRoZSBzdHJlYW0gd2luZG93IHdpdGggdGhlIGRhdGEgd2UncmUgY29uc3VtaW5nIGFuZCBzZW5kIG91dAorICAgICAgIGFueSBhZGRpdGlvbmFsIHBhY2tldHMgdG8gdGVsbCB0aGUgc2VydmVyIHRoYXQgd2UgY2FuIHJlY2VpdmUgbW9yZSAqLworICAgIGV4dGVuZF9zdHJlYW1fd2luZG93KHFzLT5xY29ubiwgc3RyZWFtKTsKKyAgICBpZihuZ19mbHVzaF9lZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtZW1sZW47CisgIH0KKworICBpZihzdHJlYW0tPmNsb3NlZCkgeworICAgICpjdXJsY29kZSA9IENVUkxFX09LOworICAgIHJldHVybiAwOworICB9CisKKyAgaW5mb2YoY29ubi0+ZGF0YSwgIm5naDNfc3RyZWFtX3JlY3YgcmV0dXJucyAwIGJ5dGVzIGFuZCBFQUdBSU5cbiIpOworICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgcmV0dXJuIC0xOworfQorCisvKiB0aGlzIGFtb3VudCBvZiBkYXRhIGhhcyBub3cgYmVlbiBhY2tlZCBvbiB0aGlzIHN0cmVhbSAqLworc3RhdGljIGludCBjYl9oM19hY2tlZF9zdHJlYW1fZGF0YShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdXNlcl9kYXRhOworCisgIGlmKCFkYXRhLT5zZXQucG9zdGZpZWxkcykgeworICAgIHN0cmVhbS0+aDNvdXQtPnVzZWQgLT0gZGF0YWxlbjsKKyAgICBIM0JVR0YoaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgICAgImNiX2gzX2Fja2VkX3N0cmVhbV9kYXRhLCAlemQgYnl0ZXMsICV6ZCBsZWZ0IHVuYWNrZWRcbiIsCisgICAgICAgICAgICAgICAgIGRhdGFsZW4sIHN0cmVhbS0+aDNvdXQtPnVzZWQpKTsKKyAgICBERUJVR0FTU0VSVChzdHJlYW0tPmgzb3V0LT51c2VkIDwgSDNfU0VORF9TSVpFKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY2JfaDNfcmVhZGZ1bmN0aW9uKG5naHR0cDNfY29ubiAqY29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwM192ZWMgKnZlYywgc2l6ZV90IHZlY2NudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcGZsYWdzLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IHN0cmVhbV91c2VyX2RhdGE7CisgIHNpemVfdCBucmVhZDsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdXNlcl9kYXRhOworICAodm9pZCl2ZWNjbnQ7CisKKyAgaWYoZGF0YS0+c2V0LnBvc3RmaWVsZHMpIHsKKyAgICB2ZWNbMF0uYmFzZSA9IGRhdGEtPnNldC5wb3N0ZmllbGRzOworICAgIHZlY1swXS5sZW4gPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICpwZmxhZ3MgPSBOR0hUVFAzX0RBVEFfRkxBR19FT0Y7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBucmVhZCA9IENVUkxNSU4oc3RyZWFtLT51cGxvYWRfbGVuLCBIM19TRU5EX1NJWkUgLSBzdHJlYW0tPmgzb3V0LT51c2VkKTsKKyAgaWYobnJlYWQgPiAwKSB7CisgICAgLyogbmdodHRwMyB3YW50cyB1cyB0byBob2xkIG9uIHRvIHRoZSBkYXRhIHVudGlsIGl0IHRlbGxzIHVzIGl0IGlzIG9rYXkgdG8KKyAgICAgICBkZWxldGUgaXQuIEFwcGVuZCB0aGUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBoM291dCBidWZmZXIuIFNpbmNlIHdlIGNhbgorICAgICAgIG9ubHkgcmV0dXJuIGNvbnNlY3V0aXZlIGRhdGEsIGNvcHkgdGhlIGFtb3VudCB0aGF0IGZpdHMgYW5kIHRoZSBuZXh0CisgICAgICAgcGFydCBjb21lcyBpbiBuZXh0IGludm9rZS4gKi8KKyAgICBzdHJ1Y3QgaDNvdXQgKm91dCA9IHN0cmVhbS0+aDNvdXQ7CisgICAgaWYobnJlYWQgKyBvdXQtPndpbmRleCA+IEgzX1NFTkRfU0laRSkKKyAgICAgIG5yZWFkID0gSDNfU0VORF9TSVpFIC0gb3V0LT53aW5kZXg7CisKKyAgICBtZW1jcHkoJm91dC0+YnVmW291dC0+d2luZGV4XSwgc3RyZWFtLT51cGxvYWRfbWVtLCBucmVhZCk7CisgICAgb3V0LT53aW5kZXggKz0gbnJlYWQ7CisgICAgb3V0LT51c2VkICs9IG5yZWFkOworCisgICAgLyogdGhhdCdzIHRoZSBjaHVuayB3ZSByZXR1cm4gdG8gbmdodHRwMyAqLworICAgIHZlY1swXS5iYXNlID0gJm91dC0+YnVmW291dC0+d2luZGV4XTsKKyAgICB2ZWNbMF0ubGVuID0gbnJlYWQ7CisKKyAgICBpZihvdXQtPndpbmRleCA9PSBIM19TRU5EX1NJWkUpCisgICAgICBvdXQtPndpbmRleCA9IDA7IC8qIHdyYXAgKi8KKyAgICBzdHJlYW0tPnVwbG9hZF9tZW0gKz0gbnJlYWQ7CisgICAgc3RyZWFtLT51cGxvYWRfbGVuIC09IG5yZWFkOworICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgIT0gLTEpIHsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgLT0gbnJlYWQ7CisgICAgICBpZighc3RyZWFtLT51cGxvYWRfbGVmdCkKKyAgICAgICAgKnBmbGFncyA9IE5HSFRUUDNfREFUQV9GTEFHX0VPRjsKKyAgICB9CisgICAgSDNCVUdGKGluZm9mKGRhdGEsICJjYl9oM19yZWFkZnVuY3Rpb24gJXpkIGJ5dGVzJXMgKGF0ICV6ZCB1bmFja2VkKVxuIiwKKyAgICAgICAgICAgICAgICAgbnJlYWQsICpwZmxhZ3MgPT0gTkdIVFRQM19EQVRBX0ZMQUdfRU9GPyIgRU9GIjoiIiwKKyAgICAgICAgICAgICAgICAgb3V0LT51c2VkKSk7CisgIH0KKyAgaWYoc3RyZWFtLT51cGxvYWRfZG9uZSAmJiAhc3RyZWFtLT51cGxvYWRfbGVuICYmCisgICAgIChzdHJlYW0tPnVwbG9hZF9sZWZ0IDw9IDApKSB7CisgICAgSDNCVUdGKGluZm9mKGRhdGEsICIhISEhISEhISEgY2JfaDNfcmVhZGZ1bmN0aW9uIHNldHMgRU9GXG4iKSk7CisgICAgKnBmbGFncyA9IE5HSFRUUDNfREFUQV9GTEFHX0VPRjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBlbHNlIGlmKCFucmVhZCkgeworICAgIHJldHVybiBOR0hUVFAzX0VSUl9XT1VMREJMT0NLOworICB9CisgIHJldHVybiAxOworfQorCisvKiBJbmRleCB3aGVyZSA6YXV0aG9yaXR5IGhlYWRlciBmaWVsZCB3aWxsIGFwcGVhciBpbiByZXF1ZXN0IGhlYWRlcgorICAgZmllbGQgbGlzdC4gKi8KKyNkZWZpbmUgQVVUSE9SSVRZX0RTVF9JRFggMworCitzdGF0aWMgQ1VSTGNvZGUgaHR0cF9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKKyAgc2l6ZV90IG5oZWFkZXI7CisgIHNpemVfdCBpOworICBzaXplX3QgYXV0aG9yaXR5X2lkeDsKKyAgY2hhciAqaGRidWYgPSAoY2hhciAqKW1lbTsKKyAgY2hhciAqZW5kLCAqbGluZV9lbmQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgbmdodHRwM19udiAqbnZhID0gTlVMTDsKKyAgaW50NjRfdCBzdHJlYW0zX2lkOworICBpbnQgcmM7CisgIHN0cnVjdCBoM291dCAqaDNvdXQgPSBOVUxMOworCisgIHJjID0gbmd0Y3AyX2Nvbm5fb3Blbl9iaWRpX3N0cmVhbShxcy0+cWNvbm4sICZzdHJlYW0zX2lkLCBOVUxMKTsKKyAgaWYocmMpIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAiY2FuIGdldCBiaWRpIHN0cmVhbXMiKTsKKyAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIHN0cmVhbS0+c3RyZWFtM19pZCA9IHN0cmVhbTNfaWQ7CisgIHN0cmVhbS0+aDNyZXEgPSBUUlVFOyAvKiBzZW5mIG9mZiEgKi8KKyAgQ3VybF9keW5faW5pdCgmc3RyZWFtLT5vdmVyZmxvdywgQ1VSTF9NQVhfUkVBRF9TSVpFKTsKKworICAvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGhlYWRlcnMgY29udGFpbmVkIGluIFttZW0sIG1lbSArIGxlbikuIEFzc3VtZXMgYQorICAgICBjb3JyZWN0bHkgZ2VuZXJhdGVkIEhUVFAgaGVhZGVyIGZpZWxkIGJsb2NrLiAqLworICBuaGVhZGVyID0gMDsKKyAgZm9yKGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKKyAgICBpZihoZGJ1ZltpXSA9PSAnXG4nICYmIGhkYnVmW2kgLSAxXSA9PSAnXHInKSB7CisgICAgICArK25oZWFkZXI7CisgICAgICArK2k7CisgICAgfQorICB9CisgIGlmKG5oZWFkZXIgPCAyKQorICAgIGdvdG8gZmFpbDsKKworICAvKiBXZSBjb3VudGVkIGFkZGl0aW9uYWwgMiBcclxuIGluIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lLiBXZSBuZWVkIDMKKyAgICAgbmV3IGhlYWRlcnM6IDptZXRob2QsIDpwYXRoIGFuZCA6c2NoZW1lLiBUaGVyZWZvcmUgd2UgbmVlZCBvbmUKKyAgICAgbW9yZSBzcGFjZS4gKi8KKyAgbmhlYWRlciArPSAxOworICBudmEgPSBtYWxsb2Moc2l6ZW9mKG5naHR0cDNfbnYpICogbmhlYWRlcik7CisgIGlmKCFudmEpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIC8qIEV4dHJhY3QgOm1ldGhvZCwgOnBhdGggZnJvbSByZXF1ZXN0IGxpbmUKKyAgICAgV2UgZG8gbGluZSBlbmRpbmdzIHdpdGggQ1JMRiBzbyBjaGVja2luZyBmb3IgQ1IgaXMgZW5vdWdoICovCisgIGxpbmVfZW5kID0gbWVtY2hyKGhkYnVmLCAnXHInLCBsZW4pOworICBpZighbGluZV9lbmQpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7IC8qIGludGVybmFsIGVycm9yICovCisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogTWV0aG9kIGRvZXMgbm90IGNvbnRhaW4gc3BhY2VzICovCisgIGVuZCA9IG1lbWNocihoZGJ1ZiwgJyAnLCBsaW5lX2VuZCAtIGhkYnVmKTsKKyAgaWYoIWVuZCB8fCBlbmQgPT0gaGRidWYpCisgICAgZ290byBmYWlsOworICBudmFbMF0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopIjptZXRob2QiOworICBudmFbMF0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVswXS5uYW1lKTsKKyAgbnZhWzBdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgbnZhWzBdLnZhbHVlbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICBudmFbMF0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKworICBoZGJ1ZiA9IGVuZCArIDE7CisKKyAgLyogUGF0aCBtYXkgY29udGFpbiBzcGFjZXMgc28gc2NhbiBiYWNrd2FyZHMgKi8KKyAgZW5kID0gTlVMTDsKKyAgZm9yKGkgPSAoc2l6ZV90KShsaW5lX2VuZCAtIGhkYnVmKTsgaTsgLS1pKSB7CisgICAgaWYoaGRidWZbaSAtIDFdID09ICcgJykgeworICAgICAgZW5kID0gJmhkYnVmW2kgLSAxXTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZighZW5kIHx8IGVuZCA9PSBoZGJ1ZikKKyAgICBnb3RvIGZhaWw7CisgIG52YVsxXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOnBhdGgiOworICBudmFbMV0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVsxXS5uYW1lKTsKKyAgbnZhWzFdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgbnZhWzFdLnZhbHVlbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICBudmFbMV0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKworICBudmFbMl0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopIjpzY2hlbWUiOworICBudmFbMl0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVsyXS5uYW1lKTsKKyAgaWYoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkKKyAgICBudmFbMl0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKSJodHRwcyI7CisgIGVsc2UKKyAgICBudmFbMl0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKSJodHRwIjsKKyAgbnZhWzJdLnZhbHVlbGVuID0gc3RybGVuKChjaGFyICopbnZhWzJdLnZhbHVlKTsKKyAgbnZhWzJdLmZsYWdzID0gTkdIVFRQM19OVl9GTEFHX05PTkU7CisKKworICBhdXRob3JpdHlfaWR4ID0gMDsKKyAgaSA9IDM7CisgIHdoaWxlKGkgPCBuaGVhZGVyKSB7CisgICAgc2l6ZV90IGhsZW47CisKKyAgICBoZGJ1ZiA9IGxpbmVfZW5kICsgMjsKKworICAgIC8qIGNoZWNrIGZvciBuZXh0IENSLCBidXQgb25seSB3aXRoaW4gdGhlIHBpZWNlIG9mIGRhdGEgbGVmdCBpbiB0aGUgZ2l2ZW4KKyAgICAgICBidWZmZXIgKi8KKyAgICBsaW5lX2VuZCA9IG1lbWNocihoZGJ1ZiwgJ1xyJywgbGVuIC0gKGhkYnVmIC0gKGNoYXIgKiltZW0pKTsKKyAgICBpZighbGluZV9lbmQgfHwgKGxpbmVfZW5kID09IGhkYnVmKSkKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIGhlYWRlciBjb250aW51YXRpb24gbGluZXMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICBpZigqaGRidWYgPT0gJyAnIHx8ICpoZGJ1ZiA9PSAnXHQnKQorICAgICAgZ290byBmYWlsOworCisgICAgZm9yKGVuZCA9IGhkYnVmOyBlbmQgPCBsaW5lX2VuZCAmJiAqZW5kICE9ICc6JzsgKytlbmQpCisgICAgICA7CisgICAgaWYoZW5kID09IGhkYnVmIHx8IGVuZCA9PSBsaW5lX2VuZCkKKyAgICAgIGdvdG8gZmFpbDsKKyAgICBobGVuID0gZW5kIC0gaGRidWY7CisKKyAgICBpZihobGVuID09IDQgJiYgc3RybmNhc2Vjb21wYXJlKCJob3N0IiwgaGRidWYsIDQpKSB7CisgICAgICBhdXRob3JpdHlfaWR4ID0gaTsKKyAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOmF1dGhvcml0eSI7CisgICAgICBudmFbaV0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVtpXS5uYW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBudmFbaV0ubmFtZWxlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICAgIC8qIExvd2VyIGNhc2UgdGhlIGhlYWRlciBuYW1lIGZvciBIVFRQLzMgKi8KKyAgICAgIEN1cmxfc3RybnRvbG93ZXIoKGNoYXIgKiloZGJ1ZiwgaGRidWYsIG52YVtpXS5uYW1lbGVuKTsKKyAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgICB9CisgICAgbnZhW2ldLmZsYWdzID0gTkdIVFRQM19OVl9GTEFHX05PTkU7CisgICAgaGRidWYgPSBlbmQgKyAxOworICAgIHdoaWxlKCpoZGJ1ZiA9PSAnICcgfHwgKmhkYnVmID09ICdcdCcpCisgICAgICArK2hkYnVmOworICAgIGVuZCA9IGxpbmVfZW5kOworCisjaWYgMCAvKiBUaGlzIHNob3VsZCBwcm9iYWJseSBnbyBpbiBtb3JlIG9yIGxlc3MgbGlrZSB0aGlzICovCisgICAgc3dpdGNoKGluc3BlY3RfaGVhZGVyKChjb25zdCBjaGFyICopbnZhW2ldLm5hbWUsIG52YVtpXS5uYW1lbGVuLCBoZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC0gaGRidWYpKSB7CisgICAgY2FzZSBIRUFERVJJTlNUX0lHTk9SRToKKyAgICAgIC8qIHNraXAgaGVhZGVyIGZpZWxkcyBwcm9oaWJpdGVkIGJ5IEhUVFAvMiBzcGVjaWZpY2F0aW9uLiAqLworICAgICAgLS1uaGVhZGVyOworICAgICAgY29udGludWU7CisgICAgY2FzZSBIRUFERVJJTlNUX1RFX1RSQUlMRVJTOgorICAgICAgbnZhW2ldLnZhbHVlID0gKHVpbnQ4X3QqKSJ0cmFpbGVycyI7CisgICAgICBudmFbaV0udmFsdWVfbGVuID0gc2l6ZW9mKCJ0cmFpbGVycyIpIC0gMTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBudmFbaV0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICAgICAgbnZhW2ldLnZhbHVlX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICB9CisjZW5kaWYKKyAgICBudmFbaV0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICAgIG52YVtpXS52YWx1ZWxlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICBudmFbaV0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKworICAgICsraTsKKyAgfQorCisgIC8qIDphdXRob3JpdHkgbXVzdCBjb21lIGJlZm9yZSBub24tcHNldWRvIGhlYWRlciBmaWVsZHMgKi8KKyAgaWYoYXV0aG9yaXR5X2lkeCAhPSAwICYmIGF1dGhvcml0eV9pZHggIT0gQVVUSE9SSVRZX0RTVF9JRFgpIHsKKyAgICBuZ2h0dHAzX252IGF1dGhvcml0eSA9IG52YVthdXRob3JpdHlfaWR4XTsKKyAgICBmb3IoaSA9IGF1dGhvcml0eV9pZHg7IGkgPiBBVVRIT1JJVFlfRFNUX0lEWDsgLS1pKSB7CisgICAgICBudmFbaV0gPSBudmFbaSAtIDFdOworICAgIH0KKyAgICBudmFbaV0gPSBhdXRob3JpdHk7CisgIH0KKworICAvKiBXYXJuIHN0cmVhbSBtYXkgYmUgcmVqZWN0ZWQgaWYgY3VtdWxhdGl2ZSBsZW5ndGggb2YgaGVhZGVycyBpcyB0b28KKyAgICAgbGFyZ2UuICovCisjZGVmaW5lIE1BWF9BQ0MgNjAwMDAgIC8qIDw2NEtCIHRvIGFjY291bnQgZm9yIHNvbWUgb3ZlcmhlYWQgKi8KKyAgeworICAgIHNpemVfdCBhY2MgPSAwOworICAgIGZvcihpID0gMDsgaSA8IG5oZWFkZXI7ICsraSkKKyAgICAgIGFjYyArPSBudmFbaV0ubmFtZWxlbiArIG52YVtpXS52YWx1ZWxlbjsKKworICAgIGlmKGFjYyA+IE1BWF9BQ0MpIHsKKyAgICAgIGluZm9mKGRhdGEsICJodHRwX3JlcXVlc3Q6IFdhcm5pbmc6IFRoZSBjdW11bGF0aXZlIGxlbmd0aCBvZiBhbGwgIgorICAgICAgICAgICAgImhlYWRlcnMgZXhjZWVkcyAlenUgYnl0ZXMgYW5kIHRoYXQgY291bGQgY2F1c2UgdGhlICIKKyAgICAgICAgICAgICJzdHJlYW0gdG8gYmUgcmVqZWN0ZWQuXG4iLCBNQVhfQUNDKTsKKyAgICB9CisgIH0KKworICBzd2l0Y2goZGF0YS0+c3RhdGUuaHR0cHJlcSkgeworICBjYXNlIEhUVFBSRVFfUE9TVDoKKyAgY2FzZSBIVFRQUkVRX1BPU1RfRk9STToKKyAgY2FzZSBIVFRQUkVRX1BPU1RfTUlNRToKKyAgY2FzZSBIVFRQUkVRX1BVVDogeworICAgIG5naHR0cDNfZGF0YV9yZWFkZXIgZGF0YV9yZWFkZXI7CisgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgIGVsc2UKKyAgICAgIC8qIGRhdGEgc2VuZGluZyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGRhdGEgYW1vdW50IHVwIGZyb250ICovCisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gLTE7IC8qIHVua25vd24sIGJ1dCBub3QgemVybyAqLworCisgICAgZGF0YV9yZWFkZXIucmVhZF9kYXRhID0gY2JfaDNfcmVhZGZ1bmN0aW9uOworCisgICAgaDNvdXQgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBoM291dCksIDEpOworICAgIGlmKCFoM291dCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgc3RyZWFtLT5oM291dCA9IGgzb3V0OworCisgICAgcmMgPSBuZ2h0dHAzX2Nvbm5fc3VibWl0X3JlcXVlc3QocXMtPmgzY29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG52YSwgbmhlYWRlciwgJmRhdGFfcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmRhdGEpOworICAgIGlmKHJjKSB7CisgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICBkZWZhdWx0OgorICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSAwOyAvKiBub3RoaW5nIGxlZnQgdG8gc2VuZCAqLworICAgIHJjID0gbmdodHRwM19jb25uX3N1Ym1pdF9yZXF1ZXN0KHFzLT5oM2Nvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudmEsIG5oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogbm8gYm9keSEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhKTsKKyAgICBpZihyYykgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKworICBDdXJsX3NhZmVmcmVlKG52YSk7CisKKyAgaW5mb2YoZGF0YSwgIlVzaW5nIEhUVFAvMyBTdHJlYW0gSUQ6ICV4IChlYXN5IGhhbmRsZSAlcClcbiIsCisgICAgICAgIHN0cmVhbTNfaWQsICh2b2lkICopZGF0YSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworCitmYWlsOgorICBmcmVlKG52YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CitzdGF0aWMgc3NpemVfdCBuZ2gzX3N0cmVhbV9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIHNzaXplX3Qgc2VudDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdHJlYW0tPmgzcmVxKSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gaHR0cF9yZXF1ZXN0KGNvbm4sIG1lbSwgbGVuKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbnQgPSBsZW47CisgIH0KKyAgZWxzZSB7CisgICAgSDNCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJuZ2gzX3N0cmVhbV9zZW5kKCkgd2FudHMgdG8gc2VuZCAlemQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgIGxlbikpOworICAgIGlmKCFzdHJlYW0tPnVwbG9hZF9sZW4pIHsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX21lbSA9IG1lbTsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlbiA9IGxlbjsKKyAgICAgICh2b2lkKW5naHR0cDNfY29ubl9yZXN1bWVfc3RyZWFtKHFzLT5oM2Nvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCk7CisgICAgICBzZW50ID0gbGVuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgIGlmKG5nX2ZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgKmN1cmxjb2RlID0gQ1VSTEVfT0s7CisgIHJldHVybiBzZW50OworfQorCitzdGF0aWMgdm9pZCBuZ19oYXNfY29ubmVjdGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHRlbXBpbmRleCkKK3sKKyAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBuZ2gzX3N0cmVhbV9yZWN2OworICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IG5naDNfc3RyZWFtX3NlbmQ7CisgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX2h0dHAzOworICBjb25uLT5iaXRzLm11bHRpcGxleCA9IFRSVUU7IC8qIGF0IGxlYXN0IHBvdGVudGlhbGx5IG11bHRpcGxleGVkICovCisgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMzA7CisgIGNvbm4tPmJ1bmRsZS0+bXVsdGl1c2UgPSBCVU5ETEVfTVVMVElQTEVYOworICBjb25uLT5xdWljID0gJmNvbm4tPmhlcXVpY1t0ZW1waW5kZXhdOworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIm5ndGNwMiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIVxuIikpOworfQorCisvKgorICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIGNvbm5lY3Rpb24gYXR0ZW1wdHMgZ29pbmcgb24gaW4gcGFyYWxsZWwuCisgKi8KK0NVUkxjb2RlIEN1cmxfcXVpY19pc19jb25uZWN0ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9ICZjb25uLT5oZXF1aWNbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT50ZW1wc29ja1tzb2NraW5kZXhdOworCisgIHJlc3VsdCA9IG5nX3Byb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZXJyb3I7CisKKyAgcmVzdWx0ID0gbmdfZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgZ290byBlcnJvcjsKKworICBpZihuZ3RjcDJfY29ubl9nZXRfaGFuZHNoYWtlX2NvbXBsZXRlZChxcy0+cWNvbm4pKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIG5nX2hhc19jb25uZWN0ZWQoY29ubiwgc29ja2luZGV4KTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7CisgIGVycm9yOgorICAodm9pZClxc19kaXNjb25uZWN0KHFzKTsKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgQ1VSTGNvZGUgbmdfcHJvY2Vzc19pbmdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBzc2l6ZV90IHJlY3ZkOworICBpbnQgcnY7CisgIHVpbnQ4X3QgYnVmWzY1NTM2XTsKKyAgc2l6ZV90IGJ1ZnNpemUgPSBzaXplb2YoYnVmKTsKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcmVtb3RlX2FkZHI7CisgIHNvY2tsZW5fdCByZW1vdGVfYWRkcmxlbjsKKyAgbmd0Y3AyX3BhdGggcGF0aDsKKyAgbmd0Y3AyX3RzdGFtcCB0cyA9IHRpbWVzdGFtcCgpOworCisgIGZvcig7OykgeworICAgIHJlbW90ZV9hZGRybGVuID0gc2l6ZW9mKHJlbW90ZV9hZGRyKTsKKyAgICB3aGlsZSgocmVjdmQgPSByZWN2ZnJvbShzb2NrZmQsIGJ1ZiwgYnVmc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZW1vdGVfYWRkcmxlbikpID09IC0xICYmCisgICAgICAgICAgU09DS0VSUk5PID09IEVJTlRSKQorICAgICAgOworICAgIGlmKHJlY3ZkID09IC0xKSB7CisgICAgICBpZihTT0NLRVJSTk8gPT0gRUFHQUlOIHx8IFNPQ0tFUlJOTyA9PSBFV09VTERCTE9DSykKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDI6IHJlY3Zmcm9tKCkgdW5leHBlY3RlZGx5IHJldHVybmVkICVkIiwgcmVjdmQpOworICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgfQorCisgICAgbmd0Y3AyX2FkZHJfaW5pdCgmcGF0aC5sb2NhbCwgKHVpbnQ4X3QgKikmcXMtPmxvY2FsX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICBxcy0+bG9jYWxfYWRkcmxlbiwgTlVMTCk7CisgICAgbmd0Y3AyX2FkZHJfaW5pdCgmcGF0aC5yZW1vdGUsICh1aW50OF90ICopJnJlbW90ZV9hZGRyLCByZW1vdGVfYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgcnYgPSBuZ3RjcDJfY29ubl9yZWFkX3BrdChxcy0+cWNvbm4sICZwYXRoLCBidWYsIHJlY3ZkLCB0cyk7CisgICAgaWYocnYgIT0gMCkgeworICAgICAgLyogVE9ETyBTZW5kIENPTk5FQ1RJT05fQ0xPU0UgaWYgcG9zc2libGUgKi8KKyAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIH0KKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIG5nX2ZsdXNoX2VncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcykKK3sKKyAgaW50IHJ2OworICBzc2l6ZV90IHNlbnQ7CisgIHNzaXplX3Qgb3V0bGVuOworICB1aW50OF90IG91dFtOR1RDUDJfTUFYX1BLVExFTl9JUFY0XTsKKyAgc2l6ZV90IHBrdGxlbjsKKyAgbmd0Y3AyX3BhdGhfc3RvcmFnZSBwczsKKyAgbmd0Y3AyX3RzdGFtcCB0cyA9IHRpbWVzdGFtcCgpOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSByZW1vdGVfYWRkcjsKKyAgbmd0Y3AyX3RzdGFtcCBleHBpcnk7CisgIG5ndGNwMl9kdXJhdGlvbiB0aW1lb3V0OworICBpbnQ2NF90IHN0cmVhbV9pZDsKKyAgc3NpemVfdCB2ZWNjbnQ7CisgIGludCBmaW47CisgIG5naHR0cDNfdmVjIHZlY1sxNl07CisgIHNzaXplX3QgbmRhdGFsZW47CisKKyAgc3dpdGNoKHFzLT5sb2NhbF9hZGRyLnNzX2ZhbWlseSkgeworICBjYXNlIEFGX0lORVQ6CisgICAgcGt0bGVuID0gTkdUQ1AyX01BWF9QS1RMRU5fSVBWNDsKKyAgICBicmVhazsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBjYXNlIEFGX0lORVQ2OgorICAgIHBrdGxlbiA9IE5HVENQMl9NQVhfUEtUTEVOX0lQVjY7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBhc3NlcnQoMCk7CisgIH0KKworICBydiA9IG5ndGNwMl9jb25uX2hhbmRsZV9leHBpcnkocXMtPnFjb25uLCB0cyk7CisgIGlmKHJ2ICE9IDApIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAibmd0Y3AyX2Nvbm5faGFuZGxlX2V4cGlyeSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgbmd0Y3AyX3N0cmVycm9yKHJ2KSk7CisgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgIH0KKworICBuZ3RjcDJfcGF0aF9zdG9yYWdlX3plcm8oJnBzKTsKKworICBmb3IoOzspIHsKKyAgICBvdXRsZW4gPSAtMTsKKyAgICBpZihxcy0+aDNjb25uICYmIG5ndGNwMl9jb25uX2dldF9tYXhfZGF0YV9sZWZ0KHFzLT5xY29ubikpIHsKKyAgICAgIHZlY2NudCA9IG5naHR0cDNfY29ubl93cml0ZXZfc3RyZWFtKHFzLT5oM2Nvbm4sICZzdHJlYW1faWQsICZmaW4sIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2ZWMpIC8gc2l6ZW9mKHZlY1swXSkpOworICAgICAgaWYodmVjY250IDwgMCkgeworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAibmdodHRwM19jb25uX3dyaXRldl9zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKChpbnQpdmVjY250KSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZSBpZih2ZWNjbnQgPiAwKSB7CisgICAgICAgIHVpbnQzMl90IGZsYWdzID0gTkdUQ1AyX1dSSVRFX1NUUkVBTV9GTEFHX01PUkUgfAorICAgICAgICAgIChmaW4gPyBOR1RDUDJfV1JJVEVfU1RSRUFNX0ZMQUdfRklOIDogMCk7CisgICAgICAgIG91dGxlbiA9CisgICAgICAgICAgbmd0Y3AyX2Nvbm5fd3JpdGV2X3N0cmVhbShxcy0+cWNvbm4sICZwcy5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBwa3RsZW4sICZuZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgbmd0Y3AyX3ZlYyAqKXZlYywgdmVjY250LCB0cyk7CisgICAgICAgIGlmKG91dGxlbiA9PSAwKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYob3V0bGVuIDwgMCkgeworICAgICAgICAgIGlmKG91dGxlbiA9PSBOR1RDUDJfRVJSX1NUUkVBTV9EQVRBX0JMT0NLRUQgfHwKKyAgICAgICAgICAgICBvdXRsZW4gPT0gTkdUQ1AyX0VSUl9TVFJFQU1fU0hVVF9XUikgeworICAgICAgICAgICAgYXNzZXJ0KG5kYXRhbGVuID09IC0xKTsKKyAgICAgICAgICAgIHJ2ID0gbmdodHRwM19jb25uX2Jsb2NrX3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQpOworICAgICAgICAgICAgaWYocnYgIT0gMCkgeworICAgICAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAibmdodHRwM19jb25uX2Jsb2NrX3N0cmVhbSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihvdXRsZW4gPT0gTkdUQ1AyX0VSUl9XUklURV9TVFJFQU1fTU9SRSkgeworICAgICAgICAgICAgYXNzZXJ0KG5kYXRhbGVuID4gMCk7CisgICAgICAgICAgICBydiA9IG5naHR0cDNfY29ubl9hZGRfd3JpdGVfb2Zmc2V0KHFzLT5oM2Nvbm4sIHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRhdGFsZW4pOworICAgICAgICAgICAgaWYocnYgIT0gMCkgeworICAgICAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAibmdodHRwM19jb25uX2FkZF93cml0ZV9vZmZzZXQgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKHJ2KSk7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KG5kYXRhbGVuID09IC0xKTsKKyAgICAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDJfY29ubl93cml0ZXZfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5ndGNwMl9zdHJlcnJvcigoaW50KW91dGxlbikpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGFzc2VydChuZGF0YWxlbiA9PSAtMSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYob3V0bGVuIDwgMCkgeworICAgICAgb3V0bGVuID0gbmd0Y3AyX2Nvbm5fd3JpdGVfcGt0KHFzLT5xY29ubiwgJnBzLnBhdGgsIG91dCwgcGt0bGVuLCB0cyk7CisgICAgICBpZihvdXRsZW4gPCAwKSB7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDJfY29ubl93cml0ZV9wa3QgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICBuZ3RjcDJfc3RyZXJyb3IoKGludClvdXRsZW4pKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBpZihvdXRsZW4gPT0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbWVtY3B5KCZyZW1vdGVfYWRkciwgcHMucGF0aC5yZW1vdGUuYWRkciwgcHMucGF0aC5yZW1vdGUuYWRkcmxlbik7CisgICAgd2hpbGUoKHNlbnQgPSBzZW5kKHNvY2tmZCwgb3V0LCBvdXRsZW4sIDApKSA9PSAtMSAmJgorICAgICAgICAgIFNPQ0tFUlJOTyA9PSBFSU5UUikKKyAgICAgIDsKKworICAgIGlmKHNlbnQgPT0gLTEpIHsKKyAgICAgIGlmKFNPQ0tFUlJOTyA9PSBFQUdBSU4gfHwgU09DS0VSUk5PID09IEVXT1VMREJMT0NLKSB7CisgICAgICAgIC8qIFRPRE8gQ2FjaGUgcGFja2V0ICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJzZW5kKCkgcmV0dXJuZWQgJXpkIChlcnJubyAlZClcbiIsIHNlbnQsCisgICAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGV4cGlyeSA9IG5ndGNwMl9jb25uX2dldF9leHBpcnkocXMtPnFjb25uKTsKKyAgaWYoZXhwaXJ5ICE9IFVJTlQ2NF9NQVgpIHsKKyAgICBpZihleHBpcnkgPD0gdHMpIHsKKyAgICAgIHRpbWVvdXQgPSBOR1RDUDJfTUlMTElTRUNPTkRTOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHRpbWVvdXQgPSBleHBpcnkgLSB0czsKKyAgICB9CisgICAgQ3VybF9leHBpcmUoY29ubi0+ZGF0YSwgdGltZW91dCAvIE5HVENQMl9NSUxMSVNFQ09ORFMsIEVYUElSRV9RVUlDKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIHRyYW5zZmVyLmM6ZG9uZV9zZW5kaW5nIHdoZW4gd2Ugc3RvcCBIVFRQLzMgdXBsb2FkaW5nLgorICovCitDVVJMY29kZSBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoY29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAzKSB7CisgICAgLyogb25seSBmb3IgSFRUUC8zIHRyYW5zZmVycyAqLworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgICAgc3RyZWFtLT51cGxvYWRfZG9uZSA9IFRSVUU7CisgICAgKHZvaWQpbmdodHRwM19jb25uX3Jlc3VtZV9zdHJlYW0ocXMtPmgzY29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIGh0dHAuYzpDdXJsX2h0dHBfZG9uZSB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMuCisgKi8KK3ZvaWQgQ3VybF9xdWljX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsKKyAgaWYoZGF0YS0+Y29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAzKSB7CisgICAgLyogb25seSBmb3IgSFRUUC8zIHRyYW5zZmVycyAqLworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICAgIEN1cmxfZHluX2ZyZWUoJnN0cmVhbS0+b3ZlcmZsb3cpOworICB9Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRhdGFfcGVuZGluZyB0byBrbm93IGlmIHdlIHNob3VsZCBrZWVwIGxvb3BpbmcKKyAqIHRvIHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKi8KK2Jvb2wgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQoreworICAvKiBXZSBtYXkgaGF2ZSByZWNlaXZlZCBtb3JlIGRhdGEgdGhhbiB3ZSdyZSBhYmxlIHRvIGhvbGQgaW4gdGhlIHJlY2VpdmUKKyAgICAgYnVmZmVyIGFuZCBhbGxvY2F0ZWQgYW4gb3ZlcmZsb3cgYnVmZmVyLiBTaW5jZSBpdCdzIHBvc3NpYmxlIHRoYXQKKyAgICAgdGhlcmUncyBubyBtb3JlIGRhdGEgY29taW5nIG9uIHRoZSBzb2NrZXQsIHdlIG5lZWQgdG8ga2VlcCByZWFkaW5nCisgICAgIHVudGlsIHRoZSBvdmVyZmxvdyBidWZmZXIgaXMgZW1wdHkuICovCisgIGNvbnN0IHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICByZXR1cm4gQ3VybF9keW5fbGVuKCZzdHJlYW0tPm92ZXJmbG93KSA+IDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9uZ3RjcDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY4YjU2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9WUVVJQ19OR1RDUDJfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WUVVJQ19OR1RDUDJfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX05HVENQMgorCisjaW5jbHVkZSA8bmd0Y3AyL25ndGNwMi5oPgorI2luY2x1ZGUgPG5naHR0cDMvbmdodHRwMy5oPgorI2lmZGVmIFVTRV9PUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKyNpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+CisjZW5kaWYKKworc3RydWN0IHF1aWNfaGFuZHNoYWtlIHsKKyAgY2hhciAqYnVmOyAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBidWZmZXIgKi8KKyAgc2l6ZV90IGFsbG9jbGVuOyAvKiBzaXplIG9mIGFsbG9jYXRpb24gKi8KKyAgc2l6ZV90IGxlbjsgICAgICAvKiBzaXplIG9mIGNvbnRlbnQgaW4gYnVmZmVyICovCisgIHNpemVfdCBucmVhZDsgICAgLyogaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlYWQgKi8KK307CisKK3N0cnVjdCBxdWljc29ja2V0IHsKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOyAvKiBwb2ludCBiYWNrIHRvIHRoZSBjb25uZWN0aW9uICovCisgIG5ndGNwMl9jb25uICpxY29ubjsKKyAgbmd0Y3AyX2NpZCBkY2lkOworICBuZ3RjcDJfY2lkIHNjaWQ7CisgIHVpbnQzMl90IHZlcnNpb247CisgIG5ndGNwMl9zZXR0aW5ncyBzZXR0aW5nczsKKyNpZmRlZiBVU0VfT1BFTlNTTAorICBTU0xfQ1RYICpzc2xjdHg7CisgIFNTTCAqc3NsOworI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorICBnbnV0bHNfY2VydGlmaWNhdGVfY3JlZGVudGlhbHNfdCBjcmVkOworICBnbnV0bHNfc2Vzc2lvbl90IHNzbDsKKyNlbmRpZgorICBzdHJ1Y3QgcXVpY19oYW5kc2hha2UgY3J5cHRvX2RhdGFbM107CisgIC8qIHRoZSBsYXN0IFRMUyBhbGVydCBkZXNjcmlwdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIGxvY2FsIGVuZHBvaW50ICovCisgIHVpbnQ4X3QgdGxzX2FsZXJ0OworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbF9hZGRyOworICBzb2NrbGVuX3QgbG9jYWxfYWRkcmxlbjsKKworICBuZ2h0dHAzX2Nvbm4gKmgzY29ubjsKKyAgbmdodHRwM19jb25uX3NldHRpbmdzIGgzc2V0dGluZ3M7CisgIGludCBxbG9nZmQ7Cit9OworCisjaW5jbHVkZSAidXJsZGF0YS5oIgorCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX05HVENQMl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL3F1aWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNmYxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuYwpAQCAtMCwwICsxLDg1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX1FVSUNIRQorI2luY2x1ZGUgPHF1aWNoZS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgInF1aWMuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInZxdWljLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBERUJVR19IVFRQMworLyogI2RlZmluZSBERUJVR19RVUlDSEUgKi8KKyNpZmRlZiBERUJVR19IVFRQMworI2RlZmluZSBIM0JVR0YoeCkgeAorI2Vsc2UKKyNkZWZpbmUgSDNCVUdGKHgpIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgUVVJQ19NQVhfU1RSRUFNUyAoMjU2KjEwMjQpCisjZGVmaW5lIFFVSUNfTUFYX0RBVEEgKDEqMTAyNCoxMDI0KQorI2RlZmluZSBRVUlDX0lETEVfVElNRU9VVCAoNjAgKiAxMDAwKSAvKiBtaWxsaXNlY29uZHMgKi8KKworc3RhdGljIENVUkxjb2RlIHByb2Nlc3NfaW5ncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpOworCitzdGF0aWMgQ1VSTGNvZGUgZmx1c2hfZWdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcyk7CisKK3N0YXRpYyBDVVJMY29kZSBodHRwX3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworc3RhdGljIEN1cmxfcmVjdiBoM19zdHJlYW1fcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgaDNfc3RyZWFtX3NlbmQ7CisKK3N0YXRpYyBpbnQgcXVpY2hlX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOworICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKKworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworCisgIC8qIGluIGEgSFRUUC8yIGNvbm5lY3Rpb24gd2UgY2FuIGJhc2ljYWxseSBhbHdheXMgZ2V0IGEgZnJhbWUgc28gd2Ugc2hvdWxkCisgICAgIGFsd2F5cyBiZSByZWFkeSBmb3Igb25lICovCisgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKworICAvKiB3ZSdyZSBzdGlsbCB1cGxvYWRpbmcgb3IgdGhlIEhUVFAvMiBsYXllciB3YW50cyB0byBzZW5kIGRhdGEgKi8KKyAgaWYoKGstPmtlZXBvbiAmIChLRUVQX1NFTkR8S0VFUF9TRU5EX1BBVVNFKSkgPT0gS0VFUF9TRU5EKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgcmV0dXJuIGJpdG1hcDsKK30KKworc3RhdGljIGludCBxdWljaGVfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgcmV0dXJuIHF1aWNoZV9nZXRzb2NrKChzdHJ1Y3QgY29ubmVjdGRhdGEgKiljb25uLCBzb2Nrcyk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBxc19kaXNjb25uZWN0KHN0cnVjdCBxdWljc29ja2V0ICpxcykKK3sKKyAgaWYocXMtPmgzY29uZmlnKQorICAgIHF1aWNoZV9oM19jb25maWdfZnJlZShxcy0+aDNjb25maWcpOworICBpZihxcy0+aDNjKQorICAgIHF1aWNoZV9oM19jb25uX2ZyZWUocXMtPmgzYyk7CisgIHF1aWNoZV9jb25maWdfZnJlZShxcy0+Y2ZnKTsKKyAgcXVpY2hlX2Nvbm5fZnJlZShxcy0+Y29ubik7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHF1aWNoZV9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgKHZvaWQpZGVhZF9jb25uZWN0aW9uOworICByZXR1cm4gcXNfZGlzY29ubmVjdChxcyk7Cit9CisKK3ZvaWQgQ3VybF9xdWljX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVtcGluZGV4KQoreworICBpZihjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9RVUlDKQorICAgIHFzX2Rpc2Nvbm5lY3QoJmNvbm4tPmhlcXVpY1t0ZW1waW5kZXhdKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBxdWljaGVfY29ubmNoZWNrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hlY2tzX3RvX3BlcmZvcm0pCit7CisgICh2b2lkKWNvbm47CisgICh2b2lkKWNoZWNrc190b19wZXJmb3JtOworICByZXR1cm4gQ09OTlJFU1VMVF9OT05FOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcXVpY2hlX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisgIHN0cmVhbS0+aDNyZXEgPSBGQUxTRTsgLyogbm90IHNlbnQgKi8KKyAgcmV0dXJuIEN1cmxfaHR0cChjb25uLCBkb25lKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2h0dHAzID0geworICAiSFRUUFMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgcXVpY2hlX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBxdWljaGVfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgcXVpY2hlX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgcXVpY2hlX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgcXVpY2hlX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIHF1aWNoZV9jb25uY2hlY2ssICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0hUVFBTLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX1NTTCB8IFBST1RPUFRfU1RSRUFNICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisjaWZkZWYgREVCVUdfUVVJQ0hFCitzdGF0aWMgdm9pZCBxdWljaGVfZGVidWdfbG9nKGNvbnN0IGNoYXIgKmxpbmUsIHZvaWQgKmFyZ3ApCit7CisgICh2b2lkKWFyZ3A7CisgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGxpbmUpOworfQorI2VuZGlmCisKK0NVUkxjb2RlIEN1cmxfcXVpY19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAmY29ubi0+aGVxdWljW3NvY2tpbmRleF07CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyICprZXlsb2dfZmlsZSA9IE5VTEw7CisKKyNpZmRlZiBERUJVR19RVUlDSEUKKyAgLyogaW5pdGlhbGl6ZSBkZWJ1ZyBsb2cgY2FsbGJhY2sgb25seSBvbmNlICovCisgIHN0YXRpYyBpbnQgZGVidWdfbG9nX2luaXQgPSAwOworICBpZighZGVidWdfbG9nX2luaXQpIHsKKyAgICBxdWljaGVfZW5hYmxlX2RlYnVnX2xvZ2dpbmcocXVpY2hlX2RlYnVnX2xvZywgTlVMTCk7CisgICAgZGVidWdfbG9nX2luaXQgPSAxOworICB9CisjZW5kaWYKKworICAodm9pZClhZGRyOworICAodm9pZClhZGRybGVuOworCisgIHFzLT5jZmcgPSBxdWljaGVfY29uZmlnX25ldyhRVUlDSEVfUFJPVE9DT0xfVkVSU0lPTik7CisgIGlmKCFxcy0+Y2ZnKSB7CisgICAgZmFpbGYoZGF0YSwgImNhbid0IGNyZWF0ZSBxdWljaGUgY29uZmlnIik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgcXVpY2hlX2NvbmZpZ19zZXRfbWF4X2lkbGVfdGltZW91dChxcy0+Y2ZnLCBRVUlDX0lETEVfVElNRU9VVCk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X2RhdGEocXMtPmNmZywgUVVJQ19NQVhfREFUQSk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X3N0cmVhbV9kYXRhX2JpZGlfbG9jYWwocXMtPmNmZywgUVVJQ19NQVhfREFUQSk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X3N0cmVhbV9kYXRhX2JpZGlfcmVtb3RlKHFzLT5jZmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVSUNfTUFYX0RBVEEpOworICBxdWljaGVfY29uZmlnX3NldF9pbml0aWFsX21heF9zdHJlYW1fZGF0YV91bmkocXMtPmNmZywgUVVJQ19NQVhfREFUQSk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X3N0cmVhbXNfYmlkaShxcy0+Y2ZnLCBRVUlDX01BWF9TVFJFQU1TKTsKKyAgcXVpY2hlX2NvbmZpZ19zZXRfaW5pdGlhbF9tYXhfc3RyZWFtc191bmkocXMtPmNmZywgUVVJQ19NQVhfU1RSRUFNUyk7CisgIHF1aWNoZV9jb25maWdfc2V0X2FwcGxpY2F0aW9uX3Byb3Rvcyhxcy0+Y2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVSUNIRV9IM19BUFBMSUNBVElPTl9QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihRVUlDSEVfSDNfQVBQTElDQVRJT05fUFJPVE9DT0wpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEpOworCisgIHJlc3VsdCA9IEN1cmxfcmFuZChkYXRhLCBxcy0+c2NpZCwgc2l6ZW9mKHFzLT5zY2lkKSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGtleWxvZ19maWxlID0gZ2V0ZW52KCJTU0xLRVlMT0dGSUxFIik7CisKKyAgaWYoa2V5bG9nX2ZpbGUpCisgICAgcXVpY2hlX2NvbmZpZ19sb2dfa2V5cyhxcy0+Y2ZnKTsKKworICBxcy0+Y29ubiA9IHF1aWNoZV9jb25uZWN0KGNvbm4tPmhvc3QubmFtZSwgKGNvbnN0IHVpbnQ4X3QgKikgcXMtPnNjaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHFzLT5zY2lkKSwgcXMtPmNmZyk7CisgIGlmKCFxcy0+Y29ubikgeworICAgIGZhaWxmKGRhdGEsICJjYW4ndCBjcmVhdGUgcXVpY2hlIGNvbm5lY3Rpb24iKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIGlmKGtleWxvZ19maWxlKQorICAgIHF1aWNoZV9jb25uX3NldF9rZXlsb2dfcGF0aChxcy0+Y29ubiwga2V5bG9nX2ZpbGUpOworCisgIC8qIEtub3duIHRvIG5vdCB3b3JrIG9uIFdpbmRvd3MgKi8KKyNpZiAhZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChIQVZFX1FVSUNIRV9DT05OX1NFVF9RTE9HX0ZEKQorICB7CisgICAgaW50IHFmZDsKKyAgICAodm9pZClDdXJsX3Fsb2dkaXIoZGF0YSwgcXMtPnNjaWQsIHNpemVvZihxcy0+c2NpZCksICZxZmQpOworICAgIGlmKHFmZCAhPSAtMSkKKyAgICAgIHF1aWNoZV9jb25uX3NldF9xbG9nX2ZkKHFzLT5jb25uLCBxZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicWxvZyB0aXRsZSIsICJjdXJsIHFsb2ciKTsKKyAgfQorI2VuZGlmCisKKyAgcmVzdWx0ID0gZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBzdG9yZSB0aGUgdXNlZCBhZGRyZXNzIGFzIGEgc3RyaW5nICovCisgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKWFkZHIsIGFkZHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnByaW1hcnlfaXAsICZjb25uLT5wcmltYXJ5X3BvcnQpKSB7CisgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKKyAgICBmYWlsZihkYXRhLCAic3NyZW0gaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICBTT0NLRVJSTk8sIEN1cmxfc3RyZXJyb3IoU09DS0VSUk5PLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKyAgfQorICBtZW1jcHkoY29ubi0+aXBfYWRkcl9zdHIsIGNvbm4tPnByaW1hcnlfaXAsIE1BWF9JUEFEUl9MRU4pOworICBDdXJsX3BlcnNpc3Rjb25uaW5mbyhjb25uKTsKKworICAvKiBmb3IgY29ubmVjdGlvbiByZXVzZSBwdXJwb3NlczogKi8KKyAgY29ubi0+c3NsW0ZJUlNUU09DS0VUXS5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGFscG5fcHJvdG9jb2xzW10gPSBRVUlDSEVfSDNfQVBQTElDQVRJT05fUFJPVE9DT0w7CisgICAgdW5zaWduZWQgYWxwbl9sZW4sIG9mZnNldCA9IDA7CisKKyAgICAvKiBSZXBsYWNlIGVhY2ggQUxQTiBsZW5ndGggcHJlZml4IGJ5IGEgY29tbWEuICovCisgICAgd2hpbGUob2Zmc2V0IDwgc2l6ZW9mKGFscG5fcHJvdG9jb2xzKSAtIDEpIHsKKyAgICAgIGFscG5fbGVuID0gYWxwbl9wcm90b2NvbHNbb2Zmc2V0XTsKKyAgICAgIGFscG5fcHJvdG9jb2xzW29mZnNldF0gPSAnLCc7CisgICAgICBvZmZzZXQgKz0gMSArIGFscG5fbGVuOworICAgIH0KKworICAgIGluZm9mKGRhdGEsICJTZW50IFFVSUMgY2xpZW50IEluaXRpYWwsIEFMUE46ICVzXG4iLAorICAgICAgICAgIGFscG5fcHJvdG9jb2xzICsgMSk7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBxdWljaGVfaGFzX2Nvbm5lY3RlZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVtcGluZGV4KQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWMgPSAmY29ubi0+aGVxdWljW3RlbXBpbmRleF07CisKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gaDNfc3RyZWFtX3JlY3Y7CisgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGgzX3N0cmVhbV9zZW5kOworICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9odHRwMzsKKyAgY29ubi0+Yml0cy5tdWx0aXBsZXggPSBUUlVFOyAvKiBhdCBsZWFzdCBwb3RlbnRpYWxseSBtdWx0aXBsZXhlZCAqLworICBjb25uLT5odHRwdmVyc2lvbiA9IDMwOworICBjb25uLT5idW5kbGUtPm11bHRpdXNlID0gQlVORExFX01VTFRJUExFWDsKKworICBxcy0+aDNjb25maWcgPSBxdWljaGVfaDNfY29uZmlnX25ldygpOworICBpZighcXMtPmgzY29uZmlnKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIC8qIENyZWF0ZSBhIG5ldyBIVFRQLzMgY29ubmVjdGlvbiBvbiB0aGUgUVVJQyBjb25uZWN0aW9uLiAqLworICBxcy0+aDNjID0gcXVpY2hlX2gzX2Nvbm5fbmV3X3dpdGhfdHJhbnNwb3J0KHFzLT5jb25uLCBxcy0+aDNjb25maWcpOworICBpZighcXMtPmgzYykgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisgIGlmKGNvbm4tPmhlcXVpY1sxLXRlbXBpbmRleF0uY2ZnKSB7CisgICAgcXMgPSAmY29ubi0+aGVxdWljWzEtdGVtcGluZGV4XTsKKyAgICBxdWljaGVfY29uZmlnX2ZyZWUocXMtPmNmZyk7CisgICAgcXVpY2hlX2Nvbm5fZnJlZShxcy0+Y29ubik7CisgICAgcXMtPmNmZyA9IE5VTEw7CisgICAgcXMtPmNvbm4gPSBOVUxMOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKKyAgZmFpbDoKKyAgcXVpY2hlX2gzX2NvbmZpZ19mcmVlKHFzLT5oM2NvbmZpZyk7CisgIHF1aWNoZV9oM19jb25uX2ZyZWUocXMtPmgzYyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcG9sbGVkIHRvIGNoZWNrIGlmIHRoaXMgUVVJQyBjb25uZWN0aW9uIGhhcyBjb25uZWN0ZWQuCisgKi8KK0NVUkxjb2RlIEN1cmxfcXVpY19pc19jb25uZWN0ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9ICZjb25uLT5oZXF1aWNbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT50ZW1wc29ja1tzb2NraW5kZXhdOworCisgIHJlc3VsdCA9IHByb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZXJyb3I7CisKKyAgcmVzdWx0ID0gZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgZ290byBlcnJvcjsKKworICBpZihxdWljaGVfY29ubl9pc19lc3RhYmxpc2hlZChxcy0+Y29ubikpIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgcmVzdWx0ID0gcXVpY2hlX2hhc19jb25uZWN0ZWQoY29ubiwgMCwgc29ja2luZGV4KTsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgInF1aWNoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIVxuIikpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKKyAgZXJyb3I6CisgIHFzX2Rpc2Nvbm5lY3QocXMpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgcHJvY2Vzc19pbmdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBzc2l6ZV90IHJlY3ZkOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgdWludDhfdCAqYnVmID0gKHVpbnQ4X3QgKilkYXRhLT5zdGF0ZS5idWZmZXI7CisgIHNpemVfdCBidWZzaXplID0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOworCisgIC8qIGluIGNhc2UgdGhlIHRpbWVvdXQgZXhwaXJlZCAqLworICBxdWljaGVfY29ubl9vbl90aW1lb3V0KHFzLT5jb25uKTsKKworICBkbyB7CisgICAgcmVjdmQgPSByZWN2KHNvY2tmZCwgYnVmLCBidWZzaXplLCAwKTsKKyAgICBpZigocmVjdmQgPCAwKSAmJiAoKFNPQ0tFUlJOTyA9PSBFQUdBSU4pIHx8IChTT0NLRVJSTk8gPT0gRVdPVUxEQkxPQ0spKSkKKyAgICAgIGJyZWFrOworCisgICAgaWYocmVjdmQgPCAwKSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAicXVpY2hlOiByZWN2KCkgdW5leHBlY3RlZGx5IHJldHVybmVkICVkICIKKyAgICAgICAgICAgICIoZXJybm86ICVkLCBzb2NrZXQgJWQpIiwgcmVjdmQsIFNPQ0tFUlJOTywgc29ja2ZkKTsKKyAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIH0KKworICAgIHJlY3ZkID0gcXVpY2hlX2Nvbm5fcmVjdihxcy0+Y29ubiwgYnVmLCByZWN2ZCk7CisgICAgaWYocmVjdmQgPT0gUVVJQ0hFX0VSUl9ET05FKQorICAgICAgYnJlYWs7CisKKyAgICBpZihyZWN2ZCA8IDApIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJxdWljaGVfY29ubl9yZWN2KCkgPT0gJWQiLCByZWN2ZCk7CisgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICB9CisgIH0gd2hpbGUoMSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogZmx1c2hfZWdyZXNzIGRyYWlucyB0aGUgYnVmZmVycyBhbmQgc2VuZHMgb2ZmIGRhdGEuCisgKiBDYWxscyBmYWlsZigpIG9uIGVycm9ycy4KKyAqLworc3RhdGljIENVUkxjb2RlIGZsdXNoX2VncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcykKK3sKKyAgc3NpemVfdCBzZW50OworICBzdGF0aWMgdWludDhfdCBvdXRbMTIwMF07CisgIGludDY0X3QgdGltZW91dF9uczsKKworICBkbyB7CisgICAgc2VudCA9IHF1aWNoZV9jb25uX3NlbmQocXMtPmNvbm4sIG91dCwgc2l6ZW9mKG91dCkpOworICAgIGlmKHNlbnQgPT0gUVVJQ0hFX0VSUl9ET05FKQorICAgICAgYnJlYWs7CisKKyAgICBpZihzZW50IDwgMCkgeworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInF1aWNoZV9jb25uX3NlbmQgcmV0dXJuZWQgJXpkXG4iLAorICAgICAgICAgICAgc2VudCk7CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CisKKyAgICBzZW50ID0gc2VuZChzb2NrZmQsIG91dCwgc2VudCwgMCk7CisgICAgaWYoc2VudCA8IDApIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJzZW5kKCkgcmV0dXJuZWQgJXpkXG4iLCBzZW50KTsKKyAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgIH0KKyAgfSB3aGlsZSgxKTsKKworICAvKiB0aW1lIHVudGlsIHRoZSBuZXh0IHRpbWVvdXQgZXZlbnQsIGFzIG5hbm9zZWNvbmRzLiAqLworICB0aW1lb3V0X25zID0gcXVpY2hlX2Nvbm5fdGltZW91dF9hc19uYW5vcyhxcy0+Y29ubik7CisgIGlmKHRpbWVvdXRfbnMpCisgICAgLyogZXhwaXJlIHVzZXMgbWlsbGlzZWNvbmRzICovCisgICAgQ3VybF9leHBpcmUoY29ubi0+ZGF0YSwgKHRpbWVvdXRfbnMgKyA5OTk5OTkpIC8gMTAwMDAwMCwgRVhQSVJFX1FVSUMpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RydWN0IGgzaDFoZWFkZXIgeworICBjaGFyICpkZXN0OworICBzaXplX3QgZGVzdGxlbjsgLyogbGVmdCB0byB1c2UgKi8KKyAgc2l6ZV90IG5sZW47IC8qIHVzZWQgKi8KK307CisKK3N0YXRpYyBpbnQgY2JfZWFjaF9oZWFkZXIodWludDhfdCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJncCkKK3sKKyAgc3RydWN0IGgzaDFoZWFkZXIgKmhlYWRlcnMgPSAoc3RydWN0IGgzaDFoZWFkZXIgKilhcmdwOworICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgaWYoKG5hbWVfbGVuID09IDcpICYmICFzdHJuY21wKCI6c3RhdHVzIiwgKGNoYXIgKiluYW1lLCA3KSkgeworICAgIG1zbnByaW50ZihoZWFkZXJzLT5kZXN0LAorICAgICAgICAgICAgICBoZWFkZXJzLT5kZXN0bGVuLCAiSFRUUC8zICUuKnNcbiIsCisgICAgICAgICAgICAgIChpbnQpIHZhbHVlX2xlbiwgdmFsdWUpOworICB9CisgIGVsc2UgaWYoIWhlYWRlcnMtPm5sZW4pIHsKKyAgICByZXR1cm4gQ1VSTEVfSFRUUDM7CisgIH0KKyAgZWxzZSB7CisgICAgbXNucHJpbnRmKGhlYWRlcnMtPmRlc3QsCisgICAgICAgICAgICAgIGhlYWRlcnMtPmRlc3RsZW4sICIlLipzOiAlLipzXG4iLAorICAgICAgICAgICAgICAoaW50KW5hbWVfbGVuLCBuYW1lLCAoaW50KSB2YWx1ZV9sZW4sIHZhbHVlKTsKKyAgfQorICBvbGVuID0gc3RybGVuKGhlYWRlcnMtPmRlc3QpOworICBoZWFkZXJzLT5kZXN0bGVuIC09IG9sZW47CisgIGhlYWRlcnMtPm5sZW4gKz0gb2xlbjsKKyAgaGVhZGVycy0+ZGVzdCArPSBvbGVuOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaDNfc3RyZWFtX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzc2l6ZV90IHJlY3ZkID0gLTE7CisgIHNzaXplX3QgcmNvZGU7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBxdWljaGVfaDNfZXZlbnQgKmV2OworICBpbnQgcmM7CisgIHN0cnVjdCBoM2gxaGVhZGVyIGhlYWRlcnM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgaGVhZGVycy5kZXN0ID0gYnVmOworICBoZWFkZXJzLmRlc3RsZW4gPSBidWZmZXJzaXplOworICBoZWFkZXJzLm5sZW4gPSAwOworCisgIGlmKHByb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgIGluZm9mKGRhdGEsICJoM19zdHJlYW1fcmVjdiByZXR1cm5zIG9uIGluZ3Jlc3NcbiIpOworICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgd2hpbGUocmVjdmQgPCAwKSB7CisgICAgaW50NjRfdCBzID0gcXVpY2hlX2gzX2Nvbm5fcG9sbChxcy0+aDNjLCBxcy0+Y29ubiwgJmV2KTsKKyAgICBpZihzIDwgMCkKKyAgICAgIC8qIG5vdGhpbmcgbW9yZSB0byBkbyAqLworICAgICAgYnJlYWs7CisKKyAgICBpZihzICE9IHN0cmVhbS0+c3RyZWFtM19pZCkgeworICAgICAgLyogYW5vdGhlciB0cmFuc2ZlciwgaWdub3JlIGZvciBub3cgKi8KKyAgICAgIGluZm9mKGRhdGEsICJHb3QgaDMgZm9yIHN0cmVhbSAldSwgZXhwZWN0cyAldVxuIiwKKyAgICAgICAgICAgIHMsIHN0cmVhbS0+c3RyZWFtM19pZCk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBzd2l0Y2gocXVpY2hlX2gzX2V2ZW50X3R5cGUoZXYpKSB7CisgICAgY2FzZSBRVUlDSEVfSDNfRVZFTlRfSEVBREVSUzoKKyAgICAgIHJjID0gcXVpY2hlX2gzX2V2ZW50X2Zvcl9lYWNoX2hlYWRlcihldiwgY2JfZWFjaF9oZWFkZXIsICZoZWFkZXJzKTsKKyAgICAgIGlmKHJjKSB7CisgICAgICAgICpjdXJsY29kZSA9IHJjOworICAgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgaW4gSFRUUC8zIHJlc3BvbnNlIGhlYWRlciIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJlY3ZkID0gaGVhZGVycy5ubGVuOworICAgICAgYnJlYWs7CisgICAgY2FzZSBRVUlDSEVfSDNfRVZFTlRfREFUQToKKyAgICAgIGlmKCFzdHJlYW0tPmZpcnN0Ym9keSkgeworICAgICAgICAvKiBhZGQgYSBoZWFkZXItYm9keSBzZXBhcmF0b3IgQ1JMRiAqLworICAgICAgICBidWZbMF0gPSAnXHInOworICAgICAgICBidWZbMV0gPSAnXG4nOworICAgICAgICBidWYgKz0gMjsKKyAgICAgICAgYnVmZmVyc2l6ZSAtPSAyOworICAgICAgICBzdHJlYW0tPmZpcnN0Ym9keSA9IFRSVUU7CisgICAgICAgIHJlY3ZkID0gMjsgLyogdHdvIGJ5dGVzIGFscmVhZHkgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmVjdmQgPSAwOworICAgICAgcmNvZGUgPSBxdWljaGVfaDNfcmVjdl9ib2R5KHFzLT5oM2MsIHFzLT5jb25uLCBzLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzaXplKTsKKyAgICAgIGlmKHJjb2RlIDw9IDApIHsKKyAgICAgICAgcmVjdmQgPSAtMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICByZWN2ZCArPSByY29kZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBRVUlDSEVfSDNfRVZFTlRfRklOSVNIRUQ6CisgICAgICBzdHJlYW1jbG9zZShjb25uLCAiRW5kIG9mIHN0cmVhbSIpOworICAgICAgcmVjdmQgPSAwOyAvKiBlbmQgb2Ygc3RyZWFtICovCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcXVpY2hlX2gzX2V2ZW50X2ZyZWUoZXYpOworICB9CisgIGlmKGZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgKmN1cmxjb2RlID0gKC0xID09IHJlY3ZkKT8gQ1VSTEVfQUdBSU4gOiBDVVJMRV9PSzsKKyAgaWYocmVjdmQgPj0gMCkKKyAgICAvKiBHZXQgdGhpcyBjYWxsZWQgYWdhaW4gdG8gZHJhaW4gdGhlIGV2ZW50IHF1ZXVlICovCisgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1FVSUMpOworCisgIGRhdGEtPnN0YXRlLmRyYWluID0gKHJlY3ZkID49IDApID8gMSA6IDA7CisgIHJldHVybiByZWN2ZDsKK30KKworc3RhdGljIHNzaXplX3QgaDNfc3RyZWFtX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIHNzaXplX3Qgc2VudDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdHJlYW0tPmgzcmVxKSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gaHR0cF9yZXF1ZXN0KGNvbm4sIG1lbSwgbGVuKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbnQgPSBsZW47CisgIH0KKyAgZWxzZSB7CisgICAgSDNCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJQYXNzIG9uICV6ZCBib2R5IGJ5dGVzIHRvIHF1aWNoZVxuIiwKKyAgICAgICAgICAgICAgICAgbGVuKSk7CisgICAgc2VudCA9IHF1aWNoZV9oM19zZW5kX2JvZHkocXMtPmgzYywgcXMtPmNvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKW1lbSwgbGVuLCBGQUxTRSk7CisgICAgaWYoc2VudCA8IDApIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgaWYoZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpKSB7CisgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAqY3VybGNvZGUgPSBDVVJMRV9PSzsKKyAgcmV0dXJuIHNlbnQ7Cit9CisKKy8qCisgKiBTdG9yZSBxdWljaGUgdmVyc2lvbiBpbmZvIGluIHRoaXMgYnVmZmVyLCBQcmVmaXggd2l0aCBhIHNwYWNlLiAgUmV0dXJuIHRvdGFsCisgKiBsZW5ndGggd3JpdHRlbi4KKyAqLworaW50IEN1cmxfcXVpY192ZXIoY2hhciAqcCwgc2l6ZV90IGxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihwLCBsZW4sICJxdWljaGUvJXMiLCBxdWljaGVfdmVyc2lvbigpKTsKK30KKworLyogSW5kZXggd2hlcmUgOmF1dGhvcml0eSBoZWFkZXIgZmllbGQgd2lsbCBhcHBlYXIgaW4gcmVxdWVzdCBoZWFkZXIKKyAgIGZpZWxkIGxpc3QuICovCisjZGVmaW5lIEFVVEhPUklUWV9EU1RfSURYIDMKKworc3RhdGljIENVUkxjb2RlIGh0dHBfcmVxdWVzdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKyAgLyoKKyAgICovCisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICBzaXplX3QgbmhlYWRlcjsKKyAgc2l6ZV90IGk7CisgIHNpemVfdCBhdXRob3JpdHlfaWR4OworICBjaGFyICpoZGJ1ZiA9IChjaGFyICopbWVtOworICBjaGFyICplbmQsICpsaW5lX2VuZDsKKyAgaW50NjRfdCBzdHJlYW0zX2lkOworICBxdWljaGVfaDNfaGVhZGVyICpudmEgPSBOVUxMOworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSBjb25uLT5xdWljOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgc3RyZWFtLT5oM3JlcSA9IFRSVUU7IC8qIHNlbmYgb2ZmISAqLworCisgIC8qIENhbGN1bGF0ZSBudW1iZXIgb2YgaGVhZGVycyBjb250YWluZWQgaW4gW21lbSwgbWVtICsgbGVuKS4gQXNzdW1lcyBhCisgICAgIGNvcnJlY3RseSBnZW5lcmF0ZWQgSFRUUCBoZWFkZXIgZmllbGQgYmxvY2suICovCisgIG5oZWFkZXIgPSAwOworICBmb3IoaSA9IDE7IGkgPCBsZW47ICsraSkgeworICAgIGlmKGhkYnVmW2ldID09ICdcbicgJiYgaGRidWZbaSAtIDFdID09ICdccicpIHsKKyAgICAgICsrbmhlYWRlcjsKKyAgICAgICsraTsKKyAgICB9CisgIH0KKyAgaWYobmhlYWRlciA8IDIpCisgICAgZ290byBmYWlsOworCisgIC8qIFdlIGNvdW50ZWQgYWRkaXRpb25hbCAyIFxyXG4gaW4gdGhlIGZpcnN0IGFuZCBsYXN0IGxpbmUuIFdlIG5lZWQgMworICAgICBuZXcgaGVhZGVyczogOm1ldGhvZCwgOnBhdGggYW5kIDpzY2hlbWUuIFRoZXJlZm9yZSB3ZSBuZWVkIG9uZQorICAgICBtb3JlIHNwYWNlLiAqLworICBuaGVhZGVyICs9IDE7CisgIG52YSA9IG1hbGxvYyhzaXplb2YocXVpY2hlX2gzX2hlYWRlcikgKiBuaGVhZGVyKTsKKyAgaWYoIW52YSkgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogRXh0cmFjdCA6bWV0aG9kLCA6cGF0aCBmcm9tIHJlcXVlc3QgbGluZQorICAgICBXZSBkbyBsaW5lIGVuZGluZ3Mgd2l0aCBDUkxGIHNvIGNoZWNraW5nIGZvciBDUiBpcyBlbm91Z2ggKi8KKyAgbGluZV9lbmQgPSBtZW1jaHIoaGRidWYsICdccicsIGxlbik7CisgIGlmKCFsaW5lX2VuZCkgeworICAgIHJlc3VsdCA9IENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsgLyogaW50ZXJuYWwgZXJyb3IgKi8KKyAgICBnb3RvIGZhaWw7CisgIH0KKworICAvKiBNZXRob2QgZG9lcyBub3QgY29udGFpbiBzcGFjZXMgKi8KKyAgZW5kID0gbWVtY2hyKGhkYnVmLCAnICcsIGxpbmVfZW5kIC0gaGRidWYpOworICBpZighZW5kIHx8IGVuZCA9PSBoZGJ1ZikKKyAgICBnb3RvIGZhaWw7CisgIG52YVswXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOm1ldGhvZCI7CisgIG52YVswXS5uYW1lX2xlbiA9IHN0cmxlbigoY2hhciAqKW52YVswXS5uYW1lKTsKKyAgbnZhWzBdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgbnZhWzBdLnZhbHVlX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKworICBoZGJ1ZiA9IGVuZCArIDE7CisKKyAgLyogUGF0aCBtYXkgY29udGFpbiBzcGFjZXMgc28gc2NhbiBiYWNrd2FyZHMgKi8KKyAgZW5kID0gTlVMTDsKKyAgZm9yKGkgPSAoc2l6ZV90KShsaW5lX2VuZCAtIGhkYnVmKTsgaTsgLS1pKSB7CisgICAgaWYoaGRidWZbaSAtIDFdID09ICcgJykgeworICAgICAgZW5kID0gJmhkYnVmW2kgLSAxXTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZighZW5kIHx8IGVuZCA9PSBoZGJ1ZikKKyAgICBnb3RvIGZhaWw7CisgIG52YVsxXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOnBhdGgiOworICBudmFbMV0ubmFtZV9sZW4gPSBzdHJsZW4oKGNoYXIgKiludmFbMV0ubmFtZSk7CisgIG52YVsxXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgIG52YVsxXS52YWx1ZV9sZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7CisKKyAgbnZhWzJdLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6c2NoZW1lIjsKKyAgbnZhWzJdLm5hbWVfbGVuID0gc3RybGVuKChjaGFyICopbnZhWzJdLm5hbWUpOworICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQorICAgIG52YVsyXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopImh0dHBzIjsKKyAgZWxzZQorICAgIG52YVsyXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopImh0dHAiOworICBudmFbMl0udmFsdWVfbGVuID0gc3RybGVuKChjaGFyICopbnZhWzJdLnZhbHVlKTsKKworCisgIGF1dGhvcml0eV9pZHggPSAwOworICBpID0gMzsKKyAgd2hpbGUoaSA8IG5oZWFkZXIpIHsKKyAgICBzaXplX3QgaGxlbjsKKworICAgIGhkYnVmID0gbGluZV9lbmQgKyAyOworCisgICAgLyogY2hlY2sgZm9yIG5leHQgQ1IsIGJ1dCBvbmx5IHdpdGhpbiB0aGUgcGllY2Ugb2YgZGF0YSBsZWZ0IGluIHRoZSBnaXZlbgorICAgICAgIGJ1ZmZlciAqLworICAgIGxpbmVfZW5kID0gbWVtY2hyKGhkYnVmLCAnXHInLCBsZW4gLSAoaGRidWYgLSAoY2hhciAqKW1lbSkpOworICAgIGlmKCFsaW5lX2VuZCB8fCAobGluZV9lbmQgPT0gaGRidWYpKQorICAgICAgZ290byBmYWlsOworCisgICAgLyogaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lcyBhcmUgbm90IHN1cHBvcnRlZCAqLworICAgIGlmKCpoZGJ1ZiA9PSAnICcgfHwgKmhkYnVmID09ICdcdCcpCisgICAgICBnb3RvIGZhaWw7CisKKyAgICBmb3IoZW5kID0gaGRidWY7IGVuZCA8IGxpbmVfZW5kICYmICplbmQgIT0gJzonOyArK2VuZCkKKyAgICAgIDsKKyAgICBpZihlbmQgPT0gaGRidWYgfHwgZW5kID09IGxpbmVfZW5kKQorICAgICAgZ290byBmYWlsOworICAgIGhsZW4gPSBlbmQgLSBoZGJ1ZjsKKworICAgIGlmKGhsZW4gPT0gNCAmJiBzdHJuY2FzZWNvbXBhcmUoImhvc3QiLCBoZGJ1ZiwgNCkpIHsKKyAgICAgIGF1dGhvcml0eV9pZHggPSBpOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6YXV0aG9yaXR5IjsKKyAgICAgIG52YVtpXS5uYW1lX2xlbiA9IHN0cmxlbigoY2hhciAqKW52YVtpXS5uYW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBudmFbaV0ubmFtZV9sZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7CisgICAgICAvKiBMb3dlciBjYXNlIHRoZSBoZWFkZXIgbmFtZSBmb3IgSFRUUC8zICovCisgICAgICBDdXJsX3N0cm50b2xvd2VyKChjaGFyICopaGRidWYsIGhkYnVmLCBudmFbaV0ubmFtZV9sZW4pOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICAgIH0KKyAgICBoZGJ1ZiA9IGVuZCArIDE7CisgICAgd2hpbGUoKmhkYnVmID09ICcgJyB8fCAqaGRidWYgPT0gJ1x0JykKKyAgICAgICsraGRidWY7CisgICAgZW5kID0gbGluZV9lbmQ7CisKKyNpZiAwIC8qIFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIGluIG1vcmUgb3IgbGVzcyBsaWtlIHRoaXMgKi8KKyAgICBzd2l0Y2goaW5zcGVjdF9oZWFkZXIoKGNvbnN0IGNoYXIgKiludmFbaV0ubmFtZSwgbnZhW2ldLm5hbWVsZW4sIGhkYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSBoZGJ1ZikpIHsKKyAgICBjYXNlIEhFQURFUklOU1RfSUdOT1JFOgorICAgICAgLyogc2tpcCBoZWFkZXIgZmllbGRzIHByb2hpYml0ZWQgYnkgSFRUUC8yIHNwZWNpZmljYXRpb24uICovCisgICAgICAtLW5oZWFkZXI7CisgICAgICBjb250aW51ZTsKKyAgICBjYXNlIEhFQURFUklOU1RfVEVfVFJBSUxFUlM6CisgICAgICBudmFbaV0udmFsdWUgPSAodWludDhfdCopInRyYWlsZXJzIjsKKyAgICAgIG52YVtpXS52YWx1ZV9sZW4gPSBzaXplb2YoInRyYWlsZXJzIikgLSAxOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIG52YVtpXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgICAgICBudmFbaV0udmFsdWVfbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICAgIH0KKyNlbmRpZgorICAgIG52YVtpXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgICAgbnZhW2ldLnZhbHVlX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKworICAgICsraTsKKyAgfQorCisgIC8qIDphdXRob3JpdHkgbXVzdCBjb21lIGJlZm9yZSBub24tcHNldWRvIGhlYWRlciBmaWVsZHMgKi8KKyAgaWYoYXV0aG9yaXR5X2lkeCAhPSAwICYmIGF1dGhvcml0eV9pZHggIT0gQVVUSE9SSVRZX0RTVF9JRFgpIHsKKyAgICBxdWljaGVfaDNfaGVhZGVyIGF1dGhvcml0eSA9IG52YVthdXRob3JpdHlfaWR4XTsKKyAgICBmb3IoaSA9IGF1dGhvcml0eV9pZHg7IGkgPiBBVVRIT1JJVFlfRFNUX0lEWDsgLS1pKSB7CisgICAgICBudmFbaV0gPSBudmFbaSAtIDFdOworICAgIH0KKyAgICBudmFbaV0gPSBhdXRob3JpdHk7CisgIH0KKworICAvKiBXYXJuIHN0cmVhbSBtYXkgYmUgcmVqZWN0ZWQgaWYgY3VtdWxhdGl2ZSBsZW5ndGggb2YgaGVhZGVycyBpcyB0b28KKyAgICAgbGFyZ2UuICovCisjZGVmaW5lIE1BWF9BQ0MgNjAwMDAgIC8qIDw2NEtCIHRvIGFjY291bnQgZm9yIHNvbWUgb3ZlcmhlYWQgKi8KKyAgeworICAgIHNpemVfdCBhY2MgPSAwOworCisgICAgZm9yKGkgPSAwOyBpIDwgbmhlYWRlcjsgKytpKSB7CisgICAgICBhY2MgKz0gbnZhW2ldLm5hbWVfbGVuICsgbnZhW2ldLnZhbHVlX2xlbjsKKworICAgICAgSDNCVUdGKGluZm9mKGRhdGEsICJoMyBbJS4qczogJS4qc11cbiIsCisgICAgICAgICAgICAgICAgICAgbnZhW2ldLm5hbWVfbGVuLCBudmFbaV0ubmFtZSwKKyAgICAgICAgICAgICAgICAgICBudmFbaV0udmFsdWVfbGVuLCBudmFbaV0udmFsdWUpKTsKKyAgICB9CisKKyAgICBpZihhY2MgPiBNQVhfQUNDKSB7CisgICAgICBpbmZvZihkYXRhLCAiaHR0cF9yZXF1ZXN0OiBXYXJuaW5nOiBUaGUgY3VtdWxhdGl2ZSBsZW5ndGggb2YgYWxsICIKKyAgICAgICAgICAgICJoZWFkZXJzIGV4Y2VlZHMgJXp1IGJ5dGVzIGFuZCB0aGF0IGNvdWxkIGNhdXNlIHRoZSAiCisgICAgICAgICAgICAic3RyZWFtIHRvIGJlIHJlamVjdGVkLlxuIiwgTUFYX0FDQyk7CisgICAgfQorICB9CisKKyAgc3dpdGNoKGRhdGEtPnN0YXRlLmh0dHByZXEpIHsKKyAgY2FzZSBIVFRQUkVRX1BPU1Q6CisgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CisgIGNhc2UgSFRUUFJFUV9QT1NUX01JTUU6CisgIGNhc2UgSFRUUFJFUV9QVVQ6CisgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgIGVsc2UKKyAgICAgIC8qIGRhdGEgc2VuZGluZyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGRhdGEgYW1vdW50IHVwIGZyb250ICovCisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gLTE7IC8qIHVua25vd24sIGJ1dCBub3QgemVybyAqLworCisgICAgc3RyZWFtM19pZCA9IHF1aWNoZV9oM19zZW5kX3JlcXVlc3QocXMtPmgzYywgcXMtPmNvbm4sIG52YSwgbmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID8gRkFMU0U6IFRSVUUpOworICAgIGlmKChzdHJlYW0zX2lkID49IDApICYmIGRhdGEtPnNldC5wb3N0ZmllbGRzKSB7CisgICAgICBzc2l6ZV90IHNlbnQgPSBxdWljaGVfaDNfc2VuZF9ib2R5KHFzLT5oM2MsIHFzLT5jb25uLCBzdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWRhdGEtPnNldC5wb3N0ZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0LCBUUlVFKTsKKyAgICAgIGlmKHNlbnQgPD0gMCkgeworICAgICAgICBmYWlsZihkYXRhLCAicXVpY2hlX2gzX3NlbmRfYm9keSBmYWlsZWQhIik7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gMDsgLyogbm90aGluZyBsZWZ0IHRvIHNlbmQgKi8KKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgc3RyZWFtM19pZCA9IHF1aWNoZV9oM19zZW5kX3JlcXVlc3QocXMtPmgzYywgcXMtPmNvbm4sIG52YSwgbmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKKyAgICBicmVhazsKKyAgfQorCisgIEN1cmxfc2FmZWZyZWUobnZhKTsKKworICBpZihzdHJlYW0zX2lkIDwgMCkgeworICAgIEgzQlVHRihpbmZvZihkYXRhLCAicXVpY2hlX2gzX3NlbmRfcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgc3RyZWFtM19pZCkpOworICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgZ290byBmYWlsOworICB9CisKKyAgaW5mb2YoZGF0YSwgIlVzaW5nIEhUVFAvMyBTdHJlYW0gSUQ6ICV4IChlYXN5IGhhbmRsZSAlcClcbiIsCisgICAgICAgIHN0cmVhbTNfaWQsICh2b2lkICopZGF0YSk7CisgIHN0cmVhbS0+c3RyZWFtM19pZCA9IHN0cmVhbTNfaWQ7CisKKyAgcmV0dXJuIENVUkxFX09LOworCitmYWlsOgorICBmcmVlKG52YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRvbmVfc2VuZGluZyB3aGVuIHdlIHN0b3AgSFRUUC8zIHVwbG9hZGluZy4KKyAqLworQ1VSTGNvZGUgQ3VybF9xdWljX2RvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGlmKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9odHRwMykgeworICAgIC8qIG9ubHkgZm9yIEhUVFAvMyB0cmFuc2ZlcnMgKi8KKyAgICBzc2l6ZV90IHNlbnQ7CisgICAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiEhISBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nXG4iKTsKKyAgICBzdHJlYW0tPnVwbG9hZF9kb25lID0gVFJVRTsKKyAgICBzZW50ID0gcXVpY2hlX2gzX3NlbmRfYm9keShxcy0+aDNjLCBxcy0+Y29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIFRSVUUpOworICAgIGlmKHNlbnQgPCAwKQorICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBodHRwLmM6Q3VybF9odHRwX2RvbmUgd2hlbiBhIHJlcXVlc3QgY29tcGxldGVzLgorICovCit2b2lkIEN1cmxfcXVpY19kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgcHJlbWF0dXJlKQoreworICAodm9pZClkYXRhOworICAodm9pZClwcmVtYXR1cmU7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRhdGFfcGVuZGluZyB0byBrbm93IGlmIHdlIHNob3VsZCBrZWVwIGxvb3BpbmcKKyAqIHRvIHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKi8KK2Jvb2wgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQoreworICAodm9pZClkYXRhOworICByZXR1cm4gRkFMU0U7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvcXVpY2hlLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGQxODM3Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvcXVpY2hlLmgKQEAgLTAsMCArMSw0OSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDSEVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDSEVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX1FVSUNIRQorCisjaW5jbHVkZSA8cXVpY2hlLmg+CisKK3N0cnVjdCBxdWljX2hhbmRzaGFrZSB7CisgIGNoYXIgKmJ1ZjsgICAgICAgLyogcG9pbnRlciB0byB0aGUgYnVmZmVyICovCisgIHNpemVfdCBhbGxvY2xlbjsgLyogc2l6ZSBvZiBhbGxvY2F0aW9uICovCisgIHNpemVfdCBsZW47ICAgICAgLyogc2l6ZSBvZiBjb250ZW50IGluIGJ1ZmZlciAqLworICBzaXplX3QgbnJlYWQ7ICAgIC8qIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWFkICovCit9OworCitzdHJ1Y3QgcXVpY3NvY2tldCB7CisgIHF1aWNoZV9jb25maWcgKmNmZzsKKyAgcXVpY2hlX2Nvbm4gKmNvbm47CisgIHF1aWNoZV9oM19jb25uICpoM2M7CisgIHF1aWNoZV9oM19jb25maWcgKmgzY29uZmlnOworICB1aW50OF90IHNjaWRbUVVJQ0hFX01BWF9DT05OX0lEX0xFTl07CisgIHVpbnQzMl90IHZlcnNpb247Cit9OworCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX1FVSUNIRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy92cXVpYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWU4ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuYwpAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBFTkFCTEVfUVVJQworCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJkeW5idWYuaCIKKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgInZxdWljLmgiCisKKyNpZmRlZiBPX0JJTkFSWQorI2RlZmluZSBRTE9HTU9ERSBPX1dST05MWXxPX0NSRUFUfE9fQklOQVJZCisjZWxzZQorI2RlZmluZSBRTE9HTU9ERSBPX1dST05MWXxPX0NSRUFUCisjZW5kaWYKKworLyoKKyAqIElmIHRoZSBRTE9HRElSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgb3BlbiBhbmQgcmV0dXJuIGEgZmlsZQorICogZGVzY3JpcHRvciB0byB3cml0ZSB0aGUgbG9nIHRvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBlcnJvciBpZiBzb21ldGhpbmcgZmFpbGVkIG91dHNpZGUgb2YgZmFpbGluZyB0bworICogY3JlYXRlIHRoZSBmaWxlLiBPcGVuIGZpbGUgc3VjY2VzcyBpcyBkZWVtZWQgYnkgc2VlaW5nIGlmIHRoZSByZXR1cm5lZCBmZAorICogaXMgIT0gLTEuCisgKi8KK0NVUkxjb2RlIEN1cmxfcWxvZ2RpcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNjaWQsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNjaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpxbG9nZmRwKQoreworICBjb25zdCBjaGFyICpxbG9nX2RpciA9IGdldGVudigiUUxPR0RJUiIpOworICAqcWxvZ2ZkcCA9IC0xOworICBpZihxbG9nX2RpcikgeworICAgIHN0cnVjdCBkeW5idWYgZm5hbWU7CisgICAgQ1VSTGNvZGUgcmVzdWx0OworICAgIHVuc2lnbmVkIGludCBpOworICAgIEN1cmxfZHluX2luaXQoJmZuYW1lLCBEWU5fUUxPR19OQU1FKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJmZuYW1lLCBxbG9nX2Rpcik7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmZm5hbWUsICIvIik7CisgICAgZm9yKGkgPSAwOyAoaSA8IHNjaWRsZW4pICYmICFyZXN1bHQ7IGkrKykgeworICAgICAgY2hhciBoZXhbM107CisgICAgICBtc25wcmludGYoaGV4LCAzLCAiJTAyeCIsIHNjaWRbaV0pOworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZmbmFtZSwgaGV4KTsKKyAgICB9CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmZm5hbWUsICIucWxvZyIpOworCisgICAgaWYoIXJlc3VsdCkgeworICAgICAgaW50IHFsb2dmZCA9IG9wZW4oQ3VybF9keW5fcHRyKCZmbmFtZSksIFFMT0dNT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKKyAgICAgIGlmKHFsb2dmZCAhPSAtMSkKKyAgICAgICAgKnFsb2dmZHAgPSBxbG9nZmQ7CisgICAgfQorICAgIEN1cmxfZHluX2ZyZWUoJmZuYW1lKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy92cXVpYy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1ZRVUlDX1FVSUNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIEVOQUJMRV9RVUlDCitDVVJMY29kZSBDdXJsX3Fsb2dkaXIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzY2lkLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzY2lkbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqcWxvZ2ZkcCk7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX1FVSUNfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC9saWJzc2guYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4OGUyMwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoLmMKQEAgLTAsMCArMSwyODkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDIwIFJlZCBIYXQsIEluYy4KKyAqCisgKiBBdXRob3JzOiBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcywgVG9tYXMgTXJheiwgU3RhbmlzbGF2IFppZGVrLAorICogICAgICAgICAgUm9iZXJ0IEtvbGN1biwgQW5kcmVhcyBTY2huZWlkZXIKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX0xJQlNTSAorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxsaWJzc2gvbGlic3NoLmg+CisjaW5jbHVkZSA8bGlic3NoL3NmdHAuaD4KKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVFNOQU1FX0gKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKKyN1bmRlZiBpbl9hZGRyX3QKKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgImh0dHAuaCIgICAgICAgICAgICAgICAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzcGVlZGNoZWNrLmgiCisjaW5jbHVkZSAiZ2V0aW5mby5oIgorI2luY2x1ZGUgInN0cmR1cC5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKKyNpbmNsdWRlICJ2dGxzL3Z0bHMuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJwYXJzZWRhdGUuaCIgICAgICAgICAgLyogZm9yIHRoZSB3ZWVrIGRheSBhbmQgbW9udGggbmFtZXMgKi8KKyNpbmNsdWRlICJzb2NrYWRkci5oIiAgICAgICAgICAgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisvKiBmb3IgcGVybWlzc2lvbiBhbmQgb3BlbiBmbGFncyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLworI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorI2luY2x1ZGUgImN1cmxfcGF0aC5oIgorCisvKiBBIHJlY2VudCBtYWNybyBwcm92aWRlZCBieSBsaWJzc2guIE9yIG1ha2Ugb3VyIG93bi4gKi8KKyNpZm5kZWYgU1NIX1NUUklOR19GUkVFX0NIQVIKKyNkZWZpbmUgU1NIX1NUUklOR19GUkVFX0NIQVIoeCkgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZih4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHgpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHggPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qIExvY2FsIGZ1bmN0aW9uczogKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfZG9faXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKKworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIENVUkxjb2RlIHNmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7CitzdGF0aWMKK0NVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CisKK3N0YXRpYyB2b2lkIHNmdHBfcXVvdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyB2b2lkIHNmdHBfcXVvdGVfc3RhdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIGludCBteXNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29jayk7CitzdGF0aWMgaW50IG15c3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKTsKKworc3RhdGljIENVUkxjb2RlIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworLyoKKyAqIFNDUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcCA9IHsKKyAgIlNDUCIsICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgbXlzc2hfZG9faXQsICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgc2NwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIG15c3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgbXlzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgLyogY29ubmVjdGluZyAqLworICBzY3BfZG9pbmcsICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgbXlzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHNjcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KKyAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fU0NQLCAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgIC8qIGZsYWdzICovCit9OworCisvKgorICogU0ZUUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHAgPSB7CisgICJTRlRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBteXNzaF9kb19pdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHNmdHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgbXlzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIG15c3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBzZnRwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBteXNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBzZnRwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCisgIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fU0ZUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04KKyAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworc3RhdGljIENVUkxjb2RlIHNmdHBfZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKK3sKKyAgc3dpdGNoKGVycikgeworICAgIGNhc2UgU1NIX0ZYX09LOgorICAgICAgcmV0dXJuIENVUkxFX09LOworCisgICAgY2FzZSBTU0hfRlhfTk9fU1VDSF9GSUxFOgorICAgIGNhc2UgU1NIX0ZYX05PX1NVQ0hfUEFUSDoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBjYXNlIFNTSF9GWF9QRVJNSVNTSU9OX0RFTklFRDoKKyAgICBjYXNlIFNTSF9GWF9XUklURV9QUk9URUNUOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworCisgICAgY2FzZSBTU0hfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gQ1VSTEVfU1NIOworfQorCisjaWZuZGVmIERFQlVHQlVJTEQKKyNkZWZpbmUgc3RhdGUoeCx5KSBteXN0YXRlKHgseSkKKyNlbHNlCisjZGVmaW5lIHN0YXRlKHgseSkgbXlzdGF0ZSh4LHksIF9fTElORV9fKQorI2VuZGlmCisKKy8qCisgKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKKyAqLworLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KK3N0YXRpYyB2b2lkIG15c3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzc2hzdGF0ZSBub3dzdGF0ZQorI2lmZGVmIERFQlVHQlVJTEQKKyAgICAgICAgICAgICAgICAgICAgLCBpbnQgbGluZW5vCisjZW5kaWYKKyAgKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisgIC8qIGZvciBkZWJ1ZyBwdXJwb3NlcyAqLworICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKyAgICAiU1NIX1NUT1AiLAorICAgICJTU0hfSU5JVCIsCisgICAgIlNTSF9TX1NUQVJUVVAiLAorICAgICJTU0hfSE9TVEtFWSIsCisgICAgIlNTSF9BVVRITElTVCIsCisgICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BLRVkiLAorICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAorICAgICJTU0hfQVVUSF9QQVNTIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAorICAgICJTU0hfQVVUSF9BR0VOVCIsCisgICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCisgICAgIlNTSF9BVVRIX0hPU1QiLAorICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX0tFWSIsCisgICAgIlNTSF9BVVRIX0dTU0FQSSIsCisgICAgIlNTSF9BVVRIX0RPTkUiLAorICAgICJTU0hfU0ZUUF9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAorICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKKyAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9RVU9URSIsCisgICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCisgICAgIlNTSF9TRlRQX0dFVElORk8iLAorICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCisgICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAorICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUiIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAorICAgICJTU0hfU0ZUUF9DTE9TRSIsCisgICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKKyAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKKyAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAorICAgICJTU0hfU0NQX0RPTkUiLAorICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCisgICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCisgICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKKyAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCisgICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAorICAgICJRVUlUIgorICB9OworCisKKyAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiU1NIICVwIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzIChsaW5lICVkKVxuIiwKKyAgICAgICAgICAodm9pZCAqKSBzc2hjLCBuYW1lc1tzc2hjLT5zdGF0ZV0sIG5hbWVzW25vd3N0YXRlXSwKKyAgICAgICAgICBsaW5lbm8pOworICB9CisjZW5kaWYKKworICBzc2hjLT5zdGF0ZSA9IG5vd3N0YXRlOworfQorCisvKiBNdWx0aXBsZSBvcHRpb25zOgorICogMS4gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdIGlzIHNldCB3aXRoIGFuIE1ENQorICogICAgaGFzaCAoOTBzIHN0eWxlIGF1dGgsIG5vdCBzdXJlIHdlIHNob3VsZCBoYXZlIGl0IGhlcmUpCisgKiAyLiBkYXRhLT5zZXQuc3NoX2tleWZ1bmMgY2FsbGJhY2sgaXMgc2V0LiBUaGVuIHdlIGRvIHRydXN0IG9uIGZpcnN0CisgKiAgICB1c2UuIFdlIGV2ZW4gc2F2ZSBvbiBrbm93bmhvc3RzIGlmIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRQorICogICAgaXMgcmV0dXJuZWQgYnkgaXQuCisgKiAzLiBub25lIG9mIHRoZSBhYm92ZS4gV2Ugb25seSBhY2NlcHQgaWYgaXQgaXMgcHJlc2VudCBvbiBrbm93biBob3N0cy4KKyAqCisgKiBSZXR1cm5zIFNTSF9PSyBvciBTU0hfRVJST1IuCisgKi8KK3N0YXRpYyBpbnQgbXlzc2hfaXNfa25vd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpbnQgcmM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgc3NoX2tleSBwdWJrZXk7CisgIHNpemVfdCBobGVuOworICB1bnNpZ25lZCBjaGFyICpoYXNoID0gTlVMTDsKKyAgY2hhciAqZm91bmRfYmFzZTY0ID0gTlVMTDsKKyAgY2hhciAqa25vd25fYmFzZTY0ID0gTlVMTDsKKyAgaW50IHZzdGF0ZTsKKyAgZW51bSBjdXJsX2tobWF0Y2gga2V5bWF0Y2g7CisgIHN0cnVjdCBjdXJsX2toa2V5IGZvdW5ka2V5OworICBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXlwID0gTlVMTDsKKyAgY3VybF9zc2hrZXljYWxsYmFjayBmdW5jID0KKyAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM7CisKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOSwwKQorICBzdHJ1Y3Qgc3NoX2tub3duaG9zdHNfZW50cnkgKmtub3duaG9zdHNlbnRyeSA9IE5VTEw7CisgIHN0cnVjdCBjdXJsX2toa2V5IGtub3dua2V5OworI2VuZGlmCisKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOCwwKQorICByYyA9IHNzaF9nZXRfc2VydmVyX3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgJnB1YmtleSk7CisjZWxzZQorICByYyA9IHNzaF9nZXRfcHVibGlja2V5KHNzaGMtPnNzaF9zZXNzaW9uLCAmcHVia2V5KTsKKyNlbmRpZgorICBpZihyYyAhPSBTU0hfT0spCisgICAgcmV0dXJuIHJjOworCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSkgeworICAgIGludCBpOworICAgIGNoYXIgbWQ1YnVmZmVyWzMzXTsKKyAgICBjb25zdCBjaGFyICpwdWJrZXlfbWQ1ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdOworCisgICAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleV9oYXNoKHB1YmtleSwgU1NIX1BVQkxJQ0tFWV9IQVNIX01ENSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhc2gsICZobGVuKTsKKyAgICBpZihyYyAhPSBTU0hfT0sgfHwgaGxlbiAhPSAxNikgeworICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJEZW5pZWQgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uOiBtZDUgZmluZ2VycHJpbnQgbm90IGF2YWlsYWJsZSIpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspCisgICAgICBtc25wcmludGYoJm1kNWJ1ZmZlcltpKjJdLCAzLCAiJTAyeCIsICh1bnNpZ25lZCBjaGFyKWhhc2hbaV0pOworCisgICAgaW5mb2YoZGF0YSwgIlNTSCBNRDUgZmluZ2VycHJpbnQ6ICVzXG4iLCBtZDVidWZmZXIpOworCisgICAgaWYoIXN0cmNhc2Vjb21wYXJlKG1kNWJ1ZmZlciwgcHVia2V5X21kNSkpIHsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiRGVuaWVkIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogbWlzbWF0Y2ggbWQ1IGZpbmdlcnByaW50LiAiCisgICAgICAgICAgICAiUmVtb3RlICVzIGlzIG5vdCBlcXVhbCB0byAlcyIsIG1kNWJ1ZmZlciwgcHVia2V5X21kNSk7CisgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICByYyA9IFNTSF9PSzsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKworICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5aG9zdCAhPSBUUlVFKSB7CisgICAgcmMgPSBTU0hfT0s7CisgICAgZ290byBjbGVhbnVwOworICB9CisKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOSwwKQorICAvKiBHZXQgdGhlIGtub3duX2tleSBmcm9tIHRoZSBrbm93biBob3N0cyBmaWxlICovCisgIHZzdGF0ZSA9IHNzaF9zZXNzaW9uX2dldF9rbm93bl9ob3N0c19lbnRyeShzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrbm93bmhvc3RzZW50cnkpOworCisgIC8qIENhc2UgYW4gZW50cnkgd2FzIGZvdW5kIGluIGEga25vd24gaG9zdHMgZmlsZSAqLworICBpZihrbm93bmhvc3RzZW50cnkpIHsKKyAgICBpZihrbm93bmhvc3RzZW50cnktPnB1YmxpY2tleSkgeworICAgICAgcmMgPSBzc2hfcGtpX2V4cG9ydF9wdWJrZXlfYmFzZTY0KGtub3duaG9zdHNlbnRyeS0+cHVibGlja2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrbm93bl9iYXNlNjQpOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgIH0KKyAgICAgIGtub3dua2V5LmtleSA9IGtub3duX2Jhc2U2NDsKKyAgICAgIGtub3dua2V5LmxlbiA9IHN0cmxlbihrbm93bl9iYXNlNjQpOworCisgICAgICBzd2l0Y2goc3NoX2tleV90eXBlKGtub3duaG9zdHNlbnRyeS0+cHVibGlja2V5KSkgeworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQToKKyAgICAgICAgICBrbm93bmtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9SU0E7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NIX0tFWVRZUEVfUlNBMToKKyAgICAgICAgICBrbm93bmtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9SU0ExOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VDRFNBOgorICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VDRFNBX1AyNTY6CisgICAgICAgIGNhc2UgU1NIX0tFWVRZUEVfRUNEU0FfUDM4NDoKKyAgICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QNTIxOgorICAgICAgICAgIGtub3dua2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0VDRFNBOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VEMjU1MTk6CisgICAgICAgICAga25vd25rZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRUQyNTUxOTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0hfS0VZVFlQRV9EU1M6CisgICAgICAgICAga25vd25rZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRFNTOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJjID0gU1NIX0VSUk9SOworICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgIH0KKyAgICAgIGtub3dua2V5cCA9ICZrbm93bmtleTsKKyAgICB9CisgIH0KKworICBzd2l0Y2godnN0YXRlKSB7CisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfT0s6CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX09LOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfT1RIRVI6CisgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgU1NIX0tOT1dOX0hPU1RTX05PVF9GT1VORDoKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfVU5LTk9XTjoKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfRVJST1I6CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU1NJTkc7CisgICAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfTUlTTUFUQ0g7CisgICAgICBicmVhazsKKyAgfQorCisjZWxzZQorICB2c3RhdGUgPSBzc2hfaXNfc2VydmVyX2tub3duKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgc3dpdGNoKHZzdGF0ZSkgeworICAgIGNhc2UgU1NIX1NFUlZFUl9LTk9XTl9PSzoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfT0s7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTSF9TRVJWRVJfRklMRV9OT1RfRk9VTkQ6CisgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgU1NIX1NFUlZFUl9OT1RfS05PV046CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU1NJTkc7CisgICAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfTUlTTUFUQ0g7CisgICAgICBicmVhazsKKyAgfQorI2VuZGlmCisKKyAgaWYoZnVuYykgeyAvKiB1c2UgY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGFjdGlvbiAqLworICAgIHJjID0gc3NoX3BraV9leHBvcnRfcHVia2V5X2Jhc2U2NChwdWJrZXksICZmb3VuZF9iYXNlNjQpOworICAgIGlmKHJjICE9IFNTSF9PSykKKyAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGZvdW5ka2V5LmtleSA9IGZvdW5kX2Jhc2U2NDsKKyAgICBmb3VuZGtleS5sZW4gPSBzdHJsZW4oZm91bmRfYmFzZTY0KTsKKworICAgIHN3aXRjaChzc2hfa2V5X3R5cGUocHVia2V5KSkgeworICAgICAgY2FzZSBTU0hfS0VZVFlQRV9SU0E6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQTE6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQToKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOSwwKQorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QMjU2OgorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QMzg0OgorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QNTIxOgorI2VuZGlmCisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0VDRFNBOworICAgICAgICBicmVhazsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsNywwKQorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FRDI1NTE5OgorICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9FRDI1NTE5OworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9EU1M6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0RTUzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOworICAgIHJjID0gZnVuYyhkYXRhLCBrbm93bmtleXAsIC8qIGZyb20gdGhlIGtub3duaG9zdHMgZmlsZSAqLworICAgICAgICAgICAgICAmZm91bmRrZXksIC8qIGZyb20gdGhlIHJlbW90ZSBob3N0ICovCisgICAgICAgICAgICAgIGtleW1hdGNoLCBkYXRhLT5zZXQuc3NoX2tleWZ1bmNfdXNlcnApOworICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKworICAgIHN3aXRjaChyYykgeworICAgICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEU6CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLDgsMCkKKyAgICAgICAgcmMgPSBzc2hfc2Vzc2lvbl91cGRhdGVfa25vd25faG9zdHMoc3NoYy0+c3NoX3Nlc3Npb24pOworI2Vsc2UKKyAgICAgICAgcmMgPSBzc2hfd3JpdGVfa25vd25ob3N0KHNzaGMtPnNzaF9zZXNzaW9uKTsKKyNlbmRpZgorICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxLSFNUQVRfRklORToKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAvKiBSRUpFQ1QvREVGRVIgKi8KKyAgICAgICAgcmMgPSBTU0hfRVJST1I7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYoa2V5bWF0Y2ggIT0gQ1VSTEtITUFUQ0hfT0spIHsKKyAgICAgIHJjID0gU1NIX0VSUk9SOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyAgfQorICByYyA9IFNTSF9PSzsKKworY2xlYW51cDoKKyAgaWYoZm91bmRfYmFzZTY0KSB7CisgICAgZnJlZShmb3VuZF9iYXNlNjQpOworICB9CisgIGlmKGtub3duX2Jhc2U2NCkgeworICAgIGZyZWUoa25vd25fYmFzZTY0KTsKKyAgfQorICBpZihoYXNoKQorICAgIHNzaF9jbGVhbl9wdWJrZXlfaGFzaCgmaGFzaCk7CisgIHNzaF9rZXlfZnJlZShwdWJrZXkpOworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCw5LDApCisgIGlmKGtub3duaG9zdHNlbnRyeSkgeworICAgIHNzaF9rbm93bmhvc3RzX2VudHJ5X2ZyZWUoa25vd25ob3N0c2VudHJ5KTsKKyAgfQorI2VuZGlmCisgIHJldHVybiByYzsKK30KKworI2RlZmluZSBNT1ZFX1RPX0VSUk9SX1NUQVRFKF9yKSB7IFwKKyAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7IFwKKyAgc3NoYy0+YWN0dWFsY29kZSA9IF9yOyBcCisgIHJjID0gU1NIX0VSUk9SOyBcCisgIGJyZWFrOyBcCit9CisKKyNkZWZpbmUgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCkgeyBcCisgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsgXAorICBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cF9lcnJvcl90b19DVVJMRShzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsgXAorICByYyA9IFNTSF9FUlJPUjsgXAorICBicmVhazsgXAorfQorCisjZGVmaW5lIE1PVkVfVE9fTEFTVF9BVVRIIFwKKyAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSB7IFwKKyAgICByYyA9IFNTSF9PSzsgXAorICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7IFwKKyAgICBicmVhazsgXAorICB9IFwKKyAgZWxzZSB7IFwKKyAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7IFwKKyAgfQorCisjZGVmaW5lIE1PVkVfVE9fVEVSVElBUllfQVVUSCBcCisgIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9JTlRFUkFDVElWRSkgeyBcCisgICAgcmMgPSBTU0hfT0s7IFwKKyAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7IFwKKyAgICBicmVhazsgXAorICB9IFwKKyAgZWxzZSB7IFwKKyAgICBNT1ZFX1RPX0xBU1RfQVVUSDsgXAorICB9CisKKyNkZWZpbmUgTU9WRV9UT19TRUNPTkRBUllfQVVUSCBcCisgIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9HU1NBUElfTUlDKSB7IFwKKyAgICByYyA9IFNTSF9PSzsgXAorICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0dTU0FQSSk7IFwKKyAgICBicmVhazsgXAorICB9IFwKKyAgZWxzZSB7IFwKKyAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7IFwKKyAgfQorCitzdGF0aWMKK2ludCBteXNzaF9hdXRoX2ludGVyYWN0aXZlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaW50IHJjOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgaW50IG5wcm9tcHRzOworCityZXN0YXJ0OgorICBzd2l0Y2goc3NoYy0+a2JkX3N0YXRlKSB7CisgICAgY2FzZSAwOgorICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQorICAgICAgICByZXR1cm4gU1NIX0FHQUlOOworCisgICAgICBpZihyYyAhPSBTU0hfQVVUSF9JTkZPKQorICAgICAgICByZXR1cm4gU1NIX0VSUk9SOworCisgICAgICBucHJvbXB0cyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0bnByb21wdHMoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYobnByb21wdHMgIT0gMSkKKyAgICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKKworICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50X3NldGFuc3dlcihzc2hjLT5zc2hfc2Vzc2lvbiwgMCwgY29ubi0+cGFzc3dkKTsKKyAgICAgIGlmKHJjIDwgMCkKKyAgICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKKworICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAxOgorICAgICAgc3NoYy0+a2JkX3N0YXRlID0gMTsKKworICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQorICAgICAgICByZXR1cm4gU1NIX0FHQUlOOworICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKQorICAgICAgICByYyA9IFNTSF9PSzsKKyAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfSU5GTykgeworICAgICAgICBucHJvbXB0cyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0bnByb21wdHMoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBpZihucHJvbXB0cyAhPSAwKQorICAgICAgICAgIHJldHVybiBTU0hfRVJST1I7CisKKyAgICAgICAgc3NoYy0+a2JkX3N0YXRlID0gMjsKKyAgICAgICAgZ290byByZXN0YXJ0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIHNzaGMtPmtiZF9zdGF0ZSA9IDI7CisKKyAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2tiZGludChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgTlVMTCk7CisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikKKyAgICAgICAgcmV0dXJuIFNTSF9BR0FJTjsKKyAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykKKyAgICAgICAgcmMgPSBTU0hfT0s7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gU1NIX0VSUk9SOworCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKKyAgfQorCisgIHNzaGMtPmtiZF9zdGF0ZSA9IDA7CisgIHJldHVybiByYzsKK30KKworLyoKKyAqIHNzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0CisgKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKKyAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIGxpYnNzaCBmdW5jdGlvbiByZXR1cm5zIFNTSF9BR0FJTgorICogbWVhbmluZyBpdCB3YW50cyB0byBiZSBjYWxsZWQgYWdhaW4gd2hlbiB0aGUgc29ja2V0IGlzIHJlYWR5CisgKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqYmxvY2spCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFNTSFBST1RPICpwcm90b3AgPSBkYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIGludCByYyA9IFNTSF9OT19FUlJPUiwgZXJyOworICBjaGFyICpuZXdfcmVhZGRpcl9saW5lOworICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7CisgIGNvbnN0IGNoYXIgKmVycl9tc2c7CisgICpibG9jayA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHdlJ3JlIG5vdCBibG9ja2luZyBieSBkZWZhdWx0ICovCisKKyAgZG8geworCisgICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7CisgICAgY2FzZSBTU0hfSU5JVDoKKyAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOworCisjaWYgMAorICAgICAgc3NoX3NldF9sb2dfbGV2ZWwoU1NIX0xPR19QUk9UT0NPTCk7CisjZW5kaWYKKworICAgICAgLyogU2V0IGxpYnNzaCB0byBub24tYmxvY2tpbmcsIHNpbmNlIGV2ZXJ5dGhpbmcgaW50ZXJuYWxseSBpcworICAgICAgICAgbm9uLWJsb2NraW5nICovCisgICAgICBzc2hfc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAwKTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfU19TVEFSVFVQOgorICAgICAgcmMgPSBzc2hfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBTU0hfQUdBSU4pCisgICAgICAgIGJyZWFrOworCisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uIik7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfRkFJTEVEX0lOSVQpOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7CisKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfSE9TVEtFWToKKworICAgICAgcmMgPSBteXNzaF9pc19rbm93bihjb25uKTsKKyAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTik7CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgU1NIX0FVVEhMSVNUOnsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gRkFMU0U7CisKKyAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfbm9uZShzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCk7CisgICAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7CisgICAgICAgICAgcmMgPSBTU0hfQUdBSU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRlZCB3aXRoIG5vbmVcbiIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfRVJST1IpIHsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICAgIH0KKworICAgICAgICBzc2hjLT5hdXRoX21ldGhvZHMgPSBzc2hfdXNlcmF1dGhfbGlzdChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCk7CisgICAgICAgIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9QVUJMSUNLRVkpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZX0lOSVQpOworICAgICAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiB1c2luZyBTU0ggcHVibGljIGtleSBmaWxlXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9HU1NBUElfTUlDKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfR1NTQVBJKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9JTlRFUkFDVElWRSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9QQVNTV09SRCkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kICovCisgICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgY2FzZSBTU0hfQVVUSF9QS0VZX0lOSVQ6CisgICAgICBpZighKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9QVUJMSUNLRVkpKSB7CisgICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7CisgICAgICB9CisKKyAgICAgIC8qIFR3byBjaG9pY2VzLCAoMSkgcHJpdmF0ZSBrZXkgd2FzIGdpdmVuIG9uIENNRCwKKyAgICAgICAqICgyKSB1c2UgdGhlICJkZWZhdWx0IiBrZXlzLiAqLworICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSkgeworICAgICAgICBpZihzc2hjLT5wdWJrZXkgJiYgIWRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCkgeworICAgICAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3RyeV9wdWJsaWNrZXkoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5wdWJrZXkpOworICAgICAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7CisgICAgICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByYyA9IHNzaF9wa2lfaW1wb3J0X3ByaXZrZXlfZmlsZShkYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmc3NoYy0+cHJpdmtleSk7CisgICAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgbG9hZCBwcml2YXRlIGtleSBmaWxlICVzIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKTsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICByYyA9IHNzaF91c2VyYXV0aF9wdWJsaWNrZXlfYXV0byhzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkKTsKKyAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgICAgcmMgPSBTU0hfT0s7CisgICAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX0FVVEhfUEtFWToKKyAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgc3NoYy0+cHJpdmtleSk7CisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgeworICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiAocmM6ICVkKVxuIiwgcmMpOworICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0dTU0FQSToKKyAgICAgIGlmKCEoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX0dTU0FQSSkpIHsKKyAgICAgICAgTU9WRV9UT19URVJUSUFSWV9BVVRIOworICAgICAgfQorCisgICAgICByYyA9IHNzaF91c2VyYXV0aF9nc3NhcGkoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgcmMgPSBTU0hfQUdBSU47CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIHJjID0gU1NIX09LOworICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIGdzc2FwaSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgTU9WRV9UT19URVJUSUFSWV9BVVRIOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0tFWV9JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX0tFWUJPQVJEKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgTU9WRV9UT19MQVNUX0FVVEg7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfS0VZOgorCisgICAgICAvKiBBdXRoZW50aWNhdGlvbiBmYWlsZWQuIENvbnRpbnVlIHdpdGgga2V5Ym9hcmQtaW50ZXJhY3RpdmUgbm93LiAqLworICAgICAgcmMgPSBteXNzaF9hdXRoX2ludGVyYWN0aXZlKGNvbm4pOworICAgICAgaWYocmMgPT0gU1NIX0FHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgPT0gU1NIX09LKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJjb21wbGV0ZWQga2V5Ym9hcmQgaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfUEFTU19JTklUOgorICAgICAgaWYoIShkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfUEFTU1dPUkQpKSB7CisgICAgICAgIC8qIEhvc3Qga2V5IGF1dGhlbnRpY2F0aW9uIGlzIGludGVudGlvbmFsbHkgbm90IGltcGxlbWVudGVkICovCisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1MpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgU1NIX0FVVEhfUEFTUzoKKyAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3Bhc3N3b3JkKHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBjb25uLT5wYXNzd2QpOworICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgcmMgPSBTU0hfQUdBSU47CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgcGFzc3dvcmQgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfRE9ORToKKyAgICAgIGlmKCFzc2hjLT5hdXRoZWQpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBhdXRoZW50aWNhdGVkIHNzaCBzZXNzaW9uLgorICAgICAgICovCisgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRpb24gY29tcGxldGVcbiIpOworCisgICAgICBDdXJsX3BncnNUaW1lKGNvbm4tPmRhdGEsIFRJTUVSX0FQUENPTk5FQ1QpOyAgICAgIC8qIFNTSCBpcyBjb25uZWN0ZWQgKi8KKworICAgICAgY29ubi0+c29ja2ZkID0gc29jazsKKyAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gQ1VSTF9TT0NLRVRfQkFEOworCisgICAgICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCA9PSBDVVJMUFJPVE9fU0ZUUCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9JTklUKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfSU5JVDoKKyAgICAgIHNzaF9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDEpOworCisgICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBzZnRwX25ldyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZighc3NoYy0+c2Z0cF9zZXNzaW9uKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpemluZyBzZnRwIHNlc3Npb246ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0NPVUxETlRfQ09OTkVDVCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByYyA9IHNmdHBfaW5pdChzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIHJjID0gc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoc2Z0cF9lcnJvcl90b19DVVJMRShyYykpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQUxQQVRIKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFMUEFUSDoKKyAgICAgIC8qCisgICAgICAgKiBHZXQgdGhlICJob21lIiBkaXJlY3RvcnkKKyAgICAgICAqLworICAgICAgc3NoYy0+aG9tZWRpciA9IHNmdHBfY2Fub25pY2FsaXplX3BhdGgoc3NoYy0+c2Z0cF9zZXNzaW9uLCAiLiIpOworICAgICAgaWYoc3NoYy0+aG9tZWRpciA9PSBOVUxMKSB7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKKyAgICAgIH0KKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBzc2hjLT5ob21lZGlyOworCisgICAgICAvKiBUaGlzIGlzIHRoZSBsYXN0IHN0ZXAgaW4gdGhlIFNGVFAgY29ubmVjdCBwaGFzZS4gRG8gbm90ZSB0aGF0IHdoaWxlCisgICAgICAgICB3ZSBnZXQgdGhlIGhvbWVkaXIgaGVyZSwgd2UgZ2V0IHRoZSAid29ya2luZ3BhdGgiIGluIHRoZSBETyBhY3Rpb24KKyAgICAgICAgIHNpbmNlIHRoZSBob21lZGlyIHdpbGwgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gcmVxdWVzdCBidXQgdGhlCisgICAgICAgICB3b3JraW5nIHBhdGggd2lsbCBub3QuICovCisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNTSCBDT05ORUNUIHBoYXNlIGRvbmVcbiIpKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9JTklUOgorCisgICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZwcm90b3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDoKKyAgICAgIGlmKGRhdGEtPnNldC5wb3N0cXVvdGUpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOworICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URToKKyAgICAgIC8qIFNlbmQgYW55IHF1b3RlIGNvbW1hbmRzICovCisgICAgICBzZnRwX3F1b3RlKGNvbm4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX05FWFRfUVVPVEU6CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworCisgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gc3NoYy0+cXVvdGVfaXRlbS0+bmV4dDsKKworICAgICAgaWYoc3NoYy0+cXVvdGVfaXRlbSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0dFVElORk8pOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVDoKKyAgICAgIHNmdHBfcXVvdGVfc3RhdChjb25uKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUOgorICAgICAgcmMgPSBzZnRwX3NldHN0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzKTsKKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBzZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAvKiBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cF9lcnJvcl90b19DVVJMRShlcnIpOworICAgICAgICAgKiB3ZSBkbyBub3Qgc2VuZCB0aGUgYWN0dWFsIGVycm9yOyB3ZSByZXR1cm4KKyAgICAgICAgICogdGhlIGVycm9yIHRoZSBsaWJzc2gyIGJhY2tlbmQgaXMgcmV0dXJuaW5nICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1lNTElOSzoKKyAgICAgIHJjID0gc2Z0cF9zeW1saW5rKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInN5bWxpbmsgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX01LRElSOgorICAgICAgcmMgPSBzZnRwX21rZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCisgICAgICAgICAgICAgICAgICAgICAgKG1vZGVfdClkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAibWtkaXIgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JFTkFNRToKKyAgICAgIHJjID0gc2Z0cF9yZW5hbWUoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIGZhaWxmKGRhdGEsICJyZW5hbWUgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JNRElSOgorICAgICAgcmMgPSBzZnRwX3JtZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJtZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9VTkxJTks6CisgICAgICByYyA9IHNmdHBfdW5saW5rKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJtIGNvbW1hbmQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTOgorICAgIHsKKyAgICAgIHNmdHBfc3RhdHZmc190IHN0YXR2ZnM7CisKKyAgICAgIHN0YXR2ZnMgPSBzZnRwX3N0YXR2ZnMoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBpZighc3RhdHZmcyAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInN0YXR2ZnMgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc3RhdHZmcykgeworICAgICAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCJzdGF0dmZzOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2JzaXplOiAlbGx1XG4iICJmX2Zyc2l6ZTogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2Jsb2NrczogJWxsdVxuIiAiZl9iZnJlZTogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2JhdmFpbDogJWxsdVxuIiAiZl9maWxlczogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2ZmcmVlOiAlbGx1XG4iICJmX2ZhdmFpbDogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2ZzaWQ6ICVsbHVcbiIgImZfZmxhZzogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX25hbWVtYXg6ICVsbHVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9ic2l6ZSwgc3RhdHZmcy0+Zl9mcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9ibG9ja3MsIHN0YXR2ZnMtPmZfYmZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9iYXZhaWwsIHN0YXR2ZnMtPmZfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9mZnJlZSwgc3RhdHZmcy0+Zl9mYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9mc2lkLCBzdGF0dmZzLT5mX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9uYW1lbWF4KTsKKyAgICAgICAgc2Z0cF9zdGF0dmZzX2ZyZWUoc3RhdHZmcyk7CisKKyAgICAgICAgaWYoIXRtcCkgeworICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICB9CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU1NIX1NGVFBfR0VUSU5GTzoKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0ZJTEVUSU1FOgorICAgIHsKKyAgICAgIHNmdHBfYXR0cmlidXRlcyBhdHRyczsKKworICAgICAgYXR0cnMgPSBzZnRwX3N0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgpOworICAgICAgaWYoYXR0cnMgIT0gMCkgeworICAgICAgICBkYXRhLT5pbmZvLmZpbGV0aW1lID0gYXR0cnMtPm10aW1lOworICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShhdHRycyk7CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9UUkFOU19JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmKHByb3RvcC0+cGF0aFtzdHJsZW4ocHJvdG9wLT5wYXRoKS0xXSA9PSAnLycpCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9JTklUKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1VQTE9BRF9JTklUOgorICAgIHsKKyAgICAgIGludCBmbGFnczsKKworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gIT0gMCkgeworICAgICAgICBzZnRwX2F0dHJpYnV0ZXMgYXR0cnM7CisKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7CisgICAgICAgICAgYXR0cnMgPSBzZnRwX3N0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgpOworICAgICAgICAgIGlmKGF0dHJzICE9IDApIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLT5zaXplOworICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKKyAgICAgICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gYXR0cnMtPnNpemU7CisKKyAgICAgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKGF0dHJzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5mdHBfYXBwZW5kKQorICAgICAgICAvKiBUcnkgdG8gb3BlbiBmb3IgYXBwZW5kLCBidXQgY3JlYXRlIGlmIG5vbmV4aXN0aW5nICovCisgICAgICAgIGZsYWdzID0gT19XUk9OTFl8T19DUkVBVHxPX0FQUEVORDsKKyAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKQorICAgICAgICAvKiBJZiB3ZSBoYXZlIHJlc3RhcnQgcG9zaXRpb24gdGhlbiBvcGVuIGZvciBhcHBlbmQgKi8KKyAgICAgICAgZmxhZ3MgPSBPX1dST05MWXxPX0FQUEVORDsKKyAgICAgIGVsc2UKKyAgICAgICAgLyogQ2xlYXIgZmlsZSBiZWZvcmUgd3JpdGluZyAobm9ybWFsIGJlaGF2aW91cikgKi8KKyAgICAgICAgZmxhZ3MgPSBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkM7CisKKyAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkKKyAgICAgICAgc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2ZpbGUpOworICAgICAgc3NoYy0+c2Z0cF9maWxlID0KKyAgICAgICAgc2Z0cF9vcGVuKHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAorICAgICAgICAgICAgICAgICAgZmxhZ3MsIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2ZpbGUpIHsKKyAgICAgICAgZXJyID0gc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKworICAgICAgICBpZigoKGVyciA9PSBTU0hfRlhfTk9fU1VDSF9GSUxFIHx8IGVyciA9PSBTU0hfRlhfRkFJTFVSRSB8fAorICAgICAgICAgICAgIGVyciA9PSBTU0hfRlhfTk9fU1VDSF9QQVRIKSkgJiYKKyAgICAgICAgICAgICAoZGF0YS0+c2V0LmZ0cF9jcmVhdGVfbWlzc2luZ19kaXJzICYmCisgICAgICAgICAgICAgKHN0cmxlbihwcm90b3AtPnBhdGgpID4gMSkpKSB7CisgICAgICAgICAgICAgICAvKiB0cnkgdG8gY3JlYXRlIHRoZSBwYXRoIHJlbW90ZWx5ICovCisgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMTsKKyAgICAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlc3RhcnQgcG9pbnQgdGhlbiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGNvcnJlY3QKKyAgICAgICAgIHBvc2l0aW9uLiAqLworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKSB7CisgICAgICAgIC8qIExldCdzIHJlYWQgb2ZmIHRoZSBwcm9wZXIgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGlucHV0LiAqLworICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKKyAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KKyAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgorICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkID0KKyAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuZnJlYWRfZnVuYyhkYXRhLT5zdGF0ZS5idWZmZXIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csIGRhdGEtPnN0YXRlLmluKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gd2hpbGUocGFzc2VkIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93LCBkZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVhZCAqLworICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgeworICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgLT0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICByYyA9IHNmdHBfc2VlazY0KHNzaGMtPnNmdHBfZmlsZSwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgICBpZihyYyAhPSAwKSB7CisgICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPiAwKSB7CisgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKKyAgICAgIH0KKyAgICAgIC8qIHVwbG9hZCBkYXRhICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIEZJUlNUU09DS0VUKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKKworICAgICAgLyogc3RvcmUgdGhpcyBvcmlnaW5hbCBiaXRtYXNrIHNldHVwIHRvIHVzZSBsYXRlciBvbiBpZiB3ZSBjYW4ndAorICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCisgICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOworCisgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3NlbmRpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHNmdHAgc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKKworICAgICAgLyogc2luY2Ugd2UgZG9uJ3QgcmVhbGx5IHdhaXQgZm9yIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdGhlCisgICAgICAgICBzdGF0ZSBtYWNoaW5lIHRvIG1vdmUgb24gYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBzZXQgYSB2ZXJ5IHNob3J0CisgICAgICAgICB0aW1lb3V0IGhlcmUgKi8KKyAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUOgorICAgICAgaWYoc3RybGVuKHByb3RvcC0+cGF0aCkgPiAxKSB7CisgICAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHByb3RvcC0+cGF0aCArIDE7IC8qIGlnbm9yZSB0aGUgbGVhZGluZyAnLycgKi8KKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSUzoKKyAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHN0cmNocihzc2hjLT5zbGFzaF9wb3MsICcvJyk7CisgICAgICBpZihzc2hjLT5zbGFzaF9wb3MpIHsKKyAgICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9IDA7CisKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNyZWF0aW5nIGRpcmVjdG9yeSAnJXMnXG4iLCBwcm90b3AtPnBhdGgpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSOgorICAgICAgLyogJ21vZGUnIC0gcGFyYW1ldGVyIGlzIHByZWxpbWluYXJ5IC0gZGVmYXVsdCB0byAwNjQ0ICovCisgICAgICByYyA9IHNmdHBfbWtkaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgKG1vZGVfdClkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gJy8nOworICAgICAgKytzc2hjLT5zbGFzaF9wb3M7CisgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQWJvcnQgaWYgZmFpbHVyZSB3YXNuJ3QgdGhhdCB0aGUgZGlyIGFscmVhZHkgZXhpc3RzIG9yIHRoZQorICAgICAgICAgKiBwZXJtaXNzaW9uIHdhcyBkZW5pZWQgKGNyZWF0aW9uIG1pZ2h0IHN1Y2NlZWQgZnVydGhlciBkb3duIHRoZQorICAgICAgICAgKiBwYXRoKSAtIHJldHJ5IG9uIHVuc3BlY2lmaWMgRkFJTFVSRSBhbHNvCisgICAgICAgICAqLworICAgICAgICBlcnIgPSBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBpZigoZXJyICE9IFNTSF9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTKSAmJgorICAgICAgICAgICAoZXJyICE9IFNTSF9GWF9GQUlMVVJFKSAmJgorICAgICAgICAgICAoZXJyICE9IFNTSF9GWF9QRVJNSVNTSU9OX0RFTklFRCkpIHsKKyAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgICAgfQorICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfSU5JVDoKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQorICAgICAgICogbGlzdGluZworICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX2RpciA9IHNmdHBfb3BlbmRpcihzc2hjLT5zZnRwX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3AtPnBhdGgpOworICAgICAgaWYoIXNzaGMtPnNmdHBfZGlyKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVI6CisKKyAgICAgIGlmKHNzaGMtPnJlYWRkaXJfYXR0cnMpCisgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKHNzaGMtPnJlYWRkaXJfYXR0cnMpOworCisgICAgICBzc2hjLT5yZWFkZGlyX2F0dHJzID0gc2Z0cF9yZWFkZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+c2Z0cF9kaXIpOworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9hdHRycykgeworICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gc3NoYy0+cmVhZGRpcl9hdHRycy0+bmFtZTsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9sb25nZW50cnkgPSBzc2hjLT5yZWFkZGlyX2F0dHJzLT5sb25nbmFtZTsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSBzdHJsZW4oc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisKKyAgICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9saXN0X29ubHkpIHsKKyAgICAgICAgICBjaGFyICp0bXBMaW5lOworCisgICAgICAgICAgdG1wTGluZSA9IGFwcmludGYoIiVzXG4iLCBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgICBpZih0bXBMaW5lID09IE5VTEwpIHsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wTGluZSwgc3NoYy0+cmVhZGRpcl9sZW4gKyAxKTsKKyAgICAgICAgICBmcmVlKHRtcExpbmUpOworCisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2luY2UgdGhpcyBjb3VudHMgd2hhdCB3ZSBzZW5kIHRvIHRoZSBjbGllbnQsIHdlIGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgbmV3bGluZSBpbiB0aGlzIGNvdW50ZXIgKi8KKyAgICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfbGVuICsgMTsKKworICAgICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiA9IDgwICsgc3NoYy0+cmVhZGRpcl9jdXJyTGVuOworICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IGNhbGxvYyhzc2hjLT5yZWFkZGlyX3RvdGFsTGVuLCAxKTsKKyAgICAgICAgICBpZighc3NoYy0+cmVhZGRpcl9saW5lKSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIG1lbWNweShzc2hjLT5yZWFkZGlyX2xpbmUsIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5LAorICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOworICAgICAgICAgIGlmKChzc2hjLT5yZWFkZGlyX2F0dHJzLT5mbGFncyAmIFNTSF9GSUxFWEZFUl9BVFRSX1BFUk1JU1NJT05TKSAmJgorICAgICAgICAgICAgICgoc3NoYy0+cmVhZGRpcl9hdHRycy0+cGVybWlzc2lvbnMgJiBTX0lGTVQpID09CisgICAgICAgICAgICAgIFNfSUZMTkspKSB7CisgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmtQYXRoID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICAgICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoLCBQQVRIX01BWCwgIiVzJXMiLCBwcm90b3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfTElOSyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKHNmdHBfZGlyX2VvZihzc2hjLT5zZnRwX2RpcikpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9ET05FKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfTElOSzoKKyAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycykKKyAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKTsKKworICAgICAgc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID0gc2Z0cF9sc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID09IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgIH0KKworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBzZnRwX3JlYWRsaW5rKHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOworICAgICAgICBpZihzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSBzdHJsZW4oc3NoYy0+cmVhZGRpcl90bXApOworICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IE5VTEw7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX3RtcDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWUpOworICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5uYW1lOworICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IHNzaGMtPnJlYWRkaXJfbGlua19hdHRycy0+bG9uZ25hbWU7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7CisKKyAgICAgIC8qIGdldCByb29tIGZvciB0aGUgZmlsZW5hbWUgYW5kIGV4dHJhIG91dHB1dCAqLworICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiArPSA0ICsgc3NoYy0+cmVhZGRpcl9sZW47CisgICAgICBuZXdfcmVhZGRpcl9saW5lID0gQ3VybF9zYWZlcmVhbGxvYyhzc2hjLT5yZWFkZGlyX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuKTsKKyAgICAgIGlmKCFuZXdfcmVhZGRpcl9saW5lKSB7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gbmV3X3JlYWRkaXJfbGluZTsKKworICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKworICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKTsKKyAgICAgIHNzaGMtPnJlYWRkaXJfbGlua19hdHRycyA9IE5VTEw7CisgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NOgorICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sICJcbiIpOworICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7CisKKyAgICAgIGlmKCFyZXN1bHQpIHsKKworICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9saW5lLAorICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKKyAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHNzaGMtPnJlYWRkaXJfdG1wKTsKKyAgICAgIHNzaGMtPnJlYWRkaXJfdG1wID0gTlVMTDsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9ET05FOgorICAgICAgc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2Rpcik7CisgICAgICBzc2hjLT5zZnRwX2RpciA9IE5VTEw7CisKKyAgICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQ6CisgICAgICAvKgorICAgICAgICogV29yayBvbiBnZXR0aW5nIHRoZSBzcGVjaWZpZWQgZmlsZQorICAgICAgICovCisgICAgICBpZihzc2hjLT5zZnRwX2ZpbGUpCisgICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKKworICAgICAgc3NoYy0+c2Z0cF9maWxlID0gc2Z0cF9vcGVuKHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9fUkRPTkxZLCAobW9kZV90KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7CisgICAgICBpZighc3NoYy0+c2Z0cF9maWxlKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisKKyAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQ6CisgICAgeworICAgICAgc2Z0cF9hdHRyaWJ1dGVzIGF0dHJzOworICAgICAgY3VybF9vZmZfdCBzaXplOworCisgICAgICBhdHRycyA9IHNmdHBfZnN0YXQoc3NoYy0+c2Z0cF9maWxlKTsKKyAgICAgIGlmKCFhdHRycyB8fAorICAgICAgICAgICAgICAhKGF0dHJzLT5mbGFncyAmIFNTSF9GSUxFWEZFUl9BVFRSX1NJWkUpIHx8CisgICAgICAgICAgICAgIChhdHRycy0+c2l6ZSA9PSAwKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBzZnRwX2ZzdGF0IGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKKyAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCisgICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQorICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAorICAgICAgICAgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICAgIHNpemUgPSAwOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHNpemUgPSBhdHRycy0+c2l6ZTsKKworICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShhdHRycyk7CisKKyAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICB9CisgICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgeworICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87CisgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgIGNoYXIgKnB0cjI7CisgICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKKyAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7CisKKyAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKKyAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpIHsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9SQU5HRV9FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKKyAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKSB7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLworICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgeworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbV90KSB7CisgICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGZyb20gPiB0bykgeworICAgICAgICAgICAgZnJvbSA9IHRvOworICAgICAgICAgICAgc2l6ZSA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2l6ZSA9IHRvIC0gZnJvbSArIDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmMgPSBzZnRwX3NlZWs2NChzc2hjLT5zZnRwX2ZpbGUsIGZyb20pOworICAgICAgICAgIGlmKHJjICE9IDApIHsKKyAgICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKyAgICAgIH0KKworICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KKyAgICAgICAgICBpZigoY3VybF9vZmZfdClzaXplIDwgLWRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIKKyAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGRvd25sb2FkIGZyb20gd2hlcmU/ICovCisgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKz0gc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZigoY3VybF9vZmZfdClzaXplIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKKyAgICAgICAgICAgICAgICAgICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBOb3cgc3RvcmUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBhcmUgZXhwZWN0ZWQgdG8gZG93bmxvYWQgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworCisgICAgICAgIHJjID0gc2Z0cF9zZWVrNjQoc3NoYy0+c2Z0cF9maWxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICAgIGlmKHJjICE9IDApIHsKKyAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KKyAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7CisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOworCisgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47CisKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyOyB0aGUgY2xvc2Ugc3RhdGUgc2hvdWxkIGJlIGVudGVyZWQKKyAgICAgICAgIGF0IHRoZSB0aW1lIHRoZSBlcnJvciBvY2N1cnMgKi8KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgc3NoYy0+c2Z0cF9yZWN2X3N0YXRlID0gMDsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c2Z0cF9maWxlKSB7CisgICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKKyAgICAgICAgc3NoYy0+c2Z0cF9maWxlID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUocHJvdG9wLT5wYXRoKTsKKworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTRlRQIERPTkUgZG9uZVxuIikpOworCisgICAgICAvKiBDaGVjayBpZiBuZXh0c3RhdGUgaXMgc2V0IGFuZCBtb3ZlIC5uZXh0c3RhdGUgY291bGQgYmUgUE9TVFFVT1RFX0lOSVQKKyAgICAgICAgIEFmdGVyIG5leHRzdGF0ZSBpcyBleGVjdXRlZCwgdGhlIGNvbnRyb2wgc2hvdWxkIGNvbWUgYmFjayB0bworICAgICAgICAgU1NIX1NGVFBfQ0xPU0UgdG8gcGFzcyB0aGUgY29ycmVjdCByZXN1bHQgYmFjayAgKi8KKyAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUgJiYKKyAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfU0ZUUF9DTE9TRSkgeworICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9DTE9TRTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfU0hVVERPV046CisgICAgICAvKiBkdXJpbmcgdGltZXMgd2UgZ2V0IGhlcmUgZHVlIHRvIGEgYnJva2VuIHRyYW5zZmVyIGFuZCB0aGVuIHRoZQorICAgICAgICAgc2Z0cF9oYW5kbGUgbWlnaHQgbm90IGhhdmUgYmVlbiB0YWtlbiBkb3duIHNvIG1ha2Ugc3VyZSB0aGF0IGlzIGRvbmUKKyAgICAgICAgIGJlZm9yZSB3ZSBwcm9jZWVkICovCisKKyAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkgeworICAgICAgICBzZnRwX2Nsb3NlKHNzaGMtPnNmdHBfZmlsZSk7CisgICAgICAgIHNzaGMtPnNmdHBfZmlsZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmKHNzaGMtPnNmdHBfc2Vzc2lvbikgeworICAgICAgICBzZnRwX2ZyZWUoc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgU1NIX1NUUklOR19GUkVFX0NIQVIoc3NoYy0+aG9tZWRpcik7CisgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7CisgICAgICBicmVhazsKKworCisgICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6CisgICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZwcm90b3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qIEZ1bmN0aW9ucyBmcm9tIHRoZSBTQ1Agc3Vic3lzdGVtIGNhbm5vdCBoYW5kbGUvcmV0dXJuIFNTSF9BR0FJTiAqLworICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMSk7CisKKyAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU0NQIHJlcXVpcmVzIGEga25vd24gZmlsZSBzaXplIGZvciB1cGxvYWQiKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1VQTE9BRF9GQUlMRUQpOworICAgICAgICB9CisKKyAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPQorICAgICAgICAgIHNzaF9zY3BfbmV3KHNzaGMtPnNzaF9zZXNzaW9uLCBTU0hfU0NQX1dSSVRFLCBwcm90b3AtPnBhdGgpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzc2hjLT5zY3Bfc2Vzc2lvbiA9CisgICAgICAgICAgc3NoX3NjcF9uZXcoc3NoYy0+c3NoX3Nlc3Npb24sIFNTSF9TQ1BfUkVBRCwgcHJvdG9wLT5wYXRoKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET1dOTE9BRF9JTklUKTsKKyAgICAgIH0KKworICAgICAgaWYoIXNzaGMtPnNjcF9zZXNzaW9uKSB7CisgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfVVBMT0FEX0ZBSUxFRCk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1VQTE9BRF9JTklUOgorCisgICAgICByYyA9IHNzaF9zY3BfaW5pdChzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKKyAgICAgIH0KKworICAgICAgcmMgPSBzc2hfc2NwX3B1c2hfZmlsZShzc2hjLT5zY3Bfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7CisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKKyAgICAgIH0KKworICAgICAgLyogdXBsb2FkIGRhdGEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0CisgICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KKyAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggc2NwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKKworICAgICAgcmMgPSBzc2hfc2NwX2luaXQoc3NoYy0+c2NwX3Nlc3Npb24pOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9XTkxPQUQpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgU1NIX1NDUF9ET1dOTE9BRDp7CisgICAgICAgIGN1cmxfb2ZmX3QgYnl0ZWNvdW50OworCisgICAgICAgIHJjID0gc3NoX3NjcF9wdWxsX3JlcXVlc3Qoc3NoYy0+c2NwX3Nlc3Npb24pOworICAgICAgICBpZihyYyAhPSBTU0hfU0NQX1JFUVVFU1RfTkVXRklMRSkgeworICAgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBkb3dubG9hZCBkYXRhICovCisgICAgICAgIGJ5dGVjb3VudCA9IHNzaF9zY3BfcmVxdWVzdF9nZXRfc2l6ZShzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IChjdXJsX29mZl90KSBieXRlY291bnQ7CisgICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIGJ5dGVjb3VudCwgRkFMU0UsIC0xKTsKKworICAgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7CisKKyAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBjYXNlIFNTSF9TQ1BfRE9ORToKKyAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfU0VORF9FT0YpOworICAgICAgZWxzZQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9TRU5EX0VPRjoKKyAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7CisgICAgICAgIHJjID0gc3NoX3NjcF9jbG9zZShzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICAgIGlmKHJjID09IFNTSF9BR0FJTikgeworICAgICAgICAgIC8qIEN1cnJlbnRseSB0aGUgc3NoX3NjcF9jbG9zZSBoYW5kbGVzIHdhaXRpbmcgZm9yIEVPRiBpbgorICAgICAgICAgICAqIGJsb2NraW5nIHdheS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaCBzY3AgY2hhbm5lbDogJXNcbiIsCisgICAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX0NIQU5ORUxfRlJFRToKKyAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7CisgICAgICAgIHNzaF9zY3BfZnJlZShzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICAgIHNzaGMtPnNjcF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU0NQIERPTkUgcGhhc2UgY29tcGxldGVcbiIpKTsKKworICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMCk7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgU1NIX1NFU1NJT05fRElTQ09OTkVDVDoKKyAgICAgIC8qIGR1cmluZyB3ZWlyZCB0aW1lcyB3aGVuIHdlJ3ZlIGJlZW4gcHJlbWF0dXJlbHkgYWJvcnRlZCwgdGhlIGNoYW5uZWwKKyAgICAgICAgIGlzIHN0aWxsIGFsaXZlIHdoZW4gd2UgcmVhY2ggdGhpcyBzdGF0ZSBhbmQgd2UgTVVTVCBraWxsIHRoZSBjaGFubmVsCisgICAgICAgICBwcm9wZXJseSBmaXJzdCAqLworICAgICAgaWYoc3NoYy0+c2NwX3Nlc3Npb24pIHsKKyAgICAgICAgc3NoX3NjcF9mcmVlKHNzaGMtPnNjcF9zZXNzaW9uKTsKKyAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorCisgICAgICBzc2hfZGlzY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisKKyAgICAgIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHNzaGMtPmhvbWVkaXIpOworICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6CisgICAgICBpZihzc2hjLT5zc2hfc2Vzc2lvbikgeworICAgICAgICBzc2hfZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIHNzaGMtPnNzaF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgLyogd29yc3QtY2FzZSBzY2VuYXJpbyBjbGVhbnVwICovCisKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9zZXNzaW9uID09IE5VTEwpOworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2NwX3Nlc3Npb24gPT0gTlVMTCk7CisKKyAgICAgIGlmKHNzaGMtPnJlYWRkaXJfdG1wKSB7CisgICAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHNzaGMtPnJlYWRkaXJfdG1wKTsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBOVUxMOworICAgICAgfQorCisgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycykKKyAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cXVvdGVfYXR0cnMpOworCisgICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKQorICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2F0dHJzKTsKKworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKQorICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOworCisgICAgICBpZihzc2hjLT5wcml2a2V5KQorICAgICAgICBzc2hfa2V5X2ZyZWUoc3NoYy0+cHJpdmtleSk7CisgICAgICBpZihzc2hjLT5wdWJrZXkpCisgICAgICAgIHNzaF9rZXlfZnJlZShzc2hjLT5wdWJrZXkpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7CisgICAgICBTU0hfU1RSSU5HX0ZSRUVfQ0hBUihzc2hjLT5ob21lZGlyKTsKKworICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKworICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKKworICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7CisgICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7ICAgLyogY3VycmVudCAqLworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9RVUlUOgorICAgICAgLyogZmFsbHRocm91Z2gsIGp1c3Qgc3RvcCEgKi8KKyAgICBkZWZhdWx0OgorICAgICAgLyogaW50ZXJuYWwgZXJyb3IgKi8KKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgfQorICB9IHdoaWxlKCFyYyAmJiAoc3NoYy0+c3RhdGUgIT0gU1NIX1NUT1ApKTsKKworCisgIGlmKHJjID09IFNTSF9BR0FJTikgeworICAgIC8qIHdlIHdvdWxkIGJsb2NrLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgcmVhZHkgKGluIHRoZQorICAgICAgIHJpZ2h0IGRpcmVjdGlvbiB0b28pISAqLworICAgICpibG9jayA9IFRSVUU7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykgdG8gd2FpdCBmb3IgYW5kCisgICBmb3Igd2hhdCBhY3Rpb25zIGluIHRoZSBET19ET05FLCBQRVJGT1JNIGFuZCBXQUlUUEVSRk9STSBzdGF0ZXMgKi8KK3N0YXRpYyBpbnQgbXlzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCit7CisgIGludCBiaXRtYXAgPSBHRVRTT0NLX0JMQU5LOworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7Cit9CisKKy8qIEdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKQorICAgdG8gd2FpdCBmb3IgYW5kIGZvciB3aGF0IGFjdGlvbnMgZHVyaW5nIHRoZSBET0lORyBhbmQgUFJPVE9DT05ORUNUIHN0YXRlcyovCitzdGF0aWMgaW50IG15c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCit7CisgIC8qIGlmIHdlIGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpIGZ1bmN0aW9uIGV2ZW4KKyAgICAgZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KKyAgcmV0dXJuIG15c3NoX3BlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXlzc2hfYmxvY2syd2FpdGZvcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgYmxvY2spCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgIC8qIElmIGl0IGRpZG4ndCBibG9jaywgb3Igbm90aGluZyB3YXMgcmV0dXJuZWQgYnkgc3NoX2dldF9wb2xsX2ZsYWdzCisgICAqIGhhdmUgdGhlIG9yaWdpbmFsIHNldCAqLworICBjb25uLT53YWl0Zm9yID0gc3NoYy0+b3JpZ193YWl0Zm9yOworCisgIGlmKGJsb2NrKSB7CisgICAgaW50IGRpciA9IHNzaF9nZXRfcG9sbF9mbGFncyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgaWYoZGlyICYgU1NIX1JFQURfUEVORElORykgeworICAgICAgLyogdHJhbnNsYXRlIHRoZSBsaWJzc2ggZGVmaW5lIGJpdHMgaW50byBvdXIgb3duIGJpdCBkZWZpbmVzICovCisgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgIH0KKyAgICBlbHNlIGlmKGRpciAmIFNTSF9XUklURV9QRU5ESU5HKSB7CisgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgIH0KKyAgfQorfQorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIG15c3NoX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBib29sIGJsb2NrOyAgICAvKiB3ZSBzdG9yZSB0aGUgc3RhdHVzIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIGEgc3NoX2dldHNvY2soKQorICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAqLworICBDVVJMY29kZSByZXN1bHQgPSBteXNzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7CisKKyAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOworICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIGJsb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfYmxvY2tfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaXNjb25uZWN0KQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgeworICAgIGJvb2wgYmxvY2s7CisgICAgdGltZWRpZmZfdCBsZWZ0ID0gMTAwMDsKKyAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKworICAgIHJlc3VsdCA9IG15c3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKCFkaXNjb25uZWN0KSB7CisgICAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCisgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgICAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGxlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIEZBTFNFKTsKKyAgICAgIGlmKGxlZnQgPCAwKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0Iik7CisgICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYoYmxvY2spIHsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfcmVhZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgICAgLyogd2FpdCBmb3IgdGhlIHNvY2tldCB0byBiZWNvbWUgcmVhZHkgKi8KKyAgICAgICh2b2lkKSBDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9TT0NLRVRfQkFELCBsZWZ0ID4gMTAwMCA/IDEwMDAgOiBsZWZ0KTsKKyAgICB9CisKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgY29ubmVjdGlvbgorICovCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTU0hQUk9UTyAqc3NoOworCisgIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOworICBpZighc3NoKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIEN1cmxfcmVjdiBzY3BfcmVjdiwgc2Z0cF9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBzY3Bfc2VuZCwgc2Z0cF9zZW5kOworCisvKgorICogQ3VybF9zc2hfY29ubmVjdCgpIGdldHMgY2FsbGVkIGZyb20gQ3VybF9wcm90b2NvbF9jb25uZWN0KCkgdG8gYWxsb3cgdXMgdG8KKyAqIGRvIHByb3RvY29sLXNwZWNpZmljIGFjdGlvbnMgYXQgY29ubmVjdC10aW1lLgorICovCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoOworICBDVVJMY29kZSByZXN1bHQ7CisgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgaW50IHJjOworCisgIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmKCFkYXRhLT5yZXEucHJvdG9wKQorICAgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oY29ubik7CisKKyAgLyogV2UgZGVmYXVsdCB0byBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiBXZSBzZXQgdGhpcyBhbHJlYWR5IGluIHRoaXMgY29ubmVjdAorICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCisgIGNvbm5rZWVwKGNvbm4sICJTU0ggZGVmYXVsdCIpOworCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgeworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2NwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzY3Bfc2VuZDsKKyAgfQorICBlbHNlIHsKKyAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNmdHBfcmVjdjsKKyAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNmdHBfc2VuZDsKKyAgfQorCisgIHNzaCA9ICZjb25uLT5wcm90by5zc2hjOworCisgIHNzaC0+c3NoX3Nlc3Npb24gPSBzc2hfbmV3KCk7CisgIGlmKHNzaC0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpc2luZyBzc2ggc2Vzc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIHJjID0gc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsIGNvbm4tPmhvc3QubmFtZSk7CisgIGlmKHJjICE9IFNTSF9PSykgeworICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IHJlbW90ZSBob3N0Iik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgcmMgPSBzc2hfb3B0aW9uc19wYXJzZV9jb25maWcoc3NoLT5zc2hfc2Vzc2lvbiwgTlVMTCk7CisgIGlmKHJjICE9IFNTSF9PSykgeworICAgIGluZm9mKGRhdGEsICJDb3VsZCBub3QgcGFyc2UgU1NIIGNvbmZpZ3VyYXRpb24gZmlsZXMiKTsKKyAgICAvKiBpZ25vcmUgKi8KKyAgfQorCisgIHJjID0gc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0ZELCAmc29jayk7CisgIGlmKHJjICE9IFNTSF9PSykgeworICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IHNvY2tldCIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIGlmKGNvbm4tPnVzZXIgJiYgY29ubi0+dXNlclswXSAhPSAnXDAnKSB7CisgICAgaW5mb2YoZGF0YSwgIlVzZXI6ICVzXG4iLCBjb25uLT51c2VyKTsKKyAgICByYyA9IHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19VU0VSLCBjb25uLT51c2VyKTsKKyAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IHVzZXIiKTsKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICB9CisgIH0KKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pIHsKKyAgICBpbmZvZihkYXRhLCAiS25vd24gaG9zdHM6ICVzXG4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgIHJjID0gc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0tOT1dOSE9TVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKKyAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IGtub3duIGhvc3RzIGZpbGUgcGF0aCIpOworICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIH0KKyAgfQorCisgIGlmKGNvbm4tPnJlbW90ZV9wb3J0KSB7CisgICAgcmMgPSBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+cmVtb3RlX3BvcnQpOworICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZXQgcmVtb3RlIHBvcnQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICB9CisgIH0KKworICBpZihkYXRhLT5zZXQuc3NoX2NvbXByZXNzaW9uKSB7CisgICAgcmMgPSBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfQ09NUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgInpsaWIsemxpYkBvcGVuc3NoLmNvbSxub25lIik7CisgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHNldCBjb21wcmVzc2lvbiIpOworICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIH0KKyAgfQorCisgIHNzaC0+cHJpdmtleSA9IE5VTEw7CisgIHNzaC0+cHVia2V5ID0gTlVMTDsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0pIHsKKyAgICByYyA9IHNzaF9wa2lfaW1wb3J0X3B1YmtleV9maWxlKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2gtPnB1YmtleSk7CisgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IGxvYWQgcHVibGljIGtleSBmaWxlIik7CisgICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgfQorICB9CisKKyAgLyogd2UgZG8gbm90IHZlcmlmeSBoZXJlLCB3ZSBkbyBpdCBhdCB0aGUgc3RhdGUgbWFjaGluZSwKKyAgICogYWZ0ZXIgY29ubmVjdGlvbiAqLworCisgIHN0YXRlKGNvbm4sIFNTSF9JTklUKTsKKworICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9uZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworCisgIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNjcF9wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNDUC4gR2V0IGEgZmlsZSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBzY3BfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICAqZG9waGFzZV9kb25lID0gRkFMU0U7ICAgICAgICAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NDUF9UUkFOU19JTklUKTsKKworICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKworICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKKworICBpZigqZG9waGFzZV9kb25lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIG15c3NoX2RvX2l0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIGNvbm5lY3RlZCA9IDA7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICAqZG9uZSA9IEZBTFNFOyAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisKKyAgZGF0YS0+cmVxLnNpemUgPSAtMTsgICAgICAgICAgLyogbWFrZSBzdXJlIHRoaXMgaXMgdW5rbm93biBhdCB0aGlzIHBvaW50ICovCisKKyAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOyAgLyogcmVzZXQgZXJyb3IgY29kZSAqLworICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMDsgICAvKiByZXNldCB0aGUgY3JlYXRlIGRpciBhdHRlbXB0IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICovCisKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIC0xKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKKworICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TQ1ApCisgICAgcmVzdWx0ID0gc2NwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgZG9uZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBzZnRwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgZG9uZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQkxPQ0tJTkcsIGJ1dCB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIHN0YXRlIG1hY2hpbmUgc28gdGhlIG9ubHkgcmVhc29uCisgICB0aGlzIGlzIHN0aWxsIGJsb2NraW5nIGlzIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjb2RlIGhhcyBubyBzdXBwb3J0IGZvcgorICAgZGlzY29ubmVjdGluZyBvcGVyYXRpb25zIHRoYXQgdGFrZXMgYSB3aGlsZSAqLworc3RhdGljIENVUkxjb2RlIHNjcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7CisgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CisKKyAgaWYoc3NoLT5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKworICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOworCisgICAgcmVzdWx0ID0gbXlzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIFRSVUUpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZ2VuZXJpYyBkb25lIGZ1bmN0aW9uIGZvciBib3RoIFNDUCBhbmQgU0ZUUCBjYWxsZWQgZnJvbSB0aGVpciBzcGVjaWZpYworICAgZG9uZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNTSFBST1RPICpwcm90b3AgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgICByZXN1bHQgPSBteXNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgRkFMU0UpOworICB9CisgIGVsc2UKKyAgICByZXN1bHQgPSBzdGF0dXM7CisKKyAgaWYocHJvdG9wKQorICAgIEN1cmxfc2FmZWZyZWUocHJvdG9wLT5wYXRoKTsKKyAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgICAvKiBjbGVhciBhbGwgYml0cyAqLworICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBDVVJMY29kZSBzY3BfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKK3sKKyAgKHZvaWQpIHByZW1hdHVyZTsgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KKworICBpZighc3RhdHVzKQorICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9ORSk7CisKKyAgcmV0dXJuIG15c3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKKworfQorCitzdGF0aWMgc3NpemVfdCBzY3Bfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIGludCByYzsKKyAgKHZvaWQpIHNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KKyAgKHZvaWQpIGVycjsKKworICByYyA9IHNzaF9zY3Bfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zY3Bfc2Vzc2lvbiwgbWVtLCBsZW4pOworCisjaWYgMAorICAvKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgbWlzbGVhZGluZywgbW9zdGx5IGFkZGVkIGFzIHdpc2hmdWwgdGhpbmtpbmcKKyAgICogdGhhdCBsaWJzc2ggYXQgc29tZSBwb2ludCB3aWxsIGltcGxlbWVudCBub24tYmxvY2tpbmcgc3NoX3NjcF93cml0ZS9yZWFkLgorICAgKiBDdXJyZW50bHkgcmMgY2FuIG9ubHkgYmUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgU1NIX0VSUk9SLiAqLworICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChyYyA9PSBTU0hfQUdBSU4pID8gVFJVRSA6IEZBTFNFKTsKKworICBpZihyYyA9PSBTU0hfQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZQorI2VuZGlmCisgIGlmKHJjICE9IFNTSF9PSykgeworICAgICplcnIgPSBDVVJMRV9TU0g7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc2NwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG5yZWFkOworICAodm9pZCkgZXJyOworICAodm9pZCkgc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworCisgIC8qIGxpYnNzaCByZXR1cm5zIGludCAqLworICBucmVhZCA9IHNzaF9zY3BfcmVhZChjb25uLT5wcm90by5zc2hjLnNjcF9zZXNzaW9uLCBtZW0sIGxlbik7CisKKyNpZiAwCisgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBtaXNsZWFkaW5nLCBtb3N0bHkgYWRkZWQgYXMgd2lzaGZ1bCB0aGlua2luZworICAgKiB0aGF0IGxpYnNzaCBhdCBzb21lIHBvaW50IHdpbGwgaW1wbGVtZW50IG5vbi1ibG9ja2luZyBzc2hfc2NwX3dyaXRlL3JlYWQuCisgICAqIEN1cnJlbnRseSByYyBjYW4gb25seSBiZSBTU0hfT0sgb3IgU1NIX0VSUk9SLiAqLworCisgIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG5yZWFkID09IFNTSF9BR0FJTikgPyBUUlVFIDogRkFMU0UpOworICBpZihucmVhZCA9PSBTU0hfQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIG5yZWFkOworfQorCisvKgorICogPT09PT09PT09PT09PT09IFNGVFAgPT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmdHBfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTRlRQLiBHZXQgYSBmaWxlL2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworICBpZigqZG9waGFzZV9kb25lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgorICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKKyAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gbXlzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIFRSVUUpOworICB9CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBpcyBkb25lXG4iKSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICBpZighc3RhdHVzKSB7CisgICAgLyogUG9zdCBxdW90ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIFNGVFBfQ0xPU0Ugc3RhdGUgdG8gYXZvaWQKKyAgICAgICBlcnJvcnMgdGhhdCBjb3VsZCBoYXBwZW4gZHVlIHRvIG9wZW4gZmlsZSBoYW5kbGVzIGR1cmluZyBQT1NUUVVPVEUKKyAgICAgICBvcGVyYXRpb24gKi8KKyAgICBpZighcHJlbWF0dXJlICYmIGNvbm4tPmRhdGEtPnNldC5wb3N0cXVvdGUgJiYgIWNvbm4tPmJpdHMucmV0cnkpCisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDsKKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgIH0KKyAgcmV0dXJuIG15c3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGU7CisgICh2b2lkKXNvY2tpbmRleDsKKworICBud3JpdGUgPSBzZnRwX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlLCBtZW0sIGxlbik7CisKKyAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCBGQUxTRSk7CisKKyNpZiAwIC8qIG5vdCByZXR1cm5lZCBieSBsaWJzc2ggb24gd3JpdGUgKi8KKyAgaWYobndyaXRlID09IFNTSF9BR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBud3JpdGUgPSAwOworICB9CisgIGVsc2UKKyNlbmRpZgorICBpZihud3JpdGUgPCAwKSB7CisgICAgKmVyciA9IENVUkxFX1NTSDsKKyAgICBud3JpdGUgPSAtMTsKKyAgfQorCisgIHJldHVybiBud3JpdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gbnVtYmVyIG9mIHJlY2VpdmVkIChkZWNyeXB0ZWQpIGJ5dGVzCisgKiBvciA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBucmVhZDsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIERFQlVHQVNTRVJUKGxlbiA8IENVUkxfTUFYX1JFQURfU0laRSk7CisKKyAgc3dpdGNoKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9yZWN2X3N0YXRlKSB7CisgICAgY2FzZSAwOgorICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGVfaW5kZXggPQorICAgICAgICAgICAgc2Z0cF9hc3luY19yZWFkX2JlZ2luKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClsZW4pOworICAgICAgaWYoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGVfaW5kZXggPCAwKSB7CisgICAgICAgICplcnIgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAxOgorICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX3JlY3Zfc3RhdGUgPSAxOworCisgICAgICBucmVhZCA9IHNmdHBfYXN5bmNfcmVhZChjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSwgKHVpbnQzMl90KWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlX2luZGV4KTsKKworICAgICAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gU1NIX0FHQUlOKT9UUlVFOkZBTFNFKTsKKworICAgICAgaWYobnJlYWQgPT0gU1NIX0FHQUlOKSB7CisgICAgICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgICAgZWxzZSBpZihucmVhZCA8IDApIHsKKyAgICAgICAgKmVyciA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKworICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX3JlY3Zfc3RhdGUgPSAwOworICAgICAgcmV0dXJuIG5yZWFkOworCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIHdlIG5ldmVyIHJlYWNoIGhlcmUgKi8KKyAgICAgIHJldHVybiAtMTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBzZnRwX3F1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY29uc3QgY2hhciAqY3A7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgU1NIUFJPVE8gKnByb3RvcCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgLyoKKyAgICogU3VwcG9ydCBzb21lIG9mIHRoZSAiRlRQIiBjb21tYW5kcworICAgKi8KKyAgY2hhciAqY21kID0gc3NoYy0+cXVvdGVfaXRlbS0+ZGF0YTsKKyAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgIC8qIGlmIGEgY29tbWFuZCBzdGFydHMgd2l0aCBhbiBhc3Rlcmlzaywgd2hpY2ggYSBsZWdhbCBTRlRQIGNvbW1hbmQgbmV2ZXIKKyAgICAgY2FuLCB0aGUgY29tbWFuZCB3aWxsIGJlIGFsbG93ZWQgdG8gZmFpbCB3aXRob3V0IGl0IGNhdXNpbmcgYW55CisgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICBpcyBzdWNjZXNzZnVsLCB3aGF0ZXZlciB0aGUgc2VydmVyIHJlcG9uZHMuICovCisKKyAgaWYoY21kWzBdID09ICcqJykgeworICAgIGNtZCsrOworICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBUUlVFOworICB9CisKKyAgaWYoc3RyY2FzZWNvbXBhcmUoInB3ZCIsIGNtZCkpIHsKKyAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgY2hhciAqdG1wID0gYXByaW50ZigiMjU3IFwiJXNcIiBpcyBjdXJyZW50IGRpcmVjdG9yeS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3AtPnBhdGgpOworICAgIGlmKCF0bXApIHsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfT1VULCAoY2hhciAqKSAiUFdEXG4iLCA0KTsKKyAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICB9CisgICAgLyogdGhpcyBzZW5kcyBhbiBGVFAtbGlrZSAiaGVhZGVyIiB0byB0aGUgaGVhZGVyIGNhbGxiYWNrIHNvIHRoYXQgdGhlCisgICAgICAgY3VycmVudCBkaXJlY3RvcnkgY2FuIGJlIHJlYWQgdmVyeSBzaW1pbGFyIHRvIGhvdyBpdCBpcyByZWFkIHdoZW4KKyAgICAgICB1c2luZyBvcmRpbmFyeSBGVFAuICovCisgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICBmcmVlKHRtcCk7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgIH0KKyAgICBlbHNlCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKgorICAgKiB0aGUgYXJndW1lbnRzIGZvbGxvd2luZyB0aGUgY29tbWFuZCBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQorICAgKiBjb21tYW5kIHdpdGggYSBzcGFjZSBzbyB3ZSBjYW4gY2hlY2sgZm9yIGl0IHVuY29uZGl0aW9uYWxseQorICAgKi8KKyAgY3AgPSBzdHJjaHIoY21kLCAnICcpOworICBpZihjcCA9PSBOVUxMKSB7CisgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBTRlRQIGNvbW1hbmQuIFN1cHBseSBwYXJhbWV0ZXIocykhIik7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgcmV0dXJuOworICB9CisKKyAgLyoKKyAgICogYWxzbywgZXZlcnkgY29tbWFuZCB0YWtlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQgc28gd2UgZ2V0IHRoYXQKKyAgICogZmlyc3QgYXJndW1lbnQgcmlnaHQgbm93CisgICAqLworICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMSwgc3NoYy0+aG9tZWRpcik7CisgIGlmKHJlc3VsdCkgeworICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICBlbHNlCisgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBCYWQgZmlyc3QgcGFyYW1ldGVyIik7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgIHJldHVybjsKKyAgfQorCisgIC8qCisgICAqIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wsIHNvIHdlIGRvbid0IHNlbmQgdGV4dCBjb21tYW5kcworICAgKiB0byB0aGUgc2VydmVyLiBJbnN0ZWFkLCB3ZSBzY2FuIGZvciBjb21tYW5kcyB1c2VkIGJ5CisgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaAorICAgKiBmdW5jdGlvbnMuCisgICAqLworICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAgIiwgNikgfHwKKyAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kICIsIDYpIHx8CisgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG93biAiLCA2KSkgeworICAgIC8qIGF0dHJpYnV0ZSBjaGFuZ2UgKi8KKworICAgIC8qIHNzaGMtPnF1b3RlX3BhdGgxIGNvbnRhaW5zIHRoZSBtb2RlIHRvIHNldCAqLworICAgIC8qIGdldCB0aGUgZGVzdGluYXRpb24gKi8KKyAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBjaGdycC9jaG1vZC9jaG93bjogIgorICAgICAgICAgICAgICAiQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3NoYy0+cXVvdGVfYXR0cnMgPSBOVUxMOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVQpOworICAgIHJldHVybjsKKyAgfQorICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibG4gIiwgMykgfHwKKyAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgInN5bWxpbmsgIiwgOCkpIHsKKyAgICAvKiBzeW1ib2xpYyBsaW5raW5nICovCisgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgaXMgdGhlIHNvdXJjZSAqLworICAgIC8qIGdldCB0aGUgZGVzdGluYXRpb24gKi8KKyAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBsbi9zeW1saW5rOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LKTsKKyAgICByZXR1cm47CisgIH0KKyAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibWtkaXIgIiwgNikpIHsKKyAgICAvKiBjcmVhdGUgZGlyICovCisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfTUtESVIpOworICAgIHJldHVybjsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJyZW5hbWUgIiwgNykpIHsKKyAgICAvKiByZW5hbWUgZmlsZSAqLworICAgIC8qIGZpcnN0IHBhcmFtIGlzIHRoZSBzb3VyY2UgcGF0aCAqLworICAgIC8qIHNlY29uZCBwYXJhbSBpcyB0aGUgZGVzdC4gcGF0aCAqLworICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgZWxzZQorICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIHJlbmFtZTogQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUkVOQU1FKTsKKyAgICByZXR1cm47CisgIH0KKyAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm1kaXIgIiwgNikpIHsKKyAgICAvKiBkZWxldGUgZGlyICovCisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUk1ESVIpOworICAgIHJldHVybjsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybSAiLCAzKSkgeworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1VOTElOSyk7CisgICAgcmV0dXJuOworICB9CisjaWZkZWYgSEFTX1NUQVRWRlNfU1VQUE9SVAorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJzdGF0dmZzICIsIDgpKSB7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyk7CisgICAgcmV0dXJuOworICB9CisjZW5kaWYKKworICBmYWlsZihkYXRhLCAiVW5rbm93biBTRlRQIGNvbW1hbmQiKTsKKyAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworfQorCitzdGF0aWMgdm9pZCBzZnRwX3F1b3RlX3N0YXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIGNoYXIgKmNtZCA9IHNzaGMtPnF1b3RlX2l0ZW0tPmRhdGE7CisgIHNzaGMtPmFjY2VwdGZhaWwgPSBGQUxTRTsKKworICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCisgICAgIGNhbiwgdGhlIGNvbW1hbmQgd2lsbCBiZSBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dCBpdCBjYXVzaW5nIGFueQorICAgICBhYm9ydHMgb3IgY2FuY2VscyBldGMuIEl0IHdpbGwgY2F1c2UgbGliY3VybCB0byBhY3QgYXMgaWYgdGhlIGNvbW1hbmQKKyAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLworCisgIGlmKGNtZFswXSA9PSAnKicpIHsKKyAgICBjbWQrKzsKKyAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKKyAgfQorCisgIC8qIFdlIHJlYWQgdGhlIGZpbGUgYXR0cmlidXRlcywgc3RvcmUgdGhlbSBpbiBzc2hjLT5xdW90ZV9hdHRycworICAgKiBhbmQgbW9kaWZ5IHRoZW0gYWNjb3JkaW5nbHkgdG8gY29tbWFuZC4gVGhlbiB3ZSBzd2l0Y2ggdG8KKyAgICogUVVPVEVfU0VUU1RBVCBzdGF0ZSB0byB3cml0ZSBuZXcgb25lcy4KKyAgICovCisKKyAgaWYoc3NoYy0+cXVvdGVfYXR0cnMpCisgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cXVvdGVfYXR0cnMpOworICBzc2hjLT5xdW90ZV9hdHRycyA9IHNmdHBfc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgaWYoc3NoYy0+cXVvdGVfYXR0cnMgPT0gTlVMTCkgeworICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgIGZhaWxmKGRhdGEsICJBdHRlbXB0IHRvIGdldCBTRlRQIHN0YXRzIGZhaWxlZDogJWQiLAorICAgICAgICAgIHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbikpOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgIHJldHVybjsKKyAgfQorCisgIC8qIE5vdyBzZXQgdGhlIG5ldyBhdHRyaWJ1dGVzLi4uICovCisgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCIsIDUpKSB7CisgICAgc3NoYy0+cXVvdGVfYXR0cnMtPmdpZCA9ICh1aW50MzJfdClzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMtPmdpZCA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSAmJgorICAgICAgICAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNoZ3JwIGdpZCBub3QgYSBudW1iZXIiKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3NoYy0+cXVvdGVfYXR0cnMtPmZsYWdzIHw9IFNTSF9GSUxFWEZFUl9BVFRSX1VJREdJRDsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCIsIDUpKSB7CisgICAgbW9kZV90IHBlcm1zOworICAgIHBlcm1zID0gKG1vZGVfdClzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCA4KTsKKyAgICAvKiBwZXJtaXNzaW9ucyBhcmUgb2N0YWwgKi8KKyAgICBpZihwZXJtcyA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSkgeworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNobW9kIHBlcm1pc3Npb25zIG5vdCBhIG51bWJlciIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzc2hjLT5xdW90ZV9hdHRycy0+cGVybWlzc2lvbnMgPSBwZXJtczsKKyAgICBzc2hjLT5xdW90ZV9hdHRycy0+ZmxhZ3MgfD0gU1NIX0ZJTEVYRkVSX0FUVFJfUEVSTUlTU0lPTlM7CisgIH0KKyAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24iLCA1KSkgeworICAgIHNzaGMtPnF1b3RlX2F0dHJzLT51aWQgPSAodWludDMyX3Qpc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgMTApOworICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLT51aWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKKyAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG93biB1aWQgbm90IGEgbnVtYmVyIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5mbGFncyB8PSBTU0hfRklMRVhGRVJfQVRUUl9VSURHSUQ7CisgIH0KKworICAvKiBOb3cgc2VuZCB0aGUgY29tcGxldGVkIHN0cnVjdHVyZS4uLiAqLworICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUKTsKKyAgcmV0dXJuOworfQorCitDVVJMY29kZSBDdXJsX3NzaF9pbml0KHZvaWQpCit7CisgIGlmKHNzaF9pbml0KCkpIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoX2luaXQgZmFpbGVkXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKwordm9pZCBDdXJsX3NzaF9jbGVhbnVwKHZvaWQpCit7CisgICh2b2lkKXNzaF9maW5hbGl6ZSgpOworfQorCitzaXplX3QgQ3VybF9zc2hfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBidWZsZW4sICJsaWJzc2gvJXMiLCBDVVJMX0xJQlNTSF9WRVJTSU9OKTsKK30KKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0VfTElCU1NIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL2xpYnNzaDIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWFmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL2xpYnNzaDIuYwpAQCAtMCwwICsxLDM0OTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogI2RlZmluZSBDVVJMX0xJQlNTSDJfREVCVUcgKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9MSUJTU0gyCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPGxpYnNzaDIuaD4KKyNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVFNOQU1FX0gKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKKyN1bmRlZiBpbl9hZGRyX3QKKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAic3BlZWRjaGVjay5oIgorI2luY2x1ZGUgImdldGluZm8uaCIKKyNpbmNsdWRlICJzdHJkdXAuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCisjaW5jbHVkZSAidnRscy92dGxzLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmVycm9yLmgiCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiIC8qIGZvciB0aGUgd2VlayBkYXkgYW5kIG1vbnRoIG5hbWVzICovCisjaW5jbHVkZSAic29ja2FkZHIuaCIgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgImN1cmxfcGF0aC5oIgorCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA2CisvKiBsaWJzc2gyX3NmdHBfc3RhdHZmcyBhbmQgZnJpZW5kcyB3ZXJlIGFkZGVkIGluIDEuMi42ICovCisjZGVmaW5lIEhBU19TVEFUVkZTX1NVUFBPUlQgMQorI2VuZGlmCisKKyNkZWZpbmUgc2Z0cF9saWJzc2gyX3JlYWxwYXRoKHMscCx0LG0pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KChzKSwgKHApLCBjdXJseF91enRvdWkoc3RybGVuKHApKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAodCksIChtKSwgTElCU1NIMl9TRlRQX1JFQUxQQVRIKQorCisvKiBMb2NhbCBmdW5jdGlvbnM6ICovCitzdGF0aWMgY29uc3QgY2hhciAqc2Z0cF9saWJzc2gyX3N0cmVycm9yKHVuc2lnbmVkIGxvbmcgZXJyKTsKK3N0YXRpYyBMSUJTU0gyX0FMTE9DX0ZVTkMobXlfbGlic3NoMl9tYWxsb2MpOworc3RhdGljIExJQlNTSDJfUkVBTExPQ19GVU5DKG15X2xpYnNzaDJfcmVhbGxvYyk7CitzdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKTsKKworc3RhdGljIENVUkxjb2RlIHNzaF9mb3JjZV9rbm93bmhvc3Rfa2V5X3R5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbik7CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIGludCBzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2spOworc3RhdGljIGludCBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisvKgorICogU0NQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwID0geworICAiU0NQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgc3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzY3BfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc2NwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgc3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2NwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NDUCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKworLyoKKyAqIFNGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwID0geworICAiU0ZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgc3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzZnRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc2Z0cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgc3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2Z0cF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NGVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKK3N0YXRpYyB2b2lkCitrYmRfY2FsbGJhY2soY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICppbnN0cnVjdGlvbiwKKyAgICAgICAgICAgICBpbnQgaW5zdHJ1Y3Rpb25fbGVuLCBpbnQgbnVtX3Byb21wdHMsCisgICAgICAgICAgICAgY29uc3QgTElCU1NIMl9VU0VSQVVUSF9LQkRJTlRfUFJPTVBUICpwcm9tcHRzLAorICAgICAgICAgICAgIExJQlNTSDJfVVNFUkFVVEhfS0JESU5UX1JFU1BPTlNFICpyZXNwb25zZXMsCisgICAgICAgICAgICAgdm9pZCAqKmFic3RyYWN0KQoreworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopKmFic3RyYWN0OworCisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGZwcmludGYoc3RkZXJyLCAibmFtZT0lc1xuIiwgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAibmFtZV9sZW49JWRcbiIsIG5hbWVfbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJpbnN0cnVjdGlvbj0lc1xuIiwgaW5zdHJ1Y3Rpb24pOworICBmcHJpbnRmKHN0ZGVyciwgImluc3RydWN0aW9uX2xlbj0lZFxuIiwgaW5zdHJ1Y3Rpb25fbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJudW1fcHJvbXB0cz0lZFxuIiwgbnVtX3Byb21wdHMpOworI2Vsc2UKKyAgKHZvaWQpbmFtZTsKKyAgKHZvaWQpbmFtZV9sZW47CisgICh2b2lkKWluc3RydWN0aW9uOworICAodm9pZClpbnN0cnVjdGlvbl9sZW47CisjZW5kaWYgIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworICBpZihudW1fcHJvbXB0cyA9PSAxKSB7CisgICAgcmVzcG9uc2VzWzBdLnRleHQgPSBzdHJkdXAoY29ubi0+cGFzc3dkKTsKKyAgICByZXNwb25zZXNbMF0ubGVuZ3RoID0gY3VybHhfdXp0b3VpKHN0cmxlbihjb25uLT5wYXNzd2QpKTsKKyAgfQorICAodm9pZClwcm9tcHRzOworICAodm9pZClhYnN0cmFjdDsKK30gLyoga2JkX2NhbGxiYWNrICovCisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUodW5zaWduZWQgbG9uZyBlcnIpCit7CisgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIExJQlNTSDJfRlhfT0s6CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9GSUxFOgorICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX1BBVEg6CisgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgorICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgorICAgIGNhc2UgTElCU1NIMl9GWF9MT0NLX0NPTkZsSUNUOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NQQUNFX09OX0ZJTEVTWVNURU06CisgICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9ESVNLX0ZVTEw7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKKyAgICAgIHJldHVybiBDVVJMRV9RVU9URV9FUlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBDVVJMRV9TU0g7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKK3sKKyAgc3dpdGNoKGVycikgeworICAgIC8qIE9yZGVyZWQgYnkgb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiBsaWJzc2gyLmggKi8KKyAgICBjYXNlIExJQlNTSDJfRVJST1JfTk9ORToKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIC8qIFRoaXMgaXMgdGhlIGVycm9yIHJldHVybmVkIGJ5IGxpYnNzaDJfc2NwX3JlY3YyCisgICAgICogb24gdW5rbm93biBmaWxlICovCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NDUF9QUk9UT0NPTDoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX05PTkU6CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0FMTE9DOgorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX1NFTkQ6CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9IT1NUS0VZX0lOSVQ6CisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0hPU1RLRVlfU0lHTjoKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOUkVDT0dOSVpFRDoKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOVkVSSUZJRUQ6CisgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1BBU1NXT1JEX0VYUElSRUQ6CisgICAgICByZXR1cm4gQ1VSTEVfTE9HSU5fREVOSUVEOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NPQ0tFVF9USU1FT1VUOgorICAgIGNhc2UgTElCU1NIMl9FUlJPUl9USU1FT1VUOgorICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9FQUdBSU46CisgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CisgIH0KKworICByZXR1cm4gQ1VSTEVfU1NIOworfQorCitzdGF0aWMgTElCU1NIMl9BTExPQ19GVU5DKG15X2xpYnNzaDJfbWFsbG9jKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIHJldHVybiBtYWxsb2MoY291bnQpOworfQorCitzdGF0aWMgTElCU1NIMl9SRUFMTE9DX0ZVTkMobXlfbGlic3NoMl9yZWFsbG9jKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIHJldHVybiByZWFsbG9jKHB0ciwgY291bnQpOworfQorCitzdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIGlmKHB0cikgLyogc3NoMiBhZ2VudCBzb21ldGltZXMgY2FsbCBmcmVlIHdpdGggbnVsbCBwdHIgKi8KKyAgICBmcmVlKHB0cik7Cit9CisKKy8qCisgKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKKyAqLworLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KK3N0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKKyAgICAiU1NIX1NUT1AiLAorICAgICJTU0hfSU5JVCIsCisgICAgIlNTSF9TX1NUQVJUVVAiLAorICAgICJTU0hfSE9TVEtFWSIsCisgICAgIlNTSF9BVVRITElTVCIsCisgICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BLRVkiLAorICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAorICAgICJTU0hfQVVUSF9QQVNTIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAorICAgICJTU0hfQVVUSF9BR0VOVCIsCisgICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCisgICAgIlNTSF9BVVRIX0hPU1QiLAorICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX0tFWSIsCisgICAgIlNTSF9BVVRIX0dTU0FQSSIsCisgICAgIlNTSF9BVVRIX0RPTkUiLAorICAgICJTU0hfU0ZUUF9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAorICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKKyAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9RVU9URSIsCisgICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCisgICAgIlNTSF9TRlRQX0dFVElORk8iLAorICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCisgICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAorICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUiIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAorICAgICJTU0hfU0ZUUF9DTE9TRSIsCisgICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKKyAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKKyAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAorICAgICJTU0hfU0NQX0RPTkUiLAorICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCisgICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCisgICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKKyAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCisgICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAorICAgICJRVUlUIgorICB9OworCisgIC8qIGEgcHJlY2F1dGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpc3RzIGFyZSBpbiBzeW5jICovCisgIERFQlVHQVNTRVJUKHNpemVvZihuYW1lcykvc2l6ZW9mKG5hbWVzWzBdKSA9PSBTU0hfTEFTVCk7CisKKyAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiU0ZUUCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlc1xuIiwKKyAgICAgICAgICAodm9pZCAqKXNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdKTsKKyAgfQorI2VuZGlmCisKKyAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKK30KKworCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKK3N0YXRpYyBpbnQgc3Noa2V5Y2FsbGJhY2soc3RydWN0IEN1cmxfZWFzeSAqZWFzeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfa2hrZXkgKmtub3dua2V5LCAvKiBrbm93biAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3VybF9raGtleSAqZm91bmRrZXksIC8qIGZvdW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gY3VybF9raG1hdGNoIG1hdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRwKQoreworICAodm9pZCllYXN5OworICAodm9pZClrbm93bmtleTsKKyAgKHZvaWQpZm91bmRrZXk7CisgICh2b2lkKWNsaWVudHA7CisKKyAgLyogd2Ugb25seSBhbGxvdyBwZXJmZWN0IG1hdGNoZXMsIGFuZCB3ZSByZWplY3QgZXZlcnl0aGluZyBlbHNlICovCisgIHJldHVybiAobWF0Y2ggIT0gQ1VSTEtITUFUQ0hfT0spP0NVUkxLSFNUQVRfUkVKRUNUOkNVUkxLSFNUQVRfRklORTsKK30KKyNlbmRpZgorCisvKgorICogRWFybGllciBsaWJzc2gyIHZlcnNpb25zIGRpZG4ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHNlZWsgdG8gNjRiaXQgcG9zaXRpb25zCisgKiB3aXRoIDMyYml0IHNpemVfdC4KKyAqLworI2lmZGVmIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NAorI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2VlazY0KHgsIChsaWJzc2gyX3VpbnQ2NF90KXkpCisjZWxzZQorI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2Vlayh4LCAoc2l6ZV90KXkpCisjZW5kaWYKKworLyoKKyAqIEVhcmxpZXIgbGlic3NoMiB2ZXJzaW9ucyBkaWRuJ3QgZG8gU0NQIHByb3Blcmx5IGJleW9uZCAzMmJpdCBzaXplcyBvbiAzMmJpdAorICogYXJjaGl0ZWN0dXJlcyBzbyB3ZSBjaGVjayBvZiB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uIGlzIHByZXNlbnQuCisgKi8KKyNpZm5kZWYgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQKKyNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZF9leChhLCBiLCAoaW50KShjKSwgKHNpemVfdClkLCAwLCAwKQorI2Vsc2UKKyNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZDY0KGEsIGIsIChpbnQpKGMpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaWJzc2gyX3VpbnQ2NF90KWQsIDAsIDApCisjZW5kaWYKKworLyoKKyAqIGxpYnNzaDIgMS4yLjggZml4ZWQgdGhlIHByb2JsZW0gd2l0aCAzMmJpdCBpbnRzIHVzZWQgZm9yIHNvY2tldHMgb24gd2luNjQuCisgKi8KKyNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9IQU5EU0hBS0UKKyNkZWZpbmUgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAoeCx5KSBsaWJzc2gyX3Nlc3Npb25faGFuZHNoYWtlKHgseSkKKyNlbmRpZgorCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2tub3duaG9zdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7CisgICAgLyogd2UncmUgYXNrZWQgdG8gdmVyaWZ5IHRoZSBob3N0IGFnYWluc3QgYSBmaWxlICovCisgICAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgICAgaW50IHJjOworICAgIGludCBrZXl0eXBlOworICAgIHNpemVfdCBrZXlsZW47CisgICAgY29uc3QgY2hhciAqcmVtb3Rla2V5ID0gbGlic3NoMl9zZXNzaW9uX2hvc3RrZXkoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWxlbiwgJmtleXR5cGUpOworICAgIGludCBrZXljaGVjayA9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX0ZBSUxVUkU7CisgICAgaW50IGtleWJpdCA9IDA7CisKKyAgICBpZihyZW1vdGVrZXkpIHsKKyAgICAgIC8qCisgICAgICAgKiBBIHN1YmplY3QgdG8gZmlndXJlIG91dCBpcyB3aGF0IGhvc3QgbmFtZSB3ZSBuZWVkIHRvIHBhc3MgaW4gaGVyZS4KKyAgICAgICAqIFdoYXQgaG9zdCBuYW1lIGRvZXMgT3BlblNTSCBzdG9yZSBpbiBpdHMgZmlsZSBpZiBhbiBJRE4gbmFtZSBpcworICAgICAgICogdXNlZD8KKyAgICAgICAqLworICAgICAgc3RydWN0IGxpYnNzaDJfa25vd25ob3N0ICpob3N0OworICAgICAgZW51bSBjdXJsX2tobWF0Y2gga2V5bWF0Y2g7CisgICAgICBjdXJsX3NzaGtleWNhbGxiYWNrIGZ1bmMgPQorICAgICAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM/ZGF0YS0+c2V0LnNzaF9rZXlmdW5jOnNzaGtleWNhbGxiYWNrOworICAgICAgc3RydWN0IGN1cmxfa2hrZXkga25vd25rZXk7CisgICAgICBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXlwID0gTlVMTDsKKyAgICAgIHN0cnVjdCBjdXJsX2toa2V5IGZvdW5ka2V5OworCisgICAgICBzd2l0Y2goa2V5dHlwZSkgeworICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0E6CisgICAgICAgIGtleWJpdCA9IExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hSU0E7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9EU1M6CisgICAgICAgIGtleWJpdCA9IExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hEU1M7CisgICAgICAgIGJyZWFrOworI2lmZGVmIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VDRFNBXzI1NgorICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9FQ0RTQV8yNTY6CisgICAgICAgIGtleWJpdCA9IExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV8yNTY7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUNEU0FfMzg0CisgICAgICBjYXNlIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VDRFNBXzM4NDoKKyAgICAgICAga2V5Yml0ID0gTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzM4NDsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBMSUJTU0gyX0hPU1RLRVlfVFlQRV9FQ0RTQV81MjEKKyAgICAgIGNhc2UgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUNEU0FfNTIxOgorICAgICAgICBrZXliaXQgPSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfNTIxOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VEMjU1MTkKKyAgICAgIGNhc2UgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUQyNTUxOToKKyAgICAgICAga2V5Yml0ID0gTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VEMjU1MTk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICBkZWZhdWx0OgorICAgICAgICBpbmZvZihkYXRhLCAidW5zdXBwb3J0ZWQga2V5IHR5cGUsIGNhbid0IGNoZWNrIGtub3duaG9zdHMhXG4iKTsKKyAgICAgICAga2V5Yml0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZigha2V5Yml0KQorICAgICAgICAvKiBubyBjaGVjayBtZWFucyBmYWlsdXJlISAqLworICAgICAgICByYyA9IENVUkxLSFNUQVRfUkVKRUNUOworICAgICAgZWxzZSB7CisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9DSEVDS1AKKyAgICAgICAga2V5Y2hlY2sgPSBsaWJzc2gyX2tub3duaG9zdF9jaGVja3Aoc3NoYy0+a2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbm4tPnJlbW90ZV9wb3J0ICE9IFBPUlRfU1NIKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cmVtb3RlX3BvcnQ6LTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9UWVBFX1BMQUlOfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0KTsKKyNlbHNlCisgICAgICAgIGtleWNoZWNrID0gbGlic3NoMl9rbm93bmhvc3RfY2hlY2soc3NoYy0+a2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfS0VZRU5DX1JBV3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QpOworI2VuZGlmCisKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNTSCBob3N0IGNoZWNrOiAlZCwga2V5OiAlc1xuIiwga2V5Y2hlY2ssCisgICAgICAgICAgICAgIChrZXljaGVjayA8PSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NSVNNQVRDSCk/CisgICAgICAgICAgICAgIGhvc3QtPmtleToiPG5vbmU+Iik7CisKKyAgICAgICAgLyogc2V0dXAgJ2tub3dua2V5JyAqLworICAgICAgICBpZihrZXljaGVjayA8PSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NSVNNQVRDSCkgeworICAgICAgICAgIGtub3dua2V5LmtleSA9IGhvc3QtPmtleTsKKyAgICAgICAgICBrbm93bmtleS5sZW4gPSAwOworICAgICAgICAgIGtub3dua2V5LmtleXR5cGUgPSAoa2V5dHlwZSA9PSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0EpPworICAgICAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKKyAgICAgICAgICBrbm93bmtleXAgPSAma25vd25rZXk7CisgICAgICAgIH0KKworICAgICAgICAvKiBzZXR1cCAnZm91bmRrZXknICovCisgICAgICAgIGZvdW5ka2V5LmtleSA9IHJlbW90ZWtleTsKKyAgICAgICAgZm91bmRrZXkubGVuID0ga2V5bGVuOworICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gKGtleXR5cGUgPT0gTElCU1NIMl9IT1NUS0VZX1RZUEVfUlNBKT8KKyAgICAgICAgICBDVVJMS0hUWVBFX1JTQSA6IENVUkxLSFRZUEVfRFNTOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIGFueSBvZiB0aGUgTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfKiBkZWZpbmVzIGFuZCB0aGUKKyAgICAgICAgICogY3VybF9raG1hdGNoIGVudW0gYXJlIGV2ZXIgbW9kaWZpZWQsIHdlIG5lZWQgdG8gaW50cm9kdWNlIGEKKyAgICAgICAgICogdHJhbnNsYXRpb24gdGFibGUgaGVyZSEKKyAgICAgICAgICovCisgICAgICAgIGtleW1hdGNoID0gKGVudW0gY3VybF9raG1hdGNoKWtleWNoZWNrOworCisgICAgICAgIC8qIEFzayB0aGUgY2FsbGJhY2sgaG93IHRvIGJlaGF2ZSAqLworICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgcmMgPSBmdW5jKGRhdGEsIGtub3dua2V5cCwgLyogZnJvbSB0aGUga25vd25ob3N0cyBmaWxlICovCisgICAgICAgICAgICAgICAgICAmZm91bmRrZXksIC8qIGZyb20gdGhlIHJlbW90ZSBob3N0ICovCisgICAgICAgICAgICAgICAgICBrZXltYXRjaCwgZGF0YS0+c2V0LnNzaF9rZXlmdW5jX3VzZXJwKTsKKyAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAvKiBubyByZW1vdGVrZXkgbWVhbnMgZmFpbHVyZSEgKi8KKyAgICAgIHJjID0gQ1VSTEtIU1RBVF9SRUpFQ1Q7CisKKyAgICBzd2l0Y2gocmMpIHsKKyAgICBkZWZhdWx0OiAvKiB1bmtub3duIHJldHVybiBjb2RlcyB3aWxsIGVxdWFsIHJlamVjdCAqLworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIENVUkxLSFNUQVRfUkVKRUNUOgorICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgQ1VSTEtIU1RBVF9ERUZFUjoKKyAgICAgIC8qIERFRkVSIG1lYW5zIGJhaWwgb3V0IGJ1dCBrZWVwIHRoZSBTU0hfSE9TVEtFWSBzdGF0ZSAqLworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FOgorICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFOgorICAgICAgLyogcHJvY2VlZCAqLworICAgICAgaWYoa2V5Y2hlY2sgIT0gTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfTUFUQ0gpIHsKKyAgICAgICAgLyogdGhlIGZvdW5kIGhvc3Qra2V5IGRpZG4ndCBtYXRjaCBidXQgaGFzIGJlZW4gdG9sZCB0byBiZSBmaW5lCisgICAgICAgICAgIGFueXdheSBzbyB3ZSBhZGQgaXQgaW4gbWVtb3J5ICovCisgICAgICAgIGludCBhZGRyYyA9IGxpYnNzaDJfa25vd25ob3N0X2FkZChzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfVFlQRV9QTEFJTnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0tFWUVOQ19SQVd8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsIE5VTEwpOworICAgICAgICBpZihhZGRyYykKKyAgICAgICAgICBpbmZvZihkYXRhLCAiV2FybmluZyBhZGRpbmcgdGhlIGtub3duIGhvc3QgJXMgZmFpbGVkIVxuIiwKKyAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUpOworICAgICAgICBlbHNlIGlmKHJjID09IENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRSkgeworICAgICAgICAgIC8qIG5vdyB3ZSB3cml0ZSB0aGUgZW50aXJlIGluLW1lbW9yeSBsaXN0IG9mIGtub3duIGhvc3RzIHRvIHRoZQorICAgICAgICAgICAgIGtub3duX2hvc3RzIGZpbGUgKi8KKyAgICAgICAgICBpbnQgd3JjID0KKyAgICAgICAgICAgIGxpYnNzaDJfa25vd25ob3N0X3dyaXRlZmlsZShzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfRklMRV9PUEVOU1NIKTsKKyAgICAgICAgICBpZih3cmMpIHsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJXYXJuaW5nLCB3cml0aW5nICVzIGZhaWxlZCFcbiIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZWxzZSAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLworICAodm9pZCljb25uOworI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBzc2hfY2hlY2tfZmluZ2VycHJpbnQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNvbnN0IGNoYXIgKnB1YmtleV9tZDUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV07CisgIGNoYXIgbWQ1YnVmZmVyWzMzXTsKKworICBjb25zdCBjaGFyICpmaW5nZXJwcmludCA9IGxpYnNzaDJfaG9zdGtleV9oYXNoKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgTElCU1NIMl9IT1NUS0VZX0hBU0hfTUQ1KTsKKworICBpZihmaW5nZXJwcmludCkgeworICAgIC8qIFRoZSBmaW5nZXJwcmludCBwb2ludHMgdG8gc3RhdGljIHN0b3JhZ2UgKCEpLCBkb24ndCBmcmVlKCkgaXQuICovCisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgIG1zbnByaW50ZigmbWQ1YnVmZmVyW2kqMl0sIDMsICIlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIGZpbmdlcnByaW50W2ldKTsKKyAgICBpbmZvZihkYXRhLCAiU1NIIE1ENSBmaW5nZXJwcmludDogJXNcbiIsIG1kNWJ1ZmZlcik7CisgIH0KKworICAvKiBCZWZvcmUgd2UgYXV0aGVudGljYXRlIHdlIGNoZWNrIHRoZSBob3N0a2V5J3MgTUQ1IGZpbmdlcnByaW50CisgICAqIGFnYWluc3QgYSBrbm93biBmaW5nZXJwcmludCwgaWYgYXZhaWxhYmxlLgorICAgKi8KKyAgaWYocHVia2V5X21kNSAmJiBzdHJsZW4ocHVia2V5X21kNSkgPT0gMzIpIHsKKyAgICBpZighZmluZ2VycHJpbnQgfHwgIXN0cmNhc2Vjb21wYXJlKG1kNWJ1ZmZlciwgcHVia2V5X21kNSkpIHsKKyAgICAgIGlmKGZpbmdlcnByaW50KQorICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkRlbmllZCBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb246IG1pc21hdGNoIG1kNSBmaW5nZXJwcmludC4gIgorICAgICAgICAgICAgIlJlbW90ZSAlcyBpcyBub3QgZXF1YWwgdG8gJXMiLCBtZDVidWZmZXIsIHB1YmtleV9tZDUpOworICAgICAgZWxzZQorICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkRlbmllZCBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb246IG1kNSBmaW5nZXJwcmludCBub3QgYXZhaWxhYmxlIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICByZXR1cm4gc3NoYy0+YWN0dWFsY29kZTsKKyAgICB9CisgICAgaW5mb2YoZGF0YSwgIk1ENSBjaGVja3N1bSBtYXRjaCFcbiIpOworICAgIC8qIGFzIHdlIGFscmVhZHkgbWF0Y2hlZCwgd2Ugc2tpcCB0aGUgY2hlY2sgZm9yIGtub3duIGhvc3RzICovCisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisgIHJldHVybiBzc2hfa25vd25ob3N0KGNvbm4pOworfQorCisvKgorICogc3NoX2ZvcmNlX2tub3duaG9zdF9rZXlfdHlwZSgpIHdpbGwgY2hlY2sgdGhlIGtub3duIGhvc3RzIGZpbGUgYW5kIHRyeSB0bworICogZm9yY2UgYSBzcGVjaWZpYyBwdWJsaWMga2V5IHR5cGUgZnJvbSB0aGUgc2VydmVyIGlmIGFuIGVudHJ5IGlzIGZvdW5kLgorICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2ZvcmNlX2tub3duaG9zdF9rZXlfdHlwZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKworI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FRDI1NTE5CisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGtleV9tZXRob2Rfc3NoX2VkMjU1MTkKKyAgICA9ICJzc2gtZWQyNTUxOSI7CisjZW5kaWYKKyNpZmRlZiBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfNTIxCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGtleV9tZXRob2Rfc3NoX2VjZHNhXzUyMQorICAgID0gImVjZHNhLXNoYTItbmlzdHA1MjEiOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzM4NAorICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV8zODQKKyAgICA9ICJlY2RzYS1zaGEyLW5pc3RwMzg0IjsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV8yNTYKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0a2V5X21ldGhvZF9zc2hfZWNkc2FfMjU2CisgICAgPSAiZWNkc2Etc2hhMi1uaXN0cDI1NiI7CisjZW5kaWYKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0a2V5X21ldGhvZF9zc2hfcnNhCisgICAgPSAic3NoLXJzYSI7CisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGtleV9tZXRob2Rfc3NoX2RzcworICAgID0gInNzaC1kc3MiOworCisgIGNvbnN0IGNoYXIgKmhvc3RrZXlfbWV0aG9kID0gTlVMTDsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgbGlic3NoMl9rbm93bmhvc3QqIHN0b3JlID0gTlVMTDsKKyAgY29uc3QgY2hhciAqa2hfbmFtZV9lbmQgPSBOVUxMOworICBzaXplX3Qga2hfbmFtZV9zaXplID0gMDsKKyAgaW50IHBvcnQgPSAwOworICBib29sIGZvdW5kID0gZmFsc2U7CisKKyAgaWYoc3NoYy0+a2ggJiYgIWRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSkgeworICAgIC8qIGxldHMgdHJ5IHRvIGZpbmQgb3VyIGhvc3QgaW4gdGhlIGtub3duIGhvc3RzIGZpbGUgKi8KKyAgICB3aGlsZSghbGlic3NoMl9rbm93bmhvc3RfZ2V0KHNzaGMtPmtoLCAmc3RvcmUsIHN0b3JlKSkgeworICAgICAgLyogRm9yIG5vbi1zdGFuZGFyZCBwb3J0cywgdGhlIG5hbWUgd2lsbCBiZSBlbmNsb3NlZCBpbiAqLworICAgICAgLyogc3F1YXJlIGJyYWNrZXRzLCBmb2xsb3dlZCBieSBhIGNvbG9uIGFuZCB0aGUgcG9ydCAqLworICAgICAgaWYoc3RvcmUpIHsKKyAgICAgICAgaWYoc3RvcmUtPm5hbWUpIHsKKyAgICAgICAgICBpZihzdG9yZS0+bmFtZVswXSA9PSAnWycpIHsKKyAgICAgICAgICAgIGtoX25hbWVfZW5kID0gc3Ryc3RyKHN0b3JlLT5uYW1lLCAiXToiKTsKKyAgICAgICAgICAgIGlmKCFraF9uYW1lX2VuZCkgeworICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiSW52YWxpZCBob3N0IHBhdHRlcm4gJXMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHN0b3JlLT5uYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcnQgPSBhdG9pKGtoX25hbWVfZW5kICsgMik7CisgICAgICAgICAgICBpZihraF9uYW1lX2VuZCAmJiAocG9ydCA9PSBjb25uLT5yZW1vdGVfcG9ydCkpIHsKKyAgICAgICAgICAgICAga2hfbmFtZV9zaXplID0gc3RybGVuKHN0b3JlLT5uYW1lKSAtIDEgLSBzdHJsZW4oa2hfbmFtZV9lbmQpOworICAgICAgICAgICAgICBpZihzdHJuY21wKHN0b3JlLT5uYW1lICsgMSwKKyAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBraF9uYW1lX3NpemUpID09IDApIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihzdHJjbXAoc3RvcmUtPm5hbWUsIGNvbm4tPmhvc3QubmFtZSkgPT0gMCkgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmKGZvdW5kKSB7CisgICAgICBpbmZvZihkYXRhLCAiRm91bmQgaG9zdCAlcyBpbiAlc1xuIiwKKyAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKKworICAgICAgc3dpdGNoKHN0b3JlLT50eXBlbWFzayAmIExJQlNTSDJfS05PV05IT1NUX0tFWV9NQVNLKSB7CisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VEMjU1MTkKKyAgICAgIGNhc2UgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VEMjU1MTk6CisgICAgICAgIGhvc3RrZXlfbWV0aG9kID0gaG9zdGtleV9tZXRob2Rfc3NoX2VkMjU1MTk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzUyMQorICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfNTIxOgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV81MjE7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzM4NAorICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfMzg0OgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV8zODQ7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzI1NgorICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfMjU2OgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV8yNTY7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hSU0E6CisgICAgICAgIGhvc3RrZXlfbWV0aG9kID0gaG9zdGtleV9tZXRob2Rfc3NoX3JzYTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hEU1M6CisgICAgICAgIGhvc3RrZXlfbWV0aG9kID0gaG9zdGtleV9tZXRob2Rfc3NoX2RzczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExJQlNTSDJfS05PV05IT1NUX0tFWV9SU0ExOgorICAgICAgICBmYWlsZihkYXRhLCAiRm91bmQgaG9zdCBrZXkgdHlwZSBSU0ExIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NIOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZmFpbGYoZGF0YSwgIlVua25vd24gaG9zdCBrZXkgdHlwZTogJWlcbiIsCisgICAgICAgICAgICAgIChzdG9yZS0+dHlwZW1hc2sgJiBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfTUFTSykpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NIOworICAgICAgfQorCisgICAgICBpbmZvZihkYXRhLCAiU2V0IFwiJXNcIiBhcyBTU0ggaG9zdGtleSB0eXBlXG4iLCBob3N0a2V5X21ldGhvZCk7CisgICAgICByZXN1bHQgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoCisgICAgICAgICAgbGlic3NoMl9zZXNzaW9uX21ldGhvZF9wcmVmKAorICAgICAgICAgICAgICBzc2hjLT5zc2hfc2Vzc2lvbiwgTElCU1NIMl9NRVRIT0RfSE9TVEtFWSwgaG9zdGtleV9tZXRob2QpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpbmZvZihkYXRhLCAiRGlkIG5vdCBmaW5kIGhvc3QgJXMgaW4gJXNcbiIsCisgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisgICAgfQorICB9CisKKyNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBzc2hfc3RhdGVtYWNoX2FjdCgpIHJ1bnMgdGhlIFNTSCBzdGF0ZSBtYWNoaW5lIGFzIGZhciBhcyBpdCBjYW4gd2l0aG91dAorICogYmxvY2tpbmcgYW5kIHdpdGhvdXQgcmVhY2hpbmcgdGhlIGVuZC4gIFRoZSBkYXRhIHRoZSBwb2ludGVyICdibG9jaycgcG9pbnRzCisgKiB0byB3aWxsIGJlIHNldCB0byBUUlVFIGlmIHRoZSBsaWJzc2gyIGZ1bmN0aW9uIHJldHVybnMgTElCU1NIMl9FUlJPUl9FQUdBSU4KKyAqIG1lYW5pbmcgaXQgd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQorICovCisKK3N0YXRpYyBDVVJMY29kZSBzc2hfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmJsb2NrKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBTU0hQUk9UTyAqc2Z0cF9zY3AgPSBkYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIGludCByYyA9IExJQlNTSDJfRVJST1JfTk9ORTsKKyAgaW50IHNzaGVycjsKKyAgdW5zaWduZWQgbG9uZyBzZnRwZXJyOworICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7CisgIHNpemVfdCByZWFkZGlyX2xlbjsKKyAgKmJsb2NrID0gMDsgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KKworICBkbyB7CisKKyAgICBzd2l0Y2goc3NoYy0+c3RhdGUpIHsKKyAgICBjYXNlIFNTSF9JTklUOgorICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7CisKKyAgICAgIC8qIFNldCBsaWJzc2gyIHRvIG5vbi1ibG9ja2luZywgc2luY2UgZXZlcnl0aGluZyBpbnRlcm5hbGx5IGlzCisgICAgICAgICBub24tYmxvY2tpbmcgKi8KKyAgICAgIGxpYnNzaDJfc2Vzc2lvbl9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDApOworCisgICAgICByZXN1bHQgPSBzc2hfZm9yY2Vfa25vd25ob3N0X2tleV90eXBlKGNvbm4pOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfU19TVEFSVFVQOgorICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMpIHsKKyAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogJWQsICVzIiwgcmMsIGVycl9tc2cpOworCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7CisKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfSE9TVEtFWToKKyAgICAgIC8qCisgICAgICAgKiBCZWZvcmUgd2UgYXV0aGVudGljYXRlIHdlIHNob3VsZCBjaGVjayB0aGUgaG9zdGtleSdzIGZpbmdlcnByaW50CisgICAgICAgKiBhZ2FpbnN0IG91ciBrbm93biBob3N0cy4gSG93IHRoYXQgaXMgaGFuZGxlZCAocmVhZGluZyBmcm9tIGZpbGUsCisgICAgICAgKiB3aGF0ZXZlcikgaXMgdXAgdG8gdXMuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdCA9IHNzaF9jaGVja19maW5nZXJwcmludChjb25uKTsKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7CisgICAgICAvKiBzc2hfY2hlY2tfZmluZ2VycHJpbnQgc2V0cyBzdGF0ZSBhcHByb3ByaWF0ZWx5IG9uIGVycm9yICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhMSVNUOgorICAgICAgLyoKKyAgICAgICAqIEZpZ3VyZSBvdXQgYXV0aGVudGljYXRpb24gbWV0aG9kcworICAgICAgICogTkI6IEFzIHNvb24gYXMgd2UgaGF2ZSBwcm92aWRlZCBhIHVzZXJuYW1lIHRvIGFuIG9wZW5zc2ggc2VydmVyIHdlCisgICAgICAgKiBtdXN0IG5ldmVyIGNoYW5nZSBpdCBsYXRlci4gVGh1cywgYWx3YXlzIHNwZWNpZnkgdGhlIGNvcnJlY3QgdXNlcm5hbWUKKyAgICAgICAqIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBsaWJzc2gyIGRvY3Mga2luZCBvZiBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBiZQorICAgICAgICogcG9zc2libGUgdG8gZ2V0IGEgJ2dlbmVyaWMnIGxpc3QgKG5vdCB1c2VyLXNwZWNpZmljKSBvZiBhdXRoZW50aWNhdGlvbgorICAgICAgICogbWV0aG9kcywgcHJlc3VtYWJseSB3aXRoIGEgYmxhbmsgdXNlcm5hbWUuIFRoYXQgd29uJ3Qgd29yayBpbiBteQorICAgICAgICogZXhwZXJpZW5jZS4KKyAgICAgICAqIFNvIGFsd2F5cyBzcGVjaWZ5IGl0IGhlcmUuCisgICAgICAgKi8KKyAgICAgIHNzaGMtPmF1dGhsaXN0ID0gbGlic3NoMl91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpKTsKKworICAgICAgaWYoIXNzaGMtPmF1dGhsaXN0KSB7CisgICAgICAgIGlmKGxpYnNzaDJfdXNlcmF1dGhfYXV0aGVudGljYXRlZChzc2hjLT5zc2hfc2Vzc2lvbikpIHsKKyAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICAgIGluZm9mKGRhdGEsICJTU0ggdXNlciBhY2NlcHRlZCB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzc2hlcnIgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKHNzaGVyciA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaGVycik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiU1NIIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXZhaWxhYmxlOiAlc1xuIiwKKyAgICAgICAgICAgIHNzaGMtPmF1dGhsaXN0KTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWV9JTklUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QS0VZX0lOSVQ6CisgICAgICAvKgorICAgICAgICogQ2hlY2sgdGhlIHN1cHBvcnRlZCBhdXRoIHR5cGVzIGluIHRoZSBvcmRlciBJIGZlZWwgaXMgbW9zdCBzZWN1cmUKKyAgICAgICAqIHdpdGggdGhlIHJlcXVlc3RlZCB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uCisgICAgICAgKi8KKyAgICAgIHNzaGMtPmF1dGhlZCA9IEZBTFNFOworCisgICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSkgJiYKKyAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJwdWJsaWNrZXkiKSAhPSBOVUxMKSkgeworICAgICAgICBib29sIG91dF9vZl9tZW1vcnkgPSBGQUxTRTsKKworICAgICAgICBzc2hjLT5yc2FfcHViID0gc3NoYy0+cnNhID0gTlVMTDsKKworICAgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKQorICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogVG8gcG9uZGVyIGFib3V0OiBzaG91bGQgcmVhbGx5IHRoZSBsaWIgYmUgbWVzc2luZyBhYm91dCB3aXRoIHRoZQorICAgICAgICAgICAgIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgZXRjPyAqLworICAgICAgICAgIGNoYXIgKmhvbWUgPSBjdXJsX2dldGVudigiSE9NRSIpOworCisgICAgICAgICAgLyogSWYgbm8gcHJpdmF0ZSBrZXkgZmlsZSBpcyBzcGVjaWZpZWQsIHRyeSBzb21lIGNvbW1vbiBwYXRocy4gKi8KKyAgICAgICAgICBpZihob21lKSB7CisgICAgICAgICAgICAvKiBUcnkgfi8uc3NoIGZpcnN0LiAqLworICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9yc2EiLCBob21lKTsKKyAgICAgICAgICAgIGlmKCFzc2hjLT5yc2EpCisgICAgICAgICAgICAgIG91dF9vZl9tZW1vcnkgPSBUUlVFOworICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKKyAgICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9kc2EiLCBob21lKTsKKyAgICAgICAgICAgICAgaWYoIXNzaGMtPnJzYSkKKyAgICAgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKKyAgICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlKGhvbWUpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZighb3V0X29mX21lbW9yeSAmJiAhc3NoYy0+cnNhKSB7CisgICAgICAgICAgICAvKiBOb3RoaW5nIGZvdW5kOyB0cnkgdGhlIGN1cnJlbnQgZGlyLiAqLworICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9yc2EiKTsKKyAgICAgICAgICAgIGlmKHNzaGMtPnJzYSAmJiBhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKKyAgICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9kc2EiKTsKKyAgICAgICAgICAgICAgaWYoc3NoYy0+cnNhICYmIGFjY2Vzcyhzc2hjLT5yc2EsIFJfT0spICE9IDApIHsKKyAgICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisgICAgICAgICAgICAgICAgLyogT3V0IG9mIGd1ZXNzZXMuIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgICogc3VycHJpc2luZyBpbmZvIG1lc3NhZ2VzLiAqLworICAgICAgICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cCgiIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBVbmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseSBzcGVjaWZpZXMgYSBwdWJsaWMga2V5IGZpbGUsIGxldAorICAgICAgICAgKiBsaWJzc2gyIGV4dHJhY3QgdGhlIHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXkgZmlsZS4KKyAgICAgICAgICogVGhpcyBpcyBkb25lIGJ5IHNpbXBseSBwYXNzaW5nIHNzaGMtPnJzYV9wdWIgPSBOVUxMLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldCisgICAgICAgICAgIC8qIHRyZWF0IGVtcHR5IHN0cmluZyB0aGUgc2FtZSB3YXkgYXMgTlVMTCAqLworICAgICAgICAgICAmJiBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV1bMF0pIHsKKyAgICAgICAgICBzc2hjLT5yc2FfcHViID0gc3RyZHVwKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSk7CisgICAgICAgICAgaWYoIXNzaGMtPnJzYV9wdWIpCisgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKG91dF9vZl9tZW1vcnkgfHwgc3NoYy0+cnNhID09IE5VTEwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2Q7CisgICAgICAgIGlmKCFzc2hjLT5wYXNzcGhyYXNlKQorICAgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSAiIjsKKworICAgICAgICBpZihzc2hjLT5yc2FfcHViKQorICAgICAgICAgIGluZm9mKGRhdGEsICJVc2luZyBTU0ggcHVibGljIGtleSBmaWxlICclcydcbiIsIHNzaGMtPnJzYV9wdWIpOworICAgICAgICBpbmZvZihkYXRhLCAiVXNpbmcgU1NIIHByaXZhdGUga2V5IGZpbGUgJyVzJ1xuIiwgc3NoYy0+cnNhKTsKKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX1BLRVk6CisgICAgICAvKiBUaGUgZnVuY3Rpb24gYmVsb3cgY2hlY2tzIGlmIHRoZSBmaWxlcyBleGlzdHMsIG5vIG5lZWQgdG8gc3RhdCgpIGhlcmUuCisgICAgICAgKi8KKyAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXlfZnJvbWZpbGVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2FfcHViLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2EsIHNzaGMtPnBhc3NwaHJhc2UpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisKKyAgICAgIGlmKHJjID09IDApIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkluaXRpYWxpemVkIFNTSCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgIGluZm9mKGRhdGEsICJTU0ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICVzXG4iLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKKyAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTX0lOSVQ6CisgICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BBU1NXT1JEKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgInBhc3N3b3JkIikgIT0gTlVMTCkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTUyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfSE9TVF9JTklUKTsKKyAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTOgorICAgICAgcmMgPSBsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3JkX2V4KHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfSE9TVF9JTklUOgorICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9IT1NUKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgImhvc3RiYXNlZCIpICE9IE5VTEwpKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1QpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0hPU1Q6CisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9BR0VOVF9JTklUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9BR0VOVF9JTklUOgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfQUdFTlQpCisgICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAicHVibGlja2V5IikgIT0gTlVMTCkpIHsKKworICAgICAgICAvKiBDb25uZWN0IHRvIHRoZSBzc2gtYWdlbnQgKi8KKyAgICAgICAgLyogVGhlIGFnZW50IGNvdWxkIGJlIHNoYXJlZCBieSBhIGN1cmwgdGhyZWFkIGkgYmVsaWV2ZQorICAgICAgICAgICBidXQgbm90aGluZyBvYnZpb3VzIGFzIGtleXMgY2FuIGJlIGFkZGVkL3JlbW92ZWQgYXQgYW55IHRpbWUgKi8KKyAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IGxpYnNzaDJfYWdlbnRfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNvdWxkIG5vdCBjcmVhdGUgYWdlbnQgb2JqZWN0XG4iKTsKKworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2Nvbm5lY3Qoc3NoYy0+c3NoX2FnZW50KTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsdXJlIGNvbm5lY3RpbmcgdG8gYWdlbnRcbiIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKKyAgICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0xJU1QpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogSEFWRV9MSUJTU0gyX0FHRU5UX0FQSSAqLworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfQUdFTlRfTElTVDoKKyNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCisgICAgICByYyA9IGxpYnNzaDJfYWdlbnRfbGlzdF9pZGVudGl0aWVzKHNzaGMtPnNzaF9hZ2VudCk7CisKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQorICAgICAgICBicmVhazsKKyAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfQUdFTlQpOworICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5ID0gTlVMTDsKKyAgICAgIH0KKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0FHRU5UOgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIC8qIGFzIHByZXZfaWRlbnRpdHkgZXZvbHZlcyBvbmx5IGFmdGVyIGFuIGlkZW50aXR5IHVzZXIgYXV0aCBmaW5pc2hlZCB3ZQorICAgICAgICAgY2FuIHNhZmVseSByZXF1ZXN0IGl0IGFnYWluIGFzIGxvbmcgYXMgRUFHQUlOIGlzIHJldHVybmVkIGhlcmUgb3IgYnkKKyAgICAgICAgIGxpYnNzaDJfYWdlbnRfdXNlcmF1dGggKi8KKyAgICAgIHJjID0gbGlic3NoMl9hZ2VudF9nZXRfaWRlbnRpdHkoc3NoYy0+c3NoX2FnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCisgICAgICAgIGJyZWFrOworCisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHJjID0gbGlic3NoMl9hZ2VudF91c2VyYXV0aChzc2hjLT5zc2hfYWdlbnQsIGNvbm4tPnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eSk7CisKKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgaWYocmMgIT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICAgIC8qIHRyaWVkIGFuZCBmYWlsZWQ/IGdvIHRvIG5leHQgaWRlbnRpdHkgKi8KKyAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkgPSBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYocmMgPCAwKQorICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOworICAgICAgZWxzZSBpZihyYyA9PSAxKQorICAgICAgICBpbmZvZihkYXRhLCAiTm8gaWRlbnRpdHkgd291bGQgbWF0Y2hcbiIpOworCisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkFnZW50IGJhc2VkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisjZW5kaWYKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9LRVlfSU5JVDoKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQpCisgICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAia2V5Ym9hcmQtaW50ZXJhY3RpdmUiKSAhPSBOVUxMKSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVkpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0tFWToKKyAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gQ29udGludWUgd2l0aCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBub3cuICovCisgICAgICByYyA9IGxpYnNzaDJfdXNlcmF1dGhfa2V5Ym9hcmRfaW50ZXJhY3RpdmVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrYmRfY2FsbGJhY2spOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9ET05FOgorICAgICAgaWYoIXNzaGMtPmF1dGhlZCkgeworICAgICAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbHVyZSIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gYXV0aGVudGljYXRlZCBzc2ggc2Vzc2lvbi4KKyAgICAgICAqLworICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlXG4iKTsKKworICAgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogU1NIIGlzIGNvbm5lY3RlZCAqLworCisgICAgICBjb25uLT5zb2NrZmQgPSBzb2NrOworICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19TRlRQKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFN0YXJ0IHRoZSBsaWJzc2gyIHNmdHAgc2Vzc2lvbgorICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBsaWJzc2gyX3NmdHBfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZighc3NoYy0+c2Z0cF9zZXNzaW9uKSB7CisgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFMUEFUSCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBTFBBVEg6CisgICAgeworICAgICAgY2hhciB0ZW1wSG9tZVtQQVRIX01BWF07CisKKyAgICAgIC8qCisgICAgICAgKiBHZXQgdGhlICJob21lIiBkaXJlY3RvcnkKKyAgICAgICAqLworICAgICAgcmMgPSBzZnRwX2xpYnNzaDJfcmVhbHBhdGgoc3NoYy0+c2Z0cF9zZXNzaW9uLCAiLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wSG9tZSwgUEFUSF9NQVgtMSk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjID4gMCkgeworICAgICAgICAvKiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RyaW5nIGlzIG5vdCBhbHdheXMgTlVMTCB0ZXJtaW5hdGVkICovCisgICAgICAgIHRlbXBIb21lW3JjXSA9ICdcMCc7CisgICAgICAgIHNzaGMtPmhvbWVkaXIgPSBzdHJkdXAodGVtcEhvbWUpOworICAgICAgICBpZighc3NoYy0+aG9tZWRpcikgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gc3NoYy0+aG9tZWRpcjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBSZXR1cm4gdGhlIGVycm9yIHR5cGUgKi8KKyAgICAgICAgc2Z0cGVyciA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIGlmKHNmdHBlcnIpCisgICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKHNmdHBlcnIpOworICAgICAgICBlbHNlCisgICAgICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgZXJyb3Igd2Fzbid0IGluIHRoZSBTRlRQIGxldmVsIGJ1dCBmb3IgZXhhbXBsZQorICAgICAgICAgICAgIGEgdGltZS1vdXQgb3Igc2ltaWxhciAqLworICAgICAgICAgIHJlc3VsdCA9IENVUkxFX1NTSDsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJlcnJvciA9ICVkIG1ha2VzIGxpYmN1cmwgPSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHNzaGVyciwgKGludClyZXN1bHQpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgLyogVGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBTRlRQIGNvbm5lY3QgcGhhc2UuIERvIG5vdGUgdGhhdCB3aGlsZQorICAgICAgIHdlIGdldCB0aGUgaG9tZWRpciBoZXJlLCB3ZSBnZXQgdGhlICJ3b3JraW5ncGF0aCIgaW4gdGhlIERPIGFjdGlvbgorICAgICAgIHNpbmNlIHRoZSBob21lZGlyIHdpbGwgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gcmVxdWVzdCBidXQgdGhlCisgICAgICAgd29ya2luZyBwYXRoIHdpbGwgbm90LiAqLworICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIikpOworICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfSU5JVDoKKworICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDoKKyAgICAgIGlmKGRhdGEtPnNldC5wb3N0cXVvdGUpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOworICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URToKKyAgICAgIC8qIFNlbmQgYW55IHF1b3RlIGNvbW1hbmRzICovCisgICAgeworICAgICAgY29uc3QgY2hhciAqY3A7CisKKyAgICAgIC8qCisgICAgICAgKiBTdXBwb3J0IHNvbWUgb2YgdGhlICJGVFAiIGNvbW1hbmRzCisgICAgICAgKgorICAgICAgICogJ3NzaGMtPnF1b3RlX2l0ZW0nIGlzIGFscmVhZHkgdmVyaWZpZWQgdG8gYmUgbm9uLU5VTEwgYmVmb3JlIGl0CisgICAgICAgKiBzd2l0Y2hlZCB0byB0aGlzIHN0YXRlLgorICAgICAgICovCisgICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOworICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCisgICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKKyAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLworCisgICAgICBpZihjbWRbMF0gPT0gJyonKSB7CisgICAgICAgIGNtZCsrOworICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoInB3ZCIsIGNtZCkpIHsKKyAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLworICAgICAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCIyNTcgXCIlc1wiIGlzIGN1cnJlbnQgZGlyZWN0b3J5LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZnRwX3NjcC0+cGF0aCk7CisgICAgICAgIGlmKCF0bXApIHsKKyAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsIChjaGFyICopIlBXRFxuIiwgNCk7CisgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIHRtcCwgc3RybGVuKHRtcCkpOworICAgICAgICB9CisgICAgICAgIC8qIHRoaXMgc2VuZHMgYW4gRlRQLWxpa2UgImhlYWRlciIgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBzbyB0aGF0IHRoZQorICAgICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSBjYW4gYmUgcmVhZCB2ZXJ5IHNpbWlsYXIgdG8gaG93IGl0IGlzIHJlYWQgd2hlbgorICAgICAgICAgICB1c2luZyBvcmRpbmFyeSBGVFAuICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBjb21tYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCisgICAgICAgICAqIGNvbW1hbmQgd2l0aCBhIHNwYWNlIHNvIHdlIGNhbiBjaGVjayBmb3IgaXQgdW5jb25kaXRpb25hbGx5CisgICAgICAgICAqLworICAgICAgICBjcCA9IHN0cmNocihjbWQsICcgJyk7CisgICAgICAgIGlmKGNwID09IE5VTEwpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGNvbW1hbmQgJyVzJy4gTWlzc2luZyBwYXJhbWV0ZXIhIiwKKyAgICAgICAgICAgICAgICBjbWQpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWxzbywgZXZlcnkgY29tbWFuZCB0YWtlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQgc28gd2UgZ2V0IHRoYXQKKyAgICAgICAgICogZmlyc3QgYXJndW1lbnQgcmlnaHQgbm93CisgICAgICAgICAqLworICAgICAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMSwgc3NoYy0+aG9tZWRpcik7CisgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBCYWQgZmlyc3QgcGFyYW1ldGVyIHRvICclcyciLCBjbWQpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wsIHNvIHdlIGRvbid0IHNlbmQgdGV4dCBjb21tYW5kcworICAgICAgICAgKiB0byB0aGUgc2VydmVyLiBJbnN0ZWFkLCB3ZSBzY2FuIGZvciBjb21tYW5kcyB1c2VkIGJ5CisgICAgICAgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaDIKKyAgICAgICAgICogZnVuY3Rpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8CisgICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAorICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikgKSB7CisgICAgICAgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLworCisgICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCisgICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluICVzOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIsIGNtZCk7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtc2V0KCZzc2hjLT5xdW90ZV9hdHRycywgMCwgc2l6ZW9mKExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTKSk7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImxuICIsIDMpIHx8CisgICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJzeW1saW5rICIsIDgpKSB7CisgICAgICAgICAgLyogc3ltYm9saWMgbGlua2luZyAqLworICAgICAgICAgIC8qIHNzaGMtPnF1b3RlX3BhdGgxIGlzIHRoZSBzb3VyY2UgKi8KKyAgICAgICAgICAvKiBnZXQgdGhlIGRlc3RpbmF0aW9uICovCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICJTeW50YXggZXJyb3IgaW4gbG4vc3ltbGluazogQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJta2RpciAiLCA2KSkgeworICAgICAgICAgIC8qIGNyZWF0ZSBkaXIgKi8KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9NS0RJUik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicmVuYW1lICIsIDcpKSB7CisgICAgICAgICAgLyogcmVuYW1lIGZpbGUgKi8KKyAgICAgICAgICAvKiBmaXJzdCBwYXJhbSBpcyB0aGUgc291cmNlIHBhdGggKi8KKyAgICAgICAgICAvKiBzZWNvbmQgcGFyYW0gaXMgdGhlIGRlc3QuIHBhdGggKi8KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7CisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiByZW5hbWU6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUkVOQU1FKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybWRpciAiLCA2KSkgeworICAgICAgICAgIC8qIGRlbGV0ZSBkaXIgKi8KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9STURJUik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm0gIiwgMykpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9VTkxJTkspOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWZkZWYgSEFTX1NUQVRWRlNfU1VQUE9SVAorICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJzdGF0dmZzICIsIDgpKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGZhaWxmKGRhdGEsICJVbmtub3duIFNGVFAgY29tbWFuZCIpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfTkVYVF9RVU9URToKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisKKyAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBzc2hjLT5xdW90ZV9pdGVtLT5uZXh0OworCisgICAgICBpZihzc2hjLT5xdW90ZV9pdGVtKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX05PX1NUQVRFKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgc3NoYy0+bmV4dHN0YXRlKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfR0VUSU5GTyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUOgorICAgIHsKKyAgICAgIGNoYXIgKmNtZCA9IHNzaGMtPnF1b3RlX2l0ZW0tPmRhdGE7CisgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gRkFMU0U7CisKKyAgICAgIC8qIGlmIGEgY29tbWFuZCBzdGFydHMgd2l0aCBhbiBhc3Rlcmlzaywgd2hpY2ggYSBsZWdhbCBTRlRQIGNvbW1hbmQgbmV2ZXIKKyAgICAgICAgIGNhbiwgdGhlIGNvbW1hbmQgd2lsbCBiZSBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dCBpdCBjYXVzaW5nIGFueQorICAgICAgICAgYWJvcnRzIG9yIGNhbmNlbHMgZXRjLiBJdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWN0IGFzIGlmIHRoZSBjb21tYW5kCisgICAgICAgICBpcyBzdWNjZXNzZnVsLCB3aGF0ZXZlciB0aGUgc2VydmVyIHJlcG9uZHMuICovCisKKyAgICAgIGlmKGNtZFswXSA9PSAnKicpIHsKKyAgICAgICAgY21kKys7CisgICAgICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBUUlVFOworICAgICAgfQorCisgICAgICBpZighc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kIiwgNSkpIHsKKyAgICAgICAgLyogU2luY2UgY2hvd24gYW5kIGNoZ3JwIG9ubHkgc2V0IG93bmVyIE9SIGdyb3VwIGJ1dCBsaWJzc2gyIHdhbnRzIHRvCisgICAgICAgICAqIHNldCB0aGVtIGJvdGggYXQgb25jZSwgd2UgbmVlZCB0byBvYnRhaW4gdGhlIGN1cnJlbnQgb3duZXJzaGlwCisgICAgICAgICAqIGZpcnN0LiAgVGhpcyB0YWtlcyBhbiBleHRyYSBwcm90b2NvbCByb3VuZCB0cmlwLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU1RBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+cXVvdGVfYXR0cnMpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsgLyogZ2V0IHRob3NlIGF0dHJpYnV0ZXMgKi8KKyAgICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBnZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIE5vdyBzZXQgdGhlIG5ldyBhdHRyaWJ1dGVzLi4uICovCisgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAiLCA1KSkgeworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5naWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOworICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy5naWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKKyAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaGdycCBnaWQgbm90IGEgbnVtYmVyIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kIiwgNSkpIHsKKyAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMucGVybWlzc2lvbnMgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCA4KTsKKyAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMuZmxhZ3MgPSBMSUJTU0gyX1NGVFBfQVRUUl9QRVJNSVNTSU9OUzsKKyAgICAgICAgLyogcGVybWlzc2lvbnMgYXJlIG9jdGFsICovCisgICAgICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLnBlcm1pc3Npb25zID09IDAgJiYKKyAgICAgICAgICAgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2htb2QgcGVybWlzc2lvbnMgbm90IGEgbnVtYmVyIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duIiwgNSkpIHsKKyAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMudWlkID0gc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgMTApOworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5mbGFncyA9IExJQlNTSDJfU0ZUUF9BVFRSX1VJREdJRDsKKyAgICAgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMudWlkID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pICYmCisgICAgICAgICAgICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2hvd24gdWlkIG5vdCBhIG51bWJlciIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIE5vdyBzZW5kIHRoZSBjb21wbGV0ZWQgc3RydWN0dXJlLi4uICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVDoKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU0VUU1RBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnF1b3RlX2F0dHJzKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBzZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TWU1MSU5LKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAic3ltbGluayBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX01LRElSOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfbWtkaXJfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JFTkFNRToKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3JlbmFtZV9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1JFTkFNRV9PVkVSV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9SRU5BTUVfQVRPTUlDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfUkVOQU1FX05BVElWRSk7CisKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAicmVuYW1lIGNvbW1hbmQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihzZnRwZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUk1ESVI6CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9ybWRpcl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGZhaWxmKGRhdGEsICJybWRpciBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1VOTElOSzoKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3VubGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgc2Z0cGVyciA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAicm0gY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFTX1NUQVRWRlNfU1VQUE9SVAorICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUzoKKyAgICB7CisgICAgICBMSUJTU0gyX1NGVFBfU1RBVFZGUyBzdGF0dmZzOworICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdHZmcyhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dmZzKTsKKworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInN0YXR2ZnMgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IDApIHsKKyAgICAgICAgY2hhciAqdG1wID0gYXByaW50Zigic3RhdHZmczpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ic2l6ZTogJWxsdVxuIiAiZl9mcnNpemU6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ibG9ja3M6ICVsbHVcbiIgImZfYmZyZWU6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9iYXZhaWw6ICVsbHVcbiIgImZfZmlsZXM6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mZnJlZTogJWxsdVxuIiAiZl9mYXZhaWw6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mc2lkOiAlbGx1XG4iICJmX2ZsYWc6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9uYW1lbWF4OiAlbGx1XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9ic2l6ZSwgc3RhdHZmcy5mX2Zyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfYmxvY2tzLCBzdGF0dmZzLmZfYmZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX2JhdmFpbCwgc3RhdHZmcy5mX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9mZnJlZSwgc3RhdHZmcy5mX2ZhdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfZnNpZCwgc3RhdHZmcy5mX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX25hbWVtYXgpOworICAgICAgICBpZighdG1wKSB7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICAgICAgZnJlZSh0bXApOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBTU0hfU0ZUUF9HRVRJTkZPOgorICAgIHsKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9GSUxFVElNRToKKyAgICB7CisgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKKworICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBhdHRycy5tdGltZTsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX1RSQU5TX0lOSVQ6CisgICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoc2Z0cF9zY3AtPnBhdGhbc3RybGVuKHNmdHBfc2NwLT5wYXRoKS0xXSA9PSAnLycpCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9JTklUKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1VQTE9BRF9JTklUOgorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAvKgorICAgICAgICogTk9URSEhISAgbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoCisgICAgICAgKiAgICAgICAgICB0aGF0IGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIKKyAgICAgICAqICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUKKyAgICAgICAqICAgICAgICAgIHNhbWUgbmFtZSBhcyB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCisgICAgICAgKi8KKworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gIT0gMCkgeworICAgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7CisgICAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7CisgICAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihyYykgeworICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZihkYXRhLT5zZXQuZnRwX2FwcGVuZCkKKyAgICAgICAgLyogVHJ5IHRvIG9wZW4gZm9yIGFwcGVuZCwgYnV0IGNyZWF0ZSBpZiBub25leGlzdGluZyAqLworICAgICAgICBmbGFncyA9IExJQlNTSDJfRlhGX1dSSVRFfExJQlNTSDJfRlhGX0NSRUFUfExJQlNTSDJfRlhGX0FQUEVORDsKKyAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKQorICAgICAgICAvKiBJZiB3ZSBoYXZlIHJlc3RhcnQgcG9zaXRpb24gdGhlbiBvcGVuIGZvciBhcHBlbmQgKi8KKyAgICAgICAgZmxhZ3MgPSBMSUJTU0gyX0ZYRl9XUklURXxMSUJTU0gyX0ZYRl9BUFBFTkQ7CisgICAgICBlbHNlCisgICAgICAgIC8qIENsZWFyIGZpbGUgYmVmb3JlIHdyaXRpbmcgKG5vcm1hbCBiZWhhdmlvdXIpICovCisgICAgICAgIGZsYWdzID0gTElCU1NIMl9GWEZfV1JJVEV8TElCU1NIMl9GWEZfQ1JFQVR8TElCU1NIMl9GWEZfVFJVTkM7CisKKyAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0KKyAgICAgICAgbGlic3NoMl9zZnRwX29wZW5fZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfT1BFTkZJTEUpOworCisgICAgICBpZighc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7CisKKyAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9FQUdBSU4gPT0gcmMpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MID09IHJjKQorICAgICAgICAgIC8qIG9ubHkgd2hlbiB0aGVyZSB3YXMgYW4gU0ZUUCBwcm90b2NvbCBlcnJvciBjYW4gd2UgZXh0cmFjdAorICAgICAgICAgICAgIHRoZSBzZnRwIGVycm9yISAqLworICAgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgc2Z0cGVyciA9IExJQlNTSDJfRlhfT0s7IC8qIG5vdCBhbiBzZnRwIGVycm9yIGF0IGFsbCAqLworCisgICAgICAgIGlmKHNzaGMtPnNlY29uZENyZWF0ZURpcnMpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHNmdHBlcnIgIT0gTElCU1NIMl9GWF9PSyA/CisgICAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik6Q1VSTEVfU1NIOworICAgICAgICAgIGZhaWxmKGRhdGEsICJDcmVhdGluZyB0aGUgZGlyL2ZpbGUgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZigoKHNmdHBlcnIgPT0gTElCU1NIMl9GWF9OT19TVUNIX0ZJTEUpIHx8CisgICAgICAgICAgICAoc2Z0cGVyciA9PSBMSUJTU0gyX0ZYX0ZBSUxVUkUpIHx8CisgICAgICAgICAgICAoc2Z0cGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSCkpICYmCisgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgJiYKKyAgICAgICAgICAgIChzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkpKSB7CisgICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSB0aGUgcGF0aCByZW1vdGVseSAqLworICAgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDE7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cGVyciAhPSBMSUJTU0gyX0ZYX09LID8KKyAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik6Q1VSTEVfU1NIOworICAgICAgICBpZighc3NoYy0+YWN0dWFsY29kZSkgeworICAgICAgICAgIC8qIFNvbWV0aW1lcywgZm9yIHNvbWUgcmVhc29uIGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKCkgcmV0dXJucyB6ZXJvCisgICAgICAgICAgICAgZXZlbiB0aG91Z2ggbGlic3NoMl9zZnRwX29wZW4oKSBmYWlsZWQgcHJldmlvdXNseSEgV2UgbmVlZCB0bworICAgICAgICAgICAgIHdvcmsgYXJvdW5kIHRoYXQhICovCisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1NTSDsKKyAgICAgICAgICBzZnRwZXJyID0gTElCU1NIMl9GWF9PSzsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihkYXRhLCAiVXBsb2FkIGZhaWxlZDogJXMgKCVkLyVkKSIsCisgICAgICAgICAgICAgIHNmdHBlcnIgIT0gTElCU1NIMl9GWF9PSyA/CisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihzZnRwZXJyKToic3NoIGVycm9yIiwKKyAgICAgICAgICAgICAgc2Z0cGVyciwgcmMpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlc3RhcnQgcG9pbnQgdGhlbiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGNvcnJlY3QKKyAgICAgICAgIHBvc2l0aW9uLiAqLworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKSB7CisgICAgICAgIC8qIExldCdzIHJlYWQgb2ZmIHRoZSBwcm9wZXIgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGlucHV0LiAqLworICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKKyAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KKyAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgorICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkOworICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CisgICAgICAgICAgICBhY3R1YWxseXJlYWQgPSBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluKTsKKyAgICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgICB9CisKKyAgICAgICAgU0ZUUF9TRUVLKHNzaGMtPnNmdHBfaGFuZGxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICB9CisgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgeworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7CisgICAgICB9CisgICAgICAvKiB1cGxvYWQgZGF0YSAqLworICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCBGSVJTVFNPQ0tFVCk7CisKKyAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7CisKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RvcmUgdGhpcyBvcmlnaW5hbCBiaXRtYXNrIHNldHVwIHRvIHVzZSBsYXRlciBvbiBpZiB3ZSBjYW4ndAorICAgICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KKyAgICAgICAgc3NoYy0+b3JpZ193YWl0Zm9yID0gZGF0YS0+cmVxLmtlZXBvbjsKKworICAgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3NlbmRpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHNmdHAgc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7CisKKyAgICAgICAgLyogc2luY2Ugd2UgZG9uJ3QgcmVhbGx5IHdhaXQgZm9yIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdGhlCisgICAgICAgICAgIHN0YXRlIG1hY2hpbmUgdG8gbW92ZSBvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIHNldCBhIHZlcnkgc2hvcnQKKyAgICAgICAgICAgdGltZW91dCBoZXJlICovCisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQ6CisgICAgICBpZihzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkgeworICAgICAgICBzc2hjLT5zbGFzaF9wb3MgPSBzZnRwX3NjcC0+cGF0aCArIDE7IC8qIGlnbm9yZSB0aGUgbGVhZGluZyAnLycgKi8KKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSUzoKKyAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHN0cmNocihzc2hjLT5zbGFzaF9wb3MsICcvJyk7CisgICAgICBpZihzc2hjLT5zbGFzaF9wb3MpIHsKKyAgICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9IDA7CisKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNyZWF0aW5nIGRpcmVjdG9yeSAnJXMnXG4iLCBzZnRwX3NjcC0+cGF0aCk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVI6CisgICAgICAvKiAnbW9kZScgLSBwYXJhbWV0ZXIgaXMgcHJlbGltaW5hcnkgLSBkZWZhdWx0IHRvIDA2NDQgKi8KKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX21rZGlyX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAnLyc7CisgICAgICArK3NzaGMtPnNsYXNoX3BvczsKKyAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBBYm9ydCBpZiBmYWlsdXJlIHdhc24ndCB0aGF0IHRoZSBkaXIgYWxyZWFkeSBleGlzdHMgb3IgdGhlCisgICAgICAgICAqIHBlcm1pc3Npb24gd2FzIGRlbmllZCAoY3JlYXRpb24gbWlnaHQgc3VjY2VlZCBmdXJ0aGVyIGRvd24gdGhlCisgICAgICAgICAqIHBhdGgpIC0gcmV0cnkgb24gdW5zcGVjaWZpYyBGQUlMVVJFIGFsc28KKyAgICAgICAgICovCisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBpZigoc2Z0cGVyciAhPSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFMpICYmCisgICAgICAgICAgIChzZnRwZXJyICE9IExJQlNTSDJfRlhfRkFJTFVSRSkgJiYKKyAgICAgICAgICAgKHNmdHBlcnIgIT0gTElCU1NIMl9GWF9QRVJNSVNTSU9OX0RFTklFRCkpIHsKKyAgICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfSU5JVDoKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQorICAgICAgICogbGlzdGluZworICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTElCU1NIMl9TRlRQX09QRU5ESVIpOworICAgICAgaWYoIXNzaGMtPnNmdHBfaGFuZGxlKSB7CisgICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQorICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2Z0cGVyciA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICBpZighc3NoYy0+cmVhZGRpcl9maWxlbmFtZSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICBpZighc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBDdXJsX2R5bl9pbml0KCZzc2hjLT5yZWFkZGlyLCBQQVRIX01BWCAqIDIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUjoKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3JlYWRkaXJfZXgoc3NoYy0+c2Z0cF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2hjLT5yZWFkZGlyX2F0dHJzKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgPiAwKSB7CisgICAgICAgIHJlYWRkaXJfbGVuID0gKHNpemVfdCkgcmM7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWVbcmVhZGRpcl9sZW5dID0gJ1wwJzsKKworICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSkgeworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZGlyX2xlbik7CisgICAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJcbiIsIDEpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIHNpbmNlIHRoaXMgY291bnRzIHdoYXQgd2Ugc2VuZCB0byB0aGUgY2xpZW50LCB3ZSBpbmNsdWRlIHRoZQorICAgICAgICAgICAgIG5ld2xpbmUgaW4gdGhpcyBjb3VudGVyICovCisgICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSByZWFkZGlyX2xlbiArIDE7CisKKyAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZGRpcl9sZW4pOworICAgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX0lOLCAoY2hhciAqKSJcbiIsIDEpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnNzaGMtPnJlYWRkaXIsIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKworICAgICAgICAgIGlmKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmKChzc2hjLT5yZWFkZGlyX2F0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfUEVSTUlTU0lPTlMpICYmCisgICAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMucGVybWlzc2lvbnMgJiBMSUJTU0gyX1NGVFBfU19JRk1UKSA9PQorICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TX0lGTE5LKSkgeworICAgICAgICAgICAgICBDdXJsX2R5bl9pbml0KCZzc2hjLT5yZWFkZGlyX2xpbmssIFBBVEhfTUFYKTsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZzc2hjLT5yZWFkZGlyX2xpbmssIHNmdHBfc2NwLT5wYXRoKTsKKyAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9MSU5LKTsKKyAgICAgICAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSAwKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0RPTkUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPCAwKSB7CisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyA6OiAlZCIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihzZnRwZXJyKSwKKyAgICAgICAgICAgICAgbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9MSU5LOgorICAgICAgcmMgPQorICAgICAgICBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmc3NoYy0+cmVhZGRpcl9saW5rKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClDdXJsX2R5bl9sZW4oJnNzaGMtPnJlYWRkaXJfbGluayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLCBMSUJTU0gyX1NGVFBfUkVBRExJTkspOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICByZWFkZGlyX2xlbiA9IChzaXplX3QpIHJjOworICAgICAgQ3VybF9keW5fZnJlZSgmc3NoYy0+cmVhZGRpcl9saW5rKTsKKworICAgICAgLyogYXBwZW5kIGZpbGVuYW1lIGFuZCBleHRyYSBvdXRwdXQgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnNzaGMtPnJlYWRkaXIsICIgLT4gJXMiLCBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9CT1RUT006CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZzc2hjLT5yZWFkZGlyLCAiXG4iLCAxKTsKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmc3NoYy0+cmVhZGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmc3NoYy0+cmVhZGRpcikpOworCisgICAgICBpZighcmVzdWx0KSB7CisKKyAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLworICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwKKyAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmc3NoYy0+cmVhZGRpciksCisgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJnNzaGMtPnJlYWRkaXIpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IEN1cmxfZHluX2xlbigmc3NoYy0+cmVhZGRpcik7CisgICAgICB9CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgQ3VybF9keW5fZnJlZSgmc3NoYy0+cmVhZGRpcik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBDdXJsX2R5bl9yZXNldCgmc3NoYy0+cmVhZGRpcik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVIpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfRE9ORToKKyAgICAgIGlmKGxpYnNzaDJfc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2hhbmRsZSkgPT0KKyAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworCisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFdvcmsgb24gZ2V0dGluZyB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAgICAqLworICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPQorICAgICAgICBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfRlhGX1JFQUQsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX09QRU5GSUxFKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgeworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gcmVtb3RlIGZpbGUgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUOgorICAgIHsKKyAgICAgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIGF0dHJzOworCisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjIHx8CisgICAgICAgICAhKGF0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfU0laRSkgfHwKKyAgICAgICAgIChhdHRycy5maWxlc2l6ZSA9PSAwKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBsaWJzc2gyX3NmdHBfb3BlbigpIGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKKyAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCisgICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQorICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAorICAgICAgICAgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMuZmlsZXNpemU7CisKKyAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICB9CisgICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgeworICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87CisgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgIGNoYXIgKnB0cjI7CisgICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKKyAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7CisKKyAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKKyAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpCisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7CisgICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKKyAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKQorICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOworICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLworICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgeworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbV90KSB7CisgICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIGF0dHJzLmZpbGVzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihmcm9tID4gdG8pIHsKKyAgICAgICAgICAgIGZyb20gPSB0bzsKKyAgICAgICAgICAgIHNpemUgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNpemUgPSB0byAtIGZyb20gKyAxOworICAgICAgICAgIH0KKworICAgICAgICAgIFNGVFBfU0VFSyhjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBmcm9tKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKyAgICAgIH0KKworICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IC1kYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKKyAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBhdHRycy5maWxlc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KKyAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBhdHRycy5maWxlc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCisgICAgICAgICAgICAgICAgICAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgYXR0cnMuZmlsZXNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIE5vdyBzdG9yZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGFyZSBleHBlY3RlZCB0byBkb3dubG9hZCAqLworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMuZmlsZXNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICAgIFNGVFBfU0VFSyhzc2hjLT5zZnRwX2hhbmRsZSwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgfQorICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KKyAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7CisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOworCisgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOworCisgICAgaWYocmVzdWx0KSB7CisgICAgICAvKiB0aGlzIHNob3VsZCBuZXZlciBvY2N1cjsgdGhlIGNsb3NlIHN0YXRlIHNob3VsZCBiZSBlbnRlcmVkCisgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZXJyb3Igb2NjdXJzICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9oYW5kbGUpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaDIgZmlsZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc2Z0cF9zY3AtPnBhdGgpOworCisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNGVFAgRE9ORSBkb25lXG4iKSk7CisKKyAgICAgIC8qIENoZWNrIGlmIG5leHRzdGF0ZSBpcyBzZXQgYW5kIG1vdmUgLm5leHRzdGF0ZSBjb3VsZCBiZSBQT1NUUVVPVEVfSU5JVAorICAgICAgICAgQWZ0ZXIgbmV4dHN0YXRlIGlzIGV4ZWN1dGVkLCB0aGUgY29udHJvbCBzaG91bGQgY29tZSBiYWNrIHRvCisgICAgICAgICBTU0hfU0ZUUF9DTE9TRSB0byBwYXNzIHRoZSBjb3JyZWN0IHJlc3VsdCBiYWNrICAqLworICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSAmJgorICAgICAgICAgc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9TRlRQX0NMT1NFKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX0NMT1NFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIC8qIGR1cmluZyB0aW1lcyB3ZSBnZXQgaGVyZSBkdWUgdG8gYSBicm9rZW4gdHJhbnNmZXIgYW5kIHRoZW4gdGhlCisgICAgICAgICBzZnRwX2hhbmRsZSBtaWdodCBub3QgaGF2ZSBiZWVuIHRha2VuIGRvd24gc28gbWFrZSBzdXJlIHRoYXQgaXMgZG9uZQorICAgICAgICAgYmVmb3JlIHdlIHByb2NlZWQgKi8KKworICAgICAgaWYoc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9oYW5kbGUpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaDIgZmlsZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZihzc2hjLT5zZnRwX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc2h1dGRvd24oc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHN0b3AgbGlic3NoMiBzZnRwIHN1YnN5c3RlbVxuIik7CisgICAgICAgIH0KKyAgICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6CisgICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZzZnRwX3NjcC0+cGF0aCk7CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIDwgMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJTQ1AgcmVxdWlyZXMgYSBrbm93biBmaWxlIHNpemUgZm9yIHVwbG9hZCIpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9VUExPQURfRkFJTEVEOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfVVBMT0FEX0lOSVQ6CisgICAgICAvKgorICAgICAgICogbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoIHRoYXQKKyAgICAgICAqIGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIgLiAgSWYgdGhpcyBpcworICAgICAgICogbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBsYXN0CisgICAgICAgKiBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCisgICAgICAgKi8KKyAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0KKyAgICAgICAgU0NQX1NFTkQoc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLCBkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMsCisgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7CisgICAgICAgIGludCBzc2hfZXJyOworICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3NoX2VyciA9IChpbnQpKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApKTsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRShzc2hfZXJyKTsKKyAgICAgICAgLyogTWFwIGdlbmVyaWMgZXJyb3JzIHRvIHVwbG9hZCBmYWlsZWQgKi8KKyAgICAgICAgaWYoc3NoYy0+YWN0dWFsY29kZSA9PSBDVVJMRV9TU0ggfHwKKyAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9PSBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQpCisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1VQTE9BRF9GQUlMRUQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiB1cGxvYWQgZGF0YSAqLworICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKKyAgICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCisgICAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiBzY3Agc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKKyAgICB7CisgICAgICBjdXJsX29mZl90IGJ5dGVjb3VudDsKKworICAgICAgLyoKKyAgICAgICAqIFdlIG11c3QgY2hlY2sgdGhlIHJlbW90ZSBmaWxlOyBpZiBpdCBpcyBhIGRpcmVjdG9yeSBubyB2YWx1ZXMgd2lsbAorICAgICAgICogYmUgc2V0IGluIHNiCisgICAgICAgKi8KKworICAgICAgLyoKKyAgICAgICAqIElmIHN1cHBvcnQgZm9yID4yR0IgZmlsZXMgZXhpc3RzLCB1c2UgaXQuCisgICAgICAgKi8KKworICAgICAgLyogZ2V0IGEgZnJlc2ggbmV3IGNoYW5uZWwgZnJvbSB0aGUgc3NoIGxheWVyICovCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA8IDB4MDEwNzAwCisgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICAgIG1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOworICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2KHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdHBfc2NwLT5wYXRoLCAmc2IpOworI2Vsc2UKKyAgICAgIGxpYnNzaDJfc3RydWN0X3N0YXQgc2I7CisgICAgICBtZW1zZXQoJnNiLCAwLCBzaXplb2YobGlic3NoMl9zdHJ1Y3Rfc3RhdCkpOworICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2Mihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsICZzYik7CisjZW5kaWYKKworICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7CisgICAgICAgIGludCBzc2hfZXJyOworICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworICAgICAgICBzc2hfZXJyID0gKGludCkobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCkpOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaF9lcnIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogZG93bmxvYWQgZGF0YSAqLworICAgICAgYnl0ZWNvdW50ID0gKGN1cmxfb2ZmX3Qpc2Iuc3Rfc2l6ZTsKKyAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IChjdXJsX29mZl90KXNiLnN0X3NpemU7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBieXRlY291bnQsIEZBTFNFLCAtMSk7CisKKyAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7CisKKyAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfcmVjZWl2aW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9ET05FOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9TRU5EX0VPRik7CisgICAgICBlbHNlCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1NFTkRfRU9GOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfc2VuZF9lb2Yoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBsaWJzc2gyIGNoYW5uZWwgRU9GOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfV0FJVF9FT0YpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfV0FJVF9FT0Y6CisgICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF93YWl0X2VvZihzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKyAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBFT0Y6ICVkICVzXG4iLCByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfV0FJVF9DTE9TRSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9XQUlUX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd2FpdF9jbG9zZWQoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJDaGFubmVsIGZhaWxlZCB0byBjbG9zZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfZnJlZShzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNjcCBzdWJzeXN0ZW06ICVkICVzXG4iLAorICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IE5VTEw7CisgICAgICB9CisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNDUCBET05FIHBoYXNlIGNvbXBsZXRlXG4iKSk7CisjaWYgMCAvKiBQUkVWICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyNlbmRpZgorICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0VTU0lPTl9ESVNDT05ORUNUOgorICAgICAgLyogZHVyaW5nIHdlaXJkIHRpbWVzIHdoZW4gd2UndmUgYmVlbiBwcmVtYXR1cmVseSBhYm9ydGVkLCB0aGUgY2hhbm5lbAorICAgICAgICAgaXMgc3RpbGwgYWxpdmUgd2hlbiB3ZSByZWFjaCB0aGlzIHN0YXRlIGFuZCB3ZSBNVVNUIGtpbGwgdGhlIGNoYW5uZWwKKyAgICAgICAgIHByb3Blcmx5IGZpcnN0ICovCisgICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF9mcmVlKHNzaGMtPnNzaF9jaGFubmVsKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKyAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBmcmVlIGxpYnNzaDIgc2NwIHN1YnN5c3RlbTogJWQgJXNcbiIsCisgICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOworICAgICAgICB9CisgICAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbiwgIlNodXRkb3duIik7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZGlzY29ubmVjdCBsaWJzc2gyIHNlc3Npb246ICVkICVzXG4iLAorICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPmhvbWVkaXIpOworICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6CisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgICAgIGlmKHNzaGMtPmtoKSB7CisgICAgICAgIGxpYnNzaDJfa25vd25ob3N0X2ZyZWUoc3NoYy0+a2gpOworICAgICAgICBzc2hjLT5raCA9IE5VTEw7CisgICAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIGlmKHNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICByYyA9IGxpYnNzaDJfYWdlbnRfZGlzY29ubmVjdChzc2hjLT5zc2hfYWdlbnQpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSBsaWJzc2gyIGFnZW50OiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgICAgbGlic3NoMl9hZ2VudF9mcmVlKHNzaGMtPnNzaF9hZ2VudCk7CisgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IE5VTEw7CisKKyAgICAgICAgLyogTkI6IHRoZXJlIGlzIG5vIG5lZWQgdG8gZnJlZSBpZGVudGl0aWVzLCB0aGV5IGFyZSBwYXJ0IG9mIGludGVybmFsCisgICAgICAgICAgIGFnZW50IHN0dWZmICovCisgICAgICAgIHNzaGMtPnNzaGFnZW50X2lkZW50aXR5ID0gTlVMTDsKKyAgICAgICAgc3NoYy0+c3NoYWdlbnRfcHJldl9pZGVudGl0eSA9IE5VTEw7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNlc3Npb246ICVkICVzXG4iLCByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgICAgc3NoYy0+c3NoX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorCisgICAgICAvKiB3b3JzdC1jYXNlIHNjZW5hcmlvIGNsZWFudXAgKi8KKworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c3NoX3Nlc3Npb24gPT0gTlVMTCk7CisgICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfY2hhbm5lbCA9PSBOVUxMKTsKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNmdHBfc2Vzc2lvbiA9PSBOVUxMKTsKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNmdHBfaGFuZGxlID09IE5VTEwpOworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCisgICAgICBERUJVR0FTU0VSVChzc2hjLT5raCA9PSBOVUxMKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9hZ2VudCA9PSBOVUxMKTsKKyNlbmRpZgorCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPmhvbWVkaXIpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGluZSk7CisgICAgICBDdXJsX2R5bl9mcmVlKCZzc2hjLT5yZWFkZGlyKTsKKworICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKworICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKKworICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7CisgICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7IC8qIGN1cnJlbnQgKi8KKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfUVVJVDoKKyAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIGludGVybmFsIGVycm9yICovCisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgfSB3aGlsZSghcmMgJiYgKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSk7CisKKyAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAvKiB3ZSB3b3VsZCBibG9jaywgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlIHJlYWR5IChpbiB0aGUKKyAgICAgICByaWdodCBkaXJlY3Rpb24gdG9vKSEgKi8KKyAgICAqYmxvY2sgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKSB0byB3YWl0IGZvciBhbmQKKyAgIGZvciB3aGF0IGFjdGlvbnMgaW4gdGhlIERPX0RPTkUsIFBFUkZPUk0gYW5kIFdBSVRQRVJGT1JNIHN0YXRlcyAqLworc3RhdGljIGludCBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKQoreworI2lmZGVmIEhBVkVfTElCU1NIMl9TRVNTSU9OX0JMT0NLX0RJUkVDVElPTgorICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKKworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7CisjZWxzZQorICAvKiBpZiB3ZSBkb24ndCBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKQorICAgICBmdW5jdGlvbiBldmVuIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCisgIHJldHVybiBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbm4sIHNvY2spOworI2VuZGlmCit9CisKKy8qIEdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKQorICAgdG8gd2FpdCBmb3IgYW5kIGZvciB3aGF0IGFjdGlvbnMgZHVyaW5nIHRoZSBET0lORyBhbmQgUFJPVE9DT05ORUNUIHN0YXRlcyovCitzdGF0aWMgaW50IHNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyNpZm5kZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgICh2b2lkKWNvbm47CisgICh2b2lkKXNvY2s7CisgIC8qIGlmIHdlIGRvbid0IGtub3cgYW55IGRpcmVjdGlvbiB3ZSBjYW4ganVzdCBwbGF5IGFsb25nIGFzIHdlIHVzZWQgdG8gYW5kCisgICAgIG5vdCBwcm92aWRlIGFueSBzZW5zaWJsZSBpbmZvICovCisgIHJldHVybiBHRVRTT0NLX0JMQU5LOworI2Vsc2UKKyAgLyogaWYgd2Uga25vdyB0aGUgZGlyZWN0aW9uIHdlIGNhbiB1c2UgdGhlIGdlbmVyaWMgKl9nZXRzb2NrKCkgZnVuY3Rpb24gZXZlbgorICAgICBmb3IgdGhlIHByb3RvY29sX2Nvbm5lY3QgYW5kIGRvaW5nIHN0YXRlcyAqLworICByZXR1cm4gc3NoX3BlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrKTsKKyNlbmRpZgorfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisvKgorICogV2hlbiBvbmUgb2YgdGhlIGxpYnNzaDIgZnVuY3Rpb25zIGhhcyByZXR1cm5lZCBMSUJTU0gyX0VSUk9SX0VBR0FJTiB0aGlzCisgKiBmdW5jdGlvbiBpcyB1c2VkIHRvIGZpZ3VyZSBvdXQgaW4gd2hhdCBkaXJlY3Rpb24gYW5kIHN0b3JlcyB0aGlzIGluZm8gc28KKyAqIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQuIE1ha2Ugc3VyZSB0byBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uIGluIGFsbCBjYXNlcyBzbyB0aGF0IHdoZW4gaXQgX2RvZXNuJ3RfIHJldHVybiBFQUdBSU4gd2UgY2FuCisgKiByZXN0b3JlIHRoZSBkZWZhdWx0IHdhaXQgYml0cy4KKyAqLworc3RhdGljIHZvaWQgc3NoX2Jsb2NrMndhaXRmb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGJsb2NrKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgaW50IGRpciA9IDA7CisgIGlmKGJsb2NrKSB7CisgICAgZGlyID0gbGlic3NoMl9zZXNzaW9uX2Jsb2NrX2RpcmVjdGlvbnMoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgIGlmKGRpcikgeworICAgICAgLyogdHJhbnNsYXRlIHRoZSBsaWJzc2gyIGRlZmluZSBiaXRzIGludG8gb3VyIG93biBiaXQgZGVmaW5lcyAqLworICAgICAgY29ubi0+d2FpdGZvciA9ICgoZGlyJkxJQlNTSDJfU0VTU0lPTl9CTE9DS19JTkJPVU5EKT9LRUVQX1JFQ1Y6MCkgfAorICAgICAgICAoKGRpciZMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQpP0tFRVBfU0VORDowKTsKKyAgICB9CisgIH0KKyAgaWYoIWRpcikKKyAgICAvKiBJdCBkaWRuJ3QgYmxvY2sgb3IgbGlic3NoMiBkaWRuJ3QgcmV2ZWFsIGluIHdoaWNoIGRpcmVjdGlvbiwgcHV0IGJhY2sKKyAgICAgICB0aGUgb3JpZ2luYWwgc2V0ICovCisgICAgY29ubi0+d2FpdGZvciA9IHNzaGMtPm9yaWdfd2FpdGZvcjsKK30KKyNlbHNlCisgIC8qIG5vIGxpYnNzaDIgZGlyZWN0aW9uYWwgc3VwcG9ydCBzbyB3ZSBzaW1wbHkgZG9uJ3Qga25vdyAqLworI2RlZmluZSBzc2hfYmxvY2syd2FpdGZvcih4LHkpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGJvb2wgYmxvY2s7IC8qIHdlIHN0b3JlIHRoZSBzdGF0dXMgYW5kIHVzZSB0aGF0IHRvIHByb3ZpZGUgYSBzc2hfZ2V0c29jaygpCisgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uICovCisgIGRvIHsKKyAgICByZXN1bHQgPSBzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOworICAgICpkb25lID0gKHNzaGMtPnN0YXRlID09IFNTSF9TVE9QKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAvKiBpZiB0aGVyZSdzIG5vIGVycm9yLCBpdCBpc24ndCBkb25lIGFuZCBpdCBkaWRuJ3QgRVdPVUxEQkxPQ0ssIHRoZW4KKyAgICAgICB0cnkgYWdhaW4gKi8KKyAgfSB3aGlsZSghcmVzdWx0ICYmICEqZG9uZSAmJiAhYmxvY2spOworICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCBibG9jayk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHNzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGR1cmluZ2Nvbm5lY3QpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7CisgICAgYm9vbCBibG9jazsKKyAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOworICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOworCisgICAgcmVzdWx0ID0gc3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgICAgcmVzdWx0ID0gQ3VybF9zcGVlZGNoZWNrKGRhdGEsIG5vdyk7CisgICAgaWYocmVzdWx0KQorICAgICAgYnJlYWs7CisKKyAgICBsZWZ0ID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBkdXJpbmdjb25uZWN0KTsKKyAgICBpZihsZWZ0IDwgMCkgeworICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgICAgaWYoYmxvY2spIHsKKyAgICAgIGludCBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfcmVhZCA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfd3JpdGUgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfSU5CT1VORCAmIGRpcikKKyAgICAgICAgZmRfcmVhZCA9IHNvY2s7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQgJiBkaXIpCisgICAgICAgIGZkX3dyaXRlID0gc29jazsKKyAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCisgICAgICAodm9pZClDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6bGVmdCk7CisgICAgfQorI2VuZGlmCisKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgYW5kIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNTSFBST1RPICpzc2g7CisKKyAgY29ubi0+ZGF0YS0+cmVxLnByb3RvcCA9IHNzaCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IFNTSFBST1RPKSk7CisgIGlmKCFzc2gpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ3VybF9yZWN2IHNjcF9yZWN2LCBzZnRwX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHNjcF9zZW5kLCBzZnRwX3NlbmQ7CisKKy8qCisgKiBDdXJsX3NzaF9jb25uZWN0KCkgZ2V0cyBjYWxsZWQgZnJvbSBDdXJsX3Byb3RvY29sX2Nvbm5lY3QoKSB0byBhbGxvdyB1cyB0bworICogZG8gcHJvdG9jb2wtc3BlY2lmaWMgYWN0aW9ucyBhdCBjb25uZWN0LXRpbWUuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGN1cmxfc29ja2V0X3Qgc29jazsKKyNlbmRpZgorICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaDsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAvKiBpbml0aWFsaXplIHBlci1oYW5kbGUgZGF0YSBpZiBub3QgYWxyZWFkeSAqLworICBpZighZGF0YS0+cmVxLnByb3RvcCkKKyAgICBzc2hfc2V0dXBfY29ubmVjdGlvbihjb25uKTsKKworICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0CisgICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KKyAgY29ubmtlZXAoY29ubiwgIlNTSCBkZWZhdWx0Iik7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzY3BfcmVjdjsKKyAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNjcF9zZW5kOworICB9CisgIGVsc2UgeworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2Z0cF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2Z0cF9zZW5kOworICB9CisgIHNzaCA9ICZjb25uLT5wcm90by5zc2hjOworCisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGlmKGNvbm4tPnVzZXIpIHsKKyAgICBpbmZvZihkYXRhLCAiVXNlcjogJXNcbiIsIGNvbm4tPnVzZXIpOworICB9CisgIGlmKGNvbm4tPnBhc3N3ZCkgeworICAgIGluZm9mKGRhdGEsICJQYXNzd29yZDogJXNcbiIsIGNvbm4tPnBhc3N3ZCk7CisgIH0KKyAgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworI2VuZGlmIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworCisgIHNzaC0+c3NoX3Nlc3Npb24gPSBsaWJzc2gyX3Nlc3Npb25faW5pdF9leChteV9saWJzc2gyX21hbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X2xpYnNzaDJfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X2xpYnNzaDJfcmVhbGxvYywgY29ubik7CisgIGlmKHNzaC0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpc2luZyBzc2ggc2Vzc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIGlmKGRhdGEtPnNldC5zc2hfY29tcHJlc3Npb24pIHsKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA4CisgICAgaWYobGlic3NoMl9zZXNzaW9uX2ZsYWcoc3NoLT5zc2hfc2Vzc2lvbiwgTElCU1NIMl9GTEFHX0NPTVBSRVNTLCAxKSA8IDApCisjZW5kaWYKKyAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZW5hYmxlIGNvbXByZXNzaW9uIGZvciBzc2ggc2Vzc2lvblxuIik7CisgIH0KKworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSkgeworICAgIGludCByYzsKKyAgICBzc2gtPmtoID0gbGlic3NoMl9rbm93bmhvc3RfaW5pdChzc2gtPnNzaF9zZXNzaW9uKTsKKyAgICBpZighc3NoLT5raCkgeworICAgICAgbGlic3NoMl9zZXNzaW9uX2ZyZWUoc3NoLT5zc2hfc2Vzc2lvbik7CisgICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgfQorCisgICAgLyogcmVhZCBhbGwga25vd24gaG9zdHMgZnJvbSB0aGVyZSAqLworICAgIHJjID0gbGlic3NoMl9rbm93bmhvc3RfcmVhZGZpbGUoc3NoLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0ZJTEVfT1BFTlNTSCk7CisgICAgaWYocmMgPCAwKQorICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byByZWFkIGtub3duIGhvc3RzIGZyb20gJXNcbiIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICB9CisjZW5kaWYgLyogSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgKi8KKworI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRworICBsaWJzc2gyX3RyYWNlKHNzaC0+c3NoX3Nlc3Npb24sIH4wKTsKKyAgaW5mb2YoZGF0YSwgIlNTSCBzb2NrZXQ6ICVkXG4iLCAoaW50KXNvY2spOworI2VuZGlmIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworCisgIHN0YXRlKGNvbm4sIFNTSF9JTklUKTsKKworICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvbmUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzY3BfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTQ1AuIEdldCBhIGZpbGUgYWNjb3JkaW5nIHRvCisgKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgorICovCisKK3N0YXRpYworQ1VSTGNvZGUgc2NwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NDUF9UUkFOU19JTklUKTsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoZSBETyBmdW5jdGlvbiBpcyBnZW5lcmljIGZvciBib3RoIHByb3RvY29scy4gVGhlcmUgd2FzIHByZXZpb3VzbHkgdHdvCisgKiBzZXBhcmF0ZSBvbmVzIGJ1dCB0aGlzIHdheSBtZWFucyBsZXNzIGR1cGxpY2F0ZWQgY29kZS4KKyAqLworCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIGNvbm5lY3RlZCA9IDA7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisKKyAgZGF0YS0+cmVxLnNpemUgPSAtMTsgLyogbWFrZSBzdXJlIHRoaXMgaXMgdW5rbm93biBhdCB0aGlzIHBvaW50ICovCisKKyAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOyAvKiByZXNldCBlcnJvciBjb2RlICovCisgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOyAgIC8qIHJlc2V0IHRoZSBjcmVhdGUgZGlyIGF0dGVtcHQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKi8KKworICBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXREb3dubG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgLTEpOworICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOworCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkKKyAgICByZXN1bHQgPSBzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBzZnRwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgIGRvbmUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgorICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKKyAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KK3N0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IHNzaF9jb25uICpzc2ggPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKKworICBpZihzc2gtPnNzaF9zZXNzaW9uKSB7CisgICAgLyogb25seSBpZiB0aGVyZSdzIGEgc2Vzc2lvbiBzdGlsbCBhcm91bmQgdG8gdXNlISAqLworCisgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7CisKKyAgICByZXN1bHQgPSBzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIEZBTFNFKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGdlbmVyaWMgZG9uZSBmdW5jdGlvbiBmb3IgYm90aCBTQ1AgYW5kIFNGVFAgY2FsbGVkIGZyb20gdGhlaXIgc3BlY2lmaWMKKyAgIGRvbmUgZnVuY3Rpb25zICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU1NIUFJPVE8gKnNmdHBfc2NwID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKKworICBpZighc3RhdHVzKSB7CisgICAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IHN0YXR1czsKKworICBpZihzZnRwX3NjcCkKKyAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKKyAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsgLyogbm90IHVzZWQgKi8KKworICBpZighc3RhdHVzKQorICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9ORSk7CisKKyAgcmV0dXJuIHNzaF9kb25lKGNvbm4sIHN0YXR1cyk7CisKK30KKworc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG53cml0ZTsKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworCisgIC8qIGxpYnNzaDJfY2hhbm5lbF93cml0ZSgpIHJldHVybnMgaW50ISAqLworICBud3JpdGUgPSAoc3NpemVfdCkKKyAgICBsaWJzc2gyX2NoYW5uZWxfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOworCisgIGlmKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBud3JpdGUgPSAwOworICB9CisgIGVsc2UgaWYobndyaXRlIDwgTElCU1NIMl9FUlJPUl9OT05FKSB7CisgICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW53cml0ZSk7CisgICAgbndyaXRlID0gLTE7CisgIH0KKworICByZXR1cm4gbndyaXRlOworfQorCitzdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHNzaXplX3QgbnJlYWQ7CisgICh2b2lkKXNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KKworICAvKiBsaWJzc2gyX2NoYW5uZWxfcmVhZCgpIHJldHVybnMgaW50ICovCisgIG5yZWFkID0gKHNzaXplX3QpCisgICAgbGlic3NoMl9jaGFubmVsX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisgIGlmKG5yZWFkID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG5yZWFkID0gLTE7CisgIH0KKworICByZXR1cm4gbnJlYWQ7Cit9CisKKy8qCisgKiA9PT09PT09PT09PT09PT0gU0ZUUCA9PT09PT09PT09PT09PT0KKyAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc2Z0cF9wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNGVFAuIEdldCBhIGZpbGUvZGlyZWN0b3J5IGFjY29yZGluZyB0bworICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KKyAqLworCitzdGF0aWMKK0NVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLworCisgIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLworICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9JTklUKTsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKworICBpZigqZG9waGFzZV9kb25lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgorICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKKyAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBQb3N0IHF1b3RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgU0ZUUF9DTE9TRSBzdGF0ZSB0byBhdm9pZAorICAgICAgIGVycm9ycyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gb3BlbiBmaWxlIGhhbmRsZXMgZHVyaW5nIFBPU1RRVU9URQorICAgICAgIG9wZXJhdGlvbiAqLworICAgIGlmKCFwcmVtYXR1cmUgJiYgY29ubi0+ZGF0YS0+c2V0LnBvc3RxdW90ZSAmJiAhY29ubi0+Yml0cy5yZXRyeSkKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgfQorICByZXR1cm4gc3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGU7ICAgLyogbGlic3NoMl9zZnRwX3dyaXRlKCkgdXNlZCB0byByZXR1cm4gc2l6ZV90IGluIDAuMTQKKyAgICAgICAgICAgICAgICAgICAgICAgYnV0IGlzIGNoYW5nZWQgdG8gc3NpemVfdCBpbiAwLjE1LiBUaGVzZSBkYXlzIHdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgbGlic3NoMiAwLjE1Ki8KKyAgKHZvaWQpc29ja2luZGV4OworCisgIG53cml0ZSA9IGxpYnNzaDJfc2Z0cF93cml0ZShjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBtZW0sIGxlbik7CisKKyAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG53cml0ZSA9IDA7CisgIH0KKyAgZWxzZSBpZihud3JpdGUgPCBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKyAgICAqZXJyID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKChpbnQpbndyaXRlKTsKKyAgICBud3JpdGUgPSAtMTsKKyAgfQorCisgIHJldHVybiBud3JpdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gbnVtYmVyIG9mIHJlY2VpdmVkIChkZWNyeXB0ZWQpIGJ5dGVzCisgKiBvciA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBucmVhZDsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIG5yZWFkID0gbGlic3NoMl9zZnRwX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2hhbmRsZSwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKworICB9CisgIGVsc2UgaWYobnJlYWQgPCAwKSB7CisgICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW5yZWFkKTsKKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzZnRwX2xpYnNzaDJfc3RyZXJyb3IodW5zaWduZWQgbG9uZyBlcnIpCit7CisgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9GSUxFOgorICAgICAgcmV0dXJuICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9QRVJNSVNTSU9OX0RFTklFRDoKKyAgICAgIHJldHVybiAiUGVybWlzc2lvbiBkZW5pZWQiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0ZBSUxVUkU6CisgICAgICByZXR1cm4gIk9wZXJhdGlvbiBmYWlsZWQiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0JBRF9NRVNTQUdFOgorICAgICAgcmV0dXJuICJCYWQgbWVzc2FnZSBmcm9tIFNGVFAgc2VydmVyIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9OT19DT05ORUNUSU9OOgorICAgICAgcmV0dXJuICJOb3QgY29ubmVjdGVkIHRvIFNGVFAgc2VydmVyIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9DT05ORUNUSU9OX0xPU1Q6CisgICAgICByZXR1cm4gIkNvbm5lY3Rpb24gdG8gU0ZUUCBzZXJ2ZXIgbG9zdCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfT1BfVU5TVVBQT1JURUQ6CisgICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IFNGVFAgc2VydmVyIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9JTlZBTElEX0hBTkRMRToKKyAgICAgIHJldHVybiAiSW52YWxpZCBoYW5kbGUiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSDoKKyAgICAgIHJldHVybiAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKKyAgICAgIHJldHVybiAiRmlsZSBhbHJlYWR5IGV4aXN0cyI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfV1JJVEVfUFJPVEVDVDoKKyAgICAgIHJldHVybiAiRmlsZSBpcyB3cml0ZSBwcm90ZWN0ZWQiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX01FRElBOgorICAgICAgcmV0dXJuICJObyBtZWRpYSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1BBQ0VfT05fRklMRVNZU1RFTToKKyAgICAgIHJldHVybiAiRGlzayBmdWxsIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9RVU9UQV9FWENFRURFRDoKKyAgICAgIHJldHVybiAiVXNlciBxdW90YSBleGNlZWRlZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfVU5LTk9XTl9QUklOQ0lQTEU6CisgICAgICByZXR1cm4gIlVua25vd24gcHJpbmNpcGxlIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9MT0NLX0NPTkZsSUNUOgorICAgICAgcmV0dXJuICJGaWxlIGxvY2sgY29uZmxpY3QiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0RJUl9OT1RfRU1QVFk6CisgICAgICByZXR1cm4gIkRpcmVjdG9yeSBub3QgZW1wdHkiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PVF9BX0RJUkVDVE9SWToKKyAgICAgIHJldHVybiAiTm90IGEgZGlyZWN0b3J5IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9JTlZBTElEX0ZJTEVOQU1FOgorICAgICAgcmV0dXJuICJJbnZhbGlkIGZpbGVuYW1lIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9MSU5LX0xPT1A6CisgICAgICByZXR1cm4gIkxpbmsgcG9pbnRzIHRvIGl0c2VsZiI7CisgIH0KKyAgcmV0dXJuICJVbmtub3duIGVycm9yIGluIGxpYnNzaDIiOworfQorCitDVVJMY29kZSBDdXJsX3NzaF9pbml0KHZvaWQpCit7CisjaWZkZWYgSEFWRV9MSUJTU0gyX0lOSVQKKyAgaWYobGlic3NoMl9pbml0KDApKSB7CisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGxpYnNzaDJfaW5pdCBmYWlsZWRcbiIpKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKyNlbmRpZgorICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3ZvaWQgQ3VybF9zc2hfY2xlYW51cCh2b2lkKQoreworI2lmZGVmIEhBVkVfTElCU1NIMl9FWElUCisgICh2b2lkKWxpYnNzaDJfZXhpdCgpOworI2VuZGlmCit9CisKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgImxpYnNzaDIvJXMiLCBMSUJTU0gyX1ZFUlNJT04pOworfQorCisjZW5kaWYgLyogVVNFX0xJQlNTSDIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvc3NoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3NzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDk5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3NzaC5oCkBAIC0wLDAgKzEsMjY0IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1NTSF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1NTSF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfTElCU1NIMl9IKQorI2luY2x1ZGUgPGxpYnNzaDIuaD4KKyNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJTU0hfTElCU1NIX0gpCisjaW5jbHVkZSA8bGlic3NoL2xpYnNzaC5oPgorI2luY2x1ZGUgPGxpYnNzaC9zZnRwLmg+CisjZWxpZiBkZWZpbmVkKFVTRV9XT0xGU1NIKQorI2luY2x1ZGUgPHdvbGZzc2gvc3NoLmg+CisjaW5jbHVkZSA8d29sZnNzaC93b2xmc2Z0cC5oPgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTU0ggdW5pcXVlIHNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKyAgU1NIX05PX1NUQVRFID0gLTEsICAvKiBVc2VkIGZvciAibmV4dFN0YXRlIiBzbyBzYXkgdGhlcmUgaXMgbm9uZSAqLworICBTU0hfU1RPUCA9IDAsICAgICAgIC8qIGRvIG5vdGhpbmcgc3RhdGUsIHN0b3BzIHRoZSBzdGF0ZSBtYWNoaW5lICovCisKKyAgU1NIX0lOSVQsICAgICAgICAgICAvKiBGaXJzdCBzdGF0ZSBpbiBTU0gtQ09OTkVDVCAqLworICBTU0hfU19TVEFSVFVQLCAgICAgIC8qIFNlc3Npb24gc3RhcnR1cCAqLworICBTU0hfSE9TVEtFWSwgICAgICAgIC8qIHZlcmlmeSBob3N0a2V5ICovCisgIFNTSF9BVVRITElTVCwKKyAgU1NIX0FVVEhfUEtFWV9JTklULAorICBTU0hfQVVUSF9QS0VZLAorICBTU0hfQVVUSF9QQVNTX0lOSVQsCisgIFNTSF9BVVRIX1BBU1MsCisgIFNTSF9BVVRIX0FHRU5UX0lOSVQsIC8qIGluaXRpYWxpemUgdGhlbiB3YWl0IGZvciBjb25uZWN0aW9uIHRvIGFnZW50ICovCisgIFNTSF9BVVRIX0FHRU5UX0xJU1QsIC8qIGFzayBmb3IgbGlzdCB0aGVuIHdhaXQgZm9yIGVudGlyZSBsaXN0IHRvIGNvbWUgKi8KKyAgU1NIX0FVVEhfQUdFTlQsICAgICAgLyogYXR0ZW1wdCBvbmUga2V5IGF0IGEgdGltZSAqLworICBTU0hfQVVUSF9IT1NUX0lOSVQsCisgIFNTSF9BVVRIX0hPU1QsCisgIFNTSF9BVVRIX0tFWV9JTklULAorICBTU0hfQVVUSF9LRVksCisgIFNTSF9BVVRIX0dTU0FQSSwKKyAgU1NIX0FVVEhfRE9ORSwKKyAgU1NIX1NGVFBfSU5JVCwKKyAgU1NIX1NGVFBfUkVBTFBBVEgsICAgLyogTGFzdCBzdGF0ZSBpbiBTU0gtQ09OTkVDVCAqLworCisgIFNTSF9TRlRQX1FVT1RFX0lOSVQsIC8qIEZpcnN0IHN0YXRlIGluIFNGVFAtRE8gKi8KKyAgU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQsIC8qIChQb3NzaWJseSkgRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ET05FICovCisgIFNTSF9TRlRQX1FVT1RFLAorICBTU0hfU0ZUUF9ORVhUX1FVT1RFLAorICBTU0hfU0ZUUF9RVU9URV9TVEFULAorICBTU0hfU0ZUUF9RVU9URV9TRVRTVEFULAorICBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LLAorICBTU0hfU0ZUUF9RVU9URV9NS0RJUiwKKyAgU1NIX1NGVFBfUVVPVEVfUkVOQU1FLAorICBTU0hfU0ZUUF9RVU9URV9STURJUiwKKyAgU1NIX1NGVFBfUVVPVEVfVU5MSU5LLAorICBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTLAorICBTU0hfU0ZUUF9HRVRJTkZPLAorICBTU0hfU0ZUUF9GSUxFVElNRSwKKyAgU1NIX1NGVFBfVFJBTlNfSU5JVCwKKyAgU1NIX1NGVFBfVVBMT0FEX0lOSVQsCisgIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQsCisgIFNTSF9TRlRQX0NSRUFURV9ESVJTLAorICBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUiwKKyAgU1NIX1NGVFBfUkVBRERJUl9JTklULAorICBTU0hfU0ZUUF9SRUFERElSLAorICBTU0hfU0ZUUF9SRUFERElSX0xJTkssCisgIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NLAorICBTU0hfU0ZUUF9SRUFERElSX0RPTkUsCisgIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQsCisgIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQsIC8qIExhc3Qgc3RhdGUgaW4gU0ZUUC1ETyAqLworICBTU0hfU0ZUUF9DTE9TRSwgICAgLyogTGFzdCBzdGF0ZSBpbiBTRlRQLURPTkUgKi8KKyAgU1NIX1NGVFBfU0hVVERPV04sIC8qIEZpcnN0IHN0YXRlIGluIFNGVFAtRElTQ09OTkVDVCAqLworICBTU0hfU0NQX1RSQU5TX0lOSVQsIC8qIEZpcnN0IHN0YXRlIGluIFNDUC1ETyAqLworICBTU0hfU0NQX1VQTE9BRF9JTklULAorICBTU0hfU0NQX0RPV05MT0FEX0lOSVQsCisgIFNTSF9TQ1BfRE9XTkxPQUQsCisgIFNTSF9TQ1BfRE9ORSwKKyAgU1NIX1NDUF9TRU5EX0VPRiwKKyAgU1NIX1NDUF9XQUlUX0VPRiwKKyAgU1NIX1NDUF9XQUlUX0NMT1NFLAorICBTU0hfU0NQX0NIQU5ORUxfRlJFRSwgICAvKiBMYXN0IHN0YXRlIGluIFNDUC1ET05FICovCisgIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QsIC8qIEZpcnN0IHN0YXRlIGluIFNDUC1ESVNDT05ORUNUICovCisgIFNTSF9TRVNTSU9OX0ZSRUUsICAgICAgIC8qIExhc3Qgc3RhdGUgaW4gU0NQL1NGVFAtRElTQ09OTkVDVCAqLworICBTU0hfUVVJVCwKKyAgU1NIX0xBU1QgIC8qIG5ldmVyIHVzZWQgKi8KK30gc3Noc3RhdGU7CisKKy8qIHRoaXMgc3RydWN0IGlzIHVzZWQgaW4gdGhlIEhhbmRsZURhdGEgc3RydWN0IHdoaWNoIGlzIHBhcnQgb2YgdGhlCisgICBDdXJsX2Vhc3ksIHdoaWNoIG1lYW5zIHRoaXMgaXMgdXNlZCBvbiBhIHBlci1lYXN5IGhhbmRsZSBiYXNpcy4KKyAgIEV2ZXJ5dGhpbmcgdGhhdCBpcyBzdHJpY3RseSByZWxhdGVkIHRvIGEgY29ubmVjdGlvbiBpcyBiYW5uZWQgZnJvbSB0aGlzCisgICBzdHJ1Y3QuICovCitzdHJ1Y3QgU1NIUFJPVE8geworICBjaGFyICpwYXRoOyAgICAgICAgICAgICAgICAgIC8qIHRoZSBwYXRoIHdlIG9wZXJhdGUgb24gKi8KK307CisKKy8qIHNzaF9jb25uIGlzIHVzZWQgZm9yIHN0cnVjdCBjb25uZWN0aW9uLW9yaWVudGVkIGRhdGEgaW4gdGhlIGNvbm5lY3RkYXRhCisgICBzdHJ1Y3QgKi8KK3N0cnVjdCBzc2hfY29ubiB7CisgIGNvbnN0IGNoYXIgKmF1dGhsaXN0OyAgICAgICAvKiBMaXN0IG9mIGF1dGguIG1ldGhvZHMsIG1hbmFnZWQgYnkgbGlic3NoMiAqLworCisgIC8qIGNvbW1vbiAqLworICBjb25zdCBjaGFyICpwYXNzcGhyYXNlOyAgICAgLyogcGFzcy1waHJhc2UgdG8gdXNlICovCisgIGNoYXIgKnJzYV9wdWI7ICAgICAgICAgICAgICAvKiBwYXRoIG5hbWUgKi8KKyAgY2hhciAqcnNhOyAgICAgICAgICAgICAgICAgIC8qIHBhdGggbmFtZSAqLworICBib29sIGF1dGhlZDsgICAgICAgICAgICAgICAgLyogdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gYXV0aGVudGljYXRlZCBmaW5lICovCisgIHNzaHN0YXRlIHN0YXRlOyAgICAgICAgICAgICAvKiBhbHdheXMgdXNlIHNzaC5jOnN0YXRlKCkgdG8gY2hhbmdlIHN0YXRlISAqLworICBzc2hzdGF0ZSBuZXh0c3RhdGU7ICAgICAgICAgLyogdGhlIHN0YXRlIHRvIGdvdG8gYWZ0ZXIgc3RvcHBpbmcgKi8KKyAgQ1VSTGNvZGUgYWN0dWFsY29kZTsgICAgICAgIC8qIHRoZSBhY3R1YWwgZXJyb3IgY29kZSAqLworICBzdHJ1Y3QgY3VybF9zbGlzdCAqcXVvdGVfaXRlbTsgLyogZm9yIHRoZSBxdW90ZSBvcHRpb24gKi8KKyAgY2hhciAqcXVvdGVfcGF0aDE7ICAgICAgICAgIC8qIHR3byBnZW5lcmljIHBvaW50ZXJzIGZvciB0aGUgUVVPVEUgc3R1ZmYgKi8KKyAgY2hhciAqcXVvdGVfcGF0aDI7CisKKyAgYm9vbCBhY2NlcHRmYWlsOyAgICAgICAgICAgIC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgKGNvbnRpbnVlIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSBjb21tYW5kIGZhaWxzKSAqLworICBjaGFyICpob21lZGlyOyAgICAgICAgICAgICAgLyogd2hlbiBkb2luZyBTRlRQIHdlIGZpZ3VyZSBvdXQgaG9tZSBkaXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHBoYXNlICovCisgIGNoYXIgKnJlYWRkaXJfbGluZTsKKyAgLyogZW5kIG9mIFJFQURESVIgc3R1ZmYgKi8KKworICBpbnQgc2Vjb25kQ3JlYXRlRGlyczsgICAgICAgICAvKiBjb3VudGVyIHVzZSBieSB0aGUgY29kZSB0byBzZWUgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gY2hhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvL2NyZWF0ZSBhIGRpcmVjdG9yeSAqLworICBjaGFyICpzbGFzaF9wb3M7ICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRoZSBTRlRQX0NSRUFURV9ESVJTIHN0YXRlICovCisKKyAgaW50IG9yaWdfd2FpdGZvcjsgICAgICAgICAgICAgLyogZGVmYXVsdCBSRUFEL1dSSVRFIGJpdHMgd2FpdCBmb3IgKi8KKworI2lmIGRlZmluZWQoVVNFX0xJQlNTSCkKKyAgY2hhciAqcmVhZGRpcl9saW5rUGF0aDsKKyAgc2l6ZV90IHJlYWRkaXJfbGVuLCByZWFkZGlyX3RvdGFsTGVuLCByZWFkZGlyX2N1cnJMZW47CisvKiBvdXIgdmFyaWFibGVzICovCisgIHVuc2lnbmVkIGtiZF9zdGF0ZTsgLyogMCBvciAxICovCisgIHNzaF9rZXkgcHJpdmtleTsKKyAgc3NoX2tleSBwdWJrZXk7CisgIGludCBhdXRoX21ldGhvZHM7CisgIHNzaF9zZXNzaW9uIHNzaF9zZXNzaW9uOworICBzc2hfc2NwIHNjcF9zZXNzaW9uOworICBzZnRwX3Nlc3Npb24gc2Z0cF9zZXNzaW9uOworICBzZnRwX2ZpbGUgc2Z0cF9maWxlOworICBzZnRwX2RpciBzZnRwX2RpcjsKKworICB1bnNpZ25lZCBzZnRwX3JlY3Zfc3RhdGU7IC8qIDAgb3IgMSAqLworICBpbnQgc2Z0cF9maWxlX2luZGV4OyAvKiBmb3IgYXN5bmMgcmVhZCAqLworICBzZnRwX2F0dHJpYnV0ZXMgcmVhZGRpcl9hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUCByZWFkZGlyIGFjdGlvbnMgKi8KKyAgc2Z0cF9hdHRyaWJ1dGVzIHJlYWRkaXJfbGlua19hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUCByZWFkZGlyIGFjdGlvbnMgKi8KKyAgc2Z0cF9hdHRyaWJ1dGVzIHF1b3RlX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQX1FVT1RFIHN0YXRlICovCisKKyAgY29uc3QgY2hhciAqcmVhZGRpcl9maWxlbmFtZTsgLyogcG9pbnRzIHdpdGhpbiByZWFkZGlyX2F0dHJzICovCisgIGNvbnN0IGNoYXIgKnJlYWRkaXJfbG9uZ2VudHJ5OworICBjaGFyICpyZWFkZGlyX3RtcDsKKyNlbGlmIGRlZmluZWQoVVNFX0xJQlNTSDIpCisgIHN0cnVjdCBkeW5idWYgcmVhZGRpcl9saW5rOworICBzdHJ1Y3QgZHluYnVmIHJlYWRkaXI7CisgIGNoYXIgKnJlYWRkaXJfZmlsZW5hbWU7CisgIGNoYXIgKnJlYWRkaXJfbG9uZ2VudHJ5OworCisgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIHF1b3RlX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQX1FVT1RFIHN0YXRlICovCisKKyAgLyogSGVyZSdzIGEgc2V0IG9mIHN0cnVjdCBtZW1iZXJzIHVzZWQgYnkgdGhlIFNGVFBfUkVBRERJUiBzdGF0ZSAqLworICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyByZWFkZGlyX2F0dHJzOworICBMSUJTU0gyX1NFU1NJT04gKnNzaF9zZXNzaW9uOyAvKiBTZWN1cmUgU2hlbGwgc2Vzc2lvbiAqLworICBMSUJTU0gyX0NIQU5ORUwgKnNzaF9jaGFubmVsOyAvKiBTZWN1cmUgU2hlbGwgY2hhbm5lbCBoYW5kbGUgKi8KKyAgTElCU1NIMl9TRlRQICpzZnRwX3Nlc3Npb247ICAgLyogU0ZUUCBoYW5kbGUgKi8KKyAgTElCU1NIMl9TRlRQX0hBTkRMRSAqc2Z0cF9oYW5kbGU7CisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCisgIExJQlNTSDJfQUdFTlQgKnNzaF9hZ2VudDsgICAgIC8qIHByb3h5IHRvIHNzaC1hZ2VudC9wYWdlYW50ICovCisgIHN0cnVjdCBsaWJzc2gyX2FnZW50X3B1YmxpY2tleSAqc3NoYWdlbnRfaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3NoYWdlbnRfcHJldl9pZGVudGl0eTsKKyNlbmRpZgorCisgIC8qIG5vdGUgdGhhdCBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSBpcyBhIGRlZmluZSBzZXQgaW4gdGhlIGxpYnNzaDIuaAorICAgICBoZWFkZXIgKi8KKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQorICBMSUJTU0gyX0tOT1dOSE9TVFMgKmtoOworI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVTRV9XT0xGU1NIKQorICBXT0xGU1NIICpzc2hfc2Vzc2lvbjsKKyAgV09MRlNTSF9DVFggKmN0eDsKKyAgd29yZDMyIGhhbmRsZVN6OworICBieXRlIGhhbmRsZVtXT0xGU1NIX01BWF9IQU5ETEVdOworICBjdXJsX29mZl90IG9mZnNldDsKKyNlbmRpZiAvKiBVU0VfTElCU1NIICovCit9OworCisjaWYgZGVmaW5lZChVU0VfTElCU1NIKQorCisjZGVmaW5lIENVUkxfTElCU1NIX1ZFUlNJT04gc3NoX3ZlcnNpb24oMCkKKworI2VsaWYgZGVmaW5lZChVU0VfTElCU1NIMikKKworLyogRmVhdHVyZSBkZXRlY3Rpb24gYmFzZWQgb24gdmVyc2lvbiBudW1iZXJzIHRvIGJldHRlciB3b3JrIHdpdGgKKyAgIG5vbi1jb25maWd1cmUgcGxhdGZvcm1zICovCisKKyNpZiAhZGVmaW5lZChMSUJTU0gyX1ZFUlNJT05fTlVNKSB8fCAoTElCU1NIMl9WRVJTSU9OX05VTSA8IDB4MDAxMDAwKQorIyAgZXJyb3IgIlNDUC9TRlRQIHByb3RvY29scyByZXF1aXJlIGxpYnNzaDIgMC4xNiBvciBsYXRlciIKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDAwMAorI2RlZmluZSBIQVZFX0xJQlNTSDJfU0ZUUF9TRUVLNjQgMQorI2VuZGlmCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMTAwCisjZGVmaW5lIEhBVkVfTElCU1NIMl9WRVJTSU9OIDEKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwNQorI2RlZmluZSBIQVZFX0xJQlNTSDJfSU5JVCAxCisjZGVmaW5lIEhBVkVfTElCU1NIMl9FWElUIDEKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwNgorI2RlZmluZSBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0NIRUNLUCAxCisjZGVmaW5lIEhBVkVfTElCU1NIMl9TQ1BfU0VORDY0IDEKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwOAorI2RlZmluZSBIQVZFX0xJQlNTSDJfU0VTU0lPTl9IQU5EU0hBS0UgMQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfVkVSU0lPTgorLyogZ2V0IGl0IHJ1bi10aW1lIGlmIHBvc3NpYmxlICovCisjZGVmaW5lIENVUkxfTElCU1NIMl9WRVJTSU9OIGxpYnNzaDJfdmVyc2lvbigwKQorI2Vsc2UKKy8qIHVzZSBidWlsZC10aW1lIGlmIHJ1bi10aW1lIG5vdCBwb3NzaWJsZSAqLworI2RlZmluZSBDVVJMX0xJQlNTSDJfVkVSU0lPTiBMSUJTU0gyX1ZFUlNJT04KKyNlbmRpZgorCisjZW5kaWYgLyogVVNFX0xJQlNTSDIgKi8KKworI2lmZGVmIFVTRV9TU0gKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwOworCisvKiBnZW5lcmljIFNTSCBiYWNrZW5kIGZ1bmN0aW9ucyAqLworQ1VSTGNvZGUgQ3VybF9zc2hfaW5pdCh2b2lkKTsKK3ZvaWQgQ3VybF9zc2hfY2xlYW51cCh2b2lkKTsKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbik7CisjZWxzZQorLyogZm9yIG5vbi1TU0ggYnVpbGRzICovCisjZGVmaW5lIEN1cmxfc3NoX2NsZWFudXAoKQorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TU0hfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC93b2xmc3NoLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JiYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC93b2xmc3NoLmMKQEAgLTAsMCArMSwxMTU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfV09MRlNTSAorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDx3b2xmc3NoL3NzaC5oPgorI2luY2x1ZGUgPHdvbGZzc2gvd29sZnNmdHAuaD4KKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJjdXJsX3BhdGguaCIKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLworI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSB3c3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CisjaWYgMAorc3RhdGljIENVUkxjb2RlIHdzY3BfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgd3NjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIENVUkxjb2RlIHdzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKKyNlbmRpZgorc3RhdGljIENVUkxjb2RlIHdzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKK3N0YXRpYyBpbnQgd3NzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spOworc3RhdGljIGludCB3c3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spOworc3RhdGljIENVUkxjb2RlIHdzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisjaWYgMAorLyoKKyAqIFNDUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcCA9IHsKKyAgIlNDUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgd3NzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHdzc2hfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgd3NjcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICB3c3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgd3NzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIHdzY3BfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgd3NzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIHdzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIHdzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHdzY3BfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KKyAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19TQ1AsICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgorICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisjZW5kaWYKKworLyoKKyAqIFNGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwID0geworICAiU0ZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICB3c3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgd3NzaF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICB3c2Z0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHdzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICB3c3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgd3NmdHBfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICB3c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgd3NzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgd3NzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgd3NmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NGVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKy8qCisgKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKKyAqLworLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KK3N0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKKyAgICAiU1NIX1NUT1AiLAorICAgICJTU0hfSU5JVCIsCisgICAgIlNTSF9TX1NUQVJUVVAiLAorICAgICJTU0hfSE9TVEtFWSIsCisgICAgIlNTSF9BVVRITElTVCIsCisgICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BLRVkiLAorICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAorICAgICJTU0hfQVVUSF9QQVNTIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAorICAgICJTU0hfQVVUSF9BR0VOVCIsCisgICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCisgICAgIlNTSF9BVVRIX0hPU1QiLAorICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX0tFWSIsCisgICAgIlNTSF9BVVRIX0dTU0FQSSIsCisgICAgIlNTSF9BVVRIX0RPTkUiLAorICAgICJTU0hfU0ZUUF9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAorICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKKyAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9RVU9URSIsCisgICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCisgICAgIlNTSF9TRlRQX0dFVElORk8iLAorICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCisgICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAorICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUiIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAorICAgICJTU0hfU0ZUUF9DTE9TRSIsCisgICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKKyAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKKyAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAorICAgICJTU0hfU0NQX0RPTkUiLAorICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCisgICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCisgICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKKyAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCisgICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAorICAgICJRVUlUIgorICB9OworCisgIC8qIGEgcHJlY2F1dGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpc3RzIGFyZSBpbiBzeW5jICovCisgIERFQlVHQVNTRVJUKHNpemVvZihuYW1lcykvc2l6ZW9mKG5hbWVzWzBdKSA9PSBTU0hfTEFTVCk7CisKKyAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAid29sZnNzaCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlc1xuIiwKKyAgICAgICAgICAodm9pZCAqKXNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdKTsKKyAgfQorI2VuZGlmCisKKyAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKK30KKworc3RhdGljIHNzaXplX3Qgd3NjcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHNzaXplX3QgbndyaXRlID0gMDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworICAodm9pZCltZW07CisgICh2b2lkKWxlbjsKKyAgKHZvaWQpZXJyOworCisgIHJldHVybiBud3JpdGU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG5yZWFkID0gMDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworICAodm9pZCltZW07CisgICh2b2lkKWxlbjsKKyAgKHZvaWQpZXJyOworCisgIHJldHVybiBucmVhZDsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCB3c2Z0cF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgd29yZDMyIG9mZnNldFsyXTsKKyAgaW50IHJjOworICAodm9pZClzb2NraW5kZXg7CisKKyAgb2Zmc2V0WzBdID0gKHdvcmQzMilzc2hjLT5vZmZzZXQmMHhGRkZGRkZGRjsKKyAgb2Zmc2V0WzFdID0gKHdvcmQzMikoc3NoYy0+b2Zmc2V0Pj4zMikmMHhGRkZGRkZGRjsKKworICByYyA9IHdvbGZTU0hfU0ZUUF9TZW5kV3JpdGVQYWNrZXQoc3NoYy0+c3NoX3Nlc3Npb24sIHNzaGMtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPmhhbmRsZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlICopbWVtLCAod29yZDMyKWxlbik7CisKKyAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIHJldHVybiAtMTsKKyAgfQorICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaWYocmMgPCAwKSB7CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIndvbGZTU0hfU0ZUUF9TZW5kV3JpdGVQYWNrZXQgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgREVCVUdBU1NFUlQocmMgPT0gKGludClsZW4pOworICBpbmZvZihjb25uLT5kYXRhLCAic2VudCAlemQgYnl0ZXMgU0ZUUCBmcm9tIG9mZnNldCAlemRcbiIsCisgICAgICAgIGxlbiwgc3NoYy0+b2Zmc2V0KTsKKyAgc3NoYy0+b2Zmc2V0ICs9IGxlbjsKKyAgcmV0dXJuIChzc2l6ZV90KXJjOworfQorCisvKgorICogUmV0dXJuIG51bWJlciBvZiByZWNlaXZlZCAoZGVjcnlwdGVkKSBieXRlcworICogb3IgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIHNzaXplX3Qgd3NmdHBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgaW50IHJjOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgd29yZDMyIG9mZnNldFsyXTsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIG9mZnNldFswXSA9ICh3b3JkMzIpc3NoYy0+b2Zmc2V0JjB4RkZGRkZGRkY7CisgIG9mZnNldFsxXSA9ICh3b3JkMzIpKHNzaGMtPm9mZnNldD4+MzIpJjB4RkZGRkZGRkY7CisKKyAgcmMgPSB3b2xmU1NIX1NGVFBfU2VuZFJlYWRQYWNrZXQoc3NoYy0+c3NoX3Nlc3Npb24sIHNzaGMtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+aGFuZGxlU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlICopbWVtLCAod29yZDMyKWxlbik7CisgIGlmKHJjID09IFdTX0ZBVEFMX0VSUk9SKQorICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgREVCVUdBU1NFUlQocmMgPD0gKGludClsZW4pOworCisgIGlmKHJjIDwgMCkgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJ3b2xmU1NIX1NGVFBfU2VuZFJlYWRQYWNrZXQgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgc3NoYy0+b2Zmc2V0ICs9IGxlbjsKKworICByZXR1cm4gKHNzaXplX3QpcmM7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgYW5kIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTU0hQUk9UTyAqc3NoOworCisgIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOworICBpZighc3NoKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIEN1cmxfcmVjdiB3c2NwX3JlY3YsIHdzZnRwX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHdzY3Bfc2VuZCwgd3NmdHBfc2VuZDsKKworc3RhdGljIGludCB1c2VyYXV0aChieXRlIGF1dGh0eXBlLAorICAgICAgICAgICAgICAgICAgICBXU19Vc2VyQXV0aERhdGEqIGF1dGhkYXRhLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpjdHgpCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IGN0eDsKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJ3b2xmc3NoIGNhbGxiYWNrOiB0eXBlICVzXG4iLAorICAgICAgICAgICAgICAgYXV0aHR5cGUgPT0gV09MRlNTSF9VU0VSQVVUSF9QQVNTV09SRCA/ICJQQVNTV09SRCIgOgorICAgICAgICAgICAgICAgIlBVQkxJQ0NLRVkiKSk7CisgIGlmKGF1dGh0eXBlID09IFdPTEZTU0hfVVNFUkFVVEhfUEFTU1dPUkQpIHsKKyAgICBhdXRoZGF0YS0+c2YucGFzc3dvcmQucGFzc3dvcmQgPSAoYnl0ZSAqKWNvbm4tPnBhc3N3ZDsKKyAgICBhdXRoZGF0YS0+c2YucGFzc3dvcmQucGFzc3dvcmRTeiA9ICh3b3JkMzIpIHN0cmxlbihjb25uLT5wYXNzd2QpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgaW50IHJjOworCisgIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmKCFkYXRhLT5yZXEucHJvdG9wKQorICAgIHdzc2hfc2V0dXBfY29ubmVjdGlvbihjb25uKTsKKworICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0CisgICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KKyAgY29ubmtlZXAoY29ubiwgIlNTSCBkZWZhdWx0Iik7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSB3c2NwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSB3c2NwX3NlbmQ7CisgIH0KKyAgZWxzZSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSB3c2Z0cF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gd3NmdHBfc2VuZDsKKyAgfQorICBzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIHNzaGMtPmN0eCA9IHdvbGZTU0hfQ1RYX25ldyhXT0xGU1NIX0VORFBPSU5UX0NMSUVOVCwgTlVMTCk7CisgIGlmKCFzc2hjLT5jdHgpIHsKKyAgICBmYWlsZihkYXRhLCAiTm8gd29sZlNTSCBjb250ZXh0Iik7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIHNzaGMtPnNzaF9zZXNzaW9uID0gd29sZlNTSF9uZXcoc3NoYy0+Y3R4KTsKKyAgaWYoc3NoYy0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJObyB3b2xmU1NIIHNlc3Npb24iKTsKKyAgICBnb3RvIGVycm9yOworICB9CisKKyAgcmMgPSB3b2xmU1NIX1NldFVzZXJuYW1lKHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyKTsKKyAgaWYocmMgIT0gV1NfU1VDQ0VTUykgeworICAgIGZhaWxmKGRhdGEsICJ3b2xmU1NIIGZhaWxlZCB0byBzZXQgdXNlciBuYW1lIik7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIC8qIHNldCBjYWxsYmFjayBmb3IgYXV0aGVudGljYXRpb24gKi8KKyAgd29sZlNTSF9TZXRVc2VyQXV0aChzc2hjLT5jdHgsIHVzZXJhdXRoKTsKKyAgd29sZlNTSF9TZXRVc2VyQXV0aEN0eChzc2hjLT5zc2hfc2Vzc2lvbiwgY29ubik7CisKKyAgcmMgPSB3b2xmU1NIX3NldF9mZChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKKyAgaWYocmMpIHsKKyAgICBmYWlsZihkYXRhLCAid29sZlNTSCBmYWlsZWQgdG8gc2V0IHNvY2tldCIpOworICAgIGdvdG8gZXJyb3I7CisgIH0KKworI2lmIDAKKyAgd29sZlNTSF9EZWJ1Z2dpbmdfT04oKTsKKyNlbmRpZgorCisgICpkb25lID0gVFJVRTsKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQorICAgIHN0YXRlKGNvbm4sIFNTSF9JTklUKTsKKyAgZWxzZQorICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOworCisgIHJldHVybiB3c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKKyAgZXJyb3I6CisgIHdvbGZTU0hfZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgIHdvbGZTU0hfQ1RYX2ZyZWUoc3NoYy0+Y3R4KTsKKyAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworfQorCisvKgorICogd3NzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0CisgKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKKyAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIHdvbGZzc2ggZnVuY3Rpb24gcmV0dXJucyBFQUdBSU4gbWVhbmluZyBpdAorICogd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQorICovCisKK3N0YXRpYyBDVVJMY29kZSB3c3NoX3N0YXRlbWFjaF9hY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpibG9jaykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFNTSFBST1RPICpzZnRwX3NjcCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIFdTX1NGVFBOQU1FICpuYW1lOworICBpbnQgcmMgPSAwOworICAqYmxvY2sgPSBGQUxTRTsgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KKworICBkbyB7CisgICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7CisgICAgY2FzZSBTU0hfSU5JVDoKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TX1NUQVJUVVApOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TX1NUQVJUVVA6CisgICAgICByYyA9IHdvbGZTU0hfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBXU19TVUNDRVNTKQorICAgICAgICByYyA9IHdvbGZTU0hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyAhPSBXU19TVUNDRVNTKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTSDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJ3b2xmc3NoIGNvbm5lY3RlZCFcbiIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfU1RPUDoKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9JTklUOgorICAgICAgcmMgPSB3b2xmU1NIX1NGVFBfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBXU19TVUNDRVNTKQorICAgICAgICByYyA9IHdvbGZTU0hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19TVUNDRVNTKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJ3b2xmc3NoIFNGVFAgY29ubmVjdGVkIVxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQUxQQVRIKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIGNvbm5lY3QgZXJyb3IgJWQiLCByYyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0g7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTSF9TRlRQX1JFQUxQQVRIOgorICAgICAgbmFtZSA9IHdvbGZTU0hfU0ZUUF9SZWFsUGF0aChzc2hjLT5zc2hfc2Vzc2lvbiwgKGNoYXIgKikiLiIpOworICAgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYobmFtZSAmJiAocmMgPT0gV1NfU1VDQ0VTUykpIHsKKyAgICAgICAgc3NoYy0+aG9tZWRpciA9IG1hbGxvYyhuYW1lLT5mU3ogKyAxKTsKKyAgICAgICAgaWYoIXNzaGMtPmhvbWVkaXIpIHsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBtZW1jcHkoc3NoYy0+aG9tZWRpciwgbmFtZS0+Zk5hbWUsIG5hbWUtPmZTeik7CisgICAgICAgICAgc3NoYy0+aG9tZWRpcltuYW1lLT5mU3pdID0gMDsKKyAgICAgICAgICBpbmZvZihkYXRhLCAid29sZnNzaCBTRlRQIHJlYWxwYXRoIHN1Y2NlZWRlZCFcbiIpOworICAgICAgICB9CisgICAgICAgIHdvbGZTU0hfU0ZUUE5BTUVfbGlzdF9mcmVlKG5hbWUpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGZhaWxmKGRhdGEsICJ3b2xmc3NoIFNGVFAgcmVhbHBhdGggJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9JTklUOgorICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX1NGVFBfR0VUSU5GTzoKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfU0ZUUF9UUkFOU19JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmKHNmdHBfc2NwLT5wYXRoW3N0cmxlbihzZnRwX3NjcC0+cGF0aCktMV0gPT0gJy8nKQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfSU5JVCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX1NGVFBfVVBMT0FEX0lOSVQ6IHsKKyAgICAgIHdvcmQzMiBmbGFnczsKKyAgICAgIFdTX1NGVFBfRklMRUFUUkIgY3JlYXRlYXR0cnM7CisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBXU19TRlRQX0ZJTEVBVFJCIGF0dHJzOworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9TVEFUKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRycyk7CisgICAgICAgICAgaWYocmMgIT0gV1NfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjdXJsX29mZl90IHNpemUgPSAoKGN1cmxfb2ZmX3QpYXR0cnMuc3pbMV0gPDwgMzIpIHwgYXR0cnMuc3pbMF07CisgICAgICAgICAgICBpZihzaXplIDwgMCkgeworICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gc2l6ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9hcHBlbmQpCisgICAgICAgIC8qIFRyeSB0byBvcGVuIGZvciBhcHBlbmQsIGJ1dCBjcmVhdGUgaWYgbm9uZXhpc3RpbmcgKi8KKyAgICAgICAgZmxhZ3MgPSBXT0xGU1NIX0ZYRl9XUklURXxXT0xGU1NIX0ZYRl9DUkVBVHxXT0xGU1NIX0ZYRl9BUFBFTkQ7CisgICAgICBlbHNlIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkKKyAgICAgICAgLyogSWYgd2UgaGF2ZSByZXN0YXJ0IHBvc2l0aW9uIHRoZW4gb3BlbiBmb3IgYXBwZW5kICovCisgICAgICAgIGZsYWdzID0gV09MRlNTSF9GWEZfV1JJVEV8V09MRlNTSF9GWEZfQVBQRU5EOworICAgICAgZWxzZQorICAgICAgICAvKiBDbGVhciBmaWxlIGJlZm9yZSB3cml0aW5nIChub3JtYWwgYmVoYXZpb3VyKSAqLworICAgICAgICBmbGFncyA9IFdPTEZTU0hfRlhGX1dSSVRFfFdPTEZTU0hfRlhGX0NSRUFUfFdPTEZTU0hfRlhGX1RSVU5DOworCisgICAgICBtZW1zZXQoJmNyZWF0ZWF0dHJzLCAwLCBzaXplb2YoY3JlYXRlYXR0cnMpKTsKKyAgICAgIGNyZWF0ZWF0dHJzLnBlciA9ICh3b3JkMzIpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zOworICAgICAgc3NoYy0+aGFuZGxlU3ogPSBzaXplb2Yoc3NoYy0+aGFuZGxlKTsKKyAgICAgIHJjID0gd29sZlNTSF9TRlRQX09wZW4oc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmNyZWF0ZWF0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5oYW5kbGUsICZzc2hjLT5oYW5kbGVTeik7CisgICAgICBpZihyYyA9PSBXU19GQVRBTF9FUlJPUikKKyAgICAgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfU1VDQ0VTUykgeworICAgICAgICBpbmZvZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gc3VjY2VlZGVkIVxuIik7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIndvbGZzc2ggU0ZUUCB1cGxvYWQgb3BlbiBmYWlsZWQ6ICVkIiwgcmMpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NIOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCk7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgYSByZXN0YXJ0IHBvaW50IHRoZW4gd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBjb3JyZWN0CisgICAgICAgICBwb3NpdGlvbi4gKi8KKyAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkgeworICAgICAgICAvKiBMZXQncyByZWFkIG9mZiB0aGUgcHJvcGVyIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dC4gKi8KKyAgICAgICAgaW50IHNlZWtlcnIgPSBDVVJMX1NFRUtGVU5DX09LOworICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKKyAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KKyAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgorICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkOworICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CisgICAgICAgICAgICBhY3R1YWxseXJlYWQgPSBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluKTsKKyAgICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgICB9CisKKyAgICAgICAgc3NoYy0+b2Zmc2V0ICs9IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgfQorICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgfQorICAgICAgLyogdXBsb2FkIGRhdGEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKKyAgICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCisgICAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiBzZnRwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOworCisgICAgICAgIC8qIHNpbmNlIHdlIGRvbid0IHJlYWxseSB3YWl0IGZvciBhbnl0aGluZyBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRoZQorICAgICAgICAgICBzdGF0ZSBtYWNoaW5lIHRvIG1vdmUgb24gYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBzZXQgYSB2ZXJ5IHNob3J0CisgICAgICAgICAgIHRpbWVvdXQgaGVyZSAqLworICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfSU5JVDoKKyAgICAgIHNzaGMtPmhhbmRsZVN6ID0gc2l6ZW9mKHNzaGMtPmhhbmRsZSk7CisgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9PcGVuKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTSF9GWEZfUkVBRCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+aGFuZGxlLCAmc3NoYy0+aGFuZGxlU3opOworICAgICAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gV1NfV0FOVF9SRUFEKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfV0FOVF9XUklURSkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1NVQ0NFU1MpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIndvbGZzc2ggU0ZUUCBvcGVuIHN1Y2NlZWRlZCFcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorCisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gZmFpbGVkOiAlZCIsIHJjKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0g7CisKKyAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQ6IHsKKyAgICAgIFdTX1NGVFBfRklMRUFUUkIgYXR0cnM7CisgICAgICBjdXJsX29mZl90IHNpemU7CisKKyAgICAgIHJjID0gd29sZlNTSF9TRlRQX1NUQVQoc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLCAmYXR0cnMpOworICAgICAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gV1NfV0FOVF9SRUFEKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfV0FOVF9XUklURSkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1NVQ0NFU1MpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIndvbGZzc2ggU1RBVCBzdWNjZWVkZWQhXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gZmFpbGVkOiAlZCIsIHJjKTsKKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0g7CisgICAgICB9CisKKyAgICAgIHNpemUgPSAoKGN1cmxfb2ZmX3QpYXR0cnMuc3pbMV0gPDwzMikgfCBhdHRycy5zelswXTsKKworICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplOworICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gc2l6ZTsKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKworICAgICAgaW5mb2YoZGF0YSwgIlNGVFAgZG93bmxvYWQgJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiIGJ5dGVzXG4iLCBzaXplKTsKKworICAgICAgLyogV2UgY2Fubm90IHNlZWsgd2l0aCB3b2xmU1NIIHNvIHJlc3VtaW5nIGFuZCByYW5nZSByZXF1ZXN0cyBhcmUgbm90CisgICAgICAgICBwb3NzaWJsZSAqLworICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlX3JhbmdlIHx8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJ3b2xmU1NIIGNhbm5vdCBkbyByYW5nZS9zZWVrIG9uIFNGVFBcbiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgIH0KKworICAgICAgLyogU2V0dXAgdGhlIGFjdHVhbCBkb3dubG9hZCAqLworICAgICAgaWYoZGF0YS0+cmVxLnNpemUgPT0gMCkgeworICAgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAgICAgICBpbmZvZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgZG93bmxvYWRlZFxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKKworICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXI7IHRoZSBjbG9zZSBzdGF0ZSBzaG91bGQgYmUgZW50ZXJlZAorICAgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZXJyb3Igb2NjdXJzICovCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTU0hfU0ZUUF9DTE9TRToKKyAgICAgIGlmKHNzaGMtPmhhbmRsZVN6KQorICAgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9DbG9zZShzc2hjLT5zc2hfc2Vzc2lvbiwgc3NoYy0+aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5oYW5kbGVTeik7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gV1NfU1VDQ0VTUzsgLyogZGlyZWN0b3J5IGxpc3RpbmcgKi8KKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19TVUNDRVNTKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorCisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIENMT1NFIGZhaWxlZDogJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0lOSVQ6CisgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOworICAgICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgorICAgICAgbmFtZSA9IHdvbGZTU0hfU0ZUUF9MUyhzc2hjLT5zc2hfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYoIW5hbWUpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgZWxzZQorICAgICAgICByYyA9IFdTX1NVQ0NFU1M7CisKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihuYW1lICYmIChyYyA9PSBXU19TVUNDRVNTKSkgeworICAgICAgICBXU19TRlRQTkFNRSAqb3JpZ25hbWUgPSBuYW1lOworICAgICAgICByZXN1bHQgPSBDVVJMRV9PSzsKKyAgICAgICAgd2hpbGUobmFtZSkgeworICAgICAgICAgIGNoYXIgKmxpbmUgPSBhcHJpbnRmKCIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+Zk5hbWUgOiBuYW1lLT5sTmFtZSk7CisgICAgICAgICAgaWYobGluZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIHN0cmxlbihsaW5lKSk7CisgICAgICAgICAgZnJlZShsaW5lKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgbmFtZSA9IG5hbWUtPm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgd29sZlNTSF9TRlRQTkFNRV9saXN0X2ZyZWUob3JpZ25hbWUpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIGxzIGZhaWxlZDogJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7CisgICAgICB3b2xmU1NIX2ZyZWUoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgd29sZlNTSF9DVFhfZnJlZShzc2hjLT5jdHgpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIH0gd2hpbGUoIXJjICYmIChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBib29sIGJsb2NrOyAvKiB3ZSBzdG9yZSB0aGUgc3RhdHVzIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIGEgc3NoX2dldHNvY2soKQorICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAqLworICBkbyB7CisgICAgcmVzdWx0ID0gd3NzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7CisgICAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOworICAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IsIGl0IGlzbid0IGRvbmUgYW5kIGl0IGRpZG4ndCBFV09VTERCTE9DSywgdGhlbgorICAgICAgIHRyeSBhZ2FpbiAqLworICAgIGlmKCpkb25lKSB7CisgICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIndzc2hfc3RhdGVtYWNoX2FjdCBzYXlzIERPTkVcbiIpKTsKKyAgICB9CisgIH0gd2hpbGUoIXJlc3VsdCAmJiAhKmRvbmUgJiYgIWJsb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMKK0NVUkxjb2RlIHdzY3BfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpY29ubmVjdGVkOworICAodm9pZClkb3BoYXNlX2RvbmU7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljCitDVVJMY29kZSB3c2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIHJlc3VsdCA9IHdzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGUgRE8gZnVuY3Rpb24gaXMgZ2VuZXJpYyBmb3IgYm90aCBwcm90b2NvbHMuCisgKi8KK3N0YXRpYyBDVVJMY29kZSB3c3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIGNvbm5lY3RlZCA9IDA7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisgIGRhdGEtPnJlcS5zaXplID0gLTE7IC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLworICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7IC8qIHJlc2V0IGVycm9yIGNvZGUgKi8KKyAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAqLworCisgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAtMSk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQorICAgIHJlc3VsdCA9IHdzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSB3c2Z0cF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsICBkb25lKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaXNjb25uZWN0KQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgeworICAgIGJvb2wgYmxvY2s7CisgICAgdGltZWRpZmZfdCBsZWZ0ID0gMTAwMDsKKyAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKworICAgIHJlc3VsdCA9IHdzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYoIWRpc2Nvbm5lY3QpIHsKKyAgICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBub3cpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKworICAgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgRkFMU0UpOworICAgICAgaWYobGVmdCA8IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZighcmVzdWx0KSB7CisgICAgICBpbnQgZGlyID0gY29ubi0+d2FpdGZvcjsKKyAgICAgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgY3VybF9zb2NrZXRfdCBmZF93cml0ZSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGlmKGRpciA9PSBLRUVQX1JFQ1YpCisgICAgICAgIGZkX3JlYWQgPSBzb2NrOworICAgICAgZWxzZSBpZihkaXIgPT0gS0VFUF9TRU5EKQorICAgICAgICBmZF93cml0ZSA9IHNvY2s7CisKKyAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCisgICAgICAodm9pZClDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6bGVmdCk7IC8qIGlnbm9yZSByZXN1bHQgKi8KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBnZW5lcmljIGRvbmUgZnVuY3Rpb24gZm9yIGJvdGggU0NQIGFuZCBTRlRQIGNhbGxlZCBmcm9tIHRoZWlyIHNwZWNpZmljCisgICBkb25lIGZ1bmN0aW9ucyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTU0hQUk9UTyAqc2Z0cF9zY3AgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgICByZXN1bHQgPSB3c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IHN0YXR1czsKKworICBpZihzZnRwX3NjcCkKKyAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKKyAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIDAKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlIGNvZGUsIGJvb2wgcHJlbWF0dXJlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpY29kZTsKKyAgKHZvaWQpcHJlbWF0dXJlOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpZG9waGFzZV9kb25lOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisgICh2b2lkKWRlYWRfY29ubmVjdGlvbjsKKworICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgY29kZSwgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsKKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworCisgIHJldHVybiB3c3NoX2RvbmUoY29ubiwgY29kZSk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IHdzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgd3NmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWRlYWQ7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gd3NzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgIH0KKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgcmV0dXJuIHdzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOworfQorCitzdGF0aWMgaW50IHdzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7CisgIGludCBkaXIgPSBjb25uLT53YWl0Zm9yOworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoZGlyID09IEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisgIGVsc2UgaWYoZGlyID09IEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7Cit9CisKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgIndvbGZzc2gvJXMiLCBMSUJXT0xGU1NIX1ZFUlNJT05fU1RSSU5HKTsKK30KKworQ1VSTGNvZGUgQ3VybF9zc2hfaW5pdCh2b2lkKQoreworICBpZihXU19TVUNDRVNTICE9IHdvbGZTU0hfSW5pdCgpKSB7CisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHdvbGZTU0hfSW5pdCBmYWlsZWRcbiIpKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9Cit2b2lkIEN1cmxfc3NoX2NsZWFudXAodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIFVTRV9XT0xGU1NIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvd29sZnNzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjlhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1dPTEZTU0hfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9XT0xGU1NIX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHA7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9XT0xGU1NIX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4ZTE2YQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5jCkBAIC0wLDAgKzEsODcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBNaWNoYWVsIEZvcm5leSwgPG1mb3JuZXlAbWZvcm5leS5vcmc+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfQkVBUlNTTAorCisjaW5jbHVkZSA8YmVhcnNzbC5oPgorCisjaW5jbHVkZSAiYmVhcnNzbC5oIgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgInZ0bHMuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworc3RydWN0IHg1MDlfY29udGV4dCB7CisgIGNvbnN0IGJyX3g1MDlfY2xhc3MgKnZ0YWJsZTsKKyAgYnJfeDUwOV9taW5pbWFsX2NvbnRleHQgbWluaW1hbDsKKyAgYm9vbCB2ZXJpZnlob3N0OworICBib29sIHZlcmlmeXBlZXI7Cit9OworCitzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSB7CisgIGJyX3NzbF9jbGllbnRfY29udGV4dCBjdHg7CisgIHN0cnVjdCB4NTA5X2NvbnRleHQgeDUwOTsKKyAgdW5zaWduZWQgY2hhciBidWZbQlJfU1NMX0JVRlNJWkVfQklESV07CisgIGJyX3g1MDlfdHJ1c3RfYW5jaG9yICphbmNob3JzOworICBzaXplX3QgYW5jaG9yc19sZW47CisgIGNvbnN0IGNoYXIgKnByb3RvY29sc1syXTsKKyAgLyogU1NMIGNsaWVudCBjb250ZXh0IGlzIGFjdGl2ZSAqLworICBib29sIGFjdGl2ZTsKKyAgLyogc2l6ZSBvZiBwZW5kaW5nIHdyaXRlLCB5ZXQgdG8gYmUgZmx1c2hlZCAqLworICBzaXplX3QgcGVuZGluZ193cml0ZTsKK307CisKK3N0cnVjdCBjYWZpbGVfcGFyc2VyIHsKKyAgQ1VSTGNvZGUgZXJyOworICBib29sIGluX2NlcnQ7CisgIGJyX3g1MDlfZGVjb2Rlcl9jb250ZXh0IHhjOworICAvKiBhcnJheSBvZiB0cnVzdCBhbmNob3JzIGxvYWRlZCBmcm9tIENBZmlsZSAqLworICBicl94NTA5X3RydXN0X2FuY2hvciAqYW5jaG9yczsKKyAgc2l6ZV90IGFuY2hvcnNfbGVuOworICAvKiBidWZmZXIgZm9yIEROIGRhdGEgKi8KKyAgdW5zaWduZWQgY2hhciBkblsxMDI0XTsKKyAgc2l6ZV90IGRuX2xlbjsKK307CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9kbih2b2lkICpjdHgsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IGNhZmlsZV9wYXJzZXIgKmNhID0gY3R4OworCisgIGlmKGNhLT5lcnIgIT0gQ1VSTEVfT0sgfHwgIWNhLT5pbl9jZXJ0KQorICAgIHJldHVybjsKKyAgaWYoc2l6ZW9mKGNhLT5kbikgLSBjYS0+ZG5fbGVuIDwgbGVuKSB7CisgICAgY2EtPmVyciA9IENVUkxFX0ZBSUxFRF9JTklUOworICAgIHJldHVybjsKKyAgfQorICBtZW1jcHkoY2EtPmRuICsgY2EtPmRuX2xlbiwgYnVmLCBsZW4pOworICBjYS0+ZG5fbGVuICs9IGxlbjsKK30KKworc3RhdGljIHZvaWQgeDUwOV9wdXNoKHZvaWQgKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgY2FmaWxlX3BhcnNlciAqY2EgPSBjdHg7CisKKyAgaWYoY2EtPmluX2NlcnQpCisgICAgYnJfeDUwOV9kZWNvZGVyX3B1c2goJmNhLT54YywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbG9hZF9jYWZpbGUoY29uc3QgY2hhciAqcGF0aCwgYnJfeDUwOV90cnVzdF9hbmNob3IgKiphbmNob3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYW5jaG9yc19sZW4pCit7CisgIHN0cnVjdCBjYWZpbGVfcGFyc2VyIGNhOworICBicl9wZW1fZGVjb2Rlcl9jb250ZXh0IHBjOworICBicl94NTA5X3RydXN0X2FuY2hvciAqdGE7CisgIHNpemVfdCB0YV9zaXplOworICBicl94NTA5X3RydXN0X2FuY2hvciAqbmV3X2FuY2hvcnM7CisgIHNpemVfdCBuZXdfYW5jaG9yc19sZW47CisgIGJyX3g1MDlfcGtleSAqcGtleTsKKyAgRklMRSAqZnA7CisgIHVuc2lnbmVkIGNoYXIgYnVmW0JVRlNJWl0sICpwOworICBjb25zdCBjaGFyICpuYW1lOworICBzaXplX3QgbiwgaSwgcHVzaGVkOworCisgIGZwID0gZm9wZW4ocGF0aCwgInJiIik7CisgIGlmKCFmcCkKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworCisgIGNhLmVyciA9IENVUkxFX09LOworICBjYS5pbl9jZXJ0ID0gRkFMU0U7CisgIGNhLmFuY2hvcnMgPSBOVUxMOworICBjYS5hbmNob3JzX2xlbiA9IDA7CisgIGJyX3BlbV9kZWNvZGVyX2luaXQoJnBjKTsKKyAgYnJfcGVtX2RlY29kZXJfc2V0ZGVzdCgmcGMsIHg1MDlfcHVzaCwgJmNhKTsKKyAgZm9yKDs7KSB7CisgICAgbiA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGZwKTsKKyAgICBpZihuID09IDApCisgICAgICBicmVhazsKKyAgICBwID0gYnVmOworICAgIHdoaWxlKG4pIHsKKyAgICAgIHB1c2hlZCA9IGJyX3BlbV9kZWNvZGVyX3B1c2goJnBjLCBwLCBuKTsKKyAgICAgIGlmKGNhLmVycikKKyAgICAgICAgZ290byBmYWlsOworICAgICAgcCArPSBwdXNoZWQ7CisgICAgICBuIC09IHB1c2hlZDsKKworICAgICAgc3dpdGNoKGJyX3BlbV9kZWNvZGVyX2V2ZW50KCZwYykpIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJSX1BFTV9CRUdJTl9PQko6CisgICAgICAgIG5hbWUgPSBicl9wZW1fZGVjb2Rlcl9uYW1lKCZwYyk7CisgICAgICAgIGlmKHN0cmNtcChuYW1lLCAiQ0VSVElGSUNBVEUiKSAmJiBzdHJjbXAobmFtZSwgIlg1MDkgQ0VSVElGSUNBVEUiKSkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgYnJfeDUwOV9kZWNvZGVyX2luaXQoJmNhLnhjLCBhcHBlbmRfZG4sICZjYSk7CisgICAgICAgIGlmKGNhLmFuY2hvcnNfbGVuID09IFNJWkVfTUFYIC8gc2l6ZW9mKGNhLmFuY2hvcnNbMF0pKSB7CisgICAgICAgICAgY2EuZXJyID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgbmV3X2FuY2hvcnNfbGVuID0gY2EuYW5jaG9yc19sZW4gKyAxOworICAgICAgICBuZXdfYW5jaG9ycyA9IHJlYWxsb2MoY2EuYW5jaG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hbmNob3JzX2xlbiAqIHNpemVvZihjYS5hbmNob3JzWzBdKSk7CisgICAgICAgIGlmKCFuZXdfYW5jaG9ycykgeworICAgICAgICAgIGNhLmVyciA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIGNhLmFuY2hvcnMgPSBuZXdfYW5jaG9yczsKKyAgICAgICAgY2EuYW5jaG9yc19sZW4gPSBuZXdfYW5jaG9yc19sZW47CisgICAgICAgIGNhLmluX2NlcnQgPSBUUlVFOworICAgICAgICBjYS5kbl9sZW4gPSAwOworICAgICAgICB0YSA9ICZjYS5hbmNob3JzW2NhLmFuY2hvcnNfbGVuIC0gMV07CisgICAgICAgIHRhLT5kbi5kYXRhID0gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJSX1BFTV9FTkRfT0JKOgorICAgICAgICBpZighY2EuaW5fY2VydCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2EuaW5fY2VydCA9IEZBTFNFOworICAgICAgICBpZihicl94NTA5X2RlY29kZXJfbGFzdF9lcnJvcigmY2EueGMpKSB7CisgICAgICAgICAgY2EuZXJyID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICB0YS0+ZmxhZ3MgPSAwOworICAgICAgICBpZihicl94NTA5X2RlY29kZXJfaXNDQSgmY2EueGMpKQorICAgICAgICAgIHRhLT5mbGFncyB8PSBCUl9YNTA5X1RBX0NBOworICAgICAgICBwa2V5ID0gYnJfeDUwOV9kZWNvZGVyX2dldF9wa2V5KCZjYS54Yyk7CisgICAgICAgIGlmKCFwa2V5KSB7CisgICAgICAgICAgY2EuZXJyID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICB0YS0+cGtleSA9ICpwa2V5OworCisgICAgICAgIC8qIGNhbGN1bGF0ZSBzcGFjZSBuZWVkZWQgZm9yIHRydXN0IGFuY2hvciBkYXRhICovCisgICAgICAgIHRhX3NpemUgPSBjYS5kbl9sZW47CisgICAgICAgIHN3aXRjaChwa2V5LT5rZXlfdHlwZSkgeworICAgICAgICBjYXNlIEJSX0tFWVRZUEVfUlNBOgorICAgICAgICAgIHRhX3NpemUgKz0gcGtleS0+a2V5LnJzYS5ubGVuICsgcGtleS0+a2V5LnJzYS5lbGVuOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSX0tFWVRZUEVfRUM6CisgICAgICAgICAgdGFfc2l6ZSArPSBwa2V5LT5rZXkuZWMucWxlbjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBjYS5lcnIgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvKiBmaWxsIGluIHRydXN0IGFuY2hvciBETiBhbmQgcHVibGljIGtleSBkYXRhICovCisgICAgICAgIHRhLT5kbi5kYXRhID0gbWFsbG9jKHRhX3NpemUpOworICAgICAgICBpZighdGEtPmRuLmRhdGEpIHsKKyAgICAgICAgICBjYS5lcnIgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodGEtPmRuLmRhdGEsIGNhLmRuLCBjYS5kbl9sZW4pOworICAgICAgICB0YS0+ZG4ubGVuID0gY2EuZG5fbGVuOworICAgICAgICBzd2l0Y2gocGtleS0+a2V5X3R5cGUpIHsKKyAgICAgICAgY2FzZSBCUl9LRVlUWVBFX1JTQToKKyAgICAgICAgICB0YS0+cGtleS5rZXkucnNhLm4gPSB0YS0+ZG4uZGF0YSArIHRhLT5kbi5sZW47CisgICAgICAgICAgbWVtY3B5KHRhLT5wa2V5LmtleS5yc2EubiwgcGtleS0+a2V5LnJzYS5uLCBwa2V5LT5rZXkucnNhLm5sZW4pOworICAgICAgICAgIHRhLT5wa2V5LmtleS5yc2EuZSA9IHRhLT5wa2V5LmtleS5yc2EubiArIHRhLT5wa2V5LmtleS5yc2EubmxlbjsKKyAgICAgICAgICBtZW1jcHkodGEtPnBrZXkua2V5LnJzYS5lLCBwa2V5LT5rZXkucnNhLmUsIHBrZXktPmtleS5yc2EuZWxlbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJfS0VZVFlQRV9FQzoKKyAgICAgICAgICB0YS0+cGtleS5rZXkuZWMucSA9IHRhLT5kbi5kYXRhICsgdGEtPmRuLmxlbjsKKyAgICAgICAgICBtZW1jcHkodGEtPnBrZXkua2V5LmVjLnEsIHBrZXktPmtleS5lYy5xLCBwa2V5LT5rZXkuZWMucWxlbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBjYS5lcnIgPSBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYoZmVycm9yKGZwKSkKKyAgICBjYS5lcnIgPSBDVVJMRV9SRUFEX0VSUk9SOworCitmYWlsOgorICBmY2xvc2UoZnApOworICBpZihjYS5lcnIgPT0gQ1VSTEVfT0spIHsKKyAgICAqYW5jaG9ycyA9IGNhLmFuY2hvcnM7CisgICAgKmFuY2hvcnNfbGVuID0gY2EuYW5jaG9yc19sZW47CisgIH0KKyAgZWxzZSB7CisgICAgZm9yKGkgPSAwOyBpIDwgY2EuYW5jaG9yc19sZW47ICsraSkKKyAgICAgIGZyZWUoY2EuYW5jaG9yc1tpXS5kbi5kYXRhKTsKKyAgICBmcmVlKGNhLmFuY2hvcnMpOworICB9CisKKyAgcmV0dXJuIGNhLmVycjsKK30KKworc3RhdGljIHZvaWQgeDUwOV9zdGFydF9jaGFpbihjb25zdCBicl94NTA5X2NsYXNzICoqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2ZXJfbmFtZSkKK3sKKyAgc3RydWN0IHg1MDlfY29udGV4dCAqeDUwOSA9IChzdHJ1Y3QgeDUwOV9jb250ZXh0ICopY3R4OworCisgIGlmKCF4NTA5LT52ZXJpZnlob3N0KQorICAgIHNlcnZlcl9uYW1lID0gTlVMTDsKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPnN0YXJ0X2NoYWluKCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSwgc2VydmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCB4NTA5X3N0YXJ0X2NlcnQoY29uc3QgYnJfeDUwOV9jbGFzcyAqKmN0eCwgdWludDMyX3QgbGVuZ3RoKQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPnN0YXJ0X2NlcnQoJng1MDktPm1pbmltYWwudnRhYmxlLCBsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCB4NTA5X2FwcGVuZChjb25zdCBicl94NTA5X2NsYXNzICoqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPmFwcGVuZCgmeDUwOS0+bWluaW1hbC52dGFibGUsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgeDUwOV9lbmRfY2VydChjb25zdCBicl94NTA5X2NsYXNzICoqY3R4KQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPmVuZF9jZXJ0KCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB4NTA5X2VuZF9jaGFpbihjb25zdCBicl94NTA5X2NsYXNzICoqY3R4KQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisgIHVuc2lnbmVkIGVycjsKKworICBlcnIgPSB4NTA5LT5taW5pbWFsLnZ0YWJsZS0+ZW5kX2NoYWluKCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSk7CisgIGlmKGVyciAmJiAheDUwOS0+dmVyaWZ5cGVlcikgeworICAgIC8qIGlnbm9yZSBhbnkgWC41MDkgZXJyb3JzICovCisgICAgZXJyID0gQlJfRVJSX09LOworICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IGJyX3g1MDlfcGtleSAqeDUwOV9nZXRfcGtleShjb25zdCBicl94NTA5X2NsYXNzICpjb25zdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqdXNhZ2VzKQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgcmV0dXJuIHg1MDktPm1pbmltYWwudnRhYmxlLT5nZXRfcGtleSgmeDUwOS0+bWluaW1hbC52dGFibGUsIHVzYWdlcyk7Cit9CisKK3N0YXRpYyBjb25zdCBicl94NTA5X2NsYXNzIHg1MDlfdnRhYmxlID0geworICBzaXplb2Yoc3RydWN0IHg1MDlfY29udGV4dCksCisgIHg1MDlfc3RhcnRfY2hhaW4sCisgIHg1MDlfc3RhcnRfY2VydCwKKyAgeDUwOV9hcHBlbmQsCisgIHg1MDlfZW5kX2NlcnQsCisgIHg1MDlfZW5kX2NoYWluLAorICB4NTA5X2dldF9wa2V5Cit9OworCitzdGF0aWMgQ1VSTGNvZGUgYmVhcnNzbF9jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CisgIGNvbnN0IGNoYXIgKmhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBib29sIHZlcmlmeXBlZXIgPSBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik7CisgIGNvbnN0IGJvb2wgdmVyaWZ5aG9zdCA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KTsKKyAgQ1VSTGNvZGUgcmV0OworICB1bnNpZ25lZCB2ZXJzaW9uX21pbiwgdmVyc2lvbl9tYXg7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisjZWxzZQorICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworI2VuZGlmCisKKyAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgeworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKKyAgICBmYWlsZihkYXRhLCAiQmVhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyAgICBmYWlsZihkYXRhLCAiQmVhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYzIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgorICAgIHZlcnNpb25fbWluID0gQlJfVExTMTA7CisgICAgdmVyc2lvbl9tYXggPSBCUl9UTFMxMDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICB2ZXJzaW9uX21pbiA9IEJSX1RMUzExOworICAgIHZlcnNpb25fbWF4ID0gQlJfVExTMTE7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CisgICAgdmVyc2lvbl9taW4gPSBCUl9UTFMxMjsKKyAgICB2ZXJzaW9uX21heCA9IEJSX1RMUzEyOworICAgIGJyZWFrOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKKyAgICB2ZXJzaW9uX21pbiA9IEJSX1RMUzEwOworICAgIHZlcnNpb25fbWF4ID0gQlJfVExTMTI7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgIkJlYXJTU0w6IHVua25vd24gQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyAgaWYoc3NsX2NhZmlsZSkgeworICAgIHJldCA9IGxvYWRfY2FmaWxlKHNzbF9jYWZpbGUsICZiYWNrZW5kLT5hbmNob3JzLCAmYmFja2VuZC0+YW5jaG9yc19sZW4pOworICAgIGlmKHJldCAhPSBDVVJMRV9PSykgeworICAgICAgaWYodmVyaWZ5cGVlcikgeworICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgorICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4iLCBzc2xfY2FmaWxlKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgorICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOworICAgIH0KKyAgfQorCisgIC8qIGluaXRpYWxpemUgU1NMIGNvbnRleHQgKi8KKyAgYnJfc3NsX2NsaWVudF9pbml0X2Z1bGwoJmJhY2tlbmQtPmN0eCwgJmJhY2tlbmQtPng1MDkubWluaW1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC0+YW5jaG9ycywgYmFja2VuZC0+YW5jaG9yc19sZW4pOworICBicl9zc2xfZW5naW5lX3NldF92ZXJzaW9ucygmYmFja2VuZC0+Y3R4LmVuZywgdmVyc2lvbl9taW4sIHZlcnNpb25fbWF4KTsKKyAgYnJfc3NsX2VuZ2luZV9zZXRfYnVmZmVyKCZiYWNrZW5kLT5jdHguZW5nLCBiYWNrZW5kLT5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYmFja2VuZC0+YnVmKSwgMSk7CisKKyAgLyogaW5pdGlhbGl6ZSBYLjUwOSBjb250ZXh0ICovCisgIGJhY2tlbmQtPng1MDkudnRhYmxlID0gJng1MDlfdnRhYmxlOworICBiYWNrZW5kLT54NTA5LnZlcmlmeXBlZXIgPSB2ZXJpZnlwZWVyOworICBiYWNrZW5kLT54NTA5LnZlcmlmeWhvc3QgPSB2ZXJpZnlob3N0OworICBicl9zc2xfZW5naW5lX3NldF94NTA5KCZiYWNrZW5kLT5jdHguZW5nLCAmYmFja2VuZC0+eDUwOS52dGFibGUpOworCisgIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgeworICAgIHZvaWQgKnNlc3Npb247CisKKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKKyAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7CisgICAgICBicl9zc2xfZW5naW5lX3NldF9zZXNzaW9uX3BhcmFtZXRlcnMoJmJhY2tlbmQtPmN0eC5lbmcsIHNlc3Npb24pOworICAgICAgaW5mb2YoZGF0YSwgIkJlYXJTU0w6IHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOworICAgIH0KKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOworICB9CisKKyAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKKyAgICBpbnQgY3VyID0gMDsKKworICAgIC8qIE5PVEU6IHdoZW4gYWRkaW5nIG1vcmUgcHJvdG9jb2xzIGhlcmUsIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZQorICAgICAqIHByb3RvY29scyBhcnJheSBpbiBgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGFgLgorICAgICAqLworCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMiAmJgorICAgICAgICghU1NMX0lTX1BST1hZKCkgfHwgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5KSkgeworICAgICAgYmFja2VuZC0+cHJvdG9jb2xzW2N1cisrXSA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRDsKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKKyAgICB9CisjZW5kaWYKKworICAgIGJhY2tlbmQtPnByb3RvY29sc1tjdXIrK10gPSBBTFBOX0hUVFBfMV8xOworICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgQUxQTl9IVFRQXzFfMSk7CisKKyAgICBicl9zc2xfZW5naW5lX3NldF9wcm90b2NvbF9uYW1lcygmYmFja2VuZC0+Y3R4LmVuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLT5wcm90b2NvbHMsIGN1cik7CisgIH0KKworICBpZigoMSA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHIpKQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICB8fCAoMSA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyKSkKKyNlbmRpZgorICAgICApIHsKKyAgICBpZih2ZXJpZnlob3N0KSB7CisgICAgICBmYWlsZihkYXRhLCAiQmVhclNTTDogIgorICAgICAgICAgICAgImhvc3QgdmVyaWZpY2F0aW9uIG9mIElQIGFkZHJlc3MgaXMgbm90IHN1cHBvcnRlZCIpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICB9CisgICAgaG9zdG5hbWUgPSBOVUxMOworICB9CisKKyAgaWYoIWJyX3NzbF9jbGllbnRfcmVzZXQoJmJhY2tlbmQtPmN0eCwgaG9zdG5hbWUsIDApKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgYmFja2VuZC0+YWN0aXZlID0gVFJVRTsKKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMjsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBiZWFyc3NsX3J1bl91bnRpbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0KQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHVuc2lnbmVkIHN0YXRlOworICB1bnNpZ25lZCBjaGFyICpidWY7CisgIHNpemVfdCBsZW47CisgIHNzaXplX3QgcmV0OworICBpbnQgZXJyOworCisgIGZvcig7OykgeworICAgIHN0YXRlID0gYnJfc3NsX2VuZ2luZV9jdXJyZW50X3N0YXRlKCZiYWNrZW5kLT5jdHguZW5nKTsKKyAgICBpZihzdGF0ZSAmIEJSX1NTTF9DTE9TRUQpIHsKKyAgICAgIGVyciA9IGJyX3NzbF9lbmdpbmVfbGFzdF9lcnJvcigmYmFja2VuZC0+Y3R4LmVuZyk7CisgICAgICBzd2l0Y2goZXJyKSB7CisgICAgICBjYXNlIEJSX0VSUl9PSzoKKyAgICAgICAgLyogVExTIGNsb3NlIG5vdGlmeSAqLworICAgICAgICBpZihjb25uc3NsLT5zdGF0ZSAhPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvbm5lY3Rpb24gY2xvc2VkIGR1cmluZyBoYW5kc2hha2UiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgY2FzZSBCUl9FUlJfWDUwOV9FWFBJUkVEOgorICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBYLjUwOSB2ZXJpZmljYXRpb246ICIKKyAgICAgICAgICAgICAgImNlcnRpZmljYXRlIGlzIGV4cGlyZWQgb3Igbm90IHlldCB2YWxpZCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgY2FzZSBCUl9FUlJfWDUwOV9CQURfU0VSVkVSX05BTUU6CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFguNTA5IHZlcmlmaWNhdGlvbjogIgorICAgICAgICAgICAgICAiZXhwZWN0ZWQgc2VydmVyIG5hbWUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2hhaW4iKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIGNhc2UgQlJfRVJSX1g1MDlfTk9UX1RSVVNURUQ6CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFguNTA5IHZlcmlmaWNhdGlvbjogIgorICAgICAgICAgICAgICAiY2hhaW4gY291bGQgbm90IGJlIGxpbmtlZCB0byBhIHRydXN0IGFuY2hvciIpOworICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgfQorICAgICAgLyogWC41MDkgZXJyb3JzIGFyZSBkb2N1bWVudGVkIHRvIGhhdmUgdGhlIHJhbmdlIDMyLi42MyAqLworICAgICAgaWYoZXJyID49IDMyICYmIGVyciA8IDY0KQorICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgICBpZihzdGF0ZSAmIHRhcmdldCkKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBpZihzdGF0ZSAmIEJSX1NTTF9TRU5EUkVDKSB7CisgICAgICBidWYgPSBicl9zc2xfZW5naW5lX3NlbmRyZWNfYnVmKCZiYWNrZW5kLT5jdHguZW5nLCAmbGVuKTsKKyAgICAgIHJldCA9IHN3cml0ZShzb2NrZmQsIGJ1ZiwgbGVuKTsKKyAgICAgIGlmKHJldCA9PSAtMSkgeworICAgICAgICBpZihTT0NLRVJSTk8gPT0gRUFHQUlOIHx8IFNPQ0tFUlJOTyA9PSBFV09VTERCTE9DSykgeworICAgICAgICAgIGlmKGNvbm5zc2wtPnN0YXRlICE9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKQorICAgICAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICAgICAgfQorICAgICAgYnJfc3NsX2VuZ2luZV9zZW5kcmVjX2FjaygmYmFja2VuZC0+Y3R4LmVuZywgcmV0KTsKKyAgICB9CisgICAgZWxzZSBpZihzdGF0ZSAmIEJSX1NTTF9SRUNWUkVDKSB7CisgICAgICBidWYgPSBicl9zc2xfZW5naW5lX3JlY3ZyZWNfYnVmKCZiYWNrZW5kLT5jdHguZW5nLCAmbGVuKTsKKyAgICAgIHJldCA9IHNyZWFkKHNvY2tmZCwgYnVmLCBsZW4pOworICAgICAgaWYocmV0ID09IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogRU9GIHdpdGhvdXQgY2xvc2Ugbm90aWZ5Iik7CisgICAgICAgIHJldHVybiBDVVJMRV9SRUFEX0VSUk9SOworICAgICAgfQorICAgICAgaWYocmV0ID09IC0xKSB7CisgICAgICAgIGlmKFNPQ0tFUlJOTyA9PSBFQUdBSU4gfHwgU09DS0VSUk5PID09IEVXT1VMREJMT0NLKSB7CisgICAgICAgICAgaWYoY29ubnNzbC0+c3RhdGUgIT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpCisgICAgICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOworICAgICAgICAgIHJldHVybiBDVVJMRV9BR0FJTjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGJyX3NzbF9lbmdpbmVfcmVjdnJlY19hY2soJmJhY2tlbmQtPmN0eC5lbmcsIHJldCk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBDVVJMY29kZSBiZWFyc3NsX2Nvbm5lY3Rfc3RlcDIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgQ1VSTGNvZGUgcmV0OworCisgIHJldCA9IGJlYXJzc2xfcnVuX3VudGlsKGNvbm4sIHNvY2tpbmRleCwgQlJfU1NMX1NFTkRBUFAgfCBCUl9TU0xfUkVDVkFQUCk7CisgIGlmKHJldCA9PSBDVVJMRV9BR0FJTikKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGlmKHJldCA9PSBDVVJMRV9PSykgeworICAgIGlmKGJyX3NzbF9lbmdpbmVfY3VycmVudF9zdGF0ZSgmYmFja2VuZC0+Y3R4LmVuZykgPT0gQlJfU1NMX0NMT1NFRCkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY29ubmVjdGlvbiBjbG9zZWQgZHVyaW5nIGhhbmRzaGFrZSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMzsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgYmVhcnNzbF9jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIENVUkxjb2RlIHJldDsKKworICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOworCisgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CisgICAgY29uc3QgY2hhciAqcHJvdG9jb2w7CisKKyAgICBwcm90b2NvbCA9IGJyX3NzbF9lbmdpbmVfZ2V0X3NlbGVjdGVkX3Byb3RvY29sKCZiYWNrZW5kLT5jdHguZW5nKTsKKyAgICBpZihwcm90b2NvbCkgeworICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJXNcbiIsIHByb3RvY29sKTsKKworI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgICBpZighc3RyY21wKHByb3RvY29sLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQpKQorICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8yOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICBpZighc3RyY21wKHByb3RvY29sLCBBTFBOX0hUVFBfMV8xKSkKKyAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOworICAgICAgZWxzZQorICAgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgdW5yZWNvZ25pemVkIHByb3RvY29sICVzXG4iLCBwcm90b2NvbCk7CisgICAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgZGlkIG5vdCBhZ3JlZSB0byBhIHByb3RvY29sXG4iKTsKKyAgfQorCisgIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgeworICAgIGJvb2wgaW5jYWNoZTsKKyAgICB2b2lkICpvbGRzZXNzaW9uOworICAgIGJyX3NzbF9zZXNzaW9uX3BhcmFtZXRlcnMgKnNlc3Npb247CisKKyAgICBzZXNzaW9uID0gbWFsbG9jKHNpemVvZigqc2Vzc2lvbikpOworICAgIGlmKCFzZXNzaW9uKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgYnJfc3NsX2VuZ2luZV9nZXRfc2Vzc2lvbl9wYXJhbWV0ZXJzKCZiYWNrZW5kLT5jdHguZW5nLCBzZXNzaW9uKTsKKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKKyAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZHNlc3Npb24sIE5VTEwsIHNvY2tpbmRleCkpOworICAgIGlmKGluY2FjaGUpCisgICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkc2Vzc2lvbik7CisgICAgcmV0ID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIHNlc3Npb24sIDAsIHNvY2tpbmRleCk7CisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKKyAgICBpZihyZXQpIHsKKyAgICAgIGZyZWUoc2Vzc2lvbik7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfZG9uZTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJlYXJzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgdW5zaWduZWQgY2hhciAqYXBwOworICBzaXplX3QgYXBwbGVuOworCisgIGZvcig7OykgeworICAgICplcnIgPSBiZWFyc3NsX3J1bl91bnRpbChjb25uLCBzb2NraW5kZXgsIEJSX1NTTF9TRU5EQVBQKTsKKyAgICBpZiAoKmVyciAhPSBDVVJMRV9PSykKKyAgICAgIHJldHVybiAtMTsKKyAgICBhcHAgPSBicl9zc2xfZW5naW5lX3NlbmRhcHBfYnVmKCZiYWNrZW5kLT5jdHguZW5nLCAmYXBwbGVuKTsKKyAgICBpZighYXBwKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb25uZWN0aW9uIGNsb3NlZCBkdXJpbmcgd3JpdGUiKTsKKyAgICAgICplcnIgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZihiYWNrZW5kLT5wZW5kaW5nX3dyaXRlKSB7CisgICAgICBhcHBsZW4gPSBiYWNrZW5kLT5wZW5kaW5nX3dyaXRlOworICAgICAgYmFja2VuZC0+cGVuZGluZ193cml0ZSA9IDA7CisgICAgICByZXR1cm4gYXBwbGVuOworICAgIH0KKyAgICBpZihhcHBsZW4gPiBsZW4pCisgICAgICBhcHBsZW4gPSBsZW47CisgICAgbWVtY3B5KGFwcCwgYnVmLCBhcHBsZW4pOworICAgIGJyX3NzbF9lbmdpbmVfc2VuZGFwcF9hY2soJmJhY2tlbmQtPmN0eC5lbmcsIGFwcGxlbik7CisgICAgYnJfc3NsX2VuZ2luZV9mbHVzaCgmYmFja2VuZC0+Y3R4LmVuZywgMCk7CisgICAgYmFja2VuZC0+cGVuZGluZ193cml0ZSA9IGFwcGxlbjsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdCBiZWFyc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgdW5zaWduZWQgY2hhciAqYXBwOworICBzaXplX3QgYXBwbGVuOworCisgICplcnIgPSBiZWFyc3NsX3J1bl91bnRpbChjb25uLCBzb2NraW5kZXgsIEJSX1NTTF9SRUNWQVBQKTsKKyAgaWYoKmVyciAhPSBDVVJMRV9PSykKKyAgICByZXR1cm4gLTE7CisgIGFwcCA9IGJyX3NzbF9lbmdpbmVfcmVjdmFwcF9idWYoJmJhY2tlbmQtPmN0eC5lbmcsICZhcHBsZW4pOworICBpZighYXBwKQorICAgIHJldHVybiAwOworICBpZihhcHBsZW4gPiBsZW4pCisgICAgYXBwbGVuID0gbGVuOworICBtZW1jcHkoYnVmLCBhcHAsIGFwcGxlbik7CisgIGJyX3NzbF9lbmdpbmVfcmVjdmFwcF9hY2soJmJhY2tlbmQtPmN0eC5lbmcsIGFwcGxlbik7CisKKyAgcmV0dXJuIGFwcGxlbjsKK30KKworc3RhdGljIENVUkxjb2RlIGJlYXJzc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9uYmxvY2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKKyAgaW50IHdoYXQ7CisKKyAgLyogY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCAqLworICBpZihzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSA9PSBjb25uc3NsLT5zdGF0ZSkgeworICAgICpkb25lID0gVFJVRTsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICBpZihzc2xfY29ubmVjdF8xID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICByZXQgPSBiZWFyc3NsX2Nvbm5lY3Rfc3RlcDEoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXQpCisgICAgICByZXR1cm4gcmV0OworICB9CisKKyAgd2hpbGUoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KKyAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKworICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CisgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLworICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCisgICAgLyogaWYgc3NsIGlzIGV4cGVjdGluZyBzb21ldGhpbmcsIGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlLiAqLworICAgIGlmKHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKworICAgICAgY3VybF9zb2NrZXRfdCB3cml0ZWZkID0gc3NsX2Nvbm5lY3RfMl93cml0aW5nID09CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKKworICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7CisgICAgICBpZih3aGF0IDwgMCkgeworICAgICAgICAvKiBmYXRhbCBlcnJvciAqLworICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZSBpZigwID09IHdoYXQpIHsKKyAgICAgICAgaWYobm9uYmxvY2tpbmcpIHsKKyAgICAgICAgICAqZG9uZSA9IEZBTFNFOworICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBzb2NrZXQgaXMgcmVhZGFibGUgb3Igd3JpdGFibGUgKi8KKyAgICB9CisKKyAgICAvKiBSdW4gdHJhbnNhY3Rpb24sIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlciBpZiBpdCBmYWlsZWQgb3IgaWYgdGhpcworICAgICAqIGNvbm5lY3Rpb24gaXMgZG9uZSBub25ibG9ja2luZyBhbmQgdGhpcyBsb29wIHdvdWxkIGV4ZWN1dGUgYWdhaW4uIFRoaXMKKyAgICAgKiBwZXJtaXRzIHRoZSBvd25lciBvZiBhIG11bHRpIGhhbmRsZSB0byBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdAorICAgICAqIGJlZm9yZSBzdGVwMiBoYXMgY29tcGxldGVkIHdoaWxlIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkKKyAgICAgKiBvciBlcG9sbCgpIHdpbGwgYWx3YXlzIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgorICAgICAqLworICAgIHJldCA9IGJlYXJzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJldCB8fCAobm9uYmxvY2tpbmcgJiYKKyAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCisgICAgICByZXR1cm4gcmV0OworICB9CisKKyAgaWYoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgcmV0ID0gYmVhcnNzbF9jb25uZWN0X3N0ZXAzKGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmV0KQorICAgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIGlmKHNzbF9jb25uZWN0X2RvbmUgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CisgICAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gYmVhcnNzbF9yZWN2OworICAgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGJlYXJzc2xfc2VuZDsKKyAgICAqZG9uZSA9IFRSVUU7CisgIH0KKyAgZWxzZQorICAgICpkb25lID0gRkFMU0U7CisKKyAgLyogUmVzZXQgb3VyIGNvbm5lY3Qgc3RhdGUgbWFjaGluZSAqLworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzaXplX3QgQ3VybF9iZWFyc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIHNpemUsICJCZWFyU1NMIik7Cit9CisKK3N0YXRpYyBib29sIEN1cmxfYmVhcnNzbF9kYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQoreworICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICByZXR1cm4gYnJfc3NsX2VuZ2luZV9jdXJyZW50X3N0YXRlKCZiYWNrZW5kLT5jdHguZW5nKSAmIEJSX1NTTF9SRUNWQVBQOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF9iZWFyc3NsX3JhbmRvbShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhIFVOVVNFRF9QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVudHJvcHksIHNpemVfdCBsZW5ndGgpCit7CisgIHN0YXRpYyBicl9obWFjX2RyYmdfY29udGV4dCBjdHg7CisgIHN0YXRpYyBib29sIHNlZWRlZCA9IEZBTFNFOworCisgIGlmKCFzZWVkZWQpIHsKKyAgICBicl9wcm5nX3NlZWRlciBzZWVkZXI7CisKKyAgICBicl9obWFjX2RyYmdfaW5pdCgmY3R4LCAmYnJfc2hhMjU2X3Z0YWJsZSwgTlVMTCwgMCk7CisgICAgc2VlZGVyID0gYnJfcHJuZ19zZWVkZXJfc3lzdGVtKE5VTEwpOworICAgIGlmKCFzZWVkZXIgfHwgIXNlZWRlcigmY3R4LnZ0YWJsZSkpCisgICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgc2VlZGVkID0gVFJVRTsKKyAgfQorICBicl9obWFjX2RyYmdfZ2VuZXJhdGUoJmN0eCwgZW50cm9weSwgbGVuZ3RoKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX2JlYXJzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIENVUkxjb2RlIHJldDsKKyAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgcmV0ID0gYmVhcnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7CisgIGlmKHJldCkKKyAgICByZXR1cm4gcmV0OworCisgIERFQlVHQVNTRVJUKGRvbmUpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfYmVhcnNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCBib29sICpkb25lKQoreworICByZXR1cm4gYmVhcnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCitzdGF0aWMgdm9pZCAqQ3VybF9iZWFyc3NsX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk8gaW5mbyBVTlVTRURfUEFSQU0pCit7CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgcmV0dXJuICZiYWNrZW5kLT5jdHg7Cit9CisKK3N0YXRpYyB2b2lkIEN1cmxfYmVhcnNzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIHNpemVfdCBpOworCisgIGlmKGJhY2tlbmQtPmFjdGl2ZSkgeworICAgIGJyX3NzbF9lbmdpbmVfY2xvc2UoJmJhY2tlbmQtPmN0eC5lbmcpOworICAgICh2b2lkKWJlYXJzc2xfcnVuX3VudGlsKGNvbm4sIHNvY2tpbmRleCwgQlJfU1NMX0NMT1NFRCk7CisgIH0KKyAgZm9yKGkgPSAwOyBpIDwgYmFja2VuZC0+YW5jaG9yc19sZW47ICsraSkKKyAgICBmcmVlKGJhY2tlbmQtPmFuY2hvcnNbaV0uZG4uZGF0YSk7CisgIGZyZWUoYmFja2VuZC0+YW5jaG9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIEN1cmxfYmVhcnNzbF9zZXNzaW9uX2ZyZWUodm9pZCAqcHRyKQoreworICBmcmVlKHB0cik7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX2JlYXJzc2xfbWQ1c3VtKHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbWQ1c3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1kNWxlbiBVTlVTRURfUEFSQU0pCit7CisgIGJyX21kNV9jb250ZXh0IGN0eDsKKworICBicl9tZDVfaW5pdCgmY3R4KTsKKyAgYnJfbWQ1X3VwZGF0ZSgmY3R4LCBpbnB1dCwgaW5wdXRsZW4pOworICBicl9tZDVfb3V0KCZjdHgsIG1kNXN1bSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfYmVhcnNzbF9zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGEyNTZzdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2hhMjU2bGVuIFVOVVNFRF9QQVJBTSkKK3sKKyAgYnJfc2hhMjU2X2NvbnRleHQgY3R4OworCisgIGJyX3NoYTI1Nl9pbml0KCZjdHgpOworICBicl9zaGEyNTZfdXBkYXRlKCZjdHgsIGlucHV0LCBpbnB1dGxlbik7CisgIGJyX3NoYTI1Nl9vdXQoJmN0eCwgc2hhMjU2c3VtKTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfYmVhcnNzbCA9IHsKKyAgeyBDVVJMU1NMQkFDS0VORF9CRUFSU1NMLCAiYmVhcnNzbCIgfSwKKyAgMCwKKyAgc2l6ZW9mKHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhKSwKKworICBDdXJsX25vbmVfaW5pdCwKKyAgQ3VybF9ub25lX2NsZWFudXAsCisgIEN1cmxfYmVhcnNzbF92ZXJzaW9uLAorICBDdXJsX25vbmVfY2hlY2tfY3huLAorICBDdXJsX25vbmVfc2h1dGRvd24sCisgIEN1cmxfYmVhcnNzbF9kYXRhX3BlbmRpbmcsCisgIEN1cmxfYmVhcnNzbF9yYW5kb20sCisgIEN1cmxfbm9uZV9jZXJ0X3N0YXR1c19yZXF1ZXN0LAorICBDdXJsX2JlYXJzc2xfY29ubmVjdCwKKyAgQ3VybF9iZWFyc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcsCisgIEN1cmxfYmVhcnNzbF9nZXRfaW50ZXJuYWxzLAorICBDdXJsX2JlYXJzc2xfY2xvc2UsCisgIEN1cmxfbm9uZV9jbG9zZV9hbGwsCisgIEN1cmxfYmVhcnNzbF9zZXNzaW9uX2ZyZWUsCisgIEN1cmxfbm9uZV9zZXRfZW5naW5lLAorICBDdXJsX25vbmVfc2V0X2VuZ2luZV9kZWZhdWx0LAorICBDdXJsX25vbmVfZW5naW5lc19saXN0LAorICBDdXJsX25vbmVfZmFsc2Vfc3RhcnQsCisgIEN1cmxfYmVhcnNzbF9tZDVzdW0sCisgIEN1cmxfYmVhcnNzbF9zaGEyNTZzdW0KK307CisKKyNlbmRpZiAvKiBVU0VfQkVBUlNTTCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2JlYXJzc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjk0OTIyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9CRUFSU1NMX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfQkVBUlNTTF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIE1pY2hhZWwgRm9ybmV5LCA8bWZvcm5leUBtZm9ybmV5Lm9yZz4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX0JFQVJTU0wKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9iZWFyc3NsOworCisjZW5kaWYgLyogVVNFX0JFQVJTU0wgKi8KKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9CRUFSU1NMX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2N5YXNzbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGEyYmRkLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvdXJjZSBmaWxlIGZvciBhbGwgQ3lhU1NMLXNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCi0gKiBidXQgdnRscy5jIHNob3VsZCBldmVyIGNhbGwgb3IgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotI2lmZGVmIFVTRV9DWUFTU0wKLQotI2RlZmluZSBXT0xGU1NMX09QVElPTlNfSUdOT1JFX1NZUwotLyogQ3lhU1NMJ3MgdmVyc2lvbi5oLCB3aGljaCBzaG91bGQgY29udGFpbiBvbmx5IHRoZSB2ZXJzaW9uLCBzaG91bGQgY29tZQotYmVmb3JlIGFsbCBvdGhlciBDeWFTU0wgaW5jbHVkZXMgYW5kIGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGJ1aWxkIGNvbmZpZwotYWthIG9wdGlvbnMuaC4gaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxNS0wNC8wMDY5Lmh0bWwgKi8KLSNpbmNsdWRlIDxjeWFzc2wvdmVyc2lvbi5oPgotI2lmIGRlZmluZWQoSEFWRV9DWUFTU0xfT1BUSU9OU19IKSAmJiAoTElCQ1lBU1NMX1ZFUlNJT05fSEVYID4gMHgwMzAwNDAwOCkKLSNpZiBkZWZpbmVkKENZQVNTTF9BUEkpIHx8IGRlZmluZWQoV09MRlNTTF9BUEkpCi0vKiBTYWZldHkgbWVhc3VyZS4gSWYgZWl0aGVyIGlzIGRlZmluZWQgc29tZSBBUEkgaW5jbHVkZSB3YXMgYWxyZWFkeSBpbmNsdWRlZAotYW5kIHRoYXQncyBhIHByb2JsZW0gc2luY2Ugb3B0aW9ucy5oIGhhc24ndCBiZWVuIGluY2x1ZGVkIHlldC4gKi8KLSNlcnJvciAiQ3lhU1NMIEFQSSB3YXMgaW5jbHVkZWQgYmVmb3JlIHRoZSBDeWFTU0wgYnVpbGQgb3B0aW9ucy4iCi0jZW5kaWYKLSNpbmNsdWRlIDxjeWFzc2wvb3B0aW9ucy5oPgotI2VuZGlmCi0KLS8qIFRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdlIHJlbHkgb24gb25lIG9yIGJvdGggb2Y6Ci0gICAtIHRoZSB1c2VyJ3Mgb3B0aW9ucy5oIGdlbmVyYXRlZCBieSBDeWFTU0wvd29sZlNTTAotICAgLSB0aGUgc3ltYm9scyBkZXRlY3RlZCBieSBjdXJsJ3MgY29uZmlndXJlCi0gICBTaW5jZSB0aGV5IGFyZSBtYXJrZWRseSBkaWZmZXJlbnQgZnJvbSBvbmUgYW5vdGhlciwgYW5kIG9uZSBvciB0aGUgb3RoZXIgbWF5Ci0gICBub3QgYmUgYXZhaWxhYmxlLCB3ZSBkbyBzb21lIGNoZWNraW5nIGJlbG93IHRvIGJyaW5nIHRoaW5ncyBpbiBzeW5jLiAqLwotCi0vKiBIQVZFX0FMUE4gaXMgd29sZlNTTCdzIGJ1aWxkIHRpbWUgc3ltYm9sIGZvciBlbmFibGluZyBBTFBOIGluIG9wdGlvbnMuaC4gKi8KLSNpZm5kZWYgSEFWRV9BTFBOCi0jaWZkZWYgSEFWRV9XT0xGU1NMX1VTRUFMUE4KLSNkZWZpbmUgSEFWRV9BTFBOCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBXT0xGU1NMX0FMTE9XX1NTTFYzIGlzIHdvbGZTU0wncyBidWlsZCB0aW1lIHN5bWJvbCBmb3IgZW5hYmxpbmcgU1NMdjMgaW4KLSAgIG9wdGlvbnMuaCwgYnV0IGlzIG9ubHkgc2VlbiBpbiA+PSAzLjYuNiBzaW5jZSB0aGF0J3Mgd2hlbiB0aGV5IHN0YXJ0ZWQKLSAgIGRpc2FibGluZyBTU0x2MyBieSBkZWZhdWx0LiAqLwotI2lmbmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCi0jaWYgKExJQkNZQVNTTF9WRVJTSU9OX0hFWCA8IDB4MDMwMDYwMDYpIHx8IFwKLSAgICBkZWZpbmVkKEhBVkVfV09MRlNTTFYzX0NMSUVOVF9NRVRIT0QpCi0jZGVmaW5lIFdPTEZTU0xfQUxMT1dfU1NMVjMKLSNlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgInVybGRhdGEuaCIKLSNpbmNsdWRlICJzZW5kZi5oIgotI2luY2x1ZGUgImluZXRfcHRvbi5oIgotI2luY2x1ZGUgInZ0bHMuaCIKLSNpbmNsdWRlICJwYXJzZWRhdGUuaCIKLSNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciB0aGUgY29ubmVjdCB0aW1lb3V0ICovCi0jaW5jbHVkZSAic2VsZWN0LmgiCi0jaW5jbHVkZSAic3RyY2FzZS5oIgotI2luY2x1ZGUgIng1MDlhc24xLmgiCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJtdWx0aWlmLmgiCi0KLSNpbmNsdWRlIDxjeWFzc2wvb3BlbnNzbC9zc2wuaD4KLSNpbmNsdWRlIDxjeWFzc2wvc3NsLmg+Ci0jaWZkZWYgSEFWRV9DWUFTU0xfRVJST1JfU1NMX0gKLSNpbmNsdWRlIDxjeWFzc2wvZXJyb3Itc3NsLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGN5YXNzbC9lcnJvci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9yYW5kb20uaD4KLSNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3NoYTI1Ni5oPgotCi0jaW5jbHVkZSAiY3lhc3NsLmgiCi0KLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZTogKi8KLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLSNpZiBMSUJDWUFTU0xfVkVSU0lPTl9IRVggPCAweDAyMDA3MDAyIC8qIDwgMi43LjIgKi8KLSNkZWZpbmUgQ1lBU1NMX01BWF9FUlJPUl9TWiA4MAotI2VuZGlmCi0KLS8qIEtFRVBfUEVFUl9DRVJUIGlzIGEgcHJvZHVjdCBvZiB0aGUgcHJlc2VuY2Ugb2YgYnVpbGQgdGltZSBzeW1ib2wKLSAgIE9QRU5TU0xfRVhUUkEgd2l0aG91dCBOT19DRVJUUywgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uLiBLRUVQX1BFRVJfQ0VSVCBpcwotICAgaW4gd29sZlNTTCdzIHNldHRpbmdzLmgsIGFuZCB0aGUgbGF0dGVyIHR3byBhcmUgYnVpbGQgdGltZSBzeW1ib2xzIGluCi0gICBvcHRpb25zLmguICovCi0jaWZuZGVmIEtFRVBfUEVFUl9DRVJUCi0jaWYgZGVmaW5lZChIQVZFX0NZQVNTTF9HRVRfUEVFUl9DRVJUSUZJQ0FURSkgfHwgXAotICAgIGRlZmluZWQoSEFWRV9XT0xGU1NMX0dFVF9QRUVSX0NFUlRJRklDQVRFKSB8fCBcCi0gICAgKGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgJiYgIWRlZmluZWQoTk9fQ0VSVFMpKQotI2RlZmluZSBLRUVQX1BFRVJfQ0VSVAotI2VuZGlmCi0jZW5kaWYKLQotc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgewotICBTU0xfQ1RYKiBjdHg7Ci0gIFNTTCogICAgIGhhbmRsZTsKLX07Ci0KLSNkZWZpbmUgQkFDS0VORCBjb25uc3NsLT5iYWNrZW5kCi0KLXN0YXRpYyBDdXJsX3JlY3YgY3lhc3NsX3JlY3Y7Ci1zdGF0aWMgQ3VybF9zZW5kIGN5YXNzbF9zZW5kOwotCi0KLXN0YXRpYyBpbnQgZG9fZmlsZV90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCi17Ci0gIGlmKCF0eXBlIHx8ICF0eXBlWzBdKQotICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOwotICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiUEVNIikpCi0gICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKHR5cGUsICJERVIiKSkKLSAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX0FTTjE7Ci0gIHJldHVybiAtMTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYWxsIHRoZSBjbGllbnQvQ0EgY2VydGlmaWNhdGVzIGFuZCBDUkxzLiBTZXR1cCB0aGUgVExTCi0gKiBsYXllciBhbmQgZG8gYWxsIG5lY2Vzc2FyeSBtYWdpYy4KLSAqLwotc3RhdGljIENVUkxjb2RlCi1jeWFzc2xfY29ubmVjdF9zdGVwMShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBjaGFyICpjaXBoZXJzOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIFNTTF9NRVRIT0QqIHJlcV9tZXRob2QgPSBOVUxMOwotICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSNpZmRlZiBIQVZFX1NOSQotICBib29sIHNuaSA9IEZBTFNFOwotI2RlZmluZSB1c2Vfc25pKHgpICBzbmkgPSAoeCkKLSNlbHNlCi0jZGVmaW5lIHVzZV9zbmkoeCkgIEN1cmxfbm9wX3N0bXQKLSNlbmRpZgotCi0gIGlmKGNvbm5zc2wtPnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKQotICAgIHJldHVybiBDVVJMRV9PSzsKLQotICBpZihTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpICE9IENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORSkgewotICAgIGZhaWxmKGRhdGEsICJDeWFTU0wgZG9lcyBub3Qgc3VwcG9ydCB0byBzZXQgbWF4aW11bSBTU0wvVExTIHZlcnNpb24iKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotICAvKiBjaGVjayB0byBzZWUgaWYgd2UndmUgYmVlbiB0b2xkIHRvIHVzZSBhbiBleHBsaWNpdCBTU0wvVExTIHZlcnNpb24gKi8KLSAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSNpZiBMSUJDWUFTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwMzAwMCAvKiA+PSAzLjMuMCAqLwotICAgIC8qIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcyBzZXQgbGF0ZXIgYWZ0ZXIgdGhlIENUWCBvYmplY3QgaXMgY3JlYXRlZCAqLwotICAgIHJlcV9tZXRob2QgPSBTU0x2MjNfY2xpZW50X21ldGhvZCgpOwotI2Vsc2UKLSAgICBpbmZvZihkYXRhLCAiQ3lhU1NMIDwzLjMuMCBjYW5ub3QgYmUgY29uZmlndXJlZCB0byB1c2UgVExTIDEuMC0xLjIsICIKLSAgICAgICAgICAiVExTIDEuMCBpcyB1c2VkIGV4Y2x1c2l2ZWx5XG4iKTsKLSAgICByZXFfbWV0aG9kID0gVExTdjFfY2xpZW50X21ldGhvZCgpOwotI2VuZGlmCi0gICAgdXNlX3NuaShUUlVFKTsKLSAgICBicmVhazsKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKLSNpZmRlZiBXT0xGU1NMX0FMTE9XX1RMU1YxMAotICAgIHJlcV9tZXRob2QgPSBUTFN2MV9jbGllbnRfbWV0aG9kKCk7Ci0gICAgdXNlX3NuaShUUlVFKTsKLSNlbHNlCi0gICAgZmFpbGYoZGF0YSwgIkN5YVNTTCBkb2VzIG5vdCBzdXBwb3J0IFRMUyAxLjAiKTsKLSAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwotI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gICAgcmVxX21ldGhvZCA9IFRMU3YxXzFfY2xpZW50X21ldGhvZCgpOwotICAgIHVzZV9zbmkoVFJVRSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gICAgcmVxX21ldGhvZCA9IFRMU3YxXzJfY2xpZW50X21ldGhvZCgpOwotICAgIHVzZV9zbmkoVFJVRSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0jaWZkZWYgV09MRlNTTF9UTFMxMwotICAgIHJlcV9tZXRob2QgPSB3b2xmVExTdjFfM19jbGllbnRfbWV0aG9kKCk7Ci0gICAgdXNlX3NuaShUUlVFKTsKLSAgICBicmVhazsKLSNlbHNlCi0gICAgZmFpbGYoZGF0YSwgIkN5YVNTTDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSNlbmRpZgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKLSNpZmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCi0gICAgcmVxX21ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKLSAgICB1c2Vfc25pKEZBTFNFKTsKLSNlbHNlCi0gICAgZmFpbGYoZGF0YSwgIkN5YVNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYzIik7Ci0gICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKLSNlbmRpZgotICAgIGJyZWFrOwotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICBmYWlsZihkYXRhLCAiQ3lhU1NMIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIGRlZmF1bHQ6Ci0gICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotICBpZighcmVxX21ldGhvZCkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIG1ldGhvZCEiKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCi0gIGlmKEJBQ0tFTkQtPmN0eCkKLSAgICBTU0xfQ1RYX2ZyZWUoQkFDS0VORC0+Y3R4KTsKLSAgQkFDS0VORC0+Y3R4ID0gU1NMX0NUWF9uZXcocmVxX21ldGhvZCk7Ci0KLSAgaWYoIUJBQ0tFTkQtPmN0eCkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIGNvbnRleHQhIik7Ci0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQotICBzd2l0Y2goU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pKSB7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotI2lmIExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+IDB4MDMwMDQwMDYgLyogPiAzLjQuNiAqLwotICAgIC8qIFZlcnNpb25zIDMuMy4wIHRvIDMuNC42IHdlIGtub3cgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcyB3aGF0ZXZlcgotICAgIG1pbmltdW0gdmVyc2lvbiBvZiBUTFMgd2FzIGJ1aWx0IGluIGFuZCBhdCBsZWFzdCBUTFMgMS4wLiBGb3IgbGF0ZXIgbGlicmFyeQotICAgIHZlcnNpb25zIHRoYXQgY291bGQgY2hhbmdlIChlZyBUTFMgMS4wIGJ1aWx0IGluIGJ1dCBkZWZhdWx0cyB0byBUTFMgMS4xKSBzbwotICAgIHdlIGhhdmUgdGhpcyBzaG9ydCBjaXJjdWl0IGV2YWx1YXRpb24gdG8gZmluZCB0aGUgbWluaW11bSBzdXBwb3J0ZWQgVExTCi0gICAgdmVyc2lvbi4gV2UgdXNlIHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24gYW5kIG5vdCBDeWFTU0xfU2V0TWluVmVyc2lvbgotICAgIGJlY2F1c2Ugb25seSB0aGUgZm9ybWVyIHdpbGwgd29yayBiZWZvcmUgdGhlIHVzZXIncyBDVFggY2FsbGJhY2sgaXMgY2FsbGVkLgotICAgICovCi0gICAgaWYoKHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24oQkFDS0VORC0+Y3R4LCBXT0xGU1NMX1RMU1YxKSAhPSAxKSAmJgotICAgICAgICh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKEJBQ0tFTkQtPmN0eCwgV09MRlNTTF9UTFNWMV8xKSAhPSAxKSAmJgotICAgICAgICh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKEJBQ0tFTkQtPmN0eCwgV09MRlNTTF9UTFNWMV8yKSAhPSAxKQotI2lmZGVmIFdPTEZTU0xfVExTMTMKLSAgICAgICAmJiAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihCQUNLRU5ELT5jdHgsIFdPTEZTU0xfVExTVjFfMykgIT0gMSkKLSNlbmRpZgotICAgICAgKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBzZXQgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiIpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIH0KLSNlbmRpZgotICAgIGJyZWFrOwotICB9Ci0KLSAgY2lwaGVycyA9IFNTTF9DT05OX0NPTkZJRyhjaXBoZXJfbGlzdCk7Ci0gIGlmKGNpcGhlcnMpIHsKLSAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoQkFDS0VORC0+Y3R4LCBjaXBoZXJzKSkgewotICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCBzZXR0aW5nIGNpcGhlciBsaXN0OiAlcyIsIGNpcGhlcnMpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7Ci0gICAgfQotICAgIGluZm9mKGRhdGEsICJDaXBoZXIgc2VsZWN0aW9uOiAlc1xuIiwgY2lwaGVycyk7Ci0gIH0KLQotI2lmbmRlZiBOT19GSUxFU1lTVEVNCi0gIC8qIGxvYWQgdHJ1c3RlZCBjYWNlcnQgKi8KLSAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpIHsKLSAgICBpZigxICE9IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKEJBQ0tFTkQtPmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpKSkgewotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7Ci0gICAgICAgIC8qIEZhaWwgaWYgd2UgaW5zaXN0IG9uIHN1Y2Nlc3NmdWxseSB2ZXJpZnlpbmcgdGhlIHNlcnZlci4gKi8KLSAgICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9uczpcbiIKLSAgICAgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuICBDQXBhdGg6ICVzIiwKLSAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSk/Ci0gICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOiAibm9uZSIsCi0gICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpPwotICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSA6ICJub25lIik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUKLSAgICAgICAgICAgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiAqLwotICAgICAgICBpbmZvZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zLCIKLSAgICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIEV2ZXJ5dGhpbmcgaXMgZmluZS4gKi8KLSAgICAgIGluZm9mKGRhdGEsICJzdWNjZXNzZnVsbHkgc2V0IGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnM6XG4iKTsKLSAgICB9Ci0gICAgaW5mb2YoZGF0YSwKLSAgICAgICAgICAiICBDQWZpbGU6ICVzXG4iCi0gICAgICAgICAgIiAgQ0FwYXRoOiAlc1xuIiwKLSAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSA/IFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOgotICAgICAgICAgICJub25lIiwKLSAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSA/IFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpOgotICAgICAgICAgICJub25lIik7Ci0gIH0KLQotICAvKiBMb2FkIHRoZSBjbGllbnQgY2VydGlmaWNhdGUsIGFuZCBwcml2YXRlIGtleSAqLwotICBpZihTU0xfU0VUX09QVElPTihjZXJ0KSAmJiBTU0xfU0VUX09QVElPTihrZXkpKSB7Ci0gICAgaW50IGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKTsKLQotICAgIGlmKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoQkFDS0VORC0+Y3R4LCBTU0xfU0VUX09QVElPTihjZXJ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gdXNlIGNsaWVudCBjZXJ0aWZpY2F0ZSAobm8ga2V5IG9yIHdyb25nIHBhc3MiCi0gICAgICAgICAgICAiIHBocmFzZT8pIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgfQotCi0gICAgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKFNTTF9TRVRfT1BUSU9OKGtleV90eXBlKSk7Ci0gICAgaWYoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKEJBQ0tFTkQtPmN0eCwgU1NMX1NFVF9PUFRJT04oa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgewotICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byBzZXQgcHJpdmF0ZSBrZXkiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0gIH0KLSNlbmRpZiAvKiAhTk9fRklMRVNZU1RFTSAqLwotCi0gIC8qIFNTTCBhbHdheXMgdHJpZXMgdG8gdmVyaWZ5IHRoZSBwZWVyLCB0aGlzIG9ubHkgc2F5cyB3aGV0aGVyIGl0IHNob3VsZAotICAgKiBmYWlsIHRvIGNvbm5lY3QgaWYgdGhlIHZlcmlmaWNhdGlvbiBmYWlscywgb3IgaWYgaXQgc2hvdWxkIGNvbnRpbnVlCi0gICAqIGFueXdheS4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZSByZXN1bHQgb2YgdGhlIHZlcmlmaWNhdGlvbiBpcyBjaGVja2VkIHdpdGgKLSAgICogU1NMX2dldF92ZXJpZnlfcmVzdWx0KCkgYmVsb3cuICovCi0gIFNTTF9DVFhfc2V0X3ZlcmlmeShCQUNLRU5ELT5jdHgsCi0gICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik/U1NMX1ZFUklGWV9QRUVSOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0jaWZkZWYgSEFWRV9TTkkKLSAgaWYoc25pKSB7Ci0gICAgc3RydWN0IGluX2FkZHIgYWRkcjQ7Ci0jaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7Ci0jZW5kaWYKLSAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKLSAgICAgIGNvbm4tPmhvc3QubmFtZTsKLSAgICBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKLSAgICBpZigoaG9zdG5hbWVfbGVuIDwgVVNIUlRfTUFYKSAmJgotICAgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmYWRkcjQpKSAmJgotI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgICAgKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCAmYWRkcjYpKSAmJgotI2VuZGlmCi0gICAgICAgKEN5YVNTTF9DVFhfVXNlU05JKEJBQ0tFTkQtPmN0eCwgQ1lBU1NMX1NOSV9IT1NUX05BTUUsIGhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpaG9zdG5hbWVfbGVuKSAhPSAxKSkgewotICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBjb25maWd1cmUgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSAiCi0gICAgICAgICAgICAiVExTIGV4dGVuc2lvblxuIik7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICAvKiBnaXZlIGFwcGxpY2F0aW9uIGEgY2hhbmNlIHRvIGludGVyZmVyZSB3aXRoIFNTTCBzZXQgdXAuICovCi0gIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eCkgewotICAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICAgIHJlc3VsdCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCBCQUNLRU5ELT5jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuZnNzbGN0eHApOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNpZ25hbGVkIGJ5IHNzbCBjdHggY2FsbGJhY2siKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICB9Ci0jaWZkZWYgTk9fRklMRVNZU1RFTQotICBlbHNlIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IENlcnRpZmljYXRlcyBjb3VsZG4ndCBiZSBsb2FkZWQgYmVjYXVzZSBDeWFTU0wgd2FzIGJ1aWx0IgotICAgICAgICAgICIgd2l0aCBcIm5vIGZpbGVzeXN0ZW1cIi4gRWl0aGVyIGRpc2FibGUgcGVlciB2ZXJpZmljYXRpb24iCi0gICAgICAgICAgIiAoaW5zZWN1cmUpIG9yIGlmIHlvdSBhcmUgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsIHlvdSIKLSAgICAgICAgICAiIGNhbiBsb2FkIGNlcnRpZmljYXRlcyB2aWEgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLiIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotI2VuZGlmCi0KLSAgLyogTGV0J3MgbWFrZSBhbiBTU0wgc3RydWN0dXJlICovCi0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkKLSAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOwotICBCQUNLRU5ELT5oYW5kbGUgPSBTU0xfbmV3KEJBQ0tFTkQtPmN0eCk7Ci0gIGlmKCFCQUNLRU5ELT5oYW5kbGUpIHsKLSAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0IChoYW5kbGUpISIpOwotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9Ci0KLSNpZmRlZiBIQVZFX0FMUE4KLSAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKLSAgICBjaGFyIHByb3RvY29sc1sxMjhdOwotICAgICpwcm90b2NvbHMgPSAnXDAnOwotCi0gICAgLyogd29sZlNTTCdzIEFMUE4gcHJvdG9jb2wgbmFtZSBsaXN0IGZvcm1hdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YKLSAgICAgICBwcm90b2NvbHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBwcmVmZXJlbmNlLCBlZzogImgyLGh0dHAvMS4xIiAqLwotCi0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMikgewotICAgICAgc3RyY3B5KHByb3RvY29scyArIHN0cmxlbihwcm90b2NvbHMpLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQgIiwiKTsKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0cmNweShwcm90b2NvbHMgKyBzdHJsZW4ocHJvdG9jb2xzKSwgQUxQTl9IVFRQXzFfMSk7Ci0gICAgaW5mb2YoZGF0YSwgIkFMUE4sIG9mZmVyaW5nICVzXG4iLCBBTFBOX0hUVFBfMV8xKTsKLQotICAgIGlmKHdvbGZTU0xfVXNlQUxQTihCQUNLRU5ELT5oYW5kbGUsIHByb3RvY29scywKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXN0cmxlbihwcm90b2NvbHMpLAotICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FMUE5fQ09OVElOVUVfT05fTUlTTUFUQ0gpICE9IFNTTF9TVUNDRVNTKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgc2V0dGluZyBBTFBOIHByb3RvY29scyIpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIH0KLSAgfQotI2VuZGlmIC8qIEhBVkVfQUxQTiAqLwotCi0gIC8qIENoZWNrIGlmIHRoZXJlJ3MgYSBjYWNoZWQgSUQgd2UgY2FuL3Nob3VsZCB1c2UgaGVyZSEgKi8KLSAgaWYoU1NMX1NFVF9PUFRJT04ocHJpbWFyeS5zZXNzaW9uaWQpKSB7Ci0gICAgdm9pZCAqc3NsX3Nlc3Npb25pZCA9IE5VTEw7Ci0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCBOVUxMLCBzb2NraW5kZXgpKSB7Ci0gICAgICAvKiB3ZSBnb3QgYSBzZXNzaW9uIGlkLCB1c2UgaXQhICovCi0gICAgICBpZighU1NMX3NldF9zZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSwgc3NsX3Nlc3Npb25pZCkpIHsKLSAgICAgICAgY2hhciBlcnJvcl9idWZmZXJbQ1lBU1NMX01BWF9FUlJPUl9TWl07Ci0gICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTF9zZXRfc2Vzc2lvbiBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgMCksCi0gICAgICAgICAgICAgIGVycm9yX2J1ZmZlcikpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgICB9Ci0gICAgICAvKiBJbmZvcm1hdGlvbmFsIG1lc3NhZ2UgKi8KLSAgICAgIGluZm9mKGRhdGEsICJTU0wgcmUtdXNpbmcgc2Vzc2lvbiBJRFxuIik7Ci0gICAgfQotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gIH0KLQotICAvKiBwYXNzIHRoZSByYXcgc29ja2V0IGludG8gdGhlIFNTTCBsYXllciAqLwotICBpZighU1NMX3NldF9mZChCQUNLRU5ELT5oYW5kbGUsIChpbnQpc29ja2ZkKSkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTF9zZXRfZmQgZmFpbGVkIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzI7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUKLWN5YXNzbF9jb25uZWN0X3N0ZXAyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi17Ci0gIGludCByZXQgPSAtMTsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKLSAgICBjb25uLT5ob3N0Lm5hbWU7Ci0gIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KLSAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOiBjb25uLT5ob3N0LmRpc3BuYW1lOwotICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0gU1NMX0lTX1BST1hZKCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKLQotICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBjeWFzc2xfcmVjdjsKLSAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gY3lhc3NsX3NlbmQ7Ci0KLSAgLyogRW5hYmxlIFJGQzI4MTggY2hlY2tzICovCi0gIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgewotICAgIHJldCA9IEN5YVNTTF9jaGVja19kb21haW5fbmFtZShCQUNLRU5ELT5oYW5kbGUsIGhvc3RuYW1lKTsKLSAgICBpZihyZXQgPT0gU1NMX0ZBSUxVUkUpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCi0gIHJldCA9IFNTTF9jb25uZWN0KEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIGlmKHJldCAhPSAxKSB7Ci0gICAgY2hhciBlcnJvcl9idWZmZXJbQ1lBU1NMX01BWF9FUlJPUl9TWl07Ci0gICAgaW50ICBkZXRhaWwgPSBTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgcmV0KTsKLQotICAgIGlmKFNTTF9FUlJPUl9XQU5UX1JFQUQgPT0gZGV0YWlsKSB7Ci0gICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIH0KLSAgICBlbHNlIGlmKFNTTF9FUlJPUl9XQU5UX1dSSVRFID09IGRldGFpbCkgewotICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICB9Ci0gICAgLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gb3ZlcnJpZGUgb25seSB0aGUgQ04gbWF0Y2hpbmcuCi0gICAgICogVGhpcyB3aWxsIGVuYWJsZSB0aGUgb3ZlcnJpZGUgb2YgYm90aCBtaXNtYXRjaGluZyBTdWJqZWN0QWx0TmFtZXMKLSAgICAgKiBhcyBhbHNvIG1pc21hdGNoaW5nIENOIGZpZWxkcyAqLwotICAgIGVsc2UgaWYoRE9NQUlOX05BTUVfTUlTTUFUQ0ggPT0gZGV0YWlsKSB7Ci0jaWYgMQotICAgICAgZmFpbGYoZGF0YSwgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgICAgZGlzcG5hbWUpOwotICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSNlbHNlCi0gICAgICAvKiBXaGVuIHRoZSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoKSBpcyB1c2VkIGFuZCB5b3UgZGVzaXJlIHRvIGNvbnRpbnVlCi0gICAgICAgKiBvbiBhIERPTUFJTl9OQU1FX01JU01BVENILCBpLmUuICdjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QgPT0gMCcsCi0gICAgICAgKiBDeWFTU0wgdmVyc2lvbiAyLjQuMCB3aWxsIGZhaWwgd2l0aCBhbiBJTkNPTVBMRVRFX0RBVEEgZXJyb3IuIFRoZSBvbmx5Ci0gICAgICAgKiB3YXkgdG8gZG8gdGhpcyBpcyBjdXJyZW50bHkgdG8gc3dpdGNoIHRoZSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoKQotICAgICAgICogaW4gYW5kIG91dCBiYXNlZCBvbiB0aGUgJ2Nvbm4tPnNzbF9jb25maWcudmVyaWZ5aG9zdCcgdmFsdWUuICovCi0gICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgICAgICBkaXNwbmFtZSk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaW5mb2YoZGF0YSwKLSAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBhbmQvb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgZGlzcG5hbWUpOwotICAgICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0jaWYgTElCQ1lBU1NMX1ZFUlNJT05fSEVYID49IDB4MDIwMDcwMDAgLyogMi43LjAgKi8KLSAgICBlbHNlIGlmKEFTTl9OT19TSUdORVJfRSA9PSBkZXRhaWwpIHsKLSAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewotICAgICAgICBmYWlsZihkYXRhLCAiXHRDQSBzaWduZXIgbm90IGF2YWlsYWJsZSBmb3IgdmVyaWZpY2F0aW9uXG4iKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBKdXN0IGNvbnRpbnVlIHdpdGggYSB3YXJuaW5nIGlmIG5vIHN0cmljdCBjZXJ0aWZpY2F0ZQotICAgICAgICAgICB2ZXJpZmljYXRpb24gaXMgcmVxdWlyZWQuICovCi0gICAgICAgIGluZm9mKGRhdGEsICJDQSBzaWduZXIgbm90IGF2YWlsYWJsZSBmb3IgdmVyaWZpY2F0aW9uLCAiCi0gICAgICAgICAgICAgICAgICAgICJjb250aW51aW5nIGFueXdheVxuIik7Ci0gICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgZWxzZSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMX2Nvbm5lY3QgZmFpbGVkIHdpdGggZXJyb3IgJWQ6ICVzIiwgZGV0YWlsLAotICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoZGV0YWlsLCBlcnJvcl9idWZmZXIpKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0gIH0KLQotICBpZihwaW5uZWRwdWJrZXkpIHsKLSNpZmRlZiBLRUVQX1BFRVJfQ0VSVAotICAgIFg1MDkgKng1MDk7Ci0gICAgY29uc3QgY2hhciAqeDUwOV9kZXI7Ci0gICAgaW50IHg1MDlfZGVyX2xlbjsKLSAgICBjdXJsX1g1MDljZXJ0aWZpY2F0ZSB4NTA5X3BhcnNlZDsKLSAgICBjdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0OwotCi0gICAgeDUwOSA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShCQUNLRU5ELT5oYW5kbGUpOwotICAgIGlmKCF4NTA5KSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgeDUwOV9kZXIgPSAoY29uc3QgY2hhciAqKUN5YVNTTF9YNTA5X2dldF9kZXIoeDUwOSwgJng1MDlfZGVyX2xlbik7Ci0gICAgaWYoIXg1MDlfZGVyKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBBU04uMSBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgbWVtc2V0KCZ4NTA5X3BhcnNlZCwgMCwgc2l6ZW9mKHg1MDlfcGFyc2VkKSk7Ci0gICAgaWYoQ3VybF9wYXJzZVg1MDkoJng1MDlfcGFyc2VkLCB4NTA5X2RlciwgeDUwOV9kZXIgKyB4NTA5X2Rlcl9sZW4pKQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKLQotICAgIHB1YmtleSA9ICZ4NTA5X3BhcnNlZC5zdWJqZWN0UHVibGljS2V5SW5mbzsKLSAgICBpZighcHVia2V5LT5oZWFkZXIgfHwgcHVia2V5LT5lbmQgPD0gcHVia2V5LT5oZWFkZXIpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGZhaWxlZCByZXRyaWV2aW5nIHB1YmxpYyBrZXkgZnJvbSBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gQ3VybF9waW5fcGVlcl9wdWJrZXkoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRwdWJrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwdWJrZXktPmhlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KShwdWJrZXktPmVuZCAtIHB1YmtleS0+aGVhZGVyKSk7Ci0gICAgaWYocmVzdWx0KSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBwdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHBpbm5lZCBwdWJsaWMga2V5ISIpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jZWxzZQotICAgIGZhaWxmKGRhdGEsICJMaWJyYXJ5IGxhY2tzIHBpbm5pbmcgc3VwcG9ydCBidWlsdC1pbiIpOwotICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47Ci0jZW5kaWYKLSAgfQotCi0jaWZkZWYgSEFWRV9BTFBOCi0gIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgaW50IHJjOwotICAgIGNoYXIgKnByb3RvY29sID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbF9sZW4gPSAwOwotCi0gICAgcmMgPSB3b2xmU1NMX0FMUE5fR2V0UHJvdG9jb2woQkFDS0VORC0+aGFuZGxlLCAmcHJvdG9jb2wsICZwcm90b2NvbF9sZW4pOwotCi0gICAgaWYocmMgPT0gU1NMX1NVQ0NFU1MpIHsKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgYWNjZXB0ZWQgdG8gdXNlICUuKnNcbiIsIHByb3RvY29sX2xlbiwKLSAgICAgICAgICAgIHByb3RvY29sKTsKLQotICAgICAgaWYocHJvdG9jb2xfbGVuID09IEFMUE5fSFRUUF8xXzFfTEVOR1RIICYmCi0gICAgICAgICAhbWVtY21wKHByb3RvY29sLCBBTFBOX0hUVFBfMV8xLCBBTFBOX0hUVFBfMV8xX0xFTkdUSCkpCi0gICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzFfMTsKLSNpZmRlZiBVU0VfTkdIVFRQMgotICAgICAgZWxzZSBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMiAmJgotICAgICAgICAgICAgICBwcm90b2NvbF9sZW4gPT0gTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEX0xFTiAmJgotICAgICAgICAgICAgICAhbWVtY21wKHByb3RvY29sLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQsCi0gICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEX0xFTikpCi0gICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzI7Ci0jZW5kaWYKLSAgICAgIGVsc2UKLSAgICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHVucmVjb2duaXplZCBwcm90b2NvbCAlLipzXG4iLCBwcm90b2NvbF9sZW4sCi0gICAgICAgICAgICAgIHByb3RvY29sKTsKLSAgICAgIEN1cmxfbXVsdGl1c2Vfc3RhdGUoY29ubiwgY29ubi0+bmVnbnBuID09IENVUkxfSFRUUF9WRVJTSU9OXzIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICBCVU5ETEVfTVVMVElQTEVYIDogQlVORExFX05PX01VTFRJVVNFKTsKLSAgICB9Ci0gICAgZWxzZSBpZihyYyA9PSBTU0xfQUxQTl9OT1RfRk9VTkQpCi0gICAgICBpbmZvZihkYXRhLCAiQUxQTiwgc2VydmVyIGRpZCBub3QgYWdyZWUgdG8gYSBwcm90b2NvbFxuIik7Ci0gICAgZWxzZSB7Ci0gICAgICBmYWlsZihkYXRhLCAiQUxQTiwgZmFpbHVyZSBnZXR0aW5nIHByb3RvY29sLCBlcnJvciAlZCIsIHJjKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0gIH0KLSNlbmRpZiAvKiBIQVZFX0FMUE4gKi8KLQotICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMzsKLSNpZiAoTElCQ1lBU1NMX1ZFUlNJT05fSEVYID49IDB4MDMwMDkwMTApCi0gIGluZm9mKGRhdGEsICJTU0wgY29ubmVjdGlvbiB1c2luZyAlcyAvICVzXG4iLAotICAgICAgICB3b2xmU1NMX2dldF92ZXJzaW9uKEJBQ0tFTkQtPmhhbmRsZSksCi0gICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lKEJBQ0tFTkQtPmhhbmRsZSkpOwotI2Vsc2UKLSAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0ZWRcbiIpOwotI2VuZGlmCi0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi0KLXN0YXRpYyBDVVJMY29kZQotY3lhc3NsX2Nvbm5lY3Rfc3RlcDMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLQotICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwotCi0gIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgewotICAgIGJvb2wgaW5jYWNoZTsKLSAgICBTU0xfU0VTU0lPTiAqb3VyX3NzbF9zZXNzaW9uaWQ7Ci0gICAgdm9pZCAqb2xkX3NzbF9zZXNzaW9uaWQgPSBOVUxMOwotCi0gICAgb3VyX3NzbF9zZXNzaW9uaWQgPSBTU0xfZ2V0X3Nlc3Npb24oQkFDS0VORC0+aGFuZGxlKTsKLQotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGluY2FjaGUgPSAhKEN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tpbmRleCkpOwotICAgIGlmKGluY2FjaGUpIHsKLSAgICAgIGlmKG9sZF9zc2xfc2Vzc2lvbmlkICE9IG91cl9zc2xfc2Vzc2lvbmlkKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJvbGQgU1NMIHNlc3Npb24gSUQgaXMgc3RhbGUsIHJlbW92aW5nXG4iKTsKLSAgICAgICAgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKGNvbm4sIG9sZF9zc2xfc2Vzc2lvbmlkKTsKLSAgICAgICAgaW5jYWNoZSA9IEZBTFNFOwotICAgICAgfQotICAgIH0KLQotICAgIGlmKCFpbmNhY2hlKSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiB1bmtub3duIHNpemUgKi8sIHNvY2tpbmRleCk7Ci0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCB0byBzdG9yZSBzc2wgc2Vzc2lvbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwotICB9Ci0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBjeWFzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKLXsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGNoYXIgZXJyb3JfYnVmZmVyW0NZQVNTTF9NQVhfRVJST1JfU1pdOwotICBpbnQgIG1lbWxlbiA9IChsZW4gPiAoc2l6ZV90KUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpbGVuOwotICBpbnQgIHJjICAgICA9IFNTTF93cml0ZShCQUNLRU5ELT5oYW5kbGUsIG1lbSwgbWVtbGVuKTsKLQotICBpZihyYyA8IDApIHsKLSAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIHJjKTsKLQotICAgIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgIC8qIHRoZXJlJ3MgZGF0YSBwZW5kaW5nLCByZS1pbnZva2UgU1NMX3dyaXRlKCkgKi8KLSAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwotICAgICAgcmV0dXJuIC0xOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHdyaXRlOiAlcywgZXJybm8gJWQiLAotICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGVycm9yX2J1ZmZlciksCi0gICAgICAgICAgICBTT0NLRVJSTk8pOwotICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBDdXJsX2N5YXNzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotCi0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkgewotICAgICh2b2lkKVNTTF9zaHV0ZG93bihCQUNLRU5ELT5oYW5kbGUpOwotICAgIFNTTF9mcmVlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gICAgQkFDS0VORC0+aGFuZGxlID0gTlVMTDsKLSAgfQotICBpZihCQUNLRU5ELT5jdHgpIHsKLSAgICBTU0xfQ1RYX2ZyZWUoQkFDS0VORC0+Y3R4KTsKLSAgICBCQUNLRU5ELT5jdHggPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGN5YXNzbF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKLXsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07Ci0gIGNoYXIgZXJyb3JfYnVmZmVyW0NZQVNTTF9NQVhfRVJST1JfU1pdOwotICBpbnQgIGJ1ZmZzaXplID0gKGJ1ZmZlcnNpemUgPiAoc2l6ZV90KUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpYnVmZmVyc2l6ZTsKLSAgaW50ICBucmVhZCAgICA9IFNTTF9yZWFkKEJBQ0tFTkQtPmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7Ci0KLSAgaWYobnJlYWQgPCAwKSB7Ci0gICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCBucmVhZCk7Ci0KLSAgICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46IC8qIG5vIG1vcmUgZGF0YSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF9yZWFkKCkgKi8KLSAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwotICAgICAgcmV0dXJuIC0xOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHJlYWQ6ICVzLCBlcnJubyAlZCIsCi0gICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgZXJyb3JfYnVmZmVyKSwKLSAgICAgICAgICAgIFNPQ0tFUlJOTyk7Ci0gICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotICByZXR1cm4gbnJlYWQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgQ3VybF9jeWFzc2xfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKLXsKLSAgKHZvaWQpcHRyOwotICAvKiBDeWFTU0wgcmV1c2VzIHNlc3Npb25zIG9uIG93biwgbm8gZnJlZSAqLwotfQotCi0KLXN0YXRpYyBzaXplX3QgQ3VybF9jeWFzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQotewotI2lmIExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+PSAweDAzMDA2MDAwCi0gIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAid29sZlNTTC8lcyIsIHdvbGZTU0xfbGliX3ZlcnNpb24oKSk7Ci0jZWxpZiBkZWZpbmVkKFdPTEZTU0xfVkVSU0lPTikKLSAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIHNpemUsICJ3b2xmU1NMLyVzIiwgV09MRlNTTF9WRVJTSU9OKTsKLSNlbGlmIGRlZmluZWQoQ1lBU1NMX1ZFUlNJT04pCi0gIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiQ3lhU1NMLyVzIiwgQ1lBU1NMX1ZFUlNJT04pOwotI2Vsc2UKLSAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIHNpemUsICJDeWFTU0wvJXMiLCAiPDEuOC44Iik7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgaW50IEN1cmxfY3lhc3NsX2luaXQodm9pZCkKLXsKLSAgcmV0dXJuIChDeWFTU0xfSW5pdCgpID09IFNTTF9TVUNDRVNTKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBDdXJsX2N5YXNzbF9jbGVhbnVwKHZvaWQpCi17Ci0gIEN5YVNTTF9DbGVhbnVwKCk7Ci19Ci0KLQotc3RhdGljIGJvb2wgQ3VybF9jeWFzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSogY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQotewotICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKLSAgaWYoQkFDS0VORC0+aGFuZGxlKSAgIC8qIFNTTCBpcyBpbiB1c2UgKi8KLSAgICByZXR1cm4gKDAgIT0gU1NMX3BlbmRpbmcoQkFDS0VORC0+aGFuZGxlKSkgPyBUUlVFIDogRkFMU0U7Ci0gIGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQotICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKLSAqLwotc3RhdGljIGludCBDdXJsX2N5YXNzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIGludCByZXR2YWwgPSAwOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLQotICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKLSAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOwotICAgIEJBQ0tFTkQtPmhhbmRsZSA9IE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHJldHZhbDsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUKLWN5YXNzbF9jb25uZWN0X2NvbW1vbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBib29sIG5vbmJsb2NraW5nLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgdGltZV90IHRpbWVvdXRfbXM7Ci0gIGludCB3aGF0OwotCi0gIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KLSAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKLSAgICAqZG9uZSA9IFRSVUU7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotICB9Ci0KLSAgaWYoc3NsX2Nvbm5lY3RfMSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0gICAgLyogRmluZCBvdXQgaG93IG11Y2ggbW9yZSB0aW1lIHdlJ3JlIGFsbG93ZWQgKi8KLSAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQotICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7Ci0gICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwotICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gY3lhc3NsX2Nvbm5lY3Rfc3RlcDEoY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgd2hpbGUoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8Ci0gICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8Ci0gICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0KLSAgICAvKiBjaGVjayBhbGxvd2VkIHRpbWUgbGVmdCAqLwotICAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwotCi0gICAgaWYodGltZW91dF9tcyA8IDApIHsKLSAgICAgIC8qIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGltZSBhbHJlYWR5IGlzIHVwICovCi0gICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOwotICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICB9Ci0KLSAgICAvKiBpZiBzc2wgaXMgZXhwZWN0aW5nIHNvbWV0aGluZywgY2hlY2sgaWYgaXQncyBhdmFpbGFibGUuICovCi0gICAgaWYoY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9PSBzc2xfY29ubmVjdF8yX3JlYWRpbmcKLSAgICAgICB8fCBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgewotCi0gICAgICBjdXJsX3NvY2tldF90IHdyaXRlZmQgPSBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0KLSAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOwotICAgICAgY3VybF9zb2NrZXRfdCByZWFkZmQgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0KLSAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOwotCi0gICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmc/MDp0aW1lb3V0X21zKTsKLSAgICAgIGlmKHdoYXQgPCAwKSB7Ci0gICAgICAgIC8qIGZhdGFsIGVycm9yICovCi0gICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKDAgPT0gd2hhdCkgewotICAgICAgICBpZihub25ibG9ja2luZykgewotICAgICAgICAgICpkb25lID0gRkFMU0U7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8qIHRpbWVvdXQgKi8KLSAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIHNvY2tldCBpcyByZWFkYWJsZSBvciB3cml0YWJsZSAqLwotICAgIH0KLQotICAgIC8qIFJ1biB0cmFuc2FjdGlvbiwgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyIGlmIGl0IGZhaWxlZCBvciBpZgotICAgICAqIHRoaXMgY29ubmVjdGlvbiBpcyBwYXJ0IG9mIGEgbXVsdGkgaGFuZGxlIGFuZCB0aGlzIGxvb3Agd291bGQKLSAgICAgKiBleGVjdXRlIGFnYWluLiBUaGlzIHBlcm1pdHMgdGhlIG93bmVyIG9mIGEgbXVsdGkgaGFuZGxlIHRvCi0gICAgICogYWJvcnQgYSBjb25uZWN0aW9uIGF0dGVtcHQgYmVmb3JlIHN0ZXAyIGhhcyBjb21wbGV0ZWQgd2hpbGUKLSAgICAgKiBlbnN1cmluZyB0aGF0IGEgY2xpZW50IHVzaW5nIHNlbGVjdCgpIG9yIGVwb2xsKCkgd2lsbCBhbHdheXMKLSAgICAgKiBoYXZlIGEgdmFsaWQgZmRzZXQgdG8gd2FpdCBvbi4KLSAgICAgKi8KLSAgICByZXN1bHQgPSBjeWFzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCB8fCAobm9uYmxvY2tpbmcgJiYKLSAgICAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAotICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLwotCi0gIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotICAgIHJlc3VsdCA9IGN5YXNzbF9jb25uZWN0X3N0ZXAzKGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGlmKHNzbF9jb25uZWN0X2RvbmUgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7Ci0gICAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gY3lhc3NsX3JlY3Y7Ci0gICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gY3lhc3NsX3NlbmQ7Ci0gICAgKmRvbmUgPSBUUlVFOwotICB9Ci0gIGVsc2UKLSAgICAqZG9uZSA9IEZBTFNFOwotCi0gIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi0KLXN0YXRpYyBDVVJMY29kZSBDdXJsX2N5YXNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsIGJvb2wgKmRvbmUpCi17Ci0gIHJldHVybiBjeWFzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBUUlVFLCBkb25lKTsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9jeWFzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBkb25lID0gRkFMU0U7Ci0KLSAgcmVzdWx0ID0gY3lhc3NsX2Nvbm5lY3RfY29tbW9uKGNvbm4sIHNvY2tpbmRleCwgRkFMU0UsICZkb25lKTsKLSAgaWYocmVzdWx0KQotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgREVCVUdBU1NFUlQoZG9uZSk7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9jeWFzc2xfcmFuZG9tKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVudHJvcHksIHNpemVfdCBsZW5ndGgpCi17Ci0gIFJORyBybmc7Ci0gICh2b2lkKWRhdGE7Ci0gIGlmKEluaXRSbmcoJnJuZykpCi0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICBpZihsZW5ndGggPiBVSU5UX01BWCkKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gIGlmKFJOR19HZW5lcmF0ZUJsb2NrKCZybmcsIGVudHJvcHksICh1bnNpZ25lZClsZW5ndGgpKQotICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKLSAgaWYoRnJlZVJuZygmcm5nKSkKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIENVUkxjb2RlIEN1cmxfY3lhc3NsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICp0bXAsIC8qIGlucHV0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRtcGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGEyNTZzdW0gLyogb3V0cHV0ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1bnVzZWQpCi17Ci0gIFNoYTI1NiBTSEEyNTZwdzsKLSAgKHZvaWQpdW51c2VkOwotICBJbml0U2hhMjU2KCZTSEEyNTZwdyk7Ci0gIFNoYTI1NlVwZGF0ZSgmU0hBMjU2cHcsIHRtcCwgKHdvcmQzMil0bXBsZW4pOwotICBTaGEyNTZGaW5hbCgmU0hBMjU2cHcsIHNoYTI1NnN1bSk7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIHZvaWQgKkN1cmxfY3lhc3NsX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKLXsKLSAgKHZvaWQpaW5mbzsKLSAgcmV0dXJuIEJBQ0tFTkQtPmhhbmRsZTsKLX0KLQotY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX2N5YXNzbCA9IHsKLSAgeyBDVVJMU1NMQkFDS0VORF9XT0xGU1NMLCAiV29sZlNTTCIgfSwgLyogaW5mbyAqLwotCi0jaWZkZWYgS0VFUF9QRUVSX0NFUlQKLSAgU1NMU1VQUF9QSU5ORURQVUJLRVkgfAotI2VuZGlmCi0gIFNTTFNVUFBfU1NMX0NUWCwKLQotICBzaXplb2Yoc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEpLAotCi0gIEN1cmxfY3lhc3NsX2luaXQsICAgICAgICAgICAgICAgIC8qIGluaXQgKi8KLSAgQ3VybF9jeWFzc2xfY2xlYW51cCwgICAgICAgICAgICAgLyogY2xlYW51cCAqLwotICBDdXJsX2N5YXNzbF92ZXJzaW9uLCAgICAgICAgICAgICAvKiB2ZXJzaW9uICovCi0gIEN1cmxfbm9uZV9jaGVja19jeG4sICAgICAgICAgICAgIC8qIGNoZWNrX2N4biAqLwotICBDdXJsX2N5YXNzbF9zaHV0ZG93biwgICAgICAgICAgICAvKiBzaHV0ZG93biAqLwotICBDdXJsX2N5YXNzbF9kYXRhX3BlbmRpbmcsICAgICAgICAvKiBkYXRhX3BlbmRpbmcgKi8KLSAgQ3VybF9jeWFzc2xfcmFuZG9tLCAgICAgICAgICAgICAgLyogcmFuZG9tICovCi0gIEN1cmxfbm9uZV9jZXJ0X3N0YXR1c19yZXF1ZXN0LCAgIC8qIGNlcnRfc3RhdHVzX3JlcXVlc3QgKi8KLSAgQ3VybF9jeWFzc2xfY29ubmVjdCwgICAgICAgICAgICAgLyogY29ubmVjdCAqLwotICBDdXJsX2N5YXNzbF9jb25uZWN0X25vbmJsb2NraW5nLCAvKiBjb25uZWN0X25vbmJsb2NraW5nICovCi0gIEN1cmxfY3lhc3NsX2dldF9pbnRlcm5hbHMsICAgICAgIC8qIGdldF9pbnRlcm5hbHMgKi8KLSAgQ3VybF9jeWFzc2xfY2xvc2UsICAgICAgICAgICAgICAgLyogY2xvc2Vfb25lICovCi0gIEN1cmxfbm9uZV9jbG9zZV9hbGwsICAgICAgICAgICAgIC8qIGNsb3NlX2FsbCAqLwotICBDdXJsX2N5YXNzbF9zZXNzaW9uX2ZyZWUsICAgICAgICAvKiBzZXNzaW9uX2ZyZWUgKi8KLSAgQ3VybF9ub25lX3NldF9lbmdpbmUsICAgICAgICAgICAgLyogc2V0X2VuZ2luZSAqLwotICBDdXJsX25vbmVfc2V0X2VuZ2luZV9kZWZhdWx0LCAgICAvKiBzZXRfZW5naW5lX2RlZmF1bHQgKi8KLSAgQ3VybF9ub25lX2VuZ2luZXNfbGlzdCwgICAgICAgICAgLyogZW5naW5lc19saXN0ICovCi0gIEN1cmxfbm9uZV9mYWxzZV9zdGFydCwgICAgICAgICAgIC8qIGZhbHNlX3N0YXJ0ICovCi0gIEN1cmxfbm9uZV9tZDVzdW0sICAgICAgICAgICAgICAgIC8qIG1kNXN1bSAqLwotICBDdXJsX2N5YXNzbF9zaGEyNTZzdW0gICAgICAgICAgICAvKiBzaGEyNTZzdW0gKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9jeWFzc2wuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTExY2MuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9jeWFzc2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfQ1lBU1NMX0gKLSNkZWZpbmUgSEVBREVSX0NVUkxfQ1lBU1NMX0gKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfQ1lBU1NMCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfY3lhc3NsOwotCi0jZW5kaWYgLyogVVNFX0NZQVNTTCAqLwotI2VuZGlmIC8qIEhFQURFUl9DVVJMX0NZQVNTTF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmMKaW5kZXggYjkzZmY1ZC4uMDUzOGU0YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3NraXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSA8Z3Nrc3NsLmg+CiAjaW5jbHVkZSA8cXNvYXN5bmMuaD4KKyN1bmRlZiBIQVZFX1NPQ0tFVFBBSVIgLyogYmVjYXVzZSB0aGUgbmF0aXZlIG9uZSBpc24ndCBnb29kIGVub3VnaCAqLworI2luY2x1ZGUgInNvY2tldHBhaXIuaCIKIAogLyogU29tZSBzeW1ib2xzIGFyZSB1bmRlZmluZWQvdW5zdXBwb3J0ZWQgb24gT1M0MDAgdmVyc2lvbnMgPCBWN1IxLiAqLwogI2lmbmRlZiBHU0tfU1NMX0VYVE5fU0VSVkVSTkFNRV9SRVFVRVNUCkBAIC0xMDYsMTMgKzEwOCwxMyBAQAogI2RlZmluZSBCQUNLRU5EIGNvbm5zc2wtPmJhY2tlbmQKIAogLyogU3VwcG9ydGVkIGNpcGhlcnMuICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgZ3NraXRfY2lwaGVyIHsKICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAvKiBDaXBoZXIgbmFtZS4gKi8KICAgY29uc3QgY2hhciAqZ3NrdG9rZW47ICAgICAgICAvKiBDb3JyZXNwb25kaW5nIHRva2VuIGZvciBHU0tpdCBTdHJpbmcuICovCiAgIHVuc2lnbmVkIGludCB2ZXJzaW9uczsgICAgICAgLyogU1NMIHZlcnNpb24gZmxhZ3MuICovCi19ICBnc2tpdF9jaXBoZXI7Cit9OwogCi1zdGF0aWMgY29uc3QgZ3NraXRfY2lwaGVyICBjaXBoZXJ0YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBnc2tpdF9jaXBoZXIgIGNpcGhlcnRhYmxlW10gPSB7CiAgIHsgIm51bGwtbWQ1IiwgICAgICAgICAiMDEiLAogICAgICAgQ1VSTF9HU0tQUk9UT19TU0xWM19NQVNLIHwgQ1VSTF9HU0tQUk9UT19UTFNWMTBfTUFTSyB8CiAgICAgICBDVVJMX0dTS1BST1RPX1RMU1YxMV9NQVNLIHwgQ1VSTF9HU0tQUk9UT19UTFNWMTJfTUFTSyB9LApAQCAtMzA1LDcgKzMwNyw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjb25zdCBjaGFyICpjaXBoZXJsaXN0ID0gU1NMX0NPTk5fQ09ORklHKGNpcGhlcl9saXN0KTsKICAgY29uc3QgY2hhciAqY2xwOwotICBjb25zdCBnc2tpdF9jaXBoZXIgKmN0cDsKKyAgY29uc3Qgc3RydWN0IGdza2l0X2NpcGhlciAqY3RwOwogICBpbnQgaTsKICAgaW50IGw7CiAgIGJvb2wgdW5zdXBwb3J0ZWQ7CkBAIC01MTEsMTAwICs1MTMsNiBAQAogICBCQUNLRU5ELT5pb2Nwb3J0ID0gLTE7CiB9CiAKLS8qIFNTTCBvdmVyIFNTTAotICogUHJvYmxlbXM6Ci0gKiAxKSBHU0tpdCBjYW4gb25seSBwZXJmb3JtIFNTTCBvbiBhbiBBRl9JTkVUIG9yIEFGX0lORVQ2IHN0cmVhbSBzb2NrZXQuIFRvCi0gKiAgICBwaXBlIGFuIFNTTCBzdHJlYW0gaW50byBhbm90aGVyLCBpdCBpcyB0aGVyZWZvcmUgbmVlZGVkIHRvIGhhdmUgYSBwYWlyCi0gKiAgICBvZiBzdWNoIGNvbW11bmljYXRpbmcgc29ja2V0cyBhbmQgaGFuZGxlIHRoZSBwaXBlbGluaW5nIGV4cGxpY2l0bHkuCi0gKiAyKSBPUy80MDAgc29ja2V0cGFpcigpIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIGRvbWFpbiBBRl9VTklYLCB0aHVzIGNhbm5vdAotICogICAgYmUgdXNlZCB0byBwcm9kdWNlIHRoZSBwaXBlbGluZS4KLSAqIFRoZSBzb2x1dGlvbiBpcyB0byBzaW11bGF0ZSBzb2NrZXRwYWlyKCkgZm9yIEFGX0lORVQgd2l0aCBsb3ctbGV2ZWwgQVBJCi0gKiAgICBsaXN0ZW4oKSwgYmluZCgpIGFuZCBjb25uZWN0KCkuCi0gKi8KLQotc3RhdGljIGludAotaW5ldHNvY2tldHBhaXIoaW50IHN2WzJdKQotewotICBpbnQgbGZkOyAgICAgIC8qIExpc3RlbmluZyBzb2NrZXQuICovCi0gIGludCBzZmQ7ICAgICAgLyogU2VydmVyIHNvY2tldC4gKi8KLSAgaW50IGNmZDsgICAgICAvKiBDbGllbnQgc29ja2V0LiAqLwotICBpbnQgbGVuOwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjE7Ci0gIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyMjsKLQotICAvKiBDcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBvbiBhIGxvY2FsIGR5bmFtaWMgcG9ydC4gKi8KLSAgbGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgaWYobGZkIDwgMCkKLSAgICByZXR1cm4gLTE7Ci0gIG1lbXNldCgoY2hhciAqKSAmYWRkcjEsIDAsIHNpemVvZihhZGRyMSkpOwotICBhZGRyMS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgYWRkcjEuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKLSAgYWRkcjEuc2luX3BvcnQgPSAwOwotICBpZihiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjEsIHNpemVvZihhZGRyMSkpIHx8Ci0gICAgIGxpc3RlbihsZmQsIDIpIDwgMCkgewotICAgIGNsb3NlKGxmZCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogR2V0IHRoZSBhbGxvY2F0ZWQgcG9ydC4gKi8KLSAgbGVuID0gc2l6ZW9mKGFkZHIxKTsKLSAgaWYoZ2V0c29ja25hbWUobGZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyMSwgJmxlbikgPCAwKSB7Ci0gICAgY2xvc2UobGZkKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBDcmVhdGUgdGhlIGNsaWVudCBzb2NrZXQuICovCi0gIGNmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Ci0gIGlmKGNmZCA8IDApIHsKLSAgICBjbG9zZShsZmQpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIFJlcXVlc3QgdW5ibG9ja2luZyBjb25uZWN0aW9uIHRvIHRoZSBsaXN0ZW5pbmcgc29ja2V0LiAqLwotICBjdXJseF9ub25ibG9jayhjZmQsIFRSVUUpOwotICBpZihjb25uZWN0KGNmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjEsIHNpemVvZihhZGRyMSkpIDwgMCAmJgotICAgICBlcnJubyAhPSBFSU5QUk9HUkVTUykgewotICAgIGNsb3NlKGxmZCk7Ci0gICAgY2xvc2UoY2ZkKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBHZXQgdGhlIGNsaWVudCBkeW5hbWljIHBvcnQgZm9yIGludHJ1c2lvbiBjaGVjayBiZWxvdy4gKi8KLSAgbGVuID0gc2l6ZW9mKGFkZHIyKTsKLSAgaWYoZ2V0c29ja25hbWUoY2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyMiwgJmxlbikgPCAwKSB7Ci0gICAgY2xvc2UobGZkKTsKLSAgICBjbG9zZShjZmQpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIEFjY2VwdCB0aGUgaW5jb21pbmcgY29ubmVjdGlvbiBhbmQgZ2V0IHRoZSBzZXJ2ZXIgc29ja2V0LiAqLwotICBjdXJseF9ub25ibG9jayhsZmQsIFRSVUUpOwotICBmb3IoOzspIHsKLSAgICBsZW4gPSBzaXplb2YoYWRkcjEpOwotICAgIHNmZCA9IGFjY2VwdChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIxLCAmbGVuKTsKLSAgICBpZihzZmQgPCAwKSB7Ci0gICAgICBjbG9zZShsZmQpOwotICAgICAgY2xvc2UoY2ZkKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiBDaGVjayBmb3IgcG9zc2libGUgaW50cnVzaW9uIGZyb20gYW4gZXh0ZXJuYWwgcHJvY2Vzcy4gKi8KLSAgICBpZihhZGRyMS5zaW5fYWRkci5zX2FkZHIgPT0gYWRkcjIuc2luX2FkZHIuc19hZGRyICYmCi0gICAgICAgYWRkcjEuc2luX3BvcnQgPT0gYWRkcjIuc2luX3BvcnQpCi0gICAgICBicmVhazsKLQotICAgIC8qIEludHJ1c2lvbjogcmVqZWN0IGluY29taW5nIGNvbm5lY3Rpb24uICovCi0gICAgY2xvc2Uoc2ZkKTsKLSAgfQotCi0gIC8qIERvbmUsIHJldHVybiBzb2NrZXRzIGFuZCBzdWNjZWVkLiAqLwotICBjbG9zZShsZmQpOwotICBjdXJseF9ub25ibG9jayhjZmQsIEZBTFNFKTsKLSAgc3ZbMF0gPSBjZmQ7Ci0gIHN2WzFdID0gc2ZkOwotICByZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBwaXBlX3NzbG92ZXJzc2woc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbnMpCiB7CkBAIC02MTYsNyArNTI0LDYgQEAKICAgaW50IG07CiAgIGludCBpOwogICBpbnQgcmV0ID0gMDsKLSAgc3RydWN0IHRpbWV2YWwgdHYgPSB7MCwgMH07CiAgIGNoYXIgYnVmW0NVUkxfTUFYX1dSSVRFX1NJWkVdOwogCiAgIGlmKCFjb25uc3NsLT51c2UgfHwgIWNvbm5wcm94eXNzbC0+dXNlKQpAQCAtNjM2LDcgKzU0Myw3IEBACiAgICAgaWYobiA8IGNvbm4tPnNvY2tbc29ja2luZGV4XSkKICAgICAgIG4gPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIH0KLSAgaSA9IHNlbGVjdChuICsgMSwgJmZkc19yZWFkLCAmZmRzX3dyaXRlLCBOVUxMLCAmdHYpOworICBpID0gQ3VybF9zZWxlY3QobiArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgTlVMTCwgMCk7CiAgIGlmKGkgPCAwKQogICAgIHJldHVybiAtMTsgIC8qIFNlbGVjdCBlcnJvci4gKi8KIApAQCAtODU1LDcgKzc2Miw3IEBACiAKICAgLyogRXN0YWJsaXNoIGEgcGlwZWxpbmluZyBzb2NrZXQgcGFpciBmb3IgU1NMIG92ZXIgU1NMLiAqLwogICBpZihjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XS51c2UpIHsKLSAgICBpZihpbmV0c29ja2V0cGFpcihzb2NrcGFpcikpCisgICAgaWYoQ3VybF9zb2NrZXRwYWlyKDAsIDAsIDAsIHNvY2twYWlyKSkKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICBCQUNLRU5ELT5sb2NhbGZkID0gc29ja3BhaXJbMF07CiAgICAgQkFDS0VORC0+cmVtb3RlZmQgPSBzb2NrcGFpclsxXTsKQEAgLTkxMiw3ICs4MTksNyBAQAogICBpZighcmVzdWx0KSB7CiAgICAgLyogQ29tcHV0ZSB0aGUgaGFuZHNoYWtlIHRpbWVvdXQuIFNpbmNlIEdTS2l0IGdyYW51bGFyaXR5IGlzIDEgc2Vjb25kLAogICAgICAgIHdlIHJvdW5kIHVwIHRoZSByZXF1aXJlZCB2YWx1ZS4gKi8KLSAgICBsb25nIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworICAgIHRpbWVkaWZmX3QgdGltZW91dCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CiAgICAgaWYodGltZW91dCA8IDApCiAgICAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CiAgICAgZWxzZQpAQCAtMTAyNSw3ICs5MzIsNyBAQAogICAvKiBQb2xsIG9yIHdhaXQgZm9yIGVuZCBvZiBTU0wgYXN5bmNocm9ub3VzIGhhbmRzaGFrZS4gKi8KIAogICBmb3IoOzspIHsKLSAgICBsb25nIHRpbWVvdXRfbXMgPSBub25ibG9ja2luZz8gMDogQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMgPSBub25ibG9ja2luZz8gMDogQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKICAgICBpZih0aW1lb3V0X21zIDwgMCkKICAgICAgIHRpbWVvdXRfbXMgPSAwOwogICAgIHN0bXYudHZfc2VjID0gdGltZW91dF9tcyAvIDEwMDA7CkBAIC0xMTU3LDcgKzEwNjQsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGxvbmcgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAogICAqZG9uZSA9IGNvbm5zc2wtPnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5oCmluZGV4IDQ2NmVlNGQuLmIwNmI1ZTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3NraXQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3Rscy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9ndGxzLmMKaW5kZXggODY5M2NkYy4uOWI0YzM2NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9ndGxzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9ndGxzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDM2ICs3MiwxMSBAQAogI2VuZGlmCiBzdGF0aWMgYm9vbCBndGxzX2luaXRlZCA9IEZBTFNFOwogCi0jaWYgZGVmaW5lZChHTlVUTFNfVkVSU0lPTl9OVU1CRVIpCi0jICBpZiAoR05VVExTX1ZFUlNJT05fTlVNQkVSID49IDB4MDIwYzAwKQotIyAgICB1bmRlZiBnbnV0bHNfdHJhbnNwb3J0X3NldF9sb3dhdAotIyAgICBkZWZpbmUgZ251dGxzX3RyYW5zcG9ydF9zZXRfbG93YXQoQSxCKSBDdXJsX25vcF9zdG10Ci0jICAgIGRlZmluZSBVU0VfR05VVExTX1BSSU9SSVRZX1NFVF9ESVJFQ1QgMQotIyAgZW5kaWYKLSMgIGlmIChHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMjBjMDMpCi0jICAgIGRlZmluZSBHTlVUTFNfTUFQU19XSU5TT0NLX0VSUk9SUyAxCi0jICBlbmRpZgotCi0jICBpZiBIQVZFX0dOVVRMU19BTFBOX1NFVF9QUk9UT0NPTFMKLSMgICAgZGVmaW5lIEhBU19BTFBOCi0jICBlbmRpZgotCi0jICBpZiBIQVZFX0dOVVRMU19PQ1NQX1JFUV9JTklUCi0jICAgIGRlZmluZSBIQVNfT0NTUAotIyAgZW5kaWYKLQotIyAgaWYgKEdOVVRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAzMDMwNikKLSMgICAgZGVmaW5lIEhBU19DQVBBVEgKLSMgIGVuZGlmCisjaWYgIWRlZmluZWQoR05VVExTX1ZFUlNJT05fTlVNQkVSKSB8fCAoR05VVExTX1ZFUlNJT05fTlVNQkVSIDwgMHgwMzAxMGEpCisjZXJyb3IgInRvbyBvbGQgR251VExTIHZlcnNpb24iCiAjZW5kaWYKIAotI2lmIChHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMzA2MDMpCi0jZGVmaW5lIEhBU19UTFMxMwotI2VuZGlmCi0KLSNpZmRlZiBIQVNfT0NTUAogIyBpbmNsdWRlIDxnbnV0bHMvb2NzcC5oPgotI2VuZGlmCiAKIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKICAgZ251dGxzX3Nlc3Npb25fdCBzZXNzaW9uOwpAQCAtMTExLDU4ICs4NiwxMCBAQAogI2VuZGlmCiB9OwogCi0jZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAotCi0vKgotICogQ3VzdG9tIHB1c2ggYW5kIHB1bGwgY2FsbGJhY2sgZnVuY3Rpb25zIHVzZWQgYnkgR05VIFRMUyB0byByZWFkIGFuZCB3cml0ZQotICogdG8gdGhlIHNvY2tldC4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgc2ltcGxlIHdyYXBwZXJzIHRvIHNlbmQoKSBhbmQgcmVjdigpCi0gKiAoYWx0aG91Z2ggaGVyZSB1c2luZyB0aGUgc3JlYWQvc3dyaXRlIG1hY3JvcyBhcyBkZWZpbmVkIGJ5Ci0gKiBjdXJsX3NldHVwX29uY2UuaCkuCi0gKiBXZSB1c2UgY3VzdG9tIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiB0aGUgR05VIFRMUyBkZWZhdWx0cyBiZWNhdXNlIGl0IGFsbG93cwotICogdXMgdG8gZ2V0IHNwZWNpZmljIGFib3V0IHRoZSBmb3VydGggImZsYWdzIiBhcmd1bWVudCwgYW5kIHRvIHVzZSBhcmJpdHJhcnkKLSAqIHByaXZhdGUgZGF0YSB3aXRoIGdudXRsc190cmFuc3BvcnRfc2V0X3B0ciBpZiB3ZSB3aXNoLgotICoKLSAqIFdoZW4gdGhlc2UgY3VzdG9tIHB1c2ggYW5kIHB1bGwgY2FsbGJhY2tzIGZhaWwsIEdOVSBUTFMgY2hlY2tzIGl0cyBvd24KLSAqIHNlc3Npb24tc3BlY2lmaWMgZXJyb3IgdmFyaWFibGUsIGFuZCB3aGVuIG5vdCBzZXQgYWxzbyBpdHMgb3duIGdsb2JhbAotICogZXJybm8gdmFyaWFibGUsIGluIG9yZGVyIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uLiBHTlUgVExTIGRvZXMgbm90Ci0gKiByZXF1aXJlIHRoYXQgdGhlIHRyYW5zcG9ydCBpcyBhY3R1YWxseSBhIHNvY2tldC4gVGhpcyBpbXBsaWVzIHRoYXQgZm9yCi0gKiBXaW5kb3dzIGJ1aWxkcyB0aGVzZSBjYWxsYmFja3Mgc2hvdWxkIGlkZWFsbHkgc2V0IHRoZSBzZXNzaW9uLXNwZWNpZmljCi0gKiBlcnJvciB2YXJpYWJsZSB1c2luZyBmdW5jdGlvbiBnbnV0bHNfdHJhbnNwb3J0X3NldF9lcnJubyBvciBhcyBhIGxhc3QKLSAqIHJlc29ydCBnbG9iYWwgZXJybm8gdmFyaWFibGUgdXNpbmcgZ251dGxzX3RyYW5zcG9ydF9zZXRfZ2xvYmFsX2Vycm5vLAotICogd2l0aCBhIHRyYW5zcG9ydCBhZ25vc3RpYyBlcnJvciB2YWx1ZS4gVGhpcyBpbXBsaWVzIHRoYXQgc29tZSB3aW5zb2NrCi0gKiBlcnJvciB0cmFuc2xhdGlvbiBtdXN0IHRha2UgcGxhY2UgaW4gdGhlc2UgY2FsbGJhY2tzLgotICoKLSAqIFBhcmFncmFwaCBhYm92ZSBhcHBsaWVzIHRvIEdOVSBUTFMgdmVyc2lvbnMgb2xkZXIgdGhhbiAyLjEyLjMsIHNpbmNlCi0gKiB0aGlzIHZlcnNpb24gR05VIFRMUyBkb2VzIGl0cyBvd24gaW50ZXJuYWwgd2luc29jayBlcnJvciB0cmFuc2xhdGlvbgotICogdXNpbmcgc3lzdGVtX2Vycm5vKCkgZnVuY3Rpb24uCi0gKi8KLQotI2lmIGRlZmluZWQoVVNFX1dJTlNPQ0spICYmICFkZWZpbmVkKEdOVVRMU19NQVBTX1dJTlNPQ0tfRVJST1JTKQotIyAgZGVmaW5lIGd0bHNfRUlOVFIgIDQKLSMgIGRlZmluZSBndGxzX0VJTyAgICA1Ci0jICBkZWZpbmUgZ3Rsc19FQUdBSU4gMTEKLXN0YXRpYyBpbnQgZ3Rsc19tYXBwZWRfc29ja2Vycm5vKHZvaWQpCi17Ci0gIHN3aXRjaChTT0NLRVJSTk8pIHsKLSAgY2FzZSBXU0FFV09VTERCTE9DSzoKLSAgICByZXR1cm4gZ3Rsc19FQUdBSU47Ci0gIGNhc2UgV1NBRUlOVFI6Ci0gICAgcmV0dXJuIGd0bHNfRUlOVFI7Ci0gIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIGd0bHNfRUlPOwotfQotI2VuZGlmCi0KIHN0YXRpYyBzc2l6ZV90IEN1cmxfZ3Rsc19wdXNoKHZvaWQgKnMsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKICAgY3VybF9zb2NrZXRfdCBzb2NrID0gKihjdXJsX3NvY2tldF90ICopczsKICAgc3NpemVfdCByZXQgPSBzd3JpdGUoc29jaywgYnVmLCBsZW4pOwotI2lmIGRlZmluZWQoVVNFX1dJTlNPQ0spICYmICFkZWZpbmVkKEdOVVRMU19NQVBTX1dJTlNPQ0tfRVJST1JTKQotICBpZihyZXQgPCAwKQotICAgIGdudXRsc190cmFuc3BvcnRfc2V0X2dsb2JhbF9lcnJubyhndGxzX21hcHBlZF9zb2NrZXJybm8oKSk7Ci0jZW5kaWYKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTcwLDEwICs5Nyw2IEBACiB7CiAgIGN1cmxfc29ja2V0X3Qgc29jayA9ICooY3VybF9zb2NrZXRfdCAqKXM7CiAgIHNzaXplX3QgcmV0ID0gc3JlYWQoc29jaywgYnVmLCBsZW4pOwotI2lmIGRlZmluZWQoVVNFX1dJTlNPQ0spICYmICFkZWZpbmVkKEdOVVRMU19NQVBTX1dJTlNPQ0tfRVJST1JTKQotICBpZihyZXQgPCAwKQotICAgIGdudXRsc190cmFuc3BvcnRfc2V0X2dsb2JhbF9lcnJubyhndGxzX21hcHBlZF9zb2NrZXJybm8oKSk7Ci0jZW5kaWYKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMjg0LDExICsyMDcsMTIgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBnbnV0bHNfc2Vzc2lvbl90IHNlc3Npb24gPSBCQUNLRU5ELT5zZXNzaW9uOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiA9IGJhY2tlbmQtPnNlc3Npb247CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogCiAgIGZvcig7OykgewotICAgIHRpbWVfdCB0aW1lb3V0X21zOworICAgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgICBpbnQgcmM7CiAKICAgICAvKiBjaGVjayBhbGxvd2VkIHRpbWUgbGVmdCAqLwpAQCAtMzgzLDUxICszMDcsNiBAQAogICByZXR1cm4gLTE7CiB9CiAKLSNpZm5kZWYgVVNFX0dOVVRMU19QUklPUklUWV9TRVRfRElSRUNUCi1zdGF0aWMgQ1VSTGNvZGUKLXNldF9zc2xfdmVyc2lvbl9taW5fbWF4KGludCAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQotewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgbG9uZyBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKLSAgbG9uZyBzc2xfdmVyc2lvbl9tYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOwotICBsb25nIGkgPSBzc2xfdmVyc2lvbjsKLSAgbG9uZyBwcm90b2NvbF9wcmlvcml0eV9pZHggPSAwOwotCi0gIHN3aXRjaChzc2xfdmVyc2lvbl9tYXgpIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORToKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDoKLSNpZmRlZiBIQVNfVExTMTMKLSAgICAgIHNzbF92ZXJzaW9uX21heCA9IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMzsKLSNlbmRpZgotICAgICAgc3NsX3ZlcnNpb25fbWF4ID0gQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8yOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBmb3IoOyBpIDw9IChzc2xfdmVyc2lvbl9tYXggPj4gMTYpICYmCi0gICAgICAgIHByb3RvY29sX3ByaW9yaXR5X2lkeCA8IGxpc3Rfc2l6ZTsgKytpKSB7Ci0gICAgc3dpdGNoKGkpIHsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gICAgICAgIHByb3RvY29sX3ByaW9yaXR5W3Byb3RvY29sX3ByaW9yaXR5X2lkeCsrXSA9IEdOVVRMU19UTFMxXzA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbcHJvdG9jb2xfcHJpb3JpdHlfaWR4KytdID0gR05VVExTX1RMUzFfMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgotICAgICAgICBwcm90b2NvbF9wcmlvcml0eVtwcm90b2NvbF9wcmlvcml0eV9pZHgrK10gPSBHTlVUTFNfVExTMV8yOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0jaWZkZWYgSEFTX1RMUzEzCi0gICAgICAgIHByb3RvY29sX3ByaW9yaXR5W3Byb3RvY29sX3ByaW9yaXR5X2lkeCsrXSA9IEdOVVRMU19UTFMxXzM7Ci0gICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgZmFpbGYoZGF0YSwgIkdudVRMUzogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0jZW5kaWYKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotI2Vsc2UKICNkZWZpbmUgR05VVExTX0NJUEhFUlMgIk5PUk1BTDotQVJDRk9VUi0xMjg6LUNUWVBFLUFMTDorQ1RZUEUtWDUwOSIKIC8qIElmIEdudVRMUyB3YXMgY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciBTUlAgaXQgd2lsbCBlcnJvciBvdXQgaWYgU1JQIGlzCiAgICByZXF1ZXN0ZWQgaW4gdGhlIHByaW9yaXR5IHN0cmluZywgc28gdHJlYXQgaXQgc3BlY2lhbGx5CkBAIC00NDUsNzcgKzMyNCw1OSBAQAogICAgIHNzbF92ZXJzaW9uX21heCA9IENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDsKICAgfQogICBzd2l0Y2goc3NsX3ZlcnNpb24gfCBzc2xfdmVyc2lvbl9tYXgpIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8wOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjA6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzE6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMDorVkVSUy1UTFMxLjE6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMDorVkVSUy1UTFMxLjE6K1ZFUlMtVExTMS4yOiIgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjE6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjI6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMjoiIEdOVVRMU19TUlA7Ci0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMyB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMzoKLSNpZmRlZiBIQVNfVExTMTMKLSAgICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotI2Vsc2UKLSAgICAgICBmYWlsZihkYXRhLCAiR251VExTOiBUTFMgMS4zIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0jZW5kaWYKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjA6K1ZFUlMtVExTMS4xOitWRVJTLVRMUzEuMjoiCi0jaWZkZWYgSEFTX1RMUzEzCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMzoiCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQ6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjI6IgotI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjI6IgotI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjI6IgotI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMCB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMDoKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4wIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzE6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMDorVkVSUy1UTFMxLjEiOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMCB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMjoKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4wOitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjIiOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMToKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4xIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjIiOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMiB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMjoKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4yIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzMgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzM6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgorICAgICpwcmlvcml0eWxpc3QgPSBHTlVUTFNfQ0lQSEVSUyAiOi1WRVJTLVNTTDMuMDotVkVSUy1UTFMtQUxMOiIKKyAgICAgICIrVkVSUy1UTFMxLjA6K1ZFUlMtVExTMS4xOitWRVJTLVRMUzEuMiIKKyAgICAgICI6K1ZFUlMtVExTMS4zIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQ6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjIiCisgICAgICAiOitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgorICAgICpwcmlvcml0eWxpc3QgPSBHTlVUTFNfQ0lQSEVSUyAiOi1WRVJTLVNTTDMuMDotVkVSUy1UTFMtQUxMOiIKKyAgICAgICIrVkVSUy1UTFMxLjIiCisgICAgICAiOitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgorICAgICpwcmlvcml0eWxpc3QgPSBHTlVUTFNfQ0lQSEVSUyAiOi1WRVJTLVNTTDMuMDotVkVSUy1UTFMtQUxMOiIKKyAgICAgICIrVkVSUy1UTFMxLjIiCisgICAgICAiOitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOwogICB9CiAKICAgZmFpbGYoZGF0YSwgIkdudVRMUzogY2Fubm90IHNldCBzc2wgcHJvdG9jb2wiKTsKICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogfQotI2VuZGlmCiAKIHN0YXRpYyBDVVJMY29kZQogZ3Rsc19jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKQEAgLTUyMyw2ICszODQsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgdW5zaWduZWQgaW50IGluaXRfZmxhZ3M7CiAgIGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbjsKICAgaW50IHJjOwpAQCAtNTM1LDI4ICszOTcsMTIgQEAKICNlbHNlCiAgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CiAjZW5kaWYKLSNpZm5kZWYgVVNFX0dOVVRMU19QUklPUklUWV9TRVRfRElSRUNUCi0gIHN0YXRpYyBjb25zdCBpbnQgY2lwaGVyX3ByaW9yaXR5W10gPSB7Ci0gIC8qIFRoZXNlIHR3byBjaXBoZXJzIHdlcmUgYWRkZWQgdG8gR251VExTIGFzIGxhdGUgYXMgdmVyLiAzLjAuMSwKLSAgICAgYnV0IHRoaXMgY29kZSBwYXRoIGlzIG9ubHkgZXZlciB1c2VkIGZvciB2ZXIuIDwgMi4xMi4wLgotICAgICBHTlVUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLAotICAgICBHTlVUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLAotICAqLwotICAgIEdOVVRMU19DSVBIRVJfQUVTXzEyOF9DQkMsCi0gICAgR05VVExTX0NJUEhFUl9BRVNfMjU2X0NCQywKLSAgICBHTlVUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsCi0gICAgR05VVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLAotICAgIEdOVVRMU19DSVBIRVJfM0RFU19DQkMsCi0gIH07Ci0gIHN0YXRpYyBjb25zdCBpbnQgY2VydF90eXBlX3ByaW9yaXR5W10gPSB7IEdOVVRMU19DUlRfWDUwOSwgMCB9OwotICBpbnQgcHJvdG9jb2xfcHJpb3JpdHlbXSA9IHsgMCwgMCwgMCwgMCB9OwotI2Vsc2UKICAgY29uc3QgY2hhciAqcHJpb3JpdHlsaXN0OwogICBjb25zdCBjaGFyICplcnIgPSBOVUxMOwotI2VuZGlmCi0KICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CiAgICAgY29ubi0+aG9zdC5uYW1lOworICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KKyAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKIAogICBpZihjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKICAgICAvKiB0byBtYWtlIHVzIHRvbGVyYW50IGFnYWluc3QgYmVpbmcgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGZvciB0aGUKQEAgLTU2Niw2ICs0MTIsOSBAQAogICBpZighZ3Rsc19pbml0ZWQpCiAgICAgQ3VybF9ndGxzX2luaXQoKTsKIAorICAvKiBJbml0aWFsaXplIGNlcnR2ZXJpZnlyZXN1bHQgdG8gT0sgKi8KKyAgKmNlcnR2ZXJpZnlyZXN1bHQgPSAwOworCiAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjIpIHsKICAgICBmYWlsZihkYXRhLCAiR251VExTIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC01NzQsNyArNDIzLDcgQEAKICAgICBzbmkgPSBGQUxTRTsgLyogU1NMdjMgaGFzIG5vIFNOSSAqLwogCiAgIC8qIGFsbG9jYXRlIGEgY3JlZCBzdHJ1Y3QgKi8KLSAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfYWxsb2NhdGVfY3JlZGVudGlhbHMoJkJBQ0tFTkQtPmNyZWQpOworICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscygmYmFja2VuZC0+Y3JlZCk7CiAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICBmYWlsZihkYXRhLCAiZ251dGxzX2NlcnRfYWxsX2NyZWQoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtNTg1LDE0ICs0MzQsMTQgQEAKICAgICBpbmZvZihkYXRhLCAiVXNpbmcgVExTLVNSUCB1c2VybmFtZTogJXNcbiIsIFNTTF9TRVRfT1BUSU9OKHVzZXJuYW1lKSk7CiAKICAgICByYyA9IGdudXRsc19zcnBfYWxsb2NhdGVfY2xpZW50X2NyZWRlbnRpYWxzKAotICAgICAgICAgICAmQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkKTsKKyAgICAgICAgICAgJmJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19zcnBfYWxsb2NhdGVfY2xpZW50X2NyZWQoKSBmYWlsZWQ6ICVzIiwKICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpOwogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgfQogCi0gICAgcmMgPSBnbnV0bHNfc3JwX3NldF9jbGllbnRfY3JlZGVudGlhbHMoQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkLAorICAgIHJjID0gZ251dGxzX3NycF9zZXRfY2xpZW50X2NyZWRlbnRpYWxzKGJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTih1c2VybmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04ocGFzc3dvcmQpKTsKICAgICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKSB7CkBAIC02MDUsNTIgKzQ1NCw1NCBAQAogCiAgIGlmKFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpKSB7CiAgICAgLyogc2V0IHRoZSB0cnVzdGVkIENBIGNlcnQgYnVuZGxlIGZpbGUgKi8KLSAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3ZlcmlmeV9mbGFncyhCQUNLRU5ELT5jcmVkLAorICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfdmVyaWZ5X2ZsYWdzKGJhY2tlbmQtPmNyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX1ZFUklGWV9BTExPV19YNTA5X1YxX0NBX0NSVCk7CiAKLSAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV90cnVzdF9maWxlKEJBQ0tFTkQtPmNyZWQsCisgICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZmlsZShiYWNrZW5kLT5jcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfWDUwOV9GTVRfUEVNKTsKICAgICBpZihyYyA8IDApIHsKICAgICAgIGluZm9mKGRhdGEsICJlcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAoJXMpXG4iLAogICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGdudXRsc19zdHJlcnJvcihyYykpOwotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKQorICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CisgICAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gcmM7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgIGluZm9mKGRhdGEsICJmb3VuZCAlZCBjZXJ0aWZpY2F0ZXMgaW4gJXNcbiIsIHJjLAogICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpOwogICB9CiAKLSNpZmRlZiBIQVNfQ0FQQVRICiAgIGlmKFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpKSB7CiAgICAgLyogc2V0IHRoZSB0cnVzdGVkIENBIGNlcnQgZGlyZWN0b3J5ICovCi0gICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZGlyKEJBQ0tFTkQtPmNyZWQsCisgICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZGlyKGJhY2tlbmQtPmNyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfWDUwOV9GTVRfUEVNKTsKICAgICBpZihyYyA8IDApIHsKICAgICAgIGluZm9mKGRhdGEsICJlcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAoJXMpXG4iLAogICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCksIGdudXRsc19zdHJlcnJvcihyYykpOwotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKQorICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CisgICAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gcmM7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgIGluZm9mKGRhdGEsICJmb3VuZCAlZCBjZXJ0aWZpY2F0ZXMgaW4gJXNcbiIsCiAgICAgICAgICAgICByYywgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkpOwogICB9Ci0jZW5kaWYKIAogI2lmZGVmIENVUkxfQ0FfRkFMTEJBQ0sKICAgLyogdXNlIHN5c3RlbSBjYSBjZXJ0aWZpY2F0ZSBzdG9yZSBhcyBmYWxsYmFjayAqLwogICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikgJiYKICAgICAgIShTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSB8fCBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKLSAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfc3lzdGVtX3RydXN0KEJBQ0tFTkQtPmNyZWQpOworICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9zeXN0ZW1fdHJ1c3QoYmFja2VuZC0+Y3JlZCk7CiAgIH0KICNlbmRpZgogCiAgIGlmKFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpKSB7CiAgICAgLyogc2V0IHRoZSBDUkwgbGlzdCBmaWxlICovCi0gICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfY3JsX2ZpbGUoQkFDS0VORC0+Y3JlZCwKKyAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9jcmxfZmlsZShiYWNrZW5kLT5jcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19YNTA5X0ZNVF9QRU0pOwogICAgIGlmKHJjIDwgMCkgewpAQCAtNjY2LDE5ICs1MTcsMjMgQEAKICAgLyogSW5pdGlhbGl6ZSBUTFMgc2Vzc2lvbiBhcyBhIGNsaWVudCAqLwogICBpbml0X2ZsYWdzID0gR05VVExTX0NMSUVOVDsKIAorI2lmIGRlZmluZWQoR05VVExTX0ZPUkNFX0NMSUVOVF9DRVJUKQorICBpbml0X2ZsYWdzIHw9IEdOVVRMU19GT1JDRV9DTElFTlRfQ0VSVDsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChHTlVUTFNfTk9fVElDS0VUUykKICAgLyogRGlzYWJsZSBUTFMgc2Vzc2lvbiB0aWNrZXRzICovCiAgIGluaXRfZmxhZ3MgfD0gR05VVExTX05PX1RJQ0tFVFM7CiAjZW5kaWYKIAotICByYyA9IGdudXRsc19pbml0KCZCQUNLRU5ELT5zZXNzaW9uLCBpbml0X2ZsYWdzKTsKKyAgcmMgPSBnbnV0bHNfaW5pdCgmYmFja2VuZC0+c2Vzc2lvbiwgaW5pdF9mbGFncyk7CiAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICBmYWlsZihkYXRhLCAiZ251dGxzX2luaXQoKSBmYWlsZWQ6ICVkIiwgcmMpOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQogCiAgIC8qIGNvbnZlbmllbnQgYXNzaWduICovCi0gIHNlc3Npb24gPSBCQUNLRU5ELT5zZXNzaW9uOworICBzZXNzaW9uID0gYmFja2VuZC0+c2Vzc2lvbjsKIAogICBpZigoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHIpKSAmJgogI2lmZGVmIEVOQUJMRV9JUFY2CkBAIC02OTUsNjIgKzU1MCw2IEBACiAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpCiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogCi0jaWZuZGVmIFVTRV9HTlVUTFNfUFJJT1JJVFlfU0VUX0RJUkVDVAotICByYyA9IGdudXRsc19jaXBoZXJfc2V0X3ByaW9yaXR5KHNlc3Npb24sIGNpcGhlcl9wcmlvcml0eSk7Ci0gIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpCi0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotCi0gIC8qIFNldHMgdGhlIHByaW9yaXR5IG9uIHRoZSBjZXJ0aWZpY2F0ZSB0eXBlcyBzdXBwb3J0ZWQgYnkgZ251dGxzLiBQcmlvcml0eQotICAgaXMgaGlnaGVyIGZvciB0eXBlcyBzcGVjaWZpZWQgYmVmb3JlIG90aGVycy4gQWZ0ZXIgc3BlY2lmeWluZyB0aGUgdHlwZXMKLSAgIHlvdSB3YW50LCB5b3UgbXVzdCBhcHBlbmQgYSAwLiAqLwotICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV90eXBlX3NldF9wcmlvcml0eShzZXNzaW9uLCBjZXJ0X3R5cGVfcHJpb3JpdHkpOwotICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKQotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLQotICBpZihTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpICE9IE5VTEwpIHsKLSAgICBmYWlsZihkYXRhLCAiY2FuJ3QgcGFzcyBhIGN1c3RvbSBjaXBoZXIgbGlzdCB0byBvbGRlciBHbnVUTFMiCi0gICAgICAgICAgIiB2ZXJzaW9ucyIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0gIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKLSAgICAgIHByb3RvY29sX3ByaW9yaXR5WzBdID0gR05VVExTX1NTTDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbMF0gPSBHTlVUTFNfVExTMV8wOwotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbMV0gPSBHTlVUTFNfVExTMV8xOwotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbMl0gPSBHTlVUTFNfVExTMV8yOwotI2lmZGVmIEhBU19UTFMxMwotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbM10gPSBHTlVUTFNfVExTMV8zOwotI2VuZGlmCi0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgotICAgICAgewotICAgICAgICBDVVJMY29kZSByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heChwcm90b2NvbF9wcmlvcml0eSwKLSAgICAgICAgICAgICAgICBzaXplb2YocHJvdG9jb2xfcHJpb3JpdHkpL3NpemVvZihwcm90b2NvbF9wcmlvcml0eVswXSksIGNvbm4pOwotICAgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6Ci0gICAgICBmYWlsZihkYXRhLCAiR251VExTIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotICByYyA9IGdudXRsc19wcm90b2NvbF9zZXRfcHJpb3JpdHkoc2Vzc2lvbiwgcHJvdG9jb2xfcHJpb3JpdHkpOwotICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKSB7Ci0gICAgZmFpbGYoZGF0YSwgIkRpZCB5b3UgcGFzcyBhIHZhbGlkIEdudVRMUyBjaXBoZXIgbGlzdD8iKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotI2Vsc2UKICAgLyogRW5zdXJlICtTUlAgY29tZXMgYXQgdGhlICplbmQqIG9mIGFsbCByZWxldmFudCBzdHJpbmdzIHNvIHRoYXQgaXQgY2FuIGJlCiAgICAqIHJlbW92ZWQgaWYgYSBydW4tdGltZSBlcnJvciBpbmRpY2F0ZXMgdGhhdCBTUlAgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzCiAgICAqIEdudVRMUyB2ZXJzaW9uICovCkBAIC03NjAsMTEgKzU1OSwxMSBAQAogICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgICAgIHByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOiIKKyAgICAgIHByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wIgogI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMzoiCisgICAgICAgICAgICAgICAgICAgICAiOitWRVJTLVRMUzEuMyIKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKKyAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKQEAgLTc4MywzMiArNTgyLDM5IEBACiAgICAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9Ci0gIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3Qoc2Vzc2lvbiwgcHJpb3JpdHlsaXN0LCAmZXJyKTsKLSAgaWYoKHJjID09IEdOVVRMU19FX0lOVkFMSURfUkVRVUVTVCkgJiYgZXJyKSB7Ci0gICAgaWYoIXN0cmNtcChlcnIsIEdOVVRMU19TUlApKSB7Ci0gICAgICAvKiBUaGlzIEdudVRMUyB3YXMgcHJvYmFibHkgY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciBTUlAuCi0gICAgICAgKiBOb3RlIHRoYXQgZmFjdCBhbmQgdHJ5IGFnYWluIHdpdGhvdXQgaXQuICovCi0gICAgICBpbnQgdmFsaWRwcmlvcml0eWxlbiA9IGN1cmx4X3V6dG9zaShlcnIgLSBwcmlvcml0eWxpc3QpOwotICAgICAgY2hhciAqcHJpb3JpdHljb3B5ID0gc3RyZHVwKHByaW9yaXR5bGlzdCk7Ci0gICAgICBpZighcHJpb3JpdHljb3B5KQotICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAorI2lmZGVmIFVTRV9UTFNfU1JQCisgIC8qIE9ubHkgYWRkIFNSUCB0byB0aGUgY2lwaGVyIGxpc3QgaWYgU1JQIGlzIHJlcXVlc3RlZC4gT3RoZXJ3aXNlCisgICAqIEdudVRMUyB3aWxsIGRpc2FibGUgVExTIDEuMyBzdXBwb3J0LiAqLworICBpZihTU0xfU0VUX09QVElPTihhdXRodHlwZSkgPT0gQ1VSTF9UTFNBVVRIX1NSUCkgeworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocHJpb3JpdHlsaXN0KTsKKworICAgIGNoYXIgKnByaW9yaXR5c3JwID0gbWFsbG9jKGxlbiArIHNpemVvZihHTlVUTFNfU1JQKSArIDEpOworICAgIGlmKCFwcmlvcml0eXNycCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHN0cmNweShwcmlvcml0eXNycCwgcHJpb3JpdHlsaXN0KTsKKyAgICBzdHJjcHkocHJpb3JpdHlzcnAgKyBsZW4sICI6IiBHTlVUTFNfU1JQKTsKKworICAgIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3Qoc2Vzc2lvbiwgcHJpb3JpdHlzcnAsICZlcnIpOworICAgIGZyZWUocHJpb3JpdHlzcnApOworCisgICAgaWYoKHJjID09IEdOVVRMU19FX0lOVkFMSURfUkVRVUVTVCkgJiYgZXJyKSB7CiAgICAgICBpbmZvZihkYXRhLCAiVGhpcyBHbnVUTFMgZG9lcyBub3Qgc3VwcG9ydCBTUlBcbiIpOwotICAgICAgaWYodmFsaWRwcmlvcml0eWxlbikKLSAgICAgICAgLyogUmVtb3ZlIHRoZSA6K1NSUCAqLwotICAgICAgICBwcmlvcml0eWNvcHlbdmFsaWRwcmlvcml0eWxlbiAtIDFdID0gMDsKLSAgICAgIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3Qoc2Vzc2lvbiwgcHJpb3JpdHljb3B5LCAmZXJyKTsKLSAgICAgIGZyZWUocHJpb3JpdHljb3B5KTsKICAgICB9CiAgIH0KKyAgZWxzZSB7CisjZW5kaWYKKyAgICByYyA9IGdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0KHNlc3Npb24sIHByaW9yaXR5bGlzdCwgJmVycik7CisjaWZkZWYgVVNFX1RMU19TUlAKKyAgfQorI2VuZGlmCisKICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgIGZhaWxmKGRhdGEsICJFcnJvciAlZCBzZXR0aW5nIEdudVRMUyBjaXBoZXIgbGlzdCBzdGFydGluZyB3aXRoICVzIiwKICAgICAgICAgICByYywgZXJyKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KLSNlbmRpZgogCi0jaWZkZWYgSEFTX0FMUE4KICAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKICAgICBpbnQgY3VyID0gMDsKICAgICBnbnV0bHNfZGF0dW1fdCBwcm90b2NvbHNbMl07CkBAIC04MzAsMTggKzYzNiwxNiBAQAogCiAgICAgZ251dGxzX2FscG5fc2V0X3Byb3RvY29scyhzZXNzaW9uLCBwcm90b2NvbHMsIGN1ciwgMCk7CiAgIH0KLSNlbmRpZgogCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGNlcnQpKSB7CiAgICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpIHsKLSNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfWDUwOV9LRVlfRklMRTIKICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzdXBwb3J0ZWRfa2V5X2VuY3J5cHRpb25fYWxnb3JpdGhtcyA9CiAgICAgICAgIEdOVVRMU19QS0NTX1VTRV9QS0NTMTJfM0RFUyB8IEdOVVRMU19QS0NTX1VTRV9QS0NTMTJfQVJDRk9VUiB8CiAgICAgICAgIEdOVVRMU19QS0NTX1VTRV9QS0NTMTJfUkMyXzQwIHwgR05VVExTX1BLQ1NfVVNFX1BCRVMyXzNERVMgfAogICAgICAgICBHTlVUTFNfUEtDU19VU0VfUEJFUzJfQUVTXzEyOCB8IEdOVVRMU19QS0NTX1VTRV9QQkVTMl9BRVNfMTkyIHwKICAgICAgICAgR05VVExTX1BLQ1NfVVNFX1BCRVMyX0FFU18yNTY7CiAgICAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmlsZTIoCi0gICAgICAgICAgIEJBQ0tFTkQtPmNyZWQsCisgICAgICAgICAgIGJhY2tlbmQtPmNyZWQsCiAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGNlcnQpLAogICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpID8KICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5KSA6IFNTTF9TRVRfT1BUSU9OKGNlcnQpLApAQCAtODU0LDE0ICs2NTgsMTAgQEAKICAgICAgICAgICAgICAgZ251dGxzX3N0cmVycm9yKHJjKSk7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIH0KLSNlbHNlCi0gICAgICBmYWlsZihkYXRhLCAiZ251dGxzIGxhY2tzIHN1cHBvcnQgZm9yIGVuY3J5cHRlZCBrZXkgZmlsZXMiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSNlbmRpZgogICAgIH0KICAgICBlbHNlIHsKICAgICAgIGlmKGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmlsZSgKLSAgICAgICAgICAgQkFDS0VORC0+Y3JlZCwKKyAgICAgICAgICAgYmFja2VuZC0+Y3JlZCwKICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCksCiAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSkgPwogICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpIDogU1NMX1NFVF9PUFRJT04oY2VydCksCkBAIC04NzcsNyArNjc3LDcgQEAKICAgLyogcHV0IHRoZSBjcmVkZW50aWFscyB0byB0aGUgY3VycmVudCBzZXNzaW9uICovCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGF1dGh0eXBlKSA9PSBDVVJMX1RMU0FVVEhfU1JQKSB7CiAgICAgcmMgPSBnbnV0bHNfY3JlZGVudGlhbHNfc2V0KHNlc3Npb24sIEdOVVRMU19DUkRfU1JQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQUNLRU5ELT5zcnBfY2xpZW50X2NyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLT5zcnBfY2xpZW50X2NyZWQpOwogICAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICAgIGZhaWxmKGRhdGEsICJnbnV0bHNfY3JlZGVudGlhbHNfc2V0KCkgZmFpbGVkOiAlcyIsIGdudXRsc19zdHJlcnJvcihyYykpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtODg3LDcgKzY4Nyw3IEBACiAjZW5kaWYKICAgewogICAgIHJjID0gZ251dGxzX2NyZWRlbnRpYWxzX3NldChzZXNzaW9uLCBHTlVUTFNfQ1JEX0NFUlRJRklDQVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQUNLRU5ELT5jcmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC0+Y3JlZCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19jcmVkZW50aWFsc19zZXQoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC05MTMsMTAgKzcxMyw2IEBACiAgIGdudXRsc190cmFuc3BvcnRfc2V0X3B1c2hfZnVuY3Rpb24oc2Vzc2lvbiwgZ251dGxzX3RyYW5zcG9ydF9wdXNoKTsKICAgZ251dGxzX3RyYW5zcG9ydF9zZXRfcHVsbF9mdW5jdGlvbihzZXNzaW9uLCBnbnV0bHNfdHJhbnNwb3J0X3B1bGwpOwogCi0gIC8qIGxvd2F0IG11c3QgYmUgc2V0IHRvIHplcm8gd2hlbiB1c2luZyBjdXN0b20gcHVzaCBhbmQgcHVsbCBmdW5jdGlvbnMuICovCi0gIGdudXRsc190cmFuc3BvcnRfc2V0X2xvd2F0KHNlc3Npb24sIDApOwotCi0jaWZkZWYgSEFTX09DU1AKICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpIHsKICAgICByYyA9IGdudXRsc19vY3NwX3N0YXR1c19yZXF1ZXN0X2VuYWJsZV9jbGllbnQoc2Vzc2lvbiwgTlVMTCwgMCwgTlVMTCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewpAQCAtOTI0LDcgKzcyMCw2IEBACiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgfQogICB9Ci0jZW5kaWYKIAogICAvKiBUaGlzIG1pZ2h0IGJlIGEgcmVjb25uZWN0LCBzbyB3ZSBjaGVjayBmb3IgYSBzZXNzaW9uIElEIGluIHRoZSBjYWNoZQogICAgICB0byBzcGVlZCB1cCB0aGluZ3MgKi8KQEAgLTEwMTYsMTcgKzgxMSwxNyBAQAogICB1bnNpZ25lZCBpbnQgdmVyaWZ5X3N0YXR1cyA9IDA7CiAgIGdudXRsc194NTA5X2NydF90IHg1MDlfY2VydCwgeDUwOV9pc3N1ZXI7CiAgIGdudXRsc19kYXR1bV90IGlzc3VlcnA7Ci0gIGNoYXIgY2VydGJ1ZlsyNTZdID0gIiI7IC8qIGJpZyBlbm91Z2g/ICovCisgIGdudXRsc19kYXR1bV90IGNlcnRmaWVsZHM7CisgIGNoYXIgY2VydG5hbWVbNjVdID0gIiI7IC8qIGxpbWl0ZWQgdG8gNjQgY2hhcnMgYnkgQVNOLjEgKi8KICAgc2l6ZV90IHNpemU7CiAgIHRpbWVfdCBjZXJ0Y2xvY2s7CiAgIGNvbnN0IGNoYXIgKnB0cjsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBnbnV0bHNfc2Vzc2lvbl90IHNlc3Npb24gPSBCQUNLRU5ELT5zZXNzaW9uOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiA9IGJhY2tlbmQtPnNlc3Npb247CiAgIGludCByYzsKLSNpZmRlZiBIQVNfQUxQTgogICBnbnV0bHNfZGF0dW1fdCBwcm90bzsKLSNlbmRpZgogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogICB1bnNpZ25lZCBpbnQgYWxnbzsKQEAgLTEwMzUsNiArODMwLDggQEAKICNlbmRpZgogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gU1NMX0lTX1BST1hZKCkgPworICAgICZkYXRhLT5zZXQucHJveHlfc3NsLmNlcnR2ZXJpZnlyZXN1bHQgOiAmZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0OwogCiAgIC8qIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgc3VpdGUgdXNlZCwgZS5nLiBFQ0RIRV9SU0FfQUVTXzI1Nl9HQ01fU0hBMzg0LiAqLwogICBwdHIgPSBnbnV0bHNfY2lwaGVyX3N1aXRlX2dldF9uYW1lKGdudXRsc19reF9nZXQoc2Vzc2lvbiksCkBAIC0xMDY2LDYgKzg2Myw3IEBACiAgICAgICBlbHNlIHsKICNlbmRpZgogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHRvIGdldCBzZXJ2ZXIgY2VydCIpOworICAgICAgICAqY2VydHZlcmlmeXJlc3VsdCA9IEdOVVRMU19FX05PX0NFUlRJRklDQVRFX0ZPVU5EOwogICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogI2lmZGVmIFVTRV9UTFNfU1JQCiAgICAgICB9CkBAIC0xMTAyLDkgKzkwMCwxMiBAQAogICAgIHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3ZlcmlmeV9wZWVyczIoc2Vzc2lvbiwgJnZlcmlmeV9zdGF0dXMpOwogICAgIGlmKHJjIDwgMCkgewogICAgICAgZmFpbGYoZGF0YSwgInNlcnZlciBjZXJ0IHZlcmlmeSBmYWlsZWQ6ICVkIiwgcmMpOworICAgICAgKmNlcnR2ZXJpZnlyZXN1bHQgPSByYzsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CiAKKyAgICAqY2VydHZlcmlmeXJlc3VsdCA9IHZlcmlmeV9zdGF0dXM7CisKICAgICAvKiB2ZXJpZnlfc3RhdHVzIGlzIGEgYml0bWFzayBvZiBnbnV0bHNfY2VydGlmaWNhdGVfc3RhdHVzIGJpdHMgKi8KICAgICBpZih2ZXJpZnlfc3RhdHVzICYgR05VVExTX0NFUlRfSU5WQUxJRCkgewogICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CkBAIC0xMTIzLDcgKzkyNCw2IEBACiAgIGVsc2UKICAgICBpbmZvZihkYXRhLCAiXHQgc2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBTS0lQUEVEXG4iKTsKIAotI2lmZGVmIEhBU19PQ1NQCiAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlzdGF0dXMpKSB7CiAgICAgaWYoZ251dGxzX29jc3Bfc3RhdHVzX3JlcXVlc3RfaXNfY2hlY2tlZChzZXNzaW9uLCAwKSA9PSAwKSB7CiAgICAgICBnbnV0bHNfZGF0dW1fdCBzdGF0dXNfcmVxdWVzdDsKQEAgLTEyMjYsNyArMTAyNiw2IEBACiAgIH0KICAgZWxzZQogICAgIGluZm9mKGRhdGEsICJcdCBzZXJ2ZXIgY2VydGlmaWNhdGUgc3RhdHVzIHZlcmlmaWNhdGlvbiBTS0lQUEVEXG4iKTsKLSNlbmRpZgogCiAgIC8qIGluaXRpYWxpemUgYW4gWC41MDkgY2VydGlmaWNhdGUgc3RydWN0dXJlLiAqLwogICBnbnV0bHNfeDUwOV9jcnRfaW5pdCgmeDUwOV9jZXJ0KTsKQEAgLTEyNTMsMTEgKzEwNTIsMTEgQEAKICAgICAgICAgICBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KT9TU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KToibm9uZSIpOwogICB9CiAKLSAgc2l6ZSA9IHNpemVvZihjZXJ0YnVmKTsKKyAgc2l6ZSA9IHNpemVvZihjZXJ0bmFtZSk7CiAgIHJjID0gZ251dGxzX3g1MDlfY3J0X2dldF9kbl9ieV9vaWQoeDUwOV9jZXJ0LCBHTlVUTFNfT0lEX1g1MjBfQ09NTU9OX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogdGhlIGZpcnN0IGFuZCBvbmx5IG9uZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUpOwogICBpZihyYykgewogICAgIGluZm9mKGRhdGEsICJlcnJvciBmZXRjaGluZyBDTiBmcm9tIGNlcnQ6JXNcbiIsCkBAIC0xMzE4LDE2ICsxMTE3LDE2IEBACiAKICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNlcnRpZmljYXRlIHN1YmplY3QgbmFtZSAoJXMpIGRvZXMgbm90IG1hdGNoICIKLSAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBjZXJ0YnVmLCBkaXNwbmFtZSk7CisgICAgICAgICAgICAidGFyZ2V0IGhvc3QgbmFtZSAnJXMnIiwgY2VydG5hbWUsIGRpc3BuYW1lKTsKICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CiAgICAgfQogICAgIGVsc2UKICAgICAgIGluZm9mKGRhdGEsICJcdCBjb21tb24gbmFtZTogJXMgKGRvZXMgbm90IG1hdGNoICclcycpXG4iLAotICAgICAgICAgICAgY2VydGJ1ZiwgZGlzcG5hbWUpOworICAgICAgICAgICAgY2VydG5hbWUsIGRpc3BuYW1lKTsKICAgfQogICBlbHNlCi0gICAgaW5mb2YoZGF0YSwgIlx0IGNvbW1vbiBuYW1lOiAlcyAobWF0Y2hlZClcbiIsIGNlcnRidWYpOworICAgIGluZm9mKGRhdGEsICJcdCBjb21tb24gbmFtZTogJXMgKG1hdGNoZWQpXG4iLCBjZXJ0bmFtZSk7CiAKICAgLyogQ2hlY2sgZm9yIHRpbWUtYmFzZWQgdmFsaWRpdHkgKi8KICAgY2VydGNsb2NrID0gZ251dGxzX3g1MDlfY3J0X2dldF9leHBpcmF0aW9uX3RpbWUoeDUwOV9jZXJ0KTsKQEAgLTEzMzUsNiArMTEzNCw3IEBACiAgIGlmKGNlcnRjbG9jayA9PSAodGltZV90KS0xKSB7CiAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnQgZXhwaXJhdGlvbiBkYXRlIHZlcmlmeSBmYWlsZWQiKTsKKyAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gR05VVExTX0NFUlRfRVhQSVJFRDsKICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CkBAIC0xMzQ1LDYgKzExNDUsNyBAQAogICAgIGlmKGNlcnRjbG9jayA8IHRpbWUoTlVMTCkpIHsKICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnRpZmljYXRlIGV4cGlyYXRpb24gZGF0ZSBoYXMgcGFzc2VkLiIpOworICAgICAgICAqY2VydHZlcmlmeXJlc3VsdCA9IEdOVVRMU19DRVJUX0VYUElSRUQ7CiAgICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICAgIH0KQEAgLTEzNjAsNiArMTE2MSw3IEBACiAgIGlmKGNlcnRjbG9jayA9PSAodGltZV90KS0xKSB7CiAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnQgYWN0aXZhdGlvbiBkYXRlIHZlcmlmeSBmYWlsZWQiKTsKKyAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gR05VVExTX0NFUlRfTk9UX0FDVElWQVRFRDsKICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CkBAIC0xMzcwLDYgKzExNzIsNyBAQAogICAgIGlmKGNlcnRjbG9jayA+IHRpbWUoTlVMTCkpIHsKICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnRpZmljYXRlIG5vdCBhY3RpdmF0ZWQgeWV0LiIpOworICAgICAgICAqY2VydHZlcmlmeXJlc3VsdCA9IEdOVVRMU19DRVJUX05PVF9BQ1RJVkFURUQ7CiAgICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICAgIH0KQEAgLTE0MTIsOSArMTIxNSwxMCBAQAogICAgICAgICBnbnV0bHNfeDUwOV9jcnRfZ2V0X3ZlcnNpb24oeDUwOV9jZXJ0KSk7CiAKIAotICBzaXplID0gc2l6ZW9mKGNlcnRidWYpOwotICBnbnV0bHNfeDUwOV9jcnRfZ2V0X2RuKHg1MDlfY2VydCwgY2VydGJ1ZiwgJnNpemUpOwotICBpbmZvZihkYXRhLCAiXHQgc3ViamVjdDogJXNcbiIsIGNlcnRidWYpOworICByYyA9IGdudXRsc194NTA5X2NydF9nZXRfZG4yKHg1MDlfY2VydCwgJmNlcnRmaWVsZHMpOworICBpZihyYyAhPSAwKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBpbmZvZihkYXRhLCAiXHQgc3ViamVjdDogJXNcbiIsIGNlcnRmaWVsZHMuZGF0YSk7CiAKICAgY2VydGNsb2NrID0gZ251dGxzX3g1MDlfY3J0X2dldF9hY3RpdmF0aW9uX3RpbWUoeDUwOV9jZXJ0KTsKICAgc2hvd3RpbWUoZGF0YSwgInN0YXJ0IGRhdGUiLCBjZXJ0Y2xvY2spOwpAQCAtMTQyMiwxNCArMTIyNiwxNCBAQAogICBjZXJ0Y2xvY2sgPSBnbnV0bHNfeDUwOV9jcnRfZ2V0X2V4cGlyYXRpb25fdGltZSh4NTA5X2NlcnQpOwogICBzaG93dGltZShkYXRhLCAiZXhwaXJlIGRhdGUiLCBjZXJ0Y2xvY2spOwogCi0gIHNpemUgPSBzaXplb2YoY2VydGJ1Zik7Ci0gIGdudXRsc194NTA5X2NydF9nZXRfaXNzdWVyX2RuKHg1MDlfY2VydCwgY2VydGJ1ZiwgJnNpemUpOwotICBpbmZvZihkYXRhLCAiXHQgaXNzdWVyOiAlc1xuIiwgY2VydGJ1Zik7CisgIHJjID0gZ251dGxzX3g1MDlfY3J0X2dldF9pc3N1ZXJfZG4yKHg1MDlfY2VydCwgJmNlcnRmaWVsZHMpOworICBpZihyYyAhPSAwKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBpbmZvZihkYXRhLCAiXHQgaXNzdWVyOiAlc1xuIiwgY2VydGZpZWxkcy5kYXRhKTsKICNlbmRpZgogCiAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKIAotI2lmZGVmIEhBU19BTFBOCiAgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CiAgICAgcmMgPSBnbnV0bHNfYWxwbl9nZXRfc2VsZWN0ZWRfcHJvdG9jb2woc2Vzc2lvbiwgJnByb3RvKTsKICAgICBpZihyYyA9PSAwKSB7CkBAIC0xNDU1LDcgKzEyNTksNiBAQAogICAgIEN1cmxfbXVsdGl1c2Vfc3RhdGUoY29ubiwgY29ubi0+bmVnbnBuID09IENVUkxfSFRUUF9WRVJTSU9OXzIgPwogICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7CiAgIH0KLSNlbmRpZgogCiAgIGNvbm4tPnNzbFtzb2NraW5kZXhdLnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CiAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IGd0bHNfcmVjdjsKQEAgLTE1NzMsMTMgKzEzNzYsMTQgQEAKIHsKICAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW2Nvbm5pbmRleF07CiAgIGJvb2wgcmVzID0gRkFMU0U7Ci0gIGlmKEJBQ0tFTkQtPnNlc3Npb24gJiYKLSAgICAgMCAhPSBnbnV0bHNfcmVjb3JkX2NoZWNrX3BlbmRpbmcoQkFDS0VORC0+c2Vzc2lvbikpCisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgaWYoYmFja2VuZC0+c2Vzc2lvbiAmJgorICAgICAwICE9IGdudXRsc19yZWNvcmRfY2hlY2tfcGVuZGluZyhiYWNrZW5kLT5zZXNzaW9uKSkKICAgICByZXMgPSBUUlVFOwogCiAgIGNvbm5zc2wgPSAmY29ubi0+cHJveHlfc3NsW2Nvbm5pbmRleF07Ci0gIGlmKEJBQ0tFTkQtPnNlc3Npb24gJiYKLSAgICAgMCAhPSBnbnV0bHNfcmVjb3JkX2NoZWNrX3BlbmRpbmcoQkFDS0VORC0+c2Vzc2lvbikpCisgIGlmKGJhY2tlbmQtPnNlc3Npb24gJiYKKyAgICAgMCAhPSBnbnV0bHNfcmVjb3JkX2NoZWNrX3BlbmRpbmcoYmFja2VuZC0+c2Vzc2lvbikpCiAgICAgcmVzID0gVFJVRTsKIAogICByZXR1cm4gcmVzOwpAQCAtMTU5Miw3ICsxMzk2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCiB7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBzc2l6ZV90IHJjID0gZ251dGxzX3JlY29yZF9zZW5kKEJBQ0tFTkQtPnNlc3Npb24sIG1lbSwgbGVuKTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBzc2l6ZV90IHJjID0gZ251dGxzX3JlY29yZF9zZW5kKGJhY2tlbmQtPnNlc3Npb24sIG1lbSwgbGVuKTsKIAogICBpZihyYyA8IDApIHsKICAgICAqY3VybGNvZGUgPSAocmMgPT0gR05VVExTX0VfQUdBSU4pCkBAIC0xNjA3LDE5ICsxNDEyLDIwIEBACiAKIHN0YXRpYyB2b2lkIGNsb3NlX29uZShzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCkKIHsKLSAgaWYoQkFDS0VORC0+c2Vzc2lvbikgewotICAgIGdudXRsc19ieWUoQkFDS0VORC0+c2Vzc2lvbiwgR05VVExTX1NIVVRfUkRXUik7Ci0gICAgZ251dGxzX2RlaW5pdChCQUNLRU5ELT5zZXNzaW9uKTsKLSAgICBCQUNLRU5ELT5zZXNzaW9uID0gTlVMTDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBpZihiYWNrZW5kLT5zZXNzaW9uKSB7CisgICAgZ251dGxzX2J5ZShiYWNrZW5kLT5zZXNzaW9uLCBHTlVUTFNfU0hVVF9XUik7CisgICAgZ251dGxzX2RlaW5pdChiYWNrZW5kLT5zZXNzaW9uKTsKKyAgICBiYWNrZW5kLT5zZXNzaW9uID0gTlVMTDsKICAgfQotICBpZihCQUNLRU5ELT5jcmVkKSB7Ci0gICAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMoQkFDS0VORC0+Y3JlZCk7Ci0gICAgQkFDS0VORC0+Y3JlZCA9IE5VTEw7CisgIGlmKGJhY2tlbmQtPmNyZWQpIHsKKyAgICBnbnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhiYWNrZW5kLT5jcmVkKTsKKyAgICBiYWNrZW5kLT5jcmVkID0gTlVMTDsKICAgfQogI2lmZGVmIFVTRV9UTFNfU1JQCi0gIGlmKEJBQ0tFTkQtPnNycF9jbGllbnRfY3JlZCkgewotICAgIGdudXRsc19zcnBfZnJlZV9jbGllbnRfY3JlZGVudGlhbHMoQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkKTsKLSAgICBCQUNLRU5ELT5zcnBfY2xpZW50X2NyZWQgPSBOVUxMOworICBpZihiYWNrZW5kLT5zcnBfY2xpZW50X2NyZWQpIHsKKyAgICBnbnV0bHNfc3JwX2ZyZWVfY2xpZW50X2NyZWRlbnRpYWxzKGJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCk7CisgICAgYmFja2VuZC0+c3JwX2NsaWVudF9jcmVkID0gTlVMTDsKICAgfQogI2VuZGlmCiB9CkBAIC0xNjM3LDYgKzE0NDMsNyBAQAogc3RhdGljIGludCBDdXJsX2d0bHNfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBpbnQgcmV0dmFsID0gMDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKQEAgLTE2NDcsMTAgKzE0NTQsMTAgQEAKICAgICAgd2UgZG8gbm90IHNlbmQgb25lLiBMZXQncyBob3BlIG90aGVyIHNlcnZlcnMgZG8gdGhlIHNhbWUuLi4gKi8KIAogICBpZihkYXRhLT5zZXQuZnRwX2NjYyA9PSBDVVJMRlRQU1NMX0NDQ19BQ1RJVkUpCi0gICAgICBnbnV0bHNfYnllKEJBQ0tFTkQtPnNlc3Npb24sIEdOVVRMU19TSFVUX1dSKTsKKyAgICBnbnV0bHNfYnllKGJhY2tlbmQtPnNlc3Npb24sIEdOVVRMU19TSFVUX1dSKTsKICNlbmRpZgogCi0gIGlmKEJBQ0tFTkQtPnNlc3Npb24pIHsKKyAgaWYoYmFja2VuZC0+c2Vzc2lvbikgewogICAgIHNzaXplX3QgcmVzdWx0OwogICAgIGJvb2wgZG9uZSA9IEZBTFNFOwogICAgIGNoYXIgYnVmWzEyMF07CkBAIC0xNjYxLDcgKzE0NjgsNyBAQAogICAgICAgaWYod2hhdCA+IDApIHsKICAgICAgICAgLyogU29tZXRoaW5nIHRvIHJlYWQsIGxldCdzIGRvIGl0IGFuZCBob3BlIHRoYXQgaXQgaXMgdGhlIGNsb3NlCiAgICAgICAgICAgIG5vdGlmeSBhbGVydCBmcm9tIHRoZSBzZXJ2ZXIgKi8KLSAgICAgICAgcmVzdWx0ID0gZ251dGxzX3JlY29yZF9yZWN2KEJBQ0tFTkQtPnNlc3Npb24sCisgICAgICAgIHJlc3VsdCA9IGdudXRsc19yZWNvcmRfcmVjdihiYWNrZW5kLT5zZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CiAgICAgICAgIHN3aXRjaChyZXN1bHQpIHsKICAgICAgICAgY2FzZSAwOgpAQCAtMTY5MSwxOCArMTQ5OCwxOCBAQAogICAgICAgICBkb25lID0gVFJVRTsKICAgICAgIH0KICAgICB9Ci0gICAgZ251dGxzX2RlaW5pdChCQUNLRU5ELT5zZXNzaW9uKTsKKyAgICBnbnV0bHNfZGVpbml0KGJhY2tlbmQtPnNlc3Npb24pOwogICB9Ci0gIGdudXRsc19jZXJ0aWZpY2F0ZV9mcmVlX2NyZWRlbnRpYWxzKEJBQ0tFTkQtPmNyZWQpOworICBnbnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhiYWNrZW5kLT5jcmVkKTsKIAogI2lmZGVmIFVTRV9UTFNfU1JQCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGF1dGh0eXBlKSA9PSBDVVJMX1RMU0FVVEhfU1JQCiAgICAgICYmIFNTTF9TRVRfT1BUSU9OKHVzZXJuYW1lKSAhPSBOVUxMKQotICAgIGdudXRsc19zcnBfZnJlZV9jbGllbnRfY3JlZGVudGlhbHMoQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkKTsKKyAgICBnbnV0bHNfc3JwX2ZyZWVfY2xpZW50X2NyZWRlbnRpYWxzKGJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCk7CiAjZW5kaWYKIAotICBCQUNLRU5ELT5jcmVkID0gTlVMTDsKLSAgQkFDS0VORC0+c2Vzc2lvbiA9IE5VTEw7CisgIGJhY2tlbmQtPmNyZWQgPSBOVUxMOworICBiYWNrZW5kLT5zZXNzaW9uID0gTlVMTDsKIAogICByZXR1cm4gcmV0dmFsOwogfQpAQCAtMTcxNCw5ICsxNTIxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbbnVtXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzc2l6ZV90IHJldDsKIAotICByZXQgPSBnbnV0bHNfcmVjb3JkX3JlY3YoQkFDS0VORC0+c2Vzc2lvbiwgYnVmLCBidWZmZXJzaXplKTsKKyAgcmV0ID0gZ251dGxzX3JlY29yZF9yZWN2KGJhY2tlbmQtPnNlc3Npb24sIGJ1ZiwgYnVmZmVyc2l6ZSk7CiAgIGlmKChyZXQgPT0gR05VVExTX0VfQUdBSU4pIHx8IChyZXQgPT0gR05VVExTX0VfSU5URVJSVVBURUQpKSB7CiAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CiAgICAgcmV0dXJuIC0xOwpAQCAtMTgzMiwxOCArMTY0MCwxNSBAQAogCiBzdGF0aWMgYm9vbCBDdXJsX2d0bHNfY2VydF9zdGF0dXNfcmVxdWVzdCh2b2lkKQogewotI2lmZGVmIEhBU19PQ1NQCiAgIHJldHVybiBUUlVFOwotI2Vsc2UKLSAgcmV0dXJuIEZBTFNFOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkICpDdXJsX2d0bHNfZ2V0X2ludGVybmFscyhzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKIHsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICAodm9pZClpbmZvOwotICByZXR1cm4gQkFDS0VORC0+c2Vzc2lvbjsKKyAgcmV0dXJuIGJhY2tlbmQtPnNlc3Npb247CiB9CiAKIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9nbnV0bHMgPSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2tleWxvZy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9rZXlsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQyMmVjCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9rZXlsb2cuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2luY2x1ZGUgImtleWxvZy5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIEtFWUxPR19MQUJFTF9NQVhMRU4gKHNpemVvZigiQ0xJRU5UX0hBTkRTSEFLRV9UUkFGRklDX1NFQ1JFVCIpIC0gMSkKKworI2RlZmluZSBDTElFTlRfUkFORE9NX1NJWkUgIDMyCisKKy8qCisgKiBUaGUgbWFzdGVyIHNlY3JldCBpbiBUTFMgMS4yIGFuZCBiZWZvcmUgaXMgYWx3YXlzIDQ4IGJ5dGVzLiBJbiBUTFMgMS4zLCB0aGUKKyAqIHNlY3JldCBzaXplIGRlcGVuZHMgb24gdGhlIGNpcGhlciBzdWl0ZSdzIGhhc2ggZnVuY3Rpb24gd2hpY2ggaXMgMzIgYnl0ZXMKKyAqIGZvciBTSEEtMjU2IGFuZCA0OCBieXRlcyBmb3IgU0hBLTM4NC4KKyAqLworI2RlZmluZSBTRUNSRVRfTUFYTEVOICAgICAgIDQ4CisKKworLyogVGhlIGZwIGZvciB0aGUgb3BlbiBTU0xLRVlMT0dGSUxFLCBvciBOVUxMIGlmIG5vdCBvcGVuICovCitzdGF0aWMgRklMRSAqa2V5bG9nX2ZpbGVfZnA7CisKK3ZvaWQKK0N1cmxfdGxzX2tleWxvZ19vcGVuKHZvaWQpCit7CisgIGNoYXIgKmtleWxvZ19maWxlX25hbWU7CisKKyAgaWYoIWtleWxvZ19maWxlX2ZwKSB7CisgICAga2V5bG9nX2ZpbGVfbmFtZSA9IGN1cmxfZ2V0ZW52KCJTU0xLRVlMT0dGSUxFIik7CisgICAgaWYoa2V5bG9nX2ZpbGVfbmFtZSkgeworICAgICAga2V5bG9nX2ZpbGVfZnAgPSBmb3BlbihrZXlsb2dfZmlsZV9uYW1lLCBGT1BFTl9BUFBFTkRURVhUKTsKKyAgICAgIGlmKGtleWxvZ19maWxlX2ZwKSB7CisjaWZkZWYgV0lOMzIKKyAgICAgICAgaWYoc2V0dmJ1ZihrZXlsb2dfZmlsZV9mcCwgTlVMTCwgX0lPTkJGLCAwKSkKKyNlbHNlCisgICAgICAgIGlmKHNldHZidWYoa2V5bG9nX2ZpbGVfZnAsIE5VTEwsIF9JT0xCRiwgNDA5NikpCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgIGZjbG9zZShrZXlsb2dfZmlsZV9mcCk7CisgICAgICAgICAga2V5bG9nX2ZpbGVfZnAgPSBOVUxMOworICAgICAgICB9CisgICAgICB9CisgICAgICBDdXJsX3NhZmVmcmVlKGtleWxvZ19maWxlX25hbWUpOworICAgIH0KKyAgfQorfQorCit2b2lkCitDdXJsX3Rsc19rZXlsb2dfY2xvc2Uodm9pZCkKK3sKKyAgaWYoa2V5bG9nX2ZpbGVfZnApIHsKKyAgICBmY2xvc2Uoa2V5bG9nX2ZpbGVfZnApOworICAgIGtleWxvZ19maWxlX2ZwID0gTlVMTDsKKyAgfQorfQorCitib29sCitDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCh2b2lkKQoreworICByZXR1cm4ga2V5bG9nX2ZpbGVfZnAgIT0gTlVMTDsKK30KKworYm9vbAorQ3VybF90bHNfa2V5bG9nX3dyaXRlX2xpbmUoY29uc3QgY2hhciAqbGluZSkKK3sKKyAgLyogVGhlIGN1cnJlbnQgbWF4aW11bSB2YWxpZCBrZXlsb2cgbGluZSBsZW5ndGggTEYgYW5kIE5VTCBpcyAxOTUuICovCisgIHNpemVfdCBsaW5lbGVuOworICBjaGFyIGJ1ZlsyNTZdOworCisgIGlmKCFrZXlsb2dfZmlsZV9mcCB8fCAhbGluZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGxpbmVsZW4gPSBzdHJsZW4obGluZSk7CisgIGlmKGxpbmVsZW4gPT0gMCB8fCBsaW5lbGVuID4gc2l6ZW9mKGJ1ZikgLSAyKSB7CisgICAgLyogRW1wdHkgbGluZSBvciB0b28gYmlnIHRvIGZpdCBpbiBhIExGIGFuZCBOVUwuICovCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgbWVtY3B5KGJ1ZiwgbGluZSwgbGluZWxlbik7CisgIGlmKGxpbmVbbGluZWxlbiAtIDFdICE9ICdcbicpIHsKKyAgICBidWZbbGluZWxlbisrXSA9ICdcbic7CisgIH0KKyAgYnVmW2xpbmVsZW5dID0gJ1wwJzsKKworICAvKiBVc2luZyBmcHV0cyBoZXJlIGluc3RlYWQgb2YgZnByaW50ZiBzaW5jZSBsaWJjdXJsJ3MgZnByaW50ZiByZXBsYWNlbWVudAorICAgICBtYXkgbm90IGJlIHRocmVhZC1zYWZlLiAqLworICBmcHV0cyhidWYsIGtleWxvZ19maWxlX2ZwKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wKK0N1cmxfdGxzX2tleWxvZ193cml0ZShjb25zdCBjaGFyICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9yYW5kb21bQ0xJRU5UX1JBTkRPTV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCit7CisgIGNvbnN0IGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKyAgc2l6ZV90IHBvcywgaTsKKyAgY2hhciBsaW5lW0tFWUxPR19MQUJFTF9NQVhMRU4gKyAxICsgMiAqIENMSUVOVF9SQU5ET01fU0laRSArIDEgKworICAgICAgICAgICAgMiAqIFNFQ1JFVF9NQVhMRU4gKyAxICsgMV07CisKKyAgaWYoIWtleWxvZ19maWxlX2ZwKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcG9zID0gc3RybGVuKGxhYmVsKTsKKyAgaWYocG9zID4gS0VZTE9HX0xBQkVMX01BWExFTiB8fCAhc2VjcmV0bGVuIHx8IHNlY3JldGxlbiA+IFNFQ1JFVF9NQVhMRU4pIHsKKyAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuIC0gc2FuaXR5IGNoZWNrIGFueXdheS4gKi8KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBtZW1jcHkobGluZSwgbGFiZWwsIHBvcyk7CisgIGxpbmVbcG9zKytdID0gJyAnOworCisgIC8qIENsaWVudCBSYW5kb20gKi8KKyAgZm9yKGkgPSAwOyBpIDwgQ0xJRU5UX1JBTkRPTV9TSVpFOyBpKyspIHsKKyAgICBsaW5lW3BvcysrXSA9IGhleFtjbGllbnRfcmFuZG9tW2ldID4+IDRdOworICAgIGxpbmVbcG9zKytdID0gaGV4W2NsaWVudF9yYW5kb21baV0gJiAweEZdOworICB9CisgIGxpbmVbcG9zKytdID0gJyAnOworCisgIC8qIFNlY3JldCAqLworICBmb3IoaSA9IDA7IGkgPCBzZWNyZXRsZW47IGkrKykgeworICAgIGxpbmVbcG9zKytdID0gaGV4W3NlY3JldFtpXSA+PiA0XTsKKyAgICBsaW5lW3BvcysrXSA9IGhleFtzZWNyZXRbaV0gJiAweEZdOworICB9CisgIGxpbmVbcG9zKytdID0gJ1xuJzsKKyAgbGluZVtwb3NdID0gJ1wwJzsKKworICAvKiBVc2luZyBmcHV0cyBoZXJlIGluc3RlYWQgb2YgZnByaW50ZiBzaW5jZSBsaWJjdXJsJ3MgZnByaW50ZiByZXBsYWNlbWVudAorICAgICBtYXkgbm90IGJlIHRocmVhZC1zYWZlLiAqLworICBmcHV0cyhsaW5lLCBrZXlsb2dfZmlsZV9mcCk7CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9rZXlsb2cuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMva2V5bG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiOTlkYgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMva2V5bG9nLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9LRVlMT0dfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9LRVlMT0dfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworLyoKKyAqIE9wZW5zIHRoZSBUTFMga2V5IGxvZyBmaWxlIGlmIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gVGhlIFNTTEtFWUxPR0ZJTEUKKyAqIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgb3V0cHV0IGZpbGUuCisgKi8KK3ZvaWQgQ3VybF90bHNfa2V5bG9nX29wZW4odm9pZCk7CisKKy8qCisgKiBDbG9zZXMgdGhlIFRMUyBrZXkgbG9nIGZpbGUgaWYgbm90IGFscmVhZHkuCisgKi8KK3ZvaWQgQ3VybF90bHNfa2V5bG9nX2Nsb3NlKHZvaWQpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIHN1Y2Nlc3NmdWxseSBlbmFibGVkIHRoZSBUTFMga2V5IGxvZyBmaWxlLgorICovCitib29sIEN1cmxfdGxzX2tleWxvZ19lbmFibGVkKHZvaWQpOworCisvKgorICogQXBwZW5kcyBhIGtleSBsb2cgZmlsZSBlbnRyeS4KKyAqIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGtleSBsb2cgZmlsZSBpcyBvcGVuIGFuZCBhIHZhbGlkIGVudHJ5IHdhcyBwcm92aWRlZC4KKyAqLworYm9vbCBDdXJsX3Rsc19rZXlsb2dfd3JpdGUoY29uc3QgY2hhciAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9yYW5kb21bMzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKTsKKworLyoKKyAqIEFwcGVuZHMgYSBsaW5lIHRvIHRoZSBrZXkgbG9nIGZpbGUsIGVuc3VyZSBpdCBpcyB0ZXJtaW5hdGVkIGJ5IGEgTEYuCisgKiBSZXR1cm5zIHRydWUgaWZmIHRoZSBrZXkgbG9nIGZpbGUgaXMgb3BlbiBhbmQgYSB2YWxpZCBsaW5lIHdhcyBwcm92aWRlZC4KKyAqLworYm9vbCBDdXJsX3Rsc19rZXlsb2dfd3JpdGVfbGluZShjb25zdCBjaGFyICpsaW5lKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0tFWUxPR19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5jCmluZGV4IDYzZDFmNGMuLjU0NWY4MjQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMSwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwogI2luY2x1ZGUgInNlbGVjdC5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKLSNpbmNsdWRlICJwb2xhcnNzbF90aHJlYWRsb2NrLmgiCisjaW5jbHVkZSAibWJlZHRsc190aHJlYWRsb2NrLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtNzUsOCArNzUsNiBAQAogICBjb25zdCBjaGFyICpwcm90b2NvbHNbM107CiB9OwogCi0jZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAotCiAvKiBhcHBseSB0aHJlYWRpbmc/ICovCiAjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgfHwgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikKICNkZWZpbmUgVEhSRUFESU5HX1NVUFBPUlQKQEAgLTkxLDEyICs4OSwxMiBAQAogc3RhdGljIHZvaWQgZW50cm9weV9pbml0X211dGV4KG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgpCiB7CiAgIC8qIGxvY2sgMCA9IGVudHJvcHlfaW5pdF9tdXRleCgpICovCi0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMCk7CisgIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbigwKTsKICAgaWYoZW50cm9weV9pbml0X2luaXRpYWxpemVkID09IDApIHsKICAgICBtYmVkdGxzX2VudHJvcHlfaW5pdChjdHgpOwogICAgIGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCA9IDE7CiAgIH0KLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKDApOworICBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigwKTsKIH0KIC8qIGVuZCBvZiBlbnRyb3B5X2luaXRfbXV0ZXgoKSAqLwogCkBAIC0xMDUsOSArMTAzLDkgQEAKIHsKICAgaW50IHJldDsKICAgLyogbG9jayAxID0gZW50cm9weV9mdW5jX211dGV4KCkgKi8KLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbigxKTsKKyAgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKDEpOwogICByZXQgPSBtYmVkdGxzX2VudHJvcHlfZnVuYyhkYXRhLCBvdXRwdXQsIGxlbik7Ci0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigxKTsKKyAgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oMSk7CiAKICAgcmV0dXJuIHJldDsKIH0KQEAgLTE5Niw2ICsxOTQsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgaW50IG1iZWR0bHNfdmVyX21pbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKICAgaW50IG1iZWR0bHNfdmVyX21heCA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKICAgbG9uZyBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKQEAgLTIyNyw5ICsyMjYsOSBAQAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCZCQUNLRU5ELT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgbWJlZHRsc19zc2xfY29uZl9taW5fdmVyc2lvbigmYmFja2VuZC0+Y29uZmlnLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc192ZXJfbWluKTsKLSAgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbigmQkFDS0VORC0+Y29uZmlnLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCisgIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24oJmJhY2tlbmQtPmNvbmZpZywgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdmVyX21heCk7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI0MCwxNSArMjM5LDIxIEBACiAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NhZmlsZSA9IFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOwogICBjb25zdCBib29sIHZlcmlmeXBlZXIgPSBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7CiAgIGNoYXIgKiBjb25zdCBzc2xfY2VydCA9IFNTTF9TRVRfT1BUSU9OKGNlcnQpOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NybGZpbGUgPSBTU0xfU0VUX09QVElPTihDUkxmaWxlKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKICAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+cG9ydCA6IGNvbm4tPnJlbW90ZV9wb3J0OworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBsb25nIGludCBwb3J0ID0gY29ubi0+cmVtb3RlX3BvcnQ7CisjZW5kaWYKICAgaW50IHJldCA9IC0xOwogICBjaGFyIGVycm9yYnVmWzEyOF07CiAgIGVycm9yYnVmWzBdID0gMDsKQEAgLTI2MSw5ICsyNjYsOSBAQAogCiAjaWZkZWYgVEhSRUFESU5HX1NVUFBPUlQKICAgZW50cm9weV9pbml0X211dGV4KCZ0c19lbnRyb3B5KTsKLSAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCZCQUNLRU5ELT5jdHJfZHJiZyk7CisgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCgmYmFja2VuZC0+Y3RyX2RyYmcpOwogCi0gIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgmQkFDS0VORC0+Y3RyX2RyYmcsIGVudHJvcHlfZnVuY19tdXRleCwKKyAgcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCZiYWNrZW5kLT5jdHJfZHJiZywgZW50cm9weV9mdW5jX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRzX2VudHJvcHksIE5VTEwsIDApOwogICBpZihyZXQpIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTI3MywxMSArMjc4LDExIEBACiAgICAgICAgICAgLXJldCwgZXJyb3JidWYpOwogICB9CiAjZWxzZQotICBtYmVkdGxzX2VudHJvcHlfaW5pdCgmQkFDS0VORC0+ZW50cm9weSk7Ci0gIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCgmQkFDS0VORC0+Y3RyX2RyYmcpOworICBtYmVkdGxzX2VudHJvcHlfaW5pdCgmYmFja2VuZC0+ZW50cm9weSk7CisgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCgmYmFja2VuZC0+Y3RyX2RyYmcpOwogCi0gIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgmQkFDS0VORC0+Y3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmVudHJvcHksIE5VTEwsIDApOworICByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoJmJhY2tlbmQtPmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrZW5kLT5lbnRyb3B5LCBOVUxMLCAwKTsKICAgaWYocmV0KSB7CiAjaWZkZWYgTUJFRFRMU19FUlJPUl9DCiAgICAgbWJlZHRsc19zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKQEAgLTI4OCwxMCArMjkzLDEwIEBACiAjZW5kaWYgLyogVEhSRUFESU5HX1NVUFBPUlQgKi8KIAogICAvKiBMb2FkIHRoZSB0cnVzdGVkIENBICovCi0gIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCgmQkFDS0VORC0+Y2FjZXJ0KTsKKyAgbWJlZHRsc194NTA5X2NydF9pbml0KCZiYWNrZW5kLT5jYWNlcnQpOwogCiAgIGlmKHNzbF9jYWZpbGUpIHsKLSAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNhY2VydCwgc3NsX2NhZmlsZSk7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCZiYWNrZW5kLT5jYWNlcnQsIHNzbF9jYWZpbGUpOwogCiAgICAgaWYocmV0PDApIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTMwNiw3ICszMTEsNyBAQAogICB9CiAKICAgaWYoc3NsX2NhcGF0aCkgewotICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCgmQkFDS0VORC0+Y2FjZXJ0LCBzc2xfY2FwYXRoKTsKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGgoJmJhY2tlbmQtPmNhY2VydCwgc3NsX2NhcGF0aCk7CiAKICAgICBpZihyZXQ8MCkgewogI2lmZGVmIE1CRURUTFNfRVJST1JfQwpAQCAtMzIxLDEwICszMjYsMTAgQEAKICAgfQogCiAgIC8qIExvYWQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSAqLwotICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoJkJBQ0tFTkQtPmNsaWNlcnQpOworICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoJmJhY2tlbmQtPmNsaWNlcnQpOwogCiAgIGlmKHNzbF9jZXJ0KSB7Ci0gICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCZCQUNLRU5ELT5jbGljZXJ0LCBzc2xfY2VydCk7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCZiYWNrZW5kLT5jbGljZXJ0LCBzc2xfY2VydCk7CiAKICAgICBpZihyZXQpIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTMzOCwxMyArMzQzLDEzIEBACiAgIH0KIAogICAvKiBMb2FkIHRoZSBjbGllbnQgcHJpdmF0ZSBrZXkgKi8KLSAgbWJlZHRsc19wa19pbml0KCZCQUNLRU5ELT5wayk7CisgIG1iZWR0bHNfcGtfaW5pdCgmYmFja2VuZC0+cGspOwogCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGtleSkpIHsKLSAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoJkJBQ0tFTkQtPnBrLCBTU0xfU0VUX09QVElPTihrZXkpLAorICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSgmYmFja2VuZC0+cGssIFNTTF9TRVRfT1BUSU9OKGtleSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKLSAgICBpZihyZXQgPT0gMCAmJiAhKG1iZWR0bHNfcGtfY2FuX2RvKCZCQUNLRU5ELT5waywgTUJFRFRMU19QS19SU0EpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2Nhbl9kbygmQkFDS0VORC0+cGssIE1CRURUTFNfUEtfRUNLRVkpKSkKKyAgICBpZihyZXQgPT0gMCAmJiAhKG1iZWR0bHNfcGtfY2FuX2RvKCZiYWNrZW5kLT5waywgTUJFRFRMU19QS19SU0EpIHx8CisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2Nhbl9kbygmYmFja2VuZC0+cGssIE1CRURUTFNfUEtfRUNLRVkpKSkKICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0g7CiAKICAgICBpZihyZXQpIHsKQEAgLTM1OSwxMCArMzY0LDEwIEBACiAgIH0KIAogICAvKiBMb2FkIHRoZSBDUkwgKi8KLSAgbWJlZHRsc194NTA5X2NybF9pbml0KCZCQUNLRU5ELT5jcmwpOworICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoJmJhY2tlbmQtPmNybCk7CiAKICAgaWYoc3NsX2NybGZpbGUpIHsKLSAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNybCwgc3NsX2NybGZpbGUpOworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZSgmYmFja2VuZC0+Y3JsLCBzc2xfY3JsZmlsZSk7CiAKICAgICBpZihyZXQpIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTM3NywxNCArMzgyLDE0IEBACiAKICAgaW5mb2YoZGF0YSwgIm1iZWRUTFM6IENvbm5lY3RpbmcgdG8gJXM6JWxkXG4iLCBob3N0bmFtZSwgcG9ydCk7CiAKLSAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoJkJBQ0tFTkQtPmNvbmZpZyk7CisgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCZiYWNrZW5kLT5jb25maWcpOwogCi0gIG1iZWR0bHNfc3NsX2luaXQoJkJBQ0tFTkQtPnNzbCk7Ci0gIGlmKG1iZWR0bHNfc3NsX3NldHVwKCZCQUNLRU5ELT5zc2wsICZCQUNLRU5ELT5jb25maWcpKSB7CisgIG1iZWR0bHNfc3NsX2luaXQoJmJhY2tlbmQtPnNzbCk7CisgIGlmKG1iZWR0bHNfc3NsX3NldHVwKCZiYWNrZW5kLT5zc2wsICZiYWNrZW5kLT5jb25maWcpKSB7CiAgICAgZmFpbGYoZGF0YSwgIm1iZWRUTFM6IHNzbF9pbml0IGZhaWxlZCIpOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQotICByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoJkJBQ0tFTkQtPmNvbmZpZywKKyAgcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCZiYWNrZW5kLT5jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19DTElFTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQpOwpAQCAtMzk0LDIwICszOTksMjAgQEAKICAgfQogCiAgIC8qIG5ldyBwcm9maWxlIHdpdGggUlNBIG1pbiBrZXkgbGVuID0gMTAyNCAuLi4gKi8KLSAgbWJlZHRsc19zc2xfY29uZl9jZXJ0X3Byb2ZpbGUoJkJBQ0tFTkQtPmNvbmZpZywKKyAgbWJlZHRsc19zc2xfY29uZl9jZXJ0X3Byb2ZpbGUoJmJhY2tlbmQtPmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9mcik7CiAKICAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCZCQUNLRU5ELT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCZiYWNrZW5kLT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSk7CiAgICAgaW5mb2YoZGF0YSwgIm1iZWRUTFM6IFNldCBtaW4gU1NMIHZlcnNpb24gdG8gVExTIDEuMFxuIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oJkJBQ0tFTkQtPmNvbmZpZywgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAorICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oJmJhY2tlbmQtPmNvbmZpZywgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wKTsKLSAgICBtYmVkdGxzX3NzbF9jb25mX21heF92ZXJzaW9uKCZCQUNLRU5ELT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgICBtYmVkdGxzX3NzbF9jb25mX21heF92ZXJzaW9uKCZiYWNrZW5kLT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCk7CiAgICAgaW5mb2YoZGF0YSwgIm1iZWRUTFM6IFNldCBTU0wgdmVyc2lvbiB0byBTU0x2M1xuIik7CiAgICAgYnJlYWs7CkBAIC00MjYsMjUgKzQzMSwyNSBAQAogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQogCi0gIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoJkJBQ0tFTkQtPmNvbmZpZywgTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMKTsKKyAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSgmYmFja2VuZC0+Y29uZmlnLCBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUwpOwogCi0gIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCZCQUNLRU5ELT5jb25maWcsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLAotICAgICAgICAgICAgICAgICAgICAgICAmQkFDS0VORC0+Y3RyX2RyYmcpOwotICBtYmVkdGxzX3NzbF9zZXRfYmlvKCZCQUNLRU5ELT5zc2wsICZjb25uLT5zb2NrW3NvY2tpbmRleF0sCisgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCZiYWNrZW5kLT5jb25maWcsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAmYmFja2VuZC0+Y3RyX2RyYmcpOworICBtYmVkdGxzX3NzbF9zZXRfYmlvKCZiYWNrZW5kLT5zc2wsICZjb25uLT5zb2NrW3NvY2tpbmRleF0sCiAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19uZXRfc2VuZCwKICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX25ldF9yZWN2LAogICAgICAgICAgICAgICAgICAgICAgIE5VTEwgLyogIHJldl90aW1lb3V0KCkgKi8pOwogCi0gIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCZCQUNLRU5ELT5jb25maWcsCisgIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCZiYWNrZW5kLT5jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2xpc3RfY2lwaGVyc3VpdGVzKCkpOwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQotICBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb24oJkJBQ0tFTkQtPmNvbmZpZywKKyAgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uKCZiYWNrZW5kLT5jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKLSAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoJkJBQ0tFTkQtPmNvbmZpZywKKyAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoJmJhY2tlbmQtPmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0RJU0FCTEVEKTsKICNlbmRpZgogCkBAIC00NTQsNyArNDU5LDcgQEAKIAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwogICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7Ci0gICAgICByZXQgPSBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbigmQkFDS0VORC0+c3NsLCBvbGRfc2Vzc2lvbik7CisgICAgICByZXQgPSBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbigmYmFja2VuZC0+c3NsLCBvbGRfc2Vzc2lvbik7CiAgICAgICBpZihyZXQpIHsKICAgICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgICAgICAgZmFpbGYoZGF0YSwgIm1iZWR0bHNfc3NsX3NldF9zZXNzaW9uIHJldHVybmVkIC0weCV4IiwgLXJldCk7CkBAIC00NjUsMTUgKzQ3MCwxNSBAQAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CiAgIH0KIAotICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCZCQUNLRU5ELT5jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmNhY2VydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQkFDS0VORC0+Y3JsKTsKKyAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbigmYmFja2VuZC0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrZW5kLT5jYWNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJhY2tlbmQtPmNybCk7CiAKICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5KSkgewotICAgIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoJkJBQ0tFTkQtPmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCQUNLRU5ELT5jbGljZXJ0LCAmQkFDS0VORC0+cGspOworICAgIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoJmJhY2tlbmQtPmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrZW5kLT5jbGljZXJ0LCAmYmFja2VuZC0+cGspOwogICB9Ci0gIGlmKG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgmQkFDS0VORC0+c3NsLCBob3N0bmFtZSkpIHsKKyAgaWYobWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCZiYWNrZW5kLT5zc2wsIGhvc3RuYW1lKSkgewogICAgIC8qIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgpIHNldHMgdGhlIG5hbWUgdG8gdXNlIGluIENOL1NBTiBjaGVja3MgKmFuZCoKICAgICAgICB0aGUgbmFtZSB0byBzZXQgaW4gdGhlIFNOSSBleHRlbnNpb24uIFNvIGV2ZW4gaWYgY3VybCBjb25uZWN0cyB0byBhCiAgICAgICAgaG9zdCBzcGVjaWZpZWQgYXMgYW4gSVAgYWRkcmVzcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQuICovCkBAIC00ODMsNyArNDg4LDcgQEAKIAogI2lmZGVmIEhBU19BTFBOCiAgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgY29uc3QgY2hhciAqKnAgPSAmQkFDS0VORC0+cHJvdG9jb2xzWzBdOworICAgIGNvbnN0IGNoYXIgKipwID0gJmJhY2tlbmQtPnByb3RvY29sc1swXTsKICNpZmRlZiBVU0VfTkdIVFRQMgogICAgIGlmKGRhdGEtPnNldC5odHRwdmVyc2lvbiA+PSBDVVJMX0hUVFBfVkVSU0lPTl8yKQogICAgICAgKnArKyA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRDsKQEAgLTQ5MiwxOSArNDk3LDE5IEBACiAgICAgKnAgPSBOVUxMOwogICAgIC8qIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjbG9uZSB0aGUgcHJvdG9jb2xzIGFycmF5LCB3aGljaCBpcyB3aHkgd2UgbmVlZAogICAgICAgIHRvIGtlZXAgaXQgYXJvdW5kICovCi0gICAgaWYobWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scygmQkFDS0VORC0+Y29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPnByb3RvY29sc1swXSkpIHsKKyAgICBpZihtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzKCZiYWNrZW5kLT5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmFja2VuZC0+cHJvdG9jb2xzWzBdKSkgewogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZXR0aW5nIEFMUE4gcHJvdG9jb2xzIik7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgfQotICAgIGZvcihwID0gJkJBQ0tFTkQtPnByb3RvY29sc1swXTsgKnA7ICsrcCkKKyAgICBmb3IocCA9ICZiYWNrZW5kLT5wcm90b2NvbHNbMF07ICpwOyArK3ApCiAgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgb2ZmZXJpbmcgJXNcbiIsICpwKTsKICAgfQogI2VuZGlmCiAKICNpZmRlZiBNQkVEVExTX0RFQlVHCiAgIC8qIEluIG9yZGVyIHRvIG1ha2UgdGhhdCB3b3JrIGluIG1iZWR0bHMgTUJFRFRMU19ERUJVR19DIG11c3QgYmUgZGVmaW5lZC4gKi8KLSAgbWJlZHRsc19zc2xfY29uZl9kYmcoJkJBQ0tFTkQtPmNvbmZpZywgbWJlZF9kZWJ1ZywgZGF0YSk7CisgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCZiYWNrZW5kLT5jb25maWcsIG1iZWRfZGVidWcsIGRhdGEpOwogICAvKiAtIDAgTm8gZGVidWcKICAgICogLSAxIEVycm9yCiAgICAqIC0gMiBTdGF0ZSBjaGFuZ2UKQEAgLTUxNiw3ICs1MjEsNyBAQAogCiAgIC8qIGdpdmUgYXBwbGljYXRpb24gYSBjaGFuY2UgdG8gaW50ZXJmZXJlIHdpdGggbWJlZFRMUyBzZXQgdXAuICovCiAgIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eCkgewotICAgIHJldCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCAmQkFDS0VORC0+Y29uZmlnLAorICAgIHJldCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCAmYmFja2VuZC0+Y29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmZzc2xjdHhwKTsKICAgICBpZihyZXQpIHsKICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzaWduYWxlZCBieSBzc2wgY3R4IGNhbGxiYWNrIik7CkBAIC01MzUsMTYgKzU0MCwyMiBAQAogewogICBpbnQgcmV0OwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKnBlZXJjZXJ0OworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY29uc3QgY2hhciAqIGNvbnN0IHBpbm5lZHB1YmtleSA9IFNTTF9JU19QUk9YWSgpID8KLSAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfUFJPWFldIDoKKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IHBpbm5lZHB1YmtleSA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKKyNlbmRpZgogCiAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IG1iZWRfcmVjdjsKICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gbWJlZF9zZW5kOwogCi0gIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSgmQkFDS0VORC0+c3NsKTsKKyAgcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCZiYWNrZW5kLT5zc2wpOwogCiAgIGlmKHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEKSB7CiAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKQEAgLTU2NiwxMCArNTc3LDEwIEBACiAgIH0KIAogICBpbmZvZihkYXRhLCAibWJlZFRMUzogSGFuZHNoYWtlIGNvbXBsZXRlLCBjaXBoZXIgaXMgJXNcbiIsCi0gICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSgmQkFDS0VORC0+c3NsKQorICAgICAgICBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUoJmJhY2tlbmQtPnNzbCkKICAgICApOwogCi0gIHJldCA9IG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0KCZCQUNLRU5ELT5zc2wpOworICByZXQgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgmYmFja2VuZC0+c3NsKTsKIAogICBpZighU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpKQogICAgIC8qIElnbm9yZSBob3N0bmFtZSBlcnJvcnMgaWYgdmVyaWZ5aG9zdCBpcyBkaXNhYmxlZCAqLwpAQCAtNTg4LDEwICs1OTksMTMgQEAKICAgICBlbHNlIGlmKHJldCAmIE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEKQogICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9OT1RfVFJVU1RFRCIpOwogCisgICAgZWxzZSBpZihyZXQgJiBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkUpCisgICAgICBmYWlsZihkYXRhLCAiQ2VydCB2ZXJpZnkgZmFpbGVkOiBCQURDRVJUX0ZVVFVSRSIpOworCiAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgfQogCi0gIHBlZXJjZXJ0ID0gbWJlZHRsc19zc2xfZ2V0X3BlZXJfY2VydCgmQkFDS0VORC0+c3NsKTsKKyAgcGVlcmNlcnQgPSBtYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0KCZiYWNrZW5kLT5zc2wpOwogCiAgIGlmKHBlZXJjZXJ0ICYmIGRhdGEtPnNldC52ZXJib3NlKSB7CiAgICAgY29uc3Qgc2l6ZV90IGJ1ZnNpemUgPSAxNjM4NDsKQEAgLTY2MSw3ICs2NzUsNyBAQAogCiAjaWZkZWYgSEFTX0FMUE4KICAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKLSAgICBjb25zdCBjaGFyICpuZXh0X3Byb3RvY29sID0gbWJlZHRsc19zc2xfZ2V0X2FscG5fcHJvdG9jb2woJkJBQ0tFTkQtPnNzbCk7CisgICAgY29uc3QgY2hhciAqbmV4dF9wcm90b2NvbCA9IG1iZWR0bHNfc3NsX2dldF9hbHBuX3Byb3RvY29sKCZiYWNrZW5kLT5zc2wpOwogCiAgICAgaWYobmV4dF9wcm90b2NvbCkgewogICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJXNcbiIsIG5leHRfcHJvdG9jb2wpOwpAQCAtNjk4LDYgKzcxMiw3IEBACiB7CiAgIENVUkxjb2RlIHJldGNvZGUgPSBDVVJMRV9PSzsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKICAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKQEAgLTcxMyw3ICs3MjgsNyBAQAogCiAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9pbml0KG91cl9zc2xfc2Vzc2lvbmlkKTsKIAotICAgIHJldCA9IG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uKCZCQUNLRU5ELT5zc2wsIG91cl9zc2xfc2Vzc2lvbmlkKTsKKyAgICByZXQgPSBtYmVkdGxzX3NzbF9nZXRfc2Vzc2lvbigmYmFja2VuZC0+c3NsLCBvdXJfc3NsX3Nlc3Npb25pZCk7CiAgICAgaWYocmV0KSB7CiAgICAgICBpZihyZXQgIT0gTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCkKICAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKG91cl9zc2xfc2Vzc2lvbmlkKTsKQEAgLTc0Nyw5ICs3NjIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCiB7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIGludCByZXQgPSAtMTsKIAotICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSgmQkFDS0VORC0+c3NsLAorICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSgmYmFja2VuZC0+c3NsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKW1lbSwgbGVuKTsKIAogICBpZihyZXQgPCAwKSB7CkBAIC03NjksMTUgKzc4NSwxNiBAQAogc3RhdGljIHZvaWQgQ3VybF9tYmVkdGxzX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIG1iZWR0bHNfcGtfZnJlZSgmQkFDS0VORC0+cGspOwotICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJkJBQ0tFTkQtPmNsaWNlcnQpOwotICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJkJBQ0tFTkQtPmNhY2VydCk7Ci0gIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSgmQkFDS0VORC0+Y3JsKTsKLSAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoJkJBQ0tFTkQtPmNvbmZpZyk7Ci0gIG1iZWR0bHNfc3NsX2ZyZWUoJkJBQ0tFTkQtPnNzbCk7Ci0gIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSgmQkFDS0VORC0+Y3RyX2RyYmcpOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIG1iZWR0bHNfcGtfZnJlZSgmYmFja2VuZC0+cGspOworICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJmJhY2tlbmQtPmNsaWNlcnQpOworICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJmJhY2tlbmQtPmNhY2VydCk7CisgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSgmYmFja2VuZC0+Y3JsKTsKKyAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoJmJhY2tlbmQtPmNvbmZpZyk7CisgIG1iZWR0bHNfc3NsX2ZyZWUoJmJhY2tlbmQtPnNzbCk7CisgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSgmYmFja2VuZC0+Y3RyX2RyYmcpOwogI2lmbmRlZiBUSFJFQURJTkdfU1VQUE9SVAotICBtYmVkdGxzX2VudHJvcHlfZnJlZSgmQkFDS0VORC0+ZW50cm9weSk7CisgIG1iZWR0bHNfZW50cm9weV9mcmVlKCZiYWNrZW5kLT5lbnRyb3B5KTsKICNlbmRpZiAvKiBUSFJFQURJTkdfU1VQUE9SVCAqLwogfQogCkBAIC03ODYsMTEgKzgwMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgaW50IHJldCA9IC0xOwogICBzc2l6ZV90IGxlbiA9IC0xOwogCiAgIG1lbXNldChidWYsIDAsIGJ1ZmZlcnNpemUpOwotICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCZCQUNLRU5ELT5zc2wsICh1bnNpZ25lZCBjaGFyICopYnVmLAorICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCZiYWNrZW5kLT5zc2wsICh1bnNpZ25lZCBjaGFyICopYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnNpemUpOwogCiAgIGlmKHJldCA8PSAwKSB7CkBAIC04ODQsNyArOTAyLDcgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgbG9uZyB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIGludCB3aGF0OwogCiAgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KQEAgLTEwMTQsMTkgKzEwMzIsMjAgQEAKICAqLwogc3RhdGljIGludCBDdXJsX21iZWR0bHNfaW5pdCh2b2lkKQogewotICByZXR1cm4gQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKCk7CisgIHJldHVybiBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3RocmVhZF9zZXR1cCgpOwogfQogCiBzdGF0aWMgdm9pZCBDdXJsX21iZWR0bHNfY2xlYW51cCh2b2lkKQogewotICAodm9pZClDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCgpOworICAodm9pZClDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3RocmVhZF9jbGVhbnVwKCk7CiB9CiAKIHN0YXRpYyBib29sIEN1cmxfbWJlZHRsc19kYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQogewogICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgcmV0dXJuIG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbCgmQkFDS0VORC0+c3NsKSAhPSAwOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIHJldHVybiBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwoJmJhY2tlbmQtPnNzbCkgIT0gMDsKIH0KIAogc3RhdGljIENVUkxjb2RlIEN1cmxfbWJlZHRsc19zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCkBAIC0xMDQ4LDggKzEwNjcsOSBAQAogc3RhdGljIHZvaWQgKkN1cmxfbWJlZHRsc19nZXRfaW50ZXJuYWxzKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8gVU5VU0VEX1BBUkFNKQogeworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgICh2b2lkKWluZm87Ci0gIHJldHVybiAmQkFDS0VORC0+c3NsOworICByZXR1cm4gJmJhY2tlbmQtPnNzbDsKIH0KIAogY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX21iZWR0bHMgPSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHMuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5oCmluZGV4IDRhOTM4NjAuLjBjYzY0YjMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY3MmYxCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmIGRlZmluZWQoVVNFX01CRURUTFMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKSkgfHwgICBcCisgICAoZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkpKQorCisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKKyMgIGluY2x1ZGUgPHB0aHJlYWQuaD4KKyMgIGRlZmluZSBNQkVEVExTX01VVEVYX1QgcHRocmVhZF9tdXRleF90CisjZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQorIyAgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyAgZGVmaW5lIE1CRURUTFNfTVVURVhfVCBIQU5ETEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRsc190aHJlYWRsb2NrLmgiCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogbnVtYmVyIG9mIHRocmVhZCBsb2NrcyAqLworI2RlZmluZSBOVU1UICAgICAgICAgICAgICAgICAgICAyCisKKy8qIFRoaXMgYXJyYXkgd2lsbCBzdG9yZSBhbGwgb2YgdGhlIG11dGV4ZXMgYXZhaWxhYmxlIHRvIE1iZWR0bHMuICovCitzdGF0aWMgTUJFRFRMU19NVVRFWF9UICptdXRleF9idWYgPSBOVUxMOworCitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfc2V0dXAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgbXV0ZXhfYnVmID0gY2FsbG9jKE5VTVQgKiBzaXplb2YoTUJFRFRMU19NVVRFWF9UKSwgMSk7CisgIGlmKCFtdXRleF9idWYpCisgICAgcmV0dXJuIDA7ICAgICAvKiBlcnJvciwgbm8gbnVtYmVyIG9mIHRocmVhZHMgZGVmaW5lZCAqLworCisgIGZvcihpID0gMDsgIGkgPCBOVU1UOyAgaSsrKSB7CisgICAgaW50IHJldDsKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQorICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmbXV0ZXhfYnVmW2ldLCBOVUxMKTsKKyAgICBpZihyZXQpCisgICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9pbml0IGZhaWxlZCAqLworI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKKyAgICBtdXRleF9idWZbaV0gPSBDcmVhdGVNdXRleCgwLCBGQUxTRSwgMCk7CisgICAgaWYobXV0ZXhfYnVmW2ldID09IDApCisgICAgICByZXR1cm4gMDsgIC8qIENyZWF0ZU11dGV4IGZhaWxlZCAqLworI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCisgIH0KKworICByZXR1cm4gMTsgLyogT0sgKi8KK30KKworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgaWYoIW11dGV4X2J1ZikKKyAgICByZXR1cm4gMDsgLyogZXJyb3IsIG5vIHRocmVhZHMgbG9ja3MgZGVmaW5lZCAqLworCisgIGZvcihpID0gMDsgaSA8IE5VTVQ7IGkrKykgeworICAgIGludCByZXQ7CisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKKyAgICByZXQgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm11dGV4X2J1ZltpXSk7CisgICAgaWYocmV0KQorICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSBmYWlsZWQgKi8KKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCisgICAgcmV0ID0gQ2xvc2VIYW5kbGUobXV0ZXhfYnVmW2ldKTsKKyAgICBpZighcmV0KQorICAgICAgcmV0dXJuIDA7IC8qIENsb3NlSGFuZGxlIGZhaWxlZCAqLworI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCisgIH0KKyAgZnJlZShtdXRleF9idWYpOworICBtdXRleF9idWYgPSBOVUxMOworCisgIHJldHVybiAxOyAvKiBPSyAqLworfQorCitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKGludCBuKQoreworICBpZihuIDwgTlVNVCkgeworICAgIGludCByZXQ7CisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKKyAgICByZXQgPSBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4X2J1ZltuXSk7CisgICAgaWYocmV0KSB7CisgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IG1iZWR0bHN0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24gZmFpbGVkXG4iKSk7CisgICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9sb2NrIGZhaWxlZCAqLworICAgIH0KKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCisgICAgcmV0ID0gKFdhaXRGb3JTaW5nbGVPYmplY3QobXV0ZXhfYnVmW25dLCBJTkZJTklURSkgPT0gV0FJVF9GQUlMRUQ/MTowKTsKKyAgICBpZihyZXQpIHsKKyAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2xvY2sgZmFpbGVkICovCisgICAgfQorI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCisgIH0KKyAgcmV0dXJuIDE7IC8qIE9LICovCit9CisKK2ludCBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbihpbnQgbikKK3sKKyAgaWYobiA8IE5VTVQpIHsKKyAgICBpbnQgcmV0OworI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCisgICAgcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4X2J1ZltuXSk7CisgICAgaWYocmV0KSB7CisgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IG1iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X3VubG9jayBmYWlsZWQgKi8KKyAgICB9CisjZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQorICAgIHJldCA9IFJlbGVhc2VNdXRleChtdXRleF9idWZbbl0pOworICAgIGlmKCFyZXQpIHsKKyAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOworICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfbG9jayBmYWlsZWQgKi8KKyAgICB9CisjZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KKyAgfQorICByZXR1cm4gMTsgLyogT0sgKi8KK30KKworI2VuZGlmIC8qIFVTRV9NQkVEVExTICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE3ODdkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX01CRURUTFNfVEhSRUFETE9DS19ICisjZGVmaW5lIEhFQURFUl9DVVJMX01CRURUTFNfVEhSRUFETE9DS19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX01CRURUTFMKKworI2lmIChkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKSkgfHwgXAorICAgIChkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKSkKKworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX3NldHVwKHZvaWQpOworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAodm9pZCk7CitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKGludCBuKTsKK2ludCBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbihpbnQgbik7CisKKyNlbHNlCisKKyNkZWZpbmUgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfc2V0dXAoKSAxCisjZGVmaW5lIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAoKSAxCisjZGVmaW5lIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbih4KSAxCisjZGVmaW5lIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKHgpIDEKKworI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYIHx8IFVTRV9USFJFQURTX1dJTjMyICovCisKKyNlbmRpZiAvKiBVU0VfTUJFRFRMUyAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTUJFRFRMU19USFJFQURMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWVzYWxpbmsuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWVzYWxpbmsuYwppbmRleCA3MThjMjgyLi43MTMyYmRmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21lc2FsaW5rLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tZXNhbGluay5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAxOCwgWWltaW5nIEppbmcsIDxqaW5neWltaW5nQGJhaWR1LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03Myw2ICs3MywxNyBAQAogc3RhdGljIEN1cmxfcmVjdiBtZXNhbGlua19yZWN2Owogc3RhdGljIEN1cmxfc2VuZCBtZXNhbGlua19zZW5kOwogCitzdGF0aWMgaW50IGRvX2ZpbGVfdHlwZShjb25zdCBjaGFyICp0eXBlKQoreworICBpZighdHlwZSB8fCAhdHlwZVswXSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX1BFTTsKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIlBFTSIpKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiREVSIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9BU04xOworICByZXR1cm4gLTE7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGxvYWRzIGFsbCB0aGUgY2xpZW50L0NBIGNlcnRpZmljYXRlcyBhbmQgQ1JMcy4gU2V0dXAgdGhlIFRMUwogICogbGF5ZXIgYW5kIGRvIGFsbCBuZWNlc3NhcnkgbWFnaWMuCkBAIC04Myw5ICs5NCw2IEBACiAgIGNoYXIgKmNpcGhlcnM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgY29uc3QgYm9vbCB2ZXJpZnlwZWVyID0gU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpOwotICBjb25zdCBjaGFyICpjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7Ci0gIGNvbnN0IGNoYXIgKmNvbnN0IHNzbF9jYXBhdGggPSBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKTsKICAgc3RydWN0IGluX2FkZHIgYWRkcjQ7CiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgc3RydWN0IGluNl9hZGRyIGFkZHI2OwpAQCAtMTQyLDIxICsxNTAsMjUgQEAKICAgfQogCiAgIFNTTF9DVFhfc2V0X3ZlcmlmeSgKLSAgICBCQUNLRU5ELT5jdHgsIHZlcmlmeXBlZXIgPyBTU0xfVkVSSUZZX1BFRVIgOiBTU0xfVkVSSUZZX05PTkUsIE5VTEwpOworICAgIEJBQ0tFTkQtPmN0eCwgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpID8KKyAgICAgIFNTTF9WRVJJRllfUEVFUiA6IFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CiAKLSAgaWYoc3NsX2NhZmlsZSB8fCBzc2xfY2FwYXRoKSB7Ci0gICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKEJBQ0tFTkQtPmN0eCwgc3NsX2NhZmlsZSwgc3NsX2NhcGF0aCkpIHsKLSAgICAgIGlmKHZlcmlmeXBlZXIpIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgfHwgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkpIHsKKyAgICBpZighU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQkFDS0VORC0+Y3R4LCBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgogICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXMiLAotICAgICAgICAgICAgICBzc2xfY2FmaWxlID8gc3NsX2NhZmlsZSA6ICJub25lIiwKLSAgICAgICAgICAgICAgc3NsX2NhcGF0aCA/IHNzbF9jYXBhdGggOiAibm9uZSIpOworICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSA/CisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpIDogIm5vbmUiLAorICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSA/CisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpIDogIm5vbmUiKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICAgIH0KICAgICAgIGluZm9mKGRhdGEsCi0gICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zLCIKLSAgICAgICAgICAgICIgY29udGludWluZyBhbnl3YXk6XG4iKTsKKyAgICAgICAgICAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zLCIKKyAgICAgICAgICAiIGNvbnRpbnVpbmcgYW55d2F5OlxuIik7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgaW5mb2YoZGF0YSwgInN1Y2Nlc3NmdWxseSBzZXQgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9uczpcbiIpOwpAQCAtMTY0LDggKzE3NiwzMiBAQAogICAgIGluZm9mKGRhdGEsCiAgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuIgogICAgICAgICAgICIgIENBcGF0aDogJXNcbiIsCi0gICAgICAgICAgc3NsX2NhZmlsZSA/IHNzbF9jYWZpbGUgOiAibm9uZSIsCi0gICAgICAgICAgc3NsX2NhcGF0aCA/IHNzbF9jYXBhdGggOiAibm9uZSIpOworICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpPworICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOiAibm9uZSIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCk/CisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCk6ICJub25lIik7CisgIH0KKworICBpZihTU0xfU0VUX09QVElPTihjZXJ0KSAmJiBTU0xfU0VUX09QVElPTihrZXkpKSB7CisgICAgaW50IGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKTsKKworICAgIGlmKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoQkFDS0VORC0+Y3R4LCBTU0xfU0VUX09QVElPTihjZXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gdXNlIGNsaWVudCBjZXJ0aWZpY2F0ZSAobm8ga2V5IG9yIHdyb25nIHBhc3MiCisgICAgICAgICAgICAiIHBocmFzZT8pIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorCisgICAgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKFNTTF9TRVRfT1BUSU9OKGtleV90eXBlKSk7CisgICAgaWYoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKEJBQ0tFTkQtPmN0eCwgU1NMX1NFVF9PUFRJT04oa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgeworICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byBzZXQgcHJpdmF0ZSBrZXkiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAiY2xpZW50IGNlcnQ6ICVzXG4iLAorICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhjbGllbnRjZXJ0KT8KKyAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoY2xpZW50Y2VydCk6ICJub25lIik7CiAgIH0KIAogICBjaXBoZXJzID0gU1NMX0NPTk5fQ09ORklHKGNpcGhlcl9saXN0KTsKQEAgLTI2NSw3ICszMDEsNiBAQAogCiAgIHJldCA9IFNTTF9jb25uZWN0KEJBQ0tFTkQtPmhhbmRsZSk7CiAgIGlmKHJldCAhPSBTU0xfU1VDQ0VTUykgewotICAgIGNoYXIgZXJyb3JfYnVmZmVyW01FU0FMSU5LX01BWF9FUlJPUl9TWl07CiAgICAgaW50IGRldGFpbCA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCByZXQpOwogCiAgICAgaWYoU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCA9PSBkZXRhaWwgfHwgU1NMX0VSUk9SX1dBTlRfUkVBRCA9PSBkZXRhaWwpIHsKQEAgLTI3Myw2ICszMDgsNyBAQAogICAgICAgcmV0dXJuIENVUkxFX09LOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgIGNoYXIgZXJyb3JfYnVmZmVyW01FU0FMSU5LX01BWF9FUlJPUl9TWl07CiAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgIlNTTF9jb25uZWN0IGZhaWxlZCB3aXRoIGVycm9yICVkOiAlcyIsCiAgICAgICAgICAgICBkZXRhaWwsCkBAIC00NTgsNyArNDk0LDcgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgdGltZV90IHRpbWVvdXRfbXM7CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgaW50IHdoYXQ7CiAKICAgLyogY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCAqLwpAQCAtNTA2LDggKzU0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzb2NrZmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENVUkxfU09DS0VUX0JBRDsKIAotICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKAotICAgICAgICByZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwgbm9uYmxvY2tpbmcgPyAwIDogdGltZW91dF9tcyk7CisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmcgPyAwIDogdGltZW91dF9tcyk7CiAgICAgICBpZih3aGF0IDwgMCkgewogICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwogICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbnNzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL25zcy5jCmluZGV4IDQ5MWRlZjEuLmZjYTI5MjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbnNzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9uc3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtODcsOCArODcsNiBAQAogICBQSzExR2VuZXJpY09iamVjdCAqb2JqX2NsaWNlcnQ7CiB9OwogCi0jZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAotCiBzdGF0aWMgUFJMb2NrICpuc3NfaW5pdGxvY2sgPSBOVUxMOwogc3RhdGljIFBSTG9jayAqbnNzX2NybGxvY2sgPSBOVUxMOwogc3RhdGljIFBSTG9jayAqbnNzX2ZpbmRzbG90X2xvY2sgPSBOVUxMOwpAQCAtMTAzLDIyICsxMDEsMjIgQEAKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBub2RlOwogfTsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGNpcGhlcl9zIHsKICAgY29uc3QgY2hhciAqbmFtZTsKICAgaW50IG51bTsKLX0gY2lwaGVyX3M7Cit9OwogCiAjZGVmaW5lIFBLMTFfU0VUQVRUUlMoX2F0dHIsIF9pZHgsIF90eXBlLCBfdmFsLCBfbGVuKSBkbyB7ICBcCiAgIENLX0FUVFJJQlVURSAqcHRyID0gKF9hdHRyKSArICgoX2lkeCkrKyk7ICAgICAgICAgICAgICAgICBcCiAgIHB0ci0+dHlwZSA9IChfdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIHB0ci0+cFZhbHVlID0gKF92YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIHB0ci0+dWxWYWx1ZUxlbiA9IChfbGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IFdISUxFX0ZBTFNFCit9IHdoaWxlKDApCiAKICNkZWZpbmUgQ0VSVF9OZXdUZW1wQ2VydGlmaWNhdGUgX19DRVJUX05ld1RlbXBDZXJ0aWZpY2F0ZQogCiAjZGVmaW5lIE5VTV9PRl9DSVBIRVJTIHNpemVvZihjaXBoZXJsaXN0KS9zaXplb2YoY2lwaGVybGlzdFswXSkKLXN0YXRpYyBjb25zdCBjaXBoZXJfcyBjaXBoZXJsaXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNpcGhlcl9zIGNpcGhlcmxpc3RbXSA9IHsKICAgLyogU1NMMiBjaXBoZXIgc3VpdGVzICovCiAgIHsicmM0IiwgICAgICAgICAgICAgICAgICAgICAgICBTU0xfRU5fUkM0XzEyOF9XSVRIX01ENX0sCiAgIHsicmM0LW1kNSIsICAgICAgICAgICAgICAgICAgICBTU0xfRU5fUkM0XzEyOF9XSVRIX01ENX0sCkBAIC0yMTYsMTEgKzIxNCwxOSBAQAogIHsiZGhlX3JzYV9jaGFjaGEyMF9wb2x5MTMwNV9zaGFfMjU2IiwKICAgICAgVExTX0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZ9LAogI2VuZGlmCisjaWZkZWYgVExTX0FFU18yNTZfR0NNX1NIQTM4NAorIHsiYWVzXzEyOF9nY21fc2hhXzI1NiIsICAgICAgICAgICAgICBUTFNfQUVTXzEyOF9HQ01fU0hBMjU2fSwKKyB7ImFlc18yNTZfZ2NtX3NoYV8zODQiLCAgICAgICAgICAgICAgVExTX0FFU18yNTZfR0NNX1NIQTM4NH0sCisgeyJjaGFjaGEyMF9wb2x5MTMwNV9zaGFfMjU2IiwgICAgICAgIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZ9LAorI2VuZGlmCiB9OwogCi0jaWZkZWYgV0lOMzIKKyNpZiBkZWZpbmVkKFdJTjMyKQogc3RhdGljIGNvbnN0IGNoYXIgKnBlbV9saWJyYXJ5ID0gIm5zc3BlbS5kbGwiOwogc3RhdGljIGNvbnN0IGNoYXIgKnRydXN0X2xpYnJhcnkgPSAibnNzY2tiaS5kbGwiOworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgY29uc3QgY2hhciAqcGVtX2xpYnJhcnkgPSAibGlibnNzcGVtLmR5bGliIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0cnVzdF9saWJyYXJ5ID0gImxpYm5zc2NrYmkuZHlsaWIiOwogI2Vsc2UKIHN0YXRpYyBjb25zdCBjaGFyICpwZW1fbGlicmFyeSA9ICJsaWJuc3NwZW0uc28iOwogc3RhdGljIGNvbnN0IGNoYXIgKnRydXN0X2xpYnJhcnkgPSAibGlibnNzY2tiaS5zbyI7CkBAIC00NTQsNiArNDYwLDcgQEAKIAogICBjb25zdCBpbnQgc2xvdF9pZCA9IChjYWNlcnQpID8gMCA6IDE7CiAgIGNoYXIgKnNsb3RfbmFtZSA9IGFwcmludGYoIlBFTSBUb2tlbiAjJWQiLCBzbG90X2lkKTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBpZighc2xvdF9uYW1lKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC00ODcsMTQgKzQ5NCwxNCBAQAogICBpZighb2JqKQogICAgIHJldHVybiByZXN1bHQ7CiAKLSAgaWYoaW5zZXJ0X3dyYXBwZWRfcHRyKCZCQUNLRU5ELT5vYmpfbGlzdCwgb2JqKSAhPSBDVVJMRV9PSykgeworICBpZihpbnNlcnRfd3JhcHBlZF9wdHIoJmJhY2tlbmQtPm9ial9saXN0LCBvYmopICE9IENVUkxFX09LKSB7CiAgICAgUEsxMV9EZXN0cm95R2VuZXJpY09iamVjdChvYmopOwogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKICAgaWYoIWNhY2VydCAmJiBDS09fQ0VSVElGSUNBVEUgPT0gb2JqX2NsYXNzKQogICAgIC8qIHN0b3JlIHJlZmVyZW5jZSB0byBhIGNsaWVudCBjZXJ0aWZpY2F0ZSAqLwotICAgIEJBQ0tFTkQtPm9ial9jbGljZXJ0ID0gb2JqOworICAgIGJhY2tlbmQtPm9ial9jbGljZXJ0ID0gb2JqOwogCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KQEAgLTU3MywxOSArNTgwLDIxIEBACiAgIC8qIGFjcXVpcmUgbG9jayBiZWZvcmUgY2FsbCBvZiBDRVJUX0NhY2hlQ1JMKCkgYW5kIGFjY2Vzc2luZyBuc3NfY3JsX2xpc3QgKi8KICAgUFJfTG9jayhuc3NfY3JsbG9jayk7CiAKLSAgLyogc3RvcmUgdGhlIENSTCBpdGVtIHNvIHRoYXQgd2UgY2FuIGZyZWUgaXQgaW4gQ3VybF9uc3NfY2xlYW51cCgpICovCi0gIGlmKGluc2VydF93cmFwcGVkX3B0cigmbnNzX2NybF9saXN0LCBjcmxfZGVyKSAhPSBDVVJMRV9PSykgewotICAgIFNFQ0lURU1fRnJlZUl0ZW0oY3JsX2RlciwgUFJfVFJVRSk7Ci0gICAgUFJfVW5sb2NrKG5zc19jcmxsb2NrKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCiAgIGlmKFNFQ1N1Y2Nlc3MgIT0gQ0VSVF9DYWNoZUNSTChkYiwgY3JsX2RlcikpIHsKICAgICAvKiB1bmFibGUgdG8gY2FjaGUgQ1JMICovCisgICAgU0VDSVRFTV9GcmVlSXRlbShjcmxfZGVyLCBQUl9UUlVFKTsKICAgICBQUl9VbmxvY2sobnNzX2NybGxvY2spOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ1JMX0JBREZJTEU7CiAgIH0KIAorICAvKiBzdG9yZSB0aGUgQ1JMIGl0ZW0gc28gdGhhdCB3ZSBjYW4gZnJlZSBpdCBpbiBDdXJsX25zc19jbGVhbnVwKCkgKi8KKyAgaWYoaW5zZXJ0X3dyYXBwZWRfcHRyKCZuc3NfY3JsX2xpc3QsIGNybF9kZXIpICE9IENVUkxFX09LKSB7CisgICAgaWYoU0VDU3VjY2VzcyA9PSBDRVJUX1VuY2FjaGVDUkwoZGIsIGNybF9kZXIpKQorICAgICAgU0VDSVRFTV9GcmVlSXRlbShjcmxfZGVyLCBQUl9UUlVFKTsKKyAgICBQUl9VbmxvY2sobnNzX2NybGxvY2spOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKICAgLyogd2UgbmVlZCB0byBjbGVhciBzZXNzaW9uIGNhY2hlLCBzbyB0aGF0IHRoZSBDUkwgY291bGQgdGFrZSBlZmZlY3QgKi8KICAgU1NMX0NsZWFyU2Vzc2lvbkNhY2hlKCk7CiAgIFBSX1VubG9jayhuc3NfY3JsbG9jayk7CkBAIC02ODEsNyArNjkwLDEwIEBACiAgIHRtcCA9IFNFQ01PRF9XYWl0Rm9yQW55VG9rZW5FdmVudChwZW1fbW9kdWxlLCAwLCAwKTsKICAgaWYodG1wKQogICAgIFBLMTFfRnJlZVNsb3QodG1wKTsKLSAgUEsxMV9Jc1ByZXNlbnQoc2xvdCk7CisgIGlmKCFQSzExX0lzUHJlc2VudChzbG90KSkgeworICAgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgfQogCiAgIHN0YXR1cyA9IFBLMTFfQXV0aGVudGljYXRlKHNsb3QsIFBSX1RSVUUsIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKICAgUEsxMV9GcmVlU2xvdChzbG90KTsKQEAgLTEwNzEsNyArMTA4Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBpbm5lZHB1YmtleSkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gQkFDS0VORC0+ZGF0YTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gYmFja2VuZC0+ZGF0YTsKICAgQ0VSVENlcnRpZmljYXRlICpjZXJ0OwogCiAgIGlmKCFwaW5uZWRwdWJrZXkpCkBAIC0xMDc5LDcgKzEwOTIsNyBAQAogICAgIHJldHVybiBDVVJMRV9PSzsKIAogICAvKiBnZXQgcGVlciBjZXJ0aWZpY2F0ZSAqLwotICBjZXJ0ID0gU1NMX1BlZXJDZXJ0aWZpY2F0ZShCQUNLRU5ELT5oYW5kbGUpOworICBjZXJ0ID0gU1NMX1BlZXJDZXJ0aWZpY2F0ZShiYWNrZW5kLT5oYW5kbGUpOwogICBpZihjZXJ0KSB7CiAgICAgLyogZXh0cmFjdCBwdWJsaWMga2V5IGZyb20gcGVlciBjZXJ0aWZpY2F0ZSAqLwogICAgIFNFQ0tFWVB1YmxpY0tleSAqcHVia2V5ID0gQ0VSVF9FeHRyYWN0UHVibGljS2V5KGNlcnQpOwpAQCAtMTEyMywxMSArMTEzNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTRUNLRVlQcml2YXRlS2V5U3RyICoqcFJldEtleSkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKilhcmc7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBCQUNLRU5ELT5kYXRhOwotICBjb25zdCBjaGFyICpuaWNrbmFtZSA9IEJBQ0tFTkQtPmNsaWVudF9uaWNrbmFtZTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gYmFja2VuZC0+ZGF0YTsKKyAgY29uc3QgY2hhciAqbmlja25hbWUgPSBiYWNrZW5kLT5jbGllbnRfbmlja25hbWU7CiAgIHN0YXRpYyBjb25zdCBjaGFyIHBlbV9zbG90bmFtZVtdID0gIlBFTSBUb2tlbiAjMSI7CiAKLSAgaWYoQkFDS0VORC0+b2JqX2NsaWNlcnQpIHsKKyAgaWYoYmFja2VuZC0+b2JqX2NsaWNlcnQpIHsKICAgICAvKiB1c2UgdGhlIGNlcnQva2V5IHByb3ZpZGVkIGJ5IFBFTSByZWFkZXIgKi8KICAgICBTRUNJdGVtIGNlcnRfZGVyID0geyAwLCBOVUxMLCAwIH07CiAgICAgdm9pZCAqcHJvdG9fd2luID0gU1NMX1JldmVhbFBpbkFyZyhzb2NrKTsKQEAgLTExNDAsNyArMTE1NCw3IEBACiAgICAgICByZXR1cm4gU0VDRmFpbHVyZTsKICAgICB9CiAKLSAgICBpZihQSzExX1JlYWRSYXdBdHRyaWJ1dGUoUEsxMV9UeXBlR2VuZXJpYywgQkFDS0VORC0+b2JqX2NsaWNlcnQsIENLQV9WQUxVRSwKKyAgICBpZihQSzExX1JlYWRSYXdBdHRyaWJ1dGUoUEsxMV9UeXBlR2VuZXJpYywgYmFja2VuZC0+b2JqX2NsaWNlcnQsIENLQV9WQUxVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNlcnRfZGVyKSAhPSBTRUNTdWNjZXNzKSB7CiAgICAgICBmYWlsZihkYXRhLCAiTlNTOiBDS0FfVkFMVUUgbm90IGZvdW5kIGluIFBLMTEgZ2VuZXJpYyBvYmplY3QiKTsKICAgICAgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CkBAIC0xNDE2LDcgKzE0MzAsNyBAQAogewogICAvKiBjdXJsX2dsb2JhbF9pbml0KCkgaXMgbm90IHRocmVhZC1zYWZlIHNvIHRoaXMgdGVzdCBpcyBvayAqLwogICBpZihuc3NfaW5pdGxvY2sgPT0gTlVMTCkgewotICAgIFBSX0luaXQoUFJfVVNFUl9USFJFQUQsIFBSX1BSSU9SSVRZX05PUk1BTCwgMjU2KTsKKyAgICBQUl9Jbml0KFBSX1VTRVJfVEhSRUFELCBQUl9QUklPUklUWV9OT1JNQUwsIDApOwogICAgIG5zc19pbml0bG9jayA9IFBSX05ld0xvY2soKTsKICAgICBuc3NfY3JsbG9jayA9IFBSX05ld0xvY2soKTsKICAgICBuc3NfZmluZHNsb3RfbG9jayA9IFBSX05ld0xvY2soKTsKQEAgLTE0OTAsMTEgKzE1MDQsMTIgQEAKIHN0YXRpYyBpbnQgQ3VybF9uc3NfY2hlY2tfY3huKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW0ZJUlNUU09DS0VUXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBpbnQgcmM7CiAgIGNoYXIgYnVmOwogCiAgIHJjID0KLSAgICBQUl9SZWN2KEJBQ0tFTkQtPmhhbmRsZSwgKHZvaWQgKikmYnVmLCAxLCBQUl9NU0dfUEVFSywKKyAgICBQUl9SZWN2KGJhY2tlbmQtPmhhbmRsZSwgKHZvaWQgKikmYnVmLCAxLCBQUl9NU0dfUEVFSywKICAgICAgICAgICAgIFBSX1NlY29uZHNUb0ludGVydmFsKDEpKTsKICAgaWYocmMgPiAwKQogICAgIHJldHVybiAxOyAvKiBjb25uZWN0aW9uIHN0aWxsIGluIHBsYWNlICovCkBAIC0xNTA4LDI2ICsxNTIzLDI3IEBACiBzdGF0aWMgdm9pZCBuc3NfY2xvc2Uoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiB7CiAgIC8qIGJlZm9yZSB0aGUgY2xlYW51cCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgdXNpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUgKi8KLSAgY29uc3QgYm9vbCBjbGllbnRfY2VydCA9IChCQUNLRU5ELT5jbGllbnRfbmlja25hbWUgIT0gTlVMTCkKLSAgICB8fCAoQkFDS0VORC0+b2JqX2NsaWNlcnQgIT0gTlVMTCk7CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgY29uc3QgYm9vbCBjbGllbnRfY2VydCA9IChiYWNrZW5kLT5jbGllbnRfbmlja25hbWUgIT0gTlVMTCkKKyAgICB8fCAoYmFja2VuZC0+b2JqX2NsaWNlcnQgIT0gTlVMTCk7CiAKLSAgZnJlZShCQUNLRU5ELT5jbGllbnRfbmlja25hbWUpOwotICBCQUNLRU5ELT5jbGllbnRfbmlja25hbWUgPSBOVUxMOworICBmcmVlKGJhY2tlbmQtPmNsaWVudF9uaWNrbmFtZSk7CisgIGJhY2tlbmQtPmNsaWVudF9uaWNrbmFtZSA9IE5VTEw7CiAKICAgLyogZGVzdHJveSBhbGwgTlNTIG9iamVjdHMgaW4gb3JkZXIgdG8gYXZvaWQgZmFpbHVyZSBvZiBOU1Mgc2h1dGRvd24gKi8KLSAgQ3VybF9sbGlzdF9kZXN0cm95KCZCQUNLRU5ELT5vYmpfbGlzdCwgTlVMTCk7Ci0gIEJBQ0tFTkQtPm9ial9jbGljZXJ0ID0gTlVMTDsKKyAgQ3VybF9sbGlzdF9kZXN0cm95KCZiYWNrZW5kLT5vYmpfbGlzdCwgTlVMTCk7CisgIGJhY2tlbmQtPm9ial9jbGljZXJ0ID0gTlVMTDsKIAotICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKKyAgaWYoYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgaWYoY2xpZW50X2NlcnQpCiAgICAgICAvKiBBIHNlcnZlciBtaWdodCByZXF1aXJlIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBiYXNlZCBvbiB0aGUKICAgICAgICAqIHBhcnRpY3VsYXIgcGF0aCBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4gIFRvIHN1cHBvcnQgdGhpcwogICAgICAgICogc2NlbmFyaW8sIHdlIG11c3QgZW5zdXJlIHRoYXQgYSBjb25uZWN0aW9uIHdpbGwgbmV2ZXIgcmV1c2UgdGhlCiAgICAgICAgKiBhdXRoZW50aWNhdGlvbiBkYXRhIGZyb20gYSBwcmV2aW91cyBjb25uZWN0aW9uLiAqLwotICAgICAgU1NMX0ludmFsaWRhdGVTZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSk7CisgICAgICBTU0xfSW52YWxpZGF0ZVNlc3Npb24oYmFja2VuZC0+aGFuZGxlKTsKIAotICAgIFBSX0Nsb3NlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gICAgQkFDS0VORC0+aGFuZGxlID0gTlVMTDsKKyAgICBQUl9DbG9zZShiYWNrZW5kLT5oYW5kbGUpOworICAgIGJhY2tlbmQtPmhhbmRsZSA9IE5VTEw7CiAgIH0KIH0KIApAQCAtMTUzOCwxNSArMTU1NCwxNiBAQAogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2xfcHJveHkgPSAmY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAotICBpZihCQUNLRU5ELT5oYW5kbGUgfHwgY29ubnNzbF9wcm94eS0+YmFja2VuZC0+aGFuZGxlKSB7CisgIGlmKGJhY2tlbmQtPmhhbmRsZSB8fCBjb25uc3NsX3Byb3h5LT5iYWNrZW5kLT5oYW5kbGUpIHsKICAgICAvKiBOU1MgY2xvc2VzIHRoZSBzb2NrZXQgd2UgcHJldmlvdXNseSBoYW5kZWQgdG8gaXQsIHNvIHdlIG11c3QgbWFyayBpdAogICAgICAgIGFzIGNsb3NlZCB0byBhdm9pZCBkb3VibGUgY2xvc2UgKi8KICAgICBmYWtlX3NjbG9zZShjb25uLT5zb2NrW3NvY2tpbmRleF0pOwogICAgIGNvbm4tPnNvY2tbc29ja2luZGV4XSA9IENVUkxfU09DS0VUX0JBRDsKICAgfQogCi0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkKKyAgaWYoYmFja2VuZC0+aGFuZGxlKQogICAgIC8qIG5zc19jbG9zZShjb25uc3NsKSB3aWxsIHRyYW5zaXRpdmVseSBjbG9zZSBhbHNvCiAgICAgICAgY29ubnNzbF9wcm94eS0+YmFja2VuZC0+aGFuZGxlIGlmIGJvdGggYXJlIHVzZWQuIENsZWFyIGl0IHRvIGF2b2lkCiAgICAgICAgYSBkb3VibGUgY2xvc2UgbGVhZGluZyB0byBjcmFzaC4gKi8KQEAgLTE3MjEsMjAgKzE3MzgsMTYgQEAKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBjb25zdCBsb25nIG1pbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKICAgY29uc3QgbG9uZyBtYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOwotCi0gIC8qIG1hcCBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCB0byBOU1MgZGVmYXVsdCAqLwotICBpZihtaW4gPT0gQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgfHwgbWF4ID09IENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVCkgewotICAgIC8qIG1hcCBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCB0byBOU1MgZGVmYXVsdCAqLwotICAgIGlmKFNTTF9WZXJzaW9uUmFuZ2VHZXREZWZhdWx0KHNzbF92YXJpYW50X3N0cmVhbSwgc3NsdmVyKSAhPSBTRUNTdWNjZXNzKQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIC8qIC4uLiBidXQgbWFrZSBzdXJlIHdlIHVzZSBhdCBsZWFzdCBUTFN2MS4wIGFjY29yZGluZyB0byBsaWJjdXJsIEFQSSAqLwotICAgIGlmKHNzbHZlci0+bWluIDwgU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8wKQotICAgICAgc3NsdmVyLT5taW4gPSBTU0xfTElCUkFSWV9WRVJTSU9OX1RMU18xXzA7Ci0gIH0KKyAgU1NMVmVyc2lvblJhbmdlIHZyYW5nZTsKIAogICBzd2l0Y2gobWluKSB7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgorICAgIC8qIEJ1bXAgb3VyIG1pbmltdW0gVExTIHZlcnNpb24gaWYgTlNTIGhhcyBzdHJpY3RlciByZXF1aXJlbWVudHMuICovCisgICAgaWYoU1NMX1ZlcnNpb25SYW5nZUdldERlZmF1bHQoc3NsX3ZhcmlhbnRfc3RyZWFtLCAmdnJhbmdlKSAhPSBTRUNTdWNjZXNzKQorICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIGlmKHNzbHZlci0+bWluIDwgdnJhbmdlLm1pbikKKyAgICAgIHNzbHZlci0+bWluID0gdnJhbmdlLm1pbjsKICAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICByZXN1bHQgPSBuc3Nfc3NsdmVyX2Zyb21fY3VybCgmc3NsdmVyLT5taW4sIG1pbik7CkBAIC0xNzY0LDYgKzE3NzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgY3VybGVycikKIHsKICAgUFJFcnJvckNvZGUgZXJyID0gMDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogCiAgIGlmKGlzX25zc19lcnJvcihjdXJsZXJyKSkgewogICAgIC8qIHJlYWQgTlNQUiBlcnJvciBjb2RlICovCkBAIC0xNzc5LDcgKzE3OTMsNyBAQAogICB9CiAKICAgLyogY2xlYW51cCBvbiBjb25uZWN0aW9uIGZhaWx1cmUgKi8KLSAgQ3VybF9sbGlzdF9kZXN0cm95KCZCQUNLRU5ELT5vYmpfbGlzdCwgTlVMTCk7CisgIEN1cmxfbGxpc3RfZGVzdHJveSgmYmFja2VuZC0+b2JqX2xpc3QsIE5VTEwpOwogCiAgIHJldHVybiBjdXJsZXJyOwogfQpAQCAtMTc5MCwxMCArMTgwNCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibG9ja2luZykKIHsKICAgc3RhdGljIFBSU29ja2V0T3B0aW9uRGF0YSBzb2NrX29wdDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzb2NrX29wdC5vcHRpb24gPSBQUl9Tb2NrT3B0X05vbmJsb2NraW5nOwogICBzb2NrX29wdC52YWx1ZS5ub25fYmxvY2tpbmcgPSAhYmxvY2tpbmc7CiAKLSAgaWYoUFJfU2V0U29ja2V0T3B0aW9uKEJBQ0tFTkQtPmhhbmRsZSwgJnNvY2tfb3B0KSAhPSBQUl9TVUNDRVNTKQorICBpZihQUl9TZXRTb2NrZXRPcHRpb24oYmFja2VuZC0+aGFuZGxlLCAmc29ja19vcHQpICE9IFBSX1NVQ0NFU1MpCiAgICAgcmV0dXJuIG5zc19mYWlsX2Nvbm5lY3QoY29ubnNzbCwgZGF0YSwgQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1IpOwogCiAgIHJldHVybiBDVVJMRV9PSzsKQEAgLTE4MDksNiArMTgyNCw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBib29sIHNlY29uZF9sYXllciA9IEZBTFNFOwogICBTU0xWZXJzaW9uUmFuZ2Ugc3NsdmVyX3N1cHBvcnRlZDsKQEAgLTE4MjYsMTAgKzE4NDIsMTAgQEAKICNlbmRpZgogICB9OwogCi0gIEJBQ0tFTkQtPmRhdGEgPSBkYXRhOworICBiYWNrZW5kLT5kYXRhID0gZGF0YTsKIAogICAvKiBsaXN0IG9mIGFsbCBOU1Mgb2JqZWN0cyB3ZSBuZWVkIHRvIGRlc3Ryb3kgaW4gQ3VybF9uc3NfY2xvc2UoKSAqLwotICBDdXJsX2xsaXN0X2luaXQoJkJBQ0tFTkQtPm9ial9saXN0LCBuc3NfZGVzdHJveV9vYmplY3QpOworICBDdXJsX2xsaXN0X2luaXQoJmJhY2tlbmQtPm9ial9saXN0LCBuc3NfZGVzdHJveV9vYmplY3QpOwogCiAgIFBSX0xvY2sobnNzX2luaXRsb2NrKTsKICAgcmVzdWx0ID0gbnNzX2luaXQoY29ubi0+ZGF0YSk7CkBAIC0xOTUxLDcgKzE5NjcsNyBAQAogICAgIGNoYXIgKm5pY2tuYW1lID0gZHVwX25pY2tuYW1lKGRhdGEsIFNTTF9TRVRfT1BUSU9OKGNlcnQpKTsKICAgICBpZihuaWNrbmFtZSkgewogICAgICAgLyogd2UgYXJlIG5vdCBnb2luZyB0byB1c2UgbGlibnNzcGVtLnNvIHRvIHJlYWQgdGhlIGNsaWVudCBjZXJ0ICovCi0gICAgICBCQUNLRU5ELT5vYmpfY2xpY2VydCA9IE5VTEw7CisgICAgICBiYWNrZW5kLT5vYmpfY2xpY2VydCA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgQ1VSTGNvZGUgcnYgPSBjZXJ0X3N0dWZmKGNvbm4sIHNvY2tpbmRleCwgU1NMX1NFVF9PUFRJT04oY2VydCksCkBAIC0xOTY0LDEwICsxOTgwLDEwIEBACiAgICAgfQogCiAgICAgLyogc3RvcmUgdGhlIG5pY2tuYW1lIGZvciBTZWxlY3RDbGllbnRDZXJ0KCkgY2FsbGVkIGR1cmluZyBoYW5kc2hha2UgKi8KLSAgICBCQUNLRU5ELT5jbGllbnRfbmlja25hbWUgPSBuaWNrbmFtZTsKKyAgICBiYWNrZW5kLT5jbGllbnRfbmlja25hbWUgPSBuaWNrbmFtZTsKICAgfQogICBlbHNlCi0gICAgQkFDS0VORC0+Y2xpZW50X25pY2tuYW1lID0gTlVMTDsKKyAgICBiYWNrZW5kLT5jbGllbnRfbmlja25hbWUgPSBOVUxMOwogCiAgIGlmKFNTTF9HZXRDbGllbnRBdXRoRGF0YUhvb2sobW9kZWwsIFNlbGVjdENsaWVudENlcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiljb25uc3NsKSAhPSBTRUNTdWNjZXNzKSB7CkBAIC0yMDA4LDggKzIwMjQsOCBAQAogICB9CiAKICAgLyogaW1wb3J0IG91ciBtb2RlbCBzb2NrZXQgb250byB0aGUgY3VycmVudCBJL08gc3RhY2sgKi8KLSAgQkFDS0VORC0+aGFuZGxlID0gU1NMX0ltcG9ydEZEKG1vZGVsLCBuc3ByX2lvKTsKLSAgaWYoIUJBQ0tFTkQtPmhhbmRsZSkgeworICBiYWNrZW5kLT5oYW5kbGUgPSBTU0xfSW1wb3J0RkQobW9kZWwsIG5zcHJfaW8pOworICBpZighYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgaWYoIXNlY29uZF9sYXllcikKICAgICAgIFBSX0Nsb3NlKG5zcHJfaW8pOwogICAgIGdvdG8gZXJyb3I7CkBAIC0yMDIwLDM2ICsyMDM2LDM2IEBACiAKICAgLyogVGhpcyBpcyB0aGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjZXJ0IHRoYXQgd2UncmUgdXNpbmcgKi8KICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpIHsKLSAgICBTU0xfU2V0UEtDUzExUGluQXJnKEJBQ0tFTkQtPmhhbmRsZSwgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpOworICAgIFNTTF9TZXRQS0NTMTFQaW5BcmcoYmFja2VuZC0+aGFuZGxlLCBTU0xfU0VUX09QVElPTihrZXlfcGFzc3dkKSk7CiAgIH0KIAogI2lmZGVmIFNTTF9FTkFCTEVfT0NTUF9TVEFQTElORwogICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5c3RhdHVzKSkgewotICAgIGlmKFNTTF9PcHRpb25TZXQoQkFDS0VORC0+aGFuZGxlLCBTU0xfRU5BQkxFX09DU1BfU1RBUExJTkcsIFBSX1RSVUUpCisgICAgaWYoU1NMX09wdGlvblNldChiYWNrZW5kLT5oYW5kbGUsIFNTTF9FTkFCTEVfT0NTUF9TVEFQTElORywgUFJfVFJVRSkKICAgICAgICAgIT0gU0VDU3VjY2VzcykKICAgICAgIGdvdG8gZXJyb3I7CiAgIH0KICNlbmRpZgogCiAjaWZkZWYgU1NMX0VOQUJMRV9OUE4KLSAgaWYoU1NMX09wdGlvblNldChCQUNLRU5ELT5oYW5kbGUsIFNTTF9FTkFCTEVfTlBOLCBjb25uLT5iaXRzLnRsc19lbmFibGVfbnBuCisgIGlmKFNTTF9PcHRpb25TZXQoYmFja2VuZC0+aGFuZGxlLCBTU0xfRU5BQkxFX05QTiwgY29ubi0+Yml0cy50bHNfZW5hYmxlX25wbgogICAgICAgICAgICAgICAgICAgID8gUFJfVFJVRSA6IFBSX0ZBTFNFKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAjZW5kaWYKIAogI2lmZGVmIFNTTF9FTkFCTEVfQUxQTgotICBpZihTU0xfT3B0aW9uU2V0KEJBQ0tFTkQtPmhhbmRsZSwgU1NMX0VOQUJMRV9BTFBOLCBjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbgorICBpZihTU0xfT3B0aW9uU2V0KGJhY2tlbmQtPmhhbmRsZSwgU1NMX0VOQUJMRV9BTFBOLCBjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbgogICAgICAgICAgICAgICAgICAgID8gUFJfVFJVRSA6IFBSX0ZBTFNFKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAjZW5kaWYKIAogI2lmIE5TU1ZFUk5VTSA+PSAweDAzMGYwNCAvKiAzLjE1LjQgKi8KICAgaWYoZGF0YS0+c2V0LnNzbC5mYWxzZXN0YXJ0KSB7Ci0gICAgaWYoU1NMX09wdGlvblNldChCQUNLRU5ELT5oYW5kbGUsIFNTTF9FTkFCTEVfRkFMU0VfU1RBUlQsIFBSX1RSVUUpCisgICAgaWYoU1NMX09wdGlvblNldChiYWNrZW5kLT5oYW5kbGUsIFNTTF9FTkFCTEVfRkFMU0VfU1RBUlQsIFBSX1RSVUUpCiAgICAgICAgICE9IFNFQ1N1Y2Nlc3MpCiAgICAgICBnb3RvIGVycm9yOwogCi0gICAgaWYoU1NMX1NldENhbkZhbHNlU3RhcnRDYWxsYmFjayhCQUNLRU5ELT5oYW5kbGUsIENhbkZhbHNlU3RhcnRDYWxsYmFjaywKKyAgICBpZihTU0xfU2V0Q2FuRmFsc2VTdGFydENhbGxiYWNrKGJhY2tlbmQtPmhhbmRsZSwgQ2FuRmFsc2VTdGFydENhbGxiYWNrLAogICAgICAgICBjb25uKSAhPSBTRUNTdWNjZXNzKQogICAgICAgZ290byBlcnJvcjsKICAgfQpAQCAtMjA3MywyNCArMjA4OSwyNCBAQAogICAgIG1lbWNweSgmcHJvdG9jb2xzW2N1cl0sIEFMUE5fSFRUUF8xXzEsIEFMUE5fSFRUUF8xXzFfTEVOR1RIKTsKICAgICBjdXIgKz0gQUxQTl9IVFRQXzFfMV9MRU5HVEg7CiAKLSAgICBpZihTU0xfU2V0TmV4dFByb3RvTmVnbyhCQUNLRU5ELT5oYW5kbGUsIHByb3RvY29scywgY3VyKSAhPSBTRUNTdWNjZXNzKQorICAgIGlmKFNTTF9TZXROZXh0UHJvdG9OZWdvKGJhY2tlbmQtPmhhbmRsZSwgcHJvdG9jb2xzLCBjdXIpICE9IFNFQ1N1Y2Nlc3MpCiAgICAgICBnb3RvIGVycm9yOwogICB9CiAjZW5kaWYKIAogCiAgIC8qIEZvcmNlIGhhbmRzaGFrZSBvbiBuZXh0IEkvTyAqLwotICBpZihTU0xfUmVzZXRIYW5kc2hha2UoQkFDS0VORC0+aGFuZGxlLCAvKiBhc1NlcnZlciAqLyBQUl9GQUxTRSkKKyAgaWYoU1NMX1Jlc2V0SGFuZHNoYWtlKGJhY2tlbmQtPmhhbmRsZSwgLyogYXNTZXJ2ZXIgKi8gUFJfRkFMU0UpCiAgICAgICAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAKICAgLyogcHJvcGFnYXRlIGhvc3RuYW1lIHRvIHRoZSBUTFMgbGF5ZXIgKi8KLSAgaWYoU1NMX1NldFVSTChCQUNLRU5ELT5oYW5kbGUsIFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICBpZihTU0xfU2V0VVJMKGJhY2tlbmQtPmhhbmRsZSwgU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CiAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAKICAgLyogcHJldmVudCBOU1MgZnJvbSByZS11c2luZyB0aGUgc2Vzc2lvbiBmb3IgYSBkaWZmZXJlbnQgaG9zdG5hbWUgKi8KLSAgaWYoU1NMX1NldFNvY2tQZWVySUQoQkFDS0VORC0+aGFuZGxlLCBTU0xfSVNfUFJPWFkoKSA/CisgIGlmKFNTTF9TZXRTb2NrUGVlcklEKGJhY2tlbmQtPmhhbmRsZSwgU1NMX0lTX1BST1hZKCkgPwogICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6IGNvbm4tPmhvc3QubmFtZSkKICAgICAgIT0gU0VDU3VjY2VzcykKICAgICBnb3RvIGVycm9yOwpAQCAtMjEwNyw2ICsyMTIzLDcgQEAKIHN0YXRpYyBDVVJMY29kZSBuc3NfZG9fY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCiB7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgUFJVaW50MzIgdGltZW91dDsKQEAgLTIxMTgsNyArMjEzNSw3IEBACiAKIAogICAvKiBjaGVjayB0aW1lb3V0IHNpdHVhdGlvbiAqLwotICBjb25zdCB0aW1lX3QgdGltZV9sZWZ0ID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKyAgY29uc3QgdGltZWRpZmZfdCB0aW1lX2xlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwogICBpZih0aW1lX2xlZnQgPCAwKSB7CiAgICAgZmFpbGYoZGF0YSwgInRpbWVkIG91dCBiZWZvcmUgU1NMIGhhbmRzaGFrZSIpOwogICAgIHJlc3VsdCA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKQEAgLTIxMjcsNyArMjE0NCw3IEBACiAKICAgLyogRm9yY2UgdGhlIGhhbmRzaGFrZSBub3cgKi8KICAgdGltZW91dCA9IFBSX01pbGxpc2Vjb25kc1RvSW50ZXJ2YWwoKFBSVWludDMyKSB0aW1lX2xlZnQpOwotICBpZihTU0xfRm9yY2VIYW5kc2hha2VXaXRoVGltZW91dChCQUNLRU5ELT5oYW5kbGUsIHRpbWVvdXQpICE9IFNFQ1N1Y2Nlc3MpIHsKKyAgaWYoU1NMX0ZvcmNlSGFuZHNoYWtlV2l0aFRpbWVvdXQoYmFja2VuZC0+aGFuZGxlLCB0aW1lb3V0KSAhPSBTRUNTdWNjZXNzKSB7CiAgICAgaWYoUFJfR2V0RXJyb3IoKSA9PSBQUl9XT1VMRF9CTE9DS19FUlJPUikKICAgICAgIC8qIGJsb2NraW5nIGRpcmVjdGlvbiBpcyB1cGRhdGVkIGJ5IG5zc191cGRhdGVfY29ubmVjdGluZ19zdGF0ZSgpICovCiAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CkBAIC0yMTM4LDcgKzIxNTUsNyBAQAogICAgIGdvdG8gZXJyb3I7CiAgIH0KIAotICByZXN1bHQgPSBkaXNwbGF5X2Nvbm5faW5mbyhjb25uLCBCQUNLRU5ELT5oYW5kbGUpOworICByZXN1bHQgPSBkaXNwbGF5X2Nvbm5faW5mbyhjb25uLCBiYWNrZW5kLT5oYW5kbGUpOwogICBpZihyZXN1bHQpCiAgICAgZ290byBlcnJvcjsKIApAQCAtMjE0Nyw3ICsyMTY0LDcgQEAKICAgICBjaGFyICpuaWNrbmFtZSA9IGR1cF9uaWNrbmFtZShkYXRhLCBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSk7CiAgICAgaWYobmlja25hbWUpIHsKICAgICAgIC8qIHdlIHN1cHBvcnQgb25seSBuaWNrbmFtZXMgaW4gY2FzZSBvZiBpc3N1ZXJjZXJ0IGZvciBub3cgKi8KLSAgICAgIHJldCA9IGNoZWNrX2lzc3Vlcl9jZXJ0KEJBQ0tFTkQtPmhhbmRsZSwgbmlja25hbWUpOworICAgICAgcmV0ID0gY2hlY2tfaXNzdWVyX2NlcnQoYmFja2VuZC0+aGFuZGxlLCBuaWNrbmFtZSk7CiAgICAgICBmcmVlKG5pY2tuYW1lKTsKICAgICB9CiAKQEAgLTIyNTEsMTMgKzIyNjgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc3NpemVfdCByYzsKIAogICAvKiBUaGUgU2VsZWN0Q2xpZW50Q2VydCgpIGhvb2sgdXNlcyB0aGlzIGZvciBpbmZvZigpIGFuZCBmYWlsZigpIGJ1dCB0aGUKICAgICAgaGFuZGxlIHN0b3JlZCBpbiBuc3Nfc2V0dXBfY29ubmVjdCgpIGNvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZyZWVkLiAqLwotICBCQUNLRU5ELT5kYXRhID0gY29ubi0+ZGF0YTsKKyAgYmFja2VuZC0+ZGF0YSA9IGNvbm4tPmRhdGE7CiAKLSAgcmMgPSBQUl9TZW5kKEJBQ0tFTkQtPmhhbmRsZSwgbWVtLCAoaW50KWxlbiwgMCwgUFJfSU5URVJWQUxfTk9fV0FJVCk7CisgIHJjID0gUFJfU2VuZChiYWNrZW5kLT5oYW5kbGUsIG1lbSwgKGludClsZW4sIDAsIFBSX0lOVEVSVkFMX05PX1dBSVQpOwogICBpZihyYyA8IDApIHsKICAgICBQUkludDMyIGVyciA9IFBSX0dldEVycm9yKCk7CiAgICAgaWYoZXJyID09IFBSX1dPVUxEX0JMT0NLX0VSUk9SKQpAQCAtMjI4OCwxMyArMjMwNiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzc2l6ZV90IG5yZWFkOwogCiAgIC8qIFRoZSBTZWxlY3RDbGllbnRDZXJ0KCkgaG9vayB1c2VzIHRoaXMgZm9yIGluZm9mKCkgYW5kIGZhaWxmKCkgYnV0IHRoZQogICAgICBoYW5kbGUgc3RvcmVkIGluIG5zc19zZXR1cF9jb25uZWN0KCkgY291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZnJlZWQuICovCi0gIEJBQ0tFTkQtPmRhdGEgPSBjb25uLT5kYXRhOworICBiYWNrZW5kLT5kYXRhID0gY29ubi0+ZGF0YTsKIAotICBucmVhZCA9IFBSX1JlY3YoQkFDS0VORC0+aGFuZGxlLCBidWYsIChpbnQpYnVmZmVyc2l6ZSwgMCwKKyAgbnJlYWQgPSBQUl9SZWN2KGJhY2tlbmQtPmhhbmRsZSwgYnVmLCAoaW50KWJ1ZmZlcnNpemUsIDAsCiAgICAgICAgICAgICAgICAgICBQUl9JTlRFUlZBTF9OT19XQUlUKTsKICAgaWYobnJlYWQgPCAwKSB7CiAgICAgLyogZmFpbGVkIFNTTCByZWFkICovCkBAIC0yMzU1LDYgKzIzNzQsOSBAQAogICBQSzExQ29udGV4dCAqTUQ1cHcgPSBQSzExX0NyZWF0ZURpZ2VzdENvbnRleHQoU0VDX09JRF9NRDUpOwogICB1bnNpZ25lZCBpbnQgTUQ1b3V0OwogCisgIGlmKCFNRDVwdykKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworCiAgIFBLMTFfRGlnZXN0T3AoTUQ1cHcsIHRtcCwgY3VybHhfdXp0b3VpKHRtcGxlbikpOwogICBQSzExX0RpZ2VzdEZpbmFsKE1ENXB3LCBtZDVzdW0sICZNRDVvdXQsIGN1cmx4X3V6dG91aShtZDVsZW4pKTsKICAgUEsxMV9EZXN0cm95Q29udGV4dChNRDVwdywgUFJfVFJVRSk7CkBAIC0yMzcwLDYgKzIzOTIsOSBAQAogICBQSzExQ29udGV4dCAqU0hBMjU2cHcgPSBQSzExX0NyZWF0ZURpZ2VzdENvbnRleHQoU0VDX09JRF9TSEEyNTYpOwogICB1bnNpZ25lZCBpbnQgU0hBMjU2b3V0OwogCisgIGlmKCFTSEEyNTZwdykKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworCiAgIFBLMTFfRGlnZXN0T3AoU0hBMjU2cHcsIHRtcCwgY3VybHhfdXp0b3VpKHRtcGxlbikpOwogICBQSzExX0RpZ2VzdEZpbmFsKFNIQTI1NnB3LCBzaGEyNTZzdW0sICZTSEEyNTZvdXQsIGN1cmx4X3V6dG91aShzaGEyNTZsZW4pKTsKICAgUEsxMV9EZXN0cm95Q29udGV4dChTSEEyNTZwdywgUFJfVFJVRSk7CkBAIC0yMzk4LDggKzI0MjMsOSBAQAogc3RhdGljIHZvaWQgKkN1cmxfbnNzX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKIHsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICAodm9pZClpbmZvOwotICByZXR1cm4gQkFDS0VORC0+aGFuZGxlOworICByZXR1cm4gYmFja2VuZC0+aGFuZGxlOwogfQogCiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfbnNzID0gewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9vcGVuc3NsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYwppbmRleCA4NWU5YmU2Li4yZTlmOTAwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsMTcgKzI1LDE3IEBACiAgKiBidXQgdnRscy5jIHNob3VsZCBldmVyIGNhbGwgb3IgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KICAqLwogCi0vKgotICogVGhlIG9yaWdpbmFsIFNTTGVheS11c2luZyBjb2RlIGZvciBjdXJsIHdhcyB3cml0dGVuIGJ5IExpbmFzIFZlcHN0YXMgYW5kCi0gKiBTYW1wbyBLZWxsb21ha2kgMTk5OC4KLSAqLwotCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCiAjaWZkZWYgVVNFX09QRU5TU0wKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogCisvKiBXaW5jcnlwdCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSBhbnl0aGluZyB0aGF0IGNvdWxkIGluY2x1ZGUgT3BlblNTTC4gKi8KKyNpZiBkZWZpbmVkKFVTRV9XSU4zMl9DUllQVE8pCisjaW5jbHVkZSA8d2luY3J5cHQuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAiZm9ybWRhdGEuaCIgLyogZm9yIHRoZSBib3VuZGFyeSBmdW5jdGlvbiAqLwpAQCAtNDYsMTAgKzQ2LDEzIEBACiAjaW5jbHVkZSAic2xpc3QuaCIKICNpbmNsdWRlICJzZWxlY3QuaCIKICNpbmNsdWRlICJ2dGxzLmgiCisjaW5jbHVkZSAia2V5bG9nLmgiCiAjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgImhvc3RjaGVjay5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisKICNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CkBAIC03NSw3ICs3OCw3IEBACiAjZW5kaWYKIAogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDcwMGZMKSAmJiAvKiAwLjkuNyBvciBsYXRlciAqLyAgICAgXAotICAhZGVmaW5lZChPUEVOU1NMX05PX0VOR0lORSkKKyAgIWRlZmluZWQoT1BFTlNTTF9OT19FTkdJTkUpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVUlfQ09OU09MRSkKICNkZWZpbmUgVVNFX09QRU5TU0xfRU5HSU5FCiAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KICNlbmRpZgpAQCAtMTQ2LDE2ICsxNDksMTYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBMSUJSRVNTTF9WRVJTSU9OX05VTUJFUgotI2RlZmluZSBPcGVuU1NMX3ZlcnNpb25fbnVtKCkgTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIKLSNlbmRpZgotCiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMjAwZkwpICYmIC8qIDEuMC4yIG9yIGxhdGVyICovIFwKICAgICAhKGRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpICYmIFwKICAgICAgIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgyMDcwMDAwMEwpCiAjZGVmaW5lIEhBVkVfWDUwOV9HRVQwX1NJR05BVFVSRSAxCiAjZW5kaWYKIAorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDIwMGZMKSAvKiAxLjAuMiBvciBsYXRlciAqLworI2RlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gMQorI2VuZGlmCisKICNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDIwMDNMICYmIFwKICAgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8PSAweDEwMDAyRkZGTCAmJiBcCiAgICFkZWZpbmVkKE9QRU5TU0xfTk9fQ09NUCkKQEAgLTIxMSwyOSArMjE0LDE3IEBACiAgICJBTEw6IUVYUE9SVDohRVhQT1JUNDA6IUVYUE9SVDU2OiFhTlVMTDohTE9XOiFSQzQ6QFNUUkVOR1RIIgogI2VuZGlmCiAKLSNkZWZpbmUgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLQotI2lmZGVmIEVOQUJMRV9TU0xLRVlMT0dGSUxFCi10eXBlZGVmIHN0cnVjdCBzc2xfdGFwX3N0YXRlIHsKLSAgaW50IG1hc3Rlcl9rZXlfbGVuZ3RoOwotICB1bnNpZ25lZCBjaGFyIG1hc3Rlcl9rZXlbU1NMX01BWF9NQVNURVJfS0VZX0xFTkdUSF07Ci0gIHVuc2lnbmVkIGNoYXIgY2xpZW50X3JhbmRvbVtTU0wzX1JBTkRPTV9TSVpFXTsKLX0gc3NsX3RhcF9zdGF0ZV90OwotI2VuZGlmIC8qIEVOQUJMRV9TU0xLRVlMT0dGSUxFICovCi0KIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKICAgLyogdGhlc2Ugb25lcyByZXF1aXJlcyBzcGVjaWZpYyBTU0wtdHlwZXMgKi8KICAgU1NMX0NUWCogY3R4OwogICBTU0wqICAgICBoYW5kbGU7CiAgIFg1MDkqICAgIHNlcnZlcl9jZXJ0OwotI2lmZGVmIEVOQUJMRV9TU0xLRVlMT0dGSUxFCi0gIC8qIHRhcF9zdGF0ZSBob2xkcyB0aGUgbGFzdCBzZWVuIG1hc3RlciBrZXkgaWYgd2UncmUgbG9nZ2luZyB0aGVtICovCi0gIHNzbF90YXBfc3RhdGVfdCB0YXBfc3RhdGU7CisjaWZuZGVmIEhBVkVfS0VZTE9HX0NBTExCQUNLCisgIC8qIFNldCB0byB0cnVlIG9uY2UgYSB2YWxpZCBrZXlsb2cgZW50cnkgaGFzIGJlZW4gY3JlYXRlZCB0byBhdm9pZCBkdXBlcy4gKi8KKyAgYm9vbCAgICAga2V5bG9nX2RvbmU7CiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgQkFDS0VORCBjb25uc3NsLT5iYWNrZW5kCi0KIC8qCiAgKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSByYW5kb20gbnVtYmVyIHNlZWQgZmlsZS4gVGhpcyBtdXN0IGJlCiAgKiBhIGZpbml0ZSB2YWx1ZSAoYmVjYXVzZSBzb21lIGVudHJvcHkgImZpbGVzIiBsaWtlIC9kZXYvdXJhbmRvbSBoYXZlCkBAIC0yNDIsNTcgKzIzMywyNyBAQAogICovCiAjZGVmaW5lIFJBTkRfTE9BRF9MRU5HVEggMTAyNAogCi0jaWZkZWYgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLS8qIFRoZSBmcCBmb3IgdGhlIG9wZW4gU1NMS0VZTE9HRklMRSwgb3IgTlVMTCBpZiBub3Qgb3BlbiAqLwotc3RhdGljIEZJTEUgKmtleWxvZ19maWxlX2ZwOwotCiAjaWZkZWYgSEFWRV9LRVlMT0dfQ0FMTEJBQ0sKIHN0YXRpYyB2b2lkIG9zc2xfa2V5bG9nX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsLCBjb25zdCBjaGFyICpsaW5lKQogewogICAodm9pZClzc2w7CiAKLSAgLyogVXNpbmcgZnB1dHMgaGVyZSBpbnN0ZWFkIG9mIGZwcmludGYgc2luY2UgbGliY3VybCdzIGZwcmludGYgcmVwbGFjZW1lbnQKLSAgICAgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4gKi8KLSAgaWYoa2V5bG9nX2ZpbGVfZnAgJiYgbGluZSAmJiAqbGluZSkgewotICAgIGNoYXIgc3RhY2tidWZbMjU2XTsKLSAgICBjaGFyICpidWY7Ci0gICAgc2l6ZV90IGxpbmVsZW4gPSBzdHJsZW4obGluZSk7Ci0KLSAgICBpZihsaW5lbGVuIDw9IHNpemVvZihzdGFja2J1ZikgLSAyKQotICAgICAgYnVmID0gc3RhY2tidWY7Ci0gICAgZWxzZSB7Ci0gICAgICBidWYgPSBtYWxsb2MobGluZWxlbiArIDIpOwotICAgICAgaWYoIWJ1ZikKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtZW1jcHkoYnVmLCBsaW5lLCBsaW5lbGVuKTsKLSAgICBidWZbbGluZWxlbl0gPSAnXG4nOwotICAgIGJ1ZltsaW5lbGVuICsgMV0gPSAnXDAnOwotCi0gICAgZnB1dHMoYnVmLCBrZXlsb2dfZmlsZV9mcCk7Ci0gICAgaWYoYnVmICE9IHN0YWNrYnVmKQotICAgICAgZnJlZShidWYpOwotICB9CisgIEN1cmxfdGxzX2tleWxvZ193cml0ZV9saW5lKGxpbmUpOwogfQogI2Vsc2UKLSNkZWZpbmUgS0VZTE9HX1BSRUZJWCAgICAgICJDTElFTlRfUkFORE9NICIKLSNkZWZpbmUgS0VZTE9HX1BSRUZJWF9MRU4gIChzaXplb2YoS0VZTE9HX1BSRUZJWCkgLSAxKQogLyoKLSAqIHRhcF9zc2xfa2V5IGlzIGNhbGxlZCBieSBsaWJjdXJsIHRvIG1ha2UgdGhlIENMSUVOVF9SQU5ET01zIGlmIHRoZSBPcGVuU1NMCi0gKiBiZWluZyB1c2VkIGRvZXNuJ3QgaGF2ZSBuYXRpdmUgc3VwcG9ydCBmb3IgZG9pbmcgdGhhdC4KKyAqIG9zc2xfbG9nX3RsczEyX3NlY3JldCBpcyBjYWxsZWQgYnkgbGliY3VybCB0byBtYWtlIHRoZSBDTElFTlRfUkFORE9NcyBpZiB0aGUKKyAqIE9wZW5TU0wgYmVpbmcgdXNlZCBkb2Vzbid0IGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yIGRvaW5nIHRoYXQuCiAgKi8KLXN0YXRpYyB2b2lkIHRhcF9zc2xfa2V5KGNvbnN0IFNTTCAqc3NsLCBzc2xfdGFwX3N0YXRlX3QgKnN0YXRlKQorc3RhdGljIHZvaWQKK29zc2xfbG9nX3RsczEyX3NlY3JldChjb25zdCBTU0wgKnNzbCwgYm9vbCAqa2V5bG9nX2RvbmUpCiB7Ci0gIGNvbnN0IGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKLSAgaW50IHBvcywgaTsKLSAgY2hhciBsaW5lW0tFWUxPR19QUkVGSVhfTEVOICsgMiAqIFNTTDNfUkFORE9NX1NJWkUgKyAxICsKLSAgICAgICAgICAgIDIgKiBTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIICsgMSArIDFdOwogICBjb25zdCBTU0xfU0VTU0lPTiAqc2Vzc2lvbiA9IFNTTF9nZXRfc2Vzc2lvbihzc2wpOwogICB1bnNpZ25lZCBjaGFyIGNsaWVudF9yYW5kb21bU1NMM19SQU5ET01fU0laRV07CiAgIHVuc2lnbmVkIGNoYXIgbWFzdGVyX2tleVtTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIXTsKICAgaW50IG1hc3Rlcl9rZXlfbGVuZ3RoID0gMDsKIAotICBpZighc2Vzc2lvbiB8fCAha2V5bG9nX2ZpbGVfZnApCisgIGlmKCFzZXNzaW9uIHx8ICprZXlsb2dfZG9uZSkKICAgICByZXR1cm47CiAKICNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMICYmIFwKQEAgLTMxMSw0NCArMjcyLDE3IEBACiAgIH0KICNlbmRpZgogCisgIC8qIFRoZSBoYW5kc2hha2UgaGFzIG5vdCBwcm9ncmVzc2VkIHN1ZmZpY2llbnRseSB5ZXQsIG9yIHRoaXMgaXMgYSBUTFMgMS4zCisgICAqIHNlc3Npb24gKHdoZW4gY3VybCB3YXMgYnVpbHQgd2l0aCBvbGRlciBPcGVuU1NMIGhlYWRlcnMgYW5kIHJ1bm5pbmcgd2l0aAorICAgKiBuZXdlciBPcGVuU1NMIHJ1bnRpbWUgbGlicmFyaWVzKS4gKi8KICAgaWYobWFzdGVyX2tleV9sZW5ndGggPD0gMCkKICAgICByZXR1cm47CiAKLSAgLyogU2tpcCB3cml0aW5nIGtleXMgaWYgdGhlcmUgaXMgbm8ga2V5IG9yIGl0IGRpZCBub3QgY2hhbmdlLiAqLwotICBpZihzdGF0ZS0+bWFzdGVyX2tleV9sZW5ndGggPT0gbWFzdGVyX2tleV9sZW5ndGggJiYKLSAgICAgIW1lbWNtcChzdGF0ZS0+bWFzdGVyX2tleSwgbWFzdGVyX2tleSwgbWFzdGVyX2tleV9sZW5ndGgpICYmCi0gICAgICFtZW1jbXAoc3RhdGUtPmNsaWVudF9yYW5kb20sIGNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3RhdGUtPm1hc3Rlcl9rZXlfbGVuZ3RoID0gbWFzdGVyX2tleV9sZW5ndGg7Ci0gIG1lbWNweShzdGF0ZS0+bWFzdGVyX2tleSwgbWFzdGVyX2tleSwgbWFzdGVyX2tleV9sZW5ndGgpOwotICBtZW1jcHkoc3RhdGUtPmNsaWVudF9yYW5kb20sIGNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpOwotCi0gIG1lbWNweShsaW5lLCBLRVlMT0dfUFJFRklYLCBLRVlMT0dfUFJFRklYX0xFTik7Ci0gIHBvcyA9IEtFWUxPR19QUkVGSVhfTEVOOwotCi0gIC8qIENsaWVudCBSYW5kb20gZm9yIFNTTHYzL1RMUyAqLwotICBmb3IoaSA9IDA7IGkgPCBTU0wzX1JBTkRPTV9TSVpFOyBpKyspIHsKLSAgICBsaW5lW3BvcysrXSA9IGhleFtjbGllbnRfcmFuZG9tW2ldID4+IDRdOwotICAgIGxpbmVbcG9zKytdID0gaGV4W2NsaWVudF9yYW5kb21baV0gJiAweEZdOwotICB9Ci0gIGxpbmVbcG9zKytdID0gJyAnOwotCi0gIC8qIE1hc3RlciBTZWNyZXQgKHNpemUgaXMgYXQgbW9zdCBTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIKSAqLwotICBmb3IoaSA9IDA7IGkgPCBtYXN0ZXJfa2V5X2xlbmd0aDsgaSsrKSB7Ci0gICAgbGluZVtwb3MrK10gPSBoZXhbbWFzdGVyX2tleVtpXSA+PiA0XTsKLSAgICBsaW5lW3BvcysrXSA9IGhleFttYXN0ZXJfa2V5W2ldICYgMHhGXTsKLSAgfQotICBsaW5lW3BvcysrXSA9ICdcbic7Ci0gIGxpbmVbcG9zXSA9ICdcMCc7Ci0KLSAgLyogVXNpbmcgZnB1dHMgaGVyZSBpbnN0ZWFkIG9mIGZwcmludGYgc2luY2UgbGliY3VybCdzIGZwcmludGYgcmVwbGFjZW1lbnQKLSAgICAgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4gKi8KLSAgZnB1dHMobGluZSwga2V5bG9nX2ZpbGVfZnApOworICAqa2V5bG9nX2RvbmUgPSB0cnVlOworICBDdXJsX3Rsc19rZXlsb2dfd3JpdGUoIkNMSUVOVF9SQU5ET00iLCBjbGllbnRfcmFuZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleSwgbWFzdGVyX2tleV9sZW5ndGgpOwogfQogI2VuZGlmIC8qICFIQVZFX0tFWUxPR19DQUxMQkFDSyAqLwotI2VuZGlmIC8qIEVOQUJMRV9TU0xLRVlMT0dGSUxFICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICpTU0xfRVJST1JfdG9fc3RyKGludCBlcnIpCiB7CkBAIC0zOTIsNyArMzI2LDIwIEBACiAgKi8KIHN0YXRpYyBjaGFyICpvc3NsX3N0cmVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CisgIGlmKHNpemUpCisgICAgKmJ1ZiA9ICdcMCc7CisKKyNpZmRlZiBPUEVOU1NMX0lTX0JPUklOR1NTTAorICBFUlJfZXJyb3Jfc3RyaW5nX24oKHVpbnQzMl90KWVycm9yLCBidWYsIHNpemUpOworI2Vsc2UKICAgRVJSX2Vycm9yX3N0cmluZ19uKGVycm9yLCBidWYsIHNpemUpOworI2VuZGlmCisKKyAgaWYoc2l6ZSA+IDEgJiYgISpidWYpIHsKKyAgICBzdHJuY3B5KGJ1ZiwgKGVycm9yID8gIlVua25vd24gZXJyb3IiIDogIk5vIGVycm9yIiksIHNpemUpOworICAgIGJ1ZltzaXplIC0gMV0gPSAnXDAnOworICB9CisKICAgcmV0dXJuIGJ1ZjsKIH0KIApAQCAtNjA5LDEyICs1NTYsMTM2IEBACiBzdGF0aWMgQ1VSTGNvZGUgQ3VybF9vc3NsX3NldF9lbmdpbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmdpbmUpOwogCitzdGF0aWMgaW50CitTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9iaW8oU1NMX0NUWCAqY3R4LCBCSU8gKmluLCBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXlfcGFzc3dkKQoreworICBpbnQgcmV0ID0gMDsKKyAgWDUwOSAqeCA9IE5VTEw7CisKKyAgaWYodHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkgeworICAgIC8qIGogPSBFUlJfUl9BU04xX0xJQjsgKi8KKyAgICB4ID0gZDJpX1g1MDlfYmlvKGluLCBOVUxMKTsKKyAgfQorICBlbHNlIGlmKHR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSkgeworICAgIC8qIEVSUl9SX1BFTV9MSUI7ICovCisgICAgeCA9IFBFTV9yZWFkX2Jpb19YNTA5KGluLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd2RfY2FsbGJhY2ssICh2b2lkICopa2V5X3Bhc3N3ZCk7CisgIH0KKyAgZWxzZSB7CisgICAgcmV0ID0gMDsKKyAgICBnb3RvIGVuZDsKKyAgfQorCisgIGlmKHggPT0gTlVMTCkgeworICAgIHJldCA9IDA7CisgICAgZ290byBlbmQ7CisgIH0KKworICByZXQgPSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZShjdHgsIHgpOworIGVuZDoKKyAgWDUwOV9mcmVlKHgpOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2JpbyhTU0xfQ1RYICpjdHgsIEJJTyogaW4sIGludCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5X3Bhc3N3ZCkKK3sKKyAgaW50IHJldCA9IDA7CisgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKKworICBpZih0eXBlID09IFNTTF9GSUxFVFlQRV9QRU0pCisgICAgcGtleSA9IFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KGluLCBOVUxMLCBwYXNzd2RfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopa2V5X3Bhc3N3ZCk7CisgIGVsc2UgaWYodHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkKKyAgICBwa2V5ID0gZDJpX1ByaXZhdGVLZXlfYmlvKGluLCBOVUxMKTsKKyAgZWxzZSB7CisgICAgcmV0ID0gMDsKKyAgICBnb3RvIGVuZDsKKyAgfQorICBpZihwa2V5ID09IE5VTEwpIHsKKyAgICByZXQgPSAwOworICAgIGdvdG8gZW5kOworICB9CisgIHJldCA9IFNTTF9DVFhfdXNlX1ByaXZhdGVLZXkoY3R4LCBwa2V5KTsKKyAgRVZQX1BLRVlfZnJlZShwa2V5KTsKKyAgZW5kOgorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9iaW8oU1NMX0NUWCAqY3R4LCBCSU8qIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleV9wYXNzd2QpCit7CisvKiBTU0xfQ1RYX2FkZDFfY2hhaW5fY2VydCBpbnRyb2R1Y2VkIGluIE9wZW5TU0wgMS4wLjIgKi8KKyNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAyMDBmTCkgLyogMS4wLjIgb3IgbGF0ZXIgKi8KKyAgaW50IHJldCA9IDA7CisgIFg1MDkgKnggPSBOVUxMOworICB2b2lkICpwYXNzd2RfY2FsbGJhY2tfdXNlcmRhdGEgPSAodm9pZCAqKWtleV9wYXNzd2Q7CisKKyAgRVJSX2NsZWFyX2Vycm9yKCk7CisKKyAgeCA9IFBFTV9yZWFkX2Jpb19YNTA5X0FVWChpbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd2RfY2FsbGJhY2ssICh2b2lkICopa2V5X3Bhc3N3ZCk7CisKKyAgaWYoeCA9PSBOVUxMKSB7CisgICAgcmV0ID0gMDsKKyAgICBnb3RvIGVuZDsKKyAgfQorCisgIHJldCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKGN0eCwgeCk7CisKKyAgaWYoRVJSX3BlZWtfZXJyb3IoKSAhPSAwKQorICAgICAgcmV0ID0gMDsKKworICBpZihyZXQpIHsKKyAgICBYNTA5ICpjYTsKKyAgICB1bnNpZ25lZCBsb25nIGVycjsKKworICAgIGlmKCFTU0xfQ1RYX2NsZWFyX2NoYWluX2NlcnRzKGN0eCkpIHsKKyAgICAgIHJldCA9IDA7CisgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICB3aGlsZSgoY2EgPSBQRU1fcmVhZF9iaW9fWDUwOShpbiwgTlVMTCwgcGFzc3dkX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3ZF9jYWxsYmFja191c2VyZGF0YSkpCisgICAgICAgICAgIT0gTlVMTCkgeworCisgICAgICBpZighU1NMX0NUWF9hZGQwX2NoYWluX2NlcnQoY3R4LCBjYSkpIHsKKyAgICAgICAgWDUwOV9mcmVlKGNhKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZ290byBlbmQ7CisgICAgICB9CisgICAgfQorCisgICAgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworICAgIGlmKChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfUEVNKSAmJgorICAgICAgIChFUlJfR0VUX1JFQVNPTihlcnIpID09IFBFTV9SX05PX1NUQVJUX0xJTkUpKQorICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgZWxzZQorICAgICAgcmV0ID0gMDsKKyAgfQorCisgZW5kOgorICBYNTA5X2ZyZWUoeCk7CisgIHJldHVybiByZXQ7CisjZWxzZQorICAodm9pZCljdHg7IC8qIHVudXNlZCAqLworICAodm9pZClpbjsgLyogdW51c2VkICovCisgICh2b2lkKWtleV9wYXNzd2Q7IC8qIHVudXNlZCAqLworICByZXR1cm4gMDsKKyNlbmRpZgorfQorCiBzdGF0aWMKIGludCBjZXJ0X3N0dWZmKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgIFNTTF9DVFgqIGN0eCwKICAgICAgICAgICAgICAgIGNoYXIgKmNlcnRfZmlsZSwKKyAgICAgICAgICAgICAgIEJJTyAqY2VydF9iaW8sCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjZXJ0X3R5cGUsCiAgICAgICAgICAgICAgICBjaGFyICprZXlfZmlsZSwKKyAgICAgICAgICAgICAgIEJJTyoga2V5X2JpbywKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleV90eXBlLAogICAgICAgICAgICAgICAgY2hhciAqa2V5X3Bhc3N3ZCkKIHsKQEAgLTYyNCwxMCArNjk1LDExIEBACiAKICAgaW50IGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShjZXJ0X3R5cGUpOwogCi0gIGlmKGNlcnRfZmlsZSB8fCAoZmlsZV90eXBlID09IFNTTF9GSUxFVFlQRV9FTkdJTkUpKSB7CisgIGlmKGNlcnRfZmlsZSB8fCBjZXJ0X2JpbyB8fCAoZmlsZV90eXBlID09IFNTTF9GSUxFVFlQRV9FTkdJTkUpKSB7CiAgICAgU1NMICpzc2w7CiAgICAgWDUwOSAqeDUwOTsKICAgICBpbnQgY2VydF9kb25lID0gMDsKKyAgICBpbnQgY2VydF91c2VfcmVzdWx0OwogCiAgICAgaWYoa2V5X3Bhc3N3ZCkgewogICAgICAgLyogc2V0IHRoZSBwYXNzd29yZCBpbiB0aGUgY2FsbGJhY2sgdXNlcmRhdGEgKi8KQEAgLTY0MCw4ICs3MTIsMTAgQEAKICAgICBzd2l0Y2goZmlsZV90eXBlKSB7CiAgICAgY2FzZSBTU0xfRklMRVRZUEVfUEVNOgogICAgICAgLyogU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZSgpIG9ubHkgd29ya3Mgb24gUEVNIGZpbGVzICovCi0gICAgICBpZihTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlKSAhPSAxKSB7CisgICAgICBjZXJ0X3VzZV9yZXN1bHQgPSBjZXJ0X2JpbyA/CisgICAgICAgICAgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fYmlvKGN0eCwgY2VydF9iaW8sIGtleV9wYXNzd2QpIDoKKyAgICAgICAgICBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCwgY2VydF9maWxlKTsKKyAgICAgIGlmKGNlcnRfdXNlX3Jlc3VsdCAhPSAxKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsCiAgICAgICAgICAgICAgICJjb3VsZCBub3QgbG9hZCBQRU0gY2xpZW50IGNlcnRpZmljYXRlLCAiIE9TU0xfUEFDS0FHRQogICAgICAgICAgICAgICAiIGVycm9yICVzLCAiCkBAIC02NTYsOSArNzMwLDEyIEBACiAgICAgICAvKiBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKCkgd29ya3Mgd2l0aCBlaXRoZXIgUEVNIG9yIEFTTjEsIGJ1dAogICAgICAgICAgd2UgdXNlIHRoZSBjYXNlIGFib3ZlIGZvciBQRU0gc28gdGhpcyBjYW4gb25seSBiZSBwZXJmb3JtZWQgd2l0aAogICAgICAgICAgQVNOMSBmaWxlcy4gKi8KLSAgICAgIGlmKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgeworCisgICAgICBjZXJ0X3VzZV9yZXN1bHQgPSBjZXJ0X2JpbyA/CisgICAgICAgICAgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfYmlvKGN0eCwgY2VydF9iaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSwga2V5X3Bhc3N3ZCkgOgorICAgICAgICAgIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LCBjZXJ0X2ZpbGUsIGZpbGVfdHlwZSk7CisgICAgICBpZihjZXJ0X3VzZV9yZXN1bHQgIT0gMSkgewogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgICAiY291bGQgbm90IGxvYWQgQVNOMSBjbGllbnQgY2VydGlmaWNhdGUsICIgT1NTTF9QQUNLQUdFCiAgICAgICAgICAgICAgICIgZXJyb3IgJXMsICIKQEAgLTczOCwyNyArODE1LDMxIEBACiAgICAgICBQS0NTMTIgKnAxMiA9IE5VTEw7CiAgICAgICBFVlBfUEtFWSAqcHJpOwogICAgICAgU1RBQ0tfT0YoWDUwOSkgKmNhID0gTlVMTDsKKyAgICAgIGlmKCFjZXJ0X2JpbykgeworICAgICAgICBmcCA9IEJJT19uZXcoQklPX3NfZmlsZSgpKTsKKyAgICAgICAgaWYoZnAgPT0gTlVMTCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICAgIkJJT19uZXcgcmV0dXJuIE5VTEwsICIgT1NTTF9QQUNLQUdFCisgICAgICAgICAgICAgICAgIiBlcnJvciAlcyIsCisgICAgICAgICAgICAgICAgb3NzbF9zdHJlcnJvcihFUlJfZ2V0X2Vycm9yKCksIGVycm9yX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlcnJvcl9idWZmZXIpKSApOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICAgIGZwID0gQklPX25ldyhCSU9fc19maWxlKCkpOwotICAgICAgaWYoZnAgPT0gTlVMTCkgewotICAgICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgICAiQklPX25ldyByZXR1cm4gTlVMTCwgIiBPU1NMX1BBQ0tBR0UKLSAgICAgICAgICAgICAgIiBlcnJvciAlcyIsCi0gICAgICAgICAgICAgIG9zc2xfc3RyZXJyb3IoRVJSX2dldF9lcnJvcigpLCBlcnJvcl9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVycm9yX2J1ZmZlcikpICk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgY2VydF9maWxlKSA8PSAwKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgImNvdWxkIG5vdCBvcGVuIFBLQ1MxMiBmaWxlICclcyciLCBjZXJ0X2ZpbGUpOworICAgICAgICAgIEJJT19mcmVlKGZwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgfQogCi0gICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgY2VydF9maWxlKSA8PSAwKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJjb3VsZCBub3Qgb3BlbiBQS0NTMTIgZmlsZSAnJXMnIiwgY2VydF9maWxlKTsKKyAgICAgIHAxMiA9IGQyaV9QS0NTMTJfYmlvKGNlcnRfYmlvID8gY2VydF9iaW8gOiBmcCwgTlVMTCk7CisgICAgICBpZihmcCkKICAgICAgICAgQklPX2ZyZWUoZnApOwotICAgICAgICByZXR1cm4gMDsKLSAgICAgIH0KLSAgICAgIHAxMiA9IGQyaV9QS0NTMTJfYmlvKGZwLCBOVUxMKTsKLSAgICAgIEJJT19mcmVlKGZwKTsKIAogICAgICAgaWYoIXAxMikgewotICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3IgcmVhZGluZyBQS0NTMTIgZmlsZSAnJXMnIiwgY2VydF9maWxlKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHJlYWRpbmcgUEtDUzEyIGZpbGUgJyVzJyIsCisgICAgICAgICAgICAgIGNlcnRfYmlvID8gIihtZW1vcnkgYmxvYikiIDogY2VydF9maWxlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICB9CiAKQEAgLTgzOSw4ICs5MjAsMTAgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmKCFrZXlfZmlsZSkKKyAgICBpZigoIWtleV9maWxlKSAmJiAoIWtleV9iaW8pKSB7CiAgICAgICBrZXlfZmlsZSA9IGNlcnRfZmlsZTsKKyAgICAgIGtleV9iaW8gPSBjZXJ0X2JpbzsKKyAgICB9CiAgICAgZWxzZQogICAgICAgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKGtleV90eXBlKTsKIApAQCAtODUwLDkgKzkzMywxMiBAQAogICAgICAgICBicmVhazsKICAgICAgIC8qIEZBTExUSFJPVUdIICovCiAgICAgY2FzZSBTU0xfRklMRVRZUEVfQVNOMToKLSAgICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShjdHgsIGtleV9maWxlLCBmaWxlX3R5cGUpICE9IDEpIHsKKyAgICAgIGNlcnRfdXNlX3Jlc3VsdCA9IGtleV9iaW8gPworICAgICAgICBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2JpbyhjdHgsIGtleV9iaW8sIGZpbGVfdHlwZSwga2V5X3Bhc3N3ZCkgOgorICAgICAgICBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY3R4LCBrZXlfZmlsZSwgZmlsZV90eXBlKTsKKyAgICAgIGlmKGNlcnRfdXNlX3Jlc3VsdCAhPSAxKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5IGZpbGU6ICclcycgdHlwZSAlcyIsCi0gICAgICAgICAgICAgIGtleV9maWxlLCBrZXlfdHlwZT9rZXlfdHlwZToiUEVNIik7CisgICAgICAgICAgICAgIGtleV9maWxlP2tleV9maWxlOiIobWVtb3J5IGJsb2IpIiwga2V5X3R5cGU/a2V5X3R5cGU6IlBFTSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtMTAxMiwyNCArMTA5OCwxNCBAQAogICovCiBzdGF0aWMgaW50IEN1cmxfb3NzbF9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLSAgY2hhciAqa2V5bG9nX2ZpbGVfbmFtZTsKLSNlbmRpZgotCiAgIE9QRU5TU0xfbG9hZF9idWlsdGluX21vZHVsZXMoKTsKIAogI2lmZGVmIFVTRV9PUEVOU1NMX0VOR0lORQogICBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMoKTsKICNlbmRpZgogCi0gIC8qIE9QRU5TU0xfY29uZmlnKE5VTEwpOyBpcyAic3Ryb25nbHkgcmVjb21tZW5kZWQiIHRvIHVzZSBidXQgdW5mb3J0dW5hdGVseQotICAgICB0aGF0IGZ1bmN0aW9uIG1ha2VzIGFuIGV4aXQoKSBjYWxsIG9uIHdyb25nbHkgZm9ybWF0dGVkIGNvbmZpZyBmaWxlcwotICAgICB3aGljaCBtYWtlcyBpdCBoYXJkIHRvIHVzZSBpbiBzb21lIHNpdHVhdGlvbnMuIE9QRU5TU0xfY29uZmlnKCkgaXRzZWxmCi0gICAgIGNhbGxzIENPTkZfbW9kdWxlc19sb2FkX2ZpbGUoKSBhbmQgd2UgdXNlIHRoYXQgaW5zdGVhZCBhbmQgd2UgaWdub3JlCi0gICAgIGl0cyByZXR1cm4gY29kZSEgKi8KLQotICAvKiBDT05GX01GTEFHU19ERUZBVUxUX1NFQ1RJT04gaW50cm9kdWNlZCBzb21lIHRpbWUgYmV0d2VlbiAwLjkuOGIgYW5kCi0gICAgIDAuOS44ZSAqLworLyogQ09ORl9NRkxBR1NfREVGQVVMVF9TRUNUSU9OIHdhcyBpbnRyb2R1Y2VkIHNvbWUgdGltZSBiZXR3ZWVuIDAuOS44YiBhbmQKKyAgIDAuOS44ZSAqLwogI2lmbmRlZiBDT05GX01GTEFHU19ERUZBVUxUX1NFQ1RJT04KICNkZWZpbmUgQ09ORl9NRkxBR1NfREVGQVVMVF9TRUNUSU9OIDB4MAogI2VuZGlmCkBAIC0xMDU0LDI2ICsxMTMwLDcgQEAKICAgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKTsKICNlbmRpZgogCi0jaWZkZWYgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLSAgaWYoIWtleWxvZ19maWxlX2ZwKSB7Ci0gICAga2V5bG9nX2ZpbGVfbmFtZSA9IGN1cmxfZ2V0ZW52KCJTU0xLRVlMT0dGSUxFIik7Ci0gICAgaWYoa2V5bG9nX2ZpbGVfbmFtZSkgewotICAgICAga2V5bG9nX2ZpbGVfZnAgPSBmb3BlbihrZXlsb2dfZmlsZV9uYW1lLCBGT1BFTl9BUFBFTkRURVhUKTsKLSAgICAgIGlmKGtleWxvZ19maWxlX2ZwKSB7Ci0jaWZkZWYgV0lOMzIKLSAgICAgICAgaWYoc2V0dmJ1ZihrZXlsb2dfZmlsZV9mcCwgTlVMTCwgX0lPTkJGLCAwKSkKLSNlbHNlCi0gICAgICAgIGlmKHNldHZidWYoa2V5bG9nX2ZpbGVfZnAsIE5VTEwsIF9JT0xCRiwgNDA5NikpCi0jZW5kaWYKLSAgICAgICAgewotICAgICAgICAgIGZjbG9zZShrZXlsb2dfZmlsZV9mcCk7Ci0gICAgICAgICAga2V5bG9nX2ZpbGVfZnAgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBDdXJsX3NhZmVmcmVlKGtleWxvZ19maWxlX25hbWUpOwotICAgIH0KLSAgfQotI2VuZGlmCisgIEN1cmxfdGxzX2tleWxvZ19vcGVuKCk7CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgZXh0cmEgZGF0YSBpbmRleGVzICovCiAgIGlmKG9zc2xfZ2V0X3NzbF9jb25uX2luZGV4KCkgPCAwIHx8IG9zc2xfZ2V0X3NzbF9zb2NraW5kZXhfaW5kZXgoKSA8IDApCkBAIC0xMTE2LDEyICsxMTczLDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBFTkFCTEVfU1NMS0VZTE9HRklMRQotICBpZihrZXlsb2dfZmlsZV9mcCkgewotICAgIGZjbG9zZShrZXlsb2dfZmlsZV9mcCk7Ci0gICAga2V5bG9nX2ZpbGVfZnAgPSBOVUxMOwotICB9Ci0jZW5kaWYKKyAgQ3VybF90bHNfa2V5bG9nX2Nsb3NlKCk7CiB9CiAKIC8qCkBAIC0xMjY2LDE5ICsxMzE4LDE5IEBACiAgIHJldHVybiBsaXN0OwogfQogCi0KIHN0YXRpYyB2b2lkIG9zc2xfY2xvc2Uoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiB7Ci0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkgewotICAgICh2b2lkKVNTTF9zaHV0ZG93bihCQUNLRU5ELT5oYW5kbGUpOwotICAgIFNTTF9zZXRfY29ubmVjdF9zdGF0ZShCQUNLRU5ELT5oYW5kbGUpOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGlmKGJhY2tlbmQtPmhhbmRsZSkgeworICAgICh2b2lkKVNTTF9zaHV0ZG93bihiYWNrZW5kLT5oYW5kbGUpOworICAgIFNTTF9zZXRfY29ubmVjdF9zdGF0ZShiYWNrZW5kLT5oYW5kbGUpOwogCi0gICAgU1NMX2ZyZWUoQkFDS0VORC0+aGFuZGxlKTsKLSAgICBCQUNLRU5ELT5oYW5kbGUgPSBOVUxMOworICAgIFNTTF9mcmVlKGJhY2tlbmQtPmhhbmRsZSk7CisgICAgYmFja2VuZC0+aGFuZGxlID0gTlVMTDsKICAgfQotICBpZihCQUNLRU5ELT5jdHgpIHsKLSAgICBTU0xfQ1RYX2ZyZWUoQkFDS0VORC0+Y3R4KTsKLSAgICBCQUNLRU5ELT5jdHggPSBOVUxMOworICBpZihiYWNrZW5kLT5jdHgpIHsKKyAgICBTU0xfQ1RYX2ZyZWUoYmFja2VuZC0+Y3R4KTsKKyAgICBiYWNrZW5kLT5jdHggPSBOVUxMOwogICB9CiB9CiAKQEAgLTEyODgsNyArMTM0MCw5IEBACiBzdGF0aWMgdm9pZCBDdXJsX29zc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogICBvc3NsX2Nsb3NlKCZjb25uLT5zc2xbc29ja2luZGV4XSk7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBvc3NsX2Nsb3NlKCZjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XSk7CisjZW5kaWYKIH0KIAogLyoKQEAgLTEzMDcsNiArMTM2MSw3IEBACiAgIGludCBidWZmc2l6ZTsKICAgaW50IGVycjsKICAgYm9vbCBkb25lID0gRkFMU0U7CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfRlRQCiAgIC8qIFRoaXMgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gdGhlIHByb2Z0cGQgc2VydmVyLCBhbmQgdGhlIG1vZF90bHMgY29kZQpAQCAtMTMxNSwxMCArMTM3MCwxMCBAQAogICAgICB3ZSBkbyBub3Qgc2VuZCBvbmUuIExldCdzIGhvcGUgb3RoZXIgc2VydmVycyBkbyB0aGUgc2FtZS4uLiAqLwogCiAgIGlmKGRhdGEtPnNldC5mdHBfY2NjID09IENVUkxGVFBTU0xfQ0NDX0FDVElWRSkKLSAgICAgICh2b2lkKVNTTF9zaHV0ZG93bihCQUNLRU5ELT5oYW5kbGUpOworICAgICAgKHZvaWQpU1NMX3NodXRkb3duKGJhY2tlbmQtPmhhbmRsZSk7CiAjZW5kaWYKIAotICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKKyAgaWYoYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgYnVmZnNpemUgPSAoaW50KXNpemVvZihidWYpOwogICAgIHdoaWxlKCFkb25lKSB7CiAgICAgICBpbnQgd2hhdCA9IFNPQ0tFVF9SRUFEQUJMRShjb25uLT5zb2NrW3NvY2tpbmRleF0sCkBAIC0xMzI4LDggKzEzODMsOCBAQAogCiAgICAgICAgIC8qIFNvbWV0aGluZyB0byByZWFkLCBsZXQncyBkbyBpdCBhbmQgaG9wZSB0aGF0IGl0IGlzIHRoZSBjbG9zZQogICAgICAgICAgICBub3RpZnkgYWxlcnQgZnJvbSB0aGUgc2VydmVyICovCi0gICAgICAgIG5yZWFkID0gKHNzaXplX3QpU1NMX3JlYWQoQkFDS0VORC0+aGFuZGxlLCBidWYsIGJ1ZmZzaXplKTsKLSAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIChpbnQpbnJlYWQpOworICAgICAgICBucmVhZCA9IChzc2l6ZV90KVNTTF9yZWFkKGJhY2tlbmQtPmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7CisgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCAoaW50KW5yZWFkKTsKIAogICAgICAgICBzd2l0Y2goZXJyKSB7CiAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6IC8qIHRoaXMgaXMgbm90IGFuIGVycm9yICovCkBAIC0xMzc0LDcgKzE0MjksNyBAQAogCiAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKICNpZmRlZiBIQVZFX1NTTF9HRVRfU0hVVERPV04KLSAgICAgIHN3aXRjaChTU0xfZ2V0X3NodXRkb3duKEJBQ0tFTkQtPmhhbmRsZSkpIHsKKyAgICAgIHN3aXRjaChTU0xfZ2V0X3NodXRkb3duKGJhY2tlbmQtPmhhbmRsZSkpIHsKICAgICAgIGNhc2UgU1NMX1NFTlRfU0hVVERPV046CiAgICAgICAgIGluZm9mKGRhdGEsICJTU0xfZ2V0X3NodXRkb3duKCkgcmV0dXJuZWQgU1NMX1NFTlRfU0hVVERPV05cbiIpOwogICAgICAgICBicmVhazsKQEAgLTEzODksOCArMTQ0NCw4IEBACiAjZW5kaWYKICAgICB9CiAKLSAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOwotICAgIEJBQ0tFTkQtPmhhbmRsZSA9IE5VTEw7CisgICAgU1NMX2ZyZWUoYmFja2VuZC0+aGFuZGxlKTsKKyAgICBiYWNrZW5kLT5oYW5kbGUgPSBOVUxMOwogICB9CiAgIHJldHVybiByZXR2YWw7CiB9CkBAIC0xNTE0LDEwICsxNTY5LDE2IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBib29sIGROU05hbWUgPSBGQUxTRTsgLyogaWYgYSBkTlNOYW1lIGZpZWxkIGV4aXN0cyBpbiB0aGUgY2VydCAqLwogICBib29sIGlQQWRkcmVzcyA9IEZBTFNFOyAvKiBpZiBhIGlQQWRkcmVzcyBmaWVsZCBleGlzdHMgaW4gdGhlIGNlcnQgKi8KLSAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6Ci0gICAgY29ubi0+aG9zdC5uYW1lOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPworICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lOwogICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/CiAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZTsKKyNlbHNlCisgIC8qIGRpc2FibGVkIHByb3h5IHN1cHBvcnQgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBjb25uLT5ob3N0LmRpc3BuYW1lOworI2VuZGlmCiAKICNpZmRlZiBFTkFCTEVfSVBWNgogICBpZihjb25uLT5iaXRzLmlwdjZfaXAgJiYKQEAgLTE1MzYsOCArMTU5NywxMyBAQAogICBhbHRuYW1lcyA9IFg1MDlfZ2V0X2V4dF9kMmkoc2VydmVyX2NlcnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBOVUxMLCBOVUxMKTsKIAogICBpZihhbHRuYW1lcykgeworI2lmZGVmIE9QRU5TU0xfSVNfQk9SSU5HU1NMCisgICAgc2l6ZV90IG51bWFsdHM7CisgICAgc2l6ZV90IGk7CisjZWxzZQogICAgIGludCBudW1hbHRzOwogICAgIGludCBpOworI2VuZGlmCiAgICAgYm9vbCBkbnNtYXRjaGVkID0gRkFMU0U7CiAgICAgYm9vbCBpcG1hdGNoZWQgPSBGQUxTRTsKIApAQCAtMTU2NywxMSArMTYzMywxMCBAQAogICAgICAgICAgICAgIGFzc3VtZWQgdGhhdCB0aGUgZGF0YSByZXR1cm5lZCBieSBBU04xX1NUUklOR19kYXRhKCkgaXMgbnVsbAogICAgICAgICAgICAgIHRlcm1pbmF0ZWQgb3IgZG9lcyBub3QgY29udGFpbiBlbWJlZGRlZCBudWxscy4iIEJ1dCBhbHNvIHRoYXQKICAgICAgICAgICAgICAiVGhlIGFjdHVhbCBmb3JtYXQgb2YgdGhlIGRhdGEgd2lsbCBkZXBlbmQgb24gdGhlIGFjdHVhbCBzdHJpbmcKLSAgICAgICAgICAgICB0eXBlIGl0c2VsZjogZm9yIGV4YW1wbGUgZm9yIGFuZCBJQTVTdHJpbmcgdGhlIGRhdGEgd2lsbCBiZSBBU0NJSSIKKyAgICAgICAgICAgICB0eXBlIGl0c2VsZjogZm9yIGV4YW1wbGUgZm9yIGFuIElBNVN0cmluZyB0aGUgZGF0YSB3aWxsIGJlIEFTQ0lJIgogCi0gICAgICAgICAgICAgR2lzbGUgcmVzZWFyY2hlZCB0aGUgT3BlblNTTCBzb3VyY2VzOgotICAgICAgICAgICAgICJJIGNoZWNrZWQgdGhlIDAuOS42IGFuZCAwLjkuOCBzb3VyY2VzIGJlZm9yZSBteSBwYXRjaCBhbmQKLSAgICAgICAgICAgICBpdCBhbHdheXMgMC10ZXJtaW5hdGVzIGFuIElBNVN0cmluZy4iCisgICAgICAgICAgICAgSXQgaGFzIGJlZW4gaG93ZXZlciB2ZXJpZmllZCB0aGF0IGluIDAuOS42IGFuZCAwLjkuNywgSUE1U3RyaW5nCisgICAgICAgICAgICAgaXMgYWx3YXlzIG51bGwtdGVybWluYXRlZC4KICAgICAgICAgICAqLwogICAgICAgICAgIGlmKChhbHRsZW4gPT0gc3RybGVuKGFsdHB0cikpICYmCiAgICAgICAgICAgICAgLyogaWYgdGhpcyBpc24ndCB0cnVlLCB0aGVyZSB3YXMgYW4gZW1iZWRkZWQgemVybyBpbiB0aGUgbmFtZQpAQCAtMTYzNSw4ICsxNzAwLDcgQEAKICAgICAgIC8qIEluIE9wZW5TU0wgMC45LjdkIGFuZCBlYXJsaWVyLCBBU04xX1NUUklOR190b19VVEY4IGZhaWxzIGlmIHRoZSBpbnB1dAogICAgICAgICAgaXMgYWxyZWFkeSBVVEYtOCBlbmNvZGVkLiBXZSBjaGVjayBmb3IgdGhpcyBjYXNlIGFuZCBjb3B5IHRoZSByYXcKICAgICAgICAgIHN0cmluZyBtYW51YWxseSB0byBhdm9pZCB0aGUgcHJvYmxlbS4gVGhpcyBjb2RlIGNhbiBiZSBtYWRlCi0gICAgICAgICBjb25kaXRpb25hbCBpbiB0aGUgZnV0dXJlIHdoZW4gT3BlblNTTCBoYXMgYmVlbiBmaXhlZC4gV29yay1hcm91bmQKLSAgICAgICAgIGJyb3VnaHQgYnkgQWxleGlzIFMuIEwuIENhcnZhbGhvLiAqLworICAgICAgICAgY29uZGl0aW9uYWwgaW4gdGhlIGZ1dHVyZSB3aGVuIE9wZW5TU0wgaGFzIGJlZW4gZml4ZWQuICovCiAgICAgICBpZih0bXApIHsKICAgICAgICAgaWYoQVNOMV9TVFJJTkdfdHlwZSh0bXApID09IFZfQVNOMV9VVEY4U1RSSU5HKSB7CiAgICAgICAgICAgaiA9IEFTTjFfU1RSSU5HX2xlbmd0aCh0bXApOwpAQCAtMTcwNiwxMyArMTc3MCwxMyBAQAogICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KICAgT0NTUF9SRVNQT05TRSAqcnNwID0gTlVMTDsKICAgT0NTUF9CQVNJQ1JFU1AgKmJyID0gTlVMTDsKICAgWDUwOV9TVE9SRSAgICAgKnN0ID0gTlVMTDsKICAgU1RBQ0tfT0YoWDUwOSkgKmNoID0gTlVMTDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogCi0gIGxvbmcgbGVuID0gU1NMX2dldF90bHNleHRfc3RhdHVzX29jc3BfcmVzcChCQUNLRU5ELT5oYW5kbGUsICZzdGF0dXMpOworICBsb25nIGxlbiA9IFNTTF9nZXRfdGxzZXh0X3N0YXR1c19vY3NwX3Jlc3AoYmFja2VuZC0+aGFuZGxlLCAmc3RhdHVzKTsKIAogICBpZighc3RhdHVzKSB7CiAgICAgZmFpbGYoZGF0YSwgIk5vIE9DU1AgcmVzcG9uc2UgcmVjZWl2ZWQiKTsKQEAgLTE3NDIsOCArMTgwNiw4IEBACiAgICAgZ290byBlbmQ7CiAgIH0KIAotICBjaCA9IFNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIHN0ID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShCQUNLRU5ELT5jdHgpOworICBjaCA9IFNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluKGJhY2tlbmQtPmhhbmRsZSk7CisgIHN0ID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpOwogCiAjaWYgKChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDw9IDB4MTAwMDIwMWZMKSAvKiBGaXhlZCBhZnRlciAxLjAuMmEgKi8gfHwgXAogICAgICAoZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTgxOSw3ICsxODgzLDggQEAKICAgfQogCiBlbmQ6Ci0gIGlmKGJyKSBPQ1NQX0JBU0lDUkVTUF9mcmVlKGJyKTsKKyAgaWYoYnIpCisgICAgT0NTUF9CQVNJQ1JFU1BfZnJlZShicik7CiAgIE9DU1BfUkVTUE9OU0VfZnJlZShyc3ApOwogCiAgIHJldHVybiByZXN1bHQ7CkBAIC0yMTU2LDkgKzIyMjEsMTAwIEBACiB9CiAjZW5kaWYKIAorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMKSAvKiAxLjEuMCAqLwogc3RhdGljIENVUkxjb2RlCi1zZXRfc3NsX3ZlcnNpb25fbWluX21heChsb25nICpjdHhfb3B0aW9ucywgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3NldF9zc2xfdmVyc2lvbl9taW5fbWF4KFNTTF9DVFggKmN0eCwgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICAvKiBmaXJzdCwgVExTIG1pbiB2ZXJzaW9uLi4uICovCisgIGxvbmcgY3VybF9zc2xfdmVyc2lvbl9taW4gPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbik7CisgIGxvbmcgY3VybF9zc2xfdmVyc2lvbl9tYXg7CisKKyAgLyogY29udmVydCBjVVJMIG1pbiBTU0wgdmVyc2lvbiBvcHRpb24gdG8gT3BlblNTTCBjb25zdGFudCAqLworI2lmIGRlZmluZWQoT1BFTlNTTF9JU19CT1JJTkdTU0wpIHx8IGRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisgIHVpbnQxNl90IG9zc2xfc3NsX3ZlcnNpb25fbWluID0gMDsKKyAgdWludDE2X3Qgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSAwOworI2Vsc2UKKyAgbG9uZyBvc3NsX3NzbF92ZXJzaW9uX21pbiA9IDA7CisgIGxvbmcgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSAwOworI2VuZGlmCisgIHN3aXRjaChjdXJsX3NzbF92ZXJzaW9uX21pbikgeworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOiAvKiBUTFMgMS54ICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV9WRVJTSU9OOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV8xX1ZFUlNJT047CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9taW4gPSBUTFMxXzJfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworI2lmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV8zX1ZFUlNJT047CisgICAgICBicmVhazsKKyNlbmRpZgorICB9CisKKyAgLyogQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgbWVhbnMgdGhhdCBubyBvcHRpb24gd2FzIHNlbGVjdGVkLgorICAgICBXZSBkb24ndCB3YW50IHRvIHBhc3MgMCB0byBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbiBhcworICAgICBpdCB3b3VsZCBlbmFibGUgYWxsIHZlcnNpb25zIGRvd24gdG8gdGhlIGxvd2VzdCBzdXBwb3J0ZWQgYnkKKyAgICAgdGhlIGxpYnJhcnkuCisgICAgIFNvIHdlIHNraXAgdGhpcywgYW5kIHN0YXkgd2l0aCB0aGUgT1MgZGVmYXVsdAorICAqLworICBpZihjdXJsX3NzbF92ZXJzaW9uX21pbiAhPSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCkgeworICAgIGlmKCFTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihjdHgsIG9zc2xfc3NsX3ZlcnNpb25fbWluKSkgeworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgfQorCisgIC8qIC4uLiB0aGVuLCBUTFMgbWF4IHZlcnNpb24gKi8KKyAgY3VybF9zc2xfdmVyc2lvbl9tYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOworCisgIC8qIGNvbnZlcnQgY1VSTCBtYXggU1NMIHZlcnNpb24gb3B0aW9uIHRvIE9wZW5TU0wgY29uc3RhbnQgKi8KKyAgc3dpdGNoKGN1cmxfc3NsX3ZlcnNpb25fbWF4KSB7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzA6CisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IFRMUzFfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSBUTFMxXzFfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8yOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSBUTFMxXzJfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworI2lmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzM6CisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IFRMUzFfM19WRVJTSU9OOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORTogIC8qIG5vbmUgc2VsZWN0ZWQgKi8KKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDogIC8qIG1heCBzZWxlY3RlZCAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbiBzdGF0ZXMgdGhhdDoKKyAgICAgICAgc2V0dGluZyB0aGUgbWF4aW11bSB0byAwIHdpbGwgZW5hYmxlCisgICAgICAgIHByb3RvY29sIHZlcnNpb25zIHVwIHRvIHRoZSBoaWdoZXN0IHZlcnNpb24KKyAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5ICovCisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IDA7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmKCFTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihjdHgsIG9zc2xfc3NsX3ZlcnNpb25fbWF4KSkgeworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9JU19CT1JJTkdTU0wKK3R5cGVkZWYgdWludDMyX3QgY3R4X29wdGlvbl90OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBjdHhfb3B0aW9uX3Q7CisjZW5kaWYKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwpIC8qIDEuMS4wICovCitzdGF0aWMgQ1VSTGNvZGUKK3NldF9zc2xfdmVyc2lvbl9taW5fbWF4X2xlZ2FjeShjdHhfb3B0aW9uX3QgKmN0eF9vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMTAwRkwpIHx8ICFkZWZpbmVkKFRMUzFfM19WRVJTSU9OKQogICAvKiBjb252b2x1dGVkICNpZiBjb25kaXRpb24ganVzdCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyBvbiB1bnVzZWQKQEAgLTIxNzMsNyArMjMyOSw3IEBACiAjaWZkZWYgVExTMV8zX1ZFUlNJT04KICAgICB7CiAgICAgICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgICAgIFNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uKEJBQ0tFTkQtPmN0eCwgVExTMV8zX1ZFUlNJT04pOworICAgICAgU1NMX0NUWF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oYmFja2VuZC0+Y3R4LCBUTFMxXzNfVkVSU0lPTik7CiAgICAgICAqY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzI7CiAgICAgfQogI2Vsc2UKQEAgLTIyMzAsNiArMjM4Niw3IEBACiAgIH0KICAgcmV0dXJuIENVUkxFX09LOwogfQorI2VuZGlmCiAKIC8qIFRoZSAibmV3IHNlc3Npb24iIGNhbGxiYWNrIG11c3QgcmV0dXJuIHplcm8gaWYgdGhlIHNlc3Npb24gY2FuIGJlIHJlbW92ZWQKICAqIG9yIG5vbi16ZXJvIGlmIHRoZSBzZXNzaW9uIGhhcyBiZWVuIHB1dCBpbnRvIHRoZSBzZXNzaW9uIGNhY2hlLgpAQCAtMjI5NiwzMCArMjQ1Myw0MyBAQAogICBYNTA5X0xPT0tVUCAqbG9va3VwID0gTlVMTDsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBsb25nIGN0eF9vcHRpb25zID0gMDsKKyAgY3R4X29wdGlvbl90IGN0eF9vcHRpb25zID0gMDsKKwogI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKICAgYm9vbCBzbmk7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CisjZWxzZQorICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisjZW5kaWYKKwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBpbjZfYWRkciBhZGRyOwogI2Vsc2UKICAgc3RydWN0IGluX2FkZHIgYWRkcjsKICNlbmRpZgogI2VuZGlmCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KICAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbHNlCisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbmRpZgogICBjb25zdCBsb25nIGludCBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKICNpZmRlZiBVU0VfVExTX1NSUAogICBjb25zdCBlbnVtIENVUkxfVExTQVVUSCBzc2xfYXV0aHR5cGUgPSBTU0xfU0VUX09QVElPTihhdXRodHlwZSk7CiAjZW5kaWYKICAgY2hhciAqIGNvbnN0IHNzbF9jZXJ0ID0gU1NMX1NFVF9PUFRJT04oY2VydCk7CisgIGNvbnN0IHN0cnVjdCBjdXJsX2Jsb2IgKnNzbF9jZXJ0X2Jsb2IgPSBTU0xfU0VUX09QVElPTihjZXJ0X2Jsb2IpOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NlcnRfdHlwZSA9IFNTTF9TRVRfT1BUSU9OKGNlcnRfdHlwZSk7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7CiAgIGNvbnN0IGJvb2wgdmVyaWZ5cGVlciA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKTsKICAgY29uc3QgY2hhciAqIGNvbnN0IHNzbF9jcmxmaWxlID0gU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSk7CiAgIGNoYXIgZXJyb3JfYnVmZmVyWzI1Nl07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgYm9vbCBpbXBvcnRlZF9uYXRpdmVfY2EgPSBmYWxzZTsKIAogICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8xID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwogCkBAIC0yMzc4LDI1ICsyNTQ4LDI1IEBACiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKLSAgaWYoQkFDS0VORC0+Y3R4KQotICAgIFNTTF9DVFhfZnJlZShCQUNLRU5ELT5jdHgpOwotICBCQUNLRU5ELT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKKyAgaWYoYmFja2VuZC0+Y3R4KQorICAgIFNTTF9DVFhfZnJlZShiYWNrZW5kLT5jdHgpOworICBiYWNrZW5kLT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKIAotICBpZighQkFDS0VORC0+Y3R4KSB7CisgIGlmKCFiYWNrZW5kLT5jdHgpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0OiAlcyIsCiAgICAgICAgICAgb3NzbF9zdHJlcnJvcihFUlJfcGVla19lcnJvcigpLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKSk7CiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KIAogI2lmZGVmIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUwotICBTU0xfQ1RYX3NldF9tb2RlKEJBQ0tFTkQtPmN0eCwgU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTKTsKKyAgU1NMX0NUWF9zZXRfbW9kZShiYWNrZW5kLT5jdHgsIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUyk7CiAjZW5kaWYKIAogI2lmZGVmIFNTTF9DVFJMX1NFVF9NU0dfQ0FMTEJBQ0sKICAgaWYoZGF0YS0+c2V0LmZkZWJ1ZyAmJiBkYXRhLT5zZXQudmVyYm9zZSkgewogICAgIC8qIHRoZSBTU0wgdHJhY2UgY2FsbGJhY2sgaXMgb25seSB1c2VkIGZvciB2ZXJib3NlIGxvZ2dpbmcgKi8KLSAgICBTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2soQkFDS0VORC0+Y3R4LCBzc2xfdGxzX3RyYWNlKTsKLSAgICBTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2tfYXJnKEJBQ0tFTkQtPmN0eCwgY29ubik7CisgICAgU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrKGJhY2tlbmQtPmN0eCwgc3NsX3Rsc190cmFjZSk7CisgICAgU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrX2FyZyhiYWNrZW5kLT5jdHgsIGNvbm4pOwogICB9CiAjZW5kaWYKIApAQCAtMjQ1OSw1NSArMjYyOSw3MyBAQAogI2VuZGlmCiAKICAgc3dpdGNoKHNzbF92ZXJzaW9uKSB7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MjsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjE7Ci0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8xOwotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8yOwotI2lmZGVmIFRMUzFfM19WRVJTSU9OCi0gICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzM7CisgICAgLyogIi0tc3NsdjIiIG9wdGlvbiBtZWFucyBTU0x2MiBvbmx5LCBkaXNhYmxlIGFsbCBvdGhlcnMgKi8KKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMIC8qIDEuMS4wICovCisgICAgICBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDJfVkVSU0lPTik7CisgICAgICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDJfVkVSU0lPTik7CisjZWxzZQorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOworICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOworIyAgaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzE7CisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyMgICAgaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworIyAgICBlbmRpZgorIyAgZW5kaWYKICNlbmRpZgotI2VuZGlmCi0gICAgYnJlYWs7CisgICAgICBicmVhazsKIAotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKLSAgICAvKiBhc2tpbmcgZm9yIGFueSBUTFMgdmVyc2lvbiBhcyB0aGUgbWluaW11bSwgbWVhbnMgbm8gU1NMIHZlcnNpb25zCi0gICAgICAgYWxsb3dlZCAqLwotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MjsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjM7Ci0gICAgcmVzdWx0ID0gc2V0X3NzbF92ZXJzaW9uX21pbl9tYXgoJmN0eF9vcHRpb25zLCBjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKLSAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGJyZWFrOwotCi0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOgotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MzsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjE7Ci0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8xOwotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8yOwotI2lmZGVmIFRMUzFfM19WRVJTSU9OCi0gICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzM7CisgICAgLyogIi0tc3NsdjMiIG9wdGlvbiBtZWFucyBTU0x2MyBvbmx5LCBkaXNhYmxlIGFsbCBvdGhlcnMgKi8KKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMIC8qIDEuMS4wICovCisgICAgICBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDNfVkVSU0lPTik7CisgICAgICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDNfVkVSU0lPTik7CisjZWxzZQorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYyOworICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOworIyAgaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzE7CisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyMgICAgaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworIyAgICBlbmRpZgorIyAgZW5kaWYKICNlbmRpZgotI2VuZGlmCi0gICAgYnJlYWs7CisgICAgICBicmVhazsKIAotICBkZWZhdWx0OgotICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIC8qICItLXRsc3Y8eC55PiIgb3B0aW9ucyBtZWFuIFRMUyA+PSB2ZXJzaW9uIDx4Lnk+ICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MTogLyogVExTID49IHZlcnNpb24gMS4wICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDogLyogVExTID49IHZlcnNpb24gMS4wICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMTogLyogVExTID49IHZlcnNpb24gMS4xICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjogLyogVExTID49IHZlcnNpb24gMS4yICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzogLyogVExTID49IHZlcnNpb24gMS4zICovCisgICAgICAvKiBhc2tpbmcgZm9yIGFueSBUTFMgdmVyc2lvbiBhcyB0aGUgbWluaW11bSwgbWVhbnMgbm8gU1NMIHZlcnNpb25zCisgICAgICAgIGFsbG93ZWQgKi8KKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MjsKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MzsKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMKSAvKiAxLjEuMCAqLworICAgICAgcmVzdWx0ID0gc2V0X3NzbF92ZXJzaW9uX21pbl9tYXgoYmFja2VuZC0+Y3R4LCBjb25uKTsKKyNlbHNlCisgICAgICByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heF9sZWdhY3koJmN0eF9vcHRpb25zLCBjb25uLCBzb2NraW5kZXgpOworI2VuZGlmCisgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKLSAgU1NMX0NUWF9zZXRfb3B0aW9ucyhCQUNLRU5ELT5jdHgsIGN0eF9vcHRpb25zKTsKKyAgU1NMX0NUWF9zZXRfb3B0aW9ucyhiYWNrZW5kLT5jdHgsIGN0eF9vcHRpb25zKTsKIAogI2lmZGVmIEhBU19OUE4KICAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX25wbikKLSAgICBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihCQUNLRU5ELT5jdHgsIHNlbGVjdF9uZXh0X3Byb3RvX2NiLCBjb25uKTsKKyAgICBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihiYWNrZW5kLT5jdHgsIHNlbGVjdF9uZXh0X3Byb3RvX2NiLCBjb25uKTsKICNlbmRpZgogCiAjaWZkZWYgSEFTX0FMUE4KQEAgLTI1MTYsOCArMjcwNCwxMSBAQAogICAgIHVuc2lnbmVkIGNoYXIgcHJvdG9jb2xzWzEyOF07CiAKICNpZmRlZiBVU0VfTkdIVFRQMgotICAgIGlmKGRhdGEtPnNldC5odHRwdmVyc2lvbiA+PSBDVVJMX0hUVFBfVkVSU0lPTl8yICYmCi0gICAgICAgKCFTU0xfSVNfUFJPWFkoKSB8fCAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpKSB7CisgICAgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID49IENVUkxfSFRUUF9WRVJTSU9OXzIKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgJiYgKCFTU0xfSVNfUFJPWFkoKSB8fCAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpCisjZW5kaWYKKyAgICAgICkgewogICAgICAgcHJvdG9jb2xzW2N1cisrXSA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU47CiAKICAgICAgIG1lbWNweSgmcHJvdG9jb2xzW2N1cl0sIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCwKQEAgLTI1MzUsMTQgKzI3MjYsMzcgQEAKICAgICAvKiBleHBlY3RzIGxlbmd0aCBwcmVmaXhlZCBwcmVmZXJlbmNlIG9yZGVyZWQgbGlzdCBvZiBwcm90b2NvbHMgaW4gd2lyZQogICAgICAqIGZvcm1hdAogICAgICAqLwotICAgIFNTTF9DVFhfc2V0X2FscG5fcHJvdG9zKEJBQ0tFTkQtPmN0eCwgcHJvdG9jb2xzLCBjdXIpOworICAgIFNTTF9DVFhfc2V0X2FscG5fcHJvdG9zKGJhY2tlbmQtPmN0eCwgcHJvdG9jb2xzLCBjdXIpOwogICB9CiAjZW5kaWYKIAotICBpZihzc2xfY2VydCB8fCBzc2xfY2VydF90eXBlKSB7Ci0gICAgaWYoIWNlcnRfc3R1ZmYoY29ubiwgQkFDS0VORC0+Y3R4LCBzc2xfY2VydCwgc3NsX2NlcnRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpLCBTU0xfU0VUX09QVElPTihrZXlfdHlwZSksCi0gICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpKSB7CisgIGlmKHNzbF9jZXJ0IHx8IHNzbF9jZXJ0X2Jsb2IgfHwgc3NsX2NlcnRfdHlwZSkgeworICAgIEJJTyAqc3NsX2NlcnRfYmlvID0gTlVMTDsKKyAgICBCSU8gKnNzbF9rZXlfYmlvID0gTlVMTDsKKyAgICBpbnQgcmVzdWx0X2NlcnRfc3R1ZmY7CisgICAgaWYoc3NsX2NlcnRfYmxvYikgeworICAgICAgLyogdGhlIHR5cGVjYXN0IG9mIGJsb2ItPmxlbiBpcyBmaW5lIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gbmV2ZXIgYmUKKyAgICAgICAgIGxhcmdlciB0aGFuIENVUkxfTUFYX0lOUFVUX0xFTkdUSCAqLworICAgICAgc3NsX2NlcnRfYmlvID0gQklPX25ld19tZW1fYnVmKHNzbF9jZXJ0X2Jsb2ItPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzc2xfY2VydF9ibG9iLT5sZW4pOworICAgICAgaWYoIXNzbF9jZXJ0X2JpbykKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICB9CisgICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5X2Jsb2IpKSB7CisgICAgICBzc2xfa2V5X2JpbyA9IEJJT19uZXdfbWVtX2J1ZihTU0xfU0VUX09QVElPTihrZXlfYmxvYiktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KVNTTF9TRVRfT1BUSU9OKGtleV9ibG9iKS0+bGVuKTsKKyAgICAgIGlmKCFzc2xfa2V5X2JpbykKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICB9CisgICAgcmVzdWx0X2NlcnRfc3R1ZmYgPSBjZXJ0X3N0dWZmKGNvbm4sIGJhY2tlbmQtPmN0eCwKKyAgICAgICAgICAgICAgICAgICBzc2xfY2VydCwgc3NsX2NlcnRfYmlvLCBzc2xfY2VydF90eXBlLAorICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSksIHNzbF9rZXlfYmlvLAorICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV90eXBlKSwgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpOworICAgIGlmKHNzbF9jZXJ0X2JpbykKKyAgICAgIEJJT19mcmVlKHNzbF9jZXJ0X2Jpbyk7CisgICAgaWYoc3NsX2tleV9iaW8pCisgICAgICBCSU9fZnJlZShzc2xfa2V5X2Jpbyk7CisgICAgaWYoIXJlc3VsdF9jZXJ0X3N0dWZmKSB7CiAgICAgICAvKiBmYWlsZigpIGlzIGFscmVhZHkgZG9uZSBpbiBjZXJ0X3N0dWZmKCkgKi8KICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CiAgICAgfQpAQCAtMjU1Miw3ICsyNzY2LDcgQEAKICAgaWYoIWNpcGhlcnMpCiAgICAgY2lwaGVycyA9IChjaGFyICopREVGQVVMVF9DSVBIRVJfU0VMRUNUSU9OOwogICBpZihjaXBoZXJzKSB7Ci0gICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KEJBQ0tFTkQtPmN0eCwgY2lwaGVycykpIHsKKyAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoYmFja2VuZC0+Y3R4LCBjaXBoZXJzKSkgewogICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCBzZXR0aW5nIGNpcGhlciBsaXN0OiAlcyIsIGNpcGhlcnMpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7CiAgICAgfQpAQCAtMjU2Myw3ICsyNzc3LDcgQEAKICAgewogICAgIGNoYXIgKmNpcGhlcnMxMyA9IFNTTF9DT05OX0NPTkZJRyhjaXBoZXJfbGlzdDEzKTsKICAgICBpZihjaXBoZXJzMTMpIHsKLSAgICAgIGlmKCFTU0xfQ1RYX3NldF9jaXBoZXJzdWl0ZXMoQkFDS0VORC0+Y3R4LCBjaXBoZXJzMTMpKSB7CisgICAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyc3VpdGVzKGJhY2tlbmQtPmN0eCwgY2lwaGVyczEzKSkgewogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHNldHRpbmcgVExTIDEuMyBjaXBoZXIgc3VpdGU6ICVzIiwgY2lwaGVyczEzKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7CiAgICAgICB9CkBAIC0yNTc0LDcgKzI3ODgsNyBAQAogCiAjaWZkZWYgSEFWRV9TU0xfQ1RYX1NFVF9QT1NUX0hBTkRTSEFLRV9BVVRICiAgIC8qIE9wZW5TU0wgMS4xLjEgcmVxdWlyZXMgY2xpZW50cyB0byBvcHQtaW4gZm9yIFBIQSAqLwotICBTU0xfQ1RYX3NldF9wb3N0X2hhbmRzaGFrZV9hdXRoKEJBQ0tFTkQtPmN0eCwgMSk7CisgIFNTTF9DVFhfc2V0X3Bvc3RfaGFuZHNoYWtlX2F1dGgoYmFja2VuZC0+Y3R4LCAxKTsKICNlbmRpZgogCiAjaWZkZWYgVVNFX1RMU19TUlAKQEAgLTI1ODMsMTggKzI3OTcsMTggQEAKIAogICAgIGluZm9mKGRhdGEsICJVc2luZyBUTFMtU1JQIHVzZXJuYW1lOiAlc1xuIiwgc3NsX3VzZXJuYW1lKTsKIAotICAgIGlmKCFTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWUoQkFDS0VORC0+Y3R4LCBzc2xfdXNlcm5hbWUpKSB7CisgICAgaWYoIVNTTF9DVFhfc2V0X3NycF91c2VybmFtZShiYWNrZW5kLT5jdHgsIHNzbF91c2VybmFtZSkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gc2V0IFNSUCB1c2VyIG5hbWUiKTsKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgfQotICAgIGlmKCFTU0xfQ1RYX3NldF9zcnBfcGFzc3dvcmQoQkFDS0VORC0+Y3R4LCBTU0xfU0VUX09QVElPTihwYXNzd29yZCkpKSB7CisgICAgaWYoIVNTTF9DVFhfc2V0X3NycF9wYXNzd29yZChiYWNrZW5kLT5jdHgsIFNTTF9TRVRfT1BUSU9OKHBhc3N3b3JkKSkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgc2V0dGluZyBTUlAgcGFzc3dvcmQiKTsKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgfQogICAgIGlmKCFTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpKSB7CiAgICAgICBpbmZvZihkYXRhLCAiU2V0dGluZyBjaXBoZXIgbGlzdCBTUlBcbiIpOwogCi0gICAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoQkFDS0VORC0+Y3R4LCAiU1JQIikpIHsKKyAgICAgIGlmKCFTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChiYWNrZW5kLT5jdHgsICJTUlAiKSkgewogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHNldHRpbmcgU1JQIGNpcGhlciBsaXN0Iik7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0lQSEVSOwogICAgICAgfQpAQCAtMjYwMiwxMSArMjgxNiwxODYgQEAKICAgfQogI2VuZGlmCiAKKworI2lmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKyAgLyogSW1wb3J0IGNlcnRpZmljYXRlcyBmcm9tIHRoZSBXaW5kb3dzIHJvb3QgY2VydGlmaWNhdGUgc3RvcmUgaWYgcmVxdWVzdGVkLgorICAgICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NTA3MTg0LworICAgICBodHRwczovL2dpdGh1Yi5jb20vZDN4MHIvU0FDSy9ibG9iL21hc3Rlci9zcmMvbmV0bGliL3NzbF9sYXllci5jI0wxMDM3CisgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjgwICovCisgIGlmKChTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikgfHwgU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpKSAmJgorICAgICAoU1NMX1NFVF9PUFRJT04obmF0aXZlX2NhX3N0b3JlKSkpIHsKKyAgICBYNTA5X1NUT1JFICpzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoYmFja2VuZC0+Y3R4KTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IENlcnRPcGVuU3lzdGVtU3RvcmVBKChIQ1JZUFRQUk9WX0xFR0FDWSlOVUxMLCAiUk9PVCIpOworCisgICAgaWYoaFN0b3JlKSB7CisgICAgICBQQ0NFUlRfQ09OVEVYVCBwQ29udGV4dCA9IE5VTEw7CisgICAgICAvKiBUaGUgYXJyYXkgb2YgZW5oYW5jZWQga2V5IHVzYWdlIE9JRHMgd2lsbCB2YXJ5IHBlciBjZXJ0aWZpY2F0ZSBhbmQgaXMKKyAgICAgICAgIGRlY2xhcmVkIG91dHNpZGUgb2YgdGhlIGxvb3Agc28gdGhhdCByYXRoZXIgdGhhbiBtYWxsb2MvZnJlZSBlYWNoCisgICAgICAgICBpdGVyYXRpb24gd2UgY2FuIGdyb3cgaXQgd2l0aCByZWFsbG9jLCB3aGVuIG5lY2Vzc2FyeS4gKi8KKyAgICAgIENFUlRfRU5IS0VZX1VTQUdFICplbmhrZXlfdXNhZ2UgPSBOVUxMOworICAgICAgRFdPUkQgZW5oa2V5X3VzYWdlX3NpemUgPSAwOworCisgICAgICAvKiBUaGlzIGxvb3AgbWFrZXMgYSBiZXN0IGVmZm9ydCB0byBpbXBvcnQgYWxsIHZhbGlkIGNlcnRpZmljYXRlcyBmcm9tCisgICAgICAgICB0aGUgTVMgcm9vdCBzdG9yZS4gSWYgYSBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgaW1wb3J0ZWQgaXQgaXMgc2tpcHBlZC4KKyAgICAgICAgICdyZXN1bHQnIGlzIHVzZWQgdG8gc3RvcmUgb25seSBoYXJkLWZhaWwgY29uZGl0aW9ucyAoc3VjaCBhcyBvdXQgb2YKKyAgICAgICAgIG1lbW9yeSkgdGhhdCBjYXVzZSBhbiBlYXJseSBicmVhay4gKi8KKyAgICAgIHJlc3VsdCA9IENVUkxFX09LOworICAgICAgZm9yKDs7KSB7CisgICAgICAgIFg1MDkgKng1MDk7CisgICAgICAgIEZJTEVUSU1FIG5vdzsKKyAgICAgICAgQllURSBrZXlfdXNhZ2VbMl07CisgICAgICAgIERXT1JEIHJlcV9zaXplOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmNvZGVkX2NlcnQ7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAgICAgICBjaGFyIGNlcnRfbmFtZVsyNTZdOworI2VuZGlmCisKKyAgICAgICAgcENvbnRleHQgPSBDZXJ0RW51bUNlcnRpZmljYXRlc0luU3RvcmUoaFN0b3JlLCBwQ29udGV4dCk7CisgICAgICAgIGlmKCFwQ29udGV4dCkKKyAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgICAgICAgaWYoIUNlcnRHZXROYW1lU3RyaW5nQShwQ29udGV4dCwgQ0VSVF9OQU1FX1NJTVBMRV9ESVNQTEFZX1RZUEUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgY2VydF9uYW1lLCBzaXplb2YoY2VydF9uYW1lKSkpIHsKKyAgICAgICAgICBzdHJjcHkoY2VydF9uYW1lLCAiVW5rbm93biIpOworICAgICAgICB9CisgICAgICAgIGluZm9mKGRhdGEsICJTU0w6IENoZWNraW5nIGNlcnQgXCIlc1wiXG4iLCBjZXJ0X25hbWUpOworI2VuZGlmCisKKyAgICAgICAgZW5jb2RlZF9jZXJ0ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwQ29udGV4dC0+cGJDZXJ0RW5jb2RlZDsKKyAgICAgICAgaWYoIWVuY29kZWRfY2VydCkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmbm93KTsKKyAgICAgICAgaWYoQ29tcGFyZUZpbGVUaW1lKCZwQ29udGV4dC0+cENlcnRJbmZvLT5Ob3RCZWZvcmUsICZub3cpID4gMCB8fAorICAgICAgICAgICBDb21wYXJlRmlsZVRpbWUoJm5vdywgJnBDb250ZXh0LT5wQ2VydEluZm8tPk5vdEFmdGVyKSA+IDApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogSWYga2V5IHVzYWdlIGV4aXN0cyBjaGVjayBmb3Igc2lnbmluZyBhdHRyaWJ1dGUgKi8KKyAgICAgICAgaWYoQ2VydEdldEludGVuZGVkS2V5VXNhZ2UocENvbnRleHQtPmR3Q2VydEVuY29kaW5nVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENvbnRleHQtPnBDZXJ0SW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3VzYWdlLCBzaXplb2Yoa2V5X3VzYWdlKSkpIHsKKyAgICAgICAgICBpZighKGtleV91c2FnZVswXSAmIENFUlRfS0VZX0NFUlRfU0lHTl9LRVlfVVNBR0UpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihHZXRMYXN0RXJyb3IoKSkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBJZiBlbmhhbmNlZCBrZXkgdXNhZ2UgZXhpc3RzIGNoZWNrIGZvciBzZXJ2ZXIgYXV0aCBhdHRyaWJ1dGUuCisgICAgICAgICAqCisgICAgICAgICAqIE5vdGUgIkluIGEgTWljcm9zb2Z0IGVudmlyb25tZW50LCBhIGNlcnRpZmljYXRlIG1pZ2h0IGFsc28gaGF2ZSBFS1UKKyAgICAgICAgICogZXh0ZW5kZWQgcHJvcGVydGllcyB0aGF0IHNwZWNpZnkgdmFsaWQgdXNlcyBmb3IgdGhlIGNlcnRpZmljYXRlLiIKKyAgICAgICAgICogVGhlIGNhbGwgYmVsb3cgY2hlY2tzIGJvdGgsIGFuZCBiZWhhdmlvciB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMKKyAgICAgICAgICogZm91bmQuIEZvciBtb3JlIGRldGFpbHMgc2VlIENlcnRHZXRFbmhhbmNlZEtleVVzYWdlIGRvYy4KKyAgICAgICAgICovCisgICAgICAgIGlmKENlcnRHZXRFbmhhbmNlZEtleVVzYWdlKHBDb250ZXh0LCAwLCBOVUxMLCAmcmVxX3NpemUpKSB7CisgICAgICAgICAgaWYocmVxX3NpemUgJiYgcmVxX3NpemUgPiBlbmhrZXlfdXNhZ2Vfc2l6ZSkgeworICAgICAgICAgICAgdm9pZCAqdG1wID0gcmVhbGxvYyhlbmhrZXlfdXNhZ2UsIHJlcV9zaXplKTsKKworICAgICAgICAgICAgaWYoIXRtcCkgeworICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZm9yIE9JRCBsaXN0Iik7CisgICAgICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbmhrZXlfdXNhZ2UgPSAoQ0VSVF9FTkhLRVlfVVNBR0UgKil0bXA7CisgICAgICAgICAgICBlbmhrZXlfdXNhZ2Vfc2l6ZSA9IHJlcV9zaXplOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmKENlcnRHZXRFbmhhbmNlZEtleVVzYWdlKHBDb250ZXh0LCAwLCBlbmhrZXlfdXNhZ2UsICZyZXFfc2l6ZSkpIHsKKyAgICAgICAgICAgIGlmKCFlbmhrZXlfdXNhZ2UtPmNVc2FnZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgLyogIklmIEdldExhc3RFcnJvciByZXR1cm5zIENSWVBUX0VfTk9UX0ZPVU5ELCB0aGUgY2VydGlmaWNhdGUgaXMKKyAgICAgICAgICAgICAgICAgZ29vZCBmb3IgYWxsIHVzZXMuIElmIGl0IHJldHVybnMgemVybywgdGhlIGNlcnRpZmljYXRlIGhhcyBubworICAgICAgICAgICAgICAgICB2YWxpZCB1c2VzLiIgKi8KKyAgICAgICAgICAgICAgaWYoR2V0TGFzdEVycm9yKCkgIT0gQ1JZUFRfRV9OT1RfRk9VTkQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgRFdPUkQgaTsKKyAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGVuaGtleV91c2FnZS0+Y1VzYWdlSWRlbnRpZmllcjsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYoIXN0cmNtcCgiMS4zLjYuMS41LjUuNy4zLjEiIC8qIE9JRCBzZXJ2ZXIgYXV0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuaGtleV91c2FnZS0+cmdwc3pVc2FnZUlkZW50aWZpZXJbaV0pKSB7CisgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZighZm91bmQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB4NTA5ID0gZDJpX1g1MDkoTlVMTCwgJmVuY29kZWRfY2VydCwgcENvbnRleHQtPmNiQ2VydEVuY29kZWQpOworICAgICAgICBpZigheDUwOSkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBUcnkgdG8gaW1wb3J0IHRoZSBjZXJ0aWZpY2F0ZS4gVGhpcyBtYXkgZmFpbCBmb3IgbGVnaXRpbWF0ZSByZWFzb25zCisgICAgICAgICAgIHN1Y2ggYXMgZHVwbGljYXRlIGNlcnRpZmljYXRlLCB3aGljaCBpcyBhbGxvd2VkIGJ5IE1TIGJ1dCBub3QKKyAgICAgICAgICAgT3BlblNTTC4gKi8KKyAgICAgICAgaWYoWDUwOV9TVE9SRV9hZGRfY2VydChzdG9yZSwgeDUwOSkgPT0gMSkgeworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgICAgICAgICBpbmZvZihkYXRhLCAiU1NMOiBJbXBvcnRlZCBjZXJ0IFwiJXNcIlxuIiwgY2VydF9uYW1lKTsKKyNlbmRpZgorICAgICAgICAgIGltcG9ydGVkX25hdGl2ZV9jYSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAgICAgfQorCisgICAgICBmcmVlKGVuaGtleV91c2FnZSk7CisgICAgICBDZXJ0RnJlZUNlcnRpZmljYXRlQ29udGV4dChwQ29udGV4dCk7CisgICAgICBDZXJ0Q2xvc2VTdG9yZShoU3RvcmUsIDApOworCisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGlmKGltcG9ydGVkX25hdGl2ZV9jYSkKKyAgICAgIGluZm9mKGRhdGEsICJzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgd2luZG93cyBjYSBzdG9yZVxuIik7CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgImVycm9yIGltcG9ydGluZyB3aW5kb3dzIGNhIHN0b3JlLCBjb250aW51aW5nIGFueXdheVxuIik7CisgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTUFKT1IpICYmIChPUEVOU1NMX1ZFUlNJT05fTUFKT1IgPj0gMykKKyAgLyogT3BlblNTTCAzLjAuMCBoYXMgZGVwcmVjYXRlZCBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyAqLworICB7CisgICAgaWYoc3NsX2NhZmlsZSkgeworICAgICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfZmlsZShiYWNrZW5kLT5jdHgsIHNzbF9jYWZpbGUpKSB7CisgICAgICAgIGlmKHZlcmlmeXBlZXIpIHsKKyAgICAgICAgICAvKiBGYWlsIGlmIHdlIGluc2lzdCBvbiBzdWNjZXNzZnVsbHkgdmVyaWZ5aW5nIHRoZSBzZXJ2ZXIuICovCisgICAgICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgZmlsZTogJXMiLCBzc2xfY2FmaWxlKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgICB9CisgICAgICAgIC8qIENvbnRpbnVlIHdpdGggYSB3YXJuaW5nIGlmIG5vIGNlcnRpZmljYXRlIHZlcmlmIGlzIHJlcXVpcmVkLiAqLworICAgICAgICBpbmZvZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSBmaWxlLCBjb250aW51aW5nIGFueXdheVxuIik7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiICBDQWZpbGU6ICVzXG4iLCBzc2xfY2FmaWxlKTsKKyAgICB9CisgICAgaWYoc3NsX2NhcGF0aCkgeworICAgICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfZGlyKGJhY2tlbmQtPmN0eCwgc3NsX2NhcGF0aCkpIHsKKyAgICAgICAgaWYodmVyaWZ5cGVlcikgeworICAgICAgICAgIC8qIEZhaWwgaWYgd2UgaW5zaXN0IG9uIHN1Y2Nlc3NmdWxseSB2ZXJpZnlpbmcgdGhlIHNlcnZlci4gKi8KKyAgICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSBwYXRoOiAlcyIsIHNzbF9jYXBhdGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICAgIH0KKyAgICAgICAgLyogQ29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gY2VydGlmaWNhdGUgdmVyaWYgaXMgcmVxdWlyZWQuICovCisgICAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHBhdGgsIGNvbnRpbnVpbmcgYW55d2F5XG4iKTsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICIgIENBcGF0aDogJXNcbiIsIHNzbF9jYXBhdGgpOworICAgIH0KKyAgfQorI2Vsc2UKICAgaWYoc3NsX2NhZmlsZSB8fCBzc2xfY2FwYXRoKSB7CiAgICAgLyogdGVsbCBTU0wgd2hlcmUgdG8gZmluZCBDQSBjZXJ0aWZpY2F0ZXMgdGhhdCBhcmUgdXNlZCB0byB2ZXJpZnkKICAgICAgICB0aGUgc2VydmVycyBjZXJ0aWZpY2F0ZS4gKi8KLSAgICBpZighU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQkFDS0VORC0+Y3R4LCBzc2xfY2FmaWxlLCBzc2xfY2FwYXRoKSkgewotICAgICAgaWYodmVyaWZ5cGVlcikgeworICAgIGlmKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhiYWNrZW5kLT5jdHgsIHNzbF9jYWZpbGUsIHNzbF9jYXBhdGgpKSB7CisgICAgICBpZih2ZXJpZnlwZWVyICYmICFpbXBvcnRlZF9uYXRpdmVfY2EpIHsKICAgICAgICAgLyogRmFpbCBpZiB3ZSBpbnNpc3Qgb24gc3VjY2Vzc2Z1bGx5IHZlcmlmeWluZyB0aGUgc2VydmVyLiAqLwogICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgogICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXMiLApAQCAtMjYxNCw3ICszMDAzLDcgQEAKICAgICAgICAgICAgICAgc3NsX2NhcGF0aCA/IHNzbF9jYXBhdGggOiAibm9uZSIpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQotICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbgorICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uCiAgICAgICAgICBpcyByZXF1aXJlZC4gKi8KICAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgogICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOwpAQCAtMjYyOSwxOCArMzAxOCwyMCBAQAogICAgICAgICAgIHNzbF9jYWZpbGUgPyBzc2xfY2FmaWxlIDogIm5vbmUiLAogICAgICAgICAgIHNzbF9jYXBhdGggPyBzc2xfY2FwYXRoIDogIm5vbmUiKTsKICAgfQorI2VuZGlmCisKICNpZmRlZiBDVVJMX0NBX0ZBTExCQUNLCi0gIGVsc2UgaWYodmVyaWZ5cGVlcikgeworICBpZih2ZXJpZnlwZWVyICYmICFzc2xfY2FmaWxlICYmICFzc2xfY2FwYXRoICYmICFpbXBvcnRlZF9uYXRpdmVfY2EpIHsKICAgICAvKiB2ZXJpZnlpbmcgdGhlIHBlZXIgd2l0aG91dCBhbnkgQ0EgY2VydGlmaWNhdGVzIHdvbid0CiAgICAgICAgd29yayBzbyB1c2Ugb3BlbnNzbCdzIGJ1aWx0IGluIGRlZmF1bHQgYXMgZmFsbGJhY2sgKi8KLSAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhCQUNLRU5ELT5jdHgpOworICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKGJhY2tlbmQtPmN0eCk7CiAgIH0KICNlbmRpZgogCiAgIGlmKHNzbF9jcmxmaWxlKSB7CiAgICAgLyogdGVsbCBTU0wgd2hlcmUgdG8gZmluZCBDUkwgZmlsZSB0aGF0IGlzIHVzZWQgdG8gY2hlY2sgY2VydGlmaWNhdGUKICAgICAgKiByZXZvY2F0aW9uICovCi0gICAgbG9va3VwID0gWDUwOV9TVE9SRV9hZGRfbG9va3VwKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoQkFDS0VORC0+Y3R4KSwKKyAgICBsb29rdXAgPSBYNTA5X1NUT1JFX2FkZF9sb29rdXAoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9MT09LVVBfZmlsZSgpKTsKICAgICBpZighbG9va3VwIHx8CiAgICAgICAgKCFYNTA5X2xvYWRfY3JsX2ZpbGUobG9va3VwLCBzc2xfY3JsZmlsZSwgWDUwOV9GSUxFVFlQRV9QRU0pKSApIHsKQEAgLTI2NDksMzcgKzMwNDAsNTAgQEAKICAgICB9CiAgICAgLyogRXZlcnl0aGluZyBpcyBmaW5lLiAqLwogICAgIGluZm9mKGRhdGEsICJzdWNjZXNzZnVsbHkgbG9hZCBDUkwgZmlsZTpcbiIpOwotICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoQkFDS0VORC0+Y3R4KSwKKyAgICBYNTA5X1NUT1JFX3NldF9mbGFncyhTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKGJhY2tlbmQtPmN0eCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLfFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEwpOwogCiAgICAgaW5mb2YoZGF0YSwgIiAgQ1JMZmlsZTogJXNcbiIsIHNzbF9jcmxmaWxlKTsKICAgfQogCi0gIC8qIFRyeSBidWlsZGluZyBhIGNoYWluIHVzaW5nIGlzc3VlcnMgaW4gdGhlIHRydXN0ZWQgc3RvcmUgZmlyc3QgdG8gYXZvaWQKLSAgcHJvYmxlbXMgd2l0aCBzZXJ2ZXItc2VudCBsZWdhY3kgaW50ZXJtZWRpYXRlcy4KLSAgTmV3ZXIgdmVyc2lvbnMgb2YgT3BlblNTTCBkbyBhbHRlcm5hdGUgY2hhaW4gY2hlY2tpbmcgYnkgZGVmYXVsdCB3aGljaAotICBnaXZlcyB1cyB0aGUgc2FtZSBmaXggd2l0aG91dCBhcyBtdWNoIG9mIGEgcGVyZm9ybWFuY2UgaGl0IChzbGlnaHQpLCBzbyB3ZQotICBwcmVmZXIgdGhhdCBpZiBhdmFpbGFibGUuCi0gIGh0dHBzOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0zNjIxJnVzZXI9Z3Vlc3QmcGFzcz1ndWVzdAotICAqLwotI2lmIGRlZmluZWQoWDUwOV9WX0ZMQUdfVFJVU1RFRF9GSVJTVCkgJiYgIWRlZmluZWQoWDUwOV9WX0ZMQUdfTk9fQUxUX0NIQUlOUykKICAgaWYodmVyaWZ5cGVlcikgewotICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoQkFDS0VORC0+Y3R4KSwKKyAgICAvKiBUcnkgYnVpbGRpbmcgYSBjaGFpbiB1c2luZyBpc3N1ZXJzIGluIHRoZSB0cnVzdGVkIHN0b3JlIGZpcnN0IHRvIGF2b2lkCisgICAgICAgcHJvYmxlbXMgd2l0aCBzZXJ2ZXItc2VudCBsZWdhY3kgaW50ZXJtZWRpYXRlcy4gIE5ld2VyIHZlcnNpb25zIG9mCisgICAgICAgT3BlblNTTCBkbyBhbHRlcm5hdGUgY2hhaW4gY2hlY2tpbmcgYnkgZGVmYXVsdCBidXQgd2UgZG8gbm90IGtub3cgaG93IHRvCisgICAgICAgZGV0ZXJtaW5lIHRoYXQgaW4gYSByZWxpYWJsZSBtYW5uZXIuCisgICAgICAgaHR0cHM6Ly9ydC5vcGVuc3NsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTM2MjEmdXNlcj1ndWVzdCZwYXNzPWd1ZXN0CisgICAgKi8KKyNpZiBkZWZpbmVkKFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QpCisgICAgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QpOwotICB9CiAjZW5kaWYKKyNpZmRlZiBYNTA5X1ZfRkxBR19QQVJUSUFMX0NIQUlOCisgICAgaWYoIVNTTF9TRVRfT1BUSU9OKG5vX3BhcnRpYWxjaGFpbikgJiYgIXNzbF9jcmxmaWxlKSB7CisgICAgICAvKiBIYXZlIGludGVybWVkaWF0ZSBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHRydXN0IHN0b3JlIGJlIHRyZWF0ZWQgYXMKKyAgICAgICAgIHRydXN0LWFuY2hvcnMsIGluIHRoZSBzYW1lIHdheSBhcyBzZWxmLXNpZ25lZCByb290IENBIGNlcnRpZmljYXRlcworICAgICAgICAgYXJlLiBUaGlzIGFsbG93cyB1c2VycyB0byB2ZXJpZnkgc2VydmVycyB1c2luZyB0aGUgaW50ZXJtZWRpYXRlIGNlcnQKKyAgICAgICAgIG9ubHksIGluc3RlYWQgb2YgbmVlZGluZyB0aGUgd2hvbGUgY2hhaW4uCisKKyAgICAgICAgIER1ZSB0byBPcGVuU1NMIGJ1ZyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzbC9vcGVuc3NsL2lzc3Vlcy81MDgxIHdlCisgICAgICAgICBjYW5ub3QgZG8gcGFydGlhbCBjaGFpbnMgd2l0aCBDUkwgY2hlY2suCisgICAgICAqLworICAgICAgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfUEFSVElBTF9DSEFJTik7CisgICAgfQorI2VuZGlmCisgIH0KIAogICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKICAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQogICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCiAgICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLwotICBTU0xfQ1RYX3NldF92ZXJpZnkoQkFDS0VORC0+Y3R4LAorICBTU0xfQ1RYX3NldF92ZXJpZnkoYmFja2VuZC0+Y3R4LAogICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5cGVlciA/IFNTTF9WRVJJRllfUEVFUiA6IFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CiAKICAgLyogRW5hYmxlIGxvZ2dpbmcgb2Ygc2VjcmV0cyB0byB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gZW52IFNTTEtFWUxPR0ZJTEUuICovCi0jaWYgZGVmaW5lZChFTkFCTEVfU1NMS0VZTE9HRklMRSkgJiYgZGVmaW5lZChIQVZFX0tFWUxPR19DQUxMQkFDSykKLSAgaWYoa2V5bG9nX2ZpbGVfZnApIHsKLSAgICBTU0xfQ1RYX3NldF9rZXlsb2dfY2FsbGJhY2soQkFDS0VORC0+Y3R4LCBvc3NsX2tleWxvZ19jYWxsYmFjayk7CisjaWZkZWYgSEFWRV9LRVlMT0dfQ0FMTEJBQ0sKKyAgaWYoQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIFNTTF9DVFhfc2V0X2tleWxvZ19jYWxsYmFjayhiYWNrZW5kLT5jdHgsIG9zc2xfa2V5bG9nX2NhbGxiYWNrKTsKICAgfQogI2VuZGlmCiAKQEAgLTI2ODcsMTQgKzMwOTEsMTYgQEAKICAgICogY2FsbGJhY2suIFVzZSB0aGUgImV4dGVybmFsIHN0b3JhZ2UiIG1vZGUgdG8gYXZvaWQgdGhhdCBPcGVuU1NMIGNyZWF0ZXMKICAgICogYW4gaW50ZXJuYWwgc2Vzc2lvbiBjYWNoZS4KICAgICovCi0gIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZShCQUNLRU5ELT5jdHgsCisgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZShiYWNrZW5kLT5jdHgsCiAgICAgICBTU0xfU0VTU19DQUNIRV9DTElFTlQgfCBTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTCk7Ci0gIFNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiKEJBQ0tFTkQtPmN0eCwgb3NzbF9uZXdfc2Vzc2lvbl9jYik7CisgIFNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiKGJhY2tlbmQtPmN0eCwgb3NzbF9uZXdfc2Vzc2lvbl9jYik7CiAKICAgLyogZ2l2ZSBhcHBsaWNhdGlvbiBhIGNoYW5jZSB0byBpbnRlcmZlcmUgd2l0aCBTU0wgc2V0IHVwLiAqLwogICBpZihkYXRhLT5zZXQuc3NsLmZzc2xjdHgpIHsKLSAgICByZXN1bHQgPSAoKmRhdGEtPnNldC5zc2wuZnNzbGN0eCkoZGF0YSwgQkFDS0VORC0+Y3R4LAorICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOworICAgIHJlc3VsdCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCBiYWNrZW5kLT5jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuZnNzbGN0eHApOworICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKICAgICBpZihyZXN1bHQpIHsKICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzaWduYWxlZCBieSBzc2wgY3R4IGNhbGxiYWNrIik7CiAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjcwMiwxMCArMzEwOCwxMCBAQAogICB9CiAKICAgLyogTGV0cyBtYWtlIGFuIFNTTCBzdHJ1Y3R1cmUgKi8KLSAgaWYoQkFDS0VORC0+aGFuZGxlKQotICAgIFNTTF9mcmVlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIEJBQ0tFTkQtPmhhbmRsZSA9IFNTTF9uZXcoQkFDS0VORC0+Y3R4KTsKLSAgaWYoIUJBQ0tFTkQtPmhhbmRsZSkgeworICBpZihiYWNrZW5kLT5oYW5kbGUpCisgICAgU1NMX2ZyZWUoYmFja2VuZC0+aGFuZGxlKTsKKyAgYmFja2VuZC0+aGFuZGxlID0gU1NMX25ldyhiYWNrZW5kLT5jdHgpOworICBpZighYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCAoaGFuZGxlKSEiKTsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQpAQCAtMjcxMywyMyArMzExOSwyMyBAQAogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDgwOGZMKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgJiYgXAogICAgICFkZWZpbmVkKE9QRU5TU0xfTk9fT0NTUCkKICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpCi0gICAgU1NMX3NldF90bHNleHRfc3RhdHVzX3R5cGUoQkFDS0VORC0+aGFuZGxlLCBUTFNFWFRfU1RBVFVTVFlQRV9vY3NwKTsKKyAgICBTU0xfc2V0X3Rsc2V4dF9zdGF0dXNfdHlwZShiYWNrZW5kLT5oYW5kbGUsIFRMU0VYVF9TVEFUVVNUWVBFX29jc3ApOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE9QRU5TU0xfSVNfQk9SSU5HU1NMKSAmJiBkZWZpbmVkKEFMTE9XX1JFTkVHKQotICBTU0xfc2V0X3JlbmVnb3RpYXRlX21vZGUoQkFDS0VORC0+aGFuZGxlLCBzc2xfcmVuZWdvdGlhdGVfZnJlZWx5KTsKKyAgU1NMX3NldF9yZW5lZ290aWF0ZV9tb2RlKGJhY2tlbmQtPmhhbmRsZSwgc3NsX3JlbmVnb3RpYXRlX2ZyZWVseSk7CiAjZW5kaWYKIAotICBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUoQkFDS0VORC0+aGFuZGxlKTsKKyAgU1NMX3NldF9jb25uZWN0X3N0YXRlKGJhY2tlbmQtPmhhbmRsZSk7CiAKLSAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSAweDA7CisgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gMHgwOwogI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKICAgaWYoKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZhZGRyKSkgJiYKICNpZmRlZiBFTkFCTEVfSVBWNgogICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyKSkgJiYKICNlbmRpZgogICAgICBzbmkgJiYKLSAgICAgIVNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShCQUNLRU5ELT5oYW5kbGUsIGhvc3RuYW1lKSkKKyAgICAgIVNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShiYWNrZW5kLT5oYW5kbGUsIGhvc3RuYW1lKSkKICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogZmFpbGVkIHRvIGNvbmZpZ3VyZSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIChTTkkpICIKICAgICAgICAgICAiVExTIGV4dGVuc2lvblxuIik7CiAjZW5kaWYKQEAgLTI3NDMsMTQgKzMxNDksMTQgQEAKICAgICBpZihjb25uZWN0ZGF0YV9pZHggPj0gMCAmJiBzb2NraW5kZXhfaWR4ID49IDApIHsKICAgICAgIC8qIFN0b3JlIHRoZSBkYXRhIG5lZWRlZCBmb3IgdGhlICJuZXcgc2Vzc2lvbiIgY2FsbGJhY2suCiAgICAgICAgKiBUaGUgc29ja2luZGV4IGlzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgZWxlbWVudC4gKi8KLSAgICAgIFNTTF9zZXRfZXhfZGF0YShCQUNLRU5ELT5oYW5kbGUsIGNvbm5lY3RkYXRhX2lkeCwgY29ubik7Ci0gICAgICBTU0xfc2V0X2V4X2RhdGEoQkFDS0VORC0+aGFuZGxlLCBzb2NraW5kZXhfaWR4LCBjb25uLT5zb2NrICsgc29ja2luZGV4KTsKKyAgICAgIFNTTF9zZXRfZXhfZGF0YShiYWNrZW5kLT5oYW5kbGUsIGNvbm5lY3RkYXRhX2lkeCwgY29ubik7CisgICAgICBTU0xfc2V0X2V4X2RhdGEoYmFja2VuZC0+aGFuZGxlLCBzb2NraW5kZXhfaWR4LCBjb25uLT5zb2NrICsgc29ja2luZGV4KTsKICAgICB9CiAKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKICAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCBOVUxMLCBzb2NraW5kZXgpKSB7CiAgICAgICAvKiB3ZSBnb3QgYSBzZXNzaW9uIGlkLCB1c2UgaXQhICovCi0gICAgICBpZighU1NMX3NldF9zZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSwgc3NsX3Nlc3Npb25pZCkpIHsKKyAgICAgIGlmKCFTU0xfc2V0X3Nlc3Npb24oYmFja2VuZC0+aGFuZGxlLCBzc2xfc2Vzc2lvbmlkKSkgewogICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xfc2V0X3Nlc3Npb24gZmFpbGVkOiAlcyIsCiAgICAgICAgICAgICAgIG9zc2xfc3RyZXJyb3IoRVJSX2dldF9lcnJvcigpLCBlcnJvcl9idWZmZXIsCkBAIC0yNzYzLDYgKzMxNjksNyBAQAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgaWYoY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0udXNlKSB7CiAgICAgQklPICpjb25zdCBiaW8gPSBCSU9fbmV3KEJJT19mX3NzbCgpKTsKICAgICBTU0wgKmhhbmRsZSA9IGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLmJhY2tlbmQtPmhhbmRsZTsKQEAgLTI3NzAsOSArMzE3NywxMSBAQAogICAgIERFQlVHQVNTRVJUKGhhbmRsZSAhPSBOVUxMKTsKICAgICBERUJVR0FTU0VSVChiaW8gIT0gTlVMTCk7CiAgICAgQklPX3NldF9zc2woYmlvLCBoYW5kbGUsIEZBTFNFKTsKLSAgICBTU0xfc2V0X2JpbyhCQUNLRU5ELT5oYW5kbGUsIGJpbywgYmlvKTsKKyAgICBTU0xfc2V0X2JpbyhiYWNrZW5kLT5oYW5kbGUsIGJpbywgYmlvKTsKICAgfQotICBlbHNlIGlmKCFTU0xfc2V0X2ZkKEJBQ0tFTkQtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgIGVsc2UKKyNlbmRpZgorICAgIGlmKCFTU0xfc2V0X2ZkKGJhY2tlbmQtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CiAgICAgLyogcGFzcyB0aGUgcmF3IHNvY2tldCBpbnRvIHRoZSBTU0wgbGF5ZXJzICovCiAgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9mZCBmYWlsZWQ6ICVzIiwKICAgICAgICAgICBvc3NsX3N0cmVycm9yKEVSUl9nZXRfZXJyb3IoKSwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSkpOwpAQCAtMjc4OSwyNiArMzE5OCwzNCBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgaW50IGVycjsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KICAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbHNlCisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbmRpZgorICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZQogICAgICAgICAgICAgICB8fCBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZQogICAgICAgICAgICAgICB8fCBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CiAKICAgRVJSX2NsZWFyX2Vycm9yKCk7CiAKLSAgZXJyID0gU1NMX2Nvbm5lY3QoQkFDS0VORC0+aGFuZGxlKTsKLSAgLyogSWYga2V5bG9nZ2luZyBpcyBlbmFibGVkIGJ1dCB0aGUga2V5bG9nIGNhbGxiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgdGhlbiBsb2cKLSAgICAgc2VjcmV0cyBoZXJlLCBpbW1lZGlhdGVseSBhZnRlciBTU0xfY29ubmVjdCBieSB1c2luZyB0YXBfc3NsX2tleS4gKi8KLSNpZiBkZWZpbmVkKEVOQUJMRV9TU0xLRVlMT0dGSUxFKSAmJiAhZGVmaW5lZChIQVZFX0tFWUxPR19DQUxMQkFDSykKLSAgdGFwX3NzbF9rZXkoQkFDS0VORC0+aGFuZGxlLCAmQkFDS0VORC0+dGFwX3N0YXRlKTsKKyAgZXJyID0gU1NMX2Nvbm5lY3QoYmFja2VuZC0+aGFuZGxlKTsKKyNpZm5kZWYgSEFWRV9LRVlMT0dfQ0FMTEJBQ0sKKyAgaWYoQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIC8qIElmIGtleSBsb2dnaW5nIGlzIGVuYWJsZWQsIHdhaXQgZm9yIHRoZSBoYW5kc2hha2UgdG8gY29tcGxldGUgYW5kIHRoZW4KKyAgICAgKiBwcm9jZWVkIHdpdGggbG9nZ2luZyBzZWNyZXRzIChmb3IgVExTIDEuMiBvciBvbGRlcikuCisgICAgICovCisgICAgb3NzbF9sb2dfdGxzMTJfc2VjcmV0KGJhY2tlbmQtPmhhbmRsZSwgJmJhY2tlbmQtPmtleWxvZ19kb25lKTsKKyAgfQogI2VuZGlmCiAKICAgLyogMSAgaXMgZmluZQogICAgICAwICBpcyAibm90IHN1Y2Nlc3NmdWwgYnV0IHdhcyBzaHV0IGRvd24gY29udHJvbGxlZCIKICAgICAgPDAgaXMgImhhbmRzaGFrZSB3YXMgbm90IHN1Y2Nlc3NmdWwsIGJlY2F1c2UgYSBmYXRhbCBlcnJvciBvY2N1cnJlZCIgKi8KICAgaWYoMSAhPSBlcnIpIHsKLSAgICBpbnQgZGV0YWlsID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIGVycik7CisgICAgaW50IGRldGFpbCA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCBlcnIpOwogCiAgICAgaWYoU1NMX0VSUk9SX1dBTlRfUkVBRCA9PSBkZXRhaWwpIHsKICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc7CkBAIC0yODQ4LDcgKzMyNjUsNyBAQAogICAgICAgICAgKHJlYXNvbiA9PSBTU0xfUl9DRVJUSUZJQ0FURV9WRVJJRllfRkFJTEVEKSkgewogICAgICAgICByZXN1bHQgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CiAKLSAgICAgICAgbGVyciA9IFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdChCQUNLRU5ELT5oYW5kbGUpOworICAgICAgICBsZXJyID0gU1NMX2dldF92ZXJpZnlfcmVzdWx0KGJhY2tlbmQtPmhhbmRsZSk7CiAgICAgICAgIGlmKGxlcnIgIT0gWDUwOV9WX09LKSB7CiAgICAgICAgICAgKmNlcnR2ZXJpZnlyZXN1bHQgPSBsZXJyOwogICAgICAgICAgIG1zbnByaW50ZihlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpLApAQCAtMjg3MiwxMSArMzI4OSwyMSBAQAogICAgICAgICogdGhlIFNPX0VSUk9SIGlzIGFsc28gbG9zdC4KICAgICAgICAqLwogICAgICAgaWYoQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1IgPT0gcmVzdWx0ICYmIGVycmRldGFpbCA9PSAwKSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgICAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/CiAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOiBjb25uLT5ob3N0Lm5hbWU7CiAgICAgICAgIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyAgICAgICAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OworI2VuZGlmCisgICAgICAgIGNoYXIgZXh0cmFtc2dbODBdPSIiOworICAgICAgICBpbnQgc29ja2VyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgaWYoc29ja2VyciAmJiBkZXRhaWwgPT0gU1NMX0VSUk9SX1NZU0NBTEwpCisgICAgICAgICAgQ3VybF9zdHJlcnJvcihzb2NrZXJyLCBleHRyYW1zZywgc2l6ZW9mKGV4dHJhbXNnKSk7CiAgICAgICAgIGZhaWxmKGRhdGEsIE9TU0xfUEFDS0FHRSAiIFNTTF9jb25uZWN0OiAlcyBpbiBjb25uZWN0aW9uIHRvICVzOiVsZCAiLAotICAgICAgICAgICAgICBTU0xfRVJST1JfdG9fc3RyKGRldGFpbCksIGhvc3RuYW1lLCBwb3J0KTsKKyAgICAgICAgICAgICAgZXh0cmFtc2dbMF0gPyBleHRyYW1zZyA6IFNTTF9FUlJPUl90b19zdHIoZGV0YWlsKSwKKyAgICAgICAgICAgICAgaG9zdG5hbWUsIHBvcnQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgfQogCkBAIC0yODkyLDggKzMzMTksOCBAQAogCiAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCiAgICAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHVzaW5nICVzIC8gJXNcbiIsCi0gICAgICAgICAgZ2V0X3NzbF92ZXJzaW9uX3R4dChCQUNLRU5ELT5oYW5kbGUpLAotICAgICAgICAgIFNTTF9nZXRfY2lwaGVyKEJBQ0tFTkQtPmhhbmRsZSkpOworICAgICAgICAgIGdldF9zc2xfdmVyc2lvbl90eHQoYmFja2VuZC0+aGFuZGxlKSwKKyAgICAgICAgICBTU0xfZ2V0X2NpcGhlcihiYWNrZW5kLT5oYW5kbGUpKTsKIAogI2lmZGVmIEhBU19BTFBOCiAgICAgLyogU2V0cyBkYXRhIGFuZCBsZW4gdG8gbmVnb3RpYXRlZCBwcm90b2NvbCwgbGVuIGlzIDAgaWYgbm8gcHJvdG9jb2wgd2FzCkBAIC0yOTAyLDcgKzMzMjksNyBAQAogICAgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CiAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZWdfcHJvdG9jb2w7CiAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwotICAgICAgU1NMX2dldDBfYWxwbl9zZWxlY3RlZChCQUNLRU5ELT5oYW5kbGUsICZuZWdfcHJvdG9jb2wsICZsZW4pOworICAgICAgU1NMX2dldDBfYWxwbl9zZWxlY3RlZChiYWNrZW5kLT5oYW5kbGUsICZuZWdfcHJvdG9jb2wsICZsZW4pOwogICAgICAgaWYobGVuICE9IDApIHsKICAgICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJS4qc1xuIiwgbGVuLCBuZWdfcHJvdG9jb2wpOwogCkBAIC0yOTUyLDcgKzMzNzksNyBAQAogICBDdXJsX3NzbF9wdXNoX2NlcnRpbmZvX2xlbihkYXRhLCBfbnVtLCBfbGFiZWwsIHB0ciwgaW5mb19sZW4pOyBcCiAgIGlmKDEgIT0gQklPX3Jlc2V0KG1lbSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBXSElMRV9GQUxTRQorfSB3aGlsZSgwKQogCiBzdGF0aWMgdm9pZCBwdWJrZXlfc2hvdyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgQklPICptZW0sCkBAIC0yOTg0LDMxICszNDExLDI4IEBACiAgIGlmKF90eXBlLT5fbmFtZSkgeyBcCiAgICAgcHVia2V5X3Nob3coZGF0YSwgbWVtLCBfbnVtLCAjX3R5cGUsICNfbmFtZSwgX3R5cGUtPl9uYW1lKTsgXAogICB9IFwKLX0gV0hJTEVfRkFMU0UKK30gd2hpbGUoMCkKICNlbmRpZgogCi1zdGF0aWMgaW50IFg1MDlWM19leHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKK3N0YXRpYyB2b2lkIFg1MDlWM19leHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydG51bSwKICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9FWFRTIFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0cykKIHsKICAgaW50IGk7Ci0gIHNpemVfdCBqOwogCiAgIGlmKChpbnQpc2tfWDUwOV9FWFRFTlNJT05fbnVtKGV4dHMpIDw9IDApCiAgICAgLyogbm8gZXh0ZW5zaW9ucywgYmFpbCBvdXQgKi8KLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm47CiAKICAgZm9yKGkgPSAwOyBpIDwgKGludClza19YNTA5X0VYVEVOU0lPTl9udW0oZXh0cyk7IGkrKykgewogICAgIEFTTjFfT0JKRUNUICpvYmo7CiAgICAgWDUwOV9FWFRFTlNJT04gKmV4dCA9IHNrX1g1MDlfRVhURU5TSU9OX3ZhbHVlKGV4dHMsIGkpOwogICAgIEJVRl9NRU0gKmJpb21lbTsKLSAgICBjaGFyIGJ1Zls1MTJdOwotICAgIGNoYXIgKnB0ciA9IGJ1ZjsKICAgICBjaGFyIG5hbWVidWZbMTI4XTsKICAgICBCSU8gKmJpb19vdXQgPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKIAogICAgIGlmKCFiaW9fb3V0KQotICAgICAgcmV0dXJuIDE7CisgICAgICByZXR1cm47CiAKICAgICBvYmogPSBYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0KGV4dCk7CiAKQEAgLTMwMTgsMjggKzM0NDIsMTggQEAKICAgICAgIEFTTjFfU1RSSU5HX3ByaW50KGJpb19vdXQsIChBU04xX1NUUklORyAqKVg1MDlfRVhURU5TSU9OX2dldF9kYXRhKGV4dCkpOwogCiAgICAgQklPX2dldF9tZW1fcHRyKGJpb19vdXQsICZiaW9tZW0pOwotCi0gICAgZm9yKGogPSAwOyBqIDwgKHNpemVfdCliaW9tZW0tPmxlbmd0aDsgaisrKSB7Ci0gICAgICBjb25zdCBjaGFyICpzZXAgPSAiIjsKLSAgICAgIGlmKGJpb21lbS0+ZGF0YVtqXSA9PSAnXG4nKSB7Ci0gICAgICAgIHNlcCA9ICIsICI7Ci0gICAgICAgIGorKzsgLyogc2tpcCB0aGUgbmV3bGluZSAqLwotICAgICAgfTsKLSAgICAgIHdoaWxlKChqPChzaXplX3QpYmlvbWVtLT5sZW5ndGgpICYmIChiaW9tZW0tPmRhdGFbal0gPT0gJyAnKSkKLSAgICAgICAgaisrOwotICAgICAgaWYoajwoc2l6ZV90KWJpb21lbS0+bGVuZ3RoKQotICAgICAgICBwdHIgKz0gbXNucHJpbnRmKHB0ciwgc2l6ZW9mKGJ1ZiktKHB0ci1idWYpLCAiJXMlYyIsIHNlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiaW9tZW0tPmRhdGFbal0pOwotICAgIH0KLQotICAgIEN1cmxfc3NsX3B1c2hfY2VydGluZm8oZGF0YSwgY2VydG51bSwgbmFtZWJ1ZiwgYnVmKTsKLQorICAgIEN1cmxfc3NsX3B1c2hfY2VydGluZm9fbGVuKGRhdGEsIGNlcnRudW0sIG5hbWVidWYsIGJpb21lbS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW9tZW0tPmxlbmd0aCk7CiAgICAgQklPX2ZyZWUoYmlvX291dCk7Ci0KICAgfQotICByZXR1cm4gMDsgLyogYWxsIGlzIGZpbmUgKi8KIH0KIAorI2lmZGVmIE9QRU5TU0xfSVNfQk9SSU5HU1NMCit0eXBlZGVmIHNpemVfdCBudW1jZXJ0X3Q7CisjZWxzZQordHlwZWRlZiBpbnQgbnVtY2VydF90OworI2VuZGlmCisKIHN0YXRpYyBDVVJMY29kZSBnZXRfY2VydF9jaGFpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiAKQEAgLTMwNDgsMjQgKzM0NjIsMjUgQEAKICAgU1RBQ0tfT0YoWDUwOSkgKnNrOwogICBpbnQgaTsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIGludCBudW1jZXJ0czsKKyAgbnVtY2VydF90IG51bWNlcnRzOwogICBCSU8gKm1lbTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogCi0gIHNrID0gU1NMX2dldF9wZWVyX2NlcnRfY2hhaW4oQkFDS0VORC0+aGFuZGxlKTsKKyAgc2sgPSBTU0xfZ2V0X3BlZXJfY2VydF9jaGFpbihiYWNrZW5kLT5oYW5kbGUpOwogICBpZighc2spIHsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogCiAgIG51bWNlcnRzID0gc2tfWDUwOV9udW0oc2spOwogCi0gIHJlc3VsdCA9IEN1cmxfc3NsX2luaXRfY2VydGluZm8oZGF0YSwgbnVtY2VydHMpOworICByZXN1bHQgPSBDdXJsX3NzbF9pbml0X2NlcnRpbmZvKGRhdGEsIChpbnQpbnVtY2VydHMpOwogICBpZihyZXN1bHQpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgbWVtID0gQklPX25ldyhCSU9fc19tZW0oKSk7CiAKLSAgZm9yKGkgPSAwOyBpIDwgbnVtY2VydHM7IGkrKykgeworICBmb3IoaSA9IDA7IGkgPCAoaW50KW51bWNlcnRzOyBpKyspIHsKICAgICBBU04xX0lOVEVHRVIgKm51bTsKICAgICBYNTA5ICp4ID0gc2tfWDUwOV92YWx1ZShzaywgaSk7CiAgICAgRVZQX1BLRVkgKnB1YmtleSA9IE5VTEw7CkBAIC0zMDkxLDE4ICszNTA2LDI1IEBACiAKICNpZiBkZWZpbmVkKEhBVkVfWDUwOV9HRVQwX1NJR05BVFVSRSkgJiYgZGVmaW5lZChIQVZFX1g1MDlfR0VUMF9FWFRFTlNJT05TKQogICAgIHsKLSAgICAgIGNvbnN0IFg1MDlfQUxHT1IgKnBhbGcgPSBOVUxMOwotICAgICAgQVNOMV9TVFJJTkcgKmEgPSBBU04xX1NUUklOR19uZXcoKTsKLSAgICAgIGlmKGEpIHsKLSAgICAgICAgWDUwOV9nZXQwX3NpZ25hdHVyZSgmcHNpZywgJnBhbGcsIHgpOwotICAgICAgICBYNTA5X3NpZ25hdHVyZV9wcmludChtZW0sIEFSRzJfWDUwOV9zaWduYXR1cmVfcHJpbnQgcGFsZywgYSk7Ci0gICAgICAgIEFTTjFfU1RSSU5HX2ZyZWUoYSk7CisgICAgICBjb25zdCBYNTA5X0FMR09SICpzaWdhbGcgPSBOVUxMOworICAgICAgWDUwOV9QVUJLRVkgKnhwdWJrZXkgPSBOVUxMOworICAgICAgQVNOMV9PQkpFQ1QgKnB1YmtleW9pZCA9IE5VTEw7CiAKLSAgICAgICAgaWYocGFsZykgewotICAgICAgICAgIGkyYV9BU04xX09CSkVDVChtZW0sIHBhbGctPmFsZ29yaXRobSk7CisgICAgICBYNTA5X2dldDBfc2lnbmF0dXJlKCZwc2lnLCAmc2lnYWxnLCB4KTsKKyAgICAgIGlmKHNpZ2FsZykgeworICAgICAgICBpMmFfQVNOMV9PQkpFQ1QobWVtLCBzaWdhbGctPmFsZ29yaXRobSk7CisgICAgICAgIHB1c2hfY2VydGluZm8oIlNpZ25hdHVyZSBBbGdvcml0aG0iLCBpKTsKKyAgICAgIH0KKworICAgICAgeHB1YmtleSA9IFg1MDlfZ2V0X1g1MDlfUFVCS0VZKHgpOworICAgICAgaWYoeHB1YmtleSkgeworICAgICAgICBYNTA5X1BVQktFWV9nZXQwX3BhcmFtKCZwdWJrZXlvaWQsIE5VTEwsIE5VTEwsIE5VTEwsIHhwdWJrZXkpOworICAgICAgICBpZihwdWJrZXlvaWQpIHsKKyAgICAgICAgICBpMmFfQVNOMV9PQkpFQ1QobWVtLCBwdWJrZXlvaWQpOwogICAgICAgICAgIHB1c2hfY2VydGluZm8oIlB1YmxpYyBLZXkgQWxnb3JpdGhtIiwgaSk7CiAgICAgICAgIH0KICAgICAgIH0KKwogICAgICAgWDUwOVYzX2V4dChkYXRhLCBpLCBYNTA5X2dldDBfZXh0ZW5zaW9ucyh4KSk7CiAgICAgfQogI2Vsc2UKQEAgLTMxNTQsNyArMzU3Niw3IEBACiAgICAgICAgICAgY29uc3QgQklHTlVNICplOwogCiAgICAgICAgICAgUlNBX2dldDBfa2V5KHJzYSwgJm4sICZlLCBOVUxMKTsKLSAgICAgICAgICBCTl9wcmludChtZW0sIG4pOworICAgICAgICAgIEJJT19wcmludGYobWVtLCAiJWQiLCBCTl9udW1fYml0cyhuKSk7CiAgICAgICAgICAgcHVzaF9jZXJ0aW5mbygiUlNBIFB1YmxpYyBLZXkiLCBpKTsKICAgICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBuLCBpKTsKICAgICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBlLCBpKTsKQEAgLTMyNzksNyArMzcwMSw2IEBACiAgICAgaWYobGVuMSA8IDEpCiAgICAgICBicmVhazsgLyogZmFpbGVkICovCiAKLSAgICAvKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9idWZmZXIuaHRtbCAqLwogICAgIGJ1ZmYxID0gdGVtcCA9IG1hbGxvYyhsZW4xKTsKICAgICBpZighYnVmZjEpCiAgICAgICBicmVhazsgLyogZmFpbGVkICovCkBAIC0zMzAxLDcgKzM3MjIsNiBAQAogICAgIHJlc3VsdCA9IEN1cmxfcGluX3BlZXJfcHVia2V5KGRhdGEsIHBpbm5lZHB1YmtleSwgYnVmZjEsIGxlbjEpOwogICB9IHdoaWxlKDApOwogCi0gIC8qIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL2J1ZmZlci5odG1sICovCiAgIGlmKGJ1ZmYxKQogICAgIGZyZWUoYnVmZjEpOwogCkBAIC0zMzI5LDE2ICszNzQ5LDIxIEBACiAgIGNoYXIgZXJyb3JfYnVmZmVyWzI1Nl09IiI7CiAgIGNoYXIgYnVmZmVyWzIwNDhdOwogICBjb25zdCBjaGFyICpwdHI7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KICAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbHNlCisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbmRpZgogICBCSU8gKm1lbSA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAKICAgaWYoZGF0YS0+c2V0LnNzbC5jZXJ0aW5mbykKICAgICAvKiB3ZSd2ZSBiZWVuIGFza2VkIHRvIGdhdGhlciBjZXJ0aWZpY2F0ZSBpbmZvISAqLwogICAgICh2b2lkKWdldF9jZXJ0X2NoYWluKGNvbm4sIGNvbm5zc2wpOwogCi0gIEJBQ0tFTkQtPnNlcnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIGlmKCFCQUNLRU5ELT5zZXJ2ZXJfY2VydCkgeworICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShiYWNrZW5kLT5oYW5kbGUpOworICBpZighYmFja2VuZC0+c2VydmVyX2NlcnQpIHsKICAgICBCSU9fZnJlZShtZW0pOwogICAgIGlmKCFzdHJpY3QpCiAgICAgICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0zMzQ5LDE5ICszNzc0LDE5IEBACiAKICAgaW5mb2YoZGF0YSwgIiVzIGNlcnRpZmljYXRlOlxuIiwgU1NMX0lTX1BST1hZKCkgPyAiUHJveHkiIDogIlNlcnZlciIpOwogCi0gIHJjID0geDUwOV9uYW1lX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KSwKKyAgcmMgPSB4NTA5X25hbWVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUoYmFja2VuZC0+c2VydmVyX2NlcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwogICBpbmZvZihkYXRhLCAiIHN1YmplY3Q6ICVzXG4iLCByYz8iW05PTkVdIjpidWZmZXIpOwogCiAjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKICAgewogICAgIGxvbmcgbGVuOwotICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0MF9ub3RCZWZvcmUoQkFDS0VORC0+c2VydmVyX2NlcnQpKTsKKyAgICBBU04xX1RJTUVfcHJpbnQobWVtLCBYNTA5X2dldDBfbm90QmVmb3JlKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KSk7CiAgICAgbGVuID0gQklPX2dldF9tZW1fZGF0YShtZW0sIChjaGFyICoqKSAmcHRyKTsKICAgICBpbmZvZihkYXRhLCAiIHN0YXJ0IGRhdGU6ICUuKnNcbiIsIGxlbiwgcHRyKTsKICAgICAodm9pZClCSU9fcmVzZXQobWVtKTsKIAotICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0MF9ub3RBZnRlcihCQUNLRU5ELT5zZXJ2ZXJfY2VydCkpOworICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0MF9ub3RBZnRlcihiYWNrZW5kLT5zZXJ2ZXJfY2VydCkpOwogICAgIGxlbiA9IEJJT19nZXRfbWVtX2RhdGEobWVtLCAoY2hhciAqKikgJnB0cik7CiAgICAgaW5mb2YoZGF0YSwgIiBleHBpcmUgZGF0ZTogJS4qc1xuIiwgbGVuLCBwdHIpOwogICAgICh2b2lkKUJJT19yZXNldChtZW0pOwpAQCAtMzM3MSwxNSArMzc5NiwxNSBAQAogICBCSU9fZnJlZShtZW0pOwogCiAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgewotICAgIHJlc3VsdCA9IHZlcmlmeWhvc3QoY29ubiwgQkFDS0VORC0+c2VydmVyX2NlcnQpOworICAgIHJlc3VsdCA9IHZlcmlmeWhvc3QoY29ubiwgYmFja2VuZC0+c2VydmVyX2NlcnQpOwogICAgIGlmKHJlc3VsdCkgewotICAgICAgWDUwOV9mcmVlKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KTsKLSAgICAgIEJBQ0tFTkQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKKyAgICAgIFg1MDlfZnJlZShiYWNrZW5kLT5zZXJ2ZXJfY2VydCk7CisgICAgICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgfQogCi0gIHJjID0geDUwOV9uYW1lX29uZWxpbmUoWDUwOV9nZXRfaXNzdWVyX25hbWUoQkFDS0VORC0+c2VydmVyX2NlcnQpLAorICByYyA9IHg1MDlfbmFtZV9vbmVsaW5lKFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKICAgaWYocmMpIHsKICAgICBpZihzdHJpY3QpCkBAIC0zMzkzLDI3ICszODE4LDMyIEBACiAgICAgICAgZGVhbGxvY2F0aW5nIHRoZSBjZXJ0aWZpY2F0ZS4gKi8KIAogICAgIC8qIGUuZy4gbWF0Y2ggaXNzdWVyIG5hbWUgd2l0aCBwcm92aWRlZCBpc3N1ZXIgY2VydGlmaWNhdGUgKi8KLSAgICBpZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSkgewotICAgICAgZnAgPSBCSU9fbmV3KEJJT19zX2ZpbGUoKSk7Ci0gICAgICBpZihmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAgICJCSU9fbmV3IHJldHVybiBOVUxMLCAiIE9TU0xfUEFDS0FHRQotICAgICAgICAgICAgICAiIGVycm9yICVzIiwKLSAgICAgICAgICAgICAgb3NzbF9zdHJlcnJvcihFUlJfZ2V0X2Vycm9yKCksIGVycm9yX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXJyb3JfYnVmZmVyKSkgKTsKLSAgICAgICAgWDUwOV9mcmVlKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KTsKLSAgICAgICAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSBOVUxMOwotICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgIH0KKyAgICBpZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSB8fCBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0X2Jsb2IpKSB7CisgICAgICBpZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0X2Jsb2IpKQorICAgICAgICBmcCA9IEJJT19uZXdfbWVtX2J1ZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0X2Jsb2IpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KVNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnRfYmxvYiktPmxlbik7CisgICAgICBlbHNlIHsKKyAgICAgICAgZnAgPSBCSU9fbmV3KEJJT19zX2ZpbGUoKSk7CisgICAgICAgIGlmKGZwID09IE5VTEwpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgICAgICJCSU9fbmV3IHJldHVybiBOVUxMLCAiIE9TU0xfUEFDS0FHRQorICAgICAgICAgICAgICAgICIgZXJyb3IgJXMiLAorICAgICAgICAgICAgICAgIG9zc2xfc3RyZXJyb3IoRVJSX2dldF9lcnJvcigpLCBlcnJvcl9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXJyb3JfYnVmZmVyKSkgKTsKKyAgICAgICAgICBYNTA5X2ZyZWUoYmFja2VuZC0+c2VydmVyX2NlcnQpOworICAgICAgICAgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgfQogCi0gICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpIDw9IDApIHsKLSAgICAgICAgaWYoc3RyaWN0KQotICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFVuYWJsZSB0byBvcGVuIGlzc3VlciBjZXJ0ICglcykiLAotICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKLSAgICAgICAgQklPX2ZyZWUoZnApOwotICAgICAgICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICAgICAgICBCQUNLRU5ELT5zZXJ2ZXJfY2VydCA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfSVNTVUVSX0VSUk9SOworICAgICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpIDw9IDApIHsKKyAgICAgICAgICBpZihzdHJpY3QpCisgICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBVbmFibGUgdG8gb3BlbiBpc3N1ZXIgY2VydCAoJXMpIiwKKyAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKKyAgICAgICAgICBCSU9fZnJlZShmcCk7CisgICAgICAgICAgWDUwOV9mcmVlKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KTsKKyAgICAgICAgICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgaXNzdWVyID0gUEVNX3JlYWRfYmlvX1g1MDkoZnAsIE5VTEwsIFpFUk9fTlVMTCwgTlVMTCk7CkBAIC0zNDIzLDE5ICszODUzLDE5IEBACiAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpOwogICAgICAgICBCSU9fZnJlZShmcCk7CiAgICAgICAgIFg1MDlfZnJlZShpc3N1ZXIpOwotICAgICAgICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICAgICAgICBCQUNLRU5ELT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgICAgICAgIFg1MDlfZnJlZShiYWNrZW5kLT5zZXJ2ZXJfY2VydCk7CisgICAgICAgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CiAgICAgICB9CiAKLSAgICAgIGlmKFg1MDlfY2hlY2tfaXNzdWVkKGlzc3VlciwgQkFDS0VORC0+c2VydmVyX2NlcnQpICE9IFg1MDlfVl9PSykgeworICAgICAgaWYoWDUwOV9jaGVja19pc3N1ZWQoaXNzdWVyLCBiYWNrZW5kLT5zZXJ2ZXJfY2VydCkgIT0gWDUwOV9WX09LKSB7CiAgICAgICAgIGlmKHN0cmljdCkKICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDZXJ0aWZpY2F0ZSBpc3N1ZXIgY2hlY2sgZmFpbGVkICglcykiLAogICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKICAgICAgICAgQklPX2ZyZWUoZnApOwogICAgICAgICBYNTA5X2ZyZWUoaXNzdWVyKTsKLSAgICAgICAgWDUwOV9mcmVlKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KTsKLSAgICAgICAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSBOVUxMOworICAgICAgICBYNTA5X2ZyZWUoYmFja2VuZC0+c2VydmVyX2NlcnQpOworICAgICAgICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfSVNTVUVSX0VSUk9SOwogICAgICAgfQogCkBAIC0zNDQ1LDcgKzM4NzUsNyBAQAogICAgICAgWDUwOV9mcmVlKGlzc3Vlcik7CiAgICAgfQogCi0gICAgbGVyciA9ICpjZXJ0dmVyaWZ5cmVzdWx0ID0gU1NMX2dldF92ZXJpZnlfcmVzdWx0KEJBQ0tFTkQtPmhhbmRsZSk7CisgICAgbGVyciA9ICpjZXJ0dmVyaWZ5cmVzdWx0ID0gU1NMX2dldF92ZXJpZnlfcmVzdWx0KGJhY2tlbmQtPmhhbmRsZSk7CiAKICAgICBpZigqY2VydHZlcmlmeXJlc3VsdCAhPSBYNTA5X1ZfT0spIHsKICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewpAQCAtMzQ3MCw4ICszOTAwLDggQEAKICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpIHsKICAgICByZXN1bHQgPSB2ZXJpZnlzdGF0dXMoY29ubiwgY29ubnNzbCk7CiAgICAgaWYocmVzdWx0KSB7Ci0gICAgICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICAgICAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSBOVUxMOworICAgICAgWDUwOV9mcmVlKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KTsKKyAgICAgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICB9CkBAIC0zNDg0LDEzICszOTE0LDEzIEBACiAgIHB0ciA9IFNTTF9JU19QUk9YWSgpID8gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfT1JJR107CiAgIGlmKCFyZXN1bHQgJiYgcHRyKSB7Ci0gICAgcmVzdWx0ID0gcGtwX3Bpbl9wZWVyX3B1YmtleShkYXRhLCBCQUNLRU5ELT5zZXJ2ZXJfY2VydCwgcHRyKTsKKyAgICByZXN1bHQgPSBwa3BfcGluX3BlZXJfcHVia2V5KGRhdGEsIGJhY2tlbmQtPnNlcnZlcl9jZXJ0LCBwdHIpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcGlubmVkIHB1YmxpYyBrZXkhIik7CiAgIH0KIAotICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICBCQUNLRU5ELT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgIFg1MDlfZnJlZShiYWNrZW5kLT5zZXJ2ZXJfY2VydCk7CisgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM1MzEsNyArMzk2MSw2IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIHRpbWVfdCB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC0zNTQyLDcgKzM5NzEsNyBAQAogCiAgIGlmKHNzbF9jb25uZWN0XzEgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewogICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG1vcmUgdGltZSB3ZSdyZSBhbGxvd2VkICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMzU2MCw3ICszOTg5LDcgQEAKICAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKIAogICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMzY1NywxNCArNDA4NiwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQogewogICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKLSAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKnByb3h5c3NsID0gJmNvbm4tPnByb3h5X3NzbFtjb25uaW5kZXhdOwotCiAgIGlmKGNvbm5zc2wtPmJhY2tlbmQtPmhhbmRsZSAmJiBTU0xfcGVuZGluZyhjb25uc3NsLT5iYWNrZW5kLT5oYW5kbGUpKQogICAgIHJldHVybiBUUlVFOwotCi0gIGlmKHByb3h5c3NsLT5iYWNrZW5kLT5oYW5kbGUgJiYgU1NMX3BlbmRpbmcocHJveHlzc2wtPmJhY2tlbmQtPmhhbmRsZSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIHsKKyAgICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqcHJveHlzc2wgPSAmY29ubi0+cHJveHlfc3NsW2Nvbm5pbmRleF07CisgICAgaWYocHJveHlzc2wtPmJhY2tlbmQtPmhhbmRsZSAmJiBTU0xfcGVuZGluZyhwcm94eXNzbC0+YmFja2VuZC0+aGFuZGxlKSkKKyAgICAgIHJldHVybiBUUlVFOworICB9CisjZW5kaWYKICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC0zNjg0LDE0ICs0MTE0LDE1IEBACiAgIGludCBtZW1sZW47CiAgIGludCByYzsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAogICBFUlJfY2xlYXJfZXJyb3IoKTsKIAogICBtZW1sZW4gPSAobGVuID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWxlbjsKLSAgcmMgPSBTU0xfd3JpdGUoQkFDS0VORC0+aGFuZGxlLCBtZW0sIG1lbWxlbik7CisgIHJjID0gU1NMX3dyaXRlKGJhY2tlbmQtPmhhbmRsZSwgbWVtLCBtZW1sZW4pOwogCiAgIGlmKHJjIDw9IDApIHsKLSAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgcmMpOworICAgIGVyciA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCByYyk7CiAKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgpAQCAtMzcwMiwxOCArNDEzMywzMyBAQAogICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CiAgICAgICByZXR1cm4gLTE7CiAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0xfd3JpdGUoKSByZXR1cm5lZCBTWVNDQUxMLCBlcnJubyA9ICVkIiwKLSAgICAgICAgICAgIFNPQ0tFUlJOTyk7Ci0gICAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOwotICAgICAgcmV0dXJuIC0xOworICAgICAgeworICAgICAgICBpbnQgc29ja2VyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7CisgICAgICAgIGlmKHNzbGVycm9yKQorICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICBlbHNlIGlmKHNvY2tlcnIpCisgICAgICAgICAgQ3VybF9zdHJlcnJvcihzb2NrZXJyLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3RybmNweShlcnJvcl9idWZmZXIsIFNTTF9FUlJPUl90b19zdHIoZXJyKSwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICAgIGVycm9yX2J1ZmZlcltzaXplb2YoZXJyb3JfYnVmZmVyKSAtIDFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihjb25uLT5kYXRhLCBPU1NMX1BBQ0tBR0UgIiBTU0xfd3JpdGU6ICVzLCBlcnJubyAlZCIsCisgICAgICAgICAgICAgIGVycm9yX2J1ZmZlciwgc29ja2Vycik7CisgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CiAgICAgICAvKiAgQSBmYWlsdXJlIGluIHRoZSBTU0wgbGlicmFyeSBvY2N1cnJlZCwgdXN1YWxseSBhIHByb3RvY29sIGVycm9yLgogICAgICAgICAgIFRoZSBPcGVuU1NMIGVycm9yIHF1ZXVlIGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGVycm9yLiAqLwogICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7CiAgICAgICBpZihFUlJfR0VUX0xJQihzc2xlcnJvcikgPT0gRVJSX0xJQl9TU0wgJiYKICAgICAgICAgIEVSUl9HRVRfUkVBU09OKHNzbGVycm9yKSA9PSBTU0xfUl9CSU9fTk9UX1NFVCAmJgotICAgICAgICAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgJiYKLSAgICAgICAgIGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKSB7CisgICAgICAgICBjb25uLT5zc2xbc29ja2luZGV4XS5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgICAgICYmIGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlCisjZW5kaWYKKyAgICAgICAgKSB7CiAgICAgICAgIGNoYXIgdmVyWzEyMF07CiAgICAgICAgIEN1cmxfb3NzbF92ZXJzaW9uKHZlciwgMTIwKTsKICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkVycm9yOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGRvdWJsZSBTU0wgdHVubmVsaW5nLiIsCkBAIC0zNzQ2LDIxICs0MTkyLDI1IEBACiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCBidWZmc2l6ZTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAogICBFUlJfY2xlYXJfZXJyb3IoKTsKIAogICBidWZmc2l6ZSA9IChidWZmZXJzaXplID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWJ1ZmZlcnNpemU7Ci0gIG5yZWFkID0gKHNzaXplX3QpU1NMX3JlYWQoQkFDS0VORC0+aGFuZGxlLCBidWYsIGJ1ZmZzaXplKTsKKyAgbnJlYWQgPSAoc3NpemVfdClTU0xfcmVhZChiYWNrZW5kLT5oYW5kbGUsIGJ1ZiwgYnVmZnNpemUpOwogICBpZihucmVhZCA8PSAwKSB7CiAgICAgLyogZmFpbGVkIFNTTF9yZWFkICovCi0gICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCAoaW50KW5yZWFkKTsKKyAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihiYWNrZW5kLT5oYW5kbGUsIChpbnQpbnJlYWQpOwogCiAgICAgc3dpdGNoKGVycikgewogICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6IC8qIHRoaXMgaXMgbm90IGFuIGVycm9yICovCiAgICAgICBicmVhazsKICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjogLyogbm8gbW9yZSBkYXRhICovCiAgICAgICAvKiBjbG9zZV9ub3RpZnkgYWxlcnQgKi8KLSAgICAgIGNvbm5jbG9zZShjb25uLCAiVExTIGNsb3NlX25vdGlmeSIpOworICAgICAgaWYobnVtID09IEZJUlNUU09DS0VUKQorICAgICAgICAvKiBtYXJrIHRoZSBjb25uZWN0aW9uIGZvciBjbG9zZSBpZiBpdCBpcyBpbmRlZWQgdGhlIGNvbnRyb2wKKyAgICAgICAgICAgY29ubmVjdGlvbiAqLworICAgICAgICBjb25uY2xvc2UoY29ubiwgIlRMUyBjbG9zZV9ub3RpZnkiKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgpAQCAtMzc3NSwxNCArNDIyNSw0NCBAQAogICAgICAgaWYoKG5yZWFkIDwgMCkgfHwgc3NsZXJyb3IpIHsKICAgICAgICAgLyogSWYgdGhlIHJldHVybiBjb2RlIHdhcyBuZWdhdGl2ZSBvciB0aGVyZSBhY3R1YWxseSBpcyBhbiBlcnJvciBpbiB0aGUKICAgICAgICAgICAgcXVldWUgKi8KKyAgICAgICAgaW50IHNvY2tlcnIgPSBTT0NLRVJSTk87CisgICAgICAgIGlmKHNzbGVycm9yKQorICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICBlbHNlIGlmKHNvY2tlcnIgJiYgZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKQorICAgICAgICAgIEN1cmxfc3RyZXJyb3Ioc29ja2VyciwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0cm5jcHkoZXJyb3JfYnVmZmVyLCBTU0xfRVJST1JfdG9fc3RyKGVyciksIHNpemVvZihlcnJvcl9idWZmZXIpKTsKKyAgICAgICAgICBlcnJvcl9idWZmZXJbc2l6ZW9mKGVycm9yX2J1ZmZlcikgLSAxXSA9ICdcMCc7CisgICAgICAgIH0KICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgT1NTTF9QQUNLQUdFICIgU1NMX3JlYWQ6ICVzLCBlcnJubyAlZCIsCi0gICAgICAgICAgICAgIChzc2xlcnJvciA/Ci0gICAgICAgICAgICAgICBvc3NsX3N0cmVycm9yKHNzbGVycm9yLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKSA6Ci0gICAgICAgICAgICAgICBTU0xfRVJST1JfdG9fc3RyKGVycikpLAotICAgICAgICAgICAgICBTT0NLRVJSTk8pOworICAgICAgICAgICAgICBlcnJvcl9idWZmZXIsIHNvY2tlcnIpOwogICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CisgICAgICAvKiBGb3IgZGVidWcgYnVpbGRzIGJlIGEgbGl0dGxlIHN0cmljdGVyIGFuZCBlcnJvciBvbiBhbnkKKyAgICAgICAgIFNTTF9FUlJPUl9TWVNDQUxMLiBGb3IgZXhhbXBsZSBhIHNlcnZlciBtYXkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgIGFicnVwdGx5IHdpdGhvdXQgYSBjbG9zZV9ub3RpZnkgYWxlcnQuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKKyAgICAgICAgIHBlZXJzIHdlIGRvbid0IGRvIHRoaXMgYnkgZGVmYXVsdC4gIzQ2MjQKKworICAgICAgICAgV2UgY2FuIHVzZSB0aGlzIHRvIGdhdWdlIGhvdyBtYW55IHVzZXJzIG1heSBiZSBhZmZlY3RlZCwgYW5kCisgICAgICAgICBpZiBpdCBnb2VzIG9rIGV2ZW50dWFsbHkgdHJhbnNpdGlvbiB0byBhbGxvdyBpbiBkZXYgYW5kIHJlbGVhc2Ugd2l0aAorICAgICAgICAgdGhlIG5ld2VzdCBPcGVuU1NMOiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDEwMTAwMEwpICovCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaWYoZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKSB7CisgICAgICAgIGludCBzb2NrZXJyID0gU09DS0VSUk5POworICAgICAgICBpZihzb2NrZXJyKQorICAgICAgICAgIEN1cmxfc3RyZXJyb3Ioc29ja2VyciwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIG1zbnByaW50ZihlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiBjbG9zZWQgYWJydXB0bHkiKTsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihjb25uLT5kYXRhLCBPU1NMX1BBQ0tBR0UgIiBTU0xfcmVhZDogJXMsIGVycm5vICVkIgorICAgICAgICAgICAgICAiIChGYXRhbCBiZWNhdXNlIHRoaXMgaXMgYSBjdXJsIGRlYnVnIGJ1aWxkKSIsCisgICAgICAgICAgICAgIGVycm9yX2J1ZmZlciwgc29ja2Vycik7CisgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgfQogICByZXR1cm4gbnJlYWQ7CkBAIC0zNzkwLDEzICs0MjcwLDM1IEBACiAKIHN0YXRpYyBzaXplX3QgQ3VybF9vc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKLSNpZmRlZiBPUEVOU1NMX0lTX0JPUklOR1NTTAorI2lmZGVmIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSCisjaWYgTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIgPCAweDIwNzAxMDBmTAorICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVseC4lbHguJWx4IiwKKyAgICAgICAgICAgICAgICAgICBPU1NMX1BBQ0tBR0UsCisgICAgICAgICAgICAgICAgICAgKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSPj4yOCkmMHhmLAorICAgICAgICAgICAgICAgICAgIChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUj4+MjApJjB4ZmYsCisgICAgICAgICAgICAgICAgICAgKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSPj4xMikmMHhmZik7CisjZWxzZSAvKiBPcGVuU1NMX3ZlcnNpb24oKSBmaXJzdCBhcHBlYXJlZCBpbiBMaWJyZVNTTCAyLjcuMSAqLworICBjaGFyICpwOworICBpbnQgY291bnQ7CisgIGNvbnN0IGNoYXIgKnZlciA9IE9wZW5TU0xfdmVyc2lvbihPUEVOU1NMX1ZFUlNJT04pOworICBjb25zdCBjaGFyIGV4cGVjdGVkW10gPSBPU1NMX1BBQ0tBR0UgIiAiOyAvKiBpZSAiTGlicmVTU0wgIiAqLworICBpZihDdXJsX3N0cm5jYXNlY29tcGFyZSh2ZXIsIGV4cGVjdGVkLCBzaXplb2YoZXhwZWN0ZWQpIC0gMSkpIHsKKyAgICB2ZXIgKz0gc2l6ZW9mKGV4cGVjdGVkKSAtIDE7CisgIH0KKyAgY291bnQgPSBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiJXMvJXMiLCBPU1NMX1BBQ0tBR0UsIHZlcik7CisgIGZvcihwID0gYnVmZmVyOyAqcDsgKytwKSB7CisgICAgaWYoSVNTUEFDRSgqcCkpCisgICAgICAqcCA9ICdfJzsKKyAgfQorICByZXR1cm4gY291bnQ7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9JU19CT1JJTkdTU0wpCiAgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCBPU1NMX1BBQ0tBR0UpOwogI2VsaWYgZGVmaW5lZChIQVZFX09QRU5TU0xfVkVSU0lPTikgJiYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fU1RSSU5HKQogICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVzIiwKICAgICAgICAgICAgICAgICAgICBPU1NMX1BBQ0tBR0UsIE9wZW5TU0xfdmVyc2lvbihPUEVOU1NMX1ZFUlNJT05fU1RSSU5HKSk7CiAjZWxzZQotICAvKiBub3QgQm9yaW5nU1NMIGFuZCBub3QgdXNpbmcgT3BlblNTTF92ZXJzaW9uICovCisgIC8qIG5vdCBMaWJyZVNTTCwgQm9yaW5nU1NMIGFuZCBub3QgdXNpbmcgT3BlblNTTF92ZXJzaW9uICovCiAKICAgY2hhciBzdWJbM107CiAgIHVuc2lnbmVkIGxvbmcgc3NsZWF5X3ZhbHVlOwpAQCAtMzg4MSw3ICs0MzgzLDcgQEAKICAgdW5zaWduZWQgaW50IGxlbiA9IDA7CiAgICh2b2lkKSB1bnVzZWQ7CiAKLSAgbWRjdHggPSAgRVZQX01EX0NUWF9jcmVhdGUoKTsKKyAgbWRjdHggPSBFVlBfTURfQ1RYX2NyZWF0ZSgpOwogICBFVlBfRGlnZXN0SW5pdF9leChtZGN0eCwgRVZQX3NoYTI1NigpLCBOVUxMKTsKICAgRVZQX0RpZ2VzdFVwZGF0ZShtZGN0eCwgdG1wLCB0bXBsZW4pOwogICBFVlBfRGlnZXN0RmluYWxfZXgobWRjdHgsIHNoYTI1NnN1bSwgJmxlbik7CkBAIC0zOTA0LDggKzQ0MDYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8pCiB7CiAgIC8qIExlZ2FjeTogQ1VSTElORk9fVExTX1NFU1NJT04gbXVzdCByZXR1cm4gYW4gU1NMX0NUWCBwb2ludGVyLiAqLworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIHJldHVybiBpbmZvID09IENVUkxJTkZPX1RMU19TRVNTSU9OID8KLSAgICAgICAgICh2b2lkICopQkFDS0VORC0+Y3R4IDogKHZvaWQgKilCQUNLRU5ELT5oYW5kbGU7CisgICAgICAgICAodm9pZCAqKWJhY2tlbmQtPmN0eCA6ICh2b2lkICopYmFja2VuZC0+aGFuZGxlOwogfQogCiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfb3BlbnNzbCA9IHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhMjZiNC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwotICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTEsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvdXJjZSBmaWxlIGZvciBhbGwgUG9sYXJTU0wtc3BlY2lmaWMgY29kZSBmb3IgdGhlIFRMUy9TU0wgbGF5ZXIuIE5vIGNvZGUKLSAqIGJ1dCB2dGxzLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWZkZWYgVVNFX1BPTEFSU1NMCi0jaW5jbHVkZSA8cG9sYXJzc2wvbmV0Lmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvc3NsLmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvY2VydHMuaD4KLSNpbmNsdWRlIDxwb2xhcnNzbC94NTA5Lmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvdmVyc2lvbi5oPgotI2luY2x1ZGUgPHBvbGFyc3NsL3NoYTI1Ni5oPgotCi0jaWYgUE9MQVJTU0xfVkVSU0lPTl9OVU1CRVIgPCAweDAxMDMwMDAwCi0jZXJyb3IgdG9vIG9sZCBQb2xhclNTTAotI2VuZGlmCi0KLSNpbmNsdWRlIDxwb2xhcnNzbC9lcnJvci5oPgotI2luY2x1ZGUgPHBvbGFyc3NsL2VudHJvcHkuaD4KLSNpbmNsdWRlIDxwb2xhcnNzbC9jdHJfZHJiZy5oPgotCi0jaW5jbHVkZSAidXJsZGF0YS5oIgotI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAiaW5ldF9wdG9uLmgiCi0jaW5jbHVkZSAicG9sYXJzc2wuaCIKLSNpbmNsdWRlICJ2dGxzLmgiCi0jaW5jbHVkZSAicGFyc2VkYXRlLmgiCi0jaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwotI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgInN0cmNhc2UuaCIKLSNpbmNsdWRlICJwb2xhcnNzbF90aHJlYWRsb2NrLmgiCi0jaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCi0jaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLS8qIFNlZSBodHRwczovL3Rscy5tYmVkLm9yZy9kaXNjdXNzaW9ucy9nZW5lcmljLwotICAgaG93dG8tZGV0ZXJtaW5lLWV4YWN0LWJ1ZmZlci1sZW4tZm9yLW1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2RlcgotKi8KLSNkZWZpbmUgUlNBX1BVQl9ERVJfTUFYX0JZVEVTICAgKDM4ICsgMiAqIFBPTEFSU1NMX01QSV9NQVhfU0laRSkKLSNkZWZpbmUgRUNQX1BVQl9ERVJfTUFYX0JZVEVTICAgKDMwICsgMiAqIFBPTEFSU1NMX0VDUF9NQVhfQllURVMpCi0KLSNkZWZpbmUgUFVCX0RFUl9NQVhfQllURVMgICAoUlNBX1BVQl9ERVJfTUFYX0JZVEVTID4gRUNQX1BVQl9ERVJfTUFYX0JZVEVTID8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUFVCX0RFUl9NQVhfQllURVMgOiBFQ1BfUFVCX0RFUl9NQVhfQllURVMpCi0KLXN0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKLSAgY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKLSAgZW50cm9weV9jb250ZXh0IGVudHJvcHk7Ci0gIHNzbF9jb250ZXh0IHNzbDsKLSAgaW50IHNlcnZlcl9mZDsKLSAgeDUwOV9jcnQgY2FjZXJ0OwotICB4NTA5X2NydCBjbGljZXJ0OwotICB4NTA5X2NybCBjcmw7Ci0gIHJzYV9jb250ZXh0IHJzYTsKLX07Ci0KLSNkZWZpbmUgQkFDS0VORCBjb25uc3NsLT5iYWNrZW5kCi0KLS8qIGFwcGx5IHRocmVhZGluZz8gKi8KLSNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSB8fCBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKQotI2RlZmluZSBUSFJFQURJTkdfU1VQUE9SVAotI2VuZGlmCi0KLSNpZm5kZWYgUE9MQVJTU0xfRVJST1JfQwotI2RlZmluZSBlcnJvcl9zdHJlcnJvcih4LHkseikKLSNlbmRpZiAvKiBQT0xBUlNTTF9FUlJPUl9DICovCi0KLQotI2lmIGRlZmluZWQoVEhSRUFESU5HX1NVUFBPUlQpCi1zdGF0aWMgZW50cm9weV9jb250ZXh0IGVudHJvcHk7Ci0KLXN0YXRpYyBpbnQgIGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCAgPSAwOwotCi0vKiBzdGFydCBvZiBlbnRyb3B5X2luaXRfbXV0ZXgoKSAqLwotc3RhdGljIHZvaWQgZW50cm9weV9pbml0X211dGV4KGVudHJvcHlfY29udGV4dCAqY3R4KQotewotICAvKiBsb2NrIDAgPSBlbnRyb3B5X2luaXRfbXV0ZXgoKSAqLwotICBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKDApOwotICBpZihlbnRyb3B5X2luaXRfaW5pdGlhbGl6ZWQgPT0gMCkgewotICAgIGVudHJvcHlfaW5pdChjdHgpOwotICAgIGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCA9IDE7Ci0gIH0KLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKDApOwotfQotLyogZW5kIG9mIGVudHJvcHlfaW5pdF9tdXRleCgpICovCi0KLS8qIHN0YXJ0IG9mIGVudHJvcHlfZnVuY19tdXRleCgpICovCi1zdGF0aWMgaW50IGVudHJvcHlfZnVuY19tdXRleCh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4pCi17Ci0gIGludCByZXQ7Ci0gIC8qIGxvY2sgMSA9IGVudHJvcHlfZnVuY19tdXRleCgpICovCi0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMSk7Ci0gIHJldCA9IGVudHJvcHlfZnVuYyhkYXRhLCBvdXRwdXQsIGxlbik7Ci0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigxKTsKLQotICByZXR1cm4gcmV0OwotfQotLyogZW5kIG9mIGVudHJvcHlfZnVuY19tdXRleCgpICovCi0KLSNlbmRpZiAvKiBUSFJFQURJTkdfU1VQUE9SVCAqLwotCi0vKiBEZWZpbmUgdGhpcyB0byBlbmFibGUgbG90cyBvZiBkZWJ1Z2dpbmcgZm9yIFBvbGFyU1NMICovCi0jdW5kZWYgUE9MQVJTU0xfREVCVUcKLQotI2lmZGVmIFBPTEFSU1NMX0RFQlVHCi1zdGF0aWMgdm9pZCBwb2xhcnNzbF9kZWJ1Zyh2b2lkICpjb250ZXh0LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmxpbmUpCi17Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBOVUxMOwotCi0gIGlmKCFjb250ZXh0KQotICAgIHJldHVybjsKLQotICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKiljb250ZXh0OwotCi0gIGluZm9mKGRhdGEsICIlcyIsIGxpbmUpOwotICAodm9pZCkgbGV2ZWw7Ci19Ci0jZWxzZQotI2VuZGlmCi0KLS8qIEFMUE4gZm9yIGh0dHAyPyAqLwotI2lmZGVmIFBPTEFSU1NMX1NTTF9BTFBOCi0jICBkZWZpbmUgSEFTX0FMUE4KLSNlbmRpZgotCi1zdGF0aWMgQ3VybF9yZWN2IHBvbGFyc3NsX3JlY3Y7Ci1zdGF0aWMgQ3VybF9zZW5kIHBvbGFyc3NsX3NlbmQ7Ci0KLXN0YXRpYyBDVVJMY29kZSBwb2xhcnNzbF92ZXJzaW9uX2Zyb21fY3VybChpbnQgKnBvbGFydmVyLCBsb25nIHNzbF92ZXJzaW9uKQotewotICBzd2l0Y2goc3NsX3ZlcnNpb24pIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgICAgKnBvbGFydmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMTsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgotICAgICAgKnBvbGFydmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMjsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgotICAgICAgKnBvbGFydmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMzsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXNldF9zc2xfdmVyc2lvbl9taW5fbWF4KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBsb25nIHNzbF92ZXJzaW9uID0gU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pOwotICBsb25nIHNzbF92ZXJzaW9uX21heCA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uX21heCk7Ci0gIGludCBzc2xfbWluX3ZlciA9IFNTTF9NSU5PUl9WRVJTSU9OXzE7Ci0gIGludCBzc2xfbWF4X3ZlciA9IFNTTF9NSU5PUl9WRVJTSU9OXzE7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0gIHN3aXRjaChzc2xfdmVyc2lvbikgewotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0gICAgICBzc2xfdmVyc2lvbiA9IENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBzd2l0Y2goc3NsX3ZlcnNpb25fbWF4KSB7Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX05PTkU6Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQ6Ci0gICAgICBzc2xfdmVyc2lvbl9tYXggPSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJlc3VsdCA9IHBvbGFyc3NsX3ZlcnNpb25fZnJvbV9jdXJsKCZzc2xfbWluX3Zlciwgc3NsX3ZlcnNpb24pOwotICBpZihyZXN1bHQpIHsKLSAgICBmYWlsZihkYXRhLCAidW5zdXBwb3J0ZWQgbWluIHZlcnNpb24gcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIHJlc3VsdCA9IHBvbGFyc3NsX3ZlcnNpb25fZnJvbV9jdXJsKCZzc2xfbWF4X3Zlciwgc3NsX3ZlcnNpb25fbWF4ID4+IDE2KTsKLSAgaWYocmVzdWx0KSB7Ci0gICAgZmFpbGYoZGF0YSwgInVuc3VwcG9ydGVkIG1heCB2ZXJzaW9uIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHNzbF9zZXRfbWluX3ZlcnNpb24oJkJBQ0tFTkQtPnNzbCwgU1NMX01BSk9SX1ZFUlNJT05fMywgc3NsX21pbl92ZXIpOwotICBzc2xfc2V0X21heF92ZXJzaW9uKCZCQUNLRU5ELT5zc2wsIFNTTF9NQUpPUl9WRVJTSU9OXzMsIHNzbF9tYXhfdmVyKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGNvbnN0IGNoYXIgKmNhcGF0aCA9IFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpOwotICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKLSAgICBjb25uLT5ob3N0Lm5hbWU7Ci0gIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKLSAgaW50IHJldCA9IC0xOwotICBjaGFyIGVycm9yYnVmWzEyOF07Ci0gIGVycm9yYnVmWzBdID0gMDsKLQotICAvKiBQb2xhclNTTCBvbmx5IHN1cHBvcnRzIFNTTHYzIGFuZCBUTFN2MSAqLwotICBpZihTU0xfQ09OTl9DT05GSUcodmVyc2lvbikgPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYyKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlBvbGFyU1NMIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotI2lmZGVmIFRIUkVBRElOR19TVVBQT1JUCi0gIGVudHJvcHlfaW5pdF9tdXRleCgmZW50cm9weSk7Ci0KLSAgaWYoKHJldCA9IGN0cl9kcmJnX2luaXQoJkJBQ0tFTkQtPmN0cl9kcmJnLCBlbnRyb3B5X2Z1bmNfbXV0ZXgsICZlbnRyb3B5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKSkgIT0gMCkgewotICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgLSBQb2xhclNTTDogY3RyX2RyYmdfaW5pdCByZXR1cm5lZCAoLTB4JTA0WCkgJXNcbiIsCi0gICAgICAgICAgLXJldCwgZXJyb3JidWYpOwotICB9Ci0jZWxzZQotICBlbnRyb3B5X2luaXQoJkJBQ0tFTkQtPmVudHJvcHkpOwotCi0gIGlmKChyZXQgPSBjdHJfZHJiZ19pbml0KCZCQUNLRU5ELT5jdHJfZHJiZywgZW50cm9weV9mdW5jLCAmQkFDS0VORC0+ZW50cm9weSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCkpICE9IDApIHsKLSAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICBmYWlsZihkYXRhLCAiRmFpbGVkIC0gUG9sYXJTU0w6IGN0cl9kcmJnX2luaXQgcmV0dXJuZWQgKC0weCUwNFgpICVzXG4iLAotICAgICAgICAgIC1yZXQsIGVycm9yYnVmKTsKLSAgfQotI2VuZGlmIC8qIFRIUkVBRElOR19TVVBQT1JUICovCi0KLSAgLyogTG9hZCB0aGUgdHJ1c3RlZCBDQSAqLwotICBtZW1zZXQoJkJBQ0tFTkQtPmNhY2VydCwgMCwgc2l6ZW9mKHg1MDlfY3J0KSk7Ci0KLSAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpIHsKLSAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9maWxlKCZCQUNLRU5ELT5jYWNlcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSk7Ci0KLSAgICBpZihyZXQ8MCkgewotICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBjYSBjZXJ0IGZpbGUgJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLCAtcmV0LCBlcnJvcmJ1Zik7Ci0KLSAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKLSAgICB9Ci0gIH0KLQotICBpZihjYXBhdGgpIHsKLSAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9wYXRoKCZCQUNLRU5ELT5jYWNlcnQsIGNhcGF0aCk7Ci0KLSAgICBpZihyZXQ8MCkgewotICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBjYSBjZXJ0IHBhdGggJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIGNhcGF0aCwgLXJldCwgZXJyb3JidWYpOwotCi0gICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpCi0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7Ci0gICAgfQotICB9Ci0KLSAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlICovCi0gIG1lbXNldCgmQkFDS0VORC0+Y2xpY2VydCwgMCwgc2l6ZW9mKHg1MDlfY3J0KSk7Ci0KLSAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkpIHsKLSAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9maWxlKCZCQUNLRU5ELT5jbGljZXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCkpOwotCi0gICAgaWYocmV0KSB7Ci0gICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIGNsaWVudCBjZXJ0IGZpbGUgJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGNlcnQpLCAtcmV0LCBlcnJvcmJ1Zik7Ci0KLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07Ci0gICAgfQotICB9Ci0KLSAgLyogTG9hZCB0aGUgY2xpZW50IHByaXZhdGUga2V5ICovCi0gIGlmKFNTTF9TRVRfT1BUSU9OKGtleSkpIHsKLSAgICBwa19jb250ZXh0IHBrOwotICAgIHBrX2luaXQoJnBrKTsKLSAgICByZXQgPSBwa19wYXJzZV9rZXlmaWxlKCZwaywgU1NMX1NFVF9PUFRJT04oa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKLSAgICBpZihyZXQgPT0gMCAmJiAhcGtfY2FuX2RvKCZwaywgUE9MQVJTU0xfUEtfUlNBKSkKLSAgICAgIHJldCA9IFBPTEFSU1NMX0VSUl9QS19UWVBFX01JU01BVENIOwotICAgIGlmKHJldCA9PSAwKQotICAgICAgcnNhX2NvcHkoJkJBQ0tFTkQtPnJzYSwgcGtfcnNhKHBrKSk7Ci0gICAgZWxzZQotICAgICAgcnNhX2ZyZWUoJkJBQ0tFTkQtPnJzYSk7Ci0gICAgcGtfZnJlZSgmcGspOwotCi0gICAgaWYocmV0KSB7Ci0gICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIHByaXZhdGUga2V5ICVzIC0gUG9sYXJTU0w6ICgtMHglMDRYKSAlcyIsCi0gICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpLCAtcmV0LCBlcnJvcmJ1Zik7Ci0KLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07Ci0gICAgfQotICB9Ci0KLSAgLyogTG9hZCB0aGUgQ1JMICovCi0gIG1lbXNldCgmQkFDS0VORC0+Y3JsLCAwLCBzaXplb2YoeDUwOV9jcmwpKTsKLQotICBpZihTU0xfU0VUX09QVElPTihDUkxmaWxlKSkgewotICAgIHJldCA9IHg1MDlfY3JsX3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpKTsKLQotICAgIGlmKHJldCkgewotICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBDUkwgZmlsZSAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSksIC1yZXQsIGVycm9yYnVmKTsKLQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKLSAgICB9Ci0gIH0KLQotICBpbmZvZihkYXRhLCAiUG9sYXJTU0w6IENvbm5lY3RpbmcgdG8gJXM6JWRcbiIsIGhvc3RuYW1lLCBwb3J0KTsKLQotICBpZihzc2xfaW5pdCgmQkFDS0VORC0+c3NsKSkgewotICAgIGZhaWxmKGRhdGEsICJQb2xhclNTTDogc3NsX2luaXQgZmFpbGVkIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgICBzc2xfc2V0X21pbl92ZXJzaW9uKCZCQUNLRU5ELT5zc2wsIFNTTF9NQUpPUl9WRVJTSU9OXzMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTU0xfTUlOT1JfVkVSU0lPTl8xKTsKLSAgICBicmVhazsKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6Ci0gICAgc3NsX3NldF9taW5fdmVyc2lvbigmQkFDS0VORC0+c3NsLCBTU0xfTUFKT1JfVkVSU0lPTl8zLAotICAgICAgICAgICAgICAgICAgICAgICAgU1NMX01JTk9SX1ZFUlNJT05fMCk7Ci0gICAgc3NsX3NldF9tYXhfdmVyc2lvbigmQkFDS0VORC0+c3NsLCBTU0xfTUFKT1JfVkVSU0lPTl8zLAotICAgICAgICAgICAgICAgICAgICAgICAgU1NMX01JTk9SX1ZFUlNJT05fMCk7Ci0gICAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMOiBGb3JjZWQgbWluLiBTU0wgVmVyc2lvbiB0byBiZSBTU0x2M1xuIik7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0gICAgewotICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gc2V0X3NzbF92ZXJzaW9uX21pbl9tYXgoY29ubiwgc29ja2luZGV4KTsKLSAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgZGVmYXVsdDoKLSAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0gIHNzbF9zZXRfZW5kcG9pbnQoJkJBQ0tFTkQtPnNzbCwgU1NMX0lTX0NMSUVOVCk7Ci0gIHNzbF9zZXRfYXV0aG1vZGUoJkJBQ0tFTkQtPnNzbCwgU1NMX1ZFUklGWV9PUFRJT05BTCk7Ci0KLSAgc3NsX3NldF9ybmcoJkJBQ0tFTkQtPnNzbCwgY3RyX2RyYmdfcmFuZG9tLAotICAgICAgICAgICAgICAmQkFDS0VORC0+Y3RyX2RyYmcpOwotICBzc2xfc2V0X2JpbygmQkFDS0VORC0+c3NsLAotICAgICAgICAgICAgICBuZXRfcmVjdiwgJmNvbm4tPnNvY2tbc29ja2luZGV4XSwKLSAgICAgICAgICAgICAgbmV0X3NlbmQsICZjb25uLT5zb2NrW3NvY2tpbmRleF0pOwotCi0gIHNzbF9zZXRfY2lwaGVyc3VpdGVzKCZCQUNLRU5ELT5zc2wsIHNzbF9saXN0X2NpcGhlcnN1aXRlcygpKTsKLQotICAvKiBDaGVjayBpZiB0aGVyZSdzIGEgY2FjaGVkIElEIHdlIGNhbi9zaG91bGQgdXNlIGhlcmUhICovCi0gIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgewotICAgIHZvaWQgKm9sZF9zZXNzaW9uID0gTlVMTDsKLQotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7Ci0gICAgICByZXQgPSBzc2xfc2V0X3Nlc3Npb24oJkJBQ0tFTkQtPnNzbCwgb2xkX3Nlc3Npb24pOwotICAgICAgaWYocmV0KSB7Ci0gICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzc2xfc2V0X3Nlc3Npb24gcmV0dXJuZWQgLTB4JXgiLCAtcmV0KTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgICAgfQotICAgICAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMIHJlLXVzaW5nIHNlc3Npb25cbiIpOwotICAgIH0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwotICB9Ci0KLSAgc3NsX3NldF9jYV9jaGFpbigmQkFDS0VORC0+c3NsLAotICAgICAgICAgICAgICAgICAgICZCQUNLRU5ELT5jYWNlcnQsCi0gICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmNybCwKLSAgICAgICAgICAgICAgICAgICBob3N0bmFtZSk7Ci0KLSAgc3NsX3NldF9vd25fY2VydF9yc2EoJkJBQ0tFTkQtPnNzbCwKLSAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmNsaWNlcnQsICZCQUNLRU5ELT5yc2EpOwotCi0gIGlmKHNzbF9zZXRfaG9zdG5hbWUoJkJBQ0tFTkQtPnNzbCwgaG9zdG5hbWUpKSB7Ci0gICAgLyogc3NsX3NldF9ob3N0bmFtZSgpIHNldHMgdGhlIG5hbWUgdG8gdXNlIGluIENOL1NBTiBjaGVja3MgKmFuZCogdGhlIG5hbWUKLSAgICAgICB0byBzZXQgaW4gdGhlIFNOSSBleHRlbnNpb24uIFNvIGV2ZW4gaWYgY3VybCBjb25uZWN0cyB0byBhIGhvc3QKLSAgICAgICBzcGVjaWZpZWQgYXMgYW4gSVAgYWRkcmVzcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQuICovCi0gICAgZmFpbGYoZGF0YSwgImNvdWxkbid0IHNldCBob3N0bmFtZSBpbiBQb2xhclNTTCIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0jaWZkZWYgSEFTX0FMUE4KLSAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqcHJvdG9jb2xzWzNdOwotICAgIGludCBjdXIgPSAwOwotCi0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMikgewotICAgICAgcHJvdG9jb2xzW2N1cisrXSA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRDsKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHByb3RvY29sc1tjdXIrK10gPSBBTFBOX0hUVFBfMV8xOwotICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgQUxQTl9IVFRQXzFfMSk7Ci0KLSAgICBwcm90b2NvbHNbY3VyXSA9IE5VTEw7Ci0KLSAgICBzc2xfc2V0X2FscG5fcHJvdG9jb2xzKCZCQUNLRU5ELT5zc2wsIHByb3RvY29scyk7Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgUE9MQVJTU0xfREVCVUcKLSAgc3NsX3NldF9kYmcoJkJBQ0tFTkQtPnNzbCwgcG9sYXJzc2xfZGVidWcsIGRhdGEpOwotI2VuZGlmCi0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzI7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBpbnQgcmV0OwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGNoYXIgYnVmZmVyWzEwMjRdOwotICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0gU1NMX0lTX1BST1hZKCkgPwotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKLQotCi0gIGNoYXIgZXJyb3JidWZbMTI4XTsKLSAgZXJyb3JidWZbMF0gPSAwOwotCi0gIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHBvbGFyc3NsX3JlY3Y7Ci0gIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IHBvbGFyc3NsX3NlbmQ7Ci0KLSAgcmV0ID0gc3NsX2hhbmRzaGFrZSgmQkFDS0VORC0+c3NsKTsKLQotICBzd2l0Y2gocmV0KSB7Ci0gIGNhc2UgMDoKLSAgICBicmVhazsKLQotICBjYXNlIFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9SRUFEOgotICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotCi0gIGNhc2UgUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFOgotICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3dyaXRpbmc7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotCi0gIGRlZmF1bHQ6Ci0gICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgZmFpbGYoZGF0YSwgInNzbF9oYW5kc2hha2UgcmV0dXJuZWQgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAtcmV0LCBlcnJvcmJ1Zik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMOiBIYW5kc2hha2UgY29tcGxldGUsIGNpcGhlciBpcyAlc1xuIiwKLSAgICAgICAgc3NsX2dldF9jaXBoZXJzdWl0ZSgmQkFDS0VORC0+c3NsKSApOwotCi0gIHJldCA9IHNzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgmQkFDS0VORC0+c3NsKTsKLQotICBpZihyZXQgJiYgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7Ci0gICAgaWYocmV0ICYgQkFEQ0VSVF9FWFBJUkVEKQotICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9FWFBJUkVEIik7Ci0KLSAgICBpZihyZXQgJiBCQURDRVJUX1JFVk9LRUQpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfUkVWT0tFRCIpOwotICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICB9Ci0KLSAgICBpZihyZXQgJiBCQURDRVJUX0NOX01JU01BVENIKQotICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9DTl9NSVNNQVRDSCIpOwotCi0gICAgaWYocmV0ICYgQkFEQ0VSVF9OT1RfVFJVU1RFRCkKLSAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfTk9UX1RSVVNURUQiKTsKLQotICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0gIH0KLQotICBpZihzc2xfZ2V0X3BlZXJfY2VydCgmKEJBQ0tFTkQtPnNzbCkpKSB7Ci0gICAgLyogSWYgdGhlIHNlc3Npb24gd2FzIHJlc3VtZWQsIHRoZXJlIHdpbGwgYmUgbm8gcGVlciBjZXJ0cyAqLwotICAgIG1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKLQotICAgIGlmKHg1MDlfY3J0X2luZm8oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgKGNoYXIgKikiKiAiLAotICAgICAgICAgICAgICAgICAgICAgc3NsX2dldF9wZWVyX2NlcnQoJihCQUNLRU5ELT5zc2wpKSkgIT0gLTEpCi0gICAgICBpbmZvZihkYXRhLCAiRHVtcGluZyBjZXJ0IGluZm86XG4lc1xuIiwgYnVmZmVyKTsKLSAgfQotCi0gIC8qIGFkYXB0ZWQgZnJvbSBtYmVkdGxzLmMgKi8KLSAgaWYocGlubmVkcHVia2V5KSB7Ci0gICAgaW50IHNpemU7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0OwotICAgIHg1MDlfY3J0ICpwOwotICAgIHVuc2lnbmVkIGNoYXIgcHVia2V5W1BVQl9ERVJfTUFYX0JZVEVTXTsKLSAgICBjb25zdCB4NTA5X2NydCAqcGVlcmNlcnQ7Ci0KLSAgICBwZWVyY2VydCA9IHNzbF9nZXRfcGVlcl9jZXJ0KCZCQUNLRU5ELT5zc2wpOwotCi0gICAgaWYoIXBlZXJjZXJ0IHx8ICFwZWVyY2VydC0+cmF3LnAgfHwgIXBlZXJjZXJ0LT5yYXcubGVuKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIGR1ZSB0byBtaXNzaW5nIHBlZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgcCA9IGNhbGxvYygxLCBzaXplb2YoKnApKTsKLQotICAgIGlmKCFwKQotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgICB4NTA5X2NydF9pbml0KHApOwotCi0gICAgLyogTWFrZSBhIGNvcHkgb2Ygb3VyIGNvbnN0IHBlZXJjZXJ0IGJlY2F1c2UgcGtfd3JpdGVfcHVia2V5X2RlcgotICAgICAgIG5lZWRzIGEgbm9uLWNvbnN0IGtleSwgZm9yIG5vdy4KLSAgICAgICBodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzL2lzc3Vlcy8zOTYgKi8KLSAgICBpZih4NTA5X2NydF9wYXJzZV9kZXIocCwgcGVlcmNlcnQtPnJhdy5wLCBwZWVyY2VydC0+cmF3LmxlbikpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgY29weWluZyBwZWVyIGNlcnRpZmljYXRlIik7Ci0gICAgICB4NTA5X2NydF9mcmVlKHApOwotICAgICAgZnJlZShwKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgc2l6ZSA9IHBrX3dyaXRlX3B1YmtleV9kZXIoJnAtPnBrLCBwdWJrZXksIFBVQl9ERVJfTUFYX0JZVEVTKTsKLQotICAgIGlmKHNpemUgPD0gMCkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBjb3B5aW5nIHB1YmxpYyBrZXkgZnJvbSBwZWVyIGNlcnRpZmljYXRlIik7Ci0gICAgICB4NTA5X2NydF9mcmVlKHApOwotICAgICAgZnJlZShwKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgLyogcGtfd3JpdGVfcHVia2V5X2RlciB3cml0ZXMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICovCi0gICAgcmVzdWx0ID0gQ3VybF9waW5fcGVlcl9wdWJrZXkoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRwdWJrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnB1YmtleVtQVUJfREVSX01BWF9CWVRFUyAtIHNpemVdLCBzaXplKTsKLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIHg1MDlfY3J0X2ZyZWUocCk7Ci0gICAgICBmcmVlKHApOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB4NTA5X2NydF9mcmVlKHApOwotICAgIGZyZWUocCk7Ci0gIH0KLQotI2lmZGVmIEhBU19BTFBOCi0gIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgY29uc3QgY2hhciAqbmV4dF9wcm90b2NvbCA9IHNzbF9nZXRfYWxwbl9wcm90b2NvbCgmQkFDS0VORC0+c3NsKTsKLQotICAgIGlmKG5leHRfcHJvdG9jb2wgIT0gTlVMTCkgewotICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJXNcbiIsIG5leHRfcHJvdG9jb2wpOwotCi0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICAgIGlmKCFzdHJuY21wKG5leHRfcHJvdG9jb2wsIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCwKLSAgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKSB7Ci0gICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgaWYoIXN0cm5jbXAobmV4dF9wcm90b2NvbCwgQUxQTl9IVFRQXzFfMSwgQUxQTl9IVFRQXzFfMV9MRU5HVEgpKSB7Ci0gICAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgZGlkIG5vdCBhZ3JlZSB0byBhIHByb3RvY29sXG4iKTsKLSAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KLSAgICAgICAgICAgICAgICAgICAgICAgIEJVTkRMRV9NVUxUSVBMRVggOiBCVU5ETEVfTk9fTVVMVElVU0UpOwotICB9Ci0jZW5kaWYKLQotICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMzsKLSAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0ZWRcbiIpOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIENVUkxjb2RlCi1wb2xhcnNzbF9jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmV0Y29kZSA9IENVUkxFX09LOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKLQotICBpZihTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpIHsKLSAgICBpbnQgcmV0OwotICAgIHNzbF9zZXNzaW9uICpvdXJfc3NsX3Nlc3Npb25pZDsKLSAgICB2b2lkICpvbGRfc3NsX3Nlc3Npb25pZCA9IE5VTEw7Ci0KLSAgICBvdXJfc3NsX3Nlc3Npb25pZCA9IGNhbGxvYygxLCBzaXplb2Yoc3NsX3Nlc3Npb24pKTsKLSAgICBpZighb3VyX3NzbF9zZXNzaW9uaWQpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICAgIHJldCA9IHNzbF9nZXRfc2Vzc2lvbigmQkFDS0VORC0+c3NsLCBvdXJfc3NsX3Nlc3Npb25pZCk7Ci0gICAgaWYocmV0KSB7Ci0gICAgICBmYWlsZihkYXRhLCAic3NsX2dldF9zZXNzaW9uIHJldHVybmVkIC0weCV4IiwgLXJldCk7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgfQotCi0gICAgLyogSWYgdGhlcmUncyBhbHJlYWR5IGEgbWF0Y2hpbmcgc2Vzc2lvbiBpbiB0aGUgY2FjaGUsIGRlbGV0ZSBpdCAqLwotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMLCBzb2NraW5kZXgpKQotICAgICAgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKGNvbm4sIG9sZF9zc2xfc2Vzc2lvbmlkKTsKLQotICAgIHJldGNvZGUgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsIDAsIHNvY2tpbmRleCk7Ci0gICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKLSAgICBpZihyZXRjb2RlKSB7Ci0gICAgICBmcmVlKG91cl9zc2xfc2Vzc2lvbmlkKTsKLSAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gc3RvcmUgc3NsIHNlc3Npb24iKTsKLSAgICAgIHJldHVybiByZXRjb2RlOwotICAgIH0KLSAgfQotCi0gIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF9kb25lOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIHNzaXplX3QgcG9sYXJzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQotewotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgaW50IHJldCA9IC0xOwotCi0gIHJldCA9IHNzbF93cml0ZSgmQkFDS0VORC0+c3NsLAotICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKiltZW0sIGxlbik7Ci0KLSAgaWYocmV0IDwgMCkgewotICAgICpjdXJsY29kZSA9IChyZXQgPT0gUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFKSA/Ci0gICAgICBDVVJMRV9BR0FJTiA6IENVUkxFX1NFTkRfRVJST1I7Ci0gICAgcmV0ID0gLTE7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBDdXJsX3BvbGFyc3NsX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIHJzYV9mcmVlKCZCQUNLRU5ELT5yc2EpOwotICB4NTA5X2NydF9mcmVlKCZCQUNLRU5ELT5jbGljZXJ0KTsKLSAgeDUwOV9jcnRfZnJlZSgmQkFDS0VORC0+Y2FjZXJ0KTsKLSAgeDUwOV9jcmxfZnJlZSgmQkFDS0VORC0+Y3JsKTsKLSAgc3NsX2ZyZWUoJkJBQ0tFTkQtPnNzbCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBvbGFyc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCi17Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtudW1dOwotICBpbnQgcmV0ID0gLTE7Ci0gIHNzaXplX3QgbGVuID0gLTE7Ci0KLSAgbWVtc2V0KGJ1ZiwgMCwgYnVmZmVyc2l6ZSk7Ci0gIHJldCA9IHNzbF9yZWFkKCZCQUNLRU5ELT5zc2wsICh1bnNpZ25lZCBjaGFyICopYnVmLCBidWZmZXJzaXplKTsKLQotICBpZihyZXQgPD0gMCkgewotICAgIGlmKHJldCA9PSBQT0xBUlNTTF9FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZKQotICAgICAgcmV0dXJuIDA7Ci0KLSAgICAqY3VybGNvZGUgPSAocmV0ID09IFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9SRUFEKSA/Ci0gICAgICBDVVJMRV9BR0FJTiA6IENVUkxFX1JFQ1ZfRVJST1I7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgbGVuID0gcmV0OwotCi0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyB2b2lkIEN1cmxfcG9sYXJzc2xfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKLXsKLSAgc3NsX3Nlc3Npb25fZnJlZShwdHIpOwotICBmcmVlKHB0cik7Ci19Ci0KLS8qIDEuMy4xMCB3YXMgdGhlIGZpcnN0IHJlYnJhbmRlZCB2ZXJzaW9uLiBBbGwgbmV3IHJlbGVhc2VzIChpbiAxLjMgYnJhbmNoIGFuZAotICAgaGlnaGVyKSB3aWxsIGJlIG1iZWQgVExTIGJyYW5kZWQuLiAqLwotCi1zdGF0aWMgc2l6ZV90IEN1cmxfcG9sYXJzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQotewotICB1bnNpZ25lZCBpbnQgdmVyc2lvbiA9IHZlcnNpb25fZ2V0X251bWJlcigpOwotICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVkLiVkLiVkIiwKLSAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID49IDB4MDEwMzBBMDA/Im1iZWRUTFMiOiJQb2xhclNTTCIsCi0gICAgICAgICAgICAgICAgICAgdmVyc2lvbj4+MjQsICh2ZXJzaW9uPj4xNikmMHhmZiwgKHZlcnNpb24+PjgpJjB4ZmYpOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXBvbGFyc3NsX2Nvbm5lY3RfY29tbW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vbmJsb2NraW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwotICBsb25nIHRpbWVvdXRfbXM7Ci0gIGludCB3aGF0OwotCi0gIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KLSAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKLSAgICAqZG9uZSA9IFRSVUU7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotICB9Ci0KLSAgaWYoc3NsX2Nvbm5lY3RfMSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0gICAgLyogRmluZCBvdXQgaG93IG11Y2ggbW9yZSB0aW1lIHdlJ3JlIGFsbG93ZWQgKi8KLSAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQotICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7Ci0gICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwotICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gcG9sYXJzc2xfY29ubmVjdF9zdGVwMShjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICB3aGlsZShzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKLQotICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7Ci0KLSAgICBpZih0aW1lb3V0X21zIDwgMCkgewotICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KLSAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7Ci0gICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICAgIH0KLQotICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KLSAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZyB8fAotICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7Ci0KLSAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PQotICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7Ci0gICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PQotICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7Ci0KLSAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOwotICAgICAgaWYod2hhdCA8IDApIHsKLSAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KLSAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7Ci0gICAgICAgIGlmKG5vbmJsb2NraW5nKSB7Ci0gICAgICAgICAgKmRvbmUgPSBGQUxTRTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLyogdGltZW91dCAqLwotICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCi0gICAgfQotCi0gICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmCi0gICAgICogdGhpcyBjb25uZWN0aW9uIGlzIHBhcnQgb2YgYSBtdWx0aSBoYW5kbGUgYW5kIHRoaXMgbG9vcCB3b3VsZAotICAgICAqIGV4ZWN1dGUgYWdhaW4uIFRoaXMgcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8KLSAgICAgKiBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZQotICAgICAqIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkgb3IgZXBvbGwoKSB3aWxsIGFsd2F5cwotICAgICAqIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgotICAgICAqLwotICAgIHJlc3VsdCA9IHBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDIoY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQgfHwgKG5vbmJsb2NraW5nICYmCi0gICAgICAgICAgICAgICAgICAoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkpKQotICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLwotCi0gIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotICAgIHJlc3VsdCA9IHBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDMoY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgaWYoc3NsX2Nvbm5lY3RfZG9uZSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0gICAgY29ubnNzbC0+c3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKLSAgICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBwb2xhcnNzbF9yZWN2OwotICAgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IHBvbGFyc3NsX3NlbmQ7Ci0gICAgKmRvbmUgPSBUUlVFOwotICB9Ci0gIGVsc2UKLSAgICAqZG9uZSA9IEZBTFNFOwotCi0gIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9wb2xhcnNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwgYm9vbCAqZG9uZSkKLXsKLSAgcmV0dXJuIHBvbGFyc3NsX2Nvbm5lY3RfY29tbW9uKGNvbm4sIHNvY2tpbmRleCwgVFJVRSwgZG9uZSk7Ci19Ci0KLQotc3RhdGljIENVUkxjb2RlIEN1cmxfcG9sYXJzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBkb25lID0gRkFMU0U7Ci0KLSAgcmVzdWx0ID0gcG9sYXJzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBGQUxTRSwgJmRvbmUpOwotICBpZihyZXN1bHQpCi0gICAgcmV0dXJuIHJlc3VsdDsKLQotICBERUJVR0FTU0VSVChkb25lKTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLS8qCi0gKiByZXR1cm4gMCBlcnJvciBpbml0aWFsaXppbmcgU1NMCi0gKiByZXR1cm4gMSBTU0wgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Ci0gKi8KLXN0YXRpYyBpbnQgQ3VybF9wb2xhcnNzbF9pbml0KHZvaWQpCi17Ci0gIHJldHVybiBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfc2V0dXAoKTsKLX0KLQotc3RhdGljIHZvaWQgQ3VybF9wb2xhcnNzbF9jbGVhbnVwKHZvaWQpCi17Ci0gICh2b2lkKUN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3RocmVhZF9jbGVhbnVwKCk7Ci19Ci0KLXN0YXRpYyBib29sIEN1cmxfcG9sYXJzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi17Ci0gIGNvbnN0IHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICByZXR1cm4gc3NsX2dldF9ieXRlc19hdmFpbCgmQkFDS0VORC0+c3NsKSAhPSAwOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9wb2xhcnNzbF9zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGEyNTZzdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2hhMjU2bGVuIFVOVVNFRF9QQVJBTSkKLXsKLSAgKHZvaWQpc2hhMjU2bGVuOwotICBzaGEyNTYoaW5wdXQsIGlucHV0bGVuLCBzaGEyNTZzdW0sIDApOwotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkICpDdXJsX3BvbGFyc3NsX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8gVU5VU0VEX1BBUkFNKQotewotICAodm9pZClpbmZvOwotICByZXR1cm4gJkJBQ0tFTkQtPnNzbDsKLX0KLQotY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX3BvbGFyc3NsID0gewotICB7IENVUkxTU0xCQUNLRU5EX1BPTEFSU1NMLCAicG9sYXJzc2wiIH0sIC8qIGluZm8gKi8KLQotICBTU0xTVVBQX0NBX1BBVEggfAotICBTU0xTVVBQX1BJTk5FRFBVQktFWSwKLQotICBzaXplb2Yoc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEpLAotCi0gIEN1cmxfcG9sYXJzc2xfaW5pdCwgICAgICAgICAgICAgICAgLyogaW5pdCAqLwotICBDdXJsX3BvbGFyc3NsX2NsZWFudXAsICAgICAgICAgICAgIC8qIGNsZWFudXAgKi8KLSAgQ3VybF9wb2xhcnNzbF92ZXJzaW9uLCAgICAgICAgICAgICAvKiB2ZXJzaW9uICovCi0gIEN1cmxfbm9uZV9jaGVja19jeG4sICAgICAgICAgICAgICAgLyogY2hlY2tfY3huICovCi0gIEN1cmxfbm9uZV9zaHV0ZG93biwgICAgICAgICAgICAgICAgLyogc2h1dGRvd24gKi8KLSAgQ3VybF9wb2xhcnNzbF9kYXRhX3BlbmRpbmcsICAgICAgICAvKiBkYXRhX3BlbmRpbmcgKi8KLSAgLyogVGhpcyBtaWdodCBjYXVzZSBsaWJjdXJsIHRvIHVzZSBhIHdlZWtlciByYW5kb20hICovCi0gIEN1cmxfbm9uZV9yYW5kb20sICAgICAgICAgICAgICAgICAgLyogcmFuZG9tICovCi0gIEN1cmxfbm9uZV9jZXJ0X3N0YXR1c19yZXF1ZXN0LCAgICAgLyogY2VydF9zdGF0dXNfcmVxdWVzdCAqLwotICBDdXJsX3BvbGFyc3NsX2Nvbm5lY3QsICAgICAgICAgICAgIC8qIGNvbm5lY3QgKi8KLSAgQ3VybF9wb2xhcnNzbF9jb25uZWN0X25vbmJsb2NraW5nLCAvKiBjb25uZWN0X25vbmJsb2NraW5nICovCi0gIEN1cmxfcG9sYXJzc2xfZ2V0X2ludGVybmFscywgICAgICAgLyogZ2V0X2ludGVybmFscyAqLwotICBDdXJsX3BvbGFyc3NsX2Nsb3NlLCAgICAgICAgICAgICAgIC8qIGNsb3NlX29uZSAqLwotICBDdXJsX25vbmVfY2xvc2VfYWxsLCAgICAgICAgICAgICAgIC8qIGNsb3NlX2FsbCAqLwotICBDdXJsX3BvbGFyc3NsX3Nlc3Npb25fZnJlZSwgICAgICAgIC8qIHNlc3Npb25fZnJlZSAqLwotICBDdXJsX25vbmVfc2V0X2VuZ2luZSwgICAgICAgICAgICAgIC8qIHNldF9lbmdpbmUgKi8KLSAgQ3VybF9ub25lX3NldF9lbmdpbmVfZGVmYXVsdCwgICAgICAvKiBzZXRfZW5naW5lX2RlZmF1bHQgKi8KLSAgQ3VybF9ub25lX2VuZ2luZXNfbGlzdCwgICAgICAgICAgICAvKiBlbmdpbmVzX2xpc3QgKi8KLSAgQ3VybF9ub25lX2ZhbHNlX3N0YXJ0LCAgICAgICAgICAgICAvKiBmYWxzZV9zdGFydCAqLwotICBDdXJsX25vbmVfbWQ1c3VtLCAgICAgICAgICAgICAgICAgIC8qIG1kNXN1bSAqLwotICBDdXJsX3BvbGFyc3NsX3NoYTI1NnN1bSAgICAgICAgICAgIC8qIHNoYTI1NnN1bSAqLwotfTsKLQotI2VuZGlmIC8qIFVTRV9QT0xBUlNTTCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2MzNjM2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfUE9MQVJTU0xfSAotI2RlZmluZSBIRUFERVJfQ1VSTF9QT0xBUlNTTF9ICi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWZkZWYgVVNFX1BPTEFSU1NMCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfcG9sYXJzc2w7Ci0KLSNlbmRpZiAvKiBVU0VfUE9MQVJTU0wgKi8KLSNlbmRpZiAvKiBIRUFERVJfQ1VSTF9QT0xBUlNTTF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2M5NGIxLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWYgKGRlZmluZWQoVVNFX1BPTEFSU1NMKSB8fCBkZWZpbmVkKFVTRV9NQkVEVExTKSkgJiYgXAotICAgICgoZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkpIHx8IFwKLSAgICAgKGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpKSkKLQotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCi0jICBpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jICBkZWZpbmUgUE9MQVJTU0xfTVVURVhfVCBwdGhyZWFkX211dGV4X3QKLSNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCi0jICBpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jICBkZWZpbmUgUE9MQVJTU0xfTVVURVhfVCBIQU5ETEUKLSNlbmRpZgotCi0jaW5jbHVkZSAicG9sYXJzc2xfdGhyZWFkbG9jay5oIgotI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCi0jaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLS8qIG51bWJlciBvZiB0aHJlYWQgbG9ja3MgKi8KLSNkZWZpbmUgTlVNVCAgICAgICAgICAgICAgICAgICAgMgotCi0vKiBUaGlzIGFycmF5IHdpbGwgc3RvcmUgYWxsIG9mIHRoZSBtdXRleGVzIGF2YWlsYWJsZSB0byBQb2xhclNTTC4gKi8KLXN0YXRpYyBQT0xBUlNTTF9NVVRFWF9UICptdXRleF9idWYgPSBOVUxMOwotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKHZvaWQpCi17Ci0gIGludCBpOwotCi0gIG11dGV4X2J1ZiA9IGNhbGxvYyhOVU1UICogc2l6ZW9mKFBPTEFSU1NMX01VVEVYX1QpLCAxKTsKLSAgaWYoIW11dGV4X2J1ZikKLSAgICByZXR1cm4gMDsgICAgIC8qIGVycm9yLCBubyBudW1iZXIgb2YgdGhyZWFkcyBkZWZpbmVkICovCi0KLSAgZm9yKGkgPSAwOyAgaSA8IE5VTVQ7ICBpKyspIHsKLSAgICBpbnQgcmV0OwotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCi0gICAgcmV0ID0gcHRocmVhZF9tdXRleF9pbml0KCZtdXRleF9idWZbaV0sIE5VTEwpOwotICAgIGlmKHJldCkKLSAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2luaXQgZmFpbGVkICovCi0jZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQotICAgIG11dGV4X2J1ZltpXSA9IENyZWF0ZU11dGV4KDAsIEZBTFNFLCAwKTsKLSAgICBpZihtdXRleF9idWZbaV0gPT0gMCkKLSAgICAgIHJldHVybiAwOyAgLyogQ3JlYXRlTXV0ZXggZmFpbGVkICovCi0jZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KLSAgfQotCi0gIHJldHVybiAxOyAvKiBPSyAqLwotfQotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAodm9pZCkKLXsKLSAgaW50IGk7Ci0KLSAgaWYoIW11dGV4X2J1ZikKLSAgICByZXR1cm4gMDsgLyogZXJyb3IsIG5vIHRocmVhZHMgbG9ja3MgZGVmaW5lZCAqLwotCi0gIGZvcihpID0gMDsgaSA8IE5VTVQ7IGkrKykgewotICAgIGludCByZXQ7Ci0jaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKLSAgICByZXQgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm11dGV4X2J1ZltpXSk7Ci0gICAgaWYocmV0KQotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSBmYWlsZWQgKi8KLSNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCi0gICAgcmV0ID0gQ2xvc2VIYW5kbGUobXV0ZXhfYnVmW2ldKTsKLSAgICBpZighcmV0KQotICAgICAgcmV0dXJuIDA7IC8qIENsb3NlSGFuZGxlIGZhaWxlZCAqLwotI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCi0gIH0KLSAgZnJlZShtdXRleF9idWYpOwotICBtdXRleF9idWYgPSBOVUxMOwotCi0gIHJldHVybiAxOyAvKiBPSyAqLwotfQotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbihpbnQgbikKLXsKLSAgaWYobiA8IE5VTVQpIHsKLSAgICBpbnQgcmV0OwotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCi0gICAgcmV0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleF9idWZbbl0pOwotICAgIGlmKHJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKLSAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2xvY2sgZmFpbGVkICovCi0gICAgfQotI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKLSAgICByZXQgPSAoV2FpdEZvclNpbmdsZU9iamVjdChtdXRleF9idWZbbl0sIElORklOSVRFKSA9PSBXQUlUX0ZBSUxFRD8xOjApOwotICAgIGlmKHJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKLSAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2xvY2sgZmFpbGVkICovCi0gICAgfQotI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCi0gIH0KLSAgcmV0dXJuIDE7IC8qIE9LICovCi19Ci0KLWludCBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oaW50IG4pCi17Ci0gIGlmKG4gPCBOVU1UKSB7Ci0gICAgaW50IHJldDsKLSNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQotICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleF9idWZbbl0pOwotICAgIGlmKHJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOwotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIGZhaWxlZCAqLwotICAgIH0KLSNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCi0gICAgcmV0ID0gUmVsZWFzZU11dGV4KG11dGV4X2J1ZltuXSk7Ci0gICAgaWYoIXJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOwotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfbG9jayBmYWlsZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KLSAgfQotICByZXR1cm4gMTsgLyogT0sgKi8KLX0KLQotI2VuZGlmIC8qIFVTRV9QT0xBUlNTTCB8fCBVU0VfTUJFRFRMUyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyNjQ3NS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfUE9MQVJTU0xfVEhSRUFETE9DS19ICi0jZGVmaW5lIEhFQURFUl9DVVJMX1BPTEFSU1NMX1RIUkVBRExPQ0tfSAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwotICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZiAoZGVmaW5lZCBVU0VfUE9MQVJTU0wpIHx8IChkZWZpbmVkIFVTRV9NQkVEVExTKQotCi0jaWYgKGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpKSB8fCBcCi0gICAgKGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpKQotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKHZvaWQpOwotaW50IEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3RocmVhZF9jbGVhbnVwKHZvaWQpOwotaW50IEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oaW50IG4pOwotaW50IEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbihpbnQgbik7Ci0KLSNlbHNlCi0KLSNkZWZpbmUgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKCkgMQotI2RlZmluZSBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCgpIDEKLSNkZWZpbmUgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbih4KSAxCi0jZGVmaW5lIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbih4KSAxCi0KLSNlbmRpZiAvKiBVU0VfVEhSRUFEU19QT1NJWCB8fCBVU0VfVEhSRUFEU19XSU4zMiAqLwotCi0jZW5kaWYgLyogVVNFX1BPTEFSU1NMICovCi0KLSNlbmRpZiAvKiBIRUFERVJfQ1VSTF9QT0xBUlNTTF9USFJFQURMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWwuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWwuYwppbmRleCAwZjZmNzM0Li4xOTk2NTI2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NjaGFubmVsLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIE1hcmMgSG9lcnNrZW4sIDxpbmZvQG1hcmMtaG9lcnNrZW4uZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIE1hcmsgU2FsaXNidXJ5LCA8bWFyay5zYWxpc2J1cnlAaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDE2ICsyNyw2IEBACiAgKiBidXQgdnRscy5jIHNob3VsZCBldmVyIGNhbGwgb3IgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KICAqLwogCi0vKgotICogQmFzZWQgdXBvbiB0aGUgUG9sYXJTU0wgaW1wbGVtZW50YXRpb24gaW4gcG9sYXJzc2wuYyBhbmQgcG9sYXJzc2wuaDoKLSAqICAgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgotICoKLSAqIEJhc2VkIHVwb24gdGhlIEN5YVNTTCBpbXBsZW1lbnRhdGlvbiBpbiBjeWFzc2wuYyBhbmQgY3lhc3NsLmg6Ci0gKiAgIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhhbmtzIGZvciBjb2RlIGFuZCBpbnNwaXJhdGlvbiEKLSAqLwotCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCiAjaWZkZWYgVVNFX1NDSEFOTkVMCkBAIC00OSwxMCArMzksMTEgQEAKIAogI2luY2x1ZGUgInNjaGFubmVsLmgiCiAjaW5jbHVkZSAidnRscy5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJzZW5kZi5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIgLyogZm9yIHRoZSBjb25uZWN0IHRpbWVvdXQgKi8KICNpbmNsdWRlICJzdHJlcnJvci5oIgotI2luY2x1ZGUgInNlbGVjdC5oIiAvKiBmb3IgdGhlIHNvY2tldCByZWFkeW5lc3MgKi8KKyNpbmNsdWRlICJzZWxlY3QuaCIgLyogZm9yIHRoZSBzb2NrZXQgcmVhZGluZXNzICovCiAjaW5jbHVkZSAiaW5ldF9wdG9uLmgiIC8qIGZvciBJUCBhZGRyIFNOSSBjaGVjayAqLwogI2luY2x1ZGUgImN1cmxfbXVsdGlieXRlLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKQEAgLTYxLDcgKzUyLDcgQEAKICNpbmNsdWRlICJtdWx0aWlmLmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCiAKLSAvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIApAQCAtMTc5LDI1ICsxNzAsMjUgQEAKICAgbG9uZyBpID0gc3NsX3ZlcnNpb247CiAKICAgc3dpdGNoKHNzbF92ZXJzaW9uX21heCkgewotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9OT05FOgotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgc3NsX3ZlcnNpb25fbWF4ID0gQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8yOwotICAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9OT05FOgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDoKKyAgICBzc2xfdmVyc2lvbl9tYXggPSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI7CisgICAgYnJlYWs7CiAgIH0KICAgZm9yKDsgaSA8PSAoc3NsX3ZlcnNpb25fbWF4ID4+IDE2KTsgKytpKSB7CiAgICAgc3dpdGNoKGkpIHsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gICAgICAgIHNjaGFubmVsX2NyZWQtPmdyYml0RW5hYmxlZFByb3RvY29scyB8PSBTUF9QUk9UX1RMUzFfMF9DTElFTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgICAgICAgc2NoYW5uZWxfY3JlZC0+Z3JiaXRFbmFibGVkUHJvdG9jb2xzIHw9IFNQX1BST1RfVExTMV8xX0NMSUVOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgotICAgICAgICBzY2hhbm5lbF9jcmVkLT5ncmJpdEVuYWJsZWRQcm90b2NvbHMgfD0gU1BfUFJPVF9UTFMxXzJfQ0xJRU5UOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKKyAgICAgIHNjaGFubmVsX2NyZWQtPmdyYml0RW5hYmxlZFByb3RvY29scyB8PSBTUF9QUk9UX1RMUzFfMF9DTElFTlQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgorICAgICAgc2NoYW5uZWxfY3JlZC0+Z3JiaXRFbmFibGVkUHJvdG9jb2xzIHw9IFNQX1BST1RfVExTMV8xX0NMSUVOVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CisgICAgICBzY2hhbm5lbF9jcmVkLT5ncmJpdEVuYWJsZWRQcm90b2NvbHMgfD0gU1BfUFJPVF9UTFMxXzJfQ0xJRU5UOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgIH0KICAgfQogICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0yMDUsOSArMTk2LDkgQEAKIAogLypsb25nZXN0IGlzIDI2LCBidWZmZXIgaXMgc2xpZ2h0bHkgYmlnZ2VyKi8KICNkZWZpbmUgTE9OR0VTVF9BTEdfSUQgMzIKLSNkZWZpbmUgQ0lQSEVST1BUSU9OKFgpIFwKLWlmKHN0cmNtcCgjWCwgdG1wKSA9PSAwKSBcCi0gIHJldHVybiBYCisjZGVmaW5lIENJUEhFUk9QVElPTihYKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKHN0cmNtcCgjWCwgdG1wKSA9PSAwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIFgKIAogc3RhdGljIGludAogZ2V0X2FsZ19pZF9ieV9uYW1lKGNoYXIgKm5hbWUpCkBAIC0yODMsMTEgKzI3NCwxMSBAQAogI2lmZGVmIENBTEdfSE1BQwogICBDSVBIRVJPUFRJT04oQ0FMR19ITUFDKTsKICNlbmRpZgotI2lmICFkZWZpbmVkKF9fVzMyQVBJX01BSk9SX1ZFUlNJT04pIHx8IFwKLSAgICAhZGVmaW5lZChfX1czMkFQSV9NSU5PUl9WRVJTSU9OKSB8fCBcCi0gICAgZGVmaW5lZChfX01JTkdXNjRfVkVSU0lPTl9NQUpPUikgfHwgXAotICAgIChfX1czMkFQSV9NQUpPUl9WRVJTSU9OID4gNSkgICAgIHx8IFwKLSAgICAoKF9fVzMyQVBJX01BSk9SX1ZFUlNJT04gPT0gNSkgJiYgKF9fVzMyQVBJX01JTk9SX1ZFUlNJT04gPiAwKSkKKyNpZiAhZGVmaW5lZChfX1czMkFQSV9NQUpPUl9WRVJTSU9OKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIWRlZmluZWQoX19XMzJBUElfTUlOT1JfVkVSU0lPTikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChfX01JTkdXNjRfVkVSU0lPTl9NQUpPUikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fVzMyQVBJX01BSk9SX1ZFUlNJT04gPiA1KSAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChfX1czMkFQSV9NQUpPUl9WRVJTSU9OID09IDUpICYmIChfX1czMkFQSV9NSU5PUl9WRVJTSU9OID4gMCkpCiAgIC8qIENBTEdfVExTMVBSRiBoYXMgYSBzeW50YXggZXJyb3IgaW4gTWluR1cncyB3MzJhcGkgdXAgdG8gdmVyc2lvbiA1LjAsCiAgICAgIHNlZSBodHRwczovL29zZG4ubmV0L3Byb2plY3RzL21pbmd3L3RpY2tldC8zODM5MSAqLwogICBDSVBIRVJPUFRJT04oQ0FMR19UTFMxUFJGKTsKQEAgLTM0OSw3ICszNDAsNyBAQAogICAgIGlmKHN0YXJ0Q3VyKQogICAgICAgc3RhcnRDdXIrKzsKICAgfQotICAgIHNjaGFubmVsX2NyZWQtPnBhbGdTdXBwb3J0ZWRBbGdzID0gYWxnSWRzOworICBzY2hhbm5lbF9jcmVkLT5wYWxnU3VwcG9ydGVkQWxncyA9IGFsZ0lkczsKICAgc2NoYW5uZWxfY3JlZC0+Y1N1cHBvcnRlZEFsZ3MgPSBhbGdDb3VudDsKICAgcmV0dXJuIENVUkxFX09LOwogfQpAQCAtNDM0LDggKzQyNSwxMiBAQAogI2VuZGlmCiAgIFRDSEFSICpob3N0X25hbWU7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKKyNlbHNlCisgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyNlbmRpZgogCiAgIERFQlVHRihpbmZvZihkYXRhLAogICAgICAgICAgICAgICAgInNjaGFubmVsOiBTU0wvVExTIGNvbm5lY3Rpb24gd2l0aCAlcyBwb3J0ICVodSAoc3RlcCAxLzMpXG4iLApAQCAtNDQzLDIwICs0MzgsMjAgQEAKIAogICBpZihDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNSwgMSwgUExBVEZPUk1fV0lOTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0xFU1NfVEhBTl9FUVVBTCkpIHsKLSAgICAgLyogU2NoYW5uZWwgaW4gV2luZG93cyBYUCAoT1MgdmVyc2lvbiA1LjEpIHVzZXMgbGVnYWN5IGhhbmRzaGFrZXMgYW5kCi0gICAgICAgIGFsZ29yaXRobXMgdGhhdCBtYXkgbm90IGJlIHN1cHBvcnRlZCBieSBhbGwgc2VydmVycy4gKi8KLSAgICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiBXaW5kb3dzIHZlcnNpb24gaXMgb2xkIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gIgotICAgICAgICAgICAiY29ubmVjdCB0byBzb21lIHNlcnZlcnMgZHVlIHRvIGxhY2sgb2YgU05JLCBhbGdvcml0aG1zLCBldGMuXG4iKTsKKyAgICAvKiBTY2hhbm5lbCBpbiBXaW5kb3dzIFhQIChPUyB2ZXJzaW9uIDUuMSkgdXNlcyBsZWdhY3kgaGFuZHNoYWtlcyBhbmQKKyAgICAgICBhbGdvcml0aG1zIHRoYXQgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgYWxsIHNlcnZlcnMuICovCisgICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiBXaW5kb3dzIHZlcnNpb24gaXMgb2xkIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gIgorICAgICAgICAgICJjb25uZWN0IHRvIHNvbWUgc2VydmVycyBkdWUgdG8gbGFjayBvZiBTTkksIGFsZ29yaXRobXMsIGV0Yy5cbiIpOwogICB9CiAKICNpZmRlZiBIQVNfQUxQTgogICAvKiBBTFBOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFdpbmRvd3MgOC4xIC8gU2VydmVyIDIwMTIgUjIgYW5kIGFib3ZlLgogICAgICBBbHNvIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBzdXBwb3J0ZWQgZm9yIFdpbmUsIHNlZSBjdXJsIGJ1ZyAjOTgzLiAqLwogICBCQUNLRU5ELT51c2VfYWxwbiA9IGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuICYmCi0gICAgICAgICAgICAgICAgICAgICAgIUdldFByb2NBZGRyZXNzKEdldE1vZHVsZUhhbmRsZUEoIm50ZGxsIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aW5lX2dldF92ZXJzaW9uIikgJiYKLSAgICAgICAgICAgICAgICAgICAgICBDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNiwgMywgUExBVEZPUk1fV0lOTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fR1JFQVRFUl9USEFOX0VRVUFMKTsKKyAgICAhR2V0UHJvY0FkZHJlc3MoR2V0TW9kdWxlSGFuZGxlQSgibnRkbGwiKSwKKyAgICAgICAgICAgICAgICAgICAgIndpbmVfZ2V0X3ZlcnNpb24iKSAmJgorICAgIEN1cmxfdmVyaWZ5X3dpbmRvd3NfdmVyc2lvbig2LCAzLCBQTEFURk9STV9XSU5OVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9HUkVBVEVSX1RIQU5fRVFVQUwpOwogI2Vsc2UKICAgQkFDS0VORC0+dXNlX2FscG4gPSBmYWxzZTsKICNlbmRpZgpAQCAtNTMwLDggKzUyNSwxNSBAQAogICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgInNjaGFubmVsOiBkaXNhYmxlZCBzZXJ2ZXIgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAiY2hlY2tzXG4iKSk7CiAgICAgICB9CisgICAgICBlbHNlIGlmKGRhdGEtPnNldC5zc2wucmV2b2tlX2Jlc3RfZWZmb3J0KSB7CisgICAgICAgIHNjaGFubmVsX2NyZWQuZHdGbGFncyB8PSBTQ0hfQ1JFRF9JR05PUkVfTk9fUkVWT0NBVElPTl9DSEVDSyB8CisgICAgICAgICAgU0NIX0NSRURfSUdOT1JFX1JFVk9DQVRJT05fT0ZGTElORSB8IFNDSF9DUkVEX1JFVk9DQVRJT05fQ0hFQ0tfQ0hBSU47CisKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJzY2hhbm5lbDogaWdub3JlIHJldm9jYXRpb24gb2ZmbGluZSBlcnJvcnMiKSk7CisgICAgICB9CiAgICAgICBlbHNlIHsKICAgICAgICAgc2NoYW5uZWxfY3JlZC5kd0ZsYWdzIHw9IFNDSF9DUkVEX1JFVk9DQVRJT05fQ0hFQ0tfQ0hBSU47CisKICAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAic2NoYW5uZWw6IGNoZWNraW5nIHNlcnZlciBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uXG4iKSk7CiAgICAgICB9CkBAIC01NTQsMjAgKzU1NiwxNiBAQAogICAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgICAgc2NoYW5uZWxfY3JlZC5ncmJpdEVuYWJsZWRQcm90b2NvbHMgPSBTUF9QUk9UX1RMUzFfMF9DTElFTlQgfAotICAgICAgICBTUF9QUk9UX1RMUzFfMV9DTElFTlQgfAotICAgICAgICBTUF9QUk9UX1RMUzFfMl9DTElFTlQ7Ci0gICAgICBicmVhazsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgotICAgICAgewotICAgICAgICByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heCgmc2NoYW5uZWxfY3JlZCwgY29ubik7Ci0gICAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICB7CisgICAgICByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heCgmc2NoYW5uZWxfY3JlZCwgY29ubik7CisgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6CiAgICAgICBzY2hhbm5lbF9jcmVkLmdyYml0RW5hYmxlZFByb3RvY29scyA9IFNQX1BST1RfU1NMM19DTElFTlQ7CiAgICAgICBicmVhazsKQEAgLTU5MCw2OCArNTg4LDE4NiBAQAogCiAjaWZkZWYgSEFTX0NMSUVOVF9DRVJUX1BBVEgKICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgKi8KLSAgICBpZihkYXRhLT5zZXQuc3NsLmNlcnQpIHsKLSAgICAgIERXT1JEIGNlcnRfc3RvcmVfbmFtZTsKLSAgICAgIFRDSEFSICpjZXJ0X3N0b3JlX3BhdGg7Ci0gICAgICBUQ0hBUiAqY2VydF90aHVtYnByaW50X3N0cjsKKyAgICBpZihkYXRhLT5zZXQuc3NsLmNlcnQgfHwgZGF0YS0+c2V0LnNzbC5jZXJ0X2Jsb2IpIHsKKyAgICAgIERXT1JEIGNlcnRfc3RvcmVfbmFtZSA9IDA7CisgICAgICBUQ0hBUiAqY2VydF9zdG9yZV9wYXRoID0gTlVMTDsKKyAgICAgIFRDSEFSICpjZXJ0X3RodW1icHJpbnRfc3RyID0gTlVMTDsKICAgICAgIENSWVBUX0hBU0hfQkxPQiBjZXJ0X3RodW1icHJpbnQ7CiAgICAgICBCWVRFIGNlcnRfdGh1bWJwcmludF9kYXRhW0NFUlRfVEhVTUJQUklOVF9EQVRBX0xFTl07Ci0gICAgICBIQ0VSVFNUT1JFIGNlcnRfc3RvcmU7CisgICAgICBIQ0VSVFNUT1JFIGNlcnRfc3RvcmUgPSBOVUxMOworICAgICAgRklMRSAqZkluQ2VydCA9IE5VTEw7CisgICAgICB2b2lkICpjZXJ0ZGF0YSA9IE5VTEw7CisgICAgICBzaXplX3QgY2VydHNpemUgPSAwOworICAgICAgYm9vbCBibG9iID0gZGF0YS0+c2V0LnNzbC5jZXJ0X2Jsb2IgIT0gTlVMTDsKKyAgICAgIFRDSEFSICpjZXJ0X3BhdGggPSBOVUxMOworICAgICAgaWYoYmxvYikgeworICAgICAgICBjZXJ0ZGF0YSA9IGRhdGEtPnNldC5zc2wuY2VydF9ibG9iLT5kYXRhOworICAgICAgICBjZXJ0c2l6ZSA9IGRhdGEtPnNldC5zc2wuY2VydF9ibG9iLT5sZW47CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2VydF9wYXRoID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKGRhdGEtPnNldC5zc2wuY2VydCk7CisgICAgICAgIGlmKCFjZXJ0X3BhdGgpCisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKLSAgICAgIFRDSEFSICpjZXJ0X3BhdGggPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihkYXRhLT5zZXQuc3NsLmNlcnQpOwotICAgICAgaWYoIWNlcnRfcGF0aCkKLSAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIHJlc3VsdCA9IGdldF9jZXJ0X2xvY2F0aW9uKGNlcnRfcGF0aCwgJmNlcnRfc3RvcmVfbmFtZSwKKyAgICAgICAgICAmY2VydF9zdG9yZV9wYXRoLCAmY2VydF90aHVtYnByaW50X3N0cik7CiAKLSAgICAgIHJlc3VsdCA9IGdldF9jZXJ0X2xvY2F0aW9uKGNlcnRfcGF0aCwgJmNlcnRfc3RvcmVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZXJ0X3N0b3JlX3BhdGgsICZjZXJ0X3RodW1icHJpbnRfc3RyKTsKLSAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykgewotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IEZhaWxlZCB0byBnZXQgY2VydGlmaWNhdGUgbG9jYXRpb24gZm9yICVzIiwKLSAgICAgICAgICAgICAgY2VydF9wYXRoKTsKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZihyZXN1bHQgJiYgKGRhdGEtPnNldC5zc2wuY2VydFswXSE9J1wwJykpCisgICAgICAgICAgZkluQ2VydCA9IGZvcGVuKGRhdGEtPnNldC5zc2wuY2VydCwgInJiIik7CisKKyAgICAgICAgaWYocmVzdWx0ICYmICFmSW5DZXJ0KSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gZ2V0IGNlcnRpZmljYXRlIGxvY2F0aW9uIgorICAgICAgICAgICAgICAgICIgb3IgZmlsZSBmb3IgJXMiLAorICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuY2VydCk7CisgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGNlcnRfc3RvcmUgPQotICAgICAgICBDZXJ0T3BlblN0b3JlKENVUkxfQ0VSVF9TVE9SRV9QUk9WX1NZU1RFTSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAoSENSWVBUUFJPVilOVUxMLAotICAgICAgICAgICAgICAgICAgICAgIENFUlRfU1RPUkVfT1BFTl9FWElTVElOR19GTEFHIHwgY2VydF9zdG9yZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNlcnRfc3RvcmVfcGF0aCk7Ci0gICAgICBpZighY2VydF9zdG9yZSkgewotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IEZhaWxlZCB0byBvcGVuIGNlcnQgc3RvcmUgJXggJXMsICIKLSAgICAgICAgICAgICAgImxhc3QgZXJyb3IgaXMgJXgiLAotICAgICAgICAgICAgICBjZXJ0X3N0b3JlX25hbWUsIGNlcnRfc3RvcmVfcGF0aCwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICBmcmVlKGNlcnRfc3RvcmVfcGF0aCk7Ci0gICAgICAgIEN1cmxfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKLSAgICAgIH0KLSAgICAgIGZyZWUoY2VydF9zdG9yZV9wYXRoKTsKLQotICAgICAgY2VydF90aHVtYnByaW50LnBiRGF0YSA9IGNlcnRfdGh1bWJwcmludF9kYXRhOwotICAgICAgY2VydF90aHVtYnByaW50LmNiRGF0YSA9IENFUlRfVEhVTUJQUklOVF9EQVRBX0xFTjsKLQotICAgICAgaWYoIUNyeXB0U3RyaW5nVG9CaW5hcnkoY2VydF90aHVtYnByaW50X3N0ciwgQ0VSVF9USFVNQlBSSU5UX1NUUl9MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9TVFJJTkdfSEVYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF90aHVtYnByaW50X2RhdGEsICZjZXJ0X3RodW1icHJpbnQuY2JEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCkpIHsKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOworICAgICAgaWYoKGZJbkNlcnQgfHwgYmxvYikgJiYgKGRhdGEtPnNldC5zc2wuY2VydF90eXBlKSAmJgorICAgICAgICAgICghc3RyY2FzZWNvbXBhcmUoZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUsICJQMTIiKSkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBjZXJ0aWZpY2F0ZSBmb3JtYXQgY29tcGF0aWJpbGl0eSBlcnJvciAiCisgICAgICAgICAgICAgICAgIiBmb3IgJXMiLAorICAgICAgICAgICAgICAgIGJsb2IgPyAiKG1lbW9yeSBibG9iKSIgOiBkYXRhLT5zZXQuc3NsLmNlcnQpOworICAgICAgICBjdXJseF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOwogICAgICAgfQogCi0gICAgICBjbGllbnRfY2VydHNbMF0gPSBDZXJ0RmluZENlcnRpZmljYXRlSW5TdG9yZSgKLSAgICAgICAgY2VydF9zdG9yZSwgWDUwOV9BU05fRU5DT0RJTkcgfCBQS0NTXzdfQVNOX0VOQ09ESU5HLCAwLAotICAgICAgICBDRVJUX0ZJTkRfSEFTSCwgJmNlcnRfdGh1bWJwcmludCwgTlVMTCk7CisgICAgICBpZihmSW5DZXJ0IHx8IGJsb2IpIHsKKyAgICAgICAgLyogUmVhZGluZyBhIC5QMTIgb3IgLnBmeCBmaWxlLCBsaWtlIHRoZSBleGFtcGxlIGF0IGJvdHRvbSBvZgorICAgICAgICAgICAgIGh0dHBzOi8vc29jaWFsLm1zZG4ubWljcm9zb2Z0LmNvbS9Gb3J1bXMvd2luZG93c2Rlc2t0b3AvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW4tVVMvM2U3YmM5NWYtYjIxYS00YmNkLWJkMmMtN2Y5OTY3MThjYWU1CisgICAgICAgICovCisgICAgICAgIENSWVBUX0RBVEFfQkxPQiBkYXRhYmxvYjsKKyAgICAgICAgV0NIQVIqIHBzelBhc3N3b3JkOworICAgICAgICBzaXplX3QgcHdkX2xlbiA9IDA7CisgICAgICAgIGludCBzdHJfd19sZW4gPSAwOworICAgICAgICBjb25zdCBjaGFyICpjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvciA9IGJsb2IgPworICAgICAgICAgICIobWVtb3J5IGJsb2IpIiA6IGRhdGEtPnNldC5zc2wuY2VydDsKKyAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKKyAgICAgICAgaWYoZkluQ2VydCkgeworICAgICAgICAgIGxvbmcgY2VydF90ZWxsID0gMDsKKyAgICAgICAgICBib29sIGNvbnRpbnVlX3JlYWRpbmcgPSBmc2VlayhmSW5DZXJ0LCAwLCBTRUVLX0VORCkgPT0gMDsKKyAgICAgICAgICBpZihjb250aW51ZV9yZWFkaW5nKQorICAgICAgICAgICAgY2VydF90ZWxsID0gZnRlbGwoZkluQ2VydCk7CisgICAgICAgICAgaWYoY2VydF90ZWxsIDwgMCkKKyAgICAgICAgICAgIGNvbnRpbnVlX3JlYWRpbmcgPSBGQUxTRTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBjZXJ0c2l6ZSA9IChzaXplX3QpY2VydF90ZWxsOworICAgICAgICAgIGlmKGNvbnRpbnVlX3JlYWRpbmcpCisgICAgICAgICAgICBjb250aW51ZV9yZWFkaW5nID0gZnNlZWsoZkluQ2VydCwgMCwgU0VFS19TRVQpID09IDA7CisgICAgICAgICAgaWYoY29udGludWVfcmVhZGluZykKKyAgICAgICAgICAgIGNlcnRkYXRhID0gbWFsbG9jKGNlcnRzaXplICsgMSk7CisgICAgICAgICAgaWYoKCFjZXJ0ZGF0YSkgfHwKKyAgICAgICAgICAgICAoKGludCkgZnJlYWQoY2VydGRhdGEsIGNlcnRzaXplLCAxLCBmSW5DZXJ0KSAhPSAxKSkKKyAgICAgICAgICAgIGNvbnRpbnVlX3JlYWRpbmcgPSBGQUxTRTsKKyAgICAgICAgICBmY2xvc2UoZkluQ2VydCk7CisgICAgICAgICAgaWYoIWNvbnRpbnVlX3JlYWRpbmcpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogRmFpbGVkIHRvIHJlYWQgY2VydCBmaWxlICVzIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmNlcnQpOworICAgICAgICAgICAgZnJlZShjZXJ0ZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICBDdXJsX3VuaWNvZGVmcmVlKGNlcnRfcGF0aCk7CisgICAgICAgIC8qIENvbnZlcnQga2V5LXBhaXIgZGF0YSB0byB0aGUgaW4tbWVtb3J5IGNlcnRpZmljYXRlIHN0b3JlICovCisgICAgICAgIGRhdGFibG9iLnBiRGF0YSA9IChCWVRFKiljZXJ0ZGF0YTsKKyAgICAgICAgZGF0YWJsb2IuY2JEYXRhID0gKERXT1JEKWNlcnRzaXplOwogCi0gICAgICBpZihjbGllbnRfY2VydHNbMF0pIHsKKyAgICAgICAgaWYoZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkICE9IE5VTEwpCisgICAgICAgICAgcHdkX2xlbiA9IHN0cmxlbihkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QpOworICAgICAgICBwc3pQYXNzd29yZCA9IChXQ0hBUiopbWFsbG9jKHNpemVvZihXQ0hBUikqKHB3ZF9sZW4gKyAxKSk7CisgICAgICAgIGlmKHBzelBhc3N3b3JkKSB7CisgICAgICAgICAgaWYocHdkX2xlbiA+IDApCisgICAgICAgICAgICBzdHJfd19sZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsCisgICAgICAgICAgICAgICBNQl9FUlJfSU5WQUxJRF9DSEFSUywKKyAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCwgKGludClwd2RfbGVuLAorICAgICAgICAgICAgICAgcHN6UGFzc3dvcmQsIChpbnQpKHB3ZF9sZW4gKyAxKSk7CisKKyAgICAgICAgICBpZigoc3RyX3dfbGVuID49IDApICYmIChzdHJfd19sZW4gPD0gKGludClwd2RfbGVuKSkKKyAgICAgICAgICAgIHBzelBhc3N3b3JkW3N0cl93X2xlbl0gPSAwOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBzelBhc3N3b3JkWzBdID0gMDsKKworICAgICAgICAgIGNlcnRfc3RvcmUgPSBQRlhJbXBvcnRDZXJ0U3RvcmUoJmRhdGFibG9iLCBwc3pQYXNzd29yZCwgMCk7CisgICAgICAgICAgZnJlZShwc3pQYXNzd29yZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoIWJsb2IpCisgICAgICAgICAgZnJlZShjZXJ0ZGF0YSk7CisgICAgICAgIGlmKGNlcnRfc3RvcmUgPT0gTlVMTCkgeworICAgICAgICAgIERXT1JEIGVycm9yY29kZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgIGlmKGVycm9yY29kZSA9PSBFUlJPUl9JTlZBTElEX1BBU1NXT1JEKQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gaW1wb3J0IGNlcnQgZmlsZSAlcywgIgorICAgICAgICAgICAgICAgICAgInBhc3N3b3JkIGlzIGJhZCIsCisgICAgICAgICAgICAgICAgICBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvcik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gaW1wb3J0IGNlcnQgZmlsZSAlcywgIgorICAgICAgICAgICAgICAgICAgImxhc3QgZXJyb3IgaXMgMHgleCIsCisgICAgICAgICAgICAgICAgICBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvciwgZXJyb3Jjb2RlKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50X2NlcnRzWzBdID0gQ2VydEZpbmRDZXJ0aWZpY2F0ZUluU3RvcmUoCisgICAgICAgICAgY2VydF9zdG9yZSwgWDUwOV9BU05fRU5DT0RJTkcgfCBQS0NTXzdfQVNOX0VOQ09ESU5HLCAwLAorICAgICAgICAgIENFUlRfRklORF9BTlksIE5VTEwsIE5VTEwpOworCisgICAgICAgIGlmKGNsaWVudF9jZXJ0c1swXSA9PSBOVUxMKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gZ2V0IGNlcnRpZmljYXRlIGZyb20gZmlsZSAlcyIKKyAgICAgICAgICAgICAgICAiLCBsYXN0IGVycm9yIGlzIDB4JXgiLAorICAgICAgICAgICAgICAgIGNlcnRfc2hvd2ZpbGVuYW1lX2Vycm9yLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgQ2VydENsb3NlU3RvcmUoY2VydF9zdG9yZSwgMCk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICAgICAgfQorCiAgICAgICAgIHNjaGFubmVsX2NyZWQuY0NyZWRzID0gMTsKICAgICAgICAgc2NoYW5uZWxfY3JlZC5wYUNyZWQgPSBjbGllbnRfY2VydHM7CiAgICAgICB9CiAgICAgICBlbHNlIHsKLSAgICAgICAgLyogQ1JZUFRfRV9OT1RfRk9VTkQgLyBFX0lOVkFMSURBUkcgKi8KLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKLSAgICAgIH0KKyAgICAgICAgY2VydF9zdG9yZSA9CisgICAgICAgICAgQ2VydE9wZW5TdG9yZShDVVJMX0NFUlRfU1RPUkVfUFJPVl9TWVNURU0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAoSENSWVBUUFJPVilOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVF9TVE9SRV9PUEVOX0VYSVNUSU5HX0ZMQUcgfCBjZXJ0X3N0b3JlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3N0b3JlX3BhdGgpOworICAgICAgICBpZighY2VydF9zdG9yZSkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogRmFpbGVkIHRvIG9wZW4gY2VydCBzdG9yZSAleCAlcywgIgorICAgICAgICAgICAgICAgICJsYXN0IGVycm9yIGlzIDB4JXgiLAorICAgICAgICAgICAgICAgIGNlcnRfc3RvcmVfbmFtZSwgY2VydF9zdG9yZV9wYXRoLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgZnJlZShjZXJ0X3N0b3JlX3BhdGgpOworICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGNlcnRfcGF0aCk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGNlcnRfc3RvcmVfcGF0aCk7CiAKKyAgICAgICAgY2VydF90aHVtYnByaW50LnBiRGF0YSA9IGNlcnRfdGh1bWJwcmludF9kYXRhOworICAgICAgICBjZXJ0X3RodW1icHJpbnQuY2JEYXRhID0gQ0VSVF9USFVNQlBSSU5UX0RBVEFfTEVOOworCisgICAgICAgIGlmKCFDcnlwdFN0cmluZ1RvQmluYXJ5KGNlcnRfdGh1bWJwcmludF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfVEhVTUJQUklOVF9TVFJfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9TVFJJTkdfSEVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3RodW1icHJpbnRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNlcnRfdGh1bWJwcmludC5jYkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpKSB7CisgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKKyAgICAgICAgICBDZXJ0Q2xvc2VTdG9yZShjZXJ0X3N0b3JlLCAwKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50X2NlcnRzWzBdID0gQ2VydEZpbmRDZXJ0aWZpY2F0ZUluU3RvcmUoCisgICAgICAgICAgY2VydF9zdG9yZSwgWDUwOV9BU05fRU5DT0RJTkcgfCBQS0NTXzdfQVNOX0VOQ09ESU5HLCAwLAorICAgICAgICAgIENFUlRfRklORF9IQVNILCAmY2VydF90aHVtYnByaW50LCBOVUxMKTsKKworICAgICAgICBjdXJseF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOworCisgICAgICAgIGlmKGNsaWVudF9jZXJ0c1swXSkgeworICAgICAgICAgIHNjaGFubmVsX2NyZWQuY0NyZWRzID0gMTsKKyAgICAgICAgICBzY2hhbm5lbF9jcmVkLnBhQ3JlZCA9IGNsaWVudF9jZXJ0czsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBDUllQVF9FX05PVF9GT1VORCAvIEVfSU5WQUxJREFSRyAqLworICAgICAgICAgIENlcnRDbG9zZVN0b3JlKGNlcnRfc3RvcmUsIDApOworICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgICAgIH0KKyAgICAgIH0KICAgICAgIENlcnRDbG9zZVN0b3JlKGNlcnRfc3RvcmUsIDApOwogICAgIH0KICNlbHNlCkBAIC02NzUsNyArNzkxLDcgQEAKICAgICBCQUNLRU5ELT5jcmVkLT5yZWZjb3VudCA9IDE7CiAKICAgICAvKiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM3NDcxNi5hc3B4Ci0gICAgICAgKi8KKyAgICAgKi8KICAgICBzc3BpX3N0YXR1cyA9CiAgICAgICBzX3BTZWNGbi0+QWNxdWlyZUNyZWRlbnRpYWxzSGFuZGxlKE5VTEwsIChUQ0hBUiAqKVVOSVNQX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ1BLR19DUkVEX09VVEJPVU5ELCBOVUxMLApAQCAtNjkyLDE1ICs4MDgsMTUgQEAKICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgQ3VybF9zYWZlZnJlZShCQUNLRU5ELT5jcmVkKTsKICAgICAgIHN3aXRjaChzc3BpX3N0YXR1cykgewotICAgICAgICBjYXNlIFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlk6Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6Ci0gICAgICAgIGNhc2UgU0VDX0VfU0VDUEtHX05PVF9GT1VORDoKLSAgICAgICAgY2FzZSBTRUNfRV9OT1RfT1dORVI6Ci0gICAgICAgIGNhc2UgU0VDX0VfVU5LTk9XTl9DUkVERU5USUFMUzoKLSAgICAgICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgICBjYXNlIFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlk6CisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgY2FzZSBTRUNfRV9OT19DUkVERU5USUFMUzoKKyAgICAgIGNhc2UgU0VDX0VfU0VDUEtHX05PVF9GT1VORDoKKyAgICAgIGNhc2UgU0VDX0VfTk9UX09XTkVSOgorICAgICAgY2FzZSBTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTOgorICAgICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTcyMiw3ICs4MzgsNyBAQAogICAgIHVuc2lnbmVkIHNob3J0KiBsaXN0X2xlbiA9IE5VTEw7CiAKICAgICAvKiBUaGUgZmlyc3QgZm91ciBieXRlcyB3aWxsIGJlIGFuIHVuc2lnbmVkIGludCBpbmRpY2F0aW5nIG51bWJlcgotICAgICAgIG9mIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIHRoZSBidWZmZXIuICovCisgICAgICAgb2YgYnl0ZXMgb2YgZGF0YSBpbiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLiAqLwogICAgIGV4dGVuc2lvbl9sZW4gPSAodW5zaWduZWQgaW50ICopKCZhbHBuX2J1ZmZlcltjdXJdKTsKICAgICBjdXIgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAKQEAgLTc4NCw3ICs5MDAsNyBAQAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKLSAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOworICBob3N0X25hbWUgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOwogICBpZighaG9zdF9uYW1lKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC04MDEsMzUgKzkxNywzNSBAQAogICAgIDAsICZCQUNLRU5ELT5jdHh0LT5jdHh0X2hhbmRsZSwKICAgICAmb3V0YnVmX2Rlc2MsICZCQUNLRU5ELT5yZXRfZmxhZ3MsICZCQUNLRU5ELT5jdHh0LT50aW1lX3N0YW1wKTsKIAotICBDdXJsX3VuaWNvZGVmcmVlKGhvc3RfbmFtZSk7CisgIGN1cmx4X3VuaWNvZGVmcmVlKGhvc3RfbmFtZSk7CiAKICAgaWYoc3NwaV9zdGF0dXMgIT0gU0VDX0lfQ09OVElOVUVfTkVFREVEKSB7CiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICBDdXJsX3NhZmVmcmVlKEJBQ0tFTkQtPmN0eHQpOwogICAgIHN3aXRjaChzc3BpX3N0YXR1cykgewotICAgICAgY2FzZSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZOgotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IGluaXRpYWwgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogU05JIG9yIGNlcnRpZmljYXRlIGNoZWNrIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICAgICAgLyoKLSAgICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9IQU5ETEU6Ci0gICAgICBjYXNlIFNFQ19FX0lOVkFMSURfVE9LRU46Ci0gICAgICBjYXNlIFNFQ19FX0xPR09OX0RFTklFRDoKLSAgICAgIGNhc2UgU0VDX0VfVEFSR0VUX1VOS05PV046Ci0gICAgICBjYXNlIFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWToKLSAgICAgIGNhc2UgU0VDX0VfSU5URVJOQUxfRVJST1I6Ci0gICAgICBjYXNlIFNFQ19FX05PX0NSRURFTlRJQUxTOgotICAgICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKLSAgICAgIGNhc2UgU0VDX0VfQVBQTElDQVRJT05fUFJPVE9DT0xfTUlTTUFUQ0g6Ci0gICAgICAgICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IGluaXRpYWwgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICBjYXNlIFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlk6CisgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IGluaXRpYWwgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6CisgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IFNOSSBvciBjZXJ0aWZpY2F0ZSBjaGVjayBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIC8qCisgICAgICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9IQU5ETEU6CisgICAgICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9UT0tFTjoKKyAgICAgICAgY2FzZSBTRUNfRV9MT0dPTl9ERU5JRUQ6CisgICAgICAgIGNhc2UgU0VDX0VfVEFSR0VUX1VOS05PV046CisgICAgICAgIGNhc2UgU0VDX0VfTk9fQVVUSEVOVElDQVRJTkdfQVVUSE9SSVRZOgorICAgICAgICBjYXNlIFNFQ19FX0lOVEVSTkFMX0VSUk9SOgorICAgICAgICBjYXNlIFNFQ19FX05PX0NSRURFTlRJQUxTOgorICAgICAgICBjYXNlIFNFQ19FX1VOU1VQUE9SVEVEX0ZVTkNUSU9OOgorICAgICAgICBjYXNlIFNFQ19FX0FQUExJQ0FUSU9OX1BST1RPQ09MX01JU01BVENIOgorICAgICAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBpbml0aWFsIEluaXRpYWxpemVTZWN1cml0eUNvbnRleHQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CiAgIH0KIApAQCAtODc1LDggKzk5MSwxMiBAQAogICBTRUNVUklUWV9TVEFUVVMgc3NwaV9zdGF0dXMgPSBTRUNfRV9PSzsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBib29sIGRvcmVhZDsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKKyNlbHNlCisgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyNlbmRpZgogICBjb25zdCBjaGFyICpwdWJrZXlfcHRyOwogCiAgIGRvcmVhZCA9IChjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlICE9IHNzbF9jb25uZWN0XzJfd3JpdGluZykgPyBUUlVFIDogRkFMU0U7CkBAIC05ODQsMTggKzExMDQsMTggQEAKICAgICBtZW1jcHkoaW5idWZbMF0ucHZCdWZmZXIsIEJBQ0tFTkQtPmVuY2RhdGFfYnVmZmVyLAogICAgICAgICAgICBCQUNLRU5ELT5lbmNkYXRhX29mZnNldCk7CiAKLSAgICBob3N0X25hbWUgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihob3N0bmFtZSk7CisgICAgaG9zdF9uYW1lID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKGhvc3RuYW1lKTsKICAgICBpZighaG9zdF9uYW1lKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgICAvKiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM3NTkyNC5hc3B4Ci0gICAgICAgKi8KKyAgICAgKi8KICAgICBzc3BpX3N0YXR1cyA9IHNfcFNlY0ZuLT5Jbml0aWFsaXplU2VjdXJpdHlDb250ZXh0KAogICAgICAgJkJBQ0tFTkQtPmNyZWQtPmNyZWRfaGFuZGxlLCAmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCiAgICAgICBob3N0X25hbWUsIEJBQ0tFTkQtPnJlcV9mbGFncywgMCwgMCwgJmluYnVmX2Rlc2MsIDAsIE5VTEwsCiAgICAgICAmb3V0YnVmX2Rlc2MsICZCQUNLRU5ELT5yZXRfZmxhZ3MsICZCQUNLRU5ELT5jdHh0LT50aW1lX3N0YW1wKTsKIAotICAgIEN1cmxfdW5pY29kZWZyZWUoaG9zdF9uYW1lKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShob3N0X25hbWUpOwogCiAgICAgLyogZnJlZSBidWZmZXIgZm9yIHJlY2VpdmVkIGhhbmRzaGFrZSBkYXRhICovCiAgICAgQ3VybF9zYWZlZnJlZShpbmJ1ZlswXS5wdkJ1ZmZlcik7CkBAIC0xMDUwLDI5ICsxMTcwLDI5IEBACiAgICAgZWxzZSB7CiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgc3dpdGNoKHNzcGlfc3RhdHVzKSB7Ci0gICAgICAgIGNhc2UgU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWToKLSAgICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IG5leHQgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBTTkkgb3IgY2VydGlmaWNhdGUgY2hlY2sgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICAgICAgICAvKgotICAgICAgICBjYXNlIFNFQ19FX0lOVkFMSURfSEFORExFOgotICAgICAgICBjYXNlIFNFQ19FX0lOVkFMSURfVE9LRU46Ci0gICAgICAgIGNhc2UgU0VDX0VfTE9HT05fREVOSUVEOgotICAgICAgICBjYXNlIFNFQ19FX1RBUkdFVF9VTktOT1dOOgotICAgICAgICBjYXNlIFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWToKLSAgICAgICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKLSAgICAgICAgY2FzZSBTRUNfRV9OT19DUkVERU5USUFMUzoKLSAgICAgICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKLSAgICAgICAgY2FzZSBTRUNfRV9BUFBMSUNBVElPTl9QUk9UT0NPTF9NSVNNQVRDSDoKLSAgICAgICAgICAqLwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogbmV4dCBJbml0aWFsaXplU2VjdXJpdHlDb250ZXh0IGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIGNhc2UgU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWToKKyAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBuZXh0IEluaXRpYWxpemVTZWN1cml0eUNvbnRleHQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGNhc2UgU0VDX0VfV1JPTkdfUFJJTkNJUEFMOgorICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IFNOSSBvciBjZXJ0aWZpY2F0ZSBjaGVjayBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICAgIC8qCisgICAgICAgICAgY2FzZSBTRUNfRV9JTlZBTElEX0hBTkRMRToKKyAgICAgICAgICBjYXNlIFNFQ19FX0lOVkFMSURfVE9LRU46CisgICAgICAgICAgY2FzZSBTRUNfRV9MT0dPTl9ERU5JRUQ6CisgICAgICAgICAgY2FzZSBTRUNfRV9UQVJHRVRfVU5LTk9XTjoKKyAgICAgICAgICBjYXNlIFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWToKKyAgICAgICAgICBjYXNlIFNFQ19FX0lOVEVSTkFMX0VSUk9SOgorICAgICAgICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6CisgICAgICAgICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKKyAgICAgICAgICBjYXNlIFNFQ19FX0FQUExJQ0FUSU9OX1BST1RPQ09MX01JU01BVENIOgorICAgICAgICAqLworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBuZXh0IEluaXRpYWxpemVTZWN1cml0eUNvbnRleHQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgICB9CiAgICAgfQogCkBAIC0xMTgxLDYgKzEzMDEsNyBAQAogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CiAgIENVUkxjb2RlIHJlc3VsdDsKICAgaW50IGlkeDsKKyAgaW50IGNlcnRzX2NvdW50OwogfTsKIAogc3RhdGljIGJvb2wKQEAgLTExOTEsNyArMTMxMiw5IEBACiAgIGlmKHZhbGlkX2NlcnRfZW5jb2RpbmcoY2NlcnRfY29udGV4dCkpIHsKICAgICBjb25zdCBjaGFyICpiZWcgPSAoY29uc3QgY2hhciAqKSBjY2VydF9jb250ZXh0LT5wYkNlcnRFbmNvZGVkOwogICAgIGNvbnN0IGNoYXIgKmVuZCA9IGJlZyArIGNjZXJ0X2NvbnRleHQtPmNiQ2VydEVuY29kZWQ7Ci0gICAgYXJncy0+cmVzdWx0ID0gQ3VybF9leHRyYWN0X2NlcnRpbmZvKGFyZ3MtPmNvbm4sIChhcmdzLT5pZHgpKyssIGJlZywgZW5kKTsKKyAgICBpbnQgaW5zZXJ0X2luZGV4ID0gKGFyZ3MtPmNlcnRzX2NvdW50IC0gMSkgLSBhcmdzLT5pZHg7CisgICAgYXJncy0+cmVzdWx0ID0gQ3VybF9leHRyYWN0X2NlcnRpbmZvKGFyZ3MtPmNvbm4sIGluc2VydF9pbmRleCwgYmVnLCBlbmQpOworICAgIGFyZ3MtPmlkeCsrOwogICB9CiAgIHJldHVybiBhcmdzLT5yZXN1bHQgPT0gQ1VSTEVfT0s7CiB9CkBAIC0xMjM4LDggKzEzNjEsMTAgQEAKIAogI2lmZGVmIEhBU19BTFBOCiAgIGlmKEJBQ0tFTkQtPnVzZV9hbHBuKSB7Ci0gICAgc3NwaV9zdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCi0gICAgICBTRUNQS0dfQVRUUl9BUFBMSUNBVElPTl9QUk9UT0NPTCwgJmFscG5fcmVzdWx0KTsKKyAgICBzc3BpX3N0YXR1cyA9CisgICAgICBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNQS0dfQVRUUl9BUFBMSUNBVElPTl9QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbHBuX3Jlc3VsdCk7CiAKICAgICBpZihzc3BpX3N0YXR1cyAhPSBTRUNfRV9PSykgewogICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBmYWlsZWQgdG8gcmV0cmlldmUgQUxQTiByZXN1bHQiKTsKQEAgLTEyNTAsMjEgKzEzNzUsMjEgQEAKICAgICAgICBTZWNBcHBsaWNhdGlvblByb3RvY29sTmVnb3RpYXRpb25TdGF0dXNfU3VjY2VzcykgewogCiAgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IEFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJS4qc1xuIiwKLSAgICAgICAgYWxwbl9yZXN1bHQuUHJvdG9jb2xJZFNpemUsIGFscG5fcmVzdWx0LlByb3RvY29sSWQpOworICAgICAgICAgICAgYWxwbl9yZXN1bHQuUHJvdG9jb2xJZFNpemUsIGFscG5fcmVzdWx0LlByb3RvY29sSWQpOwogCiAjaWZkZWYgVVNFX05HSFRUUDIKICAgICAgIGlmKGFscG5fcmVzdWx0LlByb3RvY29sSWRTaXplID09IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4gJiYKICAgICAgICAgICFtZW1jbXAoTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lELCBhbHBuX3Jlc3VsdC5Qcm90b2NvbElkLAotICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKSB7CisgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKSB7CiAgICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzI7CiAgICAgICB9CiAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgIGlmKGFscG5fcmVzdWx0LlByb3RvY29sSWRTaXplID09IEFMUE5fSFRUUF8xXzFfTEVOR1RIICYmCi0gICAgICAgICAhbWVtY21wKEFMUE5fSFRUUF8xXzEsIGFscG5fcmVzdWx0LlByb3RvY29sSWQsCi0gICAgICAgICAgIEFMUE5fSFRUUF8xXzFfTEVOR1RIKSkgewotICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7Ci0gICAgICB9CisgICAgICAgIGlmKGFscG5fcmVzdWx0LlByb3RvY29sSWRTaXplID09IEFMUE5fSFRUUF8xXzFfTEVOR1RIICYmCisgICAgICAgICAgICFtZW1jbXAoQUxQTl9IVFRQXzFfMSwgYWxwbl9yZXN1bHQuUHJvdG9jb2xJZCwKKyAgICAgICAgICAgICAgICAgICBBTFBOX0hUVFBfMV8xX0xFTkdUSCkpIHsKKyAgICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBkaWQgbm90IGFncmVlIHRvIGEgcHJvdG9jb2xcbiIpOwpAQCAtMTMxMSw4ICsxNDM2LDEwIEBACiAKICAgaWYoZGF0YS0+c2V0LnNzbC5jZXJ0aW5mbykgewogICAgIGludCBjZXJ0c19jb3VudCA9IDA7Ci0gICAgc3NwaV9zdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCi0gICAgICBTRUNQS0dfQVRUUl9SRU1PVEVfQ0VSVF9DT05URVhULCAmY2NlcnRfY29udGV4dCk7CisgICAgc3NwaV9zdGF0dXMgPQorICAgICAgc19wU2VjRm4tPlF1ZXJ5Q29udGV4dEF0dHJpYnV0ZXMoJkJBQ0tFTkQtPmN0eHQtPmN0eHRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDUEtHX0FUVFJfUkVNT1RFX0NFUlRfQ09OVEVYVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjY2VydF9jb250ZXh0KTsKIAogICAgIGlmKChzc3BpX3N0YXR1cyAhPSBTRUNfRV9PSykgfHwgKGNjZXJ0X2NvbnRleHQgPT0gTlVMTCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogZmFpbGVkIHRvIHJldHJpZXZlIHJlbW90ZSBjZXJ0IGNvbnRleHQiKTsKQEAgLTEzMjYsNiArMTQ1Myw3IEBACiAgICAgICBzdHJ1Y3QgQWRkZXJfYXJncyBhcmdzOwogICAgICAgYXJncy5jb25uID0gY29ubjsKICAgICAgIGFyZ3MuaWR4ID0gMDsKKyAgICAgIGFyZ3MuY2VydHNfY291bnQgPSBjZXJ0c19jb3VudDsKICAgICAgIHRyYXZlcnNlX2NlcnRfc3RvcmUoY2NlcnRfY29udGV4dCwgYWRkX2NlcnRfdG9fY2VydGluZm8sICZhcmdzKTsKICAgICAgIHJlc3VsdCA9IGFyZ3MucmVzdWx0OwogICAgIH0KQEAgLTEzNDcsNyArMTQ3NSw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIHRpbWVfdCB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIGludCB3aGF0OwogCiAgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KQEAgLTE1NDMsMTQgKzE2NzEsMTAgQEAKIAogICAgIC8qIHNlbmQgZW50aXJlIG1lc3NhZ2Ugb3IgZmFpbCAqLwogICAgIHdoaWxlKGxlbiA+IChzaXplX3Qpd3JpdHRlbikgewotICAgICAgc3NpemVfdCB0aGlzX3dyaXRlOwotICAgICAgdGltZV90IHRpbWVsZWZ0OworICAgICAgc3NpemVfdCB0aGlzX3dyaXRlID0gMDsKICAgICAgIGludCB3aGF0OwotCi0gICAgICB0aGlzX3dyaXRlID0gMDsKLQotICAgICAgdGltZWxlZnQgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIEZBTFNFKTsKLSAgICAgIGlmKHRpbWVsZWZ0IDwgMCkgeworICAgICAgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChjb25uLT5kYXRhLCBOVUxMLCBGQUxTRSk7CisgICAgICBpZih0aW1lb3V0X21zIDwgMCkgewogICAgICAgICAvKiB3ZSBhbHJlYWR5IGdvdCB0aGUgdGltZW91dCAqLwogICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAic2NoYW5uZWw6IHRpbWVkIG91dCBzZW5kaW5nIGRhdGEgIgogICAgICAgICAgICAgICAiKGJ5dGVzIHNlbnQ6ICV6ZCkiLCB3cml0dGVuKTsKQEAgLTE1NTgsOCArMTY4Miw5IEBACiAgICAgICAgIHdyaXR0ZW4gPSAtMTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0KLSAgICAgIHdoYXQgPSBTT0NLRVRfV1JJVEFCTEUoY29ubi0+c29ja1tzb2NraW5kZXhdLCB0aW1lbGVmdCk7CisgICAgICBlbHNlIGlmKCF0aW1lb3V0X21zKQorICAgICAgICB0aW1lb3V0X21zID0gVElNRURJRkZfVF9NQVg7CisgICAgICB3aGF0ID0gU09DS0VUX1dSSVRBQkxFKGNvbm4tPnNvY2tbc29ja2luZGV4XSwgdGltZW91dF9tcyk7CiAgICAgICBpZih3aGF0IDwgMCkgewogICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwogICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKQEAgLTE2NTMsOCArMTc3OCw4IEBACiAgIH0KICAgZWxzZSBpZighbGVuKSB7CiAgICAgLyogSXQncyBkZWJhdGFibGUgd2hhdCB0byByZXR1cm4gd2hlbiAhbGVuLiBSZWdhcmRsZXNzIHdlIGNhbid0IHJldHVybgotICAgIGltbWVkaWF0ZWx5IGJlY2F1c2UgdGhlcmUgbWF5IGJlIGRhdGEgdG8gZGVjcnlwdCAoaW4gdGhlIGNhc2Ugd2Ugd2FudCB0bwotICAgIGRlY3J5cHQgYWxsIGVuY3J5cHRlZCBjYWNoZWQgZGF0YSkgc28gaGFuZGxlICFsZW4gbGF0ZXIgaW4gY2xlYW51cC4KKyAgICAgICBpbW1lZGlhdGVseSBiZWNhdXNlIHRoZXJlIG1heSBiZSBkYXRhIHRvIGRlY3J5cHQgKGluIHRoZSBjYXNlIHdlIHdhbnQgdG8KKyAgICAgICBkZWNyeXB0IGFsbCBlbmNyeXB0ZWQgY2FjaGVkIGRhdGEpIHNvIGhhbmRsZSAhbGVuIGxhdGVyIGluIGNsZWFudXAuCiAgICAgKi8KICAgICA7IC8qIGRvIG5vdGhpbmcgKi8KICAgfQpAQCAtMTY2NCw3ICsxNzg5LDcgQEAKICAgICBpZihzaXplIDwgQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFIHx8CiAgICAgICAgQkFDS0VORC0+ZW5jZGF0YV9sZW5ndGggPCBtaW5fZW5jZGF0YV9sZW5ndGgpIHsKICAgICAgIHJlYWxsb2NhdGVkX2xlbmd0aCA9IEJBQ0tFTkQtPmVuY2RhdGFfb2Zmc2V0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU0NIQU5ORUxfQlVGRkVSX0ZSRUVfU0laRTsKKyAgICAgICAgQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFOwogICAgICAgaWYocmVhbGxvY2F0ZWRfbGVuZ3RoIDwgbWluX2VuY2RhdGFfbGVuZ3RoKSB7CiAgICAgICAgIHJlYWxsb2NhdGVkX2xlbmd0aCA9IG1pbl9lbmNkYXRhX2xlbmd0aDsKICAgICAgIH0KQEAgLTE3MzIsNyArMTg1Nyw3IEBACiAgICAgSW5pdFNlY0J1ZmZlckRlc2MoJmluYnVmX2Rlc2MsIGluYnVmLCA0KTsKIAogICAgIC8qIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzc1MzQ4LmFzcHgKLSAgICAgICAqLworICAgICAqLwogICAgIHNzcGlfc3RhdHVzID0gc19wU2VjRm4tPkRlY3J5cHRNZXNzYWdlKCZCQUNLRU5ELT5jdHh0LT5jdHh0X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5idWZfZGVzYywgMCwgTlVMTCk7CiAKQEAgLTE3NDgsNyArMTg3Myw3IEBACiAKICAgICAgICAgLyogaW5jcmVhc2UgYnVmZmVyIGluIG9yZGVyIHRvIGZpdCB0aGUgcmVjZWl2ZWQgYW1vdW50IG9mIGRhdGEgKi8KICAgICAgICAgc2l6ZSA9IGluYnVmWzFdLmNiQnVmZmVyID4gQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFID8KLSAgICAgICAgICAgICAgIGluYnVmWzFdLmNiQnVmZmVyIDogQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFOworICAgICAgICAgIGluYnVmWzFdLmNiQnVmZmVyIDogQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFOwogICAgICAgICBpZihCQUNLRU5ELT5kZWNkYXRhX2xlbmd0aCAtIEJBQ0tFTkQtPmRlY2RhdGFfb2Zmc2V0IDwgc2l6ZSB8fAogICAgICAgICAgICBCQUNLRU5ELT5kZWNkYXRhX2xlbmd0aCA8IGxlbikgewogICAgICAgICAgIC8qIGluY3JlYXNlIGludGVybmFsIGRlY3J5cHRlZCBkYXRhIGJ1ZmZlciAqLwpAQCAtMTgxOCw3ICsxOTQzLDcgQEAKICAgICAgICAgaWYoQkFDS0VORC0+ZW5jZGF0YV9vZmZzZXQpIHsKICAgICAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKICAgICAgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IGNhbid0IHJlbm9nb3RpYXRlLCAiCi0gICAgICAgICAgICAgICAgICAgICAgImVuY3J5cHRlZCBkYXRhIGF2YWlsYWJsZVxuIik7CisgICAgICAgICAgICAgICAgImVuY3J5cHRlZCBkYXRhIGF2YWlsYWJsZVxuIik7CiAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICB9CiAgICAgICAgIC8qIGJlZ2luIHJlbmVnb3RpYXRpb24gKi8KQEAgLTE4NTUsNyArMTk4MCw5IEBACiAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgfQogICAgIGVsc2UgeworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOworI2VuZGlmCiAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKICAgICAgIGluZm9mKGRhdGEsICJzY2hhbm5lbDogZmFpbGVkIHRvIHJlYWQgZGF0YSBmcm9tIHNlcnZlcjogJXNcbiIsCiAgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKQEAgLTE4NzEsMTcgKzE5OTgsMjAgQEAKICAgICAgICAgICAgICAgICJzY2hhbm5lbDogZGVjcnlwdGVkIGRhdGEgYnVmZmVyOiBvZmZzZXQgJXp1IGxlbmd0aCAlenVcbiIsCiAgICAgICAgICAgICAgICBCQUNLRU5ELT5kZWNkYXRhX29mZnNldCwgQkFDS0VORC0+ZGVjZGF0YV9sZW5ndGgpKTsKIAotY2xlYW51cDoKKyAgY2xlYW51cDoKICAgLyogV2FybmluZy0gdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoZSBlbmNkYXRhIHN0YXRlIGlzIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KICAgREVCVUdGKGluZm9mKGRhdGEsICJzY2hhbm5lbDogc2NoYW5uZWxfcmVjdiBjbGVhbnVwXG4iKSk7CiAKICAgLyogRXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZCB3aXRob3V0IGEgY2xvc2Vfbm90aWZ5LgotICBCZWhhdmlvciBoZXJlIGlzIGEgbWF0dGVyIG9mIGRlYmF0ZS4gV2UgZG9uJ3Qgd2FudCB0byBiZSB2dWxuZXJhYmxlIHRvIGEKLSAgdHJ1bmNhdGlvbiBhdHRhY2sgaG93ZXZlciB0aGVyZSdzIHNvbWUgYnJvd3NlciBwcmVjZWRlbnQgZm9yIGlnbm9yaW5nIHRoZQotICBjbG9zZV9ub3RpZnkgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KLSAgQWRkaXRpb25hbGx5LCBXaW5kb3dzIDIwMDAgKHY1LjApIGlzIGEgc3BlY2lhbCBjYXNlIHNpbmNlIGl0IHNlZW1zIGl0IGRvZXNuJ3QKLSAgcmV0dXJuIGNsb3NlX25vdGlmeS4gSW4gdGhhdCBjYXNlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgd2UgYXNzdW1lIGl0Ci0gIHdhcyBncmFjZWZ1bCAoY2xvc2Vfbm90aWZ5KSBzaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSB3YXkgdG8gdGVsbC4KKworICAgICBUaGUgYmVoYXZpb3IgaGVyZSBpcyBhIG1hdHRlciBvZiBkZWJhdGUuIFdlIGRvbid0IHdhbnQgdG8gYmUgdnVsbmVyYWJsZQorICAgICB0byBhIHRydW5jYXRpb24gYXR0YWNrIGhvd2V2ZXIgdGhlcmUncyBzb21lIGJyb3dzZXIgcHJlY2VkZW50IGZvcgorICAgICBpZ25vcmluZyB0aGUgY2xvc2Vfbm90aWZ5IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisKKyAgICAgQWRkaXRpb25hbGx5LCBXaW5kb3dzIDIwMDAgKHY1LjApIGlzIGEgc3BlY2lhbCBjYXNlIHNpbmNlIGl0IHNlZW1zIGl0CisgICAgIGRvZXNuJ3QgcmV0dXJuIGNsb3NlX25vdGlmeS4gSW4gdGhhdCBjYXNlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgd2UKKyAgICAgYXNzdW1lIGl0IHdhcyBncmFjZWZ1bCAoY2xvc2Vfbm90aWZ5KSBzaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYQorICAgICB3YXkgdG8gdGVsbC4KICAgKi8KICAgaWYobGVuICYmICFCQUNLRU5ELT5kZWNkYXRhX29mZnNldCAmJiBCQUNLRU5ELT5yZWN2X2Nvbm5lY3Rpb25fY2xvc2VkICYmCiAgICAgICFCQUNLRU5ELT5yZWN2X3NzcGlfY2xvc2Vfbm90aWZ5KSB7CkBAIC0xODk4LDcgKzIwMjgsNyBAQAogCiAgIC8qIEFueSBlcnJvciBvdGhlciB0aGFuIENVUkxFX0FHQUlOIGlzIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IuICovCiAgIGlmKCplcnIgJiYgKmVyciAhPSBDVVJMRV9BR0FJTikKLSAgICAgIEJBQ0tFTkQtPnJlY3ZfdW5yZWNvdmVyYWJsZV9lcnIgPSAqZXJyOworICAgIEJBQ0tFTkQtPnJlY3ZfdW5yZWNvdmVyYWJsZV9lcnIgPSAqZXJyOwogCiAgIHNpemUgPSBsZW4gPCBCQUNLRU5ELT5kZWNkYXRhX29mZnNldCA/IGxlbiA6IEJBQ0tFTkQtPmRlY2RhdGFfb2Zmc2V0OwogICBpZihzaXplKSB7CkBAIC0xOTE1LDEwICsyMDQ1LDExIEBACiAgIH0KIAogICBpZighKmVyciAmJiAhQkFDS0VORC0+cmVjdl9jb25uZWN0aW9uX2Nsb3NlZCkKLSAgICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CiAKLSAgLyogSXQncyBkZWJhdGFibGUgd2hhdCB0byByZXR1cm4gd2hlbiAhbGVuLiBXZSBjb3VsZCByZXR1cm4gd2hhdGV2ZXIgZXJyb3Igd2UKLSAgZ290IGZyb20gZGVjcnlwdGlvbiBidXQgaW5zdGVhZCB3ZSBvdmVycmlkZSBoZXJlIHNvIHRoZSByZXR1cm4gaXMgY29uc2lzdGVudC4KKyAgLyogSXQncyBkZWJhdGFibGUgd2hhdCB0byByZXR1cm4gd2hlbiAhbGVuLiBXZSBjb3VsZCByZXR1cm4gd2hhdGV2ZXIgZXJyb3IKKyAgICAgd2UgZ290IGZyb20gZGVjcnlwdGlvbiBidXQgaW5zdGVhZCB3ZSBvdmVycmlkZSBoZXJlIHNvIHRoZSByZXR1cm4gaXMKKyAgICAgY29uc2lzdGVudC4KICAgKi8KICAgaWYoIWxlbikKICAgICAqZXJyID0gQ1VSTEVfT0s7CkBAIC0xOTg0LDggKzIxMTUsMTIgQEAKICAgICovCiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKKyNlbHNlCisgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyNlbmRpZgogCiAgIERFQlVHQVNTRVJUKGRhdGEpOwogCkBAIC0yMDE0LDcgKzIxNDksNyBAQAogICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgfQogCi0gICAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOworICAgIGhvc3RfbmFtZSA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcihob3N0bmFtZSk7CiAgICAgaWYoIWhvc3RfbmFtZSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0yMDM2LDcgKzIxNzEsNyBAQAogICAgICAgJkJBQ0tFTkQtPnJldF9mbGFncywKICAgICAgICZCQUNLRU5ELT5jdHh0LT50aW1lX3N0YW1wKTsKIAotICAgIEN1cmxfdW5pY29kZWZyZWUoaG9zdF9uYW1lKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShob3N0X25hbWUpOwogCiAgICAgaWYoKHNzcGlfc3RhdHVzID09IFNFQ19FX09LKSB8fCAoc3NwaV9zdGF0dXMgPT0gU0VDX0lfQ09OVEVYVF9FWFBJUkVEKSkgewogICAgICAgLyogc2VuZCBjbG9zZSBtZXNzYWdlIHdoaWNoIGlzIGluIG91dHB1dCBidWZmZXIgKi8KQEAgLTIxNDUsOCArMjI4MCw4IEBACiAgICAgU0VDVVJJVFlfU1RBVFVTIHNzcGlfc3RhdHVzOwogICAgIGNvbnN0IGNoYXIgKng1MDlfZGVyOwogICAgIERXT1JEIHg1MDlfZGVyX2xlbjsKLSAgICBjdXJsX1g1MDljZXJ0aWZpY2F0ZSB4NTA5X3BhcnNlZDsKLSAgICBjdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7CisgICAgc3RydWN0IEN1cmxfWDUwOWNlcnRpZmljYXRlIHg1MDlfcGFyc2VkOworICAgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7CiAKICAgICBzc3BpX3N0YXR1cyA9CiAgICAgICBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCkBAIC0yMTYyLDcgKzIyOTcsNyBAQAogCiAKICAgICBpZighKCgocENlcnRDb250ZXh0U2VydmVyLT5kd0NlcnRFbmNvZGluZ1R5cGUgJiBYNTA5X0FTTl9FTkNPRElORykgIT0gMCkgJiYKLSAgICAgICAocENlcnRDb250ZXh0U2VydmVyLT5jYkNlcnRFbmNvZGVkID4gMCkpKQorICAgICAgICAgKHBDZXJ0Q29udGV4dFNlcnZlci0+Y2JDZXJ0RW5jb2RlZCA+IDApKSkKICAgICAgIGJyZWFrOwogCiAgICAgeDUwOV9kZXIgPSAoY29uc3QgY2hhciAqKXBDZXJ0Q29udGV4dFNlcnZlci0+cGJDZXJ0RW5jb2RlZDsKQEAgLTIyMTEsNyArMjM0Niw3IEBACiAgIG1lbXNldChjaGVja3N1bSwgMCwgY2hlY2tzdW1sZW4pOwogCiAgIGlmKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZoUHJvdiwgTlVMTCwgTlVMTCwgcHJvdlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9WRVJJRllDT05URVhUIHwgQ1JZUFRfU0lMRU5UKSkKICAgICByZXR1cm47IC8qIGZhaWxlZCAqLwogCiAgIGRvIHsKQEAgLTIyNTMsOSArMjM4OCw5IEBACiB9CiAKIHN0YXRpYyBDVVJMY29kZSBDdXJsX3NjaGFubmVsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTI1NnN1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaGEyNTZsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTI1NnN1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2hhMjU2bGVuKQogewogICBDdXJsX3NjaGFubmVsX2NoZWNrc3VtKGlucHV0LCBpbnB1dGxlbiwgc2hhMjU2c3VtLCBzaGEyNTZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVl9SU0FfQUVTLCBDQUxHX1NIQV8yNTYpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbF92ZXJpZnkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWxfdmVyaWZ5LmMKaW5kZXggNWEwOWU5Ni4uYmRkNzE5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbF92ZXJpZnkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NjaGFubmVsX3ZlcmlmeS5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIE1hcmMgSG9lcnNrZW4sIDxpbmZvQG1hcmMtaG9lcnNrZW4uZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIE1hcmsgU2FsaXNidXJ5LCA8bWFyay5zYWxpc2J1cnlAaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU3LDcgKzU3LDcgQEAKICNkZWZpbmUgQkVHSU5fQ0VSVCAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIgogI2RlZmluZSBFTkRfQ0VSVCAiXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIgogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgY2VydF9jaGFpbl9lbmdpbmVfY29uZmlnX3dpbjcgewogICBEV09SRCBjYlNpemU7CiAgIEhDRVJUU1RPUkUgaFJlc3RyaWN0ZWRSb290OwogICBIQ0VSVFNUT1JFIGhSZXN0cmljdGVkVHJ1c3Q7CkBAIC03MCw3ICs3MCw3IEBACiAgIERXT1JEIEN5Y2xlRGV0ZWN0aW9uTW9kdWx1czsKICAgSENFUlRTVE9SRSBoRXhjbHVzaXZlUm9vdDsKICAgSENFUlRTVE9SRSBoRXhjbHVzaXZlVHJ1c3RlZFBlb3BsZTsKLX0gQ0VSVF9DSEFJTl9FTkdJTkVfQ09ORklHX1dJTjcsICpQQ0VSVF9DSEFJTl9FTkdJTkVfQ09ORklHX1dJTjc7Cit9OwogCiBzdGF0aWMgaW50IGlzX2NyX29yX2xmKGNoYXIgYykKIHsKQEAgLTk0LDEyICs5NCwxMyBAQAogICBpbnQgbnVtX2NlcnRzID0gMDsKICAgc2l6ZV90IEVORF9DRVJUX0xFTjsKIAotICBjYV9maWxlX3RzdHIgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKWNhX2ZpbGUpOworICBjYV9maWxlX3RzdHIgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKiljYV9maWxlKTsKICAgaWYoIWNhX2ZpbGVfdHN0cikgewogICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAic2NoYW5uZWw6IGludmFsaWQgcGF0aCBuYW1lIGZvciBDQSBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICBjYV9maWxlLCBDdXJsX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgICAgY2FfZmlsZSwKKyAgICAgICAgICBDdXJsX3dpbmFwaV9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIHJlc3VsdCA9IENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICBnb3RvIGNsZWFudXA7CiAgIH0KQEAgLTExMSw3ICsxMTIsNyBAQAogICAgKi8KICAgY2FfZmlsZV9oYW5kbGUgPSBDcmVhdGVGaWxlKGNhX2ZpbGVfdHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1NIQVJFX1JFQUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9FWElTVElORywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwKQEAgLTEyMCw3ICsxMjEsOCBAQAogICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAic2NoYW5uZWw6IGZhaWxlZCB0byBvcGVuIENBIGZpbGUgJyVzJzogJXMiLAotICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICBjYV9maWxlLAorICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQpAQCAtMTI5LDcgKzEzMSw4IEBACiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIGRldGVybWluZSBzaXplIG9mIENBIGZpbGUgJyVzJzogJXMiLAotICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICBjYV9maWxlLAorICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQpAQCAtMTU5LDcgKzE2Miw4IEBACiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIHJlYWQgZnJvbSBDQSBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgIGNhX2ZpbGUsCisgICAgICAgICAgICBDdXJsX3dpbmFwaV9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KQEAgLTIyMyw3ICsyMjcsNyBAQAogICAgICAgICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIGV4dHJhY3QgY2VydGlmaWNhdGUgZnJvbSBDQSBmaWxlICIKICAgICAgICAgICAgICAgICAiJyVzJzogJXMiLAogICAgICAgICAgICAgICAgIGNhX2ZpbGUsCi0gICAgICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgICAgIG1vcmVfY2VydHMgPSAwOwogICAgICAgICB9CkBAIC0yNTIsNyArMjU2LDggQEAKICAgICAgICAgICAgICAgICAgICAgInNjaGFubmVsOiBmYWlsZWQgdG8gYWRkIGNlcnRpZmljYXRlIGZyb20gQ0EgZmlsZSAnJXMnICIKICAgICAgICAgICAgICAgICAgICAgInRvIGNlcnRpZmljYXRlIHN0b3JlOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgIGNhX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgICAgICAgICBtb3JlX2NlcnRzID0gMDsKICAgICAgICAgICAgIH0KQEAgLTI4MywxMSArMjg4LDEzOCBAQAogICAgIENsb3NlSGFuZGxlKGNhX2ZpbGVfaGFuZGxlKTsKICAgfQogICBDdXJsX3NhZmVmcmVlKGNhX2ZpbGVfYnVmZmVyKTsKLSAgQ3VybF91bmljb2RlZnJlZShjYV9maWxlX3RzdHIpOworICBjdXJseF91bmljb2RlZnJlZShjYV9maWxlX3RzdHIpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBuZWNlc3NhcnkgdG8gcG9wdWxhdGUgYWxsIHRoZSBob3N0X25hbWVzLgorICogSWYgaG9zdF9uYW1lcyBpcyBub3QgTlVMTCwgcG9wdWxhdGUgaXQgd2l0aCBhbGwgdGhlIGhvc3QgbmFtZXMuIEVhY2ggc3RyaW5nCisgKiBpbiB0aGUgaG9zdF9uYW1lcyBpcyBudWxsLXRlcm1pbmF0ZWQgYW5kIHRoZSBsYXN0IHN0cmluZyBpcyBkb3VibGUKKyAqIG51bGwtdGVybWluYXRlZC4gSWYgbm8gRE5TIG5hbWVzIGFyZSBmb3VuZCwgYSBzaW5nbGUgbnVsbC10ZXJtaW5hdGVkIGVtcHR5CisgKiBzdHJpbmcgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBEV09SRCBjZXJ0X2dldF9uYW1lX3N0cmluZyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfQ09OVEVYVCAqY2VydF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVFNUUiBob3N0X25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGxlbmd0aCkKK3sKKyAgRFdPUkQgYWN0dWFsX2xlbmd0aCA9IDA7CisgIEJPT0wgY29tcHV0ZV9jb250ZW50ID0gRkFMU0U7CisgIENFUlRfSU5GTyAqY2VydF9pbmZvID0gTlVMTDsKKyAgQ0VSVF9FWFRFTlNJT04gKmV4dGVuc2lvbiA9IE5VTEw7CisgIENSWVBUX0RFQ09ERV9QQVJBIGRlY29kZV9wYXJhID0gezAsIDAsIDB9OworICBDRVJUX0FMVF9OQU1FX0lORk8gKmFsdF9uYW1lX2luZm8gPSBOVUxMOworICBEV09SRCBhbHRfbmFtZV9pbmZvX3NpemUgPSAwOworICBCT09MIHJldF92YWwgPSBGQUxTRTsKKyAgTFBUU1RSIGN1cnJlbnRfcG9zID0gTlVMTDsKKyAgRFdPUkQgaTsKKworICAvKiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHIGlzIGF2YWlsYWJsZSBmcm9tIFdpbmRvd3MgOCBvbndhcmRzLiAqLworICBpZihDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNiwgMiwgUExBVEZPUk1fV0lOTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0dSRUFURVJfVEhBTl9FUVVBTCkpIHsKKyNpZmRlZiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHCisgICAgLyogQ2VydEdldE5hbWVTdHJpbmcgd2lsbCBwcm92aWRlIHRoZSA4LWJpdCBjaGFyYWN0ZXIgc3RyaW5nIHdpdGhvdXQKKyAgICAgKiBhbnkgZGVjb2RpbmcgKi8KKyAgICBEV09SRCBuYW1lX2ZsYWdzID0KKyAgICAgIENFUlRfTkFNRV9ESVNBQkxFX0lFNF9VVEY4X0ZMQUcgfCBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHOworICAgIGFjdHVhbF9sZW5ndGggPSBDZXJ0R2V0TmFtZVN0cmluZyhjZXJ0X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfTkFNRV9ETlNfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyNlbmRpZgorICB9CisKKyAgY29tcHV0ZV9jb250ZW50ID0gaG9zdF9uYW1lcyAhPSBOVUxMICYmIGxlbmd0aCAhPSAwOworCisgIC8qIEluaXRpYWxpemUgZGVmYXVsdCByZXR1cm4gdmFsdWVzLiAqLworICBhY3R1YWxfbGVuZ3RoID0gMTsKKyAgaWYoY29tcHV0ZV9jb250ZW50KSB7CisgICAgKmhvc3RfbmFtZXMgPSAnXDAnOworICB9CisKKyAgaWYoIWNlcnRfY29udGV4dCkgeworICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogTnVsbCBjZXJ0aWZpY2F0ZSBjb250ZXh0LiIpOworICAgIHJldHVybiBhY3R1YWxfbGVuZ3RoOworICB9CisKKyAgY2VydF9pbmZvID0gY2VydF9jb250ZXh0LT5wQ2VydEluZm87CisgIGlmKCFjZXJ0X2luZm8pIHsKKyAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IE51bGwgY2VydGlmaWNhdGUgaW5mby4iKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyAgfQorCisgIGV4dGVuc2lvbiA9IENlcnRGaW5kRXh0ZW5zaW9uKHN6T0lEX1NVQkpFQ1RfQUxUX05BTUUyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2luZm8tPmNFeHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfaW5mby0+cmdFeHRlbnNpb24pOworICBpZighZXh0ZW5zaW9uKSB7CisgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBDZXJ0RmluZEV4dGVuc2lvbigpIHJldHVybmVkIG5vIGV4dGVuc2lvbi4iKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyAgfQorCisgIGRlY29kZV9wYXJhLmNiU2l6ZSA9IHNpemVvZihDUllQVF9ERUNPREVfUEFSQSk7CisKKyAgcmV0X3ZhbCA9CisgICAgQ3J5cHREZWNvZGVPYmplY3RFeChYNTA5X0FTTl9FTkNPRElORyB8IFBLQ1NfN19BU05fRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICBzek9JRF9TVUJKRUNUX0FMVF9OQU1FMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbi0+VmFsdWUucGJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLT5WYWx1ZS5jYkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9ERUNPREVfQUxMT0NfRkxBRyB8IENSWVBUX0RFQ09ERV9OT0NPUFlfRkxBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICZkZWNvZGVfcGFyYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZhbHRfbmFtZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgJmFsdF9uYW1lX2luZm9fc2l6ZSk7CisgIGlmKCFyZXRfdmFsKSB7CisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAic2NoYW5uZWw6IENyeXB0RGVjb2RlT2JqZWN0RXgoKSByZXR1cm5lZCBubyBhbHRlcm5hdGUgbmFtZSAiCisgICAgICAgICAgImluZm9ybWF0aW9uLiIpOworICAgIHJldHVybiBhY3R1YWxfbGVuZ3RoOworICB9CisKKyAgY3VycmVudF9wb3MgPSBob3N0X25hbWVzOworCisgIC8qIEl0ZXJhdGUgb3ZlciB0aGUgYWx0ZXJuYXRlIG5hbWVzIGFuZCBwb3B1bGF0ZSBob3N0X25hbWVzLiAqLworICBmb3IoaSA9IDA7IGkgPCBhbHRfbmFtZV9pbmZvLT5jQWx0RW50cnk7IGkrKykgeworICAgIGNvbnN0IENFUlRfQUxUX05BTUVfRU5UUlkgKmVudHJ5ID0gJmFsdF9uYW1lX2luZm8tPnJnQWx0RW50cnlbaV07CisgICAgd2NoYXJfdCAqZG5zX3cgPSBOVUxMOworICAgIHNpemVfdCBjdXJyZW50X2xlbmd0aCA9IDA7CisKKyAgICBpZihlbnRyeS0+ZHdBbHROYW1lQ2hvaWNlICE9IENFUlRfQUxUX05BTUVfRE5TX05BTUUpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZihlbnRyeS0+cHdzekROU05hbWUgPT0gTlVMTCkgeworICAgICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiBFbXB0eSBETlMgbmFtZS4iKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBjdXJyZW50X2xlbmd0aCA9IHdjc2xlbihlbnRyeS0+cHdzekROU05hbWUpICsgMTsKKyAgICBpZighY29tcHV0ZV9jb250ZW50KSB7CisgICAgICBhY3R1YWxfbGVuZ3RoICs9IChEV09SRCljdXJyZW50X2xlbmd0aDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICAvKiBTYW5pdHkgY2hlY2sgdG8gcHJldmVudCBidWZmZXIgb3ZlcnJ1bi4gKi8KKyAgICBpZigoYWN0dWFsX2xlbmd0aCArIGN1cnJlbnRfbGVuZ3RoKSA+IGxlbmd0aCkgeworICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBsaXN0IGFsbCBob3N0IG5hbWVzLiIpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRuc193ID0gZW50cnktPnB3c3pETlNOYW1lOworICAgIC8qIHB3c3pETlNOYW1lIGlzIGluIGlhNSBzdHJpbmcgZm9ybWF0IGFuZCBoZW5jZSBkb2Vzbid0IGNvbnRhaW4gYW55CisgICAgICogbm9uLWFzY2lpIGNoYXJhY3RlcnMuICovCisgICAgd2hpbGUoKmRuc193ICE9ICdcMCcpIHsKKyAgICAgICpjdXJyZW50X3BvcysrID0gKGNoYXIpKCpkbnNfdysrKTsKKyAgICB9CisgICAgKmN1cnJlbnRfcG9zKysgPSAnXDAnOworICAgIGFjdHVhbF9sZW5ndGggKz0gKERXT1JEKWN1cnJlbnRfbGVuZ3RoOworICB9CisgIGlmKGNvbXB1dGVfY29udGVudCkgeworICAgIC8qIExhc3Qgc3RyaW5nIGhhcyBkb3VibGUgbnVsbC10ZXJtaW5hdG9yLiAqLworICAgICpjdXJyZW50X3BvcyA9ICdcMCc7CisgIH0KKyAgcmV0dXJuIGFjdHVhbF9sZW5ndGg7Cit9CisKIHN0YXRpYyBDVVJMY29kZSB2ZXJpZnlfaG9zdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfQ09OVEVYVCAqcENlcnRDb250ZXh0U2VydmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBjb25uX2hvc3RuYW1lKQpAQCAtMjk4LDIxICs0MzAsOCBAQAogICBEV09SRCBsZW4gPSAwOwogICBEV09SRCBhY3R1YWxfbGVuID0gMDsKIAotICAvKiBDZXJ0R2V0TmFtZVN0cmluZyB3aWxsIHByb3ZpZGUgdGhlIDgtYml0IGNoYXJhY3RlciBzdHJpbmcgd2l0aG91dAotICAgKiBhbnkgZGVjb2RpbmcgKi8KLSAgRFdPUkQgbmFtZV9mbGFncyA9IENFUlRfTkFNRV9ESVNBQkxFX0lFNF9VVEY4X0ZMQUc7Ci0KLSNpZmRlZiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHCi0gIG5hbWVfZmxhZ3MgfD0gQ0VSVF9OQU1FX1NFQVJDSF9BTExfTkFNRVNfRkxBRzsKLSNlbmRpZgotCiAgIC8qIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIG5lZWRlZCBmb3IgdGhlIGNlcnQgaG9zdG5hbWUgKi8KLSAgbGVuID0gQ2VydEdldE5hbWVTdHJpbmcocENlcnRDb250ZXh0U2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDRVJUX05BTUVfRE5TX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICBsZW4gPSBjZXJ0X2dldF9uYW1lX3N0cmluZyhkYXRhLCBwQ2VydENvbnRleHRTZXJ2ZXIsIE5VTEwsIDApOwogICBpZihsZW4gPT0gMCkgewogICAgIGZhaWxmKGRhdGEsCiAgICAgICAgICAgInNjaGFubmVsOiBDZXJ0R2V0TmFtZVN0cmluZygpIHJldHVybmVkIG5vICIKQEAgLTMyOSwxMiArNDQ4LDggQEAKICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQotICBhY3R1YWxfbGVuID0gQ2VydEdldE5hbWVTdHJpbmcocENlcnRDb250ZXh0U2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVF9OQU1FX0ROU19UWVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBUU1RSKSBjZXJ0X2hvc3RuYW1lX2J1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pOworICBhY3R1YWxfbGVuID0gY2VydF9nZXRfbmFtZV9zdHJpbmcoCisgICAgZGF0YSwgcENlcnRDb250ZXh0U2VydmVyLCAoTFBUU1RSKWNlcnRfaG9zdG5hbWVfYnVmZiwgbGVuKTsKIAogICAvKiBTYW5pdHkgY2hlY2sgKi8KICAgaWYoYWN0dWFsX2xlbiAhPSBsZW4pIHsKQEAgLTM2MSw3ICs0NzYsNyBAQAogICAgICAqIGlzIGFjY2VwdGFibGUgc2luY2UgYm90aCB2YWx1ZXMgYXJlIGFzc3VtZWQgdG8gdXNlIEFTQ0lJCiAgICAgICogKG9yIHNvbWUgZXF1aXZhbGVudCkgZW5jb2RpbmcKICAgICAgKi8KLSAgICBjZXJ0X2hvc3RuYW1lID0gQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoCisgICAgY2VydF9ob3N0bmFtZSA9IGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOCgKICAgICAgICAgJmNlcnRfaG9zdG5hbWVfYnVmZltjZXJ0X2hvc3RuYW1lX2J1ZmZfaW5kZXhdKTsKICAgICBpZighY2VydF9ob3N0bmFtZSkgewogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKQEAgLTM5Myw3ICs1MDgsNyBAQAogCiAgICAgICAgIHJlc3VsdCA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICAgIH0KLSAgICAgIEN1cmxfdW5pY29kZWZyZWUoY2VydF9ob3N0bmFtZSk7CisgICAgICBjdXJseF91bmljb2RlZnJlZShjZXJ0X2hvc3RuYW1lKTsKICAgICB9CiAgIH0KIApAQCAtNDA3LDcgKzUyMiw3IEBACiAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBzZXJ2ZXIgY2VydGlmaWNhdGUgbmFtZSB2ZXJpZmljYXRpb24gZmFpbGVkIik7CiAKIGNsZWFudXA6Ci0gIEN1cmxfdW5pY29kZWZyZWUoY2VydF9ob3N0bmFtZV9idWZmKTsKKyAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9ob3N0bmFtZV9idWZmKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDIyLDkgKzUzNywxMyBAQAogICBjb25zdCBDRVJUX0NIQUlOX0NPTlRFWFQgKnBDaGFpbkNvbnRleHQgPSBOVUxMOwogICBIQ0VSVENIQUlORU5HSU5FIGNlcnRfY2hhaW5fZW5naW5lID0gTlVMTDsKICAgSENFUlRTVE9SRSB0cnVzdF9zdG9yZSA9IE5VTEw7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgY29ubl9ob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8KICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CiAgICAgY29ubi0+aG9zdC5uYW1lOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IGNvbm5faG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisjZW5kaWYKIAogICBzc3BpX3N0YXR1cyA9CiAgICAgc19wU2VjRm4tPlF1ZXJ5Q29udGV4dEF0dHJpYnV0ZXMoJkJBQ0tFTkQtPmN0eHQtPmN0eHRfaGFuZGxlLApAQCAtNDYwLDcgKzU3OSw3IEBACiAgICAgICBpZighdHJ1c3Rfc3RvcmUpIHsKICAgICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBmYWlsZWQgdG8gY3JlYXRlIGNlcnRpZmljYXRlIHN0b3JlOiAlcyIsCi0gICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQogICAgICAgZWxzZSB7CkBAIC00NzAsNyArNTg5LDcgQEAKICAgICB9CiAKICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spIHsKLSAgICAgIENFUlRfQ0hBSU5fRU5HSU5FX0NPTkZJR19XSU43IGVuZ2luZV9jb25maWc7CisgICAgICBzdHJ1Y3QgY2VydF9jaGFpbl9lbmdpbmVfY29uZmlnX3dpbjcgZW5naW5lX2NvbmZpZzsKICAgICAgIEJPT0wgY3JlYXRlX2VuZ2luZV9yZXN1bHQ7CiAKICAgICAgIG1lbXNldCgmZW5naW5lX2NvbmZpZywgMCwgc2l6ZW9mKGVuZ2luZV9jb25maWcpKTsKQEAgLTQ4OSw3ICs2MDgsNyBAQAogICAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgICAic2NoYW5uZWw6IGZhaWxlZCB0byBjcmVhdGUgY2VydGlmaWNhdGUgY2hhaW4gZW5naW5lOiAlcyIsCi0gICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQogICAgIH0KQEAgLTUxMiw3ICs2MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcENoYWluQ29udGV4dCkpIHsKICAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IENlcnRHZXRDZXJ0aWZpY2F0ZUNoYWluIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgIHBDaGFpbkNvbnRleHQgPSBOVUxMOwogICAgICAgcmVzdWx0ID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogICAgIH0KQEAgLTUyMSw2ICs2NDAsMTUgQEAKICAgICAgIENFUlRfU0lNUExFX0NIQUlOICpwU2ltcGxlQ2hhaW4gPSBwQ2hhaW5Db250ZXh0LT5yZ3BDaGFpblswXTsKICAgICAgIERXT1JEIGR3VHJ1c3RFcnJvck1hc2sgPSB+KERXT1JEKShDRVJUX1RSVVNUX0lTX05PVF9USU1FX05FU1RFRCk7CiAgICAgICBkd1RydXN0RXJyb3JNYXNrICY9IHBTaW1wbGVDaGFpbi0+VHJ1c3RTdGF0dXMuZHdFcnJvclN0YXR1czsKKworICAgICAgaWYoZGF0YS0+c2V0LnNzbC5yZXZva2VfYmVzdF9lZmZvcnQpIHsKKyAgICAgICAgLyogSWdub3JlIGVycm9ycyB3aGVuIHJvb3QgY2VydGlmaWNhdGVzIGFyZSBtaXNzaW5nIHRoZSByZXZvY2F0aW9uCisgICAgICAgICAqIGxpc3QgVVJMLCBvciB3aGVuIHRoZSBsaXN0IGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkIGJlY2F1c2UgdGhlCisgICAgICAgICAqIHNlcnZlciBpcyBjdXJyZW50bHkgdW5yZWFjaGFibGUuICovCisgICAgICAgIGR3VHJ1c3RFcnJvck1hc2sgJj0gfihEV09SRCkoQ0VSVF9UUlVTVF9SRVZPQ0FUSU9OX1NUQVRVU19VTktOT1dOIHwKKyAgICAgICAgICBDRVJUX1RSVVNUX0lTX09GRkxJTkVfUkVWT0NBVElPTik7CisgICAgICB9CisKICAgICAgIGlmKGR3VHJ1c3RFcnJvck1hc2spIHsKICAgICAgICAgaWYoZHdUcnVzdEVycm9yTWFzayAmIENFUlRfVFJVU1RfSVNfUkVWT0tFRCkKICAgICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IENlcnRHZXRDZXJ0aWZpY2F0ZUNoYWluIHRydXN0IGVycm9yIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zZWN0cmFuc3AuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2VjdHJhbnNwLmMKaW5kZXggMmZkZjY2Mi4uMjYyN2FmZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zZWN0cmFuc3AuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NlY3RyYW5zcC5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNywgTmljayBaaXR6bWFubiwgPG5pY2t6bWFuQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzksNyArNzksNyBAQAogLyogVGhlc2UgbWFjcm9zIG1lYW4gInRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcmVzZW50IHRvIGFsbG93IHJ1bnRpbWUgYmFja3dhcmQKICAgIGNvbXBhdGliaWxpdHkgd2l0aCBhdCBsZWFzdCB0aGlzIGNhdCBvciBlYXJsaWVyIjoKICAgIChZb3Ugc2V0IHRoaXMgYXQgYnVpbGQtdGltZSB1c2luZyB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lIG9wdGlvbgotICAgIi1tbWFjb3MtdmVyc2lvbi1taW4uIikgKi8KKyAgICItbW1hY29zeC12ZXJzaW9uLW1pbi4iKSAqLwogI2RlZmluZSBDVVJMX1NVUFBPUlRfTUFDXzEwXzUgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA1MAogI2RlZmluZSBDVVJMX1NVUFBPUlRfTUFDXzEwXzYgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA2MAogI2RlZmluZSBDVVJMX1NVUFBPUlRfTUFDXzEwXzcgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA3MApAQCAtMTM4LDggKzEzOCw2IEBACiAgIHNpemVfdCBzc2xfd3JpdGVfYnVmZmVyZWRfbGVuZ3RoOwogfTsKIAotI2RlZmluZSBCQUNLRU5EIGNvbm5zc2wtPmJhY2tlbmQKLQogLyogcGlubmVkIHB1YmxpYyBrZXkgc3VwcG9ydCB0ZXN0cyAqLwogCiAvKiB2ZXJzaW9uIDEgc3VwcG9ydHMgbWFjT1MgMTAuMTIrIGFuZCBpT1MgMTArICovCkBAIC0yMDEsNyArMTk5LDggQEAKICAgVUludDggKmN1cnJEYXRhID0gKFVJbnQ4ICopZGF0YTsKICAgLyppbnQgc29jayA9ICooaW50ICopY29ubmVjdGlvbjsqLwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9IChzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqKWNvbm5lY3Rpb247Ci0gIGludCBzb2NrID0gQkFDS0VORC0+c3NsX3NvY2tmZDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBpbnQgc29jayA9IGJhY2tlbmQtPnNzbF9zb2NrZmQ7CiAgIE9TU3RhdHVzIHJ0biA9IG5vRXJyOwogICBzaXplX3QgYnl0ZXNSZWFkOwogICBzc2l6ZV90IHJydG47CkBAIC0yMzAsNyArMjI5LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgRUFHQUlOOgogICAgICAgICAgICAgcnRuID0gZXJyU1NMV291bGRCbG9jazsKLSAgICAgICAgICAgIEJBQ0tFTkQtPnNzbF9kaXJlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnNzbF9kaXJlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBydG4gPSBpb0VycjsKQEAgLTI2MSw3ICsyNjAsOCBAQAogICBzaXplX3QgYnl0ZXNTZW50ID0gMDsKICAgLyppbnQgc29jayA9ICooaW50ICopY29ubmVjdGlvbjsqLwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9IChzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqKWNvbm5lY3Rpb247Ci0gIGludCBzb2NrID0gQkFDS0VORC0+c3NsX3NvY2tmZDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBpbnQgc29jayA9IGJhY2tlbmQtPnNzbF9zb2NrZmQ7CiAgIHNzaXplX3QgbGVuZ3RoOwogICBzaXplX3QgZGF0YUxlbiA9ICpkYXRhTGVuZ3RoOwogICBjb25zdCBVSW50OCAqZGF0YVB0ciA9IChVSW50OCAqKWRhdGE7CkBAIC0yODEsNyArMjgxLDcgQEAKICAgICB0aGVFcnIgPSBlcnJubzsKICAgICBpZih0aGVFcnIgPT0gRUFHQUlOKSB7CiAgICAgICBvcnRuID0gZXJyU1NMV291bGRCbG9jazsKLSAgICAgIEJBQ0tFTkQtPnNzbF9kaXJlY3Rpb24gPSB0cnVlOworICAgICAgYmFja2VuZC0+c3NsX2RpcmVjdGlvbiA9IHRydWU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgb3J0biA9IGlvRXJyOwpAQCAtMTEyNiwxMiArMTEyNiwxMiBAQAogfQogCiBzdGF0aWMgT1NTdGF0dXMgQ29weUlkZW50aXR5RnJvbVBLQ1MxMkZpbGUoY29uc3QgY2hhciAqY1BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqYmxvYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjUGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjSWRlbnRpdHlSZWYgKm91dF9jZXJ0X2FuZF9rZXkpCiB7CiAgIE9TU3RhdHVzIHN0YXR1cyA9IGVyclNlY0l0ZW1Ob3RGb3VuZDsKLSAgQ0ZVUkxSZWYgcGtjc191cmwgPSBDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oTlVMTCwKLSAgICAoY29uc3QgVUludDggKiljUGF0aCwgc3RybGVuKGNQYXRoKSwgZmFsc2UpOworICBDRlVSTFJlZiBwa2NzX3VybCA9IE5VTEw7CiAgIENGU3RyaW5nUmVmIHBhc3N3b3JkID0gY1Bhc3N3b3JkID8gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLAogICAgIGNQYXNzd29yZCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSA6IE5VTEw7CiAgIENGRGF0YVJlZiBwa2NzX2RhdGEgPSBOVUxMOwpAQCAtMTE0MCw4ICsxMTQwLDI2IEBACiAgIC8qIFRoZXNlIGNvbnN0YW50cyBhcmUgZG9jdW1lbnRlZCBhcyBoYXZpbmcgZmlyc3QgYXBwZWFyZWQgaW4gMTAuNiBidXQgdGhleQogICAgICByYWlzZSBsaW5rZXIgZXJyb3JzIHdoZW4gdXNlZCBvbiB0aGF0IGNhdCBmb3Igc29tZSByZWFzb24uICovCiAjaWYgQ1VSTF9CVUlMRF9NQUNfMTBfNyB8fCBDVVJMX0JVSUxEX0lPUwotICBpZihDRlVSTENyZWF0ZURhdGFBbmRQcm9wZXJ0aWVzRnJvbVJlc291cmNlKE5VTEwsIHBrY3NfdXJsLCAmcGtjc19kYXRhLAotICAgTlVMTCwgTlVMTCwgJnN0YXR1cykpIHsKKyAgYm9vbCByZXNvdXJjZV9pbXBvcnRlZDsKKworICBpZihibG9iKSB7CisgICAgcGtjc19kYXRhID0gQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopYmxvYi0+ZGF0YSwgYmxvYi0+bGVuKTsKKyAgICBzdGF0dXMgPSAocGtjc19kYXRhICE9IE5VTEwpID8gZXJyU2VjU3VjY2VzcyA6IGVyclNlY0FsbG9jYXRlOworICAgIHJlc291cmNlX2ltcG9ydGVkID0gKHBrY3NfZGF0YSAhPSBOVUxMKTsKKyAgfQorICBlbHNlIHsKKyAgICBwa2NzX3VybCA9CisgICAgICBDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgVUludDggKiljUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY1BhdGgpLCBmYWxzZSk7CisgICAgcmVzb3VyY2VfaW1wb3J0ZWQgPQorICAgICAgQ0ZVUkxDcmVhdGVEYXRhQW5kUHJvcGVydGllc0Zyb21SZXNvdXJjZShOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2NzX3VybCwgJnBrY3NfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgJnN0YXR1cyk7CisgIH0KKworICBpZihyZXNvdXJjZV9pbXBvcnRlZCkgewogICAgIENGQXJyYXlSZWYgaXRlbXMgPSBOVUxMOwogCiAgIC8qIE9uIGlPUyBTZWNQS0NTMTJJbXBvcnQgd2lsbCBuZXZlciBhZGQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byB0aGUKQEAgLTExNjQsNyArMTE4Miw3IEBACiAgICAqIHRoZSBLZXljaGFpbi4KICAgICoKICAgICogQXMgdGhpcyBkb2Vzbid0IG1hdGNoIGlPUywgYW5kIGFwcHMgbWF5IG5vdCB3YW50IHRvIHNlZSB0aGVpciBjbGllbnQKLSAgICogY2VydGlmaWNhdGUgc2F2ZWQgaW4gdGhlIHRoZSB1c2VyJ3Mga2V5Y2hhaW4sIHdlIHVzZSBTZWNJdGVtSW1wb3J0CisgICAqIGNlcnRpZmljYXRlIHNhdmVkIGluIHRoZSB1c2VyJ3Mga2V5Y2hhaW4sIHdlIHVzZSBTZWNJdGVtSW1wb3J0CiAgICAqIHdpdGggYSBOVUxMIGtleWNoYWluIHRvIGF2b2lkIGltcG9ydGluZyBpdC4KICAgICoKICAgICogVGhpcyByZXR1cm5zIGEgU2VjQ2VydGlmaWNhdGVSZWYgZnJvbSB3aGljaCB3ZSBjYW4gY29uc3RydWN0IGEKQEAgLTEyMTksNyArMTIzNyw4IEBACiAjZW5kaWYgLyogQ1VSTF9CVUlMRF9NQUNfMTBfNyB8fCBDVVJMX0JVSUxEX0lPUyAqLwogICBpZihwYXNzd29yZCkKICAgICBDRlJlbGVhc2UocGFzc3dvcmQpOwotICBDRlJlbGVhc2UocGtjc191cmwpOworICBpZihwa2NzX3VybCkKKyAgICBDRlJlbGVhc2UocGtjc191cmwpOwogICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMjc2LDYgKzEyOTUsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgbG9uZyBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKICAgbG9uZyBzc2xfdmVyc2lvbl9tYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOwogICBsb25nIG1heF9zdXBwb3J0ZWRfdmVyc2lvbl9ieV9vczsKQEAgLTEzMjYsMzAgKzEzNDYsMzAgQEAKICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWluKEJBQ0tFTkQtPnNzbF9jdHgsIGRhcndpbl92ZXJfbWluKTsKLSAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoQkFDS0VORC0+c3NsX2N0eCwgZGFyd2luX3Zlcl9tYXgpOworICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1pbihiYWNrZW5kLT5zc2xfY3R4LCBkYXJ3aW5fdmVyX21pbik7CisgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KGJhY2tlbmQtPnNzbF9jdHgsIGRhcndpbl92ZXJfbWF4KTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAgIGVsc2UgewogI2lmIENVUkxfU1VQUE9SVF9NQUNfMTBfOAogICAgIGxvbmcgaSA9IHNzbF92ZXJzaW9uOwotICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2xBbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgZm9yKDsgaSA8PSAoc3NsX3ZlcnNpb25fbWF4ID4+IDE2KTsgaSsrKSB7CiAgICAgICBzd2l0Y2goaSkgewogICAgICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgotICAgICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgYnJlYWs7CkBAIC0xMzczLDkgKzEzOTMsMTIgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NhZmlsZSA9IFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOworICBjb25zdCBzdHJ1Y3QgY3VybF9ibG9iICpzc2xfY2FibG9iID0gTlVMTDsKICAgY29uc3QgYm9vbCB2ZXJpZnlwZWVyID0gU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpOwogICBjaGFyICogY29uc3Qgc3NsX2NlcnQgPSBTU0xfU0VUX09QVElPTihjZXJ0KTsKKyAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqc3NsX2NlcnRfYmxvYiA9IFNTTF9TRVRfT1BUSU9OKGNlcnRfYmxvYik7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKICAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+cG9ydCA6IGNvbm4tPnJlbW90ZV9wb3J0OwpAQCAtMTM5NSwxMCArMTQxOCwxMCBAQAogCiAjaWYgQ1VSTF9CVUlMRF9NQUNfMTBfOCB8fCBDVVJMX0JVSUxEX0lPUwogICBpZihTU0xDcmVhdGVDb250ZXh0ICE9IE5VTEwpIHsgIC8qIHVzZSB0aGUgbmV3ZXIgQVBJIGlmIGF2YWlsYWJsZSAqLwotICAgIGlmKEJBQ0tFTkQtPnNzbF9jdHgpCi0gICAgICBDRlJlbGVhc2UoQkFDS0VORC0+c3NsX2N0eCk7Ci0gICAgQkFDS0VORC0+c3NsX2N0eCA9IFNTTENyZWF0ZUNvbnRleHQoTlVMTCwga1NTTENsaWVudFNpZGUsIGtTU0xTdHJlYW1UeXBlKTsKLSAgICBpZighQkFDS0VORC0+c3NsX2N0eCkgeworICAgIGlmKGJhY2tlbmQtPnNzbF9jdHgpCisgICAgICBDRlJlbGVhc2UoYmFja2VuZC0+c3NsX2N0eCk7CisgICAgYmFja2VuZC0+c3NsX2N0eCA9IFNTTENyZWF0ZUNvbnRleHQoTlVMTCwga1NTTENsaWVudFNpZGUsIGtTU0xTdHJlYW1UeXBlKTsKKyAgICBpZighYmFja2VuZC0+c3NsX2N0eCkgewogICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCEiKTsKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KQEAgLTE0MDYsOSArMTQyOSw5IEBACiAgIGVsc2UgewogICAvKiBUaGUgb2xkIFNUIEFQSSBkb2VzIG5vdCBleGlzdCB1bmRlciBpT1MsIHNvIGRvbid0IGNvbXBpbGUgaXQ6ICovCiAjaWYgQ1VSTF9TVVBQT1JUX01BQ18xMF84Ci0gICAgaWYoQkFDS0VORC0+c3NsX2N0eCkKLSAgICAgICh2b2lkKVNTTERpc3Bvc2VDb250ZXh0KEJBQ0tFTkQtPnNzbF9jdHgpOwotICAgIGVyciA9IFNTTE5ld0NvbnRleHQoZmFsc2UsICYoQkFDS0VORC0+c3NsX2N0eCkpOworICAgIGlmKGJhY2tlbmQtPnNzbF9jdHgpCisgICAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChiYWNrZW5kLT5zc2xfY3R4KTsKKyAgICBlcnIgPSBTU0xOZXdDb250ZXh0KGZhbHNlLCAmKGJhY2tlbmQtPnNzbF9jdHgpKTsKICAgICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIGNvbnRleHQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMTQxNiwzMSArMTQzOSwzMSBAQAogI2VuZGlmIC8qIENVUkxfU1VQUE9SVF9NQUNfMTBfOCAqLwogICB9CiAjZWxzZQotICBpZihCQUNLRU5ELT5zc2xfY3R4KQotICAgICh2b2lkKVNTTERpc3Bvc2VDb250ZXh0KEJBQ0tFTkQtPnNzbF9jdHgpOwotICBlcnIgPSBTU0xOZXdDb250ZXh0KGZhbHNlLCAmKEJBQ0tFTkQtPnNzbF9jdHgpKTsKKyAgaWYoYmFja2VuZC0+c3NsX2N0eCkKKyAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChiYWNrZW5kLT5zc2xfY3R4KTsKKyAgZXJyID0gU1NMTmV3Q29udGV4dChmYWxzZSwgJihiYWNrZW5kLT5zc2xfY3R4KSk7CiAgIGlmKGVyciAhPSBub0VycikgewogICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIGNvbnRleHQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogI2VuZGlmIC8qIENVUkxfQlVJTERfTUFDXzEwXzggfHwgQ1VSTF9CVUlMRF9JT1MgKi8KLSAgQkFDS0VORC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IDBVTDsgLyogcmVzZXQgYnVmZmVyZWQgd3JpdGUgbGVuZ3RoICovCisgIGJhY2tlbmQtPnNzbF93cml0ZV9idWZmZXJlZF9sZW5ndGggPSAwVUw7IC8qIHJlc2V0IGJ1ZmZlcmVkIHdyaXRlIGxlbmd0aCAqLwogCiAgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlIGFuIGV4cGxpY2l0IFNTTC9UTFMgdmVyc2lvbiAqLwogI2lmIENVUkxfQlVJTERfTUFDXzEwXzggfHwgQ1VSTF9CVUlMRF9JT1MKICAgaWYoU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4ICE9IE5VTEwpIHsKICAgICBzd2l0Y2goY29ubi0+c3NsX2NvbmZpZy52ZXJzaW9uKSB7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0gICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oQkFDS0VORC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMSk7CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oYmFja2VuZC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMSk7CiAjaWYgKENVUkxfQlVJTERfTUFDXzEwXzEzIHx8IENVUkxfQlVJTERfSU9TXzExKSAmJiBIQVZFX0JVSUxUSU5fQVZBSUxBQkxFID09IDEKICAgICAgIGlmKF9fYnVpbHRpbl9hdmFpbGFibGUobWFjT1MgMTAuMTMsIGlPUyAxMS4wLCAqKSkgewotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoQkFDS0VORC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTMpOworICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoYmFja2VuZC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTMpOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChCQUNLRU5ELT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7CisgICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChiYWNrZW5kLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7CiAgICAgICB9CiAjZWxzZQotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KEJBQ0tFTkQtPnNzbF9jdHgsIGtUTFNQcm90b2NvbDEyKTsKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChiYWNrZW5kLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7CiAjZW5kaWYgLyogKENVUkxfQlVJTERfTUFDXzEwXzEzIHx8IENVUkxfQlVJTERfSU9TXzExKSAmJgogICAgICAgICAgIEhBVkVfQlVJTFRJTl9BVkFJTEFCTEUgPT0gMSAqLwogICAgICAgYnJlYWs7CkBAIC0xNDU2LDIwICsxNDc5LDIwIEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWluKEJBQ0tFTkQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOworICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWluKGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOwogICAgICAgaWYoZXJyICE9IG5vRXJyKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgU1NMdjMiKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgICAgfQotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KEJBQ0tFTkQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOworICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6Ci0gICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oQkFDS0VORC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CisgICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oYmFja2VuZC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CiAgICAgICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgICB9Ci0gICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoQkFDS0VORC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoYmFja2VuZC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKQEAgLTE0NzgsMTkgKzE1MDEsMTkgQEAKICAgfQogICBlbHNlIHsKICNpZiBDVVJMX1NVUFBPUlRfTUFDXzEwXzgKLSAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sQWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoYmFja2VuZC0+c3NsX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1RMU1Byb3RvY29sMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICBicmVhazsKQEAgLTE1MDUsNyArMTUyOCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2wzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTUxNCw3ICsxNTM3LDcgQEAKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOgotICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2wyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTUzNCwxMiArMTU1NywxMiBAQAogICAgICAgICAgICAgICAgICIgU1NML1RMUyB2ZXJzaW9uIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9Ci0gICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwga1NTTFByb3RvY29sQWxsLCBmYWxzZSk7CisgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoYmFja2VuZC0+c3NsX2N0eCwga1NTTFByb3RvY29sQWxsLCBmYWxzZSk7CiAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoYmFja2VuZC0+c3NsX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICBicmVhazsKQEAgLTE1NTMsNyArMTU3Niw3IEBACiAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBUTFN2MS4zIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTU2Miw3ICsxNTg1LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2wzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgaWYoZXJyICE9IG5vRXJyKSB7CkBAIC0xNTk2LDcgKzE2MTksNyBAQAogICAgICAgLyogZXhwZWN0cyBsZW5ndGggcHJlZml4ZWQgcHJlZmVyZW5jZSBvcmRlcmVkIGxpc3Qgb2YgcHJvdG9jb2xzIGluIHdpcmUKICAgICAgICAqIGZvcm1hdAogICAgICAgICovCi0gICAgICBlcnIgPSBTU0xTZXRBTFBOUHJvdG9jb2xzKEJBQ0tFTkQtPnNzbF9jdHgsIGFscG5BcnIpOworICAgICAgZXJyID0gU1NMU2V0QUxQTlByb3RvY29scyhiYWNrZW5kLT5zc2xfY3R4LCBhbHBuQXJyKTsKICAgICAgIGlmKGVyciAhPSBub0VycikKICAgICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBzZXQgQUxQTiBwcm90b2NvbHM7IE9TU3RhdHVzICVkXG4iLAogICAgICAgICAgICAgICBlcnIpOwpAQCAtMTYxMCwxNSArMTYzMywxNiBAQAogICAgICAgICAgICJUcmFuc3BvcnQuIFRoZSBwcml2YXRlIGtleSBtdXN0IGJlIGluIHRoZSBLZXljaGFpbi5cbiIpOwogICB9CiAKLSAgaWYoc3NsX2NlcnQpIHsKKyAgaWYoc3NsX2NlcnQgfHwgc3NsX2NlcnRfYmxvYikgeworICAgIGJvb2wgaXNfY2VydF9kYXRhID0gc3NsX2NlcnRfYmxvYiAhPSBOVUxMOworICAgIGJvb2wgaXNfY2VydF9maWxlID0gKCFpc19jZXJ0X2RhdGEpICYmIGlzX2ZpbGUoc3NsX2NlcnQpOwogICAgIFNlY0lkZW50aXR5UmVmIGNlcnRfYW5kX2tleSA9IE5VTEw7Ci0gICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSBpc19maWxlKHNzbF9jZXJ0KTsKIAogICAgIC8qIFVzZXIgd2FudHMgdG8gYXV0aGVudGljYXRlIHdpdGggYSBjbGllbnQgY2VydC4gTG9vayBmb3IgaXQ6CiAgICAgICAgSWYgd2UgZGV0ZWN0IHRoYXQgdGhpcyBpcyBhIGZpbGUgb24gZGlzaywgdGhlbiBsZXQncyBsb2FkIGl0LgogICAgICAgIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gdXNlIGFuIGlkZW50aXR5IGxvYWRlZAogICAgICAgIGZyb20gdGhlIEtleWNoYWluLiAqLwotICAgIGlmKGlzX2NlcnRfZmlsZSkgeworICAgIGlmKGlzX2NlcnRfZmlsZSB8fCBpc19jZXJ0X2RhdGEpIHsKICAgICAgIGlmKCFTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKQogICAgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogU1NMOiBDZXJ0aWZpY2F0ZSB0eXBlIG5vdCBzZXQsIGFzc3VtaW5nICIKICAgICAgICAgICAgICAgICAgICAgIlBLQ1MjMTIgZm9ybWF0LlxuIik7CkBAIC0xNjI3LDcgKzE2NTEsNyBAQAogICAgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogU1NMOiBUaGUgU2VjdXJpdHkgZnJhbWV3b3JrIG9ubHkgc3VwcG9ydHMgIgogICAgICAgICAgICAgICAgICAgICAibG9hZGluZyBpZGVudGl0aWVzIHRoYXQgYXJlIGluIFBLQ1MjMTIgZm9ybWF0LlxuIik7CiAKLSAgICAgIGVyciA9IENvcHlJZGVudGl0eUZyb21QS0NTMTJGaWxlKHNzbF9jZXJ0LAorICAgICAgZXJyID0gQ29weUlkZW50aXR5RnJvbVBLQ1MxMkZpbGUoc3NsX2NlcnQsIHNzbF9jZXJ0X2Jsb2IsCiAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpLCAmY2VydF9hbmRfa2V5KTsKICAgICB9CiAgICAgZWxzZQpAQCAtMTY1Nyw3ICsxNjgxLDcgQEAKICAgICAgIGNlcnRzX2NbMF0gPSBjZXJ0X2FuZF9rZXk7CiAgICAgICBjZXJ0cyA9IENGQXJyYXlDcmVhdGUoTlVMTCwgKGNvbnN0IHZvaWQgKiopY2VydHNfYywgMUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgICBlcnIgPSBTU0xTZXRDZXJ0aWZpY2F0ZShCQUNLRU5ELT5zc2xfY3R4LCBjZXJ0cyk7CisgICAgICBlcnIgPSBTU0xTZXRDZXJ0aWZpY2F0ZShiYWNrZW5kLT5zc2xfY3R4LCBjZXJ0cyk7CiAgICAgICBpZihjZXJ0cykKICAgICAgICAgQ0ZSZWxlYXNlKGNlcnRzKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTY2NywyNyArMTY5MSwzMCBAQAogICAgICAgQ0ZSZWxlYXNlKGNlcnRfYW5kX2tleSk7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgY29uc3QgY2hhciAqY2VydF9zaG93ZmlsZW5hbWVfZXJyb3IgPQorICAgICAgICBpc19jZXJ0X2RhdGEgPyAiKG1lbW9yeSBibG9iKSIgOiBzc2xfY2VydDsKKwogICAgICAgc3dpdGNoKGVycikgewogICAgICAgY2FzZSBlcnJTZWNBdXRoRmFpbGVkOiBjYXNlIC0yNTI2NDogLyogZXJyU2VjUGtjczEyVmVyaWZ5RmFpbHVyZSAqLwogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBJbmNvcnJlY3QgcGFzc3dvcmQgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBcIiVzXCIgIgotICAgICAgICAgICAgICAgICAgICAiYW5kIGl0cyBwcml2YXRlIGtleS4iLCBzc2xfY2VydCk7CisgICAgICAgICAgICAgICAgICAgICJhbmQgaXRzIHByaXZhdGUga2V5LiIsIGNlcnRfc2hvd2ZpbGVuYW1lX2Vycm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIC0yNjI3NTogLyogZXJyU2VjRGVjb2RlICovIGNhc2UgLTI1MjU3OiAvKiBlcnJTZWNVbmtub3duRm9ybWF0ICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IENvdWxkbid0IG1ha2Ugc2Vuc2Ugb2YgdGhlIGRhdGEgaW4gdGhlICIKICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIFwiJXNcIiBhbmQgaXRzIHByaXZhdGUga2V5LiIsCi0gICAgICAgICAgICAgICAgICAgIHNzbF9jZXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgY2VydF9zaG93ZmlsZW5hbWVfZXJyb3IpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgLTI1MjYwOiAvKiBlcnJTZWNQYXNzcGhyYXNlUmVxdWlyZWQgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBUaGUgY2VydGlmaWNhdGUgXCIlc1wiIHJlcXVpcmVzIGEgcGFzc3dvcmQuIiwKLSAgICAgICAgICAgICAgICAgICAgc3NsX2NlcnQpOworICAgICAgICAgICAgICAgICAgICBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBlcnJTZWNJdGVtTm90Rm91bmQ6CiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IENhbid0IGZpbmQgdGhlIGNlcnRpZmljYXRlIFwiJXNcIiBhbmQgaXRzIHByaXZhdGUgIgotICAgICAgICAgICAgICAgICAgICAia2V5IGluIHRoZSBLZXljaGFpbi4iLCBzc2xfY2VydCk7CisgICAgICAgICAgICAgICAgICAgICJrZXkgaW4gdGhlIEtleWNoYWluLiIsIGNlcnRfc2hvd2ZpbGVuYW1lX2Vycm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDYW4ndCBsb2FkIHRoZSBjZXJ0aWZpY2F0ZSBcIiVzXCIgYW5kIGl0cyBwcml2YXRlICIKLSAgICAgICAgICAgICAgICAgICAgImtleTogT1NTdGF0dXMgJWQiLCBzc2xfY2VydCwgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgImtleTogT1NTdGF0dXMgJWQiLCBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvciwgZXJyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOwpAQCAtMTcxOSw4ICsxNzQ2LDkgQEAKICNlbHNlCiAgIGlmKFNTTFNldFNlc3Npb25PcHRpb24gIT0gTlVMTCkgewogI2VuZGlmIC8qIENVUkxfQlVJTERfTUFDICovCi0gICAgYm9vbCBicmVha19vbl9hdXRoID0gIWNvbm4tPnNzbF9jb25maWcudmVyaWZ5cGVlciB8fCBzc2xfY2FmaWxlOwotICAgIGVyciA9IFNTTFNldFNlc3Npb25PcHRpb24oQkFDS0VORC0+c3NsX2N0eCwKKyAgICBib29sIGJyZWFrX29uX2F1dGggPSAhY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyIHx8CisgICAgICBzc2xfY2FmaWxlIHx8IHNzbF9jYWJsb2I7CisgICAgZXJyID0gU1NMU2V0U2Vzc2lvbk9wdGlvbihiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFNlc3Npb25PcHRpb25CcmVha09uU2VydmVyQXV0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrX29uX2F1dGgpOwogICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTczMCw3ICsxNzU4LDcgQEAKICAgfQogICBlbHNlIHsKICNpZiBDVVJMX1NVUFBPUlRfTUFDXzEwXzgKLSAgICBlcnIgPSBTU0xTZXRFbmFibGVDZXJ0VmVyaWZ5KEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgZXJyID0gU1NMU2V0RW5hYmxlQ2VydFZlcmlmeShiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyP3RydWU6ZmFsc2UpOwogICAgIGlmKGVyciAhPSBub0VycikgewogICAgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMU2V0RW5hYmxlQ2VydFZlcmlmeSgpIGZhaWxlZDogT1NTdGF0dXMgJWQiLCBlcnIpOwpAQCAtMTczOSw3ICsxNzY3LDcgQEAKICNlbmRpZiAvKiBDVVJMX1NVUFBPUlRfTUFDXzEwXzggKi8KICAgfQogI2Vsc2UKLSAgZXJyID0gU1NMU2V0RW5hYmxlQ2VydFZlcmlmeShCQUNLRU5ELT5zc2xfY3R4LAorICBlcnIgPSBTU0xTZXRFbmFibGVDZXJ0VmVyaWZ5KGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyP3RydWU6ZmFsc2UpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRFbmFibGVDZXJ0VmVyaWZ5KCkgZmFpbGVkOiBPU1N0YXR1cyAlZCIsIGVycik7CkBAIC0xNzQ3LDEwICsxNzc1LDExIEBACiAgIH0KICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF82IHx8IENVUkxfQlVJTERfSU9TICovCiAKLSAgaWYoc3NsX2NhZmlsZSAmJiB2ZXJpZnlwZWVyKSB7Ci0gICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSBpc19maWxlKHNzbF9jYWZpbGUpOworICBpZigoc3NsX2NhZmlsZSB8fCBzc2xfY2FibG9iKSAmJiB2ZXJpZnlwZWVyKSB7CisgICAgYm9vbCBpc19jZXJ0X2RhdGEgPSBzc2xfY2FibG9iICE9IE5VTEw7CisgICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSAoIWlzX2NlcnRfZGF0YSkgJiYgaXNfZmlsZShzc2xfY2FmaWxlKTsKIAotICAgIGlmKCFpc19jZXJ0X2ZpbGUpIHsKKyAgICBpZighKGlzX2NlcnRfZmlsZSB8fCBpc19jZXJ0X2RhdGEpKSB7CiAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBjYW4ndCBsb2FkIENBIGNlcnRpZmljYXRlIGZpbGUgJXMiLCBzc2xfY2FmaWxlKTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CiAgICAgfQpAQCAtMTc2MCw3ICsxNzg5LDcgQEAKICAgICogQm90aCBob3N0bmFtZSBjaGVjayBhbmQgU05JIHJlcXVpcmUgU1NMU2V0UGVlckRvbWFpbk5hbWUoKS4KICAgICogQWxzbzogdGhlIHZlcmlmeWhvc3Qgc2V0dGluZyBpbmZsdWVuY2VzIFNOSSB1c2FnZSAqLwogICBpZihjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QpIHsKLSAgICBlcnIgPSBTU0xTZXRQZWVyRG9tYWluTmFtZShCQUNLRU5ELT5zc2xfY3R4LCBob3N0bmFtZSwKKyAgICBlcnIgPSBTU0xTZXRQZWVyRG9tYWluTmFtZShiYWNrZW5kLT5zc2xfY3R4LCBob3N0bmFtZSwKICAgICBzdHJsZW4oaG9zdG5hbWUpKTsKIAogICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTc4Niw3ICsxODE1LDcgQEAKICAgICAgaGlnaGVyIHByaW9yaXR5LCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIgdGhhdCB3ZSBub3QgY29ubmVjdCBhdCBhbGwgdGhhbgogICAgICB0byBnaXZlIHRoZSB1c2VyIGEgZmFsc2Ugc2Vuc2Ugb2Ygc2VjdXJpdHkgaWYgdGhlIHNlcnZlciBvbmx5IHN1cHBvcnRzCiAgICAgIGluc2VjdXJlIGNpcGhlcnMuIChOb3RlOiBXZSBkb24ndCBjYXJlIGFib3V0IFNTTHYyLW9ubHkgY2lwaGVycy4pICovCi0gIGVyciA9IFNTTEdldE51bWJlclN1cHBvcnRlZENpcGhlcnMoQkFDS0VORC0+c3NsX2N0eCwgJmFsbF9jaXBoZXJzX2NvdW50KTsKKyAgZXJyID0gU1NMR2V0TnVtYmVyU3VwcG9ydGVkQ2lwaGVycyhiYWNrZW5kLT5zc2xfY3R4LCAmYWxsX2NpcGhlcnNfY291bnQpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xHZXROdW1iZXJTdXBwb3J0ZWRDaXBoZXJzKCkgZmFpbGVkOiBPU1N0YXR1cyAlZCIsCiAgICAgICAgICAgZXJyKTsKQEAgLTE4MDMsNyArMTgzMiw3IEBACiAgICAgZmFpbGYoZGF0YSwgIlNTTDogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb3dlZCBjaXBoZXJzIik7CiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KLSAgZXJyID0gU1NMR2V0U3VwcG9ydGVkQ2lwaGVycyhCQUNLRU5ELT5zc2xfY3R4LCBhbGxfY2lwaGVycywKKyAgZXJyID0gU1NMR2V0U3VwcG9ydGVkQ2lwaGVycyhiYWNrZW5kLT5zc2xfY3R4LCBhbGxfY2lwaGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWxsX2NpcGhlcnNfY291bnQpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBDdXJsX3NhZmVmcmVlKGFsbF9jaXBoZXJzKTsKQEAgLTE4OTAsNyArMTkxOSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICBlcnIgPSBTU0xTZXRFbmFibGVkQ2lwaGVycyhCQUNLRU5ELT5zc2xfY3R4LCBhbGxvd2VkX2NpcGhlcnMsCisgIGVyciA9IFNTTFNldEVuYWJsZWRDaXBoZXJzKGJhY2tlbmQtPnNzbF9jdHgsIGFsbG93ZWRfY2lwaGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZF9jaXBoZXJzX2NvdW50KTsKICAgQ3VybF9zYWZlZnJlZShhbGxfY2lwaGVycyk7CiAgIEN1cmxfc2FmZWZyZWUoYWxsb3dlZF9jaXBoZXJzKTsKQEAgLTE5MDMsOSArMTkzMiw5IEBACiAgIC8qIFdlIHdhbnQgdG8gZW5hYmxlIDEvbi0xIHdoZW4gdXNpbmcgYSBDQkMgY2lwaGVyIHVubGVzcyB0aGUgdXNlcgogICAgICBzcGVjaWZpY2FsbHkgZG9lc24ndCB3YW50IHVzIGRvaW5nIHRoYXQ6ICovCiAgIGlmKFNTTFNldFNlc3Npb25PcHRpb24gIT0gTlVMTCkgewotICAgIFNTTFNldFNlc3Npb25PcHRpb24oQkFDS0VORC0+c3NsX2N0eCwga1NTTFNlc3Npb25PcHRpb25TZW5kT25lQnl0ZVJlY29yZCwKKyAgICBTU0xTZXRTZXNzaW9uT3B0aW9uKGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xTZXNzaW9uT3B0aW9uU2VuZE9uZUJ5dGVSZWNvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIWRhdGEtPnNldC5zc2wuZW5hYmxlX2JlYXN0KTsKLSAgICBTU0xTZXRTZXNzaW9uT3B0aW9uKEJBQ0tFTkQtPnNzbF9jdHgsIGtTU0xTZXNzaW9uT3B0aW9uRmFsc2VTdGFydCwKKyAgICBTU0xTZXRTZXNzaW9uT3B0aW9uKGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xTZXNzaW9uT3B0aW9uRmFsc2VTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmZhbHNlc3RhcnQpOyAvKiBmYWxzZSBzdGFydCBzdXBwb3J0ICovCiAgIH0KICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF85IHx8IENVUkxfQlVJTERfSU9TXzcgKi8KQEAgLTE5MTksNyArMTk0OCw3IEBACiAgICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAodm9pZCAqKikmc3NsX3Nlc3Npb25pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2xfc2Vzc2lvbmlkX2xlbiwgc29ja2luZGV4KSkgewogICAgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLwotICAgICAgZXJyID0gU1NMU2V0UGVlcklEKEJBQ0tFTkQtPnNzbF9jdHgsIHNzbF9zZXNzaW9uaWQsIHNzbF9zZXNzaW9uaWRfbGVuKTsKKyAgICAgIGVyciA9IFNTTFNldFBlZXJJRChiYWNrZW5kLT5zc2xfY3R4LCBzc2xfc2Vzc2lvbmlkLCBzc2xfc2Vzc2lvbmlkX2xlbik7CiAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgaWYoZXJyICE9IG5vRXJyKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTFNldFBlZXJJRCgpIGZhaWxlZDogT1NTdGF0dXMgJWQiLCBlcnIpOwpAQCAtMTkzNyw3ICsxOTY2LDcgQEAKICAgICAgICAgICAgICAgICB2ZXJpZnlwZWVyLCBTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCksIGhvc3RuYW1lLCBwb3J0KTsKICAgICAgIHNzbF9zZXNzaW9uaWRfbGVuID0gc3RybGVuKHNzbF9zZXNzaW9uaWQpOwogCi0gICAgICBlcnIgPSBTU0xTZXRQZWVySUQoQkFDS0VORC0+c3NsX2N0eCwgc3NsX3Nlc3Npb25pZCwgc3NsX3Nlc3Npb25pZF9sZW4pOworICAgICAgZXJyID0gU1NMU2V0UGVlcklEKGJhY2tlbmQtPnNzbF9jdHgsIHNzbF9zZXNzaW9uaWQsIHNzbF9zZXNzaW9uaWRfbGVuKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewogICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRQZWVySUQoKSBmYWlsZWQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKQEAgLTE5NTQsNyArMTk4Myw3IEBACiAgICAgfQogICB9CiAKLSAgZXJyID0gU1NMU2V0SU9GdW5jcyhCQUNLRU5ELT5zc2xfY3R4LCBTb2NrZXRSZWFkLCBTb2NrZXRXcml0ZSk7CisgIGVyciA9IFNTTFNldElPRnVuY3MoYmFja2VuZC0+c3NsX2N0eCwgU29ja2V0UmVhZCwgU29ja2V0V3JpdGUpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRJT0Z1bmNzKCkgZmFpbGVkOiBPU1N0YXR1cyAlZCIsIGVycik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtMTk2NCw4ICsxOTkzLDggQEAKICAgLyogV2UgbmVlZCB0byBzdG9yZSB0aGUgRkQgaW4gYSBjb25zdGFudCBtZW1vcnkgYWRkcmVzcywgYmVjYXVzZQogICAgKiBTU0xTZXRDb25uZWN0aW9uKCkgd2lsbCBub3QgY29weSB0aGF0IGFkZHJlc3MuIEkndmUgZm91bmQgdGhhdAogICAgKiBjb25uLT5zb2NrW3NvY2tpbmRleF0gbWF5IGNoYW5nZSBvbiBpdHMgb3duLiAqLwotICBCQUNLRU5ELT5zc2xfc29ja2ZkID0gc29ja2ZkOwotICBlcnIgPSBTU0xTZXRDb25uZWN0aW9uKEJBQ0tFTkQtPnNzbF9jdHgsIGNvbm5zc2wpOworICBiYWNrZW5kLT5zc2xfc29ja2ZkID0gc29ja2ZkOworICBlcnIgPSBTU0xTZXRDb25uZWN0aW9uKGJhY2tlbmQtPnNzbF9jdHgsIGNvbm5zc2wpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRDb25uZWN0aW9uKCkgZmFpbGVkOiAlZCIsIGVycik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtMjExMSw4ICsyMTQwLDggQEAKICAgICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X2NlcnQoY29uc3QgY2hhciAqY2FmaWxlLCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICBTU0xDb250ZXh0UmVmIGN0eCkKK3N0YXRpYyBDVVJMY29kZSB2ZXJpZnlfY2VydChjb25zdCBjaGFyICpjYWZpbGUsIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMQ29udGV4dFJlZiBjdHgpCiB7CiAgIGludCBuID0gMCwgcmM7CiAgIGxvbmcgcmVzOwpAQCAtMjM0Niw2ICsyMzc1LDcgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIE9TU3RhdHVzIGVycjsKICAgU1NMQ2lwaGVyU3VpdGUgY2lwaGVyOwogICBTU0xQcm90b2NvbCBwcm90b2NvbCA9IDA7CkBAIC0yMzU3LDEyICsyMzg3LDEyIEBACiAgICAgICAgICAgICAgIHx8IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKIAogICAvKiBIZXJlIGdvZXMgbm90aGluZzogKi8KLSAgZXJyID0gU1NMSGFuZHNoYWtlKEJBQ0tFTkQtPnNzbF9jdHgpOworICBlcnIgPSBTU0xIYW5kc2hha2UoYmFja2VuZC0+c3NsX2N0eCk7CiAKICAgaWYoZXJyICE9IG5vRXJyKSB7CiAgICAgc3dpdGNoKGVycikgewogICAgICAgY2FzZSBlcnJTU0xXb3VsZEJsb2NrOiAgLyogdGhleSdyZSBub3QgZG9uZSB3aXRoIHVzIHlldCAqLwotICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gQkFDS0VORC0+c3NsX2RpcmVjdGlvbiA/CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBiYWNrZW5kLT5zc2xfZGlyZWN0aW9uID8KICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA6IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKICAgICAgICAgcmV0dXJuIENVUkxFX09LOwogCkBAIC0yMzcwLDEwICsyNDAwLDEwIEBACiAgICAgICAgIExlb3BhcmQncyBoZWFkZXJzICovCiAgICAgICBjYXNlIC05ODQxOgogICAgICAgICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSAmJiBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKLSAgICAgICAgICBpbnQgcmVzID0gdmVyaWZ5X2NlcnQoU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBQ0tFTkQtPnNzbF9jdHgpOwotICAgICAgICAgIGlmKHJlcyAhPSBDVVJMRV9PSykKLSAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gdmVyaWZ5X2NlcnQoU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC0+c3NsX2N0eCk7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAvKiB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIG5lZWQgdG8gY2FsbCBTU0xIYW5kc2hha2UoKSBhZ2FpbiAqLwogICAgICAgICByZXR1cm4gc2VjdHJhbnNwX2Nvbm5lY3Rfc3RlcDIoY29ubiwgc29ja2luZGV4KTsKQEAgLTI1ODAsNyArMjYxMCw3IEBACiAKICNpZmRlZiBTRUNUUkFOU1BfUElOTkVEUFVCS0VZCiAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXSkgewotICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gcGtwX3Bpbl9wZWVyX3B1YmtleShkYXRhLCBCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gcGtwX3Bpbl9wZWVyX3B1YmtleShkYXRhLCBiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfT1JJR10pOwogICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcGlubmVkIHB1YmxpYyBrZXkhIik7CkBAIC0yNTkwLDggKzI2MjAsOCBAQAogI2VuZGlmIC8qIFNFQ1RSQU5TUF9QSU5ORURQVUJLRVkgKi8KIAogICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLwotICAgICh2b2lkKVNTTEdldE5lZ290aWF0ZWRDaXBoZXIoQkFDS0VORC0+c3NsX2N0eCwgJmNpcGhlcik7Ci0gICAgKHZvaWQpU1NMR2V0TmVnb3RpYXRlZFByb3RvY29sVmVyc2lvbihCQUNLRU5ELT5zc2xfY3R4LCAmcHJvdG9jb2wpOworICAgICh2b2lkKVNTTEdldE5lZ290aWF0ZWRDaXBoZXIoYmFja2VuZC0+c3NsX2N0eCwgJmNpcGhlcik7CisgICAgKHZvaWQpU1NMR2V0TmVnb3RpYXRlZFByb3RvY29sVmVyc2lvbihiYWNrZW5kLT5zc2xfY3R4LCAmcHJvdG9jb2wpOwogICAgIHN3aXRjaChwcm90b2NvbCkgewogICAgICAgY2FzZSBrU1NMUHJvdG9jb2wyOgogICAgICAgICBpbmZvZihkYXRhLCAiU1NMIDIuMCBjb25uZWN0aW9uIHVzaW5nICVzXG4iLApAQCAtMjYzMSw3ICsyNjYxLDcgQEAKICAgICAgIGlmKF9fYnVpbHRpbl9hdmFpbGFibGUobWFjT1MgMTAuMTMuNCwgaU9TIDExLCB0dk9TIDExLCAqKSkgewogICAgICAgICBDRkFycmF5UmVmIGFscG5BcnIgPSBOVUxMOwogICAgICAgICBDRlN0cmluZ1JlZiBjaG9zZW5Qcm90b2NvbCA9IE5VTEw7Ci0gICAgICAgIGVyciA9IFNTTENvcHlBTFBOUHJvdG9jb2xzKEJBQ0tFTkQtPnNzbF9jdHgsICZhbHBuQXJyKTsKKyAgICAgICAgZXJyID0gU1NMQ29weUFMUE5Qcm90b2NvbHMoYmFja2VuZC0+c3NsX2N0eCwgJmFscG5BcnIpOwogCiAgICAgICAgIGlmKGVyciA9PSBub0VyciAmJiBhbHBuQXJyICYmIENGQXJyYXlHZXRDb3VudChhbHBuQXJyKSA+PSAxKQogICAgICAgICAgIGNob3NlblByb3RvY29sID0gQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhbHBuQXJyLCAwKTsKQEAgLTI2NzQsMTkgKzI3MDQsMjAgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIENGQXJyYXlSZWYgc2VydmVyX2NlcnRzID0gTlVMTDsKICAgU2VjQ2VydGlmaWNhdGVSZWYgc2VydmVyX2NlcnQ7CiAgIE9TU3RhdHVzIGVycjsKICAgQ0ZJbmRleCBpLCBjb3VudDsKICAgU2VjVHJ1c3RSZWYgdHJ1c3QgPSBOVUxMOwogCi0gIGlmKCFCQUNLRU5ELT5zc2xfY3R4KQorICBpZighYmFja2VuZC0+c3NsX2N0eCkKICAgICByZXR1cm47CiAKICNpZiBDVVJMX0JVSUxEX01BQ18xMF83IHx8IENVUkxfQlVJTERfSU9TCiAjaWYgQ1VSTF9CVUlMRF9JT1MKICNwcmFnbWEgdW51c2VkKHNlcnZlcl9jZXJ0cykKLSAgZXJyID0gU1NMQ29weVBlZXJUcnVzdChCQUNLRU5ELT5zc2xfY3R4LCAmdHJ1c3QpOworICBlcnIgPSBTU0xDb3B5UGVlclRydXN0KGJhY2tlbmQtPnNzbF9jdHgsICZ0cnVzdCk7CiAgIC8qIEZvciBzb21lIHJlYXNvbiwgU1NMQ29weVBlZXJUcnVzdCgpIGNhbiByZXR1cm4gbm9FcnIgYW5kIHlldCByZXR1cm4KICAgICAgYSBudWxsIHRydXN0LCBzbyBiZSBvbiBndWFyZCBmb3IgdGhhdDogKi8KICAgaWYoZXJyID09IG5vRXJyICYmIHRydXN0KSB7CkBAIC0yNzEyLDcgKzI3NDMsNyBAQAogICAgICBMaW9uIG9yIGxhdGVyLiAqLwogICBpZihTZWNUcnVzdEV2YWx1YXRlQXN5bmMgIT0gTlVMTCkgewogI3ByYWdtYSB1bnVzZWQoc2VydmVyX2NlcnRzKQotICAgIGVyciA9IFNTTENvcHlQZWVyVHJ1c3QoQkFDS0VORC0+c3NsX2N0eCwgJnRydXN0KTsKKyAgICBlcnIgPSBTU0xDb3B5UGVlclRydXN0KGJhY2tlbmQtPnNzbF9jdHgsICZ0cnVzdCk7CiAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBTU0xDb3B5UGVlclRydXN0KCkgY2FuIHJldHVybiBub0VyciBhbmQgeWV0IHJldHVybgogICAgICAgIGEgbnVsbCB0cnVzdCwgc28gYmUgb24gZ3VhcmQgZm9yIHRoYXQ6ICovCiAgICAgaWYoZXJyID09IG5vRXJyICYmIHRydXN0KSB7CkBAIC0yNzMyLDcgKzI3NjMsNyBAQAogICB9CiAgIGVsc2UgewogI2lmIENVUkxfU1VQUE9SVF9NQUNfMTBfOAotICAgIGVyciA9IFNTTENvcHlQZWVyQ2VydGlmaWNhdGVzKEJBQ0tFTkQtPnNzbF9jdHgsICZzZXJ2ZXJfY2VydHMpOworICAgIGVyciA9IFNTTENvcHlQZWVyQ2VydGlmaWNhdGVzKGJhY2tlbmQtPnNzbF9jdHgsICZzZXJ2ZXJfY2VydHMpOwogICAgIC8qIEp1c3QgaW4gY2FzZSBTU0xDb3B5UGVlckNlcnRpZmljYXRlcygpIHJldHVybnMgbnVsbCB0b28uLi4gKi8KICAgICBpZihlcnIgPT0gbm9FcnIgJiYgc2VydmVyX2NlcnRzKSB7CiAgICAgICBjb3VudCA9IENGQXJyYXlHZXRDb3VudChzZXJ2ZXJfY2VydHMpOwpAQCAtMjc1NCw3ICsyNzg1LDcgQEAKICNlbmRpZiAvKiBDVVJMX0JVSUxEX0lPUyAqLwogI2Vsc2UKICNwcmFnbWEgdW51c2VkKHRydXN0KQotICBlcnIgPSBTU0xDb3B5UGVlckNlcnRpZmljYXRlcyhCQUNLRU5ELT5zc2xfY3R4LCAmc2VydmVyX2NlcnRzKTsKKyAgZXJyID0gU1NMQ29weVBlZXJDZXJ0aWZpY2F0ZXMoYmFja2VuZC0+c3NsX2N0eCwgJnNlcnZlcl9jZXJ0cyk7CiAgIGlmKGVyciA9PSBub0VycikgewogICAgIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHNlcnZlcl9jZXJ0cyk7CiAgICAgZm9yKGkgPSAwTCA7IGkgPCBjb3VudCA7IGkrKykgewpAQCAtMjgwNSw3ICsyODM2LDYgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgbG9uZyB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC0yODE2LDcgKzI4NDYsNyBAQAogCiAgIGlmKHNzbF9jb25uZWN0XzEgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewogICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG1vcmUgdGltZSB3ZSdyZSBhbGxvd2VkICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMjgzNCw3ICsyODY0LDcgQEAKICAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKIAogICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMjg1Miw3ICsyODgyLDcgQEAKICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKIAogICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmcgPyAwIDogdGltZW91dF9tcyk7CiAgICAgICBpZih3aGF0IDwgMCkgewogICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwogICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKQEAgLTI5MzMsMzQgKzI5NjMsMzYgQEAKIHN0YXRpYyB2b2lkIEN1cmxfc2VjdHJhbnNwX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAotICBpZihCQUNLRU5ELT5zc2xfY3R4KSB7Ci0gICAgKHZvaWQpU1NMQ2xvc2UoQkFDS0VORC0+c3NsX2N0eCk7CisgIGlmKGJhY2tlbmQtPnNzbF9jdHgpIHsKKyAgICAodm9pZClTU0xDbG9zZShiYWNrZW5kLT5zc2xfY3R4KTsKICNpZiBDVVJMX0JVSUxEX01BQ18xMF84IHx8IENVUkxfQlVJTERfSU9TCiAgICAgaWYoU1NMQ3JlYXRlQ29udGV4dCAhPSBOVUxMKQotICAgICAgQ0ZSZWxlYXNlKEJBQ0tFTkQtPnNzbF9jdHgpOworICAgICAgQ0ZSZWxlYXNlKGJhY2tlbmQtPnNzbF9jdHgpOwogI2lmIENVUkxfU1VQUE9SVF9NQUNfMTBfOAogICAgIGVsc2UKLSAgICAgICh2b2lkKVNTTERpc3Bvc2VDb250ZXh0KEJBQ0tFTkQtPnNzbF9jdHgpOworICAgICAgKHZvaWQpU1NMRGlzcG9zZUNvbnRleHQoYmFja2VuZC0+c3NsX2N0eCk7CiAjZW5kaWYgIC8qIENVUkxfU1VQUE9SVF9NQUNfMTBfOCAqLwogI2Vsc2UKLSAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChCQUNLRU5ELT5zc2xfY3R4KTsKKyAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChiYWNrZW5kLT5zc2xfY3R4KTsKICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF84IHx8IENVUkxfQlVJTERfSU9TICovCi0gICAgQkFDS0VORC0+c3NsX2N0eCA9IE5VTEw7CisgICAgYmFja2VuZC0+c3NsX2N0eCA9IE5VTEw7CiAgIH0KLSAgQkFDS0VORC0+c3NsX3NvY2tmZCA9IDA7CisgIGJhY2tlbmQtPnNzbF9zb2NrZmQgPSAwOwogfQogCiBzdGF0aWMgaW50IEN1cmxfc2VjdHJhbnNwX3NodXRkb3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCB3aGF0OwogICBpbnQgcmM7CiAgIGNoYXIgYnVmWzEyMF07CiAKLSAgaWYoIUJBQ0tFTkQtPnNzbF9jdHgpCisgIGlmKCFiYWNrZW5kLT5zc2xfY3R4KQogICAgIHJldHVybiAwOwogCiAjaWZuZGVmIENVUkxfRElTQUJMRV9GVFAKQEAgLTMwMzMsMTEgKzMwNjUsMTIgQEAKIHN0YXRpYyBpbnQgQ3VybF9zZWN0cmFuc3BfY2hlY2tfY3huKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW0ZJUlNUU09DS0VUXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBPU1N0YXR1cyBlcnI7CiAgIFNTTFNlc3Npb25TdGF0ZSBzdGF0ZTsKIAotICBpZihCQUNLRU5ELT5zc2xfY3R4KSB7Ci0gICAgZXJyID0gU1NMR2V0U2Vzc2lvblN0YXRlKEJBQ0tFTkQtPnNzbF9jdHgsICZzdGF0ZSk7CisgIGlmKGJhY2tlbmQtPnNzbF9jdHgpIHsKKyAgICBlcnIgPSBTU0xHZXRTZXNzaW9uU3RhdGUoYmFja2VuZC0+c3NsX2N0eCwgJnN0YXRlKTsKICAgICBpZihlcnIgPT0gbm9FcnIpCiAgICAgICByZXR1cm4gc3RhdGUgPT0ga1NTTENvbm5lY3RlZCB8fCBzdGF0ZSA9PSBrU1NMSGFuZHNoYWtlOwogICAgIHJldHVybiAtMTsKQEAgLTMwNDksMTEgKzMwODIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQogewogICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBPU1N0YXR1cyBlcnI7CiAgIHNpemVfdCBidWZmZXI7CiAKLSAgaWYoQkFDS0VORC0+c3NsX2N0eCkgeyAgLyogU1NMIGlzIGluIHVzZSAqLwotICAgIGVyciA9IFNTTEdldEJ1ZmZlcmVkUmVhZFNpemUoQkFDS0VORC0+c3NsX2N0eCwgJmJ1ZmZlcik7CisgIGlmKGJhY2tlbmQtPnNzbF9jdHgpIHsgIC8qIFNTTCBpcyBpbiB1c2UgKi8KKyAgICBlcnIgPSBTU0xHZXRCdWZmZXJlZFJlYWRTaXplKGJhY2tlbmQtPnNzbF9jdHgsICZidWZmZXIpOwogICAgIGlmKGVyciA9PSBub0VycikKICAgICAgIHJldHVybiBidWZmZXIgPiAwVUw7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzExOSw2ICszMTUzLDcgQEAKIHsKICAgLypzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsqLwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzaXplX3QgcHJvY2Vzc2VkID0gMFVMOwogICBPU1N0YXR1cyBlcnI7CiAKQEAgLTMxMzcsMTUgKzMxNzIsMTUgQEAKICAgICAgb3ZlciBhZ2FpbiB3aXRoIG5vIG5ldyBkYXRhIHVudGlsIGl0IHF1aXRzIHJldHVybmluZyBlcnJTU0xXb3VsZEJsb2NrLiAqLwogCiAgIC8qIERvIHdlIGhhdmUgYnVmZmVyZWQgZGF0YSB0byB3cml0ZSBmcm9tIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBjYWxsZWQ/ICovCi0gIGlmKEJBQ0tFTkQtPnNzbF93cml0ZV9idWZmZXJlZF9sZW5ndGgpIHsKKyAgaWYoYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCkgewogICAgIC8qIFdyaXRlIHRoZSBidWZmZXJlZCBkYXRhOiAqLwotICAgIGVyciA9IFNTTFdyaXRlKEJBQ0tFTkQtPnNzbF9jdHgsIE5VTEwsIDBVTCwgJnByb2Nlc3NlZCk7CisgICAgZXJyID0gU1NMV3JpdGUoYmFja2VuZC0+c3NsX2N0eCwgTlVMTCwgMFVMLCAmcHJvY2Vzc2VkKTsKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgICBjYXNlIG5vRXJyOgogICAgICAgICAvKiBwcm9jZXNzZWQgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIDAgYmVjYXVzZSB3ZSBkaWRuJ3Qgd3JpdGUgdG8KICAgICAgICAgICAgdGhlIGJ1ZmZlciwgc28gcmV0dXJuIGhvdyBtdWNoIHdhcyB3cml0dGVuIHRvIHRoZSBzb2NrZXQgKi8KLSAgICAgICAgcHJvY2Vzc2VkID0gQkFDS0VORC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aDsKLSAgICAgICAgQkFDS0VORC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IDBVTDsKKyAgICAgICAgcHJvY2Vzc2VkID0gYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aDsKKyAgICAgICAgYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IDBVTDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIGVyclNTTFdvdWxkQmxvY2s6IC8qIGFyZ2gsIHRyeSBhZ2FpbiAqLwogICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKQEAgLTMxNTgsMTMgKzMxOTMsMTMgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBXZSd2ZSBnb3QgbmV3IGRhdGEgdG8gd3JpdGU6ICovCi0gICAgZXJyID0gU1NMV3JpdGUoQkFDS0VORC0+c3NsX2N0eCwgbWVtLCBsZW4sICZwcm9jZXNzZWQpOworICAgIGVyciA9IFNTTFdyaXRlKGJhY2tlbmQtPnNzbF9jdHgsIG1lbSwgbGVuLCAmcHJvY2Vzc2VkKTsKICAgICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICAgIHN3aXRjaChlcnIpIHsKICAgICAgICAgY2FzZSBlcnJTU0xXb3VsZEJsb2NrOgogICAgICAgICAgIC8qIERhdGEgd2FzIGJ1ZmZlcmVkIGJ1dCBub3Qgc2VudCwgd2UgaGF2ZSB0byB0ZWxsIHRoZSBjYWxsZXIKICAgICAgICAgICAgICB0byB0cnkgc2VuZGluZyBhZ2FpbiwgYW5kIHJlbWVtYmVyIGhvdyBtdWNoIHdhcyBidWZmZXJlZCAqLwotICAgICAgICAgIEJBQ0tFTkQtPnNzbF93cml0ZV9idWZmZXJlZF9sZW5ndGggPSBsZW47CisgICAgICAgICAgYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IGxlbjsKICAgICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKICAgICAgICAgICByZXR1cm4gLTFMOwogICAgICAgICBkZWZhdWx0OgpAQCAtMzE4NSw4ICszMjIwLDEyIEBACiB7CiAgIC8qc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ki8KICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc2l6ZV90IHByb2Nlc3NlZCA9IDBVTDsKLSAgT1NTdGF0dXMgZXJyID0gU1NMUmVhZChCQUNLRU5ELT5zc2xfY3R4LCBidWYsIGJ1ZmZlcnNpemUsICZwcm9jZXNzZWQpOworICBPU1N0YXR1cyBlcnI7CisKKyAgYWdhaW46CisgIGVyciA9IFNTTFJlYWQoYmFja2VuZC0+c3NsX2N0eCwgYnVmLCBidWZmZXJzaXplLCAmcHJvY2Vzc2VkKTsKIAogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBzd2l0Y2goZXJyKSB7CkBAIC0zMjA3LDYgKzMyNDYsMTYgQEAKICAgICAgICAgcmV0dXJuIC0xTDsKICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgLyogVGhlIGJlbG93IGlzIGVyclNTTFBlZXJBdXRoQ29tcGxldGVkOyBpdCdzIG5vdCBkZWZpbmVkIGluCisgICAgICAgICAgIExlb3BhcmQncyBoZWFkZXJzICovCisgICAgICBjYXNlIC05ODQxOgorICAgICAgICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSAmJiBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKKyAgICAgICAgICBDVVJMY29kZSByZXN1bHQgPSB2ZXJpZnlfY2VydChTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSwgY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLT5zc2xfY3R4KTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGdvdG8gYWdhaW47CiAgICAgICBkZWZhdWx0OgogICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMUmVhZCgpIHJldHVybiBlcnJvciAlZCIsIGVycik7CiAgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CkBAIC0zMjIwLDggKzMyNjksOSBAQAogc3RhdGljIHZvaWQgKkN1cmxfc2VjdHJhbnNwX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKIHsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICAodm9pZClpbmZvOwotICByZXR1cm4gQkFDS0VORC0+c3NsX2N0eDsKKyAgcmV0dXJuIGJhY2tlbmQtPnNzbF9jdHg7CiB9CiAKIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9zZWN0cmFuc3AgPSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3Z0bHMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5jCmluZGV4IGE3NDUyZGMuLmMzYTU1ZmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKICNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCiAKIC8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZTogKi8KICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtODIsMjIgKzgzLDYyIEBACiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZGVzdC0+dmFyID0gTlVMTDsKIAorI2RlZmluZSBDTE9ORV9CTE9CKHZhcikgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZihibG9iZHVwKCZkZXN0LT52YXIsIHNvdXJjZS0+dmFyKSkgICAgICAgICBcCisgICAgcmV0dXJuIEZBTFNFOworCitzdGF0aWMgQ1VSTGNvZGUgYmxvYmR1cChzdHJ1Y3QgY3VybF9ibG9iICoqZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2Jsb2IgKnNyYykKK3sKKyAgREVCVUdBU1NFUlQoZGVzdCk7CisgIERFQlVHQVNTRVJUKCEqZGVzdCk7CisgIGlmKHNyYykgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBkYXRhIHRvIGR1cGUhICovCisgICAgc3RydWN0IGN1cmxfYmxvYiAqZDsKKyAgICBkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3VybF9ibG9iKSArIHNyYy0+bGVuKTsKKyAgICBpZighZCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGQtPmxlbiA9IHNyYy0+bGVuOworICAgIC8qIEFsd2F5cyBkdXBsaWNhdGUgYmVjYXVzZSB0aGUgY29ubmVjdGlvbiBtYXkgc3Vydml2ZSBsb25nZXIgdGhhbiB0aGUKKyAgICAgICBoYW5kbGUgdGhhdCBwYXNzZWQgaW4gdGhlIGJsb2IuICovCisgICAgZC0+ZmxhZ3MgPSBDVVJMX0JMT0JfQ09QWTsKKyAgICBkLT5kYXRhID0gKHZvaWQgKikoKGNoYXIgKilkICsgc2l6ZW9mKHN0cnVjdCBjdXJsX2Jsb2IpKTsKKyAgICBtZW1jcHkoZC0+ZGF0YSwgc3JjLT5kYXRhLCBzcmMtPmxlbik7CisgICAgKmRlc3QgPSBkOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogcmV0dXJucyBUUlVFIGlmIHRoZSBibG9icyBhcmUgaWRlbnRpY2FsICovCitzdGF0aWMgYm9vbCBibG9iY21wKHN0cnVjdCBjdXJsX2Jsb2IgKmZpcnN0LCBzdHJ1Y3QgY3VybF9ibG9iICpzZWNvbmQpCit7CisgIGlmKCFmaXJzdCAmJiAhc2Vjb25kKSAvKiBib3RoIGFyZSBOVUxMICovCisgICAgcmV0dXJuIFRSVUU7CisgIGlmKCFmaXJzdCB8fCAhc2Vjb25kKSAvKiBvbmUgaXMgTlVMTCAqLworICAgIHJldHVybiBGQUxTRTsKKyAgaWYoZmlyc3QtPmxlbiAhPSBzZWNvbmQtPmxlbikgLyogZGlmZmVyZW50IHNpemVzICovCisgICAgcmV0dXJuIEZBTFNFOworICByZXR1cm4gIW1lbWNtcChmaXJzdC0+ZGF0YSwgc2Vjb25kLT5kYXRhLCBmaXJzdC0+bGVuKTsgLyogc2FtZSBkYXRhICovCit9CisKIGJvb2wKLUN1cmxfc3NsX2NvbmZpZ19tYXRjaGVzKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBuZWVkbGUpCitDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqbmVlZGxlKQogewogICBpZigoZGF0YS0+dmVyc2lvbiA9PSBuZWVkbGUtPnZlcnNpb24pICYmCiAgICAgIChkYXRhLT52ZXJzaW9uX21heCA9PSBuZWVkbGUtPnZlcnNpb25fbWF4KSAmJgogICAgICAoZGF0YS0+dmVyaWZ5cGVlciA9PSBuZWVkbGUtPnZlcmlmeXBlZXIpICYmCiAgICAgIChkYXRhLT52ZXJpZnlob3N0ID09IG5lZWRsZS0+dmVyaWZ5aG9zdCkgJiYKICAgICAgKGRhdGEtPnZlcmlmeXN0YXR1cyA9PSBuZWVkbGUtPnZlcmlmeXN0YXR1cykgJiYKKyAgICAgYmxvYmNtcChkYXRhLT5jZXJ0X2Jsb2IsIG5lZWRsZS0+Y2VydF9ibG9iKSAmJgogICAgICBDdXJsX3NhZmVfc3RyY2FzZWNvbXBhcmUoZGF0YS0+Q0FwYXRoLCBuZWVkbGUtPkNBcGF0aCkgJiYKICAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPkNBZmlsZSwgbmVlZGxlLT5DQWZpbGUpICYmCiAgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5jbGllbnRjZXJ0LCBuZWVkbGUtPmNsaWVudGNlcnQpICYmCiAgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5yYW5kb21fZmlsZSwgbmVlZGxlLT5yYW5kb21fZmlsZSkgJiYKICAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmVnZHNvY2tldCwgbmVlZGxlLT5lZ2Rzb2NrZXQpICYmCiAgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5jaXBoZXJfbGlzdCwgbmVlZGxlLT5jaXBoZXJfbGlzdCkgJiYKLSAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmNpcGhlcl9saXN0MTMsIG5lZWRsZS0+Y2lwaGVyX2xpc3QxMykpCisgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5jaXBoZXJfbGlzdDEzLCBuZWVkbGUtPmNpcGhlcl9saXN0MTMpICYmCisgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5waW5uZWRfa2V5LCBuZWVkbGUtPnBpbm5lZF9rZXkpKQogICAgIHJldHVybiBUUlVFOwogCiAgIHJldHVybiBGQUxTRTsKQEAgLTExNCw2ICsxNTUsNyBAQAogICBkZXN0LT52ZXJpZnlzdGF0dXMgPSBzb3VyY2UtPnZlcmlmeXN0YXR1czsKICAgZGVzdC0+c2Vzc2lvbmlkID0gc291cmNlLT5zZXNzaW9uaWQ7CiAKKyAgQ0xPTkVfQkxPQihjZXJ0X2Jsb2IpOwogICBDTE9ORV9TVFJJTkcoQ0FwYXRoKTsKICAgQ0xPTkVfU1RSSU5HKENBZmlsZSk7CiAgIENMT05FX1NUUklORyhjbGllbnRjZXJ0KTsKQEAgLTEyMSwxMSArMTYzLDEyIEBACiAgIENMT05FX1NUUklORyhlZ2Rzb2NrZXQpOwogICBDTE9ORV9TVFJJTkcoY2lwaGVyX2xpc3QpOwogICBDTE9ORV9TVFJJTkcoY2lwaGVyX2xpc3QxMyk7CisgIENMT05FX1NUUklORyhwaW5uZWRfa2V5KTsKIAogICByZXR1cm4gVFJVRTsKIH0KIAotdm9pZCBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcqIHNzbGMpCit2b2lkIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqc3NsYykKIHsKICAgQ3VybF9zYWZlZnJlZShzc2xjLT5DQXBhdGgpOwogICBDdXJsX3NhZmVmcmVlKHNzbGMtPkNBZmlsZSk7CkBAIC0xMzQsNiArMTc3LDggQEAKICAgQ3VybF9zYWZlZnJlZShzc2xjLT5lZ2Rzb2NrZXQpOwogICBDdXJsX3NhZmVmcmVlKHNzbGMtPmNpcGhlcl9saXN0KTsKICAgQ3VybF9zYWZlZnJlZShzc2xjLT5jaXBoZXJfbGlzdDEzKTsKKyAgQ3VybF9zYWZlZnJlZShzc2xjLT5waW5uZWRfa2V5KTsKKyAgQ3VybF9zYWZlZnJlZShzc2xjLT5jZXJ0X2Jsb2IpOwogfQogCiAjaWZkZWYgVVNFX1NTTApAQCAtMTcxLDYgKzIxNiw5IEBACiAgIHJldHVybiBDdXJsX3NzbC0+aW5pdCgpOwogfQogCisjaWYgZGVmaW5lZChDVVJMX1dJVEhfTVVMVElfU1NMKQorc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9tdWx0aTsKKyNlbmRpZgogCiAvKiBHbG9iYWwgY2xlYW51cCAqLwogdm9pZCBDdXJsX3NzbF9jbGVhbnVwKHZvaWQpCkBAIC0xNzgsNiArMjI2LDkgQEAKICAgaWYoaW5pdF9zc2wpIHsKICAgICAvKiBvbmx5IGNsZWFudXAgaWYgd2UgZGlkIGEgcHJldmlvdXMgaW5pdCAqLwogICAgIEN1cmxfc3NsLT5jbGVhbnVwKCk7CisjaWYgZGVmaW5lZChDVVJMX1dJVEhfTVVMVElfU1NMKQorICAgIEN1cmxfc3NsID0gJkN1cmxfc3NsX211bHRpOworI2VuZGlmCiAgICAgaW5pdF9zc2wgPSBGQUxTRTsKICAgfQogfQpAQCAtMjA2LDYgKzI1Nyw3IEBACiAgIHJldHVybiBUUlVFOwogfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogc3RhdGljIENVUkxjb2RlCiBzc2xfY29ubmVjdF9pbml0X3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKQEAgLTIyOSwxNyArMjgxLDIwIEBACiAgIH0KICAgcmV0dXJuIENVUkxFX09LOwogfQorI2VuZGlmCiAKIENVUkxjb2RlCiBDdXJsX3NzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0OwogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZihjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSkgewogICAgIHJlc3VsdCA9IHNzbF9jb25uZWN0X2luaXRfcHJveHkoY29ubiwgc29ja2luZGV4KTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CisjZW5kaWYKIAogICBpZighc3NsX3ByZWZzX2NoZWNrKGNvbm4tPmRhdGEpKQogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKQEAgLTI2MSwxMiArMzE2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtzb2NraW5kZXhdKSB7CiAgICAgcmVzdWx0ID0gc3NsX2Nvbm5lY3RfaW5pdF9wcm94eShjb25uLCBzb2NraW5kZXgpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KLQorI2VuZGlmCiAgIGlmKCFzc2xfcHJlZnNfY2hlY2soY29ubi0+ZGF0YSkpCiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogCkBAIC0zMTIsMTMgKzM2OCwyMSBAQAogICBsb25nICpnZW5lcmFsX2FnZTsKICAgYm9vbCBub19tYXRjaCA9IFRSVUU7CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNvbnN0IGJvb2wgaXNQcm94eSA9IENPTk5FQ1RfUFJPWFlfU1NMKCk7CiAgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKiBjb25zdCBzc2xfY29uZmlnID0gaXNQcm94eSA/CiAgICAgJmNvbm4tPnByb3h5X3NzbF9jb25maWcgOgogICAgICZjb25uLT5zc2xfY29uZmlnOwotICBjb25zdCBjaGFyICogY29uc3QgbmFtZSA9IGlzUHJveHkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6Ci0gICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBjaGFyICogY29uc3QgbmFtZSA9IGlzUHJveHkgPworICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lOwogICBpbnQgcG9ydCA9IGlzUHJveHkgPyAoaW50KWNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgIC8qIG5vIHByb3h5IHN1cHBvcnQgKi8KKyAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqIGNvbnN0IHNzbF9jb25maWcgPSAmY29ubi0+c3NsX2NvbmZpZzsKKyAgY29uc3QgY2hhciAqIGNvbnN0IG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisgIGludCBwb3J0ID0gY29ubi0+cmVtb3RlX3BvcnQ7CisgICh2b2lkKXNvY2tpbmRleDsKKyNlbmRpZgogICAqc3NsX3Nlc3Npb25pZCA9IE5VTEw7CiAKICAgREVCVUdBU1NFUlQoU1NMX1NFVF9PUFRJT04ocHJpbWFyeS5zZXNzaW9uaWQpKTsKQEAgLTQyMCwxNCArNDg0LDIzIEBACiAgIGNoYXIgKmNsb25lX2Nvbm5fdG9faG9zdDsKICAgaW50IGNvbm5fdG9fcG9ydDsKICAgbG9uZyAqZ2VuZXJhbF9hZ2U7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBib29sIGlzUHJveHkgPSBDT05ORUNUX1BST1hZX1NTTCgpOwogICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICogY29uc3Qgc3NsX2NvbmZpZyA9IGlzUHJveHkgPwogICAgICZjb25uLT5wcm94eV9zc2xfY29uZmlnIDoKICAgICAmY29ubi0+c3NsX2NvbmZpZzsKLQorICBjb25zdCBjaGFyICpob3N0bmFtZSA9IGlzUHJveHkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworI2Vsc2UKKyAgLyogcHJveHkgc3VwcG9ydCBkaXNhYmxlZCAqLworICBjb25zdCBib29sIGlzUHJveHkgPSBGQUxTRTsKKyAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqIGNvbnN0IHNzbF9jb25maWcgPSAmY29ubi0+c3NsX2NvbmZpZzsKKyAgY29uc3QgY2hhciAqaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisgICh2b2lkKXNvY2tpbmRleDsKKyNlbmRpZgogICBERUJVR0FTU0VSVChTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpOwogCi0gIGNsb25lX2hvc3QgPSBzdHJkdXAoaXNQcm94eSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lKTsKKyAgY2xvbmVfaG9zdCA9IHN0cmR1cChob3N0bmFtZSk7CiAgIGlmKCFjbG9uZV9ob3N0KQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOyAvKiBiYWlsIG91dCAqLwogCkBAIC00ODYsNiArNTU5LDcgQEAKICAgc3RvcmUtPnNjaGVtZSA9IGNvbm4tPmhhbmRsZXItPnNjaGVtZTsKIAogICBpZighQ3VybF9jbG9uZV9wcmltYXJ5X3NzbF9jb25maWcoc3NsX2NvbmZpZywgJnN0b3JlLT5zc2xfY29uZmlnKSkgeworICAgIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoJnN0b3JlLT5zc2xfY29uZmlnKTsKICAgICBzdG9yZS0+c2Vzc2lvbmlkID0gTlVMTDsgLyogbGV0IGNhbGxlciBmcmVlIHNlc3Npb25pZCAqLwogICAgIGZyZWUoY2xvbmVfaG9zdCk7CiAgICAgZnJlZShjbG9uZV9jb25uX3RvX2hvc3QpOwpAQCAtNTEzLDE2ICs1ODcsMTIgQEAKIH0KIAogI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX0dOVVRMUykgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKLSAgZGVmaW5lZChVU0VfU0VDVFJBTlNQKSB8fCBkZWZpbmVkKFVTRV9QT0xBUlNTTCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBcCi0gIGRlZmluZWQoVVNFX01CRURUTFMpIHx8IGRlZmluZWQoVVNFX0NZQVNTTCkKLWludCBDdXJsX3NzbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgIGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBcCisgIGRlZmluZWQoVVNFX01CRURUTFMpIHx8IGRlZmluZWQoVVNFX1dPTEZTU0wpIHx8IGRlZmluZWQoVVNFX0JFQVJTU0wpCitpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbRklSU1RTT0NLRVRdOwogCi0gIGlmKCFudW1zb2NrcykKLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKLQogICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgewogICAgIC8qIHdyaXRlIG1vZGUgKi8KICAgICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwpAQCAtNTM4LDEyICs2MDgsMTAgQEAKIH0KICNlbHNlCiBpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICAodm9pZCljb25uOwogICAodm9pZClzb2NrczsKLSAgKHZvaWQpbnVtc29ja3M7CiAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwogfQogLyogVVNFX09QRU5TU0wgfHwgVVNFX0dOVVRMUyB8fCBVU0VfU0NIQU5ORUwgfHwgVVNFX1NFQ1RSQU5TUCB8fCBVU0VfTlNTICovCkBAIC02ODAsNyArNzQ4LDcgQEAKIH0KIAogLyoKLSAqICd2YWx1ZScgaXMgTk9UIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZworICogJ3ZhbHVlJyBpcyBOT1QgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCiAgKi8KIENVUkxjb2RlIEN1cmxfc3NsX3B1c2hfY2VydGluZm9fbGVuKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydG51bSwKQEAgLTcwMiwxMCArNzcwLDEwIEBACiAgIC8qIHNwcmludGYgdGhlIGxhYmVsIGFuZCBjb2xvbiAqLwogICBtc25wcmludGYob3V0cHV0LCBvdXRsZW4sICIlczoiLCBsYWJlbCk7CiAKLSAgLyogbWVtY3B5IHRoZSB2YWx1ZSAoaXQgbWlnaHQgbm90IGJlIHplcm8gdGVybWluYXRlZCkgKi8KKyAgLyogbWVtY3B5IHRoZSB2YWx1ZSAoaXQgbWlnaHQgbm90IGJlIG51bGwtdGVybWluYXRlZCkgKi8KICAgbWVtY3B5KCZvdXRwdXRbbGFiZWxsZW4gKyAxXSwgdmFsdWUsIHZhbHVlbGVuKTsKIAotICAvKiB6ZXJvIHRlcm1pbmF0ZSB0aGUgb3V0cHV0ICovCisgIC8qIG51bGwtdGVybWluYXRlIHRoZSBvdXRwdXQgKi8KICAgb3V0cHV0W2xhYmVsbGVuICsgMSArIHZhbHVlbGVuXSA9IDA7CiAKICAgbmwgPSBDdXJsX3NsaXN0X2FwcGVuZF9ub2R1cChjaS0+Y2VydGluZm9bY2VydG51bV0sIG91dHB1dCk7CkBAIC0xMDgwLDcgKzExNDgsNyBAQAogQ1VSTGNvZGUgQ3VybF9ub25lX21kNXN1bSh1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlucHV0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptZDVzdW0sIHNpemVfdCBtZDVsZW4gVU5VU0VEX1BBUkFNKQogewotICBNRDVfY29udGV4dCAqTUQ1cHc7CisgIHN0cnVjdCBNRDVfY29udGV4dCAqTUQ1cHc7CiAKICAgKHZvaWQpbWQ1bGVuOwogCkBAIC0xMTcyLDggKzEyNDAsOCBAQAogY29uc3Qgc3RydWN0IEN1cmxfc3NsICpDdXJsX3NzbCA9CiAjaWYgZGVmaW5lZChDVVJMX1dJVEhfTVVMVElfU1NMKQogICAmQ3VybF9zc2xfbXVsdGk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9DWUFTU0wpCi0gICZDdXJsX3NzbF9jeWFzc2w7CisjZWxpZiBkZWZpbmVkKFVTRV9XT0xGU1NMKQorICAmQ3VybF9zc2xfd29sZnNzbDsKICNlbGlmIGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkKICAgJkN1cmxfc3NsX3NlY3RyYW5zcDsKICNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKQEAgLTExODYsMTkgKzEyNTQsMTkgQEAKICAgJkN1cmxfc3NsX25zczsKICNlbGlmIGRlZmluZWQoVVNFX09QRU5TU0wpCiAgICZDdXJsX3NzbF9vcGVuc3NsOwotI2VsaWYgZGVmaW5lZChVU0VfUE9MQVJTU0wpCi0gICZDdXJsX3NzbF9wb2xhcnNzbDsKICNlbGlmIGRlZmluZWQoVVNFX1NDSEFOTkVMKQogICAmQ3VybF9zc2xfc2NoYW5uZWw7CiAjZWxpZiBkZWZpbmVkKFVTRV9NRVNBTElOSykKICAgJkN1cmxfc3NsX21lc2FsaW5rOworI2VsaWYgZGVmaW5lZChVU0VfQkVBUlNTTCkKKyAgJkN1cmxfc3NsX2JlYXJzc2w7CiAjZWxzZQogI2Vycm9yICJNaXNzaW5nIHN0cnVjdCBDdXJsX3NzbCBmb3Igc2VsZWN0ZWQgU1NMIGJhY2tlbmQiCiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqYXZhaWxhYmxlX2JhY2tlbmRzW10gPSB7Ci0jaWYgZGVmaW5lZChVU0VfQ1lBU1NMKQotICAmQ3VybF9zc2xfY3lhc3NsLAorI2lmIGRlZmluZWQoVVNFX1dPTEZTU0wpCisgICZDdXJsX3NzbF93b2xmc3NsLAogI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfU0VDVFJBTlNQKQogICAmQ3VybF9zc2xfc2VjdHJhbnNwLApAQCAtMTIxOCwxNSArMTI4NiwxNSBAQAogI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpCiAgICZDdXJsX3NzbF9vcGVuc3NsLAogI2VuZGlmCi0jaWYgZGVmaW5lZChVU0VfUE9MQVJTU0wpCi0gICZDdXJsX3NzbF9wb2xhcnNzbCwKLSNlbmRpZgogI2lmIGRlZmluZWQoVVNFX1NDSEFOTkVMKQogICAmQ3VybF9zc2xfc2NoYW5uZWwsCiAjZW5kaWYKICNpZiBkZWZpbmVkKFVTRV9NRVNBTElOSykKICAgJkN1cmxfc3NsX21lc2FsaW5rLAogI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfQkVBUlNTTCkKKyAgJkN1cmxfc3NsX2JlYXJzc2wsCisjZW5kaWYKICAgTlVMTAogfTsKIApAQCAtMTIzNCw3ICsxMzAyLDcgQEAKIHsKICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqc2VsZWN0ZWQ7CiAgIHN0YXRpYyBjaGFyIGJhY2tlbmRzWzIwMF07Ci0gIHN0YXRpYyBzaXplX3QgdG90YWw7CisgIHN0YXRpYyBzaXplX3QgYmFja2VuZHNfbGVuOwogICBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgKmN1cnJlbnQ7CiAKICAgY3VycmVudCA9IEN1cmxfc3NsID09ICZDdXJsX3NzbF9tdWx0aSA/IGF2YWlsYWJsZV9iYWNrZW5kc1swXSA6IEN1cmxfc3NsOwpAQCAtMTI0NiwyNyArMTMxNCwzMiBAQAogCiAgICAgc2VsZWN0ZWQgPSBjdXJyZW50OwogCi0gICAgZm9yKGkgPSAwOyBhdmFpbGFibGVfYmFja2VuZHNbaV0gJiYgcCA8IChlbmQgLSA0KTsgaSsrKSB7Ci0gICAgICBpZihpKQotICAgICAgICAqKHArKykgPSAnICc7Ci0gICAgICBpZihzZWxlY3RlZCAhPSBhdmFpbGFibGVfYmFja2VuZHNbaV0pCi0gICAgICAgICoocCsrKSA9ICcoJzsKLSAgICAgIHAgKz0gYXZhaWxhYmxlX2JhY2tlbmRzW2ldLT52ZXJzaW9uKHAsIGVuZCAtIHAgLSAyKTsKLSAgICAgIGlmKHNlbGVjdGVkICE9IGF2YWlsYWJsZV9iYWNrZW5kc1tpXSkKLSAgICAgICAgKihwKyspID0gJyknOworICAgIGJhY2tlbmRzWzBdID0gJ1wwJzsKKworICAgIGZvcihpID0gMDsgYXZhaWxhYmxlX2JhY2tlbmRzW2ldOyArK2kpIHsKKyAgICAgIGNoYXIgdmJbMjAwXTsKKyAgICAgIGJvb2wgcGFyZW4gPSAoc2VsZWN0ZWQgIT0gYXZhaWxhYmxlX2JhY2tlbmRzW2ldKTsKKworICAgICAgaWYoYXZhaWxhYmxlX2JhY2tlbmRzW2ldLT52ZXJzaW9uKHZiLCBzaXplb2YodmIpKSkgeworICAgICAgICBwICs9IG1zbnByaW50ZihwLCBlbmQgLSBwLCAiJXMlcyVzJXMiLCAocCAhPSBiYWNrZW5kcyA/ICIgIiA6ICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVuID8gIigiIDogIiIpLCB2YiwgKHBhcmVuID8gIikiIDogIiIpKTsKKyAgICAgIH0KICAgICB9Ci0gICAgKnAgPSAnXDAnOwotICAgIHRvdGFsID0gcCAtIGJhY2tlbmRzOworCisgICAgYmFja2VuZHNfbGVuID0gcCAtIGJhY2tlbmRzOwogICB9CiAKLSAgaWYoc2l6ZSA+IHRvdGFsKQotICAgIG1lbWNweShidWZmZXIsIGJhY2tlbmRzLCB0b3RhbCArIDEpOwotICBlbHNlIHsKLSAgICBtZW1jcHkoYnVmZmVyLCBiYWNrZW5kcywgc2l6ZSAtIDEpOworICBpZighc2l6ZSkKKyAgICByZXR1cm4gMDsKKworICBpZihzaXplIDw9IGJhY2tlbmRzX2xlbikgeworICAgIHN0cm5jcHkoYnVmZmVyLCBiYWNrZW5kcywgc2l6ZSAtIDEpOwogICAgIGJ1ZmZlcltzaXplIC0gMV0gPSAnXDAnOworICAgIHJldHVybiBzaXplIC0gMTsKICAgfQogCi0gIHJldHVybiBDVVJMTUlOKHNpemUgLSAxLCB0b3RhbCk7CisgIHN0cmNweShidWZmZXIsIGJhY2tlbmRzKTsKKyAgcmV0dXJuIGJhY2tlbmRzX2xlbjsKIH0KIAogc3RhdGljIGludCBtdWx0aXNzbF9pbml0KGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqYmFja2VuZCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKaW5kZXggMmE4N2NhMS4uYmNjODQ0NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEwMiwyMyArMTAyLDE3IEBACiAjaW5jbHVkZSAiZ3Rscy5oIiAgICAgICAgICAgLyogR251VExTIHZlcnNpb25zICovCiAjaW5jbHVkZSAibnNzZy5oIiAgICAgICAgICAgLyogTlNTIHZlcnNpb25zICovCiAjaW5jbHVkZSAiZ3NraXQuaCIgICAgICAgICAgLyogR2xvYmFsIFNlY3VyZSBUb29sS2l0IHZlcnNpb25zICovCi0jaW5jbHVkZSAicG9sYXJzc2wuaCIgICAgICAgLyogUG9sYXJTU0wgdmVyc2lvbnMgKi8KLSNpbmNsdWRlICJjeWFzc2wuaCIgICAgICAgICAvKiBDeWFTU0wgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJ3b2xmc3NsLmgiICAgICAgICAvKiB3b2xmU1NMIHZlcnNpb25zICovCiAjaW5jbHVkZSAic2NoYW5uZWwuaCIgICAgICAgLyogU2NoYW5uZWwgU1NQSSB2ZXJzaW9uICovCiAjaW5jbHVkZSAic2VjdHJhbnNwLmgiICAgICAgLyogU2VjdXJlVHJhbnNwb3J0IChEYXJ3aW4pIHZlcnNpb24gKi8KICNpbmNsdWRlICJtYmVkdGxzLmgiICAgICAgICAvKiBtYmVkVExTIHZlcnNpb25zICovCiAjaW5jbHVkZSAibWVzYWxpbmsuaCIgICAgICAgLyogTWVzYUxpbmsgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJiZWFyc3NsLmgiICAgICAgICAvKiBCZWFyU1NMIHZlcnNpb25zICovCiAKICNpZm5kZWYgTUFYX1BJTk5FRF9QVUJLRVlfU0laRQogI2RlZmluZSBNQVhfUElOTkVEX1BVQktFWV9TSVpFIDEwNDg1NzYgLyogMU1CICovCiAjZW5kaWYKIAotI2lmbmRlZiBNRDVfRElHRVNUX0xFTkdUSAotI2lmbmRlZiBMSUJXT0xGU1NMX1ZFUlNJT05fSEVYIC8qIGJlY2F1c2UgV29sZlNTTCBib3JrcyB0aGlzICovCi0jZGVmaW5lIE1ENV9ESUdFU1RfTEVOR1RIIDE2IC8qIGZpeGVkIHNpemUgKi8KLSNlbmRpZgotI2VuZGlmCi0KICNpZm5kZWYgQ1VSTF9TSEEyNTZfRElHRVNUX0xFTkdUSAogI2RlZmluZSBDVVJMX1NIQTI1Nl9ESUdFU1RfTEVOR1RIIDMyIC8qIGZpeGVkIHNpemUgKi8KICNlbmRpZgpAQCAtMTI5LDIyICsxMjMsMjggQEAKIAogLyogc2V0IG9mIGhlbHBlciBtYWNyb3MgZm9yIHRoZSBiYWNrZW5kcyB0byBhY2Nlc3MgdGhlIGNvcnJlY3QgZmllbGRzLiBGb3IgdGhlCiAgICBwcm94eSBvciBmb3IgdGhlIHJlbW90ZSBob3N0IC0gdG8gcHJvcGVybHkgc3VwcG9ydCBIVFRQUyBwcm94eSAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyNkZWZpbmUgU1NMX0lTX1BST1hZKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKENVUkxQUk9YWV9IVFRQUyA9PSBjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSAmJiAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlICE9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGNvbm4tPnByb3h5X3NzbFtjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0gPT0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9CQUQgPyBGSVJTVFNPQ0tFVCA6IFNFQ09OREFSWVNPQ0tFVF0uc3RhdGUpCisjZGVmaW5lIFNTTF9TRVRfT1BUSU9OKHZhcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChTU0xfSVNfUFJPWFkoKSA/IGRhdGEtPnNldC5wcm94eV9zc2wudmFyIDogZGF0YS0+c2V0LnNzbC52YXIpCisjZGVmaW5lIFNTTF9DT05OX0NPTkZJRyh2YXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnByb3h5X3NzbF9jb25maWcudmFyIDogY29ubi0+c3NsX2NvbmZpZy52YXIpCisjZWxzZQorI2RlZmluZSBTU0xfSVNfUFJPWFkoKSBGQUxTRQorI2RlZmluZSBTU0xfU0VUX09QVElPTih2YXIpIGRhdGEtPnNldC5zc2wudmFyCisjZGVmaW5lIFNTTF9DT05OX0NPTkZJRyh2YXIpIGNvbm4tPnNzbF9jb25maWcudmFyCisjZW5kaWYKIAotI2RlZmluZSBTU0xfSVNfUFJPWFkoKSAoQ1VSTFBST1hZX0hUVFBTID09IGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlICYmIFwKLSAgc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgIT0gY29ubi0+cHJveHlfc3NsW2Nvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSA9PSBcCi0gIENVUkxfU09DS0VUX0JBRCA/IEZJUlNUU09DS0VUIDogU0VDT05EQVJZU09DS0VUXS5zdGF0ZSkKLSNkZWZpbmUgU1NMX1NFVF9PUFRJT04odmFyKSAoU1NMX0lTX1BST1hZKCkgPyBkYXRhLT5zZXQucHJveHlfc3NsLnZhciA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC52YXIpCi0jZGVmaW5lIFNTTF9DT05OX0NPTkZJRyh2YXIpIChTU0xfSVNfUFJPWFkoKSA/ICAgICAgICAgIFwKLSAgY29ubi0+cHJveHlfc3NsX2NvbmZpZy52YXIgOiBjb25uLT5zc2xfY29uZmlnLnZhcikKLQotYm9vbCBDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBuZWVkbGUpOworYm9vbCBDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpuZWVkbGUpOwogYm9vbCBDdXJsX2Nsb25lX3ByaW1hcnlfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKmRlc3QpOwotdm9pZCBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcqIHNzbGMpOwotaW50IEN1cmxfc3NsX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Cit2b2lkIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqc3NsYyk7CitpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogaW50IEN1cmxfc3NsX2JhY2tlbmQodm9pZCk7CiAKQEAgLTI2Myw3ICsyNjMsNiBAQAogI2RlZmluZSBDdXJsX3NzbF9zZW5kKGEsYixjLGQsZSkgLTEKICNkZWZpbmUgQ3VybF9zc2xfcmVjdihhLGIsYyxkLGUpIC0xCiAjZGVmaW5lIEN1cmxfc3NsX2luaXRzZXNzaW9ucyh4LHkpIENVUkxFX09LCi0jZGVmaW5lIEN1cmxfc3NsX3ZlcnNpb24oeCx5KSAwCiAjZGVmaW5lIEN1cmxfc3NsX2RhdGFfcGVuZGluZyh4LHkpIDAKICNkZWZpbmUgQ3VybF9zc2xfY2hlY2tfY3huKHgpIDAKICNkZWZpbmUgQ3VybF9zc2xfZnJlZV9jZXJ0aW5mbyh4KSBDdXJsX25vcF9zdG10CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvd29sZnNzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMmExMjQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNvdXJjZSBmaWxlIGZvciBhbGwgd29sZlNTTCBzcGVjaWZpYyBjb2RlIGZvciB0aGUgVExTL1NTTCBsYXllci4gTm8gY29kZQorICogYnV0IHZ0bHMuYyBzaG91bGQgZXZlciBjYWxsIG9yIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKgorICovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfV09MRlNTTAorCisjZGVmaW5lIFdPTEZTU0xfT1BUSU9OU19JR05PUkVfU1lTCisjaW5jbHVkZSA8d29sZnNzbC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcHRpb25zLmg+CisKKy8qIFRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdlIHJlbHkgb24gb25lIG9yIGJvdGggb2Y6CisgICAtIHRoZSB1c2VyJ3Mgb3B0aW9ucy5oIGdlbmVyYXRlZCBieSB3b2xmU1NMCisgICAtIHRoZSBzeW1ib2xzIGRldGVjdGVkIGJ5IGN1cmwncyBjb25maWd1cmUKKyAgIFNpbmNlIHRoZXkgYXJlIG1hcmtlZGx5IGRpZmZlcmVudCBmcm9tIG9uZSBhbm90aGVyLCBhbmQgb25lIG9yIHRoZSBvdGhlciBtYXkKKyAgIG5vdCBiZSBhdmFpbGFibGUsIHdlIGRvIHNvbWUgY2hlY2tpbmcgYmVsb3cgdG8gYnJpbmcgdGhpbmdzIGluIHN5bmMuICovCisKKy8qIEhBVkVfQUxQTiBpcyB3b2xmU1NMJ3MgYnVpbGQgdGltZSBzeW1ib2wgZm9yIGVuYWJsaW5nIEFMUE4gaW4gb3B0aW9ucy5oLiAqLworI2lmbmRlZiBIQVZFX0FMUE4KKyNpZmRlZiBIQVZFX1dPTEZTU0xfVVNFQUxQTgorI2RlZmluZSBIQVZFX0FMUE4KKyNlbmRpZgorI2VuZGlmCisKKy8qIFdPTEZTU0xfQUxMT1dfU1NMVjMgaXMgd29sZlNTTCdzIGJ1aWxkIHRpbWUgc3ltYm9sIGZvciBlbmFibGluZyBTU0x2MyBpbgorICAgb3B0aW9ucy5oLCBidXQgaXMgb25seSBzZWVuIGluID49IDMuNi42IHNpbmNlIHRoYXQncyB3aGVuIHRoZXkgc3RhcnRlZAorICAgZGlzYWJsaW5nIFNTTHYzIGJ5IGRlZmF1bHQuICovCisjaWZuZGVmIFdPTEZTU0xfQUxMT1dfU1NMVjMKKyNpZiAoTElCV09MRlNTTF9WRVJTSU9OX0hFWCA8IDB4MDMwMDYwMDYpIHx8IFwKKyAgZGVmaW5lZChIQVZFX1dPTEZTU0xWM19DTElFTlRfTUVUSE9EKQorI2RlZmluZSBXT0xGU1NMX0FMTE9XX1NTTFYzCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKyNpbmNsdWRlICJ2dGxzLmgiCisjaW5jbHVkZSAia2V5bG9nLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLworI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKKyNpbmNsdWRlICJ4NTA5YXNuMS5oIgorI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC9lcnJvci1zc2wuaD4KKyNpbmNsdWRlICJ3b2xmc3NsLmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIEtFRVBfUEVFUl9DRVJUIGlzIGEgcHJvZHVjdCBvZiB0aGUgcHJlc2VuY2Ugb2YgYnVpbGQgdGltZSBzeW1ib2wKKyAgIE9QRU5TU0xfRVhUUkEgd2l0aG91dCBOT19DRVJUUywgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uLiBLRUVQX1BFRVJfQ0VSVCBpcworICAgaW4gd29sZlNTTCdzIHNldHRpbmdzLmgsIGFuZCB0aGUgbGF0dGVyIHR3byBhcmUgYnVpbGQgdGltZSBzeW1ib2xzIGluCisgICBvcHRpb25zLmguICovCisjaWZuZGVmIEtFRVBfUEVFUl9DRVJUCisjaWYgZGVmaW5lZChIQVZFX1dPTEZTU0xfR0VUX1BFRVJfQ0VSVElGSUNBVEUpIHx8IFwKKyAgICAoZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiAhZGVmaW5lZChOT19DRVJUUykpCisjZGVmaW5lIEtFRVBfUEVFUl9DRVJUCisjZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSB7CisgIFNTTF9DVFgqIGN0eDsKKyAgU1NMKiAgICAgaGFuZGxlOworfTsKKworc3RhdGljIEN1cmxfcmVjdiB3b2xmc3NsX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHdvbGZzc2xfc2VuZDsKKworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKy8qCisgKiBBdmFpbGFiaWxpdHkgbm90ZToKKyAqIFRoZSBUTFMgMS4zIHNlY3JldCBjYWxsYmFjayAod29sZlNTTF9zZXRfdGxzMTNfc2VjcmV0X2NiKSB3YXMgYWRkZWQgaW4KKyAqIFdvbGZTU0wgNC40LjAsIGJ1dCByZXF1aXJlcyB0aGUgLURIQVZFX1NFQ1JFVF9DQUxMQkFDSyBidWlsZCBvcHRpb24uIElmIHRoYXQKKyAqIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGVuIFRMUyAxLjMgd2lsbCBub3QgYmUgbG9nZ2VkLgorICogRm9yIFRMUyAxLjIgYW5kIGJlZm9yZSwgd2UgdXNlIHdvbGZTU0xfZ2V0X2tleXMoKS4KKyAqIFNTTF9nZXRfY2xpZW50X3JhbmRvbSBhbmQgd29sZlNTTF9nZXRfa2V5cyByZXF1aXJlIE9QRU5TU0xfRVhUUkEKKyAqICgtLWVuYWJsZS1vcGVuc3NsZXh0cmEgb3IgLS1lbmFibGUtYWxsKS4KKyAqLworI2lmIGRlZmluZWQoSEFWRV9TRUNSRVRfQ0FMTEJBQ0spICYmIGRlZmluZWQoV09MRlNTTF9UTFMxMykKK3N0YXRpYyBpbnQKK3dvbGZzc2xfdGxzMTNfc2VjcmV0X2NhbGxiYWNrKFNTTCAqc3NsLCBpbnQgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWNyZXRTeiwgdm9pZCAqY3R4KQoreworICBjb25zdCBjaGFyICpsYWJlbDsKKyAgdW5zaWduZWQgY2hhciBjbGllbnRfcmFuZG9tW1NTTDNfUkFORE9NX1NJWkVdOworICAodm9pZCljdHg7CisKKyAgaWYoIXNzbCB8fCAhQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgc3dpdGNoKGlkKSB7CisgIGNhc2UgQ0xJRU5UX0VBUkxZX1RSQUZGSUNfU0VDUkVUOgorICAgIGxhYmVsID0gIkNMSUVOVF9FQVJMWV9UUkFGRklDX1NFQ1JFVCI7CisgICAgYnJlYWs7CisgIGNhc2UgQ0xJRU5UX0hBTkRTSEFLRV9UUkFGRklDX1NFQ1JFVDoKKyAgICBsYWJlbCA9ICJDTElFTlRfSEFORFNIQUtFX1RSQUZGSUNfU0VDUkVUIjsKKyAgICBicmVhazsKKyAgY2FzZSBTRVJWRVJfSEFORFNIQUtFX1RSQUZGSUNfU0VDUkVUOgorICAgIGxhYmVsID0gIlNFUlZFUl9IQU5EU0hBS0VfVFJBRkZJQ19TRUNSRVQiOworICAgIGJyZWFrOworICBjYXNlIENMSUVOVF9UUkFGRklDX1NFQ1JFVDoKKyAgICBsYWJlbCA9ICJDTElFTlRfVFJBRkZJQ19TRUNSRVRfMCI7CisgICAgYnJlYWs7CisgIGNhc2UgU0VSVkVSX1RSQUZGSUNfU0VDUkVUOgorICAgIGxhYmVsID0gIlNFUlZFUl9UUkFGRklDX1NFQ1JFVF8wIjsKKyAgICBicmVhazsKKyAgY2FzZSBFQVJMWV9FWFBPUlRFUl9TRUNSRVQ6CisgICAgbGFiZWwgPSAiRUFSTFlfRVhQT1JURVJfU0VDUkVUIjsKKyAgICBicmVhazsKKyAgY2FzZSBFWFBPUlRFUl9TRUNSRVQ6CisgICAgbGFiZWwgPSAiRVhQT1JURVJfU0VDUkVUIjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmKFNTTF9nZXRfY2xpZW50X3JhbmRvbShzc2wsIGNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpID09IDApIHsKKyAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHdvbGZTU0xfS2VlcEFycmF5cygpIHdhcyBjYWxsZWQgYmVmb3JlLiAqLworICAgIHJldHVybiAwOworICB9CisKKyAgQ3VybF90bHNfa2V5bG9nX3dyaXRlKGxhYmVsLCBjbGllbnRfcmFuZG9tLCBzZWNyZXQsIHNlY3JldFN6KTsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NFQ1JFVF9DQUxMQkFDSykgJiYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAqLworCitzdGF0aWMgdm9pZAord29sZnNzbF9sb2dfdGxzMTJfc2VjcmV0KFNTTCAqc3NsKQoreworICB1bnNpZ25lZCBjaGFyICptcywgKnNyLCAqY3I7CisgIHVuc2lnbmVkIGludCBtc0xlbiwgc3JMZW4sIGNyTGVuLCBpLCB4ID0gMDsKKworI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwZDAwMCAvKiA+PSAzLjEzLjAgKi8KKyAgLyogd29sZlNTTF9HZXRWZXJzaW9uIGlzIGF2YWlsYWJsZSBzaW5jZSAzLjEzLCB3ZSB1c2UgaXQgaW5zdGVhZCBvZgorICAgKiBTU0xfdmVyc2lvbiBzaW5jZSB0aGUgbGF0dGVyIHJlbGllcyBvbiBPUEVOU1NMX0FMTCAoLS1lbmFibGUtb3BlbnNzbGFsbCBvcgorICAgKiAtLWVuYWJsZS1hbGwpLiBGYWlsaW5nIHRvIHBlcmZvcm0gdGhpcyBjaGVjayBjb3VsZCByZXN1bHQgaW4gYW4gdW51c2FibGUKKyAgICoga2V5IGxvZyBsaW5lIHdoZW4gVExTIDEuMyBpcyBhY3R1YWxseSBuZWdvdGlhdGVkLiAqLworICBzd2l0Y2god29sZlNTTF9HZXRWZXJzaW9uKHNzbCkpIHsKKyAgY2FzZSBXT0xGU1NMX1NTTFYzOgorICBjYXNlIFdPTEZTU0xfVExTVjE6CisgIGNhc2UgV09MRlNTTF9UTFNWMV8xOgorICBjYXNlIFdPTEZTU0xfVExTVjFfMjoKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAvKiBUTFMgMS4zIGRvZXMgbm90IHVzZSB0aGlzIG1lY2hhbmlzbSwgdGhlICJtYXN0ZXIgc2VjcmV0IiByZXR1cm5lZCBiZWxvdworICAgICAqIGlzIG5vdCBkaXJlY3RseSB1c2FibGUuICovCisgICAgcmV0dXJuOworICB9CisjZW5kaWYKKworICBpZihTU0xfZ2V0X2tleXMoc3NsLCAmbXMsICZtc0xlbiwgJnNyLCAmc3JMZW4sICZjciwgJmNyTGVuKSAhPSBTU0xfU1VDQ0VTUykgeworICAgIHJldHVybjsKKyAgfQorCisgIC8qIENoZWNrIGZvciBhIG1pc3NpbmcgbWFzdGVyIHNlY3JldCBhbmQgc2tpcCBsb2dnaW5nLiBUaGF0IGNhbiBoYXBwZW4gaWYKKyAgICogY3VybCByZWplY3RzIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgYW5kIGFib3J0cyB0aGUgaGFuZHNoYWtlLgorICAgKi8KKyAgZm9yKGkgPSAwOyBpIDwgbXNMZW47IGkrKykgeworICAgIHggfD0gbXNbaV07CisgIH0KKyAgaWYoeCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgQ3VybF90bHNfa2V5bG9nX3dyaXRlKCJDTElFTlRfUkFORE9NIiwgY3IsIG1zLCBtc0xlbik7Cit9CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworCitzdGF0aWMgaW50IGRvX2ZpbGVfdHlwZShjb25zdCBjaGFyICp0eXBlKQoreworICBpZighdHlwZSB8fCAhdHlwZVswXSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX1BFTTsKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIlBFTSIpKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiREVSIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9BU04xOworICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvYWRzIGFsbCB0aGUgY2xpZW50L0NBIGNlcnRpZmljYXRlcyBhbmQgQ1JMcy4gU2V0dXAgdGhlIFRMUworICogbGF5ZXIgYW5kIGRvIGFsbCBuZWNlc3NhcnkgbWFnaWMuCisgKi8KK3N0YXRpYyBDVVJMY29kZQord29sZnNzbF9jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIGNoYXIgKmNpcGhlcnM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBTU0xfTUVUSE9EKiByZXFfbWV0aG9kID0gTlVMTDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisjaWZkZWYgSEFWRV9TTkkKKyAgYm9vbCBzbmkgPSBGQUxTRTsKKyNkZWZpbmUgdXNlX3NuaSh4KSAgc25pID0gKHgpCisjZWxzZQorI2RlZmluZSB1c2Vfc25pKHgpICBDdXJsX25vcF9zdG10CisjZW5kaWYKKworICBpZihjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcnNpb25fbWF4KSAhPSBDVVJMX1NTTFZFUlNJT05fTUFYX05PTkUpIHsKKyAgICBmYWlsZihkYXRhLCAid29sZlNTTCBkb2VzIG5vdCBzdXBwb3J0IHRvIHNldCBtYXhpbXVtIFNTTC9UTFMgdmVyc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlIGFuIGV4cGxpY2l0IFNTTC9UTFMgdmVyc2lvbiAqLworICBzd2l0Y2goU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pKSB7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgorI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwMzAwMCAvKiA+PSAzLjMuMCAqLworICAgIC8qIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcyBzZXQgbGF0ZXIgYWZ0ZXIgdGhlIENUWCBvYmplY3QgaXMgY3JlYXRlZCAqLworICAgIHJlcV9tZXRob2QgPSBTU0x2MjNfY2xpZW50X21ldGhvZCgpOworI2Vsc2UKKyAgICBpbmZvZihkYXRhLCAid29sZlNTTCA8My4zLjAgY2Fubm90IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIFRMUyAxLjAtMS4yLCAiCisgICAgICAgICAgIlRMUyAxLjAgaXMgdXNlZCBleGNsdXNpdmVseVxuIik7CisgICAgcmVxX21ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKKyNlbmRpZgorICAgIHVzZV9zbmkoVFJVRSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6CisjaWZkZWYgV09MRlNTTF9BTExPV19UTFNWMTAKKyAgICByZXFfbWV0aG9kID0gVExTdjFfY2xpZW50X21ldGhvZCgpOworICAgIHVzZV9zbmkoVFJVRSk7CisjZWxzZQorICAgIGZhaWxmKGRhdGEsICJ3b2xmU1NMIGRvZXMgbm90IHN1cHBvcnQgVExTIDEuMCIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICByZXFfbWV0aG9kID0gVExTdjFfMV9jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKKyAgICByZXFfbWV0aG9kID0gVExTdjFfMl9jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgcmVxX21ldGhvZCA9IHdvbGZUTFN2MV8zX2NsaWVudF9tZXRob2QoKTsKKyAgICB1c2Vfc25pKFRSVUUpOworICAgIGJyZWFrOworI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAid29sZlNTTDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyNlbmRpZgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyNpZmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCisgICAgcmVxX21ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAgICB1c2Vfc25pKEZBTFNFKTsKKyNlbHNlCisgICAgZmFpbGYoZGF0YSwgIndvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisgICAgZmFpbGYoZGF0YSwgIndvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIGlmKCFyZXFfbWV0aG9kKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgbWV0aG9kISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgaWYoYmFja2VuZC0+Y3R4KQorICAgIFNTTF9DVFhfZnJlZShiYWNrZW5kLT5jdHgpOworICBiYWNrZW5kLT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKKworICBpZighYmFja2VuZC0+Y3R4KSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCEiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CisjaWYgTElCV09MRlNTTF9WRVJTSU9OX0hFWCA+IDB4MDMwMDQwMDYgLyogPiAzLjQuNiAqLworICAgIC8qIFZlcnNpb25zIDMuMy4wIHRvIDMuNC42IHdlIGtub3cgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcworICAgICAqIHdoYXRldmVyIG1pbmltdW0gdmVyc2lvbiBvZiBUTFMgd2FzIGJ1aWx0IGluIGFuZCBhdCBsZWFzdCBUTFMgMS4wLiBGb3IKKyAgICAgKiBsYXRlciBsaWJyYXJ5IHZlcnNpb25zIHRoYXQgY291bGQgY2hhbmdlIChlZyBUTFMgMS4wIGJ1aWx0IGluIGJ1dAorICAgICAqIGRlZmF1bHRzIHRvIFRMUyAxLjEpIHNvIHdlIGhhdmUgdGhpcyBzaG9ydCBjaXJjdWl0IGV2YWx1YXRpb24gdG8gZmluZAorICAgICAqIHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBUTFMgdmVyc2lvbi4KKyAgICAqLworICAgIGlmKCh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKGJhY2tlbmQtPmN0eCwgV09MRlNTTF9UTFNWMSkgIT0gMSkgJiYKKyAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihiYWNrZW5kLT5jdHgsIFdPTEZTU0xfVExTVjFfMSkgIT0gMSkgJiYKKyAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihiYWNrZW5kLT5jdHgsIFdPTEZTU0xfVExTVjFfMikgIT0gMSkKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgJiYgKHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24oYmFja2VuZC0+Y3R4LCBXT0xGU1NMX1RMU1YxXzMpICE9IDEpCisjZW5kaWYKKyAgICAgICkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3Qgc2V0IHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24iKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisjZW5kaWYKKyAgICBicmVhazsKKyAgfQorCisgIGNpcGhlcnMgPSBTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpOworICBpZihjaXBoZXJzKSB7CisgICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGJhY2tlbmQtPmN0eCwgY2lwaGVycykpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgc2V0dGluZyBjaXBoZXIgbGlzdDogJXMiLCBjaXBoZXJzKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0lQSEVSOworICAgIH0KKyAgICBpbmZvZihkYXRhLCAiQ2lwaGVyIHNlbGVjdGlvbjogJXNcbiIsIGNpcGhlcnMpOworICB9CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAvKiBsb2FkIHRydXN0ZWQgY2FjZXJ0ICovCisgIGlmKFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpKSB7CisgICAgaWYoMSAhPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhiYWNrZW5kLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgeworICAgICAgICAvKiBGYWlsIGlmIHdlIGluc2lzdCBvbiBzdWNjZXNzZnVsbHkgdmVyaWZ5aW5nIHRoZSBzZXJ2ZXIuICovCisgICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnM6XG4iCisgICAgICAgICAgICAgICIgIENBZmlsZTogJXNcbiAgQ0FwYXRoOiAlcyIsCisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpPworICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKTogIm5vbmUiLAorICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKT8KKyAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgOiAibm9uZSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEp1c3QgY29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gc3RyaWN0IGNlcnRpZmljYXRlCisgICAgICAgICAgIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gKi8KKyAgICAgICAgaW5mb2YoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9ucywiCisgICAgICAgICAgICAgICIgY29udGludWluZyBhbnl3YXk6XG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBFdmVyeXRoaW5nIGlzIGZpbmUuICovCisgICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IHNldCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIik7CisgICAgfQorICAgIGluZm9mKGRhdGEsCisgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuIgorICAgICAgICAgICIgIENBcGF0aDogJXNcbiIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgPyBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKToKKyAgICAgICAgICAibm9uZSIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgPyBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKToKKyAgICAgICAgICAibm9uZSIpOworICB9CisKKyAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlLCBhbmQgcHJpdmF0ZSBrZXkgKi8KKyAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkgJiYgU1NMX1NFVF9PUFRJT04oa2V5KSkgeworICAgIGludCBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoU1NMX1NFVF9PUFRJT04oY2VydF90eXBlKSk7CisKKyAgICBpZihTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKGJhY2tlbmQtPmN0eCwgU1NMX1NFVF9PUFRJT04oY2VydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90eXBlKSAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHVzZSBjbGllbnQgY2VydGlmaWNhdGUgKG5vIGtleSBvciB3cm9uZyBwYXNzIgorICAgICAgICAgICAgIiBwaHJhc2U/KSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKworICAgIGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihrZXlfdHlwZSkpOworICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShiYWNrZW5kLT5jdHgsIFNTTF9TRVRfT1BUSU9OKGtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5Iik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisjZW5kaWYgLyogIU5PX0ZJTEVTWVNURU0gKi8KKworICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKKyAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQorICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCisgICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLworICBTU0xfQ1RYX3NldF92ZXJpZnkoYmFja2VuZC0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpP1NTTF9WRVJJRllfUEVFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX05PTkUsCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworI2lmZGVmIEhBVkVfU05JCisgIGlmKHNuaSkgeworICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI0OworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgc3RydWN0IGluNl9hZGRyIGFkZHI2OworI2VuZGlmCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgICAgY29ubi0+aG9zdC5uYW1lOworI2Vsc2UKKyAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisjZW5kaWYKKyAgICBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKKyAgICBpZigoaG9zdG5hbWVfbGVuIDwgVVNIUlRfTUFYKSAmJgorICAgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmYWRkcjQpKSAmJgorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICAgKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCAmYWRkcjYpKSAmJgorI2VuZGlmCisgICAgICAgKHdvbGZTU0xfQ1RYX1VzZVNOSShiYWNrZW5kLT5jdHgsIFdPTEZTU0xfU05JX0hPU1RfTkFNRSwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydClob3N0bmFtZV9sZW4pICE9IDEpKSB7CisgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogZmFpbGVkIHRvIGNvbmZpZ3VyZSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIChTTkkpICIKKyAgICAgICAgICAgICJUTFMgZXh0ZW5zaW9uXG4iKTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIC8qIGdpdmUgYXBwbGljYXRpb24gYSBjaGFuY2UgdG8gaW50ZXJmZXJlIHdpdGggU1NMIHNldCB1cC4gKi8KKyAgaWYoZGF0YS0+c2V0LnNzbC5mc3NsY3R4KSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gKCpkYXRhLT5zZXQuc3NsLmZzc2xjdHgpKGRhdGEsIGJhY2tlbmQtPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5mc3NsY3R4cCk7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2lnbmFsZWQgYnkgc3NsIGN0eCBjYWxsYmFjayIpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH0KKyNpZmRlZiBOT19GSUxFU1lTVEVNCisgIGVsc2UgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogQ2VydGlmaWNhdGVzIGNhbid0IGJlIGxvYWRlZCBiZWNhdXNlIHdvbGZTU0wgd2FzIGJ1aWx0IgorICAgICAgICAgICIgd2l0aCBcIm5vIGZpbGVzeXN0ZW1cIi4gRWl0aGVyIGRpc2FibGUgcGVlciB2ZXJpZmljYXRpb24iCisgICAgICAgICAgIiAoaW5zZWN1cmUpIG9yIGlmIHlvdSBhcmUgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsIHlvdSIKKyAgICAgICAgICAiIGNhbiBsb2FkIGNlcnRpZmljYXRlcyB2aWEgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorI2VuZGlmCisKKyAgLyogTGV0J3MgbWFrZSBhbiBTU0wgc3RydWN0dXJlICovCisgIGlmKGJhY2tlbmQtPmhhbmRsZSkKKyAgICBTU0xfZnJlZShiYWNrZW5kLT5oYW5kbGUpOworICBiYWNrZW5kLT5oYW5kbGUgPSBTU0xfbmV3KGJhY2tlbmQtPmN0eCk7CisgIGlmKCFiYWNrZW5kLT5oYW5kbGUpIHsKKyAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0IChoYW5kbGUpISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyNpZmRlZiBIQVZFX0FMUE4KKyAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKKyAgICBjaGFyIHByb3RvY29sc1sxMjhdOworICAgICpwcm90b2NvbHMgPSAnXDAnOworCisgICAgLyogd29sZlNTTCdzIEFMUE4gcHJvdG9jb2wgbmFtZSBsaXN0IGZvcm1hdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YKKyAgICAgICBwcm90b2NvbHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBwcmVmZXJlbmNlLCBlZzogImgyLGh0dHAvMS4xIiAqLworCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMikgeworICAgICAgc3RyY3B5KHByb3RvY29scyArIHN0cmxlbihwcm90b2NvbHMpLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQgIiwiKTsKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKKyAgICB9CisjZW5kaWYKKworICAgIHN0cmNweShwcm90b2NvbHMgKyBzdHJsZW4ocHJvdG9jb2xzKSwgQUxQTl9IVFRQXzFfMSk7CisgICAgaW5mb2YoZGF0YSwgIkFMUE4sIG9mZmVyaW5nICVzXG4iLCBBTFBOX0hUVFBfMV8xKTsKKworICAgIGlmKHdvbGZTU0xfVXNlQUxQTihiYWNrZW5kLT5oYW5kbGUsIHByb3RvY29scywKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXN0cmxlbihwcm90b2NvbHMpLAorICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FMUE5fQ09OVElOVUVfT05fTUlTTUFUQ0gpICE9IFNTTF9TVUNDRVNTKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgc2V0dGluZyBBTFBOIHByb3RvY29scyIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfQUxQTiAqLworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorICBpZihDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCgpKSB7CisgICAgLyogRW5zdXJlIHRoZSBDbGllbnQgUmFuZG9tIGlzIHByZXNlcnZlZC4gKi8KKyAgICB3b2xmU1NMX0tlZXBBcnJheXMoYmFja2VuZC0+aGFuZGxlKTsKKyNpZiBkZWZpbmVkKEhBVkVfU0VDUkVUX0NBTExCQUNLKSAmJiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpCisgICAgd29sZlNTTF9zZXRfdGxzMTNfc2VjcmV0X2NiKGJhY2tlbmQtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZnNzbF90bHMxM19zZWNyZXRfY2FsbGJhY2ssIE5VTEwpOworI2VuZGlmCisgIH0KKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBICovCisKKyAgLyogQ2hlY2sgaWYgdGhlcmUncyBhIGNhY2hlZCBJRCB3ZSBjYW4vc2hvdWxkIHVzZSBoZXJlISAqLworICBpZihTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpIHsKKyAgICB2b2lkICpzc2xfc2Vzc2lvbmlkID0gTlVMTDsKKworICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOworICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwsIHNvY2tpbmRleCkpIHsKKyAgICAgIC8qIHdlIGdvdCBhIHNlc3Npb24gaWQsIHVzZSBpdCEgKi8KKyAgICAgIGlmKCFTU0xfc2V0X3Nlc3Npb24oYmFja2VuZC0+aGFuZGxlLCBzc2xfc2Vzc2lvbmlkKSkgeworICAgICAgICBjaGFyIGVycm9yX2J1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTF9zZXRfc2Vzc2lvbiBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhTU0xfZ2V0X2Vycm9yKGJhY2tlbmQtPmhhbmRsZSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLworICAgICAgaW5mb2YoZGF0YSwgIlNTTCByZS11c2luZyBzZXNzaW9uIElEXG4iKTsKKyAgICB9CisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKKyAgfQorCisgIC8qIHBhc3MgdGhlIHJhdyBzb2NrZXQgaW50byB0aGUgU1NMIGxheWVyICovCisgIGlmKCFTU0xfc2V0X2ZkKGJhY2tlbmQtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9mZCBmYWlsZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMjsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKK3N0YXRpYyBDVVJMY29kZQord29sZnNzbF9jb25uZWN0X3N0ZXAyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIGludCByZXQgPSAtMTsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KKyAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOiBjb25uLT5ob3N0LmRpc3BuYW1lOworICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0gU1NMX0lTX1BST1hZKCkgPworICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfUFJPWFldIDoKKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBjb25uLT5ob3N0LmRpc3BuYW1lOworICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0KKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworI2VuZGlmCisKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gd29sZnNzbF9yZWN2OworICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSB3b2xmc3NsX3NlbmQ7CisKKyAgLyogRW5hYmxlIFJGQzI4MTggY2hlY2tzICovCisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgeworICAgIHJldCA9IHdvbGZTU0xfY2hlY2tfZG9tYWluX25hbWUoYmFja2VuZC0+aGFuZGxlLCBob3N0bmFtZSk7CisgICAgaWYocmV0ID09IFNTTF9GQUlMVVJFKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICByZXQgPSBTU0xfY29ubmVjdChiYWNrZW5kLT5oYW5kbGUpOworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorICBpZihDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCgpKSB7CisgICAgLyogSWYga2V5IGxvZ2dpbmcgaXMgZW5hYmxlZCwgd2FpdCBmb3IgdGhlIGhhbmRzaGFrZSB0byBjb21wbGV0ZSBhbmQgdGhlbgorICAgICAqIHByb2NlZWQgd2l0aCBsb2dnaW5nIHNlY3JldHMgKGZvciBUTFMgMS4yIG9yIG9sZGVyKS4KKyAgICAgKgorICAgICAqIER1cmluZyB0aGUgaGFuZHNoYWtlIChyZXQ9PS0xKSwgd29sZlNTTF93YW50X3JlYWQoKSBpcyB0cnVlIGFzIGl0IHdhaXRzCisgICAgICogZm9yIHRoZSBzZXJ2ZXIgcmVzcG9uc2UuIEF0IHRoYXQgcG9pbnQgdGhlIG1hc3RlciBzZWNyZXQgaXMgbm90IHlldAorICAgICAqIGF2YWlsYWJsZSwgc28gd2UgbXVzdCBub3QgdHJ5IHRvIHJlYWQgaXQuCisgICAgICogVG8gbG9nIHRoZSBzZWNyZXQgb24gY29tcGxldGlvbiB3aXRoIGEgaGFuZHNoYWtlIGZhaWx1cmUsIGRldGVjdAorICAgICAqIGNvbXBsZXRpb24gdmlhIHRoZSBvYnNlcnZhdGlvbiB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVhZCBvciB3cml0ZS4KKyAgICAgKiBOb3RlIHRoYXQgT3BlblNTTCBTU0xfd2FudF9yZWFkKCkgaXMgYWx3YXlzIHRydWUgaGVyZS4gSWYgd29sZlNTTCBldmVyCisgICAgICogY2hhbmdlcywgdGhlIHdvcnN0IGNhc2UgaXMgdGhhdCBubyBrZXkgaXMgbG9nZ2VkIG9uIGVycm9yLgorICAgICAqLworICAgIGlmKHJldCA9PSBTU0xfU1VDQ0VTUyB8fAorICAgICAgICghd29sZlNTTF93YW50X3JlYWQoYmFja2VuZC0+aGFuZGxlKSAmJgorICAgICAgICAhd29sZlNTTF93YW50X3dyaXRlKGJhY2tlbmQtPmhhbmRsZSkpKSB7CisgICAgICB3b2xmc3NsX2xvZ190bHMxMl9zZWNyZXQoYmFja2VuZC0+aGFuZGxlKTsKKyAgICAgIC8qIENsaWVudCBSYW5kb20gYW5kIG1hc3RlciBzZWNyZXRzIGFyZSBubyBsb25nZXIgbmVlZGVkLCBlcmFzZSB0aGVzZS4KKyAgICAgICAqIElnbm9yZWQgd2hpbGUgdGhlIGhhbmRzaGFrZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy4gKi8KKyAgICAgIHdvbGZTU0xfRnJlZUFycmF5cyhiYWNrZW5kLT5oYW5kbGUpOworICAgIH0KKyAgfQorI2VuZGlmICAvKiBPUEVOU1NMX0VYVFJBICovCisKKyAgaWYocmV0ICE9IDEpIHsKKyAgICBjaGFyIGVycm9yX2J1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgICAgaW50ICBkZXRhaWwgPSBTU0xfZ2V0X2Vycm9yKGJhY2tlbmQtPmhhbmRsZSwgcmV0KTsKKworICAgIGlmKFNTTF9FUlJPUl9XQU5UX1JFQUQgPT0gZGV0YWlsKSB7CisgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBlbHNlIGlmKFNTTF9FUlJPUl9XQU5UX1dSSVRFID09IGRldGFpbCkgeworICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gb3ZlcnJpZGUgb25seSB0aGUgQ04gbWF0Y2hpbmcuCisgICAgICogVGhpcyB3aWxsIGVuYWJsZSB0aGUgb3ZlcnJpZGUgb2YgYm90aCBtaXNtYXRjaGluZyBTdWJqZWN0QWx0TmFtZXMKKyAgICAgKiBhcyBhbHNvIG1pc21hdGNoaW5nIENOIGZpZWxkcyAqLworICAgIGVsc2UgaWYoRE9NQUlOX05BTUVfTUlTTUFUQ0ggPT0gZGV0YWlsKSB7CisjaWYgMQorICAgICAgZmFpbGYoZGF0YSwgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAorICAgICAgICAgICAgZGlzcG5hbWUpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyNlbHNlCisgICAgICAvKiBXaGVuIHRoZSB3b2xmc3NsX2NoZWNrX2RvbWFpbl9uYW1lKCkgaXMgdXNlZCBhbmQgeW91IGRlc2lyZSB0bworICAgICAgICogY29udGludWUgb24gYSBET01BSU5fTkFNRV9NSVNNQVRDSCwgaS5lLiAnY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0CisgICAgICAgKiA9PSAwJywgQ3lhU1NMIHZlcnNpb24gMi40LjAgd2lsbCBmYWlsIHdpdGggYW4gSU5DT01QTEVURV9EQVRBCisgICAgICAgKiBlcnJvci4gVGhlIG9ubHkgd2F5IHRvIGRvIHRoaXMgaXMgY3VycmVudGx5IHRvIHN3aXRjaCB0aGUKKyAgICAgICAqIFdvbGZzc2xfY2hlY2tfZG9tYWluX25hbWUoKSBpbiBhbmQgb3V0IGJhc2VkIG9uIHRoZQorICAgICAgICogJ2Nvbm4tPnNzbF9jb25maWcudmVyaWZ5aG9zdCcgdmFsdWUuICovCisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAorICAgICAgICAgICAgICBkaXNwbmFtZSk7CisgICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBhbmQvb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgZGlzcG5hbWUpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisjZW5kaWYKKyAgICB9CisjaWYgTElCV09MRlNTTF9WRVJTSU9OX0hFWCA+PSAweDAyMDA3MDAwIC8qIDIuNy4wICovCisgICAgZWxzZSBpZihBU05fTk9fU0lHTkVSX0UgPT0gZGV0YWlsKSB7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlx0Q0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvblxuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUKKyAgICAgICAgICAgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiAqLworICAgICAgICBpbmZvZihkYXRhLCAiQ0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAiY29udGludWluZyBhbnl3YXlcbiIpOworICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTF9jb25uZWN0IGZhaWxlZCB3aXRoIGVycm9yICVkOiAlcyIsIGRldGFpbCwKKyAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGRldGFpbCwgZXJyb3JfYnVmZmVyKSk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisKKyAgaWYocGlubmVkcHVia2V5KSB7CisjaWZkZWYgS0VFUF9QRUVSX0NFUlQKKyAgICBYNTA5ICp4NTA5OworICAgIGNvbnN0IGNoYXIgKng1MDlfZGVyOworICAgIGludCB4NTA5X2Rlcl9sZW47CisgICAgc3RydWN0IEN1cmxfWDUwOWNlcnRpZmljYXRlIHg1MDlfcGFyc2VkOworICAgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7CisgICAgQ1VSTGNvZGUgcmVzdWx0OworCisgICAgeDUwOSA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShiYWNrZW5kLT5oYW5kbGUpOworICAgIGlmKCF4NTA5KSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7CisgICAgfQorCisgICAgeDUwOV9kZXIgPSAoY29uc3QgY2hhciAqKXdvbGZTU0xfWDUwOV9nZXRfZGVyKHg1MDksICZ4NTA5X2Rlcl9sZW4pOworICAgIGlmKCF4NTA5X2RlcikgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHJldHJpZXZpbmcgQVNOLjEgc2VydmVyIGNlcnRpZmljYXRlIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOworICAgIH0KKworICAgIG1lbXNldCgmeDUwOV9wYXJzZWQsIDAsIHNpemVvZih4NTA5X3BhcnNlZCkpOworICAgIGlmKEN1cmxfcGFyc2VYNTA5KCZ4NTA5X3BhcnNlZCwgeDUwOV9kZXIsIHg1MDlfZGVyICsgeDUwOV9kZXJfbGVuKSkKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7CisKKyAgICBwdWJrZXkgPSAmeDUwOV9wYXJzZWQuc3ViamVjdFB1YmxpY0tleUluZm87CisgICAgaWYoIXB1YmtleS0+aGVhZGVyIHx8IHB1YmtleS0+ZW5kIDw9IHB1YmtleS0+aGVhZGVyKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBwdWJsaWMga2V5IGZyb20gc2VydmVyIGNlcnRpZmljYXRlIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOworICAgIH0KKworICAgIHJlc3VsdCA9IEN1cmxfcGluX3BlZXJfcHVia2V5KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkcHVia2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopcHVia2V5LT5oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkocHVia2V5LT5lbmQgLSBwdWJrZXktPmhlYWRlcikpOworICAgIGlmKHJlc3VsdCkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogcHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCBwaW5uZWQgcHVibGljIGtleSEiKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAiTGlicmFyeSBsYWNrcyBwaW5uaW5nIHN1cHBvcnQgYnVpbHQtaW4iKTsKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCisgIH0KKworI2lmZGVmIEhBVkVfQUxQTgorICBpZihjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbikgeworICAgIGludCByYzsKKyAgICBjaGFyICpwcm90b2NvbCA9IE5VTEw7CisgICAgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2xfbGVuID0gMDsKKworICAgIHJjID0gd29sZlNTTF9BTFBOX0dldFByb3RvY29sKGJhY2tlbmQtPmhhbmRsZSwgJnByb3RvY29sLCAmcHJvdG9jb2xfbGVuKTsKKworICAgIGlmKHJjID09IFNTTF9TVUNDRVNTKSB7CisgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgc2VydmVyIGFjY2VwdGVkIHRvIHVzZSAlLipzXG4iLCBwcm90b2NvbF9sZW4sCisgICAgICAgICAgICBwcm90b2NvbCk7CisKKyAgICAgIGlmKHByb3RvY29sX2xlbiA9PSBBTFBOX0hUVFBfMV8xX0xFTkdUSCAmJgorICAgICAgICAgIW1lbWNtcChwcm90b2NvbCwgQUxQTl9IVFRQXzFfMSwgQUxQTl9IVFRQXzFfMV9MRU5HVEgpKQorICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7CisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICAgIGVsc2UgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID49IENVUkxfSFRUUF9WRVJTSU9OXzIgJiYKKyAgICAgICAgICAgICAgcHJvdG9jb2xfbGVuID09IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4gJiYKKyAgICAgICAgICAgICAgIW1lbWNtcChwcm90b2NvbCwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKQorICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8yOworI2VuZGlmCisgICAgICBlbHNlCisgICAgICAgIGluZm9mKGRhdGEsICJBTFBOLCB1bnJlY29nbml6ZWQgcHJvdG9jb2wgJS4qc1xuIiwgcHJvdG9jb2xfbGVuLAorICAgICAgICAgICAgICBwcm90b2NvbCk7CisgICAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7CisgICAgfQorICAgIGVsc2UgaWYocmMgPT0gU1NMX0FMUE5fTk9UX0ZPVU5EKQorICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBkaWQgbm90IGFncmVlIHRvIGEgcHJvdG9jb2xcbiIpOworICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIkFMUE4sIGZhaWx1cmUgZ2V0dGluZyBwcm90b2NvbCwgZXJyb3IgJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisjZW5kaWYgLyogSEFWRV9BTFBOICovCisKKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzM7CisjaWYgKExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwOTAxMCkKKyAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHVzaW5nICVzIC8gJXNcbiIsCisgICAgICAgIHdvbGZTU0xfZ2V0X3ZlcnNpb24oYmFja2VuZC0+aGFuZGxlKSwKKyAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVyX25hbWUoYmFja2VuZC0+aGFuZGxlKSk7CisjZWxzZQorICBpbmZvZihkYXRhLCAiU1NMIGNvbm5lY3RlZFxuIik7CisjZW5kaWYKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworc3RhdGljIENVUkxjb2RlCit3b2xmc3NsX2Nvbm5lY3Rfc3RlcDMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworCisgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CisKKyAgaWYoU1NMX1NFVF9PUFRJT04ocHJpbWFyeS5zZXNzaW9uaWQpKSB7CisgICAgYm9vbCBpbmNhY2hlOworICAgIFNTTF9TRVNTSU9OICpvdXJfc3NsX3Nlc3Npb25pZDsKKyAgICB2b2lkICpvbGRfc3NsX3Nlc3Npb25pZCA9IE5VTEw7CisKKyAgICBvdXJfc3NsX3Nlc3Npb25pZCA9IFNTTF9nZXRfc2Vzc2lvbihiYWNrZW5kLT5oYW5kbGUpOworCisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7CisgICAgaW5jYWNoZSA9ICEoQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZvbGRfc3NsX3Nlc3Npb25pZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4KSk7CisgICAgaWYoaW5jYWNoZSkgeworICAgICAgaWYob2xkX3NzbF9zZXNzaW9uaWQgIT0gb3VyX3NzbF9zZXNzaW9uaWQpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIm9sZCBTU0wgc2Vzc2lvbiBJRCBpcyBzdGFsZSwgcmVtb3ZpbmdcbiIpOworICAgICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkX3NzbF9zZXNzaW9uaWQpOworICAgICAgICBpbmNhY2hlID0gRkFMU0U7CisgICAgICB9CisgICAgfQorCisgICAgaWYoIWluY2FjaGUpIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBvdXJfc3NsX3Nlc3Npb25pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIHVua25vd24gc2l6ZSAqLywgc29ja2luZGV4KTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOworICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHRvIHN0b3JlIHNzbCBzZXNzaW9uIik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CisgIH0KKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfZG9uZTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHdvbGZzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgY2hhciBlcnJvcl9idWZmZXJbV09MRlNTTF9NQVhfRVJST1JfU1pdOworICBpbnQgbWVtbGVuID0gKGxlbiA+IChzaXplX3QpSU5UX01BWCkgPyBJTlRfTUFYIDogKGludClsZW47CisgIGludCByYyA9IFNTTF93cml0ZShiYWNrZW5kLT5oYW5kbGUsIG1lbSwgbWVtbGVuKTsKKworICBpZihyYyA8IDApIHsKKyAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihiYWNrZW5kLT5oYW5kbGUsIHJjKTsKKworICAgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgIC8qIHRoZXJlJ3MgZGF0YSBwZW5kaW5nLCByZS1pbnZva2UgU1NMX3dyaXRlKCkgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHdyaXRlOiAlcywgZXJybm8gJWQiLAorICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGVycm9yX2J1ZmZlciksCisgICAgICAgICAgICBTT0NLRVJSTk8pOworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBDdXJsX3dvbGZzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworCisgIGlmKGJhY2tlbmQtPmhhbmRsZSkgeworICAgICh2b2lkKVNTTF9zaHV0ZG93bihiYWNrZW5kLT5oYW5kbGUpOworICAgIFNTTF9mcmVlKGJhY2tlbmQtPmhhbmRsZSk7CisgICAgYmFja2VuZC0+aGFuZGxlID0gTlVMTDsKKyAgfQorICBpZihiYWNrZW5kLT5jdHgpIHsKKyAgICBTU0xfQ1RYX2ZyZWUoYmFja2VuZC0+Y3R4KTsKKyAgICBiYWNrZW5kLT5jdHggPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdvbGZzc2xfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbbnVtXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBjaGFyIGVycm9yX2J1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgIGludCBidWZmc2l6ZSA9IChidWZmZXJzaXplID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWJ1ZmZlcnNpemU7CisgIGludCBucmVhZCA9IFNTTF9yZWFkKGJhY2tlbmQtPmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7CisKKyAgaWYobnJlYWQgPCAwKSB7CisgICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCBucmVhZCk7CisKKyAgICBzd2l0Y2goZXJyKSB7CisgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46IC8qIG5vIG1vcmUgZGF0YSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF9yZWFkKCkgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHJlYWQ6ICVzLCBlcnJubyAlZCIsCisgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgZXJyb3JfYnVmZmVyKSwKKyAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKKworc3RhdGljIHZvaWQgQ3VybF93b2xmc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpCit7CisgICh2b2lkKXB0cjsKKyAgLyogd29sZlNTTCByZXVzZXMgc2Vzc2lvbnMgb24gb3duLCBubyBmcmVlICovCit9CisKKworc3RhdGljIHNpemVfdCBDdXJsX3dvbGZzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwNjAwMAorICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIndvbGZTU0wvJXMiLCB3b2xmU1NMX2xpYl92ZXJzaW9uKCkpOworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1ZFUlNJT04pCisgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAid29sZlNTTC8lcyIsIFdPTEZTU0xfVkVSU0lPTik7CisjZW5kaWYKK30KKworCitzdGF0aWMgaW50IEN1cmxfd29sZnNzbF9pbml0KHZvaWQpCit7CisjaWZkZWYgT1BFTlNTTF9FWFRSQQorICBDdXJsX3Rsc19rZXlsb2dfb3BlbigpOworI2VuZGlmCisgIHJldHVybiAod29sZlNTTF9Jbml0KCkgPT0gU1NMX1NVQ0NFU1MpOworfQorCisKK3N0YXRpYyB2b2lkIEN1cmxfd29sZnNzbF9jbGVhbnVwKHZvaWQpCit7CisgIHdvbGZTU0xfQ2xlYW51cCgpOworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgQ3VybF90bHNfa2V5bG9nX2Nsb3NlKCk7CisjZW5kaWYKK30KKworCitzdGF0aWMgYm9vbCBDdXJsX3dvbGZzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbm5pbmRleCkKK3sKKyAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW2Nvbm5pbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgaWYoYmFja2VuZC0+aGFuZGxlKSAgIC8qIFNTTCBpcyBpbiB1c2UgKi8KKyAgICByZXR1cm4gKDAgIT0gU1NMX3BlbmRpbmcoYmFja2VuZC0+aGFuZGxlKSkgPyBUUlVFIDogRkFMU0U7CisgIGVsc2UKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQorICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKKyAqLworc3RhdGljIGludCBDdXJsX3dvbGZzc2xfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBpbnQgcmV0dmFsID0gMDsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKworICBpZihiYWNrZW5kLT5oYW5kbGUpIHsKKyAgICBTU0xfZnJlZShiYWNrZW5kLT5oYW5kbGUpOworICAgIGJhY2tlbmQtPmhhbmRsZSA9IE5VTEw7CisgIH0KKyAgcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUKK3dvbGZzc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIGludCB3aGF0OworCisgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KKyAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgaWYoc3NsX2Nvbm5lY3RfMSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgLyogRmluZCBvdXQgaG93IG11Y2ggbW9yZSB0aW1lIHdlJ3JlIGFsbG93ZWQgKi8KKyAgICBjb25zdCB0aW1lZGlmZl90IHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworCisgICAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAgIC8qIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGltZSBhbHJlYWR5IGlzIHVwICovCisgICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOworICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICB9CisKKyAgICByZXN1bHQgPSB3b2xmc3NsX2Nvbm5lY3Rfc3RlcDEoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgd2hpbGUoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisKKyAgICAvKiBjaGVjayBhbGxvd2VkIHRpbWUgbGVmdCAqLworICAgIGNvbnN0IHRpbWVkaWZmX3QgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgIH0KKworICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KKyAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZworICAgICAgIHx8IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7CisKKyAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOworICAgICAgaWYod2hhdCA8IDApIHsKKyAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7CisgICAgICAgIGlmKG5vbmJsb2NraW5nKSB7CisgICAgICAgICAgKmRvbmUgPSBGQUxTRTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCisgICAgfQorCisgICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmCisgICAgICogdGhpcyBjb25uZWN0aW9uIGlzIHBhcnQgb2YgYSBtdWx0aSBoYW5kbGUgYW5kIHRoaXMgbG9vcCB3b3VsZAorICAgICAqIGV4ZWN1dGUgYWdhaW4uIFRoaXMgcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8KKyAgICAgKiBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZQorICAgICAqIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkgb3IgZXBvbGwoKSB3aWxsIGFsd2F5cworICAgICAqIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgorICAgICAqLworICAgIHJlc3VsdCA9IHdvbGZzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJlc3VsdCB8fCAobm9uYmxvY2tpbmcgJiYKKyAgICAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLworCisgIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIHJlc3VsdCA9IHdvbGZzc2xfY29ubmVjdF9zdGVwMyhjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpZihzc2xfY29ubmVjdF9kb25lID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICBjb25uc3NsLT5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworICAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHdvbGZzc2xfcmVjdjsKKyAgICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSB3b2xmc3NsX3NlbmQ7CisgICAgKmRvbmUgPSBUUlVFOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IEZBTFNFOworCisgIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX3dvbGZzc2xfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCBib29sICpkb25lKQoreworICByZXR1cm4gd29sZnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX3dvbGZzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgcmVzdWx0ID0gd29sZnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIERFQlVHQVNTRVJUKGRvbmUpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfd29sZnNzbF9yYW5kb20oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW50cm9weSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgV0NfUk5HIHJuZzsKKyAgKHZvaWQpZGF0YTsKKyAgaWYod2NfSW5pdFJuZygmcm5nKSkKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIGlmKGxlbmd0aCA+IFVJTlRfTUFYKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgaWYod2NfUk5HX0dlbmVyYXRlQmxvY2soJnJuZywgZW50cm9weSwgKHVuc2lnbmVkKWxlbmd0aCkpCisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICBpZih3Y19GcmVlUm5nKCZybmcpKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF93b2xmc3NsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICp0bXAsIC8qIGlucHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdG1wbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2hhMjU2c3VtIC8qIG91dHB1dCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1bnVzZWQpCit7CisgIHdjX1NoYTI1NiBTSEEyNTZwdzsKKyAgKHZvaWQpdW51c2VkOworICB3Y19Jbml0U2hhMjU2KCZTSEEyNTZwdyk7CisgIHdjX1NoYTI1NlVwZGF0ZSgmU0hBMjU2cHcsIHRtcCwgKHdvcmQzMil0bXBsZW4pOworICB3Y19TaGEyNTZGaW5hbCgmU0hBMjU2cHcsIHNoYTI1NnN1bSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgKkN1cmxfd29sZnNzbF9nZXRfaW50ZXJuYWxzKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8gVU5VU0VEX1BBUkFNKQoreworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgICh2b2lkKWluZm87CisgIHJldHVybiBiYWNrZW5kLT5oYW5kbGU7Cit9CisKK2NvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF93b2xmc3NsID0geworICB7IENVUkxTU0xCQUNLRU5EX1dPTEZTU0wsICJXb2xmU1NMIiB9LCAvKiBpbmZvICovCisKKyNpZmRlZiBLRUVQX1BFRVJfQ0VSVAorICBTU0xTVVBQX1BJTk5FRFBVQktFWSB8CisjZW5kaWYKKyAgU1NMU1VQUF9TU0xfQ1RYLAorCisgIHNpemVvZihzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSksCisKKyAgQ3VybF93b2xmc3NsX2luaXQsICAgICAgICAgICAgICAgIC8qIGluaXQgKi8KKyAgQ3VybF93b2xmc3NsX2NsZWFudXAsICAgICAgICAgICAgIC8qIGNsZWFudXAgKi8KKyAgQ3VybF93b2xmc3NsX3ZlcnNpb24sICAgICAgICAgICAgIC8qIHZlcnNpb24gKi8KKyAgQ3VybF9ub25lX2NoZWNrX2N4biwgICAgICAgICAgICAgLyogY2hlY2tfY3huICovCisgIEN1cmxfd29sZnNzbF9zaHV0ZG93biwgICAgICAgICAgICAvKiBzaHV0ZG93biAqLworICBDdXJsX3dvbGZzc2xfZGF0YV9wZW5kaW5nLCAgICAgICAgLyogZGF0YV9wZW5kaW5nICovCisgIEN1cmxfd29sZnNzbF9yYW5kb20sICAgICAgICAgICAgICAvKiByYW5kb20gKi8KKyAgQ3VybF9ub25lX2NlcnRfc3RhdHVzX3JlcXVlc3QsICAgLyogY2VydF9zdGF0dXNfcmVxdWVzdCAqLworICBDdXJsX3dvbGZzc2xfY29ubmVjdCwgICAgICAgICAgICAgLyogY29ubmVjdCAqLworICBDdXJsX3dvbGZzc2xfY29ubmVjdF9ub25ibG9ja2luZywgLyogY29ubmVjdF9ub25ibG9ja2luZyAqLworICBDdXJsX3dvbGZzc2xfZ2V0X2ludGVybmFscywgICAgICAgLyogZ2V0X2ludGVybmFscyAqLworICBDdXJsX3dvbGZzc2xfY2xvc2UsICAgICAgICAgICAgICAgLyogY2xvc2Vfb25lICovCisgIEN1cmxfbm9uZV9jbG9zZV9hbGwsICAgICAgICAgICAgIC8qIGNsb3NlX2FsbCAqLworICBDdXJsX3dvbGZzc2xfc2Vzc2lvbl9mcmVlLCAgICAgICAgLyogc2Vzc2lvbl9mcmVlICovCisgIEN1cmxfbm9uZV9zZXRfZW5naW5lLCAgICAgICAgICAgIC8qIHNldF9lbmdpbmUgKi8KKyAgQ3VybF9ub25lX3NldF9lbmdpbmVfZGVmYXVsdCwgICAgLyogc2V0X2VuZ2luZV9kZWZhdWx0ICovCisgIEN1cmxfbm9uZV9lbmdpbmVzX2xpc3QsICAgICAgICAgIC8qIGVuZ2luZXNfbGlzdCAqLworICBDdXJsX25vbmVfZmFsc2Vfc3RhcnQsICAgICAgICAgICAvKiBmYWxzZV9zdGFydCAqLworICBDdXJsX25vbmVfbWQ1c3VtLCAgICAgICAgICAgICAgICAvKiBtZDVzdW0gKi8KKyAgQ3VybF93b2xmc3NsX3NoYTI1NnN1bSAgICAgICAgICAgIC8qIHNoYTI1NnN1bSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvd29sZnNzbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTY3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1dPTEZTU0xfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9XT0xGU1NMX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfV09MRlNTTAorCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX3dvbGZzc2w7CisKKyNlbmRpZiAvKiBVU0VfV09MRlNTTCAqLworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1dPTEZTU0xfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvd2Fybmxlc3MuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3dhcm5sZXNzLmgKaW5kZXggZWE0YzQzOS4uYWI3OGY5NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvd2Fybmxlc3MuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi93YXJubGVzcy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC05NCwxOSArOTQsNiBAQAogCiB1bnNpZ25lZCBzaG9ydCBjdXJseF9udG9ocyh1bnNpZ25lZCBzaG9ydCB1c251bSk7CiAKLSNpZm5kZWYgQlVJTERJTkdfV0FSTkxFU1NfQwotIyAgdW5kZWYgIEZEX0lTU0VUCi0jICBkZWZpbmUgRkRfSVNTRVQoYSxiKSBjdXJseF9GRF9JU1NFVCgoYSksKGIpKQotIyAgdW5kZWYgIEZEX1NFVAotIyAgZGVmaW5lIEZEX1NFVChhLGIpICAgY3VybHhfRkRfU0VUKChhKSwoYikpCi0jICB1bmRlZiAgRkRfWkVSTwotIyAgZGVmaW5lIEZEX1pFUk8oYSkgICAgY3VybHhfRkRfWkVSTygoYSkpCi0jICB1bmRlZiAgaHRvbnMKLSMgIGRlZmluZSBodG9ucyhhKSAgICAgIGN1cmx4X2h0b25zKChhKSkKLSMgIHVuZGVmICBudG9ocwotIyAgZGVmaW5lIG50b2hzKGEpICAgICAgY3VybHhfbnRvaHMoKGEpKQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0lOVEVMX0NPTVBJTEVSICYmIF9fdW5peF9fICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9XQVJOTEVTU19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIveDUwOWFzbjEuYwppbmRleCAwYzEyNTZiLi41Mjc0N2Q1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3g1MDlhc24xLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKICNpZiBkZWZpbmVkKFVTRV9HU0tJVCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9DWUFTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQorICAgIGRlZmluZWQoVVNFX1dPTEZTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQogCiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVkZSAidXJsZGF0YS5oIgpAQCAtNDQsNyArNDQsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgICAgICAgY25PSURbXSA9ICIyLjUuNC4zIjsgICAgLyogQ29tbW9uIG5hbWUuICovCiBzdGF0aWMgY29uc3QgY2hhciAgICAgICBzYW5PSURbXSA9ICIyLjUuMjkuMTciOyAvKiBTdWJqZWN0IGFsdGVybmF0aXZlIG5hbWUuICovCiAKLXN0YXRpYyBjb25zdCBjdXJsX09JRCAgIE9JRHRhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfT0lEIE9JRHRhYmxlW10gPSB7CiAgIHsgIjEuMi44NDAuMTAwNDAuNC4xIiwgICAgICAgICJkc2EiIH0sCiAgIHsgIjEuMi44NDAuMTAwNDAuNC4zIiwgICAgICAgICJkc2Etd2l0aC1zaGExIiB9LAogICB7ICIxLjIuODQwLjEwMDQ1LjIuMSIsICAgICAgICAiZWNQdWJsaWNLZXkiIH0sCkBAIC0xMDMsMTYgKzEwMywxNiBAQAogICogUGxlYXNlIG5vdGUgdGhlcmUgaXMgbm8gcHJldGVudGlvbiBoZXJlIHRvIHJld3JpdGUgYSBmdWxsIFNTTCBsaWJyYXJ5LgogICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICpnZXRBU04xRWxlbWVudChjdXJsX2FzbjFFbGVtZW50ICplbGVtLAorc3RhdGljIGNvbnN0IGNoYXIgKmdldEFTTjFFbGVtZW50KHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICplbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogICBXQVJOX1VOVVNFRF9SRVNVTFQ7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpnZXRBU04xRWxlbWVudChjdXJsX2FzbjFFbGVtZW50ICplbGVtLAorc3RhdGljIGNvbnN0IGNoYXIgKmdldEFTTjFFbGVtZW50KHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICplbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICB1bnNpZ25lZCBjaGFyIGI7CiAgIHVuc2lnbmVkIGxvbmcgbGVuOwotICBjdXJsX2FzbjFFbGVtZW50IGxlbGVtOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBsZWxlbTsKIAogICAvKiBHZXQgYSBzaW5nbGUgQVNOLjEgZWxlbWVudCBpbnRvIGBlbGVtJywgcGFyc2UgQVNOLjEgc3RyaW5nIGF0IGBiZWcnCiAgICAgIGVuZGluZyBhdCBgZW5kJy4KQEAgLTE3Niw5ICsxNzYsOSBAQAogICogU2VhcmNoIHRoZSBudWxsIHRlcm1pbmF0ZWQgT0lEIG9yIE9JRCBpZGVudGlmaWVyIGluIGxvY2FsIHRhYmxlLgogICogUmV0dXJuIHRoZSB0YWJsZSBlbnRyeSBwb2ludGVyIG9yIE5VTEwgaWYgbm90IGZvdW5kLgogICovCi1zdGF0aWMgY29uc3QgY3VybF9PSUQgKiBzZWFyY2hPSUQoY29uc3QgY2hhciAqb2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX09JRCAqc2VhcmNoT0lEKGNvbnN0IGNoYXIgKm9pZCkKIHsKLSAgY29uc3QgY3VybF9PSUQgKm9wOworICBjb25zdCBzdHJ1Y3QgQ3VybF9PSUQgKm9wOwogICBmb3Iob3AgPSBPSUR0YWJsZTsgb3AtPm51bW9pZDsgb3ArKykKICAgICBpZighc3RyY21wKG9wLT5udW1vaWQsIG9pZCkgfHwgc3RyY2FzZWNvbXBhcmUob3AtPnRleHRvaWQsIG9pZCkpCiAgICAgICByZXR1cm4gb3A7CkBAIC00NDUsNyArNDQ1LDcgQEAKICAgICAgICAgYnVmW2J1Zmxlbl0gPSAnXDAnOwogCiAgICAgICAgIGlmKHN5bWJvbGljKSB7Ci0gICAgICAgICAgY29uc3QgY3VybF9PSUQgKm9wID0gc2VhcmNoT0lEKGJ1Zik7CisgICAgICAgICAgY29uc3Qgc3RydWN0IEN1cmxfT0lEICpvcCA9IHNlYXJjaE9JRChidWYpOwogICAgICAgICAgIGlmKG9wKSB7CiAgICAgICAgICAgICBmcmVlKGJ1Zik7CiAgICAgICAgICAgICBidWYgPSBzdHJkdXAob3AtPnRleHRvaWQpOwpAQCAtNTY1LDcgKzU2NSw3IEBACiAgKiBDb252ZXJ0IGFuIEFTTi4xIGVsZW1lbnQgdG8gYSBwcmludGFibGUgc3RyaW5nLgogICogUmV0dXJuIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3Vycy4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKkFTTjF0b3N0cihjdXJsX2FzbjFFbGVtZW50ICplbGVtLCBpbnQgdHlwZSkKK3N0YXRpYyBjb25zdCBjaGFyICpBU04xdG9zdHIoc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sIGludCB0eXBlKQogewogICBpZihlbGVtLT5jb25zdHJ1Y3RlZCkKICAgICByZXR1cm4gTlVMTDsgLyogTm8gY29udmVyc2lvbiBvZiBzdHJ1Y3R1cmVkIGVsZW1lbnRzLiAqLwpAQCAtNjA5LDEyICs2MDksMTIgQEAKICAqIEFTQ0lJIGVuY29kZSBkaXN0aW5ndWlzaGVkIG5hbWUgYXQgYGRuJyBpbnRvIHRoZSBgYnVmbGVuJy1zaXplZCBidWZmZXIgYXQKICAqIGBidWYnLiAgUmV0dXJuIHRoZSB0b3RhbCBzdHJpbmcgbGVuZ3RoLCBldmVuIGlmIGxhcmdlciB0aGFuIGBidWZsZW4nLgogICovCi1zdGF0aWMgc3NpemVfdCBlbmNvZGVETihjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGN1cmxfYXNuMUVsZW1lbnQgKmRuKQorc3RhdGljIHNzaXplX3QgZW5jb2RlRE4oY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZG4pCiB7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgcmRuOwotICBjdXJsX2FzbjFFbGVtZW50IGF0djsKLSAgY3VybF9hc24xRWxlbWVudCBvaWQ7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgdmFsdWU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHJkbjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgYXR2OworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBvaWQ7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHZhbHVlOwogICBzaXplX3QgbCA9IDA7CiAgIGNvbnN0IGNoYXIgKnAxOwogICBjb25zdCBjaGFyICpwMjsKQEAgLTY4Myw3ICs2ODMsNyBAQAogICogQ29udmVydCBhbiBBU04uMSBkaXN0aW5ndWlzaGVkIG5hbWUgaW50byBhIHByaW50YWJsZSBzdHJpbmcuCiAgKiBSZXR1cm4gdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJzLgogICovCi1zdGF0aWMgY29uc3QgY2hhciAqRE50b3N0cihjdXJsX2FzbjFFbGVtZW50ICpkbikKK3N0YXRpYyBjb25zdCBjaGFyICpETnRvc3RyKHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpkbikKIHsKICAgY2hhciAqYnVmID0gTlVMTDsKICAgc3NpemVfdCBidWZsZW4gPSBlbmNvZGVETihOVUxMLCAwLCBkbik7CkBAIC03MDMsMTEgKzcwMywxMSBAQAogICogU3ludGF4IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSB0aGUgU1NMIGJhY2tlbmQuCiAgKiBTZWUgUkZDIDUyODAuCiAgKi8KLWludCBDdXJsX3BhcnNlWDUwOShjdXJsX1g1MDljZXJ0aWZpY2F0ZSAqY2VydCwKK2ludCBDdXJsX3BhcnNlWDUwOShzdHJ1Y3QgQ3VybF9YNTA5Y2VydGlmaWNhdGUgKmNlcnQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpCiB7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgZWxlbTsKLSAgY3VybF9hc24xRWxlbWVudCB0YnNDZXJ0aWZpY2F0ZTsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgZWxlbTsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgdGJzQ2VydGlmaWNhdGU7CiAgIGNvbnN0IGNoYXIgKmNjcDsKICAgc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdFZlcnNpb24gPSAwOyAgLyogdjEuICovCiAKQEAgLTgzNSwxMCArODM1LDEwIEBACiAgIHJldHVybiBpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqZHVtcEFsZ28oY3VybF9hc24xRWxlbWVudCAqcGFyYW0sCitzdGF0aWMgY29uc3QgY2hhciAqZHVtcEFsZ28oc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgKnBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewotICBjdXJsX2FzbjFFbGVtZW50IG9pZDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgb2lkOwogCiAgIC8qIEdldCBhbGdvcml0aG0gcGFyYW1ldGVycyBhbmQgcmV0dXJuIGFsZ29yaXRobSBuYW1lLiAqLwogCkBAIC04NTUsNyArODU1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZG9fcHVia2V5X2ZpZWxkKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjZXJ0bnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjdXJsX2FzbjFFbGVtZW50ICplbGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZWxlbSkKIHsKICAgY29uc3QgY2hhciAqb3V0cHV0OwogCkBAIC04NzIsMTEgKzg3MiwxMSBAQAogfQogCiBzdGF0aWMgdm9pZCBkb19wdWJrZXkoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgaW50IGNlcnRudW0sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWxnbywgY3VybF9hc24xRWxlbWVudCAqcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgY3VybF9hc24xRWxlbWVudCAqcHVia2V5KQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFsZ28sIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqcHVia2V5KQogewotICBjdXJsX2FzbjFFbGVtZW50IGVsZW07Ci0gIGN1cmxfYXNuMUVsZW1lbnQgcGs7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGVsZW07CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHBrOwogICBjb25zdCBjaGFyICpwOwogCiAgIC8qIEdlbmVyYXRlIGFsbCBpbmZvcm1hdGlvbiByZWNvcmRzIGZvciB0aGUgcHVibGljIGtleS4gKi8KQEAgLTk1MCw5ICs5NTAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQpCiB7Ci0gIGN1cmxfWDUwOWNlcnRpZmljYXRlIGNlcnQ7CisgIHN0cnVjdCBDdXJsX1g1MDljZXJ0aWZpY2F0ZSBjZXJ0OwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgY3VybF9hc24xRWxlbWVudCBwYXJhbTsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgcGFyYW07CiAgIGNvbnN0IGNoYXIgKmNjcDsKICAgY2hhciAqY3AxOwogICBzaXplX3QgY2wxOwpAQCAtMTEwNCwxNCArMTEwNCwxNCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLSNlbmRpZiAvKiBVU0VfR1NLSVQgb3IgVVNFX05TUyBvciBVU0VfR05VVExTIG9yIFVTRV9DWUFTU0wgb3IgVVNFX1NDSEFOTkVMICovCisjZW5kaWYgLyogVVNFX0dTS0lUIG9yIFVTRV9OU1Mgb3IgVVNFX0dOVVRMUyBvciBVU0VfV09MRlNTTCBvciBVU0VfU0NIQU5ORUwgKi8KIAogI2lmIGRlZmluZWQoVVNFX0dTS0lUKQogCiBzdGF0aWMgY29uc3QgY2hhciAqY2hlY2tPSUQoY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkKQogewotICBjdXJsX2FzbjFFbGVtZW50IGU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGU7CiAgIGNvbnN0IGNoYXIgKmNjcDsKICAgY29uc3QgY2hhciAqcDsKICAgYm9vbCBtYXRjaGVkOwpAQCAtMTEzNiwyMiArMTEzNiwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgY3VybF9YNTA5Y2VydGlmaWNhdGUgY2VydDsKLSAgY3VybF9hc24xRWxlbWVudCBkbjsKLSAgY3VybF9hc24xRWxlbWVudCBlbGVtOwotICBjdXJsX2FzbjFFbGVtZW50IGV4dDsKLSAgY3VybF9hc24xRWxlbWVudCBuYW1lOworICBzdHJ1Y3QgQ3VybF9YNTA5Y2VydGlmaWNhdGUgY2VydDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgZG47CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGVsZW07CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGV4dDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgbmFtZTsKICAgY29uc3QgY2hhciAqcDsKICAgY29uc3QgY2hhciAqcTsKICAgY2hhciAqZG5zbmFtZTsKICAgaW50IG1hdGNoZWQgPSAtMTsKICAgc2l6ZV90IGFkZHJsZW4gPSAoc2l6ZV90KSAtMTsKICAgc3NpemVfdCBsZW47Ci0gIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZTsKLSAgY29uc3QgY2hhciAqIGNvbnN0IGRpc3BuYW1lID0gU1NMX0lTX1BST1hZKCk/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QuZGlzcG5hbWU7CisgIGNvbnN0IGNoYXIgKmNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCk/CisgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOiBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKmNvbnN0IGRpc3BuYW1lID0gU1NMX0lTX1BST1hZKCk/CisgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZTsKICNpZmRlZiBFTkFCTEVfSVBWNgogICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKICNlbHNlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIveDUwOWFzbjEuaAppbmRleCBjZTQwMjk3Li4wYjdmYjg4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3g1MDlhc24xLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKICNpZiBkZWZpbmVkKFVTRV9HU0tJVCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9DWUFTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQorICAgIGRlZmluZWQoVVNFX1dPTEZTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogCkBAIC03OSw1NiArNzksNTUgQEAKICAqLwogCiAvKiBBU04uMSBwYXJzZWQgZWxlbWVudC4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgY2hhciAqICBoZWFkZXI7ICAgICAgICAgLyogUG9pbnRlciB0byBoZWFkZXIgYnl0ZS4gKi8KLSAgY29uc3QgY2hhciAqICBiZWc7ICAgICAgICAgICAgLyogUG9pbnRlciB0byBlbGVtZW50IGRhdGEuICovCi0gIGNvbnN0IGNoYXIgKiAgZW5kOyAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gMXN0IGJ5dGUgYWZ0ZXIgZWxlbWVudC4gKi8KLSAgdW5zaWduZWQgY2hhciBjbGFzczsgICAgICAgICAgLyogQVNOLjEgZWxlbWVudCBjbGFzcy4gKi8KLSAgdW5zaWduZWQgY2hhciB0YWc7ICAgICAgICAgICAgLyogQVNOLjEgZWxlbWVudCB0YWcuICovCi0gIGJvb2wgICAgICAgICAgY29uc3RydWN0ZWQ7ICAgIC8qIEVsZW1lbnQgaXMgY29uc3RydWN0ZWQuICovCi19ICBjdXJsX2FzbjFFbGVtZW50Oworc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgeworICBjb25zdCBjaGFyICpoZWFkZXI7ICAgICAgICAgLyogUG9pbnRlciB0byBoZWFkZXIgYnl0ZS4gKi8KKyAgY29uc3QgY2hhciAqYmVnOyAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gZWxlbWVudCBkYXRhLiAqLworICBjb25zdCBjaGFyICplbmQ7ICAgICAgICAgICAgLyogUG9pbnRlciB0byAxc3QgYnl0ZSBhZnRlciBlbGVtZW50LiAqLworICB1bnNpZ25lZCBjaGFyIGNsYXNzOyAgICAgICAgLyogQVNOLjEgZWxlbWVudCBjbGFzcy4gKi8KKyAgdW5zaWduZWQgY2hhciB0YWc7ICAgICAgICAgIC8qIEFTTi4xIGVsZW1lbnQgdGFnLiAqLworICBib29sICAgICAgICAgIGNvbnN0cnVjdGVkOyAgLyogRWxlbWVudCBpcyBjb25zdHJ1Y3RlZC4gKi8KK307CiAKIAogLyogQVNOLjEgT0lEIHRhYmxlIGVudHJ5LiAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBjaGFyICogIG51bW9pZDsgICAgICAgICAvKiBEb3R0ZWQtbnVtZXJpYyBPSUQuICovCi0gIGNvbnN0IGNoYXIgKiAgdGV4dG9pZDsgICAgICAgIC8qIE9JRCBuYW1lLiAqLwotfSAgY3VybF9PSUQ7CitzdHJ1Y3QgQ3VybF9PSUQgeworICBjb25zdCBjaGFyICpudW1vaWQ7ICAvKiBEb3R0ZWQtbnVtZXJpYyBPSUQuICovCisgIGNvbnN0IGNoYXIgKnRleHRvaWQ7IC8qIE9JRCBuYW1lLiAqLworfTsKIAogCiAvKiBYNTA5IGNlcnRpZmljYXRlOiBSRkMgNTI4MC4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIGNlcnRpZmljYXRlOwotICBjdXJsX2FzbjFFbGVtZW50ICAgICAgdmVyc2lvbjsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHNlcmlhbE51bWJlcjsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHNpZ25hdHVyZUFsZ29yaXRobTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHNpZ25hdHVyZTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIGlzc3VlcjsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIG5vdEJlZm9yZTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIG5vdEFmdGVyOwotICBjdXJsX2FzbjFFbGVtZW50ICAgICAgc3ViamVjdDsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHN1YmplY3RQdWJsaWNLZXlJbmZvOwotICBjdXJsX2FzbjFFbGVtZW50ICAgICAgc3ViamVjdFB1YmxpY0tleUFsZ29yaXRobTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHN1YmplY3RQdWJsaWNLZXk7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgICAgICBpc3N1ZXJVbmlxdWVJRDsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHN1YmplY3RVbmlxdWVJRDsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIGV4dGVuc2lvbnM7Ci19ICBjdXJsX1g1MDljZXJ0aWZpY2F0ZTsKLQorc3RydWN0IEN1cmxfWDUwOWNlcnRpZmljYXRlIHsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgY2VydGlmaWNhdGU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHZlcnNpb247CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHNlcmlhbE51bWJlcjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgc2lnbmF0dXJlQWxnb3JpdGhtOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBzaWduYXR1cmU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGlzc3VlcjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgbm90QmVmb3JlOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBub3RBZnRlcjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgc3ViamVjdDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgc3ViamVjdFB1YmxpY0tleUluZm87CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHN1YmplY3RQdWJsaWNLZXlBbGdvcml0aG07CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHN1YmplY3RQdWJsaWNLZXk7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGlzc3VlclVuaXF1ZUlEOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBzdWJqZWN0VW5pcXVlSUQ7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGV4dGVuc2lvbnM7Cit9OwogCiAvKgogICogUHJvdG90eXBlcy4KICAqLwogCi1jb25zdCBjaGFyICpDdXJsX2dldEFTTjFFbGVtZW50KGN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCk7Ci1jb25zdCBjaGFyICpDdXJsX0FTTjF0b3N0cihjdXJsX2FzbjFFbGVtZW50ICplbGVtLCBpbnQgdHlwZSk7Ci1jb25zdCBjaGFyICpDdXJsX0ROdG9zdHIoY3VybF9hc24xRWxlbWVudCAqZG4pOwotaW50IEN1cmxfcGFyc2VYNTA5KGN1cmxfWDUwOWNlcnRpZmljYXRlICpjZXJ0LAorY29uc3QgY2hhciAqQ3VybF9nZXRBU04xRWxlbWVudChzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpOworY29uc3QgY2hhciAqQ3VybF9BU04xdG9zdHIoc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sIGludCB0eXBlKTsKK2NvbnN0IGNoYXIgKkN1cmxfRE50b3N0cihzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZG4pOworaW50IEN1cmxfcGFyc2VYNTA5KHN0cnVjdCBDdXJsX1g1MDljZXJ0aWZpY2F0ZSAqY2VydCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCk7CiBDVVJMY29kZSBDdXJsX2V4dHJhY3RfY2VydGluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgY2VydG51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCk7CiBDVVJMY29kZSBDdXJsX3ZlcmlmeWhvc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKTsKLSNlbmRpZiAvKiBVU0VfR1NLSVQgb3IgVVNFX05TUyBvciBVU0VfR05VVExTIG9yIFVTRV9DWUFTU0wgb3IgVVNFX1NDSEFOTkVMICovCisjZW5kaWYgLyogVVNFX0dTS0lUIG9yIFVTRV9OU1Mgb3IgVVNFX0dOVVRMUyBvciBVU0VfV09MRlNTTCBvciBVU0VfU0NIQU5ORUwgKi8KICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9YNTA5QVNOMV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21leHBhdC9Db25maWd1cmVDaGVja3MuY21ha2UgYi9VdGlsaXRpZXMvY21leHBhdC9Db25maWd1cmVDaGVja3MuY21ha2UKaW5kZXggZDg1ZTQ4Yy4uNGRhMjUyYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtZXhwYXQvQ29uZmlndXJlQ2hlY2tzLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWV4cGF0L0NvbmZpZ3VyZUNoZWNrcy5jbWFrZQpAQCAtNDQsMTQgKzQ0LDYgQEAKICAgICBzZXQoQllURU9SREVSIDEyMzQpCiBlbmRpZihXT1JEU19CSUdFTkRJQU4pCiAKLWlmKEhBVkVfU1lTX1RZUEVTX0gpCi0gICAgY2hlY2tfc3ltYm9sX2V4aXN0cygib2ZmX3QiICJzeXMvdHlwZXMuaCIgT0ZGX1QpCi0gICAgY2hlY2tfc3ltYm9sX2V4aXN0cygic2l6ZV90IiAic3lzL3R5cGVzLmgiIFNJWkVfVCkKLWVsc2UoSEFWRV9TWVNfVFlQRVNfSCkKLSAgICBzZXQoT0ZGX1QgImxvbmciKQotICAgIHNldChTSVpFX1QgInVuc2lnbmVkIikKLWVuZGlmKEhBVkVfU1lTX1RZUEVTX0gpCi0KIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIKICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLyogZm9yIE5VTEwgKi8KICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPiAgLyogZm9yIHN5c2NhbGwgKi8KQEAgLTYxLDYgKzUzLDMgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IgogICAgIEhBVkVfU1lTQ0FMTF9HRVRSQU5ET00pCi0KLWNoZWNrX2NfY29tcGlsZXJfZmxhZygiLWZuby1zdHJpY3QtYWxpYXNpbmciIEZMQUdfTk9fU1RSSUNUX0FMSUFTSU5HKQotY2hlY2tfY19jb21waWxlcl9mbGFnKCItZnZpc2liaWxpdHk9aGlkZGVuIiBGTEFHX1ZJU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21leHBhdC9leHBhdF9jb25maWcuaC5jbWFrZSBiL1V0aWxpdGllcy9jbWV4cGF0L2V4cGF0X2NvbmZpZy5oLmNtYWtlCmluZGV4IDc5NWI2MDcuLmU5MTg2MWUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWV4cGF0L2V4cGF0X2NvbmZpZy5oLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWV4cGF0L2V4cGF0X2NvbmZpZy5oLmNtYWtlCkBAIC04Niw5ICs4NiwzIEBACiAjaWZkZWYgX01TQ19WRVIKICMgIGRlZmluZSBfX2Z1bmNfXyBfX0ZVTkNUSU9OX18KICNlbmRpZgotCi0vKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwotI2NtYWtlZGVmaW5lIG9mZl90IEBPRkZfVEAKLQotLyogRGVmaW5lIHRvIGB1bnNpZ25lZCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0jY21ha2VkZWZpbmUgc2l6ZV90IEBTSVpFX1RACmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21leHBhdC9saWIvc2lwaGFzaC5oIGIvVXRpbGl0aWVzL2NtZXhwYXQvbGliL3NpcGhhc2guaAppbmRleCA5NWY3OGY4Li5hMzM1ZWMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21leHBhdC9saWIvc2lwaGFzaC5oCisrKyBiL1V0aWxpdGllcy9jbWV4cGF0L2xpYi9zaXBoYXNoLmgKQEAgLTk3LDcgKzk3LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBzaXplX3QgKi8KIAotI2luY2x1ZGUgPGNtX2t3aW1sLmg+CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAogI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UNjRfVAogIyBkZWZpbmUgdWludDY0X3QgS1dJTUxfSU5UX3VpbnQ2NF90CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAppbmRleCAyNmE5YWE5Li5iZmNhZjMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKQEAgLTEsOSArMSw0MyBAQAorIworSUYoMCkgIyBDTWFrZSBoYW5kbGVzIHBvbGljeSBzZXR0aW5ncyBpbiBpdHMgb3duIGJ1aWxkLgorQ01BS0VfTUlOSU1VTV9SRVFVSVJFRChWRVJTSU9OIDIuOC4xMiBGQVRBTF9FUlJPUikKK2lmKFBPTElDWSBDTVAwMDc0KQorICBjbWFrZV9wb2xpY3koU0VUIENNUDAwNzQgTkVXKSAjMy4xMi4wIGBmaW5kX3BhY2thZ2UoKWBgIHVzZXMgYGA8UGFja2FnZU5hbWU+X1JPT1RgYCB2YXJpYWJsZXMuCitlbmRpZigpCitFTkRJRigpCisjCiBQUk9KRUNUKGxpYmFyY2hpdmUgQykKICMKIFNFVChDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2J1aWxkL2NtYWtlIikKIGlmKE5PVCBDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkpCiAgIHNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtsaWJhcmNoaXZlX0JJTkFSWV9ESVJ9L2JpbikKIGVuZGlmKCkKK0lGKDApICMgQ01ha2UgaGFuZGxlcyBidWlsZCB0eXBlIHNlbGVjdGlvbiBpbiBpdHMgb3duIGJ1aWxkLgorIworIyBTZXQgdGhlIEJ1aWxkIHR5cGUgZm9yIG1ha2UgYmFzZWQgZ2VuZXJhdG9ycy4KKyMgWW91IGNhbiBjaG9vc2UgZm9sbG93aW5nIHR5cGVzOgorIyAgIERlYnVnICAgICAgICAgIDogRGVidWcgYnVpbGQKKyMgICBSZWxlYXNlICAgICAgICA6IFJlbGVhc2UgYnVpbGQKKyMgICBSZWxXaXRoRGViSW5mbyA6IFJlbGVhc2UgYnVpbGQgd2l0aCBEZWJ1ZyBJbmZvCisjICAgTWluU2l6ZVJlbCAgICAgOiBSZWxlYXNlIE1pbiBTaXplIGJ1aWxkCitJRihOT1QgQ01BS0VfQlVJTERfVFlQRSkKKyAgU0VUKENNQUtFX0JVSUxEX1RZUEUgIlJlbGVhc2UiIENBQ0hFIFNUUklORyAiQnVpbGQgVHlwZSIgRk9SQ0UpCitFTkRJRihOT1QgQ01BS0VfQlVJTERfVFlQRSkKKyMgU2V0IGEgdmFsdWUgdHlwZSB0byBwcm9wZXJseSBkaXNwbGF5IENNQUtFX0JVSUxEX1RZUEUgb24gR1VJIGlmIHRoZQorIyB2YWx1ZSB0eXBlIGlzICJVTklOSVRJQUxJWkVEIi4KK0dFVF9QUk9QRVJUWShjYWNoZWRfdHlwZSBDQUNIRSBDTUFLRV9CVUlMRF9UWVBFIFBST1BFUlRZIFRZUEUpCitJRigiJHtjYWNoZWRfdHlwZX0iIFNUUkVRVUFMICJVTklOSVRJQUxJWkVEIikKKyAgU0VUKENNQUtFX0JVSUxEX1RZUEUgIiR7Q01BS0VfQlVJTERfVFlQRX0iIENBQ0hFIFNUUklORyAiQnVpbGQgVHlwZSIgRk9SQ0UpCitFTkRJRigiJHtjYWNoZWRfdHlwZX0iIFNUUkVRVUFMICJVTklOSVRJQUxJWkVEIikKKyMgQ2hlY2sgdGhlIEJ1aWxkIFR5cGUuCitJRihOT1QgIiR7Q01BS0VfQlVJTERfVFlQRX0iCisgICAgICAgTUFUQ0hFUyAiXihEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpXCQiKQorICBNRVNTQUdFKEZBVEFMX0VSUk9SCisgICAgICAgICAgIlVua25vd24ga2V5d29yZCBmb3IgQ01BS0VfQlVJTERfVFlQRTogJHtDTUFLRV9CVUlMRF9UWVBFfVxuIgorICAgICAgICAgICJBY2NlcHRhYmxlIGtleXdvcmRzOiBEZWJ1ZyxSZWxlYXNlLFJlbFdpdGhEZWJJbmZvLE1pblNpemVSZWwiKQorRU5ESUYoTk9UICIke0NNQUtFX0JVSUxEX1RZUEV9IgorICAgICAgICAgIE1BVENIRVMgIl4oRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKVwkIikKK0VORElGKCkKIAogIyBPbiBNYWNPUywgcHJlZmVyIE1hY1BvcnRzIGxpYnJhcmllcyB0byBzeXN0ZW0gbGlicmFyaWVzLgogIyBJIGhhdmVuJ3QgY29tZSB1cCB3aXRoIGEgY29tcGVsbGluZyBhcmd1bWVudCBmb3IgdGhpcyB0byBiZSBjb25kaXRpb25hbC4KQEAgLTY2LDE0ICsxMDAsMTIyIEBACiAgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC13b2ZmYWxsIikKIEVORElGKCkKIAorSUYoMCkgIyBDTWFrZSBkb2VzIG5vdCBuZWVkIGZsYWdzIHNwZWNpZmljIHRvIGxpYmFyY2hpdmUgdXBzdHJlYW0gZGV2ZWxvcG1lbnQuCitpZiAoQ01BS0VfQlVJTERfVFlQRSBTVFJFUVVBTCAiRGVidWciKQorICBPUFRJT04oRU5BQkxFX1dFUlJPUiAiVHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzIC0gZGVmYXVsdCBpcyBPTiBmb3IgRGVidWcsIE9GRiBvdGhlcndpc2UuIiBPTikKK2Vsc2UgKCkKKyAgT1BUSU9OKEVOQUJMRV9XRVJST1IgIlRyZWF0IHdhcm5pbmdzIGFzIGVycm9ycyAtIGRlZmF1bHQgaXMgT04gZm9yIERlYnVnLCBPRkYgb3RoZXJ3aXNlLiIgT0ZGKQorZW5kaWYgKCkKKworIyBFc3BlY2lhbGx5IGZvciBlYXJseSBkZXZlbG9wbWVudCwgd2Ugd2FudCB0byBiZSBhIGxpdHRsZQorIyBhZ2dyZXNzaXZlIGFib3V0IGRpYWdub3NpbmcgYnVpbGQgcHJvYmxlbXM7IHRoaXMgY2FuIGdldAorIyByZWxheGVkIHNvbWV3aGF0IGluIGZpbmFsIHNoaXBwaW5nIHZlcnNpb25zLgorSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiKQorICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIi1XYWxsIC1XZm9ybWF0IC1XZm9ybWF0LXNlY3VyaXR5IikKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgIyBTZXQgY29tcGlsZSBmbGFncyBmb3IgYWxsIGJ1aWxkIHR5cGVzLgorICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV2FsbCAtV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSIpCisgIGlmIChFTkFCTEVfV0VSUk9SKQorICAgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XZXJyb3IiKQorICBlbmRpZiAoKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBkZWJ1ZyBidWlsZC4KKyAgIyBUaGlzIGlzIGFkZGVkIGludG8gQ01BS0VfQ19GTEFHUyB3aGVuIENNQUtFX0JVSUxEX1RZUEUgaXMgIkRlYnVnIgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV2V4dHJhIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVd1bnVzZWQiKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV3NoYWRvdyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XbWlzc2luZy1wcm90b3R5cGVzIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdjYXN0LXF1YWwiKQorRU5ESUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiKQorSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkNsYW5nJCIpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiLVdhbGwgLVdmb3JtYXQgLVdmb3JtYXQtc2VjdXJpdHkiKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBhbGwgYnVpbGQgdHlwZXMuCisgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XYWxsIC1XZm9ybWF0IC1XZm9ybWF0LXNlY3VyaXR5IikKKyAgaWYgKEVOQUJMRV9XRVJST1IpCisgICAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdlcnJvciIpCisgIGVuZGlmICgpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgU2V0IGNvbXBpbGUgZmxhZ3MgZm9yIGRlYnVnIGJ1aWxkLgorICAjIFRoaXMgaXMgYWRkZWQgaW50byBDTUFLRV9DX0ZMQUdTIHdoZW4gQ01BS0VfQlVJTERfVFlQRSBpcyAiRGVidWciCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1nIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdleHRyYSIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XdW51c2VkIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdzaGFkb3ciKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV21pc3NpbmctcHJvdG90eXBlcyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XY2FzdC1xdWFsIikKK0VORElGIChDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl5DbGFuZyQiKQorSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXlhMJCIpCisgIFNFVChDTUFLRV9DX0NPTVBJTEVSICJ4bGNfciIpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiLXFmbGFnPWU6ZSAtcWZvcm1hdD1zZWMiKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBhbGwgYnVpbGQgdHlwZXMuCisgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1xZmxhZz1lOmUgLXFmb3JtYXQ9c2VjIikKKyAgaWYgKEVOQUJMRV9XRVJST1IpCisgICAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXFoYWx0PXciKQorICBlbmRpZiAoKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBkZWJ1ZyBidWlsZC4KKyAgIyBUaGlzIGlzIGFkZGVkIGludG8gQ01BS0VfQ19GTEFHUyB3aGVuIENNQUtFX0JVSUxEX1RZUEUgaXMgIkRlYnVnIgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtZyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1xZmxhZz13OnciKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtcWluZm89cHJvOnVzZSIpCitFTkRJRihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl5YTCQiKQorSUYgKE1TVkMpCisgIGlmIChFTkFCTEVfV0VSUk9SKQorICAgICMgL1dYIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBnY2MncyAtV2Vycm9yIG9wdGlvbi4KKyAgICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAvV1giKQorICBlbmRpZiAoKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBkZWJ1ZyBidWlsZC4KKyAgIyBUaGlzIGlzIGFkZGVkIGludG8gQ01BS0VfQ19GTEFHUyB3aGVuIENNQUtFX0JVSUxEX1RZUEUgaXMgIkRlYnVnIgorICAjIEVuYWJsZSBsZXZlbCA0IEM0MDYyOiBUaGUgZW51bWVyYXRlIGhhcyBubyBhc3NvY2lhdGVkIGhhbmRsZXIgaW4gYSBzd2l0Y2gKKyAgIyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFuZCB0aGVyZSBpcyBubyBkZWZhdWx0IHRoYXQgY2FuIGNhdGNoIGl0LgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0MDYyIikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDI1NDogQSBsYXJnZXIgYml0IGZpZWxkIHdhcyBhc3NpZ25lZCB0byBhIHNtYWxsZXIgYml0CisgICMgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0MjU0IikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDI5NTogQW4gYXJyYXkgd2FzIGluaXRpYWxpemVkIGJ1dCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4KKyAgIyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFycmF5IGlzIG5vdCBhIG51bGw7IGFjY2Vzc2luZyB0aGUgYXJyYXkgbWF5CisgICMgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0Mjk1IikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDI5NjogQW4gdW5zaWduZWQgdmFyaWFibGUgd2FzIHVzZWQgaW4gYSBjb21wYXJpc29uCisgICMgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiB3aXRoIHplcm8uCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQyOTYiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0Mzg5OiBBbiBvcGVyYXRpb24gaW52b2x2ZWQgc2lnbmVkIGFuZCB1bnNpZ25lZCB2YXJpYWJsZXMuCisgICMgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bGQgcmVzdWx0IGluIGEgbG9zcyBvZiBkYXRhLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0Mzg5IikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDUwNTogVGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGxvY2FsIGFuZCBub3QgcmVmZXJlbmNlZCBpbgorICAjICAgICAgICAgICAgICAgICAgICAgICB0aGUgYm9keSBvZiB0aGUgbW9kdWxlOyB0aGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBpcworICAjICAgICAgICAgICAgICAgICAgICAgICBkZWFkIGNvZGUuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQ1MDUiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0NTE0OiBUaGUgb3B0aW1pemVyIHJlbW92ZWQgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgaXMgbm90CisgICMgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZC4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL3dlNDUxNCIpCisgICMgRW5hYmxlIGxldmVsIDQgQzQ3MDI6IFVucmVhY2hhYmxlIGNvZGUuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQ3MDIiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0NzA2OiBUaGUgdGVzdCB2YWx1ZSBpbiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gd2FzIHRoZQorICAjICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgb2YgYW4gYXNzaWdubWVudC4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL3dlNDcwNiIpCisgICMgL09pIG9wdGlvbiBlbmFibGVzIGJ1aWx0LWluIGZ1bmN0aW9ucy4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL09pIikKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgIyBTZXQgY29tcGlsZSBmbGFncyBmb3IgcmVsZWFzZSBidWlsZC4KKyAgU0VUKENNQUtFX0NfRkxBR1NfUkVMRUFTRSAiJHtDTUFLRV9DX0ZMQUdTX1JFTEVBU0V9IC9PaSIpCitFTkRJRiAoTVNWQykKK0VORElGKCkKKwogIyBFbmFibGUgQ1Rlc3QvQ0Rhc2ggc3VwcG9ydAogaW5jbHVkZShDVGVzdCkKIAotT1BUSU9OKEVOQUJMRV9ORVRUTEUgIkVuYWJsZSB1c2Ugb2YgTmV0dGxlIiBPTikKK09QVElPTihFTkFCTEVfTUJFRFRMUyAiRW5hYmxlIHVzZSBvZiBtYmVkIFRMUyIgT0ZGKQorT1BUSU9OKEVOQUJMRV9ORVRUTEUgIkVuYWJsZSB1c2Ugb2YgTmV0dGxlIiBPRkYpCiBPUFRJT04oRU5BQkxFX09QRU5TU0wgIkVuYWJsZSB1c2Ugb2YgT3BlblNTTCIgT04pCitPUFRJT04oRU5BQkxFX0xJQkIyICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIExJQkIyIGxpYnJhcnkgaWYgZm91bmQiIE9OKQogT1BUSU9OKEVOQUJMRV9MWjQgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFo0IGxpYnJhcnkgaWYgZm91bmQiIE9OKQogT1BUSU9OKEVOQUJMRV9MWk8gIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFpPIGxpYnJhcnkgaWYgZm91bmQiIE9GRikKIE9QVElPTihFTkFCTEVfTFpNQSAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMWk1BIGxpYnJhcnkgaWYgZm91bmQiIE9OKQorT1BUSU9OKEVOQUJMRV9aU1REICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIHpzdGQgbGlicmFyeSBpZiBmb3VuZCIgT04pCiAKIE9QVElPTihFTkFCTEVfWkxJQiAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBaTElCIGxpYnJhcnkgaWYgZm91bmQiIE9OKQogT1BUSU9OKEVOQUJMRV9CWmlwMiAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBCWmlwMiBsaWJyYXJ5IGlmIGZvdW5kIiBPTikKQEAgLTg0LDIzICsyMjYsOTggQEAKICMgQ05HIGlzIHVzZWQgZm9yIGVuY3J5cHQvZGVjcnlwdCBaaXAgYXJjaGl2ZXMgb24gV2luZG93cy4KIE9QVElPTihFTkFCTEVfQ05HICJFbmFibGUgdGhlIHVzZSBvZiBDTkcoQ3J5cHRvIE5leHQgR2VuZXJhdGlvbikiIE9OKQogCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyBjb21tYW5kLWxpbmUgdG9vbHMuCitPUFRJT04oRU5BQkxFX1RBUiAiRW5hYmxlIHRhciBidWlsZGluZyIgT04pCitPUFRJT04oRU5BQkxFX1RBUl9TSEFSRUQgIkVuYWJsZSBkeW5hbWljIGJ1aWxkIG9mIHRhciIgRkFMU0UpCitPUFRJT04oRU5BQkxFX0NQSU8gIkVuYWJsZSBjcGlvIGJ1aWxkaW5nIiBPTikKK09QVElPTihFTkFCTEVfQ1BJT19TSEFSRUQgIkVuYWJsZSBkeW5hbWljIGJ1aWxkIG9mIGNwaW8iIEZBTFNFKQorT1BUSU9OKEVOQUJMRV9DQVQgIkVuYWJsZSBjYXQgYnVpbGRpbmciIE9OKQorT1BUSU9OKEVOQUJMRV9DQVRfU0hBUkVEICJFbmFibGUgZHluYW1pYyBidWlsZCBvZiBjYXQiIEZBTFNFKQorRU5ESUYoKQogT1BUSU9OKEVOQUJMRV9YQVRUUiAiRW5hYmxlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IiBPTikKIE9QVElPTihFTkFCTEVfQUNMICJFbmFibGUgQUNMIHN1cHBvcnQiIE9OKQogT1BUSU9OKEVOQUJMRV9JQ09OViAiRW5hYmxlIGljb252IHN1cHBvcnQiIE9OKQorSUYoMCkgIyBDTWFrZSBkb2VzIG5vdCBidWlsZCBsaWJhcmNoaXZlJ3MgdGVzdHMuCitPUFRJT04oRU5BQkxFX1RFU1QgIkVuYWJsZSB1bml0IGFuZCByZWdyZXNzaW9uIHRlc3RzIiBPTikKK09QVElPTihFTkFCTEVfQ09WRVJBR0UgIkVuYWJsZSBjb2RlIGNvdmVyYWdlIChHQ0Mgb25seSwgYXV0b21hdGljYWxseSBzZXRzIEVOQUJMRV9URVNUIHRvIE9OKSIgRkFMU0UpCitPUFRJT04oRU5BQkxFX0lOU1RBTEwgIkVuYWJsZSBpbnN0YWxsaW5nIG9mIGxpYnJhcmllcyIgT04pCisKK1NFVChQT1NJWF9SRUdFWF9MSUIgIkFVVE8iIENBQ0hFIFNUUklORyAiQ2hvb3NlIHdoYXQgbGlicmFyeSBzaG91bGQgcHJvdmlkZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCIpCitTRVQoRU5BQkxFX1NBRkVTRUggIkFVVE8iIENBQ0hFIFNUUklORyAiRW5hYmxlIHVzZSBvZiAvU0FGRVNFSCBsaW5rZXIgZmxhZyAoTVNWQyBvbmx5KSIpCitTRVQoV0lORE9XU19WRVJTSU9OICJXSU43IiBDQUNIRSBTVFJJTkcgIlNldCBXaW5kb3dzIHZlcnNpb24gdG8gdXNlIChXaW5kb3dzIG9ubHkpIikKKworSUYoRU5BQkxFX0NPVkVSQUdFKQorICAgICAgIGluY2x1ZGUoTGliYXJjaGl2ZUNvZGVDb3ZlcmFnZSkKK0VORElGKEVOQUJMRV9DT1ZFUkFHRSkKKworSUYoRU5BQkxFX1RFU1QpCisgICAgICAgRU5BQkxFX1RFU1RJTkcoKQorRU5ESUYoRU5BQkxFX1RFU1QpCitFTkRJRigpCiAKIElGKFdJTjMyKQotICAjRUxTRUlGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV0lOWFAiKQogICBTRVQoTlRERElfVkVSU0lPTiAweDA1MDEwMDAwKQogICBTRVQoX1dJTjMyX1dJTk5UIDB4MDUwMSkKICAgU0VUKFdJTlZFUiAweDA1MDEpCiBFTkRJRihXSU4zMikKIAotc2V0KEhBVkVfUFRIUkVBRF9IIDApICMgbm8gdGhyZWFkcyBpbiBDTWFrZQorSUYoMCkgIyBDTWFrZSBoYXJkLWNvZGVzIGl0cyBvd24gc3VwcG9ydGVkIHZlcnNpb24gb2YgV2luZG93cy4KK0lGKFdJTjMyKQorICBJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldJTjgiKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDYwMjAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA2MDIpCisgICAgU0VUKFdJTlZFUiAweDA2MDIpCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldJTjciKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDYwMTAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA2MDEpCisgICAgU0VUKFdJTlZFUiAweDA2MDEpCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldTMDgiKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDYwMDAxMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA2MDApCisgICAgU0VUKFdJTlZFUiAweDA2MDApCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIlZJU1RBIikKKyAgICBTRVQoTlRERElfVkVSU0lPTiAweDA2MDAwMDAwKQorICAgIFNFVChfV0lOMzJfV0lOTlQgMHgwNjAwKQorICAgIFNFVChXSU5WRVIgMHgwNjAwKQorICBFTFNFSUYoV0lORE9XU19WRVJTSU9OIFNUUkVRVUFMICJXUzAzIikKKyAgICBTRVQoTlRERElfVkVSU0lPTiAweDA1MDIwMDAwKQorICAgIFNFVChfV0lOMzJfV0lOTlQgMHgwNTAyKQorICAgIFNFVChXSU5WRVIgMHgwNTAyKQorICBFTFNFSUYoV0lORE9XU19WRVJTSU9OIFNUUkVRVUFMICJXSU5YUCIpCisgICAgU0VUKE5URERJX1ZFUlNJT04gMHgwNTAxMDAwMCkKKyAgICBTRVQoX1dJTjMyX1dJTk5UIDB4MDUwMSkKKyAgICBTRVQoV0lOVkVSIDB4MDUwMSkKKyAgRUxTRShXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldJTjgiKQorICAgICMgRGVmYXVsdCB0byBXaW5kb3dzIFNlcnZlciAyMDAzIEFQSSBpZiB3ZSBkb24ndCByZWNvZ25pemUgdGhlIHNwZWNpZmllcgorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDUwMjAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA1MDIpCisgICAgU0VUKFdJTlZFUiAweDA1MDIpCisgIEVORElGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV0lOOCIpCitFTkRJRihXSU4zMikKKworSUYoTVNWQykKKyAgSUYoRU5BQkxFX1NBRkVTRUggU1RSRVFVQUwgIllFUyIpCisgICAgU0VUKENNQUtFX0VYRV9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfRVhFX0xJTktFUl9GTEFHU30gL1NBRkVTRUgiKQorICAgIFNFVChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IC9TQUZFU0VIIikKKyAgICBTRVQoQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTfSAvU0FGRVNFSCIpCisgICAgU0VUKEVOVntMREZMQUdTfSAiJEVOVntMREZMQUdTfSAvU0FGRVNFSCIpCisgIEVMU0VJRihFTkFCTEVfU0FGRVNFSCBTVFJFUVVBTCAiTk8iKQorICAgIFNFVChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9TQUZFU0VIOk5PIikKKyAgICBTRVQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSAvU0FGRVNFSDpOTyIpCisgICAgU0VUKENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU30gL1NBRkVTRUg6Tk8iKQorICAgIFNFVChFTlZ7TERGTEFHU30gIiRFTlZ7TERGTEFHU30gL1NBRkVTRUg6Tk8iKQorICBFTkRJRihFTkFCTEVfU0FGRVNFSCBTVFJFUVVBTCAiWUVTIikKK0VORElGKE1TVkMpCitFTkRJRigpCiAKIElGKCIke0NNQUtFX0NfUExBVEZPUk1fSUR9IiBNQVRDSEVTICJeKEhQLVVYKSQiKQogICBBRERfREVGSU5JVElPTlMoLURfWE9QRU5fU09VUkNFPTUwMCkgIyBBc2sgd2NoYXIuaCBmb3IgbWJzdGF0ZV90CiBFTkRJRigpCiAKK0lGKE1JTkdXKQorICBBRERfREVGSU5JVElPTlMoLURfX1VTRV9NSU5HV19BTlNJX1NURElPKQorRU5ESUYoKQorCiAjCiBJTkNMVURFKENoZWNrQ1NvdXJjZUNvbXBpbGVzKQogSU5DTFVERShDaGVja0NTb3VyY2VSdW5zKQpAQCAtMjgwLDcgKzQ5Nyw2IEBACiAgICAgQUREX0RFRklOSVRJT05TKC1EVVNFX0JaSVAyX1NUQVRJQykKICAgRU5ESUYoVVNFX0JaSVAyX0RMTCkKIEVORElGKEJaSVAyX0ZPVU5EKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBCWklQMl9JTkNMVURFX0RJUikKIAogCiAjCkBAIC0yODksMTIgKzUwNSwxNSBAQAogSUYoRU5BQkxFX0xaTUEpCiAgIEZJTkRfUEFDS0FHRShMaWJMWk1BKQogRUxTRSgpCi0gIFNFVChMSUJaTUFfRk9VTkQgRkFMU0UpICMgT3ZlcnJpZGUgY2FjaGVkIHZhbHVlCisgIFNFVChMSUJMWk1BX0ZPVU5EIEZBTFNFKSAjIE92ZXJyaWRlIGNhY2hlZCB2YWx1ZQogRU5ESUYoKQogCiBJRihMSUJMWk1BX0ZPVU5EKQogICBTRVQoSEFWRV9MSUJMWk1BIDEpCiAgIFNFVChIQVZFX0xaTUFfSCAxKQorICBDTUFLRV9QVVNIX0NIRUNLX1NUQVRFKCkKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7TElCTFpNQV9JTkNMVURFX0RJUn0pCisgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtMSUJMWk1BX0xJQlJBUklFU30pCiAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtMSUJMWk1BX0lOQ0xVREVfRElSU30pCiAgIExJU1QoQVBQRU5EIEFERElUSU9OQUxfTElCUyAke0xJQkxaTUFfTElCUkFSSUVTfSkKICAgSUYoQ01BS0VfVVNFX1NZU1RFTV9MSUJMWk1BKQpAQCAtMzEwLDEwICs1MjksMTAgQEAKICAgRUxTRSgpCiAgICAgQUREX0RFRklOSVRJT05TKC1ETFpNQV9BUElfU1RBVElDKQogICBFTkRJRigpCisgIENNQUtFX1BPUF9DSEVDS19TVEFURSgpCiBFTFNFKExJQkxaTUFfRk9VTkQpCiAjIExaTUEgbm90IGZvdW5kIGFuZCB3aWxsIG5vdCBiZSB1c2VkLgogRU5ESUYoTElCTFpNQV9GT1VORCkKLUlGKDApICMgQ01ha2UgZG9lcyBub3QgbmVlZCBMWk8yIHN1cHBvcnQgaW4gbGliYXJjaGl2ZQogIwogIyBGaW5kIExaTzIKICMKQEAgLTM0MCwxMCArNTU5LDM1IEBACiAgICMgVE9ETzogdGVzdCBmb3Igc3RhdGljIGxpYnJhcnkuCiAgICMKIEVORElGKExaTzJfRk9VTkQpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExaTzJfSU5DTFVERV9ESVIpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExaTzJfTElCUkFSWSkKLUVORElGKCkKLUlGKDApICMgQ01ha2UgZG9lcyBub3QgbmVlZCBMWjQgc3VwcG9ydCBpbiBsaWJhcmNoaXZlCisjCisjIEZpbmQgbGliYjIKKyMKK0lGKEVOQUJMRV9MSUJCMikKKyAgSUYgKExJQkIyX0lOQ0xVREVfRElSKQorICAgICMgQWxyZWFkeSBpbiBjYWNoZSwgYmUgc2lsZW50CisgICAgU0VUKExJQkIyX0ZJTkRfUVVJRVRMWSBUUlVFKQorICBFTkRJRiAoTElCQjJfSU5DTFVERV9ESVIpCisKKyAgRklORF9QQVRIKExJQkIyX0lOQ0xVREVfRElSIGJsYWtlMi5oKQorICBGSU5EX0xJQlJBUlkoTElCQjJfTElCUkFSWSBOQU1FUyBiMiBsaWJiMikKKyAgSU5DTFVERShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKKyAgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKExJQkIyIERFRkFVTFRfTVNHIExJQkIyX0xJQlJBUlkgTElCQjJfSU5DTFVERV9ESVIpCitFTFNFKEVOQUJMRV9MSUJCMikKKyAgU0VUKExJQkIyX0ZPVU5EIEZBTFNFKSAjIE92ZXJyaWRlIGNhY2hlZCB2YWx1ZQorRU5ESUYoRU5BQkxFX0xJQkIyKQorSUYoTElCQjJfRk9VTkQpCisgIFNFVChIQVZFX0xJQkIyIDEpCisgIFNFVChIQVZFX0JMQUtFMl9IIDEpCisgIFNFVChBUkNISVZFX0JMQUtFMiBGQUxTRSkKKyAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7TElCQjJfTElCUkFSWX0pCisgIENNQUtFX1BVU0hfQ0hFQ0tfU1RBVEUoKQorICBTRVQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7TElCQjJfTElCUkFSWX0pCisgIFNFVChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke0xJQkIyX0lOQ0xVREVfRElSfSkKKyAgQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTKGJsYWtlMnNwX2luaXQgSEFWRV9MSUJCMikKKyAgQ01BS0VfUE9QX0NIRUNLX1NUQVRFKCkKK0VMU0UoTElCQjJfRk9VTkQpCisgIFNFVChBUkNISVZFX0JMQUtFMiBUUlVFKQorRU5ESUYoTElCQjJfRk9VTkQpCiAjCiAjIEZpbmQgTFo0CiAjCkBAIC0zNzMsMzMgKzYxNyw0MiBAQAogICAjIFRPRE86IHRlc3QgZm9yIHN0YXRpYyBsaWJyYXJ5LgogICAjCiBFTkRJRihMWjRfRk9VTkQpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExaNF9JTkNMVURFX0RJUikKLU1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTFo0X0xJQlJBUlkpCi1FTkRJRigpCiAjCiAjIEZpbmQgWnN0ZAogIwotSUYgKFpTVERfSU5DTFVERV9ESVIpCi0gICMgQWxyZWFkeSBpbiBjYWNoZSwgYmUgc2lsZW50Ci0gIFNFVChaU1REX0ZJTkRfUVVJRVRMWSBUUlVFKQotRU5ESUYgKFpTVERfSU5DTFVERV9ESVIpCitJRihFTkFCTEVfWlNURCkKKyAgSUYgKFpTVERfSU5DTFVERV9ESVIpCisgICAgIyBBbHJlYWR5IGluIGNhY2hlLCBiZSBzaWxlbnQKKyAgICBTRVQoWlNURF9GSU5EX1FVSUVUTFkgVFJVRSkKKyAgRU5ESUYgKFpTVERfSU5DTFVERV9ESVIpCiAKLUZJTkRfUEFUSChaU1REX0lOQ0xVREVfRElSIHpzdGQuaCkKLUZJTkRfTElCUkFSWShaU1REX0xJQlJBUlkgTkFNRVMgenN0ZCBsaWJ6c3RkKQotSU5DTFVERShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKLUZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhaU1REIERFRkFVTFRfTVNHIFpTVERfTElCUkFSWSBaU1REX0lOQ0xVREVfRElSKQorICBGSU5EX1BBVEgoWlNURF9JTkNMVURFX0RJUiB6c3RkLmgpCisgIEZJTkRfTElCUkFSWShaU1REX0xJQlJBUlkgTkFNRVMgenN0ZCBsaWJ6c3RkKQorICBJTkNMVURFKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorICBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoWlNURCBERUZBVUxUX01TRyBaU1REX0xJQlJBUlkgWlNURF9JTkNMVURFX0RJUikKK0VMU0UoRU5BQkxFX1pTVEQpCisgIFNFVChaU1REX0ZPVU5EIEZBTFNFKSAjIE92ZXJyaWRlIGNhY2hlZCB2YWx1ZQorRU5ESUYoRU5BQkxFX1pTVEQpCiBJRihaU1REX0ZPVU5EKQogICBTRVQoSEFWRV9aU1REX0ggMSkKICAgSU5DTFVERV9ESVJFQ1RPUklFUygke1pTVERfSU5DTFVERV9ESVJ9KQogICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtaU1REX0xJQlJBUll9KQogICBTRVQoSEFWRV9MSUJaU1REIDEpCisgIElGKDApICMgQ01ha2UgZXhwZWN0cyB0aGUgenN0ZCBsaWJyYXJ5IHRvIHdvcmsuCisgIENNQUtFX1BVU0hfQ0hFQ0tfU1RBVEUoKQorICBTRVQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7WlNURF9MSUJSQVJZfSkKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7WlNURF9JTkNMVURFX0RJUn0pCisgIENIRUNLX0ZVTkNUSU9OX0VYSVNUUyhaU1REX2NvbXByZXNzU3RyZWFtIEhBVkVfTElCWlNURCkKICAgIwogICAjIFRPRE86IHRlc3QgZm9yIHN0YXRpYyBsaWJyYXJ5LgogICAjCisgIENNQUtFX1BPUF9DSEVDS19TVEFURSgpCisgIEVORElGKCkKIEVORElGKFpTVERfRk9VTkQpCiBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIFpTVERfSU5DTFVERV9ESVIpCiBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIFpTVERfTElCUkFSWSkKIAorCiAjCiAjIENoZWNrIGhlYWRlcnMKICMKQEAgLTQxOSw5ICs2NzIsMTEgQEAKICMgQWxwaGFiZXRpemUgdGhlIHJlc3QgdW5sZXNzIHRoZXJlJ3MgYSBjb21wZWxsaW5nIHJlYXNvbgogSUYoRU5BQkxFX0FDTCkKICAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJhY2wvbGliYWNsLmgiIEhBVkVfQUNMX0xJQkFDTF9IKQotRUxTRShFTkFCTEVfQUNMKQorICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImF0dHIveGF0dHIuaCIgSEFWRV9BVFRSX1hBVFRSX0gpCitFTFNFKCkKICAgU0VUKEhBVkVfQUNMX0xJQkFDTF9IIEZBTFNFKQotRU5ESUYoRU5BQkxFX0FDTCkKKyAgU0VUKEhBVkVfQVRUUl9YQVRUUl9IIEZBTFNFKQorRU5ESUYoKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJjdHlwZS5oIiBIQVZFX0NUWVBFX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImNvcHlmaWxlLmgiIEhBVkVfQ09QWUZJTEVfSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZGlyZWN0LmgiIEhBVkVfRElSRUNUX0gpCkBAIC00MzUsNyArNjkwLDYgQEAKIAogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJmY250bC5oIiBIQVZFX0ZDTlRMX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImdycC5oIiBIQVZFX0dSUF9IKQotTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJpbnR0eXBlcy5oIiBIQVZFX0lOVFRZUEVTX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImlvLmgiIEhBVkVfSU9fSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgibGFuZ2luZm8uaCIgSEFWRV9MQU5HSU5GT19IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJsaW1pdHMuaCIgSEFWRV9MSU1JVFNfSCkKQEAgLTQ2MSw3ICs3MTUsNiBAQAogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJzaWduYWwuaCIgSEFWRV9TSUdOQUxfSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgic3Bhd24uaCIgSEFWRV9TUEFXTl9IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJzdGRhcmcuaCIgSEFWRV9TVERBUkdfSCkKLUxBX0NIRUNLX0lOQ0xVREVfRklMRSgic3RkaW50LmgiIEhBVkVfU1RESU5UX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoInN0ZGxpYi5oIiBIQVZFX1NURExJQl9IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJzdHJpbmcuaCIgSEFWRV9TVFJJTkdfSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgic3RyaW5ncy5oIiBIQVZFX1NUUklOR1NfSCkKQEAgLTUxOSw2ICs3NzIsMjYgQEAKICBTQUZFX1RPX0RFRklORV9FWFRFTlNJT05TKQogCiAjCisjIEZpbmQgbWJlZCBUTFMKKyMKK0lGKEVOQUJMRV9NQkVEVExTKQorICBGSU5EX1BBQ0tBR0UoTWJlZFRMUykKKyAgSUYoTUJFRFRMU19GT1VORCkKKyAgICBTRVQoSEFWRV9MSUJNQkVEQ1JZUFRPIDEpCisgICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7TUJFRENSWVBUT19MSUJSQVJZfSkKKyAgICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7TUJFRFRMU19JTkNMVURFX0RJUlN9KQorCisgICAgTElTVChBUFBFTkQgQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtNQkVEVExTX0lOQ0xVREVfRElSU30pCisgICAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJtYmVkdGxzL2Flcy5oIiBIQVZFX01CRURUTFNfQUVTX0gpCisgICAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJtYmVkdGxzL21kLmgiIEhBVkVfTUJFRFRMU19NRF9IKQorICAgIExBX0NIRUNLX0lOQ0xVREVfRklMRSgibWJlZHRscy9wa2NzNS5oIiBIQVZFX01CRURUTFNfUEtDUzVfSCkKKworICBFTkRJRihNQkVEVExTX0ZPVU5EKQorICBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIE1CRURUTFNfSU5DTFVERV9ESVJTKQorICBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIE1CRURDUllQVE9fTElCUkFSWSkKK0VORElGKEVOQUJMRV9NQkVEVExTKQorCisjCiAjIEZpbmQgTmV0dGxlCiAjCiBJRihFTkFCTEVfTkVUVExFKQpAQCAtNTc5LDYgKzg1Miw4IEBACiAgICAgICBTVFJJTkcoVE9VUFBFUiAiJHtBTEdPUklUSE19IiBhbGdvcml0aG0pCiAgICAgICBJRiAoIiR7SU1QTEVNRU5UQVRJT059IiBNQVRDSEVTICJeT1BFTlNTTCQiIEFORCBOT1QgT1BFTlNTTF9GT1VORCkKICAgICAgICAgU0VUKEFSQ0hJVkVfQ1JZUFRPXyR7QUxHT1JJVEhNfV8ke0lNUExFTUVOVEFUSU9OfSBGQUxTRSkKKyAgICAgIEVMU0VJRigiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5NQkVEVExTJCIgQU5EIE5PVCBNQkVEVExTX0ZPVU5EKQorICAgICAgICBTRVQoQVJDSElWRV9DUllQVE9fJHtBTEdPUklUSE19XyR7SU1QTEVNRU5UQVRJT059IEZBTFNFKQogICAgICAgRUxTRUlGKCIke0lNUExFTUVOVEFUSU9OfSIgTUFUQ0hFUyAiXk5FVFRMRSQiIEFORCBOT1QgTkVUVExFX0ZPVU5EKQogICAgICAgICBTRVQoQVJDSElWRV9DUllQVE9fJHtBTEdPUklUSE19XyR7SU1QTEVNRU5UQVRJT059IEZBTFNFKQogICAgICAgRU5ESUYoIiR7SU1QTEVNRU5UQVRJT059IiBNQVRDSEVTICJeT1BFTlNTTCQiIEFORCBOT1QgT1BFTlNTTF9GT1VORCkKQEAgLTU5NCw2ICs4NjksMTEgQEAKIAkgICAgICAiJHtUUllfQ1JZUFRPX1JFUVVJUkVEX0lOQ0xVREVTfTske09QRU5TU0xfSU5DTFVERV9ESVJ9IikKIAkgICAgU0VUKFRSWV9DUllQVE9fUkVRVUlSRURfTElCUwogCSAgICAgICAgIi1ETElOS19MSUJSQVJJRVM6U1RSSU5HPSR7T1BFTlNTTF9MSUJSQVJJRVN9IikKKwlFTFNFSUYoIiR7SU1QTEVNRU5UQVRJT059IiBNQVRDSEVTICJeTUJFRFRMUyQiIEFORCBNQkVEVExTX0ZPVU5EKQorCSAgICBTRVQoVFJZX0NSWVBUT19SRVFVSVJFRF9JTkNMVURFUworCSAgICAgICIke1RSWV9DUllQVE9fUkVRVUlSRURfSU5DTFVERVN9OyR7TUJFRFRMU19JTkNMVURFX0RJUlN9IikKKwkgICAgU0VUKFRSWV9DUllQVE9fUkVRVUlSRURfTElCUworCSAgICAgICItRExJTktfTElCUkFSSUVTOlNUUklORz0ke01CRURDUllQVE9fTElCUkFSWX0iKQogCUVMU0VJRigiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5ORVRUTEUkIiBBTkQgTkVUVExFX0ZPVU5EKQogCSAgICBTRVQoVFJZX0NSWVBUT19SRVFVSVJFRF9JTkNMVURFUwogCSAgICAgICIke1RSWV9DUllQVE9fUkVRVUlSRURfSU5DTFVERVN9OyR7TkVUVExFX0lOQ0xVREVfRElSfSIpCkBAIC03NTgsMTggKzEwMzgsMTkgQEAKIE1BQ1JPKENIRUNLX0lDT05WIExJQiBUUllfSUNPTlZfQ09OU1QpCiAgIElGKE5PVCBIQVZFX0lDT05WKQogICAgIENNQUtFX1BVU0hfQ0hFQ0tfU1RBVEUoKQkjIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMKLSAgICBJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIiBPUgotICAgICAgICBDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJDbGFuZyIpCisgICAgSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiIE9SCisgICAgICAgIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkNsYW5nJCIpCiAgICAgICAjCiAgICAgICAjIER1cmluZyBjaGVja2luZyBpY29udiBwcm90byB0eXBlLCB3ZSBzaG91bGQgdXNlIC1XZXJyb3IgdG8gYXZvaWQgdGhlCiAgICAgICAjIHN1Y2Nlc3Mgb2YgaWNvbnYgZGV0ZWN0aW9uIHdpdGggYSB3YXJuaWcgd2hpY2ggc3VjY2VzcyBpcyBhIG1pc3MKICAgICAgICMgZGV0ZWN0aW9uLiBTbyB0aGlzIG5lZWRzIGZvciBhbGwgYnVpbGQgbW9kZShldmVuIGl0J3MgYSByZWxlYXNlIG1vZGUpLgogICAgICAgIwogICAgICAgU0VUKENNQUtFX1JFUVVJUkVEX0ZMQUdTICIke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfSAtV2Vycm9yIikKLSAgICBFTkRJRiAoKQotICAgIElGIChDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJYTCIpCisgICAgRU5ESUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiIE9SCisgICAgICAgICAgIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkNsYW5nJCIpCisgICAgSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXlhMJCIpCiAgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIiR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IC1xaGFsdD13IC1xZmxhZz13OnciKQotICAgIEVORElGICgpCisgICAgRU5ESUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXlhMJCIpCiAgICAgSUYgKE1TVkMpCiAgICAgICAjIE5PVEU6IC9XWCBvcHRpb24gaXMgdGhlIHNhbWUgYXMgZ2NjJ3MgLVdlcnJvciBvcHRpb24uCiAgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIiR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IC9XWCIpCkBAIC04ODksNyArMTE3MCw2IEBACiAgIFVOU0VUKExJQkNIQVJTRVRfU1RBVElDIENBQ0hFKQogRU5ESUYoRU5BQkxFX0lDT05WKQogCi1JRigwKSAjIENNYWtlIGRvZXMgbm90IG5lZWQgWE1MIHN1cHBvcnQgaW4gbGliYXJjaGl2ZQogIwogIyBGaW5kIExpYnhtbDIKICMKQEAgLTkzNiwyMyArMTIxNiwxMzUgQEAKICAgICBDTUFLRV9QT1BfQ0hFQ0tfU1RBVEUoKQkjIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMKICAgRU5ESUYoRVhQQVRfRk9VTkQpCiBFTkRJRihMSUJYTUwyX0ZPVU5EKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBMSUJYTUwyX0lOQ0xVREVfRElSKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBMSUJYTUwyX0xJQlJBUklFUykKLUVORElGKCkKKworIworIyBQT1NJWCBSZWd1bGFyIEV4cHJlc3Npb24gc3VwcG9ydAorIworSUYoUE9TSVhfUkVHRVhfTElCIE1BVENIRVMgIl4oQVVUT3xMSUJDfExJQlJFR0VYKSQiKQorICAjCisgICMgSWYgUENSRVBPU0lYIGlzIG5vdCBmb3VuZCBvciBub3QgcmVxdWVzdGVkLCB0cnkgdXNpbmcgcmVnZXgKKyAgIyBmcm9tIGxpYmMgb3IgbGlicmVnZXgKKyAgIworICBGSU5EX1BBVEgoUkVHRVhfSU5DTFVERV9ESVIgcmVnZXguaCkKKyAgSUYoUkVHRVhfSU5DTFVERV9ESVIpCisgICAgQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHJlZ2NvbXAgSEFWRV9SRUdDT01QX0xJQkMpCisgICAgIworICAgICMgSWYgbGliYyBkb2VzIG5vdCBwcm92aWRlIHJlZ2V4LCBmaW5kIGxpYnJlZ2V4LgorICAgICMKKyAgICBJRihOT1QgSEFWRV9SRUdDT01QX0xJQkMpCisgICAgICBDTUFLRV9QVVNIX0NIRUNLX1NUQVRFKCkJIyBTYXZlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzCisgICAgICBGSU5EX0xJQlJBUlkoUkVHRVhfTElCUkFSWSByZWdleCkKKyAgICAgIElGKFJFR0VYX0xJQlJBUlkpCisgICAgICAgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtSRUdFWF9MSUJSQVJZfSkKKyAgICAgICAgQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHJlZ2NvbXAgSEFWRV9SRUdDT01QX0xJQlJFR0VYKQorICAgICAgICBJRihIQVZFX1JFR0NPTVBfTElCUkVHRVgpCisgICAgICAgICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7UkVHRVhfTElCUkFSWX0pCisgICAgICAgICAgIworICAgICAgICAgICMgSWYgcmVnZXguaCBpcyBub3QgZm91bmQsIHJldHJ5IGxvb2tpbmcgZm9yIHJlZ2V4LmggYXQKKyAgICAgICAgICAjIFJFR0VYX0lOQ0xVREVfRElSCisgICAgICAgICAgIworICAgICAgICAgIElGKE5PVCBIQVZFX1JFR0VYX0gpCisgICAgICAgICAgICBVTlNFVChIQVZFX1JFR0VYX0ggQ0FDSEUpCisgICAgICAgICAgICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7UkVHRVhfSU5DTFVERV9ESVJ9KQorICAgICAgICAgICAgU0VUKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7UkVHRVhfSU5DTFVERV9ESVJ9KQorICAgICAgICAgICAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJyZWdleC5oIiBIQVZFX1JFR0VYX0gpCisgICAgICAgICAgRU5ESUYoTk9UIEhBVkVfUkVHRVhfSCkKKyAgICAgICAgICAjIFRlc3QgaWYgYSBtYWNybyBpcyBuZWVkZWQgZm9yIHRoZSBsaWJyYXJ5LgorICAgICAgICAgIFRSWV9NQUNST19GT1JfTElCUkFSWSgKKyAgICAgICAgICAgICIke1JFR0VYX0lOQ0xVREVfRElSfSIgIiR7UkVHRVhfTElCUkFSWX0iCisgICAgICAgICAgICBDT01QSUxFUworICAgICAgICAgICAgIiNpbmNsdWRlIDxzdGRkZWYuaD5cbiNpbmNsdWRlIDxyZWdleC5oPlxuaW50IG1haW4oKSB7cmVnZXhfdCByO3JldHVybiByZWdjb21wKCZyLCBcIlwiLCAwKTt9IgorICAgICAgICAgICAgIlVTRV9SRUdFWF9ETEw7VVNFX1JFR0VYX1NUQVRJQyIpCisgICAgICAgICAgSUYoVVNFX1JFR0VYX0RMTCkKKyAgICAgICAgICAgIEFERF9ERUZJTklUSU9OUygtRFVTRV9SRUdFWF9ETEwpCisgICAgICAgICAgRUxTRUlGKFVTRV9SRUdFWF9TVEFUSUMpCisgICAgICAgICAgICBBRERfREVGSU5JVElPTlMoLURVU0VfUkVHRVhfU1RBVElDKQorICAgICAgICAgIEVORElGKFVTRV9SRUdFWF9ETEwpCisgICAgICAgIEVORElGKEhBVkVfUkVHQ09NUF9MSUJSRUdFWCkKKyAgICAgIEVORElGKFJFR0VYX0xJQlJBUlkpCisgICAgICBDTUFLRV9QT1BfQ0hFQ0tfU1RBVEUoKQkjIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMKKyAgICBFTkRJRihOT1QgSEFWRV9SRUdDT01QX0xJQkMpCisgIEVORElGKFJFR0VYX0lOQ0xVREVfRElSKQorICBJRihIQVZFX1JFR0NPTVBfTElCQyBPUiBIQVZFX1JFR0NPTVBfTElCUkVHRVgpCisgICAgU0VUKEZPVU5EX1BPU0lYX1JFR0VYX0xJQiAxKQorICBFTkRJRihIQVZFX1JFR0NPTVBfTElCQyBPUiBIQVZFX1JFR0NPTVBfTElCUkVHRVgpCitFTkRJRihQT1NJWF9SRUdFWF9MSUIgTUFUQ0hFUyAiXihBVVRPfExJQkN8TElCUkVHRVgpJCIpCisKK0lGKE5PVCBGT1VORF9QT1NJWF9SRUdFWF9MSUIgQU5EIFBPU0lYX1JFR0VYX0xJQiBNQVRDSEVTICJeKEFVVE98TElCUENSRVBPU0lYKSQiKQorICAjCisgICMgSWYgcmVxdWVzdGVkLCB0cnkgZmluZGluZyBsaWJyYXJ5IGZvciBQQ1JFUE9TSVgKKyAgIworICBJRihFTkFCTEVfTGliR0NDKQorICAgIEZJTkRfUEFDS0FHRShMaWJHQ0MpCisgIEVMU0UoKQorICAgIFNFVChMSUJHQ0NfRk9VTkQgRkFMU0UpICMgT3ZlcnJpZGUgY2FjaGVkIHZhbHVlCisgIEVORElGKCkKKyAgSUYoRU5BQkxFX1BDUkVQT1NJWCkKKyAgICBGSU5EX1BBQ0tBR0UoUENSRVBPU0lYKQorICBFTFNFKCkKKyAgICBTRVQoUENSRVBPU0lYX0ZPVU5EIEZBTFNFKSAjIE92ZXJyaWRlIGNhY2hlZCB2YWx1ZQorICBFTkRJRigpCisgIElGKFBDUkVQT1NJWF9GT1VORCkKKyAgICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7UENSRV9JTkNMVURFX0RJUn0pCisgICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7UENSRVBPU0lYX0xJQlJBUklFU30pCisgICAgIyBUZXN0IGlmIGEgbWFjcm8gaXMgbmVlZGVkIGZvciB0aGUgbGlicmFyeS4KKyAgICBUUllfTUFDUk9fRk9SX0xJQlJBUlkoCisgICAgICAiJHtQQ1JFX0lOQ0xVREVfRElSfSIgIiR7UENSRVBPU0lYX0xJQlJBUklFU30iCisgICAgICBDT01QSUxFUworICAgICAgIiNpbmNsdWRlIDxwY3JlcG9zaXguaD5cbmludCBtYWluKCkge3JlZ2V4X3QgcjtyZXR1cm4gcmVnY29tcCgmciwgXCJcIiwgMCk7fSIKKyAgICAgICJXSVRIT1VUX1BDUkVfU1RBVElDO1BDUkVfU1RBVElDIikKKyAgICBJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgUENSRV9TVEFUSUMpCisgICAgICBBRERfREVGSU5JVElPTlMoLURQQ1JFX1NUQVRJQykKKwlFTFNFSUYoTk9UIFdJVEhPVVRfUENSRV9TVEFUSUMgQU5EIE5PVCBQQ1JFX1NUQVRJQyBBTkQgUENSRV9GT1VORCkKKwkgICMgRGV0ZXJtaW5lIGlmIHBjcmUgc3RhdGljIGxpYnJhcmllcyBhcmUgdG8gYmUgdXNlZC4KKyAgICAgIExJU1QoQVBQRU5EIEFERElUSU9OQUxfTElCUyAke1BDUkVfTElCUkFSSUVTfSkKKyAgICAgIFNFVChUTVBfTElCUkFSSUVTICR7UENSRVBPU0lYX0xJQlJBUklFU30gJHtQQ1JFX0xJQlJBUklFU30pCisgICAgICBNRVNTQUdFKFNUQVRVUyAidHJ5aW5nIGFnYWluIHdpdGggLWxwY3JlIGluY2x1ZGVkIikKKyAgICAgIFRSWV9NQUNST19GT1JfTElCUkFSWSgKKyAgICAgICAgIiR7UENSRV9JTkNMVURFX0RJUn0iICIke1RNUF9MSUJSQVJJRVN9IgorICAgICAgICBDT01QSUxFUworICAgICAgICAiI2luY2x1ZGUgPHBjcmVwb3NpeC5oPlxuaW50IG1haW4oKSB7cmVnZXhfdCByO3JldHVybiByZWdjb21wKCZyLCBcIlwiLCAwKTt9IgorICAgICAgICAiV0lUSE9VVF9QQ1JFX1NUQVRJQztQQ1JFX1NUQVRJQyIpCisgICAgICBJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgUENSRV9TVEFUSUMpCisgICAgICAgIEFERF9ERUZJTklUSU9OUygtRFBDUkVfU1RBVElDKQorICAgICAgRUxTRUlGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBOT1QgUENSRV9TVEFUSUMgQU5EIE1TVkMgQU5EIExJQkdDQ19GT1VORCkKKyAgICAgICAgIyBXaGVuIGRvaW5nIGEgVmlzdWFsIFN0dWRpbyBidWlsZCB1c2luZyBwY3JlIHN0YXRpYyBsaWJyYXJpZXMKKyAgICAgICAgIyBidWlsdCB1c2luZyB0aGUgbWluZ3cgdG9vbGNoYWluLCAtbGdjYyBpcyBuZWVkZWQgdG8gcmVzb2x2ZQorICAgICAgICAjIF9fX2Noa3N0a19tcy4KKyAgICAgICAgTUVTU0FHRShTVEFUVVMgIlZpc3VhbCBTdHVkaW8gYnVpbGQgZGV0ZWN0ZWQsIHRyeWluZyBhZ2FpbiB3aXRoIC1sZ2NjIGluY2x1ZGVkIikKKyAgICAgICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7TElCR0NDX0xJQlJBUklFU30pCisgICAgICAgIFNFVChUTVBfTElCUkFSSUVTICR7UENSRVBPU0lYX0xJQlJBUklFU30gJHtQQ1JFX0xJQlJBUklFU30gJHtMSUJHQ0NfTElCUkFSSUVTfSkKKyAgICAgICAgICBUUllfTUFDUk9fRk9SX0xJQlJBUlkoCisgICAgICAgICAgICAiJHtQQ1JFX0lOQ0xVREVfRElSfSIgIiR7VE1QX0xJQlJBUklFU30iCisgICAgICAgICAgICBDT01QSUxFUworICAgICAgICAgICAgIiNpbmNsdWRlIDxwY3JlcG9zaXguaD5cbmludCBtYWluKCkge3JlZ2V4X3QgcjtyZXR1cm4gcmVnY29tcCgmciwgXCJcIiwgMCk7fSIKKyAgICAgICAgICAgICJXSVRIT1VUX1BDUkVfU1RBVElDO1BDUkVfU1RBVElDIikKKyAgICAgICAgICBJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgUENSRV9TVEFUSUMpCisgICAgICAgICAgICBBRERfREVGSU5JVElPTlMoLURQQ1JFX1NUQVRJQykKKyAgICAgICAgICBFTkRJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgUENSRV9TVEFUSUMpCisgICAgICBFTkRJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgUENSRV9TVEFUSUMpCisgICAgRU5ESUYoTk9UIFdJVEhPVVRfUENSRV9TVEFUSUMgQU5EIFBDUkVfU1RBVElDKQorICBFTkRJRihQQ1JFUE9TSVhfRk9VTkQpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgUENSRV9JTkNMVURFX0RJUikKKyAgTUFSS19BU19BRFZBTkNFRChDTEVBUiBQQ1JFUE9TSVhfTElCUkFSSUVTKQorICBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIFBDUkVfTElCUkFSSUVTKQorICBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExJQkdDQ19MSUJSQVJJRVMpCitFTkRJRihOT1QgRk9VTkRfUE9TSVhfUkVHRVhfTElCIEFORCBQT1NJWF9SRUdFWF9MSUIgTUFUQ0hFUyAiXihBVVRPfExJQlBDUkVQT1NJWCkkIikKIAogIwogIyBDaGVjayBmdW5jdGlvbnMKICMKIENNQUtFX1BVU0hfQ0hFQ0tfU1RBVEUoKQkjIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMKLUlGIChDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiIE9SCi0gICAgQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiQ2xhbmciKQorSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiIE9SCisgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKICAgIwogICAjIER1cmluZyBjaGVja2luZyBmdW5jdGlvbnMsIHdlIHNob3VsZCB1c2UgLWZuby1idWlsdGluIHRvIGF2b2lkIHRoZQogICAjIGZhaWx1cmUgb2YgZnVuY3Rpb24gZGV0ZWN0aW9uIHdoaWNoIGZhaWx1cmUgaXMgYW4gZXJyb3IgImNvbmZsaWN0aW5nCiAgICMgdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9uIiBjYXVzZWQgYnkgdXNpbmcgLVdlcnJvciBvcHRpb24uCiAgICMKICAgU0VUKENNQUtFX1JFUVVJUkVEX0ZMQUdTICIke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfSAtZm5vLWJ1aWx0aW4iKQotRU5ESUYgKCkKK0VORElGIChDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl5HTlUkIiBPUgorICAgICAgIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkNsYW5nJCIpCiBDSEVDS19TWU1CT0xfRVhJU1RTKF9DcnRTZXRSZXBvcnRNb2RlICJjcnRkYmcuaCIgSEFWRV9fQ3J0U2V0UmVwb3J0TW9kZSkKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyhhcmM0cmFuZG9tX2J1ZiBIQVZFX0FSQzRSQU5ET01fQlVGKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKGNoZmxhZ3MgSEFWRV9DSEZMQUdTKQpAQCAtMTAxNiw2ICsxNDA4LDcgQEAKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyhzeW1saW5rIEhBVkVfU1lNTElOSykKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyh0aW1lZ20gSEFWRV9USU1FR00pCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkModHpzZXQgSEFWRV9UWlNFVCkKK0NIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyh1bmxpbmthdCBIQVZFX1VOTElOS0FUKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHVuc2V0ZW52IEhBVkVfVU5TRVRFTlYpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkModXRpbWUgSEFWRV9VVElNRSkKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyh1dGltZXMgSEFWRV9VVElNRVMpCkBAIC0xMDI5LDYgKzE0MjIsNyBAQAogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKF9jdGltZTY0X3MgSEFWRV9fQ1RJTUU2NF9TKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKF9mc2Vla2k2NCBIQVZFX19GU0VFS0k2NCkKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyhfZ2V0X3RpbWV6b25lIEhBVkVfX0dFVF9USU1FWk9ORSkKK0NIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyhfZ210aW1lNjRfcyBIQVZFX19HTVRJTUU2NF9TKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKF9sb2NhbHRpbWU2NF9zIEhBVkVfX0xPQ0FMVElNRTY0X1MpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoX21rZ210aW1lNjQgSEFWRV9fTUtHTVRJTUU2NCkKIApAQCAtMTA5MiwyNyArMTQ4Niw5IEBACiAjCiAjIENoZWNrIGRlZmluZXMKICMKLVNFVChoZWFkZXJzICJsaW1pdHMuaCIpCi1JRihIQVZFX1NURElOVF9IKQotICBMSVNUKEFQUEVORCBoZWFkZXJzICJzdGRpbnQuaCIpCi1FTkRJRihIQVZFX1NURElOVF9IKQotSUYoSEFWRV9JTlRUWVBFU19IKQotICBMSVNUKEFQUEVORCBoZWFkZXJzICJpbnR0eXBlcy5oIikKLUVORElGKEhBVkVfSU5UVFlQRVNfSCkKIENIRUNLX1NZTUJPTF9FWElTVFMoRUZUWVBFICAgICAgICAgICAiZXJybm8uaCIgICAgSEFWRV9FRlRZUEUpCiBDSEVDS19TWU1CT0xfRVhJU1RTKEVJTFNFUSAgICAgICAgICAgImVycm5vLmgiICAgIEhBVkVfRUlMU0VRKQogQ0hFQ0tfU1lNQk9MX0VYSVNUUyhEX01EX09SREVSICAgICAgICJsYW5naW5mby5oIiBIQVZFX0RfTURfT1JERVIpCi1DSEVDS19TWU1CT0xfRVhJU1RTKElOVDMyX01BWCAgICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9JTlQzMl9NQVgpCi1DSEVDS19TWU1CT0xfRVhJU1RTKElOVDMyX01JTiAgICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9JTlQzMl9NSU4pCi1DSEVDS19TWU1CT0xfRVhJU1RTKElOVDY0X01BWCAgICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9JTlQ2NF9NQVgpCi1DSEVDS19TWU1CT0xfRVhJU1RTKElOVDY0X01JTiAgICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9JTlQ2NF9NSU4pCi1DSEVDS19TWU1CT0xfRVhJU1RTKElOVE1BWF9NQVggICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9JTlRNQVhfTUFYKQotQ0hFQ0tfU1lNQk9MX0VYSVNUUyhJTlRNQVhfTUlOICAgICAgICIke2hlYWRlcnN9IiBIQVZFX0RFQ0xfSU5UTUFYX01JTikKLUNIRUNLX1NZTUJPTF9FWElTVFMoVUlOVDMyX01BWCAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX1VJTlQzMl9NQVgpCi1DSEVDS19TWU1CT0xfRVhJU1RTKFVJTlQ2NF9NQVggICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9VSU5UNjRfTUFYKQotQ0hFQ0tfU1lNQk9MX0VYSVNUUyhVSU5UTUFYX01BWCAgICAgICIke2hlYWRlcnN9IiBIQVZFX0RFQ0xfVUlOVE1BWF9NQVgpCi1DSEVDS19TWU1CT0xfRVhJU1RTKFNJWkVfTUFYICAgICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9TSVpFX01BWCkKLUNIRUNLX1NZTUJPTF9FWElTVFMoU1NJWkVfTUFYICAgICAgICAibGltaXRzLmgiICAgSEFWRV9ERUNMX1NTSVpFX01BWCkKIAogIwogIyBDaGVjayBzdHJ1Y3QgbWVtYmVycwpAQCAtMTE2MSwzMyArMTUzNyw2IEBACiBDSEVDS19TVFJVQ1RfSEFTX01FTUJFUigic3RydWN0IHRtIiB0bV9zZWMKICAgICAic3lzL3R5cGVzLmg7c3lzL3RpbWUuaDt0aW1lLmgiIFRJTUVfV0lUSF9TWVNfVElNRSkKIAotIwotIyBDaGVjayBmb3IgaW50ZWdlciB0eXBlcwotIwotIwotQ0hFQ0tfVFlQRV9TSVpFKCJzaG9ydCIgU0laRV9PRl9TSE9SVCkKLUNIRUNLX1RZUEVfU0laRSgiaW50IiBTSVpFX09GX0lOVCkKLUNIRUNLX1RZUEVfU0laRSgibG9uZyIgU0laRV9PRl9MT05HKQotQ0hFQ0tfVFlQRV9TSVpFKCJsb25nIGxvbmciICAgICBTSVpFX09GX0xPTkdfTE9ORykKLQotQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBzaG9ydCIgU0laRV9PRl9VTlNJR05FRF9TSE9SVCkKLUNIRUNLX1RZUEVfU0laRSgidW5zaWduZWQiIFNJWkVfT0ZfVU5TSUdORUQpCi1DSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIGxvbmciIFNJWkVfT0ZfVU5TSUdORURfTE9ORykKLUNIRUNLX1RZUEVfU0laRSgidW5zaWduZWQgbG9uZyBsb25nIiBTSVpFX09GX1VOU0lHTkVEX0xPTkdfTE9ORykKLQotQ0hFQ0tfVFlQRV9TSVpFKCJfX2ludDY0IiBfX0lOVDY0KQotQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBfX2ludDY0IiBVTlNJR05FRF9fX0lOVDY0KQotCi1DSEVDS19UWVBFX1NJWkUoaW50MTZfdCBJTlQxNl9UKQotQ0hFQ0tfVFlQRV9TSVpFKGludDMyX3QgSU5UMzJfVCkKLUNIRUNLX1RZUEVfU0laRShpbnQ2NF90IElOVDY0X1QpCi1DSEVDS19UWVBFX1NJWkUoaW50bWF4X3QgSU5UTUFYX1QpCi1DSEVDS19UWVBFX1NJWkUodWludDhfdCBVSU5UOF9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnQxNl90IFVJTlQxNl9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnQzMl90IFVJTlQzMl9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnQ2NF90IFVJTlQ2NF9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnRtYXhfdCBVSU5UTUFYX1QpCi0KIENIRUNLX1RZUEVfU0laRShkZXZfdCAgICAgICBERVZfVCkKIElGKE5PVCBIQVZFX0RFVl9UKQogICBJRihNU1ZDKQpAQCAtMTI2MywyNCArMTYxMiw2IEBACiAgIEVORElGKFdJTjMyKQogRU5ESUYoTk9UIEhBVkVfUElEX1QpCiAjCi1DSEVDS19UWVBFX1NJWkUoaW50cHRyX3QgICBJTlRQVFJfVCkKLUlGKE5PVCBIQVZFX0lOVFBUUl9UKQotICBJRigiJHtDTUFLRV9TSVpFT0ZfVk9JRF9QfSIgRVFVQUwgOCkKLSAgICBTRVQoaW50cHRyX3QgImludDY0X3QiKQotICBFTFNFKCkKLSAgICBTRVQoaW50cHRyX3QgImludDMyX3QiKQotICBFTkRJRigpCi1FTkRJRihOT1QgSEFWRV9JTlRQVFJfVCkKLSMKLUNIRUNLX1RZUEVfU0laRSh1aW50cHRyX3QgICBVSU5UUFRSX1QpCi1JRihOT1QgSEFWRV9VSU5UUFRSX1QpCi0gIElGKCIke0NNQUtFX1NJWkVPRl9WT0lEX1B9IiBFUVVBTCA4KQotICAgIFNFVCh1aW50cHRyX3QgInVpbnQ2NF90IikKLSAgRUxTRSgpCi0gICAgU0VUKHVpbnRwdHJfdCAidWludDMyX3QiKQotICBFTkRJRigpCi1FTkRJRihOT1QgSEFWRV9VSU5UUFRSX1QpCi0jCiBDSEVDS19UWVBFX1NJWkUod2NoYXJfdCAgICAgU0laRU9GX1dDSEFSX1QpCiBJRihIQVZFX1NJWkVPRl9XQ0hBUl9UKQogICBTRVQoSEFWRV9XQ0hBUl9UIDEpCkBAIC0xMjk3LDYgKzE2MjgsMTEgQEAKICAgQ0hFQ0tfTElCUkFSWV9FWElTVFMoYXR0ciAic2V0eGF0dHIiICIiIEhBVkVfTElCQVRUUikKICAgSUYoSEFWRV9MSUJBVFRSKQogICAgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgImF0dHIiKQorICBFTFNFKCkKKyAgICBDSEVDS19MSUJSQVJZX0VYSVNUUyhnbnUgInNldHhhdHRyIiAiIiBIQVZFX0xJQkFUVFJfR05VKQorICAgIElGKEhBVkVfTElCQVRUUl9HTlUpCisgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICJnbnUiKQorICAgIEVORElGKCkKICAgRU5ESUYoSEFWRV9MSUJBVFRSKQogICBDSEVDS19TWU1CT0xfRVhJU1RTKEVYVEFUVFJfTkFNRVNQQUNFX1VTRVIgInN5cy90eXBlcy5oO3N5cy9leHRhdHRyLmgiIEhBVkVfREVDTF9FWFRBVFRSX05BTUVTUEFDRV9VU0VSKQogICBDSEVDS19TWU1CT0xfRVhJU1RTKFhBVFRSX05PRk9MTE9XICJzeXMveGF0dHIuaCIgSEFWRV9ERUNMX1hBVFRSX05PRk9MTE9XKQpAQCAtMTYyMCw2ICsxOTU2LDcgQEAKIENIRUNLX0NSWVBUTygiU0hBMjU2O1NIQTM4NDtTSEE1MTIiIExJQkMyKQogQ0hFQ0tfQ1JZUFRPKCJTSEEyNTY7U0hBMzg0O1NIQTUxMiIgTElCQzMpCiBDSEVDS19DUllQVE8oIk1ENTtTSEExO1NIQTI1NjtTSEEzODQ7U0hBNTEyIiBMSUJTWVNURU0pCitDSEVDS19DUllQVE8oIk1ENTtSTUQxNjA7U0hBMTtTSEEyNTY7U0hBMzg0O1NIQTUxMiIgTUJFRFRMUykKIENIRUNLX0NSWVBUTygiTUQ1O1JNRDE2MDtTSEExO1NIQTI1NjtTSEEzODQ7U0hBNTEyIiBORVRUTEUpCiBDSEVDS19DUllQVE8oIk1ENTtSTUQxNjA7U0hBMTtTSEEyNTY7U0hBMzg0O1NIQTUxMiIgT1BFTlNTTCkKIApAQCAtMTYzNCw2ICsxOTcxLDExIEBACiBJTkNMVURFX0RJUkVDVE9SSUVTKEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCiBBRERfREVGSU5JVElPTlMoLURIQVZFX0NPTkZJR19IKQogCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyBwYWNrYWdlcy4KKyMgSGFuZGxlIGdlbmVyYXRpb24gb2YgdGhlIGxpYmFyY2hpdmUucGMgZmlsZSBmb3IgcGtnLWNvbmZpZworSU5DTFVERShDcmVhdGVQa2dDb25maWdGaWxlKQorRU5ESUYoKQorCiAjCiAjIFJlZ2lzdGVyIGluc3RhbGxhdGlvbiBvZiBQREYgZG9jdW1lbnRzLgogIwpAQCAtMTY1OSwxMSArMjAwMSwyMiBAQAogICBBRERfREVGSU5JVElPTlMoLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUpCiBFTkRJRihNU1ZDKQogCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyB0ZXN0cy4KK0lGKEVOQUJMRV9URVNUKQorICBBRERfQ1VTVE9NX1RBUkdFVChydW5fYWxsX3Rlc3RzKQorRU5ESUYoRU5BQkxFX1RFU1QpCitFTkRJRigpCisKICMgV2UgbmVlZCBDb3JlU2VydmljZXMgb24gTWFjIE9TLgogSUYoQVBQTEUpCiAgIExJU1QoQVBQRU5EIEFERElUSU9OQUxfTElCUyAiLWZyYW1ld29yayBDb3JlU2VydmljZXMiKQogRU5ESUYoQVBQTEUpCiAKIGFkZF9zdWJkaXJlY3RvcnkobGliYXJjaGl2ZSkKK0lGKDApICMgQ01ha2UgZG9lcyBub3QgYnVpbGQgbGliYXJjaGl2ZSdzIGNvbW1hbmQtbGluZSB0b29scy4KK2FkZF9zdWJkaXJlY3RvcnkoY2F0KQorYWRkX3N1YmRpcmVjdG9yeSh0YXIpCithZGRfc3ViZGlyZWN0b3J5KGNwaW8pCitFTkRJRigpCiAKIGluc3RhbGwoRklMRVMgQ09QWUlORyBERVNUSU5BVElPTiAke0NNQUtFX0RPQ19ESVJ9L2NtbGliYXJjaGl2ZSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ09QWUlORyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ09QWUlORwppbmRleCA5Mzk1MmI3Li4xNGJiZWZhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NPUFlJTkcKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DT1BZSU5HCkBAIC0yMyw2ICsyMywxMyBAQAogKiBUaGUgZm9sbG93aW5nIHNvdXJjZSBmaWxlcyBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW46CiAgICBsaWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jCiAKKyogVGhlIGZvbGxvd2luZyBzb3VyY2UgZmlsZXMgYXJlIHRyaXBsZS1saWNlbnNlZCB3aXRoIHRoZSBhYmlsaXR5IHRvIGNob29zZQorICBmcm9tIENDMCAxLjAgVW5pdmVyc2FsLCBPcGVuU1NMIG9yIEFwYWNoZSAyLjAgbGljZW5zZXM6CisgICBsaWJhcmNoaXZlL2FyY2hpdmVfYmxha2UyLmgKKyAgIGxpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJfaW1wbC5oCisgICBsaWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc19yZWYuYworICAgbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNwX3JlZi5jCisKICogVGhlIGJ1aWxkIGZpbGVzLS0taW5jbHVkaW5nIE1ha2VmaWxlcywgY29uZmlndXJlIHNjcmlwdHMsCiAgIGFuZCBhdXhpbGlhcnkgc2NyaXB0cyB1c2VkIGFzIHBhcnQgb2YgdGhlIGNvbXBpbGUgcHJvY2Vzcy0tLWhhdmUKICAgd2lkZWx5IHZhcnlpbmcgbGljZW5zaW5nIHRlcm1zLiAgUGxlYXNlIGNoZWNrIGluZGl2aWR1YWwgZmlsZXMgYmVmb3JlCkBAIC0zNCw3ICs0MSw3IEBACiBzZWVtcyB0byBiZSBhbiB1bmF2b2lkYWJsZSBtZXNzLgogCiAKLUNvcHlyaWdodCAoYykgMjAwMy0yMDA5IDxhdXRob3Iocyk+CitDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOCA8YXV0aG9yKHMpPgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL0ZpbmRNYmVkVExTLmNtYWtlIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC9jbWFrZS9GaW5kTWJlZFRMUy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTE2Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC9jbWFrZS9GaW5kTWJlZFRMUy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitmaW5kX3BhdGgoTUJFRFRMU19JTkNMVURFX0RJUlMgbWJlZHRscy9zc2wuaCkKKworZmluZF9saWJyYXJ5KE1CRURUTFNfTElCUkFSWSBtYmVkdGxzKQorZmluZF9saWJyYXJ5KE1CRURYNTA5X0xJQlJBUlkgbWJlZHg1MDkpCitmaW5kX2xpYnJhcnkoTUJFRENSWVBUT19MSUJSQVJZIG1iZWRjcnlwdG8pCisKK3NldChNQkVEVExTX0xJQlJBUklFUyAiJHtNQkVEVExTX0xJQlJBUll9IiAiJHtNQkVEWDUwOV9MSUJSQVJZfSIgIiR7TUJFRENSWVBUT19MSUJSQVJZfSIpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTUJFRFRMUyBERUZBVUxUX01TRworICAgIE1CRURUTFNfSU5DTFVERV9ESVJTIE1CRURUTFNfTElCUkFSWSBNQkVEWDUwOV9MSUJSQVJZIE1CRURDUllQVE9fTElCUkFSWSkKKworbWFya19hc19hZHZhbmNlZChNQkVEVExTX0lOQ0xVREVfRElSUyBNQkVEVExTX0xJQlJBUlkgTUJFRFg1MDlfTElCUkFSWSBNQkVEQ1JZUFRPX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL2NvbmZpZy5oLmluIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC9jbWFrZS9jb25maWcuaC5pbgppbmRleCAxODUxZDgxLi5mMzg2MDFmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL2NvbmZpZy5oLmluCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvY21ha2UvY29uZmlnLmguaW4KQEAgLTcsMTc4ICs3LDYgQEAKICAqIEVuc3VyZSB3ZSBoYXZlIEM5OS1zdHlsZSBpbnQ2NF90LCBldGMsIGFsbCBkZWZpbmVkLgogICovCiAKLS8qIEZpcnN0LCB3ZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBoYXMgYWxyZWFkeSBkZWZpbmVkIHRoZW0uICovCi0jY21ha2VkZWZpbmUgSEFWRV9JTlQxNl9UCi0jY21ha2VkZWZpbmUgSEFWRV9JTlQzMl9UCi0jY21ha2VkZWZpbmUgSEFWRV9JTlQ2NF9UCi0jY21ha2VkZWZpbmUgSEFWRV9JTlRNQVhfVAotCi0jY21ha2VkZWZpbmUgSEFWRV9VSU5UOF9UCi0jY21ha2VkZWZpbmUgSEFWRV9VSU5UMTZfVAotI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDMyX1QKLSNjbWFrZWRlZmluZSBIQVZFX1VJTlQ2NF9UCi0jY21ha2VkZWZpbmUgSEFWRV9VSU5UTUFYX1QKLQotLyogV2UgbWlnaHQgaGF2ZSB0aGUgdHlwZXMgd2Ugd2FudCB1bmRlciBvdGhlciBzcGVsbGluZ3MuICovCi0jY21ha2VkZWZpbmUgSEFWRV9fX0lOVDY0Ci0jY21ha2VkZWZpbmUgSEFWRV9VX0lOVDY0X1QKLSNjbWFrZWRlZmluZSBIQVZFX1VOU0lHTkVEX19fSU5UNjQKLQotLyogVGhlIHNpemVzIG9mIHZhcmlvdXMgc3RhbmRhcmQgaW50ZWdlciB0eXBlcy4gKi8KLUBTSVpFX09GX1NIT1JUX0NPREVACi1AU0laRV9PRl9JTlRfQ09ERUAKLUBTSVpFX09GX0xPTkdfQ09ERUAKLUBTSVpFX09GX0xPTkdfTE9OR19DT0RFQAotQFNJWkVfT0ZfVU5TSUdORURfU0hPUlRfQ09ERUAKLUBTSVpFX09GX1VOU0lHTkVEX0NPREVACi1AU0laRV9PRl9VTlNJR05FRF9MT05HX0NPREVACi1AU0laRV9PRl9VTlNJR05FRF9MT05HX0xPTkdfQ09ERUAKLQotLyoKLSAqIElmIHdlIGxhY2sgaW50NjRfdCwgZGVmaW5lIGl0IHRvIHRoZSBmaXJzdCBvZiBfX2ludDY0LCBpbnQsIGxvbmcsIGFuZCBsb25nIGxvbmcKLSAqIHRoYXQgZXhpc3RzIGFuZCBpcyB0aGUgcmlnaHQgc2l6ZS4KLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfSU5UNjRfVCkgJiYgZGVmaW5lZChIQVZFX19fSU5UNjQpCi10eXBlZGVmIF9faW50NjQgaW50NjRfdDsKLSNkZWZpbmUgSEFWRV9JTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UNjRfVCkgJiYgU0laRV9PRl9JTlQgPT0gOAotdHlwZWRlZiBpbnQgaW50NjRfdDsKLSNkZWZpbmUgSEFWRV9JTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UNjRfVCkgJiYgU0laRV9PRl9MT05HID09IDgKLXR5cGVkZWYgbG9uZyBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiBTSVpFX09GX0xPTkdfTE9ORyA9PSA4Ci10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKQotI2Vycm9yIE5vIDY0LWJpdCBpbnRlZ2VyIHR5cGUgd2FzIGZvdW5kLgotI2VuZGlmCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIGludDMyX3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfSU5UMzJfVCkgJiYgU0laRV9PRl9JTlQgPT0gNAotdHlwZWRlZiBpbnQgaW50MzJfdDsKLSNkZWZpbmUgSEFWRV9JTlQzMl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UMzJfVCkgJiYgU0laRV9PRl9MT05HID09IDQKLXR5cGVkZWYgbG9uZyBpbnQzMl90OwotI2RlZmluZSBIQVZFX0lOVDMyX1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQzMl9UKQotI2Vycm9yIE5vIDMyLWJpdCBpbnRlZ2VyIHR5cGUgd2FzIGZvdW5kLgotI2VuZGlmCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIGludDE2X3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfSU5UMTZfVCkgJiYgU0laRV9PRl9JTlQgPT0gMgotdHlwZWRlZiBpbnQgaW50MTZfdDsKLSNkZWZpbmUgSEFWRV9JTlQxNl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UMTZfVCkgJiYgU0laRV9PRl9TSE9SVCA9PSAyCi10eXBlZGVmIHNob3J0IGludDE2X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UMTZfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDE2X1QpCi0jZXJyb3IgTm8gMTYtYml0IGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyoKLSAqIFNpbWlsYXJseSBmb3IgdWludDY0X3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIGRlZmluZWQoSEFWRV9VTlNJR05FRF9fX0lOVDY0KQotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIFNJWkVfT0ZfVU5TSUdORUQgPT0gOAotdHlwZWRlZiB1bnNpZ25lZCB1aW50NjRfdDsKLSNkZWZpbmUgSEFWRV9VSU5UNjRfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQ2NF9UKSAmJiBTSVpFX09GX1VOU0lHTkVEX0xPTkcgPT0gOAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIFNJWkVfT0ZfVU5TSUdORURfTE9OR19MT05HID09IDgKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpCi0jZXJyb3IgTm8gNjQtYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotCi0vKgotICogU2ltaWxhcmx5IGZvciB1aW50MzJfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMzJfVCkgJiYgU0laRV9PRl9VTlNJR05FRCA9PSA0Ci10eXBlZGVmIHVuc2lnbmVkIHVpbnQzMl90OwotI2RlZmluZSBIQVZFX1VJTlQzMl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDMyX1QpICYmIFNJWkVfT0ZfVU5TSUdORURfTE9ORyA9PSA0Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDMyX3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDMyX1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMzJfVCkKLSNlcnJvciBObyAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciB1aW50MTZfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMTZfVCkgJiYgU0laRV9PRl9VTlNJR05FRCA9PSAyCi10eXBlZGVmIHVuc2lnbmVkIHVpbnQxNl90OwotI2RlZmluZSBIQVZFX1VJTlQxNl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDE2X1QpICYmIFNJWkVfT0ZfVU5TSUdORURfU0hPUlQgPT0gMgotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKLSNkZWZpbmUgSEFWRV9VSU5UMTZfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQxNl9UKQotI2Vycm9yIE5vIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2FzIGZvdW5kLgotI2VuZGlmCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIHVpbnQ4X3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDhfVCkKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwotI2RlZmluZSBIQVZFX1VJTlQ4X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMTZfVCkKLSNlcnJvciBObyA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2FzIGZvdW5kLgotI2VuZGlmCi0KLS8qIERlZmluZSBpbnRtYXhfdCBhbmQgdWludG1heF90IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IGRlZmluZWQuICovCi0jaWYgIWRlZmluZWQoSEFWRV9JTlRNQVhfVCkKLXR5cGVkZWYgaW50NjRfdCBpbnRtYXhfdDsKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UTUFYX1QpCi10eXBlZGVmIHVpbnQ2NF90IHVpbnRtYXhfdDsKLSNlbmRpZgotCiAvKiBEZWZpbmUgWkxJQl9XSU5BUEkgaWYgemxpYiB3YXMgYnVpbHQgb24gVmlzdWFsIFN0dWRpby4gKi8KICNjbWFrZWRlZmluZSBaTElCX1dJTkFQSSAxCiAKQEAgLTQyNiw1OCArMjU0LDE0IEBACiAgICBkb24ndC4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfQUNMX1VTRVIgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYElOVDMyX01BWCcsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX0lOVDMyX01BWCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgSU5UMzJfTUlOJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfSU5UMzJfTUlOIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBJTlQ2NF9NQVgnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9JTlQ2NF9NQVggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYElOVDY0X01JTicsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX0lOVDY0X01JTiAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgSU5UTUFYX01BWCcsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX0lOVE1BWF9NQVggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYElOVE1BWF9NSU4nLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9JTlRNQVhfTUlOIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBTRVRBQ0wnLCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCiAgICAqLwogI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9TRVRBQ0wgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFNJWkVfTUFYJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfU0laRV9NQVggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFNTSVpFX01BWCcsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX1NTSVpFX01BWCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RyZXJyb3JfcicsIGFuZCB0byAwIGlmIHlvdQogICAgZG9uJ3QuICovCiAjY21ha2VkZWZpbmUgSEFWRV9ERUNMX1NUUkVSUk9SX1IgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFVJTlQzMl9NQVgnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9VSU5UMzJfTUFYIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBVSU5UNjRfTUFYJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfVUlOVDY0X01BWCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgVUlOVE1BWF9NQVgnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9VSU5UTUFYX01BWCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgWEFUVFJfTk9GT0xMT1cnLCBhbmQgdG8gMCBpZgogICAgeW91IGRvbid0LiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9YQVRUUl9OT0ZPTExPVyAxCkBAIC02NDcsOSArNDMxLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aWNvbnYuaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9JQ09OVl9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfSU9fSCAxCiAKQEAgLTY4Myw2ICs0NjQsMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYnoyJyBsaWJyYXJ5ICgtbGJ6MikuICovCiAjY21ha2VkZWZpbmUgSEFWRV9MSUJCWjIgMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGIyJyBsaWJyYXJ5ICgtbGIyKS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xJQkIyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxibGFrZTIuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9CTEFLRTJfSCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2hhcnNldCcgbGlicmFyeSAoLWxjaGFyc2V0KS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQkNIQVJTRVQgMQogCkBAIC03MDcsNiArNDk0LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHpvMicgbGlicmFyeSAoLWxsem8yKS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQkxaTzIgMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1iZWRjcnlwdG8nIGxpYnJhcnkgKC1sbWJlZGNyeXB0bykuICovCisjY21ha2VkZWZpbmUgSEFWRV9MSUJNQkVEQ1JZUFRPIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBuZXR0bGUnIGxpYnJhcnkgKC1sbmV0dGxlKS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQk5FVFRMRSAxCiAKQEAgLTk0Niw5ICs3MzYsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhcmcuaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9TVERBUkdfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfU1RESU5UX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1NURExJQl9IIDEKIApAQCAtMTExMSw2ICs4OTgsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9VTklTVERfSCAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5saW5rYXQnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVU5MSU5LQVQgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVuc2V0ZW52JyBmdW5jdGlvbi4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1VOU0VURU5WIDEKIApAQCAtMTIwNCw2ICs5OTQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZ2V0X3RpbWV6b25lJyBmdW5jdGlvbi4gKi8KICNjbWFrZWRlZmluZSBIQVZFX19HRVRfVElNRVpPTkUgMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nbXRpbWU2NF9zJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX19HTVRJTUU2NF9TIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfbG9jYWx0aW1lNjRfcycgZnVuY3Rpb24uICovCiAjY21ha2VkZWZpbmUgSEFWRV9fTE9DQUxUSU1FNjRfUyAxCiAKQEAgLTEzMjIsOCArMTExNSw0NSBAQAogLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCiAjY21ha2VkZWZpbmUgdWlkX3QgJHt1aWRfdH0KIAotLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwotI2NtYWtlZGVmaW5lIGludHB0cl90ICR7aW50cHRyX3R9CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAotLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwotI2NtYWtlZGVmaW5lIHVpbnRwdHJfdCAke3VpbnRwdHJfdH0KKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UNjRfVAordHlwZWRlZiBLV0lNTF9JTlRfaW50NjRfdCBpbnQ2NF90OworI2VuZGlmCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX0lOVDMyX1QKK3R5cGVkZWYgS1dJTUxfSU5UX2ludDMyX3QgaW50MzJfdDsKKyNlbmRpZgorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9JTlQxNl9UCit0eXBlZGVmIEtXSU1MX0lOVF9pbnQxNl90IGludDE2X3Q7CisjZW5kaWYKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UOF9UCit0eXBlZGVmIEtXSU1MX0lOVF9pbnQ4X3QgaW50OF90OworI2VuZGlmCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX0lOVFBUUl9UCit0eXBlZGVmIEtXSU1MX0lOVF9pbnRwdHJfdCBpbnRwdHJfdDsKKyNlbmRpZgorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UNjRfVAordHlwZWRlZiBLV0lNTF9JTlRfdWludDY0X3QgdWludDY0X3Q7CisjZW5kaWYKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfVUlOVDMyX1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnQzMl90IHVpbnQzMl90OworI2VuZGlmCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX1VJTlQxNl9UCit0eXBlZGVmIEtXSU1MX0lOVF91aW50MTZfdCB1aW50MTZfdDsKKyNlbmRpZgorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UOF9UCit0eXBlZGVmIEtXSU1MX0lOVF91aW50OF90IHVpbnQ4X3Q7CisjZW5kaWYKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfVUlOVFBUUl9UCit0eXBlZGVmIEtXSU1MX0lOVF91aW50cHRyX3QgdWludHB0cl90OworI2VuZGlmCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmZGVmIEtXSU1MX0lOVF9IQVZFX1NURElOVF9ICisjIGRlZmluZSBIQVZFX1NURElOVF9IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2lmZGVmIEtXSU1MX0lOVF9IQVZFX0lOVFRZUEVTX0gKKyMgZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvdmVyc2lvbiBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvdmVyc2lvbgppbmRleCAyNDI3ZWFiLi43OGJlM2FiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL3ZlcnNpb24KKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC92ZXJzaW9uCkBAIC0xICsxIEBACi0zMDAzMDAzCiszMDA0MDAyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTM4ZDY2NC4uODkxYTE0MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtNTEsNiArNTEsOCBAQAogICBhcmNoaXZlX3BsYXRmb3JtX2FjbC5oCiAgIGFyY2hpdmVfcGxhdGZvcm1feGF0dHIuaAogICBhcmNoaXZlX3BwbWRfcHJpdmF0ZS5oCisgIGFyY2hpdmVfcHBtZDguYworICBhcmNoaXZlX3BwbWQ4X3ByaXZhdGUuaAogICBhcmNoaXZlX3BwbWQ3LmMKICAgYXJjaGl2ZV9wcG1kN19wcml2YXRlLmgKICAgYXJjaGl2ZV9wcml2YXRlLmgKQEAgLTEwMCw2ICsxMDIsNyBAQAogICBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhLmMKICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X210cmVlLmMKICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jCisgIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1LmMKICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhdy5jCiAgIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIuYwogICBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfd2FyYy5jCkBAIC0xNDcsNiArMTUwLDcgQEAKICAgYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2lzbzk2NjAuYwogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfbXRyZWUuYwogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcGF4LmMKKyAgYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaAogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcmF3LmMKICAgYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYwogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdXN0YXIuYwpAQCAtMTY3LDYgKzE3MSw3IEBACiAgIGFyY2hpdmVfZW50cnkuMwogICBhcmNoaXZlX2VudHJ5X2FjbC4zCiAgIGFyY2hpdmVfZW50cnlfbGlua2lmeS4zCisgIGFyY2hpdmVfZW50cnlfbWlzYy4zCiAgIGFyY2hpdmVfZW50cnlfcGF0aHMuMwogICBhcmNoaXZlX2VudHJ5X3Blcm1zLjMKICAgYXJjaGl2ZV9lbnRyeV9zdGF0LjMKQEAgLTIxNSw2ICsyMjAsMTEgQEAKICAgTElTVChBUFBFTkQgbGliYXJjaGl2ZV9TT1VSQ0VTIGZpbHRlcl9mb3JrX3dpbmRvd3MuYykKIEVORElGKFdJTjMyIEFORCBOT1QgQ1lHV0lOKQogCitJRihBUkNISVZFX0JMQUtFMikKKyAgTElTVChBUFBFTkQgbGliYXJjaGl2ZV9TT1VSQ0VTIGFyY2hpdmVfYmxha2Uyc3BfcmVmLmMpCisgIExJU1QoQVBQRU5EIGxpYmFyY2hpdmVfU09VUkNFUyBhcmNoaXZlX2JsYWtlMnNfcmVmLmMpCitFTkRJRihBUkNISVZFX0JMQUtFMikKKwogSUYoQVJDSElWRV9BQ0xfREFSV0lOKQogICBMSVNUKEFQUEVORCBsaWJhcmNoaXZlX1NPVVJDRVMgYXJjaGl2ZV9kaXNrX2FjbF9kYXJ3aW4uYykKIEVMU0VJRihBUkNISVZFX0FDTF9GUkVFQlNEKQpAQCAtMjI4LDMgKzIzOCwzMyBAQAogIyBDTWFrZSBuZWVkcyBqdXN0IG9uZSBzdGF0aWMgImNtbGliYXJjaGl2ZSIgbGlicmFyeS4KIEFERF9MSUJSQVJZKGNtbGliYXJjaGl2ZSBTVEFUSUMgJHtsaWJhcmNoaXZlX1NPVVJDRVN9ICR7aW5jbHVkZV9IRUFERVJTfSkKIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhjbWxpYmFyY2hpdmUgJHtBRERJVElPTkFMX0xJQlN9KQorCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyBmdWxsIHBhY2thZ2UuCisjIExpYmFyY2hpdmUgaXMgYSBzaGFyZWQgbGlicmFyeQorQUREX0xJQlJBUlkoYXJjaGl2ZSBTSEFSRUQgJHtsaWJhcmNoaXZlX1NPVVJDRVN9ICR7aW5jbHVkZV9IRUFERVJTfSkKK1RBUkdFVF9JTkNMVURFX0RJUkVDVE9SSUVTKGFyY2hpdmUgUFVCTElDIC4pCitUQVJHRVRfTElOS19MSUJSQVJJRVMoYXJjaGl2ZSAke0FERElUSU9OQUxfTElCU30pCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoYXJjaGl2ZSBQUk9QRVJUSUVTIFNPVkVSU0lPTiAke1NPVkVSU0lPTn0pCisKKyMgYXJjaGl2ZV9zdGF0aWMgaXMgYSBzdGF0aWMgbGlicmFyeQorQUREX0xJQlJBUlkoYXJjaGl2ZV9zdGF0aWMgU1RBVElDICR7bGliYXJjaGl2ZV9TT1VSQ0VTfSAke2luY2x1ZGVfSEVBREVSU30pCitUQVJHRVRfTElOS19MSUJSQVJJRVMoYXJjaGl2ZV9zdGF0aWMgJHtBRERJVElPTkFMX0xJQlN9KQorU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGFyY2hpdmVfc3RhdGljIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUworICBMSUJBUkNISVZFX1NUQVRJQykKKyMgT24gUG9zaXggc3lzdGVtcywgbGliYXJjaGl2ZS5zbyBhbmQgbGliYXJjaGl2ZS5hIGNhbiBjby1leGlzdC4KK0lGKE5PVCBXSU4zMiBPUiBDWUdXSU4pCisgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhhcmNoaXZlX3N0YXRpYyBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIGFyY2hpdmUpCitFTkRJRihOT1QgV0lOMzIgT1IgQ1lHV0lOKQorCitJRihFTkFCTEVfSU5TVEFMTCkKKyAgIyBIb3cgdG8gaW5zdGFsbCB0aGUgbGlicmFyaWVzCisgIElOU1RBTEwoVEFSR0VUUyBhcmNoaXZlIGFyY2hpdmVfc3RhdGljCisgICAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4KKyAgICAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OIGxpYgorICAgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliKQorICBJTlNUQUxMX01BTigke2xpYmFyY2hpdmVfTUFOU30pCisgIElOU1RBTEwoRklMRVMgJHtpbmNsdWRlX0hFQURFUlN9IERFU1RJTkFUSU9OIGluY2x1ZGUpCitFTkRJRigpCisKK2FkZF9zdWJkaXJlY3RvcnkodGVzdCkKK0VORElGKCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCmluZGV4IGYzZWJiZmUuLjU3NGUwODcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmUuaApAQCAtMzYsNyArMzYsNyBAQAogICogYXNzZXJ0IHRoYXQgQVJDSElWRV9WRVJTSU9OX05VTUJFUiA+PSAyMDEyMTA4LgogICovCiAvKiBOb3RlOiBDb21waWxlciB3aWxsIGNvbXBsYWluIGlmIHRoaXMgZG9lcyBub3QgbWF0Y2ggYXJjaGl2ZV9lbnRyeS5oISAqLwotI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fTlVNQkVSIDMwMDMwMDMKKyNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX05VTUJFUiAzMDA0MDAyCiAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLyogZm9yIHdjaGFyX3QgKi8KQEAgLTUyLDcgKzUyLDcgQEAKICAqLwogI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiBfX0JPUkxBTkRDX18gPj0gMHg1NjAKICMgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZWxpZiAhZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fSU5URVJJWCkgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfU0NPX0RTKSAmJiAhZGVmaW5lZChfX29zZl9fKQorI2VsaWYgIWRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX0lOVEVSSVgpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoX1NDT19EUykgJiYgIWRlZmluZWQoX19vc2ZfXykgJiYgIWRlZmluZWQoX19DTEFOR19JTlRUWVBFU19IKQogIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2VuZGlmCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogLyoKICAqIFRleHR1YWwgbmFtZS92ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB1c2VmdWwgZm9yIHZlcnNpb24gZGlzcGxheXMuCiAgKi8KLSNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX09OTFlfU1RSSU5HICIzLjMuMyIKKyNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX09OTFlfU1RSSU5HICIzLjQuMiIKICNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX1NUUklORyAibGliYXJjaGl2ZSAiIEFSQ0hJVkVfVkVSU0lPTl9PTkxZX1NUUklORwogX19MQV9ERUNMIGNvbnN0IGNoYXIgKglhcmNoaXZlX3ZlcnNpb25fc3RyaW5nKHZvaWQpOwogCkBAIC0zMzcsNiArMzM3LDcgQEAKICNkZWZpbmUJQVJDSElWRV9GT1JNQVRfUkFSCQkJMHhEMDAwMAogI2RlZmluZQlBUkNISVZFX0ZPUk1BVF83WklQCQkJMHhFMDAwMAogI2RlZmluZQlBUkNISVZFX0ZPUk1BVF9XQVJDCQkJMHhGMDAwMAorI2RlZmluZQlBUkNISVZFX0ZPUk1BVF9SQVJfVjUJCQkweDEwMDAwMAogCiAvKgogICogQ29kZXMgcmV0dXJuZWQgYnkgYXJjaGl2ZV9yZWFkX2Zvcm1hdF9jYXBhYmlsaXRpZXMoKS4KQEAgLTQ0Niw2ICs0NDcsNyBAQAogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhKHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUoc3RydWN0IGFyY2hpdmUgKik7CiBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIoc3RydWN0IGFyY2hpdmUgKik7CitfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1KHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3KHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyKHN0cnVjdCBhcmNoaXZlICopOwogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfd2FyYyhzdHJ1Y3QgYXJjaGl2ZSAqKTsKQEAgLTY4OCw2ICs2OTAsOCBAQAogI2RlZmluZSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyAoMHgxMDAwMCkKIC8qIERlZmF1bHQ6IERvIG5vdCBjbGVhciBuby1jaGFuZ2UgZmxhZ3Mgd2hlbiB1bmxpbmtpbmcgb2JqZWN0ICovCiAjZGVmaW5lCUFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MJKDB4MjAwMDApCisvKiBEZWZhdWx0OiBEbyBub3QgZXh0cmFjdCBhdG9taWNhbGx5ICh1c2luZyByZW5hbWUpICovCisjZGVmaW5lCUFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUwkJKDB4NDAwMDApCiAKIF9fTEFfREVDTCBpbnQgYXJjaGl2ZV9yZWFkX2V4dHJhY3Qoc3RydWN0IGFyY2hpdmUgKiwgc3RydWN0IGFyY2hpdmVfZW50cnkgKiwKIAkJICAgICBpbnQgZmxhZ3MpOwpAQCAtMTA5MCw2ICsxMDk0LDggQEAKICAqLwogX19MQV9ERUNMIGludAlhcmNoaXZlX21hdGNoX3BhdGhfZXhjbHVkZWQoc3RydWN0IGFyY2hpdmUgKiwKIAkJICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOworLyogQ29udHJvbCByZWN1cnNpdmUgaW5jbHVzaW9uIG9mIGRpcmVjdG9yeSBjb250ZW50IHdoZW4gZGlyZWN0b3J5IGlzIGluY2x1ZGVkLiBEZWZhdWx0IG9uLiAqLworX19MQV9ERUNMIGludAlhcmNoaXZlX21hdGNoX3NldF9pbmNsdXNpb25fcmVjdXJzaW9uKHN0cnVjdCBhcmNoaXZlICosIGludCk7CiAvKiBBZGQgZXhjbHVzaW9uIHBhdGhuYW1lIHBhdHRlcm4uICovCiBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfZXhjbHVkZV9wYXR0ZXJuKHN0cnVjdCBhcmNoaXZlICosIGNvbnN0IGNoYXIgKik7CiBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfZXhjbHVkZV9wYXR0ZXJuX3coc3RydWN0IGFyY2hpdmUgKiwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2FjbC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsLmMKaW5kZXggNDczNjUzMS4uOTUyZTIwZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsLmMKQEAgLTEzOCwxNCArMTM4LDEwIEBACiAJCWZyZWUoYWNsLT5hY2xfaGVhZCk7CiAJCWFjbC0+YWNsX2hlYWQgPSBhcDsKIAl9Ci0JaWYgKGFjbC0+YWNsX3RleHRfdyAhPSBOVUxMKSB7Ci0JCWZyZWUoYWNsLT5hY2xfdGV4dF93KTsKLQkJYWNsLT5hY2xfdGV4dF93ID0gTlVMTDsKLQl9Ci0JaWYgKGFjbC0+YWNsX3RleHQgIT0gTlVMTCkgewotCQlmcmVlKGFjbC0+YWNsX3RleHQpOwotCQlhY2wtPmFjbF90ZXh0ID0gTlVMTDsKLQl9CisJZnJlZShhY2wtPmFjbF90ZXh0X3cpOworCWFjbC0+YWNsX3RleHRfdyA9IE5VTEw7CisJZnJlZShhY2wtPmFjbF90ZXh0KTsKKwlhY2wtPmFjbF90ZXh0ID0gTlVMTDsKIAlhY2wtPmFjbF9wID0gTlVMTDsKIAlhY2wtPmFjbF90eXBlcyA9IDA7CiAJYWNsLT5hY2xfc3RhdGUgPSAwOyAvKiBOb3QgY291bnRpbmcuICovCkBAIC0zMjQsMTQgKzMyMCwxMCBAQAogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAotCWlmIChhY2wtPmFjbF90ZXh0X3cgIT0gTlVMTCkgewotCQlmcmVlKGFjbC0+YWNsX3RleHRfdyk7Ci0JCWFjbC0+YWNsX3RleHRfdyA9IE5VTEw7Ci0JfQotCWlmIChhY2wtPmFjbF90ZXh0ICE9IE5VTEwpIHsKLQkJZnJlZShhY2wtPmFjbF90ZXh0KTsKLQkJYWNsLT5hY2xfdGV4dCA9IE5VTEw7Ci0JfQorCWZyZWUoYWNsLT5hY2xfdGV4dF93KTsKKwlhY2wtPmFjbF90ZXh0X3cgPSBOVUxMOworCWZyZWUoYWNsLT5hY2xfdGV4dCk7CisJYWNsLT5hY2xfdGV4dCA9IE5VTEw7CiAKIAkvKgogCSAqIElmIHRoZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBhbHJlYWR5IGluIHRoZSBsaXN0LCBvdmVyd3JpdGUgaXQuCkBAIC03NTMsOCArNzQ1LDEwIEBACiAJCQlhcHBlbmRfZW50cnlfdygmd3AsIHByZWZpeCwgYXAtPnR5cGUsIGFwLT50YWcsIGZsYWdzLAogCQkJICAgIHduYW1lLCBhcC0+cGVybXNldCwgaWQpOwogCQkJY291bnQrKzsKLQkJfSBlbHNlIGlmIChyIDwgMCAmJiBlcnJubyA9PSBFTk9NRU0pCisJCX0gZWxzZSBpZiAociA8IDAgJiYgZXJybm8gPT0gRU5PTUVNKSB7CisJCQlmcmVlKHdzKTsKIAkJCXJldHVybiAoTlVMTCk7CisJCX0KIAl9CiAKIAkvKiBBZGQgdGVybWluYXRpbmcgY2hhcmFjdGVyICovCkBAIC05NzUsOCArOTY5LDEwIEBACiAJCQlwcmVmaXggPSBOVUxMOwogCQlyID0gYXJjaGl2ZV9tc3RyaW5nX2dldF9tYnNfbCgKIAkJICAgICZhcC0+bmFtZSwgJm5hbWUsICZsZW4sIHNjKTsKLQkJaWYgKHIgIT0gMCkKKwkJaWYgKHIgIT0gMCkgeworCQkJZnJlZShzKTsKIAkJCXJldHVybiAoTlVMTCk7CisJCX0KIAkJaWYgKGNvdW50ID4gMCkKIAkJCSpwKysgPSBzZXBhcmF0b3I7CiAJCWlmIChuYW1lID09IE5VTEwgfHwKQEAgLTE1ODEsMTcgKzE1NzcsMjkgQEAKIAogCS8qIFNjYW4gZm9yIHRoZSBzZXBhcmF0b3IuICovCiAJd2hpbGUgKCoqd3AgIT0gTCdcMCcgJiYgKip3cCAhPSBMJywnICYmICoqd3AgIT0gTCc6JyAmJgotCSAgICAqKndwICE9IEwnXG4nKSB7CisJICAgICoqd3AgIT0gTCdcbicgJiYgKip3cCAhPSBMJyMnKSB7CiAJCSgqd3ApKys7CiAJfQogCSpzZXAgPSAqKndwOwogCi0JLyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGxvY2F0ZSBlbmQgb2YgZmllbGQuICovCi0JKmVuZCA9ICp3cCAtIDE7Ci0Jd2hpbGUgKCoqZW5kID09IEwnICcgfHwgKiplbmQgPT0gTCdcdCcgfHwgKiplbmQgPT0gTCdcbicpIHsKLQkJKCplbmQpLS07CisJLyogTG9jYXRlIGVuZCBvZiBmaWVsZCwgdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIGlmIG5lY2Vzc2FyeSAqLworCWlmICgqd3AgPT0gKnN0YXJ0KSB7CisJCSplbmQgPSAqd3A7CisJfSBlbHNlIHsKKwkJKmVuZCA9ICp3cCAtIDE7CisJCXdoaWxlICgqKmVuZCA9PSBMJyAnIHx8ICoqZW5kID09IEwnXHQnIHx8ICoqZW5kID09IEwnXG4nKSB7CisJCQkoKmVuZCktLTsKKwkJfQorCQkoKmVuZCkrKzsKIAl9Ci0JKCplbmQpKys7CisKKwkvKiBIYW5kbGUgaW4tZmllbGQgY29tbWVudHMgKi8KKwlpZiAoKnNlcCA9PSBMJyMnKSB7CisJCXdoaWxlICgqKndwICE9IEwnXDAnICYmICoqd3AgIT0gTCcsJyAmJiAqKndwICE9IEwnXG4nKSB7CisJCQkoKndwKSsrOworCQl9CisJCSpzZXAgPSAqKndwOworCX0KIAogCS8qIEFkanVzdCBzY2FubmVyIGxvY2F0aW9uLiAqLwogCWlmICgqKndwICE9IEwnXDAnKQpAQCAtMTY0Miw3ICsxNjUwLDcgQEAKIAlyZXQgPSBBUkNISVZFX09LOwogCXR5cGVzID0gMDsKIAotCXdoaWxlICh0ZXh0ICE9IE5VTEwgICYmICAqdGV4dCAhPSAnXDAnKSB7CisJd2hpbGUgKHRleHQgIT0gTlVMTCAmJiAgKnRleHQgIT0gJ1wwJykgewogCQkvKgogCQkgKiBQYXJzZSB0aGUgZmllbGRzIG91dCBvZiB0aGUgbmV4dCBlbnRyeSwKIAkJICogYWR2YW5jZSAndGV4dCcgdG8gc3RhcnQgb2YgbmV4dCBlbnRyeS4KQEAgLTE3MDcsNiArMTcxNSwxMSBAQAogCQkJc3QgPSBmaWVsZFtuXS5zdGFydCArIDE7CiAJCQlsZW4gPSBmaWVsZFtuXS5lbmQgLSBmaWVsZFtuXS5zdGFydDsKIAorCQkJaWYgKGxlbiA9PSAwKSB7CisJCQkJcmV0ID0gQVJDSElWRV9XQVJOOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQlzd2l0Y2ggKCpzKSB7CiAJCQljYXNlICd1JzoKIAkJCQlpZiAobGVuID09IDEgfHwgKGxlbiA9PSA0CkBAIC0yMDUzLDE3ICsyMDY2LDMwIEBACiAJKnN0YXJ0ID0gKnA7CiAKIAkvKiBTY2FuIGZvciB0aGUgc2VwYXJhdG9yLiAqLwotCXdoaWxlICgqKnAgIT0gJ1wwJyAmJiAqKnAgIT0gJywnICYmICoqcCAhPSAnOicgJiYgKipwICE9ICdcbicpIHsKKwl3aGlsZSAoKipwICE9ICdcMCcgJiYgKipwICE9ICcsJyAmJiAqKnAgIT0gJzonICYmICoqcCAhPSAnXG4nICYmCisJICAgICoqcCAhPSAnIycpIHsKIAkJKCpwKSsrOwogCX0KIAkqc2VwID0gKipwOwogCi0JLyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGxvY2F0ZSBlbmQgb2YgZmllbGQuICovCi0JKmVuZCA9ICpwIC0gMTsKLQl3aGlsZSAoKiplbmQgPT0gJyAnIHx8ICoqZW5kID09ICdcdCcgfHwgKiplbmQgPT0gJ1xuJykgewotCQkoKmVuZCktLTsKKwkvKiBMb2NhdGUgZW5kIG9mIGZpZWxkLCB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCpwID09ICpzdGFydCkgeworCQkqZW5kID0gKnA7CisJfSBlbHNlIHsKKwkJKmVuZCA9ICpwIC0gMTsKKwkJd2hpbGUgKCoqZW5kID09ICcgJyB8fCAqKmVuZCA9PSAnXHQnIHx8ICoqZW5kID09ICdcbicpIHsKKwkJCSgqZW5kKS0tOworCQl9CisJCSgqZW5kKSsrOwogCX0KLQkoKmVuZCkrKzsKKworCS8qIEhhbmRsZSBpbi1maWVsZCBjb21tZW50cyAqLworCWlmICgqc2VwID09ICcjJykgeworCQl3aGlsZSAoKipwICE9ICdcMCcgJiYgKipwICE9ICcsJyAmJiAqKnAgIT0gJ1xuJykgeworCQkJKCpwKSsrOworCQl9CisJCSpzZXAgPSAqKnA7CisJfQogCiAJLyogQWRqdXN0IHNjYW5uZXIgbG9jYXRpb24uICovCiAJaWYgKCoqcCAhPSAnXDAnKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2FjbF9wcml2YXRlLmgKaW5kZXggZWYwYjAyMy4uYWYxMDgxNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9hY2xfcHJpdmF0ZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9BQ0xfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfQUNMX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX0FDTF9QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9BQ0xfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlX3N0cmluZy5oIgogCiBzdHJ1Y3QgYXJjaGl2ZV9hY2xfZW50cnkgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2UyLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZmZTZmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2UyLmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgICBCTEFLRTIgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIHBhY2thZ2UgLSByZWZlcmVuY2UgQyBpbXBsZW1lbnRhdGlvbnMKKworICAgQ29weXJpZ2h0IDIwMTIsIFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uICBZb3UgbWF5IHVzZSB0aGlzIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhlIENDMCwgdGhlIE9wZW5TU0wgTGljZW5jZSwgb3IgdGhlIEFwYWNoZSBQdWJsaWMgTGljZW5zZSAyLjAsIGF0CisgICB5b3VyIG9wdGlvbi4gIFRoZSB0ZXJtcyBvZiB0aGVzZSBsaWNlbnNlcyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgIC0gQ0MwIDEuMCBVbml2ZXJzYWwgOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAKKyAgIC0gT3BlblNTTCBsaWNlbnNlICAgOiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCisgICAtIEFwYWNoZSAyLjAgICAgICAgIDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJMQUtFMiBoYXNoIGZ1bmN0aW9uIGNhbiBiZSBmb3VuZCBhdAorICAgaHR0cHM6Ly9ibGFrZTIubmV0LgorKi8KKworI2lmbmRlZiBBUkNISVZFX0JMQUtFMl9ICisjZGVmaW5lIEFSQ0hJVkVfQkxBS0UyX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQkxBS0UyX1BBQ0tFRCh4KSBfX3ByYWdtYShwYWNrKHB1c2gsIDEpKSB4IF9fcHJhZ21hKHBhY2socG9wKSkKKyNlbHNlCisjZGVmaW5lIEJMQUtFMl9QQUNLRUQoeCkgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICBlbnVtIGJsYWtlMnNfY29uc3RhbnQKKyAgeworICAgIEJMQUtFMlNfQkxPQ0tCWVRFUyA9IDY0LAorICAgIEJMQUtFMlNfT1VUQllURVMgICA9IDMyLAorICAgIEJMQUtFMlNfS0VZQllURVMgICA9IDMyLAorICAgIEJMQUtFMlNfU0FMVEJZVEVTICA9IDgsCisgICAgQkxBS0UyU19QRVJTT05BTEJZVEVTID0gOAorICB9OworCisgIGVudW0gYmxha2UyYl9jb25zdGFudAorICB7CisgICAgQkxBS0UyQl9CTE9DS0JZVEVTID0gMTI4LAorICAgIEJMQUtFMkJfT1VUQllURVMgICA9IDY0LAorICAgIEJMQUtFMkJfS0VZQllURVMgICA9IDY0LAorICAgIEJMQUtFMkJfU0FMVEJZVEVTICA9IDE2LAorICAgIEJMQUtFMkJfUEVSU09OQUxCWVRFUyA9IDE2CisgIH07CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2Uyc19zdGF0ZV9fCisgIHsKKyAgICB1aW50MzJfdCBoWzhdOworICAgIHVpbnQzMl90IHRbMl07CisgICAgdWludDMyX3QgZlsyXTsKKyAgICB1aW50OF90ICBidWZbQkxBS0UyU19CTE9DS0JZVEVTXTsKKyAgICBzaXplX3QgICBidWZsZW47CisgICAgc2l6ZV90ICAgb3V0bGVuOworICAgIHVpbnQ4X3QgIGxhc3Rfbm9kZTsKKyAgfSBibGFrZTJzX3N0YXRlOworCisgIHR5cGVkZWYgc3RydWN0IGJsYWtlMmJfc3RhdGVfXworICB7CisgICAgdWludDY0X3QgaFs4XTsKKyAgICB1aW50NjRfdCB0WzJdOworICAgIHVpbnQ2NF90IGZbMl07CisgICAgdWludDhfdCAgYnVmW0JMQUtFMkJfQkxPQ0tCWVRFU107CisgICAgc2l6ZV90ICAgYnVmbGVuOworICAgIHNpemVfdCAgIG91dGxlbjsKKyAgICB1aW50OF90ICBsYXN0X25vZGU7CisgIH0gYmxha2UyYl9zdGF0ZTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJzcF9zdGF0ZV9fCisgIHsKKyAgICBibGFrZTJzX3N0YXRlIFNbOF1bMV07CisgICAgYmxha2Uyc19zdGF0ZSBSWzFdOworICAgIHVpbnQ4X3QgICAgICAgYnVmWzggKiBCTEFLRTJTX0JMT0NLQllURVNdOworICAgIHNpemVfdCAgICAgICAgYnVmbGVuOworICAgIHNpemVfdCAgICAgICAgb3V0bGVuOworICB9IGJsYWtlMnNwX3N0YXRlOworCisgIHR5cGVkZWYgc3RydWN0IGJsYWtlMmJwX3N0YXRlX18KKyAgeworICAgIGJsYWtlMmJfc3RhdGUgU1s0XVsxXTsKKyAgICBibGFrZTJiX3N0YXRlIFJbMV07CisgICAgdWludDhfdCAgICAgICBidWZbNCAqIEJMQUtFMkJfQkxPQ0tCWVRFU107CisgICAgc2l6ZV90ICAgICAgICBidWZsZW47CisgICAgc2l6ZV90ICAgICAgICBvdXRsZW47CisgIH0gYmxha2UyYnBfc3RhdGU7CisKKyAgQkxBS0UyX1BBQ0tFRChzdHJ1Y3QgYmxha2Uyc19wYXJhbV9fCisgIHsKKyAgICB1aW50OF90ICBkaWdlc3RfbGVuZ3RoOyAvKiAxICovCisgICAgdWludDhfdCAga2V5X2xlbmd0aDsgICAgLyogMiAqLworICAgIHVpbnQ4X3QgIGZhbm91dDsgICAgICAgIC8qIDMgKi8KKyAgICB1aW50OF90ICBkZXB0aDsgICAgICAgICAvKiA0ICovCisgICAgdWludDMyX3QgbGVhZl9sZW5ndGg7ICAgLyogOCAqLworICAgIHVpbnQzMl90IG5vZGVfb2Zmc2V0OyAgLyogMTIgKi8KKyAgICB1aW50MTZfdCB4b2ZfbGVuZ3RoOyAgICAvKiAxNCAqLworICAgIHVpbnQ4X3QgIG5vZGVfZGVwdGg7ICAgIC8qIDE1ICovCisgICAgdWludDhfdCAgaW5uZXJfbGVuZ3RoOyAgLyogMTYgKi8KKyAgICAvKiB1aW50OF90ICByZXNlcnZlZFswXTsgKi8KKyAgICB1aW50OF90ICBzYWx0W0JMQUtFMlNfU0FMVEJZVEVTXTsgLyogMjQgKi8KKyAgICB1aW50OF90ICBwZXJzb25hbFtCTEFLRTJTX1BFUlNPTkFMQllURVNdOyAgLyogMzIgKi8KKyAgfSk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2Uyc19wYXJhbV9fIGJsYWtlMnNfcGFyYW07CisKKyAgQkxBS0UyX1BBQ0tFRChzdHJ1Y3QgYmxha2UyYl9wYXJhbV9fCisgIHsKKyAgICB1aW50OF90ICBkaWdlc3RfbGVuZ3RoOyAvKiAxICovCisgICAgdWludDhfdCAga2V5X2xlbmd0aDsgICAgLyogMiAqLworICAgIHVpbnQ4X3QgIGZhbm91dDsgICAgICAgIC8qIDMgKi8KKyAgICB1aW50OF90ICBkZXB0aDsgICAgICAgICAvKiA0ICovCisgICAgdWludDMyX3QgbGVhZl9sZW5ndGg7ICAgLyogOCAqLworICAgIHVpbnQzMl90IG5vZGVfb2Zmc2V0OyAgIC8qIDEyICovCisgICAgdWludDMyX3QgeG9mX2xlbmd0aDsgICAgLyogMTYgKi8KKyAgICB1aW50OF90ICBub2RlX2RlcHRoOyAgICAvKiAxNyAqLworICAgIHVpbnQ4X3QgIGlubmVyX2xlbmd0aDsgIC8qIDE4ICovCisgICAgdWludDhfdCAgcmVzZXJ2ZWRbMTRdOyAgLyogMzIgKi8KKyAgICB1aW50OF90ICBzYWx0W0JMQUtFMkJfU0FMVEJZVEVTXTsgLyogNDggKi8KKyAgICB1aW50OF90ICBwZXJzb25hbFtCTEFLRTJCX1BFUlNPTkFMQllURVNdOyAgLyogNjQgKi8KKyAgfSk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2UyYl9wYXJhbV9fIGJsYWtlMmJfcGFyYW07CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2UyeHNfc3RhdGVfXworICB7CisgICAgYmxha2Uyc19zdGF0ZSBTWzFdOworICAgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKyAgfSBibGFrZTJ4c19zdGF0ZTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJ4Yl9zdGF0ZV9fCisgIHsKKyAgICBibGFrZTJiX3N0YXRlIFNbMV07CisgICAgYmxha2UyYl9wYXJhbSBQWzFdOworICB9IGJsYWtlMnhiX3N0YXRlOworCisgIC8qIFBhZGRlZCBzdHJ1Y3RzIHJlc3VsdCBpbiBhIGNvbXBpbGUtdGltZSBlcnJvciAqLworICBlbnVtIHsKKyAgICBCTEFLRTJfRFVNTVlfMSA9IDEvKHNpemVvZihibGFrZTJzX3BhcmFtKSA9PSBCTEFLRTJTX09VVEJZVEVTKSwKKyAgICBCTEFLRTJfRFVNTVlfMiA9IDEvKHNpemVvZihibGFrZTJiX3BhcmFtKSA9PSBCTEFLRTJCX09VVEJZVEVTKQorICB9OworCisgIC8qIFN0cmVhbWluZyBBUEkgKi8KKyAgaW50IGJsYWtlMnNfaW5pdCggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiApOworICBpbnQgYmxha2Uyc19pbml0X2tleSggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJzX2luaXRfcGFyYW0oIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IGJsYWtlMnNfcGFyYW0gKlAgKTsKKyAgaW50IGJsYWtlMnNfdXBkYXRlKCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuICk7CisgIGludCBibGFrZTJzX2ZpbmFsKCBibGFrZTJzX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4gKTsKKworICBpbnQgYmxha2UyYl9pbml0KCBibGFrZTJiX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuICk7CisgIGludCBibGFrZTJiX2luaXRfa2V5KCBibGFrZTJiX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMmJfaW5pdF9wYXJhbSggYmxha2UyYl9zdGF0ZSAqUywgY29uc3QgYmxha2UyYl9wYXJhbSAqUCApOworICBpbnQgYmxha2UyYl91cGRhdGUoIGJsYWtlMmJfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4gKTsKKyAgaW50IGJsYWtlMmJfZmluYWwoIGJsYWtlMmJfc3RhdGUgKlMsIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiApOworCisgIGludCBibGFrZTJzcF9pbml0KCBibGFrZTJzcF9zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiApOworICBpbnQgYmxha2Uyc3BfaW5pdF9rZXkoIGJsYWtlMnNwX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMnNwX3VwZGF0ZSggYmxha2Uyc3Bfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4gKTsKKyAgaW50IGJsYWtlMnNwX2ZpbmFsKCBibGFrZTJzcF9zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuICk7CisKKyAgaW50IGJsYWtlMmJwX2luaXQoIGJsYWtlMmJwX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuICk7CisgIGludCBibGFrZTJicF9pbml0X2tleSggYmxha2UyYnBfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworICBpbnQgYmxha2UyYnBfdXBkYXRlKCBibGFrZTJicF9zdGF0ZSAqUywgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiApOworICBpbnQgYmxha2UyYnBfZmluYWwoIGJsYWtlMmJwX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4gKTsKKworICAvKiBWYXJpYWJsZSBvdXRwdXQgbGVuZ3RoIEFQSSAqLworICBpbnQgYmxha2UyeHNfaW5pdCggYmxha2UyeHNfc3RhdGUgKlMsIGNvbnN0IHNpemVfdCBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMnhzX2luaXRfa2V5KCBibGFrZTJ4c19zdGF0ZSAqUywgY29uc3Qgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJ4c191cGRhdGUoIGJsYWtlMnhzX3N0YXRlICpTLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuICk7CisgIGludCBibGFrZTJ4c19maW5hbChibGFrZTJ4c19zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworICBpbnQgYmxha2UyeGJfaW5pdCggYmxha2UyeGJfc3RhdGUgKlMsIGNvbnN0IHNpemVfdCBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMnhiX2luaXRfa2V5KCBibGFrZTJ4Yl9zdGF0ZSAqUywgY29uc3Qgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJ4Yl91cGRhdGUoIGJsYWtlMnhiX3N0YXRlICpTLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuICk7CisgIGludCBibGFrZTJ4Yl9maW5hbChibGFrZTJ4Yl9zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKTsKKworICAvKiBTaW1wbGUgQVBJICovCisgIGludCBibGFrZTJzKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworICBpbnQgYmxha2UyYiggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKworICBpbnQgYmxha2Uyc3AoIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJicCggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKworICBpbnQgYmxha2UyeHMoIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJ4Yiggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKworICAvKiBUaGlzIGlzIHNpbXBseSBhbiBhbGlhcyBmb3IgYmxha2UyYiAqLworICBpbnQgYmxha2UyKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMl9pbXBsLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJfaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDVkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJfaW1wbC5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICAgQkxBS0UyIHJlZmVyZW5jZSBzb3VyY2UgY29kZSBwYWNrYWdlIC0gcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb25zCisKKyAgIENvcHlyaWdodCAyMDEyLCBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+LiAgWW91IG1heSB1c2UgdGhpcyB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoZSBDQzAsIHRoZSBPcGVuU1NMIExpY2VuY2UsIG9yIHRoZSBBcGFjaGUgUHVibGljIExpY2Vuc2UgMi4wLCBhdAorICAgeW91ciBvcHRpb24uICBUaGUgdGVybXMgb2YgdGhlc2UgbGljZW5zZXMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAtIENDMCAxLjAgVW5pdmVyc2FsIDogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wCisgICAtIE9wZW5TU0wgbGljZW5zZSAgIDogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorICAgLSBBcGFjaGUgMi4wICAgICAgICA6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCTEFLRTIgaGFzaCBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHBzOi8vYmxha2UyLm5ldC4KKyovCisKKyNpZm5kZWYgQVJDSElWRV9CTEFLRTJfSU1QTF9ICisjZGVmaW5lIEFSQ0hJVkVfQkxBS0UyX0lNUExfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgKCFkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pIHx8IF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMKQorICAjaWYgICBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgQkxBS0UyX0lOTElORSBfX2lubGluZQorICAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICNkZWZpbmUgQkxBS0UyX0lOTElORSBfX2lubGluZV9fCisgICNlbHNlCisgICAgI2RlZmluZSBCTEFLRTJfSU5MSU5FCisgICNlbmRpZgorI2Vsc2UKKyAgI2RlZmluZSBCTEFLRTJfSU5MSU5FIGlubGluZQorI2VuZGlmCisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQzMl90IGxvYWQzMiggY29uc3Qgdm9pZCAqc3JjICkKK3sKKyNpZiBkZWZpbmVkKE5BVElWRV9MSVRUTEVfRU5ESUFOKQorICB1aW50MzJfdCB3OworICBtZW1jcHkoJncsIHNyYywgc2l6ZW9mIHcpOworICByZXR1cm4gdzsKKyNlbHNlCisgIGNvbnN0IHVpbnQ4X3QgKnAgPSAoIGNvbnN0IHVpbnQ4X3QgKiApc3JjOworICByZXR1cm4gKCggdWludDMyX3QgKSggcFswXSApIDw8ICAwKSB8CisgICAgICAgICAoKCB1aW50MzJfdCApKCBwWzFdICkgPDwgIDgpIHwKKyAgICAgICAgICgoIHVpbnQzMl90ICkoIHBbMl0gKSA8PCAxNikgfAorICAgICAgICAgKCggdWludDMyX3QgKSggcFszXSApIDw8IDI0KSA7CisjZW5kaWYKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDY0X3QgbG9hZDY0KCBjb25zdCB2b2lkICpzcmMgKQoreworI2lmIGRlZmluZWQoTkFUSVZFX0xJVFRMRV9FTkRJQU4pCisgIHVpbnQ2NF90IHc7CisgIG1lbWNweSgmdywgc3JjLCBzaXplb2Ygdyk7CisgIHJldHVybiB3OworI2Vsc2UKKyAgY29uc3QgdWludDhfdCAqcCA9ICggY29uc3QgdWludDhfdCAqIClzcmM7CisgIHJldHVybiAoKCB1aW50NjRfdCApKCBwWzBdICkgPDwgIDApIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbMV0gKSA8PCAgOCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFsyXSApIDw8IDE2KSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzNdICkgPDwgMjQpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbNF0gKSA8PCAzMikgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFs1XSApIDw8IDQwKSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzZdICkgPDwgNDgpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbN10gKSA8PCA1NikgOworI2VuZGlmCit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQxNl90IGxvYWQxNiggY29uc3Qgdm9pZCAqc3JjICkKK3sKKyNpZiBkZWZpbmVkKE5BVElWRV9MSVRUTEVfRU5ESUFOKQorICB1aW50MTZfdCB3OworICBtZW1jcHkoJncsIHNyYywgc2l6ZW9mIHcpOworICByZXR1cm4gdzsKKyNlbHNlCisgIGNvbnN0IHVpbnQ4X3QgKnAgPSAoIGNvbnN0IHVpbnQ4X3QgKiApc3JjOworICByZXR1cm4gKCB1aW50MTZfdCApKCgoIHVpbnQzMl90ICkoIHBbMF0gKSA8PCAgMCkgfAorICAgICAgICAgICAgICAgICAgICAgICgoIHVpbnQzMl90ICkoIHBbMV0gKSA8PCAgOCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHZvaWQgc3RvcmUxNiggdm9pZCAqZHN0LCB1aW50MTZfdCB3ICkKK3sKKyNpZiBkZWZpbmVkKE5BVElWRV9MSVRUTEVfRU5ESUFOKQorICBtZW1jcHkoZHN0LCAmdywgc2l6ZW9mIHcpOworI2Vsc2UKKyAgdWludDhfdCAqcCA9ICggdWludDhfdCAqIClkc3Q7CisgICpwKysgPSAoIHVpbnQ4X3QgKXc7IHcgPj49IDg7CisgICpwKysgPSAoIHVpbnQ4X3QgKXc7CisjZW5kaWYKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdm9pZCBzdG9yZTMyKCB2b2lkICpkc3QsIHVpbnQzMl90IHcgKQoreworI2lmIGRlZmluZWQoTkFUSVZFX0xJVFRMRV9FTkRJQU4pCisgIG1lbWNweShkc3QsICZ3LCBzaXplb2Ygdyk7CisjZWxzZQorICB1aW50OF90ICpwID0gKCB1aW50OF90ICogKWRzdDsKKyAgcFswXSA9ICh1aW50OF90KSh3ID4+ICAwKTsKKyAgcFsxXSA9ICh1aW50OF90KSh3ID4+ICA4KTsKKyAgcFsyXSA9ICh1aW50OF90KSh3ID4+IDE2KTsKKyAgcFszXSA9ICh1aW50OF90KSh3ID4+IDI0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgQkxBS0UyX0lOTElORSB2b2lkIHN0b3JlNjQoIHZvaWQgKmRzdCwgdWludDY0X3QgdyApCit7CisjaWYgZGVmaW5lZChOQVRJVkVfTElUVExFX0VORElBTikKKyAgbWVtY3B5KGRzdCwgJncsIHNpemVvZiB3KTsKKyNlbHNlCisgIHVpbnQ4X3QgKnAgPSAoIHVpbnQ4X3QgKiApZHN0OworICBwWzBdID0gKHVpbnQ4X3QpKHcgPj4gIDApOworICBwWzFdID0gKHVpbnQ4X3QpKHcgPj4gIDgpOworICBwWzJdID0gKHVpbnQ4X3QpKHcgPj4gMTYpOworICBwWzNdID0gKHVpbnQ4X3QpKHcgPj4gMjQpOworICBwWzRdID0gKHVpbnQ4X3QpKHcgPj4gMzIpOworICBwWzVdID0gKHVpbnQ4X3QpKHcgPj4gNDApOworICBwWzZdID0gKHVpbnQ4X3QpKHcgPj4gNDgpOworICBwWzddID0gKHVpbnQ4X3QpKHcgPj4gNTYpOworI2VuZGlmCit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQ2NF90IGxvYWQ0OCggY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgY29uc3QgdWludDhfdCAqcCA9ICggY29uc3QgdWludDhfdCAqIClzcmM7CisgIHJldHVybiAoKCB1aW50NjRfdCApKCBwWzBdICkgPDwgIDApIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbMV0gKSA8PCAgOCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFsyXSApIDw8IDE2KSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzNdICkgPDwgMjQpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbNF0gKSA8PCAzMikgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFs1XSApIDw8IDQwKSA7Cit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHZvaWQgc3RvcmU0OCggdm9pZCAqZHN0LCB1aW50NjRfdCB3ICkKK3sKKyAgdWludDhfdCAqcCA9ICggdWludDhfdCAqIClkc3Q7CisgIHBbMF0gPSAodWludDhfdCkodyA+PiAgMCk7CisgIHBbMV0gPSAodWludDhfdCkodyA+PiAgOCk7CisgIHBbMl0gPSAodWludDhfdCkodyA+PiAxNik7CisgIHBbM10gPSAodWludDhfdCkodyA+PiAyNCk7CisgIHBbNF0gPSAodWludDhfdCkodyA+PiAzMik7CisgIHBbNV0gPSAodWludDhfdCkodyA+PiA0MCk7Cit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHVpbnQzMl90IHJvdHIzMiggY29uc3QgdWludDMyX3QgdywgY29uc3QgdW5zaWduZWQgYyApCit7CisgIHJldHVybiAoIHcgPj4gYyApIHwgKCB3IDw8ICggMzIgLSBjICkgKTsKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDY0X3Qgcm90cjY0KCBjb25zdCB1aW50NjRfdCB3LCBjb25zdCB1bnNpZ25lZCBjICkKK3sKKyAgcmV0dXJuICggdyA+PiBjICkgfCAoIHcgPDwgKCA2NCAtIGMgKSApOworfQorCisvKiBwcmV2ZW50cyBjb21waWxlciBvcHRpbWl6aW5nIG91dCBtZW1zZXQoKSAqLworc3RhdGljIEJMQUtFMl9JTkxJTkUgdm9pZCBzZWN1cmVfemVyb19tZW1vcnkodm9pZCAqdiwgc2l6ZV90IG4pCit7CisgIHN0YXRpYyB2b2lkICooKmNvbnN0IHZvbGF0aWxlIG1lbXNldF92KSh2b2lkICosIGludCwgc2l6ZV90KSA9ICZtZW1zZXQ7CisgIG1lbXNldF92KHYsIDAsIG4pOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNfcmVmLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJzX3JlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmZmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJzX3JlZi5jCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICAgQkxBS0UyIHJlZmVyZW5jZSBzb3VyY2UgY29kZSBwYWNrYWdlIC0gcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb25zCisKKyAgIENvcHlyaWdodCAyMDEyLCBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+LiAgWW91IG1heSB1c2UgdGhpcyB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoZSBDQzAsIHRoZSBPcGVuU1NMIExpY2VuY2UsIG9yIHRoZSBBcGFjaGUgUHVibGljIExpY2Vuc2UgMi4wLCBhdAorICAgeW91ciBvcHRpb24uICBUaGUgdGVybXMgb2YgdGhlc2UgbGljZW5zZXMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAtIENDMCAxLjAgVW5pdmVyc2FsIDogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wCisgICAtIE9wZW5TU0wgbGljZW5zZSAgIDogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorICAgLSBBcGFjaGUgMi4wICAgICAgICA6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCTEFLRTIgaGFzaCBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHBzOi8vYmxha2UyLm5ldC4KKyovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiYXJjaGl2ZV9ibGFrZTIuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2JsYWtlMl9pbXBsLmgiCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBibGFrZTJzX0lWWzhdID0KK3sKKyAgMHg2QTA5RTY2N1VMLCAweEJCNjdBRTg1VUwsIDB4M0M2RUYzNzJVTCwgMHhBNTRGRjUzQVVMLAorICAweDUxMEU1MjdGVUwsIDB4OUIwNTY4OENVTCwgMHgxRjgzRDlBQlVMLCAweDVCRTBDRDE5VUwKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGJsYWtlMnNfc2lnbWFbMTBdWzE2XSA9Cit7CisgIHsgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfSAsCisgIHsgMTQsIDEwLCAgNCwgIDgsICA5LCAxNSwgMTMsICA2LCAgMSwgMTIsICAwLCAgMiwgMTEsICA3LCAgNSwgIDMgfSAsCisgIHsgMTEsICA4LCAxMiwgIDAsICA1LCAgMiwgMTUsIDEzLCAxMCwgMTQsICAzLCAgNiwgIDcsICAxLCAgOSwgIDQgfSAsCisgIHsgIDcsICA5LCAgMywgIDEsIDEzLCAxMiwgMTEsIDE0LCAgMiwgIDYsICA1LCAxMCwgIDQsICAwLCAxNSwgIDggfSAsCisgIHsgIDksICAwLCAgNSwgIDcsICAyLCAgNCwgMTAsIDE1LCAxNCwgIDEsIDExLCAxMiwgIDYsICA4LCAgMywgMTMgfSAsCisgIHsgIDIsIDEyLCAgNiwgMTAsICAwLCAxMSwgIDgsICAzLCAgNCwgMTMsICA3LCAgNSwgMTUsIDE0LCAgMSwgIDkgfSAsCisgIHsgMTIsICA1LCAgMSwgMTUsIDE0LCAxMywgIDQsIDEwLCAgMCwgIDcsICA2LCAgMywgIDksICAyLCAgOCwgMTEgfSAsCisgIHsgMTMsIDExLCAgNywgMTQsIDEyLCAgMSwgIDMsICA5LCAgNSwgIDAsIDE1LCAgNCwgIDgsICA2LCAgMiwgMTAgfSAsCisgIHsgIDYsIDE1LCAxNCwgIDksIDExLCAgMywgIDAsICA4LCAxMiwgIDIsIDEzLCAgNywgIDEsICA0LCAxMCwgIDUgfSAsCisgIHsgMTAsICAyLCAgOCwgIDQsICA3LCAgNiwgIDEsICA1LCAxNSwgMTEsICA5LCAxNCwgIDMsIDEyLCAxMyAsIDAgfSAsCit9OworCitzdGF0aWMgdm9pZCBibGFrZTJzX3NldF9sYXN0bm9kZSggYmxha2Uyc19zdGF0ZSAqUyApCit7CisgIFMtPmZbMV0gPSAodWludDMyX3QpLTE7Cit9CisKKy8qIFNvbWUgaGVscGVyIGZ1bmN0aW9ucywgbm90IG5lY2Vzc2FyaWx5IHVzZWZ1bCAqLworc3RhdGljIGludCBibGFrZTJzX2lzX2xhc3RibG9jayggY29uc3QgYmxha2Uyc19zdGF0ZSAqUyApCit7CisgIHJldHVybiBTLT5mWzBdICE9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGJsYWtlMnNfc2V0X2xhc3RibG9jayggYmxha2Uyc19zdGF0ZSAqUyApCit7CisgIGlmKCBTLT5sYXN0X25vZGUgKSBibGFrZTJzX3NldF9sYXN0bm9kZSggUyApOworCisgIFMtPmZbMF0gPSAodWludDMyX3QpLTE7Cit9CisKK3N0YXRpYyB2b2lkIGJsYWtlMnNfaW5jcmVtZW50X2NvdW50ZXIoIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IHVpbnQzMl90IGluYyApCit7CisgIFMtPnRbMF0gKz0gaW5jOworICBTLT50WzFdICs9ICggUy0+dFswXSA8IGluYyApOworfQorCitzdGF0aWMgdm9pZCBibGFrZTJzX2luaXQwKCBibGFrZTJzX3N0YXRlICpTICkKK3sKKyAgc2l6ZV90IGk7CisgIG1lbXNldCggUywgMCwgc2l6ZW9mKCBibGFrZTJzX3N0YXRlICkgKTsKKworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkgUy0+aFtpXSA9IGJsYWtlMnNfSVZbaV07Cit9CisKKy8qIGluaXQyIHhvcnMgSVYgd2l0aCBpbnB1dCBwYXJhbWV0ZXIgYmxvY2sgKi8KK2ludCBibGFrZTJzX2luaXRfcGFyYW0oIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IGJsYWtlMnNfcGFyYW0gKlAgKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKCBjb25zdCB1bnNpZ25lZCBjaGFyICogKSggUCApOworICBzaXplX3QgaTsKKworICBibGFrZTJzX2luaXQwKCBTICk7CisKKyAgLyogSVYgWE9SIFBhcmFtQmxvY2sgKi8KKyAgZm9yKCBpID0gMDsgaSA8IDg7ICsraSApCisgICAgUy0+aFtpXSBePSBsb2FkMzIoICZwW2kgKiA0XSApOworCisgIFMtPm91dGxlbiA9IFAtPmRpZ2VzdF9sZW5ndGg7CisgIHJldHVybiAwOworfQorCisKKy8qIFNlcXVlbnRpYWwgYmxha2UycyBpbml0aWFsaXphdGlvbiAqLworaW50IGJsYWtlMnNfaW5pdCggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKworICAvKiBNb3ZlIGludGVydmFsIHZlcmlmaWNhdGlvbiBoZXJlPyAqLworICBpZiAoICggIW91dGxlbiApIHx8ICggb3V0bGVuID4gQkxBS0UyU19PVVRCWVRFUyApICkgcmV0dXJuIC0xOworCisgIFAtPmRpZ2VzdF9sZW5ndGggPSAodWludDhfdClvdXRsZW47CisgIFAtPmtleV9sZW5ndGggICAgPSAwOworICBQLT5mYW5vdXQgICAgICAgID0gMTsKKyAgUC0+ZGVwdGggICAgICAgICA9IDE7CisgIHN0b3JlMzIoICZQLT5sZWFmX2xlbmd0aCwgMCApOworICBzdG9yZTMyKCAmUC0+bm9kZV9vZmZzZXQsIDAgKTsKKyAgc3RvcmUxNiggJlAtPnhvZl9sZW5ndGgsIDAgKTsKKyAgUC0+bm9kZV9kZXB0aCAgICA9IDA7CisgIFAtPmlubmVyX2xlbmd0aCAgPSAwOworICAvKiBtZW1zZXQoUC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihQLT5yZXNlcnZlZCkgKTsgKi8KKyAgbWVtc2V0KCBQLT5zYWx0LCAgICAgMCwgc2l6ZW9mKCBQLT5zYWx0ICkgKTsKKyAgbWVtc2V0KCBQLT5wZXJzb25hbCwgMCwgc2l6ZW9mKCBQLT5wZXJzb25hbCApICk7CisgIHJldHVybiBibGFrZTJzX2luaXRfcGFyYW0oIFMsIFAgKTsKK30KKworaW50IGJsYWtlMnNfaW5pdF9rZXkoIGJsYWtlMnNfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKworICBpZiAoICggIW91dGxlbiApIHx8ICggb3V0bGVuID4gQkxBS0UyU19PVVRCWVRFUyApICkgcmV0dXJuIC0xOworCisgIGlmICggIWtleSB8fCAha2V5bGVuIHx8IGtleWxlbiA+IEJMQUtFMlNfS0VZQllURVMgKSByZXR1cm4gLTE7CisKKyAgUC0+ZGlnZXN0X2xlbmd0aCA9ICh1aW50OF90KW91dGxlbjsKKyAgUC0+a2V5X2xlbmd0aCAgICA9ICh1aW50OF90KWtleWxlbjsKKyAgUC0+ZmFub3V0ICAgICAgICA9IDE7CisgIFAtPmRlcHRoICAgICAgICAgPSAxOworICBzdG9yZTMyKCAmUC0+bGVhZl9sZW5ndGgsIDAgKTsKKyAgc3RvcmUzMiggJlAtPm5vZGVfb2Zmc2V0LCAwICk7CisgIHN0b3JlMTYoICZQLT54b2ZfbGVuZ3RoLCAwICk7CisgIFAtPm5vZGVfZGVwdGggICAgPSAwOworICBQLT5pbm5lcl9sZW5ndGggID0gMDsKKyAgLyogbWVtc2V0KFAtPnJlc2VydmVkLCAwLCBzaXplb2YoUC0+cmVzZXJ2ZWQpICk7ICovCisgIG1lbXNldCggUC0+c2FsdCwgICAgIDAsIHNpemVvZiggUC0+c2FsdCApICk7CisgIG1lbXNldCggUC0+cGVyc29uYWwsIDAsIHNpemVvZiggUC0+cGVyc29uYWwgKSApOworCisgIGlmKCBibGFrZTJzX2luaXRfcGFyYW0oIFMsIFAgKSA8IDAgKSByZXR1cm4gLTE7CisKKyAgeworICAgIHVpbnQ4X3QgYmxvY2tbQkxBS0UyU19CTE9DS0JZVEVTXTsKKyAgICBtZW1zZXQoIGJsb2NrLCAwLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgICBtZW1jcHkoIGJsb2NrLCBrZXksIGtleWxlbiApOworICAgIGJsYWtlMnNfdXBkYXRlKCBTLCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgc2VjdXJlX3plcm9fbWVtb3J5KCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7IC8qIEJ1cm4gdGhlIGtleSBmcm9tIHN0YWNrICovCisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgRyhyLGksYSxiLGMsZCkgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYSA9IGEgKyBiICsgbVtibGFrZTJzX3NpZ21hW3JdWzIqaSswXV07IFwKKyAgICBkID0gcm90cjMyKGQgXiBhLCAxNik7ICAgICAgICAgICAgICAgICAgXAorICAgIGMgPSBjICsgZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYiA9IHJvdHIzMihiIF4gYywgMTIpOyAgICAgICAgICAgICAgICAgIFwKKyAgICBhID0gYSArIGIgKyBtW2JsYWtlMnNfc2lnbWFbcl1bMippKzFdXTsgXAorICAgIGQgPSByb3RyMzIoZCBeIGEsIDgpOyAgICAgICAgICAgICAgICAgICBcCisgICAgYyA9IGMgKyBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBiID0gcm90cjMyKGIgXiBjLCA3KTsgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlKDApCisKKyNkZWZpbmUgUk9VTkQocikgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHKHIsMCx2WyAwXSx2WyA0XSx2WyA4XSx2WzEyXSk7IFwKKyAgICBHKHIsMSx2WyAxXSx2WyA1XSx2WyA5XSx2WzEzXSk7IFwKKyAgICBHKHIsMix2WyAyXSx2WyA2XSx2WzEwXSx2WzE0XSk7IFwKKyAgICBHKHIsMyx2WyAzXSx2WyA3XSx2WzExXSx2WzE1XSk7IFwKKyAgICBHKHIsNCx2WyAwXSx2WyA1XSx2WzEwXSx2WzE1XSk7IFwKKyAgICBHKHIsNSx2WyAxXSx2WyA2XSx2WzExXSx2WzEyXSk7IFwKKyAgICBHKHIsNix2WyAyXSx2WyA3XSx2WyA4XSx2WzEzXSk7IFwKKyAgICBHKHIsNyx2WyAzXSx2WyA0XSx2WyA5XSx2WzE0XSk7IFwKKyAgfSB3aGlsZSgwKQorCitzdGF0aWMgdm9pZCBibGFrZTJzX2NvbXByZXNzKCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCB1aW50OF90IGluW0JMQUtFMlNfQkxPQ0tCWVRFU10gKQoreworICB1aW50MzJfdCBtWzE2XTsKKyAgdWludDMyX3QgdlsxNl07CisgIHNpemVfdCBpOworCisgIGZvciggaSA9IDA7IGkgPCAxNjsgKytpICkgeworICAgIG1baV0gPSBsb2FkMzIoIGluICsgaSAqIHNpemVvZiggbVtpXSApICk7CisgIH0KKworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkgeworICAgIHZbaV0gPSBTLT5oW2ldOworICB9CisKKyAgdlsgOF0gPSBibGFrZTJzX0lWWzBdOworICB2WyA5XSA9IGJsYWtlMnNfSVZbMV07CisgIHZbMTBdID0gYmxha2Uyc19JVlsyXTsKKyAgdlsxMV0gPSBibGFrZTJzX0lWWzNdOworICB2WzEyXSA9IFMtPnRbMF0gXiBibGFrZTJzX0lWWzRdOworICB2WzEzXSA9IFMtPnRbMV0gXiBibGFrZTJzX0lWWzVdOworICB2WzE0XSA9IFMtPmZbMF0gXiBibGFrZTJzX0lWWzZdOworICB2WzE1XSA9IFMtPmZbMV0gXiBibGFrZTJzX0lWWzddOworCisgIFJPVU5EKCAwICk7CisgIFJPVU5EKCAxICk7CisgIFJPVU5EKCAyICk7CisgIFJPVU5EKCAzICk7CisgIFJPVU5EKCA0ICk7CisgIFJPVU5EKCA1ICk7CisgIFJPVU5EKCA2ICk7CisgIFJPVU5EKCA3ICk7CisgIFJPVU5EKCA4ICk7CisgIFJPVU5EKCA5ICk7CisKKyAgZm9yKCBpID0gMDsgaSA8IDg7ICsraSApIHsKKyAgICBTLT5oW2ldID0gUy0+aFtpXSBeIHZbaV0gXiB2W2kgKyA4XTsKKyAgfQorfQorCisjdW5kZWYgRworI3VuZGVmIFJPVU5ECisKK2ludCBibGFrZTJzX3VwZGF0ZSggYmxha2Uyc19zdGF0ZSAqUywgY29uc3Qgdm9pZCAqcGluLCBzaXplX3QgaW5sZW4gKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICogaW4gPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXBpbjsKKyAgaWYoIGlubGVuID4gMCApCisgIHsKKyAgICBzaXplX3QgbGVmdCA9IFMtPmJ1ZmxlbjsKKyAgICBzaXplX3QgZmlsbCA9IEJMQUtFMlNfQkxPQ0tCWVRFUyAtIGxlZnQ7CisgICAgaWYoIGlubGVuID4gZmlsbCApCisgICAgeworICAgICAgUy0+YnVmbGVuID0gMDsKKyAgICAgIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGZpbGwgKTsgLyogRmlsbCBidWZmZXIgKi8KKyAgICAgIGJsYWtlMnNfaW5jcmVtZW50X2NvdW50ZXIoIFMsIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworICAgICAgYmxha2Uyc19jb21wcmVzcyggUywgUy0+YnVmICk7IC8qIENvbXByZXNzICovCisgICAgICBpbiArPSBmaWxsOyBpbmxlbiAtPSBmaWxsOworICAgICAgd2hpbGUoaW5sZW4gPiBCTEFLRTJTX0JMT0NLQllURVMpIHsKKyAgICAgICAgYmxha2Uyc19pbmNyZW1lbnRfY291bnRlcihTLCBCTEFLRTJTX0JMT0NLQllURVMpOworICAgICAgICBibGFrZTJzX2NvbXByZXNzKCBTLCBpbiApOworICAgICAgICBpbiArPSBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgICAgIGlubGVuIC09IEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICAgIH0KKyAgICB9CisgICAgbWVtY3B5KCBTLT5idWYgKyBTLT5idWZsZW4sIGluLCBpbmxlbiApOworICAgIFMtPmJ1ZmxlbiArPSBpbmxlbjsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IGJsYWtlMnNfZmluYWwoIGJsYWtlMnNfc3RhdGUgKlMsIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiApCit7CisgIHVpbnQ4X3QgYnVmZmVyW0JMQUtFMlNfT1VUQllURVNdID0gezB9OworICBzaXplX3QgaTsKKworICBpZiggb3V0ID09IE5VTEwgfHwgb3V0bGVuIDwgUy0+b3V0bGVuICkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYoIGJsYWtlMnNfaXNfbGFzdGJsb2NrKCBTICkgKQorICAgIHJldHVybiAtMTsKKworICBibGFrZTJzX2luY3JlbWVudF9jb3VudGVyKCBTLCAoIHVpbnQzMl90IClTLT5idWZsZW4gKTsKKyAgYmxha2Uyc19zZXRfbGFzdGJsb2NrKCBTICk7CisgIG1lbXNldCggUy0+YnVmICsgUy0+YnVmbGVuLCAwLCBCTEFLRTJTX0JMT0NLQllURVMgLSBTLT5idWZsZW4gKTsgLyogUGFkZGluZyAqLworICBibGFrZTJzX2NvbXByZXNzKCBTLCBTLT5idWYgKTsKKworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkgLyogT3V0cHV0IGZ1bGwgaGFzaCB0byB0ZW1wIGJ1ZmZlciAqLworICAgIHN0b3JlMzIoIGJ1ZmZlciArIHNpemVvZiggUy0+aFtpXSApICogaSwgUy0+aFtpXSApOworCisgIG1lbWNweSggb3V0LCBidWZmZXIsIG91dGxlbiApOworICBzZWN1cmVfemVyb19tZW1vcnkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIHJldHVybiAwOworfQorCitpbnQgYmxha2Uycyggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKQoreworICBibGFrZTJzX3N0YXRlIFNbMV07CisKKyAgLyogVmVyaWZ5IHBhcmFtZXRlcnMgKi8KKyAgaWYgKCBOVUxMID09IGluICYmIGlubGVuID4gMCApIHJldHVybiAtMTsKKworICBpZiAoIE5VTEwgPT0gb3V0ICkgcmV0dXJuIC0xOworCisgIGlmICggTlVMTCA9PSBrZXkgJiYga2V5bGVuID4gMCkgcmV0dXJuIC0xOworCisgIGlmKCAhb3V0bGVuIHx8IG91dGxlbiA+IEJMQUtFMlNfT1VUQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoIGtleWxlbiA+IEJMQUtFMlNfS0VZQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoIGtleWxlbiA+IDAgKQorICB7CisgICAgaWYoIGJsYWtlMnNfaW5pdF9rZXkoIFMsIG91dGxlbiwga2V5LCBrZXlsZW4gKSA8IDAgKSByZXR1cm4gLTE7CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYoIGJsYWtlMnNfaW5pdCggUywgb3V0bGVuICkgPCAwICkgcmV0dXJuIC0xOworICB9CisKKyAgYmxha2Uyc191cGRhdGUoIFMsICggY29uc3QgdWludDhfdCAqIClpbiwgaW5sZW4gKTsKKyAgYmxha2Uyc19maW5hbCggUywgb3V0LCBvdXRsZW4gKTsKKyAgcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKFNVUEVSQ09QKQoraW50IGNyeXB0b19oYXNoKCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGxvbmcgaW5sZW4gKQoreworICByZXR1cm4gYmxha2Uycyggb3V0LCBCTEFLRTJTX09VVEJZVEVTLCBpbiwgaW5sZW4sIE5VTEwsIDAgKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTEFLRTJTX1NFTEZURVNUKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImJsYWtlMi1rYXQuaCIKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgdWludDhfdCBrZXlbQkxBS0UyU19LRVlCWVRFU107CisgIHVpbnQ4X3QgYnVmW0JMQUtFMl9LQVRfTEVOR1RIXTsKKyAgc2l6ZV90IGksIHN0ZXA7CisKKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMlNfS0VZQllURVM7ICsraSApCisgICAga2V5W2ldID0gKCB1aW50OF90IClpOworCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgICBidWZbaV0gPSAoIHVpbnQ4X3QgKWk7CisKKyAgLyogVGVzdCBzaW1wbGUgQVBJICovCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgeworICAgIHVpbnQ4X3QgaGFzaFtCTEFLRTJTX09VVEJZVEVTXTsKKyAgICBibGFrZTJzKCBoYXNoLCBCTEFLRTJTX09VVEJZVEVTLCBidWYsIGksIGtleSwgQkxBS0UyU19LRVlCWVRFUyApOworCisgICAgaWYoIDAgIT0gbWVtY21wKCBoYXNoLCBibGFrZTJzX2tleWVkX2thdFtpXSwgQkxBS0UyU19PVVRCWVRFUyApICkKKyAgICB7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICB9CisKKyAgLyogVGVzdCBzdHJlYW1pbmcgQVBJICovCisgIGZvcihzdGVwID0gMTsgc3RlcCA8IEJMQUtFMlNfQkxPQ0tCWVRFUzsgKytzdGVwKSB7CisgICAgZm9yIChpID0gMDsgaSA8IEJMQUtFMl9LQVRfTEVOR1RIOyArK2kpIHsKKyAgICAgIHVpbnQ4X3QgaGFzaFtCTEFLRTJTX09VVEJZVEVTXTsKKyAgICAgIGJsYWtlMnNfc3RhdGUgUzsKKyAgICAgIHVpbnQ4X3QgKiBwID0gYnVmOworICAgICAgc2l6ZV90IG1sZW4gPSBpOworICAgICAgaW50IGVyciA9IDA7CisKKyAgICAgIGlmKCAoZXJyID0gYmxha2Uyc19pbml0X2tleSgmUywgQkxBS0UyU19PVVRCWVRFUywga2V5LCBCTEFLRTJTX0tFWUJZVEVTKSkgPCAwICkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIHdoaWxlIChtbGVuID49IHN0ZXApIHsKKyAgICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc191cGRhdGUoJlMsIHAsIHN0ZXApKSA8IDAgKSB7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIG1sZW4gLT0gc3RlcDsKKyAgICAgICAgcCArPSBzdGVwOworICAgICAgfQorICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc191cGRhdGUoJlMsIHAsIG1sZW4pKSA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc19maW5hbCgmUywgaGFzaCwgQkxBS0UyU19PVVRCWVRFUykpIDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIGlmICgwICE9IG1lbWNtcChoYXNoLCBibGFrZTJzX2tleWVkX2thdFtpXSwgQkxBS0UyU19PVVRCWVRFUykpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1dHMoICJvayIgKTsKKyAgcmV0dXJuIDA7CitmYWlsOgorICBwdXRzKCJlcnJvciIpOworICByZXR1cm4gLTE7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNwX3JlZi5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc3BfcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmMTAxMAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNwX3JlZi5jCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICAgQkxBS0UyIHJlZmVyZW5jZSBzb3VyY2UgY29kZSBwYWNrYWdlIC0gcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb25zCisKKyAgIENvcHlyaWdodCAyMDEyLCBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+LiAgWW91IG1heSB1c2UgdGhpcyB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoZSBDQzAsIHRoZSBPcGVuU1NMIExpY2VuY2UsIG9yIHRoZSBBcGFjaGUgUHVibGljIExpY2Vuc2UgMi4wLCBhdAorICAgeW91ciBvcHRpb24uICBUaGUgdGVybXMgb2YgdGhlc2UgbGljZW5zZXMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAtIENDMCAxLjAgVW5pdmVyc2FsIDogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wCisgICAtIE9wZW5TU0wgbGljZW5zZSAgIDogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorICAgLSBBcGFjaGUgMi4wICAgICAgICA6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCTEFLRTIgaGFzaCBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHBzOi8vYmxha2UyLm5ldC4KKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgZGVmaW5lZChfT1BFTk1QKQorI2luY2x1ZGUgPG9tcC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmNoaXZlX2JsYWtlMi5oIgorI2luY2x1ZGUgImFyY2hpdmVfYmxha2UyX2ltcGwuaCIKKworI2RlZmluZSBQQVJBTExFTElTTV9ERUdSRUUgOAorCisvKgorICBibGFrZTJzcF9pbml0X3BhcmFtIGRlZmF1bHRzIHRvIHNldHRpbmcgdGhlIGV4cGVjdGluZyBvdXRwdXQgbGVuZ3RoCisgIGZyb20gdGhlIGRpZ2VzdF9sZW5ndGggcGFyYW1ldGVyIGJsb2NrIGZpZWxkLgorCisgIEluIHNvbWUgY2FzZXMsIGhvd2V2ZXIsIHdlIGRvIG5vdCB3YW50IHRoaXMsIGFzIHRoZSBvdXRwdXQgbGVuZ3RoCisgIG9mIHRoZXNlIGluc3RhbmNlcyBpcyBnaXZlbiBieSBpbm5lcl9sZW5ndGggaW5zdGVhZC4KKyovCitzdGF0aWMgaW50IGJsYWtlMnNwX2luaXRfbGVhZl9wYXJhbSggYmxha2Uyc19zdGF0ZSAqUywgY29uc3QgYmxha2Uyc19wYXJhbSAqUCApCit7CisgIGludCBlcnIgPSBibGFrZTJzX2luaXRfcGFyYW0oUywgUCk7CisgIFMtPm91dGxlbiA9IFAtPmlubmVyX2xlbmd0aDsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBibGFrZTJzcF9pbml0X2xlYWYoIGJsYWtlMnNfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIHNpemVfdCBrZXlsZW4sIHVpbnQzMl90IG9mZnNldCApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKyAgUC0+ZGlnZXN0X2xlbmd0aCA9ICh1aW50OF90KW91dGxlbjsKKyAgUC0+a2V5X2xlbmd0aCA9ICh1aW50OF90KWtleWxlbjsKKyAgUC0+ZmFub3V0ID0gUEFSQUxMRUxJU01fREVHUkVFOworICBQLT5kZXB0aCA9IDI7CisgIHN0b3JlMzIoICZQLT5sZWFmX2xlbmd0aCwgMCApOworICBzdG9yZTMyKCAmUC0+bm9kZV9vZmZzZXQsIG9mZnNldCApOworICBzdG9yZTE2KCAmUC0+eG9mX2xlbmd0aCwgMCApOworICBQLT5ub2RlX2RlcHRoID0gMDsKKyAgUC0+aW5uZXJfbGVuZ3RoID0gQkxBS0UyU19PVVRCWVRFUzsKKyAgbWVtc2V0KCBQLT5zYWx0LCAwLCBzaXplb2YoIFAtPnNhbHQgKSApOworICBtZW1zZXQoIFAtPnBlcnNvbmFsLCAwLCBzaXplb2YoIFAtPnBlcnNvbmFsICkgKTsKKyAgcmV0dXJuIGJsYWtlMnNwX2luaXRfbGVhZl9wYXJhbSggUywgUCApOworfQorCitzdGF0aWMgaW50IGJsYWtlMnNwX2luaXRfcm9vdCggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgc2l6ZV90IGtleWxlbiApCit7CisgIGJsYWtlMnNfcGFyYW0gUFsxXTsKKyAgUC0+ZGlnZXN0X2xlbmd0aCA9ICh1aW50OF90KW91dGxlbjsKKyAgUC0+a2V5X2xlbmd0aCA9ICh1aW50OF90KWtleWxlbjsKKyAgUC0+ZmFub3V0ID0gUEFSQUxMRUxJU01fREVHUkVFOworICBQLT5kZXB0aCA9IDI7CisgIHN0b3JlMzIoICZQLT5sZWFmX2xlbmd0aCwgMCApOworICBzdG9yZTMyKCAmUC0+bm9kZV9vZmZzZXQsIDAgKTsKKyAgc3RvcmUxNiggJlAtPnhvZl9sZW5ndGgsIDAgKTsKKyAgUC0+bm9kZV9kZXB0aCA9IDE7CisgIFAtPmlubmVyX2xlbmd0aCA9IEJMQUtFMlNfT1VUQllURVM7CisgIG1lbXNldCggUC0+c2FsdCwgMCwgc2l6ZW9mKCBQLT5zYWx0ICkgKTsKKyAgbWVtc2V0KCBQLT5wZXJzb25hbCwgMCwgc2l6ZW9mKCBQLT5wZXJzb25hbCApICk7CisgIHJldHVybiBibGFrZTJzX2luaXRfcGFyYW0oIFMsIFAgKTsKK30KKworCitpbnQgYmxha2Uyc3BfaW5pdCggYmxha2Uyc3Bfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4gKQoreworICBzaXplX3QgaTsKKworICBpZiggIW91dGxlbiB8fCBvdXRsZW4gPiBCTEFLRTJTX09VVEJZVEVTICkgcmV0dXJuIC0xOworCisgIG1lbXNldCggUy0+YnVmLCAwLCBzaXplb2YoIFMtPmJ1ZiApICk7CisgIFMtPmJ1ZmxlbiA9IDA7CisgIFMtPm91dGxlbiA9IG91dGxlbjsKKworICBpZiggYmxha2Uyc3BfaW5pdF9yb290KCBTLT5SLCBvdXRsZW4sIDAgKSA8IDAgKQorICAgIHJldHVybiAtMTsKKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICAgIGlmKCBibGFrZTJzcF9pbml0X2xlYWYoIFMtPlNbaV0sIG91dGxlbiwgMCwgKHVpbnQzMl90KWkgKSA8IDAgKSByZXR1cm4gLTE7CisKKyAgUy0+Ui0+bGFzdF9ub2RlID0gMTsKKyAgUy0+U1tQQVJBTExFTElTTV9ERUdSRUUgLSAxXS0+bGFzdF9ub2RlID0gMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBibGFrZTJzcF9pbml0X2tleSggYmxha2Uyc3Bfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgIHNpemVfdCBpOworCisgIGlmKCAhb3V0bGVuIHx8IG91dGxlbiA+IEJMQUtFMlNfT1VUQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoICFrZXkgfHwgIWtleWxlbiB8fCBrZXlsZW4gPiBCTEFLRTJTX0tFWUJZVEVTICkgcmV0dXJuIC0xOworCisgIG1lbXNldCggUy0+YnVmLCAwLCBzaXplb2YoIFMtPmJ1ZiApICk7CisgIFMtPmJ1ZmxlbiA9IDA7CisgIFMtPm91dGxlbiA9IG91dGxlbjsKKworICBpZiggYmxha2Uyc3BfaW5pdF9yb290KCBTLT5SLCBvdXRsZW4sIGtleWxlbiApIDwgMCApCisgICAgcmV0dXJuIC0xOworCisgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgaWYoIGJsYWtlMnNwX2luaXRfbGVhZiggUy0+U1tpXSwgb3V0bGVuLCBrZXlsZW4sICh1aW50MzJfdClpICkgPCAwICkgcmV0dXJuIC0xOworCisgIFMtPlItPmxhc3Rfbm9kZSA9IDE7CisgIFMtPlNbUEFSQUxMRUxJU01fREVHUkVFIC0gMV0tPmxhc3Rfbm9kZSA9IDE7CisgIHsKKyAgICB1aW50OF90IGJsb2NrW0JMQUtFMlNfQkxPQ0tCWVRFU107CisgICAgbWVtc2V0KCBibG9jaywgMCwgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgbWVtY3B5KCBibG9jaywga2V5LCBrZXlsZW4gKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgICBibGFrZTJzX3VwZGF0ZSggUy0+U1tpXSwgYmxvY2ssIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworCisgICAgc2VjdXJlX3plcm9fbWVtb3J5KCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7IC8qIEJ1cm4gdGhlIGtleSBmcm9tIHN0YWNrICovCisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworaW50IGJsYWtlMnNwX3VwZGF0ZSggYmxha2Uyc3Bfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKnBpbiwgc2l6ZV90IGlubGVuICkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqIGluID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwaW47CisgIHNpemVfdCBsZWZ0ID0gUy0+YnVmbGVuOworICBzaXplX3QgZmlsbCA9IHNpemVvZiggUy0+YnVmICkgLSBsZWZ0OworICBzaXplX3QgaTsKKworICBpZiggbGVmdCAmJiBpbmxlbiA+PSBmaWxsICkKKyAgeworICAgIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGZpbGwgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgICBibGFrZTJzX3VwZGF0ZSggUy0+U1tpXSwgUy0+YnVmICsgaSAqIEJMQUtFMlNfQkxPQ0tCWVRFUywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisKKyAgICBpbiArPSBmaWxsOworICAgIGlubGVuIC09IGZpbGw7CisgICAgbGVmdCA9IDA7CisgIH0KKworI2lmIGRlZmluZWQoX09QRU5NUCkKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgc2hhcmVkKFMpLCBudW1fdGhyZWFkcyhQQVJBTExFTElTTV9ERUdSRUUpCisjZWxzZQorICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorI2VuZGlmCisgIHsKKyNpZiBkZWZpbmVkKF9PUEVOTVApCisgICAgc2l6ZV90ICAgICAgaSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworI2VuZGlmCisgICAgc2l6ZV90IGlubGVuX18gPSBpbmxlbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbl9fID0gKCBjb25zdCB1bnNpZ25lZCBjaGFyICogKWluOworICAgIGluX18gKz0gaSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKworICAgIHdoaWxlKCBpbmxlbl9fID49IFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUyApCisgICAgeworICAgICAgYmxha2Uyc191cGRhdGUoIFMtPlNbaV0sIGluX18sIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworICAgICAgaW5fXyArPSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgICBpbmxlbl9fIC09IFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICB9CisgIH0KKworICBpbiArPSBpbmxlbiAtIGlubGVuICUgKCBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgaW5sZW4gJT0gUEFSQUxMRUxJU01fREVHUkVFICogQkxBS0UyU19CTE9DS0JZVEVTOworCisgIGlmKCBpbmxlbiA+IDAgKQorICAgIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGlubGVuICk7CisKKyAgUy0+YnVmbGVuID0gbGVmdCArIGlubGVuOworICByZXR1cm4gMDsKK30KKworCitpbnQgYmxha2Uyc3BfZmluYWwoIGJsYWtlMnNwX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4gKQoreworICB1aW50OF90IGhhc2hbUEFSQUxMRUxJU01fREVHUkVFXVtCTEFLRTJTX09VVEJZVEVTXTsKKyAgc2l6ZV90IGk7CisKKyAgaWYob3V0ID09IE5VTEwgfHwgb3V0bGVuIDwgUy0+b3V0bGVuKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgeworICAgIGlmKCBTLT5idWZsZW4gPiBpICogQkxBS0UyU19CTE9DS0JZVEVTICkKKyAgICB7CisgICAgICBzaXplX3QgbGVmdCA9IFMtPmJ1ZmxlbiAtIGkgKiBCTEFLRTJTX0JMT0NLQllURVM7CisKKyAgICAgIGlmKCBsZWZ0ID4gQkxBS0UyU19CTE9DS0JZVEVTICkgbGVmdCA9IEJMQUtFMlNfQkxPQ0tCWVRFUzsKKworICAgICAgYmxha2Uyc191cGRhdGUoIFMtPlNbaV0sIFMtPmJ1ZiArIGkgKiBCTEFLRTJTX0JMT0NLQllURVMsIGxlZnQgKTsKKyAgICB9CisKKyAgICBibGFrZTJzX2ZpbmFsKCBTLT5TW2ldLCBoYXNoW2ldLCBCTEFLRTJTX09VVEJZVEVTICk7CisgIH0KKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICAgIGJsYWtlMnNfdXBkYXRlKCBTLT5SLCBoYXNoW2ldLCBCTEFLRTJTX09VVEJZVEVTICk7CisKKyAgcmV0dXJuIGJsYWtlMnNfZmluYWwoIFMtPlIsIG91dCwgUy0+b3V0bGVuICk7Cit9CisKKworaW50IGJsYWtlMnNwKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgIHVpbnQ4X3QgaGFzaFtQQVJBTExFTElTTV9ERUdSRUVdW0JMQUtFMlNfT1VUQllURVNdOworICBibGFrZTJzX3N0YXRlIFNbUEFSQUxMRUxJU01fREVHUkVFXVsxXTsKKyAgYmxha2Uyc19zdGF0ZSBGU1sxXTsKKyAgc2l6ZV90IGk7CisKKyAgLyogVmVyaWZ5IHBhcmFtZXRlcnMgKi8KKyAgaWYgKCBOVUxMID09IGluICYmIGlubGVuID4gMCApIHJldHVybiAtMTsKKworICBpZiAoIE5VTEwgPT0gb3V0ICkgcmV0dXJuIC0xOworCisgIGlmICggTlVMTCA9PSBrZXkgJiYga2V5bGVuID4gMCkgcmV0dXJuIC0xOworCisgIGlmKCAhb3V0bGVuIHx8IG91dGxlbiA+IEJMQUtFMlNfT1VUQllURVMgKSByZXR1cm4gLTE7CisKKyAgaWYoIGtleWxlbiA+IEJMQUtFMlNfS0VZQllURVMgKSByZXR1cm4gLTE7CisKKyAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgICBpZiggYmxha2Uyc3BfaW5pdF9sZWFmKCBTW2ldLCBvdXRsZW4sIGtleWxlbiwgKHVpbnQzMl90KWkgKSA8IDAgKSByZXR1cm4gLTE7CisKKyAgU1tQQVJBTExFTElTTV9ERUdSRUUgLSAxXS0+bGFzdF9ub2RlID0gMTsgLyogbWFyayBsYXN0IG5vZGUgKi8KKworICBpZigga2V5bGVuID4gMCApCisgIHsKKyAgICB1aW50OF90IGJsb2NrW0JMQUtFMlNfQkxPQ0tCWVRFU107CisgICAgbWVtc2V0KCBibG9jaywgMCwgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgbWVtY3B5KCBibG9jaywga2V5LCBrZXlsZW4gKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgICBibGFrZTJzX3VwZGF0ZSggU1tpXSwgYmxvY2ssIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworCisgICAgc2VjdXJlX3plcm9fbWVtb3J5KCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7IC8qIEJ1cm4gdGhlIGtleSBmcm9tIHN0YWNrICovCisgIH0KKworI2lmIGRlZmluZWQoX09QRU5NUCkKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgc2hhcmVkKFMsaGFzaCksIG51bV90aHJlYWRzKFBBUkFMTEVMSVNNX0RFR1JFRSkKKyNlbHNlCisKKyAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyNlbmRpZgorICB7CisjaWYgZGVmaW5lZChfT1BFTk1QKQorICAgIHNpemVfdCAgICAgIGkgPSBvbXBfZ2V0X3RocmVhZF9udW0oKTsKKyNlbmRpZgorICAgIHNpemVfdCBpbmxlbl9fID0gaW5sZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5fXyA9ICggY29uc3QgdW5zaWduZWQgY2hhciAqIClpbjsKKyAgICBpbl9fICs9IGkgKiBCTEFLRTJTX0JMT0NLQllURVM7CisKKyAgICB3aGlsZSggaW5sZW5fXyA+PSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVMgKQorICAgIHsKKyAgICAgIGJsYWtlMnNfdXBkYXRlKCBTW2ldLCBpbl9fLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgICAgIGluX18gKz0gUEFSQUxMRUxJU01fREVHUkVFICogQkxBS0UyU19CTE9DS0JZVEVTOworICAgICAgaW5sZW5fXyAtPSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgfQorCisgICAgaWYoIGlubGVuX18gPiBpICogQkxBS0UyU19CTE9DS0JZVEVTICkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgbGVmdCA9IGlubGVuX18gLSBpICogQkxBS0UyU19CTE9DS0JZVEVTOworICAgICAgY29uc3Qgc2l6ZV90IGxlbiA9IGxlZnQgPD0gQkxBS0UyU19CTE9DS0JZVEVTID8gbGVmdCA6IEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICAgIGJsYWtlMnNfdXBkYXRlKCBTW2ldLCBpbl9fLCBsZW4gKTsKKyAgICB9CisKKyAgICBibGFrZTJzX2ZpbmFsKCBTW2ldLCBoYXNoW2ldLCBCTEFLRTJTX09VVEJZVEVTICk7CisgIH0KKworICBpZiggYmxha2Uyc3BfaW5pdF9yb290KCBGUywgb3V0bGVuLCBrZXlsZW4gKSA8IDAgKQorICAgIHJldHVybiAtMTsKKworICBGUy0+bGFzdF9ub2RlID0gMTsKKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICAgIGJsYWtlMnNfdXBkYXRlKCBGUywgaGFzaFtpXSwgQkxBS0UyU19PVVRCWVRFUyApOworCisgIHJldHVybiBibGFrZTJzX2ZpbmFsKCBGUywgb3V0LCBvdXRsZW4gKTsKK30KKworCisKKyNpZiBkZWZpbmVkKEJMQUtFMlNQX1NFTEZURVNUKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImJsYWtlMi1rYXQuaCIKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgdWludDhfdCBrZXlbQkxBS0UyU19LRVlCWVRFU107CisgIHVpbnQ4X3QgYnVmW0JMQUtFMl9LQVRfTEVOR1RIXTsKKyAgc2l6ZV90IGksIHN0ZXA7CisKKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMlNfS0VZQllURVM7ICsraSApCisgICAga2V5W2ldID0gKCB1aW50OF90IClpOworCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgICBidWZbaV0gPSAoIHVpbnQ4X3QgKWk7CisKKyAgLyogVGVzdCBzaW1wbGUgQVBJICovCisgIGZvciggaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpICkKKyAgeworICAgIHVpbnQ4X3QgaGFzaFtCTEFLRTJTX09VVEJZVEVTXTsKKyAgICBibGFrZTJzcCggaGFzaCwgQkxBS0UyU19PVVRCWVRFUywgYnVmLCBpLCBrZXksIEJMQUtFMlNfS0VZQllURVMgKTsKKworICAgIGlmKCAwICE9IG1lbWNtcCggaGFzaCwgYmxha2Uyc3Bfa2V5ZWRfa2F0W2ldLCBCTEFLRTJTX09VVEJZVEVTICkgKQorICAgIHsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIH0KKworICAvKiBUZXN0IHN0cmVhbWluZyBBUEkgKi8KKyAgZm9yKHN0ZXAgPSAxOyBzdGVwIDwgQkxBS0UyU19CTE9DS0JZVEVTOyArK3N0ZXApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgQkxBS0UyX0tBVF9MRU5HVEg7ICsraSkgeworICAgICAgdWludDhfdCBoYXNoW0JMQUtFMlNfT1VUQllURVNdOworICAgICAgYmxha2Uyc3Bfc3RhdGUgUzsKKyAgICAgIHVpbnQ4X3QgKiBwID0gYnVmOworICAgICAgc2l6ZV90IG1sZW4gPSBpOworICAgICAgaW50IGVyciA9IDA7CisKKyAgICAgIGlmKCAoZXJyID0gYmxha2Uyc3BfaW5pdF9rZXkoJlMsIEJMQUtFMlNfT1VUQllURVMsIGtleSwgQkxBS0UyU19LRVlCWVRFUykpIDwgMCApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICB3aGlsZSAobWxlbiA+PSBzdGVwKSB7CisgICAgICAgIGlmICggKGVyciA9IGJsYWtlMnNwX3VwZGF0ZSgmUywgcCwgc3RlcCkpIDwgMCApIHsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgbWxlbiAtPSBzdGVwOworICAgICAgICBwICs9IHN0ZXA7CisgICAgICB9CisgICAgICBpZiAoIChlcnIgPSBibGFrZTJzcF91cGRhdGUoJlMsIHAsIG1sZW4pKSA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc3BfZmluYWwoJlMsIGhhc2gsIEJMQUtFMlNfT1VUQllURVMpKSA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBpZiAoMCAhPSBtZW1jbXAoaGFzaCwgYmxha2Uyc3Bfa2V5ZWRfa2F0W2ldLCBCTEFLRTJTX09VVEJZVEVTKSkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHV0cyggIm9rIiApOworICByZXR1cm4gMDsKK2ZhaWw6CisgIHB1dHMoImVycm9yIik7CisgIHJldHVybiAtMTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY21kbGluZV9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jbWRsaW5lX3ByaXZhdGUuaAppbmRleCA0ZTQwOWU4Li41N2ExOTQ5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jbWRsaW5lX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jbWRsaW5lX3ByaXZhdGUuaApAQCAtMjUsMTUgKzI1LDE1IEBACiAgKiAkRnJlZUJTRCQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfQ01ETElORV9QUklWQVRFX0gKKyNkZWZpbmUgQVJDSElWRV9DTURMSU5FX1BSSVZBVEVfSAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfVEVTVAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfQ01ETElORV9QUklWQVRFX0gKLSNkZWZpbmUgQVJDSElWRV9DTURMSU5FX1BSSVZBVEVfSAotCiBzdHJ1Y3QgYXJjaGl2ZV9jbWRsaW5lIHsKICAgICAgICAgY2hhciAgICAgICAgICAgICpwYXRoOwogICAgICAgICBjaGFyICAgICAgICAgICAgKiphcmd2OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3JjMzIuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyYzMyLmgKaW5kZXggY2Q2MzNhZi4uNGYxYWVkMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3JjMzIuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcmMzMi5oCkBAIC0yNSw2ICsyNSw5IEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX2NyYzMyLmggMjAxMTAyIDIwMDktMTItMjggMDM6MTE6MzZaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfQ1JDMzJfSAorI2RlZmluZSBBUkNISVZFX0NSQzMyX0gKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCkBAIC03NiwzICs3OSw1IEBACiAJCWNyYyA9IGNyY190YmxbKGNyYyBeICpwKyspICYgMHhmZl0gXiAoY3JjID4+IDgpOwogCXJldHVybiAoY3JjIF4gMHhmZmZmZmZmZlVMKTsKIH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yLmMKaW5kZXggNzE5NjdjOS4uOGFiMmIwOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyeXB0b3IuYwpAQCAtODUsNiArODUsMzUgQEAKIAlyZXR1cm4gKEJDUllQVF9TVUNDRVNTKHN0YXR1cykpID8gMDogLTE7CiB9CiAKKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJNQkVEQ1JZUFRPKSAmJiBkZWZpbmVkKEhBVkVfTUJFRFRMU19QS0NTNV9IKQorCitzdGF0aWMgaW50CitwYmtkZjJfc2hhMShjb25zdCBjaGFyICpwdywgc2l6ZV90IHB3X2xlbiwgY29uc3QgdWludDhfdCAqc2FsdCwKKyAgICBzaXplX3Qgc2FsdF9sZW4sIHVuc2lnbmVkIHJvdW5kcywgdWludDhfdCAqZGVyaXZlZF9rZXksCisgICAgc2l6ZV90IGRlcml2ZWRfa2V5X2xlbikKK3sKKwltYmVkdGxzX21kX2NvbnRleHRfdCBjdHg7CisJY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKmluZm87CisJaW50IHJldDsKKworCW1iZWR0bHNfbWRfaW5pdCgmY3R4KTsKKwlpbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZShNQkVEVExTX01EX1NIQTEpOworCWlmIChpbmZvID09IE5VTEwpIHsKKwkJbWJlZHRsc19tZF9mcmVlKCZjdHgpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0ID0gbWJlZHRsc19tZF9zZXR1cCgmY3R4LCBpbmZvLCAxKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJbWJlZHRsc19tZF9mcmVlKCZjdHgpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0ID0gbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYygmY3R4LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKXB3LAorCSAgICBwd19sZW4sIHNhbHQsIHNhbHRfbGVuLCByb3VuZHMsIGRlcml2ZWRfa2V5X2xlbiwgZGVyaXZlZF9rZXkpOworCisJbWJlZHRsc19tZF9mcmVlKCZjdHgpOworCXJldHVybiAocmV0KTsKK30KKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9QQktERjJfSCkKIAogc3RhdGljIGludApAQCAtMjY5LDYgKzI5OCwzOSBAQAogCXJldHVybiAwOwogfQogCisjZWxpZiBkZWZpbmVkKEhBVkVfTElCTUJFRENSWVBUTykgJiYgZGVmaW5lZChIQVZFX01CRURUTFNfQUVTX0gpCisKK3N0YXRpYyBpbnQKK2Flc19jdHJfaW5pdChhcmNoaXZlX2NyeXB0b19jdHggKmN0eCwgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbikKK3sKKwltYmVkdGxzX2Flc19pbml0KCZjdHgtPmN0eCk7CisJY3R4LT5rZXlfbGVuID0ga2V5X2xlbjsKKwltZW1jcHkoY3R4LT5rZXksIGtleSwga2V5X2xlbik7CisJbWVtc2V0KGN0eC0+bm9uY2UsIDAsIHNpemVvZihjdHgtPm5vbmNlKSk7CisJY3R4LT5lbmNyX3BvcyA9IEFFU19CTE9DS19TSVpFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithZXNfY3RyX2VuY3J5cHRfY291bnRlcihhcmNoaXZlX2NyeXB0b19jdHggKmN0eCkKK3sKKwlpZiAobWJlZHRsc19hZXNfc2V0a2V5X2VuYygmY3R4LT5jdHgsIGN0eC0+a2V5LAorCSAgICBjdHgtPmtleV9sZW4gKiA4KSAhPSAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAobWJlZHRsc19hZXNfY3J5cHRfZWNiKCZjdHgtPmN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgY3R4LT5ub25jZSwKKwkgICAgY3R4LT5lbmNyX2J1ZikgIT0gMCkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Flc19jdHJfcmVsZWFzZShhcmNoaXZlX2NyeXB0b19jdHggKmN0eCkKK3sKKwltYmVkdGxzX2Flc19mcmVlKCZjdHgtPmN0eCk7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gMDsKK30KKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9BRVNfSCkKIAogc3RhdGljIGludApAQCAtMzE2LDcgKzM3OCwxNCBAQAogCW1lbWNweShjdHgtPmtleSwga2V5LCBrZXlfbGVuKTsKIAltZW1zZXQoY3R4LT5ub25jZSwgMCwgc2l6ZW9mKGN0eC0+bm9uY2UpKTsKIAljdHgtPmVuY3JfcG9zID0gQUVTX0JMT0NLX1NJWkU7CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiAgPj0gMHgxMDEwMDAwMEwgJiYgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisJaWYgKCFFVlBfQ0lQSEVSX0NUWF9yZXNldChjdHgtPmN0eCkpIHsKKwkJRVZQX0NJUEhFUl9DVFhfZnJlZShjdHgtPmN0eCk7CisJCWN0eC0+Y3R4ID0gTlVMTDsKKwl9CisjZWxzZQogCUVWUF9DSVBIRVJfQ1RYX2luaXQoY3R4LT5jdHgpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyeXB0b3JfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvcl9wcml2YXRlLmgKaW5kZXggYjk3NTkyMi4uNjRhMjA1NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvcl9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvcl9wcml2YXRlLmgKQEAgLTIzLDEzICsyMywxMiBAQAogKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKi8KIAotI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKLSNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgotI2VuZGlmCi0KICNpZm5kZWYgQVJDSElWRV9DUllQVE9SX1BSSVZBVEVfSF9JTkNMVURFRAogI2RlZmluZSBBUkNISVZFX0NSWVBUT1JfUFJJVkFURV9IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgogLyoKICAqIE9uIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbnkgcmVjb2duaXplZCBjcnlwdG8gbGlicmFyaWVzLAogICogdGhlIGFyY2hpdmVfY3J5cHRvci5jIGZpbGUgd2lsbCBub3JtYWxseSBkZWZpbmUgbm8gdXNhYmxlIHN5bWJvbHMuCkBAIC04Myw2ICs4MiwyMyBAQAogCXVuc2lnbmVkCWVuY3JfcG9zOwogfSBhcmNoaXZlX2NyeXB0b19jdHg7CiAKKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJNQkVEQ1JZUFRPKSAmJiBkZWZpbmVkKEhBVkVfTUJFRFRMU19BRVNfSCkKKyNpbmNsdWRlIDxtYmVkdGxzL2Flcy5oPgorI2luY2x1ZGUgPG1iZWR0bHMvbWQuaD4KKyNpbmNsdWRlIDxtYmVkdGxzL3BrY3M1Lmg+CisKKyNkZWZpbmUgQUVTX01BWF9LRVlfU0laRSAzMgorI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgorCit0eXBlZGVmIHN0cnVjdCB7CisJbWJlZHRsc19hZXNfY29udGV4dAljdHg7CisJdWludDhfdAkJa2V5W0FFU19NQVhfS0VZX1NJWkVdOworCXVuc2lnbmVkCWtleV9sZW47CisJdWludDhfdAkJbm9uY2VbQUVTX0JMT0NLX1NJWkVdOworCXVpbnQ4X3QJCWVuY3JfYnVmW0FFU19CTE9DS19TSVpFXTsKKwl1bnNpZ25lZAllbmNyX3BvczsKK30gYXJjaGl2ZV9jcnlwdG9fY3R4OworCiAjZWxpZiBkZWZpbmVkKEhBVkVfTElCTkVUVExFKSAmJiBkZWZpbmVkKEhBVkVfTkVUVExFX0FFU19IKQogI2lmIGRlZmluZWQoSEFWRV9ORVRUTEVfUEJLREYyX0gpCiAjaW5jbHVkZSA8bmV0dGxlL3Bia2RmMi5oPgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlnZXN0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3QuYwppbmRleCA0MTUzOTIzLi4zNGM1OGFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3QuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3QuYwpAQCAtMTc4LDYgKzE3OCw0MCBAQAogICByZXR1cm4gKEFSQ0hJVkVfT0spOwogfQogCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9NQkVEVExTKQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19tZDVpbml0KGFyY2hpdmVfbWQ1X2N0eCAqY3R4KQoreworICBtYmVkdGxzX21kNV9pbml0KGN0eCk7CisgIGlmIChtYmVkdGxzX21kNV9zdGFydHNfcmV0KGN0eCkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfbWQ1dXBkYXRlKGFyY2hpdmVfbWQ1X2N0eCAqY3R4LCBjb25zdCB2b2lkICppbmRhdGEsCisgICAgc2l6ZV90IGluc2l6ZSkKK3sKKyAgaWYgKG1iZWR0bHNfbWQ1X3VwZGF0ZV9yZXQoY3R4LCBpbmRhdGEsIGluc2l6ZSkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfbWQ1ZmluYWwoYXJjaGl2ZV9tZDVfY3R4ICpjdHgsIHZvaWQgKm1kKQoreworICBpZiAobWJlZHRsc19tZDVfZmluaXNoX3JldChjdHgsIG1kKSA9PSAwKSB7CisgICAgbWJlZHRsc19tZDVfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIH0gZWxzZSB7CisgICAgbWJlZHRsc19tZDVfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CisgIH0KK30KKwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTkVUVExFKQogCiBzdGF0aWMgaW50CkBAIC0zMzUsNiArMzY5LDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MGluaXQoYXJjaGl2ZV9ybWQxNjBfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfcmlwZW1kMTYwX2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfcmlwZW1kMTYwX3N0YXJ0c19yZXQoY3R4KSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjB1cGRhdGUoYXJjaGl2ZV9ybWQxNjBfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjBmaW5hbChhcmNoaXZlX3JtZDE2MF9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3JpcGVtZDE2MF9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTQ5MSw2ICs1NTksNDAgQEAKICAgcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTFpbml0KGFyY2hpdmVfc2hhMV9jdHggKmN0eCkKK3sKKyAgbWJlZHRsc19zaGExX2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfc2hhMV9zdGFydHNfcmV0KGN0eCkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhMXVwZGF0ZShhcmNoaXZlX3NoYTFfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19zaGExX3VwZGF0ZV9yZXQoY3R4LCBpbmRhdGEsIGluc2l6ZSkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhMWZpbmFsKGFyY2hpdmVfc2hhMV9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3NoYTFfZmluaXNoX3JldChjdHgsIG1kKSA9PSAwKSB7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICB9IGVsc2UgeworICAgIG1iZWR0bHNfc2hhMV9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTkVUVExFKQogCiBzdGF0aWMgaW50CkBAIC03MjAsNiArODIyLDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NmluaXQoYXJjaGl2ZV9zaGEyNTZfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfc2hhMjU2X2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfc2hhMjU2X3N0YXJ0c19yZXQoY3R4LCAwKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEyNTZ1cGRhdGUoYXJjaGl2ZV9zaGEyNTZfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19zaGEyNTZfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEyNTZmaW5hbChhcmNoaXZlX3NoYTI1Nl9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3NoYTI1Nl9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTkyMSw2ICsxMDU3LDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTM4NGluaXQoYXJjaGl2ZV9zaGEzODRfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfc2hhNTEyX2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfc2hhNTEyX3N0YXJ0c19yZXQoY3R4LCAxKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEzODR1cGRhdGUoYXJjaGl2ZV9zaGEzODRfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19zaGE1MTJfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGEzODRmaW5hbChhcmNoaXZlX3NoYTM4NF9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3NoYTUxMl9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTExNDYsNiArMTMxNiw0MCBAQAogICByZXR1cm4gKEFSQ0hJVkVfT0spOwogfQogCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGE1MTJpbml0KGFyY2hpdmVfc2hhNTEyX2N0eCAqY3R4KQoreworICBtYmVkdGxzX3NoYTUxMl9pbml0KGN0eCk7CisgIGlmIChtYmVkdGxzX3NoYTUxMl9zdGFydHNfcmV0KGN0eCwgMCkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhNTEydXBkYXRlKGFyY2hpdmVfc2hhNTEyX2N0eCAqY3R4LCBjb25zdCB2b2lkICppbmRhdGEsCisgICAgc2l6ZV90IGluc2l6ZSkKK3sKKyAgaWYgKG1iZWR0bHNfc2hhNTEyX3VwZGF0ZV9yZXQoY3R4LCBpbmRhdGEsIGluc2l6ZSkgPT0gMCkKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICBlbHNlCisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKK30KKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhNTEyZmluYWwoYXJjaGl2ZV9zaGE1MTJfY3R4ICpjdHgsIHZvaWQgKm1kKQoreworICBpZiAobWJlZHRsc19zaGE1MTJfZmluaXNoX3JldChjdHgsIG1kKSA9PSAwKSB7CisgICAgbWJlZHRsc19zaGE1MTJfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIH0gZWxzZSB7CisgICAgbWJlZHRsc19zaGE1MTJfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CisgIH0KK30KKwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTkVUVExFKQogCiBzdGF0aWMgaW50CkBAIC0xMjc2LDYgKzE0ODAsMTAgQEAKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fbWQ1aW5pdCwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fbWQ1dXBkYXRlLAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9tZDVmaW5hbCwKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X01CRURUTFMpCisgICZfX2FyY2hpdmVfbWJlZHRsc19tZDVpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfbWQ1dXBkYXRlLAorICAmX19hcmNoaXZlX21iZWR0bHNfbWQ1ZmluYWwsCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX21kNWluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX21kNXVwZGF0ZSwKQEAgLTEzMDMsNiArMTUxMSwxMCBAQAogICAmX19hcmNoaXZlX2xpYm1kX3JpcGVtZDE2MGluaXQsCiAgICZfX2FyY2hpdmVfbGlibWRfcmlwZW1kMTYwdXBkYXRlLAogICAmX19hcmNoaXZlX2xpYm1kX3JpcGVtZDE2MGZpbmFsLAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTUJFRFRMUykKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MGluaXQsCisgICZfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjB1cGRhdGUsCisgICZfX2FyY2hpdmVfbWJlZHRsc19yaXBlbWQxNjBmaW5hbCwKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX05FVFRMRSkKICAgJl9fYXJjaGl2ZV9uZXR0bGVfcmlwZW1kMTYwaW5pdCwKICAgJl9fYXJjaGl2ZV9uZXR0bGVfcmlwZW1kMTYwdXBkYXRlLApAQCAtMTMzMCw2ICsxNTQyLDEwIEBACiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTFpbml0LAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGExdXBkYXRlLAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGExZmluYWwsCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTUJFRFRMUykKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTFpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMXVwZGF0ZSwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTFmaW5hbCwKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTFpbml0LAogICAmX19hcmNoaXZlX25ldHRsZV9zaGExdXBkYXRlLApAQCAtMTM2OSw2ICsxNTg1LDEwIEBACiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTI1NmluaXQsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTI1NnVwZGF0ZSwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMjU2ZmluYWwsCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9NQkVEVExTKQorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMjU2aW5pdCwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NnVwZGF0ZSwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NmZpbmFsLAogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTkVUVExFKQogICAmX19hcmNoaXZlX25ldHRsZV9zaGEyNTZpbml0LAogICAmX19hcmNoaXZlX25ldHRsZV9zaGEyNTZ1cGRhdGUsCkBAIC0xNDA0LDYgKzE2MjQsMTAgQEAKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMzg0aW5pdCwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMzg0dXBkYXRlLAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGEzODRmaW5hbCwKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X01CRURUTFMpCisgICZfX2FyY2hpdmVfbWJlZHRsc19zaGEzODRpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMzg0dXBkYXRlLAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMzg0ZmluYWwsCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTM4NGluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTM4NHVwZGF0ZSwKQEAgLTE0NDMsNiArMTY2NywxMCBAQAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGE1MTJpbml0LAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGE1MTJ1cGRhdGUsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTUxMmZpbmFsCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKQorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhNTEyaW5pdCwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTUxMnVwZGF0ZSwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTUxMmZpbmFsCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTUxMmluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTUxMnVwZGF0ZSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdF9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3RfcHJpdmF0ZS5oCmluZGV4IGI0ZmQ2Y2EuLjE1MzEyZWUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdF9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlnZXN0X3ByaXZhdGUuaApAQCAtMjQsMTMgKzI0LDEyIEBACiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCisjaWZuZGVmIEFSQ0hJVkVfRElHRVNUX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX0RJR0VTVF9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCi0KLSNpZm5kZWYgQVJDSElWRV9DUllQVE9fUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfQ1JZUFRPX1BSSVZBVEVfSF9JTkNMVURFRAotCiAvKgogICogQ3J5cHRvIHN1cHBvcnQgaW4gdmFyaW91cyBPcGVyYXRpbmcgU3lzdGVtczoKICAqCkBAIC0xMTIsNiArMTExLDI0IEBACiAjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgogI2VuZGlmCiAKKy8qIG1iZWQgVExTIGNyeXB0byBoZWFkZXJzICovCisjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTUJFRFRMUykKKyNpbmNsdWRlIDxtYmVkdGxzL21kNS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTUJFRFRMUykKKyNpbmNsdWRlIDxtYmVkdGxzL3JpcGVtZDE2MC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX01CRURUTFMpCisjaW5jbHVkZSA8bWJlZHRscy9zaGExLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9NQkVEVExTKQorI2luY2x1ZGUgPG1iZWR0bHMvc2hhMjU2Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9NQkVEVExTKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTUJFRFRMUykKKyNpbmNsdWRlIDxtYmVkdGxzL3NoYTUxMi5oPgorI2VuZGlmCisKIC8qIE5ldHRsZSBjcnlwdG8gaGVhZGVycyAqLwogI2lmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X05FVFRMRSkKICNpbmNsdWRlIDxuZXR0bGUvbWQ1Lmg+CkBAIC0xNTksNiArMTc2LDggQEAKIHR5cGVkZWYgTUQ1X0NUWCBhcmNoaXZlX21kNV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJTWVNURU0pCiB0eXBlZGVmIENDX01ENV9DVFggYXJjaGl2ZV9tZDVfY3R4OworI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTUJFRFRMUykKK3R5cGVkZWYgbWJlZHRsc19tZDVfY29udGV4dCBhcmNoaXZlX21kNV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9ORVRUTEUpCiB0eXBlZGVmIHN0cnVjdCBtZDVfY3R4IGFyY2hpdmVfbWQ1X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X09QRU5TU0wpCkBAIC0xNzMsNiArMTkyLDggQEAKIHR5cGVkZWYgUk1EMTYwX0NUWCBhcmNoaXZlX3JtZDE2MF9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9MSUJNRCkKIHR5cGVkZWYgUklQRU1EMTYwX0NUWCBhcmNoaXZlX3JtZDE2MF9jdHg7CisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0IGFyY2hpdmVfcm1kMTYwX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHJpcGVtZDE2MF9jdHggYXJjaGl2ZV9ybWQxNjBfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfT1BFTlNTTCkKQEAgLTE4Nyw2ICsyMDgsOCBAQAogdHlwZWRlZiBTSEExX0NUWCBhcmNoaXZlX3NoYTFfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX0xJQlNZU1RFTSkKIHR5cGVkZWYgQ0NfU0hBMV9DVFggYXJjaGl2ZV9zaGExX2N0eDsKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3NoYTFfY29udGV4dCBhcmNoaXZlX3NoYTFfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHNoYTFfY3R4IGFyY2hpdmVfc2hhMV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfT1BFTlNTTCkKQEAgLTIwNyw2ICsyMzAsOCBAQAogdHlwZWRlZiBTSEEyNTZfQ1RYIGFyY2hpdmVfc2hhMjU2X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQlNZU1RFTSkKIHR5cGVkZWYgQ0NfU0hBMjU2X0NUWCBhcmNoaXZlX3NoYTI1Nl9jdHg7CisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IGFyY2hpdmVfc2hhMjU2X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHNoYTI1Nl9jdHggYXJjaGl2ZV9zaGEyNTZfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfT1BFTlNTTCkKQEAgLTIyNSw2ICsyNTAsOCBAQAogdHlwZWRlZiBTSEEyX0NUWCBhcmNoaXZlX3NoYTM4NF9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJTWVNURU0pCiB0eXBlZGVmIENDX1NIQTUxMl9DVFggYXJjaGl2ZV9zaGEzODRfY3R4OworI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTUJFRFRMUykKK3R5cGVkZWYgbWJlZHRsc19zaGE1MTJfY29udGV4dCBhcmNoaXZlX3NoYTM4NF9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpCiB0eXBlZGVmIHN0cnVjdCBzaGEzODRfY3R4IGFyY2hpdmVfc2hhMzg0X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X09QRU5TU0wpCkBAIC0yNDUsNiArMjcyLDggQEAKIHR5cGVkZWYgU0hBNTEyX0NUWCBhcmNoaXZlX3NoYTUxMl9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJTWVNURU0pCiB0eXBlZGVmIENDX1NIQTUxMl9DVFggYXJjaGl2ZV9zaGE1MTJfY3R4OworI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTUJFRFRMUykKK3R5cGVkZWYgbWJlZHRsc19zaGE1MTJfY29udGV4dCBhcmNoaXZlX3NoYTUxMl9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9ORVRUTEUpCiB0eXBlZGVmIHN0cnVjdCBzaGE1MTJfY3R4IGFyY2hpdmVfc2hhNTEyX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX09QRU5TU0wpCkBAIC0yNTksNiArMjg4LDcgQEAKICNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJDKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTElCTUQpIHx8CVwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTElCU1lTVEVNKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTUJFRFRMUykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X09QRU5TU0wpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9XSU4pCkBAIC0yNzIsNiArMzAyLDcgQEAKICAgX19hcmNoaXZlX2RpZ2VzdC5tZDV1cGRhdGUoY3R4LCBidWYsIG4pCiAKICNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9MSUJDKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTUJFRFRMUykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX09QRU5TU0wpCiAjZGVmaW5lIEFSQ0hJVkVfSEFTX1JNRDE2MApAQCAtMjg2LDYgKzMxNyw3IEBACiAjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX0xJQkMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCTUQpIHx8CVwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX0xJQlNZU1RFTSkgfHxcCisgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9NQkVEVExTKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9PUEVOU1NMKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX1dJTikKQEAgLTMwMyw2ICszMzUsNyBAQAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9MSUJDMykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQk1EKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTElCU1lTVEVNKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTUJFRFRMUykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X09QRU5TU0wpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9XSU4pCkBAIC0zMTksNiArMzUyLDcgQEAKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTElCQzIpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJDMykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X0xJQlNZU1RFTSkgfHxcCisgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X01CRURUTFMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9ORVRUTEUpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9PUEVOU1NMKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfV0lOKQpAQCAtMzM2LDYgKzM3MCw3IEBACiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQkMzKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTElCTUQpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJTWVNURU0pIHx8XAorICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTkVUVExFKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfT1BFTlNTTCkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX1dJTikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2Rpc2tfYWNsX3N1bm9zLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaXNrX2FjbF9zdW5vcy5jCmluZGV4IGJjODRmZDYuLmIwZjVkZmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2Rpc2tfYWNsX3N1bm9zLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlza19hY2xfc3Vub3MuYwpAQCAtMTQ1LDEwICsxNDUsOCBAQAogCQkJCQljbnQgPSBmYWNsKGZkLCBjbWQsIGNudCwgYWNscCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAoYWNscCAhPSBOVUxMKSB7Ci0JCQkJZnJlZShhY2xwKTsKLQkJCQlhY2xwID0gTlVMTDsKLQkJCX0KKwkJCWZyZWUoYWNscCk7CisJCQlhY2xwID0gTlVMTDsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW5kaWFuLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbmRpYW4uaAppbmRleCAxYzQ4NTYzLi5lNmQzZjJjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbmRpYW4uaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbmRpYW4uaApAQCAtMjgsMTYgKzI4LDE1IEBACiAgKiBCb3Jyb3dlZCBmcm9tIEZyZWVCU0QncyA8c3lzL2VuZGlhbi5oPgogICovCiAKLSNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECi0jZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KLSNlbmRpZgorI2lmbmRlZiBBUkNISVZFX0VORElBTl9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfRU5ESUFOX0hfSU5DTFVERUQKIAogLyogTm90ZTogIFRoaXMgaXMgYSBwdXJlbHkgaW50ZXJuYWwgaGVhZGVyISAqLwogLyogRG8gbm90IHVzZSB0aGlzIG91dHNpZGUgb2YgbGliYXJjaGl2ZSBpbnRlcm5hbCBjb2RlISAqLwogCi0jaWZuZGVmIEFSQ0hJVkVfRU5ESUFOX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9FTkRJQU5fSF9JTkNMVURFRAotCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKIAogLyoKICAqIERpc2FibGluZyBpbmxpbmUga2V5d29yZCBmb3IgY29tcGlsZXJzIGtub3duIHRvIGNob2tlIG9uIGl0OgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LjMKaW5kZXggZjc1OTE2Yy4uMmY2MmE0YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS4zCkBAIC0zMiw3ICszMiw3IEBACiAuTm0gYXJjaGl2ZV9lbnRyeV9jbGVhciAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9jbG9uZSAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9mcmVlICwKLS5ObSBhcmNoaXZlX2VudHJ5X25ldyAsCisuTm0gYXJjaGl2ZV9lbnRyeV9uZXcKIC5OZCBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGFyY2hpdmUgZW50cnkgZGVzY3JpcHRpb25zCiAuU2ggTElCUkFSWQogU3RyZWFtaW5nIEFyY2hpdmUgTGlicmFyeSAobGliYXJjaGl2ZSwgLWxhcmNoaXZlKQpAQCAtMTI2LDcgKzEyNiw2IEBACiBTaW1pbGFybHksIGlmIHlvdSBzdG9yZSBhIHdpZGUgc3RyaW5nIGFuZCB0aGVuIHN0b3JlIGEKIG5hcnJvdyBzdHJpbmcgZm9yIHRoZSBzYW1lIGRhdGEsIHRoZSBwcmV2aW91c2x5LXNldCB3aWRlIHN0cmluZyB3aWxsCiBiZSBkaXNjYXJkZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBkYXRhLgotLlBwCiAuXCIgLlNoIEVYQU1QTEUKIC5cIiAuU2ggUkVUVVJOIFZBTFVFUwogLlwiIC5TaCBFUlJPUlMKQEAgLTEzNCw4ICsxMzMsOCBAQAogLlhyIGFyY2hpdmVfZW50cnlfYWNsIDMgLAogLlhyIGFyY2hpdmVfZW50cnlfcGF0aHMgMyAsCiAuWHIgYXJjaGl2ZV9lbnRyeV9wZXJtcyAzICwKLS5YciBhcmNoaXZlX2VudHJ5X3RpbWUgMwotLlhyIGxpYmFyY2hpdmUgMyAsCisuWHIgYXJjaGl2ZV9lbnRyeV90aW1lIDMgLAorLlhyIGxpYmFyY2hpdmUgMwogLlNoIEhJU1RPUlkKIFRoZQogLk5tIGxpYmFyY2hpdmUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5jCmluZGV4IGY3MjJiYmUuLmExNWU5OGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuYwpAQCAtMTY4LDYgKzE2OCw3IEBACiAJYXJjaGl2ZV9lbnRyeV94YXR0cl9jbGVhcihlbnRyeSk7CiAJYXJjaGl2ZV9lbnRyeV9zcGFyc2VfY2xlYXIoZW50cnkpOwogCWZyZWUoZW50cnktPnN0YXQpOworCWVudHJ5LT5hZV9zeW1saW5rX3R5cGUgPSBBRV9TWU1MSU5LX1RZUEVfVU5ERUZJTkVEOwogCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOwogCXJldHVybiBlbnRyeTsKIH0KQEAgLTIwMiw2ICsyMDMsOSBAQAogCWVudHJ5Mi0+YWVfc2V0ID0gZW50cnktPmFlX3NldDsKIAlhcmNoaXZlX21zdHJpbmdfY29weSgmZW50cnkyLT5hZV91bmFtZSwgJmVudHJ5LT5hZV91bmFtZSk7CiAKKwkvKiBDb3B5IHN5bWxpbmsgdHlwZSAqLworCWVudHJ5Mi0+YWVfc3ltbGlua190eXBlID0gZW50cnktPmFlX3N5bWxpbmtfdHlwZTsKKwogCS8qIENvcHkgZW5jcnlwdGlvbiBzdGF0dXMgKi8KIAllbnRyeTItPmVuY3J5cHRpb24gPSBlbnRyeS0+ZW5jcnlwdGlvbjsKIAkKQEAgLTI1Myw2ICsyNTcsNyBAQAogCWlmIChlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCWVudHJ5LT5hcmNoaXZlID0gYTsKKwllbnRyeS0+YWVfc3ltbGlua190eXBlID0gQUVfU1lNTElOS19UWVBFX1VOREVGSU5FRDsKIAlyZXR1cm4gKGVudHJ5KTsKIH0KIApAQCAtNjc1LDYgKzY4MCwxMiBAQAogCXJldHVybiAoTlVMTCk7CiB9CiAKK2ludAorYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQoreworCXJldHVybiAoZW50cnktPmFlX3N5bWxpbmtfdHlwZSk7Cit9CisKIGNvbnN0IGNoYXIgKgogYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3V0Zjgoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQogewpAQCAtMTI0Niw2ICsxMjU3LDEyIEBACiB9CiAKIHZvaWQKK2FyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIGludCB0eXBlKQoreworCWVudHJ5LT5hZV9zeW1saW5rX3R5cGUgPSB0eXBlOworfQorCit2b2lkCiBhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3V0Zjgoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5rbmFtZSkKIHsKIAlhcmNoaXZlX21zdHJpbmdfY29weV91dGY4KCZlbnRyeS0+YWVfc3ltbGluaywgbGlua25hbWUpOwpAQCAtMTU2MCwxMCArMTU3Nyw4IEBACiBjb25zdCB3Y2hhcl90ICoKIGFyY2hpdmVfZW50cnlfYWNsX3RleHRfdyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIGludCBmbGFncykKIHsKLQlpZiAoZW50cnktPmFjbC5hY2xfdGV4dF93ICE9IE5VTEwpIHsKLQkJZnJlZShlbnRyeS0+YWNsLmFjbF90ZXh0X3cpOwotCQllbnRyeS0+YWNsLmFjbF90ZXh0X3cgPSBOVUxMOwotCX0KKwlmcmVlKGVudHJ5LT5hY2wuYWNsX3RleHRfdyk7CisJZW50cnktPmFjbC5hY2xfdGV4dF93ID0gTlVMTDsKIAlpZiAoYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dF9jb21wYXQoJmZsYWdzKSA9PSAwKQogCQllbnRyeS0+YWNsLmFjbF90ZXh0X3cgPSBhcmNoaXZlX2FjbF90b190ZXh0X3coJmVudHJ5LT5hY2wsCiAJCSAgICBOVUxMLCBmbGFncywgZW50cnktPmFyY2hpdmUpOwpAQCAtMTU3NCwxMCArMTU4OSw4IEBACiBjb25zdCBjaGFyICoKIGFyY2hpdmVfZW50cnlfYWNsX3RleHQoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKGVudHJ5LT5hY2wuYWNsX3RleHQgIT0gTlVMTCkgewotCQlmcmVlKGVudHJ5LT5hY2wuYWNsX3RleHQpOwotCQllbnRyeS0+YWNsLmFjbF90ZXh0ID0gTlVMTDsKLQl9CisJZnJlZShlbnRyeS0+YWNsLmFjbF90ZXh0KTsKKwllbnRyeS0+YWNsLmFjbF90ZXh0ID0gTlVMTDsKIAlpZiAoYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dF9jb21wYXQoJmZsYWdzKSA9PSAwKQogCQllbnRyeS0+YWNsLmFjbF90ZXh0ID0gYXJjaGl2ZV9hY2xfdG9fdGV4dF9sKCZlbnRyeS0+YWNsLCBOVUxMLAogCQkgICAgZmxhZ3MsIE5VTEwpOwpAQCAtMTU5MCwxMCArMTYwMyw4IEBACiBfYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dF9sKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgaW50IGZsYWdzLAogICAgIGNvbnN0IGNoYXIgKiphY2xfdGV4dCwgc2l6ZV90ICpsZW4sIHN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICpzYykKIHsKLQlpZiAoZW50cnktPmFjbC5hY2xfdGV4dCAhPSBOVUxMKSB7Ci0JCWZyZWUoZW50cnktPmFjbC5hY2xfdGV4dCk7Ci0JCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBOVUxMOwotICAgICAgICB9CisJZnJlZShlbnRyeS0+YWNsLmFjbF90ZXh0KTsKKwllbnRyeS0+YWNsLmFjbF90ZXh0ID0gTlVMTDsKIAogCWlmIChhcmNoaXZlX2VudHJ5X2FjbF90ZXh0X2NvbXBhdCgmZmxhZ3MpID09IDApCiAJCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBhcmNoaXZlX2FjbF90b190ZXh0X2woJmVudHJ5LT5hY2wsCkBAIC0xNjM4LDE5OCArMTY0OSwyMTUgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKKy8qCisgKiBTdXBwb3J0ZWQgZmlsZSBmbGFncyBvbiBGcmVlQlNEIGFuZCBNYWMgT1M6CisgKiBzYXBwbmQsc2FwcGVuZAkJU0ZfQVBQRU5ECisgKiBhcmNoLGFyY2hpdmVkCQlTRl9BUkNISVZFRAorICogc2NoZyxzY2hhbmdlLHNpbW11dGFibGUJU0ZfSU1NVVRBQkxFCisgKiBzdW5sbmssc3VubGluawkJU0ZfTk9VTkxJTksJKEZyZWVCU0Qgb25seSkKKyAqIHVhcHBuZCx1YXBwZW5kCQlVRl9BUFBFTkQKKyAqIGNvbXByZXNzZWQJCQlVRl9DT01QUkVTU0VECShNYWMgT1Mgb25seSkKKyAqIGhpZGRlbix1aGlkZGVuCQlVRl9ISURERU4KKyAqIHVjaGcsdWNoYW5nZSx1aW1tdXRhYmxlCVVGX0lNTVVUQUJMRQorICogbm9kdW1wCQkJVUZfTk9EVU1QCisgKiB1dW5sbmssdXVubGluawkJVUZfTk9VTkxJTksJKEZyZWVCU0Qgb25seSkKKyAqIG9mZmxpbmUsdW9mZmxpbmUJCVVGX09GRkxJTkUJKEZyZWVCU0Qgb25seSkKKyAqIG9wYXF1ZQkJCVVGX09QQVFVRQorICogcmRvbmx5LHVyZG9ubHkscmVhZG9ubHkJVUZfUkVBRE9OTFkJKEZyZWVCU0Qgb25seSkKKyAqIHJlcGFyc2UsdXJlcGFyc2UJCVVGX1JFUEFSU0UJKEZyZWVCU0Qgb25seSkKKyAqIHNwYXJzZSx1c3BhcnNlCQlVRl9TUEFSU0UJKEZyZWVCU0Qgb25seSkKKyAqIHN5c3RlbSx1c3lzdGVtCQlVRl9TWVNURU0JKEZyZWVCU0Qgb25seSkKKyAqCisgKiBTZWUgY2hmbGFncygyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICoKKyAqIFN1cHBvcnRlZCBmaWxlIGF0dHJpYnV0ZXMgb24gTGludXg6CisgKiBhCWFwcGVuZCBvbmx5CQkJRlNfQVBQRU5EX0ZMCQlzYXBwbmQKKyAqIEEJbm8gYXRpbWUgdXBkYXRlcwkJRlNfTk9BVElNRV9GTAkJYXRpbWUKKyAqIGMJY29tcHJlc3MJCQlGU19DT01QUl9GTAkJY29tcHJlc3MKKyAqIEMJbm8gY29weSBvbiB3cml0ZQkJRlNfTk9DT1dfRkwJCWNvdworICogZAlubyBkdW1wCQkJCUZTX05PRFVNUF9GTAkJZHVtcAorICogRAlzeW5jaHJvbm91cyBkaXJlY3RvcnkgdXBkYXRlcwlGU19ESVJTWU5DX0ZMCQlkaXJzeW5jCisgKiBpCWltbXV0YWJsZQkJCUZTX0lNTVVUQUJMRV9GTAkJc2NoZworICogaglkYXRhIGpvdXJuYWxsaW5nCQlGU19KT1VSTkFMX0RBVEFfRkwJam91cm5hbAorICogUAlwcm9qZWN0IGhpZXJhcmNoeQkJRlNfUFJPSklOSEVSSVRfRkwJcHJvamluaGVyaXQKKyAqIHMJc2VjdXJlIGRlbGV0aW9uCQkJRlNfU0VDUk1fRkwJCXNlY3VyZWRlbGV0aW9uCisgKiBTCXN5bmNocm9ub3VzIHVwZGF0ZXMJCUZTX1NZTkNfRkwJCXN5bmMKKyAqIHQJbm8gdGFpbC1tZXJnaW5nCQkJRlNfTk9UQUlMX0ZMCQl0YWlsCisgKiBUCXRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2h5CUZTX1RPUERJUl9GTAkJdG9wZGlyCisgKiB1CXVuZGVsZXRhYmxlCQkJRlNfVU5STV9GTAkJdW5kZWwKKyAqCisgKiBTZWUgaW9jdGxfaWZsYWdzKDIpIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKgorICogRXF1aXZhbGVudCBmaWxlIGZsYWdzIHN1cHBvcnRlZCBvbiBGcmVlQlNEIC8gTWFjIE9TIGFuZCBMaW51eDoKKyAqIFNGX0FQUEVORAkJRlNfQVBQRU5EX0ZMCQlzYXBwbmQKKyAqIFNGX0lNTVVUQUJMRQkJRlNfSU1NVVRBQkxFX0ZMCQlzY2hnCisgKiBVRl9OT0RVTVAJCUZTX05PRFVNUF9GTAkJbm9kdW1wCisgKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFnIHsKIAljb25zdCBjaGFyCSpuYW1lOwogCWNvbnN0IHdjaGFyX3QJKnduYW1lOwogCXVuc2lnbmVkIGxvbmcJIHNldDsKIAl1bnNpZ25lZCBsb25nCSBjbGVhcjsKLX0gZmxhZ3NbXSA9IHsKK30gZmlsZWZsYWdzW10gPSB7CiAJLyogUHJlZmVycmVkIChzaG9ydGVyKSBuYW1lcyBwZXIgZmxhZyBmaXJzdCwgYWxsIHByZWZpeGVkIGJ5ICJubyIgKi8KICNpZmRlZiBTRl9BUFBFTkQKLQl7ICJub3NhcHBuZCIsCUwibm9zYXBwbmQiLAkJU0ZfQVBQRU5ELAkwIH0sCi0JeyAibm9zYXBwZW5kIiwJTCJub3NhcHBlbmQiLAkJU0ZfQVBQRU5ELAkwIH0sCisJeyAibm9zYXBwbmQiLAlMIm5vc2FwcG5kIiwJCVNGX0FQUEVORCwJMH0sCisJeyAibm9zYXBwZW5kIiwJTCJub3NhcHBlbmQiLAkJU0ZfQVBQRU5ELAkwfSwKICNlbmRpZgogI2lmIGRlZmluZWQoRlNfQVBQRU5EX0ZMKQkJCS8qICdhJyAqLwotCXsgIm5vc2FwcG5kIiwJTCJub3NhcHBuZCIsCQlGU19BUFBFTkRfRkwsCTAgfSwKLQl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlGU19BUFBFTkRfRkwsCTAgfSwKKwl7ICJub3NhcHBuZCIsCUwibm9zYXBwbmQiLAkJRlNfQVBQRU5EX0ZMLAkwfSwKKwl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlGU19BUFBFTkRfRkwsCTB9LAogI2VsaWYgZGVmaW5lZChFWFQyX0FQUEVORF9GTCkJCQkvKiAnYScgKi8KLQl7ICJub3NhcHBuZCIsCUwibm9zYXBwbmQiLAkJRVhUMl9BUFBFTkRfRkwsCTAgfSwKLQl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlFWFQyX0FQUEVORF9GTCwJMCB9LAorCXsgIm5vc2FwcG5kIiwJTCJub3NhcHBuZCIsCQlFWFQyX0FQUEVORF9GTCwJMH0sCisJeyAibm9zYXBwZW5kIiwJTCJub3NhcHBlbmQiLAkJRVhUMl9BUFBFTkRfRkwsCTB9LAogI2VuZGlmCiAjaWZkZWYgU0ZfQVJDSElWRUQKLQl7ICJub2FyY2giLAlMIm5vYXJjaCIsCQlTRl9BUkNISVZFRCwJMCB9LAotCXsgIm5vYXJjaGl2ZWQiLAlMIm5vYXJjaGl2ZWQiLCAgICAgICAJU0ZfQVJDSElWRUQsCTAgfSwKKwl7ICJub2FyY2giLAlMIm5vYXJjaCIsCQlTRl9BUkNISVZFRCwJMH0sCisJeyAibm9hcmNoaXZlZCIsCUwibm9hcmNoaXZlZCIsICAgICAgIAlTRl9BUkNISVZFRCwJMH0sCiAjZW5kaWYKICNpZmRlZiBTRl9JTU1VVEFCTEUKLQl7ICJub3NjaGciLAlMIm5vc2NoZyIsCQlTRl9JTU1VVEFCTEUsCTAgfSwKLQl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlTRl9JTU1VVEFCTEUsCTAgfSwKLQl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCVNGX0lNTVVUQUJMRSwJMCB9LAorCXsgIm5vc2NoZyIsCUwibm9zY2hnIiwJCVNGX0lNTVVUQUJMRSwJMH0sCisJeyAibm9zY2hhbmdlIiwJTCJub3NjaGFuZ2UiLAkJU0ZfSU1NVVRBQkxFLAkwfSwKKwl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCVNGX0lNTVVUQUJMRSwJMH0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKEZTX0lNTVVUQUJMRV9GTCkJCQkvKiAnaScgKi8KLQl7ICJub3NjaGciLAlMIm5vc2NoZyIsCQlGU19JTU1VVEFCTEVfRkwsCTAgfSwKLQl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlGU19JTU1VVEFCTEVfRkwsCTAgfSwKLQl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCUZTX0lNTVVUQUJMRV9GTCwJMCB9LAorCXsgIm5vc2NoZyIsCUwibm9zY2hnIiwJCUZTX0lNTVVUQUJMRV9GTCwJMH0sCisJeyAibm9zY2hhbmdlIiwJTCJub3NjaGFuZ2UiLAkJRlNfSU1NVVRBQkxFX0ZMLAkwfSwKKwl7ICJub3NpbW11dGFibGUiLAlMIm5vc2ltbXV0YWJsZSIsCUZTX0lNTVVUQUJMRV9GTCwJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfSU1NVVRBQkxFX0ZMKQkJLyogJ2knICovCi0JeyAibm9zY2hnIiwJTCJub3NjaGciLAkJRVhUMl9JTU1VVEFCTEVfRkwsCTAgfSwKLQl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlFWFQyX0lNTVVUQUJMRV9GTCwJMCB9LAotCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJRVhUMl9JTU1VVEFCTEVfRkwsCTAgfSwKKwl7ICJub3NjaGciLAlMIm5vc2NoZyIsCQlFWFQyX0lNTVVUQUJMRV9GTCwJMH0sCisJeyAibm9zY2hhbmdlIiwJTCJub3NjaGFuZ2UiLAkJRVhUMl9JTU1VVEFCTEVfRkwsCTB9LAorCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJRVhUMl9JTU1VVEFCTEVfRkwsCTB9LAogI2VuZGlmCiAjaWZkZWYgU0ZfTk9VTkxJTksKLQl7ICJub3N1bmxuayIsCUwibm9zdW5sbmsiLAkJU0ZfTk9VTkxJTkssCTAgfSwKLQl7ICJub3N1bmxpbmsiLAlMIm5vc3VubGluayIsCQlTRl9OT1VOTElOSywJMCB9LAotI2VuZGlmCi0jaWZkZWYgU0ZfU05BUFNIT1QKLQl7ICJub3NuYXBzaG90IiwJTCJub3NuYXBzaG90IiwJU0ZfU05BUFNIT1QsCTAgfSwKKwl7ICJub3N1bmxuayIsCUwibm9zdW5sbmsiLAkJU0ZfTk9VTkxJTkssCTB9LAorCXsgIm5vc3VubGluayIsCUwibm9zdW5saW5rIiwJCVNGX05PVU5MSU5LLAkwfSwKICNlbmRpZgogI2lmZGVmIFVGX0FQUEVORAotCXsgIm5vdWFwcG5kIiwJTCJub3VhcHBuZCIsCQlVRl9BUFBFTkQsCTAgfSwKLQl7ICJub3VhcHBlbmQiLAlMIm5vdWFwcGVuZCIsCQlVRl9BUFBFTkQsCTAgfSwKKwl7ICJub3VhcHBuZCIsCUwibm91YXBwbmQiLAkJVUZfQVBQRU5ELAkwfSwKKwl7ICJub3VhcHBlbmQiLAlMIm5vdWFwcGVuZCIsCQlVRl9BUFBFTkQsCTB9LAogI2VuZGlmCiAjaWZkZWYgVUZfSU1NVVRBQkxFCi0JeyAibm91Y2hnIiwJTCJub3VjaGciLAkJVUZfSU1NVVRBQkxFLAkwIH0sCi0JeyAibm91Y2hhbmdlIiwJTCJub3VjaGFuZ2UiLAkJVUZfSU1NVVRBQkxFLAkwIH0sCi0JeyAibm91aW1tdXRhYmxlIiwJTCJub3VpbW11dGFibGUiLAlVRl9JTU1VVEFCTEUsCTAgfSwKKwl7ICJub3VjaGciLAlMIm5vdWNoZyIsCQlVRl9JTU1VVEFCTEUsCTB9LAorCXsgIm5vdWNoYW5nZSIsCUwibm91Y2hhbmdlIiwJCVVGX0lNTVVUQUJMRSwJMH0sCisJeyAibm91aW1tdXRhYmxlIiwJTCJub3VpbW11dGFibGUiLAlVRl9JTU1VVEFCTEUsCTB9LAogI2VuZGlmCiAjaWZkZWYgVUZfTk9EVU1QCiAJeyAibm9kdW1wIiwJTCJub2R1bXAiLAkJMCwJCVVGX05PRFVNUH0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKEZTX05PRFVNUF9GTCkJLyogJ2QnICovCiAJeyAibm9kdW1wIiwJTCJub2R1bXAiLAkJMCwJCUZTX05PRFVNUF9GTH0sCi0jZWxpZiBkZWZpbmVkKEVYVDJfTk9EVU1QX0ZMKSAJLyogJ2QnICovCisjZWxpZiBkZWZpbmVkKEVYVDJfTk9EVU1QX0ZMKQogCXsgIm5vZHVtcCIsCUwibm9kdW1wIiwJCTAsCQlFWFQyX05PRFVNUF9GTH0sCiAjZW5kaWYKICNpZmRlZiBVRl9PUEFRVUUKLQl7ICJub29wYXF1ZSIsCUwibm9vcGFxdWUiLAkJVUZfT1BBUVVFLAkwIH0sCisJeyAibm9vcGFxdWUiLAlMIm5vb3BhcXVlIiwJCVVGX09QQVFVRSwJMH0sCiAjZW5kaWYKICNpZmRlZiBVRl9OT1VOTElOSwotCXsgIm5vdXVubG5rIiwJTCJub3V1bmxuayIsCQlVRl9OT1VOTElOSywJMCB9LAotCXsgIm5vdXVubGluayIsCUwibm91dW5saW5rIiwJCVVGX05PVU5MSU5LLAkwIH0sCisJeyAibm91dW5sbmsiLAlMIm5vdXVubG5rIiwJCVVGX05PVU5MSU5LLAkwfSwKKwl7ICJub3V1bmxpbmsiLAlMIm5vdXVubGluayIsCQlVRl9OT1VOTElOSywJMH0sCiAjZW5kaWYKICNpZmRlZiBVRl9DT01QUkVTU0VECi0JeyAibm9jb21wcmVzc2VkIixMIm5vY29tcHJlc3NlZCIsCVVGX0NPTVBSRVNTRUQsCTAgfSwKKwkvKiBNYWMgT1MgKi8KKwl7ICJub2NvbXByZXNzZWQiLAlMIm5vY29tcHJlc3NlZCIsCVVGX0NPTVBSRVNTRUQsCTB9LAogI2VuZGlmCiAjaWZkZWYgVUZfSElEREVOCi0JeyAibm9oaWRkZW4iLAlMIm5vaGlkZGVuIiwJCVVGX0hJRERFTiwJMCB9LAorCXsgIm5vaGlkZGVuIiwJTCJub2hpZGRlbiIsCQlVRl9ISURERU4sCTB9LAorCXsgIm5vdWhpZGRlbiIsCUwibm91aGlkZGVuIiwJCVVGX0hJRERFTiwJMH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX1VOUk1fRkwpCi0gICAgICAgIHsgIm5vdXVubGluayIsCUwibm91dW5saW5rIiwJCUZTX1VOUk1fRkwsCTB9LAorI2lmZGVmIEZJTEVfQVRUUklCVVRFX0hJRERFTgorCXsgIm5vaGlkZGVuIiwJTCJub2hpZGRlbiIsCUZJTEVfQVRUUklCVVRFX0hJRERFTiwJMH0sCisJeyAibm91aGlkZGVuIiwJTCJub3VoaWRkZW4iLAlGSUxFX0FUVFJJQlVURV9ISURERU4sCTB9LAorI2VuZGlmCisjaWZkZWYgVUZfT0ZGTElORQorCXsgIm5vb2ZmbGluZSIsCUwibm9vZmZsaW5lIiwJCVVGX09GRkxJTkUsCTB9LAorCXsgIm5vdW9mZmxpbmUiLAlMIm5vdW9mZmxpbmUiLAkJVUZfT0ZGTElORSwJMH0sCisjZW5kaWYKKyNpZmRlZiBVRl9SRUFET05MWQorCXsgIm5vcmRvbmx5IiwJTCJub3Jkb25seSIsCQlVRl9SRUFET05MWSwJMH0sCisJeyAibm91cmRvbmx5IiwJTCJub3VyZG9ubHkiLAkJVUZfUkVBRE9OTFksCTB9LAorCXsgIm5vcmVhZG9ubHkiLAlMIm5vcmVhZG9ubHkiLAkJVUZfUkVBRE9OTFksCTB9LAorI2VuZGlmCisjaWZkZWYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkKKwl7ICJub3Jkb25seSIsCUwibm9yZG9ubHkiLAlGSUxFX0FUVFJJQlVURV9SRUFET05MWSwJMH0sCisJeyAibm91cmRvbmx5IiwJTCJub3VyZG9ubHkiLAlGSUxFX0FUVFJJQlVURV9SRUFET05MWSwJMH0sCisJeyAibm9yZWFkb25seSIsCUwibm9yZWFkb25seSIsCUZJTEVfQVRUUklCVVRFX1JFQURPTkxZLAkwfSwKKyNlbmRpZgorI2lmZGVmIFVGX1NQQVJTRQorCXsgIm5vc3BhcnNlIiwJTCJub3NwYXJzZSIsCQlVRl9TUEFSU0UsCTB9LAorCXsgIm5vdXNwYXJzZSIsCUwibm91c3BhcnNlIiwJCVVGX1NQQVJTRSwJMH0sCisjZW5kaWYKKyNpZmRlZiBVRl9SRVBBUlNFCisJeyAibm9yZXBhcnNlIiwJTCJub3JlcGFyc2UiLAkJVUZfUkVQQVJTRSwJMH0sCisJeyAibm91cmVwYXJzZSIsCUwibm91cmVwYXJzZSIsCQlVRl9SRVBBUlNFLAkwfSwKKyNlbmRpZgorI2lmZGVmIFVGX1NZU1RFTQorCXsgIm5vc3lzdGVtIiwJTCJub3N5c3RlbSIsCQlVRl9TWVNURU0sCTB9LAorCXsgIm5vdXN5c3RlbSIsCUwibm91c3lzdGVtIiwJCVVGX1NZU1RFTSwJMH0sCisjZW5kaWYKKyNpZmRlZiBGSUxFX0FUVFJJQlVURV9TWVNURU0KKwl7ICJub3N5c3RlbSIsCUwibm9zeXN0ZW0iLAlGSUxFX0FUVFJJQlVURV9TWVNURU0sCTB9LAorCXsgIm5vdXN5c3RlbSIsCUwibm91c3lzdGVtIiwJRklMRV9BVFRSSUJVVEVfU1lTVEVNLAkwfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoRlNfVU5STV9GTCkJCS8qICd1JyAqLworCXsgIm5vdW5kZWwiLAlMIm5vdW5kZWwiLAkJRlNfVU5STV9GTCwJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfVU5STV9GTCkKLSAgICAgICAgeyAibm91dW5saW5rIiwJTCJub3V1bmxpbmsiLAkJRVhUMl9VTlJNX0ZMLAkwfSwKKwl7ICJub3VuZGVsIiwJTCJub3VuZGVsIiwJCUVYVDJfVU5STV9GTCwJMH0sCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoRlNfQlRSRUVfRkwpCi0gICAgICAgIHsgIm5vYnRyZWUiLAlMIm5vYnRyZWUiLCAgICAgICAJRlNfQlRSRUVfRkwsCTAgfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9CVFJFRV9GTCkKLSAgICAgICAgeyAibm9idHJlZSIsCUwibm9idHJlZSIsICAgICAgIAlFWFQyX0JUUkVFX0ZMLAkwIH0sCisjaWYgZGVmaW5lZChGU19DT01QUl9GTCkJLyogJ2MnICovCisJeyAibm9jb21wcmVzcyIsCUwibm9jb21wcmVzcyIsICAgICAgIAlGU19DT01QUl9GTCwJMH0sCisjZWxpZiBkZWZpbmVkKEVYVDJfQ09NUFJfRkwpCisJeyAibm9jb21wcmVzcyIsCUwibm9jb21wcmVzcyIsICAgICAgIAlFWFQyX0NPTVBSX0ZMLAkwfSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChGU19FQ09NUFJfRkwpCi0gICAgICAgIHsgIm5vY29tcGVyciIsCUwibm9jb21wZXJyIiwgICAgICAgCUZTX0VDT01QUl9GTCwJMCB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0VDT01QUl9GTCkKLSAgICAgICAgeyAibm9jb21wZXJyIiwJTCJub2NvbXBlcnIiLCAgICAgICAJRVhUMl9FQ09NUFJfRkwsCTAgfSwKKyNpZiBkZWZpbmVkKEZTX05PQVRJTUVfRkwpCS8qICdBJyAqLworCXsgIm5vYXRpbWUiLAlMIm5vYXRpbWUiLAkJMCwJCUZTX05PQVRJTUVfRkx9LAorI2VsaWYgZGVmaW5lZChFWFQyX05PQVRJTUVfRkwpCisJeyAibm9hdGltZSIsCUwibm9hdGltZSIsCQkwLAkJRVhUMl9OT0FUSU1FX0ZMfSwKICNlbmRpZgotCi0jaWYgZGVmaW5lZChGU19DT01QUl9GTCkJCQkvKiAnYycgKi8KLSAgICAgICAgeyAibm9jb21wcmVzcyIsCUwibm9jb21wcmVzcyIsICAgICAgIAlGU19DT01QUl9GTCwJMCB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0NPTVBSX0ZMKQkJCS8qICdjJyAqLwotICAgICAgICB7ICJub2NvbXByZXNzIiwJTCJub2NvbXByZXNzIiwgICAgICAgCUVYVDJfQ09NUFJfRkwsCTAgfSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChGU19OT0FUSU1FX0ZMKQkJCS8qICdBJyAqLwotICAgICAgICB7ICJub2F0aW1lIiwJTCJub2F0aW1lIiwJCTAsCQlGU19OT0FUSU1FX0ZMfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9OT0FUSU1FX0ZMKQkJCS8qICdBJyAqLwotICAgICAgICB7ICJub2F0aW1lIiwJTCJub2F0aW1lIiwJCTAsCQlFWFQyX05PQVRJTUVfRkx9LAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEZTX0RJUlRZX0ZMKQotICAgICAgICB7ICJub2NvbXBkaXJ0eSIsTCJub2NvbXBkaXJ0eSIsCQlGU19ESVJUWV9GTCwJCTB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0RJUlRZX0ZMKQotICAgICAgICB7ICJub2NvbXBkaXJ0eSIsTCJub2NvbXBkaXJ0eSIsCQlFWFQyX0RJUlRZX0ZMLAkJMH0sCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoRlNfQ09NUFJCTEtfRkwpCi0jaWYgZGVmaW5lZChGU19OT0NPTVBSX0ZMKQotICAgICAgICB7ICJub2NvbXByYmxrIiwJTCJub2NvbXByYmxrIiwJCUZTX0NPTVBSQkxLX0ZMLCBGU19OT0NPTVBSX0ZMfSwKLSNlbHNlCi0gICAgICAgIHsgIm5vY29tcHJibGsiLAlMIm5vY29tcHJibGsiLAkJRlNfQ09NUFJCTEtfRkwsCTB9LAotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKEVYVDJfQ09NUFJCTEtfRkwpCi0jaWYgZGVmaW5lZChFWFQyX05PQ09NUFJfRkwpCi0gICAgICAgIHsgIm5vY29tcHJibGsiLAlMIm5vY29tcHJibGsiLAkJRVhUMl9DT01QUkJMS19GTCwgRVhUMl9OT0NPTVBSX0ZMfSwKLSNlbHNlCi0gICAgICAgIHsgIm5vY29tcHJibGsiLAlMIm5vY29tcHJibGsiLAkJRVhUMl9DT01QUkJMS19GTCwJMH0sCi0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoRlNfRElSU1lOQ19GTCkKLSAgICAgICAgeyAibm9kaXJzeW5jIiwJTCJub2RpcnN5bmMiLAkJRlNfRElSU1lOQ19GTCwJMH0sCisjaWYgZGVmaW5lZChGU19ESVJTWU5DX0ZMKQkvKiAnRCcgKi8KKwl7ICJub2RpcnN5bmMiLAlMIm5vZGlyc3luYyIsCQlGU19ESVJTWU5DX0ZMLAkJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfRElSU1lOQ19GTCkKLSAgICAgICAgeyAibm9kaXJzeW5jIiwJTCJub2RpcnN5bmMiLAkJRVhUMl9ESVJTWU5DX0ZMLAkwfSwKKwl7ICJub2RpcnN5bmMiLAlMIm5vZGlyc3luYyIsCQlFWFQyX0RJUlNZTkNfRkwsCTB9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChGU19JTkRFWF9GTCkKLSAgICAgICAgeyAibm9oYXNoaWR4IiwJTCJub2hhc2hpZHgiLAkJRlNfSU5ERVhfRkwsCQkwfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9JTkRFWF9GTCkKLSAgICAgICAgeyAibm9oYXNoaWR4IiwJTCJub2hhc2hpZHgiLAkJRVhUMl9JTkRFWF9GTCwJCTB9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19JTUFHSUNfRkwpCi0gICAgICAgIHsgIm5vaW1hZ2ljIiwJTCJub2ltYWdpYyIsCQlGU19JTUFHSUNfRkwsCQkwfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9JTUFHSUNfRkwpCi0gICAgICAgIHsgIm5vaW1hZ2ljIiwJTCJub2ltYWdpYyIsCQlFWFQyX0lNQUdJQ19GTCwJCTB9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19KT1VSTkFMX0RBVEFfRkwpCi0gICAgICAgIHsgIm5vam91cm5hbCIsCUwibm9qb3VybmFsIiwJCUZTX0pPVVJOQUxfREFUQV9GTCwJMH0sCisjaWYgZGVmaW5lZChGU19KT1VSTkFMX0RBVEFfRkwpCS8qICdqJyAqLworCXsgIm5vam91cm5hbC1kYXRhIixMIm5vam91cm5hbC1kYXRhIiwJRlNfSk9VUk5BTF9EQVRBX0ZMLAkwfSwKKwl7ICJub2pvdXJuYWwiLAlMIm5vam91cm5hbCIsCQlGU19KT1VSTkFMX0RBVEFfRkwsCTB9LAogI2VsaWYgZGVmaW5lZChFWFQzX0pPVVJOQUxfREFUQV9GTCkKLSAgICAgICAgeyAibm9qb3VybmFsIiwJTCJub2pvdXJuYWwiLAkJRVhUM19KT1VSTkFMX0RBVEFfRkwsCTB9LAorCXsgIm5vam91cm5hbC1kYXRhIixMIm5vam91cm5hbC1kYXRhIiwJRVhUM19KT1VSTkFMX0RBVEFfRkwsCTB9LAorCXsgIm5vam91cm5hbCIsCUwibm9qb3VybmFsIiwJCUVYVDNfSk9VUk5BTF9EQVRBX0ZMLAkwfSwKICNlbmRpZgotI2lmIGRlZmluZWQoRlNfU0VDUk1fRkwpCi0gICAgICAgIHsgIm5vc2VjdXJlZGVsZXRpb24iLEwibm9zZWN1cmVkZWxldGlvbiIsRlNfU0VDUk1fRkwsCQkwfSwKKyNpZiBkZWZpbmVkKEZTX1NFQ1JNX0ZMKQkvKiAncycgKi8KKwl7ICJub3NlY2RlbCIsCUwibm9zZWNkZWwiLAkJRlNfU0VDUk1fRkwsCQkwfSwKKwl7ICJub3NlY3VyZWRlbGV0aW9uIixMIm5vc2VjdXJlZGVsZXRpb24iLEZTX1NFQ1JNX0ZMLAkJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfU0VDUk1fRkwpCi0gICAgICAgIHsgIm5vc2VjdXJlZGVsZXRpb24iLEwibm9zZWN1cmVkZWxldGlvbiIsRVhUMl9TRUNSTV9GTCwJCTB9LAorCXsgIm5vc2VjZGVsIiwJTCJub3NlY2RlbCIsCQlFWFQyX1NFQ1JNX0ZMLAkJMH0sCisJeyAibm9zZWN1cmVkZWxldGlvbiIsTCJub3NlY3VyZWRlbGV0aW9uIixFWFQyX1NFQ1JNX0ZMLAkJMH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX1NZTkNfRkwpCi0gICAgICAgIHsgIm5vc3luYyIsCUwibm9zeW5jIiwJCUZTX1NZTkNfRkwsCQkwfSwKKyNpZiBkZWZpbmVkKEZTX1NZTkNfRkwpCQkvKiAnUycgKi8KKwl7ICJub3N5bmMiLAlMIm5vc3luYyIsCQlGU19TWU5DX0ZMLAkJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfU1lOQ19GTCkKLSAgICAgICAgeyAibm9zeW5jIiwJTCJub3N5bmMiLAkJRVhUMl9TWU5DX0ZMLAkJMH0sCisJeyAibm9zeW5jIiwJTCJub3N5bmMiLAkJRVhUMl9TWU5DX0ZMLAkJMH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX05PVEFJTF9GTCkKLSAgICAgICAgeyAibm90YWlsIiwJTCJub3RhaWwiLAkJMCwJCUZTX05PVEFJTF9GTH0sCisjaWYgZGVmaW5lZChGU19OT1RBSUxfRkwpCS8qICd0JyAqLworCXsgIm5vdGFpbCIsCUwibm90YWlsIiwJCTAsCQlGU19OT1RBSUxfRkx9LAogI2VsaWYgZGVmaW5lZChFWFQyX05PVEFJTF9GTCkKLSAgICAgICAgeyAibm90YWlsIiwJTCJub3RhaWwiLAkJMCwJCUVYVDJfTk9UQUlMX0ZMfSwKKwl7ICJub3RhaWwiLAlMIm5vdGFpbCIsCQkwLAkJRVhUMl9OT1RBSUxfRkx9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChGU19UT1BESVJfRkwpCi0gICAgICAgIHsgIm5vdG9wZGlyIiwJTCJub3RvcGRpciIsCQlGU19UT1BESVJfRkwsCQkwfSwKKyNpZiBkZWZpbmVkKEZTX1RPUERJUl9GTCkJLyogJ1QnICovCisJeyAibm90b3BkaXIiLAlMIm5vdG9wZGlyIiwJCUZTX1RPUERJUl9GTCwJCTB9LAogI2VsaWYgZGVmaW5lZChFWFQyX1RPUERJUl9GTCkKLSAgICAgICAgeyAibm90b3BkaXIiLAlMIm5vdG9wZGlyIiwJCUVYVDJfVE9QRElSX0ZMLAkJMH0sCisJeyAibm90b3BkaXIiLAlMIm5vdG9wZGlyIiwJCUVYVDJfVE9QRElSX0ZMLAkJMH0sCiAjZW5kaWYKLSNpZmRlZiBGU19FTkNSWVBUX0ZMCi0gICAgICAgIHsgIm5vZW5jcnlwdCIsCUwibm9lbmNyeXB0IiwJCUZTX0VOQ1JZUFRfRkwsCTB9LAorI2lmZGVmIEZTX05PQ09XX0ZMCS8qICdDJyAqLworCXsgIm5vY293IiwJTCJub2NvdyIsCQkwLAlGU19OT0NPV19GTH0sCiAjZW5kaWYKLSNpZmRlZiBGU19IVUdFX0ZJTEVfRkwKLSAgICAgICAgeyAibm9odWdlZmlsZSIsCUwibm9odWdlZmlsZSIsCQlGU19IVUdFX0ZJTEVfRkwsCTB9LAorI2lmZGVmIEZTX1BST0pJTkhFUklUX0ZMCS8qICdQJyAqLworCXsgIm5vcHJvamluaGVyaXQiLEwibm9wcm9qaW5oZXJpdCIsCUZTX1BST0pJTkhFUklUX0ZMLAkwfSwKICNlbmRpZgotI2lmZGVmIEZTX0VYVEVOVF9GTAotICAgICAgICB7ICJub2V4dGVudCIsCUwibm9leHRlbnQiLAkJRlNfRVhURU5UX0ZMLAkwfSwKLSNlbmRpZgotI2lmZGVmIEZTX0VBX0lOT0RFX0ZMCi0gICAgICAgIHsgIm5vZWFpbm9kZSIsCUwibm9lYWlub2RlIiwJCUZTX0VBX0lOT0RFX0ZMLAkwfSwKLSNlbmRpZgotI2lmZGVmIEZTX0VPRkJMT0NLU19GTAotICAgICAgICB7ICJub2VvZmJsb2NrcyIsTCJub2VvZmJsb2NrcyIsCQlGU19FT0ZCTE9DS1NfRkwsCTB9LAotI2VuZGlmCi0jaWZkZWYgRlNfTk9DT1dfRkwKLSAgICAgICAgeyAibm9jb3ciLAlMIm5vY293IiwJCUZTX05PQ09XX0ZMLAkwfSwKLSNlbmRpZgotI2lmZGVmIEZTX0lOTElORV9EQVRBX0ZMCi0gICAgICAgIHsgIm5vaW5saW5lZGF0YSIsTCJub2lubGluZWRhdGEiLAlGU19JTkxJTkVfREFUQV9GTCwJMH0sCi0jZW5kaWYKLSNpZmRlZiBGU19QUk9KSU5IRVJJVF9GTAotICAgICAgICB7ICJub3Byb2ppbmhlcml0IixMIm5vcHJvamluaGVyaXQiLAlGU19QUk9KSU5IRVJJVF9GTCwJMH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEZTX1JFU0VSVkVEX0ZMKQotICAgICAgICB7ICJub3Jlc2VydmVkIiwJTCJub3Jlc2VydmVkIiwJCUZTX1JFU0VSVkVEX0ZMLAkwfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9SRVNFUlZFRF9GTCkKLSAgICAgICAgeyAibm9yZXNlcnZlZCIsCUwibm9yZXNlcnZlZCIsCQlFWFQyX1JFU0VSVkVEX0ZMLAkwfSwKLSNlbmRpZgotCXsgTlVMTCwJCU5VTEwsCQkJMCwJCTAgfQorCXsgTlVMTCwJCU5VTEwsCQkJMCwJCTB9CiB9OwogCiAvKgpAQCAtMTg0OCw3ICsxODc2LDcgQEAKIAogCWJpdHMgPSBiaXRzZXQgfCBiaXRjbGVhcjsKIAlsZW5ndGggPSAwOwotCWZvciAoZmxhZyA9IGZsYWdzOyBmbGFnLT5uYW1lICE9IE5VTEw7IGZsYWcrKykKKwlmb3IgKGZsYWcgPSBmaWxlZmxhZ3M7IGZsYWctPm5hbWUgIT0gTlVMTDsgZmxhZysrKQogCQlpZiAoYml0cyAmIChmbGFnLT5zZXQgfCBmbGFnLT5jbGVhcikpIHsKIAkJCWxlbmd0aCArPSBzdHJsZW4oZmxhZy0+bmFtZSkgKyAxOwogCQkJYml0cyAmPSB+KGZsYWctPnNldCB8IGZsYWctPmNsZWFyKTsKQEAgLTE4NjEsNyArMTg4OSw3IEBACiAJCXJldHVybiAoTlVMTCk7CiAKIAlkcCA9IHN0cmluZzsKLQlmb3IgKGZsYWcgPSBmbGFnczsgZmxhZy0+bmFtZSAhPSBOVUxMOyBmbGFnKyspIHsKKwlmb3IgKGZsYWcgPSBmaWxlZmxhZ3M7IGZsYWctPm5hbWUgIT0gTlVMTDsgZmxhZysrKSB7CiAJCWlmIChiaXRzZXQgJiBmbGFnLT5zZXQgfHwgYml0Y2xlYXIgJiBmbGFnLT5jbGVhcikgewogCQkJc3AgPSBmbGFnLT5uYW1lICsgMjsKIAkJfSBlbHNlIGlmIChiaXRzZXQgJiBmbGFnLT5jbGVhciAgfHwgIGJpdGNsZWFyICYgZmxhZy0+c2V0KSB7CkBAIC0xOTEzLDcgKzE5NDEsNyBAQAogCQkgICAgKmVuZCAhPSAnICcgICYmICAqZW5kICE9ICcsJykKIAkJCWVuZCsrOwogCQlsZW5ndGggPSBlbmQgLSBzdGFydDsKLQkJZm9yIChmbGFnID0gZmxhZ3M7IGZsYWctPm5hbWUgIT0gTlVMTDsgZmxhZysrKSB7CisJCWZvciAoZmxhZyA9IGZpbGVmbGFnczsgZmxhZy0+bmFtZSAhPSBOVUxMOyBmbGFnKyspIHsKIAkJCXNpemVfdCBmbGFnX2xlbmd0aCA9IHN0cmxlbihmbGFnLT5uYW1lKTsKIAkJCWlmIChsZW5ndGggPT0gZmxhZ19sZW5ndGgKIAkJCSAgICAmJiBtZW1jbXAoc3RhcnQsIGZsYWctPm5hbWUsIGxlbmd0aCkgPT0gMCkgewpAQCAtMTk4MSw3ICsyMDA5LDcgQEAKIAkJICAgICplbmQgIT0gTCcgJyAgJiYgICplbmQgIT0gTCcsJykKIAkJCWVuZCsrOwogCQlsZW5ndGggPSBlbmQgLSBzdGFydDsKLQkJZm9yIChmbGFnID0gZmxhZ3M7IGZsYWctPnduYW1lICE9IE5VTEw7IGZsYWcrKykgeworCQlmb3IgKGZsYWcgPSBmaWxlZmxhZ3M7IGZsYWctPnduYW1lICE9IE5VTEw7IGZsYWcrKykgewogCQkJc2l6ZV90IGZsYWdfbGVuZ3RoID0gd2NzbGVuKGZsYWctPnduYW1lKTsKIAkJCWlmIChsZW5ndGggPT0gZmxhZ19sZW5ndGgKIAkJCSAgICAmJiB3bWVtY21wKHN0YXJ0LCBmbGFnLT53bmFtZSwgbGVuZ3RoKSA9PSAwKSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuaAppbmRleCBhOTEzNGY2Li4wMDUzZmFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmgKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUJQVJDSElWRV9FTlRSWV9IX0lOQ0xVREVECiAKIC8qIE5vdGU6IENvbXBpbGVyIHdpbGwgY29tcGxhaW4gaWYgdGhpcyBkb2VzIG5vdCBtYXRjaCBhcmNoaXZlLmghICovCi0jZGVmaW5lCUFSQ0hJVkVfVkVSU0lPTl9OVU1CRVIgMzAwMzAwMworI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fTlVNQkVSIDMwMDQwMDIKIAogLyoKICAqIE5vdGU6IGFyY2hpdmVfZW50cnkuaCBpcyBmb3IgdXNlIG91dHNpZGUgb2YgbGliYXJjaGl2ZTsgdGhlCkBAIC0xODgsNiArMTg4LDEzIEBACiAjZGVmaW5lIEFFX0lGSUZPCSgoX19MQV9NT0RFX1QpMDAxMDAwMCkKIAogLyoKKyAqIFN5bWxpbmsgdHlwZXMKKyAqLworI2RlZmluZSBBRV9TWU1MSU5LX1RZUEVfVU5ERUZJTkVECTAKKyNkZWZpbmUgQUVfU1lNTElOS19UWVBFX0ZJTEUJCTEKKyNkZWZpbmUgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWQkyCisKKy8qCiAgKiBCYXNpYyBvYmplY3QgbWFuaXB1bGF0aW9uCiAgKi8KIApAQCAtMjcyLDYgKzI3OSw3IEBACiBfX0xBX0RFQ0wgY29uc3QgY2hhcgkqYXJjaGl2ZV9lbnRyeV9zdHJtb2RlKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwogX19MQV9ERUNMIGNvbnN0IGNoYXIJKmFyY2hpdmVfZW50cnlfc3ltbGluayhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBjb25zdCBjaGFyCSphcmNoaXZlX2VudHJ5X3N5bWxpbmtfdXRmOChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKK19fTEFfREVDTCBpbnQJCSBhcmNoaXZlX2VudHJ5X3N5bWxpbmtfdHlwZShzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBjb25zdCB3Y2hhcl90CSphcmNoaXZlX2VudHJ5X3N5bWxpbmtfdyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBsYV9pbnQ2NF90CSBhcmNoaXZlX2VudHJ5X3VpZChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIF9fTEFfREVDTCBjb25zdCBjaGFyCSphcmNoaXZlX2VudHJ5X3VuYW1lKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwpAQCAtMzQ3LDYgKzM1NSw3IEBACiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X2NvcHlfc291cmNlcGF0aChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBjb25zdCBjaGFyICopOwogX19MQV9ERUNMIHZvaWQJYXJjaGl2ZV9lbnRyeV9jb3B5X3NvdXJjZXBhdGhfdyhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBjb25zdCB3Y2hhcl90ICopOwogX19MQV9ERUNMIHZvaWQJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGluayhzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBjb25zdCBjaGFyICopOworX19MQV9ERUNMIHZvaWQJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGludCk7CiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3V0Zjgoc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgY29uc3QgY2hhciAqKTsKIF9fTEFfREVDTCB2b2lkCWFyY2hpdmVfZW50cnlfY29weV9zeW1saW5rKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGNvbnN0IGNoYXIgKik7CiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X2NvcHlfc3ltbGlua193KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGNvbnN0IHdjaGFyX3QgKik7CkBAIC01MTIsOSArNTIxLDYgQEAKIF9fTEFfREVDTCBpbnQJIGFyY2hpdmVfZW50cnlfYWNsX25leHQoc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgaW50IC8qIHdhbnRfdHlwZSAqLywKIAkgICAgaW50ICogLyogdHlwZSAqLywgaW50ICogLyogcGVybXNldCAqLywgaW50ICogLyogdGFnICovLAogCSAgICBpbnQgKiAvKiBxdWFsICovLCBjb25zdCBjaGFyICoqIC8qIG5hbWUgKi8pOwotX19MQV9ERUNMIGludAkgYXJjaGl2ZV9lbnRyeV9hY2xfbmV4dF93KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGludCAvKiB3YW50X3R5cGUgKi8sCi0JICAgIGludCAqIC8qIHR5cGUgKi8sIGludCAqIC8qIHBlcm1zZXQgKi8sIGludCAqIC8qIHRhZyAqLywKLQkgICAgaW50ICogLyogcXVhbCAqLywgY29uc3Qgd2NoYXJfdCAqKiAvKiBuYW1lICovKTsKIAogLyoKICAqIENvbnN0cnVjdCBhIHRleHQtZm9ybWF0IEFDTC4gIFRoZSBmbGFncyBhcmd1bWVudCBpcyBhIGJpdG1hc2sgdGhhdApAQCAtNjg5LDcgKzY5NSw2IEBACiAgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKiosIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICoqKTsKIF9fTEFfREVDTCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqYXJjaGl2ZV9lbnRyeV9wYXJ0aWFsX2xpbmtzKAogICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5X2xpbmtyZXNvbHZlciAqcmVzLCB1bnNpZ25lZCBpbnQgKmxpbmtzKTsKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X2FjbC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfYWNsLjMKaW5kZXggNTM0ZGJmYS4uNTBkZDY0MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfYWNsLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfYWNsLjMKQEAgLTM0LDcgKzM0LDYgQEAKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF9mcm9tX3RleHQgLAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX2Zyb21fdGV4dF93ICwKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0ICwKLS5ObSBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cgLAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX3Jlc2V0ICwKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0ICwKIC5ObSBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0X3cgLApAQCAtODksMTYgKzg4LDYgQEAKIC5GYSAiY29uc3QgY2hhciAqKnJldF9uYW1lIgogLkZjCiAuRnQgaW50Ci0uRm8gYXJjaGl2ZV9lbnRyeV9hY2xfbmV4dF93Ci0uRmEgInN0cnVjdCBhcmNoaXZlX2VudHJ5ICphIgotLkZhICJpbnQgdHlwZSIKLS5GYSAiaW50ICpyZXRfdHlwZSIKLS5GYSAiaW50ICpyZXRfcGVybXNldCIKLS5GYSAiaW50ICpyZXRfdGFnIgotLkZhICJpbnQgKnJldF9xdWFsIgotLkZhICJjb25zdCB3Y2hhcl90ICoqcmV0X25hbWUiCi0uRmMKLS5GdCBpbnQKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9yZXNldCAic3RydWN0IGFyY2hpdmVfZW50cnkgKmEiICJpbnQgdHlwZSIKIC5GdCBjaGFyICoKIC5GbyBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0CkBAIC0xMTgsMTUgKzEwNywxNiBAQAogLlNoIERFU0NSSVBUSU9OCiBUaGUKIC5EcSBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykKLWV4dGVuZCB0aGUgc3RhbmRhcmQgVW5peCBwZXJzc2lvbiBtb2RlbC4KK2V4dGVuZCB0aGUgc3RhbmRhcmQgVW5peCBwZXJtaXNzaW9uIG1vZGVsLgogVGhlIEFDTCBpbnRlcmZhY2Ugb2YKIC5ObSBsaWJhcmNoaXZlCi1zdXBwb3J0cyBib3RoIFBPU0lYLjFlIGFuZCBORlN2NCBzdHlsZSBBQ0xzLiBVc2Ugb2YgQUNMcyBpcyByZXN0cmljdGVkIGJ5CitzdXBwb3J0cyBib3RoIFBPU0lYLjFlIGFuZCBORlN2NCBzdHlsZSBBQ0xzLgorVXNlIG9mIEFDTHMgaXMgcmVzdHJpY3RlZCBieQogdmFyaW91cyBsZXZlbHMgb2YgQUNMIHN1cHBvcnQgaW4gb3BlcmF0aW5nIHN5c3RlbXMsIGZpbGUgc3lzdGVtcyBhbmQgYXJjaGl2ZQogZm9ybWF0cy4KIC5TcyBQT1NJWC4xZSBBY2Nlc3MgQ29udHJvbCBMaXN0cwogQSBQT1NJWC4xZSBBQ0wgY29uc2lzdHMgb2YgYSBudW1iZXIgb2YgaW5kZXBlbmRlbnQgZW50cmllcy4KLUVhY2ggZW50cnkgc3BlY2lmaWVzIHRoZSBwZXJtaXNzaW9uIHNldCBhcyBiaXRtYXNrIG9mIGJhc2ljIHBlcm1pc3Npb25zLgorRWFjaCBlbnRyeSBzcGVjaWZpZXMgdGhlIHBlcm1pc3Npb24gc2V0IGFzIGEgYml0bWFzayBvZiBiYXNpYyBwZXJtaXNzaW9ucy4KIFZhbGlkIHBlcm1pc3Npb25zIGluIHRoZQogLkZhIHBlcm1zZXQKIGFyZToKQEAgLTE0NywxMyArMTM3LDEzIEBACiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfVVNFUl9PQkoKIFRoZSBvd25lciBvZiB0aGUgZmlsZS4KIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9HUk9VUAotVGhlIGdyb3VwIHNwZWNpZWQgYnkgdGhlIG5hbWUgZmllbGQuCitUaGUgZ3JvdXAgc3BlY2lmaWVkIGJ5IHRoZSBuYW1lIGZpZWxkLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0dST1VQX09CSgotVGhlIGdyb3VwIHdobyBvd25zIHRoZSBmaWxlLgorVGhlIGdyb3VwIHdoaWNoIG93bnMgdGhlIGZpbGUuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfTUFTSwogVGhlIG1heGltdW0gcGVybWlzc2lvbnMgdG8gYmUgb2J0YWluZWQgdmlhIGdyb3VwIHBlcm1pc3Npb25zLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX09USEVSCi1BbnkgcHJpbmNpcGFsIHdobyBpcyBub3QgZmlsZSBvd25lciBvciBhIG1lbWJlciBvZiB0aGUgb3duaW5nIGdyb3VwLgorQW55IHByaW5jaXBhbCB3aG8gaXMgbm90IHRoZSBmaWxlIG93bmVyIG9yIGEgbWVtYmVyIG9mIHRoZSBvd25pbmcgZ3JvdXAuCiAuRWwKIC5QcAogVGhlIHByaW5jaXBhbHMKQEAgLTE2NCwxMiArMTU0LDEyIEBACiBhcmUgZXF1aXZhbGVudCB0byB1c2VyLCBncm91cCBhbmQgb3RoZXIgaW4gdGhlIGNsYXNzaWMgVW5peCBwZXJtaXNzaW9uCiBtb2RlbCBhbmQgc3BlY2lmeSBub24tZXh0ZW5kZWQgQUNMIGVudHJpZXMuCiAuUHAKLUFsbCBmaWxlcyB3aXRoIGhhdmUgYW4gYWNjZXNzIEFDTAorQWxsIGZpbGVzIGhhdmUgYW4gYWNjZXNzIEFDTAogLlBxIER2IEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQUNDRVNTIC4KIFRoaXMgc3BlY2lmaWVzIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgYWNjZXNzIHRvIHRoZSBmaWxlIGl0c2VsZi4KIERpcmVjdG9yaWVzIGhhdmUgYW4gYWRkaXRpb25hbCBBQ0wKIC5QcSBEdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQgLAotd2hpY2ggY29udHJvbHMgdGhlIGluaXRpYWwgYWNjZXNzIEFDTCBmb3IgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnkgZW50cmllcy4KK3doaWNoIGNvbnRyb2xzIHRoZSBpbml0aWFsIGFjY2VzcyBBQ0wgZm9yIG5ld2x5LWNyZWF0ZWQgZGlyZWN0b3J5IGVudHJpZXMuCiAuU3MgTkZTdjQgQWNjZXNzIENvbnRyb2wgTGlzdHMKIEEgTkZTdjQgQUNMIGNvbnNpc3RzIG9mIG11bHRpcGxlIGluZGl2aWR1YWwgZW50cmllcyBjYWxsZWQgQWNjZXNzIENvbnRyb2wKIEVudHJpZXMgKEFDRXMpLgpAQCAtMTk3LDExICsxODcsMTEgQEAKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9VU0VSX09CSgogVGhlIG93bmVyIG9mIHRoZSBmaWxlLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0dST1VQCi1UaGUgZ3JvdXAgc3BlY2llZCBieSB0aGUgbmFtZSBmaWVsZC4KK1RoZSBncm91cCBzcGVjaWZpZWQgYnkgdGhlIG5hbWUgZmllbGQuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfR1JPVVBfT0JKCi1UaGUgZ3JvdXAgd2hvIG93bnMgdGhlIGZpbGUuCitUaGUgZ3JvdXAgd2hpY2ggb3ducyB0aGUgZmlsZS4KIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9FVkVSWU9ORQotQW55IHByaW5jaXBhbCB3aG8gaXMgbm90IGZpbGUgb3duZXIgb3IgYSBtZW1iZXIgb2YgdGhlIG93bmluZyBncm91cC4KK0FueSBwcmluY2lwYWwgd2hvIGlzIG5vdCB0aGUgZmlsZSBvd25lciBvciBhIG1lbWJlciBvZiB0aGUgb3duaW5nIGdyb3VwLgogLkVsCiAuUHAKIEVudHJpZXMgd2l0aCB0aGUKQEAgLTIxNiw5ICsyMDYsMTAgQEAKIC5QcAogTkZTdjQgQUNFIHBlcm1pc3Npb25zIGFuZCBmbGFncyBhcmUgc3RvcmVkIGluIHRoZSBzYW1lCiAuRmEgcGVybXNldAotYml0ZmllbGQuIFNvbWUgcGVybWlzc2lvbnMgc2hhcmUgdGhlIHNhbWUgY29uc3RhbnQgYW5kIHBlcm1pc3Npb24gY2hhcmFjdGVyIGJ1dAotaGF2ZSBkaWZmZXJlbnQgZWZmZWN0IG9uIGRpcmVjdG9yaWVzIHRoYW4gb24gZmlsZXMuIFRoZSBmb2xsb3dpbmcgQUNFCi1wZXJtaXNzaW9ucyBhcmUgc3VwcG9ydGVkOgorYml0ZmllbGQuCitTb21lIHBlcm1pc3Npb25zIHNoYXJlIHRoZSBzYW1lIGNvbnN0YW50IGFuZCBwZXJtaXNzaW9uIGNoYXJhY3RlcgorYnV0IGhhdmUgZGlmZmVyZW50IGVmZmVjdCBvbiBkaXJlY3RvcmllcyB0aGFuIG9uIGZpbGVzLgorVGhlIGZvbGxvd2luZyBBQ0UgcGVybWlzc2lvbnMgYXJlIHN1cHBvcnRlZDoKIC5CbCAtdGFnIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0IC13aWR0aCBBUkNISVYKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9SRUFEX0RBVEEgKCBTeSByICkKIFJlYWQgZGF0YSAoZmlsZSkuCkBAIC0yNjUsNyArMjU2LDggQEAKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9FTlRSWV9JTkhFUklUX09OTFkgKCBTeSBpICkKIE9ubHkgaW5oZXJpdCwgZG8gbm90IGFwcGx5IHRoZSBwZXJtaXNzaW9uIG9uIHRoZSBkaXJlY3RvcnkgaXRzZWxmLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VOVFJZX05PX1BST1BBR0FURV9JTkhFUklUICggU3kgbiApCi1EbyBub3QgcHJvcGFnYXRlIGluaGVyaXQgZmxhZ3MuIE9ubHkgZmlyc3QtbGV2ZWwgZW50cmllcyBpbmhlcml0IEFDTHMuCitEbyBub3QgcHJvcGFnYXRlIGluaGVyaXQgZmxhZ3MuCitPbmx5IGZpcnN0LWxldmVsIGVudHJpZXMgaW5oZXJpdCBBQ0xzLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VOVFJZX1NVQ0NFU1NGVUxfQUNDRVNTICggU3kgUyApCiBUcmlnZ2VyIGFsYXJtIG9yIGF1ZGl0IG9uIHN1Y2Nlc3NmdWwgYWNjZXNzLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VOVFJZX0ZBSUxFRF9BQ0NFU1MgKCBTeSBGICkKQEAgLTI3OSw4ICsyNzEsOCBAQAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX2FkZF9lbnRyeV93CiBhZGQgYSBzaW5nbGUgQUNMIGVudHJ5LgogRm9yIHRoZSBhY2Nlc3MgQUNMIGFuZCBub24tZXh0ZW5kZWQgcHJpbmNpcGFscywgdGhlIGNsYXNzaWMgVW5peCBwZXJtaXNzaW9ucwotYXJlIHVwZGF0ZWQuIEFuIGFyY2hpdmUgZW50cnkgY2Fubm90IGNvbnRhaW4gYm90aCBQT1NJWC4xZSBhbmQgTkZTdjQgQUNMCi1lbnRyaWVzLgorYXJlIHVwZGF0ZWQuCitBbiBhcmNoaXZlIGVudHJ5IGNhbm5vdCBjb250YWluIGJvdGggUE9TSVguMWUgYW5kIE5GU3Y0IEFDTCBlbnRyaWVzLgogLlBwCiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfY2xlYXIKIHJlbW92ZXMgYWxsIEFDTCBlbnRyaWVzIGFuZCByZXNldHMgdGhlIGVudW1lcmF0aW9uIHBvaW50ZXIuCkBAIC0zMDAsNyArMjkyLDggQEAKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0FVRElUCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9BTEFSTQogLkVsCi1mb3IgTkZTdjQgQUNMcy4gRm9yIFBPU0lYLjFlIEFDTHMgaWYKK2ZvciBORlN2NCBBQ0xzLgorRm9yIFBPU0lYLjFlIEFDTHMgaWYKIC5EdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0FDQ0VTUwogaXMgaW5jbHVkZWQgYW5kIGF0IGxlYXN0IG9uZSBleHRlbmRlZCBBQ0wgZW50cnkgaXMgZm91bmQsCiB0aGUgdGhyZWUgbm9uLWV4dGVuZGVkIEFDTHMgYXJlIGFkZGVkLgpAQCAtMzEyLDcgKzMwNSw4IEBACiAuUHEgb3IgbWVyZ2Ugd2l0aCBleGlzdGluZwogQUNMIGVudHJpZXMgZnJvbQogLlBxIHdpZGUKLXRleHQuIFRoZSBhcmd1bWVudAordGV4dC4KK1RoZSBhcmd1bWVudAogLkZhIHR5cGUKIG1heSB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKIC5CbCAtdGFnIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0IC13aWR0aCAiQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9ERUZBVUxUIgpAQCAtMzIyLDExICszMTYsMTMgQEAKIC5FbAogU3VwcG9ydHMgYWxsIGZvcm1hdHMgdGhhdCBjYW4gYmUgY3JlYXRlZCB3aXRoCiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfdG9fdGV4dAotb3IgcmVzcGVjdGl2ZQorb3IgcmVzcGVjdGl2ZWx5CiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfdG9fdGV4dF93IC4KLUV4aXN0aW5nIEFDTCBlbnRyaWVzIGFyZSBwcmVzZXJ2ZWQuIFRvIGdldCBhIGNsZWFuIG5ldyBBQ0wgZnJvbSB0ZXh0CitFeGlzdGluZyBBQ0wgZW50cmllcyBhcmUgcHJlc2VydmVkLgorVG8gZ2V0IGEgY2xlYW4gbmV3IEFDTCBmcm9tIHRleHQKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9jbGVhcgotbXVzdCBiZSBjYWxsZWQgZmlyc3QuIEVudHJpZXMgcHJlZml4ZWQgd2l0aAorbXVzdCBiZSBjYWxsZWQgZmlyc3QuCitFbnRyaWVzIHByZWZpeGVkIHdpdGgKIC5EcSBkZWZhdWx0OgogYXJlIHRyZWF0ZWQgYXMKIC5EdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQKQEAgLTM0Miw4ICszMzgsNiBAQAogYXJlIHNraXBwZWQuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0Ci1hbmQKLS5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cKIHJldHVybiB0aGUgbmV4dCBlbnRyeSBvZiB0aGUgQUNMIGxpc3QuCiBUaGlzIGZ1bmN0aW9ucyBtYXkgb25seSBiZSBjYWxsZWQgYWZ0ZXIKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9yZXNldApAQCAtMzUxLDEwICszNDUsOCBAQAogLlBwCiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfcmVzZXQKIHByZXBhcmUgcmVhZGluZyB0aGUgbGlzdCBvZiBBQ0wgZW50cmllcyB3aXRoCi0uRm4gYXJjaGl2ZV9lbnRyeV9hY2xfbmV4dAotb3IKLS5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cgLgotVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyIDAsIGlmIG5vIG5vbi1leHRlbmRlZCBBQ0xzIGFyZSBmb3VuZC4KKy5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0IC4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIDAgaWYgbm8gbm9uLWV4dGVuZGVkIEFDTHMgYXJlIGZvdW5kLgogSW4gdGhpcyBjYXNlLCB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIHNob3VsZCBiZSBvYnRhaW5lZCBieQogLlhyIGFyY2hpdmVfZW50cnlfbW9kZSAzCiBvciBzZXQgdXNpbmcKQEAgLTM2Nyw3ICszNTksOCBAQAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX3RvX3RleHRfdwogY29udmVydCB0aGUgQUNMIGVudHJpZXMgZm9yIHRoZSBnaXZlbiB0eXBlIGludG8gYQogLlBxIHdpZGUKLXN0cmluZyBvZiBBQ0wgZW50cmllcyBzZXBhcmF0ZWQgYnkgbmV3bGluZS4gSWYgdGhlIHBvaW50ZXIKK3N0cmluZyBvZiBBQ0wgZW50cmllcyBzZXBhcmF0ZWQgYnkgbmV3bGluZS4KK0lmIHRoZSBwb2ludGVyCiAuRmEgbGVuX3AKIGlzIG5vdCBOVUxMLCB0aGVuIHRoZSBmdW5jdGlvbiBzaGFsbCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nCiAuUHEgbm90IGluY2x1ZGluZyB0aGUgTlVMTCB0ZXJtaW5hdG9yCkBAIC00MTUsNyArNDA4LDggQEAKIC5EcSBkZWZhdWx0OiAuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF90eXBlcwotZ2V0IEFDTCBlbnRyeSB0eXBlcyBjb250YWluZWQgaW4gYW4gYXJjaGl2ZSBlbnRyeSdzIEFDTC4gQXMgUE9TSVguMWUgYW5kIE5GU3Y0CitnZXQgQUNMIGVudHJ5IHR5cGVzIGNvbnRhaW5lZCBpbiBhbiBhcmNoaXZlIGVudHJ5J3MgQUNMLgorQXMgUE9TSVguMWUgYW5kIE5GU3Y0CiBBQ0wgZW50cmllcyBjYW5ub3QgYmUgbWl4ZWQsIHRoaXMgZnVuY3Rpb24gaXMgYSB2ZXJ5IGVmZmljaWVudCB3YXkgdG8gZGV0ZWN0IGlmCiBhbiBBQ0wgYWxyZWFkeSBjb250YWlucyBQT1NJWC4xZSBvciBORlN2NCBBQ0wgZW50cmllcy4KIC5TaCBSRVRVUk4gVkFMVUVTCkBAIC00MzgsOSArNDMyLDcgQEAKIGlmIG9uZSBvciBtb3JlIGVudHJpZXMgd2VyZSBpbnZhbGlkIG9yIG5vbi1wYXJzZWFibGUuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0Ci1hbmQKLS5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cKLXJldHVybgorcmV0dXJucwogLkR2IEFSQ0hJVkVfT0sKIG9uIHN1Y2Nlc3MsCiAuRHYgQVJDSElWRV9FT0YKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X2xvY2FsZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbG9jYWxlLmgKaW5kZXggNDQ1NTBjNS4uODAzYzAzNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbG9jYWxlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbG9jYWxlLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogICogJEZyZWVCU0QkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX0VOVFJZX0xPQ0FMRV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfRU5UUllfTE9DQUxFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9FTlRSWV9MT0NBTEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX0VOVFJZX0xPQ0FMRV9IX0lOQ0xVREVECi0KIHN0cnVjdCBhcmNoaXZlX2VudHJ5Owogc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnY7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X21pc2MuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X21pc2MuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmFiN2RkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbWlzYy4zCkBAIC0wLDAgKzEsNjMgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMTkgTWFydGluIE1hdHVza2EKKy5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisuXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisuXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisuXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKy5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisuXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorLlwiIFNVQ0ggREFNQUdFLgorLlwiCisuRGQgQXByaWwgMTUsIDIwMTkKKy5EdCBBUkNISVZFX0VOVFJZX01JU0MgMworLk9zCisuU2ggTkFNRQorLk5tIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlICwKKy5ObSBhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUKKy5OZCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHByb3BlcnRpZXMgb2YgYXJjaGl2ZV9lbnRyeQorLlNoIExJQlJBUlkKK1N0cmVhbWluZyBBcmNoaXZlIExpYnJhcnkgKGxpYmFyY2hpdmUsIC1sYXJjaGl2ZSkKKy5TaCBTWU5PUFNJUworLkluIGFyY2hpdmVfZW50cnkuaAorLkZ0IGludAorLkZuIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlICJzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqYSIKKy5GdCB2b2lkCisuRm4gYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlICJzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqYSIgImludCIKKy5TaCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uCisuRm4gYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUKK3JldHVybnMgYW5kIHRoZSBmdW5jdGlvbgorLkZuIGFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZQorc2V0cyB0aGUgdHlwZSBvZiB0aGUgc3ltYm9saWMgbGluayBzdG9yZWQgaW4gYW4gYXJjaGl2ZSBlbnRyeS4KK1RoZXNlIGZ1bmN0aW9ucworaGF2ZSBzcGVjaWFsIG1lYW5pbmcgb24gb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIHN5bWJvbGljIGxpbmsKK3R5cGVzIChlLmcuIE1pY3Jvc29mdCBXaW5kb3dzKS4KKy5QcAorU3VwcG9ydGVkIHZhbHVlcyBhcmU6CisuQmwgLXRhZyAtd2lkdGggIkFFX1NZTUxJTktfVFlQRV9ESVJFQ1RPUlkiIC1jb21wYWN0CisuSXQgQUVfU1lNTElOS19UWVBFX1VOREVGSU5FRAorU3ltYm9saWMgbGluayB0YXJnZXQgdHlwZSBpcyBub3QgZGVmaW5lZCAoZGVmYXVsdCBvbiB1bml4IHN5c3RlbXMpCisuSXQgQUVfU1lNTElOS19UWVBFX0ZJTEUKK1N5bWJvbGljIGxpbmsgcG9pbnRzIHRvIGEgZmlsZQorLkl0IEFFX1NZTUxJTktfVFlQRV9ESVJFQ1RPUlkKK1N5bWJvbGljIGxpbmsgcG9pbnRzIHRvIGEgZGlyZWN0b3J5CisuRWwKKy5TaCBTRUUgQUxTTworLlhyIGFyY2hpdmVfZW50cnkgMyAsCisuWHIgYXJjaGl2ZV9lbnRyeV9wYXRocyAzICwKKy5YciBhcmNoaXZlX2VudHJ5X3N0YXQgMyAsCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wYXRocy4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcGF0aHMuMwppbmRleCBmNjQ3MjEyLi4wZjg0OWM5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wYXRocy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3BhdGhzLjMKQEAgLTEzMyw3ICsxMzMsNyBAQAogLkZuIFhYWF93IC4KIC5JdCBVVEYtOAogVW5pY29kZSBzdHJpbmdzIGVuY29kZWQgYXMgVVRGLTguCi1UaGlzIGFyZSBjb252aWVuY2UgZnVuY3Rpb25zIHRvIHVwZGF0ZSBib3RoIHRoZSBtdWx0aWJ5dGUgYW5kIHdpZGUKK1RoZXNlIGFyZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gdXBkYXRlIGJvdGggdGhlIG11bHRpYnl0ZSBhbmQgd2lkZQogY2hhcmFjdGVyIHN0cmluZ3MgYXQgdGhlIHNhbWUgdGltZS4KIC5FbAogLlBwCkBAIC0xNDEsMTMgKzE0MSwxMyBAQAogYXJjaGl2ZSBkaXJlY3RseS4KIC5QcAogRm9yIHRoYXQgcmVhc29uLCBpdCBpcyBvbmx5IGF2YWlsYWJsZSBhcyBtdWx0aWJ5dGUgc3RyaW5nLgotVGhlIGxpbmsgcGF0aCBpcyBhIGNvbnZpZW5jZSBmdW5jdGlvbiBmb3IgY29uZGl0aW9uYWxseSBzZXR0aW5nCitUaGUgbGluayBwYXRoIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNvbmRpdGlvbmFsbHkgc2V0dGluZwogaGFyZGxpbmsgb3Igc3ltbGluayBkZXN0aW5hdGlvbi4KIEl0IGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZ2V0IGFjY2Vzc29yIGZ1bmN0aW9uLgogLlBwCiAuRm4gYXJjaGl2ZV9lbnRyeV9zZXRfWFhYCi1pcyBhbiBhbGlhcyBmb3IgCitpcyBhbiBhbGlhcyBmb3IKIC5GbiBhcmNoaXZlX2VudHJ5X2NvcHlfWFhYIC4KIC5TaCBTRUUgQUxTTwotLlhyIGFyY2hpdmVfZW50cnkgMwotLlhyIGxpYmFyY2hpdmUgMyAsCisuWHIgYXJjaGl2ZV9lbnRyeSAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3Blcm1zLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wZXJtcy4zCmluZGV4IGFhZTM2NDguLjAyOTFiN2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3Blcm1zLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcGVybXMuMwpAQCAtMTI2LDcgKzEyNiw3IEBACiBhbmQKIC5GbiBhcmNoaXZlX2VudHJ5X3NldF9wZXJtCiBzdG9yZSB0aGUgZ2l2ZW4gdXNlciBpZCwgZ3JvdXAgaWQgYW5kIHBlcm1pc3Npb24gaW4gdGhlIGVudHJ5LgotVGhlIHBlcm1pc3Npb24gaXMgYWxzbyBzZXQgYXMgc2lkZSBlZmZlY3Qgb2YgY2FsbGluZworVGhlIHBlcm1pc3Npb24gaXMgYWxzbyBzZXQgYXMgYSBzaWRlIGVmZmVjdCBvZiBjYWxsaW5nCiAuRm4gYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZSAuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X3N0cm1vZGUKQEAgLTE0MywxMiArMTQzLDEyIEBACiAuRm4gWFhYX3cgLgogLkl0IFVURi04CiBVbmljb2RlIHN0cmluZ3MgZW5jb2RlZCBhcyBVVEYtOC4KLVRoaXMgYXJlIGNvbnZpZW5jZSBmdW5jdGlvbnMgdG8gdXBkYXRlIGJvdGggdGhlIG11bHRpYnl0ZSBhbmQgd2lkZQorVGhlc2UgYXJlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byB1cGRhdGUgYm90aCB0aGUgbXVsdGlieXRlIGFuZCB3aWRlCiBjaGFyYWN0ZXIgc3RyaW5ncyBhdCB0aGUgc2FtZSB0aW1lLgogLkVsCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X3NldF9YWFgKLWlzIGFuIGFsaWFzIGZvciAKK2lzIGFuIGFsaWFzIGZvcgogLkZuIGFyY2hpdmVfZW50cnlfY29weV9YWFggLgogLlNzIEZpbGUgRmxhZ3MKIEZpbGUgZmxhZ3MgYXJlIHRyYW5zcGFyZW50bHkgY29udmVydGVkIGJldHdlZW4gYSBiaXRtYXAKQEAgLTE4Miw3ICsxODIsNyBAQAogLkZuIGFyY2hpdmVfZW50cnlfY29weV9mZmxhZ3NfdGV4dAogYW5kCiAuRm4gYXJjaGl2ZV9lbnRyeV9jb3B5X2ZmbGFnc190ZXh0X3cKLWZ1bmN0aW9ucyBwYXJzZSB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgc2V0cyB0aGUgaW50ZXJuYWwgYml0bWFwIHZhbHVlcy4KK2Z1bmN0aW9ucyBwYXJzZSB0aGUgcHJvdmlkZWQgdGV4dCBhbmQgc2V0IHRoZSBpbnRlcm5hbCBiaXRtYXAgdmFsdWVzLgogVGhpcyBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIG9wZXJhdGlvbjsgbmFtZXMgdGhhdCBhcmUgbm90IG1lYW5pbmdmdWwKIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtIHdpbGwgYmUgaWdub3JlZC4KIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IG5hbWUgdGhhdCB3YXMgbm90CkBAIC0xOTcsOCArMTk3LDggQEAKIC5YciBhcmNoaXZlX2VudHJ5IDMgLAogLlhyIGFyY2hpdmVfZW50cnlfYWNsIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kaXNrIDMgLAotLlhyIGFyY2hpdmVfd3JpdGVfZGlzayAzCi0uWHIgbGliYXJjaGl2ZSAzICwKKy5YciBhcmNoaXZlX3dyaXRlX2Rpc2sgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggQlVHUwogVGhlIHBsYXRmb3JtIHR5cGVzCiAuVnQgdWlkX3QKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3ByaXZhdGUuaAppbmRleCBjNjkyMzNlLi4yYjlhMDg0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcHJpdmF0ZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcHJpdmF0ZS5oIDIwMTA5NiAyMDA5LTEyLTI4IDAyOjQxOjI3WiBraWVudHpsZSAkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZV9hY2xfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfc3RyaW5nLmgiCiAKQEAgLTE3Niw2ICsxNzYsOSBAQAogCiAJLyogTWlzY2VsbGFuZW91cy4gKi8KIAljaGFyCQkgc3RybW9kZVsxMl07CisKKwkvKiBTeW1saW5rIHR5cGUgc3VwcG9ydCAqLworCWludCBhZV9zeW1saW5rX3R5cGU7CiB9OwogCiAjZW5kaWYgLyogQVJDSElWRV9FTlRSWV9QUklWQVRFX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3N0YXQuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3N0YXQuMwppbmRleCAyNjYxMWU0Li5hYTVjOGUwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9zdGF0LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfc3RhdC4zCkBAIC01NCw3ICs1NCw3IEBACiAuTm0gYXJjaGl2ZV9lbnRyeV9yZGV2bWFqb3IgLAogLk5tIGFyY2hpdmVfZW50cnlfc2V0X3JkZXZtYWpvciAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9yZGV2bWlub3IgLAotLk5tIGFyY2hpdmVfZW50cnlfc2V0X3JkZXZtaW5vciAsCisuTm0gYXJjaGl2ZV9lbnRyeV9zZXRfcmRldm1pbm9yCiAuTmQgYWNjZXNzb3IgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgYXJjaGl2ZSBlbnRyeSBkZXNjcmlwdGlvbnMKIC5TaCBMSUJSQVJZCiBTdHJlYW1pbmcgQXJjaGl2ZSBMaWJyYXJ5IChsaWJhcmNoaXZlLCAtbGFyY2hpdmUpCkBAIC0yNjcsOCArMjY3LDggQEAKIFNvbWUgYXJjaGl2ZSBmb3JtYXRzIHVzZSB0aGUgY29tYmluZWQgZm9ybSwgd2hpbGUgb3RoZXIgZm9ybWF0cyB1c2UKIHRoZSBzcGxpdCBmb3JtLgogLlNoIFNFRSBBTFNPCisuWHIgc3RhdCAyICwKIC5YciBhcmNoaXZlX2VudHJ5X2FjbCAzICwKIC5YciBhcmNoaXZlX2VudHJ5X3Blcm1zIDMgLAogLlhyIGFyY2hpdmVfZW50cnlfdGltZSAzICwKLS5YciBsaWJhcmNoaXZlIDMgLAotLlhyIHN0YXQgMgorLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfdGltZS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfdGltZS4zCmluZGV4IDE4NjQ1MjEuLmQwNTYzZWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3RpbWUuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV90aW1lLjMKQEAgLTQ4LDcgKzQ4LDcgQEAKIC5ObSBhcmNoaXZlX2VudHJ5X210aW1lX25zZWMgLAogLk5tIGFyY2hpdmVfZW50cnlfbXRpbWVfaXNfc2V0ICwKIC5ObSBhcmNoaXZlX2VudHJ5X3NldF9tdGltZSAsCi0uTm0gYXJjaGl2ZV9lbnRyeV91bnNldF9tdGltZSAsCisuTm0gYXJjaGl2ZV9lbnRyeV91bnNldF9tdGltZQogLk5kIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHRpbWVzIGluIGFyY2hpdmUgZW50cnkgZGVzY3JpcHRpb25zCiAuU2ggTElCUkFSWQogU3RyZWFtaW5nIEFyY2hpdmUgTGlicmFyeSAobGliYXJjaGl2ZSwgLWxhcmNoaXZlKQpAQCAtMTEzLDggKzExMyw4IEBACiAuRm4gWFhYX2lzX3NldCAuCiBVbnNldCB0aW1lIGZpZWxkcyBoYXZlIGEgc2Vjb25kIGFuZCBuYW5vc2Vjb25kIGZpZWxkIG9mIDAuCiAuU2ggU0VFIEFMU08KLS5YciBhcmNoaXZlX2VudHJ5IDMKLS5YciBsaWJhcmNoaXZlIDMgLAorLlhyIGFyY2hpdmVfZW50cnkgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCiAuTm0gbGliYXJjaGl2ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jCmluZGV4IDAzMGMwODMuLjY3ODZkMzUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmMKQEAgLTI3LDYgKzI3LDkgQEAKICoqICBUaGlzIGNvZGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4gYW5kIGhhcyBubyBjb3B5cmlnaHQuCiAqLwogCisjaWZuZGVmIENNX0dFVF9EQVRFCisjaW5jbHVkZSAiYXJjaGl2ZV9wbGF0Zm9ybS5oIgorI2VuZGlmCiAjaWZkZWYgX19GcmVlQlNEX18KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKQEAgLTY5NCw4ICs2OTcsMTYgQEAKIAlzaWduZWQgY2hhciBEYXlzSW5Nb250aFsxMl0gPSB7CiAJCTMxLCAwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMQogCX07Ci0JdGltZV90CUp1bGlhbjsKLQlpbnQJaTsKKwl0aW1lX3QJCUp1bGlhbjsKKwlpbnQJCWk7CisJc3RydWN0IHRtCSpsdGltZTsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwlzdHJ1Y3QgdG0JdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJZXJybm9fdAkJdGVycjsKKwlfX3RpbWU2NF90CXRtcHRpbWU7CisjZW5kaWYKIAogCWlmIChZZWFyIDwgNjkpCiAJCVllYXIgKz0gMjAwMDsKQEAgLTcyMiwyMSArNzMzLDY0IEBACiAJSnVsaWFuICo9IERBWTsKIAlKdWxpYW4gKz0gVGltZXpvbmU7CiAJSnVsaWFuICs9IEhvdXJzICogSE9VUiArIE1pbnV0ZXMgKiBNSU5VVEUgKyBTZWNvbmRzOworI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikKKwlsdGltZSA9IGxvY2FsdGltZV9yKCZKdWxpYW4sICZ0bWJ1Zik7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJdG1wdGltZSA9IEp1bGlhbjsKKwl0ZXJyID0gX2xvY2FsdGltZTY0X3MoJnRtYnVmLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCWx0aW1lID0gTlVMTDsKKwllbHNlCisJCWx0aW1lID0gJnRtYnVmOworI2Vsc2UKKwlsdGltZSA9IGxvY2FsdGltZSgmSnVsaWFuKTsKKyNlbmRpZgogCWlmIChEU1Rtb2RlID09IERTVG9uCi0JICAgIHx8IChEU1Rtb2RlID09IERTVG1heWJlICYmIGxvY2FsdGltZSgmSnVsaWFuKS0+dG1faXNkc3QpKQorCSAgICB8fCAoRFNUbW9kZSA9PSBEU1RtYXliZSAmJiBsdGltZS0+dG1faXNkc3QpKQogCQlKdWxpYW4gLT0gSE9VUjsKIAlyZXR1cm4gSnVsaWFuOwogfQogCi0KIHN0YXRpYyB0aW1lX3QKIERTVGNvcnJlY3QodGltZV90IFN0YXJ0LCB0aW1lX3QgRnV0dXJlKQogewotCXRpbWVfdAlTdGFydERheTsKLQl0aW1lX3QJRnV0dXJlRGF5OworCXRpbWVfdAkJU3RhcnREYXk7CisJdGltZV90CQlGdXR1cmVEYXk7CisJc3RydWN0IHRtCSpsdGltZTsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwlzdHJ1Y3QgdG0JdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJZXJybm9fdAkJdGVycjsKKwlfX3RpbWU2NF90CXRtcHRpbWU7CisjZW5kaWYKIAotCVN0YXJ0RGF5ID0gKGxvY2FsdGltZSgmU3RhcnQpLT50bV9ob3VyICsgMSkgJSAyNDsKLQlGdXR1cmVEYXkgPSAobG9jYWx0aW1lKCZGdXR1cmUpLT50bV9ob3VyICsgMSkgJSAyNDsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpCisJbHRpbWUgPSBsb2NhbHRpbWVfcigmU3RhcnQsICZ0bWJ1Zik7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJdG1wdGltZSA9IFN0YXJ0OworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJbHRpbWUgPSBOVUxMOworCWVsc2UKKwkJbHRpbWUgPSAmdG1idWY7CisjZWxzZQorCWx0aW1lID0gbG9jYWx0aW1lKCZTdGFydCk7CisjZW5kaWYKKwlTdGFydERheSA9IChsdGltZS0+dG1faG91ciArIDEpICUgMjQ7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCWx0aW1lID0gbG9jYWx0aW1lX3IoJkZ1dHVyZSwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwl0bXB0aW1lID0gRnV0dXJlOworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJbHRpbWUgPSBOVUxMOworCWVsc2UKKwkJbHRpbWUgPSAmdG1idWY7CisjZWxzZQorCWx0aW1lID0gbG9jYWx0aW1lKCZGdXR1cmUpOworI2VuZGlmCisJRnV0dXJlRGF5ID0gKGx0aW1lLT50bV9ob3VyICsgMSkgJSAyNDsKIAlyZXR1cm4gKEZ1dHVyZSAtIFN0YXJ0KSArIChTdGFydERheSAtIEZ1dHVyZURheSkgKiBIT1VSOwogfQogCkBAIC03NDcsOSArODAxLDI3IEBACiB7CiAJc3RydWN0IHRtCSp0bTsKIAl0aW1lX3QJdCwgbm93OworI2lmIGRlZmluZWQoSEFWRV9HTVRJTUVfUikgfHwgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCXN0cnVjdCB0bQl0bWJ1ZjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwllcnJub190CQl0ZXJyOworCV9fdGltZTY0X3QJdG1wdGltZTsKKyNlbmRpZgogCiAJdCA9IFN0YXJ0IC0gem9uZTsKKyNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpCisJdG0gPSBnbXRpbWVfcigmdCwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwl0bXB0aW1lID0gdDsKKwl0ZXJyID0gX2dtdGltZTY0X3MoJnRtYnVmLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCXRtID0gTlVMTDsKKwllbHNlCisJCXRtID0gJnRtYnVmOworI2Vsc2UKIAl0bSA9IGdtdGltZSgmdCk7CisjZW5kaWYKIAlub3cgPSBTdGFydDsKIAlub3cgKz0gREFZICogKChEYXlOdW1iZXIgLSB0bS0+dG1fd2RheSArIDcpICUgNyk7CiAJbm93ICs9IDcgKiBEQVkgKiAoRGF5T3JkaW5hbCA8PSAwID8gRGF5T3JkaW5hbCA6IERheU9yZGluYWwgLSAxKTsKQEAgLTc2NSwxMCArODM3LDI4IEBACiAJc3RydWN0IHRtCSp0bTsKIAl0aW1lX3QJTW9udGg7CiAJdGltZV90CVllYXI7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKSB8fCBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJc3RydWN0IHRtCXRtYnVmOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCWVycm5vX3QJCXRlcnI7CisJX190aW1lNjRfdAl0bXB0aW1lOworI2VuZGlmCiAKIAlpZiAoUmVsTW9udGggPT0gMCkKIAkJcmV0dXJuIDA7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCXRtID0gbG9jYWx0aW1lX3IoJlN0YXJ0LCAmdG1idWYpOworI2VsaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXRtcHRpbWUgPSBTdGFydDsKKwl0ZXJyID0gX2xvY2FsdGltZTY0X3MoJnRtYnVmLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCXRtID0gTlVMTDsKKwllbHNlCisJCXRtID0gJnRtYnVmOworI2Vsc2UKIAl0bSA9IGxvY2FsdGltZSgmU3RhcnQpOworI2VuZGlmCiAJTW9udGggPSAxMiAqICh0bS0+dG1feWVhciArIDE5MDApICsgdG0tPnRtX21vbiArIFJlbE1vbnRoOwogCVllYXIgPSBNb250aCAvIDEyOwogCU1vbnRoID0gTW9udGggJSAxMiArIDE7CkBAIC05MDUsNiArOTk1LDEwIEBACiAJdGltZV90CQlTdGFydDsKIAl0aW1lX3QJCXRvZDsKIAlsb25nCQl0em9uZTsKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpIHx8IGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwllcnJub190CQl0ZXJyOworCV9fdGltZTY0X3QJdG1wdGltZTsKKyNlbmRpZgogCiAJLyogQ2xlYXIgb3V0IHRoZSBwYXJzZWQgdG9rZW4gYXJyYXkuICovCiAJbWVtc2V0KHRva2VucywgMCwgc2l6ZW9mKHRva2VucykpOwpAQCAtOTEzLDIwICsxMDA3LDQ0IEBACiAJZ2RzID0gJl9nZHM7CiAKIAkvKiBMb29rIHVwIHRoZSBjdXJyZW50IHRpbWUuICovCisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCXRtID0gbG9jYWx0aW1lX3IoJm5vdywgJmxvY2FsKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwl0bXB0aW1lID0gbm93OworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmbG9jYWwsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJdG0gPSBOVUxMOworCWVsc2UKKwkJdG0gPSAmbG9jYWw7CisjZWxzZQogCW1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihsb2NhbCkpOwotCXRtID0gbG9jYWx0aW1lICgmbm93KTsKKwl0bSA9IGxvY2FsdGltZSgmbm93KTsKKyNlbmRpZgogCWlmICh0bSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CisjaWYgIWRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikgJiYgIWRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKIAlsb2NhbCA9ICp0bTsKKyNlbmRpZgogCiAJLyogTG9vayB1cCBVVEMgaWYgd2UgY2FuIGFuZCB1c2UgdGhhdCB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQKIAkgKiB0aW1lem9uZSBvZmZzZXQuICovCisjaWYgZGVmaW5lZChIQVZFX0dNVElNRV9SKQorCWdtdF9wdHIgPSBnbXRpbWVfcigmbm93LCAmZ210KTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwl0bXB0aW1lID0gbm93OworCXRlcnIgPSBfZ210aW1lNjRfcygmZ210LCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCWdtdF9wdHIgPSBOVUxMOworCWVsc2UKKwkJZ210X3B0ciA9ICZnbXQ7CisjZWxzZQogCW1lbXNldCgmZ210LCAwLCBzaXplb2YoZ210KSk7Ci0JZ210X3B0ciA9IGdtdGltZSAoJm5vdyk7CisJZ210X3B0ciA9IGdtdGltZSgmbm93KTsKIAlpZiAoZ210X3B0ciAhPSBOVUxMKSB7CiAJCS8qIENvcHksIGluIGNhc2UgbG9jYWx0aW1lIGFuZCBnbXRpbWUgdXNlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KIAkJZ210ID0gKmdtdF9wdHI7CiAJfQorI2VuZGlmCiAJaWYgKGdtdF9wdHIgIT0gTlVMTCkKIAkJdHpvbmUgPSBkaWZmdG0gKCZnbXQsICZsb2NhbCk7CiAJZWxzZQpAQCAtOTYwLDcgKzEwNzgsMTggQEAKIAkgKiB0aW1lIGNvbXBvbmVudHMgaW5zdGVhZCBvZiB0aGUgbG9jYWwgdGltZXpvbmUuICovCiAJaWYgKGdkcy0+SGF2ZVpvbmUgJiYgZ210X3B0ciAhPSBOVUxMKSB7CiAJCW5vdyAtPSBnZHMtPlRpbWV6b25lOwotCQlnbXRfcHRyID0gZ210aW1lICgmbm93KTsKKyNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpCisJCWdtdF9wdHIgPSBnbXRpbWVfcigmbm93LCAmZ210KTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwkJdG1wdGltZSA9IG5vdzsKKwkJdGVyciA9IF9nbXRpbWU2NF9zKCZnbXQsICZ0bXB0aW1lKTsKKwkJaWYgKHRlcnIpCisJCQlnbXRfcHRyID0gTlVMTDsKKwkJZWxzZQorCQkJZ210X3B0ciA9ICZnbXQ7CisjZWxzZQorCQlnbXRfcHRyID0gZ210aW1lKCZub3cpOworI2VuZGlmCiAJCWlmIChnbXRfcHRyICE9IE5VTEwpCiAJCQlsb2NhbCA9ICpnbXRfcHRyOwogCQlub3cgKz0gZ2RzLT5UaW1lem9uZTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuaAppbmRleCA2NjZmZjVmLi45MDBhOGY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9HRVREQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgPHRpbWUuaD4KIAogdGltZV90IF9fYXJjaGl2ZV9nZXRfZGF0ZSh0aW1lX3Qgbm93LCBjb25zdCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfaG1hYy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfaG1hYy5jCmluZGV4IGYyOTk2NTUuLjJhOWQwNGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2htYWMuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjLmMKQEAgLTgzLDYgKzgzLDkgQEAKIHN0YXRpYyBpbnQKIF9faG1hY19zaGExX2luaXQoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW4pCiB7CisjaWZkZWYgX19HTlVDX18KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjYXN0LXF1YWwiCisjZW5kaWYKIAlCQ1JZUFRfQUxHX0hBTkRMRSBoQWxnOwogCUJDUllQVF9IQVNIX0hBTkRMRSBoSGFzaDsKIAlEV09SRCBoYXNoX2xlbjsKQEAgLTE0Nyw2ICsxNTAsNTMgQEAKIAl9CiB9CiAKKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJNQkVEQ1JZUFRPKSAmJiBkZWZpbmVkKEhBVkVfTUJFRFRMU19NRF9IKQorCitzdGF0aWMgaW50CitfX2htYWNfc2hhMV9pbml0KGFyY2hpdmVfaG1hY19zaGExX2N0eCAqY3R4LCBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuKQoreworICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqaW5mbzsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBtYmVkdGxzX21kX2luaXQoY3R4KTsKKyAgICAgICAgaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoTUJFRFRMU19NRF9TSEExKTsKKyAgICAgICAgaWYgKGluZm8gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZnJlZShjdHgpOworICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisgICAgICAgIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoY3R4LCBpbmZvLCAxKTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9mcmVlKGN0eCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKwlyZXQgPSBtYmVkdGxzX21kX2htYWNfc3RhcnRzKGN0eCwga2V5LCBrZXlfbGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJbWJlZHRsc19tZF9mcmVlKGN0eCk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19faG1hY19zaGExX3VwZGF0ZShhcmNoaXZlX2htYWNfc2hhMV9jdHggKmN0eCwgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9sZW4pCit7CisJbWJlZHRsc19tZF9obWFjX3VwZGF0ZShjdHgsIGRhdGEsIGRhdGFfbGVuKTsKK30KKworc3RhdGljIHZvaWQgX19obWFjX3NoYTFfZmluYWwoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgsIHVpbnQ4X3QgKm91dCwgc2l6ZV90ICpvdXRfbGVuKQoreworCSh2b2lkKW91dF9sZW47CS8qIFVOVVNFRCAqLworCisJbWJlZHRsc19tZF9obWFjX2ZpbmlzaChjdHgsIG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faG1hY19zaGExX2NsZWFudXAoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgpCit7CisJbWJlZHRsc19tZF9mcmVlKGN0eCk7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKK30KKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9ITUFDX0gpCiAKIHN0YXRpYyBpbnQKQEAgLTE5OCw2ICsyNDgsNyBAQAogX19obWFjX3NoYTFfZmluYWwoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgsIHVpbnQ4X3QgKm91dCwgc2l6ZV90ICpvdXRfbGVuKQogewogCXVuc2lnbmVkIGludCBsZW4gPSAodW5zaWduZWQgaW50KSpvdXRfbGVuOworCiAJSE1BQ19GaW5hbCgqY3R4LCBvdXQsICZsZW4pOwogCSpvdXRfbGVuID0gbGVuOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfaG1hY19wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjX3ByaXZhdGUuaAppbmRleCBlYjQ1YzRlLi4xM2E2N2Q0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjX3ByaXZhdGUuaApAQCAtMjMsMTMgKzIzLDEyIEBACiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCi0jaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAotI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCi0jZW5kaWYKLQogI2lmbmRlZiBBUkNISVZFX0hNQUNfUFJJVkFURV9IX0lOQ0xVREVECiAjZGVmaW5lIEFSQ0hJVkVfSE1BQ19QUklWQVRFX0hfSU5DTFVERUQKIAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCiAvKgogICogT24gc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFueSByZWNvZ25pemVkIGNyeXB0byBsaWJyYXJpZXMsCiAgKiB0aGUgYXJjaGl2ZV9obWFjLmMgZmlsZSBpcyBleHBlY3RlZCB0byBkZWZpbmUgbm8gdXNhYmxlIHN5bWJvbHMuCkBAIC02NCw2ICs2MywxMSBAQAogCiB9IGFyY2hpdmVfaG1hY19zaGExX2N0eDsKIAorI2VsaWYgZGVmaW5lZChIQVZFX0xJQk1CRURDUllQVE8pICYmIGRlZmluZWQoSEFWRV9NQkVEVExTX01EX0gpCisjaW5jbHVkZSA8bWJlZHRscy9tZC5oPgorCit0eXBlZGVmIG1iZWR0bHNfbWRfY29udGV4dF90IGFyY2hpdmVfaG1hY19zaGExX2N0eDsKKwogI2VsaWYgZGVmaW5lZChIQVZFX0xJQk5FVFRMRSkgJiYgZGVmaW5lZChIQVZFX05FVFRMRV9ITUFDX0gpCiAjaW5jbHVkZSA8bmV0dGxlL2htYWMuaD4KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX21hdGNoLmMKaW5kZXggZjE1MGU4Mi4uMDQ3NDdiMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9tYXRjaC5jCkBAIC05Myw2ICs5Myw5IEBACiAJLyogZXhjbHVzaW9uL2luY2x1c2lvbiBzZXQgZmxhZy4gKi8KIAlpbnQJCQkgc2V0ZmxhZzsKIAorCS8qIFJlY3Vyc2l2ZWx5IGluY2x1ZGUgZGlyZWN0b3J5IGNvbnRlbnQ/ICovCisJaW50CQkJIHJlY3Vyc2l2ZV9pbmNsdWRlOworCiAJLyoKIAkgKiBNYXRjaGluZyBmaWxlbmFtZSBwYXR0ZXJucy4KIAkgKi8KQEAgLTIyMyw2ICsyMjYsNyBAQAogCQlyZXR1cm4gKE5VTEwpOwogCWEtPmFyY2hpdmUubWFnaWMgPSBBUkNISVZFX01BVENIX01BR0lDOwogCWEtPmFyY2hpdmUuc3RhdGUgPSBBUkNISVZFX1NUQVRFX05FVzsKKwlhLT5yZWN1cnNpdmVfaW5jbHVkZSA9IDE7CiAJbWF0Y2hfbGlzdF9pbml0KCYoYS0+aW5jbHVzaW9ucykpOwogCW1hdGNoX2xpc3RfaW5pdCgmKGEtPmV4Y2x1c2lvbnMpKTsKIAlfX2FyY2hpdmVfcmJfdHJlZV9pbml0KCYoYS0+ZXhjbHVzaW9uX3RyZWUpLCAmcmJfb3BzX21icyk7CkBAIC00NzEsNiArNDc1LDI4IEBACiB9CiAKIC8qCisgKiBXaGVuIHJlY3Vyc2l2ZSBpbmNsdXNpb24gb2YgZGlyZWN0b3J5IGNvbnRlbnQgaXMgZW5hYmxlZCwKKyAqIGFuIGluY2x1c2lvbiBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhIGRpcmVjdG9yeSB3aWxsIGFsc28KKyAqIGluY2x1ZGUgZXZlcnl0aGluZyBiZW5lYXRoIHRoYXQgZGlyZWN0b3J5LiBFbmFibGVkIGJ5IGRlZmF1bHQuCisgKgorICogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBHTlUgdGFyLCBleGNsdXNpb24gcGF0dGVybnMgYWx3YXlzCisgKiBtYXRjaCBpZiBhIHN1YnNldCBvZiB0aGUgZnVsbCBwYXRjaCBtYXRjaGVzIChpLmUuLCB0aGV5IGFyZQorICogYXJlIG5vdCByb290ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCkgYW5kIHRodXMgdGhlcmUKKyAqIGlzIG5vIGNvcnJlc3BvbmRpbmcgbm9uLXJlY3Vyc2l2ZSBleGNsdXNpb24gbW9kZS4KKyAqLworaW50CithcmNoaXZlX21hdGNoX3NldF9pbmNsdXNpb25fcmVjdXJzaW9uKHN0cnVjdCBhcmNoaXZlICpfYSwgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGFyY2hpdmVfbWF0Y2ggKmE7CisKKwlhcmNoaXZlX2NoZWNrX21hZ2ljKF9hLCBBUkNISVZFX01BVENIX01BR0lDLAorCSAgICBBUkNISVZFX1NUQVRFX05FVywgImFyY2hpdmVfbWF0Y2hfc2V0X2luY2x1c2lvbl9yZWN1cnNpb24iKTsKKwlhID0gKHN0cnVjdCBhcmNoaXZlX21hdGNoICopX2E7CisJYS0+cmVjdXJzaXZlX2luY2x1ZGUgPSBlbmFibGVkOworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKKy8qCiAgKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byBnZXQgc3RhdGlzdGljIGluZm9ybWF0aW9uIGZvciBpbmNsdXNpb24gcGF0dGVybnMuCiAgKi8KIGludApAQCAtNzgxLDcgKzgwNywxMCBAQAogbWF0Y2hfcGF0aF9pbmNsdXNpb24oc3RydWN0IGFyY2hpdmVfbWF0Y2ggKmEsIHN0cnVjdCBtYXRjaCAqbSwKICAgICBpbnQgbWJzLCBjb25zdCB2b2lkICpwbikKIHsKLQlpbnQgZmxhZyA9IFBBVEhNQVRDSF9OT19BTkNIT1JfRU5EOworCS8qIFJlY3Vyc2l2ZSBvcGVyYXRpb24gcmVxdWlyZXMgb25seSBhIHByZWZpeCBtYXRjaC4gKi8KKwlpbnQgZmxhZyA9IGEtPnJlY3Vyc2l2ZV9pbmNsdWRlID8KKwkJUEFUSE1BVENIX05PX0FOQ0hPUl9FTkQgOgorCQkwOwogCWludCByOwogCiAJaWYgKG1icykgewpAQCAtMTIzMiw3ICsxMjYxLDcgQEAKIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwgRUlOVkFMLCAicGF0aG5hbWUgaXMgZW1wdHkiKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJfQotCWlmIChzdGF0KHBhdGgsICZzdCkgIT0gMCkgeworCWlmIChsYV9zdGF0KHBhdGgsICZzdCkgIT0gMCkgewogCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBlcnJubywgIkZhaWxlZCB0byBzdGF0KCkiKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9ldnBfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9ldnBfcHJpdmF0ZS5oCmluZGV4IDQzYTNjY2MuLmViYjA2NzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wZW5zc2xfZXZwX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2V2cF9wcml2YXRlLmgKQEAgLTIyLDkgKzIyLDE0IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBBUkNISVZFX09QRU5TU0xfRVZQX1BSSVZBVEVfSF9JTkNMVURFRAogI2RlZmluZSBBUkNISVZFX09QRU5TU0xfRVZQX1BSSVZBVEVfSF9JTkNMVURFRAogCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKKwogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2htYWNfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9obWFjX3ByaXZhdGUuaAppbmRleCA5MjEyNDliLi4yNWM4ZGRhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2htYWNfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wZW5zc2xfaG1hY19wcml2YXRlLmgKQEAgLTIyLDkgKzIyLDE0IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBBUkNISVZFX09QRU5TU0xfSE1BQ19QUklWQVRFX0hfSU5DTFVERUQKICNkZWZpbmUgQVJDSElWRV9PUEVOU1NMX0hNQUNfUFJJVkFURV9IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgorCiAjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcHRpb25zX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wdGlvbnNfcHJpdmF0ZS5oCmluZGV4IDZlZjAxNjUuLjlhN2Y4MDggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wdGlvbnNfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wdGlvbnNfcHJpdmF0ZS5oCkBAIC0yMyw2ICsyMyw5IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZm5kZWYgQVJDSElWRV9PUFRJT05TX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX09QVElPTlNfUFJJVkFURV9IX0lOQ0xVREVECisKICNpbmNsdWRlICJhcmNoaXZlX3BsYXRmb3JtLmgiCiBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAKQEAgLTQ1LDMgKzQ4LDQgQEAKICAgICBjb25zdCBjaGFyICptLCBjb25zdCBjaGFyICpvLCBjb25zdCBjaGFyICp2LAogICAgIG9wdGlvbl9oYW5kbGVyIHVzZV9mb3JtYXRfb3B0aW9uLCBvcHRpb25faGFuZGxlciB1c2VfZmlsdGVyX29wdGlvbik7CiAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhY2tfZGV2LmgKaW5kZXggNzQ5ZmQzZC4uZWFmMjNlMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYWNrX2Rldi5oCkBAIC0zMSw4ICszMSw4IEBACiAKIC8qIE9yaWdpbmFsbHkgZnJvbSBOZXRCU0QncyBta25vZCg4KSBzb3VyY2UuICovCiAKLSNpZm5kZWYJX1BBQ0tfREVWX0gKLSNkZWZpbmUJX1BBQ0tfREVWX0gKKyNpZm5kZWYJQVJDSElWRV9QQUNLX0RFVl9ICisjZGVmaW5lCUFSQ0hJVkVfUEFDS19ERVZfSAogCiB0eXBlZGVmCWRldl90IHBhY2tfdChpbnQsIHVuc2lnbmVkIGxvbmcgW10sIGNvbnN0IGNoYXIgKiopOwogCkBAIC00Niw0ICs0Niw0IEBACiAJCQkJCSAoKCh5KSA8PCAxMikgJiAweGZmZjAwMDAwKSB8IFwKIAkJCQkJICgoKHkpIDw8ICAwKSAmIDB4MDAwMDAwZmYpKSkKIAotI2VuZGlmCS8qIF9QQUNLX0RFVl9IICovCisjZW5kaWYJLyogQVJDSElWRV9QQUNLX0RFVl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYXRobWF0Y2guaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhdGhtYXRjaC5oCmluZGV4IGU2OTAxNzcuLjk5OTUxNDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhdGhtYXRjaC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhdGhtYXRjaC5oCkBAIC0yNiwxNSArMjYsMTUgQEAKICAqICRGcmVlQlNEJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9QQVRITUFUQ0hfSAorI2RlZmluZSBBUkNISVZFX1BBVEhNQVRDSF9ICisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUCiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9QQVRITUFUQ0hfSAotI2RlZmluZSBBUkNISVZFX1BBVEhNQVRDSF9ICi0KIC8qIERvbid0IGFuY2hvciBhdCBiZWdpbm5pbmcgdW5sZXNzIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICJeIiAqLwogI2RlZmluZSBQQVRITUFUQ0hfTk9fQU5DSE9SX1NUQVJUCTEKIC8qIERvbid0IGFuY2hvciBhdCBlbmQgdW5sZXNzIHRoZSBwYXR0ZXJuIGVuZHMgd2l0aCAiJCIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybS5oCmluZGV4IGUxNjFlNjQuLjMyNzM5MzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm0uaApAQCAtNjksNiArNjksOCBAQAogICogZWl0aGVyIFdpbmRvd3Mgb3IgUG9zaXggQVBJcy4gKi8KICNpZiAoZGVmaW5lZChfX1dJTjMyX18pIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzIpKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQogI2luY2x1ZGUgImFyY2hpdmVfd2luZG93cy5oIgorI2Vsc2UKKyNkZWZpbmUgbGFfc3RhdChwYXRoLHN0cmVmKQkJc3RhdChwYXRoLHN0cmVmKQogI2VuZGlmCiAKIC8qCkBAIC0xMDUsNTYgKzEwNyw0NCBAQAogCiAvKiBCb3JsYW5kIHdhcm5zIGFib3V0IGl0cyBvd24gY29uc3RhbnRzISAgKi8KICNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgaWYgSEFWRV9ERUNMX1VJTlQ2NF9NQVgKLSMgIHVuZGVmCVVJTlQ2NF9NQVgKLSMgIHVuZGVmCUhBVkVfREVDTF9VSU5UNjRfTUFYCi0jIGVuZGlmCi0jIGlmIEhBVkVfREVDTF9VSU5UNjRfTUlOCi0jICB1bmRlZglVSU5UNjRfTUlOCi0jICB1bmRlZglIQVZFX0RFQ0xfVUlOVDY0X01JTgotIyBlbmRpZgotIyBpZiBIQVZFX0RFQ0xfSU5UNjRfTUFYCi0jICB1bmRlZglJTlQ2NF9NQVgKLSMgIHVuZGVmCUhBVkVfREVDTF9JTlQ2NF9NQVgKLSMgZW5kaWYKLSMgaWYgSEFWRV9ERUNMX0lOVDY0X01JTgotIyAgdW5kZWYJSU5UNjRfTUlOCi0jICB1bmRlZglIQVZFX0RFQ0xfSU5UNjRfTUlOCi0jIGVuZGlmCisjIHVuZGVmCVVJTlQ2NF9NQVgKKyMgdW5kZWYJVUlOVDY0X01JTgorIyB1bmRlZglJTlQ2NF9NQVgKKyMgdW5kZWYJSU5UNjRfTUlOCiAjZW5kaWYKIAogLyogU29tZSBwbGF0Zm9ybXMgbGFjayB0aGUgc3RhbmRhcmQgKl9NQVggZGVmaW5pdGlvbnMuICovCi0jaWYgIUhBVkVfREVDTF9TSVpFX01BWAorI2lmbmRlZiBTSVpFX01BWAogI2RlZmluZQlTSVpFX01BWCAofihzaXplX3QpMCkKICNlbmRpZgotI2lmICFIQVZFX0RFQ0xfU1NJWkVfTUFYCisjaWZuZGVmIFNTSVpFX01BWAogI2RlZmluZQlTU0laRV9NQVggKChzc2l6ZV90KShTSVpFX01BWCA+PiAxKSkKICNlbmRpZgotI2lmICFIQVZFX0RFQ0xfVUlOVDMyX01BWAorI2lmbmRlZiBVSU5UMzJfTUFYCiAjZGVmaW5lCVVJTlQzMl9NQVggKH4odWludDMyX3QpMCkKICNlbmRpZgotI2lmICFIQVZFX0RFQ0xfSU5UMzJfTUFYCisjaWZuZGVmIElOVDMyX01BWAogI2RlZmluZQlJTlQzMl9NQVggKChpbnQzMl90KShVSU5UMzJfTUFYID4+IDEpKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9JTlQzMl9NSU4KKyNpZm5kZWYgSU5UMzJfTUlOCiAjZGVmaW5lCUlOVDMyX01JTiAoKGludDMyX3QpKH5JTlQzMl9NQVgpKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9VSU5UNjRfTUFYCisjaWZuZGVmIFVJTlQ2NF9NQVgKICNkZWZpbmUJVUlOVDY0X01BWCAofih1aW50NjRfdCkwKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9JTlQ2NF9NQVgKKyNpZm5kZWYgSU5UNjRfTUFYCiAjZGVmaW5lCUlOVDY0X01BWCAoKGludDY0X3QpKFVJTlQ2NF9NQVggPj4gMSkpCiAjZW5kaWYKLSNpZiAhSEFWRV9ERUNMX0lOVDY0X01JTgorI2lmbmRlZiBJTlQ2NF9NSU4KICNkZWZpbmUJSU5UNjRfTUlOICgoaW50NjRfdCkofklOVDY0X01BWCkpCiAjZW5kaWYKLSNpZiAhSEFWRV9ERUNMX1VJTlRNQVhfTUFYCisjaWZuZGVmIFVJTlRNQVhfTUFYCiAjZGVmaW5lCVVJTlRNQVhfTUFYICh+KHVpbnRtYXhfdCkwKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9JTlRNQVhfTUFYCisjaWZuZGVmIElOVE1BWF9NQVgKICNkZWZpbmUJSU5UTUFYX01BWCAoKGludG1heF90KShVSU5UTUFYX01BWCA+PiAxKSkKICNlbmRpZgotI2lmICFIQVZFX0RFQ0xfSU5UTUFYX01JTgorI2lmbmRlZiBJTlRNQVhfTUlOCiAjZGVmaW5lCUlOVE1BWF9NSU4gKChpbnRtYXhfdCkofklOVE1BWF9NQVgpKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX2FjbC5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1fYWNsLmgKaW5kZXggMzQ5OGY3OC4uMjY0ZTZkZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1fYWNsLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1fYWNsLmgKQEAgLTMwLDYgKzMwLDEyIEBACiAjaWZuZGVmIEFSQ0hJVkVfUExBVEZPUk1fQUNMX0hfSU5DTFVERUQKICNkZWZpbmUgQVJDSElWRV9QTEFURk9STV9BQ0xfSF9JTkNMVURFRAogCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfVEVTVF9DT01NT04KKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCisjZW5kaWYKKwogLyoKICAqIERldGVybWluZSB3aGF0IEFDTCB0eXBlcyBhcmUgc3VwcG9ydGVkCiAgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX3hhdHRyLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV94YXR0ci5oCmluZGV4IDRlZGZlY2YuLmFkNGI5MGEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX3hhdHRyLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1feGF0dHIuaApAQCAtMzAsNiArMzAsMTIgQEAKICNpZm5kZWYgQVJDSElWRV9QTEFURk9STV9YQVRUUl9IX0lOQ0xVREVECiAjZGVmaW5lIEFSQ0hJVkVfUExBVEZPUk1fWEFUVFJfSF9JTkNMVURFRAogCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfVEVTVF9DT01NT04KKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCisjZW5kaWYKKwogLyoKICAqIERldGVybWluZSBpZiB3ZSBzdXBwb3J0IGV4dGVuZGVkIGF0dHJpYnV0ZXMKICAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDcuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3LmMKaW5kZXggZDBiYWNjNi4uNDAyOTM5NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDcuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kNy5jCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogCiBzdGF0aWMgdm9pZCBSYW5nZUVuY19FbmNvZGUoQ1BwbWQ3el9SYW5nZUVuYyAqcCwgVUludDMyIHN0YXJ0LCBVSW50MzIgc2l6ZSwgVUludDMyIHRvdGFsKQogewotICBwLT5Mb3cgKz0gc3RhcnQgKiAocC0+UmFuZ2UgLz0gdG90YWwpOworICBwLT5Mb3cgKz0gKFVJbnQ2NClzdGFydCAqIChVSW50NjQpKHAtPlJhbmdlIC89IHRvdGFsKTsKICAgcC0+UmFuZ2UgKj0gc2l6ZTsKICAgd2hpbGUgKHAtPlJhbmdlIDwga1RvcFZhbHVlKQogICB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kN19wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kN19wcml2YXRlLmgKaW5kZXggNTc3ZDZmYi4uNzFiOTU0NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDdfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3X3ByaXZhdGUuaApAQCAtNiwxMyArNiwxMyBAQAogb2YgUmFuZ2VDb2RlciBmcm9tIDd6LCBpbnN0ZWFkIG9mIFJhbmdlQ29kZXIgZnJvbSBvcmlnaW5hbCBQUE1kIHZhci5ILgogSWYgeW91IG5lZWQgdGhlIGNvbXBhdGliaWxpdHkgd2l0aCBvcmlnaW5hbCBQUE1kIHZhci5ILCB5b3UgY2FuIHVzZSBleHRlcm5hbCBSYW5nZURlY29kZXIgKi8KIAorI2lmbmRlZiBBUkNISVZFX1BQTUQ3X1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1BQTUQ3X1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1BQTUQ3X1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX1BQTUQ3X1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcG1kX3ByaXZhdGUuaCIKIAogI2RlZmluZSBQUE1EN19NSU5fT1JERVIgMgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDguYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3NzkzOQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ4LmMKQEAgLTAsMCArMSwxMjg3IEBACisvKiBQcG1kOC5jIC0tIFBQTWRJIGNvZGVjCisyMDE2LTA1LTIxIDogSWdvciBQYXZsb3YgOiBQdWJsaWMgZG9tYWluCitUaGlzIGNvZGUgaXMgYmFzZWQgb24gUFBNZCB2YXIuSSAoMjAwMik6IERtaXRyeSBTaGthcmluIDogUHVibGljIGRvbWFpbiAqLworCisjaW5jbHVkZSAiYXJjaGl2ZV9wbGF0Zm9ybS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJhcmNoaXZlX3BwbWQ4X3ByaXZhdGUuaCIKKworY29uc3QgQnl0ZSBQUE1EOF9rRXhwRXNjYXBlWzE2XSA9IHsgMjUsIDE0LCA5LCA3LCA1LCA1LCA0LCA0LCA0LCAzLCAzLCAzLCAyLCAyLCAyLCAyIH07CitzdGF0aWMgY29uc3QgVUludDE2IGtJbml0QmluRXNjW10gPSB7IDB4M0NERCwgMHgxRjNGLCAweDU5QkYsIDB4NDhGMywgMHg2NEExLCAweDVBQkMsIDB4NjYzMiwgMHg2MDUxfTsKKworI2RlZmluZSBNQVhfRlJFUSAxMjQKKyNkZWZpbmUgVU5JVF9TSVpFIDEyCisKKyNkZWZpbmUgVTJCKG51KSAoKFVJbnQzMikobnUpICogVU5JVF9TSVpFKQorI2RlZmluZSBVMkkobnUpIChwLT5Vbml0czJJbmR4WyhudSkgLSAxXSkKKyNkZWZpbmUgSTJVKGluZHgpIChwLT5JbmR4MlVuaXRzW2luZHhdKQorCisjaWZkZWYgUFBNRF8zMkJJVAorICAjZGVmaW5lIFJFRihwdHIpIChwdHIpCisjZWxzZQorICAjZGVmaW5lIFJFRihwdHIpICgoVUludDMyKSgoQnl0ZSAqKShwdHIpIC0gKHApLT5CYXNlKSkKKyNlbmRpZgorCisjZGVmaW5lIFNUQVRTX1JFRihwdHIpICgoQ1BwbWRfU3RhdGVfUmVmKVJFRihwdHIpKQorCisjZGVmaW5lIENUWChyZWYpICgoQ1BwbWQ4X0NvbnRleHQgKilQcG1kOF9HZXRDb250ZXh0KHAsIHJlZikpCisjZGVmaW5lIFNUQVRTKGN0eCkgUHBtZDhfR2V0U3RhdHMocCwgY3R4KQorI2RlZmluZSBPTkVfU1RBVEUoY3R4KSBQcG1kOENvbnRleHRfT25lU3RhdGUoY3R4KQorI2RlZmluZSBTVUZGSVgoY3R4KSBDVFgoKGN0eCktPlN1ZmZpeCkKKworI2RlZmluZSBrVG9wICgxIDw8IDI0KQorI2RlZmluZSBrQm90ICgxIDw8IDE1KQorCit0eXBlZGVmIENQcG1kOF9Db250ZXh0ICogQ1RYX1BUUjsKKworc3RydWN0IENQcG1kOF9Ob2RlXzsKKwordHlwZWRlZgorICAjaWZkZWYgUFBNRF8zMkJJVAorICAgIHN0cnVjdCBDUHBtZDhfTm9kZV8gKgorICAjZWxzZQorICAgIFVJbnQzMgorICAjZW5kaWYKKyAgQ1BwbWQ4X05vZGVfUmVmOworCit0eXBlZGVmIHN0cnVjdCBDUHBtZDhfTm9kZV8KK3sKKyAgVUludDMyIFN0YW1wOworICBDUHBtZDhfTm9kZV9SZWYgTmV4dDsKKyAgVUludDMyIE5VOworfSBDUHBtZDhfTm9kZTsKKworI2lmZGVmIFBQTURfMzJCSVQKKyAgI2RlZmluZSBOT0RFKHB0cikgKHB0cikKKyNlbHNlCisgICNkZWZpbmUgTk9ERShvZmZzKSAoKENQcG1kOF9Ob2RlICopKHAtPkJhc2UgKyAob2ZmcykpKQorI2VuZGlmCisKKyNkZWZpbmUgRU1QVFlfTk9ERSAweEZGRkZGRkZGCisKK3ZvaWQgUHBtZDhfQ29uc3RydWN0KENQcG1kOCAqcCkKK3sKKyAgdW5zaWduZWQgaSwgaywgbTsKKworICBwLT5CYXNlID0gMDsKKworICBmb3IgKGkgPSAwLCBrID0gMDsgaSA8IFBQTURfTlVNX0lOREVYRVM7IGkrKykKKyAgeworICAgIHVuc2lnbmVkIHN0ZXAgPSAoaSA+PSAxMiA/IDQgOiAoaSA+PiAyKSArIDEpOworICAgIGRvIHsgcC0+VW5pdHMySW5keFtrKytdID0gKEJ5dGUpaTsgfSB3aGlsZSAoLS1zdGVwKTsKKyAgICBwLT5JbmR4MlVuaXRzW2ldID0gKEJ5dGUpazsKKyAgfQorCisgIHAtPk5TMkJTSW5keFswXSA9ICgwIDw8IDEpOworICBwLT5OUzJCU0luZHhbMV0gPSAoMSA8PCAxKTsKKyAgbWVtc2V0KHAtPk5TMkJTSW5keCArIDIsICgyIDw8IDEpLCA5KTsKKyAgbWVtc2V0KHAtPk5TMkJTSW5keCArIDExLCAoMyA8PCAxKSwgMjU2IC0gMTEpOworCisgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisgICAgcC0+TlMySW5keFtpXSA9IChCeXRlKWk7CisgIGZvciAobSA9IGksIGsgPSAxOyBpIDwgMjYwOyBpKyspCisgIHsKKyAgICBwLT5OUzJJbmR4W2ldID0gKEJ5dGUpbTsKKyAgICBpZiAoLS1rID09IDApCisgICAgICBrID0gKCsrbSkgLSA0OworICB9Cit9CisKK3ZvaWQgUHBtZDhfRnJlZShDUHBtZDggKnApCit7CisgIGZyZWUocC0+QmFzZSk7CisgIHAtPlNpemUgPSAwOworICBwLT5CYXNlID0gMDsKK30KKworQm9vbCBQcG1kOF9BbGxvYyhDUHBtZDggKnAsIFVJbnQzMiBzaXplKQoreworICBpZiAocC0+QmFzZSA9PSAwIHx8IHAtPlNpemUgIT0gc2l6ZSkKKyAgeworICAgIFBwbWQ4X0ZyZWUocCk7CisgICAgcC0+QWxpZ25PZmZzZXQgPQorICAgICAgI2lmZGVmIFBQTURfMzJCSVQKKyAgICAgICAgKDQgLSBzaXplKSAmIDM7CisgICAgICAjZWxzZQorICAgICAgICA0IC0gKHNpemUgJiAzKTsKKyAgICAgICNlbmRpZgorICAgIGlmICgocC0+QmFzZSA9IChCeXRlICopbWFsbG9jKHAtPkFsaWduT2Zmc2V0ICsgc2l6ZSkpID09IDApCisgICAgICByZXR1cm4gRmFsc2U7CisgICAgcC0+U2l6ZSA9IHNpemU7CisgIH0KKyAgcmV0dXJuIFRydWU7Cit9CisKK3N0YXRpYyB2b2lkIEluc2VydE5vZGUoQ1BwbWQ4ICpwLCB2b2lkICpub2RlLCB1bnNpZ25lZCBpbmR4KQoreworICAoKENQcG1kOF9Ob2RlICopbm9kZSktPlN0YW1wID0gRU1QVFlfTk9ERTsKKyAgKChDUHBtZDhfTm9kZSAqKW5vZGUpLT5OZXh0ID0gKENQcG1kOF9Ob2RlX1JlZilwLT5GcmVlTGlzdFtpbmR4XTsKKyAgKChDUHBtZDhfTm9kZSAqKW5vZGUpLT5OVSA9IEkyVShpbmR4KTsKKyAgcC0+RnJlZUxpc3RbaW5keF0gPSBSRUYobm9kZSk7CisgIHAtPlN0YW1wc1tpbmR4XSsrOworfQorCitzdGF0aWMgdm9pZCAqUmVtb3ZlTm9kZShDUHBtZDggKnAsIHVuc2lnbmVkIGluZHgpCit7CisgIENQcG1kOF9Ob2RlICpub2RlID0gTk9ERSgoQ1BwbWQ4X05vZGVfUmVmKXAtPkZyZWVMaXN0W2luZHhdKTsKKyAgcC0+RnJlZUxpc3RbaW5keF0gPSBub2RlLT5OZXh0OworICBwLT5TdGFtcHNbaW5keF0tLTsKKyAgcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyB2b2lkIFNwbGl0QmxvY2soQ1BwbWQ4ICpwLCB2b2lkICpwdHIsIHVuc2lnbmVkIG9sZEluZHgsIHVuc2lnbmVkIG5ld0luZHgpCit7CisgIHVuc2lnbmVkIGksIG51ID0gSTJVKG9sZEluZHgpIC0gSTJVKG5ld0luZHgpOworICBwdHIgPSAoQnl0ZSAqKXB0ciArIFUyQihJMlUobmV3SW5keCkpOworICBpZiAoSTJVKGkgPSBVMkkobnUpKSAhPSBudSkKKyAgeworICAgIHVuc2lnbmVkIGsgPSBJMlUoLS1pKTsKKyAgICBJbnNlcnROb2RlKHAsICgoQnl0ZSAqKXB0cikgKyBVMkIoayksIG51IC0gayAtIDEpOworICB9CisgIEluc2VydE5vZGUocCwgcHRyLCBpKTsKK30KKworc3RhdGljIHZvaWQgR2x1ZUZyZWVCbG9ja3MoQ1BwbWQ4ICpwKQoreworICBDUHBtZDhfTm9kZV9SZWYgaGVhZCA9IDA7CisgIENQcG1kOF9Ob2RlX1JlZiAqcHJldiA9ICZoZWFkOworICB1bnNpZ25lZCBpOworCisgIHAtPkdsdWVDb3VudCA9IDEgPDwgMTM7CisgIG1lbXNldChwLT5TdGFtcHMsIDAsIHNpemVvZihwLT5TdGFtcHMpKTsKKyAgCisgIC8qIE9yZGVyLTAgY29udGV4dCBpcyBhbHdheXMgYXQgdG9wIFVOSVQsIHNvIHdlIGRvbid0IG5lZWQgZ3VhcmQgTk9ERSBhdCB0aGUgZW5kLgorICAgICBBbGwgYmxvY2tzIHVwIHRvIHAtPkxvVW5pdCBjYW4gYmUgZnJlZSwgc28gd2UgbmVlZCBndWFyZCBOT0RFIGF0IExvVW5pdC4gKi8KKyAgaWYgKHAtPkxvVW5pdCAhPSBwLT5IaVVuaXQpCisgICAgKChDUHBtZDhfTm9kZSAqKXAtPkxvVW5pdCktPlN0YW1wID0gMDsKKworICAvKiBHbHVlIGZyZWUgYmxvY2tzICovCisgIGZvciAoaSA9IDA7IGkgPCBQUE1EX05VTV9JTkRFWEVTOyBpKyspCisgIHsKKyAgICBDUHBtZDhfTm9kZV9SZWYgbmV4dCA9IChDUHBtZDhfTm9kZV9SZWYpcC0+RnJlZUxpc3RbaV07CisgICAgcC0+RnJlZUxpc3RbaV0gPSAwOworICAgIHdoaWxlIChuZXh0ICE9IDApCisgICAgeworICAgICAgQ1BwbWQ4X05vZGUgKm5vZGUgPSBOT0RFKG5leHQpOworICAgICAgaWYgKG5vZGUtPk5VICE9IDApCisgICAgICB7CisgICAgICAgIENQcG1kOF9Ob2RlICpub2RlMjsKKyAgICAgICAgKnByZXYgPSBuZXh0OworICAgICAgICBwcmV2ID0gJihub2RlLT5OZXh0KTsKKyAgICAgICAgd2hpbGUgKChub2RlMiA9IG5vZGUgKyBub2RlLT5OVSktPlN0YW1wID09IEVNUFRZX05PREUpCisgICAgICAgIHsKKyAgICAgICAgICBub2RlLT5OVSArPSBub2RlMi0+TlU7CisgICAgICAgICAgbm9kZTItPk5VID0gMDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgbmV4dCA9IG5vZGUtPk5leHQ7CisgICAgfQorICB9CisgICpwcmV2ID0gMDsKKyAgCisgIC8qIEZpbGwgbGlzdHMgb2YgZnJlZSBibG9ja3MgKi8KKyAgd2hpbGUgKGhlYWQgIT0gMCkKKyAgeworICAgIENQcG1kOF9Ob2RlICpub2RlID0gTk9ERShoZWFkKTsKKyAgICB1bnNpZ25lZCBudTsKKyAgICBoZWFkID0gbm9kZS0+TmV4dDsKKyAgICBudSA9IG5vZGUtPk5VOworICAgIGlmIChudSA9PSAwKQorICAgICAgY29udGludWU7CisgICAgZm9yICg7IG51ID4gMTI4OyBudSAtPSAxMjgsIG5vZGUgKz0gMTI4KQorICAgICAgSW5zZXJ0Tm9kZShwLCBub2RlLCBQUE1EX05VTV9JTkRFWEVTIC0gMSk7CisgICAgaWYgKEkyVShpID0gVTJJKG51KSkgIT0gbnUpCisgICAgeworICAgICAgdW5zaWduZWQgayA9IEkyVSgtLWkpOworICAgICAgSW5zZXJ0Tm9kZShwLCBub2RlICsgaywgbnUgLSBrIC0gMSk7CisgICAgfQorICAgIEluc2VydE5vZGUocCwgbm9kZSwgaSk7CisgIH0KK30KKworc3RhdGljIHZvaWQgKkFsbG9jVW5pdHNSYXJlKENQcG1kOCAqcCwgdW5zaWduZWQgaW5keCkKK3sKKyAgdW5zaWduZWQgaTsKKyAgdm9pZCAqcmV0VmFsOworICBpZiAocC0+R2x1ZUNvdW50ID09IDApCisgIHsKKyAgICBHbHVlRnJlZUJsb2NrcyhwKTsKKyAgICBpZiAocC0+RnJlZUxpc3RbaW5keF0gIT0gMCkKKyAgICAgIHJldHVybiBSZW1vdmVOb2RlKHAsIGluZHgpOworICB9CisgIGkgPSBpbmR4OworICBkbworICB7CisgICAgaWYgKCsraSA9PSBQUE1EX05VTV9JTkRFWEVTKQorICAgIHsKKyAgICAgIFVJbnQzMiBudW1CeXRlcyA9IFUyQihJMlUoaW5keCkpOworICAgICAgcC0+R2x1ZUNvdW50LS07CisgICAgICByZXR1cm4gKChVSW50MzIpKHAtPlVuaXRzU3RhcnQgLSBwLT5UZXh0KSA+IG51bUJ5dGVzKSA/IChwLT5Vbml0c1N0YXJ0IC09IG51bUJ5dGVzKSA6IChOVUxMKTsKKyAgICB9CisgIH0KKyAgd2hpbGUgKHAtPkZyZWVMaXN0W2ldID09IDApOworICByZXRWYWwgPSBSZW1vdmVOb2RlKHAsIGkpOworICBTcGxpdEJsb2NrKHAsIHJldFZhbCwgaSwgaW5keCk7CisgIHJldHVybiByZXRWYWw7Cit9CisKK3N0YXRpYyB2b2lkICpBbGxvY1VuaXRzKENQcG1kOCAqcCwgdW5zaWduZWQgaW5keCkKK3sKKyAgVUludDMyIG51bUJ5dGVzOworICBpZiAocC0+RnJlZUxpc3RbaW5keF0gIT0gMCkKKyAgICByZXR1cm4gUmVtb3ZlTm9kZShwLCBpbmR4KTsKKyAgbnVtQnl0ZXMgPSBVMkIoSTJVKGluZHgpKTsKKyAgaWYgKG51bUJ5dGVzIDw9IChVSW50MzIpKHAtPkhpVW5pdCAtIHAtPkxvVW5pdCkpCisgIHsKKyAgICB2b2lkICpyZXRWYWwgPSBwLT5Mb1VuaXQ7CisgICAgcC0+TG9Vbml0ICs9IG51bUJ5dGVzOworICAgIHJldHVybiByZXRWYWw7CisgIH0KKyAgcmV0dXJuIEFsbG9jVW5pdHNSYXJlKHAsIGluZHgpOworfQorCisjZGVmaW5lIE15TWVtMTJDcHkoZGVzdCwgc3JjLCBudW0pIFwKKyAgeyBVSW50MzIgKmQgPSAoVUludDMyICopZGVzdDsgY29uc3QgVUludDMyICp6ID0gKGNvbnN0IFVJbnQzMiAqKXNyYzsgVUludDMyIG4gPSBudW07IFwKKyAgICBkbyB7IGRbMF0gPSB6WzBdOyBkWzFdID0gelsxXTsgZFsyXSA9IHpbMl07IHogKz0gMzsgZCArPSAzOyB9IHdoaWxlICgtLW4pOyB9CisKK3N0YXRpYyB2b2lkICpTaHJpbmtVbml0cyhDUHBtZDggKnAsIHZvaWQgKm9sZFB0ciwgdW5zaWduZWQgb2xkTlUsIHVuc2lnbmVkIG5ld05VKQoreworICB1bnNpZ25lZCBpMCA9IFUySShvbGROVSk7CisgIHVuc2lnbmVkIGkxID0gVTJJKG5ld05VKTsKKyAgaWYgKGkwID09IGkxKQorICAgIHJldHVybiBvbGRQdHI7CisgIGlmIChwLT5GcmVlTGlzdFtpMV0gIT0gMCkKKyAgeworICAgIHZvaWQgKnB0ciA9IFJlbW92ZU5vZGUocCwgaTEpOworICAgIE15TWVtMTJDcHkocHRyLCBvbGRQdHIsIG5ld05VKTsKKyAgICBJbnNlcnROb2RlKHAsIG9sZFB0ciwgaTApOworICAgIHJldHVybiBwdHI7CisgIH0KKyAgU3BsaXRCbG9jayhwLCBvbGRQdHIsIGkwLCBpMSk7CisgIHJldHVybiBvbGRQdHI7Cit9CisKK3N0YXRpYyB2b2lkIEZyZWVVbml0cyhDUHBtZDggKnAsIHZvaWQgKnB0ciwgdW5zaWduZWQgbnUpCit7CisgIEluc2VydE5vZGUocCwgcHRyLCBVMkkobnUpKTsKK30KKworc3RhdGljIHZvaWQgU3BlY2lhbEZyZWVVbml0KENQcG1kOCAqcCwgdm9pZCAqcHRyKQoreworICBpZiAoKEJ5dGUgKilwdHIgIT0gcC0+VW5pdHNTdGFydCkKKyAgICBJbnNlcnROb2RlKHAsIHB0ciwgMCk7CisgIGVsc2UKKyAgeworICAgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAgICooVUludDMyICopcHRyID0gRU1QVFlfTk9ERTsgLyogaXQncyB1c2VkIGZvciAoRmxhZ3MgPT0gMHhGRikgY2hlY2sgaW4gUmVtb3ZlQmluQ29udGV4dHMgKi8KKyAgICAjZW5kaWYKKyAgICBwLT5Vbml0c1N0YXJ0ICs9IFVOSVRfU0laRTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAqTW92ZVVuaXRzVXAoQ1BwbWQ4ICpwLCB2b2lkICpvbGRQdHIsIHVuc2lnbmVkIG51KQoreworICB1bnNpZ25lZCBpbmR4ID0gVTJJKG51KTsKKyAgdm9pZCAqcHRyOworICBpZiAoKEJ5dGUgKilvbGRQdHIgPiBwLT5Vbml0c1N0YXJ0ICsgMTYgKiAxMDI0IHx8IFJFRihvbGRQdHIpID4gcC0+RnJlZUxpc3RbaW5keF0pCisgICAgcmV0dXJuIG9sZFB0cjsKKyAgcHRyID0gUmVtb3ZlTm9kZShwLCBpbmR4KTsKKyAgTXlNZW0xMkNweShwdHIsIG9sZFB0ciwgbnUpOworICBpZiAoKEJ5dGUqKW9sZFB0ciAhPSBwLT5Vbml0c1N0YXJ0KQorICAgIEluc2VydE5vZGUocCwgb2xkUHRyLCBpbmR4KTsKKyAgZWxzZQorICAgIHAtPlVuaXRzU3RhcnQgKz0gVTJCKEkyVShpbmR4KSk7CisgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkIEV4cGFuZFRleHRBcmVhKENQcG1kOCAqcCkKK3sKKyAgVUludDMyIGNvdW50W1BQTURfTlVNX0lOREVYRVNdOworICB1bnNpZ25lZCBpOworICBtZW1zZXQoY291bnQsIDAsIHNpemVvZihjb3VudCkpOworICBpZiAocC0+TG9Vbml0ICE9IHAtPkhpVW5pdCkKKyAgICAoKENQcG1kOF9Ob2RlICopcC0+TG9Vbml0KS0+U3RhbXAgPSAwOworICAKKyAgeworICAgIENQcG1kOF9Ob2RlICpub2RlID0gKENQcG1kOF9Ob2RlICopcC0+VW5pdHNTdGFydDsKKyAgICBmb3IgKDsgbm9kZS0+U3RhbXAgPT0gRU1QVFlfTk9ERTsgbm9kZSArPSBub2RlLT5OVSkKKyAgICB7CisgICAgICBub2RlLT5TdGFtcCA9IDA7CisgICAgICBjb3VudFtVMkkobm9kZS0+TlUpXSsrOworICAgIH0KKyAgICBwLT5Vbml0c1N0YXJ0ID0gKEJ5dGUgKilub2RlOworICB9CisgIAorICBmb3IgKGkgPSAwOyBpIDwgUFBNRF9OVU1fSU5ERVhFUzsgaSsrKQorICB7CisgICAgQ1BwbWQ4X05vZGVfUmVmICpuZXh0ID0gKENQcG1kOF9Ob2RlX1JlZiAqKSZwLT5GcmVlTGlzdFtpXTsKKyAgICB3aGlsZSAoY291bnRbaV0gIT0gMCkKKyAgICB7CisgICAgICBDUHBtZDhfTm9kZSAqbm9kZSA9IE5PREUoKm5leHQpOworICAgICAgd2hpbGUgKG5vZGUtPlN0YW1wID09IDApCisgICAgICB7CisgICAgICAgICpuZXh0ID0gbm9kZS0+TmV4dDsKKyAgICAgICAgbm9kZSA9IE5PREUoKm5leHQpOworICAgICAgICBwLT5TdGFtcHNbaV0tLTsKKyAgICAgICAgaWYgKC0tY291bnRbaV0gPT0gMCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG5leHQgPSAmbm9kZS0+TmV4dDsKKyAgICB9CisgIH0KK30KKworI2RlZmluZSBTVUNDRVNTT1IocCkgKChDUHBtZF9Wb2lkX1JlZikoKHApLT5TdWNjZXNzb3JMb3cgfCAoKFVJbnQzMikocCktPlN1Y2Nlc3NvckhpZ2ggPDwgMTYpKSkKKworc3RhdGljIHZvaWQgU2V0U3VjY2Vzc29yKENQcG1kX1N0YXRlICpwLCBDUHBtZF9Wb2lkX1JlZiB2KQoreworICAocCktPlN1Y2Nlc3NvckxvdyA9IChVSW50MTYpKChVSW50MzIpKHYpICYgMHhGRkZGKTsKKyAgKHApLT5TdWNjZXNzb3JIaWdoID0gKFVJbnQxNikoKChVSW50MzIpKHYpID4+IDE2KSAmIDB4RkZGRik7Cit9CisKKyNkZWZpbmUgUkVTRVRfVEVYVChvZmZzKSB7IHAtPlRleHQgPSBwLT5CYXNlICsgcC0+QWxpZ25PZmZzZXQgKyAob2Zmcyk7IH0KKworc3RhdGljIHZvaWQgUmVzdGFydE1vZGVsKENQcG1kOCAqcCkKK3sKKyAgdW5zaWduZWQgaSwgaywgbSwgcjsKKworICBtZW1zZXQocC0+RnJlZUxpc3QsIDAsIHNpemVvZihwLT5GcmVlTGlzdCkpOworICBtZW1zZXQocC0+U3RhbXBzLCAwLCBzaXplb2YocC0+U3RhbXBzKSk7CisgIFJFU0VUX1RFWFQoMCk7CisgIHAtPkhpVW5pdCA9IHAtPlRleHQgKyBwLT5TaXplOworICBwLT5Mb1VuaXQgPSBwLT5Vbml0c1N0YXJ0ID0gcC0+SGlVbml0IC0gcC0+U2l6ZSAvIDggLyBVTklUX1NJWkUgKiA3ICogVU5JVF9TSVpFOworICBwLT5HbHVlQ291bnQgPSAwOworCisgIHAtPk9yZGVyRmFsbCA9IHAtPk1heE9yZGVyOworICBwLT5SdW5MZW5ndGggPSBwLT5Jbml0UkwgPSAtKEludDMyKSgocC0+TWF4T3JkZXIgPCAxMikgPyBwLT5NYXhPcmRlciA6IDEyKSAtIDE7CisgIHAtPlByZXZTdWNjZXNzID0gMDsKKworICBwLT5NaW5Db250ZXh0ID0gcC0+TWF4Q29udGV4dCA9IChDVFhfUFRSKShwLT5IaVVuaXQgLT0gVU5JVF9TSVpFKTsgLyogQWxsb2NDb250ZXh0KHApOyAqLworICBwLT5NaW5Db250ZXh0LT5TdWZmaXggPSAwOworICBwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyA9IDI1NTsKKyAgcC0+TWluQ29udGV4dC0+RmxhZ3MgPSAwOworICBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSA9IDI1NiArIDE7CisgIHAtPkZvdW5kU3RhdGUgPSAoQ1BwbWRfU3RhdGUgKilwLT5Mb1VuaXQ7IC8qIEFsbG9jVW5pdHMocCwgUFBNRF9OVU1fSU5ERVhFUyAtIDEpOyAqLworICBwLT5Mb1VuaXQgKz0gVTJCKDI1NiAvIDIpOworICBwLT5NaW5Db250ZXh0LT5TdGF0cyA9IFJFRihwLT5Gb3VuZFN0YXRlKTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICB7CisgICAgQ1BwbWRfU3RhdGUgKnMgPSAmcC0+Rm91bmRTdGF0ZVtpXTsKKyAgICBzLT5TeW1ib2wgPSAoQnl0ZSlpOworICAgIHMtPkZyZXEgPSAxOworICAgIFNldFN1Y2Nlc3NvcihzLCAwKTsKKyAgfQorCisgIGZvciAoaSA9IG0gPSAwOyBtIDwgMjU7IG0rKykKKyAgeworICAgIHdoaWxlIChwLT5OUzJJbmR4W2ldID09IG0pCisgICAgICBpKys7CisgICAgZm9yIChrID0gMDsgayA8IDg7IGsrKykKKyAgICB7CisgICAgICBVSW50MTYgdmFsID0gKFVJbnQxNikoUFBNRF9CSU5fU0NBTEUgLSBrSW5pdEJpbkVzY1trXSAvIChpICsgMSkpOworICAgICAgVUludDE2ICpkZXN0ID0gcC0+QmluU3VtbVttXSArIGs7CisgICAgICBmb3IgKHIgPSAwOyByIDwgNjQ7IHIgKz0gOCkKKyAgICAgICAgZGVzdFtyXSA9IHZhbDsKKyAgICB9CisgIH0KKworICBmb3IgKGkgPSBtID0gMDsgbSA8IDI0OyBtKyspCisgIHsKKyAgICB3aGlsZSAocC0+TlMySW5keFtpICsgM10gPT0gbSArIDMpCisgICAgICBpKys7CisgICAgZm9yIChrID0gMDsgayA8IDMyOyBrKyspCisgICAgeworICAgICAgQ1BwbWRfU2VlICpzID0gJnAtPlNlZVttXVtrXTsKKyAgICAgIHMtPlN1bW0gPSAoVUludDE2KSgoMiAqIGkgKyA1KSA8PCAocy0+U2hpZnQgPSBQUE1EX1BFUklPRF9CSVRTIC0gNCkpOworICAgICAgcy0+Q291bnQgPSA3OworICAgIH0KKyAgfQorfQorCit2b2lkIFBwbWQ4X0luaXQoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBtYXhPcmRlciwgdW5zaWduZWQgcmVzdG9yZU1ldGhvZCkKK3sKKyAgcC0+TWF4T3JkZXIgPSBtYXhPcmRlcjsKKyAgcC0+UmVzdG9yZU1ldGhvZCA9IHJlc3RvcmVNZXRob2Q7CisgIFJlc3RhcnRNb2RlbChwKTsKKyAgcC0+RHVtbXlTZWUuU2hpZnQgPSBQUE1EX1BFUklPRF9CSVRTOworICBwLT5EdW1teVNlZS5TdW1tID0gMDsgLyogdW51c2VkICovCisgIHAtPkR1bW15U2VlLkNvdW50ID0gNjQ7IC8qIHVudXNlZCAqLworfQorCitzdGF0aWMgdm9pZCBSZWZyZXNoKENQcG1kOCAqcCwgQ1RYX1BUUiBjdHgsIHVuc2lnbmVkIG9sZE5VLCB1bnNpZ25lZCBzY2FsZSkKK3sKKyAgdW5zaWduZWQgaSA9IGN0eC0+TnVtU3RhdHMsIGVzY0ZyZXEsIHN1bUZyZXEsIGZsYWdzOworICBDUHBtZF9TdGF0ZSAqcyA9IChDUHBtZF9TdGF0ZSAqKVNocmlua1VuaXRzKHAsIFNUQVRTKGN0eCksIG9sZE5VLCAoaSArIDIpID4+IDEpOworICBjdHgtPlN0YXRzID0gUkVGKHMpOworICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgLyogZml4ZWQgb3ZlciBTaGthcmluJ3MgY29kZS4gRml4ZWQgY29kZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9yaWdpbmFsIGNvZGUgZm9yIHNvbWUgZmlsZXMgaW4gRlJFRVpFIG1vZGUuICovCisgIHNjYWxlIHw9IChjdHgtPlN1bW1GcmVxID49ICgoVUludDMyKTEgPDwgMTUpKTsKKyAgI2VuZGlmCisgIGZsYWdzID0gKGN0eC0+RmxhZ3MgJiAoMHgxMCArIDB4MDQgKiBzY2FsZSkpICsgMHgwOCAqIChzLT5TeW1ib2wgPj0gMHg0MCk7CisgIGVzY0ZyZXEgPSBjdHgtPlN1bW1GcmVxIC0gcy0+RnJlcTsKKyAgc3VtRnJlcSA9IChzLT5GcmVxID0gKEJ5dGUpKChzLT5GcmVxICsgc2NhbGUpID4+IHNjYWxlKSk7CisgIGRvCisgIHsKKyAgICBlc2NGcmVxIC09ICgrK3MpLT5GcmVxOworICAgIHN1bUZyZXEgKz0gKHMtPkZyZXEgPSAoQnl0ZSkoKHMtPkZyZXEgKyBzY2FsZSkgPj4gc2NhbGUpKTsKKyAgICBmbGFncyB8PSAweDA4ICogKHMtPlN5bWJvbCA+PSAweDQwKTsKKyAgfQorICB3aGlsZSAoLS1pKTsKKyAgY3R4LT5TdW1tRnJlcSA9IChVSW50MTYpKHN1bUZyZXEgKyAoKGVzY0ZyZXEgKyBzY2FsZSkgPj4gc2NhbGUpKTsKKyAgY3R4LT5GbGFncyA9IChCeXRlKWZsYWdzOworfQorCitzdGF0aWMgdm9pZCBTd2FwU3RhdGVzKENQcG1kX1N0YXRlICp0MSwgQ1BwbWRfU3RhdGUgKnQyKQoreworICBDUHBtZF9TdGF0ZSB0bXAgPSAqdDE7CisgICp0MSA9ICp0MjsKKyAgKnQyID0gdG1wOworfQorCitzdGF0aWMgQ1BwbWRfVm9pZF9SZWYgQ3V0T2ZmKENQcG1kOCAqcCwgQ1RYX1BUUiBjdHgsIHVuc2lnbmVkIG9yZGVyKQoreworICBpbnQgaTsKKyAgdW5zaWduZWQgdG1wOworICBDUHBtZF9TdGF0ZSAqczsKKyAgCisgIGlmICghY3R4LT5OdW1TdGF0cykKKyAgeworICAgIHMgPSBPTkVfU1RBVEUoY3R4KTsKKyAgICBpZiAoKEJ5dGUgKilQcG1kOF9HZXRQdHIocCwgU1VDQ0VTU09SKHMpKSA+PSBwLT5Vbml0c1N0YXJ0KQorICAgIHsKKyAgICAgIGlmIChvcmRlciA8IHAtPk1heE9yZGVyKQorICAgICAgICBTZXRTdWNjZXNzb3IocywgQ3V0T2ZmKHAsIENUWChTVUNDRVNTT1IocykpLCBvcmRlciArIDEpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgU2V0U3VjY2Vzc29yKHMsIDApOworICAgICAgaWYgKFNVQ0NFU1NPUihzKSB8fCBvcmRlciA8PSA5KSAvKiBPX0JPVU5EICovCisgICAgICAgIHJldHVybiBSRUYoY3R4KTsKKyAgICB9CisgICAgU3BlY2lhbEZyZWVVbml0KHAsIGN0eCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBjdHgtPlN0YXRzID0gU1RBVFNfUkVGKE1vdmVVbml0c1VwKHAsIFNUQVRTKGN0eCksIHRtcCA9ICgodW5zaWduZWQpY3R4LT5OdW1TdGF0cyArIDIpID4+IDEpKTsKKworICBmb3IgKHMgPSBTVEFUUyhjdHgpICsgKGkgPSBjdHgtPk51bVN0YXRzKTsgcyA+PSBTVEFUUyhjdHgpOyBzLS0pCisgICAgaWYgKChCeXRlICopUHBtZDhfR2V0UHRyKHAsIFNVQ0NFU1NPUihzKSkgPCBwLT5Vbml0c1N0YXJ0KQorICAgIHsKKyAgICAgIENQcG1kX1N0YXRlICpzMiA9IFNUQVRTKGN0eCkgKyAoaS0tKTsKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCAwKTsKKyAgICAgIFN3YXBTdGF0ZXMocywgczIpOworICAgIH0KKyAgICBlbHNlIGlmIChvcmRlciA8IHAtPk1heE9yZGVyKQorICAgICAgU2V0U3VjY2Vzc29yKHMsIEN1dE9mZihwLCBDVFgoU1VDQ0VTU09SKHMpKSwgb3JkZXIgKyAxKSk7CisgICAgZWxzZQorICAgICAgU2V0U3VjY2Vzc29yKHMsIDApOworICAgIAorICBpZiAoaSAhPSBjdHgtPk51bVN0YXRzICYmIG9yZGVyKQorICB7CisgICAgY3R4LT5OdW1TdGF0cyA9IChCeXRlKWk7CisgICAgcyA9IFNUQVRTKGN0eCk7CisgICAgaWYgKGkgPCAwKQorICAgIHsKKyAgICAgIEZyZWVVbml0cyhwLCBzLCB0bXApOworICAgICAgU3BlY2lhbEZyZWVVbml0KHAsIGN0eCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGkgPT0gMCkKKyAgICB7CisgICAgICBjdHgtPkZsYWdzID0gKEJ5dGUpKChjdHgtPkZsYWdzICYgMHgxMCkgKyAweDA4ICogKHMtPlN5bWJvbCA+PSAweDQwKSk7CisgICAgICAqT05FX1NUQVRFKGN0eCkgPSAqczsKKyAgICAgIEZyZWVVbml0cyhwLCBzLCB0bXApOworICAgICAgLyogOS4zMTogdGhlIGNvZGUgd2FzIGZpeGVkLiBJdCdzIHdhcyBub3QgQlVHLCBpZiBGcmVxIDw9IE1BWF9GUkVRID0gMTI0ICovCisgICAgICBPTkVfU1RBVEUoY3R4KS0+RnJlcSA9IChCeXRlKSgoKHVuc2lnbmVkKU9ORV9TVEFURShjdHgpLT5GcmVxICsgMTEpID4+IDMpOworICAgIH0KKyAgICBlbHNlCisgICAgICBSZWZyZXNoKHAsIGN0eCwgdG1wLCBjdHgtPlN1bW1GcmVxID4gMTYgKiBpKTsKKyAgfQorICByZXR1cm4gUkVGKGN0eCk7Cit9CisKKyNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorc3RhdGljIENQcG1kX1ZvaWRfUmVmIFJlbW92ZUJpbkNvbnRleHRzKENQcG1kOCAqcCwgQ1RYX1BUUiBjdHgsIHVuc2lnbmVkIG9yZGVyKQoreworICBDUHBtZF9TdGF0ZSAqczsKKyAgaWYgKCFjdHgtPk51bVN0YXRzKQorICB7CisgICAgcyA9IE9ORV9TVEFURShjdHgpOworICAgIGlmICgoQnl0ZSAqKVBwbWQ4X0dldFB0cihwLCBTVUNDRVNTT1IocykpID49IHAtPlVuaXRzU3RhcnQgJiYgb3JkZXIgPCBwLT5NYXhPcmRlcikKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCBSZW1vdmVCaW5Db250ZXh0cyhwLCBDVFgoU1VDQ0VTU09SKHMpKSwgb3JkZXIgKyAxKSk7CisgICAgZWxzZQorICAgICAgU2V0U3VjY2Vzc29yKHMsIDApOworICAgIC8qIFN1ZmZpeCBjb250ZXh0IGNhbiBiZSByZW1vdmVkIGFscmVhZHksIHNpbmNlIGRpZmZlcmVudCAoaGlnaC1vcmRlcikKKyAgICAgICBTdWNjZXNzb3JzIG1heSByZWZlciB0byBzYW1lIGNvbnRleHQuIFNvIHdlIGNoZWNrIEZsYWdzID09IDB4RkYgKFN0YW1wID09IEVNUFRZX05PREUpICovCisgICAgaWYgKCFTVUNDRVNTT1IocykgJiYgKCFTVUZGSVgoY3R4KS0+TnVtU3RhdHMgfHwgU1VGRklYKGN0eCktPkZsYWdzID09IDB4RkYpKQorICAgIHsKKyAgICAgIEZyZWVVbml0cyhwLCBjdHgsIDEpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiBSRUYoY3R4KTsKKyAgfQorCisgIGZvciAocyA9IFNUQVRTKGN0eCkgKyBjdHgtPk51bVN0YXRzOyBzID49IFNUQVRTKGN0eCk7IHMtLSkKKyAgICBpZiAoKEJ5dGUgKilQcG1kOF9HZXRQdHIocCwgU1VDQ0VTU09SKHMpKSA+PSBwLT5Vbml0c1N0YXJ0ICYmIG9yZGVyIDwgcC0+TWF4T3JkZXIpCisgICAgICBTZXRTdWNjZXNzb3IocywgUmVtb3ZlQmluQ29udGV4dHMocCwgQ1RYKFNVQ0NFU1NPUihzKSksIG9yZGVyICsgMSkpOworICAgIGVsc2UKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCAwKTsKKyAgCisgIHJldHVybiBSRUYoY3R4KTsKK30KKyNlbmRpZgorCitzdGF0aWMgVUludDMyIEdldFVzZWRNZW1vcnkoY29uc3QgQ1BwbWQ4ICpwKQoreworICBVSW50MzIgdiA9IDA7CisgIHVuc2lnbmVkIGk7CisgIGZvciAoaSA9IDA7IGkgPCBQUE1EX05VTV9JTkRFWEVTOyBpKyspCisgICAgdiArPSBwLT5TdGFtcHNbaV0gKiBJMlUoaSk7CisgIHJldHVybiBwLT5TaXplIC0gKFVJbnQzMikocC0+SGlVbml0IC0gcC0+TG9Vbml0KSAtIChVSW50MzIpKHAtPlVuaXRzU3RhcnQgLSBwLT5UZXh0KSAtIFUyQih2KTsKK30KKworI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgICNkZWZpbmUgUkVTVE9SRV9NT0RFTChjMSwgZlN1Y2Nlc3NvcikgUmVzdG9yZU1vZGVsKHAsIGMxLCBmU3VjY2Vzc29yKQorI2Vsc2UKKyAgI2RlZmluZSBSRVNUT1JFX01PREVMKGMxLCBmU3VjY2Vzc29yKSBSZXN0b3JlTW9kZWwocCwgYzEpCisjZW5kaWYKKworc3RhdGljIHZvaWQgUmVzdG9yZU1vZGVsKENQcG1kOCAqcCwgQ1RYX1BUUiBjMQorICAgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAgICwgQ1RYX1BUUiBmU3VjY2Vzc29yCisgICAgI2VuZGlmCisgICAgKQoreworICBDVFhfUFRSIGM7CisgIENQcG1kX1N0YXRlICpzOworICBSRVNFVF9URVhUKDApOworICBmb3IgKGMgPSBwLT5NYXhDb250ZXh0OyBjICE9IGMxOyBjID0gU1VGRklYKGMpKQorICAgIGlmICgtLShjLT5OdW1TdGF0cykgPT0gMCkKKyAgICB7CisgICAgICBzID0gU1RBVFMoYyk7CisgICAgICBjLT5GbGFncyA9IChCeXRlKSgoYy0+RmxhZ3MgJiAweDEwKSArIDB4MDggKiAocy0+U3ltYm9sID49IDB4NDApKTsKKyAgICAgICpPTkVfU1RBVEUoYykgPSAqczsKKyAgICAgIFNwZWNpYWxGcmVlVW5pdChwLCBzKTsKKyAgICAgIE9ORV9TVEFURShjKS0+RnJlcSA9IChCeXRlKSgoKHVuc2lnbmVkKU9ORV9TVEFURShjKS0+RnJlcSArIDExKSA+PiAzKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgUmVmcmVzaChwLCBjLCAoYy0+TnVtU3RhdHMrMykgPj4gMSwgMCk7CisgCisgIGZvciAoOyBjICE9IHAtPk1pbkNvbnRleHQ7IGMgPSBTVUZGSVgoYykpCisgICAgaWYgKCFjLT5OdW1TdGF0cykKKyAgICAgIE9ORV9TVEFURShjKS0+RnJlcSA9IChCeXRlKShPTkVfU1RBVEUoYyktPkZyZXEgLSAoT05FX1NUQVRFKGMpLT5GcmVxID4+IDEpKTsKKyAgICBlbHNlIGlmICgoYy0+U3VtbUZyZXEgKz0gNCkgPiAxMjggKyA0ICogYy0+TnVtU3RhdHMpCisgICAgICBSZWZyZXNoKHAsIGMsIChjLT5OdW1TdGF0cyArIDIpID4+IDEsIDEpOworCisgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICBpZiAocC0+UmVzdG9yZU1ldGhvZCA+IFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0ZSRUVaRSkKKyAgeworICAgIHAtPk1heENvbnRleHQgPSBmU3VjY2Vzc29yOworICAgIHAtPkdsdWVDb3VudCArPSAhKHAtPlN0YW1wc1sxXSAmIDEpOworICB9CisgIGVsc2UgaWYgKHAtPlJlc3RvcmVNZXRob2QgPT0gUFBNRDhfUkVTVE9SRV9NRVRIT0RfRlJFRVpFKQorICB7CisgICAgd2hpbGUgKHAtPk1heENvbnRleHQtPlN1ZmZpeCkKKyAgICAgIHAtPk1heENvbnRleHQgPSBTVUZGSVgocC0+TWF4Q29udGV4dCk7CisgICAgUmVtb3ZlQmluQ29udGV4dHMocCwgcC0+TWF4Q29udGV4dCwgMCk7CisgICAgcC0+UmVzdG9yZU1ldGhvZCsrOworICAgIHAtPkdsdWVDb3VudCA9IDA7CisgICAgcC0+T3JkZXJGYWxsID0gcC0+TWF4T3JkZXI7CisgIH0KKyAgZWxzZQorICAjZW5kaWYKKyAgaWYgKHAtPlJlc3RvcmVNZXRob2QgPT0gUFBNRDhfUkVTVE9SRV9NRVRIT0RfUkVTVEFSVCB8fCBHZXRVc2VkTWVtb3J5KHApIDwgKHAtPlNpemUgPj4gMSkpCisgICAgUmVzdGFydE1vZGVsKHApOworICBlbHNlCisgIHsKKyAgICB3aGlsZSAocC0+TWF4Q29udGV4dC0+U3VmZml4KQorICAgICAgcC0+TWF4Q29udGV4dCA9IFNVRkZJWChwLT5NYXhDb250ZXh0KTsKKyAgICBkbworICAgIHsKKyAgICAgIEN1dE9mZihwLCBwLT5NYXhDb250ZXh0LCAwKTsKKyAgICAgIEV4cGFuZFRleHRBcmVhKHApOworICAgIH0KKyAgICB3aGlsZSAoR2V0VXNlZE1lbW9yeShwKSA+IDMgKiAocC0+U2l6ZSA+PiAyKSk7CisgICAgcC0+R2x1ZUNvdW50ID0gMDsKKyAgICBwLT5PcmRlckZhbGwgPSBwLT5NYXhPcmRlcjsKKyAgfQorfQorCitzdGF0aWMgQ1RYX1BUUiBDcmVhdGVTdWNjZXNzb3JzKENQcG1kOCAqcCwgQm9vbCBza2lwLCBDUHBtZF9TdGF0ZSAqczEsIENUWF9QVFIgYykKK3sKKyAgQ1BwbWRfU3RhdGUgdXBTdGF0ZTsKKyAgQnl0ZSBmbGFnczsKKyAgQ1BwbWRfQnl0ZV9SZWYgdXBCcmFuY2ggPSAoQ1BwbWRfQnl0ZV9SZWYpU1VDQ0VTU09SKHAtPkZvdW5kU3RhdGUpOworICAvKiBmaXhlZCBvdmVyIFNoa2FyaW4ncyBjb2RlLiBNYXliZSBpdCBjb3VsZCB3b3JrIHdpdGhvdXQgKyAxIHRvby4gKi8KKyAgQ1BwbWRfU3RhdGUgKnBzW1BQTUQ4X01BWF9PUkRFUiArIDFdOworICB1bnNpZ25lZCBudW1QcyA9IDA7CisgIAorICBpZiAoIXNraXApCisgICAgcHNbbnVtUHMrK10gPSBwLT5Gb3VuZFN0YXRlOworICAKKyAgd2hpbGUgKGMtPlN1ZmZpeCkKKyAgeworICAgIENQcG1kX1ZvaWRfUmVmIHN1Y2Nlc3NvcjsKKyAgICBDUHBtZF9TdGF0ZSAqczsKKyAgICBjID0gU1VGRklYKGMpOworICAgIGlmIChzMSkKKyAgICB7CisgICAgICBzID0gczE7CisgICAgICBzMSA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKGMtPk51bVN0YXRzICE9IDApCisgICAgeworICAgICAgZm9yIChzID0gU1RBVFMoYyk7IHMtPlN5bWJvbCAhPSBwLT5Gb3VuZFN0YXRlLT5TeW1ib2w7IHMrKyk7CisgICAgICBpZiAocy0+RnJlcSA8IE1BWF9GUkVRIC0gOSkKKyAgICAgIHsKKyAgICAgICAgcy0+RnJlcSsrOworICAgICAgICBjLT5TdW1tRnJlcSsrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcyA9IE9ORV9TVEFURShjKTsKKyAgICAgIHMtPkZyZXEgPSAoQnl0ZSkocy0+RnJlcSArICghU1VGRklYKGMpLT5OdW1TdGF0cyAmIChzLT5GcmVxIDwgMjQpKSk7CisgICAgfQorICAgIHN1Y2Nlc3NvciA9IFNVQ0NFU1NPUihzKTsKKyAgICBpZiAoc3VjY2Vzc29yICE9IHVwQnJhbmNoKQorICAgIHsKKyAgICAgIGMgPSBDVFgoc3VjY2Vzc29yKTsKKyAgICAgIGlmIChudW1QcyA9PSAwKQorICAgICAgICByZXR1cm4gYzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBwc1tudW1QcysrXSA9IHM7CisgIH0KKyAgCisgIHVwU3RhdGUuU3ltYm9sID0gKihjb25zdCBCeXRlICopUHBtZDhfR2V0UHRyKHAsIHVwQnJhbmNoKTsKKyAgU2V0U3VjY2Vzc29yKCZ1cFN0YXRlLCB1cEJyYW5jaCArIDEpOworICBmbGFncyA9IChCeXRlKSgweDEwICogKHAtPkZvdW5kU3RhdGUtPlN5bWJvbCA+PSAweDQwKSArIDB4MDggKiAodXBTdGF0ZS5TeW1ib2wgPj0gMHg0MCkpOworCisgIGlmIChjLT5OdW1TdGF0cyA9PSAwKQorICAgIHVwU3RhdGUuRnJlcSA9IE9ORV9TVEFURShjKS0+RnJlcTsKKyAgZWxzZQorICB7CisgICAgVUludDMyIGNmLCBzMDsKKyAgICBDUHBtZF9TdGF0ZSAqczsKKyAgICBmb3IgKHMgPSBTVEFUUyhjKTsgcy0+U3ltYm9sICE9IHVwU3RhdGUuU3ltYm9sOyBzKyspOworICAgIGNmID0gcy0+RnJlcSAtIDE7CisgICAgczAgPSBjLT5TdW1tRnJlcSAtIGMtPk51bVN0YXRzIC0gY2Y7CisgICAgdXBTdGF0ZS5GcmVxID0gKEJ5dGUpKDEgKyAoKDIgKiBjZiA8PSBzMCkgPyAoNSAqIGNmID4gczApIDogKChjZiArIDIgKiBzMCAtIDMpIC8gczApKSk7CisgIH0KKworICBkbworICB7CisgICAgLyogQ3JlYXRlIENoaWxkICovCisgICAgQ1RYX1BUUiBjMTsgLyogPSBBbGxvY0NvbnRleHQocCk7ICovCisgICAgaWYgKHAtPkhpVW5pdCAhPSBwLT5Mb1VuaXQpCisgICAgICBjMSA9IChDVFhfUFRSKShwLT5IaVVuaXQgLT0gVU5JVF9TSVpFKTsKKyAgICBlbHNlIGlmIChwLT5GcmVlTGlzdFswXSAhPSAwKQorICAgICAgYzEgPSAoQ1RYX1BUUilSZW1vdmVOb2RlKHAsIDApOworICAgIGVsc2UKKyAgICB7CisgICAgICBjMSA9IChDVFhfUFRSKUFsbG9jVW5pdHNSYXJlKHAsIDApOworICAgICAgaWYgKCFjMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGMxLT5OdW1TdGF0cyA9IDA7CisgICAgYzEtPkZsYWdzID0gZmxhZ3M7CisgICAgKk9ORV9TVEFURShjMSkgPSB1cFN0YXRlOworICAgIGMxLT5TdWZmaXggPSBSRUYoYyk7CisgICAgU2V0U3VjY2Vzc29yKHBzWy0tbnVtUHNdLCBSRUYoYzEpKTsKKyAgICBjID0gYzE7CisgIH0KKyAgd2hpbGUgKG51bVBzICE9IDApOworICAKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBDVFhfUFRSIFJlZHVjZU9yZGVyKENQcG1kOCAqcCwgQ1BwbWRfU3RhdGUgKnMxLCBDVFhfUFRSIGMpCit7CisgIENQcG1kX1N0YXRlICpzID0gTlVMTDsKKyAgQ1RYX1BUUiBjMSA9IGM7CisgIENQcG1kX1ZvaWRfUmVmIHVwQnJhbmNoID0gUkVGKHAtPlRleHQpOworICAKKyAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgIC8qIFRoZSBCVUcgaW4gU2hrYXJpbidzIGNvZGUgd2FzIGZpeGVkOiBwcyBjb3VsZCBvdmVyZmxvdyBpbiBDVVRfT0ZGIG1vZGUuICovCisgIENQcG1kX1N0YXRlICpwc1tQUE1EOF9NQVhfT1JERVIgKyAxXTsKKyAgdW5zaWduZWQgbnVtUHMgPSAwOworICBwc1tudW1QcysrXSA9IHAtPkZvdW5kU3RhdGU7CisgICNlbmRpZgorCisgIFNldFN1Y2Nlc3NvcihwLT5Gb3VuZFN0YXRlLCB1cEJyYW5jaCk7CisgIHAtPk9yZGVyRmFsbCsrOworCisgIGZvciAoOzspCisgIHsKKyAgICBpZiAoczEpCisgICAgeworICAgICAgYyA9IFNVRkZJWChjKTsKKyAgICAgIHMgPSBzMTsKKyAgICAgIHMxID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICghYy0+U3VmZml4KQorICAgICAgeworICAgICAgICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgICAgICAgaWYgKHAtPlJlc3RvcmVNZXRob2QgPiBQUE1EOF9SRVNUT1JFX01FVEhPRF9GUkVFWkUpCisgICAgICAgIHsKKyAgICAgICAgICBkbyB7IFNldFN1Y2Nlc3Nvcihwc1stLW51bVBzXSwgUkVGKGMpKTsgfSB3aGlsZSAobnVtUHMpOworICAgICAgICAgIFJFU0VUX1RFWFQoMSk7CisgICAgICAgICAgcC0+T3JkZXJGYWxsID0gMTsKKyAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgcmV0dXJuIGM7CisgICAgICB9CisgICAgICBjID0gU1VGRklYKGMpOworICAgICAgaWYgKGMtPk51bVN0YXRzKQorICAgICAgeworICAgICAgICBpZiAoKHMgPSBTVEFUUyhjKSktPlN5bWJvbCAhPSBwLT5Gb3VuZFN0YXRlLT5TeW1ib2wpCisgICAgICAgICAgZG8geyBzKys7IH0gd2hpbGUgKHMtPlN5bWJvbCAhPSBwLT5Gb3VuZFN0YXRlLT5TeW1ib2wpOworICAgICAgICBpZiAocy0+RnJlcSA8IE1BWF9GUkVRIC0gOSkKKyAgICAgICAgeworICAgICAgICAgIHMtPkZyZXEgKz0gMjsKKyAgICAgICAgICBjLT5TdW1tRnJlcSArPSAyOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHMgPSBPTkVfU1RBVEUoYyk7CisgICAgICAgIHMtPkZyZXEgPSAoQnl0ZSkocy0+RnJlcSArIChzLT5GcmVxIDwgMzIpKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKFNVQ0NFU1NPUihzKSkKKyAgICAgIGJyZWFrOworICAgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAgIHBzW251bVBzKytdID0gczsKKyAgICAjZW5kaWYKKyAgICBTZXRTdWNjZXNzb3IocywgdXBCcmFuY2gpOworICAgIHAtPk9yZGVyRmFsbCsrOworICB9CisgIAorICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgaWYgKHAtPlJlc3RvcmVNZXRob2QgPiBQUE1EOF9SRVNUT1JFX01FVEhPRF9GUkVFWkUpCisgIHsKKyAgICBjID0gQ1RYKFNVQ0NFU1NPUihzKSk7CisgICAgZG8geyBTZXRTdWNjZXNzb3IocHNbLS1udW1Qc10sIFJFRihjKSk7IH0gd2hpbGUgKG51bVBzKTsKKyAgICBSRVNFVF9URVhUKDEpOworICAgIHAtPk9yZGVyRmFsbCA9IDE7CisgICAgcmV0dXJuIGM7CisgIH0KKyAgZWxzZQorICAjZW5kaWYKKyAgaWYgKFNVQ0NFU1NPUihzKSA8PSB1cEJyYW5jaCkKKyAgeworICAgIENUWF9QVFIgc3VjY2Vzc29yOworICAgIENQcG1kX1N0YXRlICpzMiA9IHAtPkZvdW5kU3RhdGU7CisgICAgcC0+Rm91bmRTdGF0ZSA9IHM7CisKKyAgICBzdWNjZXNzb3IgPSBDcmVhdGVTdWNjZXNzb3JzKHAsIEZhbHNlLCBOVUxMLCBjKTsKKyAgICBpZiAoc3VjY2Vzc29yID09IE5VTEwpCisgICAgICBTZXRTdWNjZXNzb3IocywgMCk7CisgICAgZWxzZQorICAgICAgU2V0U3VjY2Vzc29yKHMsIFJFRihzdWNjZXNzb3IpKTsKKyAgICBwLT5Gb3VuZFN0YXRlID0gczI7CisgIH0KKyAgCisgIGlmIChwLT5PcmRlckZhbGwgPT0gMSAmJiBjMSA9PSBwLT5NYXhDb250ZXh0KQorICB7CisgICAgU2V0U3VjY2Vzc29yKHAtPkZvdW5kU3RhdGUsIFNVQ0NFU1NPUihzKSk7CisgICAgcC0+VGV4dC0tOworICB9CisgIGlmIChTVUNDRVNTT1IocykgPT0gMCkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIENUWChTVUNDRVNTT1IocykpOworfQorCitzdGF0aWMgdm9pZCBVcGRhdGVNb2RlbChDUHBtZDggKnApCit7CisgIENQcG1kX1ZvaWRfUmVmIHN1Y2Nlc3NvciwgZlN1Y2Nlc3NvciA9IFNVQ0NFU1NPUihwLT5Gb3VuZFN0YXRlKTsKKyAgQ1RYX1BUUiBjOworICB1bnNpZ25lZCBzMCwgbnMsIGZGcmVxID0gcC0+Rm91bmRTdGF0ZS0+RnJlcTsKKyAgQnl0ZSBmbGFnLCBmU3ltYm9sID0gcC0+Rm91bmRTdGF0ZS0+U3ltYm9sOworICBDUHBtZF9TdGF0ZSAqcyA9IE5VTEw7CisgIAorICBpZiAocC0+Rm91bmRTdGF0ZS0+RnJlcSA8IE1BWF9GUkVRIC8gNCAmJiBwLT5NaW5Db250ZXh0LT5TdWZmaXggIT0gMCkKKyAgeworICAgIGMgPSBTVUZGSVgocC0+TWluQ29udGV4dCk7CisgICAgCisgICAgaWYgKGMtPk51bVN0YXRzID09IDApCisgICAgeworICAgICAgcyA9IE9ORV9TVEFURShjKTsKKyAgICAgIGlmIChzLT5GcmVxIDwgMzIpCisgICAgICAgIHMtPkZyZXErKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHMgPSBTVEFUUyhjKTsKKyAgICAgIGlmIChzLT5TeW1ib2wgIT0gcC0+Rm91bmRTdGF0ZS0+U3ltYm9sKQorICAgICAgeworICAgICAgICBkbyB7IHMrKzsgfSB3aGlsZSAocy0+U3ltYm9sICE9IHAtPkZvdW5kU3RhdGUtPlN5bWJvbCk7CisgICAgICAgIGlmIChzWzBdLkZyZXEgPj0gc1stMV0uRnJlcSkKKyAgICAgICAgeworICAgICAgICAgIFN3YXBTdGF0ZXMoJnNbMF0sICZzWy0xXSk7CisgICAgICAgICAgcy0tOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAocy0+RnJlcSA8IE1BWF9GUkVRIC0gOSkKKyAgICAgIHsKKyAgICAgICAgcy0+RnJlcSArPSAyOworICAgICAgICBjLT5TdW1tRnJlcSArPSAyOworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgYyA9IHAtPk1heENvbnRleHQ7CisgIGlmIChwLT5PcmRlckZhbGwgPT0gMCAmJiBmU3VjY2Vzc29yKQorICB7CisgICAgQ1RYX1BUUiBjcyA9IENyZWF0ZVN1Y2Nlc3NvcnMocCwgVHJ1ZSwgcywgcC0+TWluQ29udGV4dCk7CisgICAgaWYgKGNzID09IDApCisgICAgeworICAgICAgU2V0U3VjY2Vzc29yKHAtPkZvdW5kU3RhdGUsIDApOworICAgICAgUkVTVE9SRV9NT0RFTChjLCBDVFgoZlN1Y2Nlc3NvcikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgU2V0U3VjY2Vzc29yKHAtPkZvdW5kU3RhdGUsIFJFRihjcykpOworICAgICAgcC0+TWF4Q29udGV4dCA9IGNzOworICAgIH0KKyAgICByZXR1cm47CisgIH0KKyAgCisgICpwLT5UZXh0KysgPSBwLT5Gb3VuZFN0YXRlLT5TeW1ib2w7CisgIHN1Y2Nlc3NvciA9IFJFRihwLT5UZXh0KTsKKyAgaWYgKHAtPlRleHQgPj0gcC0+VW5pdHNTdGFydCkKKyAgeworICAgIFJFU1RPUkVfTU9ERUwoYywgQ1RYKGZTdWNjZXNzb3IpKTsgLyogY2hlY2sgaXQgKi8KKyAgICByZXR1cm47CisgIH0KKyAgCisgIGlmICghZlN1Y2Nlc3NvcikKKyAgeworICAgIENUWF9QVFIgY3MgPSBSZWR1Y2VPcmRlcihwLCBzLCBwLT5NaW5Db250ZXh0KTsKKyAgICBpZiAoY3MgPT0gTlVMTCkKKyAgICB7CisgICAgICBSRVNUT1JFX01PREVMKGMsIDApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmU3VjY2Vzc29yID0gUkVGKGNzKTsKKyAgfQorICBlbHNlIGlmICgoQnl0ZSAqKVBwbWQ4X0dldFB0cihwLCBmU3VjY2Vzc29yKSA8IHAtPlVuaXRzU3RhcnQpCisgIHsKKyAgICBDVFhfUFRSIGNzID0gQ3JlYXRlU3VjY2Vzc29ycyhwLCBGYWxzZSwgcywgcC0+TWluQ29udGV4dCk7CisgICAgaWYgKGNzID09IE5VTEwpCisgICAgeworICAgICAgUkVTVE9SRV9NT0RFTChjLCAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZlN1Y2Nlc3NvciA9IFJFRihjcyk7CisgIH0KKyAgCisgIGlmICgtLXAtPk9yZGVyRmFsbCA9PSAwKQorICB7CisgICAgc3VjY2Vzc29yID0gZlN1Y2Nlc3NvcjsKKyAgICBwLT5UZXh0IC09IChwLT5NYXhDb250ZXh0ICE9IHAtPk1pbkNvbnRleHQpOworICB9CisgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICBlbHNlIGlmIChwLT5SZXN0b3JlTWV0aG9kID4gUFBNRDhfUkVTVE9SRV9NRVRIT0RfRlJFRVpFKQorICB7CisgICAgc3VjY2Vzc29yID0gZlN1Y2Nlc3NvcjsKKyAgICBSRVNFVF9URVhUKDApOworICAgIHAtPk9yZGVyRmFsbCA9IDA7CisgIH0KKyAgI2VuZGlmCisgIAorICBzMCA9IHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxIC0gKG5zID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHMpIC0gZkZyZXE7CisgIGZsYWcgPSAoQnl0ZSkoMHgwOCAqIChmU3ltYm9sID49IDB4NDApKTsKKyAgCisgIGZvciAoOyBjICE9IHAtPk1pbkNvbnRleHQ7IGMgPSBTVUZGSVgoYykpCisgIHsKKyAgICB1bnNpZ25lZCBuczE7CisgICAgVUludDMyIGNmLCBzZjsKKyAgICBpZiAoKG5zMSA9IGMtPk51bVN0YXRzKSAhPSAwKQorICAgIHsKKyAgICAgIGlmICgobnMxICYgMSkgIT0gMCkKKyAgICAgIHsKKyAgICAgICAgLyogRXhwYW5kIGZvciBvbmUgVU5JVCAqLworICAgICAgICB1bnNpZ25lZCBvbGROVSA9IChuczEgKyAxKSA+PiAxOworICAgICAgICB1bnNpZ25lZCBpID0gVTJJKG9sZE5VKTsKKyAgICAgICAgaWYgKGkgIT0gVTJJKG9sZE5VICsgMSkpCisgICAgICAgIHsKKyAgICAgICAgICB2b2lkICpwdHIgPSBBbGxvY1VuaXRzKHAsIGkgKyAxKTsKKyAgICAgICAgICB2b2lkICpvbGRQdHI7CisgICAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgeworICAgICAgICAgICAgUkVTVE9SRV9NT0RFTChjLCBDVFgoZlN1Y2Nlc3NvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgICBvbGRQdHIgPSBTVEFUUyhjKTsKKyAgICAgICAgICBNeU1lbTEyQ3B5KHB0ciwgb2xkUHRyLCBvbGROVSk7CisgICAgICAgICAgSW5zZXJ0Tm9kZShwLCBvbGRQdHIsIGkpOworICAgICAgICAgIGMtPlN0YXRzID0gU1RBVFNfUkVGKHB0cik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGMtPlN1bW1GcmVxID0gKFVJbnQxNikoYy0+U3VtbUZyZXEgKyAoMyAqIG5zMSArIDEgPCBucykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgQ1BwbWRfU3RhdGUgKnMyID0gKENQcG1kX1N0YXRlKilBbGxvY1VuaXRzKHAsIDApOworICAgICAgaWYgKCFzMikKKyAgICAgIHsKKyAgICAgICAgUkVTVE9SRV9NT0RFTChjLCBDVFgoZlN1Y2Nlc3NvcikpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICAqczIgPSAqT05FX1NUQVRFKGMpOworICAgICAgYy0+U3RhdHMgPSBSRUYoczIpOworICAgICAgaWYgKHMyLT5GcmVxIDwgTUFYX0ZSRVEgLyA0IC0gMSkKKyAgICAgICAgczItPkZyZXEgPDw9IDE7CisgICAgICBlbHNlCisgICAgICAgIHMyLT5GcmVxID0gTUFYX0ZSRVEgLSA0OworICAgICAgYy0+U3VtbUZyZXEgPSAoVUludDE2KShzMi0+RnJlcSArIHAtPkluaXRFc2MgKyAobnMgPiAyKSk7CisgICAgfQorICAgIGNmID0gMiAqIGZGcmVxICogKGMtPlN1bW1GcmVxICsgNik7CisgICAgc2YgPSAoVUludDMyKXMwICsgYy0+U3VtbUZyZXE7CisgICAgaWYgKGNmIDwgNiAqIHNmKQorICAgIHsKKyAgICAgIGNmID0gMSArIChjZiA+IHNmKSArIChjZiA+PSA0ICogc2YpOworICAgICAgYy0+U3VtbUZyZXEgKz0gNDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGNmID0gNCArIChjZiA+IDkgKiBzZikgKyAoY2YgPiAxMiAqIHNmKSArIChjZiA+IDE1ICogc2YpOworICAgICAgYy0+U3VtbUZyZXEgPSAoVUludDE2KShjLT5TdW1tRnJlcSArIGNmKTsKKyAgICB9CisgICAgeworICAgICAgQ1BwbWRfU3RhdGUgKnMyID0gU1RBVFMoYykgKyBuczEgKyAxOworICAgICAgU2V0U3VjY2Vzc29yKHMyLCBzdWNjZXNzb3IpOworICAgICAgczItPlN5bWJvbCA9IGZTeW1ib2w7CisgICAgICBzMi0+RnJlcSA9IChCeXRlKWNmOworICAgICAgYy0+RmxhZ3MgfD0gZmxhZzsKKyAgICAgIGMtPk51bVN0YXRzID0gKEJ5dGUpKG5zMSArIDEpOworICAgIH0KKyAgfQorICBwLT5NYXhDb250ZXh0ID0gcC0+TWluQ29udGV4dCA9IENUWChmU3VjY2Vzc29yKTsKK30KKyAgCitzdGF0aWMgdm9pZCBSZXNjYWxlKENQcG1kOCAqcCkKK3sKKyAgdW5zaWduZWQgaSwgYWRkZXIsIHN1bUZyZXEsIGVzY0ZyZXE7CisgIENQcG1kX1N0YXRlICpzdGF0cyA9IFNUQVRTKHAtPk1pbkNvbnRleHQpOworICBDUHBtZF9TdGF0ZSAqcyA9IHAtPkZvdW5kU3RhdGU7CisgIHsKKyAgICBDUHBtZF9TdGF0ZSB0bXAgPSAqczsKKyAgICBmb3IgKDsgcyAhPSBzdGF0czsgcy0tKQorICAgICAgc1swXSA9IHNbLTFdOworICAgICpzID0gdG1wOworICB9CisgIGVzY0ZyZXEgPSBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSAtIHMtPkZyZXE7CisgIHMtPkZyZXEgKz0gNDsKKyAgYWRkZXIgPSAocC0+T3JkZXJGYWxsICE9IDAKKyAgICAgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAgICAgfHwgcC0+UmVzdG9yZU1ldGhvZCA+IFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0ZSRUVaRQorICAgICAgI2VuZGlmCisgICAgICApOworICBzLT5GcmVxID0gKEJ5dGUpKChzLT5GcmVxICsgYWRkZXIpID4+IDEpOworICBzdW1GcmVxID0gcy0+RnJlcTsKKyAgCisgIGkgPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0czsKKyAgZG8KKyAgeworICAgIGVzY0ZyZXEgLT0gKCsrcyktPkZyZXE7CisgICAgcy0+RnJlcSA9IChCeXRlKSgocy0+RnJlcSArIGFkZGVyKSA+PiAxKTsKKyAgICBzdW1GcmVxICs9IHMtPkZyZXE7CisgICAgaWYgKHNbMF0uRnJlcSA+IHNbLTFdLkZyZXEpCisgICAgeworICAgICAgQ1BwbWRfU3RhdGUgKnMxID0gczsKKyAgICAgIENQcG1kX1N0YXRlIHRtcCA9ICpzMTsKKyAgICAgIGRvCisgICAgICAgIHMxWzBdID0gczFbLTFdOworICAgICAgd2hpbGUgKC0tczEgIT0gc3RhdHMgJiYgdG1wLkZyZXEgPiBzMVstMV0uRnJlcSk7CisgICAgICAqczEgPSB0bXA7CisgICAgfQorICB9CisgIHdoaWxlICgtLWkpOworICAKKyAgaWYgKHMtPkZyZXEgPT0gMCkKKyAgeworICAgIHVuc2lnbmVkIG51bVN0YXRzID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHM7CisgICAgdW5zaWduZWQgbjAsIG4xOworICAgIGRvIHsgaSsrOyB9IHdoaWxlICgoLS1zKS0+RnJlcSA9PSAwKTsKKyAgICBlc2NGcmVxICs9IGk7CisgICAgcC0+TWluQ29udGV4dC0+TnVtU3RhdHMgPSAoQnl0ZSkocC0+TWluQ29udGV4dC0+TnVtU3RhdHMgLSBpKTsKKyAgICBpZiAocC0+TWluQ29udGV4dC0+TnVtU3RhdHMgPT0gMCkKKyAgICB7CisgICAgICBDUHBtZF9TdGF0ZSB0bXAgPSAqc3RhdHM7CisgICAgICB0bXAuRnJlcSA9IChCeXRlKSgoMiAqIHRtcC5GcmVxICsgZXNjRnJlcSAtIDEpIC8gZXNjRnJlcSk7CisgICAgICBpZiAodG1wLkZyZXEgPiBNQVhfRlJFUSAvIDMpCisgICAgICAgIHRtcC5GcmVxID0gTUFYX0ZSRVEgLyAzOworICAgICAgSW5zZXJ0Tm9kZShwLCBzdGF0cywgVTJJKChudW1TdGF0cyArIDIpID4+IDEpKTsKKyAgICAgIHAtPk1pbkNvbnRleHQtPkZsYWdzID0gKEJ5dGUpKChwLT5NaW5Db250ZXh0LT5GbGFncyAmIDB4MTApICsgMHgwOCAqICh0bXAuU3ltYm9sID49IDB4NDApKTsKKyAgICAgICoocC0+Rm91bmRTdGF0ZSA9IE9ORV9TVEFURShwLT5NaW5Db250ZXh0KSkgPSB0bXA7CisgICAgICByZXR1cm47CisgICAgfQorICAgIG4wID0gKG51bVN0YXRzICsgMikgPj4gMTsKKyAgICBuMSA9IChwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyArIDIpID4+IDE7CisgICAgaWYgKG4wICE9IG4xKQorICAgICAgcC0+TWluQ29udGV4dC0+U3RhdHMgPSBTVEFUU19SRUYoU2hyaW5rVW5pdHMocCwgc3RhdHMsIG4wLCBuMSkpOworICAgIHAtPk1pbkNvbnRleHQtPkZsYWdzICY9IH4weDA4OworICAgIHAtPk1pbkNvbnRleHQtPkZsYWdzIHw9IDB4MDggKiAoKHMgPSBTVEFUUyhwLT5NaW5Db250ZXh0KSktPlN5bWJvbCA+PSAweDQwKTsKKyAgICBpID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHM7CisgICAgZG8geyBwLT5NaW5Db250ZXh0LT5GbGFncyB8PSAweDA4KigoKytzKS0+U3ltYm9sID49IDB4NDApOyB9IHdoaWxlICgtLWkpOworICB9CisgIHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxID0gKFVJbnQxNikoc3VtRnJlcSArIGVzY0ZyZXEgLSAoZXNjRnJlcSA+PiAxKSk7CisgIHAtPk1pbkNvbnRleHQtPkZsYWdzIHw9IDB4NDsKKyAgcC0+Rm91bmRTdGF0ZSA9IFNUQVRTKHAtPk1pbkNvbnRleHQpOworfQorCitDUHBtZF9TZWUgKlBwbWQ4X01ha2VFc2NGcmVxKENQcG1kOCAqcCwgdW5zaWduZWQgbnVtTWFza2VkMSwgVUludDMyICplc2NGcmVxKQoreworICBDUHBtZF9TZWUgKnNlZTsKKyAgaWYgKHAtPk1pbkNvbnRleHQtPk51bVN0YXRzICE9IDB4RkYpCisgIHsKKyAgICBzZWUgPSBwLT5TZWVbKHVuc2lnbmVkKXAtPk5TMkluZHhbKHVuc2lnbmVkKXAtPk1pbkNvbnRleHQtPk51bVN0YXRzICsgMl0gLSAzXSArCisgICAgICAgIChwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSA+IDExICogKCh1bnNpZ25lZClwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyArIDEpKSArCisgICAgICAgIDIgKiAodW5zaWduZWQpKDIgKiAodW5zaWduZWQpcC0+TWluQ29udGV4dC0+TnVtU3RhdHMgPAorICAgICAgICAoKHVuc2lnbmVkKVNVRkZJWChwLT5NaW5Db250ZXh0KS0+TnVtU3RhdHMgKyBudW1NYXNrZWQxKSkgKworICAgICAgICBwLT5NaW5Db250ZXh0LT5GbGFnczsKKyAgICB7CisgICAgICB1bnNpZ25lZCByID0gKHNlZS0+U3VtbSA+PiBzZWUtPlNoaWZ0KTsKKyAgICAgIHNlZS0+U3VtbSA9IChVSW50MTYpKHNlZS0+U3VtbSAtIHIpOworICAgICAgKmVzY0ZyZXEgPSByICsgKHIgPT0gMCk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIHNlZSA9ICZwLT5EdW1teVNlZTsKKyAgICAqZXNjRnJlcSA9IDE7CisgIH0KKyAgcmV0dXJuIHNlZTsKK30KKworc3RhdGljIHZvaWQgTmV4dENvbnRleHQoQ1BwbWQ4ICpwKQoreworICBDVFhfUFRSIGMgPSBDVFgoU1VDQ0VTU09SKHAtPkZvdW5kU3RhdGUpKTsKKyAgaWYgKHAtPk9yZGVyRmFsbCA9PSAwICYmIChCeXRlICopYyA+PSBwLT5Vbml0c1N0YXJ0KQorICAgIHAtPk1pbkNvbnRleHQgPSBwLT5NYXhDb250ZXh0ID0gYzsKKyAgZWxzZQorICB7CisgICAgVXBkYXRlTW9kZWwocCk7CisgICAgcC0+TWluQ29udGV4dCA9IHAtPk1heENvbnRleHQ7CisgIH0KK30KKwordm9pZCBQcG1kOF9VcGRhdGUxKENQcG1kOCAqcCkKK3sKKyAgQ1BwbWRfU3RhdGUgKnMgPSBwLT5Gb3VuZFN0YXRlOworICBzLT5GcmVxICs9IDQ7CisgIHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxICs9IDQ7CisgIGlmIChzWzBdLkZyZXEgPiBzWy0xXS5GcmVxKQorICB7CisgICAgU3dhcFN0YXRlcygmc1swXSwgJnNbLTFdKTsKKyAgICBwLT5Gb3VuZFN0YXRlID0gLS1zOworICAgIGlmIChzLT5GcmVxID4gTUFYX0ZSRVEpCisgICAgICBSZXNjYWxlKHApOworICB9CisgIE5leHRDb250ZXh0KHApOworfQorCit2b2lkIFBwbWQ4X1VwZGF0ZTFfMChDUHBtZDggKnApCit7CisgIHAtPlByZXZTdWNjZXNzID0gKDIgKiBwLT5Gb3VuZFN0YXRlLT5GcmVxID49IHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxKTsKKyAgcC0+UnVuTGVuZ3RoICs9IHAtPlByZXZTdWNjZXNzOworICBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSArPSA0OworICBpZiAoKHAtPkZvdW5kU3RhdGUtPkZyZXEgKz0gNCkgPiBNQVhfRlJFUSkKKyAgICBSZXNjYWxlKHApOworICBOZXh0Q29udGV4dChwKTsKK30KKwordm9pZCBQcG1kOF9VcGRhdGVCaW4oQ1BwbWQ4ICpwKQoreworICBwLT5Gb3VuZFN0YXRlLT5GcmVxID0gKEJ5dGUpKHAtPkZvdW5kU3RhdGUtPkZyZXEgKyAocC0+Rm91bmRTdGF0ZS0+RnJlcSA8IDE5NikpOworICBwLT5QcmV2U3VjY2VzcyA9IDE7CisgIHAtPlJ1bkxlbmd0aCsrOworICBOZXh0Q29udGV4dChwKTsKK30KKwordm9pZCBQcG1kOF9VcGRhdGUyKENQcG1kOCAqcCkKK3sKKyAgcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgKz0gNDsKKyAgaWYgKChwLT5Gb3VuZFN0YXRlLT5GcmVxICs9IDQpID4gTUFYX0ZSRVEpCisgICAgUmVzY2FsZShwKTsKKyAgcC0+UnVuTGVuZ3RoID0gcC0+SW5pdFJMOworICBVcGRhdGVNb2RlbChwKTsKKyAgcC0+TWluQ29udGV4dCA9IHAtPk1heENvbnRleHQ7Cit9CisKKy8qIFBwbWQ4RGVjLmMgLS0gUFBNZEkgRGVjb2RlcgorMjAxMC0wNC0xNiA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbgorVGhpcyBjb2RlIGlzIGJhc2VkIG9uOgorICBQUE1kIHZhci5JICgyMDAyKTogRG1pdHJ5IFNoa2FyaW4gOiBQdWJsaWMgZG9tYWluCisgIENhcnJ5bGVzcyByYW5nZWNvZGVyICgxOTk5KTogRG1pdHJ5IFN1YmJvdGluIDogUHVibGljIGRvbWFpbiAqLworCitCb29sIFBwbWQ4X1JhbmdlRGVjX0luaXQoQ1BwbWQ4ICpwKQoreworICB1bnNpZ25lZCBpOworICBwLT5Mb3cgPSAwOworICBwLT5SYW5nZSA9IDB4RkZGRkZGRkY7CisgIHAtPkNvZGUgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIHAtPkNvZGUgPSAocC0+Q29kZSA8PCA4KSB8IHAtPlN0cmVhbS5Jbi0+UmVhZChwLT5TdHJlYW0uSW4pOworICByZXR1cm4gKHAtPkNvZGUgPCAweEZGRkZGRkZGKTsKK30KKworc3RhdGljIFVJbnQzMiBSYW5nZURlY19HZXRUaHJlc2hvbGQoQ1BwbWQ4ICpwLCBVSW50MzIgdG90YWwpCit7CisgIHJldHVybiBwLT5Db2RlIC8gKHAtPlJhbmdlIC89IHRvdGFsKTsKK30KKworc3RhdGljIHZvaWQgUmFuZ2VEZWNfRGVjb2RlKENQcG1kOCAqcCwgVUludDMyIHN0YXJ0LCBVSW50MzIgc2l6ZSkKK3sKKyAgc3RhcnQgKj0gcC0+UmFuZ2U7CisgIHAtPkxvdyArPSBzdGFydDsKKyAgcC0+Q29kZSAtPSBzdGFydDsKKyAgcC0+UmFuZ2UgKj0gc2l6ZTsKKworICB3aGlsZSAoKHAtPkxvdyBeIChwLT5Mb3cgKyBwLT5SYW5nZSkpIDwga1RvcCB8fAorICAgICAgKHAtPlJhbmdlIDwga0JvdCAmJiAoKHAtPlJhbmdlID0gKDAgLSBwLT5Mb3cpICYgKGtCb3QgLSAxKSksIDEpKSkKKyAgeworICAgIHAtPkNvZGUgPSAocC0+Q29kZSA8PCA4KSB8IHAtPlN0cmVhbS5Jbi0+UmVhZChwLT5TdHJlYW0uSW4pOworICAgIHAtPlJhbmdlIDw8PSA4OworICAgIHAtPkxvdyA8PD0gODsKKyAgfQorfQorCisjZGVmaW5lIE1BU0soc3ltKSAoKHNpZ25lZCBjaGFyICopY2hhck1hc2spW3N5bV0KKworaW50IFBwbWQ4X0RlY29kZVN5bWJvbChDUHBtZDggKnApCit7CisgIHNpemVfdCBjaGFyTWFza1syNTYgLyBzaXplb2Yoc2l6ZV90KV07CisgIGlmIChwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyAhPSAwKQorICB7CisgICAgQ1BwbWRfU3RhdGUgKnMgPSBQcG1kOF9HZXRTdGF0cyhwLCBwLT5NaW5Db250ZXh0KTsKKyAgICB1bnNpZ25lZCBpOworICAgIFVJbnQzMiBjb3VudCwgaGlDbnQ7CisgICAgaWYgKChjb3VudCA9IFJhbmdlRGVjX0dldFRocmVzaG9sZChwLCBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSkpIDwgKGhpQ250ID0gcy0+RnJlcSkpCisgICAgeworICAgICAgQnl0ZSBzeW1ib2w7CisgICAgICBSYW5nZURlY19EZWNvZGUocCwgMCwgcy0+RnJlcSk7CisgICAgICBwLT5Gb3VuZFN0YXRlID0gczsKKyAgICAgIHN5bWJvbCA9IHMtPlN5bWJvbDsKKyAgICAgIFBwbWQ4X1VwZGF0ZTFfMChwKTsKKyAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorICAgIHAtPlByZXZTdWNjZXNzID0gMDsKKyAgICBpID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHM7CisgICAgZG8KKyAgICB7CisgICAgICBpZiAoKGhpQ250ICs9ICgrK3MpLT5GcmVxKSA+IGNvdW50KQorICAgICAgeworICAgICAgICBCeXRlIHN5bWJvbDsKKyAgICAgICAgUmFuZ2VEZWNfRGVjb2RlKHAsIGhpQ250IC0gcy0+RnJlcSwgcy0+RnJlcSk7CisgICAgICAgIHAtPkZvdW5kU3RhdGUgPSBzOworICAgICAgICBzeW1ib2wgPSBzLT5TeW1ib2w7CisgICAgICAgIFBwbWQ4X1VwZGF0ZTEocCk7CisgICAgICAgIHJldHVybiBzeW1ib2w7CisgICAgICB9CisgICAgfQorICAgIHdoaWxlICgtLWkpOworICAgIGlmIChjb3VudCA+PSBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSkKKyAgICAgIHJldHVybiAtMjsKKyAgICBSYW5nZURlY19EZWNvZGUocCwgaGlDbnQsIHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxIC0gaGlDbnQpOworICAgIFBQTURfU2V0QWxsQml0c0luMjU2Qnl0ZXMoY2hhck1hc2spOworICAgIE1BU0socy0+U3ltYm9sKSA9IDA7CisgICAgaSA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzOworICAgIGRvIHsgTUFTSygoLS1zKS0+U3ltYm9sKSA9IDA7IH0gd2hpbGUgKC0taSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgVUludDE2ICpwcm9iID0gUHBtZDhfR2V0QmluU3VtbShwKTsKKyAgICBpZiAoKChwLT5Db2RlIC8gKHAtPlJhbmdlID4+PSAxNCkpIDwgKnByb2IpKQorICAgIHsKKyAgICAgIEJ5dGUgc3ltYm9sOworICAgICAgUmFuZ2VEZWNfRGVjb2RlKHAsIDAsICpwcm9iKTsKKyAgICAgICpwcm9iID0gKFVJbnQxNilQUE1EX1VQREFURV9QUk9CXzAoKnByb2IpOworICAgICAgc3ltYm9sID0gKHAtPkZvdW5kU3RhdGUgPSBQcG1kOENvbnRleHRfT25lU3RhdGUocC0+TWluQ29udGV4dCkpLT5TeW1ib2w7CisgICAgICBQcG1kOF9VcGRhdGVCaW4ocCk7CisgICAgICByZXR1cm4gc3ltYm9sOworICAgIH0KKyAgICBSYW5nZURlY19EZWNvZGUocCwgKnByb2IsICgxIDw8IDE0KSAtICpwcm9iKTsKKyAgICAqcHJvYiA9IChVSW50MTYpUFBNRF9VUERBVEVfUFJPQl8xKCpwcm9iKTsKKyAgICBwLT5Jbml0RXNjID0gUFBNRDhfa0V4cEVzY2FwZVsqcHJvYiA+PiAxMF07CisgICAgUFBNRF9TZXRBbGxCaXRzSW4yNTZCeXRlcyhjaGFyTWFzayk7CisgICAgTUFTSyhQcG1kOENvbnRleHRfT25lU3RhdGUocC0+TWluQ29udGV4dCktPlN5bWJvbCkgPSAwOworICAgIHAtPlByZXZTdWNjZXNzID0gMDsKKyAgfQorICBmb3IgKDs7KQorICB7CisgICAgQ1BwbWRfU3RhdGUgKnBzWzI1Nl0sICpzOworICAgIFVJbnQzMiBmcmVxU3VtLCBjb3VudCwgaGlDbnQ7CisgICAgQ1BwbWRfU2VlICpzZWU7CisgICAgdW5zaWduZWQgaSwgbnVtLCBudW1NYXNrZWQgPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0czsKKyAgICBkbworICAgIHsKKyAgICAgIHAtPk9yZGVyRmFsbCsrOworICAgICAgaWYgKCFwLT5NaW5Db250ZXh0LT5TdWZmaXgpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHAtPk1pbkNvbnRleHQgPSBQcG1kOF9HZXRDb250ZXh0KHAsIHAtPk1pbkNvbnRleHQtPlN1ZmZpeCk7CisgICAgfQorICAgIHdoaWxlIChwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyA9PSBudW1NYXNrZWQpOworICAgIGhpQ250ID0gMDsKKyAgICBzID0gUHBtZDhfR2V0U3RhdHMocCwgcC0+TWluQ29udGV4dCk7CisgICAgaSA9IDA7CisgICAgbnVtID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHMgLSBudW1NYXNrZWQ7CisgICAgZG8KKyAgICB7CisgICAgICBpbnQgayA9IChpbnQpKE1BU0socy0+U3ltYm9sKSk7CisgICAgICBoaUNudCArPSAocy0+RnJlcSAmIGspOworICAgICAgcHNbaV0gPSBzKys7CisgICAgICBpIC09IGs7CisgICAgfQorICAgIHdoaWxlIChpICE9IG51bSk7CisgICAgCisgICAgc2VlID0gUHBtZDhfTWFrZUVzY0ZyZXEocCwgbnVtTWFza2VkLCAmZnJlcVN1bSk7CisgICAgZnJlcVN1bSArPSBoaUNudDsKKyAgICBjb3VudCA9IFJhbmdlRGVjX0dldFRocmVzaG9sZChwLCBmcmVxU3VtKTsKKyAgICAKKyAgICBpZiAoY291bnQgPCBoaUNudCkKKyAgICB7CisgICAgICBCeXRlIHN5bWJvbDsKKyAgICAgIENQcG1kX1N0YXRlICoqcHBzID0gcHM7CisgICAgICBmb3IgKGhpQ250ID0gMDsgKGhpQ250ICs9ICgqcHBzKS0+RnJlcSkgPD0gY291bnQ7IHBwcysrKTsKKyAgICAgIHMgPSAqcHBzOworICAgICAgUmFuZ2VEZWNfRGVjb2RlKHAsIGhpQ250IC0gcy0+RnJlcSwgcy0+RnJlcSk7CisgICAgICBQcG1kX1NlZV9VcGRhdGUoc2VlKTsKKyAgICAgIHAtPkZvdW5kU3RhdGUgPSBzOworICAgICAgc3ltYm9sID0gcy0+U3ltYm9sOworICAgICAgUHBtZDhfVXBkYXRlMihwKTsKKyAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorICAgIGlmIChjb3VudCA+PSBmcmVxU3VtKQorICAgICAgcmV0dXJuIC0yOworICAgIFJhbmdlRGVjX0RlY29kZShwLCBoaUNudCwgZnJlcVN1bSAtIGhpQ250KTsKKyAgICBzZWUtPlN1bW0gPSAoVUludDE2KShzZWUtPlN1bW0gKyBmcmVxU3VtKTsKKyAgICBkbyB7IE1BU0socHNbLS1pXS0+U3ltYm9sKSA9IDA7IH0gd2hpbGUgKGkgIT0gMCk7CisgIH0KK30KKworLyogSC0+SSBjaGFuZ2VzOgorICBOUzJJbmR4CisgIEdsZXdDb3VudCwgYW5kIEdsdWUgbWV0aG9kCisgIEJpblN1bQorICBTZWUgLyBFc2NGcmVxCisgIENyZWF0ZVN1Y2Nlc3NvcnMgdXBkYXRlcyBtb3JlIHN1ZmZpeCBjb250ZXh0cworICBVcGRhdGVNb2RlbCBjb25zdHMuCisgIFByZXZTdWNjZXNzIFVwZGF0ZQorKi8KKworY29uc3QgSVBwbWQ4IF9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMgPQoreworICAmUHBtZDhfQ29uc3RydWN0LAorICAmUHBtZDhfQWxsb2MsCisgICZQcG1kOF9GcmVlLAorICAmUHBtZDhfSW5pdCwKKyAgJlBwbWQ4X1JhbmdlRGVjX0luaXQsCisgICZQcG1kOF9EZWNvZGVTeW1ib2wsCit9OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDhfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDhfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NGI3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kOF9wcml2YXRlLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qIFBwbWQ4LmggLS0gUFBNZEkgY29kZWMKKzIwMTEtMDEtMjcgOiBJZ29yIFBhdmxvdiA6IFB1YmxpYyBkb21haW4KK1RoaXMgY29kZSBpcyBiYXNlZCBvbjoKKyAgUFBNZCB2YXIuSSAoMjAwMik6IERtaXRyeSBTaGthcmluIDogUHVibGljIGRvbWFpbgorICBDYXJyeWxlc3MgcmFuZ2Vjb2RlciAoMTk5OSk6IERtaXRyeSBTdWJib3RpbiA6IFB1YmxpYyBkb21haW4gKi8KKworI2lmbmRlZiBBUkNISVZFX1BQTUQ4X1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1BQTUQ4X1BSSVZBVEVfSF9JTkNMVURFRAorCisjaW5jbHVkZSAiYXJjaGl2ZV9wcG1kX3ByaXZhdGUuaCIKKworI2RlZmluZSBQUE1EOF9NSU5fT1JERVIgMgorI2RlZmluZSBQUE1EOF9NQVhfT1JERVIgMTYKKworc3RydWN0IENQcG1kOF9Db250ZXh0XzsKKwordHlwZWRlZgorICAjaWZkZWYgUFBNRF8zMkJJVAorICAgIHN0cnVjdCBDUHBtZDhfQ29udGV4dF8gKgorICAjZWxzZQorICAgIFVJbnQzMgorICAjZW5kaWYKKyAgQ1BwbWQ4X0NvbnRleHRfUmVmOworCisjcHJhZ21hIHBhY2socHVzaCwgMSkKKwordHlwZWRlZiBzdHJ1Y3QgQ1BwbWQ4X0NvbnRleHRfCit7CisgIEJ5dGUgTnVtU3RhdHM7CisgIEJ5dGUgRmxhZ3M7CisgIFVJbnQxNiBTdW1tRnJlcTsKKyAgQ1BwbWRfU3RhdGVfUmVmIFN0YXRzOworICBDUHBtZDhfQ29udGV4dF9SZWYgU3VmZml4OworfSBDUHBtZDhfQ29udGV4dDsKKworI3ByYWdtYSBwYWNrKHBvcCkKKworI2RlZmluZSBQcG1kOENvbnRleHRfT25lU3RhdGUocCkgKChDUHBtZF9TdGF0ZSAqKSYocCktPlN1bW1GcmVxKQorCisvKiBUaGUgQlVHIGluIFNoa2FyaW4ncyBjb2RlIGZvciBGUkVFWkUgbW9kZSB3YXMgZml4ZWQsIGJ1dCB0aGF0IGZpeGVkCisgICBjb2RlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb3JpZ2luYWwgY29kZSBmb3Igc29tZSBmaWxlcyBjb21wcmVzc2VkCisgICBpbiBGUkVFWkUgbW9kZS4gU28gd2UgZGlzYWJsZSBGUkVFWkUgbW9kZSBzdXBwb3J0LiAqLworCitlbnVtCit7CisgIFBQTUQ4X1JFU1RPUkVfTUVUSE9EX1JFU1RBUlQsCisgIFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0NVVF9PRkYKKyAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgICwgUFBNRDhfUkVTVE9SRV9NRVRIT0RfRlJFRVpFCisgICNlbmRpZgorfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgQ1BwbWQ4X0NvbnRleHQgKk1pbkNvbnRleHQsICpNYXhDb250ZXh0OworICBDUHBtZF9TdGF0ZSAqRm91bmRTdGF0ZTsKKyAgdW5zaWduZWQgT3JkZXJGYWxsLCBJbml0RXNjLCBQcmV2U3VjY2VzcywgTWF4T3JkZXI7CisgIEludDMyIFJ1bkxlbmd0aCwgSW5pdFJMOyAvKiBtdXN0IGJlIDMyLWJpdCBhdCBsZWFzdCAqLworCisgIFVJbnQzMiBTaXplOworICBVSW50MzIgR2x1ZUNvdW50OworICBCeXRlICpCYXNlLCAqTG9Vbml0LCAqSGlVbml0LCAqVGV4dCwgKlVuaXRzU3RhcnQ7CisgIFVJbnQzMiBBbGlnbk9mZnNldDsKKyAgdW5zaWduZWQgUmVzdG9yZU1ldGhvZDsKKworICAvKiBSYW5nZSBDb2RlciAqLworICBVSW50MzIgUmFuZ2U7CisgIFVJbnQzMiBDb2RlOworICBVSW50MzIgTG93OworICB1bmlvbgorICB7CisgICAgSUJ5dGVJbiAqSW47CisgICAgSUJ5dGVPdXQgKk91dDsKKyAgfSBTdHJlYW07CisKKyAgQnl0ZSBJbmR4MlVuaXRzW1BQTURfTlVNX0lOREVYRVNdOworICBCeXRlIFVuaXRzMkluZHhbMTI4XTsKKyAgQ1BwbWRfVm9pZF9SZWYgRnJlZUxpc3RbUFBNRF9OVU1fSU5ERVhFU107CisgIFVJbnQzMiBTdGFtcHNbUFBNRF9OVU1fSU5ERVhFU107CisKKyAgQnl0ZSBOUzJCU0luZHhbMjU2XSwgTlMySW5keFsyNjBdOworICBDUHBtZF9TZWUgRHVtbXlTZWUsIFNlZVsyNF1bMzJdOworICBVSW50MTYgQmluU3VtbVsyNV1bNjRdOworfSBDUHBtZDg7CisKK3ZvaWQgUHBtZDhfQ29uc3RydWN0KENQcG1kOCAqcCk7CitCb29sIFBwbWQ4X0FsbG9jKENQcG1kOCAqcCwgVUludDMyIHNpemUpOwordm9pZCBQcG1kOF9GcmVlKENQcG1kOCAqcCk7Cit2b2lkIFBwbWQ4X0luaXQoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBtYXhPcmRlciwgdW5zaWduZWQgcmVzdG9yZU1ldGhvZCk7CisjZGVmaW5lIFBwbWQ4X1dhc0FsbG9jYXRlZChwKSAoKHApLT5CYXNlICE9IE5VTEwpCisKKworLyogLS0tLS0tLS0tLSBJbnRlcm5hbCBGdW5jdGlvbnMgLS0tLS0tLS0tLSAqLworCitleHRlcm4gY29uc3QgQnl0ZSBQUE1EOF9rRXhwRXNjYXBlWzE2XTsKKworI2lmZGVmIFBQTURfMzJCSVQKKyAgI2RlZmluZSBQcG1kOF9HZXRQdHIocCwgcHRyKSAocHRyKQorICAjZGVmaW5lIFBwbWQ4X0dldENvbnRleHQocCwgcHRyKSAocHRyKQorICAjZGVmaW5lIFBwbWQ4X0dldFN0YXRzKHAsIGN0eCkgKChjdHgpLT5TdGF0cykKKyNlbHNlCisgICNkZWZpbmUgUHBtZDhfR2V0UHRyKHAsIG9mZnMpICgodm9pZCAqKSgocCktPkJhc2UgKyAob2ZmcykpKQorICAjZGVmaW5lIFBwbWQ4X0dldENvbnRleHQocCwgb2ZmcykgKChDUHBtZDhfQ29udGV4dCAqKVBwbWQ4X0dldFB0cigocCksIChvZmZzKSkpCisgICNkZWZpbmUgUHBtZDhfR2V0U3RhdHMocCwgY3R4KSAoKENQcG1kX1N0YXRlICopUHBtZDhfR2V0UHRyKChwKSwgKChjdHgpLT5TdGF0cykpKQorI2VuZGlmCisKK3ZvaWQgUHBtZDhfVXBkYXRlMShDUHBtZDggKnApOwordm9pZCBQcG1kOF9VcGRhdGUxXzAoQ1BwbWQ4ICpwKTsKK3ZvaWQgUHBtZDhfVXBkYXRlMihDUHBtZDggKnApOwordm9pZCBQcG1kOF9VcGRhdGVCaW4oQ1BwbWQ4ICpwKTsKKworI2RlZmluZSBQcG1kOF9HZXRCaW5TdW1tKHApIFwKKyAgICAmcC0+QmluU3VtbVtwLT5OUzJJbmR4W1BwbWQ4Q29udGV4dF9PbmVTdGF0ZShwLT5NaW5Db250ZXh0KS0+RnJlcSAtIDFdXVsgXAorICAgIHAtPk5TMkJTSW5keFtQcG1kOF9HZXRDb250ZXh0KHAsIHAtPk1pbkNvbnRleHQtPlN1ZmZpeCktPk51bVN0YXRzXSArIFwKKyAgICBwLT5QcmV2U3VjY2VzcyArIHAtPk1pbkNvbnRleHQtPkZsYWdzICsgKChwLT5SdW5MZW5ndGggPj4gMjYpICYgMHgyMCldCisKK0NQcG1kX1NlZSAqUHBtZDhfTWFrZUVzY0ZyZXEoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBudW1NYXNrZWQsIFVJbnQzMiAqc2NhbGUpOworCisKKy8qIC0tLS0tLS0tLS0gRGVjb2RlIC0tLS0tLS0tLS0gKi8KKworQm9vbCBQcG1kOF9SYW5nZURlY19Jbml0KENQcG1kOCAqcCk7CisjZGVmaW5lIFBwbWQ4X1JhbmdlRGVjX0lzRmluaXNoZWRPSyhwKSAoKHApLT5Db2RlID09IDApCitpbnQgUHBtZDhfRGVjb2RlU3ltYm9sKENQcG1kOCAqcCk7IC8qIHJldHVybnM6IC0xIGFzIEVuZE1hcmtlciwgLTIgYXMgRGF0YUVycm9yICovCisKKy8qIC0tLS0tLS0tLS0gRW5jb2RlIC0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBQcG1kOF9SYW5nZUVuY19Jbml0KHApIHsgKHApLT5Mb3cgPSAwOyAocCktPlJhbmdlID0gMHhGRkZGRkZGRjsgfQordm9pZCBQcG1kOF9SYW5nZUVuY19GbHVzaERhdGEoQ1BwbWQ4ICpwKTsKK3ZvaWQgUHBtZDhfRW5jb2RlU3ltYm9sKENQcG1kOCAqcCwgaW50IHN5bWJvbCk7IC8qIHN5bWJvbCA9IC0xIG1lYW5zIEVuZE1hcmtlciAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBCYXNlIEZ1bmN0aW9ucyAqLworICB2b2lkICgqUHBtZDhfQ29uc3RydWN0KShDUHBtZDggKnApOworICBCb29sICgqUHBtZDhfQWxsb2MpKENQcG1kOCAqcCwgVUludDMyIHNpemUpOworICB2b2lkICgqUHBtZDhfRnJlZSkoQ1BwbWQ4ICpwKTsKKyAgdm9pZCAoKlBwbWQ4X0luaXQpKENQcG1kOCAqcCwgdW5zaWduZWQgbWF4X29yZGVyLCB1bnNpZ25lZCByZXN0b3JlX21ldGhvZCk7CisgICNkZWZpbmUgUHBtZDdfV2FzQWxsb2NhdGVkKHApICgocCktPkJhc2UgIT0gTlVMTCkKKworICAvKiBEZWNvZGUgRnVuY3Rpb25zICovCisgIGludCAoKlBwbWQ4X1JhbmdlRGVjX0luaXQpKENQcG1kOCAqcCk7CisgIGludCAoKlBwbWQ4X0RlY29kZVN5bWJvbCkoQ1BwbWQ4ICpwKTsKK30gSVBwbWQ4OworCitleHRlcm4gY29uc3QgSVBwbWQ4IF9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZF9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kX3ByaXZhdGUuaAppbmRleCBhODNiODUxLi41ODI4MDNlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kX3ByaXZhdGUuaApAQCAtMiwxMyArMiwxMyBAQAogMjAxMC0wMy0xMiA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbgogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIFBQTWQgdmFyLkggKDIwMDEpOiBEbWl0cnkgU2hrYXJpbiA6IFB1YmxpYyBkb21haW4gKi8KIAorI2lmbmRlZiBBUkNISVZFX1BQTURfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfUFBNRF9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9QUE1EX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX1BQTURfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlIDxzdGRkZWYuaD4KIAogI2luY2x1ZGUgImFyY2hpdmVfcmVhZF9wcml2YXRlLmgiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcml2YXRlLmgKaW5kZXggNGI0YmU5Ny4uOTM3YTg3YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3ByaXZhdGUuaApAQCAtMjUsMTMgKzI1LDEzIEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX3ByaXZhdGUuaCAyMDEwOTggMjAwOS0xMi0yOCAwMjo1ODoxNFoga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9QUklWQVRFX0hfSU5DTFVERUQKLQogI2lmIEhBVkVfSUNPTlZfSAogI2luY2x1ZGUgPGljb252Lmg+CiAjZW5kaWYKQEAgLTE1Myw2ICsxNTMsMTEgQEAKIAogdm9pZAlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyhpbnQgZmQpOwogaW50CV9fYXJjaGl2ZV9ta3RlbXAoY29uc3QgY2hhciAqdG1wZGlyKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKK2ludAlfX2FyY2hpdmVfbWtzdGVtcCh3Y2hhcl90ICp0ZW1wbGF0ZSk7CisjZWxzZQoraW50CV9fYXJjaGl2ZV9ta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKTsKKyNlbmRpZgogCiBpbnQJX19hcmNoaXZlX2NsZWFuKHN0cnVjdCBhcmNoaXZlICopOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYW5kb21fcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmFuZG9tX3ByaXZhdGUuaAppbmRleCBjNDE0Nzc5Li4wOGI5MWIzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYW5kb21fcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JhbmRvbV9wcml2YXRlLmgKQEAgLTIzLDEzICsyMywxMyBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfUkFORE9NX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1JBTkRPTV9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9SQU5ET01fUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfUkFORE9NX1BSSVZBVEVfSF9JTkNMVURFRAotCiAvKiBSYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gKi8KIGludCBhcmNoaXZlX3JhbmRvbSh2b2lkICpidWYsIHNpemVfdCBuYnl0ZXMpOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYi5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmIuaAppbmRleCA0NTYyZTllLi44ODUxZjEwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYi5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JiLmgKQEAgLTI4LDggKzI4LDkgQEAKICAqCiAgKiBCYXNlZCBvbiBOZXRCU0Q6IHJiLmgsdiAxLjEzIDIwMDkvMDgvMTYgMTA6NTc6MDEgeWFtdCBFeHAKICAqLwotI2lmbmRlZiBBUkNISVZFX1JCX0hfCi0jZGVmaW5lCUFSQ0hJVkVfUkJfSF8KKworI2lmbmRlZiBBUkNISVZFX1JCX0hfSU5DTFVERUQKKyNkZWZpbmUJQVJDSElWRV9SQl9IX0lOQ0xVREVECiAKIHN0cnVjdCBhcmNoaXZlX3JiX25vZGUgewogCXN0cnVjdCBhcmNoaXZlX3JiX25vZGUgKnJiX25vZGVzWzJdOwpAQCAtNDgsMTIgKzQ5LDI0IEBACiAgICAgX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgoVCksIE5VTEwsIEFSQ0hJVkVfUkJfRElSX0xFRlQpCiAjZGVmaW5lIEFSQ0hJVkVfUkJfVFJFRV9NQVgoVCkgXAogICAgIF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoKFQpLCBOVUxMLCBBUkNISVZFX1JCX0RJUl9SSUdIVCkKKyNkZWZpbmUgQVJDSElWRV9SQl9UUkVFX05FWFQoVCwgTikgXAorICAgIF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoKFQpLCAoTiksIEFSQ0hJVkVfUkJfRElSX1JJR0hUKQorI2RlZmluZSBBUkNISVZFX1JCX1RSRUVfUFJFVihULCBOKSBcCisgICAgX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgoVCksIChOKSwgQVJDSElWRV9SQl9ESVJfTEVGVCkKICNkZWZpbmUgQVJDSElWRV9SQl9UUkVFX0ZPUkVBQ0goTiwgVCkgXAogICAgIGZvciAoKE4pID0gQVJDSElWRV9SQl9UUkVFX01JTihUKTsgKE4pOyBcCi0JKE4pID0gX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgoVCksIChOKSwgQVJDSElWRV9SQl9ESVJfUklHSFQpKQorCShOKSA9IEFSQ0hJVkVfUkJfVFJFRV9ORVhUKChUKSwgKE4pKSkKICNkZWZpbmUgQVJDSElWRV9SQl9UUkVFX0ZPUkVBQ0hfUkVWRVJTRShOLCBUKSBcCiAgICAgZm9yICgoTikgPSBBUkNISVZFX1JCX1RSRUVfTUFYKFQpOyAoTik7IFwKLQkoTikgPSBfX2FyY2hpdmVfcmJfdHJlZV9pdGVyYXRlKChUKSwgKE4pLCBBUkNISVZFX1JCX0RJUl9MRUZUKSkKKwkoTikgPSBBUkNISVZFX1JCX1RSRUVfUFJFVigoVCksIChOKSkpCisjZGVmaW5lIEFSQ0hJVkVfUkJfVFJFRV9GT1JFQUNIX1NBRkUoTiwgVCwgUykgXAorICAgIGZvciAoKE4pID0gQVJDSElWRV9SQl9UUkVFX01JTihUKTsgXAorCShOKSAmJiAoKFMpID0gQVJDSElWRV9SQl9UUkVFX05FWFQoKFQpLCAoTikpLCAxKTsgXAorCShOKSA9IChTKSkKKyNkZWZpbmUgQVJDSElWRV9SQl9UUkVFX0ZPUkVBQ0hfUkVWRVJTRV9TQUZFKE4sIFQsIFMpIFwKKyAgICBmb3IgKChOKSA9IEFSQ0hJVkVfUkJfVFJFRV9NQVgoVCk7IFwKKyAgICAgICAgKE4pICYmICgoUykgPSBBUkNISVZFX1JCX1RSRUVfUFJFVigoVCksIChOKSksIDEpOyBcCisgICAgICAgIChOKSA9IChTKSkKIAogLyoKICAqIGFyY2hpdmVfcmJ0b19jb21wYXJlX25vZGVzX2ZuOgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC4zCmluZGV4IGQzN2U3MzIuLmNiZWRkMGEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLjMKQEAgLTE1NSw3ICsxNTUsNyBAQAogLkZuIGFyY2hpdmVfcmVhZF9mcmVlCiB0byByZWxlYXNlIGFsbCByZXNvdXJjZXMsIGluY2x1ZGluZyBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgbGlicmFyeS4KIC5cIgotLlNoIEVYQU1QTEUKKy5TaCBFWEFNUExFUwogVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgbGlicmFyeS4KIEluIHRoaXMgZXhhbXBsZSwKIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIHNpbXBseSB3cmFwcGVycyBhcm91bmQgdGhlIHN0YW5kYXJkCkBAIC0yMTcsMTYgKzIxNywxNiBAQAogLlwiIC5TaCBFUlJPUlMKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAotLlhyIGFyY2hpdmVfcmVhZF9uZXcgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2V4dHJhY3QgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9oZWFkZXIgMyAsCisuWHIgYXJjaGl2ZV9yZWFkX25ldyAzICwKIC5YciBhcmNoaXZlX3JlYWRfb3BlbiAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgdGFyIDUKIC5TaCBISVNUT1JZCiBUaGUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuYwppbmRleCAwZTU2ZTc2Li40YTkzM2IyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAJfQogCWEtPmNsaWVudC5kYXRhc2V0ID0gKHN0cnVjdCBhcmNoaXZlX3JlYWRfZGF0YV9ub2RlICopcDsKLQlmb3IgKGkgPSBhLT5jbGllbnQubm9kZXMgLSAxOyBpID4gaWluZGV4ICYmIGkgPiAwOyBpLS0pIHsKKwlmb3IgKGkgPSBhLT5jbGllbnQubm9kZXMgLSAxOyBpID4gaWluZGV4OyBpLS0pIHsKIAkJYS0+Y2xpZW50LmRhdGFzZXRbaV0uZGF0YSA9IGEtPmNsaWVudC5kYXRhc2V0W2ktMV0uZGF0YTsKIAkJYS0+Y2xpZW50LmRhdGFzZXRbaV0uYmVnaW5fcG9zaXRpb24gPSAtMTsKIAkJYS0+Y2xpZW50LmRhdGFzZXRbaV0udG90YWxfc2l6ZSA9IC0xOwpAQCAtNjExLDYgKzYxMSwxNSBAQAogCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiB9CiAKK2ludAorX19hcmNoaXZlX3JlYWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSkKK3sKKwlpZiAoYS0+ZmlsdGVyLT5yZWFkX2hlYWRlcikKKwkJcmV0dXJuIGEtPmZpbHRlci0+cmVhZF9oZWFkZXIoYS0+ZmlsdGVyLCBlbnRyeSk7CisJZWxzZQorCQlyZXR1cm4gKEFSQ0hJVkVfT0spOworfQorCiAvKgogICogUmVhZCBoZWFkZXIgb2YgbmV4dCBlbnRyeS4KICAqLwpAQCAtODM1LDcgKzg0NCw4IEBACiAJZGVzdCA9IChjaGFyICopYnVmZjsKIAogCXdoaWxlIChzID4gMCkgewotCQlpZiAoYS0+cmVhZF9kYXRhX3JlbWFpbmluZyA9PSAwKSB7CisJCWlmIChhLT5yZWFkX2RhdGFfb2Zmc2V0ID09IGEtPnJlYWRfZGF0YV9vdXRwdXRfb2Zmc2V0ICYmCisJCSAgICBhLT5yZWFkX2RhdGFfcmVtYWluaW5nID09IDApIHsKIAkJCXJlYWRfYnVmID0gYS0+cmVhZF9kYXRhX2Jsb2NrOwogCQkJYS0+cmVhZF9kYXRhX2lzX3Bvc2l4X3JlYWQgPSAxOwogCQkJYS0+cmVhZF9kYXRhX3JlcXVlc3RlZCA9IHM7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2FkZF9wYXNzcGhyYXNlLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2FkZF9wYXNzcGhyYXNlLjMKaW5kZXggOGIyNDJlYS4uY2E2MGQ0ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfYWRkX3Bhc3NwaHJhc2UuMwpAQCAtNTksMTYgKzU5LDE2IEBACiB3aWxsIGJlIHJldHVybmVkLgogT3RoZXJ3aXNlLAogLkNtIEFSQ0hJVkVfT0sKLXdpbGwgYmUgcmV0dXJuZWQuIAord2lsbCBiZSByZXR1cm5lZC4KIC5JdCBGbiBhcmNoaXZlX3JlYWRfc2V0X3Bhc3NwaHJhc2VfY2FsbGJhY2sKLVJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIHRvIGdldCBhIHBhc3NwaHJhc2UgCi1mb3IgZGVjcnB0aW9uIGFmdGVyIHRyeWluZyBhbGwgcGFzc3BocmFzZXMgcmVnaXN0ZXJlZCBieSB0aGUKK1JlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgdG8gZ2V0IGEgcGFzc3BocmFzZSAKK2ZvciBkZWNyeXB0aW9uIGFmdGVyIHRyeWluZyBhbGwgdGhlIHBhc3NwaHJhc2VzIHJlZ2lzdGVyZWQgYnkgdGhlCiAuRm4gYXJjaGl2ZV9yZWFkX2FkZF9wYXNzcGhyYXNlCiBmdW5jdGlvbiBmYWlsZWQuCiAuRWwKIC5cIiAuU2ggRVJST1JTCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCi0uWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMKKy5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2RhdGEuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGF0YS4zCmluZGV4IGMxYmMxNWQuLjc4YzBjOTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGF0YS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGF0YS4zCkBAIC0yOCw3ICsyOCw3IEBACiAuRHQgQVJDSElWRV9SRUFEX0RBVEEgMwogLk9zCiAuU2ggTkFNRQotLk5tIGFyY2hpdmVfcmVhZF9kYXRhCisuTm0gYXJjaGl2ZV9yZWFkX2RhdGEgLAogLk5tIGFyY2hpdmVfcmVhZF9kYXRhX2Jsb2NrICwKIC5ObSBhcmNoaXZlX3JlYWRfZGF0YV9za2lwICwKIC5ObSBhcmNoaXZlX3JlYWRfZGF0YV9pbnRvX2ZkCkBAIC0xMTgsNyArMTE4LDYgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9leHRyYWN0IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9maWx0ZXIgMyAsCkBAIC0xMjcsNCArMTI2LDUgQEAKIC5YciBhcmNoaXZlX3JlYWRfb3BlbiAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlzay4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrLjMKaW5kZXggMDI3ZjYzYy4uODJkNmE1YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrLjMKQEAgLTk5LDkgKzk5LDEwIEBACiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggImluZGVudCIKIC5JdCBDbSBBUkNISVZFX1JFQURESVNLX0hPTk9SX05PRFVNUAogU2tpcCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB0aGUgbm9kdW1wIGZpbGUgYXR0cmlidXRlIChmaWxlIGZsYWcpIHNldC4KLUJ5IGRlZmF1bHQsIHRoZSBub2R1bXAgZmlsZSBhdHJyaWJ1dGUgaXMgaWdub3JlZC4KK0J5IGRlZmF1bHQsIHRoZSBub2R1bXAgZmlsZSBhdHRyaWJ1dGUgaXMgaWdub3JlZC4KIC5JdCBDbSBBUkNISVZFX1JFQURESVNLX01BQ19DT1BZRklMRQotTWFjIE9TIFggc3BlY2lmaWMuIFJlYWQgbWV0YWRhdGEgKEFDTHMgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMpIHdpdGgKK01hYyBPUyBYIHNwZWNpZmljLgorUmVhZCBtZXRhZGF0YSAoQUNMcyBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcykgd2l0aAogLlhyIGNvcHlmaWxlIDMgLgogQnkgZGVmYXVsdCwgbWV0YWRhdGEgaXMgcmVhZCB1c2luZwogLlhyIGNvcHlmaWxlIDMgLgpAQCAtMTIwLDcgKzEyMSw3IEBACiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBmaWxlIGF0dHJpYnV0ZXMuCiAuSXQgQ20gQVJDSElWRV9SRUFERElTS19OT19UUkFWRVJTRV9NT1VOVFMKIERvIG5vdCB0cmF2ZXJzZSBtb3VudCBwb2ludHMuCi1CeSBkZWZhdXQsIG1vaW50IHBvaW50cyBhcmUgdHJhdmVyc2VkLgorQnkgZGVmYXVsdCwgbW91bnQgcG9pbnRzIGFyZSB0cmF2ZXJzZWQuCiAuSXQgQ20gQVJDSElWRV9SRUFERElTS19OT19YQVRUUgogRG8gbm90IHJlYWQgZXh0ZW5kZWQgZmlsZSBhdHRyaWJ1dGVzICh4YXR0cnMpLgogQnkgZGVmYXVsdCwgZXh0ZW5kZWQgZmlsZSBhdHRyaWJ1dGVzIGFyZSByZWFkIGZyb20gZGlzay4KQEAgLTIxNiw3ICsyMTcsNyBAQAogKEZvciBleGFtcGxlLCBkaXJlY3RvcnkgdHJhdmVyc2FsIGxpYnJhcmllcyBvZnRlbiBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uKQogLlBwCiBXaGVyZSBuZWNlc3NhcnksIHVzZXIgYW5kIGdyb3VwIGlkcyBhcmUgY29udmVydGVkIHRvIHVzZXIgYW5kIGdyb3VwIG5hbWVzCi11c2luZyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgbG9va3VwIGZ1bmN0aW9ucyBhYm92ZS4KK3VzaW5nIHRoZSBjdXJyZW50bHktcmVnaXN0ZXJlZCBsb29rdXAgZnVuY3Rpb25zIGFib3ZlLgogVGhpcyBhZmZlY3RzIHRoZSBmaWxlIG93bmVyc2hpcCBmaWVsZHMgYW5kIEFDTCB2YWx1ZXMgaW4gdGhlCiAuVG4gc3RydWN0IGFyY2hpdmVfZW50cnkKIG9iamVjdC4KQEAgLTIyNiw3ICsyMjcsNyBAQAogb2JqZWN0IGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gb2YgdGhlIGxpYnJhcnkgY2FuIGJlIGZvdW5kIGluIHRoZQogLlhyIGxpYmFyY2hpdmUgMwogb3ZlcnZpZXcuCi0uU2ggRVhBTVBMRQorLlNoIEVYQU1QTEVTCiBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBsaWJyYXJ5IGJ5CiBzaG93aW5nIGhvdyB0byB1c2UgaXQgdG8gY29weSBhbiBpdGVtIG9uIGRpc2sgaW50byBhbiBhcmNoaXZlLgogLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50CkBAIC0yOTEsMTEgKzI5MiwxMSBAQAogZnVuY3Rpb25zLgogLlwiCiAuU2ggU0VFIEFMU08KKy5YciB0YXIgMSAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZGlzayAzICwKLS5YciB0YXIgMSAsCiAuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfZW50cnlfZnJvbV9maWxlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfZW50cnlfZnJvbV9maWxlLmMKaW5kZXggMTc4NmNmZi4uMmE4Y2VjOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX2VudHJ5X2Zyb21fZmlsZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19lbnRyeV9mcm9tX2ZpbGUuYwpAQCAtMTYzLDYgKzE2Myw5IEBACiAJaW50IGluaXRpYWxfZmQgPSBmZDsKIAlpbnQgciwgcjE7CiAKKwlhcmNoaXZlX2NoZWNrX21hZ2ljKF9hLCBBUkNISVZFX1JFQURfRElTS19NQUdJQywgQVJDSElWRV9TVEFURV9BTlksCisJCSJhcmNoaXZlX3JlYWRfZGlza19lbnRyeV9mcm9tX2ZpbGUiKTsKKwogCWFyY2hpdmVfY2xlYXJfZXJyb3IoX2EpOwogCXBhdGggPSBhcmNoaXZlX2VudHJ5X3NvdXJjZXBhdGgoZW50cnkpOwogCWlmIChwYXRoID09IE5VTEwpCkBAIC0xODgsNyArMTkxLDcgQEAKIAkJCQl9CiAJCQl9IGVsc2UKICNlbmRpZgotCQkJaWYgKHN0YXQocGF0aCwgJnMpICE9IDApIHsKKwkJCWlmIChsYV9zdGF0KHBhdGgsICZzKSAhPSAwKSB7CiAJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAogCQkJCSAgICAiQ2FuJ3Qgc3RhdCAlcyIsIHBhdGgpOwogCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwpAQCAtMjQ2LDExICsyNDksMTEgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9SRUFETElOSykgfHwgZGVmaW5lZChIQVZFX1JFQURMSU5LQVQpCiAJaWYgKFNfSVNMTksoc3QtPnN0X21vZGUpKSB7Ci0JCXNpemVfdCBsaW5rYnVmZmVyX2xlbiA9IHN0LT5zdF9zaXplICsgMTsKKwkJc2l6ZV90IGxpbmtidWZmZXJfbGVuID0gc3QtPnN0X3NpemU7CiAJCWNoYXIgKmxpbmtidWZmZXI7CiAJCWludCBsbmtsZW47CiAKLQkJbGlua2J1ZmZlciA9IG1hbGxvYyhsaW5rYnVmZmVyX2xlbik7CisJCWxpbmtidWZmZXIgPSBtYWxsb2MobGlua2J1ZmZlcl9sZW4gKyAxKTsKIAkJaWYgKGxpbmtidWZmZXIgPT0gTlVMTCkgewogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKIAkJCSAgICAiQ291bGRuJ3QgcmVhZCBsaW5rIGRhdGEiKTsKQEAgLTI3Nyw3ICsyODAsNyBAQAogCQkJZnJlZShsaW5rYnVmZmVyKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwogCQl9Ci0JCWxpbmtidWZmZXJbbG5rbGVuXSA9IDA7CisJCWxpbmtidWZmZXJbbG5rbGVuXSA9ICdcMCc7CiAJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmsoZW50cnksIGxpbmtidWZmZXIpOwogCQlmcmVlKGxpbmtidWZmZXIpOwogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wb3NpeC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3Bvc2l4LmMKaW5kZXggY2RmNzU0MS4uNTJmZWM3YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3Bvc2l4LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3Bvc2l4LmMKQEAgLTY5NCw2ICs2OTQsNyBAQAogCXN0cnVjdCB0cmVlICp0ID0gYS0+dHJlZTsKIAlpbnQgcjsKIAlzc2l6ZV90IGJ5dGVzOworCWludDY0X3Qgc3BhcnNlX2J5dGVzOwogCXNpemVfdCBidWZmYnl0ZXM7CiAJaW50IGVtcHR5X3NwYXJzZV9yZWdpb24gPSAwOwogCkBAIC03MjgsMjcgKzcyOSwyMyBAQAogCQlpZiAoKHQtPmZsYWdzICYgbmVlZHNSZXN0b3JlVGltZXMpICE9IDAgJiYKIAkJICAgIHQtPnJlc3RvcmVfdGltZS5ub2F0aW1lID09IDApCiAJCQlmbGFncyB8PSBPX05PQVRJTUU7Ci0JCWRvIHsKICNlbmRpZgotCQkJdC0+ZW50cnlfZmQgPSBvcGVuX29uX2N1cnJlbnRfZGlyKHQsCi0JCQkgICAgdHJlZV9jdXJyZW50X2FjY2Vzc19wYXRoKHQpLCBmbGFncyk7Ci0JCQlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyh0LT5lbnRyeV9mZCk7CisJCXQtPmVudHJ5X2ZkID0gb3Blbl9vbl9jdXJyZW50X2Rpcih0LAorCQkgICAgdHJlZV9jdXJyZW50X2FjY2Vzc19wYXRoKHQpLCBmbGFncyk7CisJCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKHQtPmVudHJ5X2ZkKTsKICNpZiBkZWZpbmVkKE9fTk9BVElNRSkKLQkJCS8qCi0JCQkgKiBXaGVuIHdlIGRpZCBvcGVuIHRoZSBmaWxlIHdpdGggT19OT0FUSU1FIGZsYWcsCi0JCQkgKiBpZiBzdWNjZXNzZnVsLCBzZXQgMSB0byB0LT5yZXN0b3JlX3RpbWUubm9hdGltZQotCQkJICogbm90IHRvIHJlc3RvcmUgYW4gYXRpbWUgb2YgdGhlIGZpbGUgbGF0ZXIuCi0JCQkgKiBpZiBmYWlsZWQgYnkgRVBFUk0sIHJldHJ5IGl0IHdpdGhvdXQgT19OT0FUSU1FIGZsYWcuCi0JCQkgKi8KLQkJCWlmIChmbGFncyAmIE9fTk9BVElNRSkgewotCQkJCWlmICh0LT5lbnRyeV9mZCA+PSAwKQotCQkJCQl0LT5yZXN0b3JlX3RpbWUubm9hdGltZSA9IDE7Ci0JCQkJZWxzZSBpZiAoZXJybm8gPT0gRVBFUk0pIHsKLQkJCQkJZmxhZ3MgJj0gfk9fTk9BVElNRTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQl9IHdoaWxlICgwKTsKKwkJLyoKKwkJICogV2hlbiB3ZSBkaWQgb3BlbiB0aGUgZmlsZSB3aXRoIE9fTk9BVElNRSBmbGFnLAorCQkgKiBpZiBzdWNjZXNzZnVsLCBzZXQgMSB0byB0LT5yZXN0b3JlX3RpbWUubm9hdGltZQorCQkgKiBub3QgdG8gcmVzdG9yZSBhbiBhdGltZSBvZiB0aGUgZmlsZSBsYXRlci4KKwkJICogaWYgZmFpbGVkIGJ5IEVQRVJNLCByZXRyeSBpdCB3aXRob3V0IE9fTk9BVElNRSBmbGFnLgorCQkgKi8KKwkJaWYgKGZsYWdzICYgT19OT0FUSU1FKSB7CisJCQlpZiAodC0+ZW50cnlfZmQgPj0gMCkKKwkJCQl0LT5yZXN0b3JlX3RpbWUubm9hdGltZSA9IDE7CisJCQllbHNlIGlmIChlcnJubyA9PSBFUEVSTSkKKwkJCQlmbGFncyAmPSB+T19OT0FUSU1FOworCQl9CiAjZW5kaWYKIAkJaWYgKHQtPmVudHJ5X2ZkIDwgMCkgewogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLApAQCAtNzkyLDkgKzc4OSw5IEBACiAJCQlhLT5hcmNoaXZlLnN0YXRlID0gQVJDSElWRV9TVEFURV9GQVRBTDsKIAkJCWdvdG8gYWJvcnRfcmVhZF9kYXRhOwogCQl9Ci0JCWJ5dGVzID0gdC0+Y3VycmVudF9zcGFyc2UtPm9mZnNldCAtIHQtPmVudHJ5X3RvdGFsOwotCQl0LT5lbnRyeV9yZW1haW5pbmdfYnl0ZXMgLT0gYnl0ZXM7Ci0JCXQtPmVudHJ5X3RvdGFsICs9IGJ5dGVzOworCQlzcGFyc2VfYnl0ZXMgPSB0LT5jdXJyZW50X3NwYXJzZS0+b2Zmc2V0IC0gdC0+ZW50cnlfdG90YWw7CisJCXQtPmVudHJ5X3JlbWFpbmluZ19ieXRlcyAtPSBzcGFyc2VfYnl0ZXM7CisJCXQtPmVudHJ5X3RvdGFsICs9IHNwYXJzZV9ieXRlczsKIAl9CiAKIAkvKgpAQCAtODU2LDcgKzg1MywxMiBAQAogCWNvbnN0IHN0cnVjdCBzdGF0ICpzdDsgLyogaW5mbyB0byB1c2UgZm9yIHRoaXMgZW50cnkgKi8KIAljb25zdCBzdHJ1Y3Qgc3RhdCAqbHN0Oy8qIGxzdGF0KCkgaW5mb3JtYXRpb24gKi8KIAljb25zdCBjaGFyICpuYW1lOwotCWludCBkZXNjZW5kLCByOworCWludCBkZWxheWVkLCBkZWxheWVkX2Vycm5vLCBkZXNjZW5kLCByOworCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBkZWxheWVkX3N0cjsKKworCWRlbGF5ZWQgPSBBUkNISVZFX09LOworCWRlbGF5ZWRfZXJybm8gPSAwOworCWFyY2hpdmVfc3RyaW5nX2luaXQoJmRlbGF5ZWRfc3RyKTsKIAogCXN0ID0gTlVMTDsKIAlsc3QgPSBOVUxMOwpAQCAtODg1LDE0ICs4ODcsMjYgQEAKIAkJY2FzZSBUUkVFX1JFR1VMQVI6CiAJCQlsc3QgPSB0cmVlX2N1cnJlbnRfbHN0YXQodCk7CiAJCQlpZiAobHN0ID09IE5VTEwpIHsKKwkJCSAgICBpZiAoZXJybm8gPT0gRU5PRU5UICYmIHQtPmRlcHRoID4gMCkgeworCQkJCWRlbGF5ZWQgPSBBUkNISVZFX1dBUk47CisJCQkJZGVsYXllZF9lcnJubyA9IGVycm5vOworCQkJCWlmIChkZWxheWVkX3N0ci5sZW5ndGggPT0gMCkgeworCQkJCQlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKCZkZWxheWVkX3N0ciwKKwkJCQkJICAgICIlcyIsIHRyZWVfY3VycmVudF9wYXRoKHQpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKCZkZWxheWVkX3N0ciwKKwkJCQkJICAgICIgJXMiLCB0cmVlX2N1cnJlbnRfcGF0aCh0KSk7CisJCQkJfQorCQkJICAgIH0gZWxzZSB7CiAJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAogCQkJCSAgICAiJXM6IENhbm5vdCBzdGF0IiwKIAkJCQkgICAgdHJlZV9jdXJyZW50X3BhdGgodCkpOwogCQkJCXRyZWVfZW50ZXJfaW5pdGlhbF9kaXIodCk7CiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisJCQkgICAgfQogCQkJfQogCQkJYnJlYWs7Ci0JCX0JCisJCX0KIAl9IHdoaWxlIChsc3QgPT0gTlVMTCk7CiAKICNpZmRlZiBfX0FQUExFX18KQEAgLTEwODMsNiArMTA5NywxNyBAQAogCXIgPSBhcmNoaXZlX3JlYWRfZGlza19lbnRyeV9mcm9tX2ZpbGUoJihhLT5hcmNoaXZlKSwgZW50cnksCiAJCXQtPmVudHJ5X2ZkLCBzdCk7CiAKKwlpZiAociA9PSBBUkNISVZFX09LKSB7CisJCXIgPSBkZWxheWVkOworCQlpZiAociAhPSBBUkNISVZFX09LKSB7CisJCQlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKCZkZWxheWVkX3N0ciwgIjogJXMiLAorCQkJICAgICJGaWxlIHJlbW92ZWQgYmVmb3JlIHdlIHJlYWQgaXQiKTsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCYoYS0+YXJjaGl2ZSksIGRlbGF5ZWRfZXJybm8sCisJCQkgICAgIiVzIiwgZGVsYXllZF9zdHIucyk7CisJCX0KKwl9CisJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZGVsYXllZF9zdHIpOworCiAJcmV0dXJuIChyKTsKIH0KIApAQCAtMTExNCw2ICsxMTM5LDggQEAKIAkJdC0+ZW50cnlfZmQgPSAtMTsKIAl9CiAKKwlhcmNoaXZlX2VudHJ5X2NsZWFyKGVudHJ5KTsKKwogCWZvciAoOzspIHsKIAkJciA9IG5leHRfZW50cnkoYSwgdCwgZW50cnkpOwogCQlpZiAodC0+ZW50cnlfZmQgPj0gMCkgewpAQCAtMTI2NiwxMCArMTI5MywyMyBAQAogCWlmICh0LT52aXNpdF90eXBlICE9IFRSRUVfUkVHVUxBUiB8fCAhdC0+ZGVzY2VuZCkKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAorCS8qCisJICogV2UgbXVzdCBub3QgdHJlYXQgdGhlIGluaXRpYWwgc3BlY2lmaWVkIHBhdGggYXMgYSBwaHlzaWNhbCBkaXIsCisJICogYmVjYXVzZSBpZiB3ZSBkbyB0aGVuIHdlIHdpbGwgdHJ5IGFuZCBhc2NlbmQgb3V0IG9mIGl0IGJ5IG9wZW5pbmcKKwkgKiAiLi4iIHdoaWNoIGlzIChhKSB3cm9uZyBhbmQgKGIpIGNhdXNlcyBzcHVyaW91cyBwZXJtaXNzaW9ucyBlcnJvcnMKKwkgKiBpZiAiLi4iIGlzIG5vdCByZWFkYWJsZSBieSB1cy4gSW5zdGVhZCwgdHJlYXQgaXQgYXMgaWYgaXQgd2VyZSBhCisJICogc3ltbGluay4gKFRoaXMgdXNlcyBhbiBleHRyYSBmZCwgYnV0IGl0IGNhbiBvbmx5IGhhcHBlbiBvbmNlIGF0IHRoZQorCSAqIHRvcCBsZXZlbCBvZiBhIHRyYXZlcnNlLikgQnV0IHdlIGNhbid0IG5lY2Vzc2FyaWx5IGFzc3VtZSB0LT5zdCBpcworCSAqIHZhbGlkIGhlcmUgKHRob3VnaCB0LT5sc3QgaXMpLCB3aGljaCBjb21wbGljYXRlcyB0aGUgbG9naWMgYQorCSAqIGxpdHRsZS4KKwkgKi8KIAlpZiAodHJlZV9jdXJyZW50X2lzX3BoeXNpY2FsX2Rpcih0KSkgewogCQl0cmVlX3B1c2godCwgdC0+YmFzZW5hbWUsIHQtPmN1cnJlbnRfZmlsZXN5c3RlbV9pZCwKIAkJICAgIHQtPmxzdC5zdF9kZXYsIHQtPmxzdC5zdF9pbm8sICZ0LT5yZXN0b3JlX3RpbWUpOwotCQl0LT5zdGFjay0+ZmxhZ3MgfD0gaXNEaXI7CisJCWlmICh0LT5zdGFjay0+cGFyZW50LT5wYXJlbnQgIT0gTlVMTCkKKwkJCXQtPnN0YWNrLT5mbGFncyB8PSBpc0RpcjsKKwkJZWxzZQorCQkJdC0+c3RhY2stPmZsYWdzIHw9IGlzRGlyTGluazsKIAl9IGVsc2UgaWYgKHRyZWVfY3VycmVudF9pc19kaXIodCkpIHsKIAkJdHJlZV9wdXNoKHQsIHQtPmJhc2VuYW1lLCB0LT5jdXJyZW50X2ZpbGVzeXN0ZW1faWQsCiAJCSAgICB0LT5zdC5zdF9kZXYsIHQtPnN0LnN0X2lubywgJnQtPnJlc3RvcmVfdGltZSk7CkBAIC0yMTIyLDYgKzIxNjIsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgdHJlZSAqCiB0cmVlX3Jlb3BlbihzdHJ1Y3QgdHJlZSAqdCwgY29uc3QgY2hhciAqcGF0aCwgaW50IHJlc3RvcmVfdGltZSkKIHsKKyNpZiBkZWZpbmVkKE9fUEFUSCkKKwkvKiBMaW51eCAqLworCWNvbnN0IGludCBvX2ZsYWcgPSBPX1BBVEg7CisjZWxpZiBkZWZpbmVkKE9fU0VBUkNIKQorCS8qIFN1bk9TICovCisJY29uc3QgaW50IG9fZmxhZyA9IE9fU0VBUkNIOworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChPX0VYRUMpCisJLyogRnJlZUJTRCAqLworCWNvbnN0IGludCBvX2ZsYWcgPSBPX0VYRUM7CisjZW5kaWYKKwogCXQtPmZsYWdzID0gKHJlc3RvcmVfdGltZSAhPSAwKT9uZWVkc1Jlc3RvcmVUaW1lczowOwogCXQtPmZsYWdzIHw9IG9uSW5pdGlhbERpcjsKIAl0LT52aXNpdF90eXBlID0gMDsKQEAgLTIxNDMsNiArMjE5NCwxNiBAQAogCXQtPnN0YWNrLT5mbGFncyA9IG5lZWRzRmlyc3RWaXNpdDsKIAl0LT5tYXhPcGVuQ291bnQgPSB0LT5vcGVuQ291bnQgPSAxOwogCXQtPmluaXRpYWxfZGlyX2ZkID0gb3BlbigiLiIsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKKyNpZiBkZWZpbmVkKE9fUEFUSCkgfHwgZGVmaW5lZChPX1NFQVJDSCkgfHwgXAorIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKE9fRVhFQykpCisJLyoKKwkgKiBNb3N0IGxpa2VseSByZWFzb24gdG8gZmFpbCBvcGVuaW5nICIuIiBpcyB0aGF0IGl0J3Mgbm90IHJlYWRhYmxlLAorCSAqIHNvIHRyeSBhZ2FpbiBmb3IgZXhlY3V0ZS4gVGhlIGNvbnNlcXVlbmNlcyBvZiBub3Qgb3BlbmluZyB0aGlzIGFyZQorCSAqIHVuaGVscGZ1bCBhbmQgdW5uZWNlc3NhcnkgZXJyb3JzIGxhdGVyLgorCSAqLworCWlmICh0LT5pbml0aWFsX2Rpcl9mZCA8IDApCisJCXQtPmluaXRpYWxfZGlyX2ZkID0gb3BlbigiLiIsIG9fZmxhZyB8IE9fQ0xPRVhFQyk7CisjZW5kaWYKIAlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyh0LT5pbml0aWFsX2Rpcl9mZCk7CiAJdC0+d29ya2luZ19kaXJfZmQgPSB0cmVlX2R1cCh0LT5pbml0aWFsX2Rpcl9mZCk7CiAJcmV0dXJuICh0KTsKQEAgLTI0NTAsNyArMjUxMSw3IEBACiAjZWxzZQogCQlpZiAodHJlZV9lbnRlcl93b3JraW5nX2Rpcih0KSAhPSAwKQogCQkJcmV0dXJuIE5VTEw7Ci0JCWlmIChzdGF0KHRyZWVfY3VycmVudF9hY2Nlc3NfcGF0aCh0KSwgJnQtPnN0KSAhPSAwKQorCQlpZiAobGFfc3RhdCh0cmVlX2N1cnJlbnRfYWNjZXNzX3BhdGgodCksICZ0LT5zdCkgIT0gMCkKICNlbmRpZgogCQkJcmV0dXJuIE5VTEw7CiAJCXQtPmZsYWdzIHw9IGhhc1N0YXQ7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3ByaXZhdGUuaAppbmRleCBmMDNhMGE5Li5iYzhhYmMxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wcml2YXRlLmgKQEAgLTI2LDEzICsyNiwxMyBAQAogICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcHJpdmF0ZS5oIDIwMTEwNSAyMDA5LTEyLTI4IDAzOjIwOjU0WiBraWVudHpsZSAkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1JFQURfRElTS19QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9SRUFEX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfUkVBRF9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX1JFQURfRElTS19QUklWQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgImFyY2hpdmVfcGxhdGZvcm1fYWNsLmgiCiAKIHN0cnVjdCB0cmVlOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3dpbmRvd3MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza193aW5kb3dzLmMKaW5kZXggZDgyMDQ4ZC4uZmRkMzc2ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3dpbmRvd3MuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfd2luZG93cy5jCkBAIC0yOTksOCArMjk5LDE1NSBAQAogCQkgICAgc3RydWN0IHJlc3RvcmVfdGltZSAqKTsKIHN0YXRpYyBpbnQJc2V0dXBfc3BhcnNlX2Zyb21fZGlzayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2Rpc2sgKiwKIAkJICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIEhBTkRMRSk7CitzdGF0aWMgaW50CWxhX2xpbmtuYW1lX2Zyb21faGFuZGxlKEhBTkRMRSwgd2NoYXJfdCAqKiwgaW50ICopOworc3RhdGljIGludAlsYV9saW5rbmFtZV9mcm9tX3BhdGh3KGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50ICopOworc3RhdGljIHZvaWQJZW50cnlfc3ltbGlua19mcm9tX3BhdGh3KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosCisJCSAgICBjb25zdCB3Y2hhcl90ICpwYXRoKTsKIAordHlwZWRlZiBzdHJ1Y3QgX1JFUEFSU0VfREFUQV9CVUZGRVIgeworCVVMT05HCVJlcGFyc2VUYWc7CisJVVNIT1JUIFJlcGFyc2VEYXRhTGVuZ3RoOworCVVTSE9SVAlSZXNlcnZlZDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlVU0hPUlQJU3Vic3RpdHV0ZU5hbWVPZmZzZXQ7CisJCQlVU0hPUlQJU3Vic3RpdHV0ZU5hbWVMZW5ndGg7CisJCQlVU0hPUlQJUHJpbnROYW1lT2Zmc2V0OworCQkJVVNIT1JUCVByaW50TmFtZUxlbmd0aDsKKwkJCVVMT05HCUZsYWdzOworCQkJV0NIQVIJUGF0aEJ1ZmZlclsxXTsKKwkJfSBTeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyOworCQlzdHJ1Y3QgeworCQkJVVNIT1JUCVN1YnN0aXR1dGVOYW1lT2Zmc2V0OworCQkJVVNIT1JUCVN1YnN0aXR1dGVOYW1lTGVuZ3RoOworCQkJVVNIT1JUCVByaW50TmFtZU9mZnNldDsKKwkJCVVTSE9SVAlQcmludE5hbWVMZW5ndGg7CisJCQlXQ0hBUglQYXRoQnVmZmVyWzFdOworCQl9IE1vdW50UG9pbnRSZXBhcnNlQnVmZmVyOworCQlzdHJ1Y3QgeworCQkJVUNIQVIJRGF0YUJ1ZmZlclsxXTsKKwkJfSBHZW5lcmljUmVwYXJzZUJ1ZmZlcjsKKwl9IERVTU1ZVU5JT05OQU1FOworfSBSRVBBUlNFX0RBVEFfQlVGRkVSLCAqUFJFUEFSU0VfREFUQV9CVUZGRVI7CiAKKy8qCisgKiBSZWFkcyB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluaworICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlCisgKiBvdXRidWYgaXMgYWxsb2NhdGVkIGluIHRoZSBmdW5jdGlvbgorICovCitzdGF0aWMgaW50CitsYV9saW5rbmFtZV9mcm9tX2hhbmRsZShIQU5ETEUgaCwgd2NoYXJfdCAqKmxpbmtuYW1lLCBpbnQgKmxpbmt0eXBlKQoreworCURXT1JEIGluYnl0ZXM7CisJUkVQQVJTRV9EQVRBX0JVRkZFUiAqYnVmOworCUJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIHN0OworCXNpemVfdCBsZW47CisJQk9PTCByZXQ7CisJQllURSAqaW5kYXRhOworCXdjaGFyX3QgKnRidWY7CisKKwlyZXQgPSBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZShoLCAmc3QpOworCWlmIChyZXQgPT0gMCB8fAorCSAgICAoc3QuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQpID09IDApIHsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaW5kYXRhID0gbWFsbG9jKE1BWElNVU1fUkVQQVJTRV9EQVRBX0JVRkZFUl9TSVpFKTsKKwlyZXQgPSBEZXZpY2VJb0NvbnRyb2woaCwgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQsIE5VTEwsIDAsIGluZGF0YSwKKwkgICAgMTAyNCwgJmluYnl0ZXMsIE5VTEwpOworCWlmIChyZXQgPT0gMCkgeworCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworCQlmcmVlKGluZGF0YSk7CisJCXJldHVybiAoLTEpOworCX0KKworCWJ1ZiA9IChSRVBBUlNFX0RBVEFfQlVGRkVSICopIGluZGF0YTsKKwlpZiAoYnVmLT5SZXBhcnNlVGFnICE9IElPX1JFUEFSU0VfVEFHX1NZTUxJTkspIHsKKwkJZnJlZShpbmRhdGEpOworCQkvKiBGaWxlIGlzIG5vdCBhIHN5bWJvbGljIGxpbmsgKi8KKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCWxlbiA9IGJ1Zi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5TdWJzdGl0dXRlTmFtZUxlbmd0aDsKKwlpZiAobGVuIDw9IDApIHsKKwkJZnJlZShpbmRhdGEpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwl0YnVmID0gbWFsbG9jKGxlbiArIDEgKiBzaXplb2Yod2NoYXJfdCkpOworCWlmICh0YnVmID09IE5VTEwpIHsKKwkJZnJlZShpbmRhdGEpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwltZW1jcHkodGJ1ZiwgJigoQllURSAqKWJ1Zi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5QYXRoQnVmZmVyKQorCSAgICBbYnVmLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlN1YnN0aXR1dGVOYW1lT2Zmc2V0XSwgbGVuKTsKKwlmcmVlKGluZGF0YSk7CisKKwl0YnVmW2xlbiAvIHNpemVvZih3Y2hhcl90KV0gPSBMJ1wwJzsKKworCSpsaW5rbmFtZSA9IHRidWY7CisKKwkvKgorCSAqIFRyYW5zbGF0ZSBiYWNrc2xhc2hlcyB0byBzbGFzaGVzIGZvciBsaWJhcmNoaXZlIGludGVybmFsIHVzZQorCSAqLworCXdoaWxlKCp0YnVmICE9IEwnXDAnKSB7CisJCWlmICgqdGJ1ZiA9PSBMJ1xcJykKKwkJCSp0YnVmID0gTCcvJzsKKwkJdGJ1ZisrOworCX0KKworCWlmICgoc3QuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgPT0gMCkKKwkJKmxpbmt0eXBlID0gQUVfU1lNTElOS19UWVBFX0ZJTEU7CisJZWxzZQorCQkqbGlua3R5cGUgPSBBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJldHVybnMgQUVfU1lNTElOS19UWVBFX0ZJTEUsIEFFX1NZTUxJTktfVFlQRV9ESVJFQ1RPUlkgb3IgLTEgb24gZXJyb3IKKyAqLworc3RhdGljIGludAorbGFfbGlua25hbWVfZnJvbV9wYXRodyhjb25zdCB3Y2hhcl90ICpwYXRoLCB3Y2hhcl90ICoqb3V0YnVmLCBpbnQgKmxpbmt0eXBlKQoreworCUhBTkRMRSBoOworCWNvbnN0IERXT1JEIGZsYWcgPSBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUyB8CisJICAgIEZJTEVfRkxBR19PUEVOX1JFUEFSU0VfUE9JTlQ7CisJaW50IHJldDsKKworCWggPSBDcmVhdGVGaWxlVyhwYXRoLCAwLCBGSUxFX1NIQVJFX1JFQUQsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIGZsYWcsCisJICAgIE5VTEwpOworCWlmIChoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldCA9IGxhX2xpbmtuYW1lX2Zyb21faGFuZGxlKGgsIG91dGJ1ZiwgbGlua3R5cGUpOworCUNsb3NlSGFuZGxlKGgpOworCisJcmV0dXJuIChyZXQpOworfQorCitzdGF0aWMgdm9pZAorZW50cnlfc3ltbGlua19mcm9tX3BhdGh3KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgY29uc3Qgd2NoYXJfdCAqcGF0aCkKK3sKKwl3Y2hhcl90ICpsaW5rbmFtZSA9IE5VTEw7CisJaW50IHJldCwgbGlua3R5cGU7CisKKwlyZXQgPSBsYV9saW5rbmFtZV9mcm9tX3BhdGh3KHBhdGgsICZsaW5rbmFtZSwgJmxpbmt0eXBlKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybjsKKwlpZiAobGlua3R5cGUgPj0gMCkgeworCQlhcmNoaXZlX2VudHJ5X2NvcHlfc3ltbGlua193KGVudHJ5LCBsaW5rbmFtZSk7CisJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShlbnRyeSwgbGlua3R5cGUpOworCX0KKwlmcmVlKGxpbmtuYW1lKTsKKworCXJldHVybjsKK30KIAogc3RhdGljIHN0cnVjdCBhcmNoaXZlX3Z0YWJsZSAqCiBhcmNoaXZlX3JlYWRfZGlza192dGFibGUodm9pZCkKQEAgLTkwMCw2ICsxMDQ3LDE5IEBACiAJfQogCiAJLyoKKwkgKiBGaWxlIGF0dHJpYnV0ZXMKKwkgKi8KKwlpZiAoKGEtPmZsYWdzICYgQVJDSElWRV9SRUFERElTS19OT19GRkxBR1MpID09IDApIHsKKwkJY29uc3QgaW50IHN1cHBvcnRlZF9hdHRycyA9CisJCSAgICBGSUxFX0FUVFJJQlVURV9SRUFET05MWSB8CisJCSAgICBGSUxFX0FUVFJJQlVURV9ISURERU4gfAorCQkgICAgRklMRV9BVFRSSUJVVEVfU1lTVEVNOworCQlEV09SRCBmaWxlX2F0dHJzID0gc3QtPmR3RmlsZUF0dHJpYnV0ZXMgJiBzdXBwb3J0ZWRfYXR0cnM7CisJCWlmIChmaWxlX2F0dHJzICE9IDApCisJCQlhcmNoaXZlX2VudHJ5X3NldF9mZmxhZ3MoZW50cnksIGZpbGVfYXR0cnMsIDApOworCX0KKworCS8qCiAJICogSW52b2tlIGEgbWV0YSBkYXRhIGZpbHRlciBjYWxsYmFjay4KIAkgKi8KIAlpZiAoYS0+bWV0YWRhdGFfZmlsdGVyX2Z1bmMpIHsKQEAgLTk2Niw2ICsxMTI2LDggQEAKIAkJdC0+ZW50cnlfZmggPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIAl9CiAKKwlhcmNoaXZlX2VudHJ5X2NsZWFyKGVudHJ5KTsKKwogCXdoaWxlICgociA9IG5leHRfZW50cnkoYSwgdCwgZW50cnkpKSA9PSBBUkNISVZFX1JFVFJZKQogCQlhcmNoaXZlX2VudHJ5X2NsZWFyKGVudHJ5KTsKIApAQCAtMTgzOCw5ICsyMDAwLDEwIEBACiAJCW1vZGUgfD0gU19JV1VTUiB8IFNfSVdHUlAgfCBTX0lXT1RIOwogCWlmICgoYmhmaS0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQpICYmCiAJICAgIGZpbmREYXRhICE9IE5VTEwgJiYKLQkgICAgZmluZERhdGEtPmR3UmVzZXJ2ZWQwID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTkspCisJICAgIGZpbmREYXRhLT5kd1Jlc2VydmVkMCA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKSB7CiAJCW1vZGUgfD0gU19JRkxOSzsKLQllbHNlIGlmIChiaGZpLT5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorCQllbnRyeV9zeW1saW5rX2Zyb21fcGF0aHcoZW50cnksIHBhdGgpOworCX0gZWxzZSBpZiAoYmhmaS0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKIAkJbW9kZSB8PSBTX0lGRElSIHwgU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIOwogCWVsc2UgewogCQljb25zdCB3Y2hhcl90ICpwOwpAQCAtMjEzOSw2ICsyMzAyLDggQEAKIAkJZmlsZUF0dHJpYnV0ZXMgPSBiaGZpLmR3RmlsZUF0dHJpYnV0ZXM7CiAJfSBlbHNlIHsKIAkJYXJjaGl2ZV9lbnRyeV9jb3B5X3N0YXQoZW50cnksIHN0KTsKKwkJaWYgKHN0LT5zdF9tb2RlICYgU19JRkxOSykKKwkJCWVudHJ5X3N5bWxpbmtfZnJvbV9wYXRodyhlbnRyeSwgcGF0aCk7CiAJCWggPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIAl9CiAKQEAgLTIxNTEsNiArMjMxNiwxOSBAQAogCQlhcmNoaXZlX2VudHJ5X2NvcHlfZ25hbWUoZW50cnksIG5hbWUpOwogCiAJLyoKKwkgKiBGaWxlIGF0dHJpYnV0ZXMKKwkgKi8KKwlpZiAoKGEtPmZsYWdzICYgQVJDSElWRV9SRUFERElTS19OT19GRkxBR1MpID09IDApIHsKKwkJY29uc3QgaW50IHN1cHBvcnRlZF9hdHRycyA9CisJCSAgICBGSUxFX0FUVFJJQlVURV9SRUFET05MWSB8CisJCSAgICBGSUxFX0FUVFJJQlVURV9ISURERU4gfAorCQkgICAgRklMRV9BVFRSSUJVVEVfU1lTVEVNOworCQlEV09SRCBmaWxlX2F0dHJzID0gZmlsZUF0dHJpYnV0ZXMgJiBzdXBwb3J0ZWRfYXR0cnM7CisJCWlmIChmaWxlX2F0dHJzICE9IDApCisJCQlhcmNoaXZlX2VudHJ5X3NldF9mZmxhZ3MoZW50cnksIGZpbGVfYXR0cnMsIDApOworCX0KKworCS8qCiAJICogQ2FuIHRoaXMgZmlsZSBiZSBzcGFyc2UgZmlsZSA/CiAJICovCiAJaWYgKGFyY2hpdmVfZW50cnlfZmlsZXR5cGUoZW50cnkpICE9IEFFX0lGUkVHCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2V4dHJhY3QuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZXh0cmFjdC4zCmluZGV4IDZlYzBjZWQuLjg1OGYzOTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZXh0cmFjdC4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZXh0cmFjdC4zCkBAIC0xMjYsNyArMTI2LDYgQEAKIGZ1bmN0aW9ucy4KIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLApAQCAtMTM0LDQgKzEzMyw1IEBACiAuWHIgYXJjaGl2ZV9yZWFkX29wZW4gMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZpbHRlci4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9maWx0ZXIuMwppbmRleCBlZjBhNzAxLi4xYmE1ZmNiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZpbHRlci4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZmlsdGVyLjMKQEAgLTE0Nyw4ICsxNDcsOCBAQAogZnVuY3Rpb25zLgogLlwiCiAuU2ggU0VFIEFMU08KLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAotLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMworLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMyAsCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Zvcm1hdC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mb3JtYXQuMwppbmRleCA5MWM1ZDJjLi5mMzgwNGNlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Zvcm1hdC4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZm9ybWF0LjMKQEAgLTEwMiw3ICsxMDIsNyBAQAogLkZuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIKIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSB2YXJpZXR5IG9mIHN0YW5kYXJkIHRhciBmb3JtYXRzLCBvbGQtc3R5bGUgdGFyLAogdXN0YXIsIHBheCBpbnRlcmNoYW5nZSBmb3JtYXQsIGFuZCBtYW55IGNvbW1vbiB2YXJpYW50cy4KLS5JdCBGbiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYWxsIAorLkl0IEZuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hbGwKIEVuYWJsZXMgc3VwcG9ydCBmb3IgYWxsIGF2YWlsYWJsZSBmb3JtYXRzIGV4Y2VwdCB0aGUKIC5EcSByYXcKIGZvcm1hdCAoc2VlIGJlbG93KS4KQEAgLTEyNSw3ICsxMjUsNyBAQAogYW4gZW1wdHkgZmlsZSBiYXNlZCBwdXJlbHkgb24gY29udGVudHMuCiBTbyBlbXB0eSBmaWxlcyBhcmUgdHJlYXRlZCBieSBsaWJhcmNoaXZlIGFzIGEgZGlzdGluY3QKIGZvcm1hdC4KLS5JdCBGbiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3IAorLkl0IEZuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcKIFRoZQogLkRxIHJhdwogZm9ybWF0IGhhbmRsZXIgYWxsb3dzIGxpYmFyY2hpdmUgdG8gYmUgdXNlZCB0byByZWFkIGFyYml0cmFyeSBkYXRhLgpAQCAtMTUzLDExICsxNTMsMTEgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgdGFyIDUKIC5TaCBCVUdTCiBNYW55IHRyYWRpdGlvbmFsIGFyY2hpdmVyIHByb2dyYW1zIHRyZWF0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZyZWUuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZnJlZS4zCmluZGV4IDViMjE4MjIuLjgzNzFjM2EgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZnJlZS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZnJlZS4zCkBAIC04MywxMSArODMsMTEgQEAKIGZ1bmN0aW9ucy4KIC5cIgogLlNoIFNFRSBBTFNPCi0uWHIgbGliYXJjaGl2ZSAzICwKLS5YciBhcmNoaXZlX3JlYWRfbmV3IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9maWx0ZXIgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2Zvcm1hdCAzICwKKy5YciBhcmNoaXZlX3JlYWRfbmV3IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9vcGVuIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKLS5YciBhcmNoaXZlX3V0aWwgMworLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfaGVhZGVyLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2hlYWRlci4zCmluZGV4IDQ4MGE2NjYuLjFlOTdmM2EgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfaGVhZGVyLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9oZWFkZXIuMwpAQCAtNzksNyArNzksNiBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2V4dHJhY3QgMyAsCkBAIC04OCw0ICs4Nyw1IEBACiAuWHIgYXJjaGl2ZV9yZWFkX29wZW4gMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAogLlhyIGFyY2hpdmVfdXRpbCAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX25ldy4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9uZXcuMwppbmRleCAwYzlkMWE3Li44YmI2Yjg0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX25ldy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfbmV3LjMKQEAgLTUwLDEwICs1MCwxMCBAQAogLlwiIC5TaCBFUlJPUlMKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9maWx0ZXIgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbi4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuLjMKaW5kZXggMjI3OGViYy4uZjY3Njc3OCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuLjMKQEAgLTIwNSw3ICsyMDUsNyBAQAogLkZuIGFyY2hpdmVfc2V0X2Vycm9yCiB0byByZWdpc3RlciBhbiBlcnJvciBjb2RlIGFuZCBtZXNzYWdlIGFuZAogcmV0dXJuCi0uQ20gQVJDSElWRV9GQVRBTC4KKy5DbSBBUkNISVZFX0ZBVEFMIC4KIC5cIiAuU2ggRVhBTVBMRQogLlwiCiAuU2ggUkVUVVJOIFZBTFVFUwpAQCAtMjIzLDExICsyMjMsMTEgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9maWx0ZXIgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbl9maWxlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW5fZmlsZS5jCmluZGV4IGJmZTkzM2IuLjEwMWRhZTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbl9maWxlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuX2ZpbGUuYwpAQCAtMTc0LDggKzE3NCw3IEBACiAJc3RydWN0IHJlYWRfRklMRV9kYXRhICptaW5lID0gKHN0cnVjdCByZWFkX0ZJTEVfZGF0YSAqKWNsaWVudF9kYXRhOwogCiAJKHZvaWQpYTsgLyogVU5VU0VEICovCi0JaWYgKG1pbmUtPmJ1ZmZlciAhPSBOVUxMKQotCQlmcmVlKG1pbmUtPmJ1ZmZlcik7CisJZnJlZShtaW5lLT5idWZmZXIpOwogCWZyZWUobWluZSk7CiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9wcml2YXRlLmgKaW5kZXggNzg1NDZkYy4uYzg0MmU2ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9wcml2YXRlLmgKQEAgLTI1LDE1ICsyNSwxNSBAQAogICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaCAyMDEwODggMjAwOS0xMi0yOCAwMjoxODo1NVoga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9SRUFEX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1JFQURfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUCiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9SRUFEX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX1JFQURfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9zdHJpbmcuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKQEAgLTk4LDYgKzk4LDggQEAKIAlpbnQgKCpjbG9zZSkoc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKnNlbGYpOwogCS8qIEZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBzd2l0Y2hpbmcgZnJvbSByZWFkaW5nIG9uZSBibG9jayB0byB0aGUgbmV4dC9wcmV2ICovCiAJaW50ICgqc3N3aXRjaCkoc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKnNlbGYsIHVuc2lnbmVkIGludCBpaW5kZXgpOworCS8qIFJlYWQgYW55IGhlYWRlciBtZXRhZGF0YSBpZiBhdmFpbGFibGUuICovCisJaW50ICgqcmVhZF9oZWFkZXIpKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpzZWxmLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnkpOwogCS8qIE15IHByaXZhdGUgZGF0YS4gKi8KIAl2b2lkICpkYXRhOwogCkBAIC0yNTAsNiArMjUyLDcgQEAKIGludDY0X3QJX19hcmNoaXZlX3JlYWRfZmlsdGVyX3NlZWsoc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKiwgaW50NjRfdCwgaW50KTsKIGludDY0X3QJX19hcmNoaXZlX3JlYWRfY29uc3VtZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICosIGludDY0X3QpOwogaW50NjRfdAlfX2FyY2hpdmVfcmVhZF9maWx0ZXJfY29uc3VtZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqLCBpbnQ2NF90KTsKK2ludCBfX2FyY2hpdmVfcmVhZF9oZWFkZXIoc3RydWN0IGFyY2hpdmVfcmVhZCAqLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIGludCBfX2FyY2hpdmVfcmVhZF9wcm9ncmFtKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICosIGNvbnN0IGNoYXIgKik7CiB2b2lkIF9fYXJjaGl2ZV9yZWFkX2ZyZWVfZmlsdGVycyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkICopOwogc3RydWN0IGFyY2hpdmVfcmVhZF9leHRyYWN0ICpfX2FyY2hpdmVfcmVhZF9nZXRfZXh0cmFjdChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICopOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfZm9ybWF0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9mb3JtYXQuYwppbmRleCAxOTBmNDM2Li4xZDNlNDlkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9mb3JtYXQuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9mb3JtYXQuYwpAQCAtNzMsNiArNzMsOSBAQAogICAgIGNhc2UgQVJDSElWRV9GT1JNQVRfUkFSOgogICAgICAgc3RyY3B5KHN0ciwgInJhciIpOwogICAgICAgYnJlYWs7CisgICAgY2FzZSBBUkNISVZFX0ZPUk1BVF9SQVJfVjU6CisgICAgICBzdHJjcHkoc3RyLCAicmFyNSIpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSBBUkNISVZFX0ZPUk1BVF9UQVI6CiAgICAgICBzdHJjcHkoc3RyLCAidGFyIik7CiAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMuMwppbmRleCAxYTI1MWNlLi43OGQ5OTk5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucy4zCkBAIC0yNCw3ICsyNCw3IEBACiAuXCIKIC5cIiAkRnJlZUJTRCQKIC5cIgotLkRkIEZlYnJ1YXJ5IDIsIDIwMTIKKy5EZCBKYW51YXJ5IDMxLCAyMDIwCiAuRHQgQVJDSElWRV9SRUFEX09QVElPTlMgMwogLk9zCiAuU2ggTkFNRQpAQCAtMTgwLDYgKzE4MCwxOCBAQAogLlwiCiAuU2ggT1BUSU9OUwogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IEZvcm1hdCBjYWIKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgorLkVsCisuSXQgRm9ybWF0IGNwaW8KKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgorLkVsCiAuSXQgRm9ybWF0IGlzbzk2NjAKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKIC5JdCBDbSBqb2xpZXQKQEAgLTE5Myw2ICsyMDUsMjQgQEAKIC5DbSAhcm9ja3JpZGdlCiB0byBkaXNhYmxlLgogLkVsCisuSXQgRm9ybWF0IGxoYQorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCisuRWwKKy5JdCBGb3JtYXQgbXRyZWUKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjaGVja2ZzCitBbGxvdyByZWFkaW5nIGluZm9ybWF0aW9uIG1pc3NpbmcgZnJvbSB0aGUgbXRyZWUgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uCitEaXNhYmxlZCBieSBkZWZhdWx0LgorLkVsCisuSXQgRm9ybWF0IHJhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCisuRWwKIC5JdCBGb3JtYXQgdGFyCiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CiAuSXQgQ20gY29tcGF0LTJ4CkBAIC0yMDIsNyArMjMyLDcgQEAKIHNvIHRoYXQgc3VjaCBhcmNoaXZlcyBjYW4gYmUgcmVhZCBjb3JyZWN0bHkuCiAuSXQgQ20gaGRyY2hhcnNldAogVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCi11c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZW5hbWVzLgordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCiAuSXQgQ20gbWFjLWV4dAogU3VwcG9ydCBNYWMgT1MgbWV0YWRhdGEgZXh0ZW5zaW9uIHRoYXQgcmVjb3JkcyBkYXRhIGluIHNwZWNpYWwKIGZpbGVzIGJlZ2lubmluZyB3aXRoIGEgcGVyaW9kIGFuZCB1bmRlcnNjb3JlLgpAQCAtMjEyLDcgKzI0Miw4IEBACiB0byBkaXNhYmxlLgogLkl0IENtIHJlYWRfY29uY2F0ZW5hdGVkX2FyY2hpdmVzCiBJZ25vcmUgemVyb2VkIGJsb2NrcyBpbiB0aGUgYXJjaGl2ZSwgd2hpY2ggb2NjdXJzIHdoZW4gbXVsdGlwbGUgdGFyIGFyY2hpdmVzCi1oYXZlIGJlZW4gY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwgb25seSB0aGUgY29udGVudHMgb2YKK2hhdmUgYmVlbiBjb25jYXRlbmF0ZWQgdG9nZXRoZXIuCitXaXRob3V0IHRoaXMgb3B0aW9uLCBvbmx5IHRoZSBjb250ZW50cyBvZgogdGhlIGZpcnN0IGNvbmNhdGVuYXRlZCBhcmNoaXZlIHdvdWxkIGJlIHJlYWQuCiAuRWwKIC5FbApAQCAtMjI2LDYgKzI1Nyw2IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAorLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAotLlhyIGFyY2hpdmVfcmVhZCAzCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2J6aXAyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2J6aXAyLmMKaW5kZXggMmIxYTVlMi4uNTMzM2Q0NyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9iemlwMi5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfYnppcDIuYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9CWkxJQl9ICi0jaW5jbHVkZSA8Y21fYnpsaWIuaD4KKyNpbmNsdWRlIDxjbTNwL2J6bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfZ3ppcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9nemlwLmMKaW5kZXggZTlmNTlmMS4uYWMwYjY5NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9nemlwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9nemlwLmMKQEAgLTM3LDE0ICszNywxOSBAQAogI2lmZGVmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgorI2lmZGVmIEhBVkVfTElNSVRTX0gKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgogI2lmZGVmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPgorI2luY2x1ZGUgPGNtM3AvemxpYi5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeS5oIgorI2luY2x1ZGUgImFyY2hpdmVfZW5kaWFuLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaCIKIApAQCAtNTYsNiArNjEsOCBAQAogCXNpemVfdAkJIG91dF9ibG9ja19zaXplOwogCWludDY0X3QJCSB0b3RhbF9vdXQ7CiAJdW5zaWduZWQgbG9uZwkgY3JjOworCXVpbnQzMl90CSBtdGltZTsKKwljaGFyCQkqbmFtZTsKIAljaGFyCQkgZW9mOyAvKiBUcnVlID0gZm91bmQgZW5kIG9mIGNvbXByZXNzZWQgZGF0YS4gKi8KIH07CiAKQEAgLTEyMywxMiArMTMwLDIxIEBACiAgKiBjb3VudCBvZiBiaXRzIHZlcmlmaWVkLCBzdWl0YWJsZSBmb3IgdXNlIGJ5IGJpZGRlci4KICAqLwogc3RhdGljIHNzaXplX3QKLXBlZWtfYXRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpmaWx0ZXIsIGludCAqcGJpdHMpCitwZWVrX2F0X2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqZmlsdGVyLCBpbnQgKnBiaXRzLAorI2lmZGVmIEhBVkVfWkxJQl9ICisJICAgICAgIHN0cnVjdCBwcml2YXRlX2RhdGEgKnN0YXRlCisjZWxzZQorCSAgICAgICB2b2lkICpzdGF0ZQorI2VuZGlmCisJICAgICAgKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAJc3NpemVfdCBhdmFpbCwgbGVuOwogCWludCBiaXRzID0gMDsKIAlpbnQgaGVhZGVyX2ZsYWdzOworI2lmbmRlZiBIQVZFX1pMSUJfSAorCSh2b2lkKXN0YXRlOyAvKiBVTlVTRUQgKi8KKyNlbmRpZgogCiAJLyogU3RhcnQgYnkgbG9va2luZyBhdCB0aGUgZmlyc3QgdGVuIGJ5dGVzIG9mIHRoZSBoZWFkZXIsIHdoaWNoCiAJICogaXMgYWxsIGZpeGVkIGxheW91dC4gKi8KQEAgLTE0NCw3ICsxNjAsMTEgQEAKIAkJcmV0dXJuICgwKTsKIAliaXRzICs9IDM7CiAJaGVhZGVyX2ZsYWdzID0gcFszXTsKLQkvKiBCeXRlcyA0LTcgYXJlIG1vZCB0aW1lLiAqLworCS8qIEJ5dGVzIDQtNyBhcmUgbW9kIHRpbWUgaW4gbGl0dGxlIGVuZGlhbi4gKi8KKyNpZmRlZiBIQVZFX1pMSUJfSAorCWlmIChzdGF0ZSkKKwkJc3RhdGUtPm10aW1lID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA0KTsKKyNlbmRpZgogCS8qIEJ5dGUgOCBpcyBkZWZsYXRlIGZsYWdzLiAqLwogCS8qIFhYWFggVE9ETzogcmV0dXJuIGRlZmxhdGUgZmxhZ3MgYmFjayB0byBjb25zdW1lX2hlYWRlciBmb3IgdXNlCiAJICAgaW4gaW5pdGlhbGl6aW5nIHRoZSBkZWNvbXByZXNzb3IuICovCkBAIC0xNjEsNiArMTgxLDkgQEAKIAogCS8qIE51bGwtdGVybWluYXRlZCBvcHRpb25hbCBmaWxlbmFtZS4gKi8KIAlpZiAoaGVhZGVyX2ZsYWdzICYgOCkgeworI2lmZGVmIEhBVkVfWkxJQl9ICisJCXNzaXplX3QgZmlsZV9zdGFydCA9IGxlbjsKKyNlbmRpZgogCQlkbyB7CiAJCQkrK2xlbjsKIAkJCWlmIChhdmFpbCA8IGxlbikKQEAgLTE2OSw2ICsxOTIsMTQgQEAKIAkJCWlmIChwID09IE5VTEwpCiAJCQkJcmV0dXJuICgwKTsKIAkJfSB3aGlsZSAocFtsZW4gLSAxXSAhPSAwKTsKKworI2lmZGVmIEhBVkVfWkxJQl9ICisJCWlmIChzdGF0ZSkgeworCQkJLyogUmVzZXQgdGhlIG5hbWUgaW4gY2FzZSBvZiByZXBlYXQgaGVhZGVyIHJlYWRzLiAqLworCQkJZnJlZShzdGF0ZS0+bmFtZSk7CisJCQlzdGF0ZS0+bmFtZSA9IHN0cmR1cCgoY29uc3QgY2hhciAqKSZwW2ZpbGVfc3RhcnRdKTsKKwkJfQorI2VuZGlmCiAJfQogCiAJLyogTnVsbC10ZXJtaW5hdGVkIG9wdGlvbmFsIGNvbW1lbnQuICovCkBAIC0yMTQsMTIgKzI0NSwxMSBAQAogCiAJKHZvaWQpc2VsZjsgLyogVU5VU0VEICovCiAKLQlpZiAocGVla19hdF9oZWFkZXIoZmlsdGVyLCAmYml0c19jaGVja2VkKSkKKwlpZiAocGVla19hdF9oZWFkZXIoZmlsdGVyLCAmYml0c19jaGVja2VkLCBOVUxMKSkKIAkJcmV0dXJuIChiaXRzX2NoZWNrZWQpOwogCXJldHVybiAoMCk7CiB9CiAKLQogI2lmbmRlZiBIQVZFX1pMSUJfSAogCiAvKgpAQCAtMjQzLDYgKzI3MywyNCBAQAogCiAjZWxzZQogCitzdGF0aWMgaW50CitnemlwX3JlYWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpzZWxmLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGU7CisKKwlzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopc2VsZi0+ZGF0YTsKKworCS8qIEEgbXRpbWUgb2YgMCBpcyBjb25zaWRlcmVkIGludmFsaWQvbWlzc2luZy4gKi8KKwlpZiAoc3RhdGUtPm10aW1lICE9IDApCisJCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LCBzdGF0ZS0+bXRpbWUsIDApOworCisJLyogSWYgdGhlIG5hbWUgaXMgYXZhaWxhYmxlLCBleHRyYWN0IGl0LiAqLworCWlmIChzdGF0ZS0+bmFtZSkKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfcGF0aG5hbWUoZW50cnksIHN0YXRlLT5uYW1lKTsKKworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBmaWx0ZXIgb2JqZWN0LgogICovCkBAIC0yNzIsNiArMzIwLDkgQEAKIAlzZWxmLT5yZWFkID0gZ3ppcF9maWx0ZXJfcmVhZDsKIAlzZWxmLT5za2lwID0gTlVMTDsgLyogbm90IHN1cHBvcnRlZCAqLwogCXNlbGYtPmNsb3NlID0gZ3ppcF9maWx0ZXJfY2xvc2U7CisjaWZkZWYgSEFWRV9aTElCX0gKKwlzZWxmLT5yZWFkX2hlYWRlciA9IGd6aXBfcmVhZF9oZWFkZXI7CisjZW5kaWYKIAogCXN0YXRlLT5pbl9zdHJlYW0gPSAwOyAvKiBXZSdyZSBub3QgYWN0dWFsbHkgd2l0aGluIGEgc3RyZWFtIHlldC4gKi8KIApAQCAtMjg5LDcgKzM0MCw3IEBACiAJc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKXNlbGYtPmRhdGE7CiAKIAkvKiBJZiB0aGlzIGlzIGEgcmVhbCBoZWFkZXIsIGNvbnN1bWUgaXQuICovCi0JbGVuID0gcGVla19hdF9oZWFkZXIoc2VsZi0+dXBzdHJlYW0sIE5VTEwpOworCWxlbiA9IHBlZWtfYXRfaGVhZGVyKHNlbGYtPnVwc3RyZWFtLCBOVUxMLCBzdGF0ZSk7CiAJaWYgKGxlbiA9PSAwKQogCQlyZXR1cm4gKEFSQ0hJVkVfRU9GKTsKIAlfX2FyY2hpdmVfcmVhZF9maWx0ZXJfY29uc3VtZShzZWxmLT51cHN0cmVhbSwgbGVuKTsKQEAgLTM3NCw3ICs0MjUsNyBAQAogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKnN0YXRlOwogCXNpemVfdCBkZWNvbXByZXNzZWQ7Ci0Jc3NpemVfdCBhdmFpbF9pbjsKKwlzc2l6ZV90IGF2YWlsX2luLCBtYXhfaW47CiAJaW50IHJldDsKIAogCXN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilzZWxmLT5kYXRhOwpAQCAtNDA4LDYgKzQ1OSwxMiBAQAogCQkJICAgICJ0cnVuY2F0ZWQgZ3ppcCBpbnB1dCIpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJfQorCQlpZiAoVUlOVF9NQVggPj0gU1NJWkVfTUFYKQorCQkJbWF4X2luID0gU1NJWkVfTUFYOworCQllbHNlCisJCQltYXhfaW4gPSBVSU5UX01BWDsKKwkJaWYgKGF2YWlsX2luID4gbWF4X2luKQorCQkJYXZhaWxfaW4gPSBtYXhfaW47CiAJCXN0YXRlLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClhdmFpbF9pbjsKIAogCQkvKiBEZWNvbXByZXNzIGFuZCBjb25zdW1lIHNvbWUgb2YgdGhhdCBkYXRhLiAqLwpAQCAtNDY5LDYgKzUyNiw3IEBACiAJCX0KIAl9CiAKKwlmcmVlKHN0YXRlLT5uYW1lKTsKIAlmcmVlKHN0YXRlLT5vdXRfYmxvY2spOwogCWZyZWUoc3RhdGUpOwogCXJldHVybiAocmV0KTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHo0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2x6NC5jCmluZGV4IDE0N2Y1MDIuLjQzZWU2YzIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHo0LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9sejQuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAKIAlfX2FyY2hpdmVfcmVhZF9maWx0ZXJfY29uc3VtZShzZWxmLT51cHN0cmVhbSwgZGVzY3JpcHRvcl9ieXRlcyk7CiAKLQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBlbm91Z2ggYnVmZmVyIGZvciB1bmNvbXByZXNzZWQgZGF0YS4gKi8KKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGxhcmdlIGVub3VnaCBidWZmZXIgZm9yIHVuY29tcHJlc3NlZCBkYXRhLiAqLwogCWlmIChsejRfYWxsb2NhdGVfb3V0X2Jsb2NrKHNlbGYpICE9IEFSQ0hJVkVfT0spCiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJaWYgKHN0YXRlLT5mbGFncy5zdHJlYW1fY2hlY2tzdW0pCkBAIC01MjAsNyArNTIwLDcgQEAKIAlpZiAocmVhZF9idWYgPT0gTlVMTCkKIAkJZ290byB0cnVuY2F0ZWRfZXJyb3I7CiAKLQkvKiBPcHRpb25hbCBwcm9jZXNzLCBjaGVja2luZyBhIGJsb2NrIHN1bS4gKi8KKwkvKiBPcHRpb25hbCBwcm9jZXNzaW5nLCBjaGVja2luZyBhIGJsb2NrIHN1bS4gKi8KIAlpZiAoY2hlY2tzdW1fc2l6ZSkgewogCQl1bnNpZ25lZCBpbnQgY2hzdW0gPSBfX2FyY2hpdmVfeHhoYXNoLlhYSDMyKAogCQkJcmVhZF9idWYgKyA0LCAoaW50KWNvbXByZXNzZWRfc2l6ZSwgMCk7CkBAIC02NDAsNyArNjQwLDcgQEAKIAlpZiAocmV0ID09IDAgJiYgKnAgPT0gTlVMTCkKIAkJc3RhdGUtPnN0YWdlID0gU0VMRUNUX1NUUkVBTTsKIAotCS8qIE9wdGlvbmFsIHByb2Nlc3MsIGNoZWNraW5nIGEgc3RyZWFtIHN1bS4gKi8KKwkvKiBPcHRpb25hbCBwcm9jZXNzaW5nLCBjaGVja2luZyBhIHN0cmVhbSBzdW0uICovCiAJaWYgKHN0YXRlLT5mbGFncy5zdHJlYW1fY2hlY2tzdW0pIHsKIAkJaWYgKHN0YXRlLT5zdGFnZSA9PSBTRUxFQ1RfU1RSRUFNKSB7CiAJCQl1bnNpZ25lZCBpbnQgY2hlY2tzdW07CkBAIC02NjAsNyArNjYwLDcgQEAKIAkJCWlmIChjaGVja3N1bSAhPSBjaGVja3N1bV9zdHJlYW0pIHsKIAkJCQlhcmNoaXZlX3NldF9lcnJvcigmc2VsZi0+YXJjaGl2ZS0+YXJjaGl2ZSwKIAkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAotCQkJCSAgICAibHo0IHN0cmVhbSBjaGVrc3VtIGVycm9yIik7CisJCQkJICAgICJsejQgc3RyZWFtIGNoZWNrc3VtIGVycm9yIik7CiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChyZXQgPiAwKQpAQCAtNjc0LDcgKzY3NCw3IEBACiBsejRfZmlsdGVyX3JlYWRfbGVnYWN5X3N0cmVhbShzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqc2VsZiwgY29uc3Qgdm9pZCAqKnApCiB7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKXNlbGYtPmRhdGE7Ci0JaW50IGNvbXByZXNzZWQ7CisJdWludDMyX3QgY29tcHJlc3NlZDsKIAljb25zdCBjaGFyICpyZWFkX2J1ZjsKIAlzc2l6ZV90IHJldDsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9sem9wLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2x6b3AuYwppbmRleCA0MzU2YjgyLi4wNWY3NDBiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2x6b3AuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2x6b3AuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPGx6by9sem8xeC5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+IC8qIGZvciBjcmMzMiBhbmQgYWRsZXIzMiAqLworI2luY2x1ZGUgPGNtM3AvemxpYi5oPiAvKiBmb3IgY3JjMzIgYW5kIGFkbGVyMzIgKi8KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl91dS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl91dS5jCmluZGV4IDY0MTI5NzkuLjY3ZGRmZmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfdXUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3V1LmMKQEAgLTU3NCwxNCArNTc0LDEzIEBACiAJCQl3aGlsZSAobCA+IDApIHsKIAkJCQlpbnQgbiA9IDA7CiAKLQkJCQlpZiAobCA+IDApIHsKLQkJCQkJaWYgKCF1dWNoYXJbYlswXV0gfHwgIXV1Y2hhcltiWzFdXSkKLQkJCQkJCWJyZWFrOwotCQkJCQluID0gVVVERUNPREUoKmIrKykgPDwgMTg7Ci0JCQkJCW4gfD0gVVVERUNPREUoKmIrKykgPDwgMTI7Ci0JCQkJCSpvdXQrKyA9IG4gPj4gMTY7IHRvdGFsKys7Ci0JCQkJCS0tbDsKLQkJCQl9CisJCQkJaWYgKCF1dWNoYXJbYlswXV0gfHwgIXV1Y2hhcltiWzFdXSkKKwkJCQkJYnJlYWs7CisJCQkJbiA9IFVVREVDT0RFKCpiKyspIDw8IDE4OworCQkJCW4gfD0gVVVERUNPREUoKmIrKykgPDwgMTI7CisJCQkJKm91dCsrID0gbiA+PiAxNjsgdG90YWwrKzsKKwkJCQktLWw7CisKIAkJCQlpZiAobCA+IDApIHsKIAkJCQkJaWYgKCF1dWNoYXJbYlswXV0pCiAJCQkJCQlicmVhazsKQEAgLTYyNiwxNCArNjI1LDEzIEBACiAJCQl3aGlsZSAobCA+IDApIHsKIAkJCQlpbnQgbiA9IDA7CiAKLQkJCQlpZiAobCA+IDApIHsKLQkJCQkJaWYgKCFiYXNlNjRbYlswXV0gfHwgIWJhc2U2NFtiWzFdXSkKLQkJCQkJCWJyZWFrOwotCQkJCQluID0gYmFzZTY0bnVtWypiKytdIDw8IDE4OwotCQkJCQluIHw9IGJhc2U2NG51bVsqYisrXSA8PCAxMjsKLQkJCQkJKm91dCsrID0gbiA+PiAxNjsgdG90YWwrKzsKLQkJCQkJbCAtPSAyOwotCQkJCX0KKwkJCQlpZiAoIWJhc2U2NFtiWzBdXSB8fCAhYmFzZTY0W2JbMV1dKQorCQkJCQlicmVhazsKKwkJCQluID0gYmFzZTY0bnVtWypiKytdIDw8IDE4OworCQkJCW4gfD0gYmFzZTY0bnVtWypiKytdIDw8IDEyOworCQkJCSpvdXQrKyA9IG4gPj4gMTY7IHRvdGFsKys7CisJCQkJbCAtPSAyOworCiAJCQkJaWYgKGwgPiAwKSB7CiAJCQkJCWlmICgqYiA9PSAnPScpCiAJCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfeHouYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfeHouYwppbmRleCBhMTg4MTg2Li4zMjIzYjM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3h6LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl94ei5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKICNpZiBIQVZFX0xaTUFfSAotI2luY2x1ZGUgPGNtX2x6bWEuaD4KKyNpbmNsdWRlIDxjbTNwL2x6bWEuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl96c3RkLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3pzdGQuYwppbmRleCA0NTEzNzA2Li5lMWVjNjBlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3pzdGQuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3pzdGQuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWYgSEFWRV9aU1REX0gKLSNpbmNsdWRlIDxjbV96c3RkLmg+CisjaW5jbHVkZSA8Y20zcC96c3RkLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfN3ppcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF83emlwLmMKaW5kZXggYTg4NWE0Yy4uNDU2YjJmOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF83emlwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF83emlwLmMKQEAgLTMzLDEzICszMywxMyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9CWkxJQl9ICi0jaW5jbHVkZSA8Y21fYnpsaWIuaD4KKyNpbmNsdWRlIDxjbTNwL2J6bGliLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xaTUFfSAotI2luY2x1ZGUgPGNtX2x6bWEuaD4KKyNpbmNsdWRlIDxjbTNwL2x6bWEuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPgorI2luY2x1ZGUgPGNtM3AvemxpYi5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCkBAIC0xMDg2LDEwICsxMDg2LDE3IEBACiAJCQkJemlwLT5iY2pfc3RhdGUgPSAwOwogCQkJCWJyZWFrOwogCQkJY2FzZSBfN1pfREVMVEE6CisJCQkJaWYgKGNvZGVyMi0+cHJvcGVydGllc1NpemUgIT0gMSkgeworCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCQkJICAgICJJbnZhbGlkIERlbHRhIHBhcmFtZXRlciIpOworCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCQl9CiAJCQkJZmlsdGVyc1tmaV0uaWQgPSBMWk1BX0ZJTFRFUl9ERUxUQTsKIAkJCQltZW1zZXQoJmRlbHRhX29wdCwgMCwgc2l6ZW9mKGRlbHRhX29wdCkpOwogCQkJCWRlbHRhX29wdC50eXBlID0gTFpNQV9ERUxUQV9UWVBFX0JZVEU7Ci0JCQkJZGVsdGFfb3B0LmRpc3QgPSAxOworCQkJCWRlbHRhX29wdC5kaXN0ID0KKwkJCQkgICAgKHVpbnQzMl90KWNvZGVyMi0+cHJvcGVydGllc1swXSArIDE7CiAJCQkJZmlsdGVyc1tmaV0ub3B0aW9ucyA9ICZkZWx0YV9vcHQ7CiAJCQkJZmkrKzsKIAkJCQlicmVhazsKQEAgLTE3ODcsNyArMTc5NCw3IEBACiAJCXJldHVybiAoMCk7CiAJfQogCi0JaWYgKCpwICE9IGtTaXplKQorCWlmICgqcCAhPSBrQ1JDKQogCQlyZXR1cm4gKC0xKTsKIAogCWlmIChyZWFkX0RpZ2VzdHMoYSwgJihwaS0+ZGlnZXN0KSwgKHNpemVfdClwaS0+bnVtUGFja1N0cmVhbXMpIDwgMCkKQEAgLTI5NjQsMTMgKzI5NzEsNyBAQAogCWlmICh6aXAtPmNvZGVjID09IF83Wl9DT1BZICYmIHppcC0+Y29kZWMyID09ICh1bnNpZ25lZCBsb25nKS0xKSB7CiAJCS8qIENvcHkgbW9kZS4gKi8KIAotCQkvKgotCQkgKiBOb3RlOiAnMScgaGVyZSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KLQkJICogUmVjYWxsIHRoYXQgdGhlIGRlY29tcHJlc3Npb24gbGF5ZXIgcmV0dXJucyBhIGNvdW50IG9mCi0JCSAqIGF2YWlsYWJsZSBieXRlczsgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhhdCBmb3JjZXMgdGhlCi0JCSAqIGRlY29tcHJlc3NvciB0byBjb21iaW5lIHJlYWRzIGJ5IGNvcHlpbmcgZGF0YS4KLQkJICovCi0JCSpidWZmID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMSwgJmJ5dGVzX2F2YWlsKTsKKwkJKmJ1ZmYgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCBtaW5pbXVtLCAmYnl0ZXNfYXZhaWwpOwogCQlpZiAoYnl0ZXNfYXZhaWwgPD0gMCkgewogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCiAJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKQEAgLTMzMjMsOCArMzMyNCw3IEBACiAJICogUmVsZWFzZSB0aGUgbWVtb3J5IHdoaWNoIHRoZSBwcmV2aW91cyBmb2xkZXIgdXNlZCBmb3IgQkNKMi4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWlmICh6aXAtPnN1Yl9zdHJlYW1fYnVmZltpXSAhPSBOVUxMKQotCQkJZnJlZSh6aXAtPnN1Yl9zdHJlYW1fYnVmZltpXSk7CisJCWZyZWUoemlwLT5zdWJfc3RyZWFtX2J1ZmZbaV0pOwogCQl6aXAtPnN1Yl9zdHJlYW1fYnVmZltpXSA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hbGwuYwppbmRleCAyMTI3ZWJkMy4uZGVhNTU4YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hbGwuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbC5jCkBAIC03Miw2ICs3Miw3IEBACiAJYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0Xzd6aXAoYSk7CiAJYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NhYihhKTsKIAlhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyKGEpOworCWFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1KGEpOwogCWFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9pc285NjYwKGEpOwogCS8qIFNlZWsgaXMgcmVhbGx5IGJhZCwgc2luY2UgaXQgZm9yY2VzIHRoZSByZWFkLWFoZWFkCiAJICogbG9naWMgdG8gZGlzY2FyZCBidWZmZXJlZCBkYXRhLiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hci5jCmluZGV4IGI2YjlmYzMuLjI5NmI3ZGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FyLmMKQEAgLTEzOCw4ICsxMzgsNyBAQAogCXN0cnVjdCBhciAqYXI7CiAKIAlhciA9IChzdHJ1Y3QgYXIgKikoYS0+Zm9ybWF0LT5kYXRhKTsKLQlpZiAoYXItPnN0cnRhYikKLQkJZnJlZShhci0+c3RydGFiKTsKKwlmcmVlKGFyLT5zdHJ0YWIpOwogCWZyZWUoYXIpOwogCShhLT5mb3JtYXQtPmRhdGEpID0gTlVMTDsKIAlyZXR1cm4gKEFSQ0hJVkVfT0spOwpAQCAtMzg4LDkgKzM4NywxMCBAQAogCiAJLyoKIAkgKiAiLyIgaXMgdGhlIFNWUjQvR05VIGFyY2hpdmUgc3ltYm9sIHRhYmxlLgorCSAqICIvU1lNNjQvIiBpcyB0aGUgU1ZSNC9HTlUgNjQtYml0IHZhcmlhbnQgYXJjaGl2ZSBzeW1ib2wgdGFibGUuCiAJICovCi0JaWYgKHN0cmNtcChmaWxlbmFtZSwgIi8iKSA9PSAwKSB7Ci0JCWFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZShlbnRyeSwgIi8iKTsKKwlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLyIpID09IDAgfHwgc3RyY21wKGZpbGVuYW1lLCAiL1NZTTY0LyIpID09IDApIHsKKwkJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGVudHJ5LCBmaWxlbmFtZSk7CiAJCS8qIFBhcnNlIHRoZSB0aW1lLCBvd25lciwgbW9kZSwgc2l6ZSBmaWVsZHMuICovCiAJCXIgPSBhcl9wYXJzZV9jb21tb25faGVhZGVyKGFyLCBlbnRyeSwgaCk7CiAJCS8qIEZvcmNlIHRoZSBmaWxlIHR5cGUgdG8gYSByZWd1bGFyIGZpbGUuICovCkBAIC00NTksNiArNDU5LDcgQEAKIAl1aW50NjRfdCBuOwogCiAJLyogQ29weSByZW1haW5pbmcgaGVhZGVyICovCisJYXJjaGl2ZV9lbnRyeV9zZXRfZmlsZXR5cGUoZW50cnksIEFFX0lGUkVHKTsKIAlhcmNoaXZlX2VudHJ5X3NldF9tdGltZShlbnRyeSwKIAkgICAgKHRpbWVfdClhcl9hdG9sMTAoaCArIEFSX2RhdGVfb2Zmc2V0LCBBUl9kYXRlX3NpemUpLCAwTCk7CiAJYXJjaGl2ZV9lbnRyeV9zZXRfdWlkKGVudHJ5LApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9ieV9jb2RlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2J5X2NvZGUuYwppbmRleCAwODQ1NjNmLi4wMzQzNTNkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2J5X2NvZGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2J5X2NvZGUuYwpAQCAtNjAsNiArNjAsOSBAQAogCWNhc2UgQVJDSElWRV9GT1JNQVRfUkFSOgogCQlyZXR1cm4gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcihhKTsKIAkJYnJlYWs7CisJY2FzZSBBUkNISVZFX0ZPUk1BVF9SQVJfVjU6CisJCXJldHVybiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyNShhKTsKKwkJYnJlYWs7CiAJY2FzZSBBUkNISVZFX0ZPUk1BVF9UQVI6CiAJCXJldHVybiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyKGEpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY2FiLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NhYi5jCmluZGV4IDUxZjc5ZmEuLjU4NjQ0YmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY2FiLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jYWIuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTE1MDksOCArMTUwOSw4IEBACiAJCQl9CiAJCQlpZiAobXN6aXAgPT0gMSAmJiBjYWItPnN0cmVhbS5uZXh0X2luWzBdICE9IDB4NGIpCiAJCQkJZ290byBub21zemlwOwotCQkJZWxzZSBpZiAoY2FiLT5zdHJlYW0ubmV4dF9pblswXSAhPSAweDQzIHx8Ci0JCQkgICAgY2FiLT5zdHJlYW0ubmV4dF9pblsxXSAhPSAweDRiKQorCQkJZWxzZSBpZiAobXN6aXAgPT0gMiAmJiAoY2FiLT5zdHJlYW0ubmV4dF9pblswXSAhPSAweDQzIHx8CisJCQkgICAgY2FiLT5zdHJlYW0ubmV4dF9pblsxXSAhPSAweDRiKSkKIAkJCQlnb3RvIG5vbXN6aXA7CiAJCQljYWItPnN0cmVhbS5uZXh0X2luICs9IG1zemlwOwogCQkJY2FiLT5zdHJlYW0uYXZhaWxfaW4gLT0gbXN6aXA7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NwaW8uYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY3Bpby5jCmluZGV4IDY3ZDViMjEuLjFjOTZlNmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY3Bpby5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY3Bpby5jCkBAIC05NTUsOCArOTU1LDcgQEAKICAgICAgICAgd2hpbGUgKGNwaW8tPmxpbmtzX2hlYWQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHN0cnVjdCBsaW5rc19lbnRyeSAqbHAgPSBjcGlvLT5saW5rc19oZWFkLT5uZXh0OwogCi0gICAgICAgICAgICAgICAgaWYgKGNwaW8tPmxpbmtzX2hlYWQtPm5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGNwaW8tPmxpbmtzX2hlYWQtPm5hbWUpOworICAgICAgICAgICAgICAgIGZyZWUoY3Bpby0+bGlua3NfaGVhZC0+bmFtZSk7CiAgICAgICAgICAgICAgICAgZnJlZShjcGlvLT5saW5rc19oZWFkKTsKICAgICAgICAgICAgICAgICBjcGlvLT5saW5rc19oZWFkID0gbHA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfaXNvOTY2MC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9pc285NjYwLmMKaW5kZXggOTM2NDlmOC4uOTEyMTE2NiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9pc285NjYwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9pc285NjYwLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHRpbWUuaD4KICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtMTcyNCw4ICsxNzI0LDcgQEAKIAlmcmVlKGlzbzk2NjAtPnJlYWRfY2VfcmVxLnJlcXMpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmlzbzk2NjAtPnBhdGhuYW1lKTsKIAlhcmNoaXZlX3N0cmluZ19mcmVlKCZpc285NjYwLT5wcmV2aW91c19wYXRobmFtZSk7Ci0JaWYgKGlzbzk2NjAtPnBlbmRpbmdfZmlsZXMuZmlsZXMpCi0JCWZyZWUoaXNvOTY2MC0+cGVuZGluZ19maWxlcy5maWxlcyk7CisJZnJlZShpc285NjYwLT5wZW5kaW5nX2ZpbGVzLmZpbGVzKTsKICNpZmRlZiBIQVZFX1pMSUJfSAogCWZyZWUoaXNvOTY2MC0+ZW50cnlfemlzb2ZzLnVuY29tcHJlc3NlZF9idWZmZXIpOwogCWZyZWUoaXNvOTY2MC0+ZW50cnlfemlzb2ZzLmJsb2NrX3BvaW50ZXJzKTsKQEAgLTIxMDIsNiArMjEwMSw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kKQogewogCXN0cnVjdCBpc285NjYwICppc285NjYwOworCWludCBlbnRyeV9zZWVuID0gMDsKIAogCWlzbzk2NjAgPSAoc3RydWN0IGlzbzk2NjAgKikoYS0+Zm9ybWF0LT5kYXRhKTsKIApAQCAtMjI1Nyw4ICsyMjU3LDE2IEBACiAJCX0KIAogCQlwICs9IHBbMl07CisJCWVudHJ5X3NlZW4gPSAxOwogCX0KLQlyZXR1cm4gKEFSQ0hJVkVfT0spOworCisJaWYgKGVudHJ5X3NlZW4pCisJCXJldHVybiAoQVJDSElWRV9PSyk7CisJZWxzZSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSAgIlRyaWVkIHRvIHBhcnNlIFJvY2tyaWRnZSBleHRlbnNpb25zLCBidXQgbm9uZSBmb3VuZCIpOworCQlyZXR1cm4gKEFSQ0hJVkVfV0FSTik7CisJfQogfQogCiBzdGF0aWMgaW50CkBAIC0zMDI5LDggKzMwMzcsNyBAQAogCQlpZiAoaGVhcC0+YWxsb2NhdGVkKQogCQkJbWVtY3B5KG5ld19wZW5kaW5nX2ZpbGVzLCBoZWFwLT5maWxlcywKIAkJCSAgICBoZWFwLT5hbGxvY2F0ZWQgKiBzaXplb2YobmV3X3BlbmRpbmdfZmlsZXNbMF0pKTsKLQkJaWYgKGhlYXAtPmZpbGVzICE9IE5VTEwpCi0JCQlmcmVlKGhlYXAtPmZpbGVzKTsKKwkJZnJlZShoZWFwLT5maWxlcyk7CiAJCWhlYXAtPmZpbGVzID0gbmV3X3BlbmRpbmdfZmlsZXM7CiAJCWhlYXAtPmFsbG9jYXRlZCA9IG5ld19zaXplOwogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2xoYS5jCmluZGV4IDk4ZDAyYzYuLjEzNTdmOWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9saGEuYwpAQCAtMTc1LDcgKzE3NSw5IEBACiAJc3RydWN0IGFyY2hpdmVfc3RyaW5nIAkgZ25hbWU7CiAJdWludDE2X3QJCSBoZWFkZXJfY3JjOwogCXVpbnQxNl90CQkgY3JjOwotCXN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICpzY29udjsKKwkvKiBkaXJuYW1lIGFuZCBmaWxlbmFtZSBjb3VsZCBiZSBpbiBkaWZmZXJlbnQgY29kZXBhZ2VzICovCisJc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgKnNjb252X2RpcjsKKwlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnZfZm5hbWU7CiAJc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgKm9wdF9zY29udjsKIAogCXN0cnVjdCBhcmNoaXZlX3N0cmluZyAJIGRpcm5hbWU7CkBAIC0yMzIsOCArMjM0LDggQEAKIHN0YXRpYyB0aW1lX3QJbGhhX3dpbl90aW1lKHVpbnQ2NF90LCBsb25nICopOwogc3RhdGljIHVuc2lnbmVkIGNoYXIJbGhhX2NhbGNzdW0odW5zaWduZWQgY2hhciwgY29uc3Qgdm9pZCAqLAogCQkgICAgaW50LCBzaXplX3QpOwotc3RhdGljIGludAlsaGFfcGFyc2VfbGlua25hbWUoc3RydWN0IGFyY2hpdmVfc3RyaW5nICosCi0JCSAgICBzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKik7CitzdGF0aWMgaW50CWxoYV9wYXJzZV9saW5rbmFtZShzdHJ1Y3QgYXJjaGl2ZV93c3RyaW5nICosCisJCSAgICBzdHJ1Y3QgYXJjaGl2ZV93c3RyaW5nICopOwogc3RhdGljIGludAlsaGFfcmVhZF9kYXRhX25vbmUoc3RydWN0IGFyY2hpdmVfcmVhZCAqLCBjb25zdCB2b2lkICoqLAogCQkgICAgc2l6ZV90ICosIGludDY0X3QgKik7CiBzdGF0aWMgaW50CWxoYV9yZWFkX2RhdGFfbHpoKHN0cnVjdCBhcmNoaXZlX3JlYWQgKiwgY29uc3Qgdm9pZCAqKiwKQEAgLTQ3MywxMyArNDc1LDE1IEBACiBhcmNoaXZlX3JlYWRfZm9ybWF0X2xoYV9yZWFkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLAogICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSkKIHsKLQlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgbGlua25hbWU7Ci0Jc3RydWN0IGFyY2hpdmVfc3RyaW5nIHBhdGhuYW1lOworCXN0cnVjdCBhcmNoaXZlX3dzdHJpbmcgbGlua25hbWU7CisJc3RydWN0IGFyY2hpdmVfd3N0cmluZyBwYXRobmFtZTsKIAlzdHJ1Y3QgbGhhICpsaGE7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcDsKIAljb25zdCBjaGFyICpzaWduYXR1cmU7CiAJaW50IGVycjsKLQkKKwlzdHJ1Y3QgYXJjaGl2ZV9tc3RyaW5nIGNvbnZfYnVmZmVyOworCWNvbnN0IHdjaGFyX3QgKmNvbnZfYnVmZmVyX3A7CisKIAlsaGFfY3JjMTZfaW5pdCgpOwogCiAJYS0+YXJjaGl2ZS5hcmNoaXZlX2Zvcm1hdCA9IEFSQ0hJVkVfRk9STUFUX0xIQTsKQEAgLTU2MSwxMCArNTY1LDEzIEBACiAJYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJmxoYS0+ZGlybmFtZSk7CiAJYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJmxoYS0+ZmlsZW5hbWUpOwogCWxoYS0+ZG9zX2F0dHIgPSAwOwotCWlmIChsaGEtPm9wdF9zY29udiAhPSBOVUxMKQotCQlsaGEtPnNjb252ID0gbGhhLT5vcHRfc2NvbnY7Ci0JZWxzZQotCQlsaGEtPnNjb252ID0gTlVMTDsKKwlpZiAobGhhLT5vcHRfc2NvbnYgIT0gTlVMTCkgeworCQlsaGEtPnNjb252X2RpciA9IGxoYS0+b3B0X3Njb252OworCQlsaGEtPnNjb252X2ZuYW1lID0gbGhhLT5vcHRfc2NvbnY7CisJfSBlbHNlIHsKKwkJbGhhLT5zY29udl9kaXIgPSBOVUxMOworCQlsaGEtPnNjb252X2ZuYW1lID0gTlVMTDsKKwl9CiAKIAlzd2l0Y2ggKHBbSF9MRVZFTF9PRkZTRVRdKSB7CiAJY2FzZSAwOgpAQCAtNTk0LDEyICs2MDEsNTQgQEAKIAkJcmV0dXJuICh0cnVuY2F0ZWRfZXJyb3IoYSkpOwogCiAJLyoKLQkgKiBNYWtlIGEgcGF0aG5hbWUgZnJvbSBhIGRpcm5hbWUgYW5kIGEgZmlsZW5hbWUuCi0JICovCi0JYXJjaGl2ZV9zdHJpbmdfY29uY2F0KCZsaGEtPmRpcm5hbWUsICZsaGEtPmZpbGVuYW1lKTsKKwkgKiBNYWtlIGEgcGF0aG5hbWUgZnJvbSBhIGRpcm5hbWUgYW5kIGEgZmlsZW5hbWUsIGFmdGVyIGNvbnZlcnRpbmcgdG8gVW5pY29kZS4KKwkgKiBUaGlzIGlzIGJlY2F1c2UgY29kZXBhZ2VzIG1pZ2h0IGRpZmZlciBiZXR3ZWVuIGRpcm5hbWUgYW5kIGZpbGVuYW1lLgorCSovCiAJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmcGF0aG5hbWUpOwogCWFyY2hpdmVfc3RyaW5nX2luaXQoJmxpbmtuYW1lKTsKLQlhcmNoaXZlX3N0cmluZ19jb3B5KCZwYXRobmFtZSwgJmxoYS0+ZGlybmFtZSk7CisJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmY29udl9idWZmZXIuYWVzX21icyk7CisJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmY29udl9idWZmZXIuYWVzX21ic19pbl9sb2NhbGUpOworCWFyY2hpdmVfc3RyaW5nX2luaXQoJmNvbnZfYnVmZmVyLmFlc191dGY4KTsKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZjb252X2J1ZmZlci5hZXNfd2NzKTsKKwlpZiAoMCAhPSBhcmNoaXZlX21zdHJpbmdfY29weV9tYnNfbGVuX2woJmNvbnZfYnVmZmVyLCBsaGEtPmRpcm5hbWUucywgbGhhLT5kaXJuYW1lLmxlbmd0aCwgbGhhLT5zY29udl9kaXIpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSJQYXRobmFtZSBjYW5ub3QgYmUgY29udmVydGVkICIKKwkJCSJmcm9tICVzIHRvIFVuaWNvZGUuIiwKKwkJCWFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fY2hhcnNldF9uYW1lKGxoYS0+c2NvbnZfZGlyKSk7CisJCWVyciA9IEFSQ0hJVkVfRkFUQUw7CisJfSBlbHNlIGlmICgwICE9IGFyY2hpdmVfbXN0cmluZ19nZXRfd2NzKCZhLT5hcmNoaXZlLCAmY29udl9idWZmZXIsICZjb252X2J1ZmZlcl9wKSkKKwkJZXJyID0gQVJDSElWRV9GQVRBTDsKKwlpZiAoZXJyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJYXJjaGl2ZV9tc3RyaW5nX2NsZWFuKCZjb252X2J1ZmZlcik7CisJCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZwYXRobmFtZSk7CisJCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZsaW5rbmFtZSk7CisJCXJldHVybiAoZXJyKTsKKwl9CisJYXJjaGl2ZV93c3RyaW5nX2NvcHkoJnBhdGhuYW1lLCAmY29udl9idWZmZXIuYWVzX3djcyk7CisKKwlhcmNoaXZlX3N0cmluZ19lbXB0eSgmY29udl9idWZmZXIuYWVzX21icyk7CisJYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJmNvbnZfYnVmZmVyLmFlc19tYnNfaW5fbG9jYWxlKTsKKwlhcmNoaXZlX3N0cmluZ19lbXB0eSgmY29udl9idWZmZXIuYWVzX3V0ZjgpOworCWFyY2hpdmVfd3N0cmluZ19lbXB0eSgmY29udl9idWZmZXIuYWVzX3djcyk7CisJaWYgKDAgIT0gYXJjaGl2ZV9tc3RyaW5nX2NvcHlfbWJzX2xlbl9sKCZjb252X2J1ZmZlciwgbGhhLT5maWxlbmFtZS5zLCBsaGEtPmZpbGVuYW1lLmxlbmd0aCwgbGhhLT5zY29udl9mbmFtZSkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQlBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJIlBhdGhuYW1lIGNhbm5vdCBiZSBjb252ZXJ0ZWQgIgorCQkJImZyb20gJXMgdG8gVW5pY29kZS4iLAorCQkJYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUobGhhLT5zY29udl9mbmFtZSkpOworCQllcnIgPSBBUkNISVZFX0ZBVEFMOworCX0KKwllbHNlIGlmICgwICE9IGFyY2hpdmVfbXN0cmluZ19nZXRfd2NzKCZhLT5hcmNoaXZlLCAmY29udl9idWZmZXIsICZjb252X2J1ZmZlcl9wKSkKKwkJZXJyID0gQVJDSElWRV9GQVRBTDsKKwlpZiAoZXJyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJYXJjaGl2ZV9tc3RyaW5nX2NsZWFuKCZjb252X2J1ZmZlcik7CisJCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZwYXRobmFtZSk7CisJCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZsaW5rbmFtZSk7CisJCXJldHVybiAoZXJyKTsKKwl9CisJYXJjaGl2ZV93c3RyaW5nX2NvbmNhdCgmcGF0aG5hbWUsICZjb252X2J1ZmZlci5hZXNfd2NzKTsKKwlhcmNoaXZlX21zdHJpbmdfY2xlYW4oJmNvbnZfYnVmZmVyKTsKIAogCWlmICgobGhhLT5tb2RlICYgQUVfSUZNVCkgPT0gQUVfSUZMTkspIHsKIAkJLyoKQEAgLTYxMCw4ICs2NTksOCBAQAogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCiAJCSAgICAJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCQkgICAgIlVua25vd24gc3ltbGluay1uYW1lIik7Ci0JCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZwYXRobmFtZSk7Ci0JCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZsaW5rbmFtZSk7CisJCQlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmcGF0aG5hbWUpOworCQkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTYyOSwzOSArNjc4LDEzIEBACiAJLyoKIAkgKiBTZXQgYmFzaWMgZmlsZSBwYXJhbWV0ZXJzLgogCSAqLwotCWlmIChhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWVfbChlbnRyeSwgcGF0aG5hbWUucywKLQkgICAgcGF0aG5hbWUubGVuZ3RoLCBsaGEtPnNjb252KSAhPSAwKSB7Ci0JCWlmIChlcnJubyA9PSBFTk9NRU0pIHsKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCi0JCQkgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgUGF0aG5hbWUiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7Ci0JCX0KLQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkgICAgIlBhdGhuYW1lIGNhbm5vdCBiZSBjb252ZXJ0ZWQgIgotCQkgICAgImZyb20gJXMgdG8gY3VycmVudCBsb2NhbGUuIiwKLQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fY2hhcnNldF9uYW1lKGxoYS0+c2NvbnYpKTsKLQkJZXJyID0gQVJDSElWRV9XQVJOOwotCX0KLQlhcmNoaXZlX3N0cmluZ19mcmVlKCZwYXRobmFtZSk7CisJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lX3coZW50cnksIHBhdGhuYW1lLnMpOworCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZwYXRobmFtZSk7CiAJaWYgKGFyY2hpdmVfc3RybGVuKCZsaW5rbmFtZSkgPiAwKSB7Ci0JCWlmIChhcmNoaXZlX2VudHJ5X2NvcHlfc3ltbGlua19sKGVudHJ5LCBsaW5rbmFtZS5zLAotCQkgICAgbGlua25hbWUubGVuZ3RoLCBsaGEtPnNjb252KSAhPSAwKSB7Ci0JCQlpZiAoZXJybm8gPT0gRU5PTUVNKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKLQkJCQkgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgTGlua25hbWUiKTsKLQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwotCQkJfQotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAiTGlua25hbWUgY2Fubm90IGJlIGNvbnZlcnRlZCAiCi0JCQkgICAgImZyb20gJXMgdG8gY3VycmVudCBsb2NhbGUuIiwKLQkJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2NoYXJzZXRfbmFtZShsaGEtPnNjb252KSk7Ci0JCQllcnIgPSBBUkNISVZFX1dBUk47Ci0JCX0KKwkJYXJjaGl2ZV9lbnRyeV9jb3B5X3N5bWxpbmtfdyhlbnRyeSwgbGlua25hbWUucyk7CiAJfSBlbHNlCiAJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmsoZW50cnksIE5VTEwpOwotCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKKwlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmbGlua25hbWUpOwogCS8qCiAJICogV2hlbiBhIGhlYWRlciBsZXZlbCBpcyAwLCB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQKIAkgKiBhIHBhdGhuYW1lIGFuZCBhIHN5bWxpbmsgaGFzICdcJyBjaGFyYWN0ZXIsIGEgZGlyZWN0b3J5CkBAIC0xMjA4LDYgKzEyMzEsMjcgQEAKIAkJCWFyY2hpdmVfc3RybmNweSgmbGhhLT5maWxlbmFtZSwKIAkJCSAgICAoY29uc3QgY2hhciAqKWV4dGRoZWFkZXIsIGRhdGFzaXplKTsKIAkJCWJyZWFrOworCQljYXNlIEVYVF9VVEYxNl9GSUxFTkFNRToKKwkJCWlmIChkYXRhc2l6ZSA9PSAwKSB7CisJCQkJLyogbWF5YmUgZGlyZWN0b3J5IGhlYWRlciAqLworCQkJCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZsaGEtPmZpbGVuYW1lKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoZGF0YXNpemUgJiAxKSB7CisJCQkJLyogVVRGLTE2IGNoYXJhY3RlcnMgdGFrZSBhbHdheXMgMiBvciA0IGJ5dGVzICovCisJCQkJZ290byBpbnZhbGlkOworCQkJfQorCQkJaWYgKGV4dGRoZWFkZXJbMF0gPT0gJ1wwJykKKwkJCQlnb3RvIGludmFsaWQ7CisJCQlhcmNoaXZlX3N0cmluZ19lbXB0eSgmbGhhLT5maWxlbmFtZSk7CisJCQlhcmNoaXZlX2FycmF5X2FwcGVuZCgmbGhhLT5maWxlbmFtZSwKKwkJCQkoY29uc3QgY2hhciAqKWV4dGRoZWFkZXIsIGRhdGFzaXplKTsKKwkJCS8qIFNldHVwIGEgc3RyaW5nIGNvbnZlcnNpb24gZm9yIGEgZmlsZW5hbWUuICovCisJCQlsaGEtPnNjb252X2ZuYW1lID0KKwkJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2Zyb21fY2hhcnNldCgmYS0+YXJjaGl2ZSwKKwkJCSAgICAgICAgIlVURi0xNkxFIiwgMSk7CisJCQlpZiAobGhhLT5zY29udl9mbmFtZSA9PSBOVUxMKQorCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQlicmVhazsKIAkJY2FzZSBFWFRfRElSRUNUT1JZOgogCQkJaWYgKGRhdGFzaXplID09IDAgfHwgZXh0ZGhlYWRlclswXSA9PSAnXDAnKQogCQkJCS8qIG5vIGRpcmVjdG9yeSBuYW1lIGRhdGEuIGV4aXQgdGhpcyBjYXNlLiAqLwpAQCAtMTIyOCw2ICsxMjcyLDUwIEBACiAJCQkJLyogaW52YWxpZCBkaXJlY3RvcnkgZGF0YSAqLwogCQkJCWdvdG8gaW52YWxpZDsKIAkJCWJyZWFrOworCQljYXNlIEVYVF9VVEYxNl9ESVJFQ1RPUlk6CisJCQkvKiBVVEYtMTYgY2hhcmFjdGVycyB0YWtlIGFsd2F5cyAyIG9yIDQgYnl0ZXMgKi8KKwkJCWlmIChkYXRhc2l6ZSA9PSAwIHx8IChkYXRhc2l6ZSAmIDEpIHx8CisJCQkgICAgZXh0ZGhlYWRlclswXSA9PSAnXDAnKSB7CisJCQkJLyogbm8gZGlyZWN0b3J5IG5hbWUgZGF0YS4gZXhpdCB0aGlzIGNhc2UuICovCisJCQkJZ290byBpbnZhbGlkOworCQkJfQorCisJCQlhcmNoaXZlX3N0cmluZ19lbXB0eSgmbGhhLT5kaXJuYW1lKTsKKwkJCWFyY2hpdmVfYXJyYXlfYXBwZW5kKCZsaGEtPmRpcm5hbWUsCisJCQkJKGNvbnN0IGNoYXIgKilleHRkaGVhZGVyLCBkYXRhc2l6ZSk7CisJCQlsaGEtPnNjb252X2RpciA9CisJCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9mcm9tX2NoYXJzZXQoJmEtPmFyY2hpdmUsCisJCQkgICAgICAgICJVVEYtMTZMRSIsIDEpOworCQkJaWYgKGxoYS0+c2NvbnZfZGlyID09IE5VTEwpCisJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCWVsc2UgeworCQkJCS8qCisJCQkJICogQ29udmVydCBkaXJlY3RvcnkgZGVsaW1pdGVyIGZyb20gMHhGRkZGCisJCQkJICogdG8gJy8nIGZvciBsb2NhbCBzeXN0ZW0uCisJCQkJICovCisJCQkJdWludDE2X3QgZGlyU2VwOworCQkJCXVpbnQxNl90IGQgPSAxOworCQkJCWlmIChhcmNoaXZlX2JlMTZkZWMoJmQpID09IDEpCisJCQkJCWRpclNlcCA9IDB4MkYwMDsKKwkJCQllbHNlCisJCQkJCWRpclNlcCA9IDB4MDAyRjsKKworCQkJCS8qIFVURi0xNkxFIGNoYXJhY3RlciAqLworCQkJCXVpbnQxNl90ICp1dGYxNm5hbWUgPQorCQkJCSAgICAodWludDE2X3QgKilsaGEtPmRpcm5hbWUuczsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbGhhLT5kaXJuYW1lLmxlbmd0aCAvIDI7IGkrKykgeworCQkJCQlpZiAodXRmMTZuYW1lW2ldID09IDB4RkZGRikgeworCQkJCQkJdXRmMTZuYW1lW2ldID0gZGlyU2VwOworCQkJCQl9CisJCQkJfQorCQkJCS8qIElzIGxhc3QgY2hhcmFjdGVyIGRpcmVjdG9yeSBzZXBhcmF0b3I/ICovCisJCQkJaWYgKHV0ZjE2bmFtZVtsaGEtPmRpcm5hbWUubGVuZ3RoIC8gMiAtIDFdICE9CisJCQkJICAgIGRpclNlcCkgeworCQkJCQkvKiBpbnZhbGlkIGRpcmVjdG9yeSBkYXRhICovCisJCQkJCWdvdG8gaW52YWxpZDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBFWFRfRE9TX0FUVFI6CiAJCQlpZiAoZGF0YXNpemUgPT0gMikKIAkJCQlsaGEtPmRvc19hdHRyID0gKHVuc2lnbmVkIGNoYXIpCkBAIC0xMjc2LDExICsxMzY0LDE2IEBACiAJCQkJCWNoYXJzZXQgPSBjcC5zOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJbGhhLT5zY29udiA9CisJCQkJbGhhLT5zY29udl9kaXIgPQorCQkJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2Zyb21fY2hhcnNldCgKKwkJCQkJJihhLT5hcmNoaXZlKSwgY2hhcnNldCwgMSk7CisJCQkJbGhhLT5zY29udl9mbmFtZSA9CiAJCQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fZnJvbV9jaGFyc2V0KAogCQkJCQkmKGEtPmFyY2hpdmUpLCBjaGFyc2V0LCAxKTsKIAkJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZjcCk7Ci0JCQkJaWYgKGxoYS0+c2NvbnYgPT0gTlVMTCkKKwkJCQlpZiAobGhhLT5zY29udl9kaXIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCQlpZiAobGhhLT5zY29udl9mbmFtZSA9PSBOVUxMKQogCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xMzM2LDggKzE0MjksNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgRVhUX1RJTUVaT05FOgkJLyogTm90IHN1cHBvcnRlZCAqLwotCQljYXNlIEVYVF9VVEYxNl9GSUxFTkFNRToJLyogTm90IHN1cHBvcnRlZCAqLwotCQljYXNlIEVYVF9VVEYxNl9ESVJFQ1RPUlk6CS8qIE5vdCBzdXBwb3J0ZWQgKi8KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KQEAgLTE2MDAsMTkgKzE2OTIsMTkgQEAKICAqICB0aGVuIGEgYXJjaGl2ZWQgcGF0aG5hbWUgaXMgJ3h4eC9iYmJ8YWFhL2JiL2NjJwogICovCiBzdGF0aWMgaW50Ci1saGFfcGFyc2VfbGlua25hbWUoc3RydWN0IGFyY2hpdmVfc3RyaW5nICpsaW5rbmFtZSwKLSAgICBzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKnBhdGhuYW1lKQorbGhhX3BhcnNlX2xpbmtuYW1lKHN0cnVjdCBhcmNoaXZlX3dzdHJpbmcgKmxpbmtuYW1lLAorICAgIHN0cnVjdCBhcmNoaXZlX3dzdHJpbmcgKnBhdGhuYW1lKQogewotCWNoYXIgKglsaW5rcHRyOworCXdjaGFyX3QgKglsaW5rcHRyOwogCXNpemVfdCAJc3ltbGVuOwogCi0JbGlua3B0ciA9IHN0cmNocihwYXRobmFtZS0+cywgJ3wnKTsKKwlsaW5rcHRyID0gd2NzY2hyKHBhdGhuYW1lLT5zLCBMJ3wnKTsKIAlpZiAobGlua3B0ciAhPSBOVUxMKSB7Ci0JCXN5bWxlbiA9IHN0cmxlbihsaW5rcHRyICsgMSk7Ci0JCWFyY2hpdmVfc3RybmNweShsaW5rbmFtZSwgbGlua3B0cisxLCBzeW1sZW4pOworCQlzeW1sZW4gPSB3Y3NsZW4obGlua3B0ciArIDEpOworCQlhcmNoaXZlX3dzdHJuY3B5KGxpbmtuYW1lLCBsaW5rcHRyKzEsIHN5bWxlbik7CiAKIAkJKmxpbmtwdHIgPSAwOwotCQlwYXRobmFtZS0+bGVuZ3RoID0gc3RybGVuKHBhdGhuYW1lLT5zKTsKKwkJcGF0aG5hbWUtPmxlbmd0aCA9IHdjc2xlbihwYXRobmFtZS0+cyk7CiAKIAkJcmV0dXJuICgxKTsKIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X210cmVlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X210cmVlLmMKaW5kZXggNWIwZWFkYy4uMzMyOTQ0YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9tdHJlZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUuYwpAQCAtNDUsNiArNDUsOSBAQAogI2lmZGVmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgorI2lmZGVmIEhBVkVfQ1RZUEVfSAorI2luY2x1ZGUgPGN0eXBlLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCkBAIC0yNTUsNiArMjU4LDcgQEAKIAkJICAgICJDYW4ndCBhbGxvY2F0ZSBtdHJlZSBkYXRhIik7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJfQorCW10cmVlLT5jaGVja2ZzID0gMDsKIAltdHJlZS0+ZmQgPSAtMTsKIAogCV9fYXJjaGl2ZV9yYl90cmVlX2luaXQoJm10cmVlLT5yYnRyZWUsICZyYl9vcHMpOwpAQCAtMTAxMSw3ICsxMDE1LDcgQEAKIHsKIAlzc2l6ZV90IGxlbjsKIAl1aW50bWF4X3QgY291bnRlcjsKLQljaGFyICpwOworCWNoYXIgKnAsICpzOwogCXN0cnVjdCBtdHJlZV9vcHRpb24gKmdsb2JhbDsKIAlzdHJ1Y3QgbXRyZWVfZW50cnkgKmxhc3RfZW50cnk7CiAJaW50IHIsIGlzX2Zvcm1fZDsKQEAgLTEwMjUsNiArMTAyOSw3IEBACiAJKHZvaWQpZGV0ZWN0X2Zvcm0oYSwgJmlzX2Zvcm1fZCk7CiAKIAlmb3IgKGNvdW50ZXIgPSAxOyA7ICsrY291bnRlcikgeworCQlyID0gQVJDSElWRV9PSzsKIAkJbGVuID0gcmVhZGxpbmUoYSwgbXRyZWUsICZwLCA2NTUzNik7CiAJCWlmIChsZW4gPT0gMCkgewogCQkJbXRyZWUtPnRoaXNfZW50cnkgPSBtdHJlZS0+ZW50cmllczsKQEAgLTEwNDUsNiArMTA1MCwxNSBAQAogCQkJY29udGludWU7CiAJCWlmICgqcCA9PSAnXHInIHx8ICpwID09ICdcbicgfHwgKnAgPT0gJ1wwJykKIAkJCWNvbnRpbnVlOworCQkvKiBOb24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkICovCisJCWZvciAocyA9IHA7cyA8IHAgKyBsZW4gLSAxOyBzKyspIHsKKwkJCWlmICghaXNwcmludCgqcykpIHsKKwkJCQlyID0gQVJDSElWRV9GQVRBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAociAhPSBBUkNISVZFX09LKQorCQkJYnJlYWs7CiAJCWlmICgqcCAhPSAnLycpIHsKIAkJCXIgPSBwcm9jZXNzX2FkZF9lbnRyeShhLCBtdHJlZSwgJmdsb2JhbCwgcCwgbGVuLAogCQkJICAgICZsYXN0X2VudHJ5LCBpc19mb3JtX2QpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyLmMKaW5kZXggYzY4ZDc3Yi4uNjFmMjMzMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPiAvKiBjcmMzMiAqLworI2luY2x1ZGUgPGNtM3AvemxpYi5oPiAvKiBjcmMzMiAqLwogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCkBAIC0xNDgsNiArMTQ4LDkgQEAKICNkZWZpbmUgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZIDB4MTAKICNlbmRpZgogCisjdW5kZWYgbWluaW11bQorI2RlZmluZSBtaW5pbXVtKGEsIGIpCSgoYSk8KGIpPyhhKTooYikpCisKIC8qIEZpZWxkcyBjb21tb24gdG8gYWxsIGhlYWRlcnMgKi8KIHN0cnVjdCByYXJfaGVhZGVyCiB7CkBAIC0yNTgsNiArMjYxLDcgQEAKICAgc3RydWN0IGRhdGFfYmxvY2tfb2Zmc2V0cyAqZGJvOwogICB1bnNpZ25lZCBpbnQgY3Vyc29yOwogICB1bnNpZ25lZCBpbnQgbm9kZXM7CisgIGNoYXIgZmlsZW5hbWVfbXVzdF9tYXRjaDsKIAogICAvKiBMWlNTIG1lbWJlcnMgKi8KICAgc3RydWN0IGh1ZmZtYW5fY29kZSBtYWluY29kZTsKQEAgLTEwMjMsOCArMTAyNywxMSBAQAogICBjYXNlIENPTVBSRVNTX01FVEhPRF9HT09EOgogICBjYXNlIENPTVBSRVNTX01FVEhPRF9CRVNUOgogICAgIHJldCA9IHJlYWRfZGF0YV9jb21wcmVzc2VkKGEsIGJ1ZmYsIHNpemUsIG9mZnNldCk7Ci0gICAgaWYgKHJldCAhPSBBUkNISVZFX09LICYmIHJldCAhPSBBUkNISVZFX1dBUk4pCisgICAgaWYgKHJldCAhPSBBUkNISVZFX09LICYmIHJldCAhPSBBUkNISVZFX1dBUk4pIHsKICAgICAgIF9fYXJjaGl2ZV9wcG1kN19mdW5jdGlvbnMuUHBtZDdfRnJlZSgmcmFyLT5wcG1kN19jb250ZXh0KTsKKyAgICAgIHJhci0+c3RhcnRfbmV3X3RhYmxlID0gMTsKKyAgICAgIHJhci0+cHBtZF92YWxpZCA9IDA7CisgICAgfQogICAgIGJyZWFrOwogCiAgIGRlZmF1bHQ6CkBAIC0xNTYwLDYgKzE1NjcsMTIgQEAKICAgICB9CiAgICAgcmV0dXJuIHJldDsKICAgfQorICBlbHNlIGlmIChyYXItPmZpbGVuYW1lX211c3RfbWF0Y2gpCisgIHsKKyAgICBhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKyAgICAgICJNaXNtYXRjaCBvZiBmaWxlIHBhcnRzIHNwbGl0IGFjcm9zcyBtdWx0aS12b2x1bWUgYXJjaGl2ZSIpOworICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CisgIH0KIAogICByYXItPmZpbGVuYW1lX3NhdmUgPSAoY2hhciopcmVhbGxvYyhyYXItPmZpbGVuYW1lX3NhdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lX3NpemUgKyAxKTsKQEAgLTE3MTIsNiArMTcyNSwxMyBAQAogICBzdHJ1Y3QgdG0gKnRtOwogICB0aW1lX3QgdDsKICAgbG9uZyBuc2VjOworI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikgfHwgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorICBzdHJ1Y3QgdG0gdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisgIGVycm5vX3QgdGVycjsKKyAgX190aW1lNjRfdCB0bXB0aW1lOworI2VuZGlmCiAKICAgaWYgKHAgKyAyID4gZW5kcCkKICAgICByZXR1cm4gKC0xKTsKQEAgLTE3NDMsNyArMTc2MywxOCBAQAogICAgICAgICByZW0gPSAoKCh1bnNpZ25lZCkodW5zaWduZWQgY2hhcikqcCkgPDwgMTYpIHwgKHJlbSA+PiA4KTsKICAgICAgICAgcCsrOwogICAgICAgfQorI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikKKyAgICAgIHRtID0gbG9jYWx0aW1lX3IoJnQsICZ0bWJ1Zik7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisgICAgICB0bXB0aW1lID0gdDsKKyAgICAgIHRlcnIgPSBfbG9jYWx0aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKyAgICAgIGlmICh0ZXJyKQorICAgICAgICB0bSA9IE5VTEw7CisgICAgICBlbHNlCisgICAgICAgIHRtID0gJnRtYnVmOworI2Vsc2UKICAgICAgIHRtID0gbG9jYWx0aW1lKCZ0KTsKKyNlbmRpZgogICAgICAgbnNlYyA9IHRtLT50bV9zZWMgKyByZW0gLyBOU19VTklUOwogICAgICAgaWYgKHJtb2RlICYgNCkKICAgICAgIHsKQEAgLTIzMDAsNiArMjMzMSwxMSBAQAogICAgICAgbmV3X3NpemUgPSBESUNUSU9OQVJZX01BWF9TSVpFOwogICAgIGVsc2UKICAgICAgIG5ld19zaXplID0gcmFyX2ZscygodW5zaWduZWQgaW50KXJhci0+dW5wX3NpemUpIDw8IDE7CisgICAgaWYgKG5ld19zaXplID09IDApIHsKKyAgICAgIGFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgICAgIlplcm8gd2luZG93IHNpemUgaXMgaW52YWxpZC4iKTsKKyAgICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CisgICAgfQogICAgIG5ld193aW5kb3cgPSByZWFsbG9jKHJhci0+bHpzcy53aW5kb3csIG5ld19zaXplKTsKICAgICBpZiAobmV3X3dpbmRvdyA9PSBOVUxMKSB7CiAgICAgICBhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLApAQCAtMjQzNyw4ICsyNDczLDExIEBACiAgICAgICBpZiAoYWRkX3ZhbHVlKGEsIGNvZGUsIGosIGNvZGViaXRzLCBpKSAhPSBBUkNISVZFX09LKQogICAgICAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogICAgICAgY29kZWJpdHMrKzsKLSAgICAgIGlmICgtLXN5bWJvbHNsZWZ0IDw9IDApIHsgYnJlYWs7IGJyZWFrOyB9CisgICAgICBpZiAoLS1zeW1ib2xzbGVmdCA8PSAwKQorICAgICAgICBicmVhazsKICAgICB9CisgICAgaWYgKHN5bWJvbHNsZWZ0IDw9IDApCisgICAgICBicmVhazsKICAgICBjb2RlYml0cyA8PD0gMTsKICAgfQogICByZXR1cm4gKEFSQ0hJVkVfT0spOwpAQCAtMjQ0OCw3ICsyNDg3LDggQEAKIGFkZF92YWx1ZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgaHVmZm1hbl9jb2RlICpjb2RlLCBpbnQgdmFsdWUsCiAgICAgICAgICAgaW50IGNvZGViaXRzLCBpbnQgbGVuZ3RoKQogewotICBpbnQgcmVwZWF0cG9zLCBsYXN0bm9kZSwgYml0cG9zLCBiaXQsIHJlcGVhdG5vZGUsIG5leHRub2RlOworICBpbnQgbGFzdG5vZGUsIGJpdHBvcywgYml0OworICAvKiBpbnQgcmVwZWF0cG9zLCByZXBlYXRub2RlLCBuZXh0bm9kZTsgKi8KIAogICBmcmVlKGNvZGUtPnRhYmxlKTsKICAgY29kZS0+dGFibGUgPSBOVUxMOwpAQCAtMjQ1OCw2ICsyNDk4LDkgQEAKICAgaWYobGVuZ3RoIDwgY29kZS0+bWlubGVuZ3RoKQogICAgIGNvZGUtPm1pbmxlbmd0aCA9IGxlbmd0aDsKIAorICAvKgorICAgKiBEZWFkIGNvZGUsIHJlcGVhdHBvcyB3YXMgaXMgLTEKKyAgICoKICAgcmVwZWF0cG9zID0gLTE7CiAgIGlmIChyZXBlYXRwb3MgPT0gMCB8fCAocmVwZWF0cG9zID49IDAKICAgICAmJiAoKChjb2RlYml0cyA+PiAocmVwZWF0cG9zIC0gMSkpICYgMykgPT0gMApAQCAtMjQ2Nyw2ICsyNTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCByZXBlYXQgcG9zaXRpb24iKTsKICAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogICB9CisgICovCiAKICAgbGFzdG5vZGUgPSAwOwogICBmb3IgKGJpdHBvcyA9IGxlbmd0aCAtIDE7IGJpdHBvcyA+PSAwOyBiaXRwb3MtLSkKQEAgLTI0ODIsOSArMjUyNiwxMiBAQAogICAgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKICAgICB9CiAKKyAgICAvKgorICAgICAqIERlYWQgY29kZSwgcmVwZWF0cG9zIHdhcyAtMSwgYml0cG9zID49MAorICAgICAqCiAgICAgaWYgKGJpdHBvcyA9PSByZXBlYXRwb3MpCiAgICAgewotICAgICAgLyogT3BlbiBicmFuY2ggY2hlY2sgKi8KKyAgICAgICogT3BlbiBicmFuY2ggY2hlY2sgKgogICAgICAgaWYgKCEoY29kZS0+dHJlZVtsYXN0bm9kZV0uYnJhbmNoZXNbYml0XSA8IDApKQogICAgICAgewogICAgICAgICBhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKQEAgLTI1MDMsMTYgKzI1NTAsMTcgQEAKICAgICAgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKICAgICAgIH0KIAotICAgICAgLyogU2V0IGJyYW5jaGVzICovCisgICAgICAqIFNldCBicmFuY2hlcyAqCiAgICAgICBjb2RlLT50cmVlW2xhc3Rub2RlXS5icmFuY2hlc1tiaXRdID0gcmVwZWF0bm9kZTsKICAgICAgIGNvZGUtPnRyZWVbcmVwZWF0bm9kZV0uYnJhbmNoZXNbYml0XSA9IHJlcGVhdG5vZGU7CiAgICAgICBjb2RlLT50cmVlW3JlcGVhdG5vZGVdLmJyYW5jaGVzW2JpdF4xXSA9IG5leHRub2RlOwogICAgICAgbGFzdG5vZGUgPSBuZXh0bm9kZTsKIAotICAgICAgYml0cG9zKys7IC8qIHRlcm1pbmF0aW5nIGJpdCBhbHJlYWR5IGhhbmRsZWQsIHNraXAgaXQgKi8KKyAgICAgIGJpdHBvcysrOyAqIHRlcm1pbmF0aW5nIGJpdCBhbHJlYWR5IGhhbmRsZWQsIHNraXAgaXQgKgogICAgIH0KICAgICBlbHNlCiAgICAgeworICAgICovCiAgICAgICAvKiBPcGVuIGJyYW5jaCBjaGVjayAqLwogICAgICAgaWYgKGNvZGUtPnRyZWVbbGFzdG5vZGVdLmJyYW5jaGVzW2JpdF0gPCAwKQogICAgICAgewpAQCAtMjUyNiw3ICsyNTc0LDcgQEAKIAogICAgICAgLyogc2V0IHRvIGJyYW5jaCAqLwogICAgICAgbGFzdG5vZGUgPSBjb2RlLT50cmVlW2xhc3Rub2RlXS5icmFuY2hlc1tiaXRdOwotICAgIH0KKyAvKiB9ICovCiAgIH0KIAogICBpZiAoIShjb2RlLT50cmVlW2xhc3Rub2RlXS5icmFuY2hlc1swXSA9PSAtMQpAQCAtMjYxMCwxMSArMjY1OCwxNSBAQAogICAgICAgdGFibGVbaV0udmFsdWUgPSBjb2RlLT50cmVlW25vZGVdLmJyYW5jaGVzWzBdOwogICAgIH0KICAgfQorICAvKgorICAgKiBEZWFkIGNvZGUsIG5vZGUgPj0gMAorICAgKgogICBlbHNlIGlmIChub2RlIDwgMCkKICAgewogICAgIGZvcihpID0gMDsgaSA8IGN1cnJ0YWJsZXNpemU7IGkrKykKICAgICAgIHRhYmxlW2ldLmxlbmd0aCA9IC0xOwogICB9CisgICAqLwogICBlbHNlCiAgIHsKICAgICBpZihkZXB0aCA9PSBtYXhkZXB0aCkKQEAgLTI2NDYsNiArMjY5OCwxMCBAQAogICAgICAgMCwgMSwgMSwgMSwgMSwgMiwgMiwKICAgICAgIDIsIDIsIDMsIDMsIDMsIDMsIDQsCiAgICAgICA0LCA0LCA0LCA1LCA1LCA1LCA1IH07CisgIHN0YXRpYyBjb25zdCBpbnQgbGVuZ3RoYl9taW4gPSBtaW5pbXVtKAorICAgIChpbnQpKHNpemVvZihsZW5ndGhiYXNlcykvc2l6ZW9mKGxlbmd0aGJhc2VzWzBdKSksCisgICAgKGludCkoc2l6ZW9mKGxlbmd0aGJpdHMpL3NpemVvZihsZW5ndGhiaXRzWzBdKSkKKyAgKTsKICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXRiYXNlc1tdID0KICAgICB7ICAgICAgIDAsICAgICAgIDEsICAgICAgIDIsICAgICAgIDMsICAgICAgIDQsICAgICAgIDYsCiAgICAgICAgICAgICA4LCAgICAgIDEyLCAgICAgIDE2LCAgICAgIDI0LCAgICAgIDMyLCAgICAgIDQ4LApAQCAtMjY2Myw2ICsyNzE5LDEwIEBACiAgICAgICAxMSwgMTEsIDEyLCAxMiwgMTMsIDEzLCAxNCwgMTQsIDE1LCAxNSwgMTYsIDE2LAogICAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKICAgICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTggfTsKKyAgc3RhdGljIGNvbnN0IGludCBvZmZzZXRiX21pbiA9IG1pbmltdW0oCisgICAgKGludCkoc2l6ZW9mKG9mZnNldGJhc2VzKS9zaXplb2Yob2Zmc2V0YmFzZXNbMF0pKSwKKyAgICAoaW50KShzaXplb2Yob2Zmc2V0Yml0cykvc2l6ZW9mKG9mZnNldGJpdHNbMF0pKQorICApOwogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaG9ydGJhc2VzW10gPQogICAgIHsgMCwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAxOTIgfTsKICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hvcnRiaXRzW10gPQpAQCAtMjc0Miw5ICsyODAyLDcgQEAKIAogICAgICAgaWYgKChsZW5zeW1ib2wgPSByZWFkX25leHRfc3ltYm9sKGEsICZyYXItPmxlbmd0aGNvZGUpKSA8IDApCiAgICAgICAgIGdvdG8gYmFkX2RhdGE7Ci0gICAgICBpZiAobGVuc3ltYm9sID4gKGludCkoc2l6ZW9mKGxlbmd0aGJhc2VzKS9zaXplb2YobGVuZ3RoYmFzZXNbMF0pKSkKLSAgICAgICAgZ290byBiYWRfZGF0YTsKLSAgICAgIGlmIChsZW5zeW1ib2wgPiAoaW50KShzaXplb2YobGVuZ3RoYml0cykvc2l6ZW9mKGxlbmd0aGJpdHNbMF0pKSkKKyAgICAgIGlmIChsZW5zeW1ib2wgPiBsZW5ndGhiX21pbikKICAgICAgICAgZ290byBiYWRfZGF0YTsKICAgICAgIGxlbiA9IGxlbmd0aGJhc2VzW2xlbnN5bWJvbF0gKyAyOwogICAgICAgaWYgKGxlbmd0aGJpdHNbbGVuc3ltYm9sXSA+IDApIHsKQEAgLTI3NzYsOSArMjgzNCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBpZiAoc3ltYm9sLTI3MSA+IChpbnQpKHNpemVvZihsZW5ndGhiYXNlcykvc2l6ZW9mKGxlbmd0aGJhc2VzWzBdKSkpCi0gICAgICAgIGdvdG8gYmFkX2RhdGE7Ci0gICAgICBpZiAoc3ltYm9sLTI3MSA+IChpbnQpKHNpemVvZihsZW5ndGhiaXRzKS9zaXplb2YobGVuZ3RoYml0c1swXSkpKQorICAgICAgaWYgKHN5bWJvbC0yNzEgPiBsZW5ndGhiX21pbikKICAgICAgICAgZ290byBiYWRfZGF0YTsKICAgICAgIGxlbiA9IGxlbmd0aGJhc2VzW3N5bWJvbC0yNzFdKzM7CiAgICAgICBpZihsZW5ndGhiaXRzW3N5bWJvbC0yNzFdID4gMCkgewpAQCAtMjc5MCw5ICsyODQ2LDcgQEAKIAogICAgICAgaWYgKChvZmZzc3ltYm9sID0gcmVhZF9uZXh0X3N5bWJvbChhLCAmcmFyLT5vZmZzZXRjb2RlKSkgPCAwKQogICAgICAgICBnb3RvIGJhZF9kYXRhOwotICAgICAgaWYgKG9mZnNzeW1ib2wgPiAoaW50KShzaXplb2Yob2Zmc2V0YmFzZXMpL3NpemVvZihvZmZzZXRiYXNlc1swXSkpKQotICAgICAgICBnb3RvIGJhZF9kYXRhOwotICAgICAgaWYgKG9mZnNzeW1ib2wgPiAoaW50KShzaXplb2Yob2Zmc2V0Yml0cykvc2l6ZW9mKG9mZnNldGJpdHNbMF0pKSkKKyAgICAgIGlmIChvZmZzc3ltYm9sID4gb2Zmc2V0Yl9taW4pCiAgICAgICAgIGdvdG8gYmFkX2RhdGE7CiAgICAgICBvZmZzID0gb2Zmc2V0YmFzZXNbb2Zmc3N5bWJvbF0rMTsKICAgICAgIGlmKG9mZnNldGJpdHNbb2Zmc3N5bWJvbF0gPiAwKQpAQCAtMjkyOCwxMiArMjk4MiwxNCBAQAogICAgIGVsc2UgaWYgKCphdmFpbCA9PSAwICYmIHJhci0+bWFpbl9mbGFncyAmIE1IRF9WT0xVTUUgJiYKICAgICAgIHJhci0+ZmlsZV9mbGFncyAmIEZIRF9TUExJVF9BRlRFUikKICAgICB7CisgICAgICByYXItPmZpbGVuYW1lX211c3RfbWF0Y2ggPSAxOwogICAgICAgcmV0ID0gYXJjaGl2ZV9yZWFkX2Zvcm1hdF9yYXJfcmVhZF9oZWFkZXIoYSwgYS0+ZW50cnkpOwogICAgICAgaWYgKHJldCA9PSAoQVJDSElWRV9FT0YpKQogICAgICAgewogICAgICAgICByYXItPmhhc19lbmRhcmNfaGVhZGVyID0gMTsKICAgICAgICAgcmV0ID0gYXJjaGl2ZV9yZWFkX2Zvcm1hdF9yYXJfcmVhZF9oZWFkZXIoYSwgYS0+ZW50cnkpOwogICAgICAgfQorICAgICAgcmFyLT5maWxlbmFtZV9tdXN0X21hdGNoID0gMDsKICAgICAgIGlmIChyZXQgIT0gKEFSQ0hJVkVfT0spKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgIHJldHVybiByYXJfcmVhZF9haGVhZChhLCBtaW4sIGF2YWlsKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyNS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhMWMxYgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyNS5jCkBAIC0wLDAgKzEsNDEwMyBAQAorLyotCisqIENvcHlyaWdodCAoYykgMjAxOCBHcnplZ29yeiBBbnRvbmlhayAoaHR0cDovL2FudG9uaWFrLm9yZykKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SKFMpIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImFyY2hpdmVfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJhcmNoaXZlX2VuZGlhbi5oIgorCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX1pMSUJfSAorI2luY2x1ZGUgPGNtM3AvemxpYi5oPiAvKiBjcmMzMiAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmNoaXZlLmgiCisjaWZuZGVmIEhBVkVfWkxJQl9ICisjaW5jbHVkZSAiYXJjaGl2ZV9jcmMzMi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3BwbWQ3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X3ByaXZhdGUuaCIKKworI2lmZGVmIEhBVkVfQkxBS0UyX0gKKyNpbmNsdWRlIDxibGFrZTIuaD4KKyNlbHNlCisjaW5jbHVkZSAiYXJjaGl2ZV9ibGFrZTIuaCIKKyNlbmRpZgorCisvKiNkZWZpbmUgQ0hFQ0tfQ1JDX09OX1NPTElEX1NLSVAqLworLyojZGVmaW5lIERPTlRfRkFJTF9PTl9DUkNfRVJST1IqLworLyojZGVmaW5lIERFQlVHKi8KKworI2RlZmluZSByYXI1X21pbihhLCBiKSAoKChhKSA+IChiKSkgPyAoYikgOiAoYSkpCisjZGVmaW5lIHJhcjVfbWF4KGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgcmFyNV9jb3VudG9mKFgpICgoY29uc3Qgc3NpemVfdCkgKHNpemVvZihYKSAvIHNpemVvZigqWCkpKQorCisjaWYgZGVmaW5lZCBERUJVRworI2RlZmluZSBERUJVR19DT0RFIGlmKDEpCisjZGVmaW5lIExPRyguLi4pIGRvIHsgcHJpbnRmKCJyYXI1OiAiIF9fVkFfQVJHU19fKTsgcHV0cygiIik7IH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIERFQlVHX0NPREUgaWYoMCkKKyNlbmRpZgorCisvKiBSZWFsIFJBUjUgbWFnaWMgbnVtYmVyIGlzOgorICoKKyAqIDB4NTIsIDB4NjEsIDB4NzIsIDB4MjEsIDB4MWEsIDB4MDcsIDB4MDEsIDB4MDAKKyAqICJSYXIh4oaS4oCi4pi6wrdceDAwIgorICoKKyAqIFJldHJpZXZlZCB3aXRoIGByYXI1X3NpZ25hdHVyZSgpYCBieSBYT1InaW5nIGl0IHdpdGggMHhBMSwgYmVjYXVzZSBJIGRvbid0CisgKiB3YW50IHRvIHB1dCB0aGlzIG1hZ2ljIHNlcXVlbmNlIGluIGVhY2ggYmluYXJ5IHRoYXQgdXNlcyBsaWJhcmNoaXZlLCBzbworICogYXBwbGljYXRpb25zIHRoYXQgc2NhbiB0aHJvdWdoIHRoZSBmaWxlIGZvciB0aGlzIG1hcmtlciB3b24ndCB0cmlnZ2VyIG9uCisgKiB0aGlzICJmYWxzZSIgb25lLgorICoKKyAqIFRoZSBhcnJheSBpdHNlbGYgaXMgZGVjcnlwdGVkIGluIGByYXI1X2luaXRgIGZ1bmN0aW9uLiAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciByYXI1X3NpZ25hdHVyZV94b3JbXSA9IHsgMjQzLCAxOTIsIDIxMSwgMTI4LCAxODcsIDE2NiwgMTYwLCAxNjEgfTsKK3N0YXRpYyBjb25zdCBzaXplX3QgZ191bnBhY2tfd2luZG93X3NpemUgPSAweDIwMDAwOworCisvKiBUaGVzZSBjb3VsZCBoYXZlIGJlZW4gc3RhdGljIGNvbnN0J3MsIGJ1dCB0aGV5IGFyZW4ndCwgYmVjYXVzZSBvZgorICogVmlzdWFsIFN0dWRpby4gKi8KKyNkZWZpbmUgTUFYX05BTUVfSU5fQ0hBUlMgMjA0OAorI2RlZmluZSBNQVhfTkFNRV9JTl9CWVRFUyAoNCAqIE1BWF9OQU1FX0lOX0NIQVJTKQorCitzdHJ1Y3QgZmlsZV9oZWFkZXIgeworCXNzaXplX3QgYnl0ZXNfcmVtYWluaW5nOworCXNzaXplX3QgdW5wYWNrZWRfc2l6ZTsKKwlpbnQ2NF90IGxhc3Rfb2Zmc2V0OyAgICAgICAgIC8qIFVzZWQgaW4gc2FuaXR5IGNoZWNrcy4gKi8KKwlpbnQ2NF90IGxhc3Rfc2l6ZTsgICAgICAgICAgIC8qIFVzZWQgaW4gc2FuaXR5IGNoZWNrcy4gKi8KKworCXVpbnQ4X3Qgc29saWQgOiAxOyAgICAgICAgICAgLyogSXMgdGhpcyBhIHNvbGlkIHN0cmVhbT8gKi8KKwl1aW50OF90IHNlcnZpY2UgOiAxOyAgICAgICAgIC8qIElzIHRoaXMgZmlsZSBhIHNlcnZpY2UgZGF0YT8gKi8KKwl1aW50OF90IGVvZiA6IDE7ICAgICAgICAgICAgIC8qIERpZCB3ZSBmaW5pc2ggdW5wYWNraW5nIHRoZSBmaWxlPyAqLworCXVpbnQ4X3QgZGlyIDogMTsgICAgICAgICAgICAgLyogSXMgdGhpcyBmaWxlIGVudHJ5IGEgZGlyZWN0b3J5PyAqLworCisJLyogT3B0aW9uYWwgdGltZSBmaWVsZHMuICovCisJdWludDY0X3QgZV9tdGltZTsKKwl1aW50NjRfdCBlX2N0aW1lOworCXVpbnQ2NF90IGVfYXRpbWU7CisJdWludDMyX3QgZV91bml4X25zOworCisJLyogT3B0aW9uYWwgaGFzaCBmaWVsZHMuICovCisJdWludDMyX3Qgc3RvcmVkX2NyYzMyOworCXVpbnQzMl90IGNhbGN1bGF0ZWRfY3JjMzI7CisJdWludDhfdCBibGFrZTJzcFszMl07CisJYmxha2Uyc3Bfc3RhdGUgYjJzdGF0ZTsKKwljaGFyIGhhc19ibGFrZTI7CisKKwkvKiBPcHRpb25hbCByZWRpciBmaWVsZHMgKi8KKwl1aW50NjRfdCByZWRpcl90eXBlOworCXVpbnQ2NF90IHJlZGlyX2ZsYWdzOworCisJc3NpemVfdCBzb2xpZF93aW5kb3dfc2l6ZTsgLyogVXNlZCBpbiBmaWxlIGZvcm1hdCBjaGVjay4gKi8KK307CisKK2VudW0gRVhUUkEgeworCUVYX0NSWVBUID0gMHgwMSwKKwlFWF9IQVNIID0gMHgwMiwKKwlFWF9IVElNRSA9IDB4MDMsCisJRVhfVkVSU0lPTiA9IDB4MDQsCisJRVhfUkVESVIgPSAweDA1LAorCUVYX1VPV05FUiA9IDB4MDYsCisJRVhfU1VCREFUQSA9IDB4MDcKK307CisKKyNkZWZpbmUgUkVESVJfU1lNTElOS19JU19ESVIJMQorCitlbnVtIFJFRElSX1RZUEUgeworCVJFRElSX1RZUEVfTk9ORSA9IDAsCisJUkVESVJfVFlQRV9VTklYU1lNTElOSyA9IDEsCisJUkVESVJfVFlQRV9XSU5TWU1MSU5LID0gMiwKKwlSRURJUl9UWVBFX0pVTkNUSU9OID0gMywKKwlSRURJUl9UWVBFX0hBUkRMSU5LID0gNCwKKwlSRURJUl9UWVBFX0ZJTEVDT1BZID0gNSwKK307CisKKyNkZWZpbmUJT1dORVJfVVNFUl9OQU1FCQkweDAxCisjZGVmaW5lCU9XTkVSX0dST1VQX05BTUUJMHgwMgorI2RlZmluZQlPV05FUl9VU0VSX1VJRAkJMHgwNAorI2RlZmluZQlPV05FUl9HUk9VUF9HSUQJCTB4MDgKKyNkZWZpbmUJT1dORVJfTUFYTkFNRUxFTgkyNTYKKworZW51bSBGSUxURVJfVFlQRSB7CisJRklMVEVSX0RFTFRBID0gMCwgICAvKiBHZW5lcmljIHBhdHRlcm4uICovCisJRklMVEVSX0U4ICAgID0gMSwgICAvKiBJbnRlbCB4ODYgY29kZS4gKi8KKwlGSUxURVJfRThFOSAgPSAyLCAgIC8qIEludGVsIHg4NiBjb2RlLiAqLworCUZJTFRFUl9BUk0gICA9IDMsICAgLyogQVJNIGNvZGUuICovCisJRklMVEVSX0FVRElPID0gNCwgICAvKiBBdWRpbyBmaWx0ZXIsIG5vdCB1c2VkIGluIFJBUnY1LiAqLworCUZJTFRFUl9SR0IgICA9IDUsICAgLyogQ29sb3IgcGFsZXR0ZSwgbm90IHVzZWQgaW4gUkFSdjUuICovCisJRklMVEVSX0lUQU5JVU0gPSA2LCAvKiBJbnRlbCdzIEl0YW5pdW0sIG5vdCB1c2VkIGluIFJBUnY1LiAqLworCUZJTFRFUl9QUE0gICA9IDcsICAgLyogUHJlZGljdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLCBub3QgdXNlZCBpbgorCQkJICAgICAgIFJBUnY1LiAqLworCUZJTFRFUl9OT05FICA9IDgsCit9OworCitzdHJ1Y3QgZmlsdGVyX2luZm8geworCWludCB0eXBlOworCWludCBjaGFubmVsczsKKwlpbnQgcG9zX3I7CisKKwlpbnQ2NF90IGJsb2NrX3N0YXJ0OworCXNzaXplX3QgYmxvY2tfbGVuZ3RoOworCXVpbnQxNl90IHdpZHRoOworfTsKKworc3RydWN0IGRhdGFfcmVhZHkgeworCWNoYXIgdXNlZDsKKwljb25zdCB1aW50OF90KiBidWY7CisJc2l6ZV90IHNpemU7CisJaW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgY2RlcXVlIHsKKwl1aW50MTZfdCBiZWdfcG9zOworCXVpbnQxNl90IGVuZF9wb3M7CisJdWludDE2X3QgY2FwX21hc2s7CisJdWludDE2X3Qgc2l6ZTsKKwlzaXplX3QqIGFycjsKK307CisKK3N0cnVjdCBkZWNvZGVfdGFibGUgeworCXVpbnQzMl90IHNpemU7CisJaW50MzJfdCBkZWNvZGVfbGVuWzE2XTsKKwl1aW50MzJfdCBkZWNvZGVfcG9zWzE2XTsKKwl1aW50MzJfdCBxdWlja19iaXRzOworCXVpbnQ4X3QgcXVpY2tfbGVuWzEgPDwgMTBdOworCXVpbnQxNl90IHF1aWNrX251bVsxIDw8IDEwXTsKKwl1aW50MTZfdCBkZWNvZGVfbnVtWzMwNl07Cit9OworCitzdHJ1Y3QgY29tcF9zdGF0ZSB7CisJLyogRmxhZyB1c2VkIHRvIHNwZWNpZnkgaWYgdW5wYWNrZXIgbmVlZHMgdG8gcmVpbml0aWFsaXplIHRoZQorCSAgIHVuY29tcHJlc3Npb24gY29udGV4dC4gKi8KKwl1aW50OF90IGluaXRpYWxpemVkIDogMTsKKworCS8qIEZsYWcgdXNlZCB3aGVuIGFwcGx5aW5nIGZpbHRlcnMuICovCisJdWludDhfdCBhbGxfZmlsdGVyc19hcHBsaWVkIDogMTsKKworCS8qIEZsYWcgdXNlZCB0byBza2lwIGZpbGUgY29udGV4dCByZWluaXRpYWxpemF0aW9uLCB1c2VkIHdoZW4gdW5wYWNrZXIKKwkgICBpcyBza2lwcGluZyB0aHJvdWdoIGRpZmZlcmVudCBtdWx0aXZvbHVtZSBhcmNoaXZlcy4gKi8KKwl1aW50OF90IHN3aXRjaF9tdWx0aXZvbHVtZSA6IDE7CisKKwkvKiBGbGFnIHVzZWQgdG8gc3BlY2lmeSBpZiB1bnBhY2tlciBoYXMgcHJvY2Vzc2VkIHRoZSB3aG9sZSBkYXRhIGJsb2NrCisJICAgb3IganVzdCBhIHBhcnQgb2YgaXQuICovCisJdWludDhfdCBibG9ja19wYXJzaW5nX2ZpbmlzaGVkIDogMTsKKworCXNpZ25lZCBpbnQgbm90dXNlZCA6IDQ7CisKKwlpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIFVuY29tcHJlc3Npb24gZmxhZ3MuICovCisJaW50IG1ldGhvZDsgICAgICAgICAgICAgICAgICAvKiBVbmNvbXByZXNzaW9uIGFsZ29yaXRobSBtZXRob2QuICovCisJaW50IHZlcnNpb247ICAgICAgICAgICAgICAgICAvKiBVbmNvbXByZXNzaW9uIGFsZ29yaXRobSB2ZXJzaW9uLiAqLworCXNzaXplX3Qgd2luZG93X3NpemU7ICAgICAgICAgLyogU2l6ZSBvZiB3aW5kb3dfYnVmLiAqLworCXVpbnQ4X3QqIHdpbmRvd19idWY7ICAgICAgICAgLyogQ2lyY3VsYXIgYnVmZmVyIHVzZWQgZHVyaW5nCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uLiAqLworCXVpbnQ4X3QqIGZpbHRlcmVkX2J1ZjsgICAgICAgLyogQnVmZmVyIHVzZWQgd2hlbiBhcHBseWluZyBmaWx0ZXJzLiAqLworCWNvbnN0IHVpbnQ4X3QqIGJsb2NrX2J1ZjsgICAgLyogQnVmZmVyIHVzZWQgd2hlbiBtZXJnaW5nIGJsb2Nrcy4gKi8KKwlzaXplX3Qgd2luZG93X21hc2s7ICAgICAgICAgIC8qIENvbnZlbmllbmNlIGZpZWxkOyB3aW5kb3dfc2l6ZSAtIDEuICovCisJaW50NjRfdCB3cml0ZV9wdHI7ICAgICAgICAgICAvKiBUaGlzIGFtb3VudCBvZiBkYXRhIGhhcyBiZWVuIHVucGFja2VkCisJCQkJCWluIHRoZSB3aW5kb3cgYnVmZmVyLiAqLworCWludDY0X3QgbGFzdF93cml0ZV9wdHI7ICAgICAgLyogVGhpcyBhbW91bnQgb2YgZGF0YSBoYXMgYmVlbiBzdG9yZWQgaW4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgZmlsZS4gKi8KKwlpbnQ2NF90IGxhc3RfdW5zdG9yZV9wdHI7ICAgIC8qIENvdW50ZXIgb2YgYnl0ZXMgZXh0cmFjdGVkIGR1cmluZworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdG9yaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfd3JpdGVfcHRyIGJlY2F1c2Ugb2YgaG93IFNFUlZJQ0UKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgYmxvY2tzIGFyZSBoYW5kbGVkIGR1cmluZyBza2lwcGluZworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc29saWQgbXVsdGlhcmNoaXZlIGFyY2hpdmVzLiAqLworCWludDY0X3Qgc29saWRfb2Zmc2V0OyAgICAgICAgLyogQWRkaXRpb25hbCBvZmZzZXQgaW5zaWRlIHRoZSB3aW5kb3cKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgdXNlZCBpbiB1bnBhY2tpbmcgc29saWQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVzLiAqLworCXNzaXplX3QgY3VyX2Jsb2NrX3NpemU7ICAgICAgLyogU2l6ZSBvZiBjdXJyZW50IGRhdGEgYmxvY2suICovCisJaW50IGxhc3RfbGVuOyAgICAgICAgICAgICAgICAvKiBGbGFnIHVzZWQgaW4gbHpzcyBkZWNvbXByZXNzaW9uLiAqLworCisJLyogRGVjb2RlIHRhYmxlcyB1c2VkIGR1cmluZyBsenNzIHVuY29tcHJlc3Npb24uICovCisKKyNkZWZpbmUgSFVGRl9CQyAyMAorCXN0cnVjdCBkZWNvZGVfdGFibGUgYmQ7ICAgICAgLyogaHVmZm1hbiBiaXQgbGVuZ3RocyAqLworI2RlZmluZSBIVUZGX05DIDMwNgorCXN0cnVjdCBkZWNvZGVfdGFibGUgbGQ7ICAgICAgLyogbGl0ZXJhbHMgKi8KKyNkZWZpbmUgSFVGRl9EQyA2NAorCXN0cnVjdCBkZWNvZGVfdGFibGUgZGQ7ICAgICAgLyogZGlzdGFuY2VzICovCisjZGVmaW5lIEhVRkZfTERDIDE2CisJc3RydWN0IGRlY29kZV90YWJsZSBsZGQ7ICAgICAvKiBsb3dlciBiaXRzIG9mIGRpc3RhbmNlcyAqLworI2RlZmluZSBIVUZGX1JDIDQ0CisJc3RydWN0IGRlY29kZV90YWJsZSByZDsgICAgICAvKiByZXBlYXRpbmcgZGlzdGFuY2VzICovCisjZGVmaW5lIEhVRkZfVEFCTEVfU0laRSAoSFVGRl9OQyArIEhVRkZfREMgKyBIVUZGX1JDICsgSFVGRl9MREMpCisKKwkvKiBDaXJjdWxhciBkZXF1ZSBmb3Igc3RvcmluZyBmaWx0ZXJzLiAqLworCXN0cnVjdCBjZGVxdWUgZmlsdGVyczsKKwlpbnQ2NF90IGxhc3RfYmxvY2tfc3RhcnQ7ICAgIC8qIFVzZWQgZm9yIHNhbml0eSBjaGVja2luZy4gKi8KKwlzc2l6ZV90IGxhc3RfYmxvY2tfbGVuZ3RoOyAgIC8qIFVzZWQgZm9yIHNhbml0eSBjaGVja2luZy4gKi8KKworCS8qIERpc3RhbmNlIGNhY2hlIHVzZWQgZHVyaW5nIGx6c3MgdW5jb21wcmVzc2lvbi4gKi8KKwlpbnQgZGlzdF9jYWNoZVs0XTsKKworCS8qIERhdGEgYnVmZmVyIHN0YWNrLiAqLworCXN0cnVjdCBkYXRhX3JlYWR5IGRyZWFkeVsyXTsKK307CisKKy8qIEJpdCByZWFkZXIgc3RhdGUuICovCitzdHJ1Y3QgYml0X3JlYWRlciB7CisJaW50OF90IGJpdF9hZGRyOyAgICAvKiBDdXJyZW50IGJpdCBwb2ludGVyIGluc2lkZSBjdXJyZW50IGJ5dGUuICovCisJaW50IGluX2FkZHI7ICAgICAgICAvKiBDdXJyZW50IGJ5dGUgcG9pbnRlci4gKi8KK307CisKKy8qIFJBUnY1IGJsb2NrIGhlYWRlciBzdHJ1Y3R1cmUuIFVzZSBiZl8qIGZ1bmN0aW9ucyB0byBnZXQgdmFsdWVzIGZyb20KKyAqIGJsb2NrX2ZsYWdzX3U4IGZpZWxkLiBJLmUuIGJmX2J5dGVfY291bnQsIGV0Yy4gKi8KK3N0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciB7CisJLyogYmxvY2tfZmxhZ3NfdTggY29udGFpbiBmaWVsZHMgZW5jb2RlZCBpbiBsaXR0bGUtZW5kaWFuIGJpdGZpZWxkOgorCSAqCisJICogLSB0YWJsZSBwcmVzZW50IGZsYWcgKHNociA3LCBhbmQgMSksCisJICogLSBsYXN0IGJsb2NrIGZsYWcgICAgKHNociA2LCBhbmQgMSksCisJICogLSBieXRlX2NvdW50ICAgICAgICAgKHNociAzLCBhbmQgNyksCisJICogLSBiaXRfc2l6ZSAgICAgICAgICAgKHNociAwLCBhbmQgNykuCisJICovCisJdWludDhfdCBibG9ja19mbGFnc191ODsKKwl1aW50OF90IGJsb2NrX2Nrc3VtOworfTsKKworLyogUkFSdjUgbWFpbiBoZWFkZXIgc3RydWN0dXJlLiAqLworc3RydWN0IG1haW5faGVhZGVyIHsKKwkvKiBEb2VzIHRoZSBhcmNoaXZlIGNvbnRhaW4gc29saWQgc3RyZWFtcz8gKi8KKwl1aW50OF90IHNvbGlkIDogMTsKKworCS8qIElmIHRoaXMgYSBtdWx0aS1maWxlIGFyY2hpdmU/ICovCisJdWludDhfdCB2b2x1bWUgOiAxOworCXVpbnQ4X3QgZW5kYXJjIDogMTsKKwl1aW50OF90IG5vdHVzZWQgOiA1OworCisJdW5zaWduZWQgaW50IHZvbF9ubzsKK307CisKK3N0cnVjdCBnZW5lcmljX2hlYWRlciB7CisJdWludDhfdCBzcGxpdF9hZnRlciA6IDE7CisJdWludDhfdCBzcGxpdF9iZWZvcmUgOiAxOworCXVpbnQ4X3QgcGFkZGluZyA6IDY7CisJaW50IHNpemU7CisJaW50IGxhc3RfaGVhZGVyX2lkOworfTsKKworc3RydWN0IG11bHRpdm9sdW1lIHsKKwl1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfdm9sX25vOworCXVpbnQ4X3QqIHB1c2hfYnVmOworfTsKKworLyogTWFpbiBjb250ZXh0IHN0cnVjdHVyZS4gKi8KK3N0cnVjdCByYXI1IHsKKwlpbnQgaGVhZGVyX2luaXRpYWxpemVkOworCisJLyogU2V0IHRvIDEgaWYgY3VycmVudCBmaWxlIGlzIHBvc2l0aW9uZWQgQUZURVIgdGhlIG1hZ2ljIHZhbHVlCisJICogb2YgdGhlIGFyY2hpdmUgZmlsZS4gVGhpcyBpcyB1c2VkIGluIGhlYWRlciByZWFkaW5nIGZ1bmN0aW9ucy4gKi8KKwlpbnQgc2tpcHBlZF9tYWdpYzsKKworCS8qIFNldCB0byBub3QgemVybyBpZiB3ZSdyZSBpbiBza2lwIG1vZGUgKGVpdGhlciBieSBjYWxsaW5nCisJICogcmFyNV9kYXRhX3NraXAgZnVuY3Rpb24gb3Igd2hlbiBza2lwcGluZyBvdmVyIHNvbGlkIHN0cmVhbXMpLgorCSAqIFNldCB0byAwIHdoZW4gaW4gKiBleHRyYWN0aW9uIG1vZGUuIFRoaXMgaXMgdXNlZCBkdXJpbmcgY2hlY2tzdW0KKwkgKiBjYWxjdWxhdGlvbiBmdW5jdGlvbnMuICovCisJaW50IHNraXBfbW9kZTsKKworCS8qIFNldCB0byBub3QgemVybyBpZiB3ZSdyZSBpbiBibG9jayBtZXJnaW5nIG1vZGUgKGkuZS4gd2hlbiBzd2l0Y2hpbmcKKwkgKiB0byBhbm90aGVyIGZpbGUgaW4gbXVsdGl2b2x1bWUgYXJjaGl2ZSwgbGFzdCBibG9jayBmcm9tIDFzdCBhcmNoaXZlCisJICogbmVlZHMgdG8gYmUgbWVyZ2VkIHdpdGggMXN0IGJsb2NrIGZyb20gMm5kIGFyY2hpdmUpLiBUaGlzIGZsYWcKKwkgKiBndWFyZHMgYWdhaW5zdCByZWN1cnNpdmUgdXNlIG9mIHRoZSBtZXJnaW5nIGZ1bmN0aW9uLCB3aGljaCBkb2Vzbid0CisJICogc3VwcG9ydCByZWN1cnNpdmUgY2FsbHMuICovCisJaW50IG1lcmdlX21vZGU7CisKKwkvKiBBbiBvZmZzZXQgdG8gUXVpY2tPcGVuIGxpc3QuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHVucGFja2VyLAorCSAqIGJlY2F1c2Ugd2UncmUgZm9jdXNpbmcgb24gc3RyZWFtaW5nIGludGVyZmFjZS4gUXVpY2tPcGVuIGlzIGRlc2lnbmVkCisJICogdG8gbWFrZSB0aGluZ3MgcXVpY2tlciBmb3Igbm9uLXN0cmVhbSBpbnRlcmZhY2VzLCBzbyBpdCdzIG5vdCBvdXIKKwkgKiB1c2UgY2FzZS4gKi8KKwl1aW50NjRfdCBxbGlzdF9vZmZzZXQ7CisKKwkvKiBBbiBvZmZzZXQgdG8gYWRkaXRpb25hbCBSZWNvdmVyeSBkYXRhLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcworCSAqIHVucGFja2VyLiBSZWNvdmVyeSBkYXRhIGFyZSBhZGRpdGlvbmFsIFJlZWQtU29sb21vbiBjb2RlcyB0aGF0IGNvdWxkCisJICogYmUgdXNlZCB0byBjYWxjdWxhdGUgYnl0ZXMgdGhhdCBhcmUgbWlzc2luZyBpbiBhcmNoaXZlIG9yIGFyZQorCSAqIGNvcnJ1cHRlZC4gKi8KKwl1aW50NjRfdCBycl9vZmZzZXQ7CisKKwkvKiBWYXJpb3VzIGNvbnRleHQgdmFyaWFibGVzIGdyb3VwZWQgdG8gZGlmZmVyZW50IHN0cnVjdHVyZXMuICovCisJc3RydWN0IGdlbmVyaWNfaGVhZGVyIGdlbmVyaWM7CisJc3RydWN0IG1haW5faGVhZGVyIG1haW47CisJc3RydWN0IGNvbXBfc3RhdGUgY3N0YXRlOworCXN0cnVjdCBmaWxlX2hlYWRlciBmaWxlOworCXN0cnVjdCBiaXRfcmVhZGVyIGJpdHM7CisJc3RydWN0IG11bHRpdm9sdW1lIHZvbDsKKworCS8qIFRoZSBoZWFkZXIgb2YgY3VycmVudGx5IHByb2Nlc3NlZCBSQVJ2NSBibG9jay4gVXNlZCBpbiBtYWluCisJICogZGVjb21wcmVzc2lvbiBsb2dpYyBsb29wLiAqLworCXN0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciBsYXN0X2Jsb2NrX2hkcjsKK307CisKKy8qIEZvcndhcmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiAqLworCitzdGF0aWMgdm9pZCByYXI1X3NpZ25hdHVyZShjaGFyICpidWYpOworc3RhdGljIGludCB2ZXJpZnlfZ2xvYmFsX2NoZWNrc3VtcyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKTsKK3N0YXRpYyBpbnQgcmFyNV9yZWFkX2RhdGFfc2tpcChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphKTsKK3N0YXRpYyBpbnQgcHVzaF9kYXRhX3JlYWR5KHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisJY29uc3QgdWludDhfdCogYnVmLCBzaXplX3Qgc2l6ZSwgaW50NjRfdCBvZmZzZXQpOworCisvKiBDREVfeHh4ID0gQ2lyY3VsYXIgRG91YmxlIEVuZGVkIChRdWV1ZSkgcmV0dXJuIHZhbHVlcy4gKi8KK2VudW0gQ0RFX1JFVFVSTl9WQUxVRVMgeworCUNERV9PSywgQ0RFX0FMTE9DLCBDREVfUEFSQU0sIENERV9PVVRfT0ZfQk9VTkRTLAorfTsKKworLyogQ2xlYXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIGNpcmN1bGFyIGRlcXVlLiAqLworc3RhdGljIHZvaWQgY2RlcXVlX2NsZWFyKHN0cnVjdCBjZGVxdWUqIGQpIHsKKwlkLT5zaXplID0gMDsKKwlkLT5iZWdfcG9zID0gMDsKKwlkLT5lbmRfcG9zID0gMDsKK30KKworLyogQ3JlYXRlcyBhIG5ldyBjaXJjdWxhciBkZXF1ZSBvYmplY3QuIENhcGFjaXR5IG11c3QgYmUgcG93ZXIgb2YgMjogOCwgMTYsIDMyLAorICogNjQsIDI1NiwgZXRjLiBXaGVuIHRoZSB1c2VyIHdpbGwgYWRkIGFub3RoZXIgaXRlbSBhYm92ZSBjdXJyZW50IGNhcGFjaXR5LAorICogdGhlIGNpcmN1bGFyIGRlcXVlIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGRlc3QgZW50cnkuICovCitzdGF0aWMgaW50IGNkZXF1ZV9pbml0KHN0cnVjdCBjZGVxdWUqIGQsIGludCBtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMikgeworCWlmKGQgPT0gTlVMTCB8fCBtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMiA9PSAwKQorCQlyZXR1cm4gQ0RFX1BBUkFNOworCisJZC0+Y2FwX21hc2sgPSBtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMiAtIDE7CisJZC0+YXJyID0gTlVMTDsKKworCWlmKChtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMiAmIGQtPmNhcF9tYXNrKSAhPSAwKQorCQlyZXR1cm4gQ0RFX1BBUkFNOworCisJY2RlcXVlX2NsZWFyKGQpOworCWQtPmFyciA9IG1hbGxvYyhzaXplb2Yodm9pZCopICogbWF4X2NhcGFjaXR5X3Bvd2VyX29mXzIpOworCisJcmV0dXJuIGQtPmFyciA/IENERV9PSyA6IENERV9BTExPQzsKK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgKG5vdCBjYXBhY2l0eSkgb2YgY2lyY3VsYXIgZGVxdWUgYGRgLiAqLworc3RhdGljIHNpemVfdCBjZGVxdWVfc2l6ZShzdHJ1Y3QgY2RlcXVlKiBkKSB7CisJcmV0dXJuIGQtPnNpemU7Cit9CisKKy8qIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBjaXJjdWxhciBkZXF1ZS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIGRvZXNuJ3QgcGVyZm9ybSBhbnkgYm91bmRzIGNoZWNraW5nLiBJZiB5b3UgbmVlZCBib3VuZHMgY2hlY2tpbmcsIHVzZQorICogYGNkZXF1ZV9mcm9udCgpYCBmdW5jdGlvbiBpbnN0ZWFkLiAqLworc3RhdGljIHZvaWQgY2RlcXVlX2Zyb250X2Zhc3Qoc3RydWN0IGNkZXF1ZSogZCwgdm9pZCoqIHZhbHVlKSB7CisJKnZhbHVlID0gKHZvaWQqKSBkLT5hcnJbZC0+YmVnX3Bvc107Cit9CisKKy8qIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBjaXJjdWxhciBkZXF1ZS4gVGhpcyBmdW5jdGlvbgorICogcGVyZm9ybXMgYm91bmRzIGNoZWNraW5nLiAqLworc3RhdGljIGludCBjZGVxdWVfZnJvbnQoc3RydWN0IGNkZXF1ZSogZCwgdm9pZCoqIHZhbHVlKSB7CisJaWYoZC0+c2l6ZSA+IDApIHsKKwkJY2RlcXVlX2Zyb250X2Zhc3QoZCwgdmFsdWUpOworCQlyZXR1cm4gQ0RFX09LOworCX0gZWxzZQorCQlyZXR1cm4gQ0RFX09VVF9PRl9CT1VORFM7Cit9CisKKy8qIFB1c2hlcyBhIG5ldyBlbGVtZW50IGludG8gdGhlIGVuZCBvZiB0aGlzIGNpcmN1bGFyIGRlcXVlIG9iamVjdC4gSWYgY3VycmVudAorICogc2l6ZSB3aWxsIGV4Y2VlZCBjYXBhY2l0eSwgdGhlIG9sZGVzdCBlbGVtZW50IHdpbGwgYmUgb3ZlcndyaXR0ZW4uICovCitzdGF0aWMgaW50IGNkZXF1ZV9wdXNoX2JhY2soc3RydWN0IGNkZXF1ZSogZCwgdm9pZCogaXRlbSkgeworCWlmKGQgPT0gTlVMTCkKKwkJcmV0dXJuIENERV9QQVJBTTsKKworCWlmKGQtPnNpemUgPT0gZC0+Y2FwX21hc2sgKyAxKQorCQlyZXR1cm4gQ0RFX09VVF9PRl9CT1VORFM7CisKKwlkLT5hcnJbZC0+ZW5kX3Bvc10gPSAoc2l6ZV90KSBpdGVtOworCWQtPmVuZF9wb3MgPSAoZC0+ZW5kX3BvcyArIDEpICYgZC0+Y2FwX21hc2s7CisJZC0+c2l6ZSsrOworCisJcmV0dXJuIENERV9PSzsKK30KKworLyogUG9wcyBhIGZyb250IGVsZW1lbnQgb2YgdGhpcyBjaXJjdWxhciBkZXF1ZSBvYmplY3QgYW5kIHJldHVybnMgaXRzIHZhbHVlLgorICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHBlcmZvcm0gYW55IGJvdW5kcyBjaGVja2luZy4gKi8KK3N0YXRpYyB2b2lkIGNkZXF1ZV9wb3BfZnJvbnRfZmFzdChzdHJ1Y3QgY2RlcXVlKiBkLCB2b2lkKiogdmFsdWUpIHsKKwkqdmFsdWUgPSAodm9pZCopIGQtPmFycltkLT5iZWdfcG9zXTsKKwlkLT5iZWdfcG9zID0gKGQtPmJlZ19wb3MgKyAxKSAmIGQtPmNhcF9tYXNrOworCWQtPnNpemUtLTsKK30KKworLyogUG9wcyBhIGZyb250IGVsZW1lbnQgb2YgdGhpcyBjaXJjdWxhciBkZXF1ZSBvYmplY3QgYW5kIHJldHVybnMgaXRzIHZhbHVlLgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcuICovCitzdGF0aWMgaW50IGNkZXF1ZV9wb3BfZnJvbnQoc3RydWN0IGNkZXF1ZSogZCwgdm9pZCoqIHZhbHVlKSB7CisJaWYoIWQgfHwgIXZhbHVlKQorCQlyZXR1cm4gQ0RFX1BBUkFNOworCisJaWYoZC0+c2l6ZSA9PSAwKQorCQlyZXR1cm4gQ0RFX09VVF9PRl9CT1VORFM7CisKKwljZGVxdWVfcG9wX2Zyb250X2Zhc3QoZCwgdmFsdWUpOworCXJldHVybiBDREVfT0s7Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNhc3QgZmlsdGVyX2luZm8qKiB0byB2b2lkICoqLiAqLworc3RhdGljIHZvaWQqKiBjZGVxdWVfZmlsdGVyX3Aoc3RydWN0IGZpbHRlcl9pbmZvKiogZikgeworCXJldHVybiAodm9pZCoqKSAoc2l6ZV90KSBmOworfQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjYXN0IGZpbHRlcl9pbmZvKiB0byB2b2lkICouICovCitzdGF0aWMgdm9pZCogY2RlcXVlX2ZpbHRlcihzdHJ1Y3QgZmlsdGVyX2luZm8qIGYpIHsKKwlyZXR1cm4gKHZvaWQqKikgKHNpemVfdCkgZjsKK30KKworLyogRGVzdHJveXMgdGhpcyBjaXJjdWxhciBkZXF1ZSBvYmplY3QuIERlYWxsb2NhdGVzIHRoZSBtZW1vcnkgb2YgdGhlCisgKiBjb2xsZWN0aW9uIGJ1ZmZlciwgYnV0IGRvZXNuJ3QgZGVhbGxvY2F0ZSB0aGUgbWVtb3J5IG9mIGFueSBwb2ludGVyIHBhc3NlZAorICogdG8gdGhpcyBkZXF1ZSBhcyBhIHZhbHVlLiAqLworc3RhdGljIHZvaWQgY2RlcXVlX2ZyZWUoc3RydWN0IGNkZXF1ZSogZCkgeworCWlmKCFkKQorCQlyZXR1cm47CisKKwlpZighZC0+YXJyKQorCQlyZXR1cm47CisKKwlmcmVlKGQtPmFycik7CisKKwlkLT5hcnIgPSBOVUxMOworCWQtPmJlZ19wb3MgPSAtMTsKKwlkLT5lbmRfcG9zID0gLTE7CisJZC0+Y2FwX21hc2sgPSAwOworfQorCitzdGF0aWMgaW5saW5lCit1aW50OF90IGJmX2JpdF9zaXplKGNvbnN0IHN0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciogaGRyKSB7CisJcmV0dXJuIGhkci0+YmxvY2tfZmxhZ3NfdTggJiA3OworfQorCitzdGF0aWMgaW5saW5lCit1aW50OF90IGJmX2J5dGVfY291bnQoY29uc3Qgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIpIHsKKwlyZXR1cm4gKGhkci0+YmxvY2tfZmxhZ3NfdTggPj4gMykgJiA3OworfQorCitzdGF0aWMgaW5saW5lCit1aW50OF90IGJmX2lzX3RhYmxlX3ByZXNlbnQoY29uc3Qgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIpIHsKKwlyZXR1cm4gKGhkci0+YmxvY2tfZmxhZ3NfdTggPj4gNykgJiAxOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByYXI1KiBnZXRfY29udGV4dChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJcmV0dXJuIChzdHJ1Y3QgcmFyNSopIGEtPmZvcm1hdC0+ZGF0YTsKK30KKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIHVzZWQgYnkgZmlsdGVyIGltcGxlbWVudGF0aW9ucy4gKi8KK3N0YXRpYyB2b2lkIGNpcmN1bGFyX21lbWNweSh1aW50OF90KiBkc3QsIHVpbnQ4X3QqIHdpbmRvdywgY29uc3QgdWludDY0X3QgbWFzaywKKyAgICBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCkKK3sKKwlpZigoc3RhcnQgJiBtYXNrKSA+IChlbmQgJiBtYXNrKSkgeworCQlzc2l6ZV90IGxlbjEgPSBtYXNrICsgMSAtIChzdGFydCAmIG1hc2spOworCQlzc2l6ZV90IGxlbjIgPSBlbmQgJiBtYXNrOworCisJCW1lbWNweShkc3QsICZ3aW5kb3dbc3RhcnQgJiBtYXNrXSwgbGVuMSk7CisJCW1lbWNweShkc3QgKyBsZW4xLCB3aW5kb3csIGxlbjIpOworCX0gZWxzZSB7CisJCW1lbWNweShkc3QsICZ3aW5kb3dbc3RhcnQgJiBtYXNrXSwgKHNpemVfdCkgKGVuZCAtIHN0YXJ0KSk7CisJfQorfQorCitzdGF0aWMgdWludDMyX3QgcmVhZF9maWx0ZXJfZGF0YShzdHJ1Y3QgcmFyNSogcmFyLCB1aW50MzJfdCBvZmZzZXQpIHsKKwl1aW50OF90IGxpbmVhcl9idWZbNF07CisJY2lyY3VsYXJfbWVtY3B5KGxpbmVhcl9idWYsIHJhci0+Y3N0YXRlLndpbmRvd19idWYsCisJICAgIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrLCBvZmZzZXQsIG9mZnNldCArIDQpOworCXJldHVybiBhcmNoaXZlX2xlMzJkZWMobGluZWFyX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ZpbHRlcl9kYXRhKHN0cnVjdCByYXI1KiByYXIsIHVpbnQzMl90IG9mZnNldCwKKyAgICB1aW50MzJfdCB2YWx1ZSkKK3sKKwlhcmNoaXZlX2xlMzJlbmMoJnJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZltvZmZzZXRdLCB2YWx1ZSk7Cit9CisKKy8qIEFsbG9jYXRlcyBhIG5ldyBmaWx0ZXIgZGVzY3JpcHRvciBhbmQgYWRkcyBpdCB0byB0aGUgZmlsdGVyIGFycmF5LiAqLworc3RhdGljIHN0cnVjdCBmaWx0ZXJfaW5mbyogYWRkX25ld19maWx0ZXIoc3RydWN0IHJhcjUqIHJhcikgeworCXN0cnVjdCBmaWx0ZXJfaW5mbyogZiA9CisJCShzdHJ1Y3QgZmlsdGVyX2luZm8qKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBmaWx0ZXJfaW5mbykpOworCisJaWYoIWYpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2RlcXVlX3B1c2hfYmFjaygmcmFyLT5jc3RhdGUuZmlsdGVycywgY2RlcXVlX2ZpbHRlcihmKSk7CisJcmV0dXJuIGY7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2RlbHRhX2ZpbHRlcihzdHJ1Y3QgcmFyNSogcmFyLCBzdHJ1Y3QgZmlsdGVyX2luZm8qIGZsdCkgeworCWludCBpOworCXNzaXplX3QgZGVzdF9wb3MsIHNyY19wb3MgPSAwOworCisJZm9yKGkgPSAwOyBpIDwgZmx0LT5jaGFubmVsczsgaSsrKSB7CisJCXVpbnQ4X3QgcHJldl9ieXRlID0gMDsKKwkJZm9yKGRlc3RfcG9zID0gaTsKKwkJCQlkZXN0X3BvcyA8IGZsdC0+YmxvY2tfbGVuZ3RoOworCQkJCWRlc3RfcG9zICs9IGZsdC0+Y2hhbm5lbHMpCisJCXsKKwkJCXVpbnQ4X3QgYnl0ZTsKKworCQkJYnl0ZSA9IHJhci0+Y3N0YXRlLndpbmRvd19idWZbCisJCQkgICAgKHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQgKworCQkJICAgIHNyY19wb3MpICYgcmFyLT5jc3RhdGUud2luZG93X21hc2tdOworCisJCQlwcmV2X2J5dGUgLT0gYnl0ZTsKKwkJCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZltkZXN0X3Bvc10gPSBwcmV2X2J5dGU7CisJCQlzcmNfcG9zKys7CisJCX0KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBydW5fZThlOV9maWx0ZXIoc3RydWN0IHJhcjUqIHJhciwgc3RydWN0IGZpbHRlcl9pbmZvKiBmbHQsCisJCWludCBleHRlbmRlZCkKK3sKKwljb25zdCB1aW50MzJfdCBmaWxlX3NpemUgPSAweDEwMDAwMDA7CisJc3NpemVfdCBpOworCisJY2lyY3VsYXJfbWVtY3B5KHJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiwKKwkgICAgcmFyLT5jc3RhdGUud2luZG93X2J1ZiwgcmFyLT5jc3RhdGUud2luZG93X21hc2ssCisJICAgIHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQsCisJICAgIHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQgKyBmbHQtPmJsb2NrX2xlbmd0aCk7CisKKwlmb3IoaSA9IDA7IGkgPCBmbHQtPmJsb2NrX2xlbmd0aCAtIDQ7KSB7CisJCXVpbnQ4X3QgYiA9IHJhci0+Y3N0YXRlLndpbmRvd19idWZbCisJCSAgICAocmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCArCisJCSAgICBpKyspICYgcmFyLT5jc3RhdGUud2luZG93X21hc2tdOworCisJCS8qCisJCSAqIDB4RTggPSB4ODYncyBjYWxsIDxyZWxhdGl2ZV9hZGRyX3VpbnQzMj4gKGZ1bmN0aW9uIGNhbGwpCisJCSAqIDB4RTkgPSB4ODYncyBqbXAgPHJlbGF0aXZlX2FkZHJfdWludDMyPiAodW5jb25kaXRpb25hbCBqdW1wKQorCQkgKi8KKwkJaWYoYiA9PSAweEU4IHx8IChleHRlbmRlZCAmJiBiID09IDB4RTkpKSB7CisKKwkJCXVpbnQzMl90IGFkZHI7CisJCQl1aW50MzJfdCBvZmZzZXQgPSAoaSArIGZsdC0+YmxvY2tfc3RhcnQpICUgZmlsZV9zaXplOworCisJCQlhZGRyID0gcmVhZF9maWx0ZXJfZGF0YShyYXIsCisJCQkgICAgKHVpbnQzMl90KShyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCQkJICAgIGZsdC0+YmxvY2tfc3RhcnQgKyBpKSAmIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrKTsKKworCQkJaWYoYWRkciAmIDB4ODAwMDAwMDApIHsKKwkJCQlpZigoKGFkZHIgKyBvZmZzZXQpICYgMHg4MDAwMDAwMCkgPT0gMCkgeworCQkJCQl3cml0ZV9maWx0ZXJfZGF0YShyYXIsICh1aW50MzJfdClpLAorCQkJCQkgICAgYWRkciArIGZpbGVfc2l6ZSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZigoYWRkciAtIGZpbGVfc2l6ZSkgJiAweDgwMDAwMDAwKSB7CisJCQkJCXVpbnQzMl90IG5hZGRyID0gYWRkciAtIG9mZnNldDsKKwkJCQkJd3JpdGVfZmlsdGVyX2RhdGEocmFyLCAodWludDMyX3QpaSwKKwkJCQkJICAgIG5hZGRyKTsKKwkJCQl9CisJCQl9CisKKwkJCWkgKz0gNDsKKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJ1bl9hcm1fZmlsdGVyKHN0cnVjdCByYXI1KiByYXIsIHN0cnVjdCBmaWx0ZXJfaW5mbyogZmx0KSB7CisJc3NpemVfdCBpID0gMDsKKwl1aW50MzJfdCBvZmZzZXQ7CisKKwljaXJjdWxhcl9tZW1jcHkocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmLAorCSAgICByYXItPmNzdGF0ZS53aW5kb3dfYnVmLCByYXItPmNzdGF0ZS53aW5kb3dfbWFzaywKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCwKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCArIGZsdC0+YmxvY2tfbGVuZ3RoKTsKKworCWZvcihpID0gMDsgaSA8IGZsdC0+YmxvY2tfbGVuZ3RoIC0gMzsgaSArPSA0KSB7CisJCXVpbnQ4X3QqIGIgPSAmcmFyLT5jc3RhdGUud2luZG93X2J1ZlsKKwkJICAgIChyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCQkgICAgZmx0LT5ibG9ja19zdGFydCArIGkgKyAzKSAmIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrXTsKKworCQlpZigqYiA9PSAweEVCKSB7CisJCQkvKiAweEVCID0gQVJNJ3MgQkwgKGJyYW5jaCArIGxpbmspIGluc3RydWN0aW9uLiAqLworCQkJb2Zmc2V0ID0gcmVhZF9maWx0ZXJfZGF0YShyYXIsCisJCQkgICAgKHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArIGZsdC0+YmxvY2tfc3RhcnQgKyBpKSAmCisJCQkgICAgIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrKSAmIDB4MDBmZmZmZmY7CisKKwkJCW9mZnNldCAtPSAodWludDMyX3QpICgoaSArIGZsdC0+YmxvY2tfc3RhcnQpIC8gNCk7CisJCQlvZmZzZXQgPSAob2Zmc2V0ICYgMHgwMGZmZmZmZikgfCAweGViMDAwMDAwOworCQkJd3JpdGVfZmlsdGVyX2RhdGEocmFyLCAodWludDMyX3QpaSwgb2Zmc2V0KTsKKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJ1bl9maWx0ZXIoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IGZpbHRlcl9pbmZvKiBmbHQpIHsKKwlpbnQgcmV0OworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCWZyZWUocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmKTsKKworCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiA9IG1hbGxvYyhmbHQtPmJsb2NrX2xlbmd0aCk7CisJaWYoIXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZikgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsdGVyIGRhdGEuIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXN3aXRjaChmbHQtPnR5cGUpIHsKKwkJY2FzZSBGSUxURVJfREVMVEE6CisJCQlyZXQgPSBydW5fZGVsdGFfZmlsdGVyKHJhciwgZmx0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRklMVEVSX0U4OgorCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBGSUxURVJfRThFOToKKwkJCXJldCA9IHJ1bl9lOGU5X2ZpbHRlcihyYXIsIGZsdCwKKwkJCSAgICBmbHQtPnR5cGUgPT0gRklMVEVSX0U4RTkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGSUxURVJfQVJNOgorCQkJcmV0ID0gcnVuX2FybV9maWx0ZXIocmFyLCBmbHQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIlVuc3VwcG9ydGVkIGZpbHRlciB0eXBlOiAweCV4IiwgZmx0LT50eXBlKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCS8qIEZpbHRlciBoYXMgZmFpbGVkLiAqLworCQlyZXR1cm4gcmV0OworCX0KKworCWlmKEFSQ0hJVkVfT0sgIT0gcHVzaF9kYXRhX3JlYWR5KGEsIHJhciwgcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmLAorCSAgICBmbHQtPmJsb2NrX2xlbmd0aCwgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIpKQorCXsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJTdGFjayBvdmVyZmxvdyB3aGVuIHN1Ym1pdHRpbmcgdW5wYWNrZWQgZGF0YSIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyICs9IGZsdC0+YmxvY2tfbGVuZ3RoOworCXJldHVybiBBUkNISVZFX09LOworfQorCisvKiBUaGUgYHB1c2hfZGF0YWAgZnVuY3Rpb24gc3VibWl0cyB0aGUgc2VsZWN0ZWQgZGF0YSByYW5nZSB0byB0aGUgdXNlci4KKyAqIE5leHQgY2FsbCBvZiBgdXNlX2RhdGFgIHdpbGwgdXNlIHRoZSBwb2ludGVyLCBzaXplIGFuZCBvZmZzZXQgYXJndW1lbnRzCisgKiB0aGF0IGFyZSBzcGVjaWZpZWQgaGVyZS4gVGhlc2UgYXJndW1lbnRzIGFyZSBwdXNoZWQgdG8gdGhlIEZJRk8gc3RhY2sgaGVyZSwKKyAqIGFuZCBwb3BwZWQgZnJvbSB0aGUgc3RhY2sgYnkgdGhlIGB1c2VfZGF0YWAgZnVuY3Rpb24uICovCitzdGF0aWMgdm9pZCBwdXNoX2RhdGEoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBjb25zdCB1aW50OF90KiBidWYsIGludDY0X3QgaWR4X2JlZ2luLCBpbnQ2NF90IGlkeF9lbmQpCit7CisJY29uc3QgdWludDY0X3Qgd21hc2sgPSByYXItPmNzdGF0ZS53aW5kb3dfbWFzazsKKwljb25zdCBzc2l6ZV90IHNvbGlkX3dyaXRlX3B0ciA9IChyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCSAgICByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0cikgJiB3bWFzazsKKworCWlkeF9iZWdpbiArPSByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQ7CisJaWR4X2VuZCArPSByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQ7CisKKwkvKiBDaGVjayBpZiBvdXIgdW5wYWNrZWQgZGF0YSBpcyB3cmFwcGVkIGluc2lkZSB0aGUgd2luZG93IGNpcmN1bGFyCisJICogYnVmZmVyLiAgSWYgaXQncyBub3Qgd3JhcHBlZCwgaXQgY2FuIGJlIGNvcGllZCBvdXQgYnkgdXNpbmcKKwkgKiBhIHNpbmdsZSBtZW1jcHksIGJ1dCB3aGVuIGl0J3Mgd3JhcHBlZCwgd2UgbmVlZCB0byBjb3B5IHRoZSBmaXJzdAorCSAqIHBhcnQgd2l0aCBvbmUgbWVtY3B5LCBhbmQgdGhlIHNlY29uZCBwYXJ0IHdpdGggYW5vdGhlciBtZW1jcHkuICovCisKKwlpZigoaWR4X2JlZ2luICYgd21hc2spID4gKGlkeF9lbmQgJiB3bWFzaykpIHsKKwkJLyogVGhlIGRhdGEgaXMgd3JhcHBlZCAoYmVnaW4gb2Zmc2V0IHNpcyBiaWdnZXIgdGhhbiBlbmQKKwkJICogb2Zmc2V0KS4gKi8KKwkJY29uc3Qgc3NpemVfdCBmcmFnMV9zaXplID0gcmFyLT5jc3RhdGUud2luZG93X3NpemUgLQorCQkgICAgKGlkeF9iZWdpbiAmIHdtYXNrKTsKKwkJY29uc3Qgc3NpemVfdCBmcmFnMl9zaXplID0gaWR4X2VuZCAmIHdtYXNrOworCisJCS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGJ1ZmZlciBmaXJzdC4gKi8KKwkJcHVzaF9kYXRhX3JlYWR5KGEsIHJhciwgYnVmICsgc29saWRfd3JpdGVfcHRyLCBmcmFnMV9zaXplLAorCQkgICAgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIpOworCisJCS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBidWZmZXIuICovCisJCXB1c2hfZGF0YV9yZWFkeShhLCByYXIsIGJ1ZiwgZnJhZzJfc2l6ZSwKKwkJICAgIHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyICsgZnJhZzFfc2l6ZSk7CisKKwkJcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgKz0gZnJhZzFfc2l6ZSArIGZyYWcyX3NpemU7CisJfSBlbHNlIHsKKwkJLyogRGF0YSBpcyBub3Qgd3JhcHBlZCwgc28gd2UgY2FuIGp1c3QgdXNlIG9uZSBjYWxsIHRvIGNvcHkgdGhlCisJCSAqIGRhdGEuICovCisJCXB1c2hfZGF0YV9yZWFkeShhLCByYXIsCisJCSAgICBidWYgKyBzb2xpZF93cml0ZV9wdHIsIChpZHhfZW5kIC0gaWR4X2JlZ2luKSAmIHdtYXNrLAorCQkgICAgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIpOworCisJCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyICs9IGlkeF9lbmQgLSBpZHhfYmVnaW47CisJfQorfQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IHN1Ym1pdHMgdGhlIGRhdGEgdG8gdGhlIHVzZXIuIEl0IHVzZXMgdGhlCisgKiB1bnBhY2sgd2luZG93IGJ1ZmZlciBhcyBhIHNvdXJjZSBsb2NhdGlvbi4gKi8KK3N0YXRpYyB2b2lkIHB1c2hfd2luZG93X2RhdGEoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBpbnQ2NF90IGlkeF9iZWdpbiwgaW50NjRfdCBpZHhfZW5kKQoreworCXB1c2hfZGF0YShhLCByYXIsIHJhci0+Y3N0YXRlLndpbmRvd19idWYsIGlkeF9iZWdpbiwgaWR4X2VuZCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZmlsdGVycyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJc3RydWN0IGZpbHRlcl9pbmZvKiBmbHQ7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCWludCByZXQ7CisKKwlyYXItPmNzdGF0ZS5hbGxfZmlsdGVyc19hcHBsaWVkID0gMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZmlsdGVyIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb3VyIGRhdGEuIFRoZSBkYXRhCisJICogbmVlZHMgdG8gYmUgZnVsbHkgdW5wYWNrZWQgYmVmb3JlIHRoZSBmaWx0ZXIgY2FuIGJlIHJ1bi4gKi8KKwlpZihDREVfT0sgPT0gY2RlcXVlX2Zyb250KCZyYXItPmNzdGF0ZS5maWx0ZXJzLAorCSAgICBjZGVxdWVfZmlsdGVyX3AoJmZsdCkpKSB7CisJCS8qIENoZWNrIGlmIG91ciB1bnBhY2tlZCBkYXRhIGZ1bGx5IGNvdmVycyB0aGlzIGZpbHRlcidzCisJCSAqIHJhbmdlLiAqLworCQlpZihyYXItPmNzdGF0ZS53cml0ZV9wdHIgPiBmbHQtPmJsb2NrX3N0YXJ0ICYmCisJCSAgICByYXItPmNzdGF0ZS53cml0ZV9wdHIgPj0gZmx0LT5ibG9ja19zdGFydCArCisJCSAgICBmbHQtPmJsb2NrX2xlbmd0aCkgeworCQkJLyogQ2hlY2sgaWYgd2UgaGF2ZSBzb21lIGRhdGEgcGVuZGluZyB0byBiZSB3cml0dGVuCisJCQkgKiByaWdodCBiZWZvcmUgdGhlIGZpbHRlcidzIHN0YXJ0IG9mZnNldC4gKi8KKwkJCWlmKHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID09IGZsdC0+YmxvY2tfc3RhcnQpIHsKKwkJCQkvKiBSdW4gdGhlIGZpbHRlciBzcGVjaWZpZWQgYnkgZGVzY3JpcHRvcgorCQkJCSAqIGBmbHRgLiAqLworCQkJCXJldCA9IHJ1bl9maWx0ZXIoYSwgZmx0KTsKKwkJCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJCQkvKiBGaWx0ZXIgZmFpbHVyZSwgcmV0dXJuIGVycm9yLiAqLworCQkJCQlyZXR1cm4gcmV0OworCQkJCX0KKworCQkJCS8qIEZpbHRlciBkZXNjcmlwdG9yIHdvbid0IGJlIG5lZWRlZCBhbnltb3JlCisJCQkJICogYWZ0ZXIgaXQncyB1c2VkLCAqIHNvIHJlbW92ZSBpdCBmcm9tIHRoZQorCQkJCSAqIGZpbHRlciBsaXN0IGFuZCBmcmVlIGl0cyBtZW1vcnkuICovCisJCQkJKHZvaWQpIGNkZXF1ZV9wb3BfZnJvbnQoJnJhci0+Y3N0YXRlLmZpbHRlcnMsCisJCQkJICAgIGNkZXF1ZV9maWx0ZXJfcCgmZmx0KSk7CisKKwkJCQlmcmVlKGZsdCk7CisJCQl9IGVsc2UgeworCQkJCS8qIFdlIGNhbid0IHJ1biBmaWx0ZXJzIHlldCwgZHVtcCB0aGUgbWVtb3J5CisJCQkJICogcmlnaHQgYmVmb3JlIHRoZSBmaWx0ZXIuICovCisJCQkJcHVzaF93aW5kb3dfZGF0YShhLCByYXIsCisJCQkJICAgIHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyLAorCQkJCSAgICBmbHQtPmJsb2NrX3N0YXJ0KTsKKwkJCX0KKworCQkJLyogUmV0dXJuICdmaWx0ZXIgYXBwbGllZCBvciBub3QgbmVlZGVkJyBzdGF0ZSB0byB0aGUKKwkJCSAqIGNhbGxlci4gKi8KKwkJCXJldHVybiBBUkNISVZFX1JFVFJZOworCQl9CisJfQorCisJcmFyLT5jc3RhdGUuYWxsX2ZpbHRlcnNfYXBwbGllZCA9IDE7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3RfY2FjaGVfcHVzaChzdHJ1Y3QgcmFyNSogcmFyLCBpbnQgdmFsdWUpIHsKKwlpbnQqIHEgPSByYXItPmNzdGF0ZS5kaXN0X2NhY2hlOworCisJcVszXSA9IHFbMl07CisJcVsyXSA9IHFbMV07CisJcVsxXSA9IHFbMF07CisJcVswXSA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IGRpc3RfY2FjaGVfdG91Y2goc3RydWN0IHJhcjUqIHJhciwgaW50IGlkeCkgeworCWludCogcSA9IHJhci0+Y3N0YXRlLmRpc3RfY2FjaGU7CisJaW50IGksIGRpc3QgPSBxW2lkeF07CisKKwlmb3IoaSA9IGlkeDsgaSA+IDA7IGktLSkKKwkJcVtpXSA9IHFbaSAtIDFdOworCisJcVswXSA9IGRpc3Q7CisJcmV0dXJuIGRpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZmlsdGVycyhzdHJ1Y3QgcmFyNSogcmFyKSB7CisJc3RydWN0IGNkZXF1ZSogZCA9ICZyYXItPmNzdGF0ZS5maWx0ZXJzOworCisJLyogRnJlZSBhbnkgcmVtYWluaW5nIGZpbHRlcnMuIEFsbCBmaWx0ZXJzIHNob3VsZCBiZSBuYXR1cmFsbHkKKwkgKiBjb25zdW1lZCBieSB0aGUgdW5wYWNraW5nIGZ1bmN0aW9uLCBzbyByZW1haW5pbmcgZmlsdGVycyBhZnRlcgorCSAqIHVucGFja2luZyBub3JtYWxseSBtZWFuIHRoYXQgdW5wYWNraW5nIHdhc24ndCBzdWNjZXNzZnVsLgorCSAqIEJ1dCBzdGlsbCBvZiBjb3Vyc2Ugd2Ugc2hvdWxkbid0IGxlYWsgbWVtb3J5IGluIHN1Y2ggY2FzZS4gKi8KKworCS8qIGNkZXF1ZV9zaXplKCkgaXMgYSBmYXN0IG9wZXJhdGlvbiwgc28gd2UgY2FuIHVzZSBpdCBhcyBhIGxvb3AKKwkgKiBleHByZXNzaW9uLiAqLworCXdoaWxlKGNkZXF1ZV9zaXplKGQpID4gMCkgeworCQlzdHJ1Y3QgZmlsdGVyX2luZm8qIGYgPSBOVUxMOworCisJCS8qIFBvcF9mcm9udCB3aWxsIGFsc28gZGVjcmVhc2UgdGhlIGNvbGxlY3Rpb24ncyBzaXplLiAqLworCQlpZiAoQ0RFX09LID09IGNkZXF1ZV9wb3BfZnJvbnQoZCwgY2RlcXVlX2ZpbHRlcl9wKCZmKSkpCisJCQlmcmVlKGYpOworCX0KKworCWNkZXF1ZV9jbGVhcihkKTsKKworCS8qIEFsc28gY2xlYXIgb3V0IHRoZSB2YXJpYWJsZXMgbmVlZGVkIGZvciBzYW5pdHkgY2hlY2tpbmcuICovCisJcmFyLT5jc3RhdGUubGFzdF9ibG9ja19zdGFydCA9IDA7CisJcmFyLT5jc3RhdGUubGFzdF9ibG9ja19sZW5ndGggPSAwOworfQorCitzdGF0aWMgdm9pZCByZXNldF9maWxlX2NvbnRleHQoc3RydWN0IHJhcjUqIHJhcikgeworCW1lbXNldCgmcmFyLT5maWxlLCAwLCBzaXplb2YocmFyLT5maWxlKSk7CisJYmxha2Uyc3BfaW5pdCgmcmFyLT5maWxlLmIyc3RhdGUsIDMyKTsKKworCWlmKHJhci0+bWFpbi5zb2xpZCkgeworCQlyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKz0gcmFyLT5jc3RhdGUud3JpdGVfcHRyOworCX0gZWxzZSB7CisJCXJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCA9IDA7CisJfQorCisJcmFyLT5jc3RhdGUud3JpdGVfcHRyID0gMDsKKwlyYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciA9IDA7CisJcmFyLT5jc3RhdGUubGFzdF91bnN0b3JlX3B0ciA9IDA7CisKKwlyYXItPmZpbGUucmVkaXJfdHlwZSA9IFJFRElSX1RZUEVfTk9ORTsKKwlyYXItPmZpbGUucmVkaXJfZmxhZ3MgPSAwOworCisJZnJlZV9maWx0ZXJzKHJhcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9hcmNoaXZlX3JlYWQoc3RydWN0IGFyY2hpdmUqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfcmVhZCoqIGFyKQoreworCSphciA9IChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKikgYTsKKwlhcmNoaXZlX2NoZWNrX21hZ2ljKGEsIEFSQ0hJVkVfUkVBRF9NQUdJQywgQVJDSElWRV9TVEFURV9ORVcsCisJICAgICJhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyNSIpOworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9haGVhZChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzaXplX3QgaG93X21hbnksCisgICAgY29uc3QgdWludDhfdCoqIHB0cikKK3sKKwlzc2l6ZV90IGF2YWlsID0gLTE7CisJaWYoIXB0cikKKwkJcmV0dXJuIDA7CisKKwkqcHRyID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgaG93X21hbnksICZhdmFpbCk7CisJaWYoKnB0ciA9PSBOVUxMKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbnN1bWUoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgaW50NjRfdCBob3dfbWFueSkgeworCWludCByZXQ7CisKKwlyZXQgPSBob3dfbWFueSA9PSBfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIGhvd19tYW55KQorCQk/IEFSQ0hJVkVfT0sKKwkJOiBBUkNISVZFX0ZBVEFMOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBSZWFkIGEgUkFSNSB2YXJpYWJsZSBzaXplZCBudW1lcmljIHZhbHVlLiBUaGlzIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluCisgKiBgcHZhbHVlYC4gVGhlIGBwdmFsdWVfbGVuYCBhcmd1bWVudCBwb2ludHMgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZQorICogdGhlIGJ5dGUgY291bnQgdGhhdCB3YXMgY29uc3VtZWQgaW4gb3JkZXIgdG8gZGVjb2RlIHRoZSBgcHZhbHVlYCB2YWx1ZSwgcGx1cworICogb25lLgorICoKKyAqIHB2YWx1ZV9sZW4gaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBOVUxMLgorICoKKyAqIE5PVEU6IGlmIGBwdmFsdWVfbGVuYCBpcyBOT1QgTlVMTCwgdGhlIGNhbGxlciBuZWVkcyB0byBtYW51YWxseSBjb25zdW1lCisgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgYHB2YWx1ZV9sZW5gIHZhbHVlIGNvbnRhaW5zLiBJZiB0aGUgYHB2YWx1ZV9sZW5gCisgKiBpcyBOVUxMLCB0aGlzIGNvbnN1bWluZyBvcGVyYXRpb24gaXMgZG9uZSBhdXRvbWF0aWNhbGx5LgorICoKKyAqIFJldHVybnMgMSBpZiAqcHZhbHVlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZC4KKyAqIFJldHVybnMgMCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuIEluIHRoaXMgY2FzZSwgKnB2YWx1ZSBjb250YWlucyBhbgorICogICAgICAgICAgIGludmFsaWQgdmFsdWUuCisgKi8KKworc3RhdGljIGludCByZWFkX3ZhcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCB1aW50NjRfdCogcHZhbHVlLAorICAgIHVpbnQ2NF90KiBwdmFsdWVfbGVuKQoreworCXVpbnQ2NF90IHJlc3VsdCA9IDA7CisJc2l6ZV90IHNoaWZ0LCBpOworCWNvbnN0IHVpbnQ4X3QqIHA7CisJdWludDhfdCBiOworCisJLyogV2Ugd2lsbCByZWFkIG1heGltdW0gb2YgOCBieXRlcy4gV2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhlCisJICogc2l0dWF0aW9uIHRvIHJlYWQgdGhlIFJBUjUgdmFyaWFibGUtc2l6ZWQgdmFsdWUgc3RvcmVkIGF0IHRoZSBlbmQgb2YKKwkgKiB0aGUgZmlsZSwgYmVjYXVzZSBzdWNoIHNpdHVhdGlvbiB3aWxsIG5ldmVyIGhhcHBlbi4gKi8KKwlpZighcmVhZF9haGVhZChhLCA4LCAmcCkpCisJCXJldHVybiAwOworCisJZm9yKHNoaWZ0ID0gMCwgaSA9IDA7IGkgPCA4OyBpKyssIHNoaWZ0ICs9IDcpIHsKKwkJYiA9IHBbaV07CisKKwkJLyogU3RyaXAgdGhlIE1TQiBmcm9tIHRoZSBpbnB1dCBieXRlIGFuZCBhZGQgdGhlIHJlc3VsdGluZworCQkgKiBudW1iZXIgdG8gdGhlIGByZXN1bHRgLiAqLworCQlyZXN1bHQgKz0gKGIgJiAodWludDY0X3QpMHg3RikgPDwgc2hpZnQ7CisKKwkJLyogTVNCIHNldCB0byAxIG1lYW5zIHdlIG5lZWQgdG8gY29udGludWUgZGVjb2RpbmcgcHJvY2Vzcy4KKwkJICogTVNCIHNldCB0byAwIG1lYW5zIHdlJ3JlIGRvbmUuCisJCSAqCisJCSAqIFRoaXMgY29uZGl0aW9uYWwgY2hlY2tzIGZvciB0aGUgc2Vjb25kIGNhc2UuICovCisJCWlmKChiICYgMHg4MCkgPT0gMCkgeworCQkJaWYocHZhbHVlKSB7CisJCQkJKnB2YWx1ZSA9IHJlc3VsdDsKKwkJCX0KKworCQkJLyogSWYgdGhlIGNhbGxlciBoYXMgcGFzc2VkIHRoZSBgcHZhbHVlX2xlbmAgcG9pbnRlciwKKwkJCSAqIHN0b3JlIHRoZSBudW1iZXIgb2YgY29uc3VtZWQgYnl0ZXMgaW4gaXQgYW5kIGRvIE5PVAorCQkJICogY29uc3VtZSB0aG9zZSBieXRlcywgc2luY2UgdGhlIGNhbGxlciBoYXMgYWxsIHRoZQorCQkJICogaW5mb3JtYXRpb24gaXQgbmVlZHMgdG8gcGVyZm9ybSAqLworCQkJaWYocHZhbHVlX2xlbikgeworCQkJCSpwdmFsdWVfbGVuID0gMSArIGk7CisJCQl9IGVsc2UgeworCQkJCS8qIElmIHRoZSBjYWxsZXIgZGlkIG5vdCBwcm92aWRlIHRoZQorCQkJCSAqIGBwdmFsdWVfbGVuYCBwb2ludGVyLCBpdCB3aWxsIG5vdCBoYXZlIHRoZQorCQkJCSAqIHBvc3NpYmlsaXR5IHRvIGFkdmFuY2UgdGhlIGZpbGUgcG9pbnRlciwKKwkJCQkgKiBiZWNhdXNlIGl0IHdpbGwgbm90IGtub3cgaG93IG1hbnkgYnl0ZXMgaXQKKwkJCQkgKiBuZWVkcyB0byBjb25zdW1lLiBUaGlzIGlzIHdoeSB3ZSBoYW5kbGUKKwkJCQkgKiBzdWNoIHNpdHVhdGlvbiBoZXJlIGF1dG9tYXRpY2FsbHkuICovCisJCQkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIDEgKyBpKSkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CisKKwkJCS8qIEVuZCBvZiBkZWNvZGluZyBwcm9jZXNzLCByZXR1cm4gc3VjY2Vzcy4gKi8KKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogVGhlIGRlY29kZWQgdmFsdWUgdGFrZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIDggYnl0ZXMuCisJICogSXQncyBhIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCBzbyBlbmQgZGVjb2RpbmcgcHJvY2VzcyBoZXJlCisJICogZXZlbiBpZiB0aGUgZmlyc3QgYml0IG9mIGxhc3QgYnl0ZSBpcyAxLiAqLworCWlmKHB2YWx1ZSkgeworCQkqcHZhbHVlID0gcmVzdWx0OworCX0KKworCWlmKHB2YWx1ZV9sZW4pIHsKKwkJKnB2YWx1ZV9sZW4gPSA5OworCX0gZWxzZSB7CisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCA5KSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByZWFkX3Zhcl9zaXplZChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzaXplX3QqIHB2YWx1ZSwKKyAgICBzaXplX3QqIHB2YWx1ZV9sZW4pCit7CisJdWludDY0X3QgdjsKKwl1aW50NjRfdCB2X3NpemUgPSAwOworCisJY29uc3QgaW50IHJldCA9IHB2YWx1ZV9sZW4gPyByZWFkX3ZhcihhLCAmdiwgJnZfc2l6ZSkKKwkJCQkgICA6IHJlYWRfdmFyKGEsICZ2LCBOVUxMKTsKKworCWlmKHJldCA9PSAxICYmIHB2YWx1ZSkgeworCQkqcHZhbHVlID0gKHNpemVfdCkgdjsKKwl9CisKKwlpZihwdmFsdWVfbGVuKSB7CisJCS8qIFBvc3NpYmxlIGRhdGEgdHJ1bmNhdGlvbiBzaG91bGQgYmUgc2FmZS4gKi8KKwkJKnB2YWx1ZV9sZW4gPSAoc2l6ZV90KSB2X3NpemU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWFkX2JpdHNfMzIoc3RydWN0IHJhcjUqIHJhciwgY29uc3QgdWludDhfdCogcCwgdWludDMyX3QqIHZhbHVlKSB7CisJdWludDMyX3QgYml0cyA9ICgodWludDMyX3QpIHBbcmFyLT5iaXRzLmluX2FkZHJdKSA8PCAyNDsKKwliaXRzIHw9IHBbcmFyLT5iaXRzLmluX2FkZHIgKyAxXSA8PCAxNjsKKwliaXRzIHw9IHBbcmFyLT5iaXRzLmluX2FkZHIgKyAyXSA8PCA4OworCWJpdHMgfD0gcFtyYXItPmJpdHMuaW5fYWRkciArIDNdOworCWJpdHMgPDw9IHJhci0+Yml0cy5iaXRfYWRkcjsKKwliaXRzIHw9IHBbcmFyLT5iaXRzLmluX2FkZHIgKyA0XSA+PiAoOCAtIHJhci0+Yml0cy5iaXRfYWRkcik7CisJKnZhbHVlID0gYml0czsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCByZWFkX2JpdHNfMTYoc3RydWN0IHJhcjUqIHJhciwgY29uc3QgdWludDhfdCogcCwgdWludDE2X3QqIHZhbHVlKSB7CisJaW50IGJpdHMgPSAoaW50KSAoKHVpbnQzMl90KSBwW3Jhci0+Yml0cy5pbl9hZGRyXSkgPDwgMTY7CisJYml0cyB8PSAoaW50KSBwW3Jhci0+Yml0cy5pbl9hZGRyICsgMV0gPDwgODsKKwliaXRzIHw9IChpbnQpIHBbcmFyLT5iaXRzLmluX2FkZHIgKyAyXTsKKwliaXRzID4+PSAoOCAtIHJhci0+Yml0cy5iaXRfYWRkcik7CisJKnZhbHVlID0gYml0cyAmIDB4ZmZmZjsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIHZvaWQgc2tpcF9iaXRzKHN0cnVjdCByYXI1KiByYXIsIGludCBiaXRzKSB7CisJY29uc3QgaW50IG5ld19iaXRzID0gcmFyLT5iaXRzLmJpdF9hZGRyICsgYml0czsKKwlyYXItPmJpdHMuaW5fYWRkciArPSBuZXdfYml0cyA+PiAzOworCXJhci0+Yml0cy5iaXRfYWRkciA9IG5ld19iaXRzICYgNzsKK30KKworLyogbiA9IHVwIHRvIDE2ICovCitzdGF0aWMgaW50IHJlYWRfY29uc3VtZV9iaXRzKHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHVpbnQ4X3QqIHAsIGludCBuLAorICAgIGludCogdmFsdWUpCit7CisJdWludDE2X3QgdjsKKwlpbnQgcmV0LCBudW07CisKKwlpZihuID09IDAgfHwgbiA+IDE2KSB7CisJCS8qIFRoaXMgaXMgYSBwcm9ncmFtbWVyIGVycm9yIGFuZCBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCSAqIGluIHJ1bnRpbWUuICovCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJldCA9IHJlYWRfYml0c18xNihyYXIsIHAsICZ2KTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJcmV0dXJuIHJldDsKKworCW51bSA9IChpbnQpIHY7CisJbnVtID4+PSAxNiAtIG47CisKKwlza2lwX2JpdHMocmFyLCBuKTsKKworCWlmKHZhbHVlKQorCQkqdmFsdWUgPSBudW07CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCByZWFkX3UzMihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCB1aW50MzJfdCogcHZhbHVlKSB7CisJY29uc3QgdWludDhfdCogcDsKKwlpZighcmVhZF9haGVhZChhLCA0LCAmcCkpCisJCXJldHVybiAwOworCisJKnB2YWx1ZSA9IGFyY2hpdmVfbGUzMmRlYyhwKTsKKwlyZXR1cm4gQVJDSElWRV9PSyA9PSBjb25zdW1lKGEsIDQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF91NjQoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgdWludDY0X3QqIHB2YWx1ZSkgeworCWNvbnN0IHVpbnQ4X3QqIHA7CisJaWYoIXJlYWRfYWhlYWQoYSwgOCwgJnApKQorCQlyZXR1cm4gMDsKKworCSpwdmFsdWUgPSBhcmNoaXZlX2xlNjRkZWMocCk7CisJcmV0dXJuIEFSQ0hJVkVfT0sgPT0gY29uc3VtZShhLCA4KSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IGJpZF9zdGFuZGFyZChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJY29uc3QgdWludDhfdCogcDsKKwljaGFyIHNpZ25hdHVyZVtzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKV07CisKKwlyYXI1X3NpZ25hdHVyZShzaWduYXR1cmUpOworCisJaWYoIXJlYWRfYWhlYWQoYSwgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvciksICZwKSkKKwkJcmV0dXJuIC0xOworCisJaWYoIW1lbWNtcChzaWduYXR1cmUsIHAsIHNpemVvZihyYXI1X3NpZ25hdHVyZV94b3IpKSkKKwkJcmV0dXJuIDMwOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJhcjVfYmlkKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIGludCBiZXN0X2JpZCkgeworCWludCBteV9iaWQ7CisKKwlpZihiZXN0X2JpZCA+IDMwKQorCQlyZXR1cm4gLTE7CisKKwlteV9iaWQgPSBiaWRfc3RhbmRhcmQoYSk7CisJaWYobXlfYmlkID4gLTEpIHsKKwkJcmV0dXJuIG15X2JpZDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9vcHRpb25zKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IGNoYXIgKmtleSwKKyAgICBjb25zdCBjaGFyICp2YWwpIHsKKwkodm9pZCkgYTsKKwkodm9pZCkga2V5OworCSh2b2lkKSB2YWw7CisKKwkvKiBObyBvcHRpb25zIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24uIFJldHVybiB0aGUgQVJDSElWRV9XQVJOIGNvZGUKKwkgKiB0byBzaWduYWwgdGhlIG9wdGlvbnMgc3VwZXJ2aXNvciB0aGF0IHRoZSB1bnBhY2tlciBkaWRuJ3QgaGFuZGxlCisJICogc2V0dGluZyB0aGlzIG9wdGlvbi4gKi8KKworCXJldHVybiBBUkNISVZFX1dBUk47Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0ID0gQVJDSElWRV9GT1JNQVRfUkFSX1Y1OworCWEtPmFyY2hpdmUuYXJjaGl2ZV9mb3JtYXRfbmFtZSA9ICJSQVI1IjsKK30KKworc3RhdGljIHZvaWQgaW5pdF93aW5kb3dfbWFzayhzdHJ1Y3QgcmFyNSogcmFyKSB7CisJaWYgKHJhci0+Y3N0YXRlLndpbmRvd19zaXplKQorCQlyYXItPmNzdGF0ZS53aW5kb3dfbWFzayA9IHJhci0+Y3N0YXRlLndpbmRvd19zaXplIC0gMTsKKwllbHNlCisJCXJhci0+Y3N0YXRlLndpbmRvd19tYXNrID0gMDsKK30KKworZW51bSBIRUFERVJfRkxBR1MgeworCUhGTF9FWFRSQV9EQVRBID0gMHgwMDAxLAorCUhGTF9EQVRBID0gMHgwMDAyLAorCUhGTF9TS0lQX0lGX1VOS05PV04gPSAweDAwMDQsCisJSEZMX1NQTElUX0JFRk9SRSA9IDB4MDAwOCwKKwlIRkxfU1BMSVRfQUZURVIgPSAweDAwMTAsCisJSEZMX0NISUxEID0gMHgwMDIwLAorCUhGTF9JTkhFUklURUQgPSAweDAwNDAKK307CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19tYWluX2xvY2F0b3JfZXh0cmFfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwKKyAgICBzdHJ1Y3QgcmFyNSogcmFyKQoreworCXVpbnQ2NF90IGxvY2F0b3JfZmxhZ3M7CisKKwllbnVtIExPQ0FUT1JfRkxBR1MgeworCQlRTElTVCA9IDB4MDEsIFJFQ09WRVJZID0gMHgwMiwKKwl9OworCisJaWYoIXJlYWRfdmFyKGEsICZsb2NhdG9yX2ZsYWdzLCBOVUxMKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYobG9jYXRvcl9mbGFncyAmIFFMSVNUKSB7CisJCWlmKCFyZWFkX3ZhcihhLCAmcmFyLT5xbGlzdF9vZmZzZXQsIE5VTEwpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkvKiBxbGlzdCBpcyBub3QgdXNlZCAqLworCX0KKworCWlmKGxvY2F0b3JfZmxhZ3MgJiBSRUNPVkVSWSkgeworCQlpZighcmVhZF92YXIoYSwgJnJhci0+cnJfb2Zmc2V0LCBOVUxMKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJLyogcnIgaXMgbm90IHVzZWQgKi8KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2V4dHJhX2hhc2goc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJc2l6ZV90IGhhc2hfdHlwZSA9IDA7CisJc2l6ZV90IHZhbHVlX2xlbjsKKworCWVudW0gSEFTSF9UWVBFIHsKKwkJQkxBS0Uyc3AgPSAweDAwCisJfTsKKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmaGFzaF90eXBlLCAmdmFsdWVfbGVuKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9sZW47CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHZhbHVlX2xlbikpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCS8qIFRoZSBmaWxlIHVzZXMgQkxBS0Uyc3AgY2hlY2tzdW0gYWxnb3JpdGhtIGluc3RlYWQgb2YgcGxhaW4gb2xkCisJICogQ1JDMzIuICovCisJaWYoaGFzaF90eXBlID09IEJMQUtFMnNwKSB7CisJCWNvbnN0IHVpbnQ4X3QqIHA7CisJCWNvbnN0IGludCBoYXNoX3NpemUgPSBzaXplb2YocmFyLT5maWxlLmJsYWtlMnNwKTsKKworCQlpZighcmVhZF9haGVhZChhLCBoYXNoX3NpemUsICZwKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlyYXItPmZpbGUuaGFzX2JsYWtlMiA9IDE7CisJCW1lbWNweSgmcmFyLT5maWxlLmJsYWtlMnNwLCBwLCBoYXNoX3NpemUpOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCBoYXNoX3NpemUpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkqZXh0cmFfZGF0YV9zaXplIC09IGhhc2hfc2l6ZTsKKwl9IGVsc2UgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJVbnN1cHBvcnRlZCBoYXNoIHR5cGUgKDB4JXgpIiwgKGludCkgaGFzaF90eXBlKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyB1aW50NjRfdCB0aW1lX3dpbl90b191bml4KHVpbnQ2NF90IHdpbl90aW1lKSB7CisJY29uc3Qgc2l6ZV90IG5zX2luX3NlYyA9IDEwMDAwMDAwOworCWNvbnN0IHVpbnQ2NF90IHNlY190b191bml4ID0gMTE2NDQ0NzM2MDBMTDsKKwlyZXR1cm4gd2luX3RpbWUgLyBuc19pbl9zZWMgLSBzZWNfdG9fdW5peDsKK30KKworc3RhdGljIGludCBwYXJzZV9odGltZV9pdGVtKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIGNoYXIgdW5peF90aW1lLAorICAgIHVpbnQ2NF90KiB3aGVyZSwgc3NpemVfdCogZXh0cmFfZGF0YV9zaXplKQoreworCWlmKHVuaXhfdGltZSkgeworCQl1aW50MzJfdCB0aW1lX3ZhbDsKKwkJaWYoIXJlYWRfdTMyKGEsICZ0aW1lX3ZhbCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSA0OworCQkqd2hlcmUgPSAodWludDY0X3QpIHRpbWVfdmFsOworCX0gZWxzZSB7CisJCXVpbnQ2NF90IHdpbmRvd3NfdGltZTsKKwkJaWYoIXJlYWRfdTY0KGEsICZ3aW5kb3dzX3RpbWUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCSp3aGVyZSA9IHRpbWVfd2luX3RvX3VuaXgod2luZG93c190aW1lKTsKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSA4OworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpbGVfZXh0cmFfdmVyc2lvbihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlLCBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJc2l6ZV90IGZsYWdzID0gMDsKKwlzaXplX3QgdmVyc2lvbiA9IDA7CisJc2l6ZV90IHZhbHVlX2xlbiA9IDA7CisJc3RydWN0IGFyY2hpdmVfc3RyaW5nIHZlcnNpb25fc3RyaW5nOworCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBuYW1lX3V0Zjhfc3RyaW5nOworCWNvbnN0IGNoYXIqIGN1cl9maWxlbmFtZTsKKworCS8qIEZsYWdzIGFyZSBpZ25vcmVkLiAqLworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZmxhZ3MsICZ2YWx1ZV9sZW4pKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX2xlbjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFsdWVfbGVuKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZ2ZXJzaW9uLCAmdmFsdWVfbGVuKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9sZW47CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHZhbHVlX2xlbikpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCS8qIGV4dHJhX2RhdGFfc2l6ZSBzaG91bGQgYmUgemVybyBoZXJlLiAqLworCisJY3VyX2ZpbGVuYW1lID0gYXJjaGl2ZV9lbnRyeV9wYXRobmFtZV91dGY4KGUpOworCWlmKGN1cl9maWxlbmFtZSA9PSBOVUxMKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiVmVyc2lvbiBlbnRyeSB3aXRob3V0IGZpbGUgbmFtZSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZ2ZXJzaW9uX3N0cmluZyk7CisJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmbmFtZV91dGY4X3N0cmluZyk7CisKKwkvKiBQcmVwYXJlIGEgOzEyMyBzdWZmaXggZm9yIHRoZSBmaWxlbmFtZSwgd2hlcmUgJzEyMycgaXMgdGhlIHZlcnNpb24KKwkgKiB2YWx1ZSBvZiB0aGlzIGZpbGUuICovCisJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZigmdmVyc2lvbl9zdHJpbmcsICI7JXp1IiwgdmVyc2lvbik7CisKKwkvKiBCdWlsZCB0aGUgbmV3IGZpbGVuYW1lLiAqLworCWFyY2hpdmVfc3RyY2F0KCZuYW1lX3V0Zjhfc3RyaW5nLCBjdXJfZmlsZW5hbWUpOworCWFyY2hpdmVfc3RyY2F0KCZuYW1lX3V0Zjhfc3RyaW5nLCB2ZXJzaW9uX3N0cmluZy5zKTsKKworCS8qIEFwcGx5IHRoZSBuZXcgZmlsZW5hbWUgaW50byB0aGlzIGZpbGUncyBjb250ZXh0LiAqLworCWFyY2hpdmVfZW50cnlfdXBkYXRlX3BhdGhuYW1lX3V0ZjgoZSwgbmFtZV91dGY4X3N0cmluZy5zKTsKKworCS8qIEZyZWUgYnVmZmVycy4gKi8KKwlhcmNoaXZlX3N0cmluZ19mcmVlKCZ2ZXJzaW9uX3N0cmluZyk7CisJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmbmFtZV91dGY4X3N0cmluZyk7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZmlsZV9leHRyYV9odGltZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlLCBzdHJ1Y3QgcmFyNSogcmFyLCBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJY2hhciB1bml4X3RpbWUgPSAwOworCXNpemVfdCBmbGFncyA9IDA7CisJc2l6ZV90IHZhbHVlX2xlbjsKKworCWVudW0gSFRJTUVfRkxBR1MgeworCQlJU19VTklYICAgICAgID0gMHgwMSwKKwkJSEFTX01USU1FICAgICA9IDB4MDIsCisJCUhBU19DVElNRSAgICAgPSAweDA0LAorCQlIQVNfQVRJTUUgICAgID0gMHgwOCwKKwkJSEFTX1VOSVhfTlMgICA9IDB4MTAsCisJfTsKKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZmxhZ3MsICZ2YWx1ZV9sZW4pKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX2xlbjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFsdWVfbGVuKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJdW5peF90aW1lID0gZmxhZ3MgJiBJU19VTklYOworCisJaWYoZmxhZ3MgJiBIQVNfTVRJTUUpIHsKKwkJcGFyc2VfaHRpbWVfaXRlbShhLCB1bml4X3RpbWUsICZyYXItPmZpbGUuZV9tdGltZSwKKwkJICAgIGV4dHJhX2RhdGFfc2l6ZSk7CisJCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGUsIHJhci0+ZmlsZS5lX210aW1lLCAwKTsKKwl9CisKKwlpZihmbGFncyAmIEhBU19DVElNRSkgeworCQlwYXJzZV9odGltZV9pdGVtKGEsIHVuaXhfdGltZSwgJnJhci0+ZmlsZS5lX2N0aW1lLAorCQkgICAgZXh0cmFfZGF0YV9zaXplKTsKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfY3RpbWUoZSwgcmFyLT5maWxlLmVfY3RpbWUsIDApOworCX0KKworCWlmKGZsYWdzICYgSEFTX0FUSU1FKSB7CisJCXBhcnNlX2h0aW1lX2l0ZW0oYSwgdW5peF90aW1lLCAmcmFyLT5maWxlLmVfYXRpbWUsCisJCSAgICBleHRyYV9kYXRhX3NpemUpOworCQlhcmNoaXZlX2VudHJ5X3NldF9hdGltZShlLCByYXItPmZpbGUuZV9hdGltZSwgMCk7CisJfQorCisJaWYoZmxhZ3MgJiBIQVNfVU5JWF9OUykgeworCQlpZighcmVhZF91MzIoYSwgJnJhci0+ZmlsZS5lX3VuaXhfbnMpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCSpleHRyYV9kYXRhX3NpemUgLT0gNDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2V4dHJhX3JlZGlyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGUsIHN0cnVjdCByYXI1KiByYXIsIHNzaXplX3QqIGV4dHJhX2RhdGFfc2l6ZSkKK3sKKwl1aW50NjRfdCB2YWx1ZV9zaXplID0gMDsKKwlzaXplX3QgdGFyZ2V0X3NpemUgPSAwOworCWNoYXIgdGFyZ2V0X3V0ZjhfYnVmW01BWF9OQU1FX0lOX0JZVEVTXTsKKwljb25zdCB1aW50OF90KiBwOworCisJaWYoIXJlYWRfdmFyKGEsICZyYXItPmZpbGUucmVkaXJfdHlwZSwgJnZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9zaXplOworCisJaWYoIXJlYWRfdmFyKGEsICZyYXItPmZpbGUucmVkaXJfZmxhZ3MsICZ2YWx1ZV9zaXplKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCAoaW50NjRfdCl2YWx1ZV9zaXplKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCSpleHRyYV9kYXRhX3NpemUgLT0gdmFsdWVfc2l6ZTsKKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmdGFyZ2V0X3NpemUsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB0YXJnZXRfc2l6ZSArIDE7CisKKwlpZighcmVhZF9haGVhZChhLCB0YXJnZXRfc2l6ZSwgJnApKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZih0YXJnZXRfc2l6ZSA+IChNQVhfTkFNRV9JTl9DSEFSUyAtIDEpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkxpbmsgdGFyZ2V0IGlzIHRvbyBsb25nIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKHRhcmdldF9zaXplID09IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiTm8gbGluayB0YXJnZXQgc3BlY2lmaWVkIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCW1lbWNweSh0YXJnZXRfdXRmOF9idWYsIHAsIHRhcmdldF9zaXplKTsKKwl0YXJnZXRfdXRmOF9idWZbdGFyZ2V0X3NpemVdID0gMDsKKworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCAoaW50NjRfdCl0YXJnZXRfc2l6ZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCXN3aXRjaChyYXItPmZpbGUucmVkaXJfdHlwZSkgeworCQljYXNlIFJFRElSX1RZUEVfVU5JWFNZTUxJTks6CisJCWNhc2UgUkVESVJfVFlQRV9XSU5TWU1MSU5LOgorCQkJYXJjaGl2ZV9lbnRyeV9zZXRfZmlsZXR5cGUoZSwgQUVfSUZMTkspOworCQkJYXJjaGl2ZV9lbnRyeV91cGRhdGVfc3ltbGlua191dGY4KGUsIHRhcmdldF91dGY4X2J1Zik7CisJCQlpZiAocmFyLT5maWxlLnJlZGlyX2ZsYWdzICYgUkVESVJfU1lNTElOS19JU19ESVIpIHsKKwkJCQlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUoZSwKKwkJCQkJQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSk7CisJCQl9IGVsc2UgeworCQkJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShlLAorCQkJCUFFX1NZTUxJTktfVFlQRV9GSUxFKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkVESVJfVFlQRV9IQVJETElOSzoKKwkJCWFyY2hpdmVfZW50cnlfc2V0X2ZpbGV0eXBlKGUsIEFFX0lGUkVHKTsKKwkJCWFyY2hpdmVfZW50cnlfdXBkYXRlX2hhcmRsaW5rX3V0ZjgoZSwgdGFyZ2V0X3V0ZjhfYnVmKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBVbmtub3duIHJlZGlyIHR5cGUsIHNraXAgaXQuICovCisJCQlicmVhazsKKwl9CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZmlsZV9leHRyYV9vd25lcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlLCBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJdWludDY0X3QgZmxhZ3MgPSAwOworCXVpbnQ2NF90IHZhbHVlX3NpemUgPSAwOworCXVpbnQ2NF90IGlkID0gMDsKKwlzaXplX3QgbmFtZV9sZW4gPSAwOworCXNpemVfdCBuYW1lX3NpemUgPSAwOworCWNoYXIgbmFtZWJ1ZltPV05FUl9NQVhOQU1FTEVOXTsKKwljb25zdCB1aW50OF90KiBwOworCisJaWYoIXJlYWRfdmFyKGEsICZmbGFncywgJnZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9zaXplOworCisJaWYgKChmbGFncyAmIE9XTkVSX1VTRVJfTkFNRSkgIT0gMCkgeworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJm5hbWVfc2l6ZSwgTlVMTCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCSpleHRyYV9kYXRhX3NpemUgLT0gbmFtZV9zaXplICsgMTsKKworCQlpZighcmVhZF9haGVhZChhLCBuYW1lX3NpemUsICZwKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlpZiAobmFtZV9zaXplID49IE9XTkVSX01BWE5BTUVMRU4pIHsKKwkJCW5hbWVfbGVuID0gT1dORVJfTUFYTkFNRUxFTiAtIDE7CisJCX0gZWxzZSB7CisJCQluYW1lX2xlbiA9IG5hbWVfc2l6ZTsKKwkJfQorCisJCW1lbWNweShuYW1lYnVmLCBwLCBuYW1lX2xlbik7CisJCW5hbWVidWZbbmFtZV9sZW5dID0gMDsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KW5hbWVfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfdW5hbWUoZSwgbmFtZWJ1Zik7CisJfQorCWlmICgoZmxhZ3MgJiBPV05FUl9HUk9VUF9OQU1FKSAhPSAwKSB7CisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmbmFtZV9zaXplLCBOVUxMKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSBuYW1lX3NpemUgKyAxOworCisJCWlmKCFyZWFkX2FoZWFkKGEsIG5hbWVfc2l6ZSwgJnApKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWlmIChuYW1lX3NpemUgPj0gT1dORVJfTUFYTkFNRUxFTikgeworCQkJbmFtZV9sZW4gPSBPV05FUl9NQVhOQU1FTEVOIC0gMTsKKwkJfSBlbHNlIHsKKwkJCW5hbWVfbGVuID0gbmFtZV9zaXplOworCQl9CisKKwkJbWVtY3B5KG5hbWVidWYsIHAsIG5hbWVfbGVuKTsKKwkJbmFtZWJ1ZltuYW1lX2xlbl0gPSAwOworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgKGludDY0X3QpbmFtZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlhcmNoaXZlX2VudHJ5X3NldF9nbmFtZShlLCBuYW1lYnVmKTsKKwl9CisJaWYgKChmbGFncyAmIE9XTkVSX1VTRVJfVUlEKSAhPSAwKSB7CisJCWlmKCFyZWFkX3ZhcihhLCAmaWQsICZ2YWx1ZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX3NpemU7CisKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfdWlkKGUsIChsYV9pbnQ2NF90KWlkKTsKKwl9CisJaWYgKChmbGFncyAmIE9XTkVSX0dST1VQX0dJRCkgIT0gMCkgeworCQlpZighcmVhZF92YXIoYSwgJmlkLCAmdmFsdWVfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCAoaW50NjRfdCl2YWx1ZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9zaXplOworCisJCWFyY2hpdmVfZW50cnlfc2V0X2dpZChlLCAobGFfaW50NjRfdClpZCk7CisJfQorCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGVhZF9maWxlX2V4dHJhKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGUsIHN0cnVjdCByYXI1KiByYXIsIHNzaXplX3QgZXh0cmFfZGF0YV9zaXplKQoreworCXNpemVfdCBleHRyYV9maWVsZF9zaXplOworCXNpemVfdCBleHRyYV9maWVsZF9pZCA9IDA7CisJaW50IHJldCA9IEFSQ0hJVkVfRkFUQUw7CisJc2l6ZV90IHZhcl9zaXplOworCisJd2hpbGUoZXh0cmFfZGF0YV9zaXplID4gMCkgeworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX3NpemUsICZ2YXJfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJZXh0cmFfZGF0YV9zaXplIC09IHZhcl9zaXplOworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFyX3NpemUpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX2lkLCAmdmFyX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWV4dHJhX2RhdGFfc2l6ZSAtPSB2YXJfc2l6ZTsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHZhcl9zaXplKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJc3dpdGNoKGV4dHJhX2ZpZWxkX2lkKSB7CisJCQljYXNlIEVYX0hBU0g6CisJCQkJcmV0ID0gcGFyc2VfZmlsZV9leHRyYV9oYXNoKGEsIHJhciwKKwkJCQkgICAgJmV4dHJhX2RhdGFfc2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYX0hUSU1FOgorCQkJCXJldCA9IHBhcnNlX2ZpbGVfZXh0cmFfaHRpbWUoYSwgZSwgcmFyLAorCQkJCSAgICAmZXh0cmFfZGF0YV9zaXplKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhfUkVESVI6CisJCQkJcmV0ID0gcGFyc2VfZmlsZV9leHRyYV9yZWRpcihhLCBlLCByYXIsCisJCQkJICAgICZleHRyYV9kYXRhX3NpemUpOworCQkJCWJyZWFrOworCQkJY2FzZSBFWF9VT1dORVI6CisJCQkJcmV0ID0gcGFyc2VfZmlsZV9leHRyYV9vd25lcihhLCBlLAorCQkJCSAgICAmZXh0cmFfZGF0YV9zaXplKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhfVkVSU0lPTjoKKwkJCQlyZXQgPSBwYXJzZV9maWxlX2V4dHJhX3ZlcnNpb24oYSwgZSwKKwkJCQkgICAgJmV4dHJhX2RhdGFfc2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYX0NSWVBUOgorCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQljYXNlIEVYX1NVQkRBVEE6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJLyogU2tpcCB1bnN1cHBvcnRlZCBlbnRyeS4gKi8KKwkJCQlyZXR1cm4gY29uc3VtZShhLCBleHRyYV9kYXRhX3NpemUpOworCQl9CisJfQorCisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJLyogQXR0cmlidXRlIG5vdCBpbXBsZW1lbnRlZC4gKi8KKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2hlYWRfZmlsZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlbnRyeSwgc2l6ZV90IGJsb2NrX2ZsYWdzKQoreworCXNzaXplX3QgZXh0cmFfZGF0YV9zaXplID0gMDsKKwlzaXplX3QgZGF0YV9zaXplID0gMDsKKwlzaXplX3QgZmlsZV9mbGFncyA9IDA7CisJc2l6ZV90IGZpbGVfYXR0ciA9IDA7CisJc2l6ZV90IGNvbXByZXNzaW9uX2luZm8gPSAwOworCXNpemVfdCBob3N0X29zID0gMDsKKwlzaXplX3QgbmFtZV9zaXplID0gMDsKKwl1aW50NjRfdCB1bnBhY2tlZF9zaXplLCB3aW5kb3dfc2l6ZTsKKwl1aW50MzJfdCBtdGltZSA9IDAsIGNyYyA9IDA7CisJaW50IGNfbWV0aG9kID0gMCwgY192ZXJzaW9uID0gMDsKKwljaGFyIG5hbWVfdXRmOF9idWZbTUFYX05BTUVfSU5fQllURVNdOworCWNvbnN0IHVpbnQ4X3QqIHA7CisKKwllbnVtIEZJTEVfRkxBR1MgeworCQlESVJFQ1RPUlkgPSAweDAwMDEsIFVUSU1FID0gMHgwMDAyLCBDUkMzMiA9IDB4MDAwNCwKKwkJVU5LTk9XTl9VTlBBQ0tFRF9TSVpFID0gMHgwMDA4LAorCX07CisKKwllbnVtIEZJTEVfQVRUUlMgeworCQlBVFRSX1JFQURPTkxZID0gMHgxLCBBVFRSX0hJRERFTiA9IDB4MiwgQVRUUl9TWVNURU0gPSAweDQsCisJCUFUVFJfRElSRUNUT1JZID0gMHgxMCwKKwl9OworCisJZW51bSBDT01QX0lORk9fRkxBR1MgeworCQlTT0xJRCA9IDB4MDA0MCwKKwl9OworCisJZW51bSBIT1NUX09TIHsKKwkJSE9TVF9XSU5ET1dTID0gMCwKKwkJSE9TVF9VTklYID0gMSwKKwl9OworCisJYXJjaGl2ZV9lbnRyeV9jbGVhcihlbnRyeSk7CisKKwkvKiBEbyBub3QgcmVzZXQgZmlsZSBjb250ZXh0IGlmIHdlJ3JlIHN3aXRjaGluZyBhcmNoaXZlcy4gKi8KKwlpZighcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lKSB7CisJCXJlc2V0X2ZpbGVfY29udGV4dChyYXIpOworCX0KKworCWlmKGJsb2NrX2ZsYWdzICYgSEZMX0VYVFJBX0RBVEEpIHsKKwkJc2l6ZV90IGVkYXRhX3NpemUgPSAwOworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmVkYXRhX3NpemUsIE5VTEwpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCS8qIEludGVudGlvbmFsIHR5cGUgY2FzdCBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZC4gKi8KKwkJZXh0cmFfZGF0YV9zaXplID0gKHNzaXplX3QpIGVkYXRhX3NpemU7CisJfQorCisJaWYoYmxvY2tfZmxhZ3MgJiBIRkxfREFUQSkgeworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmRhdGFfc2l6ZSwgTlVMTCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9IGRhdGFfc2l6ZTsKKwl9IGVsc2UgeworCQlyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID0gMDsKKworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkibm8gZGF0YSBmb3VuZCBpbiBmaWxlL3NlcnZpY2UgYmxvY2siKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZmaWxlX2ZsYWdzLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfdmFyKGEsICZ1bnBhY2tlZF9zaXplLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoZmlsZV9mbGFncyAmIFVOS05PV05fVU5QQUNLRURfU0laRSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkgICAgIkZpbGVzIHdpdGggdW5rbm93biB1bnBhY2tlZCBzaXplIGFyZSBub3Qgc3VwcG9ydGVkIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJhci0+ZmlsZS5kaXIgPSAodWludDhfdCkgKChmaWxlX2ZsYWdzICYgRElSRUNUT1JZKSA+IDApOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZmaWxlX2F0dHIsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZihmaWxlX2ZsYWdzICYgVVRJTUUpIHsKKwkJaWYoIXJlYWRfdTMyKGEsICZtdGltZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoZmlsZV9mbGFncyAmIENSQzMyKSB7CisJCWlmKCFyZWFkX3UzMihhLCAmY3JjKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmNvbXByZXNzaW9uX2luZm8sIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwljX21ldGhvZCA9IChpbnQpIChjb21wcmVzc2lvbl9pbmZvID4+IDcpICYgMHg3OworCWNfdmVyc2lvbiA9IChpbnQpIChjb21wcmVzc2lvbl9pbmZvICYgMHgzZik7CisKKwkvKiBSQVI1IHNlZW1zIHRvIGxpbWl0IHRoZSBkaWN0aW9uYXJ5IHNpemUgdG8gNjRNQi4gKi8KKwl3aW5kb3dfc2l6ZSA9IChyYXItPmZpbGUuZGlyID4gMCkgPworCQkwIDoKKwkJZ191bnBhY2tfd2luZG93X3NpemUgPDwgKChjb21wcmVzc2lvbl9pbmZvID4+IDEwKSAmIDE1KTsKKwlyYXItPmNzdGF0ZS5tZXRob2QgPSBjX21ldGhvZDsKKwlyYXItPmNzdGF0ZS52ZXJzaW9uID0gY192ZXJzaW9uICsgNTA7CisJcmFyLT5maWxlLnNvbGlkID0gKGNvbXByZXNzaW9uX2luZm8gJiBTT0xJRCkgPiAwOworCisJLyogQXJjaGl2ZXMgd2hpY2ggZGVjbGFyZSBzb2xpZCBmaWxlcyB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgd2luZG93CisJICogYnVmZmVyIGZpcnN0IGFyZSBpbnZhbGlkLiAqLworCisJaWYocmFyLT5maWxlLnNvbGlkID4gMCAmJiByYXItPmNzdGF0ZS53aW5kb3dfYnVmID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAiRGVjbGFyZWQgc29saWQgZmlsZSwgYnV0IG5vIHdpbmRvdyBidWZmZXIgIgorCQkJCSAgImluaXRpYWxpemVkIHlldC4iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogQ2hlY2sgaWYgd2luZG93X3NpemUgaXMgYSBzYW5lIHZhbHVlLiBBbHNvLCBpZiB0aGUgZmlsZSBpcyBub3QKKwkgKiBkZWNsYXJlZCBhcyBhIGRpcmVjdG9yeSwgZGlzYWxsb3cgd2luZG93X3NpemUgPT0gMC4gKi8KKwlpZih3aW5kb3dfc2l6ZSA+ICg2NCAqIDEwMjQgKiAxMDI0KSB8fAorCSAgICAocmFyLT5maWxlLmRpciA9PSAwICYmIHdpbmRvd19zaXplID09IDApKQorCXsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiRGVjbGFyZWQgZGljdGlvbmFyeSBzaXplIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKHJhci0+ZmlsZS5zb2xpZCA+IDApIHsKKwkJLyogUmUtY2hlY2sgaWYgY3VycmVudCB3aW5kb3cgc2l6ZSBpcyB0aGUgc2FtZSBhcyBwcmV2aW91cworCQkgKiB3aW5kb3cgc2l6ZSAoZm9yIHNvbGlkIGZpbGVzIG9ubHkpLiAqLworCQlpZihyYXItPmZpbGUuc29saWRfd2luZG93X3NpemUgPiAwICYmCisJCSAgICByYXItPmZpbGUuc29saWRfd2luZG93X3NpemUgIT0gKHNzaXplX3QpIHdpbmRvd19zaXplKQorCQl7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiV2luZG93IHNpemUgZm9yIHRoaXMgc29saWQgZmlsZSBkb2Vzbid0IG1hdGNoICIKKwkJCSAgICAidGhlIHdpbmRvdyBzaXplIHVzZWQgaW4gcHJldmlvdXMgc29saWQgZmlsZS4gIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCX0KKworCS8qIElmIHdlJ3JlIGN1cnJlbnRseSBzd2l0Y2hpbmcgdm9sdW1lcywgaWdub3JlIHRoZSBuZXcgZGVmaW5pdGlvbiBvZgorCSAqIHdpbmRvd19zaXplLiAqLworCWlmKHJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSA9PSAwKSB7CisJCS8qIFZhbHVlcyB1cCB0byA2NE0gc2hvdWxkIGZpdCBpbnRvIHNzaXplX3Qgb24gZXZlcnkKKwkJICogYXJjaGl0ZWN0dXJlLiAqLworCQlyYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSA9IChzc2l6ZV90KSB3aW5kb3dfc2l6ZTsKKwl9CisKKwlpZihyYXItPmZpbGUuc29saWQgPiAwICYmIHJhci0+ZmlsZS5zb2xpZF93aW5kb3dfc2l6ZSA9PSAwKSB7CisJCS8qIFNvbGlkIGZpbGVzIGhhdmUgdG8gaGF2ZSB0aGUgc2FtZSB3aW5kb3dfc2l6ZSBhY3Jvc3MKKwkJICAgd2hvbGUgYXJjaGl2ZS4gUmVtZW1iZXIgdGhlIHdpbmRvd19zaXplIHBhcmFtZXRlcgorCQkgICBmb3IgZmlyc3Qgc29saWQgZmlsZSBmb3VuZC4gKi8KKwkJcmFyLT5maWxlLnNvbGlkX3dpbmRvd19zaXplID0gcmFyLT5jc3RhdGUud2luZG93X3NpemU7CisJfQorCisJaW5pdF93aW5kb3dfbWFzayhyYXIpOworCisJcmFyLT5maWxlLnNlcnZpY2UgPSAwOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZob3N0X29zLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoaG9zdF9vcyA9PSBIT1NUX1dJTkRPV1MpIHsKKwkJLyogSG9zdCBPUyBpcyBXaW5kb3dzICovCisKKwkJX19MQV9NT0RFX1QgbW9kZTsKKworCQlpZihmaWxlX2F0dHIgJiBBVFRSX0RJUkVDVE9SWSkgeworCQkJaWYgKGZpbGVfYXR0ciAmIEFUVFJfUkVBRE9OTFkpIHsKKwkJCQltb2RlID0gMDU1NSB8IEFFX0lGRElSOworCQkJfSBlbHNlIHsKKwkJCQltb2RlID0gMDc1NSB8IEFFX0lGRElSOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGZpbGVfYXR0ciAmIEFUVFJfUkVBRE9OTFkpIHsKKwkJCQltb2RlID0gMDQ0NCB8IEFFX0lGUkVHOworCQkJfSBlbHNlIHsKKwkJCQltb2RlID0gMDY0NCB8IEFFX0lGUkVHOworCQkJfQorCQl9CisKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShlbnRyeSwgbW9kZSk7CisKKwkJaWYgKGZpbGVfYXR0ciAmIChBVFRSX1JFQURPTkxZIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZU1RFTSkpIHsKKwkJCWNoYXIgKmZmbGFnc190ZXh0LCAqcHRyOworCQkJLyogYWxsb2NhdGUgZm9yICJyZG9ubHksaGlkZGVuLHN5c3RlbSwiICovCisJCQlmZmxhZ3NfdGV4dCA9IG1hbGxvYygyMiAqIHNpemVvZihjaGFyKSk7CisJCQlpZiAoZmZsYWdzX3RleHQgIT0gTlVMTCkgeworCQkJCXB0ciA9IGZmbGFnc190ZXh0OworCQkJCWlmIChmaWxlX2F0dHIgJiBBVFRSX1JFQURPTkxZKSB7CisJCQkJCXN0cmNweShwdHIsICJyZG9ubHksIik7CisJCQkJCXB0ciA9IHB0ciArIDc7CisJCQkJfQorCQkJCWlmIChmaWxlX2F0dHIgJiBBVFRSX0hJRERFTikgeworCQkJCQlzdHJjcHkocHRyLCAiaGlkZGVuLCIpOworCQkJCQlwdHIgPSBwdHIgKyA3OworCQkJCX0KKwkJCQlpZiAoZmlsZV9hdHRyICYgQVRUUl9TWVNURU0pIHsKKwkJCQkJc3RyY3B5KHB0ciwgInN5c3RlbSwiKTsKKwkJCQkJcHRyID0gcHRyICsgNzsKKwkJCQl9CisJCQkJaWYgKHB0ciA+IGZmbGFnc190ZXh0KSB7CisJCQkJCS8qIERlbGV0ZSB0cmFpbGluZyBjb21tYSAqLworCQkJCQkqKHB0ciAtIDEpID0gJ1wwJzsKKwkJCQkJYXJjaGl2ZV9lbnRyeV9jb3B5X2ZmbGFnc190ZXh0KGVudHJ5LAorCQkJCQkgICAgZmZsYWdzX3RleHQpOworCQkJCX0KKwkJCQlmcmVlKGZmbGFnc190ZXh0KTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZihob3N0X29zID09IEhPU1RfVU5JWCkgeworCQkvKiBIb3N0IE9TIGlzIFVuaXggKi8KKwkJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShlbnRyeSwgKF9fTEFfTU9ERV9UKSBmaWxlX2F0dHIpOworCX0gZWxzZSB7CisJCS8qIFVua25vd24gaG9zdCBPUyAqLworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkiVW5zdXBwb3J0ZWQgSG9zdCBPUzogMHgleCIsIChpbnQpIGhvc3Rfb3MpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmbmFtZV9zaXplLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfYWhlYWQoYSwgbmFtZV9zaXplLCAmcCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWlmKG5hbWVfc2l6ZSA+IChNQVhfTkFNRV9JTl9DSEFSUyAtIDEpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSJGaWxlbmFtZSBpcyB0b28gbG9uZyIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKG5hbWVfc2l6ZSA9PSAwKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSJObyBmaWxlbmFtZSBzcGVjaWZpZWQiKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwltZW1jcHkobmFtZV91dGY4X2J1ZiwgcCwgbmFtZV9zaXplKTsKKwluYW1lX3V0ZjhfYnVmW25hbWVfc2l6ZV0gPSAwOworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCBuYW1lX3NpemUpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlhcmNoaXZlX2VudHJ5X3VwZGF0ZV9wYXRobmFtZV91dGY4KGVudHJ5LCBuYW1lX3V0ZjhfYnVmKTsKKworCWlmKGV4dHJhX2RhdGFfc2l6ZSA+IDApIHsKKwkJaW50IHJldCA9IHByb2Nlc3NfaGVhZF9maWxlX2V4dHJhKGEsIGVudHJ5LCByYXIsCisJCSAgICBleHRyYV9kYXRhX3NpemUpOworCisJCS8qCisJCSAqIFRPRE86IHJld3JpdGUgb3IgcmVtb3ZlIHVzZWxlc3Mgc2FuaXR5IGNoZWNrCisJCSAqICAgICAgIGFzIGV4dHJhX2RhdGFfc2l6ZSBpcyBub3QgcGFzc2VkIGFzIGEgcG9pbnRlcgorCQkgKgorCQlpZihleHRyYV9kYXRhX3NpemUgPCAwKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkJICAgICJGaWxlIGV4dHJhIGRhdGEgc2l6ZSBpcyBub3QgemVybyIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKwkJICovCisKKwkJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmKChmaWxlX2ZsYWdzICYgVU5LTk9XTl9VTlBBQ0tFRF9TSVpFKSA9PSAwKSB7CisJCXJhci0+ZmlsZS51bnBhY2tlZF9zaXplID0gKHNzaXplX3QpIHVucGFja2VkX3NpemU7CisJCWlmKHJhci0+ZmlsZS5yZWRpcl90eXBlID09IFJFRElSX1RZUEVfTk9ORSkKKwkJCWFyY2hpdmVfZW50cnlfc2V0X3NpemUoZW50cnksIHVucGFja2VkX3NpemUpOworCX0KKworCWlmKGZpbGVfZmxhZ3MgJiBVVElNRSkgeworCQlhcmNoaXZlX2VudHJ5X3NldF9tdGltZShlbnRyeSwgKHRpbWVfdCkgbXRpbWUsIDApOworCX0KKworCWlmKGZpbGVfZmxhZ3MgJiBDUkMzMikgeworCQlyYXItPmZpbGUuc3RvcmVkX2NyYzMyID0gY3JjOworCX0KKworCWlmKCFyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUpIHsKKwkJLyogRG8gbm90IHJlaW5pdGlhbGl6ZSB1bnBhY2tpbmcgc3RhdGUgaWYgd2UncmUgc3dpdGNoaW5nCisJCSAqIGFyY2hpdmVzLiAqLworCQlyYXItPmNzdGF0ZS5ibG9ja19wYXJzaW5nX2ZpbmlzaGVkID0gMTsKKwkJcmFyLT5jc3RhdGUuYWxsX2ZpbHRlcnNfYXBwbGllZCA9IDE7CisJCXJhci0+Y3N0YXRlLmluaXRpYWxpemVkID0gMDsKKwl9CisKKwlpZihyYXItPmdlbmVyaWMuc3BsaXRfYmVmb3JlID4gMCkgeworCQkvKiBJZiBub3cgd2UncmUgc3RhbmRpbmcgb24gYSBoZWFkZXIgdGhhdCBoYXMgYSAnc3BsaXQgYmVmb3JlJworCQkgKiBtYXJrLCBpdCBtZWFucyB3ZSdyZSBzdGFuZGluZyBvbiBhICdjb250aW51YXRpb24nIGZpbGUKKwkJICogaGVhZGVyLiBTaWduYWwgdGhlIGNhbGxlciB0aGF0IGlmIGl0IHdhbnRzIHRvIG1vdmUgdG8KKwkJICogYW5vdGhlciBmaWxlLCBpdCBtdXN0IGNhbGwgcmFyNV9yZWFkX2hlYWRlcigpIGZ1bmN0aW9uCisJCSAqIGFnYWluLiAqLworCisJCXJldHVybiBBUkNISVZFX1JFVFJZOworCX0gZWxzZSB7CisJCXJldHVybiBBUkNISVZFX09LOworCX0KK30KKworc3RhdGljIGludCBwcm9jZXNzX2hlYWRfc2VydmljZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlbnRyeSwgc2l6ZV90IGJsb2NrX2ZsYWdzKQoreworCS8qIFByb2Nlc3MgdGhpcyBTRVJWSUNFIGJsb2NrIHRoZSBzYW1lIHdheSBhcyBGSUxFIGJsb2Nrcy4gKi8KKwlpbnQgcmV0ID0gcHJvY2Vzc19oZWFkX2ZpbGUoYSwgcmFyLCBlbnRyeSwgYmxvY2tfZmxhZ3MpOworCWlmKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gcmV0OworCisJcmFyLT5maWxlLnNlcnZpY2UgPSAxOworCisJLyogQnV0IHNraXAgdGhlIGRhdGEgcGFydCBhdXRvbWF0aWNhbGx5LiBJdCdzIG5vIHVzZSBmb3IgdGhlIHVzZXIKKwkgKiBhbnl3YXkuICBJdCBjb250YWlucyBvbmx5IHNlcnZpY2UgZGF0YSwgbm90IGV2ZW4gbmVlZGVkIHRvCisJICogcHJvcGVybHkgdW5wYWNrIHRoZSBmaWxlLiAqLworCXJldCA9IHJhcjVfcmVhZF9kYXRhX3NraXAoYSk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiByZXQ7CisKKwkvKiBBZnRlciBza2lwcGluZywgdHJ5IHBhcnNpbmcgYW5vdGhlciBibG9jayBhdXRvbWF0aWNhbGx5LiAqLworCXJldHVybiBBUkNISVZFX1JFVFJZOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGVhZF9tYWluKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5LCBzaXplX3QgYmxvY2tfZmxhZ3MpCit7CisJaW50IHJldDsKKwlzaXplX3QgZXh0cmFfZGF0YV9zaXplID0gMDsKKwlzaXplX3QgZXh0cmFfZmllbGRfc2l6ZSA9IDA7CisJc2l6ZV90IGV4dHJhX2ZpZWxkX2lkID0gMDsKKwlzaXplX3QgYXJjaGl2ZV9mbGFncyA9IDA7CisKKwllbnVtIE1BSU5fRkxBR1MgeworCQlWT0xVTUUgPSAweDAwMDEsICAgICAgICAgLyogbXVsdGktdm9sdW1lIGFyY2hpdmUgKi8KKwkJVk9MVU1FX05VTUJFUiA9IDB4MDAwMiwgIC8qIHZvbHVtZSBudW1iZXIsIGZpcnN0IHZvbCBkb2Vzbid0CisJCQkJCSAgKiBoYXZlIGl0ICovCisJCVNPTElEID0gMHgwMDA0LCAgICAgICAgICAvKiBzb2xpZCBhcmNoaXZlICovCisJCVBST1RFQ1QgPSAweDAwMDgsICAgICAgICAvKiBjb250YWlucyBSZWNvdmVyeSBpbmZvICovCisJCUxPQ0sgPSAweDAwMTAsICAgICAgICAgICAvKiByZWFkb25seSBmbGFnLCBub3QgdXNlZCAqLworCX07CisKKwllbnVtIE1BSU5fRVhUUkEgeworCQkvLyBKdXN0IG9uZSBhdHRyaWJ1dGUgaGVyZS4KKwkJTE9DQVRPUiA9IDB4MDEsCisJfTsKKworCSh2b2lkKSBlbnRyeTsKKworCWlmKGJsb2NrX2ZsYWdzICYgSEZMX0VYVFJBX0RBVEEpIHsKKwkJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZleHRyYV9kYXRhX3NpemUsIE5VTEwpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0gZWxzZSB7CisJCWV4dHJhX2RhdGFfc2l6ZSA9IDA7CisJfQorCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZhcmNoaXZlX2ZsYWdzLCBOVUxMKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJcmFyLT5tYWluLnZvbHVtZSA9IChhcmNoaXZlX2ZsYWdzICYgVk9MVU1FKSA+IDA7CisJcmFyLT5tYWluLnNvbGlkID0gKGFyY2hpdmVfZmxhZ3MgJiBTT0xJRCkgPiAwOworCisJaWYoYXJjaGl2ZV9mbGFncyAmIFZPTFVNRV9OVU1CRVIpIHsKKwkJc2l6ZV90IHYgPSAwOworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJnYsIE5VTEwpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQlpZiAodiA+IFVJTlRfTUFYKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJJbnZhbGlkIHZvbHVtZSBudW1iZXIiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJcmFyLT5tYWluLnZvbF9ubyA9ICh1bnNpZ25lZCBpbnQpIHY7CisJfSBlbHNlIHsKKwkJcmFyLT5tYWluLnZvbF9ubyA9IDA7CisJfQorCisJaWYocmFyLT52b2wuZXhwZWN0ZWRfdm9sX25vID4gMCAmJgorCQlyYXItPm1haW4udm9sX25vICE9IHJhci0+dm9sLmV4cGVjdGVkX3ZvbF9ubykKKwl7CisJCS8qIFJldHVybmluZyBFT0YgaW5zdGVhZCBvZiBGQVRBTCBiZWNhdXNlIG9mIHN0cmFuZ2UKKwkJICogbGliYXJjaGl2ZSBiZWhhdmlvci4gV2hlbiBvcGVuaW5nIG11bHRpcGxlIGZpbGVzIHZpYQorCQkgKiBhcmNoaXZlX3JlYWRfb3Blbl9maWxlbmFtZXMoKSwgYWZ0ZXIgcmVhZGluZyB1cCB0aGUgd2hvbGUKKwkJICogbGFzdCBmaWxlLCB0aGUgX19hcmNoaXZlX3JlYWRfYWhlYWQgZnVuY3Rpb24gd3JhcHMgdXAgdG8KKwkJICogdGhlIGZpcnN0IGFyY2hpdmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgRU9GLiAqLworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoZXh0cmFfZGF0YV9zaXplID09IDApIHsKKwkJLyogRWFybHkgcmV0dXJuLiAqLworCQlyZXR1cm4gQVJDSElWRV9PSzsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX3NpemUsIE5VTEwpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2ZpZWxkX2lkLCBOVUxMKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoZXh0cmFfZmllbGRfc2l6ZSA9PSAwKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkludmFsaWQgZXh0cmEgZmllbGQgc2l6ZSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlzd2l0Y2goZXh0cmFfZmllbGRfaWQpIHsKKwkJY2FzZSBMT0NBVE9SOgorCQkJcmV0ID0gcHJvY2Vzc19tYWluX2xvY2F0b3JfZXh0cmFfYmxvY2soYSwgcmFyKTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJLyogRXJyb3Igd2hpbGUgcGFyc2luZyBtYWluIGxvY2F0b3IgZXh0cmEKKwkJCQkgKiBibG9jay4gKi8KKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIlVuc3VwcG9ydGVkIGV4dHJhIHR5cGUgKDB4JXgpIiwKKwkJCSAgICAoaW50KSBleHRyYV9maWVsZF9pZCk7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBza2lwX3VucHJvY2Vzc2VkX2J5dGVzKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisJaW50IHJldDsKKworCWlmKHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcpIHsKKwkJLyogVXNlIGRpZmZlcmVudCBza2lwcGluZyBtZXRob2QgaW4gYmxvY2sgbWVyZ2luZyBtb2RlIHRoYW4gaW4KKwkJICogbm9ybWFsIG1vZGUuIElmIG1lcmdlIG1vZGUgaXMgYWN0aXZlLCByYXI1X3JlYWRfZGF0YV9za2lwCisJCSAqIGNhbid0IGJlIHVzZWQsIGJlY2F1c2UgaXQgY291bGQgYWxsb3cgcmVjdXJzaXZlIHVzZSBvZgorCQkgKiBtZXJnZV9ibG9jaygpICogZnVuY3Rpb24sIGFuZCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgc3VwcG9ydAorCQkgKiByZWN1cnNpdmUgdXNlLiAqLworCQlpZihyYXItPm1lcmdlX21vZGUpIHsKKwkJCS8qIERpc2NhcmQgd2hvbGUgbWVyZ2VkIGJsb2NrLiBUaGlzIGlzIHZhbGlkIGluIHNvbGlkCisJCQkgKiBtb2RlIGFzIHdlbGwsIGJlY2F1c2UgdGhlIGNvZGUgd2lsbCBkaXNjYXJkIGJsb2NrcworCQkJICogb25seSBpZiB0aG9zZSBibG9ja3MgYXJlIHNhZmUgdG8gZGlzY2FyZCAoaS5lLgorCQkJICogdGhleSdyZSBub3QgRklMRSBibG9ja3MpLiAgKi8KKwkJCXJldCA9IGNvbnN1bWUoYSwgcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyk7CisJCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIElmIHdlJ3JlIG5vdCBpbiBtZXJnZSBtb2RlLCB1c2Ugc2FmZSBza2lwcGluZyBjb2RlLgorCQkJICogVGhpcyB3aWxsIGVuc3VyZSB3ZSdsbCBoYW5kbGUgc29saWQgYXJjaGl2ZXMKKwkJCSAqIHByb3Blcmx5LiAqLworCQkJcmV0ID0gcmFyNV9yZWFkX2RhdGFfc2tpcChhKTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHNjYW5fZm9yX3NpZ25hdHVyZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKTsKKworLyogQmFzZSBibG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9uLiBBICdiYXNlIGJsb2NrJyBpcyBhIFJBUnY1IGhlYWRlciBibG9jaworICogdGhhdCB0ZWxscyB0aGUgcmVhZGVyIHdoYXQga2luZCBvZiBkYXRhIGlzIHN0b3JlZCBpbnNpZGUgdGhlIGJsb2NrLgorICoKKyAqIEZyb20gdGhlIGJpcmRzLWV5ZSB2aWV3IGEgUkFSIGZpbGUgbG9va3MgZmlsZSB0aGlzOgorICoKKyAqIDxtYWdpYz48YmFzZV9ibG9ja18xPjxiYXNlX2Jsb2NrXzI+Li4uPGJhc2VfYmxvY2tfbj4KKyAqCisgKiBUaGVyZSBhcmUgYSBmZXcgdHlwZXMgb2YgYmFzZSBibG9ja3MuIFRob3NlIHR5cGVzIGFyZSBzcGVjaWZpZWQgaW5zaWRlCisgKiB0aGUgJ3N3aXRjaCcgc3RhdGVtZW50IGluIHRoaXMgZnVuY3Rpb24uIEZvciBleGFtcGxlIHB1cnBvc2VzLCBJJ2xsIHdyaXRlCisgKiBob3cgYSBzdGFuZGFyZCBSQVJ2NSBmaWxlIGNvdWxkIGxvb2sgbGlrZSBoZXJlOgorICoKKyAqIDxtYWdpYz48TUFJTj48RklMRT48RklMRT48RklMRT48U0VSVklDRT48RU5EQVJDPgorICoKKyAqIFRoZSBzdHJ1Y3R1cmUgYWJvdmUgY291bGQgZGVzY3JpYmUgYW4gYXJjaGl2ZSBmaWxlIHdpdGggMyBmaWxlcyBpbiBpdCwKKyAqIG9uZSBzZXJ2aWNlICJRdWlja09wZW4iIGJsb2NrICh0aGF0IGlzIGlnbm9yZWQgYnkgdGhpcyBwYXJzZXIpLCBhbmQgYW4KKyAqIGVuZCBvZiBmaWxlIGJhc2UgYmxvY2sgbWFya2VyLgorICoKKyAqIElmIHRoZSBmaWxlIGlzIHN0b3JlZCBpbiBtdWx0aXBsZSBhcmNoaXZlIGZpbGVzICgibXVsdGlhcmNoaXZlIiksIGl0IG1pZ2h0CisgKiBsb29rIGxpa2UgdGhpczoKKyAqCisgKiAucGFydDAxLnJhcjogPG1hZ2ljPjxNQUlOPjxGSUxFPjxFTkRBUkM+CisgKiAucGFydDAyLnJhcjogPG1hZ2ljPjxNQUlOPjxGSUxFPjxFTkRBUkM+CisgKiAucGFydDAzLnJhcjogPG1hZ2ljPjxNQUlOPjxGSUxFPjxFTkRBUkM+CisgKgorICogVGhpcyBleGFtcGxlIGNvdWxkIGRlc2NyaWJlIDMgUkFSIGZpbGVzIHRoYXQgY29udGFpbiBPTkUgYXJjaGl2ZWQgZmlsZS4KKyAqIE9yIGl0IGNvdWxkIGRlc2NyaWJlIDMgUkFSIGZpbGVzIHRoYXQgY29udGFpbiAzIGRpZmZlcmVudCBmaWxlcy4gT3IgMworICogUkFSIGZpbGVzIHRoYW4gY29udGFpbiAyIGZpbGVzLiBJdCBhbGwgZGVwZW5kcyB3aGF0IG1ldGFkYXRhIGlzIHN0b3JlZCBpbgorICogdGhlIGhlYWRlcnMgb2YgPEZJTEU+IGJsb2Nrcy4KKyAqCisgKiBFYWNoIDxGSUxFPiBibG9jayBjb250YWlucyBpbmZvIGFib3V0IGl0cyBzaXplLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpdCdzCisgKiBzdG9yaW5nIGluc2lkZSwgYW5kIHdoZXRoZXIgdGhpcyBGSUxFIGJsb2NrIGlzIGEgY29udGludWF0aW9uIGJsb2NrIG9mCisgKiBwcmV2aW91cyBhcmNoaXZlICgnc3BsaXQgYmVmb3JlJyksIGFuZCBpcyB0aGlzIEZJTEUgYmxvY2sgc2hvdWxkIGJlCisgKiBjb250aW51ZWQgaW4gYW5vdGhlciBhcmNoaXZlICgnc3BsaXQgYWZ0ZXInKS4gQnkgcGFyc2luZyB0aGUgJ3NwbGl0IGJlZm9yZScKKyAqIGFuZCAnc3BsaXQgYWZ0ZXInIGZsYWdzLCB3ZSdyZSBhYmxlIHRvIHRlbGwgaWYgbXVsdGlwbGUgPEZJTEU+IGJhc2UgYmxvY2tzCisgKiBhcmUgZGVzY3JpYmluZyBvbmUgZmlsZSwgb3IgbXVsdGlwbGUgZmlsZXMgKHdpdGggdGhlIHNhbWUgZmlsZW5hbWUsIGZvcgorICogZXhhbXBsZSkuCisgKgorICogT25lIHRoaW5nIHRvIG5vdGUgaXMgdGhhdCBpZiB3ZSdyZSBwYXJzaW5nIHRoZSBmaXJzdCA8RklMRT4gYmxvY2ssIGFuZAorICogd2Ugc2VlICdzcGxpdCBhZnRlcicgZmxhZywgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgb3ZlciB0byBhbm90aGVyIDxGSUxFPgorICogYmxvY2sgdG8gYmUgYWJsZSB0byBkZWNvbXByZXNzIHJlc3Qgb2YgdGhlIGRhdGEuIFRvIGRvIHRoaXMsIHdlIG5lZWQKKyAqIHRvIHNraXAgdGhlIDxFTkRBUkM+IGJsb2NrLCB0aGVuIHN3aXRjaCB0byBhbm90aGVyIGZpbGUsIHRoZW4gc2tpcCB0aGUKKyAqIDxtYWdpYz4gYmxvY2ssIDxNQUlOPiBibG9jaywgYW5kIHRoZW4gd2UncmUgc3RhbmRpbmcgb24gdGhlIHByb3BlcgorICogPEZJTEU+IGJsb2NrLgorICovCisKK3N0YXRpYyBpbnQgcHJvY2Vzc19iYXNlX2Jsb2NrKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5KQoreworCWNvbnN0IHNpemVfdCBTTUFMTEVTVF9SQVI1X0JMT0NLX1NJWkUgPSAzOworCisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCXVpbnQzMl90IGhkcl9jcmMsIGNvbXB1dGVkX2NyYzsKKwlzaXplX3QgcmF3X2hkcl9zaXplID0gMCwgaGRyX3NpemVfbGVuLCBoZHJfc2l6ZTsKKwlzaXplX3QgaGVhZGVyX2lkID0gMDsKKwlzaXplX3QgaGVhZGVyX2ZsYWdzID0gMDsKKwljb25zdCB1aW50OF90KiBwOworCWludCByZXQ7CisKKwllbnVtIEhFQURFUl9UWVBFIHsKKwkJSEVBRF9NQVJLICAgID0gMHgwMCwgSEVBRF9NQUlOICA9IDB4MDEsIEhFQURfRklMRSAgID0gMHgwMiwKKwkJSEVBRF9TRVJWSUNFID0gMHgwMywgSEVBRF9DUllQVCA9IDB4MDQsIEhFQURfRU5EQVJDID0gMHgwNSwKKwkJSEVBRF9VTktOT1dOID0gMHhmZiwKKwl9OworCisJLyogU2tpcCBhbnkgdW5wcm9jZXNzZWQgZGF0YSBmb3IgdGhpcyBmaWxlLiAqLworCXJldCA9IHNraXBfdW5wcm9jZXNzZWRfYnl0ZXMoYSk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiByZXQ7CisKKwkvKiBSZWFkIHRoZSBleHBlY3RlZCBDUkMzMiBjaGVja3N1bS4gKi8KKwlpZighcmVhZF91MzIoYSwgJmhkcl9jcmMpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwkvKiBSZWFkIGhlYWRlciBzaXplLiAqLworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmcmF3X2hkcl9zaXplLCAmaGRyX3NpemVfbGVuKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaGRyX3NpemUgPSByYXdfaGRyX3NpemUgKyBoZHJfc2l6ZV9sZW47CisKKwkvKiBTYW5pdHkgY2hlY2ssIG1heGltdW0gaGVhZGVyIHNpemUgZm9yIFJBUjUgaXMgMk1CLiAqLworCWlmKGhkcl9zaXplID4gKDIgKiAxMDI0ICogMTAyNCkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiQmFzZSBibG9jayBoZWFkZXIgaXMgdG9vIGxhcmdlIik7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogQWRkaXRpb25hbCBzYW5pdHkgY2hlY2tzIHRvIHdlZWQgb3V0IGludmFsaWQgZmlsZXMuICovCisJaWYocmF3X2hkcl9zaXplID09IDAgfHwgaGRyX3NpemVfbGVuID09IDAgfHwKKwkJaGRyX3NpemUgPCBTTUFMTEVTVF9SQVI1X0JMT0NLX1NJWkUpCisJeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUb28gc21hbGwgYmxvY2sgZW5jb3VudGVyZWQgKCV6dSBieXRlcykiLAorCQkgICAgcmF3X2hkcl9zaXplKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBSZWFkIHRoZSB3aG9sZSBoZWFkZXIgZGF0YSBpbnRvIG1lbW9yeSwgbWF4aW11bSBtZW1vcnkgdXNlIGhlcmUgaXMKKwkgKiAyTUIuICovCisJaWYoIXJlYWRfYWhlYWQoYSwgaGRyX3NpemUsICZwKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJLyogVmVyaWZ5IHRoZSBDUkMzMiBvZiB0aGUgaGVhZGVyIGRhdGEuICovCisJY29tcHV0ZWRfY3JjID0gKHVpbnQzMl90KSBjcmMzMigwLCBwLCAoaW50KSBoZHJfc2l6ZSk7CisJaWYoY29tcHV0ZWRfY3JjICE9IGhkcl9jcmMpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiSGVhZGVyIENSQyBlcnJvciIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIElmIHRoZSBjaGVja3N1bSBpcyBPSywgd2UgcHJvY2VlZCB3aXRoIHBhcnNpbmcuICovCisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIGhkcl9zaXplX2xlbikpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmaGVhZGVyX2lkLCBOVUxMKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZoZWFkZXJfZmxhZ3MsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlyYXItPmdlbmVyaWMuc3BsaXRfYWZ0ZXIgPSAoaGVhZGVyX2ZsYWdzICYgSEZMX1NQTElUX0FGVEVSKSA+IDA7CisJcmFyLT5nZW5lcmljLnNwbGl0X2JlZm9yZSA9IChoZWFkZXJfZmxhZ3MgJiBIRkxfU1BMSVRfQkVGT1JFKSA+IDA7CisJcmFyLT5nZW5lcmljLnNpemUgPSAoaW50KWhkcl9zaXplOworCXJhci0+Z2VuZXJpYy5sYXN0X2hlYWRlcl9pZCA9IChpbnQpaGVhZGVyX2lkOworCXJhci0+bWFpbi5lbmRhcmMgPSAwOworCisJLyogVGhvc2UgYXJlIHBvc3NpYmxlIGhlYWRlciBpZHMgaW4gUkFSdjUuICovCisJc3dpdGNoKGhlYWRlcl9pZCkgeworCQljYXNlIEhFQURfTUFJTjoKKwkJCXJldCA9IHByb2Nlc3NfaGVhZF9tYWluKGEsIHJhciwgZW50cnksIGhlYWRlcl9mbGFncyk7CisKKwkJCS8qIE1haW4gaGVhZGVyIGRvZXNuJ3QgaGF2ZSBhbnkgZmlsZXMgaW4gaXQsIHNvIGl0J3MKKwkJCSAqIHBvaW50bGVzcyB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4gUmV0cnkgdG8gbmV4dAorCQkJICogaGVhZGVyLCB3aGljaCBzaG91bGQgYmUgSEVBRF9GSUxFL0hFQURfU0VSVklDRS4gKi8KKwkJCWlmKHJldCA9PSBBUkNISVZFX09LKQorCQkJCXJldHVybiBBUkNISVZFX1JFVFJZOworCisJCQlyZXR1cm4gcmV0OworCQljYXNlIEhFQURfU0VSVklDRToKKwkJCXJldCA9IHByb2Nlc3NfaGVhZF9zZXJ2aWNlKGEsIHJhciwgZW50cnksIGhlYWRlcl9mbGFncyk7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIEhFQURfRklMRToKKwkJCXJldCA9IHByb2Nlc3NfaGVhZF9maWxlKGEsIHJhciwgZW50cnksIGhlYWRlcl9mbGFncyk7CisJCQlyZXR1cm4gcmV0OworCQljYXNlIEhFQURfQ1JZUFQ6CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJFbmNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQljYXNlIEhFQURfRU5EQVJDOgorCQkJcmFyLT5tYWluLmVuZGFyYyA9IDE7CisKKwkJCS8qIEFmdGVyIGVuY291bnRlcmluZyBhbiBlbmQgb2YgZmlsZSBtYXJrZXIsIHdlIG5lZWQKKwkJCSAqIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uIGlmIHRoaXMgYXJjaGl2ZSBpcworCQkJICogY29udGludWVkIGluIGFub3RoZXIgZmlsZSAoaS5lLiBpcyBpdCBwYXJ0MDEucmFyOgorCQkJICogaXMgdGhlcmUgYSBwYXJ0MDIucmFyPykgKi8KKwkJCWlmKHJhci0+bWFpbi52b2x1bWUpIHsKKwkJCQkvKiBJbiBjYXNlIHRoZXJlIGlzIHBhcnQwMi5yYXIsIHBvc2l0aW9uIHRoZQorCQkJCSAqIHJlYWQgcG9pbnRlciBpbiBhIHByb3BlciBwbGFjZSwgc28gd2UgY2FuCisJCQkJICogcmVzdW1lIHBhcnNpbmcuICovCisJCQkJcmV0ID0gc2Nhbl9mb3Jfc2lnbmF0dXJlKGEpOworCQkJCWlmKHJldCA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJCQl9IGVsc2UgeworCQkJCQlpZihyYXItPnZvbC5leHBlY3RlZF92b2xfbm8gPT0KKwkJCQkJICAgIFVJTlRfTUFYKSB7CisJCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCQkJICAgICJIZWFkZXIgZXJyb3IiKTsKKwkJCQkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCQkJfQorCisJCQkJCXJhci0+dm9sLmV4cGVjdGVkX3ZvbF9ubyA9CisJCQkJCSAgICByYXItPm1haW4udm9sX25vICsgMTsKKwkJCQkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCQl9CisJCWNhc2UgSEVBRF9NQVJLOgorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQlkZWZhdWx0OgorCQkJaWYoKGhlYWRlcl9mbGFncyAmIEhGTF9TS0lQX0lGX1VOS05PV04pID09IDApIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIkhlYWRlciB0eXBlIGVycm9yIik7CisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQl9IGVsc2UgeworCQkJCS8qIElmIHRoZSBibG9jayBpcyBtYXJrZWQgYXMgJ3NraXAgaWYgdW5rbm93bicsCisJCQkJICogZG8gYXMgdGhlIGZsYWcgc2F5czogc2tpcCB0aGUgYmxvY2sKKwkJCQkgKiBpbnN0ZWFkIG9uIGZhaWxpbmcgb24gaXQuICovCisJCQkJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7CisJCQl9CisJfQorCisjaWYgIWRlZmluZWQgV0lOMzIKKwkvLyBOb3QgcmVhY2hlZC4KKwlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCSAgICAiSW50ZXJuYWwgdW5wYWNrZXIgZXJyb3IiKTsKKwlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHNraXBfYmFzZV9ibG9jayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwkvKiBDcmVhdGUgYSBuZXcgbG9jYWwgYXJjaGl2ZV9lbnRyeSBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIG9wZXJhdGVkIG9uCisJICogYnkgaGVhZGVyIHJlYWRlcjsgb3BlcmF0aW9ucyBvbiB0aGlzIGFyY2hpdmVfZW50cnkgd2lsbCBiZSBkaXNjYXJkZWQuCisJICovCisJc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5ID0gYXJjaGl2ZV9lbnRyeV9uZXcoKTsKKwlyZXQgPSBwcm9jZXNzX2Jhc2VfYmxvY2soYSwgZW50cnkpOworCisJLyogRGlzY2FyZCBvcGVyYXRpb25zIG9uIHRoaXMgYXJjaGl2ZV9lbnRyeSBzdHJ1Y3R1cmUuICovCisJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5KTsKKwlpZihyZXQgPT0gQVJDSElWRV9GQVRBTCkKKwkJcmV0dXJuIHJldDsKKworCWlmKHJhci0+Z2VuZXJpYy5sYXN0X2hlYWRlcl9pZCA9PSAyICYmIHJhci0+Z2VuZXJpYy5zcGxpdF9iZWZvcmUgPiAwKQorCQlyZXR1cm4gQVJDSElWRV9PSzsKKworCWlmKHJldCA9PSBBUkNISVZFX09LKQorCQlyZXR1cm4gQVJDSElWRV9SRVRSWTsKKwllbHNlCisJCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9yZWFkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisJaW50IHJldDsKKworCWlmKHJhci0+aGVhZGVyX2luaXRpYWxpemVkID09IDApIHsKKwkJaW5pdF9oZWFkZXIoYSk7CisJCXJhci0+aGVhZGVyX2luaXRpYWxpemVkID0gMTsKKwl9CisKKwlpZihyYXItPnNraXBwZWRfbWFnaWMgPT0gMCkgeworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcikpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQlyYXItPnNraXBwZWRfbWFnaWMgPSAxOworCX0KKworCWRvIHsKKwkJcmV0ID0gcHJvY2Vzc19iYXNlX2Jsb2NrKGEsIGVudHJ5KTsKKwl9IHdoaWxlKHJldCA9PSBBUkNISVZFX1JFVFJZIHx8CisJCQkocmFyLT5tYWluLmVuZGFyYyA+IDAgJiYgcmV0ID09IEFSQ0hJVkVfT0spKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdW5wYWNrKHN0cnVjdCByYXI1KiByYXIpIHsKKwlyYXItPmZpbGUuY2FsY3VsYXRlZF9jcmMzMiA9IDA7CisJaW5pdF93aW5kb3dfbWFzayhyYXIpOworCisJZnJlZShyYXItPmNzdGF0ZS53aW5kb3dfYnVmKTsKKwlmcmVlKHJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1Zik7CisKKwlpZihyYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSA+IDApIHsKKwkJcmFyLT5jc3RhdGUud2luZG93X2J1ZiA9IGNhbGxvYygxLCByYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSk7CisJCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiA9IGNhbGxvYygxLCByYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSk7CisJfSBlbHNlIHsKKwkJcmFyLT5jc3RhdGUud2luZG93X2J1ZiA9IE5VTEw7CisJCXJhci0+Y3N0YXRlLmZpbHRlcmVkX2J1ZiA9IE5VTEw7CisJfQorCisJcmFyLT5jc3RhdGUud3JpdGVfcHRyID0gMDsKKwlyYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciA9IDA7CisKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmJkLCAwLCBzaXplb2YocmFyLT5jc3RhdGUuYmQpKTsKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmxkLCAwLCBzaXplb2YocmFyLT5jc3RhdGUubGQpKTsKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmRkLCAwLCBzaXplb2YocmFyLT5jc3RhdGUuZGQpKTsKKwltZW1zZXQoJnJhci0+Y3N0YXRlLmxkZCwgMCwgc2l6ZW9mKHJhci0+Y3N0YXRlLmxkZCkpOworCW1lbXNldCgmcmFyLT5jc3RhdGUucmQsIDAsIHNpemVvZihyYXItPmNzdGF0ZS5yZCkpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY3JjKHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHVpbnQ4X3QqIHAsIHNpemVfdCB0b19yZWFkKSB7CisgICAgaW50IHZlcmlmeV9jcmM7CisKKwlpZihyYXItPnNraXBfbW9kZSkgeworI2lmIGRlZmluZWQgQ0hFQ0tfQ1JDX09OX1NPTElEX1NLSVAKKwkJdmVyaWZ5X2NyYyA9IDE7CisjZWxzZQorCQl2ZXJpZnlfY3JjID0gMDsKKyNlbmRpZgorCX0gZWxzZQorCQl2ZXJpZnlfY3JjID0gMTsKKworCWlmKHZlcmlmeV9jcmMpIHsKKwkJLyogRG9uJ3QgdXBkYXRlIENSQzMyIGlmIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSB0aGUKKwkJICogYHN0b3JlZF9jcmMzMmAgaW5mbyBmaWxsZWQgaW4uICovCisJCWlmKHJhci0+ZmlsZS5zdG9yZWRfY3JjMzIgPiAwKSB7CisJCQlyYXItPmZpbGUuY2FsY3VsYXRlZF9jcmMzMiA9CisJCQkJY3JjMzIocmFyLT5maWxlLmNhbGN1bGF0ZWRfY3JjMzIsIHAsIHRvX3JlYWQpOworCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhlIGZpbGUgdXNlcyBhbiBvcHRpb25hbCBCTEFLRTJzcCBjaGVja3N1bQorCQkgKiBhbGdvcml0aG0uICovCisJCWlmKHJhci0+ZmlsZS5oYXNfYmxha2UyID4gMCkgeworCQkJLyogUmV0dXJuIHZhbHVlIG9mIHRoZSBgdXBkYXRlYCBmdW5jdGlvbiBpcyBhbHdheXMgMCwKKwkJCSAqIHNvIHdlIGNhbiBleHBsaWNpdGx5IGlnbm9yZSBpdCBoZXJlLiAqLworCQkJKHZvaWQpIGJsYWtlMnNwX3VwZGF0ZSgmcmFyLT5maWxlLmIyc3RhdGUsIHAsIHRvX3JlYWQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNyZWF0ZV9kZWNvZGVfdGFibGVzKHVpbnQ4X3QqIGJpdF9sZW5ndGgsCisgICAgc3RydWN0IGRlY29kZV90YWJsZSogdGFibGUsIGludCBzaXplKQoreworCWludCBjb2RlLCB1cHBlcl9saW1pdCA9IDAsIGksIGxjWzE2XTsKKwl1aW50MzJfdCBkZWNvZGVfcG9zX2Nsb25lW3JhcjVfY291bnRvZih0YWJsZS0+ZGVjb2RlX3BvcyldOworCXNzaXplX3QgY3VyX2xlbiwgcXVpY2tfZGF0YV9zaXplOworCisJbWVtc2V0KCZsYywgMCwgc2l6ZW9mKGxjKSk7CisJbWVtc2V0KHRhYmxlLT5kZWNvZGVfbnVtLCAwLCBzaXplb2YodGFibGUtPmRlY29kZV9udW0pKTsKKwl0YWJsZS0+c2l6ZSA9IHNpemU7CisJdGFibGUtPnF1aWNrX2JpdHMgPSBzaXplID09IEhVRkZfTkMgPyAxMCA6IDc7CisKKwlmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJbGNbYml0X2xlbmd0aFtpXSAmIDE1XSsrOworCX0KKworCWxjWzBdID0gMDsKKwl0YWJsZS0+ZGVjb2RlX3Bvc1swXSA9IDA7CisJdGFibGUtPmRlY29kZV9sZW5bMF0gPSAwOworCisJZm9yKGkgPSAxOyBpIDwgMTY7IGkrKykgeworCQl1cHBlcl9saW1pdCArPSBsY1tpXTsKKworCQl0YWJsZS0+ZGVjb2RlX2xlbltpXSA9IHVwcGVyX2xpbWl0IDw8ICgxNiAtIGkpOworCQl0YWJsZS0+ZGVjb2RlX3Bvc1tpXSA9IHRhYmxlLT5kZWNvZGVfcG9zW2kgLSAxXSArIGxjW2kgLSAxXTsKKworCQl1cHBlcl9saW1pdCA8PD0gMTsKKwl9CisKKwltZW1jcHkoZGVjb2RlX3Bvc19jbG9uZSwgdGFibGUtPmRlY29kZV9wb3MsIHNpemVvZihkZWNvZGVfcG9zX2Nsb25lKSk7CisKKwlmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJdWludDhfdCBjbGVuID0gYml0X2xlbmd0aFtpXSAmIDE1OworCQlpZihjbGVuID4gMCkgeworCQkJaW50IGxhc3RfcG9zID0gZGVjb2RlX3Bvc19jbG9uZVtjbGVuXTsKKwkJCXRhYmxlLT5kZWNvZGVfbnVtW2xhc3RfcG9zXSA9IGk7CisJCQlkZWNvZGVfcG9zX2Nsb25lW2NsZW5dKys7CisJCX0KKwl9CisKKwlxdWlja19kYXRhX3NpemUgPSAoaW50NjRfdCkxIDw8IHRhYmxlLT5xdWlja19iaXRzOworCWN1cl9sZW4gPSAxOworCWZvcihjb2RlID0gMDsgY29kZSA8IHF1aWNrX2RhdGFfc2l6ZTsgY29kZSsrKSB7CisJCWludCBiaXRfZmllbGQgPSBjb2RlIDw8ICgxNiAtIHRhYmxlLT5xdWlja19iaXRzKTsKKwkJaW50IGRpc3QsIHBvczsKKworCQl3aGlsZShjdXJfbGVuIDwgcmFyNV9jb3VudG9mKHRhYmxlLT5kZWNvZGVfbGVuKSAmJgorCQkJCWJpdF9maWVsZCA+PSB0YWJsZS0+ZGVjb2RlX2xlbltjdXJfbGVuXSkgeworCQkJY3VyX2xlbisrOworCQl9CisKKwkJdGFibGUtPnF1aWNrX2xlbltjb2RlXSA9ICh1aW50OF90KSBjdXJfbGVuOworCisJCWRpc3QgPSBiaXRfZmllbGQgLSB0YWJsZS0+ZGVjb2RlX2xlbltjdXJfbGVuIC0gMV07CisJCWRpc3QgPj49ICgxNiAtIGN1cl9sZW4pOworCisJCXBvcyA9IHRhYmxlLT5kZWNvZGVfcG9zW2N1cl9sZW4gJiAxNV0gKyBkaXN0OworCQlpZihjdXJfbGVuIDwgcmFyNV9jb3VudG9mKHRhYmxlLT5kZWNvZGVfcG9zKSAmJiBwb3MgPCBzaXplKSB7CisJCQl0YWJsZS0+cXVpY2tfbnVtW2NvZGVdID0gdGFibGUtPmRlY29kZV9udW1bcG9zXTsKKwkJfSBlbHNlIHsKKwkJCXRhYmxlLT5xdWlja19udW1bY29kZV0gPSAwOworCQl9CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX251bWJlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgZGVjb2RlX3RhYmxlKiB0YWJsZSwKKyAgICBjb25zdCB1aW50OF90KiBwLCB1aW50MTZfdCogbnVtKQoreworCWludCBpLCBiaXRzLCBkaXN0OworCXVpbnQxNl90IGJpdGZpZWxkOworCXVpbnQzMl90IHBvczsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18xNihyYXIsIHAsICZiaXRmaWVsZCkpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCWJpdGZpZWxkICY9IDB4ZmZmZTsKKworCWlmKGJpdGZpZWxkIDwgdGFibGUtPmRlY29kZV9sZW5bdGFibGUtPnF1aWNrX2JpdHNdKSB7CisJCWludCBjb2RlID0gYml0ZmllbGQgPj4gKDE2IC0gdGFibGUtPnF1aWNrX2JpdHMpOworCQlza2lwX2JpdHMocmFyLCB0YWJsZS0+cXVpY2tfbGVuW2NvZGVdKTsKKwkJKm51bSA9IHRhYmxlLT5xdWlja19udW1bY29kZV07CisJCXJldHVybiBBUkNISVZFX09LOworCX0KKworCWJpdHMgPSAxNTsKKworCWZvcihpID0gdGFibGUtPnF1aWNrX2JpdHMgKyAxOyBpIDwgMTU7IGkrKykgeworCQlpZihiaXRmaWVsZCA8IHRhYmxlLT5kZWNvZGVfbGVuW2ldKSB7CisJCQliaXRzID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc2tpcF9iaXRzKHJhciwgYml0cyk7CisKKwlkaXN0ID0gYml0ZmllbGQgLSB0YWJsZS0+ZGVjb2RlX2xlbltiaXRzIC0gMV07CisJZGlzdCA+Pj0gKDE2IC0gYml0cyk7CisJcG9zID0gdGFibGUtPmRlY29kZV9wb3NbYml0c10gKyBkaXN0OworCisJaWYocG9zID49IHRhYmxlLT5zaXplKQorCQlwb3MgPSAwOworCisJKm51bSA9IHRhYmxlLT5kZWNvZGVfbnVtW3Bvc107CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIFJlYWRzIGFuZCBwYXJzZXMgSHVmZm1hbiB0YWJsZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jay4gKi8KK3N0YXRpYyBpbnQgcGFyc2VfdGFibGVzKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisgICAgY29uc3QgdWludDhfdCogcCkKK3sKKwlpbnQgcmV0LCB2YWx1ZSwgaSwgdywgaWR4ID0gMDsKKwl1aW50OF90IGJpdF9sZW5ndGhbSFVGRl9CQ10sCisJCXRhYmxlW0hVRkZfVEFCTEVfU0laRV0sCisJCW5pYmJsZV9tYXNrID0gMHhGMCwKKwkJbmliYmxlX3NoaWZ0ID0gNDsKKworCWVudW0geyBFU0NBUEUgPSAxNSB9OworCisJLyogVGhlIGRhdGEgZm9yIHRhYmxlIGdlbmVyYXRpb24gaXMgY29tcHJlc3NlZCB1c2luZyBhIHNpbXBsZSBSTEUtbGlrZQorCSAqIGFsZ29yaXRobSB3aGVuIHN0b3JpbmcgemVyb2VzLCBzbyB3ZSBuZWVkIHRvIHVucGFjayBpdCBmaXJzdC4gKi8KKwlmb3IodyA9IDAsIGkgPSAwOyB3IDwgSFVGRl9CQzspIHsKKwkJaWYoaSA+PSByYXItPmNzdGF0ZS5jdXJfYmxvY2tfc2l6ZSkgeworCQkJLyogVHJ1bmNhdGVkIGRhdGEsIGNhbid0IGNvbnRpbnVlLiAqLworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiVHJ1bmNhdGVkIGRhdGEgaW4gaHVmZm1hbiB0YWJsZXMiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJdmFsdWUgPSAocFtpXSAmIG5pYmJsZV9tYXNrKSA+PiBuaWJibGVfc2hpZnQ7CisKKwkJaWYobmliYmxlX21hc2sgPT0gMHgwRikKKwkJCSsraTsKKworCQluaWJibGVfbWFzayBePSAweEZGOworCQluaWJibGVfc2hpZnQgXj0gNDsKKworCQkvKiBWYWx1ZXMgc21hbGxlciB0aGFuIDE1IGlzIGRhdGEsIHNvIHdlIHdyaXRlIGl0IGRpcmVjdGx5LgorCQkgKiBWYWx1ZSAxNSBpcyBhIGZsYWcgdGVsbGluZyB1cyB0aGF0IHdlIG5lZWQgdG8gdW5wYWNrIG1vcmUKKwkJICogYnl0ZXMuICovCisJCWlmKHZhbHVlID09IEVTQ0FQRSkgeworCQkJdmFsdWUgPSAocFtpXSAmIG5pYmJsZV9tYXNrKSA+PiBuaWJibGVfc2hpZnQ7CisJCQlpZihuaWJibGVfbWFzayA9PSAweDBGKQorCQkJCSsraTsKKwkJCW5pYmJsZV9tYXNrIF49IDB4RkY7CisJCQluaWJibGVfc2hpZnQgXj0gNDsKKworCQkJaWYodmFsdWUgPT0gMCkgeworCQkJCS8qIFdlIHNvbWV0aW1lcyBuZWVkIHRvIHdyaXRlIHRoZSBhY3R1YWwgdmFsdWUKKwkJCQkgKiBvZiAxNSwgc28gdGhpcyBjYXNlIGhhbmRsZXMgdGhhdC4gKi8KKwkJCQliaXRfbGVuZ3RoW3crK10gPSBFU0NBUEU7CisJCQl9IGVsc2UgeworCQkJCWludCBrOworCisJCQkJLyogRmlsbCB6ZXJvZXMuICovCisJCQkJZm9yKGsgPSAwOyAoayA8IHZhbHVlICsgMikgJiYgKHcgPCBIVUZGX0JDKTsKKwkJCQkgICAgaysrKSB7CisJCQkJCWJpdF9sZW5ndGhbdysrXSA9IDA7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJYml0X2xlbmd0aFt3KytdID0gdmFsdWU7CisJCX0KKwl9CisKKwlyYXItPmJpdHMuaW5fYWRkciA9IGk7CisJcmFyLT5iaXRzLmJpdF9hZGRyID0gbmliYmxlX3NoaWZ0IF4gNDsKKworCXJldCA9IGNyZWF0ZV9kZWNvZGVfdGFibGVzKGJpdF9sZW5ndGgsICZyYXItPmNzdGF0ZS5iZCwgSFVGRl9CQyk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiRGVjb2RpbmcgaHVmZm1hbiB0YWJsZXMgZmFpbGVkIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWZvcihpID0gMDsgaSA8IEhVRkZfVEFCTEVfU0laRTspIHsKKwkJdWludDE2X3QgbnVtOworCisJCWlmKChyYXItPmJpdHMuaW5fYWRkciArIDYpID49IHJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplKSB7CisJCQkvKiBUcnVuY2F0ZWQgZGF0YSwgY2FuJ3QgY29udGludWUuICovCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJUcnVuY2F0ZWQgZGF0YSBpbiBodWZmbWFuIHRhYmxlcyAoIzIpIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCXJldCA9IGRlY29kZV9udW1iZXIoYSwgJnJhci0+Y3N0YXRlLmJkLCBwLCAmbnVtKTsKKwkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIkRlY29kaW5nIGh1ZmZtYW4gdGFibGVzIGZhaWxlZCIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKworCQlpZihudW0gPCAxNikgeworCQkJLyogMC4uMTU6IHN0b3JlIGRpcmVjdGx5ICovCisJCQl0YWJsZVtpXSA9ICh1aW50OF90KSBudW07CisJCQlpKys7CisJCX0gZWxzZSBpZihudW0gPCAxOCkgeworCQkJLyogMTYuLjE3OiByZXBlYXQgcHJldmlvdXMgY29kZSAqLworCQkJdWludDE2X3QgbjsKKworCQkJaWYoQVJDSElWRV9PSyAhPSByZWFkX2JpdHNfMTYocmFyLCBwLCAmbikpCisJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCQlpZihudW0gPT0gMTYpIHsKKwkJCQluID4+PSAxMzsKKwkJCQluICs9IDM7CisJCQkJc2tpcF9iaXRzKHJhciwgMyk7CisJCQl9IGVsc2UgeworCQkJCW4gPj49IDk7CisJCQkJbiArPSAxMTsKKwkJCQlza2lwX2JpdHMocmFyLCA3KTsKKwkJCX0KKworCQkJaWYoaSA+IDApIHsKKwkJCQl3aGlsZShuLS0gPiAwICYmIGkgPCBIVUZGX1RBQkxFX1NJWkUpIHsKKwkJCQkJdGFibGVbaV0gPSB0YWJsZVtpIC0gMV07CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSAgICAiVW5leHBlY3RlZCBlcnJvciB3aGVuIGRlY29kaW5nICIKKwkJCQkgICAgImh1ZmZtYW4gdGFibGVzIik7CisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBvdGhlciBjb2RlczogZmlsbCB3aXRoIHplcm9lcyBgbmAgdGltZXMgKi8KKwkJCXVpbnQxNl90IG47CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9iaXRzXzE2KHJhciwgcCwgJm4pKQorCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQkJaWYobnVtID09IDE4KSB7CisJCQkJbiA+Pj0gMTM7CisJCQkJbiArPSAzOworCQkJCXNraXBfYml0cyhyYXIsIDMpOworCQkJfSBlbHNlIHsKKwkJCQluID4+PSA5OworCQkJCW4gKz0gMTE7CisJCQkJc2tpcF9iaXRzKHJhciwgNyk7CisJCQl9CisKKwkJCXdoaWxlKG4tLSA+IDAgJiYgaSA8IEhVRkZfVEFCTEVfU0laRSkKKwkJCQl0YWJsZVtpKytdID0gMDsKKwkJfQorCX0KKworCXJldCA9IGNyZWF0ZV9kZWNvZGVfdGFibGVzKCZ0YWJsZVtpZHhdLCAmcmFyLT5jc3RhdGUubGQsIEhVRkZfTkMpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgICJGYWlsZWQgdG8gY3JlYXRlIGxpdGVyYWwgdGFibGUiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWR4ICs9IEhVRkZfTkM7CisKKwlyZXQgPSBjcmVhdGVfZGVjb2RlX3RhYmxlcygmdGFibGVbaWR4XSwgJnJhci0+Y3N0YXRlLmRkLCBIVUZGX0RDKTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJGYWlsZWQgdG8gY3JlYXRlIGRpc3RhbmNlIHRhYmxlIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlkeCArPSBIVUZGX0RDOworCisJcmV0ID0gY3JlYXRlX2RlY29kZV90YWJsZXMoJnRhYmxlW2lkeF0sICZyYXItPmNzdGF0ZS5sZGQsIEhVRkZfTERDKTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJGYWlsZWQgdG8gY3JlYXRlIGxvd2VyIGJpdHMgb2YgZGlzdGFuY2VzIHRhYmxlIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlkeCArPSBIVUZGX0xEQzsKKworCXJldCA9IGNyZWF0ZV9kZWNvZGVfdGFibGVzKCZ0YWJsZVtpZHhdLCAmcmFyLT5jc3RhdGUucmQsIEhVRkZfUkMpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgcmVwZWF0aW5nIGRpc3RhbmNlcyB0YWJsZSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogUGFyc2VzIHRoZSBibG9jayBoZWFkZXIsIHZlcmlmaWVzIGl0cyBDUkMgYnl0ZSwgYW5kIHNhdmVzIHRoZSBoZWFkZXIKKyAqIGZpZWxkcyBpbnNpZGUgdGhlIGBoZHJgIHBvaW50ZXIuICovCitzdGF0aWMgaW50IHBhcnNlX2Jsb2NrX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBjb25zdCB1aW50OF90KiBwLAorICAgIHNzaXplX3QqIGJsb2NrX3NpemUsIHN0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciogaGRyKQoreworCXVpbnQ4X3QgY2FsY3VsYXRlZF9ja3N1bTsKKwltZW1jcHkoaGRyLCBwLCBzaXplb2Yoc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKSk7CisKKwlpZihiZl9ieXRlX2NvdW50KGhkcikgPiAyKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIlVuc3VwcG9ydGVkIGJsb2NrIGhlYWRlciBzaXplICh3YXMgJWQsIG1heCBpcyAyKSIsCisJCSAgICBiZl9ieXRlX2NvdW50KGhkcikpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgYml0IHJlYWRlciBpbnRlcmZhY2UgaW4gb3JkZXIgdG8gYmUgbW9yZQorCSAqIGZ1dHVyZS1wcm9vZi4gKi8KKwkqYmxvY2tfc2l6ZSA9IDA7CisJc3dpdGNoKGJmX2J5dGVfY291bnQoaGRyKSkgeworCQkvKiAxLWJ5dGUgYmxvY2sgc2l6ZSAqLworCQljYXNlIDA6CisJCQkqYmxvY2tfc2l6ZSA9ICooY29uc3QgdWludDhfdCopICZwWzJdOworCQkJYnJlYWs7CisKKwkJLyogMi1ieXRlIGJsb2NrIHNpemUgKi8KKwkJY2FzZSAxOgorCQkJKmJsb2NrX3NpemUgPSBhcmNoaXZlX2xlMTZkZWMoJnBbMl0pOworCQkJYnJlYWs7CisKKwkJLyogMy1ieXRlIGJsb2NrIHNpemUgKi8KKwkJY2FzZSAyOgorCQkJKmJsb2NrX3NpemUgPSBhcmNoaXZlX2xlMzJkZWMoJnBbMl0pOworCQkJKmJsb2NrX3NpemUgJj0gMHgwMEZGRkZGRjsKKwkJCWJyZWFrOworCisJCS8qIE90aGVyIGJsb2NrIHNpemVzIGFyZSBub3Qgc3VwcG9ydGVkLiBUaGlzIGNhc2UgaXMgbm90CisJCSAqIHJlYWNoZWQsIGJlY2F1c2Ugd2UgaGF2ZSBhbiAnaWYnIGd1YXJkIGJlZm9yZSB0aGUgc3dpdGNoCisJCSAqIHRoYXQgbWFrZXMgc3VyZSBvZiBpdC4gKi8KKwkJZGVmYXVsdDoKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIFZlcmlmeSB0aGUgYmxvY2sgaGVhZGVyIGNoZWNrc3VtLiAweDVBIGlzIGEgbWFnaWMgdmFsdWUgYW5kIGlzCisJICogYWx3YXlzICogY29uc3RhbnQuICovCisJY2FsY3VsYXRlZF9ja3N1bSA9IDB4NUEKKwkgICAgXiAodWludDhfdCkgaGRyLT5ibG9ja19mbGFnc191OAorCSAgICBeICh1aW50OF90KSAqYmxvY2tfc2l6ZQorCSAgICBeICh1aW50OF90KSAoKmJsb2NrX3NpemUgPj4gOCkKKwkgICAgXiAodWludDhfdCkgKCpibG9ja19zaXplID4+IDE2KTsKKworCWlmKGNhbGN1bGF0ZWRfY2tzdW0gIT0gaGRyLT5ibG9ja19ja3N1bSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJCbG9jayBjaGVja3N1bSBlcnJvcjogZ290IDB4JXgsIGV4cGVjdGVkIDB4JXgiLAorCQkgICAgaGRyLT5ibG9ja19ja3N1bSwgY2FsY3VsYXRlZF9ja3N1bSk7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIGZpbHRlciBwcm9jZXNzaW5nLiAqLworc3RhdGljIGludCBwYXJzZV9maWx0ZXJfZGF0YShzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB1aW50OF90KiBwLAorICAgIHVpbnQzMl90KiBmaWx0ZXJfZGF0YSkKK3sKKwlpbnQgaSwgYnl0ZXM7CisJdWludDMyX3QgZGF0YSA9IDA7CisKKwlpZihBUkNISVZFX09LICE9IHJlYWRfY29uc3VtZV9iaXRzKHJhciwgcCwgMiwgJmJ5dGVzKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJYnl0ZXMrKzsKKworCWZvcihpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHsKKwkJdWludDE2X3QgYnl0ZTsKKworCQlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18xNihyYXIsIHAsICZieXRlKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJLyogQ2FzdCB0byB1aW50MzJfdCB3aWxsIGVuc3VyZSB0aGUgc2hpZnQgb3BlcmF0aW9uIHdpbGwgbm90CisJCSAqIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3VsdC4gKi8KKwkJZGF0YSArPSAoKHVpbnQzMl90KSBieXRlID4+IDgpIDw8IChpICogOCk7CisJCXNraXBfYml0cyhyYXIsIDgpOworCX0KKworCSpmaWx0ZXJfZGF0YSA9IGRhdGE7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIHNhbml0eSBjaGVja2luZy4gKi8KK3N0YXRpYyBpbnQgaXNfdmFsaWRfZmlsdGVyX2Jsb2NrX3N0YXJ0KHN0cnVjdCByYXI1KiByYXIsCisgICAgdWludDMyX3Qgc3RhcnQpCit7CisJY29uc3QgaW50NjRfdCBibG9ja19zdGFydCA9IChzc2l6ZV90KSBzdGFydCArIHJhci0+Y3N0YXRlLndyaXRlX3B0cjsKKwljb25zdCBpbnQ2NF90IGxhc3RfYnMgPSByYXItPmNzdGF0ZS5sYXN0X2Jsb2NrX3N0YXJ0OworCWNvbnN0IHNzaXplX3QgbGFzdF9ibCA9IHJhci0+Y3N0YXRlLmxhc3RfYmxvY2tfbGVuZ3RoOworCisJaWYobGFzdF9icyA9PSAwIHx8IGxhc3RfYmwgPT0gMCkgeworCQkvKiBXZSBkaWRuJ3QgaGF2ZSBhbnkgZmlsdGVycyB5ZXQsIHNvIGFjY2VwdCB0aGlzIG9mZnNldC4gKi8KKwkJcmV0dXJuIDE7CisJfQorCisJaWYoYmxvY2tfc3RhcnQgPj0gbGFzdF9icyArIGxhc3RfYmwpIHsKKwkJLyogQ3VycmVudCBvZmZzZXQgaXMgYmlnZ2VyIHRoYW4gbGFzdCBibG9jaydzIGVuZCBvZmZzZXQsIHNvCisJCSAqIGFjY2VwdCBjdXJyZW50IG9mZnNldC4gKi8KKwkJcmV0dXJuIDE7CisJfQorCisJLyogQW55IG90aGVyIGNhc2UgaXMgbm90IGEgbm9ybWFsIHNpdHVhdGlvbiBhbmQgd2Ugc2hvdWxkIGZhaWwuICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBmaWx0ZXIsIHJlYWQgaXRzIHBhcmFtZXRlcnMgZnJvbSB0aGUgaW5wdXQKKyAqIHN0cmVhbSBhbmQgYWRkIGl0IHRvIHRoZSBmaWx0ZXIgY29sbGVjdGlvbi4gKi8KK3N0YXRpYyBpbnQgcGFyc2VfZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGFyLCBjb25zdCB1aW50OF90KiBwKSB7CisJdWludDMyX3QgYmxvY2tfc3RhcnQsIGJsb2NrX2xlbmd0aDsKKwl1aW50MTZfdCBmaWx0ZXJfdHlwZTsKKwlzdHJ1Y3QgZmlsdGVyX2luZm8qIGZpbHQgPSBOVUxMOworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhcik7CisKKwkvKiBSZWFkIHRoZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gKi8KKwlpZihBUkNISVZFX09LICE9IHBhcnNlX2ZpbHRlcl9kYXRhKHJhciwgcCwgJmJsb2NrX3N0YXJ0KSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYoQVJDSElWRV9PSyAhPSBwYXJzZV9maWx0ZXJfZGF0YShyYXIsIHAsICZibG9ja19sZW5ndGgpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18xNihyYXIsIHAsICZmaWx0ZXJfdHlwZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWZpbHRlcl90eXBlID4+PSAxMzsKKwlza2lwX2JpdHMocmFyLCAzKTsKKworCS8qIFBlcmZvcm0gc29tZSBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgZmlsdGVyIHBhcmFtZXRlcnMuIE5vdGUgdGhhdCB3ZQorCSAqIGFsbG93IG9ubHkgREVMVEEsIEU4L0U5IGFuZCBBUk0gZmlsdGVycyBoZXJlLCBiZWNhdXNlIHJlc3Qgb2YKKwkgKiBmaWx0ZXJzIGFyZSBub3QgdXNlZCBpbiBSQVJ2NS4gKi8KKworCWlmKGJsb2NrX2xlbmd0aCA8IDQgfHwKKwkgICAgYmxvY2tfbGVuZ3RoID4gMHg0MDAwMDAgfHwKKwkgICAgZmlsdGVyX3R5cGUgPiBGSUxURVJfQVJNIHx8CisJICAgICFpc192YWxpZF9maWx0ZXJfYmxvY2tfc3RhcnQocmFyLCBibG9ja19zdGFydCkpCisJeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiSW52YWxpZCBmaWx0ZXIgZW5jb3VudGVyZWQiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogQWxsb2NhdGUgYSBuZXcgZmlsdGVyLiAqLworCWZpbHQgPSBhZGRfbmV3X2ZpbHRlcihyYXIpOworCWlmKGZpbHQgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgZmlsdGVyIGRlc2NyaXB0b3IuIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWZpbHQtPnR5cGUgPSBmaWx0ZXJfdHlwZTsKKwlmaWx0LT5ibG9ja19zdGFydCA9IHJhci0+Y3N0YXRlLndyaXRlX3B0ciArIGJsb2NrX3N0YXJ0OworCWZpbHQtPmJsb2NrX2xlbmd0aCA9IGJsb2NrX2xlbmd0aDsKKworCXJhci0+Y3N0YXRlLmxhc3RfYmxvY2tfc3RhcnQgPSBmaWx0LT5ibG9ja19zdGFydDsKKwlyYXItPmNzdGF0ZS5sYXN0X2Jsb2NrX2xlbmd0aCA9IGZpbHQtPmJsb2NrX2xlbmd0aDsKKworCS8qIFJlYWQgc29tZSBtb3JlIGRhdGEgaW4gY2FzZSB0aGlzIGlzIGEgREVMVEEgZmlsdGVyLiBPdGhlciBmaWx0ZXIKKwkgKiB0eXBlcyBkb24ndCByZXF1aXJlIGFueSBhZGRpdGlvbmFsIGRhdGEgb3ZlciB3aGF0IHdhcyBhbHJlYWR5CisJICogcmVhZC4gKi8KKwlpZihmaWx0ZXJfdHlwZSA9PSBGSUxURVJfREVMVEEpIHsKKwkJaW50IGNoYW5uZWxzOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9jb25zdW1lX2JpdHMocmFyLCBwLCA1LCAmY2hhbm5lbHMpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWZpbHQtPmNoYW5uZWxzID0gY2hhbm5lbHMgKyAxOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IGRlY29kZV9jb2RlX2xlbmd0aChzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB1aW50OF90KiBwLAorICAgIHVpbnQxNl90IGNvZGUpCit7CisJaW50IGxiaXRzLCBsZW5ndGggPSAyOworCWlmKGNvZGUgPCA4KSB7CisJCWxiaXRzID0gMDsKKwkJbGVuZ3RoICs9IGNvZGU7CisJfSBlbHNlIHsKKwkJbGJpdHMgPSBjb2RlIC8gNCAtIDE7CisJCWxlbmd0aCArPSAoNCB8IChjb2RlICYgMykpIDw8IGxiaXRzOworCX0KKworCWlmKGxiaXRzID4gMCkgeworCQlpbnQgYWRkOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9jb25zdW1lX2JpdHMocmFyLCBwLCBsYml0cywgJmFkZCkpCisJCQlyZXR1cm4gLTE7CisKKwkJbGVuZ3RoICs9IGFkZDsKKwl9CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgaW50IGNvcHlfc3RyaW5nKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIGludCBsZW4sIGludCBkaXN0KSB7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCWNvbnN0IHVpbnQ2NF90IGNtYXNrID0gcmFyLT5jc3RhdGUud2luZG93X21hc2s7CisJY29uc3QgdWludDY0X3Qgd3JpdGVfcHRyID0gcmFyLT5jc3RhdGUud3JpdGVfcHRyICsKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0OworCWludCBpOworCisJaWYgKHJhci0+Y3N0YXRlLndpbmRvd19idWYgPT0gTlVMTCkKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisKKwkvKiBUaGUgdW5wYWNrZXIgc3BlbmRzIG1vc3Qgb2YgdGhlIHRpbWUgaW4gdGhpcyBmdW5jdGlvbi4gSXQgd291bGQgYmUKKwkgKiBhIGdvb2QgaWRlYSB0byBpbnRyb2R1Y2Ugc29tZSBvcHRpbWl6YXRpb25zIGhlcmUuCisJICoKKwkgKiBKdXN0IHJlbWVtYmVyIHRoYXQgdGhpcyBsb29wIHRyZWF0cyBidWZmZXJzIHRoYXQgb3ZlcmxhcCBkaWZmZXJlbnRseQorCSAqIHRoYW4gYnVmZmVycyB0aGF0IGRvIG5vdCBvdmVybGFwLiBUaGlzIGlzIHdoeSBhIHNpbXBsZSBtZW1jcHkoMykKKwkgKiBjYWxsIHdpbGwgbm90IGJlIGVub3VnaC4gKi8KKworCWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWNvbnN0IHNzaXplX3Qgd3JpdGVfaWR4ID0gKHdyaXRlX3B0ciArIGkpICYgY21hc2s7CisJCWNvbnN0IHNzaXplX3QgcmVhZF9pZHggPSAod3JpdGVfcHRyICsgaSAtIGRpc3QpICYgY21hc2s7CisJCXJhci0+Y3N0YXRlLndpbmRvd19idWZbd3JpdGVfaWR4XSA9CisJCSAgICByYXItPmNzdGF0ZS53aW5kb3dfYnVmW3JlYWRfaWR4XTsKKwl9CisKKwlyYXItPmNzdGF0ZS53cml0ZV9wdHIgKz0gbGVuOworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IGRvX3VuY29tcHJlc3NfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgY29uc3QgdWludDhfdCogcCkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwl1aW50MTZfdCBudW07CisJaW50IHJldDsKKworCWNvbnN0IHVpbnQ2NF90IGNtYXNrID0gcmFyLT5jc3RhdGUud2luZG93X21hc2s7CisJY29uc3Qgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIgPSAmcmFyLT5sYXN0X2Jsb2NrX2hkcjsKKwljb25zdCB1aW50OF90IGJpdF9zaXplID0gMSArIGJmX2JpdF9zaXplKGhkcik7CisKKwl3aGlsZSgxKSB7CisJCWlmKHJhci0+Y3N0YXRlLndyaXRlX3B0ciAtIHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID4KKwkJICAgIChyYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSA+PiAxKSkgeworCQkJLyogRG9uJ3QgYWxsb3cgZ3Jvd2luZyBkYXRhIGJ5IG1vcmUgdGhhbiBoYWxmIG9mIHRoZQorCQkJICogd2luZG93IHNpemUgYXQgYSB0aW1lLiBJbiBzdWNoIGNhc2UsIGJyZWFrIHRoZSBsb29wOworCQkJICogIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udGludWUgcHJvY2Vzc2luZworCQkJICogIGZyb20gdGhpcyBtb21lbnQuICovCisJCQlicmVhazsKKwkJfQorCisJCWlmKHJhci0+Yml0cy5pbl9hZGRyID4gcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemUgLSAxIHx8CisJCSAgICAocmFyLT5iaXRzLmluX2FkZHIgPT0gcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemUgLSAxICYmCisJCSAgICByYXItPmJpdHMuYml0X2FkZHIgPj0gYml0X3NpemUpKQorCQl7CisJCQkvKiBJZiB0aGUgcHJvZ3JhbSBjb3VudGVyIGlzIGhlcmUsIGl0IG1lYW5zIHRoZQorCQkJICogZnVuY3Rpb24gaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIGJsb2NrLiAqLworCQkJcmFyLT5jc3RhdGUuYmxvY2tfcGFyc2luZ19maW5pc2hlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIERlY29kZSB0aGUgbmV4dCBsaXRlcmFsLiAqLworCQlpZihBUkNISVZFX09LICE9IGRlY29kZV9udW1iZXIoYSwgJnJhci0+Y3N0YXRlLmxkLCBwLCAmbnVtKSkgeworCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQl9CisKKwkJLyogTnVtIGhvbGRzIGEgZGVjb21wcmVzc2lvbiBsaXRlcmFsLCBvciAnY29tbWFuZCBjb2RlJy4KKwkJICoKKwkJICogLSBWYWx1ZXMgbG93ZXIgdGhhbiAyNTYgYXJlIGp1c3QgYnl0ZXMuIFRob3NlIGNvZGVzCisJCSAqICAgY2FuIGJlIHN0b3JlZCBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBkaXJlY3RseS4KKwkJICoKKwkJICogLSBDb2RlIDI1NiBkZWZpbmVzIGEgbmV3IGZpbHRlciwgd2hpY2ggaXMgbGF0ZXIgdXNlZCB0bworCQkgKiAgIHJhbnNmb3JtIHRoZSBkYXRhIGJsb2NrIGFjY29yZGluZ2x5IHRvIHRoZSBmaWx0ZXIgdHlwZS4KKwkJICogICBUaGUgZGF0YSBibG9jayBuZWVkcyB0byBiZSBmdWxseSB1bmNvbXByZXNzZWQgZmlyc3QuCisJCSAqCisJCSAqIC0gQ29kZSBiaWdnZXIgdGhhbiAyNTcgYW5kIHNtYWxsZXIgdGhhbiAyNjIgZGVmaW5lCisJCSAqICAgYSByZXBldGl0aW9uIHBhdHRlcm4gdGhhdCBzaG91bGQgYmUgY29waWVkIGZyb20KKwkJICogICBhbiBhbHJlYWR5IHVuY29tcHJlc3NlZCBjaHVuayBvZiBkYXRhLgorCQkgKi8KKworCQlpZihudW0gPCAyNTYpIHsKKwkJCS8qIERpcmVjdGx5IHN0b3JlIHRoZSBieXRlLiAqLworCQkJaW50NjRfdCB3cml0ZV9pZHggPSByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKworCQkJICAgIHJhci0+Y3N0YXRlLndyaXRlX3B0cisrOworCisJCQlyYXItPmNzdGF0ZS53aW5kb3dfYnVmW3dyaXRlX2lkeCAmIGNtYXNrXSA9CisJCQkgICAgKHVpbnQ4X3QpIG51bTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYobnVtID49IDI2MikgeworCQkJdWludDE2X3QgZGlzdF9zbG90OworCQkJaW50IGxlbiA9IGRlY29kZV9jb2RlX2xlbmd0aChyYXIsIHAsIG51bSAtIDI2MiksCisJCQkJZGJpdHMsCisJCQkJZGlzdCA9IDE7CisKKwkJCWlmKGxlbiA9PSAtMSkgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCQkJICAgICJGYWlsZWQgdG8gZGVjb2RlIHRoZSBjb2RlIGxlbmd0aCIpOworCisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQl9CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gZGVjb2RlX251bWJlcihhLCAmcmFyLT5jc3RhdGUuZGQsIHAsCisJCQkgICAgJmRpc3Rfc2xvdCkpCisJCQl7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJCQkgICAgIkZhaWxlZCB0byBkZWNvZGUgdGhlIGRpc3RhbmNlIHNsb3QiKTsKKworCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJfQorCisJCQlpZihkaXN0X3Nsb3QgPCA0KSB7CisJCQkJZGJpdHMgPSAwOworCQkJCWRpc3QgKz0gZGlzdF9zbG90OworCQkJfSBlbHNlIHsKKwkJCQlkYml0cyA9IGRpc3Rfc2xvdCAvIDIgLSAxOworCisJCQkJLyogQ2FzdCB0byB1aW50MzJfdCB3aWxsIG1ha2Ugc3VyZSB0aGUgc2hpZnQKKwkJCQkgKiBsZWZ0IG9wZXJhdGlvbiB3b24ndCBwcm9kdWNlIHVuZGVmaW5lZAorCQkJCSAqIHJlc3VsdC4gVGhlbiwgdGhlIHVpbnQzMl90IHR5cGUgd2lsbAorCQkJCSAqIGJlIGltcGxpY2l0bHkgY2FzdGVkIHRvIGludC4gKi8KKwkJCQlkaXN0ICs9ICh1aW50MzJfdCkgKDIgfAorCQkJCSAgICAoZGlzdF9zbG90ICYgMSkpIDw8IGRiaXRzOworCQkJfQorCisJCQlpZihkYml0cyA+IDApIHsKKwkJCQlpZihkYml0cyA+PSA0KSB7CisJCQkJCXVpbnQzMl90IGFkZCA9IDA7CisJCQkJCXVpbnQxNl90IGxvd19kaXN0OworCisJCQkJCWlmKGRiaXRzID4gNCkgeworCQkJCQkJaWYoQVJDSElWRV9PSyAhPSByZWFkX2JpdHNfMzIoCisJCQkJCQkgICAgcmFyLCBwLCAmYWRkKSkgeworCQkJCQkJCS8qIFJldHVybiBFT0YgaWYgd2UKKwkJCQkJCQkgKiBjYW4ndCByZWFkIG1vcmUKKwkJCQkJCQkgKiBkYXRhLiAqLworCQkJCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJCQkJCX0KKworCQkJCQkJc2tpcF9iaXRzKHJhciwgZGJpdHMgLSA0KTsKKwkJCQkJCWFkZCA9IChhZGQgPj4gKAorCQkJCQkJICAgIDM2IC0gZGJpdHMpKSA8PCA0OworCQkJCQkJZGlzdCArPSBhZGQ7CisJCQkJCX0KKworCQkJCQlpZihBUkNISVZFX09LICE9IGRlY29kZV9udW1iZXIoYSwKKwkJCQkJICAgICZyYXItPmNzdGF0ZS5sZGQsIHAsICZsb3dfZGlzdCkpCisJCQkJCXsKKwkJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJCQkJCSAgICAiRmFpbGVkIHRvIGRlY29kZSB0aGUgIgorCQkJCQkJICAgICJkaXN0YW5jZSBzbG90Iik7CisKKwkJCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJCQl9CisKKwkJCQkJaWYoZGlzdCA+PSBJTlRfTUFYIC0gbG93X2Rpc3QgLSAxKSB7CisJCQkJCQkvKiBUaGlzIG9ubHkgaGFwcGVucyBpbgorCQkJCQkJICogaW52YWxpZCBhcmNoaXZlcy4gKi8KKwkJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJCQkgICAgIkRpc3RhbmNlIHBvaW50ZXIgIgorCQkJCQkJICAgICJvdmVyZmxvdyIpOworCQkJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQkJCX0KKworCQkJCQlkaXN0ICs9IGxvd19kaXN0OworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGRiaXRzIGlzIG9uZSBvZiBbMCwxLDIsM10gKi8KKwkJCQkJaW50IGFkZDsKKworCQkJCQlpZihBUkNISVZFX09LICE9IHJlYWRfY29uc3VtZV9iaXRzKHJhciwKKwkJCQkJICAgICBwLCBkYml0cywgJmFkZCkpIHsKKwkJCQkJCS8qIFJldHVybiBFT0YgaWYgd2UgY2FuJ3QgcmVhZAorCQkJCQkJICogbW9yZSBkYXRhLiAqLworCQkJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkJCQl9CisKKwkJCQkJZGlzdCArPSBhZGQ7CisJCQkJfQorCQkJfQorCisJCQlpZihkaXN0ID4gMHgxMDApIHsKKwkJCQlsZW4rKzsKKworCQkJCWlmKGRpc3QgPiAweDIwMDApIHsKKwkJCQkJbGVuKys7CisKKwkJCQkJaWYoZGlzdCA+IDB4NDAwMDApIHsKKwkJCQkJCWxlbisrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlkaXN0X2NhY2hlX3B1c2gocmFyLCBkaXN0KTsKKwkJCXJhci0+Y3N0YXRlLmxhc3RfbGVuID0gbGVuOworCisJCQlpZihBUkNISVZFX09LICE9IGNvcHlfc3RyaW5nKGEsIGxlbiwgZGlzdCkpCisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYobnVtID09IDI1NikgeworCQkJLyogQ3JlYXRlIGEgZmlsdGVyLiAqLworCQkJcmV0ID0gcGFyc2VfZmlsdGVyKGEsIHApOworCQkJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCQkJcmV0dXJuIHJldDsKKworCQkJY29udGludWU7CisJCX0gZWxzZSBpZihudW0gPT0gMjU3KSB7CisJCQlpZihyYXItPmNzdGF0ZS5sYXN0X2xlbiAhPSAwKSB7CisJCQkJaWYoQVJDSElWRV9PSyAhPSBjb3B5X3N0cmluZyhhLAorCQkJCSAgICByYXItPmNzdGF0ZS5sYXN0X2xlbiwKKwkJCQkgICAgcmFyLT5jc3RhdGUuZGlzdF9jYWNoZVswXSkpCisJCQkJeworCQkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogbnVtIDwgMjYyICovCisJCQljb25zdCBpbnQgaWR4ID0gbnVtIC0gMjU4OworCQkJY29uc3QgaW50IGRpc3QgPSBkaXN0X2NhY2hlX3RvdWNoKHJhciwgaWR4KTsKKworCQkJdWludDE2X3QgbGVuX3Nsb3Q7CisJCQlpbnQgbGVuOworCisJCQlpZihBUkNISVZFX09LICE9IGRlY29kZV9udW1iZXIoYSwgJnJhci0+Y3N0YXRlLnJkLCBwLAorCQkJICAgICZsZW5fc2xvdCkpIHsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCX0KKworCQkJbGVuID0gZGVjb2RlX2NvZGVfbGVuZ3RoKHJhciwgcCwgbGVuX3Nsb3QpOworCQkJcmFyLT5jc3RhdGUubGFzdF9sZW4gPSBsZW47CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gY29weV9zdHJpbmcoYSwgbGVuLCBkaXN0KSkKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUaGUgcHJvZ3JhbSBjb3VudGVyIHNob3VsZG4ndCByZWFjaCBoZXJlLiAqLworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJVbnN1cHBvcnRlZCBibG9jayBjb2RlOiAweCV4IiwgbnVtKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogQmluYXJ5IHNlYXJjaCBmb3IgdGhlIFJBUnY1IHNpZ25hdHVyZS4gKi8KK3N0YXRpYyBpbnQgc2Nhbl9mb3Jfc2lnbmF0dXJlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwljb25zdCB1aW50OF90KiBwOworCWNvbnN0IGludCBjaHVua19zaXplID0gNTEyOworCXNzaXplX3QgaTsKKwljaGFyIHNpZ25hdHVyZVtzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKV07CisKKwkvKiBJZiB3ZSdyZSBoZXJlLCBpdCBtZWFucyB3ZSdyZSBvbiBhbiAndW5rbm93biB0ZXJyaXRvcnknIGRhdGEuCisJICogVGhlcmUncyBubyBpbmRpY2F0aW9uIHdoYXQga2luZCBvZiBkYXRhIHdlJ3JlIHJlYWRpbmcgaGVyZS4KKwkgKiBJdCBjb3VsZCBiZSBzb21lIHRleHQgY29tbWVudCwgYW55IGtpbmQgb2YgYmluYXJ5IGRhdGEsCisJICogZGlnaXRhbCBzaWduLCBkcmFnb25zLCBldGMuCisJICoKKwkgKiBXZSB3YW50IHRvIGZpbmQgYSB2YWxpZCBSQVJ2NSBtYWdpYyBoZWFkZXIgaW5zaWRlIHRoaXMgdW5rbm93bgorCSAqIGRhdGEuICovCisKKwkvKiBJcyBpdCBwb3NzaWJsZSBpbiBsaWJhcmNoaXZlIHRvIGp1c3Qgc2tpcCBldmVyeXRoaW5nIHVudGlsIHRoZQorCSAqIGVuZCBvZiB0aGUgZmlsZT8gSWYgc28sIGl0IHdvdWxkIGJlIGEgYmV0dGVyIGFwcHJvYWNoIHRoYW4gdGhlCisJICogY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiAqLworCisJcmFyNV9zaWduYXR1cmUoc2lnbmF0dXJlKTsKKworCXdoaWxlKDEpIHsKKwkJaWYoIXJlYWRfYWhlYWQoYSwgY2h1bmtfc2l6ZSwgJnApKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWZvcihpID0gMDsgaSA8IGNodW5rX3NpemUgLSAoaW50KXNpemVvZihyYXI1X3NpZ25hdHVyZV94b3IpOworCQkgICAgaSsrKSB7CisJCQlpZihtZW1jbXAoJnBbaV0sIHNpZ25hdHVyZSwKKwkJCSAgICBzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKSkgPT0gMCkgeworCQkJCS8qIENvbnN1bWUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSd2ZSB1c2VkIHRvCisJCQkJICogc2VhcmNoIGZvciB0aGUgc2lnbmF0dXJlLCBhcyB3ZWxsIGFzIHRoZQorCQkJCSAqIG51bWJlciBvZiBieXRlcyB1c2VkIGJ5IHRoZSBzaWduYXR1cmUKKwkJCQkgKiBpdHNlbGYuIEFmdGVyIHRoaXMgd2Ugc2hvdWxkIGJlIHN0YW5kaW5nCisJCQkJICogb24gYSB2YWxpZCBiYXNlIGJsb2NrIGhlYWRlci4gKi8KKwkJCQkodm9pZCkgY29uc3VtZShhLAorCQkJCSAgICBpICsgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcikpOworCQkJCXJldHVybiBBUkNISVZFX09LOworCQkJfQorCQl9CisKKwkJY29uc3VtZShhLCBjaHVua19zaXplKTsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9GQVRBTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIHN3aXRjaCB0aGUgbXVsdGl2b2x1bWUgYXJjaGl2ZSBmaWxlIHRvIGFub3RoZXIgZmlsZSwKKyAqIGkuZS4gZnJvbSBwYXJ0MDMgdG8gcGFydCAwNC4gKi8KK3N0YXRpYyBpbnQgYWR2YW5jZV9tdWx0aXZvbHVtZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJaW50IGxyZXQ7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCisJLyogQSBzbWFsbCBzdGF0ZSBtYWNoaW5lIHRoYXQgd2lsbCBza2lwIHVubmVjZXNzYXJ5IGRhdGEsIG5lZWRlZCB0bworCSAqIHN3aXRjaCBmcm9tIG9uZSBtdWx0aXZvbHVtZSB0byBhbm90aGVyLiBTdWNoIHNraXBwaW5nIGlzIG5lZWRlZCBpZgorCSAqIHdlIHdhbnQgdG8gYmUgYW4gc3RyZWFtLW9yaWVudGVkIChpbnN0ZWFkIG9mIGZpbGUtb3JpZW50ZWQpCisJICogdW5wYWNrZXIuCisJICoKKwkgKiBUaGUgc3RhdGUgbWFjaGluZSBzdGFydHMgd2l0aCBgcmFyLT5tYWluLmVuZGFyY2AgPT0gMC4gSXQgYWxzbworCSAqIGFzc3VtZXMgdGhhdCBjdXJyZW50IHN0cmVhbSBwb2ludGVyIHBvaW50cyB0byBzb21lIGJhc2UgYmxvY2sKKwkgKiBoZWFkZXIuCisJICoKKwkgKiBUaGUgYGVuZGFyY2AgZmllbGQgaXMgYmVpbmcgc2V0IHdoZW4gdGhlIGJhc2UgYmxvY2sgcGFyc2luZworCSAqIGZ1bmN0aW9uIGVuY291bnRlcnMgdGhlICdlbmQgb2YgYXJjaGl2ZScgbWFya2VyLgorCSAqLworCisJd2hpbGUoMSkgeworCQlpZihyYXItPm1haW4uZW5kYXJjID09IDEpIHsKKwkJCWludCBsb29waW5nID0gMTsKKworCQkJcmFyLT5tYWluLmVuZGFyYyA9IDA7CisKKwkJCXdoaWxlKGxvb3BpbmcpIHsKKwkJCQlscmV0ID0gc2tpcF9iYXNlX2Jsb2NrKGEpOworCQkJCXN3aXRjaChscmV0KSB7CisJCQkJCWNhc2UgQVJDSElWRV9SRVRSWToKKwkJCQkJCS8qIENvbnRpbnVlIGxvb3BpbmcuICovCisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBBUkNISVZFX09LOgorCQkJCQkJLyogQnJlYWsgbG9vcC4gKi8KKwkJCQkJCWxvb3BpbmcgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQkvKiBGb3J3YXJkIGFueSBlcnJvcnMgdG8gdGhlCisJCQkJCQkgKiBjYWxsZXIuICovCisJCQkJCQlyZXR1cm4gbHJldDsKKwkJCQl9CisJCQl9CisKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogU2tpcCBjdXJyZW50IGJhc2UgYmxvY2suIEluIG9yZGVyIHRvIHByb3Blcmx5IHNraXAKKwkJCSAqIGl0LCB3ZSByZWFsbHkgbmVlZCB0byBzaW1wbHkgcGFyc2UgaXQgYW5kIGRpc2NhcmQKKwkJCSAqIHRoZSByZXN1bHRzLiAqLworCisJCQlscmV0ID0gc2tpcF9iYXNlX2Jsb2NrKGEpOworCQkJaWYobHJldCA9PSBBUkNISVZFX0ZBVEFMIHx8IGxyZXQgPT0gQVJDSElWRV9GQUlMRUQpCisJCQkJcmV0dXJuIGxyZXQ7CisKKwkJCS8qIFRoZSBgc2tpcF9iYXNlX2Jsb2NrYCBmdW5jdGlvbiB0ZWxscyB1cyBpZiB3ZQorCQkJICogc2hvdWxkIGNvbnRpbnVlIHdpdGggc2tpcHBpbmcsIG9yIHdlIHNob3VsZCBzdG9wCisJCQkgKiBza2lwcGluZy4gV2UncmUgdHJ5aW5nIHRvIHNraXAgZXZlcnl0aGluZyB1cCB0bworCQkJICogYSBiYXNlIEZJTEUgYmxvY2suICovCisKKwkJCWlmKGxyZXQgIT0gQVJDSElWRV9SRVRSWSkgeworCQkJCS8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgc2tpcHBpbmcsIG9yIHdlCisJCQkJICogaGF2ZSBqdXN0IHNraXBwZWQgYSBGSUxFIGJhc2UgYmxvY2suLi4gKi8KKworCQkJCWlmKHJhci0+bWFpbi5lbmRhcmMgPT0gMCkgeworCQkJCQlyZXR1cm4gbHJldDsKKwkJCQl9IGVsc2UgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogTWVyZ2VzIHRoZSBwYXJ0aWFsIGJsb2NrIGZyb20gdGhlIGZpcnN0IG11bHRpdm9sdW1lIGFyY2hpdmUgZmlsZSwgYW5kCisgKiBwYXJ0aWFsIGJsb2NrIGZyb20gdGhlIHNlY29uZCBtdWx0aXZvbHVtZSBhcmNoaXZlIGZpbGUuIFRoZSByZXN1bHQgaXMKKyAqIGEgY2h1bmsgb2YgbWVtb3J5IGNvbnRhaW5pbmcgdGhlIHdob2xlIGJsb2NrLCBhbmQgdGhlIHN0cmVhbSBwb2ludGVyCisgKiBpcyBhZHZhbmNlZCB0byB0aGUgbmV4dCBibG9jayBpbiB0aGUgc2Vjb25kIG11bHRpdm9sdW1lIGFyY2hpdmUgZmlsZS4gKi8KK3N0YXRpYyBpbnQgbWVyZ2VfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3NpemVfdCBibG9ja19zaXplLAorICAgIGNvbnN0IHVpbnQ4X3QqKiBwKQoreworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlzc2l6ZV90IGN1cl9ibG9ja19zaXplLCBwYXJ0aWFsX29mZnNldCA9IDA7CisJY29uc3QgdWludDhfdCogbHA7CisJaW50IHJldDsKKworCWlmKHJhci0+bWVyZ2VfbW9kZSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkgICAgIlJlY3Vyc2l2ZSBtZXJnZSBpcyBub3QgYWxsb3dlZCIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIFNldCBhIGZsYWcgdGhhdCB3ZSdyZSBpbiB0aGUgc3dpdGNoaW5nIG1vZGUuICovCisJcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID0gMTsKKworCS8qIFJlYWxsb2NhdGUgdGhlIG1lbW9yeSB3aGljaCB3aWxsIGhvbGQgdGhlIHdob2xlIGJsb2NrLiAqLworCWlmKHJhci0+dm9sLnB1c2hfYnVmKQorCQlmcmVlKCh2b2lkKikgcmFyLT52b2wucHVzaF9idWYpOworCisJLyogSW5jcmVhc2luZyB0aGUgYWxsb2NhdGlvbiBibG9jayBieSA4IGlzIGR1ZSB0byBiaXQgcmVhZGluZyBmdW5jdGlvbnMsCisJICogd2hpY2ggYXJlIHVzaW5nIGFkZGl0aW9uYWwgMiBvciA0IGJ5dGVzLiBBbGxvY2F0aW5nIHRoZSBibG9jayBzaXplCisJICogYnkgZXhhY3QgdmFsdWUgd291bGQgbWFrZSBiaXQgcmVhZGVyIHBlcmZvcm0gcmVhZHMgZnJvbSBpbnZhbGlkCisJICogbWVtb3J5IGJsb2NrIHdoZW4gcmVhZGluZyB0aGUgbGFzdCBieXRlIGZyb20gdGhlIGJ1ZmZlci4gKi8KKwlyYXItPnZvbC5wdXNoX2J1ZiA9IG1hbGxvYyhibG9ja19zaXplICsgOCk7CisJaWYoIXJhci0+dm9sLnB1c2hfYnVmKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCSAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhIG1lcmdlIGJsb2NrIGJ1ZmZlci4iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogVmFsZ3JpbmQgY29tcGxhaW5zIGlmIHRoZSBleHRlbnNpb24gYmxvY2sgZm9yIGJpdCByZWFkZXIgaXMgbm90CisJICogaW5pdGlhbGl6ZWQsIHNvIGluaXRpYWxpemUgaXQuICovCisJbWVtc2V0KCZyYXItPnZvbC5wdXNoX2J1ZltibG9ja19zaXplXSwgMCwgOCk7CisKKwkvKiBBIHNpbmdsZSBibG9jayBjYW4gc3BhbiBhY3Jvc3MgbXVsdGlwbGUgbXVsdGl2b2x1bWUgYXJjaGl2ZSBmaWxlcywKKwkgKiBzbyB3ZSB1c2UgYSBsb29wIGhlcmUuIFRoaXMgbG9vcCB3aWxsIGNvbnN1bWUgZW5vdWdoIG11bHRpdm9sdW1lCisJICogYXJjaGl2ZSBmaWxlcyB1bnRpbCB0aGUgd2hvbGUgYmxvY2sgaXMgcmVhZC4gKi8KKworCXdoaWxlKDEpIHsKKwkJLyogR2V0IHRoZSBzaXplIG9mIGN1cnJlbnQgYmxvY2sgY2h1bmsgaW4gdGhpcyBtdWx0aXZvbHVtZQorCQkgKiBhcmNoaXZlIGZpbGUgYW5kIHJlYWQgaXQuICovCisJCWN1cl9ibG9ja19zaXplID0gcmFyNV9taW4ocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZywKKwkJICAgIGJsb2NrX3NpemUgLSBwYXJ0aWFsX29mZnNldCk7CisKKwkJaWYoY3VyX2Jsb2NrX3NpemUgPT0gMCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiRW5jb3VudGVyZWQgYmxvY2sgc2l6ZSA9PSAwIGR1cmluZyBibG9jayBtZXJnZSIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKworCQlpZighcmVhZF9haGVhZChhLCBjdXJfYmxvY2tfc2l6ZSwgJmxwKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQkvKiBTYW5pdHkgY2hlY2s7IHRoZXJlIHNob3VsZCBuZXZlciBiZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGlzCisJCSAqIGZ1bmN0aW9uIHJlYWRzIG1vcmUgZGF0YSB0aGFuIHRoZSBibG9jaydzIHNpemUuICovCisJCWlmKHBhcnRpYWxfb2Zmc2V0ICsgY3VyX2Jsb2NrX3NpemUgPiBibG9ja19zaXplKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCQkgICAgIkNvbnN1bWVkIHRvbyBtdWNoIGRhdGEgd2hlbiBtZXJnaW5nIGJsb2Nrcy4iKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJLyogTWVyZ2UgcHJldmlvdXMgYmxvY2sgY2h1bmsgd2l0aCBjdXJyZW50IGJsb2NrIGNodW5rLAorCQkgKiBvciBjcmVhdGUgZmlyc3QgYmxvY2sgY2h1bmsgaWYgdGhpcyBpcyBvdXIgZmlyc3QKKwkJICogaXRlcmF0aW9uLiAqLworCQltZW1jcHkoJnJhci0+dm9sLnB1c2hfYnVmW3BhcnRpYWxfb2Zmc2V0XSwgbHAsIGN1cl9ibG9ja19zaXplKTsKKworCQkvKiBBZHZhbmNlIHRoZSBzdHJlYW0gcmVhZCBwb2ludGVyIGJ5IHRoaXMgYmxvY2sgY2h1bmsgc2l6ZS4gKi8KKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIGN1cl9ibG9ja19zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQkvKiBVcGRhdGUgdGhlIHBvaW50ZXJzLiBgcGFydGlhbF9vZmZzZXRgIGNvbnRhaW5zIGluZm9ybWF0aW9uCisJCSAqIGFib3V0IHRoZSBzdW0gb2YgbWVyZ2VkIGJsb2NrIGNodW5rcy4gKi8KKwkJcGFydGlhbF9vZmZzZXQgKz0gY3VyX2Jsb2NrX3NpemU7CisJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgLT0gY3VyX2Jsb2NrX3NpemU7CisKKwkJLyogSWYgYHBhcnRpYWxfb2Zmc2V0YCBpcyB0aGUgc2FtZSBhcyBgYmxvY2tfc2l6ZWAsIHRoaXMgbWVhbnMKKwkJICogd2UndmUgbWVyZ2VkIGFsbCBibG9jayBjaHVua3MgYW5kIHdlIGhhdmUgYSB2YWxpZCBmdWxsCisJCSAqIGJsb2NrLiAqLworCQlpZihwYXJ0aWFsX29mZnNldCA9PSBibG9ja19zaXplKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRvbid0IGhhdmUgYW55IGJ5dGVzIHRvIHJlYWQsIHRoaXMgbWVhbnMgd2Ugc2hvdWxkCisJCSAqIHN3aXRjaCB0byBhbm90aGVyIG11bHRpdm9sdW1lIGFyY2hpdmUgZmlsZS4gKi8KKwkJaWYocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9PSAwKSB7CisJCQlyYXItPm1lcmdlX21vZGUrKzsKKwkJCXJldCA9IGFkdmFuY2VfbXVsdGl2b2x1bWUoYSk7CisJCQlyYXItPm1lcmdlX21vZGUtLTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCSpwID0gcmFyLT52b2wucHVzaF9idWY7CisKKwkvKiBJZiB3ZSdyZSBoZXJlLCB3ZSBjYW4gcmVzdW1lIHVucGFja2luZyBieSBwcm9jZXNzaW5nIHRoZSBibG9jaworCSAqIHBvaW50ZWQgdG8gYnkgdGhlIGAqcGAgbWVtb3J5IHBvaW50ZXIuICovCisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2Jsb2NrKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwljb25zdCB1aW50OF90KiBwOworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlpbnQgcmV0OworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB0byBiZSBwcm9jZXNzZWQsIHRoaXMgbW9zdCBwcm9iYWJseSBtZWFucworCSAqIHdlIG5lZWQgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IHZvbHVtZS4gKi8KKwlpZihyYXItPm1haW4udm9sdW1lICYmIHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPT0gMCkgeworCQlyZXQgPSBhZHZhbmNlX211bHRpdm9sdW1lKGEpOworCQlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5jc3RhdGUuYmxvY2tfcGFyc2luZ19maW5pc2hlZCkgeworCQlzc2l6ZV90IGJsb2NrX3NpemU7CisJCXNzaXplX3QgdG9fc2tpcDsKKwkJc3NpemVfdCBjdXJfYmxvY2tfc2l6ZTsKKworCQkvKiBUaGUgaGVhZGVyIHNpemUgd29uJ3QgYmUgYmlnZ2VyIHRoYW4gNiBieXRlcy4gKi8KKwkJaWYoIXJlYWRfYWhlYWQoYSwgNiwgJnApKSB7CisJCQkvKiBGYWlsZWQgdG8gcHJlZmV0Y2ggZGF0YSBibG9jayBoZWFkZXIuICovCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkvKgorCQkgKiBSZWFkIGJsb2NrX3NpemUgYnkgcGFyc2luZyBibG9jayBoZWFkZXIuIFZhbGlkYXRlIHRoZSBoZWFkZXIKKwkJICogYnkgY2FsY3VsYXRpbmcgQ1JDIGJ5dGUgc3RvcmVkIGluc2lkZSB0aGUgaGVhZGVyLiBTaXplIG9mCisJCSAqIHRoZSBoZWFkZXIgaXMgbm90IGNvbnN0YW50IChibG9jayBzaXplIGNhbiBiZSBzdG9yZWQgZWl0aGVyCisJCSAqIGluIDEgb3IgMiBieXRlcyksIHRoYXQncyB3aHkgYmxvY2sgc2l6ZSBpcyBsZWZ0IG91dCBmcm9tIHRoZQorCQkgKiBgY29tcHJlc3NlZF9ibG9ja19oZWFkZXJgIHN0cnVjdHVyZSBhbmQgcmV0dXJuZWQgYnkKKwkJICogYHBhcnNlX2Jsb2NrX2hlYWRlcmAgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gKi8KKworCQlyZXQgPSBwYXJzZV9ibG9ja19oZWFkZXIoYSwgcCwgJmJsb2NrX3NpemUsCisJCSAgICAmcmFyLT5sYXN0X2Jsb2NrX2hkcik7CisJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJLyogU2tpcCBibG9jayBoZWFkZXIuIE5leHQgZGF0YSBpcyBodWZmbWFuIHRhYmxlcywKKwkJICogaWYgcHJlc2VudC4gKi8KKwkJdG9fc2tpcCA9IHNpemVvZihzdHJ1Y3QgY29tcHJlc3NlZF9ibG9ja19oZWFkZXIpICsKKwkJCWJmX2J5dGVfY291bnQoJnJhci0+bGFzdF9ibG9ja19oZHIpICsgMTsKKworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdG9fc2tpcCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyAtPSB0b19za2lwOworCisJCS8qIFRoZSBibG9jayBzaXplIGdpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3aG9sZSBibG9jayBzaXplLAorCQkgKiBidXQgdGhlIGJsb2NrIGNvdWxkIGJlIHN0b3JlZCBpbiBzcGxpdCBmb3JtIHdoZW4gdXNpbmcKKwkJICogbXVsdGktdm9sdW1lIGFyY2hpdmVzLiBJbiB0aGlzIGNhc2UsIHRoZSBibG9jayBzaXplIHdpbGwgYmUKKwkJICogYmlnZ2VyIHRoYW4gdGhlIGFjdHVhbCBkYXRhIHN0b3JlZCBpbiB0aGlzIGZpbGUuIFJlbWFpbmluZworCQkgKiBwYXJ0IG9mIHRoZSBkYXRhIHdpbGwgYmUgaW4gYW5vdGhlciBmaWxlLiAqLworCisJCWN1cl9ibG9ja19zaXplID0KKwkJCXJhcjVfbWluKHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcsIGJsb2NrX3NpemUpOworCisJCWlmKGJsb2NrX3NpemUgPiByYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nKSB7CisJCQkvKiBJZiBjdXJyZW50IGJsb2Nrcycgc2l6ZSBpcyBiaWdnZXIgdGhhbiBvdXIgZGF0YQorCQkJICogc2l6ZSwgdGhpcyBtZWFucyB3ZSBoYXZlIGEgbXVsdGl2b2x1bWUgYXJjaGl2ZS4KKwkJCSAqIEluIHRoaXMgY2FzZSwgc2tpcCBhbGwgYmFzZSBoZWFkZXJzIHVudGlsIHRoZSBlbmQKKwkJCSAqIG9mIHRoZSBmaWxlLCBwcm9jZWVkIHRvIG5leHQgInBhcnRYWFgucmFyIiB2b2x1bWUsCisJCQkgKiBmaW5kIGl0cyBzaWduYXR1cmUsIHNraXAgYWxsIGhlYWRlcnMgdXAgdG8gdGhlIGZpcnN0CisJCQkgKiBGSUxFIGJhc2UgaGVhZGVyLCBhbmQgY29udGludWUgZnJvbSB0aGVyZS4KKwkJCSAqCisJCQkgKiBOb3RlIHRoYXQgYG1lcmdlX2Jsb2NrYCB3aWxsIHVwZGF0ZSB0aGUgYHJhcmAKKwkJCSAqIGNvbnRleHQgc3RydWN0dXJlIHF1aXRlIGV4dGVuc2l2ZWx5LiAqLworCisJCQlyZXQgPSBtZXJnZV9ibG9jayhhLCBibG9ja19zaXplLCAmcCk7CisJCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCWN1cl9ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKKworCQkJLyogQ3VycmVudCBzdHJlYW0gcG9pbnRlciBzaG91bGQgYmUgbm93IGRpcmVjdGx5CisJCQkgKiAqYWZ0ZXIqIHRoZSBibG9jayB0aGF0IHNwYW5uZWQgdGhyb3VnaCBtdWx0aXBsZQorCQkJICogYXJjaGl2ZSBmaWxlcy4gYHBgIHBvaW50ZXIgc2hvdWxkIGhhdmUgdGhlIGRhdGEgb2YKKwkJCSAqIHRoZSAqd2hvbGUqIGJsb2NrIChtZXJnZWQgZnJvbSBwYXJ0aWFsIGJsb2NrcworCQkJICogc3RvcmVkIGluIG11bHRpcGxlIGFyY2hpdmVzIGZpbGVzKS4gKi8KKwkJfSBlbHNlIHsKKwkJCXJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSA9IDA7CisKKwkJCS8qIFJlYWQgdGhlIHdob2xlIGJsb2NrIHNpemUgaW50byBtZW1vcnkuIFRoaXMgY2FuIHRha2UKKwkJCSAqIHVwIHRvICA4IG1lZ2FieXRlcyBvZiBtZW1vcnkgaW4gdGhlb3JldGljYWwgY2FzZXMuCisJCQkgKiBNaWdodCBiZSB3b3J0aCB0byBvcHRpbWl6ZSB0aGlzIGFuZCB1c2UgYSBzdGFuZGFyZAorCQkJICogY2h1bmsgb2YgNGtiJ3MuICovCisJCQlpZighcmVhZF9haGVhZChhLCA0ICsgY3VyX2Jsb2NrX3NpemUsICZwKSkgeworCQkJCS8qIEZhaWxlZCB0byBwcmVmZXRjaCBibG9jayBkYXRhLiAqLworCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJCX0KKwkJfQorCisJCXJhci0+Y3N0YXRlLmJsb2NrX2J1ZiA9IHA7CisJCXJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplID0gY3VyX2Jsb2NrX3NpemU7CisJCXJhci0+Y3N0YXRlLmJsb2NrX3BhcnNpbmdfZmluaXNoZWQgPSAwOworCisJCXJhci0+Yml0cy5pbl9hZGRyID0gMDsKKwkJcmFyLT5iaXRzLmJpdF9hZGRyID0gMDsKKworCQlpZihiZl9pc190YWJsZV9wcmVzZW50KCZyYXItPmxhc3RfYmxvY2tfaGRyKSkgeworCQkJLyogTG9hZCBIdWZmbWFuIHRhYmxlcy4gKi8KKwkJCXJldCA9IHBhcnNlX3RhYmxlcyhhLCByYXIsIHApOworCQkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCQkvKiBFcnJvciBkdXJpbmcgZGVjb21wcmVzc2lvbiBvZiBIdWZmbWFuCisJCQkJICogdGFibGVzLiAqLworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBCbG9jayBwYXJzaW5nIG5vdCBmaW5pc2hlZCwgcmV1c2UgcHJldmlvdXMgbWVtb3J5IGJ1ZmZlci4gKi8KKwkJcCA9IHJhci0+Y3N0YXRlLmJsb2NrX2J1ZjsKKwl9CisKKwkvKiBVbmNvbXByZXNzIHRoZSBibG9jaywgb3IgYSBwYXJ0IG9mIGl0LCBkZXBlbmRpbmcgb24gaG93IG1hbnkgYnl0ZXMKKwkgKiB3aWxsIGJlIGdlbmVyYXRlZCBieSB1bmNvbXByZXNzaW5nIHRoZSBibG9jay4KKwkgKgorCSAqIEluIGNhc2UgdG9vIG1hbnkgYnl0ZXMgd2lsbCBiZSBnZW5lcmF0ZWQsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorCSAqIGFnYWluIHdpbGwgcmVzdW1lIHRoZSB1bmNvbXByZXNzaW9uIG9wZXJhdGlvbi4gKi8KKwlyZXQgPSBkb191bmNvbXByZXNzX2Jsb2NrKGEsIHApOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5jc3RhdGUuYmxvY2tfcGFyc2luZ19maW5pc2hlZCAmJgorCSAgICByYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUgPT0gMCAmJgorCSAgICByYXItPmNzdGF0ZS5jdXJfYmxvY2tfc2l6ZSA+IDApCisJeworCQkvKiBJZiB3ZSdyZSBwcm9jZXNzaW5nIGEgbm9ybWFsIGJsb2NrLCBjb25zdW1lIHRoZSB3aG9sZQorCQkgKiBibG9jay4gV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IHJlYWQgdGhlIHdob2xlCisJCSAqIGJsb2NrIHRvIG1lbW9yeS4gKi8KKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCisJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgLT0gcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemU7CisJfSBlbHNlIGlmKHJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSkgeworCQkvKiBEb24ndCBjb25zdW1lIHRoZSBibG9jayBpZiB3ZSdyZSBkb2luZyBtdWx0aXZvbHVtZQorCQkgKiBwcm9jZXNzaW5nLiBUaGUgdm9sdW1lIHN3aXRjaGluZyBmdW5jdGlvbiB3aWxsIGNvbnN1bWUKKwkJICogdGhlIHByb3BlciBjb3VudCBvZiBieXRlcyBpbnN0ZWFkLiAqLworCQlyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUgPSAwOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCisvKiBQb3BzIHRoZSBgYnVmYCwgYHNpemVgIGFuZCBgb2Zmc2V0YCBmcm9tIHRoZSAiZGF0YSByZWFkeSIgc3RhY2suCisgKgorICogUmV0dXJucyBBUkNISVZFX09LIHdoZW4gdGhvc2UgYXJndW1lbnRzIGNhbiBiZSB1c2VkLCBBUkNISVZFX1JFVFJZCisgKiB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgb24gdGhlIHN0YWNrLiAqLworc3RhdGljIGludCB1c2VfZGF0YShzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB2b2lkKiogYnVmLCBzaXplX3QqIHNpemUsCisgICAgaW50NjRfdCogb2Zmc2V0KQoreworCWludCBpOworCisJZm9yKGkgPSAwOyBpIDwgcmFyNV9jb3VudG9mKHJhci0+Y3N0YXRlLmRyZWFkeSk7IGkrKykgeworCQlzdHJ1Y3QgZGF0YV9yZWFkeSAqZCA9ICZyYXItPmNzdGF0ZS5kcmVhZHlbaV07CisKKwkJaWYoZC0+dXNlZCkgeworCQkJaWYoYnVmKSAgICAqYnVmID0gZC0+YnVmOworCQkJaWYoc2l6ZSkgICAqc2l6ZSA9IGQtPnNpemU7CisJCQlpZihvZmZzZXQpICpvZmZzZXQgPSBkLT5vZmZzZXQ7CisKKwkJCWQtPnVzZWQgPSAwOworCQkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJCX0KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9SRVRSWTsKK30KKworLyogUHVzaGVzIHRoZSBgYnVmYCwgYHNpemVgIGFuZCBgb2Zmc2V0YCBhcmd1bWVudHMgdG8gdGhlIHJhci0+Y3N0YXRlLmRyZWFkeQorICogRklGTyBzdGFjay4gVGhvc2UgdmFsdWVzIHdpbGwgYmUgcG9wcGVkIGZyb20gdGhpcyBzdGFjayBieSB0aGUgYHVzZV9kYXRhYAorICogZnVuY3Rpb24uICovCitzdGF0aWMgaW50IHB1c2hfZGF0YV9yZWFkeShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIGNvbnN0IHVpbnQ4X3QqIGJ1Ziwgc2l6ZV90IHNpemUsIGludDY0X3Qgb2Zmc2V0KQoreworCWludCBpOworCisJLyogRG9uJ3QgcHVzaCBpZiB3ZSdyZSBpbiBza2lwIG1vZGUuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29saWQKKwkgKiBzdHJlYW1zIG5lZWQgZnVsbCBwcm9jZXNzaW5nIGV2ZW4gaWYgd2UncmUgc2tpcHBpbmcgZGF0YS4gQWZ0ZXIKKwkgKiBmdWxseSBwcm9jZXNzaW5nIHRoZSBzdHJlYW0sIHdlIG5lZWQgdG8gZGlzY2FyZCB0aGUgZ2VuZXJhdGVkIGJ5dGVzLAorCSAqIGJlY2F1c2Ugd2UncmUgaW50ZXJlc3RlZCBvbmx5IGluIHRoZSBzaWRlIGVmZmVjdDogYnVpbGRpbmcgdXAgdGhlCisJICogaW50ZXJuYWwgd2luZG93IGNpcmN1bGFyIGJ1ZmZlci4gVGhpcyB3aW5kb3cgYnVmZmVyIHdpbGwgYmUgdXNlZAorCSAqIGxhdGVyIGR1cmluZyB1bnBhY2tpbmcgb2YgcmVxdWVzdGVkIGRhdGEuICovCisJaWYocmFyLT5za2lwX21vZGUpCisJCXJldHVybiBBUkNISVZFX09LOworCisJLyogU2FuaXR5IGNoZWNrLiAqLworCWlmKG9mZnNldCAhPSByYXItPmZpbGUubGFzdF9vZmZzZXQgKyByYXItPmZpbGUubGFzdF9zaXplKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiU2FuaXR5IGNoZWNrIGVycm9yOiBvdXRwdXQgc3RyZWFtIGlzIG5vdCBjb250aW51b3VzIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWZvcihpID0gMDsgaSA8IHJhcjVfY291bnRvZihyYXItPmNzdGF0ZS5kcmVhZHkpOyBpKyspIHsKKwkJc3RydWN0IGRhdGFfcmVhZHkqIGQgPSAmcmFyLT5jc3RhdGUuZHJlYWR5W2ldOworCQlpZighZC0+dXNlZCkgeworCQkJZC0+dXNlZCA9IDE7CisJCQlkLT5idWYgPSBidWY7CisJCQlkLT5zaXplID0gc2l6ZTsKKwkJCWQtPm9mZnNldCA9IG9mZnNldDsKKworCQkJLyogVGhlc2UgZmllbGRzIGFyZSB1c2VkIG9ubHkgaW4gc2FuaXR5IGNoZWNraW5nLiAqLworCQkJcmFyLT5maWxlLmxhc3Rfb2Zmc2V0ID0gb2Zmc2V0OworCQkJcmFyLT5maWxlLmxhc3Rfc2l6ZSA9IHNpemU7CisKKwkJCS8qIENhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gb2YgdGhpcyBuZXcgYmxvY2sgYmVmb3JlCisJCQkgKiBzdWJtaXR0aW5nIGRhdGEgdG8gbGliYXJjaGl2ZSdzIGVuZ2luZS4gKi8KKwkJCXVwZGF0ZV9jcmMocmFyLCBkLT5idWYsIGQtPnNpemUpOworCisJCQlyZXR1cm4gQVJDSElWRV9PSzsKKwkJfQorCX0KKworCS8qIFByb2dyYW0gY291bnRlciB3aWxsIHJlYWNoIHRoaXMgY29kZSBpZiB0aGUgYHJhci0+Y3N0YXRlLmRhdGFfcmVhZHlgCisJICogc3RhY2sgd2lsbCBiZSBmaWxsZWQgdXAgc28gdGhhdCBubyBuZXcgZW50cmllcyB3aWxsIGJlIGFsbG93ZWQuIFRoZQorCSAqIGNvZGUgc2hvdWxkbid0IGFsbG93IHN1Y2ggc2l0dWF0aW9uIHRvIG9jY3VyLiBTbyB3ZSB0cmVhdCB0aGlzIGNhc2UKKwkgKiBhcyBhbiBpbnRlcm5hbCBlcnJvci4gKi8KKworCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJICAgICJFcnJvcjogcHJlbWF0dXJlIGVuZCBvZiBkYXRhX3JlYWR5IHN0YWNrIik7CisJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdW5jb21wcmVzc2VzIHRoZSBkYXRhIHRoYXQgaXMgc3RvcmVkIGluIHRoZSA8RklMRT4gYmFzZQorICogYmxvY2suCisgKgorICogVGhlIEZJTEUgYmFzZSBibG9jayBsb29rcyBsaWtlIHRoaXM6CisgKgorICogPGhlYWRlcj48aHVmZm1hbiB0YWJsZXM+PGJsb2NrXzE+PGJsb2NrXzI+Li4uPGJsb2NrX24+CisgKgorICogVGhlIDxoZWFkZXI+IGlzIGEgYmxvY2sgaGVhZGVyLCB0aGF0IGlzIHBhcnNlZCBpbiBwYXJzZV9ibG9ja19oZWFkZXIoKS4KKyAqIEl0J3MgYSAiY29tcHJlc3NlZF9ibG9ja19oZWFkZXIiIHN0cnVjdHVyZSwgY29udGFpbmluZyBtZXRhZGF0YSBuZWVkZWQKKyAqIHRvIGtub3cgd2hlbiB3ZSBzaG91bGQgc3RvcCBsb29raW5nIGZvciBtb3JlIDxibG9ja19uPiBibG9ja3MuCisgKgorICogPGh1ZmZtYW4gdGFibGVzPiBjb250YWluIGRhdGEgbmVlZGVkIHRvIHNldCB1cCB0aGUgaHVmZm1hbiB0YWJsZXMsIG5lZWRlZAorICogZm9yIHRoZSBhY3R1YWwgZGVjb21wcmVzc2lvbi4KKyAqCisgKiBFYWNoIDxibG9ja19uPiBjb25zaXN0cyBvZiBzZXJpZXMgb2YgbGl0ZXJhbHM6CisgKgorICogPGxpdGVyYWw+PGxpdGVyYWw+PGxpdGVyYWw+Li4uPGxpdGVyYWw+CisgKgorICogVGhvc2UgbGl0ZXJhbHMgZ2VuZXJhdGUgdGhlIHVuY29tcHJlc3Npb24gZGF0YS4gVGhleSBvcGVyYXRlIG9uIGEgY2lyY3VsYXIKKyAqIGJ1ZmZlciwgc29tZXRpbWVzIHdyaXRpbmcgcmF3IGRhdGEgaW50byBpdCwgc29tZXRpbWVzIHJlZmVyZW5jaW5nCisgKiBzb21lIHByZXZpb3VzIGRhdGEgaW5zaWRlIHRoaXMgYnVmZmVyLCBhbmQgc29tZXRpbWVzIGRlY2xhcmluZyBhIGZpbHRlcgorICogdGhhdCB3aWxsIG5lZWQgdG8gYmUgZXhlY3V0ZWQgb24gdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKiBJdCBhbGwgZGVwZW5kcyBvbiB0aGUgbGl0ZXJhbCB0aGF0IGlzIHVzZWQuCisgKgorICogU29tZXRpbWVzIGJsb2NrcyBwcm9kdWNlIG91dHB1dCBkYXRhLCBzb21ldGltZXMgdGhleSBkb24ndC4gRm9yIGV4YW1wbGUsIGZvcgorICogc29tZSBodWdlIGZpbGVzIHRoYXQgdXNlIGxvdHMgb2YgZmlsdGVycywgc29tZXRpbWVzIGEgYmxvY2sgaXMgZmlsbGVkIHdpdGgKKyAqIG9ubHkgZmlsdGVyIGRlY2xhcmF0aW9uIGxpdGVyYWxzLiBTdWNoIGJsb2NrcyB3b24ndCBwcm9kdWNlIGFueSBkYXRhIGluIHRoZQorICogY2lyY3VsYXIgYnVmZmVyLgorICoKKyAqIFNvbWV0aW1lcyBibG9ja3Mgd2lsbCBwcm9kdWNlIDQgYnl0ZXMgb2YgZGF0YSwgYW5kIHNvbWV0aW1lcyAxIG1lZ2FieXRlLAorICogYmVjYXVzZSBhIGxpdGVyYWwgY2FuIHJlZmVyZW5jZSBwcmV2aW91c2x5IGRlY29tcHJlc3NlZCBkYXRhLiBGb3IgZXhhbXBsZSwKKyAqIHRoZXJlIGNhbiBiZSBhIGxpdGVyYWwgdGhhdCBzYXlzOiAnYXBwZW5kIGEgYnl0ZSAweEZFIGhlcmUnLCBhbmQgYWZ0ZXIKKyAqIGl0IGFub3RoZXIgbGl0ZXJhbCBjYW4gc2F5ICdhcHBlbmQgMSBtZWdhYnl0ZSBvZiBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyCisgKiBvZmZzZXQgMHgxMjM0NScuIFRoaXMgaXMgaG93IFJBUiBmb3JtYXQgaGFuZGxlcyBjb21wcmVzc2luZyByZXBlYXRlZAorICogcGF0dGVybnMuCisgKgorICogVGhlIFJBUiBjb21wcmVzc29yIGNyZWF0ZXMgdGhvc2UgbGl0ZXJhbHMgYW5kIHRoZSBhY3R1YWwgZWZmaWNpZW5jeSBvZgorICogY29tcHJlc3Npb24gZGVwZW5kcyBvbiB3aGF0IHRob3NlIGxpdGVyYWxzIGFyZS4gVGhlIGxpdGVyYWxzIGNhbiBhbHNvCisgKiBiZSBzZWVuIGFzIGEga2luZCBvZiBhIG5vbi10dXJpbmctY29tcGxldGUgdmlydHVhbCBtYWNoaW5lIHRoYXQgc2ltcGx5CisgKiB0ZWxscyB0aGUgZGVjb21wcmVzc29yIHdoYXQgaXQgc2hvdWxkIGRvLgorICogKi8KKworc3RhdGljIGludCBkb191bmNvbXByZXNzX2ZpbGUoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlpbnQgcmV0OworCWludDY0X3QgbWF4X2VuZF9wb3M7CisKKwlpZighcmFyLT5jc3RhdGUuaW5pdGlhbGl6ZWQpIHsKKwkJLyogRG9uJ3QgcGVyZm9ybSBmdWxsIGNvbnRleHQgcmVpbml0aWFsaXphdGlvbiBpZiB3ZSdyZQorCQkgKiBwcm9jZXNzaW5nIGEgc29saWQgYXJjaGl2ZS4gKi8KKwkJaWYoIXJhci0+bWFpbi5zb2xpZCB8fCAhcmFyLT5jc3RhdGUud2luZG93X2J1ZikgeworCQkJaW5pdF91bnBhY2socmFyKTsKKwkJfQorCisJCXJhci0+Y3N0YXRlLmluaXRpYWxpemVkID0gMTsKKwl9CisKKwlpZihyYXItPmNzdGF0ZS5hbGxfZmlsdGVyc19hcHBsaWVkID09IDEpIHsKKwkJLyogV2UgdXNlIHdoaWxlKDEpIGhlcmUsIGJ1dCBzdGFuZGFyZCBjYXNlIGFsbG93cyBmb3IganVzdCAxCisJCSAqIGl0ZXJhdGlvbi4gVGhlIGxvb3Agd2lsbCBpdGVyYXRlIGlmIHByb2Nlc3NfYmxvY2soKSBkaWRuJ3QKKwkJICogZ2VuZXJhdGUgYW55IGRhdGEgYXQgYWxsLiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGJsb2NrCisJCSAqIGNvbnRhaW5zIG9ubHkgZmlsdGVyIGRlZmluaXRpb25zICh0aGlzIGlzIGNvbW1vbiBpbiBiaWcKKwkJICogZmlsZXMpLiAqLworCQl3aGlsZSgxKSB7CisJCQlyZXQgPSBwcm9jZXNzX2Jsb2NrKGEpOworCQkJaWYocmV0ID09IEFSQ0hJVkVfRU9GIHx8IHJldCA9PSBBUkNISVZFX0ZBVEFMKQorCQkJCXJldHVybiByZXQ7CisKKwkJCWlmKHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID09CisJCQkgICAgcmFyLT5jc3RhdGUud3JpdGVfcHRyKSB7CisJCQkJLyogVGhlIGJsb2NrIGRpZG4ndCBnZW5lcmF0ZSBhbnkgbmV3IGRhdGEsCisJCQkJICogc28ganVzdCBwcm9jZXNzIGEgbmV3IGJsb2NrLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBUaGUgYmxvY2sgaGFzIGdlbmVyYXRlZCBzb21lIG5ldyBkYXRhLCBzbyBicmVhaworCQkJICogdGhlIGxvb3AuICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFRyeSB0byBydW4gZmlsdGVycy4gSWYgZmlsdGVycyB3b24ndCBiZSBhcHBsaWVkLCBpdCBtZWFucyB0aGF0CisJICogaW5zdWZmaWNpZW50IGRhdGEgd2FzIGdlbmVyYXRlZC4gKi8KKwlyZXQgPSBhcHBseV9maWx0ZXJzKGEpOworCWlmKHJldCA9PSBBUkNISVZFX1JFVFJZKSB7CisJCXJldHVybiBBUkNISVZFX09LOworCX0gZWxzZSBpZihyZXQgPT0gQVJDSElWRV9GQVRBTCkgeworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBJZiBhcHBseV9maWx0ZXJzKCkgd2lsbCByZXR1cm4gQVJDSElWRV9PSywgd2UgY2FuIGNvbnRpbnVlIGhlcmUuICovCisKKwlpZihjZGVxdWVfc2l6ZSgmcmFyLT5jc3RhdGUuZmlsdGVycykgPiAwKSB7CisJCS8qIENoZWNrIGlmIHdlIGNhbiB3cml0ZSBzb21ldGhpbmcgYmVmb3JlIGhpdHRpbmcgZmlyc3QKKwkJICogZmlsdGVyLiAqLworCQlzdHJ1Y3QgZmlsdGVyX2luZm8qIGZsdDsKKworCQkvKiBHZXQgdGhlIGJsb2NrX3N0YXJ0IG9mZnNldCBmcm9tIHRoZSBmaXJzdCBmaWx0ZXIuICovCisJCWlmKENERV9PSyAhPSBjZGVxdWVfZnJvbnQoJnJhci0+Y3N0YXRlLmZpbHRlcnMsCisJCSAgICBjZGVxdWVfZmlsdGVyX3AoJmZsdCkpKQorCQl7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCQkgICAgIkNhbid0IHJlYWQgZmlyc3QgZmlsdGVyIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCW1heF9lbmRfcG9zID0gcmFyNV9taW4oZmx0LT5ibG9ja19zdGFydCwKKwkJICAgIHJhci0+Y3N0YXRlLndyaXRlX3B0cik7CisJfSBlbHNlIHsKKwkJLyogVGhlcmUgYXJlIG5vIGZpbHRlcnMgZGVmaW5lZCwgb3IgYWxsIGZpbHRlcnMgd2VyZSBhcHBsaWVkLgorCQkgKiBUaGlzIG1lYW5zIHdlIGNhbiBqdXN0IHN0b3JlIHRoZSBkYXRhIHdpdGhvdXQgYW55CisJCSAqIHBvc3Rwcm9jZXNzaW5nLiAqLworCQltYXhfZW5kX3BvcyA9IHJhci0+Y3N0YXRlLndyaXRlX3B0cjsKKwl9CisKKwlpZihtYXhfZW5kX3BvcyA9PSByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0cikgeworCQkvKiBXZSBjYW4ndCB3cml0ZSBhbnl0aGluZyB5ZXQuIFRoZSBibG9jayB1bmNvbXByZXNzaW9uCisJCSAqIGZ1bmN0aW9uIGRpZCBub3QgZ2VuZXJhdGUgZW5vdWdoIGRhdGEsIGFuZCBubyBmaWx0ZXIgY2FuIGJlCisJCSAqIGFwcGxpZWQuIEF0IHRoZSBzYW1lIHRpbWUgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB0aGF0IGNhbiBiZQorCQkgKiAgc3RvcmVkIHdpdGhvdXQgZmlsdGVyIHBvc3Rwcm9jZXNzaW5nLiBUaGlzIG1lYW5zIHdlIG5lZWQgdG8KKwkJICogIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBiZSBnZW5lcmF0ZWQsIHNvIHdlIGNhbiBhcHBseSB0aGUKKwkJICogZmlsdGVycy4KKwkJICoKKwkJICogU2lnbmFsIHRoZSBjYWxsZXIgdGhhdCB3ZSBuZWVkIG1vcmUgZGF0YSB0byBiZSBhYmxlIHRvIGRvCisJCSAqIGFueXRoaW5nLgorCQkgKi8KKwkJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7CisJfSBlbHNlIHsKKwkJLyogV2UgY2FuIHdyaXRlIHRoZSBkYXRhIGJlZm9yZSBoaXR0aW5nIHRoZSBmaXJzdCBmaWx0ZXIuCisJCSAqIFNvIGxldCdzIGRvIGl0LiBUaGUgcHVzaF93aW5kb3dfZGF0YSgpIGZ1bmN0aW9uIHdpbGwKKwkJICogZWZmZWN0aXZlbHkgcmV0dXJuIHRoZSBzZWxlY3RlZCBkYXRhIGJsb2NrIHRvIHRoZSB1c2VyCisJCSAqIGFwcGxpY2F0aW9uLiAqLworCQlwdXNoX3dpbmRvd19kYXRhKGEsIHJhciwgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIsCisJCSAgICBtYXhfZW5kX3Bvcyk7CisJCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID0gbWF4X2VuZF9wb3M7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgdW5jb21wcmVzc19maWxlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlpbnQgcmV0OworCisJd2hpbGUoMSkgeworCQkvKiBTb21ldGltZXMgdGhlIHVuY29tcHJlc3Npb24gZnVuY3Rpb24gd2lsbCByZXR1cm4gYQorCQkgKiAncmV0cnknIHNpZ25hbC4gSWYgdGhpcyB3aWxsIGhhcHBlbiwgd2UgaGF2ZSB0byByZXRyeQorCQkgKiB0aGUgZnVuY3Rpb24uICovCisJCXJldCA9IGRvX3VuY29tcHJlc3NfZmlsZShhKTsKKwkJaWYocmV0ICE9IEFSQ0hJVkVfUkVUUlkpCisJCQlyZXR1cm4gcmV0OworCX0KK30KKworCitzdGF0aWMgaW50IGRvX3Vuc3RvcmVfZmlsZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHZvaWQqKiBidWYsIHNpemVfdCogc2l6ZSwgaW50NjRfdCogb2Zmc2V0KQoreworCXNpemVfdCB0b19yZWFkOworCWNvbnN0IHVpbnQ4X3QqIHA7CisKKwlpZihyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID09IDAgJiYgcmFyLT5tYWluLnZvbHVtZSA+IDAgJiYKKwkgICAgcmFyLT5nZW5lcmljLnNwbGl0X2FmdGVyID4gMCkKKwl7CisJCWludCByZXQ7CisKKwkJcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID0gMTsKKwkJcmV0ID0gYWR2YW5jZV9tdWx0aXZvbHVtZShhKTsKKwkJcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID0gMDsKKworCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJLyogRmFpbGVkIHRvIGFkdmFuY2UgdG8gbmV4dCBtdWx0aXZvbHVtZSBhcmNoaXZlCisJCQkgKiBmaWxlLiAqLworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXRvX3JlYWQgPSByYXI1X21pbihyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nLCA2NCAqIDEwMjQpOworCWlmKHRvX3JlYWQgPT0gMCkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoIXJlYWRfYWhlYWQoYSwgdG9fcmVhZCwgJnApKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkkvTyBlcnJvciB3aGVuIHVuc3RvcmluZyBmaWxlIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCB0b19yZWFkKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoYnVmKSAgICAqYnVmID0gcDsKKwlpZihzaXplKSAgICpzaXplID0gdG9fcmVhZDsKKwlpZihvZmZzZXQpICpvZmZzZXQgPSByYXItPmNzdGF0ZS5sYXN0X3Vuc3RvcmVfcHRyOworCisJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyAtPSB0b19yZWFkOworCXJhci0+Y3N0YXRlLmxhc3RfdW5zdG9yZV9wdHIgKz0gdG9fcmVhZDsKKworCXVwZGF0ZV9jcmMocmFyLCBwLCB0b19yZWFkKTsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBkb191bnBhY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBjb25zdCB2b2lkKiogYnVmLCBzaXplX3QqIHNpemUsIGludDY0X3QqIG9mZnNldCkKK3sKKwllbnVtIENPTVBSRVNTSU9OX01FVEhPRCB7CisJCVNUT1JFID0gMCwgRkFTVEVTVCA9IDEsIEZBU1QgPSAyLCBOT1JNQUwgPSAzLCBHT09EID0gNCwKKwkJQkVTVCA9IDUKKwl9OworCisJaWYocmFyLT5maWxlLnNlcnZpY2UgPiAwKSB7CisJCXJldHVybiBkb191bnN0b3JlX2ZpbGUoYSwgcmFyLCBidWYsIHNpemUsIG9mZnNldCk7CisJfSBlbHNlIHsKKwkJc3dpdGNoKHJhci0+Y3N0YXRlLm1ldGhvZCkgeworCQkJY2FzZSBTVE9SRToKKwkJCQlyZXR1cm4gZG9fdW5zdG9yZV9maWxlKGEsIHJhciwgYnVmLCBzaXplLAorCQkJCSAgICBvZmZzZXQpOworCQkJY2FzZSBGQVNURVNUOgorCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQljYXNlIEZBU1Q6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgTk9STUFMOgorCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQljYXNlIEdPT0Q6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgQkVTVDoKKwkJCQlyZXR1cm4gdW5jb21wcmVzc19maWxlKGEpOworCQkJZGVmYXVsdDoKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIkNvbXByZXNzaW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkOiAweCV4IiwKKwkJCQkgICAgcmFyLT5jc3RhdGUubWV0aG9kKTsKKworCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisJfQorCisjaWYgIWRlZmluZWQgV0lOMzIKKwkvKiBOb3QgcmVhY2hlZC4gKi8KKwlyZXR1cm4gQVJDSElWRV9PSzsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHZlcmlmeV9jaGVja3N1bXMoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCWludCB2ZXJpZnlfY3JjOworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCS8qIENoZWNrIGNoZWNrc3VtcyBvbmx5IHdoZW4gYWN0dWFsbHkgdW5wYWNraW5nIHRoZSBkYXRhLiBUaGVyZSdzIG5vCisJICogbmVlZCB0byBjYWxjdWxhdGUgY2hlY2tzdW0gd2hlbiB3ZSdyZSBza2lwcGluZyBkYXRhIGluIHNvbGlkIGFyY2hpdmVzCisJICogKHNraXBwaW5nIGluIHNvbGlkIGFyY2hpdmVzIGlzIHRoZSBzYW1lIHRoaW5nIGFzIHVucGFja2luZyBjb21wcmVzc2VkCisJICogZGF0YSBhbmQgZGlzY2FyZGluZyB0aGUgcmVzdWx0KS4gKi8KKworCWlmKCFyYXItPnNraXBfbW9kZSkgeworCQkvKiBBbHdheXMgY2hlY2sgY2hlY2tzdW1zIGlmIHdlJ3JlIG5vdCBpbiBza2lwIG1vZGUgKi8KKwkJdmVyaWZ5X2NyYyA9IDE7CisJfSBlbHNlIHsKKwkJLyogV2UgY2FuIG92ZXJyaWRlIHRoZSBsb2dpYyBhYm92ZSB3aXRoIGEgY29tcGlsZS10aW1lIG9wdGlvbgorCQkgKiBOT19DUkNfT05fU09MSURfU0tJUC4gVGhpcyBvcHRpb24gaXMgdXNlZCBkdXJpbmcgZGVidWdnaW5nLAorCQkgKiBhbmQgaXQgd2lsbCBjaGVjayBjaGVja3N1bXMgb2YgdW5wYWNrZWQgZGF0YSBldmVuIHdoZW4KKwkJICogd2UncmUgc2tpcHBpbmcgaXQuICovCisKKyNpZiBkZWZpbmVkIENIRUNLX0NSQ19PTl9TT0xJRF9TS0lQCisJCS8qIERlYnVnIGNhc2UgKi8KKwkJdmVyaWZ5X2NyYyA9IDE7CisjZWxzZQorCQkvKiBOb3JtYWwgY2FzZSAqLworCQl2ZXJpZnlfY3JjID0gMDsKKyNlbmRpZgorCX0KKworCWlmKHZlcmlmeV9jcmMpIHsKKwkJLyogRHVyaW5nIHVucGFja2luZywgb24gZWFjaCB1bnBhY2tlZCBibG9jayB3ZSdyZSBjYWxsaW5nIHRoZQorCQkgKiB1cGRhdGVfY3JjKCkgZnVuY3Rpb24uIFNpbmNlIHdlIGFyZSBoZXJlLCB0aGUgdW5wYWNraW5nCisJCSAqIHByb2Nlc3MgaXMgYWxyZWFkeSBvdmVyIGFuZCB3ZSBjYW4gY2hlY2sgaWYgY2FsY3VsYXRlZAorCQkgKiBjaGVja3N1bSAoQ1JDMzIgb3IgQkxBS0Uyc3ApIGlzIHRoZSBzYW1lIGFzIHdoYXQgaXMgc3RvcmVkCisJCSAqIGluIHRoZSBhcmNoaXZlLiAqLworCQlpZihyYXItPmZpbGUuc3RvcmVkX2NyYzMyID4gMCkgeworCQkJLyogQ2hlY2sgQ1JDMzIgb25seSB3aGVuIHRoZSBmaWxlIGNvbnRhaW5zIGEgQ1JDMzIKKwkJCSAqIHZhbHVlIGZvciB0aGlzIGZpbGUuICovCisKKwkJCWlmKHJhci0+ZmlsZS5jYWxjdWxhdGVkX2NyYzMyICE9CisJCQkgICAgcmFyLT5maWxlLnN0b3JlZF9jcmMzMikgeworCQkJCS8qIENoZWNrc3VtcyBkbyBub3QgbWF0Y2g7IHRoZSB1bnBhY2tlZCBmaWxlCisJCQkJICogaXMgY29ycnVwdGVkLiAqLworCisJCQkJREVCVUdfQ09ERSB7CisJCQkJCXByaW50ZigiQ2hlY2tzdW0gZXJyb3I6IENSQzMyICIKKwkJCQkJICAgICIod2FzOiAlMDh4LCBleHBlY3RlZDogJTA4eClcbiIsCisJCQkJCSAgICByYXItPmZpbGUuY2FsY3VsYXRlZF9jcmMzMiwKKwkJCQkJICAgIHJhci0+ZmlsZS5zdG9yZWRfY3JjMzIpOworCQkJCX0KKworI2lmbmRlZiBET05UX0ZBSUxfT05fQ1JDX0VSUk9SCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAgICJDaGVja3N1bSBlcnJvcjogQ1JDMzIiKTsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQlERUJVR19DT0RFIHsKKwkJCQkJcHJpbnRmKCJDaGVja3N1bSBPSzogQ1JDMzIgIgorCQkJCQkgICAgIiglMDh4LyUwOHgpXG4iLAorCQkJCQkgICAgcmFyLT5maWxlLnN0b3JlZF9jcmMzMiwKKwkJCQkJICAgIHJhci0+ZmlsZS5jYWxjdWxhdGVkX2NyYzMyKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZihyYXItPmZpbGUuaGFzX2JsYWtlMiA+IDApIHsKKwkJCS8qIEJMQUtFMnNwIGlzIGFuIG9wdGlvbmFsIGNoZWNrc3VtIGFsZ29yaXRobSB0aGF0IGlzCisJCQkgKiBhZGRlZCB0byBSQVJ2NSBhcmNoaXZlcyB3aGVuIHVzaW5nIHRoZSBgLWh0YmAgc3dpdGNoCisJCQkgKiAgZHVyaW5nIGNyZWF0aW9uIG9mIGFyY2hpdmUuCisJCQkgKgorCQkJICogV2Ugbm93IGZpbmFsaXplIHRoZSBoYXNoIGNhbGN1bGF0aW9uIGJ5IGNhbGxpbmcgdGhlCisJCQkgKiBgZmluYWxgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZpbmFsIGhhc2gKKwkJCSAqIHZhbHVlIHdlIGNhbiB1c2UgdG8gY29tcGFyZSBpdCB3aXRoIHRoZSBCTEFLRTJzcAorCQkJICogY2hlY2tzdW0gdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGFyY2hpdmUuCisJCQkgKgorCQkJICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGBmaW5hbGAgZnVuY3Rpb24gaXMgbm90CisJCQkgKiB2ZXJ5IGhlbHBmdWwsIGFzIGl0IGd1YXJkcyBvbmx5IGFnYWluc3QgaW1wcm9wZXIgdXNlLgorIAkJCSAqIFRoaXMgaXMgd2h5IHdlJ3JlIGV4cGxpY2l0bHkgaWdub3JpbmcgaXQuICovCisKKwkJCXVpbnQ4X3QgYjJfYnVmWzMyXTsKKwkJCSh2b2lkKSBibGFrZTJzcF9maW5hbCgmcmFyLT5maWxlLmIyc3RhdGUsIGIyX2J1ZiwgMzIpOworCisJCQlpZihtZW1jbXAoJnJhci0+ZmlsZS5ibGFrZTJzcCwgYjJfYnVmLCAzMikgIT0gMCkgeworI2lmbmRlZiBET05UX0ZBSUxfT05fQ1JDX0VSUk9SCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAgICJDaGVja3N1bSBlcnJvcjogQkxBS0UyIik7CisKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKyNlbmRpZgorCQkJfQorCQl9CisJfQorCisJLyogRmluYWxpemF0aW9uIGZvciB0aGlzIGZpbGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gKi8KKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCB2ZXJpZnlfZ2xvYmFsX2NoZWNrc3VtcyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJcmV0dXJuIHZlcmlmeV9jaGVja3N1bXMoYSk7Cit9CisKKy8qCisgKiBEZWNyeXB0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbWFnaWMgc2lnbmF0dXJlIHBhdHRlcm4uIENoZWNrIHRoZSBjb21tZW50IG5lYXIKKyAqIHRoZSBgcmFyNV9zaWduYXR1cmVfeG9yYCBzeW1ib2wgdG8gcmVhZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLgorICovCitzdGF0aWMgdm9pZCByYXI1X3NpZ25hdHVyZShjaGFyICpidWYpIHsKKwkJc2l6ZV90IGk7CisKKwkJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcik7IGkrKykgeworCQkJYnVmW2ldID0gcmFyNV9zaWduYXR1cmVfeG9yW2ldIF4gMHhBMTsKKwkJfQorfQorCitzdGF0aWMgaW50IHJhcjVfcmVhZF9kYXRhKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorICAgIHNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KSB7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwlpZihyYXItPmZpbGUuZGlyID4gMCkgeworCQkvKiBEb24ndCBwcm9jZXNzIGFueSBkYXRhIGlmIHRoaXMgZmlsZSBlbnRyeSB3YXMgZGVjbGFyZWQKKwkJICogYXMgYSBkaXJlY3RvcnkuIFRoaXMgaXMgbmVlZGVkLCBiZWNhdXNlIGVudHJpZXMgbWFya2VkIGFzCisJCSAqIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgYW55IGRpY3Rpb25hcnkgYnVmZmVyIGFsbG9jYXRlZCwgc28KKwkJICogaXQncyBpbXBvc3NpYmxlIHRvIHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24uICovCisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkNhbid0IGRlY29tcHJlc3MgYW4gZW50cnkgbWFya2VkIGFzIGEgZGlyZWN0b3J5Iik7CisJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKKwl9CisKKwlpZighcmFyLT5za2lwX21vZGUgJiYgKHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID4gcmFyLT5maWxlLnVucGFja2VkX3NpemUpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiVW5wYWNrZXIgaGFzIHdyaXR0ZW4gdG9vIG1hbnkgYnl0ZXMiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0ID0gdXNlX2RhdGEocmFyLCBidWZmLCBzaXplLCBvZmZzZXQpOworCWlmKHJldCA9PSBBUkNISVZFX09LKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5maWxlLmVvZiA9PSAxKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlyZXQgPSBkb191bnBhY2soYSwgcmFyLCBidWZmLCBzaXplLCBvZmZzZXQpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9PSAwICYmCisJCQlyYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciA9PSByYXItPmZpbGUudW5wYWNrZWRfc2l6ZSkKKwl7CisJCS8qIElmIGFsbCBieXRlcyBvZiBjdXJyZW50IGZpbGUgd2VyZSBwcm9jZXNzZWQsIHJ1bgorCQkgKiBmaW5hbGl6YXRpb24uCisJCSAqCisJCSAqIEZpbmFsaXphdGlvbiB3aWxsIGNoZWNrIGNoZWNrc3VtIGFnYWluc3QgcHJvcGVyIHZhbHVlcy4gSWYKKwkJICogc29tZSBvZiB0aGUgY2hlY2tzdW1zIHdpbGwgbm90IG1hdGNoLCB3ZSdsbCByZXR1cm4gYW4gZXJyb3IKKwkJICogdmFsdWUgaW4gdGhlIGxhc3QgYGFyY2hpdmVfcmVhZF9kYXRhYCBjYWxsIHRvIHNpZ25hbCBhbiBlcnJvcgorCQkgKiB0byB0aGUgdXNlci4gKi8KKworCQlyYXItPmZpbGUuZW9mID0gMTsKKwkJcmV0dXJuIHZlcmlmeV9nbG9iYWxfY2hlY2tzdW1zKGEpOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJhcjVfcmVhZF9kYXRhX3NraXAoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCWlmKHJhci0+bWFpbi5zb2xpZCkgeworCQkvKiBJbiBzb2xpZCBhcmNoaXZlcywgaW5zdGVhZCBvZiBza2lwcGluZyB0aGUgZGF0YSwgd2UgbmVlZCB0bworCQkgKiBleHRyYWN0IGl0LCBhbmQgZGlzcG9zZSB0aGUgcmVzdWx0LiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhpcworCQkgKiBvcGVyYXRpb24gd2lsbCBiZSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIHdpbmRvdyBidWZmZXIgc3RhdGUKKwkJICogbmVlZGVkIHRvIGJlIGFibGUgdG8gZXh0cmFjdCB0aGUgc2VsZWN0ZWQgZmlsZS4gKi8KKworCQlpbnQgcmV0OworCisJCS8qIE1ha2Ugc3VyZSB0byBwcm9jZXNzIGFsbCBibG9ja3MgaW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtLiAqLworCQl3aGlsZShyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID4gMCkgeworCQkJLyogU2V0dGluZyB0aGUgInNraXAgbW9kZSIgd2lsbCBhbGxvdyB1cyB0byBza2lwCisJCQkgKiBjaGVja3N1bSBjaGVja3MgZHVyaW5nIGRhdGEgc2tpcHBpbmcuIENoZWNraW5nIHRoZQorCQkJICogY2hlY2tzdW0gb2Ygc2tpcHBlZCBkYXRhIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgYW5kCisJCQkgKiBpdCdzIG9ubHkgc2xvd2luZyB0aGluZ3MgZG93bi4KKwkJCSAqCisJCQkgKiBUaGlzIGlzIGluY3JlbWVudGVkIGluc3RlYWQgb2Ygc2V0dGluZyB0byAxIGJlY2F1c2UKKwkJCSAqIHRoaXMgZGF0YSBza2lwcGluZyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCisJCQkgKiByZWN1cnNpdmVseS4gKi8KKwkJCXJhci0+c2tpcF9tb2RlKys7CisKKwkJCS8qIFdlJ3JlIGRpc3Bvc2luZyAxIGJsb2NrIG9mIGRhdGEsIHNvIHdlIHVzZSB0cmlwbGUKKwkJCSAqIE5VTExzIGluIGFyZ3VtZW50cy4gKi8KKwkJCXJldCA9IHJhcjVfcmVhZF9kYXRhKGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQkvKiBUdXJuIG9mZiAic2tpcCBtb2RlIi4gKi8KKwkJCXJhci0+c2tpcF9tb2RlLS07CisKKwkJCWlmKHJldCA8IDAgfHwgcmV0ID09IEFSQ0hJVkVfRU9GKSB7CisJCQkJLyogUHJvcGFnYXRlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucworCQkJCSAqIHRvIHRoZSBjYWxsZXIuICovCisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIEluIHN0YW5kYXJkIGFyY2hpdmVzLCB3ZSBjYW4ganVzdCBqdW1wIG92ZXIgdGhlIGNvbXByZXNzZWQKKwkJICogc3RyZWFtLiBFYWNoIGZpbGUgaW4gbm9uLXNvbGlkIGFyY2hpdmVzIHN0YXJ0cyBmcm9tIGFuIGVtcHR5CisJCSAqIHdpbmRvdyBidWZmZXIuICovCisKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPSAwOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50NjRfdCByYXI1X3NlZWtfZGF0YShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBpbnQ2NF90IG9mZnNldCwKKyAgICBpbnQgd2hlbmNlKQoreworCSh2b2lkKSBhOworCSh2b2lkKSBvZmZzZXQ7CisJKHZvaWQpIHdoZW5jZTsKKworCS8qIFdlJ3JlIGEgc3RyZWFtaW5nIHVucGFja2VyLCBhbmQgd2UgZG9uJ3Qgc3VwcG9ydCBzZWVraW5nLiAqLworCisJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9jbGVhbnVwKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEpIHsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwlmcmVlKHJhci0+Y3N0YXRlLndpbmRvd19idWYpOworCWZyZWUocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmKTsKKworCWZyZWUocmFyLT52b2wucHVzaF9idWYpOworCisJZnJlZV9maWx0ZXJzKHJhcik7CisJY2RlcXVlX2ZyZWUoJnJhci0+Y3N0YXRlLmZpbHRlcnMpOworCisJZnJlZShyYXIpOworCWEtPmZvcm1hdC0+ZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCByYXI1X2NhcGFiaWxpdGllcyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkICogYSkgeworCSh2b2lkKSBhOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhcjVfaGFzX2VuY3J5cHRlZF9lbnRyaWVzKHN0cnVjdCBhcmNoaXZlX3JlYWQgKl9hKSB7CisJKHZvaWQpIF9hOworCisJLyogVW5zdXBwb3J0ZWQgZm9yIG5vdy4gKi8KKwlyZXR1cm4gQVJDSElWRV9SRUFEX0ZPUk1BVF9FTkNSWVBUSU9OX1VOU1VQUE9SVEVEOworfQorCitzdGF0aWMgaW50IHJhcjVfaW5pdChzdHJ1Y3QgcmFyNSogcmFyKSB7CisJbWVtc2V0KHJhciwgMCwgc2l6ZW9mKHN0cnVjdCByYXI1KSk7CisKKwlpZihDREVfT0sgIT0gY2RlcXVlX2luaXQoJnJhci0+Y3N0YXRlLmZpbHRlcnMsIDgxOTIpKQorCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKworCXJldHVybiBBUkNISVZFX09LOworfQorCitpbnQgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUoc3RydWN0IGFyY2hpdmUgKl9hKSB7CisJc3RydWN0IGFyY2hpdmVfcmVhZCogYXI7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmFyNSogcmFyOworCisJaWYoQVJDSElWRV9PSyAhPSAocmV0ID0gZ2V0X2FyY2hpdmVfcmVhZChfYSwgJmFyKSkpCisJCXJldHVybiByZXQ7CisKKwlyYXIgPSBtYWxsb2Moc2l6ZW9mKCpyYXIpKTsKKwlpZihyYXIgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJDYW4ndCBhbGxvY2F0ZSByYXI1IGRhdGEiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYoQVJDSElWRV9PSyAhPSByYXI1X2luaXQocmFyKSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYXItPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJDYW4ndCBhbGxvY2F0ZSByYXI1IGZpbHRlciBidWZmZXIiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0ID0gX19hcmNoaXZlX3JlYWRfcmVnaXN0ZXJfZm9ybWF0KGFyLAorCSAgICByYXIsCisJICAgICJyYXI1IiwKKwkgICAgcmFyNV9iaWQsCisJICAgIHJhcjVfb3B0aW9ucywKKwkgICAgcmFyNV9yZWFkX2hlYWRlciwKKwkgICAgcmFyNV9yZWFkX2RhdGEsCisJICAgIHJhcjVfcmVhZF9kYXRhX3NraXAsCisJICAgIHJhcjVfc2Vla19kYXRhLAorCSAgICByYXI1X2NsZWFudXAsCisJICAgIHJhcjVfY2FwYWJpbGl0aWVzLAorCSAgICByYXI1X2hhc19lbmNyeXB0ZWRfZW50cmllcyk7CisKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkodm9pZCkgcmFyNV9jbGVhbnVwKGFyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3LmMKaW5kZXggZWZhMmM2YS4uZWMwNTIwYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhdy5jCkBAIC0xMjAsNyArMTIwLDkgQEAKIAlhcmNoaXZlX2VudHJ5X3NldF9maWxldHlwZShlbnRyeSwgQUVfSUZSRUcpOwogCWFyY2hpdmVfZW50cnlfc2V0X3Blcm0oZW50cnksIDA2NDQpOwogCS8qIEknbSBkZWxpYmVyYXRlbHkgbGVhdmluZyBtb3N0IGZpZWxkcyB1bnNldCBoZXJlLiAqLwotCXJldHVybiAoQVJDSElWRV9PSyk7CisKKwkvKiBMZXQgdGhlIGZpbHRlciBmaWxsIG91dCBhbnkgZmllbGRzIGl0IG1pZ2h0IGhhdmUuICovCisJcmV0dXJuIF9fYXJjaGl2ZV9yZWFkX2hlYWRlcihhLCBlbnRyeSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Rhci5jCmluZGV4IDYwODAwYmIuLmM2M2Q0NmYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIuYwpAQCAtNjk0LDExICs2OTQsMTMgQEAKICAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIHNpemVfdCAqdW5jb25zdW1lZCkKIHsKIAlzc2l6ZV90IGJ5dGVzOwotCWludCBlcnI7CisJaW50IGVyciwgZW9mX3ZvbF9oZWFkZXI7CiAJY29uc3QgY2hhciAqaDsKIAljb25zdCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeV9oZWFkZXJfdXN0YXIgKmhlYWRlcjsKIAljb25zdCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeV9oZWFkZXJfZ251dGFyICpnbnVoZWFkZXI7CiAKKwllb2Zfdm9sX2hlYWRlciA9IDA7CisKIAkvKiBMb29wIHVudGlsIHdlIGZpbmQgYSB3b3JrYWJsZSBoZWFkZXIgcmVjb3JkLiAqLwogCWZvciAoOzspIHsKIAkJdGFyX2ZsdXNoX3VuY29uc3VtZWQoYSwgdW5jb25zdW1lZCk7CkBAIC03ODgsNiArNzkwLDggQEAKIAkJYnJlYWs7CiAJY2FzZSAnVic6IC8qIEdOVSB2b2x1bWUgaGVhZGVyICovCiAJCWVyciA9IGhlYWRlcl92b2x1bWUoYSwgdGFyLCBlbnRyeSwgaCwgdW5jb25zdW1lZCk7CisJCWlmIChlcnIgPT0gQVJDSElWRV9FT0YpCisJCQllb2Zfdm9sX2hlYWRlciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgJ1gnOiAvKiBVc2VkIGJ5IFNVTiB0YXI7IHNhbWUgYXMgJ3gnLiAqLwogCQlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0ID0gQVJDSElWRV9GT1JNQVRfVEFSX1BBWF9JTlRFUkNIQU5HRTsKQEAgLTg2Miw5ICs4NjYsMTcgQEAKIAkJfQogCQlyZXR1cm4gKGVycik7CiAJfQotCWlmIChlcnIgPT0gQVJDSElWRV9FT0YpCi0JCS8qIEVPRiB3aGVuIHJlY3Vyc2l2ZWx5IHJlYWRpbmcgYSBoZWFkZXIgaXMgYmFkLiAqLwotCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRUlOVkFMLCAiRGFtYWdlZCB0YXIgYXJjaGl2ZSIpOworCWlmIChlcnIgPT0gQVJDSElWRV9FT0YpIHsKKwkJaWYgKCFlb2Zfdm9sX2hlYWRlcikgeworCQkJLyogRU9GIHdoZW4gcmVjdXJzaXZlbHkgcmVhZGluZyBhIGhlYWRlciBpcyBiYWQuICovCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRUlOVkFMLAorCQkJICAgICJEYW1hZ2VkIHRhciBhcmNoaXZlIik7CisJCX0gZWxzZSB7CisJCQkvKiBJZiB3ZSBlbmNvdW50ZXIganVzdCBhIEdOVSB2b2x1bWUgaGVhZGVyIHRyZWF0CisJCQkgKiB0aGlzIHNpdHVhdGlvbiBhcyBhbiBlbXB0eSBhcmNoaXZlICovCisJCQlyZXR1cm4gKEFSQ0hJVkVfRU9GKTsKKwkJfQorCX0KIAlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogfQogCkBAIC0xOTQyLDYgKzE5NTQsMTUgQEAKIAkJCXBheF90aW1lKHZhbHVlLCAmcywgJm4pOwogCQkJYXJjaGl2ZV9lbnRyeV9zZXRfYmlydGh0aW1lKGVudHJ5LCBzLCBuKTsKIAkJfQorCQlpZiAoc3RyY21wKGtleSwgIkxJQkFSQ0hJVkUuc3ltbGlua3R5cGUiKSA9PSAwKSB7CisJCQlpZiAoc3RyY21wKHZhbHVlLCAiZmlsZSIpID09IDApIHsKKwkJCQlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUoZW50cnksCisJCQkJICAgIEFFX1NZTUxJTktfVFlQRV9GSUxFKTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAiZGlyIikgPT0gMCkgeworCQkJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShlbnRyeSwKKwkJCQkgICAgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSk7CisJCQl9CisJCX0KIAkJaWYgKG1lbWNtcChrZXksICJMSUJBUkNISVZFLnhhdHRyLiIsIDE3KSA9PSAwKQogCQkJcGF4X2F0dHJpYnV0ZV94YXR0cihlbnRyeSwga2V5LCB2YWx1ZSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF93YXJjLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3dhcmMuYwppbmRleCBlODc1Mzg1Li43Mjk3N2I4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3dhcmMuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3dhcmMuYwpAQCAtMzg2LDYgKzM4NiwxMSBAQAogCQlyZXR1cm4gKEFSQ0hJVkVfRU9GKTsKIAl9CiAKKwlpZiAody0+dW5jb25zdW1lZCkgeworCQlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIHctPnVuY29uc3VtZWQpOworCQl3LT51bmNvbnN1bWVkID0gMFU7CisJfQorCiAJcmFiID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMVUsICZucmQpOwogCWlmIChucmQgPCAwKSB7CiAJCSpic3ogPSAwVTsKQEAgLTYyMSw3ICs2MjYsOCBAQAogCQlpZiAodmVyID49IDEyMDBVKSB7CiAJCQlpZiAobWVtY21wKGMsICJcclxuIiwgMlUpICE9IDApCiAJCQkJdmVyID0gMFU7Ci0JCX0gZWxzZSBpZiAodmVyIDwgMTIwMFUpIHsKKwkJfSBlbHNlIHsKKwkJCS8qIHZlciA8IDEyMDBVICovCiAJCQlpZiAoKmMgIT0gJyAnICYmICpjICE9ICdcdCcpCiAJCQkJdmVyID0gMFU7CiAJCX0KQEAgLTczOSw4ICs3NDUsOSBAQAogCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0ICovCiAJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSp2YWwpKQogCQlyZXR1cm4gLTE7CisJZXJybm8gPSAwOwogCWxlbiA9IHN0cnRvbCh2YWwsICZvbiwgMTApOwotCWlmIChvbiAhPSBlb2wpIHsKKwlpZiAoZXJybm8gIT0gMCB8fCBvbiAhPSBlb2wpIHsKIAkJLyogbGluZSBtdXN0IGVuZCBoZXJlICovCiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3hhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF94YXIuYwppbmRleCA5MjkyZWQ3Li45NDg5ZTUxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3hhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfeGFyLmMKQEAgLTM5LDEzICszOSwxMyBAQAogI2luY2x1ZGUgPGV4cGF0Lmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0JaTElCX0gKLSNpbmNsdWRlIDxjbV9iemxpYi5oPgorI2luY2x1ZGUgPGNtM3AvYnpsaWIuaD4KICNlbmRpZgogI2lmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTE2Nyw2ICsxNjcsOSBAQAogI2RlZmluZSBIQVNfRkZMQUdTCQkweDAxMDAwCiAjZGVmaW5lIEhBU19YQVRUUgkJMHgwMjAwMAogI2RlZmluZSBIQVNfQUNMCQkJMHgwNDAwMAorI2RlZmluZSBIQVNfQ1RJTUUJCTB4MDgwMDAKKyNkZWZpbmUgSEFTX01USU1FCQkweDEwMDAwCisjZGVmaW5lIEhBU19BVElNRQkJMHgyMDAwMAogCiAJdWludDY0X3QJCSBpZDsKIAl1aW50NjRfdAkJIGxlbmd0aDsKQEAgLTY5NSw5ICs2OTgsMTUgQEAKIAkJICovCiAJCWZpbGVfZnJlZShmaWxlKTsKIAl9Ci0JYXJjaGl2ZV9lbnRyeV9zZXRfYXRpbWUoZW50cnksIGZpbGUtPmF0aW1lLCAwKTsKLQlhcmNoaXZlX2VudHJ5X3NldF9jdGltZShlbnRyeSwgZmlsZS0+Y3RpbWUsIDApOwotCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LCBmaWxlLT5tdGltZSwgMCk7CisgICAgICAgIGlmIChmaWxlLT5oYXMgJiBIQVNfQVRJTUUpIHsKKyAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9hdGltZShlbnRyeSwgZmlsZS0+YXRpbWUsIDApOworICAgICAgICB9CisgICAgICAgIGlmIChmaWxlLT5oYXMgJiBIQVNfQ1RJTUUpIHsKKyAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9jdGltZShlbnRyeSwgZmlsZS0+Y3RpbWUsIDApOworICAgICAgICB9CisgICAgICAgIGlmIChmaWxlLT5oYXMgJiBIQVNfTVRJTUUpIHsKKyAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9tdGltZShlbnRyeSwgZmlsZS0+bXRpbWUsIDApOworICAgICAgICB9CiAJYXJjaGl2ZV9lbnRyeV9zZXRfZ2lkKGVudHJ5LCBmaWxlLT5naWQpOwogCWlmIChmaWxlLT5nbmFtZS5sZW5ndGggPiAwICYmCiAJICAgIGFyY2hpdmVfZW50cnlfY29weV9nbmFtZV9sKGVudHJ5LCBmaWxlLT5nbmFtZS5zLApAQCAtNzg5LDcgKzc5OCw4IEBACiAJeGF0dHIgPSBmaWxlLT54YXR0cl9saXN0OwogCXdoaWxlICh4YXR0ciAhPSBOVUxMKSB7CiAJCWNvbnN0IHZvaWQgKmQ7Ci0JCXNpemVfdCBvdXRieXRlcywgdXNlZDsKKwkJc2l6ZV90IG91dGJ5dGVzID0gMDsKKwkJc2l6ZV90IHVzZWQgPSAwOwogCiAJCXIgPSBtb3ZlX3JlYWRpbmdfcG9pbnQoYSwgeGF0dHItPm9mZnNldCk7CiAJCWlmIChyICE9IEFSQ0hJVkVfT0spCkBAIC04MTEsOCArODIxLDE4IEBACiAJCXIgPSBjaGVja3N1bV9maW5hbChhLAogCQkgICAgeGF0dHItPmFfc3VtLnZhbCwgeGF0dHItPmFfc3VtLmxlbiwKIAkJICAgIHhhdHRyLT5lX3N1bS52YWwsIHhhdHRyLT5lX3N1bS5sZW4pOwotCQlpZiAociAhPSBBUkNISVZFX09LKQorCQlpZiAociAhPSBBUkNISVZFX09LKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgIlhhdHRyIGNoZWNrc3VtIGVycm9yIik7CisJCQlyID0gQVJDSElWRV9XQVJOOwogCQkJYnJlYWs7CisJCX0KKwkJaWYgKHhhdHRyLT5uYW1lLnMgPT0gTlVMTCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJICAgICJYYXR0ciBuYW1lIGVycm9yIik7CisJCQlyID0gQVJDSElWRV9XQVJOOworCQkJYnJlYWs7CisJCX0KIAkJYXJjaGl2ZV9lbnRyeV94YXR0cl9hZGRfZW50cnkoZW50cnksCiAJCSAgICB4YXR0ci0+bmFtZS5zLCBkLCBvdXRieXRlcyk7CiAJCXhhdHRyID0geGF0dHItPm5leHQ7CkBAIC04MzgsNyArODU4LDcgQEAKICAgICBjb25zdCB2b2lkICoqYnVmZiwgc2l6ZV90ICpzaXplLCBpbnQ2NF90ICpvZmZzZXQpCiB7CiAJc3RydWN0IHhhciAqeGFyOwotCXNpemVfdCB1c2VkOworCXNpemVfdCB1c2VkID0gMDsKIAlpbnQgcjsKIAogCXhhciA9IChzdHJ1Y3QgeGFyICopKGEtPmZvcm1hdC0+ZGF0YSk7CkBAIC05NjcsNyArOTg3LDcgQEAKIAkJCQlyZXR1cm4gKChpbnQpc3RlcCk7CiAJCQl4YXItPm9mZnNldCArPSBzdGVwOwogCQl9IGVsc2UgewotCQkJaW50NjRfdCBwb3MgPSBfX2FyY2hpdmVfcmVhZF9zZWVrKGEsIG9mZnNldCwgU0VFS19TRVQpOworCQkJaW50NjRfdCBwb3MgPSBfX2FyY2hpdmVfcmVhZF9zZWVrKGEsIHhhci0+aF9iYXNlICsgb2Zmc2V0LCBTRUVLX1NFVCk7CiAJCQlpZiAocG9zID09IEFSQ0hJVkVfRkFJTEVEKSB7CiAJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwKIAkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLApAQCAtMTIyMCw4ICsxMjQwLDcgQEAKIAkJfQogCQltZW1jcHkobmV3X3BlbmRpbmdfZmlsZXMsIGhlYXAtPmZpbGVzLAogCQkgICAgaGVhcC0+YWxsb2NhdGVkICogc2l6ZW9mKG5ld19wZW5kaW5nX2ZpbGVzWzBdKSk7Ci0JCWlmIChoZWFwLT5maWxlcyAhPSBOVUxMKQotCQkJZnJlZShoZWFwLT5maWxlcyk7CisJCWZyZWUoaGVhcC0+ZmlsZXMpOwogCQloZWFwLT5maWxlcyA9IG5ld19wZW5kaW5nX2ZpbGVzOwogCQloZWFwLT5hbGxvY2F0ZWQgPSBuZXdfc2l6ZTsKIAl9CkBAIC0xNzY3LDggKzE3ODYsOCBAQAogCX0KIAlmaWxlLT5wYXJlbnQgPSB4YXItPmZpbGU7CiAJZmlsZS0+bW9kZSA9IDA3NzcgfCBBRV9JRlJFRzsKLQlmaWxlLT5hdGltZSA9IHRpbWUoTlVMTCk7Ci0JZmlsZS0+bXRpbWUgPSB0aW1lKE5VTEwpOworCWZpbGUtPmF0aW1lID0gIDA7CisJZmlsZS0+bXRpbWUgPSAwOwogCXhhci0+ZmlsZSA9IGZpbGU7CiAJeGFyLT54YXR0ciA9IE5VTEw7CiAJZm9yIChhdHRyID0gbGlzdC0+Zmlyc3Q7IGF0dHIgIT0gTlVMTDsgYXR0ciA9IGF0dHItPm5leHQpIHsKQEAgLTI1OTQsMTUgKzI2MTMsMTQgQEAKIAl3aGlsZSAobCA+IDApIHsKIAkJaW50IG4gPSAwOwogCi0JCWlmIChsID4gMCkgewotCQkJaWYgKGJhc2U2NFtiWzBdXSA8IDAgfHwgYmFzZTY0W2JbMV1dIDwgMCkKLQkJCQlicmVhazsKLQkJCW4gPSBiYXNlNjRbKmIrK10gPDwgMTg7Ci0JCQluIHw9IGJhc2U2NFsqYisrXSA8PCAxMjsKLQkJCSpvdXQrKyA9IG4gPj4gMTY7Ci0JCQlsZW4rKzsKLQkJCWwgLT0gMjsKLQkJfQorCQlpZiAoYmFzZTY0W2JbMF1dIDwgMCB8fCBiYXNlNjRbYlsxXV0gPCAwKQorCQkJYnJlYWs7CisJCW4gPSBiYXNlNjRbKmIrK10gPDwgMTg7CisJCW4gfD0gYmFzZTY0WypiKytdIDw8IDEyOworCQkqb3V0KysgPSBuID4+IDE2OworCQlsZW4rKzsKKwkJbCAtPSAyOworCiAJCWlmIChsID4gMCkgewogCQkJaWYgKGJhc2U2NFsqYl0gPCAwKQogCQkJCWJyZWFrOwpAQCAtMjc1MSwxNSArMjc2OSwxNSBAQAogCQl4YXItPmZpbGUtPnVpZCA9IGF0b2wxMChzLCBsZW4pOwogCQlicmVhazsKIAljYXNlIEZJTEVfQ1RJTUU6Ci0JCXhhci0+ZmlsZS0+aGFzIHw9IEhBU19USU1FOworCQl4YXItPmZpbGUtPmhhcyB8PSBIQVNfVElNRSB8IEhBU19DVElNRTsKIAkJeGFyLT5maWxlLT5jdGltZSA9IHBhcnNlX3RpbWUocywgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBGSUxFX01USU1FOgotCQl4YXItPmZpbGUtPmhhcyB8PSBIQVNfVElNRTsKKwkJeGFyLT5maWxlLT5oYXMgfD0gSEFTX1RJTUUgfCBIQVNfTVRJTUU7CiAJCXhhci0+ZmlsZS0+bXRpbWUgPSBwYXJzZV90aW1lKHMsIGxlbik7CiAJCWJyZWFrOwogCWNhc2UgRklMRV9BVElNRToKLQkJeGFyLT5maWxlLT5oYXMgfD0gSEFTX1RJTUU7CisJCXhhci0+ZmlsZS0+aGFzIHw9IEhBU19USU1FIHwgSEFTX0FUSU1FOwogCQl4YXItPmZpbGUtPmF0aW1lID0gcGFyc2VfdGltZShzLCBsZW4pOwogCQlicmVhazsKIAljYXNlIEZJTEVfREFUQV9MRU5HVEg6CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3ppcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF96aXAuYwppbmRleCA3ZTk5YjEyLi40ZDcxZjk4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3ppcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfemlwLmMKQEAgLTUwLDcgKzUwLDEzIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQlpMSUJfSAorI2luY2x1ZGUgPGJ6bGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xaTUFfSAorI2luY2x1ZGUgPGx6bWEuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtNjMsNiArNjksNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcmIuaCIKICNpbmNsdWRlICJhcmNoaXZlX3JlYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfcHBtZDhfcHJpdmF0ZS5oIgogCiAjaWZuZGVmIEhBVkVfWkxJQl9ICiAjaW5jbHVkZSAiYXJjaGl2ZV9jcmMzMi5oIgpAQCAtMTY1LDEzICsxNzIsMzAgQEAKIAljaGFyCQkJZGVjb21wcmVzc19pbml0OwogCWNoYXIJCQllbmRfb2ZfZW50cnk7CiAKLSNpZmRlZiBIQVZFX1pMSUJfSAogCXVuc2lnbmVkIGNoYXIgCQkqdW5jb21wcmVzc2VkX2J1ZmZlcjsKIAlzaXplX3QgCQkJdW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplOworCisjaWZkZWYgSEFWRV9aTElCX0gKIAl6X3N0cmVhbQkJc3RyZWFtOwogCWNoYXIJCQlzdHJlYW1fdmFsaWQ7CiAjZW5kaWYKIAorI2lmIEhBVkVfTFpNQV9IICYmIEhBVkVfTElCTFpNQQorCWx6bWFfc3RyZWFtCQl6aXB4X2x6bWFfc3RyZWFtOworCWNoYXIgICAgICAgICAgICB6aXB4X2x6bWFfdmFsaWQ7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQlpMSUJfSAorCWJ6X3N0cmVhbQkJYnpzdHJlYW07CisJY2hhciAgICAgICAgICAgIGJ6c3RyZWFtX3ZhbGlkOworI2VuZGlmCisKKwlJQnl0ZUluCQkJemlweF9wcG1kX3N0cmVhbTsKKwlzc2l6ZV90CQkJemlweF9wcG1kX3JlYWRfY29tcHJlc3NlZDsKKwlDUHBtZDgJCQlwcG1kODsKKwljaGFyCQkJcHBtZDhfdmFsaWQ7CisJY2hhcgkJCXBwbWQ4X3N0cmVhbV9mYWlsZWQ7CisKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnY7CiAJc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgKnNjb252X2RlZmF1bHQ7CiAJc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgKnNjb252X3V0Zjg7CkBAIC0yMjIsNiArMjQ2LDMzIEBACiAvKiBNYW55IHN5c3RlbXMgZGVmaW5lIG1pbiBvciBNSU4sIGJ1dCBub3QgYWxsLiAqLwogI2RlZmluZQl6aXBtaW4oYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQogCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgUHBtZDhfRGVjb2RlU3ltYm9sIGR1cmluZyBkZWNvbXByZXNzaW9uIG9mIFBwbWQ4CisgKiBzdHJlYW1zIGluc2lkZSBaSVAgZmlsZXMuIEl0IGhhcyAyIHB1cnBvc2VzOiBvbmUgaXMgdG8gZmV0Y2ggdGhlIG5leHQKKyAqIGNvbXByZXNzZWQgYnl0ZSBmcm9tIHRoZSBzdHJlYW0sIHNlY29uZCBvbmUgaXMgdG8gaW5jcmVhc2UgdGhlIGNvdW50ZXIgaG93CisgKiBtYW55IGNvbXByZXNzZWQgYnl0ZXMgd2VyZSByZWFkLiAqLworc3RhdGljIEJ5dGUKK3BwbWRfcmVhZCh2b2lkKiBwKSB7CisJLyogR2V0IHRoZSBoYW5kbGUgdG8gY3VycmVudCBkZWNvbXByZXNzaW9uIGNvbnRleHQuICovCisJc3RydWN0IGFyY2hpdmVfcmVhZCAqYSA9ICgoSUJ5dGVJbiopcCktPmE7CisJc3RydWN0IHppcCAqemlwID0gKHN0cnVjdCB6aXAqKSBhLT5mb3JtYXQtPmRhdGE7CisJc3NpemVfdCBieXRlc19hdmFpbCA9IDA7CisKKwkvKiBGZXRjaCBuZXh0IGJ5dGUuICovCisJY29uc3QgdWludDhfdCogZGF0YSA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIDEsICZieXRlc19hdmFpbCk7CisJaWYoYnl0ZXNfYXZhaWwgPCAxKSB7CisJCXppcC0+cHBtZDhfc3RyZWFtX2ZhaWxlZCA9IDE7CisJCXJldHVybiAwOworCX0KKworCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgMSk7CisKKwkvKiBJbmNyZW1lbnQgdGhlIGNvdW50ZXIuICovCisJKyt6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQ7CisKKwkvKiBSZXR1cm4gdGhlIG5leHQgY29tcHJlc3NlZCBieXRlLiAqLworCXJldHVybiBkYXRhWzBdOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKQEAgLTM3Miw2ICs0MjMsOCBAQAogCXsxNywgInJlc2VydmVkIn0sIC8qIFJlc2VydmVkIGJ5IFBLV0FSRSAqLwogCXsxOCwgImlibS10ZXJzZS1uZXcifSwgLyogRmlsZSBpcyBjb21wcmVzc2VkIHVzaW5nIElCTSBURVJTRSAobmV3KSAqLwogCXsxOSwgImlibS1sejc3NyJ9LC8qIElCTSBMWjc3IHogQXJjaGl0ZWN0dXJlIChQRlMpICovCisJezk1LCAieHoifSwgICAgICAgLyogWFogY29tcHJlc3NlZCBkYXRhICovCisJezk2LCAianBlZyJ9LCAgICAgLyogSlBFRyBjb21wcmVzc2VkIGRhdGEgKi8KIAl7OTcsICJ3YXYtcGFjayJ9LCAvKiBXYXZQYWNrIGNvbXByZXNzZWQgZGF0YSAqLwogCXs5OCwgInBwbWQtMSJ9LCAgIC8qIFBQTWQgdmVyc2lvbiBJLCBSZXYgMSAqLwogCXs5OSwgImFlcyJ9ICAgICAgIC8qIFdpblppcCBBRVMgZW5jcnlwdGlvbiAgKi8KQEAgLTQxOSwyNyArNDcyLDQ5IEBACiAgKiAgdHJpcGxldHMuICBpZCBhbmQgc2l6ZSBhcmUgMiBieXRlcyBlYWNoLgogICovCiBzdGF0aWMgaW50Ci1wcm9jZXNzX2V4dHJhKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IGNoYXIgKnAsIHNpemVfdCBleHRyYV9sZW5ndGgsIHN0cnVjdCB6aXBfZW50cnkqIHppcF9lbnRyeSkKK3Byb2Nlc3NfZXh0cmEoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LAorICAgICBjb25zdCBjaGFyICpwLCBzaXplX3QgZXh0cmFfbGVuZ3RoLCBzdHJ1Y3QgemlwX2VudHJ5KiB6aXBfZW50cnkpCiB7CiAJdW5zaWduZWQgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgemlwICp6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOwogCiAJaWYgKGV4dHJhX2xlbmd0aCA9PSAwKSB7CiAJCXJldHVybiBBUkNISVZFX09LOwogCX0KIAogCWlmIChleHRyYV9sZW5ndGggPCA0KSB7Ci0JCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkgICAgIlRvby1zbWFsbCBleHRyYSBkYXRhOiBOZWVkIGF0IGxlYXN0IDQgYnl0ZXMsIGJ1dCBvbmx5IGZvdW5kICVkIGJ5dGVzIiwgKGludClleHRyYV9sZW5ndGgpOwotCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJCXNpemVfdCBpID0gMDsKKwkJLyogU29tZSBaSVAgZmlsZXMgbWF5IGhhdmUgdHJhaWxpbmcgMCBieXRlcy4gTGV0J3MgY2hlY2sgdGhleQorCQkgKiBhcmUgYWxsIDAgYW5kIGlnbm9yZSB0aGVtIGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yLgorCQkgKgorCQkgKiBUaGlzIGlzIG5vdCB0ZWNobmljYWxseSBjb3JyZWN0LCBidXQgc29tZSBaSVAgZmlsZXMgbG9vaworCQkgKiBsaWtlIHRoaXMgYW5kIG90aGVyIHRvb2xzIHN1cHBvcnQgdGhvc2UgZmlsZXMgLSBzbyBsZXQncworCQkgKiBhbHNvICBzdXBwb3J0IHRoZW0uCisJCSAqLworCQlmb3IgKDsgaSA8IGV4dHJhX2xlbmd0aDsgaSsrKSB7CisJCQlpZiAocFtpXSAhPSAwKSB7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAgICJUb28tc21hbGwgZXh0cmEgZGF0YTogIgorCQkJCSAgICAiTmVlZCBhdCBsZWFzdCA0IGJ5dGVzLCAiCisJCQkJICAgICJidXQgb25seSBmb3VuZCAlZCBieXRlcyIsCisJCQkJICAgIChpbnQpZXh0cmFfbGVuZ3RoKTsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gQVJDSElWRV9PSzsKIAl9CisKIAl3aGlsZSAob2Zmc2V0IDw9IGV4dHJhX2xlbmd0aCAtIDQpIHsKIAkJdW5zaWduZWQgc2hvcnQgaGVhZGVyaWQgPSBhcmNoaXZlX2xlMTZkZWMocCArIG9mZnNldCk7CiAJCXVuc2lnbmVkIHNob3J0IGRhdGFzaXplID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyBvZmZzZXQgKyAyKTsKIAogCQlvZmZzZXQgKz0gNDsKIAkJaWYgKG9mZnNldCArIGRhdGFzaXplID4gZXh0cmFfbGVuZ3RoKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAiRXh0cmEgZGF0YSBvdmVyZmxvdzogTmVlZCAlZCBieXRlcyBidXQgb25seSBmb3VuZCAlZCBieXRlcyIsCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULCAiRXh0cmEgZGF0YSBvdmVyZmxvdzogIgorCQkJICAgICJOZWVkICVkIGJ5dGVzIGJ1dCBvbmx5IGZvdW5kICVkIGJ5dGVzIiwKIAkJCSAgICAoaW50KWRhdGFzaXplLCAoaW50KShleHRyYV9sZW5ndGggLSBvZmZzZXQpKTsKIAkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKIAkJfQpAQCAtNDU0LDkgKzUyOSwxMiBAQAogCQkJaWYgKHppcF9lbnRyeS0+dW5jb21wcmVzc2VkX3NpemUgPT0gMHhmZmZmZmZmZikgewogCQkJCXVpbnQ2NF90IHQgPSAwOwogCQkJCWlmIChkYXRhc2l6ZSA8IDgKLQkJCQkgICAgfHwgKHQgPSBhcmNoaXZlX2xlNjRkZWMocCArIG9mZnNldCkpID4gSU5UNjRfTUFYKSB7Ci0JCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgdW5jb21wcmVzc2VkIHNpemUiKTsKKwkJCQkgICAgfHwgKHQgPSBhcmNoaXZlX2xlNjRkZWMocCArIG9mZnNldCkpID4KKwkJCQkgICAgSU5UNjRfTUFYKSB7CisJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkJICAgICJNYWxmb3JtZWQgNjQtYml0ICIKKwkJCQkJICAgICJ1bmNvbXByZXNzZWQgc2l6ZSIpOwogCQkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJCQkJfQogCQkJCXppcF9lbnRyeS0+dW5jb21wcmVzc2VkX3NpemUgPSB0OwpAQCAtNDY2LDkgKzU0NCwxMiBAQAogCQkJaWYgKHppcF9lbnRyeS0+Y29tcHJlc3NlZF9zaXplID09IDB4ZmZmZmZmZmYpIHsKIAkJCQl1aW50NjRfdCB0ID0gMDsKIAkJCQlpZiAoZGF0YXNpemUgPCA4Ci0JCQkJICAgIHx8ICh0ID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyBvZmZzZXQpKSA+IElOVDY0X01BWCkgewotCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCQkJICAgICJNYWxmb3JtZWQgNjQtYml0IGNvbXByZXNzZWQgc2l6ZSIpOworCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPgorCQkJCSAgICBJTlQ2NF9NQVgpIHsKKwkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgIgorCQkJCQkgICAgImNvbXByZXNzZWQgc2l6ZSIpOwogCQkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJCQkJfQogCQkJCXppcF9lbnRyeS0+Y29tcHJlc3NlZF9zaXplID0gdDsKQEAgLTQ3OCw5ICs1NTksMTIgQEAKIAkJCWlmICh6aXBfZW50cnktPmxvY2FsX2hlYWRlcl9vZmZzZXQgPT0gMHhmZmZmZmZmZikgewogCQkJCXVpbnQ2NF90IHQgPSAwOwogCQkJCWlmIChkYXRhc2l6ZSA8IDgKLQkJCQkgICAgfHwgKHQgPSBhcmNoaXZlX2xlNjRkZWMocCArIG9mZnNldCkpID4gSU5UNjRfTUFYKSB7Ci0JCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgbG9jYWwgaGVhZGVyIG9mZnNldCIpOworCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPgorCQkJCSAgICBJTlQ2NF9NQVgpIHsKKwkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgIgorCQkJCQkgICAgImxvY2FsIGhlYWRlciBvZmZzZXQiKTsKIAkJCQkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOwogCQkJCX0KIAkJCQl6aXBfZW50cnktPmxvY2FsX2hlYWRlcl9vZmZzZXQgPSB0OwpAQCAtNTEzLDcgKzU5Nyw4IEBACiAJCQkvKiBFeHRlbmRlZCB0aW1lIGZpZWxkICJVVCIuICovCiAJCQlpbnQgZmxhZ3M7CiAJCQlpZiAoZGF0YXNpemUgPT0gMCkgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkJCSAgICAiSW5jb21wbGV0ZSBleHRlbmRlZCB0aW1lIGZpZWxkIik7CiAJCQkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOwogCQkJfQpAQCAtNTk1LDcgKzY4MCw4IEBACiAJCQkgKiAgaWYgYml0bWFwICYgMSwgMiBieXRlICJ2ZXJzaW9uIG1hZGUgYnkiCiAJCQkgKiAgaWYgYml0bWFwICYgMiwgMiBieXRlICJpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMiCiAJCQkgKiAgaWYgYml0bWFwICYgNCwgNCBieXRlICJleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMiCi0JCQkgKiAgaWYgYml0bWFwICYgOCwgMiBieXRlIGNvbW1lbnQgbGVuZ3RoICsgbiBieXRlIGNvbW1lbnQKKwkJCSAqICBpZiBiaXRtYXAgJiA4LCAyIGJ5dGUgY29tbWVudCBsZW5ndGggKyBuIGJ5dGUKKwkJCSAqICBjb21tZW50CiAJCQkgKi8KIAkJCWludCBiaXRtYXAsIGJpdG1hcF9sYXN0OwogCkBAIC02NDYsMTMgKzczMiwxOCBAQAogCQkJCQkgICAgPSBleHRlcm5hbF9hdHRyaWJ1dGVzID4+IDE2OwogCQkJCX0gZWxzZSBpZiAoemlwX2VudHJ5LT5zeXN0ZW0gPT0gMCkgewogCQkJCQkvLyBJbnRlcnByZXQgTVNET1MgZGlyZWN0b3J5IGJpdAotCQkJCQlpZiAoMHgxMCA9PSAoZXh0ZXJuYWxfYXR0cmlidXRlcyAmIDB4MTApKSB7Ci0JCQkJCQl6aXBfZW50cnktPm1vZGUgPSBBRV9JRkRJUiB8IDA3NzU7CisJCQkJCWlmICgweDEwID09IChleHRlcm5hbF9hdHRyaWJ1dGVzICYKKwkJCQkJICAgIDB4MTApKSB7CisJCQkJCQl6aXBfZW50cnktPm1vZGUgPQorCQkJCQkJICAgIEFFX0lGRElSIHwgMDc3NTsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCXppcF9lbnRyeS0+bW9kZSA9IEFFX0lGUkVHIHwgMDY2NDsKKwkJCQkJCXppcF9lbnRyeS0+bW9kZSA9CisJCQkJCQkgICAgQUVfSUZSRUcgfCAwNjY0OwogCQkJCQl9Ci0JCQkJCWlmICgweDAxID09IChleHRlcm5hbF9hdHRyaWJ1dGVzICYgMHgwMSkpIHsKLQkJCQkJCS8vIFJlYWQtb25seSBiaXQ7IHN0cmlwIHdyaXRlIHBlcm1pc3Npb25zCisJCQkJCWlmICgweDAxID09IChleHRlcm5hbF9hdHRyaWJ1dGVzICYKKwkJCQkJICAgIDB4MDEpKSB7CisJCQkJCQkvKiBSZWFkLW9ubHkgYml0OworCQkJCQkJICogc3RyaXAgd3JpdGUgcGVybWlzc2lvbnMgKi8KIAkJCQkJCXppcF9lbnRyeS0+bW9kZSAmPSAwNTU1OwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKQEAgLTY3OSw2ICs3NzAsNTkgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9CisJCWNhc2UgMHg3MDc1OgorCQl7CisJCQkvKiBJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGQuICovCisJCQlpZiAoZGF0YXNpemUgPCA1IHx8IGVudHJ5ID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQlvZmZzZXQgKz0gNTsKKwkJCWRhdGFzaXplIC09IDU7CisKKwkJCS8qIFRoZSBwYXRoIG5hbWUgaW4gdGhpcyBmaWVsZCBpcyBhbHdheXMgZW5jb2RlZAorCQkJICogaW4gVVRGLTguICovCisJCQlpZiAoemlwLT5zY29udl91dGY4ID09IE5VTEwpIHsKKwkJCQl6aXAtPnNjb252X3V0ZjggPQorCQkJCQlhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2Zyb21fY2hhcnNldCgKKwkJCQkJJmEtPmFyY2hpdmUsICJVVEYtOCIsIDEpOworCQkJCS8qIElmIHRoZSBjb252ZXJ0ZXIgZnJvbSBVVEYtOCBpcyBub3QKKwkJCQkgKiBhdmFpbGFibGUsIHRoZW4gdGhlIHBhdGggbmFtZSBmcm9tIHRoZSBtYWluCisJCQkJICogZmllbGQgd2lsbCBtb3JlIGxpa2VseSBiZSBjb3JyZWN0LiAqLworCQkJCWlmICh6aXAtPnNjb252X3V0ZjggPT0gTlVMTCkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIE1ha2Ugc3VyZSB0aGUgQ1JDMzIgb2YgdGhlIGZpbGVuYW1lIG1hdGNoZXMuICovCisJCQlpZiAoIXppcC0+aWdub3JlX2NyYzMyKSB7CisJCQkJY29uc3QgY2hhciAqY3AgPSBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lKGVudHJ5KTsKKwkJCQlpZiAoY3ApIHsKKwkJCQkJdW5zaWduZWQgbG9uZyBmaWxlX2NyYyA9CisJCQkJCSAgICB6aXAtPmNyYzMyZnVuYygwLCBjcCwgc3RybGVuKGNwKSk7CisJCQkJCXVuc2lnbmVkIGxvbmcgdXRmX2NyYyA9CisJCQkJCSAgICBhcmNoaXZlX2xlMzJkZWMocCArIG9mZnNldCAtIDQpOworCQkJCQlpZiAoZmlsZV9jcmMgIT0gdXRmX2NyYykgeworI2lmZGVmIERFQlVHCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSAgICAiQ1JDIGZpbGVuYW1lIG1pc21hdGNoOyAiCisJCQkJCQkgICAgIkNERSBpcyAlbHgsIGJ1dCBVVEY4ICIKKwkJCQkJCSAgICAiaXMgb3V0ZGF0ZWQgd2l0aCAlbHhcbiIsCisJCQkJCQkgICAgZmlsZV9jcmMsIHV0Zl9jcmMpOworI2VuZGlmCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZV9sKGVudHJ5LAorCQkJICAgIHAgKyBvZmZzZXQsIGRhdGFzaXplLCB6aXAtPnNjb252X3V0ZjgpICE9IDApIHsKKwkJCQkvKiBJZ25vcmUgdGhlIGVycm9yLCBhbmQgZmFsbGJhY2sgdG8gdGhlIHBhdGgKKwkJCQkgKiBuYW1lIGZyb20gdGhlIG1haW4gZmllbGQuICovCisjaWZkZWYgREVCVUcKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byByZWFkIHRoZSBaSVAgIgorCQkJCSAgICAiMHg3MDc1IGV4dHJhIGZpZWxkIHBhdGguXG4iKTsKKyNlbmRpZgorCQkJfQorCQkJYnJlYWs7CisJCX0KIAkJY2FzZSAweDc4NTU6CiAJCQkvKiBJbmZvLVpJUCBVbml4IEV4dHJhIEZpZWxkICh0eXBlIDIpICJVeCIuICovCiAjaWZkZWYgREVCVUcKQEAgLTcxMyw3ICs4NTcsOCBAQAogCQkJCX0KIAkJCQlpZiAoZGF0YXNpemUgPj0gKDIgKyB1aWRzaXplICsgMykpIHsKIAkJCQkJLyogZ2V0IGEgZ2lkIHNpemUuICovCi0JCQkJCWdpZHNpemUgPSAweGZmICYgKGludClwW29mZnNldCsyK3VpZHNpemVdOworCQkJCQlnaWRzaXplID0gMHhmZiAmCisJCQkJCSAgICAoaW50KXBbb2Zmc2V0KzIrdWlkc2l6ZV07CiAJCQkJCWlmIChnaWRzaXplID09IDIpCiAJCQkJCQl6aXBfZW50cnktPmdpZCA9CiAJCQkJCQkgICAgYXJjaGl2ZV9sZTE2ZGVjKApAQCAtNzMwLDcgKzg3NSw4IEBACiAJCWNhc2UgMHg5OTAxOgogCQkJLyogV2luWmlwIEFFUyBleHRyYSBkYXRhIGZpZWxkLiAqLwogCQkJaWYgKGRhdGFzaXplIDwgNikgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkJCSAgICAiSW5jb21wbGV0ZSBBRVMgZmllbGQiKTsKIAkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJCQl9CkBAIC03NTAsMTIgKzg5Niw2IEBACiAJCX0KIAkJb2Zmc2V0ICs9IGRhdGFzaXplOwogCX0KLQlpZiAob2Zmc2V0ICE9IGV4dHJhX2xlbmd0aCkgewotCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJICAgICJNYWxmb3JtZWQgZXh0cmEgZGF0YTogQ29uc3VtZWQgJWQgYnl0ZXMgb2YgJWQgYnl0ZXMiLAotCQkgICAgKGludClvZmZzZXQsIChpbnQpZXh0cmFfbGVuZ3RoKTsKLQkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOwotCX0KIAlyZXR1cm4gQVJDSElWRV9PSzsKIH0KIApAQCAtODc1LDcgKzEwMTUsOCBAQAogCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCX0KIAotCWlmIChBUkNISVZFX09LICE9IHByb2Nlc3NfZXh0cmEoYSwgaCwgZXh0cmFfbGVuZ3RoLCB6aXBfZW50cnkpKSB7CisJaWYgKEFSQ0hJVkVfT0sgIT0gcHJvY2Vzc19leHRyYShhLCBlbnRyeSwgaCwgZXh0cmFfbGVuZ3RoLAorCSAgICB6aXBfZW50cnkpKSB7CiAJCXJldHVybiBBUkNISVZFX0ZBVEFMOwogCX0KIAlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIGV4dHJhX2xlbmd0aCk7CkBAIC04OTIsOCArMTAzMyw4IEBACiAJCXppcF9lbnRyeS0+bW9kZSB8PSAwNjY0OwogCX0KIAotCS8qIFdpbmRvd3MgYXJjaGl2ZXJzIHNvbWV0aW1lcyB1c2UgYmFja3NsYXNoIGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yLgotCSAgIE5vcm1hbGl6ZSB0byBzbGFzaC4gKi8KKwkvKiBXaW5kb3dzIGFyY2hpdmVycyBzb21ldGltZXMgdXNlIGJhY2tzbGFzaCBhcyB0aGUgZGlyZWN0b3J5CisJICogc2VwYXJhdG9yLiBOb3JtYWxpemUgdG8gc2xhc2guICovCiAJaWYgKHppcF9lbnRyeS0+c3lzdGVtID09IDAgJiYKIAkgICAgKHdwID0gYXJjaGl2ZV9lbnRyeV9wYXRobmFtZV93KGVudHJ5KSkgIT0gTlVMTCkgewogCQlpZiAod2NzY2hyKHdwLCBMJy8nKSA9PSBOVUxMICYmIHdjc2Nocih3cCwgTCdcXCcpICE9IE5VTEwpIHsKQEAgLTkxMiw3ICsxMDUzLDcgQEAKIAogCS8qIE1ha2Ugc3VyZSB0aGF0IGVudHJpZXMgd2l0aCBhIHRyYWlsaW5nICcvJyBhcmUgbWFya2VkIGFzIGRpcmVjdG9yaWVzCiAJICogZXZlbiBpZiB0aGUgRXh0ZXJuYWwgRmlsZSBBdHRyaWJ1dGVzIGNvbnRhaW5zIGJvZ3VzIHZhbHVlcy4gIElmIHRoaXMKLQkgKiBpcyBub3QgYSBkaXJlY3RvcnkgYW5kIHRoZXJlIGlzIG5vIHR5cGUsIGFzc3VtZSByZWd1bGFyZmlsZS4gKi8KKwkgKiBpcyBub3QgYSBkaXJlY3RvcnkgYW5kIHRoZXJlIGlzIG5vIHR5cGUsIGFzc3VtZSBhIHJlZ3VsYXIgZmlsZS4gKi8KIAlpZiAoKHppcF9lbnRyeS0+bW9kZSAmIEFFX0lGTVQpICE9IEFFX0lGRElSKSB7CiAJCWludCBoYXNfc2xhc2g7CiAKQEAgLTk2Myw3ICsxMTA0LDcgQEAKIAl9CiAKIAlpZiAoemlwX2VudHJ5LT5mbGFncyAmIExBX0ZST01fQ0VOVFJBTF9ESVJFQ1RPUlkpIHsKLQkJLyogSWYgdGhpcyBjYW1lIGZyb20gdGhlIGNlbnRyYWwgZGlyLCBpdCdzIHNpemUgaW5mbworCQkvKiBJZiB0aGlzIGNhbWUgZnJvbSB0aGUgY2VudHJhbCBkaXIsIGl0cyBzaXplIGluZm8KIAkJICogaXMgZGVmaW5pdGl2ZSwgc28gaWdub3JlIHRoZSBsZW5ndGgtYXQtZW5kIGZsYWcuICovCiAJCXppcF9lbnRyeS0+emlwX2ZsYWdzICY9IH5aSVBfTEVOR1RIX0FUX0VORDsKIAkJLyogSWYgbG9jYWwgaGVhZGVyIGlzIG1pc3NpbmcgYSB2YWx1ZSwgdXNlIHRoZSBvbmUgZnJvbQpAQCAtMTIwMiw3ICsxMzQzLDggQEAKIAkJCQl6aXAtPmVudHJ5LT5jcmMzMiA9IGFyY2hpdmVfbGUzMmRlYyhwICsgNCk7CiAJCQkJY29tcHJlc3NlZCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgOCk7CiAJCQkJdW5jb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyAxNik7Ci0JCQkJaWYgKGNvbXByZXNzZWQgPiBJTlQ2NF9NQVggfHwgdW5jb21wcmVzc2VkID4gSU5UNjRfTUFYKSB7CisJCQkJaWYgKGNvbXByZXNzZWQgPiBJTlQ2NF9NQVggfHwgdW5jb21wcmVzc2VkID4KKwkJCQkgICAgSU5UNjRfTUFYKSB7CiAJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAogCQkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJCQkJICAgICJPdmVyZmxvdyBvZiA2NC1iaXQgZmlsZSBzaXplcyIpOwpAQCAtMTI5Niw2ICsxNDM4LDc0NSBAQAogCXJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKK3N0YXRpYyBpbnQKK2NvbnN1bWVfb3B0aW9uYWxfbWFya2VyKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCB6aXAgKnppcCkKK3sKKwlpZiAoemlwLT5lbmRfb2ZfZW50cnkgJiYgKHppcC0+ZW50cnktPnppcF9mbGFncyAmIFpJUF9MRU5HVEhfQVRfRU5EKSkgeworCQljb25zdCBjaGFyICpwOworCisJCWlmIChOVUxMID09IChwID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMjQsIE5VTEwpKSkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiVHJ1bmNhdGVkIFpJUCBlbmQtb2YtZmlsZSByZWNvcmQiKTsKKwkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCX0KKwkJLyogQ29uc3VtZSB0aGUgb3B0aW9uYWwgUEtcMDA3XDAxMCBtYXJrZXIuICovCisJCWlmIChwWzBdID09ICdQJyAmJiBwWzFdID09ICdLJyAmJgorCQkgICAgcFsyXSA9PSAnXDAwNycgJiYgcFszXSA9PSAnXDAxMCcpIHsKKwkJCXAgKz0gNDsKKwkJCXppcC0+dW5jb25zdW1lZCA9IDQ7CisJCX0KKwkJaWYgKHppcC0+ZW50cnktPmZsYWdzICYgTEFfVVNFRF9aSVA2NCkgeworCQkJdWludDY0X3QgY29tcHJlc3NlZCwgdW5jb21wcmVzc2VkOworCQkJemlwLT5lbnRyeS0+Y3JjMzIgPSBhcmNoaXZlX2xlMzJkZWMocCk7CisJCQljb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyA0KTsKKwkJCXVuY29tcHJlc3NlZCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgMTIpOworCQkJaWYgKGNvbXByZXNzZWQgPiBJTlQ2NF9NQVggfHwKKwkJCSAgICB1bmNvbXByZXNzZWQgPiBJTlQ2NF9NQVgpIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIk92ZXJmbG93IG9mIDY0LWJpdCBmaWxlIHNpemVzIik7CisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOworCQkJfQorCQkJemlwLT5lbnRyeS0+Y29tcHJlc3NlZF9zaXplID0gY29tcHJlc3NlZDsKKwkJCXppcC0+ZW50cnktPnVuY29tcHJlc3NlZF9zaXplID0gdW5jb21wcmVzc2VkOworCQkJemlwLT51bmNvbnN1bWVkICs9IDIwOworCQl9IGVsc2UgeworCQkJemlwLT5lbnRyeS0+Y3JjMzIgPSBhcmNoaXZlX2xlMzJkZWMocCk7CisJCQl6aXAtPmVudHJ5LT5jb21wcmVzc2VkX3NpemUgPSBhcmNoaXZlX2xlMzJkZWMocCArIDQpOworCQkJemlwLT5lbnRyeS0+dW5jb21wcmVzc2VkX3NpemUgPSBhcmNoaXZlX2xlMzJkZWMocCArIDgpOworCQkJemlwLT51bmNvbnN1bWVkICs9IDEyOworCQl9CisJfQorCisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKK30KKworI2lmIEhBVkVfTFpNQV9IICYmIEhBVkVfTElCTFpNQQorc3RhdGljIGludAoremlweF94el9pbml0KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCB6aXAgKnppcCkKK3sKKwlsem1hX3JldCByOworCisJaWYoemlwLT56aXB4X2x6bWFfdmFsaWQpIHsKKwkJbHptYV9lbmQoJnppcC0+emlweF9sem1hX3N0cmVhbSk7CisJCXppcC0+emlweF9sem1hX3ZhbGlkID0gMDsKKwl9CisKKwltZW1zZXQoJnppcC0+emlweF9sem1hX3N0cmVhbSwgMCwgc2l6ZW9mKHppcC0+emlweF9sem1hX3N0cmVhbSkpOworCXIgPSBsem1hX3N0cmVhbV9kZWNvZGVyKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0sIFVJTlQ2NF9NQVgsIDApOworCWlmIChyICE9IExaTUFfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkgICAgInh6IGluaXRpYWxpemF0aW9uIGZhaWxlZCglZCkiLAorCQkgICAgcik7CisKKwkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisJfQorCisJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAxOworCisJZnJlZSh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIpOworCisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUgPSAyNTYgKiAxMDI0OworCXppcC0+dW5jb21wcmVzc2VkX2J1ZmZlciA9CisJICAgICh1aW50OF90KikgbWFsbG9jKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplKTsKKwlpZiAoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJObyBtZW1vcnkgZm9yIHh6IGRlY29tcHJlc3Npb24iKTsKKwkJICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJemlwLT5kZWNvbXByZXNzX2luaXQgPSAxOworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKK3N0YXRpYyBpbnQKK3ppcHhfbHptYV9hbG9uZV9pbml0KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCB6aXAgKnppcCkKK3sKKwlsem1hX3JldCByOworCWNvbnN0IHVpbnQ4X3QqIHA7CisKKyNwcmFnbWEgcGFjayhwdXNoKQorI3ByYWdtYSBwYWNrKDEpCisJc3RydWN0IF9hbG9uZV9oZWFkZXIgeworCSAgICB1aW50OF90IGJ5dGVzWzVdOworCSAgICB1aW50NjRfdCB1bmNvbXByZXNzZWRfc2l6ZTsKKwl9IGFsb25lX2hlYWRlcjsKKyNwcmFnbWEgcGFjayhwb3ApCisKKwlpZih6aXAtPnppcHhfbHptYV92YWxpZCkgeworCQlsem1hX2VuZCgmemlwLT56aXB4X2x6bWFfc3RyZWFtKTsKKwkJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAwOworCX0KKworCS8qIFRvIHVucGFjayBaSVBYJ3MgIkxaTUEiIChpZCAxNCkgc3RyZWFtIHdlIGNhbiB1c2Ugc3RhbmRhcmQgbGlibHptYQorCSAqIHRoYXQgaXMgYSBwYXJ0IG9mIFhaIFV0aWxzLiBUaGUgc3RyZWFtIGZvcm1hdCBzdG9yZWQgaW5zaWRlIFpJUFgKKwkgKiBmaWxlIGlzIGEgbW9kaWZpZWQgImx6bWEgYWxvbmUiIGZpbGUgZm9ybWF0LCB0aGF0IHdhcyB1c2VkIGJ5IHRoZQorCSAqIGBsem1hYCB1dGlsaXR5IHdoaWNoIHdhcyBsYXRlciBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgeHpgIHV0aWxpdHkuIAkgKiBTaW5jZSB0aG9zZSBmb3JtYXRzIGFyZSBuZWFybHkgdGhlIHNhbWUsIHdlIGNhbiB1c2UgYSBzdGFuZGFyZAorCSAqICJsem1hIGFsb25lIiBkZWNvZGVyIGZyb20gWFogVXRpbHMuICovCisKKwltZW1zZXQoJnppcC0+emlweF9sem1hX3N0cmVhbSwgMCwgc2l6ZW9mKHppcC0+emlweF9sem1hX3N0cmVhbSkpOworCXIgPSBsem1hX2Fsb25lX2RlY29kZXIoJnppcC0+emlweF9sem1hX3N0cmVhbSwgVUlOVDY0X01BWCk7CisJaWYgKHIgIT0gTFpNQV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCSAgICAibHptYSBpbml0aWFsaXphdGlvbiBmYWlsZWQoJWQpIiwgcik7CisKKwkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisJfQorCisJLyogRmxhZyB0aGUgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHdlIHdhbnQgb3VyIGx6bWEtcmVsYXRlZCBzdHJ1Y3R1cmVzCisJICogdG8gYmUgZnJlZWQgbGF0ZXIuICovCisJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAxOworCisJLyogVGhlICJsem1hIGFsb25lIiBmaWxlIGZvcm1hdCBhbmQgdGhlIHN0cmVhbSBmb3JtYXQgaW5zaWRlIFpJUHggYXJlCisJICogYWxtb3N0IHRoZSBzYW1lLiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHN0cnVjdHVyZSBvZiAibHptYSBhbG9uZSIKKwkgKiBmb3JtYXQ6CisJICoKKwkgKiAkIGNhdCAvYmluL2xzIHwgbHptYSB8IHh4ZCB8IGhlYWQgLW4gMQorCSAqIDAwMDAwMDAwOiA1ZDAwIDAwODAgMDBmZiBmZmZmIGZmZmYgZmZmZiBmZjAwIDI4MTQKKwkgKgorCSAqICAgIDUgYnl0ZXMgICAgICAgIDggYnl0ZXMgICAgICAgIG4gYnl0ZXMKKwkgKiA8bHptYV9wYXJhbXM+PHVuY29tcHJlc3NlZF9zaXplPjxkYXRhLi4uPgorCSAqCisJICogbHptYV9wYXJhbXMgaXMgYSA1LWJ5dGUgYmxvYiB0aGF0IGhhcyB0byBiZSBkZWNvZGVkIHRvIGV4dHJhY3QKKwkgKiBwYXJhbWV0ZXJzIG9mIHRoaXMgTFpNQSBzdHJlYW0uIFRoZSB1bmNvbXByZXNzZWRfc2l6ZSBmaWVsZCBpcyBhbgorCSAqIHVpbnQ2NF90IHZhbHVlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNpemUgb2YgdGhlCisJICogdW5jb21wcmVzc2VkIGZpbGUsIG9yIFVJTlQ2NF9NQVggaWYgdGhpcyB2YWx1ZSBpcyB1bmtub3duLgorCSAqIFRoZSA8ZGF0YS4uLj4gcGFydCBpcyB0aGUgYWN0dWFsIGx6bWEtY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KKwkgKgorCSAqIE5vdyBoZXJlJ3MgdGhlIHN0cnVjdHVyZSBvZiB0aGUgc3RyZWFtIGluc2lkZSB0aGUgWklQWCBmaWxlOgorCSAqCisJICogJCBjYXQgc3RyZWFtX2luc2lkZV96aXB4IHwgeHhkIHwgaGVhZCAtbiAxCisJICogMDAwMDAwMDA6IDA5MTQgMDUwMCA1ZDAwIDgwMDAgMDAwMCAyODE0IC4uLi4gLi4uLgorCSAqCisJICogIDJieXRlICAgMmJ5dGUgICAgNSBieXRlcyAgICAgbiBieXRlcworCSAqIDxtYWdpYzE+PG1hZ2ljMj48bHptYV9wYXJhbXM+PGRhdGEuLi4+CisJICoKKwkgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIFpJUFggZmlsZSBjb250YWlucyBhbiBhZGRpdGlvbmFsIG1hZ2ljMSBhbmQKKwkgKiBtYWdpYzIgaGVhZGVycywgdGhlIGx6bWFfcGFyYW1zIGZpZWxkIGNvbnRhaW5zIHRoZSBzYW1lIHBhcmFtZXRlcgorCSAqIHNldCBhcyBpbiB0aGUgImx6bWEgYWxvbmUiIGZvcm1hdCwgYW5kIHRoZSA8ZGF0YS4uLj4gZmllbGQgaXMgdGhlCisJICogc2FtZSBhcyBpbiB0aGUgImx6bWEgYWxvbmUiIGZvcm1hdCBhcyB3ZWxsLiBOb3RlIHRoYXQgYWxzbyB0aGUgemlweAorCSAqIGZvcm1hdCBpcyBtaXNzaW5nIHRoZSB1bmNvbXByZXNzZWRfc2l6ZSBmaWVsZC4KKwkgKgorCSAqIFNvLCBpbiBvcmRlciB0byB1c2UgdGhlICJsem1hIGFsb25lIiBkZWNvZGVyIGZvciB0aGUgemlweCBsem1hCisJICogc3RyZWFtLCB3ZSBzaW1wbHkgbmVlZCB0byBzaHVmZmxlIGFyb3VuZCBzb21lIGZpZWxkcywgcHJlcGFyZSBhIG5ldworCSAqIGx6bWEgYWxvbmUgaGVhZGVyLCBmZWVkIGl0IGludG8gbHptYSBhbG9uZSBkZWNvZGVyIHNvIGl0IHdpbGwKKwkgKiBpbml0aWFsaXplIGl0c2VsZiBwcm9wZXJseSwgYW5kIHRoZW4gd2UgY2FuIHN0YXJ0IGZlZWRpbmcgbm9ybWFsCisJICogemlweCBsem1hIHN0cmVhbSBpbnRvIHRoZSBkZWNvZGVyLgorCSAqLworCisJLyogUmVhZCBtYWdpYzEsbWFnaWMyLGx6bWFfcGFyYW1zIGZyb20gdGhlIFpJUFggc3RyZWFtLiAqLworCWlmKChwID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgOSwgTlVMTCkpID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIGx6bWEgZGF0YSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCWlmKHBbMl0gIT0gMHgwNSB8fCBwWzNdICE9IDB4MDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiSW52YWxpZCBsem1hIGRhdGEiKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwkvKiBQcmVwYXJlIGFuIGx6bWEgYWxvbmUgaGVhZGVyOiBjb3B5IHRoZSBsem1hX3BhcmFtcyBibG9iIGludG8KKwkgKiBhIHByb3BlciBwbGFjZSBpbnRvIHRoZSBsem1hIGFsb25lIGhlYWRlci4gKi8KKwltZW1jcHkoJmFsb25lX2hlYWRlci5ieXRlc1swXSwgcCArIDQsIDUpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgJ3VuY29tcHJlc3NlZCBzaXplJyBmaWVsZCB0byB1bmtub3duOyB3ZSdsbCBtYW51YWxseQorCSAqIG1vbml0b3IgaG93IG1hbnkgYnl0ZXMgdGhlcmUgYXJlIHN0aWxsIHRvIGJlIHVuY29tcHJlc3NlZC4gKi8KKwlhbG9uZV9oZWFkZXIudW5jb21wcmVzc2VkX3NpemUgPSBVSU5UNjRfTUFYOworCisJaWYoIXppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcikgeworCQl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSA9IDI1NiAqIDEwMjQ7CisJCXppcC0+dW5jb21wcmVzc2VkX2J1ZmZlciA9CisJCQkodWludDhfdCopIG1hbGxvYyh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSk7CisKKwkJaWYgKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlciA9PSBOVUxMKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkJICAgICJObyBtZW1vcnkgZm9yIGx6bWEgZGVjb21wcmVzc2lvbiIpOworCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJfQorCX0KKworCXppcC0+emlweF9sem1hX3N0cmVhbS5uZXh0X2luID0gKHZvaWQqKSAmYWxvbmVfaGVhZGVyOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9pbiA9IHNpemVvZihhbG9uZV9oZWFkZXIpOworCXppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9pbiA9IDA7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLm5leHRfb3V0ID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZTsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0ID0gMDsKKworCS8qIEZlZWQgb25seSB0aGUgaGVhZGVyIGludG8gdGhlIGx6bWEgYWxvbmUgZGVjb2Rlci4gVGhpcyB3aWxsCisJICogZWZmZWN0aXZlbHkgaW5pdGlhbGl6ZSB0aGUgZGVjb2RlciwgYW5kIHdpbGwgbm90IHByb2R1Y2UgYW55CisJICogb3V0cHV0IGJ5dGVzIHlldC4gKi8KKwlyID0gbHptYV9jb2RlKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0sIExaTUFfUlVOKTsKKwlpZiAociAhPSBMWk1BX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAibHptYSBzdHJlYW0gaW5pdGlhbGl6YXRpb24gZXJyb3IiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogV2UndmUgYWxyZWFkeSBjb25zdW1lZCBzb21lIGJ5dGVzLCBzbyB0YWtlIHRoaXMgaW50byBhY2NvdW50LiAqLworCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgOSk7CisJemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgLT0gOTsKKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSA5OworCisJemlwLT5kZWNvbXByZXNzX2luaXQgPSAxOworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKK3N0YXRpYyBpbnQKK3ppcF9yZWFkX2RhdGFfemlweF94eihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBjb25zdCB2b2lkICoqYnVmZiwKKwlzaXplX3QgKnNpemUsIGludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgemlwKiB6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOworCWludCByZXQ7CisJbHptYV9yZXQgbHpfcmV0OworCWNvbnN0IHZvaWQqIGNvbXByZXNzZWRfYnVmOworCXNzaXplX3QgYnl0ZXNfYXZhaWwsIGluX2J5dGVzLCB0b19jb25zdW1lID0gMDsKKworCSh2b2lkKSBvZmZzZXQ7IC8qIFVOVVNFRCAqLworCisJLyogSW5pdGlhbGl6ZSBkZWNvbXByZXNzb3IgaWYgbm90IHlldCBpbml0aWFsaXplZC4gKi8KKwlpZiAoIXppcC0+ZGVjb21wcmVzc19pbml0KSB7CisJCXJldCA9IHppcHhfeHpfaW5pdChhLCB6aXApOworCQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCQlyZXR1cm4gKHJldCk7CisJfQorCisJY29tcHJlc3NlZF9idWYgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAxLCAmYnl0ZXNfYXZhaWwpOworCWlmIChieXRlc19hdmFpbCA8IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIHh6IGZpbGUgYm9keSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCWluX2J5dGVzID0gemlwbWluKHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nLCBieXRlc19hdmFpbCk7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLm5leHRfaW4gPSBjb21wcmVzc2VkX2J1ZjsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0uYXZhaWxfaW4gPSBpbl9ieXRlczsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfaW4gPSAwOworCXppcC0+emlweF9sem1hX3N0cmVhbS5uZXh0X291dCA9IHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcjsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0uYXZhaWxfb3V0ID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemU7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX291dCA9IDA7CisKKwkvKiBQZXJmb3JtIHRoZSBkZWNvbXByZXNzaW9uLiAqLworCWx6X3JldCA9IGx6bWFfY29kZSgmemlwLT56aXB4X2x6bWFfc3RyZWFtLCBMWk1BX1JVTik7CisJc3dpdGNoKGx6X3JldCkgeworCQljYXNlIExaTUFfREFUQV9FUlJPUjoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgInh6IGRhdGEgZXJyb3IgKGVycm9yICVkKSIsIChpbnQpIGx6X3JldCk7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCisJCWNhc2UgTFpNQV9OT19DSEVDSzoKKwkJY2FzZSBMWk1BX09LOgorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgInh6IHVua25vd24gZXJyb3IgJWQiLCAoaW50KSBsel9yZXQpOworCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKworCQljYXNlIExaTUFfU1RSRUFNX0VORDoKKwkJCWx6bWFfZW5kKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0pOworCQkJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAwOworCisJCQlpZigoaW50NjRfdCkgemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luICE9CisJCQkgICAgemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcpCisJCQl7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCQkgICAgInh6IHByZW1hdHVyZSBlbmQgb2Ygc3RyZWFtIik7CisJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCX0KKworCQkJemlwLT5lbmRfb2ZfZW50cnkgPSAxOworCQkJYnJlYWs7CisJfQorCisJdG9fY29uc3VtZSA9IHppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9pbjsKKworCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgdG9fY29uc3VtZSk7CisJemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgLT0gdG9fY29uc3VtZTsKKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfdW5jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX291dDsKKworCSpzaXplID0gemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX291dDsKKwkqYnVmZiA9IHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcjsKKworCXJldCA9IGNvbnN1bWVfb3B0aW9uYWxfbWFya2VyKGEsIHppcCk7CisJaWYgKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gKHJldCk7CisKKwlyZXR1cm4gKEFSQ0hJVkVfT0spOworfQorCitzdGF0aWMgaW50Cit6aXBfcmVhZF9kYXRhX3ppcHhfbHptYV9hbG9uZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBjb25zdCB2b2lkICoqYnVmZiwKKyAgICBzaXplX3QgKnNpemUsIGludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgemlwKiB6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOworCWludCByZXQ7CisJbHptYV9yZXQgbHpfcmV0OworCWNvbnN0IHZvaWQqIGNvbXByZXNzZWRfYnVmOworCXNzaXplX3QgYnl0ZXNfYXZhaWwsIGluX2J5dGVzLCB0b19jb25zdW1lOworCisJKHZvaWQpIG9mZnNldDsgLyogVU5VU0VEICovCisKKwkvKiBJbml0aWFsaXplIGRlY29tcHJlc3NvciBpZiBub3QgeWV0IGluaXRpYWxpemVkLiAqLworCWlmICghemlwLT5kZWNvbXByZXNzX2luaXQpIHsKKwkJcmV0ID0gemlweF9sem1hX2Fsb25lX2luaXQoYSwgemlwKTsKKwkJaWYgKHJldCAhPSBBUkNISVZFX09LKQorCQkJcmV0dXJuIChyZXQpOworCX0KKworCS8qIEZldGNoIG1vcmUgY29tcHJlc3NlZCBkYXRhLiBUaGUgc2FtZSBub3RlIGFzIGluIGRlZmxhdGUgaGFuZGxlcgorCSAqIGFwcGxpZXMgaGVyZSBhcyB3ZWxsOgorCSAqCisJICogTm90ZTogJzEnIGhlcmUgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIFJlY2FsbCB0aGF0IHRoZQorCSAqIGRlY29tcHJlc3Npb24gbGF5ZXIgcmV0dXJucyBhIGNvdW50IG9mIGF2YWlsYWJsZSBieXRlczsgYXNraW5nIGZvcgorCSAqIG1vcmUgdGhhbiB0aGF0IGZvcmNlcyB0aGUgZGVjb21wcmVzc29yIHRvIGNvbWJpbmUgcmVhZHMgYnkgY29weWluZworCSAqIGRhdGEuCisJICovCisJY29tcHJlc3NlZF9idWYgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAxLCAmYnl0ZXNfYXZhaWwpOworCWlmIChieXRlc19hdmFpbCA8IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIGx6bWEgZmlsZSBib2R5Iik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJLyogU2V0IGRlY29tcHJlc3NvciBwYXJhbWV0ZXJzLiAqLworCWluX2J5dGVzID0gemlwbWluKHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nLCBieXRlc19hdmFpbCk7CisKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0ubmV4dF9pbiA9IGNvbXByZXNzZWRfYnVmOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9pbiA9IGluX2J5dGVzOworCXppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9pbiA9IDA7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLm5leHRfb3V0ID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9vdXQgPQorCQkvKiBUaGVzZSBsem1hX2Fsb25lIHN0cmVhbXMgbGFjayBlbmQgb2Ygc3RyZWFtIG1hcmtlciwgc28gbGV0J3MKKwkJICogbWFrZSBzdXJlIHRoZSB1bnBhY2tlciB3b24ndCB0cnkgdG8gdW5wYWNrIG1vcmUgdGhhbiBpdCdzCisJCSAqIHN1cHBvc2VkIHRvLiAqLworCQl6aXBtaW4oKGludDY0X3QpIHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplLAorCQkgICAgemlwLT5lbnRyeS0+dW5jb21wcmVzc2VkX3NpemUgLQorCQkgICAgemlwLT5lbnRyeV91bmNvbXByZXNzZWRfYnl0ZXNfcmVhZCk7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX291dCA9IDA7CisKKwkvKiBQZXJmb3JtIHRoZSBkZWNvbXByZXNzaW9uLiAqLworCWx6X3JldCA9IGx6bWFfY29kZSgmemlwLT56aXB4X2x6bWFfc3RyZWFtLCBMWk1BX1JVTik7CisJc3dpdGNoKGx6X3JldCkgeworCQljYXNlIExaTUFfREFUQV9FUlJPUjoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgImx6bWEgZGF0YSBlcnJvciAoZXJyb3IgJWQpIiwgKGludCkgbHpfcmV0KTsKKwkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisKKwkJLyogVGhpcyBjYXNlIGlzIG9wdGlvbmFsIGluIGx6bWEgYWxvbmUgZm9ybWF0LiBJdCBjYW4gaGFwcGVuLAorCQkgKiBidXQgbW9zdCBvZiB0aGUgZmlsZXMgZG9uJ3QgaGF2ZSBpdC4gKEdpdEh1YiAjMTI1NykgKi8KKwkJY2FzZSBMWk1BX1NUUkVBTV9FTkQ6CisJCQlsem1hX2VuZCgmemlwLT56aXB4X2x6bWFfc3RyZWFtKTsKKwkJCXppcC0+emlweF9sem1hX3ZhbGlkID0gMDsKKwkJCWlmKChpbnQ2NF90KSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfaW4gIT0KKwkJCSAgICB6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZykKKwkJCXsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJCSAgICAibHptYSBhbG9uZSBwcmVtYXR1cmUgZW5kIG9mIHN0cmVhbSIpOworCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQl9CisKKwkJCXppcC0+ZW5kX29mX2VudHJ5ID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgTFpNQV9PSzoKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJICAgICJsem1hIHVua25vd24gZXJyb3IgJWQiLCAoaW50KSBsel9yZXQpOworCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwl0b19jb25zdW1lID0gemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luOworCisJLyogVXBkYXRlIHBvaW50ZXJzLiAqLworCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgdG9fY29uc3VtZSk7CisJemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgLT0gdG9fY29uc3VtZTsKKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfdW5jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX291dDsKKworCWlmKHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nID09IDApIHsKKwkJemlwLT5lbmRfb2ZfZW50cnkgPSAxOworCX0KKworCS8qIFJldHVybiB2YWx1ZXMuICovCisJKnNpemUgPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0OworCSpidWZmID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCisJLyogQmVoYXZlIHRoZSBzYW1lIHdheSBhcyBkdXJpbmcgZGVmbGF0ZSBkZWNvbXByZXNzaW9uLiAqLworCXJldCA9IGNvbnN1bWVfb3B0aW9uYWxfbWFya2VyKGEsIHppcCk7CisJaWYgKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gKHJldCk7CisKKwkvKiBGcmVlIGx6bWEgZGVjb2RlciBoYW5kbGUgYmVjYXVzZSB3ZSdsbCBubyBsb25nZXIgbmVlZCBpdC4gKi8KKwlpZih6aXAtPmVuZF9vZl9lbnRyeSkgeworCQlsem1hX2VuZCgmemlwLT56aXB4X2x6bWFfc3RyZWFtKTsKKwkJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAwOworCX0KKworCS8qIElmIHdlJ3JlIGhlcmUsIHRoZW4gd2UncmUgZ29vZCEgKi8KKwlyZXR1cm4gKEFSQ0hJVkVfT0spOworfQorI2VuZGlmIC8qIEhBVkVfTFpNQV9IICYmIEhBVkVfTElCTFpNQSAqLworCitzdGF0aWMgaW50Cit6aXB4X3BwbWQ4X2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWNvbnN0IHZvaWQqIHA7CisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IG9yZGVyOworCXVpbnQzMl90IG1lbTsKKwl1aW50MzJfdCByZXN0b3JlX21ldGhvZDsKKworCS8qIFJlbW92ZSBwcmV2aW91cyBkZWNvbXByZXNzaW9uIGNvbnRleHQgaWYgaXQgZXhpc3RzLiAqLworCWlmKHppcC0+cHBtZDhfdmFsaWQpIHsKKwkJX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucy5QcG1kOF9GcmVlKCZ6aXAtPnBwbWQ4KTsKKwkJemlwLT5wcG1kOF92YWxpZCA9IDA7CisJfQorCisJLyogQ3JlYXRlIGEgbmV3IGRlY29tcHJlc3Npb24gY29udGV4dC4gKi8KKwlfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0NvbnN0cnVjdCgmemlwLT5wcG1kOCk7CisJemlwLT5wcG1kOF9zdHJlYW1fZmFpbGVkID0gMDsKKworCS8qIFNldHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHJlcXVpcmVkIGJ5IFBwbWQ4IGRlY29tcHJlc3Nvci4gVGhlCisJICogJ3BwbWRfcmVhZCcgZnVuY3Rpb24gd2lsbCBmZWVkIG5ldyBieXRlcyB0byB0aGUgZGVjb21wcmVzc29yLAorCSAqIGFuZCB3aWxsIGluY3JlbWVudCB0aGUgJ3ppcC0+emlweF9wcG1kX3JlYWRfY29tcHJlc3NlZCcgY291bnRlci4gKi8KKwl6aXAtPnBwbWQ4LlN0cmVhbS5JbiA9ICZ6aXAtPnppcHhfcHBtZF9zdHJlYW07CisJemlwLT56aXB4X3BwbWRfc3RyZWFtLmEgPSBhOworCXppcC0+emlweF9wcG1kX3N0cmVhbS5SZWFkID0gJnBwbWRfcmVhZDsKKworCS8qIFJlc2V0IG51bWJlciBvZiByZWFkIGJ5dGVzIHRvIDAuICovCisJemlwLT56aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkID0gMDsKKworCS8qIFJlYWQgUHBtZDggaGVhZGVyICgyIGJ5dGVzKS4gKi8KKwlwID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMiwgTlVMTCk7CisJaWYoIXApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIGZpbGUgZGF0YSBpbiBQUE1kOCBzdHJlYW0iKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCAyKTsKKworCS8qIERlY29kZSB0aGUgc3RyZWFtJ3MgY29tcHJlc3Npb24gcGFyYW1ldGVycy4gKi8KKwl2YWwgPSBhcmNoaXZlX2xlMTZkZWMocCk7CisJb3JkZXIgPSAodmFsICYgMTUpICsgMTsKKwltZW0gPSAoKHZhbCA+PiA0KSAmIDB4ZmYpICsgMTsKKwlyZXN0b3JlX21ldGhvZCA9ICh2YWwgPj4gMTIpOworCisJaWYob3JkZXIgPCAyIHx8IHJlc3RvcmVfbWV0aG9kID4gMikgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJJbnZhbGlkIHBhcmFtZXRlciBzZXQgaW4gUFBNZDggc3RyZWFtIChvcmRlcj0lZCwgIgorCQkgICAgInJlc3RvcmU9JWQpIiwgb3JkZXIsIHJlc3RvcmVfbWV0aG9kKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIG1lbW9yeSBuZWVkZWQgdG8gcHJvcGVybHkgZGVjb21wcmVzcyB0aGUgZmlsZS4gKi8KKwlpZighX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucy5QcG1kOF9BbGxvYygmemlwLT5wcG1kOCwgbWVtIDw8IDIwKSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFBQTWQ4IHN0cmVhbTogJWQgYnl0ZXMiLAorCQkgICAgbWVtIDw8IDIwKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwkvKiBTaWduYWwgdGhlIGNsZWFudXAgZnVuY3Rpb24gdG8gcmVsZWFzZSBQcG1kOCBjb250ZXh0IGluIHRoZQorCSAqIGNsZWFudXAgcGhhc2UuICovCisJemlwLT5wcG1kOF92YWxpZCA9IDE7CisKKwkvKiBQZXJmb3JtIGZ1cnRoZXIgUHBtZDggaW5pdGlhbGl6YXRpb24uICovCisJaWYoIV9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfUmFuZ2VEZWNfSW5pdCgmemlwLT5wcG1kOCkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJQUE1kOCBzdHJlYW0gcmFuZ2UgZGVjb2RlciBpbml0aWFsaXphdGlvbiBlcnJvciIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCV9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfSW5pdCgmemlwLT5wcG1kOCwgb3JkZXIsCisJICAgIHJlc3RvcmVfbWV0aG9kKTsKKworCS8qIEFsbG9jYXRlIHRoZSBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdW5jb21wcmVzc2VkIGRhdGEuICovCisJZnJlZSh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIpOworCisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUgPSAyNTYgKiAxMDI0OworCXppcC0+dW5jb21wcmVzc2VkX2J1ZmZlciA9CisJICAgICh1aW50OF90KikgbWFsbG9jKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplKTsKKworCWlmKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlciA9PSBOVUxMKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCSAgICAiTm8gbWVtb3J5IGZvciBQUE1kOCBkZWNvbXByZXNzaW9uIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIFBwbWQ4IGluaXRpYWxpemF0aW9uIGlzIGRvbmUuICovCisJemlwLT5kZWNvbXByZXNzX2luaXQgPSAxOworCisJLyogV2UndmUgYWxyZWFkeSByZWFkIDIgYnl0ZXMgaW4gdGhlIG91dHB1dCBzdHJlYW0uIEFkZGl0aW9uYWxseSwKKwkgKiBQcG1kOCBpbml0aWFsaXphdGlvbiBjb2RlIGNvdWxkIHJlYWQgc29tZSBkYXRhIGFzIHdlbGwuIFNvIHdlCisJICogYXJlIGFkdmFuY2luZyB0aGUgc3RyZWFtIGJ5IDIgYnl0ZXMgcGx1cyB3aGF0ZXZlciBudW1iZXIgb2YKKwkgKiBieXRlcyBQcG1kOCBpbml0IGZ1bmN0aW9uIHVzZWQuICovCisJemlwLT5lbnRyeV9jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gMiArIHppcC0+emlweF9wcG1kX3JlYWRfY29tcHJlc3NlZDsKKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50Cit6aXBfcmVhZF9kYXRhX3ppcHhfcHBtZChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBjb25zdCB2b2lkICoqYnVmZiwKKyAgICBzaXplX3QgKnNpemUsIGludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgemlwKiB6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOworCWludCByZXQ7CisJc2l6ZV90IGNvbnN1bWVkX2J5dGVzID0gMDsKKwlzc2l6ZV90IGJ5dGVzX2F2YWlsID0gMDsKKworCSh2b2lkKSBvZmZzZXQ7IC8qIFVOVVNFRCAqLworCisJLyogSWYgd2UncmUgaGVyZSBmb3IgdGhlIGZpcnN0IHRpbWUsIGluaXRpYWxpemUgUHBtZDggZGVjb21wcmVzc2lvbgorCSAqIGNvbnRleHQgZmlyc3QuICovCisJaWYoIXppcC0+ZGVjb21wcmVzc19pbml0KSB7CisJCXJldCA9IHppcHhfcHBtZDhfaW5pdChhLCB6aXApOworCQlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogRmV0Y2ggZm9yIG1vcmUgZGF0YS4gV2UncmUgcmVhZGluZyAxIGJ5dGUgaGVyZSwgYnV0IGxpYmFyY2hpdmUKKwkgKiBzaG91bGQgcHJlZmV0Y2ggbW9yZSBieXRlcy4gKi8KKwkodm9pZCkgX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMSwgJmJ5dGVzX2F2YWlsKTsKKwlpZihieXRlc19hdmFpbCA8IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIFBQTWQ4IGZpbGUgYm9keSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCS8qIFRoaXMgY291bnRlciB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIHBwbWRfcmVhZCgpLCB3aGljaCBhdCBvbmUKKwkgKiBwb2ludCB3aWxsIGJlIGNhbGxlZCBieSBQcG1kOF9EZWNvZGVTeW1ib2wuICovCisJemlwLT56aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkID0gMDsKKworCS8qIERlY29tcHJlc3Npb24gbG9vcC4gKi8KKwlkbyB7CisJCWludCBzeW0gPSBfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0RlY29kZVN5bWJvbCgKKwkJICAgICZ6aXAtPnBwbWQ4KTsKKwkJaWYoc3ltIDwgMCkgeworCQkJemlwLT5lbmRfb2ZfZW50cnkgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBUaGlzIGZpZWxkIGlzIHNldCBieSBwcG1kX3JlYWQoKSB3aGVuIHRoZXJlIHdhcyBubyBtb3JlIGRhdGEKKwkJICogdG8gYmUgcmVhZC4gKi8KKwkJaWYoemlwLT5wcG1kOF9zdHJlYW1fZmFpbGVkKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJUcnVuY2F0ZWQgUFBNZDggZmlsZSBib2R5Iik7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQl9CisKKwkJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyW2NvbnN1bWVkX2J5dGVzXSA9ICh1aW50OF90KSBzeW07CisJCSsrY29uc3VtZWRfYnl0ZXM7CisJfSB3aGlsZShjb25zdW1lZF9ieXRlcyA8IHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplKTsKKworCS8qIFVwZGF0ZSBwb2ludGVycyBmb3IgbGliYXJjaGl2ZS4gKi8KKwkqYnVmZiA9IHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcjsKKwkqc2l6ZSA9IGNvbnN1bWVkX2J5dGVzOworCisJLyogVXBkYXRlIHBvaW50ZXJzIHNvIHdlIGNhbiBjb250aW51ZSBkZWNvbXByZXNzaW9uIGluIGFub3RoZXIgY2FsbC4gKi8KKwl6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyAtPSB6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQ7CisJemlwLT5lbnRyeV9jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gemlwLT56aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkOworCXppcC0+ZW50cnlfdW5jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gY29uc3VtZWRfYnl0ZXM7CisKKwkvKiBJZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHN0cmVhbSwgZGVpbml0aWFsaXplIFBwbWQ4IGNvbnRleHQuICovCisJaWYoemlwLT5lbmRfb2ZfZW50cnkpIHsKKwkJX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucy5QcG1kOF9GcmVlKCZ6aXAtPnBwbWQ4KTsKKwkJemlwLT5wcG1kOF92YWxpZCA9IDA7CisJfQorCisJLyogU2VlayBmb3Igb3B0aW9uYWwgbWFya2VyLCBzYW1lIHdheSBhcyBpbiBlYWNoIHppcCBlbnRyeS4gKi8KKwlyZXQgPSBjb25zdW1lX29wdGlvbmFsX21hcmtlcihhLCB6aXApOworCWlmIChyZXQgIT0gQVJDSElWRV9PSykKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBBUkNISVZFX09LOworfQorCisjaWZkZWYgSEFWRV9CWkxJQl9ICitzdGF0aWMgaW50Cit6aXB4X2J6aXAyX2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWludCByOworCisJLyogRGVhbGxvY2F0ZSBhbHJlYWR5IGV4aXN0aW5nIEJaMiBkZWNvbXByZXNzaW9uIGNvbnRleHQgaWYgaXQKKwkgKiBleGlzdHMuICovCisJaWYoemlwLT5ienN0cmVhbV92YWxpZCkgeworCQlCWjJfYnpEZWNvbXByZXNzRW5kKCZ6aXAtPmJ6c3RyZWFtKTsKKwkJemlwLT5ienN0cmVhbV92YWxpZCA9IDA7CisJfQorCisJLyogQWxsb2NhdGUgYSBuZXcgQloyIGRlY29tcHJlc3Npb24gY29udGV4dC4gKi8KKwltZW1zZXQoJnppcC0+YnpzdHJlYW0sIDAsIHNpemVvZihiel9zdHJlYW0pKTsKKwlyID0gQloyX2J6RGVjb21wcmVzc0luaXQoJnppcC0+YnpzdHJlYW0sIDAsIDEpOworCWlmKHIgIT0gQlpfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkgICAgImJ6aXAyIGluaXRpYWxpemF0aW9uIGZhaWxlZCglZCkiLAorCQkgICAgcik7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOworCX0KKworCS8qIE1hcmsgdGhlIGJ6c3RyZWFtIGZpZWxkIHRvIGJlIHJlbGVhc2VkIGluIGNsZWFudXAgcGhhc2UuICovCisJemlwLT5ienN0cmVhbV92YWxpZCA9IDE7CisKKwkvKiAoUmUpYWxsb2NhdGUgdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiBkZWNvbXByZXNzZWQgYnl0ZXMuICovCisJZnJlZSh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIpOworCisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUgPSAyNTYgKiAxMDI0OworCXppcC0+dW5jb21wcmVzc2VkX2J1ZmZlciA9CisJICAgICh1aW50OF90KikgbWFsbG9jKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplKTsKKwlpZiAoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJObyBtZW1vcnkgZm9yIGJ6aXAyIGRlY29tcHJlc3Npb24iKTsKKwkJICAgIHJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIEluaXRpYWxpemF0aW9uIGRvbmUuICovCisJemlwLT5kZWNvbXByZXNzX2luaXQgPSAxOworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50Cit6aXBfcmVhZF9kYXRhX3ppcHhfYnppcDIoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgY29uc3Qgdm9pZCAqKmJ1ZmYsCisgICAgc2l6ZV90ICpzaXplLCBpbnQ2NF90ICpvZmZzZXQpCit7CisJc3RydWN0IHppcCAqemlwID0gKHN0cnVjdCB6aXAgKikoYS0+Zm9ybWF0LT5kYXRhKTsKKwlzc2l6ZV90IGJ5dGVzX2F2YWlsID0gMCwgaW5fYnl0ZXMsIHRvX2NvbnN1bWU7CisJY29uc3Qgdm9pZCAqY29tcHJlc3NlZF9idWZmOworCWludCByOworCXVpbnQ2NF90IHRvdGFsX291dDsKKworCSh2b2lkKSBvZmZzZXQ7IC8qIFVOVVNFRCAqLworCisJLyogSW5pdGlhbGl6ZSBkZWNvbXByZXNzaW9uIGNvbnRleHQgaWYgd2UncmUgaGVyZSBmb3IgdGhlIGZpcnN0IHRpbWUuICovCisJaWYoIXppcC0+ZGVjb21wcmVzc19pbml0KSB7CisJCXIgPSB6aXB4X2J6aXAyX2luaXQoYSwgemlwKTsKKwkJaWYociAhPSBBUkNISVZFX09LKQorCQkJcmV0dXJuIHI7CisJfQorCisJLyogRmV0Y2ggbW9yZSBjb21wcmVzc2VkIGJ5dGVzLiAqLworCWNvbXByZXNzZWRfYnVmZiA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIDEsICZieXRlc19hdmFpbCk7CisJaWYoYnl0ZXNfYXZhaWwgPCAwKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIlRydW5jYXRlZCBiemlwMiBmaWxlIGJvZHkiKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwlpbl9ieXRlcyA9IHppcG1pbih6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZywgYnl0ZXNfYXZhaWwpOworCWlmKGluX2J5dGVzIDwgMSkgeworCQkvKiBsaWJiejIgZG9lc24ndCBjb21wbGFpbiB3aGVuIGNhbGxlciBmZWVkcyBhdmFpbF9pbiA9PSAwLgorCQkgKiBJdCB3aWxsIGFjdHVhbGx5IHJldHVybiBzdWNjZXNzIGluIHRoaXMgY2FzZSwgd2hpY2ggaXMKKwkJICogdW5kZXNpcmFibGUuIFRoaXMgaXMgd2h5IHdlIG5lZWQgdG8gbWFrZSB0aGlzIGNoZWNrCisJCSAqIG1hbnVhbGx5LiAqLworCisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIlRydW5jYXRlZCBiemlwMiBmaWxlIGJvZHkiKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwkvKiBTZXR1cCBidWZmZXIgYm91bmRhcmllcy4gKi8KKwl6aXAtPmJ6c3RyZWFtLm5leHRfaW4gPSAoY2hhciopKHVpbnRwdHJfdCkgY29tcHJlc3NlZF9idWZmOworCXppcC0+YnpzdHJlYW0uYXZhaWxfaW4gPSBpbl9ieXRlczsKKwl6aXAtPmJ6c3RyZWFtLnRvdGFsX2luX2hpMzIgPSAwOworCXppcC0+YnpzdHJlYW0udG90YWxfaW5fbG8zMiA9IDA7CisJemlwLT5ienN0cmVhbS5uZXh0X291dCA9IChjaGFyKikgemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCXppcC0+YnpzdHJlYW0uYXZhaWxfb3V0ID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemU7CisJemlwLT5ienN0cmVhbS50b3RhbF9vdXRfaGkzMiA9IDA7CisJemlwLT5ienN0cmVhbS50b3RhbF9vdXRfbG8zMiA9IDA7CisKKwkvKiBQZXJmb3JtIHRoZSBkZWNvbXByZXNzaW9uLiAqLworCXIgPSBCWjJfYnpEZWNvbXByZXNzKCZ6aXAtPmJ6c3RyZWFtKTsKKwlzd2l0Y2gocikgeworCQljYXNlIEJaX1NUUkVBTV9FTkQ6CisJCQkvKiBJZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGRlaW5pdGlhbGl6ZSB0aGUKKwkJCSAqIGRlY29tcHJlc3Npb24gY29udGV4dCBub3cuICovCisJCQlzd2l0Y2goQloyX2J6RGVjb21wcmVzc0VuZCgmemlwLT5ienN0cmVhbSkpIHsKKwkJCQljYXNlIEJaX09LOgorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCQkJICAgICJGYWlsZWQgdG8gY2xlYW4gdXAgYnppcDIgIgorCQkJCQkgICAgImRlY29tcHJlc3NvciIpOworCQkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCX0KKworCQkJemlwLT5lbmRfb2ZfZW50cnkgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgQlpfT0s6CisJCQkvKiBUaGUgZGVjb21wcmVzc29yIGhhcyBzdWNjZXNzZnVsbHkgZGVjb2RlZCB0aGlzCisJCQkgKiBjaHVuayBvZiBkYXRhLCBidXQgbW9yZSBkYXRhIGlzIHN0aWxsIGluIHF1ZXVlLiAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJICAgICJiemlwMiBkZWNvbXByZXNzaW9uIGZhaWxlZCIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogVXBkYXRlIHRoZSBwb2ludGVycyBzbyBkZWNvbXByZXNzb3IgY2FuIGNvbnRpbnVlIGRlY29kaW5nLiAqLworCXRvX2NvbnN1bWUgPSB6aXAtPmJ6c3RyZWFtLnRvdGFsX2luX2xvMzI7CisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCB0b19jb25zdW1lKTsKKworCXRvdGFsX291dCA9ICgodWludDY0X3QpIHppcC0+YnpzdHJlYW0udG90YWxfb3V0X2hpMzIgPDwgMzIpICsKKwkgICAgemlwLT5ienN0cmVhbS50b3RhbF9vdXRfbG8zMjsKKworCXppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nIC09IHRvX2NvbnN1bWU7CisJemlwLT5lbnRyeV9jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gdG9fY29uc3VtZTsKKwl6aXAtPmVudHJ5X3VuY29tcHJlc3NlZF9ieXRlc19yZWFkICs9IHRvdGFsX291dDsKKworCS8qIEdpdmUgbGliYXJjaGl2ZSBpdHMgZHVlLiAqLworCSpzaXplID0gdG90YWxfb3V0OworCSpidWZmID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCisJLyogU2VlayBmb3Igb3B0aW9uYWwgbWFya2VyLCBsaWtlIGluIG90aGVyIGVudHJpZXMuICovCisJciA9IGNvbnN1bWVfb3B0aW9uYWxfbWFya2VyKGEsIHppcCk7CisJaWYociAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gcjsKKworCXJldHVybiBBUkNISVZFX09LOworfQorCisjZW5kaWYKKwogI2lmZGVmIEhBVkVfWkxJQl9ICiBzdGF0aWMgaW50CiB6aXBfZGVmbGF0ZV9pbml0KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCB6aXAgKnppcCkKQEAgLTEzNzEsOCArMjI1MiwxMCBAQAogCWlmICh6aXAtPnRjdHhfdmFsaWQgfHwgemlwLT5jY3R4X3ZhbGlkKSB7CiAJCWlmICh6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmcgPCAoc2l6ZV90KWJ5dGVzX2F2YWlsKSB7CiAJCQlzaXplX3QgYnVmZl9yZW1haW5pbmcgPQotCQkJICAgICh6aXAtPmRlY3J5cHRlZF9idWZmZXIgKyB6aXAtPmRlY3J5cHRlZF9idWZmZXJfc2l6ZSkKLQkJCSAgICAtICh6aXAtPmRlY3J5cHRlZF9wdHIgKyB6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmcpOworCQkJICAgICh6aXAtPmRlY3J5cHRlZF9idWZmZXIgKworCQkJICAgIHppcC0+ZGVjcnlwdGVkX2J1ZmZlcl9zaXplKQorCQkJICAgIC0gKHppcC0+ZGVjcnlwdGVkX3B0ciArCisJCQkgICAgemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nKTsKIAogCQkJaWYgKGJ1ZmZfcmVtYWluaW5nID4gKHNpemVfdClieXRlc19hdmFpbCkKIAkJCQlidWZmX3JlbWFpbmluZyA9IChzaXplX3QpYnl0ZXNfYXZhaWw7CkBAIC0xMzgzLDEyICsyMjY2LDEyIEBACiAJCQkJICAgICsgYnVmZl9yZW1haW5pbmcpCiAJCQkJICAgICAgPiB6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZykgewogCQkJCQlpZiAoemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgPAotCQkJCQkgICAgICAoaW50NjRfdCl6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmcpCisJCQkJCSAgICAoaW50NjRfdCl6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmcpCiAJCQkJCQlidWZmX3JlbWFpbmluZyA9IDA7CiAJCQkJCWVsc2UKIAkJCQkJCWJ1ZmZfcmVtYWluaW5nID0KIAkJCQkJCSAgICAoc2l6ZV90KXppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nCi0JCQkJCQkgICAgICAtIHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZzsKKwkJCQkJCSAgICAtIHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZzsKIAkJCQl9CiAJCQl9CiAJCQlpZiAoYnVmZl9yZW1haW5pbmcgPiAwKSB7CkBAIC0xNDA3LDcgKzIyOTAsOCBAQAogCQkJCQkgICAgICArIHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZywKIAkJCQkJICAgICZkc2l6ZSk7CiAJCQkJfQotCQkJCXppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZyArPSBidWZmX3JlbWFpbmluZzsKKwkJCQl6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmcgKz0KKwkJCQkgICAgYnVmZl9yZW1haW5pbmc7CiAJCQl9CiAJCX0KIAkJYnl0ZXNfYXZhaWwgPSB6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmc7CkBAIC0xNDcwLDQyICsyMzU0LDkgQEAKIAkJCXJldHVybiAocik7CiAJfQogCi0JaWYgKHppcC0+ZW5kX29mX2VudHJ5ICYmICh6aXAtPmVudHJ5LT56aXBfZmxhZ3MgJiBaSVBfTEVOR1RIX0FUX0VORCkpIHsKLQkJY29uc3QgY2hhciAqcDsKLQotCQlpZiAoTlVMTCA9PSAocCA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIDI0LCBOVUxMKSkpIHsKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgIlRydW5jYXRlZCBaSVAgZW5kLW9mLWZpbGUgcmVjb3JkIik7Ci0JCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwotCQl9Ci0JCS8qIENvbnN1bWUgdGhlIG9wdGlvbmFsIFBLXDAwN1wwMTAgbWFya2VyLiAqLwotCQlpZiAocFswXSA9PSAnUCcgJiYgcFsxXSA9PSAnSycgJiYKLQkJICAgIHBbMl0gPT0gJ1wwMDcnICYmIHBbM10gPT0gJ1wwMTAnKSB7Ci0JCQlwICs9IDQ7Ci0JCQl6aXAtPnVuY29uc3VtZWQgPSA0OwotCQl9Ci0JCWlmICh6aXAtPmVudHJ5LT5mbGFncyAmIExBX1VTRURfWklQNjQpIHsKLQkJCXVpbnQ2NF90IGNvbXByZXNzZWQsIHVuY29tcHJlc3NlZDsKLQkJCXppcC0+ZW50cnktPmNyYzMyID0gYXJjaGl2ZV9sZTMyZGVjKHApOwotCQkJY29tcHJlc3NlZCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgNCk7Ci0JCQl1bmNvbXByZXNzZWQgPSBhcmNoaXZlX2xlNjRkZWMocCArIDEyKTsKLQkJCWlmIChjb21wcmVzc2VkID4gSU5UNjRfTUFYIHx8IHVuY29tcHJlc3NlZCA+IElOVDY0X01BWCkgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJCSAgICAiT3ZlcmZsb3cgb2YgNjQtYml0IGZpbGUgc2l6ZXMiKTsKLQkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7Ci0JCQl9Ci0JCQl6aXAtPmVudHJ5LT5jb21wcmVzc2VkX3NpemUgPSBjb21wcmVzc2VkOwotCQkJemlwLT5lbnRyeS0+dW5jb21wcmVzc2VkX3NpemUgPSB1bmNvbXByZXNzZWQ7Ci0JCQl6aXAtPnVuY29uc3VtZWQgKz0gMjA7Ci0JCX0gZWxzZSB7Ci0JCQl6aXAtPmVudHJ5LT5jcmMzMiA9IGFyY2hpdmVfbGUzMmRlYyhwKTsKLQkJCXppcC0+ZW50cnktPmNvbXByZXNzZWRfc2l6ZSA9IGFyY2hpdmVfbGUzMmRlYyhwICsgNCk7Ci0JCQl6aXAtPmVudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9IGFyY2hpdmVfbGUzMmRlYyhwICsgOCk7Ci0JCQl6aXAtPnVuY29uc3VtZWQgKz0gMTI7Ci0JCX0KLQl9CisJciA9IGNvbnN1bWVfb3B0aW9uYWxfbWFya2VyKGEsIHppcCk7CisJaWYgKHIgIT0gQVJDSElWRV9PSykKKwkJcmV0dXJuIChyKTsKIAogCXJldHVybiAoQVJDSElWRV9PSyk7CiB9CkBAIC0xOTMzLDYgKzI3ODQsMjQgQEAKIAljYXNlIDA6ICAvKiBObyBjb21wcmVzc2lvbi4gKi8KIAkJciA9ICB6aXBfcmVhZF9kYXRhX25vbmUoYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKIAkJYnJlYWs7CisjaWZkZWYgSEFWRV9CWkxJQl9ICisJY2FzZSAxMjogLyogWklQeCBiemlwMiBjb21wcmVzc2lvbi4gKi8KKwkJciA9IHppcF9yZWFkX2RhdGFfemlweF9iemlwMihhLCBidWZmLCBzaXplLCBvZmZzZXQpOworCQlicmVhazsKKyNlbmRpZgorI2lmIEhBVkVfTFpNQV9IICYmIEhBVkVfTElCTFpNQQorCWNhc2UgMTQ6IC8qIFpJUHggTFpNQSBjb21wcmVzc2lvbi4gKi8KKwkJciA9IHppcF9yZWFkX2RhdGFfemlweF9sem1hX2Fsb25lKGEsIGJ1ZmYsIHNpemUsIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgOTU6IC8qIFpJUHggWFogY29tcHJlc3Npb24uICovCisJCXIgPSB6aXBfcmVhZF9kYXRhX3ppcHhfeHooYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKKwkJYnJlYWs7CisjZW5kaWYKKwkvKiBQUE1kIHN1cHBvcnQgaXMgYnVpbHQtaW4sIHNvIHdlIGRvbid0IG5lZWQgYW55ICNpZiBndWFyZHMuICovCisJY2FzZSA5ODogLyogWklQeCBQUE1kIGNvbXByZXNzaW9uLiAqLworCQlyID0gemlwX3JlYWRfZGF0YV96aXB4X3BwbWQoYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKKwkJYnJlYWs7CisKICNpZmRlZiBIQVZFX1pMSUJfSAogCWNhc2UgODogLyogRGVmbGF0ZSBjb21wcmVzc2lvbi4gKi8KIAkJciA9ICB6aXBfcmVhZF9kYXRhX2RlZmxhdGUoYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKQEAgLTE5NDEsOCArMjgxMCw4IEBACiAJZGVmYXVsdDogLyogVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24uICovCiAJCS8qIFJldHVybiBhIHdhcm5pbmcuICovCiAJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkgICAgIlVuc3VwcG9ydGVkIFpJUCBjb21wcmVzc2lvbiBtZXRob2QgKCVzKSIsCi0JCSAgICBjb21wcmVzc2lvbl9uYW1lKHppcC0+ZW50cnktPmNvbXByZXNzaW9uKSk7CisJCSAgICAiVW5zdXBwb3J0ZWQgWklQIGNvbXByZXNzaW9uIG1ldGhvZCAoJWQ6ICVzKSIsCisJCSAgICB6aXAtPmVudHJ5LT5jb21wcmVzc2lvbiwgY29tcHJlc3Npb25fbmFtZSh6aXAtPmVudHJ5LT5jb21wcmVzc2lvbikpOwogCQkvKiBXZSBjYW4ndCBkZWNvbXByZXNzIHRoaXMgZW50cnksIGJ1dCB3ZSB3aWxsCiAJCSAqIGJlIGFibGUgdG8gc2tpcCgpIGl0IGFuZCB0cnkgdGhlIG5leHQgZW50cnkuICovCiAJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwpAQCAtMjAwMCwxMSArMjg2OSwyOSBAQAogCXN0cnVjdCB6aXBfZW50cnkgKnppcF9lbnRyeSwgKm5leHRfemlwX2VudHJ5OwogCiAJemlwID0gKHN0cnVjdCB6aXAgKikoYS0+Zm9ybWF0LT5kYXRhKTsKKwogI2lmZGVmIEhBVkVfWkxJQl9ICiAJaWYgKHppcC0+c3RyZWFtX3ZhbGlkKQogCQlpbmZsYXRlRW5kKCZ6aXAtPnN0cmVhbSk7Ci0JZnJlZSh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIpOwogI2VuZGlmCisKKyNpZiBIQVZFX0xaTUFfSCAmJiBIQVZFX0xJQkxaTUEKKyAgICBpZiAoemlwLT56aXB4X2x6bWFfdmFsaWQpIHsKKwkJbHptYV9lbmQoJnppcC0+emlweF9sem1hX3N0cmVhbSk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0JaTElCX0gKKwlpZiAoemlwLT5ienN0cmVhbV92YWxpZCkgeworCQlCWjJfYnpEZWNvbXByZXNzRW5kKCZ6aXAtPmJ6c3RyZWFtKTsKKwl9CisjZW5kaWYKKworCWZyZWUoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyKTsKKworCWlmICh6aXAtPnBwbWQ4X3ZhbGlkKQorCQlfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0ZyZWUoJnppcC0+cHBtZDgpOworCiAJaWYgKHppcC0+emlwX2VudHJpZXMpIHsKIAkJemlwX2VudHJ5ID0gemlwLT56aXBfZW50cmllczsKIAkJd2hpbGUgKHppcF9lbnRyeSAhPSBOVUxMKSB7CkBAIC0yNjI4LDcgKzM1MTUsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1zbHVycF9jZW50cmFsX2RpcmVjdG9yeShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgemlwICp6aXApCitzbHVycF9jZW50cmFsX2RpcmVjdG9yeShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSogZW50cnksCisgICAgc3RydWN0IHppcCAqemlwKQogewogCXNzaXplX3QgaTsKIAl1bnNpZ25lZCBmb3VuZDsKQEAgLTI3MDgsNiArMzU5NiwxMSBAQAogCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAKIAkJemlwX2VudHJ5ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgemlwX2VudHJ5KSk7CisJCWlmICh6aXBfZW50cnkgPT0gTlVMTCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKKwkJCQkiQ2FuJ3QgYWxsb2NhdGUgemlwIGVudHJ5Iik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQogCQl6aXBfZW50cnktPm5leHQgPSB6aXAtPnppcF9lbnRyaWVzOwogCQl6aXBfZW50cnktPmZsYWdzIHw9IExBX0ZST01fQ0VOVFJBTF9ESVJFQ1RPUlk7CiAJCXppcC0+emlwX2VudHJpZXMgPSB6aXBfZW50cnk7CkBAIC0yNzMzLDggKzM2MjYsMTAgQEAKIAkJZmlsZW5hbWVfbGVuZ3RoID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAyOCk7CiAJCWV4dHJhX2xlbmd0aCA9IGFyY2hpdmVfbGUxNmRlYyhwICsgMzApOwogCQljb21tZW50X2xlbmd0aCA9IGFyY2hpdmVfbGUxNmRlYyhwICsgMzIpOwotCQkvKiBkaXNrX3N0YXJ0ID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzNCk7ICovIC8qIEJldHRlciBiZSB6ZXJvLiAqLwotCQkvKiBpbnRlcm5hbF9hdHRyaWJ1dGVzID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzNik7ICovIC8qIHRleHQgYml0ICovCisJCS8qIGRpc2tfc3RhcnQgPSBhcmNoaXZlX2xlMTZkZWMocCArIDM0KTsKKwkJICogICBCZXR0ZXIgYmUgemVyby4KKwkJICogaW50ZXJuYWxfYXR0cmlidXRlcyA9IGFyY2hpdmVfbGUxNmRlYyhwICsgMzYpOworCQkgKiAgIHRleHQgYml0ICovCiAJCWV4dGVybmFsX2F0dHJpYnV0ZXMgPSBhcmNoaXZlX2xlMzJkZWMocCArIDM4KTsKIAkJemlwX2VudHJ5LT5sb2NhbF9oZWFkZXJfb2Zmc2V0ID0KIAkJICAgIGFyY2hpdmVfbGUzMmRlYyhwICsgNDIpICsgY29ycmVjdGlvbjsKQEAgLTI3NzAsNyArMzY2NSw4IEBACiAJCQkgICAgIlRydW5jYXRlZCBaSVAgZmlsZSBoZWFkZXIiKTsKIAkJCXJldHVybiBBUkNISVZFX0ZBVEFMOwogCQl9Ci0JCWlmIChBUkNISVZFX09LICE9IHByb2Nlc3NfZXh0cmEoYSwgcCArIGZpbGVuYW1lX2xlbmd0aCwgZXh0cmFfbGVuZ3RoLCB6aXBfZW50cnkpKSB7CisJCWlmIChBUkNISVZFX09LICE9IHByb2Nlc3NfZXh0cmEoYSwgZW50cnksIHAgKyBmaWxlbmFtZV9sZW5ndGgsCisJCSAgICBleHRyYV9sZW5ndGgsIHppcF9lbnRyeSkpIHsKIAkJCXJldHVybiBBUkNISVZFX0ZBVEFMOwogCQl9CiAKQEAgLTI3OTIsNyArMzY4OCw4IEBACiAJCQkJICogYSBkaXJlY3RvcnkuIFdlIHNob3VsZCB0cmVhdCBpdCBhcyBhIG5vbgogCQkJCSAqIHJlc291cmNlIGZvcmsgZmlsZSB0byBleHBvc2UgaXQuICovCiAJCQkJaWYgKG5hbWVbZmlsZW5hbWVfbGVuZ3RoLTFdICE9ICcvJyAmJgotCQkJCSAgICAociAtIG5hbWUgPCAzIHx8IHJbMF0gIT0gJy4nIHx8IHJbMV0gIT0gJ18nKSkgeworCQkJCSAgICAociAtIG5hbWUgPCAzIHx8IHJbMF0gIT0gJy4nIHx8CisJCQkJICAgICByWzFdICE9ICdfJykpIHsKIAkJCQkJX19hcmNoaXZlX3JiX3RyZWVfaW5zZXJ0X25vZGUoCiAJCQkJCSAgICAmemlwLT50cmVlLCAmemlwX2VudHJ5LT5ub2RlKTsKIAkJCQkJLyogRXhwb3NlIGl0cyBwYXJlbnQgZGlyZWN0b3JpZXMuICovCkBAIC0yODY5LDggKzM3NjYsMTAgQEAKIAlzd2l0Y2gocnNyYy0+Y29tcHJlc3Npb24pIHsKIAljYXNlIDA6ICAvKiBObyBjb21wcmVzc2lvbi4gKi8KIAkJaWYgKHJzcmMtPnVuY29tcHJlc3NlZF9zaXplICE9IHJzcmMtPmNvbXByZXNzZWRfc2l6ZSkgewotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgIk1hbGZvcm1lZCBPUyBYIG1ldGFkYXRhIGVudHJ5OiBpbmNvbnNpc3RlbnQgc2l6ZSIpOworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiTWFsZm9ybWVkIE9TIFggbWV0YWRhdGEgZW50cnk6ICIKKwkJCSAgICAiaW5jb25zaXN0ZW50IHNpemUiKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCX0KICNpZmRlZiBIQVZFX1pMSUJfSApAQCAtMzAyOSw3ICszOTI4LDcgQEAKIAkJYS0+YXJjaGl2ZS5hcmNoaXZlX2Zvcm1hdF9uYW1lID0gIlpJUCI7CiAKIAlpZiAoemlwLT56aXBfZW50cmllcyA9PSBOVUxMKSB7Ci0JCXIgPSBzbHVycF9jZW50cmFsX2RpcmVjdG9yeShhLCB6aXApOworCQlyID0gc2x1cnBfY2VudHJhbF9kaXJlY3RvcnkoYSwgZW50cnksIHppcCk7CiAJCWlmIChyICE9IEFSQ0hJVkVfT0spCiAJCQlyZXR1cm4gcjsKIAkJLyogR2V0IGZpcnN0IGVudHJ5IHdob3NlIGxvY2FsIGhlYWRlciBvZmZzZXQgaXMgbG93ZXIgdGhhbgpAQCAtMzA1OSw4ICszOTU4LDggQEAKIAlfX2FyY2hpdmVfcmVhZF9yZXNldF9wYXNzcGhyYXNlKGEpOwogCiAJLyogRmlsZSBlbnRyaWVzIGFyZSBzb3J0ZWQgYnkgdGhlIGhlYWRlciBvZmZzZXQsIHdlIHNob3VsZCBtb3N0bHkKLQkgKiB1c2UgX19hcmNoaXZlX3JlYWRfY29uc3VtZSB0byBhZHZhbmNlIGEgcmVhZCBwb2ludCB0byBhdm9pZCByZWR1bmRhbnQKLQkgKiBkYXRhIHJlYWRpbmcuICAqLworCSAqIHVzZSBfX2FyY2hpdmVfcmVhZF9jb25zdW1lIHRvIGFkdmFuY2UgYSByZWFkIHBvaW50IHRvIGF2b2lkCisJICogcmVkdW5kYW50IGRhdGEgcmVhZGluZy4gICovCiAJb2Zmc2V0ID0gYXJjaGl2ZV9maWx0ZXJfYnl0ZXMoJmEtPmFyY2hpdmUsIDApOwogCWlmIChvZmZzZXQgPCB6aXAtPmVudHJ5LT5sb2NhbF9oZWFkZXJfb2Zmc2V0KQogCQlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsCkBAIC0zMTQxLDMgKzQwNDAsNSBAQAogCQlmcmVlKHppcCk7CiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KKworLyojIHZpbTpzZXQgbm9ldDoqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuYwppbmRleCA4NTU5NGNjLi5jNzdkY2Y1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuYwpAQCAtNzUsNiArNzUsOSBAQAogI2RlZmluZSB3bWVtbW92ZShhLGIsaSkgICh3Y2hhcl90ICopbWVtbW92ZSgoYSksIChiKSwgKGkpICogc2l6ZW9mKHdjaGFyX3QpKQogI2VuZGlmCiAKKyN1bmRlZiBtYXgKKyNkZWZpbmUgbWF4KGEsIGIpICAgICAgICgoYSk+KGIpPyhhKTooYikpCisKIHN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252IHsKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udgkqbmV4dDsKIAljaGFyCQkJCSpmcm9tX2NoYXJzZXQ7CkBAIC00NTgsNyArNDYxLDcgQEAKIAogCWlmIChmcm9tX2NwID09IENQX0NfTE9DQUxFKSB7CiAJCS8qCi0JCSAqICJDIiBsb2NhbGUgc3BlY2lhbCBwcm9jZXNzLgorCQkgKiAiQyIgbG9jYWxlIHNwZWNpYWwgcHJvY2Vzc2luZy4KIAkJICovCiAJCXdjaGFyX3QgKndzOwogCQljb25zdCB1bnNpZ25lZCBjaGFyICptcDsKQEAgLTU5MSw3ICs1OTQsNyBAQAogCSAqIE5vIHNpbmdsZSBieXRlIHdpbGwgYmUgbW9yZSB0aGFuIG9uZSB3aWRlIGNoYXJhY3RlciwKIAkgKiBzbyB0aGlzIGxlbmd0aCBlc3RpbWF0ZSB3aWxsIGFsd2F5cyBiZSBiaWcgZW5vdWdoLgogCSAqLwotCXNpemVfdCB3Y3NfbGVuZ3RoID0gbGVuOworCS8vIHNpemVfdCB3Y3NfbGVuZ3RoID0gbGVuOwogCXNpemVfdCBtYnNfbGVuZ3RoID0gbGVuOwogCWNvbnN0IGNoYXIgKm1icyA9IHA7CiAJd2NoYXJfdCAqd2NzOwpAQCAtNjAwLDcgKzYwMywxMSBAQAogCiAJbWVtc2V0KCZzaGlmdF9zdGF0ZSwgMCwgc2l6ZW9mKHNoaWZ0X3N0YXRlKSk7CiAjZW5kaWYKLQlpZiAoTlVMTCA9PSBhcmNoaXZlX3dzdHJpbmdfZW5zdXJlKGRlc3QsIGRlc3QtPmxlbmd0aCArIHdjc19sZW5ndGggKyAxKSkKKwkvKgorCSAqIEFzIHdlIGRlY2lkZWQgdG8gaGF2ZSB3Y3NfbGVuZ3RoID09IG1ic19sZW5ndGggPT0gbGVuCisJICogd2UgY2FuIHVzZSBsZW4gaGVyZSBpbnN0ZWFkIG9mIHdjc19sZW5ndGgKKwkgKi8KKwlpZiAoTlVMTCA9PSBhcmNoaXZlX3dzdHJpbmdfZW5zdXJlKGRlc3QsIGRlc3QtPmxlbmd0aCArIGxlbiArIDEpKQogCQlyZXR1cm4gKC0xKTsKIAl3Y3MgPSBkZXN0LT5zICsgZGVzdC0+bGVuZ3RoOwogCS8qCkBAIC02MDksNiArNjE2LDEyIEBACiAJICogbXVsdGkgYnl0ZXMuCiAJICovCiAJd2hpbGUgKCptYnMgJiYgbWJzX2xlbmd0aCA+IDApIHsKKwkJLyoKKwkJICogVGhlIGJ1ZmZlciB3ZSBhbGxvY2F0ZWQgaXMgYWx3YXlzIGJpZyBlbm91Z2guCisJCSAqIEtlZXAgdGhpcyBjb2RlIHBhdGggaW4gYSBjb21tZW50IGlmIHdlIGRlY2lkZSB0byBjaG9vc2UKKwkJICogc21hbGxlciB3Y3NfbGVuZ3RoIGluIHRoZSBmdXR1cmUKKwkJICovCisvKgogCQlpZiAod2NzX2xlbmd0aCA9PSAwKSB7CiAJCQlkZXN0LT5sZW5ndGggPSB3Y3MgLSBkZXN0LT5zOwogCQkJZGVzdC0+c1tkZXN0LT5sZW5ndGhdID0gTCdcMCc7CkBAIC02MTgsMjQgKzYzMSwyMCBAQAogCQkJCXJldHVybiAoLTEpOwogCQkJd2NzID0gZGVzdC0+cyArIGRlc3QtPmxlbmd0aDsKIAkJfQorKi8KICNpZiBIQVZFX01CUlRPV0MKLQkJciA9IG1icnRvd2Mod2NzLCBtYnMsIHdjc19sZW5ndGgsICZzaGlmdF9zdGF0ZSk7CisJCXIgPSBtYnJ0b3djKHdjcywgbWJzLCBtYnNfbGVuZ3RoLCAmc2hpZnRfc3RhdGUpOwogI2Vsc2UKLQkJciA9IG1idG93Yyh3Y3MsIG1icywgd2NzX2xlbmd0aCk7CisJCXIgPSBtYnRvd2Mod2NzLCBtYnMsIG1ic19sZW5ndGgpOwogI2VuZGlmCiAJCWlmIChyID09IChzaXplX3QpLTEgfHwgciA9PSAoc2l6ZV90KS0yKSB7CiAJCQlyZXRfdmFsID0gLTE7Ci0JCQlpZiAoZXJybm8gPT0gRUlMU0VRKSB7Ci0JCQkJKyttYnM7Ci0JCQkJLS1tYnNfbGVuZ3RoOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7CisJCQlicmVhazsKIAkJfQogCQlpZiAociA9PSAwIHx8IHIgPiBtYnNfbGVuZ3RoKQogCQkJYnJlYWs7CiAJCXdjcysrOwotCQl3Y3NfbGVuZ3RoLS07CisJCS8vIHdjc19sZW5ndGgtLTsKIAkJbWJzICs9IHI7CiAJCW1ic19sZW5ndGggLT0gcjsKIAl9CkBAIC02ODAsNyArNjg5LDcgQEAKIAogCWlmICh0b19jcCA9PSBDUF9DX0xPQ0FMRSkgewogCQkvKgotCQkgKiAiQyIgbG9jYWxlIHNwZWNpYWwgcHJvY2Vzcy4KKwkJICogIkMiIGxvY2FsZSBzcGVjaWFsIHByb2Nlc3NpbmcuCiAJCSAqLwogCQljb25zdCB3Y2hhcl90ICp3cCA9IHdzOwogCQljaGFyICpwOwpAQCAtNzk5LDcgKzgwOCw4IEBACiAJCQlhcy0+c1thcy0+bGVuZ3RoXSA9ICdcMCc7CiAJCQkvKiBSZS1hbGxvY2F0ZSBidWZmZXIgZm9yIE1CUy4gKi8KIAkJCWlmIChhcmNoaXZlX3N0cmluZ19lbnN1cmUoYXMsCi0JCQkgICAgYXMtPmxlbmd0aCArIGxlbiAqIDIgKyAxKSA9PSBOVUxMKQorCQkJICAgIGFzLT5sZW5ndGggKyBtYXgobGVuICogMiwKKwkJCSAgICAoc2l6ZV90KU1CX0NVUl9NQVgpICsgMSkgPT0gTlVMTCkKIAkJCQlyZXR1cm4gKC0xKTsKIAkJCXAgPSBhcy0+cyArIGFzLT5sZW5ndGg7CiAJCQllbmQgPSBhcy0+cyArIGFzLT5idWZmZXJfbGVuZ3RoIC0gTUJfQ1VSX01BWCAtMTsKQEAgLTg5MCw3ICs5MDAsNyBAQAogICAgICBzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqKSkKIHsKIAlpZiAoc2MgPT0gTlVMTCB8fCBzYy0+bmNvbnZlcnRlciA+PSAyKQotCQlfX2FyY2hpdmVfZXJyeCgxLCAiUHJvZ3JhbWluZyBlcnJvciIpOworCQlfX2FyY2hpdmVfZXJyeCgxLCAiUHJvZ3JhbW1pbmcgZXJyb3IiKTsKIAlzYy0+Y29udmVydGVyW3NjLT5uY29udmVydGVyKytdID0gY29udmVydGVyOwogfQogCkBAIC0zNDQxLDcgKzM0NTEsOCBAQAogCQkJYXMtPmxlbmd0aCA9IHAgLSBhcy0+czsKIAkJCS8qIFJlLWFsbG9jYXRlIGJ1ZmZlciBmb3IgTUJTLiAqLwogCQkJaWYgKGFyY2hpdmVfc3RyaW5nX2Vuc3VyZShhcywKLQkJCSAgICBhcy0+bGVuZ3RoICsgbGVuICogMiArIDEpID09IE5VTEwpCisJCQkgICAgYXMtPmxlbmd0aCArIG1heChsZW4gKiAyLAorCQkJICAgIChzaXplX3QpTUJfQ1VSX01BWCkgKyAxKSA9PSBOVUxMKQogCQkJCXJldHVybiAoLTEpOwogCQkJcCA9IGFzLT5zICsgYXMtPmxlbmd0aDsKIAkJCWVuZCA9IGFzLT5zICsgYXMtPmJ1ZmZlcl9sZW5ndGggLSBNQl9DVVJfTUFYIC0xOwpAQCAtNDA1Myw2ICs0MDY0LDcgQEAKIHsKICAgaWYgKHV0ZjggPT0gTlVMTCkgewogICAgIGFlcy0+YWVzX3NldCA9IDA7CisgICAgcmV0dXJuICgwKTsKICAgfQogICBhZXMtPmFlc19zZXQgPSBBRVNfU0VUX1VURjg7CiAgIGFyY2hpdmVfc3RyaW5nX2VtcHR5KCYoYWVzLT5hZXNfbWJzKSk7CkBAIC00MDY3LDYgKzQwNzksNyBAQAogewogCWlmICh3Y3MgPT0gTlVMTCkgewogCQlhZXMtPmFlc19zZXQgPSAwOworCQlyZXR1cm4gKDApOwogCX0KIAlhZXMtPmFlc19zZXQgPSBBRVNfU0VUX1dDUzsgLyogT25seSBXQ1MgZm9ybSBzZXQuICovCiAJYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJihhZXMtPmFlc19tYnMpKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZy5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nLmgKaW5kZXggNTZkZmJiMi4uMjdlMWFkNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nLmgKQEAgLTI2LDE1ICsyNiwxNSBAQAogICoKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfU1RSSU5HX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9TVFJJTkdfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfVEVTVAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfU1RSSU5HX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9TVFJJTkdfSF9JTkNMVURFRAotCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLyogcmVxdWlyZWQgZm9yIHdjaGFyX3Qgb24gc29tZSBzeXN0ZW1zICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmdfY29tcG9zaXRpb24uaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZ19jb21wb3NpdGlvbi5oCmluZGV4IDg5MDJhYzEuLmQwYWMzNDAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZ19jb21wb3NpdGlvbi5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZ19jb21wb3NpdGlvbi5oCkBAIC0zNCwxMyArMzQsMTMgQEAKICAqICBTZWUgYWxzbyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0L3RyMTUvCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1NUUklOR19DT01QT1NJVElPTl9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfU1RSSU5HX0NPTVBPU0lUSU9OX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9TVFJJTkdfQ09NUE9TSVRJT05fSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX1NUUklOR19DT01QT1NJVElPTl9IX0lOQ0xVREVECi0KIHN0cnVjdCB1bmljb2RlX2NvbXBvc2l0aW9uX3RhYmxlIHsKIAl1aW50MzJfdCBjcDE7CiAJdWludDMyX3QgY3AyOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC4zCmluZGV4IDk5YWI4NDIuLmQ1ZDRlN2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3V0aWwuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLjMKQEAgLTkyLDEwICs5MiwxMCBAQAogTm90IGdlbmVyYWxseSB1c2VkIGluIGNsaWVudCBjb2RlLgogLkl0IEZuIGFyY2hpdmVfY29tcHJlc3Npb24KIFN5bm9ueW0gZm9yCi0uRm4gYXJjaGl2ZV9maWx0ZXJfY29kZShhLCAwKSAuCisuRm4gYXJjaGl2ZV9maWx0ZXJfY29kZSBhIDAgLgogLkl0IEZuIGFyY2hpdmVfY29tcHJlc3Npb25fbmFtZQogU3lub255bSBmb3IKLS5GbiBhcmNoaXZlX2ZpbHRlcl9uYW1lKGEsIDApIC4KKy5GbiBhcmNoaXZlX2ZpbHRlcl9uYW1lIGEgMCAuCiAuSXQgRm4gYXJjaGl2ZV9jb3B5X2Vycm9yCiBDb3BpZXMgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSBvbmUgYXJjaGl2ZSB0byBhbm90aGVyLgogLkl0IEZuIGFyY2hpdmVfZXJybm8KQEAgLTE0MiwxMyArMTQyLDEzIEBACiBmaWx0ZXIgMSBpcyB0aGUgdXVkZWNvZGUgZmlsdGVyLAogYW5kIGZpbHRlciAyIGlzIHRoZSBwc2V1ZG8tZmlsdGVyIHRoYXQgd3JhcHMgdGhlIGFyY2hpdmUgcmVhZCBmdW5jdGlvbnMuCiBJbiB0aGlzIGNhc2UsIHJlcXVlc3RpbmcKLS5GbiBhcmNoaXZlX3Bvc2l0aW9uKGEsIC0xKQorLkZuIGFyY2hpdmVfcG9zaXRpb24gYSAtMQogd291bGQgYmUgYSBzeW5vbnltIGZvcgotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgMikKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgMgogd2hpY2ggd291bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IHJlYWQgZnJvbSB0aGUgYXJjaGl2ZSwgd2hpbGUKLS5GbiBhcmNoaXZlX3Bvc2l0aW9uKGEsIDEpCisuRm4gYXJjaGl2ZV9wb3NpdGlvbiBhIDEKIHdvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFmdGVyIHV1ZGVjb2RpbmcsIGFuZAotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgMCkKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgMAogd291bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWZ0ZXIgZGVjb21wcmVzc2lvbi4KIC5JdCBGbiBhcmNoaXZlX2ZpbHRlcl9uYW1lCiBSZXR1cm5zIGEgdGV4dHVhbCBuYW1lIGlkZW50aWZ5aW5nIHRoZSBpbmRpY2F0ZWQgZmlsdGVyLgpAQCAtMTcwLDkgKzE3MCw5IEBACiAuSXQgRm4gYXJjaGl2ZV9wb3NpdGlvbgogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIHRoZSBpbmRpY2F0ZWQgZmlsdGVyLgogSW4gcGFydGljdWxhciwKLS5GbiBhcmNoaXZlX3Bvc2l0aW9uKGEsIDApCisuRm4gYXJjaGl2ZV9wb3NpdGlvbiBhIDAKIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIHdyaXR0ZW4gYnkgdGhlIGZvcm1hdCBoYW5kbGVyLCB3aGlsZQotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgLTEpCisuRm4gYXJjaGl2ZV9wb3NpdGlvbiBhIC0xCiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciB3cml0dGVuIHRvIHRoZSBhcmNoaXZlLgogU2VlCiAuRm4gYXJjaGl2ZV9maWx0ZXJfY291bnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3V0aWwuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3V0aWwuYwppbmRleCBlNWM2ZTNiLi4xMGRjYTczIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC5jCkBAIC00NiwxMyArNDYsMTMgQEAKICNpbmNsdWRlIDx3aW5jcnlwdC5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xaTUFfSAotI2luY2x1ZGUgPGNtX2x6bWEuaD4KKyNpbmNsdWRlIDxjbTNwL2x6bWEuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfQlpMSUJfSAotI2luY2x1ZGUgPGNtX2J6bGliLmg+CisjaW5jbHVkZSA8Y20zcC9iemxpYi5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9MWjRfSAogI2luY2x1ZGUgPGx6NC5oPgpAQCAtMjE4LDggKzIxOCw4IEBACiAgKiBBbHNvIFdpbmRvd3MgdmVyc2lvbiBvZiBta3RlbXAgZmFtaWx5IGluY2x1ZGluZyBfbWt0ZW1wX3MKICAqIGFyZSBub3Qgc2VjdXJlLgogICovCi1pbnQKLV9fYXJjaGl2ZV9ta3RlbXAoY29uc3QgY2hhciAqdG1wZGlyKQorc3RhdGljIGludAorX19hcmNoaXZlX21rdGVtcHgoY29uc3QgY2hhciAqdG1wZGlyLCB3Y2hhcl90ICp0ZW1wbGF0ZSkKIHsKIAlzdGF0aWMgY29uc3Qgd2NoYXJfdCBwcmVmaXhbXSA9IEwibGliYXJjaGl2ZV8iOwogCXN0YXRpYyBjb25zdCB3Y2hhcl90IHN1ZmZpeFtdID0gTCJYWFhYWFhYWFhYIjsKQEAgLTI0Myw2NCArMjQzLDc2IEBACiAJaFByb3YgPSAoSENSWVBUUFJPVilOVUxMOwogCWZkID0gLTE7CiAJd3MgPSBOVUxMOwotCWFyY2hpdmVfc3RyaW5nX2luaXQoJnRlbXBfbmFtZSk7CiAKLQkvKiBHZXQgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiAqLwotCWlmICh0bXBkaXIgPT0gTlVMTCkgewotCQlzaXplX3QgbDsKLQkJd2NoYXJfdCAqdG1wOworCWlmICh0ZW1wbGF0ZSA9PSBOVUxMKSB7CisJCWFyY2hpdmVfc3RyaW5nX2luaXQoJnRlbXBfbmFtZSk7CiAKLQkJbCA9IEdldFRlbXBQYXRoVygwLCBOVUxMKTsKLQkJaWYgKGwgPT0gMCkgewotCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKLQkJCWdvdG8gZXhpdF90bXBmaWxlOwotCQl9Ci0JCXRtcCA9IG1hbGxvYyhsKnNpemVvZih3Y2hhcl90KSk7Ci0JCWlmICh0bXAgPT0gTlVMTCkgewotCQkJZXJybm8gPSBFTk9NRU07Ci0JCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQkJfQotCQlHZXRUZW1wUGF0aFcoKERXT1JEKWwsIHRtcCk7Ci0JCWFyY2hpdmVfd3N0cmNweSgmdGVtcF9uYW1lLCB0bXApOwotCQlmcmVlKHRtcCk7Ci0JfSBlbHNlIHsKLQkJaWYgKGFyY2hpdmVfd3N0cmluZ19hcHBlbmRfZnJvbV9tYnMoJnRlbXBfbmFtZSwgdG1wZGlyLAotCQkgICAgc3RybGVuKHRtcGRpcikpIDwgMCkKLQkJCWdvdG8gZXhpdF90bXBmaWxlOwotCQlpZiAodGVtcF9uYW1lLnNbdGVtcF9uYW1lLmxlbmd0aC0xXSAhPSBMJy8nKQotCQkJYXJjaGl2ZV93c3RyYXBwZW5kX3djaGFyKCZ0ZW1wX25hbWUsIEwnLycpOwotCX0KKwkJLyogR2V0IGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gKi8KKwkJaWYgKHRtcGRpciA9PSBOVUxMKSB7CisJCQlzaXplX3QgbDsKKwkJCXdjaGFyX3QgKnRtcDsKIAotCS8qIENoZWNrIGlmIHRlbXBfbmFtZSBpcyBhIGRpcmVjdG9yeS4gKi8KLQlhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHRlbXBfbmFtZS5zKTsKLQlpZiAoYXR0ciA9PSAoRFdPUkQpLTEpIHsKLQkJaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7Ci0JCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOwotCQkJZ290byBleGl0X3RtcGZpbGU7CisJCQlsID0gR2V0VGVtcFBhdGhXKDAsIE5VTEwpOworCQkJaWYgKGwgPT0gMCkgeworCQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCQkJZ290byBleGl0X3RtcGZpbGU7CisJCQl9CisJCQl0bXAgPSBtYWxsb2MobCpzaXplb2Yod2NoYXJfdCkpOworCQkJaWYgKHRtcCA9PSBOVUxMKSB7CisJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJZ290byBleGl0X3RtcGZpbGU7CisJCQl9CisJCQlHZXRUZW1wUGF0aFcoKERXT1JEKWwsIHRtcCk7CisJCQlhcmNoaXZlX3dzdHJjcHkoJnRlbXBfbmFtZSwgdG1wKTsKKwkJCWZyZWUodG1wKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChhcmNoaXZlX3dzdHJpbmdfYXBwZW5kX2Zyb21fbWJzKCZ0ZW1wX25hbWUsIHRtcGRpciwKKwkJCSAgICBzdHJsZW4odG1wZGlyKSkgPCAwKQorCQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQkJaWYgKHRlbXBfbmFtZS5zW3RlbXBfbmFtZS5sZW5ndGgtMV0gIT0gTCcvJykKKwkJCQlhcmNoaXZlX3dzdHJhcHBlbmRfd2NoYXIoJnRlbXBfbmFtZSwgTCcvJyk7CiAJCX0KLQkJd3MgPSBfX2xhX3dpbl9wZXJtaXNzaXZlX25hbWVfdyh0ZW1wX25hbWUucyk7Ci0JCWlmICh3cyA9PSBOVUxMKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCWdvdG8gZXhpdF90bXBmaWxlOwotCQl9Ci0JCWF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cod3MpOworCisJCS8qIENoZWNrIGlmIHRlbXBfbmFtZSBpcyBhIGRpcmVjdG9yeS4gKi8KKwkJYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyh0ZW1wX25hbWUucyk7CiAJCWlmIChhdHRyID09IChEV09SRCktMSkgewotCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJCWlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgeworCQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCQkJZ290byBleGl0X3RtcGZpbGU7CisJCQl9CisJCQl3cyA9IF9fbGFfd2luX3Blcm1pc3NpdmVfbmFtZV93KHRlbXBfbmFtZS5zKTsKKwkJCWlmICh3cyA9PSBOVUxMKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJZ290byBleGl0X3RtcGZpbGU7CisJCQl9CisJCQlhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdzKTsKKwkJCWlmIChhdHRyID09IChEV09SRCktMSkgeworCQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCQkJZ290byBleGl0X3RtcGZpbGU7CisJCQl9CisJCX0KKwkJaWYgKCEoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpIHsKKwkJCWVycm5vID0gRU5PVERJUjsKIAkJCWdvdG8gZXhpdF90bXBmaWxlOwogCQl9Ci0JfQotCWlmICghKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSB7Ci0JCWVycm5vID0gRU5PVERJUjsKLQkJZ290byBleGl0X3RtcGZpbGU7Ci0JfQogCi0JLyoKLQkgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZS4KLQkgKi8KLQlhcmNoaXZlX3dzdHJjYXQoJnRlbXBfbmFtZSwgcHJlZml4KTsKLQlhcmNoaXZlX3dzdHJjYXQoJnRlbXBfbmFtZSwgc3VmZml4KTsKLQllcCA9IHRlbXBfbmFtZS5zICsgYXJjaGl2ZV9zdHJsZW4oJnRlbXBfbmFtZSk7Ci0JeHAgPSBlcCAtIHdjc2xlbihzdWZmaXgpOworCQkvKgorCQkgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZS4KKwkJICovCisJCWFyY2hpdmVfd3N0cmNhdCgmdGVtcF9uYW1lLCBwcmVmaXgpOworCQlhcmNoaXZlX3dzdHJjYXQoJnRlbXBfbmFtZSwgc3VmZml4KTsKKwkJZXAgPSB0ZW1wX25hbWUucyArIGFyY2hpdmVfc3RybGVuKCZ0ZW1wX25hbWUpOworCQl4cCA9IGVwIC0gd2NzbGVuKHN1ZmZpeCk7CisJCXRlbXBsYXRlID0gdGVtcF9uYW1lLnM7CisJfSBlbHNlIHsKKwkJeHAgPSB3Y3NjaHIodGVtcGxhdGUsIEwnWCcpOworCQlpZiAoeHAgPT0gTlVMTCkJLyogTm8gWCwgcHJvZ3JhbW1pbmcgZXJyb3IgKi8KKwkJCWFib3J0KCk7CisJCWZvciAoZXAgPSB4cDsgKmVwID09IEwnWCc7IGVwKyspCisJCQljb250aW51ZTsKKwkJaWYgKCplcCkJLyogWCBmb2xsb3dlZCBieSBub24gWCwgcHJvZ3JhbW1pbmcgZXJyb3IgKi8KKwkJCWFib3J0KCk7CisJfQogCiAJaWYgKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZoUHJvdiwgTlVMTCwgTlVMTCwgUFJPVl9SU0FfRlVMTCwKIAkJQ1JZUFRfVkVSSUZZQ09OVEVYVCkpIHsKQEAgLTMyMywyMCArMzM1LDI0IEBACiAJCQkqcCA9IG51bVsoKERXT1JEKSpwKSAlIChzaXplb2YobnVtKS9zaXplb2YobnVtWzBdKSldOwogCiAJCWZyZWUod3MpOwotCQl3cyA9IF9fbGFfd2luX3Blcm1pc3NpdmVfbmFtZV93KHRlbXBfbmFtZS5zKTsKKwkJd3MgPSBfX2xhX3dpbl9wZXJtaXNzaXZlX25hbWVfdyh0ZW1wbGF0ZSk7CiAJCWlmICh3cyA9PSBOVUxMKSB7CiAJCQllcnJubyA9IEVJTlZBTDsKIAkJCWdvdG8gZXhpdF90bXBmaWxlOwogCQl9Ci0JCS8qIFNwZWNpZmllcyBGSUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFIGZsYWcgaXMgdG8KLQkJICogZGVsZXRlIHRoaXMgdGVtcG9yYXJ5IGZpbGUgaW1tZWRpYXRlbHkgd2hlbiB0aGlzCi0JCSAqIGZpbGUgY2xvc2VkLiAqLworCQlpZiAodGVtcGxhdGUgPT0gdGVtcF9uYW1lLnMpIHsKKwkJCWF0dHIgPSBGSUxFX0FUVFJJQlVURV9URU1QT1JBUlkgfAorCQkJICAgICAgIEZJTEVfRkxBR19ERUxFVEVfT05fQ0xPU0U7CisJCX0gZWxzZSB7CisJCQkvKiBta3N0ZW1wICovCisJCQlhdHRyID0gRklMRV9BVFRSSUJVVEVfTk9STUFMOworCQl9CiAJCWggPSBDcmVhdGVGaWxlVyh3cywKIAkJICAgIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUgfCBERUxFVEUsCiAJCSAgICAwLC8qIE5vdCBzaGFyZSAqLwogCQkgICAgTlVMTCwKIAkJICAgIENSRUFURV9ORVcsLyogQ3JlYXRlIGEgbmV3IGZpbGUgb25seSAqLwotCQkgICAgRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZIHwgRklMRV9GTEFHX0RFTEVURV9PTl9DTE9TRSwKKwkJICAgIGF0dHIsCiAJCSAgICBOVUxMKTsKIAkJaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKIAkJCS8qIFRoZSBzYW1lIGZpbGUgYWxyZWFkeSBleGlzdHMuIHJldHJ5IHdpdGgKQEAgLTM1OCwxMCArMzc0LDIzIEBACiAJaWYgKGhQcm92ICE9IChIQ1JZUFRQUk9WKU5VTEwpCiAJCUNyeXB0UmVsZWFzZUNvbnRleHQoaFByb3YsIDApOwogCWZyZWUod3MpOwotCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZ0ZW1wX25hbWUpOworCWlmICh0ZW1wbGF0ZSA9PSB0ZW1wX25hbWUucykKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnRlbXBfbmFtZSk7CiAJcmV0dXJuIChmZCk7CiB9CiAKK2ludAorX19hcmNoaXZlX21rdGVtcChjb25zdCBjaGFyICp0bXBkaXIpCit7CisJcmV0dXJuIF9fYXJjaGl2ZV9ta3RlbXB4KHRtcGRpciwgTlVMTCk7Cit9CisKK2ludAorX19hcmNoaXZlX21rc3RlbXAod2NoYXJfdCAqdGVtcGxhdGUpCit7CisJcmV0dXJuIF9fYXJjaGl2ZV9ta3RlbXB4KE5VTEwsIHRlbXBsYXRlKTsKK30KKwogI2Vsc2UKIAogc3RhdGljIGludApAQCAtNDE0LDE0ICs0NDMsMjQgQEAKIAlyZXR1cm4gKGZkKTsKIH0KIAotI2Vsc2UKK2ludAorX19hcmNoaXZlX21rc3RlbXAoY2hhciAqdGVtcGxhdGUpCit7CisJaW50IGZkID0gLTE7CisJZmQgPSBta3N0ZW1wKHRlbXBsYXRlKTsKKwlpZiAoZmQgPj0gMCkKKwkJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoZmQpOworCXJldHVybiAoZmQpOworfQorCisjZWxzZSAvKiAhSEFWRV9NS1NURU1QICovCiAKIC8qCiAgKiBXZSB1c2UgYSBwcml2YXRlIHJvdXRpbmUuCiAgKi8KIAotaW50Ci1fX2FyY2hpdmVfbWt0ZW1wKGNvbnN0IGNoYXIgKnRtcGRpcikKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9ta3RlbXB4KGNvbnN0IGNoYXIgKnRtcGRpciwgY2hhciAqdGVtcGxhdGUpCiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIG51bVtdID0gewogCQknMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywKQEAgLTQzOSwyNiArNDc4LDM3IEBACiAJY2hhciAqdHAsICplcDsKIAogCWZkID0gLTE7Ci0JYXJjaGl2ZV9zdHJpbmdfaW5pdCgmdGVtcF9uYW1lKTsKLQlpZiAodG1wZGlyID09IE5VTEwpIHsKLQkJaWYgKGdldF90ZW1wZGlyKCZ0ZW1wX25hbWUpICE9IEFSQ0hJVkVfT0spCisJaWYgKHRlbXBsYXRlID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmdGVtcF9uYW1lKTsKKwkJaWYgKHRtcGRpciA9PSBOVUxMKSB7CisJCQlpZiAoZ2V0X3RlbXBkaXIoJnRlbXBfbmFtZSkgIT0gQVJDSElWRV9PSykKKwkJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJfSBlbHNlCisJCQlhcmNoaXZlX3N0cmNweSgmdGVtcF9uYW1lLCB0bXBkaXIpOworCQlpZiAodGVtcF9uYW1lLnNbdGVtcF9uYW1lLmxlbmd0aC0xXSA9PSAnLycpIHsKKwkJCXRlbXBfbmFtZS5zW3RlbXBfbmFtZS5sZW5ndGgtMV0gPSAnXDAnOworCQkJdGVtcF9uYW1lLmxlbmd0aCAtLTsKKwkJfQorCQlpZiAobGFfc3RhdCh0ZW1wX25hbWUucywgJnN0KSA8IDApCiAJCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQl9IGVsc2UKLQkJYXJjaGl2ZV9zdHJjcHkoJnRlbXBfbmFtZSwgdG1wZGlyKTsKLQlpZiAodGVtcF9uYW1lLnNbdGVtcF9uYW1lLmxlbmd0aC0xXSA9PSAnLycpIHsKLQkJdGVtcF9uYW1lLnNbdGVtcF9uYW1lLmxlbmd0aC0xXSA9ICdcMCc7Ci0JCXRlbXBfbmFtZS5sZW5ndGggLS07CisJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJZXJybm8gPSBFTk9URElSOworCQkJZ290byBleGl0X3RtcGZpbGU7CisJCX0KKwkJYXJjaGl2ZV9zdHJjYXQoJnRlbXBfbmFtZSwgIi9saWJhcmNoaXZlXyIpOworCQl0cCA9IHRlbXBfbmFtZS5zICsgYXJjaGl2ZV9zdHJsZW4oJnRlbXBfbmFtZSk7CisJCWFyY2hpdmVfc3RyY2F0KCZ0ZW1wX25hbWUsICJYWFhYWFhYWFhYIik7CisJCWVwID0gdGVtcF9uYW1lLnMgKyBhcmNoaXZlX3N0cmxlbigmdGVtcF9uYW1lKTsKKwkJdGVtcGxhdGUgPSB0ZW1wX25hbWUuczsKKwl9IGVsc2UgeworCQl0cCA9IHN0cmNocih0ZW1wbGF0ZSwgJ1gnKTsKKwkJaWYgKHRwID09IE5VTEwpCS8qIE5vIFgsIHByb2dyYW1taW5nIGVycm9yICovCisJCQlhYm9ydCgpOworCQlmb3IgKGVwID0gdHA7ICplcCA9PSAnWCc7IGVwKyspCisJCQljb250aW51ZTsKKwkJaWYgKCplcCkJLyogWCBmb2xsb3dlZCBieSBub24gWCwgcHJvZ3JhbW1pbmcgZXJyb3IgKi8KKwkJCWFib3J0KCk7CiAJfQotCWlmIChzdGF0KHRlbXBfbmFtZS5zLCAmc3QpIDwgMCkKLQkJZ290byBleGl0X3RtcGZpbGU7Ci0JaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKSB7Ci0JCWVycm5vID0gRU5PVERJUjsKLQkJZ290byBleGl0X3RtcGZpbGU7Ci0JfQotCWFyY2hpdmVfc3RyY2F0KCZ0ZW1wX25hbWUsICIvbGliYXJjaGl2ZV8iKTsKLQl0cCA9IHRlbXBfbmFtZS5zICsgYXJjaGl2ZV9zdHJsZW4oJnRlbXBfbmFtZSk7Ci0JYXJjaGl2ZV9zdHJjYXQoJnRlbXBfbmFtZSwgIlhYWFhYWFhYWFgiKTsKLQllcCA9IHRlbXBfbmFtZS5zICsgYXJjaGl2ZV9zdHJsZW4oJnRlbXBfbmFtZSk7CiAKIAlkbyB7CiAJCWNoYXIgKnA7CkBAIC00NjksMTkgKzUxOSwzMyBAQAogCQkJaW50IGQgPSAqKCh1bnNpZ25lZCBjaGFyICopcCkgJSBzaXplb2YobnVtKTsKIAkJCSpwKysgPSBudW1bZF07CiAJCX0KLQkJZmQgPSBvcGVuKHRlbXBfbmFtZS5zLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSIHwgT19DTE9FWEVDLAorCQlmZCA9IG9wZW4odGVtcGxhdGUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IgfCBPX0NMT0VYRUMsCiAJCQkgIDA2MDApOwogCX0gd2hpbGUgKGZkIDwgMCAmJiBlcnJubyA9PSBFRVhJU1QpOwogCWlmIChmZCA8IDApCiAJCWdvdG8gZXhpdF90bXBmaWxlOwogCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKGZkKTsKLQl1bmxpbmsodGVtcF9uYW1lLnMpOworCWlmICh0ZW1wbGF0ZSA9PSB0ZW1wX25hbWUucykKKwkJdW5saW5rKHRlbXBfbmFtZS5zKTsKIGV4aXRfdG1wZmlsZToKLQlhcmNoaXZlX3N0cmluZ19mcmVlKCZ0ZW1wX25hbWUpOworCWlmICh0ZW1wbGF0ZSA9PSB0ZW1wX25hbWUucykKKwkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmdGVtcF9uYW1lKTsKIAlyZXR1cm4gKGZkKTsKIH0KIAotI2VuZGlmIC8qIEhBVkVfTUtTVEVNUCAqLworaW50CitfX2FyY2hpdmVfbWt0ZW1wKGNvbnN0IGNoYXIgKnRtcGRpcikKK3sKKwlyZXR1cm4gX19hcmNoaXZlX21rdGVtcHgodG1wZGlyLCBOVUxMKTsKK30KKworaW50CitfX2FyY2hpdmVfbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSkKK3sKKwlyZXR1cm4gX19hcmNoaXZlX21rdGVtcHgoTlVMTCwgdGVtcGxhdGUpOworfQorCisjZW5kaWYgLyogIUhBVkVfTUtTVEVNUCAqLwogI2VuZGlmIC8qICFfV0lOMzIgfHwgX19DWUdXSU5fXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdmVyc2lvbl9kZXRhaWxzLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV92ZXJzaW9uX2RldGFpbHMuYwppbmRleCBiOWFmNmQ3Li41ZjVhNWI3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV92ZXJzaW9uX2RldGFpbHMuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV92ZXJzaW9uX2RldGFpbHMuYwpAQCAtMzQsMTkgKzM0LDE5IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9CWkxJQl9ICi0jaW5jbHVkZSA8Y21fYnpsaWIuaD4KKyNpbmNsdWRlIDxjbTNwL2J6bGliLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xaNF9ICiAjaW5jbHVkZSA8bHo0Lmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pTVERfSAotI2luY2x1ZGUgPGNtX3pzdGQuaD4KKyNpbmNsdWRlIDxjbTNwL3pzdGQuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5jCmluZGV4IDZmZjg3NDkuLjYyNGUyNzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmMKQEAgLTQ0NSw3ICs0NDUsOCBAQAogICogV2luZG93cycgc3RhdCgpIGRvZXMgbm90IGFjY2VwdCB0aGUgcGF0aCBhZGRlZCAiXFw/XCIgZXNwZWNpYWxseSAiPyIKICAqIGNoYXJhY3Rlci4KICAqIEl0IG1lYW5zIHdlIGNhbm5vdCBhY2Nlc3MgdGhlIGxvbmcgbmFtZSBwYXRoIGxvbmdlciB0aGFuIE1BWF9QQVRILgotICogU28gSSd2ZSBpbXBsZW1lbnRlZCBzaW11bGFyIFdpbmRvd3MnIHN0YXQoKSB0byBhY2Nlc3MgdGhlIGxvbmcgbmFtZSBwYXRoLgorICogU28gSSd2ZSBpbXBsZW1lbnRlZCBhIGZ1bmN0aW9uIHNpbWlsYXIgdG8gV2luZG93cycgc3RhdCgpIHRvIGFjY2VzcyB0aGUKKyAqIGxvbmcgbmFtZSBwYXRoLgogICogQW5kIEkndmUgYWRkZWQgc29tZSBmZWF0dXJlLgogICogMS4gc2V0IHN0X2lubyBieSBuRmlsZUluZGV4SGlnaCBhbmQgbkZpbGVJbmRleExvdyBvZgogICogICAgQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04uCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmgKaW5kZXggYzNhZWQwYy4uZGRhNjNiOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuaApAQCAtMjcsMTAgKzI3LDYgQEAKICAqICRGcmVlQlNEJAogICovCiAKLSNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECi0jZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KLSNlbmRpZgotCiAvKgogICogVE9ETzogQSBsb3Qgb2Ygc3R1ZmYgaW4gaGVyZSBpc24ndCBhY3R1YWxseSB1c2VkIGJ5IGxpYmFyY2hpdmUgYW5kCiAgKiBjYW4gYmUgdHJpbW1lZCBvdXQuICBOb3RlIHRoYXQgdGhpcyBmaWxlIGlzIHVzZWQgYnkgbGliYXJjaGl2ZSBhbmQKQEAgLTQ4LDYgKzQ0LDEwIEBACiAjaWZuZGVmIExJQkFSQ0hJVkVfQVJDSElWRV9XSU5ET1dTX0hfSU5DTFVERUQKICNkZWZpbmUJTElCQVJDSElWRV9BUkNISVZFX1dJTkRPV1NfSF9JTkNMVURFRAogCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKKwogLyogU3RhcnQgb2YgY29uZmlndXJhdGlvbiBmb3IgbmF0aXZlIFdpbjMyICAqLwogI2lmbmRlZiBNSU5HV19IQVNfU0VDVVJFX0FQSQogI2RlZmluZSBNSU5HV19IQVNfU0VDVVJFX0FQSSAxCkBAIC0xMTcsMTAgKzExNyw3IEBACiAjaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfX1dBVENPTUNfXykKICNkZWZpbmUgc2V0bW9kZQkJX3NldG1vZGUKICNlbmRpZgotI2lmZGVmIHN0YXQKLSN1bmRlZiBzdGF0Ci0jZW5kaWYKLSNkZWZpbmUJc3RhdChwYXRoLHN0cmVmKQkJX19sYV9zdGF0KHBhdGgsc3RyZWYpCisjZGVmaW5lCWxhX3N0YXQocGF0aCxzdHJlZikJCV9fbGFfc3RhdChwYXRoLHN0cmVmKQogI2lmICFkZWZpbmVkKF9fV0FUQ09NQ19fKQogI2lmICFkZWZpbmVkKF9fQk9STEFORENfXykKICNkZWZpbmUJc3RyZHVwCQlfc3RyZHVwCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuMwppbmRleCBjMTE2NGY1Li5lN2Y3ZjEzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLjMKQEAgLTExOCw3ICsxMTgsNyBAQAogLkZuIGFyY2hpdmVfd3JpdGVfZnJlZQogZnVuY3Rpb24gdG8gcmVsZWFzZSBhbGwgcmVzb3VyY2VzLgogLlwiCi0uU2ggRVhBTVBMRQorLlNoIEVYQU1QTEVTCiBUaGUgZm9sbG93aW5nIHNrZXRjaCBpbGx1c3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgbGlicmFyeS4KIEluIHRoaXMgZXhhbXBsZSwKIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIHNpbXBseSB3cmFwcGVycyBhcm91bmQgdGhlIHN0YW5kYXJkCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgaWYgKGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9maWx0ZXJfYnlfZXh0KGEsIG91dG5hbWUpICE9IEFSQ0hJVkVfT0spICB7CiAgICAgYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2d6aXAoYSk7CiAgICAgYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3VzdGFyKGEpOwotICB9ICAKKyAgfQogICBhcmNoaXZlX3dyaXRlX29wZW4oYSwgbXlkYXRhLCBteW9wZW4sIG15d3JpdGUsIG15Y2xvc2UpOwogICB3aGlsZSAoKmZpbGVuYW1lKSB7CiAgICAgc3RhdCgqZmlsZW5hbWUsICZzdCk7CkBAIC0yMjUsOCArMjI1LDggQEAKIC5FZAogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGNwaW8gNSAsCiAuWHIgbXRyZWUgNSAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCmluZGV4IGU4ZGFmNTMuLjk4YTU1ZmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYwpAQCAtMjEyLDYgKzIxMiw3IEBACiAKIAlmID0gY2FsbG9jKDEsIHNpemVvZigqZikpOwogCWYtPmFyY2hpdmUgPSBfYTsKKwlmLT5zdGF0ZSA9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX05FVzsKIAlpZiAoYS0+ZmlsdGVyX2ZpcnN0ID09IE5VTEwpCiAJCWEtPmZpbHRlcl9maXJzdCA9IGY7CiAJZWxzZQpAQCAtMjI4LDYgKzIyOSw5IEBACiAgICAgY29uc3Qgdm9pZCAqYnVmZiwgc2l6ZV90IGxlbmd0aCkKIHsKIAlpbnQgcjsKKwkvKiBOZXZlciB3cml0ZSB0byBub24tb3BlbiBmaWx0ZXJzICovCisJaWYgKGYtPnN0YXRlICE9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX09QRU4pCisJCXJldHVybihBUkNISVZFX0ZBVEFMKTsKIAlpZiAobGVuZ3RoID09IDApCiAJCXJldHVybihBUkNISVZFX09LKTsKIAlpZiAoZi0+d3JpdGUgPT0gTlVMTCkKQEAgLTI0MCwyNyArMjQ0LDcwIEBACiB9CiAKIC8qCi0gKiBPcGVuIGEgZmlsdGVyLgorICogUmVjdXJzaXZlIGZ1bmN0aW9uIGZvciBvcGVuaW5nIHRoZSBmaWx0ZXIgY2hhaW4KKyAqIExhc3QgZmlsdGVyIGlzIG9wZW5lZCBmaXJzdAogICovCi1pbnQKK3N0YXRpYyBpbnQKIF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7Ci0JaWYgKGYtPm9wZW4gPT0gTlVMTCkKKwlpbnQgcmV0OworCisJcmV0ID0gQVJDSElWRV9PSzsKKwlpZiAoZi0+bmV4dF9maWx0ZXIgIT0gTlVMTCkKKwkJcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKKwlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiAocmV0KTsKKwlpZiAoZi0+c3RhdGUgIT0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfTkVXKQorCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCWlmIChmLT5vcGVuID09IE5VTEwpIHsKKwkJZi0+c3RhdGUgPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9PUEVOOwogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwotCXJldHVybiAoZi0+b3BlbikoZik7CisJfQorCXJldCA9IChmLT5vcGVuKShmKTsKKwlpZiAocmV0ID09IEFSQ0hJVkVfT0spCisJCWYtPnN0YXRlID0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfT1BFTjsKKwllbHNlCisJCWYtPnN0YXRlID0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfRkFUQUw7CisJcmV0dXJuIChyZXQpOwogfQogCiAvKgotICogQ2xvc2UgYSBmaWx0ZXIuCisgKiBPcGVuIGFsbCBmaWx0ZXJzCiAgKi8KLWludAotX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCitzdGF0aWMgaW50CitfX2FyY2hpdmVfd3JpdGVfZmlsdGVyc19vcGVuKHN0cnVjdCBhcmNoaXZlX3dyaXRlICphKQogewotCWlmIChmLT5jbG9zZSAhPSBOVUxMKQotCQlyZXR1cm4gKGYtPmNsb3NlKShmKTsKLQlpZiAoZi0+bmV4dF9maWx0ZXIgIT0gTlVMTCkKLQkJcmV0dXJuIChfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKSk7Ci0JcmV0dXJuIChBUkNISVZFX09LKTsKKwlyZXR1cm4gKF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihhLT5maWx0ZXJfZmlyc3QpKTsKK30KKworLyoKKyAqIENsb3NlIGFsbCBmaWx0ZXMKKyAqLworc3RhdGljIGludAorX19hcmNoaXZlX3dyaXRlX2ZpbHRlcnNfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGUgKmEpCit7CisJc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmOworCWludCByZXQsIHJldDE7CisJcmV0ID0gQVJDSElWRV9PSzsKKwlmb3IgKGYgPSBhLT5maWx0ZXJfZmlyc3Q7IGYgIT0gTlVMTDsgZiA9IGYtPm5leHRfZmlsdGVyKSB7CisJCS8qIERvIG5vdCBjbG9zZSBmaWx0ZXJzIHRoYXQgYXJlIG5vdCBvcGVuICovCisJCWlmIChmLT5zdGF0ZSA9PSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9PUEVOKSB7CisJCQlpZiAoZi0+Y2xvc2UgIT0gTlVMTCkgeworCQkJCXJldDEgPSAoZi0+Y2xvc2UpKGYpOworCQkJCWlmIChyZXQxIDwgcmV0KQorCQkJCQlyZXQgPSByZXQxOworCQkJCWlmIChyZXQxID09IEFSQ0hJVkVfT0spIHsKKwkJCQkJZi0+c3RhdGUgPQorCQkJCQkgICAgQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfQ0xPU0VEOworCQkJCX0gZWxzZSB7CisJCQkJCWYtPnN0YXRlID0KKwkJCQkJICAgIEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX0ZBVEFMOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWYtPnN0YXRlID0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfQ0xPU0VEOworCQl9CisJfQorCXJldHVybiAocmV0KTsKIH0KIAogaW50CkBAIC0yOTIsNiArMzM5LDcgQEAKIAlzdHJ1Y3QgYXJjaGl2ZV9ub25lICpzdGF0ZTsKIAl2b2lkICpidWZmZXI7CiAJc2l6ZV90IGJ1ZmZlcl9zaXplOworCWludCByZXQ7CiAKIAlmLT5ieXRlc19wZXJfYmxvY2sgPSBhcmNoaXZlX3dyaXRlX2dldF9ieXRlc19wZXJfYmxvY2soZi0+YXJjaGl2ZSk7CiAJZi0+Ynl0ZXNfaW5fbGFzdF9ibG9jayA9CkBAIC0zMTYsNyArMzY0LDEzIEBACiAKIAlpZiAoYS0+Y2xpZW50X29wZW5lciA9PSBOVUxMKQogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwotCXJldHVybiAoYS0+Y2xpZW50X29wZW5lcihmLT5hcmNoaXZlLCBhLT5jbGllbnRfZGF0YSkpOworCXJldCA9IGEtPmNsaWVudF9vcGVuZXIoZi0+YXJjaGl2ZSwgYS0+Y2xpZW50X2RhdGEpOworCWlmIChyZXQgIT0gQVJDSElWRV9PSykgeworCQlmcmVlKHN0YXRlLT5idWZmZXIpOworCQlmcmVlKHN0YXRlKTsKKwkJZi0+ZGF0YSA9IE5VTEw7CisJfQorCXJldHVybiAocmV0KTsKIH0KIAogc3RhdGljIGludApAQCAtNDM5LDggKzQ5Myw2IEBACiAJCSgqYS0+Y2xpZW50X2Nsb3NlcikoJmEtPmFyY2hpdmUsIGEtPmNsaWVudF9kYXRhKTsKIAlmcmVlKHN0YXRlLT5idWZmZXIpOwogCWZyZWUoc3RhdGUpOwotCS8qIENsZWFyIHRoZSBjbG9zZSBoYW5kbGVyIG15c2VsZiBub3QgdG8gYmUgY2FsbGVkIGFnYWluLiAqLwotCWYtPmNsb3NlID0gTlVMTDsKIAlhLT5jbGllbnRfZGF0YSA9IE5VTEw7CiAJLyogQ2xlYXIgcGFzc3BocmFzZS4gKi8KIAlpZiAoYS0+cGFzc3BocmFzZSAhPSBOVUxMKSB7CkBAIC00NDgsNiArNTAwLDggQEAKIAkJZnJlZShhLT5wYXNzcGhyYXNlKTsKIAkJYS0+cGFzc3BocmFzZSA9IE5VTEw7CiAJfQorCS8qIENsZWFyIHRoZSBjbG9zZSBoYW5kbGVyIG15c2VsZiBub3QgdG8gYmUgY2FsbGVkIGFnYWluLiAqLworCWYtPnN0YXRlID0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfQ0xPU0VEOwogCXJldHVybiAocmV0KTsKIH0KIApAQCAtNDc3LDkgKzUzMSwxMCBAQAogCWNsaWVudF9maWx0ZXItPndyaXRlID0gYXJjaGl2ZV93cml0ZV9jbGllbnRfd3JpdGU7CiAJY2xpZW50X2ZpbHRlci0+Y2xvc2UgPSBhcmNoaXZlX3dyaXRlX2NsaWVudF9jbG9zZTsKIAotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihhLT5maWx0ZXJfZmlyc3QpOworCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9maWx0ZXJzX29wZW4oYSk7CiAJaWYgKHJldCA8IEFSQ0hJVkVfV0FSTikgewotCQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoYS0+ZmlsdGVyX2ZpcnN0KTsKKwkJcjEgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyc19jbG9zZShhKTsKKwkJX19hcmNoaXZlX3dyaXRlX2ZpbHRlcnNfZnJlZShfYSk7CiAJCXJldHVybiAocjEgPCByZXQgPyByMSA6IHJldCk7CiAJfQogCkBAIC01MjEsNyArNTc2LDcgQEAKIAl9CiAKIAkvKiBGaW5pc2ggdGhlIGNvbXByZXNzaW9uIGFuZCBjbG9zZSB0aGUgc3RyZWFtLiAqLwotCXIxID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihhLT5maWx0ZXJfZmlyc3QpOworCXIxID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcnNfY2xvc2UoYSk7CiAJaWYgKHIxIDwgcikKIAkJciA9IHIxOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2I2NGVuY29kZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iNjRlbmNvZGUuYwppbmRleCBiNDZiMTlhLi44N2ZkYjczIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2I2NGVuY29kZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYjY0ZW5jb2RlLmMKQEAgLTE0OSwxMSArMTQ5LDYgQEAKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9iNjRlbmNvZGUgKnN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2I2NGVuY29kZSAqKWYtPmRhdGE7CiAJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKIAogCWlmIChmLT5hcmNoaXZlLT5tYWdpYyA9PSBBUkNISVZFX1dSSVRFX01BR0lDKSB7CiAJCS8qIEJ1ZmZlciBzaXplIHNob3VsZCBiZSBhIG11bHRpcGxlIG51bWJlciBvZiB0aGUgb2YgYnl0ZXMKQEAgLTI2Niw3ICsyNjEsNiBAQAogYXJjaGl2ZV9maWx0ZXJfYjY0ZW5jb2RlX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9iNjRlbmNvZGUgKnN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2I2NGVuY29kZSAqKWYtPmRhdGE7Ci0JaW50IHJldCwgcmV0MjsKIAogCS8qIEZsdXNoIHJlbWFpbmluZyBieXRlcy4gKi8KIAlpZiAoc3RhdGUtPmhvbGRfbGVuICE9IDApCkBAIC0yNzQsMTIgKzI2OCw4IEBACiAJYXJjaGl2ZV9zdHJpbmdfc3ByaW50Zigmc3RhdGUtPmVuY29kZWRfYnVmZiwgIj09PT1cbiIpOwogCS8qIFdyaXRlIHRoZSBsYXN0IGJsb2NrICovCiAJYXJjaGl2ZV93cml0ZV9zZXRfYnl0ZXNfaW5fbGFzdF9ibG9jayhmLT5hcmNoaXZlLCAxKTsKLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLAorCXJldHVybiBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLAogCSAgICBzdGF0ZS0+ZW5jb2RlZF9idWZmLnMsIGFyY2hpdmVfc3RybGVuKCZzdGF0ZS0+ZW5jb2RlZF9idWZmKSk7Ci0JcmV0MiA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgPiByZXQyKQotCQlyZXQgPSByZXQyOwotCXJldHVybiAocmV0KTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iemlwMi5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iemlwMi5jCmluZGV4IDZiZDBkMWQuLjA2MzdlOTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYnppcDIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2J6aXAyLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfQlpMSUJfSAotI2luY2x1ZGUgPGNtX2J6bGliLmg+CisjaW5jbHVkZSA8Y20zcC9iemxpYi5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCkBAIC0xNjcsMTAgKzE2Nyw2IEBACiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiAocmV0KTsKLQogCWlmIChkYXRhLT5jb21wcmVzc2VkID09IE5VTEwpIHsKIAkJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKIAkJaWYgKGYtPmFyY2hpdmUtPm1hZ2ljID09IEFSQ0hJVkVfV1JJVEVfTUFHSUMpIHsKQEAgLTI2Miw3ICsyNTgsNyBAQAogYXJjaGl2ZV9jb21wcmVzc29yX2J6aXAyX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQsIHIxOworCWludCByZXQ7CiAKIAkvKiBGaW5pc2ggY29tcHJlc3Npb24gY3ljbGUuICovCiAJcmV0ID0gZHJpdmVfY29tcHJlc3NvcihmLCBkYXRhLCAxKTsKQEAgLTI4MSw5ICsyNzcsNyBAQAogCQkgICAgIkZhaWxlZCB0byBjbGVhbiB1cCBjb21wcmVzc29yIik7CiAJCXJldCA9IEFSQ0hJVkVfRkFUQUw7CiAJfQotCi0JcjEgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlyZXR1cm4gKHIxIDwgcmV0ID8gcjEgOiByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfY29tcHJlc3MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfY29tcHJlc3MuYwppbmRleCAyNmZjZWY0Li5kNDA0ZmFlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2NvbXByZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9jb21wcmVzcy5jCkBAIC0xNDYsMTcgKzE0NiwxMiBAQAogc3RhdGljIGludAogYXJjaGl2ZV9jb21wcmVzc29yX2NvbXByZXNzX29wZW4oc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewotCWludCByZXQ7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGU7CiAJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKIAogCWYtPmNvZGUgPSBBUkNISVZFX0ZJTFRFUl9DT01QUkVTUzsKIAlmLT5uYW1lID0gImNvbXByZXNzIjsKIAotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7Ci0KIAlzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopY2FsbG9jKDEsIHNpemVvZigqc3RhdGUpKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkgewogCQlhcmNoaXZlX3NldF9lcnJvcihmLT5hcmNoaXZlLCBFTk9NRU0sCkBAIC00MjYsMzAgKzQyMSwyNyBAQAogYXJjaGl2ZV9jb21wcmVzc29yX2NvbXByZXNzX2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKLQlpbnQgcmV0LCByZXQyOworCWludCByZXQ7CiAKIAlyZXQgPSBvdXRwdXRfY29kZShmLCBzdGF0ZS0+Y3VyX2NvZGUpOwogCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJZ290byBjbGVhbnVwOworCQlyZXR1cm4gcmV0OwogCXJldCA9IG91dHB1dF9mbHVzaChmKTsKIAlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCWdvdG8gY2xlYW51cDsKKwkJcmV0dXJuIHJldDsKIAogCS8qIFdyaXRlIHRoZSBsYXN0IGJsb2NrICovCiAJcmV0ID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwKIAkgICAgc3RhdGUtPmNvbXByZXNzZWQsIHN0YXRlLT5jb21wcmVzc2VkX29mZnNldCk7Ci1jbGVhbnVwOgotCXJldDIgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ID4gcmV0MikKLQkJcmV0ID0gcmV0MjsKLQlmcmVlKHN0YXRlLT5jb21wcmVzc2VkKTsKLQlmcmVlKHN0YXRlKTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKIHN0YXRpYyBpbnQKIGFyY2hpdmVfY29tcHJlc3Nvcl9jb21wcmVzc19mcmVlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKLQkodm9pZClmOyAvKiBVTlVTRUQgKi8KKwlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKKworCWZyZWUoc3RhdGUtPmNvbXByZXNzZWQpOworCWZyZWUoc3RhdGUpOwogCXJldHVybiAoQVJDSElWRV9PSyk7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2d6aXAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcC5jCmluZGV4IDk4NjEyM2EuLjNlMjY2MDUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcC5jCkBAIC0zOCw3ICszOCw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDx0aW1lLmg+CiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTE4NCwxMCArMTg0LDYgQEAKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwogCWludCByZXQ7CiAKLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJcmV0dXJuIChyZXQpOwotCiAJaWYgKGRhdGEtPmNvbXByZXNzZWQgPT0gTlVMTCkgewogCQlzaXplX3QgYnMgPSA2NTUzNiwgYnBiOwogCQlpZiAoZi0+YXJjaGl2ZS0+bWFnaWMgPT0gQVJDSElWRV9XUklURV9NQUdJQykgewpAQCAtMzA3LDcgKzMwMyw3IEBACiB7CiAJdW5zaWduZWQgY2hhciB0cmFpbGVyWzhdOwogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHJldCwgcjE7CisJaW50IHJldDsKIAogCS8qIEZpbmlzaCBjb21wcmVzc2lvbiBjeWNsZSAqLwogCXJldCA9IGRyaXZlX2NvbXByZXNzb3IoZiwgZGF0YSwgMSk7CkBAIC0zMzgsOCArMzM0LDcgQEAKIAkJICAgICJGYWlsZWQgdG8gY2xlYW4gdXAgY29tcHJlc3NvciIpOwogCQlyZXQgPSBBUkNISVZFX0ZBVEFMOwogCX0KLQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCXJldHVybiAocjEgPCByZXQgPyByMSA6IHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHo0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6NC5jCmluZGV4IDE1ZmQ0OTQuLmNmMTlmYWQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHo0LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sejQuYwpAQCAtMjIzLDE2ICsyMjMsMTEgQEAKIGFyY2hpdmVfZmlsdGVyX2x6NF9vcGVuKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQ7CiAJc2l6ZV90IHJlcXVpcmVkX3NpemU7CiAJc3RhdGljIHNpemVfdCBjb25zdCBia21hcFtdID0geyA2NCAqIDEwMjQsIDI1NiAqIDEwMjQsIDEgKiAxMDI0ICogMTAyNCwKIAkJCSAgIDQgKiAxMDI0ICogMTAyNCB9OwogCXNpemVfdCBwcmVfYmxvY2tfc2l6ZTsKIAotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gKHJldCk7Ci0KIAlpZiAoZGF0YS0+YmxvY2tfbWF4aW11bV9zaXplIDwgNCkKIAkJZGF0YS0+YmxvY2tfc2l6ZSA9IGJrbWFwWzBdOwogCWVsc2UKQEAgLTM0Myw3ICszMzgsNyBAQAogYXJjaGl2ZV9maWx0ZXJfbHo0X2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQsIHIxOworCWludCByZXQ7CiAKIAkvKiBGaW5pc2ggY29tcHJlc3Npb24gY3ljbGUuICovCiAJcmV0ID0gKGludClsejRfd3JpdGVfb25lX2Jsb2NrKGYsIE5VTEwsIDApOwpAQCAtMzY2LDkgKzM2MSw3IEBACiAJCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIsCiAJCQkgICAgZGF0YS0+b3V0X2J1ZmZlciwgZGF0YS0+b3V0IC0gZGF0YS0+b3V0X2J1ZmZlcik7CiAJfQotCi0JcjEgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlyZXR1cm4gKHIxIDwgcmV0ID8gcjEgOiByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHpvcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sem9wLmMKaW5kZXggYWQ3MDVjNC4uM2JkOTA2MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sem9wLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sem9wLmMKQEAgLTIyOCwxMSArMjI4LDYgQEAKIGFyY2hpdmVfd3JpdGVfbHpvcF9vcGVuKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3Qgd3JpdGVfbHpvcCAqZGF0YSA9IChzdHJ1Y3Qgd3JpdGVfbHpvcCAqKWYtPmRhdGE7Ci0JaW50IHJldDsKLQotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7CiAKIAlzd2l0Y2ggKGRhdGEtPmNvbXByZXNzaW9uX2xldmVsKSB7CiAJY2FzZSAxOgpAQCAtNDM5LDEwICs0MzQsNyBAQAogCX0KIAkvKiBXcml0ZSBhIHplcm8gdW5jb21wcmVzc2VkIHNpemUgYXMgdGhlIGVuZCBtYXJrIG9mIHRoZSBzZXJpZXMgb2YKIAkgKiBjb21wcmVzc2VkIGJsb2NrLiAqLwotCXIgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLCAmZW5kbWFyaywgc2l6ZW9mKGVuZG1hcmspKTsKLQlpZiAociAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHIpOwotCXJldHVybiAoX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcikpOworCXJldHVybiBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLCAmZW5kbWFyaywgc2l6ZW9mKGVuZG1hcmspKTsKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfcHJvZ3JhbS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9wcm9ncmFtLmMKaW5kZXggNjYwZjY5My4uYTRiYzFkOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9wcm9ncmFtLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9wcm9ncmFtLmMKQEAgLTIxMiwxMSArMjEyLDYgQEAKICAgICBzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9wcm9ncmFtX2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlwaWRfdCBjaGlsZDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKIAogCWlmIChkYXRhLT5jaGlsZF9idWYgPT0gTlVMTCkgewogCQlkYXRhLT5jaGlsZF9idWZfbGVuID0gNjU1MzY7CkBAIC0zNTMsMTEgKzM0OCwxMSBAQAogX19hcmNoaXZlX3dyaXRlX3Byb2dyYW1fY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmLAogICAgIHN0cnVjdCBhcmNoaXZlX3dyaXRlX3Byb2dyYW1fZGF0YSAqZGF0YSkKIHsKLQlpbnQgcmV0LCByMSwgc3RhdHVzOworCWludCByZXQsIHN0YXR1czsKIAlzc2l6ZV90IGJ5dGVzX3JlYWQ7CiAKIAlpZiAoZGF0YS0+Y2hpbGQgPT0gMCkKLQkJcmV0dXJuIF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOworCQlyZXR1cm4gQVJDSElWRV9PSzsKIAogCXJldCA9IDA7CiAJY2xvc2UoZGF0YS0+Y2hpbGRfc3RkaW4pOwpAQCAtNDA5LDcgKzQwNCw2IEBACiAJCSAgICAiRXJyb3IgY2xvc2luZyBwcm9ncmFtOiAlcyIsIGRhdGEtPnByb2dyYW1fbmFtZSk7CiAJCXJldCA9IEFSQ0hJVkVfRkFUQUw7CiAJfQotCXIxID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JcmV0dXJuIChyMSA8IHJldCA/IHIxIDogcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3V1ZW5jb2RlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3V1ZW5jb2RlLmMKaW5kZXggMjNkOWMxNS4uMWFkNDU4OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl91dWVuY29kZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfdXVlbmNvZGUuYwpAQCAtMTM4LDExICsxMzgsNiBAQAogewogCXN0cnVjdCBwcml2YXRlX3V1ZW5jb2RlICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV91dWVuY29kZSAqKWYtPmRhdGE7CiAJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKIAogCWlmIChmLT5hcmNoaXZlLT5tYWdpYyA9PSBBUkNISVZFX1dSSVRFX01BR0lDKSB7CiAJCS8qIEJ1ZmZlciBzaXplIHNob3VsZCBiZSBhIG11bHRpcGxlIG51bWJlciBvZiB0aGUgb2YgYnl0ZXMKQEAgLTI1Nyw3ICsyNTIsNiBAQAogYXJjaGl2ZV9maWx0ZXJfdXVlbmNvZGVfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX3V1ZW5jb2RlICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV91dWVuY29kZSAqKWYtPmRhdGE7Ci0JaW50IHJldCwgcmV0MjsKIAogCS8qIEZsdXNoIHJlbWFpbmluZyBieXRlcy4gKi8KIAlpZiAoc3RhdGUtPmhvbGRfbGVuICE9IDApCkBAIC0yNjUsMTIgKzI1OSw4IEBACiAJYXJjaGl2ZV9zdHJpbmdfc3ByaW50Zigmc3RhdGUtPmVuY29kZWRfYnVmZiwgImBcbmVuZFxuIik7CiAJLyogV3JpdGUgdGhlIGxhc3QgYmxvY2sgKi8KIAlhcmNoaXZlX3dyaXRlX3NldF9ieXRlc19pbl9sYXN0X2Jsb2NrKGYtPmFyY2hpdmUsIDEpOwotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIsCisJcmV0dXJuIF9fYXJjaGl2ZV93cml0ZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIsCiAJICAgIHN0YXRlLT5lbmNvZGVkX2J1ZmYucywgYXJjaGl2ZV9zdHJsZW4oJnN0YXRlLT5lbmNvZGVkX2J1ZmYpKTsKLQlyZXQyID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCA+IHJldDIpCi0JCXJldCA9IHJldDI7Ci0JcmV0dXJuIChyZXQpOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3h6LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3h6LmMKaW5kZXggZTRhMzUzNS4uZDU2N2FjOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl94ei5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfeHouYwpAQCAtMzksNyArMzksNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8dGltZS5oPgogI2lmZGVmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCkBAIC0zMDksMTAgKzMwOSw2IEBACiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IGYtPmRhdGE7CiAJaW50IHJldDsKIAotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7Ci0KIAlpZiAoZGF0YS0+Y29tcHJlc3NlZCA9PSBOVUxMKSB7CiAJCXNpemVfdCBicyA9IDY1NTM2LCBicGI7CiAJCWlmIChmLT5hcmNoaXZlLT5tYWdpYyA9PSBBUkNISVZFX1dSSVRFX01BR0lDKSB7CkBAIC0zOTAsMTAgKzM4NiwxMyBAQAogCQkJZGF0YS0+Y29tcHJlc3Npb25fbGV2ZWwgPSA2OwogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwogCX0gZWxzZSBpZiAoc3RyY21wKGtleSwgInRocmVhZHMiKSA9PSAwKSB7CisJCWNoYXIgKmVuZHB0cjsKKwogCQlpZiAodmFsdWUgPT0gTlVMTCkKIAkJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKLQkJZGF0YS0+dGhyZWFkcyA9IChpbnQpc3RydG91bCh2YWx1ZSwgTlVMTCwgMTApOwotCQlpZiAoZGF0YS0+dGhyZWFkcyA9PSAwICYmIGVycm5vICE9IDApIHsKKwkJZXJybm8gPSAwOworCQlkYXRhLT50aHJlYWRzID0gKGludClzdHJ0b3VsKHZhbHVlLCAmZW5kcHRyLCAxMCk7CisJCWlmIChlcnJubyAhPSAwIHx8ICplbmRwdHIgIT0gJ1wwJykgewogCQkJZGF0YS0+dGhyZWFkcyA9IDE7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfV0FSTik7CiAJCX0KQEAgLTQ0NSw3ICs0NDQsNyBAQAogYXJjaGl2ZV9jb21wcmVzc29yX3h6X2Nsb3NlKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQsIHIxOworCWludCByZXQ7CiAKIAlyZXQgPSBkcml2ZV9jb21wcmVzc29yKGYsIGRhdGEsIDEpOwogCWlmIChyZXQgPT0gQVJDSElWRV9PSykgewpAQCAtNDYzLDggKzQ2Miw3IEBACiAJCX0KIAl9CiAJbHptYV9lbmQoJihkYXRhLT5zdHJlYW0pKTsKLQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCXJldHVybiAocjEgPCByZXQgPyByMSA6IHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl96c3RkLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3pzdGQuYwppbmRleCAyNTFiMTdkLi5mNjdiMDI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3pzdGQuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3pzdGQuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aU1REX0gKLSNpbmNsdWRlIDxjbV96c3RkLmg+CisjaW5jbHVkZSA8Y20zcC96c3RkLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTE3MiwxMSArMTcyLDYgQEAKIGFyY2hpdmVfY29tcHJlc3Nvcl96c3RkX29wZW4oc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHJldDsKLQotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7CiAKIAlpZiAoZGF0YS0+b3V0LmRzdCA9PSBOVUxMKSB7CiAJCXNpemVfdCBicyA9IFpTVERfQ1N0cmVhbU91dFNpemUoKSwgYnBiOwpAQCAtMjM4LDE0ICsyMzMsOSBAQAogYXJjaGl2ZV9jb21wcmVzc29yX3pzdGRfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHIxLCByMjsKIAogCS8qIEZpbmlzaCB6c3RkIGZyYW1lICovCi0JcjEgPSBkcml2ZV9jb21wcmVzc29yKGYsIGRhdGEsIDEsIE5VTEwsIDApOwotCi0JcjIgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQotCXJldHVybiByMSA8IHIyID8gcjEgOiByMjsKKwlyZXR1cm4gZHJpdmVfY29tcHJlc3NvcihmLCBkYXRhLCAxLCBOVUxMLCAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Jsb2Nrc2l6ZS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYmxvY2tzaXplLjMKaW5kZXggYWZkODRlYS4uNDk3M2Y5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYmxvY2tzaXplLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYmxvY2tzaXplLjMKQEAgLTEwNyw4ICsxMDcsOCBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGF0YS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGF0YS4zCmluZGV4IDljMTZjZDkuLmJjMjA4YjQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2RhdGEuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kYXRhLjMKQEAgLTgyLDkgKzgyLDkgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGNwaW8gNSAsCiAuWHIgbXRyZWUgNSAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMwppbmRleCA5NDljOWVmLi4yZmEwMTZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCkBAIC0yNCw3ICsyNCw3IEBACiAuXCIKIC5cIiAkRnJlZUJTRCQKIC5cIgotLkRkIEFwcmlsIDMsIDIwMTcKKy5EZCBKYW51YXJ5IDE5LCAyMDIwCiAuRHQgQVJDSElWRV9XUklURV9ESVNLIDMKIC5PcwogLlNoIE5BTUUKQEAgLTExMyw3ICsxMTMsOCBAQAogLlBxIEZyZWVCU0QsIE1hYyBPUyBYCiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBmaWxlIGF0dHJpYnV0ZXMuCiAuSXQgQ20gQVJDSElWRV9FWFRSQUNUX01BQ19NRVRBREFUQQotTWFjIE9TIFggc3BlY2lmaWMuIFJlc3RvcmUgbWV0YWRhdGEgdXNpbmcKK01hYyBPUyBYIHNwZWNpZmljLgorUmVzdG9yZSBtZXRhZGF0YSB1c2luZwogLlhyIGNvcHlmaWxlIDMgLgogQnkgZGVmYXVsdCwKIC5YciBjb3B5ZmlsZSAzCkBAIC0xMzgsNiArMTM5LDExIEBACiBpZiB0aGUgZGVmYXVsdCB1c2VyIGFuZCBncm91cCBJRHMgb2YgbmV3bHktY3JlYXRlZCBvYmplY3RzIG9uIGRpc2sKIGhhcHBlbiB0byBtYXRjaCB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIGFyY2hpdmUgZW50cnkuCiBCeSBkZWZhdWx0LCBvbmx5IGJhc2ljIHBlcm1pc3Npb25zIGFyZSByZXN0b3JlZCwgYW5kIHVtYXNrIGlzIG9iZXllZC4KKy5JdCBDbSBBUkNISVZFX0VYVFJBQ1RfU0FGRV9XUklURVMKK0V4dHJhY3QgZmlsZXMgYXRvbWljYWxseSwgYnkgZmlyc3QgY3JlYXRpbmcgYSB1bmlxdWUgdGVtcG9yYXJ5IGZpbGUgYW5kIHRoZW4KK3JlbmFtaW5nIGl0IHRvIGl0cyByZXF1aXJlZCBkZXN0aW5hdGlvbiBuYW1lLgorVGhpcyBhdm9pZHMgYSByYWNlIHdoZXJlIGFuIGFwcGxpY2F0aW9uIG1pZ2h0IHNlZSBhIHBhcnRpYWwgZmlsZSAob3Igbm8KK2ZpbGUpIGR1cmluZyBleHRyYWN0aW9uLgogLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTCiBSZWZ1c2UgdG8gZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgogVGhlIGRlZmF1bHQgaXMgdG8gbm90IHJlZnVzZSBzdWNoIHBhdGhzLgpAQCAtMjY0LDkgKzI3MCw5IEBACiBmdW5jdGlvbnMuCiAuXCIKIC5TaCBTRUUgQUxTTworLlhyIHRhciAxICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKLS5YciB0YXIgMSAsCiAuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKaW5kZXggYWZmYTUwMy4uYzRiZTliMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPgorI2luY2x1ZGUgPGNtM3AvemxpYi5oPgogI2VuZGlmCiAKIC8qIFRPRE86IFN1cHBvcnQgTWFjIE9TICdxdWFyYW50aW5lJyBmZWF0dXJlLiAgVGhpcyBpcyByZWFsbHkganVzdCBhCkBAIC0xNjUsNiArMTY1LDEwIEBACiAjZGVmaW5lIE9fTk9GT0xMT1cgMAogI2VuZGlmCiAKKyNpZm5kZWYgQVRfRkRDV0QKKyNkZWZpbmUgQVRfRkRDV0QgLTEwMAorI2VuZGlmCisKIHN0cnVjdCBmaXh1cF9lbnRyeSB7CiAJc3RydWN0IGZpeHVwX2VudHJ5CSpuZXh0OwogCXN0cnVjdCBhcmNoaXZlX2FjbAkgYWNsOwpAQCAtMjQ5LDYgKzI1Myw4IEBACiAJc3RydWN0IGFyY2hpdmVfZW50cnkJKmVudHJ5OyAvKiBFbnRyeSBiZWluZyBleHRyYWN0ZWQuICovCiAJY2hhcgkJCSpuYW1lOyAvKiBOYW1lIG9mIGVudHJ5LCBwb3NzaWJseSBlZGl0ZWQuICovCiAJc3RydWN0IGFyY2hpdmVfc3RyaW5nCSBfbmFtZV9kYXRhOyAvKiBiYWNraW5nIHN0b3JlIGZvciAnbmFtZScgKi8KKwljaGFyCQkJKnRtcG5hbWU7IC8qIFRlbXBvcmFyeSBuYW1lICogKi8KKwlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcJIF90bXBuYW1lX2RhdGE7IC8qIGJhY2tpbmcgc3RvcmUgZm9yICd0bXBuYW1lJyAqLwogCS8qIFRhc2tzIHJlbWFpbmluZyBmb3IgdGhpcyBvYmplY3QuICovCiAJaW50CQkJIHRvZG87CiAJLyogVGFza3MgZGVmZXJyZWQgdW50aWwgZW5kLW9mLWFyY2hpdmUuICovCkBAIC0zNDgsNiArMzU0LDkgQEAKIAogI2RlZmluZSBIRlNfQkxPQ0tTKHMpCSgocykgPj4gMTIpCiAKKworc3RhdGljIGludAlsYV9vcGVuZGlyYXQoaW50LCBjb25zdCBjaGFyICopOworc3RhdGljIGludAlsYV9ta3RlbXAoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKIHN0YXRpYyB2b2lkCWZzb2JqX2Vycm9yKGludCAqLCBzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKiwgaW50LCBjb25zdCBjaGFyICosCiAJCSAgICBjb25zdCBjaGFyICopOwogc3RhdGljIGludAljaGVja19zeW1saW5rc19mc29iaihjaGFyICosIGludCAqLCBzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKiwKQEAgLTQwMSw2ICs0MTAsNjEgQEAKIAkJICAgIHNpemVfdCwgaW50NjRfdCk7CiAKIHN0YXRpYyBpbnQKK2xhX21rdGVtcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQoreworCWludCBvZXJybm8sIGZkOworCW1vZGVfdCBtb2RlOworCisJYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJmEtPl90bXBuYW1lX2RhdGEpOworCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoJmEtPl90bXBuYW1lX2RhdGEsICIlcy5YWFhYWFgiLCBhLT5uYW1lKTsKKwlhLT50bXBuYW1lID0gYS0+X3RtcG5hbWVfZGF0YS5zOworCisJZmQgPSBfX2FyY2hpdmVfbWtzdGVtcChhLT50bXBuYW1lKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtMTsKKworCW1vZGUgPSBhLT5tb2RlICYgMDc3NyAmIH5hLT51c2VyX3VtYXNrOworCWlmIChmY2htb2QoZmQsIG1vZGUpID09IC0xKSB7CisJCW9lcnJubyA9IGVycm5vOworCQljbG9zZShmZCk7CisJCWVycm5vID0gb2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBmZDsKK30KKworc3RhdGljIGludAorbGFfb3BlbmRpcmF0KGludCBmZCwgY29uc3QgY2hhciAqcGF0aCkgeworCWNvbnN0IGludCBmbGFncyA9IE9fQ0xPRVhFQworI2lmIGRlZmluZWQoT19CSU5BUlkpCisJICAgIHwgT19CSU5BUlkKKyNlbmRpZgorI2lmIGRlZmluZWQoT19ESVJFQ1RPUlkpCisJICAgIHwgT19ESVJFQ1RPUlkKKyNlbmRpZgorI2lmIGRlZmluZWQoT19QQVRIKQorCSAgICB8IE9fUEFUSAorI2VsaWYgZGVmaW5lZChPX1NFQVJDSCkKKwkgICAgfCBPX1NFQVJDSAorI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChPX0VYRUMpCisJICAgIHwgT19FWEVDCisjZWxzZQorCSAgICB8IE9fUkRPTkxZCisjZW5kaWYKKwkgICAgOworCisjaWYgIWRlZmluZWQoSEFWRV9PUEVOQVQpCisJaWYgKGZkICE9IEFUX0ZEQ1dEKSB7CisJCWVycm5vID0gRU5PVFNVUDsKKwkJcmV0dXJuICgtMSk7CisJfSBlbHNlCisJCXJldHVybiAob3BlbihwYXRoLCBmbGFncykpOworI2Vsc2UKKwlyZXR1cm4gKG9wZW5hdChmZCwgcGF0aCwgZmxhZ3MpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50CiBsYXp5X3N0YXQoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKIHsKIAlpZiAoYS0+cHN0ICE9IE5VTEwpIHsKQEAgLTE3MDUsNiArMTc2OSwyMCBAQAogCX0KIAogCS8qCisJICogSFlQT1RIRVNJUzoKKwkgKiBJZiB3ZSdyZSBub3Qgcm9vdCwgd2Ugd29uJ3QgYmUgc2V0dGluZyBhbnkgc2VjdXJpdHkKKwkgKiBhdHRyaWJ1dGVzIHRoYXQgbWF5IGJlIHdpcGVkIGJ5IHRoZSBzZXRfbW9kZSgpIHJvdXRpbmUKKwkgKiBiZWxvdy4gIFdlIGFsc28gY2FuJ3Qgc2V0IHhhdHRyIG9uIG5vbi1vd25lci13cml0YWJsZSBmaWxlcywKKwkgKiB3aGljaCBtYXkgYmUgdGhlIHN0YXRlIGFmdGVyIHNldF9tb2RlKCkuIFBlcmZvcm0KKwkgKiBzZXRfeGF0dHJzKCkgZmlyc3QgYmFzZWQgb24gdGhlc2UgY29uc3RyYWludHMuCisJICovCisJaWYgKGEtPnVzZXJfdWlkICE9IDAgJiYKKwkgICAgKGEtPnRvZG8gJiBUT0RPX1hBVFRSKSkgeworCQlpbnQgcjIgPSBzZXRfeGF0dHJzKGEpOworCQlpZiAocjIgPCByZXQpIHJldCA9IHIyOworCX0KKworCS8qCiAJICogc2V0X21vZGUgbXVzdCBwcmVjZWRlIEFDTHMgb24gc3lzdGVtcyBzdWNoIGFzIFNvbGFyaXMgYW5kCiAJICogRnJlZUJTRCB3aGVyZSBzZXR0aW5nIHRoZSBtb2RlIGltcGxpY2l0bHkgY2xlYXJzIGV4dGVuZGVkIEFDTHMKIAkgKi8KQEAgLTE3MTcsOCArMTc5NSwxMCBAQAogCSAqIFNlY3VyaXR5LXJlbGF0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoc3VjaCBhcwogCSAqIHNlY3VyaXR5LmNhcGFiaWxpdHkgb24gTGludXgpIGhhdmUgdG8gYmUgcmVzdG9yZWQgbGFzdCwKIAkgKiBzaW5jZSB0aGV5J3JlIGltcGxpY2l0bHkgcmVtb3ZlZCBieSBvdGhlciBmaWxlIGNoYW5nZXMuCisJICogV2UgZG8gdGhpcyBsYXN0IG9ubHkgd2hlbiByb290LgogCSAqLwotCWlmIChhLT50b2RvICYgVE9ET19YQVRUUikgeworCWlmIChhLT51c2VyX3VpZCA9PSAwICYmCisJICAgIChhLT50b2RvICYgVE9ET19YQVRUUikpIHsKIAkJaW50IHIyID0gc2V0X3hhdHRycyhhKTsKIAkJaWYgKHIyIDwgcmV0KSByZXQgPSByMjsKIAl9CkBAIC0xNzczLDEyICsxODUzLDE4IEBACiAJaWYgKGEtPmZkID49IDApIHsKIAkJY2xvc2UoYS0+ZmQpOwogCQlhLT5mZCA9IC0xOworCQlpZiAoYS0+dG1wbmFtZSkgeworCQkJaWYgKHJlbmFtZShhLT50bXBuYW1lLCBhLT5uYW1lKSA9PSAtMSkgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKKwkJCQkgICAgInJlbmFtZSBmYWlsZWQiKTsKKwkJCQlyZXQgPSBBUkNISVZFX0ZBVEFMOworCQkJfQorCQkJYS0+dG1wbmFtZSA9IE5VTEw7CisJCX0KIAl9CiAJLyogSWYgdGhlcmUncyBhbiBlbnRyeSwgd2UgY2FuIHJlbGVhc2UgaXQgbm93LiAqLwotCWlmIChhLT5lbnRyeSkgewotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOwotCQlhLT5lbnRyeSA9IE5VTEw7Ci0JfQorCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7CisJYS0+ZW50cnkgPSBOVUxMOwogCWEtPmFyY2hpdmUuc3RhdGUgPSBBUkNISVZFX1NUQVRFX0hFQURFUjsKIAlyZXR1cm4gKHJldCk7CiB9CkBAIC0xODk1LDcgKzE5ODEsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBUcnkgdG8gcmVjb3JkIG91ciBzdGFydGluZyBkaXIuICovCi0JYS0+cmVzdG9yZV9wd2QgPSBvcGVuKCIuIiwgT19SRE9OTFkgfCBPX0JJTkFSWSB8IE9fQ0xPRVhFQyk7CisJYS0+cmVzdG9yZV9wd2QgPSBsYV9vcGVuZGlyYXQoQVRfRkRDV0QsICIuIik7CiAJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoYS0+cmVzdG9yZV9wd2QpOwogCWlmIChhLT5yZXN0b3JlX3B3ZCA8IDApCiAJCXJldHVybjsKQEAgLTIwMTgsNyArMjEwNCw3IEBACiAJCSAqIGZvbGxvdyB0aGUgc3ltbGluayBpZiB3ZSdyZSBjcmVhdGluZyBhIGRpci4KIAkJICovCiAJCWlmIChTX0lTRElSKGEtPm1vZGUpKQotCQkJciA9IHN0YXQoYS0+bmFtZSwgJmEtPnN0KTsKKwkJCXIgPSBsYV9zdGF0KGEtPm5hbWUsICZhLT5zdCk7CiAJCS8qCiAJCSAqIElmIGl0J3Mgbm90IGEgZGlyIChvciBpdCdzIGEgYnJva2VuIHN5bWxpbmspLAogCQkgKiB0aGVuIGRvbid0IGZvbGxvdyBpdC4KQEAgLTIwNTIsMTcgKzIxMzgsMjggQEAKIAkJfQogCiAJCWlmICghU19JU0RJUihhLT5zdC5zdF9tb2RlKSkgewotCQkJLyogQSBub24tZGlyIGlzIGluIHRoZSB3YXksIHVubGluayBpdC4gKi8KIAkJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MpCiAJCQkJKHZvaWQpY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKGEpOwotCQkJaWYgKHVubGluayhhLT5uYW1lKSAhPSAwKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAotCQkJCSAgICAiQ2FuJ3QgdW5saW5rIGFscmVhZHktZXhpc3Rpbmcgb2JqZWN0Iik7Ci0JCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisKKwkJCWlmICgoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0FGRV9XUklURVMpICYmCisJCQkgICAgU19JU1JFRyhhLT5zdC5zdF9tb2RlKSkgeworCQkJCS8qIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGV4dHJhY3QgKi8KKwkJCQlpZiAoKGEtPmZkID0gbGFfbWt0ZW1wKGEpKSA9PSAtMSkKKwkJCQkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOworCQkJCWEtPnBzdCA9IE5VTEw7CisJCQkJZW4gPSAwOworCQkJfSBlbHNlIHsKKwkJCQkvKiBBIG5vbi1kaXIgaXMgaW4gdGhlIHdheSwgdW5saW5rIGl0LiAqLworCQkJCWlmICh1bmxpbmsoYS0+bmFtZSkgIT0gMCkgeworCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCisJCQkJCSAgICAiQ2FuJ3QgdW5saW5rIGFscmVhZHktZXhpc3RpbmcgIgorCQkJCQkgICAgIm9iamVjdCIpOworCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCQl9CisJCQkJYS0+cHN0ID0gTlVMTDsKKwkJCQkvKiBUcnkgYWdhaW4uICovCisJCQkJZW4gPSBjcmVhdGVfZmlsZXN5c3RlbV9vYmplY3QoYSk7CiAJCQl9Ci0JCQlhLT5wc3QgPSBOVUxMOwotCQkJLyogVHJ5IGFnYWluLiAqLwotCQkJZW4gPSBjcmVhdGVfZmlsZXN5c3RlbV9vYmplY3QoYSk7CiAJCX0gZWxzZSBpZiAoIVNfSVNESVIoYS0+bW9kZSkpIHsKIAkJCS8qIEEgZGlyIGlzIGluIHRoZSB3YXkgb2YgYSBub24tZGlyLCBybWRpciBpdC4gKi8KIAkJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MpCkBAIC0yMTY0LDYgKzIyNjEsMTMgQEAKIAkJfQogCQlmcmVlKGxpbmtuYW1lX2NvcHkpOwogCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlcnJvcl9zdHJpbmcpOworCQkvKgorCQkgKiBVbmxpbmtpbmcgYW5kIGxpbmtpbmcgaGVyZSBpcyByZWFsbHkgbm90IGF0b21pYywKKwkJICogYnV0IGRvaW5nIGl0IHJpZ2h0LCB3b3VsZCByZXF1aXJlIHVzIHRvIGNvbnN0cnVjdAorCQkgKiBhbiBta3RlbXBsaW5rKCkgZnVuY3Rpb24sIGFuZCB0aGVuIHVzZSByZW5hbWUoMikuCisJCSAqLworCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0FGRV9XUklURVMpCisJCQl1bmxpbmsoYS0+bmFtZSk7CiAJCXIgPSBsaW5rKGxpbmtuYW1lLCBhLT5uYW1lKSA/IGVycm5vIDogMDsKIAkJLyoKIAkJICogTmV3IGNwaW8gYW5kIHBheCBmb3JtYXRzIGFsbG93IGhhcmRsaW5rIGVudHJpZXMKQEAgLTIxODQsNyArMjI4OCw3IEBACiAjaWZkZWYgSEFWRV9MU1RBVAogCQkJciA9IGxzdGF0KGEtPm5hbWUsICZzdCk7CiAjZWxzZQotCQkJciA9IHN0YXQoYS0+bmFtZSwgJnN0KTsKKwkJCXIgPSBsYV9zdGF0KGEtPm5hbWUsICZzdCk7CiAjZW5kaWYKIAkJCWlmIChyICE9IDApCiAJCQkJciA9IGVycm5vOwpAQCAtMjIwMiw2ICsyMzA2LDEzIEBACiAJbGlua25hbWUgPSBhcmNoaXZlX2VudHJ5X3N5bWxpbmsoYS0+ZW50cnkpOwogCWlmIChsaW5rbmFtZSAhPSBOVUxMKSB7CiAjaWYgSEFWRV9TWU1MSU5LCisJCS8qCisJCSAqIFVubGlua2luZyBhbmQgbGlua2luZyBoZXJlIGlzIHJlYWxseSBub3QgYXRvbWljLAorCQkgKiBidXQgZG9pbmcgaXQgcmlnaHQsIHdvdWxkIHJlcXVpcmUgdXMgdG8gY29uc3RydWN0CisJCSAqIGFuIG1rdGVtcHN5bWxpbmsoKSBmdW5jdGlvbiwgYW5kIHRoZW4gdXNlIHJlbmFtZSgyKS4KKwkJICovCisJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUykKKwkJCXVubGluayhhLT5uYW1lKTsKIAkJcmV0dXJuIHN5bWxpbmsobGlua25hbWUsIGEtPm5hbWUpID8gZXJybm8gOiAwOwogI2Vsc2UKIAkJcmV0dXJuIChFUEVSTSk7CkBAIC0yMjIzLDExICsyMzM0LDIxIEBACiAJICovCiAJbW9kZSA9IGZpbmFsX21vZGUgJiAwNzc3ICYgfmEtPnVzZXJfdW1hc2s7CiAKKwkvKiAKKwkgKiBBbHdheXMgY3JlYXRlIHdyaXRhYmxlIHN1Y2ggdGhhdCBbZl1zZXR4YXR0cigpIHdvcmtzIGlmIHdlJ3JlIG5vdAorCSAqIHJvb3QuCisJICovCisJaWYgKGEtPnVzZXJfdWlkICE9IDAgJiYKKwkgICAgYS0+dG9kbyAmIChUT0RPX0hGU19DT01QUkVTU0lPTiB8IFRPRE9fWEFUVFIpKSB7CisJCW1vZGUgfD0gMDIwMDsKKwl9CisKIAlzd2l0Y2ggKGEtPm1vZGUgJiBBRV9JRk1UKSB7CiAJZGVmYXVsdDoKIAkJLyogUE9TSVggcmVxdWlyZXMgdGhhdCB3ZSBmYWxsIHRocm91Z2ggaGVyZS4gKi8KIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIEFFX0lGUkVHOgorCQlhLT50bXBuYW1lID0gTlVMTDsKIAkJYS0+ZmQgPSBvcGVuKGEtPm5hbWUsCiAJCSAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX0JJTkFSWSB8IE9fQ0xPRVhFQywgbW9kZSk7CiAJCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKGEtPmZkKTsKQEAgLTIzMTksNyArMjQ0MCw3IEBACiB7CiAJc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSA9IChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopX2E7CiAJc3RydWN0IGZpeHVwX2VudHJ5ICpuZXh0LCAqcDsKLQlpbnQgcmV0OworCWludCBmZCwgcmV0OwogCiAJYXJjaGl2ZV9jaGVja19tYWdpYygmYS0+YXJjaGl2ZSwgQVJDSElWRV9XUklURV9ESVNLX01BR0lDLAogCSAgICBBUkNISVZFX1NUQVRFX0hFQURFUiB8IEFSQ0hJVkVfU1RBVEVfREFUQSwKQEAgLTIzMzAsMjEgKzI0NTEsMzMgQEAKIAlwID0gc29ydF9kaXJfbGlzdChhLT5maXh1cF9saXN0KTsKIAogCXdoaWxlIChwICE9IE5VTEwpIHsKKwkJZmQgPSAtMTsKIAkJYS0+cHN0ID0gTlVMTDsgLyogTWFyayBzdGF0IGNhY2hlIGFzIG91dC1vZi1kYXRlLiAqLworCQlpZiAocC0+Zml4dXAgJgorCQkgICAgKFRPRE9fVElNRVMgfCBUT0RPX01PREVfQkFTRSB8IFRPRE9fQUNMUyB8IFRPRE9fRkZMQUdTKSkgeworCQkJZmQgPSBvcGVuKHAtPm5hbWUsCisJCQkgICAgT19XUk9OTFkgfCBPX0JJTkFSWSB8IE9fTk9GT0xMT1cgfCBPX0NMT0VYRUMpOworCQl9CiAJCWlmIChwLT5maXh1cCAmIFRPRE9fVElNRVMpIHsKLQkJCXNldF90aW1lcyhhLCAtMSwgcC0+bW9kZSwgcC0+bmFtZSwKKwkJCXNldF90aW1lcyhhLCBmZCwgcC0+bW9kZSwgcC0+bmFtZSwKIAkJCSAgICBwLT5hdGltZSwgcC0+YXRpbWVfbmFub3MsCiAJCQkgICAgcC0+YmlydGh0aW1lLCBwLT5iaXJ0aHRpbWVfbmFub3MsCiAJCQkgICAgcC0+bXRpbWUsIHAtPm10aW1lX25hbm9zLAogCQkJICAgIHAtPmN0aW1lLCBwLT5jdGltZV9uYW5vcyk7CiAJCX0KLQkJaWYgKHAtPmZpeHVwICYgVE9ET19NT0RFX0JBU0UpCisJCWlmIChwLT5maXh1cCAmIFRPRE9fTU9ERV9CQVNFKSB7CisjaWZkZWYgSEFWRV9GQ0hNT0QKKwkJCWlmIChmZCA+PSAwKQorCQkJCWZjaG1vZChmZCwgcC0+bW9kZSk7CisJCQllbHNlCisjZW5kaWYKIAkJCWNobW9kKHAtPm5hbWUsIHAtPm1vZGUpOworCQl9CiAJCWlmIChwLT5maXh1cCAmIFRPRE9fQUNMUykKLQkJCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfYWNscygmYS0+YXJjaGl2ZSwgLTEsIHAtPm5hbWUsCi0JCQkgICAgJnAtPmFjbCwgcC0+bW9kZSk7CisJCQlhcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X2FjbHMoJmEtPmFyY2hpdmUsIGZkLAorCQkJICAgIHAtPm5hbWUsICZwLT5hY2wsIHAtPm1vZGUpOwogCQlpZiAocC0+Zml4dXAgJiBUT0RPX0ZGTEFHUykKLQkJCXNldF9mZmxhZ3NfcGxhdGZvcm0oYSwgLTEsIHAtPm5hbWUsCisJCQlzZXRfZmZsYWdzX3BsYXRmb3JtKGEsIGZkLCBwLT5uYW1lLAogCQkJICAgIHAtPm1vZGUsIHAtPmZmbGFnc19zZXQsIDApOwogCQlpZiAocC0+Zml4dXAgJiBUT0RPX01BQ19NRVRBREFUQSkKIAkJCXNldF9tYWNfbWV0YWRhdGEoYSwgcC0+bmFtZSwgcC0+bWFjX21ldGFkYXRhLApAQCAtMjM1Myw2ICsyNDg2LDggQEAKIAkJYXJjaGl2ZV9hY2xfY2xlYXIoJnAtPmFjbCk7CiAJCWZyZWUocC0+bWFjX21ldGFkYXRhKTsKIAkJZnJlZShwLT5uYW1lKTsKKwkJaWYgKGZkID49IDApCisJCQljbG9zZShmZCk7CiAJCWZyZWUocCk7CiAJCXAgPSBuZXh0OwogCX0KQEAgLTIzNzMsOSArMjUwOCw5IEBACiAJcmV0ID0gX2FyY2hpdmVfd3JpdGVfZGlza19jbG9zZSgmYS0+YXJjaGl2ZSk7CiAJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9ncm91cF9sb29rdXAoJmEtPmFyY2hpdmUsIE5VTEwsIE5VTEwsIE5VTEwpOwogCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfdXNlcl9sb29rdXAoJmEtPmFyY2hpdmUsIE5VTEwsIE5VTEwsIE5VTEwpOwotCWlmIChhLT5lbnRyeSkKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmEtPl9uYW1lX2RhdGEpOworCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmEtPl90bXBuYW1lX2RhdGEpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmEtPmFyY2hpdmUuZXJyb3Jfc3RyaW5nKTsKIAlhcmNoaXZlX3N0cmluZ19mcmVlKCZhLT5wYXRoX3NhZmUpOwogCWEtPmFyY2hpdmUubWFnaWMgPSAwOwpAQCAtMjUxOCw4ICsyNjUzLDYgQEAKICAqIHNjYW4gdGhlIHBhdGggYW5kIGJvdGggY2FuIGJlIG9wdGltaXplZCBieSBjb21wYXJpbmcgYWdhaW5zdCBvdGhlcgogICogcmVjZW50IHBhdGhzLgogICovCi0vKiBUT0RPOiBFeHRlbmQgdGhpcyB0byBzdXBwb3J0IHN5bWxpbmtzIG9uIFdpbmRvd3MgVmlzdGEgYW5kIGxhdGVyLiAqLwotCiAvKgogICogQ2hlY2tzIHRoZSBnaXZlbiBwYXRoIHRvIHNlZSBpZiBhbnkgZWxlbWVudHMgYWxvbmcgaXQgYXJlIHN5bWxpbmtzLiAgUmV0dXJucwogICogQVJDSElWRV9PSyBpZiB0aGVyZSBhcmUgbm9uZSwgb3RoZXJ3aXNlIHB1dHMgYW4gZXJyb3IgaW4gZXJybXNnLgpAQCAtMjUyOCw3ICsyNjYxLDggQEAKIGNoZWNrX3N5bWxpbmtzX2Zzb2JqKGNoYXIgKnBhdGgsIGludCAqYV9lbm8sIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqYV9lc3RyLAogICAgIGludCBmbGFncykKIHsKLSNpZiAhZGVmaW5lZChIQVZFX0xTVEFUKQorI2lmICFkZWZpbmVkKEhBVkVfTFNUQVQpICYmIFwKKyAgICAhKGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpKQogCS8qIFBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSBsc3RhdCwgc28gd2UgY2FuJ3QgbG9vayBmb3Igc3ltbGlua3MuICovCiAJKHZvaWQpcGF0aDsgLyogVU5VU0VEICovCiAJKHZvaWQpZXJyb3JfbnVtYmVyOyAvKiBVTlVTRUQgKi8KQEAgLTI1NDMsNyArMjY3NywxMCBAQAogCWNoYXIgYzsKIAlpbnQgcjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKLQlpbnQgcmVzdG9yZV9wd2Q7CisJaW50IGNoZGlyX2ZkOworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJaW50IGZkOworI2VuZGlmCiAKIAkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgaWYgbmFtZSBpcyBlbXB0eSAqLwogCWlmKHBhdGhbMF0gPT0gJ1wwJykKQEAgLTI1NjQsMTAgKzI3MDEsMTMgQEAKIAkgKiAgYyBob2xkcyB3aGF0IHVzZWQgdG8gYmUgaW4gKnRhaWwKIAkgKiAgbGFzdCBpcyAxIGlmIHRoaXMgaXMgdGhlIGxhc3QgdGFpbAogCSAqLwotCXJlc3RvcmVfcHdkID0gb3BlbigiLiIsIE9fUkRPTkxZIHwgT19CSU5BUlkgfCBPX0NMT0VYRUMpOwotCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKHJlc3RvcmVfcHdkKTsKLQlpZiAocmVzdG9yZV9wd2QgPCAwKQorCWNoZGlyX2ZkID0gbGFfb3BlbmRpcmF0KEFUX0ZEQ1dELCAiLiIpOworCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKGNoZGlyX2ZkKTsKKwlpZiAoY2hkaXJfZmQgPCAwKSB7CisJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIGVycm5vLAorCQkgICAgIkNvdWxkIG5vdCBvcGVuICIsIHBhdGgpOwogCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KIAloZWFkID0gcGF0aDsKIAl0YWlsID0gcGF0aDsKIAlsYXN0ID0gMDsKQEAgLTI1OTYsNyArMjczNiwxMSBAQAogCQljID0gdGFpbFswXTsKIAkJdGFpbFswXSA9ICdcMCc7CiAJCS8qIENoZWNrIHRoYXQgd2UgaGF2ZW4ndCBoaXQgYSBzeW1saW5rLiAqLworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJCXIgPSBmc3RhdGF0KGNoZGlyX2ZkLCBoZWFkLCAmc3QsIEFUX1NZTUxJTktfTk9GT0xMT1cpOworI2Vsc2UKIAkJciA9IGxzdGF0KGhlYWQsICZzdCk7CisjZW5kaWYKIAkJaWYgKHIgIT0gMCkgewogCQkJdGFpbFswXSA9IGM7CiAJCQkvKiBXZSd2ZSBoaXQgYSBkaXIgdGhhdCBkb2Vzbid0IGV4aXN0OyBzdG9wIG5vdy4gKi8KQEAgLTI2MjIsNyArMjc2NiwxOSBAQAogCQkJfQogCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKIAkJCWlmICghbGFzdCkgewotCQkJCWlmIChjaGRpcihoZWFkKSAhPSAwKSB7CisjaWYgZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkKKwkJCQlmZCA9IGxhX29wZW5kaXJhdChjaGRpcl9mZCwgaGVhZCk7CisJCQkJaWYgKGZkIDwgMCkKKwkJCQkJciA9IC0xOworCQkJCWVsc2UgeworCQkJCQlyID0gMDsKKwkJCQkJY2xvc2UoY2hkaXJfZmQpOworCQkJCQljaGRpcl9mZCA9IGZkOworCQkJCX0KKyNlbHNlCisJCQkJciA9IGNoZGlyKGhlYWQpOworI2VuZGlmCisJCQkJaWYgKHIgIT0gMCkgewogCQkJCQl0YWlsWzBdID0gYzsKIAkJCQkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwgZXJybm8sCiAJCQkJCSAgICAiQ291bGQgbm90IGNoZGlyICIsIHBhdGgpOwpAQCAtMjYzOSw3ICsyNzk1LDEyIEBACiAJCQkJICogc28gd2UgY2FuIG92ZXJ3cml0ZSBpdCB3aXRoIHRoZQogCQkJCSAqIGl0ZW0gYmVpbmcgZXh0cmFjdGVkLgogCQkJCSAqLwotCQkJCWlmICh1bmxpbmsoaGVhZCkpIHsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCQkJCXIgPSB1bmxpbmthdChjaGRpcl9mZCwgaGVhZCwgMCk7CisjZWxzZQorCQkJCXIgPSB1bmxpbmsoaGVhZCk7CisjZW5kaWYKKwkJCQlpZiAociAhPSAwKSB7CiAJCQkJCXRhaWxbMF0gPSBjOwogCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCBlcnJubywKIAkJCQkJICAgICJDb3VsZCBub3QgcmVtb3ZlIHN5bWxpbmsgIiwKQEAgLTI2NjksNyArMjgzMCwxMiBAQAogCQkJCWJyZWFrOwogCQkJfSBlbHNlIGlmIChmbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9VTkxJTkspIHsKIAkJCQkvKiBVc2VyIGFza2VkIHVzIHRvIHJlbW92ZSBwcm9ibGVtcy4gKi8KLQkJCQlpZiAodW5saW5rKGhlYWQpICE9IDApIHsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCQkJCXIgPSB1bmxpbmthdChjaGRpcl9mZCwgaGVhZCwgMCk7CisjZWxzZQorCQkJCXIgPSB1bmxpbmsoaGVhZCk7CisjZW5kaWYKKwkJCQlpZiAociAhPSAwKSB7CiAJCQkJCXRhaWxbMF0gPSBjOwogCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCAwLAogCQkJCQkgICAgIkNhbm5vdCByZW1vdmUgaW50ZXJ2ZW5pbmcgIgpAQCAtMjY4Nyw3ICsyODUzLDExIEBACiAJCQkJICogVGhpcyBpcyBuZWVkZWQgdG8gZXh0cmFjdCBoYXJkbGlua3Mgb3ZlcgogCQkJCSAqIHN5bWxpbmtzLgogCQkJCSAqLwotCQkJCXIgPSBzdGF0KGhlYWQsICZzdCk7CisjaWYgZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkKKwkJCQlyID0gZnN0YXRhdChjaGRpcl9mZCwgaGVhZCwgJnN0LCAwKTsKKyNlbHNlCisJCQkJciA9IGxhX3N0YXQoaGVhZCwgJnN0KTsKKyNlbmRpZgogCQkJCWlmIChyICE9IDApIHsKIAkJCQkJdGFpbFswXSA9IGM7CiAJCQkJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKQEAgLTI3MDAsNyArMjg3MCwxOSBAQAogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKLQkJCQkJaWYgKGNoZGlyKGhlYWQpICE9IDApIHsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCQkJCQlmZCA9IGxhX29wZW5kaXJhdChjaGRpcl9mZCwgaGVhZCk7CisJCQkJCWlmIChmZCA8IDApCisJCQkJCQlyID0gLTE7CisJCQkJCWVsc2UgeworCQkJCQkJciA9IDA7CisJCQkJCQljbG9zZShjaGRpcl9mZCk7CisJCQkJCQljaGRpcl9mZCA9IGZkOworCQkJCQl9CisjZWxzZQorCQkJCQlyID0gY2hkaXIoaGVhZCk7CisjZW5kaWYKKwkJCQkJaWYgKHIgIT0gMCkgewogCQkJCQkJdGFpbFswXSA9IGM7CiAJCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLAogCQkJCQkJICAgIGVycm5vLApAQCAtMjczNiwxNiArMjkxOCwyMSBAQAogCX0KIAkvKiBDYXRjaGVzIGxvb3AgZXhpdHMgdmlhIGJyZWFrICovCiAJdGFpbFswXSA9IGM7Ci0jaWZkZWYgSEFWRV9GQ0hESVIKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCS8qIElmIHdlIG9wZXJhdGUgd2l0aCBvcGVuYXQoKSwgZnN0YXRhdCgpIGFuZCB1bmxpbmthdCgpIHRoZXJlIHdhcworCSAqIG5vIGNoZGlyKCksIHNvIGp1c3QgY2xvc2UgdGhlIGZkICovCisJaWYgKGNoZGlyX2ZkID49IDApCisJCWNsb3NlKGNoZGlyX2ZkKTsKKyNlbGlmIEhBVkVfRkNIRElSCiAJLyogSWYgd2UgY2hhbmdlZCBkaXJlY3RvcnkgYWJvdmUsIHJlc3RvcmUgaXQgaGVyZS4gKi8KLQlpZiAocmVzdG9yZV9wd2QgPj0gMCkgewotCQlyID0gZmNoZGlyKHJlc3RvcmVfcHdkKTsKKwlpZiAoY2hkaXJfZmQgPj0gMCkgeworCQlyID0gZmNoZGlyKGNoZGlyX2ZkKTsKIAkJaWYgKHIgIT0gMCkgewogCQkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwgZXJybm8sCiAJCQkgICAgImNoZGlyKCkgZmFpbHVyZSIsICIiKTsKIAkJfQotCQljbG9zZShyZXN0b3JlX3B3ZCk7Ci0JCXJlc3RvcmVfcHdkID0gLTE7CisJCWNsb3NlKGNoZGlyX2ZkKTsKKwkJY2hkaXJfZmQgPSAtMTsKIAkJaWYgKHIgIT0gMCkgewogCQkJcmVzID0gKEFSQ0hJVkVfRkFUQUwpOwogCQl9CkBAIC0zMDI3LDcgKzMyMTQsNyBAQAogCSAqIGhlcmUgbG9zZXMgdGhlIGFiaWxpdHkgdG8gZXh0cmFjdCB0aHJvdWdoIHN5bWxpbmtzLiAgQWxzbyBub3RlCiAJICogdGhhdCB0aGlzIHNob3VsZCBub3QgdXNlIHRoZSBhLT5zdCBjYWNoZS4KIAkgKi8KLQlpZiAoc3RhdChwYXRoLCAmc3QpID09IDApIHsKKwlpZiAobGFfc3RhdChwYXRoLCAmc3QpID09IDApIHsKIAkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwogCQlpZiAoKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX05PX09WRVJXUklURSkpIHsKQEAgLTMwODUsNyArMzI3Miw3IEBACiAJICogZG9uJ3QgYWRkIGl0IHRvIHRoZSBmaXh1cCBsaXN0IGhlcmUsIGFzIGl0J3MgYWxyZWFkeSBiZWVuCiAJICogYWRkZWQuCiAJICovCi0JaWYgKHN0YXQocGF0aCwgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJaWYgKGxhX3N0YXQocGF0aCwgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAKIAlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sICJGYWlsZWQgdG8gY3JlYXRlIGRpciAnJXMnIiwKQEAgLTMxMDYsMTIgKzMyOTMsMTQgQEAKIHN0YXRpYyBpbnQKIHNldF9vd25lcnNoaXAoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKIHsKLSNpZm5kZWYgX19DWUdXSU5fXwotLyogdW5mb3J0dW5hdGVseSwgb24gd2luMzIgdGhlcmUgaXMgbm8gJ3Jvb3QnIHVzZXIgd2l0aCB1aWQgMCwKLSAgIHNvIHdlIGp1c3QgaGF2ZSB0byB0cnkgdGhlIGNob3duIGFuZCBzZWUgaWYgaXQgd29ya3MgKi8KLQotCS8qIElmIHdlIGtub3cgd2UgY2FuJ3QgY2hhbmdlIGl0LCBkb24ndCBib3RoZXIgdHJ5aW5nLiAqLwotCWlmIChhLT51c2VyX3VpZCAhPSAwICAmJiAgYS0+dXNlcl91aWQgIT0gYS0+dWlkKSB7CisjaWYgIWRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoX19saW51eF9fKQorLyoKKyAqIE9uIExpbnV4LCBhIHByb2Nlc3MgbWF5IGhhdmUgdGhlIENBUF9DSE9XTiBjYXBhYmlsaXR5LgorICogT24gV2luZG93cyB0aGVyZSBpcyBubyAncm9vdCcgdXNlciB3aXRoIHVpZCAwLgorICogRWxzZXdoZXJlIHdlIGNhbiBza2lwIGNhbGxpbmcgY2hvd24gaWYgd2UgYXJlIG5vdCByb290IGFuZCB0aGUgZGVzaXJlZAorICogdXNlciBpZCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB1c2VyLgorICovCisJaWYgKGEtPnVzZXJfdWlkICE9IDAgJiYgYS0+dXNlcl91aWQgIT0gYS0+dWlkKSB7CiAJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKIAkJICAgICJDYW4ndCBzZXQgVUlEPSVqZCIsIChpbnRtYXhfdClhLT51aWQpOwogCQlyZXR1cm4gKEFSQ0hJVkVfV0FSTik7CkBAIC0zMzYwLDYgKzM1NDksNyBAQAogc2V0X21vZGUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSwgaW50IG1vZGUpCiB7CiAJaW50IHIgPSBBUkNISVZFX09LOworCWludCByMjsKIAltb2RlICY9IDA3Nzc3OyAvKiBTdHJpcCBvZmYgZmlsZSB0eXBlIGJpdHMuICovCiAKIAlpZiAoYS0+dG9kbyAmIFRPRE9fU0dJRF9DSEVDSykgewpAQCAtMzQ1MywyMSArMzY0MywxOSBAQAogCQkgKiBwb3N0LWV4dHJhY3QgZml4dXAsIHdoaWNoIGlzIGhhbmRsZWQgZWxzZXdoZXJlLgogCQkgKi8KICNpZmRlZiBIQVZFX0ZDSE1PRAotCQlpZiAoYS0+ZmQgPj0gMCkgewotCQkJaWYgKGZjaG1vZChhLT5mZCwgbW9kZSkgIT0gMCkgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKLQkJCQkgICAgIkNhbid0IHNldCBwZXJtaXNzaW9ucyB0byAwJW8iLCAoaW50KW1vZGUpOwotCQkJCXIgPSBBUkNISVZFX1dBUk47Ci0JCQl9Ci0JCX0gZWxzZQorCQlpZiAoYS0+ZmQgPj0gMCkKKwkJCXIyID0gZmNobW9kKGEtPmZkLCBtb2RlKTsKKwkJZWxzZQogI2VuZGlmCi0JCQkvKiBJZiB0aGlzIHBsYXRmb3JtIGxhY2tzIGZjaG1vZCgpLCB0aGVuCi0JCQkgKiB3ZSdsbCBqdXN0IHVzZSBjaG1vZCgpLiAqLwotCQkJaWYgKGNobW9kKGEtPm5hbWUsIG1vZGUpICE9IDApIHsKLQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCi0JCQkJICAgICJDYW4ndCBzZXQgcGVybWlzc2lvbnMgdG8gMCVvIiwgKGludCltb2RlKTsKLQkJCQlyID0gQVJDSElWRV9XQVJOOwotCQkJfQorCQkvKiBJZiB0aGlzIHBsYXRmb3JtIGxhY2tzIGZjaG1vZCgpLCB0aGVuCisJCSAqIHdlJ2xsIGp1c3QgdXNlIGNobW9kKCkuICovCisJCXIyID0gY2htb2QoYS0+bmFtZSwgbW9kZSk7CisKKwkJaWYgKHIyICE9IDApIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKKwkJCSAgICAiQ2FuJ3Qgc2V0IHBlcm1pc3Npb25zIHRvIDAlbyIsIChpbnQpbW9kZSk7CisJCQlyID0gQVJDSElWRV9XQVJOOworCQl9CiAJfQogCXJldHVybiAocik7CiB9CkBAIC0zNDc4LDkgKzM2NjYsNyBAQAogCXN0cnVjdCBmaXh1cF9lbnRyeSAqbGU7CiAJdW5zaWduZWQgbG9uZwlzZXQsIGNsZWFyOwogCWludAkJcjsKLQlpbnQJCWNyaXRpY2FsX2ZsYWdzOwogCW1vZGVfdAkJbW9kZSA9IGFyY2hpdmVfZW50cnlfbW9kZShhLT5lbnRyeSk7Ci0KIAkvKgogCSAqIE1ha2UgJ2NyaXRpY2FsX2ZsYWdzJyBob2xkIGFsbCBmaWxlIGZsYWdzIHRoYXQgY2FuJ3QgYmUKIAkgKiBpbW1lZGlhdGVseSByZXN0b3JlZC4gIEZvciBleGFtcGxlLCBvbiBCU0Qgc3lzdGVtcywKQEAgLTM0OTYsMzMgKzM2ODIsMzMgQEAKIAkgKiBvdGhlciBwcm9ncmFtcyB0aGF0IG1pZ2h0IHRyeSB0byBtdWNrIHdpdGggZmlsZXMgYXMgdGhleSdyZQogCSAqIGJlaW5nIHJlc3RvcmVkLgogCSAqLwotCS8qIEhvcGVmdWxseSwgdGhlIGNvbXBpbGVyIHdpbGwgb3B0aW1pemUgdGhpcyBtZXNzIGludG8gYSBjb25zdGFudC4gKi8KLQljcml0aWNhbF9mbGFncyA9IDA7CisJY29uc3QgaW50CWNyaXRpY2FsX2ZsYWdzID0gMAogI2lmZGVmIFNGX0lNTVVUQUJMRQotCWNyaXRpY2FsX2ZsYWdzIHw9IFNGX0lNTVVUQUJMRTsKKwkgICAgfCBTRl9JTU1VVEFCTEUKICNlbmRpZgogI2lmZGVmIFVGX0lNTVVUQUJMRQotCWNyaXRpY2FsX2ZsYWdzIHw9IFVGX0lNTVVUQUJMRTsKKwkgICAgfCBVRl9JTU1VVEFCTEUKICNlbmRpZgogI2lmZGVmIFNGX0FQUEVORAotCWNyaXRpY2FsX2ZsYWdzIHw9IFNGX0FQUEVORDsKKwkgICAgfCBTRl9BUFBFTkQKICNlbmRpZgogI2lmZGVmIFVGX0FQUEVORAotCWNyaXRpY2FsX2ZsYWdzIHw9IFVGX0FQUEVORDsKKwkgICAgfCBVRl9BUFBFTkQKICNlbmRpZgogI2lmIGRlZmluZWQoRlNfQVBQRU5EX0ZMKQotCWNyaXRpY2FsX2ZsYWdzIHw9IEZTX0FQUEVORF9GTDsKKwkgICAgfCBGU19BUFBFTkRfRkwKICNlbGlmIGRlZmluZWQoRVhUMl9BUFBFTkRfRkwpCi0JY3JpdGljYWxfZmxhZ3MgfD0gRVhUMl9BUFBFTkRfRkw7CisJICAgIHwgRVhUMl9BUFBFTkRfRkwKICNlbmRpZgogI2lmIGRlZmluZWQoRlNfSU1NVVRBQkxFX0ZMKQotCWNyaXRpY2FsX2ZsYWdzIHw9IEZTX0lNTVVUQUJMRV9GTDsKKwkgICAgfCBGU19JTU1VVEFCTEVfRkwKICNlbGlmIGRlZmluZWQoRVhUMl9JTU1VVEFCTEVfRkwpCi0JY3JpdGljYWxfZmxhZ3MgfD0gRVhUMl9JTU1VVEFCTEVfRkw7CisJICAgIHwgRVhUMl9JTU1VVEFCTEVfRkwKICNlbmRpZgogI2lmZGVmIEZTX0pPVVJOQUxfREFUQV9GTAotCWNyaXRpY2FsX2ZsYWdzIHw9IEZTX0pPVVJOQUxfREFUQV9GTDsKKwkgICAgfCBGU19KT1VSTkFMX0RBVEFfRkwKICNlbmRpZgorCTsKIAogCWlmIChhLT50b2RvICYgVE9ET19GRkxBR1MpIHsKIAkJYXJjaGl2ZV9lbnRyeV9mZmxhZ3MoYS0+ZW50cnksICZzZXQsICZjbGVhcik7CkBAIC0zNTUzLDI5ICszNzM5LDI3IEBACiBzdGF0aWMgaW50CiBjbGVhcl9ub2NoYW5nZV9mZmxhZ3Moc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKIHsKLQlpbnQJCW5vY2hhbmdlX2ZsYWdzOwogCW1vZGVfdAkJbW9kZSA9IGFyY2hpdmVfZW50cnlfbW9kZShhLT5lbnRyeSk7Ci0KLQkvKiBIb3BlZnVsbHksIHRoZSBjb21waWxlciB3aWxsIG9wdGltaXplIHRoaXMgbWVzcyBpbnRvIGEgY29uc3RhbnQuICovCi0Jbm9jaGFuZ2VfZmxhZ3MgPSAwOworCWNvbnN0IGludCBub2NoYW5nZV9mbGFncyA9IDAKICNpZmRlZiBTRl9JTU1VVEFCTEUKLQlub2NoYW5nZV9mbGFncyB8PSBTRl9JTU1VVEFCTEU7CisJICAgIHwgU0ZfSU1NVVRBQkxFCiAjZW5kaWYKICNpZmRlZiBVRl9JTU1VVEFCTEUKLQlub2NoYW5nZV9mbGFncyB8PSBVRl9JTU1VVEFCTEU7CisJICAgIHwgVUZfSU1NVVRBQkxFCiAjZW5kaWYKICNpZmRlZiBTRl9BUFBFTkQKLQlub2NoYW5nZV9mbGFncyB8PSBTRl9BUFBFTkQ7CisJICAgIHwgU0ZfQVBQRU5ECiAjZW5kaWYKICNpZmRlZiBVRl9BUFBFTkQKLQlub2NoYW5nZV9mbGFncyB8PSBVRl9BUFBFTkQ7CisJICAgIHwgVUZfQVBQRU5ECiAjZW5kaWYKICNpZmRlZiBFWFQyX0FQUEVORF9GTAotCW5vY2hhbmdlX2ZsYWdzIHw9IEVYVDJfQVBQRU5EX0ZMOworCSAgICB8IEVYVDJfQVBQRU5EX0ZMCiAjZW5kaWYKICNpZmRlZiBFWFQyX0lNTVVUQUJMRV9GTAotCW5vY2hhbmdlX2ZsYWdzIHw9IEVYVDJfSU1NVVRBQkxFX0ZMOworCSAgICB8IEVYVDJfSU1NVVRBQkxFX0ZMCiAjZW5kaWYKKwk7CiAKIAlyZXR1cm4gKHNldF9mZmxhZ3NfcGxhdGZvcm0oYSwgYS0+ZmQsIGEtPm5hbWUsIG1vZGUsIDAsCiAJICAgIG5vY2hhbmdlX2ZsYWdzKSk7CkBAIC0zNTkxLDggKzM3NzUsMjIgQEAKICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgbG9uZyBzZXQsIHVuc2lnbmVkIGxvbmcgY2xlYXIpCiB7CiAJaW50IHI7Ci0KKwljb25zdCBpbnQgc2ZfbWFzayA9IDAKKyNpZmRlZiBTRl9BUFBFTkQKKwkgICAgfCBTRl9BUFBFTkQKKyNlbmRpZgorI2lmZGVmIFNGX0FSQ0hJVkVECisJICAgIHwgU0ZfQVJDSElWRUQKKyNlbmRpZgorI2lmZGVmIFNGX0lNTVVUQUJMRQorCSAgICB8IFNGX0lNTVVUQUJMRQorI2VuZGlmCisjaWZkZWYgU0ZfTk9VTkxJTksKKwkgICAgfCBTRl9OT1VOTElOSworI2VuZGlmCisJOwogCSh2b2lkKW1vZGU7IC8qIFVOVVNFRCAqLworCiAJaWYgKHNldCA9PSAwICAmJiBjbGVhciA9PSAwKQogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwogCkBAIC0zNjA3LDYgKzM4MDUsMTIgQEAKIAogCWEtPnN0LnN0X2ZsYWdzICY9IH5jbGVhcjsKIAlhLT5zdC5zdF9mbGFncyB8PSBzZXQ7CisKKwkvKiBPbmx5IHN1cGVyLXVzZXIgbWF5IGNoYW5nZSBTRl8qIGZsYWdzICovCisKKwlpZiAoYS0+dXNlcl91aWQgIT0gMCkKKwkJYS0+c3Quc3RfZmxhZ3MgJj0gfnNmX21hc2s7CisKICNpZmRlZiBIQVZFX0ZDSEZMQUdTCiAJLyogSWYgcGxhdGZvcm0gaGFzIGZjaGZsYWdzKCkgYW5kIHdlIHdlcmUgZ2l2ZW4gYW4gZmQsIHVzZSBpdC4gKi8KIAlpZiAoZmQgPj0gMCAmJiBmY2hmbGFncyhmZCwgYS0+c3Quc3RfZmxhZ3MpID09IDApCkBAIC0zNjQ4LDcgKzM4NTIsMjggQEAKIAlpbnQJCSByZXQ7CiAJaW50CQkgbXlmZCA9IGZkOwogCWludCBuZXdmbGFncywgb2xkZmxhZ3M7Ci0JaW50IHNmX21hc2sgPSAwOworCS8qCisJICogTGludXggaGFzIG5vIGRlZmluZSBmb3IgdGhlIGZsYWdzIHRoYXQgYXJlIG9ubHkgc2V0dGFibGUgYnkKKwkgKiB0aGUgcm9vdCB1c2VyLiAgVGhpcyBjb2RlIG1heSBzZWVtIGEgbGl0dGxlIGNvbXBsZXgsIGJ1dAorCSAqIHRoZXJlIHNlZW0gdG8gYmUgc29tZSBMaW51eCBzeXN0ZW1zIHRoYXQgbGFjayB0aGVzZQorCSAqIGRlZmluZXMuICg/KSAgVGhlIGNvZGUgYmVsb3cgZGVncmFkZXMgcmVhc29uYWJseSBncmFjZWZ1bGx5CisJICogaWYgc2ZfbWFzayBpcyBpbmNvbXBsZXRlLgorCSAqLworCWNvbnN0IGludCBzZl9tYXNrID0gMAorI2lmIGRlZmluZWQoRlNfSU1NVVRBQkxFX0ZMKQorCSAgICB8IEZTX0lNTVVUQUJMRV9GTAorI2VsaWYgZGVmaW5lZChFWFQyX0lNTVVUQUJMRV9GTCkKKwkgICAgfCBFWFQyX0lNTVVUQUJMRV9GTAorI2VuZGlmCisjaWYgZGVmaW5lZChGU19BUFBFTkRfRkwpCisJICAgIHwgRlNfQVBQRU5EX0ZMCisjZWxpZiBkZWZpbmVkKEVYVDJfQVBQRU5EX0ZMKQorCSAgICB8IEVYVDJfQVBQRU5EX0ZMCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTX0pPVVJOQUxfREFUQV9GTCkKKwkgICAgfCBGU19KT1VSTkFMX0RBVEFfRkwKKyNlbmRpZgorCTsKIAogCWlmIChzZXQgPT0gMCAmJiBjbGVhciA9PSAwKQogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwpAQCAtMzY2NSwyNiArMzg5MCw2IEBACiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAKIAkvKgotCSAqIExpbnV4IGhhcyBubyBkZWZpbmUgZm9yIHRoZSBmbGFncyB0aGF0IGFyZSBvbmx5IHNldHRhYmxlIGJ5Ci0JICogdGhlIHJvb3QgdXNlci4gIFRoaXMgY29kZSBtYXkgc2VlbSBhIGxpdHRsZSBjb21wbGV4LCBidXQKLQkgKiB0aGVyZSBzZWVtIHRvIGJlIHNvbWUgTGludXggc3lzdGVtcyB0aGF0IGxhY2sgdGhlc2UKLQkgKiBkZWZpbmVzLiAoPykgIFRoZSBjb2RlIGJlbG93IGRlZ3JhZGVzIHJlYXNvbmFibHkgZ3JhY2VmdWxseQotCSAqIGlmIHNmX21hc2sgaXMgaW5jb21wbGV0ZS4KLQkgKi8KLSNpZiBkZWZpbmVkKEZTX0lNTVVUQUJMRV9GTCkKLQlzZl9tYXNrIHw9IEZTX0lNTVVUQUJMRV9GTDsKLSNlbGlmIGRlZmluZWQoRVhUMl9JTU1VVEFCTEVfRkwpCi0Jc2ZfbWFzayB8PSBFWFQyX0lNTVVUQUJMRV9GTDsKLSNlbmRpZgotI2lmIGRlZmluZWQoRlNfQVBQRU5EX0ZMKQotCXNmX21hc2sgfD0gRlNfQVBQRU5EX0ZMOwotI2VsaWYgZGVmaW5lZChFWFQyX0FQUEVORF9GTCkKLQlzZl9tYXNrIHw9IEVYVDJfQVBQRU5EX0ZMOwotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19KT1VSTkFMX0RBVEFfRkwpCi0Jc2ZfbWFzayB8PSBGU19KT1VSTkFMX0RBVEFfRkw7Ci0jZW5kaWYKLQkvKgogCSAqIFhYWCBBcyBhYm92ZSwgdGhpcyB3b3VsZCBiZSB3YXkgc2ltcGxlciBpZiB3ZSBkaWRuJ3QgaGF2ZQogCSAqIHRvIHJlYWQgdGhlIGN1cnJlbnQgZmxhZ3MgZnJvbSBkaXNrLiBYWFgKIAkgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wcml2YXRlLmgKaW5kZXggYjY1NWRlYS4uNTU3ZDdlMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wcml2YXRlLmgKQEAgLTI2LDEzICsyNiwxMyBAQAogICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3ByaXZhdGUuaCAyMDEwODYgMjAwOS0xMi0yOCAwMjoxNzo1M1oga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9XUklURV9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1dSSVRFX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfV1JJVEVfRElTS19QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9XUklURV9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZV9wbGF0Zm9ybV9hY2wuaCIKICNpbmNsdWRlICJhcmNoaXZlX2FjbF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19zZXRfc3RhbmRhcmRfbG9va3VwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9zdGFuZGFyZF9sb29rdXAuYwppbmRleCA1Yzc2NmQ3Li41ZmNjZGI5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9zdGFuZGFyZF9sb29rdXAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9zdGFuZGFyZF9sb29rdXAuYwpAQCAtMTE0LDggKzExNCw3IEBACiAJCXJldHVybiAoKGdpZF90KWItPmlkKTsKIAogCS8qIEZyZWUgdGhlIGNhY2hlIHNsb3QgZm9yIGEgbmV3IGVudHJ5LiAqLwotCWlmIChiLT5uYW1lICE9IE5VTEwpCi0JCWZyZWUoYi0+bmFtZSk7CisJZnJlZShiLT5uYW1lKTsKIAliLT5uYW1lID0gc3RyZHVwKGduYW1lKTsKIAkvKiBOb3RlOiBJZiBzdHJkdXAgZmFpbHMsIHRoYXQncyBva2F5OyB3ZSBqdXN0IHdvbid0IGNhY2hlLiAqLwogCWItPmhhc2ggPSBoOwpAQCAtMTg0LDggKzE4Myw3IEBACiAJCXJldHVybiAoKHVpZF90KWItPmlkKTsKIAogCS8qIEZyZWUgdGhlIGNhY2hlIHNsb3QgZm9yIGEgbmV3IGVudHJ5LiAqLwotCWlmIChiLT5uYW1lICE9IE5VTEwpCi0JCWZyZWUoYi0+bmFtZSk7CisJZnJlZShiLT5uYW1lKTsKIAliLT5uYW1lID0gc3RyZHVwKHVuYW1lKTsKIAkvKiBOb3RlOiBJZiBzdHJkdXAgZmFpbHMsIHRoYXQncyBva2F5OyB3ZSBqdXN0IHdvbid0IGNhY2hlLiAqLwogCWItPmhhc2ggPSBoOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza193aW5kb3dzLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3dpbmRvd3MuYwppbmRleCA3OGVkYTRhLi43N2UzNmM0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3dpbmRvd3MuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3dpbmRvd3MuYwpAQCAtMTY1LDYgKzE2NSw4IEBACiAJc3RydWN0IGFyY2hpdmVfZW50cnkJKmVudHJ5OyAvKiBFbnRyeSBiZWluZyBleHRyYWN0ZWQuICovCiAJd2NoYXJfdAkJCSpuYW1lOyAvKiBOYW1lIG9mIGVudHJ5LCBwb3NzaWJseSBlZGl0ZWQuICovCiAJc3RydWN0IGFyY2hpdmVfd3N0cmluZwkgX25hbWVfZGF0YTsgLyogYmFja2luZyBzdG9yZSBmb3IgJ25hbWUnICovCisJd2NoYXJfdAkJCSp0bXBuYW1lOyAvKiBUZW1wb3JhcnkgbmFtZSAqLworCXN0cnVjdCBhcmNoaXZlX3dzdHJpbmcJX3RtcG5hbWVfZGF0YTsgLyogYmFja2luZyBzdG9yZSBmb3IgJ3RtcG5hbWUnICovCiAJLyogVGFza3MgcmVtYWluaW5nIGZvciB0aGlzIG9iamVjdC4gKi8KIAlpbnQJCQkgdG9kbzsKIAkvKiBUYXNrcyBkZWZlcnJlZCB1bnRpbCBlbmQtb2YtYXJjaGl2ZS4gKi8KQEAgLTIwNSw2ICsyMDcsOCBAQAogI2RlZmluZQlNSU5JTVVNX0RJUl9NT0RFIDA3MDAKICNkZWZpbmUJTUFYSU1VTV9ESVJfTU9ERSAwNzc1CiAKK3N0YXRpYyBpbnQJZGlza191bmxpbmsoY29uc3Qgd2NoYXJfdCAqKTsKK3N0YXRpYyBpbnQJZGlza19ybWRpcihjb25zdCB3Y2hhcl90ICopOwogc3RhdGljIGludAljaGVja19zeW1saW5rcyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAljcmVhdGVfZmlsZXN5c3RlbV9vYmplY3Qoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKIHN0YXRpYyBzdHJ1Y3QgZml4dXBfZW50cnkgKmN1cnJlbnRfZml4dXAoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqLApAQCAtMjEzLDEzICsyMTcsMTcgQEAKIHN0YXRpYyBpbnQJY3JlYXRlX2RpcihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosIHdjaGFyX3QgKik7CiBzdGF0aWMgaW50CWNyZWF0ZV9wYXJlbnRfZGlyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKiwgd2NoYXJfdCAqKTsKIHN0YXRpYyBpbnQJbGFfY2htb2QoY29uc3Qgd2NoYXJfdCAqLCBtb2RlX3QpOworc3RhdGljIGludAlsYV9ta3RlbXAoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKIHN0YXRpYyBpbnQJb2xkZXIoQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gKiwgc3RydWN0IGFyY2hpdmVfZW50cnkgKik7CiBzdGF0aWMgaW50CXBlcm1pc3NpdmVfbmFtZV93KHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7CiBzdGF0aWMgaW50CXJlc3RvcmVfZW50cnkoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKIHN0YXRpYyBpbnQJc2V0X2FjbHMoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqLCBIQU5ETEUgaCwKIAkJICAgIGNvbnN0IHdjaGFyX3QgKiwgc3RydWN0IGFyY2hpdmVfYWNsICopOwogc3RhdGljIGludAlzZXRfeGF0dHJzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7CitzdGF0aWMgaW50CWNsZWFyX25vY2hhbmdlX2ZmbGFncyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAlzZXRfZmZsYWdzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7CitzdGF0aWMgaW50CXNldF9mZmxhZ3NfcGxhdGZvcm0oY29uc3Qgd2NoYXJfdCAqLCB1bnNpZ25lZCBsb25nLAorCQkgICAgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaW50CXNldF9vd25lcnNoaXAoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKIHN0YXRpYyBpbnQJc2V0X21vZGUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqLCBpbnQgbW9kZSk7CiBzdGF0aWMgaW50CXNldF90aW1lcyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosIEhBTkRMRSwgaW50LApAQCAtNDc0LDYgKzQ4MiwxMSBAQAogCXsKIAkJYXJjaGl2ZV93c3RybmNweSgmKGEtPl9uYW1lX2RhdGEpLCB3c3AsIGwpOwogCX0KKwllbHNlIGlmIChsID4gMiAmJiB3c3BbMF0gPT0gTCdcXCcgJiYgd3NwWzFdID09IEwnXFwnICYmIHdzcFsyXSAhPSBMJ1xcJykKKwl7CisJCWFyY2hpdmVfd3N0cm5jcHkoJihhLT5fbmFtZV9kYXRhKSwgTCJcXFxcP1xcVU5DXFwiLCA4KTsKKwkJYXJjaGl2ZV93c3RybmNhdCgmKGEtPl9uYW1lX2RhdGEpLCB3c3ArMiwgbC0yKTsKKwl9CiAJZWxzZQogCXsKIAkJYXJjaGl2ZV93c3RybmNweSgmKGEtPl9uYW1lX2RhdGEpLCBMIlxcXFw/XFwiLCA0KTsKQEAgLTUyNCw2ICs1MzcsMjggQEAKIAlyZXR1cm4gKHJldCk7CiB9CiAKK3N0YXRpYyBpbnQKK2xhX21rdGVtcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQoreworCWludCBmZDsKKwltb2RlX3QgbW9kZTsKKworCWFyY2hpdmVfd3N0cmluZ19lbXB0eSgmKGEtPl90bXBuYW1lX2RhdGEpKTsKKwlhcmNoaXZlX3dzdHJjcHkoJihhLT5fdG1wbmFtZV9kYXRhKSwgYS0+bmFtZSk7CisJYXJjaGl2ZV93c3RyY2F0KCYoYS0+X3RtcG5hbWVfZGF0YSksIEwiLlhYWFhYWCIpOworCWEtPnRtcG5hbWUgPSBhLT5fdG1wbmFtZV9kYXRhLnM7CisKKwlmZCA9IF9fYXJjaGl2ZV9ta3N0ZW1wKGEtPnRtcG5hbWUpOworCisJbW9kZSA9IGEtPm1vZGUgJiAwNzc3ICYgfmEtPnVzZXJfdW1hc2s7CisJaWYgKGxhX2NobW9kKGEtPnRtcG5hbWUsIG1vZGUpID09IC0xKSB7CisJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCV9jbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIChmZCk7Cit9CisKIHN0YXRpYyB2b2lkICoKIGxhX0dldEZ1bmN0aW9uS2VybmVsMzIoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTU1MSw4ICs1ODYsMTAgQEAKIAkJc2V0ID0gMTsKIAkJZiA9IGxhX0dldEZ1bmN0aW9uS2VybmVsMzIoIkNyZWF0ZUhhcmRMaW5rVyIpOwogCX0KLQlpZiAoIWYpCisJaWYgKCFmKSB7CisJCWVycm5vID0gRU5PVFNVUDsKIAkJcmV0dXJuICgwKTsKKwl9CiAJcmV0ID0gKCpmKShsaW5rbmFtZSwgdGFyZ2V0LCBOVUxMKTsKIAlpZiAoIXJldCkgewogCQkvKiBVbmRlciB3aW5kb3dzIDIwMDAsIGl0IGlzIG5lY2Vzc2FyeSB0byByZW1vdmUKQEAgLTU3Nyw2ICs2MTQsMTAzIEBACiAJcmV0dXJuIChyZXQpOwogfQogCisvKgorICogQ3JlYXRlIGZpbGUgb3IgZGlyZWN0b3J5IHN5bW9saWMgbGluaworICoKKyAqIElmIGxpbmt0eXBlIGlzIEFFX1NZTUxJTktfVFlQRV9VTkRFRklORUQgKG9yIHVua25vd24pLCBndWVzcyBsaW5rdHlwZSBmcm9tCisgKiB0aGUgbGluayB0YXJnZXQKKyAqLworc3RhdGljIGludAorbGFfQ3JlYXRlU3ltYm9saWNMaW5rVyhjb25zdCB3Y2hhcl90ICpsaW5rbmFtZSwgY29uc3Qgd2NoYXJfdCAqdGFyZ2V0LAorICAgIGludCBsaW5rdHlwZSkgeworCXN0YXRpYyBCT09MRUFOIChXSU5BUEkgKmYpKExQQ1dTVFIsIExQQ1dTVFIsIERXT1JEKTsKKwlzdGF0aWMgaW50IHNldDsKKwl3Y2hhcl90ICp0dGFyZ2V0LCAqcDsKKwlpbnQgbGVuOworCURXT1JEIGF0dHJzID0gMDsKKwlEV09SRCBmbGFncyA9IDA7CisJRFdPUkQgbmV3ZmxhZ3MgPSAwOworCUJPT0wgcmV0ID0gMDsKKworCWlmICghc2V0KSB7CisJCXNldCA9IDE7CisJCWYgPSBsYV9HZXRGdW5jdGlvbktlcm5lbDMyKCJDcmVhdGVTeW1ib2xpY0xpbmtXIik7CisJfQorCWlmICghZikKKwkJcmV0dXJuICgwKTsKKworCWxlbiA9IHdjc2xlbih0YXJnZXQpOworCWlmIChsZW4gPT0gMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuKDApOworCX0KKwkvKgorCSAqIFdoZW4gd3JpdGluZyBwYXRoIHRhcmdldHMsIHdlIG5lZWQgdG8gdHJhbnNsYXRlIHNsYXNoZXMKKwkgKiB0byBiYWNrc2xhc2hlcworCSAqLworCXR0YXJnZXQgPSBtYWxsb2MoKGxlbiArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKwlpZiAodHRhcmdldCA9PSBOVUxMKQorCQlyZXR1cm4oMCk7CisKKwlwID0gdHRhcmdldDsKKworCXdoaWxlKCp0YXJnZXQgIT0gTCdcMCcpIHsKKwkJaWYgKCp0YXJnZXQgPT0gTCcvJykKKwkJCSpwID0gTCdcXCc7CisJCWVsc2UKKwkJCSpwID0gKnRhcmdldDsKKwkJdGFyZ2V0Kys7CisJCXArKzsKKwl9CisJKnAgPSBMJ1wwJzsKKworCS8qCisJICogSW4gY2FzZSBvZiB1bmRlZmluZWQgc3ltbGluayB0eXBlIHdlIGd1ZXNzIGl0IGZyb20gdGhlIHRhcmdldC4KKwkgKiBJZiB0aGUgdGFyZ2V0IGVxdWFscyAiLiIsICIuLiIsIGVuZHMgd2l0aCBhIGJhY2tzbGFzaCBvciBhCisJICogYmFja3NsYXNoIGZvbGxvd2VkIGJ5ICIuIiBvciAiLi4iIHdlIGFzc3VtZSBpdCBpcyBhIGRpcmVjdG9yeQorCSAqIHN5bWxpbmsuIEluIGFsbCBvdGhlciBjYXNlcyB3ZSBhc3N1bWUgYSBmaWxlIHN5bWxpbmsuCisJICovCisJaWYgKGxpbmt0eXBlICE9IEFFX1NZTUxJTktfVFlQRV9GSUxFICYmICgKKwkJbGlua3R5cGUgPT0gQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSB8fAorCQkqKHAgLSAxKSA9PSBMJ1xcJyB8fCAoKihwIC0gMSkgPT0gTCcuJyAmJiAoCisJICAgIGxlbiA9PSAxIHx8ICoocCAtIDIpID09IEwnXFwnIHx8ICggKihwIC0gMikgPT0gTCcuJyAmJiAoCisJICAgIGxlbiA9PSAyIHx8ICoocCAtIDMpID09IEwnXFwnKSkpKSkpIHsKKyNpZiBkZWZpbmVkKFNZTUJPTElDX0xJTktfRkxBR19ESVJFQ1RPUlkpCisJCWZsYWdzIHw9IFNZTUJPTElDX0xJTktfRkxBR19ESVJFQ1RPUlk7CisjZWxzZQorCQlmbGFncyB8PSAweDE7CisjZW5kaWYKKwl9CisKKyNpZiBkZWZpbmVkKFNZTUJPTElDX0xJTktfRkxBR19BTExPV19VTlBSSVZJTEVHRURfQ1JFQVRFKQorCW5ld2ZsYWdzID0gZmxhZ3MgfCBTWU1CT0xJQ19MSU5LX0ZMQUdfQUxMT1dfVU5QUklWSUxFR0VEX0NSRUFURTsKKyNlbHNlCisJbmV3ZmxhZ3MgPSBmbGFncyB8IDB4MjsKKyNlbmRpZgorCisJLyoKKwkgKiBXaW5kb3dzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBsaW5rcworCSAqLworCWF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKGxpbmtuYW1lKTsKKwlpZiAoYXR0cnMgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKKwkJaWYgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorCQkJZGlza19ybWRpcihsaW5rbmFtZSk7CisJCWVsc2UKKwkJCWRpc2tfdW5saW5rKGxpbmtuYW1lKTsKKwl9CisKKwlyZXQgPSAoKmYpKGxpbmtuYW1lLCB0dGFyZ2V0LCBuZXdmbGFncyk7CisJLyoKKwkgKiBQcmlvciB0byBXaW5kb3dzIDEwIGNhbGxpbmcgQ3JlYXRlU3ltYm9saWNMaW5rVygpIHdpbGwgZmFpbAorCSAqIGlmIFNZTUJPTElDX0xJTktfRkxBR19BTExPV19VTlBSSVZJTEVHRURfQ1JFQVRFIGlzIHNldAorCSAqLworCWlmICghcmV0KSB7CisJCXJldCA9ICgqZikobGlua25hbWUsIHR0YXJnZXQsIGZsYWdzKTsKKwl9CisJZnJlZSh0dGFyZ2V0KTsKKwlyZXR1cm4gKHJldCk7Cit9CisKIHN0YXRpYyBpbnQKIGxhX2Z0cnVuY2F0ZShIQU5ETEUgaGFuZGxlLCBpbnQ2NF90IGxlbmd0aCkKIHsKQEAgLTY5NiwxMCArODMwLDggQEAKIAlhLT5wc3QgPSBOVUxMOwogCWEtPmN1cnJlbnRfZml4dXAgPSBOVUxMOwogCWEtPmRlZmVycmVkID0gMDsKLQlpZiAoYS0+ZW50cnkpIHsKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKLQkJYS0+ZW50cnkgPSBOVUxMOwotCX0KKwlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOworCWEtPmVudHJ5ID0gTlVMTDsKIAlhLT5lbnRyeSA9IGFyY2hpdmVfZW50cnlfY2xvbmUoZW50cnkpOwogCWEtPmZoID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAJYS0+ZmRfb2Zmc2V0ID0gMDsKQEAgLTg2MCw5ICs5OTIsMTEgQEAKIAl9CiAKIAlpZiAoYS0+ZGVmZXJyZWQgJiBUT0RPX0ZGTEFHUykgeworCQl1bnNpZ25lZCBsb25nIHNldCwgY2xlYXI7CisKIAkJZmUgPSBjdXJyZW50X2ZpeHVwKGEsIGFyY2hpdmVfZW50cnlfcGF0aG5hbWVfdyhlbnRyeSkpOwotCQlmZS0+Zml4dXAgfD0gVE9ET19GRkxBR1M7Ci0JCS8qIFRPRE86IENvbXBsZXRlIHRoaXMuLiBkZWZlciBmZmxhZ3MgZnJvbSBiZWxvdy4gKi8KKwkJYXJjaGl2ZV9lbnRyeV9mZmxhZ3MoZW50cnksICZzZXQsICZjbGVhcik7CisJCWZlLT5mZmxhZ3Nfc2V0ID0gc2V0OwogCX0KIAogCS8qCkBAIC0xMTQzLDEyICsxMjc3LDIwIEBACiAJaWYgKGEtPmZoICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAJCUNsb3NlSGFuZGxlKGEtPmZoKTsKIAkJYS0+ZmggPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKwkJaWYgKGEtPnRtcG5hbWUpIHsKKwkJCS8qIFdpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBhdG9taWMgcmVuYW1lICovCisJCQlkaXNrX3VubGluayhhLT5uYW1lKTsKKwkJCWlmIChfd3JlbmFtZShhLT50bXBuYW1lLCBhLT5uYW1lKSAhPSAwKSB7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAorCQkJCSAgICAicmVuYW1lIGZhaWxlZCIpOworCQkJCXJldCA9IEFSQ0hJVkVfRkFUQUw7CisJCQl9CisJCQlhLT50bXBuYW1lID0gTlVMTDsKKwkJfQogCX0KIAkvKiBJZiB0aGVyZSdzIGFuIGVudHJ5LCB3ZSBjYW4gcmVsZWFzZSBpdCBub3cuICovCi0JaWYgKGEtPmVudHJ5KSB7Ci0JCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7Ci0JCWEtPmVudHJ5ID0gTlVMTDsKLQl9CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKKwlhLT5lbnRyeSA9IE5VTEw7CiAJYS0+YXJjaGl2ZS5zdGF0ZSA9IEFSQ0hJVkVfU1RBVEVfSEVBREVSOwogCXJldHVybiAocmV0KTsKIH0KQEAgLTEyMzksNyArMTM4MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRpc2tfdW5saW5rKHdjaGFyX3QgKnBhdGgpCitkaXNrX3VubGluayhjb25zdCB3Y2hhcl90ICpwYXRoKQogewogCXdjaGFyX3QgKmZ1bGxuYW1lOwogCWludCByOwpAQCAtMTI1NCw3ICsxMzk2LDcgQEAKIH0KIAogc3RhdGljIGludAotZGlza19ybWRpcih3Y2hhcl90ICpwYXRoKQorZGlza19ybWRpcihjb25zdCB3Y2hhcl90ICpwYXRoKQogewogCXdjaGFyX3QgKmZ1bGxuYW1lOwogCWludCByOwpAQCAtMTI4NSw2ICsxNDI3LDggQEAKIAkJICogb2JqZWN0IGlzIGEgZGlyLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gdGhlIG9sZAogCQkgKiBvYmplY3QgaXNuJ3QgYSBkaXIuCiAJCSAqLworCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfQ0xFQVJfTk9DSEFOR0VfRkZMQUdTKQorCQkJKHZvaWQpY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKGEpOwogCQlpZiAoZGlza191bmxpbmsoYS0+bmFtZSkgPT0gMCkgewogCQkJLyogV2UgcmVtb3ZlZCBpdCwgcmVzZXQgY2FjaGVkIHN0YXQuICovCiAJCQlhLT5wc3QgPSBOVUxMOwpAQCAtMTM1OSwyOCArMTUwMyw0NSBAQAogCQllbiA9IGNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChhKTsKIAl9IGVsc2UgaWYgKGVuID09IEVFWElTVCkgewogCQltb2RlX3Qgc3RfbW9kZTsKKwkJbW9kZV90IGxzdF9tb2RlOworCQlCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBsc3Q7CiAJCS8qCiAJCSAqIFdlIGtub3cgc29tZXRoaW5nIGlzIGluIHRoZSB3YXksIGJ1dCB3ZSBkb24ndCBrbm93IHdoYXQ7CiAJCSAqIHdlIG5lZWQgdG8gZmluZCBvdXQgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLgogCQkgKi8KIAkJaW50IHIgPSAwOworCQlpbnQgZGlybG5rID0gMDsKKwogCQkvKgogCQkgKiBUaGUgU0VDVVJFX1NZTUxJTksgbG9naWMgaGFzIGFscmVhZHkgcmVtb3ZlZCBhCiAJCSAqIHN5bWxpbmsgdG8gYSBkaXIgaWYgdGhlIGNsaWVudCB3YW50cyB0aGF0LiAgU28KIAkJICogZm9sbG93IHRoZSBzeW1saW5rIGlmIHdlJ3JlIGNyZWF0aW5nIGEgZGlyLgotCQkgKi8KLQkJaWYgKFNfSVNESVIoYS0+bW9kZSkpCi0JCQlyID0gZmlsZV9pbmZvcm1hdGlvbihhLCBhLT5uYW1lLCAmYS0+c3QsICZzdF9tb2RlLCAwKTsKLQkJLyoKIAkJICogSWYgaXQncyBub3QgYSBkaXIgKG9yIGl0J3MgYSBicm9rZW4gc3ltbGluayksCiAJCSAqIHRoZW4gZG9uJ3QgZm9sbG93IGl0LgorCQkgKgorCQkgKiBXaW5kb3dzIGRpc3Rpbmd1aXNoZXMgZmlsZSBhbmQgZGlyZWN0b3J5IHN5bWxpbmtzLgorCQkgKiBBIGZpbGUgc3ltbGluayBtYXkgZXJyb25lb3VzbHkgcG9pbnQgdG8gYSBkaXJlY3RvcnkKKwkJICogYW5kIGEgZGlyZWN0b3J5IHN5bWxpbmsgdG8gYSBmaWxlLiBXaW5kb3dzIGRvZXMgbm90IGZvbGxvdworCQkgKiBzdWNoIHN5bWxpbmtzLiBXZSBhbHdheXMgbmVlZCBib3RoIHNvdXJjZSBhbmQgdGFyZ2V0CisJCSAqIGluZm9ybWF0aW9uLgogCQkgKi8KLQkJaWYgKHIgIT0gMCB8fCAhU19JU0RJUihhLT5tb2RlKSkKLQkJCXIgPSBmaWxlX2luZm9ybWF0aW9uKGEsIGEtPm5hbWUsICZhLT5zdCwgJnN0X21vZGUsIDEpOworCQlyID0gZmlsZV9pbmZvcm1hdGlvbihhLCBhLT5uYW1lLCAmbHN0LCAmbHN0X21vZGUsIDEpOwogCQlpZiAociAhPSAwKSB7CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCiAJCQkgICAgIkNhbid0IHN0YXQgZXhpc3Rpbmcgb2JqZWN0Iik7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJfSBlbHNlIGlmIChTX0lTTE5LKGxzdF9tb2RlKSkgeworCQkJaWYgKGxzdC5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorCQkJCWRpcmxuayA9IDE7CisJCQkvKiBJbiBjYXNlIG9mIGEgc3ltbGluayB3ZSBuZWVkIHRhcmdldCBpbmZvcm1hdGlvbiAqLworCQkJciA9IGZpbGVfaW5mb3JtYXRpb24oYSwgYS0+bmFtZSwgJmEtPnN0LCAmc3RfbW9kZSwgMCk7CisJCQlpZiAociAhPSAwKSB7CisJCQkJYS0+c3QgPSBsc3Q7CisJCQkJc3RfbW9kZSA9IGxzdF9tb2RlOworCQkJfQorCQl9IGVsc2UgeworCQkJYS0+c3QgPSBsc3Q7CisJCQlzdF9tb2RlID0gbHN0X21vZGU7CiAJCX0KIAogCQkvKgpAQCAtMTQwNCwxNyArMTU2NSw1MCBAQAogCQl9CiAKIAkJaWYgKCFTX0lTRElSKHN0X21vZGUpKSB7Ci0JCQkvKiBBIG5vbi1kaXIgaXMgaW4gdGhlIHdheSwgdW5saW5rIGl0LiAqLwotCQkJaWYgKGRpc2tfdW5saW5rKGEtPm5hbWUpICE9IDApIHsKLQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCi0JCQkJICAgICJDYW4ndCB1bmxpbmsgYWxyZWFkeS1leGlzdGluZyBvYmplY3QiKTsKLQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCWlmIChhLT5mbGFncyAmCisJCQkgICAgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykgeworCQkJCSh2b2lkKWNsZWFyX25vY2hhbmdlX2ZmbGFncyhhKTsKIAkJCX0KLQkJCWEtPnBzdCA9IE5VTEw7Ci0JCQkvKiBUcnkgYWdhaW4uICovCi0JCQllbiA9IGNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChhKTsKKwkJCWlmICgoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0FGRV9XUklURVMpICYmCisJCQkJU19JU1JFRyhzdF9tb2RlKSkgeworCQkJCWludCBmZCA9IGxhX21rdGVtcChhKTsKKworCQkJCWlmIChmZCA9PSAtMSkKKwkJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisJCQkJYS0+ZmggPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKwkJCQlpZiAoYS0+ZmggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCisJCQkJYS0+cHN0ID0gTlVMTDsKKwkJCQllbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCWlmIChkaXJsbmspIHsKKwkJCQkJLyogRWRnZSBjYXNlOiBkaXIgc3ltbGluayBwb2ludGluZworCQkJCQkgKiB0byBhIGZpbGUgKi8KKwkJCQkJaWYgKGRpc2tfcm1kaXIoYS0+bmFtZSkgIT0gMCkgeworCQkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJCQkgICAgZXJybm8sICJDYW4ndCB1bmxpbmsgIgorCQkJCQkJICAgICJkaXJlY3Rvcnkgc3ltbGluayIpOworCQkJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoZGlza191bmxpbmsoYS0+bmFtZSkgIT0gMCkgeworCQkJCQkJLyogQSBub24tZGlyIGlzIGluIHRoZSB3YXksCisJCQkJCQkgKiB1bmxpbmsgaXQuICovCisJCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJCSAgICBlcnJubywgIkNhbid0IHVubGluayAiCisJCQkJCQkgICAgImFscmVhZHktZXhpc3Rpbmcgb2JqZWN0Iik7CisJCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlhLT5wc3QgPSBOVUxMOworCQkJCS8qIFRyeSBhZ2Fpbi4gKi8KKwkJCQllbiA9IGNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChhKTsKKwkJCX0KIAkJfSBlbHNlIGlmICghU19JU0RJUihhLT5tb2RlKSkgewogCQkJLyogQSBkaXIgaXMgaW4gdGhlIHdheSBvZiBhIG5vbi1kaXIsIHJtZGlyIGl0LiAqLworCQkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykKKwkJCQkodm9pZCljbGVhcl9ub2NoYW5nZV9mZmxhZ3MoYSk7CiAJCQlpZiAoZGlza19ybWRpcihhLT5uYW1lKSAhPSAwKSB7CiAJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAogCQkJCSAgICAiQ2FuJ3QgcmVtb3ZlIGFscmVhZHktZXhpc3RpbmcgZGlyIik7CkBAIC0xNDYyLDYgKzE2NTYsNyBAQAogCXdjaGFyX3QgKmZ1bGxuYW1lOwogCW1vZGVfdCBmaW5hbF9tb2RlLCBtb2RlOwogCWludCByOworCURXT1JEIGF0dHJzID0gMDsKIAogCS8qIFdlIGlkZW50aWZ5IGhhcmQvc3ltbGlua3MgYWNjb3JkaW5nIHRvIHRoZSBsaW5rIG5hbWVzLiAqLwogCS8qIFNpbmNlIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgZG9uJ3QgaGFuZGxlIG1vZGVzLCB3ZSdyZSBkb25lIGhlcmUuICovCkBAIC0xNDc1LDYgKzE2NzAsMjAgQEAKIAkJCWVycm5vID0gRUlOVkFMOwogCQkJciA9IC0xOwogCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFVubGlua2luZyBhbmQgbGlua2luZyBoZXJlIGlzIHJlYWxseSBub3QgYXRvbWljLAorCQkJICogYnV0IGRvaW5nIGl0IHJpZ2h0LCB3b3VsZCByZXF1aXJlIHVzIHRvIGNvbnN0cnVjdAorCQkJICogYW4gbWt0ZW1wbGluaygpIGZ1bmN0aW9uLCBhbmQgdGhlbiB1c2UgX3dyZW5hbWUoKS4KKwkJCSAqLworCQkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX1NBRkVfV1JJVEVTKSB7CisJCQkJYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cobmFtZWZ1bGwpOworCQkJCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworCQkJCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQkJCQlkaXNrX3JtZGlyKG5hbWVmdWxsKTsKKwkJCQkJZWxzZQorCQkJCQkJZGlza191bmxpbmsobmFtZWZ1bGwpOworCQkJCX0KKwkJCX0KIAkJCXIgPSBsYV9DcmVhdGVIYXJkTGlua1cobmFtZWZ1bGwsIGxpbmtmdWxsKTsKIAkJCWlmIChyID09IDApIHsKIAkJCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOwpAQCAtMTUxMSwxMCArMTcyMCwzMSBAQAogCX0KIAlsaW5rbmFtZSA9IGFyY2hpdmVfZW50cnlfc3ltbGlua193KGEtPmVudHJ5KTsKIAlpZiAobGlua25hbWUgIT0gTlVMTCkgeworCQkvKgorCQkgKiBVbmxpbmtpbmcgYW5kIGxpbmtpbmcgaGVyZSBpcyByZWFsbHkgbm90IGF0b21pYywKKwkJICogYnV0IGRvaW5nIGl0IHJpZ2h0LCB3b3VsZCByZXF1aXJlIHVzIHRvIGNvbnN0cnVjdAorCQkgKiBhbiBta3RlbXBsaW5rKCkgZnVuY3Rpb24sIGFuZCB0aGVuIHVzZSBfd3JlbmFtZSgpLgorCQkgKi8KKwkJYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1coYS0+bmFtZSk7CisJCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworCQkJaWYgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorCQkJCWRpc2tfcm1kaXIoYS0+bmFtZSk7CisJCQllbHNlCisJCQkJZGlza191bmxpbmsoYS0+bmFtZSk7CisJCX0KICNpZiBIQVZFX1NZTUxJTksKIAkJcmV0dXJuIHN5bWxpbmsobGlua25hbWUsIGEtPm5hbWUpID8gZXJybm8gOiAwOwogI2Vsc2UKLQkJcmV0dXJuIChFUEVSTSk7CisJCWVycm5vID0gMDsKKwkJciA9IGxhX0NyZWF0ZVN5bWJvbGljTGlua1coKGNvbnN0IHdjaGFyX3QgKilhLT5uYW1lLCBsaW5rbmFtZSwKKwkJICAgIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlKGEtPmVudHJ5KSk7CisJCWlmIChyID09IDApIHsKKwkJCWlmIChlcnJubyA9PSAwKQorCQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCQlyID0gZXJybm87CisJCX0gZWxzZQorCQkJciA9IDA7CisJCXJldHVybiAocik7CiAjZW5kaWYKIAl9CiAKQEAgLTE1MzgsNiArMTc2OCw3IEBACiAJCS8qIFBPU0lYIHJlcXVpcmVzIHRoYXQgd2UgZmFsbCB0aHJvdWdoIGhlcmUuICovCiAJCS8qIEZBTExUSFJPVUdIICovCiAJY2FzZSBBRV9JRlJFRzoKKwkJYS0+dG1wbmFtZSA9IE5VTEw7CiAJCWZ1bGxuYW1lID0gYS0+bmFtZTsKIAkJLyogT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMICovCiAJCWEtPmZoID0gQ3JlYXRlRmlsZVcoZnVsbG5hbWUsIEdFTkVSSUNfV1JJVEUsIDAsIE5VTEwsCkBAIC0xNjY3LDYgKzE4OTgsOCBAQAogCQkJbGFfY2htb2QocC0+bmFtZSwgcC0+bW9kZSk7CiAJCWlmIChwLT5maXh1cCAmIFRPRE9fQUNMUykKIAkJCXNldF9hY2xzKGEsIElOVkFMSURfSEFORExFX1ZBTFVFLCBwLT5uYW1lLCAmcC0+YWNsKTsKKwkJaWYgKHAtPmZpeHVwICYgVE9ET19GRkxBR1MpCisJCQlzZXRfZmZsYWdzX3BsYXRmb3JtKHAtPm5hbWUsIHAtPmZmbGFnc19zZXQsIDApOwogCQluZXh0ID0gcC0+bmV4dDsKIAkJYXJjaGl2ZV9hY2xfY2xlYXIoJnAtPmFjbCk7CiAJCWZyZWUocC0+bmFtZSk7CkBAIC0xNjkwLDkgKzE5MjMsOSBAQAogCXJldCA9IF9hcmNoaXZlX3dyaXRlX2Rpc2tfY2xvc2UoJmEtPmFyY2hpdmUpOwogCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfZ3JvdXBfbG9va3VwKCZhLT5hcmNoaXZlLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAlhcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X3VzZXJfbG9va3VwKCZhLT5hcmNoaXZlLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQlpZiAoYS0+ZW50cnkpCi0JCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKIAlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmYS0+X25hbWVfZGF0YSk7CisJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJmEtPl90bXBuYW1lX2RhdGEpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmEtPmFyY2hpdmUuZXJyb3Jfc3RyaW5nKTsKIAlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmYS0+cGF0aF9zYWZlKTsKIAlhLT5hcmNoaXZlLm1hZ2ljID0gMDsKQEAgLTE3ODQsNiArMjAxNyw3IEBACiAJYS0+Zml4dXBfbGlzdCA9IGZlOwogCWZlLT5maXh1cCA9IDA7CiAJZmUtPm5hbWUgPSBfd2NzZHVwKHBhdGhuYW1lKTsKKwlmZS0+ZmZsYWdzX3NldCA9IDA7CiAJcmV0dXJuIChmZSk7CiB9CiAKQEAgLTE3OTgsNyArMjAzMiw2IEBACiAJcmV0dXJuIChhLT5jdXJyZW50X2ZpeHVwKTsKIH0KIAotLyogVE9ETzogTWFrZSB0aGlzIHdvcmsuICovCiAvKgogICogVE9ETzogVGhlIGRlZXAtZGlyZWN0b3J5IHN1cHBvcnQgYnlwYXNzZXMgdGhpczsgZGlzYWJsZSBkZWVwIGRpcmVjdG9yeQogICogc3VwcG9ydCBpZiB3ZSdyZSBkb2luZyBzeW1saW5rIGNoZWNrcy4KQEAgLTE4MDgsNyArMjA0MSw2IEBACiAgKiBzY2FuIHRoZSBwYXRoIGFuZCBib3RoIGNhbiBiZSBvcHRpbWl6ZWQgYnkgY29tcGFyaW5nIGFnYWluc3Qgb3RoZXIKICAqIHJlY2VudCBwYXRocy4KICAqLwotLyogVE9ETzogRXh0ZW5kIHRoaXMgdG8gc3VwcG9ydCBzeW1saW5rcyBvbiBXaW5kb3dzIFZpc3RhIGFuZCBsYXRlci4gKi8KIHN0YXRpYyBpbnQKIGNoZWNrX3N5bWxpbmtzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCiB7CkBAIC0xODI3LDYgKzIwNTksOSBAQAogCXAgPSBhLT5wYXRoX3NhZmUuczsKIAl3aGlsZSAoKCpwbiAhPSAnXDAnKSAmJiAoKnAgPT0gKnBuKSkKIAkJKytwLCArK3BuOworCS8qIFNraXAgbGVhZGluZyBiYWNrc2xhc2hlcyAqLworCXdoaWxlICgqcG4gPT0gJ1xcJykKKwkJKytwbjsKIAljID0gcG5bMF07CiAJLyogS2VlcCBnb2luZyB1bnRpbCB3ZSd2ZSBjaGVja2VkIHRoZSBlbnRpcmUgbmFtZS4gKi8KIAl3aGlsZSAocG5bMF0gIT0gJ1wwJyAmJiAocG5bMF0gIT0gJ1xcJyB8fCBwblsxXSAhPSAnXDAnKSkgewpAQCAtMTg0NCwxMSArMjA3OSwyMSBAQAogCQl9IGVsc2UgaWYgKFNfSVNMTksoc3RfbW9kZSkpIHsKIAkJCWlmIChjID09ICdcMCcpIHsKIAkJCQkvKgotCQkJCSAqIExhc3QgZWxlbWVudCBpcyBzeW1saW5rOyByZW1vdmUgaXQKLQkJCQkgKiBzbyB3ZSBjYW4gb3ZlcndyaXRlIGl0IHdpdGggdGhlCisJCQkJICogTGFzdCBlbGVtZW50IGlzIGEgZmlsZSBvciBkaXJlY3Rvcnkgc3ltbGluay4KKwkJCQkgKiBSZW1vdmUgaXQgc28gd2UgY2FuIG92ZXJ3cml0ZSBpdCB3aXRoIHRoZQogCQkJCSAqIGl0ZW0gYmVpbmcgZXh0cmFjdGVkLgogCQkJCSAqLwotCQkJCWlmIChkaXNrX3VubGluayhhLT5uYW1lKSkgeworCQkJCWlmIChhLT5mbGFncyAmCisJCQkJICAgIEFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MpIHsKKwkJCQkJKHZvaWQpY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKGEpOworCQkJCX0KKwkJCQlpZiAoc3QuZHdGaWxlQXR0cmlidXRlcyAmCisJCQkJICAgIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgeworCQkJCQlyID0gZGlza19ybWRpcihhLT5uYW1lKTsKKwkJCQl9IGVsc2UgeworCQkJCQlyID0gZGlza191bmxpbmsoYS0+bmFtZSk7CisJCQkJfQorCQkJCWlmIChyKSB7CiAJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKIAkJCQkJICAgICJDb3VsZCBub3QgcmVtb3ZlIHN5bWxpbmsgJWxzIiwKIAkJCQkJICAgIGEtPm5hbWUpOwpAQCAtMTg3Miw3ICsyMTE3LDE3IEBACiAJCQkJcmV0dXJuICgwKTsKIAkJCX0gZWxzZSBpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfVU5MSU5LKSB7CiAJCQkJLyogVXNlciBhc2tlZCB1cyB0byByZW1vdmUgcHJvYmxlbXMuICovCi0JCQkJaWYgKGRpc2tfdW5saW5rKGEtPm5hbWUpICE9IDApIHsKKwkJCQlpZiAoYS0+ZmxhZ3MgJgorCQkJCSAgICBBUkNISVZFX0VYVFJBQ1RfQ0xFQVJfTk9DSEFOR0VfRkZMQUdTKSB7CisJCQkJCSh2b2lkKWNsZWFyX25vY2hhbmdlX2ZmbGFncyhhKTsKKwkJCQl9CisJCQkJaWYgKHN0LmR3RmlsZUF0dHJpYnV0ZXMgJgorCQkJCSAgICBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpIHsKKwkJCQkJciA9IGRpc2tfcm1kaXIoYS0+bmFtZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJciA9IGRpc2tfdW5saW5rKGEtPm5hbWUpOworCQkJCX0KKwkJCQlpZiAociAhPSAwKSB7CiAJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCAwLAogCQkJCQkgICAgIkNhbm5vdCByZW1vdmUgaW50ZXJ2ZW5pbmcgIgogCQkJCQkgICAgInN5bWxpbmsgJWxzIiwgYS0+bmFtZSk7CkBAIC0xODg4LDYgKzIxNDMsOCBAQAogCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwogCQkJfQogCQl9CisJCXBuWzBdID0gYzsKKwkJcG4rKzsKIAl9CiAJcG5bMF0gPSBjOwogCS8qIFdlJ3ZlIGNoZWNrZWQgYW5kL29yIGNsZWFuZWQgdGhlIHdob2xlIHBhdGgsIHNvIHJlbWVtYmVyIGl0LiAqLwpAQCAtMjQzOCwxMCArMjY5NSw1NiBAQAogCXJldHVybiAocik7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X2ZmbGFnc19wbGF0Zm9ybShjb25zdCB3Y2hhcl90ICpuYW1lLCB1bnNpZ25lZCBsb25nIGZmbGFnc19zZXQsCisgICAgdW5zaWduZWQgbG9uZyBmZmxhZ3NfY2xlYXIpCit7CisJRFdPUkQgb2xkZmxhZ3MsIG5ld2ZsYWdzOworCXdjaGFyX3QgKmZ1bGxuYW1lOworCisJY29uc3QgRFdPUkQgc2V0dGFibGVfZmxhZ3MgPQorCSAgICBGSUxFX0FUVFJJQlVURV9BUkNISVZFIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfSElEREVOIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfTk9UX0NPTlRFTlRfSU5ERVhFRCB8CisJICAgIEZJTEVfQVRUUklCVVRFX09GRkxJTkUgfAorCSAgICBGSUxFX0FUVFJJQlVURV9SRUFET05MWSB8CisJICAgIEZJTEVfQVRUUklCVVRFX1NZU1RFTSB8CisJICAgIEZJTEVfQVRUUklCVVRFX1RFTVBPUkFSWTsKKworCW9sZGZsYWdzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKG5hbWUpOworCWlmIChvbGRmbGFncyA9PSAoRFdPUkQpLTEgJiYKKwkgICAgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfSU5WQUxJRF9OQU1FKSB7CisJCWZ1bGxuYW1lID0gX19sYV93aW5fcGVybWlzc2l2ZV9uYW1lX3cobmFtZSk7CisJCW9sZGZsYWdzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKGZ1bGxuYW1lKTsKKwl9CisJaWYgKG9sZGZsYWdzID09IChEV09SRCktMSkgeworCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworCQlyZXR1cm4gKEFSQ0hJVkVfV0FSTik7CisJfQorCW5ld2ZsYWdzID0gKChvbGRmbGFncyAmIH5mZmxhZ3NfY2xlYXIpIHwgZmZsYWdzX3NldCkgJiBzZXR0YWJsZV9mbGFnczsKKwlpZihTZXRGaWxlQXR0cmlidXRlc1cobmFtZSwgbmV3ZmxhZ3MpID09IDApCisJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKKwlyZXR1cm4gKEFSQ0hJVkVfT0spOworfQorCitzdGF0aWMgaW50CitjbGVhcl9ub2NoYW5nZV9mZmxhZ3Moc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKK3sKKwlyZXR1cm4gKHNldF9mZmxhZ3NfcGxhdGZvcm0oYS0+bmFtZSwgMCwgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKTsKK30KKwogc3RhdGljIGludAogc2V0X2ZmbGFncyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQogewotCSh2b2lkKWE7IC8qIFVOVVNFRCAqLworCXVuc2lnbmVkIGxvbmcJc2V0LCBjbGVhcjsKKworCWlmIChhLT50b2RvICYgVE9ET19GRkxBR1MpIHsKKwkJYXJjaGl2ZV9lbnRyeV9mZmxhZ3MoYS0+ZW50cnksICZzZXQsICZjbGVhcik7CisJCWlmIChzZXQgPT0gMCAgJiYgY2xlYXIgPT0gMCkKKwkJCXJldHVybiAoQVJDSElWRV9PSyk7CisJCXJldHVybiAoc2V0X2ZmbGFnc19wbGF0Zm9ybShhLT5uYW1lLCBzZXQsIGNsZWFyKSk7CisKKyAgICAgICAgfQogCXJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2ZpbHRlci4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmlsdGVyLjMKaW5kZXggZDZmYTA3MS4uYzgzZWI3NyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmlsdGVyLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmlsdGVyLjMKQEAgLTQzLDcgKzQzLDcgQEAKIC5ObSBhcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfcHJvZ3JhbSAsCiAuTm0gYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3V1ZW5jb2RlICwKIC5ObSBhcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfeHogLAotLk5tIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl96c3RkICwKKy5ObSBhcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfenN0ZAogLk5kIGZ1bmN0aW9ucyBlbmFibGluZyBvdXRwdXQgZmlsdGVycwogLlNoIExJQlJBUlkKIFN0cmVhbWluZyBBcmNoaXZlIExpYnJhcnkgKGxpYmFyY2hpdmUsIC1sYXJjaGl2ZSkKQEAgLTEyNSwxMCArMTI1LDEwIEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9mb3JtYXQgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGNwaW8gNSAsCiAuWHIgbXRyZWUgNSAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2ZpbmlzaF9lbnRyeS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5LjMKaW5kZXggZGMxYjk0Yi4uNTc5N2UxNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5LjMKQEAgLTcxLDkgKzcxLDkgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9kYXRhIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9mb3JtYXQuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Zvcm1hdC4zCmluZGV4IGFhYWZiMGEuLjQ3YTc0MDMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Zvcm1hdC4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Zvcm1hdC4zCkBAIC01Miw3ICs1Miw3IEBACiAuTm0gYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3Y3dGFyICwKIC5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfd2FyYyAsCiAuTm0gYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3hhciAsCi0uTm0gYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ppcCAsCisuTm0gYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ppcAogLk5kIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYXJjaGl2ZXMKIC5TaCBMSUJSQVJZCiBTdHJlYW1pbmcgQXJjaGl2ZSBMaWJyYXJ5IChsaWJhcmNoaXZlLCAtbGFyY2hpdmUpCkBAIC0xNjYsOSArMTY2LDkgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBsaWJhcmNoaXZlLWZvcm1hdHMgNSAsCiAuWHIgbXRyZWUgNSAsCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9mcmVlLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9mcmVlLjMKaW5kZXggMWIyZDA3MS4uNTIxMGUyYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZnJlZS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2ZyZWUuMwpAQCAtNTYsNyArNTYsNyBAQAogdG8gcmVsZWFzZSB0aGUgcmVzb3VyY2VzLgogVGhpcyBjYW4gYmUgdXNlZCB0byBzcGVlZCByZWNvdmVyeSB3aGVuIHRoZSBhcmNoaXZlIGNyZWF0aW9uCiBtdXN0IGJlIGFib3J0ZWQuCi1Ob3RlIHRoYXQgdGhlIGNyZWF0ZWQgYXJjaGl2ZSBpcyBsaWtlbHkgdG8gYmUgbWFsZm9ybWVkIGluIHRoaXMgY2FzZTsgCitOb3RlIHRoYXQgdGhlIGNyZWF0ZWQgYXJjaGl2ZSBpcyBsaWtlbHkgdG8gYmUgbWFsZm9ybWVkIGluIHRoaXMgY2FzZTsKIC5JdCBGbiBhcmNoaXZlX3dyaXRlX2Nsb3NlCiBDb21wbGV0ZSB0aGUgYXJjaGl2ZSBhbmQgaW52b2tlIHRoZSBjbG9zZSBjYWxsYmFjay4KIC5JdCBGbiBhcmNoaXZlX3dyaXRlX2ZpbmlzaApAQCAtODksOCArODksOCBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfaGVhZGVyLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9oZWFkZXIuMwppbmRleCA0ZGU1OGYzLi4yMjE3YjE4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9oZWFkZXIuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9oZWFkZXIuMwpAQCAtNjYsOCArNjYsOCBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfbmV3LjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9uZXcuMwppbmRleCBmMDVkMjY5Li43ODhjYmI4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9uZXcuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9uZXcuMwpAQCAtNTAsOSArNTAsOSBAQAogLlwiIC5TaCBFUlJPUlMKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGNwaW8gNSAsCiAuWHIgbXRyZWUgNSAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX29wZW4uMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX29wZW4uMwppbmRleCA0NTc4NzNlLi4wMTI5ZDEwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9vcGVuLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfb3Blbi4zCkBAIC0yMDAsNyArMjAwLDcgQEAKIC5GbiBhcmNoaXZlX3NldF9lcnJvcgogdG8gcmVnaXN0ZXIgYW4gZXJyb3IgY29kZSBhbmQgbWVzc2FnZSBhbmQKIHJldHVybgotLkNtIEFSQ0hJVkVfRkFUQUwuCisuQ20gQVJDSElWRV9GQVRBTCAuCiAuUHAKIE5vdGUgdGhhdCBpZiB0aGUgY2xpZW50LXByb3ZpZGVkIHdyaXRlIGNhbGxiYWNrIGZ1bmN0aW9uCiByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIHRoYXQgZXJyb3Igd2lsbCBiZSBwcm9wYWdhdGVkIGJhY2sgdG8gdGhlIGNhbGxlcgpAQCAtMjM0LDEzICsyMzQsMTMgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2Jsb2Nrc2l6ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3dyaXRlX25ldyAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oCmluZGV4IDBkZmQxYjEuLjI3Y2JhMDMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgKQEAgLTI1LDE5ICsyNSwyNCBAQAogICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9wcml2YXRlLmggMjAxMTU1IDIwMDktMTItMjkgMDU6MjA6MTJaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfV1JJVEVfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfV1JJVEVfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUCiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9XUklURV9QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUJQVJDSElWRV9XUklURV9QUklWQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgImFyY2hpdmUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3N0cmluZy5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogCisjZGVmaW5lCUFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX05FVwkJMVUKKyNkZWZpbmUJQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfT1BFTgkJMlUKKyNkZWZpbmUJQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfQ0xPU0VECTRVCisjZGVmaW5lCUFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX0ZBVEFMCTB4ODAwMFUKKwogc3RydWN0IGFyY2hpdmVfd3JpdGU7CiAKIHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciB7CkBAIC01NSw2ICs2MCw3IEBACiAJaW50CSAgY29kZTsKIAlpbnQJICBieXRlc19wZXJfYmxvY2s7CiAJaW50CSAgYnl0ZXNfaW5fbGFzdF9ibG9jazsKKwlpbnQJICBzdGF0ZTsKIH07CiAKICNpZiBBUkNISVZFX1ZFUlNJT04gPCA0MDAwMDAwCkBAIC02Niw4ICs3Miw2IEBACiBpbnQgX19hcmNoaXZlX3dyaXRlX291dHB1dChzdHJ1Y3QgYXJjaGl2ZV93cml0ZSAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CiBpbnQgX19hcmNoaXZlX3dyaXRlX251bGxzKHN0cnVjdCBhcmNoaXZlX3dyaXRlICosIHNpemVfdCk7CiBpbnQgX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwotaW50IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKik7Ci1pbnQgX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKik7CiAKIHN0cnVjdCBhcmNoaXZlX3dyaXRlIHsKIAlzdHJ1Y3QgYXJjaGl2ZQlhcmNoaXZlOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdC5jCmluZGV4IDBmNzA2MjMuLjEyZGUwODAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXQuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0LmMKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiAvKiBBIHRhYmxlIHRoYXQgbWFwcyBmb3JtYXQgY29kZXMgdG8gZnVuY3Rpb25zLiAqLwogc3RhdGljIGNvbnN0CkBAIC03NiwzICs3Nyw0NyBAQAogCWFyY2hpdmVfc2V0X2Vycm9yKGEsIEVJTlZBTCwgIk5vIHN1Y2ggZm9ybWF0Iik7CiAJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIH0KKwordm9pZAorX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKHN0cnVjdCBhcmNoaXZlICphLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgY29uc3QgY2hhciAqZm9ybWF0KQoreworCWNoYXIgKm5hbWUgPSBOVUxMOworCisJc3dpdGNoIChhcmNoaXZlX2VudHJ5X2ZpbGV0eXBlKGVudHJ5KSkgeworCS8qCisJICogQWxsIGZvcm1hdHMgc2hvdWxkIGJlIGFibGUgdG8gYXJjaGl2ZSByZWd1bGFyIGZpbGVzIChBRV9JRlJFRykKKwkgKi8KKwljYXNlIEFFX0lGRElSOgorCQluYW1lID0gImRpcmVjdG9yaWVzIjsKKwkJYnJlYWs7CisJY2FzZSBBRV9JRkxOSzoKKwkJbmFtZSA9ICJzeW1ib2xpYyBsaW5rcyI7CisJCWJyZWFrOworCWNhc2UgQUVfSUZDSFI6CisJCW5hbWUgPSAiY2hhcmFjdGVyIGRldmljZXMiOworCQlicmVhazsKKwljYXNlIEFFX0lGQkxLOgorCQluYW1lID0gImJsb2NrIGRldmljZXMiOworCQlicmVhazsKKwljYXNlIEFFX0lGSUZPOgorCQluYW1lID0gIm5hbWVkIHBpcGVzIjsKKwkJYnJlYWs7CisJY2FzZSBBRV9JRlNPQ0s6CisJCW5hbWUgPSAic29ja2V0cyI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChuYW1lICE9IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoYSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICIlczogJXMgZm9ybWF0IGNhbm5vdCBhcmNoaXZlICVzIiwKKwkJICAgIGFyY2hpdmVfZW50cnlfcGF0aG5hbWUoZW50cnkpLCBmb3JtYXQsIG5hbWUpOworCX0gZWxzZSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKGEsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiJXM6ICVzIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBmaWxlcyB3aXRoIG1vZGUgMCVsbyIsCisJCSAgICBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lKGVudHJ5KSwgZm9ybWF0LAorCQkgICAgKHVuc2lnbmVkIGxvbmcpYXJjaGl2ZV9lbnRyeV9tb2RlKGVudHJ5KSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF83emlwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0Xzd6aXAuYwppbmRleCAyYmQ0ZWM0Li42OWFmODE0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0Xzd6aXAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0Xzd6aXAuYwpAQCAtMzEsMTMgKzMxLDEzIEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpZmRlZiBIQVZFX0JaTElCX0gKLSNpbmNsdWRlIDxjbV9iemxpYi5oPgorI2luY2x1ZGUgPGNtM3AvYnpsaWIuaD4KICNlbmRpZgogI2lmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX3JiLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9zdHJpbmcuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiAvKgogICogQ29kZWMgSUQKQEAgLTE2NCw3ICsxNjUsNyBAQAogCW1vZGVfdAkJCSBtb2RlOwogCXVpbnQzMl90CQkgY3JjMzI7CiAKLQlpbnQJCQkgZGlyOjE7CisJc2lnbmVkIGludAkJIGRpcjoxOwogfTsKIAogc3RydWN0IF83emlwIHsKQEAgLTQzOSw3ICs0NDAsOCBAQAogCiAJciA9IGZpbGVfbmV3KGEsIGVudHJ5LCAmZmlsZSk7CiAJaWYgKHIgPCBBUkNISVZFX1dBUk4pIHsKLQkJZmlsZV9mcmVlKGZpbGUpOworCQlpZiAoZmlsZSAhPSBOVUxMKQorCQkJZmlsZV9mcmVlKGZpbGUpOwogCQlyZXR1cm4gKHIpOwogCX0KIAlpZiAoZmlsZS0+c2l6ZSA9PSAwICYmIGZpbGUtPmRpcikgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9hci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9hci5jCmluZGV4IDUwMzA1Y2MuLmZjMGRlMWUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfYXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2FyLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RydWN0IGFyX3cgewogCXVpbnQ2NF90CSBlbnRyeV9ieXRlc19yZW1haW5pbmc7CkBAIC0xODcsNiArMTg4LDExIEBACiAJCWJ1ZmZbQVJfbmFtZV9vZmZzZXRdID0gJy8nOwogCQlnb3RvIHN0YXQ7CiAJfQorCWlmIChzdHJjbXAocGF0aG5hbWUsICIvU1lNNjQvIikgPT0gMCkgeworCQkvKiBFbnRyeSBpcyBhcmNoaXZlIHN5bWJvbCB0YWJsZSBpbiBHTlUgNjQtYml0IGZvcm1hdCAqLworCQltZW1jcHkoYnVmZiArIEFSX25hbWVfb2Zmc2V0LCAiL1NZTTY0LyIsIDcpOworCQlnb3RvIHN0YXQ7CisJfQogCWlmIChzdHJjbXAocGF0aG5hbWUsICJfXy5TWU1ERUYiKSA9PSAwKSB7CiAJCS8qIEVudHJ5IGlzIGFyY2hpdmUgc3ltYm9sIHRhYmxlIGluIEJTRCBmb3JtYXQgKi8KIAkJbWVtY3B5KGJ1ZmYgKyBBUl9uYW1lX29mZnNldCwgIl9fLlNZTURFRiIsIDkpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW8uYwppbmRleCBhNGM5ZDFlLi43MjlmOWM3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW8uYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW8uYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnlfbG9jYWxlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RhdGljIHNzaXplX3QJYXJjaGl2ZV93cml0ZV9jcGlvX2RhdGEoc3RydWN0IGFyY2hpdmVfd3JpdGUgKiwKIAkJICAgIGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBzKTsKQEAgLTQwOCw4ICs0MDksNyBAQAogCQl9CiAJfQogZXhpdF93cml0ZV9oZWFkZXI6Ci0JaWYgKGVudHJ5X21haW4pCi0JCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJcmV0dXJuIChyZXRfZmluYWwpOwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW9fbmV3Yy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvX25ld2MuYwppbmRleCA5NTdmMWEzLi4xNzJmZGE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW9fbmV3Yy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpb19uZXdjLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X2xvY2FsZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0YXRpYyBzc2l6ZV90CWFyY2hpdmVfd3JpdGVfbmV3Y19kYXRhKHN0cnVjdCBhcmNoaXZlX3dyaXRlICosCiAJCSAgICBjb25zdCB2b2lkICpidWZmLCBzaXplX3Qgcyk7CkBAIC0zNjYsOCArMzY3LDcgQEAKIAkJfQogCX0KIGV4aXRfd3JpdGVfaGVhZGVyOgotCWlmIChlbnRyeV9tYWluKQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCXJldHVybiAocmV0X2ZpbmFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9nbnV0YXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfZ251dGFyLmMKaW5kZXggMmQ4NThjOS4uZWMyOWM1YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9nbnV0YXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2dudXRhci5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3QgZ251dGFyIHsKIAl1aW50NjRfdAllbnRyeV9ieXRlc19yZW1haW5pbmc7CkBAIC0zMzksNyArMzQwLDcgQEAKIAkJICogY2FzZSBnZXR0aW5nIFdDUyBmYWlsZWQuIE9uIFBPU0lYLCB0aGlzIGlzIGEKIAkJICogbm9ybWFsIG9wZXJhdGlvbi4KIAkJICovCi0JCWlmIChwICE9IE5VTEwgJiYgcFtzdHJsZW4ocCkgLSAxXSAhPSAnLycpIHsKKwkJaWYgKHAgIT0gTlVMTCAmJiBwWzBdICE9ICdcMCcgJiYgcFtzdHJsZW4ocCkgLSAxXSAhPSAnLycpIHsKIAkJCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBhczsKIAogCQkJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmYXMpOwpAQCAtNTM0LDE3ICs1MzUsOSBAQAogCQljYXNlIEFFX0lGQkxLOiB0YXJ0eXBlID0gJzQnIDsgYnJlYWs7CiAJCWNhc2UgQUVfSUZESVI6IHRhcnR5cGUgPSAnNScgOyBicmVhazsKIAkJY2FzZSBBRV9JRklGTzogdGFydHlwZSA9ICc2JyA7IGJyZWFrOwotCQljYXNlIEFFX0lGU09DSzoKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgInRhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgc29ja2V0Iik7Ci0JCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKLQkJCWdvdG8gZXhpdF93cml0ZV9oZWFkZXI7Ci0JCWRlZmF1bHQ6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHRoaXMgKG1vZGU9MCVsbykiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWFyY2hpdmVfZW50cnlfbW9kZShlbnRyeSkpOworCQlkZWZhdWx0OiAvKiBBRV9JRlNPQ0sgYW5kIHVua25vd24gKi8KKwkJCV9fYXJjaGl2ZV93cml0ZV9lbnRyeV9maWxldHlwZV91bnN1cHBvcnRlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYS0+YXJjaGl2ZSwgZW50cnksICJnbnV0YXIiKTsKIAkJCXJldCA9IEFSQ0hJVkVfRkFJTEVEOwogCQkJZ290byBleGl0X3dyaXRlX2hlYWRlcjsKIAkJfQpAQCAtNTY1LDggKzU1OCw3IEBACiAJZ251dGFyLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgPSBhcmNoaXZlX2VudHJ5X3NpemUoZW50cnkpOwogCWdudXRhci0+ZW50cnlfcGFkZGluZyA9IDB4MWZmICYgKC0oaW50NjRfdClnbnV0YXItPmVudHJ5X2J5dGVzX3JlbWFpbmluZyk7CiBleGl0X3dyaXRlX2hlYWRlcjoKLQlpZiAoZW50cnlfbWFpbikKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfaXNvOTY2MC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9pc285NjYwLmMKaW5kZXggNGFkZjY4ZS4uNWRiNDE0ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9pc285NjYwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9pc285NjYwLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPgorI2luY2x1ZGUgPGNtM3AvemxpYi5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCkBAIC0yODksMTIgKzI4OSwxMiBAQAogCQlzdHJ1Y3QgZXh0cl9yZWMJKmN1cnJlbnQ7CiAJfQkJCSBleHRyX3JlY19saXN0OwogCi0JaW50CQkJIHZpcnR1YWw6MTsKKwlzaWduZWQgaW50CQkgdmlydHVhbDoxOwogCS8qIElmIHNldCB0byBvbmUsIHRoaXMgZmlsZSB0eXBlIGlzIGEgZGlyZWN0b3J5LgogCSAqIEEgY29udmVuaWVuY2UgZmxhZyB0byBiZSB1c2VkIGFzCiAJICogImFyY2hpdmVfZW50cnlfZmlsZXR5cGUoaXNvZW50LT5maWxlLT5lbnRyeSkgPT0gQUVfSUZESVIiLgogCSAqLwotCWludAkJCSBkaXI6MTsKKwlzaWduZWQgaW50CQkgZGlyOjE7CiB9OwogCiBzdHJ1Y3QgaGFyZGxpbmsgewpAQCAtNzU1LDkgKzc1NSw5IEBACiAKIAkvKiBVc2VkIGZvciBtYWtpbmcgemlzb2ZzLiAqLwogCXN0cnVjdCB7Ci0JCWludAkJIGRldGVjdF9tYWdpYzoxOwotCQlpbnQJCSBtYWtpbmc6MTsKLQkJaW50CQkgYWxsemVybzoxOworCQlzaWduZWQgaW50CSBkZXRlY3RfbWFnaWM6MTsKKwkJc2lnbmVkIGludAkgbWFraW5nOjE7CisJCXNpZ25lZCBpbnQJIGFsbHplcm86MTsKIAkJdW5zaWduZWQgY2hhcgkgbWFnaWNfYnVmZmVyWzY0XTsKIAkJaW50CQkgbWFnaWNfY250OwogCkBAIC0zNjUwLDcgKzM2NTAsNyBAQAogCWlmIChzaXplID4gaXNvOTY2MC0+d2J1ZmZfcmVtYWluaW5nIHx8CiAJICAgIGlzbzk2NjAtPndidWZmX3JlbWFpbmluZyA9PSAwKSB7CiAJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0JCSAgICAiSW50ZXJuYWwgUHJvZ3JhbWluZyBlcnJvcjogaXNvOTY2MDp3Yl9jb25zdW1lKCkiCisJCSAgICAiSW50ZXJuYWwgUHJvZ3JhbW1pbmcgZXJyb3I6IGlzbzk2NjA6d2JfY29uc3VtZSgpIgogCQkgICAgIiBzaXplPSVqZCwgd2J1ZmZfcmVtYWluaW5nPSVqZCIsCiAJCSAgICAoaW50bWF4X3Qpc2l6ZSwgKGludG1heF90KWlzbzk2NjAtPndidWZmX3JlbWFpbmluZyk7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CkBAIC0zNjcxLDcgKzM2NzEsNyBAQAogCiAJaWYgKGlzbzk2NjAtPndidWZmX3R5cGUgIT0gV0JfVE9fVEVNUCkgewogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkgICAgIkludGVybmFsIFByb2dyYW1pbmcgZXJyb3I6IGlzbzk2NjA6d2Jfc2V0X29mZnNldCgpIik7CisJCSAgICAiSW50ZXJuYWwgUHJvZ3JhbW1pbmcgZXJyb3I6IGlzbzk2NjA6d2Jfc2V0X29mZnNldCgpIik7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJfQogCkBAIC00ODk5LDEwICs0ODk5LDEwIEBACiAJCWlmIChwWzBdID09ICcvJykgewogCQkJaWYgKHBbMV0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8vJyAtLT4gJy8nICovCi0JCQkJc3RyY3B5KHAsIHArMSk7CisJCQkJbWVtbW92ZShwLCBwKzEsIHN0cmxlbihwKzEpICsgMSk7CiAJCQllbHNlIGlmIChwWzFdID09ICcuJyAmJiBwWzJdID09ICcvJykKIAkJCQkvKiBDb252ZXJ0ICcvLi8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsyKTsKKwkJCQltZW1tb3ZlKHAsIHArMiwgc3RybGVuKHArMikgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy4nICYmIHBbM10gPT0gJy8nKSB7CiAJCQkJLyogQ29udmVydCAnZGlyL2RpcjEvLi4vZGlyMi8nCiAJCQkJICogICAgIC0tPiAnZGlyL2RpcjIvJwpAQCAtNTA5NCwxMyArNTA5NCwxMSBAQAogc3RhdGljIHZvaWQKIGlzb2ZpbGVfZnJlZV9oYXJkbGlua3Moc3RydWN0IGlzbzk2NjAgKmlzbzk2NjApCiB7Ci0Jc3RydWN0IGFyY2hpdmVfcmJfbm9kZSAqbiwgKm5leHQ7CisJc3RydWN0IGFyY2hpdmVfcmJfbm9kZSAqbiwgKnRtcDsKIAotCWZvciAobiA9IEFSQ0hJVkVfUkJfVFJFRV9NSU4oJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpKTsgbjspIHsKLQkJbmV4dCA9IF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpLAotCQkgICAgbiwgQVJDSElWRV9SQl9ESVJfUklHSFQpOworCUFSQ0hJVkVfUkJfVFJFRV9GT1JFQUNIX1NBRkUobiwgJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpLCB0bXApIHsKKwkJX19hcmNoaXZlX3JiX3RyZWVfcmVtb3ZlX25vZGUoJihpc285NjYwLT5oYXJkbGlua19yYnRyZWUpLCBuKTsKIAkJZnJlZShuKTsKLQkJbiA9IG5leHQ7CiAJfQogfQogCkBAIC03ODAxLDggKzc3OTksOCBAQAogCXVpbnQ2NF90CSBwel91bmNvbXByZXNzZWRfc2l6ZTsKIAlzaXplX3QJCSB1bmNvbXByZXNzZWRfYnVmZmVyX3NpemU7CiAKLQlpbnQJCSBpbml0aWFsaXplZDoxOwotCWludAkJIGhlYWRlcl9wYXNzZWQ6MTsKKwlzaWduZWQgaW50CSBpbml0aWFsaXplZDoxOworCXNpZ25lZCBpbnQJIGhlYWRlcl9wYXNzZWQ6MTsKIAogCXVpbnQzMl90CSBwel9vZmZzZXQ7CiAJdW5zaWduZWQgY2hhcgkqYmxvY2tfcG9pbnRlcnM7CkBAIC04MTI4LDcgKzgxMjYsNyBAQAogewogCSh2b2lkKWJ1ZmY7IC8qIFVOVVNFRCAqLwogCSh2b2lkKXM7IC8qIFVOVVNFRCAqLwotCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsICJQcm9ncmFtaW5nIGVycm9yIik7CisJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywgIlByb2dyYW1taW5nIGVycm9yIik7CiAJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9tdHJlZS5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9tdHJlZS5jCmluZGV4IDQ5M2Q0NzMuLmFhNDFlOWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfbXRyZWUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X210cmVlLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogI2VuZGlmCiAJLyogS2V5d29yZCBvcHRpb25zICovCiAJaW50IGtleXM7Ci0jZGVmaW5lCUZfQ0tTVU0JCTB4MDAwMDAwMDEJCS8qIGNoZWNrIHN1bSAqLworI2RlZmluZQlGX0NLU1VNCQkweDAwMDAwMDAxCQkvKiBjaGVja3N1bSAqLwogI2RlZmluZQlGX0RFVgkJMHgwMDAwMDAwMgkJLyogZGV2aWNlIHR5cGUgKi8KICNkZWZpbmUJRl9ET05FCQkweDAwMDAwMDA0CQkvKiBkaXJlY3RvcnkgZG9uZSAqLwogI2RlZmluZQlGX0ZMQUdTCQkweDAwMDAwMDA4CQkvKiBmaWxlIGZsYWdzICovCkBAIC0zNzEsNyArMzcxLDcgQEAKIH0KIAogLyoKLSAqIEluZGVudCBhIGxpbmUgYXMgbXRyZWUgdXRpbGl0eSB0byBiZSByZWFkYWJsZSBmb3IgcGVvcGxlLgorICogSW5kZW50IGEgbGluZSBhcyB0aGUgbXRyZWUgdXRpbGl0eSBkb2VzIHNvIGl0IGlzIHJlYWRhYmxlIGZvciBwZW9wbGUuCiAgKi8KIHN0YXRpYyB2b2lkCiBtdHJlZV9pbmRlbnQoc3RydWN0IG10cmVlX3dyaXRlciAqbXRyZWUpCkBAIC00NDYsOCArNDQ2LDggQEAKIAogLyoKICAqIFdyaXRlIC9zZXQga2V5d29yZC4KLSAqIFNldCBtb3N0IHVzZWQgdmFsdWUgb2YgdWlkLGdpZCxtb2RlIGFuZCBmZmxhZ3MsIHdoaWNoIGFyZQotICogY29sbGVjdGVkIGJ5IGF0dHJfY291bnRlcl9zZXRfY29sbGVjdCgpIGZ1bmN0aW9uLgorICogU2V0IHRoZSBtb3N0IHVzZWQgdmFsdWUgb2YgdWlkLCBnaWQsIG1vZGUgYW5kIGZmbGFncywgd2hpY2ggYXJlCisgKiBjb2xsZWN0ZWQgYnkgdGhlIGF0dHJfY291bnRlcl9zZXRfY29sbGVjdCgpIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgdm9pZAogd3JpdGVfZ2xvYmFsKHN0cnVjdCBtdHJlZV93cml0ZXIgKm10cmVlKQpAQCAtNjQ5LDcgKzY0OSw3IEBACiB9CiAKIC8qCi0gKiBUYWJ1bGF0ZSB1aWQsZ2lkLG1vZGUgYW5kIGZmbGFncyBvZiBhIGVudHJ5IGluIG9yZGVyIHRvIGJlIHVzZWQgZm9yIC9zZXQuCisgKiBUYWJ1bGF0ZSB1aWQsIGdpZCwgbW9kZSBhbmQgZmZsYWdzIG9mIGEgZW50cnkgaW4gb3JkZXIgdG8gYmUgdXNlZCBmb3IgL3NldC4KICAqLwogc3RhdGljIGludAogYXR0cl9jb3VudGVyX3NldF9jb2xsZWN0KHN0cnVjdCBtdHJlZV93cml0ZXIgKm10cmVlLCBzdHJ1Y3QgbXRyZWVfZW50cnkgKm1lKQpAQCAtOTEyLDcgKzkxMiw3IEBACiAKIAkvKiBJZiB0aGUgY3VycmVudCBmaWxlIGlzIGEgcmVndWxhciBmaWxlLCB3ZSBoYXZlIHRvCiAJICogY29tcHV0ZSB0aGUgc3VtIG9mIGl0cyBjb250ZW50LgotCSAqIEluaXRpYWxpemUgYSBidW5jaCBvZiBzdW0gY2hlY2sgY29udGV4dC4gKi8KKwkgKiBJbml0aWFsaXplIGEgYnVuY2ggb2YgY2hlY2tzdW0gY29udGV4dC4gKi8KIAlpZiAobXRyZWVfZW50cnktPnJlZ19pbmZvKQogCQlzdW1faW5pdChtdHJlZSk7CiAKQEAgLTEyNjUsNyArMTI2NSw3IEBACiAJaWYgKG10cmVlID09IE5VTEwpCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAKLQkvKiBNYWtlIHN1cmUgd2UgZG90IG5vdCBsZWF2ZSBhbnkgZW50cmllcy4gKi8KKwkvKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYXZlIGFueSBlbnRyaWVzLiAqLwogCW10cmVlX2VudHJ5X3JlZ2lzdGVyX2ZyZWUobXRyZWUpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJm10cmVlLT5jdXJfZGlyc3RyKTsKIAlhcmNoaXZlX3N0cmluZ19mcmVlKCZtdHJlZS0+ZWJ1Zik7CkBAIC0xODEwLDEwICsxODEwLDEwIEBACiAJCWlmIChwWzBdID09ICcvJykgewogCQkJaWYgKHBbMV0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8vJyAtLT4gJy8nICovCi0JCQkJc3RyY3B5KHAsIHArMSk7CisJCQkJbWVtbW92ZShwLCBwKzEsIHN0cmxlbihwKzEpICsgMSk7CiAJCQllbHNlIGlmIChwWzFdID09ICcuJyAmJiBwWzJdID09ICcvJykKIAkJCQkvKiBDb252ZXJ0ICcvLi8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsyKTsKKwkJCQltZW1tb3ZlKHAsIHArMiwgc3RybGVuKHArMikgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy4nICYmIHBbM10gPT0gJy8nKSB7CiAJCQkJLyogQ29udmVydCAnZGlyL2RpcjEvLi4vZGlyMi8nCiAJCQkJICogICAgIC0tPiAnZGlyL2RpcjIvJwpAQCAtMjAyNCw3ICsyMDI0LDcgQEAKIAogCWlmIChmaWxlLT5wYXJlbnRkaXIubGVuZ3RoID09IDApIHsKIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKLQkJICAgICJJbnRlcm5hbCBwcm9ncmFtaW5nIGVycm9yICIKKwkJICAgICJJbnRlcm5hbCBwcm9ncmFtbWluZyBlcnJvciAiCiAJCSAgICAiaW4gZ2VuZXJhdGluZyBjYW5vbmljYWwgbmFtZSBmb3IgJXMiLAogCQkgICAgZmlsZS0+cGF0aG5hbWUucyk7CiAJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wYXguYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcGF4LmMKaW5kZXggM2NlYmVhZS4uYTJiMjcxMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wYXguYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3BheC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3Qgc3BhcnNlX2Jsb2NrIHsKIAlzdHJ1Y3Qgc3BhcnNlX2Jsb2NrCSpuZXh0OwpAQCAtMTk5LDYgKzIwMCwyOCBAQAogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKIAkJCSAgICAicGF4OiBpbnZhbGlkIGNoYXJzZXQgbmFtZSIpOwogCQlyZXR1cm4gKHJldCk7CisJfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAieGF0dHJoZWFkZXIiKSA9PSAwKSB7CisJCWlmICh2YWwgPT0gTlVMTCB8fCB2YWxbMF0gPT0gMCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAicGF4OiB4YXR0cmhlYWRlciByZXF1aXJlcyBhIHZhbHVlIik7CisJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgIkFMTCIpID09IDAgfHwKKwkJICAgIHN0cmNtcCh2YWwsICJhbGwiKSA9PSAwKSB7CisJCQlwYXgtPmZsYWdzIHw9IFdSSVRFX0xJQkFSQ0hJVkVfWEFUVFIgfCBXUklURV9TQ0hJTFlfWEFUVFI7CisJCQlyZXQgPSBBUkNISVZFX09LOworCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICJTQ0hJTFkiKSA9PSAwIHx8CisJCSAgICBzdHJjbXAodmFsLCAic2NoaWx5IikgPT0gMCkgeworCQkJcGF4LT5mbGFncyB8PSBXUklURV9TQ0hJTFlfWEFUVFI7CisJCQlwYXgtPmZsYWdzICY9IH5XUklURV9MSUJBUkNISVZFX1hBVFRSOworCQkJcmV0ID0gQVJDSElWRV9PSzsKKwkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAiTElCQVJDSElWRSIpID09IDAgfHwKKwkJICAgIHN0cmNtcCh2YWwsICJsaWJhcmNoaXZlIikgPT0gMCkgeworCQkJcGF4LT5mbGFncyB8PSBXUklURV9MSUJBUkNISVZFX1hBVFRSOworCQkJcGF4LT5mbGFncyAmPSB+V1JJVEVfU0NISUxZX1hBVFRSOworCQkJcmV0ID0gQVJDSElWRV9PSzsKKwkJfSBlbHNlCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJICAgICJwYXg6IGludmFsaWQgeGF0dHIgaGVhZGVyIG5hbWUiKTsKKwkJcmV0dXJuIChyZXQpOwogCX0KIAogCS8qIE5vdGU6IFRoZSAid2FybiIgcmV0dXJuIGlzIGp1c3QgdG8gaW5mb3JtIHRoZSBvcHRpb25zCkBAIC01MjIsMTEgKzU0NSwxMyBAQAogCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwgIiVzICVzICVzIiwKIAkJICAgICJDYW4ndCB0cmFuc2xhdGUgIiwgYXR0ciwgIiB0byBVVEYtOCIpOwogCQlyZXR1cm4oQVJDSElWRV9XQVJOKTsKLQl9IGVsc2UgaWYgKCpwICE9ICdcMCcpIHsKKwl9CisKKwlpZiAoKnAgIT0gJ1wwJykgewogCQlhZGRfcGF4X2F0dHIoJihwYXgtPnBheF9oZWFkZXIpLAogCQkgICAgYXR0ciwgcCk7Ci0JCWZyZWUocCk7CiAJfQorCWZyZWUocCk7CiAJcmV0dXJuKEFSQ0hJVkVfT0spOwogfQogCkBAIC02NjAsNyArNjg1LDcgQEAKIAkJCSAqIGNhc2UgZ2V0dGluZyBXQ1MgZmFpbGVkLiBPbiBQT1NJWCwgdGhpcyBpcyBhCiAJCQkgKiBub3JtYWwgb3BlcmF0aW9uLgogCQkJICovCi0JCQlpZiAocCAhPSBOVUxMICYmIHBbc3RybGVuKHApIC0gMV0gIT0gJy8nKSB7CisJCQlpZiAocCAhPSBOVUxMICYmIHBbMF0gIT0gJ1wwJyAmJiBwW3N0cmxlbihwKSAtIDFdICE9ICcvJykgewogCQkJCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBhczsKIAogCQkJCWFyY2hpdmVfc3RyaW5nX2luaXQoJmFzKTsKQEAgLTY4OSwxNyArNzE0LDkgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JCWNhc2UgQUVfSUZTT0NLOgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBzb2NrZXQiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQlkZWZhdWx0OgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSB0aGlzICh0eXBlPTAlbG8pIiwKLQkJCSAgICAodW5zaWduZWQgbG9uZykKLQkJCSAgICBhcmNoaXZlX2VudHJ5X2ZpbGV0eXBlKGVudHJ5X29yaWdpbmFsKSk7CisJCWRlZmF1bHQ6IC8qIEFFX0lGU09DSyBhbmQgdW5rbm93biAqLworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCQkJICAgICZhLT5hcmNoaXZlLCBlbnRyeV9vcmlnaW5hbCwgInBheCIpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCX0KIAl9CkBAIC04MzUsMTMgKzg1MiwxNiBAQAogCSAqIHRoZW0gZG8uCiAJICovCiAJciA9IGdldF9lbnRyeV9wYXRobmFtZShhLCBlbnRyeV9tYWluLCAmcGF0aCwgJnBhdGhfbGVuZ3RoLCBzY29udik7Ci0JaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyKTsKLQllbHNlIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwl9IGVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQlyID0gZ2V0X2VudHJ5X3BhdGhuYW1lKGEsIGVudHJ5X21haW4sICZwYXRoLAogCQkgICAgJnBhdGhfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJICAgICJDYW4ndCB0cmFuc2xhdGUgcGF0aG5hbWUgJyVzJyB0byAlcyIsIHBhdGgsCiAJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2NoYXJzZXRfbmFtZShzY29udikpOwpAQCAtODQ5LDEyICs4NjksMTUgQEAKIAkJc2NvbnYgPSBOVUxMOy8qIFRoZSBoZWFkZXIgY2hhcnNldCBzd2l0Y2hlcyB0byBiaW5hcnkgbW9kZS4gKi8KIAl9CiAJciA9IGdldF9lbnRyeV91bmFtZShhLCBlbnRyeV9tYWluLCAmdW5hbWUsICZ1bmFtZV9sZW5ndGgsIHNjb252KTsKLQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQlyZXR1cm4gKHIpOwotCWVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgeworCX0gZWxzZSBpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCXIgPSBnZXRfZW50cnlfdW5hbWUoYSwgZW50cnlfbWFpbiwgJnVuYW1lLCAmdW5hbWVfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJICAgICJDYW4ndCB0cmFuc2xhdGUgdW5hbWUgJyVzJyB0byAlcyIsIHVuYW1lLAogCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUoc2NvbnYpKTsKQEAgLTg2MiwxMiArODg1LDE1IEBACiAJCXNjb252ID0gTlVMTDsvKiBUaGUgaGVhZGVyIGNoYXJzZXQgc3dpdGNoZXMgdG8gYmluYXJ5IG1vZGUuICovCiAJfQogCXIgPSBnZXRfZW50cnlfZ25hbWUoYSwgZW50cnlfbWFpbiwgJmduYW1lLCAmZ25hbWVfbGVuZ3RoLCBzY29udik7Ci0JaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyKTsKLQllbHNlIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwl9IGVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQlyID0gZ2V0X2VudHJ5X2duYW1lKGEsIGVudHJ5X21haW4sICZnbmFtZSwgJmduYW1lX2xlbmd0aCwgTlVMTCk7Ci0JCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCXJldHVybiAocik7CisJCX0KIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCSAgICAiQ2FuJ3QgdHJhbnNsYXRlIGduYW1lICclcycgdG8gJXMiLCBnbmFtZSwKIAkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fY2hhcnNldF9uYW1lKHNjb252KSk7CkBAIC04NzksMTMgKzkwNSwxNiBAQAogCWlmIChsaW5rcGF0aCA9PSBOVUxMKSB7CiAJCXIgPSBnZXRfZW50cnlfc3ltbGluayhhLCBlbnRyeV9tYWluLCAmbGlua3BhdGgsCiAJCSAgICAmbGlua3BhdGhfbGVuZ3RoLCBzY29udik7Ci0JCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCXJldHVybiAocik7Ci0JCWVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgeworCQl9IGVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQkJciA9IGdldF9lbnRyeV9zeW1saW5rKGEsIGVudHJ5X21haW4sICZsaW5rcGF0aCwKIAkJCSAgICAmbGlua3BhdGhfbGVuZ3RoLCBOVUxMKTsKLQkJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJCXJldHVybiAocik7CisJCQl9CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKIAkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkJICAgICJDYW4ndCB0cmFuc2xhdGUgbGlua25hbWUgJyVzJyB0byAlcyIsIGxpbmtwYXRoLApAQCAtOTAxLDIxICs5MzAsMjkgQEAKIAkJaWYgKGhhcmRsaW5rICE9IE5VTEwpIHsKIAkJCXIgPSBnZXRfZW50cnlfaGFyZGxpbmsoYSwgZW50cnlfbWFpbiwgJmhhcmRsaW5rLAogCQkJICAgICZoYXJkbGlua19sZW5ndGgsIE5VTEwpOwotCQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQkJcmV0dXJuIChyKTsKKwkJCX0KIAkJCWxpbmtwYXRoID0gaGFyZGxpbms7CiAJCQlsaW5rcGF0aF9sZW5ndGggPSBoYXJkbGlua19sZW5ndGg7CiAJCX0KIAkJciA9IGdldF9lbnRyeV9wYXRobmFtZShhLCBlbnRyeV9tYWluLCAmcGF0aCwKIAkJICAgICZwYXRoX2xlbmd0aCwgTlVMTCk7Ci0JCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCXJldHVybiAocik7CisJCX0KIAkJciA9IGdldF9lbnRyeV91bmFtZShhLCBlbnRyeV9tYWluLCAmdW5hbWUsICZ1bmFtZV9sZW5ndGgsIE5VTEwpOwotCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQlyZXR1cm4gKHIpOworCQl9CiAJCXIgPSBnZXRfZW50cnlfZ25hbWUoYSwgZW50cnlfbWFpbiwgJmduYW1lLCAmZ25hbWVfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCX0KIAogCS8qIFN0b3JlIHRoZSBoZWFkZXIgZW5jb2RpbmcgZmlyc3QsIHRvIGJlIG5pY2UgdG8gcmVhZGVycy4gKi8KQEAgLTExMTIsNiArMTE0OSwxMCBAQAogCWlmICghbmVlZF9leHRlbnNpb24gJiYgYWNsX3R5cGVzICE9IDApCiAJCW5lZWRfZXh0ZW5zaW9uID0gMTsKIAorCS8qIElmIHRoZSBzeW1saW5rIHR5cGUgaXMgZGVmaW5lZCwgd2UgbmVlZCBhbiBleHRlbnNpb24gKi8KKwlpZiAoIW5lZWRfZXh0ZW5zaW9uICYmIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlKGVudHJ5X21haW4pID4gMCkKKwkJbmVlZF9leHRlbnNpb24gPSAxOworCiAJLyoKIAkgKiBMaWJhcmNoaXZlIHVzZWQgdG8gaW5jbHVkZSB0aGVzZSBpbiBleHRlbmRlZCBoZWFkZXJzIGZvcgogCSAqIHJlc3RyaWN0ZWQgcGF4IGZvcm1hdCwgYnV0IHRoYXQgY29uZnVzZWQgcGVvcGxlIHdobwpAQCAtMTE2OCwyNCArMTIwOSwzMyBAQAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1NUWUxFX0VYVFJBX0lEIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9TRVBBUkFUT1JfQ09NTUEgfAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1NUWUxFX0NPTVBBQ1QpOwotCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKQorCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQl9CiAJCX0KIAkJaWYgKGFjbF90eXBlcyAmIEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQUNDRVNTKSB7CiAJCQlyZXQgPSBhZGRfcGF4X2FjbChhLCBlbnRyeV9vcmlnaW5hbCwgcGF4LAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQUNDRVNTIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9FWFRSQV9JRCB8CiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfU1RZTEVfU0VQQVJBVE9SX0NPTU1BKTsKLQkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkKKwkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJfQogCQl9CiAJCWlmIChhY2xfdHlwZXMgJiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQpIHsKIAkJCXJldCA9IGFkZF9wYXhfYWNsKGEsIGVudHJ5X29yaWdpbmFsLCBwYXgsCiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9ERUZBVUxUIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9FWFRSQV9JRCB8CiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfU1RZTEVfU0VQQVJBVE9SX0NPTU1BKTsKLQkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkKKwkJCWlmIChyZXQgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJfQogCQl9CiAKIAkJLyogV2UgdXNlIEdOVS10YXItY29tcGF0aWJsZSBzcGFyc2UgYXR0cmlidXRlcy4gKi8KQEAgLTEyNDUsNiArMTI5NSwxNyBAQAogCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9CisKKwkJLyogU3RvcmUgZXh0ZW5kZWQgc3ltbGluayBpbmZvcm1hdGlvbiAqLworCQlpZiAoYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUoZW50cnlfbWFpbikgPT0KKwkJICAgIEFFX1NZTUxJTktfVFlQRV9GSUxFKSB7CisJCQlhZGRfcGF4X2F0dHIoJihwYXgtPnBheF9oZWFkZXIpLAorCQkJICAgICJMSUJBUkNISVZFLnN5bWxpbmt0eXBlIiwgImZpbGUiKTsKKwkJfSBlbHNlIGlmIChhcmNoaXZlX2VudHJ5X3N5bWxpbmtfdHlwZShlbnRyeV9tYWluKSA9PQorCQkgICAgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSkgeworCQkJYWRkX3BheF9hdHRyKCYocGF4LT5wYXhfaGVhZGVyKSwKKwkJCSAgICAiTElCQVJDSElWRS5zeW1saW5rdHlwZSIsICJkaXIiKTsKKwkJfQogCX0KIAogCS8qIE9ubHkgcmVndWxhciBmaWxlcyBoYXZlIGRhdGEuICovCkBAIC0xMzEzLDggKzEzNzQsMTEgQEAKIAkgKiBudW1lcmljIGZpZWxkcywgdGhvdWdoIHRoZXkncmUgbGVzcyBjcml0aWNhbC4KIAkgKi8KIAlpZiAoX19hcmNoaXZlX3dyaXRlX2Zvcm1hdF9oZWFkZXJfdXN0YXIoYSwgdXN0YXJidWZmLCBlbnRyeV9tYWluLCAtMSwgMCwKLQkgICAgTlVMTCkgPT0gQVJDSElWRV9GQVRBTCkKKwkgICAgTlVMTCkgPT0gQVJDSElWRV9GQVRBTCkgeworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KIAogCS8qIElmIHdlIGJ1aWx0IGFueSBleHRlbmRlZCBhdHRyaWJ1dGVzLCB3cml0ZSB0aGF0IGVudHJ5IGZpcnN0LiAqLwogCWlmIChhcmNoaXZlX3N0cmxlbigmKHBheC0+cGF4X2hlYWRlcikpID4gMCkgewpAQCAtMTM3OSw2ICsxNDQzLDggQEAKIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCiAJCQkgICAgImFyY2hpdmVfd3JpdGVfcGF4X2hlYWRlcjogIgogCQkJICAgICIneCcgaGVhZGVyIGZhaWxlZD8hICBUaGlzIGNhbid0IGhhcHBlbi5cbiIpOworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9IGVsc2UgaWYgKHIgPCByZXQpCiAJCQlyZXQgPSByOwpAQCAtMTM4Nyw2ICsxNDUzLDggQEAKIAkJCXNwYXJzZV9saXN0X2NsZWFyKHBheCk7CiAJCQlwYXgtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA9IDA7CiAJCQlwYXgtPmVudHJ5X3BhZGRpbmcgPSAwOworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9CiAKQEAgLTEzOTgsMTIgKzE0NjYsMTYgQEAKIAkJICAgIGFyY2hpdmVfc3RybGVuKCYocGF4LT5wYXhfaGVhZGVyKSkpOwogCQlpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCQkvKiBJZiBhIHdyaXRlIGZhaWxzLCB3ZSdyZSBwcmV0dHkgbXVjaCB0b2FzdC4gKi8KKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJfQogCQkvKiBQYWQgb3V0IHRoZSBlbmQgb2YgdGhlIGVudHJ5LiAqLwogCQlyID0gX19hcmNoaXZlX3dyaXRlX251bGxzKGEsIChzaXplX3QpcGF4LT5lbnRyeV9wYWRkaW5nKTsKIAkJaWYgKHIgIT0gQVJDSElWRV9PSykgewogCQkJLyogSWYgYSB3cml0ZSBmYWlscywgd2UncmUgcHJldHR5IG11Y2ggdG9hc3QuICovCisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCX0KIAkJcGF4LT5lbnRyeV9ieXRlc19yZW1haW5pbmcgPSBwYXgtPmVudHJ5X3BhZGRpbmcgPSAwOwpAQCAtMTQxMSw4ICsxNDgzLDExIEBACiAKIAkvKiBXcml0ZSB0aGUgaGVhZGVyIGZvciBtYWluIGVudHJ5LiAqLwogCXIgPSBfX2FyY2hpdmVfd3JpdGVfb3V0cHV0KGEsIHVzdGFyYnVmZiwgNTEyKTsKLQlpZiAociAhPSBBUkNISVZFX09LKQorCWlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJcmV0dXJuIChyKTsKKwl9CiAKIAkvKgogCSAqIEluZm9ybSB0aGUgY2xpZW50IG9mIHRoZSBvbi1kaXNrIHNpemUgd2UncmUgdXNpbmcsIHNvCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDAyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaApAQCAtMCwwICsxLDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAyMCBNYXJ0aW4gTWF0dXNrYQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBBUkNISVZFX1dSSVRFX1NFVF9GT1JNQVRfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfV1JJVEVfU0VUX0ZPUk1BVF9QUklWQVRFX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1QKKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCisKK3ZvaWQgX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKHN0cnVjdCBhcmNoaXZlICphLAorICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgY29uc3QgY2hhciAqZm9ybWF0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9zaGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYwppbmRleCA1YmUzMTBhLi45ZTQ5MzFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnkuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3Qgc2hhciB7CiAJaW50CQkJIGR1bXA7CkBAIC0xNjksOCArMTcwLDcgQEAKIAl9CiAKIAkvKiBTYXZlIHRoZSBlbnRyeSBmb3IgdGhlIGNsb3NpbmcuICovCi0JaWYgKHNoYXItPmVudHJ5KQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoc2hhci0+ZW50cnkpOworCWFyY2hpdmVfZW50cnlfZnJlZShzaGFyLT5lbnRyeSk7CiAJc2hhci0+ZW50cnkgPSBhcmNoaXZlX2VudHJ5X2Nsb25lKGVudHJ5KTsKIAluYW1lID0gYXJjaGl2ZV9lbnRyeV9wYXRobmFtZShlbnRyeSk7CiAKQEAgLTE5NSw4ICsxOTUsOCBAQAogCQlhcmNoaXZlX2VudHJ5X3NldF9zaXplKGVudHJ5LCAwKTsKIAkJaWYgKGFyY2hpdmVfZW50cnlfaGFyZGxpbmsoZW50cnkpID09IE5VTEwgJiYKIAkJICAgIGFyY2hpdmVfZW50cnlfc3ltbGluayhlbnRyeSkgPT0gTlVMTCkgewotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKLQkJCSAgICAic2hhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgdGhpcyIpOworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCQkJICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgInNoYXIiKTsKIAkJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKIAkJfQogCX0KQEAgLTI4OSw4ICsyODksNyBAQAogCQkJICAgICJta2RpciAtcCAlcyA+IC9kZXYvbnVsbCAyPiYxXG4iLAogCQkJICAgIHNoYXItPnF1b3RlZF9uYW1lLnMpOwogCQkJLyogUmVjb3JkIHRoYXQgd2UganVzdCBjcmVhdGVkIHRoaXMgZGlyZWN0b3J5LiAqLwotCQkJaWYgKHNoYXItPmxhc3RfZGlyICE9IE5VTEwpCi0JCQkJZnJlZShzaGFyLT5sYXN0X2Rpcik7CisJCQlmcmVlKHNoYXItPmxhc3RfZGlyKTsKIAogCQkJc2hhci0+bGFzdF9kaXIgPSBzdHJkdXAobmFtZSk7CiAJCQkvKiBUcmltIGEgdHJhaWxpbmcgJy8nLiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3Rhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3Rhci5jCmluZGV4IGM1NGFlYWIuLmQxYTA2YmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdXN0YXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3VzdGFyLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X2xvY2FsZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0cnVjdCB1c3RhciB7CiAJdWludDY0X3QJZW50cnlfYnl0ZXNfcmVtYWluaW5nOwpAQCAtMzUyLDE0ICszNTMsMTIgQEAKICNlbmRpZgogCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9mb3JtYXRfaGVhZGVyX3VzdGFyKGEsIGJ1ZmYsIGVudHJ5LCAtMSwgMSwgc2NvbnYpOwogCWlmIChyZXQgPCBBUkNISVZFX1dBUk4pIHsKLQkJaWYgKGVudHJ5X21haW4pCi0JCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyZXQpOwogCX0KIAlyZXQyID0gX19hcmNoaXZlX3dyaXRlX291dHB1dChhLCBidWZmLCA1MTIpOwogCWlmIChyZXQyIDwgQVJDSElWRV9XQVJOKSB7Ci0JCWlmIChlbnRyeV9tYWluKQotCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCXJldHVybiAocmV0Mik7CiAJfQogCWlmIChyZXQyIDwgcmV0KQpAQCAtMzY3LDggKzM2Niw3IEBACiAKIAl1c3Rhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nID0gYXJjaGl2ZV9lbnRyeV9zaXplKGVudHJ5KTsKIAl1c3Rhci0+ZW50cnlfcGFkZGluZyA9IDB4MWZmICYgKC0oaW50NjRfdCl1c3Rhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKTsKLQlpZiAoZW50cnlfbWFpbikKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKQEAgLTUxNSw5ICs1MTMsMTEgQEAKIAl9CiAJaWYgKGNvcHlfbGVuZ3RoID4gMCkgewogCQlpZiAoY29weV9sZW5ndGggPiBVU1RBUl91bmFtZV9zaXplKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkJICAgICJVc2VybmFtZSB0b28gbG9uZyIpOwotCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7CisJCQlpZiAodGFydHlwZSAhPSAneCcpIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLCAiVXNlcm5hbWUgdG9vIGxvbmciKTsKKwkJCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKKwkJCX0KIAkJCWNvcHlfbGVuZ3RoID0gVVNUQVJfdW5hbWVfc2l6ZTsKIAkJfQogCQltZW1jcHkoaCArIFVTVEFSX3VuYW1lX29mZnNldCwgcCwgY29weV9sZW5ndGgpOwpAQCAtNTM4LDkgKzUzOCwxMSBAQAogCX0KIAlpZiAoY29weV9sZW5ndGggPiAwKSB7CiAJCWlmIChzdHJsZW4ocCkgPiBVU1RBUl9nbmFtZV9zaXplKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkJICAgICJHcm91cCBuYW1lIHRvbyBsb25nIik7Ci0JCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKKwkJCWlmICh0YXJ0eXBlICE9ICd4JykgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsICJHcm91cCBuYW1lIHRvbyBsb25nIik7CisJCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7CisJCQl9CiAJCQljb3B5X2xlbmd0aCA9IFVTVEFSX2duYW1lX3NpemU7CiAJCX0KIAkJbWVtY3B5KGggKyBVU1RBUl9nbmFtZV9vZmZzZXQsIHAsIGNvcHlfbGVuZ3RoKTsKQEAgLTYxMiwxNiArNjE0LDkgQEAKIAkJY2FzZSBBRV9JRkJMSzogaFtVU1RBUl90eXBlZmxhZ19vZmZzZXRdID0gJzQnIDsgYnJlYWs7CiAJCWNhc2UgQUVfSUZESVI6IGhbVVNUQVJfdHlwZWZsYWdfb2Zmc2V0XSA9ICc1JyA7IGJyZWFrOwogCQljYXNlIEFFX0lGSUZPOiBoW1VTVEFSX3R5cGVmbGFnX29mZnNldF0gPSAnNicgOyBicmVhazsKLQkJY2FzZSBBRV9JRlNPQ0s6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHNvY2tldCIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0JCWRlZmF1bHQ6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHRoaXMgKG1vZGU9MCVsbykiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWFyY2hpdmVfZW50cnlfbW9kZShlbnRyeSkpOworCQlkZWZhdWx0OiAvKiBBRV9JRlNPQ0sgYW5kIHVua25vd24gKi8KKwkJCV9fYXJjaGl2ZV93cml0ZV9lbnRyeV9maWxldHlwZV91bnN1cHBvcnRlZCgKKwkJCSAgICAmYS0+YXJjaGl2ZSwgZW50cnksICJ1c3RhciIpOwogCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3Y3dGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3Y3dGFyLmMKaW5kZXggNjJiMTUyMi4uNTk5NDA3MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF92N3Rhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdjd0YXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnlfbG9jYWxlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RydWN0IHY3dGFyIHsKIAl1aW50NjRfdAllbnRyeV9ieXRlc19yZW1haW5pbmc7CkBAIC0yODQsNyArMjg1LDcgQEAKIAkJICogY2FzZSBnZXR0aW5nIFdDUyBmYWlsZWQuIE9uIFBPU0lYLCB0aGlzIGlzIGEKIAkJICogbm9ybWFsIG9wZXJhdGlvbi4KIAkJICovCi0JCWlmIChwICE9IE5VTEwgJiYgcFtzdHJsZW4ocCkgLSAxXSAhPSAnLycpIHsKKwkJaWYgKHAgIT0gTlVMTCAmJiBwWzBdICE9ICdcMCcgJiYgcFtzdHJsZW4ocCkgLSAxXSAhPSAnLycpIHsKIAkJCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBhczsKIAogCQkJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmYXMpOwpAQCAtMzMwLDE0ICszMzEsMTIgQEAKICNlbmRpZgogCXJldCA9IGZvcm1hdF9oZWFkZXJfdjd0YXIoYSwgYnVmZiwgZW50cnksIDEsIHNjb252KTsKIAlpZiAocmV0IDwgQVJDSElWRV9XQVJOKSB7Ci0JCWlmIChlbnRyeV9tYWluKQotCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCXJldHVybiAocmV0KTsKIAl9CiAJcmV0MiA9IF9fYXJjaGl2ZV93cml0ZV9vdXRwdXQoYSwgYnVmZiwgNTEyKTsKIAlpZiAocmV0MiA8IEFSQ0hJVkVfV0FSTikgewotCQlpZiAoZW50cnlfbWFpbikKLQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQlyZXR1cm4gKHJldDIpOwogCX0KIAlpZiAocmV0MiA8IHJldCkKQEAgLTM0NSw4ICszNDQsNyBAQAogCiAJdjd0YXItPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA9IGFyY2hpdmVfZW50cnlfc2l6ZShlbnRyeSk7CiAJdjd0YXItPmVudHJ5X3BhZGRpbmcgPSAweDFmZiAmICgtKGludDY0X3Qpdjd0YXItPmVudHJ5X2J5dGVzX3JlbWFpbmluZyk7Ci0JaWYgKGVudHJ5X21haW4pCi0JCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJcmV0dXJuIChyZXQpOwogfQogCkBAIC00OTQsMzEgKzQ5MiwxMSBAQAogCQljYXNlIEFFX0lGTE5LOgogCQkJaFtWN1RBUl90eXBlZmxhZ19vZmZzZXRdID0gJzInOwogCQkJYnJlYWs7Ci0JCWNhc2UgQUVfSUZDSFI6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIGNoYXJhY3RlciBkZXZpY2UiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQljYXNlIEFFX0lGQkxLOgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBibG9jayBkZXZpY2UiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQljYXNlIEFFX0lGSUZPOgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBmaWZvIik7Ci0JCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKLQkJY2FzZSBBRV9JRlNPQ0s6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHNvY2tldCIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCWRlZmF1bHQ6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHRoaXMgKG1vZGU9MCVsbykiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWFyY2hpdmVfZW50cnlfbW9kZShlbnRyeSkpOworCQkJLyogQUVfSUZCTEssIEFFX0lGQ0hSLCBBRV9JRklGTywgQUVfSUZTT0NLCisJCQkgKiBhbmQgdW5rbm93biAqLworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCQkJICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgInY3dGFyIik7CiAJCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfd2FyYy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjLmMKaW5kZXggZWRhZDA3Mi4uNDZiMDU3MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3JhbmRvbV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RydWN0IHdhcmNfcyB7CiAJdW5zaWduZWQgaW50IG9taXRfd2FyY2luZm86MTsKQEAgLTI1OSwxMCArMjYwLDggQEAKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAl9CiAJLyoganVzdCByZXNvcnQgdG8gZXJyb3JpbmcgYXMgcGVyIFRpbSdzIGFkdmljZSAqLwotCWFyY2hpdmVfc2V0X2Vycm9yKAotCQkmYS0+YXJjaGl2ZSwKLQkJQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJIldBUkMgY2FuIG9ubHkgcHJvY2VzcyByZWd1bGFyIGZpbGVzIik7CisJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCSAgICAmYS0+YXJjaGl2ZSwgZW50cnksICJXQVJDIik7CiAJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiB9CiAKQEAgLTMzMyw2ICszMzIsMTAgQEAKICNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKIAlzdHJ1Y3QgdG0gdGltZUhlcmU7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0dNVElNRTY0X1MpCisJZXJybm9fdCB0ZXJyOworCV9fdGltZTY0X3QgdG1wdGltZTsKKyNlbmRpZgogCWNoYXIgc3RydGltZVsxMDBdOwogCXNpemVfdCBsZW47CiAKQEAgLTM0MCw3ICszNDMsMTIgQEAKIAlpZiAoKHJ0ID0gZ210aW1lX3IoJnQsICZ0aW1lSGVyZSkpID09IE5VTEwpCiAJCXJldHVybjsKICNlbGlmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKLQlfZ210aW1lNjRfcygmdGltZUhlcmUsICZ0KTsKKwl0bXB0aW1lID0gdDsKKwl0ZXJyID0gX2dtdGltZTY0X3MoJnRpbWVIZXJlLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCXJ0ID0gTlVMTDsKKwllbHNlCisJCXJ0ID0gJnRpbWVIZXJlOwogI2Vsc2UKIAlpZiAoKHJ0ID0gZ210aW1lKCZ0KSkgPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF94YXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfeGFyLmMKaW5kZXggM2M2MTdlYy4uM2IwZmZiMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF94YXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3hhci5jCkBAIC0zNywxMyArMzcsMTMgQEAKICNpbmNsdWRlIDxsaWJ4bWwveG1sd3JpdGVyLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0JaTElCX0gKLSNpbmNsdWRlIDxjbV9iemxpYi5oPgorI2luY2x1ZGUgPGNtM3AvYnpsaWIuaD4KICNlbmRpZgogI2lmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTIxMiw4ICsyMTIsOCBAQAogCXN0cnVjdCBoZWFwX2RhdGEJIGRhdGE7CiAgICAgICAgIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAgICBzY3JpcHQ7CiAKLQlpbnQJCQkgdmlydHVhbDoxOwotCWludAkJCSBkaXI6MTsKKwlzaWduZWQgaW50CQkgdmlydHVhbDoxOworCXNpZ25lZCBpbnQJCSBkaXI6MTsKIH07CiAKIHN0cnVjdCBoYXJkbGluayB7CkBAIC00MTEsNiArNDExLDggQEAKIAlpZiAoc3RyY21wKGtleSwgImNoZWNrc3VtIikgPT0gMCkgewogCQlpZiAodmFsdWUgPT0gTlVMTCkKIAkJCXhhci0+b3B0X3N1bWFsZyA9IENLU1VNX05PTkU7CisJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgIm5vbmUiKSA9PSAwKQorCQkJeGFyLT5vcHRfc3VtYWxnID0gQ0tTVU1fTk9ORTsKIAkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAic2hhMSIpID09IDApCiAJCQl4YXItPm9wdF9zdW1hbGcgPSBDS1NVTV9TSEExOwogCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJtZDUiKSA9PSAwKQpAQCAtNDI5LDYgKzQzMSw4IEBACiAKIAkJaWYgKHZhbHVlID09IE5VTEwpCiAJCQl4YXItPm9wdF9jb21wcmVzc2lvbiA9IE5PTkU7CisJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgIm5vbmUiKSA9PSAwKQorCQkJeGFyLT5vcHRfY29tcHJlc3Npb24gPSBOT05FOwogCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJnemlwIikgPT0gMCkKIAkJCXhhci0+b3B0X2NvbXByZXNzaW9uID0gR1pJUDsKIAkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAiYnppcDIiKSA9PSAwKQpAQCAtNDgyLDYgKzQ4Niw4IEBACiAJaWYgKHN0cmNtcChrZXksICJ0b2MtY2hlY2tzdW0iKSA9PSAwKSB7CiAJCWlmICh2YWx1ZSA9PSBOVUxMKQogCQkJeGFyLT5vcHRfdG9jX3N1bWFsZyA9IENLU1VNX05PTkU7CisJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgIm5vbmUiKSA9PSAwKQorCQkJeGFyLT5vcHRfdG9jX3N1bWFsZyA9IENLU1VNX05PTkU7CiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgInNoYTEiKSA9PSAwKQogCQkJeGFyLT5vcHRfdG9jX3N1bWFsZyA9IENLU1VNX1NIQTE7CiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgIm1kNSIpID09IDApCkBAIC00OTYsMTAgKzUwMiwxMyBAQAogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwogCX0KIAlpZiAoc3RyY21wKGtleSwgInRocmVhZHMiKSA9PSAwKSB7CisJCWNoYXIgKmVuZHB0cjsKKwogCQlpZiAodmFsdWUgPT0gTlVMTCkKIAkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQl4YXItPm9wdF90aHJlYWRzID0gKGludClzdHJ0b3VsKHZhbHVlLCBOVUxMLCAxMCk7Ci0JCWlmICh4YXItPm9wdF90aHJlYWRzID09IDAgJiYgZXJybm8gIT0gMCkgeworCQllcnJubyA9IDA7CisJCXhhci0+b3B0X3RocmVhZHMgPSAoaW50KXN0cnRvdWwodmFsdWUsICZlbmRwdHIsIDEwKTsKKwkJaWYgKGVycm5vICE9IDAgfHwgKmVuZHB0ciAhPSAnXDAnKSB7CiAJCQl4YXItPm9wdF90aHJlYWRzID0gMTsKIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCYoYS0+YXJjaGl2ZSksCiAJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLApAQCAtNjkzLDEzICs3MDIsMzcgQEAKIAkJZWxzZQogCQkJcnVuID0gQVJDSElWRV9aX0ZJTklTSDsKIAkJLyogQ29tcHJlc3MgZmlsZSBkYXRhLiAqLwotCQlyID0gY29tcHJlc3Npb25fY29kZSgmKGEtPmFyY2hpdmUpLCAmKHhhci0+c3RyZWFtKSwgcnVuKTsKLQkJaWYgKHIgIT0gQVJDSElWRV9PSyAmJiByICE9IEFSQ0hJVkVfRU9GKQotCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJZm9yICg7OykgeworCQkJciA9IGNvbXByZXNzaW9uX2NvZGUoJihhLT5hcmNoaXZlKSwgJih4YXItPnN0cmVhbSksCisJCQkgICAgcnVuKTsKKwkJCWlmIChyICE9IEFSQ0hJVkVfT0sgJiYgciAhPSBBUkNISVZFX0VPRikKKwkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJaWYgKHhhci0+c3RyZWFtLmF2YWlsX291dCA9PSAwIHx8CisJCQkgICAgcnVuID09IEFSQ0hJVkVfWl9GSU5JU0gpIHsKKwkJCQlzaXplID0gc2l6ZW9mKHhhci0+d2J1ZmYpIC0KKwkJCQkgICAgeGFyLT5zdHJlYW0uYXZhaWxfb3V0OworCQkJCWNoZWNrc3VtX3VwZGF0ZSgmKHhhci0+YV9zdW13cmspLCB4YXItPndidWZmLAorCQkJCSAgICBzaXplKTsKKwkJCQl4YXItPmN1cl9maWxlLT5kYXRhLmxlbmd0aCArPSBzaXplOworCQkJCWlmICh3cml0ZV90b190ZW1wKGEsIHhhci0+d2J1ZmYsCisJCQkJICAgIHNpemUpICE9IEFSQ0hJVkVfT0spCisJCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQkJaWYgKHIgPT0gQVJDSElWRV9PSykgeworCQkJCQkvKiBPdXRwdXQgYnVmZmVyIHdhcyBmdWxsICovCisJCQkJCXhhci0+c3RyZWFtLm5leHRfb3V0ID0geGFyLT53YnVmZjsKKwkJCQkJeGFyLT5zdHJlYW0uYXZhaWxfb3V0ID0KKwkJCQkJICAgIHNpemVvZih4YXItPndidWZmKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBBUkNISVZFX0VPRiAtIFdlIGFyZSBkb25lICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogQ29tcHJlc3NvciB3YW50cyBtb3JlIGlucHV0ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAkJcnNpemUgPSBzIC0geGFyLT5zdHJlYW0uYXZhaWxfaW47CiAJCWNoZWNrc3VtX3VwZGF0ZSgmKHhhci0+ZV9zdW13cmspLCBidWZmLCByc2l6ZSk7Ci0JCXNpemUgPSBzaXplb2YoeGFyLT53YnVmZikgLSB4YXItPnN0cmVhbS5hdmFpbF9vdXQ7Ci0JCWNoZWNrc3VtX3VwZGF0ZSgmKHhhci0+YV9zdW13cmspLCB4YXItPndidWZmLCBzaXplKTsKIAl9CiAjaWYgIWRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAJaWYgKHhhci0+Ynl0ZXNfcmVtYWluaW5nID09CkBAIC03MzYsMTIgKzc2OSw5IEBACiAJaWYgKHhhci0+Y3VyX2ZpbGUtPmRhdGEuY29tcHJlc3Npb24gPT0gTk9ORSkgewogCQlpZiAod3JpdGVfdG9fdGVtcChhLCBidWZmLCBzaXplKSAhPSBBUkNISVZFX09LKQogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKLQl9IGVsc2UgewotCQlpZiAod3JpdGVfdG9fdGVtcChhLCB4YXItPndidWZmLCBzaXplKSAhPSBBUkNISVZFX09LKQotCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJeGFyLT5jdXJfZmlsZS0+ZGF0YS5sZW5ndGggKz0gc2l6ZTsKIAl9CiAJeGFyLT5ieXRlc19yZW1haW5pbmcgLT0gcnNpemU7Ci0JeGFyLT5jdXJfZmlsZS0+ZGF0YS5sZW5ndGggKz0gc2l6ZTsKIAogCXJldHVybiAocnNpemUpOwogfQpAQCAtODc1LDExICs5MDUsMTUgQEAKIHsKIAljaGFyIHRpbWVzdHJbMTAwXTsKIAlzdHJ1Y3QgdG0gdG07CisjaWYgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCV9fdGltZTY0X3QgdG1wdGltZTsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX0dNVElNRV9SKQogCWdtdGltZV9yKCZ0LCAmdG0pOwogI2VsaWYgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQotCV9nbXRpbWU2NF9zKCZ0bSwgJnQpOworCXRtcHRpbWUgPSB0OworCV9nbXRpbWU2NF9zKCZ0bSwgJnRtcHRpbWUpOwogI2Vsc2UKIAltZW1jcHkoJnRtLCBnbXRpbWUoJnQpLCBzaXplb2YodG0pKTsKICNlbmRpZgpAQCAtMjEwMCw3ICsyMTM0LDcgQEAKIAl3aGlsZSAobGVuID4gMCkgewogCQlzaXplX3QgbGwgPSBsZW47CiAKLQkJaWYgKGxlbiA+IDAgJiYgcFtsZW4tMV0gPT0gJy8nKSB7CisJCWlmIChwW2xlbi0xXSA9PSAnLycpIHsKIAkJCXBbbGVuLTFdID0gJ1wwJzsKIAkJCWxlbi0tOwogCQl9CkBAIC0yMTIwLDEwICsyMTU0LDEwIEBACiAJCWlmIChwWzBdID09ICcvJykgewogCQkJaWYgKHBbMV0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8vJyAtLT4gJy8nICovCi0JCQkJc3RyY3B5KHAsIHArMSk7CisJCQkJbWVtbW92ZShwLCBwKzEsIHN0cmxlbihwKzEpICsgMSk7CiAJCQllbHNlIGlmIChwWzFdID09ICcuJyAmJiBwWzJdID09ICcvJykKIAkJCQkvKiBDb252ZXJ0ICcvLi8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsyKTsKKwkJCQltZW1tb3ZlKHAsIHArMiwgc3RybGVuKHArMikgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy4nICYmIHBbM10gPT0gJy8nKSB7CiAJCQkJLyogQ29udmVydCAnZGlyL2RpcjEvLi4vZGlyMi8nCiAJCQkJICogICAgIC0tPiAnZGlyL2RpcjIvJwpAQCAtMjUyOSwxMyArMjU2MywxMSBAQAogc3RhdGljIHZvaWQKIGZpbGVfZnJlZV9oYXJkbGlua3Moc3RydWN0IHhhciAqeGFyKQogewotCXN0cnVjdCBhcmNoaXZlX3JiX25vZGUgKm4sICpuZXh0OworCXN0cnVjdCBhcmNoaXZlX3JiX25vZGUgKm4sICp0bXA7CiAKLQlmb3IgKG4gPSBBUkNISVZFX1JCX1RSRUVfTUlOKCYoeGFyLT5oYXJkbGlua19yYnRyZWUpKTsgbjspIHsKLQkJbmV4dCA9IF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoJih4YXItPmhhcmRsaW5rX3JidHJlZSksCi0JCSAgICBuLCBBUkNISVZFX1JCX0RJUl9SSUdIVCk7CisJQVJDSElWRV9SQl9UUkVFX0ZPUkVBQ0hfU0FGRShuLCAmKHhhci0+aGFyZGxpbmtfcmJ0cmVlKSwgdG1wKSB7CisJCV9fYXJjaGl2ZV9yYl90cmVlX3JlbW92ZV9ub2RlKCYoeGFyLT5oYXJkbGlua19yYnRyZWUpLCBuKTsKIAkJZnJlZShuKTsKLQkJbiA9IG5leHQ7CiAJfQogfQogCkBAIC0zMTY5LDggKzMyMDEsMTAgQEAKIAkJCWNoZWNrc3VtX3VwZGF0ZSgmKHhhci0+YV9zdW13cmspLAogCQkJICAgIHhhci0+d2J1ZmYsIHNpemUpOwogCQkJaWYgKHdyaXRlX3RvX3RlbXAoYSwgeGFyLT53YnVmZiwgc2l6ZSkKLQkJCSAgICAhPSBBUkNISVZFX09LKQorCQkJICAgICE9IEFSQ0hJVkVfT0spIHsKKwkJCQlmcmVlKGhlYXApOwogCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQl9CiAJCQlpZiAociA9PSBBUkNISVZFX09LKSB7CiAJCQkJeGFyLT5zdHJlYW0ubmV4dF9vdXQgPSB4YXItPndidWZmOwogCQkJCXhhci0+c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZih4YXItPndidWZmKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ppcC5jCmluZGV4IGE0YWUyMjkuLmIwY2QyMTUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF96aXAuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3JhbmRvbV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogI2lmbmRlZiBIQVZFX1pMSUJfSAogI2luY2x1ZGUgImFyY2hpdmVfY3JjMzIuaCIKQEAgLTUyNiw4ICs1MjcsOCBAQAogCS8qIElnbm9yZSB0eXBlcyBvZiBlbnRyaWVzIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydC4gKi8KIAl0eXBlID0gYXJjaGl2ZV9lbnRyeV9maWxldHlwZShlbnRyeSk7CiAJaWYgKHR5cGUgIT0gQUVfSUZSRUcgJiYgdHlwZSAhPSBBRV9JRkRJUiAmJiB0eXBlICE9IEFFX0lGTE5LKSB7Ci0JCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0JCSAgICAiRmlsZXR5cGUgbm90IHN1cHBvcnRlZCIpOworCQlfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoCisJCSAgICAmYS0+YXJjaGl2ZSwgZW50cnksICJ6aXAiKTsKIAkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOwogCX07CiAKQEAgLTU2NCwxMCArNTY1LDggQEAKIAl6aXAtPmVudHJ5X3VzZXNfemlwNjQgPSAwOwogCXppcC0+ZW50cnlfY3JjMzIgPSB6aXAtPmNyYzMyZnVuYygwLCBOVUxMLCAwKTsKIAl6aXAtPmVudHJ5X2VuY3J5cHRpb24gPSAwOwotCWlmICh6aXAtPmVudHJ5ICE9IE5VTEwpIHsKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKHppcC0+ZW50cnkpOwotCQl6aXAtPmVudHJ5ID0gTlVMTDsKLQl9CisJYXJjaGl2ZV9lbnRyeV9mcmVlKHppcC0+ZW50cnkpOworCXppcC0+ZW50cnkgPSBOVUxMOwogCiAJaWYgKHppcC0+Y2N0eF92YWxpZCkKIAkJYXJjaGl2ZV9lbmNyeXB0b19hZXNfY3RyX3JlbGVhc2UoJnppcC0+Y2N0eCk7CkBAIC0xMzc0LDEwICsxMzczLDI4IEBACiB7CiAJc3RydWN0IHRtICp0OwogCXVuc2lnbmVkIGludCBkdDsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwlzdHJ1Y3QgdG0gdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJZXJybm9fdCB0ZXJyOworCV9fdGltZTY0X3QgdG1wdGltZTsKKyNlbmRpZgogCiAJLyogVGhpcyB3aWxsIG5vdCBwcmVzZXJ2ZSB0aW1lIHdoZW4gY3JlYXRpbmcvZXh0cmFjdGluZyB0aGUgYXJjaGl2ZQogCSAqIG9uIHR3byBzeXN0ZW1zIHdpdGggZGlmZmVyZW50IHRpbWUgem9uZXMuICovCisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCXQgPSBsb2NhbHRpbWVfcigmdW5peF90aW1lLCAmdG1idWYpOworI2VsaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXRtcHRpbWUgPSB1bml4X3RpbWU7CisJdGVyciA9IF9sb2NhbHRpbWU2NF9zKCZ0bWJ1ZiwgJnRtcHRpbWUpOworCWlmICh0ZXJyKQorCQl0ID0gTlVMTDsKKwllbHNlCisJCXQgPSAmdG1idWY7CisjZWxzZQogCXQgPSBsb2NhbHRpbWUoJnVuaXhfdGltZSk7CisjZW5kaWYKIAogCS8qIE1TRE9TLXN0eWxlIGRhdGUvdGltZSBpcyBvbmx5IGJldHdlZW4gMTk4MC0wMS0wMSBhbmQgMjEwNy0xMi0zMSAqLwogCWlmICh0LT50bV95ZWFyIDwgMTk4MCAtIDE5MDApCkBAIC0xNDA0LDE4ICsxNDIxLDE3IEBACiB7CiAJbW9kZV90IHR5cGU7CiAJY29uc3QgY2hhciAqcGF0aDsKKwlzaXplX3QgbGVuOwogCiAJdHlwZSA9IGFyY2hpdmVfZW50cnlfZmlsZXR5cGUoZW50cnkpOwogCXBhdGggPSBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lKGVudHJ5KTsKIAogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAoMCk7Ci0JaWYgKHR5cGUgPT0gQUVfSUZESVIgJiYKLQkgICAgKHBhdGhbMF0gPT0gJ1wwJyB8fCBwYXRoW3N0cmxlbihwYXRoKSAtIDFdICE9ICcvJykpIHsKLQkJcmV0dXJuIHN0cmxlbihwYXRoKSArIDE7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHN0cmxlbihwYXRoKTsKLQl9CisJbGVuID0gc3RybGVuKHBhdGgpOworCWlmICh0eXBlID09IEFFX0lGRElSICYmIChwYXRoWzBdID09ICdcMCcgfHwgcGF0aFtsZW4gLSAxXSAhPSAnLycpKQorCQkrK2xlbjsgLyogU3BhY2UgZm9yIHRoZSB0cmFpbGluZyAvICovCisJcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIGludApAQCAtMTQzMCw2ICsxNDQ2LDkgQEAKIAl0eXBlID0gYXJjaGl2ZV9lbnRyeV9maWxldHlwZShlbnRyeSk7CiAJd3JpdHRlbl9ieXRlcyA9IDA7CiAKKwlpZiAocGF0aCA9PSBOVUxMKQorCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCiAJcmV0ID0gX19hcmNoaXZlX3dyaXRlX291dHB1dChhcmNoaXZlLCBwYXRoLCBzdHJsZW4ocGF0aCkpOwogCWlmIChyZXQgIT0gQVJDSElWRV9PSykKIAkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKQEAgLTE0NjAsMTAgKzE0NzksOCBAQAogCW1lbWNweShwLCBwYXRoLCBwYXRobGVuKTsKIAogCS8qIEZvbGRlcnMgYXJlIHJlY29nbml6ZWQgYnkgYSB0cmFpbGluZyBzbGFzaC4gKi8KLQlpZiAoKHR5cGUgPT0gQUVfSUZESVIpICYgKHBhdGhbcGF0aGxlbiAtIDFdICE9ICcvJykpIHsKKwlpZiAoKHR5cGUgPT0gQUVfSUZESVIpICYmIChwYXRoW3BhdGhsZW4gLSAxXSAhPSAnLycpKQogCQlwW3BhdGhsZW5dID0gJy8nOwotCQlwW3BhdGhsZW4gKyAxXSA9ICdcMCc7Ci0JfQogfQogCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucy4zCmluZGV4IGFlYjdhMTguLmNmZmU1NzEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMuMwpAQCAtMjQsNyArMjQsNyBAQAogLlwiCiAuXCIgJEZyZWVCU0QkCiAuXCIKLS5EZCBGZWJydWFyeSAyLCAyMDEyCisuRGQgSmFudWFyeSAzMSwgMjAyMAogLkR0IEFSQ0hJVkVfV1JJVEVfT1BUSU9OUyAzCiAuT3MKIC5TaCBOQU1FCkBAIC03MCw3ICs3MCw3IEBACiAuRm4gYXJjaGl2ZV93cml0ZV9zZXRfZmlsdGVyX29wdGlvbiAsCiAuRm4gYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X29wdGlvbgogLlhjCi1TcGVjaWZpZXMgYW4gb3B0aW9uIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gY3VycmVudGx5LXJlZ2lzdGVyZWQKK1NwZWNpZmllcyBhbiBvcHRpb24gdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY3VycmVudGx5LXJlZ2lzdGVyZWQKIGZpbHRlcnMgKGluY2x1ZGluZyBkZWNvbXByZXNzaW9uIGZpbHRlcnMpIG9yIGZvcm1hdCByZWFkZXJzLgogLlBwCiBJZgpAQCAtMTM4LDcgKzEzOCw3IEBACiAuQ20gQVJDSElWRV9GQVRBTAogd2lsbCBiZSByZXR1cm5lZAogaW1tZWRpYXRlbHkuCi1PdGhlcndpc2UsIGdyZWF0ZXIgb2YgdGhlIHR3byB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZC4KK090aGVyd2lzZSwgdGhlIGdyZWF0ZXIgb2YgdGhlIHR3byB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZC4KIC5cIgogLkl0IEZuIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMKIC5BciBvcHRpb25zCkBAIC0xNzAsNTUgKzE3MCwxNTMgQEAKIC5cIgogLlNoIE9QVElPTlMKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBGaWx0ZXIgYjY0ZW5jb2RlCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gbW9kZQorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIG9jdGFsIGRpZ2l0cyBzcGVjaWZ5aW5nIHRoZSBmaWxlIG1vZGUuCisuSXQgQ20gbmFtZQorVGhlIHZhbHVlIHNwZWNpZmllcyB0aGUgZmlsZSBuYW1lLgorLkVsCisuSXQgRmlsdGVyIGJ6aXAyCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gY29tcHJlc3Npb24tbGV2ZWwKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorYnppcDIgY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMSB0byA5LgorLkVsCiAuSXQgRmlsdGVyIGd6aXAKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKIC5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAogVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCi1nemlwIGNvbXByZXNzaW9uIGxldmVsLgorZ3ppcCBjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSAwIHRvIDkuCisuSXQgQ20gdGltZXN0YW1wCitTdG9yZSB0aW1lc3RhbXAuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorLkVsCisuSXQgRmlsdGVyIGxyemlwCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gY29tcHJlc3Npb24gTnMgPSBOcyBBciB0eXBlCitVc2UKKy5BciB0eXBlCithcyBjb21wcmVzc2lvbiBtZXRob2QuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZQorLkRxIGJ6aXAyICwKKy5EcSBnemlwaSAsCisuRHEgbHpvCisuUHEgdWx0cmEgZmFzdCAsCithbmQKKy5EcSB6cGFxCisuUHEgYmVzdCwgZXh0cmVtZWx5IHNsb3cgLgorLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCitUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKK2xyemlwIGNvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBmcm9tIDEgdG8gOS4KKy5FbAorLkl0IEZpbHRlciBsejQKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitsejQgY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMCB0byA5LgorLkl0IENtIHN0cmVhbS1jaGVja3N1bQorRW5hYmxlIHN0cmVhbSBjaGVja3N1bS4gVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSXQgQ20gYmxvY2stY2hlY2tzdW0KK0VuYWJsZSBibG9jayBjaGVja3N1bS4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLkl0IENtIGJsb2NrLXNpemUKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorbHo0IGNvbXByZXNzaW9uIGJsb2NrIHNpemUuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gNCB0byA3CisuUHEgZGVmYXVsdCAuCisuSXQgQ20gYmxvY2stZGVwZW5kZW5jZQorVXNlIHRoZSBwcmV2aW91cyBibG9jayBvZiB0aGUgYmxvY2sgYmVpbmcgY29tcHJlc3NlZCBmb3IKK2EgY29tcHJlc3Npb24gZGljdGlvbmFyeSB0byBpbXByb3ZlIGNvbXByZXNzaW9uIHJhdGlvLgorVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLkVsCisuSXQgRmlsdGVyIGx6b3AKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitsem9wIGNvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBmcm9tIDEgdG8gOS4KKy5FbAorLkl0IEZpbHRlciB1dWVuY29kZQorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIG1vZGUKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBvY3RhbCBkaWdpdHMgc3BlY2lmeWluZyB0aGUgZmlsZSBtb2RlLgorLkl0IENtIG5hbWUKK1RoZSB2YWx1ZSBzcGVjaWZpZXMgdGhlIGZpbGUgbmFtZS4KIC5FbAogLkl0IEZpbHRlciB4egogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAogLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCiBUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKLWNvbXByZXNzaW9uIGxldmVsLgorY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMCB0byA5LgorLkl0IENtIHRocmVhZHMKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorbnVtYmVyIG9mIHRocmVhZHMgZm9yIG11bHRpLXRocmVhZGVkIGx6bWEgY29tcHJlc3Npb24uCitJZiBzdXBwb3J0ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHJlYWQgZnJvbQorLkZuIGx6bWFfY3B1dGhyZWFkcyAuCiAuRWwKLS5JdCBGb3JtYXQgbXRyZWUKKy5JdCBGaWx0ZXIgenN0ZAogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAotLkl0IENtIGNrc3VtICwgQ20gZGV2aWNlICwgQ20gZmxhZ3MgLCBDbSBnaWQgLCBDbSBnbmFtZSAsIENtIGluZGVudCAsIENtIGxpbmsgLCBDbSBtZDUgLCBDbSBtb2RlICwgQ20gbmxpbmsgLCBDbSBybWQxNjAgLCBDbSBzaGExICwgQ20gc2hhMjU2ICwgQ20gc2hhMzg0ICwgQ20gc2hhNTEyICwgQ20gc2l6ZSAsIENtIHRpbWUgLCBDbSB1aWQgLCBDbSB1bmFtZQotRW5hYmxlIGEgcGFydGljdWxhciBrZXl3b3JkIGluIHRoZSBtdHJlZSBvdXRwdXQuCi1QcmVmaXggd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIHRvIGRpc2FibGUgdGhlIGNvcnJlc3BvbmRpbmcga2V5d29yZC4KLVRoZSBkZWZhdWx0IGlzIGVxdWl2YWxlbnQgdG8KLS5EcSBkZXZpY2UsIGZsYWdzLCBnaWQsIGduYW1lLCBsaW5rLCBtb2RlLCBubGluaywgc2l6ZSwgdGltZSwgdHlwZSwgdWlkLCB1bmFtZSAuCi0uSXQgQ20gYWxsCi1FbmFibGVzIGFsbCBvZiB0aGUgYWJvdmUga2V5d29yZHMuCi0uSXQgQ20gdXNlLXNldAotRW5hYmxlcyBnZW5lcmF0aW9uIG9mCi0uQ20gL3NldAotbGluZXMgdGhhdCBzcGVjaWZ5IGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIGZpbGVzIGFuZC9vciBkaXJlY3Rvcmllcy4KLS5JdCBDbSBpbmRlbnQKLVhYWCBuZWVkcyBleHBsYW5hdGlvbiBYWFgKKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSAxIHRvIDIyLgorLkVsCisuSXQgRm9ybWF0IDd6aXAKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbgorVGhlIHZhbHVlIGlzIG9uZSBvZgorLkRxIHN0b3JlICwKKy5EcSBkZWZsYXRlICwKKy5EcSBiemlwMiAsCisuRHEgbHptYTEgLAorLkRxIGx6bWEyCitvcgorLkRxIHBwbWQKK3RvIGluZGljYXRlIGhvdyB0aGUgZm9sbG93aW5nIGVudHJpZXMgc2hvdWxkIGJlIGNvbXByZXNzZWQuCitOb3RlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIGlnbm9yZWQgZm9yIGRpcmVjdG9yaWVzLCBzeW1ib2xpYyBsaW5rcywKK2FuZCBvdGhlciBzcGVjaWFsIGVudHJpZXMuCisuSXQgQ20gY29tcHJlc3Npb24tbGV2ZWwKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorY29tcHJlc3Npb24gbGV2ZWwuCitWYWx1ZXMgYmV0d2VlbiAwIGFuZCA5IGFyZSBzdXBwb3J0ZWQuCitUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxldmVsIGRlcGVuZHMgb24gdGhlIGNob3NlbgorY29tcHJlc3Npb24gbWV0aG9kLgorLkVsCisuSXQgRm9ybWF0IGNwaW8KKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgorLkVsCisuSXQgRm9ybWF0IGdudXRhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUsIGdyb3VwIGFuZCB1c2VyIG5hbWVzLgogLkVsCiAuSXQgRm9ybWF0IGlzbzk2NjAgLSB2b2x1bWUgbWV0YWRhdGEKIFRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdG8gc2V0IHN0YW5kYXJkIElTTzk2NjAgbWV0YWRhdGEuCiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CiAuSXQgQ20gYWJzdHJhY3QtZmlsZSBOcyA9IE5zIEFyIGZpbGVuYW1lCiBUaGUgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSB3aWxsIGJlIGlkZW50aWZpZWQgaW4gdGhlIElTTzk2NjAgbWV0YWRhdGEKLWFzIGhvbGRpbmcgdGhlIGFic3RyYWN0IGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBhYnN0cmFjdCBmb3IgdGhpcyB2b2x1bWUuCitEZWZhdWx0OiBub25lLgogLkl0IENtIGFwcGxpY2F0aW9uLWlkIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgYXBwbGljYXRpb24gaWRlbnRpZmllciBmb3IgdGhpcyB2b2x1bWUuICBEZWZhdWx0OiBub25lLgorYXMgaG9sZGluZyB0aGUgYXBwbGljYXRpb24gaWRlbnRpZmllciBmb3IgdGhpcyB2b2x1bWUuCitEZWZhdWx0OiBub25lLgogLkl0IENtIGJpYmxpby1maWxlIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgYmlibGlvZ3JhcGh5IGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBiaWJsaW9ncmFwaHkgZm9yIHRoaXMgdm9sdW1lLgorRGVmYXVsdDogbm9uZS4KIC5JdCBDbSBjb3B5cmlnaHQtZmlsZSBOcyA9IE5zIEFyIGZpbGVuYW1lCiBUaGUgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSB3aWxsIGJlIGlkZW50aWZpZWQgaW4gdGhlIElTTzk2NjAgbWV0YWRhdGEKLWFzIGhvbGRpbmcgdGhlIGNvcHlyaWdodCBmb3IgdGhpcyB2b2x1bWUuICBEZWZhdWx0OiBub25lLgorYXMgaG9sZGluZyB0aGUgY29weXJpZ2h0IGZvciB0aGlzIHZvbHVtZS4KK0RlZmF1bHQ6IG5vbmUuCiAuSXQgQ20gcHVibGlzaGVyIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgcHVibGlzaGVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBwdWJsaXNoZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgdm9sdW1lLgorRGVmYXVsdDogbm9uZS4KIC5JdCBDbSB2b2x1bWUtaWQgTnMgPSBOcyBBciBzdHJpbmcKIFRoZSBzcGVjaWZpZWQgc3RyaW5nIHdpbGwgYmUgdXNlZCBhcyB0aGUgVm9sdW1lIElkZW50aWZpZXIgaW4gdGhlIElTTzk2NjAgbWV0YWRhdGEuCi1JdCBpcyBsaW1pdGVkIHRvIDMyIGJ5dGVzLiBEZWZhdWx0OiBub25lLgorSXQgaXMgbGltaXRlZCB0byAzMiBieXRlcy4KK0RlZmF1bHQ6IG5vbmUuCiAuRWwKIC5JdCBGb3JtYXQgaXNvOTY2MCAtIGJvb3Qgc3VwcG9ydAogVGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCB0byBtYWtlIGFuIElTTzk2NjAgaW1hZ2UgdGhhdCBjYW4gYmUgZGlyZWN0bHkKQEAgLTI2Niw3ICszNjQsNyBAQAogdGhlIGRlZmF1bHQgaXMKIC5DbSBmZCAsCiBvdGhlcndpc2UgdGhlIGRlZmF1bHQgaXMKLS5DbSBuby1lbXVsYXRpb24uCisuQ20gbm8tZW11bGF0aW9uIC4KIC5FbAogLkl0IEZvcm1hdCBpc285NjYwIC0gZmlsZW5hbWUgYW5kIHNpemUgZXh0ZW5zaW9ucwogVmFyaW91cyBleHRlbnNpb25zIHRvIHRoZSBiYXNlIElTTzk2NjAgZm9ybWF0LgpAQCAtMjkwLDcgKzM4OCw3IEBACiBEZWZhdWx0OiBkaXNhYmxlZC4KIC5JdCBDbSBhbGxvdy1wZXJpb2QKIElmIGVuYWJsZWQsIGFsbG93cyBmaWxlbmFtZXMgdG8gY29udGFpbiB0cmFpbGluZyBwZXJpb2QgY2hhcmFjdGVycywgaW4gdmlvbGF0aW9uIG9mIHRoZSBJU085NjYwIHNwZWNpZmljYXRpb24uCi1JZiBkaXNhYmxlZCx0cmFpbGluZyBwZXJpb2RzIHdpbGwgYmUgY29udmVydGVkIHRvIHVuZGVyc2NvcmUgY2hhcmFjdGVycy4KK0lmIGRpc2FibGVkLCB0cmFpbGluZyBwZXJpb2RzIHdpbGwgYmUgY29udmVydGVkIHRvIHVuZGVyc2NvcmUgY2hhcmFjdGVycy4KIFRoaXMgZG9lcyBub3QgaW1wYWN0IG5hbWVzIHN0b3JlZCBpbiB0aGUgUm9ja3JpZGdlIG9yIEpvbGlldCBleHRlbnNpb24gYXJlYS4KIERlZmF1bHQ6IGRpc2FibGVkLgogLkl0IENtIGFsbG93LXB2ZC1sb3dlcmNhc2UKQEAgLTM5OCw2ICs0OTYsMTExIEBACiBUaGlzIG9wdGlvbiBjYW4gYmUgcHJvdmlkZWQgbXVsdGlwbGUgdGltZXMgdG8gc3VwcHJlc3MgY29tcHJlc3Npb24KIG9uIG1hbnkgZmlsZXMuCiAuRWwKKy5JdCBGb3JtYXQgbXRyZWUKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBja3N1bSAsIENtIGRldmljZSAsIENtIGZsYWdzICwgQ20gZ2lkICwgQ20gZ25hbWUgLCBDbSBpbmRlbnQgLCBDbSBsaW5rICwgQ20gbWQ1ICwgQ20gbW9kZSAsIENtIG5saW5rICwgQ20gcm1kMTYwICwgQ20gc2hhMSAsIENtIHNoYTI1NiAsIENtIHNoYTM4NCAsIENtIHNoYTUxMiAsIENtIHNpemUgLCBDbSB0aW1lICwgQ20gdWlkICwgQ20gdW5hbWUKK0VuYWJsZSBhIHBhcnRpY3VsYXIga2V5d29yZCBpbiB0aGUgbXRyZWUgb3V0cHV0LgorUHJlZml4IHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayB0byBkaXNhYmxlIHRoZSBjb3JyZXNwb25kaW5nIGtleXdvcmQuCitUaGUgZGVmYXVsdCBpcyBlcXVpdmFsZW50IHRvCisuRHEgZGV2aWNlLCBmbGFncywgZ2lkLCBnbmFtZSwgbGluaywgbW9kZSwgbmxpbmssIHNpemUsIHRpbWUsIHR5cGUsIHVpZCwgdW5hbWUgLgorLkl0IENtIGFsbAorRW5hYmxlcyBhbGwgb2YgdGhlIGFib3ZlIGtleXdvcmRzLgorLkl0IENtIHVzZS1zZXQKK0VuYWJsZXMgZ2VuZXJhdGlvbiBvZgorLkNtIC9zZXQKK2xpbmVzIHRoYXQgc3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMuCisuSXQgQ20gaW5kZW50CitYWFggbmVlZHMgZXhwbGFuYXRpb24gWFhYCisuRWwKKy5JdCBGb3JtYXQgbmV3YworLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCisuRWwKKy5JdCBGb3JtYXQgcGF4CisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSwgZ3JvdXAgYW5kIHVzZXIgbmFtZXMuCitUaGUgdmFsdWUgaXMgb25lIG9mCisuRHEgQklOQVJZCitvcgorLkRxIFVURi04IC4KK1dpdGgKKy5EcSBCSU5BUlkKK3RoZXJlIGlzIG5vIGNoYXJhY3RlciBjb252ZXJzaW9uLCB3aXRoCisuRHEgVVRGLTgKK25hbWVzIGFyZSBjb252ZXJ0ZWQgdG8gVVRGLTguCisuSXQgQ20geGF0dHJoZWFkZXIKK1doZW4gc3RvcmluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLCB0aGlzIG9wdGlvbiBjb25maWd1cmVzIHdoaWNoCitoZWFkZXJzIHNob3VsZCBiZSB3cml0dGVuLiBUaGUgdmFsdWUgaXMgb25lIG9mCisuRHEgYWxsICwKKy5EcSBMSUJBUkNISVZFICwKK29yCisuRHEgU0NISUxZIC4KK0J5IGRlZmF1bHQsIGJvdGgKKy5EcSBMSUJBUkNISVZFLnhhdHRyCithbmQKKy5EcSBTQ0hJTFkueGF0dHIKK2hlYWRlcnMgYXJlIHdyaXR0ZW4uCisuRWwKKy5JdCBGb3JtYXQgdXN0YXIKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlLCBncm91cCBhbmQgdXNlciBuYW1lcy4KKy5FbAorLkl0IEZvcm1hdCB2N3RhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUsIGdyb3VwIGFuZCB1c2VyIG5hbWVzLgorLkVsCisuSXQgRm9ybWF0IHdhcmMKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBvbWl0LXdhcmNpbmZvCitTZXQgdG8KKy5EcSB0cnVlCit0byBkaXNhYmxlIG91dHB1dCBvZiB0aGUgd2FyY2luZm8gcmVjb3JkLgorLkVsCisuSXQgRm9ybWF0IHhhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGNoZWNrc3VtIE5zID0gTnMgQXIgdHlwZQorVXNlCisuQXIgdHlwZQorYXMgZmlsZSBjaGVja3N1bSBtZXRob2QuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZQorLkRxIG5vbmUgLAorLkRxIG1kNSAsCithbmQKKy5EcSBzaGExCisuUHEgZGVmYXVsdCAuCisuSXQgQ20gY29tcHJlc3Npb24gTnMgPSBOcyBBciB0eXBlCitVc2UKKy5BciB0eXBlCithcyBjb21wcmVzc2lvbiBtZXRob2QuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZQorLkRxIG5vbmUgLAorLkRxIGJ6aXAyICwKKy5EcSBnemlwCisuUHEgZGVmYXVsdCAsCisuRHEgbHptYQorYW5kCisuRHEgeHogLgorLkl0IENtIGNvbXByZXNzaW9uX2xldmVsCitUaGUgdmFsdWUgaXMgYSBkZWNpbWFsIGludGVnZXIgZnJvbSAxIHRvIDkgc3BlY2lmeWluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwuCisuSXQgQ20gdG9jLWNoZWNrc3VtIE5zID0gTnMgQXIgdHlwZQorVXNlCisuQXIgdHlwZQorYXMgdGFibGUgb2YgY29udGVudHMgY2hlY2tzdW0gbWV0aG9kLgorU3VwcG9ydGVkIHZhbHVlcyBhcmUKKy5EcSBub25lICwKKy5EcSBtZDUKK2FuZAorLkRxIHNoYTEKKy5QcSBkZWZhdWx0IC4KKy5FbAogLkl0IEZvcm1hdCB6aXAKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKIC5JdCBDbSBjb21wcmVzc2lvbgpAQCAtNDA4LDYgKzYxMSwyOSBAQAogdG8gaW5kaWNhdGUgaG93IHRoZSBmb2xsb3dpbmcgZW50cmllcyBzaG91bGQgYmUgY29tcHJlc3NlZC4KIE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgaXMgaWdub3JlZCBmb3IgZGlyZWN0b3JpZXMsIHN5bWJvbGljIGxpbmtzLAogYW5kIG90aGVyIHNwZWNpYWwgZW50cmllcy4KKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitjb21wcmVzc2lvbiBsZXZlbC4KK1ZhbHVlcyBiZXR3ZWVuIDAgYW5kIDkgYXJlIHN1cHBvcnRlZC4KK0EgY29tcHJlc3Npb24gbGV2ZWwgb2YgMCBzd2l0Y2hlcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvCisuRHEgc3RvcmUgLAorb3RoZXIgdmFsdWVzIHdpbGwgZW5hYmxlCisuRHEgZGVmbGF0ZQorY29tcHJlc3Npb24gd2l0aCB0aGUgZ2l2ZW4gbGV2ZWwuCisuSXQgQ20gZW5jcnlwdGlvbgorRW5hYmxlIGVuY3J5cHRpb24gdXNpbmcgdHJhZGl0aW9uYWwgemlwIGVuY3J5cHRpb24uCisuSXQgQ20gZW5jcnlwdGlvbiBOcyA9IE5zIEFyIHR5cGUKK1VzZQorLkFyIHR5cGUKK2FzIGVuY3J5cHRpb24gdHlwZS4KK1N1cHBvcnRlZCB2YWx1ZXMgYXJlCisuRHEgemlwY3J5cHQKKy5QcSB0cmFkaXRpb25hbCB6aXAgZW5jcnlwdGlvbiAsCisuRHEgYWVzMTI4CisuUHEgV2luWmlwIEFFUy0xMjggZW5jcnlwdGlvbgorYW5kCisuRHEgYWVzMjU2CisuUHEgV2luWmlwIEFFUy0yNTYgZW5jcnlwdGlvbiAuCiAuSXQgQ20gZXhwZXJpbWVudGFsCiBUaGlzIGJvb2xlYW4gb3B0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhwZXJpbWVudGFsIFppcCBmZWF0dXJlcwogdGhhdCBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBvdGhlciBaaXAgaW1wbGVtZW50YXRpb25zLgpAQCAtNDE2LDcgKzY0Miw4IEBACiBBbGwgQ1JDIGZpZWxkcyBhcmUgc2V0IHRvIHplcm8uCiBJdCBzaG91bGQgbm90IGJlIHVzZWQgZXhjZXB0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLgogLkl0IENtIGhkcmNoYXJzZXQKLVRoaXMgc2V0cyB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGZvciBmaWxlbmFtZXMuCitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlIG5hbWVzLgogLkl0IENtIHppcDY0CiBaaXA2NCBleHRlbnNpb25zIHByb3ZpZGUgYWRkaXRpb25hbCBmaWxlIHNpemUgaW5mb3JtYXRpb24KIGZvciBlbnRyaWVzIGxhcmdlciB0aGFuIDQgR2lCLgpAQCAtNDY1LDkgKzY5Miw5IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKLS5YciBhcmNoaXZlX3dyaXRlIDMKKy5YciBhcmNoaXZlX3dyaXRlIDMgLAorLlhyIGxpYmFyY2hpdmUgMwogLlNoIEhJU1RPUlkKIFRoZQogLk5tIGxpYmFyY2hpdmUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfcGFzc3BocmFzZS4zCmluZGV4IDI1ODU1OTUuLjJkYjc3MDMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X3Bhc3NwaHJhc2UuMwpAQCAtNDksNyArNDksNyBAQAogLlNoIERFU0NSSVBUSU9OCiAuQmwgLXRhZyAtd2lkdGggaW5kZW50CiAuSXQgRm4gYXJjaGl2ZV93cml0ZV9zZXRfcGFzc3BocmFzZQotU2V0IGEgcGFzc3BocmFzZSBmb3Igd3JpdGluZyBhbiBlbmNyeXB0aW9uIGFyY2hpdmUuCitTZXQgYSBwYXNzcGhyYXNlIGZvciB3cml0aW5nIGFuIGVuY3J5cHRlZCBhcmNoaXZlLgogSWYKIC5BciBwYXNzcGhyYXNlCiBpcwpAQCAtNTksMTYgKzU5LDE2IEBACiB3aWxsIGJlIHJldHVybmVkLgogT3RoZXJ3aXNlLAogLkNtIEFSQ0hJVkVfT0sKLXdpbGwgYmUgcmV0dXJuZWQuIAord2lsbCBiZSByZXR1cm5lZC4KIC5JdCBGbiBhcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlX2NhbGxiYWNrCi1SZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCB0byBnZXQgYSBwYXNzcGhyYXNlCi1mb3IgZW5jcnB0aW9uIGlmIHRoZSBwYXNzcGhyYXNlIHdhcyBub3Qgc2V0IGJ5IHRoZQorUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCB0byBnZXQgYSBwYXNzcGhyYXNlCitmb3IgZW5jcnlwdGlvbiBpZiB0aGUgcGFzc3BocmFzZSB3YXMgbm90IHNldCBieSB0aGUKIC5GbiBhcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlCiBmdW5jdGlvbi4KIC5FbAogLlwiIC5TaCBFUlJPUlMKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGUgMyAsCi0uWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzCisuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3h4aGFzaC5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfeHhoYXNoLmgKaW5kZXggNDI3MjQxNi4uMWM3MTMxYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfeHhoYXNoLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfeHhoYXNoLmgKQEAgLTI0LDEyICsyNCwxMyBAQAogICoKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfWFhIQVNIX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9YWEhBU0hfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1hYSEFTSF9ICi0jZGVmaW5lIEFSQ0hJVkVfWFhIQVNIX0gKIAogdHlwZWRlZiBlbnVtIHsgWFhIX09LPTAsIFhYSF9FUlJPUiB9IFhYSF9lcnJvcmNvZGU7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9jb25maWdfZnJlZWJzZC5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbmZpZ19mcmVlYnNkLmgKaW5kZXggYmUyNTI1OC4uZjE2ZmQzNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbmZpZ19mcmVlYnNkLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbmZpZ19mcmVlYnNkLmgKQEAgLTIxMCw2ICsyMTAsNyBAQAogI2RlZmluZSBIQVZFX1RaU0VUIDEKICNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMQogI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKyNkZWZpbmUgSEFWRV9VTkxJTktBVCAxCiAjZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQogI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyAxCiAjZGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCAxCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvZmlsdGVyX2ZvcmsuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9maWx0ZXJfZm9yay5oCmluZGV4IGEyODI3MmIuLjkwOGU3Y2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9maWx0ZXJfZm9yay5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9maWx0ZXJfZm9yay5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2ZpbHRlcl9mb3JrLmggMjAxMDg3IDIwMDktMTItMjggMDI6MTg6MjZaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEZJTFRFUl9GT1JLX0gKKyNkZWZpbmUgRklMVEVSX0ZPUktfSAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBGSUxURVJfRk9SS19ICi0jZGVmaW5lIEZJTFRFUl9GT1JLX0gKLQogcGlkX3QKIF9fYXJjaGl2ZV9jcmVhdGVfY2hpbGQoY29uc3QgY2hhciAqY21kLCBpbnQgKmNoaWxkX3N0ZGluLCBpbnQgKmNoaWxkX3N0ZG91dCk7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2NoYW5nZXMuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2NoYW5nZXMuMwppbmRleCBhZGM4N2ZlLi42YmY4ZGIwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV9jaGFuZ2VzLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmVfY2hhbmdlcy4zCkBAIC0zNSw3ICszNSw2IEBACiBUaGlzIHBhZ2UgZGVzY3JpYmVzIHVzZXItdmlzaWJsZSBjaGFuZ2VzIGluIGxpYmFyY2hpdmUzLCBhbmQgbGlzdHMKIHB1YmxpYyBmdW5jdGlvbnMgYW5kIG90aGVyIHN5bWJvbHMgY2hhbmdlZCwgZGVwcmVjYXRlZCBvciByZW1vdmVkCiBpbiBsaWJhcmNoaXZlMywgYWxvbmcgd2l0aCB0aGVpciByZXBsYWNlbWVudHMgaWYgYW55LgotLlBwCiAuXCIKIC5TcyBNdWx0aXBsZSBGaWx0ZXJzCiAuXCIKQEAgLTMzMCwxMyArMzI5LDEzIEBACiAuTGkgMTAyNDAKIC5FbAogLlNoIFNFRSBBTFNPCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKKy5YciBhcmNoaXZlX3V0aWwgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAotLlhyIGFyY2hpdmVfdXRpbCAzCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV9pbnRlcm5hbHMuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2ludGVybmFscy4zCmluZGV4IDgyNzVkNjYuLmQ2NzJmM2UgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2ludGVybmFscy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2ludGVybmFscy4zCkBAIC0zNTAsOCArMzUwLDggQEAKIC5YciBhcmNoaXZlX2VudHJ5IDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAotLlhyIGFyY2hpdmVfd3JpdGVfZGlzayAzCi0uWHIgbGliYXJjaGl2ZSAzICwKKy5YciBhcmNoaXZlX3dyaXRlX2Rpc2sgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCiAuTm0gbGliYXJjaGl2ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL210cmVlLjUgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbXRyZWUuNQppbmRleCBlNjA3ZTRhLi44MTQ3Nzk2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbXRyZWUuNQorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbXRyZWUuNQpAQCAtMTMzLDcgKzEzMyw2IEBACiAuU3kgY2hhcgogZmlsZSB0eXBlcy4KIFRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgotLlBwCiAuQmwgLXRhZyAtd2lkdGggNG4KIC5JdCBBciBmb3JtYXQgLCBOcyBBciBtYWpvciAsIE5zIEFyIG1pbm9yIE5zIEJvICwgTnMgQXIgc3VidW5pdCBCYwogQSBkZXZpY2Ugd2l0aApAQCAtMTY1LDggKzE2NCw4IEBACiAuU3kgc29sYXJpcyAsCiAuU3kgc3Vub3MgLAogLlN5IHN2cjMgLAotLlN5IHN2cjQgLCAgCi1hbmQgCisuU3kgc3ZyNCAsCithbmQKIC5TeSB1bHRyaXggLgogLlBwCiBTZWUKQEAgLTI4OCwxMiArMjg3LDEwIEBACiAuSXQgQ20gdW5hbWUKIFRoZSBmaWxlIG93bmVyIGFzIGEgc3ltYm9saWMgbmFtZS4KIC5FbAotLlBwCiAuU2ggU0VFIEFMU08KIC5YciBja3N1bSAxICwKIC5YciBmaW5kIDEgLAogLlhyIG10cmVlIDgKLS5TaCBCVUdTCiAuU2ggSElTVE9SWQogVGhlCiAuTm0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS90YXIuNSBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS90YXIuNQppbmRleCAzMGI4MzdkLi4zNGFkNGY3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvdGFyLjUKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL3Rhci41CkBAIC00NDEsNyArNDQxLDcgQEAKIFZlbmRvci1zcGVjaWZpYyBhdHRyaWJ1dGVzIHVzZWQgYnkgSm9lcmcgU2NoaWxsaW5nJ3MKIC5ObSBzdGFyCiBpbXBsZW1lbnRhdGlvbi4KLS5JdCBDbSBTQ0hJTFkuYWNsLmFjY2VzcyAsIENtIFNDSElMWS5hY2wuZGVmYXVsdCwgQ20gU0NISUxZLmFjbC5hY2UKKy5JdCBDbSBTQ0hJTFkuYWNsLmFjY2VzcyAsIENtIFNDSElMWS5hY2wuZGVmYXVsdCAsIENtIFNDSElMWS5hY2wuYWNlCiBTdG9yZXMgdGhlIGFjY2VzcywgZGVmYXVsdCBhbmQgTkZTdjQgQUNMcyBhcyB0ZXh0dWFsIHN0cmluZ3MgaW4gYSBmb3JtYXQKIHRoYXQgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5IFBPU0lYLjFlIGRyYWZ0IDE3LgogSW4gcGFydGljdWxhciwgZWFjaCB1c2VyIG9yIGdyb3VwIGFjY2VzcyBzcGVjaWZpY2F0aW9uIGNhbiBpbmNsdWRlCkBAIC00NTYsNyArNDU2LDcgQEAKIC5JdCBDbSBTQ0hJTFkucmVhbHNpemUKIFRoZSBmdWxsIHNpemUgb2YgdGhlIGZpbGUgb24gZGlzay4KIFhYWCBleHBsYWluPyBYWFgKLS5JdCBDbSBTQ0hJTFkuZGV2LCBDbSBTQ0hJTFkuaW5vICwgQ20gU0NISUxZLm5saW5rcworLkl0IENtIFNDSElMWS5kZXYgLCBDbSBTQ0hJTFkuaW5vICwgQ20gU0NISUxZLm5saW5rcwogVGhlIGRldmljZSBudW1iZXIsIGlub2RlIG51bWJlciwgYW5kIGxpbmsgY291bnQgZm9yIHRoZSBlbnRyeS4KIEluIHBhcnRpY3VsYXIsIG5vdGUgdGhhdCBhIHBheCBpbnRlcmNoYW5nZSBmb3JtYXQgYXJjaGl2ZSB1c2luZyBKb2VyZwogU2NoaWxsaW5nJ3MKQEAgLTQ3Myw3ICs0NzMsNyBAQAogLkRxIGN0aW1lCiBhdHRyaWJ1dGUsIHdoaWNoIHJlZmVycyB0byB0aGUgdGltZSB3aGVuIHRoZSBmaWxlCiBtZXRhZGF0YSB3YXMgbGFzdCBjaGFuZ2VkLikKLS5JdCBDbSBMSUJBUkNISVZFLnhhdHRyLiBOcyBBciBuYW1lc3BhY2UgTnMgLiBOcyBBciBrZXkKKy5JdCBDbSBMSUJBUkNISVZFLnhhdHRyIC4gTnMgQXIgbmFtZXNwYWNlIC4gTnMgQXIga2V5CiBMaWJhcmNoaXZlIHN0b3JlcyBQT1NJWC4xZS1zdHlsZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHVzaW5nCiBrZXlzIG9mIHRoaXMgZm9ybS4KIFRoZQpAQCAtODkwLDcgKzg5MCw4IEBACiAuSXQgQ20gTQogR05VIHRhciBtdWx0aXZvbHVtZSBtYXJrZXIsIGluZGljYXRpbmcgdGhlIGZpbGUgaXMgYSBjb250aW51YXRpb24gb2YgYSBmaWxlIGZyb20gdGhlIHByZXZpb3VzIHZvbHVtZS4KIC5JdCBDbSBOCi1HTlUgdGFyIGxvbmcgZmlsZW5hbWUgc3VwcG9ydC4gIERlcHJlY2F0ZWQuCitHTlUgdGFyIGxvbmcgZmlsZW5hbWUgc3VwcG9ydC4KK0RlcHJlY2F0ZWQuCiAuSXQgQ20gUwogR05VIHRhciBzcGFyc2UgcmVndWxhciBmaWxlLgogLkl0IENtIFYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmx6bWEvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21saWJsem1hL0NNYWtlTGlzdHMudHh0CmluZGV4IGI0NDNmZDYuLjZiNmZhZTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmx6bWEvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtbGlibHptYS9DTWFrZUxpc3RzLnR4dApAQCAtNywxMSArNywxMCBAQAogaW5jbHVkZShUZXN0QmlnRW5kaWFuKQogCiBDSEVDS19JTkNMVURFX0ZJTEUoYnl0ZXN3YXAuaCBIQVZFX0JZVEVTV0FQX0gpCi1DSEVDS19JTkNMVURFX0ZJTEUoaW50dHlwZXMuaCBIQVZFX0lOVFRZUEVTX0gpCiBDSEVDS19JTkNMVURFX0ZJTEUobGltaXRzLmggSEFWRV9MSU1JVFNfSCkKIENIRUNLX0lOQ0xVREVfRklMRShtZW1vcnkuaCBIQVZFX01FTU9SWV9IKQogQ0hFQ0tfSU5DTFVERV9GSUxFKHN0cmluZ3MuaCBIQVZFX1NUUklOR1NfSCkKLUNIRUNLX0lOQ0xVREVfRklMRShzdHJpbmcuaCBIQVZFX1NUUklOR19IKQorc2V0KEhBVkVfU1RSSU5HX0ggMSkKIENIRUNLX0lOQ0xVREVfRklMRShzeXMvc3lzY3RsLmggSEFWRV9TWVNfU1lTQ1RMX0gpCiAKIENIRUNLX0lOQ0xVREVfRklMRShzdGRib29sLmggSEFWRV9TVERCT09MX0gpCkBAIC02MCw0MCArNTksNiBAQAogc2V0KEhBVkVfTUZfSEMzIDEpCiBzZXQoSEFWRV9NRl9IQzQgMSkKIAotQ0hFQ0tfVFlQRV9TSVpFKGludDE2X3QgSU5UMTZfVCkKLUNIRUNLX1RZUEVfU0laRShpbnQzMl90IElOVDMyX1QpCi1DSEVDS19UWVBFX1NJWkUoaW50NjRfdCBJTlQ2NF9UKQotQ0hFQ0tfVFlQRV9TSVpFKGludG1heF90IElOVE1BWF9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnQ4X3QgVUlOVDhfVCkKLUNIRUNLX1RZUEVfU0laRSh1aW50MTZfdCBVSU5UMTZfVCkKLUNIRUNLX1RZUEVfU0laRSh1aW50MzJfdCBVSU5UMzJfVCkKLUNIRUNLX1RZUEVfU0laRSh1aW50NjRfdCBVSU5UNjRfVCkKLUNIRUNLX1RZUEVfU0laRSh1aW50bWF4X3QgVUlOVE1BWF9UKQotCi1DSEVDS19UWVBFX1NJWkUoInNob3J0IiBTSVpFX09GX1NIT1JUKQotQ0hFQ0tfVFlQRV9TSVpFKCJpbnQiIFNJWkVfT0ZfSU5UKQotQ0hFQ0tfVFlQRV9TSVpFKCJsb25nIiBTSVpFX09GX0xPTkcpCi1DSEVDS19UWVBFX1NJWkUoImxvbmcgbG9uZyIgU0laRV9PRl9MT05HX0xPTkcpCi0KLUNIRUNLX1RZUEVfU0laRSgidW5zaWduZWQgc2hvcnQiIFNJWkVfT0ZfVU5TSUdORURfU0hPUlQpCi1DSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIiBTSVpFX09GX1VOU0lHTkVEKQotQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBsb25nIiBTSVpFX09GX1VOU0lHTkVEX0xPTkcpCi1DSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIGxvbmcgbG9uZyIgU0laRV9PRl9VTlNJR05FRF9MT05HX0xPTkcpCi1DSEVDS19UWVBFX1NJWkUoInNpemVfdCIgU0laRU9GX1NJWkVfVCkKLQotQ0hFQ0tfVFlQRV9TSVpFKCJfX2ludDY0IiBfX0lOVDY0KQotQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBfX2ludDY0IiBVTlNJR05FRF9fX0lOVDY0KQotCi1DSEVDS19UWVBFX1NJWkUodWludHB0cl90IFVJTlRQVFJfVCkKLUlGKE5PVCBIQVZFX1VJTlRQVFJfVCkKLSAgSUYoIiR7Q01BS0VfU0laRU9GX1ZPSURfUH0iIEVRVUFMIDgpCi0gICAgU0VUKHVpbnRwdHJfdCAidWludDY0X3QiKQotICBFTFNFKCkKLSAgICBTRVQodWludHB0cl90ICJ1aW50MzJfdCIpCi0gIEVORElGKCkKLUVORElGKCkKLQotCiBTRVQoTFpNQV9TUkNTCiAgIGNvbW1vbi9zeXNkZWZzLmgKICAgY29tbW9uL3R1a2xpYl9pbnRlZ2VyLmgKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmx6bWEvY29uZmlnLmguaW4gYi9VdGlsaXRpZXMvY21saWJsem1hL2NvbmZpZy5oLmluCmluZGV4IDA2ZjdmY2IuLjIwOTE2Y2EgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmx6bWEvY29uZmlnLmguaW4KKysrIGIvVXRpbGl0aWVzL2NtbGlibHptYS9jb25maWcuaC5pbgpAQCAtMywxODMgKzMsMzYgQEAKICAqIEVuc3VyZSB3ZSBoYXZlIEM5OS1zdHlsZSBpbnQ2NF90LCBldGMsIGFsbCBkZWZpbmVkLgogICovCiAKLS8qIEZpcnN0LCB3ZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBoYXMgYWxyZWFkeSBkZWZpbmVkIHRoZW0uICovCi0jY21ha2VkZWZpbmUgSEFWRV9JTlQxNl9UCi0jY21ha2VkZWZpbmUgSEFWRV9JTlQzMl9UCi0jY21ha2VkZWZpbmUgSEFWRV9JTlQ2NF9UCi0jY21ha2VkZWZpbmUgSEFWRV9JTlRNQVhfVAorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKLSNjbWFrZWRlZmluZSBIQVZFX1VJTlQ4X1QKLSNjbWFrZWRlZmluZSBIQVZFX1VJTlQxNl9UCi0jY21ha2VkZWZpbmUgSEFWRV9VSU5UMzJfVAotI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNjbWFrZWRlZmluZSBIQVZFX1VJTlRNQVhfVAotCi0vKiBXZSBtaWdodCBoYXZlIHRoZSB0eXBlcyB3ZSB3YW50IHVuZGVyIG90aGVyIHNwZWxsaW5ncy4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX19fSU5UNjQKLSNjbWFrZWRlZmluZSBIQVZFX1VfSU5UNjRfVAotI2NtYWtlZGVmaW5lIEhBVkVfVU5TSUdORURfX19JTlQ2NAotCi0vKiBUaGUgc2l6ZXMgb2YgdmFyaW91cyBzdGFuZGFyZCBpbnRlZ2VyIHR5cGVzLiAqLwotQFNJWkVfT0ZfU0hPUlRfQ09ERUAKLUBTSVpFX09GX0lOVF9DT0RFQAotQFNJWkVfT0ZfTE9OR19DT0RFQAotQFNJWkVfT0ZfTE9OR19MT05HX0NPREVACi1AU0laRV9PRl9VTlNJR05FRF9TSE9SVF9DT0RFQAotQFNJWkVfT0ZfVU5TSUdORURfQ09ERUAKLUBTSVpFX09GX1VOU0lHTkVEX0xPTkdfQ09ERUAKLUBTSVpFX09GX1VOU0lHTkVEX0xPTkdfTE9OR19DT0RFQAotQFNJWkVPRl9TSVpFX1RfQ09ERUAKLQotLyoKLSAqIElmIHdlIGxhY2sgaW50NjRfdCwgZGVmaW5lIGl0IHRvIHRoZSBmaXJzdCBvZiBfX2ludDY0LCBpbnQsIGxvbmcsIGFuZCBsb25nIGxvbmcKLSAqIHRoYXQgZXhpc3RzIGFuZCBpcyB0aGUgcmlnaHQgc2l6ZS4KLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfSU5UNjRfVCkgJiYgZGVmaW5lZChIQVZFX19fSU5UNjQpCi10eXBlZGVmIF9faW50NjQgaW50NjRfdDsKLSNkZWZpbmUgSEFWRV9JTlQ2NF9UCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX0lOVDY0X1QKK3R5cGVkZWYgS1dJTUxfSU5UX2ludDY0X3QgaW50NjRfdDsKICNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiBTSVpFX09GX0lOVCA9PSA4Ci10eXBlZGVmIGludCBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UMzJfVAordHlwZWRlZiBLV0lNTF9JTlRfaW50MzJfdCBpbnQzMl90OwogI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDY0X1QpICYmIFNJWkVfT0ZfTE9ORyA9PSA4Ci10eXBlZGVmIGxvbmcgaW50NjRfdDsKLSNkZWZpbmUgSEFWRV9JTlQ2NF9UCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX0lOVDE2X1QKK3R5cGVkZWYgS1dJTUxfSU5UX2ludDE2X3QgaW50MTZfdDsKICNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiBTSVpFX09GX0xPTkdfTE9ORyA9PSA4Ci10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UOF9UCit0eXBlZGVmIEtXSU1MX0lOVF9pbnQ4X3QgaW50OF90OwogI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDY0X1QpCi0jZXJyb3IgTm8gNjQtYml0IGludGVnZXIgdHlwZSB3YXMgZm91bmQuCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmIEtXSU1MX0lOVF91aW50NjRfdCB1aW50NjRfdDsKICNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciBpbnQzMl90Ci0gKi8KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDMyX1QpICYmIFNJWkVfT0ZfSU5UID09IDQKLXR5cGVkZWYgaW50IGludDMyX3Q7Ci0jZGVmaW5lIEhBVkVfSU5UMzJfVAorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UMzJfVAordHlwZWRlZiBLV0lNTF9JTlRfdWludDMyX3QgdWludDMyX3Q7CiAjZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UMzJfVCkgJiYgU0laRV9PRl9MT05HID09IDQKLXR5cGVkZWYgbG9uZyBpbnQzMl90OwotI2RlZmluZSBIQVZFX0lOVDMyX1QKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfVUlOVDE2X1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnQxNl90IHVpbnQxNl90OwogI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDMyX1QpCi0jZXJyb3IgTm8gMzItYml0IGludGVnZXIgdHlwZSB3YXMgZm91bmQuCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX1VJTlQ4X1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnQ4X3QgdWludDhfdDsKICNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciBpbnQxNl90Ci0gKi8KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDE2X1QpICYmIFNJWkVfT0ZfSU5UID09IDIKLXR5cGVkZWYgaW50IGludDE2X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UMTZfVAorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UUFRSX1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnRwdHJfdCB1aW50cHRyX3Q7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKEhBVkVfSU5UMTZfVCkgJiYgU0laRV9PRl9TSE9SVCA9PSAyCi10eXBlZGVmIHNob3J0IGludDE2X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UMTZfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDE2X1QpCi0jZXJyb3IgTm8gMTYtYml0IGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyoKLSAqIFNpbWlsYXJseSBmb3IgdWludDY0X3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIGRlZmluZWQoSEFWRV9VTlNJR05FRF9fX0lOVDY0KQotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIFNJWkVfT0ZfVU5TSUdORUQgPT0gOAotdHlwZWRlZiB1bnNpZ25lZCB1aW50NjRfdDsKLSNkZWZpbmUgSEFWRV9VSU5UNjRfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQ2NF9UKSAmJiBTSVpFX09GX1VOU0lHTkVEX0xPTkcgPT0gOAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIFNJWkVfT0ZfVU5TSUdORURfTE9OR19MT05HID09IDgKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpCi0jZXJyb3IgTm8gNjQtYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyoKLSAqIFNpbWlsYXJseSBmb3IgdWludDMyX3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDMyX1QpICYmIFNJWkVfT0ZfVU5TSUdORUQgPT0gNAotdHlwZWRlZiB1bnNpZ25lZCB1aW50MzJfdDsKLSNkZWZpbmUgSEFWRV9VSU5UMzJfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQzMl9UKSAmJiBTSVpFX09GX1VOU0lHTkVEX0xPTkcgPT0gNAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnQzMl90OwotI2RlZmluZSBIQVZFX1VJTlQzMl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDMyX1QpCi0jZXJyb3IgTm8gMzItYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyoKLSAqIFNpbWlsYXJseSBmb3IgdWludDE2X3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDE2X1QpICYmIFNJWkVfT0ZfVU5TSUdORUQgPT0gMgotdHlwZWRlZiB1bnNpZ25lZCB1aW50MTZfdDsKLSNkZWZpbmUgSEFWRV9VSU5UMTZfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQxNl9UKSAmJiBTSVpFX09GX1VOU0lHTkVEX1NIT1JUID09IDIKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDE2X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMTZfVCkKLSNlcnJvciBObyAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciB1aW50OF90Ci0gKi8KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQ4X1QpCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLSNkZWZpbmUgSEFWRV9VSU5UOF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDE2X1QpCi0jZXJyb3IgTm8gOC1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0vKiBEZWZpbmUgaW50bWF4X3QgYW5kIHVpbnRtYXhfdCBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBkZWZpbmVkLiAqLwotI2lmICFkZWZpbmVkKEhBVkVfSU5UTUFYX1QpCi10eXBlZGVmIGludDY0X3QgaW50bWF4X3Q7Ci0jZGVmaW5lIElOVE1BWF9NSU4gSU5UNjRfTUlOCi0jZGVmaW5lIElOVE1BWF9NQVggSU5UNjRfTUFYCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVE1BWF9UKQotdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7Ci0jZW5kaWYKLQotCi0jY21ha2VkZWZpbmUgdWludHB0cl90IEB1aW50cHRyX3RACi0KICNjbWFrZWRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQogCiAjY21ha2VkZWZpbmUgSEFWRV9CWVRFU1dBUF9IIDEKQEAgLTIxOSw3ICs3Miw5IEBACiAjZGVmaW5lIEhBVkVfTUZfSEM0IDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorI2lmZGVmIEtXSU1MX0lOVF9IQVZFX0lOVFRZUEVTX0gKKyMgZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCkBAIC0yMzEsNyArODYsOSBAQAogI2NtYWtlZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisjaWZkZWYgS1dJTUxfSU5UX0hBVkVfU1RESU5UX0gKKyMgZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorI2VuZGlmCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1NUUklOR1NfSCAxCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NNYWtlTGlzdHMudHh0CmluZGV4IDYwNjdiN2QuLjFiMDI1ZmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NNYWtlTGlzdHMudHh0CkBAIC0zNyw0ICszNyw0IEBACiAKIGFkZF9saWJyYXJ5KGNtbGlicmhhc2ggJHtsaWJyaGFzaF9zb3VyY2VzfSkKIAotaW5zdGFsbChGSUxFUyBDT1BZSU5HIFJFQURNRSBERVNUSU5BVElPTiAke0NNQUtFX0RPQ19ESVJ9L2NtbGlicmhhc2gpCitpbnN0YWxsKEZJTEVTIENPUFlJTkcgREVTVElOQVRJT04gJHtDTUFLRV9ET0NfRElSfS9jbWxpYnJoYXNoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ09QWUlORyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NPUFlJTkcKaW5kZXggYmY2NWVlMS4uYmU3ZDRhOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ09QWUlORworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9DT1BZSU5HCkBAIC0xLDE1ICsxLDE1IEBACiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkhhc2ggTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNEIFplcm8gQ2xhdXNlIExpY2Vuc2UKIAotQ29weXJpZ2h0IChjKSAyMDA1LTIwMTQgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CitDb3B5cmlnaHQgKGMpIDIwMDUsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi10byAgdXNlLCAgY29weSwgIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kICB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gIHRoZSBTb2Z0d2FyZSAgaXMKLWZ1cm5pc2hlZCB0byBkbyBzby4KK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogCi1UaGUgU29mdHdhcmUgIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQgV0lUSE9VVAotQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKLUZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSAgdGhpcyAgcHJvZ3JhbSAgYXQgIHlvdXIgIG93biAgcmlzayEKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICitSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKK0lORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCitMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKK1BFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9SRUFETUUgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYTQ5MmYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0gICAgICAgICAgICAgICAgICAgICAgID09PSBOb3RlcyBvbiBSSGFzaCBMaWNlbnNlID09PQotCi1UaGUgUkhhc2ggcHJvZ3JhbSBhbmQgTGliUkhhc2ggbGlicmFyeSBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgIFJIYXNoIExpY2Vuc2UsCi1zZWUgdGhlIENPUFlJTkcgZmlsZSBmb3IgZGV0YWlscy4gIEluIHBhcnRpY3VsYXIsICB0aGUgcHJvZ3JhbSwgIHRoZSBsaWJyYXJ5Ci1hbmQgIHNvdXJjZSBjb2RlICBjYW4gYmUgIHVzZWQgIGZyZWUgb2YgY2hhcmdlICB1bmRlciAgdGhlICBNSVQsICBCU0QsICBHUEwsCi1jb21tZXJjaWFsIG9yIGZyZWV3YXJlIGxpY2Vuc2Ugd2l0aG91dCBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucy4gIEluIHRoZSBjYXNlCi10aGUgT1NJLWFwcHJvdmVkIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdGhlICBNSVQgbGljZW5zZSBzaG91bGQgYmUgdXNlZC4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuYwppbmRleCBmYzAxNjkwLi5jZGQ0MDUzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9hbGdvcml0aG1zLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5jCkBAIC0xLDE3ICsxLDE3IEBACiAvKiBhbGdvcml0aG1zLmMgLSB0aGUgYWxnb3JpdGhtcyBzdXBwb3J0ZWQgYnkgdGhlIHJoYXNoIGxpYnJhcnkKICAqCi0gKiBDb3B5cmlnaHQ6IDIwMTEtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjcsNyArMjcsOCBAQAogI2luY2x1ZGUgImNyYzMyLmgiCiAjaW5jbHVkZSAiZWQyay5oIgogI2luY2x1ZGUgImVkb25yLmgiCi0jaW5jbHVkZSAiZ29zdC5oIgorI2luY2x1ZGUgImdvc3QxMi5oIgorI2luY2x1ZGUgImdvc3Q5NC5oIgogI2luY2x1ZGUgImhhczE2MC5oIgogI2luY2x1ZGUgIm1kNC5oIgogI2VuZGlmCkBAIC01NCwxOCArNTUsMTMgQEAKICNlbHNlCiAjIGRlZmluZSBORUVEX09QRU5TU0xfSU5JVCAwCiAjZW5kaWYgLyogVVNFX09QRU5TU0wgKi8KLSNpZmRlZiBHRU5FUkFURV9HT1NUX0xPT0tVUF9UQUJMRQotIyBkZWZpbmUgTkVFRF9HT1NUX0lOSVQgKFJIQVNIX0dPU1QgfCBSSEFTSF9HT1NUX0NSWVBUT1BSTykKKyNpZmRlZiBHRU5FUkFURV9HT1NUOTRfTE9PS1VQX1RBQkxFCisjIGRlZmluZSBORUVEX0dPU1Q5NF9JTklUIChSSEFTSF9HT1NUOTQgfCBSSEFTSF9HT1NUOTRfQ1JZUFRPUFJPKQogI2Vsc2UKLSMgZGVmaW5lIE5FRURfR09TVF9JTklUIDAKLSNlbmRpZiAvKiBHRU5FUkFURV9HT1NUX0xPT0tVUF9UQUJMRSAqLwotI2lmZGVmIEdFTkVSQVRFX0NSQzMyX1RBQkxFCi0jIGRlZmluZSBORUVEX0NSQzMyX0lOSVQgUkhBU0hfQ1JDMzIKLSNlbHNlCi0jIGRlZmluZSBORUVEX0NSQzMyX0lOSVQgMAotI2VuZGlmIC8qIEdFTkVSQVRFX0NSQzMyX1RBQkxFICovCisjIGRlZmluZSBORUVEX0dPU1Q5NF9JTklUIDAKKyNlbmRpZiAvKiBHRU5FUkFURV9HT1NUOTRfTE9PS1VQX1RBQkxFICovCiAKLSNkZWZpbmUgUkhBU0hfTkVFRF9JTklUX0FMRyAoTkVFRF9DUkMzMl9JTklUIHwgTkVFRF9HT1NUX0lOSVQgfCBORUVEX09QRU5TU0xfSU5JVCkKKyNkZWZpbmUgUkhBU0hfTkVFRF9JTklUX0FMRyAoTkVFRF9HT1NUOTRfSU5JVCB8IE5FRURfT1BFTlNTTF9JTklUKQogdW5zaWduZWQgcmhhc2hfdW5pbml0aWFsaXplZF9hbGdvcml0aG1zID0gUkhBU0hfTkVFRF9JTklUX0FMRzsKIAogcmhhc2hfaGFzaF9pbmZvKiByaGFzaF9pbmZvX3RhYmxlID0gcmhhc2hfaGFzaF9pbmZvX2RlZmF1bHQ7CkBAIC03NSwxMCArNzEsMTQgQEAKIHN0YXRpYyB2b2lkIHJoYXNoX2NyYzMyX2luaXQodWludDMyX3QqIGNyYzMyKTsKIHN0YXRpYyB2b2lkIHJoYXNoX2NyYzMyX3VwZGF0ZSh1aW50MzJfdCogY3JjMzIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOwogc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJfZmluYWwodWludDMyX3QqIGNyYzMyLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX2luaXQodWludDMyX3QqIGNyYzMyKTsKK3N0YXRpYyB2b2lkIHJoYXNoX2NyYzMyY191cGRhdGUodWludDMyX3QqIGNyYzMyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIHJoYXNoX2NyYzMyY19maW5hbCh1aW50MzJfdCogY3JjMzIsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CiAjZW5kaWYKIAogI2lmIDAKLXJoYXNoX2luZm8gaW5mb19jcmMzMiA9IHsgUkhBU0hfQ1JDMzIsIEZfQkUzMiwgNCwgIkNSQzMyIiwgImNyYzMyIiB9Oworcmhhc2hfaW5mbyBpbmZvX2NyYzMyICA9IHsgUkhBU0hfQ1JDMzIsICBGX0JFMzIsIDQsICJDUkMzMiIsICJjcmMzMiIgfTsKK3JoYXNoX2luZm8gaW5mb19jcmMzMmMgPSB7IFJIQVNIX0NSQzMyQywgRl9CRTMyLCA0LCAiQ1JDMzJDIiwgImNyYzMyYyIgfTsKIHJoYXNoX2luZm8gaW5mb19tZDQgPSB7IFJIQVNIX01ENCwgRl9MRTMyLCAxNiwgIk1ENCIsICJtZDQiIH07CiAjZW5kaWYKIHJoYXNoX2luZm8gaW5mb19tZDUgPSB7IFJIQVNIX01ENSwgRl9MRTMyLCAxNiwgIk1ENSIsICJtZDUiIH07CkBAIC05MSw4ICs5MSwxMCBAQAogcmhhc2hfaW5mbyBpbmZvX2FpY2ggPSB7IFJIQVNIX0FJQ0gsICAgICAgRl9CUzMyLCAyMCwgIkFJQ0giLCAiYWljaCIgfTsKIHJoYXNoX2luZm8gaW5mb193aGlybHBvb2wgPSB7IFJIQVNIX1dISVJMUE9PTCwgRl9CRTY0LCA2NCwgIldISVJMUE9PTCIsICJ3aGlybHBvb2wiIH07CiByaGFzaF9pbmZvIGluZm9fcm1kMTYwID0geyBSSEFTSF9SSVBFTUQxNjAsICBGX0xFMzIsIDIwLCAiUklQRU1ELTE2MCIsICJyaXBlbWQxNjAiIH07Ci1yaGFzaF9pbmZvIGluZm9fZ29zdCA9ICAgeyBSSEFTSF9HT1NULCAgICAgICBGX0xFMzIsIDMyLCAiR09TVCIsICJnb3N0IiB9Owotcmhhc2hfaW5mbyBpbmZvX2dvc3Rwcm8gPSB7IFJIQVNIX0dPU1RfQ1JZUFRPUFJPLCBGX0xFMzIsIDMyLCAiR09TVC1DUllQVE9QUk8iLCAiZ29zdC1jcnlwdG9wcm8iIH07CityaGFzaF9pbmZvIGluZm9fZ29zdDEyXzI1NiA9IHsgUkhBU0hfR09TVDEyXzI1NiwgRl9MRTY0LCAzMiwgIkdPU1QxMi0yNTYiLCAiZ29zdDEyLTI1NiIgfTsKK3JoYXNoX2luZm8gaW5mb19nb3N0MTJfNTEyID0geyBSSEFTSF9HT1NUMTJfNTEyLCBGX0xFNjQsIDY0LCAiR09TVDEyLTUxMiIsICJnb3N0MTItNTEyIiB9Oworcmhhc2hfaW5mbyBpbmZvX2dvc3Q5NCA9IHsgUkhBU0hfR09TVDk0LCAgICAgICBGX0xFMzIsIDMyLCAiR09TVDk0IiwgImdvc3Q5NCIgfTsKK3JoYXNoX2luZm8gaW5mb19nb3N0OTRwcm8gPSB7IFJIQVNIX0dPU1Q5NF9DUllQVE9QUk8sIEZfTEUzMiwgMzIsICJHT1NUOTQtQ1JZUFRPUFJPIiwgImdvc3Q5NC1jcnlwdG9wcm8iIH07CiByaGFzaF9pbmZvIGluZm9faGFzMTYwID0geyBSSEFTSF9IQVMxNjAsICAgICBGX0xFMzIsIDIwLCAiSEFTLTE2MCIsICJoYXMxNjAiIH07CiByaGFzaF9pbmZvIGluZm9fc25mMTI4ID0geyBSSEFTSF9TTkVGUlUxMjgsICBGX0JFMzIsIDE2LCAiU05FRlJVLTEyOCIsICJzbmVmcnUxMjgiIH07CiByaGFzaF9pbmZvIGluZm9fc25mMjU2ID0geyBSSEFTSF9TTkVGUlUyNTYsICBGX0JFMzIsIDMyLCAiU05FRlJVLTI1NiIsICJzbmVmcnUyNTYiIH07CkBAIC0xMTcsOSArMTE5LDEwIEBACiAjZGVmaW5lIHVwZChuYW1lKSAoKHB1cGRhdGVfdCkobmFtZSMjX3VwZGF0ZSkpCiAjZGVmaW5lIGZpbihuYW1lKSAoKHBmaW5hbF90KShuYW1lIyNfZmluYWwpKQogI2RlZmluZSBpdWYobmFtZSkgaW5pKG5hbWUpLCB1cGQobmFtZSksIGZpbihuYW1lKQorI2RlZmluZSBpdWYyKG5hbWUxLCBuYW1lMikgaW5pKG5hbWUxKSwgdXBkKG5hbWUyKSwgZmluKG5hbWUyKQogI2RlZmluZSBkaXVmKG5hbWUpIGRnc2hmdChuYW1lKSwgaW5pKG5hbWUpLCB1cGQobmFtZSksIGZpbihuYW1lKQogCi0vKiBpbmZvcm1hdGlvbiBhYm91dCBhbGwgaGFzaGVzICovCisvKiBpbmZvcm1hdGlvbiBhYm91dCBhbGwgc3VwcG9ydGVkIGhhc2ggZnVuY3Rpb25zICovCiByaGFzaF9oYXNoX2luZm8gcmhhc2hfaGFzaF9pbmZvX2RlZmF1bHRbUkhBU0hfSEFTSF9DT1VOVF0gPQogewogI2lmIDAKQEAgLTEzNSwyOCArMTM4LDM1IEBACiAJeyAmaW5mb19haWNoLCBzaXplb2YoYWljaF9jdHgpLCBkZ3NoZnQyKGFpY2gsIHNoYTFfY29udGV4dC5oYXNoKSwgaXVmKHJoYXNoX2FpY2gpLCAocGNsZWFudXBfdClyaGFzaF9haWNoX2NsZWFudXAgfSwgLyogMTYwIGJpdCAqLwogCXsgJmluZm9fd2hpcmxwb29sLCBzaXplb2Yod2hpcmxwb29sX2N0eCksIGRnc2hmdCh3aGlybHBvb2wpLCBpdWYocmhhc2hfd2hpcmxwb29sKSwgMCB9LCAvKiA1MTIgYml0ICovCiAJeyAmaW5mb19ybWQxNjAsIHNpemVvZihyaXBlbWQxNjBfY3R4KSwgZGdzaGZ0KHJpcGVtZDE2MCksIGl1ZihyaGFzaF9yaXBlbWQxNjApLCAwIH0sIC8qIDE2MCBiaXQgKi8KLQl7ICZpbmZvX2dvc3QsIHNpemVvZihnb3N0X2N0eCksIGRnc2hmdChnb3N0KSwgaXVmKHJoYXNoX2dvc3QpLCAwIH0sIC8qIDI1NiBiaXQgKi8KLQl7ICZpbmZvX2dvc3Rwcm8sIHNpemVvZihnb3N0X2N0eCksIGRnc2hmdChnb3N0KSwgaW5pKHJoYXNoX2dvc3RfY3J5cHRvcHJvKSwgdXBkKHJoYXNoX2dvc3QpLCBmaW4ocmhhc2hfZ29zdCksIDAgfSwgLyogMjU2IGJpdCAqLworCXsgJmluZm9fZ29zdDk0LCBzaXplb2YoZ29zdDk0X2N0eCksIGRnc2hmdChnb3N0OTQpLCBpdWYocmhhc2hfZ29zdDk0KSwgMCB9LCAvKiAyNTYgYml0ICovCisJeyAmaW5mb19nb3N0OTRwcm8sIHNpemVvZihnb3N0OTRfY3R4KSwgZGdzaGZ0KGdvc3Q5NCksIGl1ZjIocmhhc2hfZ29zdDk0X2NyeXB0b3Bybywgcmhhc2hfZ29zdDk0KSwgMCB9LCAvKiAyNTYgYml0ICovCiAJeyAmaW5mb19oYXMxNjAsIHNpemVvZihoYXMxNjBfY3R4KSwgZGdzaGZ0KGhhczE2MCksIGl1ZihyaGFzaF9oYXMxNjApLCAwIH0sIC8qIDE2MCBiaXQgKi8KLQl7ICZpbmZvX3NuZjEyOCwgc2l6ZW9mKHNuZWZydV9jdHgpLCBkZ3NoZnQoc25lZnJ1KSwgaW5pKHJoYXNoX3NuZWZydTEyOCksIHVwZChyaGFzaF9zbmVmcnUpLCBmaW4ocmhhc2hfc25lZnJ1KSwgMCB9LCAvKiAxMjggYml0ICovCi0JeyAmaW5mb19zbmYyNTYsIHNpemVvZihzbmVmcnVfY3R4KSwgZGdzaGZ0KHNuZWZydSksIGluaShyaGFzaF9zbmVmcnUyNTYpLCB1cGQocmhhc2hfc25lZnJ1KSwgZmluKHJoYXNoX3NuZWZydSksIDAgfSwgLyogMjU2IGJpdCAqLworCXsgJmluZm9fZ29zdDEyXzI1Niwgc2l6ZW9mKGdvc3QxMl9jdHgpLCBkZ3NoZnQyKGdvc3QxMiwgaCkgKyAzMiwgaXVmMihyaGFzaF9nb3N0MTJfMjU2LCByaGFzaF9nb3N0MTIpLCAwIH0sIC8qIDI1NiBiaXQgKi8KKwl7ICZpbmZvX2dvc3QxMl81MTIsIHNpemVvZihnb3N0MTJfY3R4KSwgZGdzaGZ0Mihnb3N0MTIsIGgpLCBpdWYyKHJoYXNoX2dvc3QxMl81MTIsIHJoYXNoX2dvc3QxMiksIDAgfSwgLyogNTEyIGJpdCAqLwogI2VuZGlmCi0JeyAmaW5mb19zaGEyMjQsIHNpemVvZihzaGEyNTZfY3R4KSwgZGdzaGZ0KHNoYTI1NiksIGluaShyaGFzaF9zaGEyMjQpLCB1cGQocmhhc2hfc2hhMjU2KSwgZmluKHJoYXNoX3NoYTI1NiksIDAgfSwgLyogMjI0IGJpdCAqLworCXsgJmluZm9fc2hhMjI0LCBzaXplb2Yoc2hhMjU2X2N0eCksIGRnc2hmdChzaGEyNTYpLCBpdWYyKHJoYXNoX3NoYTIyNCwgcmhhc2hfc2hhMjU2KSwgMCB9LCAvKiAyMjQgYml0ICovCiAJeyAmaW5mb19zaGEyNTYsIHNpemVvZihzaGEyNTZfY3R4KSwgZGdzaGZ0KHNoYTI1NiksIGl1ZihyaGFzaF9zaGEyNTYpLCAwIH0sICAvKiAyNTYgYml0ICovCi0JeyAmaW5mb19zaGEzODQsIHNpemVvZihzaGE1MTJfY3R4KSwgZGdzaGZ0KHNoYTUxMiksIGluaShyaGFzaF9zaGEzODQpLCB1cGQocmhhc2hfc2hhNTEyKSwgZmluKHJoYXNoX3NoYTUxMiksIDAgfSwgLyogMzg0IGJpdCAqLworCXsgJmluZm9fc2hhMzg0LCBzaXplb2Yoc2hhNTEyX2N0eCksIGRnc2hmdChzaGE1MTIpLCBpdWYyKHJoYXNoX3NoYTM4NCwgcmhhc2hfc2hhNTEyKSwgMCB9LCAvKiAzODQgYml0ICovCiAJeyAmaW5mb19zaGE1MTIsIHNpemVvZihzaGE1MTJfY3R4KSwgZGdzaGZ0KHNoYTUxMiksIGl1ZihyaGFzaF9zaGE1MTIpLCAwIH0sICAvKiA1MTIgYml0ICovCiAjaWYgMAotCXsgJmluZm9fZWRyMjU2LCBzaXplb2YoZWRvbnJfY3R4KSwgZGdzaGZ0MihlZG9uciwgdS5kYXRhMjU2Lmhhc2gpICsgMzIsIGl1ZihyaGFzaF9lZG9ucjI1NiksIDAgfSwgIC8qIDI1NiBiaXQgKi8KLQl7ICZpbmZvX2VkcjUxMiwgc2l6ZW9mKGVkb25yX2N0eCksIGRnc2hmdDIoZWRvbnIsIHUuZGF0YTUxMi5oYXNoKSArIDY0LCBpdWYocmhhc2hfZWRvbnI1MTIpLCAwIH0sICAvKiA1MTIgYml0ICovCisJeyAmaW5mb19lZHIyNTYsIHNpemVvZihlZG9ucl9jdHgpLCAgZGdzaGZ0MihlZG9uciwgdS5kYXRhMjU2Lmhhc2gpICsgMzIsIGl1ZihyaGFzaF9lZG9ucjI1NiksIDAgfSwgIC8qIDI1NiBiaXQgKi8KKwl7ICZpbmZvX2VkcjUxMiwgc2l6ZW9mKGVkb25yX2N0eCksICBkZ3NoZnQyKGVkb25yLCB1LmRhdGE1MTIuaGFzaCkgKyA2NCwgaXVmKHJoYXNoX2Vkb25yNTEyKSwgMCB9LCAgLyogNTEyIGJpdCAqLwogI2VuZGlmCi0JeyAmaW5mb19zaGEzXzIyNCwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpbmkocmhhc2hfc2hhM18yMjQpLCB1cGQocmhhc2hfc2hhMyksIGZpbihyaGFzaF9zaGEzKSwgMCB9LCAvKiAyMjQgYml0ICovCi0JeyAmaW5mb19zaGEzXzI1Niwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpbmkocmhhc2hfc2hhM18yNTYpLCB1cGQocmhhc2hfc2hhMyksIGZpbihyaGFzaF9zaGEzKSwgMCB9LCAvKiAyNTYgYml0ICovCi0JeyAmaW5mb19zaGEzXzM4NCwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpbmkocmhhc2hfc2hhM18zODQpLCB1cGQocmhhc2hfc2hhMyksIGZpbihyaGFzaF9zaGEzKSwgMCB9LCAvKiAzODQgYml0ICovCi0JeyAmaW5mb19zaGEzXzUxMiwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpbmkocmhhc2hfc2hhM181MTIpLCB1cGQocmhhc2hfc2hhMyksIGZpbihyaGFzaF9zaGEzKSwgMCB9LCAvKiA1MTIgYml0ICovCisJeyAmaW5mb19zaGEzXzIyNCwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpdWYyKHJoYXNoX3NoYTNfMjI0LCByaGFzaF9zaGEzKSwgMCB9LCAvKiAyMjQgYml0ICovCisJeyAmaW5mb19zaGEzXzI1Niwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpdWYyKHJoYXNoX3NoYTNfMjU2LCByaGFzaF9zaGEzKSwgMCB9LCAvKiAyNTYgYml0ICovCisJeyAmaW5mb19zaGEzXzM4NCwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpdWYyKHJoYXNoX3NoYTNfMzg0LCByaGFzaF9zaGEzKSwgMCB9LCAvKiAzODQgYml0ICovCisJeyAmaW5mb19zaGEzXzUxMiwgc2l6ZW9mKHNoYTNfY3R4KSwgZGdzaGZ0KHNoYTMpLCBpdWYyKHJoYXNoX3NoYTNfNTEyLCByaGFzaF9zaGEzKSwgMCB9LCAvKiA1MTIgYml0ICovCisjaWYgMAorCXsgJmluZm9fY3JjMzJjLCBzaXplb2YodWludDMyX3QpLCAwLCBpdWYocmhhc2hfY3JjMzJjKSwgMCB9LCAvKiAzMiBiaXQgKi8KKwl7ICZpbmZvX3NuZjEyOCwgc2l6ZW9mKHNuZWZydV9jdHgpLCBkZ3NoZnQoc25lZnJ1KSwgaXVmMihyaGFzaF9zbmVmcnUxMjgsIHJoYXNoX3NuZWZydSksIDAgfSwgLyogMTI4IGJpdCAqLworCXsgJmluZm9fc25mMjU2LCBzaXplb2Yoc25lZnJ1X2N0eCksIGRnc2hmdChzbmVmcnUpLCBpdWYyKHJoYXNoX3NuZWZydTI1Niwgcmhhc2hfc25lZnJ1KSwgMCB9LCAvKiAyNTYgYml0ICovCisjZW5kaWYKIH07CiAKIC8qKgogICogSW5pdGlhbGl6ZSByZXF1ZXN0ZWQgYWxnb3JpdGhtcy4KKyAqCisgKiBAcGFyYW0gbWFzayBpZHMgb2YgaGFzaCBzdW1zIHRvIGluaXRpYWxpemUKICAqLwogdm9pZCByaGFzaF9pbml0X2FsZ29yaXRobXModW5zaWduZWQgbWFzaykKIHsKQEAgLTE2NSwxNSArMTc1LDI2IEBACiAJLyogdmVyaWZ5IHRoYXQgUkhBU0hfSEFTSF9DT1VOVCBpcyB0aGUgaW5kZXggb2YgdGhlIG1ham9yIGJpdCBvZiBSSEFTSF9BTExfSEFTSEVTICovCiAJYXNzZXJ0KDEgPT0gKFJIQVNIX0FMTF9IQVNIRVMgPj4gKFJIQVNIX0hBU0hfQ09VTlQgLSAxKSkpOwogCi0jaWZkZWYgR0VORVJBVEVfQ1JDMzJfVEFCTEUKLQlyaGFzaF9jcmMzMl9pbml0X3RhYmxlKCk7Ci0jZW5kaWYKLSNpZmRlZiBHRU5FUkFURV9HT1NUX0xPT0tVUF9UQUJMRQotCXJoYXNoX2dvc3RfaW5pdF90YWJsZSgpOworI2lmZGVmIEdFTkVSQVRFX0dPU1Q5NF9MT09LVVBfVEFCTEUKKwlyaGFzaF9nb3N0OTRfaW5pdF90YWJsZSgpOwogI2VuZGlmCiAJcmhhc2hfdW5pbml0aWFsaXplZF9hbGdvcml0aG1zID0gMDsKIH0KIAorLyoqCisgKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgaGFzaCBmdW5jdGlvbiBieSBpdHMgaGFzaF9pZC4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KKyAqIEByZXR1cm4gcG9pbnRlciB0byB0aGUgcmhhc2hfaW5mbyBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgaW5mb3JtYXRpb24KKyAqLworY29uc3Qgcmhhc2hfaW5mbyogcmhhc2hfaW5mb19ieV9pZCh1bnNpZ25lZCBoYXNoX2lkKQoreworCWhhc2hfaWQgJj0gUkhBU0hfQUxMX0hBU0hFUzsKKwkvKiBjaGVjayB0aGF0IG9uZSBhbmQgb25seSBvbmUgYml0IGlzIHNldCAqLworCWlmICghaGFzaF9pZCB8fCAoaGFzaF9pZCAmIChoYXNoX2lkIC0gMSkpICE9IDApIHJldHVybiBOVUxMOworCXJldHVybiByaGFzaF9pbmZvX3RhYmxlW3JoYXNoX2N0eihoYXNoX2lkKV0uaW5mbzsKK30KKwogI2lmIDAKIC8qIENSQzMyIGhlbHBlciBmdW5jdGlvbnMgKi8KIApAQCAtMjE3LDQgKzIzOCw0NSBAQAogCXJlc3VsdFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgqY3JjMzIgPj4gOCksIHJlc3VsdFszXSA9ICh1bnNpZ25lZCBjaGFyKSgqY3JjMzIpOwogI2VuZGlmCiB9CisKKy8qKgorICogSW5pdGlhbGl6ZSBjcmMzMmMgaGFzaC4KKyAqCisgKiBAcGFyYW0gY3JjMzJjIHBvaW50ZXIgdG8gdGhlIGhhc2ggdG8gaW5pdGlhbGl6ZQorICovCitzdGF0aWMgdm9pZCByaGFzaF9jcmMzMmNfaW5pdCh1aW50MzJfdCogY3JjMzJjKQoreworCSpjcmMzMmMgPSAwOyAvKiBub3RlOiBjb250ZXh0IHNpemUgaXMgc2l6ZW9mKHVpbnQzMl90KSAqLworfQorCisvKioKKyAqIENhbGN1bGF0ZSBtZXNzYWdlIENSQzMyQyBoYXNoLgorICogQ2FuIGJlIGNhbGxlZCByZXBlYXRlZGx5IHdpdGggY2h1bmtzIG9mIHRoZSBtZXNzYWdlIHRvIGJlIGhhc2hlZC4KKyAqCisgKiBAcGFyYW0gY3JjMzJjIHBvaW50ZXIgdG8gdGhlIGhhc2gKKyAqIEBwYXJhbSBtc2cgbWVzc2FnZSBjaHVuaworICogQHBhcmFtIHNpemUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCisgKi8KK3N0YXRpYyB2b2lkIHJoYXNoX2NyYzMyY191cGRhdGUodWludDMyX3QqIGNyYzMyYywgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKK3sKKwkqY3JjMzJjID0gcmhhc2hfZ2V0X2NyYzMyYygqY3JjMzJjLCBtc2csIHNpemUpOworfQorCisvKioKKyAqIFN0b3JlIGNhbGN1bGF0ZWQgaGFzaCBpbnRvIHRoZSBnaXZlbiBhcnJheS4KKyAqCisgKiBAcGFyYW0gY3JjMzJjIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgaGFzaCB2YWx1ZQorICogQHBhcmFtIHJlc3VsdCBjYWxjdWxhdGVkIGhhc2ggaW4gYmluYXJ5IGZvcm0KKyAqLworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX2ZpbmFsKHVpbnQzMl90KiBjcmMzMmMsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKK3sKKyNpZiBkZWZpbmVkKENQVV9JQTMyKSB8fCBkZWZpbmVkKENQVV9YNjQpCisJLyogaW50ZWwgQ1BVcyBzdXBwb3J0IGFzc2lnbWVudCB3aXRoIG5vbiAzMi1iaXQgYWxpZ25lZCBwb2ludGVycyAqLworCSoodW5zaWduZWQqKXJlc3VsdCA9IGJlMm1lXzMyKCpjcmMzMmMpOworI2Vsc2UKKwkvKiBjb3JyZWN0IHNhdmluZyBCaWdFbmRpYW4gaW50ZWdlciBvbiBhbGwgYXJjaHMgKi8KKwlyZXN1bHRbMF0gPSAodW5zaWduZWQgY2hhcikoKmNyYzMyYyA+PiAyNCksIHJlc3VsdFsxXSA9ICh1bnNpZ25lZCBjaGFyKSgqY3JjMzJjID4+IDE2KTsKKwlyZXN1bHRbMl0gPSAodW5zaWduZWQgY2hhcikoKmNyYzMyYyA+PiA4KSwgcmVzdWx0WzNdID0gKHVuc2lnbmVkIGNoYXIpKCpjcmMzMmMpOworI2VuZGlmCit9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuaAppbmRleCA0ZGIyNTE3Li4wMWRkYTg4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9hbGdvcml0aG1zLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5oCkBAIC0yLDkgKzIsOSBAQAogI2lmbmRlZiBSSEFTSF9BTEdPUklUSE1TX0gKICNkZWZpbmUgUkhBU0hfQUxHT1JJVEhNU19ICiAKLSNpbmNsdWRlIDxzdGRkZWYuaD4gLyogZm9yIHB0cmRpZmZfdCAqLwogI2luY2x1ZGUgInJoYXNoLmgiCiAjaW5jbHVkZSAiYnl0ZV9vcmRlci5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMTUsOCArMTUsNDAgQEAKICMgZGVmaW5lIFJIQVNIX0FQSQogI2VuZGlmCiAKKy8qKgorICogQml0IGZsYWc6IGRlZmF1bHQgaGFzaCBvdXRwdXQgZm9ybWF0IGlzIGJhc2UzMi4KKyAqLworI2RlZmluZSBSSEFTSF9JTkZPX0JBU0UzMiAxCisKKy8qKgorICogSW5mb3JtYXRpb24gYWJvdXQgYSBoYXNoIGZ1bmN0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCByaGFzaF9pbmZvCit7CisJLyoqCisJICogSGFzaCBmdW5jdGlvbiBpbmRlbnRpZmllci4KKwkgKi8KKwl1bnNpZ25lZCBoYXNoX2lkOworCS8qKgorCSAqIEZsYWdzIGJpdC1tYXNrLCBpbmNsdWRpbmcgUkhBU0hfSU5GT19CQVNFMzIgYml0LgorCSAqLworCXVuc2lnbmVkIGZsYWdzOworCS8qKgorCSBUaGUgc2l6ZSBvZiBvZiB0aGUgcmF3IG1lc3NhZ2UgZGlnZXN0IGluIGJ5dGVzLgorCSAqLworCXNpemVfdCBkaWdlc3Rfc2l6ZTsKKwkvKioKKwkgKiBUaGUgaGFzaCBmdW5jdGlvbiBuYW1lLgorCSAqLworCWNvbnN0IGNoYXIqIG5hbWU7CisJLyoqCisJICogVGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1lbnRlciBuYW1lIGluIGEgbWFnbmV0IGxpbmsuCisJICovCisJY29uc3QgY2hhciogbWFnbmV0X25hbWU7Cit9IHJoYXNoX2luZm87CisKIHR5cGVkZWYgdm9pZCAoKnBpbml0X3QpKHZvaWQqKTsKLXR5cGVkZWYgdm9pZCAoKnB1cGRhdGVfdCkodm9pZCAqY3R4LCBjb25zdCB2b2lkKiBtc2csIHNpemVfdCBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKnB1cGRhdGVfdCkodm9pZCogY3R4LCBjb25zdCB2b2lkKiBtc2csIHNpemVfdCBzaXplKTsKIHR5cGVkZWYgdm9pZCAoKnBmaW5hbF90KSh2b2lkKiwgdW5zaWduZWQgY2hhciopOwogdHlwZWRlZiB2b2lkICgqcGNsZWFudXBfdCkodm9pZCopOwogCkBAIC0yNSw3ICs1Nyw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHJoYXNoX2hhc2hfaW5mbwogewotCXJoYXNoX2luZm8gKmluZm87CisJcmhhc2hfaW5mbyogaW5mbzsKIAlzaXplX3QgY29udGV4dF9zaXplOwogCXB0cmRpZmZfdCAgZGlnZXN0X2RpZmY7CiAJcGluaXRfdCAgICBpbml0OwpAQCAtNDAsNyArNzIsNyBAQAogdHlwZWRlZiBzdHJ1Y3Qgcmhhc2hfdmVjdG9yX2l0ZW0KIHsKIAlzdHJ1Y3Qgcmhhc2hfaGFzaF9pbmZvKiBoYXNoX2luZm87Ci0Jdm9pZCAqY29udGV4dDsKKwl2b2lkKiBjb250ZXh0OwogfSByaGFzaF92ZWN0b3JfaXRlbTsKIAogLyoqCkBAIC01Miw4ICs4NCw5IEBACiAJdW5zaWduZWQgaGFzaF92ZWN0b3Jfc2l6ZTsgLyogbnVtYmVyIG9mIGNvbnRhaW5lZCBoYXNoIHN1bXMgKi8KIAl1bnNpZ25lZCBmbGFnczsKIAl1bnNpZ25lZCBzdGF0ZTsKLQl2b2lkICpjYWxsYmFjaywgKmNhbGxiYWNrX2RhdGE7Ci0Jdm9pZCAqYnRfY3R4OworCXZvaWQqIGNhbGxiYWNrOworCXZvaWQqIGNhbGxiYWNrX2RhdGE7CisJdm9pZCogYnRfY3R4OwogCXJoYXNoX3ZlY3Rvcl9pdGVtIHZlY3RvclsxXTsgLyogY29udGV4dHMgb2YgY29udGFpbmVkIGhhc2ggc3VtcyAqLwogfSByaGFzaF9jb250ZXh0X2V4dDsKIApAQCAtNjMsNiArOTYsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIHJoYXNoX3VuaW5pdGlhbGl6ZWRfYWxnb3JpdGhtczsKIAogZXh0ZXJuIHJoYXNoX2luZm8gaW5mb19jcmMzMjsKK2V4dGVybiByaGFzaF9pbmZvIGluZm9fY3JjMzJjOwogZXh0ZXJuIHJoYXNoX2luZm8gaW5mb19tZDQ7CiBleHRlcm4gcmhhc2hfaW5mbyBpbmZvX21kNTsKIGV4dGVybiByaGFzaF9pbmZvIGluZm9fc2hhMTsKQEAgLTk1LDcgKzEyOSw3IEBACiAjZGVmaW5lIEZfU1dBUDY0IDQKIAogLyogZGVmaW5lIGVuZGlhbm5lc3MgZmxhZ3MgKi8KLSNpZm5kZWYgQ1BVX0JJR19FTkRJQU4KKyNpZiBJU19MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIEZfTEUzMiAwCiAjZGVmaW5lIEZfTEU2NCAwCiAjZGVmaW5lIEZfQkUzMiBGX1NXQVAzMgpAQCAtMTA4LDYgKzE0Miw3IEBACiAjZW5kaWYKIAogdm9pZCByaGFzaF9pbml0X2FsZ29yaXRobXModW5zaWduZWQgbWFzayk7Citjb25zdCByaGFzaF9pbmZvKiByaGFzaF9pbmZvX2J5X2lkKHVuc2lnbmVkIGhhc2hfaWQpOyAvKiBnZXQgaGFzaCBzdW0gaW5mbyBieSBoYXNoIGlkICovCiAKICNpZiBkZWZpbmVkKE9QRU5TU0xfUlVOVElNRSkgJiYgIWRlZmluZWQoVVNFX09QRU5TU0wpCiAjIGRlZmluZSBVU0VfT1BFTlNTTApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5jCmluZGV4IDhjZTZmYzguLmRlMmM1ODMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2J5dGVfb3JkZXIuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmMKQEAgLTEsMjEgKzEsMjEgQEAKIC8qIGJ5dGVfb3JkZXIuYyAtIGJ5dGUgb3JkZXIgcmVsYXRlZCBwbGF0Zm9ybSBkZXBlbmRlbnQgcm91dGluZXMsCiAgKgotICogQ29weXJpZ2h0OiAyMDA4LTIwMTIgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogI2luY2x1ZGUgImJ5dGVfb3JkZXIuaCIKIAotI2lmICEoX19HTlVDX18gPj0gNCB8fCAoX19HTlVDX18gPT0zICYmIF9fR05VQ19NSU5PUl9fID49IDQpKSAvKiBpZiAhR0NDIG9yIEdDQyA8IDQuMyAqLworI2lmbmRlZiByaGFzaF9jdHoKIAogIyAgaWYgX01TQ19WRVIgPj0gMTMwMCAmJiAoX01fSVg4NiB8fCBfTV9BTUQ2NCB8fCBfTV9JQTY0KSAvKiBpZiBNU1ZDKysgPj0gMjAwMiBvbiB4ODYveDY0ICovCiAjICBpbmNsdWRlIDxpbnRyaW4uaD4KQEAgLTU5LDcgKzU5LDcgQEAKIAlyZXR1cm4gKHVuc2lnbmVkKWJpdF9wb3NbKCh1aW50MzJfdCkoKHggJiAteCkgKiAweDA3N0NCNTMxVSkpID4+IDI3XTsKIH0KICMgIGVuZGlmIC8qIF9NU0NfVkVSID49IDEzMDAuLi4gKi8KLSNlbmRpZiAvKiAhKEdDQyA+PSA0LjMpICovCisjZW5kaWYgLyogcmhhc2hfY3R6ICovCiAKIC8qKgogICogQ29weSBhIG1lbW9yeSBibG9jayB3aXRoIHNpbXVsdGFuZW91cyBleGNoYW5naW5nIGJ5dGUgb3JkZXIuCkBAIC03OSwxMCArNzksMTIgQEAKIAkJY29uc3QgdWludDMyX3QqIHNyYyA9IChjb25zdCB1aW50MzJfdCopZnJvbTsKIAkJY29uc3QgdWludDMyX3QqIGVuZCA9IChjb25zdCB1aW50MzJfdCopKChjb25zdCBjaGFyKilzcmMgKyBsZW5ndGgpOwogCQl1aW50MzJfdCogZHN0ID0gKHVpbnQzMl90KikoKGNoYXIqKXRvICsgaW5kZXgpOwotCQl3aGlsZSAoc3JjIDwgZW5kKSAqKGRzdCsrKSA9IGJzd2FwXzMyKCAqKHNyYysrKSApOworCQlmb3IgKDsgc3JjIDwgZW5kOyBkc3QrKywgc3JjKyspCisJCQkqZHN0ID0gYnN3YXBfMzIoKnNyYyk7CiAJfSBlbHNlIHsKIAkJY29uc3QgY2hhciogc3JjID0gKGNvbnN0IGNoYXIqKWZyb207Ci0JCWZvciAobGVuZ3RoICs9IGluZGV4OyAoc2l6ZV90KWluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSAoKGNoYXIqKXRvKVtpbmRleCBeIDNdID0gKihzcmMrKyk7CisJCWZvciAobGVuZ3RoICs9IGluZGV4OyAoc2l6ZV90KWluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKQorCQkJKChjaGFyKil0bylbaW5kZXggXiAzXSA9ICooc3JjKyspOwogCX0KIH0KIApAQCAtMTQxLDEwICsxNDMsMzEgQEAKICAqIEBwYXJhbSBhcnIgICAgdGhlIGFycmF5IHRvIHByb2Nlc3MKICAqIEBwYXJhbSBsZW5ndGggYXJyYXkgbGVuZ3RoCiAgKi8KLXZvaWQgcmhhc2hfdTMyX21lbV9zd2FwKHVuc2lnbmVkICphcnIsIGludCBsZW5ndGgpCit2b2lkIHJoYXNoX3UzMl9tZW1fc3dhcCh1bnNpZ25lZCogYXJyLCBpbnQgbGVuZ3RoKQogewogCXVuc2lnbmVkKiBlbmQgPSBhcnIgKyBsZW5ndGg7CiAJZm9yICg7IGFyciA8IGVuZDsgYXJyKyspIHsKIAkJKmFyciA9IGJzd2FwXzMyKCphcnIpOwogCX0KIH0KKworI2lmZGVmIEhBU19JTlRFTF9DUFVJRAorI2luY2x1ZGUgPGNwdWlkLmg+CisKK3N0YXRpYyB1aW50NjRfdCBnZXRfY3B1aWRfZmVhdHVyZXModm9pZCkKK3sKKwl1aW50MzJfdCB0bXAsIGVkeCwgZWN4OworCWlmIChfX2dldF9jcHVpZCgxLCAmdG1wLCAmdG1wLCAmZWN4LCAmZWR4KSkKKwkJcmV0dXJuICgoKCh1aW50NjRfdCllY3gpIDw8IDMyKSBeIGVkeCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBoYXNfY3B1X2ZlYXR1cmUodW5zaWduZWQgZmVhdHVyZV9iaXQpCit7CisJc3RhdGljIHVpbnQ2NF90IGZlYXR1cmVzOworCWNvbnN0IHVpbnQ2NF90IGZlYXR1cmUgPSAoKHVpbnQ2NF90KTEpIDw8IGZlYXR1cmVfYml0OworCWlmICghZmVhdHVyZXMpCisJCWZlYXR1cmVzID0gKGdldF9jcHVpZF9mZWF0dXJlcygpIHwgMSk7CisJcmV0dXJuICEhKGZlYXR1cmVzICYgZmVhdHVyZSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2J5dGVfb3JkZXIuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2J5dGVfb3JkZXIuaAppbmRleCBkMzRhMDIwLi5jZmI5ZTI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5oCkBAIC00LDYgKzQsMTkgQEAKICNpbmNsdWRlICJ1c3RkLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKKyNpZiAwCisjaWYgZGVmaW5lZChfX0dMSUJDX18pCisjIGluY2x1ZGUgPGVuZGlhbi5oPgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VsaWYgZGVmaW5lZCAoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykKKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC0yNiw5ICszOSw3IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotCi0vKiBkZXRlY3QgQ1BVIGVuZGlhbm5lc3MgKi8KLSNpbmNsdWRlIDxjbV9rd2ltbC5oPgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvYWJpLmg+CiAjaWYgS1dJTUxfQUJJX0VORElBTl9JRCA9PSBLV0lNTF9BQklfRU5ESUFOX0lEX0xJVFRMRQogIyBkZWZpbmUgQ1BVX0xJVFRMRV9FTkRJQU4KICMgZGVmaW5lIElTX0JJR19FTkRJQU4gMApAQCAtMzcsOCArNDgsNTMgQEAKICMgZGVmaW5lIENQVV9CSUdfRU5ESUFOCiAjIGRlZmluZSBJU19CSUdfRU5ESUFOIDEKICMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gMAorI2VuZGlmCisKKyNpZiAwCisjZGVmaW5lIFJIQVNIX0JZVEVfT1JERVJfTEUgMTIzNAorI2RlZmluZSBSSEFTSF9CWVRFX09SREVSX0JFIDQzMjEKKworI2lmIChkZWZpbmVkKF9fQllURV9PUkRFUikgJiYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pIHx8IFwKKyAgICAoZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgZGVmaW5lZChfX09SREVSX0xJVFRMRV9FTkRJQU5fXykgJiYgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18pCisjICBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0xFCisjZWxpZiAoZGVmaW5lZChfX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX19CSUdfRU5ESUFOKSAmJiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOKSB8fCBcCisgICAgICAoZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgZGVmaW5lZChfX09SREVSX0JJR19FTkRJQU5fXykgJiYgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18pCisjICBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0JFCisjZWxpZiBkZWZpbmVkKF9CWVRFX09SREVSKQorIyAgaWYgZGVmaW5lZChfTElUVExFX0VORElBTikgJiYgKF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOKQorIyAgICBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0xFCisjICBlbGlmIGRlZmluZWQoX0JJR19FTkRJQU4pICYmIChfQllURV9PUkRFUiA9PSBfQklHX0VORElBTikKKyMgICAgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9CRQorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19zdW4pICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pCisjICBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0xFCisjZWxpZiBkZWZpbmVkKF9fc3VuKSAmJiBkZWZpbmVkKF9CSUdfRU5ESUFOKQorIyAgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9CRQorI2VuZGlmCisKKy8qIHRyeSBkZXRlY3RpbmcgZW5kaWFubmVzcyBieSBDUFUgKi8KKyNpZmRlZiBSSEFTSF9CWVRFX09SREVSCisjZWxpZiBkZWZpbmVkKENQVV9JQTMyKSB8fCBkZWZpbmVkKENQVV9YNjQpIHx8IGRlZmluZWQoX19pYTY0KSB8fCBkZWZpbmVkKF9faWE2NF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfTV9BTFBIQSkgfHwgZGVmaW5lZCh2YXgpIHx8IGRlZmluZWQoTUlQU0VMKSB8fCBcCisgICAgICBkZWZpbmVkKF9BUk1fKSB8fCBkZWZpbmVkKF9fYXJtX18pCisjICBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0xFCisjZWxpZiBkZWZpbmVkKF9fc3BhcmMpIHx8IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKHNwYXJjKSB8fCBcCisgICAgICBkZWZpbmVkKF9BUkNIX1BQQykgfHwgZGVmaW5lZChfQVJDSF9QUEM2NCkgfHwgZGVmaW5lZChfUE9XRVIpIHx8IFwKKyAgICAgIGRlZmluZWQoX19QT1dFUlBDX18pIHx8IGRlZmluZWQoUE9XRVJQQykgfHwgZGVmaW5lZChfX3Bvd2VycGMpIHx8IFwKKyAgICAgIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChfX3BwY19fKSB8fCBcCisgICAgICBkZWZpbmVkKF9faHB1eCkgIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChtYzY4MDAwKSB8fCBcCisgICAgICBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykgfHwgZGVmaW5lZChzZWwpCisjIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfQkUKICNlbHNlCi0jIGVycm9yICJDYW4ndCBkZXRlY3QgQ1BVIGFyY2hpdGVjaHR1cmUiCisjICBlcnJvciAiQ2FuJ3QgZGV0ZWN0IENQVSBhcmNoaXRlY2h0dXJlIgorI2VuZGlmCisKKyNkZWZpbmUgSVNfQklHX0VORElBTiAoUkhBU0hfQllURV9PUkRFUiA9PSBSSEFTSF9CWVRFX09SREVSX0JFKQorI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOIChSSEFTSF9CWVRFX09SREVSID09IFJIQVNIX0JZVEVfT1JERVJfTEUpCisjZW5kaWYKKworI2lmbmRlZiBfX2hhc19idWlsdGluCisjIGRlZmluZSBfX2hhc19idWlsdGluKHgpIDAKICNlbmRpZgogCiAjZGVmaW5lIElTX0FMSUdORURfMzIocCkgKDAgPT0gKDMgJiAoKGNvbnN0IGNoYXIqKShwKSAtIChjb25zdCBjaGFyKikwKSkpCkBAIC01NiwxMSArMTEyLDIzIEBACiAjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCiAjZGVmaW5lIEk2NCh4KSB4IyN1aTY0CiAjZWxzZQotI2RlZmluZSBJNjQoeCkgeCMjTEwKKyNkZWZpbmUgSTY0KHgpIHgjI1VMTAogI2VuZGlmCiAKLS8qIGNvbnZlcnQgYSBoYXNoIGZsYWcgdG8gaW5kZXggKi8KLSNpZiBfX0dOVUNfXyA+PSA0IHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDQpIC8qIEdDQyA8IDMuNCAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIFJIQVNIX0lOTElORSBfX2lubGluZQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorI2RlZmluZSBSSEFTSF9JTkxJTkUgaW5saW5lCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBSSEFTSF9JTkxJTkUgX19pbmxpbmVfXworI2Vsc2UKKyNkZWZpbmUgUkhBU0hfSU5MSU5FCisjZW5kaWYKKworLyogZGVmaW5lIHJoYXNoX2N0eiAtIGNvdW50IHRyYWxpbmcgemVybyBiaXRzICovCisjaWYgKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IFwKKyAgICAoZGVmaW5lZChfX2NsYW5nX18pICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2N0eikpCisvKiBHQ0MgPj0gMy40IG9yIGNsYW5nICovCiAjIGRlZmluZSByaGFzaF9jdHooeCkgX19idWlsdGluX2N0eih4KQogI2Vsc2UKIHVuc2lnbmVkIHJoYXNoX2N0eih1bnNpZ25lZCk7IC8qIGRlZmluZSBhcyBmdW5jdGlvbiAqLwpAQCAtNjksNDIgKzEzNywzMSBAQAogdm9pZCByaGFzaF9zd2FwX2NvcHlfc3RyX3RvX3UzMih2b2lkKiB0bywgaW50IGluZGV4LCBjb25zdCB2b2lkKiBmcm9tLCBzaXplX3QgbGVuZ3RoKTsKIHZvaWQgcmhhc2hfc3dhcF9jb3B5X3N0cl90b191NjQodm9pZCogdG8sIGludCBpbmRleCwgY29uc3Qgdm9pZCogZnJvbSwgc2l6ZV90IGxlbmd0aCk7CiB2b2lkIHJoYXNoX3N3YXBfY29weV91NjRfdG9fc3RyKHZvaWQqIHRvLCBjb25zdCB2b2lkKiBmcm9tLCBzaXplX3QgbGVuZ3RoKTsKLXZvaWQgcmhhc2hfdTMyX21lbV9zd2FwKHVuc2lnbmVkICpwLCBpbnQgbGVuZ3RoX2luX3UzMik7Cit2b2lkIHJoYXNoX3UzMl9tZW1fc3dhcCh1bnNpZ25lZCogcCwgaW50IGxlbmd0aF9pbl91MzIpOwogCi0jaWZuZGVmIF9faGFzX2J1aWx0aW4KLSMgZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAotI2VuZGlmCi0KLS8qIGRlZmluZSBic3dhcF8zMiAqLwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoQ1BVX0lBMzIpICYmICFkZWZpbmVkKF9faTM4Nl9fKQotLyogZm9yIGludGVsIHg4NiBDUFUgKi8KLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgYnN3YXBfMzIodWludDMyX3QgeCkgewotCV9fYXNtKCJic3dhcFx0JTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKLQlyZXR1cm4geDsKLX0KLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICAmJiAoX19HTlVDX18gPj0gNCkgJiYgKF9fR05VQ19fID4gNCB8fCBfX0dOVUNfTUlOT1JfXyA+PSAzKQotLyogZm9yIEdDQyA+PSA0LjMgKi8KKy8qIGJzd2FwIGRlZmluaXRpb25zICovCisjaWYgKGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KSAmJiAoX19HTlVDX18gPiA0IHx8IF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCBcCisgICAgKGRlZmluZWQoX19jbGFuZ19fKSAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9ic3dhcDMyKSAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9ic3dhcDY0KSkKKy8qIEdDQyA+PSA0LjMgb3IgY2xhbmcgKi8KICMgZGVmaW5lIGJzd2FwXzMyKHgpIF9fYnVpbHRpbl9ic3dhcDMyKHgpCi0jZWxpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fYnN3YXAzMikKLSMgZGVmaW5lIGJzd2FwXzMyKHgpIF9fYnVpbHRpbl9ic3dhcDMyKHgpCisjIGRlZmluZSBic3dhcF82NCh4KSBfX2J1aWx0aW5fYnN3YXA2NCh4KQogI2VsaWYgKF9NU0NfVkVSID4gMTMwMCkgJiYgKGRlZmluZWQoQ1BVX0lBMzIpIHx8IGRlZmluZWQoQ1BVX1g2NCkpIC8qIE1TIFZDICovCiAjIGRlZmluZSBic3dhcF8zMih4KSBfYnl0ZXN3YXBfdWxvbmcoKHVuc2lnbmVkIGxvbmcpeCkKLSNlbHNlCi0vKiBnZW5lcmFsIGJzd2FwXzMyIGRlZmluaXRpb24gKi8KLXN0YXRpYyB1aW50MzJfdCBic3dhcF8zMih1aW50MzJfdCB4KSB7Ci0JeCA9ICgoeCA8PCA4KSAmIDB4RkYwMEZGMDApIHwgKCh4ID4+IDgpICYgMHgwMEZGMDBGRik7Ci0JcmV0dXJuICh4ID4+IDE2KSB8ICh4IDw8IDE2KTsKLX0KLSNlbmRpZiAvKiBic3dhcF8zMiAqLwotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpICYmIChfX0dOVUNfXyA+IDQgfHwgX19HTlVDX01JTk9SX18gPj0gMykKLSMgZGVmaW5lIGJzd2FwXzY0KHgpIF9fYnVpbHRpbl9ic3dhcDY0KHgpCi0jZWxpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fYnN3YXA2NCkKLSMgZGVmaW5lIGJzd2FwXzY0KHgpIF9fYnVpbHRpbl9ic3dhcDY0KHgpCi0jZWxpZiAoX01TQ19WRVIgPiAxMzAwKSAmJiAoZGVmaW5lZChDUFVfSUEzMikgfHwgZGVmaW5lZChDUFVfWDY0KSkgLyogTVMgVkMgKi8KICMgZGVmaW5lIGJzd2FwXzY0KHgpIF9ieXRlc3dhcF91aW50NjQoKF9faW50NjQpeCkKICNlbHNlCi1zdGF0aWMgdWludDY0X3QgYnN3YXBfNjQodWludDY0X3QgeCkgeworLyogZmFsbGJhY2sgdG8gZ2VuZXJpYyBic3dhcCBkZWZpbml0aW9uICovCitzdGF0aWMgUkhBU0hfSU5MSU5FIHVpbnQzMl90IGJzd2FwXzMyKHVpbnQzMl90IHgpCit7CisjIGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoQ1BVX0lBMzIpICYmICFkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChSSEFTSF9OT19BU00pCisJX19hc20oImJzd2FwXHQlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOyAvKiBnY2MgeDg2IHZlcnNpb24gKi8KKwlyZXR1cm4geDsKKyMgZWxzZQorCXggPSAoKHggPDwgOCkgJiAweEZGMDBGRjAwdSkgfCAoKHggPj4gOCkgJiAweDAwRkYwMEZGdSk7CisJcmV0dXJuICh4ID4+IDE2KSB8ICh4IDw8IDE2KTsKKyMgZW5kaWYKK30KK3N0YXRpYyBSSEFTSF9JTkxJTkUgdWludDY0X3QgYnN3YXBfNjQodWludDY0X3QgeCkKK3sKIAl1bmlvbiB7CiAJCXVpbnQ2NF90IGxsOwogCQl1aW50MzJfdCBsWzJdOwpAQCAtMTE0LDkgKzE3MSw5IEBACiAJci5sWzFdID0gYnN3YXBfMzIody5sWzBdKTsKIAlyZXR1cm4gci5sbDsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIGJzd2FwIGRlZmluaXRpb25zICovCiAKLSNpZmRlZiBDUFVfQklHX0VORElBTgorI2lmIElTX0JJR19FTkRJQU4KICMgZGVmaW5lIGJlMm1lXzMyKHgpICh4KQogIyBkZWZpbmUgYmUybWVfNjQoeCkgKHgpCiAjIGRlZmluZSBsZTJtZV8zMih4KSBic3dhcF8zMih4KQpAQCAtMTI5LDcgKzE4Niw3IEBACiAjIGRlZmluZSBtZTY0X3RvX2JlX3N0cih0bywgZnJvbSwgbGVuZ3RoKSBtZW1jcHkoKHRvKSwgKGZyb20pLCAobGVuZ3RoKSkKICMgZGVmaW5lIG1lNjRfdG9fbGVfc3RyKHRvLCBmcm9tLCBsZW5ndGgpIHJoYXNoX3N3YXBfY29weV91NjRfdG9fc3RyKCh0byksIChmcm9tKSwgKGxlbmd0aCkpCiAKLSNlbHNlIC8qIENQVV9CSUdfRU5ESUFOICovCisjZWxzZSAvKiBJU19CSUdfRU5ESUFOICovCiAjIGRlZmluZSBiZTJtZV8zMih4KSBic3dhcF8zMih4KQogIyBkZWZpbmUgYmUybWVfNjQoeCkgYnN3YXBfNjQoeCkKICMgZGVmaW5lIGxlMm1lXzMyKHgpICh4KQpAQCAtMTQxLDcgKzE5OCw3IEBACiAjIGRlZmluZSBsZTY0X2NvcHkodG8sIGluZGV4LCBmcm9tLCBsZW5ndGgpIG1lbWNweSgodG8pICsgKGluZGV4KSwgKGZyb20pLCAobGVuZ3RoKSkKICMgZGVmaW5lIG1lNjRfdG9fYmVfc3RyKHRvLCBmcm9tLCBsZW5ndGgpIHJoYXNoX3N3YXBfY29weV91NjRfdG9fc3RyKCh0byksIChmcm9tKSwgKGxlbmd0aCkpCiAjIGRlZmluZSBtZTY0X3RvX2xlX3N0cih0bywgZnJvbSwgbGVuZ3RoKSBtZW1jcHkoKHRvKSwgKGZyb20pLCAobGVuZ3RoKSkKLSNlbmRpZiAvKiBDUFVfQklHX0VORElBTiAqLworI2VuZGlmIC8qIElTX0JJR19FTkRJQU4gKi8KIAogLyogUk9UTC9ST1RSIG1hY3JvcyByb3RhdGUgYSAzMi82NC1iaXQgd29yZCBsZWZ0L3JpZ2h0IGJ5IG4gYml0cyAqLwogI2RlZmluZSBST1RMMzIoZHdvcmQsIG4pICgoZHdvcmQpIDw8IChuKSBeICgoZHdvcmQpID4+ICgzMiAtIChuKSkpKQpAQCAtMTQ5LDYgKzIwNiwxNiBAQAogI2RlZmluZSBST1RMNjQocXdvcmQsIG4pICgocXdvcmQpIDw8IChuKSBeICgocXdvcmQpID4+ICg2NCAtIChuKSkpKQogI2RlZmluZSBST1RSNjQocXdvcmQsIG4pICgocXdvcmQpID4+IChuKSBeICgocXdvcmQpIDw8ICg2NCAtIChuKSkpKQogCisjZGVmaW5lIENQVV9GRUFUVVJFX1NTRTRfMiAoNTIpCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDMpKSBcCisJJiYgKGRlZmluZWQoQ1BVX1g2NCkgfHwgZGVmaW5lZChDUFVfSUEzMikpCisjIGRlZmluZSBIQVNfSU5URUxfQ1BVSUQKK2ludCBoYXNfY3B1X2ZlYXR1cmUodW5zaWduZWQgZmVhdHVyZV9iaXQpOworI2Vsc2UKKyMgZGVmaW5lIGhhc19jcHVfZmVhdHVyZSh4KSAoMCkKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gLyogZXh0ZXJuICJDIiAqLwogI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5jCmluZGV4IGM5NDExNDkuLmYwYmJmMDQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5jCkBAIC0xLDcxICsxLDU3IEBACiAvKiBoZXguYyAtIGNvbnZlcnNpb24gZm9yIGhleGFkZWNpbWFsIGFuZCBiYXNlMzIgc3RyaW5ncy4KICAqCi0gKiBDb3B5cmlnaHQ6IDIwMDgtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlICJoZXguaCIKLQotLyoqCi0qIENvbnZlcnQgYSBieXRlIHRvIGEgaGV4YWRlY2ltYWwgbnVtYmVyLiBUaGUgcmVzdWx0LCBjb25zaXN0aW5nIG9mIHR3bwotKiBoZXhhZGVjaW1hbCBkaWdpdHMgaXMgc3RvcmVkIGludG8gYSBidWZmZXIuCi0gKgotICogQHBhcmFtIGRlc3QgIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSB0d28gc3ltYm9scyBvZiBoZXggcmVwcmVzZW50YXRpb24KLSAqIEBwYXJhbSBieXRlIHRoZSBieXRlIHRvIGRlY29kZQotICogQHBhcmFtIHVwcGVyX2Nhc2UgZmxhZyB0byBwcmludCBzdHJpbmcgaW4gdXBwZXJjYXNlCi0gKiBAcmV0dXJuIHBvaW50ZXIgdG8gdGhlIGNoYXJhcmN0ZXIganVzdCBhZnRlciB0aGUgd3JpdHRlbiBudW1iZXIgKGRlc3QgKyAyKQotICovCi1jaGFyKiByaGFzaF9wcmludF9oZXhfYnl0ZShjaGFyICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyIGJ5dGUsIGludCB1cHBlcl9jYXNlKQotewotCWNvbnN0IGNoYXIgYWRkID0gKHVwcGVyX2Nhc2UgPyAnQScgLSAxMCA6ICdhJyAtIDEwKTsKLQl1bnNpZ25lZCBjaGFyIGMgPSAoYnl0ZSA+PiA0KSAmIDE1OwotCSpkZXN0KysgPSAoYyA+IDkgPyBjICsgYWRkIDogYyArICcwJyk7Ci0JYyA9IGJ5dGUgJiAxNTsKLQkqZGVzdCsrID0gKGMgPiA5ID8gYyArIGFkZCA6IGMgKyAnMCcpOwotCXJldHVybiBkZXN0OwotfQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIC8qKgogICogU3RvcmUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBiaW5hcnkgc3RyaW5nIHRvIGdpdmVuIGJ1ZmZlci4KICAqCi0gKiBAcGFyYW0gZGVzdCB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24KKyAqIEBwYXJhbSBkc3QgdGhlIGJ1ZmZlciB0byByZWNlaXZlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uCiAgKiBAcGFyYW0gc3JjIGJpbmFyeSBzdHJpbmcKLSAqIEBwYXJhbSBsZW4gc3RyaW5nIGxlbmd0aAorICogQHBhcmFtIGxlbmd0aCBzdHJpbmcgbGVuZ3RoCiAgKiBAcGFyYW0gdXBwZXJfY2FzZSBmbGFnIHRvIHByaW50IHN0cmluZyBpbiB1cHBlcmNhc2UKICAqLwotdm9pZCByaGFzaF9ieXRlX3RvX2hleChjaGFyICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGxlbiwgaW50IHVwcGVyX2Nhc2UpCit2b2lkIHJoYXNoX2J5dGVfdG9faGV4KGNoYXIqIGRzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoLCBpbnQgdXBwZXJfY2FzZSkKIHsKLQl3aGlsZSAobGVuLS0gPiAwKSB7Ci0JCWRlc3QgPSByaGFzaF9wcmludF9oZXhfYnl0ZShkZXN0LCAqc3JjKyssIHVwcGVyX2Nhc2UpOworCWNvbnN0IGNoYXIgaGV4X2FkZCA9ICh1cHBlcl9jYXNlID8gJ0EnIC0gMTAgOiAnYScgLSAxMCk7CisJZm9yICg7IGxlbmd0aCA+IDA7IHNyYysrLCBsZW5ndGgtLSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyIGhpID0gKCpzcmMgPj4gNCkgJiAxNTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciBsbyA9ICpzcmMgJiAxNTsKKwkJKmRzdCsrID0gKGhpID4gOSA/IGhpICsgaGV4X2FkZCA6IGhpICsgJzAnKTsKKwkJKmRzdCsrID0gKGxvID4gOSA/IGxvICsgaGV4X2FkZCA6IGxvICsgJzAnKTsKIAl9Ci0JKmRlc3QgPSAnXDAnOworCSpkc3QgPSAnXDAnOwogfQogCiAvKioKICAqIEVuY29kZSBhIGJpbmFyeSBzdHJpbmcgdG8gYmFzZTMyLgogICoKLSAqIEBwYXJhbSBkZXN0IHRoZSBidWZmZXIgdG8gc3RvcmUgcmVzdWx0CisgKiBAcGFyYW0gZHN0IHRoZSBidWZmZXIgdG8gc3RvcmUgcmVzdWx0CiAgKiBAcGFyYW0gc3JjIGJpbmFyeSBzdHJpbmcKLSAqIEBwYXJhbSBsZW4gc3RyaW5nIGxlbmd0aAorICogQHBhcmFtIGxlbmd0aCBzdHJpbmcgbGVuZ3RoCiAgKiBAcGFyYW0gdXBwZXJfY2FzZSBmbGFnIHRvIHByaW50IHN0cmluZyBpbiB1cHBlcmNhc2UKICAqLwotdm9pZCByaGFzaF9ieXRlX3RvX2Jhc2UzMihjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHVuc2lnbmVkIGxlbiwgaW50IHVwcGVyX2Nhc2UpCit2b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTMyKGNoYXIqIGRzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoLCBpbnQgdXBwZXJfY2FzZSkKIHsKIAljb25zdCBjaGFyIGEgPSAodXBwZXJfY2FzZSA/ICdBJyA6ICdhJyk7CiAJdW5zaWduZWQgc2hpZnQgPSAwOwogCXVuc2lnbmVkIGNoYXIgd29yZDsKLQljb25zdCB1bnNpZ25lZCBjaGFyKiBlID0gc3JjICsgbGVuOworCWNvbnN0IHVuc2lnbmVkIGNoYXIqIGUgPSBzcmMgKyBsZW5ndGg7CiAJd2hpbGUgKHNyYyA8IGUpIHsKIAkJaWYgKHNoaWZ0ID4gMykgewogCQkJd29yZCA9ICgqc3JjICYgKDB4RkYgPj4gc2hpZnQpKTsKQEAgLTc5LDI1ICs2NSwyNSBAQAogCQkJd29yZCA9ICggKnNyYyA+PiAoICg4IC0gc2hpZnQpICYgNyApICkgJiAweDFGOwogCQkJaWYgKHNoaWZ0ID09IDApIHNyYysrOwogCQl9Ci0JCSpkZXN0KysgPSAoIHdvcmQgPCAyNiA/IHdvcmQgKyBhIDogd29yZCArICcyJyAtIDI2ICk7CisJCSpkc3QrKyA9ICggd29yZCA8IDI2ID8gd29yZCArIGEgOiB3b3JkICsgJzInIC0gMjYgKTsKIAl9Ci0JKmRlc3QgPSAnXDAnOworCSpkc3QgPSAnXDAnOwogfQogCiAvKioKICAqIEVuY29kZSBhIGJpbmFyeSBzdHJpbmcgdG8gYmFzZTY0LgogICogRW5jb2RlZCBvdXRwdXQgbGVuZ3RoIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuCiAgKgotICogQHBhcmFtIGRlc3QgdGhlIGJ1ZmZlciB0byBzdG9yZSByZXN1bHQKKyAqIEBwYXJhbSBkc3QgdGhlIGJ1ZmZlciB0byBzdG9yZSByZXN1bHQKICAqIEBwYXJhbSBzcmMgYmluYXJ5IHN0cmluZwotICogQHBhcmFtIGxlbiBzdHJpbmcgbGVuZ3RoCisgKiBAcGFyYW0gbGVuZ3RoIHN0cmluZyBsZW5ndGgKICAqLwotdm9pZCByaGFzaF9ieXRlX3RvX2Jhc2U2NChjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHVuc2lnbmVkIGxlbikKK3ZvaWQgcmhhc2hfYnl0ZV90b19iYXNlNjQoY2hhciogZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIqIHRhaWwgPSAiMDEyMzQ1Njc4OSsvIjsKIAl1bnNpZ25lZCBzaGlmdCA9IDA7CiAJdW5zaWduZWQgY2hhciB3b3JkOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIqIGUgPSBzcmMgKyBsZW47CisJY29uc3QgdW5zaWduZWQgY2hhciogZSA9IHNyYyArIGxlbmd0aDsKIAl3aGlsZSAoc3JjIDwgZSkgewogCQlpZiAoc2hpZnQgPiAyKSB7CiAJCQl3b3JkID0gKCpzcmMgJiAoMHhGRiA+PiBzaGlmdCkpOwpAQCAtMTExLDQ1ICs5Nyw4MCBAQAogCQkJd29yZCA9ICggKnNyYyA+PiAoICg4IC0gc2hpZnQpICYgNyApICkgJiAweDNGOwogCQkJaWYgKHNoaWZ0ID09IDApIHNyYysrOwogCQl9Ci0JCSpkZXN0KysgPSAoIHdvcmQgPCA1MiA/ICh3b3JkIDwgMjYgPyB3b3JkICsgJ0EnIDogd29yZCAtIDI2ICsgJ2EnKSA6IHRhaWxbd29yZCAtIDUyXSk7CisJCSpkc3QrKyA9ICggd29yZCA8IDUyID8gKHdvcmQgPCAyNiA/IHdvcmQgKyAnQScgOiB3b3JkIC0gMjYgKyAnYScpIDogdGFpbFt3b3JkIC0gNTJdKTsKIAl9CiAJaWYgKHNoaWZ0ID4gMCkgewotCQkqZGVzdCsrID0gJz0nOwotCQlpZiAoc2hpZnQgPT0gNCkgKmRlc3QrKyA9ICc9JzsKKwkJKmRzdCsrID0gJz0nOworCQlpZiAoc2hpZnQgPT0gNCkgKmRzdCsrID0gJz0nOwogCX0KLQkqZGVzdCA9ICdcMCc7CisJKmRzdCA9ICdcMCc7CiB9CiAKLS8qIHVuc2FmZSBjaGFyYWN0ZXJzIGFyZSAiPD57fVtdJSMvfFxefmBAOjs/PSYrICovCi0jZGVmaW5lIElTX0dPT0RfVVJMX0NIQVIoYykgKGlzYWxudW0oKHVuc2lnbmVkIGNoYXIpYykgfHwgc3RyY2hyKCIkLV8uIScoKSwiLCBjKSkKK3NpemVfdCByaGFzaF9iYXNlNjRfdXJsX2VuY29kZWRfaGVscGVyKGNoYXIqIGRzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoLCBpbnQgdXJsX2VuY29kZSwgaW50IHVwcGVyX2Nhc2UpCit7CisjZGVmaW5lIEI2NF9DSFVOS19TSVpFIDEyMAorCWNoYXIgYnVmZmVyWzE2NF07CisJYXNzZXJ0KChCQVNFNjRfTEVOR1RIKEI2NF9DSFVOS19TSVpFKSArIDQpIDw9IHNpemVvZihidWZmZXIpKTsKKwlhc3NlcnQoKEI2NF9DSFVOS19TSVpFICUgNikgPT0gMCk7CisJaWYgKHVybF9lbmNvZGUpIHsKKwkJc2l6ZV90IHJlc3VsdF9sZW5ndGggPSAwOworCQlmb3IgKDsgbGVuZ3RoID4gMDsgc3JjICs9IEI2NF9DSFVOS19TSVpFKSB7CisJCQlzaXplX3QgY2h1bmtfc2l6ZSA9IChsZW5ndGggPCBCNjRfQ0hVTktfU0laRSA/IGxlbmd0aCA6IEI2NF9DSFVOS19TSVpFKTsKKwkJCXNpemVfdCBlbmNvZGVkX2xlbmd0aDsKKwkJCXJoYXNoX2J5dGVfdG9fYmFzZTY0KGJ1ZmZlciwgc3JjLCBjaHVua19zaXplKTsKKwkJCWVuY29kZWRfbGVuZ3RoID0gcmhhc2hfdXJsZW5jb2RlKGRzdCwgYnVmZmVyLCBCQVNFNjRfTEVOR1RIKGNodW5rX3NpemUpLCB1cHBlcl9jYXNlKTsKKwkJCXJlc3VsdF9sZW5ndGggKz0gZW5jb2RlZF9sZW5ndGg7CisJCQlkc3QgKz0gZW5jb2RlZF9sZW5ndGg7CisJCQlsZW5ndGggLT0gY2h1bmtfc2l6ZTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0X2xlbmd0aDsKKwl9CisJcmhhc2hfYnl0ZV90b19iYXNlNjQoZHN0LCBzcmMsIGxlbmd0aCk7CisJcmV0dXJuIEJBU0U2NF9MRU5HVEgobGVuZ3RoKTsKK30KKworLyogUkZDIDM5ODY6IHNhZmUgdXJsIGNoYXJhY3RlcnMgYXJlIGFzY2lpIGFscGhhLW51bWVyaWMgYW5kICItLl9+Iiwgb3RoZXIgY2hhcmFjdGVycyBzaG91bGQgYmUgcGVyY2VudC1lbmNvZGVkICovCitzdGF0aWMgdW5zaWduZWQgdXJsX3NhZmVfY2hhcl9tYXNrWzRdID0geyAwLCAweDAzZmY2MDAwLCAweDg3ZmZmZmZlLCAweDQ3ZmZmZmZlIH07CisjZGVmaW5lIElTX1VSTF9HT09EX0NIQVIoYykgKCh1bnNpZ25lZCkoYykgPCAxMjggJiYgKHVybF9zYWZlX2NoYXJfbWFza1tjID4+IDVdICYgKDEgPDwgKGMgJiAzMSkpKSkKIAogLyoqCi0gKiBVUkwtZW5jb2RlIGEgc3RyaW5nLgorICogVVJMLWVuY29kZSBzcGVjaWZpZWQgYmluYXJ5IHN0cmluZy4KICAqCi0gKiBAcGFyYW0gZHN0IGJ1ZmZlciB0byByZWNlaXZlIHJlc3VsdCBvciBOVUxMIHRvIGNhbGN1bGF0ZQotICogICAgdGhlIGxlbmd0aHMgb2YgZW5jb2RlZCBzdHJpbmcKLSAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgZmlsZSBuYW1lCisgKiBAcGFyYW0gZHN0IChudWxsYWJsZSkgYnVmZmVyIHRvIG91dHB1dCBlbmNvZGVkIHN0cmluZyB0bywKKyAqICAgICAgICAgICAgTlVMTCB0byBqdXN0IGNhbGN1bGF0ZSB0aGUgbGVuZ3RocyBvZiBlbmNvZGVkIHN0cmluZworICogQHBhcmFtIHNyYyBiaW5hcnkgc3RyaW5nIHRvIGVuY29kZQorICogQHBhcmFtIHNpemUgc2l6ZSBvZiB0aGUgYmluYXJ5IHN0cmluZworICogQHBhcmFtIHVwcGVyX2Nhc2UgZmxhZyB0byBvdXRwdXQgaGV4LWNvZGVzIGluIHVwcGVyY2FzZQogICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgc3RyaW5nCiAgKi8KLWludCByaGFzaF91cmxlbmNvZGUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpuYW1lKQorc2l6ZV90IHJoYXNoX3VybGVuY29kZShjaGFyKiBkc3QsIGNvbnN0IGNoYXIqIHNyYywgc2l6ZV90IHNpemUsIGludCB1cHBlcl9jYXNlKQogewotCWNvbnN0IGNoYXIgKnN0YXJ0OworCWNvbnN0IGNoYXIqIHN0YXJ0OworCXNpemVfdCBpOwogCWlmICghZHN0KSB7Ci0JCWludCBsZW47Ci0JCWZvciAobGVuID0gMDsgKm5hbWU7IG5hbWUrKykgbGVuICs9IChJU19HT09EX1VSTF9DSEFSKCpuYW1lKSA/IDEgOiAzKTsKLQkJcmV0dXJuIGxlbjsKLQl9Ci0JLyogZW5jb2RlIFVSTCBhcyBzcGVjaWZpZWQgYnkgUkZDIDE3MzggKi8KLQlmb3IgKHN0YXJ0ID0gZHN0OyAqbmFtZTsgbmFtZSsrKSB7Ci0JCWlmICggSVNfR09PRF9VUkxfQ0hBUigqbmFtZSkgKSB7Ci0JCQkqZHN0KysgPSAqbmFtZTsKLQkJfSBlbHNlIHsKLQkJCSpkc3QrKyA9ICclJzsKLQkJCWRzdCA9IHJoYXNoX3ByaW50X2hleF9ieXRlKGRzdCwgKm5hbWUsICdBJyk7CisJCXNpemVfdCBsZW5ndGggPSBzaXplOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQkJaWYgKCFJU19VUkxfR09PRF9DSEFSKHNyY1tpXSkpCisJCQkJbGVuZ3RoICs9IDI7CisJCXJldHVybiBsZW5ndGg7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciBoZXhfYWRkID0gKHVwcGVyX2Nhc2UgPyAnQScgLSAxMCA6ICdhJyAtIDEwKTsKKwkJc3RhcnQgPSBkc3Q7CisJCS8qIHBlcmNlbnQtZW5jb2RlIGFsbCBidXQgdW5yZXNlcnZlZCBVUkwgY2hhcmFjdGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlpZiAoSVNfVVJMX0dPT0RfQ0hBUihzcmNbaV0pKSB7CisJCQkJKmRzdCsrID0gc3JjW2ldOworCQkJfSBlbHNlIHsKKwkJCQl1bnNpZ25lZCBjaGFyIGhpID0gKCh1bnNpZ25lZCBjaGFyKShzcmNbaV0pID4+IDQpICYgMHgwZjsKKwkJCQl1bnNpZ25lZCBjaGFyIGxvID0gKHVuc2lnbmVkIGNoYXIpKHNyY1tpXSkgJiAweDBmOworCQkJCSpkc3QrKyA9ICclJzsKKwkJCQkqZHN0KysgPSAoaGkgPiA5ID8gaGkgKyBoZXhfYWRkIDogaGkgKyAnMCcpOworCQkJCSpkc3QrKyA9IChsbyA+IDkgPyBsbyArIGhleF9hZGQgOiBsbyArICcwJyk7CisJCQl9CiAJCX0KKwkJKmRzdCA9IDA7CiAJfQotCSpkc3QgPSAwOwotCXJldHVybiAoaW50KShkc3QgLSBzdGFydCk7CisJcmV0dXJuIGRzdCAtIHN0YXJ0OwogfQogCiAvKioKQEAgLTE2MCwxMCArMTgxLDExIEBACiAgKiBAcGFyYW0gbnVtYmVyIHRoZSBudW1iZXIgdG8gcHJpbnQKICAqIEByZXR1cm4gbGVuZ3RoIG9mIHRoZSBwcmludGVkIG51bWJlciAod2l0aG91dCB0cmFpbGluZyAnXDAnKQogICovCi1pbnQgcmhhc2hfc3ByaW50STY0KGNoYXIgKmRzdCwgdWludDY0X3QgbnVtYmVyKQoraW50IHJoYXNoX3NwcmludEk2NChjaGFyKiBkc3QsIHVpbnQ2NF90IG51bWJlcikKIHsKIAkvKiBUaGUgYmlnZ2VzdCBudW1iZXIgaGFzIDIwIGRpZ2l0czogMl42NCA9IDE4IDQ0NiA3NDQgMDczIDcwOSA1NTEgNjE2ICovCi0JY2hhciBidWZbMjRdLCAqcDsKKwljaGFyIGJ1ZlsyNF07CisJY2hhciogcDsKIAlzaXplX3QgbGVuZ3RoOwogCiAJaWYgKGRzdCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9oZXguaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5oCmluZGV4IDJiMzY1ZTIuLjZiZWEwMzYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5oCkBAIC04LDEyICs4LDEzIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi12b2lkIHJoYXNoX2J5dGVfdG9faGV4KGNoYXIgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgbGVuLCBpbnQgdXBwZXJfY2FzZSk7Ci12b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTMyKGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgdW5zaWduZWQgbGVuLCBpbnQgdXBwZXJfY2FzZSk7Ci12b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTY0KGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgdW5zaWduZWQgbGVuKTsKLWNoYXIqIHJoYXNoX3ByaW50X2hleF9ieXRlKGNoYXIgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnl0ZSwgaW50IHVwcGVyX2Nhc2UpOwotaW50ICByaGFzaF91cmxlbmNvZGUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpuYW1lKTsKLWludCAgcmhhc2hfc3ByaW50STY0KGNoYXIgKmRzdCwgdWludDY0X3QgbnVtYmVyKTsKK3ZvaWQgcmhhc2hfYnl0ZV90b19oZXgoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoLCBpbnQgdXBwZXJfY2FzZSk7Cit2b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTMyKGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCwgaW50IHVwcGVyX2Nhc2UpOwordm9pZCByaGFzaF9ieXRlX3RvX2Jhc2U2NChjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgpOworY2hhciogcmhhc2hfcHJpbnRfaGV4X2J5dGUoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciBieXRlLCBpbnQgdXBwZXJfY2FzZSk7CitzaXplX3Qgcmhhc2hfdXJsZW5jb2RlKGNoYXIqIGRzdCwgY29uc3QgY2hhciogc3RyLCBzaXplX3Qgc2l6ZSwgaW50IHVwcGVyX2Nhc2UpOworc2l6ZV90IHJoYXNoX2Jhc2U2NF91cmxfZW5jb2RlZF9oZWxwZXIoY2hhciogZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgsIGludCB1cmxfZW5jb2RlLCBpbnQgdXBwZXJfY2FzZSk7CitpbnQgcmhhc2hfc3ByaW50STY0KGNoYXIqIGRzdCwgdWludDY0X3QgbnVtYmVyKTsKIAogI2RlZmluZSBCQVNFMzJfTEVOR1RIKGJ5dGVzKSAoKChieXRlcykgKiA4ICsgNCkgLyA1KQogI2RlZmluZSBCQVNFNjRfTEVOR1RIKGJ5dGVzKSAoKCgoYnl0ZXMpICsgMikgLyAzKSAqIDQpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5jCmluZGV4IGIyMGRlNDUuLjliNzY4MjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5jCkBAIC0xLDE3ICsxLDE3IEBACiAvKiBtZDUuYyAtIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNRDUgYWxnb3JpdGhtLCBiYXNlZCBvbiBSRkMgMTMyMS4KICAqCi0gKiBDb3B5cmlnaHQ6IDIwMDctMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNywgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTIzLDcgKzIzLDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX21kNV9pbml0KG1kNV9jdHggKmN0eCkKK3ZvaWQgcmhhc2hfbWQ1X2luaXQobWQ1X2N0eCogY3R4KQogewogCWN0eC0+bGVuZ3RoID0gMDsKIApAQCAtMTYyLDcgKzE2Miw3IEBACiAgKiBAcGFyYW0gbXNnIG1lc3NhZ2UgY2h1bmsKICAqIEBwYXJhbSBzaXplIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBjaHVuawogICovCi12b2lkIHJoYXNoX21kNV91cGRhdGUobWQ1X2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQordm9pZCByaGFzaF9tZDVfdXBkYXRlKG1kNV9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbmRleCA9ICh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDYzOwogCWN0eC0+bGVuZ3RoICs9IHNpemU7CkBAIC0yMDUsNyArMjA1LDcgQEAKICAqIEBwYXJhbSBjdHggdGhlIGFsZ29yaXRobSBjb250ZXh0IGNvbnRhaW5pbmcgY3VycmVudCBoYXNoaW5nIHN0YXRlCiAgKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQogICovCi12b2lkIHJoYXNoX21kNV9maW5hbChtZDVfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKK3ZvaWQgcmhhc2hfbWQ1X2ZpbmFsKG1kNV9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCXVuc2lnbmVkIGluZGV4ID0gKCh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDYzKSA+PiAyOwogCXVuc2lnbmVkIHNoaWZ0ID0gKCh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDMpICogODsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmgKaW5kZXggMWFmNmYxMy4uMTJhNmI1MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmgKQEAgLTIwLDkgKzIwLDkgQEAKIAogLyogaGFzaCBmdW5jdGlvbnMgKi8KIAotdm9pZCByaGFzaF9tZDVfaW5pdChtZDVfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9tZDVfdXBkYXRlKG1kNV9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7Ci12b2lkIHJoYXNoX21kNV9maW5hbChtZDVfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzE2XSk7Cit2b2lkIHJoYXNoX21kNV9pbml0KG1kNV9jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX21kNV91cGRhdGUobWQ1X2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKTsKK3ZvaWQgcmhhc2hfbWQ1X2ZpbmFsKG1kNV9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciByZXN1bHRbMTZdKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAiQyIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5jCmluZGV4IDM0ZTFlYjMuLmNlNmFjZTQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guYwpAQCAtMSw0MiArMSw0MCBAQAogLyogcmhhc2guYyAtIGltcGxlbWVudGF0aW9uIG9mIExpYlJIYXNoIGxpYnJhcnkgY2FsbHMKICAqCi0gKiBDb3B5cmlnaHQ6IDIwMDgtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKKy8qIG1vZGlmaWVyIGZvciBXaW5kb3dzIERMTCAqLworI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSkgJiYgZGVmaW5lZChSSEFTSF9FWFBPUlRTKQorIyBkZWZpbmUgUkhBU0hfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisKIC8qIG1hY3JvcyBmb3IgbGFyZ2UgZmlsZSBzdXBwb3J0LCBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGFueSBpbmNsdWRlIGZpbGUgKi8KICNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQogI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAogCiAjaW5jbHVkZSAidXN0ZC5oIiAgIC8qIE5lZWQgdGhpcyBmaXJzdCB3aXRoaW4gQ01ha2UuICAqLwogCi0jaW5jbHVkZSA8c3RyaW5nLmg+IC8qIG1lbXNldCgpICovCi0jaW5jbHVkZSA8c3RkbGliLmg+IC8qIGZyZWUoKSAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBwdHJkaWZmX3QgKi8KLSNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInJoYXNoLmgiCisjaW5jbHVkZSAiYWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgImJ5dGVfb3JkZXIuaCIKKyNpbmNsdWRlICJoZXguaCIKKyNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLQotLyogbW9kaWZpZXIgZm9yIFdpbmRvd3MgRExMICovCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoUkhBU0hfRVhQT1JUUykKLSMgZGVmaW5lIFJIQVNIX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSNlbmRpZgotCi0jaW5jbHVkZSAiYnl0ZV9vcmRlci5oIgotI2luY2x1ZGUgImFsZ29yaXRobXMuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAiaGV4LmgiCi0jaW5jbHVkZSAicmhhc2guaCIgLyogUkhhc2ggbGlicmFyeSBpbnRlcmZhY2UgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2RlZmluZSBTVEFURV9BQ1RJVkUgIDB4YjAxZGJhYmUKICNkZWZpbmUgU1RBVEVfU1RPUEVEICAweGRlYWRiZWVmCkBAIC00NSwxMSArNDMsOCBAQAogI2RlZmluZSBSQ1RYX0ZJTkFMSVpFRCAgMHgyCiAjZGVmaW5lIFJDVFhfRklOQUxJWkVEX01BU0sgKFJDVFhfQVVUT19GSU5BTCB8IFJDVFhfRklOQUxJWkVEKQogI2RlZmluZSBSSFBSX0ZPUk1BVCAoUkhQUl9SQVcgfCBSSFBSX0hFWCB8IFJIUFJfQkFTRTMyIHwgUkhQUl9CQVNFNjQpCi0jZGVmaW5lIFJIUFJfTU9ESUZJRVIgKFJIUFJfVVBQRVJDQVNFIHwgUkhQUl9SRVZFUlNFKQorI2RlZmluZSBSSFBSX01PRElGSUVSIChSSFBSX1VQUEVSQ0FTRSB8IFJIUFJfVVJMRU5DT0RFIHwgUkhQUl9SRVZFUlNFKQogCi0vKioKLSAqIEluaXRpYWxpemUgc3RhdGljIGRhdGEgb2Ygcmhhc2ggYWxnb3JpdGhtcwotICovCiB2b2lkIHJoYXNoX2xpYnJhcnlfaW5pdCh2b2lkKQogewogCXJoYXNoX2luaXRfYWxnb3JpdGhtcyhSSEFTSF9BTExfSEFTSEVTKTsKQEAgLTU4LDMxICs1MywxOCBAQAogI2VuZGlmCiB9CiAKLS8qKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobXMuCi0gKgotICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoIGZ1bmN0aW9ucwotICovCiBpbnQgUkhBU0hfQVBJIHJoYXNoX2NvdW50KHZvaWQpCiB7CiAJcmV0dXJuIHJoYXNoX2luZm9fc2l6ZTsKIH0KIAotLyogTG8tbGV2ZWwgcmhhc2ggbGlicmFyeSBmdW5jdGlvbnMgKi8KKy8qIExPVy1MRVZFTCBMSUJSSEFTSCBJTlRFUkZBQ0UgKi8KIAotLyoqCi0gKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBSSGFzaCBjb250ZXh0IGZvciBjYWxjdWxhdGluZyBoYXNoKGVzKS4KLSAqIEFmdGVyIGluaXRpYWxpemluZyByaGFzaF91cGRhdGUoKS9yaGFzaF9maW5hbCgpIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZC4KLSAqIFRoZW4gdGhlIGNvbnRleHQgbXVzdCBiZSBmcmVlZCBieSBjYWxsaW5nIHJoYXNoX2ZyZWUoKS4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCB1bmlvbiBvZiBiaXQgZmxhZ3MsIGNvbnRhaW5pbmcgaWRzIG9mIGhhc2hlcyB0byBjYWxjdWxhdGUuCi0gKiBAcmV0dXJuIGluaXRpYWxpemVkIHJoYXNoIGNvbnRleHQsIE5VTEwgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAotICovCiBSSEFTSF9BUEkgcmhhc2ggcmhhc2hfaW5pdCh1bnNpZ25lZCBoYXNoX2lkKQogewogCXVuc2lnbmVkIHRhaWxfYml0X2luZGV4OyAvKiBpbmRleCBvZiBoYXNoX2lkIHRyYWlsaW5nIGJpdCAqLwogCXVuc2lnbmVkIG51bSA9IDA7ICAgICAgICAvKiBudW1iZXIgb2YgaGFzaGVzIHRvIGNvbXB1dGUgKi8KLQlyaGFzaF9jb250ZXh0X2V4dCAqcmN0eCA9IE5VTEw7IC8qIGFsbG9jYXRlZCByaGFzaCBjb250ZXh0ICovCisJcmhhc2hfY29udGV4dF9leHQqIHJjdHggPSBOVUxMOyAvKiBhbGxvY2F0ZWQgcmhhc2ggY29udGV4dCAqLwogCXNpemVfdCBoYXNoX3NpemVfc3VtID0gMDsgICAvKiBzaXplIG9mIGhhc2ggY29udGV4dHMgdG8gc3RvcmUgaW4gcmN0eCAqLwogCiAJdW5zaWduZWQgaSwgYml0X2luZGV4LCBpZDsKQEAgLTEyMyw3ICsxMDUsNyBAQAogCX0KIAogCS8qIGFsaWduIHRoZSBzaXplIG9mIHRoZSByaGFzaCBjb250ZXh0IGNvbW1vbiBwYXJ0ICovCi0JYWxpZ25lZF9zaXplID0gKG9mZnNldG9mKHJoYXNoX2NvbnRleHRfZXh0LCB2ZWN0b3JbbnVtXSkgKyA3KSAmIH43OworCWFsaWduZWRfc2l6ZSA9ICgob2Zmc2V0b2Yocmhhc2hfY29udGV4dF9leHQsIHZlY3RvcikgKyBzaXplb2Yocmhhc2hfdmVjdG9yX2l0ZW0pICogbnVtKSArIDcpICYgfjc7CiAJYXNzZXJ0KGFsaWduZWRfc2l6ZSA+PSBzaXplb2Yocmhhc2hfY29udGV4dF9leHQpKTsKIAogCS8qIGFsbG9jYXRlIHJoYXNoIGNvbnRleHQgd2l0aCBlbm91Z2ggbWVtb3J5IHRvIHN0b3JlIGNvbnRleHRzIG9mIGFsbCB1c2VkIGhhc2hlcyAqLwpAQCAtMTcwLDExICsxNTIsNiBAQAogCXJldHVybiAmcmN0eC0+cmM7IC8qIHJldHVybiBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIHJoYXNoIGNvbnRleHQgKi8KIH0KIAotLyoqCi0gKiBGcmVlIFJIYXNoIGNvbnRleHQgbWVtb3J5LgotICoKLSAqIEBwYXJhbSBjdHggdGhlIGNvbnRleHQgdG8gZnJlZS4KLSAqLwogdm9pZCByaGFzaF9mcmVlKHJoYXNoIGN0eCkKIHsKIAlyaGFzaF9jb250ZXh0X2V4dCogY29uc3QgZWN0eCA9IChyaGFzaF9jb250ZXh0X2V4dCopY3R4OwpAQCAtMTk1LDEyICsxNzIsNiBAQAogCWZyZWUoZWN0eCk7CiB9CiAKLS8qKgotICogUmUtaW5pdGlhbGl6ZSBSSGFzaCBjb250ZXh0IHRvIHJldXNlIGl0LgotICogVXNlZnVsIHRvIHNwZWVkIHVwIHByb2Nlc3Npbmcgb2YgbWFueSBzbWFsbCBtZXNzYWdlcy4KLSAqCi0gKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gcmVpbml0aWFsaXplCi0gKi8KIFJIQVNIX0FQSSB2b2lkIHJoYXNoX3Jlc2V0KHJoYXNoIGN0eCkKIHsKIAlyaGFzaF9jb250ZXh0X2V4dCogY29uc3QgZWN0eCA9IChyaGFzaF9jb250ZXh0X2V4dCopY3R4OwpAQCAtMjIzLDE1ICsxOTQsNiBAQAogCWVjdHgtPmZsYWdzICY9IH5SQ1RYX0ZJTkFMSVpFRDsgLyogY2xlYXIgZmluYWxpemVkIHN0YXRlICovCiB9CiAKLS8qKgotICogQ2FsY3VsYXRlIGhhc2hlcyBvZiBtZXNzYWdlLgotICogQ2FuIGJlIGNhbGxlZCByZXBlYXRlZGx5IHdpdGggY2h1bmtzIG9mIHRoZSBtZXNzYWdlIHRvIGJlIGhhc2hlZC4KLSAqCi0gKiBAcGFyYW0gY3R4IHRoZSByaGFzaCBjb250ZXh0Ci0gKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIGNodW5rCi0gKiBAcGFyYW0gbGVuZ3RoIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBjaHVuawotICogQHJldHVybiAwIG9uIHN1Y2Nlc3M7IE9uIGZhaWwgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8KLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF91cGRhdGUocmhhc2ggY3R4LCBjb25zdCB2b2lkKiBtZXNzYWdlLCBzaXplX3QgbGVuZ3RoKQogewogCXJoYXNoX2NvbnRleHRfZXh0KiBjb25zdCBlY3R4ID0gKHJoYXNoX2NvbnRleHRfZXh0KiljdHg7CkBAIC0yNTEsMTMgKzIxMyw2IEBACiAJcmV0dXJuIDA7IC8qIG5vIGVycm9yIHByb2Nlc3NpbmcgYXQgdGhlIG1vbWVudCAqLwogfQogCi0vKioKLSAqIEZpbmFsaXplIGhhc2ggY2FsY3VsYXRpb24gYW5kIG9wdGlvbmFsbHkgc3RvcmUgdGhlIGZpcnN0IGhhc2guCi0gKgotICogQHBhcmFtIGN0eCB0aGUgcmhhc2ggY29udGV4dAotICogQHBhcmFtIGZpcnN0X3Jlc3VsdCBvcHRpb25hbCBidWZmZXIgdG8gc3RvcmUgYSBjYWxjdWxhdGVkIGhhc2ggd2l0aCB0aGUgbG93ZXN0IGF2YWlsYWJsZSBpZAotICogQHJldHVybiAwIG9uIHN1Y2Nlc3M7IE9uIGZhaWwgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8KLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF9maW5hbChyaGFzaCBjdHgsIHVuc2lnbmVkIGNoYXIqIGZpcnN0X3Jlc3VsdCkKIHsKIAl1bnNpZ25lZCBpID0gMDsKQEAgLTI5NSw3ICsyNTAsNyBAQAogewogCXJoYXNoX2NvbnRleHRfZXh0KiBjb25zdCBlY3R4ID0gKHJoYXNoX2NvbnRleHRfZXh0KiljdHg7CiAJdW5zaWduZWQgaTsKLQlyaGFzaF92ZWN0b3JfaXRlbSAqaXRlbTsKKwlyaGFzaF92ZWN0b3JfaXRlbSogaXRlbTsKIAlzdHJ1Y3Qgcmhhc2hfaGFzaF9pbmZvKiBpbmZvOwogCXVuc2lnbmVkIGNoYXIqIGRpZ2VzdDsKIApAQCAtMzMyLDM0ICsyODcsMTQgQEAKIAl9CiB9CiAKLS8qKgotICogU2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJvbSB0aGUKLSAqIHJoYXNoX2ZpbGUoKSBhbmQgcmhhc2hfZmlsZV91cGRhdGUoKSBmdW5jdGlvbnMKLSAqIG9uIHByb2Nlc3NpbmcgZXZlcnkgZmlsZSBibG9jay4gVGhlIGZpbGUgYmxvY2sKLSAqIHNpemUgaXMgc2V0IGludGVybmFsbHkgYnkgcmhhc2ggYW5kIG5vdyBpcyA4IEtpQi4KLSAqCi0gKiBAcGFyYW0gY3R4IHJoYXNoIGNvbnRleHQKLSAqIEBwYXJhbSBjYWxsYmFjayBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgotICogQHBhcmFtIGNhbGxiYWNrX2RhdGEgcG9pbnRlciB0byBkYXRhIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKLSAqLwogUkhBU0hfQVBJIHZvaWQgcmhhc2hfc2V0X2NhbGxiYWNrKHJoYXNoIGN0eCwgcmhhc2hfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCogY2FsbGJhY2tfZGF0YSkKIHsKLQkoKHJoYXNoX2NvbnRleHRfZXh0KiljdHgpLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCSgocmhhc2hfY29udGV4dF9leHQqKWN0eCktPmNhbGxiYWNrID0gKHZvaWQqKWNhbGxiYWNrOwogCSgocmhhc2hfY29udGV4dF9leHQqKWN0eCktPmNhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOwogfQogCisvKiBISUdILUxFVkVMIExJQlJIQVNIIElOVEVSRkFDRSAqLwogCi0vKiBoaS1sZXZlbCBtZXNzYWdlIGhhc2hpbmcgaW50ZXJmYWNlICovCi0KLS8qKgotICogQ29tcHV0ZSBhIGhhc2ggb2YgdGhlIGdpdmVuIG1lc3NhZ2UuCi0gKgotICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgaGFzaCBzdW0gdG8gY29tcHV0ZQotICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UgdG8gcHJvY2VzcwotICogQHBhcmFtIGxlbmd0aCBtZXNzYWdlIGxlbmd0aAotICogQHBhcmFtIHJlc3VsdCBidWZmZXIgdG8gcmVjZWl2ZSBiaW5hcnkgaGFzaCBzdHJpbmcKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX21zZyh1bnNpZ25lZCBoYXNoX2lkLCBjb25zdCB2b2lkKiBtZXNzYWdlLCBzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJcmhhc2ggY3R4OwpAQCAtMzcyLDIyICszMDcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBIYXNoIGEgZmlsZSBvciBzdHJlYW0uIE11bHRpcGxlIGhhc2hlcyBjYW4gYmUgY29tcHV0ZWQuCi0gKiBGaXJzdCwgaW5pbnRpYWxpemUgY3R4IHBhcmFtZXRlciB3aXRoIHJoYXNoX2luaXQoKSBiZWZvcmUgY2FsbGluZwotICogcmhhc2hfZmlsZV91cGRhdGUoKS4gVGhlbiB1c2Ugcmhhc2hfZmluYWwoKSBhbmQgcmhhc2hfcHJpbnQoKQotICogdG8gcmV0cml2ZSBoYXNoIHZhbHVlcy4gRmluYWx5IGNhbGwgcmhhc2hfZnJlZSgpIG9uIGN0eAotICogdG8gZnJlZSBhbGxvY2F0ZWQgbWVtb3J5IG9yIGNhbGwgcmhhc2hfcmVzZXQoKSB0byByZXVzZSBjdHguCi0gKgotICogQHBhcmFtIGN0eCByaGFzaCBjb250ZXh0Ci0gKiBAcGFyYW0gZmQgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBoYXNoCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX2ZpbGVfdXBkYXRlKHJoYXNoIGN0eCwgRklMRSogZmQpCiB7CiAJcmhhc2hfY29udGV4dF9leHQqIGNvbnN0IGVjdHggPSAocmhhc2hfY29udGV4dF9leHQqKWN0eDsKIAljb25zdCBzaXplX3QgYmxvY2tfc2l6ZSA9IDgxOTI7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqcG1lbTsKKwl1bnNpZ25lZCBjaGFyKiBidWZmZXI7CisJdW5zaWduZWQgY2hhciogcG1lbTsKIAlzaXplX3QgbGVuZ3RoID0gMCwgYWxpZ244OwogCWludCByZXMgPSAwOwogCWlmIChlY3R4LT5zdGF0ZSAhPSBTVEFURV9BQ1RJVkUpIHJldHVybiAwOyAvKiBkbyBub3RoaW5nIGlmIGNhbmNlbGVkICovCkBAIC00MjUsMTQgKzM1MCw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotLyoqCi0gKiBDb21wdXRlIGEgc2luZ2xlIGhhc2ggZm9yIGdpdmVuIGZpbGUuCi0gKgotICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgaGFzaCBzdW0gdG8gY29tcHV0ZQotICogQHBhcmFtIGZpbGVwYXRoIHBhdGggdG8gdGhlIGZpbGUgdG8gaGFzaAotICogQHBhcmFtIHJlc3VsdCBidWZmZXIgdG8gcmVjZWl2ZSBoYXNoIHZhbHVlIHdpdGggdGhlIGxvd2VzdCByZXF1ZXN0ZWQgaWQKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0Ci0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfZmlsZSh1bnNpZ25lZCBoYXNoX2lkLCBjb25zdCBjaGFyKiBmaWxlcGF0aCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCUZJTEUqIGZkOwpAQCAtNDQ3LDcgKzM2NCwxMCBAQAogCiAJaWYgKChmZCA9IGZvcGVuKGZpbGVwYXRoLCAicmIiKSkgPT0gTlVMTCkgcmV0dXJuIC0xOwogCi0JaWYgKChjdHggPSByaGFzaF9pbml0KGhhc2hfaWQpKSA9PSBOVUxMKSByZXR1cm4gLTE7CisJaWYgKChjdHggPSByaGFzaF9pbml0KGhhc2hfaWQpKSA9PSBOVUxMKSB7CisJCWZjbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CiAKIAlyZXMgPSByaGFzaF9maWxlX3VwZGF0ZShjdHgsIGZkKTsgLyogaGFzaCB0aGUgZmlsZSAqLwogCWZjbG9zZShmZCk7CkBAIC00NjAsMTQgKzM4MCw2IEBACiAjaWZkZWYgX1dJTjMyIC8qIHdpbmRvd3Mgb25seSBmdW5jdGlvbiAqLwogI2luY2x1ZGUgPHNoYXJlLmg+CiAKLS8qKgotICogQ29tcHV0ZSBhIHNpbmdsZSBoYXNoIGZvciBnaXZlbiBmaWxlLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIGhhc2ggc3VtIHRvIGNvbXB1dGUKLSAqIEBwYXJhbSBmaWxlcGF0aCBwYXRoIHRvIHRoZSBmaWxlIHRvIGhhc2gKLSAqIEBwYXJhbSByZXN1bHQgYnVmZmVyIHRvIHJlY2VpdmUgaGFzaCB2YWx1ZSB3aXRoIHRoZSBsb3dlc3QgcmVxdWVzdGVkIGlkCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IsIC0xIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF93ZmlsZSh1bnNpZ25lZCBoYXNoX2lkLCBjb25zdCB3Y2hhcl90KiBmaWxlcGF0aCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCUZJTEUqIGZkOwpAQCAtNDgyLDcgKzM5NCwxMCBAQAogCiAJaWYgKChmZCA9IF93ZnNvcGVuKGZpbGVwYXRoLCBMInJiIiwgX1NIX0RFTllXUikpID09IE5VTEwpIHJldHVybiAtMTsKIAotCWlmICgoY3R4ID0gcmhhc2hfaW5pdChoYXNoX2lkKSkgPT0gTlVMTCkgcmV0dXJuIC0xOworCWlmICgoY3R4ID0gcmhhc2hfaW5pdChoYXNoX2lkKSkgPT0gTlVMTCkgeworCQlmY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQogCiAJcmVzID0gcmhhc2hfZmlsZV91cGRhdGUoY3R4LCBmZCk7IC8qIGhhc2ggdGhlIGZpbGUgKi8KIAlmY2xvc2UoZmQpOwpAQCAtNDk1LDI4ICs0MTAsNyBAQAogCiAvKiBSSGFzaCBpbmZvcm1hdGlvbiBmdW5jdGlvbnMgKi8KIAotLyoqCi0gKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgaGFzaCBmdW5jdGlvbiBieSBpdHMgaGFzaF9pZC4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KLSAqIEByZXR1cm4gcG9pbnRlciB0byB0aGUgcmhhc2hfaW5mbyBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgaW5mb3JtYXRpb24KLSAqLwotY29uc3Qgcmhhc2hfaW5mbyogcmhhc2hfaW5mb19ieV9pZCh1bnNpZ25lZCBoYXNoX2lkKQotewotCWhhc2hfaWQgJj0gUkhBU0hfQUxMX0hBU0hFUzsKLQkvKiBjaGVjayB0aGF0IG9ubHkgb25lIGJpdCBpcyBzZXQgKi8KLQlpZiAoaGFzaF9pZCAhPSAoaGFzaF9pZCAmIC0oaW50KWhhc2hfaWQpKSByZXR1cm4gTlVMTDsKLQkvKiBub3RlOiBhbHRlcm5hdGl2ZSBjb25kaXRpb24gaXMgKGhhc2hfaWQgPT0gMCB8fCAoaGFzaF9pZCAmIChoYXNoX2lkIC0gMSkpICE9IDApICovCi0JcmV0dXJuIHJoYXNoX2luZm9fdGFibGVbcmhhc2hfY3R6KGhhc2hfaWQpXS5pbmZvOwotfQotCiAjaWYgMAotLyoqCi0gKiBEZXRlY3QgZGVmYXVsdCBkaWdlc3Qgb3V0cHV0IGZvcm1hdCBmb3IgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCi0gKgotICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCi0gKiBAcmV0dXJuIDEgZm9yIGJhc2UzMiBmb3JtYXQsIDAgZm9yIGhleGFkZWNpbWFsCi0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfaXNfYmFzZTMyKHVuc2lnbmVkIGhhc2hfaWQpCiB7CiAJLyogZmFzdCBtZXRob2QgaXMganVzdCB0byB0ZXN0IGEgYml0LW1hc2sgKi8KQEAgLTUyNCwxMiArNDE4LDYgQEAKIH0KICNlbmRpZgogCi0vKioKLSAqIFJldHVybnMgc2l6ZSBvZiBiaW5hcnkgZGlnZXN0IGZvciBnaXZlbiBoYXNoIGFsZ29yaXRobS4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KLSAqIEByZXR1cm4gZGlnZXN0IHNpemUgaW4gYnl0ZXMKLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF9nZXRfZGlnZXN0X3NpemUodW5zaWduZWQgaGFzaF9pZCkKIHsKIAloYXNoX2lkICY9IFJIQVNIX0FMTF9IQVNIRVM7CkBAIC01MzcsMTIgKzQyNSw2IEBACiAJcmV0dXJuIChpbnQpcmhhc2hfaW5mb190YWJsZVtyaGFzaF9jdHooaGFzaF9pZCldLmluZm8tPmRpZ2VzdF9zaXplOwogfQogCi0vKioKLSAqIFJldHVybnMgbGVuZ3RoIG9mIGRpZ2VzdCBoYXNoIHN0cmluZyBpbiBkZWZhdWx0IG91dHB1dCBmb3JtYXQuCi0gKgotICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCi0gKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgaGFzaCBzdHJpbmcKLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF9nZXRfaGFzaF9sZW5ndGgodW5zaWduZWQgaGFzaF9pZCkKIHsKIAljb25zdCByaGFzaF9pbmZvKiBpbmZvID0gcmhhc2hfaW5mb19ieV9pZChoYXNoX2lkKTsKQEAgLTU1MCwyNiArNDMyLDEyIEBACiAJCUJBU0UzMl9MRU5HVEgoaW5mby0+ZGlnZXN0X3NpemUpIDogaW5mby0+ZGlnZXN0X3NpemUgKiAyKSA6IDApOwogfQogCi0vKioKLSAqIFJldHVybnMgYSBuYW1lIG9mIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQotICogQHJldHVybiBhbGdvcml0aG0gbmFtZQotICovCiBSSEFTSF9BUEkgY29uc3QgY2hhciogcmhhc2hfZ2V0X25hbWUodW5zaWduZWQgaGFzaF9pZCkKIHsKIAljb25zdCByaGFzaF9pbmZvKiBpbmZvID0gcmhhc2hfaW5mb19ieV9pZChoYXNoX2lkKTsKIAlyZXR1cm4gKGluZm8gPyBpbmZvLT5uYW1lIDogMCk7CiB9CiAKLS8qKgotICogUmV0dXJucyBhIG5hbWUgcGFydCBvZiBtYWduZXQgdXJuIG9mIHRoZSBnaXZlbiBoYXNoIGFsZ29yaXRobS4KLSAqIFN1Y2ggbWFnbmV0X25hbWUgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIG1hZ25ldCBsaW5rIG9mIHRoZSBmb3JtCi0gKiB1cm46Jmx0O21hZ25ldF9uYW1lJmd0Oz0mbHQ7aGFzaF92YWx1ZSZndDsuCi0gKgotICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCi0gKiBAcmV0dXJuIG5hbWUKLSAqLwogUkhBU0hfQVBJIGNvbnN0IGNoYXIqIHJoYXNoX2dldF9tYWduZXRfbmFtZSh1bnNpZ25lZCBoYXNoX2lkKQogewogCWNvbnN0IHJoYXNoX2luZm8qIGluZm8gPSByaGFzaF9pbmZvX2J5X2lkKGhhc2hfaWQpOwpAQCAtNTk5LDcgKzQ2Nyw3IEBACiAJfQogCiAJaWYgKGZpbGVwYXRoKSB7Ci0JCXNpemUgKz0gNCArIHJoYXNoX3VybGVuY29kZShOVUxMLCBmaWxlcGF0aCk7CisJCXNpemUgKz0gNCArIHJoYXNoX3VybGVuY29kZShOVUxMLCBmaWxlcGF0aCwgc3RybGVuKGZpbGVwYXRoKSwgMCk7CiAJfQogCiAJLyogbG9vcCB0aHJvdWdoIGhhc2ggdmFsdWVzICovCkBAIC02MTAsMzQgKzQ3OCwyMCBAQAogCiAJCXNpemUgKz0gKDcgKyAyKSArIHN0cmxlbihuYW1lKTsKIAkJc2l6ZSArPSByaGFzaF9wcmludChOVUxMLCBjb250ZXh0LCBiaXQsCi0JCQkoYml0ICYgKFJIQVNIX1NIQTEgfCBSSEFTSF9CVElIKSA/IFJIUFJfQkFTRTMyIDogMCkpOworCQkJKGJpdCAmIFJIQVNIX1NIQTEgPyBSSFBSX0JBU0UzMiA6IDApKTsKIAl9CiAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotLyoqCi0gKiBQcmludCBtYWduZXQgbGluayB3aXRoIGdpdmVuIGZpbGVwYXRoIGFuZCBjYWxjdWxhdGVkIGhhc2ggc3VtcyBpbnRvIHRoZQotICogb3V0cHV0IGJ1ZmZlci4gVGhlIGhhc2hfbWFzayBjYW4gbGltaXQgd2hpY2ggaGFzaCB2YWx1ZXMgd2lsbCBiZSBwcmludGVkLgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIHJlcXVpcmVkIGJ1ZmZlci4KLSAqIElmIG91dHB1dCBpcyBOVUxMIHRoZSAuCi0gKgotICogQHBhcmFtIG91dHB1dCBhIHN0cmluZyBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgbWFnbmV0IGxpbmsgb3IgTlVMTAotICogQHBhcmFtIGZpbGVwYXRoIHRoZSBmaWxlIHBhdGggdG8gYmUgcHJpbnRlZCBvciBOVUxMCi0gKiBAcGFyYW0gY29udGV4dCBhbGdvcml0aG1zIHN0YXRlCi0gKiBAcGFyYW0gaGFzaF9tYXNrIGJpdCBtYXNrIG9mIHRoZSBoYXNoIHN1bXMgdG8gYWRkIHRvIHRoZSBsaW5rCi0gKiBAcGFyYW0gZmxhZ3MgICBjYW4gYmUgY29tYmluYXRpb24gb2YgYml0cyBSSFBSX1VQUEVSQ0FTRSwgUkhQUl9OT19NQUdORVQsCi0gKiAgICAgICAgICAgICAgICBSSFBSX0ZJTEVTSVpFCi0gKiBAcmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGNoYXJhY3RlcnMsIGluY2x1ZGluZyB0ZXJtaW5hdGluZyAnXDAnIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbAotICovCiBSSEFTSF9BUEkgc2l6ZV90IHJoYXNoX3ByaW50X21hZ25ldChjaGFyKiBvdXRwdXQsIGNvbnN0IGNoYXIqIGZpbGVwYXRoLAogCXJoYXNoIGNvbnRleHQsIHVuc2lnbmVkIGhhc2hfbWFzaywgaW50IGZsYWdzKQogewogCWludCBpOwogCWNvbnN0IGNoYXIqIGJlZ2luID0gb3V0cHV0OwogCi0JaWYgKG91dHB1dCA9PSBOVUxMKSByZXR1cm4gcmhhc2hfZ2V0X21hZ25ldF91cmxfc2l6ZSgKLQkJZmlsZXBhdGgsIGNvbnRleHQsIGhhc2hfbWFzaywgZmxhZ3MpOworCWlmIChvdXRwdXQgPT0gTlVMTCkKKwkJcmV0dXJuIHJoYXNoX2dldF9tYWduZXRfdXJsX3NpemUoZmlsZXBhdGgsIGNvbnRleHQsIGhhc2hfbWFzaywgZmxhZ3MpOwogCiAJLyogUkhQUl9OT19NQUdORVQsIFJIUFJfRklMRVNJWkUgKi8KIAlpZiAoKGZsYWdzICYgUkhQUl9OT19NQUdORVQpID09IDApIHsKQEAgLTY1MiwxMyArNTA2LDEzIEBACiAJCSoob3V0cHV0KyspID0gJyYnOwogCX0KIAorCWZsYWdzICY9IFJIUFJfVVBQRVJDQVNFOwogCWlmIChmaWxlcGF0aCkgewogCQlzdHJjcHkob3V0cHV0LCAiZG49Iik7CiAJCW91dHB1dCArPSAzOwotCQlvdXRwdXQgKz0gcmhhc2hfdXJsZW5jb2RlKG91dHB1dCwgZmlsZXBhdGgpOworCQlvdXRwdXQgKz0gcmhhc2hfdXJsZW5jb2RlKG91dHB1dCwgZmlsZXBhdGgsIHN0cmxlbihmaWxlcGF0aCksIGZsYWdzKTsKIAkJKihvdXRwdXQrKykgPSAnJic7CiAJfQotCWZsYWdzICY9IFJIUFJfVVBQRVJDQVNFOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQl1bnNpZ25lZCBiaXQ7CkBAIC02NzksNyArNTMzLDcgQEAKIAkJCW91dHB1dCArPSBzdHJsZW4obmFtZSk7CiAJCQkqKG91dHB1dCsrKSA9ICc6JzsKIAkJCW91dHB1dCArPSByaGFzaF9wcmludChvdXRwdXQsIGNvbnRleHQsIGJpdCwKLQkJCQkoYml0ICYgKFJIQVNIX1NIQTEgfCBSSEFTSF9CVElIKSA/IGZsYWdzIHwgUkhQUl9CQVNFMzIgOiBmbGFncykpOworCQkJCShiaXQgJiBSSEFTSF9TSEExID8gZmxhZ3MgfCBSSFBSX0JBU0UzMiA6IGZsYWdzKSk7CiAJCQkqKG91dHB1dCsrKSA9ICcmJzsKIAkJfQogCX0KQEAgLTY4OCw2MiArNTQyLDM5IEBACiAJcmV0dXJuIChvdXRwdXQgLSBiZWdpbik7CiB9CiAKLS8qIGhhc2ggc3VtIG91dHB1dCAqLwogCi0vKioKLSAqIFByaW50IGEgdGV4dCBwcmVzZW50YXRpb24gb2YgYSBnaXZlbiBoYXNoIHN1bSB0byB0aGUgc3BlY2lmaWVkIGJ1ZmZlciwKLSAqCi0gKiBAcGFyYW0gb3V0cHV0IGEgYnVmZmVyIHRvIHByaW50IHRoZSBoYXNoIHRvCi0gKiBAcGFyYW0gYnl0ZXMgYSBoYXNoIHN1bSB0byBwcmludAotICogQHBhcmFtIHNpemUgYSBzaXplIG9mIGhhc2ggc3VtIGluIGJ5dGVzCi0gKiBAcGFyYW0gZmxhZ3MgIGEgYml0LW1hc2sgY29udHJvbGxpbmcgaG93IHRvIGZvcm1hdCB0aGUgaGFzaCBzdW0sCi0gKiAgICAgICAgICAgICAgIGNhbiBiZSBhIG1peCBvZiB0aGUgZmxhZ3M6IFJIUFJfUkFXLCBSSFBSX0hFWCwgUkhQUl9CQVNFMzIsCi0gKiAgICAgICAgICAgICAgIFJIUFJfQkFTRTY0LCBSSFBSX1VQUEVSQ0FTRSwgUkhQUl9SRVZFUlNFCi0gKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBjaGFyYWN0ZXJzCi0gKi8KLXNpemVfdCByaGFzaF9wcmludF9ieXRlcyhjaGFyKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzLAotCXNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCisvKiBIQVNIIFNVTSBPVVRQVVQgSU5URVJGQUNFICovCisKK3NpemVfdCByaGFzaF9wcmludF9ieXRlcyhjaGFyKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewotCXNpemVfdCBzdHJfbGVuOworCXNpemVfdCByZXN1bHRfbGVuZ3RoOwogCWludCB1cHBlcl9jYXNlID0gKGZsYWdzICYgUkhQUl9VUFBFUkNBU0UpOwogCWludCBmb3JtYXQgPSAoZmxhZ3MgJiB+UkhQUl9NT0RJRklFUik7CiAKIAlzd2l0Y2ggKGZvcm1hdCkgewogCWNhc2UgUkhQUl9IRVg6Ci0JCXN0cl9sZW4gPSBzaXplICogMjsKLQkJcmhhc2hfYnl0ZV90b19oZXgob3V0cHV0LCBieXRlcywgKHVuc2lnbmVkKXNpemUsIHVwcGVyX2Nhc2UpOworCQlyZXN1bHRfbGVuZ3RoID0gc2l6ZSAqIDI7CisJCXJoYXNoX2J5dGVfdG9faGV4KG91dHB1dCwgYnl0ZXMsIHNpemUsIHVwcGVyX2Nhc2UpOwogCQlicmVhazsKIAljYXNlIFJIUFJfQkFTRTMyOgotCQlzdHJfbGVuID0gQkFTRTMyX0xFTkdUSChzaXplKTsKLQkJcmhhc2hfYnl0ZV90b19iYXNlMzIob3V0cHV0LCBieXRlcywgKHVuc2lnbmVkKXNpemUsIHVwcGVyX2Nhc2UpOworCQlyZXN1bHRfbGVuZ3RoID0gQkFTRTMyX0xFTkdUSChzaXplKTsKKwkJcmhhc2hfYnl0ZV90b19iYXNlMzIob3V0cHV0LCBieXRlcywgc2l6ZSwgdXBwZXJfY2FzZSk7CiAJCWJyZWFrOwogCWNhc2UgUkhQUl9CQVNFNjQ6Ci0JCXN0cl9sZW4gPSBCQVNFNjRfTEVOR1RIKHNpemUpOwotCQlyaGFzaF9ieXRlX3RvX2Jhc2U2NChvdXRwdXQsIGJ5dGVzLCAodW5zaWduZWQpc2l6ZSk7CisJCXJlc3VsdF9sZW5ndGggPSByaGFzaF9iYXNlNjRfdXJsX2VuY29kZWRfaGVscGVyKG91dHB1dCwgYnl0ZXMsIHNpemUsIChmbGFncyAmIFJIUFJfVVJMRU5DT0RFKSwgdXBwZXJfY2FzZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXN0cl9sZW4gPSBzaXplOwotCQltZW1jcHkob3V0cHV0LCBieXRlcywgc2l6ZSk7CisJCWlmIChmbGFncyAmIFJIUFJfVVJMRU5DT0RFKSB7CisJCQlyZXN1bHRfbGVuZ3RoID0gcmhhc2hfdXJsZW5jb2RlKG91dHB1dCwgKGNoYXIqKWJ5dGVzLCBzaXplLCB1cHBlcl9jYXNlKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShvdXRwdXQsIGJ5dGVzLCBzaXplKTsKKwkJCXJlc3VsdF9sZW5ndGggPSBzaXplOworCQl9CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gc3RyX2xlbjsKKwlyZXR1cm4gcmVzdWx0X2xlbmd0aDsKIH0KIAotLyoqCi0gKiBQcmludCB0ZXh0IHByZXNlbnRhdGlvbiBvZiBhIGhhc2ggc3VtIHdpdGggZ2l2ZW4gaGFzaF9pZCB0byB0aGUgc3BlY2lmaWVkCi0gKiBvdXRwdXQgYnVmZmVyLiBJZiB0aGUgaGFzaF9pZCBpcyB6ZXJvLCB0aGVuIHByaW50IHRoZSBoYXNoIHN1bSB3aXRoCi0gKiB0aGUgbG93ZXN0IGlkIHN0b3JlZCBpbiB0aGUgaGFzaCBjb250ZXh0LgotICogVGhlIGZ1bmN0aW9uIGNhbGwgZmFpbHMgaWYgdGhlIGNvbnRleHQgZG9lc24ndCBpbmNsdWRlIGEgaGFzaCB3aXRoIHRoZQotICogZ2l2ZW4gaGFzaF9pZC4KLSAqCi0gKiBAcGFyYW0gb3V0cHV0IGEgYnVmZmVyIHRvIHByaW50IHRoZSBoYXNoIHRvCi0gKiBAcGFyYW0gY29udGV4dCBhbGdvcml0aG1zIHN0YXRlCi0gKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiB0aGUgaGFzaCBzdW0gdG8gcHJpbnQgb3IgMCB0byBwcmludCB0aGUgZmlyc3QgaGFzaAotICogICAgICAgICAgICAgICAgc2F2ZWQgaW4gdGhlIGNvbnRleHQuCi0gKiBAcGFyYW0gZmxhZ3MgIGEgYml0bWFzayBjb250cm9sbGluZyBob3cgdG8gcHJpbnQgdGhlIGhhc2guIENhbiBjb250YWluIGZsYWdzCi0gKiAgICAgICAgICAgICAgIFJIUFJfVVBQRVJDQVNFLCBSSFBSX0hFWCwgUkhQUl9CQVNFMzIsIFJIUFJfQkFTRTY0LCBldGMuCi0gKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBjaGFyYWN0ZXJzIG9uIHN1Y2Nlc3Mgb3IgMCBvbiBmYWlsCi0gKi8KIHNpemVfdCBSSEFTSF9BUEkgcmhhc2hfcHJpbnQoY2hhciogb3V0cHV0LCByaGFzaCBjb250ZXh0LCB1bnNpZ25lZCBoYXNoX2lkLCBpbnQgZmxhZ3MpCiB7CiAJY29uc3Qgcmhhc2hfaW5mbyogaW5mbzsKQEAgLTc2NCwxNSArNTk1LDE2IEBACiAJfQogCiAJaWYgKG91dHB1dCA9PSBOVUxMKSB7CisJCXNpemVfdCBtdWx0aXBsaWVyID0gKGZsYWdzICYgUkhQUl9VUkxFTkNPREUgPyAzIDogMSk7CiAJCXN3aXRjaCAoZmxhZ3MgJiBSSFBSX0ZPUk1BVCkgewogCQljYXNlIFJIUFJfSEVYOgogCQkJcmV0dXJuIChkaWdlc3Rfc2l6ZSAqIDIpOwogCQljYXNlIFJIUFJfQkFTRTMyOgogCQkJcmV0dXJuIEJBU0UzMl9MRU5HVEgoZGlnZXN0X3NpemUpOwogCQljYXNlIFJIUFJfQkFTRTY0OgotCQkJcmV0dXJuIEJBU0U2NF9MRU5HVEgoZGlnZXN0X3NpemUpOworCQkJcmV0dXJuIEJBU0U2NF9MRU5HVEgoZGlnZXN0X3NpemUpICogbXVsdGlwbGllcjsKIAkJZGVmYXVsdDoKLQkJCXJldHVybiBkaWdlc3Rfc2l6ZTsKKwkJCXJldHVybiBkaWdlc3Rfc2l6ZSAqIG11bHRpcGxpZXI7CiAJCX0KIAl9CiAKQEAgLTc4MSw3ICs2MTMsOCBAQAogCiAJaWYgKChmbGFncyAmIH5SSFBSX1VQUEVSQ0FTRSkgPT0gKFJIUFJfUkVWRVJTRSB8IFJIUFJfSEVYKSkgewogCQkvKiByZXZlcnNlIHRoZSBkaWdlc3QgKi8KLQkJdW5zaWduZWQgY2hhciAqcCA9IGRpZ2VzdCwgKnIgPSBkaWdlc3QgKyBkaWdlc3Rfc2l6ZSAtIDE7CisJCXVuc2lnbmVkIGNoYXIqIHAgPSBkaWdlc3Q7CisJCXVuc2lnbmVkIGNoYXIqIHIgPSBkaWdlc3QgKyBkaWdlc3Rfc2l6ZSAtIDE7CiAJCWNoYXIgdG1wOwogCQlmb3IgKDsgcCA8IHI7IHArKywgci0tKSB7CiAJCQl0bXAgPSAqcDsKQEAgLTc5Myw3ICs2MjYsNyBAQAogCXJldHVybiByaGFzaF9wcmludF9ieXRlcyhvdXRwdXQsIGRpZ2VzdCwgZGlnZXN0X3NpemUsIGZsYWdzKTsKIH0KIAotI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFJIQVNIX0VYUE9SVFMpCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pKSAmJiBkZWZpbmVkKFJIQVNIX0VYUE9SVFMpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogQk9PTCBBUElFTlRSWSBEbGxNYWluKEhNT0RVTEUgaE1vZHVsZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpOwogQk9PTCBBUElFTlRSWSBEbGxNYWluKEhNT0RVTEUgaE1vZHVsZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCkBAIC04MTQsMTcgKzY0Nyw4IEBACiB9CiAjZW5kaWYKIAotI2RlZmluZSBQVk9JRDJVUFRSKHApICgocmhhc2hfdXB0cl90KSgoY2hhciopcCAtIDApKQorI2RlZmluZSBQVk9JRDJVUFRSKHApICgocmhhc2hfdXB0cl90KSgoKGNoYXIqKShwKSkgKyAwKSkKIAotLyoqCi0gKiBQcm9jZXNzIGEgcmhhc2ggbWVzc2FnZS4KLSAqCi0gKiBAcGFyYW0gbXNnX2lkIG1lc3NhZ2UgaWRlbnRpZmllcgotICogQHBhcmFtIGRzdCBtZXNzYWdlIGRlc3RpbmF0aW9uIChjYW4gYmUgTlVMTCBmb3IgZ2VuZXJpYyBtZXNzYWdlcykKLSAqIEBwYXJhbSBsZGF0YSBkYXRhIGRlcGVuZGluZyBvbiBtZXNzYWdlCi0gKiBAcGFyYW0gcmRhdGEgZGF0YSBkZXBlbmRpbmcgb24gbWVzc2FnZQotICogQHJldHVybiBtZXNzYWdlLXNwZWNpZmljIGRhdGEKLSAqLwogUkhBU0hfQVBJIHJoYXNoX3VwdHJfdCByaGFzaF90cmFuc21pdCh1bnNpZ25lZCBtc2dfaWQsIHZvaWQqIGRzdCwgcmhhc2hfdXB0cl90IGxkYXRhLCByaGFzaF91cHRyX3QgcmRhdGEpCiB7CiAJLyogZm9yIG1lc3NhZ2VzIHdvcmtpbmcgd2l0aCByaGFzaCBjb250ZXh0ICovCkBAIC04NjUsNiArNjg5LDEwIEBACiAJY2FzZSBSTVNHX0dFVF9PUEVOU1NMX01BU0s6CiAJCXJldHVybiByaGFzaF9vcGVuc3NsX2hhc2hfbWFzazsKICNlbmRpZgorCWNhc2UgUk1TR19HRVRfT1BFTlNTTF9TVVBQT1JURURfTUFTSzoKKwkJcmV0dXJuIHJoYXNoX2dldF9vcGVuc3NsX3N1cHBvcnRlZF9oYXNoX21hc2soKTsKKwljYXNlIFJNU0dfR0VUX09QRU5TU0xfQVZBSUxBQkxFX01BU0s6CisJCXJldHVybiByaGFzaF9nZXRfb3BlbnNzbF9hdmFpbGFibGVfaGFzaF9tYXNrKCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gUkhBU0hfRVJST1I7IC8qIHVua25vd24gbWVzc2FnZSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmgKaW5kZXggY2VlMGUyNS4uYzAxMTc2MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5oCkBAIC05LDcgKzksOSBAQAogI2VuZGlmCiAKICNpZm5kZWYgUkhBU0hfQVBJCi0vKiBtb2RpZmllciBmb3IgTGliUkhhc2ggZnVuY3Rpb25zICovCisvKioKKyAqIE1vZGlmaWVyIGZvciBMaWJSSGFzaCBmdW5jdGlvbnMKKyAqLwogIyBkZWZpbmUgUkhBU0hfQVBJCiAjZW5kaWYKIApAQCAtMzIsMTEgKzM0LDExIEBACiAJUkhBU0hfQUlDSCAgPSAweDEwMCwKIAlSSEFTSF9XSElSTFBPT0wgPSAweDIwMCwKIAlSSEFTSF9SSVBFTUQxNjAgPSAweDQwMCwKLQlSSEFTSF9HT1NUICAgICAgPSAweDgwMCwKLQlSSEFTSF9HT1NUX0NSWVBUT1BSTyA9IDB4MTAwMCwKLQlSSEFTSF9IQVMxNjAgICAgPSAweDIwMDAsCi0JUkhBU0hfU05FRlJVMTI4ID0gMHg0MDAwLAotCVJIQVNIX1NORUZSVTI1NiA9IDB4ODAwMCwKKwlSSEFTSF9HT1NUOTQgICAgPSAweDgwMCwKKwlSSEFTSF9HT1NUOTRfQ1JZUFRPUFJPID0gMHgxMDAwLAorCVJIQVNIX0hBUzE2MCAgICAgPSAweDIwMDAsCisJUkhBU0hfR09TVDEyXzI1NiA9IDB4NDAwMCwKKwlSSEFTSF9HT1NUMTJfNTEyID0gMHg4MDAwLAogCVJIQVNIX1NIQTIyNCAgICA9IDB4MTAwMDAsCiAJUkhBU0hfU0hBMjU2ICAgID0gMHgyMDAwMCwKIAlSSEFTSF9TSEEzODQgICAgPSAweDQwMDAwLApAQCAtNDcsMTggKzQ5LDI4IEBACiAJUkhBU0hfU0hBM18yNTYgID0gMHgwODAwMDAwLAogCVJIQVNIX1NIQTNfMzg0ICA9IDB4MTAwMDAwMCwKIAlSSEFTSF9TSEEzXzUxMiAgPSAweDIwMDAwMDAsCisJUkhBU0hfQ1JDMzJDICAgID0gMHg0MDAwMDAwLAorCVJIQVNIX1NORUZSVTEyOCA9IDB4ODAwMDAwMCwKKwlSSEFTSF9TTkVGUlUyNTYgPSAweDEwMDAwMDAwLAogCi0JLyoqIFRoZSBiaXQtbWFzayBjb250YWluaW5nIGFsbCBzdXBwb3J0ZWQgaGFzaGUgZnVuY3Rpb25zICovCi0JUkhBU0hfQUxMX0hBU0hFUyA9IFJIQVNIX0NSQzMyIHwgUkhBU0hfTUQ0IHwgUkhBU0hfTUQ1IHwgUkhBU0hfRUQySyB8IFJIQVNIX1NIQTEgfAotCQlSSEFTSF9USUdFUiB8IFJIQVNIX1RUSCB8IFJIQVNIX0dPU1QgfCBSSEFTSF9HT1NUX0NSWVBUT1BSTyB8CisJLyoqCisJICogVGhlIGJpdC1tYXNrIGNvbnRhaW5pbmcgYWxsIHN1cHBvcnRlZCBoYXNoZSBmdW5jdGlvbnMuCisJICovCisJUkhBU0hfQUxMX0hBU0hFUyA9IFJIQVNIX0NSQzMyIHwgUkhBU0hfQ1JDMzJDIHwgUkhBU0hfTUQ0IHwgUkhBU0hfTUQ1IHwKKwkJUkhBU0hfRUQySyB8IFJIQVNIX1NIQTEgfFJIQVNIX1RJR0VSIHwgUkhBU0hfVFRIIHwKKwkJUkhBU0hfR09TVDk0IHwgUkhBU0hfR09TVDk0X0NSWVBUT1BSTyB8IFJIQVNIX0dPU1QxMl8yNTYgfCBSSEFTSF9HT1NUMTJfNTEyIHwKIAkJUkhBU0hfQlRJSCB8IFJIQVNIX0FJQ0ggfCBSSEFTSF9XSElSTFBPT0wgfCBSSEFTSF9SSVBFTUQxNjAgfAogCQlSSEFTSF9IQVMxNjAgfCBSSEFTSF9TTkVGUlUxMjggfCBSSEFTSF9TTkVGUlUyNTYgfAogCQlSSEFTSF9TSEEyMjQgfCBSSEFTSF9TSEEyNTYgfCBSSEFTSF9TSEEzODQgfCBSSEFTSF9TSEE1MTIgfAogCQlSSEFTSF9TSEEzXzIyNCB8IFJIQVNIX1NIQTNfMjU2IHwgUkhBU0hfU0hBM18zODQgfCBSSEFTSF9TSEEzXzUxMiB8CiAJCVJIQVNIX0VET05SMjU2IHwgUkhBU0hfRURPTlI1MTIsCiAKLQkvKiogVGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnMgKi8KLQlSSEFTSF9IQVNIX0NPVU5UID0gMjYKKwlSSEFTSF9HT1NUID0gUkhBU0hfR09TVDk0LCAvKiBkZXByZWNhdGVkIGNvbnN0YW50IG5hbWUgKi8KKwlSSEFTSF9HT1NUX0NSWVBUT1BSTyA9IFJIQVNIX0dPU1Q5NF9DUllQVE9QUk8sIC8qIGRlcHJlY2F0ZWQgY29uc3RhbnQgbmFtZSAqLworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhc2ggZnVuY3Rpb25zLgorCSAqLworCVJIQVNIX0hBU0hfQ09VTlQgPSAyOQogI2Vsc2UKIAlSSEFTSF9NRDUgICAgICAgID0gMHgwMSwKIAlSSEFTSF9TSEExICAgICAgID0gMHgwMiwKQEAgLTg2LDE1ICs5OCwxNyBAQAogfTsKIAogLyoqCi0gKiBUaGUgcmhhc2ggY29udGV4dCBzdHJ1Y3R1cmUgY29udGFpbnMgY29udGV4dHMgZm9yIHNldmVyYWwgaGFzaCBmdW5jdGlvbnMKKyAqIFRoZSByaGFzaCBjb250ZXh0IHN0cnVjdHVyZSBjb250YWlucyBjb250ZXh0cyBmb3Igc2V2ZXJhbCBoYXNoIGZ1bmN0aW9ucy4KICAqLwogdHlwZWRlZiBzdHJ1Y3Qgcmhhc2hfY29udGV4dAogewotCS8qKiBUaGUgc2l6ZSBvZiB0aGUgaGFzaGVkIG1lc3NhZ2UgKi8KKwkvKioKKwkgKiBUaGUgc2l6ZSBvZiB0aGUgaGFzaGVkIG1lc3NhZ2UuCisJICovCiAJdW5zaWduZWQgbG9uZyBsb25nIG1zZ19zaXplOwogCiAJLyoqCi0JICogVGhlIGJpdC1tYXNrIGNvbnRhaW5pbmcgaWRlbnRpZmllcnMgb2YgdGhlIGhhc2hlcyBiZWluZyBjYWxjdWxhdGVkCisJICogVGhlIGJpdC1tYXNrIGNvbnRhaW5pbmcgaWRlbnRpZmllcnMgb2YgdGhlIGhhc2hlcyBiZWluZyBjYWxjdWxhdGVkLgogCSAqLwogCXVuc2lnbmVkIGhhc2hfaWQ7CiB9IHJoYXNoX2NvbnRleHQ7CkBAIC0xMDcsMTA5ICsxMjEsMjg1IEBACiB0eXBlZGVmIHN0cnVjdCByaGFzaF9jb250ZXh0KiByaGFzaDsKICNlbmRpZiAvKiBMSUJSSEFTSF9SSEFTSF9DVFhfREVGSU5FRCAqLwogCi0vKiogdHlwZSBvZiBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgd2hpbGUgaGFzaGluZyBhIGZpbGUgKi8KKy8qKgorICogVHlwZSBvZiBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgd2hpbGUgaGFzaGluZyBhIGZpbGUuCisgKi8KIHR5cGVkZWYgdm9pZCAoKnJoYXNoX2NhbGxiYWNrX3QpKHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQpOwogCi1SSEFTSF9BUEkgdm9pZCByaGFzaF9saWJyYXJ5X2luaXQodm9pZCk7IC8qIGluaXRpYWxpemUgc3RhdGljIGRhdGEgKi8KKy8qKgorICogSW5pdGlhbGl6ZSBzdGF0aWMgZGF0YSBvZiByaGFzaCBhbGdvcml0aG1zCisgKi8KK1JIQVNIX0FQSSB2b2lkIHJoYXNoX2xpYnJhcnlfaW5pdCh2b2lkKTsKIAotLyogaGktbGV2ZWwgaGFzaGluZyBmdW5jdGlvbnMgKi8KKworLyogSElHSC1MRVZFTCBMSUJSSEFTSCBJTlRFUkZBQ0UgKi8KKworLyoqCisgKiBDb21wdXRlIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gbWVzc2FnZS4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiBoYXNoIHN1bSB0byBjb21wdXRlCisgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZSB0byBwcm9jZXNzCisgKiBAcGFyYW0gbGVuZ3RoIG1lc3NhZ2UgbGVuZ3RoCisgKiBAcGFyYW0gcmVzdWx0IGJ1ZmZlciB0byByZWNlaXZlIGJpbmFyeSBoYXNoIHN0cmluZworICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisgKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfbXNnKHVuc2lnbmVkIGhhc2hfaWQsIGNvbnN0IHZvaWQqIG1lc3NhZ2UsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7Ci1SSEFTSF9BUEkgaW50IHJoYXNoX2ZpbGUodW5zaWduZWQgaGFzaF9pZCwgY29uc3QgY2hhciogZmlsZXBhdGgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7Ci1SSEFTSF9BUEkgaW50IHJoYXNoX2ZpbGVfdXBkYXRlKHJoYXNoIGN0eCwgRklMRSogZmQpOwogCi0jaWZkZWYgX1dJTjMyIC8qIHdpbmRvd3Mgb25seSBmdW5jdGlvbiAqLworLyoqCisgKiBDb21wdXRlIGEgc2luZ2xlIGhhc2ggZm9yIGdpdmVuIGZpbGUuCisgKgorICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgaGFzaCBzdW0gdG8gY29tcHV0ZQorICogQHBhcmFtIGZpbGVwYXRoIHBhdGggdG8gdGhlIGZpbGUgdG8gaGFzaAorICogQHBhcmFtIHJlc3VsdCBidWZmZXIgdG8gcmVjZWl2ZSBoYXNoIHZhbHVlIHdpdGggdGhlIGxvd2VzdCByZXF1ZXN0ZWQgaWQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0CisgKi8KK1JIQVNIX0FQSSBpbnQgcmhhc2hfZmlsZSh1bnNpZ25lZCBoYXNoX2lkLCBjb25zdCBjaGFyKiBmaWxlcGF0aCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKKworI2lmZGVmIF9XSU4zMgorLyoqCisgKiBDb21wdXRlIGEgc2luZ2xlIGhhc2ggZm9yIGdpdmVuIGZpbGUgKFdpbmRvd3Mtc3BlY2lmaWMgZnVuY3Rpb24pLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIGhhc2ggc3VtIHRvIGNvbXB1dGUKKyAqIEBwYXJhbSBmaWxlcGF0aCBwYXRoIHRvIHRoZSBmaWxlIHRvIGhhc2gKKyAqIEBwYXJhbSByZXN1bHQgYnVmZmVyIHRvIHJlY2VpdmUgaGFzaCB2YWx1ZSB3aXRoIHRoZSBsb3dlc3QgcmVxdWVzdGVkIGlkCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IsIC0xIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKKyAqLwogUkhBU0hfQVBJIGludCByaGFzaF93ZmlsZSh1bnNpZ25lZCBoYXNoX2lkLCBjb25zdCB3Y2hhcl90KiBmaWxlcGF0aCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKICNlbmRpZgogCi0vKiBsby1sZXZlbCBpbnRlcmZhY2UgKi8KLVJIQVNIX0FQSSByaGFzaCByaGFzaF9pbml0KHVuc2lnbmVkIGhhc2hfaWQpOwotLypSSEFTSF9BUEkgcmhhc2ggcmhhc2hfaW5pdF9ieV9pZHModW5zaWduZWQgaGFzaF9pZHNbXSwgdW5zaWduZWQgY291bnQpOyovCi1SSEFTSF9BUEkgaW50ICByaGFzaF91cGRhdGUocmhhc2ggY3R4LCBjb25zdCB2b2lkKiBtZXNzYWdlLCBzaXplX3QgbGVuZ3RoKTsKLVJIQVNIX0FQSSBpbnQgIHJoYXNoX2ZpbmFsKHJoYXNoIGN0eCwgdW5zaWduZWQgY2hhciogZmlyc3RfcmVzdWx0KTsKLVJIQVNIX0FQSSB2b2lkIHJoYXNoX3Jlc2V0KHJoYXNoIGN0eCk7IC8qIHJlaW5pdGlhbGl6ZSB0aGUgY29udGV4dCAqLwotUkhBU0hfQVBJIHZvaWQgcmhhc2hfZnJlZShyaGFzaCBjdHgpOwogCi0vKiBhZGRpdGlvbmFsIGxvLWxldmVsIGZ1bmN0aW9ucyAqLwotUkhBU0hfQVBJIHZvaWQgIHJoYXNoX3NldF9jYWxsYmFjayhyaGFzaCBjdHgsIHJoYXNoX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQqIGNhbGxiYWNrX2RhdGEpOwotCi0vKiogYml0LWZsYWc6IGRlZmF1bHQgaGFzaCBvdXRwdXQgZm9ybWF0IGlzIGJhc2UzMiAqLwotI2RlZmluZSBSSEFTSF9JTkZPX0JBU0UzMiAxCisvKiBMT1ctTEVWRUwgTElCUkhBU0ggSU5URVJGQUNFICovCiAKIC8qKgotICogSW5mb3JtYXRpb24gYWJvdXQgYSBoYXNoIGZ1bmN0aW9uLgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgUkhhc2ggY29udGV4dCBmb3IgY2FsY3VsYXRpbmcgaGFzaChlcykuCisgKiBBZnRlciBpbml0aWFsaXppbmcgcmhhc2hfdXBkYXRlKCkvcmhhc2hfZmluYWwoKSBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQuCisgKiBUaGVuIHRoZSBjb250ZXh0IG11c3QgYmUgZnJlZWQgYnkgY2FsbGluZyByaGFzaF9mcmVlKCkuCisgKgorICogQHBhcmFtIGhhc2hfaWQgdW5pb24gb2YgYml0IGZsYWdzLCBjb250YWluaW5nIGlkcyBvZiBoYXNoZXMgdG8gY2FsY3VsYXRlLgorICogQHJldHVybiBpbml0aWFsaXplZCByaGFzaCBjb250ZXh0LCBOVUxMIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKICAqLwotdHlwZWRlZiBzdHJ1Y3Qgcmhhc2hfaW5mbwotewotCS8qKiBoYXNoIGZ1bmN0aW9uIGluZGVudGlmaWVyICovCi0JdW5zaWduZWQgaGFzaF9pZDsKLQkvKiogZmxhZ3MgYml0LW1hc2ssIGluY2x1ZGluZyBSSEFTSF9JTkZPX0JBU0UzMiBiaXQgKi8KLQl1bnNpZ25lZCBmbGFnczsKLQkvKiogc2l6ZSBvZiBiaW5hcnkgbWVzc2FnZSBkaWdlc3QgaW4gYnl0ZXMgKi8KLQlzaXplX3QgZGlnZXN0X3NpemU7Ci0JY29uc3QgY2hhciogbmFtZTsKLQljb25zdCBjaGFyKiBtYWduZXRfbmFtZTsKLX0gcmhhc2hfaW5mbzsKK1JIQVNIX0FQSSByaGFzaCByaGFzaF9pbml0KHVuc2lnbmVkIGhhc2hfaWQpOwogCi0vKiBpbmZvcm1hdGlvbiBmdW5jdGlvbnMgKi8KKy8qKgorICogQ2FsY3VsYXRlIGhhc2hlcyBvZiBtZXNzYWdlLgorICogQ2FuIGJlIGNhbGxlZCByZXBlYXRlZGx5IHdpdGggY2h1bmtzIG9mIHRoZSBtZXNzYWdlIHRvIGJlIGhhc2hlZC4KKyAqCisgKiBAcGFyYW0gY3R4IHRoZSByaGFzaCBjb250ZXh0CisgKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIGNodW5rCisgKiBAcGFyYW0gbGVuZ3RoIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBjaHVuaworICogQHJldHVybiAwIG9uIHN1Y2Nlc3M7IE9uIGZhaWwgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8KKyAqLworUkhBU0hfQVBJIGludCByaGFzaF91cGRhdGUocmhhc2ggY3R4LCBjb25zdCB2b2lkKiBtZXNzYWdlLCBzaXplX3QgbGVuZ3RoKTsKKworLyoqCisgKiBIYXNoIGEgZmlsZSBvciBzdHJlYW0uIE11bHRpcGxlIGhhc2hlcyBjYW4gYmUgY29tcHV0ZWQuCisgKiBGaXJzdCwgaW5pbnRpYWxpemUgY3R4IHBhcmFtZXRlciB3aXRoIHJoYXNoX2luaXQoKSBiZWZvcmUgY2FsbGluZworICogcmhhc2hfZmlsZV91cGRhdGUoKS4gVGhlbiB1c2Ugcmhhc2hfZmluYWwoKSBhbmQgcmhhc2hfcHJpbnQoKQorICogdG8gcmV0cml2ZSBoYXNoIHZhbHVlcy4gRmluYWx5IGNhbGwgcmhhc2hfZnJlZSgpIG9uIGN0eAorICogdG8gZnJlZSBhbGxvY2F0ZWQgbWVtb3J5IG9yIGNhbGwgcmhhc2hfcmVzZXQoKSB0byByZXVzZSBjdHguCisgKgorICogQHBhcmFtIGN0eCByaGFzaCBjb250ZXh0CisgKiBAcGFyYW0gZmQgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBoYXNoCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAorICovCitSSEFTSF9BUEkgaW50IHJoYXNoX2ZpbGVfdXBkYXRlKHJoYXNoIGN0eCwgRklMRSogZmQpOworCisvKioKKyAqIEZpbmFsaXplIGhhc2ggY2FsY3VsYXRpb24gYW5kIG9wdGlvbmFsbHkgc3RvcmUgdGhlIGZpcnN0IGhhc2guCisgKgorICogQHBhcmFtIGN0eCB0aGUgcmhhc2ggY29udGV4dAorICogQHBhcmFtIGZpcnN0X3Jlc3VsdCBvcHRpb25hbCBidWZmZXIgdG8gc3RvcmUgYSBjYWxjdWxhdGVkIGhhc2ggd2l0aCB0aGUgbG93ZXN0IGF2YWlsYWJsZSBpZAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3M7IE9uIGZhaWwgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8KKyAqLworUkhBU0hfQVBJIGludCByaGFzaF9maW5hbChyaGFzaCBjdHgsIHVuc2lnbmVkIGNoYXIqIGZpcnN0X3Jlc3VsdCk7CisKKy8qKgorICogUmUtaW5pdGlhbGl6ZSBSSGFzaCBjb250ZXh0IHRvIHJldXNlIGl0LgorICogVXNlZnVsIHRvIHNwZWVkIHVwIHByb2Nlc3Npbmcgb2YgbWFueSBzbWFsbCBtZXNzYWdlcy4KKyAqCisgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gcmVpbml0aWFsaXplCisgKi8KK1JIQVNIX0FQSSB2b2lkIHJoYXNoX3Jlc2V0KHJoYXNoIGN0eCk7CisKKy8qKgorICogRnJlZSBSSGFzaCBjb250ZXh0IG1lbW9yeS4KKyAqCisgKiBAcGFyYW0gY3R4IHRoZSBjb250ZXh0IHRvIGZyZWUuCisgKi8KK1JIQVNIX0FQSSB2b2lkIHJoYXNoX2ZyZWUocmhhc2ggY3R4KTsKKworLyoqCisgKiBTZXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmcm9tIHRoZQorICogcmhhc2hfZmlsZSgpIGFuZCByaGFzaF9maWxlX3VwZGF0ZSgpIGZ1bmN0aW9ucworICogb24gcHJvY2Vzc2luZyBldmVyeSBmaWxlIGJsb2NrLiBUaGUgZmlsZSBibG9jaworICogc2l6ZSBpcyBzZXQgaW50ZXJuYWxseSBieSByaGFzaCBhbmQgbm93IGlzIDggS2lCLgorICoKKyAqIEBwYXJhbSBjdHggcmhhc2ggY29udGV4dAorICogQHBhcmFtIGNhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAcGFyYW0gY2FsbGJhY2tfZGF0YSBwb2ludGVyIHRvIGRhdGEgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICovCitSSEFTSF9BUEkgdm9pZCAgcmhhc2hfc2V0X2NhbGxiYWNrKHJoYXNoIGN0eCwgcmhhc2hfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCogY2FsbGJhY2tfZGF0YSk7CisKKworLyogSU5GT1JNQVRJT04gRlVOQ1RJT05TICovCisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobXMuCisgKgorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoIGZ1bmN0aW9ucworICovCiBSSEFTSF9BUEkgaW50ICByaGFzaF9jb3VudCh2b2lkKTsgLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoZXMgKi8KKworLyoqCisgKiBSZXR1cm5zIHNpemUgb2YgYmluYXJ5IGRpZ2VzdCBmb3IgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCisgKgorICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCisgKiBAcmV0dXJuIGRpZ2VzdCBzaXplIGluIGJ5dGVzCisgKi8KIFJIQVNIX0FQSSBpbnQgIHJoYXNoX2dldF9kaWdlc3Rfc2l6ZSh1bnNpZ25lZCBoYXNoX2lkKTsgLyogc2l6ZSBvZiBiaW5hcnkgbWVzc2FnZSBkaWdlc3QgKi8KKworLyoqCisgKiBSZXR1cm5zIGxlbmd0aCBvZiBkaWdlc3QgaGFzaCBzdHJpbmcgaW4gZGVmYXVsdCBvdXRwdXQgZm9ybWF0LgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQorICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIGhhc2ggc3RyaW5nCisgKi8KIFJIQVNIX0FQSSBpbnQgIHJoYXNoX2dldF9oYXNoX2xlbmd0aCh1bnNpZ25lZCBoYXNoX2lkKTsgLyogbGVuZ3RoIG9mIGZvcm1hdHRlZCBoYXNoIHN0cmluZyAqLworCisvKioKKyAqIERldGVjdCBkZWZhdWx0IGRpZ2VzdCBvdXRwdXQgZm9ybWF0IGZvciBnaXZlbiBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KKyAqIEByZXR1cm4gMSBmb3IgYmFzZTMyIGZvcm1hdCwgMCBmb3IgaGV4YWRlY2ltYWwKKyAqLwogUkhBU0hfQVBJIGludCAgcmhhc2hfaXNfYmFzZTMyKHVuc2lnbmVkIGhhc2hfaWQpOyAvKiBkZWZhdWx0IGRpZ2VzdCBvdXRwdXQgZm9ybWF0ICovCisKKy8qKgorICogUmV0dXJucyBhIG5hbWUgb2YgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCisgKgorICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCisgKiBAcmV0dXJuIGFsZ29yaXRobSBuYW1lCisgKi8KIFJIQVNIX0FQSSBjb25zdCBjaGFyKiByaGFzaF9nZXRfbmFtZSh1bnNpZ25lZCBoYXNoX2lkKTsgLyogZ2V0IGhhc2ggZnVuY3Rpb24gbmFtZSAqLworCisvKioKKyAqIFJldHVybnMgYSBuYW1lIHBhcnQgb2YgbWFnbmV0IHVybiBvZiB0aGUgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCisgKiBTdWNoIG1hZ25ldF9uYW1lIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBtYWduZXQgbGluayBvZiB0aGUgZm9ybQorICogdXJuOiZsdDttYWduZXRfbmFtZSZndDs9Jmx0O2hhc2hfdmFsdWUmZ3Q7LgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQorICogQHJldHVybiBuYW1lCisgKi8KIFJIQVNIX0FQSSBjb25zdCBjaGFyKiByaGFzaF9nZXRfbWFnbmV0X25hbWUodW5zaWduZWQgaGFzaF9pZCk7IC8qIGdldCBuYW1lIHBhcnQgb2YgbWFnbmV0IHVybiAqLwogCi0vKiBub3RlLCB0aGF0IHJoYXNoX2luZm9fYnlfaWQoKSBpcyBub3QgZXhwb3J0ZWQgdG8gYSBzaGFyZWQgbGlicmFyeSBvciBETEwgKi8KLWNvbnN0IHJoYXNoX2luZm8qIHJoYXNoX2luZm9fYnlfaWQodW5zaWduZWQgaGFzaF9pZCk7IC8qIGdldCBoYXNoIHN1bSBpbmZvIGJ5IGhhc2ggaWQgKi8KKy8qIEhBU0ggU1VNIE9VVFBVVCBJTlRFUkZBQ0UgKi8KIAogI2lmIDAKIC8qKgotICogRmxhZ3MgZm9yIHByaW50aW5nIGEgaGFzaCBzdW0KKyAqIEZsYWdzIGZvciBwcmludGluZyBhIGhhc2ggc3VtLgogICovCiBlbnVtIHJoYXNoX3ByaW50X3N1bV9mbGFncwogewotCS8qKiBwcmludCBpbiBhIGRlZmF1bHQgZm9ybWF0ICovCisJLyoKKwkgKiBQcmludCBpbiBhIGRlZmF1bHQgZm9ybWF0CisJICovCiAJUkhQUl9ERUZBVUxUICAgPSAweDAsCi0JLyoqIG91dHB1dCBhcyBiaW5hcnkgbWVzc2FnZSBkaWdlc3QgKi8KKwkvKgorCSAqIE91dHB1dCBhcyBiaW5hcnkgbWVzc2FnZSBkaWdlc3QKKwkgKi8KIAlSSFBSX1JBVyAgICAgICA9IDB4MSwKLQkvKiogcHJpbnQgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgKi8KKwkvKgorCSAqIFByaW50IGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nCisJICovCiAJUkhQUl9IRVggICAgICAgPSAweDIsCi0JLyoqIHByaW50IGFzIGEgYmFzZTMyLWVuY29kZWQgc3RyaW5nICovCisJLyoKKwkgKiBQcmludCBhcyBhIGJhc2UzMi1lbmNvZGVkIHN0cmluZworCSAqLwogCVJIUFJfQkFTRTMyICAgID0gMHgzLAotCS8qKiBwcmludCBhcyBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZyAqLworCS8qCisJICogUHJpbnQgYXMgYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcKKwkgKi8KIAlSSFBSX0JBU0U2NCAgICA9IDB4NCwKLQotCS8qKgorCS8qCiAJICogUHJpbnQgYXMgYW4gdXBwZXJjYXNlIHN0cmluZy4gQ2FuIGJlIHVzZWQKIAkgKiBmb3IgYmFzZTMyIG9yIGhleGFkZWNpbWFsIGZvcm1hdCBvbmx5LgogCSAqLwogCVJIUFJfVVBQRVJDQVNFID0gMHg4LAotCi0JLyoqCisJLyoKIAkgKiBSZXZlcnNlIGhhc2ggYnl0ZXMuIENhbiBiZSB1c2VkIGZvciBHT1NUIGhhc2guCiAJICovCiAJUkhQUl9SRVZFUlNFICAgPSAweDEwLAotCi0JLyoqIGRvbid0IHByaW50ICdtYWduZXQ6PycgcHJlZml4IGluIHJoYXNoX3ByaW50X21hZ25ldCAqLworCS8qCisJICogRG9uJ3QgcHJpbnQgJ21hZ25ldDo/JyBwcmVmaXggaW4gcmhhc2hfcHJpbnRfbWFnbmV0CisJICovCiAJUkhQUl9OT19NQUdORVQgID0gMHgyMCwKLQkvKiogcHJpbnQgZmlsZSBzaXplIGluIHJoYXNoX3ByaW50X21hZ25ldCAqLworCS8qCisJICogUHJpbnQgZmlsZSBzaXplIGluIHJoYXNoX3ByaW50X21hZ25ldAorCSAqLwogCVJIUFJfRklMRVNJWkUgID0gMHg0MCwKKwkvKgorCSAqIFByaW50IGFzIFVSTC1lbmNvZGVkIHN0cmluZworCSAqLworCVJIUFJfVVJMRU5DT0RFICA9IDB4ODAKIH07CiAjZW5kaWYKIAotLyogb3V0cHV0IGhhc2ggaW50byB0aGUgZ2l2ZW4gYnVmZmVyICovCisKKy8qKgorICogUHJpbnQgYSB0ZXh0IHByZXNlbnRhdGlvbiBvZiBhIGdpdmVuIGhhc2ggc3VtIHRvIHRoZSBzcGVjaWZpZWQgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBvdXRwdXQgYSBidWZmZXIgdG8gcHJpbnQgdGhlIGhhc2ggdG8KKyAqIEBwYXJhbSBieXRlcyBhIGhhc2ggc3VtIHRvIHByaW50CisgKiBAcGFyYW0gc2l6ZSBhIHNpemUgb2YgaGFzaCBzdW0gaW4gYnl0ZXMKKyAqIEBwYXJhbSBmbGFncyAgYSBiaXQtbWFzayBjb250cm9sbGluZyBob3cgdG8gZm9ybWF0IHRoZSBoYXNoIHN1bSwKKyAqICAgICAgICAgICAgICAgY2FuIGJlIGEgbWl4IG9mIHRoZSBmbGFnczogUkhQUl9SQVcsIFJIUFJfSEVYLCBSSFBSX0JBU0UzMiwKKyAqICAgICAgICAgICAgICAgUkhQUl9CQVNFNjQsIFJIUFJfVVJMRU5DT0RFLCBSSFBSX1VQUEVSQ0FTRSwgUkhQUl9SRVZFUlNFCisgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBjaGFyYWN0ZXJzCisgKi8KIFJIQVNIX0FQSSBzaXplX3Qgcmhhc2hfcHJpbnRfYnl0ZXMoY2hhciogb3V0cHV0LAogCWNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIAorLyoqCisgKiBQcmludCB0ZXh0IHByZXNlbnRhdGlvbiBvZiBhIGhhc2ggc3VtIHdpdGggZ2l2ZW4gaGFzaF9pZCB0byB0aGUgc3BlY2lmaWVkCisgKiBvdXRwdXQgYnVmZmVyLiBJZiB0aGUgaGFzaF9pZCBpcyB6ZXJvLCB0aGVuIHByaW50IHRoZSBoYXNoIHN1bSB3aXRoCisgKiB0aGUgbG93ZXN0IGlkIHN0b3JlZCBpbiB0aGUgaGFzaCBjb250ZXh0LgorICogVGhlIGZ1bmN0aW9uIGNhbGwgZmFpbHMgaWYgdGhlIGNvbnRleHQgZG9lc24ndCBpbmNsdWRlIGEgaGFzaCB3aXRoIHRoZQorICogZ2l2ZW4gaGFzaF9pZC4KKyAqCisgKiBAcGFyYW0gb3V0cHV0IGEgYnVmZmVyIHRvIHByaW50IHRoZSBoYXNoIHRvCisgKiBAcGFyYW0gY3R4ICAgIGFsZ29yaXRobXMgc3RhdGUKKyAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIHRoZSBoYXNoIHN1bSB0byBwcmludCBvciAwIHRvIHByaW50IHRoZSBmaXJzdCBoYXNoCisgKiAgICAgICAgICAgICAgICBzYXZlZCBpbiB0aGUgY29udGV4dC4KKyAqIEBwYXJhbSBmbGFncyAgYSBiaXRtYXNrIGNvbnRyb2xsaW5nIGhvdyB0byBwcmludCB0aGUgaGFzaC4gQ2FuIGNvbnRhaW4gZmxhZ3MKKyAqICAgICAgICAgICAgICAgUkhQUl9VUFBFUkNBU0UsIFJIUFJfSEVYLCBSSFBSX0JBU0UzMiwgUkhQUl9CQVNFNjQsIGV0Yy4KKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiB3cml0dGVuIGNoYXJhY3RlcnMgb24gc3VjY2VzcyBvciAwIG9uIGZhaWwKKyAqLwogUkhBU0hfQVBJIHNpemVfdCByaGFzaF9wcmludChjaGFyKiBvdXRwdXQsIHJoYXNoIGN0eCwgdW5zaWduZWQgaGFzaF9pZCwKIAlpbnQgZmxhZ3MpOwogCi0vKiBvdXRwdXQgbWFnbmV0IFVSTCBpbnRvIHRoZSBnaXZlbiBidWZmZXIgKi8KKy8qKgorICogUHJpbnQgbWFnbmV0IGxpbmsgd2l0aCBnaXZlbiBmaWxlcGF0aCBhbmQgY2FsY3VsYXRlZCBoYXNoIHN1bXMgaW50byB0aGUKKyAqIG91dHB1dCBidWZmZXIuIFRoZSBoYXNoX21hc2sgY2FuIGxpbWl0IHdoaWNoIGhhc2ggdmFsdWVzIHdpbGwgYmUgcHJpbnRlZC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBidWZmZXIuCisgKiBJZiBvdXRwdXQgaXMgTlVMTCB0aGUgLgorICoKKyAqIEBwYXJhbSBvdXRwdXQgYSBzdHJpbmcgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIG1hZ25ldCBsaW5rIG9yIE5VTEwKKyAqIEBwYXJhbSBmaWxlcGF0aCB0aGUgZmlsZSBwYXRoIHRvIGJlIHByaW50ZWQgb3IgTlVMTAorICogQHBhcmFtIGNvbnRleHQgYWxnb3JpdGhtcyBzdGF0ZQorICogQHBhcmFtIGhhc2hfbWFzayBiaXQgbWFzayBvZiB0aGUgaGFzaCBzdW1zIHRvIGFkZCB0byB0aGUgbGluaworICogQHBhcmFtIGZsYWdzICAgY2FuIGJlIGNvbWJpbmF0aW9uIG9mIGJpdHMgUkhQUl9VUFBFUkNBU0UsIFJIUFJfTk9fTUFHTkVULAorICogICAgICAgICAgICAgICAgUkhQUl9GSUxFU0laRQorICogQHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgdGVybWluYXRpbmcgJ1wwJyBvbiBzdWNjZXNzLCAwIG9uIGZhaWwKKyAqLwogUkhBU0hfQVBJIHNpemVfdCByaGFzaF9wcmludF9tYWduZXQoY2hhciogb3V0cHV0LCBjb25zdCBjaGFyKiBmaWxlcGF0aCwKIAlyaGFzaCBjb250ZXh0LCB1bnNpZ25lZCBoYXNoX21hc2ssIGludCBmbGFncyk7CiAKLS8qIG1hY3JvcyBmb3IgbWVzc2FnZSBBUEkgKi8KIAotLyoqIFRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyICovCisvKiBNRVNTQUdFIEFQSSAqLworCisvKioKKyAqIFRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyLgorICovCiAjaWYgZGVmaW5lZChVSU5UUFRSX01BWCkKIHR5cGVkZWYgdWludHB0cl90IHJoYXNoX3VwdHJfdDsKICNlbGlmIGRlZmluZWQoX0xQNjQpIHx8IGRlZmluZWQoX19MUDY0X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IFwKQEAgLTIxOSwxNCArNDA5LDI4IEBACiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcmhhc2hfdXB0cl90OwogI2VuZGlmCiAKLS8qKiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgcmhhc2hfdHJhbnNtaXQgb24gZXJyb3IgKi8KKy8qKgorICogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHJoYXNoX3RyYW5zbWl0IG9uIGVycm9yLgorICovCiAjZGVmaW5lIFJIQVNIX0VSUk9SICgocmhhc2hfdXB0cl90KS0xKQotLyoqIENvbnZlcnQgYSBwb2ludGVyIHRvIHJoYXNoX3VwdHJfdCAqLworLyoqCisgKiBDb252ZXJ0IGEgcG9pbnRlciB0byByaGFzaF91cHRyX3QuCisgKi8KICNkZWZpbmUgUkhBU0hfU1RSMlVQVFIoc3RyKSAoKHJoYXNoX3VwdHJfdCkoY2hhciopKHN0cikpCi0vKiogQ29udmVydCBhIHJoYXNoX3VwdHJfdCB0byBhIHZvaWQqIHBvaW50ZXIgKi8KLSNkZWZpbmUgUkhBU0hfVVBUUjJQVk9JRCh1KSAoKHZvaWQqKSgoY2hhciopMCArICh1KSkpCisvKioKKyAqIENvbnZlcnQgYSByaGFzaF91cHRyX3QgdG8gYSB2b2lkKiBwb2ludGVyLgorICovCisjZGVmaW5lIFJIQVNIX1VQVFIyUFZPSUQodSkgKCh2b2lkKikoKHUpICsgMCkpCiAKLS8qIHJoYXNoIEFQSSB0byBzZXQvZ2V0IGRhdGEgdmlhIG1lc3NhZ2VzICovCisvKioKKyAqIFByb2Nlc3MgYSByaGFzaCBtZXNzYWdlLgorICoKKyAqIEBwYXJhbSBtc2dfaWQgbWVzc2FnZSBpZGVudGlmaWVyCisgKiBAcGFyYW0gZHN0IG1lc3NhZ2UgZGVzdGluYXRpb24gKGNhbiBiZSBOVUxMIGZvciBnZW5lcmljIG1lc3NhZ2VzKQorICogQHBhcmFtIGxkYXRhIGRhdGEgZGVwZW5kaW5nIG9uIG1lc3NhZ2UKKyAqIEBwYXJhbSByZGF0YSBkYXRhIGRlcGVuZGluZyBvbiBtZXNzYWdlCisgKiBAcmV0dXJuIG1lc3NhZ2Utc3BlY2lmaWMgZGF0YQorICovCiBSSEFTSF9BUEkgcmhhc2hfdXB0cl90IHJoYXNoX3RyYW5zbWl0KAogCXVuc2lnbmVkIG1zZ19pZCwgdm9pZCogZHN0LCByaGFzaF91cHRyX3QgbGRhdGEsIHJoYXNoX3VwdHJfdCByZGF0YSk7CiAKQEAgLTIzOSwyMiArNDQzLDMyIEBACiAjZGVmaW5lIFJNU0dfU0VUX0FVVE9GSU5BTCA1CiAjZGVmaW5lIFJNU0dfU0VUX09QRU5TU0xfTUFTSyAxMAogI2RlZmluZSBSTVNHX0dFVF9PUEVOU1NMX01BU0sgMTEKKyNkZWZpbmUgUk1TR19HRVRfT1BFTlNTTF9TVVBQT1JURURfTUFTSyAxMgorI2RlZmluZSBSTVNHX0dFVF9PUEVOU1NMX0FWQUlMQUJMRV9NQVNLIDEzCiAKLS8qIGhlbHBlciBtYWNyb3MgKi8KKy8qIEhFTFBFUiBNQUNST1MgKi8KIAotLyoqIEdldCBhIHBvaW50ZXIgdG8gY29udGV4dCBvZiB0aGUgc3BlY2lmaWVkIGhhc2ggZnVuY3Rpb24gKi8KKy8qKgorICogR2V0IGEgcG9pbnRlciB0byBjb250ZXh0IG9mIHRoZSBzcGVjaWZpZWQgaGFzaCBmdW5jdGlvbi4KKyAqLwogI2RlZmluZSByaGFzaF9nZXRfY29udGV4dF9wdHIoY3R4LCBoYXNoX2lkKSBSSEFTSF9VUFRSMlBWT0lEKHJoYXNoX3RyYW5zbWl0KFJNU0dfR0VUX0NPTlRFWFQsIGN0eCwgaGFzaF9pZCwgMCkpCi0vKiogQ2FuY2VsIGhhc2ggY2FsY3VsYXRpb24gb2YgYSBmaWxlICovCisvKioKKyAqIENhbmNlbCBoYXNoIGNhbGN1bGF0aW9uIG9mIGEgZmlsZS4KKyAqLwogI2RlZmluZSByaGFzaF9jYW5jZWwoY3R4KSByaGFzaF90cmFuc21pdChSTVNHX0NBTkNFTCwgY3R4LCAwLCAwKQotLyoqIFJldHVybiBub24temVybyBpZiBoYXNoIGNhbGN1bGF0aW9uIHdhcyBjYW5jZWxlZCwgemVybyBvdGhlcndpc2UgKi8KKy8qKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIGhhc2ggY2FsY3VsYXRpb24gd2FzIGNhbmNlbGVkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLwogI2RlZmluZSByaGFzaF9pc19jYW5jZWxlZChjdHgpIHJoYXNoX3RyYW5zbWl0KFJNU0dfSVNfQ0FOQ0VMRUQsIGN0eCwgMCwgMCkKLS8qKiBSZXR1cm4gbm9uLXplcm8gaWYgcmhhc2hfZmluYWwgd2FzIGNhbGxlZCBmb3Igcmhhc2hfY29udGV4dCAqLworLyoqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgcmhhc2hfZmluYWwgd2FzIGNhbGxlZCBmb3Igcmhhc2hfY29udGV4dC4KKyAqLwogI2RlZmluZSByaGFzaF9nZXRfZmluYWxpemVkKGN0eCkgcmhhc2hfdHJhbnNtaXQoUk1TR19HRVRfRklOQUxJWkVELCBjdHgsIDAsIDApCiAKIC8qKgogICogVHVybiBvbi9vZmYgdGhlIGF1dG8tZmluYWwgZmxhZyBmb3IgdGhlIGdpdmVuIHJoYXNoX2NvbnRleHQuIEJ5IGRlZmF1bHQKICAqIGF1dG8tZmluYWwgaXMgb24sIHdoaWNoIG1lYW5zIHJoYXNoX2ZpbmFsIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBpZgotICogbmVlZGVkIHdoZW4gYSBoYXNoIHZhbHVlIGlzIHJldHJpdmVkIGJ5IHJoYXNoX3ByaW50IGNhbGwuCisgKiBuZWVkZWQgd2hlbiBhIGhhc2ggdmFsdWUgaXMgcmV0cmlldmVkIGJ5IHJoYXNoX3ByaW50IGNhbGwuCiAgKi8KICNkZWZpbmUgcmhhc2hfc2V0X2F1dG9maW5hbChjdHgsIG9uKSByaGFzaF90cmFuc21pdChSTVNHX1NFVF9BVVRPRklOQUwsIGN0eCwgb24sIDApCiAKQEAgLTI2NywxOSArNDgxLDM2IEBACiAjZGVmaW5lIHJoYXNoX3NldF9vcGVuc3NsX21hc2sobWFzaykgcmhhc2hfdHJhbnNtaXQoUk1TR19TRVRfT1BFTlNTTF9NQVNLLCBOVUxMLCBtYXNrLCAwKQogCiAvKioKLSAqIFJldHVybiBjdXJyZW50IGJpdC1tYXNrIG9mIGhhc2ggYWxnb3JpdGhtcyBzZWxlY3RlZCB0byBiZSBjYWxjdWxhdGVkCi0gKiBieSBPcGVuU1NMIGxpYnJhcnkuCisgKiBSZXR1cm4gY3VycmVudCBiaXQtbWFzayBvZiBoYXNoIGFsZ29yaXRobXMgc2VsZWN0ZWQgdG8gYmUgY2FsY3VsYXRlZCBieSBPcGVuU1NMCisgKiBsaWJyYXJ5LiBSZXR1cm4gUkhBU0hfRVJST1IgaWYgTGliUkhhc2ggaXMgY29tcGlsZWQgd2l0aG91dCBPcGVuU1NMIHN1cHBvcnQuCiAgKi8KICNkZWZpbmUgcmhhc2hfZ2V0X29wZW5zc2xfbWFzaygpIHJoYXNoX3RyYW5zbWl0KFJNU0dfR0VUX09QRU5TU0xfTUFTSywgTlVMTCwgMCwgMCkKIAotLyoqIFRoZSBiaXQgbWFzayBvZiBoYXNoIGFsZ29yaXRobXMgaW1wbGVtZW50ZWQgYnkgT3BlblNTTCAqLwotI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoT1BFTlNTTF9SVU5USU1FKQotIyBkZWZpbmUgUkhBU0hfT1BFTlNTTF9TVVBQT1JURURfSEFTSEVTIChSSEFTSF9NRDQgfCBSSEFTSF9NRDUgfCBcCi0JUkhBU0hfU0hBMSB8IFJIQVNIX1NIQTIyNCB8IFJIQVNIX1NIQTI1NiB8IFJIQVNIX1NIQTM4NCB8IFwKLQlSSEFTSF9TSEE1MTIgfCBSSEFTSF9SSVBFTUQxNjAgfCBSSEFTSF9XSElSTFBPT0wpCi0jZWxzZQotIyBkZWZpbmUgUkhBU0hfT1BFTlNTTF9TVVBQT1JURURfSEFTSEVTIDAKLSNlbmRpZgorLyoqCisgKiBSZXR1cm4gdGhlIGJpdC1tYXNrIG9mIGFsZ29yaXRobXMgdGhhdCBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIE9wZW5TU0wgcGx1Z2luLAorICogaWYgdGhlIGxpYnJhcnkgaXMgY29tcGlsZWQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIDAgb3RoZXJ3aXNlLiBUaGlzIGJpdC1tYXNrIGlzCisgKiBhIGNvbnN0YW50IHZhbHVlIGNvbXB1dGVkIGF0IGNvbXBpbGUtdGltZS4KKyAqLworI2RlZmluZSByaGFzaF9nZXRfb3BlbnNzbF9zdXBwb3J0ZWRfbWFzaygpIHJoYXNoX3RyYW5zbWl0KFJNU0dfR0VUX09QRU5TU0xfU1VQUE9SVEVEX01BU0ssIE5VTEwsIDAsIDApCisKKy8qKgorICogUmV0dXJuIHRoZSBiaXQtbWFzayBvZiBhbGdvcml0aG1zIHRoYXQgYXJlIHN1Y2Nlc3NmdWxseSBsb2FkZWQgZnJvbQorICogT3BlblNTTCBsaWJyYXJ5LiBJZiB0aGUgbGlicmFyeSBpcyBub3QgbG9hZGVkIG9yIG5vdCBzdXBwb3J0ZWQgYnkgTGliUkhhc2gsCisgKiB0aGVuIHJldHVybiAwLgorICovCisjZGVmaW5lIHJoYXNoX2dldF9vcGVuc3NsX2F2YWlsYWJsZV9tYXNrKCkgcmhhc2hfdHJhbnNtaXQoUk1TR19HRVRfT1BFTlNTTF9BVkFJTEFCTEVfTUFTSywgTlVMTCwgMCwgMCkKKworCisvKioKKyAqIFJldHVybiBub24temVybyBpZiBMaWJSSGFzaCBoYXNoIGJlZW4gY29tcGlsZWQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsCisgKiBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KKyNkZWZpbmUgcmhhc2hfaXNfb3BlbnNzbF9zdXBwb3J0ZWQoKSAocmhhc2hfZ2V0X29wZW5zc2xfbWFzaygpICE9IFJIQVNIX0VSUk9SKQorCisvKioKKyAqIExlZ2FjeSBtYWNyby4gVGhlIGJpdCBtYXNrIG9mIGhhc2ggYWxnb3JpdGhtcyBpbXBsZW1lbnRlZCBieSBPcGVuU1NMLgorICovCisjIGRlZmluZSBSSEFTSF9PUEVOU1NMX1NVUFBPUlRFRF9IQVNIRVMgKHJoYXNoX2dldF9vcGVuc3NsX3N1cHBvcnRlZF9tYXNrKCkpCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAvKiBleHRlcm4gIkMiICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmMKaW5kZXggZjVhMDUzYi4uYjIyNjkyNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuYwpAQCAtMSwxOCArMSwxOCBAQAogLyogc2hhMS5jIC0gYW4gaW1wbGVtZW50YXRpb24gb2YgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIDEgKFNIQTEpCiAgKiBiYXNlZCBvbiBSRkMgMzE3NC4KICAqCi0gKiBDb3B5cmlnaHQ6IDIwMDgtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTI0LDcgKzI0LDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTFfaW5pdChzaGExX2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGExX2luaXQoc2hhMV9jdHgqIGN0eCkKIHsKIAljdHgtPmxlbmd0aCA9IDA7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQAogICogQHBhcmFtIG1zZyBtZXNzYWdlIGNodW5rCiAgKiBAcGFyYW0gc2l6ZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKICAqLwotdm9pZCByaGFzaF9zaGExX3VwZGF0ZShzaGExX2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQordm9pZCByaGFzaF9zaGExX3VwZGF0ZShzaGExX2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQogewogCXVuc2lnbmVkIGluZGV4ID0gKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgNjM7CiAJY3R4LT5sZW5ndGggKz0gc2l6ZTsKQEAgLTE2NCw3ICsxNjQsNyBAQAogICogQHBhcmFtIGN0eCB0aGUgYWxnb3JpdGhtIGNvbnRleHQgY29udGFpbmluZyBjdXJyZW50IGhhc2hpbmcgc3RhdGUKICAqIEBwYXJhbSByZXN1bHQgY2FsY3VsYXRlZCBoYXNoIGluIGJpbmFyeSBmb3JtCiAgKi8KLXZvaWQgcmhhc2hfc2hhMV9maW5hbChzaGExX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCit2b2lkIHJoYXNoX3NoYTFfZmluYWwoc2hhMV9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCXVuc2lnbmVkICBpbmRleCA9ICh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDYzOwogCXVuc2lnbmVkKiBtc2czMiA9ICh1bnNpZ25lZCopY3R4LT5tZXNzYWdlOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5oCmluZGV4IDc0YjJmOTQuLjdlOTk1NDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmgKQEAgLTIwLDkgKzIwLDkgQEAKIAogLyogaGFzaCBmdW5jdGlvbnMgKi8KIAotdm9pZCByaGFzaF9zaGExX2luaXQoc2hhMV9jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTFfdXBkYXRlKHNoYTFfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOwotdm9pZCByaGFzaF9zaGExX2ZpbmFsKHNoYTFfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7Cit2b2lkIHJoYXNoX3NoYTFfaW5pdChzaGExX2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhMV91cGRhdGUoc2hhMV9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJoYXNoX3NoYTFfZmluYWwoc2hhMV9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAiQyIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmMKaW5kZXggYWY1YjBmZS4uMjFhNjlhYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmMKQEAgLTEsMTggKzEsMTggQEAKIC8qIHNoYTI1Ni5jIC0gYW4gaW1wbGVtZW50YXRpb24gb2YgU0hBLTI1Ni8yMjQgaGFzaCBmdW5jdGlvbnMKICAqIGJhc2VkIG9uIEZJUFMgMTgwLTMgKEZlZGVyYWwgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBTdGFuZGFydCkuCiAgKgotICogQ29weXJpZ2h0OiAyMDEwLTIwMTIgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC02NSw3ICs2NSw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGEyNTZfaW5pdChzaGEyNTZfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTI1Nl9pbml0KHNoYTI1Nl9jdHgqIGN0eCkKIHsKIAkvKiBJbml0aWFsIHZhbHVlcy4gVGhlc2Ugd29yZHMgd2VyZSBvYnRhaW5lZCBieSB0YWtpbmcgdGhlIGZpcnN0IDMyCiAJICogYml0cyBvZiB0aGUgZnJhY3Rpb25hbCBwYXJ0cyBvZiB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZSBmaXJzdApAQCAtODcsNyArODcsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhMjI0X2luaXQoc3RydWN0IHNoYTI1Nl9jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhMjI0X2luaXQoc3RydWN0IHNoYTI1Nl9jdHgqIGN0eCkKIHsKIAkvKiBJbml0aWFsIHZhbHVlcyBmcm9tIEZJUFMgMTgwLTMuIFRoZXNlIHdvcmRzIHdlcmUgb2J0YWluZWQgYnkgdGFraW5nCiAJICogYml0cyBmcm9tIDMzdGggdG8gNjR0aCBvZiB0aGUgZnJhY3Rpb25hbCBwYXJ0cyBvZiB0aGUgc3F1YXJlCkBAIC0xMTMsNyArMTEzLDcgQEAKIHsKIAl1bnNpZ25lZCBBLCBCLCBDLCBELCBFLCBGLCBHLCBIOwogCXVuc2lnbmVkIFdbMTZdOwotCWNvbnN0IHVuc2lnbmVkICprOworCWNvbnN0IHVuc2lnbmVkKiBrOwogCWludCBpOwogCiAJQSA9IGhhc2hbMF0sIEIgPSBoYXNoWzFdLCBDID0gaGFzaFsyXSwgRCA9IGhhc2hbM107CkBAIC0xNjgsNyArMTY4LDcgQEAKICAqIEBwYXJhbSBtc2cgbWVzc2FnZSBjaHVuawogICogQHBhcmFtIHNpemUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCiAgKi8KLXZvaWQgcmhhc2hfc2hhMjU2X3VwZGF0ZShzaGEyNTZfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgc2l6ZV90IHNpemUpCit2b2lkIHJoYXNoX3NoYTI1Nl91cGRhdGUoc2hhMjU2X2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQogewogCXNpemVfdCBpbmRleCA9IChzaXplX3QpY3R4LT5sZW5ndGggJiA2MzsKIAljdHgtPmxlbmd0aCArPSBzaXplOwpAQCAtMjEwLDcgKzIxMCw3IEBACiAgKiBAcGFyYW0gY3R4IHRoZSBhbGdvcml0aG0gY29udGV4dCBjb250YWluaW5nIGN1cnJlbnQgaGFzaGluZyBzdGF0ZQogICogQHBhcmFtIHJlc3VsdCBjYWxjdWxhdGVkIGhhc2ggaW4gYmluYXJ5IGZvcm0KICAqLwotdm9pZCByaGFzaF9zaGEyNTZfZmluYWwoc2hhMjU2X2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCit2b2lkIHJoYXNoX3NoYTI1Nl9maW5hbChzaGEyNTZfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAlzaXplX3QgaW5kZXggPSAoKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgNjMpID4+IDI7CiAJdW5zaWduZWQgc2hpZnQgPSAoKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgMykgKiA4OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuaAppbmRleCBmODdlYmFhLi4zNjI1Y2ZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuaApAQCAtMjAsMTAgKzIwLDEwIEBACiAJdW5zaWduZWQgZGlnZXN0X2xlbmd0aDsgLyogbGVuZ3RoIG9mIHRoZSBhbGdvcml0aG0gZGlnZXN0IGluIGJ5dGVzICovCiB9IHNoYTI1Nl9jdHg7CiAKLXZvaWQgcmhhc2hfc2hhMjI0X2luaXQoc2hhMjU2X2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhMjU2X2luaXQoc2hhMjU2X2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhMjU2X3VwZGF0ZShzaGEyNTZfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwotdm9pZCByaGFzaF9zaGEyNTZfZmluYWwoc2hhMjU2X2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyIHJlc3VsdFszMl0pOwordm9pZCByaGFzaF9zaGEyMjRfaW5pdChzaGEyNTZfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGEyNTZfaW5pdChzaGEyNTZfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGEyNTZfdXBkYXRlKHNoYTI1Nl9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIHJoYXNoX3NoYTI1Nl9maW5hbChzaGEyNTZfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzMyXSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAvKiBleHRlcm4gIkMiICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmMKaW5kZXggZTRhODQ1Zi4uYmQyODU0ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuYwpAQCAtMywxOCArMywxOCBAQAogICogVGhlIEtlY2NhayBTSEEtMyBzdWJtaXNzaW9uLiBTdWJtaXNzaW9uIHRvIE5JU1QgKFJvdW5kIDMpLCAyMDExCiAgKiBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwgTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUKICAqCi0gKiBDb3B5cmlnaHQ6IDIwMTMgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsICBmcmVlIG9mIGNoYXJnZSwgIHRvIGFueSBwZXJzb24gIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gIHVzZSwgY29weSwgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgdG8gcGVybWl0ICBwZXJzb25zICB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAgKgotICogVGhpcyBwcm9ncmFtICBpcyAgZGlzdHJpYnV0ZWQgIGluICB0aGUgIGhvcGUgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFVzZSB0aGlzIHByb2dyYW0gIGF0ICB5b3VyIG93biByaXNrIQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKKyAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBAIC0zNiw3ICszNiw3IEBACiB9OwogCiAvKiBJbml0aWFsaXppbmcgYSBzaGEzIGNvbnRleHQgZm9yIGdpdmVuIG51bWJlciBvZiBvdXRwdXQgYml0cyAqLwotc3RhdGljIHZvaWQgcmhhc2hfa2VjY2FrX2luaXQoc2hhM19jdHggKmN0eCwgdW5zaWduZWQgYml0cykKK3N0YXRpYyB2b2lkIHJoYXNoX2tlY2Nha19pbml0KHNoYTNfY3R4KiBjdHgsIHVuc2lnbmVkIGJpdHMpCiB7CiAJLyogTkI6IFRoZSBLZWNjYWsgY2FwYWNpdHkgcGFyYW1ldGVyID0gYml0cyAqIDIgKi8KIAl1bnNpZ25lZCByYXRlID0gMTYwMCAtIGJpdHMgKiAyOwpAQCAtNTEsNyArNTEsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhM18yMjRfaW5pdChzaGEzX2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGEzXzIyNF9pbml0KHNoYTNfY3R4KiBjdHgpCiB7CiAJcmhhc2hfa2VjY2FrX2luaXQoY3R4LCAyMjQpOwogfQpAQCAtNjEsNyArNjEsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhM18yNTZfaW5pdChzaGEzX2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGEzXzI1Nl9pbml0KHNoYTNfY3R4KiBjdHgpCiB7CiAJcmhhc2hfa2VjY2FrX2luaXQoY3R4LCAyNTYpOwogfQpAQCAtNzEsNyArNzEsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhM18zODRfaW5pdChzaGEzX2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGEzXzM4NF9pbml0KHNoYTNfY3R4KiBjdHgpCiB7CiAJcmhhc2hfa2VjY2FrX2luaXQoY3R4LCAzODQpOwogfQpAQCAtODEsMzcgKzgxLDM3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGEzXzUxMl9pbml0KHNoYTNfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTNfNTEyX2luaXQoc2hhM19jdHgqIGN0eCkKIHsKIAlyaGFzaF9rZWNjYWtfaW5pdChjdHgsIDUxMik7CiB9CiAKKyNkZWZpbmUgWE9SRURfQShpKSBBWyhpKV0gXiBBWyhpKSArIDVdIF4gQVsoaSkgKyAxMF0gXiBBWyhpKSArIDE1XSBeIEFbKGkpICsgMjBdCisjZGVmaW5lIFRIRVRBX1NURVAoaSkgXAorCUFbKGkpXSAgICAgIF49IERbKGkpXTsgXAorCUFbKGkpICsgNV0gIF49IERbKGkpXTsgXAorCUFbKGkpICsgMTBdIF49IERbKGkpXTsgXAorCUFbKGkpICsgMTVdIF49IERbKGkpXTsgXAorCUFbKGkpICsgMjBdIF49IERbKGkpXSBcCisKIC8qIEtlY2NhayB0aGV0YSgpIHRyYW5zZm9ybWF0aW9uICovCi1zdGF0aWMgdm9pZCBrZWNjYWtfdGhldGEodWludDY0X3QgKkEpCitzdGF0aWMgdm9pZCBrZWNjYWtfdGhldGEodWludDY0X3QqIEEpCiB7Ci0JdW5zaWduZWQgaW50IHg7Ci0JdWludDY0X3QgQ1s1XSwgRFs1XTsKLQotCWZvciAoeCA9IDA7IHggPCA1OyB4KyspIHsKLQkJQ1t4XSA9IEFbeF0gXiBBW3ggKyA1XSBeIEFbeCArIDEwXSBeIEFbeCArIDE1XSBeIEFbeCArIDIwXTsKLQl9Ci0JRFswXSA9IFJPVEw2NChDWzFdLCAxKSBeIENbNF07Ci0JRFsxXSA9IFJPVEw2NChDWzJdLCAxKSBeIENbMF07Ci0JRFsyXSA9IFJPVEw2NChDWzNdLCAxKSBeIENbMV07Ci0JRFszXSA9IFJPVEw2NChDWzRdLCAxKSBeIENbMl07Ci0JRFs0XSA9IFJPVEw2NChDWzBdLCAxKSBeIENbM107Ci0KLQlmb3IgKHggPSAwOyB4IDwgNTsgeCsrKSB7Ci0JCUFbeF0gICAgICBePSBEW3hdOwotCQlBW3ggKyA1XSAgXj0gRFt4XTsKLQkJQVt4ICsgMTBdIF49IERbeF07Ci0JCUFbeCArIDE1XSBePSBEW3hdOwotCQlBW3ggKyAyMF0gXj0gRFt4XTsKLQl9CisJdWludDY0X3QgRFs1XTsKKwlEWzBdID0gUk9UTDY0KFhPUkVEX0EoMSksIDEpIF4gWE9SRURfQSg0KTsKKwlEWzFdID0gUk9UTDY0KFhPUkVEX0EoMiksIDEpIF4gWE9SRURfQSgwKTsKKwlEWzJdID0gUk9UTDY0KFhPUkVEX0EoMyksIDEpIF4gWE9SRURfQSgxKTsKKwlEWzNdID0gUk9UTDY0KFhPUkVEX0EoNCksIDEpIF4gWE9SRURfQSgyKTsKKwlEWzRdID0gUk9UTDY0KFhPUkVEX0EoMCksIDEpIF4gWE9SRURfQSgzKTsKKwlUSEVUQV9TVEVQKDApOworCVRIRVRBX1NURVAoMSk7CisJVEhFVEFfU1RFUCgyKTsKKwlUSEVUQV9TVEVQKDMpOworCVRIRVRBX1NURVAoNCk7CiB9CiAKIC8qIEtlY2NhayBwaSgpIHRyYW5zZm9ybWF0aW9uICovCi1zdGF0aWMgdm9pZCBrZWNjYWtfcGkodWludDY0X3QgKkEpCitzdGF0aWMgdm9pZCBrZWNjYWtfcGkodWludDY0X3QqIEEpCiB7CiAJdWludDY0X3QgQTE7CiAJQTEgPSBBWzFdOwpAQCAtMTQyLDIxICsxNDIsMjcgQEAKIAkvKiBub3RlOiBBWyAwXSBpcyBsZWZ0IGFzIGlzICovCiB9CiAKKyNkZWZpbmUgQ0hJX1NURVAoaSkgXAorCUEwID0gQVswICsgKGkpXTsgXAorCUExID0gQVsxICsgKGkpXTsgXAorCUFbMCArIChpKV0gXj0gfkExICYgQVsyICsgKGkpXTsgXAorCUFbMSArIChpKV0gXj0gfkFbMiArIChpKV0gJiBBWzMgKyAoaSldOyBcCisJQVsyICsgKGkpXSBePSB+QVszICsgKGkpXSAmIEFbNCArIChpKV07IFwKKwlBWzMgKyAoaSldIF49IH5BWzQgKyAoaSldICYgQTA7IFwKKwlBWzQgKyAoaSldIF49IH5BMCAmIEExIFwKKwogLyogS2VjY2FrIGNoaSgpIHRyYW5zZm9ybWF0aW9uICovCi1zdGF0aWMgdm9pZCBrZWNjYWtfY2hpKHVpbnQ2NF90ICpBKQorc3RhdGljIHZvaWQga2VjY2FrX2NoaSh1aW50NjRfdCogQSkKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgMjU7IGkgKz0gNSkgewotCQl1aW50NjRfdCBBMCA9IEFbMCArIGldLCBBMSA9IEFbMSArIGldOwotCQlBWzAgKyBpXSBePSB+QTEgJiBBWzIgKyBpXTsKLQkJQVsxICsgaV0gXj0gfkFbMiArIGldICYgQVszICsgaV07Ci0JCUFbMiArIGldIF49IH5BWzMgKyBpXSAmIEFbNCArIGldOwotCQlBWzMgKyBpXSBePSB+QVs0ICsgaV0gJiBBMDsKLQkJQVs0ICsgaV0gXj0gfkEwICYgQTE7Ci0JfQorCXVpbnQ2NF90IEEwLCBBMTsKKwlDSElfU1RFUCgwKTsKKwlDSElfU1RFUCg1KTsKKwlDSElfU1RFUCgxMCk7CisJQ0hJX1NURVAoMTUpOworCUNISV9TVEVQKDIwKTsKIH0KIAotc3RhdGljIHZvaWQgcmhhc2hfc2hhM19wZXJtdXRhdGlvbih1aW50NjRfdCAqc3RhdGUpCitzdGF0aWMgdm9pZCByaGFzaF9zaGEzX3Blcm11dGF0aW9uKHVpbnQ2NF90KiBzdGF0ZSkKIHsKIAlpbnQgcm91bmQ7CiAJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgTnVtYmVyT2ZSb3VuZHM7IHJvdW5kKyspCkBAIC0yMDQsNyArMjEwLDcgQEAKICAqIEBwYXJhbSBibG9jayB0aGUgbWVzc2FnZSBibG9jayB0byBwcm9jZXNzCiAgKiBAcGFyYW0gYmxvY2tfc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgcHJvY2Vzc2VkIGJsb2NrIGluIGJ5dGVzCiAgKi8KLXN0YXRpYyB2b2lkIHJoYXNoX3NoYTNfcHJvY2Vzc19ibG9jayh1aW50NjRfdCBoYXNoWzI1XSwgY29uc3QgdWludDY0X3QgKmJsb2NrLCBzaXplX3QgYmxvY2tfc2l6ZSkKK3N0YXRpYyB2b2lkIHJoYXNoX3NoYTNfcHJvY2Vzc19ibG9jayh1aW50NjRfdCBoYXNoWzI1XSwgY29uc3QgdWludDY0X3QqIGJsb2NrLCBzaXplX3QgYmxvY2tfc2l6ZSkKIHsKIAkvKiBleHBhbmRlZCBsb29wICovCiAJaGFzaFsgMF0gXj0gbGUybWVfNjQoYmxvY2tbIDBdKTsKQEAgLTI2MCw3ICsyNjYsNyBAQAogICogQHBhcmFtIG1zZyBtZXNzYWdlIGNodW5rCiAgKiBAcGFyYW0gc2l6ZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKICAqLwotdm9pZCByaGFzaF9zaGEzX3VwZGF0ZShzaGEzX2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIHNpemVfdCBzaXplKQordm9pZCByaGFzaF9zaGEzX3VwZGF0ZShzaGEzX2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQogewogCXNpemVfdCBpbmRleCA9IChzaXplX3QpY3R4LT5yZXN0OwogCXNpemVfdCBibG9ja19zaXplID0gKHNpemVfdCljdHgtPmJsb2NrX3NpemU7CkBAIC0zMDUsNyArMzExLDcgQEAKICAqIEBwYXJhbSBjdHggdGhlIGFsZ29yaXRobSBjb250ZXh0IGNvbnRhaW5pbmcgY3VycmVudCBoYXNoaW5nIHN0YXRlCiAgKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQogICovCi12b2lkIHJoYXNoX3NoYTNfZmluYWwoc2hhM19jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQordm9pZCByaGFzaF9zaGEzX2ZpbmFsKHNoYTNfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAlzaXplX3QgZGlnZXN0X2xlbmd0aCA9IDEwMCAtIGN0eC0+YmxvY2tfc2l6ZSAvIDI7CiAJY29uc3Qgc2l6ZV90IGJsb2NrX3NpemUgPSBjdHgtPmJsb2NrX3NpemU7CkBAIC0zMzMsNyArMzM5LDcgQEAKICogQHBhcmFtIGN0eCB0aGUgYWxnb3JpdGhtIGNvbnRleHQgY29udGFpbmluZyBjdXJyZW50IGhhc2hpbmcgc3RhdGUKICogQHBhcmFtIHJlc3VsdCBjYWxjdWxhdGVkIGhhc2ggaW4gYmluYXJ5IGZvcm0KICovCi12b2lkIHJoYXNoX2tlY2Nha19maW5hbChzaGEzX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCit2b2lkIHJoYXNoX2tlY2Nha19maW5hbChzaGEzX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJc2l6ZV90IGRpZ2VzdF9sZW5ndGggPSAxMDAgLSBjdHgtPmJsb2NrX3NpemUgLyAyOwogCWNvbnN0IHNpemVfdCBibG9ja19zaXplID0gY3R4LT5ibG9ja19zaXplOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5oCmluZGV4IDI4MzE5OTcuLmUwMDA0MWQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmgKQEAgLTMxLDEyICszMSwxMiBAQAogCiAvKiBtZXRob2RzIGZvciBjYWxjdWxhdGluZyB0aGUgaGFzaCBmdW5jdGlvbiAqLwogCi12b2lkIHJoYXNoX3NoYTNfMjI0X2luaXQoc2hhM19jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTNfMjU2X2luaXQoc2hhM19jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTNfMzg0X2luaXQoc2hhM19jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTNfNTEyX2luaXQoc2hhM19jdHggKmN0eCk7Ci12b2lkIHJoYXNoX3NoYTNfdXBkYXRlKHNoYTNfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOwotdm9pZCByaGFzaF9zaGEzX2ZpbmFsKHNoYTNfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7Cit2b2lkIHJoYXNoX3NoYTNfMjI0X2luaXQoc2hhM19jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTNfMjU2X2luaXQoc2hhM19jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTNfMzg0X2luaXQoc2hhM19jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTNfNTEyX2luaXQoc2hhM19jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTNfdXBkYXRlKHNoYTNfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOwordm9pZCByaGFzaF9zaGEzX2ZpbmFsKHNoYTNfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CiAKICNpZmRlZiBVU0VfS0VDQ0FLCiAjZGVmaW5lIHJoYXNoX2tlY2Nha18yMjRfaW5pdCByaGFzaF9zaGEzXzIyNF9pbml0CkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIHJoYXNoX2tlY2Nha18zODRfaW5pdCByaGFzaF9zaGEzXzM4NF9pbml0CiAjZGVmaW5lIHJoYXNoX2tlY2Nha181MTJfaW5pdCByaGFzaF9zaGEzXzUxMl9pbml0CiAjZGVmaW5lIHJoYXNoX2tlY2Nha191cGRhdGUgcmhhc2hfc2hhM191cGRhdGUKLXZvaWQgcmhhc2hfa2VjY2FrX2ZpbmFsKHNoYTNfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7Cit2b2lkIHJoYXNoX2tlY2Nha19maW5hbChzaGEzX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuYwppbmRleCBhM2U2ODFkLi41NTVlNmVmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuYwpAQCAtMSwxOCArMSwxOCBAQAogLyogc2hhNTEyLmMgLSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBTSEEtMzg0LzUxMiBoYXNoIGZ1bmN0aW9ucwogICogYmFzZWQgb24gRklQUyAxODAtMyAoRmVkZXJhbCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIFN0YW5kYXJ0KS4KICAqCi0gKiBDb3B5cmlnaHQ6IDIwMTAtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTgxLDcgKzgxLDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTUxMl9pbml0KHNoYTUxMl9jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhNTEyX2luaXQoc2hhNTEyX2N0eCogY3R4KQogewogCS8qIEluaXRpYWwgdmFsdWVzLiBUaGVzZSB3b3JkcyB3ZXJlIG9idGFpbmVkIGJ5IHRha2luZyB0aGUgZmlyc3QgMzIKIAkgKiBiaXRzIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnRzIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIGZpcnN0CkBAIC0xMDQsNyArMTA0LDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTM4NF9pbml0KHN0cnVjdCBzaGE1MTJfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTM4NF9pbml0KHN0cnVjdCBzaGE1MTJfY3R4KiBjdHgpCiB7CiAJLyogSW5pdGlhbCB2YWx1ZXMgZnJvbSBGSVBTIDE4MC0zLiBUaGVzZSB3b3JkcyB3ZXJlIG9idGFpbmVkIGJ5IHRha2luZwogCSAqIHRoZSBmaXJzdCBzaXh0eS1mb3VyIGJpdHMgb2YgdGhlIGZyYWN0aW9uYWwgcGFydHMgb2YgdGhlIHNxdWFyZQpAQCAtMTMxLDcgKzEzMSw3IEBACiB7CiAJdWludDY0X3QgQSwgQiwgQywgRCwgRSwgRiwgRywgSDsKIAl1aW50NjRfdCBXWzE2XTsKLQljb25zdCB1aW50NjRfdCAqazsKKwljb25zdCB1aW50NjRfdCogazsKIAlpbnQgaTsKIAogCUEgPSBoYXNoWzBdLCBCID0gaGFzaFsxXSwgQyA9IGhhc2hbMl0sIEQgPSBoYXNoWzNdOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgKiBAcGFyYW0gbXNnIG1lc3NhZ2UgY2h1bmsKICAqIEBwYXJhbSBzaXplIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBjaHVuawogICovCi12b2lkIHJoYXNoX3NoYTUxMl91cGRhdGUoc2hhNTEyX2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIHNpemVfdCBzaXplKQordm9pZCByaGFzaF9zaGE1MTJfdXBkYXRlKHNoYTUxMl9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSkKIHsKIAlzaXplX3QgaW5kZXggPSAoc2l6ZV90KWN0eC0+bGVuZ3RoICYgMTI3OwogCWN0eC0+bGVuZ3RoICs9IHNpemU7CkBAIC0yMjgsNyArMjI4LDcgQEAKICAqIEBwYXJhbSBjdHggdGhlIGFsZ29yaXRobSBjb250ZXh0IGNvbnRhaW5pbmcgY3VycmVudCBoYXNoaW5nIHN0YXRlCiAgKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQogICovCi12b2lkIHJoYXNoX3NoYTUxMl9maW5hbChzaGE1MTJfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKK3ZvaWQgcmhhc2hfc2hhNTEyX2ZpbmFsKHNoYTUxMl9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCXNpemVfdCBpbmRleCA9ICgodW5zaWduZWQpY3R4LT5sZW5ndGggJiAxMjcpID4+IDM7CiAJdW5zaWduZWQgc2hpZnQgPSAoKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgNykgKiA4OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhNTEyLmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuaAppbmRleCA3YzY4OWJlLi5mODBhZTBkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuaApAQCAtMjAsMTAgKzIwLDEwIEBACiAJdW5zaWduZWQgZGlnZXN0X2xlbmd0aDsgLyogbGVuZ3RoIG9mIHRoZSBhbGdvcml0aG0gZGlnZXN0IGluIGJ5dGVzICovCiB9IHNoYTUxMl9jdHg7CiAKLXZvaWQgcmhhc2hfc2hhMzg0X2luaXQoc2hhNTEyX2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhNTEyX2luaXQoc2hhNTEyX2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhNTEyX3VwZGF0ZShzaGE1MTJfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwotdm9pZCByaGFzaF9zaGE1MTJfZmluYWwoc2hhNTEyX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwordm9pZCByaGFzaF9zaGEzODRfaW5pdChzaGE1MTJfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGE1MTJfaW5pdChzaGE1MTJfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGE1MTJfdXBkYXRlKHNoYTUxMl9jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIHJoYXNoX3NoYTUxMl9maW5hbChzaGE1MTJfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAvKiBleHRlcm4gIkMiICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91c3RkLmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91c3RkLmgKaW5kZXggMDE5YjkzMS4uNzU2Y2UwYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXN0ZC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3VzdGQuaApAQCAtOSw3ICs5LDcgQEAKICMgcHJhZ21hIHdhcm5pbmcocHVzaCwxKQogI2VuZGlmCiAKLSNpbmNsdWRlIDxjbV9rd2ltbC5oPgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKICNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UNjRfVAogIyBkZWZpbmUgaW50NjRfdCBLV0lNTF9JTlRfaW50NjRfdApAQCAtMzYsNCArMzYsMzYgQEAKICMgZGVmaW5lIHVpbnQ4X3QgS1dJTUxfSU5UX3VpbnQ4X3QKICNlbmRpZgogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZiAwCisjaWYgX01TQ19WRVIgPiAxMDAwCisjIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBzaXplX3QgZm9yIHZjNi4wICovCisKKyMgaWYgX01TQ19WRVIgPj0gMTYwMAorLyogVmlzdWFsIFN0dWRpbyA+PSAyMDEwIGhhcyBzdGRpbnQuaCAqLworIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVsc2UKKyAgLyogdmM2LjAgaGFzIGJ1ZyB3aXRoIF9faW50OCwgc28gdXNpbmcgY2hhciBpbnN0ZWFkICovCisgIHR5cGVkZWYgc2lnbmVkIGNoYXIgICAgICAgaW50OF90OworICB0eXBlZGVmIHNpZ25lZCBfX2ludDE2ICAgIGludDE2X3Q7CisgIHR5cGVkZWYgc2lnbmVkIF9faW50MzIgICAgaW50MzJfdDsKKyAgdHlwZWRlZiBzaWduZWQgX19pbnQ2NCAgICBpbnQ2NF90OworICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgIHVpbnQ4X3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxNiAgdWludDE2X3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiAgdWludDMyX3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgdWludDY0X3Q7CisjIGVuZGlmIC8qIF9NU0NfVkVSID49IDE2MDAgKi8KKworLyogZGlzYWJsZSB3YXJuaW5nczogVGhlIFBPU0lYIG5hbWUgZm9yIHRoaXMgaXRlbSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIElTTyBDKysgY29uZm9ybWFudCBuYW1lLiAqLworIyBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDk5NikKKworI2Vsc2UgLyogX01TQ19WRVIgPiAxMDAwICovCisKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorCisjZW5kaWYgLyogX01TQ19WRVIgPiAxMDAwICovCisjZW5kaWYKKwogI2VuZGlmIC8qIExJQlJIQVNIX1VTVERfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXRpbC5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXRpbC5oCmluZGV4IDlmMzcxNTcuLjU3Y2FlOWIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3V0aWwuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91dGlsLmgKQEAgLTIwLDcgKzIwLDcgQEAKICMgZGVmaW5lIGF0b21pY19jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkdmFsLCBuZXd2YWwpIGF0b21pY19jYXNfMzIocHRyLCBvbGR2YWwsIG5ld3ZhbCkKICNlbHNlCiAvKiBwcmF5IHRoYXQgaXQgd2lsbCB3b3JrICovCi0jIGRlZmluZSBhdG9taWNfY29tcGFyZV9hbmRfc3dhcChwdHIsIG9sZHZhbCwgbmV3dmFsKSB7IGlmKCoocHRyKSA9PSAob2xkdmFsKSkgKihwdHIpID0gKG5ld3ZhbCk7IH0KKyMgZGVmaW5lIGF0b21pY19jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkdmFsLCBuZXd2YWwpIHsgaWYgKCoocHRyKSA9PSAob2xkdmFsKSkgKihwdHIpID0gKG5ld3ZhbCk7IH0KICMgZGVmaW5lIE5PX0FUT01JQ19CVUlMVElOUwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYuaCBiL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYuaAppbmRleCBlYjgwYmZiLi42ZjMyYjQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2LmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di5oCkBAIC0zMSw2ICszMSwxMCBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQlVJTERJTkdfVVZfU0hBUkVEKSAmJiBkZWZpbmVkKFVTSU5HX1VWX1NIQVJFRCkKKyNlcnJvciAiRGVmaW5lIGVpdGhlciBCVUlMRElOR19VVl9TSEFSRUQgb3IgVVNJTkdfVVZfU0hBUkVELCBub3QgYm90aC4iCisjZW5kaWYKKwogI2lmZGVmIF9XSU4zMgogICAvKiBXaW5kb3dzIC0gc2V0IHVwIGRsbCBpbXBvcnQvZXhwb3J0IGRlY29yYXRvcnMuICovCiAjIGlmIGRlZmluZWQoQlVJTERJTkdfVVZfU0hBUkVEKQpAQCAtMTQ3LDYgKzE1MSw3IEBACiAgIFhYKEVSRU1PVEVJTywgInJlbW90ZSBJL08gZXJyb3IiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIFhYKEVOT1RUWSwgImluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZSIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIFhYKEVGVFlQRSwgImluYXBwcm9wcmlhdGUgZmlsZSB0eXBlIG9yIGZvcm1hdCIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFhYKEVJTFNFUSwgImlsbGVnYWwgYnl0ZSBzZXF1ZW5jZSIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAKICNkZWZpbmUgVVZfSEFORExFX1RZUEVfTUFQKFhYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgWFgoQVNZTkMsIGFzeW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE3Niw2ICsxODEsNyBAQAogICBYWChXT1JLLCB3b3JrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBYWChHRVRBRERSSU5GTywgZ2V0YWRkcmluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBYWChHRVROQU1FSU5GTywgZ2V0bmFtZWluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBYWChSQU5ET00sIHJhbmRvbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCiB0eXBlZGVmIGVudW0gewogI2RlZmluZSBYWChjb2RlLCBfKSBVVl8gIyMgY29kZSA9IFVWX18gIyMgY29kZSwKQEAgLTIzMywxMyArMjM5LDE2IEBACiB0eXBlZGVmIHN0cnVjdCB1dl91ZHBfc2VuZF9zIHV2X3VkcF9zZW5kX3Q7CiB0eXBlZGVmIHN0cnVjdCB1dl9mc19zIHV2X2ZzX3Q7CiB0eXBlZGVmIHN0cnVjdCB1dl93b3JrX3MgdXZfd29ya190OwordHlwZWRlZiBzdHJ1Y3QgdXZfcmFuZG9tX3MgdXZfcmFuZG9tX3Q7CiAKIC8qIE5vbmUgb2YgdGhlIGFib3ZlLiAqLwordHlwZWRlZiBzdHJ1Y3QgdXZfZW52X2l0ZW1fcyB1dl9lbnZfaXRlbV90OwogdHlwZWRlZiBzdHJ1Y3QgdXZfY3B1X2luZm9fcyB1dl9jcHVfaW5mb190OwogdHlwZWRlZiBzdHJ1Y3QgdXZfaW50ZXJmYWNlX2FkZHJlc3NfcyB1dl9pbnRlcmZhY2VfYWRkcmVzc190OwogdHlwZWRlZiBzdHJ1Y3QgdXZfZGlyZW50X3MgdXZfZGlyZW50X3Q7CiB0eXBlZGVmIHN0cnVjdCB1dl9wYXNzd2RfcyB1dl9wYXNzd2RfdDsKIHR5cGVkZWYgc3RydWN0IHV2X3V0c25hbWVfcyB1dl91dHNuYW1lX3Q7Cit0eXBlZGVmIHN0cnVjdCB1dl9zdGF0ZnNfcyB1dl9zdGF0ZnNfdDsKIAogdHlwZWRlZiBlbnVtIHsKICAgVVZfTE9PUF9CTE9DS19TSUdOQUwKQEAgLTI2MCw2ICsyNjksOCBAQAogdHlwZWRlZiB2b2lkKiAoKnV2X2NhbGxvY19mdW5jKShzaXplX3QgY291bnQsIHNpemVfdCBzaXplKTsKIHR5cGVkZWYgdm9pZCAoKnV2X2ZyZWVfZnVuYykodm9pZCogcHRyKTsKIAorVVZfRVhURVJOIHZvaWQgdXZfbGlicmFyeV9zaHV0ZG93bih2b2lkKTsKKwogVVZfRVhURVJOIGludCB1dl9yZXBsYWNlX2FsbG9jYXRvcih1dl9tYWxsb2NfZnVuYyBtYWxsb2NfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfcmVhbGxvY19mdW5jIHJlYWxsb2NfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfY2FsbG9jX2Z1bmMgY2FsbG9jX2Z1bmMsCkBAIC0zMjcsNiArMzM4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzZXJ2aWNlKTsKK3R5cGVkZWYgdm9pZCAoKnV2X3JhbmRvbV9jYikodXZfcmFuZG9tX3QqIHJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBsb25nIHR2X3NlYzsKQEAgLTU2MSw2ICs1NzYsNyBAQAogVVZfRVhURVJOIGludCB1dl90Y3BfZ2V0cGVlcm5hbWUoY29uc3QgdXZfdGNwX3QqIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbmFtZWxlbik7CitVVl9FWFRFUk4gaW50IHV2X3RjcF9jbG9zZV9yZXNldCh1dl90Y3BfdCogaGFuZGxlLCB1dl9jbG9zZV9jYiBjbG9zZV9jYik7CiBVVl9FWFRFUk4gaW50IHV2X3RjcF9jb25uZWN0KHV2X2Nvbm5lY3RfdCogcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl90Y3BfdCogaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqIGFkZHIsCkBAIC01OTUsNyArNjExLDE3IEBACiAgICAqIChwcm92aWRlZCB0aGV5IGFsbCBzZXQgdGhlIGZsYWcpIGJ1dCBvbmx5IHRoZSBsYXN0IG9uZSB0byBiaW5kIHdpbGwgcmVjZWl2ZQogICAgKiBhbnkgdHJhZmZpYywgaW4gZWZmZWN0ICJzdGVhbGluZyIgdGhlIHBvcnQgZnJvbSB0aGUgcHJldmlvdXMgbGlzdGVuZXIuCiAgICAqLwotICBVVl9VRFBfUkVVU0VBRERSID0gNAorICBVVl9VRFBfUkVVU0VBRERSID0gNCwKKyAgLyoKKyAgICogSW5kaWNhdGVzIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGJ5IHJlY3ZtbXNnLCBzbyB0aGUgYnVmZmVyIHByb3ZpZGVkCisgICAqIG11c3Qgbm90IGJlIGZyZWVkIGJ5IHRoZSByZWN2X2NiIGNhbGxiYWNrLgorICAgKi8KKyAgVVZfVURQX01NU0dfQ0hVTksgPSA4LAorCisgIC8qCisgICAqIEluZGljYXRlcyB0aGF0IHJlY3ZtbXNnIHNob3VsZCBiZSB1c2VkLCBpZiBhdmFpbGFibGUuCisgICAqLworICBVVl9VRFBfUkVDVk1NU0cgPSAyNTYKIH07CiAKIHR5cGVkZWYgdm9pZCAoKnV2X3VkcF9zZW5kX2NiKSh1dl91ZHBfc2VuZF90KiByZXEsIGludCBzdGF0dXMpOwpAQCAtNjQ3LDYgKzY3MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbXVsdGljYXN0X2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X21lbWJlcnNoaXAgbWVtYmVyc2hpcCk7CitVVl9FWFRFUk4gaW50IHV2X3VkcF9zZXRfc291cmNlX21lbWJlcnNoaXAodXZfdWRwX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtdWx0aWNhc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9tZW1iZXJzaGlwIG1lbWJlcnNoaXApOwogVVZfRVhURVJOIGludCB1dl91ZHBfc2V0X211bHRpY2FzdF9sb29wKHV2X3VkcF90KiBoYW5kbGUsIGludCBvbik7CiBVVl9FWFRFUk4gaW50IHV2X3VkcF9zZXRfbXVsdGljYXN0X3R0bCh1dl91ZHBfdCogaGFuZGxlLCBpbnQgdHRsKTsKIFVWX0VYVEVSTiBpbnQgdXZfdWRwX3NldF9tdWx0aWNhc3RfaW50ZXJmYWNlKHV2X3VkcF90KiBoYW5kbGUsCkBAIC02OTEsMTAgKzcyMiwyNSBAQAogICBVVl9UVFlfTU9ERV9JTwogfSB1dl90dHlfbW9kZV90OwogCit0eXBlZGVmIGVudW0geworICAvKgorICAgKiBUaGUgY29uc29sZSBzdXBwb3J0cyBoYW5kbGluZyBvZiB2aXJ0dWFsIHRlcm1pbmFsIHNlcXVlbmNlcworICAgKiAoV2luZG93czEwIG5ldyBjb25zb2xlLCBDb25FbXUpCisgICAqLworICBVVl9UVFlfU1VQUE9SVEVELAorICAvKiBUaGUgY29uc29sZSBjYW5ub3QgcHJvY2VzcyB0aGUgdmlydHVhbCB0ZXJtaW5hbCBzZXF1ZW5jZS4gIChMZWdhY3kKKyAgICogY29uc29sZSkKKyAgICovCisgIFVWX1RUWV9VTlNVUFBPUlRFRAorfSB1dl90dHlfdnRlcm1zdGF0ZV90OworCisKIFVWX0VYVEVSTiBpbnQgdXZfdHR5X2luaXQodXZfbG9vcF90KiwgdXZfdHR5X3QqLCB1dl9maWxlIGZkLCBpbnQgcmVhZGFibGUpOwogVVZfRVhURVJOIGludCB1dl90dHlfc2V0X21vZGUodXZfdHR5X3QqLCB1dl90dHlfbW9kZV90IG1vZGUpOwogVVZfRVhURVJOIGludCB1dl90dHlfcmVzZXRfbW9kZSh2b2lkKTsKIFVWX0VYVEVSTiBpbnQgdXZfdHR5X2dldF93aW5zaXplKHV2X3R0eV90KiwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworVVZfRVhURVJOIHZvaWQgdXZfdHR5X3NldF92dGVybV9zdGF0ZSh1dl90dHlfdnRlcm1zdGF0ZV90IHN0YXRlKTsKK1VWX0VYVEVSTiBpbnQgdXZfdHR5X2dldF92dGVybV9zdGF0ZSh1dl90dHlfdnRlcm1zdGF0ZV90KiBzdGF0ZSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDKysiIHsKQEAgLTEwNDIsMTEgKzEwODgsMTEgQEAKIAogCiBzdHJ1Y3QgdXZfY3B1X3RpbWVzX3MgewotICB1aW50NjRfdCB1c2VyOwotICB1aW50NjRfdCBuaWNlOwotICB1aW50NjRfdCBzeXM7Ci0gIHVpbnQ2NF90IGlkbGU7Ci0gIHVpbnQ2NF90IGlycTsKKyAgdWludDY0X3QgdXNlcjsgLyogbWlsbGlzZWNvbmRzICovCisgIHVpbnQ2NF90IG5pY2U7IC8qIG1pbGxpc2Vjb25kcyAqLworICB1aW50NjRfdCBzeXM7IC8qIG1pbGxpc2Vjb25kcyAqLworICB1aW50NjRfdCBpZGxlOyAvKiBtaWxsaXNlY29uZHMgKi8KKyAgdWludDY0X3QgaXJxOyAvKiBtaWxsaXNlY29uZHMgKi8KIH07CiAKIHN0cnVjdCB1dl9jcHVfaW5mb19zIHsKQEAgLTEwODcsNiArMTEzMywxNyBAQAogICAgICB0byBhcyBtZWFuaW5nbGVzcyBpbiB0aGUgZG9jcy4gKi8KIH07CiAKK3N0cnVjdCB1dl9zdGF0ZnNfcyB7CisgIHVpbnQ2NF90IGZfdHlwZTsKKyAgdWludDY0X3QgZl9ic2l6ZTsKKyAgdWludDY0X3QgZl9ibG9ja3M7CisgIHVpbnQ2NF90IGZfYmZyZWU7CisgIHVpbnQ2NF90IGZfYmF2YWlsOworICB1aW50NjRfdCBmX2ZpbGVzOworICB1aW50NjRfdCBmX2ZmcmVlOworICB1aW50NjRfdCBmX3NwYXJlWzRdOworfTsKKwogdHlwZWRlZiBlbnVtIHsKICAgVVZfRElSRU5UX1VOS05PV04sCiAgIFVWX0RJUkVOVF9GSUxFLApAQCAtMTE0OSwxMiArMTIwNiwyMiBAQAogVVZfRVhURVJOIHV2X3BpZF90IHV2X29zX2dldHBpZCh2b2lkKTsKIFVWX0VYVEVSTiB1dl9waWRfdCB1dl9vc19nZXRwcGlkKHZvaWQpOwogCi0jZGVmaW5lIFVWX1BSSU9SSVRZX0xPVyAxOQotI2RlZmluZSBVVl9QUklPUklUWV9CRUxPV19OT1JNQUwgMTAKLSNkZWZpbmUgVVZfUFJJT1JJVFlfTk9STUFMIDAKLSNkZWZpbmUgVVZfUFJJT1JJVFlfQUJPVkVfTk9STUFMIC03Ci0jZGVmaW5lIFVWX1BSSU9SSVRZX0hJR0ggLTE0Ci0jZGVmaW5lIFVWX1BSSU9SSVRZX0hJR0hFU1QgLTIwCisjaWYgZGVmaW5lZChfX1BBU0VfXykKKy8qIE9uIElCTSBpIFBBU0UsIHRoZSBoaWdoZXN0IHByb2Nlc3MgcHJpb3JpdHkgaXMgLTEwICovCisjIGRlZmluZSBVVl9QUklPUklUWV9MT1cgMzkgICAgICAgICAgICAvLyBSVU5QVFkoOTkpCisjIGRlZmluZSBVVl9QUklPUklUWV9CRUxPV19OT1JNQUwgMTUgICAvLyBSVU5QVFkoNTApCisjIGRlZmluZSBVVl9QUklPUklUWV9OT1JNQUwgMCAgICAgICAgICAvLyBSVU5QVFkoMjApCisjIGRlZmluZSBVVl9QUklPUklUWV9BQk9WRV9OT1JNQUwgLTQgICAvLyBSVU5UWSgxMikKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0hJR0ggLTcgICAgICAgICAgIC8vIFJVTlBUWSg2KQorIyBkZWZpbmUgVVZfUFJJT1JJVFlfSElHSEVTVCAtMTAgICAgICAgLy8gUlVOUFRZKDEpCisjZWxzZQorIyBkZWZpbmUgVVZfUFJJT1JJVFlfTE9XIDE5CisjIGRlZmluZSBVVl9QUklPUklUWV9CRUxPV19OT1JNQUwgMTAKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX05PUk1BTCAwCisjIGRlZmluZSBVVl9QUklPUklUWV9BQk9WRV9OT1JNQUwgLTcKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0hJR0ggLTE0CisjIGRlZmluZSBVVl9QUklPUklUWV9ISUdIRVNUIC0yMAorI2VuZGlmCiAKIFVWX0VYVEVSTiBpbnQgdXZfb3NfZ2V0cHJpb3JpdHkodXZfcGlkX3QgcGlkLCBpbnQqIHByaW9yaXR5KTsKIFVWX0VYVEVSTiBpbnQgdXZfb3Nfc2V0cHJpb3JpdHkodXZfcGlkX3QgcGlkLCBpbnQgcHJpb3JpdHkpOwpAQCAtMTE2OCw2ICsxMjM1LDEzIEBACiBVVl9FWFRFUk4gdm9pZCB1dl9mcmVlX2ludGVyZmFjZV9hZGRyZXNzZXModXZfaW50ZXJmYWNlX2FkZHJlc3NfdCogYWRkcmVzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCk7CiAKK3N0cnVjdCB1dl9lbnZfaXRlbV9zIHsKKyAgY2hhciogbmFtZTsKKyAgY2hhciogdmFsdWU7Cit9OworCitVVl9FWFRFUk4gaW50IHV2X29zX2Vudmlyb24odXZfZW52X2l0ZW1fdCoqIGVudml0ZW1zLCBpbnQqIGNvdW50KTsKK1VWX0VYVEVSTiB2b2lkIHV2X29zX2ZyZWVfZW52aXJvbih1dl9lbnZfaXRlbV90KiBlbnZpdGVtcywgaW50IGNvdW50KTsKIFVWX0VYVEVSTiBpbnQgdXZfb3NfZ2V0ZW52KGNvbnN0IGNoYXIqIG5hbWUsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBzaXplKTsKIFVWX0VYVEVSTiBpbnQgdXZfb3Nfc2V0ZW52KGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKIFVWX0VYVEVSTiBpbnQgdXZfb3NfdW5zZXRlbnYoY29uc3QgY2hhciogbmFtZSk7CkBAIC0xMjIzLDcgKzEyOTcsMTAgQEAKICAgVVZfRlNfTENIT1dOLAogICBVVl9GU19PUEVORElSLAogICBVVl9GU19SRUFERElSLAotICBVVl9GU19DTE9TRURJUgorICBVVl9GU19DTE9TRURJUiwKKyAgVVZfRlNfU1RBVEZTLAorICBVVl9GU19NS1NURU1QLAorICBVVl9GU19MVVRJTUUKIH0gdXZfZnNfdHlwZTsKIAogc3RydWN0IHV2X2Rpcl9zIHsKQEAgLTEyNDgsNiArMTMyNSw3IEBACiAKIFVWX0VYVEVSTiB1dl9mc190eXBlIHV2X2ZzX2dldF90eXBlKGNvbnN0IHV2X2ZzX3QqKTsKIFVWX0VYVEVSTiBzc2l6ZV90IHV2X2ZzX2dldF9yZXN1bHQoY29uc3QgdXZfZnNfdCopOworVVZfRVhURVJOIGludCB1dl9mc19nZXRfc3lzdGVtX2Vycm9yKGNvbnN0IHV2X2ZzX3QqKTsKIFVWX0VYVEVSTiB2b2lkKiB1dl9mc19nZXRfcHRyKGNvbnN0IHV2X2ZzX3QqKTsKIFVWX0VYVEVSTiBjb25zdCBjaGFyKiB1dl9mc19nZXRfcGF0aChjb25zdCB1dl9mc190Kik7CiBVVl9FWFRFUk4gdXZfc3RhdF90KiB1dl9mc19nZXRfc3RhdGJ1Zih1dl9mc190Kik7CkBAIC0xMzE0LDYgKzEzOTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdHBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKTsKK1VWX0VYVEVSTiBpbnQgdXZfZnNfbWtzdGVtcCh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRwbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc19jYiBjYik7CiBVVl9FWFRFUk4gaW50IHV2X2ZzX3JtZGlyKHV2X2xvb3BfdCogbG9vcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLApAQCAtMTM5Miw2ICsxNDc0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYXRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbXRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc19jYiBjYik7CitVVl9FWFRFUk4gaW50IHV2X2ZzX2x1dGltZSh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGF0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG10aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpOwogVVZfRVhURVJOIGludCB1dl9mc19sc3RhdCh1dl9sb29wX3QqIGxvb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2ZzX3QqIHJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKQEAgLTE0NTEsNiArMTUzOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfdWlkX3QgdWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZ2lkX3QgZ2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpOworVVZfRVhURVJOIGludCB1dl9mc19zdGF0ZnModXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKTsKIAogCiBlbnVtIHV2X2ZzX2V2ZW50IHsKQEAgLTE1NTYsNiArMTY0OCwyNiBAQAogVVZfRVhURVJOIGludCB1dl9pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkKiBzcmMsIGNoYXIqIGRzdCwgc2l6ZV90IHNpemUpOwogVVZfRVhURVJOIGludCB1dl9pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyKiBzcmMsIHZvaWQqIGRzdCk7CiAKKworc3RydWN0IHV2X3JhbmRvbV9zIHsKKyAgVVZfUkVRX0ZJRUxEUworICAvKiByZWFkLW9ubHkgKi8KKyAgdXZfbG9vcF90KiBsb29wOworICAvKiBwcml2YXRlICovCisgIGludCBzdGF0dXM7CisgIHZvaWQqIGJ1ZjsKKyAgc2l6ZV90IGJ1ZmxlbjsKKyAgdXZfcmFuZG9tX2NiIGNiOworICBzdHJ1Y3QgdXZfX3dvcmsgd29ya19yZXE7Cit9OworCitVVl9FWFRFUk4gaW50IHV2X3JhbmRvbSh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICB1dl9yYW5kb21fdCogcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCAgLyogRm9yIGZ1dHVyZSBleHRlbnNpb247IG11c3QgYmUgMC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHV2X3JhbmRvbV9jYiBjYik7CisKICNpZiBkZWZpbmVkKElGX05BTUVTSVpFKQogIyBkZWZpbmUgVVZfSUZfTkFNRVNJWkUgKElGX05BTUVTSVpFICsgMSkKICNlbGlmIGRlZmluZWQoSUZOQU1TSVopCkBAIC0xNTgyLDYgKzE2OTQsNyBAQAogVVZfRVhURVJOIHVpbnQ2NF90IHV2X2dldF9jb25zdHJhaW5lZF9tZW1vcnkodm9pZCk7CiAKIFVWX0VYVEVSTiB1aW50NjRfdCB1dl9ocnRpbWUodm9pZCk7CitVVl9FWFRFUk4gdm9pZCB1dl9zbGVlcCh1bnNpZ25lZCBpbnQgbXNlYyk7CiAKIFVWX0VYVEVSTiB2b2lkIHV2X2Rpc2FibGVfc3RkaW9faW5oZXJpdGFuY2Uodm9pZCk7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvZXJybm8uaCBiL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvZXJybm8uaAppbmRleCA4ZWViOTVkLi4xNjVmZDExIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L2Vycm5vLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di9lcnJuby5oCkBAIC00MzksNSArNDM5LDEwIEBACiAjIGRlZmluZSBVVl9fRUZUWVBFICgtNDAyOCkKICNlbmRpZgogCisjaWYgZGVmaW5lZChFSUxTRVEpICYmICFkZWZpbmVkKF9XSU4zMikKKyMgZGVmaW5lIFVWX19FSUxTRVEgVVZfX0VSUihFSUxTRVEpCisjZWxzZQorIyBkZWZpbmUgVVZfX0VJTFNFUSAoLTQwMjcpCisjZW5kaWYKIAogI2VuZGlmIC8qIFVWX0VSUk5PX0hfICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L3VuaXguaCBiL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvdW5peC5oCmluZGV4IDRlMjYxMDguLjgyNzc4ZmYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvdW5peC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvdW5peC5oCkBAIC01MSw2ICs1MSw4IEBACiAjIGluY2x1ZGUgImxpbnV4LmgiCiAjZWxpZiBkZWZpbmVkIChfX01WU19fKQogIyBpbmNsdWRlICJvczM5MC5oIgorI2VsaWYgZGVmaW5lZChfX1BBU0VfXykgIC8qIF9fUEFTRV9fIGFuZCBfQUlYIGFyZSBib3RoIGRlZmluZWQgb24gSUJNIGkgKi8KKyMgaW5jbHVkZSAicG9zaXguaCIgIC8qIElCTSBpIG5lZWRzIHV2L3Bvc2l4LmgsIG5vdCB1di9haXguaCAqLwogI2VsaWYgZGVmaW5lZChfQUlYKQogIyBpbmNsdWRlICJhaXguaCIKICNlbGlmIGRlZmluZWQoX19zdW4pCkBAIC02NSw4ICs2Nyw3IEBACiAgICAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgICAgICAgIHx8IFwKICAgICAgIGRlZmluZWQoX19OZXRCU0RfXykKICMgaW5jbHVkZSAiYnNkLmgiCi0jZWxpZiBkZWZpbmVkKF9fUEFTRV9fKSAgIHx8IFwKLSAgICAgIGRlZmluZWQoX19DWUdXSU5fXykgfHwgXAorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBcCiAgICAgICBkZWZpbmVkKF9fTVNZU19fKSAgIHx8IFwKICAgICAgIGRlZmluZWQoX19HTlVfXykKICMgaW5jbHVkZSAicG9zaXguaCIKQEAgLTQyMSwxMSArNDIyLDI1IEBACiAjZWxzZQogIyBkZWZpbmUgVVZfRlNfT19DUkVBVCAgICAgICAgMAogI2VuZGlmCi0jaWYgZGVmaW5lZChPX0RJUkVDVCkKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fYXJtX18pCisjIGRlZmluZSBVVl9GU19PX0RJUkVDVCAgICAgICAweDEwMDAwCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX202OGtfXykKKyMgZGVmaW5lIFVWX0ZTX09fRElSRUNUICAgICAgIDB4MTAwMDAKKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fbWlwc19fKQorIyBkZWZpbmUgVVZfRlNfT19ESVJFQ1QgICAgICAgMHgwODAwMAorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19wb3dlcnBjX18pCisjIGRlZmluZSBVVl9GU19PX0RJUkVDVCAgICAgICAweDIwMDAwCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX3MzOTB4X18pCisjIGRlZmluZSBVVl9GU19PX0RJUkVDVCAgICAgICAweDA0MDAwCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKQorIyBkZWZpbmUgVVZfRlNfT19ESVJFQ1QgICAgICAgMHgwNDAwMAorI2VsaWYgZGVmaW5lZChPX0RJUkVDVCkKICMgZGVmaW5lIFVWX0ZTX09fRElSRUNUICAgICAgIE9fRElSRUNUCiAjZWxzZQogIyBkZWZpbmUgVVZfRlNfT19ESVJFQ1QgICAgICAgMAogI2VuZGlmCisKICNpZiBkZWZpbmVkKE9fRElSRUNUT1JZKQogIyBkZWZpbmUgVVZfRlNfT19ESVJFQ1RPUlkgICAgT19ESVJFQ1RPUlkKICNlbHNlCkBAIC00OTgsNiArNTEzLDcgQEAKICNlbmRpZgogCiAvKiBmcyBvcGVuKCkgZmxhZ3Mgc3VwcG9ydGVkIG9uIG90aGVyIHBsYXRmb3JtczogKi8KKyNkZWZpbmUgVVZfRlNfT19GSUxFTUFQICAgICAgIDAKICNkZWZpbmUgVVZfRlNfT19SQU5ET00gICAgICAgIDAKICNkZWZpbmUgVVZfRlNfT19TSE9SVF9MSVZFRCAgIDAKICNkZWZpbmUgVVZfRlNfT19TRVFVRU5USUFMICAgIDAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvdmVyc2lvbi5oIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di92ZXJzaW9uLmgKaW5kZXggOTdmMGJjMi4uZjkzMjQ4MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di92ZXJzaW9uLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di92ZXJzaW9uLmgKQEAgLTI2LDEzICsyNiwxMyBAQAogICogVmVyc2lvbnMgd2l0aCB0aGUgc2FtZSBtYWpvciBudW1iZXIgYXJlIEFCSSBzdGFibGUuIEFQSSBpcyBhbGxvd2VkIHRvCiAgKiBldm9sdmUgYmV0d2VlbiBtaW5vciByZWxlYXNlcywgYnV0IG9ubHkgaW4gYSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3YXkuCiAgKiBNYWtlIHN1cmUgeW91IHVwZGF0ZSB0aGUgLXNvbmFtZSBkaXJlY3RpdmVzIGluIGNvbmZpZ3VyZS5hYwotICogYW5kIHV2Lmd5cCB3aGVuZXZlciB5b3UgYnVtcCBVVl9WRVJTSU9OX01BSk9SIG9yIFVWX1ZFUlNJT05fTUlOT1IgKGJ1dAorICogd2hlbmV2ZXIgeW91IGJ1bXAgVVZfVkVSU0lPTl9NQUpPUiBvciBVVl9WRVJTSU9OX01JTk9SIChidXQKICAqIG5vdCBVVl9WRVJTSU9OX1BBVENILikKICAqLwogCiAjZGVmaW5lIFVWX1ZFUlNJT05fTUFKT1IgMQotI2RlZmluZSBVVl9WRVJTSU9OX01JTk9SIDI5Ci0jZGVmaW5lIFVWX1ZFUlNJT05fUEFUQ0ggMgorI2RlZmluZSBVVl9WRVJTSU9OX01JTk9SIDM3CisjZGVmaW5lIFVWX1ZFUlNJT05fUEFUQ0ggMQogI2RlZmluZSBVVl9WRVJTSU9OX0lTX1JFTEVBU0UgMAogI2RlZmluZSBVVl9WRVJTSU9OX1NVRkZJWCAiZGV2IgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L3dpbi5oIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di93aW4uaAppbmRleCA3Zjc3Y2MyLi5mODYzNTdiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L3dpbi5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvd2luLmgKQEAgLTUyOCw3ICs1MjgsNyBAQAogICAgICAgLyogZW9sIGNvbnZlcnNpb24gc3RhdGUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgdW5zaWduZWQgY2hhciBwcmV2aW91c19lb2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgLyogYW5zaSBwYXJzZXIgc3RhdGUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdW5zaWduZWQgY2hhciBhbnNpX3BhcnNlcl9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdW5zaWduZWQgc2hvcnQgYW5zaV9wYXJzZXJfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgdW5zaWduZWQgY2hhciBhbnNpX2NzaV9hcmdjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgdW5zaWduZWQgc2hvcnQgYW5zaV9jc2lfYXJndls0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgQ09PUkQgc2F2ZWRfcG9zaXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjc5LDYgKzY3OSw3IEBACiAjZGVmaW5lIFVWX0ZTX09fQVBQRU5EICAgICAgIF9PX0FQUEVORAogI2RlZmluZSBVVl9GU19PX0NSRUFUICAgICAgICBfT19DUkVBVAogI2RlZmluZSBVVl9GU19PX0VYQ0wgICAgICAgICBfT19FWENMCisjZGVmaW5lIFVWX0ZTX09fRklMRU1BUCAgICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgVVZfRlNfT19SQU5ET00gICAgICAgX09fUkFORE9NCiAjZGVmaW5lIFVWX0ZTX09fUkRPTkxZICAgICAgIF9PX1JET05MWQogI2RlZmluZSBVVl9GU19PX1JEV1IgICAgICAgICBfT19SRFdSCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvcmFuZG9tLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxYmY3MAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy9yYW5kb20uYwpAQCAtMCwwICsxLDEyMyBAQAorLyogQ29weXJpZ2h0IGxpYnV2IGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgInV2LmgiCisjaW5jbHVkZSAidXYtY29tbW9uLmgiCisKKyNpZmRlZiBfV0lOMzIKKyMgIGluY2x1ZGUgIndpbi9pbnRlcm5hbC5oIgorI2Vsc2UKKyMgIGluY2x1ZGUgInVuaXgvaW50ZXJuYWwuaCIKKyNlbmRpZgorCitzdGF0aWMgaW50IHV2X19yYW5kb20odm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKSB7CisgIGludCByYzsKKworI2lmIGRlZmluZWQoX19QQVNFX18pCisgIHJjID0gdXZfX3JhbmRvbV9yZWFkcGF0aCgiL2Rldi91cmFuZG9tIiwgYnVmLCBidWZsZW4pOworI2VsaWYgZGVmaW5lZChfQUlYKQorICByYyA9IHV2X19yYW5kb21fcmVhZHBhdGgoIi9kZXYvcmFuZG9tIiwgYnVmLCBidWZsZW4pOworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwKKyAgICAgKGRlZmluZWQoX19BTkRST0lEX0FQSV9fKSAmJiBfX0FORFJPSURfQVBJX18gPj0gMjgpCisgIHJjID0gdXZfX3JhbmRvbV9nZXRlbnRyb3B5KGJ1ZiwgYnVmbGVuKTsKKyAgaWYgKHJjID09IFVWX0VOT1NZUykKKyAgICByYyA9IHV2X19yYW5kb21fZGV2dXJhbmRvbShidWYsIGJ1Zmxlbik7CisjZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisgIHJjID0gdXZfX3JhbmRvbV9zeXNjdGwoYnVmLCBidWZsZW4pOworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCisgIHJjID0gdXZfX3JhbmRvbV9nZXRyYW5kb20oYnVmLCBidWZsZW4pOworICBpZiAocmMgPT0gVVZfRU5PU1lTKQorICAgIHJjID0gdXZfX3JhbmRvbV9kZXZ1cmFuZG9tKGJ1ZiwgYnVmbGVuKTsKKyMgaWYgZGVmaW5lZChfX2xpbnV4X18pCisgIHN3aXRjaCAocmMpIHsKKyAgICBjYXNlIFVWX0VBQ0NFUzoKKyAgICBjYXNlIFVWX0VJTzoKKyAgICBjYXNlIFVWX0VMT09QOgorICAgIGNhc2UgVVZfRU1GSUxFOgorICAgIGNhc2UgVVZfRU5GSUxFOgorICAgIGNhc2UgVVZfRU5PRU5UOgorICAgIGNhc2UgVVZfRVBFUk06CisgICAgICByYyA9IHV2X19yYW5kb21fc3lzY3RsKGJ1ZiwgYnVmbGVuKTsKKyAgICAgIGJyZWFrOworICB9CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9XSU4zMikKKyAgdXZfX29uY2VfaW5pdCgpOworICByYyA9IHV2X19yYW5kb21fcnRsZ2VucmFuZG9tKGJ1ZiwgYnVmbGVuKTsKKyNlbHNlCisgIHJjID0gdXZfX3JhbmRvbV9kZXZ1cmFuZG9tKGJ1ZiwgYnVmbGVuKTsKKyNlbmRpZgorCisgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgdm9pZCB1dl9fcmFuZG9tX3dvcmsoc3RydWN0IHV2X193b3JrKiB3KSB7CisgIHV2X3JhbmRvbV90KiByZXE7CisKKyAgcmVxID0gY29udGFpbmVyX29mKHcsIHV2X3JhbmRvbV90LCB3b3JrX3JlcSk7CisgIHJlcS0+c3RhdHVzID0gdXZfX3JhbmRvbShyZXEtPmJ1ZiwgcmVxLT5idWZsZW4pOworfQorCisKK3N0YXRpYyB2b2lkIHV2X19yYW5kb21fZG9uZShzdHJ1Y3QgdXZfX3dvcmsqIHcsIGludCBzdGF0dXMpIHsKKyAgdXZfcmFuZG9tX3QqIHJlcTsKKworICByZXEgPSBjb250YWluZXJfb2YodywgdXZfcmFuZG9tX3QsIHdvcmtfcmVxKTsKKyAgdXZfX3JlcV91bnJlZ2lzdGVyKHJlcS0+bG9vcCwgcmVxKTsKKworICBpZiAoc3RhdHVzID09IDApCisgICAgc3RhdHVzID0gcmVxLT5zdGF0dXM7CisKKyAgcmVxLT5jYihyZXEsIHN0YXR1cywgcmVxLT5idWYsIHJlcS0+YnVmbGVuKTsKK30KKworCitpbnQgdXZfcmFuZG9tKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgdXZfcmFuZG9tX3QqIHJlcSwKKyAgICAgICAgICAgICAgdm9pZCAqYnVmLAorICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncywKKyAgICAgICAgICAgICAgdXZfcmFuZG9tX2NiIGNiKSB7CisgIGlmIChidWZsZW4gPiAweDdGRkZGRkZGdSkKKyAgICByZXR1cm4gVVZfRTJCSUc7CisKKyAgaWYgKGZsYWdzICE9IDApCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICBpZiAoY2IgPT0gTlVMTCkKKyAgICByZXR1cm4gdXZfX3JhbmRvbShidWYsIGJ1Zmxlbik7CisKKyAgdXZfX3JlcV9pbml0KGxvb3AsIHJlcSwgVVZfUkFORE9NKTsKKyAgcmVxLT5sb29wID0gbG9vcDsKKyAgcmVxLT5zdGF0dXMgPSAwOworICByZXEtPmNiID0gY2I7CisgIHJlcS0+YnVmID0gYnVmOworICByZXEtPmJ1ZmxlbiA9IGJ1ZmxlbjsKKworICB1dl9fd29ya19zdWJtaXQobG9vcCwKKyAgICAgICAgICAgICAgICAgICZyZXEtPndvcmtfcmVxLAorICAgICAgICAgICAgICAgICAgVVZfX1dPUktfQ1BVLAorICAgICAgICAgICAgICAgICAgdXZfX3JhbmRvbV93b3JrLAorICAgICAgICAgICAgICAgICAgdXZfX3JhbmRvbV9kb25lKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy90aHJlYWRwb29sLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdGhyZWFkcG9vbC5jCmluZGV4IDdhYTU3NTUuLjA5OTg5MzggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy90aHJlYWRwb29sLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3RocmVhZHBvb2wuYwpAQCAtMTYwLDggKzE2MCw4IEBACiB9CiAKIAordm9pZCB1dl9fdGhyZWFkcG9vbF9jbGVhbnVwKHZvaWQpIHsKICNpZm5kZWYgX1dJTjMyCi1VVl9ERVNUUlVDVE9SKHN0YXRpYyB2b2lkIGNsZWFudXAodm9pZCkpIHsKICAgdW5zaWduZWQgaW50IGk7CiAKICAgaWYgKG50aHJlYWRzID09IDApCkBAIC0xODEsOCArMTgxLDggQEAKIAogICB0aHJlYWRzID0gTlVMTDsKICAgbnRocmVhZHMgPSAwOwotfQogI2VuZGlmCit9CiAKIAogc3RhdGljIHZvaWQgaW5pdF90aHJlYWRzKHZvaWQpIHsKQEAgLTM3Miw2ICszNzIsMTAgQEAKICAgICBsb29wID0gKCh1dl9nZXRuYW1laW5mb190KikgcmVxKS0+bG9vcDsKICAgICB3cmVxID0gJigodXZfZ2V0bmFtZWluZm9fdCopIHJlcSktPndvcmtfcmVxOwogICAgIGJyZWFrOworICBjYXNlIFVWX1JBTkRPTToKKyAgICBsb29wID0gKCh1dl9yYW5kb21fdCopIHJlcSktPmxvb3A7CisgICAgd3JlcSA9ICYoKHV2X3JhbmRvbV90KikgcmVxKS0+d29ya19yZXE7CisgICAgYnJlYWs7CiAgIGNhc2UgVVZfV09SSzoKICAgICBsb29wID0gICgodXZfd29ya190KikgcmVxKS0+bG9vcDsKICAgICB3cmVxID0gJigodXZfd29ya190KikgcmVxKS0+d29ya19yZXE7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdGltZXIuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy90aW1lci5jCmluZGV4IGRkNzhiY2IuLjRjZjRlZDQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy90aW1lci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy90aW1lci5jCkBAIC01MSwxMiArNTEsNyBAQAogICAvKiBDb21wYXJlIHN0YXJ0X2lkIHdoZW4gYm90aCBoYXZlIHRoZSBzYW1lIHRpbWVvdXQuIHN0YXJ0X2lkIGlzCiAgICAqIGFsbG9jYXRlZCB3aXRoIGxvb3AtPnRpbWVyX2NvdW50ZXIgaW4gdXZfdGltZXJfc3RhcnQoKS4KICAgICovCi0gIGlmIChhLT5zdGFydF9pZCA8IGItPnN0YXJ0X2lkKQotICAgIHJldHVybiAxOwotICBpZiAoYi0+c3RhcnRfaWQgPCBhLT5zdGFydF9pZCkKLSAgICByZXR1cm4gMDsKLQotICByZXR1cm4gMDsKKyAgcmV0dXJuIGEtPnN0YXJ0X2lkIDwgYi0+c3RhcnRfaWQ7CiB9CiAKIApAQCAtNzQsNyArNjksNyBAQAogICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlcGVhdCkgewogICB1aW50NjRfdCBjbGFtcGVkX3RpbWVvdXQ7CiAKLSAgaWYgKGNiID09IE5VTEwpCisgIGlmICh1dl9faXNfY2xvc2luZyhoYW5kbGUpIHx8IGNiID09IE5VTEwpCiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKIAogICBpZiAodXZfX2lzX2FjdGl2ZShoYW5kbGUpKQpAQCAtODcsNyArODIsNyBAQAogICBoYW5kbGUtPnRpbWVyX2NiID0gY2I7CiAgIGhhbmRsZS0+dGltZW91dCA9IGNsYW1wZWRfdGltZW91dDsKICAgaGFuZGxlLT5yZXBlYXQgPSByZXBlYXQ7Ci0gIC8qIHN0YXJ0X2lkIGlzIHRoZSBzZWNvbmQgaW5kZXggdG8gYmUgY29tcGFyZWQgaW4gdXZfX3RpbWVyX2NtcCgpICovCisgIC8qIHN0YXJ0X2lkIGlzIHRoZSBzZWNvbmQgaW5kZXggdG8gYmUgY29tcGFyZWQgaW4gdGltZXJfbGVzc190aGFuKCkgKi8KICAgaGFuZGxlLT5zdGFydF9pZCA9IGhhbmRsZS0+bG9vcC0+dGltZXJfY291bnRlcisrOwogCiAgIGhlYXBfaW5zZXJ0KHRpbWVyX2hlYXAoaGFuZGxlLT5sb29wKSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FpeC1jb21tb24uYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FpeC1jb21tb24uYwppbmRleCBlOTY5N2U5Li40NGM4N2IxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9haXgtY29tbW9uLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYWl4LWNvbW1vbi5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW42X3Zhci5oPgogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KQEAgLTE1NSwxNDQgKzE1NiwzIEBACiAgIH0KIH0KIAotdm9pZCB1dl9mcmVlX2NwdV9pbmZvKHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvcywgaW50IGNvdW50KSB7Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKLSAgfQotCi0gIHV2X19mcmVlKGNwdV9pbmZvcyk7Ci19Ci0KLQotaW50IHV2X2ludGVyZmFjZV9hZGRyZXNzZXModXZfaW50ZXJmYWNlX2FkZHJlc3NfdCoqIGFkZHJlc3NlcywgaW50KiBjb3VudCkgewotICB1dl9pbnRlcmZhY2VfYWRkcmVzc190KiBhZGRyZXNzOwotICBpbnQgc29ja2ZkLCBpbmV0Niwgc2l6ZSA9IDE7Ci0gIHN0cnVjdCBpZmNvbmYgaWZjOwotICBzdHJ1Y3QgaWZyZXEgKmlmciwgKnAsIGZsZzsKLSAgc3RydWN0IHNvY2thZGRyX2RsKiBzYV9hZGRyOwotCi0gICpjb3VudCA9IDA7Ci0gICphZGRyZXNzZXMgPSBOVUxMOwotCi0gIGlmICgwID4gKHNvY2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX0lQKSkpIHsKLSAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0gIH0KLQotICBpZiAoaW9jdGwoc29ja2ZkLCBTSU9DR1NJWklGQ09ORiwgJnNpemUpID09IC0xKSB7Ci0gICAgdXZfX2Nsb3NlKHNvY2tmZCk7Ci0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotICB9Ci0KLSAgaWZjLmlmY19yZXEgPSAoc3RydWN0IGlmcmVxKil1dl9fbWFsbG9jKHNpemUpOwotICBpZmMuaWZjX2xlbiA9IHNpemU7Ci0gIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHSUZDT05GLCAmaWZjKSA9PSAtMSkgewotICAgIHV2X19jbG9zZShzb2NrZmQpOwotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLSAgfQotCi0jZGVmaW5lIEFERFJfU0laRShwKSBNQVgoKHApLnNhX2xlbiwgc2l6ZW9mKHApKQotCi0gIC8qIENvdW50IGFsbCB1cCBhbmQgcnVubmluZyBpcHY0L2lwdjYgYWRkcmVzc2VzICovCi0gIGlmciA9IGlmYy5pZmNfcmVxOwotICB3aGlsZSAoKGNoYXIqKWlmciA8IChjaGFyKilpZmMuaWZjX3JlcSArIGlmYy5pZmNfbGVuKSB7Ci0gICAgcCA9IGlmcjsKLSAgICBpZnIgPSAoc3RydWN0IGlmcmVxKikKLSAgICAgICgoY2hhciopaWZyICsgc2l6ZW9mKGlmci0+aWZyX25hbWUpICsgQUREUl9TSVpFKGlmci0+aWZyX2FkZHIpKTsKLQotICAgIGlmICghKHAtPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiB8fAotICAgICAgICAgIHAtPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgbWVtY3B5KGZsZy5pZnJfbmFtZSwgcC0+aWZyX25hbWUsIHNpemVvZihmbGcuaWZyX25hbWUpKTsKLSAgICBpZiAoaW9jdGwoc29ja2ZkLCBTSU9DR0lGRkxBR1MsICZmbGcpID09IC0xKSB7Ci0gICAgICB1dl9fY2xvc2Uoc29ja2ZkKTsKLSAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLSAgICB9Ci0KLSAgICBpZiAoIShmbGcuaWZyX2ZsYWdzICYgSUZGX1VQICYmIGZsZy5pZnJfZmxhZ3MgJiBJRkZfUlVOTklORykpCi0gICAgICBjb250aW51ZTsKLQotICAgICgqY291bnQpKys7Ci0gIH0KLQotICBpZiAoKmNvdW50ID09IDApIHsKLSAgICB1dl9fY2xvc2Uoc29ja2ZkKTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8qIEFsbG9jIHRoZSByZXR1cm4gaW50ZXJmYWNlIHN0cnVjdHMgKi8KLSAgKmFkZHJlc3NlcyA9IHV2X19tYWxsb2MoKmNvdW50ICogc2l6ZW9mKHV2X2ludGVyZmFjZV9hZGRyZXNzX3QpKTsKLSAgaWYgKCEoKmFkZHJlc3NlcykpIHsKLSAgICB1dl9fY2xvc2Uoc29ja2ZkKTsKLSAgICByZXR1cm4gVVZfRU5PTUVNOwotICB9Ci0gIGFkZHJlc3MgPSAqYWRkcmVzc2VzOwotCi0gIGlmciA9IGlmYy5pZmNfcmVxOwotICB3aGlsZSAoKGNoYXIqKWlmciA8IChjaGFyKilpZmMuaWZjX3JlcSArIGlmYy5pZmNfbGVuKSB7Ci0gICAgcCA9IGlmcjsKLSAgICBpZnIgPSAoc3RydWN0IGlmcmVxKikKLSAgICAgICgoY2hhciopaWZyICsgc2l6ZW9mKGlmci0+aWZyX25hbWUpICsgQUREUl9TSVpFKGlmci0+aWZyX2FkZHIpKTsKLQotICAgIGlmICghKHAtPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiB8fAotICAgICAgICAgIHAtPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaW5ldDYgPSAocC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQ2KTsKLQotICAgIG1lbWNweShmbGcuaWZyX25hbWUsIHAtPmlmcl9uYW1lLCBzaXplb2YoZmxnLmlmcl9uYW1lKSk7Ci0gICAgaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dJRkZMQUdTLCAmZmxnKSA9PSAtMSkgewotICAgICAgdXZfX2Nsb3NlKHNvY2tmZCk7Ci0gICAgICByZXR1cm4gVVZfRU5PU1lTOwotICAgIH0KLQotICAgIGlmICghKGZsZy5pZnJfZmxhZ3MgJiBJRkZfVVAgJiYgZmxnLmlmcl9mbGFncyAmIElGRl9SVU5OSU5HKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogQWxsIGNvbmRpdGlvbnMgYWJvdmUgbXVzdCBtYXRjaCBjb3VudCBsb29wICovCi0KLSAgICBhZGRyZXNzLT5uYW1lID0gdXZfX3N0cmR1cChwLT5pZnJfbmFtZSk7Ci0KLSAgICBpZiAoaW5ldDYpCi0gICAgICBhZGRyZXNzLT5hZGRyZXNzLmFkZHJlc3M2ID0gKigoc3RydWN0IHNvY2thZGRyX2luNiopICZwLT5pZnJfYWRkcik7Ci0gICAgZWxzZQotICAgICAgYWRkcmVzcy0+YWRkcmVzcy5hZGRyZXNzNCA9ICooKHN0cnVjdCBzb2NrYWRkcl9pbiopICZwLT5pZnJfYWRkcik7Ci0KLSAgICBzYV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9kbCopICZwLT5pZnJfYWRkcjsKLSAgICBtZW1jcHkoYWRkcmVzcy0+cGh5c19hZGRyLCBMTEFERFIoc2FfYWRkciksIHNpemVvZihhZGRyZXNzLT5waHlzX2FkZHIpKTsKLQotICAgIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHSUZORVRNQVNLLCBwKSA9PSAtMSkgewotICAgICAgdXZfX2Nsb3NlKHNvY2tmZCk7Ci0gICAgICByZXR1cm4gVVZfRU5PU1lTOwotICAgIH0KLQotICAgIGlmIChpbmV0NikKLSAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazYgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42KikgJnAtPmlmcl9hZGRyKTsKLSAgICBlbHNlCi0gICAgICBhZGRyZXNzLT5uZXRtYXNrLm5ldG1hc2s0ID0gKigoc3RydWN0IHNvY2thZGRyX2luKikgJnAtPmlmcl9hZGRyKTsKLQotICAgIGFkZHJlc3MtPmlzX2ludGVybmFsID0gZmxnLmlmcl9mbGFncyAmIElGRl9MT09QQkFDSyA/IDEgOiAwOwotCi0gICAgYWRkcmVzcysrOwotICB9Ci0KLSN1bmRlZiBBRERSX1NJWkUKLQotICB1dl9fY2xvc2Uoc29ja2ZkKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCB1dl9mcmVlX2ludGVyZmFjZV9hZGRyZXNzZXModXZfaW50ZXJmYWNlX2FkZHJlc3NfdCogYWRkcmVzc2VzLAotICBpbnQgY291bnQpIHsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICB1dl9fZnJlZShhZGRyZXNzZXNbaV0ubmFtZSk7Ci0gIH0KLQotICB1dl9fZnJlZShhZGRyZXNzZXMpOwotfQotCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9haXguYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FpeC5jCmluZGV4IDFmMzY5MjYuLjZiNDU5NGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FpeC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FpeC5jCkBAIC05MjYsNyArOTI2LDcgQEAKIH0KIAogCi1VVl9ERVNUUlVDVE9SKHN0YXRpYyB2b2lkIGZyZWVfYXJnc19tZW0odm9pZCkpIHsKK3ZvaWQgdXZfX3Byb2Nlc3NfdGl0bGVfY2xlYW51cCh2b2lkKSB7CiAgIHV2X19mcmVlKGFyZ3NfbWVtKTsgIC8qIEtlZXAgdmFsZ3JpbmQgaGFwcHkuICovCiAgIGFyZ3NfbWVtID0gTlVMTDsKIH0KQEAgLTEwMzksNiArMTAzOSwxODYgQEAKIH0KIAogCitpbnQgdXZfaW50ZXJmYWNlX2FkZHJlc3Nlcyh1dl9pbnRlcmZhY2VfYWRkcmVzc190KiogYWRkcmVzc2VzLCBpbnQqIGNvdW50KSB7CisgIHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqIGFkZHJlc3M7CisgIGludCBzb2NrZmQsIHNvY2s2ZmQsIGluZXQ2LCBpLCByLCBzaXplID0gMTsKKyAgc3RydWN0IGlmY29uZiBpZmM7CisgIHN0cnVjdCBpZnJlcSAqaWZyLCAqcCwgZmxnOworICBzdHJ1Y3QgaW42X2lmcmVxIGlmNjsKKyAgc3RydWN0IHNvY2thZGRyX2RsKiBzYV9hZGRyOworCisgIGlmYy5pZmNfcmVxID0gTlVMTDsKKyAgc29jazZmZCA9IC0xOworICByID0gMDsKKyAgKmNvdW50ID0gMDsKKyAgKmFkZHJlc3NlcyA9IE5VTEw7CisKKyAgaWYgKDAgPiAoc29ja2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fSVApKSkgeworICAgIHIgPSBVVl9fRVJSKGVycm5vKTsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKworICBpZiAoMCA+IChzb2NrNmZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX0RHUkFNLCBJUFBST1RPX0lQKSkpIHsKKyAgICByID0gVVZfX0VSUihlcnJubyk7CisgICAgZ290byBjbGVhbnVwOworICB9CisKKyAgaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dTSVpJRkNPTkYsICZzaXplKSA9PSAtMSkgeworICAgIHIgPSBVVl9fRVJSKGVycm5vKTsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKworICBpZmMuaWZjX3JlcSA9IChzdHJ1Y3QgaWZyZXEqKXV2X19tYWxsb2Moc2l6ZSk7CisgIGlmIChpZmMuaWZjX3JlcSA9PSBOVUxMKSB7CisgICAgciA9IFVWX0VOT01FTTsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKyAgaWZjLmlmY19sZW4gPSBzaXplOworICBpZiAoaW9jdGwoc29ja2ZkLCBTSU9DR0lGQ09ORiwgJmlmYykgPT0gLTEpIHsKKyAgICByID0gVVZfX0VSUihlcnJubyk7CisgICAgZ290byBjbGVhbnVwOworICB9CisKKyNkZWZpbmUgQUREUl9TSVpFKHApIE1BWCgocCkuc2FfbGVuLCBzaXplb2YocCkpCisKKyAgLyogQ291bnQgYWxsIHVwIGFuZCBydW5uaW5nIGlwdjQvaXB2NiBhZGRyZXNzZXMgKi8KKyAgaWZyID0gaWZjLmlmY19yZXE7CisgIHdoaWxlICgoY2hhciopaWZyIDwgKGNoYXIqKWlmYy5pZmNfcmVxICsgaWZjLmlmY19sZW4pIHsKKyAgICBwID0gaWZyOworICAgIGlmciA9IChzdHJ1Y3QgaWZyZXEqKQorICAgICAgKChjaGFyKilpZnIgKyBzaXplb2YoaWZyLT5pZnJfbmFtZSkgKyBBRERSX1NJWkUoaWZyLT5pZnJfYWRkcikpOworCisgICAgaWYgKCEocC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQ2IHx8CisgICAgICAgICAgcC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpKQorICAgICAgY29udGludWU7CisKKyAgICBtZW1jcHkoZmxnLmlmcl9uYW1lLCBwLT5pZnJfbmFtZSwgc2l6ZW9mKGZsZy5pZnJfbmFtZSkpOworICAgIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHSUZGTEFHUywgJmZsZykgPT0gLTEpIHsKKyAgICAgIHIgPSBVVl9fRVJSKGVycm5vKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiAoIShmbGcuaWZyX2ZsYWdzICYgSUZGX1VQICYmIGZsZy5pZnJfZmxhZ3MgJiBJRkZfUlVOTklORykpCisgICAgICBjb250aW51ZTsKKworICAgICgqY291bnQpKys7CisgIH0KKworICBpZiAoKmNvdW50ID09IDApCisgICAgZ290byBjbGVhbnVwOworCisgIC8qIEFsbG9jIHRoZSByZXR1cm4gaW50ZXJmYWNlIHN0cnVjdHMgKi8KKyAgKmFkZHJlc3NlcyA9IHV2X19jYWxsb2MoKmNvdW50LCBzaXplb2YoKiphZGRyZXNzZXMpKTsKKyAgaWYgKCEoKmFkZHJlc3NlcykpIHsKKyAgICByID0gVVZfRU5PTUVNOworICAgIGdvdG8gY2xlYW51cDsKKyAgfQorICBhZGRyZXNzID0gKmFkZHJlc3NlczsKKworICBpZnIgPSBpZmMuaWZjX3JlcTsKKyAgd2hpbGUgKChjaGFyKilpZnIgPCAoY2hhciopaWZjLmlmY19yZXEgKyBpZmMuaWZjX2xlbikgeworICAgIHAgPSBpZnI7CisgICAgaWZyID0gKHN0cnVjdCBpZnJlcSopCisgICAgICAoKGNoYXIqKWlmciArIHNpemVvZihpZnItPmlmcl9uYW1lKSArIEFERFJfU0laRShpZnItPmlmcl9hZGRyKSk7CisKKyAgICBpZiAoIShwLT5pZnJfYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgfHwKKyAgICAgICAgICBwLT5pZnJfYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVCkpCisgICAgICBjb250aW51ZTsKKworICAgIGluZXQ2ID0gKHAtPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNik7CisKKyAgICBtZW1jcHkoZmxnLmlmcl9uYW1lLCBwLT5pZnJfbmFtZSwgc2l6ZW9mKGZsZy5pZnJfbmFtZSkpOworICAgIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHSUZGTEFHUywgJmZsZykgPT0gLTEpCisgICAgICBnb3RvIHN5c2Vycm9yOworCisgICAgaWYgKCEoZmxnLmlmcl9mbGFncyAmIElGRl9VUCAmJiBmbGcuaWZyX2ZsYWdzICYgSUZGX1JVTk5JTkcpKQorICAgICAgY29udGludWU7CisKKyAgICAvKiBBbGwgY29uZGl0aW9ucyBhYm92ZSBtdXN0IG1hdGNoIGNvdW50IGxvb3AgKi8KKworICAgIGFkZHJlc3MtPm5hbWUgPSB1dl9fc3RyZHVwKHAtPmlmcl9uYW1lKTsKKworICAgIGlmIChpbmV0NikKKyAgICAgIGFkZHJlc3MtPmFkZHJlc3MuYWRkcmVzczYgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42KikgJnAtPmlmcl9hZGRyKTsKKyAgICBlbHNlCisgICAgICBhZGRyZXNzLT5hZGRyZXNzLmFkZHJlc3M0ID0gKigoc3RydWN0IHNvY2thZGRyX2luKikgJnAtPmlmcl9hZGRyKTsKKworICAgIGlmIChpbmV0NikgeworICAgICAgbWVtc2V0KCZpZjYsIDAsIHNpemVvZihpZjYpKTsKKyAgICAgIHIgPSB1dl9fc3Ryc2NweShpZjYuaWZyX25hbWUsIHAtPmlmcl9uYW1lLCBzaXplb2YoaWY2Lmlmcl9uYW1lKSk7CisgICAgICBpZiAociA9PSBVVl9FMkJJRykKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgciA9IDA7CisgICAgICBtZW1jcHkoJmlmNi5pZnJfQWRkciwgJnAtPmlmcl9hZGRyLCBzaXplb2YoaWY2Lmlmcl9BZGRyKSk7CisgICAgICBpZiAoaW9jdGwoc29jazZmZCwgU0lPQ0dJRk5FVE1BU0s2LCAmaWY2KSA9PSAtMSkKKyAgICAgICAgZ290byBzeXNlcnJvcjsKKyAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazYgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42KikgJmlmNi5pZnJfQWRkcik7CisgICAgICAvKiBFeHBsaWNpdGx5IHNldCBmYW1pbHkgYXMgdGhlIGlvY3RsIGNhbGwgYXBwZWFycyB0byByZXR1cm4gaXQgYXMgMC4gKi8KKyAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dJRk5FVE1BU0ssIHApID09IC0xKQorICAgICAgICBnb3RvIHN5c2Vycm9yOworICAgICAgYWRkcmVzcy0+bmV0bWFzay5uZXRtYXNrNCA9ICooKHN0cnVjdCBzb2NrYWRkcl9pbiopICZwLT5pZnJfYWRkcik7CisgICAgICAvKiBFeHBsaWNpdGx5IHNldCBmYW1pbHkgYXMgdGhlIGlvY3RsIGNhbGwgYXBwZWFycyB0byByZXR1cm4gaXQgYXMgMC4gKi8KKyAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgfQorCisgICAgYWRkcmVzcy0+aXNfaW50ZXJuYWwgPSBmbGcuaWZyX2ZsYWdzICYgSUZGX0xPT1BCQUNLID8gMSA6IDA7CisKKyAgICBhZGRyZXNzKys7CisgIH0KKworICAvKiBGaWxsIGluIHBoeXNpY2FsIGFkZHJlc3Nlcy4gKi8KKyAgaWZyID0gaWZjLmlmY19yZXE7CisgIHdoaWxlICgoY2hhciopaWZyIDwgKGNoYXIqKWlmYy5pZmNfcmVxICsgaWZjLmlmY19sZW4pIHsKKyAgICBwID0gaWZyOworICAgIGlmciA9IChzdHJ1Y3QgaWZyZXEqKQorICAgICAgKChjaGFyKilpZnIgKyBzaXplb2YoaWZyLT5pZnJfbmFtZSkgKyBBRERSX1NJWkUoaWZyLT5pZnJfYWRkcikpOworCisgICAgaWYgKHAtPmlmcl9hZGRyLnNhX2ZhbWlseSAhPSBBRl9MSU5LKQorICAgICAgY29udGludWU7CisKKyAgICBhZGRyZXNzID0gKmFkZHJlc3NlczsKKyAgICBmb3IgKGkgPSAwOyBpIDwgKmNvdW50OyBpKyspIHsKKyAgICAgIGlmIChzdHJjbXAoYWRkcmVzcy0+bmFtZSwgcC0+aWZyX25hbWUpID09IDApIHsKKyAgICAgICAgc2FfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwqKSAmcC0+aWZyX2FkZHI7CisgICAgICAgIG1lbWNweShhZGRyZXNzLT5waHlzX2FkZHIsIExMQUREUihzYV9hZGRyKSwgc2l6ZW9mKGFkZHJlc3MtPnBoeXNfYWRkcikpOworICAgICAgfQorICAgICAgYWRkcmVzcysrOworICAgIH0KKyAgfQorCisjdW5kZWYgQUREUl9TSVpFCisgIGdvdG8gY2xlYW51cDsKKworc3lzZXJyb3I6CisgIHV2X2ZyZWVfaW50ZXJmYWNlX2FkZHJlc3NlcygqYWRkcmVzc2VzLCAqY291bnQpOworICAqYWRkcmVzc2VzID0gTlVMTDsKKyAgKmNvdW50ID0gMDsKKyAgciA9IFVWX0VOT1NZUzsKKworY2xlYW51cDoKKyAgaWYgKHNvY2tmZCAhPSAtMSkKKyAgICB1dl9fY2xvc2Uoc29ja2ZkKTsKKyAgaWYgKHNvY2s2ZmQgIT0gLTEpCisgICAgdXZfX2Nsb3NlKHNvY2s2ZmQpOworICB1dl9fZnJlZShpZmMuaWZjX3JlcSk7CisgIHJldHVybiByOworfQorCisKK3ZvaWQgdXZfZnJlZV9pbnRlcmZhY2VfYWRkcmVzc2VzKHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqIGFkZHJlc3NlcywKKyAgaW50IGNvdW50KSB7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgdXZfX2ZyZWUoYWRkcmVzc2VzW2ldLm5hbWUpOworICB9CisKKyAgdXZfX2ZyZWUoYWRkcmVzc2VzKTsKK30KKworCiB2b2lkIHV2X19wbGF0Zm9ybV9pbnZhbGlkYXRlX2ZkKHV2X2xvb3BfdCogbG9vcCwgaW50IGZkKSB7CiAgIHN0cnVjdCBwb2xsZmQqIGV2ZW50czsKICAgdWludHB0cl90IGk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9hbmRyb2lkLWlmYWRkcnMuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FuZHJvaWQtaWZhZGRycy5jCmluZGV4IDk5ZmIyNWEuLjQ3NjVjYzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FuZHJvaWQtaWZhZGRycy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FuZHJvaWQtaWZhZGRycy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgTmV0bGlua0xpc3QKIHsKQEAgLTQ2OSwxMiArNDcwLDE0IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgSUZBX0FERFJFU1M6CiAgICAgICAgICAgICBjYXNlIElGQV9MT0NBTDoKKyAgICAgICAgICAgICAgICBsX2FkZHJTaXplICs9IE5MTVNHX0FMSUdOKGNhbGNBZGRyTGVuKGxfaW5mby0+aWZhX2ZhbWlseSwgbF9ydGFEYXRhU2l6ZSkpOwogICAgICAgICAgICAgICAgIGlmKChsX2luZm8tPmlmYV9mYW1pbHkgPT0gQUZfSU5FVCB8fCBsX2luZm8tPmlmYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmICFsX2FkZGVkTmV0bWFzaykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgbmV0bWFzayAqLwogICAgICAgICAgICAgICAgICAgICBsX2FkZHJTaXplICs9IE5MTVNHX0FMSUdOKGNhbGNBZGRyTGVuKGxfaW5mby0+aWZhX2ZhbWlseSwgbF9ydGFEYXRhU2l6ZSkpOwogICAgICAgICAgICAgICAgICAgICBsX2FkZGVkTmV0bWFzayA9IDE7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJRkFfQlJPQURDQVNUOgogICAgICAgICAgICAgICAgIGxfYWRkclNpemUgKz0gTkxNU0dfQUxJR04oY2FsY0FkZHJMZW4obF9pbmZvLT5pZmFfZmFtaWx5LCBsX3J0YURhdGFTaXplKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9hc3luYy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYXN5bmMuYwppbmRleCBhNWM0N2JjLi41ZjU4ZmI4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9hc3luYy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FzeW5jLmMKQEAgLTMyLDEwICszMiwxNCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNjaGVkLmg+ICAvKiBzY2hlZF95aWVsZCgpICovCisKKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxzeXMvZXZlbnRmZC5oPgorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHV2X19hc3luY19zZW5kKHV2X2xvb3BfdCogbG9vcCk7CiBzdGF0aWMgaW50IHV2X19hc3luY19zdGFydCh1dl9sb29wX3QqIGxvb3ApOwotc3RhdGljIGludCB1dl9fYXN5bmNfZXZlbnRmZCh2b2lkKTsKIAogCiBpbnQgdXZfYXN5bmNfaW5pdCh1dl9sb29wX3QqIGxvb3AsIHV2X2FzeW5jX3QqIGhhbmRsZSwgdXZfYXN5bmNfY2IgYXN5bmNfY2IpIHsKQEAgLTc4LDIwICs4MiwzMiBAQAogCiAvKiBPbmx5IGNhbGwgdGhpcyBmcm9tIHRoZSBldmVudCBsb29wIHRocmVhZC4gKi8KIHN0YXRpYyBpbnQgdXZfX2FzeW5jX3NwaW4odXZfYXN5bmNfdCogaGFuZGxlKSB7CisgIGludCBpOwogICBpbnQgcmM7CiAKICAgZm9yICg7OykgewotICAgIC8qIHJjPTAgLS0gaGFuZGxlIGlzIG5vdCBwZW5kaW5nLgotICAgICAqIHJjPTEgLS0gaGFuZGxlIGlzIHBlbmRpbmcsIG90aGVyIHRocmVhZCBpcyBzdGlsbCB3b3JraW5nIHdpdGggaXQuCi0gICAgICogcmM9MiAtLSBoYW5kbGUgaXMgcGVuZGluZywgb3RoZXIgdGhyZWFkIGlzIGRvbmUuCisgICAgLyogOTk3IGlzIG5vdCBjb21wbGV0ZWx5IGNob3NlbiBhdCByYW5kb20uIEl0J3MgYSBwcmltZSBudW1iZXIsIGFjeWNsaWNhbAorICAgICAqIGJ5IG5hdHVyZSwgYW5kIHNob3VsZCB0aGVyZWZvcmUgaG9wZWZ1bGx5IGRhbXBlbiBzeW1wYXRoZXRpYyByZXNvbmFuY2UuCiAgICAgICovCi0gICAgcmMgPSBjbXB4Y2hnaSgmaGFuZGxlLT5wZW5kaW5nLCAyLCAwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgOTk3OyBpKyspIHsKKyAgICAgIC8qIHJjPTAgLS0gaGFuZGxlIGlzIG5vdCBwZW5kaW5nLgorICAgICAgICogcmM9MSAtLSBoYW5kbGUgaXMgcGVuZGluZywgb3RoZXIgdGhyZWFkIGlzIHN0aWxsIHdvcmtpbmcgd2l0aCBpdC4KKyAgICAgICAqIHJjPTIgLS0gaGFuZGxlIGlzIHBlbmRpbmcsIG90aGVyIHRocmVhZCBpcyBkb25lLgorICAgICAgICovCisgICAgICByYyA9IGNtcHhjaGdpKCZoYW5kbGUtPnBlbmRpbmcsIDIsIDApOwogCi0gICAgaWYgKHJjICE9IDEpCi0gICAgICByZXR1cm4gcmM7CisgICAgICBpZiAocmMgIT0gMSkKKyAgICAgICAgcmV0dXJuIHJjOwogCi0gICAgLyogT3RoZXIgdGhyZWFkIGlzIGJ1c3kgd2l0aCB0aGlzIGhhbmRsZSwgc3BpbiB1bnRpbCBpdCdzIGRvbmUuICovCi0gICAgY3B1X3JlbGF4KCk7CisgICAgICAvKiBPdGhlciB0aHJlYWQgaXMgYnVzeSB3aXRoIHRoaXMgaGFuZGxlLCBzcGluIHVudGlsIGl0J3MgZG9uZS4gKi8KKyAgICAgIGNwdV9yZWxheCgpOworICAgIH0KKworICAgIC8qIFlpZWxkIHRoZSBDUFUuIFdlIG1heSBoYXZlIHByZWVtcHRlZCB0aGUgb3RoZXIgdGhyZWFkIHdoaWxlIGl0J3MKKyAgICAgKiBpbnNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGlmIGl0J3MgcnVubmluZyBvbiB0aGUgc2FtZSBDUFUKKyAgICAgKiBhcyB1cywgd2UnbGwganVzdCBidXJuIENQVSBjeWNsZXMgdW50aWwgdGhlIGVuZCBvZiBvdXIgdGltZSBzbGljZS4KKyAgICAgKi8KKyAgICBzY2hlZF95aWVsZCgpOwogICB9CiB9CiAKQEAgLTE5MCwzNiArMjA2LDE4IEBACiAgIGlmIChsb29wLT5hc3luY19pb193YXRjaGVyLmZkICE9IC0xKQogICAgIHJldHVybiAwOwogCi0gIGVyciA9IHV2X19hc3luY19ldmVudGZkKCk7Ci0gIGlmIChlcnIgPj0gMCkgewotICAgIHBpcGVmZFswXSA9IGVycjsKLSAgICBwaXBlZmRbMV0gPSAtMTsKLSAgfQotICBlbHNlIGlmIChlcnIgPT0gVVZfRU5PU1lTKSB7Ci0gICAgZXJyID0gdXZfX21ha2VfcGlwZShwaXBlZmQsIFVWX19GX05PTkJMT0NLKTsKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSAgICAvKiBTYXZlIGEgZmlsZSBkZXNjcmlwdG9yIGJ5IG9wZW5pbmcgb25lIG9mIHRoZSBwaXBlIGRlc2NyaXB0b3JzIGFzCi0gICAgICogcmVhZC93cml0ZSB0aHJvdWdoIHRoZSBwcm9jZnMuICBUaGF0IGZpbGUgZGVzY3JpcHRvciBjYW4gdGhlbgotICAgICAqIGZ1bmN0aW9uIGFzIGJvdGggZW5kcyBvZiB0aGUgcGlwZS4KLSAgICAgKi8KLSAgICBpZiAoZXJyID09IDApIHsKLSAgICAgIGNoYXIgYnVmWzMyXTsKLSAgICAgIGludCBmZDsKKyNpZmRlZiBfX2xpbnV4X18KKyAgZXJyID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyB8IEVGRF9OT05CTE9DSyk7CisgIGlmIChlcnIgPCAwKQorICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIi9wcm9jL3NlbGYvZmQvJWQiLCBwaXBlZmRbMF0pOwotICAgICAgZmQgPSB1dl9fb3Blbl9jbG9leGVjKGJ1ZiwgT19SRFdSKTsKLSAgICAgIGlmIChmZCA+PSAwKSB7Ci0gICAgICAgIHV2X19jbG9zZShwaXBlZmRbMF0pOwotICAgICAgICB1dl9fY2xvc2UocGlwZWZkWzFdKTsKLSAgICAgICAgcGlwZWZkWzBdID0gZmQ7Ci0gICAgICAgIHBpcGVmZFsxXSA9IGZkOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotICB9Ci0KKyAgcGlwZWZkWzBdID0gZXJyOworICBwaXBlZmRbMV0gPSAtMTsKKyNlbHNlCisgIGVyciA9IHV2X19tYWtlX3BpcGUocGlwZWZkLCBVVl9fRl9OT05CTE9DSyk7CiAgIGlmIChlcnIgPCAwKQogICAgIHJldHVybiBlcnI7CisjZW5kaWYKIAogICB1dl9faW9faW5pdCgmbG9vcC0+YXN5bmNfaW9fd2F0Y2hlciwgdXZfX2FzeW5jX2lvLCBwaXBlZmRbMF0pOwogICB1dl9faW9fc3RhcnQobG9vcCwgJmxvb3AtPmFzeW5jX2lvX3dhdGNoZXIsIFBPTExJTik7CkBAIC0yNTMsNDYgKzI1MSwzIEBACiAgIHV2X19jbG9zZShsb29wLT5hc3luY19pb193YXRjaGVyLmZkKTsKICAgbG9vcC0+YXN5bmNfaW9fd2F0Y2hlci5mZCA9IC0xOwogfQotCi0KLXN0YXRpYyBpbnQgdXZfX2FzeW5jX2V2ZW50ZmQodm9pZCkgewotI2lmIGRlZmluZWQoX19saW51eF9fKQotICBzdGF0aWMgaW50IG5vX2V2ZW50ZmQyOwotICBzdGF0aWMgaW50IG5vX2V2ZW50ZmQ7Ci0gIGludCBmZDsKLQotICBpZiAobm9fZXZlbnRmZDIpCi0gICAgZ290byBza2lwX2V2ZW50ZmQyOwotCi0gIGZkID0gdXZfX2V2ZW50ZmQyKDAsIFVWX19FRkRfQ0xPRVhFQyB8IFVWX19FRkRfTk9OQkxPQ0spOwotICBpZiAoZmQgIT0gLTEpCi0gICAgcmV0dXJuIGZkOwotCi0gIGlmIChlcnJubyAhPSBFTk9TWVMpCi0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotCi0gIG5vX2V2ZW50ZmQyID0gMTsKLQotc2tpcF9ldmVudGZkMjoKLQotICBpZiAobm9fZXZlbnRmZCkKLSAgICBnb3RvIHNraXBfZXZlbnRmZDsKLQotICBmZCA9IHV2X19ldmVudGZkKDApOwotICBpZiAoZmQgIT0gLTEpIHsKLSAgICB1dl9fY2xvZXhlYyhmZCwgMSk7Ci0gICAgdXZfX25vbmJsb2NrKGZkLCAxKTsKLSAgICByZXR1cm4gZmQ7Ci0gIH0KLQotICBpZiAoZXJybm8gIT0gRU5PU1lTKQotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLQotICBub19ldmVudGZkID0gMTsKLQotc2tpcF9ldmVudGZkOgotCi0jZW5kaWYKLQotICByZXR1cm4gVVZfRU5PU1lTOwotfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYXRvbWljLW9wcy5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYXRvbWljLW9wcy5oCmluZGV4IDk5NWFjYTYuLjI1MThhMDYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2F0b21pYy1vcHMuaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9hdG9taWMtb3BzLmgKQEAgLTM2LDEwICszNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKG5ld3ZhbCksICIwIiAob2xkdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgIHJldHVybiBvdXQ7Ci0jZWxpZiBkZWZpbmVkKF9BSVgpICYmIChkZWZpbmVkKF9feGxDX18pIHx8IGRlZmluZWQoX19pYm14bF9fKSkKLSAgY29uc3QgaW50IG91dCA9ICgqKHZvbGF0aWxlIGludCopIHB0cik7Ci0gIF9fY29tcGFyZV9hbmRfc3dhcChwdHIsICZvbGR2YWwsIG5ld3ZhbCk7Ci0gIHJldHVybiBvdXQ7CisjZWxpZiBkZWZpbmVkKF9BSVgpICYmIGRlZmluZWQoX19pYm14bF9fKQorICAvKiBGSVhNRTogVGhpcyBpcyBub3QgYWN0dWFsbHkgYXRvbWljIGJ1dCBYTENsYW5nIDE2LjEgZm9yIEFJWAorICAgICBkb2VzIG5vdCBwcm92aWRlIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCBvciBhbiBlcXVpdmFsZW50LgorICAgICBJdHMgZG9jdW1lbnRhdGlvbiBzdWdnZXN0cyB1c2luZyBDKysxMSBhdG9taWNzIGJ1dCB0aGlzIGlzIEMuICAqLworICBfX2NvbXBhcmVfYW5kX3N3YXAoKHZvbGF0aWxlIGludCopcHRyLCAmb2xkdmFsLCBuZXd2YWwpOworICByZXR1cm4gb2xkdmFsOwogI2VsaWYgZGVmaW5lZChfX01WU19fKQogICB1bnNpZ25lZCBpbnQgb3A0OwogICBpZiAoX19wbG9fQ1NTVChwdHIsICh1bnNpZ25lZCBpbnQqKSAmb2xkdmFsLCBuZXd2YWwsCkBAIC01Nyw2ICs1OSw4IEBACiBVVl9VTlVTRUQoc3RhdGljIHZvaWQgY3B1X3JlbGF4KHZvaWQpKSB7CiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJlcDsgbm9wIik7ICAvKiBhLmsuYS4gUEFVU0UgKi8KKyNlbGlmIChkZWZpbmVkKF9fYXJtX18pICYmIF9fQVJNX0FSQ0ggPj0gNykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKKyAgX19hc21fXyB2b2xhdGlsZSgieWllbGQiKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9ic2QtaWZhZGRycy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYnNkLWlmYWRkcnMuYwppbmRleCAwZDdiYmU2Li5hMzM4NWFmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9ic2QtaWZhZGRycy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2JzZC1pZmFkZHJzLmMKQEAgLTY5LDcgKzY5LDkgQEAKICAgc3RydWN0IGlmYWRkcnMqIGFkZHJzOwogICBzdHJ1Y3QgaWZhZGRycyogZW50OwogICB1dl9pbnRlcmZhY2VfYWRkcmVzc190KiBhZGRyZXNzOworI2lmICEoZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fTVNZU19fKSkKICAgaW50IGk7CisjZW5kaWYKIAogICAqY291bnQgPSAwOwogICAqYWRkcmVzc2VzID0gTlVMTDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2JzZC1wcm9jdGl0bGUuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2JzZC1wcm9jdGl0bGUuYwppbmRleCAwY2U0N2M4Li43MjNiODFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9ic2QtcHJvY3RpdGxlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYnNkLXByb2N0aXRsZS5jCkBAIC0zNyw2ICszNywxMyBAQAogfQogCiAKK3ZvaWQgdXZfX3Byb2Nlc3NfdGl0bGVfY2xlYW51cCh2b2lkKSB7CisgIC8qIFRPRE8oYm5vb3JkaHVpcykgdXZfbXV0ZXhfZGVzdHJveSgmcHJvY2Vzc190aXRsZV9tdXRleCkKKyAgICogYW5kIHJlc2V0IHByb2Nlc3NfdGl0bGVfbXV0ZXhfb25jZT8KKyAgICovCit9CisKKwogY2hhcioqIHV2X3NldHVwX2FyZ3MoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CiAgIHByb2Nlc3NfdGl0bGUgPSBhcmdjID4gMCA/IHV2X19zdHJkdXAoYXJndlswXSkgOiBOVUxMOwogICByZXR1cm4gYXJndjsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2NtYWtlLWJvb3RzdHJhcC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY21ha2UtYm9vdHN0cmFwLmMKaW5kZXggZDQyZmYwNS4uNmNmNDJmYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY21ha2UtYm9vdHN0cmFwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY21ha2UtYm9vdHN0cmFwLmMKQEAgLTEsNiArMSwxMiBAQAogI2luY2x1ZGUgInV2LmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAordm9pZCB1dl9fcHJvY2Vzc190aXRsZV9jbGVhbnVwKHZvaWQpIHsKK30KKwordm9pZCB1dl9fdGhyZWFkcG9vbF9jbGVhbnVwKHZvaWQpIHsKK30KKwogaW50IHV2X190Y3Bfbm9kZWxheShpbnQgZmQsIGludCBvbikgewogICBlcnJubyA9IEVJTlZBTDsKICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY29yZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY29yZS5jCmluZGV4IGNmN2RlYTAuLjdiODBlZDUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2NvcmUuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9jb3JlLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4gIC8qIE9fQ0xPRVhFQyAqLwogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvdW4uaD4KQEAgLTUwLDM3ICs1MCwzNiBAQAogIyBpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2VuZGlmCiAKLSNpZmRlZiBfX0FQUExFX18KLSMgaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4gLyogX05TR2V0RXhlY3V0YWJsZVBhdGggKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICMgaW5jbHVkZSA8c3lzL2ZpbGlvLmg+Ci0jIGlmIGRlZmluZWQoT19DTE9FWEVDKQotIyAgZGVmaW5lIFVWX19PX0NMT0VYRUMgT19DTE9FWEVDCi0jIGVuZGlmCi0jZW5kaWYKKyMgZW5kaWYgLyogZGVmaW5lZChfX0FQUExFX18pICovCisKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhVEFSR0VUX09TX0lQSE9ORQorIyBpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgorIyBpbmNsdWRlIDxtYWNoLW8vZHlsZC5oPiAvKiBfTlNHZXRFeGVjdXRhYmxlUGF0aCAqLworIyBkZWZpbmUgZW52aXJvbiAoKl9OU0dldEVudmlyb24oKSkKKyNlbHNlIC8qIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhVEFSR0VUX09TX0lQSE9ORSAqLworZXh0ZXJuIGNoYXIqKiBlbnZpcm9uOworI2VuZGlmIC8qICEoZGVmaW5lZChfX0FQUExFX18pICYmICFUQVJHRVRfT1NfSVBIT05FKSAqLworCiAKICNpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pICAgICAgfHwgXAogICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgICAgICB8fCBcCiAgICAgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pIHx8IFwKLSAgICBkZWZpbmVkKF9fTmV0QlNEX18pCisgICAgZGVmaW5lZChfX05ldEJTRF9fKSAgICAgICAgIHx8IFwKKyAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKQogIyBpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjIGluY2x1ZGUgPHN5cy9maWxpby5oPgogIyBpbmNsdWRlIDxzeXMvd2FpdC5oPgogIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICMgaW5jbHVkZSA8c3lzL2NwdXNldC5oPgotIyBkZWZpbmUgVVZfX09fQ0xPRVhFQyBPX0NMT0VYRUMKLSMgaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX18gPj0gMTAKKyMgaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKICMgIGRlZmluZSB1dl9fYWNjZXB0NCBhY2NlcHQ0CiAjIGVuZGlmCiAjIGlmIGRlZmluZWQoX19OZXRCU0RfXykKICMgIGRlZmluZSB1dl9fYWNjZXB0NChhLCBiLCBjLCBkKSBwYWNjZXB0KChhKSwgKGIpLCAoYyksIE5VTEwsIChkKSkKICMgZW5kaWYKLSMgaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF9fID49IDEwKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCi0jICBkZWZpbmUgVVZfX1NPQ0tfTk9OQkxPQ0sgU09DS19OT05CTE9DSwotIyAgZGVmaW5lIFVWX19TT0NLX0NMT0VYRUMgIFNPQ0tfQ0xPRVhFQwotIyBlbmRpZgotIyBpZiAhZGVmaW5lZChGX0RVUDJGRF9DTE9FWEVDKSAmJiBkZWZpbmVkKF9GX0RVUDJGRF9DTE9FWEVDKQotIyAgZGVmaW5lIEZfRFVQMkZEX0NMT0VYRUMgIF9GX0RVUDJGRF9DTE9FWEVDCi0jIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19BTkRST0lEX0FQSV9fKSAmJiBfX0FORFJPSURfQVBJX18gPCAyMQpAQCAtOTIsNyArOTEsOCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fbGludXhfXykKLSNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorIyBpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorIyBkZWZpbmUgdXZfX2FjY2VwdDQgYWNjZXB0NAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgdXZfX3J1bl9wZW5kaW5nKHV2X2xvb3BfdCogbG9vcCk7CkBAIC0xNzUsOSArMTc1LDcgQEAKIAogICBjYXNlIFVWX1NJR05BTDoKICAgICB1dl9fc2lnbmFsX2Nsb3NlKCh1dl9zaWduYWxfdCopIGhhbmRsZSk7Ci0gICAgLyogU2lnbmFsIGhhbmRsZXMgbWF5IG5vdCBiZSBjbG9zZWQgaW1tZWRpYXRlbHkuIFRoZSBzaWduYWwgY29kZSB3aWxsCi0gICAgICogaXRzZWxmIGNsb3NlIHV2X19tYWtlX2Nsb3NlX3BlbmRpbmcgd2hlbmV2ZXIgYXBwcm9wcmlhdGUuICovCi0gICAgcmV0dXJuOworICAgIGJyZWFrOwogCiAgIGRlZmF1bHQ6CiAgICAgYXNzZXJ0KDApOwpAQCAtMjQyLDYgKzI0MCw4IEBACiAKIAogc3RhdGljIHZvaWQgdXZfX2ZpbmlzaF9jbG9zZSh1dl9oYW5kbGVfdCogaGFuZGxlKSB7CisgIHV2X3NpZ25hbF90KiBzaDsKKwogICAvKiBOb3RlOiB3aGlsZSB0aGUgaGFuZGxlIGlzIGluIHRoZSBVVl9IQU5ETEVfQ0xPU0lORyBzdGF0ZSBub3csIGl0J3Mgc3RpbGwKICAgICogcG9zc2libGUgZm9yIGl0IHRvIGJlIGFjdGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB1dl9faXNfYWN0aXZlKCkgcmV0dXJucwogICAgKiB0cnVlLgpAQCAtMjY0LDcgKzI2NCwyMCBAQAogICAgIGNhc2UgVVZfRlNfRVZFTlQ6CiAgICAgY2FzZSBVVl9GU19QT0xMOgogICAgIGNhc2UgVVZfUE9MTDoKKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBVVl9TSUdOQUw6CisgICAgICAvKiBJZiB0aGVyZSBhcmUgYW55IGNhdWdodCBzaWduYWxzICJ0cmFwcGVkIiBpbiB0aGUgc2lnbmFsIHBpcGUsCisgICAgICAgKiB3ZSBjYW4ndCBjYWxsIHRoZSBjbG9zZSBjYWxsYmFjayB5ZXQuIFJlaW5zZXJ0aW5nIHRoZSBoYW5kbGUKKyAgICAgICAqIGludG8gdGhlIGNsb3NpbmcgcXVldWUgbWFrZXMgdGhlIGV2ZW50IGxvb3Agc3BpbiBidXQgdGhhdCdzCisgICAgICAgKiBva2F5IGJlY2F1c2Ugd2Ugb25seSBuZWVkIHRvIGRlbGl2ZXIgdGhlIHBlbmRpbmcgZXZlbnRzLgorICAgICAgICovCisgICAgICBzaCA9ICh1dl9zaWduYWxfdCopIGhhbmRsZTsKKyAgICAgIGlmIChzaC0+Y2F1Z2h0X3NpZ25hbHMgPiBzaC0+ZGlzcGF0Y2hlZF9zaWduYWxzKSB7CisgICAgICAgIGhhbmRsZS0+ZmxhZ3MgXj0gVVZfSEFORExFX0NMT1NFRDsKKyAgICAgICAgdXZfX21ha2VfY2xvc2VfcGVuZGluZyhoYW5kbGUpOyAgLyogQmFjayBpbnRvIHRoZSBxdWV1ZS4gKi8KKyAgICAgICAgcmV0dXJuOworICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVWX05BTUVEX1BJUEU6CkBAIC00NjgsNTIgKzQ4MSwzMiBAQAogICBpbnQgcGVlcmZkOwogICBpbnQgZXJyOwogCisgICh2b2lkKSAmZXJyOwogICBhc3NlcnQoc29ja2ZkID49IDApOwogCi0gIHdoaWxlICgxKSB7Ci0jaWYgZGVmaW5lZChfX2xpbnV4X18pICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCi0gICAgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF9fID49IDEwKSB8fCBcCi0gICAgZGVmaW5lZChfX05ldEJTRF9fKQotICAgIHN0YXRpYyBpbnQgbm9fYWNjZXB0NDsKKyAgZG8KKyNpZmRlZiB1dl9fYWNjZXB0NAorICAgIHBlZXJmZCA9IHV2X19hY2NlcHQ0KHNvY2tmZCwgTlVMTCwgTlVMTCwgU09DS19OT05CTE9DS3xTT0NLX0NMT0VYRUMpOworI2Vsc2UKKyAgICBwZWVyZmQgPSBhY2NlcHQoc29ja2ZkLCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorICB3aGlsZSAocGVlcmZkID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKIAotICAgIGlmIChub19hY2NlcHQ0KQotICAgICAgZ290byBza2lwOworICBpZiAocGVlcmZkID09IC0xKQorICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICAgIHBlZXJmZCA9IHV2X19hY2NlcHQ0KHNvY2tmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVVZfX1NPQ0tfTk9OQkxPQ0t8VVZfX1NPQ0tfQ0xPRVhFQyk7Ci0gICAgaWYgKHBlZXJmZCAhPSAtMSkKLSAgICAgIHJldHVybiBwZWVyZmQ7CisjaWZuZGVmIHV2X19hY2NlcHQ0CisgIGVyciA9IHV2X19jbG9leGVjKHBlZXJmZCwgMSk7CisgIGlmIChlcnIgPT0gMCkKKyAgICBlcnIgPSB1dl9fbm9uYmxvY2socGVlcmZkLCAxKTsKIAotICAgIGlmIChlcnJubyA9PSBFSU5UUikKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKGVycm5vICE9IEVOT1NZUykKLSAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLQotICAgIG5vX2FjY2VwdDQgPSAxOwotc2tpcDoKKyAgaWYgKGVyciAhPSAwKSB7CisgICAgdXZfX2Nsb3NlKHBlZXJmZCk7CisgICAgcmV0dXJuIGVycjsKKyAgfQogI2VuZGlmCiAKLSAgICBwZWVyZmQgPSBhY2NlcHQoc29ja2ZkLCBOVUxMLCBOVUxMKTsKLSAgICBpZiAocGVlcmZkID09IC0xKSB7Ci0gICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotICAgIH0KLQotICAgIGVyciA9IHV2X19jbG9leGVjKHBlZXJmZCwgMSk7Ci0gICAgaWYgKGVyciA9PSAwKQotICAgICAgZXJyID0gdXZfX25vbmJsb2NrKHBlZXJmZCwgMSk7Ci0KLSAgICBpZiAoZXJyKSB7Ci0gICAgICB1dl9fY2xvc2UocGVlcmZkKTsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBlZXJmZDsKLSAgfQorICByZXR1cm4gcGVlcmZkOwogfQogCiAKQEAgLTUyOSw3ICs1MjIsNyBAQAogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZG9sbGFyLWluLWlkZW50aWZpZXItZXh0ZW5zaW9uIgotI2lmIGRlZmluZWQoX19MUDY0X18pCisjaWYgZGVmaW5lZChfX0xQNjRfXykgfHwgVEFSR0VUX09TX0lQSE9ORQogICBleHRlcm4gaW50IGNsb3NlJE5PQ0FOQ0VMKGludCk7CiAgIHJldHVybiBjbG9zZSROT0NBTkNFTChmZCk7CiAjZWxzZQpAQCAtNzA0LDE2ICs2OTcsMzggQEAKIAogCiBpbnQgdXZfY3dkKGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBzaXplKSB7CisgIGNoYXIgc2NyYXRjaFsxICsgVVZfX1BBVEhfTUFYXTsKKwogICBpZiAoYnVmZmVyID09IE5VTEwgfHwgc2l6ZSA9PSBOVUxMKQogICAgIHJldHVybiBVVl9FSU5WQUw7CiAKLSAgaWYgKGdldGN3ZChidWZmZXIsICpzaXplKSA9PSBOVUxMKQorICAvKiBUcnkgdG8gcmVhZCBkaXJlY3RseSBpbnRvIHRoZSB1c2VyJ3MgYnVmZmVyIGZpcnN0Li4uICovCisgIGlmIChnZXRjd2QoYnVmZmVyLCAqc2l6ZSkgIT0gTlVMTCkKKyAgICBnb3RvIGZpeHVwOworCisgIGlmIChlcnJubyAhPSBFUkFOR0UpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCisgIC8qIC4uLm9yIGludG8gc2NyYXRjaCBzcGFjZSBpZiB0aGUgdXNlcidzIGJ1ZmZlciBpcyB0b28gc21hbGwKKyAgICogc28gd2UgY2FuIHJlcG9ydCBob3cgbXVjaCBzcGFjZSB0byBwcm92aWRlIG9uIHRoZSBuZXh0IHRyeS4KKyAgICovCisgIGlmIChnZXRjd2Qoc2NyYXRjaCwgc2l6ZW9mKHNjcmF0Y2gpKSA9PSBOVUxMKQorICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKworICBidWZmZXIgPSBzY3JhdGNoOworCitmaXh1cDoKKwogICAqc2l6ZSA9IHN0cmxlbihidWZmZXIpOworCiAgIGlmICgqc2l6ZSA+IDEgJiYgYnVmZmVyWypzaXplIC0gMV0gPT0gJy8nKSB7Ci0gICAgYnVmZmVyWypzaXplLTFdID0gJ1wwJzsKLSAgICAoKnNpemUpLS07CisgICAgKnNpemUgLT0gMTsKKyAgICBidWZmZXJbKnNpemVdID0gJ1wwJzsKKyAgfQorCisgIGlmIChidWZmZXIgPT0gc2NyYXRjaCkgeworICAgICpzaXplICs9IDE7CisgICAgcmV0dXJuIFVWX0VOT0JVRlM7CiAgIH0KIAogICByZXR1cm4gMDsKQEAgLTgyMyw4ICs4MzgsOCBAQAogICB9CiAKICAgbndhdGNoZXJzID0gbmV4dF9wb3dlcl9vZl90d28obGVuICsgMikgLSAyOwotICB3YXRjaGVycyA9IHV2X19yZWFsbG9jKGxvb3AtPndhdGNoZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgIChud2F0Y2hlcnMgKyAyKSAqIHNpemVvZihsb29wLT53YXRjaGVyc1swXSkpOworICB3YXRjaGVycyA9IHV2X19yZWFsbG9jZihsb29wLT53YXRjaGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG53YXRjaGVycyArIDIpICogc2l6ZW9mKGxvb3AtPndhdGNoZXJzWzBdKSk7CiAKICAgaWYgKHdhdGNoZXJzID09IE5VTEwpCiAgICAgYWJvcnQoKTsKQEAgLTk3NywyNCArOTkyLDE3IEBACiAKIAogaW50IHV2X19vcGVuX2Nsb2V4ZWMoY29uc3QgY2hhciogcGF0aCwgaW50IGZsYWdzKSB7Ci0gIGludCBlcnI7CisjaWYgZGVmaW5lZChPX0NMT0VYRUMpCiAgIGludCBmZDsKIAotI2lmIGRlZmluZWQoVVZfX09fQ0xPRVhFQykKLSAgc3RhdGljIGludCBub19jbG9leGVjOworICBmZCA9IG9wZW4ocGF0aCwgZmxhZ3MgfCBPX0NMT0VYRUMpOworICBpZiAoZmQgPT0gLTEpCisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCi0gIGlmICghbm9fY2xvZXhlYykgewotICAgIGZkID0gb3BlbihwYXRoLCBmbGFncyB8IFVWX19PX0NMT0VYRUMpOwotICAgIGlmIChmZCAhPSAtMSkKLSAgICAgIHJldHVybiBmZDsKLQotICAgIGlmIChlcnJubyAhPSBFSU5WQUwpCi0gICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0KLSAgICAvKiBPX0NMT0VYRUMgbm90IHN1cHBvcnRlZC4gKi8KLSAgICBub19jbG9leGVjID0gMTsKLSAgfQotI2VuZGlmCisgIHJldHVybiBmZDsKKyNlbHNlICAvKiBPX0NMT0VYRUMgKi8KKyAgaW50IGVycjsKKyAgaW50IGZkOwogCiAgIGZkID0gb3BlbihwYXRoLCBmbGFncyk7CiAgIGlmIChmZCA9PSAtMSkKQEAgLTEwMDcsNTggKzEwMTUsMzUgQEAKICAgfQogCiAgIHJldHVybiBmZDsKKyNlbmRpZiAgLyogT19DTE9FWEVDICovCiB9CiAKIAogaW50IHV2X19kdXAyX2Nsb2V4ZWMoaW50IG9sZGZkLCBpbnQgbmV3ZmQpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19saW51eF9fKQogICBpbnQgcjsKLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX18gPj0gMTApIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKwogICByID0gZHVwMyhvbGRmZCwgbmV3ZmQsIE9fQ0xPRVhFQyk7CiAgIGlmIChyID09IC0xKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKwogICByZXR1cm4gcjsKLSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoRl9EVVAyRkRfQ0xPRVhFQykKLSAgciA9IGZjbnRsKG9sZGZkLCBGX0RVUDJGRF9DTE9FWEVDLCBuZXdmZCk7Ci0gIGlmIChyICE9IC0xKQotICAgIHJldHVybiByOwotICBpZiAoZXJybm8gIT0gRUlOVkFMKQotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLSAgLyogRmFsbCB0aHJvdWdoLiAqLwotI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCi0gIHN0YXRpYyBpbnQgbm9fZHVwMzsKLSAgaWYgKCFub19kdXAzKSB7Ci0gICAgZG8KLSAgICAgIHIgPSB1dl9fZHVwMyhvbGRmZCwgbmV3ZmQsIFVWX19PX0NMT0VYRUMpOwotICAgIHdoaWxlIChyID09IC0xICYmIGVycm5vID09IEVCVVNZKTsKLSAgICBpZiAociAhPSAtMSkKLSAgICAgIHJldHVybiByOwotICAgIGlmIChlcnJubyAhPSBFTk9TWVMpCi0gICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0gICAgLyogRmFsbCB0aHJvdWdoLiAqLwotICAgIG5vX2R1cDMgPSAxOwotICB9Ci0jZW5kaWYKLSAgewotICAgIGludCBlcnI7Ci0gICAgZG8KLSAgICAgIHIgPSBkdXAyKG9sZGZkLCBuZXdmZCk7Ci0jaWYgZGVmaW5lZChfX2xpbnV4X18pCi0gICAgd2hpbGUgKHIgPT0gLTEgJiYgZXJybm8gPT0gRUJVU1kpOwogI2Vsc2UKLSAgICB3aGlsZSAoMCk7ICAvKiBOZXZlciByZXRyeS4gKi8KLSNlbmRpZgorICBpbnQgZXJyOworICBpbnQgcjsKIAotICAgIGlmIChyID09IC0xKQotICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworICByID0gZHVwMihvbGRmZCwgbmV3ZmQpOyAgLyogTmV2ZXIgcmV0cnkuICovCisgIGlmIChyID09IC0xKQorICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICAgIGVyciA9IHV2X19jbG9leGVjKG5ld2ZkLCAxKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICB1dl9fY2xvc2UobmV3ZmQpOwotICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gcjsKKyAgZXJyID0gdXZfX2Nsb2V4ZWMobmV3ZmQsIDEpOworICBpZiAoZXJyICE9IDApIHsKKyAgICB1dl9fY2xvc2UobmV3ZmQpOworICAgIHJldHVybiBlcnI7CiAgIH0KKworICByZXR1cm4gcjsKKyNlbmRpZgogfQogCiAKQEAgLTEyNjUsNiArMTI1MCw2MiBAQAogfQogCiAKK2ludCB1dl9vc19lbnZpcm9uKHV2X2Vudl9pdGVtX3QqKiBlbnZpdGVtcywgaW50KiBjb3VudCkgeworICBpbnQgaSwgaiwgY250OworICB1dl9lbnZfaXRlbV90KiBlbnZpdGVtOworCisgICplbnZpdGVtcyA9IE5VTEw7CisgICpjb3VudCA9IDA7CisKKyAgZm9yIChpID0gMDsgZW52aXJvbltpXSAhPSBOVUxMOyBpKyspOworCisgICplbnZpdGVtcyA9IHV2X19jYWxsb2MoaSwgc2l6ZW9mKCoqZW52aXRlbXMpKTsKKworICBpZiAoKmVudml0ZW1zID09IE5VTEwpCisgICAgcmV0dXJuIFVWX0VOT01FTTsKKworICBmb3IgKGogPSAwLCBjbnQgPSAwOyBqIDwgaTsgaisrKSB7CisgICAgY2hhciogYnVmOworICAgIGNoYXIqIHB0cjsKKworICAgIGlmIChlbnZpcm9uW2pdID09IE5VTEwpCisgICAgICBicmVhazsKKworICAgIGJ1ZiA9IHV2X19zdHJkdXAoZW52aXJvbltqXSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgZ290byBmYWlsOworCisgICAgcHRyID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKyAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgIHV2X19mcmVlKGJ1Zik7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAqcHRyID0gJ1wwJzsKKworICAgIGVudml0ZW0gPSAmKCplbnZpdGVtcylbY250XTsKKyAgICBlbnZpdGVtLT5uYW1lID0gYnVmOworICAgIGVudml0ZW0tPnZhbHVlID0gcHRyICsgMTsKKworICAgIGNudCsrOworICB9CisKKyAgKmNvdW50ID0gY250OworICByZXR1cm4gMDsKKworZmFpbDoKKyAgZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisgICAgZW52aXRlbSA9ICYoKmVudml0ZW1zKVtjbnRdOworICAgIHV2X19mcmVlKGVudml0ZW0tPm5hbWUpOworICB9CisgIHV2X19mcmVlKCplbnZpdGVtcyk7CisKKyAgKmVudml0ZW1zID0gTlVMTDsKKyAgKmNvdW50ID0gMDsKKyAgcmV0dXJuIFVWX0VOT01FTTsKK30KKworCiBpbnQgdXZfb3NfZ2V0ZW52KGNvbnN0IGNoYXIqIG5hbWUsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBzaXplKSB7CiAgIGNoYXIqIHZhcjsKICAgc2l6ZV90IGxlbjsKQEAgLTE0ODgsMyArMTUyOSwxNyBAQAogICB0di0+dHZfdXNlYyA9IChpbnQzMl90KSB0aW1lLnR2X3VzZWM7CiAgIHJldHVybiAwOwogfQorCit2b2lkIHV2X3NsZWVwKHVuc2lnbmVkIGludCBtc2VjKSB7CisgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0OworICBpbnQgcmM7CisKKyAgdGltZW91dC50dl9zZWMgPSBtc2VjIC8gMTAwMDsKKyAgdGltZW91dC50dl9uc2VjID0gKG1zZWMgJSAxMDAwKSAqIDEwMDAgKiAxMDAwOworCisgIGRvCisgICAgcmMgPSBuYW5vc2xlZXAoJnRpbWVvdXQsICZ0aW1lb3V0KTsKKyAgd2hpbGUgKHJjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKworICBhc3NlcnQocmMgPT0gMCk7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9jeWd3aW4uYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2N5Z3dpbi5jCmluZGV4IDlkYTIwZTIuLjE2OTk1OGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2N5Z3dpbi5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2N5Z3dpbi5jCkBAIC00OCw3ICs0OCw2IEBACiAgIHJldHVybiBVVl9FTk9TWVM7CiB9CiAKLXZvaWQgdXZfZnJlZV9jcHVfaW5mbyh1dl9jcHVfaW5mb190KiBjcHVfaW5mb3MsIGludCBjb3VudCkgewotICAodm9pZCljcHVfaW5mb3M7Ci0gICh2b2lkKWNvdW50OwordWludDY0X3QgdXZfZ2V0X2NvbnN0cmFpbmVkX21lbW9yeSh2b2lkKSB7CisgIHJldHVybiAwOyAgLyogTWVtb3J5IGNvbnN0cmFpbnRzIGFyZSB1bmtub3duLiAqLwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZGFyd2luLXByb2N0aXRsZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZGFyd2luLXByb2N0aXRsZS5jCmluZGV4IGU1MDViZGQuLjUyODgwODMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi1wcm9jdGl0bGUuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9kYXJ3aW4tcHJvY3RpdGxlLmMKQEAgLTIzLDY2ICsyMyw2MSBAQAogCiAjaW5jbHVkZSA8ZGxmY24uaD4KICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgogCiAjaWYgIVRBUkdFVF9PU19JUEhPTkUKLSMgaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjaW5jbHVkZSAiZGFyd2luLXN0dWIuaCIKICNlbmRpZgogCi0jZGVmaW5lIFMocykgcENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgKHMpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpCiAKK3N0YXRpYyBpbnQgdXZfX3B0aHJlYWRfc2V0bmFtZV9ucChjb25zdCBjaGFyKiBuYW1lKSB7CisgIGNoYXIgbmFtZWJ1Zls2NF07ICAvKiBNQVhUSFJFQUROQU1FU0laRSAqLworICBpbnQgZXJyOwogCi1zdGF0aWMgaW50ICgqZHluYW1pY19wdGhyZWFkX3NldG5hbWVfbnApKGNvbnN0IGNoYXIqIG5hbWUpOwotI2lmICFUQVJHRVRfT1NfSVBIT05FCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgKCpwQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZykoQ0ZBbGxvY2F0b3JSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyk7Ci1zdGF0aWMgQ0ZCdW5kbGVSZWYgKCpwQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmllcikoQ0ZTdHJpbmdSZWYpOwotc3RhdGljIHZvaWQgKigqcENGQnVuZGxlR2V0RGF0YVBvaW50ZXJGb3JOYW1lKShDRkJ1bmRsZVJlZiwgQ0ZTdHJpbmdSZWYpOwotc3RhdGljIHZvaWQgKigqcENGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZSkoQ0ZCdW5kbGVSZWYsIENGU3RyaW5nUmVmKTsKLXN0YXRpYyBDRlR5cGVSZWYgKCpwTFNHZXRDdXJyZW50QXBwbGljYXRpb25BU04pKHZvaWQpOwotc3RhdGljIE9TU3RhdHVzICgqcExTU2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbkl0ZW0pKGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlR5cGVSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmKik7Ci1zdGF0aWMgdm9pZCogYXBwbGljYXRpb25fc2VydmljZXNfaGFuZGxlOwotc3RhdGljIHZvaWQqIGNvcmVfZm91bmRhdGlvbl9oYW5kbGU7Ci1zdGF0aWMgQ0ZCdW5kbGVSZWYgbGF1bmNoX3NlcnZpY2VzX2J1bmRsZTsKLXN0YXRpYyBDRlN0cmluZ1JlZiogZGlzcGxheV9uYW1lX2tleTsKLXN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgKCpwQ0ZCdW5kbGVHZXRJbmZvRGljdGlvbmFyeSkoQ0ZCdW5kbGVSZWYpOwotc3RhdGljIENGQnVuZGxlUmVmICgqcENGQnVuZGxlR2V0TWFpbkJ1bmRsZSkodm9pZCk7Ci1zdGF0aWMgQ0ZCdW5kbGVSZWYgaGlfc2VydmljZXNfYnVuZGxlOwotc3RhdGljIE9TU3RhdHVzICgqcFNldEFwcGxpY2F0aW9uSXNEYWVtb24pKGludCk7Ci1zdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmICgqcExTQXBwbGljYXRpb25DaGVja0luKShpbnQsIENGRGljdGlvbmFyeVJlZik7Ci1zdGF0aWMgdm9pZCAoKnBMU1NldEFwcGxpY2F0aW9uTGF1bmNoU2VydmljZXNTZXJ2ZXJDb25uZWN0aW9uU3RhdHVzKSh1aW50NjRfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKTsKKyAgc3RybmNweShuYW1lYnVmLCBuYW1lLCBzaXplb2YobmFtZWJ1ZikgLSAxKTsKKyAgbmFtZWJ1ZltzaXplb2YobmFtZWJ1ZikgLSAxXSA9ICdcMCc7CiAKKyAgZXJyID0gcHRocmVhZF9zZXRuYW1lX25wKG5hbWVidWYpOworICBpZiAoZXJyKQorICAgIHJldHVybiBVVl9fRVJSKGVycik7CiAKLVVWX0RFU1RSVUNUT1Ioc3RhdGljIHZvaWQgdXZfX3NldF9wcm9jZXNzX3RpdGxlX3BsYXRmb3JtX2Zpbmkodm9pZCkpIHsKLSAgaWYgKGNvcmVfZm91bmRhdGlvbl9oYW5kbGUgIT0gTlVMTCkgewotICAgIGRsY2xvc2UoY29yZV9mb3VuZGF0aW9uX2hhbmRsZSk7Ci0gICAgY29yZV9mb3VuZGF0aW9uX2hhbmRsZSA9IE5VTEw7Ci0gIH0KLQotICBpZiAoYXBwbGljYXRpb25fc2VydmljZXNfaGFuZGxlICE9IE5VTEwpIHsKLSAgICBkbGNsb3NlKGFwcGxpY2F0aW9uX3NlcnZpY2VzX2hhbmRsZSk7Ci0gICAgYXBwbGljYXRpb25fc2VydmljZXNfaGFuZGxlID0gTlVMTDsKLSAgfQorICByZXR1cm4gMDsKIH0KLSNlbmRpZiAgLyogIVRBUkdFVF9PU19JUEhPTkUgKi8KIAogCi12b2lkIHV2X19zZXRfcHJvY2Vzc190aXRsZV9wbGF0Zm9ybV9pbml0KHZvaWQpIHsKLSAgLyogcHRocmVhZF9zZXRuYW1lX25wKCkgZmlyc3QgYXBwZWFyZWQgaW4gT1MgWCAxMC42IGFuZCBpT1MgMy4yLiAqLwotICAqKHZvaWQgKiopKCZkeW5hbWljX3B0aHJlYWRfc2V0bmFtZV9ucCkgPQotICAgICAgZGxzeW0oUlRMRF9ERUZBVUxULCAicHRocmVhZF9zZXRuYW1lX25wIik7CitpbnQgdXZfX3NldF9wcm9jZXNzX3RpdGxlKGNvbnN0IGNoYXIqIHRpdGxlKSB7CisjaWYgVEFSR0VUX09TX0lQSE9ORQorICByZXR1cm4gdXZfX3B0aHJlYWRfc2V0bmFtZV9ucCh0aXRsZSk7CisjZWxzZQorICBDRlN0cmluZ1JlZiAoKnBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKShDRkFsbG9jYXRvclJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nRW5jb2RpbmcpOworICBDRkJ1bmRsZVJlZiAoKnBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVyKShDRlN0cmluZ1JlZik7CisgIHZvaWQgKigqcENGQnVuZGxlR2V0RGF0YVBvaW50ZXJGb3JOYW1lKShDRkJ1bmRsZVJlZiwgQ0ZTdHJpbmdSZWYpOworICB2b2lkICooKnBDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUpKENGQnVuZGxlUmVmLCBDRlN0cmluZ1JlZik7CisgIENGVHlwZVJlZiAoKnBMU0dldEN1cnJlbnRBcHBsaWNhdGlvbkFTTikodm9pZCk7CisgIE9TU3RhdHVzICgqcExTU2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbkl0ZW0pKGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZUeXBlUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVJlZiopOworICB2b2lkKiBhcHBsaWNhdGlvbl9zZXJ2aWNlc19oYW5kbGU7CisgIHZvaWQqIGNvcmVfZm91bmRhdGlvbl9oYW5kbGU7CisgIENGQnVuZGxlUmVmIGxhdW5jaF9zZXJ2aWNlc19idW5kbGU7CisgIENGU3RyaW5nUmVmKiBkaXNwbGF5X25hbWVfa2V5OworICBDRkRpY3Rpb25hcnlSZWYgKCpwQ0ZCdW5kbGVHZXRJbmZvRGljdGlvbmFyeSkoQ0ZCdW5kbGVSZWYpOworICBDRkJ1bmRsZVJlZiAoKnBDRkJ1bmRsZUdldE1haW5CdW5kbGUpKHZvaWQpOworICBDRkRpY3Rpb25hcnlSZWYgKCpwTFNBcHBsaWNhdGlvbkNoZWNrSW4pKGludCwgQ0ZEaWN0aW9uYXJ5UmVmKTsKKyAgdm9pZCAoKnBMU1NldEFwcGxpY2F0aW9uTGF1bmNoU2VydmljZXNTZXJ2ZXJDb25uZWN0aW9uU3RhdHVzKSh1aW50NjRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKik7CisgIENGVHlwZVJlZiBhc247CisgIGludCBlcnI7CiAKLSNpZiAhVEFSR0VUX09TX0lQSE9ORQorICBlcnIgPSBVVl9FTk9FTlQ7CiAgIGFwcGxpY2F0aW9uX3NlcnZpY2VzX2hhbmRsZSA9IGRsb3BlbigiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWZXJzaW9ucy9BL0FwcGxpY2F0aW9uU2VydmljZXMiLApAQCAtMTExLDYgKzEwNiw4IEBACiAgICAgZ290byBvdXQ7CiAgIH0KIAorI2RlZmluZSBTKHMpIHBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKE5VTEwsIChzKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KQorCiAgIGxhdW5jaF9zZXJ2aWNlc19idW5kbGUgPQogICAgICAgcENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50aWZpZXIoUygiY29tLmFwcGxlLkxhdW5jaFNlcnZpY2VzIikpOwogCkBAIC0xNDEsNTggKzEzOCw1NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5Iik7CiAgICoodm9pZCAqKikoJnBDRkJ1bmRsZUdldE1haW5CdW5kbGUpID0gZGxzeW0oY29yZV9mb3VuZGF0aW9uX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkJ1bmRsZUdldE1haW5CdW5kbGUiKTsKLQogICBpZiAocENGQnVuZGxlR2V0SW5mb0RpY3Rpb25hcnkgPT0gTlVMTCB8fCBwQ0ZCdW5kbGVHZXRNYWluQnVuZGxlID09IE5VTEwpCiAgICAgZ290byBvdXQ7CiAKLSAgLyogQmxhY2sgMTAuOSBtYWdpYywgdG8gcmVtb3ZlIChOb3QgcmVzcG9uZGluZykgbWFyayBpbiBBY3Rpdml0eSBNb25pdG9yICovCi0gIGhpX3NlcnZpY2VzX2J1bmRsZSA9Ci0gICAgICBwQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmllcihTKCJjb20uYXBwbGUuSElTZXJ2aWNlcyIpKTsKLQotICBpZiAoaGlfc2VydmljZXNfYnVuZGxlID09IE5VTEwpCi0gICAgZ290byBvdXQ7Ci0KLSAgKih2b2lkICoqKSgmcFNldEFwcGxpY2F0aW9uSXNEYWVtb24pID0gcENGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZSgKLSAgICAgIGhpX3NlcnZpY2VzX2J1bmRsZSwKLSAgICAgIFMoIlNldEFwcGxpY2F0aW9uSXNEYWVtb24iKSk7CiAgICoodm9pZCAqKikoJnBMU0FwcGxpY2F0aW9uQ2hlY2tJbikgPSBwQ0ZCdW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKAogICAgICAgbGF1bmNoX3NlcnZpY2VzX2J1bmRsZSwKICAgICAgIFMoIl9MU0FwcGxpY2F0aW9uQ2hlY2tJbiIpKTsKKworICBpZiAocExTQXBwbGljYXRpb25DaGVja0luID09IE5VTEwpCisgICAgZ290byBvdXQ7CisKICAgKih2b2lkICoqKSgmcExTU2V0QXBwbGljYXRpb25MYXVuY2hTZXJ2aWNlc1NlcnZlckNvbm5lY3Rpb25TdGF0dXMpID0KICAgICAgIHBDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUoCiAgICAgICAgICAgbGF1bmNoX3NlcnZpY2VzX2J1bmRsZSwKICAgICAgICAgICBTKCJfTFNTZXRBcHBsaWNhdGlvbkxhdW5jaFNlcnZpY2VzU2VydmVyQ29ubmVjdGlvblN0YXR1cyIpKTsKIAotICBpZiAocFNldEFwcGxpY2F0aW9uSXNEYWVtb24gPT0gTlVMTCB8fAotICAgICAgcExTQXBwbGljYXRpb25DaGVja0luID09IE5VTEwgfHwKLSAgICAgIHBMU1NldEFwcGxpY2F0aW9uTGF1bmNoU2VydmljZXNTZXJ2ZXJDb25uZWN0aW9uU3RhdHVzID09IE5VTEwpIHsKKyAgaWYgKHBMU1NldEFwcGxpY2F0aW9uTGF1bmNoU2VydmljZXNTZXJ2ZXJDb25uZWN0aW9uU3RhdHVzID09IE5VTEwpCisgICAgZ290byBvdXQ7CisKKyAgcExTU2V0QXBwbGljYXRpb25MYXVuY2hTZXJ2aWNlc1NlcnZlckNvbm5lY3Rpb25TdGF0dXMoMCwgTlVMTCk7CisKKyAgLyogQ2hlY2sgaW50byBwcm9jZXNzIG1hbmFnZXI/ISAqLworICBwTFNBcHBsaWNhdGlvbkNoZWNrSW4oLTIsCisgICAgICAgICAgICAgICAgICAgICAgICBwQ0ZCdW5kbGVHZXRJbmZvRGljdGlvbmFyeShwQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCkpKTsKKworICBhc24gPSBwTFNHZXRDdXJyZW50QXBwbGljYXRpb25BU04oKTsKKworICBlcnIgPSBVVl9FQlVTWTsKKyAgaWYgKGFzbiA9PSBOVUxMKQorICAgIGdvdG8gb3V0OworCisgIGVyciA9IFVWX0VJTlZBTDsKKyAgaWYgKHBMU1NldEFwcGxpY2F0aW9uSW5mb3JtYXRpb25JdGVtKC0yLCAgLyogTWFnaWMgdmFsdWUuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGlzcGxheV9uYW1lX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFModGl0bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkgIT0gbm9FcnIpIHsKICAgICBnb3RvIG91dDsKICAgfQogCi0gIHJldHVybjsKKyAgdXZfX3B0aHJlYWRfc2V0bmFtZV9ucCh0aXRsZSk7ICAvKiBEb24ndCBjYXJlIGlmIGl0IGZhaWxzLiAqLworICBlcnIgPSAwOwogCiBvdXQ6Ci0gIHV2X19zZXRfcHJvY2Vzc190aXRsZV9wbGF0Zm9ybV9maW5pKCk7CisgIGlmIChjb3JlX2ZvdW5kYXRpb25faGFuZGxlICE9IE5VTEwpCisgICAgZGxjbG9zZShjb3JlX2ZvdW5kYXRpb25faGFuZGxlKTsKKworICBpZiAoYXBwbGljYXRpb25fc2VydmljZXNfaGFuZGxlICE9IE5VTEwpCisgICAgZGxjbG9zZShhcHBsaWNhdGlvbl9zZXJ2aWNlc19oYW5kbGUpOworCisgIHJldHVybiBlcnI7CiAjZW5kaWYgIC8qICFUQVJHRVRfT1NfSVBIT05FICovCiB9Ci0KLQotdm9pZCB1dl9fc2V0X3Byb2Nlc3NfdGl0bGUoY29uc3QgY2hhciogdGl0bGUpIHsKLSNpZiAhVEFSR0VUX09TX0lQSE9ORQotICBpZiAoY29yZV9mb3VuZGF0aW9uX2hhbmRsZSAhPSBOVUxMICYmIHBTZXRBcHBsaWNhdGlvbklzRGFlbW9uKDEpICE9IG5vRXJyKSB7Ci0gICAgQ0ZUeXBlUmVmIGFzbjsKLSAgICBwTFNTZXRBcHBsaWNhdGlvbkxhdW5jaFNlcnZpY2VzU2VydmVyQ29ubmVjdGlvblN0YXR1cygwLCBOVUxMKTsKLSAgICBwTFNBcHBsaWNhdGlvbkNoZWNrSW4oLyogTWFnaWMgdmFsdWUgKi8gLTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KHBDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSkpOwotICAgIGFzbiA9IHBMU0dldEN1cnJlbnRBcHBsaWNhdGlvbkFTTigpOwotICAgIHBMU1NldEFwcGxpY2F0aW9uSW5mb3JtYXRpb25JdGVtKC8qIE1hZ2ljIHZhbHVlICovIC0yLCBhc24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRpc3BsYXlfbmFtZV9rZXksIFModGl0bGUpLCBOVUxMKTsKLSAgfQotI2VuZGlmICAvKiAhVEFSR0VUX09TX0lQSE9ORSAqLwotCi0gIGlmIChkeW5hbWljX3B0aHJlYWRfc2V0bmFtZV9ucCAhPSBOVUxMKSB7Ci0gICAgY2hhciBuYW1lYnVmWzY0XTsgIC8qIE1BWFRIUkVBRE5BTUVTSVpFICovCi0gICAgdXZfX3N0cnNjcHkobmFtZWJ1ZiwgdGl0bGUsIHNpemVvZihuYW1lYnVmKSk7Ci0gICAgZHluYW1pY19wdGhyZWFkX3NldG5hbWVfbnAobmFtZWJ1Zik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi1zdHViLmggYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9kYXJ3aW4tc3R1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2NmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9kYXJ3aW4tc3R1Yi5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qIENvcHlyaWdodCBsaWJ1diBwcm9qZWN0IGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBVVl9EQVJXSU5fU1RVQl9IXworI2RlZmluZSBVVl9EQVJXSU5fU1RVQl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3N0cnVjdCBDRkFycmF5Q2FsbEJhY2tzOworc3RydWN0IENGUnVuTG9vcFNvdXJjZUNvbnRleHQ7CitzdHJ1Y3QgRlNFdmVudFN0cmVhbUNvbnRleHQ7CisKK3R5cGVkZWYgZG91YmxlIENGQWJzb2x1dGVUaW1lOwordHlwZWRlZiBkb3VibGUgQ0ZUaW1lSW50ZXJ2YWw7Cit0eXBlZGVmIGludCBGU0V2ZW50U3RyZWFtRXZlbnRGbGFnczsKK3R5cGVkZWYgaW50IE9TU3RhdHVzOwordHlwZWRlZiBsb25nIENGSW5kZXg7Cit0eXBlZGVmIHN0cnVjdCBDRkFycmF5Q2FsbEJhY2tzIENGQXJyYXlDYWxsQmFja3M7Cit0eXBlZGVmIHN0cnVjdCBDRlJ1bkxvb3BTb3VyY2VDb250ZXh0IENGUnVuTG9vcFNvdXJjZUNvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBGU0V2ZW50U3RyZWFtQ29udGV4dCBGU0V2ZW50U3RyZWFtQ29udGV4dDsKK3R5cGVkZWYgdWludDMyX3QgRlNFdmVudFN0cmVhbUNyZWF0ZUZsYWdzOwordHlwZWRlZiB1aW50NjRfdCBGU0V2ZW50U3RyZWFtRXZlbnRJZDsKK3R5cGVkZWYgdW5zaWduZWQgQ0ZTdHJpbmdFbmNvZGluZzsKK3R5cGVkZWYgdm9pZCogQ0ZBbGxvY2F0b3JSZWY7Cit0eXBlZGVmIHZvaWQqIENGQXJyYXlSZWY7Cit0eXBlZGVmIHZvaWQqIENGQnVuZGxlUmVmOwordHlwZWRlZiB2b2lkKiBDRkRpY3Rpb25hcnlSZWY7Cit0eXBlZGVmIHZvaWQqIENGUnVuTG9vcFJlZjsKK3R5cGVkZWYgdm9pZCogQ0ZSdW5Mb29wU291cmNlUmVmOwordHlwZWRlZiB2b2lkKiBDRlN0cmluZ1JlZjsKK3R5cGVkZWYgdm9pZCogQ0ZUeXBlUmVmOwordHlwZWRlZiB2b2lkKiBGU0V2ZW50U3RyZWFtUmVmOworCit0eXBlZGVmIHZvaWQgKCpGU0V2ZW50U3RyZWFtQ2FsbGJhY2spKGNvbnN0IEZTRXZlbnRTdHJlYW1SZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGU0V2ZW50U3RyZWFtRXZlbnRGbGFncyosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZTRXZlbnRTdHJlYW1FdmVudElkKik7CisKK3N0cnVjdCBDRlJ1bkxvb3BTb3VyY2VDb250ZXh0IHsKKyAgQ0ZJbmRleCB2ZXJzaW9uOworICB2b2lkKiBpbmZvOworICB2b2lkKiBwYWRbN107CisgIHZvaWQgKCpwZXJmb3JtKSh2b2lkKik7Cit9OworCitzdHJ1Y3QgRlNFdmVudFN0cmVhbUNvbnRleHQgeworICBDRkluZGV4IHZlcnNpb247CisgIHZvaWQqIGluZm87CisgIHZvaWQqIHBhZFszXTsKK307CisKK3N0YXRpYyBjb25zdCBDRlN0cmluZ0VuY29kaW5nIGtDRlN0cmluZ0VuY29kaW5nVVRGOCA9IDB4ODAwMDEwMDsKK3N0YXRpYyBjb25zdCBPU1N0YXR1cyBub0VyciA9IDA7CisKK3N0YXRpYyBjb25zdCBGU0V2ZW50U3RyZWFtRXZlbnRJZCBrRlNFdmVudFN0cmVhbUV2ZW50SWRTaW5jZU5vdyA9IC0xOworCitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtQ3JlYXRlRmxhZ05vRGVmZXIgPSAyOworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUNyZWF0ZUZsYWdGaWxlRXZlbnRzID0gMTY7CisKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdFdmVudElkc1dyYXBwZWQgPSA4Oworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0hpc3RvcnlEb25lID0gMTY7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUNoYW5nZU93bmVyID0gMHg0MDAwOworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1DcmVhdGVkID0gMHgxMDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUZpbmRlckluZm9Nb2QgPSAweDIwMDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUlub2RlTWV0YU1vZCA9IDB4NDAwOworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1Jc0RpciA9IDB4MjAwMDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbU1vZGlmaWVkID0gMHgxMDAwOworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1SZW1vdmVkID0gMHgyMDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVJlbmFtZWQgPSAweDgwMDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtWGF0dHJNb2QgPSAweDgwMDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnS2VybmVsRHJvcHBlZCA9IDQ7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnTW91bnQgPSA2NDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdSb290Q2hhbmdlZCA9IDMyOworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ1VubW91bnQgPSAxMjg7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnVXNlckRyb3BwZWQgPSAyOworCisjZW5kaWYgIC8qIFVWX0RBUldJTl9TVFVCX0hfICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9kYXJ3aW4uYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi5jCmluZGV4IGU0Y2Q4ZmYuLjY1NGFiYTIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi5jCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgaW50IHdoaWNoW10gPSB7Q1RMX0hXLCBIV19NRU1TSVpFfTsKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIHJldHVybiAodWludDY0X3QpIGluZm87CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIGludCB3aGljaFtdID0ge0NUTF9WTSwgVk1fTE9BREFWR307CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSA8IDApIHJldHVybjsKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSByZXR1cm47CiAKICAgYXZnWzBdID0gKGRvdWJsZSkgaW5mby5sZGF2Z1swXSAvIGluZm8uZnNjYWxlOwogICBhdmdbMV0gPSAoZG91YmxlKSBpbmZvLmxkYXZnWzFdIC8gaW5mby5mc2NhbGU7CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIHN0YXRpYyBpbnQgd2hpY2hbXSA9IHtDVExfS0VSTiwgS0VSTl9CT09UVElNRX07CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIG5vdyA9IHRpbWUoTlVMTCk7CkBAIC0yMjMsMTQgKzIyMywzIEBACiAKICAgcmV0dXJuIDA7CiB9Ci0KLQotdm9pZCB1dl9mcmVlX2NwdV9pbmZvKHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvcywgaW50IGNvdW50KSB7Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKLSAgfQotCi0gIHV2X19mcmVlKGNwdV9pbmZvcyk7Ci19CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mcmVlYnNkLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mcmVlYnNkLmMKaW5kZXggN2RlODhkNi4uZWY3N2UxMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnJlZWJzZC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ZyZWVic2QuYwpAQCAtOTUsNyArOTUsNyBAQAogICBtaWJbM10gPSAtMTsKIAogICBhYnNwYXRoX3NpemUgPSBzaXplb2YgYWJzcGF0aDsKLSAgaWYgKHN5c2N0bChtaWIsIDQsIGFic3BhdGgsICZhYnNwYXRoX3NpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKG1pYiwgQVJSQVlfU0laRShtaWIpLCBhYnNwYXRoLCAmYWJzcGF0aF9zaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgYXNzZXJ0KGFic3BhdGhfc2l6ZSA+IDApOwpAQCAtMTMwLDcgKzEzMCw3IEBACiAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIHJldHVybiAodWludDY0X3QpIGluZm87CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIGludCB3aGljaFtdID0ge0NUTF9WTSwgVk1fTE9BREFWR307CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSA8IDApIHJldHVybjsKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSByZXR1cm47CiAKICAgYXZnWzBdID0gKGRvdWJsZSkgaW5mby5sZGF2Z1swXSAvIGluZm8uZnNjYWxlOwogICBhdmdbMV0gPSAoZG91YmxlKSBpbmZvLmxkYXZnWzFdIC8gaW5mby5mc2NhbGU7CkBAIC0xNjgsNyArMTY4LDcgQEAKIAogICBraW5mb19zaXplID0gc2l6ZW9mKGtpbmZvKTsKIAotICBpZiAoc3lzY3RsKG1pYiwgNCwgJmtpbmZvLCAma2luZm9fc2l6ZSwgTlVMTCwgMCkpCisgIGlmIChzeXNjdGwobWliLCBBUlJBWV9TSVpFKG1pYiksICZraW5mbywgJmtpbmZvX3NpemUsIE5VTEwsIDApKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAogICBwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwpAQCAtMjkwLDEyICsyOTAsMjYgQEAKIH0KIAogCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7CitpbnQgdXZfX3NlbmRtbXNnKGludCBmZCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHV2X19tbXNnaGRyKiBtbXNnLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmxlbiwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKSB7CisjaWYgX19GcmVlQlNEX18gPj0gMTEKKyAgcmV0dXJuIHNlbmRtbXNnKGZkLCBtbXNnLCB2bGVuLCBmbGFncyk7CisjZWxzZQorICByZXR1cm4gZXJybm8gPSBFTk9TWVMsIC0xOworI2VuZGlmCit9CiAKLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotICB9CiAKLSAgdXZfX2ZyZWUoY3B1X2luZm9zKTsKK2ludCB1dl9fcmVjdm1tc2coaW50IGZkLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXZfX21tc2doZHIqIG1tc2csCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2bGVuLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCkgeworI2lmIF9fRnJlZUJTRF9fID49IDExCisgIHJldHVybiByZWN2bW1zZyhmZCwgbW1zZywgdmxlbiwgZmxhZ3MsIHRpbWVvdXQpOworI2Vsc2UKKyAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnMuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ZzLmMKaW5kZXggNWZiMzRmMWIuLmYzNzc0OWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ZzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTcwLDYgKzcxLDIwIEBACiAjIGluY2x1ZGUgPHV0aW1lLmg+CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX0RyYWdvbkZseV9fKSAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKSAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX09wZW5CU0RfXykgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fTmV0QlNEX18pCisjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyBpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbGlmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19NVlNfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fSEFJS1VfXykKKyMgaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChfQUlYKSAmJiBfWE9QRU5fU09VUkNFIDw9IDYwMAogZXh0ZXJuIGNoYXIgKm1rZHRlbXAoY2hhciAqdGVtcGxhdGUpOyAvKiBTZWUgaXNzdWUgIzc0MCBvbiBBSVggPCA3ICovCiAjZW5kaWYKQEAgLTE5MCw2ICsyMDUsMjAgQEAKIH0KIAogCitVVl9VTlVTRUQoc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB1dl9fZnNfdG9fdGltZXNwZWMoZG91YmxlIHRpbWUpKSB7CisgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgdHMudHZfc2VjICA9IHRpbWU7CisgIHRzLnR2X25zZWMgPSAodWludDY0X3QpKHRpbWUgKiAxMDAwMDAwKSAlIDEwMDAwMDAgKiAxMDAwOworICByZXR1cm4gdHM7Cit9CisKK1VWX1VOVVNFRChzdGF0aWMgc3RydWN0IHRpbWV2YWwgdXZfX2ZzX3RvX3RpbWV2YWwoZG91YmxlIHRpbWUpKSB7CisgIHN0cnVjdCB0aW1ldmFsIHR2OworICB0di50dl9zZWMgID0gdGltZTsKKyAgdHYudHZfdXNlYyA9ICh1aW50NjRfdCkodGltZSAqIDEwMDAwMDApICUgMTAwMDAwMDsKKyAgcmV0dXJuIHR2OworfQorCiBzdGF0aWMgc3NpemVfdCB1dl9fZnNfZnV0aW1lKHV2X2ZzX3QqIHJlcSkgewogI2lmIGRlZmluZWQoX19saW51eF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHx8IGRlZmluZWQoX0FJWDcxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTk4LDExICsyMjcsMTMgQEAKICAgICogZm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgcGxhdGZvcm1zLgogICAgKi8KICAgc3RydWN0IHRpbWVzcGVjIHRzWzJdOwotICB0c1swXS50dl9zZWMgID0gcmVxLT5hdGltZTsKLSAgdHNbMF0udHZfbnNlYyA9ICh1aW50NjRfdCkocmVxLT5hdGltZSAqIDEwMDAwMDApICUgMTAwMDAwMCAqIDEwMDA7Ci0gIHRzWzFdLnR2X3NlYyAgPSByZXEtPm10aW1lOwotICB0c1sxXS50dl9uc2VjID0gKHVpbnQ2NF90KShyZXEtPm10aW1lICogMTAwMDAwMCkgJSAxMDAwMDAwICogMTAwMDsKKyAgdHNbMF0gPSB1dl9fZnNfdG9fdGltZXNwZWMocmVxLT5hdGltZSk7CisgIHRzWzFdID0gdXZfX2ZzX3RvX3RpbWVzcGVjKHJlcS0+bXRpbWUpOworI2lmIGRlZmluZWQoX19BTkRST0lEX0FQSV9fKSAmJiBfX0FORFJPSURfQVBJX18gPCAyMQorICByZXR1cm4gdXRpbWVuc2F0KHJlcS0+ZmlsZSwgTlVMTCwgdHMsIDApOworI2Vsc2UKICAgcmV0dXJuIGZ1dGltZW5zKHJlcS0+ZmlsZSwgdHMpOworI2VuZGlmCiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMTEsMTAgKzI0Miw4IEBACiAgICAgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfHwgZGVmaW5lZChfX3N1bikKICAgc3RydWN0IHRpbWV2YWwgdHZbMl07Ci0gIHR2WzBdLnR2X3NlYyAgPSByZXEtPmF0aW1lOwotICB0dlswXS50dl91c2VjID0gKHVpbnQ2NF90KShyZXEtPmF0aW1lICogMTAwMDAwMCkgJSAxMDAwMDAwOwotICB0dlsxXS50dl9zZWMgID0gcmVxLT5tdGltZTsKLSAgdHZbMV0udHZfdXNlYyA9ICh1aW50NjRfdCkocmVxLT5tdGltZSAqIDEwMDAwMDApICUgMTAwMDAwMDsKKyAgdHZbMF0gPSB1dl9fZnNfdG9fdGltZXZhbChyZXEtPmF0aW1lKTsKKyAgdHZbMV0gPSB1dl9fZnNfdG9fdGltZXZhbChyZXEtPm10aW1lKTsKICMgaWYgZGVmaW5lZChfX3N1bikKICAgcmV0dXJuIGZ1dGltZXNhdChyZXEtPmZpbGUsIE5VTEwsIHR2KTsKICMgZWxzZQpAQCAtMjUwLDIxICsyNzksOTcgQEAKIH0KIAogCi1zdGF0aWMgc3NpemVfdCB1dl9fZnNfb3Blbih1dl9mc190KiByZXEpIHsKLSAgc3RhdGljIGludCBub19jbG9leGVjX3N1cHBvcnQ7Ci0gIGludCByOworc3RhdGljIGludCAoKnV2X19ta29zdGVtcCkoY2hhciosIGludCk7CiAKLSAgLyogVHJ5IE9fQ0xPRVhFQyBiZWZvcmUgZW50ZXJpbmcgbG9ja3MgKi8KLSAgaWYgKG5vX2Nsb2V4ZWNfc3VwcG9ydCA9PSAwKSB7CisKK3N0YXRpYyB2b2lkIHV2X19ta29zdGVtcF9pbml0b25jZSh2b2lkKSB7CisgIC8qIHovb3MgZG9lc24ndCBoYXZlIFJUTERfREVGQVVMVCBidXQgdGhhdCdzIG9rYXkKKyAgICogYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgbWtvc3RlbXAoT19DTE9FWEVDKSBlaXRoZXIuCisgICAqLworI2lmZGVmIFJUTERfREVGQVVMVAorICB1dl9fbWtvc3RlbXAgPSAoaW50ICgqKShjaGFyKiwgaW50KSkgZGxzeW0oUlRMRF9ERUZBVUxULCAibWtvc3RlbXAiKTsKKworICAvKiBXZSBkb24ndCBjYXJlIGFib3V0IGVycm9ycywgYnV0IHdlIGRvIHdhbnQgdG8gY2xlYW4gdGhlbSB1cC4KKyAgICogSWYgdGhlcmUgaGFzIGJlZW4gbm8gZXJyb3IsIHRoZW4gZGxlcnJvcigpIHdpbGwganVzdCByZXR1cm4KKyAgICogTlVMTC4KKyAgICovCisgIGRsZXJyb3IoKTsKKyNlbmRpZiAgLyogUlRMRF9ERUZBVUxUICovCit9CisKKworc3RhdGljIGludCB1dl9fZnNfbWtzdGVtcCh1dl9mc190KiByZXEpIHsKKyAgc3RhdGljIHV2X29uY2VfdCBvbmNlID0gVVZfT05DRV9JTklUOworICBpbnQgcjsKICNpZmRlZiBPX0NMT0VYRUMKLSAgICByID0gb3BlbihyZXEtPnBhdGgsIHJlcS0+ZmxhZ3MgfCBPX0NMT0VYRUMsIHJlcS0+bW9kZSk7CisgIHN0YXRpYyBpbnQgbm9fY2xvZXhlY19zdXBwb3J0OworI2VuZGlmCisgIHN0YXRpYyBjb25zdCBjaGFyIHBhdHRlcm5bXSA9ICJYWFhYWFgiOworICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhdHRlcm5fc2l6ZSA9IHNpemVvZihwYXR0ZXJuKSAtIDE7CisgIGNoYXIqIHBhdGg7CisgIHNpemVfdCBwYXRoX2xlbmd0aDsKKworICBwYXRoID0gKGNoYXIqKSByZXEtPnBhdGg7CisgIHBhdGhfbGVuZ3RoID0gc3RybGVuKHBhdGgpOworCisgIC8qIEVJTlZBTCBjYW4gYmUgcmV0dXJuZWQgZm9yIDIgcmVhc29uczoKKyAgICAgIDEuIFRoZSB0ZW1wbGF0ZSdzIGxhc3QgNiBjaGFyYWN0ZXJzIHdlcmUgbm90IFhYWFhYWAorICAgICAgMi4gb3BlbigpIGRpZG4ndCBzdXBwb3J0IE9fQ0xPRVhFQworICAgICBXZSB3YW50IHRvIGF2b2lkIGdvaW5nIHRvIHRoZSBmYWxsYmFjayBwYXRoIGluIGNhc2UKKyAgICAgb2YgMSwgc28gaXQncyBtYW51YWxseSBjaGVja2VkIGJlZm9yZS4gKi8KKyAgaWYgKHBhdGhfbGVuZ3RoIDwgcGF0dGVybl9zaXplIHx8CisgICAgICBzdHJjbXAocGF0aCArIHBhdGhfbGVuZ3RoIC0gcGF0dGVybl9zaXplLCBwYXR0ZXJuKSkgeworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHV2X29uY2UoJm9uY2UsIHV2X19ta29zdGVtcF9pbml0b25jZSk7CisKKyNpZmRlZiBPX0NMT0VYRUMKKyAgaWYgKG5vX2Nsb2V4ZWNfc3VwcG9ydCA9PSAwICYmIHV2X19ta29zdGVtcCAhPSBOVUxMKSB7CisgICAgciA9IHV2X19ta29zdGVtcChwYXRoLCBPX0NMT0VYRUMpOworCiAgICAgaWYgKHIgPj0gMCkKICAgICAgIHJldHVybiByOworCisgICAgLyogSWYgbWtvc3RlbXAoKSByZXR1cm5zIEVJTlZBTCwgaXQgbWVhbnMgdGhlIGtlcm5lbCBkb2Vzbid0CisgICAgICAgc3VwcG9ydCBPX0NMT0VYRUMsIHNvIHdlIGp1c3QgZmFsbGJhY2sgdG8gbWtzdGVtcCgpIGJlbG93LiAqLwogICAgIGlmIChlcnJubyAhPSBFSU5WQUwpCiAgICAgICByZXR1cm4gcjsKKworICAgIC8qIFdlIHNldCB0aGUgc3RhdGljIHZhcmlhYmxlIHNvIHRoYXQgbmV4dCBjYWxscyBkb24ndCBldmVuCisgICAgICAgdHJ5IHRvIHVzZSBta29zdGVtcC4gKi8KICAgICBub19jbG9leGVjX3N1cHBvcnQgPSAxOwotI2VuZGlmICAvKiBPX0NMT0VYRUMgKi8KICAgfQorI2VuZGlmICAvKiBPX0NMT0VYRUMgKi8KKworICBpZiAocmVxLT5jYiAhPSBOVUxMKQorICAgIHV2X3J3bG9ja19yZGxvY2soJnJlcS0+bG9vcC0+Y2xvZXhlY19sb2NrKTsKKworICByID0gbWtzdGVtcChwYXRoKTsKKworICAvKiBJbiBjYXNlIG9mIGZhaWx1cmUgYHV2X19jbG9leGVjYCB3aWxsIGxlYXZlIGVycm9yIGluIGBlcnJub2AsCisgICAqIHNvIGl0IGlzIGVub3VnaCB0byBqdXN0IHNldCBgcmAgdG8gYC0xYC4KKyAgICovCisgIGlmIChyID49IDAgJiYgdXZfX2Nsb2V4ZWMociwgMSkgIT0gMCkgeworICAgIHIgPSB1dl9fY2xvc2Uocik7CisgICAgaWYgKHIgIT0gMCkKKyAgICAgIGFib3J0KCk7CisgICAgciA9IC0xOworICB9CisKKyAgaWYgKHJlcS0+Y2IgIT0gTlVMTCkKKyAgICB1dl9yd2xvY2tfcmR1bmxvY2soJnJlcS0+bG9vcC0+Y2xvZXhlY19sb2NrKTsKKworICByZXR1cm4gcjsKK30KKworCitzdGF0aWMgc3NpemVfdCB1dl9fZnNfb3Blbih1dl9mc190KiByZXEpIHsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgcmV0dXJuIG9wZW4ocmVxLT5wYXRoLCByZXEtPmZsYWdzIHwgT19DTE9FWEVDLCByZXEtPm1vZGUpOworI2Vsc2UgIC8qIE9fQ0xPRVhFQyAqLworICBpbnQgcjsKIAogICBpZiAocmVxLT5jYiAhPSBOVUxMKQogICAgIHV2X3J3bG9ja19yZGxvY2soJnJlcS0+bG9vcC0+Y2xvZXhlY19sb2NrKTsKQEAgLTI4NSw5ICszOTAsNjAgQEAKICAgICB1dl9yd2xvY2tfcmR1bmxvY2soJnJlcS0+bG9vcC0+Y2xvZXhlY19sb2NrKTsKIAogICByZXR1cm4gcjsKKyNlbmRpZiAgLyogT19DTE9FWEVDICovCiB9CiAKIAorI2lmICFIQVZFX1BSRUFEVgorc3RhdGljIHNzaXplX3QgdXZfX2ZzX3ByZWFkdih1dl9maWxlIGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9idWZfdCogYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5idWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmYpIHsKKyAgdXZfYnVmX3QqIGJ1ZjsKKyAgdXZfYnVmX3QqIGVuZDsKKyAgc3NpemVfdCByZXN1bHQ7CisgIHNzaXplX3QgcmM7CisgIHNpemVfdCBwb3M7CisKKyAgYXNzZXJ0KG5idWZzID4gMCk7CisKKyAgcmVzdWx0ID0gMDsKKyAgcG9zID0gMDsKKyAgYnVmID0gYnVmcyArIDA7CisgIGVuZCA9IGJ1ZnMgKyBuYnVmczsKKworICBmb3IgKDs7KSB7CisgICAgZG8KKyAgICAgIHJjID0gcHJlYWQoZmQsIGJ1Zi0+YmFzZSArIHBvcywgYnVmLT5sZW4gLSBwb3MsIG9mZiArIHJlc3VsdCk7CisgICAgd2hpbGUgKHJjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKworICAgIGlmIChyYyA9PSAwKQorICAgICAgYnJlYWs7CisKKyAgICBpZiAocmMgPT0gLTEgJiYgcmVzdWx0ID09IDApCisgICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisKKyAgICBpZiAocmMgPT0gLTEpCisgICAgICBicmVhazsgIC8qIFdlIHJlYWQgc29tZSBkYXRhIHNvIHJldHVybiB0aGF0LCBpZ25vcmUgdGhlIGVycm9yLiAqLworCisgICAgcG9zICs9IHJjOworICAgIHJlc3VsdCArPSByYzsKKworICAgIGlmIChwb3MgPCBidWYtPmxlbikKKyAgICAgIGNvbnRpbnVlOworCisgICAgcG9zID0gMDsKKyAgICBidWYgKz0gMTsKKworICAgIGlmIChidWYgPT0gZW5kKQorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKwogc3RhdGljIHNzaXplX3QgdXZfX2ZzX3JlYWQodXZfZnNfdCogcmVxKSB7CiAjaWYgZGVmaW5lZChfX2xpbnV4X18pCiAgIHN0YXRpYyBpbnQgbm9fcHJlYWR2OwpAQCAtMzE3LDcgKzQ3Myw3IEBACiAgICAgaWYgKG5vX3ByZWFkdikgcmV0cnk6CiAjIGVuZGlmCiAgICAgewotICAgICAgcmVzdWx0ID0gcHJlYWQocmVxLT5maWxlLCByZXEtPmJ1ZnNbMF0uYmFzZSwgcmVxLT5idWZzWzBdLmxlbiwgcmVxLT5vZmYpOworICAgICAgcmVzdWx0ID0gdXZfX2ZzX3ByZWFkdihyZXEtPmZpbGUsIHJlcS0+YnVmcywgcmVxLT5uYnVmcywgcmVxLT5vZmYpOwogICAgIH0KICMgaWYgZGVmaW5lZChfX2xpbnV4X18pCiAgICAgZWxzZSB7CkBAIC00ODEsMTQgKzYzNywzOSBAQAogICByZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoX1BPU0lYX1BBVEhfTUFYKQotIyBkZWZpbmUgVVZfX0ZTX1BBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAotI2VsaWYgZGVmaW5lZChQQVRIX01BWCkKLSMgZGVmaW5lIFVWX19GU19QQVRIX01BWCBQQVRIX01BWAorc3RhdGljIGludCB1dl9fZnNfc3RhdGZzKHV2X2ZzX3QqIHJlcSkgeworICB1dl9zdGF0ZnNfdCogc3RhdF9mczsKKyNpZiBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKF9fTVZTX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0hBSUtVX18pCisgIHN0cnVjdCBzdGF0dmZzIGJ1ZjsKKworICBpZiAoMCAhPSBzdGF0dmZzKHJlcS0+cGF0aCwgJmJ1ZikpCiAjZWxzZQotIyBkZWZpbmUgVVZfX0ZTX1BBVEhfTUFYX0ZBTExCQUNLIDgxOTIKLSMgZGVmaW5lIFVWX19GU19QQVRIX01BWCBVVl9fRlNfUEFUSF9NQVhfRkFMTEJBQ0sKKyAgc3RydWN0IHN0YXRmcyBidWY7CisKKyAgaWYgKDAgIT0gc3RhdGZzKHJlcS0+cGF0aCwgJmJ1ZikpCisjZW5kaWYgLyogZGVmaW5lZChfX3N1bikgKi8KKyAgICByZXR1cm4gLTE7CisKKyAgc3RhdF9mcyA9IHV2X19tYWxsb2Moc2l6ZW9mKCpzdGF0X2ZzKSk7CisgIGlmIChzdGF0X2ZzID09IE5VTEwpIHsKKyAgICBlcnJubyA9IEVOT01FTTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworI2lmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19NVlNfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fSEFJS1VfXykKKyAgc3RhdF9mcy0+Zl90eXBlID0gMDsgIC8qIGZfdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiAqLworI2Vsc2UKKyAgc3RhdF9mcy0+Zl90eXBlID0gYnVmLmZfdHlwZTsKICNlbmRpZgorICBzdGF0X2ZzLT5mX2JzaXplID0gYnVmLmZfYnNpemU7CisgIHN0YXRfZnMtPmZfYmxvY2tzID0gYnVmLmZfYmxvY2tzOworICBzdGF0X2ZzLT5mX2JmcmVlID0gYnVmLmZfYmZyZWU7CisgIHN0YXRfZnMtPmZfYmF2YWlsID0gYnVmLmZfYmF2YWlsOworICBzdGF0X2ZzLT5mX2ZpbGVzID0gYnVmLmZfZmlsZXM7CisgIHN0YXRfZnMtPmZfZmZyZWUgPSBidWYuZl9mZnJlZTsKKyAgcmVxLT5wdHIgPSBzdGF0X2ZzOworICByZXR1cm4gMDsKK30KIAogc3RhdGljIHNzaXplX3QgdXZfX2ZzX3BhdGhtYXhfc2l6ZShjb25zdCBjaGFyKiBwYXRoKSB7CiAgIHNzaXplX3QgcGF0aG1heDsKQEAgLTQ5Niw3ICs2NzcsNyBAQAogICBwYXRobWF4ID0gcGF0aGNvbmYocGF0aCwgX1BDX1BBVEhfTUFYKTsKIAogICBpZiAocGF0aG1heCA9PSAtMSkKLSAgICBwYXRobWF4ID0gVVZfX0ZTX1BBVEhfTUFYOworICAgIHBhdGhtYXggPSBVVl9fUEFUSF9NQVg7CiAKICAgcmV0dXJuIHBhdGhtYXg7CiB9CkBAIC01MDUsOSArNjg2LDEwIEBACiAgIHNzaXplX3QgbWF4bGVuOwogICBzc2l6ZV90IGxlbjsKICAgY2hhciogYnVmOwotICBjaGFyKiBuZXdidWY7CiAKLSNpZiBkZWZpbmVkKFVWX19GU19QQVRIX01BWF9GQUxMQkFDSykKKyNpZiBkZWZpbmVkKF9QT1NJWF9QQVRIX01BWCkgfHwgZGVmaW5lZChQQVRIX01BWCkKKyAgbWF4bGVuID0gdXZfX2ZzX3BhdGhtYXhfc2l6ZShyZXEtPnBhdGgpOworI2Vsc2UKICAgLyogV2UgbWF5IG5vdCBoYXZlIGEgcmVhbCBQQVRIX01BWC4gIFJlYWQgc2l6ZSBvZiBsaW5rLiAgKi8KICAgc3RydWN0IHN0YXQgc3Q7CiAgIGludCByZXQ7CkBAIC01MjUsOCArNzA3LDYgQEAKICAgICAgZm9yIHNvbWUgc3ltbGlua3MsIHN1Y2ggYXMgdGhvc2UgaW4gL3Byb2Mgb3IgL3N5cy4gICovCiAgIGlmIChtYXhsZW4gPT0gMCkKICAgICBtYXhsZW4gPSB1dl9fZnNfcGF0aG1heF9zaXplKHJlcS0+cGF0aCk7Ci0jZWxzZQotICBtYXhsZW4gPSB1dl9fZnNfcGF0aG1heF9zaXplKHJlcS0+cGF0aCk7CiAjZW5kaWYKIAogICBidWYgPSB1dl9fbWFsbG9jKG1heGxlbik7CkBAIC01NDksMTQgKzcyOSwxMCBAQAogCiAgIC8qIFVuY29tbW9uIGNhc2U6IHJlc2l6ZSB0byBtYWtlIHJvb20gZm9yIHRoZSB0cmFpbGluZyBudWwgYnl0ZS4gKi8KICAgaWYgKGxlbiA9PSBtYXhsZW4pIHsKLSAgICBuZXdidWYgPSB1dl9fcmVhbGxvYyhidWYsIGxlbiArIDEpOworICAgIGJ1ZiA9IHV2X19yZWFsbG9jZihidWYsIGxlbiArIDEpOwogCi0gICAgaWYgKG5ld2J1ZiA9PSBOVUxMKSB7Ci0gICAgICB1dl9fZnJlZShidWYpOworICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBidWYgPSBuZXdidWY7CiAgIH0KIAogICBidWZbbGVuXSA9ICdcMCc7CkBAIC04MTYsMTAgKzk5Miw4IEBACiAgICAqIGZvciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHBsYXRmb3Jtcy4KICAgICovCiAgIHN0cnVjdCB0aW1lc3BlYyB0c1syXTsKLSAgdHNbMF0udHZfc2VjICA9IHJlcS0+YXRpbWU7Ci0gIHRzWzBdLnR2X25zZWMgPSAodWludDY0X3QpKHJlcS0+YXRpbWUgKiAxMDAwMDAwKSAlIDEwMDAwMDAgKiAxMDAwOwotICB0c1sxXS50dl9zZWMgID0gcmVxLT5tdGltZTsKLSAgdHNbMV0udHZfbnNlYyA9ICh1aW50NjRfdCkocmVxLT5tdGltZSAqIDEwMDAwMDApICUgMTAwMDAwMCAqIDEwMDA7CisgIHRzWzBdID0gdXZfX2ZzX3RvX3RpbWVzcGVjKHJlcS0+YXRpbWUpOworICB0c1sxXSA9IHV2X19mc190b190aW1lc3BlYyhyZXEtPm10aW1lKTsKICAgcmV0dXJuIHV0aW1lbnNhdChBVF9GRENXRCwgcmVxLT5wYXRoLCB0cywgMCk7CiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04MjgsMTAgKzEwMDIsOCBAQAogICAgIHx8IGRlZmluZWQoX19OZXRCU0RfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHx8IGRlZmluZWQoX19PcGVuQlNEX18pCiAgIHN0cnVjdCB0aW1ldmFsIHR2WzJdOwotICB0dlswXS50dl9zZWMgID0gcmVxLT5hdGltZTsKLSAgdHZbMF0udHZfdXNlYyA9ICh1aW50NjRfdCkocmVxLT5hdGltZSAqIDEwMDAwMDApICUgMTAwMDAwMDsKLSAgdHZbMV0udHZfc2VjICA9IHJlcS0+bXRpbWU7Ci0gIHR2WzFdLnR2X3VzZWMgPSAodWludDY0X3QpKHJlcS0+bXRpbWUgKiAxMDAwMDAwKSAlIDEwMDAwMDA7CisgIHR2WzBdID0gdXZfX2ZzX3RvX3RpbWV2YWwocmVxLT5hdGltZSk7CisgIHR2WzFdID0gdXZfX2ZzX3RvX3RpbWV2YWwocmVxLT5tdGltZSk7CiAgIHJldHVybiB1dGltZXMocmVxLT5wYXRoLCB0dik7CiAjZWxpZiBkZWZpbmVkKF9BSVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgJiYgIWRlZmluZWQoX0FJWDcxKQpAQCAtODU0LDYgKzEwMjYsMzEgQEAKIH0KIAogCitzdGF0aWMgc3NpemVfdCB1dl9fZnNfbHV0aW1lKHV2X2ZzX3QqIHJlcSkgeworI2lmIGRlZmluZWQoX19saW51eF9fKSAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9BSVg3MSkgICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX3N1bikgICAgICAgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19IQUlLVV9fKQorICBzdHJ1Y3QgdGltZXNwZWMgdHNbMl07CisgIHRzWzBdID0gdXZfX2ZzX3RvX3RpbWVzcGVjKHJlcS0+YXRpbWUpOworICB0c1sxXSA9IHV2X19mc190b190aW1lc3BlYyhyZXEtPm10aW1lKTsKKyAgcmV0dXJuIHV0aW1lbnNhdChBVF9GRENXRCwgcmVxLT5wYXRoLCB0cywgQVRfU1lNTElOS19OT0ZPTExPVyk7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBkZWZpbmVkKF9fRHJhZ29uRmx5X18pICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBkZWZpbmVkKF9fTmV0QlNEX18pCisgIHN0cnVjdCB0aW1ldmFsIHR2WzJdOworICB0dlswXSA9IHV2X19mc190b190aW1ldmFsKHJlcS0+YXRpbWUpOworICB0dlsxXSA9IHV2X19mc190b190aW1ldmFsKHJlcS0+bXRpbWUpOworICByZXR1cm4gbHV0aW1lcyhyZXEtPnBhdGgsIHR2KTsKKyNlbHNlCisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gLTE7CisjZW5kaWYKK30KKworCiBzdGF0aWMgc3NpemVfdCB1dl9fZnNfd3JpdGUodXZfZnNfdCogcmVxKSB7CiAjaWYgZGVmaW5lZChfX2xpbnV4X18pCiAgIHN0YXRpYyBpbnQgbm9fcHdyaXRldjsKQEAgLTkxOCwxMiArMTExNSwxNSBAQAogICB1dl9mc190IGZzX3JlcTsKICAgdXZfZmlsZSBzcmNmZDsKICAgdXZfZmlsZSBkc3RmZDsKLSAgc3RydWN0IHN0YXQgc3RhdHNidWY7CisgIHN0cnVjdCBzdGF0IHNyY19zdGF0c2J1ZjsKKyAgc3RydWN0IHN0YXQgZHN0X3N0YXRzYnVmOwogICBpbnQgZHN0X2ZsYWdzOwogICBpbnQgcmVzdWx0OwogICBpbnQgZXJyOwotICBzaXplX3QgYnl0ZXNfdG9fc2VuZDsKLSAgaW50NjRfdCBpbl9vZmZzZXQ7CisgIG9mZl90IGJ5dGVzX3RvX3NlbmQ7CisgIG9mZl90IGluX29mZnNldDsKKyAgb2ZmX3QgYnl0ZXNfd3JpdHRlbjsKKyAgc2l6ZV90IGJ5dGVzX2NodW5rOwogCiAgIGRzdGZkID0gLTE7CiAgIGVyciA9IDA7CkBAIC05MzYsNyArMTEzNiw3IEBACiAgICAgcmV0dXJuIHNyY2ZkOwogCiAgIC8qIEdldCB0aGUgc291cmNlIGZpbGUncyBtb2RlLiAqLwotICBpZiAoZnN0YXQoc3JjZmQsICZzdGF0c2J1ZikpIHsKKyAgaWYgKGZzdGF0KHNyY2ZkLCAmc3JjX3N0YXRzYnVmKSkgewogICAgIGVyciA9IFVWX19FUlIoZXJybm8pOwogICAgIGdvdG8gb3V0OwogICB9CkBAIC05NTEsNyArMTE1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAmZnNfcmVxLAogICAgICAgICAgICAgICAgICAgICAgcmVxLT5uZXdfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgIGRzdF9mbGFncywKLSAgICAgICAgICAgICAgICAgICAgIHN0YXRzYnVmLnN0X21vZGUsCisgICAgICAgICAgICAgICAgICAgICBzcmNfc3RhdHNidWYuc3RfbW9kZSwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICB1dl9mc19yZXFfY2xlYW51cCgmZnNfcmVxKTsKIApAQCAtOTYwLDI2ICsxMTYwLDU1IEBACiAgICAgZ290byBvdXQ7CiAgIH0KIAotICBpZiAoZmNobW9kKGRzdGZkLCBzdGF0c2J1Zi5zdF9tb2RlKSA9PSAtMSkgeworICAvKiBHZXQgdGhlIGRlc3RpbmF0aW9uIGZpbGUncyBtb2RlLiAqLworICBpZiAoZnN0YXQoZHN0ZmQsICZkc3Rfc3RhdHNidWYpKSB7CiAgICAgZXJyID0gVVZfX0VSUihlcnJubyk7CiAgICAgZ290byBvdXQ7CiAgIH0KIAorICAvKiBDaGVjayBpZiBzcmNmZCBhbmQgZHN0ZmQgcmVmZXIgdG8gdGhlIHNhbWUgZmlsZSAqLworICBpZiAoc3JjX3N0YXRzYnVmLnN0X2RldiA9PSBkc3Rfc3RhdHNidWYuc3RfZGV2ICYmCisgICAgICBzcmNfc3RhdHNidWYuc3RfaW5vID09IGRzdF9zdGF0c2J1Zi5zdF9pbm8pIHsKKyAgICBnb3RvIG91dDsKKyAgfQorCisgIGlmIChmY2htb2QoZHN0ZmQsIHNyY19zdGF0c2J1Zi5zdF9tb2RlKSA9PSAtMSkgeworICAgIGVyciA9IFVWX19FUlIoZXJybm8pOworI2lmZGVmIF9fbGludXhfXworICAgIGlmIChlcnIgIT0gVVZfRVBFUk0pCisgICAgICBnb3RvIG91dDsKKworICAgIHsKKyAgICAgIHN0cnVjdCBzdGF0ZnMgczsKKworICAgICAgLyogZmNobW9kKCkgb24gQ0lGUyBzaGFyZXMgYWx3YXlzIGZhaWxzIHdpdGggRVBFUk0gdW5sZXNzIHRoZSBzaGFyZSBpcworICAgICAgICogbW91bnRlZCB3aXRoICJub3Blcm0iLiBBcyBmY2htb2QoKSBpcyBhIG1lYW5pbmdsZXNzIG9wZXJhdGlvbiBvbiBzdWNoCisgICAgICAgKiBzaGFyZXMgYW55d2F5LCBkZXRlY3QgdGhhdCBjb25kaXRpb24gYW5kIHNxdWVsY2ggdGhlIGVycm9yLgorICAgICAgICovCisgICAgICBpZiAoZnN0YXRmcyhkc3RmZCwgJnMpID09IC0xKQorICAgICAgICBnb3RvIG91dDsKKworICAgICAgaWYgKHMuZl90eXBlICE9IC8qIENJRlMgKi8gMHhGRjUzNEQ0MnUpCisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGVyciA9IDA7CisjZWxzZSAgLyogIV9fbGludXhfXyAqLworICAgIGdvdG8gb3V0OworI2VuZGlmICAvKiAhX19saW51eF9fICovCisgIH0KKwogI2lmZGVmIEZJQ0xPTkUKICAgaWYgKHJlcS0+ZmxhZ3MgJiBVVl9GU19DT1BZRklMRV9GSUNMT05FIHx8CiAgICAgICByZXEtPmZsYWdzICYgVVZfRlNfQ09QWUZJTEVfRklDTE9ORV9GT1JDRSkgewotICAgIGlmIChpb2N0bChkc3RmZCwgRklDTE9ORSwgc3JjZmQpID09IC0xKSB7Ci0gICAgICAvKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGF0IHRoZSBzZW5kZmlsZSBmYWxsYmFjayBhbHNvIHdvbid0IGhhbmRsZSwgb3IKLSAgICAgICAgIHRoaXMgaXMgYSBmb3JjZSBjbG9uZSB0aGVuIGV4aXQuIE90aGVyd2lzZSwgZmFsbCB0aHJvdWdoIHRvIHRyeSB1c2luZwotICAgICAgICAgc2VuZGZpbGUoKS4gKi8KLSAgICAgIGlmIChlcnJubyAhPSBFTk9UVFkgJiYgZXJybm8gIT0gRU9QTk9UU1VQUCAmJiBlcnJubyAhPSBFWERFVikgewotICAgICAgICBlcnIgPSBVVl9fRVJSKGVycm5vKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgICB9IGVsc2UgaWYgKHJlcS0+ZmxhZ3MgJiBVVl9GU19DT1BZRklMRV9GSUNMT05FX0ZPUkNFKSB7Ci0gICAgICAgIGVyciA9IFVWX0VOT1RTVVA7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgICAgfQotICAgIH0gZWxzZSB7CisgICAgaWYgKGlvY3RsKGRzdGZkLCBGSUNMT05FLCBzcmNmZCkgPT0gMCkgeworICAgICAgLyogaW9jdGwoKSB3aXRoIEZJQ0xPTkUgc3VjY2VlZGVkLiAqLworICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIC8qIElmIGFuIGVycm9yIG9jY3VycmVkIGFuZCBmb3JjZSB3YXMgc2V0LCByZXR1cm4gdGhlIGVycm9yIHRvIHRoZSBjYWxsZXI7CisgICAgICogZmFsbCBiYWNrIHRvIHNlbmRmaWxlKCkgd2hlbiBmb3JjZSB3YXMgbm90IHNldC4gKi8KKyAgICBpZiAocmVxLT5mbGFncyAmIFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0UpIHsKKyAgICAgIGVyciA9IFVWX19FUlIoZXJybm8pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogICB9CkBAIC05OTAsMjEgKzEyMTksMjMgQEAKICAgfQogI2VuZGlmCiAKLSAgYnl0ZXNfdG9fc2VuZCA9IHN0YXRzYnVmLnN0X3NpemU7CisgIGJ5dGVzX3RvX3NlbmQgPSBzcmNfc3RhdHNidWYuc3Rfc2l6ZTsKICAgaW5fb2Zmc2V0ID0gMDsKICAgd2hpbGUgKGJ5dGVzX3RvX3NlbmQgIT0gMCkgewotICAgIGVyciA9IHV2X2ZzX3NlbmRmaWxlKE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmZzX3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkc3RmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzcmNmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbl9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdG9fc2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBieXRlc19jaHVuayA9IFNTSVpFX01BWDsKKyAgICBpZiAoYnl0ZXNfdG9fc2VuZCA8IChvZmZfdCkgYnl0ZXNfY2h1bmspCisgICAgICBieXRlc19jaHVuayA9IGJ5dGVzX3RvX3NlbmQ7CisgICAgdXZfZnNfc2VuZGZpbGUoTlVMTCwgJmZzX3JlcSwgZHN0ZmQsIHNyY2ZkLCBpbl9vZmZzZXQsIGJ5dGVzX2NodW5rLCBOVUxMKTsKKyAgICBieXRlc193cml0dGVuID0gZnNfcmVxLnJlc3VsdDsKICAgICB1dl9mc19yZXFfY2xlYW51cCgmZnNfcmVxKTsKLSAgICBpZiAoZXJyIDwgMCkKKworICAgIGlmIChieXRlc193cml0dGVuIDwgMCkgeworICAgICAgZXJyID0gYnl0ZXNfd3JpdHRlbjsKICAgICAgIGJyZWFrOwotICAgIGJ5dGVzX3RvX3NlbmQgLT0gZnNfcmVxLnJlc3VsdDsKLSAgICBpbl9vZmZzZXQgKz0gZnNfcmVxLnJlc3VsdDsKKyAgICB9CisKKyAgICBieXRlc190b19zZW5kIC09IGJ5dGVzX3dyaXR0ZW47CisgICAgaW5fb2Zmc2V0ICs9IGJ5dGVzX3dyaXR0ZW47CiAgIH0KIAogb3V0OgpAQCAtMTE1MSwxMyArMTM4MiwyMiBAQAogCiAgIHJjID0gdXZfX3N0YXR4KGRpcmZkLCBwYXRoLCBmbGFncywgbW9kZSwgJnN0YXR4YnVmKTsKIAotICBpZiAocmMgPT0gLTEpIHsKKyAgc3dpdGNoIChyYykgeworICBjYXNlIDA6CisgICAgYnJlYWs7CisgIGNhc2UgLTE6CiAgICAgLyogRVBFUk0gaGFwcGVucyB3aGVuIGEgc2VjY29tcCBmaWx0ZXIgcmVqZWN0cyB0aGUgc3lzdGVtIGNhbGwuCiAgICAgICogSGFzIGJlZW4gb2JzZXJ2ZWQgd2l0aCBsaWJzZWNjb21wIDwgMi4zLjMgYW5kIGRvY2tlciA8IDE4LjA0LgogICAgICAqLwogICAgIGlmIChlcnJubyAhPSBFSU5WQUwgJiYgZXJybm8gIT0gRVBFUk0gJiYgZXJybm8gIT0gRU5PU1lTKQogICAgICAgcmV0dXJuIC0xOwotCisgICAgLyogRmFsbCB0aHJvdWdoLiAqLworICBkZWZhdWx0OgorICAgIC8qIE5vcm1hbGx5IG9uIHN1Y2Nlc3MsIHplcm8gaXMgcmV0dXJuZWQgYW5kIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZC4KKyAgICAgKiBPYnNlcnZlZCBvbiBTMzkwIFJIRUwgcnVubmluZyBpbiBhIGRvY2tlciBjb250YWluZXIgd2l0aCBzdGF0eCBub3QKKyAgICAgKiBpbXBsZW1lbnRlZCwgcmMgbWlnaHQgcmV0dXJuIDEgd2l0aCAwIHNldCBhcyB0aGUgZXJyb3IgY29kZSBpbiB3aGljaAorICAgICAqIGNhc2Ugd2UgcmV0dXJuIEVOT1NZUy4KKyAgICAgKi8KICAgICBub19zdGF0eCA9IDE7CiAgICAgcmV0dXJuIFVWX0VOT1NZUzsKICAgfQpAQCAtMTMyOCwxMCArMTU2OCwxMiBAQAogICAgIFgoRlNZTkMsIHV2X19mc19mc3luYyhyZXEpKTsKICAgICBYKEZUUlVOQ0FURSwgZnRydW5jYXRlKHJlcS0+ZmlsZSwgcmVxLT5vZmYpKTsKICAgICBYKEZVVElNRSwgdXZfX2ZzX2Z1dGltZShyZXEpKTsKKyAgICBYKExVVElNRSwgdXZfX2ZzX2x1dGltZShyZXEpKTsKICAgICBYKExTVEFULCB1dl9fZnNfbHN0YXQocmVxLT5wYXRoLCAmcmVxLT5zdGF0YnVmKSk7CiAgICAgWChMSU5LLCBsaW5rKHJlcS0+cGF0aCwgcmVxLT5uZXdfcGF0aCkpOwogICAgIFgoTUtESVIsIG1rZGlyKHJlcS0+cGF0aCwgcmVxLT5tb2RlKSk7CiAgICAgWChNS0RURU1QLCB1dl9fZnNfbWtkdGVtcChyZXEpKTsKKyAgICBYKE1LU1RFTVAsIHV2X19mc19ta3N0ZW1wKHJlcSkpOwogICAgIFgoT1BFTiwgdXZfX2ZzX29wZW4ocmVxKSk7CiAgICAgWChSRUFELCB1dl9fZnNfcmVhZChyZXEpKTsKICAgICBYKFNDQU5ESVIsIHV2X19mc19zY2FuZGlyKHJlcSkpOwpAQCAtMTM0NCw2ICsxNTg2LDcgQEAKICAgICBYKFJNRElSLCBybWRpcihyZXEtPnBhdGgpKTsKICAgICBYKFNFTkRGSUxFLCB1dl9fZnNfc2VuZGZpbGUocmVxKSk7CiAgICAgWChTVEFULCB1dl9fZnNfc3RhdChyZXEtPnBhdGgsICZyZXEtPnN0YXRidWYpKTsKKyAgICBYKFNUQVRGUywgdXZfX2ZzX3N0YXRmcyhyZXEpKTsKICAgICBYKFNZTUxJTkssIHN5bWxpbmsocmVxLT5wYXRoLCByZXEtPm5ld19wYXRoKSk7CiAgICAgWChVTkxJTkssIHVubGluayhyZXEtPnBhdGgpKTsKICAgICBYKFVUSU1FLCB1dl9fZnNfdXRpbWUocmVxKSk7CkBAIC0xNTEyLDYgKzE3NTUsMTkgQEAKICAgUE9TVDsKIH0KIAoraW50IHV2X2ZzX2x1dGltZSh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgIHV2X2ZzX3QqIHJlcSwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgZG91YmxlIGF0aW1lLAorICAgICAgICAgICAgICAgICBkb3VibGUgbXRpbWUsCisgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CisgIElOSVQoTFVUSU1FKTsKKyAgUEFUSDsKKyAgcmVxLT5hdGltZSA9IGF0aW1lOworICByZXEtPm10aW1lID0gbXRpbWU7CisgIFBPU1Q7Cit9CisKIAogaW50IHV2X2ZzX2xzdGF0KHV2X2xvb3BfdCogbG9vcCwgdXZfZnNfdCogcmVxLCBjb25zdCBjaGFyKiBwYXRoLCB1dl9mc19jYiBjYikgewogICBJTklUKExTVEFUKTsKQEAgLTE1NTUsNiArMTgxMSwxOCBAQAogfQogCiAKK2ludCB1dl9mc19ta3N0ZW1wKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgIHV2X2ZzX3QqIHJlcSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRwbCwKKyAgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CisgIElOSVQoTUtTVEVNUCk7CisgIHJlcS0+cGF0aCA9IHV2X19zdHJkdXAodHBsKTsKKyAgaWYgKHJlcS0+cGF0aCA9PSBOVUxMKQorICAgIHJldHVybiBVVl9FTk9NRU07CisgIFBPU1Q7Cit9CisKKwogaW50IHV2X2ZzX29wZW4odXZfbG9vcF90KiBsb29wLAogICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKQEAgLTE3NzMsMTAgKzIwNDEsMTIgQEAKIAogICAvKiBPbmx5IG5lY2Vzc2FyeSBmb3IgYXN5Y2hyb25vdXMgcmVxdWVzdHMsIGkuZS4sIHJlcXVlc3RzIHdpdGggYSBjYWxsYmFjay4KICAgICogU3luY2hyb25vdXMgb25lcyBkb24ndCBjb3B5IHRoZWlyIGFyZ3VtZW50cyBhbmQgaGF2ZSByZXEtPnBhdGggYW5kCi0gICAqIHJlcS0+bmV3X3BhdGggcG9pbnRpbmcgdG8gdXNlci1vd25lZCBtZW1vcnkuICBVVl9GU19NS0RURU1QIGlzIHRoZQotICAgKiBleGNlcHRpb24gdG8gdGhlIHJ1bGUsIGl0IGFsd2F5cyBhbGxvY2F0ZXMgbWVtb3J5LgorICAgKiByZXEtPm5ld19wYXRoIHBvaW50aW5nIHRvIHVzZXItb3duZWQgbWVtb3J5LiAgVVZfRlNfTUtEVEVNUCBhbmQgCisgICAqIFVWX0ZTX01LU1RFTVAgYXJlIHRoZSBleGNlcHRpb24gdG8gdGhlIHJ1bGUsIHRoZXkgYWx3YXlzIGFsbG9jYXRlIG1lbW9yeS4KICAgICovCi0gIGlmIChyZXEtPnBhdGggIT0gTlVMTCAmJiAocmVxLT5jYiAhPSBOVUxMIHx8IHJlcS0+ZnNfdHlwZSA9PSBVVl9GU19NS0RURU1QKSkKKyAgaWYgKHJlcS0+cGF0aCAhPSBOVUxMICYmCisgICAgICAocmVxLT5jYiAhPSBOVUxMIHx8CisgICAgICAgIHJlcS0+ZnNfdHlwZSA9PSBVVl9GU19NS0RURU1QIHx8IHJlcS0+ZnNfdHlwZSA9PSBVVl9GU19NS1NURU1QKSkKICAgICB1dl9fZnJlZSgodm9pZCopIHJlcS0+cGF0aCk7ICAvKiBNZW1vcnkgaXMgc2hhcmVkIHdpdGggcmVxLT5uZXdfcGF0aC4gKi8KIAogICByZXEtPnBhdGggPSBOVUxMOwpAQCAtMTgxNiwzICsyMDg2LDE3IEBACiAgIHJlcS0+ZmxhZ3MgPSBmbGFnczsKICAgUE9TVDsKIH0KKworCitpbnQgdXZfZnNfc3RhdGZzKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLAorICAgICAgICAgICAgICAgICB1dl9mc19jYiBjYikgeworICBJTklUKFNUQVRGUyk7CisgIFBBVEg7CisgIFBPU1Q7Cit9CisKK2ludCB1dl9mc19nZXRfc3lzdGVtX2Vycm9yKGNvbnN0IHV2X2ZzX3QqIHJlcSkgeworICByZXR1cm4gLXJlcS0+cmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnNldmVudHMuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ZzZXZlbnRzLmMKaW5kZXggZGRhY2RhMy4uYTUxZjI5YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnNldmVudHMuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mc2V2ZW50cy5jCkBAIC00MSwzNCArNDEsMzMgQEAKIAogI2Vsc2UgLyogVEFSR0VUX09TX0lQSE9ORSAqLwogCisjaW5jbHVkZSAiZGFyd2luLXN0dWIuaCIKKwogI2luY2x1ZGUgPGRsZmNuLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZSdW5Mb29wLmg+Ci0jaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorc3RhdGljIGNvbnN0IGludCBrRlNFdmVudHNNb2RpZmllZCA9CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtQ2hhbmdlT3duZXIgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUZpbmRlckluZm9Nb2QgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUlub2RlTWV0YU1vZCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtTW9kaWZpZWQgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVhhdHRyTW9kOwogCi0vKiBUaGVzZSBhcmUgbWFjcm9zIHRvIGF2b2lkICJpbml0aWFsaXplciBlbGVtZW50IGlzIG5vdCBjb25zdGFudCIgZXJyb3JzCi0gKiB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBnY2MuCi0gKi8KLSNkZWZpbmUga0ZTRXZlbnRzTW9kaWZpZWQgKGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUZpbmRlckluZm9Nb2QgfCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbU1vZGlmaWVkIHwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUlub2RlTWV0YU1vZCB8ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUNoYW5nZU93bmVyIHwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVhhdHRyTW9kKQorc3RhdGljIGNvbnN0IGludCBrRlNFdmVudHNSZW5hbWVkID0KKyAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1DcmVhdGVkIHwKKyAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1SZW1vdmVkIHwKKyAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1SZW5hbWVkOwogCi0jZGVmaW5lIGtGU0V2ZW50c1JlbmFtZWQgIChrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1DcmVhdGVkIHwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1SZW1vdmVkIHwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1SZW5hbWVkKQotCi0jZGVmaW5lIGtGU0V2ZW50c1N5c3RlbSAgIChrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ1VzZXJEcm9wcGVkIHwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0tlcm5lbERyb3BwZWQgfCAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0V2ZW50SWRzV3JhcHBlZCB8ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0hpc3RvcnlEb25lIHwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ01vdW50IHwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ1VubW91bnQgfCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ1Jvb3RDaGFuZ2VkKQorc3RhdGljIGNvbnN0IGludCBrRlNFdmVudHNTeXN0ZW0gPQorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnVXNlckRyb3BwZWQgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnS2VybmVsRHJvcHBlZCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdFdmVudElkc1dyYXBwZWQgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSGlzdG9yeURvbmUgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnTW91bnQgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnVW5tb3VudCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdSb290Q2hhbmdlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgdXZfX2ZzZXZlbnRzX2V2ZW50X3MgdXZfX2ZzZXZlbnRzX2V2ZW50X3Q7CiB0eXBlZGVmIHN0cnVjdCB1dl9fY2ZfbG9vcF9zaWduYWxfcyB1dl9fY2ZfbG9vcF9zaWduYWxfdDsKQEAgLTE0OCw3ICsxNDcsNyBAQAogc3RhdGljIHZvaWQgKCpwRlNFdmVudFN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3ApKEZTRXZlbnRTdHJlYW1SZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZSdW5Mb29wUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmKTsKLXN0YXRpYyBCb29sZWFuICgqcEZTRXZlbnRTdHJlYW1TdGFydCkoRlNFdmVudFN0cmVhbVJlZik7CitzdGF0aWMgaW50ICgqcEZTRXZlbnRTdHJlYW1TdGFydCkoRlNFdmVudFN0cmVhbVJlZik7CiBzdGF0aWMgdm9pZCAoKnBGU0V2ZW50U3RyZWFtU3RvcCkoRlNFdmVudFN0cmVhbVJlZik7CiAKICNkZWZpbmUgVVZfX0ZTRVZFTlRTX1BST0NFU1MoaGFuZGxlLCBibG9jaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIxNSw3ICsyMTQsNyBAQAogCiAKIC8qIFJ1bnMgaW4gQ0YgdGhyZWFkLCB3aGVuIHRoZXJlJ3JlIGV2ZW50cyBpbiBGU0V2ZW50U3RyZWFtICovCi1zdGF0aWMgdm9pZCB1dl9fZnNldmVudHNfZXZlbnRfY2IoQ29uc3RGU0V2ZW50U3RyZWFtUmVmIHN0cmVhbVJlZiwKK3N0YXRpYyB2b2lkIHV2X19mc2V2ZW50c19ldmVudF9jYihjb25zdCBGU0V2ZW50U3RyZWFtUmVmIHN0cmVhbVJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1FdmVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogZXZlbnRQYXRocywKQEAgLTI2MywxMCArMjYyLDEyIEBACiAgICAgICBpZiAobGVuIDwgaGFuZGxlLT5yZWFscGF0aF9sZW4pCiAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAvKiBNYWtlIHN1cmUgdGhhdCByZWFscGF0aCBhY3R1YWxseSBuYW1lZCBhIGRpcmVjdG9yeSwKKyAgICAgICAqICh1bmxlc3Mgd2F0Y2hpbmcgcm9vdCwgd2hpY2ggYWxvbmUga2VlcHMgYSB0cmFpbGluZyBzbGFzaCBvbiB0aGUgcmVhbHBhdGgpCisgICAgICAgKiBvciB0aGF0IHdlIG1hdGNoZWQgdGhlIHdob2xlIHN0cmluZyAqLwogICAgICAgaWYgKGhhbmRsZS0+cmVhbHBhdGhfbGVuICE9IGxlbiAmJgorICAgICAgICAgIGhhbmRsZS0+cmVhbHBhdGhfbGVuID4gMSAmJgogICAgICAgICAgIHBhdGhbaGFuZGxlLT5yZWFscGF0aF9sZW5dICE9ICcvJykKLSAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgcmVhbHBhdGggYWN0dWFsbHkgbmFtZWQgYSBkaXJlY3RvcnksCi0gICAgICAgICAqIG9yIHRoYXQgd2UgbWF0Y2hlZCB0aGUgd2hvbGUgc3RyaW5nICovCiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBpZiAobWVtY21wKHBhdGgsIGhhbmRsZS0+cmVhbHBhdGgsIGhhbmRsZS0+cmVhbHBhdGhfbGVuKSAhPSAwKQpAQCAtMzM4LDExICszMzksOCBAQAogICBGU0V2ZW50U3RyZWFtQ3JlYXRlRmxhZ3MgZmxhZ3M7CiAKICAgLyogSW5pdGlhbGl6ZSBjb250ZXh0ICovCi0gIGN0eC52ZXJzaW9uID0gMDsKKyAgbWVtc2V0KCZjdHgsIDAsIHNpemVvZihjdHgpKTsKICAgY3R4LmluZm8gPSBsb29wOwotICBjdHgucmV0YWluID0gTlVMTDsKLSAgY3R4LnJlbGVhc2UgPSBOVUxMOwotICBjdHguY29weURlc2NyaXB0aW9uID0gTlVMTDsKIAogICBsYXRlbmN5ID0gMC4wNTsKIApAQCAtNzQ1LDYgKzc0Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnNpZ25hbF9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogCisgIHN0YXRlLT5sb29wID0gTlVMTDsKKwogICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNzk3LDEzICs3OTcsMTQgQEAKIAogICB1dl9tdXRleF9sb2NrKCZsb29wLT5jZl9tdXRleCk7CiAgIFFVRVVFX0lOU0VSVF9UQUlMKCZsb29wLT5jZl9zaWduYWxzLCAmaXRlbS0+bWVtYmVyKTsKLSAgdXZfbXV0ZXhfdW5sb2NrKCZsb29wLT5jZl9tdXRleCk7CiAKICAgc3RhdGUgPSBsb29wLT5jZl9zdGF0ZTsKICAgYXNzZXJ0KHN0YXRlICE9IE5VTEwpOwogICBwQ0ZSdW5Mb29wU291cmNlU2lnbmFsKHN0YXRlLT5zaWduYWxfc291cmNlKTsKICAgcENGUnVuTG9vcFdha2VVcChzdGF0ZS0+bG9vcCk7CiAKKyAgdXZfbXV0ZXhfdW5sb2NrKCZsb29wLT5jZl9tdXRleCk7CisKICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2hhaWt1LmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9oYWlrdS5jCmluZGV4IDc3MDg4NTEuLmNmMTdkODMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2hhaWt1LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaGFpa3UuYwpAQCAtMTY1LDEyICsxNjUsMyBAQAogCiAgIHJldHVybiAwOwogfQotCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKLQotICB1dl9fZnJlZShjcHVfaW5mb3MpOwotfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaWJtaS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaWJtaS5jCmluZGV4IGM3ZTEwNTEuLmU0YzUxMjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2libWkuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9pYm1pLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxzeXMvdm5vZGUuaD4KIAogI2luY2x1ZGUgPGFzNDAwX3Byb3Rvcy5oPgorI2luY2x1ZGUgPGFzNDAwX3R5cGVzLmg+CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtOTgsMjQgKzk5LDkxIEBACiB9IFNTVFMwMjAwOwogCiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciBoZWFkZXJbMjA4XTsKKyAgdW5zaWduZWQgY2hhciBsb2NhX2FkYXB0ZXJfYWRkcmVzc1sxMl07Cit9IExJTkQwNTAwOworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGJ5dGVzX3Byb3ZpZGVkOworICBpbnQgYnl0ZXNfYXZhaWxhYmxlOworICBjaGFyIG1zZ2lkWzddOworfSBlcnJjb2RlX3M7CisKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZTJhWzI1Nl0gPSB7CisgICAgMCwgMSwgMiwgMywgMTU2LCA5LCAxMzQsIDEyNywgMTUxLCAxNDEsIDE0MiwgMTEsIDEyLCAxMywgMTQsIDE1LAorICAgIDE2LCAxNywgMTgsIDE5LCAxNTcsIDEzMywgOCwgMTM1LCAyNCwgMjUsIDE0NiwgMTQzLCAyOCwgMjksIDMwLCAzMSwKKyAgICAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTAsIDIzLCAyNywgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDUsIDYsIDcsCisgICAgMTQ0LCAxNDUsIDIyLCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDQsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMjAsIDIxLCAxNTgsIDI2LAorICAgIDMyLCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCA5MSwgNDYsIDYwLCA0MCwgNDMsIDMzLAorICAgIDM4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3MywgMTc0LCAxNzUsIDE3NiwgMTc3LCA5MywgMzYsIDQyLCA0MSwgNTksIDk0LAorICAgIDQ1LCA0NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDEyNCwgNDQsIDM3LCA5NSwgNjIsIDYzLAorICAgIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDk2LCA1OCwgMzUsIDY0LCAzOSwgNjEsIDM0LAorICAgIDE5NSwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwKKyAgICAyMDIsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsCisgICAgMjA5LCAxMjYsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LAorICAgIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwKKyAgICAxMjMsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsCisgICAgMTI1LCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLAorICAgIDkyLCAxNTksIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwKKyAgICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NX07CisKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYTJlWzI1Nl0gPSB7CisgICAgMCwgMSwgMiwgMywgNTUsIDQ1LCA0NiwgNDcsIDIyLCA1LCAzNywgMTEsIDEyLCAxMywgMTQsIDE1LAorICAgIDE2LCAxNywgMTgsIDE5LCA2MCwgNjEsIDUwLCAzOCwgMjQsIDI1LCA2MywgMzksIDI4LCAyOSwgMzAsIDMxLAorICAgIDY0LCA3OSwgMTI3LCAxMjMsIDkxLCAxMDgsIDgwLCAxMjUsIDc3LCA5MywgOTIsIDc4LCAxMDcsIDk2LCA3NSwgOTcsCisgICAgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAxMjIsIDk0LCA3NiwgMTI2LCAxMTAsIDExMSwKKyAgICAxMjQsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsCisgICAgMjE1LCAyMTYsIDIxNywgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDc0LCAyMjQsIDkwLCA5NSwgMTA5LAorICAgIDEyMSwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwKKyAgICAxNTEsIDE1MiwgMTUzLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTkyLCAxMDYsIDIwOCwgMTYxLCA3LAorICAgIDMyLCAzMywgMzQsIDM1LCAzNiwgMjEsIDYsIDIzLCA0MCwgNDEsIDQyLCA0MywgNDQsIDksIDEwLCAyNywKKyAgICA0OCwgNDksIDI2LCA1MSwgNTIsIDUzLCA1NCwgOCwgNTYsIDU3LCA1OCwgNTksIDQsIDIwLCA2MiwgMjI1LAorICAgIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LAorICAgIDg4LCA4OSwgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LAorICAgIDExOCwgMTE5LCAxMjAsIDEyOCwgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwKKyAgICAxNTksIDE2MCwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsCisgICAgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIxOCwgMjE5LAorICAgIDIyMCwgMjIxLCAyMjIsIDIyMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NX07CisKKworc3RhdGljIHZvaWQgaWNvbnZfZTJhKHVuc2lnbmVkIGNoYXIgc3JjW10sIHVuc2lnbmVkIGNoYXIgZHN0W10sIHNpemVfdCBsZW5ndGgpIHsKKyAgc2l6ZV90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICBkc3RbaV0gPSBlMmFbc3JjW2ldXTsKK30KKworCitzdGF0aWMgdm9pZCBpY29udl9hMmUoY29uc3QgY2hhciogc3JjLCB1bnNpZ25lZCBjaGFyIGRzdFtdLCBzaXplX3QgbGVuZ3RoKSB7CisgIHNpemVfdCBzcmNsZW47CisgIHNpemVfdCBpOworCisgIHNyY2xlbiA9IHN0cmxlbihzcmMpOworICBpZiAoc3JjbGVuID4gbGVuZ3RoKQorICAgIGFib3J0KCk7CisgIGZvciAoaSA9IDA7IGkgPCBzcmNsZW47IGkrKykKKyAgICBkc3RbaV0gPSBhMmVbc3JjW2ldXTsKKyAgLyogcGFkZGluZyB0aGUgcmVtYWluaW5nIHBhcnQgd2l0aCBzcGFjZXMgKi8KKyAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykKKyAgICBkc3RbaV0gPSBhMmVbJyAnXTsKK30KKworCiBzdGF0aWMgaW50IGdldF9pYm1pX3N5c3RlbV9zdGF0dXMoU1NUUzAyMDAqIHJjdnIpIHsKICAgLyogcmN2cmxlbiBpcyBpbnB1dCBwYXJhbWV0ZXIgMiB0byBRV0NSU1NUUyAqLwogICB1bnNpZ25lZCBpbnQgcmN2cmxlbiA9IHNpemVvZigqcmN2cik7CisgIHVuc2lnbmVkIGNoYXIgZm9ybWF0WzhdLCByZXNldF9zdGF0dXNbMTBdOwogCi0gIC8qIGZvcm1hdCBpcyBpbnB1dCBwYXJhbWV0ZXIgMyB0byBRV0NSU1NUUyAoIlNTVFMwMjAwIiBpbiBFQkNESUMpICovCi0gIHVuc2lnbmVkIGNoYXIgZm9ybWF0W10gPSB7MHhFMiwgMHhFMiwgMHhFMywgMHhFMiwgMHhGMCwgMHhGMiwgMHhGMCwgMHhGMH07Ci0KLSAgLyogcmVzZXRfc3RhdHVzIGlzIGlucHV0IHBhcmFtZXRlciA0IHRvIFFXQ1JTU1RTICgiKk5PICAgICAgICIgaW4gRUJDRElDKSAqLwotICB1bnNpZ25lZCBjaGFyIHJlc2V0X3N0YXR1c1tdID0gewotICAgIDB4NUMsIDB4RDUsIDB4RDYsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAKLSAgfTsKKyAgLyogZm9ybWF0IGlzIGlucHV0IHBhcmFtZXRlciAzIHRvIFFXQ1JTU1RTICovCisgIGljb252X2EyZSgiU1NUUzAyMDAiLCBmb3JtYXQsIHNpemVvZihmb3JtYXQpKTsKKyAgLyogcmVzZXRfc3RhdHVzIGlzIGlucHV0IHBhcmFtZXRlciA0ICovCisgIGljb252X2EyZSgiKk5PIiwgcmVzZXRfc3RhdHVzLCBzaXplb2YocmVzZXRfc3RhdHVzKSk7CiAKICAgLyogZXJyY29kZSBpcyBpbnB1dCBwYXJhbWV0ZXIgNSB0byBRV0NSU1NUUyAqLwotICBzdHJ1Y3QgX2VycmNvZGUgewotICAgIGludCBieXRlc19wcm92aWRlZDsKLSAgICBpbnQgYnl0ZXNfYXZhaWxhYmxlOwotICAgIGNoYXIgbXNnaWRbN107Ci0gIH0gZXJyY29kZTsKKyAgZXJyY29kZV9zIGVycmNvZGU7CiAKICAgLyogcXdjcnNzdHNfcG9pbnRlciBpcyB0aGUgMTYtYnl0ZSB0YWdnZWQgc3lzdGVtIHBvaW50ZXIgdG8gUVdDUlNTVFMgKi8KICAgSUxFcG9pbnRlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpIHF3Y3Jzc3RzX3BvaW50ZXI7CkBAIC0xNDUsNyArMjEzLDcgQEAKICAgcXdjcnNzdHNfYXJndls1XSA9IE5VTEw7CiAKICAgLyogQ2FsbCB0aGUgSUJNIGkgUVdDUlNTVFMgQVBJIGZyb20gUEFTRSAqLwotICByYyA9IF9QR01DQUxMKCZxd2Nyc3N0c19wb2ludGVyLCAodm9pZCoqKSZxd2Nyc3N0c19hcmd2LCAwKTsKKyAgcmMgPSBfUEdNQ0FMTCgmcXdjcnNzdHNfcG9pbnRlciwgcXdjcnNzdHNfYXJndiwgMCk7CiAKICAgcmV0dXJuIHJjOwogfQpAQCAtMTU3LDE5ICsyMjUsNyBAQAogICBpZiAoZ2V0X2libWlfc3lzdGVtX3N0YXR1cygmcmN2cikpCiAgICAgcmV0dXJuIDA7CiAKLSAgLyogVGhlIGFtb3VudCBvZiBtYWluIHN0b3JhZ2UsIGluIGtpbG9ieXRlcywgaW4gdGhlIHN5c3RlbS4gKi8KLSAgdWludDY0X3QgbWFpbl9zdG9yYWdlX3NpemUgPSByY3ZyLm1haW5fc3RvcmFnZV9zaXplOwotCi0gIC8qIFRoZSBjdXJyZW50IGFtb3VudCBvZiBzdG9yYWdlIGluIHVzZSBmb3IgdGVtcG9yYXJ5IG9iamVjdHMuCi0gICAqIGluIG1pbGxpb25zIChNKSBvZiBieXRlcy4KLSAgICovCi0gIHVpbnQ2NF90IGN1cnJlbnRfdW5wcm90ZWN0ZWRfc3RvcmFnZV91c2VkID0KLSAgICByY3ZyLmN1cnJlbnRfdW5wcm90ZWN0ZWRfc3RvcmFnZV91c2VkICogMTAyNFVMTDsKLQotICB1aW50NjRfdCBmcmVlX3N0b3JhZ2Vfc2l6ZSA9Ci0gICAgKG1haW5fc3RvcmFnZV9zaXplIC0gY3VycmVudF91bnByb3RlY3RlZF9zdG9yYWdlX3VzZWQpICogMTAyNFVMTDsKLQotICByZXR1cm4gZnJlZV9zdG9yYWdlX3NpemUgPCAwID8gMCA6IGZyZWVfc3RvcmFnZV9zaXplOworICByZXR1cm4gKHVpbnQ2NF90KXJjdnIubWFpbl9zdG9yYWdlX3NpemUgKiAxMDI0VUxMOwogfQogCiAKQEAgLTI0OCwzICszMDQsMTU5IEBACiAgIHJldHVybiAwOwogfQogCisKK3N0YXRpYyBpbnQgZ2V0X2libWlfcGh5c2ljYWxfYWRkcmVzcyhjb25zdCBjaGFyKiBsaW5lLCBjaGFyICgqcGh5c19hZGRyKVs2XSkgeworICBMSU5EMDUwMCByY3ZyOworICAvKiByY3ZybGVuIGlzIGlucHV0IHBhcmFtZXRlciAyIHRvIFFEQ1JMSU5EICovCisgIHVuc2lnbmVkIGludCByY3ZybGVuID0gc2l6ZW9mKHJjdnIpOworICB1bnNpZ25lZCBjaGFyIGZvcm1hdFs4XSwgbGluZV9uYW1lWzEwXTsKKyAgdW5zaWduZWQgY2hhciBtYWNfYWRkcltzaXplb2YocmN2ci5sb2NhX2FkYXB0ZXJfYWRkcmVzcyldOworICBpbnQgY1s2XTsKKworICAvKiBmb3JtYXQgaXMgaW5wdXQgcGFyYW1ldGVyIDMgdG8gUURDUkxJTkQgKi8KKyAgaWNvbnZfYTJlKCJMSU5EMDUwMCIsIGZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkpOworCisgIC8qIGxpbmVfbmFtZSBpcyBpbnB1dCBwYXJhbWV0ZXIgNCB0byBRRENSTElORCAqLworICBpY29udl9hMmUobGluZSwgbGluZV9uYW1lLCBzaXplb2YobGluZV9uYW1lKSk7CisKKyAgLyogZXJyIGlzIGlucHV0IHBhcmFtZXRlciA1IHRvIFFEQ1JMSU5EICovCisgIGVycmNvZGVfcyBlcnI7CisKKyAgLyogcXdjcnNzdHNfcG9pbnRlciBpcyB0aGUgMTYtYnl0ZSB0YWdnZWQgc3lzdGVtIHBvaW50ZXIgdG8gUURDUkxJTkQgKi8KKyAgSUxFcG9pbnRlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpIHFkY3JsaW5kX3BvaW50ZXI7CisKKyAgLyogcXdjcnNzdHNfYXJndiBpcyB0aGUgYXJyYXkgb2YgYXJndW1lbnQgcG9pbnRlcnMgdG8gUURDUkxJTkQgKi8KKyAgdm9pZCogcWRjcmxpbmRfYXJndls2XTsKKworICAvKiBTZXQgdGhlIElCTSBpIHBvaW50ZXIgdG8gdGhlIFFTWVMvUURDUkxJTkQgKlBHTSBvYmplY3QgKi8KKyAgaW50IHJjID0gX1JTTE9CSjIoJnFkY3JsaW5kX3BvaW50ZXIsIFJTTE9CSl9UU19QR00sICJRRENSTElORCIsICJRU1lTIik7CisKKyAgaWYgKHJjICE9IDApCisgICAgcmV0dXJuIHJjOworCisgIC8qIGluaXRpYWxpemUgdGhlIFFEQ1JMSU5EIHJldHVybmVkIGluZm8gc3RydWN0dXJlICovCisgIG1lbXNldCgmcmN2ciwgMCwgc2l6ZW9mKHJjdnIpKTsKKworICAvKiBpbml0aWFsaXplIHRoZSBRRENSTElORCBlcnJvciBjb2RlIHN0cnVjdHVyZSAqLworICBtZW1zZXQoJmVyciwgMCwgc2l6ZW9mKGVycikpOworICBlcnIuYnl0ZXNfcHJvdmlkZWQgPSBzaXplb2YoZXJyKTsKKworICAvKiBpbml0aWFsaXplIHRoZSBhcnJheSBvZiBhcmd1bWVudCBwb2ludGVycyBmb3IgdGhlIFFEQ1JMSU5EIEFQSSAqLworICBxZGNybGluZF9hcmd2WzBdID0gJnJjdnI7CisgIHFkY3JsaW5kX2FyZ3ZbMV0gPSAmcmN2cmxlbjsKKyAgcWRjcmxpbmRfYXJndlsyXSA9ICZmb3JtYXQ7CisgIHFkY3JsaW5kX2FyZ3ZbM10gPSAmbGluZV9uYW1lOworICBxZGNybGluZF9hcmd2WzRdID0gJmVycjsKKyAgcWRjcmxpbmRfYXJndls1XSA9IE5VTEw7CisKKyAgLyogQ2FsbCB0aGUgSUJNIGkgUURDUkxJTkQgQVBJIGZyb20gUEFTRSAqLworICByYyA9IF9QR01DQUxMKCZxZGNybGluZF9wb2ludGVyLCBxZGNybGluZF9hcmd2LCAwKTsKKyAgaWYgKHJjICE9IDApCisgICAgcmV0dXJuIHJjOworCisgIC8qIGNvbnZlcnQgZWJjZGljIGxvY2FfYWRhcHRlcl9hZGRyZXNzIHRvIGFzY2lpIGZpcnN0ICovCisgIGljb252X2UyYShyY3ZyLmxvY2FfYWRhcHRlcl9hZGRyZXNzLCBtYWNfYWRkciwKKyAgICAgICAgICAgIHNpemVvZihyY3ZyLmxvY2FfYWRhcHRlcl9hZGRyZXNzKSk7CisKKyAgLyogY29udmVydCBsb2NhX2FkYXB0ZXJfYWRkcmVzcyhjaGFyWzEyXSkgdG8gcGh5c19hZGRyKGNoYXJbNl0pICovCisgIGludCByID0gc3NjYW5mKG1hY19hZGRyLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKyAgICAgICAgICAgICAgICAmY1swXSwgJmNbMV0sICZjWzJdLCAmY1szXSwgJmNbNF0sICZjWzVdKTsKKworICBpZiAociA9PSBBUlJBWV9TSVpFKGMpKSB7CisgICAgKCpwaHlzX2FkZHIpWzBdID0gY1swXTsKKyAgICAoKnBoeXNfYWRkcilbMV0gPSBjWzFdOworICAgICgqcGh5c19hZGRyKVsyXSA9IGNbMl07CisgICAgKCpwaHlzX2FkZHIpWzNdID0gY1szXTsKKyAgICAoKnBoeXNfYWRkcilbNF0gPSBjWzRdOworICAgICgqcGh5c19hZGRyKVs1XSA9IGNbNV07CisgIH0gZWxzZSB7CisgICAgbWVtc2V0KCpwaHlzX2FkZHIsIDAsIHNpemVvZigqcGh5c19hZGRyKSk7CisgICAgcmMgPSAtMTsKKyAgfQorICByZXR1cm4gcmM7Cit9CisKKworaW50IHV2X2ludGVyZmFjZV9hZGRyZXNzZXModXZfaW50ZXJmYWNlX2FkZHJlc3NfdCoqIGFkZHJlc3NlcywgaW50KiBjb3VudCkgeworICB1dl9pbnRlcmZhY2VfYWRkcmVzc190KiBhZGRyZXNzOworICBzdHJ1Y3QgaWZhZGRyc19wYXNlICppZmFwID0gTlVMTCwgKmN1cjsKKyAgaW50IGluZXQ2LCByID0gMDsKKworICAqY291bnQgPSAwOworICAqYWRkcmVzc2VzID0gTlVMTDsKKworICBpZiAoUXAyZ2V0aWZhZGRycygmaWZhcCkpCisgICAgcmV0dXJuIFVWX0VOT1NZUzsKKworICAvKiBUaGUgZmlyc3QgbG9vcCB0byBnZXQgdGhlIHNpemUgb2YgdGhlIGFycmF5IHRvIGJlIGFsbG9jYXRlZCAqLworICBmb3IgKGN1ciA9IGlmYXA7IGN1cjsgY3VyID0gY3VyLT5pZmFfbmV4dCkgeworICAgIGlmICghKGN1ci0+aWZhX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNiB8fAorICAgICAgICAgIGN1ci0+aWZhX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgaWYgKCEoY3VyLT5pZmFfZmxhZ3MgJiBJRkZfVVAgJiYgY3VyLT5pZmFfZmxhZ3MgJiBJRkZfUlVOTklORykpCisgICAgICBjb250aW51ZTsKKworICAgICgqY291bnQpKys7CisgIH0KKworICBpZiAoKmNvdW50ID09IDApIHsKKyAgICBRcDJmcmVlaWZhZGRycyhpZmFwKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIEFsbG9jIHRoZSByZXR1cm4gaW50ZXJmYWNlIHN0cnVjdHMgKi8KKyAgKmFkZHJlc3NlcyA9IHV2X19jYWxsb2MoKmNvdW50LCBzaXplb2YoKiphZGRyZXNzZXMpKTsKKyAgaWYgKCphZGRyZXNzZXMgPT0gTlVMTCkgeworICAgIFFwMmZyZWVpZmFkZHJzKGlmYXApOworICAgIHJldHVybiBVVl9FTk9NRU07CisgIH0KKyAgYWRkcmVzcyA9ICphZGRyZXNzZXM7CisKKyAgLyogVGhlIHNlY29uZCBsb29wIHRvIGZpbGwgaW4gdGhlIGFycmF5ICovCisgIGZvciAoY3VyID0gaWZhcDsgY3VyOyBjdXIgPSBjdXItPmlmYV9uZXh0KSB7CisgICAgaWYgKCEoY3VyLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2IHx8CisgICAgICAgICAgY3VyLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpKQorICAgICAgY29udGludWU7CisKKyAgICBpZiAoIShjdXItPmlmYV9mbGFncyAmIElGRl9VUCAmJiBjdXItPmlmYV9mbGFncyAmIElGRl9SVU5OSU5HKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgYWRkcmVzcy0+bmFtZSA9IHV2X19zdHJkdXAoY3VyLT5pZmFfbmFtZSk7CisKKyAgICBpbmV0NiA9IChjdXItPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpOworCisgICAgaWYgKGluZXQ2KSB7CisgICAgICBhZGRyZXNzLT5hZGRyZXNzLmFkZHJlc3M2ID0gKigoc3RydWN0IHNvY2thZGRyX2luNiopY3VyLT5pZmFfYWRkcik7CisgICAgICBhZGRyZXNzLT5uZXRtYXNrLm5ldG1hc2s2ID0gKigoc3RydWN0IHNvY2thZGRyX2luNiopY3VyLT5pZmFfbmV0bWFzayk7CisgICAgICBhZGRyZXNzLT5uZXRtYXNrLm5ldG1hc2s2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgfSBlbHNlIHsKKyAgICAgIGFkZHJlc3MtPmFkZHJlc3MuYWRkcmVzczQgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKWN1ci0+aWZhX2FkZHIpOworICAgICAgYWRkcmVzcy0+bmV0bWFzay5uZXRtYXNrNCA9ICooKHN0cnVjdCBzb2NrYWRkcl9pbiopY3VyLT5pZmFfbmV0bWFzayk7CisgICAgICBhZGRyZXNzLT5uZXRtYXNrLm5ldG1hc2s0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIH0KKyAgICBhZGRyZXNzLT5pc19pbnRlcm5hbCA9IGN1ci0+aWZhX2ZsYWdzICYgSUZGX0xPT1BCQUNLID8gMSA6IDA7CisgICAgaWYgKCFhZGRyZXNzLT5pc19pbnRlcm5hbCkgeworICAgICAgaW50IHJjID0gZ2V0X2libWlfcGh5c2ljYWxfYWRkcmVzcyhhZGRyZXNzLT5uYW1lLCAmYWRkcmVzcy0+cGh5c19hZGRyKTsKKyAgICAgIGlmIChyYyAhPSAwKQorICAgICAgICByID0gcmM7CisgICAgfQorCisgICAgYWRkcmVzcysrOworICB9CisKKyAgUXAyZnJlZWlmYWRkcnMoaWZhcCk7CisgIHJldHVybiByOworfQorCisKK3ZvaWQgdXZfZnJlZV9pbnRlcmZhY2VfYWRkcmVzc2VzKHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqIGFkZHJlc3NlcywgaW50IGNvdW50KSB7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgdXZfX2ZyZWUoYWRkcmVzc2VzW2ldLm5hbWUpOworICB9CisKKyAgdXZfX2ZyZWUoYWRkcmVzc2VzKTsKK30KKwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaW50ZXJuYWwuaCBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ludGVybmFsLmgKaW5kZXggYjQzYzBiMS4uMjU0OTYwMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaW50ZXJuYWwuaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9pbnRlcm5hbC5oCkBAIC0yNSwxMSArMjUsMTMgQEAKICNpbmNsdWRlICJ1di1jb21tb24uaCIKIAogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPiAvKiBfUE9TSVhfUEFUSF9NQVgsIFBBVEhfTUFYICovCiAjaW5jbHVkZSA8c3RkbGliLmg+IC8qIGFib3J0ICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIHN0cnJjaHIgKi8KLSNpbmNsdWRlIDxmY250bC5oPiAgLyogT19DTE9FWEVDLCBtYXkgYmUgKi8KKyNpbmNsdWRlIDxmY250bC5oPiAgLyogT19DTE9FWEVDIGFuZCBPX05PTkJMT0NLLCBpZiBzdXBwb3J0ZWQuICovCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KIAogI2lmIGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQogIyBkZWZpbmUgaW5saW5lIF9faW5saW5lCkBAIC02MCw2ICs2MiwxNCBAQAogIyBpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChfUE9TSVhfUEFUSF9NQVgpCisjIGRlZmluZSBVVl9fUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCisjZWxpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgVVZfX1BBVEhfTUFYIFBBVEhfTUFYCisjZWxzZQorIyBkZWZpbmUgVVZfX1BBVEhfTUFYIDgxOTIKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAjIHVuZGVmIHB0aHJlYWRfYXRmb3JrCiAjIGRlZmluZSBwdGhyZWFkX2F0Zm9yayhwcmVwYXJlLCBwYXJlbnQsIGNoaWxkKSBcCkBAIC0xMDYsMTAgKzExNiw4IEBACiAjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZGVmaW5lZChfX0dOVUNfXykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQotIyBkZWZpbmUgVVZfREVTVFJVQ1RPUihkZWNsYXJhdGlvbikgX19hdHRyaWJ1dGVfXygoZGVzdHJ1Y3RvcikpIGRlY2xhcmF0aW9uCiAjIGRlZmluZSBVVl9VTlVTRUQoZGVjbGFyYXRpb24pICAgICBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBkZWNsYXJhdGlvbgogI2Vsc2UKLSMgZGVmaW5lIFVWX0RFU1RSVUNUT1IoZGVjbGFyYXRpb24pIGRlY2xhcmF0aW9uCiAjIGRlZmluZSBVVl9VTlVTRUQoZGVjbGFyYXRpb24pICAgICBkZWNsYXJhdGlvbgogI2VuZGlmCiAKQEAgLTI3MSw2ICsyNzksMTIgQEAKIEZJTEUqIHV2X19vcGVuX2ZpbGUoY29uc3QgY2hhciogcGF0aCk7CiBpbnQgdXZfX2dldHB3dWlkX3IodXZfcGFzc3dkX3QqIHB3ZCk7CiAKKy8qIHJhbmRvbSAqLworaW50IHV2X19yYW5kb21fZGV2dXJhbmRvbSh2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pOworaW50IHV2X19yYW5kb21fZ2V0cmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CitpbnQgdXZfX3JhbmRvbV9nZXRlbnRyb3B5KHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CitpbnQgdXZfX3JhbmRvbV9yZWFkcGF0aChjb25zdCBjaGFyKiBwYXRoLCB2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pOworaW50IHV2X19yYW5kb21fc3lzY3RsKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiAKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogaW50IHV2X19fc3RyZWFtX2ZkKGNvbnN0IHV2X3N0cmVhbV90KiBoYW5kbGUpOwpAQCAtMjc5LDEzICsyOTMsMTIgQEAKICNkZWZpbmUgdXZfX3N0cmVhbV9mZChoYW5kbGUpICgoaGFuZGxlKS0+aW9fd2F0Y2hlci5mZCkKICNlbmRpZiAvKiBkZWZpbmVkKF9fQVBQTEVfXykgKi8KIAotI2lmZGVmIFVWX19PX05PTkJMT0NLCi0jIGRlZmluZSBVVl9fRl9OT05CTE9DSyBVVl9fT19OT05CTE9DSworI2lmZGVmIE9fTk9OQkxPQ0sKKyMgZGVmaW5lIFVWX19GX05PTkJMT0NLIE9fTk9OQkxPQ0sKICNlbHNlCiAjIGRlZmluZSBVVl9fRl9OT05CTE9DSyAxCiAjZW5kaWYKIAotaW50IHV2X19tYWtlX3NvY2tldHBhaXIoaW50IGZkc1syXSwgaW50IGZsYWdzKTsKIGludCB1dl9fbWFrZV9waXBlKGludCBmZHNbMl0sIGludCBmbGFncyk7CiAKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKQEAgLTMyMyw0ICszMzYsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbmFtZWxlbik7CiAKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCisjZGVmaW5lIEhBVkVfTU1TRyAxCitzdHJ1Y3QgdXZfX21tc2doZHIgeworICBzdHJ1Y3QgbXNnaGRyIG1zZ19oZHI7CisgIHVuc2lnbmVkIGludCBtc2dfbGVuOworfTsKKworaW50IHV2X19yZWN2bW1zZyhpbnQgZmQsCisgICAgICAgICAgICAgICAgIHN0cnVjdCB1dl9fbW1zZ2hkciogbW1zZywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZsZW4sCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KTsKK2ludCB1dl9fc2VuZG1tc2coaW50IGZkLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXZfX21tc2doZHIqIG1tc2csCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2bGVuLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworI2Vsc2UKKyNkZWZpbmUgSEFWRV9NTVNHIDAKKyNlbmRpZgorCisKICNlbmRpZiAvKiBVVl9VTklYX0lOVEVSTkFMX0hfICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9rcXVldWUuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2txdWV1ZS5jCmluZGV4IGMwNGU3YTQuLmFkMDlmNDAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2txdWV1ZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2txdWV1ZS5jCkBAIC00NTQsMTAgKzQ1NCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKSB7CiAgIGludCBmZDsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDcwCisgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisjZW5kaWYKIAogICBpZiAodXZfX2lzX2FjdGl2ZShoYW5kbGUpKQogICAgIHJldHVybiBVVl9FSU5WQUw7CiAKKyAgaGFuZGxlLT5jYiA9IGNiOworICBoYW5kbGUtPnBhdGggPSB1dl9fc3RyZHVwKHBhdGgpOworICBpZiAoaGFuZGxlLT5wYXRoID09IE5VTEwpCisgICAgcmV0dXJuIFVWX0VOT01FTTsKKworICAvKiBUT0RPIG9wZW4gYXN5bmNocm9ub3VzbHkgLSBidXQgaG93IGRvIHdlIHJlcG9ydCBiYWNrIGVycm9ycz8gKi8KKyAgZmQgPSBvcGVuKGhhbmRsZS0+cGF0aCwgT19SRE9OTFkpOworICBpZiAoZmQgPT0gLTEpIHsKKyAgICB1dl9fZnJlZShoYW5kbGUtPnBhdGgpOworICAgIGhhbmRsZS0+cGF0aCA9IE5VTEw7CisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworICB9CisKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDcwCiAgIC8qIE51bGxpZnkgZmllbGQgdG8gcGVyZm9ybSBjaGVja3MgbGF0ZXIgKi8KICAgaGFuZGxlLT5jZl9jYiA9IE5VTEw7CkBAIC00NjUsMTQgKzQ4MSwxNyBAQAogICBoYW5kbGUtPnJlYWxwYXRoX2xlbiA9IDA7CiAgIGhhbmRsZS0+Y2ZfZmxhZ3MgPSBmbGFnczsKIAorICBpZiAoZnN0YXQoZmQsICZzdGF0YnVmKSkKKyAgICBnb3RvIGZhbGxiYWNrOworICAvKiBGU0V2ZW50cyB3b3JrcyBvbmx5IHdpdGggZGlyZWN0b3JpZXMgKi8KKyAgaWYgKCEoc3RhdGJ1Zi5zdF9tb2RlICYgU19JRkRJUikpCisgICAgZ290byBmYWxsYmFjazsKKwogICBpZiAoIXV2X19oYXNfZm9ya2VkX3dpdGhfY2ZydW5sb29wKSB7CiAgICAgaW50IHI7Ci0gICAgLyogVGhlIGZhbGxiYWNrIGZkIGlzIG5vdCB1c2VkICovCisgICAgLyogVGhlIGZhbGxiYWNrIGZkIGlzIG5vIGxvbmdlciBuZWVkZWQgKi8KKyAgICB1dl9fY2xvc2Vfbm9jaGVja3N0ZGlvKGZkKTsKICAgICBoYW5kbGUtPmV2ZW50X3dhdGNoZXIuZmQgPSAtMTsKLSAgICBoYW5kbGUtPnBhdGggPSB1dl9fc3RyZHVwKHBhdGgpOwotICAgIGlmIChoYW5kbGUtPnBhdGggPT0gTlVMTCkKLSAgICAgIHJldHVybiBVVl9FTk9NRU07Ci0gICAgaGFuZGxlLT5jYiA9IGNiOwogICAgIHIgPSB1dl9fZnNldmVudHNfaW5pdChoYW5kbGUpOwogICAgIGlmIChyID09IDApIHsKICAgICAgIHV2X19oYW5kbGVfc3RhcnQoaGFuZGxlKTsKQEAgLTQ4MiwyMCArNTAxLDkgQEAKICAgICB9CiAgICAgcmV0dXJuIHI7CiAgIH0KK2ZhbGxiYWNrOgogI2VuZGlmIC8qICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDcwICovCiAKLSAgLyogVE9ETyBvcGVuIGFzeW5jaHJvbm91c2x5IC0gYnV0IGhvdyBkbyB3ZSByZXBvcnQgYmFjayBlcnJvcnM/ICovCi0gIGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7Ci0gIGlmIChmZCA9PSAtMSkKLSAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0KLSAgaGFuZGxlLT5wYXRoID0gdXZfX3N0cmR1cChwYXRoKTsKLSAgaWYgKGhhbmRsZS0+cGF0aCA9PSBOVUxMKSB7Ci0gICAgdXZfX2Nsb3NlX25vY2hlY2tzdGRpbyhmZCk7Ci0gICAgcmV0dXJuIFVWX0VOT01FTTsKLSAgfQotCi0gIGhhbmRsZS0+Y2IgPSBjYjsKICAgdXZfX2hhbmRsZV9zdGFydChoYW5kbGUpOwogICB1dl9faW9faW5pdCgmaGFuZGxlLT5ldmVudF93YXRjaGVyLCB1dl9fZnNfZXZlbnQsIGZkKTsKICAgdXZfX2lvX3N0YXJ0KGhhbmRsZS0+bG9vcCwgJmhhbmRsZS0+ZXZlbnRfd2F0Y2hlciwgUE9MTElOKTsKQEAgLTUxNCw3ICs1MjIsNyBAQAogICB1dl9faGFuZGxlX3N0b3AoaGFuZGxlKTsKIAogI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwNzAKLSAgaWYgKCF1dl9faGFzX2ZvcmtlZF93aXRoX2NmcnVubG9vcCkKKyAgaWYgKCF1dl9faGFzX2ZvcmtlZF93aXRoX2NmcnVubG9vcCAmJiBoYW5kbGUtPmNmX2NiICE9IE5VTEwpCiAgICAgciA9IHV2X19mc2V2ZW50c19jbG9zZShoYW5kbGUpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LWNvcmUuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LWNvcmUuYwppbmRleCBiNTM5YmViLi45OWNiYjFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1jb3JlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtY29yZS5jCkBAIC05MCw3ICs5MCwxMiBAQAogICAgKiBhLmsuYS4gTG9sbGlwb3AuIFNpbmNlIEVQT0xMX0NMT0VYRUMgaXMgYW4gYWxpYXMgZm9yIE9fQ0xPRVhFQyBvbiBhbGwKICAgICogYXJjaGl0ZWN0dXJlcywgd2UganVzdCB1c2UgdGhhdCBpbnN0ZWFkLgogICAgKi8KKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9BUElfXykgJiYgX19BTkRST0lEX0FQSV9fIDwgMjEKKyAgZmQgPSAtMTsKKyAgZXJybm8gPSBFTk9TWVM7CisjZWxzZQogICBmZCA9IGVwb2xsX2NyZWF0ZTEoT19DTE9FWEVDKTsKKyNlbmRpZgogCiAgIC8qIGVwb2xsX2NyZWF0ZTEoKSBjYW4gZmFpbCBlaXRoZXIgYmVjYXVzZSBpdCdzIG5vdCBpbXBsZW1lbnRlZCAob2xkIGtlcm5lbCkKICAgICogb3IgYmVjYXVzZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIE9fQ0xPRVhFQyBmbGFnLgpAQCAtMjAzLDYgKzIwOCw4IEBACiAgICAqIHRoYXQgYmVpbmcgdGhlIGxhcmdlc3QgdmFsdWUgSSBoYXZlIHNlZW4gaW4gdGhlIHdpbGQgKGFuZCBvbmx5IG9uY2UuKQogICAgKi8KICAgc3RhdGljIGNvbnN0IGludCBtYXhfc2FmZV90aW1lb3V0ID0gMTc4OTU2OTsKKyAgc3RhdGljIGludCBub19lcG9sbF9wd2FpdDsKKyAgc3RhdGljIGludCBub19lcG9sbF93YWl0OwogICBzdHJ1Y3QgZXBvbGxfZXZlbnQgZXZlbnRzWzEwMjRdOwogICBzdHJ1Y3QgZXBvbGxfZXZlbnQqIHBlOwogICBzdHJ1Y3QgZXBvbGxfZXZlbnQgZTsKQEAgLTIxMCw3ICsyMTcsNyBAQAogICBRVUVVRSogcTsKICAgdXZfX2lvX3QqIHc7CiAgIHNpZ3NldF90IHNpZ3NldDsKLSAgc2lnc2V0X3QqIHBzaWdzZXQ7CisgIHVpbnQ2NF90IHNpZ21hc2s7CiAgIHVpbnQ2NF90IGJhc2U7CiAgIGludCBoYXZlX3NpZ25hbHM7CiAgIGludCBuZXZlbnRzOwpAQCAtMjYyLDExICsyNjksMTEgQEAKICAgICB3LT5ldmVudHMgPSB3LT5wZXZlbnRzOwogICB9CiAKLSAgcHNpZ3NldCA9IE5VTEw7CisgIHNpZ21hc2sgPSAwOwogICBpZiAobG9vcC0+ZmxhZ3MgJiBVVl9MT09QX0JMT0NLX1NJR1BST0YpIHsKICAgICBzaWdlbXB0eXNldCgmc2lnc2V0KTsKICAgICBzaWdhZGRzZXQoJnNpZ3NldCwgU0lHUFJPRik7Ci0gICAgcHNpZ3NldCA9ICZzaWdzZXQ7CisgICAgc2lnbWFzayB8PSAxIDw8IChTSUdQUk9GIC0gMSk7CiAgIH0KIAogICBhc3NlcnQodGltZW91dCA+PSAtMSk7CkBAIC0yODEsMTEgKzI4OCwzNSBAQAogICAgIGlmIChzaXplb2YoaW50MzJfdCkgPT0gc2l6ZW9mKGxvbmcpICYmIHRpbWVvdXQgPj0gbWF4X3NhZmVfdGltZW91dCkKICAgICAgIHRpbWVvdXQgPSBtYXhfc2FmZV90aW1lb3V0OwogCi0gICAgbmZkcyA9IGVwb2xsX3B3YWl0KGxvb3AtPmJhY2tlbmRfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShldmVudHMpLAotICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICBwc2lnc2V0KTsKKyAgICBpZiAoc2lnbWFzayAhPSAwICYmIG5vX2Vwb2xsX3B3YWl0ICE9IDApCisgICAgICBpZiAocHRocmVhZF9zaWdtYXNrKFNJR19CTE9DSywgJnNpZ3NldCwgTlVMTCkpCisgICAgICAgIGFib3J0KCk7CisKKyAgICBpZiAobm9fZXBvbGxfd2FpdCAhPSAwIHx8IChzaWdtYXNrICE9IDAgJiYgbm9fZXBvbGxfcHdhaXQgPT0gMCkpIHsKKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9BUElfXykgJiYgX19BTkRST0lEX0FQSV9fIDwgMjEKKyAgICAgIG5mZHMgPSAtMTsKKyAgICAgIGVycm5vID0gRU5PU1lTOworI2Vsc2UKKyAgICAgIG5mZHMgPSBlcG9sbF9wd2FpdChsb29wLT5iYWNrZW5kX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGV2ZW50cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnc2V0KTsKKyNlbmRpZgorICAgICAgaWYgKG5mZHMgPT0gLTEgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgICAgICBub19lcG9sbF9wd2FpdCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIG5mZHMgPSBlcG9sbF93YWl0KGxvb3AtPmJhY2tlbmRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGV2ZW50cyksCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKKyAgICAgIGlmIChuZmRzID09IC0xICYmIGVycm5vID09IEVOT1NZUykKKyAgICAgICAgbm9fZXBvbGxfd2FpdCA9IDE7CisgICAgfQorCisgICAgaWYgKHNpZ21hc2sgIT0gMCAmJiBub19lcG9sbF9wd2FpdCAhPSAwKQorICAgICAgaWYgKHB0aHJlYWRfc2lnbWFzayhTSUdfVU5CTE9DSywgJnNpZ3NldCwgTlVMTCkpCisgICAgICAgIGFib3J0KCk7CiAKICAgICAvKiBVcGRhdGUgbG9vcC0+dGltZSB1bmNvbmRpdGlvbmFsbHkuIEl0J3MgdGVtcHRpbmcgdG8gc2tpcCB0aGUgdXBkYXRlIHdoZW4KICAgICAgKiB0aW1lb3V0ID09IDAgKGkuZS4gbm9uLWJsb2NraW5nIHBvbGwpIGJ1dCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUKQEAgLTMwNiw2ICszMzcsMTIgQEAKICAgICB9CiAKICAgICBpZiAobmZkcyA9PSAtMSkgeworICAgICAgaWYgKGVycm5vID09IEVOT1NZUykgeworICAgICAgICAvKiBlcG9sbF93YWl0KCkgb3IgZXBvbGxfcHdhaXQoKSBmYWlsZWQsIHRyeSB0aGUgb3RoZXIgc3lzdGVtIGNhbGwuICovCisgICAgICAgIGFzc2VydChub19lcG9sbF93YWl0ID09IDAgfHwgbm9fZXBvbGxfcHdhaXQgPT0gMCk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCiAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCiAgICAgICAgIGFib3J0KCk7CiAKQEAgLTMyMiw5ICszNTksMTkgQEAKICAgICBoYXZlX3NpZ25hbHMgPSAwOwogICAgIG5ldmVudHMgPSAwOwogCi0gICAgYXNzZXJ0KGxvb3AtPndhdGNoZXJzICE9IE5VTEwpOwotICAgIGxvb3AtPndhdGNoZXJzW2xvb3AtPm53YXRjaGVyc10gPSAodm9pZCopIGV2ZW50czsKLSAgICBsb29wLT53YXRjaGVyc1tsb29wLT5ud2F0Y2hlcnMgKyAxXSA9ICh2b2lkKikgKHVpbnRwdHJfdCkgbmZkczsKKyAgICB7CisgICAgICAvKiBTcXVlbGNoIGEgLVdhZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgd2FybmluZyB3aXRoIGdjYyA+PSA5LiAqLworICAgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQqIGV2ZW50czsKKyAgICAgICAgdXZfX2lvX3QqIHdhdGNoZXJzOworICAgICAgfSB4OworCisgICAgICB4LmV2ZW50cyA9IGV2ZW50czsKKyAgICAgIGFzc2VydChsb29wLT53YXRjaGVycyAhPSBOVUxMKTsKKyAgICAgIGxvb3AtPndhdGNoZXJzW2xvb3AtPm53YXRjaGVyc10gPSB4LndhdGNoZXJzOworICAgICAgbG9vcC0+d2F0Y2hlcnNbbG9vcC0+bndhdGNoZXJzICsgMV0gPSAodm9pZCopICh1aW50cHRyX3QpIG5mZHM7CisgICAgfQorCiAgICAgZm9yIChpID0gMDsgaSA8IG5mZHM7IGkrKykgewogICAgICAgcGUgPSBldmVudHMgKyBpOwogICAgICAgZmQgPSBwZS0+ZGF0YS5mZDsKQEAgLTcyMSw3ICs3NjgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1jcHVzLAogICAgICAgICAgICAgICAgICAgICAgIHV2X2NwdV9pbmZvX3QqIGNpKSB7CiAgIHN0cnVjdCB1dl9jcHVfdGltZXNfcyB0czsKLSAgdWludDY0X3QgY2xvY2tfdGlja3M7CisgIHVuc2lnbmVkIGludCB0aWNrczsKKyAgdW5zaWduZWQgaW50IG11bHRpcGxpZXI7CiAgIHVpbnQ2NF90IHVzZXI7CiAgIHVpbnQ2NF90IG5pY2U7CiAgIHVpbnQ2NF90IHN5czsKQEAgLTczMiw5ICs3ODAsMTAgQEAKICAgdWludDY0X3QgbGVuOwogICBjaGFyIGJ1ZlsxMDI0XTsKIAotICBjbG9ja190aWNrcyA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOwotICBhc3NlcnQoY2xvY2tfdGlja3MgIT0gKHVpbnQ2NF90KSAtMSk7Ci0gIGFzc2VydChjbG9ja190aWNrcyAhPSAwKTsKKyAgdGlja3MgPSAodW5zaWduZWQgaW50KXN5c2NvbmYoX1NDX0NMS19UQ0spOworICBtdWx0aXBsaWVyID0gKCh1aW50NjRfdCkxMDAwTCAvIHRpY2tzKTsKKyAgYXNzZXJ0KHRpY2tzICE9ICh1bnNpZ25lZCBpbnQpIC0xKTsKKyAgYXNzZXJ0KHRpY2tzICE9IDApOwogCiAgIHJld2luZChzdGF0ZmlsZV9mcCk7CiAKQEAgLTc3NiwxMSArODI1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICZpcnEpKQogICAgICAgYWJvcnQoKTsKIAotICAgIHRzLnVzZXIgPSBjbG9ja190aWNrcyAqIHVzZXI7Ci0gICAgdHMubmljZSA9IGNsb2NrX3RpY2tzICogbmljZTsKLSAgICB0cy5zeXMgID0gY2xvY2tfdGlja3MgKiBzeXM7Ci0gICAgdHMuaWRsZSA9IGNsb2NrX3RpY2tzICogaWRsZTsKLSAgICB0cy5pcnEgID0gY2xvY2tfdGlja3MgKiBpcnE7CisgICAgdHMudXNlciA9IHVzZXIgKiBtdWx0aXBsaWVyOworICAgIHRzLm5pY2UgPSBuaWNlICogbXVsdGlwbGllcjsKKyAgICB0cy5zeXMgID0gc3lzICogbXVsdGlwbGllcjsKKyAgICB0cy5pZGxlID0gaWRsZSAqIG11bHRpcGxpZXI7CisgICAgdHMuaXJxICA9IGlycSAqIG11bHRpcGxpZXI7CiAgICAgY2lbbnVtKytdLmNwdV90aW1lcyA9IHRzOwogICB9CiAgIGFzc2VydChudW0gPT0gbnVtY3B1cyk7CkBAIC04MTIsMTYgKzg2MSw2IEBACiB9CiAKIAotdm9pZCB1dl9mcmVlX2NwdV9pbmZvKHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvcywgaW50IGNvdW50KSB7Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKLSAgfQotCi0gIHV2X19mcmVlKGNwdV9pbmZvcyk7Ci19Ci0KIHN0YXRpYyBpbnQgdXZfX2lmYWRkcl9leGNsdWRlKHN0cnVjdCBpZmFkZHJzICplbnQsIGludCBleGNsdWRlX3R5cGUpIHsKICAgaWYgKCEoKGVudC0+aWZhX2ZsYWdzICYgSUZGX1VQKSAmJiAoZW50LT5pZmFfZmxhZ3MgJiBJRkZfUlVOTklORykpKQogICAgIHJldHVybiAxOwpAQCAtOTUzLDcgKzk5Miw3IEBACiAgIHJjID0gMDsKICAgZmQgPSB1dl9fb3Blbl9jbG9leGVjKCIvcHJvYy9tZW1pbmZvIiwgT19SRE9OTFkpOwogCi0gIGlmIChmZCA9PSAtMSkKKyAgaWYgKGZkIDwgMCkKICAgICByZXR1cm4gMDsKIAogICBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtaW5vdGlmeS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtaW5vdGlmeS5jCmluZGV4IDliMjYyMDIuLjQyYjYwMWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LWlub3RpZnkuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1pbm90aWZ5LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCisjaW5jbHVkZSA8c3lzL2lub3RpZnkuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIApAQCAtNjQsNDUgKzY1LDE3IEBACiBzdGF0aWMgdm9pZCBtYXliZV9mcmVlX3dhdGNoZXJfbGlzdChzdHJ1Y3Qgd2F0Y2hlcl9saXN0KiB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfbG9vcF90KiBsb29wKTsKIAotc3RhdGljIGludCBuZXdfaW5vdGlmeV9mZCh2b2lkKSB7Ci0gIGludCBlcnI7Ci0gIGludCBmZDsKLQotICBmZCA9IHV2X19pbm90aWZ5X2luaXQxKFVWX19JTl9OT05CTE9DSyB8IFVWX19JTl9DTE9FWEVDKTsKLSAgaWYgKGZkICE9IC0xKQotICAgIHJldHVybiBmZDsKLQotICBpZiAoZXJybm8gIT0gRU5PU1lTKQotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLQotICBmZCA9IHV2X19pbm90aWZ5X2luaXQoKTsKLSAgaWYgKGZkID09IC0xKQotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLQotICBlcnIgPSB1dl9fY2xvZXhlYyhmZCwgMSk7Ci0gIGlmIChlcnIgPT0gMCkKLSAgICBlcnIgPSB1dl9fbm9uYmxvY2soZmQsIDEpOwotCi0gIGlmIChlcnIpIHsKLSAgICB1dl9fY2xvc2UoZmQpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KLQotICByZXR1cm4gZmQ7Ci19Ci0KLQogc3RhdGljIGludCBpbml0X2lub3RpZnkodXZfbG9vcF90KiBsb29wKSB7Ci0gIGludCBlcnI7CisgIGludCBmZDsKIAogICBpZiAobG9vcC0+aW5vdGlmeV9mZCAhPSAtMSkKICAgICByZXR1cm4gMDsKIAotICBlcnIgPSBuZXdfaW5vdGlmeV9mZCgpOwotICBpZiAoZXJyIDwgMCkKLSAgICByZXR1cm4gZXJyOworICBmZCA9IGlub3RpZnlfaW5pdDEoSU5fTk9OQkxPQ0sgfCBJTl9DTE9FWEVDKTsKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKLSAgbG9vcC0+aW5vdGlmeV9mZCA9IGVycjsKKyAgbG9vcC0+aW5vdGlmeV9mZCA9IGZkOwogICB1dl9faW9faW5pdCgmbG9vcC0+aW5vdGlmeV9yZWFkX3dhdGNoZXIsIHV2X19pbm90aWZ5X3JlYWQsIGxvb3AtPmlub3RpZnlfZmQpOwogICB1dl9faW9fc3RhcnQobG9vcCwgJmxvb3AtPmlub3RpZnlfcmVhZF93YXRjaGVyLCBQT0xMSU4pOwogCkBAIC0xODYsNyArMTU5LDcgQEAKICAgaWYgKCghdy0+aXRlcmF0aW5nKSAmJiBRVUVVRV9FTVBUWSgmdy0+d2F0Y2hlcnMpKSB7CiAgICAgLyogTm8gd2F0Y2hlcnMgbGVmdCBmb3IgdGhpcyBwYXRoLiBDbGVhbiB1cC4gKi8KICAgICBSQl9SRU1PVkUod2F0Y2hlcl9yb290LCBDQVNUKCZsb29wLT5pbm90aWZ5X3dhdGNoZXJzKSwgdyk7Ci0gICAgdXZfX2lub3RpZnlfcm1fd2F0Y2gobG9vcC0+aW5vdGlmeV9mZCwgdy0+d2QpOworICAgIGlub3RpZnlfcm1fd2F0Y2gobG9vcC0+aW5vdGlmeV9mZCwgdy0+d2QpOwogICAgIHV2X19mcmVlKHcpOwogICB9CiB9CkBAIC0xOTQsNyArMTY3LDcgQEAKIHN0YXRpYyB2b2lkIHV2X19pbm90aWZ5X3JlYWQodXZfbG9vcF90KiBsb29wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9faW9fdCogZHVtbXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBldmVudHMpIHsKLSAgY29uc3Qgc3RydWN0IHV2X19pbm90aWZ5X2V2ZW50KiBlOworICBjb25zdCBzdHJ1Y3QgaW5vdGlmeV9ldmVudCogZTsKICAgc3RydWN0IHdhdGNoZXJfbGlzdCogdzsKICAgdXZfZnNfZXZlbnRfdCogaDsKICAgUVVFVUUgcXVldWU7CkBAIC0yMTksMTIgKzE5MiwxMiBAQAogCiAgICAgLyogTm93IHdlIGhhdmUgb25lIG9yIG1vcmUgaW5vdGlmeV9ldmVudCBzdHJ1Y3RzLiAqLwogICAgIGZvciAocCA9IGJ1ZjsgcCA8IGJ1ZiArIHNpemU7IHAgKz0gc2l6ZW9mKCplKSArIGUtPmxlbikgewotICAgICAgZSA9IChjb25zdCBzdHJ1Y3QgdXZfX2lub3RpZnlfZXZlbnQqKXA7CisgICAgICBlID0gKGNvbnN0IHN0cnVjdCBpbm90aWZ5X2V2ZW50KikgcDsKIAogICAgICAgZXZlbnRzID0gMDsKLSAgICAgIGlmIChlLT5tYXNrICYgKFVWX19JTl9BVFRSSUJ8VVZfX0lOX01PRElGWSkpCisgICAgICBpZiAoZS0+bWFzayAmIChJTl9BVFRSSUJ8SU5fTU9ESUZZKSkKICAgICAgICAgZXZlbnRzIHw9IFVWX0NIQU5HRTsKLSAgICAgIGlmIChlLT5tYXNrICYgfihVVl9fSU5fQVRUUklCfFVWX19JTl9NT0RJRlkpKQorICAgICAgaWYgKGUtPm1hc2sgJiB+KElOX0FUVFJJQnxJTl9NT0RJRlkpKQogICAgICAgICBldmVudHMgfD0gVVZfUkVOQU1FOwogCiAgICAgICB3ID0gZmluZF93YXRjaGVyKGxvb3AsIGUtPndkKTsKQEAgLTI5MCwxNiArMjYzLDE2IEBACiAgIGlmIChlcnIpCiAgICAgcmV0dXJuIGVycjsKIAotICBldmVudHMgPSBVVl9fSU5fQVRUUklCCi0gICAgICAgICB8IFVWX19JTl9DUkVBVEUKLSAgICAgICAgIHwgVVZfX0lOX01PRElGWQotICAgICAgICAgfCBVVl9fSU5fREVMRVRFCi0gICAgICAgICB8IFVWX19JTl9ERUxFVEVfU0VMRgotICAgICAgICAgfCBVVl9fSU5fTU9WRV9TRUxGCi0gICAgICAgICB8IFVWX19JTl9NT1ZFRF9GUk9NCi0gICAgICAgICB8IFVWX19JTl9NT1ZFRF9UTzsKKyAgZXZlbnRzID0gSU5fQVRUUklCCisgICAgICAgICB8IElOX0NSRUFURQorICAgICAgICAgfCBJTl9NT0RJRlkKKyAgICAgICAgIHwgSU5fREVMRVRFCisgICAgICAgICB8IElOX0RFTEVURV9TRUxGCisgICAgICAgICB8IElOX01PVkVfU0VMRgorICAgICAgICAgfCBJTl9NT1ZFRF9GUk9NCisgICAgICAgICB8IElOX01PVkVEX1RPOwogCi0gIHdkID0gdXZfX2lub3RpZnlfYWRkX3dhdGNoKGhhbmRsZS0+bG9vcC0+aW5vdGlmeV9mZCwgcGF0aCwgZXZlbnRzKTsKKyAgd2QgPSBpbm90aWZ5X2FkZF93YXRjaChoYW5kbGUtPmxvb3AtPmlub3RpZnlfZmQsIHBhdGgsIGV2ZW50cyk7CiAgIGlmICh3ZCA9PSAtMSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LXN5c2NhbGxzLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1zeXNjYWxscy5jCmluZGV4IDU2MzdjZjkuLjc0MmYyNmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LXN5c2NhbGxzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtc3lzY2FsbHMuYwpAQCAtMjYsMTkgKzI2LDYgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCi0jaWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKQotIyBpZiBfX2hhc19mZWF0dXJlKG1lbW9yeV9zYW5pdGl6ZXIpCi0jICBkZWZpbmUgTVNBTl9BQ1RJVkUgMQotIyAgaW5jbHVkZSA8c2FuaXRpemVyL21zYW5faW50ZXJmYWNlLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19pMzg2X18pCi0jIGlmbmRlZiBfX05SX3NvY2tldGNhbGwKLSMgIGRlZmluZSBfX05SX3NvY2tldGNhbGwgMTAyCi0jIGVuZGlmCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19hcm1fXykKICMgaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQogIyAgZGVmaW5lIFVWX1NZU0NBTExfQkFTRSAwCkBAIC00Nyw4NiArMzQsNiBAQAogIyBlbmRpZgogI2VuZGlmIC8qIF9fYXJtX18gKi8KIAotI2lmbmRlZiBfX05SX2FjY2VwdDQKLSMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyAgZGVmaW5lIF9fTlJfYWNjZXB0NCAyODgKLSMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotICAgLyogTm90aGluZy4gSGFuZGxlZCB0aHJvdWdoIHNvY2tldGNhbGwoKS4gKi8KLSMgZWxpZiBkZWZpbmVkKF9fYXJtX18pCi0jICBkZWZpbmUgX19OUl9hY2NlcHQ0IChVVl9TWVNDQUxMX0JBU0UgKyAzNjYpCi0jIGVuZGlmCi0jZW5kaWYgLyogX19OUl9hY2NlcHQ0ICovCi0KLSNpZm5kZWYgX19OUl9ldmVudGZkCi0jIGlmIGRlZmluZWQoX194ODZfNjRfXykKLSMgIGRlZmluZSBfX05SX2V2ZW50ZmQgMjg0Ci0jIGVsaWYgZGVmaW5lZChfX2kzODZfXykKLSMgIGRlZmluZSBfX05SX2V2ZW50ZmQgMzIzCi0jIGVsaWYgZGVmaW5lZChfX2FybV9fKQotIyAgZGVmaW5lIF9fTlJfZXZlbnRmZCAoVVZfU1lTQ0FMTF9CQVNFICsgMzUxKQotIyBlbmRpZgotI2VuZGlmIC8qIF9fTlJfZXZlbnRmZCAqLwotCi0jaWZuZGVmIF9fTlJfZXZlbnRmZDIKLSMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyAgZGVmaW5lIF9fTlJfZXZlbnRmZDIgMjkwCi0jIGVsaWYgZGVmaW5lZChfX2kzODZfXykKLSMgIGRlZmluZSBfX05SX2V2ZW50ZmQyIDMyOAotIyBlbGlmIGRlZmluZWQoX19hcm1fXykKLSMgIGRlZmluZSBfX05SX2V2ZW50ZmQyIChVVl9TWVNDQUxMX0JBU0UgKyAzNTYpCi0jIGVuZGlmCi0jZW5kaWYgLyogX19OUl9ldmVudGZkMiAqLwotCi0jaWZuZGVmIF9fTlJfaW5vdGlmeV9pbml0Ci0jIGlmIGRlZmluZWQoX194ODZfNjRfXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfaW5pdCAyNTMKLSMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IDI5MQotIyBlbGlmIGRlZmluZWQoX19hcm1fXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfaW5pdCAoVVZfU1lTQ0FMTF9CQVNFICsgMzE2KQotIyBlbmRpZgotI2VuZGlmIC8qIF9fTlJfaW5vdGlmeV9pbml0ICovCi0KLSNpZm5kZWYgX19OUl9pbm90aWZ5X2luaXQxCi0jIGlmIGRlZmluZWQoX194ODZfNjRfXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfaW5pdDEgMjk0Ci0jIGVsaWYgZGVmaW5lZChfX2kzODZfXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfaW5pdDEgMzMyCi0jIGVsaWYgZGVmaW5lZChfX2FybV9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MSAoVVZfU1lTQ0FMTF9CQVNFICsgMzYwKQotIyBlbmRpZgotI2VuZGlmIC8qIF9fTlJfaW5vdGlmeV9pbml0MSAqLwotCi0jaWZuZGVmIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKLSMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggMjU0Ci0jIGVsaWYgZGVmaW5lZChfX2kzODZfXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoIDI5MgotIyBlbGlmIGRlZmluZWQoX19hcm1fXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoIChVVl9TWVNDQUxMX0JBU0UgKyAzMTcpCi0jIGVuZGlmCi0jZW5kaWYgLyogX19OUl9pbm90aWZ5X2FkZF93YXRjaCAqLwotCi0jaWZuZGVmIF9fTlJfaW5vdGlmeV9ybV93YXRjaAotIyBpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jICBkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoIDI1NQotIyBlbGlmIGRlZmluZWQoX19pMzg2X18pCi0jICBkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoIDI5MwotIyBlbGlmIGRlZmluZWQoX19hcm1fXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggKFVWX1NZU0NBTExfQkFTRSArIDMxOCkKLSMgZW5kaWYKLSNlbmRpZiAvKiBfX05SX2lub3RpZnlfcm1fd2F0Y2ggKi8KLQotI2lmbmRlZiBfX05SX3BpcGUyCi0jIGlmIGRlZmluZWQoX194ODZfNjRfXykKLSMgIGRlZmluZSBfX05SX3BpcGUyIDI5MwotIyBlbGlmIGRlZmluZWQoX19pMzg2X18pCi0jICBkZWZpbmUgX19OUl9waXBlMiAzMzEKLSMgZWxpZiBkZWZpbmVkKF9fYXJtX18pCi0jICBkZWZpbmUgX19OUl9waXBlMiAoVVZfU1lTQ0FMTF9CQVNFICsgMzU5KQotIyBlbmRpZgotI2VuZGlmIC8qIF9fTlJfcGlwZTIgKi8KLQogI2lmbmRlZiBfX05SX3JlY3ZtbXNnCiAjIGlmIGRlZmluZWQoX194ODZfNjRfXykKICMgIGRlZmluZSBfX05SX3JlY3ZtbXNnIDI5OQpAQCAtMjAzLDEwMyArMTEwLDIzIEBACiAjIGVuZGlmCiAjZW5kaWYgLyogX19OUl9zdGF0eCAqLwogCi1pbnQgdXZfX2FjY2VwdDQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIqIGFkZHIsIHNvY2tsZW5fdCogYWRkcmxlbiwgaW50IGZsYWdzKSB7Ci0jaWYgZGVmaW5lZChfX2kzODZfXykKLSAgdW5zaWduZWQgbG9uZyBhcmdzWzRdOwotICBpbnQgcjsKKyNpZm5kZWYgX19OUl9nZXRyYW5kb20KKyMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorIyAgZGVmaW5lIF9fTlJfZ2V0cmFuZG9tIDMxOAorIyBlbGlmIGRlZmluZWQoX19pMzg2X18pCisjICBkZWZpbmUgX19OUl9nZXRyYW5kb20gMzU1CisjIGVsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyMgIGRlZmluZSBfX05SX2dldHJhbmRvbSAzODQKKyMgZWxpZiBkZWZpbmVkKF9fYXJtX18pCisjICBkZWZpbmUgX19OUl9nZXRyYW5kb20gKFVWX1NZU0NBTExfQkFTRSArIDM4NCkKKyMgZWxpZiBkZWZpbmVkKF9fcHBjX18pCisjICBkZWZpbmUgX19OUl9nZXRyYW5kb20gMzU5CisjIGVsaWYgZGVmaW5lZChfX3MzOTBfXykKKyMgIGRlZmluZSBfX05SX2dldHJhbmRvbSAzNDkKKyMgZW5kaWYKKyNlbmRpZiAvKiBfX05SX2dldHJhbmRvbSAqLwogCi0gIGFyZ3NbMF0gPSAodW5zaWduZWQgbG9uZykgZmQ7Ci0gIGFyZ3NbMV0gPSAodW5zaWduZWQgbG9uZykgYWRkcjsKLSAgYXJnc1syXSA9ICh1bnNpZ25lZCBsb25nKSBhZGRybGVuOwotICBhcmdzWzNdID0gKHVuc2lnbmVkIGxvbmcpIGZsYWdzOwotCi0gIHIgPSBzeXNjYWxsKF9fTlJfc29ja2V0Y2FsbCwgMTggLyogU1lTX0FDQ0VQVDQgKi8sIGFyZ3MpOwotCi0gIC8qIHNvY2tldGNhbGwoKSByYWlzZXMgRUlOVkFMIHdoZW4gU1lTX0FDQ0VQVDQgaXMgbm90IHN1cHBvcnRlZCBidXQgc28gZG9lcwotICAgKiBhIGJhZCBmbGFncyBhcmd1bWVudC4gVHJ5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byBjYXNlcy4KLSAgICovCi0gIGlmIChyID09IC0xKQotICAgIGlmIChlcnJubyA9PSBFSU5WQUwpCi0gICAgICBpZiAoKGZsYWdzICYgfihVVl9fU09DS19DTE9FWEVDfFVWX19TT0NLX05PTkJMT0NLKSkgPT0gMCkKLSAgICAgICAgZXJybm8gPSBFTk9TWVM7Ci0KLSAgcmV0dXJuIHI7Ci0jZWxpZiBkZWZpbmVkKF9fTlJfYWNjZXB0NCkKLSAgcmV0dXJuIHN5c2NhbGwoX19OUl9hY2NlcHQ0LCBmZCwgYWRkciwgYWRkcmxlbiwgZmxhZ3MpOwotI2Vsc2UKLSAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKLSNlbmRpZgotfQotCi0KLWludCB1dl9fZXZlbnRmZCh1bnNpZ25lZCBpbnQgY291bnQpIHsKLSNpZiBkZWZpbmVkKF9fTlJfZXZlbnRmZCkKLSAgcmV0dXJuIHN5c2NhbGwoX19OUl9ldmVudGZkLCBjb3VudCk7Ci0jZWxzZQotICByZXR1cm4gZXJybm8gPSBFTk9TWVMsIC0xOwotI2VuZGlmCi19Ci0KLQotaW50IHV2X19ldmVudGZkMih1bnNpZ25lZCBpbnQgY291bnQsIGludCBmbGFncykgewotI2lmIGRlZmluZWQoX19OUl9ldmVudGZkMikKLSAgcmV0dXJuIHN5c2NhbGwoX19OUl9ldmVudGZkMiwgY291bnQsIGZsYWdzKTsKLSNlbHNlCi0gIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7Ci0jZW5kaWYKLX0KLQotCi1pbnQgdXZfX2lub3RpZnlfaW5pdCh2b2lkKSB7Ci0jaWYgZGVmaW5lZChfX05SX2lub3RpZnlfaW5pdCkKLSAgcmV0dXJuIHN5c2NhbGwoX19OUl9pbm90aWZ5X2luaXQpOwotI2Vsc2UKLSAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKLSNlbmRpZgotfQotCi0KLWludCB1dl9faW5vdGlmeV9pbml0MShpbnQgZmxhZ3MpIHsKLSNpZiBkZWZpbmVkKF9fTlJfaW5vdGlmeV9pbml0MSkKLSAgcmV0dXJuIHN5c2NhbGwoX19OUl9pbm90aWZ5X2luaXQxLCBmbGFncyk7Ci0jZWxzZQotICByZXR1cm4gZXJybm8gPSBFTk9TWVMsIC0xOwotI2VuZGlmCi19Ci0KLQotaW50IHV2X19pbm90aWZ5X2FkZF93YXRjaChpbnQgZmQsIGNvbnN0IGNoYXIqIHBhdGgsIHVpbnQzMl90IG1hc2spIHsKLSNpZiBkZWZpbmVkKF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gpCi0gIHJldHVybiBzeXNjYWxsKF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gsIGZkLCBwYXRoLCBtYXNrKTsKLSNlbHNlCi0gIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7Ci0jZW5kaWYKLX0KLQotCi1pbnQgdXZfX2lub3RpZnlfcm1fd2F0Y2goaW50IGZkLCBpbnQzMl90IHdkKSB7Ci0jaWYgZGVmaW5lZChfX05SX2lub3RpZnlfcm1fd2F0Y2gpCi0gIHJldHVybiBzeXNjYWxsKF9fTlJfaW5vdGlmeV9ybV93YXRjaCwgZmQsIHdkKTsKLSNlbHNlCi0gIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7Ci0jZW5kaWYKLX0KLQotCi1pbnQgdXZfX3BpcGUyKGludCBwaXBlZmRbMl0sIGludCBmbGFncykgewotI2lmIGRlZmluZWQoX19OUl9waXBlMikKLSAgaW50IHJlc3VsdDsKLSAgcmVzdWx0ID0gc3lzY2FsbChfX05SX3BpcGUyLCBwaXBlZmQsIGZsYWdzKTsKLSNpZiBNU0FOX0FDVElWRQotICBpZiAoIXJlc3VsdCkKLSAgICBfX21zYW5fdW5wb2lzb24ocGlwZWZkLCBzaXplb2YoaW50WzJdKSk7Ci0jZW5kaWYKLSAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7Ci0jZW5kaWYKLX0KLQorc3RydWN0IHV2X19tbXNnaGRyOwogCiBpbnQgdXZfX3NlbmRtbXNnKGludCBmZCwKICAgICAgICAgICAgICAgICAgc3RydWN0IHV2X19tbXNnaGRyKiBtbXNnLApAQCAtMzY3LDMgKzE5NCwxMiBAQAogICByZXR1cm4gZXJybm8gPSBFTk9TWVMsIC0xOwogI2VuZGlmCiB9CisKKworc3NpemVfdCB1dl9fZ2V0cmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgdW5zaWduZWQgZmxhZ3MpIHsKKyNpZiBkZWZpbmVkKF9fTlJfZ2V0cmFuZG9tKQorICByZXR1cm4gc3lzY2FsbChfX05SX2dldHJhbmRvbSwgYnVmLCBidWZsZW4sIGZsYWdzKTsKKyNlbHNlCisgIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LXN5c2NhbGxzLmggYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1zeXNjYWxscy5oCmluZGV4IDdlNThiZmEuLjJlOGZhMmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LXN5c2NhbGxzLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtc3lzY2FsbHMuaApAQCAtMzEsNTUgKzMxLDYgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KIAotI2lmIGRlZmluZWQoX19hbHBoYV9fKQotIyBkZWZpbmUgVVZfX09fQ0xPRVhFQyAgICAgICAgMHgyMDAwMDAKLSNlbGlmIGRlZmluZWQoX19ocHBhX18pCi0jIGRlZmluZSBVVl9fT19DTE9FWEVDICAgICAgICAweDIwMDAwMAotI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pCi0jIGRlZmluZSBVVl9fT19DTE9FWEVDICAgICAgICAweDQwMDAwMAotI2Vsc2UKLSMgZGVmaW5lIFVWX19PX0NMT0VYRUMgICAgICAgIDB4ODAwMDAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX2FscGhhX18pCi0jIGRlZmluZSBVVl9fT19OT05CTE9DSyAgICAgICAweDQKLSNlbGlmIGRlZmluZWQoX19ocHBhX18pCi0jIGRlZmluZSBVVl9fT19OT05CTE9DSyAgICAgICBPX05PTkJMT0NLCi0jZWxpZiBkZWZpbmVkKF9fbWlwc19fKQotIyBkZWZpbmUgVVZfX09fTk9OQkxPQ0sgICAgICAgMHg4MAotI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pCi0jIGRlZmluZSBVVl9fT19OT05CTE9DSyAgICAgICAweDQwMDAKLSNlbHNlCi0jIGRlZmluZSBVVl9fT19OT05CTE9DSyAgICAgICAweDgwMAotI2VuZGlmCi0KLSNkZWZpbmUgVVZfX0VGRF9DTE9FWEVDICAgICAgIFVWX19PX0NMT0VYRUMKLSNkZWZpbmUgVVZfX0VGRF9OT05CTE9DSyAgICAgIFVWX19PX05PTkJMT0NLCi0KLSNkZWZpbmUgVVZfX0lOX0NMT0VYRUMgICAgICAgIFVWX19PX0NMT0VYRUMKLSNkZWZpbmUgVVZfX0lOX05PTkJMT0NLICAgICAgIFVWX19PX05PTkJMT0NLCi0KLSNkZWZpbmUgVVZfX1NPQ0tfQ0xPRVhFQyAgICAgIFVWX19PX0NMT0VYRUMKLSNpZiBkZWZpbmVkKFNPQ0tfTk9OQkxPQ0spCi0jIGRlZmluZSBVVl9fU09DS19OT05CTE9DSyAgICBTT0NLX05PTkJMT0NLCi0jZWxzZQotIyBkZWZpbmUgVVZfX1NPQ0tfTk9OQkxPQ0sgICAgVVZfX09fTk9OQkxPQ0sKLSNlbmRpZgotCi0vKiBpbm90aWZ5IGZsYWdzICovCi0jZGVmaW5lIFVWX19JTl9BQ0NFU1MgICAgICAgICAweDAwMQotI2RlZmluZSBVVl9fSU5fTU9ESUZZICAgICAgICAgMHgwMDIKLSNkZWZpbmUgVVZfX0lOX0FUVFJJQiAgICAgICAgIDB4MDA0Ci0jZGVmaW5lIFVWX19JTl9DTE9TRV9XUklURSAgICAweDAwOAotI2RlZmluZSBVVl9fSU5fQ0xPU0VfTk9XUklURSAgMHgwMTAKLSNkZWZpbmUgVVZfX0lOX09QRU4gICAgICAgICAgIDB4MDIwCi0jZGVmaW5lIFVWX19JTl9NT1ZFRF9GUk9NICAgICAweDA0MAotI2RlZmluZSBVVl9fSU5fTU9WRURfVE8gICAgICAgMHgwODAKLSNkZWZpbmUgVVZfX0lOX0NSRUFURSAgICAgICAgIDB4MTAwCi0jZGVmaW5lIFVWX19JTl9ERUxFVEUgICAgICAgICAweDIwMAotI2RlZmluZSBVVl9fSU5fREVMRVRFX1NFTEYgICAgMHg0MDAKLSNkZWZpbmUgVVZfX0lOX01PVkVfU0VMRiAgICAgIDB4ODAwCi0KIHN0cnVjdCB1dl9fc3RhdHhfdGltZXN0YW1wIHsKICAgaW50NjRfdCB0dl9zZWM7CiAgIHVpbnQzMl90IHR2X25zZWM7CkBAIC0xMTAsMzYgKzYxLDYgQEAKICAgdWludDY0X3QgdW51c2VkMVsxNF07CiB9OwogCi1zdHJ1Y3QgdXZfX2lub3RpZnlfZXZlbnQgewotICBpbnQzMl90IHdkOwotICB1aW50MzJfdCBtYXNrOwotICB1aW50MzJfdCBjb29raWU7Ci0gIHVpbnQzMl90IGxlbjsKLSAgLyogY2hhciBuYW1lWzBdOyAqLwotfTsKLQotc3RydWN0IHV2X19tbXNnaGRyIHsKLSAgc3RydWN0IG1zZ2hkciBtc2dfaGRyOwotICB1bnNpZ25lZCBpbnQgbXNnX2xlbjsKLX07Ci0KLWludCB1dl9fYWNjZXB0NChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciogYWRkciwgc29ja2xlbl90KiBhZGRybGVuLCBpbnQgZmxhZ3MpOwotaW50IHV2X19ldmVudGZkKHVuc2lnbmVkIGludCBjb3VudCk7Ci1pbnQgdXZfX2V2ZW50ZmQyKHVuc2lnbmVkIGludCBjb3VudCwgaW50IGZsYWdzKTsKLWludCB1dl9faW5vdGlmeV9pbml0KHZvaWQpOwotaW50IHV2X19pbm90aWZ5X2luaXQxKGludCBmbGFncyk7Ci1pbnQgdXZfX2lub3RpZnlfYWRkX3dhdGNoKGludCBmZCwgY29uc3QgY2hhciogcGF0aCwgdWludDMyX3QgbWFzayk7Ci1pbnQgdXZfX2lub3RpZnlfcm1fd2F0Y2goaW50IGZkLCBpbnQzMl90IHdkKTsKLWludCB1dl9fcGlwZTIoaW50IHBpcGVmZFsyXSwgaW50IGZsYWdzKTsKLWludCB1dl9fcmVjdm1tc2coaW50IGZkLAotICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXZfX21tc2doZHIqIG1tc2csCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2bGVuLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCk7Ci1pbnQgdXZfX3NlbmRtbXNnKGludCBmZCwKLSAgICAgICAgICAgICAgICAgc3RydWN0IHV2X19tbXNnaGRyKiBtbXNnLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmxlbiwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIHNzaXplX3QgdXZfX3ByZWFkdihpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCBpbnQ2NF90IG9mZnNldCk7CiBzc2l6ZV90IHV2X19wd3JpdGV2KGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsIGludDY0X3Qgb2Zmc2V0KTsKIGludCB1dl9fZHVwMyhpbnQgb2xkZmQsIGludCBuZXdmZCwgaW50IGZsYWdzKTsKQEAgLTE0OCw1ICs2OSw2IEBACiAgICAgICAgICAgICAgIGludCBmbGFncywKICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2ssCiAgICAgICAgICAgICAgIHN0cnVjdCB1dl9fc3RhdHgqIHN0YXR4YnVmKTsKK3NzaXplX3QgdXZfX2dldHJhbmRvbSh2b2lkKiBidWYsIHNpemVfdCBidWZsZW4sIHVuc2lnbmVkIGZsYWdzKTsKIAogI2VuZGlmIC8qIFVWX0xJTlVYX1NZU0NBTExfSF8gKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L25ldGJzZC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbmV0YnNkLmMKaW5kZXggYzY0OWJiMy4uYzY2MzMzZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbmV0YnNkLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbmV0YnNkLmMKQEAgLTU1LDcgKzU1LDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIGludCB3aGljaFtdID0ge0NUTF9WTSwgVk1fTE9BREFWR307CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSA9PSAtMSkgcmV0dXJuOworICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSA9PSAtMSkgcmV0dXJuOwogCiAgIGF2Z1swXSA9IChkb3VibGUpIGluZm8ubGRhdmdbMF0gLyBpbmZvLmZzY2FsZTsKICAgYXZnWzFdID0gKGRvdWJsZSkgaW5mby5sZGF2Z1sxXSAvIGluZm8uZnNjYWxlOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGluZm8pOwogICBpbnQgd2hpY2hbXSA9IHtDVExfVk0sIFZNX1VWTUVYUH07CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIHJldHVybiAodWludDY0X3QpIGluZm8uZnJlZSAqIHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKQEAgLTExOSw3ICsxMTksNyBAQAogI2VuZGlmCiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGluZm8pOwogCi0gIGlmIChzeXNjdGwod2hpY2gsIDIsICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCisgIGlmIChzeXNjdGwod2hpY2gsIEFSUkFZX1NJWkUod2hpY2gpLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAogICByZXR1cm4gKHVpbnQ2NF90KSBpbmZvOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGluZm8pOwogICBzdGF0aWMgaW50IHdoaWNoW10gPSB7Q1RMX0tFUk4sIEtFUk5fQk9PVFRJTUV9OwogCi0gIGlmIChzeXNjdGwod2hpY2gsIDIsICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCisgIGlmIChzeXNjdGwod2hpY2gsIEFSUkFZX1NJWkUod2hpY2gpLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAogICBub3cgPSB0aW1lKE5VTEwpOwpAQCAtMjM1LDEzICsyMzUsMjUgQEAKICAgcmV0dXJuIDA7CiB9CiAKK2ludCB1dl9fcmFuZG9tX3N5c2N0bCh2b2lkKiBidWYsIHNpemVfdCBsZW4pIHsKKyAgc3RhdGljIGludCBuYW1lW10gPSB7Q1RMX0tFUk4sIEtFUk5fQVJORH07CisgIHNpemVfdCBjb3VudCwgcmVxOworICB1bnNpZ25lZCBjaGFyKiBwOwogCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7CisgIHAgPSBidWY7CisgIHdoaWxlIChsZW4pIHsKKyAgICByZXEgPSBsZW4gPCAzMiA/IGxlbiA6IDMyOworICAgIGNvdW50ID0gcmVxOwogCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKKyAgICBpZiAoc3lzY3RsKG5hbWUsIEFSUkFZX1NJWkUobmFtZSksIHAsICZjb3VudCwgTlVMTCwgMCkgPT0gLTEpCisgICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisKKyAgICBpZiAoY291bnQgIT0gcmVxKQorICAgICAgcmV0dXJuIFVWX0VJTzsgIC8qIENhbid0IGhhcHBlbi4gKi8KKworICAgIHAgKz0gY291bnQ7CisgICAgbGVuIC09IGNvdW50OwogICB9CiAKLSAgdXZfX2ZyZWUoY3B1X2luZm9zKTsKKyAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9uby1wcm9jdGl0bGUuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L25vLXByb2N0aXRsZS5jCmluZGV4IDE2NTc0MGMuLjMyYWEwYWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L25vLXByb2N0aXRsZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L25vLXByb2N0aXRsZS5jCkBAIC0yOSw2ICsyOSw5IEBACiAgIHJldHVybiBhcmd2OwogfQogCit2b2lkIHV2X19wcm9jZXNzX3RpdGxlX2NsZWFudXAodm9pZCkgeworfQorCiBpbnQgdXZfc2V0X3Byb2Nlc3NfdGl0bGUoY29uc3QgY2hhciogdGl0bGUpIHsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vcGVuYnNkLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vcGVuYnNkLmMKaW5kZXggZmZhZTc2OC4uZjMyYTk0ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3BlbmJzZC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29wZW5ic2QuYwpAQCAtNTAsNyArNTAsNyBAQAogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKICAgaW50IHdoaWNoW10gPSB7Q1RMX1ZNLCBWTV9MT0FEQVZHfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApIDwgMCkgcmV0dXJuOworICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSA8IDApIHJldHVybjsKIAogICBhdmdbMF0gPSAoZG91YmxlKSBpbmZvLmxkYXZnWzBdIC8gaW5mby5mc2NhbGU7CiAgIGF2Z1sxXSA9IChkb3VibGUpIGluZm8ubGRhdmdbMV0gLyBpbmZvLmZzY2FsZTsKQEAgLTYxLDcgKzYxLDYgQEAKIGludCB1dl9leGVwYXRoKGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBzaXplKSB7CiAgIGludCBtaWJbNF07CiAgIGNoYXIgKiphcmdzYnVmID0gTlVMTDsKLSAgY2hhciAqKmFyZ3NidWZfdG1wOwogICBzaXplX3QgYXJnc2J1Zl9zaXplID0gMTAwVTsKICAgc2l6ZV90IGV4ZXBhdGhfc2l6ZTsKICAgcGlkX3QgbXlwaWQ7CkBAIC03MywxNSArNzIsMTQgQEAKICAgbXlwaWQgPSBnZXRwaWQoKTsKICAgZm9yICg7OykgewogICAgIGVyciA9IFVWX0VOT01FTTsKLSAgICBhcmdzYnVmX3RtcCA9IHV2X19yZWFsbG9jKGFyZ3NidWYsIGFyZ3NidWZfc2l6ZSk7Ci0gICAgaWYgKGFyZ3NidWZfdG1wID09IE5VTEwpCisgICAgYXJnc2J1ZiA9IHV2X19yZWFsbG9jZihhcmdzYnVmLCBhcmdzYnVmX3NpemUpOworICAgIGlmIChhcmdzYnVmID09IE5VTEwpCiAgICAgICBnb3RvIG91dDsKLSAgICBhcmdzYnVmID0gYXJnc2J1Zl90bXA7CiAgICAgbWliWzBdID0gQ1RMX0tFUk47CiAgICAgbWliWzFdID0gS0VSTl9QUk9DX0FSR1M7CiAgICAgbWliWzJdID0gbXlwaWQ7CiAgICAgbWliWzNdID0gS0VSTl9QUk9DX0FSR1Y7Ci0gICAgaWYgKHN5c2N0bChtaWIsIDQsIGFyZ3NidWYsICZhcmdzYnVmX3NpemUsIE5VTEwsIDApID09IDApIHsKKyAgICBpZiAoc3lzY3RsKG1pYiwgQVJSQVlfU0laRShtaWIpLCBhcmdzYnVmLCAmYXJnc2J1Zl9zaXplLCBOVUxMLCAwKSA9PSAwKSB7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKGVycm5vICE9IEVOT01FTSkgewpAQCAtMTE3LDcgKzExNSw3IEBACiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGluZm8pOwogICBpbnQgd2hpY2hbXSA9IHtDVExfVk0sIFZNX1VWTUVYUH07CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIHJldHVybiAodWludDY0X3QpIGluZm8uZnJlZSAqIHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKQEAgLTEyOSw3ICsxMjcsNyBAQAogICBpbnQgd2hpY2hbXSA9IHtDVExfSFcsIEhXX1BIWVNNRU02NH07CiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGluZm8pOwogCi0gIGlmIChzeXNjdGwod2hpY2gsIDIsICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCisgIGlmIChzeXNjdGwod2hpY2gsIEFSUkFZX1NJWkUod2hpY2gpLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAogICByZXR1cm4gKHVpbnQ2NF90KSBpbmZvOwpAQCAtMTU0LDcgKzE1Miw3IEBACiAgIG1pYls0XSA9IHNpemVvZihzdHJ1Y3Qga2luZm9fcHJvYyk7CiAgIG1pYls1XSA9IDE7CiAKLSAgaWYgKHN5c2N0bChtaWIsIDYsICZraW5mbywgJnNpemUsIE5VTEwsIDApIDwgMCkKKyAgaWYgKHN5c2N0bChtaWIsIEFSUkFZX1NJWkUobWliKSwgJmtpbmZvLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAogICAqcnNzID0ga2luZm8ucF92bV9yc3NpemUgKiBwYWdlX3NpemU7CkBAIC0xNjgsNyArMTY2LDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIHN0YXRpYyBpbnQgd2hpY2hbXSA9IHtDVExfS0VSTiwgS0VSTl9CT09UVElNRX07CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIG5vdyA9IHRpbWUoTlVMTCk7CkBAIC0xODQsNDMgKzE4MiwzOCBAQAogICB1aW50NjRfdCBpbmZvW0NQVVNUQVRFU107CiAgIGNoYXIgbW9kZWxbNTEyXTsKICAgaW50IG51bWNwdXMgPSAxOwotICBpbnQgd2hpY2hbXSA9IHtDVExfSFcsSFdfTU9ERUwsMH07CisgIGludCB3aGljaFtdID0ge0NUTF9IVyxIV19NT0RFTH07CisgIGludCBwZXJjcHVbXSA9IHtDVExfS0VSTixLRVJOX0NQVElNRTIsMH07CiAgIHNpemVfdCBzaXplOwotICBpbnQgaTsKKyAgaW50IGksIGo7CiAgIHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvOwogCiAgIHNpemUgPSBzaXplb2YobW9kZWwpOwotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmbW9kZWwsICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZtb2RlbCwgJnNpemUsIE5VTEwsIDApKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICB3aGljaFsxXSA9IEhXX05DUFU7CisgIHdoaWNoWzFdID0gSFdfTkNQVU9OTElORTsKICAgc2l6ZSA9IHNpemVvZihudW1jcHVzKTsKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJm51bWNwdXMsICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZudW1jcHVzLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgICpjcHVfaW5mb3MgPSB1dl9fbWFsbG9jKG51bWNwdXMgKiBzaXplb2YoKipjcHVfaW5mb3MpKTsKICAgaWYgKCEoKmNwdV9pbmZvcykpCiAgICAgcmV0dXJuIFVWX0VOT01FTTsKIAorICBpID0gMDsKICAgKmNvdW50ID0gbnVtY3B1czsKIAogICB3aGljaFsxXSA9IEhXX0NQVVNQRUVEOwogICBzaXplID0gc2l6ZW9mKGNwdXNwZWVkKTsKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmNwdXNwZWVkLCAmc2l6ZSwgTlVMTCwgMCkpIHsKLSAgICB1dl9fZnJlZSgqY3B1X2luZm9zKTsKLSAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0gIH0KKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZjcHVzcGVlZCwgJnNpemUsIE5VTEwsIDApKQorICAgIGdvdG8gZXJyb3I7CiAKICAgc2l6ZSA9IHNpemVvZihpbmZvKTsKLSAgd2hpY2hbMF0gPSBDVExfS0VSTjsKLSAgd2hpY2hbMV0gPSBLRVJOX0NQVElNRTI7CiAgIGZvciAoaSA9IDA7IGkgPCBudW1jcHVzOyBpKyspIHsKLSAgICB3aGljaFsyXSA9IGk7Ci0gICAgc2l6ZSA9IHNpemVvZihpbmZvKTsKLSAgICBpZiAoc3lzY3RsKHdoaWNoLCAzLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKSB7Ci0gICAgICB1dl9fZnJlZSgqY3B1X2luZm9zKTsKLSAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLSAgICB9CisgICAgcGVyY3B1WzJdID0gaTsKKyAgICBpZiAoc3lzY3RsKHBlcmNwdSwgQVJSQVlfU0laRShwZXJjcHUpLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQorICAgICAgZ290byBlcnJvcjsKIAogICAgIGNwdV9pbmZvID0gJigqY3B1X2luZm9zKVtpXTsKIApAQCAtMjM1LDE1ICsyMjgsMTMgQEAKICAgfQogCiAgIHJldHVybiAwOwotfQogCitlcnJvcjoKKyAgKmNvdW50ID0gMDsKKyAgZm9yIChqID0gMDsgaiA8IGk7IGorKykKKyAgICB1dl9fZnJlZSgoKmNwdV9pbmZvcylbal0ubW9kZWwpOwogCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotICB9Ci0KLSAgdXZfX2ZyZWUoY3B1X2luZm9zKTsKKyAgdXZfX2ZyZWUoKmNwdV9pbmZvcyk7CisgICpjcHVfaW5mb3MgPSBOVUxMOworICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC1zeXNjYWxscy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAtc3lzY2FsbHMuYwppbmRleCAxMDQwZDY2Li40MjRjYzQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC1zeXNjYWxscy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29zMzkwLXN5c2NhbGxzLmMKQEAgLTIzLDExICsyMywxMSBAQAogI2luY2x1ZGUgIm9zMzkwLXN5c2NhbGxzLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxzZWFyY2guaD4KICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjaW5jbHVkZSA8c3lzL21zZy5oPgogCisjZGVmaW5lIENXX0lOVFJQVCAxCiAjZGVmaW5lIENXX0NPTkRWQVIgMzIKIAogI3ByYWdtYSBsaW5rYWdlKEJQWDRDVFcsIE9TKQpAQCAtNDMsNiArNDMsNyBAQAogICAgICAgICAgICAgaW50ICgqY29tcGFyKShjb25zdCBzdHJ1Y3QgZGlyZW50KiosCiAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZGlyZW50ICoqKSkgewogICBzdHJ1Y3QgZGlyZW50Kiogbmw7CisgIHN0cnVjdCBkaXJlbnQqKiBubF9jb3B5OwogICBzdHJ1Y3QgZGlyZW50KiBkaXJlbnQ7CiAgIHVuc2lnbmVkIGNvdW50OwogICBzaXplX3QgYWxsb2NhdGVkOwpAQCAtNjIsMTkgKzYzLDE3IEBACiAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGRpcmVudCkpIHsKICAgICAgIHN0cnVjdCBkaXJlbnQqIGNvcHk7CiAgICAgICBjb3B5ID0gdXZfX21hbGxvYyhzaXplb2YoKmNvcHkpKTsKLSAgICAgIGlmICghY29weSkgewotICAgICAgICB3aGlsZSAoY291bnQpIHsKLSAgICAgICAgICBkaXJlbnQgPSBubFstLWNvdW50XTsKLSAgICAgICAgICB1dl9fZnJlZShkaXJlbnQpOwotICAgICAgICB9Ci0gICAgICAgIHV2X19mcmVlKG5sKTsKLSAgICAgICAgY2xvc2VkaXIobWRpcik7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9CisgICAgICBpZiAoIWNvcHkpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICBtZW1jcHkoY29weSwgZGlyZW50LCBzaXplb2YoKmNvcHkpKTsKIAotICAgICAgbmwgPSB1dl9fcmVhbGxvYyhubCwgc2l6ZW9mKCpjb3B5KSAqIChjb3VudCArIDEpKTsKKyAgICAgIG5sX2NvcHkgPSB1dl9fcmVhbGxvYyhubCwgc2l6ZW9mKCpjb3B5KSAqIChjb3VudCArIDEpKTsKKyAgICAgIGlmIChubF9jb3B5ID09IE5VTEwpIHsKKyAgICAgICAgdXZfX2ZyZWUoY29weSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisKKyAgICAgIG5sID0gbmxfY29weTsKICAgICAgIG5sW2NvdW50KytdID0gY29weTsKICAgICB9CiAgIH0KQEAgLTg2LDYgKzg1LDE2IEBACiAKICAgKm5hbWVsaXN0ID0gbmw7CiAgIHJldHVybiBjb3VudDsKKworZXJyb3I6CisgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICBkaXJlbnQgPSBubFstLWNvdW50XTsKKyAgICB1dl9fZnJlZShkaXJlbnQpOworICB9CisgIHV2X19mcmVlKG5sKTsKKyAgY2xvc2VkaXIobWRpcik7CisgIGVycm5vID0gRU5PTUVNOworICByZXR1cm4gLTE7CiB9CiAKIApAQCAtMTE5LDcgKzEyOCw3IEBACiAgIH0KIAogICBuZXdzaXplID0gbmV4dF9wb3dlcl9vZl90d28obGVuKTsKLSAgbmV3bHN0ID0gdXZfX3JlYWxsb2MobHN0LT5pdGVtcywgbmV3c2l6ZSAqIHNpemVvZihsc3QtPml0ZW1zWzBdKSk7CisgIG5ld2xzdCA9IHV2X19yZWFsbG9jZihsc3QtPml0ZW1zLCBuZXdzaXplICogc2l6ZW9mKGxzdC0+aXRlbXNbMF0pKTsKIAogICBpZiAobmV3bHN0ID09IE5VTEwpCiAgICAgYWJvcnQoKTsKQEAgLTI2OSw2ICsyNzgsOCBAQAogICByZXR1cm4gMDsKIH0KIAorI2RlZmluZSBFUF9NQVhfUEZEUyAoVUxPTkdfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKQorI2RlZmluZSBFUF9NQVhfRVZFTlRTIChJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBlcG9sbF9ldmVudCkpCiAKIGludCBlcG9sbF93YWl0KHV2X19vczM5MF9lcG9sbCogbHN0LCBzdHJ1Y3QgZXBvbGxfZXZlbnQqIGV2ZW50cywKICAgICAgICAgICAgICAgIGludCBtYXhldmVudHMsIGludCB0aW1lb3V0KSB7CkBAIC0yNzcsMTggKzI4OCw0MSBAQAogICBpbnQgcG9sbHJldDsKICAgaW50IHJldmVudGNvdW50OwogICBpbnQgbmV2ZW50czsKKyAgc3RydWN0IHBvbGxmZCBtc2dfZmQ7CisgIGludCBpOwogCi0gIF9TRVRfRkRTX01TR1Moc2l6ZSwgMSwgbHN0LT5zaXplIC0gMSk7CisgIGlmICghbHN0IHx8ICFsc3QtPml0ZW1zIHx8ICFldmVudHMpIHsKKyAgICBlcnJubyA9IEVGQVVMVDsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAobHN0LT5zaXplID4gRVBfTUFYX1BGRFMpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAobWF4ZXZlbnRzIDw9IDAgfHwgbWF4ZXZlbnRzID4gRVBfTUFYX0VWRU5UUykgeworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChsc3QtPnNpemUgPiAwKQorICAgIF9TRVRfRkRTX01TR1Moc2l6ZSwgMSwgbHN0LT5zaXplIC0gMSk7CisgIGVsc2UKKyAgICBfU0VUX0ZEU19NU0dTKHNpemUsIDAsIDApOwogICBwZmRzID0gbHN0LT5pdGVtczsKICAgcG9sbHJldCA9IHBvbGwocGZkcywgc2l6ZSwgdGltZW91dCk7CiAgIGlmIChwb2xscmV0IDw9IDApCiAgICAgcmV0dXJuIHBvbGxyZXQ7CiAKKyAgYXNzZXJ0KGxzdC0+c2l6ZSA+IDApOworCiAgIHBvbGxyZXQgPSBfTkZEUyhwb2xscmV0KSArIF9OTVNHUyhwb2xscmV0KTsKIAogICByZXZlbnRjb3VudCA9IDA7CiAgIG5ldmVudHMgPSAwOwotICBmb3IgKGludCBpID0gMDsgCisgIG1zZ19mZCA9IHBmZHNbbHN0LT5zaXplIC0gMV07CisgIGZvciAoaSA9IDA7CiAgICAgICAgaSA8IGxzdC0+c2l6ZSAmJiBpIDwgbWF4ZXZlbnRzICYmIHJldmVudGNvdW50IDwgcG9sbHJldDsgKytpKSB7CiAgICAgc3RydWN0IGVwb2xsX2V2ZW50IGV2OwogICAgIHN0cnVjdCBwb2xsZmQqIHBmZDsKQEAgLTI5OSw2ICszMzMsNyBAQAogCiAgICAgZXYuZmQgPSBwZmQtPmZkOwogICAgIGV2LmV2ZW50cyA9IHBmZC0+cmV2ZW50czsKKyAgICBldi5pc19tc2cgPSAwOwogICAgIGlmIChwZmQtPnJldmVudHMgJiBQT0xMSU4gJiYgcGZkLT5yZXZlbnRzICYgUE9MTE9VVCkKICAgICAgIHJldmVudGNvdW50ICs9IDI7CiAgICAgZWxzZSBpZiAocGZkLT5yZXZlbnRzICYgKFBPTExJTiB8IFBPTExPVVQpKQpAQCAtMzA4LDYgKzM0MywxMCBAQAogICAgIGV2ZW50c1tuZXZlbnRzKytdID0gZXY7CiAgIH0KIAorICBpZiAobXNnX2ZkLnJldmVudHMgIT0gMCAmJiBtc2dfZmQuZmQgIT0gLTEpCisgICAgaWYgKGkgPT0gbHN0LT5zaXplKQorICAgICAgZXZlbnRzW25ldmVudHMgLSAxXS5pc19tc2cgPSAxOworCiAgIHJldHVybiBuZXZlbnRzOwogfQogCkBAIC0zNTAsMjcgKzM4OSwzNiBAQAogICB1bnNpZ25lZCBzZWNyZW07CiAgIHVuc2lnbmVkIG5hbm9yZW07CiAgIGludCBydjsKLSAgaW50IHJjOworICBpbnQgZXJyOwogICBpbnQgcnNuOwogCiAgIG5hbm8gPSAoaW50KXJlcS0+dHZfbnNlYzsKICAgc2Vjb25kcyA9IHJlcS0+dHZfc2VjOwotICBldmVudHMgPSBDV19DT05EVkFSOworICBldmVudHMgPSBDV19DT05EVkFSIHwgQ1dfSU5UUlBUOworICBzZWNyZW0gPSAwOworICBuYW5vcmVtID0gMDsKIAogI2lmIGRlZmluZWQoX0xQNjQpCi0gIEJQWDRDVFcoJnNlY29uZHMsICZuYW5vLCAmZXZlbnRzLCAmc2VjcmVtLCAmbmFub3JlbSwgJnJ2LCAmcmMsICZyc24pOworICBCUFg0Q1RXKCZzZWNvbmRzLCAmbmFubywgJmV2ZW50cywgJnNlY3JlbSwgJm5hbm9yZW0sICZydiwgJmVyciwgJnJzbik7CiAjZWxzZQotICBCUFgxQ1RXKCZzZWNvbmRzLCAmbmFubywgJmV2ZW50cywgJnNlY3JlbSwgJm5hbm9yZW0sICZydiwgJnJjLCAmcnNuKTsKKyAgQlBYMUNUVygmc2Vjb25kcywgJm5hbm8sICZldmVudHMsICZzZWNyZW0sICZuYW5vcmVtLCAmcnYsICZlcnIsICZyc24pOwogI2VuZGlmCiAKLSAgYXNzZXJ0KHJ2ID09IC0xICYmIGVycm5vID09IEVBR0FJTik7CisgIC8qIERvbid0IGNsb2JiZXIgZXJybm8gdW5sZXNzIEJQWDFDVFcvQlBYNENUVyBlcnJvcmVkLgorICAgKiBEb24ndCBsZWFrIEVBR0FJTiwgdGhhdCBqdXN0IG1lYW5zIHRoZSB0aW1lb3V0IGV4cGlyZWQuCisgICAqLworICBpZiAocnYgPT0gLTEpCisgICAgaWYgKGVyciA9PSBFQUdBSU4pCisgICAgICBydiA9IDA7CisgICAgZWxzZQorICAgICAgZXJybm8gPSBlcnI7CiAKLSAgaWYocmVtICE9IE5VTEwpIHsKKyAgaWYgKHJlbSAhPSBOVUxMICYmIChydiA9PSAwIHx8IGVyciA9PSBFSU5UUikpIHsKICAgICByZW0tPnR2X25zZWMgPSBuYW5vcmVtOwogICAgIHJlbS0+dHZfc2VjID0gc2VjcmVtOwogICB9CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBydjsKIH0KIAogCkBAIC01MTAsMyArNTU4LDI4IEBACiAgIGVsc2UKICAgICByZXR1cm4gcCAtIHN0cjsKIH0KKworCitpbnQgc2VtX2luaXQoVVZfUExBVEZPUk1fU0VNX1QqIHNlbWlkLCBpbnQgcHNoYXJlZCwgdW5zaWduZWQgaW50IHZhbHVlKSB7CisgIFVOUkVBQ0hBQkxFKCk7Cit9CisKKworaW50IHNlbV9kZXN0cm95KFVWX1BMQVRGT1JNX1NFTV9UKiBzZW1pZCkgeworICBVTlJFQUNIQUJMRSgpOworfQorCisKK2ludCBzZW1fcG9zdChVVl9QTEFURk9STV9TRU1fVCogc2VtaWQpIHsKKyAgVU5SRUFDSEFCTEUoKTsKK30KKworCitpbnQgc2VtX3RyeXdhaXQoVVZfUExBVEZPUk1fU0VNX1QqIHNlbWlkKSB7CisgIFVOUkVBQ0hBQkxFKCk7Cit9CisKKworaW50IHNlbV93YWl0KFVWX1BMQVRGT1JNX1NFTV9UKiBzZW1pZCkgeworICBVTlJFQUNIQUJMRSgpOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAtc3lzY2FsbHMuaCBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29zMzkwLXN5c2NhbGxzLmgKaW5kZXggZWE1OTkxMC4uODY0MTZiYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAtc3lzY2FsbHMuaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC1zeXNjYWxscy5oCkBAIC00MCw2ICs0MCw3IEBACiBzdHJ1Y3QgZXBvbGxfZXZlbnQgewogICBpbnQgZXZlbnRzOwogICBpbnQgZmQ7CisgIGludCBpc19tc2c7CiB9OwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC02NCw1ICs2NSwxMCBAQAogY2hhciAqbWtkdGVtcChjaGFyKiBwYXRoKTsKIHNzaXplX3Qgb3MzOTBfcmVhZGxpbmsoY29uc3QgY2hhciogcGF0aCwgY2hhciogYnVmLCBzaXplX3QgbGVuKTsKIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IG1heGxlbik7CitpbnQgc2VtX2luaXQoVVZfUExBVEZPUk1fU0VNX1QqIHNlbWlkLCBpbnQgcHNoYXJlZCwgdW5zaWduZWQgaW50IHZhbHVlKTsKK2ludCBzZW1fZGVzdHJveShVVl9QTEFURk9STV9TRU1fVCogc2VtaWQpOworaW50IHNlbV9wb3N0KFVWX1BMQVRGT1JNX1NFTV9UKiBzZW1pZCk7CitpbnQgc2VtX3RyeXdhaXQoVVZfUExBVEZPUk1fU0VNX1QqIHNlbWlkKTsKK2ludCBzZW1fd2FpdChVVl9QTEFURk9STV9TRU1fVCogc2VtaWQpOwogCiAjZW5kaWYgLyogVVZfT1MzOTBfU1lTQ0FMTF9IXyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29zMzkwLmMKaW5kZXggMjczZGVkNy4uZGNlMTY5YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC5jCkBAIC00MzMsMTMgKzQzMyw2IEBACiB9CiAKIAotdm9pZCB1dl9mcmVlX2NwdV9pbmZvKHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvcywgaW50IGNvdW50KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotICB1dl9fZnJlZShjcHVfaW5mb3MpOwotfQotCi0KIHN0YXRpYyBpbnQgdXZfX2ludGVyZmFjZV9hZGRyZXNzZXNfdjYodXZfaW50ZXJmYWNlX2FkZHJlc3NfdCoqIGFkZHJlc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBjb3VudCkgewogICB1dl9pbnRlcmZhY2VfYWRkcmVzc190KiBhZGRyZXNzOwpAQCAtOTMwLDcgKzkyMyw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBlcCA9IGxvb3AtPmVwOwotICAgICAgaWYgKGZkID09IGVwLT5tc2dfcXVldWUpIHsKKyAgICAgIGlmIChwZS0+aXNfbXNnKSB7CiAgICAgICAgIG9zMzkwX21lc3NhZ2VfcXVldWVfaGFuZGxlcihlcCk7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcGlwZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcGlwZS5jCmluZGV4IDdkOTc1NTAuLjUyYThmZDUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3BpcGUuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9waXBlLmMKQEAgLTkzLDggKzkzLDEyIEBACiAgIGlmICh1dl9fc3RyZWFtX2ZkKGhhbmRsZSkgPT0gLTEpCiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKIAotI2lmIGRlZmluZWQoX19NVlNfXykKKyAgaWYgKGhhbmRsZS0+aXBjKQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyNpZiBkZWZpbmVkKF9fTVZTX18pIHx8IGRlZmluZWQoX19QQVNFX18pCiAgIC8qIE9uIHpPUywgYmFja2xvZz0wIGhhcyB1bmRlZmluZWQgYmVoYXZpb3VyICovCisgIC8qIE9uIElCTWkgUEFTRSwgYmFja2xvZz0wIGxlYWRzIHRvICJDb25uZWN0aW9uIHJlZnVzZWQiIGVycm9yICovCiAgIGlmIChiYWNrbG9nID09IDApCiAgICAgYmFja2xvZyA9IDE7CiAgIGVsc2UgaWYgKGJhY2tsb2cgPCAwKQpAQCAtMjU5LDcgKzI2Myw3IEBACiAgICAgYWRkcmxlbiA9IHN0cmxlbihzYS5zdW5fcGF0aCk7CiAKIAotICBpZiAoYWRkcmxlbiA+PSAqc2l6ZSkgeworICBpZiAoKHNpemVfdClhZGRybGVuID49ICpzaXplKSB7CiAgICAgKnNpemUgPSBhZGRybGVuICsgMTsKICAgICByZXR1cm4gVVZfRU5PQlVGUzsKICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcG9zaXgtcG9sbC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcG9zaXgtcG9sbC5jCmluZGV4IGEzYjlmMjEuLjc2NmU4MzIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Bvc2l4LXBvbGwuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9wb3NpeC1wb2xsLmMKQEAgLTYxLDcgKzYxLDcgQEAKICAgICByZXR1cm47CiAKICAgbiA9IGxvb3AtPnBvbGxfZmRzX3NpemUgPyBsb29wLT5wb2xsX2Zkc19zaXplICogMiA6IDY0OwotICBwID0gdXZfX3JlYWxsb2MobG9vcC0+cG9sbF9mZHMsIG4gKiBzaXplb2YoKmxvb3AtPnBvbGxfZmRzKSk7CisgIHAgPSB1dl9fcmVhbGxvY2YobG9vcC0+cG9sbF9mZHMsIG4gKiBzaXplb2YoKmxvb3AtPnBvbGxfZmRzKSk7CiAgIGlmIChwID09IE5VTEwpCiAgICAgYWJvcnQoKTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcHJvY2Vzcy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcHJvY2Vzcy5jCmluZGV4IGY0ODI2YmYuLjA4YWEyZjMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Byb2Nlc3MuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9wcm9jZXNzLmMKQEAgLTEyMyw3MiArMTIzLDY0IEBACiB9CiAKIAotaW50IHV2X19tYWtlX3NvY2tldHBhaXIoaW50IGZkc1syXSwgaW50IGZsYWdzKSB7Ci0jaWYgZGVmaW5lZChfX2xpbnV4X18pCi0gIHN0YXRpYyBpbnQgbm9fY2xvZXhlYzsKLQotICBpZiAobm9fY2xvZXhlYykKLSAgICBnb3RvIHNraXA7Ci0KLSAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0gfCBVVl9fU09DS19DTE9FWEVDIHwgZmxhZ3MsIDAsIGZkcykgPT0gMCkKLSAgICByZXR1cm4gMDsKLQotICAvKiBSZXRyeSBvbiBFSU5WQUwsIGl0IG1lYW5zIFNPQ0tfQ0xPRVhFQyBpcyBub3Qgc3VwcG9ydGVkLgotICAgKiBBbnl0aGluZyBlbHNlIGlzIGEgZ2VudWluZSBlcnJvci4KLSAgICovCi0gIGlmIChlcnJubyAhPSBFSU5WQUwpCitzdGF0aWMgaW50IHV2X19tYWtlX3NvY2tldHBhaXIoaW50IGZkc1syXSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSB8IFNPQ0tfQ0xPRVhFQywgMCwgZmRzKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKLSAgbm9fY2xvZXhlYyA9IDE7Ci0KLXNraXA6Ci0jZW5kaWYKKyAgcmV0dXJuIDA7CisjZWxzZQorICBpbnQgZXJyOwogCiAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBmZHMpKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICB1dl9fY2xvZXhlYyhmZHNbMF0sIDEpOwotICB1dl9fY2xvZXhlYyhmZHNbMV0sIDEpOworICBlcnIgPSB1dl9fY2xvZXhlYyhmZHNbMF0sIDEpOworICBpZiAoZXJyID09IDApCisgICAgZXJyID0gdXZfX2Nsb2V4ZWMoZmRzWzFdLCAxKTsKIAotICBpZiAoZmxhZ3MgJiBVVl9fRl9OT05CTE9DSykgewotICAgIHV2X19ub25ibG9jayhmZHNbMF0sIDEpOwotICAgIHV2X19ub25ibG9jayhmZHNbMV0sIDEpOworICBpZiAoZXJyICE9IDApIHsKKyAgICB1dl9fY2xvc2UoZmRzWzBdKTsKKyAgICB1dl9fY2xvc2UoZmRzWzFdKTsKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAgIH0KIAogICByZXR1cm4gMDsKKyNlbmRpZgogfQogCiAKIGludCB1dl9fbWFrZV9waXBlKGludCBmZHNbMl0sIGludCBmbGFncykgewotI2lmIGRlZmluZWQoX19saW51eF9fKQotICBzdGF0aWMgaW50IG5vX3BpcGUyOwotCi0gIGlmIChub19waXBlMikKLSAgICBnb3RvIHNraXA7Ci0KLSAgaWYgKHV2X19waXBlMihmZHMsIGZsYWdzIHwgVVZfX09fQ0xPRVhFQykgPT0gMCkKLSAgICByZXR1cm4gMDsKLQotICBpZiAoZXJybm8gIT0gRU5PU1lTKQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorICBpZiAocGlwZTIoZmRzLCBmbGFncyB8IE9fQ0xPRVhFQykpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCi0gIG5vX3BpcGUyID0gMTsKLQotc2tpcDoKLSNlbmRpZgotCisgIHJldHVybiAwOworI2Vsc2UKICAgaWYgKHBpcGUoZmRzKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKLSAgdXZfX2Nsb2V4ZWMoZmRzWzBdLCAxKTsKLSAgdXZfX2Nsb2V4ZWMoZmRzWzFdLCAxKTsKKyAgaWYgKHV2X19jbG9leGVjKGZkc1swXSwgMSkpCisgICAgZ290byBmYWlsOworCisgIGlmICh1dl9fY2xvZXhlYyhmZHNbMV0sIDEpKQorICAgIGdvdG8gZmFpbDsKIAogICBpZiAoZmxhZ3MgJiBVVl9fRl9OT05CTE9DSykgewotICAgIHV2X19ub25ibG9jayhmZHNbMF0sIDEpOwotICAgIHV2X19ub25ibG9jayhmZHNbMV0sIDEpOworICAgIGlmICh1dl9fbm9uYmxvY2soZmRzWzBdLCAxKSkKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmICh1dl9fbm9uYmxvY2soZmRzWzFdLCAxKSkKKyAgICAgIGdvdG8gZmFpbDsKICAgfQogCiAgIHJldHVybiAwOworCitmYWlsOgorICB1dl9fY2xvc2UoZmRzWzBdKTsKKyAgdXZfX2Nsb3NlKGZkc1sxXSk7CisgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKyNlbmRpZgogfQogCiAKQEAgLTIxMSw3ICsyMDMsNyBAQAogICAgIGlmIChjb250YWluZXItPmRhdGEuc3RyZWFtLT50eXBlICE9IFVWX05BTUVEX1BJUEUpCiAgICAgICByZXR1cm4gVVZfRUlOVkFMOwogICAgIGVsc2UKLSAgICAgIHJldHVybiB1dl9fbWFrZV9zb2NrZXRwYWlyKGZkcywgMCk7CisgICAgICByZXR1cm4gdXZfX21ha2Vfc29ja2V0cGFpcihmZHMpOwogCiAgIGNhc2UgVVZfSU5IRVJJVF9GRDoKICAgY2FzZSBVVl9JTkhFUklUX1NUUkVBTToKQEAgLTI2MCw3ICsyNTIsNyBAQAogCiBzdGF0aWMgdm9pZCB1dl9fcHJvY2Vzc19jbG9zZV9zdHJlYW0odXZfc3RkaW9fY29udGFpbmVyX3QqIGNvbnRhaW5lcikgewogICBpZiAoIShjb250YWluZXItPmZsYWdzICYgVVZfQ1JFQVRFX1BJUEUpKSByZXR1cm47Ci0gIHV2X19zdHJlYW1fY2xvc2UoKHV2X3N0cmVhbV90Kiljb250YWluZXItPmRhdGEuc3RyZWFtKTsKKyAgdXZfX3N0cmVhbV9jbG9zZShjb250YWluZXItPmRhdGEuc3RyZWFtKTsKIH0KIAogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9wcm9jdGl0bGUuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Byb2N0aXRsZS5jCmluZGV4IGE1Y2UyMDMuLjRlZTk5MWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Byb2N0aXRsZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Byb2N0aXRsZS5jCkBAIC0yNCwyOCArMjQsMjcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotZXh0ZXJuIHZvaWQgdXZfX3NldF9wcm9jZXNzX3RpdGxlX3BsYXRmb3JtX2luaXQodm9pZCk7CitzdHJ1Y3QgdXZfX3Byb2Nlc3NfdGl0bGUgeworICBjaGFyKiBzdHI7CisgIHNpemVfdCBsZW47ICAvKiBMZW5ndGggb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyB0aXRsZS4gKi8KKyAgc2l6ZV90IGNhcDsgIC8qIE1heGltdW0gY2FwYWNpdHkuIENvbXB1dGVkIG9uY2UgaW4gdXZfc2V0dXBfYXJncygpLiAqLworfTsKKwogZXh0ZXJuIHZvaWQgdXZfX3NldF9wcm9jZXNzX3RpdGxlKGNvbnN0IGNoYXIqIHRpdGxlKTsKIAogc3RhdGljIHV2X211dGV4X3QgcHJvY2Vzc190aXRsZV9tdXRleDsKIHN0YXRpYyB1dl9vbmNlX3QgcHJvY2Vzc190aXRsZV9tdXRleF9vbmNlID0gVVZfT05DRV9JTklUOworc3RhdGljIHN0cnVjdCB1dl9fcHJvY2Vzc190aXRsZSBwcm9jZXNzX3RpdGxlOwogc3RhdGljIHZvaWQqIGFyZ3NfbWVtOwogCi1zdGF0aWMgc3RydWN0IHsKLSAgY2hhciogc3RyOwotICBzaXplX3QgbGVuOwotfSBwcm9jZXNzX3RpdGxlOwotCiAKIHN0YXRpYyB2b2lkIGluaXRfcHJvY2Vzc190aXRsZV9tdXRleF9vbmNlKHZvaWQpIHsKICAgdXZfbXV0ZXhfaW5pdCgmcHJvY2Vzc190aXRsZV9tdXRleCk7Ci0jaWZkZWYgX19BUFBMRV9fCi0gIHV2X19zZXRfcHJvY2Vzc190aXRsZV9wbGF0Zm9ybV9pbml0KCk7Ci0jZW5kaWYKIH0KIAogCiBjaGFyKiogdXZfc2V0dXBfYXJncyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgc3RydWN0IHV2X19wcm9jZXNzX3RpdGxlIHB0OwogICBjaGFyKiogbmV3X2FyZ3Y7CiAgIHNpemVfdCBzaXplOwogICBjaGFyKiBzOwpAQCAtNTQsMjAgKzUzLDE0IEBACiAgIGlmIChhcmdjIDw9IDApCiAgICAgcmV0dXJuIGFyZ3Y7CiAKLSAgLyogQ2FsY3VsYXRlIGhvdyBtdWNoIG1lbW9yeSB3ZSBuZWVkIGZvciB0aGUgYXJndiBzdHJpbmdzLiAqLwotICBzaXplID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKLSAgICBzaXplICs9IHN0cmxlbihhcmd2W2ldKSArIDE7CisgIHB0LnN0ciA9IGFyZ3ZbMF07CisgIHB0LmxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKyAgcHQuY2FwID0gcHQubGVuICsgMTsKIAotI2lmIGRlZmluZWQoX19NVlNfXykKLSAgLyogYXJndiBpcyBub3QgYWRqYWNlbnQuIFNvIGp1c3QgdXNlIGFyZ3ZbMF0gKi8KLSAgcHJvY2Vzc190aXRsZS5zdHIgPSBhcmd2WzBdOwotICBwcm9jZXNzX3RpdGxlLmxlbiA9IHN0cmxlbihhcmd2WzBdKTsKLSNlbHNlCi0gIHByb2Nlc3NfdGl0bGUuc3RyID0gYXJndlswXTsKLSAgcHJvY2Vzc190aXRsZS5sZW4gPSBhcmd2W2FyZ2MgLSAxXSArIHN0cmxlbihhcmd2W2FyZ2MgLSAxXSkgLSBhcmd2WzBdOwotICBhc3NlcnQocHJvY2Vzc190aXRsZS5sZW4gKyAxID09IHNpemUpOyAgLyogYXJndiBtZW1vcnkgc2hvdWxkIGJlIGFkamFjZW50LiAqLwotI2VuZGlmCisgIC8qIENhbGN1bGF0ZSBob3cgbXVjaCBtZW1vcnkgd2UgbmVlZCBmb3IgdGhlIGFyZ3Ygc3RyaW5ncy4gKi8KKyAgc2l6ZSA9IHB0LmNhcDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICBzaXplICs9IHN0cmxlbihhcmd2W2ldKSArIDE7CiAKICAgLyogQWRkIHNwYWNlIGZvciB0aGUgYXJndiBwb2ludGVycy4gKi8KICAgc2l6ZSArPSAoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIqKTsKQEAgLTc1LDMyICs2OCw1NCBAQAogICBuZXdfYXJndiA9IHV2X19tYWxsb2Moc2l6ZSk7CiAgIGlmIChuZXdfYXJndiA9PSBOVUxMKQogICAgIHJldHVybiBhcmd2OwotICBhcmdzX21lbSA9IG5ld19hcmd2OwogCiAgIC8qIENvcHkgb3ZlciB0aGUgc3RyaW5ncyBhbmQgc2V0IHVwIHRoZSBwb2ludGVyIHRhYmxlLiAqLworICBpID0gMDsKICAgcyA9IChjaGFyKikgJm5ld19hcmd2W2FyZ2MgKyAxXTsKLSAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworICBzaXplID0gcHQuY2FwOworICBnb3RvIGxvb3A7CisKKyAgZm9yICgvKiBlbXB0eSAqLzsgaSA8IGFyZ2M7IGkrKykgewogICAgIHNpemUgPSBzdHJsZW4oYXJndltpXSkgKyAxOworICBsb29wOgogICAgIG1lbWNweShzLCBhcmd2W2ldLCBzaXplKTsKICAgICBuZXdfYXJndltpXSA9IHM7CiAgICAgcyArPSBzaXplOwogICB9CiAgIG5ld19hcmd2W2ldID0gTlVMTDsKIAorICAvKiBhcmd2IGlzIG5vdCBhZGphY2VudCBvbiB6L29zLCB3ZSB1c2UganVzdCBhcmd2WzBdIG9uIHRoYXQgcGxhdGZvcm0uICovCisjaWZuZGVmIF9fTVZTX18KKyAgcHQuY2FwID0gYXJndltpIC0gMV0gKyBzaXplIC0gYXJndlswXTsKKyNlbmRpZgorCisgIGFyZ3NfbWVtID0gbmV3X2FyZ3Y7CisgIHByb2Nlc3NfdGl0bGUgPSBwdDsKKwogICByZXR1cm4gbmV3X2FyZ3Y7CiB9CiAKIAogaW50IHV2X3NldF9wcm9jZXNzX3RpdGxlKGNvbnN0IGNoYXIqIHRpdGxlKSB7CisgIHN0cnVjdCB1dl9fcHJvY2Vzc190aXRsZSogcHQ7CisgIHNpemVfdCBsZW47CisKKyAgcHQgPSAmcHJvY2Vzc190aXRsZTsKKyAgbGVuID0gc3RybGVuKHRpdGxlKTsKKwogICB1dl9vbmNlKCZwcm9jZXNzX3RpdGxlX211dGV4X29uY2UsIGluaXRfcHJvY2Vzc190aXRsZV9tdXRleF9vbmNlKTsKICAgdXZfbXV0ZXhfbG9jaygmcHJvY2Vzc190aXRsZV9tdXRleCk7CiAKLSAgaWYgKHByb2Nlc3NfdGl0bGUubGVuICE9IDApIHsKLSAgICAvKiBObyBuZWVkIHRvIHRlcm1pbmF0ZSwgYnl0ZSBhZnRlciBpcyBhbHdheXMgJ1wwJy4gKi8KLSAgICBzdHJuY3B5KHByb2Nlc3NfdGl0bGUuc3RyLCB0aXRsZSwgcHJvY2Vzc190aXRsZS5sZW4pOwotICAgIHV2X19zZXRfcHJvY2Vzc190aXRsZSh0aXRsZSk7CisgIGlmIChsZW4gPj0gcHQtPmNhcCkgeworICAgIGxlbiA9IDA7CisgICAgaWYgKHB0LT5jYXAgPiAwKQorICAgICAgbGVuID0gcHQtPmNhcCAtIDE7CiAgIH0KIAorICBtZW1jcHkocHQtPnN0ciwgdGl0bGUsIGxlbik7CisgIG1lbXNldChwdC0+c3RyICsgbGVuLCAnXDAnLCBwdC0+Y2FwIC0gbGVuKTsKKyAgcHQtPmxlbiA9IGxlbjsKKwogICB1dl9tdXRleF91bmxvY2soJnByb2Nlc3NfdGl0bGVfbXV0ZXgpOwogCiAgIHJldHVybiAwOwpAQCAtMTMwLDcgKzE0NSw3IEBACiB9CiAKIAotVVZfREVTVFJVQ1RPUihzdGF0aWMgdm9pZCBmcmVlX2FyZ3NfbWVtKHZvaWQpKSB7Cit2b2lkIHV2X19wcm9jZXNzX3RpdGxlX2NsZWFudXAodm9pZCkgewogICB1dl9fZnJlZShhcmdzX21lbSk7ICAvKiBLZWVwIHZhbGdyaW5kIGhhcHB5LiAqLwogICBhcmdzX21lbSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZGV2dXJhbmRvbS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcmFuZG9tLWRldnVyYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWU1MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcmFuZG9tLWRldnVyYW5kb20uYwpAQCAtMCwwICsxLDkzIEBACisvKiBDb3B5cmlnaHQgbGlidXYgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAidXYuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHV2X29uY2VfdCBvbmNlID0gVVZfT05DRV9JTklUOworc3RhdGljIGludCBzdGF0dXM7CisKKworaW50IHV2X19yYW5kb21fcmVhZHBhdGgoY29uc3QgY2hhciogcGF0aCwgdm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKSB7CisgIHN0cnVjdCBzdGF0IHM7CisgIHNpemVfdCBwb3M7CisgIHNzaXplX3QgbjsKKyAgaW50IGZkOworCisgIGZkID0gdXZfX29wZW5fY2xvZXhlYyhwYXRoLCBPX1JET05MWSk7CisKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gZmQ7CisKKyAgaWYgKGZzdGF0KGZkLCAmcykpIHsKKyAgICB1dl9fY2xvc2UoZmQpOworICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKyAgfQorCisgIGlmICghU19JU0NIUihzLnN0X21vZGUpKSB7CisgICAgdXZfX2Nsb3NlKGZkKTsKKyAgICByZXR1cm4gVVZfRUlPOworICB9CisKKyAgZm9yIChwb3MgPSAwOyBwb3MgIT0gYnVmbGVuOyBwb3MgKz0gbikgeworICAgIGRvCisgICAgICBuID0gcmVhZChmZCwgKGNoYXIqKSBidWYgKyBwb3MsIGJ1ZmxlbiAtIHBvcyk7CisgICAgd2hpbGUgKG4gPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgaWYgKG4gPT0gLTEpIHsKKyAgICAgIHV2X19jbG9zZShmZCk7CisgICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgICAgfQorCisgICAgaWYgKG4gPT0gMCkgeworICAgICAgdXZfX2Nsb3NlKGZkKTsKKyAgICAgIHJldHVybiBVVl9FSU87CisgICAgfQorICB9CisKKyAgdXZfX2Nsb3NlKGZkKTsKKyAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdXZfX3JhbmRvbV9kZXZ1cmFuZG9tX2luaXQodm9pZCkgeworICBjaGFyIGM7CisKKyAgLyogTGludXgncyByYW5kb20oNCkgbWFuIHBhZ2Ugc3VnZ2VzdHMgYXBwbGljYXRpb25zIHNob3VsZCByZWFkIGF0IGxlYXN0CisgICAqIG9uY2UgZnJvbSAvZGV2L3JhbmRvbSBiZWZvcmUgc3dpdGNoaW5nIHRvIC9kZXYvdXJhbmRvbSBpbiBvcmRlciB0byBzZWVkCisgICAqIHRoZSBzeXN0ZW0gUk5HLiBSZWFkcyBmcm9tIC9kZXYvcmFuZG9tIGNhbiBvZiBjb3Vyc2UgYmxvY2sgaW5kZWZpbml0ZWx5CisgICAqIHVudGlsIGVudHJvcHkgaXMgYXZhaWxhYmxlIGJ1dCB0aGF0J3MgdGhlIHBvaW50LgorICAgKi8KKyAgc3RhdHVzID0gdXZfX3JhbmRvbV9yZWFkcGF0aCgiL2Rldi9yYW5kb20iLCAmYywgMSk7Cit9CisKKworaW50IHV2X19yYW5kb21fZGV2dXJhbmRvbSh2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pIHsKKyAgdXZfb25jZSgmb25jZSwgdXZfX3JhbmRvbV9kZXZ1cmFuZG9tX2luaXQpOworCisgIGlmIChzdGF0dXMgIT0gMCkKKyAgICByZXR1cm4gc3RhdHVzOworCisgIHJldHVybiB1dl9fcmFuZG9tX3JlYWRwYXRoKCIvZGV2L3VyYW5kb20iLCBidWYsIGJ1Zmxlbik7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZ2V0ZW50cm9weS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcmFuZG9tLWdldGVudHJvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDVkOWZkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcmFuZG9tLWdldGVudHJvcHkuYwpAQCAtMCwwICsxLDU3IEBACisvKiBDb3B5cmlnaHQgbGlidXYgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAidXYuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKwordHlwZWRlZiBpbnQgKCp1dl9fZ2V0ZW50cm9weV9jYikodm9pZCAqLCBzaXplX3QpOworCitzdGF0aWMgdXZfX2dldGVudHJvcHlfY2IgdXZfX2dldGVudHJvcHk7CitzdGF0aWMgdXZfb25jZV90IG9uY2UgPSBVVl9PTkNFX0lOSVQ7CisKKworc3RhdGljIHZvaWQgdXZfX3JhbmRvbV9nZXRlbnRyb3B5X2luaXQodm9pZCkgeworICB1dl9fZ2V0ZW50cm9weSA9ICh1dl9fZ2V0ZW50cm9weV9jYikgZGxzeW0oUlRMRF9ERUZBVUxULCAiZ2V0ZW50cm9weSIpOworfQorCisKK2ludCB1dl9fcmFuZG9tX2dldGVudHJvcHkodm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKSB7CisgIHNpemVfdCBwb3M7CisgIHNpemVfdCBzdHJpZGU7CisKKyAgdXZfb25jZSgmb25jZSwgdXZfX3JhbmRvbV9nZXRlbnRyb3B5X2luaXQpOworCisgIGlmICh1dl9fZ2V0ZW50cm9weSA9PSBOVUxMKQorICAgIHJldHVybiBVVl9FTk9TWVM7CisKKyAgLyogZ2V0ZW50cm9weSgpIHJldHVybnMgYW4gZXJyb3IgZm9yIHJlcXVlc3RzID4gMjU2IGJ5dGVzLiAqLworICBmb3IgKHBvcyA9IDAsIHN0cmlkZSA9IDI1NjsgcG9zICsgc3RyaWRlIDwgYnVmbGVuOyBwb3MgKz0gc3RyaWRlKQorICAgIGlmICh1dl9fZ2V0ZW50cm9weSgoY2hhciAqKSBidWYgKyBwb3MsIHN0cmlkZSkpCisgICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisKKyAgaWYgKHV2X19nZXRlbnRyb3B5KChjaGFyICopIGJ1ZiArIHBvcywgYnVmbGVuIC0gcG9zKSkKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZ2V0cmFuZG9tLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZ2V0cmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjOTQwOAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1nZXRyYW5kb20uYwpAQCAtMCwwICsxLDg4IEBACisvKiBDb3B5cmlnaHQgbGlidXYgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAidXYuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaWZkZWYgX19saW51eF9fCisKKyNpbmNsdWRlICJsaW51eC1zeXNjYWxscy5oIgorCisjZGVmaW5lIHV2X19yYW5kb21fZ2V0cmFuZG9tX2luaXQoKSAwCisKKyNlbHNlICAvKiAhX19saW51eF9fICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorCit0eXBlZGVmIHNzaXplX3QgKCp1dl9fZ2V0cmFuZG9tX2NiKSh2b2lkICosIHNpemVfdCwgdW5zaWduZWQpOworCitzdGF0aWMgdXZfX2dldHJhbmRvbV9jYiB1dl9fZ2V0cmFuZG9tOworc3RhdGljIHV2X29uY2VfdCBvbmNlID0gVVZfT05DRV9JTklUOworCitzdGF0aWMgdm9pZCB1dl9fcmFuZG9tX2dldHJhbmRvbV9pbml0X29uY2Uodm9pZCkgeworICB1dl9fZ2V0cmFuZG9tID0gKHV2X19nZXRyYW5kb21fY2IpIGRsc3ltKFJUTERfREVGQVVMVCwgImdldHJhbmRvbSIpOworfQorCitzdGF0aWMgaW50IHV2X19yYW5kb21fZ2V0cmFuZG9tX2luaXQodm9pZCkgeworICB1dl9vbmNlKCZvbmNlLCB1dl9fcmFuZG9tX2dldHJhbmRvbV9pbml0X29uY2UpOworCisgIGlmICh1dl9fZ2V0cmFuZG9tID09IE5VTEwpCisgICAgcmV0dXJuIFVWX0VOT1NZUzsKKworICByZXR1cm4gMDsKK30KKworI2VuZGlmICAvKiAhX19saW51eF9fICovCisKK2ludCB1dl9fcmFuZG9tX2dldHJhbmRvbSh2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pIHsKKyAgc3NpemVfdCBuOworICBzaXplX3QgcG9zOworICBpbnQgcmM7CisKKyAgcmMgPSB1dl9fcmFuZG9tX2dldHJhbmRvbV9pbml0KCk7CisgIGlmIChyYyAhPSAwKQorICAgIHJldHVybiByYzsKKworICBmb3IgKHBvcyA9IDA7IHBvcyAhPSBidWZsZW47IHBvcyArPSBuKSB7CisgICAgZG8geworICAgICAgbiA9IGJ1ZmxlbiAtIHBvczsKKworICAgICAgLyogTW9zdCBnZXRyYW5kb20oKSBpbXBsZW1lbnRhdGlvbnMgcHJvbWlzZSB0aGF0IHJlYWRzIDw9IDI1NiBieXRlcworICAgICAgICogd2lsbCBhbHdheXMgc3VjY2VlZCBhbmQgd29uJ3QgYmUgaW50ZXJydXB0ZWQgYnkgc2lnbmFscy4KKyAgICAgICAqIEl0J3MgdGhlcmVmb3JlIHVzZWZ1bCB0byBzcGxpdCBpdCB1cCBpbiBzbWFsbGVyIHJlYWRzIGJlY2F1c2UKKyAgICAgICAqIG9uZSBiaWcgcmVhZCBtYXksIGluIHRoZW9yeSwgY29udGludW91c2x5IGZhaWwgd2l0aCBFSU5UUi4KKyAgICAgICAqLworICAgICAgaWYgKG4gPiAyNTYpCisgICAgICAgIG4gPSAyNTY7CisKKyAgICAgIG4gPSB1dl9fZ2V0cmFuZG9tKChjaGFyICopIGJ1ZiArIHBvcywgbiwgMCk7CisgICAgfSB3aGlsZSAobiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICBpZiAobiA9PSAtMSkKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKworICAgIGlmIChuID09IDApCisgICAgICByZXR1cm4gVVZfRUlPOworICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tc3lzY3RsLWxpbnV4LmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tc3lzY3RsLWxpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYThkNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1zeXNjdGwtbGludXguYwpAQCAtMCwwICsxLDk5IEBACisvKiBDb3B5cmlnaHQgbGlidXYgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAidXYuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHN5c2NhbGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworCitzdHJ1Y3QgdXZfX3N5c2N0bF9hcmdzIHsKKyAgaW50KiBuYW1lOworICBpbnQgbmxlbjsKKyAgdm9pZCogb2xkdmFsOworICBzaXplX3QqIG9sZGxlbnA7CisgIHZvaWQqIG5ld3ZhbDsKKyAgc2l6ZV90IG5ld2xlbjsKKyAgdW5zaWduZWQgbG9uZyB1bnVzZWRbNF07Cit9OworCisKK2ludCB1dl9fcmFuZG9tX3N5c2N0bCh2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pIHsKKyAgc3RhdGljIGludCBuYW1lW10gPSB7MSAvKkNUTF9LRVJOKi8sIDQwIC8qS0VSTl9SQU5ET00qLywgNiAvKlJBTkRPTV9VVUlEKi99OworICBzdHJ1Y3QgdXZfX3N5c2N0bF9hcmdzIGFyZ3M7CisgIGNoYXIgdXVpZFsxNl07CisgIGNoYXIqIHA7CisgIGNoYXIqIHBlOworICBzaXplX3QgbjsKKworICBwID0gYnVmOworICBwZSA9IHAgKyBidWZsZW47CisKKyAgd2hpbGUgKHAgPCBwZSkgeworICAgIG1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKworICAgIGFyZ3MubmFtZSA9IG5hbWU7CisgICAgYXJncy5ubGVuID0gQVJSQVlfU0laRShuYW1lKTsKKyAgICBhcmdzLm9sZHZhbCA9IHV1aWQ7CisgICAgYXJncy5vbGRsZW5wID0gJm47CisgICAgbiA9IHNpemVvZih1dWlkKTsKKworICAgIC8qIEVtaXRzIGEgZGVwcmVjYXRpb24gd2FybmluZyB3aXRoIHNvbWUga2VybmVscyBidXQgdGhhdCBzZWVtcyBsaWtlCisgICAgICogYW4gb2theSB0cmFkZS1vZmYgZm9yIHRoZSBmYWxsYmFjayBvZiB0aGUgZmFsbGJhY2s6IHRoaXMgZnVuY3Rpb24gaXMKKyAgICAgKiBvbmx5IGNhbGxlZCB3aGVuIG5laXRoZXIgZ2V0cmFuZG9tKDIpIG5vciAvZGV2L3VyYW5kb20gYXJlIGF2YWlsYWJsZS4KKyAgICAgKiBGYWlscyB3aXRoIEVOT1NZUyBvbiBrZXJuZWxzIGNvbmZpZ3VyZWQgd2l0aG91dCBDT05GSUdfU1lTQ1RMX1NZU0NBTEwuCisgICAgICogQXQgbGVhc3QgYXJtNjQgbmV2ZXIgaGFkIGEgX3N5c2N0bCBzeXN0ZW0gY2FsbCBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QKKyAgICAgKiBoYXZlIGEgU1lTX19zeXNjdGwgZGVmaW5lIGVpdGhlci4KKyAgICAgKi8KKyNpZmRlZiBTWVNfX3N5c2N0bAorICAgIGlmIChzeXNjYWxsKFNZU19fc3lzY3RsLCAmYXJncykgPT0gLTEpCisgICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisjZWxzZQorICAgIHsKKyAgICAgICh2b2lkKSAmYXJnczsKKyAgICAgIHJldHVybiBVVl9FTk9TWVM7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAobiAhPSBzaXplb2YodXVpZCkpCisgICAgICByZXR1cm4gVVZfRUlPOyAgLyogQ2FuJ3QgaGFwcGVuLiAqLworCisgICAgLyogdXVpZFtdIGlzIG5vdyBhIHR5cGUgNCBVVUlELiBCeXRlcyA2IGFuZCA4IChjb3VudGluZyBmcm9tIHplcm8pIGNvbnRhaW4KKyAgICAgKiA0IGFuZCA1IGJpdHMgb2YgZW50cm9weSwgcmVzcGVjdGl2ZWx5LiBGb3IgZWFzZSBvZiB1c2UsIHdlIHNraXAgdGhvc2UKKyAgICAgKiBhbmQgb25seSB1c2UgMTQgb2YgdGhlIDE2IGJ5dGVzLgorICAgICAqLworICAgIHV1aWRbNl0gPSB1dWlkWzE0XTsKKyAgICB1dWlkWzhdID0gdXVpZFsxNV07CisKKyAgICBuID0gcGUgLSBwOworICAgIGlmIChuID4gMTQpCisgICAgICBuID0gMTQ7CisKKyAgICBtZW1jcHkocCwgdXVpZCwgbik7CisgICAgcCArPSBuOworICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zaWduYWwuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3NpZ25hbC5jCmluZGV4IDAxYWE1NWYuLjFjODNlMDkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3NpZ25hbC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3NpZ25hbC5jCkBAIC03Nyw3ICs3Nyw3IEBACiB9CiAKIAotVVZfREVTVFJVQ1RPUihzdGF0aWMgdm9pZCB1dl9fc2lnbmFsX2dsb2JhbF9maW5pKHZvaWQpKSB7Cit2b2lkIHV2X19zaWduYWxfY2xlYW51cCh2b2lkKSB7CiAgIC8qIFdlIGNhbiBvbmx5IHVzZSBzaWduYWwtc2FmZSBmdW5jdGlvbnMgaGVyZS4KICAgICogVGhhdCBpbmNsdWRlcyByZWFkL3dyaXRlIGFuZCBjbG9zZSwgZm9ydHVuYXRlbHkuCiAgICAqIFdlIGRvIGFsbCBvZiB0aGlzIGRpcmVjdGx5IGhlcmUgaW5zdGVhZCBvZiByZXNldHRpbmcKQEAgLTk4LDcgKzk4LDcgQEAKIAogCiBzdGF0aWMgdm9pZCB1dl9fc2lnbmFsX2dsb2JhbF9yZWluaXQodm9pZCkgewotICB1dl9fc2lnbmFsX2dsb2JhbF9maW5pKCk7CisgIHV2X19zaWduYWxfY2xlYW51cCgpOwogCiAgIGlmICh1dl9fbWFrZV9waXBlKHV2X19zaWduYWxfbG9ja19waXBlZmQsIDApKQogICAgIGFib3J0KCk7CkBAIC0zMzEsMTYgKzMzMSw3IEBACiAKIAogdm9pZCB1dl9fc2lnbmFsX2Nsb3NlKHV2X3NpZ25hbF90KiBoYW5kbGUpIHsKLQogICB1dl9fc2lnbmFsX3N0b3AoaGFuZGxlKTsKLQotICAvKiBJZiB0aGVyZSBhcmUgYW55IGNhdWdodCBzaWduYWxzICJ0cmFwcGVkIiBpbiB0aGUgc2lnbmFsIHBpcGUsIHdlIGNhbid0Ci0gICAqIGNhbGwgdGhlIGNsb3NlIGNhbGxiYWNrIHlldC4gT3RoZXJ3aXNlLCBhZGQgdGhlIGhhbmRsZSB0byB0aGUgZmluaXNoX2Nsb3NlCi0gICAqIHF1ZXVlLgotICAgKi8KLSAgaWYgKGhhbmRsZS0+Y2F1Z2h0X3NpZ25hbHMgPT0gaGFuZGxlLT5kaXNwYXRjaGVkX3NpZ25hbHMpIHsKLSAgICB1dl9fbWFrZV9jbG9zZV9wZW5kaW5nKCh1dl9oYW5kbGVfdCopIGhhbmRsZSk7Ci0gIH0KIH0KIAogCkBAIC0zNzUsNyArMzY2LDcgQEAKIAogICAvKiBTaG9ydCBjaXJjdWl0OiBpZiB0aGUgc2lnbmFsIHdhdGNoZXIgaXMgYWxyZWFkeSB3YXRjaGluZyB7c2lnbnVtfSBkb24ndAogICAgKiBnbyB0aHJvdWdoIHRoZSBwcm9jZXNzIG9mIGRlcmVnaXN0ZXJpbmcgYW5kIHJlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyLgotICAgKiBBZGRpdGlvbmFsbHksIHRoaXMgYXZvaWRzIHBlbmRpbmcgc2lnbmFscyBnZXR0aW5nIGxvc3QgaW4gdGhlIHNtYWxsIHRpbWUKKyAgICogQWRkaXRpb25hbGx5LCB0aGlzIGF2b2lkcyBwZW5kaW5nIHNpZ25hbHMgZ2V0dGluZyBsb3N0IGluIHRoZSBzbWFsbAogICAgKiB0aW1lIGZyYW1lIHRoYXQgaGFuZGxlLT5zaWdudW0gPT0gMC4KICAgICovCiAgIGlmIChzaWdudW0gPT0gaGFuZGxlLT5zaWdudW0pIHsKQEAgLTQ3MiwxNSArNDYzLDYgQEAKIAogICAgICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9TSUdOQUxfT05FX1NIT1QpCiAgICAgICAgIHV2X19zaWduYWxfc3RvcChoYW5kbGUpOwotCi0gICAgICAvKiBJZiB1dl9jbG9zZSB3YXMgY2FsbGVkIHdoaWxlIHRoZXJlIHdlcmUgY2F1Z2h0IHNpZ25hbHMgdGhhdCB3ZXJlIG5vdAotICAgICAgICogeWV0IGRpc3BhdGNoZWQsIHRoZSB1dl9fZmluaXNoX2Nsb3NlIHdhcyBkZWZlcnJlZC4gTWFrZSBjbG9zZSBwZW5kaW5nCi0gICAgICAgKiBub3cgaWYgdGhpcyBoYXMgaGFwcGVuZWQuCi0gICAgICAgKi8KLSAgICAgIGlmICgoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9DTE9TSU5HKSAmJgotICAgICAgICAgIChoYW5kbGUtPmNhdWdodF9zaWduYWxzID09IGhhbmRsZS0+ZGlzcGF0Y2hlZF9zaWduYWxzKSkgewotICAgICAgICB1dl9fbWFrZV9jbG9zZV9wZW5kaW5nKCh1dl9oYW5kbGVfdCopIGhhbmRsZSk7Ci0gICAgICB9CiAgICAgfQogCiAgICAgYnl0ZXMgLT0gZW5kOwpAQCAtNTYzLDYgKzU0NSw3IEBACiAgICAgaWYgKGZpcnN0X29uZXNob3QgJiYgIXJlbV9vbmVzaG90KSB7CiAgICAgICByZXQgPSB1dl9fc2lnbmFsX3JlZ2lzdGVyX2hhbmRsZXIoaGFuZGxlLT5zaWdudW0sIDEpOwogICAgICAgYXNzZXJ0KHJldCA9PSAwKTsKKyAgICAgICh2b2lkKXJldDsKICAgICB9CiAgIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvc3RyZWFtLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zdHJlYW0uYwppbmRleCA4MTIxZjY0Li4zYjZkYThkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zdHJlYW0uYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zdHJlYW0uYwpAQCAtMTAwMCwxMiArMTAwMCwxMiBAQAogCiBzdGF0aWMgdm9pZCB1dl9fc3RyZWFtX2VvZih1dl9zdHJlYW1fdCogc3RyZWFtLCBjb25zdCB1dl9idWZfdCogYnVmKSB7CiAgIHN0cmVhbS0+ZmxhZ3MgfD0gVVZfSEFORExFX1JFQURfRU9GOworICBzdHJlYW0tPmZsYWdzICY9IH5VVl9IQU5ETEVfUkVBRElORzsKICAgdXZfX2lvX3N0b3Aoc3RyZWFtLT5sb29wLCAmc3RyZWFtLT5pb193YXRjaGVyLCBQT0xMSU4pOwogICBpZiAoIXV2X19pb19hY3RpdmUoJnN0cmVhbS0+aW9fd2F0Y2hlciwgUE9MTE9VVCkpCiAgICAgdXZfX2hhbmRsZV9zdG9wKHN0cmVhbSk7CiAgIHV2X19zdHJlYW1fb3N4X2ludGVycnVwdF9zZWxlY3Qoc3RyZWFtKTsKICAgc3RyZWFtLT5yZWFkX2NiKHN0cmVhbSwgVVZfRU9GLCBidWYpOwotICBzdHJlYW0tPmZsYWdzICY9IH5VVl9IQU5ETEVfUkVBRElORzsKIH0KIAogCkBAIC0xMDQ4LDcgKzEwNDgsMTIgQEAKIH0KIAogCi0jZGVmaW5lIFVWX19DTVNHX0ZEX0NPVU5UIDY0CisjaWYgZGVmaW5lZChfX1BBU0VfXykKKy8qIG9uIElCTWkgUEFTRSB0aGUgY29udHJvbCBtZXNzYWdlIGxlbmd0aCBjYW4gbm90IGV4Y2VlZCAyNTYuICovCisjIGRlZmluZSBVVl9fQ01TR19GRF9DT1VOVCA2MAorI2Vsc2UKKyMgZGVmaW5lIFVWX19DTVNHX0ZEX0NPVU5UIDY0CisjZW5kaWYKICNkZWZpbmUgVVZfX0NNU0dfRkRfU0laRSAoVVZfX0NNU0dfRkRfQ09VTlQgKiBzaXplb2YoaW50KSkKIAogCkBAIC0xNDAzLDcgKzE0MDgsNyBAQAogICAgIHJldHVybiBVVl9FQkFERjsKIAogICBpZiAoIShzdHJlYW0tPmZsYWdzICYgVVZfSEFORExFX1dSSVRBQkxFKSkKLSAgICByZXR1cm4gLUVQSVBFOworICAgIHJldHVybiBVVl9FUElQRTsKIAogICBpZiAoc2VuZF9oYW5kbGUpIHsKICAgICBpZiAoc3RyZWFtLT50eXBlICE9IFVWX05BTUVEX1BJUEUgfHwgISgodXZfcGlwZV90KilzdHJlYW0pLT5pcGMpCkBAIC0xNTU3LDcgKzE1NjIsNyBAQAogICAgIHJldHVybiBVVl9FSU5WQUw7CiAKICAgaWYgKCEoc3RyZWFtLT5mbGFncyAmIFVWX0hBTkRMRV9SRUFEQUJMRSkpCi0gICAgcmV0dXJuIC1FTk9UQ09OTjsKKyAgICByZXR1cm4gVVZfRU5PVENPTk47CiAKICAgLyogVGhlIFVWX0hBTkRMRV9SRUFESU5HIGZsYWcgaXMgaXJyZWxldmFudCBvZiB0aGUgc3RhdGUgb2YgdGhlIHRjcCAtIGl0IGp1c3QKICAgICogZXhwcmVzc2VzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIHRoZSB1c2VyLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvc3Vub3MuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3N1bm9zLmMKaW5kZXggMGNkMjVjMS4uOTY5NzY0OCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvc3Vub3MuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zdW5vcy5jCkBAIC03MDAsMTYgKzcwMCw2IEBACiB9CiAKIAotdm9pZCB1dl9mcmVlX2NwdV9pbmZvKHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvcywgaW50IGNvdW50KSB7Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKLSAgfQotCi0gIHV2X19mcmVlKGNwdV9pbmZvcyk7Ci19Ci0KICNpZmRlZiBTVU5PU19OT19JRkFERFJTCiBpbnQgdXZfaW50ZXJmYWNlX2FkZHJlc3Nlcyh1dl9pbnRlcmZhY2VfYWRkcmVzc190KiogYWRkcmVzc2VzLCBpbnQqIGNvdW50KSB7CiAgICpjb3VudCA9IDA7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC90Y3AuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3RjcC5jCmluZGV4IDhjZWRjZDYuLmQ0N2U5NDMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3RjcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3RjcC5jCkBAIC0zMDgsNiArMzA4LDIzIEBACiB9CiAKIAoraW50IHV2X3RjcF9jbG9zZV9yZXNldCh1dl90Y3BfdCogaGFuZGxlLCB1dl9jbG9zZV9jYiBjbG9zZV9jYikgeworICBpbnQgZmQ7CisgIHN0cnVjdCBsaW5nZXIgbCA9IHsgMSwgMCB9OworCisgIC8qIERpc2FsbG93IHNldHRpbmcgU09fTElOR0VSIHRvIHplcm8gZHVlIHRvIHNvbWUgcGxhdGZvcm0gaW5jb25zaXN0ZW5jaWVzICovCisgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1NIVVRUSU5HKQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgZmQgPSB1dl9fc3RyZWFtX2ZkKGhhbmRsZSk7CisgIGlmICgwICE9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwgJmwsIHNpemVvZihsKSkpCisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworCisgIHV2X2Nsb3NlKCh1dl9oYW5kbGVfdCopIGhhbmRsZSwgY2xvc2VfY2IpOworICByZXR1cm4gMDsKK30KKworCiBpbnQgdXZfdGNwX2xpc3Rlbih1dl90Y3BfdCogdGNwLCBpbnQgYmFja2xvZywgdXZfY29ubmVjdGlvbl9jYiBjYikgewogICBzdGF0aWMgaW50IHNpbmdsZV9hY2NlcHQgPSAtMTsKICAgdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM2Miw4ICszNzksMTYgQEAKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICNpZmRlZiBUQ1BfS0VFUElETEUKLSAgaWYgKG9uICYmIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfS0VFUElETEUsICZkZWxheSwgc2l6ZW9mKGRlbGF5KSkpCi0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworICBpZiAob24pIHsKKyAgICBpbnQgaW50dmwgPSAxOyAgLyogIDEgc2Vjb25kOyBzYW1lIGFzIGRlZmF1bHQgb24gV2luMzIgKi8KKyAgICBpbnQgY250ID0gMTA7ICAvKiAxMCByZXRyaWVzOyBzYW1lIGFzIGhhcmRjb2RlZCBvbiBXaW4zMiAqLworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX0tFRVBJRExFLCAmZGVsYXksIHNpemVvZihkZWxheSkpKQorICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX0tFRVBJTlRWTCwgJmludHZsLCBzaXplb2YoaW50dmwpKSkKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKyAgICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9LRUVQQ05ULCAmY250LCBzaXplb2YoY250KSkpCisgICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgIH0KICNlbmRpZgogCiAgIC8qIFNvbGFyaXMvU21hcnRPUywgaWYgeW91IGRvbid0IHN1cHBvcnQga2VlcC1hbGl2ZSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3RocmVhZC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdGhyZWFkLmMKaW5kZXggMDQ1MzIyMS4uZjkzYWE1MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdGhyZWFkLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdGhyZWFkLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxzeXMvc2VtLmg+CiAjZW5kaWYKIAotI2lmZGVmIF9fR0xJQkNfXworI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQogI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4gIC8qIGdudV9nZXRfbGliY192ZXJzaW9uKCkgKi8KICNlbmRpZgogCkBAIC0yMjIsNiArMjIyLDEyIEBACiAgIHNpemVfdCBwYWdlc2l6ZTsKICAgc2l6ZV90IHN0YWNrX3NpemU7CiAKKyAgLyogVXNlZCB0byBzcXVlbGNoIGEgLVdjYXN0LWZ1bmN0aW9uLXR5cGUgd2FybmluZy4gKi8KKyAgdW5pb24geworICAgIHZvaWQgKCppbikodm9pZCopOworICAgIHZvaWQqICgqb3V0KSh2b2lkKik7CisgIH0gZjsKKwogICBzdGFja19zaXplID0KICAgICAgIHBhcmFtcy0+ZmxhZ3MgJiBVVl9USFJFQURfSEFTX1NUQUNLX1NJWkUgPyBwYXJhbXMtPnN0YWNrX3NpemUgOiAwOwogCkBAIC0yNDgsNyArMjU0LDggQEAKICAgICAgIGFib3J0KCk7CiAgIH0KIAotICBlcnIgPSBwdGhyZWFkX2NyZWF0ZSh0aWQsIGF0dHIsICh2b2lkKigqKSh2b2lkKikpIGVudHJ5LCBhcmcpOworICBmLmluID0gZW50cnk7CisgIGVyciA9IHB0aHJlYWRfY3JlYXRlKHRpZCwgYXR0ciwgZi5vdXQsIGFyZyk7CiAKICAgaWYgKGF0dHIgIT0gTlVMTCkKICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveShhdHRyKTsKQEAgLTQ3NCw3ICs0ODEsNyBAQAogCiAjZWxzZSAvKiAhKGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFDSF9fKSkgKi8KIAotI2lmZGVmIF9fR0xJQkNfXworI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQogCiAvKiBIYWNrIGFyb3VuZCBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMjY3NAogICogYnkgcHJvdmlkaW5nIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIGZvciBnbGliYyA8IDIuMjEgaW4gdGVybXMgb2Ygb3RoZXIKQEAgLTUxMCw3ICs1MTcsOCBAQAogICB1bnNpZ25lZCBpbnQgdmFsdWU7CiB9IHV2X3NlbWFwaG9yZV90OwogCi0jaWYgZGVmaW5lZChfX0dMSUJDX18pIHx8IHBsYXRmb3JtX25lZWRzX2N1c3RvbV9zZW1hcGhvcmUKKyNpZiAoZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pKSB8fCBcCisgICAgcGxhdGZvcm1fbmVlZHNfY3VzdG9tX3NlbWFwaG9yZQogU1RBVElDX0FTU0VSVChzaXplb2YodXZfc2VtX3QpID49IHNpemVvZih1dl9zZW1hcGhvcmVfdCopKTsKICNlbmRpZgogCkBAIC02MzksNyArNjQ3LDcgQEAKIH0KIAogaW50IHV2X3NlbV9pbml0KHV2X3NlbV90KiBzZW0sIHVuc2lnbmVkIGludCB2YWx1ZSkgewotI2lmZGVmIF9fR0xJQkNfXworI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQogICB1dl9vbmNlKCZnbGliY192ZXJzaW9uX2NoZWNrX29uY2UsIGdsaWJjX3ZlcnNpb25fY2hlY2spOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3R0eS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdHR5LmMKaW5kZXggZGI0NzlkNi4uODJjZDcyMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdHR5LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdHR5LmMKQEAgLTM0LDYgKzM0LDM0IEBACiAjZGVmaW5lIElNQVhCRUwgMAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9fUEFTRV9fKQorLyogT24gSUJNIGkgUEFTRSwgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5IHdpdGggcnVubmluZyBpbnRlcmFjdGl2ZSBwcm9ncmFtcyBpbgorICogYSA1MjUwIGVudmlyb25tZW50LCBpc2F0dHkoKSB3aWxsIHJldHVybiB0cnVlIGZvciB0aGUgc3RkaW4vc3Rkb3V0L3N0ZGVycgorICogc3RyZWFtcyBjcmVhdGVkIGJ5IFFTSC9RUDJURVJNLgorICoKKyAqIEZvciBtb3JlLCBzZWUgZG9jcyBvbiBQQVNFX1NURElPX0lTQVRUWSBpbgorICogaHR0cHM6Ly93d3cuaWJtLmNvbS9zdXBwb3J0L2tub3dsZWRnZWNlbnRlci9zc3dfaWJtX2lfNzQvYXBpcy9wYXNlX2Vudmlyb24uaHRtCisgKgorICogVGhpcyBiZWhhdmlvciBjYXVzZXMgcHJvYmxlbXMgZm9yIE5vZGUgYXMgaXQgZXhwZWN0cyB0aGF0IGlmIGlzYXR0eSgpIHJldHVybnMKKyAqIHRydWUgdGhhdCBUVFkgaW9jdGxzIHdpbGwgYmUgc3VwcG9ydGVkIGJ5IHRoYXQgZmQgKHdoaWNoIGlzIG5vdCBhbgorICogdW5yZWFzb25hYmxlIGV4cGVjdGF0aW9uKSBhbmQgd2hlbiB0aGV5IGRvbid0IGl0IGNyYXNoZXMgd2l0aCBhc3NlcnRpb24KKyAqIGVycm9ycy4KKyAqCisgKiBIZXJlLCB3ZSBjcmVhdGUgb3VyIG93biB2ZXJzaW9uIG9mIGlzYXR0eSgpIHRoYXQgdXNlcyBpb2N0bCgpIHRvIGlkZW50aWZ5CisgKiB3aGV0aGVyIHRoZSBmZCBpcyAqcmVhbGx5KiBhIFRUWSBvciBub3QuCisgKi8KK3N0YXRpYyBpbnQgaXNyZWFsbHlhdHR5KGludCBmaWxlKSB7CisgIGludCByYzsKKyAKKyAgcmMgPSAhaW9jdGwoZmlsZSwgVFhJU0FUVFkgKyAweDgxLCBOVUxMKTsKKyAgaWYgKCFyYyAmJiBlcnJubyAhPSBFQkFERikKKyAgICAgIGVycm5vID0gRU5PVFRZOworCisgIHJldHVybiByYzsKK30KKyNkZWZpbmUgaXNhdHR5KGZkKSBpc3JlYWxseWF0dHkoZmQpCisjZW5kaWYKKwogc3RhdGljIGludCBvcmlnX3Rlcm1pb3NfZmQgPSAtMTsKIHN0YXRpYyBzdHJ1Y3QgdGVybWlvcyBvcmlnX3Rlcm1pb3M7CiBzdGF0aWMgdXZfc3BpbmxvY2tfdCB0ZXJtaW9zX3NwaW5sb2NrID0gVVZfU1BJTkxPQ0tfSU5JVElBTElaRVI7CkBAIC0xMzYsNyArMTY0LDcgQEAKICAgICAgKiBzbGF2ZSBkZXZpY2UuCiAgICAgICovCiAgICAgaWYgKHV2X190dHlfaXNfc2xhdmUoZmQpICYmIHR0eW5hbWVfcihmZCwgcGF0aCwgc2l6ZW9mKHBhdGgpKSA9PSAwKQotICAgICAgciA9IHV2X19vcGVuX2Nsb2V4ZWMocGF0aCwgbW9kZSk7CisgICAgICByID0gdXZfX29wZW5fY2xvZXhlYyhwYXRoLCBtb2RlIHwgT19OT0NUVFkpOwogICAgIGVsc2UKICAgICAgIHIgPSAtMTsKIApAQCAtMzYyLDMgKzM5MCwxMCBAQAogCiAgIHJldHVybiBlcnI7CiB9CisKK3ZvaWQgdXZfdHR5X3NldF92dGVybV9zdGF0ZSh1dl90dHlfdnRlcm1zdGF0ZV90IHN0YXRlKSB7Cit9CisKK2ludCB1dl90dHlfZ2V0X3Z0ZXJtX3N0YXRlKHV2X3R0eV92dGVybXN0YXRlX3QqIHN0YXRlKSB7CisgIHJldHVybiBVVl9FTk9UU1VQOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdWRwLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC91ZHAuYwppbmRleCBiNTc4ZTdiLi4yMWI5MjJmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC91ZHAuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC91ZHAuYwpAQCAtMzIsNiArMzIsOCBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3VuLmg+CiAKKyNkZWZpbmUgVVZfX1VEUF9ER1JBTV9NQVhTSVpFICg2NCAqIDEwMjQpCisKICNpZiBkZWZpbmVkKElQVjZfSk9JTl9HUk9VUCkgJiYgIWRlZmluZWQoSVBWNl9BRERfTUVNQkVSU0hJUCkKICMgZGVmaW5lIElQVjZfQUREX01FTUJFUlNISVAgSVBWNl9KT0lOX0dST1VQCiAjZW5kaWYKQEAgLTQ5LDYgKzUxLDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9tYWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIAorI2lmIEhBVkVfTU1TRworCisjZGVmaW5lIFVWX19NTVNHX01BWFdJRFRIIDIwCisKK3N0YXRpYyBpbnQgdXZfX3VkcF9yZWN2bW1zZyh1dl91ZHBfdCogaGFuZGxlLCB1dl9idWZfdCogYnVmKTsKK3N0YXRpYyB2b2lkIHV2X191ZHBfc2VuZG1tc2codXZfdWRwX3QqIGhhbmRsZSk7CisKK3N0YXRpYyBpbnQgdXZfX3JlY3ZtbXNnX2F2YWlsOworc3RhdGljIGludCB1dl9fc2VuZG1tc2dfYXZhaWw7CitzdGF0aWMgdXZfb25jZV90IG9uY2UgPSBVVl9PTkNFX0lOSVQ7CisKK3N0YXRpYyB2b2lkIHV2X191ZHBfbW1zZ19pbml0KHZvaWQpIHsKKyAgaW50IHJldDsKKyAgaW50IHM7CisgIHMgPSB1dl9fc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICBpZiAocyA8IDApCisgICAgcmV0dXJuOworICByZXQgPSB1dl9fc2VuZG1tc2cocywgTlVMTCwgMCwgMCk7CisgIGlmIChyZXQgPT0gMCB8fCBlcnJubyAhPSBFTk9TWVMpIHsKKyAgICB1dl9fc2VuZG1tc2dfYXZhaWwgPSAxOworICAgIHV2X19yZWN2bW1zZ19hdmFpbCA9IDE7CisgIH0gZWxzZSB7CisgICAgcmV0ID0gdXZfX3JlY3ZtbXNnKHMsIE5VTEwsIDAsIDAsIE5VTEwpOworICAgIGlmIChyZXQgPT0gMCB8fCBlcnJubyAhPSBFTk9TWVMpCisgICAgICB1dl9fcmVjdm1tc2dfYXZhaWwgPSAxOworICB9CisgIHV2X19jbG9zZShzKTsKK30KKworI2VuZGlmCiAKIHZvaWQgdXZfX3VkcF9jbG9zZSh1dl91ZHBfdCogaGFuZGxlKSB7CiAgIHV2X19pb19jbG9zZShoYW5kbGUtPmxvb3AsICZoYW5kbGUtPmlvX3dhdGNoZXIpOwpAQCAtMTQ4LDYgKzE4MCw2NCBAQAogICB9CiB9CiAKKyNpZiBIQVZFX01NU0cKK3N0YXRpYyBpbnQgdXZfX3VkcF9yZWN2bW1zZyh1dl91ZHBfdCogaGFuZGxlLCB1dl9idWZfdCogYnVmKSB7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgcGVlcnNbVVZfX01NU0dfTUFYV0lEVEhdOworICBzdHJ1Y3QgaW92ZWMgaW92W1VWX19NTVNHX01BWFdJRFRIXTsKKyAgc3RydWN0IHV2X19tbXNnaGRyIG1zZ3NbVVZfX01NU0dfTUFYV0lEVEhdOworICBzc2l6ZV90IG5yZWFkOworICB1dl9idWZfdCBjaHVua19idWY7CisgIHNpemVfdCBjaHVua3M7CisgIGludCBmbGFnczsKKyAgc2l6ZV90IGs7CisKKyAgLyogcHJlcGFyZSBzdHJ1Y3R1cmVzIGZvciByZWN2bW1zZyAqLworICBjaHVua3MgPSBidWYtPmxlbiAvIFVWX19VRFBfREdSQU1fTUFYU0laRTsKKyAgaWYgKGNodW5rcyA+IEFSUkFZX1NJWkUoaW92KSkKKyAgICBjaHVua3MgPSBBUlJBWV9TSVpFKGlvdik7CisgIGZvciAoayA9IDA7IGsgPCBjaHVua3M7ICsraykgeworICAgIGlvdltrXS5pb3ZfYmFzZSA9IGJ1Zi0+YmFzZSArIGsgKiBVVl9fVURQX0RHUkFNX01BWFNJWkU7CisgICAgaW92W2tdLmlvdl9sZW4gPSBVVl9fVURQX0RHUkFNX01BWFNJWkU7CisgICAgbXNnc1trXS5tc2dfaGRyLm1zZ19pb3YgPSBpb3YgKyBrOworICAgIG1zZ3Nba10ubXNnX2hkci5tc2dfaW92bGVuID0gMTsKKyAgICBtc2dzW2tdLm1zZ19oZHIubXNnX25hbWUgPSBwZWVycyArIGs7CisgICAgbXNnc1trXS5tc2dfaGRyLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHBlZXJzWzBdKTsKKyAgICBtc2dzW2tdLm1zZ19oZHIubXNnX2NvbnRyb2wgPSBOVUxMOworICAgIG1zZ3Nba10ubXNnX2hkci5tc2dfY29udHJvbGxlbiA9IDA7CisgICAgbXNnc1trXS5tc2dfaGRyLm1zZ19mbGFncyA9IDA7CisgIH0KKworICBkbworICAgIG5yZWFkID0gdXZfX3JlY3ZtbXNnKGhhbmRsZS0+aW9fd2F0Y2hlci5mZCwgbXNncywgY2h1bmtzLCAwLCBOVUxMKTsKKyAgd2hpbGUgKG5yZWFkID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKworICBpZiAobnJlYWQgPCAxKSB7CisgICAgaWYgKG5yZWFkID09IDAgfHwgZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorICAgICAgaGFuZGxlLT5yZWN2X2NiKGhhbmRsZSwgMCwgYnVmLCBOVUxMLCAwKTsKKyAgICBlbHNlCisgICAgICBoYW5kbGUtPnJlY3ZfY2IoaGFuZGxlLCBVVl9fRVJSKGVycm5vKSwgYnVmLCBOVUxMLCAwKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBwYXNzIGVhY2ggY2h1bmsgdG8gdGhlIGFwcGxpY2F0aW9uICovCisgICAgZm9yIChrID0gMDsgayA8IChzaXplX3QpIG5yZWFkICYmIGhhbmRsZS0+cmVjdl9jYiAhPSBOVUxMOyBrKyspIHsKKyAgICAgIGZsYWdzID0gVVZfVURQX01NU0dfQ0hVTks7CisgICAgICBpZiAobXNnc1trXS5tc2dfaGRyLm1zZ19mbGFncyAmIE1TR19UUlVOQykKKyAgICAgICAgZmxhZ3MgfD0gVVZfVURQX1BBUlRJQUw7CisKKyAgICAgIGNodW5rX2J1ZiA9IHV2X2J1Zl9pbml0KGlvdltrXS5pb3ZfYmFzZSwgaW92W2tdLmlvdl9sZW4pOworICAgICAgaGFuZGxlLT5yZWN2X2NiKGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICBtc2dzW2tdLm1zZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgJmNodW5rX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBtc2dzW2tdLm1zZ19oZHIubXNnX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICAgIH0KKworICAgIC8qIG9uZSBsYXN0IGNhbGxiYWNrIHNvIHRoZSBvcmlnaW5hbCBidWZmZXIgaXMgZnJlZWQgKi8KKyAgICBpZiAoaGFuZGxlLT5yZWN2X2NiICE9IE5VTEwpCisgICAgICBoYW5kbGUtPnJlY3ZfY2IoaGFuZGxlLCAwLCBidWYsIE5VTEwsIDApOworICB9CisgIHJldHVybiBucmVhZDsKK30KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCB1dl9fdWRwX3JlY3Ztc2codXZfdWRwX3QqIGhhbmRsZSkgewogICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBwZWVyOwpAQCAtMTY1LDE4ICsyNTUsMzAgQEAKICAgICovCiAgIGNvdW50ID0gMzI7CiAKLSAgbWVtc2V0KCZoLCAwLCBzaXplb2YoaCkpOwotICBoLm1zZ19uYW1lID0gJnBlZXI7Ci0KICAgZG8gewogICAgIGJ1ZiA9IHV2X2J1Zl9pbml0KE5VTEwsIDApOwotICAgIGhhbmRsZS0+YWxsb2NfY2IoKHV2X2hhbmRsZV90KikgaGFuZGxlLCA2NCAqIDEwMjQsICZidWYpOworICAgIGhhbmRsZS0+YWxsb2NfY2IoKHV2X2hhbmRsZV90KikgaGFuZGxlLCBVVl9fVURQX0RHUkFNX01BWFNJWkUsICZidWYpOwogICAgIGlmIChidWYuYmFzZSA9PSBOVUxMIHx8IGJ1Zi5sZW4gPT0gMCkgewogICAgICAgaGFuZGxlLT5yZWN2X2NiKGhhbmRsZSwgVVZfRU5PQlVGUywgJmJ1ZiwgTlVMTCwgMCk7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFzc2VydChidWYuYmFzZSAhPSBOVUxMKTsKIAorI2lmIEhBVkVfTU1TRworICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1VEUF9SRUNWTU1TRykgeworICAgICAgdXZfb25jZSgmb25jZSwgdXZfX3VkcF9tbXNnX2luaXQpOworICAgICAgaWYgKHV2X19yZWN2bW1zZ19hdmFpbCkgeworICAgICAgICBucmVhZCA9IHV2X191ZHBfcmVjdm1tc2coaGFuZGxlLCAmYnVmKTsKKyAgICAgICAgaWYgKG5yZWFkID4gMCkKKyAgICAgICAgICBjb3VudCAtPSBucmVhZDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBtZW1zZXQoJmgsIDAsIHNpemVvZihoKSk7CisgICAgbWVtc2V0KCZwZWVyLCAwLCBzaXplb2YocGVlcikpOworICAgIGgubXNnX25hbWUgPSAmcGVlcjsKICAgICBoLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHBlZXIpOwogICAgIGgubXNnX2lvdiA9ICh2b2lkKikgJmJ1ZjsKICAgICBoLm1zZ19pb3ZsZW4gPSAxOwpAQCAtMTkzLDMzICsyOTUsMTI2IEBACiAgICAgICAgIGhhbmRsZS0+cmVjdl9jYihoYW5kbGUsIFVWX19FUlIoZXJybm8pLCAmYnVmLCBOVUxMLCAwKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7Ci0gICAgICBpZiAoaC5tc2dfbmFtZWxlbiA9PSAwKQotICAgICAgICBhZGRyID0gTlVMTDsKLSAgICAgIGVsc2UKLSAgICAgICAgYWRkciA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSAmcGVlcjsKLQogICAgICAgZmxhZ3MgPSAwOwogICAgICAgaWYgKGgubXNnX2ZsYWdzICYgTVNHX1RSVU5DKQogICAgICAgICBmbGFncyB8PSBVVl9VRFBfUEFSVElBTDsKIAotICAgICAgaGFuZGxlLT5yZWN2X2NiKGhhbmRsZSwgbnJlYWQsICZidWYsIGFkZHIsIGZsYWdzKTsKKyAgICAgIGhhbmRsZS0+cmVjdl9jYihoYW5kbGUsIG5yZWFkLCAmYnVmLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgJnBlZXIsIGZsYWdzKTsKICAgICB9CisgICAgY291bnQtLTsKICAgfQogICAvKiByZWN2X2NiIGNhbGxiYWNrIG1heSBkZWNpZGUgdG8gcGF1c2Ugb3IgY2xvc2UgdGhlIGhhbmRsZSAqLwogICB3aGlsZSAobnJlYWQgIT0gLTEKLSAgICAgICYmIGNvdW50LS0gPiAwCisgICAgICAmJiBjb3VudCA+IDAKICAgICAgICYmIGhhbmRsZS0+aW9fd2F0Y2hlci5mZCAhPSAtMQogICAgICAgJiYgaGFuZGxlLT5yZWN2X2NiICE9IE5VTEwpOwogfQogCisjaWYgSEFWRV9NTVNHCitzdGF0aWMgdm9pZCB1dl9fdWRwX3NlbmRtbXNnKHV2X3VkcF90KiBoYW5kbGUpIHsKKyAgdXZfdWRwX3NlbmRfdCogcmVxOworICBzdHJ1Y3QgdXZfX21tc2doZHIgaFtVVl9fTU1TR19NQVhXSURUSF07CisgIHN0cnVjdCB1dl9fbW1zZ2hkciAqcDsKKyAgUVVFVUUqIHE7CisgIHNzaXplX3QgbnBrdHM7CisgIHNpemVfdCBwa3RzOworICBzaXplX3QgaTsKKworICBpZiAoUVVFVUVfRU1QVFkoJmhhbmRsZS0+d3JpdGVfcXVldWUpKQorICAgIHJldHVybjsKKword3JpdGVfcXVldWVfZHJhaW46CisgIGZvciAocGt0cyA9IDAsIHEgPSBRVUVVRV9IRUFEKCZoYW5kbGUtPndyaXRlX3F1ZXVlKTsKKyAgICAgICBwa3RzIDwgVVZfX01NU0dfTUFYV0lEVEggJiYgcSAhPSAmaGFuZGxlLT53cml0ZV9xdWV1ZTsKKyAgICAgICArK3BrdHMsIHEgPSBRVUVVRV9IRUFEKHEpKSB7CisgICAgYXNzZXJ0KHEgIT0gTlVMTCk7CisgICAgcmVxID0gUVVFVUVfREFUQShxLCB1dl91ZHBfc2VuZF90LCBxdWV1ZSk7CisgICAgYXNzZXJ0KHJlcSAhPSBOVUxMKTsKKworICAgIHAgPSAmaFtwa3RzXTsKKyAgICBtZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CisgICAgaWYgKHJlcS0+YWRkci5zc19mYW1pbHkgPT0gQUZfVU5TUEVDKSB7CisgICAgICBwLT5tc2dfaGRyLm1zZ19uYW1lID0gTlVMTDsKKyAgICAgIHAtPm1zZ19oZHIubXNnX25hbWVsZW4gPSAwOworICAgIH0gZWxzZSB7CisgICAgICBwLT5tc2dfaGRyLm1zZ19uYW1lID0gJnJlcS0+YWRkcjsKKyAgICAgIGlmIChyZXEtPmFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICBwLT5tc2dfaGRyLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworICAgICAgZWxzZSBpZiAocmVxLT5hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICBwLT5tc2dfaGRyLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgICBlbHNlIGlmIChyZXEtPmFkZHIuc3NfZmFtaWx5ID09IEFGX1VOSVgpCisgICAgICAgIHAtPm1zZ19oZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKKyAgICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoMCAmJiAidW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbHkiKTsKKyAgICAgICAgYWJvcnQoKTsKKyAgICAgIH0KKyAgICB9CisgICAgaFtwa3RzXS5tc2dfaGRyLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjKikgcmVxLT5idWZzOworICAgIGhbcGt0c10ubXNnX2hkci5tc2dfaW92bGVuID0gcmVxLT5uYnVmczsKKyAgfQorCisgIGRvCisgICAgbnBrdHMgPSB1dl9fc2VuZG1tc2coaGFuZGxlLT5pb193YXRjaGVyLmZkLCBoLCBwa3RzLCAwKTsKKyAgd2hpbGUgKG5wa3RzID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKworICBpZiAobnBrdHMgPCAxKSB7CisgICAgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSyB8fCBlcnJubyA9PSBFTk9CVUZTKQorICAgICAgcmV0dXJuOworICAgIGZvciAoaSA9IDAsIHEgPSBRVUVVRV9IRUFEKCZoYW5kbGUtPndyaXRlX3F1ZXVlKTsKKyAgICAgICAgIGkgPCBwa3RzICYmIHEgIT0gJmhhbmRsZS0+d3JpdGVfcXVldWU7CisgICAgICAgICArK2ksIHEgPSBRVUVVRV9IRUFEKHEpKSB7CisgICAgICBhc3NlcnQocSAhPSBOVUxMKTsKKyAgICAgIHJlcSA9IFFVRVVFX0RBVEEocSwgdXZfdWRwX3NlbmRfdCwgcXVldWUpOworICAgICAgYXNzZXJ0KHJlcSAhPSBOVUxMKTsKKworICAgICAgcmVxLT5zdGF0dXMgPSBVVl9fRVJSKGVycm5vKTsKKyAgICAgIFFVRVVFX1JFTU9WRSgmcmVxLT5xdWV1ZSk7CisgICAgICBRVUVVRV9JTlNFUlRfVEFJTCgmaGFuZGxlLT53cml0ZV9jb21wbGV0ZWRfcXVldWUsICZyZXEtPnF1ZXVlKTsKKyAgICB9CisgICAgdXZfX2lvX2ZlZWQoaGFuZGxlLT5sb29wLCAmaGFuZGxlLT5pb193YXRjaGVyKTsKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKGkgPSAwLCBxID0gUVVFVUVfSEVBRCgmaGFuZGxlLT53cml0ZV9xdWV1ZSk7CisgICAgICAgaSA8IHBrdHMgJiYgcSAhPSAmaGFuZGxlLT53cml0ZV9xdWV1ZTsKKyAgICAgICArK2ksIHEgPSBRVUVVRV9IRUFEKCZoYW5kbGUtPndyaXRlX3F1ZXVlKSkgeworICAgIGFzc2VydChxICE9IE5VTEwpOworICAgIHJlcSA9IFFVRVVFX0RBVEEocSwgdXZfdWRwX3NlbmRfdCwgcXVldWUpOworICAgIGFzc2VydChyZXEgIT0gTlVMTCk7CisKKyAgICByZXEtPnN0YXR1cyA9IHJlcS0+YnVmc1swXS5sZW47CisKKyAgICAvKiBTZW5kaW5nIGEgZGF0YWdyYW0gaXMgYW4gYXRvbWljIG9wZXJhdGlvbjogZWl0aGVyIGFsbCBkYXRhCisgICAgICogaXMgd3JpdHRlbiBvciBub3RoaW5nIGlzIChhbmQgRU1TR1NJWkUgaXMgcmFpc2VkKS4gVGhhdCBpcworICAgICAqIHdoeSB3ZSBkb24ndCBoYW5kbGUgcGFydGlhbCB3cml0ZXMuIEp1c3QgcG9wIHRoZSByZXF1ZXN0CisgICAgICogb2ZmIHRoZSB3cml0ZSBxdWV1ZSBhbmQgb250byB0aGUgY29tcGxldGVkIHF1ZXVlLCBkb25lLgorICAgICAqLworICAgIFFVRVVFX1JFTU9WRSgmcmVxLT5xdWV1ZSk7CisgICAgUVVFVUVfSU5TRVJUX1RBSUwoJmhhbmRsZS0+d3JpdGVfY29tcGxldGVkX3F1ZXVlLCAmcmVxLT5xdWV1ZSk7CisgIH0KKworICAvKiBjb3VsZG4ndCBiYXRjaCBldmVyeXRoaW5nLCBjb250aW51ZSBzZW5kaW5nIChqdW1wIHRvIGF2b2lkIHN0YWNrIGdyb3d0aCkgKi8KKyAgaWYgKCFRVUVVRV9FTVBUWSgmaGFuZGxlLT53cml0ZV9xdWV1ZSkpCisgICAgZ290byB3cml0ZV9xdWV1ZV9kcmFpbjsKKyAgdXZfX2lvX2ZlZWQoaGFuZGxlLT5sb29wLCAmaGFuZGxlLT5pb193YXRjaGVyKTsKKyAgcmV0dXJuOworfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHV2X191ZHBfc2VuZG1zZyh1dl91ZHBfdCogaGFuZGxlKSB7CiAgIHV2X3VkcF9zZW5kX3QqIHJlcTsKLSAgUVVFVUUqIHE7CiAgIHN0cnVjdCBtc2doZHIgaDsKKyAgUVVFVUUqIHE7CiAgIHNzaXplX3Qgc2l6ZTsKIAorI2lmIEhBVkVfTU1TRworICB1dl9vbmNlKCZvbmNlLCB1dl9fdWRwX21tc2dfaW5pdCk7CisgIGlmICh1dl9fc2VuZG1tc2dfYXZhaWwpIHsKKyAgICB1dl9fdWRwX3NlbmRtbXNnKGhhbmRsZSk7CisgICAgcmV0dXJuOworICB9CisjZW5kaWYKKwogICB3aGlsZSAoIVFVRVVFX0VNUFRZKCZoYW5kbGUtPndyaXRlX3F1ZXVlKSkgewogICAgIHEgPSBRVUVVRV9IRUFEKCZoYW5kbGUtPndyaXRlX3F1ZXVlKTsKICAgICBhc3NlcnQocSAhPSBOVUxMKTsKQEAgLTI2OSw3ICs0NjQsNiBAQAogICB9CiB9CiAKLQogLyogT24gdGhlIEJTRHMsIFNPX1JFVVNFUE9SVCBpbXBsaWVzIFNPX1JFVVNFQUREUiBidXQgd2l0aCBzb21lIGFkZGl0aW9uYWwKICAqIHJlZmluZW1lbnRzIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBtdWx0aWNhc3QuCiAgKgpAQCAtNjU5LDI2ICs4NTMsMTExIEBACiB9CiAKIAotaW50IHV2X3VkcF9pbml0X2V4KHV2X2xvb3BfdCogbG9vcCwgdXZfdWRwX3QqIGhhbmRsZSwgdW5zaWduZWQgaW50IGZsYWdzKSB7Ci0gIGludCBkb21haW47CisjaWYgIWRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fQU5EUk9JRF9fKQorc3RhdGljIGludCB1dl9fdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcDQodXZfdWRwX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiogbXVsdGljYXN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiogc291cmNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9tZW1iZXJzaGlwIG1lbWJlcnNoaXApIHsKKyAgc3RydWN0IGlwX21yZXFfc291cmNlIG1yZXE7CisgIGludCBvcHRuYW1lOwogICBpbnQgZXJyOworCisgIGVyciA9IHV2X191ZHBfbWF5YmVfZGVmZXJyZWRfYmluZChoYW5kbGUsIEFGX0lORVQsIFVWX1VEUF9SRVVTRUFERFIpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisKKyAgbWVtc2V0KCZtcmVxLCAwLCBzaXplb2YobXJlcSkpOworCisgIGlmIChpbnRlcmZhY2VfYWRkciAhPSBOVUxMKSB7CisgICAgZXJyID0gdXZfaW5ldF9wdG9uKEFGX0lORVQsIGludGVyZmFjZV9hZGRyLCAmbXJlcS5pbXJfaW50ZXJmYWNlLnNfYWRkcik7CisgICAgaWYgKGVycikKKyAgICAgIHJldHVybiBlcnI7CisgIH0gZWxzZSB7CisgICAgbXJlcS5pbXJfaW50ZXJmYWNlLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICB9CisKKyAgbXJlcS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG11bHRpY2FzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHI7CisgIG1yZXEuaW1yX3NvdXJjZWFkZHIuc19hZGRyID0gc291cmNlX2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKworICBpZiAobWVtYmVyc2hpcCA9PSBVVl9KT0lOX0dST1VQKQorICAgIG9wdG5hbWUgPSBJUF9BRERfU09VUkNFX01FTUJFUlNISVA7CisgIGVsc2UgaWYgKG1lbWJlcnNoaXAgPT0gVVZfTEVBVkVfR1JPVVApCisgICAgb3B0bmFtZSA9IElQX0RST1BfU09VUkNFX01FTUJFUlNISVA7CisgIGVsc2UKKyAgICByZXR1cm4gVVZfRUlOVkFMOworCisgIGlmIChzZXRzb2Nrb3B0KGhhbmRsZS0+aW9fd2F0Y2hlci5mZCwKKyAgICAgICAgICAgICAgICAgSVBQUk9UT19JUCwKKyAgICAgICAgICAgICAgICAgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgJm1yZXEsCisgICAgICAgICAgICAgICAgIHNpemVvZihtcmVxKSkpIHsKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHV2X191ZHBfc2V0X3NvdXJjZV9tZW1iZXJzaGlwNih1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiogbXVsdGljYXN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYqIHNvdXJjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfbWVtYmVyc2hpcCBtZW1iZXJzaGlwKSB7CisgIHN0cnVjdCBncm91cF9zb3VyY2VfcmVxIG1yZXE7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisgIGludCBvcHRuYW1lOworICBpbnQgZXJyOworCisgIGVyciA9IHV2X191ZHBfbWF5YmVfZGVmZXJyZWRfYmluZChoYW5kbGUsIEFGX0lORVQ2LCBVVl9VRFBfUkVVU0VBRERSKTsKKyAgaWYgKGVycikKKyAgICByZXR1cm4gZXJyOworCisgIG1lbXNldCgmbXJlcSwgMCwgc2l6ZW9mKG1yZXEpKTsKKworICBpZiAoaW50ZXJmYWNlX2FkZHIgIT0gTlVMTCkgeworICAgIGVyciA9IHV2X2lwNl9hZGRyKGludGVyZmFjZV9hZGRyLCAwLCAmYWRkcjYpOworICAgIGlmIChlcnIpCisgICAgICByZXR1cm4gZXJyOworICAgIG1yZXEuZ3NyX2ludGVyZmFjZSA9IGFkZHI2LnNpbjZfc2NvcGVfaWQ7CisgIH0gZWxzZSB7CisgICAgbXJlcS5nc3JfaW50ZXJmYWNlID0gMDsKKyAgfQorCisgIG1lbWNweSgmbXJlcS5nc3JfZ3JvdXAsIG11bHRpY2FzdF9hZGRyLCBzaXplb2YobXJlcS5nc3JfZ3JvdXApKTsKKyAgbWVtY3B5KCZtcmVxLmdzcl9zb3VyY2UsIHNvdXJjZV9hZGRyLCBzaXplb2YobXJlcS5nc3Jfc291cmNlKSk7CisKKyAgaWYgKG1lbWJlcnNoaXAgPT0gVVZfSk9JTl9HUk9VUCkKKyAgICBvcHRuYW1lID0gTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVA7CisgIGVsc2UgaWYgKG1lbWJlcnNoaXAgPT0gVVZfTEVBVkVfR1JPVVApCisgICAgb3B0bmFtZSA9IE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUDsKKyAgZWxzZQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgaWYgKHNldHNvY2tvcHQoaGFuZGxlLT5pb193YXRjaGVyLmZkLAorICAgICAgICAgICAgICAgICBJUFBST1RPX0lQVjYsCisgICAgICAgICAgICAgICAgIG9wdG5hbWUsCisgICAgICAgICAgICAgICAgICZtcmVxLAorICAgICAgICAgICAgICAgICBzaXplb2YobXJlcSkpKSB7CisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCitpbnQgdXZfX3VkcF9pbml0X2V4KHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgdXZfdWRwX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGludCBkb21haW4pIHsKICAgaW50IGZkOwogCi0gIC8qIFVzZSB0aGUgbG93ZXIgOCBiaXRzIGZvciB0aGUgZG9tYWluICovCi0gIGRvbWFpbiA9IGZsYWdzICYgMHhGRjsKLSAgaWYgKGRvbWFpbiAhPSBBRl9JTkVUICYmIGRvbWFpbiAhPSBBRl9JTkVUNiAmJiBkb21haW4gIT0gQUZfVU5TUEVDKQotICAgIHJldHVybiBVVl9FSU5WQUw7Ci0KLSAgaWYgKGZsYWdzICYgfjB4RkYpCi0gICAgcmV0dXJuIFVWX0VJTlZBTDsKLQorICBmZCA9IC0xOwogICBpZiAoZG9tYWluICE9IEFGX1VOU1BFQykgewotICAgIGVyciA9IHV2X19zb2NrZXQoZG9tYWluLCBTT0NLX0RHUkFNLCAwKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgZmQgPSBlcnI7Ci0gIH0gZWxzZSB7Ci0gICAgZmQgPSAtMTsKKyAgICBmZCA9IHV2X19zb2NrZXQoZG9tYWluLCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgcmV0dXJuIGZkOwogICB9CiAKICAgdXZfX2hhbmRsZV9pbml0KGxvb3AsICh1dl9oYW5kbGVfdCopaGFuZGxlLCBVVl9VRFApOwpAQCAtNjk0LDExICs5NzMsNiBAQAogfQogCiAKLWludCB1dl91ZHBfaW5pdCh1dl9sb29wX3QqIGxvb3AsIHV2X3VkcF90KiBoYW5kbGUpIHsKLSAgcmV0dXJuIHV2X3VkcF9pbml0X2V4KGxvb3AsIGhhbmRsZSwgQUZfVU5TUEVDKTsKLX0KLQotCiBpbnQgdXZfdWRwX29wZW4odXZfdWRwX3QqIGhhbmRsZSwgdXZfb3Nfc29ja190IHNvY2spIHsKICAgaW50IGVycjsKIApAQCAtNzQ4LDExICsxMDIyLDYwIEBACiAgIH0KIH0KIAorCitpbnQgdXZfdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcCh1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbXVsdGljYXN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfbWVtYmVyc2hpcCBtZW1iZXJzaGlwKSB7CisjaWYgIWRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fQU5EUk9JRF9fKQorICBpbnQgZXJyOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBtY2FzdF9hZGRyOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4qIG1jYXN0X2FkZHI0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBtY2FzdF9hZGRyNjsKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3JjX2FkZHI7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiogc3JjX2FkZHI0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBzcmNfYWRkcjY7CisKKyAgbWNhc3RfYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luKikmbWNhc3RfYWRkcjsKKyAgbWNhc3RfYWRkcjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiopJm1jYXN0X2FkZHI7CisgIHNyY19hZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSZzcmNfYWRkcjsKKyAgc3JjX2FkZHI2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYqKSZzcmNfYWRkcjsKKworICBlcnIgPSB1dl9pcDRfYWRkcihtdWx0aWNhc3RfYWRkciwgMCwgbWNhc3RfYWRkcjQpOworICBpZiAoZXJyKSB7CisgICAgZXJyID0gdXZfaXA2X2FkZHIobXVsdGljYXN0X2FkZHIsIDAsIG1jYXN0X2FkZHI2KTsKKyAgICBpZiAoZXJyKQorICAgICAgcmV0dXJuIGVycjsKKyAgICBlcnIgPSB1dl9pcDZfYWRkcihzb3VyY2VfYWRkciwgMCwgc3JjX2FkZHI2KTsKKyAgICBpZiAoZXJyKQorICAgICAgcmV0dXJuIGVycjsKKyAgICByZXR1cm4gdXZfX3VkcF9zZXRfc291cmNlX21lbWJlcnNoaXA2KGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jYXN0X2FkZHI2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWRkcjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJzaGlwKTsKKyAgfQorCisgIGVyciA9IHV2X2lwNF9hZGRyKHNvdXJjZV9hZGRyLCAwLCBzcmNfYWRkcjQpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisgIHJldHVybiB1dl9fdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcDQoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jYXN0X2FkZHI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hZGRyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJzaGlwKTsKKyNlbHNlCisgIHJldHVybiBVVl9FTk9TWVM7CisjZW5kaWYKK30KKworCiBzdGF0aWMgaW50IHV2X19zZXRzb2Nrb3B0KHV2X3VkcF90KiBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbjYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IHNpemUpIHsKICAgaW50IHI7CiAKICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfSVBWNikKQEAgLTg3NSw3ICsxMTk4LDcgQEAKICAqIGFuZCB1c2UgdGhlIGdlbmVyYWwgdXZfX3NldHNvY2tvcHRfbWF5YmVfY2hhciBjYWxsIG90aGVyd2lzZS4KICAqLwogI2lmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgXAotICAgIGRlZmluZWQoX19NVlNfXykgCisgICAgZGVmaW5lZChfX01WU19fKQogICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9JUFY2KQogICAgIHJldHVybiB1dl9fc2V0c29ja29wdChoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX01VTFRJQ0FTVF9MT09QLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3V2LWNvbW1vbi5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3V2LWNvbW1vbi5jCmluZGV4IGY0ODUzZDYuLjJmY2JlM2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91di1jb21tb24uYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdXYtY29tbW9uLmMKQEAgLTEwMCw2ICsxMDAsMTcgQEAKICAgcmV0dXJuIE5VTEw7CiB9CiAKK3ZvaWQqIHV2X19yZWFsbG9jZih2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CisgIHZvaWQqIG5ld3B0cjsKKworICBuZXdwdHIgPSB1dl9fcmVhbGxvYyhwdHIsIHNpemUpOworICBpZiAobmV3cHRyID09IE5VTEwpCisgICAgaWYgKHNpemUgPiAwKQorICAgICAgdXZfX2ZyZWUocHRyKTsKKworICByZXR1cm4gbmV3cHRyOworfQorCiBpbnQgdXZfcmVwbGFjZV9hbGxvY2F0b3IodXZfbWFsbG9jX2Z1bmMgbWFsbG9jX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfcmVhbGxvY19mdW5jIHJlYWxsb2NfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9jYWxsb2NfZnVuYyBjYWxsb2NfZnVuYywKQEAgLTIxMiw2ICsyMjMsOSBAQAogICBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKCphZGRyKSk7CiAgIGFkZHItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworI2lmZGVmIFNJTjZfTEVOCisgIGFkZHItPnNpbl9sZW4gPSBzaXplb2YoKmFkZHIpOworI2VuZGlmCiAgIHJldHVybiB1dl9pbmV0X3B0b24oQUZfSU5FVCwgaXAsICYoYWRkci0+c2luX2FkZHIuc19hZGRyKSk7CiB9CiAKQEAgLTI4MCw2ICsyOTQsMzYgQEAKIH0KIAogCitpbnQgdXZfdWRwX2luaXRfZXgodXZfbG9vcF90KiBsb29wLCB1dl91ZHBfdCogaGFuZGxlLCB1bnNpZ25lZCBmbGFncykgeworICB1bnNpZ25lZCBleHRyYV9mbGFnczsKKyAgaW50IGRvbWFpbjsKKyAgaW50IHJjOworCisgIC8qIFVzZSB0aGUgbG93ZXIgOCBiaXRzIGZvciB0aGUgZG9tYWluLiAqLworICBkb21haW4gPSBmbGFncyAmIDB4RkY7CisgIGlmIChkb21haW4gIT0gQUZfSU5FVCAmJiBkb21haW4gIT0gQUZfSU5FVDYgJiYgZG9tYWluICE9IEFGX1VOU1BFQykKKyAgICByZXR1cm4gVVZfRUlOVkFMOworCisgIC8qIFVzZSB0aGUgaGlnaGVyIGJpdHMgZm9yIGV4dHJhIGZsYWdzLiAqLworICBleHRyYV9mbGFncyA9IGZsYWdzICYgfjB4RkY7CisgIGlmIChleHRyYV9mbGFncyAmIH5VVl9VRFBfUkVDVk1NU0cpCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICByYyA9IHV2X191ZHBfaW5pdF9leChsb29wLCBoYW5kbGUsIGZsYWdzLCBkb21haW4pOworCisgIGlmIChyYyA9PSAwKQorICAgIGlmIChleHRyYV9mbGFncyAmIFVWX1VEUF9SRUNWTU1TRykKKyAgICAgIGhhbmRsZS0+ZmxhZ3MgfD0gVVZfSEFORExFX1VEUF9SRUNWTU1TRzsKKworICByZXR1cm4gcmM7Cit9CisKKworaW50IHV2X3VkcF9pbml0KHV2X2xvb3BfdCogbG9vcCwgdXZfdWRwX3QqIGhhbmRsZSkgeworICByZXR1cm4gdXZfdWRwX2luaXRfZXgobG9vcCwgaGFuZGxlLCBBRl9VTlNQRUMpOworfQorCisKIGludCB1dl91ZHBfYmluZCh1dl91ZHBfdCogaGFuZGxlLAogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciogYWRkciwKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsKQEAgLTc4OCwzICs4MzIsNDAgQEAKICAgaWYgKGxvb3AgIT0gZGVmYXVsdF9sb29wKQogICAgIHV2X19mcmVlKGxvb3ApOwogfQorCisKK3ZvaWQgdXZfb3NfZnJlZV9lbnZpcm9uKHV2X2Vudl9pdGVtX3QqIGVudml0ZW1zLCBpbnQgY291bnQpIHsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICB1dl9fZnJlZShlbnZpdGVtc1tpXS5uYW1lKTsKKyAgfQorCisgIHV2X19mcmVlKGVudml0ZW1zKTsKK30KKworCit2b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKKworICB1dl9fZnJlZShjcHVfaW5mb3MpOworfQorCisKKyNpZmRlZiBfX0dOVUNfXyAgLyogQWxzbyBjb3ZlcnMgX19jbGFuZ19fIGFuZCBfX0lOVEVMX0NPTVBJTEVSLiAqLworX19hdHRyaWJ1dGVfXygoZGVzdHJ1Y3RvcikpCisjZW5kaWYKK3ZvaWQgdXZfbGlicmFyeV9zaHV0ZG93bih2b2lkKSB7CisgIHN0YXRpYyBpbnQgd2FzX3NodXRkb3duOworCisgIGlmICh3YXNfc2h1dGRvd24pCisgICAgcmV0dXJuOworCisgIHV2X19wcm9jZXNzX3RpdGxlX2NsZWFudXAoKTsKKyAgdXZfX3NpZ25hbF9jbGVhbnVwKCk7CisgIHV2X190aHJlYWRwb29sX2NsZWFudXAoKTsKKyAgd2FzX3NodXRkb3duID0gMTsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91di1jb21tb24uaCBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91di1jb21tb24uaAppbmRleCBmNzg4MTYxLi4wYjBmNWY4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdXYtY29tbW9uLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3V2LWNvbW1vbi5oCkBAIC0xMDQsNiArMTA0LDcgQEAKICAgLyogT25seSB1c2VkIGJ5IHV2X3VkcF90IGhhbmRsZXMuICovCiAgIFVWX0hBTkRMRV9VRFBfUFJPQ0VTU0lORyAgICAgICAgICAgICAgPSAweDAxMDAwMDAwLAogICBVVl9IQU5ETEVfVURQX0NPTk5FQ1RFRCAgICAgICAgICAgICAgID0gMHgwMjAwMDAwMCwKKyAgVVZfSEFORExFX1VEUF9SRUNWTU1TRyAgICAgICAgICAgICAgICA9IDB4MDQwMDAwMDAsCiAKICAgLyogT25seSB1c2VkIGJ5IHV2X3BpcGVfdCBoYW5kbGVzLiAqLwogICBVVl9IQU5ETEVfTk9OX09WRVJMQVBQRURfUElQRSAgICAgICAgID0gMHgwMTAwMDAwMCwKQEAgLTEzOCw2ICsxMzksMTEgQEAKICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWRkcmxlbiwKICAgICAgICAgICAgICAgICAgICB1dl9jb25uZWN0X2NiIGNiKTsKIAoraW50IHV2X191ZHBfaW5pdF9leCh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgICAgIHV2X3VkcF90KiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBpbnQgZG9tYWluKTsKKwogaW50IHV2X191ZHBfYmluZCh1dl91ZHBfdCogaGFuZGxlLAogICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqIGFkZHIsCiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgYWRkcmxlbiwKQEAgLTIwMCw2ICsyMDYsMTAgQEAKIHZvaWQgdXZfX3J1bl90aW1lcnModXZfbG9vcF90KiBsb29wKTsKIHZvaWQgdXZfX3RpbWVyX2Nsb3NlKHV2X3RpbWVyX3QqIGhhbmRsZSk7CiAKK3ZvaWQgdXZfX3Byb2Nlc3NfdGl0bGVfY2xlYW51cCh2b2lkKTsKK3ZvaWQgdXZfX3NpZ25hbF9jbGVhbnVwKHZvaWQpOwordm9pZCB1dl9fdGhyZWFkcG9vbF9jbGVhbnVwKHZvaWQpOworCiAjZGVmaW5lIHV2X19oYXNfYWN0aXZlX3JlcXMobG9vcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgobG9vcCktPmFjdGl2ZV9yZXFzLmNvdW50ID4gMCkKIApAQCAtMzIyLDUgKzMzMiw2IEBACiB2b2lkKiB1dl9fbWFsbG9jKHNpemVfdCBzaXplKTsKIHZvaWQgdXZfX2ZyZWUodm9pZCogcHRyKTsKIHZvaWQqIHV2X19yZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpOwordm9pZCogdXZfX3JlYWxsb2NmKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpOwogCiAjZW5kaWYgLyogVVZfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2NvcmUuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vY29yZS5jCmluZGV4IGU5ZDBhNTguLjk5NzRhMTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vY29yZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vY29yZS5jCkBAIC0zMjEsOCArMzIxLDEzIEBACiAKICAgdXZfX2xvb3BzX3JlbW92ZShsb29wKTsKIAotICAvKiBjbG9zZSB0aGUgYXN5bmMgaGFuZGxlIHdpdGhvdXQgbmVlZGluZyBhbiBleHRyYSBsb29wIGl0ZXJhdGlvbiAqLwotICBhc3NlcnQoIWxvb3AtPndxX2FzeW5jLmFzeW5jX3NlbnQpOworICAvKiBDbG9zZSB0aGUgYXN5bmMgaGFuZGxlIHdpdGhvdXQgbmVlZGluZyBhbiBleHRyYSBsb29wIGl0ZXJhdGlvbi4KKyAgICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgbWVzc2FnZSwgYnV0IHdlJ3JlIGp1c3QgZ29pbmcgdG8gZGVzdHJveSB0aGUgSU9DUAorICAgKiBzb29uLCBzbyB3ZSBjYW4ganVzdCBkaXNjYXJkIGl0IG5vdyB3aXRob3V0IHRoZSB1c3VhbCByaXNrIG9mIGEgZ2V0dGluZworICAgKiBhbm90aGVyIG5vdGlmaWNhdGlvbiBmcm9tIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNFeCBhZnRlciBjYWxsaW5nIHRoZQorICAgKiBjbG9zZV9jYiAod2hpY2ggd2UgYWxzbyBza2lwIGRlZmluaW5nKS4gV2UnbGwgYXNzZXJ0IGxhdGVyIHRoYXQgcXVldWUgd2FzCisgICAqIGFjdHVhbGx5IGVtcHR5IGFuZCBhbGwgcmVxcyBoYW5kbGVkLiAqLworICBsb29wLT53cV9hc3luYy5hc3luY19zZW50ID0gMDsKICAgbG9vcC0+d3FfYXN5bmMuY2xvc2VfY2IgPSBOVUxMOwogICB1dl9faGFuZGxlX2Nsb3NpbmcoJmxvb3AtPndxX2FzeW5jKTsKICAgdXZfX2hhbmRsZV9jbG9zZSgmbG9vcC0+d3FfYXN5bmMpOwpAQCAtNDQ0LDEyICs0NDksMTIgQEAKICAgdGltZW91dF90aW1lID0gbG9vcC0+dGltZSArIHRpbWVvdXQ7CiAKICAgZm9yIChyZXBlYXQgPSAwOyA7IHJlcGVhdCsrKSB7Ci0gICAgc3VjY2VzcyA9IEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNFeChsb29wLT5pb2NwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHBlZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKG92ZXJsYXBwZWRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7CisgICAgc3VjY2VzcyA9IHBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzRXgobG9vcC0+aW9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGFwcGVkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKG92ZXJsYXBwZWRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7CiAKICAgICBpZiAoc3VjY2VzcykgewogICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZXJyb3IuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZXJyb3IuYwppbmRleCAyNDkyNGJhLi4zZWM5ODRjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2Vycm9yLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9lcnJvci5jCkBAIC03Miw2ICs3Miw3IEBACiAgICAgY2FzZSBFUlJPUl9OT0FDQ0VTUzogICAgICAgICAgICAgICAgICAgIHJldHVybiBVVl9FQUNDRVM7CiAgICAgY2FzZSBXU0FFQUNDRVM6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVVl9FQUNDRVM7CiAgICAgY2FzZSBFUlJPUl9FTEVWQVRJT05fUkVRVUlSRUQ6ICAgICAgICAgIHJldHVybiBVVl9FQUNDRVM7CisgICAgY2FzZSBFUlJPUl9DQU5UX0FDQ0VTU19GSUxFOiAgICAgICAgICAgIHJldHVybiBVVl9FQUNDRVM7CiAgICAgY2FzZSBFUlJPUl9BRERSRVNTX0FMUkVBRFlfQVNTT0NJQVRFRDogIHJldHVybiBVVl9FQUREUklOVVNFOwogICAgIGNhc2UgV1NBRUFERFJJTlVTRTogICAgICAgICAgICAgICAgICAgICByZXR1cm4gVVZfRUFERFJJTlVTRTsKICAgICBjYXNlIFdTQUVBRERSTk9UQVZBSUw6ICAgICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VBRERSTk9UQVZBSUw7CkBAIC0xMzIsNiArMTMzLDcgQEAKICAgICBjYXNlIFdTQUVOT0JVRlM6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VOT0JVRlM7CiAgICAgY2FzZSBFUlJPUl9CQURfUEFUSE5BTUU6ICAgICAgICAgICAgICAgIHJldHVybiBVVl9FTk9FTlQ7CiAgICAgY2FzZSBFUlJPUl9ESVJFQ1RPUlk6ICAgICAgICAgICAgICAgICAgIHJldHVybiBVVl9FTk9FTlQ7CisgICAgY2FzZSBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5EOiAgICAgICAgICAgIHJldHVybiBVVl9FTk9FTlQ7CiAgICAgY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDogICAgICAgICAgICAgIHJldHVybiBVVl9FTk9FTlQ7CiAgICAgY2FzZSBFUlJPUl9JTlZBTElEX05BTUU6ICAgICAgICAgICAgICAgIHJldHVybiBVVl9FTk9FTlQ7CiAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0RSSVZFOiAgICAgICAgICAgICAgIHJldHVybiBVVl9FTk9FTlQ7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ZzLWV2ZW50LmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ZzLWV2ZW50LmMKaW5kZXggYWNmOGUxMS4uMDEyNmM1ZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9mcy1ldmVudC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMtZXZlbnQuYwpAQCAtODMsNiArODMsNyBAQAogc3RhdGljIGludCB1dl9zcGxpdF9wYXRoKGNvbnN0IFdDSEFSKiBmaWxlbmFtZSwgV0NIQVIqKiBkaXIsCiAgICAgV0NIQVIqKiBmaWxlKSB7CiAgIHNpemVfdCBsZW4sIGk7CisgIERXT1JEIGRpcl9sZW47CiAKICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKICAgICBpZiAoZGlyICE9IE5VTEwpCkBAIC05NywxMiArOTgsMTYgQEAKIAogICBpZiAoaSA9PSAwKSB7CiAgICAgaWYgKGRpcikgewotICAgICAgKmRpciA9IChXQ0hBUiopdXZfX21hbGxvYygoTUFYX1BBVEggKyAxKSAqIHNpemVvZihXQ0hBUikpOworICAgICAgZGlyX2xlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKDAsIE5VTEwpOworICAgICAgaWYgKGRpcl9sZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICAqZGlyID0gKFdDSEFSKil1dl9fbWFsbG9jKGRpcl9sZW4gKiBzaXplb2YoV0NIQVIpKTsKICAgICAgIGlmICghKmRpcikgewogICAgICAgICB1dl9mYXRhbF9lcnJvcihFUlJPUl9PVVRPRk1FTU9SWSwgInV2X19tYWxsb2MiKTsKICAgICAgIH0KIAotICAgICAgaWYgKCFHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgKmRpcikpIHsKKyAgICAgIGlmICghR2V0Q3VycmVudERpcmVjdG9yeVcoZGlyX2xlbiwgKmRpcikpIHsKICAgICAgICAgdXZfX2ZyZWUoKmRpcik7CiAgICAgICAgICpkaXIgPSBOVUxMOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xNTUsOSArMTYwLDExIEBACiAgIGludCBuYW1lX3NpemUsIGlzX3BhdGhfZGlyLCBzaXplOwogICBEV09SRCBhdHRyLCBsYXN0X2Vycm9yOwogICBXQ0hBUiogZGlyID0gTlVMTCwgKmRpcl90b193YXRjaCwgKnBhdGh3ID0gTlVMTDsKLSAgV0NIQVIgc2hvcnRfcGF0aF9idWZmZXJbTUFYX1BBVEhdOworICBEV09SRCBzaG9ydF9wYXRoX2J1ZmZlcl9sZW47CisgIFdDSEFSICpzaG9ydF9wYXRoX2J1ZmZlcjsKICAgV0NIQVIqIHNob3J0X3BhdGgsICpsb25nX3BhdGg7CiAKKyAgc2hvcnRfcGF0aCA9IE5VTEw7CiAgIGlmICh1dl9faXNfYWN0aXZlKGhhbmRsZSkpCiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKIApAQCAtMjMwLDEzICsyMzcsMjMgQEAKICAgICAgKi8KIAogICAgIC8qIENvbnZlcnQgdG8gc2hvcnQgcGF0aC4gKi8KKyAgICBzaG9ydF9wYXRoX2J1ZmZlciA9IE5VTEw7CisgICAgc2hvcnRfcGF0aF9idWZmZXJfbGVuID0gR2V0U2hvcnRQYXRoTmFtZVcocGF0aHcsIE5VTEwsIDApOworICAgIGlmIChzaG9ydF9wYXRoX2J1ZmZlcl9sZW4gPT0gMCkgeworICAgICAgZ290byBzaG9ydF9wYXRoX2RvbmU7CisgICAgfQorICAgIHNob3J0X3BhdGhfYnVmZmVyID0gdXZfX21hbGxvYyhzaG9ydF9wYXRoX2J1ZmZlcl9sZW4gKiBzaXplb2YoV0NIQVIpKTsKKyAgICBpZiAoc2hvcnRfcGF0aF9idWZmZXIgPT0gTlVMTCkgeworICAgICAgZ290byBzaG9ydF9wYXRoX2RvbmU7CisgICAgfQogICAgIGlmIChHZXRTaG9ydFBhdGhOYW1lVyhwYXRodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfcGF0aF9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoc2hvcnRfcGF0aF9idWZmZXIpKSkgewotICAgICAgc2hvcnRfcGF0aCA9IHNob3J0X3BhdGhfYnVmZmVyOwotICAgIH0gZWxzZSB7Ci0gICAgICBzaG9ydF9wYXRoID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfcGF0aF9idWZmZXJfbGVuKSA9PSAwKSB7CisgICAgICB1dl9fZnJlZShzaG9ydF9wYXRoX2J1ZmZlcik7CisgICAgICBzaG9ydF9wYXRoX2J1ZmZlciA9IE5VTEw7CiAgICAgfQorc2hvcnRfcGF0aF9kb25lOgorICAgIHNob3J0X3BhdGggPSBzaG9ydF9wYXRoX2J1ZmZlcjsKIAogICAgIGlmICh1dl9zcGxpdF9wYXRoKHBhdGh3LCAmZGlyLCAmaGFuZGxlLT5maWxldykgIT0gMCkgewogICAgICAgbGFzdF9lcnJvciA9IEdldExhc3RFcnJvcigpOwpAQCAtMzQ2LDYgKzM2Myw4IEBACiAgIGlmICh1dl9faXNfYWN0aXZlKGhhbmRsZSkpCiAgICAgdXZfX2hhbmRsZV9zdG9wKGhhbmRsZSk7CiAKKyAgdXZfX2ZyZWUoc2hvcnRfcGF0aCk7CisKICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IobGFzdF9lcnJvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMtZmQtaGFzaC1pbmwuaCBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMtZmQtaGFzaC1pbmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTIwM2QyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9mcy1mZC1oYXNoLWlubC5oCkBAIC0wLDAgKzEsMTc4IEBACisjaWZuZGVmIFVWX1dJTl9GU19GRF9IQVNIX0lOTF9IXworI2RlZmluZSBVVl9XSU5fRlNfRkRfSEFTSF9JTkxfSF8KKworI2luY2x1ZGUgInV2LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyogRmlsZXMgYXJlIG9ubHkgaW5zZXJ0ZWQgaW4gdXZfX2ZkX2hhc2ggd2hlbiB0aGUgVVZfRlNfT19GSUxFTUFQIGZsYWcgaXMKKyAqIHNwZWNpZmllZC4gVGh1cywgd2hlbiB1dl9fZmRfaGFzaF9nZXQgcmV0dXJucyB0cnVlLCB0aGUgZmlsZSBtYXBwaW5nIGluIHRoZQorICogaW5mbyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHVzZWQgZm9yIHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4KKyAqCisgKiBJZiB0aGUgZmlsZSBpcyBlbXB0eSwgdGhlIG1hcHBpbmcgZmllbGQgd2lsbCBiZSBzZXQgdG8KKyAqIElOVkFMSURfSEFORExFX1ZBTFVFLiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBzaW5jZSB0aGUgZmlsZSBtYXBwaW5nIG5lZWRzIHRvCisgKiBiZSBjcmVhdGVkIGFueXdheSB3aGVuIHRoZSBmaWxlIHNpemUgY2hhbmdlcy4KKyAqCisgKiBTaW5jZSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBzZXF1ZW50aWFsIGludGVnZXJzLCB0aGUgbW9kdWxvIG9wZXJhdG9yIGlzIHVzZWQKKyAqIGFzIGhhc2hpbmcgZnVuY3Rpb24uIEZvciBlYWNoIGJ1Y2tldCwgYSBzaW5nbGUgbGlua2VkIGxpc3Qgb2YgYXJyYXlzIGlzCisgKiBrZXB0IHRvIG1pbmltaXplIGFsbG9jYXRpb25zLiBBIHN0YXRpY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXIgaXMga2VwdAorICogZm9yIHRoZSBmaXJzdCBhcnJheSBpbiBlYWNoIGJ1Y2tldC4gKi8KKworCisjZGVmaW5lIFVWX19GRF9IQVNIX1NJWkUgMjU2CisjZGVmaW5lIFVWX19GRF9IQVNIX0dST1VQX1NJWkUgMTYKKworc3RydWN0IHV2X19mZF9pbmZvX3MgeworICBpbnQgZmxhZ3M7CisgIEJPT0xFQU4gaXNfZGlyZWN0b3J5OworICBIQU5ETEUgbWFwcGluZzsKKyAgTEFSR0VfSU5URUdFUiBzaXplOworICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRfcG9zOworfTsKKworc3RydWN0IHV2X19mZF9oYXNoX2VudHJ5X3MgeworICB1dl9maWxlIGZkOworICBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyBpbmZvOworfTsKKworc3RydWN0IHV2X19mZF9oYXNoX2VudHJ5X2dyb3VwX3MgeworICBzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfcyBlbnRyaWVzW1VWX19GRF9IQVNIX0dST1VQX1NJWkVdOworICBzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfZ3JvdXBfcyogbmV4dDsKK307CisKK3N0cnVjdCB1dl9fZmRfaGFzaF9idWNrZXRfcyB7CisgIHNpemVfdCBzaXplOworICBzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfZ3JvdXBfcyogZGF0YTsKK307CisKKworc3RhdGljIHV2X211dGV4X3QgdXZfX2ZkX2hhc2hfbXV0ZXg7CisKK3N0YXRpYyBzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfZ3JvdXBfcworICB1dl9fZmRfaGFzaF9lbnRyeV9pbml0aWFsW1VWX19GRF9IQVNIX1NJWkUgKiBVVl9fRkRfSEFTSF9HUk9VUF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgdXZfX2ZkX2hhc2hfYnVja2V0X3MgdXZfX2ZkX2hhc2hbVVZfX0ZEX0hBU0hfU0laRV07CisKKworSU5MSU5FIHN0YXRpYyB2b2lkIHV2X19mZF9oYXNoX2luaXQodm9pZCkgeworICBpbnQgaSwgZXJyOworCisgIGVyciA9IHV2X211dGV4X2luaXQoJnV2X19mZF9oYXNoX211dGV4KTsKKyAgaWYgKGVycikgeworICAgIHV2X2ZhdGFsX2Vycm9yKGVyciwgInV2X211dGV4X2luaXQiKTsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHV2X19mZF9oYXNoKTsgKytpKSB7CisgICAgdXZfX2ZkX2hhc2hbaV0uc2l6ZSA9IDA7CisgICAgdXZfX2ZkX2hhc2hbaV0uZGF0YSA9CisgICAgICAgIHV2X19mZF9oYXNoX2VudHJ5X2luaXRpYWwgKyBpICogVVZfX0ZEX0hBU0hfR1JPVVBfU0laRTsKKyAgfQorfQorCisjZGVmaW5lIEZJTkRfQ09NTU9OX1ZBUklBQkxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdW5zaWduZWQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1bnNpZ25lZCBidWNrZXQgPSBmZCAlIEFSUkFZX1NJWkUodXZfX2ZkX2hhc2gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0cnVjdCB1dl9fZmRfaGFzaF9lbnRyeV9zKiBlbnRyeV9wdHIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RydWN0IHV2X19mZF9oYXNoX2VudHJ5X2dyb3VwX3MqIGdyb3VwX3B0cjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdHJ1Y3QgdXZfX2ZkX2hhc2hfYnVja2V0X3MqIGJ1Y2tldF9wdHIgPSAmdXZfX2ZkX2hhc2hbYnVja2V0XTsKKworI2RlZmluZSBGSU5EX0lOX0dST1VQX1BUUihncm91cF9zaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBfc2l6ZTsgKytpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKGdyb3VwX3B0ci0+ZW50cmllc1tpXS5mZCA9PSBmZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVudHJ5X3B0ciA9ICZncm91cF9wdHItPmVudHJpZXNbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBGSU5EX0lOX0JVQ0tFVF9QVFIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaXplX3QgZmlyc3RfZ3JvdXBfc2l6ZSA9IGJ1Y2tldF9wdHItPnNpemUgJSBVVl9fRkRfSEFTSF9HUk9VUF9TSVpFOyAgICAgXAorICAgIGlmIChidWNrZXRfcHRyLT5zaXplICE9IDAgJiYgZmlyc3RfZ3JvdXBfc2l6ZSA9PSAwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBmaXJzdF9ncm91cF9zaXplID0gVVZfX0ZEX0hBU0hfR1JPVVBfU0laRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBncm91cF9wdHIgPSBidWNrZXRfcHRyLT5kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZJTkRfSU5fR1JPVVBfUFRSKGZpcnN0X2dyb3VwX3NpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yIChncm91cF9wdHIgPSBncm91cF9wdHItPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIGdyb3VwX3B0ciAhPSBOVUxMICYmIGVudHJ5X3B0ciA9PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgZ3JvdXBfcHRyID0gZ3JvdXBfcHRyLT5uZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBGSU5EX0lOX0dST1VQX1BUUihVVl9fRkRfSEFTSF9HUk9VUF9TSVpFKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworSU5MSU5FIHN0YXRpYyBpbnQgdXZfX2ZkX2hhc2hfZ2V0KGludCBmZCwgc3RydWN0IHV2X19mZF9pbmZvX3MqIGluZm8pIHsKKyAgRklORF9DT01NT05fVkFSSUFCTEVTCisKKyAgdXZfbXV0ZXhfbG9jaygmdXZfX2ZkX2hhc2hfbXV0ZXgpOworCisgIEZJTkRfSU5fQlVDS0VUX1BUUigpOworCisgIGlmIChlbnRyeV9wdHIgIT0gTlVMTCkgeworICAgICppbmZvID0gZW50cnlfcHRyLT5pbmZvOworICB9CisKKyAgdXZfbXV0ZXhfdW5sb2NrKCZ1dl9fZmRfaGFzaF9tdXRleCk7CisgIHJldHVybiBlbnRyeV9wdHIgIT0gTlVMTDsKK30KKworSU5MSU5FIHN0YXRpYyB2b2lkIHV2X19mZF9oYXNoX2FkZChpbnQgZmQsIHN0cnVjdCB1dl9fZmRfaW5mb19zKiBpbmZvKSB7CisgIEZJTkRfQ09NTU9OX1ZBUklBQkxFUworCisgIHV2X211dGV4X2xvY2soJnV2X19mZF9oYXNoX211dGV4KTsKKworICBGSU5EX0lOX0JVQ0tFVF9QVFIoKTsKKworICBpZiAoZW50cnlfcHRyID09IE5VTEwpIHsKKyAgICBpID0gYnVja2V0X3B0ci0+c2l6ZSAlIFVWX19GRF9IQVNIX0dST1VQX1NJWkU7CisKKyAgICBpZiAoYnVja2V0X3B0ci0+c2l6ZSAhPSAwICYmIGkgPT0gMCkgeworICAgICAgc3RydWN0IHV2X19mZF9oYXNoX2VudHJ5X2dyb3VwX3MqIG5ld19ncm91cF9wdHIgPQorICAgICAgICB1dl9fbWFsbG9jKHNpemVvZigqbmV3X2dyb3VwX3B0cikpOworICAgICAgaWYgKG5ld19ncm91cF9wdHIgPT0gTlVMTCkgeworICAgICAgICB1dl9mYXRhbF9lcnJvcihFUlJPUl9PVVRPRk1FTU9SWSwgInV2X19tYWxsb2MiKTsKKyAgICAgIH0KKyAgICAgIG5ld19ncm91cF9wdHItPm5leHQgPSBidWNrZXRfcHRyLT5kYXRhOworICAgICAgYnVja2V0X3B0ci0+ZGF0YSA9IG5ld19ncm91cF9wdHI7CisgICAgfQorCisgICAgYnVja2V0X3B0ci0+c2l6ZSArPSAxOworICAgIGVudHJ5X3B0ciA9ICZidWNrZXRfcHRyLT5kYXRhLT5lbnRyaWVzW2ldOworICAgIGVudHJ5X3B0ci0+ZmQgPSBmZDsKKyAgfQorCisgIGVudHJ5X3B0ci0+aW5mbyA9ICppbmZvOworCisgIHV2X211dGV4X3VubG9jaygmdXZfX2ZkX2hhc2hfbXV0ZXgpOworfQorCitJTkxJTkUgc3RhdGljIGludCB1dl9fZmRfaGFzaF9yZW1vdmUoaW50IGZkLCBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyogaW5mbykgeworICBGSU5EX0NPTU1PTl9WQVJJQUJMRVMKKworICB1dl9tdXRleF9sb2NrKCZ1dl9fZmRfaGFzaF9tdXRleCk7CisKKyAgRklORF9JTl9CVUNLRVRfUFRSKCk7CisKKyAgaWYgKGVudHJ5X3B0ciAhPSBOVUxMKSB7CisgICAgKmluZm8gPSBlbnRyeV9wdHItPmluZm87CisKKyAgICBidWNrZXRfcHRyLT5zaXplIC09IDE7CisKKyAgICBpID0gYnVja2V0X3B0ci0+c2l6ZSAlIFVWX19GRF9IQVNIX0dST1VQX1NJWkU7CisgICAgaWYgKGVudHJ5X3B0ciAhPSAmYnVja2V0X3B0ci0+ZGF0YS0+ZW50cmllc1tpXSkgeworICAgICAgKmVudHJ5X3B0ciA9IGJ1Y2tldF9wdHItPmRhdGEtPmVudHJpZXNbaV07CisgICAgfQorCisgICAgaWYgKGJ1Y2tldF9wdHItPnNpemUgIT0gMCAmJgorICAgICAgICBidWNrZXRfcHRyLT5zaXplICUgVVZfX0ZEX0hBU0hfR1JPVVBfU0laRSA9PSAwKSB7CisgICAgICBzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfZ3JvdXBfcyogb2xkX2dyb3VwX3B0ciA9IGJ1Y2tldF9wdHItPmRhdGE7CisgICAgICBidWNrZXRfcHRyLT5kYXRhID0gb2xkX2dyb3VwX3B0ci0+bmV4dDsKKyAgICAgIHV2X19mcmVlKG9sZF9ncm91cF9wdHIpOworICAgIH0KKyAgfQorCisgIHV2X211dGV4X3VubG9jaygmdXZfX2ZkX2hhc2hfbXV0ZXgpOworICByZXR1cm4gZW50cnlfcHRyICE9IE5VTEw7Cit9CisKKyN1bmRlZiBGSU5EX0NPTU1PTl9WQVJJQUJMRVMKKyN1bmRlZiBGSU5EX0lOX0dST1VQX1BUUgorI3VuZGVmIEZJTkRfSU5fQlVDS0VUX1BUUgorCisjZW5kaWYgLyogVVZfV0lOX0ZTX0ZEX0hBU0hfSU5MX0hfICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ZzLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ZzLmMKaW5kZXggOWUyZjA4NC4uOTU3N2JjMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9mcy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMuYwpAQCAtMzQsOCArMzQsNyBAQAogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAicmVxLWlubC5oIgogI2luY2x1ZGUgImhhbmRsZS1pbmwuaCIKLQotI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisjaW5jbHVkZSAiZnMtZmQtaGFzaC1pbmwuaCIKIAogCiAjZGVmaW5lIFVWX0ZTX0ZSRUVfUEFUSFMgICAgICAgICAweDAwMDIKQEAgLTEyNiw2ICsxMjUsOCBAQAogI2RlZmluZSBJU19MRVRURVIoYykgKCgoYykgPj0gTCdhJyAmJiAoYykgPD0gTCd6JykgfHwgXAogICAoKGMpID49IEwnQScgJiYgKGMpIDw9IEwnWicpKQogCisjZGVmaW5lIE1JTihhLGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKwogY29uc3QgV0NIQVIgSlVOQ1RJT05fUFJFRklYW10gPSBMIlxcPz9cXCI7CiBjb25zdCBXQ0hBUiBKVU5DVElPTl9QUkVGSVhfTEVOID0gNDsKIApAQCAtMTM3LDggKzEzOCwxNiBAQAogCiBzdGF0aWMgaW50IHV2X19maWxlX3N5bWxpbmtfdXNlcm1vZGVfZmxhZyA9IFNZTUJPTElDX0xJTktfRkxBR19BTExPV19VTlBSSVZJTEVHRURfQ1JFQVRFOwogCitzdGF0aWMgRFdPUkQgdXZfX2FsbG9jYXRpb25fZ3JhbnVsYXJpdHk7CisKKwogdm9pZCB1dl9mc19pbml0KHZvaWQpIHsKLSAgX2Ztb2RlID0gX09fQklOQVJZOworICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKworICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7CisgIHV2X19hbGxvY2F0aW9uX2dyYW51bGFyaXR5ID0gc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHk7CisKKyAgdXZfX2ZkX2hhc2hfaW5pdCgpOwogfQogCiAKQEAgLTI0OCw2ICsyNTcsNyBAQAogICByZXEtPmxvb3AgPSBsb29wOwogICByZXEtPmZsYWdzID0gMDsKICAgcmVxLT5mc190eXBlID0gZnNfdHlwZTsKKyAgcmVxLT5zeXNfZXJybm9fID0gMDsKICAgcmVxLT5yZXN1bHQgPSAwOwogICByZXEtPnB0ciA9IE5VTEw7CiAgIHJlcS0+cGF0aCA9IE5VTEw7CkBAIC0zMTIsNiArMzIyLDggQEAKICAgV0NIQVIqIHdfdGFyZ2V0OwogICBEV09SRCB3X3RhcmdldF9sZW47CiAgIERXT1JEIGJ5dGVzOworICBzaXplX3QgaTsKKyAgc2l6ZV90IGxlbjsKIAogICBpZiAoIURldmljZUlvQ29udHJvbChoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5ULApAQCAtMzk2LDYgKzQwOCwzOCBAQAogICAgIHdfdGFyZ2V0ICs9IDQ7CiAgICAgd190YXJnZXRfbGVuIC09IDQ7CiAKKyAgfSBlbHNlIGlmIChyZXBhcnNlX2RhdGEtPlJlcGFyc2VUYWcgPT0gSU9fUkVQQVJTRV9UQUdfQVBQRVhFQ0xJTkspIHsKKyAgICAvKiBTdHJpbmcgIzMgaW4gdGhlIGxpc3QgaGFzIHRoZSB0YXJnZXQgZmlsZW5hbWUuICovCisgICAgaWYgKHJlcGFyc2VfZGF0YS0+QXBwRXhlY0xpbmtSZXBhcnNlQnVmZmVyLlN0cmluZ0NvdW50IDwgMykgeworICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX1NZTUxJTktfTk9UX1NVUFBPUlRFRCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHdfdGFyZ2V0ID0gcmVwYXJzZV9kYXRhLT5BcHBFeGVjTGlua1JlcGFyc2VCdWZmZXIuU3RyaW5nTGlzdDsKKyAgICAvKiBUaGUgU3RyaW5nTGlzdCBidWZmZXIgY29udGFpbnMgYSBsaXN0IG9mIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5ICJcMCIsICAgKi8KKyAgICAvKiB3aXRoICJcMFwwIiB0ZXJtaW5hdGluZyB0aGUgbGlzdC4gTW92ZSB0byB0aGUgM3JkIHN0cmluZyBpbiB0aGUgbGlzdDogKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICBsZW4gPSB3Y3NsZW4od190YXJnZXQpOworICAgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9TWU1MSU5LX05PVF9TVVBQT1JURUQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICB3X3RhcmdldCArPSBsZW4gKyAxOworICAgIH0KKyAgICB3X3RhcmdldF9sZW4gPSB3Y3NsZW4od190YXJnZXQpOworICAgIGlmICh3X3RhcmdldF9sZW4gPT0gMCkgeworICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX1NZTUxJTktfTk9UX1NVUFBPUlRFRCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIE1ha2Ugc3VyZSBpdCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiAqLworICAgIGlmICghKHdfdGFyZ2V0X2xlbiA+PSAzICYmCisgICAgICAgICAoKHdfdGFyZ2V0WzBdID49IEwnYScgJiYgd190YXJnZXRbMF0gPD0gTCd6JykgfHwKKyAgICAgICAgICAod190YXJnZXRbMF0gPj0gTCdBJyAmJiB3X3RhcmdldFswXSA8PSBMJ1onKSkgJiYKKyAgICAgICAgIHdfdGFyZ2V0WzFdID09IEwnOicgJiYKKyAgICAgICAgIHdfdGFyZ2V0WzJdID09IEwnXFwnKSkgeworICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX1NZTUxJTktfTk9UX1NVUFBPUlRFRCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCiAgIH0gZWxzZSB7CiAgICAgLyogUmVwYXJzZSB0YWcgZG9lcyBub3QgaW5kaWNhdGUgYSBzeW1saW5rLiAqLwogICAgIFNldExhc3RFcnJvcihFUlJPUl9TWU1MSU5LX05PVF9TVVBQT1JURUQpOwpAQCAtNDE0LDYgKzQ1OCwyNyBAQAogICBIQU5ETEUgZmlsZTsKICAgaW50IGZkLCBjdXJyZW50X3VtYXNrOwogICBpbnQgZmxhZ3MgPSByZXEtPmZzLmluZm8uZmlsZV9mbGFnczsKKyAgc3RydWN0IHV2X19mZF9pbmZvX3MgZmRfaW5mbzsKKworICAvKiBBZGp1c3QgZmxhZ3MgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBtZW1vcnkgZmlsZSBtYXBwaW5nLiBTYXZlIHRoZQorICAgKiBvcmlnaW5hbCBmbGFncyB0byBlbXVsYXRlIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiAqLworICBpZiAoZmxhZ3MgJiBVVl9GU19PX0ZJTEVNQVApIHsKKyAgICBmZF9pbmZvLmZsYWdzID0gZmxhZ3M7CisgICAgZmRfaW5mby5jdXJyZW50X3Bvcy5RdWFkUGFydCA9IDA7CisKKyAgICBpZiAoKGZsYWdzICYgKFVWX0ZTX09fUkRPTkxZIHwgVVZfRlNfT19XUk9OTFkgfCBVVl9GU19PX1JEV1IpKSA9PQorICAgICAgICBVVl9GU19PX1dST05MWSkgeworICAgICAgLyogQ3JlYXRlRmlsZU1hcHBpbmcgYWx3YXlzIG5lZWRzIHJlYWQgYWNjZXNzICovCisgICAgICBmbGFncyA9IChmbGFncyAmIH5VVl9GU19PX1dST05MWSkgfCBVVl9GU19PX1JEV1I7CisgICAgfQorCisgICAgaWYgKGZsYWdzICYgVVZfRlNfT19BUFBFTkQpIHsKKyAgICAgIC8qIENsZWFyIHRoZSBhcHBlbmQgZmxhZyBhbmQgZW5zdXJlIFJEUlcgbW9kZSAqLworICAgICAgZmxhZ3MgJj0gflVWX0ZTX09fQVBQRU5EOworICAgICAgZmxhZ3MgJj0gfihVVl9GU19PX1JET05MWSB8IFVWX0ZTX09fV1JPTkxZIHwgVVZfRlNfT19SRFdSKTsKKyAgICAgIGZsYWdzIHw9IFVWX0ZTX09fUkRXUjsKKyAgICB9CisgIH0KIAogICAvKiBPYnRhaW4gdGhlIGFjdGl2ZSB1bWFzay4gdW1hc2soKSBuZXZlciBmYWlscyBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMKICAgICogdW1hc2suICovCkBAIC00NDQsNyArNTA5LDggQEAKICAgICogSGVyZSBpcyB3aGVyZSB3ZSBkZXZpYXRlIHNpZ25pZmljYW50bHkgZnJvbSB3aGF0IENSVCdzIF9vcGVuKCkKICAgICogZG9lcy4gV2UgaW5kaXNjcmltaW5hdGVseSB1c2UgYWxsIHRoZSBzaGFyaW5nIG1vZGVzLCB0byBtYXRjaAogICAgKiBVTklYIHNlbWFudGljcy4gSW4gcGFydGljdWxhciwgdGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZpbGUgY2FuCi0gICAqIGJlIGRlbGV0ZWQgZXZlbiB3aGlsc3QgaXQncyBvcGVuLCBmaXhpbmcgaXNzdWUgIzE0NDkuCisgICAqIGJlIGRlbGV0ZWQgZXZlbiB3aGlsc3QgaXQncyBvcGVuLCBmaXhpbmcgaXNzdWUKKyAgICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlLXYwLngtYXJjaGl2ZS9pc3N1ZXMvMTQ0OS4KICAgICogV2Ugc3RpbGwgc3VwcG9ydCBleGNsdXNpdmUgc2hhcmluZyBtb2RlLCBzaW5jZSBpdCBpcyBuZWNlc3NhcnkKICAgICogZm9yIG9wZW5pbmcgcmF3IGJsb2NrIGRldmljZXMsIG90aGVyd2lzZSBXaW5kb3dzIHdpbGwgcHJldmVudAogICAgKiBhbnkgYXR0ZW1wdCB0byB3cml0ZSBwYXN0IHRoZSBtYXN0ZXIgYm9vdCByZWNvcmQuCkBAIC01ODMsMTEgKzY0OSw1NSBAQAogICAgIGVsc2UgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOwogICAgIGVsc2UKLSAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBVVl9VTktOT1dOKTsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCAoRFdPUkQpIFVWX1VOS05PV04pOwogICAgIENsb3NlSGFuZGxlKGZpbGUpOwogICAgIHJldHVybjsKICAgfQogCisgIGlmIChmbGFncyAmIFVWX0ZTX09fRklMRU1BUCkgeworICAgIEZJTEVfU1RBTkRBUkRfSU5GTyBmaWxlX2luZm87CisgICAgaWYgKCFHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZUV4KGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVTdGFuZGFyZEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBmaWxlX2luZm8pKSB7CisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgICAgQ2xvc2VIYW5kbGUoZmlsZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZkX2luZm8uaXNfZGlyZWN0b3J5ID0gZmlsZV9pbmZvLkRpcmVjdG9yeTsKKworICAgIGlmIChmZF9pbmZvLmlzX2RpcmVjdG9yeSkgeworICAgICAgZmRfaW5mby5zaXplLlF1YWRQYXJ0ID0gMDsKKyAgICAgIGZkX2luZm8ubWFwcGluZyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoIUdldEZpbGVTaXplRXgoZmlsZSwgJmZkX2luZm8uc2l6ZSkpIHsKKyAgICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICAgICAgQ2xvc2VIYW5kbGUoZmlsZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgaWYgKGZkX2luZm8uc2l6ZS5RdWFkUGFydCA9PSAwKSB7CisgICAgICAgIGZkX2luZm8ubWFwcGluZyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgRFdPUkQgZmxQcm90ZWN0ID0gKGZkX2luZm8uZmxhZ3MgJiAoVVZfRlNfT19SRE9OTFkgfCBVVl9GU19PX1dST05MWSB8CisgICAgICAgICAgVVZfRlNfT19SRFdSKSkgPT0gVVZfRlNfT19SRE9OTFkgPyBQQUdFX1JFQURPTkxZIDogUEFHRV9SRUFEV1JJVEU7CisgICAgICAgIGZkX2luZm8ubWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsUHJvdGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfaW5mby5zaXplLkhpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9pbmZvLnNpemUuTG93UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIGlmIChmZF9pbmZvLm1hcHBpbmcgPT0gTlVMTCkgeworICAgICAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgQ2xvc2VIYW5kbGUoZmlsZSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgdXZfX2ZkX2hhc2hfYWRkKGZkLCAmZmRfaW5mbyk7CisgIH0KKwogICBTRVRfUkVRX1JFU1VMVChyZXEsIGZkKTsKICAgcmV0dXJuOwogCkBAIC01OTgsOSArNzA4LDE2IEBACiB2b2lkIGZzX19jbG9zZSh1dl9mc190KiByZXEpIHsKICAgaW50IGZkID0gcmVxLT5maWxlLmZkOwogICBpbnQgcmVzdWx0OworICBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyBmZF9pbmZvOwogCiAgIFZFUklGWV9GRChmZCwgcmVxKTsKIAorICBpZiAodXZfX2ZkX2hhc2hfcmVtb3ZlKGZkLCAmZmRfaW5mbykpIHsKKyAgICBpZiAoZmRfaW5mby5tYXBwaW5nICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICBDbG9zZUhhbmRsZShmZF9pbmZvLm1hcHBpbmcpOworICAgIH0KKyAgfQorCiAgIGlmIChmZCA+IDIpCiAgICAgcmVzdWx0ID0gX2Nsb3NlKGZkKTsKICAgZWxzZQpAQCAtNjE4LDYgKzczNSwxMjMgQEAKIH0KIAogCitMT05HIGZzX19maWxlbWFwX2V4X2ZpbHRlcihMT05HIGV4Y29kZSwgUEVYQ0VQVElPTl9QT0lOVEVSUyBwZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBlcnJvcikgeworICBpZiAoZXhjb2RlICE9IEVYQ0VQVElPTl9JTl9QQUdFX0VSUk9SKSB7CisgICAgcmV0dXJuIEVYQ0VQVElPTl9DT05USU5VRV9TRUFSQ0g7CisgIH0KKworICBhc3NlcnQocGVycm9yICE9IE5VTEwpOworICBpZiAocGVwICE9IE5VTEwgJiYgcGVwLT5FeGNlcHRpb25SZWNvcmQgIT0gTlVMTCAmJgorICAgICAgcGVwLT5FeGNlcHRpb25SZWNvcmQtPk51bWJlclBhcmFtZXRlcnMgPj0gMykgeworICAgIE5UU1RBVFVTIHN0YXR1cyA9IChOVFNUQVRVUylwZXAtPkV4Y2VwdGlvblJlY29yZC0+RXhjZXB0aW9uSW5mb3JtYXRpb25bM107CisgICAgKnBlcnJvciA9IHBSdGxOdFN0YXR1c1RvRG9zRXJyb3Ioc3RhdHVzKTsKKyAgICBpZiAoKnBlcnJvciAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICByZXR1cm4gRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUjsKKyAgICB9CisgIH0KKyAgKnBlcnJvciA9IFVWX1VOS05PV047CisgIHJldHVybiBFWENFUFRJT05fRVhFQ1VURV9IQU5ETEVSOworfQorCisKK3ZvaWQgZnNfX3JlYWRfZmlsZW1hcCh1dl9mc190KiByZXEsIHN0cnVjdCB1dl9fZmRfaW5mb19zKiBmZF9pbmZvKSB7CisgIGludCBmZCA9IHJlcS0+ZmlsZS5mZDsgLyogVkVSSUZZX0ZEIGRvbmUgaW4gZnNfX3JlYWQgKi8KKyAgaW50IHJ3X2ZsYWdzID0gZmRfaW5mby0+ZmxhZ3MgJgorICAgIChVVl9GU19PX1JET05MWSB8IFVWX0ZTX09fV1JPTkxZIHwgVVZfRlNfT19SRFdSKTsKKyAgc2l6ZV90IHJlYWRfc2l6ZSwgZG9uZV9yZWFkOworICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgIExBUkdFX0lOVEVHRVIgcG9zLCBlbmRfcG9zOworICBzaXplX3Qgdmlld19vZmZzZXQ7CisgIExBUkdFX0lOVEVHRVIgdmlld19iYXNlOworICB2b2lkKiB2aWV3OworCisgIGlmIChyd19mbGFncyA9PSBVVl9GU19PX1dST05MWSkgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBFUlJPUl9BQ0NFU1NfREVOSUVEKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKGZkX2luZm8tPmlzX2RpcmVjdG9yeSkgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBFUlJPUl9JTlZBTElEX0ZVTkNUSU9OKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAocmVxLT5mcy5pbmZvLm9mZnNldCA9PSAtMSkgeworICAgIHBvcyA9IGZkX2luZm8tPmN1cnJlbnRfcG9zOworICB9IGVsc2UgeworICAgIHBvcy5RdWFkUGFydCA9IHJlcS0+ZnMuaW5mby5vZmZzZXQ7CisgIH0KKworICAvKiBNYWtlIHN1cmUgd2Ugd29udCByZWFkIHBhc3QgRU9GLiAqLworICBpZiAocG9zLlF1YWRQYXJ0ID49IGZkX2luZm8tPnNpemUuUXVhZFBhcnQpIHsKKyAgICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOworICAgIHJldHVybjsKKyAgfQorCisgIHJlYWRfc2l6ZSA9IDA7CisgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHJlcS0+ZnMuaW5mby5uYnVmczsgKytpbmRleCkgeworICAgIHJlYWRfc2l6ZSArPSByZXEtPmZzLmluZm8uYnVmc1tpbmRleF0ubGVuOworICB9CisgIHJlYWRfc2l6ZSA9IChzaXplX3QpIE1JTigoTE9OR0xPTkcpIHJlYWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX2luZm8tPnNpemUuUXVhZFBhcnQgLSBwb3MuUXVhZFBhcnQpOworICBpZiAocmVhZF9zaXplID09IDApIHsKKyAgICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOworICAgIHJldHVybjsKKyAgfQorCisgIGVuZF9wb3MuUXVhZFBhcnQgPSBwb3MuUXVhZFBhcnQgKyByZWFkX3NpemU7CisKKyAgdmlld19vZmZzZXQgPSBwb3MuUXVhZFBhcnQgJSB1dl9fYWxsb2NhdGlvbl9ncmFudWxhcml0eTsKKyAgdmlld19iYXNlLlF1YWRQYXJ0ID0gcG9zLlF1YWRQYXJ0IC0gdmlld19vZmZzZXQ7CisgIHZpZXcgPSBNYXBWaWV3T2ZGaWxlKGZkX2luZm8tPm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfTUFQX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgIHZpZXdfYmFzZS5IaWdoUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgdmlld19iYXNlLkxvd1BhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIHZpZXdfb2Zmc2V0ICsgcmVhZF9zaXplKTsKKyAgaWYgKHZpZXcgPT0gTlVMTCkgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgZG9uZV9yZWFkID0gMDsKKyAgZm9yIChpbmRleCA9IDA7CisgICAgICAgaW5kZXggPCByZXEtPmZzLmluZm8ubmJ1ZnMgJiYgZG9uZV9yZWFkIDwgcmVhZF9zaXplOworICAgICAgICsraW5kZXgpIHsKKyAgICBpbnQgZXJyID0gMDsKKyAgICBzaXplX3QgdGhpc19yZWFkX3NpemUgPSBNSU4ocmVxLT5mcy5pbmZvLmJ1ZnNbaW5kZXhdLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zaXplIC0gZG9uZV9yZWFkKTsKKyNpZmRlZiBfTVNDX1ZFUgorICAgIF9fdHJ5IHsKKyNlbmRpZgorICAgICAgbWVtY3B5KHJlcS0+ZnMuaW5mby5idWZzW2luZGV4XS5iYXNlLAorICAgICAgICAgICAgIChjaGFyKil2aWV3ICsgdmlld19vZmZzZXQgKyBkb25lX3JlYWQsCisgICAgICAgICAgICAgdGhpc19yZWFkX3NpemUpOworI2lmZGVmIF9NU0NfVkVSCisgICAgfQorICAgIF9fZXhjZXB0IChmc19fZmlsZW1hcF9leF9maWx0ZXIoR2V0RXhjZXB0aW9uQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RXhjZXB0aW9uSW5mb3JtYXRpb24oKSwgJmVycikpIHsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgICAgVW5tYXBWaWV3T2ZGaWxlKHZpZXcpOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGRvbmVfcmVhZCArPSB0aGlzX3JlYWRfc2l6ZTsKKyAgfQorICBhc3NlcnQoZG9uZV9yZWFkID09IHJlYWRfc2l6ZSk7CisKKyAgaWYgKCFVbm1hcFZpZXdPZkZpbGUodmlldykpIHsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChyZXEtPmZzLmluZm8ub2Zmc2V0ID09IC0xKSB7CisgICAgZmRfaW5mby0+Y3VycmVudF9wb3MgPSBlbmRfcG9zOworICAgIHV2X19mZF9oYXNoX2FkZChmZCwgZmRfaW5mbyk7CisgIH0KKworICBTRVRfUkVRX1JFU1VMVChyZXEsIHJlYWRfc2l6ZSk7CisgIHJldHVybjsKK30KKwogdm9pZCBmc19fcmVhZCh1dl9mc190KiByZXEpIHsKICAgaW50IGZkID0gcmVxLT5maWxlLmZkOwogICBpbnQ2NF90IG9mZnNldCA9IHJlcS0+ZnMuaW5mby5vZmZzZXQ7CkBAIC02MzEsOSArODY1LDE1IEBACiAgIExBUkdFX0lOVEVHRVIgb3JpZ2luYWxfcG9zaXRpb247CiAgIExBUkdFX0lOVEVHRVIgemVyb19vZmZzZXQ7CiAgIGludCByZXN0b3JlX3Bvc2l0aW9uOworICBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyBmZF9pbmZvOwogCiAgIFZFUklGWV9GRChmZCwgcmVxKTsKIAorICBpZiAodXZfX2ZkX2hhc2hfZ2V0KGZkLCAmZmRfaW5mbykpIHsKKyAgICBmc19fcmVhZF9maWxlbWFwKHJlcSwgJmZkX2luZm8pOworICAgIHJldHVybjsKKyAgfQorCiAgIHplcm9fb2Zmc2V0LlF1YWRQYXJ0ID0gMDsKICAgcmVzdG9yZV9wb3NpdGlvbiA9IDA7CiAgIGhhbmRsZSA9IHV2X19nZXRfb3NmaGFuZGxlKGZkKTsKQEAgLTY5MCw2ICs5MzAsMTMxIEBACiB9CiAKIAordm9pZCBmc19fd3JpdGVfZmlsZW1hcCh1dl9mc190KiByZXEsIEhBTkRMRSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyogZmRfaW5mbykgeworICBpbnQgZmQgPSByZXEtPmZpbGUuZmQ7IC8qIFZFUklGWV9GRCBkb25lIGluIGZzX193cml0ZSAqLworICBpbnQgZm9yY2VfYXBwZW5kID0gZmRfaW5mby0+ZmxhZ3MgJiBVVl9GU19PX0FQUEVORDsKKyAgaW50IHJ3X2ZsYWdzID0gZmRfaW5mby0+ZmxhZ3MgJgorICAgIChVVl9GU19PX1JET05MWSB8IFVWX0ZTX09fV1JPTkxZIHwgVVZfRlNfT19SRFdSKTsKKyAgc2l6ZV90IHdyaXRlX3NpemUsIGRvbmVfd3JpdGU7CisgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgTEFSR0VfSU5URUdFUiB6ZXJvLCBwb3MsIGVuZF9wb3M7CisgIHNpemVfdCB2aWV3X29mZnNldDsKKyAgTEFSR0VfSU5URUdFUiB2aWV3X2Jhc2U7CisgIHZvaWQqIHZpZXc7CisgIEZJTEVUSU1FIGZ0OworCisgIGlmIChyd19mbGFncyA9PSBVVl9GU19PX1JET05MWSkgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBFUlJPUl9BQ0NFU1NfREVOSUVEKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKGZkX2luZm8tPmlzX2RpcmVjdG9yeSkgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBFUlJPUl9JTlZBTElEX0ZVTkNUSU9OKTsKKyAgICByZXR1cm47CisgIH0KKworICB3cml0ZV9zaXplID0gMDsKKyAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcmVxLT5mcy5pbmZvLm5idWZzOyArK2luZGV4KSB7CisgICAgd3JpdGVfc2l6ZSArPSByZXEtPmZzLmluZm8uYnVmc1tpbmRleF0ubGVuOworICB9CisKKyAgaWYgKHdyaXRlX3NpemUgPT0gMCkgeworICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgMCk7CisgICAgcmV0dXJuOworICB9CisKKyAgemVyby5RdWFkUGFydCA9IDA7CisgIGlmIChmb3JjZV9hcHBlbmQpIHsKKyAgICBwb3MgPSBmZF9pbmZvLT5zaXplOworICB9IGVsc2UgaWYgKHJlcS0+ZnMuaW5mby5vZmZzZXQgPT0gLTEpIHsKKyAgICBwb3MgPSBmZF9pbmZvLT5jdXJyZW50X3BvczsKKyAgfSBlbHNlIHsKKyAgICBwb3MuUXVhZFBhcnQgPSByZXEtPmZzLmluZm8ub2Zmc2V0OworICB9CisKKyAgZW5kX3Bvcy5RdWFkUGFydCA9IHBvcy5RdWFkUGFydCArIHdyaXRlX3NpemU7CisKKyAgLyogUmVjcmVhdGUgdGhlIG1hcHBpbmcgdG8gZW5sYXJnZSB0aGUgZmlsZSBpZiBuZWVkZWQgKi8KKyAgaWYgKGVuZF9wb3MuUXVhZFBhcnQgPiBmZF9pbmZvLT5zaXplLlF1YWRQYXJ0KSB7CisgICAgaWYgKGZkX2luZm8tPm1hcHBpbmcgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgIENsb3NlSGFuZGxlKGZkX2luZm8tPm1hcHBpbmcpOworICAgIH0KKworICAgIGZkX2luZm8tPm1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1JFQURXUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3Bvcy5IaWdoUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3Bvcy5Mb3dQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAoZmRfaW5mby0+bWFwcGluZyA9PSBOVUxMKSB7CisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgICAgQ2xvc2VIYW5kbGUoZmlsZSk7CisgICAgICBmZF9pbmZvLT5tYXBwaW5nID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgICBmZF9pbmZvLT5zaXplLlF1YWRQYXJ0ID0gMDsKKyAgICAgIGZkX2luZm8tPmN1cnJlbnRfcG9zLlF1YWRQYXJ0ID0gMDsKKyAgICAgIHV2X19mZF9oYXNoX2FkZChmZCwgZmRfaW5mbyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZmRfaW5mby0+c2l6ZSA9IGVuZF9wb3M7CisgICAgdXZfX2ZkX2hhc2hfYWRkKGZkLCBmZF9pbmZvKTsKKyAgfQorCisgIHZpZXdfb2Zmc2V0ID0gcG9zLlF1YWRQYXJ0ICUgdXZfX2FsbG9jYXRpb25fZ3JhbnVsYXJpdHk7CisgIHZpZXdfYmFzZS5RdWFkUGFydCA9IHBvcy5RdWFkUGFydCAtIHZpZXdfb2Zmc2V0OworICB2aWV3ID0gTWFwVmlld09mRmlsZShmZF9pbmZvLT5tYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBGSUxFX01BUF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmlld19iYXNlLkhpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICB2aWV3X2Jhc2UuTG93UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgdmlld19vZmZzZXQgKyB3cml0ZV9zaXplKTsKKyAgaWYgKHZpZXcgPT0gTlVMTCkgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgZG9uZV93cml0ZSA9IDA7CisgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHJlcS0+ZnMuaW5mby5uYnVmczsgKytpbmRleCkgeworICAgIGludCBlcnIgPSAwOworI2lmZGVmIF9NU0NfVkVSCisgICAgX190cnkgeworI2VuZGlmCisgICAgICBtZW1jcHkoKGNoYXIqKXZpZXcgKyB2aWV3X29mZnNldCArIGRvbmVfd3JpdGUsCisgICAgICAgICAgICAgcmVxLT5mcy5pbmZvLmJ1ZnNbaW5kZXhdLmJhc2UsCisgICAgICAgICAgICAgcmVxLT5mcy5pbmZvLmJ1ZnNbaW5kZXhdLmxlbik7CisjaWZkZWYgX01TQ19WRVIKKyAgICB9CisgICAgX19leGNlcHQgKGZzX19maWxlbWFwX2V4X2ZpbHRlcihHZXRFeGNlcHRpb25Db2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRFeGNlcHRpb25JbmZvcm1hdGlvbigpLCAmZXJyKSkgeworICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgICBVbm1hcFZpZXdPZkZpbGUodmlldyk7CisgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgZG9uZV93cml0ZSArPSByZXEtPmZzLmluZm8uYnVmc1tpbmRleF0ubGVuOworICB9CisgIGFzc2VydChkb25lX3dyaXRlID09IHdyaXRlX3NpemUpOworCisgIGlmICghRmx1c2hWaWV3T2ZGaWxlKHZpZXcsIDApKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICBVbm1hcFZpZXdPZkZpbGUodmlldyk7CisgICAgcmV0dXJuOworICB9CisgIGlmICghVW5tYXBWaWV3T2ZGaWxlKHZpZXcpKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAocmVxLT5mcy5pbmZvLm9mZnNldCA9PSAtMSkgeworICAgIGZkX2luZm8tPmN1cnJlbnRfcG9zID0gZW5kX3BvczsKKyAgICB1dl9fZmRfaGFzaF9hZGQoZmQsIGZkX2luZm8pOworICB9CisKKyAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKKyAgU2V0RmlsZVRpbWUoZmlsZSwgTlVMTCwgTlVMTCwgJmZ0KTsKKworICBTRVRfUkVRX1JFU1VMVChyZXEsIGRvbmVfd3JpdGUpOworfQorCiB2b2lkIGZzX193cml0ZSh1dl9mc190KiByZXEpIHsKICAgaW50IGZkID0gcmVxLT5maWxlLmZkOwogICBpbnQ2NF90IG9mZnNldCA9IHJlcS0+ZnMuaW5mby5vZmZzZXQ7CkBAIC03MDIsNiArMTA2Nyw3IEBACiAgIExBUkdFX0lOVEVHRVIgb3JpZ2luYWxfcG9zaXRpb247CiAgIExBUkdFX0lOVEVHRVIgemVyb19vZmZzZXQ7CiAgIGludCByZXN0b3JlX3Bvc2l0aW9uOworICBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyBmZF9pbmZvOwogCiAgIFZFUklGWV9GRChmZCwgcmVxKTsKIApAQCAtNzEzLDYgKzEwNzksMTEgQEAKICAgICByZXR1cm47CiAgIH0KIAorICBpZiAodXZfX2ZkX2hhc2hfZ2V0KGZkLCAmZmRfaW5mbykpIHsKKyAgICBmc19fd3JpdGVfZmlsZW1hcChyZXEsIGhhbmRsZSwgJmZkX2luZm8pOworICAgIHJldHVybjsKKyAgfQorCiAgIGlmIChvZmZzZXQgIT0gLTEpIHsKICAgICBtZW1zZXQoJm92ZXJsYXBwZWQsIDAsIHNpemVvZiBvdmVybGFwcGVkKTsKICAgICBvdmVybGFwcGVkX3B0ciA9ICZvdmVybGFwcGVkOwpAQCAtODUwLDEzICsxMjIxLDE5IEBACiAKIHZvaWQgZnNfX21rZGlyKHV2X2ZzX3QqIHJlcSkgewogICAvKiBUT0RPOiB1c2UgcmVxLT5tb2RlLiAqLwotICBpbnQgcmVzdWx0ID0gX3dta2RpcihyZXEtPmZpbGUucGF0aHcpOwotICBTRVRfUkVRX1JFU1VMVChyZXEsIHJlc3VsdCk7CisgIHJlcS0+cmVzdWx0ID0gX3dta2RpcihyZXEtPmZpbGUucGF0aHcpOworICBpZiAocmVxLT5yZXN1bHQgPT0gLTEpIHsKKyAgICByZXEtPnN5c19lcnJub18gPSBfZG9zZXJybm87CisgICAgcmVxLT5yZXN1bHQgPSByZXEtPnN5c19lcnJub18gPT0gRVJST1JfSU5WQUxJRF9OQU1FCisgICAgICAgICAgICAgICAgPyBVVl9FSU5WQUwKKyAgICAgICAgICAgICAgICA6IHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IocmVxLT5zeXNfZXJybm9fKTsKKyAgfQogfQogCit0eXBlZGVmIGludCAoKnV2X19mc19ta3RlbXBfZnVuYykodXZfZnNfdCogcmVxKTsKIAogLyogT3BlbkJTRCBvcmlnaW5hbDogbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMgKi8KLXZvaWQgZnNfX21rZHRlbXAodXZfZnNfdCogcmVxKSB7Cit2b2lkIGZzX19ta3RlbXAodXZfZnNfdCogcmVxLCB1dl9fZnNfbWt0ZW1wX2Z1bmMgZnVuYykgewogICBzdGF0aWMgY29uc3QgV0NIQVIgKnRlbXBjaGFycyA9CiAgICAgTCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSI7CiAgIHN0YXRpYyBjb25zdCBzaXplX3QgbnVtX2NoYXJzID0gNjI7CkBAIC04NjQsOSArMTI0MSw3IEBACiAgIFdDSEFSICpjcCwgKmVwOwogICB1bnNpZ25lZCBpbnQgdHJpZXMsIGk7CiAgIHNpemVfdCBsZW47Ci0gIEhDUllQVFBST1YgaF9jcnlwdF9wcm92OwogICB1aW50NjRfdCB2OwotICBCT09MIHJlbGVhc2VkOwogCiAgIGxlbiA9IHdjc2xlbihyZXEtPmZpbGUucGF0aHcpOwogICBlcCA9IHJlcS0+ZmlsZS5wYXRodyArIGxlbjsKQEAgLTg3NSwxNiArMTI1MCwxMCBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGlmICghQ3J5cHRBY3F1aXJlQ29udGV4dCgmaF9jcnlwdF9wcm92LCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpIHsKLSAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOwotICAgIHJldHVybjsKLSAgfQotCiAgIHRyaWVzID0gVE1QX01BWDsKICAgZG8gewotICAgIGlmICghQ3J5cHRHZW5SYW5kb20oaF9jcnlwdF9wcm92LCBzaXplb2YodiksIChCWVRFKikgJnYpKSB7Ci0gICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgIGlmICh1dl9fcmFuZG9tX3J0bGdlbnJhbmRvbSgodm9pZCAqKSZ2LCBzaXplb2YodikpIDwgMCkgeworICAgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VJTywgRVJST1JfSU9fREVWSUNFKTsKICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtODk0LDI1ICsxMjYzLDkyIEBACiAgICAgICB2IC89IG51bV9jaGFyczsKICAgICB9CiAKLSAgICBpZiAoX3dta2RpcihyZXEtPmZpbGUucGF0aHcpID09IDApIHsKLSAgICAgIGxlbiA9IHN0cmxlbihyZXEtPnBhdGgpOwotICAgICAgd2NzdG9tYnMoKGNoYXIqKSByZXEtPnBhdGggKyBsZW4gLSBudW1feCwgZXAgLSBudW1feCwgbnVtX3gpOwotICAgICAgU0VUX1JFUV9SRVNVTFQocmVxLCAwKTsKLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRUVYSVNUKSB7Ci0gICAgICBTRVRfUkVRX1JFU1VMVChyZXEsIC0xKTsKKyAgICBpZiAoZnVuYyhyZXEpKSB7CisgICAgICBpZiAocmVxLT5yZXN1bHQgPj0gMCkgeworICAgICAgICBsZW4gPSBzdHJsZW4ocmVxLT5wYXRoKTsKKyAgICAgICAgd2NzdG9tYnMoKGNoYXIqKSByZXEtPnBhdGggKyBsZW4gLSBudW1feCwgZXAgLSBudW1feCwgbnVtX3gpOworICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQogICB9IHdoaWxlICgtLXRyaWVzKTsKIAotICByZWxlYXNlZCA9IENyeXB0UmVsZWFzZUNvbnRleHQoaF9jcnlwdF9wcm92LCAwKTsKLSAgYXNzZXJ0KHJlbGVhc2VkKTsKICAgaWYgKHRyaWVzID09IDApIHsKICAgICBTRVRfUkVRX1JFU1VMVChyZXEsIC0xKTsKICAgfQogfQogCiAKK3N0YXRpYyBpbnQgZnNfX21rZHRlbXBfZnVuYyh1dl9mc190KiByZXEpIHsKKyAgaWYgKF93bWtkaXIocmVxLT5maWxlLnBhdGh3KSA9PSAwKSB7CisgICAgU0VUX1JFUV9SRVNVTFQocmVxLCAwKTsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIGlmIChlcnJubyAhPSBFRVhJU1QpIHsKKyAgICBTRVRfUkVRX1JFU1VMVChyZXEsIC0xKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisKK3ZvaWQgZnNfX21rZHRlbXAodXZfZnNfdCogcmVxKSB7CisgIGZzX19ta3RlbXAocmVxLCBmc19fbWtkdGVtcF9mdW5jKTsKK30KKworCitzdGF0aWMgaW50IGZzX19ta3N0ZW1wX2Z1bmModXZfZnNfdCogcmVxKSB7CisgIEhBTkRMRSBmaWxlOworICBpbnQgZmQ7CisKKyAgZmlsZSA9IENyZWF0ZUZpbGVXKHJlcS0+ZmlsZS5wYXRodywKKyAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFIHwgRklMRV9TSEFSRV9ERUxFVEUsCisgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgQ1JFQVRFX05FVywKKyAgICAgICAgICAgICAgICAgICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgIGlmIChmaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgRFdPUkQgZXJyb3I7CisgICAgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKworICAgIC8qIElmIHRoZSBmaWxlIGV4aXN0cywgdGhlIG1haW4gZnNfX21rdGVtcCgpIGZ1bmN0aW9uCisgICAgICAgd2lsbCByZXRyeS4gSWYgaXQncyBhbm90aGVyIGVycm9yLCB3ZSB3YW50IHRvIHN0b3AuICovCisgICAgaWYgKGVycm9yICE9IEVSUk9SX0ZJTEVfRVhJU1RTKSB7CisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyb3IpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworICBmZCA9IF9vcGVuX29zZmhhbmRsZSgoaW50cHRyX3QpIGZpbGUsIDApOworICBpZiAoZmQgPCAwKSB7CisgICAgLyogVGhlIG9ubHkga25vd24gZmFpbHVyZSBtb2RlIGZvciBfb3Blbl9vc2ZoYW5kbGUoKSBpcyBFTUZJTEUsIGluIHdoaWNoCisgICAgICogY2FzZSBHZXRMYXN0RXJyb3IoKSB3aWxsIHJldHVybiB6ZXJvLiBIb3dldmVyIHdlJ2xsIHRyeSB0byBoYW5kbGUgb3RoZXIKKyAgICAgKiBlcnJvcnMgYXMgd2VsbCwgc2hvdWxkIHRoZXkgZXZlciBvY2N1ci4KKyAgICAgKi8KKyAgICBpZiAoZXJybm8gPT0gRU1GSUxFKQorICAgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VNRklMRSwgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUyk7CisgICAgZWxzZSBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgZWxzZQorICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIFVWX1VOS05PV04pOworICAgIENsb3NlSGFuZGxlKGZpbGUpOworICAgIHJldHVybiAxOworICB9CisKKyAgU0VUX1JFUV9SRVNVTFQocmVxLCBmZCk7CisKKyAgcmV0dXJuIDE7Cit9CisKKwordm9pZCBmc19fbWtzdGVtcCh1dl9mc190KiByZXEpIHsKKyAgZnNfX21rdGVtcChyZXEsIGZzX19ta3N0ZW1wX2Z1bmMpOworfQorCisKIHZvaWQgZnNfX3NjYW5kaXIodXZfZnNfdCogcmVxKSB7CiAgIHN0YXRpYyBjb25zdCBzaXplX3QgZGlyZW50c19pbml0aWFsX3NpemUgPSAzMjsKIApAQCAtMTQwOSw0NyArMTg0NSw1NyBAQAogfQogCiAKLUlOTElORSBzdGF0aWMgdm9pZCBmc19fc3RhdF9pbXBsKHV2X2ZzX3QqIHJlcSwgaW50IGRvX2xzdGF0KSB7CitJTkxJTkUgc3RhdGljIERXT1JEIGZzX19zdGF0X2ltcGxfZnJvbV9wYXRoKFdDSEFSKiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9fbHN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X3N0YXRfdCogc3RhdGJ1ZikgewogICBIQU5ETEUgaGFuZGxlOwogICBEV09SRCBmbGFnczsKKyAgRFdPUkQgcmV0OwogCiAgIGZsYWdzID0gRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1M7Ci0gIGlmIChkb19sc3RhdCkgeworICBpZiAoZG9fbHN0YXQpCiAgICAgZmxhZ3MgfD0gRklMRV9GTEFHX09QRU5fUkVQQVJTRV9QT0lOVDsKLSAgfQogCi0gIGhhbmRsZSA9IENyZWF0ZUZpbGVXKHJlcS0+ZmlsZS5wYXRodywKKyAgaGFuZGxlID0gQ3JlYXRlRmlsZVcocGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9SRUFEX0FUVFJJQlVURVMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUgfCBGSUxFX1NIQVJFX0RFTEVURSwKICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9FWElTVElORywKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKLSAgICByZXR1cm47Ci0gIH0KIAotICBpZiAoZnNfX3N0YXRfaGFuZGxlKGhhbmRsZSwgJnJlcS0+c3RhdGJ1ZiwgZG9fbHN0YXQpICE9IDApIHsKLSAgICBEV09SRCBlcnJvciA9IEdldExhc3RFcnJvcigpOworICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgIHJldCA9IEdldExhc3RFcnJvcigpOworICBlbHNlIGlmIChmc19fc3RhdF9oYW5kbGUoaGFuZGxlLCBzdGF0YnVmLCBkb19sc3RhdCkgIT0gMCkKKyAgICByZXQgPSBHZXRMYXN0RXJyb3IoKTsKKyAgZWxzZQorICAgIHJldCA9IDA7CisKKyAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKKyAgcmV0dXJuIHJldDsKK30KKworCitJTkxJTkUgc3RhdGljIHZvaWQgZnNfX3N0YXRfaW1wbCh1dl9mc190KiByZXEsIGludCBkb19sc3RhdCkgeworICBEV09SRCBlcnJvcjsKKworICBlcnJvciA9IGZzX19zdGF0X2ltcGxfZnJvbV9wYXRoKHJlcS0+ZmlsZS5wYXRodywgZG9fbHN0YXQsICZyZXEtPnN0YXRidWYpOworICBpZiAoZXJyb3IgIT0gMCkgewogICAgIGlmIChkb19sc3RhdCAmJgogICAgICAgICAoZXJyb3IgPT0gRVJST1JfU1lNTElOS19OT1RfU1VQUE9SVEVEIHx8CiAgICAgICAgICBlcnJvciA9PSBFUlJPUl9OT1RfQV9SRVBBUlNFX1BPSU5UKSkgewogICAgICAgLyogV2Ugb3BlbmVkIGEgcmVwYXJzZSBwb2ludCBidXQgaXQgd2FzIG5vdCBhIHN5bWxpbmsuIFRyeSBhZ2Fpbi4gKi8KICAgICAgIGZzX19zdGF0X2ltcGwocmVxLCAwKTsKLQogICAgIH0gZWxzZSB7CiAgICAgICAvKiBTdGF0IGZhaWxlZC4gKi8KLSAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyb3IpOwogICAgIH0KIAotICAgIENsb3NlSGFuZGxlKGhhbmRsZSk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgcmVxLT5wdHIgPSAmcmVxLT5zdGF0YnVmOwogICByZXEtPnJlc3VsdCA9IDA7Ci0gIENsb3NlSGFuZGxlKGhhbmRsZSk7CiB9CiAKIApAQCAtMTUyNiw2ICsxOTcyLDcgQEAKIHN0YXRpYyB2b2lkIGZzX19mdHJ1bmNhdGUodXZfZnNfdCogcmVxKSB7CiAgIGludCBmZCA9IHJlcS0+ZmlsZS5mZDsKICAgSEFORExFIGhhbmRsZTsKKyAgc3RydWN0IHV2X19mZF9pbmZvX3MgZmRfaW5mbyA9IHsgMCB9OwogICBOVFNUQVRVUyBzdGF0dXM7CiAgIElPX1NUQVRVU19CTE9DSyBpb19zdGF0dXM7CiAgIEZJTEVfRU5EX09GX0ZJTEVfSU5GT1JNQVRJT04gZW9mX2luZm87CkBAIC0xNTM0LDYgKzE5ODEsMTcgQEAKIAogICBoYW5kbGUgPSB1dl9fZ2V0X29zZmhhbmRsZShmZCk7CiAKKyAgaWYgKHV2X19mZF9oYXNoX2dldChmZCwgJmZkX2luZm8pKSB7CisgICAgaWYgKGZkX2luZm8uaXNfZGlyZWN0b3J5KSB7CisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgRVJST1JfQUNDRVNTX0RFTklFRCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGZkX2luZm8ubWFwcGluZyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgQ2xvc2VIYW5kbGUoZmRfaW5mby5tYXBwaW5nKTsKKyAgICB9CisgIH0KKwogICBlb2ZfaW5mby5FbmRPZkZpbGUuUXVhZFBhcnQgPSByZXEtPmZzLmluZm8ub2Zmc2V0OwogCiAgIHN0YXR1cyA9IHBOdFNldEluZm9ybWF0aW9uRmlsZShoYW5kbGUsCkBAIC0xNTQ2LDYgKzIwMDQsNDMgQEAKICAgICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOwogICB9IGVsc2UgewogICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBwUnRsTnRTdGF0dXNUb0Rvc0Vycm9yKHN0YXR1cykpOworCisgICAgaWYgKGZkX2luZm8uZmxhZ3MpIHsKKyAgICAgIENsb3NlSGFuZGxlKGhhbmRsZSk7CisgICAgICBmZF9pbmZvLm1hcHBpbmcgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICAgIGZkX2luZm8uc2l6ZS5RdWFkUGFydCA9IDA7CisgICAgICBmZF9pbmZvLmN1cnJlbnRfcG9zLlF1YWRQYXJ0ID0gMDsKKyAgICAgIHV2X19mZF9oYXNoX2FkZChmZCwgJmZkX2luZm8pOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGlmIChmZF9pbmZvLmZsYWdzKSB7CisgICAgZmRfaW5mby5zaXplID0gZW9mX2luZm8uRW5kT2ZGaWxlOworCisgICAgaWYgKGZkX2luZm8uc2l6ZS5RdWFkUGFydCA9PSAwKSB7CisgICAgICBmZF9pbmZvLm1hcHBpbmcgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICB9IGVsc2UgeworICAgICAgRFdPUkQgZmxQcm90ZWN0ID0gKGZkX2luZm8uZmxhZ3MgJiAoVVZfRlNfT19SRE9OTFkgfCBVVl9GU19PX1dST05MWSB8CisgICAgICAgIFVWX0ZTX09fUkRXUikpID09IFVWX0ZTX09fUkRPTkxZID8gUEFHRV9SRUFET05MWSA6IFBBR0VfUkVBRFdSSVRFOworICAgICAgZmRfaW5mby5tYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsUHJvdGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX2luZm8uc2l6ZS5IaWdoUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX2luZm8uc2l6ZS5Mb3dQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICBpZiAoZmRfaW5mby5tYXBwaW5nID09IE5VTEwpIHsKKyAgICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKKyAgICAgICAgZmRfaW5mby5tYXBwaW5nID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgICAgIGZkX2luZm8uc2l6ZS5RdWFkUGFydCA9IDA7CisgICAgICAgIGZkX2luZm8uY3VycmVudF9wb3MuUXVhZFBhcnQgPSAwOworICAgICAgICB1dl9fZmRfaGFzaF9hZGQoZmQsICZmZF9pbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIHV2X19mZF9oYXNoX2FkZChmZCwgJmZkX2luZm8pOwogICB9CiB9CiAKQEAgLTE1NTMsNiArMjA0OCw4IEBACiBzdGF0aWMgdm9pZCBmc19fY29weWZpbGUodXZfZnNfdCogcmVxKSB7CiAgIGludCBmbGFnczsKICAgaW50IG92ZXJ3cml0ZTsKKyAgdXZfc3RhdF90IHN0YXRidWY7CisgIHV2X3N0YXRfdCBuZXdfc3RhdGJ1ZjsKIAogICBmbGFncyA9IHJlcS0+ZnMuaW5mby5maWxlX2ZsYWdzOwogCkBAIC0xNTYzLDEyICsyMDYwLDI1IEBACiAKICAgb3ZlcndyaXRlID0gZmxhZ3MgJiBVVl9GU19DT1BZRklMRV9FWENMOwogCi0gIGlmIChDb3B5RmlsZVcocmVxLT5maWxlLnBhdGh3LCByZXEtPmZzLmluZm8ubmV3X3BhdGh3LCBvdmVyd3JpdGUpID09IDApIHsKLSAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICBpZiAoQ29weUZpbGVXKHJlcS0+ZmlsZS5wYXRodywgcmVxLT5mcy5pbmZvLm5ld19wYXRodywgb3ZlcndyaXRlKSAhPSAwKSB7CisgICAgU0VUX1JFUV9SRVNVTFQocmVxLCAwKTsKICAgICByZXR1cm47CiAgIH0KIAotICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOworICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICBpZiAocmVxLT5yZXN1bHQgIT0gVVZfRUJVU1kpCisgICAgcmV0dXJuOworCisgIC8qIGlmIGVycm9yIFVWX0VCVVNZIGNoZWNrIGlmIHNyYyBhbmQgZHN0IGZpbGUgYXJlIHRoZSBzYW1lICovCisgIGlmIChmc19fc3RhdF9pbXBsX2Zyb21fcGF0aChyZXEtPmZpbGUucGF0aHcsIDAsICZzdGF0YnVmKSAhPSAwIHx8CisgICAgICBmc19fc3RhdF9pbXBsX2Zyb21fcGF0aChyZXEtPmZzLmluZm8ubmV3X3BhdGh3LCAwLCAmbmV3X3N0YXRidWYpICE9IDApIHsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoc3RhdGJ1Zi5zdF9kZXYgPT0gbmV3X3N0YXRidWYuc3RfZGV2ICYmCisgICAgICBzdGF0YnVmLnN0X2lubyA9PSBuZXdfc3RhdGJ1Zi5zdF9pbm8pIHsKKyAgICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOworICB9CiB9CiAKIApAQCAtMTc1MCwzNCArMjI2MCw2OCBAQAogICByZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgdm9pZCBmc19fdXRpbWUodXZfZnNfdCogcmVxKSB7CitJTkxJTkUgc3RhdGljIERXT1JEIGZzX191dGltZV9pbXBsX2Zyb21fcGF0aChXQ0hBUiogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb19sdXRpbWUpIHsKICAgSEFORExFIGhhbmRsZTsKKyAgRFdPUkQgZmxhZ3M7CisgIERXT1JEIHJldDsKIAotICBoYW5kbGUgPSBDcmVhdGVGaWxlVyhyZXEtPmZpbGUucGF0aHcsCisgIGZsYWdzID0gRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1M7CisgIGlmIChkb19sdXRpbWUpIHsKKyAgICBmbGFncyB8PSBGSUxFX0ZMQUdfT1BFTl9SRVBBUlNFX1BPSU5UOworICB9CisKKyAgaGFuZGxlID0gQ3JlYXRlRmlsZVcocGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9XUklURV9BVFRSSUJVVEVTLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFIHwgRklMRV9TSEFSRV9ERUxFVEUsCiAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5fRVhJU1RJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLAorICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGZzX191dGltZV9oYW5kbGUoaGFuZGxlLCByZXEtPmZzLnRpbWUuYXRpbWUsIHJlcS0+ZnMudGltZS5tdGltZSkgIT0gMCkgewotICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKLSAgICByZXR1cm47CisgICAgcmV0ID0gR2V0TGFzdEVycm9yKCk7CisgIH0gZWxzZSBpZiAoZnNfX3V0aW1lX2hhbmRsZShoYW5kbGUsIGF0aW1lLCBtdGltZSkgIT0gMCkgeworICAgIHJldCA9IEdldExhc3RFcnJvcigpOworICB9IGVsc2UgeworICAgIHJldCA9IDA7CiAgIH0KIAogICBDbG9zZUhhbmRsZShoYW5kbGUpOworICByZXR1cm4gcmV0OworfQorCitJTkxJTkUgc3RhdGljIHZvaWQgZnNfX3V0aW1lX2ltcGwodXZfZnNfdCogcmVxLCBpbnQgZG9fbHV0aW1lKSB7CisgIERXT1JEIGVycm9yOworCisgIGVycm9yID0gZnNfX3V0aW1lX2ltcGxfZnJvbV9wYXRoKHJlcS0+ZmlsZS5wYXRodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLT5mcy50aW1lLmF0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEtPmZzLnRpbWUubXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2x1dGltZSk7CisKKyAgaWYgKGVycm9yICE9IDApIHsKKyAgICBpZiAoZG9fbHV0aW1lICYmCisgICAgICAgIChlcnJvciA9PSBFUlJPUl9TWU1MSU5LX05PVF9TVVBQT1JURUQgfHwKKyAgICAgICAgIGVycm9yID09IEVSUk9SX05PVF9BX1JFUEFSU0VfUE9JTlQpKSB7CisgICAgICAvKiBPcGVuZWQgZmlsZSBpcyBhIHJlcGFyc2UgcG9pbnQgYnV0IG5vdCBhIHN5bWxpbmsuIFRyeSBhZ2Fpbi4gKi8KKyAgICAgIGZzX191dGltZV9pbXBsKHJlcSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHV0aW1lIGZhaWxlZC4gKi8KKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuOworICB9CiAKICAgcmVxLT5yZXN1bHQgPSAwOwogfQogCitzdGF0aWMgdm9pZCBmc19fdXRpbWUodXZfZnNfdCogcmVxKSB7CisgIGZzX191dGltZV9pbXBsKHJlcSwgLyogZG9fbHV0aW1lICovIDApOworfQorCiAKIHN0YXRpYyB2b2lkIGZzX19mdXRpbWUodXZfZnNfdCogcmVxKSB7CiAgIGludCBmZCA9IHJlcS0+ZmlsZS5mZDsKQEAgLTE3OTksNiArMjM0MywxMCBAQAogICByZXEtPnJlc3VsdCA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGZzX19sdXRpbWUodXZfZnNfdCogcmVxKSB7CisgIGZzX191dGltZV9pbXBsKHJlcSwgLyogZG9fbHV0aW1lICovIDEpOworfQorCiAKIHN0YXRpYyB2b2lkIGZzX19saW5rKHV2X2ZzX3QqIHJlcSkgewogICBEV09SRCByID0gQ3JlYXRlSGFyZExpbmtXKHJlcS0+ZnMuaW5mby5uZXdfcGF0aHcsIHJlcS0+ZmlsZS5wYXRodywgTlVMTCk7CkBAIC0yMTM5LDYgKzI2ODcsOTAgQEAKICAgcmVxLT5yZXN1bHQgPSAwOwogfQogCisKK3N0YXRpYyB2b2lkIGZzX19zdGF0ZnModXZfZnNfdCogcmVxKSB7CisgIHV2X3N0YXRmc190KiBzdGF0X2ZzOworICBEV09SRCBzZWN0b3JzX3Blcl9jbHVzdGVyOworICBEV09SRCBieXRlc19wZXJfc2VjdG9yOworICBEV09SRCBmcmVlX2NsdXN0ZXJzOworICBEV09SRCB0b3RhbF9jbHVzdGVyczsKKyAgV0NIQVIqIHBhdGh3OworCisgIHBhdGh3ID0gcmVxLT5maWxlLnBhdGh3OworcmV0cnlfZ2V0X2Rpc2tfZnJlZV9zcGFjZToKKyAgaWYgKDAgPT0gR2V0RGlza0ZyZWVTcGFjZVcocGF0aHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZWN0b3JzX3Blcl9jbHVzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNfcGVyX3NlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyZWVfY2x1c3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b3RhbF9jbHVzdGVycykpIHsKKyAgICBEV09SRCBlcnI7CisgICAgV0NIQVIqIGZwYXJ0OworICAgIHNpemVfdCBsZW47CisgICAgRFdPUkQgcmV0OworICAgIEJPT0wgaXNfc2Vjb25kOworCisgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgaXNfc2Vjb25kID0gcGF0aHcgIT0gcmVxLT5maWxlLnBhdGh3OworICAgIGlmIChlcnIgIT0gRVJST1JfRElSRUNUT1JZIHx8IGlzX3NlY29uZCkgeworICAgICAgaWYgKGlzX3NlY29uZCkKKyAgICAgICAgdXZfX2ZyZWUocGF0aHcpOworCisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsZW4gPSBNQVhfUEFUSCArIDE7CisgICAgcGF0aHcgPSB1dl9fbWFsbG9jKGxlbiAqIHNpemVvZigqcGF0aHcpKTsKKyAgICBpZiAocGF0aHcgPT0gTlVMTCkgeworICAgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VOT01FTSwgRVJST1JfT1VUT0ZNRU1PUlkpOworICAgICAgcmV0dXJuOworICAgIH0KK3JldHJ5X2dldF9mdWxsX3BhdGhfbmFtZToKKyAgICByZXQgPSBHZXRGdWxsUGF0aE5hbWVXKHJlcS0+ZmlsZS5wYXRodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZwYXJ0KTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgIHV2X19mcmVlKHBhdGh3KTsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAocmV0ID4gbGVuKSB7CisgICAgICBsZW4gPSByZXQ7CisgICAgICBwYXRodyA9IHV2X19yZWFsbG9jZihwYXRodywgbGVuICogc2l6ZW9mKCpwYXRodykpOworICAgICAgaWYgKHBhdGh3ID09IE5VTEwpIHsKKyAgICAgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VOT01FTSwgRVJST1JfT1VUT0ZNRU1PUlkpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBnb3RvIHJldHJ5X2dldF9mdWxsX3BhdGhfbmFtZTsKKyAgICB9CisgICAgaWYgKGZwYXJ0ICE9IDApCisgICAgICAqZnBhcnQgPSBMJ1wwJzsKKworICAgIGdvdG8gcmV0cnlfZ2V0X2Rpc2tfZnJlZV9zcGFjZTsKKyAgfQorICBpZiAocGF0aHcgIT0gcmVxLT5maWxlLnBhdGh3KSB7CisgICAgdXZfX2ZyZWUocGF0aHcpOworICB9CisKKyAgc3RhdF9mcyA9IHV2X19tYWxsb2Moc2l6ZW9mKCpzdGF0X2ZzKSk7CisgIGlmIChzdGF0X2ZzID09IE5VTEwpIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRU5PTUVNLCBFUlJPUl9PVVRPRk1FTU9SWSk7CisgICAgcmV0dXJuOworICB9CisKKyAgc3RhdF9mcy0+Zl90eXBlID0gMDsKKyAgc3RhdF9mcy0+Zl9ic2l6ZSA9IGJ5dGVzX3Blcl9zZWN0b3IgKiBzZWN0b3JzX3Blcl9jbHVzdGVyOworICBzdGF0X2ZzLT5mX2Jsb2NrcyA9IHRvdGFsX2NsdXN0ZXJzOworICBzdGF0X2ZzLT5mX2JmcmVlID0gZnJlZV9jbHVzdGVyczsKKyAgc3RhdF9mcy0+Zl9iYXZhaWwgPSBmcmVlX2NsdXN0ZXJzOworICBzdGF0X2ZzLT5mX2ZpbGVzID0gMDsKKyAgc3RhdF9mcy0+Zl9mZnJlZSA9IDA7CisgIHJlcS0+cHRyID0gc3RhdF9mczsKKyAgcmVxLT5mbGFncyB8PSBVVl9GU19GUkVFX1BUUjsKKyAgU0VUX1JFUV9SRVNVTFQocmVxLCAwKTsKK30KKworCiBzdGF0aWMgdm9pZCB1dl9fZnNfd29yayhzdHJ1Y3QgdXZfX3dvcmsqIHcpIHsKICAgdXZfZnNfdCogcmVxOwogCkBAIC0yMTU5LDYgKzI3OTEsNyBAQAogICAgIFhYKEZUUlVOQ0FURSwgZnRydW5jYXRlKQogICAgIFhYKFVUSU1FLCB1dGltZSkKICAgICBYWChGVVRJTUUsIGZ1dGltZSkKKyAgICBYWChMVVRJTUUsIGx1dGltZSkKICAgICBYWChBQ0NFU1MsIGFjY2VzcykKICAgICBYWChDSE1PRCwgY2htb2QpCiAgICAgWFgoRkNITU9ELCBmY2htb2QpCkBAIC0yMTY4LDYgKzI4MDEsNyBAQAogICAgIFhYKFJNRElSLCBybWRpcikKICAgICBYWChNS0RJUiwgbWtkaXIpCiAgICAgWFgoTUtEVEVNUCwgbWtkdGVtcCkKKyAgICBYWChNS1NURU1QLCBta3N0ZW1wKQogICAgIFhYKFJFTkFNRSwgcmVuYW1lKQogICAgIFhYKFNDQU5ESVIsIHNjYW5kaXIpCiAgICAgWFgoUkVBRERJUiwgcmVhZGRpcikKQEAgLTIxNzgsOCArMjgxMiw5IEBACiAgICAgWFgoUkVBRExJTkssIHJlYWRsaW5rKQogICAgIFhYKFJFQUxQQVRILCByZWFscGF0aCkKICAgICBYWChDSE9XTiwgY2hvd24pCi0gICAgWFgoRkNIT1dOLCBmY2hvd24pOwotICAgIFhYKExDSE9XTiwgbGNob3duKTsKKyAgICBYWChGQ0hPV04sIGZjaG93bikKKyAgICBYWChMQ0hPV04sIGxjaG93bikKKyAgICBYWChTVEFURlMsIHN0YXRmcykKICAgICBkZWZhdWx0OgogICAgICAgYXNzZXJ0KCEiYmFkIHV2X2ZzX3R5cGUiKTsKICAgfQpAQCAtMjI0MCw3ICsyODc1LDggQEAKICAgSU5JVChVVl9GU19PUEVOKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICByZXEtPmZzLmluZm8uZmlsZV9mbGFncyA9IGZsYWdzOwpAQCAtMjI2NSw4ICsyOTAxLDEwIEBACiAgICAgICAgICAgICAgICB1dl9mc19jYiBjYikgewogICBJTklUKFVWX0ZTX1JFQUQpOwogCi0gIGlmIChidWZzID09IE5VTEwgfHwgbmJ1ZnMgPT0gMCkKKyAgaWYgKGJ1ZnMgPT0gTlVMTCB8fCBuYnVmcyA9PSAwKSB7CisgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VJTlZBTCwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOwogICAgIHJldHVybiBVVl9FSU5WQUw7CisgIH0KIAogICByZXEtPmZpbGUuZmQgPSBmZDsKIApAQCAtMjI3NSw4ICsyOTEzLDEwIEBACiAgIGlmIChuYnVmcyA+IEFSUkFZX1NJWkUocmVxLT5mcy5pbmZvLmJ1ZnNtbCkpCiAgICAgcmVxLT5mcy5pbmZvLmJ1ZnMgPSB1dl9fbWFsbG9jKG5idWZzICogc2l6ZW9mKCpidWZzKSk7CiAKLSAgaWYgKHJlcS0+ZnMuaW5mby5idWZzID09IE5VTEwpCisgIGlmIChyZXEtPmZzLmluZm8uYnVmcyA9PSBOVUxMKSB7CisgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VOT01FTSwgRVJST1JfT1VUT0ZNRU1PUlkpOwogICAgIHJldHVybiBVVl9FTk9NRU07CisgIH0KIAogICBtZW1jcHkocmVxLT5mcy5pbmZvLmJ1ZnMsIGJ1ZnMsIG5idWZzICogc2l6ZW9mKCpidWZzKSk7CiAKQEAgLTIyOTQsOCArMjkzNCwxMCBAQAogICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CiAgIElOSVQoVVZfRlNfV1JJVEUpOwogCi0gIGlmIChidWZzID09IE5VTEwgfHwgbmJ1ZnMgPT0gMCkKKyAgaWYgKGJ1ZnMgPT0gTlVMTCB8fCBuYnVmcyA9PSAwKSB7CisgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VJTlZBTCwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOwogICAgIHJldHVybiBVVl9FSU5WQUw7CisgIH0KIAogICByZXEtPmZpbGUuZmQgPSBmZDsKIApAQCAtMjMwNCw4ICsyOTQ2LDEwIEBACiAgIGlmIChuYnVmcyA+IEFSUkFZX1NJWkUocmVxLT5mcy5pbmZvLmJ1ZnNtbCkpCiAgICAgcmVxLT5mcy5pbmZvLmJ1ZnMgPSB1dl9fbWFsbG9jKG5idWZzICogc2l6ZW9mKCpidWZzKSk7CiAKLSAgaWYgKHJlcS0+ZnMuaW5mby5idWZzID09IE5VTEwpCisgIGlmIChyZXEtPmZzLmluZm8uYnVmcyA9PSBOVUxMKSB7CisgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VOT01FTSwgRVJST1JfT1VUT0ZNRU1PUlkpOwogICAgIHJldHVybiBVVl9FTk9NRU07CisgIH0KIAogICBtZW1jcHkocmVxLT5mcy5pbmZvLmJ1ZnMsIGJ1ZnMsIG5idWZzICogc2l6ZW9mKCpidWZzKSk7CiAKQEAgLTIzMjEsNyArMjk2NSw4IEBACiAgIElOSVQoVVZfRlNfVU5MSU5LKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICBQT1NUOwpAQCAtMjMzNSw3ICsyOTgwLDggQEAKICAgSU5JVChVVl9GU19NS0RJUik7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKICAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OwogICB9CiAKICAgcmVxLT5mcy5pbmZvLm1vZGUgPSBtb2RlOwpAQCAtMjM0MywxNCArMjk4OSwzNSBAQAogfQogCiAKLWludCB1dl9mc19ta2R0ZW1wKHV2X2xvb3BfdCogbG9vcCwgdXZfZnNfdCogcmVxLCBjb25zdCBjaGFyKiB0cGwsCi0gICAgdXZfZnNfY2IgY2IpIHsKK2ludCB1dl9mc19ta2R0ZW1wKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgIHV2X2ZzX3QqIHJlcSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRwbCwKKyAgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CiAgIGludCBlcnI7CiAKICAgSU5JVChVVl9GU19NS0RURU1QKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHRwbCwgTlVMTCwgVFJVRSk7Ci0gIGlmIChlcnIpCi0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgaWYgKGVycikgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKKyAgfQorCisgIFBPU1Q7Cit9CisKKworaW50IHV2X2ZzX21rc3RlbXAodXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdHBsLAorICAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpIHsKKyAgaW50IGVycjsKKworICBJTklUKFVWX0ZTX01LU1RFTVApOworICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgdHBsLCBOVUxMLCBUUlVFKTsKKyAgaWYgKGVycikgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKKyAgfQogCiAgIFBPU1Q7CiB9CkBAIC0yMzYyLDcgKzMwMjksOCBAQAogICBJTklUKFVWX0ZTX1JNRElSKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICBQT1NUOwpAQCAtMjM3Niw3ICszMDQ0LDggQEAKICAgSU5JVChVVl9GU19TQ0FORElSKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICByZXEtPmZzLmluZm8uZmlsZV9mbGFncyA9IGZsYWdzOwpAQCAtMjM5MSw4ICszMDYwLDEwIEBACiAKICAgSU5JVChVVl9GU19PUEVORElSKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwotICBpZiAoZXJyKQotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgIGlmIChlcnIpIHsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CisgIH0KICAgUE9TVDsKIH0KIApAQCAtMjQwNSw2ICszMDc2LDcgQEAKICAgaWYgKGRpciA9PSBOVUxMIHx8CiAgICAgICBkaXItPmRpcmVudHMgPT0gTlVMTCB8fAogICAgICAgZGlyLT5kaXJfaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VJTlZBTCwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOwogICAgIHJldHVybiBVVl9FSU5WQUw7CiAgIH0KIApAQCAtMjQxNyw4ICszMDg5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgdXZfZGlyX3QqIGRpciwKICAgICAgICAgICAgICAgICAgICB1dl9mc19jYiBjYikgewogICBJTklUKFVWX0ZTX0NMT1NFRElSKTsKLSAgaWYgKGRpciA9PSBOVUxMKQorICBpZiAoZGlyID09IE5VTEwpIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRUlOVkFMLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKKyAgfQogICByZXEtPnB0ciA9IGRpcjsKICAgUE9TVDsKIH0KQEAgLTI0MzAsNyArMzEwNCw4IEBACiAgIElOSVQoVVZfRlNfTElOSyk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBuZXdfcGF0aCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yNDQ0LDcgKzMxMTksOCBAQAogICBJTklUKFVWX0ZTX1NZTUxJTkspOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgbmV3X3BhdGgsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICByZXEtPmZzLmluZm8uZmlsZV9mbGFncyA9IGZsYWdzOwpAQCAtMjQ1OSw3ICszMTM1LDggQEAKICAgSU5JVChVVl9GU19SRUFETElOSyk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKICAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OwogICB9CiAKICAgUE9TVDsKQEAgLTI0NzMsMTIgKzMxNTAsMTQgQEAKICAgSU5JVChVVl9GU19SRUFMUEFUSCk7CiAKICAgaWYgKCFwYXRoKSB7CisgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VJTlZBTCwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOwogICAgIHJldHVybiBVVl9FSU5WQUw7CiAgIH0KIAogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yNDkyLDcgKzMxNzEsOCBAQAogICBJTklUKFVWX0ZTX0NIT1dOKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICBQT1NUOwpAQCAtMjUxMyw4ICszMTkzLDEwIEBACiAgIElOSVQoVVZfRlNfTENIT1dOKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KKwogICBQT1NUOwogfQogCkBAIC0yNTI1LDcgKzMyMDcsOCBAQAogICBJTklUKFVWX0ZTX1NUQVQpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yNTM4LDcgKzMyMjEsOCBAQAogICBJTklUKFVWX0ZTX0xTVEFUKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICBQT1NUOwpAQCAtMjU1OSw3ICszMjQzLDggQEAKICAgSU5JVChVVl9GU19SRU5BTUUpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgbmV3X3BhdGgsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICBQT1NUOwpAQCAtMjYwMiwxMyArMzI4NywxNSBAQAogICBpZiAoZmxhZ3MgJiB+KFVWX0ZTX0NPUFlGSUxFX0VYQ0wgfAogICAgICAgICAgICAgICAgIFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkUgfAogICAgICAgICAgICAgICAgIFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0UpKSB7CisgICAgU0VUX1JFUV9VVl9FUlJPUihyZXEsIFVWX0VJTlZBTCwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOwogICAgIHJldHVybiBVVl9FSU5WQUw7CiAgIH0KIAogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgbmV3X3BhdGgsIGNiICE9IE5VTEwpOwotCi0gIGlmIChlcnIpCi0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgaWYgKGVycikgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKKyAgfQogCiAgIHJlcS0+ZnMuaW5mby5maWxlX2ZsYWdzID0gZmxhZ3M7CiAgIFBPU1Q7CkBAIC0yNjM1LDggKzMzMjIsMTAgQEAKIAogICBJTklUKFVWX0ZTX0FDQ0VTUyk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKLSAgaWYgKGVycikKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICBpZiAoZXJyKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OworICB9CiAKICAgcmVxLT5mcy5pbmZvLm1vZGUgPSBmbGFnczsKICAgUE9TVDsKQEAgLTI2NTAsNyArMzMzOSw4IEBACiAgIElOSVQoVVZfRlNfQ0hNT0QpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIHJlcS0+ZnMuaW5mby5tb2RlID0gbW9kZTsKQEAgLTI2NzQsNyArMzM2NCw4IEBACiAgIElOSVQoVVZfRlNfVVRJTUUpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIHJlcS0+ZnMudGltZS5hdGltZSA9IGF0aW1lOwpAQCAtMjY5MSwzICszMzgyLDQwIEBACiAgIHJlcS0+ZnMudGltZS5tdGltZSA9IG10aW1lOwogICBQT1NUOwogfQorCitpbnQgdXZfZnNfbHV0aW1lKHV2X2xvb3BfdCogbG9vcCwgdXZfZnNfdCogcmVxLCBjb25zdCBjaGFyKiBwYXRoLCBkb3VibGUgYXRpbWUsCisgICAgZG91YmxlIG10aW1lLCB1dl9mc19jYiBjYikgeworICBpbnQgZXJyOworCisgIElOSVQoVVZfRlNfTFVUSU1FKTsKKyAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOworICBpZiAoZXJyKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OworICB9CisKKyAgcmVxLT5mcy50aW1lLmF0aW1lID0gYXRpbWU7CisgIHJlcS0+ZnMudGltZS5tdGltZSA9IG10aW1lOworICBQT1NUOworfQorCisKK2ludCB1dl9mc19zdGF0ZnModXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCisgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CisgIGludCBlcnI7CisKKyAgSU5JVChVVl9GU19TVEFURlMpOworICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CisgIGlmIChlcnIpIHsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CisgIH0KKworICBQT1NUOworfQorCitpbnQgdXZfZnNfZ2V0X3N5c3RlbV9lcnJvcihjb25zdCB1dl9mc190KiByZXEpIHsKKyAgcmV0dXJuIHJlcS0+c3lzX2Vycm5vXzsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vaW50ZXJuYWwuaCBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vaW50ZXJuYWwuaAppbmRleCBmN2Q4Y2NmLi40NjNlZjMzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ludGVybmFsLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9pbnRlcm5hbC5oCkBAIC0yODQsNiArMjg0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbmFtZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWxheWVkX2Vycm9yKTsKIAoraW50IHV2X19yYW5kb21fcnRsZ2VucmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisKIAogLyoKICAqIFByb2Nlc3Mgc3RkaW8gaGFuZGxlcy4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vcGlwZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9waXBlLmMKaW5kZXggMjc3ZjY0OS4uZmMwMTEyYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9waXBlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9waXBlLmMKQEAgLTI2NCw4ICsyNjQsOSBAQAogICBEV09SRCBjdXJyZW50X21vZGUgPSAwOwogICBEV09SRCBlcnIgPSAwOwogCi0gIGlmICghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfUElQRVNFUlZFUikgJiYKLSAgICAgIGhhbmRsZS0+aGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9QSVBFU0VSVkVSKQorICAgIHJldHVybiBVVl9FSU5WQUw7CisgIGlmIChoYW5kbGUtPmhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKICAgICByZXR1cm4gVVZfRUJVU1k7CiAKICAgaWYgKCFTZXROYW1lZFBpcGVIYW5kbGVTdGF0ZShwaXBlSGFuZGxlLCAmbW9kZSwgTlVMTCwgTlVMTCkpIHsKQEAgLTMxMiw3ICszMTMsNyBAQAogICAgIC8qIE92ZXJsYXBwZWQgcGlwZS4gIFRyeSB0byBhc3NvY2lhdGUgd2l0aCBJT0NQLiAqLwogICAgIGlmIChDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KHBpcGVIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcC0+aW9jcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUxPTkdfUFRSKWhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUxPTkdfUFRSKSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT0gTlVMTCkgewogICAgICAgaGFuZGxlLT5mbGFncyB8PSBVVl9IQU5ETEVfRU1VTEFURV9JT0NQOwogICAgIH0KQEAgLTMyNiw2ICszMjcsMzggQEAKIH0KIAogCitzdGF0aWMgaW50IHBpcGVfYWxsb2NfYWNjZXB0KHV2X2xvb3BfdCogbG9vcCwgdXZfcGlwZV90KiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X3BpcGVfYWNjZXB0X3QqIHJlcSwgQk9PTCBmaXJzdEluc3RhbmNlKSB7CisgIGFzc2VydChyZXEtPnBpcGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpOworCisgIHJlcS0+cGlwZUhhbmRsZSA9CisgICAgICBDcmVhdGVOYW1lZFBpcGVXKGhhbmRsZS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUElQRV9BQ0NFU1NfRFVQTEVYIHwgRklMRV9GTEFHX09WRVJMQVBQRUQgfCBXUklURV9EQUMgfAorICAgICAgICAgICAgICAgICAgICAgICAgIChmaXJzdEluc3RhbmNlID8gRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UgOiAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgUElQRV9UWVBFX0JZVEUgfCBQSVBFX1JFQURNT0RFX0JZVEUgfCBQSVBFX1dBSVQsCisgICAgICAgICAgICAgICAgICAgICAgIFBJUEVfVU5MSU1JVEVEX0lOU1RBTkNFUywgNjU1MzYsIDY1NTM2LCAwLCBOVUxMKTsKKworICBpZiAocmVxLT5waXBlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBBc3NvY2lhdGUgaXQgd2l0aCBJT0NQIHNvIHdlIGNhbiBnZXQgZXZlbnRzLiAqLworICBpZiAoQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChyZXEtPnBpcGVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AtPmlvY3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVTE9OR19QVFIpIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT0gTlVMTCkgeworICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiQ3JlYXRlSW9Db21wbGV0aW9uUG9ydCIpOworICB9CisKKyAgLyogU3Rhc2ggYSBoYW5kbGUgaW4gdGhlIHNlcnZlciBvYmplY3QgZm9yIHVzZSBmcm9tIHBsYWNlcyBzdWNoIGFzCisgICAqIGdldHNvY2tuYW1lIGFuZCBjaG1vZC4gQXMgd2UgdHJhbnNmZXIgb3duZXJzaGlwIG9mIHRoZXNlIHRvIGNsaWVudAorICAgKiBvYmplY3RzLCB3ZSdsbCBhbGxvY2F0ZSBuZXcgb25lcyBoZXJlLiAqLworICBoYW5kbGUtPmhhbmRsZSA9IHJlcS0+cGlwZUhhbmRsZTsKKworICByZXR1cm4gMTsKK30KKworCiBzdGF0aWMgRFdPUkQgV0lOQVBJIHBpcGVfc2h1dGRvd25fdGhyZWFkX3Byb2Modm9pZCogcGFyYW1ldGVyKSB7CiAgIHV2X2xvb3BfdCogbG9vcDsKICAgdXZfcGlwZV90KiBoYW5kbGU7CkBAIC00NTgsNyArNDkxLDcgQEAKICAgICAgICAgICBVbnJlZ2lzdGVyV2FpdChoYW5kbGUtPnJlYWRfcmVxLndhaXRfaGFuZGxlKTsKICAgICAgICAgICBoYW5kbGUtPnJlYWRfcmVxLndhaXRfaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlKSB7CisgICAgICAgIGlmIChoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSAhPSBOVUxMKSB7CiAgICAgICAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUpOwogICAgICAgICAgIGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlID0gTlVMTDsKICAgICAgICAgfQpAQCAtNTQwLDEzICs1NzMsMTAgQEAKICAgICogQXR0ZW1wdCB0byBjcmVhdGUgdGhlIGZpcnN0IHBpcGUgd2l0aCBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRS4KICAgICogSWYgdGhpcyBmYWlscyB0aGVuIHRoZXJlJ3MgYWxyZWFkeSBhIHBpcGUgc2VydmVyIGZvciB0aGUgZ2l2ZW4gcGlwZSBuYW1lLgogICAgKi8KLSAgaGFuZGxlLT5waXBlLnNlcnYuYWNjZXB0X3JlcXNbMF0ucGlwZUhhbmRsZSA9IENyZWF0ZU5hbWVkUGlwZVcoaGFuZGxlLT5uYW1lLAotICAgICAgUElQRV9BQ0NFU1NfRFVQTEVYIHwgRklMRV9GTEFHX09WRVJMQVBQRUQgfAotICAgICAgRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UgfCBXUklURV9EQUMsCi0gICAgICBQSVBFX1RZUEVfQllURSB8IFBJUEVfUkVBRE1PREVfQllURSB8IFBJUEVfV0FJVCwKLSAgICAgIFBJUEVfVU5MSU1JVEVEX0lOU1RBTkNFUywgNjU1MzYsIDY1NTM2LCAwLCBOVUxMKTsKLQotICBpZiAoaGFuZGxlLT5waXBlLnNlcnYuYWNjZXB0X3JlcXNbMF0ucGlwZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICBpZiAoIXBpcGVfYWxsb2NfYWNjZXB0KGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUtPnBpcGUuc2Vydi5hY2NlcHRfcmVxc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKSkgewogICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgIGlmIChlcnIgPT0gRVJST1JfQUNDRVNTX0RFTklFRCkgewogICAgICAgZXJyID0gV1NBRUFERFJJTlVTRTsgIC8qIFRyYW5zbGF0ZXMgdG8gVVZfRUFERFJJTlVTRS4gKi8KQEAgLTU1NiwxNSArNTg2LDYgQEAKICAgICBnb3RvIGVycm9yOwogICB9CiAKLSAgaWYgKHV2X3NldF9waXBlX2hhbmRsZShsb29wLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnBpcGUuc2Vydi5hY2NlcHRfcmVxc1swXS5waXBlSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgIDApKSB7Ci0gICAgZXJyID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCiAgIGhhbmRsZS0+cGlwZS5zZXJ2LnBlbmRpbmdfYWNjZXB0cyA9IE5VTEw7CiAgIGhhbmRsZS0+ZmxhZ3MgfD0gVVZfSEFORExFX1BJUEVTRVJWRVI7CiAgIGhhbmRsZS0+ZmxhZ3MgfD0gVVZfSEFORExFX0JPVU5EOwpAQCAtNTc3LDExICs1OTgsNiBAQAogICAgIGhhbmRsZS0+bmFtZSA9IE5VTEw7CiAgIH0KIAotICBpZiAoaGFuZGxlLT5waXBlLnNlcnYuYWNjZXB0X3JlcXNbMF0ucGlwZUhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgIENsb3NlSGFuZGxlKGhhbmRsZS0+cGlwZS5zZXJ2LmFjY2VwdF9yZXFzWzBdLnBpcGVIYW5kbGUpOwotICAgIGhhbmRsZS0+cGlwZS5zZXJ2LmFjY2VwdF9yZXFzWzBdLnBpcGVIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLSAgfQotCiAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CiB9CiAKQEAgLTgyNywyOSArODQzLDExIEBACiAgICAgdXZfcGlwZV9hY2NlcHRfdCogcmVxLCBCT09MIGZpcnN0SW5zdGFuY2UpIHsKICAgYXNzZXJ0KGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfTElTVEVOSU5HKTsKIAotICBpZiAoIWZpcnN0SW5zdGFuY2UpIHsKLSAgICBhc3NlcnQocmVxLT5waXBlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKTsKLQotICAgIHJlcS0+cGlwZUhhbmRsZSA9IENyZWF0ZU5hbWVkUGlwZVcoaGFuZGxlLT5uYW1lLAotICAgICAgICBQSVBFX0FDQ0VTU19EVVBMRVggfCBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCB8IFdSSVRFX0RBQywKLSAgICAgICAgUElQRV9UWVBFX0JZVEUgfCBQSVBFX1JFQURNT0RFX0JZVEUgfCBQSVBFX1dBSVQsCi0gICAgICAgIFBJUEVfVU5MSU1JVEVEX0lOU1RBTkNFUywgNjU1MzYsIDY1NTM2LCAwLCBOVUxMKTsKLQotICAgIGlmIChyZXEtPnBpcGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgIFNFVF9SRVFfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICB1dl9pbnNlcnRfcGVuZGluZ19yZXEobG9vcCwgKHV2X3JlcV90KikgcmVxKTsKLSAgICAgIGhhbmRsZS0+cmVxc19wZW5kaW5nKys7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHV2X3NldF9waXBlX2hhbmRsZShsb29wLCBoYW5kbGUsIHJlcS0+cGlwZUhhbmRsZSwgLTEsIDApKSB7Ci0gICAgICBDbG9zZUhhbmRsZShyZXEtPnBpcGVIYW5kbGUpOwotICAgICAgcmVxLT5waXBlSGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgICBTRVRfUkVRX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgdXZfaW5zZXJ0X3BlbmRpbmdfcmVxKGxvb3AsICh1dl9yZXFfdCopIHJlcSk7Ci0gICAgICBoYW5kbGUtPnJlcXNfcGVuZGluZysrOwotICAgICAgcmV0dXJuOwotICAgIH0KKyAgaWYgKCFmaXJzdEluc3RhbmNlICYmICFwaXBlX2FsbG9jX2FjY2VwdChsb29wLCBoYW5kbGUsIHJlcSwgRkFMU0UpKSB7CisgICAgU0VUX1JFUV9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICB1dl9pbnNlcnRfcGVuZGluZ19yZXEobG9vcCwgKHV2X3JlcV90KikgcmVxKTsKKyAgICBoYW5kbGUtPnJlcXNfcGVuZGluZysrOworICAgIHJldHVybjsKICAgfQogCiAgIGFzc2VydChyZXEtPnBpcGVIYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpOwpAQCAtOTA0LDcgKzkwMiw3IEBACiAgICAgdXZfX2ZyZWUoaXRlbSk7CiAKICAgfSBlbHNlIHsKLSAgICBwaXBlX2NsaWVudCA9ICh1dl9waXBlX3QqKWNsaWVudDsKKyAgICBwaXBlX2NsaWVudCA9ICh1dl9waXBlX3QqKSBjbGllbnQ7CiAKICAgICAvKiBGaW5kIGEgY29ubmVjdGlvbiBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGNvbm5lY3RlZCwgYnV0IG5vdCB5ZXQKICAgICAgKiBhY2NlcHRlZC4gKi8KQEAgLTkyNSw2ICs5MjMsNyBAQAogICAgIHJlcS0+bmV4dF9wZW5kaW5nID0gTlVMTDsKICAgICByZXEtPnBpcGVIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIAorICAgIHNlcnZlci0+aGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgICAgaWYgKCEoc2VydmVyLT5mbGFncyAmIFVWX0hBTkRMRV9DTE9TSU5HKSkgewogICAgICAgdXZfcGlwZV9xdWV1ZV9hY2NlcHQobG9vcCwgc2VydmVyLCByZXEsIEZBTFNFKTsKICAgICB9CkBAIC05NTUsNiArOTU0LDEwIEBACiAgICAgcmV0dXJuIEVSUk9SX05PVF9TVVBQT1JURUQ7CiAgIH0KIAorICBpZiAoaGFuZGxlLT5pcGMpIHsKKyAgICByZXR1cm4gV1NBRUlOVkFMOworICB9CisKICAgaGFuZGxlLT5mbGFncyB8PSBVVl9IQU5ETEVfTElTVEVOSU5HOwogICBJTkNSRUFTRV9BQ1RJVkVfQ09VTlQobG9vcCwgaGFuZGxlKTsKICAgaGFuZGxlLT5zdHJlYW0uc2Vydi5jb25uZWN0aW9uX2NiID0gY2I7CkBAIC0xMTMxLDYgKzExMzQsNyBAQAogICB9IGVsc2UgewogICAgIG1lbXNldCgmcmVxLT51LmlvLm92ZXJsYXBwZWQsIDAsIHNpemVvZihyZXEtPnUuaW8ub3ZlcmxhcHBlZCkpOwogICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCkgeworICAgICAgYXNzZXJ0KHJlcS0+ZXZlbnRfaGFuZGxlICE9IE5VTEwpOwogICAgICAgcmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50ID0gKEhBTkRMRSkgKCh1aW50cHRyX3QpIHJlcS0+ZXZlbnRfaGFuZGxlIHwgMSk7CiAgICAgfQogCkBAIC0xMTQ4LDE1ICsxMTUyLDkgQEAKICAgICB9CiAKICAgICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9FTVVMQVRFX0lPQ1ApIHsKLSAgICAgIGlmICghcmVxLT5ldmVudF9oYW5kbGUpIHsKLSAgICAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCAwLCAwLCBOVUxMKTsKLSAgICAgICAgaWYgKCFyZXEtPmV2ZW50X2hhbmRsZSkgewotICAgICAgICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiQ3JlYXRlRXZlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQogICAgICAgaWYgKHJlcS0+d2FpdF9oYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKICAgICAgICAgaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoJnJlcS0+d2FpdF9oYW5kbGUsCi0gICAgICAgICAgICByZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQsIHBvc3RfY29tcGxldGlvbl9yZWFkX3dhaXQsICh2b2lkKikgcmVxLAorICAgICAgICAgICAgcmVxLT5ldmVudF9oYW5kbGUsIHBvc3RfY29tcGxldGlvbl9yZWFkX3dhaXQsICh2b2lkKikgcmVxLAogICAgICAgICAgICAgSU5GSU5JVEUsIFdUX0VYRUNVVEVJTldBSVRUSFJFQUQpKSB7CiAgICAgICAgICAgU0VUX1JFUV9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTE5MCw4ICsxMTg4LDE2IEBACiAKICAgLyogSWYgcmVhZGluZyB3YXMgc3RvcHBlZCBhbmQgdGhlbiBzdGFydGVkIGFnYWluLCB0aGVyZSBjb3VsZCBzdGlsbCBiZSBhIHJlYWQKICAgICogcmVxdWVzdCBwZW5kaW5nLiAqLwotICBpZiAoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1JFQURfUEVORElORykpCisgIGlmICghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfUkVBRF9QRU5ESU5HKSkgeworICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCAmJgorICAgICAgICBoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSA9PSBOVUxMKSB7CisgICAgICBoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSA9IENyZWF0ZUV2ZW50KE5VTEwsIDAsIDAsIE5VTEwpOworICAgICAgaWYgKGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAgdXZfZmF0YWxfZXJyb3IoR2V0TGFzdEVycm9yKCksICJDcmVhdGVFdmVudCIpOworICAgICAgfQorICAgIH0KICAgICB1dl9waXBlX3F1ZXVlX3JlYWQobG9vcCwgaGFuZGxlKTsKKyAgfQogCiAgIHJldHVybiAwOwogfQpAQCAtMTMyNiw3ICsxMzMyLDE2IEBACiAgIHJlcS0+Y29hbGVzY2VkID0gMDsKICAgcmVxLT5ldmVudF9oYW5kbGUgPSBOVUxMOwogICByZXEtPndhaXRfaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisKKyAgLyogUHJlcGFyZSB0aGUgb3ZlcmxhcHBlZCBzdHJ1Y3R1cmUuICovCiAgIG1lbXNldCgmcmVxLT51LmlvLm92ZXJsYXBwZWQsIDAsIHNpemVvZihyZXEtPnUuaW8ub3ZlcmxhcHBlZCkpOworICBpZiAoaGFuZGxlLT5mbGFncyAmIChVVl9IQU5ETEVfRU1VTEFURV9JT0NQIHwgVVZfSEFORExFX0JMT0NLSU5HX1dSSVRFUykpIHsKKyAgICByZXEtPmV2ZW50X2hhbmRsZSA9IENyZWF0ZUV2ZW50KE5VTEwsIDAsIDAsIE5VTEwpOworICAgIGlmIChyZXEtPmV2ZW50X2hhbmRsZSA9PSBOVUxMKSB7CisgICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkNyZWF0ZUV2ZW50Iik7CisgICAgfQorICAgIHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCA9IChIQU5ETEUpICgodWludHB0cl90KSByZXEtPmV2ZW50X2hhbmRsZSB8IDEpOworICB9CiAgIHJlcS0+d3JpdGVfYnVmZmVyID0gdXZfbnVsbF9idWZfOwogCiAgIGlmIChuYnVmcyA9PSAwKSB7CkBAIC0xMzc1LDExICsxMzkwLDYgQEAKICAgICBoYW5kbGUtPndyaXRlX3F1ZXVlX3NpemUgKz0gcmVxLT51LmlvLnF1ZXVlZF9ieXRlczsKICAgfSBlbHNlIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0JMT0NLSU5HX1dSSVRFUykgewogICAgIC8qIFVzaW5nIG92ZXJsYXBwZWQgSU8sIGJ1dCB3YWl0IGZvciBjb21wbGV0aW9uIGJlZm9yZSByZXR1cm5pbmcgKi8KLSAgICByZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCAxLCAwLCBOVUxMKTsKLSAgICBpZiAoIXJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCkgewotICAgICAgdXZfZmF0YWxfZXJyb3IoR2V0TGFzdEVycm9yKCksICJDcmVhdGVFdmVudCIpOwotICAgIH0KLQogICAgIHJlc3VsdCA9IFdyaXRlRmlsZShoYW5kbGUtPmhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfYnVmLmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2J1Zi5sZW4sCkBAIC0xMzg4LDcgKzEzOTgsOCBAQAogCiAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU9fUEVORElORykgewogICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICBDbG9zZUhhbmRsZShyZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQpOworICAgICAgQ2xvc2VIYW5kbGUocmVxLT5ldmVudF9oYW5kbGUpOworICAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBOVUxMOwogICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKQEAgLTEzOTksMTQgKzE0MTAsMTYgQEAKICAgICAgIC8qIFJlcXVlc3QgcXVldWVkIGJ5IHRoZSBrZXJuZWwuICovCiAgICAgICByZXEtPnUuaW8ucXVldWVkX2J5dGVzID0gd3JpdGVfYnVmLmxlbjsKICAgICAgIGhhbmRsZS0+d3JpdGVfcXVldWVfc2l6ZSArPSByZXEtPnUuaW8ucXVldWVkX2J5dGVzOwotICAgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3QocmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50LCBJTkZJTklURSkgIT0KKyAgICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHJlcS0+ZXZlbnRfaGFuZGxlLCBJTkZJTklURSkgIT0KICAgICAgICAgICBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwotICAgICAgICBDbG9zZUhhbmRsZShyZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQpOworICAgICAgICBDbG9zZUhhbmRsZShyZXEtPmV2ZW50X2hhbmRsZSk7CisgICAgICAgIHJlcS0+ZXZlbnRfaGFuZGxlID0gTlVMTDsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgIH0KICAgICB9Ci0gICAgQ2xvc2VIYW5kbGUocmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICBDbG9zZUhhbmRsZShyZXEtPmV2ZW50X2hhbmRsZSk7CisgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBOVUxMOwogCiAgICAgUkVHSVNURVJfSEFORExFX1JFUShsb29wLCBoYW5kbGUsIHJlcSk7CiAgICAgaGFuZGxlLT5yZXFzX3BlbmRpbmcrKzsKQEAgLTE0MzMsMTIgKzE0NDYsOCBAQAogICAgIH0KIAogICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCkgewotICAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCAwLCAwLCBOVUxMKTsKLSAgICAgIGlmICghcmVxLT5ldmVudF9oYW5kbGUpIHsKLSAgICAgICAgdXZfZmF0YWxfZXJyb3IoR2V0TGFzdEVycm9yKCksICJDcmVhdGVFdmVudCIpOwotICAgICAgfQogICAgICAgaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoJnJlcS0+d2FpdF9oYW5kbGUsCi0gICAgICAgICAgcmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50LCBwb3N0X2NvbXBsZXRpb25fd3JpdGVfd2FpdCwgKHZvaWQqKSByZXEsCisgICAgICAgICAgcmVxLT5ldmVudF9oYW5kbGUsIHBvc3RfY29tcGxldGlvbl93cml0ZV93YWl0LCAodm9pZCopIHJlcSwKICAgICAgICAgICBJTkZJTklURSwgV1RfRVhFQ1VURUlOV0FJVFRIUkVBRCkpIHsKICAgICAgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9wb2xsLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3BvbGwuYwppbmRleCAzYzY2Nzg2Li44Nzg1ODU5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3BvbGwuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3BvbGwuYwpAQCAtMTM0LDMyICsxMzQsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgdXZfX2Zhc3RfcG9sbF9jYW5jZWxfcG9sbF9yZXEodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSkgewotICBBRkRfUE9MTF9JTkZPIGFmZF9wb2xsX2luZm87Ci0gIGludCByZXN1bHQ7Ci0KLSAgYWZkX3BvbGxfaW5mby5FeGNsdXNpdmUgPSBUUlVFOwotICBhZmRfcG9sbF9pbmZvLk51bWJlck9mSGFuZGxlcyA9IDE7Ci0gIGFmZF9wb2xsX2luZm8uVGltZW91dC5RdWFkUGFydCA9IElOVDY0X01BWDsKLSAgYWZkX3BvbGxfaW5mby5IYW5kbGVzWzBdLkhhbmRsZSA9IChIQU5ETEUpIGhhbmRsZS0+c29ja2V0OwotICBhZmRfcG9sbF9pbmZvLkhhbmRsZXNbMF0uU3RhdHVzID0gMDsKLSAgYWZkX3BvbGxfaW5mby5IYW5kbGVzWzBdLkV2ZW50cyA9IEFGRF9QT0xMX0FMTDsKLQotICByZXN1bHQgPSB1dl9tc2FmZF9wb2xsKGhhbmRsZS0+c29ja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICZhZmRfcG9sbF9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV2X19nZXRfYWZkX3BvbGxfaW5mb19kdW1teSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV2X19nZXRfb3ZlcmxhcHBlZF9kdW1teSgpKTsKLQotICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikgewotICAgIERXT1JEIGVycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7Ci0gICAgaWYgKGVycm9yICE9IFdTQV9JT19QRU5ESU5HKQotICAgICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIHZvaWQgdXZfX2Zhc3RfcG9sbF9wcm9jZXNzX3BvbGxfcmVxKHV2X2xvb3BfdCogbG9vcCwgdXZfcG9sbF90KiBoYW5kbGUsCiAgICAgdXZfcmVxX3QqIHJlcSkgewogICB1bnNpZ25lZCBjaGFyIG1hc2tfZXZlbnRzOwpAQCAtMjI2LDQ0ICsyMDAsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgdXZfX2Zhc3RfcG9sbF9zZXQodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSwgaW50IGV2ZW50cykgewotICBhc3NlcnQoaGFuZGxlLT50eXBlID09IFVWX1BPTEwpOwotICBhc3NlcnQoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0NMT1NJTkcpKTsKLSAgYXNzZXJ0KChldmVudHMgJiB+KFVWX1JFQURBQkxFIHwgVVZfV1JJVEFCTEUgfCBVVl9ESVNDT05ORUNUKSkgPT0gMCk7Ci0KLSAgaGFuZGxlLT5ldmVudHMgPSBldmVudHM7Ci0KLSAgaWYgKGhhbmRsZS0+ZXZlbnRzICE9IDApIHsKLSAgICB1dl9faGFuZGxlX3N0YXJ0KGhhbmRsZSk7Ci0gIH0gZWxzZSB7Ci0gICAgdXZfX2hhbmRsZV9zdG9wKGhhbmRsZSk7Ci0gIH0KLQotICBpZiAoKGhhbmRsZS0+ZXZlbnRzICYgfihoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMSB8Ci0gICAgICBoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMikpICE9IDApIHsKLSAgICB1dl9fZmFzdF9wb2xsX3N1Ym1pdF9wb2xsX3JlcShoYW5kbGUtPmxvb3AsIGhhbmRsZSk7Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHV2X19mYXN0X3BvbGxfY2xvc2UodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSkgewotICBoYW5kbGUtPmV2ZW50cyA9IDA7Ci0gIHV2X19oYW5kbGVfY2xvc2luZyhoYW5kbGUpOwotCi0gIGlmIChoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMSA9PSAwICYmCi0gICAgICBoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMiA9PSAwKSB7Ci0gICAgdXZfd2FudF9lbmRnYW1lKGxvb3AsICh1dl9oYW5kbGVfdCopIGhhbmRsZSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQ2FuY2VsIG91dHN0YW5kaW5nIHBvbGwgcmVxdWVzdHMgYnkgZXhlY3V0aW5nIGFub3RoZXIsIHVuaXF1ZSBwb2xsCi0gICAgICogcmVxdWVzdCB0aGF0IGZvcmNlcyB0aGUgb3V0c3RhbmRpbmcgb25lcyB0byByZXR1cm4uICovCi0gICAgcmV0dXJuIHV2X19mYXN0X3BvbGxfY2FuY2VsX3BvbGxfcmVxKGxvb3AsIGhhbmRsZSk7Ci0gIH0KLX0KLQotCiBzdGF0aWMgU09DS0VUIHV2X19mYXN0X3BvbGxfY3JlYXRlX3BlZXJfc29ja2V0KEhBTkRMRSBpb2NwLAogICAgIFdTQVBST1RPQ09MX0lORk9XKiBwcm90b2NvbF9pbmZvKSB7CiAgIFNPQ0tFVCBzb2NrID0gMDsKQEAgLTQ2OSw0MSArNDA1LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IHV2X19zbG93X3BvbGxfc2V0KHV2X2xvb3BfdCogbG9vcCwgdXZfcG9sbF90KiBoYW5kbGUsIGludCBldmVudHMpIHsKLSAgYXNzZXJ0KGhhbmRsZS0+dHlwZSA9PSBVVl9QT0xMKTsKLSAgYXNzZXJ0KCEoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9DTE9TSU5HKSk7Ci0gIGFzc2VydCgoZXZlbnRzICYgfihVVl9SRUFEQUJMRSB8IFVWX1dSSVRBQkxFKSkgPT0gMCk7Ci0KLSAgaGFuZGxlLT5ldmVudHMgPSBldmVudHM7Ci0KLSAgaWYgKGhhbmRsZS0+ZXZlbnRzICE9IDApIHsKLSAgICB1dl9faGFuZGxlX3N0YXJ0KGhhbmRsZSk7Ci0gIH0gZWxzZSB7Ci0gICAgdXZfX2hhbmRsZV9zdG9wKGhhbmRsZSk7Ci0gIH0KLQotICBpZiAoKGhhbmRsZS0+ZXZlbnRzICYKLSAgICAgIH4oaGFuZGxlLT5zdWJtaXR0ZWRfZXZlbnRzXzEgfCBoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMikpICE9IDApIHsKLSAgICB1dl9fc2xvd19wb2xsX3N1Ym1pdF9wb2xsX3JlcShoYW5kbGUtPmxvb3AsIGhhbmRsZSk7Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHV2X19zbG93X3BvbGxfY2xvc2UodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSkgewotICBoYW5kbGUtPmV2ZW50cyA9IDA7Ci0gIHV2X19oYW5kbGVfY2xvc2luZyhoYW5kbGUpOwotCi0gIGlmIChoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMSA9PSAwICYmCi0gICAgICBoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMiA9PSAwKSB7Ci0gICAgdXZfd2FudF9lbmRnYW1lKGxvb3AsICh1dl9oYW5kbGVfdCopIGhhbmRsZSk7Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotCiBpbnQgdXZfcG9sbF9pbml0KHV2X2xvb3BfdCogbG9vcCwgdXZfcG9sbF90KiBoYW5kbGUsIGludCBmZCkgewogICByZXR1cm4gdXZfcG9sbF9pbml0X3NvY2tldChsb29wLCBoYW5kbGUsIChTT0NLRVQpIHV2X19nZXRfb3NmaGFuZGxlKGZkKSk7CiB9CkBAIC01ODIsMzUgKzQ4Myw0MyBAQAogfQogCiAKLWludCB1dl9wb2xsX3N0YXJ0KHV2X3BvbGxfdCogaGFuZGxlLCBpbnQgZXZlbnRzLCB1dl9wb2xsX2NiIGNiKSB7Ci0gIGludCBlcnI7CitzdGF0aWMgaW50IHV2X19wb2xsX3NldCh1dl9wb2xsX3QqIGhhbmRsZSwgaW50IGV2ZW50cywgdXZfcG9sbF9jYiBjYikgeworICBpbnQgc3VibWl0dGVkX2V2ZW50czsKIAotICBpZiAoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1BPTExfU0xPVykpIHsKLSAgICBlcnIgPSB1dl9fZmFzdF9wb2xsX3NldChoYW5kbGUtPmxvb3AsIGhhbmRsZSwgZXZlbnRzKTsKLSAgfSBlbHNlIHsKLSAgICBlcnIgPSB1dl9fc2xvd19wb2xsX3NldChoYW5kbGUtPmxvb3AsIGhhbmRsZSwgZXZlbnRzKTsKLSAgfQorICBhc3NlcnQoaGFuZGxlLT50eXBlID09IFVWX1BPTEwpOworICBhc3NlcnQoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0NMT1NJTkcpKTsKKyAgYXNzZXJ0KChldmVudHMgJiB+KFVWX1JFQURBQkxFIHwgVVZfV1JJVEFCTEUgfCBVVl9ESVNDT05ORUNUKSkgPT0gMCk7CiAKLSAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7Ci0gIH0KLQorICBoYW5kbGUtPmV2ZW50cyA9IGV2ZW50czsKICAgaGFuZGxlLT5wb2xsX2NiID0gY2I7CiAKKyAgaWYgKGhhbmRsZS0+ZXZlbnRzID09IDApIHsKKyAgICB1dl9faGFuZGxlX3N0b3AoaGFuZGxlKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHV2X19oYW5kbGVfc3RhcnQoaGFuZGxlKTsKKyAgc3VibWl0dGVkX2V2ZW50cyA9IGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18xIHwgaGFuZGxlLT5zdWJtaXR0ZWRfZXZlbnRzXzI7CisKKyAgaWYgKGhhbmRsZS0+ZXZlbnRzICYgfnN1Ym1pdHRlZF9ldmVudHMpIHsKKyAgICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9QT0xMX1NMT1cpIHsKKyAgICAgIHV2X19zbG93X3BvbGxfc3VibWl0X3BvbGxfcmVxKGhhbmRsZS0+bG9vcCwgaGFuZGxlKTsKKyAgICB9IGVsc2UgeworICAgICAgdXZfX2Zhc3RfcG9sbF9zdWJtaXRfcG9sbF9yZXEoaGFuZGxlLT5sb29wLCBoYW5kbGUpOworICAgIH0KKyAgfQorCiAgIHJldHVybiAwOwogfQogCiAKK2ludCB1dl9wb2xsX3N0YXJ0KHV2X3BvbGxfdCogaGFuZGxlLCBpbnQgZXZlbnRzLCB1dl9wb2xsX2NiIGNiKSB7CisgIHJldHVybiB1dl9fcG9sbF9zZXQoaGFuZGxlLCBldmVudHMsIGNiKTsKK30KKworCiBpbnQgdXZfcG9sbF9zdG9wKHV2X3BvbGxfdCogaGFuZGxlKSB7Ci0gIGludCBlcnI7Ci0KLSAgaWYgKCEoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9QT0xMX1NMT1cpKSB7Ci0gICAgZXJyID0gdXZfX2Zhc3RfcG9sbF9zZXQoaGFuZGxlLT5sb29wLCBoYW5kbGUsIDApOwotICB9IGVsc2UgewotICAgIGVyciA9IHV2X19zbG93X3BvbGxfc2V0KGhhbmRsZS0+bG9vcCwgaGFuZGxlLCAwKTsKLSAgfQotCi0gIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgIHJldHVybiB1dl9fcG9sbF9zZXQoaGFuZGxlLCAwLCBoYW5kbGUtPnBvbGxfY2IpOwogfQogCiAKQEAgLTYyNCwxMSArNTMzLDQzIEBACiAKIAogaW50IHV2X3BvbGxfY2xvc2UodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSkgewotICBpZiAoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1BPTExfU0xPVykpIHsKLSAgICByZXR1cm4gdXZfX2Zhc3RfcG9sbF9jbG9zZShsb29wLCBoYW5kbGUpOwotICB9IGVsc2UgewotICAgIHJldHVybiB1dl9fc2xvd19wb2xsX2Nsb3NlKGxvb3AsIGhhbmRsZSk7CisgIEFGRF9QT0xMX0lORk8gYWZkX3BvbGxfaW5mbzsKKyAgRFdPUkQgZXJyb3I7CisgIGludCByZXN1bHQ7CisKKyAgaGFuZGxlLT5ldmVudHMgPSAwOworICB1dl9faGFuZGxlX2Nsb3NpbmcoaGFuZGxlKTsKKworICBpZiAoaGFuZGxlLT5zdWJtaXR0ZWRfZXZlbnRzXzEgPT0gMCAmJgorICAgICAgaGFuZGxlLT5zdWJtaXR0ZWRfZXZlbnRzXzIgPT0gMCkgeworICAgIHV2X3dhbnRfZW5kZ2FtZShsb29wLCAodXZfaGFuZGxlX3QqKSBoYW5kbGUpOworICAgIHJldHVybiAwOwogICB9CisKKyAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfUE9MTF9TTE9XKQorICAgIHJldHVybiAwOworCisgIC8qIENhbmNlbCBvdXRzdGFuZGluZyBwb2xsIHJlcXVlc3RzIGJ5IGV4ZWN1dGluZyBhbm90aGVyLCB1bmlxdWUgcG9sbAorICAgKiByZXF1ZXN0IHRoYXQgZm9yY2VzIHRoZSBvdXRzdGFuZGluZyBvbmVzIHRvIHJldHVybi4gKi8KKyAgYWZkX3BvbGxfaW5mby5FeGNsdXNpdmUgPSBUUlVFOworICBhZmRfcG9sbF9pbmZvLk51bWJlck9mSGFuZGxlcyA9IDE7CisgIGFmZF9wb2xsX2luZm8uVGltZW91dC5RdWFkUGFydCA9IElOVDY0X01BWDsKKyAgYWZkX3BvbGxfaW5mby5IYW5kbGVzWzBdLkhhbmRsZSA9IChIQU5ETEUpIGhhbmRsZS0+c29ja2V0OworICBhZmRfcG9sbF9pbmZvLkhhbmRsZXNbMF0uU3RhdHVzID0gMDsKKyAgYWZkX3BvbGxfaW5mby5IYW5kbGVzWzBdLkV2ZW50cyA9IEFGRF9QT0xMX0FMTDsKKworICByZXN1bHQgPSB1dl9tc2FmZF9wb2xsKGhhbmRsZS0+c29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICZhZmRfcG9sbF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIHV2X19nZXRfYWZkX3BvbGxfaW5mb19kdW1teSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHV2X19nZXRfb3ZlcmxhcHBlZF9kdW1teSgpKTsKKworICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikgeworICAgIGVycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgaWYgKGVycm9yICE9IFdTQV9JT19QRU5ESU5HKQorICAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyb3IpOworICB9CisKKyAgcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9wcm9jZXNzLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3Byb2Nlc3MuYwppbmRleCAyNDAzN2IzLi4wNDcxOGRiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3Byb2Nlc3MuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3Byb2Nlc3MuYwpAQCAtNTgsNyArNTgsNiBAQAogICBFX1YoIlVTRVJQUk9GSUxFIiksCiAgIEVfVigiV0lORElSIiksCiB9Owotc3RhdGljIHNpemVfdCBuX3JlcXVpcmVkX3ZhcnMgPSBBUlJBWV9TSVpFKHJlcXVpcmVkX3ZhcnMpOwogCiAKIHN0YXRpYyBIQU5ETEUgdXZfZ2xvYmFsX2pvYl9oYW5kbGVfOwpAQCAtNjkyLDcgKzY5MSw3IEBACiAgIFdDSEFSKiBkc3RfY29weTsKICAgV0NIQVIqKiBwdHJfY29weTsKICAgV0NIQVIqKiBlbnZfY29weTsKLSAgRFdPUkQqIHJlcXVpcmVkX3ZhcnNfdmFsdWVfbGVuID0gYWxsb2NhKG5fcmVxdWlyZWRfdmFycyAqIHNpemVvZihEV09SRCopKTsKKyAgRFdPUkQgcmVxdWlyZWRfdmFyc192YWx1ZV9sZW5bQVJSQVlfU0laRShyZXF1aXJlZF92YXJzKV07CiAKICAgLyogZmlyc3QgcGFzczogZGV0ZXJtaW5lIHNpemUgaW4gVVRGLTE2ICovCiAgIGZvciAoZW52ID0gZW52X2Jsb2NrOyAqZW52OyBlbnYrKykgewpAQCAtNzE0LDcgKzcxMyw3IEBACiAKICAgLyogc2Vjb25kIHBhc3M6IGNvcHkgdG8gVVRGLTE2IGVudmlyb25tZW50IGJsb2NrICovCiAgIGRzdF9jb3B5ID0gKFdDSEFSKil1dl9fbWFsbG9jKGVudl9sZW4gKiBzaXplb2YoV0NIQVIpKTsKLSAgaWYgKCFkc3RfY29weSkgeworICBpZiAoZHN0X2NvcHkgPT0gTlVMTCAmJiBlbnZfbGVuID4gMCkgewogICAgIHJldHVybiBFUlJPUl9PVVRPRk1FTU9SWTsKICAgfQogICBlbnZfY29weSA9IGFsbG9jYShlbnZfYmxvY2tfY291bnQgKiBzaXplb2YoV0NIQVIqKSk7CkBAIC03MzksMTMgKzczOCwxMyBAQAogICAgIH0KICAgfQogICAqcHRyX2NvcHkgPSBOVUxMOwotICBhc3NlcnQoZW52X2xlbiA9PSAoc2l6ZV90KSAocHRyIC0gZHN0X2NvcHkpKTsKKyAgYXNzZXJ0KGVudl9sZW4gPT0gMCB8fCBlbnZfbGVuID09IChzaXplX3QpIChwdHIgLSBkc3RfY29weSkpOwogCiAgIC8qIHNvcnQgb3VyIChVVEYtMTYpIGNvcHkgKi8KICAgcXNvcnQoZW52X2NvcHksIGVudl9ibG9ja19jb3VudC0xLCBzaXplb2Yod2NoYXJfdCopLCBxc29ydF93Y3NjbXApOwogCiAgIC8qIHRoaXJkIHBhc3M6IGNoZWNrIGZvciByZXF1aXJlZCB2YXJpYWJsZXMgKi8KLSAgZm9yIChwdHJfY29weSA9IGVudl9jb3B5LCBpID0gMDsgaSA8IG5fcmVxdWlyZWRfdmFyczsgKSB7CisgIGZvciAocHRyX2NvcHkgPSBlbnZfY29weSwgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlcXVpcmVkX3ZhcnMpOyApIHsKICAgICBpbnQgY21wOwogICAgIGlmICghKnB0cl9jb3B5KSB7CiAgICAgICBjbXAgPSAtMTsKQEAgLTc3OCwxMCArNzc3LDEwIEBACiAgIH0KIAogICBmb3IgKHB0ciA9IGRzdCwgcHRyX2NvcHkgPSBlbnZfY29weSwgaSA9IDA7Ci0gICAgICAgKnB0cl9jb3B5IHx8IGkgPCBuX3JlcXVpcmVkX3ZhcnM7CisgICAgICAgKnB0cl9jb3B5IHx8IGkgPCBBUlJBWV9TSVpFKHJlcXVpcmVkX3ZhcnMpOwogICAgICAgIHB0ciArPSBsZW4pIHsKICAgICBpbnQgY21wOwotICAgIGlmIChpID49IG5fcmVxdWlyZWRfdmFycykgeworICAgIGlmIChpID49IEFSUkFZX1NJWkUocmVxdWlyZWRfdmFycykpIHsKICAgICAgIGNtcCA9IDE7CiAgICAgfSBlbHNlIGlmICghKnB0cl9jb3B5KSB7CiAgICAgICBjbXAgPSAtMTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vc2lnbmFsLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3NpZ25hbC5jCmluZGV4IDI3NmRjNjAuLjNkOWY5MmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vc2lnbmFsLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9zaWduYWwuYwpAQCAtNDYsNiArNDYsMTEgQEAKIH0KIAogCit2b2lkIHV2X19zaWduYWxfY2xlYW51cCh2b2lkKSB7CisgIC8qIFRPRE8oYm5vb3JkaHVpcykgVW5kbyBlZmZlY3RzIG9mIHV2X3NpZ25hbF9pbml0KCk/ICovCit9CisKKwogc3RhdGljIGludCB1dl9fc2lnbmFsX2NvbXBhcmUodXZfc2lnbmFsX3QqIHcxLCB1dl9zaWduYWxfdCogdzIpIHsKICAgLyogQ29tcGFyZSBzaWdudW1zIGZpcnN0IHNvIGFsbCB3YXRjaGVycyB3aXRoIHRoZSBzYW1lIHNpZ25udW0gZW5kIHVwCiAgICAqIGFkamFjZW50LiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9zdHJlYW0uYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vc3RyZWFtLmMKaW5kZXggNzY1NjYyNy4uNDZhMDcwOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9zdHJlYW0uYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3N0cmVhbS5jCkBAIC0xOTgsOCArMTk4LDEwIEBACiBpbnQgdXZfc2h1dGRvd24odXZfc2h1dGRvd25fdCogcmVxLCB1dl9zdHJlYW1fdCogaGFuZGxlLCB1dl9zaHV0ZG93bl9jYiBjYikgewogICB1dl9sb29wX3QqIGxvb3AgPSBoYW5kbGUtPmxvb3A7CiAKLSAgaWYgKCEoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9XUklUQUJMRSkpIHsKLSAgICByZXR1cm4gVVZfRVBJUEU7CisgIGlmICghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfV1JJVEFCTEUpIHx8CisgICAgICBoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1NIVVRUSU5HIHx8CisgICAgICB1dl9faXNfY2xvc2luZyhoYW5kbGUpKSB7CisgICAgcmV0dXJuIFVWX0VOT1RDT05OOwogICB9CiAKICAgVVZfUkVRX0lOSVQocmVxLCBVVl9TSFVURE9XTik7CkBAIC0yMDcsNiArMjA5LDcgQEAKICAgcmVxLT5jYiA9IGNiOwogCiAgIGhhbmRsZS0+ZmxhZ3MgJj0gflVWX0hBTkRMRV9XUklUQUJMRTsKKyAgaGFuZGxlLT5mbGFncyB8PSBVVl9IQU5ETEVfU0hVVFRJTkc7CiAgIGhhbmRsZS0+c3RyZWFtLmNvbm4uc2h1dGRvd25fcmVxID0gcmVxOwogICBoYW5kbGUtPnJlcXNfcGVuZGluZysrOwogICBSRUdJU1RFUl9IQU5ETEVfUkVRKGxvb3AsIGhhbmRsZSwgcmVxKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdGNwLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3RjcC5jCmluZGV4IGYyY2I1MjcuLjk0MWM4MDEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdGNwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi90Y3AuYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAgICAgICAgICAgICBVbnJlZ2lzdGVyV2FpdChyZXEtPndhaXRfaGFuZGxlKTsKICAgICAgICAgICAgIHJlcS0+d2FpdF9oYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHJlcS0+ZXZlbnRfaGFuZGxlKSB7CisgICAgICAgICAgaWYgKHJlcS0+ZXZlbnRfaGFuZGxlICE9IE5VTEwpIHsKICAgICAgICAgICAgIENsb3NlSGFuZGxlKHJlcS0+ZXZlbnRfaGFuZGxlKTsKICAgICAgICAgICAgIHJlcS0+ZXZlbnRfaGFuZGxlID0gTlVMTDsKICAgICAgICAgICB9CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgVW5yZWdpc3RlcldhaXQoaGFuZGxlLT5yZWFkX3JlcS53YWl0X2hhbmRsZSk7CiAgICAgICAgIGhhbmRsZS0+cmVhZF9yZXEud2FpdF9oYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICAgIH0KLSAgICAgIGlmIChoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSkgeworICAgICAgaWYgKGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlICE9IE5VTEwpIHsKICAgICAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUpOwogICAgICAgICBoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSA9IE5VTEw7CiAgICAgICB9CkBAIC00MjgsNiArNDI4LDcgQEAKICAgLyogUHJlcGFyZSB0aGUgb3ZlcmxhcHBlZCBzdHJ1Y3R1cmUuICovCiAgIG1lbXNldCgmKHJlcS0+dS5pby5vdmVybGFwcGVkKSwgMCwgc2l6ZW9mKHJlcS0+dS5pby5vdmVybGFwcGVkKSk7CiAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCkgeworICAgIGFzc2VydChyZXEtPmV2ZW50X2hhbmRsZSAhPSBOVUxMKTsKICAgICByZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQgPSAoSEFORExFKSAoKFVMT05HX1BUUikgcmVxLT5ldmVudF9oYW5kbGUgfCAxKTsKICAgfQogCkBAIC00NjYsNyArNDY3LDcgQEAKICAgICBjbG9zZXNvY2tldChhY2NlcHRfc29ja2V0KTsKICAgICAvKiBEZXN0cm95IHRoZSBldmVudCBoYW5kbGUgKi8KICAgICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9FTVVMQVRFX0lPQ1ApIHsKLSAgICAgIENsb3NlSGFuZGxlKHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCk7CisgICAgICBDbG9zZUhhbmRsZShyZXEtPmV2ZW50X2hhbmRsZSk7CiAgICAgICByZXEtPmV2ZW50X2hhbmRsZSA9IE5VTEw7CiAgICAgfQogICB9CkBAIC01MDksNyArNTEwLDcgQEAKICAgLyogUHJlcGFyZSB0aGUgb3ZlcmxhcHBlZCBzdHJ1Y3R1cmUuICovCiAgIG1lbXNldCgmKHJlcS0+dS5pby5vdmVybGFwcGVkKSwgMCwgc2l6ZW9mKHJlcS0+dS5pby5vdmVybGFwcGVkKSk7CiAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCkgewotICAgIGFzc2VydChyZXEtPmV2ZW50X2hhbmRsZSk7CisgICAgYXNzZXJ0KHJlcS0+ZXZlbnRfaGFuZGxlICE9IE5VTEwpOwogICAgIHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCA9IChIQU5ETEUpICgoVUxPTkdfUFRSKSByZXEtPmV2ZW50X2hhbmRsZSB8IDEpOwogICB9CiAKQEAgLTU0OSw2ICs1NTAsMjEgQEAKIH0KIAogCitpbnQgdXZfdGNwX2Nsb3NlX3Jlc2V0KHV2X3RjcF90KiBoYW5kbGUsIHV2X2Nsb3NlX2NiIGNsb3NlX2NiKSB7CisgIHN0cnVjdCBsaW5nZXIgbCA9IHsgMSwgMCB9OworCisgIC8qIERpc2FsbG93IHNldHRpbmcgU09fTElOR0VSIHRvIHplcm8gZHVlIHRvIHNvbWUgcGxhdGZvcm0gaW5jb25zaXN0ZW5jaWVzICovCisgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1NIVVRUSU5HKQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgaWYgKDAgIT0gc2V0c29ja29wdChoYW5kbGUtPnNvY2tldCwgU09MX1NPQ0tFVCwgU09fTElOR0VSLCAoY29uc3QgY2hhciopJmwsIHNpemVvZihsKSkpCisgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoV1NBR2V0TGFzdEVycm9yKCkpOworCisgIHV2X2Nsb3NlKCh1dl9oYW5kbGVfdCopIGhhbmRsZSwgY2xvc2VfY2IpOworICByZXR1cm4gMDsKK30KKworCiBpbnQgdXZfdGNwX2xpc3Rlbih1dl90Y3BfdCogaGFuZGxlLCBpbnQgYmFja2xvZywgdXZfY29ubmVjdGlvbl9jYiBjYikgewogICB1bnNpZ25lZCBpbnQgaSwgc2ltdWx0YW5lb3VzX2FjY2VwdHM7CiAgIHV2X3RjcF9hY2NlcHRfdCogcmVxOwpAQCAtNTk3LDggKzYxMyw4IEBACiAgIHNpbXVsdGFuZW91c19hY2NlcHRzID0gaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9UQ1BfU0lOR0xFX0FDQ0VQVCA/IDEKICAgICA6IHV2X3NpbXVsdGFuZW91c19zZXJ2ZXJfYWNjZXB0czsKIAotICBpZighaGFuZGxlLT50Y3Auc2Vydi5hY2NlcHRfcmVxcykgewotICAgIGhhbmRsZS0+dGNwLnNlcnYuYWNjZXB0X3JlcXMgPSAodXZfdGNwX2FjY2VwdF90KikKKyAgaWYgKGhhbmRsZS0+dGNwLnNlcnYuYWNjZXB0X3JlcXMgPT0gTlVMTCkgeworICAgIGhhbmRsZS0+dGNwLnNlcnYuYWNjZXB0X3JlcXMgPQogICAgICAgdXZfX21hbGxvYyh1dl9zaW11bHRhbmVvdXNfc2VydmVyX2FjY2VwdHMgKiBzaXplb2YodXZfdGNwX2FjY2VwdF90KSk7CiAgICAgaWYgKCFoYW5kbGUtPnRjcC5zZXJ2LmFjY2VwdF9yZXFzKSB7CiAgICAgICB1dl9mYXRhbF9lcnJvcihFUlJPUl9PVVRPRk1FTU9SWSwgInV2X19tYWxsb2MiKTsKQEAgLTYxMyw3ICs2MjksNyBAQAogICAgICAgcmVxLT53YWl0X2hhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfRU1VTEFURV9JT0NQKSB7CiAgICAgICAgIHJlcS0+ZXZlbnRfaGFuZGxlID0gQ3JlYXRlRXZlbnQoTlVMTCwgMCwgMCwgTlVMTCk7Ci0gICAgICAgIGlmICghcmVxLT5ldmVudF9oYW5kbGUpIHsKKyAgICAgICAgaWYgKHJlcS0+ZXZlbnRfaGFuZGxlID09IE5VTEwpIHsKICAgICAgICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkNyZWF0ZUV2ZW50Iik7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7CkBAIC03MjIsOSArNzM4LDkgQEAKICAgICogcmVxdWVzdCBwZW5kaW5nLiAqLwogICBpZiAoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1JFQURfUEVORElORykpIHsKICAgICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9FTVVMQVRFX0lPQ1AgJiYKLSAgICAgICAgIWhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlKSB7CisgICAgICAgIGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlID09IE5VTEwpIHsKICAgICAgIGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlID0gQ3JlYXRlRXZlbnQoTlVMTCwgMCwgMCwgTlVMTCk7Ci0gICAgICBpZiAoIWhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlKSB7CisgICAgICBpZiAoaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUgPT0gTlVMTCkgewogICAgICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkNyZWF0ZUV2ZW50Iik7CiAgICAgICB9CiAgICAgfQpAQCAtODQ3LDcgKzg2Myw3IEBACiAgIG1lbXNldCgmKHJlcS0+dS5pby5vdmVybGFwcGVkKSwgMCwgc2l6ZW9mKHJlcS0+dS5pby5vdmVybGFwcGVkKSk7CiAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCkgewogICAgIHJlcS0+ZXZlbnRfaGFuZGxlID0gQ3JlYXRlRXZlbnQoTlVMTCwgMCwgMCwgTlVMTCk7Ci0gICAgaWYgKCFyZXEtPmV2ZW50X2hhbmRsZSkgeworICAgIGlmIChyZXEtPmV2ZW50X2hhbmRsZSA9PSBOVUxMKSB7CiAgICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkNyZWF0ZUV2ZW50Iik7CiAgICAgfQogICAgIHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCA9IChIQU5ETEUpICgoVUxPTkdfUFRSKSByZXEtPmV2ZW50X2hhbmRsZSB8IDEpOwpAQCAtMTA2NSw3ICsxMDgxLDcgQEAKICAgICAgIFVucmVnaXN0ZXJXYWl0KHJlcS0+d2FpdF9oYW5kbGUpOwogICAgICAgcmVxLT53YWl0X2hhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgIH0KLSAgICBpZiAocmVxLT5ldmVudF9oYW5kbGUpIHsKKyAgICBpZiAocmVxLT5ldmVudF9oYW5kbGUgIT0gTlVMTCkgewogICAgICAgQ2xvc2VIYW5kbGUocmVxLT5ldmVudF9oYW5kbGUpOwogICAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBOVUxMOwogICAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdHR5LmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3R0eS5jCmluZGV4IGE5OGZlMjYuLjQ4OGQ5YjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdHR5LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi90dHkuYwpAQCAtNDYsMTQgKzQ2LDE2IEBACiAKICNkZWZpbmUgVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVIgKDB4ZmZmZCkKIAotI2RlZmluZSBBTlNJX05PUk1BTCAgICAgICAgICAgMHgwMAotI2RlZmluZSBBTlNJX0VTQ0FQRV9TRUVOICAgICAgMHgwMgotI2RlZmluZSBBTlNJX0NTSSAgICAgICAgICAgICAgMHgwNAotI2RlZmluZSBBTlNJX1NUX0NPTlRST0wgICAgICAgMHgwOAotI2RlZmluZSBBTlNJX0lHTk9SRSAgICAgICAgICAgMHgxMAotI2RlZmluZSBBTlNJX0lOX0FSRyAgICAgICAgICAgMHgyMAotI2RlZmluZSBBTlNJX0lOX1NUUklORyAgICAgICAgMHg0MAotI2RlZmluZSBBTlNJX0JBQ0tTTEFTSF9TRUVOICAgMHg4MAorI2RlZmluZSBBTlNJX05PUk1BTCAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEFOU0lfRVNDQVBFX1NFRU4gICAgICAweDAwMDIKKyNkZWZpbmUgQU5TSV9DU0kgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBBTlNJX1NUX0NPTlRST0wgICAgICAgMHgwMDA4CisjZGVmaW5lIEFOU0lfSUdOT1JFICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQU5TSV9JTl9BUkcgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBBTlNJX0lOX1NUUklORyAgICAgICAgMHgwMDQwCisjZGVmaW5lIEFOU0lfQkFDS1NMQVNIX1NFRU4gICAweDAwODAKKyNkZWZpbmUgQU5TSV9FWFRFTlNJT04gICAgICAgIDB4MDEwMAorI2RlZmluZSBBTlNJX0RFQ1NDVVNSICAgICAgICAgMHgwMjAwCiAKICNkZWZpbmUgTUFYX0lOUFVUX0JVRkZFUl9MRU5HVEggODE5MgogI2RlZmluZSBNQVhfQ09OU09MRV9DSEFSIDgxOTIKQEAgLTYyLDcgKzY0LDEyIEBACiAjZGVmaW5lIEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkcgMHgwMDA0CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgdXZfdHR5X2NhcHR1cmVfaW5pdGlhbF9zdHlsZShDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyogaW5mbyk7CisjZGVmaW5lIENVUlNPUl9TSVpFX1NNQUxMICAgICAyNQorI2RlZmluZSBDVVJTT1JfU0laRV9MQVJHRSAgICAgMTAwCisKK3N0YXRpYyB2b2lkIHV2X3R0eV9jYXB0dXJlX2luaXRpYWxfc3R5bGUoCisgICAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8qIHNjcmVlbl9idWZmZXJfaW5mbywKKyAgICBDT05TT0xFX0NVUlNPUl9JTkZPKiBjdXJzb3JfaW5mbyk7CiBzdGF0aWMgdm9pZCB1dl90dHlfdXBkYXRlX3ZpcnR1YWxfd2luZG93KENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPKiBpbmZvKTsKIHN0YXRpYyBpbnQgdXZfX2NhbmNlbF9yZWFkX2NvbnNvbGUodXZfdHR5X3QqIGhhbmRsZSk7CiAKQEAgLTEyMCw2ICsxMjcsOCBAQAogc3RhdGljIEhBTkRMRSB1dl9fdHR5X2NvbnNvbGVfaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiBzdGF0aWMgaW50IHV2X190dHlfY29uc29sZV9oZWlnaHQgPSAtMTsKIHN0YXRpYyBpbnQgdXZfX3R0eV9jb25zb2xlX3dpZHRoID0gLTE7CitzdGF0aWMgSEFORExFIHV2X190dHlfY29uc29sZV9yZXNpemVkID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CitzdGF0aWMgdXZfbXV0ZXhfdCB1dl9fdHR5X2NvbnNvbGVfcmVzaXplX211dGV4OwogCiBzdGF0aWMgRFdPUkQgV0lOQVBJIHV2X190dHlfY29uc29sZV9yZXNpemVfbWVzc2FnZV9sb29wX3RocmVhZCh2b2lkKiBwYXJhbSk7CiBzdGF0aWMgdm9pZCBDQUxMQkFDSyB1dl9fdHR5X2NvbnNvbGVfcmVzaXplX2V2ZW50KEhXSU5FVkVOVEhPT0sgaFdpbkV2ZW50SG9vaywKQEAgLTEyOSw2ICsxMzgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT05HIGlkQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3RXZlbnRUaHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3bXNFdmVudFRpbWUpOworc3RhdGljIERXT1JEIFdJTkFQSSB1dl9fdHR5X2NvbnNvbGVfcmVzaXplX3dhdGNoZXJfdGhyZWFkKHZvaWQqIHBhcmFtKTsKK3N0YXRpYyB2b2lkIHV2X190dHlfY29uc29sZV9zaWduYWxfcmVzaXplKHZvaWQpOwogCiAvKiBXZSB1c2UgYSBzZW1hcGhvcmUgcmF0aGVyIHRoYW4gYSBtdXRleCBvciBjcml0aWNhbCBzZWN0aW9uIGJlY2F1c2UgaW4gc29tZQogICAgY2FzZXMgKHV2X19jYW5jZWxfcmVhZF9jb25zb2xlKSB3ZSBuZWVkIHRha2UgdGhlIGxvY2sgaW4gdGhlIG1haW4gdGhyZWFkIGFuZApAQCAtMTQ1LDEzICsxNTYsMTEgQEAKIHN0YXRpYyBjaGFyIHV2X3R0eV9kZWZhdWx0X2JnX2JyaWdodCA9IDA7CiBzdGF0aWMgY2hhciB1dl90dHlfZGVmYXVsdF9pbnZlcnNlID0gMDsKIAotdHlwZWRlZiBlbnVtIHsKLSAgVVZfU1VQUE9SVEVELAotICBVVl9VTkNIRUNLRUQsCi0gIFVWX1VOU1VQUE9SVEVECi19IHV2X3Z0ZXJtc3RhdGVfdDsKK3N0YXRpYyBDT05TT0xFX0NVUlNPUl9JTkZPIHV2X3R0eV9kZWZhdWx0X2N1cnNvcl9pbmZvOworCiAvKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgQU5TSSBzdXBwb3J0IGlzIGVuYWJsZWQuICovCi1zdGF0aWMgdXZfdnRlcm1zdGF0ZV90IHV2X192dGVybV9zdGF0ZSA9IFVWX1VOQ0hFQ0tFRDsKK3N0YXRpYyBCT09MIHV2X19uZWVkX2NoZWNrX3Z0ZXJtX3N0YXRlID0gVFJVRTsKK3N0YXRpYyB1dl90dHlfdnRlcm1zdGF0ZV90IHV2X192dGVybV9zdGF0ZSA9IFVWX1RUWV9VTlNVUFBPUlRFRDsKIHN0YXRpYyB2b2lkIHV2X19kZXRlcm1pbmVfdnRlcm1fc3RhdGUoSEFORExFIGhhbmRsZSk7CiAKIHZvaWQgdXZfY29uc29sZV9pbml0KHZvaWQpIHsKQEAgLTE2NSw5ICsxNzQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgaWYgKHV2X190dHlfY29uc29sZV9oYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzYl9pbmZvOwogICAgIFF1ZXVlVXNlcldvcmtJdGVtKHV2X190dHlfY29uc29sZV9yZXNpemVfbWVzc2FnZV9sb29wX3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgIFdUX0VYRUNVVEVMT05HRlVOQ1RJT04pOworICAgIHV2X211dGV4X2luaXQoJnV2X190dHlfY29uc29sZV9yZXNpemVfbXV0ZXgpOworICAgIGlmIChHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyh1dl9fdHR5X2NvbnNvbGVfaGFuZGxlLCAmc2JfaW5mbykpIHsKKyAgICAgIHV2X190dHlfY29uc29sZV93aWR0aCA9IHNiX2luZm8uZHdTaXplLlg7CisgICAgICB1dl9fdHR5X2NvbnNvbGVfaGVpZ2h0ID0gc2JfaW5mby5zcldpbmRvdy5Cb3R0b20gLSBzYl9pbmZvLnNyV2luZG93LlRvcCArIDE7CisgICAgfQogICB9CiB9CiAKQEAgLTE3Nyw2ICsxOTIsNyBAQAogICBEV09SRCBOdW1iZXJPZkV2ZW50czsKICAgSEFORExFIGhhbmRsZTsKICAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gc2NyZWVuX2J1ZmZlcl9pbmZvOworICBDT05TT0xFX0NVUlNPUl9JTkZPIGN1cnNvcl9pbmZvOwogICAodm9pZCl1bnVzZWQ7CiAKICAgdXZfX29uY2VfaW5pdCgpOwpAQCAtMjA5LDE1ICsyMjUsMjAgQEAKICAgICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKICAgICB9CiAKKyAgICAvKiBPYnRhaW4gdGhlIGN1cnNvciBpbmZvIHdpdGggdGhlIG91dHB1dCBoYW5kbGUuICovCisgICAgaWYgKCFHZXRDb25zb2xlQ3Vyc29ySW5mbyhoYW5kbGUsICZjdXJzb3JfaW5mbykpIHsKKyAgICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisKICAgICAvKiBPYnRhaW4gdGhlIHR0eV9vdXRwdXRfbG9jayBiZWNhdXNlIHRoZSB2aXJ0dWFsIHdpbmRvdyBzdGF0ZSBpcyBzaGFyZWQKICAgICAgKiBiZXR3ZWVuIGFsbCB1dl90dHlfdCBoYW5kbGVzLiAqLwogICAgIHV2X3NlbV93YWl0KCZ1dl90dHlfb3V0cHV0X2xvY2spOwogCi0gICAgaWYgKHV2X192dGVybV9zdGF0ZSA9PSBVVl9VTkNIRUNLRUQpCisgICAgaWYgKHV2X19uZWVkX2NoZWNrX3Z0ZXJtX3N0YXRlKQogICAgICAgdXZfX2RldGVybWluZV92dGVybV9zdGF0ZShoYW5kbGUpOwogCi0gICAgLyogUmVtZW1iZXIgdGhlIG9yaWdpbmFsIGNvbnNvbGUgdGV4dCBhdHRyaWJ1dGVzLiAqLwotICAgIHV2X3R0eV9jYXB0dXJlX2luaXRpYWxfc3R5bGUoJnNjcmVlbl9idWZmZXJfaW5mbyk7CisgICAgLyogUmVtZW1iZXIgdGhlIG9yaWdpbmFsIGNvbnNvbGUgdGV4dCBhdHRyaWJ1dGVzIGFuZCBjdXJzb3IgaW5mby4gKi8KKyAgICB1dl90dHlfY2FwdHVyZV9pbml0aWFsX3N0eWxlKCZzY3JlZW5fYnVmZmVyX2luZm8sICZjdXJzb3JfaW5mbyk7CiAKICAgICB1dl90dHlfdXBkYXRlX3ZpcnR1YWxfd2luZG93KCZzY3JlZW5fYnVmZmVyX2luZm8pOwogCkBAIC0yNjgsNyArMjg5LDkgQEAKIC8qIFNldCB0aGUgZGVmYXVsdCBjb25zb2xlIHRleHQgYXR0cmlidXRlcyBiYXNlZCBvbiBob3cgdGhlIGNvbnNvbGUgd2FzCiAgKiBjb25maWd1cmVkIHdoZW4gbGlidXYgc3RhcnRlZC4KICAqLwotc3RhdGljIHZvaWQgdXZfdHR5X2NhcHR1cmVfaW5pdGlhbF9zdHlsZShDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyogaW5mbykgeworc3RhdGljIHZvaWQgdXZfdHR5X2NhcHR1cmVfaW5pdGlhbF9zdHlsZSgKKyAgICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyogc2NyZWVuX2J1ZmZlcl9pbmZvLAorICAgIENPTlNPTEVfQ1VSU09SX0lORk8qIGN1cnNvcl9pbmZvKSB7CiAgIHN0YXRpYyBpbnQgc3R5bGVfY2FwdHVyZWQgPSAwOwogCiAgIC8qIE9ubHkgZG8gdGhpcyBvbmNlLgpAQCAtMjc3LDcgKzMwMCw3IEBACiAgICAgcmV0dXJuOwogCiAgIC8qIFNhdmUgcmF3IHdpbjMyIGF0dHJpYnV0ZXMuICovCi0gIHV2X3R0eV9kZWZhdWx0X3RleHRfYXR0cmlidXRlcyA9IGluZm8tPndBdHRyaWJ1dGVzOworICB1dl90dHlfZGVmYXVsdF90ZXh0X2F0dHJpYnV0ZXMgPSBzY3JlZW5fYnVmZmVyX2luZm8tPndBdHRyaWJ1dGVzOwogCiAgIC8qIENvbnZlcnQgYmxhY2sgdGV4dCBvbiBibGFjayBiYWNrZ3JvdW5kIHRvIHVzZSB3aGl0ZSB0ZXh0LiAqLwogICBpZiAodXZfdHR5X2RlZmF1bHRfdGV4dF9hdHRyaWJ1dGVzID09IDApCkBAIC0zMTcsNiArMzQwLDkgQEAKICAgaWYgKHV2X3R0eV9kZWZhdWx0X3RleHRfYXR0cmlidXRlcyAmIENPTU1PTl9MVkJfUkVWRVJTRV9WSURFTykKICAgICB1dl90dHlfZGVmYXVsdF9pbnZlcnNlID0gMTsKIAorICAvKiBTYXZlIHRoZSBjdXJzb3Igc2l6ZSBhbmQgdGhlIGN1cnNvciBzdGF0ZS4gKi8KKyAgdXZfdHR5X2RlZmF1bHRfY3Vyc29yX2luZm8gPSAqY3Vyc29yX2luZm87CisKICAgc3R5bGVfY2FwdHVyZWQgPSAxOwogfQogCkBAIC03MjgsNiArNzU0LDEyIEBACiAgICAgICB9CiAgICAgICByZWNvcmRzX2xlZnQtLTsKIAorICAgICAgLyogV2UgbWlnaHQgYmUgbm90IHN1YnNjcmliZWQgdG8gRVZFTlRfQ09OU09MRV9MQVlPVVQgb3Igd2UgbWlnaHQgYmUKKyAgICAgICAqIHJ1bm5pbmcgdW5kZXIgc29tZSBUVFkgZW11bGF0b3IgdGhhdCBkb2VzIG5vdCBzZW5kIHRob3NlIGV2ZW50cy4gKi8KKyAgICAgIGlmIChoYW5kbGUtPnR0eS5yZC5sYXN0X2lucHV0X3JlY29yZC5FdmVudFR5cGUgPT0gV0lORE9XX0JVRkZFUl9TSVpFX0VWRU5UKSB7CisgICAgICAgIHV2X190dHlfY29uc29sZV9zaWduYWxfcmVzaXplKCk7CisgICAgICB9CisKICAgICAgIC8qIElnbm9yZSBvdGhlciBldmVudHMgdGhhdCBhcmUgbm90IGtleSBldmVudHMuICovCiAgICAgICBpZiAoaGFuZGxlLT50dHkucmQubGFzdF9pbnB1dF9yZWNvcmQuRXZlbnRUeXBlICE9IEtFWV9FVkVOVCkgewogICAgICAgICBjb250aW51ZTsKQEAgLTEyMTgsNyArMTI1MCw3IEBACiBzdGF0aWMgaW50IHV2X3R0eV9yZXNldCh1dl90dHlfdCogaGFuZGxlLCBEV09SRCogZXJyb3IpIHsKICAgY29uc3QgQ09PUkQgb3JpZ2luID0gezAsIDB9OwogICBjb25zdCBXT1JEIGNoYXJfYXR0cnMgPSB1dl90dHlfZGVmYXVsdF90ZXh0X2F0dHJpYnV0ZXM7Ci0gIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIGluZm87CisgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNjcmVlbl9idWZmZXJfaW5mbzsKICAgRFdPUkQgY291bnQsIHdyaXR0ZW47CiAKICAgaWYgKCplcnJvciAhPSBFUlJPUl9TVUNDRVNTKSB7CkBAIC0xMjM5LDEyICsxMjcxLDEyIEBACiAKICAgLyogQ2xlYXIgdGhlIHNjcmVlbiBidWZmZXIuICovCiAgcmV0cnk6Ci0gIGlmICghR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8oaGFuZGxlLT5oYW5kbGUsICZpbmZvKSkgewotICAgICplcnJvciA9IEdldExhc3RFcnJvcigpOwotICAgIHJldHVybiAtMTsKKyAgIGlmICghR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8oaGFuZGxlLT5oYW5kbGUsICZzY3JlZW5fYnVmZmVyX2luZm8pKSB7CisgICAgICplcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICByZXR1cm4gLTE7CiAgIH0KIAotICBjb3VudCA9IGluZm8uZHdTaXplLlggKiBpbmZvLmR3U2l6ZS5ZOworICBjb3VudCA9IHNjcmVlbl9idWZmZXJfaW5mby5kd1NpemUuWCAqIHNjcmVlbl9idWZmZXJfaW5mby5kd1NpemUuWTsKIAogICBpZiAoIShGaWxsQ29uc29sZU91dHB1dENoYXJhY3RlclcoaGFuZGxlLT5oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMJ1x4MjAnLApAQCAtMTI2Nyw3ICsxMjk5LDEzIEBACiAKICAgLyogTW92ZSB0aGUgdmlydHVhbCB3aW5kb3cgdXAgdG8gdGhlIHRvcC4gKi8KICAgdXZfdHR5X3ZpcnR1YWxfb2Zmc2V0ID0gMDsKLSAgdXZfdHR5X3VwZGF0ZV92aXJ0dWFsX3dpbmRvdygmaW5mbyk7CisgIHV2X3R0eV91cGRhdGVfdmlydHVhbF93aW5kb3coJnNjcmVlbl9idWZmZXJfaW5mbyk7CisKKyAgLyogUmVzZXQgdGhlIGN1cnNvciBzaXplIGFuZCB0aGUgY3Vyc29yIHN0YXRlLiAqLworICBpZiAoIVNldENvbnNvbGVDdXJzb3JJbmZvKGhhbmRsZS0+aGFuZGxlLCAmdXZfdHR5X2RlZmF1bHRfY3Vyc29yX2luZm8pKSB7CisgICAgKmVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgcmV0dXJuIC0xOworICB9CiAKICAgcmV0dXJuIDA7CiB9CkBAIC0xNjA2LDYgKzE2NDQsMzEgQEAKICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdXZfdHR5X3NldF9jdXJzb3Jfc2hhcGUodXZfdHR5X3QqIGhhbmRsZSwgaW50IHN0eWxlLCBEV09SRCogZXJyb3IpIHsKKyAgQ09OU09MRV9DVVJTT1JfSU5GTyBjdXJzb3JfaW5mbzsKKworICBpZiAoIUdldENvbnNvbGVDdXJzb3JJbmZvKGhhbmRsZS0+aGFuZGxlLCAmY3Vyc29yX2luZm8pKSB7CisgICAgKmVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKHN0eWxlID09IDApIHsKKyAgICBjdXJzb3JfaW5mby5kd1NpemUgPSB1dl90dHlfZGVmYXVsdF9jdXJzb3JfaW5mby5kd1NpemU7CisgIH0gZWxzZSBpZiAoc3R5bGUgPD0gMikgeworICAgIGN1cnNvcl9pbmZvLmR3U2l6ZSA9IENVUlNPUl9TSVpFX0xBUkdFOworICB9IGVsc2UgeworICAgIGN1cnNvcl9pbmZvLmR3U2l6ZSA9IENVUlNPUl9TSVpFX1NNQUxMOworICB9CisKKyAgaWYgKCFTZXRDb25zb2xlQ3Vyc29ySW5mbyhoYW5kbGUtPmhhbmRsZSwgJmN1cnNvcl9pbmZvKSkgeworICAgICplcnJvciA9IEdldExhc3RFcnJvcigpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisKIHN0YXRpYyBpbnQgdXZfdHR5X3dyaXRlX2J1ZnModXZfdHR5X3QqIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXZfYnVmX3QgYnVmc1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ1ZnMsCkBAIC0xNjEzLDI4ICsxNjc2LDE2IEBACiAgIC8qIFdlIGNhbiBvbmx5IHdyaXRlIDhrIGNoYXJhY3RlcnMgYXQgYSB0aW1lLiBXaW5kb3dzIGNhbid0IGhhbmRsZSBtdWNoIG1vcmUKICAgICogY2hhcmFjdGVycyBpbiBhIHNpbmdsZSBjb25zb2xlIHdyaXRlIGFueXdheS4gKi8KICAgV0NIQVIgdXRmMTZfYnVmW01BWF9DT05TT0xFX0NIQVJdOwotICBXQ0hBUiogdXRmMTZfYnVmZmVyOwogICBEV09SRCB1dGYxNl9idWZfdXNlZCA9IDA7Ci0gIHVuc2lnbmVkIGludCBpLCBsZW4sIG1heF9sZW4sIHBvczsKLSAgaW50IGFsbG9jYXRlID0gMDsKKyAgdW5zaWduZWQgaW50IGk7CiAKLSNkZWZpbmUgRkxVU0hfVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBwb3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGxlbiA9IHV0ZjE2X2J1Zl91c2VkIC0gcG9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmIChsZW4gPiBNQVhfQ09OU09MRV9DSEFSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbGVuID0gTUFYX0NPTlNPTEVfQ0hBUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHV2X3R0eV9lbWl0X3RleHQoaGFuZGxlLCAmdXRmMTZfYnVmZmVyW3Bvc10sIGxlbiwgZXJyb3IpOyAgICAgIFwKLSAgICAgIHBvcyArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChwb3MgPCB1dGYxNl9idWZfdXNlZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYWxsb2NhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHV2X19mcmVlKHV0ZjE2X2J1ZmZlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGFsbG9jYXRlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHV0ZjE2X2J1ZmZlciA9IHV0ZjE2X2J1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1dGYxNl9idWZfdXNlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSB9IHdoaWxlICgwKQorI2RlZmluZSBGTFVTSF9URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAodXRmMTZfYnVmX3VzZWQgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdXZfdHR5X2VtaXRfdGV4dChoYW5kbGUsIHV0ZjE2X2J1ZiwgdXRmMTZfYnVmX3VzZWQsIGVycm9yKTsgICBcCisgICAgICB1dGYxNl9idWZfdXNlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEVOU1VSRV9CVUZGRVJfU1BBQ0Uod2NoYXJzX25lZWRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgaWYgKHdjaGFyc19uZWVkZWQgPiBBUlJBWV9TSVpFKHV0ZjE2X2J1ZikgLSB1dGYxNl9idWZfdXNlZCkgeyAgICAgXApAQCAtMTY0NSw1NCArMTY5NiwxOCBAQAogICB1bnNpZ25lZCBjaGFyIHV0ZjhfYnl0ZXNfbGVmdCA9IGhhbmRsZS0+dHR5LndyLnV0ZjhfYnl0ZXNfbGVmdDsKICAgdW5zaWduZWQgaW50IHV0ZjhfY29kZXBvaW50ID0gaGFuZGxlLT50dHkud3IudXRmOF9jb2RlcG9pbnQ7CiAgIHVuc2lnbmVkIGNoYXIgcHJldmlvdXNfZW9sID0gaGFuZGxlLT50dHkud3IucHJldmlvdXNfZW9sOwotICB1bnNpZ25lZCBjaGFyIGFuc2lfcGFyc2VyX3N0YXRlID0gaGFuZGxlLT50dHkud3IuYW5zaV9wYXJzZXJfc3RhdGU7CisgIHVuc2lnbmVkIHNob3J0IGFuc2lfcGFyc2VyX3N0YXRlID0gaGFuZGxlLT50dHkud3IuYW5zaV9wYXJzZXJfc3RhdGU7CiAKICAgLyogU3RvcmUgdGhlIGVycm9yIGhlcmUuIElmIHdlIGVuY291bnRlciBhbiBlcnJvciwgc3RvcCB0cnlpbmcgdG8gZG8gaS9vIGJ1dAogICAgKiBrZWVwIHBhcnNpbmcgdGhlIGJ1ZmZlciBzbyB3ZSBsZWF2ZSB0aGUgcGFyc2VyIGluIGEgY29uc2lzdGVudCBzdGF0ZS4gKi8KICAgKmVycm9yID0gRVJST1JfU1VDQ0VTUzsKIAotICB1dGYxNl9idWZmZXIgPSB1dGYxNl9idWY7Ci0KICAgdXZfc2VtX3dhaXQoJnV2X3R0eV9vdXRwdXRfbG9jayk7CiAKICAgZm9yIChpID0gMDsgaSA8IG5idWZzOyBpKyspIHsKICAgICB1dl9idWZfdCBidWYgPSBidWZzW2ldOwogICAgIHVuc2lnbmVkIGludCBqOwogCi0gICAgaWYgKHV2X192dGVybV9zdGF0ZSA9PSBVVl9TVVBQT1JURUQgJiYgYnVmLmxlbiA+IDApIHsKLSAgICAgIHV0ZjE2X2J1Zl91c2VkID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwotCi0gICAgICBpZiAodXRmMTZfYnVmX3VzZWQgPT0gMCkgewotICAgICAgICAqZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIG1heF9sZW4gPSAodXRmMTZfYnVmX3VzZWQgKyAxKSAqIHNpemVvZihXQ0hBUik7Ci0gICAgICBhbGxvY2F0ZSA9IG1heF9sZW4gPiBNQVhfQ09OU09MRV9DSEFSOwotICAgICAgaWYgKGFsbG9jYXRlKQotICAgICAgICB1dGYxNl9idWZmZXIgPSB1dl9fbWFsbG9jKG1heF9sZW4pOwotICAgICAgaWYgKCFNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYuYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjE2X2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGYxNl9idWZfdXNlZCkpIHsKLSAgICAgICAgaWYgKGFsbG9jYXRlKQotICAgICAgICAgIHV2X19mcmVlKHV0ZjE2X2J1ZmZlcik7Ci0gICAgICAgICplcnJvciA9IEdldExhc3RFcnJvcigpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgRkxVU0hfVEVYVCgpOwotCi0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KICAgICBmb3IgKGogPSAwOyBqIDwgYnVmLmxlbjsgaisrKSB7CiAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBidWYuYmFzZVtqXTsKIApAQCAtMTc0OSw3ICsxNzY0LDkgQEAKICAgICAgIH0KIAogICAgICAgLyogUGFyc2UgdnQxMDAvYW5zaSBlc2NhcGUgY29kZXMgKi8KLSAgICAgIGlmIChhbnNpX3BhcnNlcl9zdGF0ZSA9PSBBTlNJX05PUk1BTCkgeworICAgICAgaWYgKHV2X192dGVybV9zdGF0ZSA9PSBVVl9UVFlfU1VQUE9SVEVEKSB7CisgICAgICAgIC8qIFBhc3MgdGhyb3VnaCBlc2NhcGUgY29kZXMgaWYgY29uaG9zdCBzdXBwb3J0cyB0aGVtLiAqLworICAgICAgfSBlbHNlIGlmIChhbnNpX3BhcnNlcl9zdGF0ZSA9PSBBTlNJX05PUk1BTCkgewogICAgICAgICBzd2l0Y2ggKHV0ZjhfY29kZXBvaW50KSB7CiAgICAgICAgICAgY2FzZSAnXDAzMyc6CiAgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfRVNDQVBFX1NFRU47CkBAIC0xNzk1LDcgKzE4MTIsNyBAQAogICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgPSBBTlNJX05PUk1BTDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgIGNhc2UgJzgnOgorICAgICAgICAgIGNhc2UgJzgnOgogICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGFuZCB0ZXh0IGF0dHJpYnV0ZXMgKi8KICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKICAgICAgICAgICAgIHV2X3R0eV9yZXN0b3JlX3N0YXRlKGhhbmRsZSwgMSwgZXJyb3IpOwpAQCAtMTgxMywxMjEgKzE4MzAsMTkzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgfSBlbHNlIGlmIChhbnNpX3BhcnNlcl9zdGF0ZSA9PSBBTlNJX0lHTk9SRSkgeworICAgICAgICAvKiBXZSdyZSBpZ25vcmluZyB0aGlzIGNvbW1hbmQuIFN0b3Agb25seSBvbiBjb21tYW5kIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgaWYgKHV0ZjhfY29kZXBvaW50ID49ICdAJyAmJiB1dGY4X2NvZGVwb2ludCA8PSAnficpIHsKKyAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfTk9STUFMOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICB9IGVsc2UgaWYgKGFuc2lfcGFyc2VyX3N0YXRlID09IEFOU0lfREVDU0NVU1IpIHsKKyAgICAgICAgLyogU28gZmFyIHdlJ3ZlIHRoZSBzZXF1ZW5jZSBgRVNDIFsgYXJnIHNwYWNlYCwgYW5kIHdlJ3JlIHdhaXRpbmcgZm9yCisgICAgICAgICAqIHRoZSBmaW5hbCBjb21tYW5kIGJ5dGUuICovCisgICAgICAgIGlmICh1dGY4X2NvZGVwb2ludCA+PSAnQCcgJiYgdXRmOF9jb2RlcG9pbnQgPD0gJ34nKSB7CisgICAgICAgICAgLyogQ29tbWFuZCBieXRlICovCisgICAgICAgICAgaWYgKHV0ZjhfY29kZXBvaW50ID09ICdxJykgeworICAgICAgICAgICAgLyogQ2hhbmdlIHRoZSBjdXJzb3Igc2hhcGUgKi8KKyAgICAgICAgICAgIGludCBzdHlsZSA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMTsKKyAgICAgICAgICAgIGlmIChzdHlsZSA+PSAwICYmIHN0eWxlIDw9IDYpIHsKKyAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOworICAgICAgICAgICAgICB1dl90dHlfc2V0X2N1cnNvcl9zaGFwZShoYW5kbGUsIHN0eWxlLCBlcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogU2VxdWVuY2UgZW5kZWQgLSBnbyBiYWNrIHRvIG5vcm1hbCBzdGF0ZS4gKi8KKyAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfTk9STUFMOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIFVuZXhwZWN0ZWQgY2hhcmFjdGVyLCBidXQgc2VxdWVuY2UgaGFzbid0IGVuZGVkIHlldC4gSWdub3JlIHRoZSByZXN0CisgICAgICAgICAqIG9mIHRoZSBzZXF1ZW5jZS4gKi8KKyAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgPSBBTlNJX0lHTk9SRTsKKwogICAgICAgfSBlbHNlIGlmIChhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfQ1NJKSB7Ci0gICAgICAgIGlmICghKGFuc2lfcGFyc2VyX3N0YXRlICYgQU5TSV9JR05PUkUpKSB7Ci0gICAgICAgICAgaWYgKHV0ZjhfY29kZXBvaW50ID49ICcwJyAmJiB1dGY4X2NvZGVwb2ludCA8PSAnOScpIHsKLSAgICAgICAgICAgIC8qIFBhcnNpbmcgYSBudW1lcmljYWwgYXJndW1lbnQgKi8KKyAgICAgICAgLyogU28gZmFyIHdlJ3ZlIHNlZW4gYEVTQyBbYCwgYW5kIHdlIG1heSBvciBtYXkgbm90IGhhdmUgYWxyZWFkeSBwYXJzZWQKKyAgICAgICAgICogc29tZSBvZiB0aGUgYXJndW1lbnRzIHRoYXQgZm9sbG93LiAqLwogCi0gICAgICAgICAgICBpZiAoIShhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfSU5fQVJHKSkgewotICAgICAgICAgICAgICAvKiBXZSB3ZXJlIG5vdCBjdXJyZW50bHkgcGFyc2luZyBhIG51bWJlciAqLwotCi0gICAgICAgICAgICAgIC8qIENoZWNrIGZvciB0b28gbWFueSBhcmd1bWVudHMgKi8KLSAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPj0gQVJSQVlfU0laRShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2KSkgewotICAgICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlIHw9IEFOU0lfSUdOT1JFOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgfD0gQU5TSV9JTl9BUkc7Ci0gICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MrKzsKLSAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndltoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjIC0gMV0gPQotICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0KSB1dGY4X2NvZGVwb2ludCAtICcwJzsKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvKiBXZSB3ZXJlIGFscmVhZHkgcGFyc2luZyBhIG51bWJlci4gUGFyc2UgbmV4dCBkaWdpdC4gKi8KLSAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSAxMCAqCi0gICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2W2hhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgLSAxXTsKLQotICAgICAgICAgICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovCi0gICAgICAgICAgICAgIGlmICh2YWx1ZSA+IFVJTlQxNl9NQVgpIHsKLSAgICAgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSB8PSBBTlNJX0lHTk9SRTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2W2hhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgLSAxXSA9Ci0gICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0KSB2YWx1ZSArICh1dGY4X2NvZGVwb2ludCAtICcwJyk7Ci0gICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIH0gZWxzZSBpZiAodXRmOF9jb2RlcG9pbnQgPT0gJzsnKSB7Ci0gICAgICAgICAgICAvKiBEZW5vdGVzIHRoZSBlbmQgb2YgYW4gYXJndW1lbnQuICovCi0gICAgICAgICAgICBpZiAoYW5zaV9wYXJzZXJfc3RhdGUgJiBBTlNJX0lOX0FSRykgewotICAgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSAmPSB+QU5TSV9JTl9BUkc7Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvKiBJZiBBTlNJX0lOX0FSRyBpcyBub3Qgc2V0LCBhZGQgYW5vdGhlciBhcmd1bWVudCBhbmQgZGVmYXVsdCBpdAotICAgICAgICAgICAgICAgKiB0byAwLiAqLwotCi0gICAgICAgICAgICAgIC8qIENoZWNrIGZvciB0b28gbWFueSBhcmd1bWVudHMgKi8KLSAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPj0gQVJSQVlfU0laRShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2KSkgewotICAgICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlIHw9IEFOU0lfSUdOT1JFOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYysrOwotICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2W2hhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgLSAxXSA9IDA7CisgICAgICAgIGlmICh1dGY4X2NvZGVwb2ludCA+PSAnMCcgJiYgdXRmOF9jb2RlcG9pbnQgPD0gJzknKSB7CisgICAgICAgICAgLyogUGFyc2UgYSBudW1lcmljYWwgYXJndW1lbnQuICovCisgICAgICAgICAgaWYgKCEoYW5zaV9wYXJzZXJfc3RhdGUgJiBBTlNJX0lOX0FSRykpIHsKKyAgICAgICAgICAgIC8qIFdlIHdlcmUgbm90IGN1cnJlbnRseSBwYXJzaW5nIGEgbnVtYmVyLCBhZGQgYSBuZXcgb25lLiAqLworICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHRoYXQgdGhlcmUgYXJlIHRvbyBtYW55IGFyZ3VtZW50cy4gKi8KKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID49CisgICAgICAgICAgICAgICAgQVJSQVlfU0laRShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2KSkgeworICAgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfSUdOT1JFOwogICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgIH0gZWxzZSBpZiAodXRmOF9jb2RlcG9pbnQgPT0gJz8nICYmICEoYW5zaV9wYXJzZXJfc3RhdGUgJiBBTlNJX0lOX0FSRykgJiYKLSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPT0gMCkgewotICAgICAgICAgICAgLyogSWdub3JlcyAnPycgaWYgaXQgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciBDU0lbLiBUaGlzIGlzIGFuCi0gICAgICAgICAgICAgKiBleHRlbnNpb24gY2hhcmFjdGVyIGZyb20gdGhlIFZUMTAwIGNvZGVzZXQgdGhhdCBpcyBzdXBwb3J0ZWQgYW5kCi0gICAgICAgICAgICAgKiB1c2VkIGJ5IG1vc3QgQU5TSSB0ZXJtaW5hbHMgdG9kYXkuICovCisgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSB8PSBBTlNJX0lOX0FSRzsKKyAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MrKzsKKyAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyAtIDFdID0KKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpIHV0ZjhfY29kZXBvaW50IC0gJzAnOwogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICB9IGVsc2UgaWYgKHV0ZjhfY29kZXBvaW50ID49ICdAJyAmJiB1dGY4X2NvZGVwb2ludCA8PSAnficgJiYKLSAgICAgICAgICAgICAgICAgICAgIChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID4gMCB8fCB1dGY4X2NvZGVwb2ludCAhPSAnWycpKSB7Ci0gICAgICAgICAgICBpbnQgeCwgeSwgZDsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogV2Ugd2VyZSBhbHJlYWR5IHBhcnNpbmcgYSBudW1iZXIuIFBhcnNlIG5leHQgZGlnaXQuICovCisgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IDEwICoKKyAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2W2hhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgLSAxXTsKIAotICAgICAgICAgICAgLyogQ29tbWFuZCBieXRlICovCisgICAgICAgICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovCisgICAgICAgICAgICBpZiAodmFsdWUgPiBVSU5UMTZfTUFYKSB7CisgICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9JR05PUkU7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2W2hhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgLSAxXSA9CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0KSB2YWx1ZSArICh1dGY4X2NvZGVwb2ludCAtICcwJyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIGlmICh1dGY4X2NvZGVwb2ludCA9PSAnOycpIHsKKyAgICAgICAgICAvKiBEZW5vdGVzIHRoZSBlbmQgb2YgYW4gYXJndW1lbnQuICovCisgICAgICAgICAgaWYgKGFuc2lfcGFyc2VyX3N0YXRlICYgQU5TSV9JTl9BUkcpIHsKKyAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlICY9IH5BTlNJX0lOX0FSRzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIElmIEFOU0lfSU5fQVJHIGlzIG5vdCBzZXQsIGFkZCBhbm90aGVyIGFyZ3VtZW50IGFuZCBkZWZhdWx0CisgICAgICAgICAgICAgKiBpdCB0byAwLiAqLworCisgICAgICAgICAgICAvKiBDaGVjayBmb3IgdG9vIG1hbnkgYXJndW1lbnRzICovCisgICAgICAgICAgICBpZiAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA+PQorCisgICAgICAgICAgICAgICAgQVJSQVlfU0laRShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2KSkgeworICAgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfSUdOT1JFOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYysrOworICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndltoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjIC0gMV0gPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSBpZiAodXRmOF9jb2RlcG9pbnQgPT0gJz8nICYmCisgICAgICAgICAgICAgICAgICAgIShhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfSU5fQVJHKSAmJgorICAgICAgICAgICAgICAgICAgICEoYW5zaV9wYXJzZXJfc3RhdGUgJiBBTlNJX0VYVEVOU0lPTikgJiYKKyAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID09IDApIHsKKyAgICAgICAgICAvKiBQYXNzIHRocm91Z2ggJz8nIGlmIGl0IGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgQ1NJICovCisgICAgICAgICAgLyogVGhpcyBpcyBhbiBleHRlbnNpb24gY2hhcmFjdGVyIGZyb20gdGhlIFZUMTAwIGNvZGVzZXQgKi8KKyAgICAgICAgICAvKiB0aGF0IGlzIHN1cHBvcnRlZCBhbmQgdXNlZCBieSBtb3N0IEFOU0kgdGVybWluYWxzIHRvZGF5LiAqLworICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlIHw9IEFOU0lfRVhURU5TSU9OOworICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIH0gZWxzZSBpZiAodXRmOF9jb2RlcG9pbnQgPT0gJyAnICYmCisgICAgICAgICAgICAgICAgICAgIShhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfRVhURU5TSU9OKSkgeworICAgICAgICAgIC8qIFdlIGV4cGVjdCBhIGNvbW1hbmQgYnl0ZSB0byBmb2xsb3cgYWZ0ZXIgdGhpcyBzcGFjZS4gVGhlIG9ubHkKKyAgICAgICAgICAgKiBjb21tYW5kIHRoYXQgd2UgY3VycmVudCBzdXBwb3J0IGlzICdzZXQgY3Vyc29yIHN0eWxlJy4gKi8KKyAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfREVDU0NVU1I7CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgfSBlbHNlIGlmICh1dGY4X2NvZGVwb2ludCA+PSAnQCcgJiYgdXRmOF9jb2RlcG9pbnQgPD0gJ34nKSB7CisgICAgICAgICAgLyogQ29tbWFuZCBieXRlICovCisgICAgICAgICAgaWYgKGFuc2lfcGFyc2VyX3N0YXRlICYgQU5TSV9FWFRFTlNJT04pIHsKKyAgICAgICAgICAgIC8qIFNlcXVlbmNlIGlzIGBFU0MgWyA/IGFyZ3MgY29tbWFuZGAuICovCisgICAgICAgICAgICBzd2l0Y2ggKHV0ZjhfY29kZXBvaW50KSB7CisgICAgICAgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgICAgIC8qIEhpZGUgdGhlIGN1cnNvciAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA9PSAyNSkgeworICAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOworICAgICAgICAgICAgICAgICAgdXZfdHR5X3NldF9jdXJzb3JfdmlzaWJpbGl0eShoYW5kbGUsIDAsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgLyogU2hvdyB0aGUgY3Vyc29yICovCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdID09IDI1KSB7CisgICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7CisgICAgICAgICAgICAgICAgICB1dl90dHlfc2V0X2N1cnNvcl92aXNpYmlsaXR5KGhhbmRsZSwgMSwgZXJyb3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBTZXF1ZW5jZSBpcyBgRVNDIFsgYXJncyBjb21tYW5kYC4gKi8KKyAgICAgICAgICAgIGludCB4LCB5LCBkOwogICAgICAgICAgICAgc3dpdGNoICh1dGY4X2NvZGVwb2ludCkgewogICAgICAgICAgICAgICBjYXNlICdBJzoKICAgICAgICAgICAgICAgICAvKiBjdXJzb3IgdXAgKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgeSA9IC0oaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxKTsKKyAgICAgICAgICAgICAgICB5ID0gLShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjCisgICAgICAgICAgICAgICAgICA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxKTsKICAgICAgICAgICAgICAgICB1dl90dHlfbW92ZV9jYXJldChoYW5kbGUsIDAsIDEsIHksIDEsIGVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICBjYXNlICdCJzoKICAgICAgICAgICAgICAgICAvKiBjdXJzb3IgZG93biAqLwogICAgICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKLSAgICAgICAgICAgICAgICB5ID0gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxOworICAgICAgICAgICAgICAgIHkgPSBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjCisgICAgICAgICAgICAgICAgICA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxOwogICAgICAgICAgICAgICAgIHV2X3R0eV9tb3ZlX2NhcmV0KGhhbmRsZSwgMCwgMSwgeSwgMSwgZXJyb3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgIGNhc2UgJ0MnOgogICAgICAgICAgICAgICAgIC8qIGN1cnNvciBmb3J3YXJkICovCiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgIHggPSBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDE7CisgICAgICAgICAgICAgICAgeCA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDE7CiAgICAgICAgICAgICAgICAgdXZfdHR5X21vdmVfY2FyZXQoaGFuZGxlLCB4LCAxLCAwLCAxLCBlcnJvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgY2FzZSAnRCc6CiAgICAgICAgICAgICAgICAgLyogY3Vyc29yIGJhY2sgKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgeCA9IC0oaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxKTsKKyAgICAgICAgICAgICAgICB4ID0gLShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjCisgICAgICAgICAgICAgICAgICA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxKTsKICAgICAgICAgICAgICAgICB1dl90dHlfbW92ZV9jYXJldChoYW5kbGUsIHgsIDEsIDAsIDEsIGVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICBjYXNlICdFJzoKICAgICAgICAgICAgICAgICAvKiBjdXJzb3IgbmV4dCBsaW5lICovCiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgIHkgPSBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDE7CisgICAgICAgICAgICAgICAgeSA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDE7CiAgICAgICAgICAgICAgICAgdXZfdHR5X21vdmVfY2FyZXQoaGFuZGxlLCAwLCAwLCB5LCAxLCBlcnJvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgICAgICAgLyogY3Vyc29yIHByZXZpb3VzIGxpbmUgKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgeSA9IC0oaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxKTsKKyAgICAgICAgICAgICAgICB5ID0gLShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjCisgICAgICAgICAgICAgICAgICA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxKTsKICAgICAgICAgICAgICAgICB1dl90dHlfbW92ZV9jYXJldChoYW5kbGUsIDAsIDAsIHksIDEsIGVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICBjYXNlICdHJzoKICAgICAgICAgICAgICAgICAvKiBjdXJzb3IgaG9yaXpvbnRhbCBtb3ZlIGFic29sdXRlICovCiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgIHggPSAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA+PSAxICYmIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0pCisgICAgICAgICAgICAgICAgeCA9IChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID49IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0pCiAgICAgICAgICAgICAgICAgICA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gLSAxIDogMDsKICAgICAgICAgICAgICAgICB1dl90dHlfbW92ZV9jYXJldChoYW5kbGUsIHgsIDAsIDAsIDEsIGVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5MzYsOSArMjAyNSwxMSBAQAogICAgICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICAvKiBjdXJzb3IgbW92ZSBhYnNvbHV0ZSAqLwogICAgICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKLSAgICAgICAgICAgICAgICB5ID0gKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPj0gMSAmJiBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdKQorICAgICAgICAgICAgICAgIHkgPSAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA+PSAxICYmCisgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdKQogICAgICAgICAgICAgICAgICAgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIC0gMSA6IDA7Ci0gICAgICAgICAgICAgICAgeCA9IChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID49IDIgJiYgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlsxXSkKKyAgICAgICAgICAgICAgICB4ID0gKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPj0gMiAmJgorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlsxXSkKICAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlsxXSAtIDEgOiAwOwogICAgICAgICAgICAgICAgIHV2X3R0eV9tb3ZlX2NhcmV0KGhhbmRsZSwgeCwgMCwgeSwgMCwgZXJyb3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk0Niw3ICsyMDM3LDggQEAKICAgICAgICAgICAgICAgY2FzZSAnSic6CiAgICAgICAgICAgICAgICAgLyogRXJhc2Ugc2NyZWVuICovCiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgIGQgPSBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDA7CisgICAgICAgICAgICAgICAgZCA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDA7CiAgICAgICAgICAgICAgICAgaWYgKGQgPj0gMCAmJiBkIDw9IDIpIHsKICAgICAgICAgICAgICAgICAgIHV2X3R0eV9jbGVhcihoYW5kbGUsIGQsIDEsIGVycm9yKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xOTU1LDcgKzIwNDcsOCBAQAogICAgICAgICAgICAgICBjYXNlICdLJzoKICAgICAgICAgICAgICAgICAvKiBFcmFzZSBsaW5lICovCiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgIGQgPSBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDA7CisgICAgICAgICAgICAgICAgZCA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDA7CiAgICAgICAgICAgICAgICAgaWYgKGQgPj0gMCAmJiBkIDw9IDIpIHsKICAgICAgICAgICAgICAgICAgIHV2X3R0eV9jbGVhcihoYW5kbGUsIGQsIDAsIGVycm9yKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xOTc4LDQxICsyMDcxLDE3IEBACiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwogICAgICAgICAgICAgICAgIHV2X3R0eV9yZXN0b3JlX3N0YXRlKGhhbmRsZSwgMCwgZXJyb3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgJ2wnOgotICAgICAgICAgICAgICAgIC8qIEhpZGUgdGhlIGN1cnNvciAqLwotICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID09IDEgJiYKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA9PSAyNSkgewotICAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgICAgdXZfdHR5X3NldF9jdXJzb3JfdmlzaWJpbGl0eShoYW5kbGUsIDAsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICAgICAgLyogU2hvdyB0aGUgY3Vyc29yICovCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPT0gMSAmJgotICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdID09IDI1KSB7Ci0gICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgICB1dl90dHlfc2V0X2N1cnNvcl92aXNpYmlsaXR5KGhhbmRsZSwgMSwgZXJyb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogU2VxdWVuY2UgZW5kZWQgLSBnbyBiYWNrIHRvIG5vcm1hbCBzdGF0ZS4gKi8KLSAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9OT1JNQUw7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBXZSBkb24ndCBzdXBwb3J0IGNvbW1hbmRzIHRoYXQgdXNlIHByaXZhdGUgbW9kZSBjaGFyYWN0ZXJzIG9yCi0gICAgICAgICAgICAgKiBpbnRlcm1lZGlhcmllcy4gSWdub3JlIHRoZSByZXN0IG9mIHRoZSBzZXF1ZW5jZS4gKi8KLSAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlIHw9IEFOU0lfSUdOT1JFOwotICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgfQorCisgICAgICAgICAgLyogU2VxdWVuY2UgZW5kZWQgLSBnbyBiYWNrIHRvIG5vcm1hbCBzdGF0ZS4gKi8KKyAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfTk9STUFMOworICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogV2UncmUgaWdub3JpbmcgdGhpcyBjb21tYW5kLiBTdG9wIG9ubHkgb24gY29tbWFuZCBjaGFyYWN0ZXIuICovCi0gICAgICAgICAgaWYgKHV0ZjhfY29kZXBvaW50ID49ICdAJyAmJiB1dGY4X2NvZGVwb2ludCA8PSAnficpIHsKLSAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9OT1JNQUw7Ci0gICAgICAgICAgfQorICAgICAgICAgIC8qIFdlIGRvbid0IHN1cHBvcnQgY29tbWFuZHMgdGhhdCB1c2UgcHJpdmF0ZSBtb2RlIGNoYXJhY3RlcnMgb3IKKyAgICAgICAgICAgKiBpbnRlcm1lZGlhcmllcy4gSWdub3JlIHRoZSByZXN0IG9mIHRoZSBzZXF1ZW5jZS4gKi8KKyAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfSUdOT1JFOwogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTIyNjQsMzggKzIzMzMsNTYgQEAKIHN0YXRpYyB2b2lkIHV2X19kZXRlcm1pbmVfdnRlcm1fc3RhdGUoSEFORExFIGhhbmRsZSkgewogICBEV09SRCBkd01vZGUgPSAwOwogCisgIHV2X19uZWVkX2NoZWNrX3Z0ZXJtX3N0YXRlID0gRkFMU0U7CiAgIGlmICghR2V0Q29uc29sZU1vZGUoaGFuZGxlLCAmZHdNb2RlKSkgewotICAgIHV2X192dGVybV9zdGF0ZSA9IFVWX1VOU1VQUE9SVEVEOwogICAgIHJldHVybjsKICAgfQogCiAgIGR3TW9kZSB8PSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwogICBpZiAoIVNldENvbnNvbGVNb2RlKGhhbmRsZSwgZHdNb2RlKSkgewotICAgIHV2X192dGVybV9zdGF0ZSA9IFVWX1VOU1VQUE9SVEVEOwogICAgIHJldHVybjsKICAgfQogCi0gIHV2X192dGVybV9zdGF0ZSA9IFVWX1NVUFBPUlRFRDsKKyAgdXZfX3Z0ZXJtX3N0YXRlID0gVVZfVFRZX1NVUFBPUlRFRDsKIH0KIAogc3RhdGljIERXT1JEIFdJTkFQSSB1dl9fdHR5X2NvbnNvbGVfcmVzaXplX21lc3NhZ2VfbG9vcF90aHJlYWQodm9pZCogcGFyYW0pIHsKLSAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gc2JfaW5mbzsKKyAgTlRTVEFUVVMgc3RhdHVzOworICBVTE9OR19QVFIgY29uaG9zdF9waWQ7CiAgIE1TRyBtc2c7CiAKLSAgaWYgKCFHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyh1dl9fdHR5X2NvbnNvbGVfaGFuZGxlLCAmc2JfaW5mbykpCisgIGlmIChwU2V0V2luRXZlbnRIb29rID09IE5VTEwgfHwgcE50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKIAotICB1dl9fdHR5X2NvbnNvbGVfd2lkdGggPSBzYl9pbmZvLmR3U2l6ZS5YOwotICB1dl9fdHR5X2NvbnNvbGVfaGVpZ2h0ID0gc2JfaW5mby5zcldpbmRvdy5Cb3R0b20gLSBzYl9pbmZvLnNyV2luZG93LlRvcCArIDE7CisgIHN0YXR1cyA9IHBOdFF1ZXJ5SW5mb3JtYXRpb25Qcm9jZXNzKEdldEN1cnJlbnRQcm9jZXNzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NDb25zb2xlSG9zdFByb2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25ob3N0X3BpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNvbmhvc3RfcGlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKLSAgaWYgKHBTZXRXaW5FdmVudEhvb2sgPT0gTlVMTCkKKyAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAvKiBXZSBjb3VsZG4ndCByZXRyaWV2ZSBvdXIgY29uc29sZSBob3N0IHByb2Nlc3MsIHByb2JhYmx5IGJlY2F1c2UgdGhpcworICAgICAqIGlzIGEgMzItYml0IHByb2Nlc3MgcnVubmluZyBvbiA2NC1iaXQgV2luZG93cy4gRmFsbCBiYWNrIHRvIHJlY2VpdmluZworICAgICAqIGNvbnNvbGUgZXZlbnRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBvbmx5LiAqLworICAgIHJldHVybiAwOworICB9CisKKyAgLyogRW5zdXJlIHRoZSBQSUQgaXMgYSBtdWx0aXBsZSBvZiA0LCB3aGljaCBpcyByZXF1aXJlZCBieSBTZXRXaW5FdmVudEhvb2sgKi8KKyAgY29uaG9zdF9waWQgJj0gfihVTE9OR19QVFIpMHgzOworCisgIHV2X190dHlfY29uc29sZV9yZXNpemVkID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworICBpZiAodXZfX3R0eV9jb25zb2xlX3Jlc2l6ZWQgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKFF1ZXVlVXNlcldvcmtJdGVtKHV2X190dHlfY29uc29sZV9yZXNpemVfd2F0Y2hlcl90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgV1RfRVhFQ1VURUxPTkdGVU5DVElPTikgPT0gMCkKICAgICByZXR1cm4gMDsKIAogICBpZiAoIXBTZXRXaW5FdmVudEhvb2soRVZFTlRfQ09OU09MRV9MQVlPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVF9DT05TT0xFX0xBWU9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICB1dl9fdHR5X2NvbnNvbGVfcmVzaXplX2V2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChEV09SRCljb25ob3N0X3BpZCwKICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FVkVOVF9PVVRPRkNPTlRFWFQpKQogICAgIHJldHVybiAwOwpAQCAtMjMxNCw2ICsyNDAxLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPTkcgaWRDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdFdmVudFRocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdtc0V2ZW50VGltZSkgeworICBTZXRFdmVudCh1dl9fdHR5X2NvbnNvbGVfcmVzaXplZCk7Cit9CisKK3N0YXRpYyBEV09SRCBXSU5BUEkgdXZfX3R0eV9jb25zb2xlX3Jlc2l6ZV93YXRjaGVyX3RocmVhZCh2b2lkKiBwYXJhbSkgeworICBmb3IgKDs7KSB7CisgICAgLyogTWFrZSBzdXJlIHRvIG5vdCBvdmVyd2hlbG0gdGhlIHN5c3RlbSB3aXRoIHJlc2l6ZSBldmVudHMgKi8KKyAgICBTbGVlcCgzMyk7CisgICAgV2FpdEZvclNpbmdsZU9iamVjdCh1dl9fdHR5X2NvbnNvbGVfcmVzaXplZCwgSU5GSU5JVEUpOworICAgIHV2X190dHlfY29uc29sZV9zaWduYWxfcmVzaXplKCk7CisgICAgUmVzZXRFdmVudCh1dl9fdHR5X2NvbnNvbGVfcmVzaXplZCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgdXZfX3R0eV9jb25zb2xlX3NpZ25hbF9yZXNpemUodm9pZCkgewogICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzYl9pbmZvOwogICBpbnQgd2lkdGgsIGhlaWdodDsKIApAQCAtMjMyMyw5ICsyNDI0LDI4IEBACiAgIHdpZHRoID0gc2JfaW5mby5kd1NpemUuWDsKICAgaGVpZ2h0ID0gc2JfaW5mby5zcldpbmRvdy5Cb3R0b20gLSBzYl9pbmZvLnNyV2luZG93LlRvcCArIDE7CiAKKyAgdXZfbXV0ZXhfbG9jaygmdXZfX3R0eV9jb25zb2xlX3Jlc2l6ZV9tdXRleCk7CisgIGFzc2VydCh1dl9fdHR5X2NvbnNvbGVfd2lkdGggIT0gLTEgJiYgdXZfX3R0eV9jb25zb2xlX2hlaWdodCAhPSAtMSk7CiAgIGlmICh3aWR0aCAhPSB1dl9fdHR5X2NvbnNvbGVfd2lkdGggfHwgaGVpZ2h0ICE9IHV2X190dHlfY29uc29sZV9oZWlnaHQpIHsKICAgICB1dl9fdHR5X2NvbnNvbGVfd2lkdGggPSB3aWR0aDsKICAgICB1dl9fdHR5X2NvbnNvbGVfaGVpZ2h0ID0gaGVpZ2h0OworICAgIHV2X211dGV4X3VubG9jaygmdXZfX3R0eV9jb25zb2xlX3Jlc2l6ZV9tdXRleCk7CiAgICAgdXZfX3NpZ25hbF9kaXNwYXRjaChTSUdXSU5DSCk7CisgIH0gZWxzZSB7CisgICAgdXZfbXV0ZXhfdW5sb2NrKCZ1dl9fdHR5X2NvbnNvbGVfcmVzaXplX211dGV4KTsKICAgfQogfQorCit2b2lkIHV2X3R0eV9zZXRfdnRlcm1fc3RhdGUodXZfdHR5X3Z0ZXJtc3RhdGVfdCBzdGF0ZSkgeworICB1dl9zZW1fd2FpdCgmdXZfdHR5X291dHB1dF9sb2NrKTsKKyAgdXZfX25lZWRfY2hlY2tfdnRlcm1fc3RhdGUgPSBGQUxTRTsKKyAgdXZfX3Z0ZXJtX3N0YXRlID0gc3RhdGU7CisgIHV2X3NlbV9wb3N0KCZ1dl90dHlfb3V0cHV0X2xvY2spOworfQorCitpbnQgdXZfdHR5X2dldF92dGVybV9zdGF0ZSh1dl90dHlfdnRlcm1zdGF0ZV90KiBzdGF0ZSkgeworICB1dl9zZW1fd2FpdCgmdXZfdHR5X291dHB1dF9sb2NrKTsKKyAgKnN0YXRlID0gdXZfX3Z0ZXJtX3N0YXRlOworICB1dl9zZW1fcG9zdCgmdXZfdHR5X291dHB1dF9sb2NrKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3VkcC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi91ZHAuYwppbmRleCA4YWVlYWIzLi41MDhlZDM3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3VkcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdWRwLmMKQEAgLTEyNSwxNyArMTI1LDEwIEBACiB9CiAKIAotaW50IHV2X3VkcF9pbml0X2V4KHV2X2xvb3BfdCogbG9vcCwgdXZfdWRwX3QqIGhhbmRsZSwgdW5zaWduZWQgaW50IGZsYWdzKSB7Ci0gIGludCBkb21haW47Ci0KLSAgLyogVXNlIHRoZSBsb3dlciA4IGJpdHMgZm9yIHRoZSBkb21haW4gKi8KLSAgZG9tYWluID0gZmxhZ3MgJiAweEZGOwotICBpZiAoZG9tYWluICE9IEFGX0lORVQgJiYgZG9tYWluICE9IEFGX0lORVQ2ICYmIGRvbWFpbiAhPSBBRl9VTlNQRUMpCi0gICAgcmV0dXJuIFVWX0VJTlZBTDsKLQotICBpZiAoZmxhZ3MgJiB+MHhGRikKLSAgICByZXR1cm4gVVZfRUlOVkFMOwotCitpbnQgdXZfX3VkcF9pbml0X2V4KHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgdXZfdWRwX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGludCBkb21haW4pIHsKICAgdXZfX2hhbmRsZV9pbml0KGxvb3AsICh1dl9oYW5kbGVfdCopIGhhbmRsZSwgVVZfVURQKTsKICAgaGFuZGxlLT5zb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKICAgaGFuZGxlLT5yZXFzX3BlbmRpbmcgPSAwOwpAQCAtMTc0LDExICsxNjcsNiBAQAogfQogCiAKLWludCB1dl91ZHBfaW5pdCh1dl9sb29wX3QqIGxvb3AsIHV2X3VkcF90KiBoYW5kbGUpIHsKLSAgcmV0dXJuIHV2X3VkcF9pbml0X2V4KGxvb3AsIGhhbmRsZSwgQUZfVU5TUEVDKTsKLX0KLQotCiB2b2lkIHV2X3VkcF9jbG9zZSh1dl9sb29wX3QqIGxvb3AsIHV2X3VkcF90KiBoYW5kbGUpIHsKICAgdXZfdWRwX3JlY3Zfc3RvcChoYW5kbGUpOwogICBjbG9zZXNvY2tldChoYW5kbGUtPnNvY2tldCk7CkBAIC03MDIsNiArNjkwLDExMiBAQAogfQogCiAKK3N0YXRpYyBpbnQgdXZfX3VkcF9zZXRfc291cmNlX21lbWJlcnNoaXA0KHV2X3VkcF90KiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4qIG11bHRpY2FzdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW50ZXJmYWNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4qIHNvdXJjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfbWVtYmVyc2hpcCBtZW1iZXJzaGlwKSB7CisgIHN0cnVjdCBpcF9tcmVxX3NvdXJjZSBtcmVxOworICBpbnQgb3B0bmFtZTsKKyAgaW50IGVycjsKKworICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9JUFY2KQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgLyogSWYgdGhlIHNvY2tldCBpcyB1bmJvdW5kLCBiaW5kIHRvIGluYWRkcl9hbnkuICovCisgIGVyciA9IHV2X3VkcF9tYXliZV9iaW5kKGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopICZ1dl9hZGRyX2lwNF9hbnlfLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodXZfYWRkcl9pcDRfYW55XyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVWX1VEUF9SRVVTRUFERFIpOworICBpZiAoZXJyKQorICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisKKyAgbWVtc2V0KCZtcmVxLCAwLCBzaXplb2YobXJlcSkpOworCisgIGlmIChpbnRlcmZhY2VfYWRkciAhPSBOVUxMKSB7CisgICAgZXJyID0gdXZfaW5ldF9wdG9uKEFGX0lORVQsIGludGVyZmFjZV9hZGRyLCAmbXJlcS5pbXJfaW50ZXJmYWNlLnNfYWRkcik7CisgICAgaWYgKGVycikKKyAgICAgIHJldHVybiBlcnI7CisgIH0gZWxzZSB7CisgICAgbXJlcS5pbXJfaW50ZXJmYWNlLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICB9CisKKyAgbXJlcS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG11bHRpY2FzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHI7CisgIG1yZXEuaW1yX3NvdXJjZWFkZHIuc19hZGRyID0gc291cmNlX2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKworICBpZiAobWVtYmVyc2hpcCA9PSBVVl9KT0lOX0dST1VQKQorICAgIG9wdG5hbWUgPSBJUF9BRERfU09VUkNFX01FTUJFUlNISVA7CisgIGVsc2UgaWYgKG1lbWJlcnNoaXAgPT0gVVZfTEVBVkVfR1JPVVApCisgICAgb3B0bmFtZSA9IElQX0RST1BfU09VUkNFX01FTUJFUlNISVA7CisgIGVsc2UKKyAgICByZXR1cm4gVVZfRUlOVkFMOworCisgIGlmIChzZXRzb2Nrb3B0KGhhbmRsZS0+c29ja2V0LAorICAgICAgICAgICAgICAgICBJUFBST1RPX0lQLAorICAgICAgICAgICAgICAgICBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAoY2hhciopICZtcmVxLAorICAgICAgICAgICAgICAgICBzaXplb2YobXJlcSkpID09IFNPQ0tFVF9FUlJPUikgeworICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKFdTQUdldExhc3RFcnJvcigpKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisKK2ludCB1dl9fdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcDYodXZfdWRwX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiogbXVsdGljYXN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBzb3VyY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfbWVtYmVyc2hpcCBtZW1iZXJzaGlwKSB7CisgIHN0cnVjdCBncm91cF9zb3VyY2VfcmVxIG1yZXE7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisgIGludCBvcHRuYW1lOworICBpbnQgZXJyOworCisgIGlmICgoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9CT1VORCkgJiYgIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0lQVjYpKQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgZXJyID0gdXZfdWRwX21heWJlX2JpbmQoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgJnV2X2FkZHJfaXA2X2FueV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1dl9hZGRyX2lwNl9hbnlfKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVZfVURQX1JFVVNFQUREUik7CisKKyAgaWYgKGVycikKKyAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworCisgIG1lbXNldCgmbXJlcSwgMCwgc2l6ZW9mKG1yZXEpKTsKKworICBpZiAoaW50ZXJmYWNlX2FkZHIgIT0gTlVMTCkgeworICAgIGVyciA9IHV2X2lwNl9hZGRyKGludGVyZmFjZV9hZGRyLCAwLCAmYWRkcjYpOworICAgIGlmIChlcnIpCisgICAgICByZXR1cm4gZXJyOworICAgIG1yZXEuZ3NyX2ludGVyZmFjZSA9IGFkZHI2LnNpbjZfc2NvcGVfaWQ7CisgIH0gZWxzZSB7CisgICAgbXJlcS5nc3JfaW50ZXJmYWNlID0gMDsKKyAgfQorCisgIG1lbWNweSgmbXJlcS5nc3JfZ3JvdXAsIG11bHRpY2FzdF9hZGRyLCBzaXplb2YobXJlcS5nc3JfZ3JvdXApKTsKKyAgbWVtY3B5KCZtcmVxLmdzcl9zb3VyY2UsIHNvdXJjZV9hZGRyLCBzaXplb2YobXJlcS5nc3Jfc291cmNlKSk7CisKKyAgaWYgKG1lbWJlcnNoaXAgPT0gVVZfSk9JTl9HUk9VUCkKKyAgICBvcHRuYW1lID0gTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVA7CisgIGVsc2UgaWYgKG1lbWJlcnNoaXAgPT0gVVZfTEVBVkVfR1JPVVApCisgICAgb3B0bmFtZSA9IE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUDsKKyAgZWxzZQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgaWYgKHNldHNvY2tvcHQoaGFuZGxlLT5zb2NrZXQsCisgICAgICAgICAgICAgICAgIElQUFJPVE9fSVBWNiwKKyAgICAgICAgICAgICAgICAgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgKGNoYXIqKSAmbXJlcSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKG1yZXEpKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihXU0FHZXRMYXN0RXJyb3IoKSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworCiBpbnQgdXZfdWRwX3NldF9tZW1iZXJzaGlwKHV2X3VkcF90KiBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG11bHRpY2FzdF9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKQEAgLTcxOCw2ICs4MTIsNTAgQEAKIH0KIAogCitpbnQgdXZfdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcCh1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbXVsdGljYXN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfbWVtYmVyc2hpcCBtZW1iZXJzaGlwKSB7CisgIGludCBlcnI7CisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIG1jYXN0X2FkZHI7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiogbWNhc3RfYWRkcjQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYqIG1jYXN0X2FkZHI2OworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcmNfYWRkcjsKKyAgc3RydWN0IHNvY2thZGRyX2luKiBzcmNfYWRkcjQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYqIHNyY19hZGRyNjsKKworICBtY2FzdF9hZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSZtY2FzdF9hZGRyOworICBtY2FzdF9hZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KikmbWNhc3RfYWRkcjsKKyAgc3JjX2FkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiopJnNyY19hZGRyOworICBzcmNfYWRkcjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiopJnNyY19hZGRyOworCisgIGVyciA9IHV2X2lwNF9hZGRyKG11bHRpY2FzdF9hZGRyLCAwLCBtY2FzdF9hZGRyNCk7CisgIGlmIChlcnIpIHsKKyAgICBlcnIgPSB1dl9pcDZfYWRkcihtdWx0aWNhc3RfYWRkciwgMCwgbWNhc3RfYWRkcjYpOworICAgIGlmIChlcnIpCisgICAgICByZXR1cm4gZXJyOworICAgIGVyciA9IHV2X2lwNl9hZGRyKHNvdXJjZV9hZGRyLCAwLCBzcmNfYWRkcjYpOworICAgIGlmIChlcnIpCisgICAgICByZXR1cm4gZXJyOworICAgIHJldHVybiB1dl9fdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcDYoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNhc3RfYWRkcjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hZGRyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcnNoaXApOworICB9CisgIAorICBlcnIgPSB1dl9pcDRfYWRkcihzb3VyY2VfYWRkciwgMCwgc3JjX2FkZHI0KTsKKyAgaWYgKGVycikKKyAgICByZXR1cm4gZXJyOworICByZXR1cm4gdXZfX3VkcF9zZXRfc291cmNlX21lbWJlcnNoaXA0KGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY2FzdF9hZGRyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWRkcjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyc2hpcCk7Cit9CisKKwogaW50IHV2X3VkcF9zZXRfbXVsdGljYXN0X2ludGVyZmFjZSh1dl91ZHBfdCogaGFuZGxlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkcikgewogICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyX3N0OwogICBzdHJ1Y3Qgc29ja2FkZHJfaW4qIGFkZHI0OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi91dGlsLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3V0aWwuYwppbmRleCA3Y2E4MzIxLi45ZTFlN2Y3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3V0aWwuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3V0aWwuYwpAQCAtNjAsOCArNjAsOCBAQAogI2VuZGlmCiAKIAotLyogTWF4aW11bSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzaXplLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgKi8KLSNkZWZpbmUgTUFYX0VOVl9WQVJfTEVOR1RIIDMyNzY3CisvKiBBIFJ0bEdlblJhbmRvbSgpIGJ5IGFueSBvdGhlciBuYW1lLi4uICovCitleHRlcm4gQk9PTEVBTiBOVEFQSSBTeXN0ZW1GdW5jdGlvbjAzNihQVk9JRCBCdWZmZXIsIFVMT05HIEJ1ZmZlckxlbmd0aCk7CiAKIC8qIENhY2hlZCBjb3B5IG9mIHRoZSBwcm9jZXNzIHRpdGxlLCBwbHVzIGEgbXV0ZXggZ3VhcmRpbmcgaXQuICovCiBzdGF0aWMgY2hhciAqcHJvY2Vzc190aXRsZTsKQEAgLTE1MSwyMCArMTUxLDI2IEBACiAKIGludCB1dl9jd2QoY2hhciogYnVmZmVyLCBzaXplX3QqIHNpemUpIHsKICAgRFdPUkQgdXRmMTZfbGVuOwotICBXQ0hBUiB1dGYxNl9idWZmZXJbTUFYX1BBVEhdOworICBXQ0hBUiAqdXRmMTZfYnVmZmVyOwogICBpbnQgcjsKIAogICBpZiAoYnVmZmVyID09IE5VTEwgfHwgc2l6ZSA9PSBOVUxMKSB7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKICAgfQogCi0gIHV0ZjE2X2xlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCB1dGYxNl9idWZmZXIpOworICB1dGYxNl9sZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VygwLCBOVUxMKTsKICAgaWYgKHV0ZjE2X2xlbiA9PSAwKSB7CiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwotICB9IGVsc2UgaWYgKHV0ZjE2X2xlbiA+IE1BWF9QQVRIKSB7Ci0gICAgLyogVGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZTsgaG93ZXZlciB0aGUgQ1JUIGhhcyBhIGNvZGUgcGF0aCB0byBkZWFsIHdpdGgKLSAgICAgKiB0aGlzIHNjZW5hcmlvLCBzbyBJIGFkZGVkIGEgY2hlY2sgYW55d2F5LiAqLwotICAgIHJldHVybiBVVl9FSU87CisgIH0KKyAgdXRmMTZfYnVmZmVyID0gdXZfX21hbGxvYyh1dGYxNl9sZW4gKiBzaXplb2YoV0NIQVIpKTsKKyAgaWYgKHV0ZjE2X2J1ZmZlciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIFVWX0VOT01FTTsKKyAgfQorCisgIHV0ZjE2X2xlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKHV0ZjE2X2xlbiwgdXRmMTZfYnVmZmVyKTsKKyAgaWYgKHV0ZjE2X2xlbiA9PSAwKSB7CisgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKKyAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CiAgIH0KIAogICAvKiB1dGYxNl9sZW4gY29udGFpbnMgdGhlIGxlbmd0aCwgKm5vdCogaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsLiAqLwpAQCAtMTg4LDggKzE5NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgaWYgKHIgPT0gMCkgeworICAgIHV2X19mcmVlKHV0ZjE2X2J1ZmZlcik7CiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogICB9IGVsc2UgaWYgKHIgPiAoaW50KSAqc2l6ZSkgeworICAgIHV2X19mcmVlKHV0ZjE2X2J1ZmZlcik7CiAgICAgKnNpemUgPSByOwogICAgIHJldHVybiBVVl9FTk9CVUZTOwogICB9CkBAIC0yMDMsNiArMjExLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNpemUgPiBJTlRfTUFYID8gSU5UX01BWCA6IChpbnQpICpzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKKwogICBpZiAociA9PSAwKSB7CiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogICB9CkBAIC0yMTMsNDMgKzIyMyw2MSBAQAogCiAKIGludCB1dl9jaGRpcihjb25zdCBjaGFyKiBkaXIpIHsKLSAgV0NIQVIgdXRmMTZfYnVmZmVyW01BWF9QQVRIXTsKLSAgc2l6ZV90IHV0ZjE2X2xlbjsKKyAgV0NIQVIgKnV0ZjE2X2J1ZmZlcjsKKyAgc2l6ZV90IHV0ZjE2X2xlbiwgbmV3X3V0ZjE2X2xlbjsKICAgV0NIQVIgZHJpdmVfbGV0dGVyLCBlbnZfdmFyWzRdOwogCiAgIGlmIChkaXIgPT0gTlVMTCkgewogICAgIHJldHVybiBVVl9FSU5WQUw7CiAgIH0KIAorICB1dGYxNl9sZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgaWYgKHV0ZjE2X2xlbiA9PSAwKSB7CisgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOworICB9CisgIHV0ZjE2X2J1ZmZlciA9IHV2X19tYWxsb2ModXRmMTZfbGVuICogc2l6ZW9mKFdDSEFSKSk7CisgIGlmICh1dGYxNl9idWZmZXIgPT0gTlVMTCkgeworICAgIHJldHVybiBVVl9FTk9NRU07CisgIH0KKwogICBpZiAoTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1dGYxNl9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9QQVRIKSA9PSAwKSB7Ci0gICAgRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAvKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgMjYwIGNoYXJzLAotICAgICAqIGluY2x1ZGluZyB0ZXJtaW5hdGluZyBudWxsLiBJZiBpdCBkb2Vzbid0IGZpdCwgdGhlIHBhdGggbmFtZSBtdXN0IGJlIHRvbwotICAgICAqIGxvbmcuICovCi0gICAgaWYgKGVycm9yID09IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpIHsKLSAgICAgIHJldHVybiBVVl9FTkFNRVRPT0xPTkc7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycm9yKTsKLSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjE2X2xlbikgPT0gMCkgeworICAgIHV2X19mcmVlKHV0ZjE2X2J1ZmZlcik7CisgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogICB9CiAKICAgaWYgKCFTZXRDdXJyZW50RGlyZWN0b3J5Vyh1dGYxNl9idWZmZXIpKSB7CisgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CiAgIH0KIAogICAvKiBXaW5kb3dzIHN0b3JlcyB0aGUgZHJpdmUtbG9jYWwgcGF0aCBpbiBhbiAiaGlkZGVuIiBlbnZpcm9ubWVudCB2YXJpYWJsZSwKICAgICogd2hpY2ggaGFzIHRoZSBmb3JtICI9Qzo9QzpcV2luZG93cyIuIFNldEN1cnJlbnREaXJlY3RvcnkgZG9lcyBub3QgdXBkYXRlCiAgICAqIHRoaXMsIHNvIHdlJ2xsIGhhdmUgdG8gZG8gaXQuICovCi0gIHV0ZjE2X2xlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCB1dGYxNl9idWZmZXIpOworICBuZXdfdXRmMTZfbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcodXRmMTZfbGVuLCB1dGYxNl9idWZmZXIpOworICBpZiAobmV3X3V0ZjE2X2xlbiA+IHV0ZjE2X2xlbiApIHsKKyAgICB1dl9fZnJlZSh1dGYxNl9idWZmZXIpOworICAgIHV0ZjE2X2J1ZmZlciA9IHV2X19tYWxsb2MobmV3X3V0ZjE2X2xlbiAqIHNpemVvZihXQ0hBUikpOworICAgIGlmICh1dGYxNl9idWZmZXIgPT0gTlVMTCkgeworICAgICAgLyogV2hlbiB1cGRhdGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZmFpbHMsIHJldHVybiBVVl9PSyBhbnl3YXkuCisgICAgICAgKiBXZSBkaWQgc3VjY2Vzc2Z1bGx5IGNoYW5nZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBvbmx5IHVwZGF0aW5nCisgICAgICAgKiBoaWRkZW4gZW52IHZhcmlhYmxlIGZhaWxlZC4gKi8KKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBuZXdfdXRmMTZfbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcobmV3X3V0ZjE2X2xlbiwgdXRmMTZfYnVmZmVyKTsKKyAgfQogICBpZiAodXRmMTZfbGVuID09IDApIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7Ci0gIH0gZWxzZSBpZiAodXRmMTZfbGVuID4gTUFYX1BBVEgpIHsKLSAgICByZXR1cm4gVVZfRUlPOworICAgIHV2X19mcmVlKHV0ZjE2X2J1ZmZlcik7CisgICAgcmV0dXJuIDA7CiAgIH0KIAogICAvKiBUaGUgcmV0dXJuZWQgZGlyZWN0b3J5IHNob3VsZCBub3QgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoLCB1bmxlc3MgaXQgcG9pbnRzCkBAIC0yODEsMTEgKzMwOSwxMCBAQAogICAgIGVudl92YXJbMl0gPSBMJzonOwogICAgIGVudl92YXJbM10gPSBMJ1wwJzsKIAotICAgIGlmICghU2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoZW52X3ZhciwgdXRmMTZfYnVmZmVyKSkgewotICAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwotICAgIH0KKyAgICBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnZfdmFyLCB1dGYxNl9idWZmZXIpOwogICB9CiAKKyAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM1OCw2ICszODUsMTAgQEAKIH0KIAogCit2b2lkIHV2X19wcm9jZXNzX3RpdGxlX2NsZWFudXAodm9pZCkgeworfQorCisKIGludCB1dl9zZXRfcHJvY2Vzc190aXRsZShjb25zdCBjaGFyKiB0aXRsZSkgewogICBpbnQgZXJyOwogICBpbnQgbGVuZ3RoOwpAQCAtNzIxLDE3ICs3NTIsNiBAQAogfQogCiAKLXZvaWQgdXZfZnJlZV9jcHVfaW5mbyh1dl9jcHVfaW5mb190KiBjcHVfaW5mb3MsIGludCBjb3VudCkgewotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgIHV2X19mcmVlKGNwdV9pbmZvc1tpXS5tb2RlbCk7Ci0gIH0KLQotICB1dl9fZnJlZShjcHVfaW5mb3MpOwotfQotCi0KIHN0YXRpYyBpbnQgaXNfd2luZG93c192ZXJzaW9uX29yX2dyZWF0ZXIoRFdPUkQgb3NfbWFqb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIG9zX21pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEIHNlcnZpY2VfcGFja19tYWpvciwKQEAgLTExNzEsMjAgKzExOTEsMjkgQEAKIAogCiBpbnQgdXZfb3NfdG1wZGlyKGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBzaXplKSB7Ci0gIHdjaGFyX3QgcGF0aFtNQVhfUEFUSCArIDFdOworICB3Y2hhcl90ICpwYXRoOwogICBEV09SRCBidWZzaXplOwogICBzaXplX3QgbGVuOwogCiAgIGlmIChidWZmZXIgPT0gTlVMTCB8fCBzaXplID09IE5VTEwgfHwgKnNpemUgPT0gMCkKICAgICByZXR1cm4gVVZfRUlOVkFMOwogCi0gIGxlbiA9IEdldFRlbXBQYXRoVyhNQVhfUEFUSCArIDEsIHBhdGgpOwotCisgIGxlbiA9IDA7CisgIGxlbiA9IEdldFRlbXBQYXRoVygwLCBOVUxMKTsKICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwotICB9IGVsc2UgaWYgKGxlbiA+IE1BWF9QQVRIICsgMSkgewotICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSAqLwotICAgIHJldHVybiBVVl9FSU87CisgIH0KKyAgLyogSW5jbHVkZSBzcGFjZSBmb3IgdGVybWluYXRpbmcgbnVsbCBjaGFyLiAqLworICBsZW4gKz0gMTsKKyAgcGF0aCA9IHV2X19tYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgIHJldHVybiBVVl9FTk9NRU07CisgIH0KKyAgbGVuICA9IEdldFRlbXBQYXRoVyhsZW4sIHBhdGgpOworCisgIGlmIChsZW4gPT0gMCkgeworICAgIHV2X19mcmVlKHBhdGgpOworICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKICAgfQogCiAgIC8qIFRoZSByZXR1cm5lZCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBoYXZlIGEgdHJhaWxpbmcgc2xhc2gsIHVubGVzcyBpdCBwb2ludHMKQEAgLTExOTksOCArMTIyOCwxMCBAQAogICBidWZzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCBwYXRoLCAtMSwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CiAKICAgaWYgKGJ1ZnNpemUgPT0gMCkgeworICAgIHV2X19mcmVlKHBhdGgpOwogICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKICAgfSBlbHNlIGlmIChidWZzaXplID4gKnNpemUpIHsKKyAgICB1dl9fZnJlZShwYXRoKTsKICAgICAqc2l6ZSA9IGJ1ZnNpemU7CiAgICAgcmV0dXJuIFVWX0VOT0JVRlM7CiAgIH0KQEAgLTEyMTQsNiArMTI0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgdXZfX2ZyZWUocGF0aCk7CiAKICAgaWYgKGJ1ZnNpemUgPT0gMCkKICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CkBAIC0xMzI1LDcgKzEzNTcsNyBAQAogICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKICAgfQogCi0gICgqdXRmMTYpW2J1ZnNpemVdID0gJ1wwJzsKKyAgKCp1dGYxNilbYnVmc2l6ZV0gPSBMJ1wwJzsKICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzMsNyArMTM2NSw3IEBACiBpbnQgdXZfX2dldHB3dWlkX3IodXZfcGFzc3dkX3QqIHB3ZCkgewogICBIQU5ETEUgdG9rZW47CiAgIHdjaGFyX3QgdXNlcm5hbWVbVU5MRU4gKyAxXTsKLSAgd2NoYXJfdCBwYXRoW01BWF9QQVRIXTsKKyAgd2NoYXJfdCAqcGF0aDsKICAgRFdPUkQgYnVmc2l6ZTsKICAgaW50IHI7CiAKQEAgLTEzNDQsMTUgKzEzNzYsMjQgQEAKICAgaWYgKE9wZW5Qcm9jZXNzVG9rZW4oR2V0Q3VycmVudFByb2Nlc3MoKSwgVE9LRU5fUkVBRCwgJnRva2VuKSA9PSAwKQogICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKIAotICBidWZzaXplID0gQVJSQVlfU0laRShwYXRoKTsKKyAgYnVmc2l6ZSA9IDA7CisgIEdldFVzZXJQcm9maWxlRGlyZWN0b3J5Vyh0b2tlbiwgTlVMTCwgJmJ1ZnNpemUpOworICBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgeworICAgIHIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBDbG9zZUhhbmRsZSh0b2tlbik7CisgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3Iocik7CisgIH0KKworICBwYXRoID0gdXZfX21hbGxvYyhidWZzaXplICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgIENsb3NlSGFuZGxlKHRva2VuKTsKKyAgICByZXR1cm4gVVZfRU5PTUVNOworICB9CisKICAgaWYgKCFHZXRVc2VyUHJvZmlsZURpcmVjdG9yeVcodG9rZW4sIHBhdGgsICZidWZzaXplKSkgewogICAgIHIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICBDbG9zZUhhbmRsZSh0b2tlbik7Ci0KLSAgICAvKiBUaGlzIHNob3VsZCBub3QgYmUgcG9zc2libGUgKi8KLSAgICBpZiAociA9PSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKQotICAgICAgcmV0dXJuIFVWX0VOT01FTTsKLQorICAgIHV2X19mcmVlKHBhdGgpOwogICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKHIpOwogICB9CiAKQEAgLTEzNjIsNiArMTQwMyw3IEBACiAgIGJ1ZnNpemUgPSBBUlJBWV9TSVpFKHVzZXJuYW1lKTsKICAgaWYgKCFHZXRVc2VyTmFtZVcodXNlcm5hbWUsICZidWZzaXplKSkgewogICAgIHIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICB1dl9fZnJlZShwYXRoKTsKIAogICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSAqLwogICAgIGlmIChyID09IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpCkBAIC0xMzcyLDYgKzE0MTQsNyBAQAogCiAgIHB3ZC0+aG9tZWRpciA9IE5VTEw7CiAgIHIgPSB1dl9fY29udmVydF91dGYxNl90b191dGY4KHBhdGgsIC0xLCAmcHdkLT5ob21lZGlyKTsKKyAgdXZfX2ZyZWUocGF0aCk7CiAKICAgaWYgKHIgIT0gMCkKICAgICByZXR1cm4gcjsKQEAgLTEzOTcsOCArMTQ0MCw4MSBAQAogfQogCiAKK2ludCB1dl9vc19lbnZpcm9uKHV2X2Vudl9pdGVtX3QqKiBlbnZpdGVtcywgaW50KiBjb3VudCkgeworICB3Y2hhcl90KiBlbnY7CisgIHdjaGFyX3QqIHBlbnY7CisgIGludCBpLCBjbnQ7CisgIHV2X2Vudl9pdGVtX3QqIGVudml0ZW07CisKKyAgKmVudml0ZW1zID0gTlVMTDsKKyAgKmNvdW50ID0gMDsKKworICBlbnYgPSBHZXRFbnZpcm9ubWVudFN0cmluZ3NXKCk7CisgIGlmIChlbnYgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBmb3IgKHBlbnYgPSBlbnYsIGkgPSAwOyAqcGVudiAhPSBMJ1wwJzsgcGVudiArPSB3Y3NsZW4ocGVudikgKyAxLCBpKyspOworCisgICplbnZpdGVtcyA9IHV2X19jYWxsb2MoaSwgc2l6ZW9mKCoqZW52aXRlbXMpKTsKKyAgaWYgKCplbnZpdGVtcyA9PSBOVUxMKSB7CisgICAgRnJlZUVudmlyb25tZW50U3RyaW5nc1coZW52KTsKKyAgICByZXR1cm4gVVZfRU5PTUVNOworICB9CisKKyAgcGVudiA9IGVudjsKKyAgY250ID0gMDsKKworICB3aGlsZSAoKnBlbnYgIT0gTCdcMCcgJiYgY250IDwgaSkgeworICAgIGNoYXIqIGJ1ZjsKKyAgICBjaGFyKiBwdHI7CisKKyAgICBpZiAodXZfX2NvbnZlcnRfdXRmMTZfdG9fdXRmOChwZW52LCAtMSwgJmJ1ZikgIT0gMCkKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIFVzaW5nIGJ1ZiArIDEgaGVyZSBiZWNhdXNlIHdlIGtub3cgdGhhdCBgYnVmYCBoYXMgbGVuZ3RoIGF0IGxlYXN0IDEsCisgICAgICogYW5kIHNvbWUgc3BlY2lhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gV2luZG93cyBzdGFydCB3aXRoIGEgPSBzaWduLiAqLworICAgIHB0ciA9IHN0cmNocihidWYgKyAxLCAnPScpOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgdXZfX2ZyZWUoYnVmKTsKKyAgICAgIGdvdG8gZG9fY29udGludWU7CisgICAgfQorCisgICAgKnB0ciA9ICdcMCc7CisKKyAgICBlbnZpdGVtID0gJigqZW52aXRlbXMpW2NudF07CisgICAgZW52aXRlbS0+bmFtZSA9IGJ1ZjsKKyAgICBlbnZpdGVtLT52YWx1ZSA9IHB0ciArIDE7CisKKyAgICBjbnQrKzsKKworICBkb19jb250aW51ZToKKyAgICBwZW52ICs9IHdjc2xlbihwZW52KSArIDE7CisgIH0KKworICBGcmVlRW52aXJvbm1lbnRTdHJpbmdzVyhlbnYpOworCisgICpjb3VudCA9IGNudDsKKyAgcmV0dXJuIDA7CisKK2ZhaWw6CisgIEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXKGVudik7CisKKyAgZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisgICAgZW52aXRlbSA9ICYoKmVudml0ZW1zKVtjbnRdOworICAgIHV2X19mcmVlKGVudml0ZW0tPm5hbWUpOworICB9CisgIHV2X19mcmVlKCplbnZpdGVtcyk7CisKKyAgKmVudml0ZW1zID0gTlVMTDsKKyAgKmNvdW50ID0gMDsKKyAgcmV0dXJuIFVWX0VOT01FTTsKK30KKworCiBpbnQgdXZfb3NfZ2V0ZW52KGNvbnN0IGNoYXIqIG5hbWUsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBzaXplKSB7Ci0gIHdjaGFyX3QgdmFyW01BWF9FTlZfVkFSX0xFTkdUSF07CisgIHdjaGFyX3QgZmFzdHZhcls1MTJdOworICB3Y2hhcl90KiB2YXI7CisgIERXT1JEIHZhcmxlbjsKICAgd2NoYXJfdCogbmFtZV93OwogICBEV09SRCBidWZzaXplOwogICBzaXplX3QgbGVuOwpAQCAtMTQxMiwyNyArMTUyOCw1MiBAQAogICBpZiAociAhPSAwKQogICAgIHJldHVybiByOwogCi0gIGxlbiA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKG5hbWVfdywgdmFyLCBNQVhfRU5WX1ZBUl9MRU5HVEgpOworICB2YXIgPSBmYXN0dmFyOworICB2YXJsZW4gPSBBUlJBWV9TSVpFKGZhc3R2YXIpOworCisgIGZvciAoOzspIHsKKyAgICBTZXRMYXN0RXJyb3IoRVJST1JfU1VDQ0VTUyk7CisgICAgbGVuID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcobmFtZV93LCB2YXIsIHZhcmxlbik7CisKKyAgICBpZiAobGVuIDwgdmFybGVuKQorICAgICAgYnJlYWs7CisKKyAgICAvKiBUcnkgcmVwZWF0ZWRseSBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgYmVlbiBwcmVlbXB0ZWQgYnkgYW5vdGhlciB0aHJlYWQKKyAgICAgKiBtb2RpZnlpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGp1c3QgYXMgd2UncmUgdHJ5aW5nIHRvIHJlYWQgaXQuCisgICAgICovCisgICAgaWYgKHZhciAhPSBmYXN0dmFyKQorICAgICAgdXZfX2ZyZWUodmFyKTsKKworICAgIHZhcmxlbiA9IDEgKyBsZW47CisgICAgdmFyID0gdXZfX21hbGxvYyh2YXJsZW4gKiBzaXplb2YoKnZhcikpOworCisgICAgaWYgKHZhciA9PSBOVUxMKSB7CisgICAgICByID0gVVZfRU5PTUVNOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgfQorCiAgIHV2X19mcmVlKG5hbWVfdyk7Ci0gIGFzc2VydChsZW4gPCBNQVhfRU5WX1ZBUl9MRU5HVEgpOyAvKiBsZW4gZG9lcyBub3QgaW5jbHVkZSB0aGUgbnVsbCAqLworICBuYW1lX3cgPSBOVUxMOwogCiAgIGlmIChsZW4gPT0gMCkgewogICAgIHIgPSBHZXRMYXN0RXJyb3IoKTsKLQotICAgIGlmIChyID09IEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQpCi0gICAgICByZXR1cm4gVVZfRU5PRU5UOwotCi0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3Iocik7CisgICAgaWYgKHIgIT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgciA9IHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3Iocik7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQogICB9CiAKICAgLyogQ2hlY2sgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCAqLwogICBidWZzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB2YXIsIC0xLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKIAogICBpZiAoYnVmc2l6ZSA9PSAwKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOworICAgIHIgPSB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKKyAgICBnb3RvIGZhaWw7CiAgIH0gZWxzZSBpZiAoYnVmc2l6ZSA+ICpzaXplKSB7CiAgICAgKnNpemUgPSBidWZzaXplOwotICAgIHJldHVybiBVVl9FTk9CVUZTOworICAgIHIgPSBVVl9FTk9CVUZTOworICAgIGdvdG8gZmFpbDsKICAgfQogCiAgIC8qIENvbnZlcnQgdG8gVVRGLTggKi8KQEAgLTE0NDUsMTEgKzE1ODYsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKLSAgaWYgKGJ1ZnNpemUgPT0gMCkKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CisgIGlmIChidWZzaXplID09IDApIHsKKyAgICByID0gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CisgICAgZ290byBmYWlsOworICB9CiAKICAgKnNpemUgPSBidWZzaXplIC0gMTsKLSAgcmV0dXJuIDA7CisgIHIgPSAwOworCitmYWlsOgorCisgIGlmIChuYW1lX3cgIT0gTlVMTCkKKyAgICB1dl9fZnJlZShuYW1lX3cpOworCisgIGlmICh2YXIgIT0gZmFzdHZhcikKKyAgICB1dl9fZnJlZSh2YXIpOworCisgIHJldHVybiByOwogfQogCiAKQEAgLTE4MDIsMyArMTk1NSwxNyBAQAogICB0di0+dHZfdXNlYyA9IChpbnQzMl90KSAoKCh1bGFyZ2UuUXVhZFBhcnQgLSBlcG9jaCkgJSAxMDAwMDAwMEwpIC8gMTApOwogICByZXR1cm4gMDsKIH0KKworaW50IHV2X19yYW5kb21fcnRsZ2VucmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1ZmxlbikgeworICBpZiAoYnVmbGVuID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFN5c3RlbUZ1bmN0aW9uMDM2KGJ1ZiwgYnVmbGVuKSA9PSBGQUxTRSkKKyAgICByZXR1cm4gVVZfRUlPOworCisgIHJldHVybiAwOworfQorCit2b2lkIHV2X3NsZWVwKHVuc2lnbmVkIGludCBtc2VjKSB7CisgIFNsZWVwKG1zZWMpOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5hcGkuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luYXBpLmMKaW5kZXggZmJiYmNlZS4uYmI4NmVjOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5hcGkuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbmFwaS5jCkBAIC0zNCw2ICszNCw3IEBACiBzTnRRdWVyeVZvbHVtZUluZm9ybWF0aW9uRmlsZSBwTnRRdWVyeVZvbHVtZUluZm9ybWF0aW9uRmlsZTsKIHNOdFF1ZXJ5RGlyZWN0b3J5RmlsZSBwTnRRdWVyeURpcmVjdG9yeUZpbGU7CiBzTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uIHBOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb247CitzTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyBwTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzczsKIAogLyogS2VybmVsMzIgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIHNHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzRXggcEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNFeDsKQEAgLTEwNiw2ICsxMDcsMTMgQEAKICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkdldFByb2NBZGRyZXNzIik7CiAgIH0KIAorICBwTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyA9IChzTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcykgR2V0UHJvY0FkZHJlc3MoCisgICAgICBudGRsbF9tb2R1bGUsCisgICAgICAiTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyIpOworICBpZiAocE50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MgPT0gTlVMTCkgeworICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiR2V0UHJvY0FkZHJlc3MiKTsKKyAgfQorCiAgIGtlcm5lbDMyX21vZHVsZSA9IEdldE1vZHVsZUhhbmRsZUEoImtlcm5lbDMyLmRsbCIpOwogICBpZiAoa2VybmVsMzJfbW9kdWxlID09IE5VTEwpIHsKICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkdldE1vZHVsZUhhbmRsZUEiKTsKQEAgLTEyNiw1ICsxMzQsNCBAQAogICAgIHBTZXRXaW5FdmVudEhvb2sgPSAoc1NldFdpbkV2ZW50SG9vaykKICAgICAgIEdldFByb2NBZGRyZXNzKHVzZXIzMl9tb2R1bGUsICJTZXRXaW5FdmVudEhvb2siKTsKICAgfQotCiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbmFwaS5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5hcGkuaAppbmRleCAxZTQ5YjU3Li43N2YxODc4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbmFwaS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luYXBpLmgKQEAgLTQxMDksNyArNDEwOSw3IEBACiAjZW5kaWYKIAogLyogZnJvbSB3aW50ZXJubC5oICovCi0jaWYgIWRlZmluZWQoX19VTklDT0RFX1NUUklOR19ERUZJTkVEKSAmJiBkZWZpbmVkKF9fTUlOR1czMl8pCisjaWYgIWRlZmluZWQoX19VTklDT0RFX1NUUklOR19ERUZJTkVEKSAmJiBkZWZpbmVkKF9fTUlOR1czMl9fKQogI2RlZmluZSBfX1VOSUNPREVfU1RSSU5HX0RFRklORUQKICNlbmRpZgogdHlwZWRlZiBzdHJ1Y3QgX1VOSUNPREVfU1RSSU5HIHsKQEAgLTQxNjAsNiArNDE2MCwxMCBAQAogICAgICAgc3RydWN0IHsKICAgICAgICAgVUNIQVIgIERhdGFCdWZmZXJbMV07CiAgICAgICB9IEdlbmVyaWNSZXBhcnNlQnVmZmVyOworICAgICAgc3RydWN0IHsKKyAgICAgICAgVUxPTkcgU3RyaW5nQ291bnQ7CisgICAgICAgIFdDSEFSIFN0cmluZ0xpc3RbMV07CisgICAgICB9IEFwcEV4ZWNMaW5rUmVwYXJzZUJ1ZmZlcjsKICAgICB9OwogICB9IFJFUEFSU0VfREFUQV9CVUZGRVIsICpQUkVQQVJTRV9EQVRBX0JVRkZFUjsKICNlbmRpZgpAQCAtNDQ0NCw2ICs0NDQ4LDEwIEBACiAjIGRlZmluZSBTeXN0ZW1Qcm9jZXNzb3JQZXJmb3JtYW5jZUluZm9ybWF0aW9uIDgKICNlbmRpZgogCisjaWZuZGVmIFByb2Nlc3NDb25zb2xlSG9zdFByb2Nlc3MKKyMgZGVmaW5lIFByb2Nlc3NDb25zb2xlSG9zdFByb2Nlc3MgNDkKKyNlbmRpZgorCiAjaWZuZGVmIEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNCiAjIGRlZmluZSBGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSAweDAwMDAwMDA5CiAjZW5kaWYKQEAgLTQ1MjEsNiArNDUyOSw5IEBACiAjaWZuZGVmIElPX1JFUEFSU0VfVEFHX1NZTUxJTksKICMgZGVmaW5lIElPX1JFUEFSU0VfVEFHX1NZTUxJTksgKDB4QTAwMDAwMENMKQogI2VuZGlmCisjaWZuZGVmIElPX1JFUEFSU0VfVEFHX0FQUEVYRUNMSU5LCisjIGRlZmluZSBJT19SRVBBUlNFX1RBR19BUFBFWEVDTElOSyAoMHg4MDAwMDAxQkwpCisjZW5kaWYKIAogdHlwZWRlZiBWT0lEIChOVEFQSSAqUElPX0FQQ19ST1VUSU5FKQogICAgICAgICAgICAgIChQVk9JRCBBcGNDb250ZXh0LApAQCAtNDU4Niw2ICs0NTk3LDEzIEBACiAgICAgICAgICAgICAgICAgICBCT09MRUFOIFJlc3RhcnRTY2FuCiAgICAgICAgICAgICAgICAgKTsKIAordHlwZWRlZiBOVFNUQVRVUyAoTlRBUEkgKnNOdFF1ZXJ5SW5mb3JtYXRpb25Qcm9jZXNzKQorICAgICAgICAgICAgICAgICAoSEFORExFIFByb2Nlc3NIYW5kbGUsCisgICAgICAgICAgICAgICAgICBVSU5UIFByb2Nlc3NJbmZvcm1hdGlvbkNsYXNzLAorICAgICAgICAgICAgICAgICAgUFZPSUQgUHJvY2Vzc0luZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgVUxPTkcgTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgUFVMT05HIFJldHVybkxlbmd0aCk7CisKIC8qCiAgKiBLZXJuZWwzMiBoZWFkZXJzCiAgKi8KQEAgLTQ3MjcsNiArNDc0NSw3IEBACiBleHRlcm4gc050UXVlcnlWb2x1bWVJbmZvcm1hdGlvbkZpbGUgcE50UXVlcnlWb2x1bWVJbmZvcm1hdGlvbkZpbGU7CiBleHRlcm4gc050UXVlcnlEaXJlY3RvcnlGaWxlIHBOdFF1ZXJ5RGlyZWN0b3J5RmlsZTsKIGV4dGVybiBzTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uIHBOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb247CitleHRlcm4gc050UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MgcE50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3M7CiAKIC8qIEtlcm5lbDMyIGZ1bmN0aW9uIHBvaW50ZXJzICovCiBleHRlcm4gc0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNFeCBwR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c0V4OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5zb2NrLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbnNvY2suYwppbmRleCA1ODIwYmE5Li40Y2Y2ZTZiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbnNvY2suYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbnNvY2suYwpAQCAtNzQsMTEgKzc0LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGVycm9yX21lYW5zX25vX3N1cHBvcnQoRFdPUkQgZXJyb3IpIHsKLSAgcmV0dXJuIGVycm9yID09IFdTQUVQUk9UT05PU1VQUE9SVCB8fCBlcnJvciA9PSBXU0FFU09DS1ROT1NVUFBPUlQgfHwKLSAgICAgICAgIGVycm9yID09IFdTQUVQRk5PU1VQUE9SVCB8fCBlcnJvciA9PSBXU0FFQUZOT1NVUFBPUlQ7Ci19Ci0KIAogdm9pZCB1dl93aW5zb2NrX2luaXQodm9pZCkgewogICBXU0FEQVRBIHdzYV9kYXRhOwpAQCAtMTA1LDUwICsxMDAsMzYgQEAKICAgICB1dl9mYXRhbF9lcnJvcihlcnJvcm5vLCAiV1NBU3RhcnR1cCIpOwogICB9CiAKLSAgLyogRGV0ZWN0IG5vbi1JRlMgTFNQcyAqLworICAvKiBUcnkgdG8gZGV0ZWN0IG5vbi1JRlMgTFNQcyAqLworICB1dl90Y3Bfbm9uX2lmc19sc3BfaXB2NCA9IDE7CiAgIGR1bW15ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQKTsKLQogICBpZiAoZHVtbXkgIT0gSU5WQUxJRF9TT0NLRVQpIHsKICAgICBvcHRfbGVuID0gKGludCkgc2l6ZW9mIHByb3RvY29sX2luZm87CiAgICAgaWYgKGdldHNvY2tvcHQoZHVtbXksCiAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKICAgICAgICAgICAgICAgICAgICBTT19QUk9UT0NPTF9JTkZPVywKICAgICAgICAgICAgICAgICAgICAoY2hhciopICZwcm90b2NvbF9pbmZvLAotICAgICAgICAgICAgICAgICAgICZvcHRfbGVuKSA9PSBTT0NLRVRfRVJST1IpCi0gICAgICB1dl9mYXRhbF9lcnJvcihXU0FHZXRMYXN0RXJyb3IoKSwgImdldHNvY2tvcHQiKTsKLQotICAgIGlmICghKHByb3RvY29sX2luZm8uZHdTZXJ2aWNlRmxhZ3MxICYgWFAxX0lGU19IQU5ETEVTKSkKLSAgICAgIHV2X3RjcF9ub25faWZzX2xzcF9pcHY0ID0gMTsKLQotICAgIGlmIChjbG9zZXNvY2tldChkdW1teSkgPT0gU09DS0VUX0VSUk9SKQotICAgICAgdXZfZmF0YWxfZXJyb3IoV1NBR2V0TGFzdEVycm9yKCksICJjbG9zZXNvY2tldCIpOwotCi0gIH0gZWxzZSBpZiAoIWVycm9yX21lYW5zX25vX3N1cHBvcnQoV1NBR2V0TGFzdEVycm9yKCkpKSB7Ci0gICAgLyogQW55IGVycm9yIG90aGVyIHRoYW4gInNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiIGlzIGZhdGFsLiAqLwotICAgIHV2X2ZhdGFsX2Vycm9yKFdTQUdldExhc3RFcnJvcigpLCAic29ja2V0Iik7CisgICAgICAgICAgICAgICAgICAgJm9wdF9sZW4pID09IDApIHsKKyAgICAgIGlmIChwcm90b2NvbF9pbmZvLmR3U2VydmljZUZsYWdzMSAmIFhQMV9JRlNfSEFORExFUykKKyAgICAgICAgdXZfdGNwX25vbl9pZnNfbHNwX2lwdjQgPSAwOworICAgIH0KKyAgICBjbG9zZXNvY2tldChkdW1teSk7CiAgIH0KIAotICAvKiBEZXRlY3QgSVBWNiBzdXBwb3J0IGFuZCBub24tSUZTIExTUHMgKi8KKyAgLyogVHJ5IHRvIGRldGVjdCBJUFY2IHN1cHBvcnQgYW5kIG5vbi1JRlMgTFNQcyAqLworICB1dl90Y3Bfbm9uX2lmc19sc3BfaXB2NiA9IDE7CiAgIGR1bW15ID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19JUCk7Ci0KICAgaWYgKGR1bW15ICE9IElOVkFMSURfU09DS0VUKSB7CiAgICAgb3B0X2xlbiA9IChpbnQpIHNpemVvZiBwcm90b2NvbF9pbmZvOwogICAgIGlmIChnZXRzb2Nrb3B0KGR1bW15LAogICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsCiAgICAgICAgICAgICAgICAgICAgU09fUFJPVE9DT0xfSU5GT1csCiAgICAgICAgICAgICAgICAgICAgKGNoYXIqKSAmcHJvdG9jb2xfaW5mbywKLSAgICAgICAgICAgICAgICAgICAmb3B0X2xlbikgPT0gU09DS0VUX0VSUk9SKQotICAgICAgdXZfZmF0YWxfZXJyb3IoV1NBR2V0TGFzdEVycm9yKCksICJnZXRzb2Nrb3B0Iik7Ci0KLSAgICBpZiAoIShwcm90b2NvbF9pbmZvLmR3U2VydmljZUZsYWdzMSAmIFhQMV9JRlNfSEFORExFUykpCi0gICAgICB1dl90Y3Bfbm9uX2lmc19sc3BfaXB2NiA9IDE7Ci0KLSAgICBpZiAoY2xvc2Vzb2NrZXQoZHVtbXkpID09IFNPQ0tFVF9FUlJPUikKLSAgICAgIHV2X2ZhdGFsX2Vycm9yKFdTQUdldExhc3RFcnJvcigpLCAiY2xvc2Vzb2NrZXQiKTsKLQotICB9IGVsc2UgaWYgKCFlcnJvcl9tZWFuc19ub19zdXBwb3J0KFdTQUdldExhc3RFcnJvcigpKSkgewotICAgIC8qIEFueSBlcnJvciBvdGhlciB0aGFuICJzb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIiBpcyBmYXRhbC4gKi8KLSAgICB1dl9mYXRhbF9lcnJvcihXU0FHZXRMYXN0RXJyb3IoKSwgInNvY2tldCIpOworICAgICAgICAgICAgICAgICAgICZvcHRfbGVuKSA9PSAwKSB7CisgICAgICBpZiAocHJvdG9jb2xfaW5mby5kd1NlcnZpY2VGbGFnczEgJiBYUDFfSUZTX0hBTkRMRVMpCisgICAgICAgIHV2X3RjcF9ub25faWZzX2xzcF9pcHY2ID0gMDsKKyAgICB9CisgICAgY2xvc2Vzb2NrZXQoZHVtbXkpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luc29jay5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5zb2NrLmgKaW5kZXggZThiMjc0ZS4uMTUzNjMyYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5zb2NrLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5zb2NrLmgKQEAgLTU0LDYgKzU0LDE0IEBACiAjIGRlZmluZSBTSU9fQkFTRV9IQU5ETEUgMHg0ODAwMDAyMgogI2VuZGlmCiAKKyNpZm5kZWYgTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAKKyMgZGVmaW5lIE1DQVNUX0pPSU5fU09VUkNFX0dST1VQIDQ1CisjZW5kaWYKKworI2lmbmRlZiBNQ0FTVF9MRUFWRV9TT1VSQ0VfR1JPVVAKKyMgZGVmaW5lIE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUCA0NgorI2VuZGlmCisKIC8qCiAgKiBUREkgZGVmaW5lcyB0aGF0IGFyZSBvbmx5IGluIHRoZSBEREsuCiAgKiBXZSBvbmx5IG5lZWQgcmVjZWl2ZSBmbGFncyBzbyBmYXIuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyLy5naXRhdHRyaWJ1dGVzIGIvVXRpbGl0aWVzL2NtbmdodHRwMi8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJiMTJlCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtbmdodHRwMi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTExYWNlCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDUyIEBACisjIERpc2FibGUgd2FybmluZ3MgdG8gYXZvaWQgY2hhbmdpbmcgM3JkIHBhcnR5IGNvZGUuCitpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMKKyAgICAiXihHTlV8Q2xhbmd8QXBwbGVDbGFuZ3xYTENsYW5nfFhMfFZpc3VhbEFnZXxTdW5Qcm98SFB8SW50ZWwpJCIpCisgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC13IikKK2Vsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJQYXRoU2NhbGUiKQorICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtd29mZmFsbCIpCitlbmRpZigpCisKKyMgUmUtdXNlIHNvbWUgY2hlY2sgcmVzdWx0IGNhY2hlIGVudHJpZXMgZnJvbSBjbWN1cmw6CisjICogSEFWRV9BUlBBX0lORVRfSAorIyAqIEhBVkVfTkVUSU5FVF9JTl9ICisjICogSEFWRV9TU0laRV9UCitpZihOT1QgSEFWRV9TU0laRV9UKQorICBzZXQoc3NpemVfdCBLV0lNTF9JTlRfaW50cHRyX3QpCitlbmRpZigpCitjb25maWd1cmVfZmlsZShjbWFrZWNvbmZpZy5oLmluIGNvbmZpZy5oKQorCithZGRfbGlicmFyeShjbW5naHR0cDIgU1RBVElDCisgIGxpYi9uZ2h0dHAyX2J1Zi5jCisgIGxpYi9uZ2h0dHAyX2NhbGxiYWNrcy5jCisgIGxpYi9uZ2h0dHAyX2RlYnVnLmMKKyAgbGliL25naHR0cDJfZnJhbWUuYworICBsaWIvbmdodHRwMl9oZC5jCisgIGxpYi9uZ2h0dHAyX2hkX2h1ZmZtYW4uYworICBsaWIvbmdodHRwMl9oZF9odWZmbWFuX2RhdGEuYworICBsaWIvbmdodHRwMl9oZWxwZXIuYworICBsaWIvbmdodHRwMl9odHRwLmMKKyAgbGliL25naHR0cDJfbWFwLmMKKyAgbGliL25naHR0cDJfbWVtLmMKKyAgbGliL25naHR0cDJfbnBuLmMKKyAgbGliL25naHR0cDJfb3B0aW9uLmMKKyAgbGliL25naHR0cDJfb3V0Ym91bmRfaXRlbS5jCisgIGxpYi9uZ2h0dHAyX3BxLmMKKyAgbGliL25naHR0cDJfcHJpb3JpdHlfc3BlYy5jCisgIGxpYi9uZ2h0dHAyX3F1ZXVlLmMKKyAgbGliL25naHR0cDJfcmNidWYuYworICBsaWIvbmdodHRwMl9zZXNzaW9uLmMKKyAgbGliL25naHR0cDJfc3RyZWFtLmMKKyAgbGliL25naHR0cDJfc3VibWl0LmMKKyAgbGliL25naHR0cDJfdmVyc2lvbi5jCisgICkKKwordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoY21uZ2h0dHAyCisgIFBVQkxJQyBOR0hUVFAyX1NUQVRJQ0xJQgorICBQUklWQVRFIEhBVkVfQ09ORklHX0gKKyAgKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoY21uZ2h0dHAyIFBSSVZBVEUKKyAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CisgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWIvaW5jbHVkZXMKKyAgKQorCitpbnN0YWxsKEZJTEVTIENPUFlJTkcgREVTVElOQVRJT04gJHtDTUFLRV9ET0NfRElSfS9jbW5naHR0cDIpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL0NPUFlJTkcgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMDE3OQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvQ09QWUlORwpAQCAtMCwwICsxLDIzIEBACitUaGUgTUlUIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDEyLCAyMDE0LCAyMDE1LCAyMDE2IFRhdHN1aGlybyBUc3VqaWthd2EKK0NvcHlyaWdodCAoYykgMjAxMiwgMjAxNCwgMjAxNSwgMjAxNiBuZ2h0dHAyIGNvbnRyaWJ1dG9ycworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2NtYWtlY29uZmlnLmguaW4gYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2NtYWtlY29uZmlnLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2OThmYgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvY21ha2Vjb25maWcuaC5pbgpAQCAtMCwwICsxLDE4IEBACisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgcHJhZ21hIHdhcm5pbmcocHVzaCwxKQorI2VuZGlmCisKKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2FiaS5oPgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyNjbWFrZWRlZmluZSBzc2l6ZV90IEBzc2l6ZV90QAorCisvKiBzaXplb2YoaW50ICopICovCisjZGVmaW5lIFNJWkVPRl9JTlRfUCBLV0lNTF9BQklfU0laRU9GX0RBVEFfUFRSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9pbmV0Lmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0ggMQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAyLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2FlYjlmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAyLmgKQEAgLTAsMCArMSw1NDg3IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIDIwMTQgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9ICisjZGVmaW5lIE5HSFRUUDJfSAorCisvKiBEZWZpbmUgV0lOMzIgd2hlbiBidWlsZCB0YXJnZXQgaXMgV2luMzIgQVBJIChib3Jyb3dlZCBmcm9tCisgICBsaWJjdXJsKSAqLworI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pKSAmJiAhZGVmaW5lZChXSU4zMikKKyMgIGRlZmluZSBXSU4zMgorI2VuZGlmCisKKy8qIENvbXBhdGliaWxpdHkgZm9yIG5vbi1DbGFuZyBjb21waWxlcnMgKi8KKyNpZm5kZWYgX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlCisjICBkZWZpbmUgX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlKHgpIDAKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPCAxODAwKQorLyogTVNWQyA8IDIwMTMgZG9lcyBub3QgaGF2ZSBpbnR0eXBlcy5oIGJlY2F1c2UgaXQgaXMgbm90IEM5OQorICAgY29tcGxpYW50LiAgU2VlIGNvbXBpbGVyIG1hY3JvcyBhbmQgdmVyc2lvbiBudW1iZXIgaW4KKyAgIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvcHJlZGVmL3dpa2kvQ29tcGlsZXJzLyAqLworIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxzZSAvKiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKF9NU0NfVkVSID49IDE4MDApICovCisjICBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmIC8qICFkZWZpbmVkKF9NU0NfVkVSKSB8fCAoX01TQ19WRVIgPj0gMTgwMCkgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMnZlci5oPgorCisjaWZkZWYgTkdIVFRQMl9TVEFUSUNMSUIKKyMgIGRlZmluZSBOR0hUVFAyX0VYVEVSTgorI2VsaWYgZGVmaW5lZChXSU4zMikgfHwgKF9faGFzX2RlY2xzcGVjX2F0dHJpYnV0ZShkbGxleHBvcnQpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX2hhc19kZWNsc3BlY19hdHRyaWJ1dGUoZGxsaW1wb3J0KSkKKyMgIGlmZGVmIEJVSUxESU5HX05HSFRUUDIKKyMgICAgZGVmaW5lIE5HSFRUUDJfRVhURVJOIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgZWxzZSAvKiAhQlVJTERJTkdfTkdIVFRQMiAqLworIyAgICBkZWZpbmUgTkdIVFRQMl9FWFRFUk4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICBlbmRpZiAvKiAhQlVJTERJTkdfTkdIVFRQMiAqLworI2Vsc2UgICAgLyogIWRlZmluZWQoV0lOMzIpICovCisjICBpZmRlZiBCVUlMRElOR19OR0hUVFAyCisjICAgIGRlZmluZSBOR0hUVFAyX0VYVEVSTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorIyAgZWxzZSAvKiAhQlVJTERJTkdfTkdIVFRQMiAqLworIyAgICBkZWZpbmUgTkdIVFRQMl9FWFRFUk4KKyMgIGVuZGlmIC8qICFCVUlMRElOR19OR0hUVFAyICovCisjZW5kaWYgICAvKiAhZGVmaW5lZChXSU4zMikgKi8KKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgcHJvdG9jb2wgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBzdHJpbmcgb2YgdGhpcyBsaWJyYXJ5CisgKiBzdXBwb3J0cy4gIFRoaXMgaWRlbnRpZmllciBpcyB1c2VkIGlmIEhUVFAvMiBpcyB1c2VkIG92ZXIgVExTLgorICovCisjZGVmaW5lIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCAiaDIiCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBsZW5ndGggb2YgOm1hY3JvOmBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSURgLgorICovCisjZGVmaW5lIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4gMgorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBzZXJpYWxpemVkIGZvcm0gb2YgQUxQTiBwcm90b2NvbCBpZGVudGlmaWVyIHRoaXMgbGlicmFyeQorICogc3VwcG9ydHMuICBOb3RpY2UgdGhhdCBmaXJzdCBieXRlIGlzIHRoZSBsZW5ndGggb2YgZm9sbG93aW5nCisgKiBwcm90b2NvbCBpZGVudGlmaWVyLiAgVGhpcyBpcyB0aGUgc2FtZSB3aXJlIGZvcm1hdCBvZiBgVExTIEFMUE4KKyAqIGV4dGVuc2lvbiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzczMDE+YF8uICBUaGlzIGlzIHVzZWZ1bAorICogdG8gcHJvY2VzcyBpbmNvbWluZyBBTFBOIHRva2VucyBpbiB3aXJlIGZvcm1hdC4KKyAqLworI2RlZmluZSBOR0hUVFAyX1BST1RPX0FMUE4gIlx4MmgyIgorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBsZW5ndGggb2YgOm1hY3JvOmBOR0hUVFAyX1BST1RPX0FMUE5gLgorICovCisjZGVmaW5lIE5HSFRUUDJfUFJPVE9fQUxQTl9MRU4gKHNpemVvZihOR0hUVFAyX1BST1RPX0FMUE4pIC0gMSkKKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgcHJvdG9jb2wgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBzdHJpbmcgb2YgdGhpcyBsaWJyYXJ5CisgKiBzdXBwb3J0cy4gIFRoaXMgaWRlbnRpZmllciBpcyB1c2VkIGlmIEhUVFAvMiBpcyB1c2VkIG92ZXIgY2xlYXJ0ZXh0CisgKiBUQ1AuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9DTEVBUlRFWFRfUFJPVE9fVkVSU0lPTl9JRCAiaDJjIgorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBsZW5ndGggb2YgOm1hY3JvOmBOR0hUVFAyX0NMRUFSVEVYVF9QUk9UT19WRVJTSU9OX0lEYC4KKyAqLworI2RlZmluZSBOR0hUVFAyX0NMRUFSVEVYVF9QUk9UT19WRVJTSU9OX0lEX0xFTiAzCisKK3N0cnVjdCBuZ2h0dHAyX3Nlc3Npb247CisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgcHJpbWFyeSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcmVzb3VyY2VzIG5lZWRlZCBmb3IgYSBIVFRQLzIKKyAqIHNlc3Npb24uICBUaGUgZGV0YWlscyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgaW50ZW50aW9uYWxseSBoaWRkZW4KKyAqIGZyb20gdGhlIHB1YmxpYyBBUEkuCisgKi8KK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfc2Vzc2lvbiBuZ2h0dHAyX3Nlc3Npb247CisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGFnZSBvZiA6dHlwZTpgbmdodHRwMl9pbmZvYAorICovCisjZGVmaW5lIE5HSFRUUDJfVkVSU0lPTl9BR0UgMQorCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGlzIHN0cnVjdCBpcyB3aGF0IGBuZ2h0dHAyX3ZlcnNpb24oKWAgcmV0dXJucy4gIEl0IGhvbGRzCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFydGljdWxhciBuZ2h0dHAyIHZlcnNpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIEFnZSBvZiB0aGlzIHN0cnVjdC4gIFRoaXMgaW5zdGFuY2Ugb2YgbmdodHRwMiBzZXRzIGl0IHRvCisgICAqIDptYWNybzpgTkdIVFRQMl9WRVJTSU9OX0FHRWAgYnV0IGEgZnV0dXJlIHZlcnNpb24gbWF5IGJ1bXAgaXQgYW5kCisgICAqIGFkZCBtb3JlIHN0cnVjdCBmaWVsZHMgYXQgdGhlIGJvdHRvbQorICAgKi8KKyAgaW50IGFnZTsKKyAgLyoqCisgICAqIHRoZSA6bWFjcm86YE5HSFRUUDJfVkVSU0lPTl9OVU1gIG51bWJlciAoc2luY2UgYWdlID09MSkKKyAgICovCisgIGludCB2ZXJzaW9uX251bTsKKyAgLyoqCisgICAqIHBvaW50cyB0byB0aGUgOm1hY3JvOmBOR0hUVFAyX1ZFUlNJT05gIHN0cmluZyAoc2luY2UgYWdlID09MSkKKyAgICovCisgIGNvbnN0IGNoYXIgKnZlcnNpb25fc3RyOworICAvKioKKyAgICogcG9pbnRzIHRvIHRoZSA6bWFjcm86YE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRGAgc3RyaW5nIHRoaXMKKyAgICogaW5zdGFuY2UgaW1wbGVtZW50cyAoc2luY2UgYWdlID09MSkKKyAgICovCisgIGNvbnN0IGNoYXIgKnByb3RvX3N0cjsKKyAgLyogLS0tLS0tLS0gdGhlIGFib3ZlIGZpZWxkcyBhbGwgZXhpc3Qgd2hlbiBhZ2UgPT0gMSAqLworfSBuZ2h0dHAyX2luZm87CisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGRlZmF1bHQgd2VpZ2h0IG9mIHN0cmVhbSBkZXBlbmRlbmN5LgorICovCisjZGVmaW5lIE5HSFRUUDJfREVGQVVMVF9XRUlHSFQgMTYKKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgbWF4aW11bSB3ZWlnaHQgb2Ygc3RyZWFtIGRlcGVuZGVuY3kuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9NQVhfV0VJR0hUIDI1NgorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBtaW5pbXVtIHdlaWdodCBvZiBzdHJlYW0gZGVwZW5kZW5jeS4KKyAqLworI2RlZmluZSBOR0hUVFAyX01JTl9XRUlHSFQgMQorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBtYXhpbXVtIHdpbmRvdyBzaXplCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUgKChpbnQzMl90KSgoMVUgPDwgMzEpIC0gMSkpCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGluaXRpYWwgd2luZG93IHNpemUgZm9yIHN0cmVhbSBsZXZlbCBmbG93IGNvbnRyb2wuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9JTklUSUFMX1dJTkRPV19TSVpFICgoMSA8PCAxNikgLSAxKQorLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgaW5pdGlhbCB3aW5kb3cgc2l6ZSBmb3IgY29ubmVjdGlvbiBsZXZlbCBmbG93IGNvbnRyb2wuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9JTklUSUFMX0NPTk5FQ1RJT05fV0lORE9XX1NJWkUgKCgxIDw8IDE2KSAtIDEpCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGRlZmF1bHQgaGVhZGVyIHRhYmxlIHNpemUuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9ERUZBVUxUX0hFQURFUl9UQUJMRV9TSVpFICgxIDw8IDEyKQorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBjbGllbnQgbWFnaWMgc3RyaW5nLCB3aGljaCBpcyB0aGUgZmlyc3QgMjQgYnl0ZXMgYnl0ZSBzdHJpbmcgb2YKKyAqIGNsaWVudCBjb25uZWN0aW9uIHByZWZhY2UuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9DTElFTlRfTUFHSUMgIlBSSSAqIEhUVFAvMi4wXHJcblxyXG5TTVxyXG5cclxuIgorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBsZW5ndGggb2YgOm1hY3JvOmBOR0hUVFAyX0NMSUVOVF9NQUdJQ2AuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9DTElFTlRfTUFHSUNfTEVOIDI0CisKKy8qKgorICogQGVudW0KKyAqCisgKiBFcnJvciBjb2RlcyB1c2VkIGluIHRoaXMgbGlicmFyeS4gIFRoZSBjb2RlIHJhbmdlIGlzIFstOTk5LCAtNTAwXSwKKyAqIGluY2x1c2l2ZS4gVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIGRlZmluZWQ6CisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKgorICAgKiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQgPSAtNTAxLAorICAvKioKKyAgICogT3V0IG9mIGJ1ZmZlciBzcGFjZS4KKyAgICovCisgIE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUiA9IC01MDIsCisgIC8qKgorICAgKiBUaGUgc3BlY2lmaWVkIHByb3RvY29sIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX1VOU1VQUE9SVEVEX1ZFUlNJT04gPSAtNTAzLAorICAvKioKKyAgICogVXNlZCBhcyBhIHJldHVybiB2YWx1ZSBmcm9tIDp0eXBlOmBuZ2h0dHAyX3NlbmRfY2FsbGJhY2tgLAorICAgKiA6dHlwZTpgbmdodHRwMl9yZWN2X2NhbGxiYWNrYCBhbmQKKyAgICogOnR5cGU6YG5naHR0cDJfc2VuZF9kYXRhX2NhbGxiYWNrYCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBvcGVyYXRpb24KKyAgICogd291bGQgYmxvY2suCisgICAqLworICBOR0hUVFAyX0VSUl9XT1VMREJMT0NLID0gLTUwNCwKKyAgLyoqCisgICAqIEdlbmVyYWwgcHJvdG9jb2wgZXJyb3IKKyAgICovCisgIE5HSFRUUDJfRVJSX1BST1RPID0gLTUwNSwKKyAgLyoqCisgICAqIFRoZSBmcmFtZSBpcyBpbnZhbGlkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSU5WQUxJRF9GUkFNRSA9IC01MDYsCisgIC8qKgorICAgKiBUaGUgcGVlciBwZXJmb3JtZWQgYSBzaHV0ZG93biBvbiB0aGUgY29ubmVjdGlvbi4KKyAgICovCisgIE5HSFRUUDJfRVJSX0VPRiA9IC01MDcsCisgIC8qKgorICAgKiBVc2VkIGFzIGEgcmV0dXJuIHZhbHVlIGZyb20KKyAgICogOmZ1bmM6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AgdG8gaW5kaWNhdGUgdGhhdCBkYXRhCisgICAqIHRyYW5zZmVyIGlzIHBvc3Rwb25lZC4gIFNlZQorICAgKiA6ZnVuYzpgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrYCBmb3IgZGV0YWlscy4KKyAgICovCisgIE5HSFRUUDJfRVJSX0RFRkVSUkVEID0gLTUwOCwKKyAgLyoqCisgICAqIFN0cmVhbSBJRCBoYXMgcmVhY2hlZCB0aGUgbWF4aW11bSB2YWx1ZS4gIFRoZXJlZm9yZSBubyBzdHJlYW0gSUQKKyAgICogaXMgYXZhaWxhYmxlLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfU1RSRUFNX0lEX05PVF9BVkFJTEFCTEUgPSAtNTA5LAorICAvKioKKyAgICogVGhlIHN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZDsgb3IgdGhlIHN0cmVhbSBJRCBpcyBpbnZhbGlkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRCA9IC01MTAsCisgIC8qKgorICAgKiBSU1RfU1RSRUFNIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBvdXRib3VuZCBxdWV1ZS4gIFRoZSBzdHJlYW0gaXMKKyAgICogaW4gY2xvc2luZyBzdGF0ZS4KKyAgICovCisgIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HID0gLTUxMSwKKyAgLyoqCisgICAqIFRoZSB0cmFuc21pc3Npb24gaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgc3RyZWFtIChlLmcuLCBhIGZyYW1lCisgICAqIHdpdGggRU5EX1NUUkVBTSBmbGFnIHNldCBoYXMgYWxyZWFkeSBzZW50KS4KKyAgICovCisgIE5HSFRUUDJfRVJSX1NUUkVBTV9TSFVUX1dSID0gLTUxMiwKKyAgLyoqCisgICAqIFRoZSBzdHJlYW0gSUQgaXMgaW52YWxpZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX0lEID0gLTUxMywKKyAgLyoqCisgICAqIFRoZSBzdGF0ZSBvZiB0aGUgc3RyZWFtIGlzIG5vdCB2YWxpZCAoZS5nLiwgREFUQSBjYW5ub3QgYmUgc2VudAorICAgKiB0byB0aGUgc3RyZWFtIGlmIHJlc3BvbnNlIEhFQURFUlMgaGFzIG5vdCBiZWVuIHNlbnQpLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEUgPSAtNTE0LAorICAvKioKKyAgICogQW5vdGhlciBEQVRBIGZyYW1lIGhhcyBhbHJlYWR5IGJlZW4gZGVmZXJyZWQuCisgICAqLworICBOR0hUVFAyX0VSUl9ERUZFUlJFRF9EQVRBX0VYSVNUID0gLTUxNSwKKyAgLyoqCisgICAqIFN0YXJ0aW5nIG5ldyBzdHJlYW0gaXMgbm90IGFsbG93ZWQgKGUuZy4sIEdPQVdBWSBoYXMgYmVlbiBzZW50CisgICAqIGFuZC9vciByZWNlaXZlZCkuCisgICAqLworICBOR0hUVFAyX0VSUl9TVEFSVF9TVFJFQU1fTk9UX0FMTE9XRUQgPSAtNTE2LAorICAvKioKKyAgICogR09BV0FZIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4KKyAgICovCisgIE5HSFRUUDJfRVJSX0dPQVdBWV9BTFJFQURZX1NFTlQgPSAtNTE3LAorICAvKioKKyAgICogVGhlIHJlY2VpdmVkIGZyYW1lIGNvbnRhaW5zIHRoZSBpbnZhbGlkIGhlYWRlciBibG9jayAoZS5nLiwgVGhlcmUKKyAgICogYXJlIGR1cGxpY2F0ZSBoZWFkZXIgbmFtZXM7IG9yIHRoZSBoZWFkZXIgbmFtZXMgYXJlIG5vdCBlbmNvZGVkCisgICAqIGluIFVTLUFTQ0lJIGNoYXJhY3RlciBzZXQgYW5kIG5vdCBsb3dlciBjYXNlZDsgb3IgdGhlIGhlYWRlciBuYW1lCisgICAqIGlzIHplcm8tbGVuZ3RoIHN0cmluZzsgb3IgdGhlIGhlYWRlciB2YWx1ZSBjb250YWlucyBtdWx0aXBsZQorICAgKiBpbi1zZXF1ZW5jZSBOVUwgYnl0ZXMpLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSU5WQUxJRF9IRUFERVJfQkxPQ0sgPSAtNTE4LAorICAvKioKKyAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRleHQgaXMgbm90IHN1aXRhYmxlIHRvIHBlcmZvcm0gdGhlCisgICAqIHJlcXVlc3RlZCBvcGVyYXRpb24uCisgICAqLworICBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFID0gLTUxOSwKKyAgLyoqCisgICAqIFRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZCBkdWUgdG8gdGhlIHRlbXBvcmFsIGVycm9yLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRSA9IC01MjEsCisgIC8qKgorICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBmcmFtZSBpcyBpbnZhbGlkLCBlaXRoZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbC4KKyAgICovCisgIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1IgPSAtNTIyLAorICAvKioKKyAgICogSGVhZGVyIGJsb2NrIGluZmxhdGUvZGVmbGF0ZSBlcnJvci4KKyAgICovCisgIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QID0gLTUyMywKKyAgLyoqCisgICAqIEZsb3cgY29udHJvbCBlcnJvcgorICAgKi8KKyAgTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MID0gLTUyNCwKKyAgLyoqCisgICAqIEluc3VmZmljaWVudCBidWZmZXIgc2l6ZSBnaXZlbiB0byBmdW5jdGlvbi4KKyAgICovCisgIE5HSFRUUDJfRVJSX0lOU1VGRl9CVUZTSVpFID0gLTUyNSwKKyAgLyoqCisgICAqIENhbGxiYWNrIHdhcyBwYXVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisgICAqLworICBOR0hUVFAyX0VSUl9QQVVTRSA9IC01MjYsCisgIC8qKgorICAgKiBUaGVyZSBhcmUgdG9vIG1hbnkgaW4tZmxpZ2h0IFNFVFRJTkcgZnJhbWUgYW5kIG5vIG1vcmUKKyAgICogdHJhbnNtaXNzaW9uIG9mIFNFVFRJTkdTIGlzIGFsbG93ZWQuCisgICAqLworICBOR0hUVFAyX0VSUl9UT09fTUFOWV9JTkZMSUdIVF9TRVRUSU5HUyA9IC01MjcsCisgIC8qKgorICAgKiBUaGUgc2VydmVyIHB1c2ggaXMgZGlzYWJsZWQuCisgICAqLworICBOR0hUVFAyX0VSUl9QVVNIX0RJU0FCTEVEID0gLTUyOCwKKyAgLyoqCisgICAqIERBVEEgb3IgSEVBREVSUyBmcmFtZSBmb3IgYSBnaXZlbiBzdHJlYW0gaGFzIGJlZW4gYWxyZWFkeQorICAgKiBzdWJtaXR0ZWQgYW5kIGhhcyBub3QgYmVlbiBmdWxseSBwcm9jZXNzZWQgeWV0LiAgQXBwbGljYXRpb24KKyAgICogc2hvdWxkIHdhaXQgZm9yIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIHByZXZpb3VzbHkgc3VibWl0dGVkCisgICAqIGZyYW1lIGJlZm9yZSBzdWJtaXR0aW5nIGFub3RoZXIuCisgICAqLworICBOR0hUVFAyX0VSUl9EQVRBX0VYSVNUID0gLTUyOSwKKyAgLyoqCisgICAqIFRoZSBjdXJyZW50IHNlc3Npb24gaXMgY2xvc2luZyBkdWUgdG8gYSBjb25uZWN0aW9uIGVycm9yIG9yCisgICAqIGBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oKWAgaXMgY2FsbGVkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HID0gLTUzMCwKKyAgLyoqCisgICAqIEludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgd2FzIHJlY2VpdmVkIGFuZCBzdHJlYW0gaXMgZ29pbmcgdG8gYmUKKyAgICogY2xvc2VkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSFRUUF9IRUFERVIgPSAtNTMxLAorICAvKioKKyAgICogVmlvbGF0aW9uIGluIEhUVFAgbWVzc2FnaW5nIHJ1bGUuCisgICAqLworICBOR0hUVFAyX0VSUl9IVFRQX01FU1NBR0lORyA9IC01MzIsCisgIC8qKgorICAgKiBTdHJlYW0gd2FzIHJlZnVzZWQuCisgICAqLworICBOR0hUVFAyX0VSUl9SRUZVU0VEX1NUUkVBTSA9IC01MzMsCisgIC8qKgorICAgKiBVbmV4cGVjdGVkIGludGVybmFsIGVycm9yLCBidXQgcmVjb3ZlcmVkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSU5URVJOQUwgPSAtNTM0LAorICAvKioKKyAgICogSW5kaWNhdGVzIHRoYXQgYSBwcm9jZXNzaW5nIHdhcyBjYW5jZWxlZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX0NBTkNFTCA9IC01MzUsCisgIC8qKgorICAgKiBXaGVuIGEgbG9jYWwgZW5kcG9pbnQgZXhwZWN0cyB0byByZWNlaXZlIFNFVFRJTkdTIGZyYW1lLCBpdAorICAgKiByZWNlaXZlcyBhbiBvdGhlciB0eXBlIG9mIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfU0VUVElOR1NfRVhQRUNURUQgPSAtNTM2LAorICAvKioKKyAgICogVGhlIGVycm9ycyA8IDplbnVtOmBOR0hUVFAyX0VSUl9GQVRBTGAgbWVhbiB0aGF0IHRoZSBsaWJyYXJ5IGlzCisgICAqIHVuZGVyIHVuZXhwZWN0ZWQgY29uZGl0aW9uIGFuZCBwcm9jZXNzaW5nIHdhcyB0ZXJtaW5hdGVkIChlLmcuLAorICAgKiBvdXQgb2YgbWVtb3J5KS4gIElmIGFwcGxpY2F0aW9uIHJlY2VpdmVzIHRoaXMgZXJyb3IgY29kZSwgaXQgbXVzdAorICAgKiBzdG9wIHVzaW5nIHRoYXQgOnR5cGU6YG5naHR0cDJfc2Vzc2lvbmAgb2JqZWN0IGFuZCBvbmx5IGFsbG93ZWQKKyAgICogb3BlcmF0aW9uIGZvciB0aGF0IG9iamVjdCBpcyBkZWFsbG9jYXRlIGl0IHVzaW5nCisgICAqIGBuZ2h0dHAyX3Nlc3Npb25fZGVsKClgLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfRkFUQUwgPSAtOTAwLAorICAvKioKKyAgICogT3V0IG9mIG1lbW9yeS4gIFRoaXMgaXMgYSBmYXRhbCBlcnJvci4KKyAgICovCisgIE5HSFRUUDJfRVJSX05PTUVNID0gLTkwMSwKKyAgLyoqCisgICAqIFRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4gIFRoaXMgaXMgYSBmYXRhbCBlcnJvci4KKyAgICovCisgIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUgPSAtOTAyLAorICAvKioKKyAgICogSW52YWxpZCBjbGllbnQgbWFnaWMgKHNlZSA6bWFjcm86YE5HSFRUUDJfQ0xJRU5UX01BR0lDYCkgd2FzCisgICAqIHJlY2VpdmVkIGFuZCBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMgbm90IHBvc3NpYmxlLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfQkFEX0NMSUVOVF9NQUdJQyA9IC05MDMsCisgIC8qKgorICAgKiBQb3NzaWJsZSBmbG9vZGluZyBieSBwZWVyIHdhcyBkZXRlY3RlZCBpbiB0aGlzIEhUVFAvMiBzZXNzaW9uLgorICAgKiBGbG9vZGluZyBpcyBtZWFzdXJlZCBieSBob3cgbWFueSBQSU5HIGFuZCBTRVRUSU5HUyBmcmFtZXMgd2l0aAorICAgKiBBQ0sgZmxhZyBzZXQgYXJlIHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLiAgVGhlc2UgZnJhbWVzIGFyZQorICAgKiByZXNwb25zZSBmb3IgdGhlIHBlZXIgaW5pdGlhdGVkIGZyYW1lcywgYW5kIHBlZXIgY2FuIGNhdXNlIG1lbW9yeQorICAgKiBleGhhdXN0aW9uIG9uIHNlcnZlciBzaWRlIHRvIHNlbmQgdGhlc2UgZnJhbWVzIGZvcmV2ZXIgYW5kIGRvZXMKKyAgICogbm90IHJlYWQgbmV0d29yay4KKyAgICovCisgIE5HSFRUUDJfRVJSX0ZMT09ERUQgPSAtOTA0Cit9IG5naHR0cDJfZXJyb3I7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBvYmplY3QgcmVwcmVzZW50aW5nIHNpbmdsZSBjb250aWd1b3VzIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAgICovCisgIHVpbnQ4X3QgKmJhc2U7CisgIC8qKgorICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuCisgICAqLworICBzaXplX3QgbGVuOworfSBuZ2h0dHAyX3ZlYzsKKworc3RydWN0IG5naHR0cDJfcmNidWY7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBvYmplY3QgcmVwcmVzZW50aW5nIHJlZmVyZW5jZSBjb3VudGVkIGJ1ZmZlci4gIFRoZSBkZXRhaWxzIG9mCisgKiB0aGlzIHN0cnVjdHVyZSBhcmUgaW50ZW50aW9uYWxseSBoaWRkZW4gZnJvbSB0aGUgcHVibGljIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9yY2J1ZiBuZ2h0dHAyX3JjYnVmOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB8cmNidWZ8IGJ5IDEuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9yY2J1Zl9pbmNyZWYobmdodHRwMl9yY2J1ZiAqcmNidWYpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIERlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB8cmNidWZ8IGJ5IDEuICBJZiB0aGUgcmVmZXJlbmNlCisgKiBjb3VudCBiZWNvbWVzIHplcm8sIHRoZSBvYmplY3QgcG9pbnRlZCBieSB8cmNidWZ8IHdpbGwgYmUgZnJlZWQuCisgKiBJbiB0aGlzIGNhc2UsIGFwcGxpY2F0aW9uIG11c3Qgbm90IHVzZSB8cmNidWZ8IGFnYWluLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfcmNidWZfZGVjcmVmKG5naHR0cDJfcmNidWYgKnJjYnVmKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBtYW5hZ2VkIGJ5IHxyY2J1ZnwuCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfdmVjIG5naHR0cDJfcmNidWZfZ2V0X2J1ZihuZ2h0dHAyX3JjYnVmICpyY2J1Zik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIGlmIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCwKKyAqIGFuZCAwIG90aGVyd2lzZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBsYW5ndWFnZSBiaW5kaW5ncyB0aGF0IHdpc2gKKyAqIHRvIGF2b2lkIGNyZWF0aW5nIGR1cGxpY2F0ZSBzdHJpbmdzIGZvciB0aGVzZSBidWZmZXJzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9yY2J1Zl9pc19zdGF0aWMoY29uc3QgbmdodHRwMl9yY2J1ZiAqcmNidWYpOworCisvKioKKyAqIEBlbnVtCisgKgorICogVGhlIGZsYWdzIGZvciBoZWFkZXIgZmllbGQgbmFtZS92YWx1ZSBwYWlyLgorICovCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogTm8gZmxhZyBzZXQuCisgICAqLworICBOR0hUVFAyX05WX0ZMQUdfTk9ORSA9IDAsCisgIC8qKgorICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIG5hbWUvdmFsdWUgcGFpciBtdXN0IG5vdCBiZSBpbmRleGVkICgiTGl0ZXJhbAorICAgKiBIZWFkZXIgRmllbGQgbmV2ZXIgSW5kZXhlZCIgcmVwcmVzZW50YXRpb24gbXVzdCBiZSB1c2VkIGluIEhQQUNLCisgICAqIGVuY29kaW5nKS4gIE90aGVyIGltcGxlbWVudGF0aW9uIGNhbGxzIHRoaXMgYml0IGFzICJzZW5zaXRpdmUiLgorICAgKi8KKyAgTkdIVFRQMl9OVl9GTEFHX05PX0lOREVYID0gMHgwMSwKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBpcyBzZXQgc29sZWx5IGJ5IGFwcGxpY2F0aW9uLiAgSWYgdGhpcyBmbGFnIGlzIHNldCwgdGhlCisgICAqIGxpYnJhcnkgZG9lcyBub3QgbWFrZSBhIGNvcHkgb2YgaGVhZGVyIGZpZWxkIG5hbWUuICBUaGlzIGNvdWxkCisgICAqIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAqLworICBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FID0gMHgwMiwKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBpcyBzZXQgc29sZWx5IGJ5IGFwcGxpY2F0aW9uLiAgSWYgdGhpcyBmbGFnIGlzIHNldCwgdGhlCisgICAqIGxpYnJhcnkgZG9lcyBub3QgbWFrZSBhIGNvcHkgb2YgaGVhZGVyIGZpZWxkIHZhbHVlLiAgVGhpcyBjb3VsZAorICAgKiBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgKi8KKyAgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfVkFMVUUgPSAweDA0Cit9IG5naHR0cDJfbnZfZmxhZzsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIG5hbWUvdmFsdWUgcGFpciwgd2hpY2ggbWFpbmx5IHVzZWQgdG8gcmVwcmVzZW50IGhlYWRlciBmaWVsZHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSB8bmFtZXwgYnl0ZSBzdHJpbmcuICBJZiB0aGlzIHN0cnVjdCBpcyBwcmVzZW50ZWQgZnJvbSBsaWJyYXJ5CisgICAqIChlLmcuLCA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCksIHxuYW1lfCBpcworICAgKiBndWFyYW50ZWVkIHRvIGJlIE5VTEwtdGVybWluYXRlZC4gIEZvciBzb21lIGNhbGxiYWNrcworICAgKiAoOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgLAorICAgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCwgYW5kCisgICAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrYCksIGl0IG1heSBub3QgYmUKKyAgICogTlVMTC10ZXJtaW5hdGVkIGlmIGhlYWRlciBmaWVsZCBpcyBwYXNzZWQgZnJvbSBhcHBsaWNhdGlvbiB3aXRoCisgICAqIHRoZSBmbGFnIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FYCkuICBXaGVuIGFwcGxpY2F0aW9uCisgICAqIGlzIGNvbnN0cnVjdGluZyB0aGlzIHN0cnVjdCwgfG5hbWV8IGlzIG5vdCByZXF1aXJlZCB0byBiZQorICAgKiBOVUxMLXRlcm1pbmF0ZWQuCisgICAqLworICB1aW50OF90ICpuYW1lOworICAvKioKKyAgICogVGhlIHx2YWx1ZXwgYnl0ZSBzdHJpbmcuICBJZiB0aGlzIHN0cnVjdCBpcyBwcmVzZW50ZWQgZnJvbQorICAgKiBsaWJyYXJ5IChlLmcuLCA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCksIHx2YWx1ZXwKKyAgICogaXMgZ3VhcmFudGVlZCB0byBiZSBOVUxMLXRlcm1pbmF0ZWQuICBGb3Igc29tZSBjYWxsYmFja3MKKyAgICogKDp0eXBlOmBuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrYCwKKyAgICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFja2AsIGFuZAorICAgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2ApLCBpdCBtYXkgbm90IGJlCisgICAqIE5VTEwtdGVybWluYXRlZCBpZiBoZWFkZXIgZmllbGQgaXMgcGFzc2VkIGZyb20gYXBwbGljYXRpb24gd2l0aAorICAgKiB0aGUgZmxhZyA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfVkFMVUVgKS4gIFdoZW4KKyAgICogYXBwbGljYXRpb24gaXMgY29uc3RydWN0aW5nIHRoaXMgc3RydWN0LCB8dmFsdWV8IGlzIG5vdCByZXF1aXJlZAorICAgKiB0byBiZSBOVUxMLXRlcm1pbmF0ZWQuCisgICAqLworICB1aW50OF90ICp2YWx1ZTsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIHxuYW1lfCwgZXhjbHVkaW5nIHRlcm1pbmF0aW5nIE5VTEwuCisgICAqLworICBzaXplX3QgbmFtZWxlbjsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIHx2YWx1ZXwsIGV4Y2x1ZGluZyB0ZXJtaW5hdGluZyBOVUxMLgorICAgKi8KKyAgc2l6ZV90IHZhbHVlbGVuOworICAvKioKKyAgICogQml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA6dHlwZTpgbmdodHRwMl9udl9mbGFnYC4KKyAgICovCisgIHVpbnQ4X3QgZmxhZ3M7Cit9IG5naHR0cDJfbnY7CisKKy8qKgorICogQGVudW0KKyAqCisgKiBUaGUgZnJhbWUgdHlwZXMgaW4gSFRUUC8yIHNwZWNpZmljYXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKgorICAgKiBUaGUgREFUQSBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfREFUQSA9IDAsCisgIC8qKgorICAgKiBUaGUgSEVBREVSUyBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfSEVBREVSUyA9IDB4MDEsCisgIC8qKgorICAgKiBUaGUgUFJJT1JJVFkgZnJhbWUuCisgICAqLworICBOR0hUVFAyX1BSSU9SSVRZID0gMHgwMiwKKyAgLyoqCisgICAqIFRoZSBSU1RfU1RSRUFNIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9SU1RfU1RSRUFNID0gMHgwMywKKyAgLyoqCisgICAqIFRoZSBTRVRUSU5HUyBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfU0VUVElOR1MgPSAweDA0LAorICAvKioKKyAgICogVGhlIFBVU0hfUFJPTUlTRSBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfUFVTSF9QUk9NSVNFID0gMHgwNSwKKyAgLyoqCisgICAqIFRoZSBQSU5HIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9QSU5HID0gMHgwNiwKKyAgLyoqCisgICAqIFRoZSBHT0FXQVkgZnJhbWUuCisgICAqLworICBOR0hUVFAyX0dPQVdBWSA9IDB4MDcsCisgIC8qKgorICAgKiBUaGUgV0lORE9XX1VQREFURSBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfV0lORE9XX1VQREFURSA9IDB4MDgsCisgIC8qKgorICAgKiBUaGUgQ09OVElOVUFUSU9OIGZyYW1lLiAgVGhpcyBmcmFtZSB0eXBlIHdvbid0IGJlIHBhc3NlZCB0byBhbnkKKyAgICogY2FsbGJhY2tzIGJlY2F1c2UgdGhlIGxpYnJhcnkgcHJvY2Vzc2VzIHRoaXMgZnJhbWUgdHlwZSBhbmQgaXRzCisgICAqIHByZWNlZGluZyBIRUFERVJTL1BVU0hfUFJPTUlTRSBhcyBhIHNpbmdsZSBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfQ09OVElOVUFUSU9OID0gMHgwOSwKKyAgLyoqCisgICAqIFRoZSBBTFRTVkMgZnJhbWUsIHdoaWNoIGlzIGRlZmluZWQgaW4gYFJGQyA3MzgzCisgICAqIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzgzOCNzZWN0aW9uLTQ+YF8uCisgICAqLworICBOR0hUVFAyX0FMVFNWQyA9IDB4MGEsCisgIC8qKgorICAgKiBUaGUgT1JJR0lOIGZyYW1lLCB3aGljaCBpcyBkZWZpbmVkIGJ5IGBSRkMgODMzNgorICAgKiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgzMzY+YF8uCisgICAqLworICBOR0hUVFAyX09SSUdJTiA9IDB4MGMKK30gbmdodHRwMl9mcmFtZV90eXBlOworCisvKioKKyAqIEBlbnVtCisgKgorICogVGhlIGZsYWdzIGZvciBIVFRQLzIgZnJhbWVzLiAgVGhpcyBlbnVtIGRlZmluZXMgYWxsIGZsYWdzIGZvciBhbGwKKyAqIGZyYW1lcy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIE5vIGZsYWcgc2V0LgorICAgKi8KKyAgTkdIVFRQMl9GTEFHX05PTkUgPSAwLAorICAvKioKKyAgICogVGhlIEVORF9TVFJFQU0gZmxhZy4KKyAgICovCisgIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNID0gMHgwMSwKKyAgLyoqCisgICAqIFRoZSBFTkRfSEVBREVSUyBmbGFnLgorICAgKi8KKyAgTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTID0gMHgwNCwKKyAgLyoqCisgICAqIFRoZSBBQ0sgZmxhZy4KKyAgICovCisgIE5HSFRUUDJfRkxBR19BQ0sgPSAweDAxLAorICAvKioKKyAgICogVGhlIFBBRERFRCBmbGFnLgorICAgKi8KKyAgTkdIVFRQMl9GTEFHX1BBRERFRCA9IDB4MDgsCisgIC8qKgorICAgKiBUaGUgUFJJT1JJVFkgZmxhZy4KKyAgICovCisgIE5HSFRUUDJfRkxBR19QUklPUklUWSA9IDB4MjAKK30gbmdodHRwMl9mbGFnOworCisvKioKKyAqIEBlbnVtCisgKiBUaGUgU0VUVElOR1MgSUQuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKgorICAgKiBTRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRQorICAgKi8KKyAgTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRSA9IDB4MDEsCisgIC8qKgorICAgKiBTRVRUSU5HU19FTkFCTEVfUFVTSAorICAgKi8KKyAgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfUFVTSCA9IDB4MDIsCisgIC8qKgorICAgKiBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TCisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgPSAweDAzLAorICAvKioKKyAgICogU0VUVElOR1NfSU5JVElBTF9XSU5ET1dfU0laRQorICAgKi8KKyAgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFID0gMHgwNCwKKyAgLyoqCisgICAqIFNFVFRJTkdTX01BWF9GUkFNRV9TSVpFCisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX01BWF9GUkFNRV9TSVpFID0gMHgwNSwKKyAgLyoqCisgICAqIFNFVFRJTkdTX01BWF9IRUFERVJfTElTVF9TSVpFCisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX01BWF9IRUFERVJfTElTVF9TSVpFID0gMHgwNiwKKyAgLyoqCisgICAqIFNFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MCisgICAqIChgUkZDIDg0NDEgPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4NDQxPmBfKQorICAgKi8KKyAgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfQ09OTkVDVF9QUk9UT0NPTCA9IDB4MDgKK30gbmdodHRwMl9zZXR0aW5nc19pZDsKKy8qIE5vdGU6IElmIHdlIGFkZCBTRVRUSU5HUywgdXBkYXRlIHRoZSBjYXBhY2l0eSBvZgorICAgTkdIVFRQMl9JTkJPVU5EX05VTV9JViBhcyB3ZWxsICovCisKKy8qKgorICogQG1hY3JvCisgKgorICogLi4gd2FybmluZzo6CisgKgorICogICBEZXByZWNhdGVkLiAgVGhlIGluaXRpYWwgbWF4IGNvbmN1cnJlbnQgc3RyZWFtcyBpcyAweGZmZmZmZmZmdS4KKyAqCisgKiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIGluY29taW5nIGNvbmN1cnJlbnQgc3RyZWFtcy4gIFVzZQorICogYG5naHR0cDJfc3VibWl0X3NldHRpbmdzKClgIHdpdGgKKyAqIDplbnVtOmBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVNgIHRvIGNoYW5nZSB0aGUKKyAqIG1heGltdW0gbnVtYmVyIG9mIGluY29taW5nIGNvbmN1cnJlbnQgc3RyZWFtcy4KKyAqCisgKiAuLiBub3RlOjoKKyAqCisgKiAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRnb2luZyBjb25jdXJyZW50IHN0cmVhbXMgaXMgMTAwIGJ5CisgKiAgIGRlZmF1bHQuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9JTklUSUFMX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgKCgxVSA8PCAzMSkgLSAxKQorCisvKioKKyAqIEBlbnVtCisgKiBUaGUgc3RhdHVzIGNvZGVzIGZvciB0aGUgUlNUX1NUUkVBTSBhbmQgR09BV0FZIGZyYW1lcy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIE5vIGVycm9ycy4KKyAgICovCisgIE5HSFRUUDJfTk9fRVJST1IgPSAweDAwLAorICAvKioKKyAgICogUFJPVE9DT0xfRVJST1IKKyAgICovCisgIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IgPSAweDAxLAorICAvKioKKyAgICogSU5URVJOQUxfRVJST1IKKyAgICovCisgIE5HSFRUUDJfSU5URVJOQUxfRVJST1IgPSAweDAyLAorICAvKioKKyAgICogRkxPV19DT05UUk9MX0VSUk9SCisgICAqLworICBOR0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUiA9IDB4MDMsCisgIC8qKgorICAgKiBTRVRUSU5HU19USU1FT1VUCisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX1RJTUVPVVQgPSAweDA0LAorICAvKioKKyAgICogU1RSRUFNX0NMT1NFRAorICAgKi8KKyAgTkdIVFRQMl9TVFJFQU1fQ0xPU0VEID0gMHgwNSwKKyAgLyoqCisgICAqIEZSQU1FX1NJWkVfRVJST1IKKyAgICovCisgIE5HSFRUUDJfRlJBTUVfU0laRV9FUlJPUiA9IDB4MDYsCisgIC8qKgorICAgKiBSRUZVU0VEX1NUUkVBTQorICAgKi8KKyAgTkdIVFRQMl9SRUZVU0VEX1NUUkVBTSA9IDB4MDcsCisgIC8qKgorICAgKiBDQU5DRUwKKyAgICovCisgIE5HSFRUUDJfQ0FOQ0VMID0gMHgwOCwKKyAgLyoqCisgICAqIENPTVBSRVNTSU9OX0VSUk9SCisgICAqLworICBOR0hUVFAyX0NPTVBSRVNTSU9OX0VSUk9SID0gMHgwOSwKKyAgLyoqCisgICAqIENPTk5FQ1RfRVJST1IKKyAgICovCisgIE5HSFRUUDJfQ09OTkVDVF9FUlJPUiA9IDB4MGEsCisgIC8qKgorICAgKiBFTkhBTkNFX1lPVVJfQ0FMTQorICAgKi8KKyAgTkdIVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTSA9IDB4MGIsCisgIC8qKgorICAgKiBJTkFERVFVQVRFX1NFQ1VSSVRZCisgICAqLworICBOR0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFkgPSAweDBjLAorICAvKioKKyAgICogSFRUUF8xXzFfUkVRVUlSRUQKKyAgICovCisgIE5HSFRUUDJfSFRUUF8xXzFfUkVRVUlSRUQgPSAweDBkCit9IG5naHR0cDJfZXJyb3JfY29kZTsKKworLyoqCisgKiBAc3RydWN0CisgKiBUaGUgZnJhbWUgaGVhZGVyLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgbGVuZ3RoIGZpZWxkIG9mIHRoaXMgZnJhbWUsIGV4Y2x1ZGluZyBmcmFtZSBoZWFkZXIuCisgICAqLworICBzaXplX3QgbGVuZ3RoOworICAvKioKKyAgICogVGhlIHN0cmVhbSBpZGVudGlmaWVyIChha2EsIHN0cmVhbSBJRCkKKyAgICovCisgIGludDMyX3Qgc3RyZWFtX2lkOworICAvKioKKyAgICogVGhlIHR5cGUgb2YgdGhpcyBmcmFtZS4gIFNlZSBgbmdodHRwMl9mcmFtZV90eXBlYC4KKyAgICovCisgIHVpbnQ4X3QgdHlwZTsKKyAgLyoqCisgICAqIFRoZSBmbGFncy4KKyAgICovCisgIHVpbnQ4X3QgZmxhZ3M7CisgIC8qKgorICAgKiBSZXNlcnZlZCBiaXQgaW4gZnJhbWUgaGVhZGVyLiAgQ3VycmVudGx5LCB0aGlzIGlzIGFsd2F5cyBzZXQgdG8gMAorICAgKiBhbmQgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBleHBlY3Qgc29tZXRoaW5nIHVzZWZ1bCBpbiBoZXJlLgorICAgKi8KKyAgdWludDhfdCByZXNlcnZlZDsKK30gbmdodHRwMl9mcmFtZV9oZDsKKworLyoqCisgKiBAdW5pb24KKyAqCisgKiBUaGlzIHVuaW9uIHJlcHJlc2VudHMgdGhlIHNvbWUga2luZCBvZiBkYXRhIHNvdXJjZSBwYXNzZWQgdG8KKyAqIDp0eXBlOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgLgorICovCit0eXBlZGVmIHVuaW9uIHsKKyAgLyoqCisgICAqIFRoZSBpbnRlZ2VyIGZpZWxkLCBzdWl0YWJsZSBmb3IgYSBmaWxlIGRlc2NyaXB0b3IuCisgICAqLworICBpbnQgZmQ7CisgIC8qKgorICAgKiBUaGUgcG9pbnRlciB0byBhbiBhcmJpdHJhcnkgb2JqZWN0LgorICAgKi8KKyAgdm9pZCAqcHRyOworfSBuZ2h0dHAyX2RhdGFfc291cmNlOworCisvKioKKyAqIEBlbnVtCisgKgorICogVGhlIGZsYWdzIHVzZWQgdG8gc2V0IGluIHxkYXRhX2ZsYWdzfCBvdXRwdXQgcGFyYW1ldGVyIGluCisgKiA6dHlwZTpgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrYC4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIE5vIGZsYWcgc2V0LgorICAgKi8KKyAgTkdIVFRQMl9EQVRBX0ZMQUdfTk9ORSA9IDAsCisgIC8qKgorICAgKiBJbmRpY2F0ZXMgRU9GIHdhcyBzZW5zZWQuCisgICAqLworICBOR0hUVFAyX0RBVEFfRkxBR19FT0YgPSAweDAxLAorICAvKioKKyAgICogSW5kaWNhdGVzIHRoYXQgRU5EX1NUUkVBTSBmbGFnIG11c3Qgbm90IGJlIHNldCBldmVuIGlmCisgICAqIE5HSFRUUDJfREFUQV9GTEFHX0VPRiBpcyBzZXQuICBVc3VhbGx5IHRoaXMgZmxhZyBpcyB1c2VkIHRvIHNlbmQKKyAgICogdHJhaWxlciBmaWVsZHMgd2l0aCBgbmdodHRwMl9zdWJtaXRfcmVxdWVzdCgpYCBvcgorICAgKiBgbmdodHRwMl9zdWJtaXRfcmVzcG9uc2UoKWAuCisgICAqLworICBOR0hUVFAyX0RBVEFfRkxBR19OT19FTkRfU1RSRUFNID0gMHgwMiwKKyAgLyoqCisgICAqIEluZGljYXRlcyB0aGF0IGFwcGxpY2F0aW9uIHdpbGwgc2VuZCBjb21wbGV0ZSBEQVRBIGZyYW1lIGluCisgICAqIDp0eXBlOmBuZ2h0dHAyX3NlbmRfZGF0YV9jYWxsYmFja2AuCisgICAqLworICBOR0hUVFAyX0RBVEFfRkxBR19OT19DT1BZID0gMHgwNAorfSBuZ2h0dHAyX2RhdGFfZmxhZzsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIGxpYnJhcnkgd2FudHMgdG8gcmVhZCBkYXRhIGZyb20KKyAqIHRoZSB8c291cmNlfC4gIFRoZSByZWFkIGRhdGEgaXMgc2VudCBpbiB0aGUgc3RyZWFtIHxzdHJlYW1faWR8LgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZWFkIGF0IG1vc3QgfGxlbmd0aHwKKyAqIGJ5dGVzIG9mIGRhdGEgZnJvbSB8c291cmNlfCAob3IgcG9zc2libHkgb3RoZXIgcGxhY2VzKSBhbmQgc3RvcmUKKyAqIHRoZW0gaW4gfGJ1ZnwgYW5kIHJldHVybiBudW1iZXIgb2YgZGF0YSBzdG9yZWQgaW4gfGJ1ZnwuICBJZiBFT0YgaXMKKyAqIHJlYWNoZWQsIHNldCA6ZW51bTpgTkdIVFRQMl9EQVRBX0ZMQUdfRU9GYCBmbGFnIGluIHwqZGF0YV9mbGFnc3wuCisgKgorICogU29tZXRpbWUgaXQgaXMgZGVzaXJhYmxlIHRvIGF2b2lkIGNvcHlpbmcgZGF0YSBpbnRvIHxidWZ8IGFuZCBsZXQKKyAqIGFwcGxpY2F0aW9uIHRvIHNlbmQgZGF0YSBkaXJlY3RseS4gIFRvIGFjaGlldmUgdGhpcywgc2V0CisgKiA6ZW51bTpgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fQ09QWWAgdG8gfCpkYXRhX2ZsYWdzfCAoYW5kIHBvc3NpYmx5CisgKiBvdGhlciBmbGFncywganVzdCBsaWtlIHdoZW4gd2UgZG8gY29weSksIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZgorICogYnl0ZXMgdG8gc2VuZCB3aXRob3V0IGNvcHlpbmcgZGF0YSBpbnRvIHxidWZ8LiAgVGhlIGxpYnJhcnksIHNlZWluZworICogOmVudW06YE5HSFRUUDJfREFUQV9GTEFHX05PX0NPUFlgLCB3aWxsIGludm9rZQorICogOnR5cGU6YG5naHR0cDJfc2VuZF9kYXRhX2NhbGxiYWNrYC4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHNlbmQKKyAqIGNvbXBsZXRlIERBVEEgZnJhbWUgaW4gdGhhdCBjYWxsYmFjay4KKyAqCisgKiBJZiB0aGlzIGNhbGxiYWNrIGlzIHNldCBieSBgbmdodHRwMl9zdWJtaXRfcmVxdWVzdCgpYCwKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9yZXNwb25zZSgpYCBvciBgbmdodHRwMl9zdWJtaXRfaGVhZGVycygpYCBhbmQKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9kYXRhKClgIHdpdGggZmxhZyBwYXJhbWV0ZXIKKyAqIDplbnVtOmBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTWAgc2V0LCBhbmQKKyAqIDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19FT0ZgIGZsYWcgaXMgc2V0IHRvIHwqZGF0YV9mbGFnc3wsIERBVEEKKyAqIGZyYW1lIHdpbGwgaGF2ZSBFTkRfU1RSRUFNIGZsYWcgc2V0LiAgVXN1YWxseSwgdGhpcyBpcyBleHBlY3RlZAorICogYmVoYXZpb3VyIGFuZCBhbGwgYXJlIGZpbmUuICBPbmUgZXhjZXB0aW9uIGlzIHNlbmQgdHJhaWxlciBmaWVsZHMuCisgKiBZb3UgY2Fubm90IHNlbmQgdHJhaWxlciBmaWVsZHMgYWZ0ZXIgc2VuZGluZyBmcmFtZSB3aXRoIEVORF9TVFJFQU0KKyAqIHNldC4gIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgb25lIGNhbiBzZXQKKyAqIDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19OT19FTkRfU1RSRUFNYCBhbG9uZyB3aXRoCisgKiA6ZW51bTpgTkdIVFRQMl9EQVRBX0ZMQUdfRU9GYCB0byBzaWduYWwgdGhlIGxpYnJhcnkgbm90IHRvIHNldAorICogRU5EX1NUUkVBTSBpbiBEQVRBIGZyYW1lLiAgVGhlbiBhcHBsaWNhdGlvbiBjYW4gdXNlCisgKiBgbmdodHRwMl9zdWJtaXRfdHJhaWxlcigpYCB0byBzZW5kIHRyYWlsZXIgZmllbGRzLgorICogYG5naHR0cDJfc3VibWl0X3RyYWlsZXIoKWAgY2FuIGJlIGNhbGxlZCBpbnNpZGUgdGhpcyBjYWxsYmFjay4KKyAqCisgKiBJZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcG9zdHBvbmUgREFUQSBmcmFtZXMgKGUuZy4sCisgKiBhc3luY2hyb25vdXMgSS9PLCBvciByZWFkaW5nIGRhdGEgYmxvY2tzIGZvciBsb25nIHRpbWUpLCBpdCBpcworICogYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIDplbnVtOmBOR0hUVFAyX0VSUl9ERUZFUlJFRGAgd2l0aG91dCByZWFkaW5nCisgKiBhbnkgZGF0YSBpbiB0aGlzIGludm9jYXRpb24uICBUaGUgbGlicmFyeSByZW1vdmVzIERBVEEgZnJhbWUgZnJvbQorICogdGhlIG91dGdvaW5nIHF1ZXVlIHRlbXBvcmFyaWx5LiAgVG8gbW92ZSBiYWNrIGRlZmVycmVkIERBVEEgZnJhbWUKKyAqIHRvIG91dGdvaW5nIHF1ZXVlLCBjYWxsIGBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoKWAuCisgKgorICogQnkgZGVmYXVsdCwgfGxlbmd0aHwgaXMgbGltaXRlZCB0byAxNktpQiBhdCBtYXhpbXVtLiAgSWYgcGVlcgorICogYWxsb3dzIGxhcmdlciBmcmFtZXMsIGFwcGxpY2F0aW9uIGNhbiBlbmxhcmdlIHRyYW5zbWlzc2lvbiBidWZmZXIKKyAqIHNpemUuICBTZWUgOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2tgIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBqdXN0IHdhbnRzIHRvIHJldHVybiBmcm9tCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCB3aXRob3V0CisgKiBzZW5kaW5nIGFueXRoaW5nLCByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX1BBVVNFYC4KKyAqCisgKiBJbiBjYXNlIG9mIGVycm9yLCB0aGVyZSBhcmUgMiBjaG9pY2VzLiBSZXR1cm5pbmcKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYCB3aWxsIGNsb3NlIHRoZSBzdHJlYW0KKyAqIGJ5IGlzc3VpbmcgUlNUX1NUUkVBTSB3aXRoIDplbnVtOmBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SYC4gIElmIGEKKyAqIGRpZmZlcmVudCBlcnJvciBjb2RlIGlzIGRlc2lyYWJsZSwgdXNlCisgKiBgbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbSgpYCB3aXRoIGEgZGVzaXJlZCBlcnJvciBjb2RlIGFuZCB0aGVuCisgKiByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgLiAgUmV0dXJuaW5nCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAgd2lsbCBzaWduYWwgdGhlIGVudGlyZSBzZXNzaW9uCisgKiBmYWlsdXJlLgorICovCit0eXBlZGVmIHNzaXplX3QgKCpuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2spKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwKKyAgICB1aW50MzJfdCAqZGF0YV9mbGFncywgbmdodHRwMl9kYXRhX3NvdXJjZSAqc291cmNlLCB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGlzIHN0cnVjdCByZXByZXNlbnRzIHRoZSBkYXRhIHNvdXJjZSBhbmQgdGhlIHdheSB0byByZWFkIGEgY2h1bmsKKyAqIG9mIGRhdGEgZnJvbSBpdC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGRhdGEgc291cmNlLgorICAgKi8KKyAgbmdodHRwMl9kYXRhX3NvdXJjZSBzb3VyY2U7CisgIC8qKgorICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVhZCBhIGNodW5rIG9mIGRhdGEgZnJvbSB0aGUgfHNvdXJjZXwuCisgICAqLworICBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2sgcmVhZF9jYWxsYmFjazsKK30gbmdodHRwMl9kYXRhX3Byb3ZpZGVyOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgREFUQSBmcmFtZS4gIFRoZSByZWNlaXZlZCBkYXRhIGlzIGRlbGl2ZXJlZCB2aWEKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFja2AuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIHBhZGRpbmcgaW4gdGhpcyBmcmFtZS4gIFRoaXMgaW5jbHVkZXMgUEFEX0hJR0gKKyAgICogYW5kIFBBRF9MT1cuCisgICAqLworICBzaXplX3QgcGFkbGVuOworfSBuZ2h0dHAyX2RhdGE7CisKKy8qKgorICogQGVudW0KKyAqCisgKiBUaGUgY2F0ZWdvcnkgb2YgSEVBREVSUywgd2hpY2ggaW5kaWNhdGVzIHRoZSByb2xlIG9mIHRoZSBmcmFtZS4gIEluCisgKiBIVFRQLzIgc3BlYywgcmVxdWVzdCwgcmVzcG9uc2UsIHB1c2ggcmVzcG9uc2UgYW5kIG90aGVyIGFyYml0cmFyeQorICogaGVhZGVycyAoZS5nLiwgdHJhaWxlciBmaWVsZHMpIGFyZSBhbGwgY2FsbGVkIGp1c3QgSEVBREVSUy4gIFRvCisgKiBnaXZlIHRoZSBhcHBsaWNhdGlvbiB0aGUgcm9sZSBvZiBpbmNvbWluZyBIRUFERVJTIGZyYW1lLCB3ZSBkZWZpbmUKKyAqIHNldmVyYWwgY2F0ZWdvcmllcy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIFRoZSBIRUFERVJTIGZyYW1lIGlzIG9wZW5pbmcgbmV3IHN0cmVhbSwgd2hpY2ggaXMgYW5hbG9nb3VzIHRvCisgICAqIFNZTl9TVFJFQU0gaW4gU1BEWS4KKyAgICovCisgIE5HSFRUUDJfSENBVF9SRVFVRVNUID0gMCwKKyAgLyoqCisgICAqIFRoZSBIRUFERVJTIGZyYW1lIGlzIHRoZSBmaXJzdCByZXNwb25zZSBoZWFkZXJzLCB3aGljaCBpcworICAgKiBhbmFsb2dvdXMgdG8gU1lOX1JFUExZIGluIFNQRFkuCisgICAqLworICBOR0hUVFAyX0hDQVRfUkVTUE9OU0UgPSAxLAorICAvKioKKyAgICogVGhlIEhFQURFUlMgZnJhbWUgaXMgdGhlIGZpcnN0IGhlYWRlcnMgc2VudCBhZ2FpbnN0IHJlc2VydmVkCisgICAqIHN0cmVhbS4KKyAgICovCisgIE5HSFRUUDJfSENBVF9QVVNIX1JFU1BPTlNFID0gMiwKKyAgLyoqCisgICAqIFRoZSBIRUFERVJTIGZyYW1lIHdoaWNoIGRvZXMgbm90IGFwcGx5IGZvciB0aGUgYWJvdmUgY2F0ZWdvcmllcywKKyAgICogd2hpY2ggaXMgYW5hbG9nb3VzIHRvIEhFQURFUlMgaW4gU1BEWS4gIElmIG5vbi1maW5hbCByZXNwb25zZQorICAgKiAoZS5nLiwgc3RhdHVzIDF4eCkgaXMgdXNlZCwgZmluYWwgcmVzcG9uc2UgSEVBREVSUyBmcmFtZSB3aWxsIGJlCisgICAqIGNhdGVnb3JpemVkIGhlcmUuCisgICAqLworICBOR0hUVFAyX0hDQVRfSEVBREVSUyA9IDMKK30gbmdodHRwMl9oZWFkZXJzX2NhdGVnb3J5OworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgc3RydWN0dXJlIHRvIHNwZWNpZnkgc3RyZWFtIGRlcGVuZGVuY3kuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBzdHJlYW0gSUQgb2YgdGhlIHN0cmVhbSB0byBkZXBlbmQgb24uICBTcGVjaWZ5aW5nIDAgbWFrZXMKKyAgICogc3RyZWFtIG5vdCBkZXBlbmQgYW55IG90aGVyIHN0cmVhbS4KKyAgICovCisgIGludDMyX3Qgc3RyZWFtX2lkOworICAvKioKKyAgICogVGhlIHdlaWdodCBvZiB0aGlzIGRlcGVuZGVuY3kuCisgICAqLworICBpbnQzMl90IHdlaWdodDsKKyAgLyoqCisgICAqIG5vbnplcm8gbWVhbnMgZXhjbHVzaXZlIGRlcGVuZGVuY3kKKyAgICovCisgIHVpbnQ4X3QgZXhjbHVzaXZlOworfSBuZ2h0dHAyX3ByaW9yaXR5X3NwZWM7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBIRUFERVJTIGZyYW1lLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGZyYW1lIGhlYWRlci4KKyAgICovCisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisgIC8qKgorICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBwYWRkaW5nIGluIHRoaXMgZnJhbWUuICBUaGlzIGluY2x1ZGVzIFBBRF9ISUdICisgICAqIGFuZCBQQURfTE9XLgorICAgKi8KKyAgc2l6ZV90IHBhZGxlbjsKKyAgLyoqCisgICAqIFRoZSBwcmlvcml0eSBzcGVjaWZpY2F0aW9uCisgICAqLworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgcHJpX3NwZWM7CisgIC8qKgorICAgKiBUaGUgbmFtZS92YWx1ZSBwYWlycy4KKyAgICovCisgIG5naHR0cDJfbnYgKm52YTsKKyAgLyoqCisgICAqIFRoZSBudW1iZXIgb2YgbmFtZS92YWx1ZSBwYWlycyBpbiB8bnZhfC4KKyAgICovCisgIHNpemVfdCBudmxlbjsKKyAgLyoqCisgICAqIFRoZSBjYXRlZ29yeSBvZiB0aGlzIEhFQURFUlMgZnJhbWUuCisgICAqLworICBuZ2h0dHAyX2hlYWRlcnNfY2F0ZWdvcnkgY2F0OworfSBuZ2h0dHAyX2hlYWRlcnM7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBQUklPUklUWSBmcmFtZS4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBmcmFtZSBoZWFkZXIuCisgICAqLworICBuZ2h0dHAyX2ZyYW1lX2hkIGhkOworICAvKioKKyAgICogVGhlIHByaW9yaXR5IHNwZWNpZmljYXRpb24uCisgICAqLworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgcHJpX3NwZWM7Cit9IG5naHR0cDJfcHJpb3JpdHk7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBSU1RfU1RSRUFNIGZyYW1lLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGZyYW1lIGhlYWRlci4KKyAgICovCisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisgIC8qKgorICAgKiBUaGUgZXJyb3IgY29kZS4gIFNlZSA6dHlwZTpgbmdodHRwMl9lcnJvcl9jb2RlYC4KKyAgICovCisgIHVpbnQzMl90IGVycm9yX2NvZGU7Cit9IG5naHR0cDJfcnN0X3N0cmVhbTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIFNFVFRJTkdTIElEL1ZhbHVlIHBhaXIuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgU0VUVElOR1MgSUQuICBTZWUgOnR5cGU6YG5naHR0cDJfc2V0dGluZ3NfaWRgLgorICAgKi8KKyAgaW50MzJfdCBzZXR0aW5nc19pZDsKKyAgLyoqCisgICAqIFRoZSB2YWx1ZSBvZiB0aGlzIGVudHJ5LgorICAgKi8KKyAgdWludDMyX3QgdmFsdWU7Cit9IG5naHR0cDJfc2V0dGluZ3NfZW50cnk7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBTRVRUSU5HUyBmcmFtZS4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBmcmFtZSBoZWFkZXIuCisgICAqLworICBuZ2h0dHAyX2ZyYW1lX2hkIGhkOworICAvKioKKyAgICogVGhlIG51bWJlciBvZiBTRVRUSU5HUyBJRC9WYWx1ZSBwYWlycyBpbiB8aXZ8LgorICAgKi8KKyAgc2l6ZV90IG5pdjsKKyAgLyoqCisgICAqIFRoZSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiBTRVRUSU5HUyBJRC9WYWx1ZSBwYWlyLgorICAgKi8KKyAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXY7Cit9IG5naHR0cDJfc2V0dGluZ3M7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBQVVNIX1BST01JU0UgZnJhbWUuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgZnJhbWUgaGVhZGVyLgorICAgKi8KKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIHBhZGRpbmcgaW4gdGhpcyBmcmFtZS4gIFRoaXMgaW5jbHVkZXMgUEFEX0hJR0gKKyAgICogYW5kIFBBRF9MT1cuCisgICAqLworICBzaXplX3QgcGFkbGVuOworICAvKioKKyAgICogVGhlIG5hbWUvdmFsdWUgcGFpcnMuCisgICAqLworICBuZ2h0dHAyX252ICpudmE7CisgIC8qKgorICAgKiBUaGUgbnVtYmVyIG9mIG5hbWUvdmFsdWUgcGFpcnMgaW4gfG52YXwuCisgICAqLworICBzaXplX3QgbnZsZW47CisgIC8qKgorICAgKiBUaGUgcHJvbWlzZWQgc3RyZWFtIElECisgICAqLworICBpbnQzMl90IHByb21pc2VkX3N0cmVhbV9pZDsKKyAgLyoqCisgICAqIFJlc2VydmVkIGJpdC4gIEN1cnJlbnRseSB0aGlzIGlzIGFsd2F5cyBzZXQgdG8gMCBhbmQgYXBwbGljYXRpb24KKyAgICogc2hvdWxkIG5vdCBleHBlY3Qgc29tZXRoaW5nIHVzZWZ1bCBpbiBoZXJlLgorICAgKi8KKyAgdWludDhfdCByZXNlcnZlZDsKK30gbmdodHRwMl9wdXNoX3Byb21pc2U7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBQSU5HIGZyYW1lLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGZyYW1lIGhlYWRlci4KKyAgICovCisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisgIC8qKgorICAgKiBUaGUgb3BhcXVlIGRhdGEKKyAgICovCisgIHVpbnQ4X3Qgb3BhcXVlX2RhdGFbOF07Cit9IG5naHR0cDJfcGluZzsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIEdPQVdBWSBmcmFtZS4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBmcmFtZSBoZWFkZXIuCisgICAqLworICBuZ2h0dHAyX2ZyYW1lX2hkIGhkOworICAvKioKKyAgICogVGhlIGxhc3Qgc3RyZWFtIHN0cmVhbSBJRC4KKyAgICovCisgIGludDMyX3QgbGFzdF9zdHJlYW1faWQ7CisgIC8qKgorICAgKiBUaGUgZXJyb3IgY29kZS4gIFNlZSA6dHlwZTpgbmdodHRwMl9lcnJvcl9jb2RlYC4KKyAgICovCisgIHVpbnQzMl90IGVycm9yX2NvZGU7CisgIC8qKgorICAgKiBUaGUgYWRkaXRpb25hbCBkZWJ1ZyBkYXRhCisgICAqLworICB1aW50OF90ICpvcGFxdWVfZGF0YTsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgfG9wYXF1ZV9kYXRhfCBtZW1iZXIuCisgICAqLworICBzaXplX3Qgb3BhcXVlX2RhdGFfbGVuOworICAvKioKKyAgICogUmVzZXJ2ZWQgYml0LiAgQ3VycmVudGx5IHRoaXMgaXMgYWx3YXlzIHNldCB0byAwIGFuZCBhcHBsaWNhdGlvbgorICAgKiBzaG91bGQgbm90IGV4cGVjdCBzb21ldGhpbmcgdXNlZnVsIGluIGhlcmUuCisgICAqLworICB1aW50OF90IHJlc2VydmVkOworfSBuZ2h0dHAyX2dvYXdheTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIFdJTkRPV19VUERBVEUgZnJhbWUuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgZnJhbWUgaGVhZGVyLgorICAgKi8KKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSB3aW5kb3cgc2l6ZSBpbmNyZW1lbnQuCisgICAqLworICBpbnQzMl90IHdpbmRvd19zaXplX2luY3JlbWVudDsKKyAgLyoqCisgICAqIFJlc2VydmVkIGJpdC4gIEN1cnJlbnRseSB0aGlzIGlzIGFsd2F5cyBzZXQgdG8gMCBhbmQgYXBwbGljYXRpb24KKyAgICogc2hvdWxkIG5vdCBleHBlY3Qgc29tZXRoaW5nIHVzZWZ1bCBpbiBoZXJlLgorICAgKi8KKyAgdWludDhfdCByZXNlcnZlZDsKK30gbmdodHRwMl93aW5kb3dfdXBkYXRlOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgZXh0ZW5zaW9uIGZyYW1lLiAgSXQgaGFzIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgZnJhbWUgaGVhZGVyLgorICAgKi8KKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSBwb2ludGVyIHRvIGV4dGVuc2lvbiBwYXlsb2FkLiAgVGhlIGV4YWN0IHBvaW50ZXIgdHlwZSBpcworICAgKiBkZXRlcm1pbmVkIGJ5IGhkLnR5cGUuCisgICAqCisgICAqIEN1cnJlbnRseSwgbm8gZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZC4gIFRoaXMgaXMgYSBwbGFjZSBob2xkZXIgZm9yCisgICAqIHRoZSBmdXR1cmUgZXh0ZW5zaW9ucy4KKyAgICovCisgIHZvaWQgKnBheWxvYWQ7Cit9IG5naHR0cDJfZXh0ZW5zaW9uOworCisvKioKKyAqIEB1bmlvbgorICoKKyAqIFRoaXMgdW5pb24gaW5jbHVkZXMgYWxsIGZyYW1lcyB0byBwYXNzIHRoZW0gdG8gdmFyaW91cyBmdW5jdGlvbgorICogY2FsbHMgYXMgbmdodHRwMl9mcmFtZSB0eXBlLiAgVGhlIENPTlRJTlVBVElPTiBmcmFtZSBpcyBvbWl0dGVkCisgKiBmcm9tIGhlcmUgYmVjYXVzZSB0aGUgbGlicmFyeSBkZWFscyB3aXRoIGl0IGludGVybmFsbHkuCisgKi8KK3R5cGVkZWYgdW5pb24geworICAvKioKKyAgICogVGhlIGZyYW1lIGhlYWRlciwgd2hpY2ggaXMgY29udmVuaWVudCB0byBpbnNwZWN0IGZyYW1lIGhlYWRlci4KKyAgICovCisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisgIC8qKgorICAgKiBUaGUgREFUQSBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfZGF0YSBkYXRhOworICAvKioKKyAgICogVGhlIEhFQURFUlMgZnJhbWUuCisgICAqLworICBuZ2h0dHAyX2hlYWRlcnMgaGVhZGVyczsKKyAgLyoqCisgICAqIFRoZSBQUklPUklUWSBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfcHJpb3JpdHkgcHJpb3JpdHk7CisgIC8qKgorICAgKiBUaGUgUlNUX1NUUkVBTSBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfcnN0X3N0cmVhbSByc3Rfc3RyZWFtOworICAvKioKKyAgICogVGhlIFNFVFRJTkdTIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9zZXR0aW5ncyBzZXR0aW5nczsKKyAgLyoqCisgICAqIFRoZSBQVVNIX1BST01JU0UgZnJhbWUuCisgICAqLworICBuZ2h0dHAyX3B1c2hfcHJvbWlzZSBwdXNoX3Byb21pc2U7CisgIC8qKgorICAgKiBUaGUgUElORyBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfcGluZyBwaW5nOworICAvKioKKyAgICogVGhlIEdPQVdBWSBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfZ29hd2F5IGdvYXdheTsKKyAgLyoqCisgICAqIFRoZSBXSU5ET1dfVVBEQVRFIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl93aW5kb3dfdXBkYXRlIHdpbmRvd191cGRhdGU7CisgIC8qKgorICAgKiBUaGUgZXh0ZW5zaW9uIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9leHRlbnNpb24gZXh0OworfSBuZ2h0dHAyX2ZyYW1lOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB8c2Vzc2lvbnwgd2FudHMgdG8gc2VuZCBkYXRhIHRvIHRoZQorICogcmVtb3RlIHBlZXIuICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHNlbmQgYXQgbW9zdAorICogfGxlbmd0aHwgYnl0ZXMgb2YgZGF0YSBzdG9yZWQgaW4gfGRhdGF8LiAgVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5CisgKiBub3QgdXNlZCBhbmQgYWx3YXlzIDAuIEl0IG11c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBpZgorICogaXQgc3VjY2VlZHMuICBJZiBpdCBjYW5ub3Qgc2VuZCBhbnkgc2luZ2xlIGJ5dGUgd2l0aG91dCBibG9ja2luZywKKyAqIGl0IG11c3QgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9XT1VMREJMT0NLYC4gIEZvciBvdGhlciBlcnJvcnMsCisgKiBpdCBtdXN0IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBUaGUKKyAqIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0bworICogYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIHJlcXVpcmVkIGlmIHRoZSBhcHBsaWNhdGlvbiB1c2VzCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAgdG8gc2VuZCBkYXRhIHRvIHRoZSByZW1vdGUgZW5kcG9pbnQuICBJZgorICogdGhlIGFwcGxpY2F0aW9uIHVzZXMgc29sZWx5IGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAgaW5zdGVhZCwKKyAqIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gaXMgdW5uZWNlc3NhcnkuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9zZW5kX2NhbGxiYWNrKClgLgorICoKKyAqIC4uIG5vdGU6OgorICoKKyAqICAgVGhlIHxsZW5ndGh8IG1heSBiZSB2ZXJ5IHNtYWxsLiAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgYW5kCisgKiAgIGFwcGxpY2F0aW9uIGRpc2FibGVzIE5hZ2xlIGFsZ29yaXRobSAoYGBUQ1BfTk9ERUxBWWBgKSwgdGhlbiBqdXN0CisgKiAgIHdyaXRpbmcgfGRhdGF8IHRvIHRoZSBuZXR3b3JrIHN0YWNrIGxlYWRzIHRvIHZlcnkgc21hbGwgcGFja2V0LAorICogICBhbmQgaXQgaXMgdmVyeSBpbmVmZmljaWVudC4gIEFuIGFwcGxpY2F0aW9uIHNob3VsZCBiZSByZXNwb25zaWJsZQorICogICB0byBidWZmZXIgdXAgc21hbGwgY2h1bmtzIG9mIGRhdGEgYXMgbmVjZXNzYXJ5IHRvIGF2b2lkIHRoaXMKKyAqICAgc2l0dWF0aW9uLgorICovCit0eXBlZGVmIHNzaXplX3QgKCpuZ2h0dHAyX3NlbmRfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiA6ZW51bTpgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fQ09QWWAgaXMKKyAqIHVzZWQgaW4gOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AgdG8gc2VuZCBjb21wbGV0ZQorICogREFUQSBmcmFtZS4KKyAqCisgKiBUaGUgfGZyYW1lfCBpcyBhIERBVEEgZnJhbWUgdG8gc2VuZC4gIFRoZSB8ZnJhbWVoZHwgaXMgdGhlCisgKiBzZXJpYWxpemVkIGZyYW1lIGhlYWRlciAoOSBieXRlcykuIFRoZSB8bGVuZ3RofCBpcyB0aGUgbGVuZ3RoIG9mCisgKiBhcHBsaWNhdGlvbiBkYXRhIHRvIHNlbmQgKHRoaXMgZG9lcyBub3QgaW5jbHVkZSBwYWRkaW5nKS4gIFRoZQorICogfHNvdXJjZXwgaXMgdGhlIHNhbWUgcG9pbnRlciBwYXNzZWQgdG8KKyAqIDp0eXBlOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgLgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiBmaXJzdCBtdXN0IHNlbmQgZnJhbWUgaGVhZGVyIHxmcmFtZWhkfCBvZiBsZW5ndGggOQorICogYnl0ZXMuICBJZiBgYGZyYW1lLT5kYXRhLnBhZGxlbiA+IDBgYCwgc2VuZCAxIGJ5dGUgb2YgdmFsdWUKKyAqIGBgZnJhbWUtPmRhdGEucGFkbGVuIC0gMWBgLiAgVGhlbiBzZW5kIGV4YWN0bHkgfGxlbmd0aHwgYnl0ZXMgb2YKKyAqIGFwcGxpY2F0aW9uIGRhdGEuICBGaW5hbGx5LCBpZiBgYGZyYW1lLT5kYXRhLnBhZGxlbiA+IDFgYCwgc2VuZAorICogYGBmcmFtZS0+ZGF0YS5wYWRsZW4gLSAxYGAgYnl0ZXMgb2YgemVybyBhcyBwYWRkaW5nLgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gc2VuZCBjb21wbGV0ZSBEQVRBIGZyYW1lIGluIHRoaXMgY2FsbGJhY2suCisgKiBJZiBhbGwgZGF0YSB3ZXJlIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5LCByZXR1cm4gMC4KKyAqCisgKiBJZiBpdCBjYW5ub3Qgc2VuZCBhbnkgZGF0YSBhdCBhbGwsIGp1c3QgcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfV09VTERCTE9DS2A7IHRoZSBsaWJyYXJ5IHdpbGwgY2FsbCB0aGlzIGNhbGxiYWNrCisgKiB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgbGF0ZXIgKEl0IGlzIHJlY29tbWVuZGVkIHRvIHNlbmQgY29tcGxldGUKKyAqIERBVEEgZnJhbWUgYXQgb25jZSBpbiB0aGlzIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCBlcnJvcjsgaWYgcGFydGlhbAorICogZnJhbWUgZGF0YSBoYXMgYWxyZWFkeSBzZW50LCBpdCBpcyBpbXBvc3NpYmxlIHRvIHNlbmQgYW5vdGhlciBkYXRhCisgKiBpbiB0aGF0IHN0YXRlLCBhbmQgYWxsIHdlIGNhbiBkbyBpcyB0ZWFyIGRvd24gY29ubmVjdGlvbikuICBXaGVuCisgKiBkYXRhIGlzIGZ1bGx5IHByb2Nlc3NlZCwgYnV0IGFwcGxpY2F0aW9uIHdhbnRzIHRvIG1ha2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl9zZW5kKClgIHJldHVybgorICogaW1tZWRpYXRlbHkgd2l0aG91dCBwcm9jZXNzaW5nIG5leHQgZnJhbWVzLCByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9QQVVTRWAuICBJZiBhcHBsaWNhdGlvbiBkZWNpZGVkIHRvIHJlc2V0IHRoaXMKKyAqIHN0cmVhbSwgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYCwgdGhlbgorICogdGhlIGxpYnJhcnkgd2lsbCBzZW5kIFJTVF9TVFJFQU0gd2l0aCBJTlRFUk5BTF9FUlJPUiBhcyBlcnJvciBjb2RlLgorICogVGhlIGFwcGxpY2F0aW9uIGNhbiBhbHNvIHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLCB3aGljaCB3aWxsIHJlc3VsdCBpbgorICogY29ubmVjdGlvbiBjbG9zdXJlLiAgUmV0dXJuaW5nIGFueSBvdGhlciB2YWx1ZSBpcyB0cmVhdGVkIGFzCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAgaXMgcmV0dXJuZWQuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9zZW5kX2RhdGFfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZnJhbWVoZCwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZGF0YV9zb3VyY2UgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHxzZXNzaW9ufCB3YW50cyB0byByZWNlaXZlIGRhdGEgZnJvbQorICogdGhlIHJlbW90ZSBwZWVyLiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZWFkIGF0CisgKiBtb3N0IHxsZW5ndGh8IGJ5dGVzIG9mIGRhdGEgYW5kIHN0b3JlIGl0IGluIHxidWZ8LiAgVGhlIHxmbGFnc3wgaXMKKyAqIGN1cnJlbnRseSBub3QgdXNlZCBhbmQgYWx3YXlzIDAuICBJdCBtdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mCisgKiBieXRlcyB3cml0dGVuIGluIHxidWZ8IGlmIGl0IHN1Y2NlZWRzLiAgSWYgaXQgY2Fubm90IHJlYWQgYW55CisgKiBzaW5nbGUgYnl0ZSB3aXRob3V0IGJsb2NraW5nLCBpdCBtdXN0IHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0tgLiAgSWYgaXQgZ2V0cyBFT0YgYmVmb3JlIGl0IHJlYWRzIGFueQorICogc2luZ2xlIGJ5dGUsIGl0IG11c3QgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9FT0ZgLiAgRm9yIG90aGVyCisgKiBlcnJvcnMsIGl0IG11c3QgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqIFJldHVybmluZyAwIGlzIHRyZWF0ZWQgYXMgOmVudW06YE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0tgLiAgVGhlCisgKiB8dXNlcl9kYXRhfCBwb2ludGVyIGlzIHRoZSB0aGlyZCBhcmd1bWVudCBwYXNzZWQgaW4gdG8gdGhlIGNhbGwgdG8KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldygpYCBvciBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKgorICogVGhpcyBjYWxsYmFjayBpcyByZXF1aXJlZCBpZiB0aGUgYXBwbGljYXRpb24gdXNlcworICogYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIHRvIHJlY2VpdmUgZGF0YSBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQuCisgKiBJZiB0aGUgYXBwbGljYXRpb24gdXNlcyBzb2xlbHkgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYAorICogaW5zdGVhZCwgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiBpcyB1bm5lY2Vzc2FyeS4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X3JlY3ZfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgc3NpemVfdCAoKm5naHR0cDJfcmVjdl9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90ICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGJ5IGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgd2hlbiBhIGZyYW1lIGlzIHJlY2VpdmVkLiAgVGhlCisgKiB8dXNlcl9kYXRhfCBwb2ludGVyIGlzIHRoZSB0aGlyZCBhcmd1bWVudCBwYXNzZWQgaW4gdG8gdGhlIGNhbGwgdG8KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldygpYCBvciBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKgorICogSWYgZnJhbWUgaXMgSEVBREVSUyBvciBQVVNIX1BST01JU0UsIHRoZSBgYG52YWBgIGFuZCBgYG52bGVuYGAKKyAqIG1lbWJlciBvZiB0aGVpciBkYXRhIHN0cnVjdHVyZSBhcmUgYWx3YXlzIGBgTlVMTGBgIGFuZCAwCisgKiByZXNwZWN0aXZlbHkuICBUaGUgaGVhZGVyIG5hbWUvdmFsdWUgcGFpcnMgYXJlIGVtaXR0ZWQgdmlhCisgKiA6dHlwZTpgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2tgLgorICoKKyAqIEZvciBIRUFERVJTLCBQVVNIX1BST01JU0UgYW5kIERBVEEgZnJhbWVzLCB0aGlzIGNhbGxiYWNrIG1heSBiZQorICogY2FsbGVkIGFmdGVyIHN0cmVhbSBpcyBjbG9zZWQgKHNlZQorICogOnR5cGU6YG5naHR0cDJfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrYCkuICBUaGUgYXBwbGljYXRpb24gc2hvdWxkCisgKiBjaGVjayB0aGF0IHN0cmVhbSBpcyBzdGlsbCBhbGl2ZSB1c2luZyBpdHMgb3duIHN0cmVhbSBtYW5hZ2VtZW50IG9yCisgKiA6ZnVuYzpgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fdXNlcl9kYXRhKClgLgorICoKKyAqIE9ubHkgSEVBREVSUyBhbmQgREFUQSBmcmFtZSBjYW4gc2lnbmFsIHRoZSBlbmQgb2YgaW5jb21pbmcgZGF0YS4KKyAqIElmIGBgZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU1gYCBpcyBub256ZXJvLCB0aGUKKyAqIHxmcmFtZXwgaXMgdGhlIGxhc3QgZnJhbWUgZnJvbSB0aGUgcmVtb3RlIHBlZXIgaW4gdGhpcyBzdHJlYW0uCisgKgorICogVGhpcyBjYWxsYmFjayB3b24ndCBiZSBjYWxsZWQgZm9yIENPTlRJTlVBVElPTiBmcmFtZXMuCisgKiBIRUFERVJTL1BVU0hfUFJPTUlTRSArIENPTlRJTlVBVElPTnMgYXJlIHRyZWF0ZWQgYXMgc2luZ2xlIGZyYW1lLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMuCisgKiBJZiBub256ZXJvIHZhbHVlIGlzIHJldHVybmVkLCBpdCBpcyB0cmVhdGVkIGFzIGZhdGFsIGVycm9yIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGJ5IGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgd2hlbiBhbiBpbnZhbGlkIG5vbi1EQVRBIGZyYW1lIGlzCisgKiByZWNlaXZlZC4gIFRoZSBlcnJvciBpcyBpbmRpY2F0ZWQgYnkgdGhlIHxsaWJfZXJyb3JfY29kZXwsIHdoaWNoIGlzCisgKiBvbmUgb2YgdGhlIHZhbHVlcyBkZWZpbmVkIGluIDp0eXBlOmBuZ2h0dHAyX2Vycm9yYC4gIFdoZW4gdGhpcworICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCwgdGhlIGxpYnJhcnkgYXV0b21hdGljYWxseSBzdWJtaXRzCisgKiBlaXRoZXIgUlNUX1NUUkVBTSBvciBHT0FXQVkgZnJhbWUuICBUaGUgfHVzZXJfZGF0YXwgcG9pbnRlciBpcyB0aGUKKyAqIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0bworICogYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBJZiBmcmFtZSBpcyBIRUFERVJTIG9yIFBVU0hfUFJPTUlTRSwgdGhlIGBgbnZhYGAgYW5kIGBgbnZsZW5gYAorICogbWVtYmVyIG9mIHRoZWlyIGRhdGEgc3RydWN0dXJlIGFyZSBhbHdheXMgYGBOVUxMYGAgYW5kIDAKKyAqIHJlc3BlY3RpdmVseS4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSWYgbm9uemVybyBpcyByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBmYXRhbCBlcnJvciBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCBmdW5jdGlvbnMKKyAqIGltbWVkaWF0ZWx5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2spKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsIGludCBsaWJfZXJyb3JfY29kZSwKKyAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGNodW5rIG9mIGRhdGEgaW4gREFUQSBmcmFtZSBpcworICogcmVjZWl2ZWQuICBUaGUgfHN0cmVhbV9pZHwgaXMgdGhlIHN0cmVhbSBJRCB0aGlzIERBVEEgZnJhbWUgYmVsb25ncworICogdG8uICBUaGUgfGZsYWdzfCBpcyB0aGUgZmxhZ3Mgb2YgREFUQSBmcmFtZSB3aGljaCB0aGlzIGRhdGEgY2h1bmsKKyAqIGlzIGNvbnRhaW5lZC4gIGBgKGZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pICE9IDBgYCBkb2VzIG5vdAorICogbmVjZXNzYXJpbHkgbWVhbiB0aGlzIGNodW5rIG9mIGRhdGEgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSBzdHJlYW0uCisgKiBZb3Ugc2hvdWxkIHVzZSA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCB0byBrbm93IGFsbAorICogZGF0YSBmcmFtZXMgYXJlIHJlY2VpdmVkLiAgVGhlIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkCisgKiBhcmd1bWVudCBwYXNzZWQgaW4gdG8gdGhlIGNhbGwgdG8gYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKgorICogSWYgdGhlIGFwcGxpY2F0aW9uIHVzZXMgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCwgaXQgY2FuIHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX1BBVVNFYCB0byBtYWtlIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAKKyAqIHJldHVybiB3aXRob3V0IHByb2Nlc3NpbmcgZnVydGhlciBpbnB1dCBieXRlcy4gIFRoZSBtZW1vcnkgYnkKKyAqIHBvaW50ZWQgYnkgdGhlIHxkYXRhfCBpcyByZXRhaW5lZCB1bnRpbAorICogYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCBvciBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgaXMgY2FsbGVkLgorICogVGhlIGFwcGxpY2F0aW9uIG11c3QgcmV0YWluIHRoZSBpbnB1dCBieXRlcyB3aGljaCB3YXMgdXNlZCB0bworICogcHJvZHVjZSB0aGUgfGRhdGF8IHBhcmFtZXRlciwgYmVjYXVzZSBpdCBtYXkgcmVmZXIgdG8gdGhlIG1lbW9yeQorICogcmVnaW9uIGluY2x1ZGVkIGluIHRoZSBpbnB1dCBieXRlcy4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSWYgbm9uemVybyBpcyByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBmYXRhbCBlcnJvciwgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgZnVuY3Rpb25zCisgKiBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrKClgLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGp1c3QgYmVmb3JlIHRoZSBub24tREFUQSBmcmFtZSB8ZnJhbWV8IGlzCisgKiBzZW50LiAgVGhlIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCBpbiB0bworICogdGhlIGNhbGwgdG8gYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiBpdCBzdWNjZWVkcy4KKyAqIEl0IGNhbiBhbHNvIHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FOQ0VMYCB0byBjYW5jZWwgdGhlCisgKiB0cmFuc21pc3Npb24gb2YgdGhlIGdpdmVuIGZyYW1lLgorICoKKyAqIElmIHRoZXJlIGlzIGEgZmF0YWwgZXJyb3Igd2hpbGUgZXhlY3V0aW5nIHRoaXMgY2FsbGJhY2ssIHRoZQorICogaW1wbGVtZW50YXRpb24gc2hvdWxkIHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAsCisgKiB3aGljaCBtYWtlcyBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKClgIGZ1bmN0aW9ucyBpbW1lZGlhdGVseSByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBJZiB0aGUgb3RoZXIgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IGlzIHRyZWF0ZWQgYXMgaWYKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYCBpcyByZXR1cm5lZC4gIEJ1dCB0aGUKKyAqIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgcmVseSBvbiB0aGlzIHNpbmNlIHRoZSBsaWJyYXJ5IG1heSBkZWZpbmUKKyAqIG5ldyByZXR1cm4gdmFsdWUgdG8gZXh0ZW5kIGl0cyBjYXBhYmlsaXR5LgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGFmdGVyIHRoZSBmcmFtZSB8ZnJhbWV8IGlzIHNlbnQuICBUaGUKKyAqIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0bworICogYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSWYgbm9uemVybyBpcyByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBmYXRhbCBlcnJvciBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCBmdW5jdGlvbnMKKyAqIGltbWVkaWF0ZWx5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrKClgLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBhZnRlciB0aGUgbm9uLURBVEEgZnJhbWUgfGZyYW1lfCBpcyBub3QKKyAqIHNlbnQgYmVjYXVzZSBvZiB0aGUgZXJyb3IuICBUaGUgZXJyb3IgaXMgaW5kaWNhdGVkIGJ5IHRoZQorICogfGxpYl9lcnJvcl9jb2RlfCwgd2hpY2ggaXMgb25lIG9mIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbgorICogOnR5cGU6YG5naHR0cDJfZXJyb3JgLiAgVGhlIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkCisgKiBhcmd1bWVudCBwYXNzZWQgaW4gdG8gdGhlIGNhbGwgdG8gYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiBpdCBzdWNjZWVkcy4KKyAqIElmIG5vbnplcm8gaXMgcmV0dXJuZWQsIGl0IGlzIHRyZWF0ZWQgYXMgZmF0YWwgZXJyb3IgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAgZnVuY3Rpb25zCisgKiBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV91c2VyX2RhdGEoKWAgY2FuIGJlIHVzZWQgdG8gZ2V0CisgKiBhc3NvY2lhdGVkIGRhdGEuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGliX2Vycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBzdHJlYW0gfHN0cmVhbV9pZHwgaXMgY2xvc2VkLgorICogVGhlIHJlYXNvbiBvZiBjbG9zdXJlIGlzIGluZGljYXRlZCBieSB0aGUgfGVycm9yX2NvZGV8LiAgVGhlCisgKiB8ZXJyb3JfY29kZXwgaXMgdXN1YWxseSBvbmUgb2YgOmVudW06YG5naHR0cDJfZXJyb3JfY29kZWAsIGJ1dCB0aGF0CisgKiBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBzdHJlYW1fdXNlcl9kYXRhLCB3aGljaCB3YXMgc3BlY2lmaWVkIGluCisgKiBgbmdodHRwMl9zdWJtaXRfcmVxdWVzdCgpYCBvciBgbmdodHRwMl9zdWJtaXRfaGVhZGVycygpYCwgaXMgc3RpbGwKKyAqIGF2YWlsYWJsZSBpbiB0aGlzIGZ1bmN0aW9uLiAgVGhlIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkCisgKiBhcmd1bWVudCBwYXNzZWQgaW4gdG8gdGhlIGNhbGwgdG8gYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBmb3IgYSBzdHJlYW0gaW4gcmVzZXJ2ZWQgc3RhdGUuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiBpdCBzdWNjZWVkcy4KKyAqIElmIG5vbnplcm8gaXMgcmV0dXJuZWQsIGl0IGlzIHRyZWF0ZWQgYXMgZmF0YWwgZXJyb3IgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAsIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAsCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAsIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKClgCisgKiBmdW5jdGlvbnMgaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX3N0cmVhbV9jbG9zZV9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX3N0cmVhbV9jbG9zZV9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIHJlY2VwdGlvbiBvZiBoZWFkZXIgYmxvY2sgaW4KKyAqIEhFQURFUlMgb3IgUFVTSF9QUk9NSVNFIGlzIHN0YXJ0ZWQuICBFYWNoIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIKKyAqIHdpbGwgYmUgZW1pdHRlZCBieSA6dHlwZTpgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2tgLgorICoKKyAqIFRoZSBgYGZyYW1lLT5oZC5mbGFnc2BgIG1heSBub3QgaGF2ZQorICogOmVudW06YE5HSFRUUDJfRkxBR19FTkRfSEVBREVSU2AgZmxhZyBzZXQsIHdoaWNoIGluZGljYXRlcyB0aGF0IG9uZQorICogb3IgbW9yZSBDT05USU5VQVRJT04gZnJhbWVzIGFyZSBpbnZvbHZlZC4gIEJ1dCB0aGUgYXBwbGljYXRpb24gZG9lcworICogbm90IG5lZWQgdG8gY2FyZSBhYm91dCB0aGF0IGJlY2F1c2UgdGhlIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXJzIGFyZQorICogZW1pdHRlZCB0cmFuc3BhcmVudGx5IHJlZ2FyZGxlc3Mgb2YgQ09OVElOVUFUSU9OIGZyYW1lcy4KKyAqCisgKiBUaGUgc2VydmVyIGFwcGxpY2F0aW9ucyBwcm9iYWJseSBjcmVhdGUgYW4gb2JqZWN0IHRvIHN0b3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCBuZXcgc3RyZWFtIGlmIGBgZnJhbWUtPmhkLnR5cGUgPT0KKyAqIE5HSFRUUDJfSEVBREVSU2BgIGFuZCBgYGZyYW1lLT5oZWFkZXJzLmNhdCA9PQorICogTkdIVFRQMl9IQ0FUX1JFUVVFU1RgYC4gIElmIHxzZXNzaW9ufCBpcyBjb25maWd1cmVkIGFzIHNlcnZlciBzaWRlLAorICogYGBmcmFtZS0+aGVhZGVycy5jYXRgYCBpcyBlaXRoZXIgYGBOR0hUVFAyX0hDQVRfUkVRVUVTVGBgCisgKiBjb250YWluaW5nIHJlcXVlc3QgaGVhZGVycyBvciBgYE5HSFRUUDJfSENBVF9IRUFERVJTYGAgY29udGFpbmluZworICogdHJhaWxlciBmaWVsZHMgYW5kIG5ldmVyIGdldCBQVVNIX1BST01JU0UgaW4gdGhpcyBjYWxsYmFjay4KKyAqCisgKiBGb3IgdGhlIGNsaWVudCBhcHBsaWNhdGlvbnMsIGBgZnJhbWUtPmhkLnR5cGVgYCBpcyBlaXRoZXIKKyAqIGBgTkdIVFRQMl9IRUFERVJTYGAgb3IgYGBOR0hUVFAyX1BVU0hfUFJPTUlTRWBgLiAgSW4gY2FzZSBvZgorICogYGBOR0hUVFAyX0hFQURFUlNgYCwgYGBmcmFtZS0+aGVhZGVycy5jYXQgPT0KKyAqIE5HSFRUUDJfSENBVF9SRVNQT05TRWBgIG1lYW5zIHRoYXQgaXQgaXMgdGhlIGZpcnN0IHJlc3BvbnNlCisgKiBoZWFkZXJzLCBidXQgaXQgbWF5IGJlIG5vbi1maW5hbCByZXNwb25zZSB3aGljaCBpcyBpbmRpY2F0ZWQgYnkgMXh4CisgKiBzdGF0dXMgY29kZS4gIEluIHRoaXMgY2FzZSwgdGhlcmUgbWF5IGJlIHplcm8gb3IgbW9yZSBIRUFERVJTIGZyYW1lCisgKiB3aXRoIGBgZnJhbWUtPmhlYWRlcnMuY2F0ID09IE5HSFRUUDJfSENBVF9IRUFERVJTYGAgd2hpY2ggaGFzCisgKiBub24tZmluYWwgcmVzcG9uc2UgY29kZSBhbmQgZmluYWxseSBjbGllbnQgZ2V0cyBleGFjdGx5IG9uZSBIRUFERVJTCisgKiBmcmFtZSB3aXRoIGBgZnJhbWUtPmhlYWRlcnMuY2F0ID09IE5HSFRUUDJfSENBVF9IRUFERVJTYGAKKyAqIGNvbnRhaW5pbmcgZmluYWwgcmVzcG9uc2UgaGVhZGVycyAobm9uLTF4eCBzdGF0dXMgY29kZSkuICBUaGUKKyAqIHRyYWlsZXIgZmllbGRzIGFsc28gaGFzIGBgZnJhbWUtPmhlYWRlcnMuY2F0ID09CisgKiBOR0hUVFAyX0hDQVRfSEVBREVSU2BgIHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYW55IHN0YXR1cyBjb2RlLgorICoKKyAqIFJldHVybmluZyA6ZW51bTpgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRWAgd2lsbCBjbG9zZQorICogdGhlIHN0cmVhbSAocHJvbWlzZWQgc3RyZWFtIGlmIGZyYW1lIGlzIFBVU0hfUFJPTUlTRSkgYnkgaXNzdWluZworICogUlNUX1NUUkVBTSB3aXRoIDplbnVtOmBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SYC4gIEluIHRoaXMgY2FzZSwKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFja2AgYW5kCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCB3aWxsIG5vdCBiZSBpbnZva2VkLiAgSWYgYQorICogZGlmZmVyZW50IGVycm9yIGNvZGUgaXMgZGVzaXJhYmxlLCB1c2UKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9yc3Rfc3RyZWFtKClgIHdpdGggYSBkZXNpcmVkIGVycm9yIGNvZGUgYW5kIHRoZW4KKyAqIHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRWAuICBBZ2FpbiwgdXNlCisgKiBgYGZyYW1lLT5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkYGAgYXMgc3RyZWFtX2lkIHBhcmFtZXRlcgorICogaW4gYG5naHR0cDJfc3VibWl0X3JzdF9zdHJlYW0oKWAgaWYgZnJhbWUgaXMgUFVTSF9QUk9NSVNFLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMuCisgKiBJdCBjYW4gcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYCB0bworICogcmVzZXQgdGhlIHN0cmVhbSAocHJvbWlzZWQgc3RyZWFtIGlmIGZyYW1lIGlzIFBVU0hfUFJPTUlTRSkuICBGb3IKKyAqIGNyaXRpY2FsIGVycm9ycywgaXQgbXVzdCByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIElmIHRoZSBvdGhlciB2YWx1ZSBpcworICogcmV0dXJuZWQsIGl0IGlzIHRyZWF0ZWQgYXMgaWYgOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgCisgKiBpcyByZXR1cm5lZC4gIElmIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYCBpcyByZXR1cm5lZCwKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgZnVuY3Rpb24gd2lsbCBpbW1lZGlhdGVseSByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBoZWFkZXIgbmFtZS92YWx1ZSBwYWlyIGlzIHJlY2VpdmVkCisgKiBmb3IgdGhlIHxmcmFtZXwuICBUaGUgfG5hbWV8IG9mIGxlbmd0aCB8bmFtZWxlbnwgaXMgaGVhZGVyIG5hbWUuCisgKiBUaGUgfHZhbHVlfCBvZiBsZW5ndGggfHZhbHVlbGVufCBpcyBoZWFkZXIgdmFsdWUuICBUaGUgfGZsYWdzfCBpcworICogYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA6dHlwZTpgbmdodHRwMl9udl9mbGFnYC4KKyAqCisgKiBJZiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0lOREVYYCBpcyBzZXQgaW4gfGZsYWdzfCwgdGhlIHJlY2VpdmVyCisgKiBtdXN0IG5vdCBpbmRleCB0aGlzIG5hbWUvdmFsdWUgcGFpciB3aGVuIGZvcndhcmRpbmcgaXQgdG8gdGhlIG5leHQKKyAqIGhvcC4gIE1vcmUgc3BlY2lmaWNhbGx5LCAiTGl0ZXJhbCBIZWFkZXIgRmllbGQgbmV2ZXIgSW5kZXhlZCIKKyAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgdXNlZCBpbiBIUEFDSyBlbmNvZGluZy4KKyAqCisgKiBXaGVuIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCwgYGBmcmFtZS0+aGQudHlwZWBgIGlzIGVpdGhlcgorICogOmVudW06YE5HSFRUUDJfSEVBREVSU2Agb3IgOmVudW06YE5HSFRUUDJfUFVTSF9QUk9NSVNFYC4gIEFmdGVyIGFsbAorICogaGVhZGVyIG5hbWUvdmFsdWUgcGFpcnMgYXJlIHByb2Nlc3NlZCB3aXRoIHRoaXMgY2FsbGJhY2ssIGFuZCBubworICogZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQsIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgCisgKiB3aWxsIGJlIGludm9rZWQuICBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBkZWNvbXByZXNzaW9uLAorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2AgZm9yIHRoZSB8ZnJhbWV8IHdpbGwgbm90IGJlCisgKiBpbnZva2VkLgorICoKKyAqIEJvdGggfG5hbWV8IGFuZCB8dmFsdWV8IGFyZSBndWFyYW50ZWVkIHRvIGJlIE5VTEwtdGVybWluYXRlZC4gIFRoZQorICogfG5hbWVsZW58IGFuZCB8dmFsdWVsZW58IGRvIG5vdCBpbmNsdWRlIHRlcm1pbmFsIE5VTEwuICBJZgorICogYG5naHR0cDJfb3B0aW9uX3NldF9ub19odHRwX21lc3NhZ2luZygpYCBpcyB1c2VkIHdpdGggbm9uemVybworICogdmFsdWUsIE5VTEwgY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiB8bmFtZXwgb3IgfHZhbHVlfCBiZWZvcmUKKyAqIHRlcm1pbmF0aW5nIE5VTEwuCisgKgorICogUGxlYXNlIG5vdGUgdGhhdCB1bmxlc3MgYG5naHR0cDJfb3B0aW9uX3NldF9ub19odHRwX21lc3NhZ2luZygpYCBpcworICogdXNlZCwgbmdodHRwMiBsaWJyYXJ5IGRvZXMgcGVyZm9ybSB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIHxuYW1lfAorICogYW5kIHRoZSB8dmFsdWV8IHVzaW5nIGBuZ2h0dHAyX2NoZWNrX2hlYWRlcl9uYW1lKClgIGFuZAorICogYG5naHR0cDJfY2hlY2tfaGVhZGVyX3ZhbHVlKClgLiAgSW4gYWRkaXRpb24gdG8gdGhpcywgbmdodHRwMgorICogcGVyZm9ybXMgdmFsaWRhdGlvbiBiYXNlZCBvbiBIVFRQIE1lc3NhZ2luZyBydWxlLCB3aGljaCBpcyBicmllZmx5CisgKiBleHBsYWluZWQgaW4gOnJlZjpgaHR0cC1tZXNzYWdpbmdgIHNlY3Rpb24uCisgKgorICogSWYgdGhlIGFwcGxpY2F0aW9uIHVzZXMgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCwgaXQgY2FuIHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX1BBVVNFYCB0byBtYWtlIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAKKyAqIHJldHVybiB3aXRob3V0IHByb2Nlc3NpbmcgZnVydGhlciBpbnB1dCBieXRlcy4gIFRoZSBtZW1vcnkgcG9pbnRlZAorICogYnkgfGZyYW1lfCwgfG5hbWV8IGFuZCB8dmFsdWV8IHBhcmFtZXRlcnMgYXJlIHJldGFpbmVkIHVudGlsCisgKiBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBpcyBjYWxsZWQuCisgKiBUaGUgYXBwbGljYXRpb24gbXVzdCByZXRhaW4gdGhlIGlucHV0IGJ5dGVzIHdoaWNoIHdhcyB1c2VkIHRvCisgKiBwcm9kdWNlIHRoZXNlIHBhcmFtZXRlcnMsIGJlY2F1c2UgaXQgbWF5IHJlZmVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uCisgKiBpbmNsdWRlZCBpbiB0aGUgaW5wdXQgYnl0ZXMuCisgKgorICogUmV0dXJuaW5nIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYCB3aWxsIGNsb3NlCisgKiB0aGUgc3RyZWFtIChwcm9taXNlZCBzdHJlYW0gaWYgZnJhbWUgaXMgUFVTSF9QUk9NSVNFKSBieSBpc3N1aW5nCisgKiBSU1RfU1RSRUFNIHdpdGggOmVudW06YE5HSFRUUDJfSU5URVJOQUxfRVJST1JgLiAgSW4gdGhpcyBjYXNlLAorICogOnR5cGU6YG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrYCBhbmQKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgIHdpbGwgbm90IGJlIGludm9rZWQuICBJZiBhCisgKiBkaWZmZXJlbnQgZXJyb3IgY29kZSBpcyBkZXNpcmFibGUsIHVzZQorICogYG5naHR0cDJfc3VibWl0X3JzdF9zdHJlYW0oKWAgd2l0aCBhIGRlc2lyZWQgZXJyb3IgY29kZSBhbmQgdGhlbgorICogcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYC4gIEFnYWluLCB1c2UKKyAqIGBgZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWRgYCBhcyBzdHJlYW1faWQgcGFyYW1ldGVyCisgKiBpbiBgbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbSgpYCBpZiBmcmFtZSBpcyBQVVNIX1BST01JU0UuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiBpdCBzdWNjZWVkcy4KKyAqIEl0IG1heSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX1BBVVNFYCBvcgorICogOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgLiAgRm9yIG90aGVyIGNyaXRpY2FsCisgKiBmYWlsdXJlcywgaXQgbXVzdCByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSWYKKyAqIHRoZSBvdGhlciBub256ZXJvIHZhbHVlIGlzIHJldHVybmVkLCBpdCBpcyB0cmVhdGVkIGFzCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJZgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgIGlzIHJldHVybmVkLAorICogYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2hlYWRlcl9jYWxsYmFjaygpYC4KKyAqCisgKiAuLiB3YXJuaW5nOjoKKyAqCisgKiAgIEFwcGxpY2F0aW9uIHNob3VsZCBwcm9wZXJseSBsaW1pdCB0aGUgdG90YWwgYnVmZmVyIHNpemUgdG8gc3RvcmUKKyAqICAgaW5jb21pbmcgaGVhZGVyIGZpZWxkcy4gIFdpdGhvdXQgaXQsIHBlZXIgbWF5IHNlbmQgbGFyZ2UgbnVtYmVyCisgKiAgIG9mIGhlYWRlciBmaWVsZHMgb3IgbGFyZ2UgaGVhZGVyIGZpZWxkcyB0byBjYXVzZSBvdXQgb2YgbWVtb3J5IGluCisgKiAgIGxvY2FsIGVuZHBvaW50LiAgRHVlIHRvIGhvdyBIUEFDSyB3b3JrcywgcGVlciBjYW4gZG8gdGhpcworICogICBlZmZlY3RpdmVseSB3aXRob3V0IHVzaW5nIG11Y2ggbWVtb3J5IG9uIHRoZWlyIG93bi4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnZhbHVlLCBzaXplX3QgdmFsdWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIgaXMgcmVjZWl2ZWQKKyAqIGZvciB0aGUgfGZyYW1lfC4gIFRoZSB8bmFtZXwgaXMgaGVhZGVyIG5hbWUuICBUaGUgfHZhbHVlfCBpcyBoZWFkZXIKKyAqIHZhbHVlLiAgVGhlIHxmbGFnc3wgaXMgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICogOnR5cGU6YG5naHR0cDJfbnZfZmxhZ2AuCisgKgorICogVGhpcyBjYWxsYmFjayBiZWhhdmVzIGxpa2UgOnR5cGU6YG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrYCwKKyAqIGV4Y2VwdCB0aGF0IHxuYW1lfCBhbmQgfHZhbHVlfCBhcmUgc3RvcmVkIGluIHJlZmVyZW5jZSBjb3VudGVkCisgKiBidWZmZXIuICBJZiBhcHBsaWNhdGlvbiB3aXNoZXMgdG8ga2VlcCB0aGVzZSByZWZlcmVuY2VzIHdpdGhvdXQKKyAqIGNvcHlpbmcgdGhlbSwgdXNlIGBuZ2h0dHAyX3JjYnVmX2luY3JlZigpYCB0byBpbmNyZW1lbnQgdGhlaXIKKyAqIHJlZmVyZW5jZSBjb3VudC4gIEl0IGlzIHRoZSBhcHBsaWNhdGlvbidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGwKKyAqIGBuZ2h0dHAyX3JjYnVmX2RlY3JlZigpYCBpZiB0aGV5IGNhbGxlZCBgbmdodHRwMl9yY2J1Zl9pbmNyZWYoKWAgc28KKyAqIGFzIG5vdCB0byBsZWFrIG1lbW9yeS4gIElmIHRoZSB8c2Vzc2lvbnwgaXMgY3JlYXRlZCBieQorICogYG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3MygpYCBvciBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXczKClgLAorICogdGhlIGZ1bmN0aW9uIHRvIGZyZWUgbWVtb3J5IGlzIHRoZSBvbmUgYmVsb25ncyB0byB0aGUgbWVtCisgKiBwYXJhbWV0ZXIuICBBcyBsb25nIGFzIHRoaXMgZnJlZSBmdW5jdGlvbiBhbGl2ZXMsIHxuYW1lfCBhbmQKKyAqIHx2YWx1ZXwgY2FuIGxpdmUgYWZ0ZXIgfHNlc3Npb258IHdhcyBkZXN0cm95ZWQuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2syKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9yY2J1ZiAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3JjYnVmICp2YWx1ZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGludmFsaWQgaGVhZGVyIG5hbWUvdmFsdWUgcGFpciBpcworICogcmVjZWl2ZWQgZm9yIHRoZSB8ZnJhbWV8LgorICoKKyAqIFRoZSBwYXJhbWV0ZXIgYW5kIGJlaGF2aW91ciBhcmUgc2ltaWxhciB0bworICogOnR5cGU6YG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrYC4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcworICogY2FsbGJhY2sgaXMgb25seSBpbnZva2VkIHdoZW4gYSBpbnZhbGlkIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIgaXMKKyAqIHJlY2VpdmVkIHdoaWNoIGlzIHRyZWF0ZWQgYXMgc3RyZWFtIGVycm9yIGlmIHRoaXMgY2FsbGJhY2sgaXMgbm90CisgKiBzZXQuICBPbmx5IGludmFsaWQgcmVndWxhciBoZWFkZXIgZmllbGQgYXJlIHBhc3NlZCB0byB0aGlzCisgKiBjYWxsYmFjay4gIEluIG90aGVyIHdvcmRzLCBpbnZhbGlkIHBzZXVkbyBoZWFkZXIgZmllbGQgaXMgbm90CisgKiBwYXNzZWQgdG8gdGhpcyBjYWxsYmFjay4gIEFsc28gaGVhZGVyIGZpZWxkcyB3aGljaCBpbmNsdWRlcyB1cHBlcgorICogY2FzZWQgbGF0dGVyIGFyZSBhbHNvIHRyZWF0ZWQgYXMgZXJyb3Igd2l0aG91dCBwYXNzaW5nIHRoZW0gdG8gdGhpcworICogY2FsbGJhY2suCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBvbmx5IGNvbnNpZGVyZWQgaWYgSFRUUCBtZXNzYWdpbmcgdmFsaWRhdGlvbiBpcworICogdHVybmVkIG9uICh3aGljaCBpcyBvbiBieSBkZWZhdWx0LCBzZWUKKyAqIGBuZ2h0dHAyX29wdGlvbl9zZXRfbm9faHR0cF9tZXNzYWdpbmcoKWApLgorICoKKyAqIFdpdGggdGhpcyBjYWxsYmFjaywgYXBwbGljYXRpb24gaW5zcGVjdHMgdGhlIGluY29taW5nIGludmFsaWQKKyAqIGZpZWxkLCBhbmQgaXQgYWxzbyBjYW4gcmVzZXQgc3RyZWFtIGZyb20gdGhpcyBjYWxsYmFjayBieSByZXR1cm5pbmcKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYC4gIEJ5IGRlZmF1bHQsIHRoZQorICogZXJyb3IgY29kZSBpcyA6ZW51bTpgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUmAuICBUbyBjaGFuZ2UgdGhlIGVycm9yCisgKiBjb2RlLCBjYWxsIGBuZ2h0dHAyX3N1Ym1pdF9yc3Rfc3RyZWFtKClgIHdpdGggdGhlIGVycm9yIGNvZGUgb2YKKyAqIGNob2ljZSBpbiBhZGRpdGlvbiB0byByZXR1cm5pbmcKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBJZiAwIGlzIHJldHVybmVkLCB0aGUgaGVhZGVyIGZpZWxkIGlzIGlnbm9yZWQsIGFuZCB0aGUgc3RyZWFtIGlzCisgKiBub3QgcmVzZXQuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjaykoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwgY29uc3QgdWludDhfdCAqbmFtZSwKKyAgICBzaXplX3QgbmFtZWxlbiwgY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbiwgdWludDhfdCBmbGFncywKKyAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGludmFsaWQgaGVhZGVyIG5hbWUvdmFsdWUgcGFpciBpcworICogcmVjZWl2ZWQgZm9yIHRoZSB8ZnJhbWV8LgorICoKKyAqIFRoZSBwYXJhbWV0ZXIgYW5kIGJlaGF2aW91ciBhcmUgc2ltaWxhciB0bworICogOnR5cGU6YG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrMmAuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHRoaXMKKyAqIGNhbGxiYWNrIGlzIG9ubHkgaW52b2tlZCB3aGVuIGEgaW52YWxpZCBoZWFkZXIgbmFtZS92YWx1ZSBwYWlyIGlzCisgKiByZWNlaXZlZCB3aGljaCBpcyBzaWxlbnRseSBpZ25vcmVkIGlmIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIE9ubHkgaW52YWxpZCByZWd1bGFyIGhlYWRlciBmaWVsZCBhcmUgcGFzc2VkIHRvIHRoaXMgY2FsbGJhY2suICBJbgorICogb3RoZXIgd29yZHMsIGludmFsaWQgcHNldWRvIGhlYWRlciBmaWVsZCBpcyBub3QgcGFzc2VkIHRvIHRoaXMKKyAqIGNhbGxiYWNrLiAgQWxzbyBoZWFkZXIgZmllbGRzIHdoaWNoIGluY2x1ZGVzIHVwcGVyIGNhc2VkIGxhdHRlciBhcmUKKyAqIGFsc28gdHJlYXRlZCBhcyBlcnJvciB3aXRob3V0IHBhc3NpbmcgdGhlbSB0byB0aGlzIGNhbGxiYWNrLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgb25seSBjb25zaWRlcmVkIGlmIEhUVFAgbWVzc2FnaW5nIHZhbGlkYXRpb24gaXMKKyAqIHR1cm5lZCBvbiAod2hpY2ggaXMgb24gYnkgZGVmYXVsdCwgc2VlCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X25vX2h0dHBfbWVzc2FnaW5nKClgKS4KKyAqCisgKiBXaXRoIHRoaXMgY2FsbGJhY2ssIGFwcGxpY2F0aW9uIGluc3BlY3RzIHRoZSBpbmNvbWluZyBpbnZhbGlkCisgKiBmaWVsZCwgYW5kIGl0IGFsc28gY2FuIHJlc2V0IHN0cmVhbSBmcm9tIHRoaXMgY2FsbGJhY2sgYnkgcmV0dXJuaW5nCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRWAuICBCeSBkZWZhdWx0LCB0aGUKKyAqIGVycm9yIGNvZGUgaXMgOmVudW06YE5HSFRUUDJfSU5URVJOQUxfRVJST1JgLiAgVG8gY2hhbmdlIHRoZSBlcnJvcgorICogY29kZSwgY2FsbCBgbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbSgpYCB3aXRoIHRoZSBlcnJvciBjb2RlIG9mCisgKiBjaG9pY2UgaW4gYWRkaXRpb24gdG8gcmV0dXJuaW5nCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIpKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsIG5naHR0cDJfcmNidWYgKm5hbWUsCisgICAgbmdodHRwMl9yY2J1ZiAqdmFsdWUsIHVpbnQ4X3QgZmxhZ3MsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBsaWJyYXJ5IGFza3MgYXBwbGljYXRpb24gaG93CisgKiBtYW55IHBhZGRpbmcgYnl0ZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZQorICogfGZyYW1lfC4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGNob29zZSB0aGUgdG90YWwgbGVuZ3RoIG9mIHBheWxvYWQKKyAqIGluY2x1ZGluZyBwYWRkZWQgYnl0ZXMgaW4gcmFuZ2UgW2ZyYW1lLT5oZC5sZW5ndGgsIG1heF9wYXlsb2FkbGVuXSwKKyAqIGluY2x1c2l2ZS4gIENob29zaW5nIG51bWJlciBub3QgaW4gdGhpcyByYW5nZSB3aWxsIGJlIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIFJldHVybmluZworICogYGBmcmFtZS0+aGQubGVuZ3RoYGAgbWVhbnMgbm8gcGFkZGluZyBpcyBhZGRlZC4gIFJldHVybmluZworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgIHdpbGwgbWFrZQorICogYG5naHR0cDJfc2Vzc2lvbl9zZW5kKClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X3NlbGVjdF9wYWRkaW5nX2NhbGxiYWNrKClgLgorICovCit0eXBlZGVmIHNzaXplX3QgKCpuZ2h0dHAyX3NlbGVjdF9wYWRkaW5nX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfcGF5bG9hZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGxpYnJhcnkgd2FudHMgdG8gZ2V0IG1heCBsZW5ndGggb2YKKyAqIGRhdGEgdG8gc2VuZCBkYXRhIHRvIHRoZSByZW1vdGUgcGVlci4gIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzCisgKiBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIGZvbGxvd2luZyByYW5nZS4gIFsxLAorICogbWluKHxzZXNzaW9uX3JlbW90ZV93aW5kb3dfc2l6ZXwsIHxzdHJlYW1fcmVtb3RlX3dpbmRvd19zaXplfCwKKyAqIHxyZW1vdGVfbWF4X2ZyYW1lX3NpemV8KV0uICBJZiBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB0aGlzIHJhbmdlIGlzCisgKiByZXR1cm5lZCB0aGFuIHRoZSBtYXggYWxsb3cgdmFsdWUgd2lsbCBiZSB1c2VkLiAgUmV0dXJuaW5nIGEgdmFsdWUKKyAqIHNtYWxsZXIgdGhhbiB0aGlzIHJhbmdlIGlzIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIFRoZSB8ZnJhbWVfdHlwZXwgaXMgcHJvdmlkZWQKKyAqIGZvciBmdXR1cmUgZXh0ZW5zaWJpbGl0eSBhbmQgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBmcmFtZSAoc2VlCisgKiA6dHlwZTpgbmdodHRwMl9mcmFtZV90eXBlYCkgZm9yIHdoaWNoIHRvIGdldCB0aGUgbGVuZ3RoIGZvci4KKyAqIEN1cnJlbnRseSBzdXBwb3J0ZWQgZnJhbWUgdHlwZXMgYXJlOiA6ZW51bTpgTkdIVFRQMl9EQVRBYC4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGxlbmd0aCBpbiBieXRlcyBmb3Igd2hpY2gKKyAqIDp0eXBlOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgIGlzIGFsbG93ZWQgdG8gc2VuZCB0byB0aGUKKyAqIHJlbW90ZSBlbmRwb2ludC4gIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuICBSZXR1cm5pbmcKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYCB3aWxsIHNpZ25hbCB0aGUgZW50aXJlIHNlc3Npb24KKyAqIGZhaWx1cmUuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9kYXRhX3NvdXJjZV9yZWFkX2xlbmd0aF9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBzc2l6ZV90ICgqbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2xlbmd0aF9jYWxsYmFjaykoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZyYW1lX3R5cGUsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgIGludDMyX3Qgc2Vzc2lvbl9yZW1vdGVfd2luZG93X3NpemUsIGludDMyX3Qgc3RyZWFtX3JlbW90ZV93aW5kb3dfc2l6ZSwKKyAgICB1aW50MzJfdCByZW1vdGVfbWF4X2ZyYW1lX3NpemUsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgZnJhbWUgaGVhZGVyIGlzIHJlY2VpdmVkLiAgVGhlCisgKiB8aGR8IHBvaW50cyB0byByZWNlaXZlZCBmcmFtZSBoZWFkZXIuCisgKgorICogVW5saWtlIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgLCB0aGlzIGNhbGxiYWNrIHdpbGwKKyAqIGFsc28gYmUgY2FsbGVkIHdoZW4gZnJhbWUgaGVhZGVyIG9mIENPTlRJTlVBVElPTiBmcmFtZSBpcyByZWNlaXZlZC4KKyAqCisgKiBJZiBib3RoIDp0eXBlOmBuZ2h0dHAyX29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrYCBhbmQKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2tgIGFyZSBzZXQgYW5kIEhFQURFUlMgb3IKKyAqIFBVU0hfUFJPTUlTRSBpcyByZWNlaXZlZCwgOnR5cGU6YG5naHR0cDJfb25fYmVnaW5fZnJhbWVfY2FsbGJhY2tgCisgKiB3aWxsIGJlIGNhbGxlZCBmaXJzdC4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSWYgbm9uemVybyB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBmYXRhbCBlcnJvciBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCBmdW5jdGlvbnMKKyAqIGltbWVkaWF0ZWx5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9iZWdpbl9mcmFtZV9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZnJhbWVfaGQgKmhkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBjaHVuayBvZiBleHRlbnNpb24gZnJhbWUgcGF5bG9hZCBpcworICogcmVjZWl2ZWQuICBUaGUgfGhkfCBwb2ludHMgdG8gZnJhbWUgaGVhZGVyLiAgVGhlIHJlY2VpdmVkCisgKiBjaHVuayBpcyB8ZGF0YXwgb2YgbGVuZ3RoIHxsZW58LgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMuCisgKgorICogVG8gYWJvcnQgcHJvY2Vzc2luZyB0aGlzIGV4dGVuc2lvbiBmcmFtZSwgcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FOQ0VMYC4KKyAqCisgKiBJZiBmYXRhbCBlcnJvciBvY2N1cnJlZCwgYXBwbGljYXRpb24gc2hvdWxkIHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSW4gdGhpcyBjYXNlLAorICogYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIElmIHRoZQorICogb3RoZXIgdmFsdWVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IHRoZXkgYXJlIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrKSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGNvbnN0IG5naHR0cDJfZnJhbWVfaGQgKmhkLCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgIHNpemVfdCBsZW4sIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGxpYnJhcnkgYXNrcyB0aGUgYXBwbGljYXRpb24gdG8KKyAqIHVucGFjayBleHRlbnNpb24gcGF5bG9hZCBmcm9tIGl0cyB3aXJlIGZvcm1hdC4gIFRoZSBleHRlbnNpb24KKyAqIHBheWxvYWQgaGFzIGJlZW4gcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiB1c2luZworICogOnR5cGU6YG5naHR0cDJfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2tgLiAgVGhlIGZyYW1lIGhlYWRlcgorICogaXMgYWxyZWFkeSB1bnBhY2tlZCBieSB0aGUgbGlicmFyeSBhbmQgcHJvdmlkZWQgYXMgfGhkfC4KKyAqCisgKiBUbyByZWNlaXZlIGV4dGVuc2lvbiBmcmFtZXMsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHRlbGwgZGVzaXJlZAorICogZXh0ZW5zaW9uIGZyYW1lIHR5cGUgdG8gdGhlIGxpYnJhcnkgdXNpbmcKKyAqIGBuZ2h0dHAyX29wdGlvbl9zZXRfdXNlcl9yZWN2X2V4dGVuc2lvbl90eXBlKClgLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG1heSBzdG9yZSB0aGUgcG9pbnRlciB0byB0aGUKKyAqIGNyZWF0ZWQgb2JqZWN0IGFzIGEgcmVzdWx0IG9mIHVucGFja2luZyBpbiB8KnBheWxvYWR8LCBhbmQgcmV0dXJucworICogMC4gIFRoZSBwb2ludGVyIHN0b3JlZCBpbiB8KnBheWxvYWR8IGlzIG9wYXF1ZSB0byB0aGUgbGlicmFyeSwgYW5kCisgKiB0aGUgbGlicmFyeSBkb2VzIG5vdCBvd24gaXRzIHBvaW50ZXIuICB8KnBheWxvYWR8IGlzIGluaXRpYWxpemVkIGFzCisgKiBgYE5VTExgYC4gIFRoZSB8KnBheWxvYWR8IGlzIGF2YWlsYWJsZSBhcyBgYGZyYW1lLT5leHQucGF5bG9hZGBgIGluCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYC4gIFRoZXJlZm9yZSBpZiBhcHBsaWNhdGlvbgorICogY2FuIGZyZWUgdGhhdCBtZW1vcnkgaW5zaWRlIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgCisgKiBjYWxsYmFjay4gIE9mIGNvdXJzZSwgYXBwbGljYXRpb24gaGFzIGEgbGliZXJ0eSBub3Qgb3QgdXNlCisgKiB8KnBheWxvYWR8LCBhbmQgZG8gaXRzIG93biBtZWNoYW5pc20gdG8gcHJvY2VzcyBleHRlbnNpb24gZnJhbWVzLgorICoKKyAqIFRvIGFib3J0IHByb2Nlc3NpbmcgdGhpcyBleHRlbnNpb24gZnJhbWUsIHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTkNFTGAuCisgKgorICogSWYgZmF0YWwgZXJyb3Igb2NjdXJyZWQsIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIEluIHRoaXMgY2FzZSwKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCBmdW5jdGlvbnMKKyAqIGltbWVkaWF0ZWx5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJZiB0aGUKKyAqIG90aGVyIHZhbHVlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSB0aGV5IGFyZSB0cmVhdGVkIGFzCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZV9oZCAqaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gbGlicmFyeSBhc2tzIHRoZSBhcHBsaWNhdGlvbiB0byBwYWNrCisgKiBleHRlbnNpb24gcGF5bG9hZCBpbiBpdHMgd2lyZSBmb3JtYXQuICBUaGUgZnJhbWUgaGVhZGVyIHdpbGwgYmUKKyAqIHBhY2tlZCBieSBsaWJyYXJ5LiAgQXBwbGljYXRpb24gbXVzdCBwYWNrIHBheWxvYWQgb25seS4KKyAqIGBgZnJhbWUtPmV4dC5wYXlsb2FkYGAgaXMgdGhlIG9iamVjdCBwYXNzZWQgdG8KKyAqIGBuZ2h0dHAyX3N1Ym1pdF9leHRlbnNpb24oKWAgYXMgcGF5bG9hZCBwYXJhbWV0ZXIuICBBcHBsaWNhdGlvbgorICogbXVzdCBwYWNrIGV4dGVuc2lvbiBwYXlsb2FkIHRvIHRoZSB8YnVmfCBvZiBpdHMgY2FwYWNpdHkgfGxlbnwKKyAqIGJ5dGVzLiAgVGhlIHxsZW58IGlzIGF0IGxlYXN0IDE2S2lCLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZgorICogYnl0ZXMgd3JpdHRlbiBpbnRvIHxidWZ8IHdoZW4gaXQgc3VjY2VlZHMuCisgKgorICogVG8gYWJvcnQgcHJvY2Vzc2luZyB0aGlzIGV4dGVuc2lvbiBmcmFtZSwgcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FOQ0VMYCwgYW5kCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2Agd2lsbCBiZSBpbnZva2VkLgorICoKKyAqIElmIGZhdGFsIGVycm9yIG9jY3VycmVkLCBhcHBsaWNhdGlvbiBzaG91bGQgcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJbiB0aGlzIGNhc2UsCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAgZnVuY3Rpb25zCisgKiBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSWYgdGhlCisgKiBvdGhlciB2YWx1ZXMgYXJlIHJldHVybmVkLCBjdXJyZW50bHkgdGhleSBhcmUgdHJlYXRlZCBhcworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcworICogc3RyaWN0bHkgbGFyZ2VyIHRoYW4gfGxlbnwsIGl0IGlzIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqLwordHlwZWRlZiBzc2l6ZV90ICgqbmdodHRwMl9wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBsaWJyYXJ5IHByb3ZpZGVzIHRoZSBlcnJvciBtZXNzYWdlCisgKiBpbnRlbmRlZCBmb3IgaHVtYW4gY29uc3VtcHRpb24uICBUaGlzIGNhbGxiYWNrIGlzIHNvbGVseSBmb3IKKyAqIGRlYnVnZ2luZyBwdXJwb3NlLiAgVGhlIHxtc2d8IGlzIHR5cGljYWxseSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nCisgKiBvZiBsZW5ndGggfGxlbnwuICB8bGVufCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzZW50aW5lbCBOVUxMCisgKiBjaGFyYWN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiAgVGhlIG5ldyBhcHBsaWNhdGlvbiBzaG91bGQgdXNlCisgKiA6dHlwZTpgbmdodHRwMl9lcnJvcl9jYWxsYmFjazJgLgorICoKKyAqIFRoZSBmb3JtYXQgb2YgZXJyb3IgbWVzc2FnZSBtYXkgY2hhbmdlIGJldHdlZW4gbmdodHRwMiBsaWJyYXJ5CisgKiB2ZXJzaW9ucy4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGRlcGVuZCBvbiB0aGUgcGFydGljdWxhcgorICogZm9ybWF0LgorICoKKyAqIE5vcm1hbGx5LCBhcHBsaWNhdGlvbiBzaG91bGQgcmV0dXJuIDAgZnJvbSB0aGlzIGNhbGxiYWNrLiAgSWYgZmF0YWwKKyAqIGVycm9yIG9jY3VycmVkIHdoaWxlIGRvaW5nIHNvbWV0aGluZyBpbiB0aGlzIGNhbGxiYWNrLCBhcHBsaWNhdGlvbgorICogc2hvdWxkIHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJbiB0aGlzIGNhc2UsCisgKiBsaWJyYXJ5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggcmV0dXJuIHZhbHVlCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBDdXJyZW50bHksIGlmIG5vbnplcm8gdmFsdWUKKyAqIGlzIHJldHVybmVkIGZyb20gdGhpcyBjYWxsYmFjaywgdGhleSBhcmUgdHJlYXRlZCBhcworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLCBidXQgYXBwbGljYXRpb24gc2hvdWxkIG5vdAorICogcmVseSBvbiB0aGlzIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9lcnJvcl9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGxpYnJhcnkgcHJvdmlkZXMgdGhlIGVycm9yIGNvZGUsIGFuZAorICogbWVzc2FnZS4gIFRoaXMgY2FsbGJhY2sgaXMgc29sZWx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KKyAqIHxsaWJfZXJyb3JfY29kZXwgaXMgb25lIG9mIGVycm9yIGNvZGUgZGVmaW5lZCBpbgorICogOmVudW06YG5naHR0cDJfZXJyb3JgLiAgVGhlIHxtc2d8IGlzIHR5cGljYWxseSBOVUxMLXRlcm1pbmF0ZWQKKyAqIHN0cmluZyBvZiBsZW5ndGggfGxlbnwsIGFuZCBpbnRlbmRlZCBmb3IgaHVtYW4gY29uc3VtcHRpb24uICB8bGVufAorICogZG9lcyBub3QgaW5jbHVkZSB0aGUgc2VudGluZWwgTlVMTCBjaGFyYWN0ZXIuCisgKgorICogVGhlIGZvcm1hdCBvZiBlcnJvciBtZXNzYWdlIG1heSBjaGFuZ2UgYmV0d2VlbiBuZ2h0dHAyIGxpYnJhcnkKKyAqIHZlcnNpb25zLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgZGVwZW5kIG9uIHRoZSBwYXJ0aWN1bGFyCisgKiBmb3JtYXQuCisgKgorICogTm9ybWFsbHksIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4gMCBmcm9tIHRoaXMgY2FsbGJhY2suICBJZiBmYXRhbAorICogZXJyb3Igb2NjdXJyZWQgd2hpbGUgZG9pbmcgc29tZXRoaW5nIGluIHRoaXMgY2FsbGJhY2ssIGFwcGxpY2F0aW9uCisgKiBzaG91bGQgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIEluIHRoaXMgY2FzZSwKKyAqIGxpYnJhcnkgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCByZXR1cm4gdmFsdWUKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIEN1cnJlbnRseSwgaWYgbm9uemVybyB2YWx1ZQorICogaXMgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGxiYWNrLCB0aGV5IGFyZSB0cmVhdGVkIGFzCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAsIGJ1dCBhcHBsaWNhdGlvbiBzaG91bGQgbm90CisgKiByZWx5IG9uIHRoaXMgZGV0YWlscy4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrMikobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlLCBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCB2b2lkICp1c2VyX2RhdGEpOworCitzdHJ1Y3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrczsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZvciA6dHlwZTpgbmdodHRwMl9zZXNzaW9uYC4gIFRoZSBkZXRhaWxzIG9mCisgKiB0aGlzIHN0cnVjdHVyZSBhcmUgaW50ZW50aW9uYWxseSBoaWRkZW4gZnJvbSB0aGUgcHVibGljIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluaXRpYWxpemVzIHwqY2FsbGJhY2tzX3B0cnwgd2l0aCBOVUxMIHZhbHVlcy4KKyAqCisgKiBUaGUgaW5pdGlhbGl6ZWQgb2JqZWN0IGNhbiBiZSB1c2VkIHdoZW4gaW5pdGlhbGl6aW5nIG11bHRpcGxlCisgKiA6dHlwZTpgbmdodHRwMl9zZXNzaW9uYCBvYmplY3RzLgorICoKKyAqIFdoZW4gdGhlIGFwcGxpY2F0aW9uIGZpbmlzaGVkIHVzaW5nIHRoaXMgb2JqZWN0LCBpdCBjYW4gdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19kZWwoKWAgdG8gZnJlZSBpdHMgbWVtb3J5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19uZXcobmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqKmNhbGxiYWNrc19wdHIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEZyZWVzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB8Y2FsbGJhY2tzfC4gIElmIHxjYWxsYmFja3N8IGlzCisgKiBgYE5VTExgYCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NfZGVsKG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcyk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBzZXNzaW9uIHdhbnRzIHRvIHNlbmQgZGF0YSB0bworICogdGhlIHJlbW90ZSBwZWVyLiAgVGhpcyBjYWxsYmFjayBpcyBub3QgbmVjZXNzYXJ5IGlmIHRoZSBhcHBsaWNhdGlvbgorICogdXNlcyBzb2xlbHkgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCB0byBzZXJpYWxpemUgZGF0YSB0bworICogdHJhbnNtaXQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfc2VuZF9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsIG5naHR0cDJfc2VuZF9jYWxsYmFjayBzZW5kX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgYSBzZXNzaW9uIHdhbnRzIHRvIHJlY2VpdmUKKyAqIGRhdGEgZnJvbSB0aGUgcmVtb3RlIHBlZXIuICBUaGlzIGNhbGxiYWNrIGlzIG5vdCBuZWNlc3NhcnkgaWYgdGhlCisgKiBhcHBsaWNhdGlvbiB1c2VzIHNvbGVseSBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIHRvIHByb2Nlc3MKKyAqIHJlY2VpdmVkIGRhdGEuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfcmVjdl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsIG5naHR0cDJfcmVjdl9jYWxsYmFjayByZWN2X2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYnkgYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCB3aGVuIGEgZnJhbWUgaXMgcmVjZWl2ZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZnJhbWVfcmVjdl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrIG9uX2ZyYW1lX3JlY3ZfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBieSBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIHdoZW4gYW4gaW52YWxpZCBub24tREFUQSBmcmFtZSBpcworICogcmVjZWl2ZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2sgb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGNodW5rIG9mIGRhdGEgaW4gREFUQSBmcmFtZQorICogaXMgcmVjZWl2ZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjayBvbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBiZWZvcmUgYSBub24tREFUQSBmcmFtZSBpcyBzZW50LgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrIGJlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgYSBmcmFtZSBpcyBzZW50LgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ZyYW1lX3NlbmRfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFjayBvbl9mcmFtZV9zZW5kX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIG5vbi1EQVRBIGZyYW1lIGlzIG5vdCBzZW50CisgKiBiZWNhdXNlIG9mIGFuIGVycm9yLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrIG9uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrIG9uX3N0cmVhbV9jbG9zZV9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIHJlY2VwdGlvbiBvZiBoZWFkZXIgYmxvY2sKKyAqIGluIEhFQURFUlMgb3IgUFVTSF9QUk9NSVNFIGlzIHN0YXJ0ZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fYmVnaW5faGVhZGVyc19jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrIG9uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaGVhZGVyIG5hbWUvdmFsdWUgcGFpciBpcworICogcmVjZWl2ZWQuICBJZiBib3RoCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrKClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2hlYWRlcl9jYWxsYmFjazIoKWAgYXJlIHVzZWQgdG8KKyAqIHNldCBjYWxsYmFja3MsIHRoZSBsYXR0ZXIgaGFzIHRoZSBwcmVjZWRlbmNlLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2hlYWRlcl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2sgb25faGVhZGVyX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIgaXMKKyAqIHJlY2VpdmVkLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2hlYWRlcl9jYWxsYmFjazIoCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrMiBvbl9oZWFkZXJfY2FsbGJhY2syKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGludmFsaWQgaGVhZGVyIG5hbWUvdmFsdWUKKyAqIHBhaXIgaXMgcmVjZWl2ZWQuICBJZiBib3RoCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2soKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syKClgIGFyZQorICogdXNlZCB0byBzZXQgY2FsbGJhY2tzLCB0aGUgbGF0dGVyIHRha2VzIHRoZSBwcmVjZWRlbmNlLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrIG9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGludmFsaWQgaGVhZGVyIG5hbWUvdmFsdWUKKyAqIHBhaXIgaXMgcmVjZWl2ZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMiBvbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBsaWJyYXJ5IGFza3MgYXBwbGljYXRpb24KKyAqIGhvdyBtYW55IHBhZGRpbmcgYnl0ZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZQorICogZ2l2ZW4gZnJhbWUuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2sgc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gZGV0ZXJtaW5lIHRoZSBsZW5ndGggYWxsb3dlZCBpbgorICogOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2RhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrIGRhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGZyYW1lIGhlYWRlciBpcyByZWNlaXZlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9iZWdpbl9mcmFtZV9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9iZWdpbl9mcmFtZV9jYWxsYmFjayBvbl9iZWdpbl9mcmFtZV9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4KKyAqIDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19OT19DT1BZYCBpcyB1c2VkIGluCisgKiA6dHlwZTpgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrYCB0byBhdm9pZCBkYXRhIGNvcHkuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfc2VuZF9kYXRhX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX3NlbmRfZGF0YV9jYWxsYmFjayBzZW5kX2RhdGFfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBsaWJyYXJ5IGFza3MgdGhlCisgKiBhcHBsaWNhdGlvbiB0byBwYWNrIGV4dGVuc2lvbiBmcmFtZSBwYXlsb2FkIGluIHdpcmUgZm9ybWF0LgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X3BhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX3BhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrIHBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgbGlicmFyeSBhc2tzIHRoZQorICogYXBwbGljYXRpb24gdG8gdW5wYWNrIGV4dGVuc2lvbiBmcmFtZSBwYXlsb2FkIGZyb20gd2lyZSBmb3JtYXQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfdW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrIHVucGFja19leHRlbnNpb25fY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGNodW5rIG9mIGV4dGVuc2lvbiBmcmFtZQorICogcGF5bG9hZCBpcyByZWNlaXZlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2sgb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGxpYnJhcnkgdGVsbHMgZXJyb3IgbWVzc2FnZSB0bworICogdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gIFRoZSBuZXcgYXBwbGljYXRpb24gc2hvdWxkIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrMigpYC4KKyAqCisgKiBJZiBib3RoIDp0eXBlOmBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrYCBhbmQKKyAqIDp0eXBlOmBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrMmAgYXJlIHNldCwgdGhlIGxhdHRlciB0YWtlcworICogcHJlY2VkZW5jZS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9lcnJvcl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsIG5naHR0cDJfZXJyb3JfY2FsbGJhY2sgZXJyb3JfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGxpYnJhcnkgdGVsbHMgZXJyb3IgY29kZSwgYW5kCisgKiBtZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAqCisgKiBJZiBib3RoIDp0eXBlOmBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrYCBhbmQKKyAqIDp0eXBlOmBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrMmAgYXJlIHNldCwgdGhlIGxhdHRlciB0YWtlcworICogcHJlY2VkZW5jZS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9lcnJvcl9jYWxsYmFjazIoCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLCBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrMiBlcnJvcl9jYWxsYmFjazIpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIEN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yIHRvIHJlcGxhY2UgbWFsbG9jKCkuICBUaGUgfG1lbV91c2VyX2RhdGF8CisgKiBpcyB0aGUgbWVtX3VzZXJfZGF0YSBtZW1iZXIgb2YgOnR5cGU6YG5naHR0cDJfbWVtYCBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYgdm9pZCAqKCpuZ2h0dHAyX21hbGxvYykoc2l6ZV90IHNpemUsIHZvaWQgKm1lbV91c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIEN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yIHRvIHJlcGxhY2UgZnJlZSgpLiAgVGhlIHxtZW1fdXNlcl9kYXRhfCBpcworICogdGhlIG1lbV91c2VyX2RhdGEgbWVtYmVyIG9mIDp0eXBlOmBuZ2h0dHAyX21lbWAgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHZvaWQgKCpuZ2h0dHAyX2ZyZWUpKHZvaWQgKnB0ciwgdm9pZCAqbWVtX3VzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ3VzdG9tIG1lbW9yeSBhbGxvY2F0b3IgdG8gcmVwbGFjZSBjYWxsb2MoKS4gIFRoZSB8bWVtX3VzZXJfZGF0YXwKKyAqIGlzIHRoZSBtZW1fdXNlcl9kYXRhIG1lbWJlciBvZiA6dHlwZTpgbmdodHRwMl9tZW1gIHN0cnVjdHVyZS4KKyAqLwordHlwZWRlZiB2b2lkICooKm5naHR0cDJfY2FsbG9jKShzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCB2b2lkICptZW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDdXN0b20gbWVtb3J5IGFsbG9jYXRvciB0byByZXBsYWNlIHJlYWxsb2MoKS4gIFRoZSB8bWVtX3VzZXJfZGF0YXwKKyAqIGlzIHRoZSBtZW1fdXNlcl9kYXRhIG1lbWJlciBvZiA6dHlwZTpgbmdodHRwMl9tZW1gIHN0cnVjdHVyZS4KKyAqLwordHlwZWRlZiB2b2lkICooKm5naHR0cDJfcmVhbGxvYykodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCAqbWVtX3VzZXJfZGF0YSk7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIEN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yIGZ1bmN0aW9ucyBhbmQgdXNlciBkZWZpbmVkIHBvaW50ZXIuICBUaGUKKyAqIHxtZW1fdXNlcl9kYXRhfCBtZW1iZXIgaXMgcGFzc2VkIHRvIGVhY2ggYWxsb2NhdG9yIGZ1bmN0aW9uLiAgVGhpcworICogY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhY2hpZXZlIHBlci1zZXNzaW9uIG1lbW9yeSBwb29sLgorICoKKyAqIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlLCBgYG15X21hbGxvY2BgLCBgYG15X2ZyZWVgYCwKKyAqIGBgbXlfY2FsbG9jYGAgYW5kIGBgbXlfcmVhbGxvY2BgIGFyZSB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlCisgKiBzdGFuZGFyZCBhbGxvY2F0b3JzIGBgbWFsbG9jYGAsIGBgZnJlZWBgLCBgYGNhbGxvY2BgIGFuZAorICogYGByZWFsbG9jYGAgcmVzcGVjdGl2ZWx5OjoKKyAqCisgKiAgICAgdm9pZCAqbXlfbWFsbG9jX2NiKHNpemVfdCBzaXplLCB2b2lkICptZW1fdXNlcl9kYXRhKSB7CisgKiAgICAgICByZXR1cm4gbXlfbWFsbG9jKHNpemUpOworICogICAgIH0KKyAqCisgKiAgICAgdm9pZCBteV9mcmVlX2NiKHZvaWQgKnB0ciwgdm9pZCAqbWVtX3VzZXJfZGF0YSkgeyBteV9mcmVlKHB0cik7IH0KKyAqCisgKiAgICAgdm9pZCAqbXlfY2FsbG9jX2NiKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsIHZvaWQgKm1lbV91c2VyX2RhdGEpIHsKKyAqICAgICAgIHJldHVybiBteV9jYWxsb2Mobm1lbWIsIHNpemUpOworICogICAgIH0KKyAqCisgKiAgICAgdm9pZCAqbXlfcmVhbGxvY19jYih2b2lkICpwdHIsIHNpemVfdCBzaXplLCB2b2lkICptZW1fdXNlcl9kYXRhKSB7CisgKiAgICAgICByZXR1cm4gbXlfcmVhbGxvYyhwdHIsIHNpemUpOworICogICAgIH0KKyAqCisgKiAgICAgdm9pZCBzZXNzaW9uX25ldygpIHsKKyAqICAgICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbjsKKyAqICAgICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrczsKKyAqICAgICAgIG5naHR0cDJfbWVtIG1lbSA9IHtOVUxMLCBteV9tYWxsb2NfY2IsIG15X2ZyZWVfY2IsIG15X2NhbGxvY19jYiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBteV9yZWFsbG9jX2NifTsKKyAqCisgKiAgICAgICAuLi4KKyAqCisgKiAgICAgICBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldzMoJnNlc3Npb24sIGNhbGxiYWNrcywgTlVMTCwgTlVMTCwgJm1lbSk7CisgKgorICogICAgICAgLi4uCisgKiAgICAgfQorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBBbiBhcmJpdHJhcnkgdXNlciBzdXBwbGllZCBkYXRhLiAgVGhpcyBpcyBwYXNzZWQgdG8gZWFjaAorICAgKiBhbGxvY2F0b3IgZnVuY3Rpb24uCisgICAqLworICB2b2lkICptZW1fdXNlcl9kYXRhOworICAvKioKKyAgICogQ3VzdG9tIGFsbG9jYXRvciBmdW5jdGlvbiB0byByZXBsYWNlIG1hbGxvYygpLgorICAgKi8KKyAgbmdodHRwMl9tYWxsb2MgbWFsbG9jOworICAvKioKKyAgICogQ3VzdG9tIGFsbG9jYXRvciBmdW5jdGlvbiB0byByZXBsYWNlIGZyZWUoKS4KKyAgICovCisgIG5naHR0cDJfZnJlZSBmcmVlOworICAvKioKKyAgICogQ3VzdG9tIGFsbG9jYXRvciBmdW5jdGlvbiB0byByZXBsYWNlIGNhbGxvYygpLgorICAgKi8KKyAgbmdodHRwMl9jYWxsb2MgY2FsbG9jOworICAvKioKKyAgICogQ3VzdG9tIGFsbG9jYXRvciBmdW5jdGlvbiB0byByZXBsYWNlIHJlYWxsb2MoKS4KKyAgICovCisgIG5naHR0cDJfcmVhbGxvYyByZWFsbG9jOworfSBuZ2h0dHAyX21lbTsKKworc3RydWN0IG5naHR0cDJfb3B0aW9uOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25gLiAgVGhlIGRldGFpbHMgb2YKKyAqIHRoaXMgc3RydWN0dXJlIGFyZSBpbnRlbnRpb25hbGx5IGhpZGRlbiBmcm9tIHRoZSBwdWJsaWMgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX29wdGlvbiBuZ2h0dHAyX29wdGlvbjsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBJbml0aWFsaXplcyB8Km9wdGlvbl9wdHJ8IHdpdGggZGVmYXVsdCB2YWx1ZXMuCisgKgorICogV2hlbiB0aGUgYXBwbGljYXRpb24gZmluaXNoZWQgdXNpbmcgdGhpcyBvYmplY3QsIGl0IGNhbiB1c2UKKyAqIGBuZ2h0dHAyX29wdGlvbl9kZWwoKWAgdG8gZnJlZSBpdHMgbWVtb3J5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX29wdGlvbl9uZXcobmdodHRwMl9vcHRpb24gKipvcHRpb25fcHRyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBGcmVlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgfG9wdGlvbnwuICBJZiB8b3B0aW9ufCBpcworICogYGBOVUxMYGAsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfb3B0aW9uX2RlbChuZ2h0dHAyX29wdGlvbiAqb3B0aW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBUaGlzIG9wdGlvbiBwcmV2ZW50cyB0aGUgbGlicmFyeSBmcm9tIHNlbmRpbmcgV0lORE9XX1VQREFURSBmb3IgYQorICogY29ubmVjdGlvbiBhdXRvbWF0aWNhbGx5LiAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIG5vbnplcm8sIHRoZQorICogbGlicmFyeSB3b24ndCBzZW5kIFdJTkRPV19VUERBVEUgZm9yIERBVEEgdW50aWwgYXBwbGljYXRpb24gY2FsbHMKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZSgpYCB0byBpbmRpY2F0ZSB0aGUgY29uc3VtZWQgYW1vdW50IG9mCisgKiBkYXRhLiAgRG9uJ3QgdXNlIGBuZ2h0dHAyX3N1Ym1pdF93aW5kb3dfdXBkYXRlKClgIGZvciB0aGlzIHB1cnBvc2UuCisgKiBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gemVyby4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9vcHRpb25fc2V0X25vX2F1dG9fd2luZG93X3VwZGF0ZShuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLCBpbnQgdmFsKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBUaGlzIG9wdGlvbiBzZXRzIHRoZSBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIHZhbHVlIG9mCisgKiByZW1vdGUgZW5kcG9pbnQgYXMgaWYgaXQgaXMgcmVjZWl2ZWQgaW4gU0VUVElOR1MgZnJhbWUuICBXaXRob3V0CisgKiBzcGVjaWZ5aW5nIHRoaXMgb3B0aW9uLCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0Z29pbmcgY29uY3VycmVudAorICogc3RyZWFtcyBpcyBpbml0aWFsbHkgbGltaXRlZCB0byAxMDAgdG8gYXZvaWQgaXNzdWVzIHdoZW4gdGhlIGxvY2FsCisgKiBlbmRwb2ludCBzdWJtaXRzIGxvdHMgb2YgcmVxdWVzdHMgYmVmb3JlIHJlY2VpdmluZyBpbml0aWFsIFNFVFRJTkdTCisgKiBmcmFtZSBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQsIHNpbmNlIHNlbmRpbmcgdGhlbSBhdCBvbmNlIHRvIHRoZQorICogcmVtb3RlIGVuZHBvaW50IGNvdWxkIGxlYWQgdG8gcmVqZWN0aW9uIG9mIHNvbWUgb2YgdGhlIHJlcXVlc3RzLgorICogVGhpcyB2YWx1ZSB3aWxsIGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIGxvY2FsIGVuZHBvaW50IHJlY2VpdmVzCisgKiBpbml0aWFsIFNFVFRJTkdTIGZyYW1lIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludCwgZWl0aGVyIHRvIHRoZQorICogdmFsdWUgYWR2ZXJ0aXNlZCBpbiBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIG9yIHRvIHRoZQorICogZGVmYXVsdCB2YWx1ZSAodW5saW1pdGVkKSBpZiBub25lIHdhcyBhZHZlcnRpc2VkLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX29wdGlvbl9zZXRfcGVlcl9tYXhfY29uY3VycmVudF9zdHJlYW1zKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogQnkgZGVmYXVsdCwgbmdodHRwMiBsaWJyYXJ5LCBpZiBjb25maWd1cmVkIGFzIHNlcnZlciwgcmVxdWlyZXMKKyAqIGZpcnN0IDI0IGJ5dGVzIG9mIGNsaWVudCBtYWdpYyBieXRlIHN0cmluZyAoTUFHSUMpLiAgSW4gbW9zdCBjYXNlcywKKyAqIHRoaXMgd2lsbCBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2VydmVyLiAgQnV0IHNvbWV0aW1lcworICogc2VydmVyIG1heSB3YW50IHRvIGRldGVjdCB0aGUgYXBwbGljYXRpb24gcHJvdG9jb2wgYmFzZWQgb24gZmlyc3QKKyAqIGZldyBieXRlcyBvbiBjbGVhciB0ZXh0IGNvbW11bmljYXRpb24uCisgKgorICogSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB3aXRoIG5vbnplcm8gfHZhbHwsIG5naHR0cDIgbGlicmFyeSBkb2VzIG5vdAorICogaGFuZGxlIE1BR0lDLiAgSXQgc3RpbGwgY2hlY2tzIGZvbGxvd2luZyBTRVRUSU5HUyBmcmFtZS4gIFRoaXMKKyAqIG1lYW5zIHRoYXQgYXBwbGljYXRpb25zIHNob3VsZCBkZWFsIHdpdGggTUFHSUMgYnkgdGhlbXNlbHZlcy4KKyAqCisgKiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZCBvciB1c2VkIHdpdGggemVybyB2YWx1ZSwgaWYgTUFHSUMgZG9lcworICogbm90IG1hdGNoIDptYWNybzpgTkdIVFRQMl9DTElFTlRfTUFHSUNgLCBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAKKyAqIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIHdpbGwgcmV0dXJuIGVycm9yCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQkFEX0NMSUVOVF9NQUdJQ2AsIHdoaWNoIGlzIGZhdGFsIGVycm9yLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX29wdGlvbl9zZXRfbm9fcmVjdl9jbGllbnRfbWFnaWMobmdodHRwMl9vcHRpb24gKm9wdGlvbiwgaW50IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogQnkgZGVmYXVsdCwgbmdodHRwMiBsaWJyYXJ5IGVuZm9yY2VzIHN1YnNldCBvZiBIVFRQIE1lc3NhZ2luZyBydWxlcworICogZGVzY3JpYmVkIGluIGBIVFRQLzIgc3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA4CisgKiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04PmBfLiAgU2VlCisgKiA6cmVmOmBodHRwLW1lc3NhZ2luZ2Agc2VjdGlvbiBmb3IgZGV0YWlscy4gIEZvciB0aG9zZSBhcHBsaWNhdGlvbnMKKyAqIHdobyB1c2UgbmdodHRwMiBsaWJyYXJ5IGFzIG5vbi1IVFRQIHVzZSwgZ2l2ZSBub256ZXJvIHRvIHx2YWx8IHRvCisgKiBkaXNhYmxlIHRoaXMgZW5mb3JjZW1lbnQuICBQbGVhc2Ugbm90ZSB0aGF0IGRpc2FibGluZyB0aGlzIGZlYXR1cmUKKyAqIGRvZXMgbm90IGNoYW5nZSB0aGUgZnVuZGFtZW50YWwgY2xpZW50IGFuZCBzZXJ2ZXIgbW9kZWwgb2YgSFRUUC4KKyAqIFRoYXQgaXMsIGV2ZW4gaWYgdGhlIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQsIG9ubHkgY2xpZW50IGNhbiBzZW5kCisgKiByZXF1ZXN0cy4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbm9faHR0cF9tZXNzYWdpbmcobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJGQyA3NTQwIGRvZXMgbm90IGVuZm9yY2UgYW55IGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgaW5jb21pbmcKKyAqIHJlc2VydmVkIHN0cmVhbXMgKGluIFJGQyA3NTQwIHRlcm1zLCBzdHJlYW1zIGluIHJlc2VydmVkIChyZW1vdGUpCisgKiBzdGF0ZSkuICBUaGlzIG9ubHkgYWZmZWN0cyBjbGllbnQgc2lkZSwgc2luY2Ugb25seSBzZXJ2ZXIgY2FuIHB1c2gKKyAqIHN0cmVhbXMuICBNYWxpY2lvdXMgc2VydmVyIGNhbiBwdXNoIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RyZWFtcywKKyAqIGFuZCBtYWtlIGNsaWVudCdzIG1lbW9yeSBleGhhdXN0ZWQuICBUaGlzIG9wdGlvbiBjYW4gc2V0IHRoZQorICogbWF4aW11bSBudW1iZXIgb2Ygc3VjaCBpbmNvbWluZyBzdHJlYW1zIHRvIGF2b2lkIHBvc3NpYmxlIG1lbW9yeQorICogZXhoYXVzdGlvbi4gIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgYW5kIHB1c2hlZCBzdHJlYW1zIGFyZQorICogYXV0b21hdGljYWxseSBjbG9zZWQgb24gcmVjZXB0aW9uLCB3aXRob3V0IGNhbGxpbmcgdXNlciBwcm92aWRlZAorICogY2FsbGJhY2ssIGlmIHRoZXkgZXhjZWVkIHRoZSBnaXZlbiBsaW1pdC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisgKiAyMDAuICBJZiBzZXNzaW9uIGlzIGNvbmZpZ3VyZWQgYXMgc2VydmVyIHNpZGUsIHRoaXMgb3B0aW9uIGhhcyBubworICogZWZmZWN0LiAgU2VydmVyIGNhbiBjb250cm9sIHRoZSBudW1iZXIgb2Ygc3RyZWFtcyB0byBwdXNoLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX29wdGlvbl9zZXRfbWF4X3Jlc2VydmVkX3JlbW90ZV9zdHJlYW1zKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBleHRlbnNpb24gZnJhbWUgdHlwZSB0aGUgYXBwbGljYXRpb24gaXMgd2lsbGluZyB0byBoYW5kbGUgd2l0aAorICogdXNlciBkZWZpbmVkIGNhbGxiYWNrcyAoc2VlCisgKiA6dHlwZTpgbmdodHRwMl9vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFja2AgYW5kCisgKiA6dHlwZTpgbmdodHRwMl91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrYCkuICBUaGUgfHR5cGV8IGlzCisgKiBleHRlbnNpb24gZnJhbWUgdHlwZSwgYW5kIG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDB4OS4KKyAqIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuICBUaGUgYXBwbGljYXRpb24gY2FuIGNhbGwKKyAqIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgdG8gc2V0IG1vcmUgdGhhbiBvbmUgZnJhbWUgdHlwZSB0bworICogcmVjZWl2ZS4gIFRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBpdAorICoganVzdCBzZW5kcyBleHRlbnNpb24gZnJhbWVzLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX29wdGlvbl9zZXRfdXNlcl9yZWN2X2V4dGVuc2lvbl90eXBlKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdHlwZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBleHRlbnNpb24gZnJhbWUgdHlwZSB0aGUgYXBwbGljYXRpb24gaXMgd2lsbGluZyB0byByZWNlaXZlCisgKiB1c2luZyBidWlsdGluIGhhbmRsZXIuICBUaGUgfHR5cGV8IGlzIHRoZSBleHRlbnNpb24gZnJhbWUgdHlwZSB0bworICogcmVjZWl2ZSwgYW5kIG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDB4OS4gIE90aGVyd2lzZSwgdGhpcworICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KKyAqIG11bHRpcGxlIHRpbWVzIHRvIHNldCBtb3JlIHRoYW4gb25lIGZyYW1lIHR5cGUgdG8gcmVjZWl2ZS4gIFRoZQorICogYXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgaXQganVzdCBzZW5kcworICogZXh0ZW5zaW9uIGZyYW1lcy4KKyAqCisgKiBJZiBzYW1lIGZyYW1lIHR5cGUgaXMgcGFzc2VkIHRvIGJvdGgKKyAqIGBuZ2h0dHAyX29wdGlvbl9zZXRfYnVpbHRpbl9yZWN2X2V4dGVuc2lvbl90eXBlKClgIGFuZAorICogYG5naHR0cDJfb3B0aW9uX3NldF91c2VyX3JlY3ZfZXh0ZW5zaW9uX3R5cGUoKWAsIHRoZSBsYXR0ZXIgdGFrZXMKKyAqIHByZWNlZGVuY2UuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfb3B0aW9uX3NldF9idWlsdGluX3JlY3ZfZXh0ZW5zaW9uX3R5cGUobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0eXBlKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBUaGlzIG9wdGlvbiBwcmV2ZW50cyB0aGUgbGlicmFyeSBmcm9tIHNlbmRpbmcgUElORyBmcmFtZSB3aXRoIEFDSworICogZmxhZyBzZXQgYXV0b21hdGljYWxseSB3aGVuIFBJTkcgZnJhbWUgd2l0aG91dCBBQ0sgZmxhZyBzZXQgaXMKKyAqIHJlY2VpdmVkLiAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIG5vbnplcm8sIHRoZSBsaWJyYXJ5IHdvbid0IHNlbmQKKyAqIFBJTkcgZnJhbWUgd2l0aCBBQ0sgZmxhZyBzZXQgaW4gdGhlIHJlc3BvbnNlIGZvciBpbmNvbWluZyBQSU5HCisgKiBmcmFtZS4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gc2VuZCBQSU5HIGZyYW1lIHdpdGggQUNLIGZsYWcgc2V0IHVzaW5nCisgKiBgbmdodHRwMl9zdWJtaXRfcGluZygpYCB3aXRoIDplbnVtOmBOR0hUVFAyX0ZMQUdfQUNLYCBhcyBmbGFncworICogcGFyYW1ldGVyLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9ub19hdXRvX3BpbmdfYWNrKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRoaXMgb3B0aW9uIHNldHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGhlYWRlciBibG9jayAoYSBzZXQgb2YKKyAqIGhlYWRlciBmaWVsZHMgcGVyIG9uZSBIRUFERVJTIGZyYW1lKSB0byBzZW5kLiAgVGhlIGxlbmd0aCBvZiBhCisgKiBnaXZlbiBzZXQgb2YgaGVhZGVyIGZpZWxkcyBpcyBjYWxjdWxhdGVkIHVzaW5nCisgKiBgbmdodHRwMl9oZF9kZWZsYXRlX2JvdW5kKClgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjRLaUIuICBJZgorICogYXBwbGljYXRpb24gYXR0ZW1wdHMgdG8gc2VuZCBoZWFkZXIgZmllbGRzIGxhcmdlciB0aGFuIHRoaXMgbGltaXQsCisgKiB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZSBmcmFtZSBmYWlscyB3aXRoIGVycm9yIGNvZGUKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9vcHRpb25fc2V0X21heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGgobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRoaXMgb3B0aW9uIHNldHMgdGhlIG1heGltdW0gZHluYW1pYyB0YWJsZSBzaXplIGZvciBkZWZsYXRpbmcKKyAqIGhlYWRlciBmaWVsZHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0S2lCLiAgSW4gSFRUUC8yLCByZWNlaXZlciBvZgorICogZGVmbGF0ZWQgaGVhZGVyIGJsb2NrIGNhbiBzcGVjaWZ5IG1heGltdW0gZHluYW1pYyB0YWJsZSBzaXplLiAgVGhlCisgKiBhY3R1YWwgbWF4aW11bSBzaXplIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBzaXplIHJlY2VpdmVyIHNwZWNpZmllZAorICogYW5kIHRoaXMgb3B0aW9uIHZhbHVlLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX29wdGlvbl9zZXRfbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRoaXMgb3B0aW9uIHByZXZlbnRzIHRoZSBsaWJyYXJ5IGZyb20gcmV0YWluaW5nIGNsb3NlZCBzdHJlYW1zIHRvCisgKiBtYWludGFpbiB0aGUgcHJpb3JpdHkgdHJlZS4gIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byBub256ZXJvLAorICogYXBwbGljYXRpb25zIGNhbiBkaXNjYXJkIGNsb3NlZCBzdHJlYW0gY29tcGxldGVseSB0byBzYXZlIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fY2xvc2VkX3N0cmVhbXMobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0Z29pbmcgU0VUVElOR1MgQUNLIGFuZAorICogUElORyBBQ0sgZnJhbWVzIHJldGFpbmVkIGluIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25gIG9iamVjdC4gIElmCisgKiBtb3JlIHRoYW4gdGhvc2UgZnJhbWVzIGFyZSByZXRhaW5lZCwgdGhlIHBlZXIgaXMgY29uc2lkZXJlZCB0byBiZQorICogbWlzYmVoYXZpbmcgYW5kIHNlc3Npb24gd2lsbCBiZSBjbG9zZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9tYXhfb3V0Ym91bmRfYWNrKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluaXRpYWxpemVzIHwqc2Vzc2lvbl9wdHJ8IGZvciBjbGllbnQgdXNlLiAgVGhlIGFsbCBtZW1iZXJzIG9mCisgKiB8Y2FsbGJhY2tzfCBhcmUgY29waWVkIHRvIHwqc2Vzc2lvbl9wdHJ8LiAgVGhlcmVmb3JlIHwqc2Vzc2lvbl9wdHJ8CisgKiBkb2VzIG5vdCBzdG9yZSB8Y2FsbGJhY2tzfC4gIFRoZSB8dXNlcl9kYXRhfCBpcyBhbiBhcmJpdHJhcnkgdXNlcgorICogc3VwcGxpZWQgZGF0YSwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBUaGUgOnR5cGU6YG5naHR0cDJfc2VuZF9jYWxsYmFja2AgbXVzdCBiZSBzcGVjaWZpZWQuICBJZiB0aGUKKyAqIGFwcGxpY2F0aW9uIGNvZGUgdXNlcyBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAsIHRoZQorICogOnR5cGU6YG5naHR0cDJfcmVjdl9jYWxsYmFja2AgbXVzdCBiZSBzcGVjaWZpZWQuICBUaGUgb3RoZXIgbWVtYmVycworICogb2YgfGNhbGxiYWNrc3wgY2FuIGJlIGBgTlVMTGBgLgorICoKKyAqIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIHwqc2Vzc2lvbl9wdHJ8IGlzIGxlZnQgdW50b3VjaGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcobmdodHRwMl9zZXNzaW9uICoqc2Vzc2lvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluaXRpYWxpemVzIHwqc2Vzc2lvbl9wdHJ8IGZvciBzZXJ2ZXIgdXNlLiAgVGhlIGFsbCBtZW1iZXJzIG9mCisgKiB8Y2FsbGJhY2tzfCBhcmUgY29waWVkIHRvIHwqc2Vzc2lvbl9wdHJ8LiBUaGVyZWZvcmUgfCpzZXNzaW9uX3B0cnwKKyAqIGRvZXMgbm90IHN0b3JlIHxjYWxsYmFja3N8LiAgVGhlIHx1c2VyX2RhdGF8IGlzIGFuIGFyYml0cmFyeSB1c2VyCisgKiBzdXBwbGllZCBkYXRhLCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICoKKyAqIFRoZSA6dHlwZTpgbmdodHRwMl9zZW5kX2NhbGxiYWNrYCBtdXN0IGJlIHNwZWNpZmllZC4gIElmIHRoZQorICogYXBwbGljYXRpb24gY29kZSB1c2VzIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCwgdGhlCisgKiA6dHlwZTpgbmdodHRwMl9yZWN2X2NhbGxiYWNrYCBtdXN0IGJlIHNwZWNpZmllZC4gIFRoZSBvdGhlciBtZW1iZXJzCisgKiBvZiB8Y2FsbGJhY2tzfCBjYW4gYmUgYGBOVUxMYGAuCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgfCpzZXNzaW9uX3B0cnwgaXMgbGVmdCB1bnRvdWNoZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldyhuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogTGlrZSBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9ucworICogc3BlY2lmaWVkIGluIHRoZSB8b3B0aW9ufC4KKyAqCisgKiBUaGUgfG9wdGlvbnwgY2FuIGJlIGBgTlVMTGBgIGFuZCB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvCisgKiBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCB8b3B0aW9ufC4gIFRoZSBhcHBsaWNhdGlvbiBpcworICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgfG9wdGlvbnwgaWYgaXQgZmluaXNoZXMgdXNpbmcgdGhlIG9iamVjdC4KKyAqCisgKiBUaGUgbGlicmFyeSBjb2RlIGRvZXMgbm90IHJlZmVyIHRvIHxvcHRpb258IGFmdGVyIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldzIobmdodHRwMl9zZXNzaW9uICoqc2Vzc2lvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogTGlrZSBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9ucworICogc3BlY2lmaWVkIGluIHRoZSB8b3B0aW9ufC4KKyAqCisgKiBUaGUgfG9wdGlvbnwgY2FuIGJlIGBgTlVMTGBgIGFuZCB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCB8b3B0aW9ufC4gIFRoZSBhcHBsaWNhdGlvbiBpcworICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgfG9wdGlvbnwgaWYgaXQgZmluaXNoZXMgdXNpbmcgdGhlIG9iamVjdC4KKyAqCisgKiBUaGUgbGlicmFyeSBjb2RlIGRvZXMgbm90IHJlZmVyIHRvIHxvcHRpb258IGFmdGVyIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzIobmdodHRwMl9zZXNzaW9uICoqc2Vzc2lvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogTGlrZSBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcyKClgLCBidXQgd2l0aCBhZGRpdGlvbmFsIGN1c3RvbQorICogbWVtb3J5IGFsbG9jYXRvciBzcGVjaWZpZWQgaW4gdGhlIHxtZW18LgorICoKKyAqIFRoZSB8bWVtfCBjYW4gYmUgYGBOVUxMYGAgYW5kIHRoZSBjYWxsIGlzIGVxdWl2YWxlbnQgdG8KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldzIoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCB8bWVtfC4gIFRoZSBhcHBsaWNhdGlvbiBpcworICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgfG1lbXwuCisgKgorICogVGhlIGxpYnJhcnkgY29kZSBkb2VzIG5vdCByZWZlciB0byB8bWVtfCBwb2ludGVyIGFmdGVyIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMsIHNvIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IGZyZWUgaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3MygKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogTGlrZSBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcyKClgLCBidXQgd2l0aCBhZGRpdGlvbmFsIGN1c3RvbQorICogbWVtb3J5IGFsbG9jYXRvciBzcGVjaWZpZWQgaW4gdGhlIHxtZW18LgorICoKKyAqIFRoZSB8bWVtfCBjYW4gYmUgYGBOVUxMYGAgYW5kIHRoZSBjYWxsIGlzIGVxdWl2YWxlbnQgdG8KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzIoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCB8bWVtfC4gIFRoZSBhcHBsaWNhdGlvbiBpcworICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgfG1lbXwuCisgKgorICogVGhlIGxpYnJhcnkgY29kZSBkb2VzIG5vdCByZWZlciB0byB8bWVtfCBwb2ludGVyIGFmdGVyIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMsIHNvIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IGZyZWUgaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3MygKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogRnJlZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHxzZXNzaW9ufC4gIElmIHxzZXNzaW9ufCBpcworICogYGBOVUxMYGAsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9kZWwobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZW5kcyBwZW5kaW5nIGZyYW1lcyB0byB0aGUgcmVtb3RlIHBlZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdGl6ZWQgZnJhbWUgZnJvbSB0aGUKKyAqIG91dGJvdW5kIHF1ZXVlIGFuZCBzZW5kcyBpdCB0byB0aGUgcmVtb3RlIHBlZXIuICBJdCBkb2VzIHRoaXMgYXMKKyAqIG1hbnkgYXMgcG9zc2libGUgdW50aWwgdGhlIHVzZXIgY2FsbGJhY2sKKyAqIDp0eXBlOmBuZ2h0dHAyX3NlbmRfY2FsbGJhY2tgIHJldHVybnMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9XT1VMREJMT0NLYCBvciB0aGUgb3V0Ym91bmQgcXVldWUgYmVjb21lcyBlbXB0eS4KKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgc2V2ZXJhbCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggYXJlIHBhc3NlZAorICogd2hlbiBpbml0aWFsaXppbmcgdGhlIHxzZXNzaW9ufC4gIEhlcmUgaXMgdGhlIHNpbXBsZSB0aW1lIGNoYXJ0CisgKiB3aGljaCB0ZWxscyB3aGVuIGVhY2ggY2FsbGJhY2sgaXMgaW52b2tlZDoKKyAqCisgKiAxLiBHZXQgdGhlIG5leHQgZnJhbWUgdG8gc2VuZCBmcm9tIG91dGJvdW5kIHF1ZXVlLgorICoKKyAqIDIuIFByZXBhcmUgdHJhbnNtaXNzaW9uIG9mIHRoZSBmcmFtZS4KKyAqCisgKiAzLiBJZiB0aGUgY29udHJvbCBmcmFtZSBjYW5ub3QgYmUgc2VudCBiZWNhdXNlIHNvbWUgcHJlY29uZGl0aW9ucworICogICAgYXJlIG5vdCBtZXQgKGUuZy4sIHJlcXVlc3QgSEVBREVSUyBjYW5ub3QgYmUgc2VudCBhZnRlciBHT0FXQVkpLAorICogICAgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2tgIGlzIGludm9rZWQuICBBYm9ydAorICogICAgdGhlIGZvbGxvd2luZyBzdGVwcy4KKyAqCisgKiA0LiBJZiB0aGUgZnJhbWUgaXMgSEVBREVSUywgUFVTSF9QUk9NSVNFIG9yIERBVEEsCisgKiAgICA6dHlwZTpgbmdodHRwMl9zZWxlY3RfcGFkZGluZ19jYWxsYmFja2AgaXMgaW52b2tlZC4KKyAqCisgKiA1LiBJZiB0aGUgZnJhbWUgaXMgcmVxdWVzdCBIRUFERVJTLCB0aGUgc3RyZWFtIGlzIG9wZW5lZCBoZXJlLgorICoKKyAqIDYuIDp0eXBlOmBuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrYCBpcyBpbnZva2VkLgorICoKKyAqIDcuIElmIDplbnVtOmBOR0hUVFAyX0VSUl9DQU5DRUxgIGlzIHJldHVybmVkIGZyb20KKyAqICAgIDp0eXBlOmBuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrYCwgdGhlIGN1cnJlbnQgZnJhbWUKKyAqICAgIHRyYW5zbWlzc2lvbiBpcyBjYW5jZWxlZCwgYW5kCisgKiAgICA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2AgaXMgaW52b2tlZC4gIEFib3J0CisgKiAgICB0aGUgZm9sbG93aW5nIHN0ZXBzLgorICoKKyAqIDguIDp0eXBlOmBuZ2h0dHAyX3NlbmRfY2FsbGJhY2tgIGlzIGludm9rZWQgb25lIG9yIG1vcmUgdGltZXMgdG8KKyAqICAgIHNlbmQgdGhlIGZyYW1lLgorICoKKyAqIDkuIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIGlzIGludm9rZWQuCisgKgorICogMTAuIElmIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIGZyYW1lIHRyaWdnZXJzIGNsb3N1cmUgb2YgdGhlCisgKiAgICAgc3RyZWFtLCB0aGUgc3RyZWFtIGlzIGNsb3NlZCBhbmQKKyAqICAgICA6dHlwZTpgbmdodHRwMl9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2tgIGlzIGludm9rZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYAorICogICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgZGF0YSB0byBzZW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCBleGNlcHQgdGhhdCBpdAorICogZG9lcyBub3QgdXNlIDp0eXBlOmBuZ2h0dHAyX3NlbmRfY2FsbGJhY2tgIHRvIHRyYW5zbWl0IGRhdGEuCisgKiBJbnN0ZWFkLCBpdCBhc3NpZ25zIHRoZSBwb2ludGVyIHRvIHRoZSBzZXJpYWxpemVkIGRhdGEgdG8gdGhlCisgKiB8KmRhdGFfcHRyfCBhbmQgcmV0dXJucyBpdHMgbGVuZ3RoLiAgVGhlIG90aGVyIGNhbGxiYWNrcyBhcmUgY2FsbGVkCisgKiBpbiB0aGUgc2FtZSB3YXkgYXMgdGhleSBhcmUgaW4gYG5naHR0cDJfc2Vzc2lvbl9zZW5kKClgLgorICoKKyAqIElmIG5vIGRhdGEgaXMgYXZhaWxhYmxlIHRvIHNlbmQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IG5vdCByZXR1cm4gYWxsIHNlcmlhbGl6ZWQgZGF0YSBpbiBvbmUgaW52b2NhdGlvbi4KKyAqIFRvIGdldCBhbGwgZGF0YSwgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHkgdW50aWwgaXQgcmV0dXJucyAwCisgKiBvciBvbmUgb2YgbmVnYXRpdmUgZXJyb3IgY29kZXMuCisgKgorICogVGhlIGFzc2lnbmVkIHwqZGF0YV9wdHJ8IGlzIHZhbGlkIHVudGlsIHRoZSBuZXh0IGNhbGwgb2YKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl9zZW5kKClgLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBzZW5kIGFsbCBkYXRhIGJlZm9yZSBzZW5kaW5nIHRoZSBuZXh0IGNodW5rIG9mCisgKiBkYXRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHBvaW50ZWQgYnkgdGhlCisgKiB8KmRhdGFfcHRyfCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICoKKyAqIC4uIG5vdGU6OgorICoKKyAqICAgVGhpcyBmdW5jdGlvbiBtYXkgcHJvZHVjZSB2ZXJ5IHNtYWxsIGJ5dGUgc3RyaW5nLiAgSWYgdGhhdCBpcyB0aGUKKyAqICAgY2FzZSwgYW5kIGFwcGxpY2F0aW9uIGRpc2FibGVzIE5hZ2xlIGFsZ29yaXRobSAoYGBUQ1BfTk9ERUxBWWBgKSwKKyAqICAgdGhlbiB3cml0aW5nIHRoaXMgc21hbGwgY2h1bmsgbGVhZHMgdG8gdmVyeSBzbWFsbCBwYWNrZXQsIGFuZCBpdAorICogICBpcyB2ZXJ5IGluZWZmaWNpZW50LiAgQW4gYXBwbGljYXRpb24gc2hvdWxkIGJlIHJlc3BvbnNpYmxlIHRvCisgKiAgIGJ1ZmZlciB1cCBzbWFsbCBjaHVua3Mgb2YgZGF0YSBhcyBuZWNlc3NhcnkgdG8gYXZvaWQgdGhpcworICogICBzaXR1YXRpb24uCisgKi8KK05HSFRUUDJfRVhURVJOIHNzaXplX3QgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKipkYXRhX3B0cik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmVjZWl2ZXMgZnJhbWVzIGZyb20gdGhlIHJlbW90ZSBwZWVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgYXMgbWFueSBmcmFtZXMgYXMgcG9zc2libGUgdW50aWwgdGhlIHVzZXIKKyAqIGNhbGxiYWNrIDp0eXBlOmBuZ2h0dHAyX3JlY3ZfY2FsbGJhY2tgIHJldHVybnMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9XT1VMREJMT0NLYC4gIFRoaXMgZnVuY3Rpb24gY2FsbHMgc2V2ZXJhbAorICogY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGFyZSBwYXNzZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlCisgKiB8c2Vzc2lvbnwuICBIZXJlIGlzIHRoZSBzaW1wbGUgdGltZSBjaGFydCB3aGljaCB0ZWxscyB3aGVuIGVhY2gKKyAqIGNhbGxiYWNrIGlzIGludm9rZWQ6CisgKgorICogMS4gOnR5cGU6YG5naHR0cDJfcmVjdl9jYWxsYmFja2AgaXMgaW52b2tlZCBvbmUgb3IgbW9yZSB0aW1lcyB0bworICogICAgcmVjZWl2ZSBmcmFtZSBoZWFkZXIuCisgKgorICogMi4gV2hlbiBmcmFtZSBoZWFkZXIgaXMgcmVjZWl2ZWQsCisgKiAgICA6dHlwZTpgbmdodHRwMl9vbl9iZWdpbl9mcmFtZV9jYWxsYmFja2AgaXMgaW52b2tlZC4KKyAqCisgKiAzLiBJZiB0aGUgZnJhbWUgaXMgREFUQSBmcmFtZToKKyAqCisgKiAgICAxLiA6dHlwZTpgbmdodHRwMl9yZWN2X2NhbGxiYWNrYCBpcyBpbnZva2VkIHRvIHJlY2VpdmUgREFUQQorICogICAgICAgcGF5bG9hZC4gRm9yIGVhY2ggY2h1bmsgb2YgZGF0YSwKKyAqICAgICAgIDp0eXBlOmBuZ2h0dHAyX29uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFja2AgaXMgaW52b2tlZC4KKyAqCisgKiAgICAyLiBJZiBvbmUgREFUQSBmcmFtZSBpcyBjb21wbGV0ZWx5IHJlY2VpdmVkLAorICogICAgICAgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2AgaXMgaW52b2tlZC4gIElmIHRoZQorICogICAgICAgcmVjZXB0aW9uIG9mIHRoZSBmcmFtZSB0cmlnZ2VycyB0aGUgY2xvc3VyZSBvZiB0aGUgc3RyZWFtLAorICogICAgICAgOnR5cGU6YG5naHR0cDJfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrYCBpcyBpbnZva2VkLgorICoKKyAqIDQuIElmIHRoZSBmcmFtZSBpcyB0aGUgY29udHJvbCBmcmFtZToKKyAqCisgKiAgICAxLiA6dHlwZTpgbmdodHRwMl9yZWN2X2NhbGxiYWNrYCBpcyBpbnZva2VkIG9uZSBvciBtb3JlIHRpbWVzIHRvCisgKiAgICAgICByZWNlaXZlIHdob2xlIGZyYW1lLgorICoKKyAqICAgIDIuIElmIHRoZSByZWNlaXZlZCBmcmFtZSBpcyB2YWxpZCwgdGhlbiBmb2xsb3dpbmcgYWN0aW9ucyBhcmUKKyAqICAgICAgIHRha2VuLiAgSWYgdGhlIGZyYW1lIGlzIGVpdGhlciBIRUFERVJTIG9yIFBVU0hfUFJPTUlTRSwKKyAqICAgICAgIDp0eXBlOmBuZ2h0dHAyX29uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2tgIGlzIGludm9rZWQuICBUaGVuCisgKiAgICAgICA6dHlwZTpgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2tgIGlzIGludm9rZWQgZm9yIGVhY2ggaGVhZGVyCisgKiAgICAgICBuYW1lL3ZhbHVlIHBhaXIuICBGb3IgaW52YWxpZCBoZWFkZXIgZmllbGQsCisgKiAgICAgICA6dHlwZTpgbmdodHRwMl9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFja2AgaXMgY2FsbGVkLiAgQWZ0ZXIKKyAqICAgICAgIGFsbCBuYW1lL3ZhbHVlIHBhaXJzIGFyZSBlbWl0dGVkIHN1Y2Nlc3NmdWxseSwKKyAqICAgICAgIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgIGlzIGludm9rZWQuICBGb3Igb3RoZXIKKyAqICAgICAgIGZyYW1lcywgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2AgaXMgaW52b2tlZC4KKyAqICAgICAgIElmIHRoZSByZWNlcHRpb24gb2YgdGhlIGZyYW1lIHRyaWdnZXJzIHRoZSBjbG9zdXJlIG9mIHRoZQorICogICAgICAgc3RyZWFtLCA6dHlwZTpgbmdodHRwMl9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2tgIGlzIGludm9rZWQuCisgKgorICogICAgMy4gSWYgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIHVucGFja2VkIGJ1dCBpcyBpbnRlcnByZXRlZCBhcworICogICAgICAgaW52YWxpZCwgOnR5cGU6YG5naHR0cDJfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrYCBpcworICogICAgICAgaW52b2tlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9FT0ZgCisgKiAgICAgVGhlIHJlbW90ZSBwZWVyIGRpZCBzaHV0ZG93biBvbiB0aGUgY29ubmVjdGlvbi4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9CQURfQ0xJRU5UX01BR0lDYAorICogICAgIEludmFsaWQgY2xpZW50IG1hZ2ljIHdhcyBkZXRlY3RlZC4gIFRoaXMgZXJyb3Igb25seSByZXR1cm5zCisgKiAgICAgd2hlbiB8c2Vzc2lvbnwgd2FzIGNvbmZpZ3VyZWQgYXMgc2VydmVyIGFuZAorICogICAgIGBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fcmVjdl9jbGllbnRfbWFnaWMoKWAgaXMgbm90IHVzZWQgd2l0aAorICogICAgIG5vbnplcm8gdmFsdWUuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfRkxPT0RFRGAKKyAqICAgICBGbG9vZGluZyB3YXMgZGV0ZWN0ZWQgaW4gdGhpcyBIVFRQLzIgc2Vzc2lvbiwgYW5kIGl0IG11c3QgYmUKKyAqICAgICBjbG9zZWQuICBUaGlzIGlzIG1vc3QgbGlrZWx5IGNhdXNlZCBieSBtaXNiZWhhdmlvdXIgb2YgcGVlci4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl9yZWN2KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUHJvY2Vzc2VzIGRhdGEgfGlufCBhcyBhbiBpbnB1dCBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQuICBUaGUKKyAqIHxpbmxlbnwgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHxpbnwuCisgKgorICogVGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGV4Y2VwdCB0aGF0IGl0CisgKiBkb2VzIG5vdCB1c2UgOnR5cGU6YG5naHR0cDJfcmVjdl9jYWxsYmFja2AgdG8gcmVjZWl2ZSBkYXRhOyB0aGUKKyAqIHxpbnwgaXMgdGhlIG9ubHkgZGF0YSBmb3IgdGhlIGludm9jYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gIElmIGFsbAorICogYnl0ZXMgYXJlIHByb2Nlc3NlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgVGhlIG90aGVyIGNhbGxiYWNrcworICogYXJlIGNhbGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhleSBhcmUgaW4gYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgLgorICoKKyAqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyB0cmllcyB0bworICogcHJvY2Vzc2VzIGFsbCBpbnB1dCBkYXRhIHVubGVzcyBlaXRoZXIgYW4gZXJyb3Igb2NjdXJzIG9yCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfUEFVU0VgIGlzIHJldHVybmVkIGZyb20KKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFja2Agb3IKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFja2AuICBJZgorICogOmVudW06YE5HSFRUUDJfRVJSX1BBVVNFYCBpcyB1c2VkLCB0aGUgcmV0dXJuIHZhbHVlIGluY2x1ZGVzIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIHdhcyB1c2VkIHRvIHByb2R1Y2UgdGhlIGRhdGEgb3IgZnJhbWUgZm9yIHRoZQorICogY2FsbGJhY2suCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VkIGJ5dGVzLCBvciBvbmUgb2YgdGhlCisgKiBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0JBRF9DTElFTlRfTUFHSUNgCisgKiAgICAgSW52YWxpZCBjbGllbnQgbWFnaWMgd2FzIGRldGVjdGVkLiAgVGhpcyBlcnJvciBvbmx5IHJldHVybnMKKyAqICAgICB3aGVuIHxzZXNzaW9ufCB3YXMgY29uZmlndXJlZCBhcyBzZXJ2ZXIgYW5kCisgKiAgICAgYG5naHR0cDJfb3B0aW9uX3NldF9ub19yZWN2X2NsaWVudF9tYWdpYygpYCBpcyBub3QgdXNlZCB3aXRoCisgKiAgICAgbm9uemVybyB2YWx1ZS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9GTE9PREVEYAorICogICAgIEZsb29kaW5nIHdhcyBkZXRlY3RlZCBpbiB0aGlzIEhUVFAvMiBzZXNzaW9uLCBhbmQgaXQgbXVzdCBiZQorICogICAgIGNsb3NlZC4gIFRoaXMgaXMgbW9zdCBsaWtlbHkgY2F1c2VkIGJ5IG1pc2JlaGF2aW91ciBvZiBwZWVyLgorICovCitOR0hUVFAyX0VYVEVSTiBzc2l6ZV90IG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmxlbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUHV0cyBiYWNrIHByZXZpb3VzbHkgZGVmZXJyZWQgREFUQSBmcmFtZSBpbiB0aGUgc3RyZWFtIHxzdHJlYW1faWR8CisgKiB0byB0aGUgb3V0Ym91bmQgcXVldWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgc3RyZWFtIGRvZXMgbm90IGV4aXN0OyBvciBubyBkZWZlcnJlZCBkYXRhIGV4aXN0LgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIHZhbHVlIGlmIHxzZXNzaW9ufCB3YW50cyB0byByZWNlaXZlIGRhdGEgZnJvbSB0aGUKKyAqIHJlbW90ZSBwZWVyLgorICoKKyAqIElmIGJvdGggYG5naHR0cDJfc2Vzc2lvbl93YW50X3JlYWQoKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoKWAgcmV0dXJuIDAsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAqIGRyb3AgdGhlIGNvbm5lY3Rpb24uCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fd2FudF9yZWFkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIHZhbHVlIGlmIHxzZXNzaW9ufCB3YW50cyB0byBzZW5kIGRhdGEgdG8gdGhlIHJlbW90ZQorICogcGVlci4KKyAqCisgKiBJZiBib3RoIGBuZ2h0dHAyX3Nlc3Npb25fd2FudF9yZWFkKClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKClgIHJldHVybiAwLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkCisgKiBkcm9wIHRoZSBjb25uZWN0aW9uLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHN0cmVhbV91c2VyX2RhdGEgZm9yIHRoZSBzdHJlYW0gfHN0cmVhbV9pZHwuICBUaGUKKyAqIHN0cmVhbV91c2VyX2RhdGEgaXMgcHJvdmlkZWQgYnkgYG5naHR0cDJfc3VibWl0X3JlcXVlc3QoKWAsCisgKiBgbmdodHRwMl9zdWJtaXRfaGVhZGVycygpYCBvcgorICogYG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YSgpYC4gIFVubGVzcyBpdCBpcyBzZXQgdXNpbmcKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2V0X3N0cmVhbV91c2VyX2RhdGEoKWAsIGlmIHRoZSBzdHJlYW0gaXMKKyAqIGluaXRpYXRlZCBieSB0aGUgcmVtb3RlIGVuZHBvaW50LCBzdHJlYW1fdXNlcl9kYXRhIGlzIGFsd2F5cworICogYGBOVUxMYGAuICBJZiB0aGUgc3RyZWFtIGRvZXMgbm90IGV4aXN0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIGBgTlVMTGBgLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkICoKK25naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3VzZXJfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgdGhlIHxzdHJlYW1fdXNlcl9kYXRhfCB0byB0aGUgc3RyZWFtIGRlbm90ZWQgYnkgdGhlCisgKiB8c3RyZWFtX2lkfC4gIElmIGEgc3RyZWFtIHVzZXIgZGF0YSBpcyBhbHJlYWR5IHNldCB0byB0aGUgc3RyZWFtLAorICogaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgfHN0cmVhbV91c2VyX2RhdGF8LiAgSXQgaXMgdmFsaWQgdG8gc3BlY2lmeQorICogYGBOVUxMYGAgaW4gdGhlIHxzdHJlYW1fdXNlcl9kYXRhfCwgd2hpY2ggbnVsbGlmaWVzIHRoZSBhc3NvY2lhdGVkCisgKiBkYXRhIHBvaW50ZXIuCisgKgorICogSXQgaXMgdmFsaWQgdG8gc2V0IHRoZSB8c3RyZWFtX3VzZXJfZGF0YXwgdG8gdGhlIHN0cmVhbSByZXNlcnZlZCBieQorICogUFVTSF9QUk9NSVNFIGZyYW1lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgc3RyZWFtIGRvZXMgbm90IGV4aXN0CisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9zZXNzaW9uX3NldF9zdHJlYW1fdXNlcl9kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyB8dXNlcl9kYXRhfCB0byB8c2Vzc2lvbnwsIG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyB1c2VyIGRhdGEKKyAqIHNwZWNpZmllZCBpbiBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAsIG9yCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX3NldF91c2VyX2RhdGEobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIG91dGJvdW5kIHF1ZXVlLiAgVGhpcyBkb2VzIG5vdAorICogaW5jbHVkZSB0aGUgZGVmZXJyZWQgREFUQSBmcmFtZXMuCisgKi8KK05HSFRUUDJfRVhURVJOIHNpemVfdAorbmdodHRwMl9zZXNzaW9uX2dldF9vdXRib3VuZF9xdWV1ZV9zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIERBVEEgcGF5bG9hZCBpbiBieXRlcyByZWNlaXZlZCB3aXRob3V0CisgKiBXSU5ET1dfVVBEQVRFIHRyYW5zbWlzc2lvbiBmb3IgdGhlIHN0cmVhbSB8c3RyZWFtX2lkfC4gIFRoZSBsb2NhbAorICogKHJlY2VpdmUpIHdpbmRvdyBzaXplIGNhbiBiZSBhZGp1c3RlZCBieQorICogYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAuICBUaGlzIGZ1bmN0aW9uIHRha2VzIGludG8gYWNjb3VudAorICogdGhhdCBhbmQgcmV0dXJucyBlZmZlY3RpdmUgZGF0YSBsZW5ndGguICBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUKKyAqIGxvY2FsIHdpbmRvdyBzaXplIGlzIHJlZHVjZWQgYnkgc3VibWl0dGluZyBuZWdhdGl2ZQorICogd2luZG93X3NpemVfaW5jcmVtZW50IHdpdGggYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAsIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBsZXNzIHRoYW4gYWN0dWFsbHkgcmVjZWl2ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xIGlmIGl0IGZhaWxzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2VmZmVjdGl2ZV9yZWN2X2RhdGFfbGVuZ3RoKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIGxvY2FsIChyZWNlaXZlKSB3aW5kb3cgc2l6ZSBmb3IgdGhlIHN0cmVhbSB8c3RyZWFtX2lkfC4KKyAqIFRoZSBsb2NhbCB3aW5kb3cgc2l6ZSBjYW4gYmUgYWRqdXN0ZWQgYnkKKyAqIGBuZ2h0dHAyX3N1Ym1pdF93aW5kb3dfdXBkYXRlKClgLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyBpbnRvIGFjY291bnQKKyAqIHRoYXQgYW5kIHJldHVybnMgZWZmZWN0aXZlIHdpbmRvdyBzaXplLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGFtb3VudCBvZiByZWNlaXZlZAorICogZGF0YSBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQuICBVc2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9sb2NhbF93aW5kb3dfc2l6ZSgpYCB0byBrbm93IHRoZSBhbW91bnQKKyAqIG9mIGRhdGEgdGhlIHJlbW90ZSBlbmRwb2ludCBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBzdHJlYW0gbGV2ZWwKKyAqIFdJTkRPV19VUERBVEUgZnJhbWUuICBOb3RlIHRoYXQgZWFjaCBzdHJlYW0gaXMgc3RpbGwgc3ViamVjdCB0byB0aGUKKyAqIGNvbm5lY3Rpb24gbGV2ZWwgZmxvdyBjb250cm9sLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBpdCBmYWlscy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9lZmZlY3RpdmVfbG9jYWxfd2luZG93X3NpemUoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgYW1vdW50IG9mIGZsb3ctY29udHJvbGxlZCBwYXlsb2FkIChlLmcuLCBEQVRBKSB0aGF0IHRoZQorICogcmVtb3RlIGVuZHBvaW50IGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIHN0cmVhbSBsZXZlbAorICogV0lORE9XX1VQREFURSBmcmFtZS4gIEl0IGlzIGFsc28gc3ViamVjdCB0byB0aGUgY29ubmVjdGlvbiBsZXZlbAorICogZmxvdyBjb250cm9sLiAgU28gdGhlIGFjdHVhbCBhbW91bnQgb2YgZGF0YSB0byBzZW5kIGlzCisgKiBtaW4oYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX3dpbmRvd19zaXplKClgLAorICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfbG9jYWxfd2luZG93X3NpemUoKWApLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBpdCBmYWlscy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9sb2NhbF93aW5kb3dfc2l6ZSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgREFUQSBwYXlsb2FkIGluIGJ5dGVzIHJlY2VpdmVkIHdpdGhvdXQKKyAqIFdJTkRPV19VUERBVEUgdHJhbnNtaXNzaW9uIGZvciBhIGNvbm5lY3Rpb24uICBUaGUgbG9jYWwgKHJlY2VpdmUpCisgKiB3aW5kb3cgc2l6ZSBjYW4gYmUgYWRqdXN0ZWQgYnkgYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAuCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGF0IGFuZCByZXR1cm5zIGVmZmVjdGl2ZSBkYXRhCisgKiBsZW5ndGguICBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUgbG9jYWwgd2luZG93IHNpemUgaXMgcmVkdWNlZCBieQorICogc3VibWl0dGluZyBuZWdhdGl2ZSB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgd2l0aAorICogYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyCisgKiBvZiBieXRlcyBsZXNzIHRoYW4gYWN0dWFsbHkgcmVjZWl2ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xIGlmIGl0IGZhaWxzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X2VmZmVjdGl2ZV9yZWN2X2RhdGFfbGVuZ3RoKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbG9jYWwgKHJlY2VpdmUpIHdpbmRvdyBzaXplIGZvciBhIGNvbm5lY3Rpb24uICBUaGUKKyAqIGxvY2FsIHdpbmRvdyBzaXplIGNhbiBiZSBhZGp1c3RlZCBieQorICogYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAuICBUaGlzIGZ1bmN0aW9uIHRha2VzIGludG8gYWNjb3VudAorICogdGhhdCBhbmQgcmV0dXJucyBlZmZlY3RpdmUgd2luZG93IHNpemUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGUgYW1vdW50IG9mIHJlY2VpdmVkCisgKiBkYXRhIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludC4gIFVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfbG9jYWxfd2luZG93X3NpemUoKWAgdG8ga25vdyB0aGUgYW1vdW50IG9mCisgKiBkYXRhIHRoZSByZW1vdGUgZW5kcG9pbnQgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcKKyAqIGNvbm5lY3Rpb24tbGV2ZWwgV0lORE9XX1VQREFURSBmcmFtZS4gIE5vdGUgdGhhdCBlYWNoIHN0cmVhbSBpcworICogc3RpbGwgc3ViamVjdCB0byB0aGUgc3RyZWFtIGxldmVsIGZsb3cgY29udHJvbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgaXQgZmFpbHMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfZWZmZWN0aXZlX2xvY2FsX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgYW1vdW50IG9mIGZsb3ctY29udHJvbGxlZCBwYXlsb2FkIChlLmcuLCBEQVRBKSB0aGF0IHRoZQorICogcmVtb3RlIGVuZHBvaW50IGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGNvbm5lY3Rpb24gbGV2ZWwKKyAqIFdJTkRPV19VUERBVEUgZnJhbWUuICBOb3RlIHRoYXQgZWFjaCBzdHJlYW0gaXMgc3RpbGwgc3ViamVjdCB0byB0aGUKKyAqIHN0cmVhbSBsZXZlbCBmbG93IGNvbnRyb2wgKHNlZQorICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX3dpbmRvd19zaXplKClgKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgaXQgZmFpbHMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfbG9jYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSByZW1vdGUgd2luZG93IHNpemUgZm9yIGEgZ2l2ZW4gc3RyZWFtIHxzdHJlYW1faWR8LgorICoKKyAqIFRoaXMgaXMgdGhlIGFtb3VudCBvZiBmbG93LWNvbnRyb2xsZWQgcGF5bG9hZCAoZS5nLiwgREFUQSkgdGhhdCB0aGUKKyAqIGxvY2FsIGVuZHBvaW50IGNhbiBzZW5kIHdpdGhvdXQgc3RyZWFtIGxldmVsIFdJTkRPV19VUERBVEUuICBUaGVyZQorICogaXMgYWxzbyBjb25uZWN0aW9uIGxldmVsIGZsb3cgY29udHJvbCwgc28gdGhlIGVmZmVjdGl2ZSBzaXplIG9mCisgKiBwYXlsb2FkIHRoYXQgdGhlIGxvY2FsIGVuZHBvaW50IGNhbiBhY3R1YWxseSBzZW5kIGlzCisgKiBtaW4oYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JlbW90ZV93aW5kb3dfc2l6ZSgpYCwKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3JlbW90ZV93aW5kb3dfc2l6ZSgpYCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xIGlmIGl0IGZhaWxzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JlbW90ZV93aW5kb3dfc2l6ZSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSByZW1vdGUgd2luZG93IHNpemUgZm9yIGEgY29ubmVjdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdAorbmdodHRwMl9zZXNzaW9uX2dldF9yZW1vdGVfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIDEgaWYgbG9jYWwgcGVlciBoYWxmIGNsb3NlZCB0aGUgZ2l2ZW4gc3RyZWFtIHxzdHJlYW1faWR8LgorICogUmV0dXJucyAwIGlmIGl0IGRpZCBub3QuICBSZXR1cm5zIC0xIGlmIG5vIHN1Y2ggc3RyZWFtIGV4aXN0cy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9sb2NhbF9jbG9zZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyAxIGlmIHJlbW90ZSBwZWVyIGhhbGYgY2xvc2VkIHRoZSBnaXZlbiBzdHJlYW0gfHN0cmVhbV9pZHwuCisgKiBSZXR1cm5zIDAgaWYgaXQgZGlkIG5vdC4gIFJldHVybnMgLTEgaWYgbm8gc3VjaCBzdHJlYW0gZXhpc3RzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JlbW90ZV9jbG9zZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgZHluYW1pYyB0YWJsZSBzaXplIG9mIEhQQUNLIGluZmxhdGVyLCBpbmNsdWRpbmcKKyAqIHRoZSBvdmVyaGVhZCAzMiBieXRlcyBwZXIgZW50cnkgZGVzY3JpYmVkIGluIFJGQyA3NTQxLgorICovCitOR0hUVFAyX0VYVEVSTiBzaXplX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfaGRfaW5mbGF0ZV9keW5hbWljX3RhYmxlX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGR5bmFtaWMgdGFibGUgc2l6ZSBvZiBIUEFDSyBkZWZsYXRlciBpbmNsdWRpbmcKKyAqIHRoZSBvdmVyaGVhZCAzMiBieXRlcyBwZXIgZW50cnkgZGVzY3JpYmVkIGluIFJGQyA3NTQxLgorICovCitOR0hUVFAyX0VYVEVSTiBzaXplX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfaGRfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTaWduYWxzIHRoZSBzZXNzaW9uIHNvIHRoYXQgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIGJlIHRlcm1pbmF0ZWQuCisgKgorICogVGhlIGxhc3Qgc3RyZWFtIElEIGlzIHRoZSBtaW5pbXVtIHZhbHVlIGJldHdlZW4gdGhlIHN0cmVhbSBJRCBvZiBhCisgKiBzdHJlYW0gZm9yIHdoaWNoIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgIHdhcyBjYWxsZWQKKyAqIG1vc3QgcmVjZW50bHkgYW5kIHRoZSBsYXN0IHN0cmVhbSBJRCB3ZSBoYXZlIHNlbnQgdG8gdGhlIHBlZXIKKyAqIHByZXZpb3VzbHkuCisgKgorICogVGhlIHxlcnJvcl9jb2RlfCBpcyB0aGUgZXJyb3IgY29kZSBvZiB0aGlzIEdPQVdBWSBmcmFtZS4gIFRoZQorICogcHJlLWRlZmluZWQgZXJyb3IgY29kZSBpcyBvbmUgb2YgOmVudW06YG5naHR0cDJfZXJyb3JfY29kZWAuCisgKgorICogQWZ0ZXIgdGhlIHRyYW5zbWlzc2lvbiwgYm90aCBgbmdodHRwMl9zZXNzaW9uX3dhbnRfcmVhZCgpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fd2FudF93cml0ZSgpYCByZXR1cm4gMC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUKKyAqIHRlcm1pbmF0ZWQgYWZ0ZXIgc2VuZGluZyBHT0FXQVkuICBJZiB0aGUgcmVtYWluaW5nIHN0cmVhbXMgc2hvdWxkCisgKiBiZSBwcm9jZXNzZWQgYWZ0ZXIgR09BV0FZLCB1c2UgYG5naHR0cDJfc3VibWl0X2dvYXdheSgpYCBpbnN0ZWFkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTaWduYWxzIHRoZSBzZXNzaW9uIHNvIHRoYXQgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIGJlIHRlcm1pbmF0ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgYG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbigpYCwKKyAqIGJ1dCB0aGUgbGFzdCBzdHJlYW0gSUQgY2FuIGJlIHNwZWNpZmllZCBieSB0aGUgYXBwbGljYXRpb24gZm9yIGZpbmUKKyAqIGdyYWluZWQgY29udHJvbCBvZiBzdHJlYW0uICBUaGUgSFRUUC8yIHNwZWNpZmljYXRpb24gZG9lcyBub3QgYWxsb3cKKyAqIGxhc3Rfc3RyZWFtX2lkIHRvIGJlIGluY3JlYXNlZC4gIFNvIHRoZSBhY3R1YWwgdmFsdWUgc2VudCBhcworICogbGFzdF9zdHJlYW1faWQgaXMgdGhlIG1pbmltdW0gdmFsdWUgYmV0d2VlbiB0aGUgZ2l2ZW4KKyAqIHxsYXN0X3N0cmVhbV9pZHwgYW5kIHRoZSBsYXN0X3N0cmVhbV9pZCB3ZSBoYXZlIHByZXZpb3VzbHkgc2VudCB0bworICogdGhlIHBlZXIuCisgKgorICogVGhlIHxsYXN0X3N0cmVhbV9pZHwgaXMgcGVlcidzIHN0cmVhbSBJRCBvciAwLiAgU28gaWYgfHNlc3Npb258IGlzCisgKiBpbml0aWFsaXplZCBhcyBjbGllbnQsIHxsYXN0X3N0cmVhbV9pZHwgbXVzdCBiZSBldmVuIG9yIDAuICBJZgorICogfHNlc3Npb258IGlzIGluaXRpYWxpemVkIGFzIHNlcnZlciwgfGxhc3Rfc3RyZWFtX2lkfCBtdXN0IGJlIG9kZCBvcgorICogMC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxsYXN0X3N0cmVhbV9pZHwgaXMgaW52YWxpZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbjIobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNpZ25hbHMgdG8gdGhlIGNsaWVudCB0aGF0IHRoZSBzZXJ2ZXIgc3RhcnRlZCBncmFjZWZ1bCBzaHV0ZG93bgorICogcHJvY2VkdXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2FibGUgZm9yIHNlcnZlci4gIElmIHRoaXMgZnVuY3Rpb24gaXMKKyAqIGNhbGxlZCB3aXRoIGNsaWVudCBzaWRlIHNlc3Npb24sIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgLgorICoKKyAqIFRvIGdyYWNlZnVsbHkgc2h1dGRvd24gSFRUUC8yIHNlc3Npb24sIHNlcnZlciBzaG91bGQgY2FsbCB0aGlzCisgKiBmdW5jdGlvbiB0byBzZW5kIEdPQVdBWSB3aXRoIGxhc3Rfc3RyZWFtX2lkICgxdSA8PCAzMSkgLSAxLiAgQW5kCisgKiBhZnRlciBzb21lIGRlbGF5IChlLmcuLCAxIFJUVCksIHNlbmQgYW5vdGhlciBHT0FXQVkgd2l0aCB0aGUgc3RyZWFtCisgKiBJRCB0aGF0IHRoZSBzZXJ2ZXIgaGFzIHNvbWUgcHJvY2Vzc2luZyB1c2luZworICogYG5naHR0cDJfc3VibWl0X2dvYXdheSgpYC4gIFNlZSBhbHNvCisgKiBgbmdodHRwMl9zZXNzaW9uX2dldF9sYXN0X3Byb2Nfc3RyZWFtX2lkKClgLgorICoKKyAqIFVubGlrZSBgbmdodHRwMl9zdWJtaXRfZ29hd2F5KClgLCB0aGlzIGZ1bmN0aW9uIGp1c3Qgc2VuZHMgR09BV0FZCisgKiBhbmQgZG9lcyBub3RoaW5nIG1vcmUuICBUaGlzIGlzIGEgbWVyZSBpbmRpY2F0aW9uIHRvIHRoZSBjbGllbnQKKyAqIHRoYXQgc2Vzc2lvbiBzaHV0ZG93biBpcyBpbW1pbmVudC4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbAorICogYG5naHR0cDJfc3VibWl0X2dvYXdheSgpYCB3aXRoIGFwcHJvcHJpYXRlIGxhc3Rfc3RyZWFtX2lkIGFmdGVyCisgKiB0aGlzIGNhbGwuCisgKgorICogSWYgb25lIG9yIG1vcmUgR09BV0FZIGZyYW1lIGhhdmUgYmVlbiBhbHJlYWR5IHNlbnQgYnkgZWl0aGVyCisgKiBgbmdodHRwMl9zdWJtaXRfZ29hd2F5KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oKWAsCisgKiB0aGlzIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFYAorICogICAgIFRoZSB8c2Vzc2lvbnwgaXMgaW5pdGlhbGl6ZWQgYXMgY2xpZW50LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfc2h1dGRvd25fbm90aWNlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgdmFsdWUgb2YgU0VUVElOR1MgfGlkfCBub3RpZmllZCBieSBhIHJlbW90ZSBlbmRwb2ludC4KKyAqIFRoZSB8aWR8IG11c3QgYmUgb25lIG9mIHZhbHVlcyBkZWZpbmVkIGluCisgKiA6ZW51bTpgbmdodHRwMl9zZXR0aW5nc19pZGAuCisgKi8KK05HSFRUUDJfRVhURVJOIHVpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfcmVtb3RlX3NldHRpbmdzKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgbmdodHRwMl9zZXR0aW5nc19pZCBpZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgdmFsdWUgb2YgU0VUVElOR1MgfGlkfCBvZiBsb2NhbCBlbmRwb2ludCBhY2tub3dsZWRnZWQKKyAqIGJ5IHRoZSByZW1vdGUgZW5kcG9pbnQuICBUaGUgfGlkfCBtdXN0IGJlIG9uZSBvZiB0aGUgdmFsdWVzIGRlZmluZWQKKyAqIGluIDplbnVtOmBuZ2h0dHAyX3NldHRpbmdzX2lkYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdWludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9sb2NhbF9zZXR0aW5ncygKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIG5naHR0cDJfc2V0dGluZ3NfaWQgaWQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRlbGxzIHRoZSB8c2Vzc2lvbnwgdGhhdCBuZXh0IHN0cmVhbSBJRCBpcyB8bmV4dF9zdHJlYW1faWR8LiAgVGhlCisgKiB8bmV4dF9zdHJlYW1faWR8IG11c3QgYmUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSByZXR1cm5lZAorICogYnkgYG5naHR0cDJfc2Vzc2lvbl9nZXRfbmV4dF9zdHJlYW1faWQoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfG5leHRfc3RyZWFtX2lkfCBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIHZhbHVlCisgKiAgICAgYG5naHR0cDJfc2Vzc2lvbl9nZXRfbmV4dF9zdHJlYW1faWQoKWAgcmV0dXJuczsgb3IKKyAqICAgICB8bmV4dF9zdHJlYW1faWR8IGlzIGludmFsaWQgKGUuZy4sIGV2ZW4gaW50ZWdlciBmb3IgY2xpZW50LCBvcgorICogICAgIG9kZCBpbnRlZ2VyIGZvciBzZXJ2ZXIpLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX3NldF9uZXh0X3N0cmVhbV9pZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG5leHRfc3RyZWFtX2lkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IG91dGdvaW5nIHN0cmVhbSBJRC4gIE5vdGljZSB0aGF0IHJldHVybiB0eXBlIGlzCisgKiB1aW50MzJfdC4gIElmIHdlIHJ1biBvdXQgb2Ygc3RyZWFtIElEIGZvciB0aGlzIHNlc3Npb24sIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgMSA8PCAzMS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdWludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfbmV4dF9zdHJlYW1faWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBUZWxscyB0aGUgfHNlc3Npb258IHRoYXQgfHNpemV8IGJ5dGVzIGZvciBhIHN0cmVhbSBkZW5vdGVkIGJ5CisgKiB8c3RyZWFtX2lkfCB3ZXJlIGNvbnN1bWVkIGJ5IGFwcGxpY2F0aW9uIGFuZCBhcmUgcmVhZHkgdG8KKyAqIFdJTkRPV19VUERBVEUuICBUaGUgY29uc3VtZWQgYnl0ZXMgYXJlIGNvdW50ZWQgdG93YXJkcyBib3RoCisgKiBjb25uZWN0aW9uIGFuZCBzdHJlYW0gbGV2ZWwgV0lORE9XX1VQREFURSAoc2VlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWVfY29ubmVjdGlvbigpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZV9zdHJlYW0oKWAgdG8gdXBkYXRlIGNvbnN1bXB0aW9uCisgKiBpbmRlcGVuZGVudGx5KS4gIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRob3V0CisgKiBhdXRvbWF0aWMgd2luZG93IHVwZGF0ZSAoc2VlCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X25vX2F1dG9fd2luZG93X3VwZGF0ZSgpYCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyAwLgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgCisgKiAgICAgQXV0b21hdGljIFdJTkRPV19VUERBVEUgaXMgbm90IGRpc2FibGVkLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLCBzaXplX3Qgc2l6ZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogTGlrZSBgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWUoKWAsIGJ1dCB0aGlzIG9ubHkgdGVsbHMgbGlicmFyeSB0aGF0CisgKiB8c2l6ZXwgYnl0ZXMgd2VyZSBjb25zdW1lZCBvbmx5IGZvciBjb25uZWN0aW9uIGxldmVsLiAgTm90ZSB0aGF0CisgKiBIVFRQLzIgbWFpbnRhaW5zIGNvbm5lY3Rpb24gYW5kIHN0cmVhbSBsZXZlbCBmbG93IGNvbnRyb2wgd2luZG93cworICogaW5kZXBlbmRlbnRseS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgCisgKiAgICAgQXV0b21hdGljIFdJTkRPV19VUERBVEUgaXMgbm90IGRpc2FibGVkLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWVfY29ubmVjdGlvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogTGlrZSBgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWUoKWAsIGJ1dCB0aGlzIG9ubHkgdGVsbHMgbGlicmFyeSB0aGF0CisgKiB8c2l6ZXwgYnl0ZXMgd2VyZSBjb25zdW1lZCBvbmx5IGZvciBzdHJlYW0gZGVub3RlZCBieSB8c3RyZWFtX2lkfC4KKyAqIE5vdGUgdGhhdCBIVFRQLzIgbWFpbnRhaW5zIGNvbm5lY3Rpb24gYW5kIHN0cmVhbSBsZXZlbCBmbG93IGNvbnRyb2wKKyAqIHdpbmRvd3MgaW5kZXBlbmRlbnRseS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzdHJlYW1faWR8IGlzIDAuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAKKyAqICAgICBBdXRvbWF0aWMgV0lORE9XX1VQREFURSBpcyBub3QgZGlzYWJsZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIENoYW5nZXMgcHJpb3JpdHkgb2YgZXhpc3Rpbmcgc3RyZWFtIGRlbm90ZWQgYnkgfHN0cmVhbV9pZHwuICBUaGUKKyAqIG5ldyBwcmlvcml0eSBzcGVjaWZpY2F0aW9uIGlzIHxwcmlfc3BlY3wuCisgKgorICogVGhlIHByaW9yaXR5IGlzIGNoYW5nZWQgc2lsZW50bHkgYW5kIGluc3RhbnRseSwgYW5kIG5vIFBSSU9SSVRZCisgKiBmcmFtZSB3aWxsIGJlIHNlbnQgdG8gbm90aWZ5IHRoZSBwZWVyIG9mIHRoaXMgY2hhbmdlLiAgVGhpcworICogZnVuY3Rpb24gbWF5IGJlIHVzZWZ1bCBmb3Igc2VydmVyIHRvIGNoYW5nZSB0aGUgcHJpb3JpdHkgb2YgcHVzaGVkCisgKiBzdHJlYW0uCisgKgorICogSWYgfHNlc3Npb258IGlzIGluaXRpYWxpemVkIGFzIHNlcnZlciwgYW5kIGBgcHJpX3NwZWMtPnN0cmVhbV9pZGBgCisgKiBwb2ludHMgdG8gdGhlIGlkbGUgc3RyZWFtLCB0aGUgaWRsZSBzdHJlYW0gaXMgY3JlYXRlZCBpZiBpdCBkb2VzCisgKiBub3QgZXhpc3QuICBUaGUgY3JlYXRlZCBpZGxlIHN0cmVhbSB3aWxsIGRlcGVuZCBvbiByb290IHN0cmVhbQorICogKHN0cmVhbSAwKSB3aXRoIHdlaWdodCAxNi4KKyAqCisgKiBPdGhlcndpc2UsIGlmIHN0cmVhbSBkZW5vdGVkIGJ5IGBgcHJpX3NwZWMtPnN0cmVhbV9pZGBgIGlzIG5vdAorICogZm91bmQsIHdlIHVzZSBkZWZhdWx0IHByaW9yaXR5IGluc3RlYWQgb2YgZ2l2ZW4gfHByaV9zcGVjfC4gIFRoYXQKKyAqIGlzIG1ha2Ugc3RyZWFtIGRlcGVuZCBvbiByb290IHN0cmVhbSB3aXRoIHdlaWdodCAxNi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgQXR0ZW1wdGVkIHRvIGRlcGVuZCBvbiBpdHNlbGY7IG9yIG5vIHN0cmVhbSBleGlzdCBmb3IgdGhlIGdpdmVuCisgKiAgICAgfHN0cmVhbV9pZHw7IG9yIHxzdHJlYW1faWR8IGlzIDAKKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fY2hhbmdlX3N0cmVhbV9wcmlvcml0eShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIENyZWF0ZXMgaWRsZSBzdHJlYW0gd2l0aCB0aGUgZ2l2ZW4gfHN0cmVhbV9pZHwsIGFuZCBwcmlvcml0eQorICogfHByaV9zcGVjfC4KKyAqCisgKiBUaGUgc3RyZWFtIGNyZWF0aW9uIGlzIGRvbmUgd2l0aG91dCBzZW5kaW5nIFBSSU9SSVRZIGZyYW1lLCB3aGljaAorICogbWVhbnMgdGhhdCBwZWVyIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGlkbGUKKyAqIHN0cmVhbSBpbiB0aGUgbG9jYWwgZW5kcG9pbnQuCisgKgorICogUkZDIDc1NDAgZG9lcyBub3QgZGlzYWxsb3cgdGhlIHVzZSBvZiBjcmVhdGlvbiBvZiBpZGxlIHN0cmVhbSB3aXRoCisgKiBvZGQgb3IgZXZlbiBzdHJlYW0gSUQgcmVnYXJkbGVzcyBvZiBjbGllbnQgb3Igc2VydmVyLiAgU28gdGhpcworICogZnVuY3Rpb24gY2FuIGNyZWF0ZSBvZGQgb3IgZXZlbiBzdHJlYW0gSUQgcmVnYXJkbGVzcyBvZiBjbGllbnQgb3IKKyAqIHNlcnZlci4gIEJ1dCBwcm9iYWJseSBpdCBpcyBhIGJpdCBzYWZlciB0byB1c2UgdGhlIHN0cmVhbSBJRCB0aGUKKyAqIGxvY2FsIGVuZHBvaW50IGNhbiBpbml0aWF0ZSAoaW4gb3RoZXIgd29yZHMsIHVzZSBvZGQgc3RyZWFtIElEIGZvcgorICogY2xpZW50LCBhbmQgZXZlbiBzdHJlYW0gSUQgZm9yIHNlcnZlciksIHRvIGF2b2lkIHBvdGVudGlhbAorICogY29sbGlzaW9uIGZyb20gcGVlcidzIGluc3RydWN0aW9uLiAgQWxzbyB3ZSBjYW4gdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX3NldF9uZXh0X3N0cmVhbV9pZCgpYCB0byBhdm9pZCB0byBvcGVuIGNyZWF0ZWQKKyAqIGlkbGUgc3RyZWFtcyBhY2NpZGVudGFsbHkgaWYgd2UgZm9sbG93IHRoaXMgcmVjb21tZW5kYXRpb24uCisgKgorICogSWYgfHNlc3Npb258IGlzIGluaXRpYWxpemVkIGFzIHNlcnZlciwgYW5kIGBgcHJpX3NwZWMtPnN0cmVhbV9pZGBgCisgKiBwb2ludHMgdG8gdGhlIGlkbGUgc3RyZWFtLCB0aGUgaWRsZSBzdHJlYW0gaXMgY3JlYXRlZCBpZiBpdCBkb2VzCisgKiBub3QgZXhpc3QuICBUaGUgY3JlYXRlZCBpZGxlIHN0cmVhbSB3aWxsIGRlcGVuZCBvbiByb290IHN0cmVhbQorICogKHN0cmVhbSAwKSB3aXRoIHdlaWdodCAxNi4KKyAqCisgKiBPdGhlcndpc2UsIGlmIHN0cmVhbSBkZW5vdGVkIGJ5IGBgcHJpX3NwZWMtPnN0cmVhbV9pZGBgIGlzIG5vdAorICogZm91bmQsIHdlIHVzZSBkZWZhdWx0IHByaW9yaXR5IGluc3RlYWQgb2YgZ2l2ZW4gfHByaV9zcGVjfC4gIFRoYXQKKyAqIGlzIG1ha2Ugc3RyZWFtIGRlcGVuZCBvbiByb290IHN0cmVhbSB3aXRoIHdlaWdodCAxNi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgQXR0ZW1wdGVkIHRvIGRlcGVuZCBvbiBpdHNlbGY7IG9yIHN0cmVhbSBkZW5vdGVkIGJ5IHxzdHJlYW1faWR8CisgKiAgICAgYWxyZWFkeSBleGlzdHM7IG9yIHxzdHJlYW1faWR8IGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBpZGxlCisgKiAgICAgc3RyZWFtIChpbiBvdGhlciB3b3JkcywgbG9jYWwgZW5kcG9pbnQgaGFzIGFscmVhZHkgb3BlbmVkCisgKiAgICAgc3RyZWFtIElEIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gc3RyZWFtIElEOyBvcgorICogICAgIHxzdHJlYW1faWR8IGlzIDAKKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fY3JlYXRlX2lkbGVfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFBlcmZvcm1zIHBvc3QtcHJvY2VzcyBvZiBIVFRQIFVwZ3JhZGUgcmVxdWVzdC4gIFRoaXMgZnVuY3Rpb24gY2FuCisgKiBiZSBjYWxsZWQgZnJvbSBib3RoIGNsaWVudCBhbmQgc2VydmVyLCBidXQgdGhlIGJlaGF2aW9yIGlzIHZlcnkKKyAqIGRpZmZlcmVudCBpbiBlYWNoIG90aGVyLgorICoKKyAqIC4uIHdhcm5pbmc6OgorICoKKyAqICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mCisgKiAgIGBuZ2h0dHAyX3Nlc3Npb25fdXBncmFkZTIoKWAsIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBsYWNrcyB0aGUKKyAqICAgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIGxpYnJhcnkgdGhlIHJlcXVlc3QgbWV0aG9kIHVzZWQgaW4gdGhlCisgKiAgIG9yaWdpbmFsIEhUVFAgcmVxdWVzdC4gIFRoaXMgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQgZm9yIGNsaWVudAorICogICB0byB2YWxpZGF0ZSBhY3R1YWwgcmVzcG9uc2UgYm9keSBsZW5ndGggYWdhaW5zdCBjb250ZW50LWxlbmd0aAorICogICBoZWFkZXIgZmllbGQgKHNlZSBgbmdodHRwMl9vcHRpb25fc2V0X25vX2h0dHBfbWVzc2FnaW5nKClgKS4gIElmCisgKiAgIEhFQUQgaXMgdXNlZCBpbiByZXF1ZXN0LCB0aGUgbGVuZ3RoIG9mIHJlc3BvbnNlIGJvZHkgbXVzdCBiZSAwCisgKiAgIHJlZ2FyZGxlc3Mgb2YgdmFsdWUgaW5jbHVkZWQgaW4gY29udGVudC1sZW5ndGggaGVhZGVyIGZpZWxkLgorICoKKyAqIElmIGNhbGxlZCBmcm9tIGNsaWVudCBzaWRlLCB0aGUgfHNldHRpbmdzX3BheWxvYWR8IG11c3QgYmUgdGhlCisgKiB2YWx1ZSBzZW50IGluIGBgSFRUUDItU2V0dGluZ3NgYCBoZWFkZXIgZmllbGQgYW5kIG11c3QgYmUgZGVjb2RlZAorICogYnkgYmFzZTY0dXJsIGRlY29kZXIuICBUaGUgfHNldHRpbmdzX3BheWxvYWRsZW58IGlzIHRoZSBsZW5ndGggb2YKKyAqIHxzZXR0aW5nc19wYXlsb2FkfC4gIFRoZSB8c2V0dGluZ3NfcGF5bG9hZHwgaXMgdW5wYWNrZWQgYW5kIGl0cworICogc2V0dGluZyB2YWx1ZXMgd2lsbCBiZSBzdWJtaXR0ZWQgdXNpbmcgYG5naHR0cDJfc3VibWl0X3NldHRpbmdzKClgLgorICogVGhpcyBtZWFucyB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gY29kZSBkb2VzIG5vdCBuZWVkIHRvIHN1Ym1pdAorICogU0VUVElOR1MgYnkgaXRzZWxmLiAgVGhlIHN0cmVhbSB3aXRoIHN0cmVhbSBJRD0xIGlzIG9wZW5lZCBhbmQgdGhlCisgKiB8c3RyZWFtX3VzZXJfZGF0YXwgaXMgdXNlZCBmb3IgaXRzIHN0cmVhbV91c2VyX2RhdGEuICBUaGUgb3BlbmVkCisgKiBzdHJlYW0gYmVjb21lcyBoYWxmLWNsb3NlZCAobG9jYWwpIHN0YXRlLgorICoKKyAqIElmIGNhbGxlZCBmcm9tIHNlcnZlciBzaWRlLCB0aGUgfHNldHRpbmdzX3BheWxvYWR8IG11c3QgYmUgdGhlCisgKiB2YWx1ZSByZWNlaXZlZCBpbiBgYEhUVFAyLVNldHRpbmdzYGAgaGVhZGVyIGZpZWxkIGFuZCBtdXN0IGJlCisgKiBkZWNvZGVkIGJ5IGJhc2U2NHVybCBkZWNvZGVyLiAgVGhlIHxzZXR0aW5nc19wYXlsb2FkbGVufCBpcyB0aGUKKyAqIGxlbmd0aCBvZiB8c2V0dGluZ3NfcGF5bG9hZHwuICBJdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBTRVRUSU5HUworICogZnJhbWUgd2l0aCB0aGF0IHBheWxvYWQgaXMgcmVjZWl2ZWQuICBUaHVzLCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yCisgKiB0aGUgcmVjZXB0aW9uIG9mIFNFVFRJTkdTIGZyYW1lIHdpbGwgYmUgaW52b2tlZC4gIFRoZSBzdHJlYW0gd2l0aAorICogc3RyZWFtIElEPTEgaXMgb3BlbmVkLiAgVGhlIHxzdHJlYW1fdXNlcl9kYXRhfCBpcyBpZ25vcmVkLiAgVGhlCisgKiBvcGVuZWQgc3RyZWFtIGJlY29tZXMgaGFsZi1jbG9zZWQgKHJlbW90ZSkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c2V0dGluZ3NfcGF5bG9hZHwgaXMgYmFkbHkgZm9ybWVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX1BST1RPYAorICogICAgIFRoZSBzdHJlYW0gSUQgMSBpcyBhbHJlYWR5IHVzZWQgb3IgY2xvc2VkOyBvciBpcyBub3QgYXZhaWxhYmxlLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNldHRpbmdzX3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNldHRpbmdzX3BheWxvYWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUGVyZm9ybXMgcG9zdC1wcm9jZXNzIG9mIEhUVFAgVXBncmFkZSByZXF1ZXN0LiAgVGhpcyBmdW5jdGlvbiBjYW4KKyAqIGJlIGNhbGxlZCBmcm9tIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIsIGJ1dCB0aGUgYmVoYXZpb3IgaXMgdmVyeQorICogZGlmZmVyZW50IGluIGVhY2ggb3RoZXIuCisgKgorICogSWYgY2FsbGVkIGZyb20gY2xpZW50IHNpZGUsIHRoZSB8c2V0dGluZ3NfcGF5bG9hZHwgbXVzdCBiZSB0aGUKKyAqIHZhbHVlIHNlbnQgaW4gYGBIVFRQMi1TZXR0aW5nc2BgIGhlYWRlciBmaWVsZCBhbmQgbXVzdCBiZSBkZWNvZGVkCisgKiBieSBiYXNlNjR1cmwgZGVjb2Rlci4gIFRoZSB8c2V0dGluZ3NfcGF5bG9hZGxlbnwgaXMgdGhlIGxlbmd0aCBvZgorICogfHNldHRpbmdzX3BheWxvYWR8LiAgVGhlIHxzZXR0aW5nc19wYXlsb2FkfCBpcyB1bnBhY2tlZCBhbmQgaXRzCisgKiBzZXR0aW5nIHZhbHVlcyB3aWxsIGJlIHN1Ym1pdHRlZCB1c2luZyBgbmdodHRwMl9zdWJtaXRfc2V0dGluZ3MoKWAuCisgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBjb2RlIGRvZXMgbm90IG5lZWQgdG8gc3VibWl0CisgKiBTRVRUSU5HUyBieSBpdHNlbGYuICBUaGUgc3RyZWFtIHdpdGggc3RyZWFtIElEPTEgaXMgb3BlbmVkIGFuZCB0aGUKKyAqIHxzdHJlYW1fdXNlcl9kYXRhfCBpcyB1c2VkIGZvciBpdHMgc3RyZWFtX3VzZXJfZGF0YS4gIFRoZSBvcGVuZWQKKyAqIHN0cmVhbSBiZWNvbWVzIGhhbGYtY2xvc2VkIChsb2NhbCkgc3RhdGUuCisgKgorICogSWYgY2FsbGVkIGZyb20gc2VydmVyIHNpZGUsIHRoZSB8c2V0dGluZ3NfcGF5bG9hZHwgbXVzdCBiZSB0aGUKKyAqIHZhbHVlIHJlY2VpdmVkIGluIGBgSFRUUDItU2V0dGluZ3NgYCBoZWFkZXIgZmllbGQgYW5kIG11c3QgYmUKKyAqIGRlY29kZWQgYnkgYmFzZTY0dXJsIGRlY29kZXIuICBUaGUgfHNldHRpbmdzX3BheWxvYWRsZW58IGlzIHRoZQorICogbGVuZ3RoIG9mIHxzZXR0aW5nc19wYXlsb2FkfC4gIEl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIFNFVFRJTkdTCisgKiBmcmFtZSB3aXRoIHRoYXQgcGF5bG9hZCBpcyByZWNlaXZlZC4gIFRodXMsIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IKKyAqIHRoZSByZWNlcHRpb24gb2YgU0VUVElOR1MgZnJhbWUgd2lsbCBiZSBpbnZva2VkLiAgVGhlIHN0cmVhbSB3aXRoCisgKiBzdHJlYW0gSUQ9MSBpcyBvcGVuZWQuICBUaGUgfHN0cmVhbV91c2VyX2RhdGF8IGlzIGlnbm9yZWQuICBUaGUKKyAqIG9wZW5lZCBzdHJlYW0gYmVjb21lcyBoYWxmLWNsb3NlZCAocmVtb3RlKS4KKyAqCisgKiBJZiB0aGUgcmVxdWVzdCBtZXRob2QgaXMgSEVBRCwgcGFzcyBub256ZXJvIHZhbHVlIHRvCisgKiB8aGVhZF9yZXF1ZXN0fC4gIE90aGVyd2lzZSwgcGFzcyAwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfHNldHRpbmdzX3BheWxvYWR8IGlzIGJhZGx5IGZvcm1lZC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9QUk9UT2AKKyAqICAgICBUaGUgc3RyZWFtIElEIDEgaXMgYWxyZWFkeSB1c2VkIG9yIGNsb3NlZDsgb3IgaXMgbm90IGF2YWlsYWJsZS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl91cGdyYWRlMihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNldHRpbmdzX3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZXR0aW5nc19wYXlsb2FkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVhZF9yZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXJpYWxpemVzIHRoZSBTRVRUSU5HUyB2YWx1ZXMgfGl2fCBpbiB0aGUgfGJ1ZnwuICBUaGUgc2l6ZSBvZiB0aGUKKyAqIHxidWZ8IGlzIHNwZWNpZmllZCBieSB8YnVmbGVufC4gIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgfGl2fAorICogYXJyYXkgaXMgZ2l2ZW4gYnkgfG5pdnwuICBUaGUgcmVxdWlyZWQgc3BhY2UgaW4gfGJ1ZnwgZm9yIHRoZSB8bml2fAorICogZW50cmllcyBpcyBgYDYqbml2YGAgYnl0ZXMgYW5kIGlmIHRoZSBnaXZlbiBidWZmZXIgaXMgdG9vIHNtYWxsLCBhbgorICogZXJyb3IgaXMgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgbWFpbmx5IGZvciBjcmVhdGluZyBhCisgKiBTRVRUSU5HUyBwYXlsb2FkIHRvIGJlIHNlbnQgd2l0aCB0aGUgYGBIVFRQMi1TZXR0aW5nc2BgIGhlYWRlcgorICogZmllbGQgaW4gYW4gSFRUUCBVcGdyYWRlIHJlcXVlc3QuICBUaGUgZGF0YSB3cml0dGVuIGluIHxidWZ8IGlzIE5PVAorICogYmFzZTY0dXJsIGVuY29kZWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZW5jb2RpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbiB8YnVmfCwgb3Igb25lCisgKiBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8aXZ8IGNvbnRhaW5zIGR1cGxpY2F0ZSBzZXR0aW5ncyBJRCBvciBpbnZhbGlkIHZhbHVlLgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlNVRkZfQlVGU0laRWAKKyAqICAgICBUaGUgcHJvdmlkZWQgfGJ1Zmxlbnwgc2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgb3V0cHV0LgorICovCitOR0hUVFAyX0VYVEVSTiBzc2l6ZV90IG5naHR0cDJfcGFja19zZXR0aW5nc19wYXlsb2FkKAorICAgIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsIHNpemVfdCBuaXYpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHxsaWJfZXJyb3JfY29kZXwuICBUaGUKKyAqIHxsaWJfZXJyb3JfY29kZXwgbXVzdCBiZSBvbmUgb2YgdGhlIDplbnVtOmBuZ2h0dHAyX2Vycm9yYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gY29uc3QgY2hhciAqbmdodHRwMl9zdHJlcnJvcihpbnQgbGliX2Vycm9yX2NvZGUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIEhUVFAvMiBlcnJvciBjb2RlIHxlcnJvcl9jb2RlfAorICogKGUuZy4sIGBgUFJPVE9DT0xfRVJST1JgYCBpcyByZXR1cm5lZCBpZiBgYGVycm9yX2NvZGUgPT0KKyAqIE5HSFRUUDJfUFJPVE9DT0xfRVJST1JgYCkuICBJZiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgdW5rbm93biBmb3IKKyAqIGdpdmVuIHxlcnJvcl9jb2RlfCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHN0cmluZyBgYHVua25vd25gYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gY29uc3QgY2hhciAqbmdodHRwMl9odHRwMl9zdHJlcnJvcih1aW50MzJfdCBlcnJvcl9jb2RlKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBJbml0aWFsaXplcyB8cHJpX3NwZWN8IHdpdGggdGhlIHxzdHJlYW1faWR8IG9mIHRoZSBzdHJlYW0gdG8gZGVwZW5kCisgKiBvbiB3aXRoIHx3ZWlnaHR8IGFuZCBpdHMgZXhjbHVzaXZlIGZsYWcuICBJZiB8ZXhjbHVzaXZlfCBpcworICogbm9uemVybywgZXhjbHVzaXZlIGZsYWcgaXMgc2V0LgorICoKKyAqIFRoZSB8d2VpZ2h0fCBtdXN0IGJlIGluIFs6ZW51bTpgTkdIVFRQMl9NSU5fV0VJR0hUYCwKKyAqIDplbnVtOmBOR0hUVFAyX01BWF9XRUlHSFRgXSwgaW5jbHVzaXZlLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfcHJpb3JpdHlfc3BlY19pbml0KG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdlaWdodCwgaW50IGV4Y2x1c2l2ZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogSW5pdGlhbGl6ZXMgfHByaV9zcGVjfCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcy4gIFRoZSBkZWZhdWx0IHZhbHVlcworICogYXJlOiBzdHJlYW1faWQgPSAwLCB3ZWlnaHQgPSA6bWFjcm86YE5HSFRUUDJfREVGQVVMVF9XRUlHSFRgIGFuZAorICogZXhjbHVzaXZlID0gMC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9wcmlvcml0eV9zcGVjX2RlZmF1bHRfaW5pdChuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIHxwcmlfc3BlY3wgaXMgZmlsbGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9wcmlvcml0eV9zcGVjX2NoZWNrX2RlZmF1bHQoY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBIRUFERVJTIGZyYW1lIGFuZCBvcHRpb25hbGx5IG9uZSBvciBtb3JlIERBVEEgZnJhbWVzLgorICoKKyAqIFRoZSB8cHJpX3NwZWN8IGlzIHByaW9yaXR5IHNwZWNpZmljYXRpb24gb2YgdGhpcyByZXF1ZXN0LiAgYGBOVUxMYGAKKyAqIG1lYW5zIHRoZSBkZWZhdWx0IHByaW9yaXR5IChzZWUKKyAqIGBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KClgKS4gIFRvIHNwZWNpZnkgdGhlIHByaW9yaXR5LAorICogdXNlIGBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfaW5pdCgpYC4gIElmIHxwcmlfc3BlY3wgaXMgbm90IGBgTlVMTGBgLAorICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvcHkgaXRzIGRhdGEgbWVtYmVycy4KKyAqCisgKiBUaGUgYGBwcmlfc3BlYy0+d2VpZ2h0YGAgbXVzdCBiZSBpbiBbOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAsCisgKiA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYF0sIGluY2x1c2l2ZS4gIElmIGBgcHJpX3NwZWMtPndlaWdodGBgIGlzCisgKiBzdHJpY3RseSBsZXNzIHRoYW4gOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAsIGl0IGJlY29tZXMKKyAqIDplbnVtOmBOR0hUVFAyX01JTl9XRUlHSFRgLiAgSWYgaXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuCisgKiA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYCwgaXQgYmVjb21lcyA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYC4KKyAqCisgKiBUaGUgfG52YXwgaXMgYW4gYXJyYXkgb2YgbmFtZS92YWx1ZSBwYWlyIDp0eXBlOmBuZ2h0dHAyX252YCB3aXRoCisgKiB8bnZsZW58IGVsZW1lbnRzLiAgVGhlIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvIGluY2x1ZGUKKyAqIHJlcXVpcmVkIHBzZXVkby1oZWFkZXIgZmllbGRzIChoZWFkZXIgZmllbGQgd2hvc2UgbmFtZSBzdGFydHMgd2l0aAorICogIjoiKSBpbiB8bnZhfCBhbmQgbXVzdCBwbGFjZSBwc2V1ZG8taGVhZGVycyBiZWZvcmUgcmVndWxhciBoZWFkZXIKKyAqIGZpZWxkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgY29waWVzIG9mIGFsbCBuYW1lL3ZhbHVlIHBhaXJzIGluIHxudmF8LiAgSXQKKyAqIGFsc28gbG93ZXItY2FzZXMgYWxsIG5hbWVzIGluIHxudmF8LiAgVGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluCisgKiB8bnZhfCBpcyBwcmVzZXJ2ZWQuICBGb3IgaGVhZGVyIGZpZWxkcyB3aXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAgYW5kCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfVkFMVUVgIGFyZSBzZXQsIGhlYWRlciBmaWVsZCBuYW1lCisgKiBhbmQgdmFsdWUgYXJlIG5vdCBjb3BpZWQgcmVzcGVjdGl2ZWx5LiAgV2l0aAorICogOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUVgLCBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0bworICogcGFzcyBoZWFkZXIgZmllbGQgbmFtZSBpbiBsb3dlcmNhc2UuICBUaGUgYXBwbGljYXRpb24gc2hvdWxkCisgKiBtYWludGFpbiB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIHVudGlsCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCBvcgorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2tgIGlzIGNhbGxlZC4KKyAqCisgKiBIVFRQLzIgc3BlY2lmaWNhdGlvbiBoYXMgcmVxdWlyZW1lbnQgYWJvdXQgaGVhZGVyIGZpZWxkcyBpbiB0aGUKKyAqIHJlcXVlc3QgSEVBREVSUy4gIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIElmIHxkYXRhX3ByZHwgaXMgbm90IGBgTlVMTGBgLCBpdCBwcm92aWRlcyBkYXRhIHdoaWNoIHdpbGwgYmUgc2VudAorICogaW4gc3Vic2VxdWVudCBEQVRBIGZyYW1lcy4gIEluIHRoaXMgY2FzZSwgYSBtZXRob2QgdGhhdCBhbGxvd3MKKyAqIHJlcXVlc3QgbWVzc2FnZSBib2RpZXMKKyAqIChodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQpIG11c3QgYmUgc3BlY2lmaWVkCisgKiB3aXRoIGBgOm1ldGhvZGBgIGtleSBpbiB8bnZhfCAoZS5nLiBgYFBPU1RgYCkuICBUaGlzIGZ1bmN0aW9uIGRvZXMKKyAqIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgfGRhdGFfcHJkfC4gIFRoZSBmdW5jdGlvbiBjb3BpZXMgdGhlCisgKiBtZW1iZXJzIG9mIHRoZSB8ZGF0YV9wcmR8LiAgSWYgfGRhdGFfcHJkfCBpcyBgYE5VTExgYCwgSEVBREVSUyBoYXZlCisgKiBFTkRfU1RSRUFNIHNldC4gIFRoZSB8c3RyZWFtX3VzZXJfZGF0YXwgaXMgZGF0YSBhc3NvY2lhdGVkIHRvIHRoZQorICogc3RyZWFtIG9wZW5lZCBieSB0aGlzIHJlcXVlc3QgYW5kIGNhbiBiZSBhbiBhcmJpdHJhcnkgcG9pbnRlciwKKyAqIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgbGF0ZXIgYnkKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV91c2VyX2RhdGEoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFzc2lnbmVkIHN0cmVhbSBJRCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mCisgKiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX1NUUkVBTV9JRF9OT1RfQVZBSUxBQkxFYAorICogICAgIE5vIHN0cmVhbSBJRCBpcyBhdmFpbGFibGUgYmVjYXVzZSBtYXhpbXVtIHN0cmVhbSBJRCB3YXMKKyAqICAgICByZWFjaGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVHJ5aW5nIHRvIGRlcGVuZCBvbiBpdHNlbGYgKG5ldyBzdHJlYW0gSUQgZXF1YWxzCisgKiAgICAgYGBwcmlfc3BlYy0+c3RyZWFtX2lkYGApLgorICogOmVudW06YE5HSFRUUDJfRVJSX1BST1RPYAorICogICAgIFRoZSB8c2Vzc2lvbnwgaXMgc2VydmVyIHNlc3Npb24uCisgKgorICogLi4gd2FybmluZzo6CisgKgorICogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYXNzaWduZWQgc3RyZWFtIElEIGlmIGl0IHN1Y2NlZWRzLiAgQnV0CisgKiAgIHRoYXQgc3RyZWFtIGlzIG5vdCBjcmVhdGVkIHlldC4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IG5vdCBzdWJtaXQKKyAqICAgZnJhbWUgdG8gdGhhdCBzdHJlYW0gSUQgYmVmb3JlCisgKiAgIDp0eXBlOmBuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrYCBpcyBjYWxsZWQgZm9yIHRoaXMKKyAqICAgZnJhbWUuICBUaGlzIG1lYW5zIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV91c2VyX2RhdGEoKWAgZG9lcworICogICBub3Qgd29yayBiZWZvcmUgdGhlIGNhbGxiYWNrLiAgQnV0CisgKiAgIGBuZ2h0dHAyX3Nlc3Npb25fc2V0X3N0cmVhbV91c2VyX2RhdGEoKWAgaGFuZGxlcyB0aGlzIHNpdHVhdGlvbgorICogICBzcGVjaWFsbHksIGFuZCBpdCBjYW4gc2V0IGRhdGEgdG8gYSBzdHJlYW0gZHVyaW5nIHRoaXMgcGVyaW9kLgorICoKKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdCBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwgY29uc3QgbmdodHRwMl9kYXRhX3Byb3ZpZGVyICpkYXRhX3ByZCwKKyAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIHJlc3BvbnNlIEhFQURFUlMgZnJhbWUgYW5kIG9wdGlvbmFsbHkgb25lIG9yIG1vcmUgREFUQQorICogZnJhbWVzIGFnYWluc3QgdGhlIHN0cmVhbSB8c3RyZWFtX2lkfC4KKyAqCisgKiBUaGUgfG52YXwgaXMgYW4gYXJyYXkgb2YgbmFtZS92YWx1ZSBwYWlyIDp0eXBlOmBuZ2h0dHAyX252YCB3aXRoCisgKiB8bnZsZW58IGVsZW1lbnRzLiAgVGhlIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvIGluY2x1ZGUKKyAqIHJlcXVpcmVkIHBzZXVkby1oZWFkZXIgZmllbGRzIChoZWFkZXIgZmllbGQgd2hvc2UgbmFtZSBzdGFydHMgd2l0aAorICogIjoiKSBpbiB8bnZhfCBhbmQgbXVzdCBwbGFjZSBwc2V1ZG8taGVhZGVycyBiZWZvcmUgcmVndWxhciBoZWFkZXIKKyAqIGZpZWxkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgY29waWVzIG9mIGFsbCBuYW1lL3ZhbHVlIHBhaXJzIGluIHxudmF8LiAgSXQKKyAqIGFsc28gbG93ZXItY2FzZXMgYWxsIG5hbWVzIGluIHxudmF8LiAgVGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluCisgKiB8bnZhfCBpcyBwcmVzZXJ2ZWQuICBGb3IgaGVhZGVyIGZpZWxkcyB3aXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAgYW5kCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfVkFMVUVgIGFyZSBzZXQsIGhlYWRlciBmaWVsZCBuYW1lCisgKiBhbmQgdmFsdWUgYXJlIG5vdCBjb3BpZWQgcmVzcGVjdGl2ZWx5LiAgV2l0aAorICogOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUVgLCBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0bworICogcGFzcyBoZWFkZXIgZmllbGQgbmFtZSBpbiBsb3dlcmNhc2UuICBUaGUgYXBwbGljYXRpb24gc2hvdWxkCisgKiBtYWludGFpbiB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIHVudGlsCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCBvcgorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2tgIGlzIGNhbGxlZC4KKyAqCisgKiBIVFRQLzIgc3BlY2lmaWNhdGlvbiBoYXMgcmVxdWlyZW1lbnQgYWJvdXQgaGVhZGVyIGZpZWxkcyBpbiB0aGUKKyAqIHJlc3BvbnNlIEhFQURFUlMuICBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBJZiB8ZGF0YV9wcmR8IGlzIG5vdCBgYE5VTExgYCwgaXQgcHJvdmlkZXMgZGF0YSB3aGljaCB3aWxsIGJlIHNlbnQKKyAqIGluIHN1YnNlcXVlbnQgREFUQSBmcmFtZXMuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwCisgKiBvZiB0aGUgfGRhdGFfcHJkfC4gIFRoZSBmdW5jdGlvbiBjb3BpZXMgdGhlIG1lbWJlcnMgb2YgdGhlCisgKiB8ZGF0YV9wcmR8LiAgSWYgfGRhdGFfcHJkfCBpcyBgYE5VTExgYCwgSEVBREVSUyB3aWxsIGhhdmUKKyAqIEVORF9TVFJFQU0gZmxhZyBzZXQuCisgKgorICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgYXMgbm9ybWFsIEhUVFAgcmVzcG9uc2UgYW5kIHB1c2ggcmVzcG9uc2UuCisgKiBXaGVuIHB1c2hpbmcgYSByZXNvdXJjZSB1c2luZyB0aGlzIGZ1bmN0aW9uLCB0aGUgfHNlc3Npb258IG11c3QgYmUKKyAqIGNvbmZpZ3VyZWQgdXNpbmcgYG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3KClgIG9yIGl0cyB2YXJpYW50cyBhbmQKKyAqIHRoZSB0YXJnZXQgc3RyZWFtIGRlbm90ZWQgYnkgdGhlIHxzdHJlYW1faWR8IG11c3QgYmUgcmVzZXJ2ZWQgdXNpbmcKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9wdXNoX3Byb21pc2UoKWAuCisgKgorICogVG8gc2VuZCBub24tZmluYWwgcmVzcG9uc2UgaGVhZGVycyAoZS5nLiwgSFRUUCBzdGF0dXMgMTAxKSwgZG9uJ3QKKyAqIHVzZSB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBoYWxmLWNsb3NlcyB0aGUgb3V0Ym91bmQKKyAqIHN0cmVhbS4gIEluc3RlYWQsIHVzZSBgbmdodHRwMl9zdWJtaXRfaGVhZGVycygpYCBmb3IgdGhpcyBwdXJwb3NlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfHN0cmVhbV9pZHwgaXMgMC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9EQVRBX0VYSVNUYAorICogICAgIERBVEEgb3IgSEVBREVSUyBoYXMgYmVlbiBhbHJlYWR5IHN1Ym1pdHRlZCBhbmQgbm90IGZ1bGx5CisgKiAgICAgcHJvY2Vzc2VkIHlldC4gIE5vcm1hbGx5LCB0aGlzIGRvZXMgbm90IGhhcHBlbiwgYnV0IHdoZW4KKyAqICAgICBhcHBsaWNhdGlvbiB3cm9uZ2x5IGNhbGxzIGBuZ2h0dHAyX3N1Ym1pdF9yZXNwb25zZSgpYCB0d2ljZSwKKyAqICAgICB0aGlzIG1heSBoYXBwZW4uCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfUFJPVE9gCisgKiAgICAgVGhlIHxzZXNzaW9ufCBpcyBjbGllbnQgc2Vzc2lvbi4KKyAqCisgKiAuLiB3YXJuaW5nOjoKKyAqCisgKiAgIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB0d2ljZSBmb3IgdGhlIHNhbWUgc3RyZWFtIElEIG1heSBsZWFkIHRvCisgKiAgIHByb2dyYW0gY3Jhc2guICBJdCBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCB0byBhIHByb2dyYW1taW5nIGVycm9yCisgKiAgIHRvIGNvbW1pdCByZXNwb25zZSB0d2ljZS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3N1Ym1pdF9yZXNwb25zZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIHRyYWlsZXIgZmllbGRzIEhFQURFUlMgYWdhaW5zdCB0aGUgc3RyZWFtIHxzdHJlYW1faWR8LgorICoKKyAqIFRoZSB8bnZhfCBpcyBhbiBhcnJheSBvZiBuYW1lL3ZhbHVlIHBhaXIgOnR5cGU6YG5naHR0cDJfbnZgIHdpdGgKKyAqIHxudmxlbnwgZWxlbWVudHMuICBUaGUgYXBwbGljYXRpb24gbXVzdCBub3QgaW5jbHVkZSBwc2V1ZG8taGVhZGVyCisgKiBmaWVsZHMgKGhlYWRlcnMgd2hvc2UgbmFtZXMgc3RhcnRzIHdpdGggIjoiKSBpbiB8bnZhfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgY29waWVzIG9mIGFsbCBuYW1lL3ZhbHVlIHBhaXJzIGluIHxudmF8LiAgSXQKKyAqIGFsc28gbG93ZXItY2FzZXMgYWxsIG5hbWVzIGluIHxudmF8LiAgVGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluCisgKiB8bnZhfCBpcyBwcmVzZXJ2ZWQuICBGb3IgaGVhZGVyIGZpZWxkcyB3aXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAgYW5kCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfVkFMVUVgIGFyZSBzZXQsIGhlYWRlciBmaWVsZCBuYW1lCisgKiBhbmQgdmFsdWUgYXJlIG5vdCBjb3BpZWQgcmVzcGVjdGl2ZWx5LiAgV2l0aAorICogOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUVgLCBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0bworICogcGFzcyBoZWFkZXIgZmllbGQgbmFtZSBpbiBsb3dlcmNhc2UuICBUaGUgYXBwbGljYXRpb24gc2hvdWxkCisgKiBtYWludGFpbiB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIHVudGlsCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCBvcgorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2tgIGlzIGNhbGxlZC4KKyAqCisgKiBGb3Igc2VydmVyLCB0cmFpbGVyIGZpZWxkcyBtdXN0IGZvbGxvdyByZXNwb25zZSBIRUFERVJTIG9yIHJlc3BvbnNlCisgKiBEQVRBIHdpdGhvdXQgRU5EX1NUUkVBTSBmbGF0IHNldC4gIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGVuZm9yY2UKKyAqIHRoaXMgcmVxdWlyZW1lbnQsIGFuZCBhcHBsaWNhdGlvbnMgc2hvdWxkIGRvIHRoaXMgZm9yIHRoZW1zZWx2ZXMuCisgKiBJZiBgbmdodHRwMl9zdWJtaXRfdHJhaWxlcigpYCBpcyBjYWxsZWQgYmVmb3JlIGFueSByZXNwb25zZSBIRUFERVJTCisgKiBzdWJtaXNzaW9uICh1c3VhbGx5IGJ5IGBuZ2h0dHAyX3N1Ym1pdF9yZXNwb25zZSgpYCksIHRoZSBjb250ZW50IG9mCisgKiB8bnZhfCB3aWxsIGJlIHNlbnQgYXMgcmVzcG9uc2UgaGVhZGVycywgd2hpY2ggd2lsbCByZXN1bHQgaW4gZXJyb3IuCisgKgorICogVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0IHdpdGggYG5naHR0cDJfc3VibWl0X2hlYWRlcnMoKWAsCisgKiB3aXRoIGZsYWdzID0gOmVudW06YE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNYCBhbmQgYm90aCBwcmlfc3BlYyBhbmQKKyAqIHN0cmVhbV91c2VyX2RhdGEgdG8gTlVMTC4KKyAqCisgKiBUbyBzdWJtaXQgdHJhaWxlciBmaWVsZHMgYWZ0ZXIgYG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKClgIGlzCisgKiBjYWxsZWQsIHRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gc3BlY2lmeQorICogOnR5cGU6YG5naHR0cDJfZGF0YV9wcm92aWRlcmAgdG8gYG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKClgLgorICogSW5zaWRlIG9mIDp0eXBlOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgLCB3aGVuIHNldHRpbmcKKyAqIDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19FT0ZgLCBhbHNvIHNldAorICogOmVudW06YE5HSFRUUDJfREFUQV9GTEFHX05PX0VORF9TVFJFQU1gLiAgQWZ0ZXIgdGhhdCwgdGhlCisgKiBhcHBsaWNhdGlvbiBjYW4gc2VuZCB0cmFpbGVyIGZpZWxkcyB1c2luZworICogYG5naHR0cDJfc3VibWl0X3RyYWlsZXIoKWAuICBgbmdodHRwMl9zdWJtaXRfdHJhaWxlcigpYCBjYW4gYmUgdXNlZAorICogaW5zaWRlIDp0eXBlOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzIGFuZCB8c3RyZWFtX2lkfCBpcyAtMS4KKyAqIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUKKyAqIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyAwLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfdHJhaWxlcihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIEhFQURFUlMgZnJhbWUuIFRoZSB8ZmxhZ3N8IGlzIGJpdHdpc2UgT1Igb2YgdGhlCisgKiBmb2xsb3dpbmcgdmFsdWVzOgorICoKKyAqICogOmVudW06YE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNYAorICoKKyAqIElmIHxmbGFnc3wgaW5jbHVkZXMgOmVudW06YE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNYCwgdGhpcyBmcmFtZSBoYXMKKyAqIEVORF9TVFJFQU0gZmxhZyBzZXQuCisgKgorICogVGhlIGxpYnJhcnkgaGFuZGxlcyB0aGUgQ09OVElOVUFUSU9OIGZyYW1lIGludGVybmFsbHkgYW5kIGl0CisgKiBjb3JyZWN0bHkgc2V0cyBFTkRfSEVBREVSUyB0byB0aGUgbGFzdCBzZXF1ZW5jZSBvZiB0aGUgUFVTSF9QUk9NSVNFCisgKiBvciBDT05USU5VQVRJT04gZnJhbWUuCisgKgorICogSWYgdGhlIHxzdHJlYW1faWR8IGlzIC0xLCB0aGlzIGZyYW1lIGlzIGFzc3VtZWQgYXMgcmVxdWVzdCAoaS5lLiwKKyAqIHJlcXVlc3QgSEVBREVSUyBmcmFtZSB3aGljaCBvcGVucyBuZXcgc3RyZWFtKS4gIEluIHRoaXMgY2FzZSwgdGhlCisgKiBhc3NpZ25lZCBzdHJlYW0gSUQgd2lsbCBiZSByZXR1cm5lZC4gIE90aGVyd2lzZSwgc3BlY2lmeSBzdHJlYW0gSUQKKyAqIGluIHxzdHJlYW1faWR8LgorICoKKyAqIFRoZSB8cHJpX3NwZWN8IGlzIHByaW9yaXR5IHNwZWNpZmljYXRpb24gb2YgdGhpcyByZXF1ZXN0LiAgYGBOVUxMYGAKKyAqIG1lYW5zIHRoZSBkZWZhdWx0IHByaW9yaXR5IChzZWUKKyAqIGBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KClgKS4gIFRvIHNwZWNpZnkgdGhlIHByaW9yaXR5LAorICogdXNlIGBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfaW5pdCgpYC4gIElmIHxwcmlfc3BlY3wgaXMgbm90IGBgTlVMTGBgLAorICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvcHkgaXRzIGRhdGEgbWVtYmVycy4KKyAqCisgKiBUaGUgYGBwcmlfc3BlYy0+d2VpZ2h0YGAgbXVzdCBiZSBpbiBbOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAsCisgKiA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYF0sIGluY2x1c2l2ZS4gIElmIGBgcHJpX3NwZWMtPndlaWdodGBgIGlzCisgKiBzdHJpY3RseSBsZXNzIHRoYW4gOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAsIGl0IGJlY29tZXMKKyAqIDplbnVtOmBOR0hUVFAyX01JTl9XRUlHSFRgLiAgSWYgaXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuCisgKiA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYCwgaXQgYmVjb21lcyA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYC4KKyAqCisgKiBUaGUgfG52YXwgaXMgYW4gYXJyYXkgb2YgbmFtZS92YWx1ZSBwYWlyIDp0eXBlOmBuZ2h0dHAyX252YCB3aXRoCisgKiB8bnZsZW58IGVsZW1lbnRzLiAgVGhlIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvIGluY2x1ZGUKKyAqIHJlcXVpcmVkIHBzZXVkby1oZWFkZXIgZmllbGRzIChoZWFkZXIgZmllbGQgd2hvc2UgbmFtZSBzdGFydHMgd2l0aAorICogIjoiKSBpbiB8bnZhfCBhbmQgbXVzdCBwbGFjZSBwc2V1ZG8taGVhZGVycyBiZWZvcmUgcmVndWxhciBoZWFkZXIKKyAqIGZpZWxkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgY29waWVzIG9mIGFsbCBuYW1lL3ZhbHVlIHBhaXJzIGluIHxudmF8LiAgSXQKKyAqIGFsc28gbG93ZXItY2FzZXMgYWxsIG5hbWVzIGluIHxudmF8LiAgVGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluCisgKiB8bnZhfCBpcyBwcmVzZXJ2ZWQuICBGb3IgaGVhZGVyIGZpZWxkcyB3aXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAgYW5kCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfVkFMVUVgIGFyZSBzZXQsIGhlYWRlciBmaWVsZCBuYW1lCisgKiBhbmQgdmFsdWUgYXJlIG5vdCBjb3BpZWQgcmVzcGVjdGl2ZWx5LiAgV2l0aAorICogOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUVgLCBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0bworICogcGFzcyBoZWFkZXIgZmllbGQgbmFtZSBpbiBsb3dlcmNhc2UuICBUaGUgYXBwbGljYXRpb24gc2hvdWxkCisgKiBtYWludGFpbiB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIHVudGlsCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCBvcgorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2tgIGlzIGNhbGxlZC4KKyAqCisgKiBUaGUgfHN0cmVhbV91c2VyX2RhdGF8IGlzIGEgcG9pbnRlciB0byBhbiBhcmJpdHJhcnkgZGF0YSB3aGljaCBpcworICogYXNzb2NpYXRlZCB0byB0aGUgc3RyZWFtIHRoaXMgZnJhbWUgd2lsbCBvcGVuLiAgVGhlcmVmb3JlIGl0IGlzCisgKiBvbmx5IHVzZWQgaWYgdGhpcyBmcmFtZSBvcGVucyBzdHJlYW1zLCBpbiBvdGhlciB3b3JkcywgaXQgY2hhbmdlcworICogc3RyZWFtIHN0YXRlIGZyb20gaWRsZSBvciByZXNlcnZlZCB0byBvcGVuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbG93LWxldmVsIGluIGEgc2Vuc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gY29kZSBjYW4KKyAqIHNwZWNpZnkgZmxhZ3MgZGlyZWN0bHkuICBGb3IgdXN1YWwgSFRUUCByZXF1ZXN0LAorICogYG5naHR0cDJfc3VibWl0X3JlcXVlc3QoKWAgaXMgdXNlZnVsLiAgTGlrZXdpc2UsIGZvciBIVFRQIHJlc3BvbnNlLAorICogcHJlZmVyIGBuZ2h0dHAyX3N1Ym1pdF9yZXNwb25zZSgpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbmV3bHkgYXNzaWduZWQgc3RyZWFtIElEIGlmIGl0IHN1Y2NlZWRzIGFuZAorICogfHN0cmVhbV9pZHwgaXMgLTEuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0CisgKiBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfU1RSRUFNX0lEX05PVF9BVkFJTEFCTEVgCisgKiAgICAgTm8gc3RyZWFtIElEIGlzIGF2YWlsYWJsZSBiZWNhdXNlIG1heGltdW0gc3RyZWFtIElEIHdhcworICogICAgIHJlYWNoZWQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfHN0cmVhbV9pZHwgaXMgMDsgb3IgdHJ5aW5nIHRvIGRlcGVuZCBvbiBpdHNlbGYgKHN0cmVhbSBJRAorICogICAgIGVxdWFscyBgYHByaV9zcGVjLT5zdHJlYW1faWRgYCkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfREFUQV9FWElTVGAKKyAqICAgICBEQVRBIG9yIEhFQURFUlMgaGFzIGJlZW4gYWxyZWFkeSBzdWJtaXR0ZWQgYW5kIG5vdCBmdWxseQorICogICAgIHByb2Nlc3NlZCB5ZXQuICBUaGlzIGhhcHBlbnMgaWYgc3RyZWFtIGRlbm90ZWQgYnkgfHN0cmVhbV9pZHwKKyAqICAgICBpcyBpbiByZXNlcnZlZCBzdGF0ZS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9QUk9UT2AKKyAqICAgICBUaGUgfHN0cmVhbV9pZHwgaXMgLTEsIGFuZCB8c2Vzc2lvbnwgaXMgc2VydmVyIHNlc3Npb24uCisgKgorICogLi4gd2FybmluZzo6CisgKgorICogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYXNzaWduZWQgc3RyZWFtIElEIGlmIGl0IHN1Y2NlZWRzIGFuZAorICogICB8c3RyZWFtX2lkfCBpcyAtMS4gIEJ1dCB0aGF0IHN0cmVhbSBpcyBub3Qgb3BlbmVkIHlldC4gIFRoZQorICogICBhcHBsaWNhdGlvbiBtdXN0IG5vdCBzdWJtaXQgZnJhbWUgdG8gdGhhdCBzdHJlYW0gSUQgYmVmb3JlCisgKiAgIDp0eXBlOmBuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrYCBpcyBjYWxsZWQgZm9yIHRoaXMKKyAqICAgZnJhbWUuCisgKgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90IG5naHR0cDJfc3VibWl0X2hlYWRlcnMoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLCBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwKKyAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIG9uZSBvciBtb3JlIERBVEEgZnJhbWVzIHRvIHRoZSBzdHJlYW0gfHN0cmVhbV9pZHwuICBUaGUKKyAqIGRhdGEgdG8gYmUgc2VudCBhcmUgcHJvdmlkZWQgYnkgfGRhdGFfcHJkfC4gIElmIHxmbGFnc3wgY29udGFpbnMKKyAqIDplbnVtOmBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTWAsIHRoZSBsYXN0IERBVEEgZnJhbWUgaGFzIEVORF9TVFJFQU0KKyAqIGZsYWcgc2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHxkYXRhX3ByZHwuICBUaGUKKyAqIGZ1bmN0aW9uIGNvcGllcyB0aGUgbWVtYmVycyBvZiB0aGUgfGRhdGFfcHJkfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0RBVEFfRVhJU1RgCisgKiAgICAgREFUQSBvciBIRUFERVJTIGhhcyBiZWVuIGFscmVhZHkgc3VibWl0dGVkIGFuZCBub3QgZnVsbHkKKyAqICAgICBwcm9jZXNzZWQgeWV0LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzdHJlYW1faWR8IGlzIDAuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRGAKKyAqICAgICBUaGUgc3RyZWFtIHdhcyBhbHJlYWR5IGNsb3NlZDsgb3IgdGhlIHxzdHJlYW1faWR8IGlzIGludmFsaWQuCisgKgorICogLi4gbm90ZTo6CisgKgorICogICBDdXJyZW50bHksIG9ubHkgb25lIERBVEEgb3IgSEVBREVSUyBpcyBhbGxvd2VkIGZvciBhIHN0cmVhbSBhdCBhCisgKiAgIHRpbWUuICBTdWJtaXR0aW5nIHRoZXNlIGZyYW1lcyBtb3JlIHRoYW4gb25jZSBiZWZvcmUgZmlyc3QgREFUQQorICogICBvciBIRUFERVJTIGlzIGZpbmlzaGVkIHJlc3VsdHMgaW4gOmVudW06YE5HSFRUUDJfRVJSX0RBVEFfRVhJU1RgCisgKiAgIGVycm9yIGNvZGUuICBUaGUgZWFybGllc3QgY2FsbGJhY2sgd2hpY2ggdGVsbHMgdGhhdCBwcmV2aW91cworICogICBmcmFtZSBpcyBkb25lIGlzIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgLiAgSW4gc2lkZQorICogICB0aGF0IGNhbGxiYWNrLCBuZXcgZGF0YSBjYW4gYmUgc3VibWl0dGVkIHVzaW5nCisgKiAgIGBuZ2h0dHAyX3N1Ym1pdF9kYXRhKClgLiAgT2YgY291cnNlLCBhbGwgZGF0YSBleGNlcHQgZm9yIGxhc3Qgb25lCisgKiAgIG11c3Qgbm90IGhhdmUgOmVudW06YE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNYCBmbGFnIHNldCBpbgorICogICB8ZmxhZ3N8LiAgVGhpcyBzb3VuZHMgYSBiaXQgY29tcGxpY2F0ZWQsIGFuZCB3ZSByZWNvbW1lbmQgdG8gdXNlCisgKiAgIGBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KClgIGFuZCBgbmdodHRwMl9zdWJtaXRfcmVzcG9uc2UoKWAgdG8KKyAqICAgYXZvaWQgdGhpcyBjYXNjYWRpbmcgaXNzdWUuICBUaGUgZXhwZXJpZW5jZSBzaG93cyB0aGF0IGZvciBIVFRQCisgKiAgIHVzZSwgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgZW5vdWdoIHRvIGltcGxlbWVudCBib3RoIGNsaWVudCBhbmQKKyAqICAgc2VydmVyLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZGF0YV9wcm92aWRlciAqZGF0YV9wcmQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgUFJJT1JJVFkgZnJhbWUgdG8gY2hhbmdlIHRoZSBwcmlvcml0eSBvZiBzdHJlYW0gfHN0cmVhbV9pZHwKKyAqIHRvIHRoZSBwcmlvcml0eSBzcGVjaWZpY2F0aW9uIHxwcmlfc3BlY3wuCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGUgfHByaV9zcGVjfCBpcyBwcmlvcml0eSBzcGVjaWZpY2F0aW9uIG9mIHRoaXMgcmVxdWVzdC4gIGBgTlVMTGBgCisgKiBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBmdW5jdGlvbi4gVG8gc3BlY2lmeSB0aGUgcHJpb3JpdHksIHVzZQorICogYG5naHR0cDJfcHJpb3JpdHlfc3BlY19pbml0KClgLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGNvcHkgaXRzIGRhdGEKKyAqIG1lbWJlcnMuCisgKgorICogVGhlIGBgcHJpX3NwZWMtPndlaWdodGBgIG11c3QgYmUgaW4gWzplbnVtOmBOR0hUVFAyX01JTl9XRUlHSFRgLAorICogOmVudW06YE5HSFRUUDJfTUFYX1dFSUdIVGBdLCBpbmNsdXNpdmUuICBJZiBgYHByaV9zcGVjLT53ZWlnaHRgYCBpcworICogc3RyaWN0bHkgbGVzcyB0aGFuIDplbnVtOmBOR0hUVFAyX01JTl9XRUlHSFRgLCBpdCBiZWNvbWVzCisgKiA6ZW51bTpgTkdIVFRQMl9NSU5fV0VJR0hUYC4gIElmIGl0IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbgorICogOmVudW06YE5HSFRUUDJfTUFYX1dFSUdIVGAsIGl0IGJlY29tZXMgOmVudW06YE5HSFRUUDJfTUFYX1dFSUdIVGAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyAwOyBvciB0aGUgfHByaV9zcGVjfCBpcyBOVUxMOyBvciB0cnlpbmcgdG8KKyAqICAgICBkZXBlbmQgb24gaXRzZWxmLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc3VibWl0X3ByaW9yaXR5KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBSU1RfU1RSRUFNIGZyYW1lIHRvIGNhbmNlbC9yZWplY3QgdGhlIHN0cmVhbSB8c3RyZWFtX2lkfAorICogd2l0aCB0aGUgZXJyb3IgY29kZSB8ZXJyb3JfY29kZXwuCisgKgorICogVGhlIHByZS1kZWZpbmVkIGVycm9yIGNvZGUgaXMgb25lIG9mIDplbnVtOmBuZ2h0dHAyX2Vycm9yX2NvZGVgLgorICoKKyAqIFRoZSB8ZmxhZ3N8IGlzIGN1cnJlbnRseSBpZ25vcmVkIGFuZCBzaG91bGQgYmUKKyAqIDplbnVtOmBOR0hUVFAyX0ZMQUdfTk9ORWAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyAwLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN0b3JlcyBsb2NhbCBzZXR0aW5ncyBhbmQgc3VibWl0cyBTRVRUSU5HUyBmcmFtZS4gIFRoZSB8aXZ8IGlzIHRoZQorICogcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgOnR5cGU6YG5naHR0cDJfc2V0dGluZ3NfZW50cnlgLiAgVGhlIHxuaXZ8CisgKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiA6dHlwZTpgbmdodHRwMl9zZXR0aW5nc19lbnRyeWAuCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSB8aXZ8LiAgVGhpcyBmdW5jdGlvbgorICogY29waWVzIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIHxpdnwuCisgKgorICogV2hpbGUgdXBkYXRpbmcgaW5kaXZpZHVhbCBzdHJlYW0ncyBsb2NhbCB3aW5kb3cgc2l6ZSwgaWYgdGhlIHdpbmRvdworICogc2l6ZSBiZWNvbWVzIHN0cmljdGx5IGxhcmdlciB0aGFuIE5HSFRUUDJfTUFYX1dJTkRPV19TSVpFLAorICogUlNUX1NUUkVBTSBpcyBpc3N1ZWQgYWdhaW5zdCBzdWNoIGEgc3RyZWFtLgorICoKKyAqIFNFVFRJTkdTIHdpdGggOmVudW06YE5HSFRUUDJfRkxBR19BQ0tgIGlzIGF1dG9tYXRpY2FsbHkgc3VibWl0dGVkCisgKiBieSB0aGUgbGlicmFyeSBhbmQgYXBwbGljYXRpb24gY291bGQgbm90IHNlbmQgaXQgYXQgaXRzIHdpbGwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfGl2fCBjb250YWlucyBpbnZhbGlkIHZhbHVlIChlLmcuLCBpbml0aWFsIHdpbmRvdyBzaXplCisgKiAgICAgc3RyaWN0bHkgZ3JlYXRlciB0aGFuICgxIDw8IDMxKSAtIDEuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc3VibWl0X3NldHRpbmdzKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXYpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgUFVTSF9QUk9NSVNFIGZyYW1lLgorICoKKyAqIFRoZSB8ZmxhZ3N8IGlzIGN1cnJlbnRseSBpZ25vcmVkLiAgVGhlIGxpYnJhcnkgaGFuZGxlcyB0aGUKKyAqIENPTlRJTlVBVElPTiBmcmFtZSBpbnRlcm5hbGx5IGFuZCBpdCBjb3JyZWN0bHkgc2V0cyBFTkRfSEVBREVSUyB0bworICogdGhlIGxhc3Qgc2VxdWVuY2Ugb2YgdGhlIFBVU0hfUFJPTUlTRSBvciBDT05USU5VQVRJT04gZnJhbWUuCisgKgorICogVGhlIHxzdHJlYW1faWR8IG11c3QgYmUgY2xpZW50IGluaXRpYXRlZCBzdHJlYW0gSUQuCisgKgorICogVGhlIHxudmF8IGlzIGFuIGFycmF5IG9mIG5hbWUvdmFsdWUgcGFpciA6dHlwZTpgbmdodHRwMl9udmAgd2l0aAorICogfG52bGVufCBlbGVtZW50cy4gIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0byBpbmNsdWRlCisgKiByZXF1aXJlZCBwc2V1ZG8taGVhZGVyIGZpZWxkcyAoaGVhZGVyIGZpZWxkIHdob3NlIG5hbWUgc3RhcnRzIHdpdGgKKyAqICI6IikgaW4gfG52YXwgYW5kIG11c3QgcGxhY2UgcHNldWRvLWhlYWRlcnMgYmVmb3JlIHJlZ3VsYXIgaGVhZGVyCisgKiBmaWVsZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGNvcGllcyBvZiBhbGwgbmFtZS92YWx1ZSBwYWlycyBpbiB8bnZhfC4gIEl0CisgKiBhbHNvIGxvd2VyLWNhc2VzIGFsbCBuYW1lcyBpbiB8bnZhfC4gIFRoZSBvcmRlciBvZiBlbGVtZW50cyBpbgorICogfG52YXwgaXMgcHJlc2VydmVkLiAgRm9yIGhlYWRlciBmaWVsZHMgd2l0aAorICogOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUVgIGFuZAorICogOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX1ZBTFVFYCBhcmUgc2V0LCBoZWFkZXIgZmllbGQgbmFtZQorICogYW5kIHZhbHVlIGFyZSBub3QgY29waWVkIHJlc3BlY3RpdmVseS4gIFdpdGgKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FYCwgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgdG8KKyAqIHBhc3MgaGVhZGVyIGZpZWxkIG5hbWUgaW4gbG93ZXJjYXNlLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZAorICogbWFpbnRhaW4gdGhlIHJlZmVyZW5jZXMgdG8gdGhlbSB1bnRpbAorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFja2Agb3IKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrYCBpcyBjYWxsZWQuCisgKgorICogVGhlIHxwcm9taXNlZF9zdHJlYW1fdXNlcl9kYXRhfCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJiaXRyYXJ5IGRhdGEKKyAqIHdoaWNoIGlzIGFzc29jaWF0ZWQgdG8gdGhlIHByb21pc2VkIHN0cmVhbSB0aGlzIGZyYW1lIHdpbGwgb3BlbiBhbmQKKyAqIG1ha2UgaXQgaW4gcmVzZXJ2ZWQgc3RhdGUuICBJdCBpcyBhdmFpbGFibGUgdXNpbmcKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV91c2VyX2RhdGEoKWAuICBUaGUgYXBwbGljYXRpb24gY2FuCisgKiBhY2Nlc3MgaXQgaW4gOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIGFuZAorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFja2Agb2YgdGhpcyBmcmFtZS4KKyAqCisgKiBUaGUgY2xpZW50IHNpZGUgaXMgbm90IGFsbG93ZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisgKgorICogVG8gc3VibWl0IHJlc3BvbnNlIGhlYWRlcnMgYW5kIGRhdGEsIHVzZQorICogYG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKClgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhc3NpZ25lZCBwcm9taXNlZCBzdHJlYW0gSUQgaWYgaXQgc3VjY2VlZHMsCisgKiBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9QUk9UT2AKKyAqICAgICBUaGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkIHdoZW4gfHNlc3Npb258IGlzIGluaXRpYWxpemVkIGFzCisgKiAgICAgY2xpZW50LgorICogOmVudW06YE5HSFRUUDJfRVJSX1NUUkVBTV9JRF9OT1RfQVZBSUxBQkxFYAorICogICAgIE5vIHN0cmVhbSBJRCBpcyBhdmFpbGFibGUgYmVjYXVzZSBtYXhpbXVtIHN0cmVhbSBJRCB3YXMKKyAqICAgICByZWFjaGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzdHJlYW1faWR8IGlzIDA7IFRoZSB8c3RyZWFtX2lkfCBkb2VzIG5vdCBkZXNpZ25hdGUgc3RyZWFtCisgKiAgICAgdGhhdCBwZWVyIGluaXRpYXRlZC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VEYAorICogICAgIFRoZSBzdHJlYW0gd2FzIGFscmVhZHkgY2xvc2VkOyBvciB0aGUgfHN0cmVhbV9pZHwgaXMgaW52YWxpZC4KKyAqCisgKiAuLiB3YXJuaW5nOjoKKyAqCisgKiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhc3NpZ25lZCBwcm9taXNlZCBzdHJlYW0gSUQgaWYgaXQgc3VjY2VlZHMuCisgKiAgIEFzIG9mIDEuMTYuMCwgc3RyZWFtIG9iamVjdCBmb3IgcHVzaGVkIHJlc291cmNlIGlzIGNyZWF0ZWQgd2hlbgorICogICB0aGlzIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgSW4gdGhhdCBjYXNlLCB0aGUgYXBwbGljYXRpb24gY2FuIHN1Ym1pdAorICogICBwdXNoIHJlc3BvbnNlIGZvciB0aGUgcHJvbWlzZWQgZnJhbWUuCisgKgorICogICBJbiAxLjE1LjAgb3IgcHJpb3IgdmVyc2lvbnMsIHB1c2hlZCBzdHJlYW0gaXMgbm90IG9wZW5lZCB5ZXQgd2hlbgorICogICB0aGlzIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgVGhlIGFwcGxpY2F0aW9uIG11c3Qgbm90IHN1Ym1pdCBmcmFtZSB0bworICogICB0aGF0IHN0cmVhbSBJRCBiZWZvcmUgOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgCisgKiAgIGlzIGNhbGxlZCBmb3IgdGhpcyBmcmFtZS4KKyAqCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QgbmdodHRwMl9zdWJtaXRfcHVzaF9wcm9taXNlKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsCisgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4sIHZvaWQgKnByb21pc2VkX3N0cmVhbV91c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgUElORyBmcmFtZS4gIFlvdSBkb24ndCBoYXZlIHRvIHNlbmQgUElORyBiYWNrIHdoZW4geW91CisgKiByZWNlaXZlZCBQSU5HIGZyYW1lLiAgVGhlIGxpYnJhcnkgYXV0b21hdGljYWxseSBzdWJtaXRzIFBJTkcgZnJhbWUKKyAqIGluIHRoaXMgY2FzZS4KKyAqCisgKiBUaGUgfGZsYWdzfCBpcyBiaXR3aXNlIE9SIG9mIDAgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlLgorICoKKyAqICogOmVudW06YE5HSFRUUDJfRkxBR19BQ0tgCisgKgorICogVW5sZXNzIGBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fYXV0b19waW5nX2FjaygpYCBpcyB1c2VkLCB0aGUgfGZsYWdzfAorICogc2hvdWxkIGJlIDplbnVtOmBOR0hUVFAyX0ZMQUdfTk9ORWAuCisgKgorICogSWYgdGhlIHxvcGFxdWVfZGF0YXwgaXMgbm9uIGBgTlVMTGBgLCB0aGVuIGl0IHNob3VsZCBwb2ludCB0byB0aGUgOAorICogYnl0ZXMgYXJyYXkgb2YgbWVtb3J5IHRvIHNwZWNpZnkgb3BhcXVlIGRhdGEgdG8gc2VuZCB3aXRoIFBJTkcKKyAqIGZyYW1lLiAgSWYgdGhlIHxvcGFxdWVfZGF0YXwgaXMgYGBOVUxMYGAsIHplcm8tY2xlYXJlZCA4IGJ5dGVzIHdpbGwKKyAqIGJlIHNlbnQgYXMgb3BhcXVlIGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc3VibWl0X3BpbmcobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqb3BhcXVlX2RhdGEpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgR09BV0FZIGZyYW1lIHdpdGggdGhlIGxhc3Qgc3RyZWFtIElEIHxsYXN0X3N0cmVhbV9pZHwgYW5kCisgKiB0aGUgZXJyb3IgY29kZSB8ZXJyb3JfY29kZXwuCisgKgorICogVGhlIHByZS1kZWZpbmVkIGVycm9yIGNvZGUgaXMgb25lIG9mIDplbnVtOmBuZ2h0dHAyX2Vycm9yX2NvZGVgLgorICoKKyAqIFRoZSB8ZmxhZ3N8IGlzIGN1cnJlbnRseSBpZ25vcmVkIGFuZCBzaG91bGQgYmUKKyAqIDplbnVtOmBOR0hUVFAyX0ZMQUdfTk9ORWAuCisgKgorICogVGhlIHxsYXN0X3N0cmVhbV9pZHwgaXMgcGVlcidzIHN0cmVhbSBJRCBvciAwLiAgU28gaWYgfHNlc3Npb258IGlzCisgKiBpbml0aWFsaXplZCBhcyBjbGllbnQsIHxsYXN0X3N0cmVhbV9pZHwgbXVzdCBiZSBldmVuIG9yIDAuICBJZgorICogfHNlc3Npb258IGlzIGluaXRpYWxpemVkIGFzIHNlcnZlciwgfGxhc3Rfc3RyZWFtX2lkfCBtdXN0IGJlIG9kZCBvcgorICogMC4KKyAqCisgKiBUaGUgSFRUUC8yIHNwZWNpZmljYXRpb24gc2F5cyBsYXN0X3N0cmVhbV9pZCBtdXN0IG5vdCBiZSBpbmNyZWFzZWQKKyAqIGZyb20gdGhlIHZhbHVlIHByZXZpb3VzbHkgc2VudC4gIFNvIHRoZSBhY3R1YWwgdmFsdWUgc2VudCBhcworICogbGFzdF9zdHJlYW1faWQgaXMgdGhlIG1pbmltdW0gdmFsdWUgYmV0d2VlbiB0aGUgZ2l2ZW4KKyAqIHxsYXN0X3N0cmVhbV9pZHwgYW5kIHRoZSBsYXN0X3N0cmVhbV9pZCBwcmV2aW91c2x5IHNlbnQgdG8gdGhlCisgKiBwZWVyLgorICoKKyAqIElmIHRoZSB8b3BhcXVlX2RhdGF8IGlzIG5vdCBgYE5VTExgYCBhbmQgfG9wYXF1ZV9kYXRhX2xlbnwgaXMgbm90CisgKiB6ZXJvLCB0aG9zZSBkYXRhIHdpbGwgYmUgc2VudCBhcyBhZGRpdGlvbmFsIGRlYnVnIGRhdGEuICBUaGUKKyAqIGxpYnJhcnkgbWFrZXMgYSBjb3B5IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHBvaW50ZWQgYnkgfG9wYXF1ZV9kYXRhfAorICogd2l0aCB0aGUgbGVuZ3RoIHxvcGFxdWVfZGF0YV9sZW58LCBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8KKyAqIGtlZXAgdGhpcyBtZW1vcnkgYWZ0ZXIgdGhlIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLiAgSWYgdGhlCisgKiB8b3BhcXVlX2RhdGFfbGVufCBpcyAwLCB0aGUgfG9wYXF1ZV9kYXRhfCBjb3VsZCBiZSBgYE5VTExgYC4KKyAqCisgKiBBZnRlciBzdWNjZXNzZnVsIHRyYW5zbWlzc2lvbiBvZiBHT0FXQVksIGZvbGxvd2luZyB0aGluZ3MgaGFwcGVuLgorICogQWxsIGluY29taW5nIHN0cmVhbXMgaGF2aW5nIHN0cmljdGx5IG1vcmUgdGhhbiB8bGFzdF9zdHJlYW1faWR8IGFyZQorICogY2xvc2VkLiAgQWxsIGluY29taW5nIEhFQURFUlMgd2hpY2ggc3RhcnRzIG5ldyBzdHJlYW0gYXJlIHNpbXBseQorICogaWdub3JlZC4gIEFmdGVyIGFsbCBhY3RpdmUgc3RyZWFtcyBhcmUgaGFuZGxlZCwgYm90aAorICogYG5naHR0cDJfc2Vzc2lvbl93YW50X3JlYWQoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fd2FudF93cml0ZSgpYAorICogcmV0dXJuIDAgYW5kIHRoZSBhcHBsaWNhdGlvbiBjYW4gY2xvc2Ugc2Vzc2lvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxvcGFxdWVfZGF0YV9sZW58IGlzIHRvbyBsYXJnZTsgdGhlIHxsYXN0X3N0cmVhbV9pZHwgaXMKKyAqICAgICBpbnZhbGlkLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfZ29hd2F5KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBsYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqb3BhcXVlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvcGFxdWVfZGF0YV9sZW4pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIGxhc3Qgc3RyZWFtIElEIG9mIGEgc3RyZWFtIGZvciB3aGljaAorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2Agd2FzIGludm9rZWQgbW9zdCByZWNlbnRseS4KKyAqIFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBsYXN0X3N0cmVhbV9pZCBwYXJhbWV0ZXIgZm9yCisgKiBgbmdodHRwMl9zdWJtaXRfZ29hd2F5KClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbjIoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfbGFzdF9wcm9jX3N0cmVhbV9pZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgbm9uemVybyBpZiBuZXcgcmVxdWVzdCBjYW4gYmUgc2VudCBmcm9tIGxvY2FsIGVuZHBvaW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJuIDAgaWYgcmVxdWVzdCBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBzZXNzaW9uLgorICogVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyB3aHkgcmVxdWVzdCBpcyBub3QgYWxsb3dlZC4gIFNvbWUgb2YgdGhlCisgKiByZWFzb25zIGFyZTogc2Vzc2lvbiBpcyBzZXJ2ZXI7IHN0cmVhbSBJRCBoYXMgYmVlbiBzcGVudDsgR09BV0FZCisgKiBoYXMgYmVlbiBzZW50IG9yIHJlY2VpdmVkLgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiBjYW4gY2FsbCBgbmdodHRwMl9zdWJtaXRfcmVxdWVzdCgpYCB3aXRob3V0CisgKiBjb25zdWx0aW5nIHRoaXMgZnVuY3Rpb24uICBJbiB0aGF0IGNhc2UsIGBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KClgCisgKiBtYXkgcmV0dXJuIGVycm9yLiAgT3IsIHJlcXVlc3QgaXMgZmFpbGVkIHRvIHNlbnQsIGFuZAorICogOnR5cGU6YG5naHR0cDJfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrYCBpcyBjYWxsZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9zZXNzaW9uX2NoZWNrX3JlcXVlc3RfYWxsb3dlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgbm9uemVybyBpZiB8c2Vzc2lvbnwgaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyIHNpZGUgc2Vzc2lvbi4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fY2hlY2tfc2VydmVyX3Nlc3Npb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIFdJTkRPV19VUERBVEUgZnJhbWUuCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGUgfHN0cmVhbV9pZHwgaXMgdGhlIHN0cmVhbSBJRCB0byBzZW5kIHRoaXMgV0lORE9XX1VQREFURS4gIFRvCisgKiBzZW5kIGNvbm5lY3Rpb24gbGV2ZWwgV0lORE9XX1VQREFURSwgc3BlY2lmeSAwIHRvIHxzdHJlYW1faWR8LgorICoKKyAqIElmIHRoZSB8d2luZG93X3NpemVfaW5jcmVtZW50fCBpcyBwb3NpdGl2ZSwgdGhlIFdJTkRPV19VUERBVEUgd2l0aAorICogdGhhdCB2YWx1ZSBhcyB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgaXMgcXVldWVkLiAgSWYgdGhlCisgKiB8d2luZG93X3NpemVfaW5jcmVtZW50fCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVjZWl2ZWQgYnl0ZXMgZnJvbSB0aGUKKyAqIHJlbW90ZSBlbmRwb2ludCwgdGhlIGxvY2FsIHdpbmRvdyBzaXplIGlzIGluY3JlYXNlZCBieSB0aGF0CisgKiBkaWZmZXJlbmNlLiAgSWYgdGhlIHNvbGUgcHVycG9zZSBpcyB0byBpbmNyZWFzZSB0aGUgbG9jYWwgd2luZG93CisgKiBzaXplLCBjb25zaWRlciB0byB1c2UgYG5naHR0cDJfc2Vzc2lvbl9zZXRfbG9jYWxfd2luZG93X3NpemUoKWAuCisgKgorICogSWYgdGhlIHx3aW5kb3dfc2l6ZV9pbmNyZW1lbnR8IGlzIG5lZ2F0aXZlLCB0aGUgbG9jYWwgd2luZG93IHNpemUKKyAqIGlzIGRlY3JlYXNlZCBieSAtfHdpbmRvd19zaXplX2luY3JlbWVudHwuICBJZiBhdXRvbWF0aWMKKyAqIFdJTkRPV19VUERBVEUgaXMgZW5hYmxlZAorICogKGBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fYXV0b193aW5kb3dfdXBkYXRlKClgKSwgYW5kIHRoZSBsaWJyYXJ5CisgKiBkZWNpZGVkIHRoYXQgdGhlIFdJTkRPV19VUERBVEUgc2hvdWxkIGJlIHN1Ym1pdHRlZCwgdGhlbgorICogV0lORE9XX1VQREFURSBpcyBxdWV1ZWQgd2l0aCB0aGUgY3VycmVudCByZWNlaXZlZCBieXRlcyBjb3VudC4gIElmCisgKiB0aGUgc29sZSBwdXJwb3NlIGlzIHRvIGRlY3JlYXNlIHRoZSBsb2NhbCB3aW5kb3cgc2l6ZSwgY29uc2lkZXIgdG8KKyAqIHVzZSBgbmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZSgpYC4KKyAqCisgKiBJZiB0aGUgfHdpbmRvd19zaXplX2luY3JlbWVudHwgaXMgMCwgdGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBhbmQKKyAqIHJldHVybnMgMC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9GTE9XX0NPTlRST0xgCisgKiAgICAgVGhlIGxvY2FsIHdpbmRvdyBzaXplIG92ZXJmbG93IG9yIGdldHMgbmVnYXRpdmUuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldCBsb2NhbCB3aW5kb3cgc2l6ZSAobG9jYWwgZW5kcG9pbnRzJ3Mgd2luZG93IHNpemUpIHRvIHRoZSBnaXZlbgorICogfHdpbmRvd19zaXplfCBmb3IgdGhlIGdpdmVuIHN0cmVhbSBkZW5vdGVkIGJ5IHxzdHJlYW1faWR8LiAgVG8KKyAqIGNoYW5nZSBjb25uZWN0aW9uIGxldmVsIHdpbmRvdyBzaXplLCBzcGVjaWZ5IDAgdG8gfHN0cmVhbV9pZHwuICBUbworICogaW5jcmVhc2Ugd2luZG93IHNpemUsIHRoaXMgZnVuY3Rpb24gbWF5IHN1Ym1pdCBXSU5ET1dfVVBEQVRFIGZyYW1lCisgKiB0byB0cmFuc21pc3Npb24gcXVldWUuCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGlzIHNvdW5kcyBzaW1pbGFyIHRvIGBuZ2h0dHAyX3N1Ym1pdF93aW5kb3dfdXBkYXRlKClgLCBidXQgdGhlcmUKKyAqIGFyZSAyIGRpZmZlcmVuY2VzLiAgVGhlIGZpcnN0IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uCisgKiB0YWtlcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2Ygd2luZG93IHNpemUgdG8gc2V0LCByYXRoZXIgdGhhbiB0aGUKKyAqIGRlbHRhLiAgVG8gY2hhbmdlIHRoZSB3aW5kb3cgc2l6ZSwgdGhpcyBtYXkgYmUgZWFzaWVyIHRvIHVzZSBzaW5jZQorICogdGhlIGFwcGxpY2F0aW9uIGp1c3QgZGVjbGFyZXMgdGhlIGludGVuZGVkIHdpbmRvdyBzaXplLCByYXRoZXIgdGhhbgorICogY2FsY3VsYXRpbmcgZGVsdGEuICBUaGUgc2Vjb25kIGRpZmZlcmVuY2UgaXMgdGhhdAorICogYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAgYWZmZWN0cyB0aGUgcmVjZWl2ZWQgYnl0ZXMgY291bnQKKyAqIHdoaWNoIGhhcyBub3QgYWNrZWQgeWV0LiAgQnkgdGhlIHNwZWNpZmljYXRpb24gb2YKKyAqIGBuZ2h0dHAyX3N1Ym1pdF93aW5kb3dfdXBkYXRlKClgLCB0byBzdHJpY3RseSBpbmNyZWFzZSB0aGUgbG9jYWwKKyAqIHdpbmRvdyBzaXplLCB3ZSBoYXZlIHRvIHN1Ym1pdCBkZWx0YSBpbmNsdWRpbmcgYWxsIHJlY2VpdmVkIGJ5dGVzCisgKiBjb3VudCwgd2hpY2ggbWlnaHQgbm90IGJlIGRlc2lyYWJsZSBpbiBzb21lIGNhc2VzLiAgT24gdGhlIG90aGVyCisgKiBoYW5kLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgcmVjZWl2ZWQgYnl0ZXMgY291bnQuICBJdAorICoganVzdCBzZXRzIHRoZSBsb2NhbCB3aW5kb3cgc2l6ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfHN0cmVhbV9pZHwgaXMgbmVnYXRpdmUuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fc2V0X2xvY2FsX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIGludDMyX3Qgd2luZG93X3NpemUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgZXh0ZW5zaW9uIGZyYW1lLgorICoKKyAqIEFwcGxpY2F0aW9uIGNhbiBwYXNzIGFyYml0cmFyeSBmcmFtZSBmbGFncyBhbmQgc3RyZWFtIElEIGluIHxmbGFnc3wKKyAqIGFuZCB8c3RyZWFtX2lkfCByZXNwZWN0aXZlbHkuICBUaGUgfHBheWxvYWR8IGlzIG9wYXF1ZSBwb2ludGVyLCBhbmQKKyAqIGl0IGNhbiBiZSBhY2Nlc3NpYmxlIHRob3VnaCBgYGZyYW1lLT5leHQucGF5bG9hZGBgIGluCisgKiA6dHlwZTpgbmdodHRwMl9wYWNrX2V4dGVuc2lvbl9jYWxsYmFja2AuICBUaGUgbGlicmFyeSB3aWxsIG5vdCBvd24KKyAqIHBhc3NlZCB8cGF5bG9hZHwgcG9pbnRlci4KKyAqCisgKiBUaGUgYXBwbGljYXRpb24gbXVzdCBzZXQgOnR5cGU6YG5naHR0cDJfcGFja19leHRlbnNpb25fY2FsbGJhY2tgCisgKiB1c2luZyBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfcGFja19leHRlbnNpb25fY2FsbGJhY2soKWAuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIHNob3VsZCByZXRhaW4gdGhlIG1lbW9yeSBwb2ludGVkIGJ5IHxwYXlsb2FkfCB1bnRpbAorICogdGhlIHRyYW5zbWlzc2lvbiBvZiBleHRlbnNpb24gZnJhbWUgaXMgZG9uZSAod2hpY2ggaXMgaW5kaWNhdGVkIGJ5CisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCksIG9yIHRyYW5zbWlzc2lvbiBmYWlscworICogKHdoaWNoIGlzIGluZGljYXRlZCBieSA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2ApLgorICogSWYgYXBwbGljYXRpb24gZG9lcyBub3QgdG91Y2ggdGhpcyBtZW1vcnkgcmVnaW9uIGFmdGVyIHBhY2tpbmcgaXQKKyAqIGludG8gYSB3aXJlIGZvcm1hdCwgYXBwbGljYXRpb24gY2FuIGZyZWUgaXQgaW5zaWRlCisgKiA6dHlwZTpgbmdodHRwMl9wYWNrX2V4dGVuc2lvbl9jYWxsYmFja2AuCisgKgorICogVGhlIHN0YW5kYXJkIEhUVFAvMiBmcmFtZSBjYW5ub3QgYmUgc2VudCB3aXRoIHRoaXMgZnVuY3Rpb24sIHNvCisgKiB8dHlwZXwgbXVzdCBiZSBzdHJpY3RseSBncmF0ZXIgdGhhbiAweDkuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgZmFpbCB3aXRoIGVycm9yIGNvZGUgOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgCisgKiAgICAgSWYgOnR5cGU6YG5naHR0cDJfcGFja19leHRlbnNpb25fY2FsbGJhY2tgIGlzIG5vdCBzZXQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBJZiAgfHR5cGV8IHNwZWNpZmllcyAgc3RhbmRhcmQgIEhUVFAvMiBmcmFtZSAgdHlwZS4gIFRoZSAgZnJhbWUKKyAqICAgICB0eXBlcyAgaW4gdGhlICByYWdlIFsweDAsICAweDldLCBib3RoICBpbmNsdXNpdmUsIGFyZSAgc3RhbmRhcmQKKyAqICAgICBIVFRQLzIgZnJhbWUgdHlwZSwgYW5kIGNhbm5vdCBiZSBzZW50IHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfZXh0ZW5zaW9uKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0eXBlLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgdm9pZCAqcGF5bG9hZCk7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBwYXlsb2FkIG9mIEFMVFNWQyBmcmFtZS4gIEFMVFNWQyBmcmFtZSBpcyBhIG5vbi1jcml0aWNhbAorICogZXh0ZW5zaW9uIHRvIEhUVFAvMi4gIElmIHRoaXMgZnJhbWUgaXMgcmVjZWl2ZWQsIGFuZAorICogYG5naHR0cDJfb3B0aW9uX3NldF91c2VyX3JlY3ZfZXh0ZW5zaW9uX3R5cGUoKWAgaXMgbm90IHNldCwgYW5kCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X2J1aWx0aW5fcmVjdl9leHRlbnNpb25fdHlwZSgpYCBpcyBzZXQgZm9yCisgKiA6ZW51bTpgTkdIVFRQMl9BTFRTVkNgLCBgYG5naHR0cDJfZXh0ZW5zaW9uLnBheWxvYWRgYCB3aWxsIHBvaW50IHRvCisgKiB0aGlzIHN0cnVjdC4KKyAqCisgKiBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgcG9pbnRlciB0byBvcmlnaW4gd2hpY2ggdGhpcyBhbHRlcm5hdGl2ZSBzZXJ2aWNlIGlzCisgICAqIGFzc29jaWF0ZWQgd2l0aC4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IE5VTEwtdGVybWluYXRlZC4KKyAgICovCisgIHVpbnQ4X3QgKm9yaWdpbjsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIHxvcmlnaW58LgorICAgKi8KKyAgc2l6ZV90IG9yaWdpbl9sZW47CisgIC8qKgorICAgKiBUaGUgcG9pbnRlciB0byBBbHQtU3ZjIGZpZWxkIHZhbHVlIGNvbnRhaW5lZCBpbiBBTFRTVkMgZnJhbWUuCisgICAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IE5VTEwtdGVybWluYXRlZC4KKyAgICovCisgIHVpbnQ4X3QgKmZpZWxkX3ZhbHVlOworICAvKioKKyAgICogVGhlIGxlbmd0aCBvZiB0aGUgfGZpZWxkX3ZhbHVlfC4KKyAgICovCisgIHNpemVfdCBmaWVsZF92YWx1ZV9sZW47Cit9IG5naHR0cDJfZXh0X2FsdHN2YzsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIEFMVFNWQyBmcmFtZS4KKyAqCisgKiBBTFRTVkMgZnJhbWUgaXMgYSBub24tY3JpdGljYWwgZXh0ZW5zaW9uIHRvIEhUVFAvMiwgYW5kIGRlZmluZWQgaW4KKyAqIGBSRkMgNzM4MyA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc4Mzgjc2VjdGlvbi00PmBfLgorICoKKyAqIFRoZSB8ZmxhZ3N8IGlzIGN1cnJlbnRseSBpZ25vcmVkIGFuZCBzaG91bGQgYmUKKyAqIDplbnVtOmBOR0hUVFAyX0ZMQUdfTk9ORWAuCisgKgorICogVGhlIHxvcmlnaW58IHBvaW50cyB0byB0aGUgb3JpZ2luIHRoaXMgYWx0ZXJuYXRpdmUgc2VydmljZSBpcworICogYXNzb2NpYXRlZCB3aXRoLiAgVGhlIHxvcmlnaW5fbGVufCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW4uICBJZgorICogfHN0cmVhbV9pZHwgaXMgMCwgdGhlIG9yaWdpbiBtdXN0IGJlIHNwZWNpZmllZC4gIElmIHxzdHJlYW1faWR8IGlzCisgKiBub3QgemVybywgdGhlIG9yaWdpbiBtdXN0IGJlIGVtcHR5IChpbiBvdGhlciB3b3JkcywgfG9yaWdpbl9sZW58CisgKiBtdXN0IGJlIDApLgorICoKKyAqIFRoZSBBTFRTVkMgZnJhbWUgaXMgb25seSB1c2FibGUgZnJvbSBzZXJ2ZXIgc2lkZS4gIElmIHRoaXMgZnVuY3Rpb24KKyAqIGlzIGludm9rZWQgd2l0aCBjbGllbnQgc2lkZSBzZXNzaW9uLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAKKyAqICAgICBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gY2xpZW50IHNpZGUgc2Vzc2lvbgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHN1bSBvZiB8b3JpZ2luX2xlbnwgYW5kIHxmaWVsZF92YWx1ZV9sZW58IGlzIGxhcmdlciB0aGFuCisgKiAgICAgMTYzODI7IG9yIHxvcmlnaW5fbGVufCBpcyAwIHdoaWxlIHxzdHJlYW1faWR8IGlzIDA7IG9yCisgKiAgICAgfG9yaWdpbl9sZW58IGlzIG5vdCAwIHdoaWxlIHxzdHJlYW1faWR8IGlzIG5vdCAwLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfYWx0c3ZjKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9yaWdpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmZpZWxkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZmllbGRfdmFsdWVfbGVuKTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIHNpbmdsZSBlbnRyeSBvZiBhbiBvcmlnaW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBwb2ludGVyIHRvIG9yaWdpbi4gIE5vIHZhbGlkYXRpb24gaXMgbWFkZSBhZ2FpbnN0IHRoaXMgZmllbGQKKyAgICogYnkgdGhlIGxpYnJhcnkuICBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBOVUxMLXRlcm1pbmF0ZWQuCisgICAqLworICB1aW50OF90ICpvcmlnaW47CisgIC8qKgorICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSB8b3JpZ2lufC4KKyAgICovCisgIHNpemVfdCBvcmlnaW5fbGVuOworfSBuZ2h0dHAyX29yaWdpbl9lbnRyeTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIHBheWxvYWQgb2YgT1JJR0lOIGZyYW1lLiAgT1JJR0lOIGZyYW1lIGlzIGEgbm9uLWNyaXRpY2FsCisgKiBleHRlbnNpb24gdG8gSFRUUC8yIGFuZCBkZWZpbmVkIGJ5IGBSRkMgODMzNgorICogPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MzM2PmBfLgorICoKKyAqIElmIHRoaXMgZnJhbWUgaXMgcmVjZWl2ZWQsIGFuZAorICogYG5naHR0cDJfb3B0aW9uX3NldF91c2VyX3JlY3ZfZXh0ZW5zaW9uX3R5cGUoKWAgaXMgbm90IHNldCwgYW5kCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X2J1aWx0aW5fcmVjdl9leHRlbnNpb25fdHlwZSgpYCBpcyBzZXQgZm9yCisgKiA6ZW51bTpgTkdIVFRQMl9PUklHSU5gLCBgYG5naHR0cDJfZXh0ZW5zaW9uLnBheWxvYWRgYCB3aWxsIHBvaW50IHRvCisgKiB0aGlzIHN0cnVjdC4KKyAqCisgKiBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgbnVtYmVyIG9mIG9yaWdpbnMgY29udGFpbmVkIGluIHxvdnwuCisgICAqLworICBzaXplX3Qgbm92OworICAvKioKKyAgICogVGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIG9yaWdpbnMgY29udGFpbmVkIGluIE9SSUdJTiBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvdjsKK30gbmdodHRwMl9leHRfb3JpZ2luOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgT1JJR0lOIGZyYW1lLgorICoKKyAqIE9SSUdJTiBmcmFtZSBpcyBhIG5vbi1jcml0aWNhbCBleHRlbnNpb24gdG8gSFRUUC8yIGFuZCBkZWZpbmVkIGJ5CisgKiBgUkZDIDgzMzYgPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MzM2PmBfLgorICoKKyAqIFRoZSB8ZmxhZ3N8IGlzIGN1cnJlbnRseSBpZ25vcmVkIGFuZCBzaG91bGQgYmUKKyAqIDplbnVtOmBOR0hUVFAyX0ZMQUdfTk9ORWAuCisgKgorICogVGhlIHxvdnwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBvcmlnaW5zLiAgVGhlIHxub3Z8IHNwZWNpZmllcyB0aGUKKyAqIG51bWJlciBvZiBvcmlnaW5zIGluY2x1ZGVkIGluIHxvdnwuICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgY29waWVzCisgKiBvZiBhbGwgZWxlbWVudHMgaW4gfG92fC4KKyAqCisgKiBUaGUgT1JJR0lOIGZyYW1lIGlzIG9ubHkgdXNhYmxlIGJ5IGEgc2VydmVyLiAgSWYgdGhpcyBmdW5jdGlvbiBpcworICogaW52b2tlZCB3aXRoIGNsaWVudCBzaWRlIHNlc3Npb24sIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgLgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAKKyAqICAgICBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gY2xpZW50IHNpZGUgc2Vzc2lvbi4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZXJlIGFyZSB0b28gbWFueSBvcmlnaW5zLCBvciBhbiBvcmlnaW4gaXMgdG9vIGxhcmdlIHRvIGZpdAorICogICAgIGludG8gYSBkZWZhdWx0IGZyYW1lIHBheWxvYWQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF9vcmlnaW4obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX29yaWdpbl9lbnRyeSAqb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBub3YpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIENvbXBhcmVzIGBgbGhzLT5uYW1lYGAgb2YgbGVuZ3RoIGBgbGhzLT5uYW1lbGVuYGAgYnl0ZXMgYW5kCisgKiBgYHJocy0+bmFtZWBgIG9mIGxlbmd0aCBgYHJocy0+bmFtZWxlbmBgIGJ5dGVzLiAgUmV0dXJucyBuZWdhdGl2ZQorICogaW50ZWdlciBpZiBgYGxocy0+bmFtZWBgIGlzIGZvdW5kIHRvIGJlIGxlc3MgdGhhbiBgYHJocy0+bmFtZWBgOyBvcgorICogcmV0dXJucyBwb3NpdGl2ZSBpbnRlZ2VyIGlmIGBgbGhzLT5uYW1lYGAgaXMgZm91bmQgdG8gYmUgZ3JlYXRlcgorICogdGhhbiBgYHJocy0+bmFtZWBgOyBvciByZXR1cm5zIDAgb3RoZXJ3aXNlLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9udl9jb21wYXJlX25hbWUoY29uc3QgbmdodHRwMl9udiAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKnJocyk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGRlYWxpbmcgd2l0aCBOUE4gaW4gY2xpZW50IHNpZGUgb3IgQUxQTiBpbgorICogc2VydmVyIHNpZGUuICBUaGUgfGlufCBjb250YWlucyBwZWVyJ3MgcHJvdG9jb2wgbGlzdCBpbiBwcmVmZXJhYmxlCisgKiBvcmRlci4gIFRoZSBmb3JtYXQgb2YgfGlufCBpcyBsZW5ndGgtcHJlZml4ZWQgYW5kIG5vdAorICogbnVsbC10ZXJtaW5hdGVkLiAgRm9yIGV4YW1wbGUsIGBgaDJgYCBhbmQKKyAqIGBgaHR0cC8xLjFgYCBzdG9yZWQgaW4gfGlufCBsaWtlIHRoaXM6OgorICoKKyAqICAgICBpblswXSA9IDIKKyAqICAgICBpblsxLi4yXSA9ICJoMiIKKyAqICAgICBpblszXSA9IDgKKyAqICAgICBpbls0Li4xMV0gPSAiaHR0cC8xLjEiCisgKiAgICAgaW5sZW4gPSAxMgorICoKKyAqIFRoZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CisgKgorICogMS4gSWYgcGVlcidzIGxpc3QgY29udGFpbnMgSFRUUC8yIHByb3RvY29sIHRoZSBsaWJyYXJ5IHN1cHBvcnRzLAorICogICAgaXQgaXMgc2VsZWN0ZWQgYW5kIHJldHVybnMgMS4gVGhlIGZvbGxvd2luZyBzdGVwIGlzIG5vdCB0YWtlbi4KKyAqCisgKiAyLiBJZiBwZWVyJ3MgbGlzdCBjb250YWlucyBgYGh0dHAvMS4xYGAsIHRoaXMgZnVuY3Rpb24gc2VsZWN0cworICogICAgYGBodHRwLzEuMWBgIGFuZCByZXR1cm5zIDAuICBUaGUgZm9sbG93aW5nIHN0ZXAgaXMgbm90IHRha2VuLgorICoKKyAqIDMuIFRoaXMgZnVuY3Rpb24gc2VsZWN0cyBub3RoaW5nIGFuZCByZXR1cm5zIC0xIChTbyBjYWxsZWQKKyAqICAgIG5vbi1vdmVybGFwIGNhc2UpLiAgSW4gdGhpcyBjYXNlLCB8b3V0fCBhbmQgfG91dGxlbnwgYXJlIGxlZnQKKyAqICAgIHVudG91Y2hlZC4KKyAqCisgKiBTZWxlY3RpbmcgYGBoMmBgIG1lYW5zIHRoYXQgYGBoMmBgIGlzIHdyaXR0ZW4gaW50byB8Km91dHwgYW5kIGl0cworICogbGVuZ3RoICh3aGljaCBpcyAyKSBpcyBhc3NpZ25lZCB0byB8Km91dGxlbnwuCisgKgorICogRm9yIEFMUE4sIHJlZmVyIHRvIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MzAxCisgKgorICogU2VlIGh0dHA6Ly90ZWNobm90ZXMuZ29vZ2xlY29kZS5jb20vZ2l0L25leHRwcm90b25lZy5odG1sIGZvciBtb3JlCisgKiBkZXRhaWxzIGFib3V0IE5QTi4KKyAqCisgKiBGb3IgTlBOLCB0byB1c2UgdGhpcyBtZXRob2QgeW91IHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZTo6CisgKgorICogICAgIHN0YXRpYyBpbnQgc2VsZWN0X25leHRfcHJvdG9fY2IoU1NMKiBzc2wsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqb3V0LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0bGVuLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5sZW4sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpCisgKiAgICAgeworICogICAgICAgICBpbnQgcnY7CisgKiAgICAgICAgIHJ2ID0gbmdodHRwMl9zZWxlY3RfbmV4dF9wcm90b2NvbChvdXQsIG91dGxlbiwgaW4sIGlubGVuKTsKKyAqICAgICAgICAgaWYgKHJ2ID09IC0xKSB7CisgKiAgICAgICAgICAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfTk9BQ0s7CisgKiAgICAgICAgIH0KKyAqICAgICAgICAgaWYgKHJ2ID09IDEpIHsKKyAqICAgICAgICAgICAgICgoTXlUeXBlKilhcmcpLT5odHRwMl9zZWxlY3RlZCA9IDE7CisgKiAgICAgICAgIH0KKyAqICAgICAgICAgcmV0dXJuIFNTTF9UTFNFWFRfRVJSX09LOworICogICAgIH0KKyAqICAgICAuLi4KKyAqICAgICBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihzc2xfY3R4LCBzZWxlY3RfbmV4dF9wcm90b19jYiwgbXlfb2JqKTsKKyAqCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3NlbGVjdF9uZXh0X3Byb3RvY29sKHVuc2lnbmVkIGNoYXIgKipvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmxlbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZ2h0dHAyX2luZm8gc3RydWN0IHdpdGggdmVyc2lvbiBpbmZvcm1hdGlvbgorICogYWJvdXQgdGhlIHJ1bi10aW1lIGxpYnJhcnkgaW4gdXNlLiAgVGhlIHxsZWFzdF92ZXJzaW9ufCBhcmd1bWVudAorICogY2FuIGJlIHNldCB0byBhIDI0IGJpdCBudW1lcmljYWwgdmFsdWUgZm9yIHRoZSBsZWFzdCBhY2NlcHRlZAorICogdmVyc2lvbiBudW1iZXIgYW5kIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldCwgdGhpcyBmdW5jdGlvbiB3aWxsCisgKiByZXR1cm4gYSBgYE5VTExgYC4gIFBhc3MgaW4gMCB0byBza2lwIHRoZSB2ZXJzaW9uIGNoZWNraW5nLgorICovCitOR0hUVFAyX0VYVEVSTiBuZ2h0dHAyX2luZm8gKm5naHR0cDJfdmVyc2lvbihpbnQgbGVhc3RfdmVyc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIGlmIHRoZSA6dHlwZTpgbmdodHRwMl9lcnJvcmAgbGlicmFyeSBlcnJvciBjb2RlCisgKiB8bGliX2Vycm9yfCBpcyBmYXRhbC4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfaXNfZmF0YWwoaW50IGxpYl9lcnJvcl9jb2RlKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgSFRUUCBoZWFkZXIgZmllbGQgbmFtZSB8bmFtZXwgb2YgbGVuZ3RoIHxsZW58IGlzCisgKiB2YWxpZCBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMgorICoKKyAqIEJlY2F1c2UgdGhpcyBpcyBhIGhlYWRlciBmaWVsZCBuYW1lIGluIEhUVFAyLCB0aGUgdXBwZXIgY2FzZWQgYWxwaGFiZXQKKyAqIGlzIHRyZWF0ZWQgYXMgZXJyb3IuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX2NoZWNrX2hlYWRlcl9uYW1lKGNvbnN0IHVpbnQ4X3QgKm5hbWUsIHNpemVfdCBsZW4pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgbm9uemVybyBpZiBIVFRQIGhlYWRlciBmaWVsZCB2YWx1ZSB8dmFsdWV8IG9mIGxlbmd0aCB8bGVufAorICogaXMgdmFsaWQgYWNjb3JkaW5nIHRvCisgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX2NoZWNrX2hlYWRlcl92YWx1ZShjb25zdCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IGxlbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIGlmIHRoZSB8dmFsdWV8IHdoaWNoIGlzIHN1cHBvc2VkIHRvIHRoZSB2YWx1ZSBvZgorICogOmF1dGhvcml0eSBvciBob3N0IGhlYWRlciBmaWVsZCBpcyB2YWxpZCBhY2NvcmRpbmcgdG8KKyAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yCisgKgorICogfHZhbHVlfCBpcyB2YWxpZCBpZiBpdCBtZXJlbHkgY29uc2lzdHMgb2YgdGhlIGFsbG93ZWQgY2hhcmFjdGVycy4KKyAqIEluIHBhcnRpY3VsYXIsIGl0IGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgfHZhbHVlfCBmb2xsb3dzIHRoZSBzeW50YXgKKyAqIG9mIGF1dGhvcml0eS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfY2hlY2tfYXV0aG9yaXR5KGNvbnN0IHVpbnQ4X3QgKnZhbHVlLCBzaXplX3QgbGVuKTsKKworLyogSFBBQ0sgQVBJICovCisKK3N0cnVjdCBuZ2h0dHAyX2hkX2RlZmxhdGVyOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBIUEFDSyBkZWZsYXRlciBvYmplY3QuCisgKi8KK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfaGRfZGVmbGF0ZXIgbmdodHRwMl9oZF9kZWZsYXRlcjsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBJbml0aWFsaXplcyB8KmRlZmxhdGVyX3B0cnwgZm9yIGRlZmxhdGluZyBuYW1lL3ZhbHVlcyBwYWlycy4KKyAqCisgKiBUaGUgfG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZXwgaXMgdGhlIHVwcGVyIGJvdW5kIG9mIGhlYWRlcgorICogdGFibGUgc2l6ZSB0aGUgZGVmbGF0ZXIgd2lsbCB1c2UuCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgfCpkZWZsYXRlcl9wdHJ8IGlzIGxlZnQgdW50b3VjaGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9oZF9kZWZsYXRlX25ldyhuZ2h0dHAyX2hkX2RlZmxhdGVyICoqZGVmbGF0ZXJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX2hkX2RlZmxhdGVfbmV3KClgLCBidXQgd2l0aCBhZGRpdGlvbmFsIGN1c3RvbSBtZW1vcnkKKyAqIGFsbG9jYXRvciBzcGVjaWZpZWQgaW4gdGhlIHxtZW18LgorICoKKyAqIFRoZSB8bWVtfCBjYW4gYmUgYGBOVUxMYGAgYW5kIHRoZSBjYWxsIGlzIGVxdWl2YWxlbnQgdG8KKyAqIGBuZ2h0dHAyX2hkX2RlZmxhdGVfbmV3KClgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgfG1lbXwuICBUaGUgYXBwbGljYXRpb24gaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHxtZW18LgorICoKKyAqIFRoZSBsaWJyYXJ5IGNvZGUgZG9lcyBub3QgcmVmZXIgdG8gfG1lbXwgcG9pbnRlciBhZnRlciB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zLCBzbyB0aGUgYXBwbGljYXRpb24gY2FuIHNhZmVseSBmcmVlIGl0LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfaGRfZGVmbGF0ZV9uZXcyKG5naHR0cDJfaGRfZGVmbGF0ZXIgKipkZWZsYXRlcl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogRGVhbGxvY2F0ZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHxkZWZsYXRlcnwuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9oZF9kZWZsYXRlX2RlbChuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogQ2hhbmdlcyBoZWFkZXIgdGFibGUgc2l6ZSBvZiB0aGUgfGRlZmxhdGVyfCB0bworICogfHNldHRpbmdzX21heF9keW5hbWljX3RhYmxlX3NpemV8IGJ5dGVzLiAgVGhpcyBtYXkgdHJpZ2dlciBldmljdGlvbgorICogaW4gdGhlIGR5bmFtaWMgdGFibGUuCisgKgorICogVGhlIHxzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplfCBzaG91bGQgYmUgdGhlIHZhbHVlIHJlY2VpdmVkCisgKiBpbiBTRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRS4KKyAqCisgKiBUaGUgZGVmbGF0ZXIgbmV2ZXIgdXNlcyBtb3JlIG1lbW9yeSB0aGFuCisgKiBgYG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZWBgIGJ5dGVzIHNwZWNpZmllZCBpbgorICogYG5naHR0cDJfaGRfZGVmbGF0ZV9uZXcoKWAuICBUaGVyZWZvcmUsIGlmCisgKiB8c2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZXwgPgorICogYGBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemVgYCwgcmVzdWx0aW5nIG1heGltdW0gdGFibGUgc2l6ZQorICogYmVjb21lcyBgYG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZWBgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9oZF9kZWZsYXRlX2NoYW5nZV90YWJsZV9zaXplKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBEZWZsYXRlcyB0aGUgfG52YXwsIHdoaWNoIGhhcyB0aGUgfG52bGVufCBuYW1lL3ZhbHVlIHBhaXJzLCBpbnRvCisgKiB0aGUgfGJ1Znwgb2YgbGVuZ3RoIHxidWZsZW58LgorICoKKyAqIElmIHxidWZ8IGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgdGhlIGRlZmxhdGVkIGhlYWRlciBibG9jaywKKyAqIHRoaXMgZnVuY3Rpb24gZmFpbHMgd2l0aCA6ZW51bTpgTkdIVFRQMl9FUlJfSU5TVUZGX0JVRlNJWkVgLiAgVGhlCisgKiBjYWxsZXIgc2hvdWxkIHVzZSBgbmdodHRwMl9oZF9kZWZsYXRlX2JvdW5kKClgIHRvIGtub3cgdGhlIHVwcGVyCisgKiBib3VuZCBvZiBidWZmZXIgc2l6ZSByZXF1aXJlZCB0byBkZWZsYXRlIGdpdmVuIGhlYWRlciBuYW1lL3ZhbHVlCisgKiBwYWlycy4KKyAqCisgKiBPbmNlIHRoaXMgZnVuY3Rpb24gZmFpbHMsIHN1YnNlcXVlbnQgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uIGFsd2F5cworICogcmV0dXJucyA6ZW51bTpgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVBgLgorICoKKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgaXQgaXMgc2FmZSB0byBkZWxldGUgdGhlIHxudmF8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gfGJ1ZnwgaWYgaXQKKyAqIHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUGAKKyAqICAgICBEZWZsYXRpb24gcHJvY2VzcyBoYXMgZmFpbGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOU1VGRl9CVUZTSVpFYAorICogICAgIFRoZSBwcm92aWRlZCB8YnVmbGVufCBzaXplIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSBvdXRwdXQuCisgKi8KK05HSFRUUDJfRVhURVJOIHNzaXplX3QgbmdodHRwMl9oZF9kZWZsYXRlX2hkKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG52bGVuKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBEZWZsYXRlcyB0aGUgfG52YXwsIHdoaWNoIGhhcyB0aGUgfG52bGVufCBuYW1lL3ZhbHVlIHBhaXJzLCBpbnRvCisgKiB0aGUgfHZlY2xlbnwgc2l6ZSBvZiBidWYgdmVjdG9yIHx2ZWN8LiAgVGhlIGVhY2ggc2l6ZSBvZiBidWZmZXIKKyAqIG11c3QgYmUgc2V0IGluIGxlbiBmaWVsZCBvZiA6dHlwZTpgbmdodHRwMl92ZWNgLiAgSWYgYW5kIG9ubHkgaWYKKyAqIG9uZSBjaHVuayBpcyBmaWxsZWQgdXAgY29tcGxldGVseSwgbmV4dCBjaHVuayB3aWxsIGJlIHVzZWQuICBJZgorICogfHZlY3wgaXMgbm90IGxhcmdlIGVub3VnaCB0byBzdG9yZSB0aGUgZGVmbGF0ZWQgaGVhZGVyIGJsb2NrLCB0aGlzCisgKiBmdW5jdGlvbiBmYWlscyB3aXRoIDplbnVtOmBOR0hUVFAyX0VSUl9JTlNVRkZfQlVGU0laRWAuICBUaGUgY2FsbGVyCisgKiBzaG91bGQgdXNlIGBuZ2h0dHAyX2hkX2RlZmxhdGVfYm91bmQoKWAgdG8ga25vdyB0aGUgdXBwZXIgYm91bmQgb2YKKyAqIGJ1ZmZlciBzaXplIHJlcXVpcmVkIHRvIGRlZmxhdGUgZ2l2ZW4gaGVhZGVyIG5hbWUvdmFsdWUgcGFpcnMuCisgKgorICogT25jZSB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBzdWJzZXF1ZW50IGNhbGwgb2YgdGhpcyBmdW5jdGlvbiBhbHdheXMKKyAqIHJldHVybnMgOmVudW06YE5HSFRUUDJfRVJSX0hFQURFUl9DT01QYC4KKyAqCisgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGl0IGlzIHNhZmUgdG8gZGVsZXRlIHRoZSB8bnZhfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHx2ZWN8IGlmIGl0CisgKiBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVBgCisgKiAgICAgRGVmbGF0aW9uIHByb2Nlc3MgaGFzIGZhaWxlZC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlNVRkZfQlVGU0laRWAKKyAqICAgICBUaGUgcHJvdmlkZWQgfGJ1Zmxlbnwgc2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgb3V0cHV0LgorICovCitOR0hUVFAyX0VYVEVSTiBzc2l6ZV90IG5naHR0cDJfaGRfZGVmbGF0ZV9oZF92ZWMobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl92ZWMgKnZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmVjbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgYW4gdXBwZXIgYm91bmQgb24gdGhlIGNvbXByZXNzZWQgc2l6ZSBhZnRlciBkZWZsYXRpb24gb2YKKyAqIHxudmF8IG9mIGxlbmd0aCB8bnZsZW58LgorICovCitOR0hUVFAyX0VYVEVSTiBzaXplX3QgbmdodHRwMl9oZF9kZWZsYXRlX2JvdW5kKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudmxlbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoZWFkZXIgdGFibGUgb2YgfGRlZmxhdGVyfAorICogY29udGFpbnMuICBUaGlzIGlzIHRoZSBzdW0gb2YgdGhlIG51bWJlciBvZiBzdGF0aWMgdGFibGUgYW5kCisgKiBkeW5hbWljIHRhYmxlLCBzbyB0aGUgcmV0dXJuIHZhbHVlIGlzIGF0IGxlYXN0IDYxLgorICovCitOR0hUVFAyX0VYVEVSTgorc2l6ZV90IG5naHR0cDJfaGRfZGVmbGF0ZV9nZXRfbnVtX3RhYmxlX2VudHJpZXMobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHRhYmxlIGVudHJ5IGRlbm90ZWQgYnkgfGlkeHwgZnJvbSBoZWFkZXIgdGFibGUgb2YKKyAqIHxkZWZsYXRlcnwuICBUaGUgfGlkeHwgaXMgMS1iYXNlZCwgYW5kIGlkeD0xIHJldHVybnMgZmlyc3QgZW50cnkgb2YKKyAqIHN0YXRpYyB0YWJsZS4gIGlkeD02MiByZXR1cm5zIGZpcnN0IGVudHJ5IG9mIGR5bmFtaWMgdGFibGUgaWYgaXQKKyAqIGV4aXN0cy4gIFNwZWNpZnlpbmcgaWR4PTAgaXMgZXJyb3IsIGFuZCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KKyAqIElmIHxpZHh8IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIHRhYmxlcworICogY29udGFpbiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK05HSFRUUDJfRVhURVJOCitjb25zdCBuZ2h0dHAyX252ICoKK25naHR0cDJfaGRfZGVmbGF0ZV9nZXRfdGFibGVfZW50cnkobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsIHNpemVfdCBpZHgpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHVzZWQgZHluYW1pYyB0YWJsZSBzaXplLCBpbmNsdWRpbmcgdGhlIG92ZXJoZWFkIDMyCisgKiBieXRlcyBwZXIgZW50cnkgZGVzY3JpYmVkIGluIFJGQyA3NTQxLgorICovCitOR0hUVFAyX0VYVEVSTgorc2l6ZV90IG5naHR0cDJfaGRfZGVmbGF0ZV9nZXRfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGR5bmFtaWMgdGFibGUgc2l6ZS4KKyAqLworTkdIVFRQMl9FWFRFUk4KK3NpemVfdAorbmdodHRwMl9oZF9kZWZsYXRlX2dldF9tYXhfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKTsKKworc3RydWN0IG5naHR0cDJfaGRfaW5mbGF0ZXI7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIEhQQUNLIGluZmxhdGVyIG9iamVjdC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9oZF9pbmZsYXRlciBuZ2h0dHAyX2hkX2luZmxhdGVyOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluaXRpYWxpemVzIHwqaW5mbGF0ZXJfcHRyfCBmb3IgaW5mbGF0aW5nIG5hbWUvdmFsdWVzIHBhaXJzLgorICoKKyAqIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIHwqaW5mbGF0ZXJfcHRyfCBpcyBsZWZ0IHVudG91Y2hlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9oZF9pbmZsYXRlX25ldyhuZ2h0dHAyX2hkX2luZmxhdGVyICoqaW5mbGF0ZXJfcHRyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX2hkX2luZmxhdGVfbmV3KClgLCBidXQgd2l0aCBhZGRpdGlvbmFsIGN1c3RvbSBtZW1vcnkKKyAqIGFsbG9jYXRvciBzcGVjaWZpZWQgaW4gdGhlIHxtZW18LgorICoKKyAqIFRoZSB8bWVtfCBjYW4gYmUgYGBOVUxMYGAgYW5kIHRoZSBjYWxsIGlzIGVxdWl2YWxlbnQgdG8KKyAqIGBuZ2h0dHAyX2hkX2luZmxhdGVfbmV3KClgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgfG1lbXwuICBUaGUgYXBwbGljYXRpb24gaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHxtZW18LgorICoKKyAqIFRoZSBsaWJyYXJ5IGNvZGUgZG9lcyBub3QgcmVmZXIgdG8gfG1lbXwgcG9pbnRlciBhZnRlciB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zLCBzbyB0aGUgYXBwbGljYXRpb24gY2FuIHNhZmVseSBmcmVlIGl0LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9oZF9pbmZsYXRlX25ldzIobmdodHRwMl9oZF9pbmZsYXRlciAqKmluZmxhdGVyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBEZWFsbG9jYXRlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgfGluZmxhdGVyfC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX2hkX2luZmxhdGVfZGVsKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBDaGFuZ2VzIGhlYWRlciB0YWJsZSBzaXplIGluIHRoZSB8aW5mbGF0ZXJ8LiAgVGhpcyBtYXkgdHJpZ2dlcgorICogZXZpY3Rpb24gaW4gdGhlIGR5bmFtaWMgdGFibGUuCisgKgorICogVGhlIHxzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplfCBzaG91bGQgYmUgdGhlIHZhbHVlCisgKiB0cmFuc21pdHRlZCBpbiBTRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBoZWFkZXIgYmxvY2sgaXMgYmVpbmcKKyAqIGluZmxhdGVkLiAgSW4gb3RoZXIgd29yZHMsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIKKyAqIGluaXRpYWxpemF0aW9uIG9mIHxpbmZsYXRlcnwsIGJ1dCBiZWZvcmUgY2FsbGluZworICogYG5naHR0cDJfaGRfaW5mbGF0ZV9oZDIoKWAsIG9yIGFmdGVyCisgKiBgbmdodHRwMl9oZF9pbmZsYXRlX2VuZF9oZWFkZXJzKClgLiAgT3RoZXJ3aXNlLAorICogYE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgIHdhcyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgCisgKiAgICAgVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGlsZSBoZWFkZXIgYmxvY2sgaXMgYmVpbmcgaW5mbGF0ZWQuCisgKiAgICAgUHJvYmFibHksIGFwcGxpY2F0aW9uIG1pc3NlZCB0byBjYWxsCisgKiAgICAgYG5naHR0cDJfaGRfaW5mbGF0ZV9lbmRfaGVhZGVycygpYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX2hkX2luZmxhdGVfY2hhbmdlX3RhYmxlX3NpemUobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNldHRpbmdzX21heF9keW5hbWljX3RhYmxlX3NpemUpOworCisvKioKKyAqIEBlbnVtCisgKgorICogVGhlIGZsYWdzIGZvciBoZWFkZXIgaW5mbGF0aW9uLgorICovCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogTm8gZmxhZyBzZXQuCisgICAqLworICBOR0hUVFAyX0hEX0lORkxBVEVfTk9ORSA9IDAsCisgIC8qKgorICAgKiBJbmRpY2F0ZXMgYWxsIGhlYWRlcnMgd2VyZSBpbmZsYXRlZC4KKyAgICovCisgIE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTCA9IDB4MDEsCisgIC8qKgorICAgKiBJbmRpY2F0ZXMgYSBoZWFkZXIgd2FzIGVtaXR0ZWQuCisgICAqLworICBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVCA9IDB4MDIKK30gbmdodHRwMl9oZF9pbmZsYXRlX2ZsYWc7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogLi4gd2FybmluZzo6CisgKgorICogICBEZXByZWNhdGVkLiAgVXNlIGBuZ2h0dHAyX2hkX2luZmxhdGVfaGQyKClgIGluc3RlYWQuCisgKgorICogSW5mbGF0ZXMgbmFtZS92YWx1ZSBibG9jayBzdG9yZWQgaW4gfGlufCB3aXRoIGxlbmd0aCB8aW5sZW58LiAgVGhpcworICogZnVuY3Rpb24gcGVyZm9ybXMgZGVjb21wcmVzc2lvbi4gIEZvciBlYWNoIHN1Y2Nlc3NmdWwgZW1pc3Npb24gb2YKKyAqIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIsIDplbnVtOmBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVGAgaXMgc2V0IGluCisgKiB8KmluZmxhdGVfZmxhZ3N8IGFuZCBuYW1lL3ZhbHVlIHBhaXIgaXMgYXNzaWduZWQgdG8gdGhlIHxudl9vdXR8CisgKiBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMuICBUaGUgY2FsbGVyIG11c3Qgbm90IGZyZWUgdGhlIG1lbWJlcnMgb2YKKyAqIHxudl9vdXR8LgorICoKKyAqIFRoZSB8bnZfb3V0fCBtYXkgaW5jbHVkZSBwb2ludGVycyB0byB0aGUgbWVtb3J5IHJlZ2lvbiBpbiB0aGUgfGlufC4KKyAqIFRoZSBjYWxsZXIgbXVzdCByZXRhaW4gdGhlIHxpbnwgd2hpbGUgdGhlIHxudl9vdXR8IGlzIHVzZWQuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB1bnRpbCB0aGUKKyAqIGBgKCppbmZsYXRlX2ZsYWdzKSAmIE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTGBgIGlzIG5vbnplcm8gYW5kCisgKiByZXR1cm4gdmFsdWUgaXMgbm9uLW5lZ2F0aXZlLiAgVGhpcyBtZWFucyB0aGUgYWxsIGlucHV0IHZhbHVlcyBhcmUKKyAqIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuICBUaGVuIHRoZSBhcHBsaWNhdGlvbiBtdXN0IGNhbGwKKyAqIGBuZ2h0dHAyX2hkX2luZmxhdGVfZW5kX2hlYWRlcnMoKWAgdG8gcHJlcGFyZSBmb3IgdGhlIG5leHQgaGVhZGVyCisgKiBibG9jayBpbnB1dC4KKyAqCisgKiBUaGUgY2FsbGVyIGNhbiBmZWVkIGNvbXBsZXRlIGNvbXByZXNzZWQgaGVhZGVyIGJsb2NrLiAgSXQgYWxzbyBjYW4KKyAqIGZlZWQgaXQgaW4gc2V2ZXJhbCBjaHVua3MuICBUaGUgY2FsbGVyIG11c3Qgc2V0IHxpbl9maW5hbHwgdG8KKyAqIG5vbnplcm8gaWYgdGhlIGdpdmVuIGlucHV0IGlzIHRoZSBsYXN0IGJsb2NrIG9mIHRoZSBjb21wcmVzc2VkCisgKiBoZWFkZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkIGlmIGl0IHN1Y2NlZWRzLAorICogb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVBgCisgKiAgICAgSW5mbGF0aW9uIHByb2Nlc3MgaGFzIGZhaWxlZC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1JgCisgKiAgICAgVGhlIGhlYWRlciBmaWVsZCBuYW1lIG9yIHZhbHVlIGlzIHRvbyBsYXJnZS4KKyAqCisgKiBFeGFtcGxlIGZvbGxvd3M6OgorICoKKyAqICAgICBpbnQgaW5mbGF0ZV9oZWFkZXJfYmxvY2sobmdodHRwMl9oZF9pbmZsYXRlciAqaGRfaW5mbGF0ZXIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmluLCBzaXplX3QgaW5sZW4sIGludCBmaW5hbCkKKyAqICAgICB7CisgKiAgICAgICAgIHNzaXplX3QgcnY7CisgKgorICogICAgICAgICBmb3IoOzspIHsKKyAqICAgICAgICAgICAgIG5naHR0cDJfbnYgbnY7CisgKiAgICAgICAgICAgICBpbnQgaW5mbGF0ZV9mbGFncyA9IDA7CisgKgorICogICAgICAgICAgICAgcnYgPSBuZ2h0dHAyX2hkX2luZmxhdGVfaGQoaGRfaW5mbGF0ZXIsICZudiwgJmluZmxhdGVfZmxhZ3MsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiwgaW5sZW4sIGZpbmFsKTsKKyAqCisgKiAgICAgICAgICAgICBpZihydiA8IDApIHsKKyAqICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluZmxhdGUgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlemQiLCBydik7CisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICogICAgICAgICAgICAgfQorICoKKyAqICAgICAgICAgICAgIGluICs9IHJ2OworICogICAgICAgICAgICAgaW5sZW4gLT0gcnY7CisgKgorICogICAgICAgICAgICAgaWYoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9FTUlUKSB7CisgKiAgICAgICAgICAgICAgICAgZndyaXRlKG52Lm5hbWUsIG52Lm5hbWVsZW4sIDEsIHN0ZGVycik7CisgKiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI6ICIpOworICogICAgICAgICAgICAgICAgIGZ3cml0ZShudi52YWx1ZSwgbnYudmFsdWVsZW4sIDEsIHN0ZGVycik7CisgKiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICogICAgICAgICAgICAgfQorICogICAgICAgICAgICAgaWYoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTCkgeworICogICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfaW5mbGF0ZV9lbmRfaGVhZGVycyhoZF9pbmZsYXRlcik7CisgKiAgICAgICAgICAgICAgICAgYnJlYWs7CisgKiAgICAgICAgICAgICB9CisgKiAgICAgICAgICAgICBpZigoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9FTUlUKSA9PSAwICYmCisgKiAgICAgICAgICAgICAgICBpbmxlbiA9PSAwKSB7CisgKiAgICAgICAgICAgICAgICBicmVhazsKKyAqICAgICAgICAgICAgIH0KKyAqICAgICAgICAgfQorICoKKyAqICAgICAgICAgcmV0dXJuIDA7CisgKiAgICAgfQorICoKKyAqLworTkdIVFRQMl9FWFRFUk4gc3NpemVfdCBuZ2h0dHAyX2hkX2luZmxhdGVfaGQobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluZmxhdGVfZmxhZ3MsIHVpbnQ4X3QgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlubGVuLCBpbnQgaW5fZmluYWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluZmxhdGVzIG5hbWUvdmFsdWUgYmxvY2sgc3RvcmVkIGluIHxpbnwgd2l0aCBsZW5ndGggfGlubGVufC4gIFRoaXMKKyAqIGZ1bmN0aW9uIHBlcmZvcm1zIGRlY29tcHJlc3Npb24uICBGb3IgZWFjaCBzdWNjZXNzZnVsIGVtaXNzaW9uIG9mCisgKiBoZWFkZXIgbmFtZS92YWx1ZSBwYWlyLCA6ZW51bTpgTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVRgIGlzIHNldCBpbgorICogfCppbmZsYXRlX2ZsYWdzfCBhbmQgbmFtZS92YWx1ZSBwYWlyIGlzIGFzc2lnbmVkIHRvIHRoZSB8bnZfb3V0fAorICogYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zLiAgVGhlIGNhbGxlciBtdXN0IG5vdCBmcmVlIHRoZSBtZW1iZXJzIG9mCisgKiB8bnZfb3V0fC4KKyAqCisgKiBUaGUgfG52X291dHwgbWF5IGluY2x1ZGUgcG9pbnRlcnMgdG8gdGhlIG1lbW9yeSByZWdpb24gaW4gdGhlIHxpbnwuCisgKiBUaGUgY2FsbGVyIG11c3QgcmV0YWluIHRoZSB8aW58IHdoaWxlIHRoZSB8bnZfb3V0fCBpcyB1c2VkLgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHkgdW50aWwgdGhlCisgKiBgYCgqaW5mbGF0ZV9mbGFncykgJiBOR0hUVFAyX0hEX0lORkxBVEVfRklOQUxgYCBpcyBub256ZXJvIGFuZAorICogcmV0dXJuIHZhbHVlIGlzIG5vbi1uZWdhdGl2ZS4gIElmIHRoYXQgaGFwcGVucywgYWxsIGdpdmVuIGlucHV0CisgKiBkYXRhICh8aW5sZW58IGJ5dGVzKSBhcmUgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseS4gIFRoZW4gdGhlCisgKiBhcHBsaWNhdGlvbiBtdXN0IGNhbGwgYG5naHR0cDJfaGRfaW5mbGF0ZV9lbmRfaGVhZGVycygpYCB0byBwcmVwYXJlCisgKiBmb3IgdGhlIG5leHQgaGVhZGVyIGJsb2NrIGlucHV0LgorICoKKyAqIEluIG90aGVyIHdvcmRzLCBpZiB8aW5fZmluYWx8IGlzIG5vbnplcm8sIGFuZCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIHxpbmxlbnwsIHlvdSBjYW4gYXNzZXJ0IHRoYXQgOmVudW06YE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTGAgaXMKKyAqIHNldCBpbiB8KmluZmxhdGVfZmxhZ3N8LgorICoKKyAqIFRoZSBjYWxsZXIgY2FuIGZlZWQgY29tcGxldGUgY29tcHJlc3NlZCBoZWFkZXIgYmxvY2suICBJdCBhbHNvIGNhbgorICogZmVlZCBpdCBpbiBzZXZlcmFsIGNodW5rcy4gIFRoZSBjYWxsZXIgbXVzdCBzZXQgfGluX2ZpbmFsfCB0bworICogbm9uemVybyBpZiB0aGUgZ2l2ZW4gaW5wdXQgaXMgdGhlIGxhc3QgYmxvY2sgb2YgdGhlIGNvbXByZXNzZWQKKyAqIGhlYWRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgaWYgaXQgc3VjY2VlZHMsCisgKiBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUGAKKyAqICAgICBJbmZsYXRpb24gcHJvY2VzcyBoYXMgZmFpbGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUmAKKyAqICAgICBUaGUgaGVhZGVyIGZpZWxkIG5hbWUgb3IgdmFsdWUgaXMgdG9vIGxhcmdlLgorICoKKyAqIEV4YW1wbGUgZm9sbG93czo6CisgKgorICogICAgIGludCBpbmZsYXRlX2hlYWRlcl9ibG9jayhuZ2h0dHAyX2hkX2luZmxhdGVyICpoZF9pbmZsYXRlciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqaW4sIHNpemVfdCBpbmxlbiwgaW50IGZpbmFsKQorICogICAgIHsKKyAqICAgICAgICAgc3NpemVfdCBydjsKKyAqCisgKiAgICAgICAgIGZvcig7OykgeworICogICAgICAgICAgICAgbmdodHRwMl9udiBudjsKKyAqICAgICAgICAgICAgIGludCBpbmZsYXRlX2ZsYWdzID0gMDsKKyAqCisgKiAgICAgICAgICAgICBydiA9IG5naHR0cDJfaGRfaW5mbGF0ZV9oZDIoaGRfaW5mbGF0ZXIsICZudiwgJmluZmxhdGVfZmxhZ3MsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4sIGlubGVuLCBmaW5hbCk7CisgKgorICogICAgICAgICAgICAgaWYocnYgPCAwKSB7CisgKiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbmZsYXRlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJXpkIiwgcnYpOworICogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAqICAgICAgICAgICAgIH0KKyAqCisgKiAgICAgICAgICAgICBpbiArPSBydjsKKyAqICAgICAgICAgICAgIGlubGVuIC09IHJ2OworICoKKyAqICAgICAgICAgICAgIGlmKGluZmxhdGVfZmxhZ3MgJiBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVCkgeworICogICAgICAgICAgICAgICAgIGZ3cml0ZShudi5uYW1lLCBudi5uYW1lbGVuLCAxLCBzdGRlcnIpOworICogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiOiAiKTsKKyAqICAgICAgICAgICAgICAgICBmd3JpdGUobnYudmFsdWUsIG52LnZhbHVlbGVuLCAxLCBzdGRlcnIpOworICogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAqICAgICAgICAgICAgIH0KKyAqICAgICAgICAgICAgIGlmKGluZmxhdGVfZmxhZ3MgJiBOR0hUVFAyX0hEX0lORkxBVEVfRklOQUwpIHsKKyAqICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX2luZmxhdGVfZW5kX2hlYWRlcnMoaGRfaW5mbGF0ZXIpOworICogICAgICAgICAgICAgICAgIGJyZWFrOworICogICAgICAgICAgICAgfQorICogICAgICAgICAgICAgaWYoKGluZmxhdGVfZmxhZ3MgJiBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVCkgPT0gMCAmJgorICogICAgICAgICAgICAgICAgaW5sZW4gPT0gMCkgeworICogICAgICAgICAgICAgICAgYnJlYWs7CisgKiAgICAgICAgICAgICB9CisgKiAgICAgICAgIH0KKyAqCisgKiAgICAgICAgIHJldHVybiAwOworICogICAgIH0KKyAqCisgKi8KK05HSFRUUDJfRVhURVJOIHNzaXplX3QgbmdodHRwMl9oZF9pbmZsYXRlX2hkMihuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppbmZsYXRlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluLCBzaXplX3QgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluX2ZpbmFsKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTaWduYWxzIHRoZSBlbmQgb2YgZGVjb21wcmVzc2lvbiBmb3Igb25lIGhlYWRlciBibG9jay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcy4gQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24KKyAqIGFsd2F5cyBzdWNjZWVkcy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX2hkX2luZmxhdGVfZW5kX2hlYWRlcnMobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgaGVhZGVyIHRhYmxlIG9mIHxpbmZsYXRlcnwKKyAqIGNvbnRhaW5zLiAgVGhpcyBpcyB0aGUgc3VtIG9mIHRoZSBudW1iZXIgb2Ygc3RhdGljIHRhYmxlIGFuZAorICogZHluYW1pYyB0YWJsZSwgc28gdGhlIHJldHVybiB2YWx1ZSBpcyBhdCBsZWFzdCA2MS4KKyAqLworTkdIVFRQMl9FWFRFUk4KK3NpemVfdCBuZ2h0dHAyX2hkX2luZmxhdGVfZ2V0X251bV90YWJsZV9lbnRyaWVzKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSB0YWJsZSBlbnRyeSBkZW5vdGVkIGJ5IHxpZHh8IGZyb20gaGVhZGVyIHRhYmxlIG9mCisgKiB8aW5mbGF0ZXJ8LiAgVGhlIHxpZHh8IGlzIDEtYmFzZWQsIGFuZCBpZHg9MSByZXR1cm5zIGZpcnN0IGVudHJ5IG9mCisgKiBzdGF0aWMgdGFibGUuICBpZHg9NjIgcmV0dXJucyBmaXJzdCBlbnRyeSBvZiBkeW5hbWljIHRhYmxlIGlmIGl0CisgKiBleGlzdHMuICBTcGVjaWZ5aW5nIGlkeD0wIGlzIGVycm9yLCBhbmQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKiBJZiB8aWR4fCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoZSB0YWJsZXMKKyAqIGNvbnRhaW4sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgorICovCitOR0hUVFAyX0VYVEVSTgorY29uc3QgbmdodHRwMl9udiAqCituZ2h0dHAyX2hkX2luZmxhdGVfZ2V0X3RhYmxlX2VudHJ5KG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLCBzaXplX3QgaWR4KTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSB1c2VkIGR5bmFtaWMgdGFibGUgc2l6ZSwgaW5jbHVkaW5nIHRoZSBvdmVyaGVhZCAzMgorICogYnl0ZXMgcGVyIGVudHJ5IGRlc2NyaWJlZCBpbiBSRkMgNzU0MS4KKyAqLworTkdIVFRQMl9FWFRFUk4KK3NpemVfdCBuZ2h0dHAyX2hkX2luZmxhdGVfZ2V0X2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbWF4aW11bSBkeW5hbWljIHRhYmxlIHNpemUuCisgKi8KK05HSFRUUDJfRVhURVJOCitzaXplX3QKK25naHR0cDJfaGRfaW5mbGF0ZV9nZXRfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcik7CisKK3N0cnVjdCBuZ2h0dHAyX3N0cmVhbTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIHN0cnVjdHVyZSB0byByZXByZXNlbnQgSFRUUC8yIHN0cmVhbS4gIFRoZSBkZXRhaWxzIG9mIHRoaXMKKyAqIHN0cnVjdHVyZSBhcmUgaW50ZW50aW9uYWxseSBoaWRkZW4gZnJvbSB0aGUgcHVibGljIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9zdHJlYW0gbmdodHRwMl9zdHJlYW07CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIDp0eXBlOmBuZ2h0dHAyX3N0cmVhbWAgb2JqZWN0IGRlbm90ZWQgYnkKKyAqIHxzdHJlYW1faWR8LiAgSWYgc3RyZWFtIHdhcyBub3QgZm91bmQsIHJldHVybnMgTlVMTC4KKyAqCisgKiBSZXR1cm5zIGltYWdpbmFyeSByb290IHN0cmVhbSAoc2VlCisgKiBgbmdodHRwMl9zZXNzaW9uX2dldF9yb290X3N0cmVhbSgpYCkgaWYgMCBpcyBnaXZlbiBpbiB8c3RyZWFtX2lkfC4KKyAqCisgKiBVbmxlc3MgfHN0cmVhbV9pZHwgPT0gMCwgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgdmFsaWQgdW50aWwgbmV4dAorICogY2FsbCBvZiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAsIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAsCisgKiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAsIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgLgorICovCitOR0hUVFAyX0VYVEVSTiBuZ2h0dHAyX3N0cmVhbSAqCituZ2h0dHAyX3Nlc3Npb25fZmluZF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogQGVudW0KKyAqCisgKiBTdGF0ZSBvZiBzdHJlYW0gYXMgZGVzY3JpYmVkIGluIFJGQyA3NTQwLgorICovCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogaWRsZSBzdGF0ZS4KKyAgICovCisgIE5HSFRUUDJfU1RSRUFNX1NUQVRFX0lETEUgPSAxLAorICAvKioKKyAgICogb3BlbiBzdGF0ZS4KKyAgICovCisgIE5HSFRUUDJfU1RSRUFNX1NUQVRFX09QRU4sCisgIC8qKgorICAgKiByZXNlcnZlZCAobG9jYWwpIHN0YXRlLgorICAgKi8KKyAgTkdIVFRQMl9TVFJFQU1fU1RBVEVfUkVTRVJWRURfTE9DQUwsCisgIC8qKgorICAgKiByZXNlcnZlZCAocmVtb3RlKSBzdGF0ZS4KKyAgICovCisgIE5HSFRUUDJfU1RSRUFNX1NUQVRFX1JFU0VSVkVEX1JFTU9URSwKKyAgLyoqCisgICAqIGhhbGYgY2xvc2VkIChsb2NhbCkgc3RhdGUuCisgICAqLworICBOR0hUVFAyX1NUUkVBTV9TVEFURV9IQUxGX0NMT1NFRF9MT0NBTCwKKyAgLyoqCisgICAqIGhhbGYgY2xvc2VkIChyZW1vdGUpIHN0YXRlLgorICAgKi8KKyAgTkdIVFRQMl9TVFJFQU1fU1RBVEVfSEFMRl9DTE9TRURfUkVNT1RFLAorICAvKioKKyAgICogY2xvc2VkIHN0YXRlLgorICAgKi8KKyAgTkdIVFRQMl9TVFJFQU1fU1RBVEVfQ0xPU0VECit9IG5naHR0cDJfc3RyZWFtX3Byb3RvX3N0YXRlOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgc3RhdGUgb2YgfHN0cmVhbXwuICBUaGUgcm9vdCBzdHJlYW0gcmV0cmlldmVkIGJ5CisgKiBgbmdodHRwMl9zZXNzaW9uX2dldF9yb290X3N0cmVhbSgpYCB3aWxsIGhhdmUgc3RyZWFtIHN0YXRlCisgKiA6ZW51bTpgTkdIVFRQMl9TVFJFQU1fU1RBVEVfSURMRWAuCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfc3RyZWFtX3Byb3RvX3N0YXRlCituZ2h0dHAyX3N0cmVhbV9nZXRfc3RhdGUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyByb290IG9mIGRlcGVuZGVuY3kgdHJlZSwgd2hpY2ggaXMgaW1hZ2luYXJ5IHN0cmVhbSB3aXRoCisgKiBzdHJlYW0gSUQgMC4gIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIHZhbGlkIHVudGlsIHxzZXNzaW9ufCBpcworICogZnJlZWQgYnkgYG5naHR0cDJfc2Vzc2lvbl9kZWwoKWAuCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfc3RyZWFtICoKK25naHR0cDJfc2Vzc2lvbl9nZXRfcm9vdF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBwYXJlbnQgc3RyZWFtIG9mIHxzdHJlYW18IGluIGRlcGVuZGVuY3kgdHJlZS4gIFJldHVybnMKKyAqIE5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaCBzdHJlYW0uCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfc3RyZWFtICoKK25naHR0cDJfc3RyZWFtX2dldF9wYXJlbnQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKK05HSFRUUDJfRVhURVJOIGludDMyX3QgbmdodHRwMl9zdHJlYW1fZ2V0X3N0cmVhbV9pZChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IHNpYmxpbmcgc3RyZWFtIG9mIHxzdHJlYW18IGluIGRlcGVuZGVuY3kgdHJlZS4KKyAqIFJldHVybnMgTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIHN0cmVhbS4KKyAqLworTkdIVFRQMl9FWFRFUk4gbmdodHRwMl9zdHJlYW0gKgorbmdodHRwMl9zdHJlYW1fZ2V0X25leHRfc2libGluZyhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBzaWJsaW5nIHN0cmVhbSBvZiB8c3RyZWFtfCBpbiBkZXBlbmRlbmN5IHRyZWUuCisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaCBzdHJlYW0uCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfc3RyZWFtICoKK25naHR0cDJfc3RyZWFtX2dldF9wcmV2aW91c19zaWJsaW5nKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIHN0cmVhbSBvZiB8c3RyZWFtfCBpbiBkZXBlbmRlbmN5IHRyZWUuCisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaCBzdHJlYW0uCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfc3RyZWFtICoKK25naHR0cDJfc3RyZWFtX2dldF9maXJzdF9jaGlsZChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIGRlcGVuZGVuY3kgd2VpZ2h0IHRvIHRoZSBwYXJlbnQgc3RyZWFtIG9mIHxzdHJlYW18LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90IG5naHR0cDJfc3RyZWFtX2dldF93ZWlnaHQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgc3VtIG9mIHRoZSB3ZWlnaHQgZm9yIHxzdHJlYW18J3MgY2hpbGRyZW4uCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QKK25naHR0cDJfc3RyZWFtX2dldF9zdW1fZGVwZW5kZW5jeV93ZWlnaHQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBsaWJyYXJ5IG91dHB1dHMgZGVidWcgbG9nZ2luZy4KKyAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudHMgc3VpdGFibGUgZm9yIGBgdmZwcmludGYoMylgYAorICoKKyAqIFRoZSBkZWJ1ZyBvdXRwdXQgaXMgb25seSBlbmFibGVkIGlmIHRoZSBsaWJyYXJ5IGlzIGJ1aWx0IHdpdGgKKyAqIGBgREVCVUdCVUlMRGBgIG1hY3JvIGRlZmluZWQuCisgKi8KK3R5cGVkZWYgdm9pZCAoKm5naHR0cDJfZGVidWdfdnByaW50Zl9jYWxsYmFjaykoY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgYSBkZWJ1ZyBvdXRwdXQgY2FsbGJhY2sgY2FsbGVkIGJ5IHRoZSBsaWJyYXJ5IHdoZW4gYnVpbHQgd2l0aAorICogYGBERUJVR0JVSUxEYGAgbWFjcm8gZGVmaW5lZC4gIElmIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLCBkZWJ1ZworICogbG9nIGlzIHdyaXR0ZW4gaW50byBzdGFuZGFyZCBlcnJvciBvdXRwdXQuCisgKgorICogRm9yIGJ1aWxkcyB3aXRob3V0IGBgREVCVUdCVUlMRGBgIG1hY3JvIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gaXMKKyAqIG5vb3AuCisgKgorICogTm90ZSB0aGF0IGJ1aWxkaW5nIHdpdGggYGBERUJVR0JVSUxEYGAgbWF5IGNhdXNlIHNpZ25pZmljYW50CisgKiBwZXJmb3JtYW5jZSBwZW5hbHR5IHRvIGxpYm5naHR0cDIgYmVjYXVzZSBvZiBleHRyYSBwcm9jZXNzaW5nLiAgSXQKKyAqIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5LgorICoKKyAqIC4uIFdhcm5pbmc6OgorICoKKyAqICAgQnVpbGRpbmcgd2l0aCBgYERFQlVHQlVJTERgYCBtYXkgY2F1c2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UKKyAqICAgcGVuYWx0eSB0byBsaWJuZ2h0dHAyIGJlY2F1c2Ugb2YgZXh0cmEgcHJvY2Vzc2luZy4gIEl0IHNob3VsZCBiZQorICogICB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5LiAgV2Ugd3JpdGUgdGhpcyB0d28gdGltZXMgYmVjYXVzZQorICogICB0aGlzIGlzIGltcG9ydGFudC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3NldF9kZWJ1Z192cHJpbnRmX2NhbGxiYWNrKAorICAgIG5naHR0cDJfZGVidWdfdnByaW50Zl9jYWxsYmFjayBkZWJ1Z192cHJpbnRmX2NhbGxiYWNrKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5HSFRUUDJfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAydmVyLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQyMWUyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAydmVyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCAyMDEzIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJWRVJfSAorI2RlZmluZSBOR0hUVFAyVkVSX0gKKworLyoqCisgKiBAbWFjcm8KKyAqIFZlcnNpb24gbnVtYmVyIG9mIHRoZSBuZ2h0dHAyIGxpYnJhcnkgcmVsZWFzZQorICovCisjZGVmaW5lIE5HSFRUUDJfVkVSU0lPTiAiMS40MC4wIgorCisvKioKKyAqIEBtYWNybworICogTnVtZXJpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbmdodHRwMiBsaWJyYXJ5CisgKiByZWxlYXNlLiBUaGlzIGlzIGEgMjQgYml0IG51bWJlciB3aXRoIDggYml0cyBmb3IgbWFqb3IgbnVtYmVyLCA4IGJpdHMKKyAqIGZvciBtaW5vciBhbmQgOCBiaXRzIGZvciBwYXRjaC4gVmVyc2lvbiAxLjIuMyBiZWNvbWVzIDB4MDEwMjAzLgorICovCisjZGVmaW5lIE5HSFRUUDJfVkVSU0lPTl9OVU0gMHgwMTI4MDAKKworI2VuZGlmIC8qIE5HSFRUUDJWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9idWYuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0MzViZQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfYnVmLmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfYnVmLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2RlYnVnLmgiCisKK3ZvaWQgbmdodHRwMl9idWZfaW5pdChuZ2h0dHAyX2J1ZiAqYnVmKSB7CisgIGJ1Zi0+YmVnaW4gPSBOVUxMOworICBidWYtPmVuZCA9IE5VTEw7CisgIGJ1Zi0+cG9zID0gTlVMTDsKKyAgYnVmLT5sYXN0ID0gTlVMTDsKKyAgYnVmLT5tYXJrID0gTlVMTDsKK30KKworaW50IG5naHR0cDJfYnVmX2luaXQyKG5naHR0cDJfYnVmICpidWYsIHNpemVfdCBpbml0aWFsLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfYnVmX2luaXQoYnVmKTsKKyAgcmV0dXJuIG5naHR0cDJfYnVmX3Jlc2VydmUoYnVmLCBpbml0aWFsLCBtZW0pOworfQorCit2b2lkIG5naHR0cDJfYnVmX2ZyZWUobmdodHRwMl9idWYgKmJ1ZiwgbmdodHRwMl9tZW0gKm1lbSkgeworICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgYnVmLT5iZWdpbik7CisgIGJ1Zi0+YmVnaW4gPSBOVUxMOworfQorCitpbnQgbmdodHRwMl9idWZfcmVzZXJ2ZShuZ2h0dHAyX2J1ZiAqYnVmLCBzaXplX3QgbmV3X2NhcCwgbmdodHRwMl9tZW0gKm1lbSkgeworICB1aW50OF90ICpwdHI7CisgIHNpemVfdCBjYXA7CisKKyAgY2FwID0gbmdodHRwMl9idWZfY2FwKGJ1Zik7CisKKyAgaWYgKGNhcCA+PSBuZXdfY2FwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBuZXdfY2FwID0gbmdodHRwMl9tYXgobmV3X2NhcCwgY2FwICogMik7CisKKyAgcHRyID0gbmdodHRwMl9tZW1fcmVhbGxvYyhtZW0sIGJ1Zi0+YmVnaW4sIG5ld19jYXApOworICBpZiAocHRyID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBidWYtPnBvcyA9IHB0ciArIChidWYtPnBvcyAtIGJ1Zi0+YmVnaW4pOworICBidWYtPmxhc3QgPSBwdHIgKyAoYnVmLT5sYXN0IC0gYnVmLT5iZWdpbik7CisgIGJ1Zi0+bWFyayA9IHB0ciArIChidWYtPm1hcmsgLSBidWYtPmJlZ2luKTsKKyAgYnVmLT5iZWdpbiA9IHB0cjsKKyAgYnVmLT5lbmQgPSBwdHIgKyBuZXdfY2FwOworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfYnVmX3Jlc2V0KG5naHR0cDJfYnVmICpidWYpIHsKKyAgYnVmLT5wb3MgPSBidWYtPmxhc3QgPSBidWYtPm1hcmsgPSBidWYtPmJlZ2luOworfQorCit2b2lkIG5naHR0cDJfYnVmX3dyYXBfaW5pdChuZ2h0dHAyX2J1ZiAqYnVmLCB1aW50OF90ICpiZWdpbiwgc2l6ZV90IGxlbikgeworICBidWYtPmJlZ2luID0gYnVmLT5wb3MgPSBidWYtPmxhc3QgPSBidWYtPm1hcmsgPSBiZWdpbjsKKyAgYnVmLT5lbmQgPSBiZWdpbiArIGxlbjsKK30KKworc3RhdGljIGludCBidWZfY2hhaW5fbmV3KG5naHR0cDJfYnVmX2NoYWluICoqY2hhaW4sIHNpemVfdCBjaHVua19sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisKKyAgKmNoYWluID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfYnVmX2NoYWluKSk7CisgIGlmICgqY2hhaW4gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgICgqY2hhaW4pLT5uZXh0ID0gTlVMTDsKKworICBydiA9IG5naHR0cDJfYnVmX2luaXQyKCYoKmNoYWluKS0+YnVmLCBjaHVua19sZW5ndGgsIG1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sICpjaGFpbik7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJ1Zl9jaGFpbl9kZWwobmdodHRwMl9idWZfY2hhaW4gKmNoYWluLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfYnVmX2ZyZWUoJmNoYWluLT5idWYsIG1lbSk7CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBjaGFpbik7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfaW5pdChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHNpemVfdCBjaHVua19sZW5ndGgsIHNpemVfdCBtYXhfY2h1bmssCisgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICByZXR1cm4gbmdodHRwMl9idWZzX2luaXQyKGJ1ZnMsIGNodW5rX2xlbmd0aCwgbWF4X2NodW5rLCAwLCBtZW0pOworfQorCitpbnQgbmdodHRwMl9idWZzX2luaXQyKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9jaHVuaywgc2l6ZV90IG9mZnNldCwgbmdodHRwMl9tZW0gKm1lbSkgeworICByZXR1cm4gbmdodHRwMl9idWZzX2luaXQzKGJ1ZnMsIGNodW5rX2xlbmd0aCwgbWF4X2NodW5rLCBtYXhfY2h1bmssIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0pOworfQorCitpbnQgbmdodHRwMl9idWZzX2luaXQzKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9jaHVuaywgc2l6ZV90IGNodW5rX2tlZXAsIHNpemVfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2hhaW47CisKKyAgaWYgKGNodW5rX2tlZXAgPT0gMCB8fCBtYXhfY2h1bmsgPCBjaHVua19rZWVwIHx8IGNodW5rX2xlbmd0aCA8IG9mZnNldCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgcnYgPSBidWZfY2hhaW5fbmV3KCZjaGFpbiwgY2h1bmtfbGVuZ3RoLCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGJ1ZnMtPm1lbSA9IG1lbTsKKyAgYnVmcy0+b2Zmc2V0ID0gb2Zmc2V0OworCisgIGJ1ZnMtPmhlYWQgPSBjaGFpbjsKKyAgYnVmcy0+Y3VyID0gYnVmcy0+aGVhZDsKKworICBuZ2h0dHAyX2J1Zl9zaGlmdF9yaWdodCgmYnVmcy0+Y3VyLT5idWYsIG9mZnNldCk7CisKKyAgYnVmcy0+Y2h1bmtfbGVuZ3RoID0gY2h1bmtfbGVuZ3RoOworICBidWZzLT5jaHVua191c2VkID0gMTsKKyAgYnVmcy0+bWF4X2NodW5rID0gbWF4X2NodW5rOworICBidWZzLT5jaHVua19rZWVwID0gY2h1bmtfa2VlcDsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfYnVmc19yZWFsbG9jKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCkgeworICBpbnQgcnY7CisgIG5naHR0cDJfYnVmX2NoYWluICpjaGFpbjsKKworICBpZiAoY2h1bmtfbGVuZ3RoIDwgYnVmcy0+b2Zmc2V0KSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBydiA9IGJ1Zl9jaGFpbl9uZXcoJmNoYWluLCBjaHVua19sZW5ndGgsIGJ1ZnMtPm1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgbmdodHRwMl9idWZzX2ZyZWUoYnVmcyk7CisKKyAgYnVmcy0+aGVhZCA9IGNoYWluOworICBidWZzLT5jdXIgPSBidWZzLT5oZWFkOworCisgIG5naHR0cDJfYnVmX3NoaWZ0X3JpZ2h0KCZidWZzLT5jdXItPmJ1ZiwgYnVmcy0+b2Zmc2V0KTsKKworICBidWZzLT5jaHVua19sZW5ndGggPSBjaHVua19sZW5ndGg7CisgIGJ1ZnMtPmNodW5rX3VzZWQgPSAxOworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfYnVmc19mcmVlKG5naHR0cDJfYnVmcyAqYnVmcykgeworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2hhaW4sICpuZXh0X2NoYWluOworCisgIGlmIChidWZzID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKGNoYWluID0gYnVmcy0+aGVhZDsgY2hhaW47KSB7CisgICAgbmV4dF9jaGFpbiA9IGNoYWluLT5uZXh0OworCisgICAgYnVmX2NoYWluX2RlbChjaGFpbiwgYnVmcy0+bWVtKTsKKworICAgIGNoYWluID0gbmV4dF9jaGFpbjsKKyAgfQorCisgIGJ1ZnMtPmhlYWQgPSBOVUxMOworfQorCitpbnQgbmdodHRwMl9idWZzX3dyYXBfaW5pdChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgKmJlZ2luLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2hhaW47CisKKyAgY2hhaW4gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9idWZfY2hhaW4pKTsKKyAgaWYgKGNoYWluID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBjaGFpbi0+bmV4dCA9IE5VTEw7CisKKyAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZjaGFpbi0+YnVmLCBiZWdpbiwgbGVuKTsKKworICBidWZzLT5tZW0gPSBtZW07CisgIGJ1ZnMtPm9mZnNldCA9IDA7CisKKyAgYnVmcy0+aGVhZCA9IGNoYWluOworICBidWZzLT5jdXIgPSBidWZzLT5oZWFkOworCisgIGJ1ZnMtPmNodW5rX2xlbmd0aCA9IGxlbjsKKyAgYnVmcy0+Y2h1bmtfdXNlZCA9IDE7CisgIGJ1ZnMtPm1heF9jaHVuayA9IDE7CisgIGJ1ZnMtPmNodW5rX2tlZXAgPSAxOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9idWZzX3dyYXBfaW5pdDIobmdodHRwMl9idWZzICpidWZzLCBjb25zdCBuZ2h0dHAyX3ZlYyAqdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2ZWNsZW4sIG5naHR0cDJfbWVtICptZW0pIHsKKyAgc2l6ZV90IGkgPSAwOworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY3VyX2NoYWluOworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqaGVhZF9jaGFpbjsKKyAgbmdodHRwMl9idWZfY2hhaW4gKipkc3RfY2hhaW4gPSAmaGVhZF9jaGFpbjsKKworICBpZiAodmVjbGVuID09IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9idWZzX3dyYXBfaW5pdChidWZzLCBOVUxMLCAwLCBtZW0pOworICB9CisKKyAgaGVhZF9jaGFpbiA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX2J1Zl9jaGFpbikgKiB2ZWNsZW4pOworICBpZiAoaGVhZF9jaGFpbiA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IHZlY2xlbjsgKytpKSB7CisgICAgY3VyX2NoYWluID0gJmhlYWRfY2hhaW5baV07CisgICAgY3VyX2NoYWluLT5uZXh0ID0gTlVMTDsKKyAgICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmN1cl9jaGFpbi0+YnVmLCB2ZWNbaV0uYmFzZSwgdmVjW2ldLmxlbik7CisKKyAgICAqZHN0X2NoYWluID0gY3VyX2NoYWluOworICAgIGRzdF9jaGFpbiA9ICZjdXJfY2hhaW4tPm5leHQ7CisgIH0KKworICBidWZzLT5tZW0gPSBtZW07CisgIGJ1ZnMtPm9mZnNldCA9IDA7CisKKyAgYnVmcy0+aGVhZCA9IGhlYWRfY2hhaW47CisgIGJ1ZnMtPmN1ciA9IGJ1ZnMtPmhlYWQ7CisKKyAgLyogV2UgZG9uJ3QgdXNlIGNodW5rX2xlbmd0aCBzaW5jZSBubyBhbGxvY2F0aW9uIGlzIGV4cGVjdGVkLiAqLworICBidWZzLT5jaHVua19sZW5ndGggPSAwOworICBidWZzLT5jaHVua191c2VkID0gdmVjbGVuOworICBidWZzLT5tYXhfY2h1bmsgPSB2ZWNsZW47CisgIGJ1ZnMtPmNodW5rX2tlZXAgPSB2ZWNsZW47CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9idWZzX3dyYXBfZnJlZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMpIHsKKyAgaWYgKGJ1ZnMgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChidWZzLT5oZWFkKSB7CisgICAgbmdodHRwMl9tZW1fZnJlZShidWZzLT5tZW0sIGJ1ZnMtPmhlYWQpOworICB9Cit9CisKK3ZvaWQgbmdodHRwMl9idWZzX3NlZWtfbGFzdF9wcmVzZW50KG5naHR0cDJfYnVmcyAqYnVmcykgeworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2k7CisKKyAgZm9yIChjaSA9IGJ1ZnMtPmN1cjsgY2k7IGNpID0gY2ktPm5leHQpIHsKKyAgICBpZiAobmdodHRwMl9idWZfbGVuKCZjaS0+YnVmKSA9PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgIGJ1ZnMtPmN1ciA9IGNpOworICAgIH0KKyAgfQorfQorCitzaXplX3QgbmdodHRwMl9idWZzX2xlbihuZ2h0dHAyX2J1ZnMgKmJ1ZnMpIHsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNpOworICBzaXplX3QgbGVuOworCisgIGxlbiA9IDA7CisgIGZvciAoY2kgPSBidWZzLT5oZWFkOyBjaTsgY2kgPSBjaS0+bmV4dCkgeworICAgIGxlbiArPSBuZ2h0dHAyX2J1Zl9sZW4oJmNpLT5idWYpOworICB9CisKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBidWZzX2FsbG9jX2NoYWluKG5naHR0cDJfYnVmcyAqYnVmcykgeworICBpbnQgcnY7CisgIG5naHR0cDJfYnVmX2NoYWluICpjaGFpbjsKKworICBpZiAoYnVmcy0+Y3VyLT5uZXh0KSB7CisgICAgYnVmcy0+Y3VyID0gYnVmcy0+Y3VyLT5uZXh0OworCisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoYnVmcy0+bWF4X2NodW5rID09IGJ1ZnMtPmNodW5rX3VzZWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SOworICB9CisKKyAgcnYgPSBidWZfY2hhaW5fbmV3KCZjaGFpbiwgYnVmcy0+Y2h1bmtfbGVuZ3RoLCBidWZzLT5tZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIERFQlVHRigibmV3IGJ1ZmZlciAlenUgYnl0ZXMgYWxsb2NhdGVkIGZvciBidWZzICVwLCB1c2VkICV6dVxuIiwKKyAgICAgICAgIGJ1ZnMtPmNodW5rX2xlbmd0aCwgYnVmcywgYnVmcy0+Y2h1bmtfdXNlZCk7CisKKyAgKytidWZzLT5jaHVua191c2VkOworCisgIGJ1ZnMtPmN1ci0+bmV4dCA9IGNoYWluOworICBidWZzLT5jdXIgPSBjaGFpbjsKKworICBuZ2h0dHAyX2J1Zl9zaGlmdF9yaWdodCgmYnVmcy0+Y3VyLT5idWYsIGJ1ZnMtPm9mZnNldCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfYWRkKG5naHR0cDJfYnVmcyAqYnVmcywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikgeworICBpbnQgcnY7CisgIHNpemVfdCBud3JpdGU7CisgIG5naHR0cDJfYnVmICpidWY7CisgIGNvbnN0IHVpbnQ4X3QgKnA7CisKKyAgcCA9IGRhdGE7CisKKyAgd2hpbGUgKGxlbikgeworICAgIGJ1ZiA9ICZidWZzLT5jdXItPmJ1ZjsKKworICAgIG53cml0ZSA9IG5naHR0cDJfbWluKG5naHR0cDJfYnVmX2F2YWlsKGJ1ZiksIGxlbik7CisgICAgaWYgKG53cml0ZSA9PSAwKSB7CisgICAgICBydiA9IGJ1ZnNfYWxsb2NfY2hhaW4oYnVmcyk7CisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBidWYtPmxhc3QgPSBuZ2h0dHAyX2NweW1lbShidWYtPmxhc3QsIHAsIG53cml0ZSk7CisgICAgcCArPSBud3JpdGU7CisgICAgbGVuIC09IG53cml0ZTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1ZnNfZW5zdXJlX2FkZGIobmdodHRwMl9idWZzICpidWZzKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKworICBidWYgPSAmYnVmcy0+Y3VyLT5idWY7CisKKyAgaWYgKG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikgPiAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBydiA9IGJ1ZnNfYWxsb2NfY2hhaW4oYnVmcyk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfYWRkYihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgYikgeworICBpbnQgcnY7CisKKyAgcnYgPSBidWZzX2Vuc3VyZV9hZGRiKGJ1ZnMpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgICpidWZzLT5jdXItPmJ1Zi5sYXN0KysgPSBiOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9idWZzX2FkZGJfaG9sZChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgYikgeworICBpbnQgcnY7CisKKyAgcnYgPSBidWZzX2Vuc3VyZV9hZGRiKGJ1ZnMpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgICpidWZzLT5jdXItPmJ1Zi5sYXN0ID0gYjsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfYnVmc19vcmIobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90IGIpIHsKKyAgaW50IHJ2OworCisgIHJ2ID0gYnVmc19lbnN1cmVfYWRkYihidWZzKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICAqYnVmcy0+Y3VyLT5idWYubGFzdCsrIHw9IGI7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfb3JiX2hvbGQobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90IGIpIHsKKyAgaW50IHJ2OworCisgIHJ2ID0gYnVmc19lbnN1cmVfYWRkYihidWZzKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICAqYnVmcy0+Y3VyLT5idWYubGFzdCB8PSBiOworCisgIHJldHVybiAwOworfQorCitzc2l6ZV90IG5naHR0cDJfYnVmc19yZW1vdmUobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90ICoqb3V0KSB7CisgIHNpemVfdCBsZW47CisgIG5naHR0cDJfYnVmX2NoYWluICpjaGFpbjsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKyAgdWludDhfdCAqcmVzOworICBuZ2h0dHAyX2J1ZiByZXNidWY7CisKKyAgbGVuID0gMDsKKworICBmb3IgKGNoYWluID0gYnVmcy0+aGVhZDsgY2hhaW47IGNoYWluID0gY2hhaW4tPm5leHQpIHsKKyAgICBsZW4gKz0gbmdodHRwMl9idWZfbGVuKCZjaGFpbi0+YnVmKTsKKyAgfQorCisgIGlmIChsZW4gPT0gMCkgeworICAgIHJlcyA9IE5VTEw7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXMgPSBuZ2h0dHAyX21lbV9tYWxsb2MoYnVmcy0+bWVtLCBsZW4pOworICBpZiAocmVzID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJnJlc2J1ZiwgcmVzLCBsZW4pOworCisgIGZvciAoY2hhaW4gPSBidWZzLT5oZWFkOyBjaGFpbjsgY2hhaW4gPSBjaGFpbi0+bmV4dCkgeworICAgIGJ1ZiA9ICZjaGFpbi0+YnVmOworICAgIHJlc2J1Zi5sYXN0ID0gbmdodHRwMl9jcHltZW0ocmVzYnVmLmxhc3QsIGJ1Zi0+cG9zLCBuZ2h0dHAyX2J1Zl9sZW4oYnVmKSk7CisgIH0KKworICAqb3V0ID0gcmVzOworCisgIHJldHVybiAoc3NpemVfdClsZW47Cit9CisKK3NpemVfdCBuZ2h0dHAyX2J1ZnNfcmVtb3ZlX2NvcHkobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90ICpvdXQpIHsKKyAgc2l6ZV90IGxlbjsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNoYWluOworICBuZ2h0dHAyX2J1ZiAqYnVmOworICBuZ2h0dHAyX2J1ZiByZXNidWY7CisKKyAgbGVuID0gbmdodHRwMl9idWZzX2xlbihidWZzKTsKKworICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJnJlc2J1Ziwgb3V0LCBsZW4pOworCisgIGZvciAoY2hhaW4gPSBidWZzLT5oZWFkOyBjaGFpbjsgY2hhaW4gPSBjaGFpbi0+bmV4dCkgeworICAgIGJ1ZiA9ICZjaGFpbi0+YnVmOworICAgIHJlc2J1Zi5sYXN0ID0gbmdodHRwMl9jcHltZW0ocmVzYnVmLmxhc3QsIGJ1Zi0+cG9zLCBuZ2h0dHAyX2J1Zl9sZW4oYnVmKSk7CisgIH0KKworICByZXR1cm4gbGVuOworfQorCit2b2lkIG5naHR0cDJfYnVmc19yZXNldChuZ2h0dHAyX2J1ZnMgKmJ1ZnMpIHsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNoYWluLCAqY2k7CisgIHNpemVfdCBrOworCisgIGsgPSBidWZzLT5jaHVua19rZWVwOworCisgIGZvciAoY2kgPSBidWZzLT5oZWFkOyBjaTsgY2kgPSBjaS0+bmV4dCkgeworICAgIG5naHR0cDJfYnVmX3Jlc2V0KCZjaS0+YnVmKTsKKyAgICBuZ2h0dHAyX2J1Zl9zaGlmdF9yaWdodCgmY2ktPmJ1ZiwgYnVmcy0+b2Zmc2V0KTsKKworICAgIGlmICgtLWsgPT0gMCkgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKGNpKSB7CisgICAgY2hhaW4gPSBjaS0+bmV4dDsKKyAgICBjaS0+bmV4dCA9IE5VTEw7CisKKyAgICBmb3IgKGNpID0gY2hhaW47IGNpOykgeworICAgICAgY2hhaW4gPSBjaS0+bmV4dDsKKworICAgICAgYnVmX2NoYWluX2RlbChjaSwgYnVmcy0+bWVtKTsKKworICAgICAgY2kgPSBjaGFpbjsKKyAgICB9CisKKyAgICBidWZzLT5jaHVua191c2VkID0gYnVmcy0+Y2h1bmtfa2VlcDsKKyAgfQorCisgIGJ1ZnMtPmN1ciA9IGJ1ZnMtPmhlYWQ7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfYWR2YW5jZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMpIHsgcmV0dXJuIGJ1ZnNfYWxsb2NfY2hhaW4oYnVmcyk7IH0KKworaW50IG5naHR0cDJfYnVmc19uZXh0X3ByZXNlbnQobmdodHRwMl9idWZzICpidWZzKSB7CisgIG5naHR0cDJfYnVmX2NoYWluICpjaGFpbjsKKworICBjaGFpbiA9IGJ1ZnMtPmN1ci0+bmV4dDsKKworICByZXR1cm4gY2hhaW4gJiYgbmdodHRwMl9idWZfbGVuKCZjaGFpbi0+YnVmKTsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfYnVmLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Y2NlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2J1Zi5oCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9CVUZfSAorI2RlZmluZSBOR0hUVFAyX0JVRl9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaW50LmgiCisjaW5jbHVkZSAibmdodHRwMl9tZW0uaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGlzIHBvaW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuIFRoZSBlZmZlY3RpdmUgcmFuZ2UKKyAgICAgb2YgYnVmZmVyIGlzIFtiZWdpbiwgZW5kKS4gKi8KKyAgdWludDhfdCAqYmVnaW47CisgIC8qIFRoaXMgcG9pbnRzIHRvIHRoZSBtZW1vcnkgb25lIGJ5dGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlCisgICAgIGJ1ZmZlci4gKi8KKyAgdWludDhfdCAqZW5kOworICAvKiBUaGUgcG9zaXRpb24gaW5kaWNhdG9yIGZvciBlZmZlY3RpdmUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gcG9zIDw9CisgICAgIGxhc3QgbXVzdCBiZSBob2xkLiAqLworICB1aW50OF90ICpwb3M7CisgIC8qIFRoZSBwb3NpdGlvbiBpbmRpY2F0b3IgZm9yIGVmZmVjdGl2ZSBvbmUgYmV5b25kIG9mIHRoZSBlbmQgb2YgdGhlCisgICAgIGJ1ZmZlci4gbGFzdCA8PSBlbmQgbXVzdCBiZSBob2xkLiAqLworICB1aW50OF90ICpsYXN0OworICAvKiBNYXJrIGFyYml0cmFyeSBwb3NpdGlvbiBpbiBidWZmZXIgW2JlZ2luLCBlbmQpICovCisgIHVpbnQ4X3QgKm1hcms7Cit9IG5naHR0cDJfYnVmOworCisjZGVmaW5lIG5naHR0cDJfYnVmX2xlbihCVUYpICgoc2l6ZV90KSgoQlVGKS0+bGFzdCAtIChCVUYpLT5wb3MpKQorI2RlZmluZSBuZ2h0dHAyX2J1Zl9hdmFpbChCVUYpICgoc2l6ZV90KSgoQlVGKS0+ZW5kIC0gKEJVRiktPmxhc3QpKQorI2RlZmluZSBuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKEJVRikgKChzaXplX3QpKChCVUYpLT5tYXJrIC0gKEJVRiktPmxhc3QpKQorI2RlZmluZSBuZ2h0dHAyX2J1Zl9jYXAoQlVGKSAoKHNpemVfdCkoKEJVRiktPmVuZCAtIChCVUYpLT5iZWdpbikpCisKKyNkZWZpbmUgbmdodHRwMl9idWZfcG9zX29mZnNldChCVUYpICgoc2l6ZV90KSgoQlVGKS0+cG9zIC0gKEJVRiktPmJlZ2luKSkKKyNkZWZpbmUgbmdodHRwMl9idWZfbGFzdF9vZmZzZXQoQlVGKSAoKHNpemVfdCkoKEJVRiktPmxhc3QgLSAoQlVGKS0+YmVnaW4pKQorCisjZGVmaW5lIG5naHR0cDJfYnVmX3NoaWZ0X3JpZ2h0KEJVRiwgQU1UKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoQlVGKS0+cG9zICs9IEFNVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKEJVRiktPmxhc3QgKz0gQU1UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIG5naHR0cDJfYnVmX3NoaWZ0X2xlZnQoQlVGLCBBTVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoQlVGKS0+cG9zIC09IEFNVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKEJVRiktPmxhc3QgLT0gQU1UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIHxidWZ8LiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkIGluIHRoaXMgZnVuY3Rpb24uIFVzZQorICogbmdodHRwMl9idWZfcmVzZXJ2ZSgpIHRvIGFsbG9jYXRlIG1lbW9yeS4KKyAqLwordm9pZCBuZ2h0dHAyX2J1Zl9pbml0KG5naHR0cDJfYnVmICpidWYpOworCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIHxidWZ8IGFuZCBhbGxvY2F0ZXMgYXQgbGVhc3QgfGluaXRpYWx8IGJ5dGVzIG9mCisgKiBtZW1vcnkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfYnVmX2luaXQyKG5naHR0cDJfYnVmICpidWYsIHNpemVfdCBpbml0aWFsLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIEZyZWVzIGJ1ZmZlciBpbiB8YnVmfC4KKyAqLwordm9pZCBuZ2h0dHAyX2J1Zl9mcmVlKG5naHR0cDJfYnVmICpidWYsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRXh0ZW5kcyBidWZmZXIgc28gdGhhdCBuZ2h0dHAyX2J1Zl9jYXAoKSByZXR1cm5zIGF0IGxlYXN0CisgKiB8bmV3X2NhcHwuIElmIGV4dGVuc2lvbnMgdG9vayBwbGFjZSwgYnVmZmVyIHBvaW50ZXJzIGluIHxidWZ8IHdpbGwKKyAqIGNoYW5nZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmdzCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfYnVmX3Jlc2VydmUobmdodHRwMl9idWYgKmJ1Ziwgc2l6ZV90IG5ld19jYXAsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogUmVzZXRzIHBvcywgbGFzdCwgbWFyayBtZW1iZXIgb2YgfGJ1ZnwgdG8gYnVmLT5iZWdpbi4KKyAqLwordm9pZCBuZ2h0dHAyX2J1Zl9yZXNldChuZ2h0dHAyX2J1ZiAqYnVmKTsKKworLyoKKyAqIEluaXRpYWxpemVzIHxidWZ8IHVzaW5nIHN1cHBsaWVkIGJ1ZmZlciB8YmVnaW58IG9mIGxlbmd0aAorICogfGxlbnwuIFNlbWFudGljYWxseSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgY2FsbCAqX3Jlc2VydmUoKSBvcgorICogbmdodHRwMl9mcmVlKCkgZnVuY3Rpb25zIGZvciB8YnVmfC4KKyAqLwordm9pZCBuZ2h0dHAyX2J1Zl93cmFwX2luaXQobmdodHRwMl9idWYgKmJ1ZiwgdWludDhfdCAqYmVnaW4sIHNpemVfdCBsZW4pOworCitzdHJ1Y3QgbmdodHRwMl9idWZfY2hhaW47CisKK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfYnVmX2NoYWluIG5naHR0cDJfYnVmX2NoYWluOworCisvKiBDaGFpbnMgMiBidWZmZXJzICovCitzdHJ1Y3QgbmdodHRwMl9idWZfY2hhaW4geworICAvKiBQb2ludHMgdG8gdGhlIHN1YnNlcXVlbnQgYnVmZmVyLiBOVUxMIGlmIHRoZXJlIGlzIG5vIHN1Y2gKKyAgICAgYnVmZmVyLiAqLworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqbmV4dDsKKyAgbmdodHRwMl9idWYgYnVmOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBQb2ludHMgdG8gdGhlIGZpcnN0IGJ1ZmZlciAqLworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqaGVhZDsKKyAgLyogQnVmZmVyIHBvaW50ZXIgd2hlcmUgd3JpdGUgb2NjdXJzLiAqLworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY3VyOworICAvKiBNZW1vcnkgYWxsb2NhdG9yICovCisgIG5naHR0cDJfbWVtICptZW07CisgIC8qIFRoZSBidWZmZXIgY2FwYWNpdHkgb2YgZWFjaCBidWYuICBUaGlzIGZpZWxkIG1heSBiZSAwIGlmCisgICAgIG5naHR0cDJfYnVmcyBpcyBpbml0aWFsaXplZCBieSBuZ2h0dHAyX2J1ZnNfd3JhcF9pbml0KiBmYW1pbHkKKyAgICAgZnVuY3Rpb25zLiAqLworICBzaXplX3QgY2h1bmtfbGVuZ3RoOworICAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbmdodHRwMl9idWZfY2hhaW4gKi8KKyAgc2l6ZV90IG1heF9jaHVuazsKKyAgLyogVGhlIG51bWJlciBvZiBuZ2h0dHAyX2J1Zl9jaGFpbiBhbGxvY2F0ZWQgKi8KKyAgc2l6ZV90IGNodW5rX3VzZWQ7CisgIC8qIFRoZSBudW1iZXIgb2YgbmdodHRwMl9idWZfY2hhaW4gdG8ga2VlcCBvbiByZXNldCAqLworICBzaXplX3QgY2h1bmtfa2VlcDsKKyAgLyogcG9zIG9mZnNldCBmcm9tIGJlZ2luIGluIGVhY2ggYnVmZmVycy4gT24gaW5pdGlhbGl6YXRpb24gYW5kCisgICAgIHJlc2V0LCBidWYtPnBvcyBhbmQgYnVmLT5sYXN0IGFyZSBwb3NpdGlvbmVkIGF0IGJ1Zi0+YmVnaW4gKworICAgICBvZmZzZXQuICovCisgIHNpemVfdCBvZmZzZXQ7Cit9IG5naHR0cDJfYnVmczsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBuZ2h0dHAyX2J1ZnNfaW5pdDIgd2l0aCB0aGUgZ2l2ZW4KKyAqIGFyZ3VtZW50cyBhbmQgb2Zmc2V0ID0gMC4KKyAqLworaW50IG5naHR0cDJfYnVmc19pbml0KG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCwgc2l6ZV90IG1heF9jaHVuaywKKyAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBuZ2h0dHAyX2J1ZnNfaW5pdDMgd2l0aCB0aGUgZ2l2ZW4KKyAqIGFyZ3VtZW50cyBhbmQgY2h1bmtfa2VlcCA9IG1heF9jaHVuay4KKyAqLworaW50IG5naHR0cDJfYnVmc19pbml0MihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHNpemVfdCBjaHVua19sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfY2h1bmssIHNpemVfdCBvZmZzZXQsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogSW5pdGlhbGl6ZXMgfGJ1ZnN8LiBFYWNoIGJ1ZmZlciBzaXplIGlzIGdpdmVuIGluIHRoZQorICogfGNodW5rX2xlbmd0aHwuICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVycyBpcyBnaXZlbiBpbiB0aGUKKyAqIHxtYXhfY2h1bmt8LiAgT24gcmVzZXQsIGZpcnN0IHxjaHVua19rZWVwfCBidWZmZXJzIGFyZSBrZXB0IGFuZAorICogcmVtYWluaW5nIGJ1ZmZlcnMgYXJlIGRlbGV0ZWQuICBFYWNoIGJ1ZmZlciB3aWxsIGhhdmUgYnVmcy0+cG9zIGFuZAorICogYnVmcy0+bGFzdCBzaGlmdGVkIHRvIGxlZnQgYnkgfG9mZnNldHwgYnl0ZXMgb24gY3JlYXRpb24gYW5kIHJlc2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGZpcnN0IGJ1ZmZlci4gIGJ1ZnMtPmhlYWQgYW5kIGJ1ZnMtPmN1cgorICogd2lsbCBwb2ludCB0byB0aGUgZmlyc3QgYnVmZmVyIGFmdGVyIHRoaXMgY2FsbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgICBjaHVua19rZWVwIGlzIDA7IG9yIG1heF9jaHVuayA8IGNodW5rX2tlZXA7IG9yIG9mZnNldCBpcyB0b28KKyAqICAgICBsb25nLgorICovCitpbnQgbmdodHRwMl9idWZzX2luaXQzKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9jaHVuaywgc2l6ZV90IGNodW5rX2tlZXAsIHNpemVfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRnJlZXMgYW55IHJlbGF0ZWQgcmVzb3VyY2VzIHRvIHRoZSB8YnVmc3wuCisgKi8KK3ZvaWQgbmdodHRwMl9idWZzX2ZyZWUobmdodHRwMl9idWZzICpidWZzKTsKKworLyoKKyAqIEluaXRpYWxpemVzIHxidWZzfCB1c2luZyBzdXBwbGllZCBidWZmZXIgfGJlZ2lufCBvZiBsZW5ndGggfGxlbnwuCisgKiBUaGUgZmlyc3QgYnVmZmVyIGJ1ZnMtPmhlYWQgdXNlcyBidWZmZXIgfGJlZ2lufC4gIFRoZSBidWZmZXIgc2l6ZQorICogaXMgZml4ZWQgYW5kIG5vIGV4dHJhIGNodW5rIGJ1ZmZlciBpcyBhbGxvY2F0ZWQuICBJbiBvdGhlcgorICogd29yZHMsIG1heF9jaHVuayA9IGNodW5rX2tlZXAgPSAxLiAgVG8gZnJlZSB0aGUgcmVzb3VyY2UgYWxsb2NhdGVkCisgKiBmb3IgfGJ1ZnN8LCB1c2UgbmdodHRwMl9idWZzX3dyYXBfZnJlZSgpLgorICoKKyAqIERvbid0IHVzZSB0aGUgZnVuY3Rpb24gd2hpY2ggcGVyZm9ybXMgYWxsb2NhdGlvbiwgc3VjaCBhcworICogbmdodHRwMl9idWZzX3JlYWxsb2MoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfYnVmc193cmFwX2luaXQobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90ICpiZWdpbiwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogSW5pdGlhbGl6ZXMgfGJ1ZnN8IHVzaW5nIHN1cHBsaWVkIHx2ZWNsZW58IHNpemUgb2YgYnVmIHZlY3RvcgorICogfHZlY3wuICBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaXMgZml4ZWQgYW5kIG5vIGV4dHJhIGNodW5rIGJ1ZmZlciBpcworICogYWxsb2NhdGVkLiAgSW4gb3RoZXIgd29yZHMsIG1heF9jaHVuayA9IGNodW5rX2tlZXAgPSB8aW5fbGVufC4gIFRvCisgKiBmcmVlIHRoZSByZXNvdXJjZSBhbGxvY2F0ZWQgZm9yIHxidWZzfCwgdXNlCisgKiBuZ2h0dHAyX2J1ZnNfd3JhcF9mcmVlKCkuCisgKgorICogRG9uJ3QgdXNlIHRoZSBmdW5jdGlvbiB3aGljaCBwZXJmb3JtcyBhbGxvY2F0aW9uLCBzdWNoIGFzCisgKiBuZ2h0dHAyX2J1ZnNfcmVhbGxvYygpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9idWZzX3dyYXBfaW5pdDIobmdodHRwMl9idWZzICpidWZzLCBjb25zdCBuZ2h0dHAyX3ZlYyAqdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2ZWNsZW4sIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRnJlZXMgYW55IHJlbGF0ZWQgcmVzb3VyY2UgdG8gdGhlIHxidWZzfC4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QKKyAqIGZyZWUgc3VwcGxpZWQgYnVmZmVyIHByb3ZpZGVkIGluIG5naHR0cDJfYnVmc193cmFwX2luaXQoKS4KKyAqLwordm9pZCBuZ2h0dHAyX2J1ZnNfd3JhcF9mcmVlKG5naHR0cDJfYnVmcyAqYnVmcyk7CisKKy8qCisgKiBSZWFsbG9jYXRlcyBpbnRlcm5hbCBidWZmZXIgdXNpbmcgfGNodW5rX2xlbmd0aHwuICBUaGUgbWF4X2NodW5rLAorICogY2h1bmtfa2VlcCBhbmQgb2Zmc2V0IGRvIG5vdCBjaGFuZ2UuICBBZnRlciBzdWNjZXNzZnVsIGFsbG9jYXRpb24KKyAqIG9mIG5ldyBidWZmZXIsIHByZXZpb3VzIGJ1ZmZlcnMgYXJlIGRlYWxsb2NhdGVkIHdpdGhvdXQgY29weWluZworICogYW55dGhpbmcgaW50byBuZXcgYnVmZmVycy4gIGNodW5rX3VzZWQgaXMgcmVzZXQgdG8gMS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgICBjaHVua19sZW5ndGggPCBvZmZzZXQKKyAqLworaW50IG5naHR0cDJfYnVmc19yZWFsbG9jKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCk7CisKKy8qCisgKiBBcHBlbmRzIHRoZSB8ZGF0YXwgb2YgbGVuZ3RoIHxsZW58IHRvIHRoZSB8YnVmc3wuIFRoZSB3cml0ZSBzdGFydHMKKyAqIGF0IGJ1ZnMtPmN1ci0+YnVmLmxhc3QuIEEgbmV3IGJ1ZmZlcnMgd2lsbCBiZSBhbGxvY2F0ZWQgdG8gc3RvcmUKKyAqIGFsbCBkYXRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SCisgKiAgICAgT3V0IG9mIGJ1ZmZlciBzcGFjZS4KKyAqLworaW50IG5naHR0cDJfYnVmc19hZGQobmdodHRwMl9idWZzICpidWZzLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKworLyoKKyAqIEFwcGVuZHMgYSBzaW5nbGUgYnl0ZSB8YnwgdG8gdGhlIHxidWZzfC4gVGhlIHdyaXRlIHN0YXJ0cyBhdAorICogYnVmcy0+Y3VyLT5idWYubGFzdC4gQSBuZXcgYnVmZmVycyB3aWxsIGJlIGFsbG9jYXRlZCB0byBzdG9yZSBhbGwKKyAqIGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IKKyAqICAgICBPdXQgb2YgYnVmZmVyIHNwYWNlLgorICovCitpbnQgbmdodHRwMl9idWZzX2FkZGIobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90IGIpOworCisvKgorICogQmVoYXZlcyBsaWtlIG5naHR0cDJfYnVmc19hZGRiKCksIGJ1dCB0aGlzIGRvZXMgbm90IHVwZGF0ZQorICogYnVmLT5sYXN0IHBvaW50ZXIuCisgKi8KK2ludCBuZ2h0dHAyX2J1ZnNfYWRkYl9ob2xkKG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCBiKTsKKworI2RlZmluZSBuZ2h0dHAyX2J1ZnNfZmFzdF9hZGRiKEJVRlMsIEIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKihCVUZTKS0+Y3VyLT5idWYubGFzdCsrID0gQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIG5naHR0cDJfYnVmc19mYXN0X2FkZGJfaG9sZChCVUZTLCBCKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqKEJVRlMpLT5jdXItPmJ1Zi5sYXN0ID0gQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBQZXJmb3JtcyBiaXR3aXNlLU9SIG9mIHxifCBhdCBidWZzLT5jdXItPmJ1Zi5sYXN0LiBBIG5ldyBidWZmZXJzCisgKiB3aWxsIGJlIGFsbG9jYXRlZCBpZiBuZWNlc3NhcnkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IKKyAqICAgICBPdXQgb2YgYnVmZmVyIHNwYWNlLgorICovCitpbnQgbmdodHRwMl9idWZzX29yYihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgYik7CisKKy8qCisgKiBCZWhhdmVzIGxpa2UgbmdodHRwMl9idWZzX29yYigpLCBidXQgZG9lcyBub3QgdXBkYXRlIGJ1Zi0+bGFzdAorICogcG9pbnRlci4KKyAqLworaW50IG5naHR0cDJfYnVmc19vcmJfaG9sZChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgYik7CisKKyNkZWZpbmUgbmdodHRwMl9idWZzX2Zhc3Rfb3JiKEJVRlMsIEIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVpbnQ4X3QgKipwID0gJihCVUZTKS0+Y3VyLT5idWYubGFzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqKnAgPSAodWludDhfdCkoKipwIHwgKEIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKysoKnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIG5naHR0cDJfYnVmc19mYXN0X29yYl9ob2xkKEJVRlMsIEIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1aW50OF90ICpwID0gKEJVRlMpLT5jdXItPmJ1Zi5sYXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKnAgPSAodWludDhfdCkoKnAgfCAoQikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisvKgorICogQ29waWVzIGFsbCBkYXRhIHN0b3JlZCBpbiB8YnVmc3wgdG8gdGhlIGNvbnRpZ3VvdXMgYnVmZmVyLiAgVGhpcworICogZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBjb250aWd1b3VzIG1lbW9yeSB0byBzdG9yZSBhbGwgZGF0YSBpbgorICogfGJ1ZnN8IGFuZCBhc3NpZ25zIGl0IHRvIHwqb3V0fC4KKyAqCisgKiBUaGUgY29udGVudHMgb2YgfGJ1ZnN8IGlzIGxlZnQgdW5jaGFuZ2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGNvcGllZCBkYXRhIGFuZCBhc3NpZ25zIHRoZQorICogcG9pbnRlciB0byBjb3BpZWQgZGF0YSB0byB8Km91dHwgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUKKyAqIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworc3NpemVfdCBuZ2h0dHAyX2J1ZnNfcmVtb3ZlKG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCAqKm91dCk7CisKKy8qCisgKiBDb3BpZXMgYWxsIGRhdGEgc3RvcmVkIGluIHxidWZzfCB0byB8b3V0fC4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcworICogdGhhdCB0aGUgYnVmZmVyIHNwYWNlIHBvaW50ZWQgYnkgfG91dHwgaGFzIGF0IGxlYXN0CisgKiBuZ2h0dHAyX2J1ZnMoYnVmcykgYnl0ZXMuCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHxidWZzfCBpcyBsZWZ0IHVuY2hhbmdlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiBjb3BpZWQgZGF0YS4KKyAqLworc2l6ZV90IG5naHR0cDJfYnVmc19yZW1vdmVfY29weShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgKm91dCk7CisKKy8qCisgKiBSZXNldHMgfGJ1ZnN8IGFuZCBtYWtlcyB0aGUgYnVmZmVycyBlbXB0eS4KKyAqLwordm9pZCBuZ2h0dHAyX2J1ZnNfcmVzZXQobmdodHRwMl9idWZzICpidWZzKTsKKworLyoKKyAqIE1vdmVzIGJ1ZnMtPmN1ciB0byBidWZzLT5jdXItPm5leHQuICBJZiByZXN1bHRpbmcgYnVmcy0+Y3VyIGlzCisgKiBOVUxMLCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBuZXcgYnVmZmVycyBhbmQgYnVmcy0+Y3VyIHBvaW50cyB0bworICogaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqIE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUgorICogICAgIE91dCBvZiBidWZmZXIgc3BhY2UuCisgKi8KK2ludCBuZ2h0dHAyX2J1ZnNfYWR2YW5jZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMpOworCisvKiBTZXRzIGJ1ZnMtPmN1ciB0byBidWZzLT5oZWFkICovCisjZGVmaW5lIG5naHR0cDJfYnVmc19yZXdpbmQoQlVGUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoQlVGUyktPmN1ciA9IChCVUZTKS0+aGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBNb3ZlIGJ1ZnMtPmN1ciwgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiwgdXNpbmcgbmV4dCBtZW1iZXIsIHRvCisgKiB0aGUgbGFzdCBidWYgd2hpY2ggaGFzIG5naHR0cDJfYnVmX2xlbihidWYpID4gMCB3aXRob3V0IHNlZWluZyBidWYKKyAqIHdoaWNoIHNhdGlzZmllcyBuZ2h0dHAyX2J1Zl9sZW4oYnVmKSA9PSAwLiAgSWYKKyAqIG5naHR0cDJfYnVmX2xlbigmYnVmcy0+Y3VyLT5idWYpID09IDAgb3IgYnVmcy0+Y3VyLT5uZXh0IGlzIE5VTEwsCisgKiBidWZzLT5jdXIgaXMgdW5jaGFuZ2VkLgorICovCit2b2lkIG5naHR0cDJfYnVmc19zZWVrX2xhc3RfcHJlc2VudChuZ2h0dHAyX2J1ZnMgKmJ1ZnMpOworCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIGJ1ZnMtPmN1ci0+bmV4dCBpcyBub3QgZW1wdHkuCisgKi8KK2ludCBuZ2h0dHAyX2J1ZnNfbmV4dF9wcmVzZW50KG5naHR0cDJfYnVmcyAqYnVmcyk7CisKKyNkZWZpbmUgbmdodHRwMl9idWZzX2N1cl9hdmFpbChCVUZTKSBuZ2h0dHAyX2J1Zl9hdmFpbCgmKEJVRlMpLT5jdXItPmJ1ZikKKworLyoKKyAqIFJldHVybnMgdGhlIHRvdGFsIGJ1ZmZlciBsZW5ndGggb2YgfGJ1ZnN8LgorICovCitzaXplX3QgbmdodHRwMl9idWZzX2xlbihuZ2h0dHAyX2J1ZnMgKmJ1ZnMpOworCisjZW5kaWYgLyogTkdIVFRQMl9CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9jYWxsYmFja3MuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfY2FsbGJhY2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzODIxNAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfY2FsbGJhY2tzLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfY2FsbGJhY2tzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50IG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NfbmV3KG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKipjYWxsYmFja3NfcHRyKSB7CisgICpjYWxsYmFja3NfcHRyID0gY2FsbG9jKDEsIHNpemVvZihuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzKSk7CisKKyAgaWYgKCpjYWxsYmFja3NfcHRyID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX2RlbChuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MpIHsKKyAgZnJlZShjYWxsYmFja3MpOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X3NlbmRfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLCBuZ2h0dHAyX3NlbmRfY2FsbGJhY2sgc2VuZF9jYWxsYmFjaykgeworICBjYnMtPnNlbmRfY2FsbGJhY2sgPSBzZW5kX2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X3JlY3ZfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLCBuZ2h0dHAyX3JlY3ZfY2FsbGJhY2sgcmVjdl9jYWxsYmFjaykgeworICBjYnMtPnJlY3ZfY2FsbGJhY2sgPSByZWN2X2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFjayBvbl9mcmFtZV9yZWN2X2NhbGxiYWNrKSB7CisgIGNicy0+b25fZnJhbWVfcmVjdl9jYWxsYmFjayA9IG9uX2ZyYW1lX3JlY3ZfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjayBvbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2sgPSBvbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjayBvbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2sgPSBvbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2sgYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2spIHsKKyAgY2JzLT5iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjayA9IGJlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ZyYW1lX3NlbmRfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFjayBvbl9mcmFtZV9zZW5kX2NhbGxiYWNrKSB7CisgIGNicy0+b25fZnJhbWVfc2VuZF9jYWxsYmFjayA9IG9uX2ZyYW1lX3NlbmRfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2sgb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjayA9IG9uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX3N0cmVhbV9jbG9zZV9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2sgb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrKSB7CisgIGNicy0+b25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrID0gb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fYmVnaW5faGVhZGVyc19jYWxsYmFjayBvbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrKSB7CisgIGNicy0+b25fYmVnaW5faGVhZGVyc19jYWxsYmFjayA9IG9uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFjayBvbl9oZWFkZXJfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9oZWFkZXJfY2FsbGJhY2sgPSBvbl9oZWFkZXJfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrMigKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2syIG9uX2hlYWRlcl9jYWxsYmFjazIpIHsKKyAgY2JzLT5vbl9oZWFkZXJfY2FsbGJhY2syID0gb25faGVhZGVyX2NhbGxiYWNrMjsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjayBvbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjaykgeworICBjYnMtPm9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrID0gb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMiBvbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIpIHsKKyAgY2JzLT5vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIgPSBvbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazI7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2sgc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2spIHsKKyAgY2JzLT5zZWxlY3RfcGFkZGluZ19jYWxsYmFjayA9IHNlbGVjdF9wYWRkaW5nX2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2RhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrIGRhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrKSB7CisgIGNicy0+cmVhZF9sZW5ndGhfY2FsbGJhY2sgPSBkYXRhX3NvdXJjZV9yZWFkX2xlbmd0aF9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9iZWdpbl9mcmFtZV9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9iZWdpbl9mcmFtZV9jYWxsYmFjayBvbl9iZWdpbl9mcmFtZV9jYWxsYmFjaykgeworICBjYnMtPm9uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrID0gb25fYmVnaW5fZnJhbWVfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfc2VuZF9kYXRhX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX3NlbmRfZGF0YV9jYWxsYmFjayBzZW5kX2RhdGFfY2FsbGJhY2spIHsKKyAgY2JzLT5zZW5kX2RhdGFfY2FsbGJhY2sgPSBzZW5kX2RhdGFfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfcGFja19leHRlbnNpb25fY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfcGFja19leHRlbnNpb25fY2FsbGJhY2sgcGFja19leHRlbnNpb25fY2FsbGJhY2spIHsKKyAgY2JzLT5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayA9IHBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X3VucGFja19leHRlbnNpb25fY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfdW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayB1bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKSB7CisgIGNicy0+dW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayA9IHVucGFja19leHRlbnNpb25fY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2sgb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjayA9IG9uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywgbmdodHRwMl9lcnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjaykgeworICBjYnMtPmVycm9yX2NhbGxiYWNrID0gZXJyb3JfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZXJyb3JfY2FsbGJhY2syKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywgbmdodHRwMl9lcnJvcl9jYWxsYmFjazIgZXJyb3JfY2FsbGJhY2syKSB7CisgIGNicy0+ZXJyb3JfY2FsbGJhY2syID0gZXJyb3JfY2FsbGJhY2syOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9jYWxsYmFja3MuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfY2FsbGJhY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlNTFmYQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfY2FsbGJhY2tzLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0NBTExCQUNLU19ICisjZGVmaW5lIE5HSFRUUDJfQ0FMTEJBQ0tTX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zLgorICovCitzdHJ1Y3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyB7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIHNlc3Npb24gd2FudHMgdG8gc2VuZCBkYXRhIHRvCisgICAqIHRoZSByZW1vdGUgcGVlci4gIFRoaXMgY2FsbGJhY2sgaXMgbm90IG5lY2Vzc2FyeSBpZiB0aGUKKyAgICogYXBwbGljYXRpb24gdXNlcyBzb2xlbHkgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCB0byBzZXJpYWxpemUKKyAgICogZGF0YSB0byB0cmFuc21pdC4KKyAgICovCisgIG5naHR0cDJfc2VuZF9jYWxsYmFjayBzZW5kX2NhbGxiYWNrOworICAvKioKKyAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBzZXNzaW9uIHdhbnRzIHRvIHJlY2VpdmUgZGF0YQorICAgKiBmcm9tIHRoZSByZW1vdGUgcGVlci4gIFRoaXMgY2FsbGJhY2sgaXMgbm90IG5lY2Vzc2FyeSBpZiB0aGUKKyAgICogYXBwbGljYXRpb24gdXNlcyBzb2xlbHkgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCB0byBwcm9jZXNzCisgICAqIHJlY2VpdmVkIGRhdGEuCisgICAqLworICBuZ2h0dHAyX3JlY3ZfY2FsbGJhY2sgcmVjdl9jYWxsYmFjazsKKyAgLyoqCisgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYnkgYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIHdoZW4gYQorICAgKiBmcmFtZSBpcyByZWNlaXZlZC4KKyAgICovCisgIG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFjayBvbl9mcmFtZV9yZWN2X2NhbGxiYWNrOworICAvKioKKyAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBieSBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgd2hlbiBhbgorICAgKiBpbnZhbGlkIG5vbi1EQVRBIGZyYW1lIGlzIHJlY2VpdmVkLgorICAgKi8KKyAgbmdodHRwMl9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2sgb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrOworICAvKioKKyAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgY2h1bmsgb2YgZGF0YSBpbiBEQVRBIGZyYW1lIGlzCisgICAqIHJlY2VpdmVkLgorICAgKi8KKyAgbmdodHRwMl9vbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2sgb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrOworICAvKioKKyAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBiZWZvcmUgYSBub24tREFUQSBmcmFtZSBpcyBzZW50LgorICAgKi8KKyAgbmdodHRwMl9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjayBiZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjazsKKyAgLyoqCisgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgYSBmcmFtZSBpcyBzZW50LgorICAgKi8KKyAgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrIG9uX2ZyYW1lX3NlbmRfY2FsbGJhY2s7CisgIC8qKgorICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgbm9uLURBVEEgZnJhbWUgaXMgbm90IHNlbnQKKyAgICogYmVjYXVzZSBvZiBhbiBlcnJvci4KKyAgICovCisgIG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2sgb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2s7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuCisgICAqLworICBuZ2h0dHAyX29uX3N0cmVhbV9jbG9zZV9jYWxsYmFjayBvbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2s7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIHJlY2VwdGlvbiBvZiBoZWFkZXIgYmxvY2sgaW4KKyAgICogSEVBREVSUyBvciBQVVNIX1BST01JU0UgaXMgc3RhcnRlZC4KKyAgICovCisgIG5naHR0cDJfb25fYmVnaW5faGVhZGVyc19jYWxsYmFjayBvbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrOworICAvKioKKyAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaGVhZGVyIG5hbWUvdmFsdWUgcGFpciBpcworICAgKiByZWNlaXZlZC4KKyAgICovCisgIG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrIG9uX2hlYWRlcl9jYWxsYmFjazsKKyAgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2syIG9uX2hlYWRlcl9jYWxsYmFjazI7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBpbnZhbGlkIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIKKyAgICogaXMgcmVjZWl2ZWQgd2hpY2ggaXMgc2lsZW50bHkgaWdub3JlZCBpZiB0aGVzZSBjYWxsYmFja3MgYXJlIG5vdAorICAgKiBzZXQuCisgICAqLworICBuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrIG9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrOworICBuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMiBvbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazI7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIGxpYnJhcnkgYXNrcyBhcHBsaWNhdGlvbiBob3cKKyAgICogbWFueSBwYWRkaW5nIGJ5dGVzIGFyZSByZXF1aXJlZCBmb3IgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgZ2l2ZW4KKyAgICogZnJhbWUuCisgICAqLworICBuZ2h0dHAyX3NlbGVjdF9wYWRkaW5nX2NhbGxiYWNrIHNlbGVjdF9wYWRkaW5nX2NhbGxiYWNrOworICAvKioKKyAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggYWxsb3dlZCBpbgorICAgKiBgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrKClgCisgICAqLworICBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrIHJlYWRfbGVuZ3RoX2NhbGxiYWNrOworICAvKioKKyAgICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBmcmFtZSBoZWFkZXIgaXMgcmVjZWl2ZWQuCisgICAqLworICBuZ2h0dHAyX29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrIG9uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrOworICBuZ2h0dHAyX3NlbmRfZGF0YV9jYWxsYmFjayBzZW5kX2RhdGFfY2FsbGJhY2s7CisgIG5naHR0cDJfcGFja19leHRlbnNpb25fY2FsbGJhY2sgcGFja19leHRlbnNpb25fY2FsbGJhY2s7CisgIG5naHR0cDJfdW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayB1bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrOworICBuZ2h0dHAyX29uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrIG9uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrOworICBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrOworICBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrMiBlcnJvcl9jYWxsYmFjazI7Cit9OworCisjZW5kaWYgLyogTkdIVFRQMl9DQUxMQkFDS1NfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9kZWJ1Zy5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjc3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2RlYnVnLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9kZWJ1Zy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIERFQlVHQlVJTEQKKworc3RhdGljIHZvaWQgbmdodHRwMl9kZWZhdWx0X2RlYnVnX3ZmcHJpbnRmX2NhbGxiYWNrKGNvbnN0IGNoYXIgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKKyAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3MpOworfQorCitzdGF0aWMgbmdodHRwMl9kZWJ1Z192cHJpbnRmX2NhbGxiYWNrIHN0YXRpY19kZWJ1Z192cHJpbnRmX2NhbGxiYWNrID0KKyAgICBuZ2h0dHAyX2RlZmF1bHRfZGVidWdfdmZwcmludGZfY2FsbGJhY2s7CisKK3ZvaWQgbmdodHRwMl9kZWJ1Z192cHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgIGlmIChzdGF0aWNfZGVidWdfdnByaW50Zl9jYWxsYmFjaykgeworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIHN0YXRpY19kZWJ1Z192cHJpbnRmX2NhbGxiYWNrKGZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICB9Cit9CisKK3ZvaWQgbmdodHRwMl9zZXRfZGVidWdfdnByaW50Zl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX2RlYnVnX3ZwcmludGZfY2FsbGJhY2sgZGVidWdfdnByaW50Zl9jYWxsYmFjaykgeworICBzdGF0aWNfZGVidWdfdnByaW50Zl9jYWxsYmFjayA9IGRlYnVnX3ZwcmludGZfY2FsbGJhY2s7Cit9CisKKyNlbHNlIC8qICFERUJVR0JVSUxEICovCisKK3ZvaWQgbmdodHRwMl9zZXRfZGVidWdfdnByaW50Zl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX2RlYnVnX3ZwcmludGZfY2FsbGJhY2sgZGVidWdfdnByaW50Zl9jYWxsYmFjaykgeworICAodm9pZClkZWJ1Z192cHJpbnRmX2NhbGxiYWNrOworfQorCisjZW5kaWYgLyogIURFQlVHQlVJTEQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZGVidWcuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmI0ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9kZWJ1Zy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0RFQlVHX0gKKyNkZWZpbmUgTkdIVFRQMl9ERUJVR19ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworI2lmZGVmIERFQlVHQlVJTEQKKyMgIGRlZmluZSBERUJVR0YoLi4uKSBuZ2h0dHAyX2RlYnVnX3ZwcmludGYoX19WQV9BUkdTX18pCit2b2lkIG5naHR0cDJfZGVidWdfdnByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisjZWxzZQorIyAgZGVmaW5lIERFQlVHRiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogTkdIVFRQMl9ERUJVR19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2ZyYW1lLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2ZyYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyMWRlNAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZnJhbWUuYwpAQCAtMCwwICsxLDExMzQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfZnJhbWUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaGVscGVyLmgiCisjaW5jbHVkZSAibmdodHRwMl9uZXQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX3ByaW9yaXR5X3NwZWMuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2RlYnVnLmgiCisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKHVpbnQ4X3QgKmJ1ZiwgY29uc3QgbmdodHRwMl9mcmFtZV9oZCAqaGQpIHsKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoJmJ1ZlswXSwgKHVpbnQzMl90KShoZC0+bGVuZ3RoIDw8IDgpKTsKKyAgYnVmWzNdID0gaGQtPnR5cGU7CisgIGJ1Zls0XSA9IGhkLT5mbGFnczsKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoJmJ1Zls1XSwgKHVpbnQzMl90KWhkLT5zdHJlYW1faWQpOworICAvKiBpZ25vcmUgaGQtPnJlc2VydmVkIGZvciBub3cgKi8KK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19mcmFtZV9oZChuZ2h0dHAyX2ZyYW1lX2hkICpoZCwgY29uc3QgdWludDhfdCAqYnVmKSB7CisgIGhkLT5sZW5ndGggPSBuZ2h0dHAyX2dldF91aW50MzIoJmJ1ZlswXSkgPj4gODsKKyAgaGQtPnR5cGUgPSBidWZbM107CisgIGhkLT5mbGFncyA9IGJ1Zls0XTsKKyAgaGQtPnN0cmVhbV9pZCA9IG5naHR0cDJfZ2V0X3VpbnQzMigmYnVmWzVdKSAmIE5HSFRUUDJfU1RSRUFNX0lEX01BU0s7CisgIGhkLT5yZXNlcnZlZCA9IDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9oZF9pbml0KG5naHR0cDJfZnJhbWVfaGQgKmhkLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCkgeworICBoZC0+bGVuZ3RoID0gbGVuZ3RoOworICBoZC0+dHlwZSA9IHR5cGU7CisgIGhkLT5mbGFncyA9IGZsYWdzOworICBoZC0+c3RyZWFtX2lkID0gc3RyZWFtX2lkOworICBoZC0+cmVzZXJ2ZWQgPSAwOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfaGVhZGVyc19pbml0KG5naHR0cDJfaGVhZGVycyAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLCBuZ2h0dHAyX2hlYWRlcnNfY2F0ZWdvcnkgY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbikgeworICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLT5oZCwgMCwgTkdIVFRQMl9IRUFERVJTLCBmbGFncywgc3RyZWFtX2lkKTsKKyAgZnJhbWUtPnBhZGxlbiA9IDA7CisgIGZyYW1lLT5udmEgPSBudmE7CisgIGZyYW1lLT5udmxlbiA9IG52bGVuOworICBmcmFtZS0+Y2F0ID0gY2F0OworCisgIGlmIChwcmlfc3BlYykgeworICAgIGZyYW1lLT5wcmlfc3BlYyA9ICpwcmlfc3BlYzsKKyAgfSBlbHNlIHsKKyAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KCZmcmFtZS0+cHJpX3NwZWMpOworICB9Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9oZWFkZXJzX2ZyZWUobmdodHRwMl9oZWFkZXJzICpmcmFtZSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX252X2FycmF5X2RlbChmcmFtZS0+bnZhLCBtZW0pOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfaW5pdChuZ2h0dHAyX3ByaW9yaXR5ICpmcmFtZSwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCBOR0hUVFAyX1BSSU9SSVRZX1NQRUNMRU4sIE5HSFRUUDJfUFJJT1JJVFksCisgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMQUdfTk9ORSwgc3RyZWFtX2lkKTsKKyAgZnJhbWUtPnByaV9zcGVjID0gKnByaV9zcGVjOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfZnJlZShuZ2h0dHAyX3ByaW9yaXR5ICpmcmFtZSkgeyAodm9pZClmcmFtZTsgfQorCit2b2lkIG5naHR0cDJfZnJhbWVfcnN0X3N0cmVhbV9pbml0KG5naHR0cDJfcnN0X3N0cmVhbSAqZnJhbWUsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlKSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCA0LCBOR0hUVFAyX1JTVF9TVFJFQU0sIE5HSFRUUDJfRkxBR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtX2lkKTsKKyAgZnJhbWUtPmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfcnN0X3N0cmVhbV9mcmVlKG5naHR0cDJfcnN0X3N0cmVhbSAqZnJhbWUpIHsgKHZvaWQpZnJhbWU7IH0KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3NldHRpbmdzX2luaXQobmdodHRwMl9zZXR0aW5ncyAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwgc2l6ZV90IG5pdikgeworICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLT5oZCwgbml2ICogTkdIVFRQMl9GUkFNRV9TRVRUSU5HU19FTlRSWV9MRU5HVEgsCisgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX1NFVFRJTkdTLCBmbGFncywgMCk7CisgIGZyYW1lLT5uaXYgPSBuaXY7CisgIGZyYW1lLT5pdiA9IGl2OworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfc2V0dGluZ3NfZnJlZShuZ2h0dHAyX3NldHRpbmdzICpmcmFtZSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgZnJhbWUtPml2KTsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3B1c2hfcHJvbWlzZV9pbml0KG5naHR0cDJfcHVzaF9wcm9taXNlICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHByb21pc2VkX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbikgeworICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLT5oZCwgMCwgTkdIVFRQMl9QVVNIX1BST01JU0UsIGZsYWdzLCBzdHJlYW1faWQpOworICBmcmFtZS0+cGFkbGVuID0gMDsKKyAgZnJhbWUtPm52YSA9IG52YTsKKyAgZnJhbWUtPm52bGVuID0gbnZsZW47CisgIGZyYW1lLT5wcm9taXNlZF9zdHJlYW1faWQgPSBwcm9taXNlZF9zdHJlYW1faWQ7CisgIGZyYW1lLT5yZXNlcnZlZCA9IDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wdXNoX3Byb21pc2VfZnJlZShuZ2h0dHAyX3B1c2hfcHJvbWlzZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX252X2FycmF5X2RlbChmcmFtZS0+bnZhLCBtZW0pOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfcGluZ19pbml0KG5naHR0cDJfcGluZyAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9wYXF1ZV9kYXRhKSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCA4LCBOR0hUVFAyX1BJTkcsIGZsYWdzLCAwKTsKKyAgaWYgKG9wYXF1ZV9kYXRhKSB7CisgICAgbWVtY3B5KGZyYW1lLT5vcGFxdWVfZGF0YSwgb3BhcXVlX2RhdGEsIHNpemVvZihmcmFtZS0+b3BhcXVlX2RhdGEpKTsKKyAgfSBlbHNlIHsKKyAgICBtZW1zZXQoZnJhbWUtPm9wYXF1ZV9kYXRhLCAwLCBzaXplb2YoZnJhbWUtPm9wYXF1ZV9kYXRhKSk7CisgIH0KK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3BpbmdfZnJlZShuZ2h0dHAyX3BpbmcgKmZyYW1lKSB7ICh2b2lkKWZyYW1lOyB9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9nb2F3YXlfaW5pdChuZ2h0dHAyX2dvYXdheSAqZnJhbWUsIGludDMyX3QgbGFzdF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSwgdWludDhfdCAqb3BhcXVlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9wYXF1ZV9kYXRhX2xlbikgeworICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLT5oZCwgOCArIG9wYXF1ZV9kYXRhX2xlbiwgTkdIVFRQMl9HT0FXQVksCisgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMQUdfTk9ORSwgMCk7CisgIGZyYW1lLT5sYXN0X3N0cmVhbV9pZCA9IGxhc3Rfc3RyZWFtX2lkOworICBmcmFtZS0+ZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisgIGZyYW1lLT5vcGFxdWVfZGF0YSA9IG9wYXF1ZV9kYXRhOworICBmcmFtZS0+b3BhcXVlX2RhdGFfbGVuID0gb3BhcXVlX2RhdGFfbGVuOworICBmcmFtZS0+cmVzZXJ2ZWQgPSAwOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfZ29hd2F5X2ZyZWUobmdodHRwMl9nb2F3YXkgKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBmcmFtZS0+b3BhcXVlX2RhdGEpOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9pbml0KG5naHR0cDJfd2luZG93X3VwZGF0ZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdpbmRvd19zaXplX2luY3JlbWVudCkgeworICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLT5oZCwgNCwgTkdIVFRQMl9XSU5ET1dfVVBEQVRFLCBmbGFncywgc3RyZWFtX2lkKTsKKyAgZnJhbWUtPndpbmRvd19zaXplX2luY3JlbWVudCA9IHdpbmRvd19zaXplX2luY3JlbWVudDsKKyAgZnJhbWUtPnJlc2VydmVkID0gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3dpbmRvd191cGRhdGVfZnJlZShuZ2h0dHAyX3dpbmRvd191cGRhdGUgKmZyYW1lKSB7CisgICh2b2lkKWZyYW1lOworfQorCitzaXplX3QgbmdodHRwMl9mcmFtZV90cmFpbF9wYWRsZW4obmdodHRwMl9mcmFtZSAqZnJhbWUsIHNpemVfdCBwYWRsZW4pIHsKKyAgLyogV2UgaGF2ZSBpZnJhbWUtPnBhZGxlbiA9PSAwLCBidXQgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyBtYXkgaGF2ZQorICAgICBOR0hUVFAyX0ZMQUdfUEFEREVEIHNldC4gIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZworICAgICBDT05USU5VQVRJT04gZnJhbWUsIHNpbmNlIHdlIGRvbid0IHJlc2V0IGZsYWdzIGFmdGVyIEhFQURFUlMgd2FzCisgICAgIHJlY2VpdmVkLiAqLworICBpZiAocGFkbGVuID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gcGFkbGVuIC0gKChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfUEFEREVEKSA+IDApOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfZGF0YV9pbml0KG5naHR0cDJfZGF0YSAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIC8qIEF0IHRoaXMgbW9tZW50LCB0aGUgbGVuZ3RoIG9mIERBVEEgZnJhbWUgaXMgdW5rbm93biAqLworICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLT5oZCwgMCwgTkdIVFRQMl9EQVRBLCBmbGFncywgc3RyZWFtX2lkKTsKKyAgZnJhbWUtPnBhZGxlbiA9IDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9kYXRhX2ZyZWUobmdodHRwMl9kYXRhICpmcmFtZSkgeyAodm9pZClmcmFtZTsgfQorCit2b2lkIG5naHR0cDJfZnJhbWVfZXh0ZW5zaW9uX2luaXQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLCB1aW50OF90IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGF5bG9hZCkgeworICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLT5oZCwgMCwgdHlwZSwgZmxhZ3MsIHN0cmVhbV9pZCk7CisgIGZyYW1lLT5wYXlsb2FkID0gcGF5bG9hZDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2V4dGVuc2lvbl9mcmVlKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSkgeyAodm9pZClmcmFtZTsgfQorCit2b2lkIG5naHR0cDJfZnJhbWVfYWx0c3ZjX2luaXQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvcmlnaW4sIHNpemVfdCBvcmlnaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmZpZWxkX3ZhbHVlLCBzaXplX3QgZmllbGRfdmFsdWVfbGVuKSB7CisgIG5naHR0cDJfZXh0X2FsdHN2YyAqYWx0c3ZjOworCisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCAyICsgb3JpZ2luX2xlbiArIGZpZWxkX3ZhbHVlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfQUxUU1ZDLCBOR0hUVFAyX0ZMQUdfTk9ORSwgc3RyZWFtX2lkKTsKKworICBhbHRzdmMgPSBmcmFtZS0+cGF5bG9hZDsKKyAgYWx0c3ZjLT5vcmlnaW4gPSBvcmlnaW47CisgIGFsdHN2Yy0+b3JpZ2luX2xlbiA9IG9yaWdpbl9sZW47CisgIGFsdHN2Yy0+ZmllbGRfdmFsdWUgPSBmaWVsZF92YWx1ZTsKKyAgYWx0c3ZjLT5maWVsZF92YWx1ZV9sZW4gPSBmaWVsZF92YWx1ZV9sZW47Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9hbHRzdmNfZnJlZShuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgbmdodHRwMl9leHRfYWx0c3ZjICphbHRzdmM7CisKKyAgYWx0c3ZjID0gZnJhbWUtPnBheWxvYWQ7CisgIGlmIChhbHRzdmMgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorICAvKiBXZSB1c2UgdGhlIHNhbWUgYnVmZmVyIGZvciBhbHRzdmMtPm9yaWdpbiBhbmQKKyAgICAgYWx0c3ZjLT5maWVsZF92YWx1ZS4gKi8KKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGFsdHN2Yy0+b3JpZ2luKTsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX29yaWdpbl9pbml0KG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX29yaWdpbl9lbnRyeSAqb3YsIHNpemVfdCBub3YpIHsKKyAgbmdodHRwMl9leHRfb3JpZ2luICpvcmlnaW47CisgIHNpemVfdCBwYXlsb2FkbGVuID0gMDsKKyAgc2l6ZV90IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IG5vdjsgKytpKSB7CisgICAgcGF5bG9hZGxlbiArPSAyICsgb3ZbaV0ub3JpZ2luX2xlbjsKKyAgfQorCisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCBwYXlsb2FkbGVuLCBOR0hUVFAyX09SSUdJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxBR19OT05FLCAwKTsKKworICBvcmlnaW4gPSBmcmFtZS0+cGF5bG9hZDsKKyAgb3JpZ2luLT5vdiA9IG92OworICBvcmlnaW4tPm5vdiA9IG5vdjsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX29yaWdpbl9mcmVlKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX2V4dF9vcmlnaW4gKm9yaWdpbjsKKworICBvcmlnaW4gPSBmcmFtZS0+cGF5bG9hZDsKKyAgaWYgKG9yaWdpbiA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisgIC8qIFdlIHVzZSB0aGUgc2FtZSBidWZmZXIgZm9yIGFsbCByZXNvdXJjZXMgcG9pbnRlZCBieSB0aGUgZmllbGQgb2YKKyAgICAgb3JpZ2luIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuICovCisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBvcmlnaW4tPm92KTsKK30KKworc2l6ZV90IG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfbGVuKHVpbnQ4X3QgZmxhZ3MpIHsKKyAgaWYgKGZsYWdzICYgTkdIVFRQMl9GTEFHX1BSSU9SSVRZKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfUFJJT1JJVFlfU1BFQ0xFTjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzaXplX3QgbmdodHRwMl9mcmFtZV9oZWFkZXJzX3BheWxvYWRfbnZfb2Zmc2V0KG5naHR0cDJfaGVhZGVycyAqZnJhbWUpIHsKKyAgcmV0dXJuIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfbGVuKGZyYW1lLT5oZC5mbGFncyk7Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgcGF5bG9hZCB3YXMgc2VyaWFsaXplZCwgYnV0IG5vdCBiZWZvcmUKKyAqIGNoYW5naW5nIGJ1Zi0+cG9zIGFuZCBzZXJpYWxpemluZyBmcmFtZSBoZWFkZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIGJ1ZnMtPmN1ciBwb2ludHMgdG8gdGhlIGxhc3QgYnVmIGNoYWluIG9mIHRoZQorICogZnJhbWUocykuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXJpYWxpemVzIGZyYW1lIGhlYWRlciBmb3IgSEVBREVSUy9QVVNIX1BST01JU0UgYW5kCisgKiBoYW5kbGVzIHRoZWlyIHN1Y2Nlc3NpdmUgQ09OVElOVUFUSU9OIGZyYW1lcy4KKyAqCisgKiBXZSBkb24ndCBwcm9jZXNzIGFueSBwYWRkaW5nIGhlcmUuCisgKi8KK3N0YXRpYyBpbnQgZnJhbWVfcGFja19oZWFkZXJzX3NoYXJlZChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZV9oZCAqZnJhbWVfaGQpIHsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNpLCAqY2U7CisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBoZCA9ICpmcmFtZV9oZDsKKyAgaGQubGVuZ3RoID0gbmdodHRwMl9idWZfbGVuKGJ1Zik7CisKKyAgREVCVUdGKCJzZW5kOiBIRUFERVJTL1BVU0hfUFJPTUlTRSwgcGF5bG9hZGxlbj0lenVcbiIsIGhkLmxlbmd0aCk7CisKKyAgLyogV2UgaGF2ZSBtdWx0aXBsZSBmcmFtZSBidWZmZXJzLCB3aGljaCBtZWFucyBvbmUgb3IgbW9yZQorICAgICBDT05USU5VQVRJT04gZnJhbWUgaXMgaW52b2x2ZWQuIFJlbW92ZSBFTkRfSEVBREVSUyBmbGFnIGZyb20gdGhlCisgICAgIGZpcnN0IGZyYW1lLiAqLworICBpZiAoYnVmcy0+aGVhZCAhPSBidWZzLT5jdXIpIHsKKyAgICBoZC5mbGFncyA9ICh1aW50OF90KShoZC5mbGFncyAmIH5OR0hUVFAyX0ZMQUdfRU5EX0hFQURFUlMpOworICB9CisKKyAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKyAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmaGQpOworCisgIGlmIChidWZzLT5oZWFkICE9IGJ1ZnMtPmN1cikgeworICAgIC8qIDJuZCBhbmQgbGF0ZXIgZnJhbWVzIGFyZSBDT05USU5VQVRJT04gZnJhbWVzLiAqLworICAgIGhkLnR5cGUgPSBOR0hUVFAyX0NPTlRJTlVBVElPTjsKKyAgICAvKiBXZSBkb24ndCBoYXZlIG5vIGZsYWdzIGV4Y2VwdCBmb3IgbGFzdCBDT05USU5VQVRJT04gKi8KKyAgICBoZC5mbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworCisgICAgY2UgPSBidWZzLT5jdXI7CisKKyAgICBmb3IgKGNpID0gYnVmcy0+aGVhZC0+bmV4dDsgY2kgIT0gY2U7IGNpID0gY2ktPm5leHQpIHsKKyAgICAgIGJ1ZiA9ICZjaS0+YnVmOworCisgICAgICBoZC5sZW5ndGggPSBuZ2h0dHAyX2J1Zl9sZW4oYnVmKTsKKworICAgICAgREVCVUdGKCJzZW5kOiBpbnQgQ09OVElOVUFUSU9OLCBwYXlsb2FkbGVuPSV6dVxuIiwgaGQubGVuZ3RoKTsKKworICAgICAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKyAgICAgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmhkKTsKKyAgICB9CisKKyAgICBidWYgPSAmY2ktPmJ1ZjsKKyAgICBoZC5sZW5ndGggPSBuZ2h0dHAyX2J1Zl9sZW4oYnVmKTsKKyAgICAvKiBTZXQgRU5EX0hFQURFUlMgZmxhZyBmb3IgbGFzdCBDT05USU5VQVRJT04gKi8KKyAgICBoZC5mbGFncyA9IE5HSFRUUDJfRkxBR19FTkRfSEVBREVSUzsKKworICAgIERFQlVHRigic2VuZDogbGFzdCBDT05USU5VQVRJT04sIHBheWxvYWRsZW49JXp1XG4iLCBoZC5sZW5ndGgpOworCisgICAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKyAgICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZoZCk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfZnJhbWVfcGFja19oZWFkZXJzKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9oZWFkZXJzICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcikgeworICBzaXplX3QgbnZfb2Zmc2V0OworICBpbnQgcnY7CisgIG5naHR0cDJfYnVmICpidWY7CisKKyAgYXNzZXJ0KGJ1ZnMtPmhlYWQgPT0gYnVmcy0+Y3VyKTsKKworICBudl9vZmZzZXQgPSBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfcGF5bG9hZF9udl9vZmZzZXQoZnJhbWUpOworCisgIGJ1ZiA9ICZidWZzLT5jdXItPmJ1ZjsKKworICBidWYtPnBvcyArPSBudl9vZmZzZXQ7CisgIGJ1Zi0+bGFzdCA9IGJ1Zi0+cG9zOworCisgIC8qIFRoaXMgY2FsbCB3aWxsIGFkanVzdCBidWYtPmxhc3QgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gKi8KKyAgcnYgPSBuZ2h0dHAyX2hkX2RlZmxhdGVfaGRfYnVmcyhkZWZsYXRlciwgYnVmcywgZnJhbWUtPm52YSwgZnJhbWUtPm52bGVuKTsKKworICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SKSB7CisgICAgcnYgPSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIGJ1Zi0+cG9zIC09IG52X29mZnNldDsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGlmIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfUFJJT1JJVFkpIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHJpb3JpdHlfc3BlYyhidWYtPnBvcywgJmZyYW1lLT5wcmlfc3BlYyk7CisgIH0KKworICBmcmFtZS0+cGFkbGVuID0gMDsKKyAgZnJhbWUtPmhkLmxlbmd0aCA9IG5naHR0cDJfYnVmc19sZW4oYnVmcyk7CisKKyAgcmV0dXJuIGZyYW1lX3BhY2tfaGVhZGVyc19zaGFyZWQoYnVmcywgJmZyYW1lLT5oZCk7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wYWNrX3ByaW9yaXR5X3NwZWModWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKSB7CisgIG5naHR0cDJfcHV0X3VpbnQzMmJlKGJ1ZiwgKHVpbnQzMl90KXByaV9zcGVjLT5zdHJlYW1faWQpOworICBpZiAocHJpX3NwZWMtPmV4Y2x1c2l2ZSkgeworICAgIGJ1ZlswXSB8PSAweDgwOworICB9CisgIGJ1Zls0XSA9ICh1aW50OF90KShwcmlfc3BlYy0+d2VpZ2h0IC0gMSk7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfcHJpb3JpdHlfc3BlYyhuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpIHsKKyAgaW50MzJfdCBkZXBfc3RyZWFtX2lkOworICB1aW50OF90IGV4Y2x1c2l2ZTsKKyAgaW50MzJfdCB3ZWlnaHQ7CisKKyAgZGVwX3N0cmVhbV9pZCA9IG5naHR0cDJfZ2V0X3VpbnQzMihwYXlsb2FkKSAmIE5HSFRUUDJfU1RSRUFNX0lEX01BU0s7CisgIGV4Y2x1c2l2ZSA9IChwYXlsb2FkWzBdICYgMHg4MCkgPiAwOworICB3ZWlnaHQgPSBwYXlsb2FkWzRdICsgMTsKKworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfaW5pdChwcmlfc3BlYywgZGVwX3N0cmVhbV9pZCwgd2VpZ2h0LCBleGNsdXNpdmUpOworfQorCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfaGVhZGVyc19wYXlsb2FkKG5naHR0cDJfaGVhZGVycyAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpIHsKKyAgaWYgKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19QUklPUklUWSkgeworICAgIG5naHR0cDJfZnJhbWVfdW5wYWNrX3ByaW9yaXR5X3NwZWMoJmZyYW1lLT5wcmlfc3BlYywgcGF5bG9hZCk7CisgIH0gZWxzZSB7CisgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjX2RlZmF1bHRfaW5pdCgmZnJhbWUtPnByaV9zcGVjKTsKKyAgfQorCisgIGZyYW1lLT5udmEgPSBOVUxMOworICBmcmFtZS0+bnZsZW4gPSAwOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3ByaW9yaXR5KG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9wcmlvcml0eSAqZnJhbWUpIHsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKworICBhc3NlcnQoYnVmcy0+aGVhZCA9PSBidWZzLT5jdXIpOworCisgIGJ1ZiA9ICZidWZzLT5oZWFkLT5idWY7CisKKyAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikgPj0gTkdIVFRQMl9QUklPUklUWV9TUEVDTEVOKTsKKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgbmdodHRwMl9mcmFtZV9wYWNrX3ByaW9yaXR5X3NwZWMoYnVmLT5sYXN0LCAmZnJhbWUtPnByaV9zcGVjKTsKKworICBidWYtPmxhc3QgKz0gTkdIVFRQMl9QUklPUklUWV9TUEVDTEVOOworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3ByaW9yaXR5X3BheWxvYWQobmdodHRwMl9wcmlvcml0eSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCkgeworICBuZ2h0dHAyX2ZyYW1lX3VucGFja19wcmlvcml0eV9zcGVjKCZmcmFtZS0+cHJpX3NwZWMsIHBheWxvYWQpOworfQorCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3JzdF9zdHJlYW0obmdodHRwMl9idWZzICpidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfcnN0X3N0cmVhbSAqZnJhbWUpIHsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKworICBhc3NlcnQoYnVmcy0+aGVhZCA9PSBidWZzLT5jdXIpOworCisgIGJ1ZiA9ICZidWZzLT5oZWFkLT5idWY7CisKKyAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikgPj0gNCk7CisKKyAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZmcmFtZS0+aGQpOworCisgIG5naHR0cDJfcHV0X3VpbnQzMmJlKGJ1Zi0+bGFzdCwgZnJhbWUtPmVycm9yX2NvZGUpOworICBidWYtPmxhc3QgKz0gNDsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19yc3Rfc3RyZWFtX3BheWxvYWQobmdodHRwMl9yc3Rfc3RyZWFtICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpIHsKKyAgZnJhbWUtPmVycm9yX2NvZGUgPSBuZ2h0dHAyX2dldF91aW50MzIocGF5bG9hZCk7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfc2V0dGluZ3MobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX3NldHRpbmdzICpmcmFtZSkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGFzc2VydChidWZzLT5oZWFkID09IGJ1ZnMtPmN1cik7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBpZiAobmdodHRwMl9idWZfYXZhaWwoYnVmKSA8IGZyYW1lLT5oZC5sZW5ndGgpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUjsKKyAgfQorCisgIGJ1Zi0+cG9zIC09IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmZnJhbWUtPmhkKTsKKworICBidWYtPmxhc3QgKz0KKyAgICAgIG5naHR0cDJfZnJhbWVfcGFja19zZXR0aW5nc19wYXlsb2FkKGJ1Zi0+bGFzdCwgZnJhbWUtPml2LCBmcmFtZS0+bml2KTsKKworICByZXR1cm4gMDsKK30KKworc2l6ZV90IG5naHR0cDJfZnJhbWVfcGFja19zZXR0aW5nc19wYXlsb2FkKHVpbnQ4X3QgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml2KSB7CisgIHNpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgbml2OyArK2ksIGJ1ZiArPSBOR0hUVFAyX0ZSQU1FX1NFVFRJTkdTX0VOVFJZX0xFTkdUSCkgeworICAgIG5naHR0cDJfcHV0X3VpbnQxNmJlKGJ1ZiwgKHVpbnQxNl90KWl2W2ldLnNldHRpbmdzX2lkKTsKKyAgICBuZ2h0dHAyX3B1dF91aW50MzJiZShidWYgKyAyLCBpdltpXS52YWx1ZSk7CisgIH0KKyAgcmV0dXJuIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIICogbml2OworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX3BheWxvYWQobmdodHRwMl9zZXR0aW5ncyAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdikgeworICBmcmFtZS0+aXYgPSBpdjsKKyAgZnJhbWUtPm5pdiA9IG5pdjsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19zZXR0aW5nc19lbnRyeShuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCkgeworICBpdi0+c2V0dGluZ3NfaWQgPSBuZ2h0dHAyX2dldF91aW50MTYoJnBheWxvYWRbMF0pOworICBpdi0+dmFsdWUgPSBuZ2h0dHAyX2dldF91aW50MzIoJnBheWxvYWRbMl0pOworfQorCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfc2V0dGluZ3NfcGF5bG9hZDIobmdodHRwMl9zZXR0aW5nc19lbnRyeSAqKml2X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5pdl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHNpemVfdCBpOworCisgICpuaXZfcHRyID0gcGF5bG9hZGxlbiAvIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIOworCisgIGlmICgqbml2X3B0ciA9PSAwKSB7CisgICAgKml2X3B0ciA9IE5VTEw7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgICppdl9wdHIgPQorICAgICAgbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgKCpuaXZfcHRyKSAqIHNpemVvZihuZ2h0dHAyX3NldHRpbmdzX2VudHJ5KSk7CisKKyAgaWYgKCppdl9wdHIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCAqbml2X3B0cjsgKytpKSB7CisgICAgc2l6ZV90IG9mZiA9IGkgKiBOR0hUVFAyX0ZSQU1FX1NFVFRJTkdTX0VOVFJZX0xFTkdUSDsKKyAgICBuZ2h0dHAyX2ZyYW1lX3VucGFja19zZXR0aW5nc19lbnRyeSgmKCppdl9wdHIpW2ldLCAmcGF5bG9hZFtvZmZdKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3B1c2hfcHJvbWlzZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3B1c2hfcHJvbWlzZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcikgeworICBzaXplX3QgbnZfb2Zmc2V0ID0gNDsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGFzc2VydChidWZzLT5oZWFkID09IGJ1ZnMtPmN1cik7CisKKyAgYnVmID0gJmJ1ZnMtPmN1ci0+YnVmOworCisgIGJ1Zi0+cG9zICs9IG52X29mZnNldDsKKyAgYnVmLT5sYXN0ID0gYnVmLT5wb3M7CisKKyAgLyogVGhpcyBjYWxsIHdpbGwgYWRqdXN0IGJ1Zi0+bGFzdCB0byB0aGUgY29ycmVjdCBwb3NpdGlvbiAqLworICBydiA9IG5naHR0cDJfaGRfZGVmbGF0ZV9oZF9idWZzKGRlZmxhdGVyLCBidWZzLCBmcmFtZS0+bnZhLCBmcmFtZS0+bnZsZW4pOworCisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IpIHsKKyAgICBydiA9IE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgYnVmLT5wb3MgLT0gbnZfb2Zmc2V0OworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoYnVmLT5wb3MsICh1aW50MzJfdClmcmFtZS0+cHJvbWlzZWRfc3RyZWFtX2lkKTsKKworICBmcmFtZS0+cGFkbGVuID0gMDsKKyAgZnJhbWUtPmhkLmxlbmd0aCA9IG5naHR0cDJfYnVmc19sZW4oYnVmcyk7CisKKyAgcmV0dXJuIGZyYW1lX3BhY2tfaGVhZGVyc19zaGFyZWQoYnVmcywgJmZyYW1lLT5oZCk7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19wdXNoX3Byb21pc2VfcGF5bG9hZChuZ2h0dHAyX3B1c2hfcHJvbWlzZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCkgeworICBmcmFtZS0+cHJvbWlzZWRfc3RyZWFtX2lkID0KKyAgICAgIG5naHR0cDJfZ2V0X3VpbnQzMihwYXlsb2FkKSAmIE5HSFRUUDJfU1RSRUFNX0lEX01BU0s7CisgIGZyYW1lLT5udmEgPSBOVUxMOworICBmcmFtZS0+bnZsZW4gPSAwOworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfZnJhbWVfcGFja19waW5nKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9waW5nICpmcmFtZSkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGFzc2VydChidWZzLT5oZWFkID09IGJ1ZnMtPmN1cik7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBhc3NlcnQobmdodHRwMl9idWZfYXZhaWwoYnVmKSA+PSA4KTsKKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgYnVmLT5sYXN0ID0KKyAgICAgIG5naHR0cDJfY3B5bWVtKGJ1Zi0+bGFzdCwgZnJhbWUtPm9wYXF1ZV9kYXRhLCBzaXplb2YoZnJhbWUtPm9wYXF1ZV9kYXRhKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfcGluZ19wYXlsb2FkKG5naHR0cDJfcGluZyAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKSB7CisgIG1lbWNweShmcmFtZS0+b3BhcXVlX2RhdGEsIHBheWxvYWQsIHNpemVvZihmcmFtZS0+b3BhcXVlX2RhdGEpKTsKK30KKworaW50IG5naHR0cDJfZnJhbWVfcGFja19nb2F3YXkobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2dvYXdheSAqZnJhbWUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGFzc2VydChidWZzLT5oZWFkID09IGJ1ZnMtPmN1cik7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoYnVmLT5sYXN0LCAodWludDMyX3QpZnJhbWUtPmxhc3Rfc3RyZWFtX2lkKTsKKyAgYnVmLT5sYXN0ICs9IDQ7CisKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoYnVmLT5sYXN0LCBmcmFtZS0+ZXJyb3JfY29kZSk7CisgIGJ1Zi0+bGFzdCArPSA0OworCisgIHJ2ID0gbmdodHRwMl9idWZzX2FkZChidWZzLCBmcmFtZS0+b3BhcXVlX2RhdGEsIGZyYW1lLT5vcGFxdWVfZGF0YV9sZW4pOworCisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUjsKKyAgfQorCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfZ29hd2F5X3BheWxvYWQobmdodHRwMl9nb2F3YXkgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp2YXJfZ2lmdF9wYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyX2dpZnRfcGF5bG9hZGxlbikgeworICBmcmFtZS0+bGFzdF9zdHJlYW1faWQgPSBuZ2h0dHAyX2dldF91aW50MzIocGF5bG9hZCkgJiBOR0hUVFAyX1NUUkVBTV9JRF9NQVNLOworICBmcmFtZS0+ZXJyb3JfY29kZSA9IG5naHR0cDJfZ2V0X3VpbnQzMihwYXlsb2FkICsgNCk7CisKKyAgZnJhbWUtPm9wYXF1ZV9kYXRhID0gdmFyX2dpZnRfcGF5bG9hZDsKKyAgZnJhbWUtPm9wYXF1ZV9kYXRhX2xlbiA9IHZhcl9naWZ0X3BheWxvYWRsZW47Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19nb2F3YXlfcGF5bG9hZDIobmdodHRwMl9nb2F3YXkgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbiwgbmdodHRwMl9tZW0gKm1lbSkgeworICB1aW50OF90ICp2YXJfZ2lmdF9wYXlsb2FkOworICBzaXplX3QgdmFyX2dpZnRfcGF5bG9hZGxlbjsKKworICBpZiAocGF5bG9hZGxlbiA+IDgpIHsKKyAgICB2YXJfZ2lmdF9wYXlsb2FkbGVuID0gcGF5bG9hZGxlbiAtIDg7CisgIH0gZWxzZSB7CisgICAgdmFyX2dpZnRfcGF5bG9hZGxlbiA9IDA7CisgIH0KKworICBwYXlsb2FkbGVuIC09IHZhcl9naWZ0X3BheWxvYWRsZW47CisKKyAgaWYgKCF2YXJfZ2lmdF9wYXlsb2FkbGVuKSB7CisgICAgdmFyX2dpZnRfcGF5bG9hZCA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgdmFyX2dpZnRfcGF5bG9hZCA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHZhcl9naWZ0X3BheWxvYWRsZW4pOworCisgICAgaWYgKHZhcl9naWZ0X3BheWxvYWQgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgIH0KKworICAgIG1lbWNweSh2YXJfZ2lmdF9wYXlsb2FkLCBwYXlsb2FkICsgOCwgdmFyX2dpZnRfcGF5bG9hZGxlbik7CisgIH0KKworICBuZ2h0dHAyX2ZyYW1lX3VucGFja19nb2F3YXlfcGF5bG9hZChmcmFtZSwgcGF5bG9hZCwgdmFyX2dpZnRfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2dpZnRfcGF5bG9hZGxlbik7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfd2luZG93X3VwZGF0ZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl93aW5kb3dfdXBkYXRlICpmcmFtZSkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGFzc2VydChidWZzLT5oZWFkID09IGJ1ZnMtPmN1cik7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBhc3NlcnQobmdodHRwMl9idWZfYXZhaWwoYnVmKSA+PSA0KTsKKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoYnVmLT5sYXN0LCAodWludDMyX3QpZnJhbWUtPndpbmRvd19zaXplX2luY3JlbWVudCk7CisgIGJ1Zi0+bGFzdCArPSA0OworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3dpbmRvd191cGRhdGVfcGF5bG9hZChuZ2h0dHAyX3dpbmRvd191cGRhdGUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCkgeworICBmcmFtZS0+d2luZG93X3NpemVfaW5jcmVtZW50ID0KKyAgICAgIG5naHR0cDJfZ2V0X3VpbnQzMihwYXlsb2FkKSAmIE5HSFRUUDJfV0lORE9XX1NJWkVfSU5DUkVNRU5UX01BU0s7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfYWx0c3ZjKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9leHRlbnNpb24gKmZyYW1lKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKyAgbmdodHRwMl9leHRfYWx0c3ZjICphbHRzdmM7CisKKyAgLyogVGhpcyBpcyByZXF1aXJlZCB3aXRoIC0tZGlzYWJsZS1hc3NlcnQuICovCisgICh2b2lkKXJ2OworCisgIGFsdHN2YyA9IGZyYW1lLT5wYXlsb2FkOworCisgIGJ1ZiA9ICZidWZzLT5oZWFkLT5idWY7CisKKyAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikgPj0KKyAgICAgICAgIDIgKyBhbHRzdmMtPm9yaWdpbl9sZW4gKyBhbHRzdmMtPmZpZWxkX3ZhbHVlX2xlbik7CisKKyAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZmcmFtZS0+aGQpOworCisgIG5naHR0cDJfcHV0X3VpbnQxNmJlKGJ1Zi0+bGFzdCwgKHVpbnQxNl90KWFsdHN2Yy0+b3JpZ2luX2xlbik7CisgIGJ1Zi0+bGFzdCArPSAyOworCisgIHJ2ID0gbmdodHRwMl9idWZzX2FkZChidWZzLCBhbHRzdmMtPm9yaWdpbiwgYWx0c3ZjLT5vcmlnaW5fbGVuKTsKKworICBhc3NlcnQocnYgPT0gMCk7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIGFsdHN2Yy0+ZmllbGRfdmFsdWUsIGFsdHN2Yy0+ZmllbGRfdmFsdWVfbGVuKTsKKworICBhc3NlcnQocnYgPT0gMCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfYWx0c3ZjX3BheWxvYWQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3JpZ2luX2xlbiwgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRsZW4pIHsKKyAgbmdodHRwMl9leHRfYWx0c3ZjICphbHRzdmM7CisgIHVpbnQ4X3QgKnA7CisKKyAgYWx0c3ZjID0gZnJhbWUtPnBheWxvYWQ7CisgIHAgPSBwYXlsb2FkOworCisgIGFsdHN2Yy0+b3JpZ2luID0gcDsKKworICBwICs9IG9yaWdpbl9sZW47CisKKyAgYWx0c3ZjLT5vcmlnaW5fbGVuID0gb3JpZ2luX2xlbjsKKworICBhbHRzdmMtPmZpZWxkX3ZhbHVlID0gcDsKKyAgYWx0c3ZjLT5maWVsZF92YWx1ZV9sZW4gPSAoc2l6ZV90KShwYXlsb2FkICsgcGF5bG9hZGxlbiAtIHApOworfQorCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfYWx0c3ZjX3BheWxvYWQyKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRsZW4sIG5naHR0cDJfbWVtICptZW0pIHsKKyAgdWludDhfdCAqYnVmOworICBzaXplX3Qgb3JpZ2luX2xlbjsKKworICBpZiAocGF5bG9hZGxlbiA8IDIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9GUkFNRV9TSVpFX0VSUk9SOworICB9CisKKyAgb3JpZ2luX2xlbiA9IG5naHR0cDJfZ2V0X3VpbnQxNihwYXlsb2FkKTsKKworICBidWYgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBwYXlsb2FkbGVuIC0gMik7CisgIGlmICghYnVmKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9jcHltZW0oYnVmLCBwYXlsb2FkICsgMiwgcGF5bG9hZGxlbiAtIDIpOworCisgIG5naHR0cDJfZnJhbWVfdW5wYWNrX2FsdHN2Y19wYXlsb2FkKGZyYW1lLCBvcmlnaW5fbGVuLCBidWYsIHBheWxvYWRsZW4gLSAyKTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfZnJhbWVfcGFja19vcmlnaW4obmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUpIHsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKyAgbmdodHRwMl9leHRfb3JpZ2luICpvcmlnaW47CisgIG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvcmlnOworICBzaXplX3QgaTsKKworICBvcmlnaW4gPSBmcmFtZS0+cGF5bG9hZDsKKworICBidWYgPSAmYnVmcy0+aGVhZC0+YnVmOworCisgIGlmIChuZ2h0dHAyX2J1Zl9hdmFpbChidWYpIDwgZnJhbWUtPmhkLmxlbmd0aCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOworICB9CisKKyAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZmcmFtZS0+aGQpOworCisgIGZvciAoaSA9IDA7IGkgPCBvcmlnaW4tPm5vdjsgKytpKSB7CisgICAgb3JpZyA9ICZvcmlnaW4tPm92W2ldOworICAgIG5naHR0cDJfcHV0X3VpbnQxNmJlKGJ1Zi0+bGFzdCwgKHVpbnQxNl90KW9yaWctPm9yaWdpbl9sZW4pOworICAgIGJ1Zi0+bGFzdCArPSAyOworICAgIGJ1Zi0+bGFzdCA9IG5naHR0cDJfY3B5bWVtKGJ1Zi0+bGFzdCwgb3JpZy0+b3JpZ2luLCBvcmlnLT5vcmlnaW5fbGVuKTsKKyAgfQorCisgIGFzc2VydChuZ2h0dHAyX2J1Zl9sZW4oYnVmKSA9PSBOR0hUVFAyX0ZSQU1FX0hETEVOICsgZnJhbWUtPmhkLmxlbmd0aCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19vcmlnaW5fcGF5bG9hZChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbiwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX2V4dF9vcmlnaW4gKm9yaWdpbjsKKyAgY29uc3QgdWludDhfdCAqcCwgKmVuZDsKKyAgdWludDhfdCAqZHN0OworICBzaXplX3Qgb3JpZ2lubGVuOworICBuZ2h0dHAyX29yaWdpbl9lbnRyeSAqb3Y7CisgIHNpemVfdCBub3YgPSAwOworICBzaXplX3QgbGVuID0gMDsKKworICBvcmlnaW4gPSBmcmFtZS0+cGF5bG9hZDsKKyAgcCA9IHBheWxvYWQ7CisgIGVuZCA9IHAgKyBwYXlsb2FkbGVuOworCisgIGZvciAoOyBwICE9IGVuZDspIHsKKyAgICBpZiAoZW5kIC0gcCA8IDIpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOworICAgIH0KKyAgICBvcmlnaW5sZW4gPSBuZ2h0dHAyX2dldF91aW50MTYocCk7CisgICAgcCArPSAyOworICAgIGlmIChvcmlnaW5sZW4gPT0gMCkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChvcmlnaW5sZW4gPiAoc2l6ZV90KShlbmQgLSBwKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgfQorICAgIHAgKz0gb3JpZ2lubGVuOworICAgIC8qIDEgZm9yIHRlcm1pbmFsIE5VTEwgKi8KKyAgICBsZW4gKz0gb3JpZ2lubGVuICsgMTsKKyAgICArK25vdjsKKyAgfQorCisgIGlmIChub3YgPT0gMCkgeworICAgIG9yaWdpbi0+b3YgPSBOVUxMOworICAgIG9yaWdpbi0+bm92ID0gMDsKKworICAgIHJldHVybiAwOworICB9CisKKyAgbGVuICs9IG5vdiAqIHNpemVvZihuZ2h0dHAyX29yaWdpbl9lbnRyeSk7CisKKyAgb3YgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBsZW4pOworICBpZiAob3YgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG9yaWdpbi0+b3YgPSBvdjsKKyAgb3JpZ2luLT5ub3YgPSBub3Y7CisKKyAgZHN0ID0gKHVpbnQ4X3QgKilvdiArIG5vdiAqIHNpemVvZihuZ2h0dHAyX29yaWdpbl9lbnRyeSk7CisgIHAgPSBwYXlsb2FkOworCisgIGZvciAoOyBwICE9IGVuZDspIHsKKyAgICBvcmlnaW5sZW4gPSBuZ2h0dHAyX2dldF91aW50MTYocCk7CisgICAgcCArPSAyOworICAgIGlmIChvcmlnaW5sZW4gPT0gMCkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIG92LT5vcmlnaW4gPSBkc3Q7CisgICAgb3YtPm9yaWdpbl9sZW4gPSBvcmlnaW5sZW47CisgICAgZHN0ID0gbmdodHRwMl9jcHltZW0oZHN0LCBwLCBvcmlnaW5sZW4pOworICAgICpkc3QrKyA9ICdcMCc7CisgICAgcCArPSBvcmlnaW5sZW47CisgICAgKytvdjsKKyAgfQorCisgIHJldHVybiAwOworfQorCituZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICpuZ2h0dHAyX2ZyYW1lX2l2X2NvcHkoY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdiwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdl9jb3B5OworICBzaXplX3QgbGVuID0gbml2ICogc2l6ZW9mKG5naHR0cDJfc2V0dGluZ3NfZW50cnkpOworCisgIGlmIChsZW4gPT0gMCkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaXZfY29weSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIGxlbik7CisKKyAgaWYgKGl2X2NvcHkgPT0gTlVMTCkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgbWVtY3B5KGl2X2NvcHksIGl2LCBsZW4pOworCisgIHJldHVybiBpdl9jb3B5OworfQorCitpbnQgbmdodHRwMl9udl9lcXVhbChjb25zdCBuZ2h0dHAyX252ICphLCBjb25zdCBuZ2h0dHAyX252ICpiKSB7CisgIHJldHVybiBhLT5uYW1lbGVuID09IGItPm5hbWVsZW4gJiYgYS0+dmFsdWVsZW4gPT0gYi0+dmFsdWVsZW4gJiYKKyAgICAgICAgIG1lbWNtcChhLT5uYW1lLCBiLT5uYW1lLCBhLT5uYW1lbGVuKSA9PSAwICYmCisgICAgICAgICBtZW1jbXAoYS0+dmFsdWUsIGItPnZhbHVlLCBhLT52YWx1ZWxlbikgPT0gMDsKK30KKwordm9pZCBuZ2h0dHAyX252X2FycmF5X2RlbChuZ2h0dHAyX252ICpudmEsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIG52YSk7Cit9CisKK3N0YXRpYyBpbnQgYnl0ZXNfY29tcGFyKGNvbnN0IHVpbnQ4X3QgKmEsIHNpemVfdCBhbGVuLCBjb25zdCB1aW50OF90ICpiLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJsZW4pIHsKKyAgaW50IHJ2OworCisgIGlmIChhbGVuID09IGJsZW4pIHsKKyAgICByZXR1cm4gbWVtY21wKGEsIGIsIGFsZW4pOworICB9CisKKyAgaWYgKGFsZW4gPCBibGVuKSB7CisgICAgcnYgPSBtZW1jbXAoYSwgYiwgYWxlbik7CisKKyAgICBpZiAocnYgPT0gMCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJ2ID0gbWVtY21wKGEsIGIsIGJsZW4pOworCisgIGlmIChydiA9PSAwKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gcnY7Cit9CisKK2ludCBuZ2h0dHAyX252X2NvbXBhcmVfbmFtZShjb25zdCBuZ2h0dHAyX252ICpsaHMsIGNvbnN0IG5naHR0cDJfbnYgKnJocykgeworICByZXR1cm4gYnl0ZXNfY29tcGFyKGxocy0+bmFtZSwgbGhzLT5uYW1lbGVuLCByaHMtPm5hbWUsIHJocy0+bmFtZWxlbik7Cit9CisKK3N0YXRpYyBpbnQgbnZfY29tcGFyKGNvbnN0IHZvaWQgKmxocywgY29uc3Qgdm9pZCAqcmhzKSB7CisgIGNvbnN0IG5naHR0cDJfbnYgKmEgPSAoY29uc3QgbmdodHRwMl9udiAqKWxoczsKKyAgY29uc3QgbmdodHRwMl9udiAqYiA9IChjb25zdCBuZ2h0dHAyX252ICopcmhzOworICBpbnQgcnY7CisKKyAgcnYgPSBieXRlc19jb21wYXIoYS0+bmFtZSwgYS0+bmFtZWxlbiwgYi0+bmFtZSwgYi0+bmFtZWxlbik7CisKKyAgaWYgKHJ2ID09IDApIHsKKyAgICByZXR1cm4gYnl0ZXNfY29tcGFyKGEtPnZhbHVlLCBhLT52YWx1ZWxlbiwgYi0+dmFsdWUsIGItPnZhbHVlbGVuKTsKKyAgfQorCisgIHJldHVybiBydjsKK30KKwordm9pZCBuZ2h0dHAyX252X2FycmF5X3NvcnQobmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4pIHsKKyAgcXNvcnQobnZhLCBudmxlbiwgc2l6ZW9mKG5naHR0cDJfbnYpLCBudl9jb21wYXIpOworfQorCitpbnQgbmdodHRwMl9udl9hcnJheV9jb3B5KG5naHR0cDJfbnYgKipudmFfcHRyLCBjb25zdCBuZ2h0dHAyX252ICpudmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudmxlbiwgbmdodHRwMl9tZW0gKm1lbSkgeworICBzaXplX3QgaTsKKyAgdWludDhfdCAqZGF0YSA9IE5VTEw7CisgIHNpemVfdCBidWZsZW4gPSAwOworICBuZ2h0dHAyX252ICpwOworCisgIGlmIChudmxlbiA9PSAwKSB7CisgICAgKm52YV9wdHIgPSBOVUxMOworCisgICAgcmV0dXJuIDA7CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbnZsZW47ICsraSkgeworICAgIC8qICsgMSBmb3IgbnVsbC10ZXJtaW5hdGlvbiAqLworICAgIGlmICgobnZhW2ldLmZsYWdzICYgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRSkgPT0gMCkgeworICAgICAgYnVmbGVuICs9IG52YVtpXS5uYW1lbGVuICsgMTsKKyAgICB9CisgICAgaWYgKChudmFbaV0uZmxhZ3MgJiBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRSkgPT0gMCkgeworICAgICAgYnVmbGVuICs9IG52YVtpXS52YWx1ZWxlbiArIDE7CisgICAgfQorICB9CisKKyAgYnVmbGVuICs9IHNpemVvZihuZ2h0dHAyX252KSAqIG52bGVuOworCisgICpudmFfcHRyID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgYnVmbGVuKTsKKworICBpZiAoKm52YV9wdHIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIHAgPSAqbnZhX3B0cjsKKyAgZGF0YSA9ICh1aW50OF90ICopKCpudmFfcHRyKSArIHNpemVvZihuZ2h0dHAyX252KSAqIG52bGVuOworCisgIGZvciAoaSA9IDA7IGkgPCBudmxlbjsgKytpKSB7CisgICAgcC0+ZmxhZ3MgPSBudmFbaV0uZmxhZ3M7CisKKyAgICBpZiAobnZhW2ldLmZsYWdzICYgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRSkgeworICAgICAgcC0+bmFtZSA9IG52YVtpXS5uYW1lOworICAgICAgcC0+bmFtZWxlbiA9IG52YVtpXS5uYW1lbGVuOworICAgIH0gZWxzZSB7CisgICAgICBpZiAobnZhW2ldLm5hbWVsZW4pIHsKKyAgICAgICAgbWVtY3B5KGRhdGEsIG52YVtpXS5uYW1lLCBudmFbaV0ubmFtZWxlbik7CisgICAgICB9CisgICAgICBwLT5uYW1lID0gZGF0YTsKKyAgICAgIHAtPm5hbWVsZW4gPSBudmFbaV0ubmFtZWxlbjsKKyAgICAgIGRhdGFbcC0+bmFtZWxlbl0gPSAnXDAnOworICAgICAgbmdodHRwMl9kb3duY2FzZShwLT5uYW1lLCBwLT5uYW1lbGVuKTsKKyAgICAgIGRhdGEgKz0gbnZhW2ldLm5hbWVsZW4gKyAxOworICAgIH0KKworICAgIGlmIChudmFbaV0uZmxhZ3MgJiBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRSkgeworICAgICAgcC0+dmFsdWUgPSBudmFbaV0udmFsdWU7CisgICAgICBwLT52YWx1ZWxlbiA9IG52YVtpXS52YWx1ZWxlbjsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKG52YVtpXS52YWx1ZWxlbikgeworICAgICAgICBtZW1jcHkoZGF0YSwgbnZhW2ldLnZhbHVlLCBudmFbaV0udmFsdWVsZW4pOworICAgICAgfQorICAgICAgcC0+dmFsdWUgPSBkYXRhOworICAgICAgcC0+dmFsdWVsZW4gPSBudmFbaV0udmFsdWVsZW47CisgICAgICBkYXRhW3AtPnZhbHVlbGVuXSA9ICdcMCc7CisgICAgICBkYXRhICs9IG52YVtpXS52YWx1ZWxlbiArIDE7CisgICAgfQorCisgICAgKytwOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9pdl9jaGVjayhjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwgc2l6ZV90IG5pdikgeworICBzaXplX3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IG5pdjsgKytpKSB7CisgICAgc3dpdGNoIChpdltpXS5zZXR0aW5nc19pZCkgeworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRToKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9QVVNIOgorICAgICAgaWYgKGl2W2ldLnZhbHVlICE9IDAgJiYgaXZbaV0udmFsdWUgIT0gMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOgorICAgICAgaWYgKGl2W2ldLnZhbHVlID4gKHVpbnQzMl90KU5HSFRUUDJfTUFYX1dJTkRPV19TSVpFKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9GUkFNRV9TSVpFOgorICAgICAgaWYgKGl2W2ldLnZhbHVlIDwgTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NSU4gfHwKKyAgICAgICAgICBpdltpXS52YWx1ZSA+IE5HSFRUUDJfTUFYX0ZSQU1FX1NJWkVfTUFYKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9IRUFERVJfTElTVF9TSVpFOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MOgorICAgICAgaWYgKGl2W2ldLnZhbHVlICE9IDAgJiYgaXZbaV0udmFsdWUgIT0gMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZnJhbWVfc2V0X3BhZChuZ2h0dHAyX2J1ZiAqYnVmLCBzaXplX3QgcGFkbGVuLCBpbnQgZnJhbWVoZF9vbmx5KSB7CisgIHNpemVfdCB0cmFpbF9wYWRsZW47CisgIHNpemVfdCBuZXdsZW47CisKKyAgREVCVUdGKCJzZW5kOiBwYWRsZW49JXp1LCBzaGlmdCBsZWZ0IDEgYnl0ZXNcbiIsIHBhZGxlbik7CisKKyAgbWVtbW92ZShidWYtPnBvcyAtIDEsIGJ1Zi0+cG9zLCBOR0hUVFAyX0ZSQU1FX0hETEVOKTsKKworICAtLWJ1Zi0+cG9zOworCisgIGJ1Zi0+cG9zWzRdIHw9IE5HSFRUUDJfRkxBR19QQURERUQ7CisKKyAgbmV3bGVuID0gKG5naHR0cDJfZ2V0X3VpbnQzMihidWYtPnBvcykgPj4gOCkgKyBwYWRsZW47CisgIG5naHR0cDJfcHV0X3VpbnQzMmJlKGJ1Zi0+cG9zLCAodWludDMyX3QpKChuZXdsZW4gPDwgOCkgKyBidWYtPnBvc1szXSkpOworCisgIGlmIChmcmFtZWhkX29ubHkpIHsKKyAgICByZXR1cm47CisgIH0KKworICB0cmFpbF9wYWRsZW4gPSBwYWRsZW4gLSAxOworICBidWYtPnBvc1tOR0hUVFAyX0ZSQU1FX0hETEVOXSA9ICh1aW50OF90KXRyYWlsX3BhZGxlbjsKKworICAvKiB6ZXJvIG91dCBwYWRkaW5nICovCisgIG1lbXNldChidWYtPmxhc3QsIDAsIHRyYWlsX3BhZGxlbik7CisgIC8qIGV4dGVuZCBidWZmZXJzIHRyYWlsX3BhZGxlbiBieXRlcywgc2luY2Ugd2UgYXRlIHByZXZpb3VzIHBhZGxlbiAtCisgICAgIHRyYWlsX3BhZGxlbiBieXRlKHMpICovCisgIGJ1Zi0+bGFzdCArPSB0cmFpbF9wYWRsZW47Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX2FkZF9wYWQobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2ZyYW1lX2hkICpoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhZGxlbiwgaW50IGZyYW1laGRfb25seSkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGlmIChwYWRsZW4gPT0gMCkgeworICAgIERFQlVHRigic2VuZDogcGFkbGVuID0gMCwgbm90aGluZyB0byBkb1xuIik7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qCisgICAqIFdlIGhhdmUgYXJyYW5nZWQgYnVmcyBsaWtlIHRoaXM6CisgICAqCisgICAqICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICogfCB8RnJhbWUgaGVhZGVyICAgICB8IEZyYW1lIHBheWxvYWQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICogKy0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICogfCB8RnJhbWUgaGVhZGVyICAgICB8IEZyYW1lIHBheWxvYWQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICogKy0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICogfCB8RnJhbWUgaGVhZGVyICAgICB8IEZyYW1lIHBheWxvYWQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICogKy0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICoKKyAgICogV2UgYXJyYW5nZWQgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGluY2x1ZGVkIGluIHRoZSBmaXJzdCBmcmFtZQorICAgKiBjb21wbGV0ZWx5LiAgRm9yIHBhZGRlZCBmcmFtZSwgd2UgYXJlIGdvaW5nIHRvIGFkanVzdCBidWYtPnBvcyBvZgorICAgKiBmcmFtZSB3aGljaCBpbmNsdWRlcyBwYWRkaW5nIGFuZCBzZXJpYWxpemUgKG1lbW1vdmUpIGZyYW1lIGhlYWRlcgorICAgKiBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbi4gIEFsc28gZXh0ZW5kcyBidWYtPmxhc3QgdG8gaW5jbHVkZQorICAgKiBwYWRkaW5nLgorICAgKi8KKworICBidWYgPSAmYnVmcy0+aGVhZC0+YnVmOworCisgIGFzc2VydChuZ2h0dHAyX2J1Zl9hdmFpbChidWYpID49IHBhZGxlbiAtIDEpOworCisgIGZyYW1lX3NldF9wYWQoYnVmLCBwYWRsZW4sIGZyYW1laGRfb25seSk7CisKKyAgaGQtPmxlbmd0aCArPSBwYWRsZW47CisgIGhkLT5mbGFncyB8PSBOR0hUVFAyX0ZMQUdfUEFEREVEOworCisgIERFQlVHRigic2VuZDogZmluYWwgcGF5bG9hZGxlbj0lenUsIHBhZGxlbj0lenVcbiIsIGhkLT5sZW5ndGgsIHBhZGxlbik7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2ZyYW1lLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2ZyYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1YmJmMwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZnJhbWUuaApAQCAtMCwwICsxLDYyNCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfRlJBTUVfSAorI2RlZmluZSBOR0hUVFAyX0ZSQU1FX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorI2luY2x1ZGUgIm5naHR0cDJfaGQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2J1Zi5oIgorCisjZGVmaW5lIE5HSFRUUDJfU1RSRUFNX0lEX01BU0sgKCgxdSA8PCAzMSkgLSAxKQorI2RlZmluZSBOR0hUVFAyX1BSSV9HUk9VUF9JRF9NQVNLICgoMXUgPDwgMzEpIC0gMSkKKyNkZWZpbmUgTkdIVFRQMl9QUklPUklUWV9NQVNLICgoMXUgPDwgMzEpIC0gMSkKKyNkZWZpbmUgTkdIVFRQMl9XSU5ET1dfU0laRV9JTkNSRU1FTlRfTUFTSyAoKDF1IDw8IDMxKSAtIDEpCisjZGVmaW5lIE5HSFRUUDJfU0VUVElOR1NfSURfTUFTSyAoKDEgPDwgMjQpIC0gMSkKKworLyogVGhlIG51bWJlciBvZiBieXRlcyBvZiBmcmFtZSBoZWFkZXIuICovCisjZGVmaW5lIE5HSFRUUDJfRlJBTUVfSERMRU4gOQorCisjZGVmaW5lIE5HSFRUUDJfTUFYX0ZSQU1FX1NJWkVfTUFYICgoMSA8PCAyNCkgLSAxKQorI2RlZmluZSBOR0hUVFAyX01BWF9GUkFNRV9TSVpFX01JTiAoMSA8PCAxNCkKKworI2RlZmluZSBOR0hUVFAyX01BWF9QQVlMT0FETEVOIDE2Mzg0CisvKiBUaGUgb25lIGZyYW1lIGJ1ZmZlciBsZW5ndGggZm9yIHRyYW5taXNzaW9uLiAgV2UgbWF5IHVzZSBzZXZlcmFsIG9mCisgICB0aGVtIHRvIHN1cHBvcnQgQ09OVElOVUFUSU9OLiAgVG8gYWNjb3VudCBmb3IgUGFkIExlbmd0aCBmaWVsZCwgd2UKKyAgIGFsbG9jYXRlIGV4dHJhIDEgYnl0ZSwgd2hpY2ggc2F2ZXMgZXh0cmEgbGFyZ2UgbWVtY29weWluZy4gKi8KKyNkZWZpbmUgTkdIVFRQMl9GUkFNRUJVRl9DSFVOS0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChOR0hUVFAyX0ZSQU1FX0hETEVOICsgMSArIE5HSFRUUDJfTUFYX1BBWUxPQURMRU4pCisKKy8qIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBEQVRBIGZyYW1lIHBheWxvYWQuICovCisjZGVmaW5lIE5HSFRUUDJfREFUQV9QQVlMT0FETEVOIE5HSFRUUDJfTUFYX0ZSQU1FX1NJWkVfTUlOCisKKy8qIE1heGltdW0gaGVhZGVycyBibG9jayBzaXplIHRvIHNlbmQsIGNhbGN1bGF0ZWQgdXNpbmcKKyAgIG5naHR0cDJfaGRfZGVmbGF0ZV9ib3VuZCgpLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIGNhbiBiZQorICAgb3ZlcnJpZGRlbiBieSBuZ2h0dHAyX29wdGlvbl9zZXRfbWF4X3NlbmRfaGVhZGVyX2Jsb2NrX3NpemUoKS4gKi8KKyNkZWZpbmUgTkdIVFRQMl9NQVhfSEVBREVSU0xFTiA2NTUzNgorCisvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGZvciBlYWNoIFNFVFRJTkdTIGVudHJ5ICovCisjZGVmaW5lIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIIDYKKworLyogTGVuZ3RoIG9mIHByaW9yaXR5IHJlbGF0ZWQgZmllbGRzIGluIEhFQURFUlMvUFJJT1JJVFkgZnJhbWVzICovCisjZGVmaW5lIE5HSFRUUDJfUFJJT1JJVFlfU1BFQ0xFTiA1CisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIHBhZGRpbmcgaW4gYnl0ZXMuICovCisjZGVmaW5lIE5HSFRUUDJfTUFYX1BBRExFTiAyNTYKKworLyogVW5pb24gb2YgZXh0ZW5zaW9uIGZyYW1lIHBheWxvYWQgKi8KK3R5cGVkZWYgdW5pb24geworICBuZ2h0dHAyX2V4dF9hbHRzdmMgYWx0c3ZjOworICBuZ2h0dHAyX2V4dF9vcmlnaW4gb3JpZ2luOworfSBuZ2h0dHAyX2V4dF9mcmFtZV9wYXlsb2FkOworCit2b2lkIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZCh1aW50OF90ICpidWYsIGNvbnN0IG5naHR0cDJfZnJhbWVfaGQgKmhkKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19mcmFtZV9oZChuZ2h0dHAyX2ZyYW1lX2hkICpoZCwgY29uc3QgdWludDhfdCAqYnVmKTsKKworLyoqCisgKiBJbml0aWFsaXplcyBmcmFtZSBoZWFkZXIgfGhkfCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuICBSZXNlcnZlZCBiaXQKKyAqIGlzIHNldCB0byAwLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfaGRfaW5pdChuZ2h0dHAyX2ZyYW1lX2hkICpoZCwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQpOworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwcmlvcml0eSBmaWVsZCBkZXBlbmRpbmcgb24gdGhlIHxmbGFnc3wuICBJZgorICogfGZsYWdzfCBoYXMgbmVpdGhlciBOR0hUVFAyX0ZMQUdfUFJJT1JJVFlfR1JPVVAgbm9yCisgKiBOR0hUVFAyX0ZMQUdfUFJJT1JJVFlfREVQRU5ERU5DWSBzZXQsIHJldHVybiAwLgorICovCitzaXplX3QgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9sZW4odWludDhfdCBmbGFncyk7CisKKy8qKgorICogUGFja3MgdGhlIHxwcmlfc3BlY3wgaW4gfGJ1ZnwuICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgfGJ1ZnwgaGFzCisgKiBlbm91Z2ggc3BhY2UgZm9yIHNlcmlhbGl6YXRpb24uCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9wYWNrX3ByaW9yaXR5X3NwZWModWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKTsKKworLyoqCisgKiBVbnBhY2tzIHRoZSBwcmlvcml0eSBzcGVjaWZpY2F0aW9uIGZyb20gcGF5bG9hZCB8cGF5bG9hZHwgb2YgbGVuZ3RoCisgKiB8cGF5bG9hZGxlbnwgdG8gfHByaV9zcGVjfC4gIFRoZSB8ZmxhZ3N8IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQKKyAqIGtpbmQgb2YgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbiBpcyBpbiB8cGF5bG9hZHwuICBUaGlzIGZ1bmN0aW9uCisgKiBhc3N1bWVzIHRoZSB8cGF5bG9hZHwgY29udGFpbnMgd2hvbGUgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbi4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19wcmlvcml0eV9zcGVjKG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBvZmZzZXQgZnJvbSB0aGUgSEVBREVSUyBmcmFtZSBwYXlsb2FkIHdoZXJlIHRoZQorICogY29tcHJlc3NlZCBoZWFkZXIgYmxvY2sgc3RhcnRzLiBUaGUgZnJhbWUgcGF5bG9hZCBkb2VzIG5vdCBpbmNsdWRlCisgKiBmcmFtZSBoZWFkZXIuCisgKi8KK3NpemVfdCBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfcGF5bG9hZF9udl9vZmZzZXQobmdodHRwMl9oZWFkZXJzICpmcmFtZSk7CisKKy8qCisgKiBQYWNrcyBIRUFERVJTIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluIHxidWZzfC4KKyAqIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyB8YnVmc3wgYXMgbmVjZXNzYXJ5IHRvIHN0b3JlIGZyYW1lLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBuZ2h0dHAyX2J1ZnNfcmVzZXQoYnVmcykgaXMgY2FsbGVkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIGZyYW1lLT5oZC5sZW5ndGggaXMgYXNzaWduZWQgYWZ0ZXIgbGVuZ3RoIGlzIGRldGVybWluZWQgZHVyaW5nCisgKiBwYWNraW5nIHByb2Nlc3MuICBDT05USU5VQVRJT04gZnJhbWVzIGFyZSBhbHNvIHNlcmlhbGl6ZWQgaW4gdGhpcworICogZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHBhZGRpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIHJldHVybnMgb25lIG9mIHRoZQorICogZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QCisgKiAgICAgVGhlIGRlZmxhdGUgb3BlcmF0aW9uIGZhaWxlZC4KKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja19oZWFkZXJzKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9oZWFkZXJzICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcik7CisKKy8qCisgKiBVbnBhY2tzIEhFQURFUlMgZnJhbWUgYnl0ZSBzZXF1ZW5jZSBpbnRvIHxmcmFtZXwuICBUaGlzIGZ1bmN0aW9uCisgKiBvbmx5IHVuYXBja3MgYnl0ZXMgdGhhdCBjb21lIGJlZm9yZSBuYW1lL3ZhbHVlIGhlYWRlciBibG9jayBhbmQKKyAqIGFmdGVyIHBvc3NpYmxlIFBhZCBMZW5ndGggZmllbGQuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMgYW5kIHJldHVybnMgMC4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfdW5wYWNrX2hlYWRlcnNfcGF5bG9hZChuZ2h0dHAyX2hlYWRlcnMgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKTsKKworLyoKKyAqIFBhY2tzIFBSSU9SSVRZIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluCisgKiB8YnVmc3wuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMgYW5kIHJldHVybnMgMC4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja19wcmlvcml0eShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfcHJpb3JpdHkgKmZyYW1lKTsKKworLyoKKyAqIFVucGFja3MgUFJJT1JJVFkgd2lyZSBmb3JtYXQgaW50byB8ZnJhbWV8LgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3ByaW9yaXR5X3BheWxvYWQobmdodHRwMl9wcmlvcml0eSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCk7CisKKy8qCisgKiBQYWNrcyBSU1RfU1RSRUFNIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmcmFtZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluCisgKiB8YnVmc3wuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMgYW5kIHJldHVybnMgMC4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja19yc3Rfc3RyZWFtKG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3JzdF9zdHJlYW0gKmZyYW1lKTsKKworLyoKKyAqIFVucGFja3MgUlNUX1NUUkVBTSBmcmFtZSBieXRlIHNlcXVlbmNlIGludG8gfGZyYW1lfC4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19yc3Rfc3RyZWFtX3BheWxvYWQobmdodHRwMl9yc3Rfc3RyZWFtICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpOworCisvKgorICogUGFja3MgU0VUVElOR1MgZnJhbWUgfGZyYW1lfCBpbiB3aXJlIGZvcm1hdCBhbmQgc3RvcmUgaXQgaW4KKyAqIHxidWZzfC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgbmdodHRwMl9idWZzX3Jlc2V0KGJ1ZnMpIGlzIGNhbGxlZAorICogYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3IgcmV0dXJucyBvbmUgb2YgdGhlCisgKiBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUgorICogICAgIFRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGlzIHRvbyBsYXJnZS4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja19zZXR0aW5ncyhuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfc2V0dGluZ3MgKmZyYW1lKTsKKworLyoKKyAqIFBhY2tzIHRoZSB8aXZ8LCB3aGljaCBpbmNsdWRlcyB8bml2fCBlbnRyaWVzLCBpbiB0aGUgfGJ1ZnwsCisgKiBhc3N1bWluZyB0aGUgfGJ1ZnwgaGFzIGF0IGxlYXN0IDggKiB8bml2fCBieXRlcy4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIHRoZSB8YnVmfC4KKyAqLworc2l6ZV90IG5naHR0cDJfZnJhbWVfcGFja19zZXR0aW5nc19wYXlsb2FkKHVpbnQ4X3QgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml2KTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19zZXR0aW5nc19lbnRyeShuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCk7CisKKy8qCisgKiBJbml0aWFsaXplcyBwYXlsb2FkIG9mIGZyYW1lLT5zZXR0aW5ncy4gIFRoZSB8ZnJhbWV8IHRha2VzCisgKiBvd25lcnNoaXAgb2YgfGl2fC4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19zZXR0aW5nc19wYXlsb2FkKG5naHR0cDJfc2V0dGluZ3MgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXYpOworCisvKgorICogVW5wYWNrcyBTRVRUSU5HUyBwYXlsb2FkIGludG8gfCppdl9wdHJ8LiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgYXJlCisgKiBhc3NpZ25lZCB0byB0aGUgfCpuaXZfcHRyfC4gVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgZW5vdWdoIG1lbW9yeQorICogdG8gc3RvcmUgdGhlIHJlc3VsdCBpbiB8Kml2X3B0cnwuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZnJlZQorICogfCppdl9wdHJ8IGFmdGVyIGl0cyB1c2UuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX3BheWxvYWQyKG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKippdl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuaXZfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRsZW4sIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogUGFja3MgUFVTSF9QUk9NSVNFIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluCisgKiB8YnVmc3wuICBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgfGJ1ZnN8IGFzIG5lY2Vzc2FyeSB0byBzdG9yZQorICogZnJhbWUuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogZnJhbWUtPmhkLmxlbmd0aCBpcyBhc3NpZ25lZCBhZnRlciBsZW5ndGggaXMgZGV0ZXJtaW5lZCBkdXJpbmcKKyAqIHBhY2tpbmcgcHJvY2Vzcy4gIENPTlRJTlVBVElPTiBmcmFtZXMgYXJlIGFsc28gc2VyaWFsaXplZCBpbiB0aGlzCisgKiBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGFkZGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3IgcmV0dXJucyBvbmUgb2YgdGhlCisgKiBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAKKyAqICAgICBUaGUgZGVmbGF0ZSBvcGVyYXRpb24gZmFpbGVkLgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3B1c2hfcHJvbWlzZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3B1c2hfcHJvbWlzZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcik7CisKKy8qCisgKiBVbnBhY2tzIFBVU0hfUFJPTUlTRSBmcmFtZSBieXRlIHNlcXVlbmNlIGludG8gfGZyYW1lfC4gIFRoaXMKKyAqIGZ1bmN0aW9uIG9ubHkgdW5hcGNrcyBieXRlcyB0aGF0IGNvbWUgYmVmb3JlIG5hbWUvdmFsdWUgaGVhZGVyCisgKiBibG9jayBhbmQgYWZ0ZXIgcG9zc2libGUgUGFkIExlbmd0aCBmaWVsZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfUFJPVE8KKyAqICAgICBUT0RPIEVORF9IRUFERVJTIGZsYWcgaXMgbm90IHNldAorICovCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfcHVzaF9wcm9taXNlX3BheWxvYWQobmdodHRwMl9wdXNoX3Byb21pc2UgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpOworCisvKgorICogUGFja3MgUElORyBmcmFtZSB8ZnJhbWV8IGluIHdpcmUgZm9ybWF0IGFuZCBzdG9yZSBpdCBpbgorICogfGJ1ZnN8LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBuZ2h0dHAyX2J1ZnNfcmVzZXQoYnVmcykgaXMgY2FsbGVkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzIGFuZCByZXR1cm5zIDAuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfcGluZyhuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfcGluZyAqZnJhbWUpOworCisvKgorICogVW5wYWNrcyBQSU5HIHdpcmUgZm9ybWF0IGludG8gfGZyYW1lfC4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19waW5nX3BheWxvYWQobmdodHRwMl9waW5nICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpOworCisvKgorICogUGFja3MgR09BV0FZIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluIHxidWZzfC4KKyAqIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyB8YnVmc3wgYXMgbmVjZXNzYXJ5IHRvIHN0b3JlIGZyYW1lLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBuZ2h0dHAyX2J1ZnNfcmVzZXQoYnVmcykgaXMgY2FsbGVkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SCisgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgaXMgdG9vIGxhcmdlLgorICovCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX2dvYXdheShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfZ29hd2F5ICpmcmFtZSk7CisKKy8qCisgKiBVbnBhY2tzIEdPQVdBWSB3aXJlIGZvcm1hdCBpbnRvIHxmcmFtZXwuICBUaGUgfHBheWxvYWR8IG9mIGxlbmd0aAorICogfHBheWxvYWRsZW58IGNvbnRhaW5zIGZpcnN0IDggYnl0ZXMgb2YgcGF5bG9hZC4gIFRoZQorICogfHZhcl9naWZ0X3BheWxvYWR8IG9mIGxlbmd0aCB8dmFyX2dpZnRfcGF5bG9hZGxlbnwgY29udGFpbnMKKyAqIHJlbWFpbmluZyBwYXlsb2FkIGFuZCBpdHMgYnVmZmVyIGlzIGdpZnRlZCB0byB0aGUgZnVuY3Rpb24gYW5kIHRoZW4KKyAqIHxmcmFtZXwuICBUaGUgfHZhcl9naWZ0X3BheWxvYWRsZW58IG11c3QgYmUgZnJlZWQgYnkKKyAqIG5naHR0cDJfZnJhbWVfZ29hd2F5X2ZyZWUoKS4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19nb2F3YXlfcGF5bG9hZChuZ2h0dHAyX2dvYXdheSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnZhcl9naWZ0X3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJfZ2lmdF9wYXlsb2FkbGVuKTsKKworLyoKKyAqIFVucGFja3MgR09BV0FZIHdpcmUgZm9ybWF0IGludG8gfGZyYW1lfC4gIFRoaXMgZnVuY3Rpb24gb25seSBleGlzdHMKKyAqIGZvciB1bml0IHRlc3QuICBBZnRlciBhbGxvY2F0aW5nIGJ1ZmZlciBmb3IgZGVidWcgZGF0YSwgdGhpcworICogZnVuY3Rpb24gaW50ZXJuYWxseSBjYWxscyBuZ2h0dHAyX2ZyYW1lX3VucGFja19nb2F3YXlfcGF5bG9hZCgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfZ29hd2F5X3BheWxvYWQyKG5naHR0cDJfZ29hd2F5ICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRsZW4sIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogUGFja3MgV0lORE9XX1VQREFURSBmcmFtZSB8ZnJhbWV8IGluIHdpcmUgZnJhbWUgZm9ybWF0IGFuZCBzdG9yZSBpdAorICogaW4gfGJ1ZnN8LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBuZ2h0dHAyX2J1ZnNfcmVzZXQoYnVmcykgaXMgY2FsbGVkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzIGFuZCByZXR1cm5zIDAuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfd2luZG93X3VwZGF0ZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl93aW5kb3dfdXBkYXRlICpmcmFtZSk7CisKKy8qCisgKiBVbnBhY2tzIFdJTkRPV19VUERBVEUgZnJhbWUgYnl0ZSBzZXF1ZW5jZSBpbnRvIHxmcmFtZXwuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfd2luZG93X3VwZGF0ZV9wYXlsb2FkKG5naHR0cDJfd2luZG93X3VwZGF0ZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKTsKKworLyoKKyAqIFBhY2tzIEFMVFNWQyBmcmFtZSB8ZnJhbWV8IGluIHdpcmUgZnJhbWUgZm9ybWF0IGFuZCBzdG9yZSBpdCBpbgorICogfGJ1ZnN8LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBuZ2h0dHAyX2J1ZnNfcmVzZXQoYnVmcykgaXMgY2FsbGVkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzIGFuZCByZXR1cm5zIDAuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfYWx0c3ZjKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9leHRlbnNpb24gKmV4dCk7CisKKy8qCisgKiBVbnBhY2tzIEFMVFNWQyB3aXJlIGZvcm1hdCBpbnRvIHxmcmFtZXwuICBUaGUgfHBheWxvYWR8IG9mCisgKiB8cGF5bG9hZGxlbnwgYnl0ZXMgY29udGFpbnMgZnJhbWUgcGF5bG9hZC4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcworICogdGhhdCBmcmFtZS0+cGF5bG9hZCBwb2ludHMgdG8gdGhlIG5naHR0cDJfZXh0X2FsdHN2YyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMgYW5kIHJldHVybnMgMC4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19hbHRzdmNfcGF5bG9hZChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvcmlnaW5fbGVuLCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbik7CisKKy8qCisgKiBVbnBhY2tzIEFMVFNWQyB3aXJlIGZvcm1hdCBpbnRvIHxmcmFtZXwuICBUaGlzIGZ1bmN0aW9uIG9ubHkgZXhpc3RzCisgKiBmb3IgdW5pdCB0ZXN0LiAgQWZ0ZXIgYWxsb2NhdGluZyBidWZmZXIgZm9yIGZpZWxkcywgdGhpcyBmdW5jdGlvbgorICogaW50ZXJuYWxseSBjYWxscyBuZ2h0dHAyX2ZyYW1lX3VucGFja19hbHRzdmNfcGF5bG9hZCgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUgorICogICAgIFRoZSBwYXlsb2FkIGlzIHRvbyBzbWFsbC4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfdW5wYWNrX2FsdHN2Y19wYXlsb2FkMihuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXlsb2FkbGVuLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIFBhY2tzIE9SSUdJTiBmcmFtZSB8ZnJhbWV8IGluIHdpcmUgZnJhbWUgZm9ybWF0IGFuZCBzdG9yZSBpdCBpbgorICogfGJ1ZnN8LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBuZ2h0dHAyX2J1ZnNfcmVzZXQoYnVmcykgaXMgY2FsbGVkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUgorICogICAgIFRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGlzIHRvbyBsYXJnZS4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja19vcmlnaW4obmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2V4dGVuc2lvbiAqZXh0KTsKKworLyoKKyAqIFVucGFja3MgT1JJR0lOIHdpcmUgZm9ybWF0IGludG8gfGZyYW1lfC4gIFRoZSB8cGF5bG9hZHwgb2YgbGVuZ3RoCisgKiB8cGF5bG9hZGxlbnwgY29udGFpbnMgdGhlIGZyYW1lIHBheWxvYWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SCisgKiAgICAgVGhlIHBheWxvYWQgaXMgdG9vIHNtYWxsLgorICovCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfb3JpZ2luX3BheWxvYWQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRsZW4sIG5naHR0cDJfbWVtICptZW0pOworLyoKKyAqIEluaXRpYWxpemVzIEhFQURFUlMgZnJhbWUgfGZyYW1lfCB3aXRoIGdpdmVuIHZhbHVlcy4gIHxmcmFtZXwgdGFrZXMKKyAqIG93bmVyc2hpcCBvZiB8bnZhfCwgc28gY2FsbGVyIG11c3Qgbm90IGZyZWUgaXQuIElmIHxzdHJlYW1faWR8IGlzCisgKiBub3QgYXNzaWduZWQgeWV0LCBpdCBtdXN0IGJlIC0xLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfaGVhZGVyc19pbml0KG5naHR0cDJfaGVhZGVycyAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLCBuZ2h0dHAyX2hlYWRlcnNfY2F0ZWdvcnkgY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbik7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9oZWFkZXJzX2ZyZWUobmdodHRwMl9oZWFkZXJzICpmcmFtZSwgbmdodHRwMl9tZW0gKm1lbSk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9pbml0KG5naHR0cDJfcHJpb3JpdHkgKmZyYW1lLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpOworCit2b2lkIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfZnJlZShuZ2h0dHAyX3ByaW9yaXR5ICpmcmFtZSk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9yc3Rfc3RyZWFtX2luaXQobmdodHRwMl9yc3Rfc3RyZWFtICpmcmFtZSwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpOworCit2b2lkIG5naHR0cDJfZnJhbWVfcnN0X3N0cmVhbV9mcmVlKG5naHR0cDJfcnN0X3N0cmVhbSAqZnJhbWUpOworCisvKgorICogSW5pdGlhbGl6ZXMgUFVTSF9QUk9NSVNFIGZyYW1lIHxmcmFtZXwgd2l0aCBnaXZlbiB2YWx1ZXMuICB8ZnJhbWV8CisgKiB0YWtlcyBvd25lcnNoaXAgb2YgfG52YXwsIHNvIGNhbGxlciBtdXN0IG5vdCBmcmVlIGl0LgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfcHVzaF9wcm9taXNlX2luaXQobmdodHRwMl9wdXNoX3Byb21pc2UgKmZyYW1lLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJvbWlzZWRfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3B1c2hfcHJvbWlzZV9mcmVlKG5naHR0cDJfcHVzaF9wcm9taXNlICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIEluaXRpYWxpemVzIFNFVFRJTkdTIGZyYW1lIHxmcmFtZXwgd2l0aCBnaXZlbiB2YWx1ZXMuIHxmcmFtZXwgdGFrZXMKKyAqIG93bmVyc2hpcCBvZiB8aXZ8LCBzbyBjYWxsZXIgbXVzdCBub3QgZnJlZSBpdC4gVGhlIHxmbGFnc3wgYXJlCisgKiBiaXR3aXNlLU9SIG9mIG9uZSBvciBtb3JlIG9mIG5naHR0cDJfc2V0dGluZ3NfZmxhZy4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3NldHRpbmdzX2luaXQobmdodHRwMl9zZXR0aW5ncyAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwgc2l6ZV90IG5pdik7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9zZXR0aW5nc19mcmVlKG5naHR0cDJfc2V0dGluZ3MgKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIEluaXRpYWxpemVzIFBJTkcgZnJhbWUgfGZyYW1lfCB3aXRoIGdpdmVuIHZhbHVlcy4gSWYgdGhlCisgKiB8b3BxZXVlX2RhdGF8IGlzIG5vdCBOVUxMLCBpdCBtdXN0IHBvaW50IHRvIDggYnl0ZXMgbWVtb3J5IHJlZ2lvbgorICogb2YgZGF0YS4gVGhlIGRhdGEgcG9pbnRlZCBieSB8b3BhcXVlX2RhdGF8IGlzIGNvcGllZC4gSXQgY2FuIGJlCisgKiBOVUxMLiBJbiB0aGlzIGNhc2UsIDggYnl0ZXMgTlVMTCBpcyB1c2VkLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfcGluZ19pbml0KG5naHR0cDJfcGluZyAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9wcXVlX2RhdGEpOworCit2b2lkIG5naHR0cDJfZnJhbWVfcGluZ19mcmVlKG5naHR0cDJfcGluZyAqZnJhbWUpOworCisvKgorICogSW5pdGlhbGl6ZXMgR09BV0FZIGZyYW1lIHxmcmFtZXwgd2l0aCBnaXZlbiB2YWx1ZXMuIE9uIHN1Y2Nlc3MsCisgKiB0aGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB8b3BhcXVlX2RhdGF8LCBzbyBjYWxsZXIgbXVzdCBub3QKKyAqIGZyZWUgaXQuIElmIHRoZSB8b3BhcXVlX2RhdGFfbGVufCBpcyAwLCBvcGFxdWVfZGF0YSBjb3VsZCBiZSBOVUxMLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfZ29hd2F5X2luaXQobmdodHRwMl9nb2F3YXkgKmZyYW1lLCBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUsIHVpbnQ4X3QgKm9wYXF1ZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvcGFxdWVfZGF0YV9sZW4pOworCit2b2lkIG5naHR0cDJfZnJhbWVfZ29hd2F5X2ZyZWUobmdodHRwMl9nb2F3YXkgKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3dpbmRvd191cGRhdGVfaW5pdChuZ2h0dHAyX3dpbmRvd191cGRhdGUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworCit2b2lkIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9mcmVlKG5naHR0cDJfd2luZG93X3VwZGF0ZSAqZnJhbWUpOworCit2b2lkIG5naHR0cDJfZnJhbWVfZXh0ZW5zaW9uX2luaXQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLCB1aW50OF90IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGF5bG9hZCk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9leHRlbnNpb25fZnJlZShuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUpOworCisvKgorICogSW5pdGlhbGl6ZXMgQUxUU1ZDIGZyYW1lIHxmcmFtZXwgd2l0aCBnaXZlbiB2YWx1ZXMuICBUaGlzIGZ1bmN0aW9uCisgKiBhc3N1bWVzIHRoYXQgZnJhbWUtPnBheWxvYWQgcG9pbnRzIHRvIG5naHR0cDJfZXh0X2FsdHN2YyBvYmplY3QuCisgKiBBbHNvIHxvcmlnaW58IGFuZCB8ZmllbGRfdmFsdWV8IGFyZSBhbGxvY2F0ZWQgaW4gc2luZ2xlIGJ1ZmZlciwKKyAqIHN0YXJ0aW5nIHxvcmlnaW58LiAgT24gc3VjY2VzcywgdGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YKKyAqIHxvcmlnaW58LCBzbyBjYWxsZXIgbXVzdCBub3QgZnJlZSBpdC4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX2FsdHN2Y19pbml0KG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3JpZ2luLCBzaXplX3Qgb3JpZ2luX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpmaWVsZF92YWx1ZSwgc2l6ZV90IGZpZWxkX3ZhbHVlX2xlbik7CisKKy8qCisgKiBGcmVlcyB1cCByZXNvdXJjZXMgdW5kZXIgfGZyYW1lfC4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZnJlZQorICogbmdodHRwMl9leHRfYWx0c3ZjIG9iamVjdCBwb2ludGVkIGJ5IGZyYW1lLT5wYXlsb2FkLiAgVGhpcyBmdW5jdGlvbgorICogb25seSBmcmVlcyBvcmlnaW4gcG9pbnRlZCBieSBuZ2h0dHAyX2V4dF9hbHRzdmMub3JpZ2luLiAgVGhlcmVmb3JlLAorICogb3RoZXIgZmllbGRzIG11c3QgYmUgYWxsb2NhdGVkIGluIHRoZSBzYW1lIGJ1ZmZlciB3aXRoIG9yaWdpbi4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX2FsdHN2Y19mcmVlKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBJbml0aWFsaXplcyBPUklHSU4gZnJhbWUgfGZyYW1lfCB3aXRoIGdpdmVuIHZhbHVlcy4gIFRoaXMgZnVuY3Rpb24KKyAqIGFzc3VtZXMgdGhhdCBmcmFtZS0+cGF5bG9hZCBwb2ludHMgdG8gbmdodHRwMl9leHRfb3JpZ2luIG9iamVjdC4KKyAqIEFsc28gfG92fCBhbmQgdGhlIG1lbW9yeSBwb2ludGVkIGJ5IHRoZSBmaWVsZCBvZiBpdHMgZWxlbWVudHMgYXJlCisgKiBhbGxvY2F0ZWQgaW4gc2luZ2xlIGJ1ZmZlciwgc3RhcnRpbmcgd2l0aCB8b3Z8LiAgT24gc3VjY2VzcywgdGhpcworICogZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHxvdnwsIHNvIGNhbGxlciBtdXN0IG5vdCBmcmVlIGl0LgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfb3JpZ2luX2luaXQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvdiwgc2l6ZV90IG5vdik7CisKKy8qCisgKiBGcmVlcyB1cCByZXNvdXJjZXMgdW5kZXIgfGZyYW1lfC4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZnJlZQorICogbmdodHRwMl9leHRfb3JpZ2luIG9iamVjdCBwb2ludGVkIGJ5IGZyYW1lLT5wYXlsb2FkLiAgVGhpcyBmdW5jdGlvbgorICogb25seSBmcmVlcyBuZ2h0dHAyX2V4dF9vcmlnaW4ub3YuICBUaGVyZWZvcmUsIG90aGVyIGZpZWxkcyBtdXN0IGJlCisgKiBhbGxvY2F0ZWQgaW4gdGhlIHNhbWUgYnVmZmVyIHdpdGggb3YuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9vcmlnaW5fZnJlZShuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgYWZ0ZXIgcGF5bG9hZC4gIFRoZSB0b3RhbAorICogcGFkZGluZyBsZW5ndGggaXMgZ2l2ZW4gaW4gdGhlIHxwYWRsZW58LiAgVGhlIHJldHVybmVkIHZhbHVlIGRvZXMKKyAqIG5vdCBpbmNsdWRlIHRoZSBQYWQgTGVuZ3RoIGZpZWxkLiAgSWYgfHBhZGxlbnwgaXMgMCwgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAwLCByZWdhcmRsZXNzIG9mIGZyYW1lLT5oZC5mbGFncy4KKyAqLworc2l6ZV90IG5naHR0cDJfZnJhbWVfdHJhaWxfcGFkbGVuKG5naHR0cDJfZnJhbWUgKmZyYW1lLCBzaXplX3QgcGFkbGVuKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2RhdGFfaW5pdChuZ2h0dHAyX2RhdGEgKmZyYW1lLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9kYXRhX2ZyZWUobmdodHRwMl9kYXRhICpmcmFtZSk7CisKKy8qCisgKiBNYWtlcyBjb3B5IG9mIHxpdnwgYW5kIHJldHVybiB0aGUgY29weS4gVGhlIHxuaXZ8IGlzIHRoZSBudW1iZXIgb2YKKyAqIGVudHJpZXMgaW4gfGl2fC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBjb3B5IGlmCisgKiBpdCBzdWNjZWVkcywgb3IgTlVMTC4KKyAqLworbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqbmdodHRwMl9mcmFtZV9pdl9jb3B5KGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXYsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogU29ydHMgdGhlIHxudmF8IGluIGFzY2VuZGluZyBvcmRlciBvZiBuYW1lIGFuZCB2YWx1ZS4gSWYgbmFtZXMgYXJlCisgKiBlcXVpdmFsZW50LCBzb3J0IHRoZW0gYnkgdmFsdWUuCisgKi8KK3ZvaWQgbmdodHRwMl9udl9hcnJheV9zb3J0KG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKTsKKworLyoKKyAqIENvcGllcyBuYW1lL3ZhbHVlIHBhaXJzIGZyb20gfG52YXwsIHdoaWNoIGNvbnRhaW5zIHxudmxlbnwgcGFpcnMsCisgKiB0byB8Km52YV9wdHJ8LCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc28gdGhhdCBhbGwgaXRlbXMgY2FuCisgKiBiZSBzdG9yZWQuICBUaGUgcmVzdWx0YW50IG5hbWUgYW5kIHZhbHVlIGluIG5naHR0cDJfbnYgYXJlCisgKiBndWFyYW50ZWVkIHRvIGJlIE5VTEwtdGVybWluYXRlZCBldmVuIGlmIHRoZSBpbnB1dCBpcyBub3QKKyAqIG51bGwtdGVybWluYXRlZC4KKyAqCisgKiBUaGUgfCpudmFfcHRyfCBtdXN0IGJlIGZyZWVkIHVzaW5nIG5naHR0cDJfbnZfYXJyYXlfZGVsKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfbnZfYXJyYXlfY29weShuZ2h0dHAyX252ICoqbnZhX3B0ciwgY29uc3QgbmdodHRwMl9udiAqbnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4sIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIHRoZSBuYW1lL3ZhbHVlIHBhaXIgfGF8IGVxdWFscyB0byB8YnwuIFRoZSBuYW1lCisgKiBpcyBjb21wYXJlZCBpbiBjYXNlLXNlbnNpdGl2ZSwgYmVjYXVzZSB3ZSBlbnN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5hbWUgaXMgbG93ZXItY2FzZWQuCisgKi8KK2ludCBuZ2h0dHAyX252X2VxdWFsKGNvbnN0IG5naHR0cDJfbnYgKmEsIGNvbnN0IG5naHR0cDJfbnYgKmIpOworCisvKgorICogRnJlZXMgfG52YXwuCisgKi8KK3ZvaWQgbmdodHRwMl9udl9hcnJheV9kZWwobmdodHRwMl9udiAqbnZhLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIENoZWNrcyB0aGF0IHRoZSB8aXZ8LCB3aGljaCBpbmNsdWRlcyB8bml2fCBlbnRyaWVzLCBkb2VzIG5vdCBoYXZlCisgKiBpbnZhbGlkIHZhbHVlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uemVybyBpZiBpdCBzdWNjZWVkcywgb3IgMC4KKyAqLworaW50IG5naHR0cDJfaXZfY2hlY2soY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsIHNpemVfdCBuaXYpOworCisvKgorICogU2V0cyBQYWQgTGVuZ3RoIGZpZWxkIGFuZCBmbGFncyBhbmQgYWRqdXN0cyBmcmFtZSBoZWFkZXIgcG9zaXRpb24KKyAqIG9mIGVhY2ggYnVmZmVycyBpbiB8YnVmc3wuICBUaGUgbnVtYmVyIG9mIHBhZGRpbmcgaXMgZ2l2ZW4gaW4gdGhlCisgKiB8cGFkbGVufCBpbmNsdWRpbmcgUGFkIExlbmd0aCBmaWVsZC4gIFRoZSB8aGR8IGlzIHRoZSBmcmFtZSBoZWFkZXIKKyAqIGZvciB0aGUgc2VyaWFsaXplZCBkYXRhLiAgVGhpcyBmdW5jdGlvbiBmaWxscyB6ZXJvcyBwYWRkaW5nIHJlZ2lvbgorICogdW5sZXNzIGZyYW1laGRfb25seSBpcyBub256ZXJvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUgorICogICAgIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBmcmFtZSBpcyB0b28gbGFyZ2UuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX2FkZF9wYWQobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2ZyYW1lX2hkICpoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhZGxlbiwgaW50IGZyYW1laGRfb25seSk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX0ZSQU1FX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGQuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg2OTMxCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZC5jCkBAIC0wLDAgKzEsMjM1MSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9oZC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaGVscGVyLmgiCisjaW5jbHVkZSAibmdodHRwMl9pbnQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2RlYnVnLmgiCisKKy8qIE1ha2Ugc2NhbGFyIGluaXRpYWxpemF0aW9uIGZvcm0gb2YgbmdodHRwMl9oZF9lbnRyeSAqLworI2RlZmluZSBNQUtFX1NUQVRJQ19FTlQoTiwgViwgVCwgSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAge05VTEwsIE5VTEwsICh1aW50OF90ICopKE4pLCBzaXplb2YoKE4pKSAtIDEsIC0xfSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7TlVMTCwgTlVMTCwgKHVpbnQ4X3QgKikoViksIHNpemVvZigoVikpIC0gMSwgLTF9LCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyh1aW50OF90ICopKE4pLCAodWludDhfdCAqKShWKSwgc2l6ZW9mKChOKSkgLSAxLCBzaXplb2YoKFYpKSAtIDEsIDB9LCBcCisgICAgICAgIFQsIEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKy8qIEdlbmVyYXRlZCBieSBta3N0YXRpY3RibC5weSAqLworLyogM3JkIHBhcmFtZXRlciBpcyBuZ2h0dHAyX3Rva2VuIHZhbHVlIGZvciBoZWFkZXIgZmllbGQgbmFtZS4gIFdlIHVzZQorICAgZmlyc3QgZW51bSB2YWx1ZSBpZiBzYW1lIGhlYWRlciBuYW1lcyBhcmUgcmVwZWF0ZWQgKGUuZy4sCisgICA6c3RhdHVzKS4gKi8KK3N0YXRpYyBjb25zdCBuZ2h0dHAyX2hkX3N0YXRpY19lbnRyeSBzdGF0aWNfdGFibGVbXSA9IHsKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjphdXRob3JpdHkiLCAiIiwgMCwgMzE1MzcyNTE1MHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOm1ldGhvZCIsICJHRVQiLCAxLCA2OTU2NjYwNTZ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjptZXRob2QiLCAiUE9TVCIsIDEsIDY5NTY2NjA1NnUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnBhdGgiLCAiLyIsIDMsIDMyOTI4NDg2ODZ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjpwYXRoIiwgIi9pbmRleC5odG1sIiwgMywgMzI5Mjg0ODY4NnUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnNjaGVtZSIsICJodHRwIiwgNSwgMjUxMDQ3NzY3NHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnNjaGVtZSIsICJodHRwcyIsIDUsIDI1MTA0Nzc2NzR1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjpzdGF0dXMiLCAiMjAwIiwgNywgNDAwMDI4ODk4M3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnN0YXR1cyIsICIyMDQiLCA3LCA0MDAwMjg4OTgzdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6c3RhdHVzIiwgIjIwNiIsIDcsIDQwMDAyODg5ODN1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjpzdGF0dXMiLCAiMzA0IiwgNywgNDAwMDI4ODk4M3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnN0YXR1cyIsICI0MDAiLCA3LCA0MDAwMjg4OTgzdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6c3RhdHVzIiwgIjQwNCIsIDcsIDQwMDAyODg5ODN1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjpzdGF0dXMiLCAiNTAwIiwgNywgNDAwMDI4ODk4M3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWNjZXB0LWNoYXJzZXQiLCAiIiwgMTQsIDM2NjQwMTAzNDR1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImFjY2VwdC1lbmNvZGluZyIsICJnemlwLCBkZWZsYXRlIiwgMTUsIDMzNzk2NDkxNzd1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImFjY2VwdC1sYW5ndWFnZSIsICIiLCAxNiwgMTk3OTA4NjYxNHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWNjZXB0LXJhbmdlcyIsICIiLCAxNywgMTcxMzc1Mzk1OHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWNjZXB0IiwgIiIsIDE4LCAxMzY2MDkzMjF1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiIsICIiLCAxOSwgMjcxMDc5NzI5MnUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWdlIiwgIiIsIDIwLCA3NDI0NzYxODh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImFsbG93IiwgIiIsIDIxLCAyOTMwODc4NTE0dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJhdXRob3JpemF0aW9uIiwgIiIsIDIyLCAyNDM2MjU3NzI2dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJjYWNoZS1jb250cm9sIiwgIiIsIDIzLCAxMzU1MzI2NjY5dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJjb250ZW50LWRpc3Bvc2l0aW9uIiwgIiIsIDI0LCAzODg5MTg0MzQ4dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJjb250ZW50LWVuY29kaW5nIiwgIiIsIDI1LCA2NTIwMzU5MnUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiY29udGVudC1sYW5ndWFnZSIsICIiLCAyNiwgMjQ5NzM1ODd1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNvbnRlbnQtbGVuZ3RoIiwgIiIsIDI3LCAxMzA4MTgxNzg5dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJjb250ZW50LWxvY2F0aW9uIiwgIiIsIDI4LCAyMzAyMzY0NzE4dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJjb250ZW50LXJhbmdlIiwgIiIsIDI5LCAzNTU1NTIzMTQ2dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJjb250ZW50LXR5cGUiLCAiIiwgMzAsIDQyNDQwNDgyNzd1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNvb2tpZSIsICIiLCAzMSwgMjAwNzQ0OTc5MXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiZGF0ZSIsICIiLCAzMiwgMzU2NDI5NzMwNXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiZXRhZyIsICIiLCAzMywgMTEzNzkyOTYwdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJleHBlY3QiLCAiIiwgMzQsIDI1MzA4OTY3Mjh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImV4cGlyZXMiLCAiIiwgMzUsIDEwNDk1NDQ1Nzl1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImZyb20iLCAiIiwgMzYsIDI1MTMyNzI5NDl1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImhvc3QiLCAiIiwgMzcsIDI5NTI3MDEyOTV1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImlmLW1hdGNoIiwgIiIsIDM4LCAzNTk3Njk0Njk4dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJpZi1tb2RpZmllZC1zaW5jZSIsICIiLCAzOSwgMjIxMzA1MDc5M3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiaWYtbm9uZS1tYXRjaCIsICIiLCA0MCwgMjUzNjIwMjYxNXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiaWYtcmFuZ2UiLCAiIiwgNDEsIDIzNDA5NzgyMzh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImlmLXVubW9kaWZpZWQtc2luY2UiLCAiIiwgNDIsIDM3OTQ4MTQ4NTh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImxhc3QtbW9kaWZpZWQiLCAiIiwgNDMsIDMyMjY5NTAyNTF1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImxpbmsiLCAiIiwgNDQsIDIzMjQ1NzgzM3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgibG9jYXRpb24iLCAiIiwgNDUsIDIwMDY0OTEyNnUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgibWF4LWZvcndhcmRzIiwgIiIsIDQ2LCAxODI2MTYyMTM0dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJwcm94eS1hdXRoZW50aWNhdGUiLCAiIiwgNDcsIDI3MDk0NDUzNTl1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInByb3h5LWF1dGhvcml6YXRpb24iLCAiIiwgNDgsIDI2ODYzOTI1MDd1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInJhbmdlIiwgIiIsIDQ5LCA0MjA4NzI1MjAydSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJyZWZlcmVyIiwgIiIsIDUwLCAzOTY5NTc5MzY2dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJyZWZyZXNoIiwgIiIsIDUxLCAzNTcyNjU1NjY4dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJyZXRyeS1hZnRlciIsICIiLCA1MiwgMzMzNjE4MDU5OHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgic2VydmVyIiwgIiIsIDUzLCAxMDg1MDI5ODQydSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJzZXQtY29va2llIiwgIiIsIDU0LCAxODQ4MzcxMDAwdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgIiIsIDU1LCA0MTM4MTQ3MzYxdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJ0cmFuc2Zlci1lbmNvZGluZyIsICIiLCA1NiwgMzcxOTU5MDk4OHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgidXNlci1hZ2VudCIsICIiLCA1NywgNjA2NDQ0NTI2dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJ2YXJ5IiwgIiIsIDU4LCAxMDg1MDA1MzgxdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJ2aWEiLCAiIiwgNTksIDE3NjI3OTg2MTF1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInd3dy1hdXRoZW50aWNhdGUiLCAiIiwgNjAsIDc3OTg2NTg1OHUpLAorfTsKKworc3RhdGljIGludCBtZW1lcShjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuKSB7CisgIHJldHVybiBtZW1jbXAoczEsIHMyLCBuKSA9PSAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3YXMgZ2VuZXJhdGVkIGJ5IGdlbmxpYnRva2VubG9va3VwLnB5LiAgSW5zcGlyZWQgYnkKKyAqIGgybyBoZWFkZXIgbG9va3VwLiAgaHR0cHM6Ly9naXRodWIuY29tL2gyby9oMm8KKyAqLworc3RhdGljIGludDMyX3QgbG9va3VwX3Rva2VuKGNvbnN0IHVpbnQ4X3QgKm5hbWUsIHNpemVfdCBuYW1lbGVuKSB7CisgIHN3aXRjaCAobmFtZWxlbikgeworICBjYXNlIDI6CisgICAgc3dpdGNoIChuYW1lWzFdKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoInQiLCBuYW1lLCAxKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9URTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAzOgorICAgIHN3aXRjaCAobmFtZVsyXSkgeworICAgIGNhc2UgJ2EnOgorICAgICAgaWYgKG1lbWVxKCJ2aSIsIG5hbWUsIDIpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1ZJQTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJhZyIsIG5hbWUsIDIpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0FHRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSA0OgorICAgIHN3aXRjaCAobmFtZVszXSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJkYXQiLCBuYW1lLCAzKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9EQVRFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnZyc6CisgICAgICBpZiAobWVtZXEoImV0YSIsIG5hbWUsIDMpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0VUQUc7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdrJzoKKyAgICAgIGlmIChtZW1lcSgibGluIiwgbmFtZSwgMykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fTElOSzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ20nOgorICAgICAgaWYgKG1lbWVxKCJmcm8iLCBuYW1lLCAzKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9GUk9NOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICBpZiAobWVtZXEoImhvcyIsIG5hbWUsIDMpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0hPU1Q7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICd5JzoKKyAgICAgIGlmIChtZW1lcSgidmFyIiwgbmFtZSwgMykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fVkFSWTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSA1OgorICAgIHN3aXRjaCAobmFtZVs0XSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJyYW5nIiwgbmFtZSwgNCkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fUkFOR0U7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdoJzoKKyAgICAgIGlmIChtZW1lcSgiOnBhdCIsIG5hbWUsIDQpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX19QQVRIOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAndyc6CisgICAgICBpZiAobWVtZXEoImFsbG8iLCBuYW1lLCA0KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9BTExPVzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSA2OgorICAgIHN3aXRjaCAobmFtZVs1XSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJjb29raSIsIG5hbWUsIDUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0NPT0tJRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3InOgorICAgICAgaWYgKG1lbWVxKCJzZXJ2ZSIsIG5hbWUsIDUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1NFUlZFUjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3QnOgorICAgICAgaWYgKG1lbWVxKCJhY2NlcCIsIG5hbWUsIDUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0FDQ0VQVDsKKyAgICAgIH0KKyAgICAgIGlmIChtZW1lcSgiZXhwZWMiLCBuYW1lLCA1KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9FWFBFQ1Q7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgNzoKKyAgICBzd2l0Y2ggKG5hbWVbNl0pIHsKKyAgICBjYXNlICdkJzoKKyAgICAgIGlmIChtZW1lcSgiOm1ldGhvIiwgbmFtZSwgNikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fX01FVEhPRDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCI6c2NoZW0iLCBuYW1lLCA2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9fU0NIRU1FOworICAgICAgfQorICAgICAgaWYgKG1lbWVxKCJ1cGdyYWQiLCBuYW1lLCA2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9VUEdSQURFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnaCc6CisgICAgICBpZiAobWVtZXEoInJlZnJlcyIsIG5hbWUsIDYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1JFRlJFU0g7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdyJzoKKyAgICAgIGlmIChtZW1lcSgicmVmZXJlIiwgbmFtZSwgNikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fUkVGRVJFUjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3MnOgorICAgICAgaWYgKG1lbWVxKCI6c3RhdHUiLCBuYW1lLCA2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9fU1RBVFVTOworICAgICAgfQorICAgICAgaWYgKG1lbWVxKCJleHBpcmUiLCBuYW1lLCA2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9FWFBJUkVTOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDg6CisgICAgc3dpdGNoIChuYW1lWzddKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImlmLXJhbmciLCBuYW1lLCA3KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9JRl9SQU5HRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2gnOgorICAgICAgaWYgKG1lbWVxKCJpZi1tYXRjIiwgbmFtZSwgNykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fSUZfTUFUQ0g7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgIGlmIChtZW1lcSgibG9jYXRpbyIsIG5hbWUsIDcpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0xPQ0FUSU9OOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDk6CisgICAgc3dpdGNoIChuYW1lWzhdKSB7CisgICAgY2FzZSAnbCc6CisgICAgICBpZiAobWVtZXEoIjpwcm90b2NvIiwgbmFtZSwgOCkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fX1BST1RPQ09MOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDEwOgorICAgIHN3aXRjaCAobmFtZVs5XSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJrZWVwLWFsaXYiLCBuYW1lLCA5KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9LRUVQX0FMSVZFOworICAgICAgfQorICAgICAgaWYgKG1lbWVxKCJzZXQtY29va2kiLCBuYW1lLCA5KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9TRVRfQ09PS0lFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICBpZiAobWVtZXEoImNvbm5lY3RpbyIsIG5hbWUsIDkpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0NPTk5FQ1RJT047CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICd0JzoKKyAgICAgIGlmIChtZW1lcSgidXNlci1hZ2VuIiwgbmFtZSwgOSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fVVNFUl9BR0VOVDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3knOgorICAgICAgaWYgKG1lbWVxKCI6YXV0aG9yaXQiLCBuYW1lLCA5KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9fQVVUSE9SSVRZOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDExOgorICAgIHN3aXRjaCAobmFtZVsxMF0pIHsKKyAgICBjYXNlICdyJzoKKyAgICAgIGlmIChtZW1lcSgicmV0cnktYWZ0ZSIsIG5hbWUsIDEwKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9SRVRSWV9BRlRFUjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAxMjoKKyAgICBzd2l0Y2ggKG5hbWVbMTFdKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImNvbnRlbnQtdHlwIiwgbmFtZSwgMTEpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfVFlQRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3MnOgorICAgICAgaWYgKG1lbWVxKCJtYXgtZm9yd2FyZCIsIG5hbWUsIDExKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9NQVhfRk9SV0FSRFM7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMTM6CisgICAgc3dpdGNoIChuYW1lWzEyXSkgeworICAgIGNhc2UgJ2QnOgorICAgICAgaWYgKG1lbWVxKCJsYXN0LW1vZGlmaWUiLCBuYW1lLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fTEFTVF9NT0RJRklFRDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJjb250ZW50LXJhbmciLCBuYW1lLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9SQU5HRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2gnOgorICAgICAgaWYgKG1lbWVxKCJpZi1ub25lLW1hdGMiLCBuYW1lLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fSUZfTk9ORV9NQVRDSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2wnOgorICAgICAgaWYgKG1lbWVxKCJjYWNoZS1jb250cm8iLCBuYW1lLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ0FDSEVfQ09OVFJPTDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAgICAgaWYgKG1lbWVxKCJhdXRob3JpemF0aW8iLCBuYW1lLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQVVUSE9SSVpBVElPTjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3MnOgorICAgICAgaWYgKG1lbWVxKCJhY2NlcHQtcmFuZ2UiLCBuYW1lLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQUNDRVBUX1JBTkdFUzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAxNDoKKyAgICBzd2l0Y2ggKG5hbWVbMTNdKSB7CisgICAgY2FzZSAnaCc6CisgICAgICBpZiAobWVtZXEoImNvbnRlbnQtbGVuZ3QiLCBuYW1lLCAxMykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9MRU5HVEg7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICd0JzoKKyAgICAgIGlmIChtZW1lcSgiYWNjZXB0LWNoYXJzZSIsIG5hbWUsIDEzKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9BQ0NFUFRfQ0hBUlNFVDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAxNToKKyAgICBzd2l0Y2ggKG5hbWVbMTRdKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImFjY2VwdC1sYW5ndWFnIiwgbmFtZSwgMTQpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0FDQ0VQVF9MQU5HVUFHRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2cnOgorICAgICAgaWYgKG1lbWVxKCJhY2NlcHQtZW5jb2RpbiIsIG5hbWUsIDE0KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9BQ0NFUFRfRU5DT0RJTkc7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMTY6CisgICAgc3dpdGNoIChuYW1lWzE1XSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJjb250ZW50LWxhbmd1YWciLCBuYW1lLCAxNSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9MQU5HVUFHRTsKKyAgICAgIH0KKyAgICAgIGlmIChtZW1lcSgid3d3LWF1dGhlbnRpY2F0IiwgbmFtZSwgMTUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1dXV19BVVRIRU5USUNBVEU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdnJzoKKyAgICAgIGlmIChtZW1lcSgiY29udGVudC1lbmNvZGluIiwgbmFtZSwgMTUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfRU5DT0RJTkc7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgIGlmIChtZW1lcSgiY29udGVudC1sb2NhdGlvIiwgbmFtZSwgMTUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfTE9DQVRJT047CisgICAgICB9CisgICAgICBpZiAobWVtZXEoInByb3h5LWNvbm5lY3RpbyIsIG5hbWUsIDE1KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9QUk9YWV9DT05ORUNUSU9OOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDE3OgorICAgIHN3aXRjaCAobmFtZVsxNl0pIHsKKyAgICBjYXNlICdlJzoKKyAgICAgIGlmIChtZW1lcSgiaWYtbW9kaWZpZWQtc2luYyIsIG5hbWUsIDE2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9JRl9NT0RJRklFRF9TSU5DRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2cnOgorICAgICAgaWYgKG1lbWVxKCJ0cmFuc2Zlci1lbmNvZGluIiwgbmFtZSwgMTYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1RSQU5TRkVSX0VOQ09ESU5HOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDE4OgorICAgIHN3aXRjaCAobmFtZVsxN10pIHsKKyAgICBjYXNlICdlJzoKKyAgICAgIGlmIChtZW1lcSgicHJveHktYXV0aGVudGljYXQiLCBuYW1lLCAxNykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fUFJPWFlfQVVUSEVOVElDQVRFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDE5OgorICAgIHN3aXRjaCAobmFtZVsxOF0pIHsKKyAgICBjYXNlICdlJzoKKyAgICAgIGlmIChtZW1lcSgiaWYtdW5tb2RpZmllZC1zaW5jIiwgbmFtZSwgMTgpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0lGX1VOTU9ESUZJRURfU0lOQ0U7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgIGlmIChtZW1lcSgiY29udGVudC1kaXNwb3NpdGlvIiwgbmFtZSwgMTgpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfRElTUE9TSVRJT047CisgICAgICB9CisgICAgICBpZiAobWVtZXEoInByb3h5LWF1dGhvcml6YXRpbyIsIG5hbWUsIDE4KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9QUk9YWV9BVVRIT1JJWkFUSU9OOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDI1OgorICAgIHN3aXRjaCAobmFtZVsyNF0pIHsKKyAgICBjYXNlICd5JzoKKyAgICAgIGlmIChtZW1lcSgic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0IiwgbmFtZSwgMjQpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1NUUklDVF9UUkFOU1BPUlRfU0VDVVJJVFk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMjc6CisgICAgc3dpdGNoIChuYW1lWzI2XSkgeworICAgIGNhc2UgJ24nOgorICAgICAgaWYgKG1lbWVxKCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaSIsIG5hbWUsIDI2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9BQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU47CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIC0xOworfQorCit2b2lkIG5naHR0cDJfaGRfZW50cnlfaW5pdChuZ2h0dHAyX2hkX2VudHJ5ICplbnQsIG5naHR0cDJfaGRfbnYgKm52KSB7CisgIGVudC0+bnYgPSAqbnY7CisgIGVudC0+Y252Lm5hbWUgPSBudi0+bmFtZS0+YmFzZTsKKyAgZW50LT5jbnYubmFtZWxlbiA9IG52LT5uYW1lLT5sZW47CisgIGVudC0+Y252LnZhbHVlID0gbnYtPnZhbHVlLT5iYXNlOworICBlbnQtPmNudi52YWx1ZWxlbiA9IG52LT52YWx1ZS0+bGVuOworICBlbnQtPmNudi5mbGFncyA9IG52LT5mbGFnczsKKyAgZW50LT5uZXh0ID0gTlVMTDsKKyAgZW50LT5oYXNoID0gMDsKKworICBuZ2h0dHAyX3JjYnVmX2luY3JlZihlbnQtPm52Lm5hbWUpOworICBuZ2h0dHAyX3JjYnVmX2luY3JlZihlbnQtPm52LnZhbHVlKTsKK30KKwordm9pZCBuZ2h0dHAyX2hkX2VudHJ5X2ZyZWUobmdodHRwMl9oZF9lbnRyeSAqZW50KSB7CisgIG5naHR0cDJfcmNidWZfZGVjcmVmKGVudC0+bnYudmFsdWUpOworICBuZ2h0dHAyX3JjYnVmX2RlY3JlZihlbnQtPm52Lm5hbWUpOworfQorCitzdGF0aWMgaW50IG5hbWVfZXEoY29uc3QgbmdodHRwMl9oZF9udiAqYSwgY29uc3QgbmdodHRwMl9udiAqYikgeworICByZXR1cm4gYS0+bmFtZS0+bGVuID09IGItPm5hbWVsZW4gJiYKKyAgICAgICAgIG1lbWVxKGEtPm5hbWUtPmJhc2UsIGItPm5hbWUsIGItPm5hbWVsZW4pOworfQorCitzdGF0aWMgaW50IHZhbHVlX2VxKGNvbnN0IG5naHR0cDJfaGRfbnYgKmEsIGNvbnN0IG5naHR0cDJfbnYgKmIpIHsKKyAgcmV0dXJuIGEtPnZhbHVlLT5sZW4gPT0gYi0+dmFsdWVsZW4gJiYKKyAgICAgICAgIG1lbWVxKGEtPnZhbHVlLT5iYXNlLCBiLT52YWx1ZSwgYi0+dmFsdWVsZW4pOworfQorCitzdGF0aWMgdWludDMyX3QgbmFtZV9oYXNoKGNvbnN0IG5naHR0cDJfbnYgKm52KSB7CisgIC8qIDMyIGJpdCBGTlYtMWE6IGh0dHA6Ly9pc3RoZS5jb20vY2hvbmdvL3RlY2gvY29tcC9mbnYvICovCisgIHVpbnQzMl90IGggPSAyMTY2MTM2MjYxdTsKKyAgc2l6ZV90IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IG52LT5uYW1lbGVuOyArK2kpIHsKKyAgICBoIF49IG52LT5uYW1lW2ldOworICAgIGggKz0gKGggPDwgMSkgKyAoaCA8PCA0KSArIChoIDw8IDcpICsgKGggPDwgOCkgKyAoaCA8PCAyNCk7CisgIH0KKworICByZXR1cm4gaDsKK30KKworc3RhdGljIHZvaWQgaGRfbWFwX2luaXQobmdodHRwMl9oZF9tYXAgKm1hcCkgeworICBtZW1zZXQobWFwLCAwLCBzaXplb2YobmdodHRwMl9oZF9tYXApKTsKK30KKworc3RhdGljIHZvaWQgaGRfbWFwX2luc2VydChuZ2h0dHAyX2hkX21hcCAqbWFwLCBuZ2h0dHAyX2hkX2VudHJ5ICplbnQpIHsKKyAgbmdodHRwMl9oZF9lbnRyeSAqKmJ1Y2tldDsKKworICBidWNrZXQgPSAmbWFwLT50YWJsZVtlbnQtPmhhc2ggJiAoSERfTUFQX1NJWkUgLSAxKV07CisKKyAgaWYgKCpidWNrZXQgPT0gTlVMTCkgeworICAgICpidWNrZXQgPSBlbnQ7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogbG93ZXIgaW5kZXggaXMgbGlua2VkIG5lYXIgdGhlIHJvb3QgKi8KKyAgZW50LT5uZXh0ID0gKmJ1Y2tldDsKKyAgKmJ1Y2tldCA9IGVudDsKK30KKworc3RhdGljIG5naHR0cDJfaGRfZW50cnkgKmhkX21hcF9maW5kKG5naHR0cDJfaGRfbWFwICptYXAsIGludCAqZXhhY3RfbWF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnYsIGludDMyX3QgdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCwgaW50IG5hbWVfb25seSkgeworICBuZ2h0dHAyX2hkX2VudHJ5ICpwOworICBuZ2h0dHAyX2hkX2VudHJ5ICpyZXMgPSBOVUxMOworCisgICpleGFjdF9tYXRjaCA9IDA7CisKKyAgZm9yIChwID0gbWFwLT50YWJsZVtoYXNoICYgKEhEX01BUF9TSVpFIC0gMSldOyBwOyBwID0gcC0+bmV4dCkgeworICAgIGlmICh0b2tlbiAhPSBwLT5udi50b2tlbiB8fAorICAgICAgICAodG9rZW4gPT0gLTEgJiYgKGhhc2ggIT0gcC0+aGFzaCB8fCAhbmFtZV9lcSgmcC0+bnYsIG52KSkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKCFyZXMpIHsKKyAgICAgIHJlcyA9IHA7CisgICAgICBpZiAobmFtZV9vbmx5KSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpZiAodmFsdWVfZXEoJnAtPm52LCBudikpIHsKKyAgICAgIHJlcyA9IHA7CisgICAgICAqZXhhY3RfbWF0Y2ggPSAxOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgaGRfbWFwX3JlbW92ZShuZ2h0dHAyX2hkX21hcCAqbWFwLCBuZ2h0dHAyX2hkX2VudHJ5ICplbnQpIHsKKyAgbmdodHRwMl9oZF9lbnRyeSAqKmRzdDsKKworICBkc3QgPSAmbWFwLT50YWJsZVtlbnQtPmhhc2ggJiAoSERfTUFQX1NJWkUgLSAxKV07CisKKyAgZm9yICg7ICpkc3Q7IGRzdCA9ICYoKmRzdCktPm5leHQpIHsKKyAgICBpZiAoKmRzdCAhPSBlbnQpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgICpkc3QgPSBlbnQtPm5leHQ7CisgICAgZW50LT5uZXh0ID0gTlVMTDsKKyAgICByZXR1cm47CisgIH0KK30KKworc3RhdGljIGludCBoZF9yaW5nYnVmX2luaXQobmdodHRwMl9oZF9yaW5nYnVmICpyaW5nYnVmLCBzaXplX3QgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgc2l6ZV90IHNpemU7CisgIGZvciAoc2l6ZSA9IDE7IHNpemUgPCBidWZzaXplOyBzaXplIDw8PSAxKQorICAgIDsKKyAgcmluZ2J1Zi0+YnVmZmVyID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfaGRfZW50cnkgKikgKiBzaXplKTsKKyAgaWYgKHJpbmdidWYtPmJ1ZmZlciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisgIHJpbmdidWYtPm1hc2sgPSBzaXplIC0gMTsKKyAgcmluZ2J1Zi0+Zmlyc3QgPSAwOworICByaW5nYnVmLT5sZW4gPSAwOworICByZXR1cm4gMDsKK30KKworc3RhdGljIG5naHR0cDJfaGRfZW50cnkgKmhkX3JpbmdidWZfZ2V0KG5naHR0cDJfaGRfcmluZ2J1ZiAqcmluZ2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWR4KSB7CisgIGFzc2VydChpZHggPCByaW5nYnVmLT5sZW4pOworICByZXR1cm4gcmluZ2J1Zi0+YnVmZmVyWyhyaW5nYnVmLT5maXJzdCArIGlkeCkgJiByaW5nYnVmLT5tYXNrXTsKK30KKworc3RhdGljIGludCBoZF9yaW5nYnVmX3Jlc2VydmUobmdodHRwMl9oZF9yaW5nYnVmICpyaW5nYnVmLCBzaXplX3QgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgc2l6ZV90IGk7CisgIHNpemVfdCBzaXplOworICBuZ2h0dHAyX2hkX2VudHJ5ICoqYnVmZmVyOworCisgIGlmIChyaW5nYnVmLT5tYXNrICsgMSA+PSBidWZzaXplKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZm9yIChzaXplID0gMTsgc2l6ZSA8IGJ1ZnNpemU7IHNpemUgPDw9IDEpCisgICAgOworICBidWZmZXIgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9oZF9lbnRyeSAqKSAqIHNpemUpOworICBpZiAoYnVmZmVyID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IHJpbmdidWYtPmxlbjsgKytpKSB7CisgICAgYnVmZmVyW2ldID0gaGRfcmluZ2J1Zl9nZXQocmluZ2J1ZiwgaSk7CisgIH0KKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIHJpbmdidWYtPmJ1ZmZlcik7CisgIHJpbmdidWYtPmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgcmluZ2J1Zi0+bWFzayA9IHNpemUgLSAxOworICByaW5nYnVmLT5maXJzdCA9IDA7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoZF9yaW5nYnVmX2ZyZWUobmdodHRwMl9oZF9yaW5nYnVmICpyaW5nYnVmLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHNpemVfdCBpOworICBpZiAocmluZ2J1ZiA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisgIGZvciAoaSA9IDA7IGkgPCByaW5nYnVmLT5sZW47ICsraSkgeworICAgIG5naHR0cDJfaGRfZW50cnkgKmVudCA9IGhkX3JpbmdidWZfZ2V0KHJpbmdidWYsIGkpOworCisgICAgbmdodHRwMl9oZF9lbnRyeV9mcmVlKGVudCk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGVudCk7CisgIH0KKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIHJpbmdidWYtPmJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgaGRfcmluZ2J1Zl9wdXNoX2Zyb250KG5naHR0cDJfaGRfcmluZ2J1ZiAqcmluZ2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfZW50cnkgKmVudCwgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisKKyAgcnYgPSBoZF9yaW5nYnVmX3Jlc2VydmUocmluZ2J1ZiwgcmluZ2J1Zi0+bGVuICsgMSwgbWVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJpbmdidWYtPmJ1ZmZlclstLXJpbmdidWYtPmZpcnN0ICYgcmluZ2J1Zi0+bWFza10gPSBlbnQ7CisgICsrcmluZ2J1Zi0+bGVuOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoZF9yaW5nYnVmX3BvcF9iYWNrKG5naHR0cDJfaGRfcmluZ2J1ZiAqcmluZ2J1ZikgeworICBhc3NlcnQocmluZ2J1Zi0+bGVuID4gMCk7CisgIC0tcmluZ2J1Zi0+bGVuOworfQorCitzdGF0aWMgaW50IGhkX2NvbnRleHRfaW5pdChuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgaW50IHJ2OworICBjb250ZXh0LT5tZW0gPSBtZW07CisgIGNvbnRleHQtPmJhZCA9IDA7CisgIGNvbnRleHQtPmhkX3RhYmxlX2J1ZnNpemVfbWF4ID0gTkdIVFRQMl9IRF9ERUZBVUxUX01BWF9CVUZGRVJfU0laRTsKKyAgcnYgPSBoZF9yaW5nYnVmX2luaXQoCisgICAgICAmY29udGV4dC0+aGRfdGFibGUsCisgICAgICBjb250ZXh0LT5oZF90YWJsZV9idWZzaXplX21heCAvIE5HSFRUUDJfSERfRU5UUllfT1ZFUkhFQUQsIG1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgY29udGV4dC0+aGRfdGFibGVfYnVmc2l6ZSA9IDA7CisgIGNvbnRleHQtPm5leHRfc2VxID0gMDsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRfY29udGV4dF9mcmVlKG5naHR0cDJfaGRfY29udGV4dCAqY29udGV4dCkgeworICBoZF9yaW5nYnVmX2ZyZWUoJmNvbnRleHQtPmhkX3RhYmxlLCBjb250ZXh0LT5tZW0pOworfQorCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX2luaXQobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgcmV0dXJuIG5naHR0cDJfaGRfZGVmbGF0ZV9pbml0MigKKyAgICAgIGRlZmxhdGVyLCBOR0hUVFAyX0hEX0RFRkFVTFRfTUFYX0RFRkxBVEVfQlVGRkVSX1NJWkUsIG1lbSk7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2RlZmxhdGVfaW5pdDIobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgaW50IHJ2OworICBydiA9IGhkX2NvbnRleHRfaW5pdCgmZGVmbGF0ZXItPmN0eCwgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBoZF9tYXBfaW5pdCgmZGVmbGF0ZXItPm1hcCk7CisKKyAgaWYgKG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZSA8IE5HSFRUUDJfSERfREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUpIHsKKyAgICBkZWZsYXRlci0+bm90aWZ5X3RhYmxlX3NpemVfY2hhbmdlID0gMTsKKyAgICBkZWZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemVfbWF4ID0gbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplOworICB9IGVsc2UgeworICAgIGRlZmxhdGVyLT5ub3RpZnlfdGFibGVfc2l6ZV9jaGFuZ2UgPSAwOworICB9CisKKyAgZGVmbGF0ZXItPmRlZmxhdGVfaGRfdGFibGVfYnVmc2l6ZV9tYXggPSBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemU7CisgIGRlZmxhdGVyLT5taW5faGRfdGFibGVfYnVmc2l6ZV9tYXggPSBVSU5UMzJfTUFYOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9oZF9pbmZsYXRlX2luaXQobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgaW50IHJ2OworCisgIHJ2ID0gaGRfY29udGV4dF9pbml0KCZpbmZsYXRlci0+Y3R4LCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIGluZmxhdGVyLT5zZXR0aW5nc19oZF90YWJsZV9idWZzaXplX21heCA9IE5HSFRUUDJfSERfREVGQVVMVF9NQVhfQlVGRkVSX1NJWkU7CisgIGluZmxhdGVyLT5taW5faGRfdGFibGVfYnVmc2l6ZV9tYXggPSBVSU5UMzJfTUFYOworCisgIGluZmxhdGVyLT5udl9uYW1lX2tlZXAgPSBOVUxMOworICBpbmZsYXRlci0+bnZfdmFsdWVfa2VlcCA9IE5VTEw7CisKKyAgaW5mbGF0ZXItPm9wY29kZSA9IE5HSFRUUDJfSERfT1BDT0RFX05PTkU7CisgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfSU5GTEFURV9TVEFSVDsKKworICBuZ2h0dHAyX2J1Zl9pbml0KCZpbmZsYXRlci0+bmFtZWJ1Zik7CisgIG5naHR0cDJfYnVmX2luaXQoJmluZmxhdGVyLT52YWx1ZWJ1Zik7CisKKyAgaW5mbGF0ZXItPm5hbWVyY2J1ZiA9IE5VTEw7CisgIGluZmxhdGVyLT52YWx1ZXJjYnVmID0gTlVMTDsKKworICBpbmZsYXRlci0+aHVmZm1hbl9lbmNvZGVkID0gMDsKKyAgaW5mbGF0ZXItPmluZGV4ID0gMDsKKyAgaW5mbGF0ZXItPmxlZnQgPSAwOworICBpbmZsYXRlci0+c2hpZnQgPSAwOworICBpbmZsYXRlci0+aW5kZXhfcmVxdWlyZWQgPSAwOworICBpbmZsYXRlci0+bm9faW5kZXggPSAwOworCisgIHJldHVybiAwOworCitmYWlsOgorICByZXR1cm4gcnY7Cit9CisKK3N0YXRpYyB2b2lkIGhkX2luZmxhdGVfa2VlcF9mcmVlKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKSB7CisgIG5naHR0cDJfcmNidWZfZGVjcmVmKGluZmxhdGVyLT5udl92YWx1ZV9rZWVwKTsKKyAgbmdodHRwMl9yY2J1Zl9kZWNyZWYoaW5mbGF0ZXItPm52X25hbWVfa2VlcCk7CisKKyAgaW5mbGF0ZXItPm52X3ZhbHVlX2tlZXAgPSBOVUxMOworICBpbmZsYXRlci0+bnZfbmFtZV9rZWVwID0gTlVMTDsKK30KKwordm9pZCBuZ2h0dHAyX2hkX2RlZmxhdGVfZnJlZShuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcikgeworICBoZF9jb250ZXh0X2ZyZWUoJmRlZmxhdGVyLT5jdHgpOworfQorCit2b2lkIG5naHR0cDJfaGRfaW5mbGF0ZV9mcmVlKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKSB7CisgIGhkX2luZmxhdGVfa2VlcF9mcmVlKGluZmxhdGVyKTsKKworICBuZ2h0dHAyX3JjYnVmX2RlY3JlZihpbmZsYXRlci0+dmFsdWVyY2J1Zik7CisgIG5naHR0cDJfcmNidWZfZGVjcmVmKGluZmxhdGVyLT5uYW1lcmNidWYpOworCisgIGhkX2NvbnRleHRfZnJlZSgmaW5mbGF0ZXItPmN0eCk7Cit9CisKK3N0YXRpYyBzaXplX3QgZW50cnlfcm9vbShzaXplX3QgbmFtZWxlbiwgc2l6ZV90IHZhbHVlbGVuKSB7CisgIHJldHVybiBOR0hUVFAyX0hEX0VOVFJZX09WRVJIRUFEICsgbmFtZWxlbiArIHZhbHVlbGVuOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2hlYWRlcihuZ2h0dHAyX2hkX252ICpudl9vdXQsIG5naHR0cDJfaGRfbnYgKm52KSB7CisgIERFQlVHRigiaW5mbGF0ZWhkOiBoZWFkZXIgZW1pc3Npb246ICVzOiAlc1xuIiwgbnYtPm5hbWUtPmJhc2UsCisgICAgICAgICBudi0+dmFsdWUtPmJhc2UpOworICAvKiBlbnQtPnJlZiBtYXkgYmUgMC4gVGhpcyBoYXBwZW5zIGlmIHRoZSBlbmNvZGVyIGVtaXRzIGxpdGVyYWwKKyAgICAgYmxvY2sgbGFyZ2VyIHRoYW4gaGVhZGVyIHRhYmxlIGNhcGFjaXR5IHdpdGggaW5kZXhpbmcuICovCisgICpudl9vdXQgPSAqbnY7Cit9CisKK3N0YXRpYyBzaXplX3QgY291bnRfZW5jb2RlZF9sZW5ndGgoc2l6ZV90IG4sIHNpemVfdCBwcmVmaXgpIHsKKyAgc2l6ZV90IGsgPSAoc2l6ZV90KSgoMSA8PCBwcmVmaXgpIC0gMSk7CisgIHNpemVfdCBsZW4gPSAwOworCisgIGlmIChuIDwgaykgeworICAgIHJldHVybiAxOworICB9CisKKyAgbiAtPSBrOworICArK2xlbjsKKworICBmb3IgKDsgbiA+PSAxMjg7IG4gPj49IDcsICsrbGVuKQorICAgIDsKKworICByZXR1cm4gbGVuICsgMTsKK30KKworc3RhdGljIHNpemVfdCBlbmNvZGVfbGVuZ3RoKHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IG4sIHNpemVfdCBwcmVmaXgpIHsKKyAgc2l6ZV90IGsgPSAoc2l6ZV90KSgoMSA8PCBwcmVmaXgpIC0gMSk7CisgIHVpbnQ4X3QgKmJlZ2luID0gYnVmOworCisgICpidWYgPSAodWludDhfdCkoKmJ1ZiAmIH5rKTsKKworICBpZiAobiA8IGspIHsKKyAgICAqYnVmID0gKHVpbnQ4X3QpKCpidWYgfCBuKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgICpidWYgPSAodWludDhfdCkoKmJ1ZiB8IGspOworICArK2J1ZjsKKworICBuIC09IGs7CisKKyAgZm9yICg7IG4gPj0gMTI4OyBuID4+PSA3KSB7CisgICAgKmJ1ZisrID0gKHVpbnQ4X3QpKCgxIDw8IDcpIHwgKG4gJiAweDdmKSk7CisgIH0KKworICAqYnVmKysgPSAodWludDhfdCluOworCisgIHJldHVybiAoc2l6ZV90KShidWYgLSBiZWdpbik7Cit9CisKKy8qCisgKiBEZWNvZGVzIHxwcmVmaXh8IHByZWZpeGVkIGludGVnZXIgc3RvcmVkIGZyb20gfGlufC4gIFRoZSB8bGFzdHwKKyAqIHJlcHJlc2VudHMgdGhlIDEgYmV5b25kIHRoZSBsYXN0IG9mIHRoZSB2YWxpZCBjb250aWd1b3VzIG1lbW9yeQorICogcmVnaW9uIGZyb20gfGlufC4gIFRoZSBkZWNvZGVkIGludGVnZXIgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwKKyAqIHRvIFVJTlQzMl9NQVguCisgKgorICogSWYgdGhlIHxpbml0aWFsfCBpcyBub256ZXJvLCBpdCBpcyB1c2VkIGFzIGEgaW5pdGlhbCB2YWx1ZSwgdGhpcworICogZnVuY3Rpb24gYXNzdW1lcyB0aGUgfGlufCBzdGFydHMgd2l0aCBpbnRlcm1lZGlhdGUgZGF0YS4KKyAqCisgKiBBbiBlbnRpcmUgaW50ZWdlciBpcyBkZWNvZGVkIHN1Y2Nlc3NmdWxseSwgZGVjb2RlZCwgdGhlIHwqZmlufCBpcworICogc2V0IHRvIG5vbnplcm8uCisgKgorICogVGhpcyBmdW5jdGlvbiBzdG9yZXMgdGhlIGRlY29kZWQgaW50ZWdlciBpbiB8KnJlc3wgaWYgaXQgc3VjY2VlZCwKKyAqIGluY2x1ZGluZyBwYXJ0aWFsIGRlY29kaW5nIChpbiB0aGlzIGNhc2UsIG51bWJlciBvZiBzaGlmdCB0byBtYWtlCisgKiBpbiB0aGUgbmV4dCBjYWxsIHdpbGwgYmUgc3RvcmVkIGluIHwqc2hpZnRfcHRyfCkgYW5kIHJldHVybnMgbnVtYmVyCisgKiBvZiBieXRlcyBwcm9jZXNzZWQsIG9yIHJldHVybnMgLTEsIGluZGljYXRpbmcgZGVjb2RpbmcgZXJyb3IuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRlY29kZV9sZW5ndGgodWludDMyX3QgKnJlcywgc2l6ZV90ICpzaGlmdF9wdHIsIGludCAqZmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbml0aWFsLCBzaXplX3Qgc2hpZnQsIGNvbnN0IHVpbnQ4X3QgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpsYXN0LCBzaXplX3QgcHJlZml4KSB7CisgIHVpbnQzMl90IGsgPSAodWludDhfdCkoKDEgPDwgcHJlZml4KSAtIDEpOworICB1aW50MzJfdCBuID0gaW5pdGlhbDsKKyAgY29uc3QgdWludDhfdCAqc3RhcnQgPSBpbjsKKworICAqc2hpZnRfcHRyID0gMDsKKyAgKmZpbiA9IDA7CisKKyAgaWYgKG4gPT0gMCkgeworICAgIGlmICgoKmluICYgaykgIT0gaykgeworICAgICAgKnJlcyA9ICgqaW4pICYgazsKKyAgICAgICpmaW4gPSAxOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgbiA9IGs7CisKKyAgICBpZiAoKytpbiA9PSBsYXN0KSB7CisgICAgICAqcmVzID0gbjsKKyAgICAgIHJldHVybiAoc3NpemVfdCkoaW4gLSBzdGFydCk7CisgICAgfQorICB9CisKKyAgZm9yICg7IGluICE9IGxhc3Q7ICsraW4sIHNoaWZ0ICs9IDcpIHsKKyAgICB1aW50MzJfdCBhZGQgPSAqaW4gJiAweDdmOworCisgICAgaWYgKHNoaWZ0ID49IDMyKSB7CisgICAgICBERUJVR0YoImluZmxhdGU6IHNoaWZ0IGV4cG9uZW50IG92ZXJmbG93XG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKFVJTlQzMl9NQVggPj4gc2hpZnQpIDwgYWRkKSB7CisgICAgICBERUJVR0YoImluZmxhdGU6IGludGVnZXIgb3ZlcmZsb3cgb24gc2hpZnRcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGFkZCA8PD0gc2hpZnQ7CisKKyAgICBpZiAoVUlOVDMyX01BWCAtIGFkZCA8IG4pIHsKKyAgICAgIERFQlVHRigiaW5mbGF0ZTogaW50ZWdlciBvdmVyZmxvdyBvbiBhZGRpdGlvblxuIik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbiArPSBhZGQ7CisKKyAgICBpZiAoKCppbiAmICgxIDw8IDcpKSA9PSAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAqc2hpZnRfcHRyID0gc2hpZnQ7CisKKyAgaWYgKGluID09IGxhc3QpIHsKKyAgICAqcmVzID0gbjsKKyAgICByZXR1cm4gKHNzaXplX3QpKGluIC0gc3RhcnQpOworICB9CisKKyAgKnJlcyA9IG47CisgICpmaW4gPSAxOworICByZXR1cm4gKHNzaXplX3QpKGluICsgMSAtIHN0YXJ0KTsKK30KKworc3RhdGljIGludCBlbWl0X3RhYmxlX3NpemUobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgdGFibGVfc2l6ZSkgeworICBpbnQgcnY7CisgIHVpbnQ4X3QgKmJ1ZnA7CisgIHNpemVfdCBibG9ja2xlbjsKKyAgdWludDhfdCBzYlsxNl07CisKKyAgREVCVUdGKCJkZWZsYXRlaGQ6IGVtaXQgdGFibGVfc2l6ZT0lenVcbiIsIHRhYmxlX3NpemUpOworCisgIGJsb2NrbGVuID0gY291bnRfZW5jb2RlZF9sZW5ndGgodGFibGVfc2l6ZSwgNSk7CisKKyAgaWYgKHNpemVvZihzYikgPCBibG9ja2xlbikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIGJ1ZnAgPSBzYjsKKworICAqYnVmcCA9IDB4MjB1OworCisgIGVuY29kZV9sZW5ndGgoYnVmcCwgdGFibGVfc2l6ZSwgNSk7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIHNiLCBibG9ja2xlbik7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW1pdF9pbmRleGVkX2Jsb2NrKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGlkeCkgeworICBpbnQgcnY7CisgIHNpemVfdCBibG9ja2xlbjsKKyAgdWludDhfdCBzYlsxNl07CisgIHVpbnQ4X3QgKmJ1ZnA7CisKKyAgYmxvY2tsZW4gPSBjb3VudF9lbmNvZGVkX2xlbmd0aChpZHggKyAxLCA3KTsKKworICBERUJVR0YoImRlZmxhdGVoZDogZW1pdCBpbmRleGVkIGluZGV4PSV6dSwgJXp1IGJ5dGVzXG4iLCBpZHgsIGJsb2NrbGVuKTsKKworICBpZiAoc2l6ZW9mKHNiKSA8IGJsb2NrbGVuKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgYnVmcCA9IHNiOworICAqYnVmcCA9IDB4ODB1OworICBlbmNvZGVfbGVuZ3RoKGJ1ZnAsIGlkeCArIDEsIDcpOworCisgIHJ2ID0gbmdodHRwMl9idWZzX2FkZChidWZzLCBzYiwgYmxvY2tsZW4pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtaXRfc3RyaW5nKG5naHR0cDJfYnVmcyAqYnVmcywgY29uc3QgdWludDhfdCAqc3RyLCBzaXplX3QgbGVuKSB7CisgIGludCBydjsKKyAgdWludDhfdCBzYlsxNl07CisgIHVpbnQ4X3QgKmJ1ZnA7CisgIHNpemVfdCBibG9ja2xlbjsKKyAgc2l6ZV90IGVuY2xlbjsKKyAgaW50IGh1ZmZtYW4gPSAwOworCisgIGVuY2xlbiA9IG5naHR0cDJfaGRfaHVmZl9lbmNvZGVfY291bnQoc3RyLCBsZW4pOworCisgIGlmIChlbmNsZW4gPCBsZW4pIHsKKyAgICBodWZmbWFuID0gMTsKKyAgfSBlbHNlIHsKKyAgICBlbmNsZW4gPSBsZW47CisgIH0KKworICBibG9ja2xlbiA9IGNvdW50X2VuY29kZWRfbGVuZ3RoKGVuY2xlbiwgNyk7CisKKyAgREVCVUdGKCJkZWZsYXRlaGQ6IGVtaXQgc3RyaW5nIHN0cj0lLipzLCBsZW5ndGg9JXp1LCBodWZmbWFuPSVkLCAiCisgICAgICAgICAiZW5jb2RlZF9sZW5ndGg9JXp1XG4iLAorICAgICAgICAgKGludClsZW4sIChjb25zdCBjaGFyICopc3RyLCBsZW4sIGh1ZmZtYW4sIGVuY2xlbik7CisKKyAgaWYgKHNpemVvZihzYikgPCBibG9ja2xlbikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIGJ1ZnAgPSBzYjsKKyAgKmJ1ZnAgPSBodWZmbWFuID8gMSA8PCA3IDogMDsKKyAgZW5jb2RlX2xlbmd0aChidWZwLCBlbmNsZW4sIDcpOworCisgIHJ2ID0gbmdodHRwMl9idWZzX2FkZChidWZzLCBzYiwgYmxvY2tsZW4pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGlmIChodWZmbWFuKSB7CisgICAgcnYgPSBuZ2h0dHAyX2hkX2h1ZmZfZW5jb2RlKGJ1ZnMsIHN0ciwgbGVuKTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnQoZW5jbGVuID09IGxlbik7CisgICAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIHN0ciwgbGVuKTsKKyAgfQorCisgIHJldHVybiBydjsKK30KKworc3RhdGljIHVpbnQ4X3QgcGFja19maXJzdF9ieXRlKGludCBpbmRleGluZ19tb2RlKSB7CisgIHN3aXRjaCAoaW5kZXhpbmdfbW9kZSkgeworICBjYXNlIE5HSFRUUDJfSERfV0lUSF9JTkRFWElORzoKKyAgICByZXR1cm4gMHg0MHU7CisgIGNhc2UgTkdIVFRQMl9IRF9XSVRIT1VUX0lOREVYSU5HOgorICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfSERfTkVWRVJfSU5ERVhJTkc6CisgICAgcmV0dXJuIDB4MTB1OworICBkZWZhdWx0OgorICAgIGFzc2VydCgwKTsKKyAgfQorICAvKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGNvbXBpbGUgd2l0aCBhbmRyb2lkIE5ESyByMTBkICsKKyAgICAgLS1lbmFibGUtd2Vycm9yICovCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtaXRfaW5kbmFtZV9ibG9jayhuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHNpemVfdCBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudiwgaW50IGluZGV4aW5nX21vZGUpIHsKKyAgaW50IHJ2OworICB1aW50OF90ICpidWZwOworICBzaXplX3QgYmxvY2tsZW47CisgIHVpbnQ4X3Qgc2JbMTZdOworICBzaXplX3QgcHJlZml4bGVuOworCisgIGlmIChpbmRleGluZ19tb2RlID09IE5HSFRUUDJfSERfV0lUSF9JTkRFWElORykgeworICAgIHByZWZpeGxlbiA9IDY7CisgIH0gZWxzZSB7CisgICAgcHJlZml4bGVuID0gNDsKKyAgfQorCisgIERFQlVHRigiZGVmbGF0ZWhkOiBlbWl0IGluZG5hbWUgaW5kZXg9JXp1LCB2YWx1ZWxlbj0lenUsIGluZGV4aW5nX21vZGU9JWRcbiIsCisgICAgICAgICBpZHgsIG52LT52YWx1ZWxlbiwgaW5kZXhpbmdfbW9kZSk7CisKKyAgYmxvY2tsZW4gPSBjb3VudF9lbmNvZGVkX2xlbmd0aChpZHggKyAxLCBwcmVmaXhsZW4pOworCisgIGlmIChzaXplb2Yoc2IpIDwgYmxvY2tsZW4pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgIH0KKworICBidWZwID0gc2I7CisKKyAgKmJ1ZnAgPSBwYWNrX2ZpcnN0X2J5dGUoaW5kZXhpbmdfbW9kZSk7CisKKyAgZW5jb2RlX2xlbmd0aChidWZwLCBpZHggKyAxLCBwcmVmaXhsZW4pOworCisgIHJ2ID0gbmdodHRwMl9idWZzX2FkZChidWZzLCBzYiwgYmxvY2tsZW4pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJ2ID0gZW1pdF9zdHJpbmcoYnVmcywgbnYtPnZhbHVlLCBudi0+dmFsdWVsZW4pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtaXRfbmV3bmFtZV9ibG9jayhuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIGNvbnN0IG5naHR0cDJfbnYgKm52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4aW5nX21vZGUpIHsKKyAgaW50IHJ2OworCisgIERFQlVHRigKKyAgICAgICJkZWZsYXRlaGQ6IGVtaXQgbmV3bmFtZSBuYW1lbGVuPSV6dSwgdmFsdWVsZW49JXp1LCBpbmRleGluZ19tb2RlPSVkXG4iLAorICAgICAgbnYtPm5hbWVsZW4sIG52LT52YWx1ZWxlbiwgaW5kZXhpbmdfbW9kZSk7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkYihidWZzLCBwYWNrX2ZpcnN0X2J5dGUoaW5kZXhpbmdfbW9kZSkpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJ2ID0gZW1pdF9zdHJpbmcoYnVmcywgbnYtPm5hbWUsIG52LT5uYW1lbGVuKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBydiA9IGVtaXRfc3RyaW5nKGJ1ZnMsIG52LT52YWx1ZSwgbnYtPnZhbHVlbGVuKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfaGRfdGFibGVfaW5jcmVtZW50YWwobmdodHRwMl9oZF9jb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9oZF9udiAqbnYsIG5naHR0cDJfaGRfbWFwICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYXNoKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9oZF9lbnRyeSAqbmV3X2VudDsKKyAgc2l6ZV90IHJvb207CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gY29udGV4dC0+bWVtOworICByb29tID0gZW50cnlfcm9vbShudi0+bmFtZS0+bGVuLCBudi0+dmFsdWUtPmxlbik7CisKKyAgd2hpbGUgKGNvbnRleHQtPmhkX3RhYmxlX2J1ZnNpemUgKyByb29tID4gY29udGV4dC0+aGRfdGFibGVfYnVmc2l6ZV9tYXggJiYKKyAgICAgICAgIGNvbnRleHQtPmhkX3RhYmxlLmxlbiA+IDApIHsKKworICAgIHNpemVfdCBpZHggPSBjb250ZXh0LT5oZF90YWJsZS5sZW4gLSAxOworICAgIG5naHR0cDJfaGRfZW50cnkgKmVudCA9IGhkX3JpbmdidWZfZ2V0KCZjb250ZXh0LT5oZF90YWJsZSwgaWR4KTsKKworICAgIGNvbnRleHQtPmhkX3RhYmxlX2J1ZnNpemUgLT0KKyAgICAgICAgZW50cnlfcm9vbShlbnQtPm52Lm5hbWUtPmxlbiwgZW50LT5udi52YWx1ZS0+bGVuKTsKKworICAgIERFQlVHRigiaHBhY2s6IHJlbW92ZSBpdGVtIGZyb20gaGVhZGVyIHRhYmxlOiAlczogJXNcbiIsCisgICAgICAgICAgIChjaGFyICopZW50LT5udi5uYW1lLT5iYXNlLCAoY2hhciAqKWVudC0+bnYudmFsdWUtPmJhc2UpOworCisgICAgaGRfcmluZ2J1Zl9wb3BfYmFjaygmY29udGV4dC0+aGRfdGFibGUpOworICAgIGlmIChtYXApIHsKKyAgICAgIGhkX21hcF9yZW1vdmUobWFwLCBlbnQpOworICAgIH0KKworICAgIG5naHR0cDJfaGRfZW50cnlfZnJlZShlbnQpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBlbnQpOworICB9CisKKyAgaWYgKHJvb20gPiBjb250ZXh0LT5oZF90YWJsZV9idWZzaXplX21heCkgeworICAgIC8qIFRoZSBlbnRyeSB0YWtpbmcgbW9yZSB0aGFuIE5HSFRUUDJfSERfTUFYX0JVRkZFUl9TSVpFIGlzCisgICAgICAgaW1tZWRpYXRlbHkgZXZpY3RlZC4gIFNvIHdlIGRvbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgaXQuICovCisgICAgcmV0dXJuIDA7CisgIH0KKworICBuZXdfZW50ID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfaGRfZW50cnkpKTsKKyAgaWYgKG5ld19lbnQgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG5naHR0cDJfaGRfZW50cnlfaW5pdChuZXdfZW50LCBudik7CisKKyAgcnYgPSBoZF9yaW5nYnVmX3B1c2hfZnJvbnQoJmNvbnRleHQtPmhkX3RhYmxlLCBuZXdfZW50LCBtZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgbmdodHRwMl9oZF9lbnRyeV9mcmVlKG5ld19lbnQpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBuZXdfZW50KTsKKworICAgIHJldHVybiBydjsKKyAgfQorCisgIG5ld19lbnQtPnNlcSA9IGNvbnRleHQtPm5leHRfc2VxKys7CisgIG5ld19lbnQtPmhhc2ggPSBoYXNoOworCisgIGlmIChtYXApIHsKKyAgICBoZF9tYXBfaW5zZXJ0KG1hcCwgbmV3X2VudCk7CisgIH0KKworICBjb250ZXh0LT5oZF90YWJsZV9idWZzaXplICs9IHJvb207CisKKyAgcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3NpemVfdCBpbmRleDsKKyAgLyogTm9uemVybyBpZiBib3RoIG5hbWUgYW5kIHZhbHVlIGFyZSBtYXRjaGVkLiAqLworICBpbnQgbmFtZV92YWx1ZV9tYXRjaDsKK30gc2VhcmNoX3Jlc3VsdDsKKworc3RhdGljIHNlYXJjaF9yZXN1bHQgc2VhcmNoX3N0YXRpY190YWJsZShjb25zdCBuZ2h0dHAyX252ICpudiwgaW50MzJfdCB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVfb25seSkgeworICBzZWFyY2hfcmVzdWx0IHJlcyA9IHt0b2tlbiwgMH07CisgIGludCBpOworICBjb25zdCBuZ2h0dHAyX2hkX3N0YXRpY19lbnRyeSAqZW50OworCisgIGlmIChuYW1lX29ubHkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgZm9yIChpID0gdG9rZW47CisgICAgICAgaSA8PSBOR0hUVFAyX1RPS0VOX1dXV19BVVRIRU5USUNBVEUgJiYgc3RhdGljX3RhYmxlW2ldLnRva2VuID09IHRva2VuOworICAgICAgICsraSkgeworICAgIGVudCA9ICZzdGF0aWNfdGFibGVbaV07CisgICAgaWYgKGVudC0+dmFsdWUubGVuID09IG52LT52YWx1ZWxlbiAmJgorICAgICAgICBtZW1jbXAoZW50LT52YWx1ZS5iYXNlLCBudi0+dmFsdWUsIG52LT52YWx1ZWxlbikgPT0gMCkgeworICAgICAgcmVzLmluZGV4ID0gaTsKKyAgICAgIHJlcy5uYW1lX3ZhbHVlX21hdGNoID0gMTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzZWFyY2hfcmVzdWx0IHNlYXJjaF9oZF90YWJsZShuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnYsIGludDMyX3QgdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4aW5nX21vZGUsIG5naHR0cDJfaGRfbWFwICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCkgeworICBzZWFyY2hfcmVzdWx0IHJlcyA9IHstMSwgMH07CisgIGNvbnN0IG5naHR0cDJfaGRfZW50cnkgKmVudDsKKyAgaW50IGV4YWN0X21hdGNoOworICBpbnQgbmFtZV9vbmx5ID0gaW5kZXhpbmdfbW9kZSA9PSBOR0hUVFAyX0hEX05FVkVSX0lOREVYSU5HOworCisgIGV4YWN0X21hdGNoID0gMDsKKyAgZW50ID0gaGRfbWFwX2ZpbmQobWFwLCAmZXhhY3RfbWF0Y2gsIG52LCB0b2tlbiwgaGFzaCwgbmFtZV9vbmx5KTsKKworICBpZiAoIWV4YWN0X21hdGNoICYmIHRva2VuID49IDAgJiYgdG9rZW4gPD0gTkdIVFRQMl9UT0tFTl9XV1dfQVVUSEVOVElDQVRFKSB7CisgICAgcmV0dXJuIHNlYXJjaF9zdGF0aWNfdGFibGUobnYsIHRva2VuLCBuYW1lX29ubHkpOworICB9CisKKyAgaWYgKGVudCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIHJlcy5pbmRleCA9CisgICAgICAoc3NpemVfdCkoY29udGV4dC0+bmV4dF9zZXEgLSAxIC0gZW50LT5zZXEgKyBOR0hUVFAyX1NUQVRJQ19UQUJMRV9MRU5HVEgpOworICByZXMubmFtZV92YWx1ZV9tYXRjaCA9IGV4YWN0X21hdGNoOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGhkX2NvbnRleHRfc2hyaW5rX3RhYmxlX3NpemUobmdodHRwMl9oZF9jb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX21hcCAqbWFwKSB7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gY29udGV4dC0+bWVtOworCisgIHdoaWxlIChjb250ZXh0LT5oZF90YWJsZV9idWZzaXplID4gY29udGV4dC0+aGRfdGFibGVfYnVmc2l6ZV9tYXggJiYKKyAgICAgICAgIGNvbnRleHQtPmhkX3RhYmxlLmxlbiA+IDApIHsKKyAgICBzaXplX3QgaWR4ID0gY29udGV4dC0+aGRfdGFibGUubGVuIC0gMTsKKyAgICBuZ2h0dHAyX2hkX2VudHJ5ICplbnQgPSBoZF9yaW5nYnVmX2dldCgmY29udGV4dC0+aGRfdGFibGUsIGlkeCk7CisgICAgY29udGV4dC0+aGRfdGFibGVfYnVmc2l6ZSAtPQorICAgICAgICBlbnRyeV9yb29tKGVudC0+bnYubmFtZS0+bGVuLCBlbnQtPm52LnZhbHVlLT5sZW4pOworICAgIGhkX3JpbmdidWZfcG9wX2JhY2soJmNvbnRleHQtPmhkX3RhYmxlKTsKKyAgICBpZiAobWFwKSB7CisgICAgICBoZF9tYXBfcmVtb3ZlKG1hcCwgZW50KTsKKyAgICB9CisKKyAgICBuZ2h0dHAyX2hkX2VudHJ5X2ZyZWUoZW50KTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgZW50KTsKKyAgfQorfQorCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX2NoYW5nZV90YWJsZV9zaXplKAorICAgIG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLCBzaXplX3Qgc2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZSkgeworICBzaXplX3QgbmV4dF9idWZzaXplID0gbmdodHRwMl9taW4oc2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmxhdGVyLT5kZWZsYXRlX2hkX3RhYmxlX2J1ZnNpemVfbWF4KTsKKworICBkZWZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemVfbWF4ID0gbmV4dF9idWZzaXplOworCisgIGRlZmxhdGVyLT5taW5faGRfdGFibGVfYnVmc2l6ZV9tYXggPQorICAgICAgbmdodHRwMl9taW4oZGVmbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCwgbmV4dF9idWZzaXplKTsKKworICBkZWZsYXRlci0+bm90aWZ5X3RhYmxlX3NpemVfY2hhbmdlID0gMTsKKworICBoZF9jb250ZXh0X3Nocmlua190YWJsZV9zaXplKCZkZWZsYXRlci0+Y3R4LCAmZGVmbGF0ZXItPm1hcCk7CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9oZF9pbmZsYXRlX2NoYW5nZV90YWJsZV9zaXplKAorICAgIG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLCBzaXplX3Qgc2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZSkgeworICBzd2l0Y2ggKGluZmxhdGVyLT5zdGF0ZSkgeworICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfRVhQRUNUX1RBQkxFX1NJWkU6CisgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9JTkZMQVRFX1NUQVJUOgorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFOworICB9CisKKyAgLyogSXQgc2VlbXMgdGhhdCBlbmNvZGVyIGlzIG5vdCByZXF1aXJlZCB0byBzZW5kIGR5bmFtaWMgdGFibGUgc2l6ZQorICAgICB1cGRhdGUgaWYgdGhlIHRhYmxlIHNpemUgaXMgbm90IGNoYW5nZWQgYWZ0ZXIgYXBwbHlpbmcKKyAgICAgU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkUuICBSRkMgNzU0MSBpcyBhbWJpZ3VvdXMgaGVyZSwgYnV0IHRoaXMKKyAgICAgaXMgdGhlIGludGVudGlvbiBvZiB0aGUgZWRpdG9yLiAgSWYgbmV3IG1heGltdW0gdGFibGUgc2l6ZSBpcworICAgICBzdHJpY3RseSBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgbmVnb3RpYXRlZCBtYXhpbXVtIHNpemUsCisgICAgIGVuY29kZXIgbXVzdCBzZW5kIGR5bmFtaWMgdGFibGUgc2l6ZSB1cGRhdGUuICBJbiBvdGhlciBjYXNlcywgd2UKKyAgICAgY2Fubm90IGV4cGVjdCBpdCB0byBkbyBzby4gKi8KKyAgaWYgKGluZmxhdGVyLT5jdHguaGRfdGFibGVfYnVmc2l6ZV9tYXggPiBzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplKSB7CisgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9FWFBFQ1RfVEFCTEVfU0laRTsKKyAgICAvKiBSZW1lbWJlciBtaW5pbXVtIHZhbHVlLCBhbmQgdmFsaWRhdGUgdGhhdCBlbmNvZGVyIHNlbmRzIHRoZQorICAgICAgIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGlzLiAqLworICAgIGluZmxhdGVyLT5taW5faGRfdGFibGVfYnVmc2l6ZV9tYXggPSBzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplOworICB9CisKKyAgaW5mbGF0ZXItPnNldHRpbmdzX2hkX3RhYmxlX2J1ZnNpemVfbWF4ID0gc2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZTsKKworICBpbmZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemVfbWF4ID0gc2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZTsKKworICBoZF9jb250ZXh0X3Nocmlua190YWJsZV9zaXplKCZpbmZsYXRlci0+Y3R4LCBOVUxMKTsKKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgSU5ERVhfUkFOR0VfVkFMSUQoY29udGV4dCwgaWR4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoaWR4KSA8IChjb250ZXh0KS0+aGRfdGFibGUubGVuICsgTkdIVFRQMl9TVEFUSUNfVEFCTEVfTEVOR1RIKQorCitzdGF0aWMgc2l6ZV90IGdldF9tYXhfaW5kZXgobmdodHRwMl9oZF9jb250ZXh0ICpjb250ZXh0KSB7CisgIHJldHVybiBjb250ZXh0LT5oZF90YWJsZS5sZW4gKyBOR0hUVFAyX1NUQVRJQ19UQUJMRV9MRU5HVEg7Cit9CisKK25naHR0cDJfaGRfbnYgbmdodHRwMl9oZF90YWJsZV9nZXQobmdodHRwMl9oZF9jb250ZXh0ICpjb250ZXh0LCBzaXplX3QgaWR4KSB7CisgIGFzc2VydChJTkRFWF9SQU5HRV9WQUxJRChjb250ZXh0LCBpZHgpKTsKKyAgaWYgKGlkeCA+PSBOR0hUVFAyX1NUQVRJQ19UQUJMRV9MRU5HVEgpIHsKKyAgICByZXR1cm4gaGRfcmluZ2J1Zl9nZXQoJmNvbnRleHQtPmhkX3RhYmxlLCBpZHggLSBOR0hUVFAyX1NUQVRJQ19UQUJMRV9MRU5HVEgpCisgICAgICAgIC0+bnY7CisgIH0gZWxzZSB7CisgICAgY29uc3QgbmdodHRwMl9oZF9zdGF0aWNfZW50cnkgKmVudCA9ICZzdGF0aWNfdGFibGVbaWR4XTsKKyAgICBuZ2h0dHAyX2hkX252IG52ID0geyhuZ2h0dHAyX3JjYnVmICopJmVudC0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChuZ2h0dHAyX3JjYnVmICopJmVudC0+dmFsdWUsIGVudC0+dG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX05WX0ZMQUdfTk9ORX07CisgICAgcmV0dXJuIG52OworICB9Cit9CisKK3N0YXRpYyBjb25zdCBuZ2h0dHAyX252ICpuZ2h0dHAyX2hkX3RhYmxlX2dldDIobmdodHRwMl9oZF9jb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWR4KSB7CisgIGFzc2VydChJTkRFWF9SQU5HRV9WQUxJRChjb250ZXh0LCBpZHgpKTsKKyAgaWYgKGlkeCA+PSBOR0hUVFAyX1NUQVRJQ19UQUJMRV9MRU5HVEgpIHsKKyAgICByZXR1cm4gJmhkX3JpbmdidWZfZ2V0KCZjb250ZXh0LT5oZF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCAtIE5HSFRUUDJfU1RBVElDX1RBQkxFX0xFTkdUSCkKKyAgICAgICAgICAgICAgICAtPmNudjsKKyAgfQorCisgIHJldHVybiAmc3RhdGljX3RhYmxlW2lkeF0uY252OworfQorCitzdGF0aWMgaW50IGhkX2RlZmxhdGVfZGVjaWRlX2luZGV4aW5nKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudiwgaW50MzJfdCB0b2tlbikgeworICBpZiAodG9rZW4gPT0gTkdIVFRQMl9UT0tFTl9fUEFUSCB8fCB0b2tlbiA9PSBOR0hUVFAyX1RPS0VOX0FHRSB8fAorICAgICAgdG9rZW4gPT0gTkdIVFRQMl9UT0tFTl9DT05URU5UX0xFTkdUSCB8fCB0b2tlbiA9PSBOR0hUVFAyX1RPS0VOX0VUQUcgfHwKKyAgICAgIHRva2VuID09IE5HSFRUUDJfVE9LRU5fSUZfTU9ESUZJRURfU0lOQ0UgfHwKKyAgICAgIHRva2VuID09IE5HSFRUUDJfVE9LRU5fSUZfTk9ORV9NQVRDSCB8fCB0b2tlbiA9PSBOR0hUVFAyX1RPS0VOX0xPQ0FUSU9OIHx8CisgICAgICB0b2tlbiA9PSBOR0hUVFAyX1RPS0VOX1NFVF9DT09LSUUgfHwKKyAgICAgIGVudHJ5X3Jvb20obnYtPm5hbWVsZW4sIG52LT52YWx1ZWxlbikgPgorICAgICAgICAgIGRlZmxhdGVyLT5jdHguaGRfdGFibGVfYnVmc2l6ZV9tYXggKiAzIC8gNCkgeworICAgIHJldHVybiBOR0hUVFAyX0hEX1dJVEhPVVRfSU5ERVhJTkc7CisgIH0KKworICByZXR1cm4gTkdIVFRQMl9IRF9XSVRIX0lOREVYSU5HOworfQorCitzdGF0aWMgaW50IGRlZmxhdGVfbnYobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsIG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudikgeworICBpbnQgcnY7CisgIHNlYXJjaF9yZXN1bHQgcmVzOworICBzc2l6ZV90IGlkeDsKKyAgaW50IGluZGV4aW5nX21vZGU7CisgIGludDMyX3QgdG9rZW47CisgIG5naHR0cDJfbWVtICptZW07CisgIHVpbnQzMl90IGhhc2ggPSAwOworCisgIERFQlVHRigiZGVmbGF0ZWhkOiBkZWZsYXRpbmcgJS4qczogJS4qc1xuIiwgKGludCludi0+bmFtZWxlbiwgbnYtPm5hbWUsCisgICAgICAgICAoaW50KW52LT52YWx1ZWxlbiwgbnYtPnZhbHVlKTsKKworICBtZW0gPSBkZWZsYXRlci0+Y3R4Lm1lbTsKKworICB0b2tlbiA9IGxvb2t1cF90b2tlbihudi0+bmFtZSwgbnYtPm5hbWVsZW4pOworICBpZiAodG9rZW4gPT0gLTEpIHsKKyAgICBoYXNoID0gbmFtZV9oYXNoKG52KTsKKyAgfSBlbHNlIGlmICh0b2tlbiA8PSBOR0hUVFAyX1RPS0VOX1dXV19BVVRIRU5USUNBVEUpIHsKKyAgICBoYXNoID0gc3RhdGljX3RhYmxlW3Rva2VuXS5oYXNoOworICB9CisKKyAgLyogRG9uJ3QgaW5kZXggYXV0aG9yaXphdGlvbiBoZWFkZXIgZmllbGQgc2luY2UgaXQgbWF5IGNvbnRhaW4gbG93CisgICAgIGVudHJvcHkgc2VjcmV0IGRhdGEgKGUuZy4sIGlkL3Bhc3N3b3JkKS4gIEFsc28gY29va2llIGhlYWRlcgorICAgICBmaWVsZCB3aXRoIGxlc3MgdGhhbiAyMCBieXRlcyB2YWx1ZSBpcyBhbHNvIG5ldmVyIGluZGV4ZWQuICBUaGlzCisgICAgIGlzIHRoZSBzYW1lIGNyaXRlcmlhIHVzZWQgaW4gRmlyZWZveCBjb2RlYmFzZS4gKi8KKyAgaW5kZXhpbmdfbW9kZSA9CisgICAgICB0b2tlbiA9PSBOR0hUVFAyX1RPS0VOX0FVVEhPUklaQVRJT04gfHwKKyAgICAgICAgICAgICAgKHRva2VuID09IE5HSFRUUDJfVE9LRU5fQ09PS0lFICYmIG52LT52YWx1ZWxlbiA8IDIwKSB8fAorICAgICAgICAgICAgICAobnYtPmZsYWdzICYgTkdIVFRQMl9OVl9GTEFHX05PX0lOREVYKQorICAgICAgICAgID8gTkdIVFRQMl9IRF9ORVZFUl9JTkRFWElORworICAgICAgICAgIDogaGRfZGVmbGF0ZV9kZWNpZGVfaW5kZXhpbmcoZGVmbGF0ZXIsIG52LCB0b2tlbik7CisKKyAgcmVzID0gc2VhcmNoX2hkX3RhYmxlKCZkZWZsYXRlci0+Y3R4LCBudiwgdG9rZW4sIGluZGV4aW5nX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAmZGVmbGF0ZXItPm1hcCwgaGFzaCk7CisKKyAgaWR4ID0gcmVzLmluZGV4OworCisgIGlmIChyZXMubmFtZV92YWx1ZV9tYXRjaCkgeworCisgICAgREVCVUdGKCJkZWZsYXRlaGQ6IG5hbWUvdmFsdWUgbWF0Y2ggaW5kZXg9JXpkXG4iLCBpZHgpOworCisgICAgcnYgPSBlbWl0X2luZGV4ZWRfYmxvY2soYnVmcywgKHNpemVfdClpZHgpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAocmVzLmluZGV4ICE9IC0xKSB7CisgICAgREVCVUdGKCJkZWZsYXRlaGQ6IG5hbWUgbWF0Y2ggaW5kZXg9JXpkXG4iLCByZXMuaW5kZXgpOworICB9CisKKyAgaWYgKGluZGV4aW5nX21vZGUgPT0gTkdIVFRQMl9IRF9XSVRIX0lOREVYSU5HKSB7CisgICAgbmdodHRwMl9oZF9udiBoZF9udjsKKworICAgIGlmIChpZHggIT0gLTEpIHsKKyAgICAgIGhkX252Lm5hbWUgPSBuZ2h0dHAyX2hkX3RhYmxlX2dldCgmZGVmbGF0ZXItPmN0eCwgKHNpemVfdClpZHgpLm5hbWU7CisgICAgICBuZ2h0dHAyX3JjYnVmX2luY3JlZihoZF9udi5uYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgcnYgPSBuZ2h0dHAyX3JjYnVmX25ldzIoJmhkX252Lm5hbWUsIG52LT5uYW1lLCBudi0+bmFtZWxlbiwgbWVtKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfcmNidWZfbmV3MigmaGRfbnYudmFsdWUsIG52LT52YWx1ZSwgbnYtPnZhbHVlbGVuLCBtZW0pOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIG5naHR0cDJfcmNidWZfZGVjcmVmKGhkX252Lm5hbWUpOworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIGhkX252LnRva2VuID0gdG9rZW47CisgICAgaGRfbnYuZmxhZ3MgPSBOR0hUVFAyX05WX0ZMQUdfTk9ORTsKKworICAgIHJ2ID0gYWRkX2hkX3RhYmxlX2luY3JlbWVudGFsKCZkZWZsYXRlci0+Y3R4LCAmaGRfbnYsICZkZWZsYXRlci0+bWFwLCBoYXNoKTsKKworICAgIG5naHR0cDJfcmNidWZfZGVjcmVmKGhkX252LnZhbHVlKTsKKyAgICBuZ2h0dHAyX3JjYnVmX2RlY3JlZihoZF9udi5uYW1lKTsKKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgICAgfQorICB9CisgIGlmIChpZHggPT0gLTEpIHsKKyAgICBydiA9IGVtaXRfbmV3bmFtZV9ibG9jayhidWZzLCBudiwgaW5kZXhpbmdfbW9kZSk7CisgIH0gZWxzZSB7CisgICAgcnYgPSBlbWl0X2luZG5hbWVfYmxvY2soYnVmcywgKHNpemVfdClpZHgsIG52LCBpbmRleGluZ19tb2RlKTsKKyAgfQorICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX2hkX2J1ZnMobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9idWZzICpidWZzLCBjb25zdCBuZ2h0dHAyX252ICpudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4pIHsKKyAgc2l6ZV90IGk7CisgIGludCBydiA9IDA7CisKKyAgaWYgKGRlZmxhdGVyLT5jdHguYmFkKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgaWYgKGRlZmxhdGVyLT5ub3RpZnlfdGFibGVfc2l6ZV9jaGFuZ2UpIHsKKyAgICBzaXplX3QgbWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4OworCisgICAgbWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4ID0gZGVmbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heDsKKworICAgIGRlZmxhdGVyLT5ub3RpZnlfdGFibGVfc2l6ZV9jaGFuZ2UgPSAwOworICAgIGRlZmxhdGVyLT5taW5faGRfdGFibGVfYnVmc2l6ZV9tYXggPSBVSU5UMzJfTUFYOworCisgICAgaWYgKGRlZmxhdGVyLT5jdHguaGRfdGFibGVfYnVmc2l6ZV9tYXggPiBtaW5faGRfdGFibGVfYnVmc2l6ZV9tYXgpIHsKKworICAgICAgcnYgPSBlbWl0X3RhYmxlX3NpemUoYnVmcywgbWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4KTsKKworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgIH0KKworICAgIHJ2ID0gZW1pdF90YWJsZV9zaXplKGJ1ZnMsIGRlZmxhdGVyLT5jdHguaGRfdGFibGVfYnVmc2l6ZV9tYXgpOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbnZsZW47ICsraSkgeworICAgIHJ2ID0gZGVmbGF0ZV9udihkZWZsYXRlciwgYnVmcywgJm52W2ldKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgfQorCisgIERFQlVHRigiZGVmbGF0ZWhkOiBhbGwgaW5wdXQgbmFtZS92YWx1ZSBwYWlycyB3ZXJlIGRlZmxhdGVkXG4iKTsKKworICByZXR1cm4gMDsKK2ZhaWw6CisgIERFQlVHRigiZGVmbGF0ZWhkOiBlcnJvciByZXR1cm4gJWRcbiIsIHJ2KTsKKworICBkZWZsYXRlci0+Y3R4LmJhZCA9IDE7CisgIHJldHVybiBydjsKK30KKworc3NpemVfdCBuZ2h0dHAyX2hkX2RlZmxhdGVfaGQobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsIHVpbnQ4X3QgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZsZW4sIGNvbnN0IG5naHR0cDJfbnYgKm52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG52bGVuKSB7CisgIG5naHR0cDJfYnVmcyBidWZzOworICBpbnQgcnY7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gZGVmbGF0ZXItPmN0eC5tZW07CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfd3JhcF9pbml0KCZidWZzLCBidWYsIGJ1ZmxlbiwgbWVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJ2ID0gbmdodHRwMl9oZF9kZWZsYXRlX2hkX2J1ZnMoZGVmbGF0ZXIsICZidWZzLCBudiwgbnZsZW4pOworCisgIGJ1ZmxlbiA9IG5naHR0cDJfYnVmc19sZW4oJmJ1ZnMpOworCisgIG5naHR0cDJfYnVmc193cmFwX2ZyZWUoJmJ1ZnMpOworCisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5TVUZGX0JVRlNJWkU7CisgIH0KKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAoc3NpemVfdClidWZsZW47Cit9CisKK3NzaXplX3QgbmdodHRwMl9oZF9kZWZsYXRlX2hkX3ZlYyhuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ZlYyAqdmVjLCBzaXplX3QgdmVjbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52LCBzaXplX3QgbnZsZW4pIHsKKyAgbmdodHRwMl9idWZzIGJ1ZnM7CisgIGludCBydjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgc2l6ZV90IGJ1ZmxlbjsKKworICBtZW0gPSBkZWZsYXRlci0+Y3R4Lm1lbTsKKworICBydiA9IG5naHR0cDJfYnVmc193cmFwX2luaXQyKCZidWZzLCB2ZWMsIHZlY2xlbiwgbWVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJ2ID0gbmdodHRwMl9oZF9kZWZsYXRlX2hkX2J1ZnMoZGVmbGF0ZXIsICZidWZzLCBudiwgbnZsZW4pOworCisgIGJ1ZmxlbiA9IG5naHR0cDJfYnVmc19sZW4oJmJ1ZnMpOworCisgIG5naHR0cDJfYnVmc193cmFwX2ZyZWUoJmJ1ZnMpOworCisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5TVUZGX0JVRlNJWkU7CisgIH0KKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAoc3NpemVfdClidWZsZW47Cit9CisKK3NpemVfdCBuZ2h0dHAyX2hkX2RlZmxhdGVfYm91bmQobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKSB7CisgIHNpemVfdCBuID0gMDsKKyAgc2l6ZV90IGk7CisgICh2b2lkKWRlZmxhdGVyOworCisgIC8qIFBvc3NpYmxlIE1heGltdW0gSGVhZGVyIFRhYmxlIFNpemUgQ2hhbmdlLiAgRW5jb2RpbmcgKDF1IDw8IDMxKSAtCisgICAgIDEgdXNpbmcgNCBiaXQgcHJlZml4IHJlcXVpcmVzIDYgYnl0ZXMuICBXZSBtYXkgZW1pdCB0aGlzIGF0IG1vc3QKKyAgICAgdHdpY2UuICovCisgIG4gKz0gMTI7CisKKyAgLyogVXNlIExpdGVyYWwgSGVhZGVyIEZpZWxkIHdpdGhvdXQgaW5kZXhpbmcgLSBOZXcgTmFtZSwgc2luY2UgaXQgaXMKKyAgICAgbW9zdCBzcGFjZSBjb25zdW1pbmcgZm9ybWF0LiAgQWxzbyB3ZSBjaG9vc2UgdGhlIGxlc3Mgb25lIGJldHdlZW4KKyAgICAgbm9uLWh1ZmZtYW4gYW5kIGh1ZmZtYW4sIHNvIHVzaW5nIGxpdGVyYWwgYnl0ZSBjb3VudCBpcworICAgICBzdWZmaWNpZW50IGZvciB1cHBlciBib3VuZC4KKworICAgICBFbmNvZGluZyAoMXUgPDwgMzEpIC0gMSB1c2luZyA3IGJpdCBwcmVmaXggcmVxdWlyZXMgNiBieXRlcy4gIFdlCisgICAgIG5lZWQgMiBvZiB0aGlzIGZvciB8bnZsZW58IGhlYWRlciBmaWVsZHMuICovCisgIG4gKz0gNiAqIDIgKiBudmxlbjsKKworICBmb3IgKGkgPSAwOyBpIDwgbnZsZW47ICsraSkgeworICAgIG4gKz0gbnZhW2ldLm5hbWVsZW4gKyBudmFbaV0udmFsdWVsZW47CisgIH0KKworICByZXR1cm4gbjsKK30KKworaW50IG5naHR0cDJfaGRfZGVmbGF0ZV9uZXcobmdodHRwMl9oZF9kZWZsYXRlciAqKmRlZmxhdGVyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkZWZsYXRlX2hkX3RhYmxlX2J1ZnNpemVfbWF4KSB7CisgIHJldHVybiBuZ2h0dHAyX2hkX2RlZmxhdGVfbmV3MihkZWZsYXRlcl9wdHIsIGRlZmxhdGVfaGRfdGFibGVfYnVmc2l6ZV9tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworaW50IG5naHR0cDJfaGRfZGVmbGF0ZV9uZXcyKG5naHR0cDJfaGRfZGVmbGF0ZXIgKipkZWZsYXRlcl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlZmxhdGVfaGRfdGFibGVfYnVmc2l6ZV9tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyOworCisgIGlmIChtZW0gPT0gTlVMTCkgeworICAgIG1lbSA9IG5naHR0cDJfbWVtX2RlZmF1bHQoKTsKKyAgfQorCisgIGRlZmxhdGVyID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfaGRfZGVmbGF0ZXIpKTsKKworICBpZiAoZGVmbGF0ZXIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIHJ2ID0gbmdodHRwMl9oZF9kZWZsYXRlX2luaXQyKGRlZmxhdGVyLCBkZWZsYXRlX2hkX3RhYmxlX2J1ZnNpemVfbWF4LCBtZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGRlZmxhdGVyKTsKKworICAgIHJldHVybiBydjsKKyAgfQorCisgICpkZWZsYXRlcl9wdHIgPSBkZWZsYXRlcjsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2hkX2RlZmxhdGVfZGVsKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKSB7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gZGVmbGF0ZXItPmN0eC5tZW07CisKKyAgbmdodHRwMl9oZF9kZWZsYXRlX2ZyZWUoZGVmbGF0ZXIpOworCisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBkZWZsYXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhkX2luZmxhdGVfc2V0X2h1ZmZtYW5fZW5jb2RlZChuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbikgeworICBpbmZsYXRlci0+aHVmZm1hbl9lbmNvZGVkID0gKCppbiAmICgxIDw8IDcpKSAhPSAwOworfQorCisvKgorICogRGVjb2RlcyB0aGUgaW50ZWdlciBmcm9tIHRoZSByYW5nZSBbaW4sIGxhc3QpLiAgVGhlIHJlc3VsdCBpcworICogYXNzaWduZWQgdG8gfGluZmxhdGVyLT5sZWZ0fC4gIElmIHRoZSB8aW5mbGF0ZXItPmxlZnR8IGlzIDAsIHRoZW4KKyAqIGl0IHBlcmZvcm1zIHZhcmlhYmxlIGludGVnZXIgZGVjb2RpbmcgZnJvbSBzY3JhdGNoLiBPdGhlcndpc2UsIGl0CisgKiB1c2VzIHRoZSB8aW5mbGF0ZXItPmxlZnR8IGFzIHRoZSBpbml0aWFsIHZhbHVlIGFuZCBjb250aW51ZXMgdG8KKyAqIGRlY29kZSBhc3N1bWluZyB0aGF0IFtpbiwgbGFzdCkgYmVnaW5zIHdpdGggaW50ZXJtZWRpYXJ5IHNlcXVlbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaWYgaXQgc3VjY2VlZHMsIG9yCisgKiBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICBJbnRlZ2VyIGRlY29kaW5nIGZhaWxlZAorICovCitzdGF0aWMgc3NpemVfdCBoZF9pbmZsYXRlX3JlYWRfbGVuKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLCBpbnQgKnJmaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluLCBjb25zdCB1aW50OF90ICpsYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHJlZml4LCBzaXplX3QgbWF4bGVuKSB7CisgIHNzaXplX3QgcnY7CisgIHVpbnQzMl90IG91dDsKKworICAqcmZpbiA9IDA7CisKKyAgcnYgPSBkZWNvZGVfbGVuZ3RoKCZvdXQsICZpbmZsYXRlci0+c2hpZnQsIHJmaW4sICh1aW50MzJfdClpbmZsYXRlci0+bGVmdCwKKyAgICAgICAgICAgICAgICAgICAgIGluZmxhdGVyLT5zaGlmdCwgaW4sIGxhc3QsIHByZWZpeCk7CisKKyAgaWYgKHJ2ID09IC0xKSB7CisgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGludGVnZXIgZGVjb2RpbmcgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgIH0KKworICBpZiAob3V0ID4gbWF4bGVuKSB7CisgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGludGVnZXIgZXhjZWVkZWQgdGhlIG1heGltdW0gdmFsdWUgJXp1XG4iLCBtYXhsZW4pOworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIGluZmxhdGVyLT5sZWZ0ID0gb3V0OworCisgIERFQlVHRigiaW5mbGF0ZWhkOiBkZWNvZGVkIGludGVnZXIgaXMgJXVcbiIsIG91dCk7CisKKyAgcmV0dXJuIHJ2OworfQorCisvKgorICogUmVhZHMgfGluZmxhdGVyLT5sZWZ0fCBieXRlcyBmcm9tIHRoZSByYW5nZSBbaW4sIGxhc3QpIGFuZCBwZXJmb3JtcworICogaHVmZm1hbiBkZWNvZGluZyBhZ2FpbnN0IHRoZW0gYW5kIHB1c2hlcyB0aGUgcmVzdWx0IGludG8gdGhlCisgKiB8YnVmZmVyfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGlmIGl0IHN1Y2NlZWRzLCBvcgorICogb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgT3V0IG9mIG1lbW9yeQorICogTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAKKyAqICAgSHVmZm1hbiBkZWNvZGluZyBmYWlsZWQKKyAqLworc3RhdGljIHNzaXplX3QgaGRfaW5mbGF0ZV9yZWFkX2h1ZmYobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2J1ZiAqYnVmLCBjb25zdCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmxhc3QpIHsKKyAgc3NpemVfdCByZWFkbGVuOworICBpbnQgZmluID0gMDsKKyAgaWYgKChzaXplX3QpKGxhc3QgLSBpbikgPj0gaW5mbGF0ZXItPmxlZnQpIHsKKyAgICBsYXN0ID0gaW4gKyBpbmZsYXRlci0+bGVmdDsKKyAgICBmaW4gPSAxOworICB9CisgIHJlYWRsZW4gPSBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlKCZpbmZsYXRlci0+aHVmZl9kZWNvZGVfY3R4LCBidWYsIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KShsYXN0IC0gaW4pLCBmaW4pOworCisgIGlmIChyZWFkbGVuIDwgMCkgeworICAgIERFQlVHRigiaW5mbGF0ZWhkOiBodWZmbWFuIGRlY29kaW5nIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIHJlYWRsZW47CisgIH0KKyAgaWYgKG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfZmFpbHVyZV9zdGF0ZSgmaW5mbGF0ZXItPmh1ZmZfZGVjb2RlX2N0eCkpIHsKKyAgICBERUJVR0YoImluZmxhdGVoZDogaHVmZm1hbiBkZWNvZGluZyBmYWlsZWRcbiIpOworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIGluZmxhdGVyLT5sZWZ0IC09IChzaXplX3QpcmVhZGxlbjsKKyAgcmV0dXJuIHJlYWRsZW47Cit9CisKKy8qCisgKiBSZWFkcyB8aW5mbGF0ZXItPmxlZnR8IGJ5dGVzIGZyb20gdGhlIHJhbmdlIFtpbiwgbGFzdCkgYW5kIGNvcGllcworICogdGhlbSBpbnRvIHRoZSB8YnVmZmVyfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGlmIGl0IHN1Y2NlZWRzLCBvcgorICogb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgT3V0IG9mIG1lbW9yeQorICogTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAKKyAqICAgSGVhZGVyIGRlY29tcHJlc3Npb24gZmFpbGVkCisgKi8KK3N0YXRpYyBzc2l6ZV90IGhkX2luZmxhdGVfcmVhZChuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwgbmdodHRwMl9idWYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbiwgY29uc3QgdWludDhfdCAqbGFzdCkgeworICBzaXplX3QgbGVuID0gbmdodHRwMl9taW4oKHNpemVfdCkobGFzdCAtIGluKSwgaW5mbGF0ZXItPmxlZnQpOworCisgIGJ1Zi0+bGFzdCA9IG5naHR0cDJfY3B5bWVtKGJ1Zi0+bGFzdCwgaW4sIGxlbik7CisKKyAgaW5mbGF0ZXItPmxlZnQgLT0gbGVuOworICByZXR1cm4gKHNzaXplX3QpbGVuOworfQorCisvKgorICogRmluYWxpemUgaW5kZXhlZCBoZWFkZXIgcmVwcmVzZW50YXRpb24gcmVjZXB0aW9uLiAgVGhlIHJlZmVyZW5jZWQKKyAqIGhlYWRlciBpcyBhbHdheXMgZW1pdHRlZCwgYW5kIHwqbnZfb3V0fCBpcyBmaWxsZWQgd2l0aCB0aGF0IHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBoZF9pbmZsYXRlX2NvbW1pdF9pbmRleGVkKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX252ICpudl9vdXQpIHsKKyAgbmdodHRwMl9oZF9udiBudiA9IG5naHR0cDJfaGRfdGFibGVfZ2V0KCZpbmZsYXRlci0+Y3R4LCBpbmZsYXRlci0+aW5kZXgpOworCisgIGVtaXRfaGVhZGVyKG52X291dCwgJm52KTsKK30KKworLyoKKyAqIEZpbmFsaXplIGxpdGVyYWwgaGVhZGVyIHJlcHJlc2VudGF0aW9uIC0gbmV3IG5hbWUtIHJlY2VwdGlvbi4gSWYKKyAqIGhlYWRlciBpcyBlbWl0dGVkLCB8Km52X291dHwgaXMgZmlsbGVkIHdpdGggdGhhdCB2YWx1ZSBhbmQgMCBpcworICogcmV0dXJuZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICBPdXQgb2YgbWVtb3J5CisgKi8KK3N0YXRpYyBpbnQgaGRfaW5mbGF0ZV9jb21taXRfbmV3bmFtZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX252ICpudl9vdXQpIHsKKyAgbmdodHRwMl9oZF9udiBudjsKKyAgaW50IHJ2OworCisgIGlmIChpbmZsYXRlci0+bm9faW5kZXgpIHsKKyAgICBudi5mbGFncyA9IE5HSFRUUDJfTlZfRkxBR19OT19JTkRFWDsKKyAgfSBlbHNlIHsKKyAgICBudi5mbGFncyA9IE5HSFRUUDJfTlZfRkxBR19OT05FOworICB9CisKKyAgbnYubmFtZSA9IGluZmxhdGVyLT5uYW1lcmNidWY7CisgIG52LnZhbHVlID0gaW5mbGF0ZXItPnZhbHVlcmNidWY7CisgIG52LnRva2VuID0gbG9va3VwX3Rva2VuKGluZmxhdGVyLT5uYW1lcmNidWYtPmJhc2UsIGluZmxhdGVyLT5uYW1lcmNidWYtPmxlbik7CisKKyAgaWYgKGluZmxhdGVyLT5pbmRleF9yZXF1aXJlZCkgeworICAgIHJ2ID0gYWRkX2hkX3RhYmxlX2luY3JlbWVudGFsKCZpbmZsYXRlci0+Y3R4LCAmbnYsIE5VTEwsIDApOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICBlbWl0X2hlYWRlcihudl9vdXQsICZudik7CisKKyAgaW5mbGF0ZXItPm52X25hbWVfa2VlcCA9IG52Lm5hbWU7CisgIGluZmxhdGVyLT5udl92YWx1ZV9rZWVwID0gbnYudmFsdWU7CisKKyAgaW5mbGF0ZXItPm5hbWVyY2J1ZiA9IE5VTEw7CisgIGluZmxhdGVyLT52YWx1ZXJjYnVmID0gTlVMTDsKKworICByZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbmFsaXplIGxpdGVyYWwgaGVhZGVyIHJlcHJlc2VudGF0aW9uIC0gaW5kZXhlZCBuYW1lLQorICogcmVjZXB0aW9uLiBJZiBoZWFkZXIgaXMgZW1pdHRlZCwgfCpudl9vdXR8IGlzIGZpbGxlZCB3aXRoIHRoYXQKKyAqIHZhbHVlIGFuZCAwIGlzIHJldHVybmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgT3V0IG9mIG1lbW9yeQorICovCitzdGF0aWMgaW50IGhkX2luZmxhdGVfY29tbWl0X2luZG5hbWUobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9oZF9udiAqbnZfb3V0KSB7CisgIG5naHR0cDJfaGRfbnYgbnY7CisgIGludCBydjsKKworICBudiA9IG5naHR0cDJfaGRfdGFibGVfZ2V0KCZpbmZsYXRlci0+Y3R4LCBpbmZsYXRlci0+aW5kZXgpOworCisgIGlmIChpbmZsYXRlci0+bm9faW5kZXgpIHsKKyAgICBudi5mbGFncyA9IE5HSFRUUDJfTlZfRkxBR19OT19JTkRFWDsKKyAgfSBlbHNlIHsKKyAgICBudi5mbGFncyA9IE5HSFRUUDJfTlZfRkxBR19OT05FOworICB9CisKKyAgbmdodHRwMl9yY2J1Zl9pbmNyZWYobnYubmFtZSk7CisKKyAgbnYudmFsdWUgPSBpbmZsYXRlci0+dmFsdWVyY2J1ZjsKKworICBpZiAoaW5mbGF0ZXItPmluZGV4X3JlcXVpcmVkKSB7CisgICAgcnYgPSBhZGRfaGRfdGFibGVfaW5jcmVtZW50YWwoJmluZmxhdGVyLT5jdHgsICZudiwgTlVMTCwgMCk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIG5naHR0cDJfcmNidWZfZGVjcmVmKG52Lm5hbWUpOworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgIH0KKyAgfQorCisgIGVtaXRfaGVhZGVyKG52X291dCwgJm52KTsKKworICBpbmZsYXRlci0+bnZfbmFtZV9rZWVwID0gbnYubmFtZTsKKyAgaW5mbGF0ZXItPm52X3ZhbHVlX2tlZXAgPSBudi52YWx1ZTsKKworICBpbmZsYXRlci0+dmFsdWVyY2J1ZiA9IE5VTEw7CisKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QgbmdodHRwMl9oZF9pbmZsYXRlX2hkKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLCBuZ2h0dHAyX252ICpudl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluZmxhdGVfZmxhZ3MsIHVpbnQ4X3QgKmluLCBzaXplX3QgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5fZmluYWwpIHsKKyAgcmV0dXJuIG5naHR0cDJfaGRfaW5mbGF0ZV9oZDIoaW5mbGF0ZXIsIG52X291dCwgaW5mbGF0ZV9mbGFncywgaW4sIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9maW5hbCk7Cit9CisKK3NzaXplX3QgbmdodHRwMl9oZF9pbmZsYXRlX2hkMihuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudl9vdXQsIGludCAqaW5mbGF0ZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbiwgc2l6ZV90IGlubGVuLCBpbnQgaW5fZmluYWwpIHsKKyAgc3NpemVfdCBydjsKKyAgbmdodHRwMl9oZF9udiBoZF9udjsKKworICBydiA9IG5naHR0cDJfaGRfaW5mbGF0ZV9oZF9udihpbmZsYXRlciwgJmhkX252LCBpbmZsYXRlX2ZsYWdzLCBpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2ZpbmFsKTsKKworICBpZiAocnYgPCAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgaWYgKCppbmZsYXRlX2ZsYWdzICYgTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVQpIHsKKyAgICBudl9vdXQtPm5hbWUgPSBoZF9udi5uYW1lLT5iYXNlOworICAgIG52X291dC0+bmFtZWxlbiA9IGhkX252Lm5hbWUtPmxlbjsKKworICAgIG52X291dC0+dmFsdWUgPSBoZF9udi52YWx1ZS0+YmFzZTsKKyAgICBudl9vdXQtPnZhbHVlbGVuID0gaGRfbnYudmFsdWUtPmxlbjsKKworICAgIG52X291dC0+ZmxhZ3MgPSBoZF9udi5mbGFnczsKKyAgfQorCisgIHJldHVybiBydjsKK30KKworc3NpemVfdCBuZ2h0dHAyX2hkX2luZmxhdGVfaGRfbnYobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX252ICpudl9vdXQsIGludCAqaW5mbGF0ZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluLCBzaXplX3QgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5fZmluYWwpIHsKKyAgc3NpemVfdCBydiA9IDA7CisgIGNvbnN0IHVpbnQ4X3QgKmZpcnN0ID0gaW47CisgIGNvbnN0IHVpbnQ4X3QgKmxhc3QgPSBpbiArIGlubGVuOworICBpbnQgcmZpbiA9IDA7CisgIGludCBidXN5ID0gMDsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSBpbmZsYXRlci0+Y3R4Lm1lbTsKKworICBpZiAoaW5mbGF0ZXItPmN0eC5iYWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgIH0KKworICBERUJVR0YoImluZmxhdGVoZDogc3RhcnQgc3RhdGU9JWRcbiIsIGluZmxhdGVyLT5zdGF0ZSk7CisgIGhkX2luZmxhdGVfa2VlcF9mcmVlKGluZmxhdGVyKTsKKyAgKmluZmxhdGVfZmxhZ3MgPSBOR0hUVFAyX0hEX0lORkxBVEVfTk9ORTsKKyAgZm9yICg7IGluICE9IGxhc3QgfHwgYnVzeTspIHsKKyAgICBidXN5ID0gMDsKKyAgICBzd2l0Y2ggKGluZmxhdGVyLT5zdGF0ZSkgeworICAgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9FWFBFQ1RfVEFCTEVfU0laRToKKyAgICAgIGlmICgoKmluICYgMHhlMHUpICE9IDB4MjB1KSB7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBoZWFkZXIgdGFibGUgc2l6ZSBjaGFuZ2Ugd2FzIGV4cGVjdGVkLCBidXQgc2F3ICIKKyAgICAgICAgICAgICAgICIweCUwMnggYXMgZmlyc3QgYnl0ZSIsCisgICAgICAgICAgICAgICAqaW4pOworICAgICAgICBydiA9IE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX0lORkxBVEVfU1RBUlQ6CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX09QQ09ERToKKyAgICAgIGlmICgoKmluICYgMHhlMHUpID09IDB4MjB1KSB7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBoZWFkZXIgdGFibGUgc2l6ZSBjaGFuZ2VcbiIpOworICAgICAgICBpZiAoaW5mbGF0ZXItPnN0YXRlID09IE5HSFRUUDJfSERfU1RBVEVfT1BDT0RFKSB7CisgICAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGhlYWRlciB0YWJsZSBzaXplIGNoYW5nZSBtdXN0IGFwcGVhciBhdCB0aGUgaGVhZCAiCisgICAgICAgICAgICAgICAgICJvZiBoZWFkZXIgYmxvY2tcbiIpOworICAgICAgICAgIHJ2ID0gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIGluZmxhdGVyLT5vcGNvZGUgPSBOR0hUVFAyX0hEX09QQ09ERV9JTkRFWEVEOworICAgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVEFCTEVfU0laRTsKKyAgICAgIH0gZWxzZSBpZiAoKmluICYgMHg4MHUpIHsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGluZGV4ZWQgcmVwclxuIik7CisgICAgICAgIGluZmxhdGVyLT5vcGNvZGUgPSBOR0hUVFAyX0hEX09QQ09ERV9JTkRFWEVEOworICAgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfSU5ERVg7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoKmluID09IDB4NDB1IHx8ICppbiA9PSAwIHx8ICppbiA9PSAweDEwdSkgeworICAgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBsaXRlcmFsIGhlYWRlciByZXByIC0gbmV3IG5hbWVcbiIpOworICAgICAgICAgIGluZmxhdGVyLT5vcGNvZGUgPSBOR0hUVFAyX0hEX09QQ09ERV9ORVdOQU1FOworICAgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9DSEVDS19OQU1FTEVOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBsaXRlcmFsIGhlYWRlciByZXByIC0gaW5kZXhlZCBuYW1lXG4iKTsKKyAgICAgICAgICBpbmZsYXRlci0+b3Bjb2RlID0gTkdIVFRQMl9IRF9PUENPREVfSU5ETkFNRTsKKyAgICAgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfSU5ERVg7CisgICAgICAgIH0KKyAgICAgICAgaW5mbGF0ZXItPmluZGV4X3JlcXVpcmVkID0gKCppbiAmIDB4NDApICE9IDA7CisgICAgICAgIGluZmxhdGVyLT5ub19pbmRleCA9ICgqaW4gJiAweGYwdSkgPT0gMHgxMHU7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBpbmRleGluZyByZXF1aXJlZD0lZCwgbm9faW5kZXg9JWRcbiIsCisgICAgICAgICAgICAgICBpbmZsYXRlci0+aW5kZXhfcmVxdWlyZWQsIGluZmxhdGVyLT5ub19pbmRleCk7CisgICAgICAgIGlmIChpbmZsYXRlci0+b3Bjb2RlID09IE5HSFRUUDJfSERfT1BDT0RFX05FV05BTUUpIHsKKyAgICAgICAgICArK2luOworICAgICAgICB9CisgICAgICB9CisgICAgICBpbmZsYXRlci0+bGVmdCA9IDA7CisgICAgICBpbmZsYXRlci0+c2hpZnQgPSAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVEFCTEVfU0laRToKKyAgICAgIHJmaW4gPSAwOworICAgICAgcnYgPSBoZF9pbmZsYXRlX3JlYWRfbGVuKAorICAgICAgICAgIGluZmxhdGVyLCAmcmZpbiwgaW4sIGxhc3QsIDUsCisgICAgICAgICAgbmdodHRwMl9taW4oaW5mbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCwKKyAgICAgICAgICAgICAgICAgICAgICBpbmZsYXRlci0+c2V0dGluZ3NfaGRfdGFibGVfYnVmc2l6ZV9tYXgpKTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgICAgaW4gKz0gcnY7CisgICAgICBpZiAoIXJmaW4pIHsKKyAgICAgICAgZ290byBhbG1vc3Rfb2s7CisgICAgICB9CisgICAgICBERUJVR0YoImluZmxhdGVoZDogdGFibGVfc2l6ZT0lenVcbiIsIGluZmxhdGVyLT5sZWZ0KTsKKyAgICAgIGluZmxhdGVyLT5taW5faGRfdGFibGVfYnVmc2l6ZV9tYXggPSBVSU5UMzJfTUFYOworICAgICAgaW5mbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplX21heCA9IGluZmxhdGVyLT5sZWZ0OworICAgICAgaGRfY29udGV4dF9zaHJpbmtfdGFibGVfc2l6ZSgmaW5mbGF0ZXItPmN0eCwgTlVMTCk7CisgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX0lORkxBVEVfU1RBUlQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9JTkRFWDogeworICAgICAgc2l6ZV90IHByZWZpeGxlbjsKKworICAgICAgaWYgKGluZmxhdGVyLT5vcGNvZGUgPT0gTkdIVFRQMl9IRF9PUENPREVfSU5ERVhFRCkgeworICAgICAgICBwcmVmaXhsZW4gPSA3OworICAgICAgfSBlbHNlIGlmIChpbmZsYXRlci0+aW5kZXhfcmVxdWlyZWQpIHsKKyAgICAgICAgcHJlZml4bGVuID0gNjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHByZWZpeGxlbiA9IDQ7CisgICAgICB9CisKKyAgICAgIHJmaW4gPSAwOworICAgICAgcnYgPSBoZF9pbmZsYXRlX3JlYWRfbGVuKGluZmxhdGVyLCAmcmZpbiwgaW4sIGxhc3QsIHByZWZpeGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbWF4X2luZGV4KCZpbmZsYXRlci0+Y3R4KSk7CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaW4gKz0gcnY7CisKKyAgICAgIGlmICghcmZpbikgeworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKworICAgICAgaWYgKGluZmxhdGVyLT5sZWZ0ID09IDApIHsKKyAgICAgICAgcnYgPSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBERUJVR0YoImluZmxhdGVoZDogaW5kZXg9JXp1XG4iLCBpbmZsYXRlci0+bGVmdCk7CisgICAgICBpZiAoaW5mbGF0ZXItPm9wY29kZSA9PSBOR0hUVFAyX0hEX09QQ09ERV9JTkRFWEVEKSB7CisgICAgICAgIGluZmxhdGVyLT5pbmRleCA9IGluZmxhdGVyLT5sZWZ0OworICAgICAgICAtLWluZmxhdGVyLT5pbmRleDsKKworICAgICAgICBoZF9pbmZsYXRlX2NvbW1pdF9pbmRleGVkKGluZmxhdGVyLCBudl9vdXQpOworCisgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfT1BDT0RFOworICAgICAgICAqaW5mbGF0ZV9mbGFncyB8PSBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVDsKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KShpbiAtIGZpcnN0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGluZmxhdGVyLT5pbmRleCA9IGluZmxhdGVyLT5sZWZ0OworICAgICAgICAtLWluZmxhdGVyLT5pbmRleDsKKworICAgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX0NIRUNLX1ZBTFVFTEVOOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX0NIRUNLX05BTUVMRU46CisgICAgICBoZF9pbmZsYXRlX3NldF9odWZmbWFuX2VuY29kZWQoaW5mbGF0ZXIsIGluKTsKKyAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9SRUFEX05BTUVMRU47CisgICAgICBpbmZsYXRlci0+bGVmdCA9IDA7CisgICAgICBpbmZsYXRlci0+c2hpZnQgPSAwOworICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGh1ZmZtYW4gZW5jb2RlZD0lZFxuIiwgaW5mbGF0ZXItPmh1ZmZtYW5fZW5jb2RlZCAhPSAwKTsKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9SRUFEX05BTUVMRU46CisgICAgICByZmluID0gMDsKKyAgICAgIHJ2ID0gaGRfaW5mbGF0ZV9yZWFkX2xlbihpbmZsYXRlciwgJnJmaW4sIGluLCBsYXN0LCA3LCBOR0hUVFAyX0hEX01BWF9OVik7CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKyAgICAgIGluICs9IHJ2OworICAgICAgaWYgKCFyZmluKSB7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBpbnRlZ2VyIG5vdCBmdWxseSBkZWNvZGVkLiBjdXJyZW50PSV6dVxuIiwKKyAgICAgICAgICAgICAgIGluZmxhdGVyLT5sZWZ0KTsKKworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKworICAgICAgaWYgKGluZmxhdGVyLT5odWZmbWFuX2VuY29kZWQpIHsKKyAgICAgICAgbmdodHRwMl9oZF9odWZmX2RlY29kZV9jb250ZXh0X2luaXQoJmluZmxhdGVyLT5odWZmX2RlY29kZV9jdHgpOworCisgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9SRUFEX05BTUVIVUZGOworCisgICAgICAgIHJ2ID0gbmdodHRwMl9yY2J1Zl9uZXcoJmluZmxhdGVyLT5uYW1lcmNidWYsIGluZmxhdGVyLT5sZWZ0ICogMiArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9SRUFEX05BTUU7CisgICAgICAgIHJ2ID0gbmdodHRwMl9yY2J1Zl9uZXcoJmluZmxhdGVyLT5uYW1lcmNidWYsIGluZmxhdGVyLT5sZWZ0ICsgMSwgbWVtKTsKKyAgICAgIH0KKworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmluZmxhdGVyLT5uYW1lYnVmLCBpbmZsYXRlci0+bmFtZXJjYnVmLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGVyLT5uYW1lcmNidWYtPmxlbik7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX1JFQURfTkFNRUhVRkY6CisgICAgICBydiA9IGhkX2luZmxhdGVfcmVhZF9odWZmKGluZmxhdGVyLCAmaW5mbGF0ZXItPm5hbWVidWYsIGluLCBsYXN0KTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBpbiArPSBydjsKKworICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6ICV6ZCBieXRlcyByZWFkXG4iLCBydik7CisKKyAgICAgIGlmIChpbmZsYXRlci0+bGVmdCkgeworICAgICAgICBERUJVR0YoImluZmxhdGVoZDogc3RpbGwgJXp1IGJ5dGVzIHRvIGdvXG4iLCBpbmZsYXRlci0+bGVmdCk7CisKKyAgICAgICAgZ290byBhbG1vc3Rfb2s7CisgICAgICB9CisKKyAgICAgICppbmZsYXRlci0+bmFtZWJ1Zi5sYXN0ID0gJ1wwJzsKKyAgICAgIGluZmxhdGVyLT5uYW1lcmNidWYtPmxlbiA9IG5naHR0cDJfYnVmX2xlbigmaW5mbGF0ZXItPm5hbWVidWYpOworCisgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX0NIRUNLX1ZBTFVFTEVOOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9SRUFEX05BTUU6CisgICAgICBydiA9IGhkX2luZmxhdGVfcmVhZChpbmZsYXRlciwgJmluZmxhdGVyLT5uYW1lYnVmLCBpbiwgbGFzdCk7CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaW4gKz0gcnY7CisKKyAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiAlemQgYnl0ZXMgcmVhZFxuIiwgcnYpOworICAgICAgaWYgKGluZmxhdGVyLT5sZWZ0KSB7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBzdGlsbCAlenUgYnl0ZXMgdG8gZ29cbiIsIGluZmxhdGVyLT5sZWZ0KTsKKworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKworICAgICAgKmluZmxhdGVyLT5uYW1lYnVmLmxhc3QgPSAnXDAnOworICAgICAgaW5mbGF0ZXItPm5hbWVyY2J1Zi0+bGVuID0gbmdodHRwMl9idWZfbGVuKCZpbmZsYXRlci0+bmFtZWJ1Zik7CisKKyAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfQ0hFQ0tfVkFMVUVMRU47CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9DSEVDS19WQUxVRUxFTjoKKyAgICAgIGhkX2luZmxhdGVfc2V0X2h1ZmZtYW5fZW5jb2RlZChpbmZsYXRlciwgaW4pOworICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9SRUFEX1ZBTFVFTEVOOworICAgICAgaW5mbGF0ZXItPmxlZnQgPSAwOworICAgICAgaW5mbGF0ZXItPnNoaWZ0ID0gMDsKKyAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBodWZmbWFuIGVuY29kZWQ9JWRcbiIsIGluZmxhdGVyLT5odWZmbWFuX2VuY29kZWQgIT0gMCk7CisgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUVMRU46CisgICAgICByZmluID0gMDsKKyAgICAgIHJ2ID0gaGRfaW5mbGF0ZV9yZWFkX2xlbihpbmZsYXRlciwgJnJmaW4sIGluLCBsYXN0LCA3LCBOR0hUVFAyX0hEX01BWF9OVik7CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaW4gKz0gcnY7CisKKyAgICAgIGlmICghcmZpbikgeworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKworICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IHZhbHVlbGVuPSV6dVxuIiwgaW5mbGF0ZXItPmxlZnQpOworCisgICAgICBpZiAoaW5mbGF0ZXItPmh1ZmZtYW5fZW5jb2RlZCkgeworICAgICAgICBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHRfaW5pdCgmaW5mbGF0ZXItPmh1ZmZfZGVjb2RlX2N0eCk7CisKKyAgICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9SRUFEX1ZBTFVFSFVGRjsKKworICAgICAgICBydiA9IG5naHR0cDJfcmNidWZfbmV3KCZpbmZsYXRlci0+dmFsdWVyY2J1ZiwgaW5mbGF0ZXItPmxlZnQgKiAyICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9SRUFEX1ZBTFVFOworCisgICAgICAgIHJ2ID0gbmdodHRwMl9yY2J1Zl9uZXcoJmluZmxhdGVyLT52YWx1ZXJjYnVmLCBpbmZsYXRlci0+bGVmdCArIDEsIG1lbSk7CisgICAgICB9CisKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZpbmZsYXRlci0+dmFsdWVidWYsIGluZmxhdGVyLT52YWx1ZXJjYnVmLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGVyLT52YWx1ZXJjYnVmLT5sZW4pOworCisgICAgICBidXN5ID0gMTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUVIVUZGOgorICAgICAgcnYgPSBoZF9pbmZsYXRlX3JlYWRfaHVmZihpbmZsYXRlciwgJmluZmxhdGVyLT52YWx1ZWJ1ZiwgaW4sIGxhc3QpOworICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIGluICs9IHJ2OworCisgICAgICBERUJVR0YoImluZmxhdGVoZDogJXpkIGJ5dGVzIHJlYWRcbiIsIHJ2KTsKKworICAgICAgaWYgKGluZmxhdGVyLT5sZWZ0KSB7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBzdGlsbCAlenUgYnl0ZXMgdG8gZ29cbiIsIGluZmxhdGVyLT5sZWZ0KTsKKworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKworICAgICAgKmluZmxhdGVyLT52YWx1ZWJ1Zi5sYXN0ID0gJ1wwJzsKKyAgICAgIGluZmxhdGVyLT52YWx1ZXJjYnVmLT5sZW4gPSBuZ2h0dHAyX2J1Zl9sZW4oJmluZmxhdGVyLT52YWx1ZWJ1Zik7CisKKyAgICAgIGlmIChpbmZsYXRlci0+b3Bjb2RlID09IE5HSFRUUDJfSERfT1BDT0RFX05FV05BTUUpIHsKKyAgICAgICAgcnYgPSBoZF9pbmZsYXRlX2NvbW1pdF9uZXduYW1lKGluZmxhdGVyLCBudl9vdXQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcnYgPSBoZF9pbmZsYXRlX2NvbW1pdF9pbmRuYW1lKGluZmxhdGVyLCBudl9vdXQpOworICAgICAgfQorCisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfT1BDT0RFOworICAgICAgKmluZmxhdGVfZmxhZ3MgfD0gTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVQ7CisKKyAgICAgIHJldHVybiAoc3NpemVfdCkoaW4gLSBmaXJzdCk7CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUU6CisgICAgICBydiA9IGhkX2luZmxhdGVfcmVhZChpbmZsYXRlciwgJmluZmxhdGVyLT52YWx1ZWJ1ZiwgaW4sIGxhc3QpOworICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICBERUJVR0YoImluZmxhdGVoZDogdmFsdWUgcmVhZCBmYWlsdXJlICV6ZDogJXNcbiIsIHJ2LAorICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlcnJvcigoaW50KXJ2KSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaW4gKz0gcnY7CisKKyAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiAlemQgYnl0ZXMgcmVhZFxuIiwgcnYpOworCisgICAgICBpZiAoaW5mbGF0ZXItPmxlZnQpIHsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IHN0aWxsICV6dSBieXRlcyB0byBnb1xuIiwgaW5mbGF0ZXItPmxlZnQpOworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKworICAgICAgKmluZmxhdGVyLT52YWx1ZWJ1Zi5sYXN0ID0gJ1wwJzsKKyAgICAgIGluZmxhdGVyLT52YWx1ZXJjYnVmLT5sZW4gPSBuZ2h0dHAyX2J1Zl9sZW4oJmluZmxhdGVyLT52YWx1ZWJ1Zik7CisKKyAgICAgIGlmIChpbmZsYXRlci0+b3Bjb2RlID09IE5HSFRUUDJfSERfT1BDT0RFX05FV05BTUUpIHsKKyAgICAgICAgcnYgPSBoZF9pbmZsYXRlX2NvbW1pdF9uZXduYW1lKGluZmxhdGVyLCBudl9vdXQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcnYgPSBoZF9pbmZsYXRlX2NvbW1pdF9pbmRuYW1lKGluZmxhdGVyLCBudl9vdXQpOworICAgICAgfQorCisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfT1BDT0RFOworICAgICAgKmluZmxhdGVfZmxhZ3MgfD0gTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVQ7CisKKyAgICAgIHJldHVybiAoc3NpemVfdCkoaW4gLSBmaXJzdCk7CisgICAgfQorICB9CisKKyAgYXNzZXJ0KGluID09IGxhc3QpOworCisgIERFQlVHRigiaW5mbGF0ZWhkOiBhbGwgaW5wdXQgYnl0ZXMgd2VyZSBwcm9jZXNzZWRcbiIpOworCisgIGlmIChpbl9maW5hbCkgeworICAgIERFQlVHRigiaW5mbGF0ZWhkOiBpbl9maW5hbCBzZXRcbiIpOworCisgICAgaWYgKGluZmxhdGVyLT5zdGF0ZSAhPSBOR0hUVFAyX0hEX1NUQVRFX09QQ09ERSAmJgorICAgICAgICBpbmZsYXRlci0+c3RhdGUgIT0gTkdIVFRQMl9IRF9TVEFURV9JTkZMQVRFX1NUQVJUKSB7CisgICAgICBERUJVR0YoImluZmxhdGVoZDogdW5hY2NlcHRhYmxlIHN0YXRlPSVkXG4iLCBpbmZsYXRlci0+c3RhdGUpOworICAgICAgcnYgPSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICAqaW5mbGF0ZV9mbGFncyB8PSBOR0hUVFAyX0hEX0lORkxBVEVfRklOQUw7CisgIH0KKyAgcmV0dXJuIChzc2l6ZV90KShpbiAtIGZpcnN0KTsKKworYWxtb3N0X29rOgorICBpZiAoaW5fZmluYWwpIHsKKyAgICBERUJVR0YoImluZmxhdGVoZDogaW5wdXQgZW5kZWQgcHJlbWF0dXJlbHlcbiIpOworCisgICAgcnYgPSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKworICAgIGdvdG8gZmFpbDsKKyAgfQorICByZXR1cm4gKHNzaXplX3QpKGluIC0gZmlyc3QpOworCitmYWlsOgorICBERUJVR0YoImluZmxhdGVoZDogZXJyb3IgcmV0dXJuICV6ZFxuIiwgcnYpOworCisgIGluZmxhdGVyLT5jdHguYmFkID0gMTsKKyAgcmV0dXJuIHJ2OworfQorCitpbnQgbmdodHRwMl9oZF9pbmZsYXRlX2VuZF9oZWFkZXJzKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKSB7CisgIGhkX2luZmxhdGVfa2VlcF9mcmVlKGluZmxhdGVyKTsKKyAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9JTkZMQVRFX1NUQVJUOworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfaGRfaW5mbGF0ZV9uZXcobmdodHRwMl9oZF9pbmZsYXRlciAqKmluZmxhdGVyX3B0cikgeworICByZXR1cm4gbmdodHRwMl9oZF9pbmZsYXRlX25ldzIoaW5mbGF0ZXJfcHRyLCBOVUxMKTsKK30KKworaW50IG5naHR0cDJfaGRfaW5mbGF0ZV9uZXcyKG5naHR0cDJfaGRfaW5mbGF0ZXIgKippbmZsYXRlcl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyOworCisgIGlmIChtZW0gPT0gTlVMTCkgeworICAgIG1lbSA9IG5naHR0cDJfbWVtX2RlZmF1bHQoKTsKKyAgfQorCisgIGluZmxhdGVyID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfaGRfaW5mbGF0ZXIpKTsKKworICBpZiAoaW5mbGF0ZXIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIHJ2ID0gbmdodHRwMl9oZF9pbmZsYXRlX2luaXQoaW5mbGF0ZXIsIG1lbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaW5mbGF0ZXIpOworCisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgKmluZmxhdGVyX3B0ciA9IGluZmxhdGVyOworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfaGRfaW5mbGF0ZV9kZWwobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpIHsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSBpbmZsYXRlci0+Y3R4Lm1lbTsKKyAgbmdodHRwMl9oZF9pbmZsYXRlX2ZyZWUoaW5mbGF0ZXIpOworCisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpbmZsYXRlcik7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2VtaXRfaW5kbmFtZV9ibG9jayhuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHNpemVfdCBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9udiAqbnYsIGludCBpbmRleGluZ19tb2RlKSB7CisKKyAgcmV0dXJuIGVtaXRfaW5kbmFtZV9ibG9jayhidWZzLCBpZHgsIG52LCBpbmRleGluZ19tb2RlKTsKK30KKworaW50IG5naHR0cDJfaGRfZW1pdF9uZXduYW1lX2Jsb2NrKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4aW5nX21vZGUpIHsKKyAgcmV0dXJuIGVtaXRfbmV3bmFtZV9ibG9jayhidWZzLCBudiwgaW5kZXhpbmdfbW9kZSk7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2VtaXRfdGFibGVfc2l6ZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHNpemVfdCB0YWJsZV9zaXplKSB7CisgIHJldHVybiBlbWl0X3RhYmxlX3NpemUoYnVmcywgdGFibGVfc2l6ZSk7Cit9CisKK3NzaXplX3QgbmdodHRwMl9oZF9kZWNvZGVfbGVuZ3RoKHVpbnQzMl90ICpyZXMsIHNpemVfdCAqc2hpZnRfcHRyLCBpbnQgKmZpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluaXRpYWwsIHNpemVfdCBzaGlmdCwgdWludDhfdCAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpsYXN0LCBzaXplX3QgcHJlZml4KSB7CisgIHJldHVybiBkZWNvZGVfbGVuZ3RoKHJlcywgc2hpZnRfcHRyLCBmaW4sIGluaXRpYWwsIHNoaWZ0LCBpbiwgbGFzdCwgcHJlZml4KTsKK30KKworc3RhdGljIGNvbnN0IG5naHR0cDJfbnYgKmhkX2dldF90YWJsZV9lbnRyeShuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpZHgpIHsKKyAgaWYgKGlkeCA9PSAwKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAtLWlkeDsKKworICBpZiAoIUlOREVYX1JBTkdFX1ZBTElEKGNvbnRleHQsIGlkeCkpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiBuZ2h0dHAyX2hkX3RhYmxlX2dldDIoY29udGV4dCwgaWR4KTsKK30KKworc2l6ZV90IG5naHR0cDJfaGRfZGVmbGF0ZV9nZXRfbnVtX3RhYmxlX2VudHJpZXMobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIpIHsKKyAgcmV0dXJuIGdldF9tYXhfaW5kZXgoJmRlZmxhdGVyLT5jdHgpOworfQorCitjb25zdCBuZ2h0dHAyX252ICoKK25naHR0cDJfaGRfZGVmbGF0ZV9nZXRfdGFibGVfZW50cnkobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsIHNpemVfdCBpZHgpIHsKKyAgcmV0dXJuIGhkX2dldF90YWJsZV9lbnRyeSgmZGVmbGF0ZXItPmN0eCwgaWR4KTsKK30KKworc2l6ZV90CituZ2h0dHAyX2hkX2RlZmxhdGVfZ2V0X2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcikgeworICByZXR1cm4gZGVmbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplOworfQorCitzaXplX3QKK25naHR0cDJfaGRfZGVmbGF0ZV9nZXRfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcikgeworICByZXR1cm4gZGVmbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplX21heDsKK30KKworc2l6ZV90IG5naHR0cDJfaGRfaW5mbGF0ZV9nZXRfbnVtX3RhYmxlX2VudHJpZXMobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpIHsKKyAgcmV0dXJuIGdldF9tYXhfaW5kZXgoJmluZmxhdGVyLT5jdHgpOworfQorCitjb25zdCBuZ2h0dHAyX252ICoKK25naHR0cDJfaGRfaW5mbGF0ZV9nZXRfdGFibGVfZW50cnkobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsIHNpemVfdCBpZHgpIHsKKyAgcmV0dXJuIGhkX2dldF90YWJsZV9lbnRyeSgmaW5mbGF0ZXItPmN0eCwgaWR4KTsKK30KKworc2l6ZV90CituZ2h0dHAyX2hkX2luZmxhdGVfZ2V0X2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcikgeworICByZXR1cm4gaW5mbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplOworfQorCitzaXplX3QKK25naHR0cDJfaGRfaW5mbGF0ZV9nZXRfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcikgeworICByZXR1cm4gaW5mbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplX21heDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGQuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjc0MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZC5oCkBAIC0wLDAgKzEsNDM5IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9IRF9ICisjZGVmaW5lIE5HSFRUUDJfSERfSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX2hkX2h1ZmZtYW4uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2J1Zi5oIgorI2luY2x1ZGUgIm5naHR0cDJfbWVtLmgiCisjaW5jbHVkZSAibmdodHRwMl9yY2J1Zi5oIgorCisjZGVmaW5lIE5HSFRUUDJfSERfREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUgTkdIVFRQMl9ERUZBVUxUX0hFQURFUl9UQUJMRV9TSVpFCisjZGVmaW5lIE5HSFRUUDJfSERfRU5UUllfT1ZFUkhFQUQgMzIKKworLyogVGhlIG1heGltdW0gbGVuZ3RoIG9mIG9uZSBuYW1lL3ZhbHVlIHBhaXIuICBUaGlzIGlzIHRoZSBzdW0gb2YgdGhlCisgICBsZW5ndGggb2YgbmFtZSBhbmQgdmFsdWUuICBUaGlzIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIHNwZWMuIFdlCisgICBqdXN0IGNob3NlIHRoZSBhcmJpdHJhcnkgc2l6ZSAqLworI2RlZmluZSBOR0hUVFAyX0hEX01BWF9OViA2NTUzNgorCisvKiBEZWZhdWx0IHNpemUgb2YgbWF4aW11bSB0YWJsZSBidWZmZXIgc2l6ZSBmb3IgZW5jb2Rlci4gRXZlbiBpZgorICAgcmVtb3RlIGRlY29kZXIgbm90aWZpZXMgbGFyZ2VyIGJ1ZmZlciBzaXplIGZvciBpdHMgZGVjb2RpbmcsCisgICBlbmNvZGVyIG9ubHkgdXNlcyB0aGUgbWVtb3J5IHVwIHRvIHRoaXMgdmFsdWUuICovCisjZGVmaW5lIE5HSFRUUDJfSERfREVGQVVMVF9NQVhfREVGTEFURV9CVUZGRVJfU0laRSAoMSA8PCAxMikKKworLyogRXhwb3J0ZWQgZm9yIHVuaXQgdGVzdCAqLworI2RlZmluZSBOR0hUVFAyX1NUQVRJQ19UQUJMRV9MRU5HVEggNjEKKworLyogR2VuZXJhdGVkIGJ5IGdlbmxpYnRva2VubG9va3VwLnB5ICovCit0eXBlZGVmIGVudW0geworICBOR0hUVFAyX1RPS0VOX19BVVRIT1JJVFkgPSAwLAorICBOR0hUVFAyX1RPS0VOX19NRVRIT0QgPSAxLAorICBOR0hUVFAyX1RPS0VOX19QQVRIID0gMywKKyAgTkdIVFRQMl9UT0tFTl9fU0NIRU1FID0gNSwKKyAgTkdIVFRQMl9UT0tFTl9fU1RBVFVTID0gNywKKyAgTkdIVFRQMl9UT0tFTl9BQ0NFUFRfQ0hBUlNFVCA9IDE0LAorICBOR0hUVFAyX1RPS0VOX0FDQ0VQVF9FTkNPRElORyA9IDE1LAorICBOR0hUVFAyX1RPS0VOX0FDQ0VQVF9MQU5HVUFHRSA9IDE2LAorICBOR0hUVFAyX1RPS0VOX0FDQ0VQVF9SQU5HRVMgPSAxNywKKyAgTkdIVFRQMl9UT0tFTl9BQ0NFUFQgPSAxOCwKKyAgTkdIVFRQMl9UT0tFTl9BQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU4gPSAxOSwKKyAgTkdIVFRQMl9UT0tFTl9BR0UgPSAyMCwKKyAgTkdIVFRQMl9UT0tFTl9BTExPVyA9IDIxLAorICBOR0hUVFAyX1RPS0VOX0FVVEhPUklaQVRJT04gPSAyMiwKKyAgTkdIVFRQMl9UT0tFTl9DQUNIRV9DT05UUk9MID0gMjMsCisgIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9ESVNQT1NJVElPTiA9IDI0LAorICBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfRU5DT0RJTkcgPSAyNSwKKyAgTkdIVFRQMl9UT0tFTl9DT05URU5UX0xBTkdVQUdFID0gMjYsCisgIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9MRU5HVEggPSAyNywKKyAgTkdIVFRQMl9UT0tFTl9DT05URU5UX0xPQ0FUSU9OID0gMjgsCisgIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9SQU5HRSA9IDI5LAorICBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfVFlQRSA9IDMwLAorICBOR0hUVFAyX1RPS0VOX0NPT0tJRSA9IDMxLAorICBOR0hUVFAyX1RPS0VOX0RBVEUgPSAzMiwKKyAgTkdIVFRQMl9UT0tFTl9FVEFHID0gMzMsCisgIE5HSFRUUDJfVE9LRU5fRVhQRUNUID0gMzQsCisgIE5HSFRUUDJfVE9LRU5fRVhQSVJFUyA9IDM1LAorICBOR0hUVFAyX1RPS0VOX0ZST00gPSAzNiwKKyAgTkdIVFRQMl9UT0tFTl9IT1NUID0gMzcsCisgIE5HSFRUUDJfVE9LRU5fSUZfTUFUQ0ggPSAzOCwKKyAgTkdIVFRQMl9UT0tFTl9JRl9NT0RJRklFRF9TSU5DRSA9IDM5LAorICBOR0hUVFAyX1RPS0VOX0lGX05PTkVfTUFUQ0ggPSA0MCwKKyAgTkdIVFRQMl9UT0tFTl9JRl9SQU5HRSA9IDQxLAorICBOR0hUVFAyX1RPS0VOX0lGX1VOTU9ESUZJRURfU0lOQ0UgPSA0MiwKKyAgTkdIVFRQMl9UT0tFTl9MQVNUX01PRElGSUVEID0gNDMsCisgIE5HSFRUUDJfVE9LRU5fTElOSyA9IDQ0LAorICBOR0hUVFAyX1RPS0VOX0xPQ0FUSU9OID0gNDUsCisgIE5HSFRUUDJfVE9LRU5fTUFYX0ZPUldBUkRTID0gNDYsCisgIE5HSFRUUDJfVE9LRU5fUFJPWFlfQVVUSEVOVElDQVRFID0gNDcsCisgIE5HSFRUUDJfVE9LRU5fUFJPWFlfQVVUSE9SSVpBVElPTiA9IDQ4LAorICBOR0hUVFAyX1RPS0VOX1JBTkdFID0gNDksCisgIE5HSFRUUDJfVE9LRU5fUkVGRVJFUiA9IDUwLAorICBOR0hUVFAyX1RPS0VOX1JFRlJFU0ggPSA1MSwKKyAgTkdIVFRQMl9UT0tFTl9SRVRSWV9BRlRFUiA9IDUyLAorICBOR0hUVFAyX1RPS0VOX1NFUlZFUiA9IDUzLAorICBOR0hUVFAyX1RPS0VOX1NFVF9DT09LSUUgPSA1NCwKKyAgTkdIVFRQMl9UT0tFTl9TVFJJQ1RfVFJBTlNQT1JUX1NFQ1VSSVRZID0gNTUsCisgIE5HSFRUUDJfVE9LRU5fVFJBTlNGRVJfRU5DT0RJTkcgPSA1NiwKKyAgTkdIVFRQMl9UT0tFTl9VU0VSX0FHRU5UID0gNTcsCisgIE5HSFRUUDJfVE9LRU5fVkFSWSA9IDU4LAorICBOR0hUVFAyX1RPS0VOX1ZJQSA9IDU5LAorICBOR0hUVFAyX1RPS0VOX1dXV19BVVRIRU5USUNBVEUgPSA2MCwKKyAgTkdIVFRQMl9UT0tFTl9URSwKKyAgTkdIVFRQMl9UT0tFTl9DT05ORUNUSU9OLAorICBOR0hUVFAyX1RPS0VOX0tFRVBfQUxJVkUsCisgIE5HSFRUUDJfVE9LRU5fUFJPWFlfQ09OTkVDVElPTiwKKyAgTkdIVFRQMl9UT0tFTl9VUEdSQURFLAorICBOR0hUVFAyX1RPS0VOX19QUk9UT0NPTCwKK30gbmdodHRwMl90b2tlbjsKKworc3RydWN0IG5naHR0cDJfaGRfZW50cnk7Cit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX2hkX2VudHJ5IG5naHR0cDJfaGRfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogVGhlIGJ1ZmZlciBjb250YWluaW5nIGhlYWRlciBmaWVsZCBuYW1lLiAgTlVMTC10ZXJtaW5hdGlvbiBpcworICAgICBndWFyYW50ZWVkLiAqLworICBuZ2h0dHAyX3JjYnVmICpuYW1lOworICAvKiBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgaGVhZGVyIGZpZWxkIHZhbHVlLiAgTlVMTC10ZXJtaW5hdGlvbiBpcworICAgICBndWFyYW50ZWVkLiAqLworICBuZ2h0dHAyX3JjYnVmICp2YWx1ZTsKKyAgLyogbmdodHRwMl90b2tlbiB2YWx1ZSBmb3IgbmFtZS4gIEl0IGNvdWxkIGJlIC0xIGlmIHdlIGhhdmUgbm8gdG9rZW4KKyAgICAgZm9yIHRoYXQgaGVhZGVyIGZpZWxkIG5hbWUuICovCisgIGludDMyX3QgdG9rZW47CisgIC8qIEJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgbmdodHRwMl9udl9mbGFnLiAqLworICB1aW50OF90IGZsYWdzOworfSBuZ2h0dHAyX2hkX252OworCitzdHJ1Y3QgbmdodHRwMl9oZF9lbnRyeSB7CisgIC8qIFRoZSBoZWFkZXIgZmllbGQgbmFtZS92YWx1ZSBwYWlyICovCisgIG5naHR0cDJfaGRfbnYgbnY7CisgIC8qIFRoaXMgaXMgc29sZWx5IGZvciBuZ2h0dHAyX2hkX3tkZWZsYXRlLGluZmxhdGV9X2dldF90YWJsZV9lbnRyeQorICAgICBBUElzIHRvIGtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KKyAgbmdodHRwMl9udiBjbnY7CisgIC8qIFRoZSBuZXh0IGVudHJ5IHdoaWNoIHNoYXJlcyBzYW1lIGJ1Y2tldCBpbiBoYXNoIHRhYmxlLiAqLworICBuZ2h0dHAyX2hkX2VudHJ5ICpuZXh0OworICAvKiBUaGUgc2VxdWVuY2UgbnVtYmVyLiAgV2Ugd2lsbCBpbmNyZW1lbnQgaXQgYnkgb25lIHdoZW5ldmVyIHdlCisgICAgIHN0b3JlIG5naHR0cDJfaGRfZW50cnkgdG8gZHluYW1pYyBoZWFkZXIgdGFibGUuICovCisgIHVpbnQzMl90IHNlcTsKKyAgLyogVGhlIGhhc2ggdmFsdWUgZm9yIGhlYWRlciBuYW1lIChudi5uYW1lKS4gKi8KKyAgdWludDMyX3QgaGFzaDsKK307CisKKy8qIFRoZSBlbnRyeSB1c2VkIGZvciBzdGF0aWMgaGVhZGVyIHRhYmxlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX3JjYnVmIG5hbWU7CisgIG5naHR0cDJfcmNidWYgdmFsdWU7CisgIG5naHR0cDJfbnYgY252OworICBpbnQzMl90IHRva2VuOworICB1aW50MzJfdCBoYXNoOworfSBuZ2h0dHAyX2hkX3N0YXRpY19lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX2hkX2VudHJ5ICoqYnVmZmVyOworICBzaXplX3QgbWFzazsKKyAgc2l6ZV90IGZpcnN0OworICBzaXplX3QgbGVuOworfSBuZ2h0dHAyX2hkX3JpbmdidWY7CisKK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfSERfT1BDT0RFX05PTkUsCisgIE5HSFRUUDJfSERfT1BDT0RFX0lOREVYRUQsCisgIE5HSFRUUDJfSERfT1BDT0RFX05FV05BTUUsCisgIE5HSFRUUDJfSERfT1BDT0RFX0lORE5BTUUKK30gbmdodHRwMl9oZF9vcGNvZGU7CisKK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfSERfU1RBVEVfRVhQRUNUX1RBQkxFX1NJWkUsCisgIE5HSFRUUDJfSERfU1RBVEVfSU5GTEFURV9TVEFSVCwKKyAgTkdIVFRQMl9IRF9TVEFURV9PUENPREUsCisgIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9UQUJMRV9TSVpFLAorICBOR0hUVFAyX0hEX1NUQVRFX1JFQURfSU5ERVgsCisgIE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9DSEVDS19OQU1FTEVOLAorICBOR0hUVFAyX0hEX1NUQVRFX05FV05BTUVfUkVBRF9OQU1FTEVOLAorICBOR0hUVFAyX0hEX1NUQVRFX05FV05BTUVfUkVBRF9OQU1FSFVGRiwKKyAgTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX1JFQURfTkFNRSwKKyAgTkdIVFRQMl9IRF9TVEFURV9DSEVDS19WQUxVRUxFTiwKKyAgTkdIVFRQMl9IRF9TVEFURV9SRUFEX1ZBTFVFTEVOLAorICBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUVIVUZGLAorICBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUUKK30gbmdodHRwMl9oZF9pbmZsYXRlX3N0YXRlOworCit0eXBlZGVmIGVudW0geworICBOR0hUVFAyX0hEX1dJVEhfSU5ERVhJTkcsCisgIE5HSFRUUDJfSERfV0lUSE9VVF9JTkRFWElORywKKyAgTkdIVFRQMl9IRF9ORVZFUl9JTkRFWElORworfSBuZ2h0dHAyX2hkX2luZGV4aW5nX21vZGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogZHluYW1pYyBoZWFkZXIgdGFibGUgKi8KKyAgbmdodHRwMl9oZF9yaW5nYnVmIGhkX3RhYmxlOworICAvKiBNZW1vcnkgYWxsb2NhdG9yICovCisgIG5naHR0cDJfbWVtICptZW07CisgIC8qIEFic3RyYWN0IGJ1ZmZlciBzaXplIG9mIGhkX3RhYmxlIGFzIGRlc2NyaWJlZCBpbiB0aGUgc3BlYy4gVGhpcworICAgICBpcyB0aGUgc3VtIG9mIGxlbmd0aCBvZiBuYW1lL3ZhbHVlIGluIGhkX3RhYmxlICsKKyAgICAgTkdIVFRQMl9IRF9FTlRSWV9PVkVSSEVBRCBieXRlcyBvdmVyaGVhZCBwZXIgZWFjaCBlbnRyeS4gKi8KKyAgc2l6ZV90IGhkX3RhYmxlX2J1ZnNpemU7CisgIC8qIFRoZSBlZmZlY3RpdmUgaGVhZGVyIHRhYmxlIHNpemUuICovCisgIHNpemVfdCBoZF90YWJsZV9idWZzaXplX21heDsKKyAgLyogTmV4dCBzZXF1ZW5jZSBudW1iZXIgZm9yIG5naHR0cDJfaGRfZW50cnkgKi8KKyAgdWludDMyX3QgbmV4dF9zZXE7CisgIC8qIElmIGluZmxhdGUvZGVmbGF0ZSBlcnJvciBvY2N1cnJlZCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gMSBhbmQKKyAgICAgZnVydGhlciBpbnZvY2F0aW9uIG9mIGluZmxhdGUvZGVmbGF0ZSB3aWxsIGZhaWwgd2l0aAorICAgICBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUC4gKi8KKyAgdWludDhfdCBiYWQ7Cit9IG5naHR0cDJfaGRfY29udGV4dDsKKworI2RlZmluZSBIRF9NQVBfU0laRSAxMjgKKwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX2hkX2VudHJ5ICp0YWJsZVtIRF9NQVBfU0laRV07Cit9IG5naHR0cDJfaGRfbWFwOworCitzdHJ1Y3QgbmdodHRwMl9oZF9kZWZsYXRlciB7CisgIG5naHR0cDJfaGRfY29udGV4dCBjdHg7CisgIG5naHR0cDJfaGRfbWFwIG1hcDsKKyAgLyogVGhlIHVwcGVyIGxpbWl0IG9mIHRoZSBoZWFkZXIgdGFibGUgc2l6ZSB0aGUgZGVmbGF0ZXIgYWNjZXB0cy4gKi8KKyAgc2l6ZV90IGRlZmxhdGVfaGRfdGFibGVfYnVmc2l6ZV9tYXg7CisgIC8qIE1pbmltdW0gaGVhZGVyIHRhYmxlIHNpemUgbm90aWZpZWQgaW4gdGhlIG5leHQgY29udGV4dCB1cGRhdGUgKi8KKyAgc2l6ZV90IG1pbl9oZF90YWJsZV9idWZzaXplX21heDsKKyAgLyogSWYgbm9uemVybywgc2VuZCBoZWFkZXIgdGFibGUgc2l6ZSB1c2luZyBlbmNvZGluZyBjb250ZXh0IHVwZGF0ZQorICAgICBpbiB0aGUgbmV4dCBkZWZsYXRlIHByb2Nlc3MgKi8KKyAgdWludDhfdCBub3RpZnlfdGFibGVfc2l6ZV9jaGFuZ2U7Cit9OworCitzdHJ1Y3QgbmdodHRwMl9oZF9pbmZsYXRlciB7CisgIG5naHR0cDJfaGRfY29udGV4dCBjdHg7CisgIC8qIFN0b3JlcyBjdXJyZW50IHN0YXRlIG9mIGh1ZmZtYW4gZGVjb2RpbmcgKi8KKyAgbmdodHRwMl9oZF9odWZmX2RlY29kZV9jb250ZXh0IGh1ZmZfZGVjb2RlX2N0eDsKKyAgLyogaGVhZGVyIGJ1ZmZlciAqLworICBuZ2h0dHAyX2J1ZiBuYW1lYnVmLCB2YWx1ZWJ1ZjsKKyAgbmdodHRwMl9yY2J1ZiAqbmFtZXJjYnVmLCAqdmFsdWVyY2J1ZjsKKyAgLyogUG9pbnRlciB0byB0aGUgbmFtZS92YWx1ZSBwYWlyIHdoaWNoIGFyZSB1c2VkIGluIHRoZSBjdXJyZW50CisgICAgIGhlYWRlciBlbWlzc2lvbi4gKi8KKyAgbmdodHRwMl9yY2J1ZiAqbnZfbmFtZV9rZWVwLCAqbnZfdmFsdWVfa2VlcDsKKyAgLyogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkICovCisgIHNpemVfdCBsZWZ0OworICAvKiBUaGUgaW5kZXggaW4gaW5kZXhlZCByZXByIG9yIGluZGV4ZWQgbmFtZSAqLworICBzaXplX3QgaW5kZXg7CisgIC8qIFRoZSBtYXhpbXVtIGhlYWRlciB0YWJsZSBzaXplIHRoZSBpbmZsYXRlciBzdXBwb3J0cy4gVGhpcyBpcyB0aGUKKyAgICAgc2FtZSB2YWx1ZSB0cmFuc21pdHRlZCBpbiBTRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRSAqLworICBzaXplX3Qgc2V0dGluZ3NfaGRfdGFibGVfYnVmc2l6ZV9tYXg7CisgIC8qIE1pbmltdW0gaGVhZGVyIHRhYmxlIHNpemUgc2V0IGJ5IG5naHR0cDJfaGRfaW5mbGF0ZV9jaGFuZ2VfdGFibGVfc2l6ZSAqLworICBzaXplX3QgbWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4OworICAvKiBUaGUgbnVtYmVyIG9mIG5leHQgc2hpZnQgdG8gZGVjb2RlIGludGVnZXIgKi8KKyAgc2l6ZV90IHNoaWZ0OworICBuZ2h0dHAyX2hkX29wY29kZSBvcGNvZGU7CisgIG5naHR0cDJfaGRfaW5mbGF0ZV9zdGF0ZSBzdGF0ZTsKKyAgLyogbm9uemVybyBpZiBzdHJpbmcgaXMgaHVmZm1hbiBlbmNvZGVkICovCisgIHVpbnQ4X3QgaHVmZm1hbl9lbmNvZGVkOworICAvKiBub256ZXJvIGlmIGRlZmxhdGVyIHJlcXVpcmVzIHRoYXQgY3VycmVudCBlbnRyeSBpcyBpbmRleGVkICovCisgIHVpbnQ4X3QgaW5kZXhfcmVxdWlyZWQ7CisgIC8qIG5vbnplcm8gaWYgZGVmbGF0ZXIgcmVxdWlyZXMgdGhhdCBjdXJyZW50IGVudHJ5IG11c3Qgbm90IGJlCisgICAgIGluZGV4ZWQgKi8KKyAgdWludDhfdCBub19pbmRleDsKK307CisKKy8qCisgKiBJbml0aWFsaXplcyB0aGUgfGVudHwgbWVtYmVycy4gIFRoZSByZWZlcmVuY2UgY291bnRzIG9mIG52LT5uYW1lCisgKiBhbmQgbnYtPnZhbHVlIGFyZSBpbmNyZWFzZWQgYnkgb25lIGZvciBlYWNoLgorICovCit2b2lkIG5naHR0cDJfaGRfZW50cnlfaW5pdChuZ2h0dHAyX2hkX2VudHJ5ICplbnQsIG5naHR0cDJfaGRfbnYgKm52KTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnRzIG9mIG52LT5uYW1lIGFuZAorICogbnYtPnZhbHVlLgorICovCit2b2lkIG5naHR0cDJfaGRfZW50cnlfZnJlZShuZ2h0dHAyX2hkX2VudHJ5ICplbnQpOworCisvKgorICogSW5pdGlhbGl6ZXMgfGRlZmxhdGVyfCBmb3IgZGVmbGF0aW5nIG5hbWUvdmFsdWVzIHBhaXJzLgorICoKKyAqIFRoZSBlbmNvZGVyIG9ubHkgdXNlcyB1cCB0bworICogTkdIVFRQMl9IRF9ERUZBVUxUX01BWF9ERUZMQVRFX0JVRkZFUl9TSVpFIGJ5dGVzIGZvciBoZWFkZXIgdGFibGUKKyAqIGV2ZW4gaWYgdGhlIGxhcmdlciB2YWx1ZSBpcyBzcGVjaWZpZWQgbGF0ZXIgaW4KKyAqIG5naHR0cDJfaGRfY2hhbmdlX3RhYmxlX3NpemUoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfaGRfZGVmbGF0ZV9pbml0KG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIEluaXRpYWxpemVzIHxkZWZsYXRlcnwgZm9yIGRlZmxhdGluZyBuYW1lL3ZhbHVlcyBwYWlycy4KKyAqCisgKiBUaGUgZW5jb2RlciBvbmx5IHVzZXMgdXAgdG8gfG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZXwgYnl0ZXMKKyAqIGZvciBoZWFkZXIgdGFibGUgZXZlbiBpZiB0aGUgbGFyZ2VyIHZhbHVlIGlzIHNwZWNpZmllZCBsYXRlciBpbgorICogbmdodHRwMl9oZF9jaGFuZ2VfdGFibGVfc2l6ZSgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX2luaXQyKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIERlYWxsb2NhdGVzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB8ZGVmbGF0ZXJ8LgorICovCit2b2lkIG5naHR0cDJfaGRfZGVmbGF0ZV9mcmVlKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKTsKKworLyoKKyAqIERlZmxhdGVzIHRoZSB8bnZhfCwgd2hpY2ggaGFzIHRoZSB8bnZsZW58IG5hbWUvdmFsdWUgcGFpcnMsIGludG8KKyAqIHRoZSB8YnVmc3wuCisgKgorICogVGhpcyBmdW5jdGlvbiBleHBhbmRzIHxidWZzfCBhcyBuZWNlc3NhcnkgdG8gc3RvcmUgdGhlIHJlc3VsdC4gSWYKKyAqIGJ1ZmZlcnMgaXMgZnVsbCBhbmQgdGhlIHByb2Nlc3Mgc3RpbGwgcmVxdWlyZXMgbW9yZSBzcGFjZSwgdGhpcworICogZnVuY3Rpb24gZmFpbHMgYW5kIHJldHVybnMgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAuCisgKgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBpdCBpcyBzYWZlIHRvIGRlbGV0ZSB0aGUgfG52YXwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICAgIERlZmxhdGlvbiBwcm9jZXNzIGhhcyBmYWlsZWQuCisgKiBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IKKyAqICAgICBPdXQgb2YgYnVmZmVyIHNwYWNlLgorICovCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX2hkX2J1ZnMobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9idWZzICpidWZzLCBjb25zdCBuZ2h0dHAyX252ICpudmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG52bGVuKTsKKworLyoKKyAqIEluaXRpYWxpemVzIHxpbmZsYXRlcnwgZm9yIGluZmxhdGluZyBuYW1lL3ZhbHVlcyBwYWlycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9oZF9pbmZsYXRlX2luaXQobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRGVhbGxvY2F0ZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHxpbmZsYXRlcnwuCisgKi8KK3ZvaWQgbmdodHRwMl9oZF9pbmZsYXRlX2ZyZWUobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpOworCisvKgorICogU2ltaWxhciB0byBuZ2h0dHAyX2hkX2luZmxhdGVfaGQoKSwgYnV0IHRoaXMgdGFrZXMgbmdodHRwMl9oZF9udgorICogaW5zdGVhZCBvZiBuZ2h0dHAyX252IGFzIG91dHB1dCBwYXJhbWV0ZXIgfG52X291dHwuICBPdGhlciB0aGFuCisgKiB0aGF0IHJldHVybiB2YWx1ZXMgYW5kIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMKKyAqIG5naHR0cDJfaGRfaW5mbGF0ZV9oZCgpLgorICovCitzc2l6ZV90IG5naHR0cDJfaGRfaW5mbGF0ZV9oZF9udihuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfbnYgKm52X291dCwgaW50ICppbmZsYXRlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW4sIHNpemVfdCBpbmxlbiwgaW50IGluX2ZpbmFsKTsKKworLyogRm9yIHVuaXR0ZXN0aW5nIHB1cnBvc2UgKi8KK2ludCBuZ2h0dHAyX2hkX2VtaXRfaW5kbmFtZV9ibG9jayhuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHNpemVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudiwgaW50IGluZGV4aW5nX21vZGUpOworCisvKiBGb3IgdW5pdHRlc3RpbmcgcHVycG9zZSAqLworaW50IG5naHR0cDJfaGRfZW1pdF9uZXduYW1lX2Jsb2NrKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4aW5nX21vZGUpOworCisvKiBGb3IgdW5pdHRlc3RpbmcgcHVycG9zZSAqLworaW50IG5naHR0cDJfaGRfZW1pdF90YWJsZV9zaXplKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IHRhYmxlX3NpemUpOworCisvKiBGb3IgdW5pdHRlc3RpbmcgcHVycG9zZSAqLworbmdodHRwMl9oZF9udiBuZ2h0dHAyX2hkX3RhYmxlX2dldChuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsIHNpemVfdCBpbmRleCk7CisKKy8qIEZvciB1bml0dGVzdGluZyBwdXJwb3NlICovCitzc2l6ZV90IG5naHR0cDJfaGRfZGVjb2RlX2xlbmd0aCh1aW50MzJfdCAqcmVzLCBzaXplX3QgKnNoaWZ0X3B0ciwgaW50ICpmaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbml0aWFsLCBzaXplX3Qgc2hpZnQsIHVpbnQ4X3QgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqbGFzdCwgc2l6ZV90IHByZWZpeCk7CisKKy8qIEh1ZmZtYW4gZW5jb2RpbmcvZGVjb2RpbmcgZnVuY3Rpb25zICovCisKKy8qCisgKiBDb3VudHMgdGhlIHJlcXVpcmVkIGJ5dGVzIHRvIGVuY29kZSB8c3JjfCB3aXRoIGxlbmd0aCB8bGVufC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBieXRlcyB0byBlbmNvZGUgZ2l2ZW4KKyAqIGRhdGEsIGluY2x1ZGluZyBwYWRkaW5nIG9mIHByZWZpeCBvZiB0ZXJtaW5hbCBzeW1ib2wgY29kZS4gVGhpcworICogZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzLgorICovCitzaXplX3QgbmdodHRwMl9oZF9odWZmX2VuY29kZV9jb3VudChjb25zdCB1aW50OF90ICpzcmMsIHNpemVfdCBsZW4pOworCisvKgorICogRW5jb2RlcyB0aGUgZ2l2ZW4gZGF0YSB8c3JjfCB3aXRoIGxlbmd0aCB8c3JjbGVufCB0byB0aGUgfGJ1ZnN8LgorICogVGhpcyBmdW5jdGlvbiBleHBhbmRzIGV4dHJhIGJ1ZmZlcnMgaW4gfGJ1ZnN8IGlmIG5lY2Vzc2FyeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUgorICogICAgIE91dCBvZiBidWZmZXIgc3BhY2UuCisgKi8KK2ludCBuZ2h0dHAyX2hkX2h1ZmZfZW5jb2RlKG5naHR0cDJfYnVmcyAqYnVmcywgY29uc3QgdWludDhfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY2xlbik7CisKK3ZvaWQgbmdodHRwMl9oZF9odWZmX2RlY29kZV9jb250ZXh0X2luaXQobmdodHRwMl9oZF9odWZmX2RlY29kZV9jb250ZXh0ICpjdHgpOworCisvKgorICogRGVjb2RlcyB0aGUgZ2l2ZW4gZGF0YSB8c3JjfCB3aXRoIGxlbmd0aCB8c3JjbGVufC4gIFRoZSB8Y3R4fCBtdXN0CisgKiBiZSBpbml0aWFsaXplZCBieSBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHRfaW5pdCgpLiBUaGUgcmVzdWx0CisgKiB3aWxsIGJlIHdyaXR0ZW4gdG8gfGJ1ZnwuICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB8YnVmfCBoYXMgdGhlCisgKiBlbm91Z2ggcm9vbSB0byBzdG9yZSB0aGUgZGVjb2RlZCBieXRlIHN0cmluZy4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3Qgc2V0IHRoZSB8ZmlufCB0byBub256ZXJvIGlmIHRoZSBnaXZlbiBpbnB1dCBpcyB0aGUKKyAqIGZpbmFsIGJsb2NrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgZnJvbSB0aGUgfGlufC4KKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBpdCByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlCisgKiByZXR1cm4gY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAKKyAqICAgICBEZWNvZGluZyBwcm9jZXNzIGhhcyBmYWlsZWQuCisgKi8KK3NzaXplX3QgbmdodHRwMl9oZF9odWZmX2RlY29kZShuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2J1ZiAqYnVmLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY2xlbiwgaW50IGZpbik7CisKKy8qCisgKiBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2ZhaWx1cmVfc3RhdGUgcmV0dXJucyBub256ZXJvIGlmIHxjdHh8CisgKiBpbmRpY2F0ZXMgdGhhdCBodWZmbWFuIGRlY29kaW5nIGNvbnRleHQgaXMgaW4gZmFpbHVyZSBzdGF0ZS4KKyAqLworaW50IG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfZmFpbHVyZV9zdGF0ZShuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQgKmN0eCk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX0hEX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGRfaHVmZm1hbi5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZF9odWZmbWFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5MGY0OQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGRfaHVmZm1hbi5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX2hkX2h1ZmZtYW4uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX2hkLmgiCisjaW5jbHVkZSAibmdodHRwMl9uZXQuaCIKKworc2l6ZV90IG5naHR0cDJfaGRfaHVmZl9lbmNvZGVfY291bnQoY29uc3QgdWludDhfdCAqc3JjLCBzaXplX3QgbGVuKSB7CisgIHNpemVfdCBpOworICBzaXplX3QgbmJpdHMgPSAwOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgIG5iaXRzICs9IGh1ZmZfc3ltX3RhYmxlW3NyY1tpXV0ubmJpdHM7CisgIH0KKyAgLyogcGFkIHRoZSBwcmVmaXggb2YgRU9TICgyNTYpICovCisgIHJldHVybiAobmJpdHMgKyA3KSAvIDg7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2h1ZmZfZW5jb2RlKG5naHR0cDJfYnVmcyAqYnVmcywgY29uc3QgdWludDhfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY2xlbikgeworICBjb25zdCBuZ2h0dHAyX2h1ZmZfc3ltICpzeW07CisgIGNvbnN0IHVpbnQ4X3QgKmVuZCA9IHNyYyArIHNyY2xlbjsKKyAgdWludDY0X3QgY29kZSA9IDA7CisgIHVpbnQzMl90IHg7CisgIHNpemVfdCBuYml0cyA9IDA7CisgIHNpemVfdCBhdmFpbDsKKyAgaW50IHJ2OworCisgIGF2YWlsID0gbmdodHRwMl9idWZzX2N1cl9hdmFpbChidWZzKTsKKworICBmb3IgKDsgc3JjICE9IGVuZDspIHsKKyAgICBzeW0gPSAmaHVmZl9zeW1fdGFibGVbKnNyYysrXTsKKyAgICBjb2RlIHw9ICh1aW50NjRfdClzeW0tPmNvZGUgPDwgKDMyIC0gbmJpdHMpOworICAgIG5iaXRzICs9IHN5bS0+bmJpdHM7CisgICAgaWYgKG5iaXRzIDwgMzIpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoYXZhaWwgPj0gNCkgeworICAgICAgeCA9IGh0b25sKCh1aW50MzJfdCkoY29kZSA+PiAzMikpOworICAgICAgbWVtY3B5KGJ1ZnMtPmN1ci0+YnVmLmxhc3QsICZ4LCA0KTsKKyAgICAgIGJ1ZnMtPmN1ci0+YnVmLmxhc3QgKz0gNDsKKyAgICAgIGF2YWlsIC09IDQ7CisgICAgICBjb2RlIDw8PSAzMjsKKyAgICAgIG5iaXRzIC09IDMyOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgZm9yICg7IG5iaXRzID49IDg7KSB7CisgICAgICBydiA9IG5naHR0cDJfYnVmc19hZGRiKGJ1ZnMsICh1aW50OF90KShjb2RlID4+IDU2KSk7CisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgICBjb2RlIDw8PSA4OworICAgICAgbmJpdHMgLT0gODsKKyAgICB9CisKKyAgICBhdmFpbCA9IG5naHR0cDJfYnVmc19jdXJfYXZhaWwoYnVmcyk7CisgIH0KKworICBmb3IgKDsgbmJpdHMgPj0gODspIHsKKyAgICBydiA9IG5naHR0cDJfYnVmc19hZGRiKGJ1ZnMsICh1aW50OF90KShjb2RlID4+IDU2KSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgY29kZSA8PD0gODsKKyAgICBuYml0cyAtPSA4OworICB9CisKKyAgaWYgKG5iaXRzKSB7CisgICAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkYigKKyAgICAgICAgYnVmcywgKHVpbnQ4X3QpKCh1aW50OF90KShjb2RlID4+IDU2KSB8ICgoMSA8PCAoOCAtIG5iaXRzKSkgLSAxKSkpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9oZF9odWZmX2RlY29kZV9jb250ZXh0X2luaXQobmdodHRwMl9oZF9odWZmX2RlY29kZV9jb250ZXh0ICpjdHgpIHsKKyAgY3R4LT5mc3RhdGUgPSBOR0hUVFAyX0hVRkZfQUNDRVBURUQ7Cit9CisKK3NzaXplX3QgbmdodHRwMl9oZF9odWZmX2RlY29kZShuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2J1ZiAqYnVmLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY2xlbiwgaW50IGZpbmFsKSB7CisgIGNvbnN0IHVpbnQ4X3QgKmVuZCA9IHNyYyArIHNyY2xlbjsKKyAgbmdodHRwMl9odWZmX2RlY29kZSBub2RlID0ge2N0eC0+ZnN0YXRlLCAwfTsKKyAgY29uc3QgbmdodHRwMl9odWZmX2RlY29kZSAqdCA9ICZub2RlOworICB1aW50OF90IGM7CisKKyAgLyogV2UgdXNlIHRoZSBkZWNvZGluZyBhbGdvcml0aG0gZGVzY3JpYmVkIGluCisgICAgIGh0dHA6Ly9ncmFwaGljcy5pY3MudWNpLmVkdS9wdWIvUHJlZml4LnBkZiAqLworICBmb3IgKDsgc3JjICE9IGVuZDspIHsKKyAgICBjID0gKnNyYysrOworICAgIHQgPSAmaHVmZl9kZWNvZGVfdGFibGVbdC0+ZnN0YXRlICYgMHgxZmZdW2MgPj4gNF07CisgICAgaWYgKHQtPmZzdGF0ZSAmIE5HSFRUUDJfSFVGRl9TWU0pIHsKKyAgICAgICpidWYtPmxhc3QrKyA9IHQtPnN5bTsKKyAgICB9CisKKyAgICB0ID0gJmh1ZmZfZGVjb2RlX3RhYmxlW3QtPmZzdGF0ZSAmIDB4MWZmXVtjICYgMHhmXTsKKyAgICBpZiAodC0+ZnN0YXRlICYgTkdIVFRQMl9IVUZGX1NZTSkgeworICAgICAgKmJ1Zi0+bGFzdCsrID0gdC0+c3ltOworICAgIH0KKyAgfQorCisgIGN0eC0+ZnN0YXRlID0gdC0+ZnN0YXRlOworCisgIGlmIChmaW5hbCAmJiAhKGN0eC0+ZnN0YXRlICYgTkdIVFRQMl9IVUZGX0FDQ0VQVEVEKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIHJldHVybiAoc3NpemVfdClzcmNsZW47Cit9CisKK2ludCBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2ZhaWx1cmVfc3RhdGUobmdodHRwMl9oZF9odWZmX2RlY29kZV9jb250ZXh0ICpjdHgpIHsKKyAgcmV0dXJuIGN0eC0+ZnN0YXRlID09IDB4MTAwOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZF9odWZmbWFuLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkX2h1ZmZtYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmZkNTMxCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZF9odWZmbWFuLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfSERfSFVGRk1BTl9ICisjZGVmaW5lIE5HSFRUUDJfSERfSFVGRk1BTl9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKwordHlwZWRlZiBlbnVtIHsKKyAgLyogRlNBIGFjY2VwdHMgdGhpcyBzdGF0ZSBhcyB0aGUgZW5kIG9mIGh1ZmZtYW4gZW5jb2RpbmcKKyAgICAgc2VxdWVuY2UuICovCisgIE5HSFRUUDJfSFVGRl9BQ0NFUFRFRCA9IDEgPDwgMTQsCisgIC8qIFRoaXMgc3RhdGUgZW1pdHMgc3ltYm9sICovCisgIE5HSFRUUDJfSFVGRl9TWU0gPSAxIDw8IDE1LAorfSBuZ2h0dHAyX2h1ZmZfZGVjb2RlX2ZsYWc7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogZnN0YXRlIGlzIHRoZSBjdXJyZW50IGh1ZmZtYW4gZGVjb2Rpbmcgc3RhdGUsIHdoaWNoIGlzIGFjdHVhbGx5CisgICAgIHRoZSBub2RlIElEIG9mIGludGVybmFsIGh1ZmZtYW4gdHJlZSB3aXRoCisgICAgIG5naHR0cDJfaHVmZl9kZWNvZGVfZmxhZyBPUi1lZC4gIFdlIGhhdmUgMjU3IGxlYWYgbm9kZXMsIGJ1dCB0aGV5CisgICAgIGFyZSBpZGVudGljYWwgdG8gcm9vdCBub2RlIG90aGVyIHRoYW4gZW1pdHRpbmcgYSBzeW1ib2wsIHNvIHdlCisgICAgIGhhdmUgMjU2IGludGVybmFsIG5vZGVzIFsxLi4yNTVdLCBpbmNsdXNpdmUuICBUaGUgbm9kZSBJRCAyNTYgaXMKKyAgICAgYSBzcGVjaWFsIG5vZGUgYW5kIGl0IGlzIGEgdGVybWluYWwgc3RhdGUgdGhhdCBtZWFucyBkZWNvZGluZworICAgICBmYWlsZWQuICovCisgIHVpbnQxNl90IGZzdGF0ZTsKKyAgLyogc3ltYm9sIGlmIE5HSFRUUDJfSFVGRl9TWU0gZmxhZyBzZXQgKi8KKyAgdWludDhfdCBzeW07Cit9IG5naHR0cDJfaHVmZl9kZWNvZGU7CisKK3R5cGVkZWYgbmdodHRwMl9odWZmX2RlY29kZSBodWZmX2RlY29kZV90YWJsZV90eXBlWzE2XTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBmc3RhdGUgaXMgdGhlIGN1cnJlbnQgaHVmZm1hbiBkZWNvZGluZyBzdGF0ZS4gKi8KKyAgdWludDE2X3QgZnN0YXRlOworfSBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogVGhlIG51bWJlciBvZiBiaXRzIGluIHRoaXMgY29kZSAqLworICB1aW50MzJfdCBuYml0czsKKyAgLyogSHVmZm1hbiBjb2RlIGFsaWduZWQgdG8gTFNCICovCisgIHVpbnQzMl90IGNvZGU7Cit9IG5naHR0cDJfaHVmZl9zeW07CisKK2V4dGVybiBjb25zdCBuZ2h0dHAyX2h1ZmZfc3ltIGh1ZmZfc3ltX3RhYmxlW107CitleHRlcm4gY29uc3QgbmdodHRwMl9odWZmX2RlY29kZSBodWZmX2RlY29kZV90YWJsZVtdWzE2XTsKKworI2VuZGlmIC8qIE5HSFRUUDJfSERfSFVGRk1BTl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkX2h1ZmZtYW5fZGF0YS5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZF9odWZmbWFuX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJlMTNmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZF9odWZmbWFuX2RhdGEuYwpAQCAtMCwwICsxLDQ5ODAgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfaGRfaHVmZm1hbi5oIgorCisvKiBHZW5lcmF0ZWQgYnkgbWtodWZmdGJsLnB5ICovCisKK2NvbnN0IG5naHR0cDJfaHVmZl9zeW0gaHVmZl9zeW1fdGFibGVbXSA9IHsKKyAgICB7MTMsIDB4ZmZjMDAwMDB1fSwgezIzLCAweGZmZmZiMDAwdX0sIHsyOCwgMHhmZmZmZmUyMHV9LCB7MjgsIDB4ZmZmZmZlMzB1fSwKKyAgICB7MjgsIDB4ZmZmZmZlNDB1fSwgezI4LCAweGZmZmZmZTUwdX0sIHsyOCwgMHhmZmZmZmU2MHV9LCB7MjgsIDB4ZmZmZmZlNzB1fSwKKyAgICB7MjgsIDB4ZmZmZmZlODB1fSwgezI0LCAweGZmZmZlYTAwdX0sIHszMCwgMHhmZmZmZmZmMHV9LCB7MjgsIDB4ZmZmZmZlOTB1fSwKKyAgICB7MjgsIDB4ZmZmZmZlYTB1fSwgezMwLCAweGZmZmZmZmY0dX0sIHsyOCwgMHhmZmZmZmViMHV9LCB7MjgsIDB4ZmZmZmZlYzB1fSwKKyAgICB7MjgsIDB4ZmZmZmZlZDB1fSwgezI4LCAweGZmZmZmZWUwdX0sIHsyOCwgMHhmZmZmZmVmMHV9LCB7MjgsIDB4ZmZmZmZmMDB1fSwKKyAgICB7MjgsIDB4ZmZmZmZmMTB1fSwgezI4LCAweGZmZmZmZjIwdX0sIHszMCwgMHhmZmZmZmZmOHV9LCB7MjgsIDB4ZmZmZmZmMzB1fSwKKyAgICB7MjgsIDB4ZmZmZmZmNDB1fSwgezI4LCAweGZmZmZmZjUwdX0sIHsyOCwgMHhmZmZmZmY2MHV9LCB7MjgsIDB4ZmZmZmZmNzB1fSwKKyAgICB7MjgsIDB4ZmZmZmZmODB1fSwgezI4LCAweGZmZmZmZjkwdX0sIHsyOCwgMHhmZmZmZmZhMHV9LCB7MjgsIDB4ZmZmZmZmYjB1fSwKKyAgICB7NiwgMHg1MDAwMDAwMHV9LCAgezEwLCAweGZlMDAwMDAwdX0sIHsxMCwgMHhmZTQwMDAwMHV9LCB7MTIsIDB4ZmZhMDAwMDB1fSwKKyAgICB7MTMsIDB4ZmZjODAwMDB1fSwgezYsIDB4NTQwMDAwMDB1fSwgIHs4LCAweGY4MDAwMDAwdX0sICB7MTEsIDB4ZmY0MDAwMDB1fSwKKyAgICB7MTAsIDB4ZmU4MDAwMDB1fSwgezEwLCAweGZlYzAwMDAwdX0sIHs4LCAweGY5MDAwMDAwdX0sICB7MTEsIDB4ZmY2MDAwMDB1fSwKKyAgICB7OCwgMHhmYTAwMDAwMHV9LCAgezYsIDB4NTgwMDAwMDB1fSwgIHs2LCAweDVjMDAwMDAwdX0sICB7NiwgMHg2MDAwMDAwMHV9LAorICAgIHs1LCAweDB1fSwgICAgICAgICB7NSwgMHg4MDAwMDAwdX0sICAgezUsIDB4MTAwMDAwMDB1fSwgIHs2LCAweDY0MDAwMDAwdX0sCisgICAgezYsIDB4NjgwMDAwMDB1fSwgIHs2LCAweDZjMDAwMDAwdX0sICB7NiwgMHg3MDAwMDAwMHV9LCAgezYsIDB4NzQwMDAwMDB1fSwKKyAgICB7NiwgMHg3ODAwMDAwMHV9LCAgezYsIDB4N2MwMDAwMDB1fSwgIHs3LCAweGI4MDAwMDAwdX0sICB7OCwgMHhmYjAwMDAwMHV9LAorICAgIHsxNSwgMHhmZmY4MDAwMHV9LCB7NiwgMHg4MDAwMDAwMHV9LCAgezEyLCAweGZmYjAwMDAwdX0sIHsxMCwgMHhmZjAwMDAwMHV9LAorICAgIHsxMywgMHhmZmQwMDAwMHV9LCB7NiwgMHg4NDAwMDAwMHV9LCAgezcsIDB4YmEwMDAwMDB1fSwgIHs3LCAweGJjMDAwMDAwdX0sCisgICAgezcsIDB4YmUwMDAwMDB1fSwgIHs3LCAweGMwMDAwMDAwdX0sICB7NywgMHhjMjAwMDAwMHV9LCAgezcsIDB4YzQwMDAwMDB1fSwKKyAgICB7NywgMHhjNjAwMDAwMHV9LCAgezcsIDB4YzgwMDAwMDB1fSwgIHs3LCAweGNhMDAwMDAwdX0sICB7NywgMHhjYzAwMDAwMHV9LAorICAgIHs3LCAweGNlMDAwMDAwdX0sICB7NywgMHhkMDAwMDAwMHV9LCAgezcsIDB4ZDIwMDAwMDB1fSwgIHs3LCAweGQ0MDAwMDAwdX0sCisgICAgezcsIDB4ZDYwMDAwMDB1fSwgIHs3LCAweGQ4MDAwMDAwdX0sICB7NywgMHhkYTAwMDAwMHV9LCAgezcsIDB4ZGMwMDAwMDB1fSwKKyAgICB7NywgMHhkZTAwMDAwMHV9LCAgezcsIDB4ZTAwMDAwMDB1fSwgIHs3LCAweGUyMDAwMDAwdX0sICB7NywgMHhlNDAwMDAwMHV9LAorICAgIHs4LCAweGZjMDAwMDAwdX0sICB7NywgMHhlNjAwMDAwMHV9LCAgezgsIDB4ZmQwMDAwMDB1fSwgIHsxMywgMHhmZmQ4MDAwMHV9LAorICAgIHsxOSwgMHhmZmZlMDAwMHV9LCB7MTMsIDB4ZmZlMDAwMDB1fSwgezE0LCAweGZmZjAwMDAwdX0sIHs2LCAweDg4MDAwMDAwdX0sCisgICAgezE1LCAweGZmZmEwMDAwdX0sIHs1LCAweDE4MDAwMDAwdX0sICB7NiwgMHg4YzAwMDAwMHV9LCAgezUsIDB4MjAwMDAwMDB1fSwKKyAgICB7NiwgMHg5MDAwMDAwMHV9LCAgezUsIDB4MjgwMDAwMDB1fSwgIHs2LCAweDk0MDAwMDAwdX0sICB7NiwgMHg5ODAwMDAwMHV9LAorICAgIHs2LCAweDljMDAwMDAwdX0sICB7NSwgMHgzMDAwMDAwMHV9LCAgezcsIDB4ZTgwMDAwMDB1fSwgIHs3LCAweGVhMDAwMDAwdX0sCisgICAgezYsIDB4YTAwMDAwMDB1fSwgIHs2LCAweGE0MDAwMDAwdX0sICB7NiwgMHhhODAwMDAwMHV9LCAgezUsIDB4MzgwMDAwMDB1fSwKKyAgICB7NiwgMHhhYzAwMDAwMHV9LCAgezcsIDB4ZWMwMDAwMDB1fSwgIHs2LCAweGIwMDAwMDAwdX0sICB7NSwgMHg0MDAwMDAwMHV9LAorICAgIHs1LCAweDQ4MDAwMDAwdX0sICB7NiwgMHhiNDAwMDAwMHV9LCAgezcsIDB4ZWUwMDAwMDB1fSwgIHs3LCAweGYwMDAwMDAwdX0sCisgICAgezcsIDB4ZjIwMDAwMDB1fSwgIHs3LCAweGY0MDAwMDAwdX0sICB7NywgMHhmNjAwMDAwMHV9LCAgezE1LCAweGZmZmMwMDAwdX0sCisgICAgezExLCAweGZmODAwMDAwdX0sIHsxNCwgMHhmZmY0MDAwMHV9LCB7MTMsIDB4ZmZlODAwMDB1fSwgezI4LCAweGZmZmZmZmMwdX0sCisgICAgezIwLCAweGZmZmU2MDAwdX0sIHsyMiwgMHhmZmZmNDgwMHV9LCB7MjAsIDB4ZmZmZTcwMDB1fSwgezIwLCAweGZmZmU4MDAwdX0sCisgICAgezIyLCAweGZmZmY0YzAwdX0sIHsyMiwgMHhmZmZmNTAwMHV9LCB7MjIsIDB4ZmZmZjU0MDB1fSwgezIzLCAweGZmZmZiMjAwdX0sCisgICAgezIyLCAweGZmZmY1ODAwdX0sIHsyMywgMHhmZmZmYjQwMHV9LCB7MjMsIDB4ZmZmZmI2MDB1fSwgezIzLCAweGZmZmZiODAwdX0sCisgICAgezIzLCAweGZmZmZiYTAwdX0sIHsyMywgMHhmZmZmYmMwMHV9LCB7MjQsIDB4ZmZmZmViMDB1fSwgezIzLCAweGZmZmZiZTAwdX0sCisgICAgezI0LCAweGZmZmZlYzAwdX0sIHsyNCwgMHhmZmZmZWQwMHV9LCB7MjIsIDB4ZmZmZjVjMDB1fSwgezIzLCAweGZmZmZjMDAwdX0sCisgICAgezI0LCAweGZmZmZlZTAwdX0sIHsyMywgMHhmZmZmYzIwMHV9LCB7MjMsIDB4ZmZmZmM0MDB1fSwgezIzLCAweGZmZmZjNjAwdX0sCisgICAgezIzLCAweGZmZmZjODAwdX0sIHsyMSwgMHhmZmZlZTAwMHV9LCB7MjIsIDB4ZmZmZjYwMDB1fSwgezIzLCAweGZmZmZjYTAwdX0sCisgICAgezIyLCAweGZmZmY2NDAwdX0sIHsyMywgMHhmZmZmY2MwMHV9LCB7MjMsIDB4ZmZmZmNlMDB1fSwgezI0LCAweGZmZmZlZjAwdX0sCisgICAgezIyLCAweGZmZmY2ODAwdX0sIHsyMSwgMHhmZmZlZTgwMHV9LCB7MjAsIDB4ZmZmZTkwMDB1fSwgezIyLCAweGZmZmY2YzAwdX0sCisgICAgezIyLCAweGZmZmY3MDAwdX0sIHsyMywgMHhmZmZmZDAwMHV9LCB7MjMsIDB4ZmZmZmQyMDB1fSwgezIxLCAweGZmZmVmMDAwdX0sCisgICAgezIzLCAweGZmZmZkNDAwdX0sIHsyMiwgMHhmZmZmNzQwMHV9LCB7MjIsIDB4ZmZmZjc4MDB1fSwgezI0LCAweGZmZmZmMDAwdX0sCisgICAgezIxLCAweGZmZmVmODAwdX0sIHsyMiwgMHhmZmZmN2MwMHV9LCB7MjMsIDB4ZmZmZmQ2MDB1fSwgezIzLCAweGZmZmZkODAwdX0sCisgICAgezIxLCAweGZmZmYwMDAwdX0sIHsyMSwgMHhmZmZmMDgwMHV9LCB7MjIsIDB4ZmZmZjgwMDB1fSwgezIxLCAweGZmZmYxMDAwdX0sCisgICAgezIzLCAweGZmZmZkYTAwdX0sIHsyMiwgMHhmZmZmODQwMHV9LCB7MjMsIDB4ZmZmZmRjMDB1fSwgezIzLCAweGZmZmZkZTAwdX0sCisgICAgezIwLCAweGZmZmVhMDAwdX0sIHsyMiwgMHhmZmZmODgwMHV9LCB7MjIsIDB4ZmZmZjhjMDB1fSwgezIyLCAweGZmZmY5MDAwdX0sCisgICAgezIzLCAweGZmZmZlMDAwdX0sIHsyMiwgMHhmZmZmOTQwMHV9LCB7MjIsIDB4ZmZmZjk4MDB1fSwgezIzLCAweGZmZmZlMjAwdX0sCisgICAgezI2LCAweGZmZmZmODAwdX0sIHsyNiwgMHhmZmZmZjg0MHV9LCB7MjAsIDB4ZmZmZWIwMDB1fSwgezE5LCAweGZmZmUyMDAwdX0sCisgICAgezIyLCAweGZmZmY5YzAwdX0sIHsyMywgMHhmZmZmZTQwMHV9LCB7MjIsIDB4ZmZmZmEwMDB1fSwgezI1LCAweGZmZmZmNjAwdX0sCisgICAgezI2LCAweGZmZmZmODgwdX0sIHsyNiwgMHhmZmZmZjhjMHV9LCB7MjYsIDB4ZmZmZmY5MDB1fSwgezI3LCAweGZmZmZmYmMwdX0sCisgICAgezI3LCAweGZmZmZmYmUwdX0sIHsyNiwgMHhmZmZmZjk0MHV9LCB7MjQsIDB4ZmZmZmYxMDB1fSwgezI1LCAweGZmZmZmNjgwdX0sCisgICAgezE5LCAweGZmZmU0MDAwdX0sIHsyMSwgMHhmZmZmMTgwMHV9LCB7MjYsIDB4ZmZmZmY5ODB1fSwgezI3LCAweGZmZmZmYzAwdX0sCisgICAgezI3LCAweGZmZmZmYzIwdX0sIHsyNiwgMHhmZmZmZjljMHV9LCB7MjcsIDB4ZmZmZmZjNDB1fSwgezI0LCAweGZmZmZmMjAwdX0sCisgICAgezIxLCAweGZmZmYyMDAwdX0sIHsyMSwgMHhmZmZmMjgwMHV9LCB7MjYsIDB4ZmZmZmZhMDB1fSwgezI2LCAweGZmZmZmYTQwdX0sCisgICAgezI4LCAweGZmZmZmZmQwdX0sIHsyNywgMHhmZmZmZmM2MHV9LCB7MjcsIDB4ZmZmZmZjODB1fSwgezI3LCAweGZmZmZmY2EwdX0sCisgICAgezIwLCAweGZmZmVjMDAwdX0sIHsyNCwgMHhmZmZmZjMwMHV9LCB7MjAsIDB4ZmZmZWQwMDB1fSwgezIxLCAweGZmZmYzMDAwdX0sCisgICAgezIyLCAweGZmZmZhNDAwdX0sIHsyMSwgMHhmZmZmMzgwMHV9LCB7MjEsIDB4ZmZmZjQwMDB1fSwgezIzLCAweGZmZmZlNjAwdX0sCisgICAgezIyLCAweGZmZmZhODAwdX0sIHsyMiwgMHhmZmZmYWMwMHV9LCB7MjUsIDB4ZmZmZmY3MDB1fSwgezI1LCAweGZmZmZmNzgwdX0sCisgICAgezI0LCAweGZmZmZmNDAwdX0sIHsyNCwgMHhmZmZmZjUwMHV9LCB7MjYsIDB4ZmZmZmZhODB1fSwgezIzLCAweGZmZmZlODAwdX0sCisgICAgezI2LCAweGZmZmZmYWMwdX0sIHsyNywgMHhmZmZmZmNjMHV9LCB7MjYsIDB4ZmZmZmZiMDB1fSwgezI2LCAweGZmZmZmYjQwdX0sCisgICAgezI3LCAweGZmZmZmY2UwdX0sIHsyNywgMHhmZmZmZmQwMHV9LCB7MjcsIDB4ZmZmZmZkMjB1fSwgezI3LCAweGZmZmZmZDQwdX0sCisgICAgezI3LCAweGZmZmZmZDYwdX0sIHsyOCwgMHhmZmZmZmZlMHV9LCB7MjcsIDB4ZmZmZmZkODB1fSwgezI3LCAweGZmZmZmZGEwdX0sCisgICAgezI3LCAweGZmZmZmZGMwdX0sIHsyNywgMHhmZmZmZmRlMHV9LCB7MjcsIDB4ZmZmZmZlMDB1fSwgezI2LCAweGZmZmZmYjgwdX0sCisgICAgezMwLCAweGZmZmZmZmZjdX19OworCitjb25zdCBuZ2h0dHAyX2h1ZmZfZGVjb2RlIGh1ZmZfZGVjb2RlX3RhYmxlW11bMTZdID0geworICAgIC8qIDAgKi8KKyAgICB7CisgICAgICAgIHsweDA0LCAwfSwKKyAgICAgICAgezB4MDUsIDB9LAorICAgICAgICB7MHgwNywgMH0sCisgICAgICAgIHsweDA4LCAwfSwKKyAgICAgICAgezB4MGIsIDB9LAorICAgICAgICB7MHgwYywgMH0sCisgICAgICAgIHsweDEwLCAwfSwKKyAgICAgICAgezB4MTMsIDB9LAorICAgICAgICB7MHgxOSwgMH0sCisgICAgICAgIHsweDFjLCAwfSwKKyAgICAgICAgezB4MjAsIDB9LAorICAgICAgICB7MHgyMywgMH0sCisgICAgICAgIHsweDJhLCAwfSwKKyAgICAgICAgezB4MzEsIDB9LAorICAgICAgICB7MHgzOSwgMH0sCisgICAgICAgIHsweDQwNDAsIDB9LAorICAgIH0sCisgICAgLyogMSAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgNDh9LAorICAgICAgICB7MHhjMDAwLCA0OX0sCisgICAgICAgIHsweGMwMDAsIDUwfSwKKyAgICAgICAgezB4YzAwMCwgOTd9LAorICAgICAgICB7MHhjMDAwLCA5OX0sCisgICAgICAgIHsweGMwMDAsIDEwMX0sCisgICAgICAgIHsweGMwMDAsIDEwNX0sCisgICAgICAgIHsweGMwMDAsIDExMX0sCisgICAgICAgIHsweGMwMDAsIDExNX0sCisgICAgICAgIHsweGMwMDAsIDExNn0sCisgICAgICAgIHsweDBkLCAwfSwKKyAgICAgICAgezB4MGUsIDB9LAorICAgICAgICB7MHgxMSwgMH0sCisgICAgICAgIHsweDEyLCAwfSwKKyAgICAgICAgezB4MTQsIDB9LAorICAgICAgICB7MHgxNSwgMH0sCisgICAgfSwKKyAgICAvKiAyICovCisgICAgeworICAgICAgICB7MHg4MDAxLCA0OH0sCisgICAgICAgIHsweGMwMTYsIDQ4fSwKKyAgICAgICAgezB4ODAwMSwgNDl9LAorICAgICAgICB7MHhjMDE2LCA0OX0sCisgICAgICAgIHsweDgwMDEsIDUwfSwKKyAgICAgICAgezB4YzAxNiwgNTB9LAorICAgICAgICB7MHg4MDAxLCA5N30sCisgICAgICAgIHsweGMwMTYsIDk3fSwKKyAgICAgICAgezB4ODAwMSwgOTl9LAorICAgICAgICB7MHhjMDE2LCA5OX0sCisgICAgICAgIHsweDgwMDEsIDEwMX0sCisgICAgICAgIHsweGMwMTYsIDEwMX0sCisgICAgICAgIHsweDgwMDEsIDEwNX0sCisgICAgICAgIHsweGMwMTYsIDEwNX0sCisgICAgICAgIHsweDgwMDEsIDExMX0sCisgICAgICAgIHsweGMwMTYsIDExMX0sCisgICAgfSwKKyAgICAvKiAzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA0OH0sCisgICAgICAgIHsweDgwMDksIDQ4fSwKKyAgICAgICAgezB4ODAxNywgNDh9LAorICAgICAgICB7MHhjMDI4LCA0OH0sCisgICAgICAgIHsweDgwMDIsIDQ5fSwKKyAgICAgICAgezB4ODAwOSwgNDl9LAorICAgICAgICB7MHg4MDE3LCA0OX0sCisgICAgICAgIHsweGMwMjgsIDQ5fSwKKyAgICAgICAgezB4ODAwMiwgNTB9LAorICAgICAgICB7MHg4MDA5LCA1MH0sCisgICAgICAgIHsweDgwMTcsIDUwfSwKKyAgICAgICAgezB4YzAyOCwgNTB9LAorICAgICAgICB7MHg4MDAyLCA5N30sCisgICAgICAgIHsweDgwMDksIDk3fSwKKyAgICAgICAgezB4ODAxNywgOTd9LAorICAgICAgICB7MHhjMDI4LCA5N30sCisgICAgfSwKKyAgICAvKiA0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA0OH0sCisgICAgICAgIHsweDgwMDYsIDQ4fSwKKyAgICAgICAgezB4ODAwYSwgNDh9LAorICAgICAgICB7MHg4MDBmLCA0OH0sCisgICAgICAgIHsweDgwMTgsIDQ4fSwKKyAgICAgICAgezB4ODAxZiwgNDh9LAorICAgICAgICB7MHg4MDI5LCA0OH0sCisgICAgICAgIHsweGMwMzgsIDQ4fSwKKyAgICAgICAgezB4ODAwMywgNDl9LAorICAgICAgICB7MHg4MDA2LCA0OX0sCisgICAgICAgIHsweDgwMGEsIDQ5fSwKKyAgICAgICAgezB4ODAwZiwgNDl9LAorICAgICAgICB7MHg4MDE4LCA0OX0sCisgICAgICAgIHsweDgwMWYsIDQ5fSwKKyAgICAgICAgezB4ODAyOSwgNDl9LAorICAgICAgICB7MHhjMDM4LCA0OX0sCisgICAgfSwKKyAgICAvKiA1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA1MH0sCisgICAgICAgIHsweDgwMDYsIDUwfSwKKyAgICAgICAgezB4ODAwYSwgNTB9LAorICAgICAgICB7MHg4MDBmLCA1MH0sCisgICAgICAgIHsweDgwMTgsIDUwfSwKKyAgICAgICAgezB4ODAxZiwgNTB9LAorICAgICAgICB7MHg4MDI5LCA1MH0sCisgICAgICAgIHsweGMwMzgsIDUwfSwKKyAgICAgICAgezB4ODAwMywgOTd9LAorICAgICAgICB7MHg4MDA2LCA5N30sCisgICAgICAgIHsweDgwMGEsIDk3fSwKKyAgICAgICAgezB4ODAwZiwgOTd9LAorICAgICAgICB7MHg4MDE4LCA5N30sCisgICAgICAgIHsweDgwMWYsIDk3fSwKKyAgICAgICAgezB4ODAyOSwgOTd9LAorICAgICAgICB7MHhjMDM4LCA5N30sCisgICAgfSwKKyAgICAvKiA2ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA5OX0sCisgICAgICAgIHsweDgwMDksIDk5fSwKKyAgICAgICAgezB4ODAxNywgOTl9LAorICAgICAgICB7MHhjMDI4LCA5OX0sCisgICAgICAgIHsweDgwMDIsIDEwMX0sCisgICAgICAgIHsweDgwMDksIDEwMX0sCisgICAgICAgIHsweDgwMTcsIDEwMX0sCisgICAgICAgIHsweGMwMjgsIDEwMX0sCisgICAgICAgIHsweDgwMDIsIDEwNX0sCisgICAgICAgIHsweDgwMDksIDEwNX0sCisgICAgICAgIHsweDgwMTcsIDEwNX0sCisgICAgICAgIHsweGMwMjgsIDEwNX0sCisgICAgICAgIHsweDgwMDIsIDExMX0sCisgICAgICAgIHsweDgwMDksIDExMX0sCisgICAgICAgIHsweDgwMTcsIDExMX0sCisgICAgICAgIHsweGMwMjgsIDExMX0sCisgICAgfSwKKyAgICAvKiA3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA5OX0sCisgICAgICAgIHsweDgwMDYsIDk5fSwKKyAgICAgICAgezB4ODAwYSwgOTl9LAorICAgICAgICB7MHg4MDBmLCA5OX0sCisgICAgICAgIHsweDgwMTgsIDk5fSwKKyAgICAgICAgezB4ODAxZiwgOTl9LAorICAgICAgICB7MHg4MDI5LCA5OX0sCisgICAgICAgIHsweGMwMzgsIDk5fSwKKyAgICAgICAgezB4ODAwMywgMTAxfSwKKyAgICAgICAgezB4ODAwNiwgMTAxfSwKKyAgICAgICAgezB4ODAwYSwgMTAxfSwKKyAgICAgICAgezB4ODAwZiwgMTAxfSwKKyAgICAgICAgezB4ODAxOCwgMTAxfSwKKyAgICAgICAgezB4ODAxZiwgMTAxfSwKKyAgICAgICAgezB4ODAyOSwgMTAxfSwKKyAgICAgICAgezB4YzAzOCwgMTAxfSwKKyAgICB9LAorICAgIC8qIDggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEwNX0sCisgICAgICAgIHsweDgwMDYsIDEwNX0sCisgICAgICAgIHsweDgwMGEsIDEwNX0sCisgICAgICAgIHsweDgwMGYsIDEwNX0sCisgICAgICAgIHsweDgwMTgsIDEwNX0sCisgICAgICAgIHsweDgwMWYsIDEwNX0sCisgICAgICAgIHsweDgwMjksIDEwNX0sCisgICAgICAgIHsweGMwMzgsIDEwNX0sCisgICAgICAgIHsweDgwMDMsIDExMX0sCisgICAgICAgIHsweDgwMDYsIDExMX0sCisgICAgICAgIHsweDgwMGEsIDExMX0sCisgICAgICAgIHsweDgwMGYsIDExMX0sCisgICAgICAgIHsweDgwMTgsIDExMX0sCisgICAgICAgIHsweDgwMWYsIDExMX0sCisgICAgICAgIHsweDgwMjksIDExMX0sCisgICAgICAgIHsweGMwMzgsIDExMX0sCisgICAgfSwKKyAgICAvKiA5ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxMTV9LAorICAgICAgICB7MHhjMDE2LCAxMTV9LAorICAgICAgICB7MHg4MDAxLCAxMTZ9LAorICAgICAgICB7MHhjMDE2LCAxMTZ9LAorICAgICAgICB7MHhjMDAwLCAzMn0sCisgICAgICAgIHsweGMwMDAsIDM3fSwKKyAgICAgICAgezB4YzAwMCwgNDV9LAorICAgICAgICB7MHhjMDAwLCA0Nn0sCisgICAgICAgIHsweGMwMDAsIDQ3fSwKKyAgICAgICAgezB4YzAwMCwgNTF9LAorICAgICAgICB7MHhjMDAwLCA1Mn0sCisgICAgICAgIHsweGMwMDAsIDUzfSwKKyAgICAgICAgezB4YzAwMCwgNTR9LAorICAgICAgICB7MHhjMDAwLCA1NX0sCisgICAgICAgIHsweGMwMDAsIDU2fSwKKyAgICAgICAgezB4YzAwMCwgNTd9LAorICAgIH0sCisgICAgLyogMTAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDExNX0sCisgICAgICAgIHsweDgwMDksIDExNX0sCisgICAgICAgIHsweDgwMTcsIDExNX0sCisgICAgICAgIHsweGMwMjgsIDExNX0sCisgICAgICAgIHsweDgwMDIsIDExNn0sCisgICAgICAgIHsweDgwMDksIDExNn0sCisgICAgICAgIHsweDgwMTcsIDExNn0sCisgICAgICAgIHsweGMwMjgsIDExNn0sCisgICAgICAgIHsweDgwMDEsIDMyfSwKKyAgICAgICAgezB4YzAxNiwgMzJ9LAorICAgICAgICB7MHg4MDAxLCAzN30sCisgICAgICAgIHsweGMwMTYsIDM3fSwKKyAgICAgICAgezB4ODAwMSwgNDV9LAorICAgICAgICB7MHhjMDE2LCA0NX0sCisgICAgICAgIHsweDgwMDEsIDQ2fSwKKyAgICAgICAgezB4YzAxNiwgNDZ9LAorICAgIH0sCisgICAgLyogMTEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDExNX0sCisgICAgICAgIHsweDgwMDYsIDExNX0sCisgICAgICAgIHsweDgwMGEsIDExNX0sCisgICAgICAgIHsweDgwMGYsIDExNX0sCisgICAgICAgIHsweDgwMTgsIDExNX0sCisgICAgICAgIHsweDgwMWYsIDExNX0sCisgICAgICAgIHsweDgwMjksIDExNX0sCisgICAgICAgIHsweGMwMzgsIDExNX0sCisgICAgICAgIHsweDgwMDMsIDExNn0sCisgICAgICAgIHsweDgwMDYsIDExNn0sCisgICAgICAgIHsweDgwMGEsIDExNn0sCisgICAgICAgIHsweDgwMGYsIDExNn0sCisgICAgICAgIHsweDgwMTgsIDExNn0sCisgICAgICAgIHsweDgwMWYsIDExNn0sCisgICAgICAgIHsweDgwMjksIDExNn0sCisgICAgICAgIHsweGMwMzgsIDExNn0sCisgICAgfSwKKyAgICAvKiAxMiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMzJ9LAorICAgICAgICB7MHg4MDA5LCAzMn0sCisgICAgICAgIHsweDgwMTcsIDMyfSwKKyAgICAgICAgezB4YzAyOCwgMzJ9LAorICAgICAgICB7MHg4MDAyLCAzN30sCisgICAgICAgIHsweDgwMDksIDM3fSwKKyAgICAgICAgezB4ODAxNywgMzd9LAorICAgICAgICB7MHhjMDI4LCAzN30sCisgICAgICAgIHsweDgwMDIsIDQ1fSwKKyAgICAgICAgezB4ODAwOSwgNDV9LAorICAgICAgICB7MHg4MDE3LCA0NX0sCisgICAgICAgIHsweGMwMjgsIDQ1fSwKKyAgICAgICAgezB4ODAwMiwgNDZ9LAorICAgICAgICB7MHg4MDA5LCA0Nn0sCisgICAgICAgIHsweDgwMTcsIDQ2fSwKKyAgICAgICAgezB4YzAyOCwgNDZ9LAorICAgIH0sCisgICAgLyogMTMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDMyfSwKKyAgICAgICAgezB4ODAwNiwgMzJ9LAorICAgICAgICB7MHg4MDBhLCAzMn0sCisgICAgICAgIHsweDgwMGYsIDMyfSwKKyAgICAgICAgezB4ODAxOCwgMzJ9LAorICAgICAgICB7MHg4MDFmLCAzMn0sCisgICAgICAgIHsweDgwMjksIDMyfSwKKyAgICAgICAgezB4YzAzOCwgMzJ9LAorICAgICAgICB7MHg4MDAzLCAzN30sCisgICAgICAgIHsweDgwMDYsIDM3fSwKKyAgICAgICAgezB4ODAwYSwgMzd9LAorICAgICAgICB7MHg4MDBmLCAzN30sCisgICAgICAgIHsweDgwMTgsIDM3fSwKKyAgICAgICAgezB4ODAxZiwgMzd9LAorICAgICAgICB7MHg4MDI5LCAzN30sCisgICAgICAgIHsweGMwMzgsIDM3fSwKKyAgICB9LAorICAgIC8qIDE0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA0NX0sCisgICAgICAgIHsweDgwMDYsIDQ1fSwKKyAgICAgICAgezB4ODAwYSwgNDV9LAorICAgICAgICB7MHg4MDBmLCA0NX0sCisgICAgICAgIHsweDgwMTgsIDQ1fSwKKyAgICAgICAgezB4ODAxZiwgNDV9LAorICAgICAgICB7MHg4MDI5LCA0NX0sCisgICAgICAgIHsweGMwMzgsIDQ1fSwKKyAgICAgICAgezB4ODAwMywgNDZ9LAorICAgICAgICB7MHg4MDA2LCA0Nn0sCisgICAgICAgIHsweDgwMGEsIDQ2fSwKKyAgICAgICAgezB4ODAwZiwgNDZ9LAorICAgICAgICB7MHg4MDE4LCA0Nn0sCisgICAgICAgIHsweDgwMWYsIDQ2fSwKKyAgICAgICAgezB4ODAyOSwgNDZ9LAorICAgICAgICB7MHhjMDM4LCA0Nn0sCisgICAgfSwKKyAgICAvKiAxNSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgNDd9LAorICAgICAgICB7MHhjMDE2LCA0N30sCisgICAgICAgIHsweDgwMDEsIDUxfSwKKyAgICAgICAgezB4YzAxNiwgNTF9LAorICAgICAgICB7MHg4MDAxLCA1Mn0sCisgICAgICAgIHsweGMwMTYsIDUyfSwKKyAgICAgICAgezB4ODAwMSwgNTN9LAorICAgICAgICB7MHhjMDE2LCA1M30sCisgICAgICAgIHsweDgwMDEsIDU0fSwKKyAgICAgICAgezB4YzAxNiwgNTR9LAorICAgICAgICB7MHg4MDAxLCA1NX0sCisgICAgICAgIHsweGMwMTYsIDU1fSwKKyAgICAgICAgezB4ODAwMSwgNTZ9LAorICAgICAgICB7MHhjMDE2LCA1Nn0sCisgICAgICAgIHsweDgwMDEsIDU3fSwKKyAgICAgICAgezB4YzAxNiwgNTd9LAorICAgIH0sCisgICAgLyogMTYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDQ3fSwKKyAgICAgICAgezB4ODAwOSwgNDd9LAorICAgICAgICB7MHg4MDE3LCA0N30sCisgICAgICAgIHsweGMwMjgsIDQ3fSwKKyAgICAgICAgezB4ODAwMiwgNTF9LAorICAgICAgICB7MHg4MDA5LCA1MX0sCisgICAgICAgIHsweDgwMTcsIDUxfSwKKyAgICAgICAgezB4YzAyOCwgNTF9LAorICAgICAgICB7MHg4MDAyLCA1Mn0sCisgICAgICAgIHsweDgwMDksIDUyfSwKKyAgICAgICAgezB4ODAxNywgNTJ9LAorICAgICAgICB7MHhjMDI4LCA1Mn0sCisgICAgICAgIHsweDgwMDIsIDUzfSwKKyAgICAgICAgezB4ODAwOSwgNTN9LAorICAgICAgICB7MHg4MDE3LCA1M30sCisgICAgICAgIHsweGMwMjgsIDUzfSwKKyAgICB9LAorICAgIC8qIDE3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA0N30sCisgICAgICAgIHsweDgwMDYsIDQ3fSwKKyAgICAgICAgezB4ODAwYSwgNDd9LAorICAgICAgICB7MHg4MDBmLCA0N30sCisgICAgICAgIHsweDgwMTgsIDQ3fSwKKyAgICAgICAgezB4ODAxZiwgNDd9LAorICAgICAgICB7MHg4MDI5LCA0N30sCisgICAgICAgIHsweGMwMzgsIDQ3fSwKKyAgICAgICAgezB4ODAwMywgNTF9LAorICAgICAgICB7MHg4MDA2LCA1MX0sCisgICAgICAgIHsweDgwMGEsIDUxfSwKKyAgICAgICAgezB4ODAwZiwgNTF9LAorICAgICAgICB7MHg4MDE4LCA1MX0sCisgICAgICAgIHsweDgwMWYsIDUxfSwKKyAgICAgICAgezB4ODAyOSwgNTF9LAorICAgICAgICB7MHhjMDM4LCA1MX0sCisgICAgfSwKKyAgICAvKiAxOCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNTJ9LAorICAgICAgICB7MHg4MDA2LCA1Mn0sCisgICAgICAgIHsweDgwMGEsIDUyfSwKKyAgICAgICAgezB4ODAwZiwgNTJ9LAorICAgICAgICB7MHg4MDE4LCA1Mn0sCisgICAgICAgIHsweDgwMWYsIDUyfSwKKyAgICAgICAgezB4ODAyOSwgNTJ9LAorICAgICAgICB7MHhjMDM4LCA1Mn0sCisgICAgICAgIHsweDgwMDMsIDUzfSwKKyAgICAgICAgezB4ODAwNiwgNTN9LAorICAgICAgICB7MHg4MDBhLCA1M30sCisgICAgICAgIHsweDgwMGYsIDUzfSwKKyAgICAgICAgezB4ODAxOCwgNTN9LAorICAgICAgICB7MHg4MDFmLCA1M30sCisgICAgICAgIHsweDgwMjksIDUzfSwKKyAgICAgICAgezB4YzAzOCwgNTN9LAorICAgIH0sCisgICAgLyogMTkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDU0fSwKKyAgICAgICAgezB4ODAwOSwgNTR9LAorICAgICAgICB7MHg4MDE3LCA1NH0sCisgICAgICAgIHsweGMwMjgsIDU0fSwKKyAgICAgICAgezB4ODAwMiwgNTV9LAorICAgICAgICB7MHg4MDA5LCA1NX0sCisgICAgICAgIHsweDgwMTcsIDU1fSwKKyAgICAgICAgezB4YzAyOCwgNTV9LAorICAgICAgICB7MHg4MDAyLCA1Nn0sCisgICAgICAgIHsweDgwMDksIDU2fSwKKyAgICAgICAgezB4ODAxNywgNTZ9LAorICAgICAgICB7MHhjMDI4LCA1Nn0sCisgICAgICAgIHsweDgwMDIsIDU3fSwKKyAgICAgICAgezB4ODAwOSwgNTd9LAorICAgICAgICB7MHg4MDE3LCA1N30sCisgICAgICAgIHsweGMwMjgsIDU3fSwKKyAgICB9LAorICAgIC8qIDIwICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA1NH0sCisgICAgICAgIHsweDgwMDYsIDU0fSwKKyAgICAgICAgezB4ODAwYSwgNTR9LAorICAgICAgICB7MHg4MDBmLCA1NH0sCisgICAgICAgIHsweDgwMTgsIDU0fSwKKyAgICAgICAgezB4ODAxZiwgNTR9LAorICAgICAgICB7MHg4MDI5LCA1NH0sCisgICAgICAgIHsweGMwMzgsIDU0fSwKKyAgICAgICAgezB4ODAwMywgNTV9LAorICAgICAgICB7MHg4MDA2LCA1NX0sCisgICAgICAgIHsweDgwMGEsIDU1fSwKKyAgICAgICAgezB4ODAwZiwgNTV9LAorICAgICAgICB7MHg4MDE4LCA1NX0sCisgICAgICAgIHsweDgwMWYsIDU1fSwKKyAgICAgICAgezB4ODAyOSwgNTV9LAorICAgICAgICB7MHhjMDM4LCA1NX0sCisgICAgfSwKKyAgICAvKiAyMSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNTZ9LAorICAgICAgICB7MHg4MDA2LCA1Nn0sCisgICAgICAgIHsweDgwMGEsIDU2fSwKKyAgICAgICAgezB4ODAwZiwgNTZ9LAorICAgICAgICB7MHg4MDE4LCA1Nn0sCisgICAgICAgIHsweDgwMWYsIDU2fSwKKyAgICAgICAgezB4ODAyOSwgNTZ9LAorICAgICAgICB7MHhjMDM4LCA1Nn0sCisgICAgICAgIHsweDgwMDMsIDU3fSwKKyAgICAgICAgezB4ODAwNiwgNTd9LAorICAgICAgICB7MHg4MDBhLCA1N30sCisgICAgICAgIHsweDgwMGYsIDU3fSwKKyAgICAgICAgezB4ODAxOCwgNTd9LAorICAgICAgICB7MHg4MDFmLCA1N30sCisgICAgICAgIHsweDgwMjksIDU3fSwKKyAgICAgICAgezB4YzAzOCwgNTd9LAorICAgIH0sCisgICAgLyogMjIgKi8KKyAgICB7CisgICAgICAgIHsweDFhLCAwfSwKKyAgICAgICAgezB4MWIsIDB9LAorICAgICAgICB7MHgxZCwgMH0sCisgICAgICAgIHsweDFlLCAwfSwKKyAgICAgICAgezB4MjEsIDB9LAorICAgICAgICB7MHgyMiwgMH0sCisgICAgICAgIHsweDI0LCAwfSwKKyAgICAgICAgezB4MjUsIDB9LAorICAgICAgICB7MHgyYiwgMH0sCisgICAgICAgIHsweDJlLCAwfSwKKyAgICAgICAgezB4MzIsIDB9LAorICAgICAgICB7MHgzNSwgMH0sCisgICAgICAgIHsweDNhLCAwfSwKKyAgICAgICAgezB4M2QsIDB9LAorICAgICAgICB7MHg0MSwgMH0sCisgICAgICAgIHsweDQwNDQsIDB9LAorICAgIH0sCisgICAgLyogMjMgKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDYxfSwKKyAgICAgICAgezB4YzAwMCwgNjV9LAorICAgICAgICB7MHhjMDAwLCA5NX0sCisgICAgICAgIHsweGMwMDAsIDk4fSwKKyAgICAgICAgezB4YzAwMCwgMTAwfSwKKyAgICAgICAgezB4YzAwMCwgMTAyfSwKKyAgICAgICAgezB4YzAwMCwgMTAzfSwKKyAgICAgICAgezB4YzAwMCwgMTA0fSwKKyAgICAgICAgezB4YzAwMCwgMTA4fSwKKyAgICAgICAgezB4YzAwMCwgMTA5fSwKKyAgICAgICAgezB4YzAwMCwgMTEwfSwKKyAgICAgICAgezB4YzAwMCwgMTEyfSwKKyAgICAgICAgezB4YzAwMCwgMTE0fSwKKyAgICAgICAgezB4YzAwMCwgMTE3fSwKKyAgICAgICAgezB4MjYsIDB9LAorICAgICAgICB7MHgyNywgMH0sCisgICAgfSwKKyAgICAvKiAyNCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgNjF9LAorICAgICAgICB7MHhjMDE2LCA2MX0sCisgICAgICAgIHsweDgwMDEsIDY1fSwKKyAgICAgICAgezB4YzAxNiwgNjV9LAorICAgICAgICB7MHg4MDAxLCA5NX0sCisgICAgICAgIHsweGMwMTYsIDk1fSwKKyAgICAgICAgezB4ODAwMSwgOTh9LAorICAgICAgICB7MHhjMDE2LCA5OH0sCisgICAgICAgIHsweDgwMDEsIDEwMH0sCisgICAgICAgIHsweGMwMTYsIDEwMH0sCisgICAgICAgIHsweDgwMDEsIDEwMn0sCisgICAgICAgIHsweGMwMTYsIDEwMn0sCisgICAgICAgIHsweDgwMDEsIDEwM30sCisgICAgICAgIHsweGMwMTYsIDEwM30sCisgICAgICAgIHsweDgwMDEsIDEwNH0sCisgICAgICAgIHsweGMwMTYsIDEwNH0sCisgICAgfSwKKyAgICAvKiAyNSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgNjF9LAorICAgICAgICB7MHg4MDA5LCA2MX0sCisgICAgICAgIHsweDgwMTcsIDYxfSwKKyAgICAgICAgezB4YzAyOCwgNjF9LAorICAgICAgICB7MHg4MDAyLCA2NX0sCisgICAgICAgIHsweDgwMDksIDY1fSwKKyAgICAgICAgezB4ODAxNywgNjV9LAorICAgICAgICB7MHhjMDI4LCA2NX0sCisgICAgICAgIHsweDgwMDIsIDk1fSwKKyAgICAgICAgezB4ODAwOSwgOTV9LAorICAgICAgICB7MHg4MDE3LCA5NX0sCisgICAgICAgIHsweGMwMjgsIDk1fSwKKyAgICAgICAgezB4ODAwMiwgOTh9LAorICAgICAgICB7MHg4MDA5LCA5OH0sCisgICAgICAgIHsweDgwMTcsIDk4fSwKKyAgICAgICAgezB4YzAyOCwgOTh9LAorICAgIH0sCisgICAgLyogMjYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDYxfSwKKyAgICAgICAgezB4ODAwNiwgNjF9LAorICAgICAgICB7MHg4MDBhLCA2MX0sCisgICAgICAgIHsweDgwMGYsIDYxfSwKKyAgICAgICAgezB4ODAxOCwgNjF9LAorICAgICAgICB7MHg4MDFmLCA2MX0sCisgICAgICAgIHsweDgwMjksIDYxfSwKKyAgICAgICAgezB4YzAzOCwgNjF9LAorICAgICAgICB7MHg4MDAzLCA2NX0sCisgICAgICAgIHsweDgwMDYsIDY1fSwKKyAgICAgICAgezB4ODAwYSwgNjV9LAorICAgICAgICB7MHg4MDBmLCA2NX0sCisgICAgICAgIHsweDgwMTgsIDY1fSwKKyAgICAgICAgezB4ODAxZiwgNjV9LAorICAgICAgICB7MHg4MDI5LCA2NX0sCisgICAgICAgIHsweGMwMzgsIDY1fSwKKyAgICB9LAorICAgIC8qIDI3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA5NX0sCisgICAgICAgIHsweDgwMDYsIDk1fSwKKyAgICAgICAgezB4ODAwYSwgOTV9LAorICAgICAgICB7MHg4MDBmLCA5NX0sCisgICAgICAgIHsweDgwMTgsIDk1fSwKKyAgICAgICAgezB4ODAxZiwgOTV9LAorICAgICAgICB7MHg4MDI5LCA5NX0sCisgICAgICAgIHsweGMwMzgsIDk1fSwKKyAgICAgICAgezB4ODAwMywgOTh9LAorICAgICAgICB7MHg4MDA2LCA5OH0sCisgICAgICAgIHsweDgwMGEsIDk4fSwKKyAgICAgICAgezB4ODAwZiwgOTh9LAorICAgICAgICB7MHg4MDE4LCA5OH0sCisgICAgICAgIHsweDgwMWYsIDk4fSwKKyAgICAgICAgezB4ODAyOSwgOTh9LAorICAgICAgICB7MHhjMDM4LCA5OH0sCisgICAgfSwKKyAgICAvKiAyOCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTAwfSwKKyAgICAgICAgezB4ODAwOSwgMTAwfSwKKyAgICAgICAgezB4ODAxNywgMTAwfSwKKyAgICAgICAgezB4YzAyOCwgMTAwfSwKKyAgICAgICAgezB4ODAwMiwgMTAyfSwKKyAgICAgICAgezB4ODAwOSwgMTAyfSwKKyAgICAgICAgezB4ODAxNywgMTAyfSwKKyAgICAgICAgezB4YzAyOCwgMTAyfSwKKyAgICAgICAgezB4ODAwMiwgMTAzfSwKKyAgICAgICAgezB4ODAwOSwgMTAzfSwKKyAgICAgICAgezB4ODAxNywgMTAzfSwKKyAgICAgICAgezB4YzAyOCwgMTAzfSwKKyAgICAgICAgezB4ODAwMiwgMTA0fSwKKyAgICAgICAgezB4ODAwOSwgMTA0fSwKKyAgICAgICAgezB4ODAxNywgMTA0fSwKKyAgICAgICAgezB4YzAyOCwgMTA0fSwKKyAgICB9LAorICAgIC8qIDI5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMDB9LAorICAgICAgICB7MHg4MDA2LCAxMDB9LAorICAgICAgICB7MHg4MDBhLCAxMDB9LAorICAgICAgICB7MHg4MDBmLCAxMDB9LAorICAgICAgICB7MHg4MDE4LCAxMDB9LAorICAgICAgICB7MHg4MDFmLCAxMDB9LAorICAgICAgICB7MHg4MDI5LCAxMDB9LAorICAgICAgICB7MHhjMDM4LCAxMDB9LAorICAgICAgICB7MHg4MDAzLCAxMDJ9LAorICAgICAgICB7MHg4MDA2LCAxMDJ9LAorICAgICAgICB7MHg4MDBhLCAxMDJ9LAorICAgICAgICB7MHg4MDBmLCAxMDJ9LAorICAgICAgICB7MHg4MDE4LCAxMDJ9LAorICAgICAgICB7MHg4MDFmLCAxMDJ9LAorICAgICAgICB7MHg4MDI5LCAxMDJ9LAorICAgICAgICB7MHhjMDM4LCAxMDJ9LAorICAgIH0sCisgICAgLyogMzAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEwM30sCisgICAgICAgIHsweDgwMDYsIDEwM30sCisgICAgICAgIHsweDgwMGEsIDEwM30sCisgICAgICAgIHsweDgwMGYsIDEwM30sCisgICAgICAgIHsweDgwMTgsIDEwM30sCisgICAgICAgIHsweDgwMWYsIDEwM30sCisgICAgICAgIHsweDgwMjksIDEwM30sCisgICAgICAgIHsweGMwMzgsIDEwM30sCisgICAgICAgIHsweDgwMDMsIDEwNH0sCisgICAgICAgIHsweDgwMDYsIDEwNH0sCisgICAgICAgIHsweDgwMGEsIDEwNH0sCisgICAgICAgIHsweDgwMGYsIDEwNH0sCisgICAgICAgIHsweDgwMTgsIDEwNH0sCisgICAgICAgIHsweDgwMWYsIDEwNH0sCisgICAgICAgIHsweDgwMjksIDEwNH0sCisgICAgICAgIHsweGMwMzgsIDEwNH0sCisgICAgfSwKKyAgICAvKiAzMSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMTA4fSwKKyAgICAgICAgezB4YzAxNiwgMTA4fSwKKyAgICAgICAgezB4ODAwMSwgMTA5fSwKKyAgICAgICAgezB4YzAxNiwgMTA5fSwKKyAgICAgICAgezB4ODAwMSwgMTEwfSwKKyAgICAgICAgezB4YzAxNiwgMTEwfSwKKyAgICAgICAgezB4ODAwMSwgMTEyfSwKKyAgICAgICAgezB4YzAxNiwgMTEyfSwKKyAgICAgICAgezB4ODAwMSwgMTE0fSwKKyAgICAgICAgezB4YzAxNiwgMTE0fSwKKyAgICAgICAgezB4ODAwMSwgMTE3fSwKKyAgICAgICAgezB4YzAxNiwgMTE3fSwKKyAgICAgICAgezB4YzAwMCwgNTh9LAorICAgICAgICB7MHhjMDAwLCA2Nn0sCisgICAgICAgIHsweGMwMDAsIDY3fSwKKyAgICAgICAgezB4YzAwMCwgNjh9LAorICAgIH0sCisgICAgLyogMzIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDEwOH0sCisgICAgICAgIHsweDgwMDksIDEwOH0sCisgICAgICAgIHsweDgwMTcsIDEwOH0sCisgICAgICAgIHsweGMwMjgsIDEwOH0sCisgICAgICAgIHsweDgwMDIsIDEwOX0sCisgICAgICAgIHsweDgwMDksIDEwOX0sCisgICAgICAgIHsweDgwMTcsIDEwOX0sCisgICAgICAgIHsweGMwMjgsIDEwOX0sCisgICAgICAgIHsweDgwMDIsIDExMH0sCisgICAgICAgIHsweDgwMDksIDExMH0sCisgICAgICAgIHsweDgwMTcsIDExMH0sCisgICAgICAgIHsweGMwMjgsIDExMH0sCisgICAgICAgIHsweDgwMDIsIDExMn0sCisgICAgICAgIHsweDgwMDksIDExMn0sCisgICAgICAgIHsweDgwMTcsIDExMn0sCisgICAgICAgIHsweGMwMjgsIDExMn0sCisgICAgfSwKKyAgICAvKiAzMyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTA4fSwKKyAgICAgICAgezB4ODAwNiwgMTA4fSwKKyAgICAgICAgezB4ODAwYSwgMTA4fSwKKyAgICAgICAgezB4ODAwZiwgMTA4fSwKKyAgICAgICAgezB4ODAxOCwgMTA4fSwKKyAgICAgICAgezB4ODAxZiwgMTA4fSwKKyAgICAgICAgezB4ODAyOSwgMTA4fSwKKyAgICAgICAgezB4YzAzOCwgMTA4fSwKKyAgICAgICAgezB4ODAwMywgMTA5fSwKKyAgICAgICAgezB4ODAwNiwgMTA5fSwKKyAgICAgICAgezB4ODAwYSwgMTA5fSwKKyAgICAgICAgezB4ODAwZiwgMTA5fSwKKyAgICAgICAgezB4ODAxOCwgMTA5fSwKKyAgICAgICAgezB4ODAxZiwgMTA5fSwKKyAgICAgICAgezB4ODAyOSwgMTA5fSwKKyAgICAgICAgezB4YzAzOCwgMTA5fSwKKyAgICB9LAorICAgIC8qIDM0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMTB9LAorICAgICAgICB7MHg4MDA2LCAxMTB9LAorICAgICAgICB7MHg4MDBhLCAxMTB9LAorICAgICAgICB7MHg4MDBmLCAxMTB9LAorICAgICAgICB7MHg4MDE4LCAxMTB9LAorICAgICAgICB7MHg4MDFmLCAxMTB9LAorICAgICAgICB7MHg4MDI5LCAxMTB9LAorICAgICAgICB7MHhjMDM4LCAxMTB9LAorICAgICAgICB7MHg4MDAzLCAxMTJ9LAorICAgICAgICB7MHg4MDA2LCAxMTJ9LAorICAgICAgICB7MHg4MDBhLCAxMTJ9LAorICAgICAgICB7MHg4MDBmLCAxMTJ9LAorICAgICAgICB7MHg4MDE4LCAxMTJ9LAorICAgICAgICB7MHg4MDFmLCAxMTJ9LAorICAgICAgICB7MHg4MDI5LCAxMTJ9LAorICAgICAgICB7MHhjMDM4LCAxMTJ9LAorICAgIH0sCisgICAgLyogMzUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDExNH0sCisgICAgICAgIHsweDgwMDksIDExNH0sCisgICAgICAgIHsweDgwMTcsIDExNH0sCisgICAgICAgIHsweGMwMjgsIDExNH0sCisgICAgICAgIHsweDgwMDIsIDExN30sCisgICAgICAgIHsweDgwMDksIDExN30sCisgICAgICAgIHsweDgwMTcsIDExN30sCisgICAgICAgIHsweGMwMjgsIDExN30sCisgICAgICAgIHsweDgwMDEsIDU4fSwKKyAgICAgICAgezB4YzAxNiwgNTh9LAorICAgICAgICB7MHg4MDAxLCA2Nn0sCisgICAgICAgIHsweGMwMTYsIDY2fSwKKyAgICAgICAgezB4ODAwMSwgNjd9LAorICAgICAgICB7MHhjMDE2LCA2N30sCisgICAgICAgIHsweDgwMDEsIDY4fSwKKyAgICAgICAgezB4YzAxNiwgNjh9LAorICAgIH0sCisgICAgLyogMzYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDExNH0sCisgICAgICAgIHsweDgwMDYsIDExNH0sCisgICAgICAgIHsweDgwMGEsIDExNH0sCisgICAgICAgIHsweDgwMGYsIDExNH0sCisgICAgICAgIHsweDgwMTgsIDExNH0sCisgICAgICAgIHsweDgwMWYsIDExNH0sCisgICAgICAgIHsweDgwMjksIDExNH0sCisgICAgICAgIHsweGMwMzgsIDExNH0sCisgICAgICAgIHsweDgwMDMsIDExN30sCisgICAgICAgIHsweDgwMDYsIDExN30sCisgICAgICAgIHsweDgwMGEsIDExN30sCisgICAgICAgIHsweDgwMGYsIDExN30sCisgICAgICAgIHsweDgwMTgsIDExN30sCisgICAgICAgIHsweDgwMWYsIDExN30sCisgICAgICAgIHsweDgwMjksIDExN30sCisgICAgICAgIHsweGMwMzgsIDExN30sCisgICAgfSwKKyAgICAvKiAzNyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgNTh9LAorICAgICAgICB7MHg4MDA5LCA1OH0sCisgICAgICAgIHsweDgwMTcsIDU4fSwKKyAgICAgICAgezB4YzAyOCwgNTh9LAorICAgICAgICB7MHg4MDAyLCA2Nn0sCisgICAgICAgIHsweDgwMDksIDY2fSwKKyAgICAgICAgezB4ODAxNywgNjZ9LAorICAgICAgICB7MHhjMDI4LCA2Nn0sCisgICAgICAgIHsweDgwMDIsIDY3fSwKKyAgICAgICAgezB4ODAwOSwgNjd9LAorICAgICAgICB7MHg4MDE3LCA2N30sCisgICAgICAgIHsweGMwMjgsIDY3fSwKKyAgICAgICAgezB4ODAwMiwgNjh9LAorICAgICAgICB7MHg4MDA5LCA2OH0sCisgICAgICAgIHsweDgwMTcsIDY4fSwKKyAgICAgICAgezB4YzAyOCwgNjh9LAorICAgIH0sCisgICAgLyogMzggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDU4fSwKKyAgICAgICAgezB4ODAwNiwgNTh9LAorICAgICAgICB7MHg4MDBhLCA1OH0sCisgICAgICAgIHsweDgwMGYsIDU4fSwKKyAgICAgICAgezB4ODAxOCwgNTh9LAorICAgICAgICB7MHg4MDFmLCA1OH0sCisgICAgICAgIHsweDgwMjksIDU4fSwKKyAgICAgICAgezB4YzAzOCwgNTh9LAorICAgICAgICB7MHg4MDAzLCA2Nn0sCisgICAgICAgIHsweDgwMDYsIDY2fSwKKyAgICAgICAgezB4ODAwYSwgNjZ9LAorICAgICAgICB7MHg4MDBmLCA2Nn0sCisgICAgICAgIHsweDgwMTgsIDY2fSwKKyAgICAgICAgezB4ODAxZiwgNjZ9LAorICAgICAgICB7MHg4MDI5LCA2Nn0sCisgICAgICAgIHsweGMwMzgsIDY2fSwKKyAgICB9LAorICAgIC8qIDM5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA2N30sCisgICAgICAgIHsweDgwMDYsIDY3fSwKKyAgICAgICAgezB4ODAwYSwgNjd9LAorICAgICAgICB7MHg4MDBmLCA2N30sCisgICAgICAgIHsweDgwMTgsIDY3fSwKKyAgICAgICAgezB4ODAxZiwgNjd9LAorICAgICAgICB7MHg4MDI5LCA2N30sCisgICAgICAgIHsweGMwMzgsIDY3fSwKKyAgICAgICAgezB4ODAwMywgNjh9LAorICAgICAgICB7MHg4MDA2LCA2OH0sCisgICAgICAgIHsweDgwMGEsIDY4fSwKKyAgICAgICAgezB4ODAwZiwgNjh9LAorICAgICAgICB7MHg4MDE4LCA2OH0sCisgICAgICAgIHsweDgwMWYsIDY4fSwKKyAgICAgICAgezB4ODAyOSwgNjh9LAorICAgICAgICB7MHhjMDM4LCA2OH0sCisgICAgfSwKKyAgICAvKiA0MCAqLworICAgIHsKKyAgICAgICAgezB4MmMsIDB9LAorICAgICAgICB7MHgyZCwgMH0sCisgICAgICAgIHsweDJmLCAwfSwKKyAgICAgICAgezB4MzAsIDB9LAorICAgICAgICB7MHgzMywgMH0sCisgICAgICAgIHsweDM0LCAwfSwKKyAgICAgICAgezB4MzYsIDB9LAorICAgICAgICB7MHgzNywgMH0sCisgICAgICAgIHsweDNiLCAwfSwKKyAgICAgICAgezB4M2MsIDB9LAorICAgICAgICB7MHgzZSwgMH0sCisgICAgICAgIHsweDNmLCAwfSwKKyAgICAgICAgezB4NDIsIDB9LAorICAgICAgICB7MHg0MywgMH0sCisgICAgICAgIHsweDQ1LCAwfSwKKyAgICAgICAgezB4NDA0OCwgMH0sCisgICAgfSwKKyAgICAvKiA0MSAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgNjl9LAorICAgICAgICB7MHhjMDAwLCA3MH0sCisgICAgICAgIHsweGMwMDAsIDcxfSwKKyAgICAgICAgezB4YzAwMCwgNzJ9LAorICAgICAgICB7MHhjMDAwLCA3M30sCisgICAgICAgIHsweGMwMDAsIDc0fSwKKyAgICAgICAgezB4YzAwMCwgNzV9LAorICAgICAgICB7MHhjMDAwLCA3Nn0sCisgICAgICAgIHsweGMwMDAsIDc3fSwKKyAgICAgICAgezB4YzAwMCwgNzh9LAorICAgICAgICB7MHhjMDAwLCA3OX0sCisgICAgICAgIHsweGMwMDAsIDgwfSwKKyAgICAgICAgezB4YzAwMCwgODF9LAorICAgICAgICB7MHhjMDAwLCA4Mn0sCisgICAgICAgIHsweGMwMDAsIDgzfSwKKyAgICAgICAgezB4YzAwMCwgODR9LAorICAgIH0sCisgICAgLyogNDIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDY5fSwKKyAgICAgICAgezB4YzAxNiwgNjl9LAorICAgICAgICB7MHg4MDAxLCA3MH0sCisgICAgICAgIHsweGMwMTYsIDcwfSwKKyAgICAgICAgezB4ODAwMSwgNzF9LAorICAgICAgICB7MHhjMDE2LCA3MX0sCisgICAgICAgIHsweDgwMDEsIDcyfSwKKyAgICAgICAgezB4YzAxNiwgNzJ9LAorICAgICAgICB7MHg4MDAxLCA3M30sCisgICAgICAgIHsweGMwMTYsIDczfSwKKyAgICAgICAgezB4ODAwMSwgNzR9LAorICAgICAgICB7MHhjMDE2LCA3NH0sCisgICAgICAgIHsweDgwMDEsIDc1fSwKKyAgICAgICAgezB4YzAxNiwgNzV9LAorICAgICAgICB7MHg4MDAxLCA3Nn0sCisgICAgICAgIHsweGMwMTYsIDc2fSwKKyAgICB9LAorICAgIC8qIDQzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA2OX0sCisgICAgICAgIHsweDgwMDksIDY5fSwKKyAgICAgICAgezB4ODAxNywgNjl9LAorICAgICAgICB7MHhjMDI4LCA2OX0sCisgICAgICAgIHsweDgwMDIsIDcwfSwKKyAgICAgICAgezB4ODAwOSwgNzB9LAorICAgICAgICB7MHg4MDE3LCA3MH0sCisgICAgICAgIHsweGMwMjgsIDcwfSwKKyAgICAgICAgezB4ODAwMiwgNzF9LAorICAgICAgICB7MHg4MDA5LCA3MX0sCisgICAgICAgIHsweDgwMTcsIDcxfSwKKyAgICAgICAgezB4YzAyOCwgNzF9LAorICAgICAgICB7MHg4MDAyLCA3Mn0sCisgICAgICAgIHsweDgwMDksIDcyfSwKKyAgICAgICAgezB4ODAxNywgNzJ9LAorICAgICAgICB7MHhjMDI4LCA3Mn0sCisgICAgfSwKKyAgICAvKiA0NCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNjl9LAorICAgICAgICB7MHg4MDA2LCA2OX0sCisgICAgICAgIHsweDgwMGEsIDY5fSwKKyAgICAgICAgezB4ODAwZiwgNjl9LAorICAgICAgICB7MHg4MDE4LCA2OX0sCisgICAgICAgIHsweDgwMWYsIDY5fSwKKyAgICAgICAgezB4ODAyOSwgNjl9LAorICAgICAgICB7MHhjMDM4LCA2OX0sCisgICAgICAgIHsweDgwMDMsIDcwfSwKKyAgICAgICAgezB4ODAwNiwgNzB9LAorICAgICAgICB7MHg4MDBhLCA3MH0sCisgICAgICAgIHsweDgwMGYsIDcwfSwKKyAgICAgICAgezB4ODAxOCwgNzB9LAorICAgICAgICB7MHg4MDFmLCA3MH0sCisgICAgICAgIHsweDgwMjksIDcwfSwKKyAgICAgICAgezB4YzAzOCwgNzB9LAorICAgIH0sCisgICAgLyogNDUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDcxfSwKKyAgICAgICAgezB4ODAwNiwgNzF9LAorICAgICAgICB7MHg4MDBhLCA3MX0sCisgICAgICAgIHsweDgwMGYsIDcxfSwKKyAgICAgICAgezB4ODAxOCwgNzF9LAorICAgICAgICB7MHg4MDFmLCA3MX0sCisgICAgICAgIHsweDgwMjksIDcxfSwKKyAgICAgICAgezB4YzAzOCwgNzF9LAorICAgICAgICB7MHg4MDAzLCA3Mn0sCisgICAgICAgIHsweDgwMDYsIDcyfSwKKyAgICAgICAgezB4ODAwYSwgNzJ9LAorICAgICAgICB7MHg4MDBmLCA3Mn0sCisgICAgICAgIHsweDgwMTgsIDcyfSwKKyAgICAgICAgezB4ODAxZiwgNzJ9LAorICAgICAgICB7MHg4MDI5LCA3Mn0sCisgICAgICAgIHsweGMwMzgsIDcyfSwKKyAgICB9LAorICAgIC8qIDQ2ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA3M30sCisgICAgICAgIHsweDgwMDksIDczfSwKKyAgICAgICAgezB4ODAxNywgNzN9LAorICAgICAgICB7MHhjMDI4LCA3M30sCisgICAgICAgIHsweDgwMDIsIDc0fSwKKyAgICAgICAgezB4ODAwOSwgNzR9LAorICAgICAgICB7MHg4MDE3LCA3NH0sCisgICAgICAgIHsweGMwMjgsIDc0fSwKKyAgICAgICAgezB4ODAwMiwgNzV9LAorICAgICAgICB7MHg4MDA5LCA3NX0sCisgICAgICAgIHsweDgwMTcsIDc1fSwKKyAgICAgICAgezB4YzAyOCwgNzV9LAorICAgICAgICB7MHg4MDAyLCA3Nn0sCisgICAgICAgIHsweDgwMDksIDc2fSwKKyAgICAgICAgezB4ODAxNywgNzZ9LAorICAgICAgICB7MHhjMDI4LCA3Nn0sCisgICAgfSwKKyAgICAvKiA0NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNzN9LAorICAgICAgICB7MHg4MDA2LCA3M30sCisgICAgICAgIHsweDgwMGEsIDczfSwKKyAgICAgICAgezB4ODAwZiwgNzN9LAorICAgICAgICB7MHg4MDE4LCA3M30sCisgICAgICAgIHsweDgwMWYsIDczfSwKKyAgICAgICAgezB4ODAyOSwgNzN9LAorICAgICAgICB7MHhjMDM4LCA3M30sCisgICAgICAgIHsweDgwMDMsIDc0fSwKKyAgICAgICAgezB4ODAwNiwgNzR9LAorICAgICAgICB7MHg4MDBhLCA3NH0sCisgICAgICAgIHsweDgwMGYsIDc0fSwKKyAgICAgICAgezB4ODAxOCwgNzR9LAorICAgICAgICB7MHg4MDFmLCA3NH0sCisgICAgICAgIHsweDgwMjksIDc0fSwKKyAgICAgICAgezB4YzAzOCwgNzR9LAorICAgIH0sCisgICAgLyogNDggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDc1fSwKKyAgICAgICAgezB4ODAwNiwgNzV9LAorICAgICAgICB7MHg4MDBhLCA3NX0sCisgICAgICAgIHsweDgwMGYsIDc1fSwKKyAgICAgICAgezB4ODAxOCwgNzV9LAorICAgICAgICB7MHg4MDFmLCA3NX0sCisgICAgICAgIHsweDgwMjksIDc1fSwKKyAgICAgICAgezB4YzAzOCwgNzV9LAorICAgICAgICB7MHg4MDAzLCA3Nn0sCisgICAgICAgIHsweDgwMDYsIDc2fSwKKyAgICAgICAgezB4ODAwYSwgNzZ9LAorICAgICAgICB7MHg4MDBmLCA3Nn0sCisgICAgICAgIHsweDgwMTgsIDc2fSwKKyAgICAgICAgezB4ODAxZiwgNzZ9LAorICAgICAgICB7MHg4MDI5LCA3Nn0sCisgICAgICAgIHsweGMwMzgsIDc2fSwKKyAgICB9LAorICAgIC8qIDQ5ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCA3N30sCisgICAgICAgIHsweGMwMTYsIDc3fSwKKyAgICAgICAgezB4ODAwMSwgNzh9LAorICAgICAgICB7MHhjMDE2LCA3OH0sCisgICAgICAgIHsweDgwMDEsIDc5fSwKKyAgICAgICAgezB4YzAxNiwgNzl9LAorICAgICAgICB7MHg4MDAxLCA4MH0sCisgICAgICAgIHsweGMwMTYsIDgwfSwKKyAgICAgICAgezB4ODAwMSwgODF9LAorICAgICAgICB7MHhjMDE2LCA4MX0sCisgICAgICAgIHsweDgwMDEsIDgyfSwKKyAgICAgICAgezB4YzAxNiwgODJ9LAorICAgICAgICB7MHg4MDAxLCA4M30sCisgICAgICAgIHsweGMwMTYsIDgzfSwKKyAgICAgICAgezB4ODAwMSwgODR9LAorICAgICAgICB7MHhjMDE2LCA4NH0sCisgICAgfSwKKyAgICAvKiA1MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgNzd9LAorICAgICAgICB7MHg4MDA5LCA3N30sCisgICAgICAgIHsweDgwMTcsIDc3fSwKKyAgICAgICAgezB4YzAyOCwgNzd9LAorICAgICAgICB7MHg4MDAyLCA3OH0sCisgICAgICAgIHsweDgwMDksIDc4fSwKKyAgICAgICAgezB4ODAxNywgNzh9LAorICAgICAgICB7MHhjMDI4LCA3OH0sCisgICAgICAgIHsweDgwMDIsIDc5fSwKKyAgICAgICAgezB4ODAwOSwgNzl9LAorICAgICAgICB7MHg4MDE3LCA3OX0sCisgICAgICAgIHsweGMwMjgsIDc5fSwKKyAgICAgICAgezB4ODAwMiwgODB9LAorICAgICAgICB7MHg4MDA5LCA4MH0sCisgICAgICAgIHsweDgwMTcsIDgwfSwKKyAgICAgICAgezB4YzAyOCwgODB9LAorICAgIH0sCisgICAgLyogNTEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDc3fSwKKyAgICAgICAgezB4ODAwNiwgNzd9LAorICAgICAgICB7MHg4MDBhLCA3N30sCisgICAgICAgIHsweDgwMGYsIDc3fSwKKyAgICAgICAgezB4ODAxOCwgNzd9LAorICAgICAgICB7MHg4MDFmLCA3N30sCisgICAgICAgIHsweDgwMjksIDc3fSwKKyAgICAgICAgezB4YzAzOCwgNzd9LAorICAgICAgICB7MHg4MDAzLCA3OH0sCisgICAgICAgIHsweDgwMDYsIDc4fSwKKyAgICAgICAgezB4ODAwYSwgNzh9LAorICAgICAgICB7MHg4MDBmLCA3OH0sCisgICAgICAgIHsweDgwMTgsIDc4fSwKKyAgICAgICAgezB4ODAxZiwgNzh9LAorICAgICAgICB7MHg4MDI5LCA3OH0sCisgICAgICAgIHsweGMwMzgsIDc4fSwKKyAgICB9LAorICAgIC8qIDUyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA3OX0sCisgICAgICAgIHsweDgwMDYsIDc5fSwKKyAgICAgICAgezB4ODAwYSwgNzl9LAorICAgICAgICB7MHg4MDBmLCA3OX0sCisgICAgICAgIHsweDgwMTgsIDc5fSwKKyAgICAgICAgezB4ODAxZiwgNzl9LAorICAgICAgICB7MHg4MDI5LCA3OX0sCisgICAgICAgIHsweGMwMzgsIDc5fSwKKyAgICAgICAgezB4ODAwMywgODB9LAorICAgICAgICB7MHg4MDA2LCA4MH0sCisgICAgICAgIHsweDgwMGEsIDgwfSwKKyAgICAgICAgezB4ODAwZiwgODB9LAorICAgICAgICB7MHg4MDE4LCA4MH0sCisgICAgICAgIHsweDgwMWYsIDgwfSwKKyAgICAgICAgezB4ODAyOSwgODB9LAorICAgICAgICB7MHhjMDM4LCA4MH0sCisgICAgfSwKKyAgICAvKiA1MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgODF9LAorICAgICAgICB7MHg4MDA5LCA4MX0sCisgICAgICAgIHsweDgwMTcsIDgxfSwKKyAgICAgICAgezB4YzAyOCwgODF9LAorICAgICAgICB7MHg4MDAyLCA4Mn0sCisgICAgICAgIHsweDgwMDksIDgyfSwKKyAgICAgICAgezB4ODAxNywgODJ9LAorICAgICAgICB7MHhjMDI4LCA4Mn0sCisgICAgICAgIHsweDgwMDIsIDgzfSwKKyAgICAgICAgezB4ODAwOSwgODN9LAorICAgICAgICB7MHg4MDE3LCA4M30sCisgICAgICAgIHsweGMwMjgsIDgzfSwKKyAgICAgICAgezB4ODAwMiwgODR9LAorICAgICAgICB7MHg4MDA5LCA4NH0sCisgICAgICAgIHsweDgwMTcsIDg0fSwKKyAgICAgICAgezB4YzAyOCwgODR9LAorICAgIH0sCisgICAgLyogNTQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDgxfSwKKyAgICAgICAgezB4ODAwNiwgODF9LAorICAgICAgICB7MHg4MDBhLCA4MX0sCisgICAgICAgIHsweDgwMGYsIDgxfSwKKyAgICAgICAgezB4ODAxOCwgODF9LAorICAgICAgICB7MHg4MDFmLCA4MX0sCisgICAgICAgIHsweDgwMjksIDgxfSwKKyAgICAgICAgezB4YzAzOCwgODF9LAorICAgICAgICB7MHg4MDAzLCA4Mn0sCisgICAgICAgIHsweDgwMDYsIDgyfSwKKyAgICAgICAgezB4ODAwYSwgODJ9LAorICAgICAgICB7MHg4MDBmLCA4Mn0sCisgICAgICAgIHsweDgwMTgsIDgyfSwKKyAgICAgICAgezB4ODAxZiwgODJ9LAorICAgICAgICB7MHg4MDI5LCA4Mn0sCisgICAgICAgIHsweGMwMzgsIDgyfSwKKyAgICB9LAorICAgIC8qIDU1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA4M30sCisgICAgICAgIHsweDgwMDYsIDgzfSwKKyAgICAgICAgezB4ODAwYSwgODN9LAorICAgICAgICB7MHg4MDBmLCA4M30sCisgICAgICAgIHsweDgwMTgsIDgzfSwKKyAgICAgICAgezB4ODAxZiwgODN9LAorICAgICAgICB7MHg4MDI5LCA4M30sCisgICAgICAgIHsweGMwMzgsIDgzfSwKKyAgICAgICAgezB4ODAwMywgODR9LAorICAgICAgICB7MHg4MDA2LCA4NH0sCisgICAgICAgIHsweDgwMGEsIDg0fSwKKyAgICAgICAgezB4ODAwZiwgODR9LAorICAgICAgICB7MHg4MDE4LCA4NH0sCisgICAgICAgIHsweDgwMWYsIDg0fSwKKyAgICAgICAgezB4ODAyOSwgODR9LAorICAgICAgICB7MHhjMDM4LCA4NH0sCisgICAgfSwKKyAgICAvKiA1NiAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgODV9LAorICAgICAgICB7MHhjMDAwLCA4Nn0sCisgICAgICAgIHsweGMwMDAsIDg3fSwKKyAgICAgICAgezB4YzAwMCwgODl9LAorICAgICAgICB7MHhjMDAwLCAxMDZ9LAorICAgICAgICB7MHhjMDAwLCAxMDd9LAorICAgICAgICB7MHhjMDAwLCAxMTN9LAorICAgICAgICB7MHhjMDAwLCAxMTh9LAorICAgICAgICB7MHhjMDAwLCAxMTl9LAorICAgICAgICB7MHhjMDAwLCAxMjB9LAorICAgICAgICB7MHhjMDAwLCAxMjF9LAorICAgICAgICB7MHhjMDAwLCAxMjJ9LAorICAgICAgICB7MHg0NiwgMH0sCisgICAgICAgIHsweDQ3LCAwfSwKKyAgICAgICAgezB4NDksIDB9LAorICAgICAgICB7MHg0MDRhLCAwfSwKKyAgICB9LAorICAgIC8qIDU3ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCA4NX0sCisgICAgICAgIHsweGMwMTYsIDg1fSwKKyAgICAgICAgezB4ODAwMSwgODZ9LAorICAgICAgICB7MHhjMDE2LCA4Nn0sCisgICAgICAgIHsweDgwMDEsIDg3fSwKKyAgICAgICAgezB4YzAxNiwgODd9LAorICAgICAgICB7MHg4MDAxLCA4OX0sCisgICAgICAgIHsweGMwMTYsIDg5fSwKKyAgICAgICAgezB4ODAwMSwgMTA2fSwKKyAgICAgICAgezB4YzAxNiwgMTA2fSwKKyAgICAgICAgezB4ODAwMSwgMTA3fSwKKyAgICAgICAgezB4YzAxNiwgMTA3fSwKKyAgICAgICAgezB4ODAwMSwgMTEzfSwKKyAgICAgICAgezB4YzAxNiwgMTEzfSwKKyAgICAgICAgezB4ODAwMSwgMTE4fSwKKyAgICAgICAgezB4YzAxNiwgMTE4fSwKKyAgICB9LAorICAgIC8qIDU4ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA4NX0sCisgICAgICAgIHsweDgwMDksIDg1fSwKKyAgICAgICAgezB4ODAxNywgODV9LAorICAgICAgICB7MHhjMDI4LCA4NX0sCisgICAgICAgIHsweDgwMDIsIDg2fSwKKyAgICAgICAgezB4ODAwOSwgODZ9LAorICAgICAgICB7MHg4MDE3LCA4Nn0sCisgICAgICAgIHsweGMwMjgsIDg2fSwKKyAgICAgICAgezB4ODAwMiwgODd9LAorICAgICAgICB7MHg4MDA5LCA4N30sCisgICAgICAgIHsweDgwMTcsIDg3fSwKKyAgICAgICAgezB4YzAyOCwgODd9LAorICAgICAgICB7MHg4MDAyLCA4OX0sCisgICAgICAgIHsweDgwMDksIDg5fSwKKyAgICAgICAgezB4ODAxNywgODl9LAorICAgICAgICB7MHhjMDI4LCA4OX0sCisgICAgfSwKKyAgICAvKiA1OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgODV9LAorICAgICAgICB7MHg4MDA2LCA4NX0sCisgICAgICAgIHsweDgwMGEsIDg1fSwKKyAgICAgICAgezB4ODAwZiwgODV9LAorICAgICAgICB7MHg4MDE4LCA4NX0sCisgICAgICAgIHsweDgwMWYsIDg1fSwKKyAgICAgICAgezB4ODAyOSwgODV9LAorICAgICAgICB7MHhjMDM4LCA4NX0sCisgICAgICAgIHsweDgwMDMsIDg2fSwKKyAgICAgICAgezB4ODAwNiwgODZ9LAorICAgICAgICB7MHg4MDBhLCA4Nn0sCisgICAgICAgIHsweDgwMGYsIDg2fSwKKyAgICAgICAgezB4ODAxOCwgODZ9LAorICAgICAgICB7MHg4MDFmLCA4Nn0sCisgICAgICAgIHsweDgwMjksIDg2fSwKKyAgICAgICAgezB4YzAzOCwgODZ9LAorICAgIH0sCisgICAgLyogNjAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDg3fSwKKyAgICAgICAgezB4ODAwNiwgODd9LAorICAgICAgICB7MHg4MDBhLCA4N30sCisgICAgICAgIHsweDgwMGYsIDg3fSwKKyAgICAgICAgezB4ODAxOCwgODd9LAorICAgICAgICB7MHg4MDFmLCA4N30sCisgICAgICAgIHsweDgwMjksIDg3fSwKKyAgICAgICAgezB4YzAzOCwgODd9LAorICAgICAgICB7MHg4MDAzLCA4OX0sCisgICAgICAgIHsweDgwMDYsIDg5fSwKKyAgICAgICAgezB4ODAwYSwgODl9LAorICAgICAgICB7MHg4MDBmLCA4OX0sCisgICAgICAgIHsweDgwMTgsIDg5fSwKKyAgICAgICAgezB4ODAxZiwgODl9LAorICAgICAgICB7MHg4MDI5LCA4OX0sCisgICAgICAgIHsweGMwMzgsIDg5fSwKKyAgICB9LAorICAgIC8qIDYxICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMDZ9LAorICAgICAgICB7MHg4MDA5LCAxMDZ9LAorICAgICAgICB7MHg4MDE3LCAxMDZ9LAorICAgICAgICB7MHhjMDI4LCAxMDZ9LAorICAgICAgICB7MHg4MDAyLCAxMDd9LAorICAgICAgICB7MHg4MDA5LCAxMDd9LAorICAgICAgICB7MHg4MDE3LCAxMDd9LAorICAgICAgICB7MHhjMDI4LCAxMDd9LAorICAgICAgICB7MHg4MDAyLCAxMTN9LAorICAgICAgICB7MHg4MDA5LCAxMTN9LAorICAgICAgICB7MHg4MDE3LCAxMTN9LAorICAgICAgICB7MHhjMDI4LCAxMTN9LAorICAgICAgICB7MHg4MDAyLCAxMTh9LAorICAgICAgICB7MHg4MDA5LCAxMTh9LAorICAgICAgICB7MHg4MDE3LCAxMTh9LAorICAgICAgICB7MHhjMDI4LCAxMTh9LAorICAgIH0sCisgICAgLyogNjIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEwNn0sCisgICAgICAgIHsweDgwMDYsIDEwNn0sCisgICAgICAgIHsweDgwMGEsIDEwNn0sCisgICAgICAgIHsweDgwMGYsIDEwNn0sCisgICAgICAgIHsweDgwMTgsIDEwNn0sCisgICAgICAgIHsweDgwMWYsIDEwNn0sCisgICAgICAgIHsweDgwMjksIDEwNn0sCisgICAgICAgIHsweGMwMzgsIDEwNn0sCisgICAgICAgIHsweDgwMDMsIDEwN30sCisgICAgICAgIHsweDgwMDYsIDEwN30sCisgICAgICAgIHsweDgwMGEsIDEwN30sCisgICAgICAgIHsweDgwMGYsIDEwN30sCisgICAgICAgIHsweDgwMTgsIDEwN30sCisgICAgICAgIHsweDgwMWYsIDEwN30sCisgICAgICAgIHsweDgwMjksIDEwN30sCisgICAgICAgIHsweGMwMzgsIDEwN30sCisgICAgfSwKKyAgICAvKiA2MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTEzfSwKKyAgICAgICAgezB4ODAwNiwgMTEzfSwKKyAgICAgICAgezB4ODAwYSwgMTEzfSwKKyAgICAgICAgezB4ODAwZiwgMTEzfSwKKyAgICAgICAgezB4ODAxOCwgMTEzfSwKKyAgICAgICAgezB4ODAxZiwgMTEzfSwKKyAgICAgICAgezB4ODAyOSwgMTEzfSwKKyAgICAgICAgezB4YzAzOCwgMTEzfSwKKyAgICAgICAgezB4ODAwMywgMTE4fSwKKyAgICAgICAgezB4ODAwNiwgMTE4fSwKKyAgICAgICAgezB4ODAwYSwgMTE4fSwKKyAgICAgICAgezB4ODAwZiwgMTE4fSwKKyAgICAgICAgezB4ODAxOCwgMTE4fSwKKyAgICAgICAgezB4ODAxZiwgMTE4fSwKKyAgICAgICAgezB4ODAyOSwgMTE4fSwKKyAgICAgICAgezB4YzAzOCwgMTE4fSwKKyAgICB9LAorICAgIC8qIDY0ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxMTl9LAorICAgICAgICB7MHhjMDE2LCAxMTl9LAorICAgICAgICB7MHg4MDAxLCAxMjB9LAorICAgICAgICB7MHhjMDE2LCAxMjB9LAorICAgICAgICB7MHg4MDAxLCAxMjF9LAorICAgICAgICB7MHhjMDE2LCAxMjF9LAorICAgICAgICB7MHg4MDAxLCAxMjJ9LAorICAgICAgICB7MHhjMDE2LCAxMjJ9LAorICAgICAgICB7MHhjMDAwLCAzOH0sCisgICAgICAgIHsweGMwMDAsIDQyfSwKKyAgICAgICAgezB4YzAwMCwgNDR9LAorICAgICAgICB7MHhjMDAwLCA1OX0sCisgICAgICAgIHsweGMwMDAsIDg4fSwKKyAgICAgICAgezB4YzAwMCwgOTB9LAorICAgICAgICB7MHg0YiwgMH0sCisgICAgICAgIHsweDRlLCAwfSwKKyAgICB9LAorICAgIC8qIDY1ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMTl9LAorICAgICAgICB7MHg4MDA5LCAxMTl9LAorICAgICAgICB7MHg4MDE3LCAxMTl9LAorICAgICAgICB7MHhjMDI4LCAxMTl9LAorICAgICAgICB7MHg4MDAyLCAxMjB9LAorICAgICAgICB7MHg4MDA5LCAxMjB9LAorICAgICAgICB7MHg4MDE3LCAxMjB9LAorICAgICAgICB7MHhjMDI4LCAxMjB9LAorICAgICAgICB7MHg4MDAyLCAxMjF9LAorICAgICAgICB7MHg4MDA5LCAxMjF9LAorICAgICAgICB7MHg4MDE3LCAxMjF9LAorICAgICAgICB7MHhjMDI4LCAxMjF9LAorICAgICAgICB7MHg4MDAyLCAxMjJ9LAorICAgICAgICB7MHg4MDA5LCAxMjJ9LAorICAgICAgICB7MHg4MDE3LCAxMjJ9LAorICAgICAgICB7MHhjMDI4LCAxMjJ9LAorICAgIH0sCisgICAgLyogNjYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDExOX0sCisgICAgICAgIHsweDgwMDYsIDExOX0sCisgICAgICAgIHsweDgwMGEsIDExOX0sCisgICAgICAgIHsweDgwMGYsIDExOX0sCisgICAgICAgIHsweDgwMTgsIDExOX0sCisgICAgICAgIHsweDgwMWYsIDExOX0sCisgICAgICAgIHsweDgwMjksIDExOX0sCisgICAgICAgIHsweGMwMzgsIDExOX0sCisgICAgICAgIHsweDgwMDMsIDEyMH0sCisgICAgICAgIHsweDgwMDYsIDEyMH0sCisgICAgICAgIHsweDgwMGEsIDEyMH0sCisgICAgICAgIHsweDgwMGYsIDEyMH0sCisgICAgICAgIHsweDgwMTgsIDEyMH0sCisgICAgICAgIHsweDgwMWYsIDEyMH0sCisgICAgICAgIHsweDgwMjksIDEyMH0sCisgICAgICAgIHsweGMwMzgsIDEyMH0sCisgICAgfSwKKyAgICAvKiA2NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTIxfSwKKyAgICAgICAgezB4ODAwNiwgMTIxfSwKKyAgICAgICAgezB4ODAwYSwgMTIxfSwKKyAgICAgICAgezB4ODAwZiwgMTIxfSwKKyAgICAgICAgezB4ODAxOCwgMTIxfSwKKyAgICAgICAgezB4ODAxZiwgMTIxfSwKKyAgICAgICAgezB4ODAyOSwgMTIxfSwKKyAgICAgICAgezB4YzAzOCwgMTIxfSwKKyAgICAgICAgezB4ODAwMywgMTIyfSwKKyAgICAgICAgezB4ODAwNiwgMTIyfSwKKyAgICAgICAgezB4ODAwYSwgMTIyfSwKKyAgICAgICAgezB4ODAwZiwgMTIyfSwKKyAgICAgICAgezB4ODAxOCwgMTIyfSwKKyAgICAgICAgezB4ODAxZiwgMTIyfSwKKyAgICAgICAgezB4ODAyOSwgMTIyfSwKKyAgICAgICAgezB4YzAzOCwgMTIyfSwKKyAgICB9LAorICAgIC8qIDY4ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAzOH0sCisgICAgICAgIHsweGMwMTYsIDM4fSwKKyAgICAgICAgezB4ODAwMSwgNDJ9LAorICAgICAgICB7MHhjMDE2LCA0Mn0sCisgICAgICAgIHsweDgwMDEsIDQ0fSwKKyAgICAgICAgezB4YzAxNiwgNDR9LAorICAgICAgICB7MHg4MDAxLCA1OX0sCisgICAgICAgIHsweGMwMTYsIDU5fSwKKyAgICAgICAgezB4ODAwMSwgODh9LAorICAgICAgICB7MHhjMDE2LCA4OH0sCisgICAgICAgIHsweDgwMDEsIDkwfSwKKyAgICAgICAgezB4YzAxNiwgOTB9LAorICAgICAgICB7MHg0YywgMH0sCisgICAgICAgIHsweDRkLCAwfSwKKyAgICAgICAgezB4NGYsIDB9LAorICAgICAgICB7MHg1MSwgMH0sCisgICAgfSwKKyAgICAvKiA2OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMzh9LAorICAgICAgICB7MHg4MDA5LCAzOH0sCisgICAgICAgIHsweDgwMTcsIDM4fSwKKyAgICAgICAgezB4YzAyOCwgMzh9LAorICAgICAgICB7MHg4MDAyLCA0Mn0sCisgICAgICAgIHsweDgwMDksIDQyfSwKKyAgICAgICAgezB4ODAxNywgNDJ9LAorICAgICAgICB7MHhjMDI4LCA0Mn0sCisgICAgICAgIHsweDgwMDIsIDQ0fSwKKyAgICAgICAgezB4ODAwOSwgNDR9LAorICAgICAgICB7MHg4MDE3LCA0NH0sCisgICAgICAgIHsweGMwMjgsIDQ0fSwKKyAgICAgICAgezB4ODAwMiwgNTl9LAorICAgICAgICB7MHg4MDA5LCA1OX0sCisgICAgICAgIHsweDgwMTcsIDU5fSwKKyAgICAgICAgezB4YzAyOCwgNTl9LAorICAgIH0sCisgICAgLyogNzAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDM4fSwKKyAgICAgICAgezB4ODAwNiwgMzh9LAorICAgICAgICB7MHg4MDBhLCAzOH0sCisgICAgICAgIHsweDgwMGYsIDM4fSwKKyAgICAgICAgezB4ODAxOCwgMzh9LAorICAgICAgICB7MHg4MDFmLCAzOH0sCisgICAgICAgIHsweDgwMjksIDM4fSwKKyAgICAgICAgezB4YzAzOCwgMzh9LAorICAgICAgICB7MHg4MDAzLCA0Mn0sCisgICAgICAgIHsweDgwMDYsIDQyfSwKKyAgICAgICAgezB4ODAwYSwgNDJ9LAorICAgICAgICB7MHg4MDBmLCA0Mn0sCisgICAgICAgIHsweDgwMTgsIDQyfSwKKyAgICAgICAgezB4ODAxZiwgNDJ9LAorICAgICAgICB7MHg4MDI5LCA0Mn0sCisgICAgICAgIHsweGMwMzgsIDQyfSwKKyAgICB9LAorICAgIC8qIDcxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA0NH0sCisgICAgICAgIHsweDgwMDYsIDQ0fSwKKyAgICAgICAgezB4ODAwYSwgNDR9LAorICAgICAgICB7MHg4MDBmLCA0NH0sCisgICAgICAgIHsweDgwMTgsIDQ0fSwKKyAgICAgICAgezB4ODAxZiwgNDR9LAorICAgICAgICB7MHg4MDI5LCA0NH0sCisgICAgICAgIHsweGMwMzgsIDQ0fSwKKyAgICAgICAgezB4ODAwMywgNTl9LAorICAgICAgICB7MHg4MDA2LCA1OX0sCisgICAgICAgIHsweDgwMGEsIDU5fSwKKyAgICAgICAgezB4ODAwZiwgNTl9LAorICAgICAgICB7MHg4MDE4LCA1OX0sCisgICAgICAgIHsweDgwMWYsIDU5fSwKKyAgICAgICAgezB4ODAyOSwgNTl9LAorICAgICAgICB7MHhjMDM4LCA1OX0sCisgICAgfSwKKyAgICAvKiA3MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgODh9LAorICAgICAgICB7MHg4MDA5LCA4OH0sCisgICAgICAgIHsweDgwMTcsIDg4fSwKKyAgICAgICAgezB4YzAyOCwgODh9LAorICAgICAgICB7MHg4MDAyLCA5MH0sCisgICAgICAgIHsweDgwMDksIDkwfSwKKyAgICAgICAgezB4ODAxNywgOTB9LAorICAgICAgICB7MHhjMDI4LCA5MH0sCisgICAgICAgIHsweGMwMDAsIDMzfSwKKyAgICAgICAgezB4YzAwMCwgMzR9LAorICAgICAgICB7MHhjMDAwLCA0MH0sCisgICAgICAgIHsweGMwMDAsIDQxfSwKKyAgICAgICAgezB4YzAwMCwgNjN9LAorICAgICAgICB7MHg1MCwgMH0sCisgICAgICAgIHsweDUyLCAwfSwKKyAgICAgICAgezB4NTQsIDB9LAorICAgIH0sCisgICAgLyogNzMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDg4fSwKKyAgICAgICAgezB4ODAwNiwgODh9LAorICAgICAgICB7MHg4MDBhLCA4OH0sCisgICAgICAgIHsweDgwMGYsIDg4fSwKKyAgICAgICAgezB4ODAxOCwgODh9LAorICAgICAgICB7MHg4MDFmLCA4OH0sCisgICAgICAgIHsweDgwMjksIDg4fSwKKyAgICAgICAgezB4YzAzOCwgODh9LAorICAgICAgICB7MHg4MDAzLCA5MH0sCisgICAgICAgIHsweDgwMDYsIDkwfSwKKyAgICAgICAgezB4ODAwYSwgOTB9LAorICAgICAgICB7MHg4MDBmLCA5MH0sCisgICAgICAgIHsweDgwMTgsIDkwfSwKKyAgICAgICAgezB4ODAxZiwgOTB9LAorICAgICAgICB7MHg4MDI5LCA5MH0sCisgICAgICAgIHsweGMwMzgsIDkwfSwKKyAgICB9LAorICAgIC8qIDc0ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAzM30sCisgICAgICAgIHsweGMwMTYsIDMzfSwKKyAgICAgICAgezB4ODAwMSwgMzR9LAorICAgICAgICB7MHhjMDE2LCAzNH0sCisgICAgICAgIHsweDgwMDEsIDQwfSwKKyAgICAgICAgezB4YzAxNiwgNDB9LAorICAgICAgICB7MHg4MDAxLCA0MX0sCisgICAgICAgIHsweGMwMTYsIDQxfSwKKyAgICAgICAgezB4ODAwMSwgNjN9LAorICAgICAgICB7MHhjMDE2LCA2M30sCisgICAgICAgIHsweGMwMDAsIDM5fSwKKyAgICAgICAgezB4YzAwMCwgNDN9LAorICAgICAgICB7MHhjMDAwLCAxMjR9LAorICAgICAgICB7MHg1MywgMH0sCisgICAgICAgIHsweDU1LCAwfSwKKyAgICAgICAgezB4NTgsIDB9LAorICAgIH0sCisgICAgLyogNzUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDMzfSwKKyAgICAgICAgezB4ODAwOSwgMzN9LAorICAgICAgICB7MHg4MDE3LCAzM30sCisgICAgICAgIHsweGMwMjgsIDMzfSwKKyAgICAgICAgezB4ODAwMiwgMzR9LAorICAgICAgICB7MHg4MDA5LCAzNH0sCisgICAgICAgIHsweDgwMTcsIDM0fSwKKyAgICAgICAgezB4YzAyOCwgMzR9LAorICAgICAgICB7MHg4MDAyLCA0MH0sCisgICAgICAgIHsweDgwMDksIDQwfSwKKyAgICAgICAgezB4ODAxNywgNDB9LAorICAgICAgICB7MHhjMDI4LCA0MH0sCisgICAgICAgIHsweDgwMDIsIDQxfSwKKyAgICAgICAgezB4ODAwOSwgNDF9LAorICAgICAgICB7MHg4MDE3LCA0MX0sCisgICAgICAgIHsweGMwMjgsIDQxfSwKKyAgICB9LAorICAgIC8qIDc2ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAzM30sCisgICAgICAgIHsweDgwMDYsIDMzfSwKKyAgICAgICAgezB4ODAwYSwgMzN9LAorICAgICAgICB7MHg4MDBmLCAzM30sCisgICAgICAgIHsweDgwMTgsIDMzfSwKKyAgICAgICAgezB4ODAxZiwgMzN9LAorICAgICAgICB7MHg4MDI5LCAzM30sCisgICAgICAgIHsweGMwMzgsIDMzfSwKKyAgICAgICAgezB4ODAwMywgMzR9LAorICAgICAgICB7MHg4MDA2LCAzNH0sCisgICAgICAgIHsweDgwMGEsIDM0fSwKKyAgICAgICAgezB4ODAwZiwgMzR9LAorICAgICAgICB7MHg4MDE4LCAzNH0sCisgICAgICAgIHsweDgwMWYsIDM0fSwKKyAgICAgICAgezB4ODAyOSwgMzR9LAorICAgICAgICB7MHhjMDM4LCAzNH0sCisgICAgfSwKKyAgICAvKiA3NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNDB9LAorICAgICAgICB7MHg4MDA2LCA0MH0sCisgICAgICAgIHsweDgwMGEsIDQwfSwKKyAgICAgICAgezB4ODAwZiwgNDB9LAorICAgICAgICB7MHg4MDE4LCA0MH0sCisgICAgICAgIHsweDgwMWYsIDQwfSwKKyAgICAgICAgezB4ODAyOSwgNDB9LAorICAgICAgICB7MHhjMDM4LCA0MH0sCisgICAgICAgIHsweDgwMDMsIDQxfSwKKyAgICAgICAgezB4ODAwNiwgNDF9LAorICAgICAgICB7MHg4MDBhLCA0MX0sCisgICAgICAgIHsweDgwMGYsIDQxfSwKKyAgICAgICAgezB4ODAxOCwgNDF9LAorICAgICAgICB7MHg4MDFmLCA0MX0sCisgICAgICAgIHsweDgwMjksIDQxfSwKKyAgICAgICAgezB4YzAzOCwgNDF9LAorICAgIH0sCisgICAgLyogNzggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDYzfSwKKyAgICAgICAgezB4ODAwOSwgNjN9LAorICAgICAgICB7MHg4MDE3LCA2M30sCisgICAgICAgIHsweGMwMjgsIDYzfSwKKyAgICAgICAgezB4ODAwMSwgMzl9LAorICAgICAgICB7MHhjMDE2LCAzOX0sCisgICAgICAgIHsweDgwMDEsIDQzfSwKKyAgICAgICAgezB4YzAxNiwgNDN9LAorICAgICAgICB7MHg4MDAxLCAxMjR9LAorICAgICAgICB7MHhjMDE2LCAxMjR9LAorICAgICAgICB7MHhjMDAwLCAzNX0sCisgICAgICAgIHsweGMwMDAsIDYyfSwKKyAgICAgICAgezB4NTYsIDB9LAorICAgICAgICB7MHg1NywgMH0sCisgICAgICAgIHsweDU5LCAwfSwKKyAgICAgICAgezB4NWEsIDB9LAorICAgIH0sCisgICAgLyogNzkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDYzfSwKKyAgICAgICAgezB4ODAwNiwgNjN9LAorICAgICAgICB7MHg4MDBhLCA2M30sCisgICAgICAgIHsweDgwMGYsIDYzfSwKKyAgICAgICAgezB4ODAxOCwgNjN9LAorICAgICAgICB7MHg4MDFmLCA2M30sCisgICAgICAgIHsweDgwMjksIDYzfSwKKyAgICAgICAgezB4YzAzOCwgNjN9LAorICAgICAgICB7MHg4MDAyLCAzOX0sCisgICAgICAgIHsweDgwMDksIDM5fSwKKyAgICAgICAgezB4ODAxNywgMzl9LAorICAgICAgICB7MHhjMDI4LCAzOX0sCisgICAgICAgIHsweDgwMDIsIDQzfSwKKyAgICAgICAgezB4ODAwOSwgNDN9LAorICAgICAgICB7MHg4MDE3LCA0M30sCisgICAgICAgIHsweGMwMjgsIDQzfSwKKyAgICB9LAorICAgIC8qIDgwICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAzOX0sCisgICAgICAgIHsweDgwMDYsIDM5fSwKKyAgICAgICAgezB4ODAwYSwgMzl9LAorICAgICAgICB7MHg4MDBmLCAzOX0sCisgICAgICAgIHsweDgwMTgsIDM5fSwKKyAgICAgICAgezB4ODAxZiwgMzl9LAorICAgICAgICB7MHg4MDI5LCAzOX0sCisgICAgICAgIHsweGMwMzgsIDM5fSwKKyAgICAgICAgezB4ODAwMywgNDN9LAorICAgICAgICB7MHg4MDA2LCA0M30sCisgICAgICAgIHsweDgwMGEsIDQzfSwKKyAgICAgICAgezB4ODAwZiwgNDN9LAorICAgICAgICB7MHg4MDE4LCA0M30sCisgICAgICAgIHsweDgwMWYsIDQzfSwKKyAgICAgICAgezB4ODAyOSwgNDN9LAorICAgICAgICB7MHhjMDM4LCA0M30sCisgICAgfSwKKyAgICAvKiA4MSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTI0fSwKKyAgICAgICAgezB4ODAwOSwgMTI0fSwKKyAgICAgICAgezB4ODAxNywgMTI0fSwKKyAgICAgICAgezB4YzAyOCwgMTI0fSwKKyAgICAgICAgezB4ODAwMSwgMzV9LAorICAgICAgICB7MHhjMDE2LCAzNX0sCisgICAgICAgIHsweDgwMDEsIDYyfSwKKyAgICAgICAgezB4YzAxNiwgNjJ9LAorICAgICAgICB7MHhjMDAwLCAwfSwKKyAgICAgICAgezB4YzAwMCwgMzZ9LAorICAgICAgICB7MHhjMDAwLCA2NH0sCisgICAgICAgIHsweGMwMDAsIDkxfSwKKyAgICAgICAgezB4YzAwMCwgOTN9LAorICAgICAgICB7MHhjMDAwLCAxMjZ9LAorICAgICAgICB7MHg1YiwgMH0sCisgICAgICAgIHsweDVjLCAwfSwKKyAgICB9LAorICAgIC8qIDgyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMjR9LAorICAgICAgICB7MHg4MDA2LCAxMjR9LAorICAgICAgICB7MHg4MDBhLCAxMjR9LAorICAgICAgICB7MHg4MDBmLCAxMjR9LAorICAgICAgICB7MHg4MDE4LCAxMjR9LAorICAgICAgICB7MHg4MDFmLCAxMjR9LAorICAgICAgICB7MHg4MDI5LCAxMjR9LAorICAgICAgICB7MHhjMDM4LCAxMjR9LAorICAgICAgICB7MHg4MDAyLCAzNX0sCisgICAgICAgIHsweDgwMDksIDM1fSwKKyAgICAgICAgezB4ODAxNywgMzV9LAorICAgICAgICB7MHhjMDI4LCAzNX0sCisgICAgICAgIHsweDgwMDIsIDYyfSwKKyAgICAgICAgezB4ODAwOSwgNjJ9LAorICAgICAgICB7MHg4MDE3LCA2Mn0sCisgICAgICAgIHsweGMwMjgsIDYyfSwKKyAgICB9LAorICAgIC8qIDgzICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAzNX0sCisgICAgICAgIHsweDgwMDYsIDM1fSwKKyAgICAgICAgezB4ODAwYSwgMzV9LAorICAgICAgICB7MHg4MDBmLCAzNX0sCisgICAgICAgIHsweDgwMTgsIDM1fSwKKyAgICAgICAgezB4ODAxZiwgMzV9LAorICAgICAgICB7MHg4MDI5LCAzNX0sCisgICAgICAgIHsweGMwMzgsIDM1fSwKKyAgICAgICAgezB4ODAwMywgNjJ9LAorICAgICAgICB7MHg4MDA2LCA2Mn0sCisgICAgICAgIHsweDgwMGEsIDYyfSwKKyAgICAgICAgezB4ODAwZiwgNjJ9LAorICAgICAgICB7MHg4MDE4LCA2Mn0sCisgICAgICAgIHsweDgwMWYsIDYyfSwKKyAgICAgICAgezB4ODAyOSwgNjJ9LAorICAgICAgICB7MHhjMDM4LCA2Mn0sCisgICAgfSwKKyAgICAvKiA4NCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMH0sCisgICAgICAgIHsweGMwMTYsIDB9LAorICAgICAgICB7MHg4MDAxLCAzNn0sCisgICAgICAgIHsweGMwMTYsIDM2fSwKKyAgICAgICAgezB4ODAwMSwgNjR9LAorICAgICAgICB7MHhjMDE2LCA2NH0sCisgICAgICAgIHsweDgwMDEsIDkxfSwKKyAgICAgICAgezB4YzAxNiwgOTF9LAorICAgICAgICB7MHg4MDAxLCA5M30sCisgICAgICAgIHsweGMwMTYsIDkzfSwKKyAgICAgICAgezB4ODAwMSwgMTI2fSwKKyAgICAgICAgezB4YzAxNiwgMTI2fSwKKyAgICAgICAgezB4YzAwMCwgOTR9LAorICAgICAgICB7MHhjMDAwLCAxMjV9LAorICAgICAgICB7MHg1ZCwgMH0sCisgICAgICAgIHsweDVlLCAwfSwKKyAgICB9LAorICAgIC8qIDg1ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAwfSwKKyAgICAgICAgezB4ODAwOSwgMH0sCisgICAgICAgIHsweDgwMTcsIDB9LAorICAgICAgICB7MHhjMDI4LCAwfSwKKyAgICAgICAgezB4ODAwMiwgMzZ9LAorICAgICAgICB7MHg4MDA5LCAzNn0sCisgICAgICAgIHsweDgwMTcsIDM2fSwKKyAgICAgICAgezB4YzAyOCwgMzZ9LAorICAgICAgICB7MHg4MDAyLCA2NH0sCisgICAgICAgIHsweDgwMDksIDY0fSwKKyAgICAgICAgezB4ODAxNywgNjR9LAorICAgICAgICB7MHhjMDI4LCA2NH0sCisgICAgICAgIHsweDgwMDIsIDkxfSwKKyAgICAgICAgezB4ODAwOSwgOTF9LAorICAgICAgICB7MHg4MDE3LCA5MX0sCisgICAgICAgIHsweGMwMjgsIDkxfSwKKyAgICB9LAorICAgIC8qIDg2ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAwfSwKKyAgICAgICAgezB4ODAwNiwgMH0sCisgICAgICAgIHsweDgwMGEsIDB9LAorICAgICAgICB7MHg4MDBmLCAwfSwKKyAgICAgICAgezB4ODAxOCwgMH0sCisgICAgICAgIHsweDgwMWYsIDB9LAorICAgICAgICB7MHg4MDI5LCAwfSwKKyAgICAgICAgezB4YzAzOCwgMH0sCisgICAgICAgIHsweDgwMDMsIDM2fSwKKyAgICAgICAgezB4ODAwNiwgMzZ9LAorICAgICAgICB7MHg4MDBhLCAzNn0sCisgICAgICAgIHsweDgwMGYsIDM2fSwKKyAgICAgICAgezB4ODAxOCwgMzZ9LAorICAgICAgICB7MHg4MDFmLCAzNn0sCisgICAgICAgIHsweDgwMjksIDM2fSwKKyAgICAgICAgezB4YzAzOCwgMzZ9LAorICAgIH0sCisgICAgLyogODcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDY0fSwKKyAgICAgICAgezB4ODAwNiwgNjR9LAorICAgICAgICB7MHg4MDBhLCA2NH0sCisgICAgICAgIHsweDgwMGYsIDY0fSwKKyAgICAgICAgezB4ODAxOCwgNjR9LAorICAgICAgICB7MHg4MDFmLCA2NH0sCisgICAgICAgIHsweDgwMjksIDY0fSwKKyAgICAgICAgezB4YzAzOCwgNjR9LAorICAgICAgICB7MHg4MDAzLCA5MX0sCisgICAgICAgIHsweDgwMDYsIDkxfSwKKyAgICAgICAgezB4ODAwYSwgOTF9LAorICAgICAgICB7MHg4MDBmLCA5MX0sCisgICAgICAgIHsweDgwMTgsIDkxfSwKKyAgICAgICAgezB4ODAxZiwgOTF9LAorICAgICAgICB7MHg4MDI5LCA5MX0sCisgICAgICAgIHsweGMwMzgsIDkxfSwKKyAgICB9LAorICAgIC8qIDg4ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA5M30sCisgICAgICAgIHsweDgwMDksIDkzfSwKKyAgICAgICAgezB4ODAxNywgOTN9LAorICAgICAgICB7MHhjMDI4LCA5M30sCisgICAgICAgIHsweDgwMDIsIDEyNn0sCisgICAgICAgIHsweDgwMDksIDEyNn0sCisgICAgICAgIHsweDgwMTcsIDEyNn0sCisgICAgICAgIHsweGMwMjgsIDEyNn0sCisgICAgICAgIHsweDgwMDEsIDk0fSwKKyAgICAgICAgezB4YzAxNiwgOTR9LAorICAgICAgICB7MHg4MDAxLCAxMjV9LAorICAgICAgICB7MHhjMDE2LCAxMjV9LAorICAgICAgICB7MHhjMDAwLCA2MH0sCisgICAgICAgIHsweGMwMDAsIDk2fSwKKyAgICAgICAgezB4YzAwMCwgMTIzfSwKKyAgICAgICAgezB4NWYsIDB9LAorICAgIH0sCisgICAgLyogODkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDkzfSwKKyAgICAgICAgezB4ODAwNiwgOTN9LAorICAgICAgICB7MHg4MDBhLCA5M30sCisgICAgICAgIHsweDgwMGYsIDkzfSwKKyAgICAgICAgezB4ODAxOCwgOTN9LAorICAgICAgICB7MHg4MDFmLCA5M30sCisgICAgICAgIHsweDgwMjksIDkzfSwKKyAgICAgICAgezB4YzAzOCwgOTN9LAorICAgICAgICB7MHg4MDAzLCAxMjZ9LAorICAgICAgICB7MHg4MDA2LCAxMjZ9LAorICAgICAgICB7MHg4MDBhLCAxMjZ9LAorICAgICAgICB7MHg4MDBmLCAxMjZ9LAorICAgICAgICB7MHg4MDE4LCAxMjZ9LAorICAgICAgICB7MHg4MDFmLCAxMjZ9LAorICAgICAgICB7MHg4MDI5LCAxMjZ9LAorICAgICAgICB7MHhjMDM4LCAxMjZ9LAorICAgIH0sCisgICAgLyogOTAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDk0fSwKKyAgICAgICAgezB4ODAwOSwgOTR9LAorICAgICAgICB7MHg4MDE3LCA5NH0sCisgICAgICAgIHsweGMwMjgsIDk0fSwKKyAgICAgICAgezB4ODAwMiwgMTI1fSwKKyAgICAgICAgezB4ODAwOSwgMTI1fSwKKyAgICAgICAgezB4ODAxNywgMTI1fSwKKyAgICAgICAgezB4YzAyOCwgMTI1fSwKKyAgICAgICAgezB4ODAwMSwgNjB9LAorICAgICAgICB7MHhjMDE2LCA2MH0sCisgICAgICAgIHsweDgwMDEsIDk2fSwKKyAgICAgICAgezB4YzAxNiwgOTZ9LAorICAgICAgICB7MHg4MDAxLCAxMjN9LAorICAgICAgICB7MHhjMDE2LCAxMjN9LAorICAgICAgICB7MHg2MCwgMH0sCisgICAgICAgIHsweDZlLCAwfSwKKyAgICB9LAorICAgIC8qIDkxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA5NH0sCisgICAgICAgIHsweDgwMDYsIDk0fSwKKyAgICAgICAgezB4ODAwYSwgOTR9LAorICAgICAgICB7MHg4MDBmLCA5NH0sCisgICAgICAgIHsweDgwMTgsIDk0fSwKKyAgICAgICAgezB4ODAxZiwgOTR9LAorICAgICAgICB7MHg4MDI5LCA5NH0sCisgICAgICAgIHsweGMwMzgsIDk0fSwKKyAgICAgICAgezB4ODAwMywgMTI1fSwKKyAgICAgICAgezB4ODAwNiwgMTI1fSwKKyAgICAgICAgezB4ODAwYSwgMTI1fSwKKyAgICAgICAgezB4ODAwZiwgMTI1fSwKKyAgICAgICAgezB4ODAxOCwgMTI1fSwKKyAgICAgICAgezB4ODAxZiwgMTI1fSwKKyAgICAgICAgezB4ODAyOSwgMTI1fSwKKyAgICAgICAgezB4YzAzOCwgMTI1fSwKKyAgICB9LAorICAgIC8qIDkyICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA2MH0sCisgICAgICAgIHsweDgwMDksIDYwfSwKKyAgICAgICAgezB4ODAxNywgNjB9LAorICAgICAgICB7MHhjMDI4LCA2MH0sCisgICAgICAgIHsweDgwMDIsIDk2fSwKKyAgICAgICAgezB4ODAwOSwgOTZ9LAorICAgICAgICB7MHg4MDE3LCA5Nn0sCisgICAgICAgIHsweGMwMjgsIDk2fSwKKyAgICAgICAgezB4ODAwMiwgMTIzfSwKKyAgICAgICAgezB4ODAwOSwgMTIzfSwKKyAgICAgICAgezB4ODAxNywgMTIzfSwKKyAgICAgICAgezB4YzAyOCwgMTIzfSwKKyAgICAgICAgezB4NjEsIDB9LAorICAgICAgICB7MHg2NSwgMH0sCisgICAgICAgIHsweDZmLCAwfSwKKyAgICAgICAgezB4ODUsIDB9LAorICAgIH0sCisgICAgLyogOTMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDYwfSwKKyAgICAgICAgezB4ODAwNiwgNjB9LAorICAgICAgICB7MHg4MDBhLCA2MH0sCisgICAgICAgIHsweDgwMGYsIDYwfSwKKyAgICAgICAgezB4ODAxOCwgNjB9LAorICAgICAgICB7MHg4MDFmLCA2MH0sCisgICAgICAgIHsweDgwMjksIDYwfSwKKyAgICAgICAgezB4YzAzOCwgNjB9LAorICAgICAgICB7MHg4MDAzLCA5Nn0sCisgICAgICAgIHsweDgwMDYsIDk2fSwKKyAgICAgICAgezB4ODAwYSwgOTZ9LAorICAgICAgICB7MHg4MDBmLCA5Nn0sCisgICAgICAgIHsweDgwMTgsIDk2fSwKKyAgICAgICAgezB4ODAxZiwgOTZ9LAorICAgICAgICB7MHg4MDI5LCA5Nn0sCisgICAgICAgIHsweGMwMzgsIDk2fSwKKyAgICB9LAorICAgIC8qIDk0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMjN9LAorICAgICAgICB7MHg4MDA2LCAxMjN9LAorICAgICAgICB7MHg4MDBhLCAxMjN9LAorICAgICAgICB7MHg4MDBmLCAxMjN9LAorICAgICAgICB7MHg4MDE4LCAxMjN9LAorICAgICAgICB7MHg4MDFmLCAxMjN9LAorICAgICAgICB7MHg4MDI5LCAxMjN9LAorICAgICAgICB7MHhjMDM4LCAxMjN9LAorICAgICAgICB7MHg2MiwgMH0sCisgICAgICAgIHsweDYzLCAwfSwKKyAgICAgICAgezB4NjYsIDB9LAorICAgICAgICB7MHg2OSwgMH0sCisgICAgICAgIHsweDcwLCAwfSwKKyAgICAgICAgezB4NzcsIDB9LAorICAgICAgICB7MHg4NiwgMH0sCisgICAgICAgIHsweDk5LCAwfSwKKyAgICB9LAorICAgIC8qIDk1ICovCisgICAgeworICAgICAgICB7MHhjMDAwLCA5Mn0sCisgICAgICAgIHsweGMwMDAsIDE5NX0sCisgICAgICAgIHsweGMwMDAsIDIwOH0sCisgICAgICAgIHsweDY0LCAwfSwKKyAgICAgICAgezB4NjcsIDB9LAorICAgICAgICB7MHg2OCwgMH0sCisgICAgICAgIHsweDZhLCAwfSwKKyAgICAgICAgezB4NmIsIDB9LAorICAgICAgICB7MHg3MSwgMH0sCisgICAgICAgIHsweDc0LCAwfSwKKyAgICAgICAgezB4NzgsIDB9LAorICAgICAgICB7MHg3ZSwgMH0sCisgICAgICAgIHsweDg3LCAwfSwKKyAgICAgICAgezB4OGUsIDB9LAorICAgICAgICB7MHg5YSwgMH0sCisgICAgICAgIHsweGE5LCAwfSwKKyAgICB9LAorICAgIC8qIDk2ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCA5Mn0sCisgICAgICAgIHsweGMwMTYsIDkyfSwKKyAgICAgICAgezB4ODAwMSwgMTk1fSwKKyAgICAgICAgezB4YzAxNiwgMTk1fSwKKyAgICAgICAgezB4ODAwMSwgMjA4fSwKKyAgICAgICAgezB4YzAxNiwgMjA4fSwKKyAgICAgICAgezB4YzAwMCwgMTI4fSwKKyAgICAgICAgezB4YzAwMCwgMTMwfSwKKyAgICAgICAgezB4YzAwMCwgMTMxfSwKKyAgICAgICAgezB4YzAwMCwgMTYyfSwKKyAgICAgICAgezB4YzAwMCwgMTg0fSwKKyAgICAgICAgezB4YzAwMCwgMTk0fSwKKyAgICAgICAgezB4YzAwMCwgMjI0fSwKKyAgICAgICAgezB4YzAwMCwgMjI2fSwKKyAgICAgICAgezB4NmMsIDB9LAorICAgICAgICB7MHg2ZCwgMH0sCisgICAgfSwKKyAgICAvKiA5NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgOTJ9LAorICAgICAgICB7MHg4MDA5LCA5Mn0sCisgICAgICAgIHsweDgwMTcsIDkyfSwKKyAgICAgICAgezB4YzAyOCwgOTJ9LAorICAgICAgICB7MHg4MDAyLCAxOTV9LAorICAgICAgICB7MHg4MDA5LCAxOTV9LAorICAgICAgICB7MHg4MDE3LCAxOTV9LAorICAgICAgICB7MHhjMDI4LCAxOTV9LAorICAgICAgICB7MHg4MDAyLCAyMDh9LAorICAgICAgICB7MHg4MDA5LCAyMDh9LAorICAgICAgICB7MHg4MDE3LCAyMDh9LAorICAgICAgICB7MHhjMDI4LCAyMDh9LAorICAgICAgICB7MHg4MDAxLCAxMjh9LAorICAgICAgICB7MHhjMDE2LCAxMjh9LAorICAgICAgICB7MHg4MDAxLCAxMzB9LAorICAgICAgICB7MHhjMDE2LCAxMzB9LAorICAgIH0sCisgICAgLyogOTggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDkyfSwKKyAgICAgICAgezB4ODAwNiwgOTJ9LAorICAgICAgICB7MHg4MDBhLCA5Mn0sCisgICAgICAgIHsweDgwMGYsIDkyfSwKKyAgICAgICAgezB4ODAxOCwgOTJ9LAorICAgICAgICB7MHg4MDFmLCA5Mn0sCisgICAgICAgIHsweDgwMjksIDkyfSwKKyAgICAgICAgezB4YzAzOCwgOTJ9LAorICAgICAgICB7MHg4MDAzLCAxOTV9LAorICAgICAgICB7MHg4MDA2LCAxOTV9LAorICAgICAgICB7MHg4MDBhLCAxOTV9LAorICAgICAgICB7MHg4MDBmLCAxOTV9LAorICAgICAgICB7MHg4MDE4LCAxOTV9LAorICAgICAgICB7MHg4MDFmLCAxOTV9LAorICAgICAgICB7MHg4MDI5LCAxOTV9LAorICAgICAgICB7MHhjMDM4LCAxOTV9LAorICAgIH0sCisgICAgLyogOTkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIwOH0sCisgICAgICAgIHsweDgwMDYsIDIwOH0sCisgICAgICAgIHsweDgwMGEsIDIwOH0sCisgICAgICAgIHsweDgwMGYsIDIwOH0sCisgICAgICAgIHsweDgwMTgsIDIwOH0sCisgICAgICAgIHsweDgwMWYsIDIwOH0sCisgICAgICAgIHsweDgwMjksIDIwOH0sCisgICAgICAgIHsweGMwMzgsIDIwOH0sCisgICAgICAgIHsweDgwMDIsIDEyOH0sCisgICAgICAgIHsweDgwMDksIDEyOH0sCisgICAgICAgIHsweDgwMTcsIDEyOH0sCisgICAgICAgIHsweGMwMjgsIDEyOH0sCisgICAgICAgIHsweDgwMDIsIDEzMH0sCisgICAgICAgIHsweDgwMDksIDEzMH0sCisgICAgICAgIHsweDgwMTcsIDEzMH0sCisgICAgICAgIHsweGMwMjgsIDEzMH0sCisgICAgfSwKKyAgICAvKiAxMDAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEyOH0sCisgICAgICAgIHsweDgwMDYsIDEyOH0sCisgICAgICAgIHsweDgwMGEsIDEyOH0sCisgICAgICAgIHsweDgwMGYsIDEyOH0sCisgICAgICAgIHsweDgwMTgsIDEyOH0sCisgICAgICAgIHsweDgwMWYsIDEyOH0sCisgICAgICAgIHsweDgwMjksIDEyOH0sCisgICAgICAgIHsweGMwMzgsIDEyOH0sCisgICAgICAgIHsweDgwMDMsIDEzMH0sCisgICAgICAgIHsweDgwMDYsIDEzMH0sCisgICAgICAgIHsweDgwMGEsIDEzMH0sCisgICAgICAgIHsweDgwMGYsIDEzMH0sCisgICAgICAgIHsweDgwMTgsIDEzMH0sCisgICAgICAgIHsweDgwMWYsIDEzMH0sCisgICAgICAgIHsweDgwMjksIDEzMH0sCisgICAgICAgIHsweGMwMzgsIDEzMH0sCisgICAgfSwKKyAgICAvKiAxMDEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDEzMX0sCisgICAgICAgIHsweGMwMTYsIDEzMX0sCisgICAgICAgIHsweDgwMDEsIDE2Mn0sCisgICAgICAgIHsweGMwMTYsIDE2Mn0sCisgICAgICAgIHsweDgwMDEsIDE4NH0sCisgICAgICAgIHsweGMwMTYsIDE4NH0sCisgICAgICAgIHsweDgwMDEsIDE5NH0sCisgICAgICAgIHsweGMwMTYsIDE5NH0sCisgICAgICAgIHsweDgwMDEsIDIyNH0sCisgICAgICAgIHsweGMwMTYsIDIyNH0sCisgICAgICAgIHsweDgwMDEsIDIyNn0sCisgICAgICAgIHsweGMwMTYsIDIyNn0sCisgICAgICAgIHsweGMwMDAsIDE1M30sCisgICAgICAgIHsweGMwMDAsIDE2MX0sCisgICAgICAgIHsweGMwMDAsIDE2N30sCisgICAgICAgIHsweGMwMDAsIDE3Mn0sCisgICAgfSwKKyAgICAvKiAxMDIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDEzMX0sCisgICAgICAgIHsweDgwMDksIDEzMX0sCisgICAgICAgIHsweDgwMTcsIDEzMX0sCisgICAgICAgIHsweGMwMjgsIDEzMX0sCisgICAgICAgIHsweDgwMDIsIDE2Mn0sCisgICAgICAgIHsweDgwMDksIDE2Mn0sCisgICAgICAgIHsweDgwMTcsIDE2Mn0sCisgICAgICAgIHsweGMwMjgsIDE2Mn0sCisgICAgICAgIHsweDgwMDIsIDE4NH0sCisgICAgICAgIHsweDgwMDksIDE4NH0sCisgICAgICAgIHsweDgwMTcsIDE4NH0sCisgICAgICAgIHsweGMwMjgsIDE4NH0sCisgICAgICAgIHsweDgwMDIsIDE5NH0sCisgICAgICAgIHsweDgwMDksIDE5NH0sCisgICAgICAgIHsweDgwMTcsIDE5NH0sCisgICAgICAgIHsweGMwMjgsIDE5NH0sCisgICAgfSwKKyAgICAvKiAxMDMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEzMX0sCisgICAgICAgIHsweDgwMDYsIDEzMX0sCisgICAgICAgIHsweDgwMGEsIDEzMX0sCisgICAgICAgIHsweDgwMGYsIDEzMX0sCisgICAgICAgIHsweDgwMTgsIDEzMX0sCisgICAgICAgIHsweDgwMWYsIDEzMX0sCisgICAgICAgIHsweDgwMjksIDEzMX0sCisgICAgICAgIHsweGMwMzgsIDEzMX0sCisgICAgICAgIHsweDgwMDMsIDE2Mn0sCisgICAgICAgIHsweDgwMDYsIDE2Mn0sCisgICAgICAgIHsweDgwMGEsIDE2Mn0sCisgICAgICAgIHsweDgwMGYsIDE2Mn0sCisgICAgICAgIHsweDgwMTgsIDE2Mn0sCisgICAgICAgIHsweDgwMWYsIDE2Mn0sCisgICAgICAgIHsweDgwMjksIDE2Mn0sCisgICAgICAgIHsweGMwMzgsIDE2Mn0sCisgICAgfSwKKyAgICAvKiAxMDQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE4NH0sCisgICAgICAgIHsweDgwMDYsIDE4NH0sCisgICAgICAgIHsweDgwMGEsIDE4NH0sCisgICAgICAgIHsweDgwMGYsIDE4NH0sCisgICAgICAgIHsweDgwMTgsIDE4NH0sCisgICAgICAgIHsweDgwMWYsIDE4NH0sCisgICAgICAgIHsweDgwMjksIDE4NH0sCisgICAgICAgIHsweGMwMzgsIDE4NH0sCisgICAgICAgIHsweDgwMDMsIDE5NH0sCisgICAgICAgIHsweDgwMDYsIDE5NH0sCisgICAgICAgIHsweDgwMGEsIDE5NH0sCisgICAgICAgIHsweDgwMGYsIDE5NH0sCisgICAgICAgIHsweDgwMTgsIDE5NH0sCisgICAgICAgIHsweDgwMWYsIDE5NH0sCisgICAgICAgIHsweDgwMjksIDE5NH0sCisgICAgICAgIHsweGMwMzgsIDE5NH0sCisgICAgfSwKKyAgICAvKiAxMDUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDIyNH0sCisgICAgICAgIHsweDgwMDksIDIyNH0sCisgICAgICAgIHsweDgwMTcsIDIyNH0sCisgICAgICAgIHsweGMwMjgsIDIyNH0sCisgICAgICAgIHsweDgwMDIsIDIyNn0sCisgICAgICAgIHsweDgwMDksIDIyNn0sCisgICAgICAgIHsweDgwMTcsIDIyNn0sCisgICAgICAgIHsweGMwMjgsIDIyNn0sCisgICAgICAgIHsweDgwMDEsIDE1M30sCisgICAgICAgIHsweGMwMTYsIDE1M30sCisgICAgICAgIHsweDgwMDEsIDE2MX0sCisgICAgICAgIHsweGMwMTYsIDE2MX0sCisgICAgICAgIHsweDgwMDEsIDE2N30sCisgICAgICAgIHsweGMwMTYsIDE2N30sCisgICAgICAgIHsweDgwMDEsIDE3Mn0sCisgICAgICAgIHsweGMwMTYsIDE3Mn0sCisgICAgfSwKKyAgICAvKiAxMDYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIyNH0sCisgICAgICAgIHsweDgwMDYsIDIyNH0sCisgICAgICAgIHsweDgwMGEsIDIyNH0sCisgICAgICAgIHsweDgwMGYsIDIyNH0sCisgICAgICAgIHsweDgwMTgsIDIyNH0sCisgICAgICAgIHsweDgwMWYsIDIyNH0sCisgICAgICAgIHsweDgwMjksIDIyNH0sCisgICAgICAgIHsweGMwMzgsIDIyNH0sCisgICAgICAgIHsweDgwMDMsIDIyNn0sCisgICAgICAgIHsweDgwMDYsIDIyNn0sCisgICAgICAgIHsweDgwMGEsIDIyNn0sCisgICAgICAgIHsweDgwMGYsIDIyNn0sCisgICAgICAgIHsweDgwMTgsIDIyNn0sCisgICAgICAgIHsweDgwMWYsIDIyNn0sCisgICAgICAgIHsweDgwMjksIDIyNn0sCisgICAgICAgIHsweGMwMzgsIDIyNn0sCisgICAgfSwKKyAgICAvKiAxMDcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE1M30sCisgICAgICAgIHsweDgwMDksIDE1M30sCisgICAgICAgIHsweDgwMTcsIDE1M30sCisgICAgICAgIHsweGMwMjgsIDE1M30sCisgICAgICAgIHsweDgwMDIsIDE2MX0sCisgICAgICAgIHsweDgwMDksIDE2MX0sCisgICAgICAgIHsweDgwMTcsIDE2MX0sCisgICAgICAgIHsweGMwMjgsIDE2MX0sCisgICAgICAgIHsweDgwMDIsIDE2N30sCisgICAgICAgIHsweDgwMDksIDE2N30sCisgICAgICAgIHsweDgwMTcsIDE2N30sCisgICAgICAgIHsweGMwMjgsIDE2N30sCisgICAgICAgIHsweDgwMDIsIDE3Mn0sCisgICAgICAgIHsweDgwMDksIDE3Mn0sCisgICAgICAgIHsweDgwMTcsIDE3Mn0sCisgICAgICAgIHsweGMwMjgsIDE3Mn0sCisgICAgfSwKKyAgICAvKiAxMDggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE1M30sCisgICAgICAgIHsweDgwMDYsIDE1M30sCisgICAgICAgIHsweDgwMGEsIDE1M30sCisgICAgICAgIHsweDgwMGYsIDE1M30sCisgICAgICAgIHsweDgwMTgsIDE1M30sCisgICAgICAgIHsweDgwMWYsIDE1M30sCisgICAgICAgIHsweDgwMjksIDE1M30sCisgICAgICAgIHsweGMwMzgsIDE1M30sCisgICAgICAgIHsweDgwMDMsIDE2MX0sCisgICAgICAgIHsweDgwMDYsIDE2MX0sCisgICAgICAgIHsweDgwMGEsIDE2MX0sCisgICAgICAgIHsweDgwMGYsIDE2MX0sCisgICAgICAgIHsweDgwMTgsIDE2MX0sCisgICAgICAgIHsweDgwMWYsIDE2MX0sCisgICAgICAgIHsweDgwMjksIDE2MX0sCisgICAgICAgIHsweGMwMzgsIDE2MX0sCisgICAgfSwKKyAgICAvKiAxMDkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE2N30sCisgICAgICAgIHsweDgwMDYsIDE2N30sCisgICAgICAgIHsweDgwMGEsIDE2N30sCisgICAgICAgIHsweDgwMGYsIDE2N30sCisgICAgICAgIHsweDgwMTgsIDE2N30sCisgICAgICAgIHsweDgwMWYsIDE2N30sCisgICAgICAgIHsweDgwMjksIDE2N30sCisgICAgICAgIHsweGMwMzgsIDE2N30sCisgICAgICAgIHsweDgwMDMsIDE3Mn0sCisgICAgICAgIHsweDgwMDYsIDE3Mn0sCisgICAgICAgIHsweDgwMGEsIDE3Mn0sCisgICAgICAgIHsweDgwMGYsIDE3Mn0sCisgICAgICAgIHsweDgwMTgsIDE3Mn0sCisgICAgICAgIHsweDgwMWYsIDE3Mn0sCisgICAgICAgIHsweDgwMjksIDE3Mn0sCisgICAgICAgIHsweGMwMzgsIDE3Mn0sCisgICAgfSwKKyAgICAvKiAxMTAgKi8KKyAgICB7CisgICAgICAgIHsweDcyLCAwfSwKKyAgICAgICAgezB4NzMsIDB9LAorICAgICAgICB7MHg3NSwgMH0sCisgICAgICAgIHsweDc2LCAwfSwKKyAgICAgICAgezB4NzksIDB9LAorICAgICAgICB7MHg3YiwgMH0sCisgICAgICAgIHsweDdmLCAwfSwKKyAgICAgICAgezB4ODIsIDB9LAorICAgICAgICB7MHg4OCwgMH0sCisgICAgICAgIHsweDhiLCAwfSwKKyAgICAgICAgezB4OGYsIDB9LAorICAgICAgICB7MHg5MiwgMH0sCisgICAgICAgIHsweDliLCAwfSwKKyAgICAgICAgezB4YTIsIDB9LAorICAgICAgICB7MHhhYSwgMH0sCisgICAgICAgIHsweGI0LCAwfSwKKyAgICB9LAorICAgIC8qIDExMSAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgMTc2fSwKKyAgICAgICAgezB4YzAwMCwgMTc3fSwKKyAgICAgICAgezB4YzAwMCwgMTc5fSwKKyAgICAgICAgezB4YzAwMCwgMjA5fSwKKyAgICAgICAgezB4YzAwMCwgMjE2fSwKKyAgICAgICAgezB4YzAwMCwgMjE3fSwKKyAgICAgICAgezB4YzAwMCwgMjI3fSwKKyAgICAgICAgezB4YzAwMCwgMjI5fSwKKyAgICAgICAgezB4YzAwMCwgMjMwfSwKKyAgICAgICAgezB4N2EsIDB9LAorICAgICAgICB7MHg3YywgMH0sCisgICAgICAgIHsweDdkLCAwfSwKKyAgICAgICAgezB4ODAsIDB9LAorICAgICAgICB7MHg4MSwgMH0sCisgICAgICAgIHsweDgzLCAwfSwKKyAgICAgICAgezB4ODQsIDB9LAorICAgIH0sCisgICAgLyogMTEyICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxNzZ9LAorICAgICAgICB7MHhjMDE2LCAxNzZ9LAorICAgICAgICB7MHg4MDAxLCAxNzd9LAorICAgICAgICB7MHhjMDE2LCAxNzd9LAorICAgICAgICB7MHg4MDAxLCAxNzl9LAorICAgICAgICB7MHhjMDE2LCAxNzl9LAorICAgICAgICB7MHg4MDAxLCAyMDl9LAorICAgICAgICB7MHhjMDE2LCAyMDl9LAorICAgICAgICB7MHg4MDAxLCAyMTZ9LAorICAgICAgICB7MHhjMDE2LCAyMTZ9LAorICAgICAgICB7MHg4MDAxLCAyMTd9LAorICAgICAgICB7MHhjMDE2LCAyMTd9LAorICAgICAgICB7MHg4MDAxLCAyMjd9LAorICAgICAgICB7MHhjMDE2LCAyMjd9LAorICAgICAgICB7MHg4MDAxLCAyMjl9LAorICAgICAgICB7MHhjMDE2LCAyMjl9LAorICAgIH0sCisgICAgLyogMTEzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNzZ9LAorICAgICAgICB7MHg4MDA5LCAxNzZ9LAorICAgICAgICB7MHg4MDE3LCAxNzZ9LAorICAgICAgICB7MHhjMDI4LCAxNzZ9LAorICAgICAgICB7MHg4MDAyLCAxNzd9LAorICAgICAgICB7MHg4MDA5LCAxNzd9LAorICAgICAgICB7MHg4MDE3LCAxNzd9LAorICAgICAgICB7MHhjMDI4LCAxNzd9LAorICAgICAgICB7MHg4MDAyLCAxNzl9LAorICAgICAgICB7MHg4MDA5LCAxNzl9LAorICAgICAgICB7MHg4MDE3LCAxNzl9LAorICAgICAgICB7MHhjMDI4LCAxNzl9LAorICAgICAgICB7MHg4MDAyLCAyMDl9LAorICAgICAgICB7MHg4MDA5LCAyMDl9LAorICAgICAgICB7MHg4MDE3LCAyMDl9LAorICAgICAgICB7MHhjMDI4LCAyMDl9LAorICAgIH0sCisgICAgLyogMTE0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNzZ9LAorICAgICAgICB7MHg4MDA2LCAxNzZ9LAorICAgICAgICB7MHg4MDBhLCAxNzZ9LAorICAgICAgICB7MHg4MDBmLCAxNzZ9LAorICAgICAgICB7MHg4MDE4LCAxNzZ9LAorICAgICAgICB7MHg4MDFmLCAxNzZ9LAorICAgICAgICB7MHg4MDI5LCAxNzZ9LAorICAgICAgICB7MHhjMDM4LCAxNzZ9LAorICAgICAgICB7MHg4MDAzLCAxNzd9LAorICAgICAgICB7MHg4MDA2LCAxNzd9LAorICAgICAgICB7MHg4MDBhLCAxNzd9LAorICAgICAgICB7MHg4MDBmLCAxNzd9LAorICAgICAgICB7MHg4MDE4LCAxNzd9LAorICAgICAgICB7MHg4MDFmLCAxNzd9LAorICAgICAgICB7MHg4MDI5LCAxNzd9LAorICAgICAgICB7MHhjMDM4LCAxNzd9LAorICAgIH0sCisgICAgLyogMTE1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNzl9LAorICAgICAgICB7MHg4MDA2LCAxNzl9LAorICAgICAgICB7MHg4MDBhLCAxNzl9LAorICAgICAgICB7MHg4MDBmLCAxNzl9LAorICAgICAgICB7MHg4MDE4LCAxNzl9LAorICAgICAgICB7MHg4MDFmLCAxNzl9LAorICAgICAgICB7MHg4MDI5LCAxNzl9LAorICAgICAgICB7MHhjMDM4LCAxNzl9LAorICAgICAgICB7MHg4MDAzLCAyMDl9LAorICAgICAgICB7MHg4MDA2LCAyMDl9LAorICAgICAgICB7MHg4MDBhLCAyMDl9LAorICAgICAgICB7MHg4MDBmLCAyMDl9LAorICAgICAgICB7MHg4MDE4LCAyMDl9LAorICAgICAgICB7MHg4MDFmLCAyMDl9LAorICAgICAgICB7MHg4MDI5LCAyMDl9LAorICAgICAgICB7MHhjMDM4LCAyMDl9LAorICAgIH0sCisgICAgLyogMTE2ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyMTZ9LAorICAgICAgICB7MHg4MDA5LCAyMTZ9LAorICAgICAgICB7MHg4MDE3LCAyMTZ9LAorICAgICAgICB7MHhjMDI4LCAyMTZ9LAorICAgICAgICB7MHg4MDAyLCAyMTd9LAorICAgICAgICB7MHg4MDA5LCAyMTd9LAorICAgICAgICB7MHg4MDE3LCAyMTd9LAorICAgICAgICB7MHhjMDI4LCAyMTd9LAorICAgICAgICB7MHg4MDAyLCAyMjd9LAorICAgICAgICB7MHg4MDA5LCAyMjd9LAorICAgICAgICB7MHg4MDE3LCAyMjd9LAorICAgICAgICB7MHhjMDI4LCAyMjd9LAorICAgICAgICB7MHg4MDAyLCAyMjl9LAorICAgICAgICB7MHg4MDA5LCAyMjl9LAorICAgICAgICB7MHg4MDE3LCAyMjl9LAorICAgICAgICB7MHhjMDI4LCAyMjl9LAorICAgIH0sCisgICAgLyogMTE3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMTZ9LAorICAgICAgICB7MHg4MDA2LCAyMTZ9LAorICAgICAgICB7MHg4MDBhLCAyMTZ9LAorICAgICAgICB7MHg4MDBmLCAyMTZ9LAorICAgICAgICB7MHg4MDE4LCAyMTZ9LAorICAgICAgICB7MHg4MDFmLCAyMTZ9LAorICAgICAgICB7MHg4MDI5LCAyMTZ9LAorICAgICAgICB7MHhjMDM4LCAyMTZ9LAorICAgICAgICB7MHg4MDAzLCAyMTd9LAorICAgICAgICB7MHg4MDA2LCAyMTd9LAorICAgICAgICB7MHg4MDBhLCAyMTd9LAorICAgICAgICB7MHg4MDBmLCAyMTd9LAorICAgICAgICB7MHg4MDE4LCAyMTd9LAorICAgICAgICB7MHg4MDFmLCAyMTd9LAorICAgICAgICB7MHg4MDI5LCAyMTd9LAorICAgICAgICB7MHhjMDM4LCAyMTd9LAorICAgIH0sCisgICAgLyogMTE4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMjd9LAorICAgICAgICB7MHg4MDA2LCAyMjd9LAorICAgICAgICB7MHg4MDBhLCAyMjd9LAorICAgICAgICB7MHg4MDBmLCAyMjd9LAorICAgICAgICB7MHg4MDE4LCAyMjd9LAorICAgICAgICB7MHg4MDFmLCAyMjd9LAorICAgICAgICB7MHg4MDI5LCAyMjd9LAorICAgICAgICB7MHhjMDM4LCAyMjd9LAorICAgICAgICB7MHg4MDAzLCAyMjl9LAorICAgICAgICB7MHg4MDA2LCAyMjl9LAorICAgICAgICB7MHg4MDBhLCAyMjl9LAorICAgICAgICB7MHg4MDBmLCAyMjl9LAorICAgICAgICB7MHg4MDE4LCAyMjl9LAorICAgICAgICB7MHg4MDFmLCAyMjl9LAorICAgICAgICB7MHg4MDI5LCAyMjl9LAorICAgICAgICB7MHhjMDM4LCAyMjl9LAorICAgIH0sCisgICAgLyogMTE5ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAyMzB9LAorICAgICAgICB7MHhjMDE2LCAyMzB9LAorICAgICAgICB7MHhjMDAwLCAxMjl9LAorICAgICAgICB7MHhjMDAwLCAxMzJ9LAorICAgICAgICB7MHhjMDAwLCAxMzN9LAorICAgICAgICB7MHhjMDAwLCAxMzR9LAorICAgICAgICB7MHhjMDAwLCAxMzZ9LAorICAgICAgICB7MHhjMDAwLCAxNDZ9LAorICAgICAgICB7MHhjMDAwLCAxNTR9LAorICAgICAgICB7MHhjMDAwLCAxNTZ9LAorICAgICAgICB7MHhjMDAwLCAxNjB9LAorICAgICAgICB7MHhjMDAwLCAxNjN9LAorICAgICAgICB7MHhjMDAwLCAxNjR9LAorICAgICAgICB7MHhjMDAwLCAxNjl9LAorICAgICAgICB7MHhjMDAwLCAxNzB9LAorICAgICAgICB7MHhjMDAwLCAxNzN9LAorICAgIH0sCisgICAgLyogMTIwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyMzB9LAorICAgICAgICB7MHg4MDA5LCAyMzB9LAorICAgICAgICB7MHg4MDE3LCAyMzB9LAorICAgICAgICB7MHhjMDI4LCAyMzB9LAorICAgICAgICB7MHg4MDAxLCAxMjl9LAorICAgICAgICB7MHhjMDE2LCAxMjl9LAorICAgICAgICB7MHg4MDAxLCAxMzJ9LAorICAgICAgICB7MHhjMDE2LCAxMzJ9LAorICAgICAgICB7MHg4MDAxLCAxMzN9LAorICAgICAgICB7MHhjMDE2LCAxMzN9LAorICAgICAgICB7MHg4MDAxLCAxMzR9LAorICAgICAgICB7MHhjMDE2LCAxMzR9LAorICAgICAgICB7MHg4MDAxLCAxMzZ9LAorICAgICAgICB7MHhjMDE2LCAxMzZ9LAorICAgICAgICB7MHg4MDAxLCAxNDZ9LAorICAgICAgICB7MHhjMDE2LCAxNDZ9LAorICAgIH0sCisgICAgLyogMTIxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMzB9LAorICAgICAgICB7MHg4MDA2LCAyMzB9LAorICAgICAgICB7MHg4MDBhLCAyMzB9LAorICAgICAgICB7MHg4MDBmLCAyMzB9LAorICAgICAgICB7MHg4MDE4LCAyMzB9LAorICAgICAgICB7MHg4MDFmLCAyMzB9LAorICAgICAgICB7MHg4MDI5LCAyMzB9LAorICAgICAgICB7MHhjMDM4LCAyMzB9LAorICAgICAgICB7MHg4MDAyLCAxMjl9LAorICAgICAgICB7MHg4MDA5LCAxMjl9LAorICAgICAgICB7MHg4MDE3LCAxMjl9LAorICAgICAgICB7MHhjMDI4LCAxMjl9LAorICAgICAgICB7MHg4MDAyLCAxMzJ9LAorICAgICAgICB7MHg4MDA5LCAxMzJ9LAorICAgICAgICB7MHg4MDE3LCAxMzJ9LAorICAgICAgICB7MHhjMDI4LCAxMzJ9LAorICAgIH0sCisgICAgLyogMTIyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMjl9LAorICAgICAgICB7MHg4MDA2LCAxMjl9LAorICAgICAgICB7MHg4MDBhLCAxMjl9LAorICAgICAgICB7MHg4MDBmLCAxMjl9LAorICAgICAgICB7MHg4MDE4LCAxMjl9LAorICAgICAgICB7MHg4MDFmLCAxMjl9LAorICAgICAgICB7MHg4MDI5LCAxMjl9LAorICAgICAgICB7MHhjMDM4LCAxMjl9LAorICAgICAgICB7MHg4MDAzLCAxMzJ9LAorICAgICAgICB7MHg4MDA2LCAxMzJ9LAorICAgICAgICB7MHg4MDBhLCAxMzJ9LAorICAgICAgICB7MHg4MDBmLCAxMzJ9LAorICAgICAgICB7MHg4MDE4LCAxMzJ9LAorICAgICAgICB7MHg4MDFmLCAxMzJ9LAorICAgICAgICB7MHg4MDI5LCAxMzJ9LAorICAgICAgICB7MHhjMDM4LCAxMzJ9LAorICAgIH0sCisgICAgLyogMTIzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMzN9LAorICAgICAgICB7MHg4MDA5LCAxMzN9LAorICAgICAgICB7MHg4MDE3LCAxMzN9LAorICAgICAgICB7MHhjMDI4LCAxMzN9LAorICAgICAgICB7MHg4MDAyLCAxMzR9LAorICAgICAgICB7MHg4MDA5LCAxMzR9LAorICAgICAgICB7MHg4MDE3LCAxMzR9LAorICAgICAgICB7MHhjMDI4LCAxMzR9LAorICAgICAgICB7MHg4MDAyLCAxMzZ9LAorICAgICAgICB7MHg4MDA5LCAxMzZ9LAorICAgICAgICB7MHg4MDE3LCAxMzZ9LAorICAgICAgICB7MHhjMDI4LCAxMzZ9LAorICAgICAgICB7MHg4MDAyLCAxNDZ9LAorICAgICAgICB7MHg4MDA5LCAxNDZ9LAorICAgICAgICB7MHg4MDE3LCAxNDZ9LAorICAgICAgICB7MHhjMDI4LCAxNDZ9LAorICAgIH0sCisgICAgLyogMTI0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMzN9LAorICAgICAgICB7MHg4MDA2LCAxMzN9LAorICAgICAgICB7MHg4MDBhLCAxMzN9LAorICAgICAgICB7MHg4MDBmLCAxMzN9LAorICAgICAgICB7MHg4MDE4LCAxMzN9LAorICAgICAgICB7MHg4MDFmLCAxMzN9LAorICAgICAgICB7MHg4MDI5LCAxMzN9LAorICAgICAgICB7MHhjMDM4LCAxMzN9LAorICAgICAgICB7MHg4MDAzLCAxMzR9LAorICAgICAgICB7MHg4MDA2LCAxMzR9LAorICAgICAgICB7MHg4MDBhLCAxMzR9LAorICAgICAgICB7MHg4MDBmLCAxMzR9LAorICAgICAgICB7MHg4MDE4LCAxMzR9LAorICAgICAgICB7MHg4MDFmLCAxMzR9LAorICAgICAgICB7MHg4MDI5LCAxMzR9LAorICAgICAgICB7MHhjMDM4LCAxMzR9LAorICAgIH0sCisgICAgLyogMTI1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMzZ9LAorICAgICAgICB7MHg4MDA2LCAxMzZ9LAorICAgICAgICB7MHg4MDBhLCAxMzZ9LAorICAgICAgICB7MHg4MDBmLCAxMzZ9LAorICAgICAgICB7MHg4MDE4LCAxMzZ9LAorICAgICAgICB7MHg4MDFmLCAxMzZ9LAorICAgICAgICB7MHg4MDI5LCAxMzZ9LAorICAgICAgICB7MHhjMDM4LCAxMzZ9LAorICAgICAgICB7MHg4MDAzLCAxNDZ9LAorICAgICAgICB7MHg4MDA2LCAxNDZ9LAorICAgICAgICB7MHg4MDBhLCAxNDZ9LAorICAgICAgICB7MHg4MDBmLCAxNDZ9LAorICAgICAgICB7MHg4MDE4LCAxNDZ9LAorICAgICAgICB7MHg4MDFmLCAxNDZ9LAorICAgICAgICB7MHg4MDI5LCAxNDZ9LAorICAgICAgICB7MHhjMDM4LCAxNDZ9LAorICAgIH0sCisgICAgLyogMTI2ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxNTR9LAorICAgICAgICB7MHhjMDE2LCAxNTR9LAorICAgICAgICB7MHg4MDAxLCAxNTZ9LAorICAgICAgICB7MHhjMDE2LCAxNTZ9LAorICAgICAgICB7MHg4MDAxLCAxNjB9LAorICAgICAgICB7MHhjMDE2LCAxNjB9LAorICAgICAgICB7MHg4MDAxLCAxNjN9LAorICAgICAgICB7MHhjMDE2LCAxNjN9LAorICAgICAgICB7MHg4MDAxLCAxNjR9LAorICAgICAgICB7MHhjMDE2LCAxNjR9LAorICAgICAgICB7MHg4MDAxLCAxNjl9LAorICAgICAgICB7MHhjMDE2LCAxNjl9LAorICAgICAgICB7MHg4MDAxLCAxNzB9LAorICAgICAgICB7MHhjMDE2LCAxNzB9LAorICAgICAgICB7MHg4MDAxLCAxNzN9LAorICAgICAgICB7MHhjMDE2LCAxNzN9LAorICAgIH0sCisgICAgLyogMTI3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNTR9LAorICAgICAgICB7MHg4MDA5LCAxNTR9LAorICAgICAgICB7MHg4MDE3LCAxNTR9LAorICAgICAgICB7MHhjMDI4LCAxNTR9LAorICAgICAgICB7MHg4MDAyLCAxNTZ9LAorICAgICAgICB7MHg4MDA5LCAxNTZ9LAorICAgICAgICB7MHg4MDE3LCAxNTZ9LAorICAgICAgICB7MHhjMDI4LCAxNTZ9LAorICAgICAgICB7MHg4MDAyLCAxNjB9LAorICAgICAgICB7MHg4MDA5LCAxNjB9LAorICAgICAgICB7MHg4MDE3LCAxNjB9LAorICAgICAgICB7MHhjMDI4LCAxNjB9LAorICAgICAgICB7MHg4MDAyLCAxNjN9LAorICAgICAgICB7MHg4MDA5LCAxNjN9LAorICAgICAgICB7MHg4MDE3LCAxNjN9LAorICAgICAgICB7MHhjMDI4LCAxNjN9LAorICAgIH0sCisgICAgLyogMTI4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNTR9LAorICAgICAgICB7MHg4MDA2LCAxNTR9LAorICAgICAgICB7MHg4MDBhLCAxNTR9LAorICAgICAgICB7MHg4MDBmLCAxNTR9LAorICAgICAgICB7MHg4MDE4LCAxNTR9LAorICAgICAgICB7MHg4MDFmLCAxNTR9LAorICAgICAgICB7MHg4MDI5LCAxNTR9LAorICAgICAgICB7MHhjMDM4LCAxNTR9LAorICAgICAgICB7MHg4MDAzLCAxNTZ9LAorICAgICAgICB7MHg4MDA2LCAxNTZ9LAorICAgICAgICB7MHg4MDBhLCAxNTZ9LAorICAgICAgICB7MHg4MDBmLCAxNTZ9LAorICAgICAgICB7MHg4MDE4LCAxNTZ9LAorICAgICAgICB7MHg4MDFmLCAxNTZ9LAorICAgICAgICB7MHg4MDI5LCAxNTZ9LAorICAgICAgICB7MHhjMDM4LCAxNTZ9LAorICAgIH0sCisgICAgLyogMTI5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNjB9LAorICAgICAgICB7MHg4MDA2LCAxNjB9LAorICAgICAgICB7MHg4MDBhLCAxNjB9LAorICAgICAgICB7MHg4MDBmLCAxNjB9LAorICAgICAgICB7MHg4MDE4LCAxNjB9LAorICAgICAgICB7MHg4MDFmLCAxNjB9LAorICAgICAgICB7MHg4MDI5LCAxNjB9LAorICAgICAgICB7MHhjMDM4LCAxNjB9LAorICAgICAgICB7MHg4MDAzLCAxNjN9LAorICAgICAgICB7MHg4MDA2LCAxNjN9LAorICAgICAgICB7MHg4MDBhLCAxNjN9LAorICAgICAgICB7MHg4MDBmLCAxNjN9LAorICAgICAgICB7MHg4MDE4LCAxNjN9LAorICAgICAgICB7MHg4MDFmLCAxNjN9LAorICAgICAgICB7MHg4MDI5LCAxNjN9LAorICAgICAgICB7MHhjMDM4LCAxNjN9LAorICAgIH0sCisgICAgLyogMTMwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNjR9LAorICAgICAgICB7MHg4MDA5LCAxNjR9LAorICAgICAgICB7MHg4MDE3LCAxNjR9LAorICAgICAgICB7MHhjMDI4LCAxNjR9LAorICAgICAgICB7MHg4MDAyLCAxNjl9LAorICAgICAgICB7MHg4MDA5LCAxNjl9LAorICAgICAgICB7MHg4MDE3LCAxNjl9LAorICAgICAgICB7MHhjMDI4LCAxNjl9LAorICAgICAgICB7MHg4MDAyLCAxNzB9LAorICAgICAgICB7MHg4MDA5LCAxNzB9LAorICAgICAgICB7MHg4MDE3LCAxNzB9LAorICAgICAgICB7MHhjMDI4LCAxNzB9LAorICAgICAgICB7MHg4MDAyLCAxNzN9LAorICAgICAgICB7MHg4MDA5LCAxNzN9LAorICAgICAgICB7MHg4MDE3LCAxNzN9LAorICAgICAgICB7MHhjMDI4LCAxNzN9LAorICAgIH0sCisgICAgLyogMTMxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNjR9LAorICAgICAgICB7MHg4MDA2LCAxNjR9LAorICAgICAgICB7MHg4MDBhLCAxNjR9LAorICAgICAgICB7MHg4MDBmLCAxNjR9LAorICAgICAgICB7MHg4MDE4LCAxNjR9LAorICAgICAgICB7MHg4MDFmLCAxNjR9LAorICAgICAgICB7MHg4MDI5LCAxNjR9LAorICAgICAgICB7MHhjMDM4LCAxNjR9LAorICAgICAgICB7MHg4MDAzLCAxNjl9LAorICAgICAgICB7MHg4MDA2LCAxNjl9LAorICAgICAgICB7MHg4MDBhLCAxNjl9LAorICAgICAgICB7MHg4MDBmLCAxNjl9LAorICAgICAgICB7MHg4MDE4LCAxNjl9LAorICAgICAgICB7MHg4MDFmLCAxNjl9LAorICAgICAgICB7MHg4MDI5LCAxNjl9LAorICAgICAgICB7MHhjMDM4LCAxNjl9LAorICAgIH0sCisgICAgLyogMTMyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNzB9LAorICAgICAgICB7MHg4MDA2LCAxNzB9LAorICAgICAgICB7MHg4MDBhLCAxNzB9LAorICAgICAgICB7MHg4MDBmLCAxNzB9LAorICAgICAgICB7MHg4MDE4LCAxNzB9LAorICAgICAgICB7MHg4MDFmLCAxNzB9LAorICAgICAgICB7MHg4MDI5LCAxNzB9LAorICAgICAgICB7MHhjMDM4LCAxNzB9LAorICAgICAgICB7MHg4MDAzLCAxNzN9LAorICAgICAgICB7MHg4MDA2LCAxNzN9LAorICAgICAgICB7MHg4MDBhLCAxNzN9LAorICAgICAgICB7MHg4MDBmLCAxNzN9LAorICAgICAgICB7MHg4MDE4LCAxNzN9LAorICAgICAgICB7MHg4MDFmLCAxNzN9LAorICAgICAgICB7MHg4MDI5LCAxNzN9LAorICAgICAgICB7MHhjMDM4LCAxNzN9LAorICAgIH0sCisgICAgLyogMTMzICovCisgICAgeworICAgICAgICB7MHg4OSwgMH0sCisgICAgICAgIHsweDhhLCAwfSwKKyAgICAgICAgezB4OGMsIDB9LAorICAgICAgICB7MHg4ZCwgMH0sCisgICAgICAgIHsweDkwLCAwfSwKKyAgICAgICAgezB4OTEsIDB9LAorICAgICAgICB7MHg5MywgMH0sCisgICAgICAgIHsweDk2LCAwfSwKKyAgICAgICAgezB4OWMsIDB9LAorICAgICAgICB7MHg5ZiwgMH0sCisgICAgICAgIHsweGEzLCAwfSwKKyAgICAgICAgezB4YTYsIDB9LAorICAgICAgICB7MHhhYiwgMH0sCisgICAgICAgIHsweGFlLCAwfSwKKyAgICAgICAgezB4YjUsIDB9LAorICAgICAgICB7MHhiZSwgMH0sCisgICAgfSwKKyAgICAvKiAxMzQgKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDE3OH0sCisgICAgICAgIHsweGMwMDAsIDE4MX0sCisgICAgICAgIHsweGMwMDAsIDE4NX0sCisgICAgICAgIHsweGMwMDAsIDE4Nn0sCisgICAgICAgIHsweGMwMDAsIDE4N30sCisgICAgICAgIHsweGMwMDAsIDE4OX0sCisgICAgICAgIHsweGMwMDAsIDE5MH0sCisgICAgICAgIHsweGMwMDAsIDE5Nn0sCisgICAgICAgIHsweGMwMDAsIDE5OH0sCisgICAgICAgIHsweGMwMDAsIDIyOH0sCisgICAgICAgIHsweGMwMDAsIDIzMn0sCisgICAgICAgIHsweGMwMDAsIDIzM30sCisgICAgICAgIHsweDk0LCAwfSwKKyAgICAgICAgezB4OTUsIDB9LAorICAgICAgICB7MHg5NywgMH0sCisgICAgICAgIHsweDk4LCAwfSwKKyAgICB9LAorICAgIC8qIDEzNSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMTc4fSwKKyAgICAgICAgezB4YzAxNiwgMTc4fSwKKyAgICAgICAgezB4ODAwMSwgMTgxfSwKKyAgICAgICAgezB4YzAxNiwgMTgxfSwKKyAgICAgICAgezB4ODAwMSwgMTg1fSwKKyAgICAgICAgezB4YzAxNiwgMTg1fSwKKyAgICAgICAgezB4ODAwMSwgMTg2fSwKKyAgICAgICAgezB4YzAxNiwgMTg2fSwKKyAgICAgICAgezB4ODAwMSwgMTg3fSwKKyAgICAgICAgezB4YzAxNiwgMTg3fSwKKyAgICAgICAgezB4ODAwMSwgMTg5fSwKKyAgICAgICAgezB4YzAxNiwgMTg5fSwKKyAgICAgICAgezB4ODAwMSwgMTkwfSwKKyAgICAgICAgezB4YzAxNiwgMTkwfSwKKyAgICAgICAgezB4ODAwMSwgMTk2fSwKKyAgICAgICAgezB4YzAxNiwgMTk2fSwKKyAgICB9LAorICAgIC8qIDEzNiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTc4fSwKKyAgICAgICAgezB4ODAwOSwgMTc4fSwKKyAgICAgICAgezB4ODAxNywgMTc4fSwKKyAgICAgICAgezB4YzAyOCwgMTc4fSwKKyAgICAgICAgezB4ODAwMiwgMTgxfSwKKyAgICAgICAgezB4ODAwOSwgMTgxfSwKKyAgICAgICAgezB4ODAxNywgMTgxfSwKKyAgICAgICAgezB4YzAyOCwgMTgxfSwKKyAgICAgICAgezB4ODAwMiwgMTg1fSwKKyAgICAgICAgezB4ODAwOSwgMTg1fSwKKyAgICAgICAgezB4ODAxNywgMTg1fSwKKyAgICAgICAgezB4YzAyOCwgMTg1fSwKKyAgICAgICAgezB4ODAwMiwgMTg2fSwKKyAgICAgICAgezB4ODAwOSwgMTg2fSwKKyAgICAgICAgezB4ODAxNywgMTg2fSwKKyAgICAgICAgezB4YzAyOCwgMTg2fSwKKyAgICB9LAorICAgIC8qIDEzNyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTc4fSwKKyAgICAgICAgezB4ODAwNiwgMTc4fSwKKyAgICAgICAgezB4ODAwYSwgMTc4fSwKKyAgICAgICAgezB4ODAwZiwgMTc4fSwKKyAgICAgICAgezB4ODAxOCwgMTc4fSwKKyAgICAgICAgezB4ODAxZiwgMTc4fSwKKyAgICAgICAgezB4ODAyOSwgMTc4fSwKKyAgICAgICAgezB4YzAzOCwgMTc4fSwKKyAgICAgICAgezB4ODAwMywgMTgxfSwKKyAgICAgICAgezB4ODAwNiwgMTgxfSwKKyAgICAgICAgezB4ODAwYSwgMTgxfSwKKyAgICAgICAgezB4ODAwZiwgMTgxfSwKKyAgICAgICAgezB4ODAxOCwgMTgxfSwKKyAgICAgICAgezB4ODAxZiwgMTgxfSwKKyAgICAgICAgezB4ODAyOSwgMTgxfSwKKyAgICAgICAgezB4YzAzOCwgMTgxfSwKKyAgICB9LAorICAgIC8qIDEzOCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTg1fSwKKyAgICAgICAgezB4ODAwNiwgMTg1fSwKKyAgICAgICAgezB4ODAwYSwgMTg1fSwKKyAgICAgICAgezB4ODAwZiwgMTg1fSwKKyAgICAgICAgezB4ODAxOCwgMTg1fSwKKyAgICAgICAgezB4ODAxZiwgMTg1fSwKKyAgICAgICAgezB4ODAyOSwgMTg1fSwKKyAgICAgICAgezB4YzAzOCwgMTg1fSwKKyAgICAgICAgezB4ODAwMywgMTg2fSwKKyAgICAgICAgezB4ODAwNiwgMTg2fSwKKyAgICAgICAgezB4ODAwYSwgMTg2fSwKKyAgICAgICAgezB4ODAwZiwgMTg2fSwKKyAgICAgICAgezB4ODAxOCwgMTg2fSwKKyAgICAgICAgezB4ODAxZiwgMTg2fSwKKyAgICAgICAgezB4ODAyOSwgMTg2fSwKKyAgICAgICAgezB4YzAzOCwgMTg2fSwKKyAgICB9LAorICAgIC8qIDEzOSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTg3fSwKKyAgICAgICAgezB4ODAwOSwgMTg3fSwKKyAgICAgICAgezB4ODAxNywgMTg3fSwKKyAgICAgICAgezB4YzAyOCwgMTg3fSwKKyAgICAgICAgezB4ODAwMiwgMTg5fSwKKyAgICAgICAgezB4ODAwOSwgMTg5fSwKKyAgICAgICAgezB4ODAxNywgMTg5fSwKKyAgICAgICAgezB4YzAyOCwgMTg5fSwKKyAgICAgICAgezB4ODAwMiwgMTkwfSwKKyAgICAgICAgezB4ODAwOSwgMTkwfSwKKyAgICAgICAgezB4ODAxNywgMTkwfSwKKyAgICAgICAgezB4YzAyOCwgMTkwfSwKKyAgICAgICAgezB4ODAwMiwgMTk2fSwKKyAgICAgICAgezB4ODAwOSwgMTk2fSwKKyAgICAgICAgezB4ODAxNywgMTk2fSwKKyAgICAgICAgezB4YzAyOCwgMTk2fSwKKyAgICB9LAorICAgIC8qIDE0MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTg3fSwKKyAgICAgICAgezB4ODAwNiwgMTg3fSwKKyAgICAgICAgezB4ODAwYSwgMTg3fSwKKyAgICAgICAgezB4ODAwZiwgMTg3fSwKKyAgICAgICAgezB4ODAxOCwgMTg3fSwKKyAgICAgICAgezB4ODAxZiwgMTg3fSwKKyAgICAgICAgezB4ODAyOSwgMTg3fSwKKyAgICAgICAgezB4YzAzOCwgMTg3fSwKKyAgICAgICAgezB4ODAwMywgMTg5fSwKKyAgICAgICAgezB4ODAwNiwgMTg5fSwKKyAgICAgICAgezB4ODAwYSwgMTg5fSwKKyAgICAgICAgezB4ODAwZiwgMTg5fSwKKyAgICAgICAgezB4ODAxOCwgMTg5fSwKKyAgICAgICAgezB4ODAxZiwgMTg5fSwKKyAgICAgICAgezB4ODAyOSwgMTg5fSwKKyAgICAgICAgezB4YzAzOCwgMTg5fSwKKyAgICB9LAorICAgIC8qIDE0MSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTkwfSwKKyAgICAgICAgezB4ODAwNiwgMTkwfSwKKyAgICAgICAgezB4ODAwYSwgMTkwfSwKKyAgICAgICAgezB4ODAwZiwgMTkwfSwKKyAgICAgICAgezB4ODAxOCwgMTkwfSwKKyAgICAgICAgezB4ODAxZiwgMTkwfSwKKyAgICAgICAgezB4ODAyOSwgMTkwfSwKKyAgICAgICAgezB4YzAzOCwgMTkwfSwKKyAgICAgICAgezB4ODAwMywgMTk2fSwKKyAgICAgICAgezB4ODAwNiwgMTk2fSwKKyAgICAgICAgezB4ODAwYSwgMTk2fSwKKyAgICAgICAgezB4ODAwZiwgMTk2fSwKKyAgICAgICAgezB4ODAxOCwgMTk2fSwKKyAgICAgICAgezB4ODAxZiwgMTk2fSwKKyAgICAgICAgezB4ODAyOSwgMTk2fSwKKyAgICAgICAgezB4YzAzOCwgMTk2fSwKKyAgICB9LAorICAgIC8qIDE0MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMTk4fSwKKyAgICAgICAgezB4YzAxNiwgMTk4fSwKKyAgICAgICAgezB4ODAwMSwgMjI4fSwKKyAgICAgICAgezB4YzAxNiwgMjI4fSwKKyAgICAgICAgezB4ODAwMSwgMjMyfSwKKyAgICAgICAgezB4YzAxNiwgMjMyfSwKKyAgICAgICAgezB4ODAwMSwgMjMzfSwKKyAgICAgICAgezB4YzAxNiwgMjMzfSwKKyAgICAgICAgezB4YzAwMCwgMX0sCisgICAgICAgIHsweGMwMDAsIDEzNX0sCisgICAgICAgIHsweGMwMDAsIDEzN30sCisgICAgICAgIHsweGMwMDAsIDEzOH0sCisgICAgICAgIHsweGMwMDAsIDEzOX0sCisgICAgICAgIHsweGMwMDAsIDE0MH0sCisgICAgICAgIHsweGMwMDAsIDE0MX0sCisgICAgICAgIHsweGMwMDAsIDE0M30sCisgICAgfSwKKyAgICAvKiAxNDMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE5OH0sCisgICAgICAgIHsweDgwMDksIDE5OH0sCisgICAgICAgIHsweDgwMTcsIDE5OH0sCisgICAgICAgIHsweGMwMjgsIDE5OH0sCisgICAgICAgIHsweDgwMDIsIDIyOH0sCisgICAgICAgIHsweDgwMDksIDIyOH0sCisgICAgICAgIHsweDgwMTcsIDIyOH0sCisgICAgICAgIHsweGMwMjgsIDIyOH0sCisgICAgICAgIHsweDgwMDIsIDIzMn0sCisgICAgICAgIHsweDgwMDksIDIzMn0sCisgICAgICAgIHsweDgwMTcsIDIzMn0sCisgICAgICAgIHsweGMwMjgsIDIzMn0sCisgICAgICAgIHsweDgwMDIsIDIzM30sCisgICAgICAgIHsweDgwMDksIDIzM30sCisgICAgICAgIHsweDgwMTcsIDIzM30sCisgICAgICAgIHsweGMwMjgsIDIzM30sCisgICAgfSwKKyAgICAvKiAxNDQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE5OH0sCisgICAgICAgIHsweDgwMDYsIDE5OH0sCisgICAgICAgIHsweDgwMGEsIDE5OH0sCisgICAgICAgIHsweDgwMGYsIDE5OH0sCisgICAgICAgIHsweDgwMTgsIDE5OH0sCisgICAgICAgIHsweDgwMWYsIDE5OH0sCisgICAgICAgIHsweDgwMjksIDE5OH0sCisgICAgICAgIHsweGMwMzgsIDE5OH0sCisgICAgICAgIHsweDgwMDMsIDIyOH0sCisgICAgICAgIHsweDgwMDYsIDIyOH0sCisgICAgICAgIHsweDgwMGEsIDIyOH0sCisgICAgICAgIHsweDgwMGYsIDIyOH0sCisgICAgICAgIHsweDgwMTgsIDIyOH0sCisgICAgICAgIHsweDgwMWYsIDIyOH0sCisgICAgICAgIHsweDgwMjksIDIyOH0sCisgICAgICAgIHsweGMwMzgsIDIyOH0sCisgICAgfSwKKyAgICAvKiAxNDUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIzMn0sCisgICAgICAgIHsweDgwMDYsIDIzMn0sCisgICAgICAgIHsweDgwMGEsIDIzMn0sCisgICAgICAgIHsweDgwMGYsIDIzMn0sCisgICAgICAgIHsweDgwMTgsIDIzMn0sCisgICAgICAgIHsweDgwMWYsIDIzMn0sCisgICAgICAgIHsweDgwMjksIDIzMn0sCisgICAgICAgIHsweGMwMzgsIDIzMn0sCisgICAgICAgIHsweDgwMDMsIDIzM30sCisgICAgICAgIHsweDgwMDYsIDIzM30sCisgICAgICAgIHsweDgwMGEsIDIzM30sCisgICAgICAgIHsweDgwMGYsIDIzM30sCisgICAgICAgIHsweDgwMTgsIDIzM30sCisgICAgICAgIHsweDgwMWYsIDIzM30sCisgICAgICAgIHsweDgwMjksIDIzM30sCisgICAgICAgIHsweGMwMzgsIDIzM30sCisgICAgfSwKKyAgICAvKiAxNDYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDF9LAorICAgICAgICB7MHhjMDE2LCAxfSwKKyAgICAgICAgezB4ODAwMSwgMTM1fSwKKyAgICAgICAgezB4YzAxNiwgMTM1fSwKKyAgICAgICAgezB4ODAwMSwgMTM3fSwKKyAgICAgICAgezB4YzAxNiwgMTM3fSwKKyAgICAgICAgezB4ODAwMSwgMTM4fSwKKyAgICAgICAgezB4YzAxNiwgMTM4fSwKKyAgICAgICAgezB4ODAwMSwgMTM5fSwKKyAgICAgICAgezB4YzAxNiwgMTM5fSwKKyAgICAgICAgezB4ODAwMSwgMTQwfSwKKyAgICAgICAgezB4YzAxNiwgMTQwfSwKKyAgICAgICAgezB4ODAwMSwgMTQxfSwKKyAgICAgICAgezB4YzAxNiwgMTQxfSwKKyAgICAgICAgezB4ODAwMSwgMTQzfSwKKyAgICAgICAgezB4YzAxNiwgMTQzfSwKKyAgICB9LAorICAgIC8qIDE0NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMX0sCisgICAgICAgIHsweDgwMDksIDF9LAorICAgICAgICB7MHg4MDE3LCAxfSwKKyAgICAgICAgezB4YzAyOCwgMX0sCisgICAgICAgIHsweDgwMDIsIDEzNX0sCisgICAgICAgIHsweDgwMDksIDEzNX0sCisgICAgICAgIHsweDgwMTcsIDEzNX0sCisgICAgICAgIHsweGMwMjgsIDEzNX0sCisgICAgICAgIHsweDgwMDIsIDEzN30sCisgICAgICAgIHsweDgwMDksIDEzN30sCisgICAgICAgIHsweDgwMTcsIDEzN30sCisgICAgICAgIHsweGMwMjgsIDEzN30sCisgICAgICAgIHsweDgwMDIsIDEzOH0sCisgICAgICAgIHsweDgwMDksIDEzOH0sCisgICAgICAgIHsweDgwMTcsIDEzOH0sCisgICAgICAgIHsweGMwMjgsIDEzOH0sCisgICAgfSwKKyAgICAvKiAxNDggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDF9LAorICAgICAgICB7MHg4MDA2LCAxfSwKKyAgICAgICAgezB4ODAwYSwgMX0sCisgICAgICAgIHsweDgwMGYsIDF9LAorICAgICAgICB7MHg4MDE4LCAxfSwKKyAgICAgICAgezB4ODAxZiwgMX0sCisgICAgICAgIHsweDgwMjksIDF9LAorICAgICAgICB7MHhjMDM4LCAxfSwKKyAgICAgICAgezB4ODAwMywgMTM1fSwKKyAgICAgICAgezB4ODAwNiwgMTM1fSwKKyAgICAgICAgezB4ODAwYSwgMTM1fSwKKyAgICAgICAgezB4ODAwZiwgMTM1fSwKKyAgICAgICAgezB4ODAxOCwgMTM1fSwKKyAgICAgICAgezB4ODAxZiwgMTM1fSwKKyAgICAgICAgezB4ODAyOSwgMTM1fSwKKyAgICAgICAgezB4YzAzOCwgMTM1fSwKKyAgICB9LAorICAgIC8qIDE0OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTM3fSwKKyAgICAgICAgezB4ODAwNiwgMTM3fSwKKyAgICAgICAgezB4ODAwYSwgMTM3fSwKKyAgICAgICAgezB4ODAwZiwgMTM3fSwKKyAgICAgICAgezB4ODAxOCwgMTM3fSwKKyAgICAgICAgezB4ODAxZiwgMTM3fSwKKyAgICAgICAgezB4ODAyOSwgMTM3fSwKKyAgICAgICAgezB4YzAzOCwgMTM3fSwKKyAgICAgICAgezB4ODAwMywgMTM4fSwKKyAgICAgICAgezB4ODAwNiwgMTM4fSwKKyAgICAgICAgezB4ODAwYSwgMTM4fSwKKyAgICAgICAgezB4ODAwZiwgMTM4fSwKKyAgICAgICAgezB4ODAxOCwgMTM4fSwKKyAgICAgICAgezB4ODAxZiwgMTM4fSwKKyAgICAgICAgezB4ODAyOSwgMTM4fSwKKyAgICAgICAgezB4YzAzOCwgMTM4fSwKKyAgICB9LAorICAgIC8qIDE1MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTM5fSwKKyAgICAgICAgezB4ODAwOSwgMTM5fSwKKyAgICAgICAgezB4ODAxNywgMTM5fSwKKyAgICAgICAgezB4YzAyOCwgMTM5fSwKKyAgICAgICAgezB4ODAwMiwgMTQwfSwKKyAgICAgICAgezB4ODAwOSwgMTQwfSwKKyAgICAgICAgezB4ODAxNywgMTQwfSwKKyAgICAgICAgezB4YzAyOCwgMTQwfSwKKyAgICAgICAgezB4ODAwMiwgMTQxfSwKKyAgICAgICAgezB4ODAwOSwgMTQxfSwKKyAgICAgICAgezB4ODAxNywgMTQxfSwKKyAgICAgICAgezB4YzAyOCwgMTQxfSwKKyAgICAgICAgezB4ODAwMiwgMTQzfSwKKyAgICAgICAgezB4ODAwOSwgMTQzfSwKKyAgICAgICAgezB4ODAxNywgMTQzfSwKKyAgICAgICAgezB4YzAyOCwgMTQzfSwKKyAgICB9LAorICAgIC8qIDE1MSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTM5fSwKKyAgICAgICAgezB4ODAwNiwgMTM5fSwKKyAgICAgICAgezB4ODAwYSwgMTM5fSwKKyAgICAgICAgezB4ODAwZiwgMTM5fSwKKyAgICAgICAgezB4ODAxOCwgMTM5fSwKKyAgICAgICAgezB4ODAxZiwgMTM5fSwKKyAgICAgICAgezB4ODAyOSwgMTM5fSwKKyAgICAgICAgezB4YzAzOCwgMTM5fSwKKyAgICAgICAgezB4ODAwMywgMTQwfSwKKyAgICAgICAgezB4ODAwNiwgMTQwfSwKKyAgICAgICAgezB4ODAwYSwgMTQwfSwKKyAgICAgICAgezB4ODAwZiwgMTQwfSwKKyAgICAgICAgezB4ODAxOCwgMTQwfSwKKyAgICAgICAgezB4ODAxZiwgMTQwfSwKKyAgICAgICAgezB4ODAyOSwgMTQwfSwKKyAgICAgICAgezB4YzAzOCwgMTQwfSwKKyAgICB9LAorICAgIC8qIDE1MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTQxfSwKKyAgICAgICAgezB4ODAwNiwgMTQxfSwKKyAgICAgICAgezB4ODAwYSwgMTQxfSwKKyAgICAgICAgezB4ODAwZiwgMTQxfSwKKyAgICAgICAgezB4ODAxOCwgMTQxfSwKKyAgICAgICAgezB4ODAxZiwgMTQxfSwKKyAgICAgICAgezB4ODAyOSwgMTQxfSwKKyAgICAgICAgezB4YzAzOCwgMTQxfSwKKyAgICAgICAgezB4ODAwMywgMTQzfSwKKyAgICAgICAgezB4ODAwNiwgMTQzfSwKKyAgICAgICAgezB4ODAwYSwgMTQzfSwKKyAgICAgICAgezB4ODAwZiwgMTQzfSwKKyAgICAgICAgezB4ODAxOCwgMTQzfSwKKyAgICAgICAgezB4ODAxZiwgMTQzfSwKKyAgICAgICAgezB4ODAyOSwgMTQzfSwKKyAgICAgICAgezB4YzAzOCwgMTQzfSwKKyAgICB9LAorICAgIC8qIDE1MyAqLworICAgIHsKKyAgICAgICAgezB4OWQsIDB9LAorICAgICAgICB7MHg5ZSwgMH0sCisgICAgICAgIHsweGEwLCAwfSwKKyAgICAgICAgezB4YTEsIDB9LAorICAgICAgICB7MHhhNCwgMH0sCisgICAgICAgIHsweGE1LCAwfSwKKyAgICAgICAgezB4YTcsIDB9LAorICAgICAgICB7MHhhOCwgMH0sCisgICAgICAgIHsweGFjLCAwfSwKKyAgICAgICAgezB4YWQsIDB9LAorICAgICAgICB7MHhhZiwgMH0sCisgICAgICAgIHsweGIxLCAwfSwKKyAgICAgICAgezB4YjYsIDB9LAorICAgICAgICB7MHhiOSwgMH0sCisgICAgICAgIHsweGJmLCAwfSwKKyAgICAgICAgezB4Y2YsIDB9LAorICAgIH0sCisgICAgLyogMTU0ICovCisgICAgeworICAgICAgICB7MHhjMDAwLCAxNDd9LAorICAgICAgICB7MHhjMDAwLCAxNDl9LAorICAgICAgICB7MHhjMDAwLCAxNTB9LAorICAgICAgICB7MHhjMDAwLCAxNTF9LAorICAgICAgICB7MHhjMDAwLCAxNTJ9LAorICAgICAgICB7MHhjMDAwLCAxNTV9LAorICAgICAgICB7MHhjMDAwLCAxNTd9LAorICAgICAgICB7MHhjMDAwLCAxNTh9LAorICAgICAgICB7MHhjMDAwLCAxNjV9LAorICAgICAgICB7MHhjMDAwLCAxNjZ9LAorICAgICAgICB7MHhjMDAwLCAxNjh9LAorICAgICAgICB7MHhjMDAwLCAxNzR9LAorICAgICAgICB7MHhjMDAwLCAxNzV9LAorICAgICAgICB7MHhjMDAwLCAxODB9LAorICAgICAgICB7MHhjMDAwLCAxODJ9LAorICAgICAgICB7MHhjMDAwLCAxODN9LAorICAgIH0sCisgICAgLyogMTU1ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxNDd9LAorICAgICAgICB7MHhjMDE2LCAxNDd9LAorICAgICAgICB7MHg4MDAxLCAxNDl9LAorICAgICAgICB7MHhjMDE2LCAxNDl9LAorICAgICAgICB7MHg4MDAxLCAxNTB9LAorICAgICAgICB7MHhjMDE2LCAxNTB9LAorICAgICAgICB7MHg4MDAxLCAxNTF9LAorICAgICAgICB7MHhjMDE2LCAxNTF9LAorICAgICAgICB7MHg4MDAxLCAxNTJ9LAorICAgICAgICB7MHhjMDE2LCAxNTJ9LAorICAgICAgICB7MHg4MDAxLCAxNTV9LAorICAgICAgICB7MHhjMDE2LCAxNTV9LAorICAgICAgICB7MHg4MDAxLCAxNTd9LAorICAgICAgICB7MHhjMDE2LCAxNTd9LAorICAgICAgICB7MHg4MDAxLCAxNTh9LAorICAgICAgICB7MHhjMDE2LCAxNTh9LAorICAgIH0sCisgICAgLyogMTU2ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNDd9LAorICAgICAgICB7MHg4MDA5LCAxNDd9LAorICAgICAgICB7MHg4MDE3LCAxNDd9LAorICAgICAgICB7MHhjMDI4LCAxNDd9LAorICAgICAgICB7MHg4MDAyLCAxNDl9LAorICAgICAgICB7MHg4MDA5LCAxNDl9LAorICAgICAgICB7MHg4MDE3LCAxNDl9LAorICAgICAgICB7MHhjMDI4LCAxNDl9LAorICAgICAgICB7MHg4MDAyLCAxNTB9LAorICAgICAgICB7MHg4MDA5LCAxNTB9LAorICAgICAgICB7MHg4MDE3LCAxNTB9LAorICAgICAgICB7MHhjMDI4LCAxNTB9LAorICAgICAgICB7MHg4MDAyLCAxNTF9LAorICAgICAgICB7MHg4MDA5LCAxNTF9LAorICAgICAgICB7MHg4MDE3LCAxNTF9LAorICAgICAgICB7MHhjMDI4LCAxNTF9LAorICAgIH0sCisgICAgLyogMTU3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNDd9LAorICAgICAgICB7MHg4MDA2LCAxNDd9LAorICAgICAgICB7MHg4MDBhLCAxNDd9LAorICAgICAgICB7MHg4MDBmLCAxNDd9LAorICAgICAgICB7MHg4MDE4LCAxNDd9LAorICAgICAgICB7MHg4MDFmLCAxNDd9LAorICAgICAgICB7MHg4MDI5LCAxNDd9LAorICAgICAgICB7MHhjMDM4LCAxNDd9LAorICAgICAgICB7MHg4MDAzLCAxNDl9LAorICAgICAgICB7MHg4MDA2LCAxNDl9LAorICAgICAgICB7MHg4MDBhLCAxNDl9LAorICAgICAgICB7MHg4MDBmLCAxNDl9LAorICAgICAgICB7MHg4MDE4LCAxNDl9LAorICAgICAgICB7MHg4MDFmLCAxNDl9LAorICAgICAgICB7MHg4MDI5LCAxNDl9LAorICAgICAgICB7MHhjMDM4LCAxNDl9LAorICAgIH0sCisgICAgLyogMTU4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNTB9LAorICAgICAgICB7MHg4MDA2LCAxNTB9LAorICAgICAgICB7MHg4MDBhLCAxNTB9LAorICAgICAgICB7MHg4MDBmLCAxNTB9LAorICAgICAgICB7MHg4MDE4LCAxNTB9LAorICAgICAgICB7MHg4MDFmLCAxNTB9LAorICAgICAgICB7MHg4MDI5LCAxNTB9LAorICAgICAgICB7MHhjMDM4LCAxNTB9LAorICAgICAgICB7MHg4MDAzLCAxNTF9LAorICAgICAgICB7MHg4MDA2LCAxNTF9LAorICAgICAgICB7MHg4MDBhLCAxNTF9LAorICAgICAgICB7MHg4MDBmLCAxNTF9LAorICAgICAgICB7MHg4MDE4LCAxNTF9LAorICAgICAgICB7MHg4MDFmLCAxNTF9LAorICAgICAgICB7MHg4MDI5LCAxNTF9LAorICAgICAgICB7MHhjMDM4LCAxNTF9LAorICAgIH0sCisgICAgLyogMTU5ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNTJ9LAorICAgICAgICB7MHg4MDA5LCAxNTJ9LAorICAgICAgICB7MHg4MDE3LCAxNTJ9LAorICAgICAgICB7MHhjMDI4LCAxNTJ9LAorICAgICAgICB7MHg4MDAyLCAxNTV9LAorICAgICAgICB7MHg4MDA5LCAxNTV9LAorICAgICAgICB7MHg4MDE3LCAxNTV9LAorICAgICAgICB7MHhjMDI4LCAxNTV9LAorICAgICAgICB7MHg4MDAyLCAxNTd9LAorICAgICAgICB7MHg4MDA5LCAxNTd9LAorICAgICAgICB7MHg4MDE3LCAxNTd9LAorICAgICAgICB7MHhjMDI4LCAxNTd9LAorICAgICAgICB7MHg4MDAyLCAxNTh9LAorICAgICAgICB7MHg4MDA5LCAxNTh9LAorICAgICAgICB7MHg4MDE3LCAxNTh9LAorICAgICAgICB7MHhjMDI4LCAxNTh9LAorICAgIH0sCisgICAgLyogMTYwICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNTJ9LAorICAgICAgICB7MHg4MDA2LCAxNTJ9LAorICAgICAgICB7MHg4MDBhLCAxNTJ9LAorICAgICAgICB7MHg4MDBmLCAxNTJ9LAorICAgICAgICB7MHg4MDE4LCAxNTJ9LAorICAgICAgICB7MHg4MDFmLCAxNTJ9LAorICAgICAgICB7MHg4MDI5LCAxNTJ9LAorICAgICAgICB7MHhjMDM4LCAxNTJ9LAorICAgICAgICB7MHg4MDAzLCAxNTV9LAorICAgICAgICB7MHg4MDA2LCAxNTV9LAorICAgICAgICB7MHg4MDBhLCAxNTV9LAorICAgICAgICB7MHg4MDBmLCAxNTV9LAorICAgICAgICB7MHg4MDE4LCAxNTV9LAorICAgICAgICB7MHg4MDFmLCAxNTV9LAorICAgICAgICB7MHg4MDI5LCAxNTV9LAorICAgICAgICB7MHhjMDM4LCAxNTV9LAorICAgIH0sCisgICAgLyogMTYxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNTd9LAorICAgICAgICB7MHg4MDA2LCAxNTd9LAorICAgICAgICB7MHg4MDBhLCAxNTd9LAorICAgICAgICB7MHg4MDBmLCAxNTd9LAorICAgICAgICB7MHg4MDE4LCAxNTd9LAorICAgICAgICB7MHg4MDFmLCAxNTd9LAorICAgICAgICB7MHg4MDI5LCAxNTd9LAorICAgICAgICB7MHhjMDM4LCAxNTd9LAorICAgICAgICB7MHg4MDAzLCAxNTh9LAorICAgICAgICB7MHg4MDA2LCAxNTh9LAorICAgICAgICB7MHg4MDBhLCAxNTh9LAorICAgICAgICB7MHg4MDBmLCAxNTh9LAorICAgICAgICB7MHg4MDE4LCAxNTh9LAorICAgICAgICB7MHg4MDFmLCAxNTh9LAorICAgICAgICB7MHg4MDI5LCAxNTh9LAorICAgICAgICB7MHhjMDM4LCAxNTh9LAorICAgIH0sCisgICAgLyogMTYyICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxNjV9LAorICAgICAgICB7MHhjMDE2LCAxNjV9LAorICAgICAgICB7MHg4MDAxLCAxNjZ9LAorICAgICAgICB7MHhjMDE2LCAxNjZ9LAorICAgICAgICB7MHg4MDAxLCAxNjh9LAorICAgICAgICB7MHhjMDE2LCAxNjh9LAorICAgICAgICB7MHg4MDAxLCAxNzR9LAorICAgICAgICB7MHhjMDE2LCAxNzR9LAorICAgICAgICB7MHg4MDAxLCAxNzV9LAorICAgICAgICB7MHhjMDE2LCAxNzV9LAorICAgICAgICB7MHg4MDAxLCAxODB9LAorICAgICAgICB7MHhjMDE2LCAxODB9LAorICAgICAgICB7MHg4MDAxLCAxODJ9LAorICAgICAgICB7MHhjMDE2LCAxODJ9LAorICAgICAgICB7MHg4MDAxLCAxODN9LAorICAgICAgICB7MHhjMDE2LCAxODN9LAorICAgIH0sCisgICAgLyogMTYzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNjV9LAorICAgICAgICB7MHg4MDA5LCAxNjV9LAorICAgICAgICB7MHg4MDE3LCAxNjV9LAorICAgICAgICB7MHhjMDI4LCAxNjV9LAorICAgICAgICB7MHg4MDAyLCAxNjZ9LAorICAgICAgICB7MHg4MDA5LCAxNjZ9LAorICAgICAgICB7MHg4MDE3LCAxNjZ9LAorICAgICAgICB7MHhjMDI4LCAxNjZ9LAorICAgICAgICB7MHg4MDAyLCAxNjh9LAorICAgICAgICB7MHg4MDA5LCAxNjh9LAorICAgICAgICB7MHg4MDE3LCAxNjh9LAorICAgICAgICB7MHhjMDI4LCAxNjh9LAorICAgICAgICB7MHg4MDAyLCAxNzR9LAorICAgICAgICB7MHg4MDA5LCAxNzR9LAorICAgICAgICB7MHg4MDE3LCAxNzR9LAorICAgICAgICB7MHhjMDI4LCAxNzR9LAorICAgIH0sCisgICAgLyogMTY0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNjV9LAorICAgICAgICB7MHg4MDA2LCAxNjV9LAorICAgICAgICB7MHg4MDBhLCAxNjV9LAorICAgICAgICB7MHg4MDBmLCAxNjV9LAorICAgICAgICB7MHg4MDE4LCAxNjV9LAorICAgICAgICB7MHg4MDFmLCAxNjV9LAorICAgICAgICB7MHg4MDI5LCAxNjV9LAorICAgICAgICB7MHhjMDM4LCAxNjV9LAorICAgICAgICB7MHg4MDAzLCAxNjZ9LAorICAgICAgICB7MHg4MDA2LCAxNjZ9LAorICAgICAgICB7MHg4MDBhLCAxNjZ9LAorICAgICAgICB7MHg4MDBmLCAxNjZ9LAorICAgICAgICB7MHg4MDE4LCAxNjZ9LAorICAgICAgICB7MHg4MDFmLCAxNjZ9LAorICAgICAgICB7MHg4MDI5LCAxNjZ9LAorICAgICAgICB7MHhjMDM4LCAxNjZ9LAorICAgIH0sCisgICAgLyogMTY1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNjh9LAorICAgICAgICB7MHg4MDA2LCAxNjh9LAorICAgICAgICB7MHg4MDBhLCAxNjh9LAorICAgICAgICB7MHg4MDBmLCAxNjh9LAorICAgICAgICB7MHg4MDE4LCAxNjh9LAorICAgICAgICB7MHg4MDFmLCAxNjh9LAorICAgICAgICB7MHg4MDI5LCAxNjh9LAorICAgICAgICB7MHhjMDM4LCAxNjh9LAorICAgICAgICB7MHg4MDAzLCAxNzR9LAorICAgICAgICB7MHg4MDA2LCAxNzR9LAorICAgICAgICB7MHg4MDBhLCAxNzR9LAorICAgICAgICB7MHg4MDBmLCAxNzR9LAorICAgICAgICB7MHg4MDE4LCAxNzR9LAorICAgICAgICB7MHg4MDFmLCAxNzR9LAorICAgICAgICB7MHg4MDI5LCAxNzR9LAorICAgICAgICB7MHhjMDM4LCAxNzR9LAorICAgIH0sCisgICAgLyogMTY2ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNzV9LAorICAgICAgICB7MHg4MDA5LCAxNzV9LAorICAgICAgICB7MHg4MDE3LCAxNzV9LAorICAgICAgICB7MHhjMDI4LCAxNzV9LAorICAgICAgICB7MHg4MDAyLCAxODB9LAorICAgICAgICB7MHg4MDA5LCAxODB9LAorICAgICAgICB7MHg4MDE3LCAxODB9LAorICAgICAgICB7MHhjMDI4LCAxODB9LAorICAgICAgICB7MHg4MDAyLCAxODJ9LAorICAgICAgICB7MHg4MDA5LCAxODJ9LAorICAgICAgICB7MHg4MDE3LCAxODJ9LAorICAgICAgICB7MHhjMDI4LCAxODJ9LAorICAgICAgICB7MHg4MDAyLCAxODN9LAorICAgICAgICB7MHg4MDA5LCAxODN9LAorICAgICAgICB7MHg4MDE3LCAxODN9LAorICAgICAgICB7MHhjMDI4LCAxODN9LAorICAgIH0sCisgICAgLyogMTY3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNzV9LAorICAgICAgICB7MHg4MDA2LCAxNzV9LAorICAgICAgICB7MHg4MDBhLCAxNzV9LAorICAgICAgICB7MHg4MDBmLCAxNzV9LAorICAgICAgICB7MHg4MDE4LCAxNzV9LAorICAgICAgICB7MHg4MDFmLCAxNzV9LAorICAgICAgICB7MHg4MDI5LCAxNzV9LAorICAgICAgICB7MHhjMDM4LCAxNzV9LAorICAgICAgICB7MHg4MDAzLCAxODB9LAorICAgICAgICB7MHg4MDA2LCAxODB9LAorICAgICAgICB7MHg4MDBhLCAxODB9LAorICAgICAgICB7MHg4MDBmLCAxODB9LAorICAgICAgICB7MHg4MDE4LCAxODB9LAorICAgICAgICB7MHg4MDFmLCAxODB9LAorICAgICAgICB7MHg4MDI5LCAxODB9LAorICAgICAgICB7MHhjMDM4LCAxODB9LAorICAgIH0sCisgICAgLyogMTY4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxODJ9LAorICAgICAgICB7MHg4MDA2LCAxODJ9LAorICAgICAgICB7MHg4MDBhLCAxODJ9LAorICAgICAgICB7MHg4MDBmLCAxODJ9LAorICAgICAgICB7MHg4MDE4LCAxODJ9LAorICAgICAgICB7MHg4MDFmLCAxODJ9LAorICAgICAgICB7MHg4MDI5LCAxODJ9LAorICAgICAgICB7MHhjMDM4LCAxODJ9LAorICAgICAgICB7MHg4MDAzLCAxODN9LAorICAgICAgICB7MHg4MDA2LCAxODN9LAorICAgICAgICB7MHg4MDBhLCAxODN9LAorICAgICAgICB7MHg4MDBmLCAxODN9LAorICAgICAgICB7MHg4MDE4LCAxODN9LAorICAgICAgICB7MHg4MDFmLCAxODN9LAorICAgICAgICB7MHg4MDI5LCAxODN9LAorICAgICAgICB7MHhjMDM4LCAxODN9LAorICAgIH0sCisgICAgLyogMTY5ICovCisgICAgeworICAgICAgICB7MHhjMDAwLCAxODh9LAorICAgICAgICB7MHhjMDAwLCAxOTF9LAorICAgICAgICB7MHhjMDAwLCAxOTd9LAorICAgICAgICB7MHhjMDAwLCAyMzF9LAorICAgICAgICB7MHhjMDAwLCAyMzl9LAorICAgICAgICB7MHhiMCwgMH0sCisgICAgICAgIHsweGIyLCAwfSwKKyAgICAgICAgezB4YjMsIDB9LAorICAgICAgICB7MHhiNywgMH0sCisgICAgICAgIHsweGI4LCAwfSwKKyAgICAgICAgezB4YmEsIDB9LAorICAgICAgICB7MHhiYiwgMH0sCisgICAgICAgIHsweGMwLCAwfSwKKyAgICAgICAgezB4YzcsIDB9LAorICAgICAgICB7MHhkMCwgMH0sCisgICAgICAgIHsweGRmLCAwfSwKKyAgICB9LAorICAgIC8qIDE3MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMTg4fSwKKyAgICAgICAgezB4YzAxNiwgMTg4fSwKKyAgICAgICAgezB4ODAwMSwgMTkxfSwKKyAgICAgICAgezB4YzAxNiwgMTkxfSwKKyAgICAgICAgezB4ODAwMSwgMTk3fSwKKyAgICAgICAgezB4YzAxNiwgMTk3fSwKKyAgICAgICAgezB4ODAwMSwgMjMxfSwKKyAgICAgICAgezB4YzAxNiwgMjMxfSwKKyAgICAgICAgezB4ODAwMSwgMjM5fSwKKyAgICAgICAgezB4YzAxNiwgMjM5fSwKKyAgICAgICAgezB4YzAwMCwgOX0sCisgICAgICAgIHsweGMwMDAsIDE0Mn0sCisgICAgICAgIHsweGMwMDAsIDE0NH0sCisgICAgICAgIHsweGMwMDAsIDE0NX0sCisgICAgICAgIHsweGMwMDAsIDE0OH0sCisgICAgICAgIHsweGMwMDAsIDE1OX0sCisgICAgfSwKKyAgICAvKiAxNzEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE4OH0sCisgICAgICAgIHsweDgwMDksIDE4OH0sCisgICAgICAgIHsweDgwMTcsIDE4OH0sCisgICAgICAgIHsweGMwMjgsIDE4OH0sCisgICAgICAgIHsweDgwMDIsIDE5MX0sCisgICAgICAgIHsweDgwMDksIDE5MX0sCisgICAgICAgIHsweDgwMTcsIDE5MX0sCisgICAgICAgIHsweGMwMjgsIDE5MX0sCisgICAgICAgIHsweDgwMDIsIDE5N30sCisgICAgICAgIHsweDgwMDksIDE5N30sCisgICAgICAgIHsweDgwMTcsIDE5N30sCisgICAgICAgIHsweGMwMjgsIDE5N30sCisgICAgICAgIHsweDgwMDIsIDIzMX0sCisgICAgICAgIHsweDgwMDksIDIzMX0sCisgICAgICAgIHsweDgwMTcsIDIzMX0sCisgICAgICAgIHsweGMwMjgsIDIzMX0sCisgICAgfSwKKyAgICAvKiAxNzIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE4OH0sCisgICAgICAgIHsweDgwMDYsIDE4OH0sCisgICAgICAgIHsweDgwMGEsIDE4OH0sCisgICAgICAgIHsweDgwMGYsIDE4OH0sCisgICAgICAgIHsweDgwMTgsIDE4OH0sCisgICAgICAgIHsweDgwMWYsIDE4OH0sCisgICAgICAgIHsweDgwMjksIDE4OH0sCisgICAgICAgIHsweGMwMzgsIDE4OH0sCisgICAgICAgIHsweDgwMDMsIDE5MX0sCisgICAgICAgIHsweDgwMDYsIDE5MX0sCisgICAgICAgIHsweDgwMGEsIDE5MX0sCisgICAgICAgIHsweDgwMGYsIDE5MX0sCisgICAgICAgIHsweDgwMTgsIDE5MX0sCisgICAgICAgIHsweDgwMWYsIDE5MX0sCisgICAgICAgIHsweDgwMjksIDE5MX0sCisgICAgICAgIHsweGMwMzgsIDE5MX0sCisgICAgfSwKKyAgICAvKiAxNzMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE5N30sCisgICAgICAgIHsweDgwMDYsIDE5N30sCisgICAgICAgIHsweDgwMGEsIDE5N30sCisgICAgICAgIHsweDgwMGYsIDE5N30sCisgICAgICAgIHsweDgwMTgsIDE5N30sCisgICAgICAgIHsweDgwMWYsIDE5N30sCisgICAgICAgIHsweDgwMjksIDE5N30sCisgICAgICAgIHsweGMwMzgsIDE5N30sCisgICAgICAgIHsweDgwMDMsIDIzMX0sCisgICAgICAgIHsweDgwMDYsIDIzMX0sCisgICAgICAgIHsweDgwMGEsIDIzMX0sCisgICAgICAgIHsweDgwMGYsIDIzMX0sCisgICAgICAgIHsweDgwMTgsIDIzMX0sCisgICAgICAgIHsweDgwMWYsIDIzMX0sCisgICAgICAgIHsweDgwMjksIDIzMX0sCisgICAgICAgIHsweGMwMzgsIDIzMX0sCisgICAgfSwKKyAgICAvKiAxNzQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDIzOX0sCisgICAgICAgIHsweDgwMDksIDIzOX0sCisgICAgICAgIHsweDgwMTcsIDIzOX0sCisgICAgICAgIHsweGMwMjgsIDIzOX0sCisgICAgICAgIHsweDgwMDEsIDl9LAorICAgICAgICB7MHhjMDE2LCA5fSwKKyAgICAgICAgezB4ODAwMSwgMTQyfSwKKyAgICAgICAgezB4YzAxNiwgMTQyfSwKKyAgICAgICAgezB4ODAwMSwgMTQ0fSwKKyAgICAgICAgezB4YzAxNiwgMTQ0fSwKKyAgICAgICAgezB4ODAwMSwgMTQ1fSwKKyAgICAgICAgezB4YzAxNiwgMTQ1fSwKKyAgICAgICAgezB4ODAwMSwgMTQ4fSwKKyAgICAgICAgezB4YzAxNiwgMTQ4fSwKKyAgICAgICAgezB4ODAwMSwgMTU5fSwKKyAgICAgICAgezB4YzAxNiwgMTU5fSwKKyAgICB9LAorICAgIC8qIDE3NSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjM5fSwKKyAgICAgICAgezB4ODAwNiwgMjM5fSwKKyAgICAgICAgezB4ODAwYSwgMjM5fSwKKyAgICAgICAgezB4ODAwZiwgMjM5fSwKKyAgICAgICAgezB4ODAxOCwgMjM5fSwKKyAgICAgICAgezB4ODAxZiwgMjM5fSwKKyAgICAgICAgezB4ODAyOSwgMjM5fSwKKyAgICAgICAgezB4YzAzOCwgMjM5fSwKKyAgICAgICAgezB4ODAwMiwgOX0sCisgICAgICAgIHsweDgwMDksIDl9LAorICAgICAgICB7MHg4MDE3LCA5fSwKKyAgICAgICAgezB4YzAyOCwgOX0sCisgICAgICAgIHsweDgwMDIsIDE0Mn0sCisgICAgICAgIHsweDgwMDksIDE0Mn0sCisgICAgICAgIHsweDgwMTcsIDE0Mn0sCisgICAgICAgIHsweGMwMjgsIDE0Mn0sCisgICAgfSwKKyAgICAvKiAxNzYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDl9LAorICAgICAgICB7MHg4MDA2LCA5fSwKKyAgICAgICAgezB4ODAwYSwgOX0sCisgICAgICAgIHsweDgwMGYsIDl9LAorICAgICAgICB7MHg4MDE4LCA5fSwKKyAgICAgICAgezB4ODAxZiwgOX0sCisgICAgICAgIHsweDgwMjksIDl9LAorICAgICAgICB7MHhjMDM4LCA5fSwKKyAgICAgICAgezB4ODAwMywgMTQyfSwKKyAgICAgICAgezB4ODAwNiwgMTQyfSwKKyAgICAgICAgezB4ODAwYSwgMTQyfSwKKyAgICAgICAgezB4ODAwZiwgMTQyfSwKKyAgICAgICAgezB4ODAxOCwgMTQyfSwKKyAgICAgICAgezB4ODAxZiwgMTQyfSwKKyAgICAgICAgezB4ODAyOSwgMTQyfSwKKyAgICAgICAgezB4YzAzOCwgMTQyfSwKKyAgICB9LAorICAgIC8qIDE3NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTQ0fSwKKyAgICAgICAgezB4ODAwOSwgMTQ0fSwKKyAgICAgICAgezB4ODAxNywgMTQ0fSwKKyAgICAgICAgezB4YzAyOCwgMTQ0fSwKKyAgICAgICAgezB4ODAwMiwgMTQ1fSwKKyAgICAgICAgezB4ODAwOSwgMTQ1fSwKKyAgICAgICAgezB4ODAxNywgMTQ1fSwKKyAgICAgICAgezB4YzAyOCwgMTQ1fSwKKyAgICAgICAgezB4ODAwMiwgMTQ4fSwKKyAgICAgICAgezB4ODAwOSwgMTQ4fSwKKyAgICAgICAgezB4ODAxNywgMTQ4fSwKKyAgICAgICAgezB4YzAyOCwgMTQ4fSwKKyAgICAgICAgezB4ODAwMiwgMTU5fSwKKyAgICAgICAgezB4ODAwOSwgMTU5fSwKKyAgICAgICAgezB4ODAxNywgMTU5fSwKKyAgICAgICAgezB4YzAyOCwgMTU5fSwKKyAgICB9LAorICAgIC8qIDE3OCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTQ0fSwKKyAgICAgICAgezB4ODAwNiwgMTQ0fSwKKyAgICAgICAgezB4ODAwYSwgMTQ0fSwKKyAgICAgICAgezB4ODAwZiwgMTQ0fSwKKyAgICAgICAgezB4ODAxOCwgMTQ0fSwKKyAgICAgICAgezB4ODAxZiwgMTQ0fSwKKyAgICAgICAgezB4ODAyOSwgMTQ0fSwKKyAgICAgICAgezB4YzAzOCwgMTQ0fSwKKyAgICAgICAgezB4ODAwMywgMTQ1fSwKKyAgICAgICAgezB4ODAwNiwgMTQ1fSwKKyAgICAgICAgezB4ODAwYSwgMTQ1fSwKKyAgICAgICAgezB4ODAwZiwgMTQ1fSwKKyAgICAgICAgezB4ODAxOCwgMTQ1fSwKKyAgICAgICAgezB4ODAxZiwgMTQ1fSwKKyAgICAgICAgezB4ODAyOSwgMTQ1fSwKKyAgICAgICAgezB4YzAzOCwgMTQ1fSwKKyAgICB9LAorICAgIC8qIDE3OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTQ4fSwKKyAgICAgICAgezB4ODAwNiwgMTQ4fSwKKyAgICAgICAgezB4ODAwYSwgMTQ4fSwKKyAgICAgICAgezB4ODAwZiwgMTQ4fSwKKyAgICAgICAgezB4ODAxOCwgMTQ4fSwKKyAgICAgICAgezB4ODAxZiwgMTQ4fSwKKyAgICAgICAgezB4ODAyOSwgMTQ4fSwKKyAgICAgICAgezB4YzAzOCwgMTQ4fSwKKyAgICAgICAgezB4ODAwMywgMTU5fSwKKyAgICAgICAgezB4ODAwNiwgMTU5fSwKKyAgICAgICAgezB4ODAwYSwgMTU5fSwKKyAgICAgICAgezB4ODAwZiwgMTU5fSwKKyAgICAgICAgezB4ODAxOCwgMTU5fSwKKyAgICAgICAgezB4ODAxZiwgMTU5fSwKKyAgICAgICAgezB4ODAyOSwgMTU5fSwKKyAgICAgICAgezB4YzAzOCwgMTU5fSwKKyAgICB9LAorICAgIC8qIDE4MCAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgMTcxfSwKKyAgICAgICAgezB4YzAwMCwgMjA2fSwKKyAgICAgICAgezB4YzAwMCwgMjE1fSwKKyAgICAgICAgezB4YzAwMCwgMjI1fSwKKyAgICAgICAgezB4YzAwMCwgMjM2fSwKKyAgICAgICAgezB4YzAwMCwgMjM3fSwKKyAgICAgICAgezB4YmMsIDB9LAorICAgICAgICB7MHhiZCwgMH0sCisgICAgICAgIHsweGMxLCAwfSwKKyAgICAgICAgezB4YzQsIDB9LAorICAgICAgICB7MHhjOCwgMH0sCisgICAgICAgIHsweGNiLCAwfSwKKyAgICAgICAgezB4ZDEsIDB9LAorICAgICAgICB7MHhkOCwgMH0sCisgICAgICAgIHsweGUwLCAwfSwKKyAgICAgICAgezB4ZWUsIDB9LAorICAgIH0sCisgICAgLyogMTgxICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxNzF9LAorICAgICAgICB7MHhjMDE2LCAxNzF9LAorICAgICAgICB7MHg4MDAxLCAyMDZ9LAorICAgICAgICB7MHhjMDE2LCAyMDZ9LAorICAgICAgICB7MHg4MDAxLCAyMTV9LAorICAgICAgICB7MHhjMDE2LCAyMTV9LAorICAgICAgICB7MHg4MDAxLCAyMjV9LAorICAgICAgICB7MHhjMDE2LCAyMjV9LAorICAgICAgICB7MHg4MDAxLCAyMzZ9LAorICAgICAgICB7MHhjMDE2LCAyMzZ9LAorICAgICAgICB7MHg4MDAxLCAyMzd9LAorICAgICAgICB7MHhjMDE2LCAyMzd9LAorICAgICAgICB7MHhjMDAwLCAxOTl9LAorICAgICAgICB7MHhjMDAwLCAyMDd9LAorICAgICAgICB7MHhjMDAwLCAyMzR9LAorICAgICAgICB7MHhjMDAwLCAyMzV9LAorICAgIH0sCisgICAgLyogMTgyICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNzF9LAorICAgICAgICB7MHg4MDA5LCAxNzF9LAorICAgICAgICB7MHg4MDE3LCAxNzF9LAorICAgICAgICB7MHhjMDI4LCAxNzF9LAorICAgICAgICB7MHg4MDAyLCAyMDZ9LAorICAgICAgICB7MHg4MDA5LCAyMDZ9LAorICAgICAgICB7MHg4MDE3LCAyMDZ9LAorICAgICAgICB7MHhjMDI4LCAyMDZ9LAorICAgICAgICB7MHg4MDAyLCAyMTV9LAorICAgICAgICB7MHg4MDA5LCAyMTV9LAorICAgICAgICB7MHg4MDE3LCAyMTV9LAorICAgICAgICB7MHhjMDI4LCAyMTV9LAorICAgICAgICB7MHg4MDAyLCAyMjV9LAorICAgICAgICB7MHg4MDA5LCAyMjV9LAorICAgICAgICB7MHg4MDE3LCAyMjV9LAorICAgICAgICB7MHhjMDI4LCAyMjV9LAorICAgIH0sCisgICAgLyogMTgzICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNzF9LAorICAgICAgICB7MHg4MDA2LCAxNzF9LAorICAgICAgICB7MHg4MDBhLCAxNzF9LAorICAgICAgICB7MHg4MDBmLCAxNzF9LAorICAgICAgICB7MHg4MDE4LCAxNzF9LAorICAgICAgICB7MHg4MDFmLCAxNzF9LAorICAgICAgICB7MHg4MDI5LCAxNzF9LAorICAgICAgICB7MHhjMDM4LCAxNzF9LAorICAgICAgICB7MHg4MDAzLCAyMDZ9LAorICAgICAgICB7MHg4MDA2LCAyMDZ9LAorICAgICAgICB7MHg4MDBhLCAyMDZ9LAorICAgICAgICB7MHg4MDBmLCAyMDZ9LAorICAgICAgICB7MHg4MDE4LCAyMDZ9LAorICAgICAgICB7MHg4MDFmLCAyMDZ9LAorICAgICAgICB7MHg4MDI5LCAyMDZ9LAorICAgICAgICB7MHhjMDM4LCAyMDZ9LAorICAgIH0sCisgICAgLyogMTg0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMTV9LAorICAgICAgICB7MHg4MDA2LCAyMTV9LAorICAgICAgICB7MHg4MDBhLCAyMTV9LAorICAgICAgICB7MHg4MDBmLCAyMTV9LAorICAgICAgICB7MHg4MDE4LCAyMTV9LAorICAgICAgICB7MHg4MDFmLCAyMTV9LAorICAgICAgICB7MHg4MDI5LCAyMTV9LAorICAgICAgICB7MHhjMDM4LCAyMTV9LAorICAgICAgICB7MHg4MDAzLCAyMjV9LAorICAgICAgICB7MHg4MDA2LCAyMjV9LAorICAgICAgICB7MHg4MDBhLCAyMjV9LAorICAgICAgICB7MHg4MDBmLCAyMjV9LAorICAgICAgICB7MHg4MDE4LCAyMjV9LAorICAgICAgICB7MHg4MDFmLCAyMjV9LAorICAgICAgICB7MHg4MDI5LCAyMjV9LAorICAgICAgICB7MHhjMDM4LCAyMjV9LAorICAgIH0sCisgICAgLyogMTg1ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyMzZ9LAorICAgICAgICB7MHg4MDA5LCAyMzZ9LAorICAgICAgICB7MHg4MDE3LCAyMzZ9LAorICAgICAgICB7MHhjMDI4LCAyMzZ9LAorICAgICAgICB7MHg4MDAyLCAyMzd9LAorICAgICAgICB7MHg4MDA5LCAyMzd9LAorICAgICAgICB7MHg4MDE3LCAyMzd9LAorICAgICAgICB7MHhjMDI4LCAyMzd9LAorICAgICAgICB7MHg4MDAxLCAxOTl9LAorICAgICAgICB7MHhjMDE2LCAxOTl9LAorICAgICAgICB7MHg4MDAxLCAyMDd9LAorICAgICAgICB7MHhjMDE2LCAyMDd9LAorICAgICAgICB7MHg4MDAxLCAyMzR9LAorICAgICAgICB7MHhjMDE2LCAyMzR9LAorICAgICAgICB7MHg4MDAxLCAyMzV9LAorICAgICAgICB7MHhjMDE2LCAyMzV9LAorICAgIH0sCisgICAgLyogMTg2ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMzZ9LAorICAgICAgICB7MHg4MDA2LCAyMzZ9LAorICAgICAgICB7MHg4MDBhLCAyMzZ9LAorICAgICAgICB7MHg4MDBmLCAyMzZ9LAorICAgICAgICB7MHg4MDE4LCAyMzZ9LAorICAgICAgICB7MHg4MDFmLCAyMzZ9LAorICAgICAgICB7MHg4MDI5LCAyMzZ9LAorICAgICAgICB7MHhjMDM4LCAyMzZ9LAorICAgICAgICB7MHg4MDAzLCAyMzd9LAorICAgICAgICB7MHg4MDA2LCAyMzd9LAorICAgICAgICB7MHg4MDBhLCAyMzd9LAorICAgICAgICB7MHg4MDBmLCAyMzd9LAorICAgICAgICB7MHg4MDE4LCAyMzd9LAorICAgICAgICB7MHg4MDFmLCAyMzd9LAorICAgICAgICB7MHg4MDI5LCAyMzd9LAorICAgICAgICB7MHhjMDM4LCAyMzd9LAorICAgIH0sCisgICAgLyogMTg3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxOTl9LAorICAgICAgICB7MHg4MDA5LCAxOTl9LAorICAgICAgICB7MHg4MDE3LCAxOTl9LAorICAgICAgICB7MHhjMDI4LCAxOTl9LAorICAgICAgICB7MHg4MDAyLCAyMDd9LAorICAgICAgICB7MHg4MDA5LCAyMDd9LAorICAgICAgICB7MHg4MDE3LCAyMDd9LAorICAgICAgICB7MHhjMDI4LCAyMDd9LAorICAgICAgICB7MHg4MDAyLCAyMzR9LAorICAgICAgICB7MHg4MDA5LCAyMzR9LAorICAgICAgICB7MHg4MDE3LCAyMzR9LAorICAgICAgICB7MHhjMDI4LCAyMzR9LAorICAgICAgICB7MHg4MDAyLCAyMzV9LAorICAgICAgICB7MHg4MDA5LCAyMzV9LAorICAgICAgICB7MHg4MDE3LCAyMzV9LAorICAgICAgICB7MHhjMDI4LCAyMzV9LAorICAgIH0sCisgICAgLyogMTg4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxOTl9LAorICAgICAgICB7MHg4MDA2LCAxOTl9LAorICAgICAgICB7MHg4MDBhLCAxOTl9LAorICAgICAgICB7MHg4MDBmLCAxOTl9LAorICAgICAgICB7MHg4MDE4LCAxOTl9LAorICAgICAgICB7MHg4MDFmLCAxOTl9LAorICAgICAgICB7MHg4MDI5LCAxOTl9LAorICAgICAgICB7MHhjMDM4LCAxOTl9LAorICAgICAgICB7MHg4MDAzLCAyMDd9LAorICAgICAgICB7MHg4MDA2LCAyMDd9LAorICAgICAgICB7MHg4MDBhLCAyMDd9LAorICAgICAgICB7MHg4MDBmLCAyMDd9LAorICAgICAgICB7MHg4MDE4LCAyMDd9LAorICAgICAgICB7MHg4MDFmLCAyMDd9LAorICAgICAgICB7MHg4MDI5LCAyMDd9LAorICAgICAgICB7MHhjMDM4LCAyMDd9LAorICAgIH0sCisgICAgLyogMTg5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMzR9LAorICAgICAgICB7MHg4MDA2LCAyMzR9LAorICAgICAgICB7MHg4MDBhLCAyMzR9LAorICAgICAgICB7MHg4MDBmLCAyMzR9LAorICAgICAgICB7MHg4MDE4LCAyMzR9LAorICAgICAgICB7MHg4MDFmLCAyMzR9LAorICAgICAgICB7MHg4MDI5LCAyMzR9LAorICAgICAgICB7MHhjMDM4LCAyMzR9LAorICAgICAgICB7MHg4MDAzLCAyMzV9LAorICAgICAgICB7MHg4MDA2LCAyMzV9LAorICAgICAgICB7MHg4MDBhLCAyMzV9LAorICAgICAgICB7MHg4MDBmLCAyMzV9LAorICAgICAgICB7MHg4MDE4LCAyMzV9LAorICAgICAgICB7MHg4MDFmLCAyMzV9LAorICAgICAgICB7MHg4MDI5LCAyMzV9LAorICAgICAgICB7MHhjMDM4LCAyMzV9LAorICAgIH0sCisgICAgLyogMTkwICovCisgICAgeworICAgICAgICB7MHhjMiwgMH0sCisgICAgICAgIHsweGMzLCAwfSwKKyAgICAgICAgezB4YzUsIDB9LAorICAgICAgICB7MHhjNiwgMH0sCisgICAgICAgIHsweGM5LCAwfSwKKyAgICAgICAgezB4Y2EsIDB9LAorICAgICAgICB7MHhjYywgMH0sCisgICAgICAgIHsweGNkLCAwfSwKKyAgICAgICAgezB4ZDIsIDB9LAorICAgICAgICB7MHhkNSwgMH0sCisgICAgICAgIHsweGQ5LCAwfSwKKyAgICAgICAgezB4ZGMsIDB9LAorICAgICAgICB7MHhlMSwgMH0sCisgICAgICAgIHsweGU3LCAwfSwKKyAgICAgICAgezB4ZWYsIDB9LAorICAgICAgICB7MHhmNiwgMH0sCisgICAgfSwKKyAgICAvKiAxOTEgKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDE5Mn0sCisgICAgICAgIHsweGMwMDAsIDE5M30sCisgICAgICAgIHsweGMwMDAsIDIwMH0sCisgICAgICAgIHsweGMwMDAsIDIwMX0sCisgICAgICAgIHsweGMwMDAsIDIwMn0sCisgICAgICAgIHsweGMwMDAsIDIwNX0sCisgICAgICAgIHsweGMwMDAsIDIxMH0sCisgICAgICAgIHsweGMwMDAsIDIxM30sCisgICAgICAgIHsweGMwMDAsIDIxOH0sCisgICAgICAgIHsweGMwMDAsIDIxOX0sCisgICAgICAgIHsweGMwMDAsIDIzOH0sCisgICAgICAgIHsweGMwMDAsIDI0MH0sCisgICAgICAgIHsweGMwMDAsIDI0Mn0sCisgICAgICAgIHsweGMwMDAsIDI0M30sCisgICAgICAgIHsweGMwMDAsIDI1NX0sCisgICAgICAgIHsweGNlLCAwfSwKKyAgICB9LAorICAgIC8qIDE5MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMTkyfSwKKyAgICAgICAgezB4YzAxNiwgMTkyfSwKKyAgICAgICAgezB4ODAwMSwgMTkzfSwKKyAgICAgICAgezB4YzAxNiwgMTkzfSwKKyAgICAgICAgezB4ODAwMSwgMjAwfSwKKyAgICAgICAgezB4YzAxNiwgMjAwfSwKKyAgICAgICAgezB4ODAwMSwgMjAxfSwKKyAgICAgICAgezB4YzAxNiwgMjAxfSwKKyAgICAgICAgezB4ODAwMSwgMjAyfSwKKyAgICAgICAgezB4YzAxNiwgMjAyfSwKKyAgICAgICAgezB4ODAwMSwgMjA1fSwKKyAgICAgICAgezB4YzAxNiwgMjA1fSwKKyAgICAgICAgezB4ODAwMSwgMjEwfSwKKyAgICAgICAgezB4YzAxNiwgMjEwfSwKKyAgICAgICAgezB4ODAwMSwgMjEzfSwKKyAgICAgICAgezB4YzAxNiwgMjEzfSwKKyAgICB9LAorICAgIC8qIDE5MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTkyfSwKKyAgICAgICAgezB4ODAwOSwgMTkyfSwKKyAgICAgICAgezB4ODAxNywgMTkyfSwKKyAgICAgICAgezB4YzAyOCwgMTkyfSwKKyAgICAgICAgezB4ODAwMiwgMTkzfSwKKyAgICAgICAgezB4ODAwOSwgMTkzfSwKKyAgICAgICAgezB4ODAxNywgMTkzfSwKKyAgICAgICAgezB4YzAyOCwgMTkzfSwKKyAgICAgICAgezB4ODAwMiwgMjAwfSwKKyAgICAgICAgezB4ODAwOSwgMjAwfSwKKyAgICAgICAgezB4ODAxNywgMjAwfSwKKyAgICAgICAgezB4YzAyOCwgMjAwfSwKKyAgICAgICAgezB4ODAwMiwgMjAxfSwKKyAgICAgICAgezB4ODAwOSwgMjAxfSwKKyAgICAgICAgezB4ODAxNywgMjAxfSwKKyAgICAgICAgezB4YzAyOCwgMjAxfSwKKyAgICB9LAorICAgIC8qIDE5NCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTkyfSwKKyAgICAgICAgezB4ODAwNiwgMTkyfSwKKyAgICAgICAgezB4ODAwYSwgMTkyfSwKKyAgICAgICAgezB4ODAwZiwgMTkyfSwKKyAgICAgICAgezB4ODAxOCwgMTkyfSwKKyAgICAgICAgezB4ODAxZiwgMTkyfSwKKyAgICAgICAgezB4ODAyOSwgMTkyfSwKKyAgICAgICAgezB4YzAzOCwgMTkyfSwKKyAgICAgICAgezB4ODAwMywgMTkzfSwKKyAgICAgICAgezB4ODAwNiwgMTkzfSwKKyAgICAgICAgezB4ODAwYSwgMTkzfSwKKyAgICAgICAgezB4ODAwZiwgMTkzfSwKKyAgICAgICAgezB4ODAxOCwgMTkzfSwKKyAgICAgICAgezB4ODAxZiwgMTkzfSwKKyAgICAgICAgezB4ODAyOSwgMTkzfSwKKyAgICAgICAgezB4YzAzOCwgMTkzfSwKKyAgICB9LAorICAgIC8qIDE5NSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjAwfSwKKyAgICAgICAgezB4ODAwNiwgMjAwfSwKKyAgICAgICAgezB4ODAwYSwgMjAwfSwKKyAgICAgICAgezB4ODAwZiwgMjAwfSwKKyAgICAgICAgezB4ODAxOCwgMjAwfSwKKyAgICAgICAgezB4ODAxZiwgMjAwfSwKKyAgICAgICAgezB4ODAyOSwgMjAwfSwKKyAgICAgICAgezB4YzAzOCwgMjAwfSwKKyAgICAgICAgezB4ODAwMywgMjAxfSwKKyAgICAgICAgezB4ODAwNiwgMjAxfSwKKyAgICAgICAgezB4ODAwYSwgMjAxfSwKKyAgICAgICAgezB4ODAwZiwgMjAxfSwKKyAgICAgICAgezB4ODAxOCwgMjAxfSwKKyAgICAgICAgezB4ODAxZiwgMjAxfSwKKyAgICAgICAgezB4ODAyOSwgMjAxfSwKKyAgICAgICAgezB4YzAzOCwgMjAxfSwKKyAgICB9LAorICAgIC8qIDE5NiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMjAyfSwKKyAgICAgICAgezB4ODAwOSwgMjAyfSwKKyAgICAgICAgezB4ODAxNywgMjAyfSwKKyAgICAgICAgezB4YzAyOCwgMjAyfSwKKyAgICAgICAgezB4ODAwMiwgMjA1fSwKKyAgICAgICAgezB4ODAwOSwgMjA1fSwKKyAgICAgICAgezB4ODAxNywgMjA1fSwKKyAgICAgICAgezB4YzAyOCwgMjA1fSwKKyAgICAgICAgezB4ODAwMiwgMjEwfSwKKyAgICAgICAgezB4ODAwOSwgMjEwfSwKKyAgICAgICAgezB4ODAxNywgMjEwfSwKKyAgICAgICAgezB4YzAyOCwgMjEwfSwKKyAgICAgICAgezB4ODAwMiwgMjEzfSwKKyAgICAgICAgezB4ODAwOSwgMjEzfSwKKyAgICAgICAgezB4ODAxNywgMjEzfSwKKyAgICAgICAgezB4YzAyOCwgMjEzfSwKKyAgICB9LAorICAgIC8qIDE5NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjAyfSwKKyAgICAgICAgezB4ODAwNiwgMjAyfSwKKyAgICAgICAgezB4ODAwYSwgMjAyfSwKKyAgICAgICAgezB4ODAwZiwgMjAyfSwKKyAgICAgICAgezB4ODAxOCwgMjAyfSwKKyAgICAgICAgezB4ODAxZiwgMjAyfSwKKyAgICAgICAgezB4ODAyOSwgMjAyfSwKKyAgICAgICAgezB4YzAzOCwgMjAyfSwKKyAgICAgICAgezB4ODAwMywgMjA1fSwKKyAgICAgICAgezB4ODAwNiwgMjA1fSwKKyAgICAgICAgezB4ODAwYSwgMjA1fSwKKyAgICAgICAgezB4ODAwZiwgMjA1fSwKKyAgICAgICAgezB4ODAxOCwgMjA1fSwKKyAgICAgICAgezB4ODAxZiwgMjA1fSwKKyAgICAgICAgezB4ODAyOSwgMjA1fSwKKyAgICAgICAgezB4YzAzOCwgMjA1fSwKKyAgICB9LAorICAgIC8qIDE5OCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjEwfSwKKyAgICAgICAgezB4ODAwNiwgMjEwfSwKKyAgICAgICAgezB4ODAwYSwgMjEwfSwKKyAgICAgICAgezB4ODAwZiwgMjEwfSwKKyAgICAgICAgezB4ODAxOCwgMjEwfSwKKyAgICAgICAgezB4ODAxZiwgMjEwfSwKKyAgICAgICAgezB4ODAyOSwgMjEwfSwKKyAgICAgICAgezB4YzAzOCwgMjEwfSwKKyAgICAgICAgezB4ODAwMywgMjEzfSwKKyAgICAgICAgezB4ODAwNiwgMjEzfSwKKyAgICAgICAgezB4ODAwYSwgMjEzfSwKKyAgICAgICAgezB4ODAwZiwgMjEzfSwKKyAgICAgICAgezB4ODAxOCwgMjEzfSwKKyAgICAgICAgezB4ODAxZiwgMjEzfSwKKyAgICAgICAgezB4ODAyOSwgMjEzfSwKKyAgICAgICAgezB4YzAzOCwgMjEzfSwKKyAgICB9LAorICAgIC8qIDE5OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMjE4fSwKKyAgICAgICAgezB4YzAxNiwgMjE4fSwKKyAgICAgICAgezB4ODAwMSwgMjE5fSwKKyAgICAgICAgezB4YzAxNiwgMjE5fSwKKyAgICAgICAgezB4ODAwMSwgMjM4fSwKKyAgICAgICAgezB4YzAxNiwgMjM4fSwKKyAgICAgICAgezB4ODAwMSwgMjQwfSwKKyAgICAgICAgezB4YzAxNiwgMjQwfSwKKyAgICAgICAgezB4ODAwMSwgMjQyfSwKKyAgICAgICAgezB4YzAxNiwgMjQyfSwKKyAgICAgICAgezB4ODAwMSwgMjQzfSwKKyAgICAgICAgezB4YzAxNiwgMjQzfSwKKyAgICAgICAgezB4ODAwMSwgMjU1fSwKKyAgICAgICAgezB4YzAxNiwgMjU1fSwKKyAgICAgICAgezB4YzAwMCwgMjAzfSwKKyAgICAgICAgezB4YzAwMCwgMjA0fSwKKyAgICB9LAorICAgIC8qIDIwMCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMjE4fSwKKyAgICAgICAgezB4ODAwOSwgMjE4fSwKKyAgICAgICAgezB4ODAxNywgMjE4fSwKKyAgICAgICAgezB4YzAyOCwgMjE4fSwKKyAgICAgICAgezB4ODAwMiwgMjE5fSwKKyAgICAgICAgezB4ODAwOSwgMjE5fSwKKyAgICAgICAgezB4ODAxNywgMjE5fSwKKyAgICAgICAgezB4YzAyOCwgMjE5fSwKKyAgICAgICAgezB4ODAwMiwgMjM4fSwKKyAgICAgICAgezB4ODAwOSwgMjM4fSwKKyAgICAgICAgezB4ODAxNywgMjM4fSwKKyAgICAgICAgezB4YzAyOCwgMjM4fSwKKyAgICAgICAgezB4ODAwMiwgMjQwfSwKKyAgICAgICAgezB4ODAwOSwgMjQwfSwKKyAgICAgICAgezB4ODAxNywgMjQwfSwKKyAgICAgICAgezB4YzAyOCwgMjQwfSwKKyAgICB9LAorICAgIC8qIDIwMSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjE4fSwKKyAgICAgICAgezB4ODAwNiwgMjE4fSwKKyAgICAgICAgezB4ODAwYSwgMjE4fSwKKyAgICAgICAgezB4ODAwZiwgMjE4fSwKKyAgICAgICAgezB4ODAxOCwgMjE4fSwKKyAgICAgICAgezB4ODAxZiwgMjE4fSwKKyAgICAgICAgezB4ODAyOSwgMjE4fSwKKyAgICAgICAgezB4YzAzOCwgMjE4fSwKKyAgICAgICAgezB4ODAwMywgMjE5fSwKKyAgICAgICAgezB4ODAwNiwgMjE5fSwKKyAgICAgICAgezB4ODAwYSwgMjE5fSwKKyAgICAgICAgezB4ODAwZiwgMjE5fSwKKyAgICAgICAgezB4ODAxOCwgMjE5fSwKKyAgICAgICAgezB4ODAxZiwgMjE5fSwKKyAgICAgICAgezB4ODAyOSwgMjE5fSwKKyAgICAgICAgezB4YzAzOCwgMjE5fSwKKyAgICB9LAorICAgIC8qIDIwMiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjM4fSwKKyAgICAgICAgezB4ODAwNiwgMjM4fSwKKyAgICAgICAgezB4ODAwYSwgMjM4fSwKKyAgICAgICAgezB4ODAwZiwgMjM4fSwKKyAgICAgICAgezB4ODAxOCwgMjM4fSwKKyAgICAgICAgezB4ODAxZiwgMjM4fSwKKyAgICAgICAgezB4ODAyOSwgMjM4fSwKKyAgICAgICAgezB4YzAzOCwgMjM4fSwKKyAgICAgICAgezB4ODAwMywgMjQwfSwKKyAgICAgICAgezB4ODAwNiwgMjQwfSwKKyAgICAgICAgezB4ODAwYSwgMjQwfSwKKyAgICAgICAgezB4ODAwZiwgMjQwfSwKKyAgICAgICAgezB4ODAxOCwgMjQwfSwKKyAgICAgICAgezB4ODAxZiwgMjQwfSwKKyAgICAgICAgezB4ODAyOSwgMjQwfSwKKyAgICAgICAgezB4YzAzOCwgMjQwfSwKKyAgICB9LAorICAgIC8qIDIwMyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMjQyfSwKKyAgICAgICAgezB4ODAwOSwgMjQyfSwKKyAgICAgICAgezB4ODAxNywgMjQyfSwKKyAgICAgICAgezB4YzAyOCwgMjQyfSwKKyAgICAgICAgezB4ODAwMiwgMjQzfSwKKyAgICAgICAgezB4ODAwOSwgMjQzfSwKKyAgICAgICAgezB4ODAxNywgMjQzfSwKKyAgICAgICAgezB4YzAyOCwgMjQzfSwKKyAgICAgICAgezB4ODAwMiwgMjU1fSwKKyAgICAgICAgezB4ODAwOSwgMjU1fSwKKyAgICAgICAgezB4ODAxNywgMjU1fSwKKyAgICAgICAgezB4YzAyOCwgMjU1fSwKKyAgICAgICAgezB4ODAwMSwgMjAzfSwKKyAgICAgICAgezB4YzAxNiwgMjAzfSwKKyAgICAgICAgezB4ODAwMSwgMjA0fSwKKyAgICAgICAgezB4YzAxNiwgMjA0fSwKKyAgICB9LAorICAgIC8qIDIwNCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjQyfSwKKyAgICAgICAgezB4ODAwNiwgMjQyfSwKKyAgICAgICAgezB4ODAwYSwgMjQyfSwKKyAgICAgICAgezB4ODAwZiwgMjQyfSwKKyAgICAgICAgezB4ODAxOCwgMjQyfSwKKyAgICAgICAgezB4ODAxZiwgMjQyfSwKKyAgICAgICAgezB4ODAyOSwgMjQyfSwKKyAgICAgICAgezB4YzAzOCwgMjQyfSwKKyAgICAgICAgezB4ODAwMywgMjQzfSwKKyAgICAgICAgezB4ODAwNiwgMjQzfSwKKyAgICAgICAgezB4ODAwYSwgMjQzfSwKKyAgICAgICAgezB4ODAwZiwgMjQzfSwKKyAgICAgICAgezB4ODAxOCwgMjQzfSwKKyAgICAgICAgezB4ODAxZiwgMjQzfSwKKyAgICAgICAgezB4ODAyOSwgMjQzfSwKKyAgICAgICAgezB4YzAzOCwgMjQzfSwKKyAgICB9LAorICAgIC8qIDIwNSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjU1fSwKKyAgICAgICAgezB4ODAwNiwgMjU1fSwKKyAgICAgICAgezB4ODAwYSwgMjU1fSwKKyAgICAgICAgezB4ODAwZiwgMjU1fSwKKyAgICAgICAgezB4ODAxOCwgMjU1fSwKKyAgICAgICAgezB4ODAxZiwgMjU1fSwKKyAgICAgICAgezB4ODAyOSwgMjU1fSwKKyAgICAgICAgezB4YzAzOCwgMjU1fSwKKyAgICAgICAgezB4ODAwMiwgMjAzfSwKKyAgICAgICAgezB4ODAwOSwgMjAzfSwKKyAgICAgICAgezB4ODAxNywgMjAzfSwKKyAgICAgICAgezB4YzAyOCwgMjAzfSwKKyAgICAgICAgezB4ODAwMiwgMjA0fSwKKyAgICAgICAgezB4ODAwOSwgMjA0fSwKKyAgICAgICAgezB4ODAxNywgMjA0fSwKKyAgICAgICAgezB4YzAyOCwgMjA0fSwKKyAgICB9LAorICAgIC8qIDIwNiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjAzfSwKKyAgICAgICAgezB4ODAwNiwgMjAzfSwKKyAgICAgICAgezB4ODAwYSwgMjAzfSwKKyAgICAgICAgezB4ODAwZiwgMjAzfSwKKyAgICAgICAgezB4ODAxOCwgMjAzfSwKKyAgICAgICAgezB4ODAxZiwgMjAzfSwKKyAgICAgICAgezB4ODAyOSwgMjAzfSwKKyAgICAgICAgezB4YzAzOCwgMjAzfSwKKyAgICAgICAgezB4ODAwMywgMjA0fSwKKyAgICAgICAgezB4ODAwNiwgMjA0fSwKKyAgICAgICAgezB4ODAwYSwgMjA0fSwKKyAgICAgICAgezB4ODAwZiwgMjA0fSwKKyAgICAgICAgezB4ODAxOCwgMjA0fSwKKyAgICAgICAgezB4ODAxZiwgMjA0fSwKKyAgICAgICAgezB4ODAyOSwgMjA0fSwKKyAgICAgICAgezB4YzAzOCwgMjA0fSwKKyAgICB9LAorICAgIC8qIDIwNyAqLworICAgIHsKKyAgICAgICAgezB4ZDMsIDB9LAorICAgICAgICB7MHhkNCwgMH0sCisgICAgICAgIHsweGQ2LCAwfSwKKyAgICAgICAgezB4ZDcsIDB9LAorICAgICAgICB7MHhkYSwgMH0sCisgICAgICAgIHsweGRiLCAwfSwKKyAgICAgICAgezB4ZGQsIDB9LAorICAgICAgICB7MHhkZSwgMH0sCisgICAgICAgIHsweGUyLCAwfSwKKyAgICAgICAgezB4ZTQsIDB9LAorICAgICAgICB7MHhlOCwgMH0sCisgICAgICAgIHsweGViLCAwfSwKKyAgICAgICAgezB4ZjAsIDB9LAorICAgICAgICB7MHhmMywgMH0sCisgICAgICAgIHsweGY3LCAwfSwKKyAgICAgICAgezB4ZmEsIDB9LAorICAgIH0sCisgICAgLyogMjA4ICovCisgICAgeworICAgICAgICB7MHhjMDAwLCAyMTF9LAorICAgICAgICB7MHhjMDAwLCAyMTJ9LAorICAgICAgICB7MHhjMDAwLCAyMTR9LAorICAgICAgICB7MHhjMDAwLCAyMjF9LAorICAgICAgICB7MHhjMDAwLCAyMjJ9LAorICAgICAgICB7MHhjMDAwLCAyMjN9LAorICAgICAgICB7MHhjMDAwLCAyNDF9LAorICAgICAgICB7MHhjMDAwLCAyNDR9LAorICAgICAgICB7MHhjMDAwLCAyNDV9LAorICAgICAgICB7MHhjMDAwLCAyNDZ9LAorICAgICAgICB7MHhjMDAwLCAyNDd9LAorICAgICAgICB7MHhjMDAwLCAyNDh9LAorICAgICAgICB7MHhjMDAwLCAyNTB9LAorICAgICAgICB7MHhjMDAwLCAyNTF9LAorICAgICAgICB7MHhjMDAwLCAyNTJ9LAorICAgICAgICB7MHhjMDAwLCAyNTN9LAorICAgIH0sCisgICAgLyogMjA5ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAyMTF9LAorICAgICAgICB7MHhjMDE2LCAyMTF9LAorICAgICAgICB7MHg4MDAxLCAyMTJ9LAorICAgICAgICB7MHhjMDE2LCAyMTJ9LAorICAgICAgICB7MHg4MDAxLCAyMTR9LAorICAgICAgICB7MHhjMDE2LCAyMTR9LAorICAgICAgICB7MHg4MDAxLCAyMjF9LAorICAgICAgICB7MHhjMDE2LCAyMjF9LAorICAgICAgICB7MHg4MDAxLCAyMjJ9LAorICAgICAgICB7MHhjMDE2LCAyMjJ9LAorICAgICAgICB7MHg4MDAxLCAyMjN9LAorICAgICAgICB7MHhjMDE2LCAyMjN9LAorICAgICAgICB7MHg4MDAxLCAyNDF9LAorICAgICAgICB7MHhjMDE2LCAyNDF9LAorICAgICAgICB7MHg4MDAxLCAyNDR9LAorICAgICAgICB7MHhjMDE2LCAyNDR9LAorICAgIH0sCisgICAgLyogMjEwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyMTF9LAorICAgICAgICB7MHg4MDA5LCAyMTF9LAorICAgICAgICB7MHg4MDE3LCAyMTF9LAorICAgICAgICB7MHhjMDI4LCAyMTF9LAorICAgICAgICB7MHg4MDAyLCAyMTJ9LAorICAgICAgICB7MHg4MDA5LCAyMTJ9LAorICAgICAgICB7MHg4MDE3LCAyMTJ9LAorICAgICAgICB7MHhjMDI4LCAyMTJ9LAorICAgICAgICB7MHg4MDAyLCAyMTR9LAorICAgICAgICB7MHg4MDA5LCAyMTR9LAorICAgICAgICB7MHg4MDE3LCAyMTR9LAorICAgICAgICB7MHhjMDI4LCAyMTR9LAorICAgICAgICB7MHg4MDAyLCAyMjF9LAorICAgICAgICB7MHg4MDA5LCAyMjF9LAorICAgICAgICB7MHg4MDE3LCAyMjF9LAorICAgICAgICB7MHhjMDI4LCAyMjF9LAorICAgIH0sCisgICAgLyogMjExICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMTF9LAorICAgICAgICB7MHg4MDA2LCAyMTF9LAorICAgICAgICB7MHg4MDBhLCAyMTF9LAorICAgICAgICB7MHg4MDBmLCAyMTF9LAorICAgICAgICB7MHg4MDE4LCAyMTF9LAorICAgICAgICB7MHg4MDFmLCAyMTF9LAorICAgICAgICB7MHg4MDI5LCAyMTF9LAorICAgICAgICB7MHhjMDM4LCAyMTF9LAorICAgICAgICB7MHg4MDAzLCAyMTJ9LAorICAgICAgICB7MHg4MDA2LCAyMTJ9LAorICAgICAgICB7MHg4MDBhLCAyMTJ9LAorICAgICAgICB7MHg4MDBmLCAyMTJ9LAorICAgICAgICB7MHg4MDE4LCAyMTJ9LAorICAgICAgICB7MHg4MDFmLCAyMTJ9LAorICAgICAgICB7MHg4MDI5LCAyMTJ9LAorICAgICAgICB7MHhjMDM4LCAyMTJ9LAorICAgIH0sCisgICAgLyogMjEyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMTR9LAorICAgICAgICB7MHg4MDA2LCAyMTR9LAorICAgICAgICB7MHg4MDBhLCAyMTR9LAorICAgICAgICB7MHg4MDBmLCAyMTR9LAorICAgICAgICB7MHg4MDE4LCAyMTR9LAorICAgICAgICB7MHg4MDFmLCAyMTR9LAorICAgICAgICB7MHg4MDI5LCAyMTR9LAorICAgICAgICB7MHhjMDM4LCAyMTR9LAorICAgICAgICB7MHg4MDAzLCAyMjF9LAorICAgICAgICB7MHg4MDA2LCAyMjF9LAorICAgICAgICB7MHg4MDBhLCAyMjF9LAorICAgICAgICB7MHg4MDBmLCAyMjF9LAorICAgICAgICB7MHg4MDE4LCAyMjF9LAorICAgICAgICB7MHg4MDFmLCAyMjF9LAorICAgICAgICB7MHg4MDI5LCAyMjF9LAorICAgICAgICB7MHhjMDM4LCAyMjF9LAorICAgIH0sCisgICAgLyogMjEzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyMjJ9LAorICAgICAgICB7MHg4MDA5LCAyMjJ9LAorICAgICAgICB7MHg4MDE3LCAyMjJ9LAorICAgICAgICB7MHhjMDI4LCAyMjJ9LAorICAgICAgICB7MHg4MDAyLCAyMjN9LAorICAgICAgICB7MHg4MDA5LCAyMjN9LAorICAgICAgICB7MHg4MDE3LCAyMjN9LAorICAgICAgICB7MHhjMDI4LCAyMjN9LAorICAgICAgICB7MHg4MDAyLCAyNDF9LAorICAgICAgICB7MHg4MDA5LCAyNDF9LAorICAgICAgICB7MHg4MDE3LCAyNDF9LAorICAgICAgICB7MHhjMDI4LCAyNDF9LAorICAgICAgICB7MHg4MDAyLCAyNDR9LAorICAgICAgICB7MHg4MDA5LCAyNDR9LAorICAgICAgICB7MHg4MDE3LCAyNDR9LAorICAgICAgICB7MHhjMDI4LCAyNDR9LAorICAgIH0sCisgICAgLyogMjE0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMjJ9LAorICAgICAgICB7MHg4MDA2LCAyMjJ9LAorICAgICAgICB7MHg4MDBhLCAyMjJ9LAorICAgICAgICB7MHg4MDBmLCAyMjJ9LAorICAgICAgICB7MHg4MDE4LCAyMjJ9LAorICAgICAgICB7MHg4MDFmLCAyMjJ9LAorICAgICAgICB7MHg4MDI5LCAyMjJ9LAorICAgICAgICB7MHhjMDM4LCAyMjJ9LAorICAgICAgICB7MHg4MDAzLCAyMjN9LAorICAgICAgICB7MHg4MDA2LCAyMjN9LAorICAgICAgICB7MHg4MDBhLCAyMjN9LAorICAgICAgICB7MHg4MDBmLCAyMjN9LAorICAgICAgICB7MHg4MDE4LCAyMjN9LAorICAgICAgICB7MHg4MDFmLCAyMjN9LAorICAgICAgICB7MHg4MDI5LCAyMjN9LAorICAgICAgICB7MHhjMDM4LCAyMjN9LAorICAgIH0sCisgICAgLyogMjE1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNDF9LAorICAgICAgICB7MHg4MDA2LCAyNDF9LAorICAgICAgICB7MHg4MDBhLCAyNDF9LAorICAgICAgICB7MHg4MDBmLCAyNDF9LAorICAgICAgICB7MHg4MDE4LCAyNDF9LAorICAgICAgICB7MHg4MDFmLCAyNDF9LAorICAgICAgICB7MHg4MDI5LCAyNDF9LAorICAgICAgICB7MHhjMDM4LCAyNDF9LAorICAgICAgICB7MHg4MDAzLCAyNDR9LAorICAgICAgICB7MHg4MDA2LCAyNDR9LAorICAgICAgICB7MHg4MDBhLCAyNDR9LAorICAgICAgICB7MHg4MDBmLCAyNDR9LAorICAgICAgICB7MHg4MDE4LCAyNDR9LAorICAgICAgICB7MHg4MDFmLCAyNDR9LAorICAgICAgICB7MHg4MDI5LCAyNDR9LAorICAgICAgICB7MHhjMDM4LCAyNDR9LAorICAgIH0sCisgICAgLyogMjE2ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAyNDV9LAorICAgICAgICB7MHhjMDE2LCAyNDV9LAorICAgICAgICB7MHg4MDAxLCAyNDZ9LAorICAgICAgICB7MHhjMDE2LCAyNDZ9LAorICAgICAgICB7MHg4MDAxLCAyNDd9LAorICAgICAgICB7MHhjMDE2LCAyNDd9LAorICAgICAgICB7MHg4MDAxLCAyNDh9LAorICAgICAgICB7MHhjMDE2LCAyNDh9LAorICAgICAgICB7MHg4MDAxLCAyNTB9LAorICAgICAgICB7MHhjMDE2LCAyNTB9LAorICAgICAgICB7MHg4MDAxLCAyNTF9LAorICAgICAgICB7MHhjMDE2LCAyNTF9LAorICAgICAgICB7MHg4MDAxLCAyNTJ9LAorICAgICAgICB7MHhjMDE2LCAyNTJ9LAorICAgICAgICB7MHg4MDAxLCAyNTN9LAorICAgICAgICB7MHhjMDE2LCAyNTN9LAorICAgIH0sCisgICAgLyogMjE3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyNDV9LAorICAgICAgICB7MHg4MDA5LCAyNDV9LAorICAgICAgICB7MHg4MDE3LCAyNDV9LAorICAgICAgICB7MHhjMDI4LCAyNDV9LAorICAgICAgICB7MHg4MDAyLCAyNDZ9LAorICAgICAgICB7MHg4MDA5LCAyNDZ9LAorICAgICAgICB7MHg4MDE3LCAyNDZ9LAorICAgICAgICB7MHhjMDI4LCAyNDZ9LAorICAgICAgICB7MHg4MDAyLCAyNDd9LAorICAgICAgICB7MHg4MDA5LCAyNDd9LAorICAgICAgICB7MHg4MDE3LCAyNDd9LAorICAgICAgICB7MHhjMDI4LCAyNDd9LAorICAgICAgICB7MHg4MDAyLCAyNDh9LAorICAgICAgICB7MHg4MDA5LCAyNDh9LAorICAgICAgICB7MHg4MDE3LCAyNDh9LAorICAgICAgICB7MHhjMDI4LCAyNDh9LAorICAgIH0sCisgICAgLyogMjE4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNDV9LAorICAgICAgICB7MHg4MDA2LCAyNDV9LAorICAgICAgICB7MHg4MDBhLCAyNDV9LAorICAgICAgICB7MHg4MDBmLCAyNDV9LAorICAgICAgICB7MHg4MDE4LCAyNDV9LAorICAgICAgICB7MHg4MDFmLCAyNDV9LAorICAgICAgICB7MHg4MDI5LCAyNDV9LAorICAgICAgICB7MHhjMDM4LCAyNDV9LAorICAgICAgICB7MHg4MDAzLCAyNDZ9LAorICAgICAgICB7MHg4MDA2LCAyNDZ9LAorICAgICAgICB7MHg4MDBhLCAyNDZ9LAorICAgICAgICB7MHg4MDBmLCAyNDZ9LAorICAgICAgICB7MHg4MDE4LCAyNDZ9LAorICAgICAgICB7MHg4MDFmLCAyNDZ9LAorICAgICAgICB7MHg4MDI5LCAyNDZ9LAorICAgICAgICB7MHhjMDM4LCAyNDZ9LAorICAgIH0sCisgICAgLyogMjE5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNDd9LAorICAgICAgICB7MHg4MDA2LCAyNDd9LAorICAgICAgICB7MHg4MDBhLCAyNDd9LAorICAgICAgICB7MHg4MDBmLCAyNDd9LAorICAgICAgICB7MHg4MDE4LCAyNDd9LAorICAgICAgICB7MHg4MDFmLCAyNDd9LAorICAgICAgICB7MHg4MDI5LCAyNDd9LAorICAgICAgICB7MHhjMDM4LCAyNDd9LAorICAgICAgICB7MHg4MDAzLCAyNDh9LAorICAgICAgICB7MHg4MDA2LCAyNDh9LAorICAgICAgICB7MHg4MDBhLCAyNDh9LAorICAgICAgICB7MHg4MDBmLCAyNDh9LAorICAgICAgICB7MHg4MDE4LCAyNDh9LAorICAgICAgICB7MHg4MDFmLCAyNDh9LAorICAgICAgICB7MHg4MDI5LCAyNDh9LAorICAgICAgICB7MHhjMDM4LCAyNDh9LAorICAgIH0sCisgICAgLyogMjIwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyNTB9LAorICAgICAgICB7MHg4MDA5LCAyNTB9LAorICAgICAgICB7MHg4MDE3LCAyNTB9LAorICAgICAgICB7MHhjMDI4LCAyNTB9LAorICAgICAgICB7MHg4MDAyLCAyNTF9LAorICAgICAgICB7MHg4MDA5LCAyNTF9LAorICAgICAgICB7MHg4MDE3LCAyNTF9LAorICAgICAgICB7MHhjMDI4LCAyNTF9LAorICAgICAgICB7MHg4MDAyLCAyNTJ9LAorICAgICAgICB7MHg4MDA5LCAyNTJ9LAorICAgICAgICB7MHg4MDE3LCAyNTJ9LAorICAgICAgICB7MHhjMDI4LCAyNTJ9LAorICAgICAgICB7MHg4MDAyLCAyNTN9LAorICAgICAgICB7MHg4MDA5LCAyNTN9LAorICAgICAgICB7MHg4MDE3LCAyNTN9LAorICAgICAgICB7MHhjMDI4LCAyNTN9LAorICAgIH0sCisgICAgLyogMjIxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNTB9LAorICAgICAgICB7MHg4MDA2LCAyNTB9LAorICAgICAgICB7MHg4MDBhLCAyNTB9LAorICAgICAgICB7MHg4MDBmLCAyNTB9LAorICAgICAgICB7MHg4MDE4LCAyNTB9LAorICAgICAgICB7MHg4MDFmLCAyNTB9LAorICAgICAgICB7MHg4MDI5LCAyNTB9LAorICAgICAgICB7MHhjMDM4LCAyNTB9LAorICAgICAgICB7MHg4MDAzLCAyNTF9LAorICAgICAgICB7MHg4MDA2LCAyNTF9LAorICAgICAgICB7MHg4MDBhLCAyNTF9LAorICAgICAgICB7MHg4MDBmLCAyNTF9LAorICAgICAgICB7MHg4MDE4LCAyNTF9LAorICAgICAgICB7MHg4MDFmLCAyNTF9LAorICAgICAgICB7MHg4MDI5LCAyNTF9LAorICAgICAgICB7MHhjMDM4LCAyNTF9LAorICAgIH0sCisgICAgLyogMjIyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNTJ9LAorICAgICAgICB7MHg4MDA2LCAyNTJ9LAorICAgICAgICB7MHg4MDBhLCAyNTJ9LAorICAgICAgICB7MHg4MDBmLCAyNTJ9LAorICAgICAgICB7MHg4MDE4LCAyNTJ9LAorICAgICAgICB7MHg4MDFmLCAyNTJ9LAorICAgICAgICB7MHg4MDI5LCAyNTJ9LAorICAgICAgICB7MHhjMDM4LCAyNTJ9LAorICAgICAgICB7MHg4MDAzLCAyNTN9LAorICAgICAgICB7MHg4MDA2LCAyNTN9LAorICAgICAgICB7MHg4MDBhLCAyNTN9LAorICAgICAgICB7MHg4MDBmLCAyNTN9LAorICAgICAgICB7MHg4MDE4LCAyNTN9LAorICAgICAgICB7MHg4MDFmLCAyNTN9LAorICAgICAgICB7MHg4MDI5LCAyNTN9LAorICAgICAgICB7MHhjMDM4LCAyNTN9LAorICAgIH0sCisgICAgLyogMjIzICovCisgICAgeworICAgICAgICB7MHhjMDAwLCAyNTR9LAorICAgICAgICB7MHhlMywgMH0sCisgICAgICAgIHsweGU1LCAwfSwKKyAgICAgICAgezB4ZTYsIDB9LAorICAgICAgICB7MHhlOSwgMH0sCisgICAgICAgIHsweGVhLCAwfSwKKyAgICAgICAgezB4ZWMsIDB9LAorICAgICAgICB7MHhlZCwgMH0sCisgICAgICAgIHsweGYxLCAwfSwKKyAgICAgICAgezB4ZjIsIDB9LAorICAgICAgICB7MHhmNCwgMH0sCisgICAgICAgIHsweGY1LCAwfSwKKyAgICAgICAgezB4ZjgsIDB9LAorICAgICAgICB7MHhmOSwgMH0sCisgICAgICAgIHsweGZiLCAwfSwKKyAgICAgICAgezB4ZmMsIDB9LAorICAgIH0sCisgICAgLyogMjI0ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAyNTR9LAorICAgICAgICB7MHhjMDE2LCAyNTR9LAorICAgICAgICB7MHhjMDAwLCAyfSwKKyAgICAgICAgezB4YzAwMCwgM30sCisgICAgICAgIHsweGMwMDAsIDR9LAorICAgICAgICB7MHhjMDAwLCA1fSwKKyAgICAgICAgezB4YzAwMCwgNn0sCisgICAgICAgIHsweGMwMDAsIDd9LAorICAgICAgICB7MHhjMDAwLCA4fSwKKyAgICAgICAgezB4YzAwMCwgMTF9LAorICAgICAgICB7MHhjMDAwLCAxMn0sCisgICAgICAgIHsweGMwMDAsIDE0fSwKKyAgICAgICAgezB4YzAwMCwgMTV9LAorICAgICAgICB7MHhjMDAwLCAxNn0sCisgICAgICAgIHsweGMwMDAsIDE3fSwKKyAgICAgICAgezB4YzAwMCwgMTh9LAorICAgIH0sCisgICAgLyogMjI1ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyNTR9LAorICAgICAgICB7MHg4MDA5LCAyNTR9LAorICAgICAgICB7MHg4MDE3LCAyNTR9LAorICAgICAgICB7MHhjMDI4LCAyNTR9LAorICAgICAgICB7MHg4MDAxLCAyfSwKKyAgICAgICAgezB4YzAxNiwgMn0sCisgICAgICAgIHsweDgwMDEsIDN9LAorICAgICAgICB7MHhjMDE2LCAzfSwKKyAgICAgICAgezB4ODAwMSwgNH0sCisgICAgICAgIHsweGMwMTYsIDR9LAorICAgICAgICB7MHg4MDAxLCA1fSwKKyAgICAgICAgezB4YzAxNiwgNX0sCisgICAgICAgIHsweDgwMDEsIDZ9LAorICAgICAgICB7MHhjMDE2LCA2fSwKKyAgICAgICAgezB4ODAwMSwgN30sCisgICAgICAgIHsweGMwMTYsIDd9LAorICAgIH0sCisgICAgLyogMjI2ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNTR9LAorICAgICAgICB7MHg4MDA2LCAyNTR9LAorICAgICAgICB7MHg4MDBhLCAyNTR9LAorICAgICAgICB7MHg4MDBmLCAyNTR9LAorICAgICAgICB7MHg4MDE4LCAyNTR9LAorICAgICAgICB7MHg4MDFmLCAyNTR9LAorICAgICAgICB7MHg4MDI5LCAyNTR9LAorICAgICAgICB7MHhjMDM4LCAyNTR9LAorICAgICAgICB7MHg4MDAyLCAyfSwKKyAgICAgICAgezB4ODAwOSwgMn0sCisgICAgICAgIHsweDgwMTcsIDJ9LAorICAgICAgICB7MHhjMDI4LCAyfSwKKyAgICAgICAgezB4ODAwMiwgM30sCisgICAgICAgIHsweDgwMDksIDN9LAorICAgICAgICB7MHg4MDE3LCAzfSwKKyAgICAgICAgezB4YzAyOCwgM30sCisgICAgfSwKKyAgICAvKiAyMjcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDJ9LAorICAgICAgICB7MHg4MDA2LCAyfSwKKyAgICAgICAgezB4ODAwYSwgMn0sCisgICAgICAgIHsweDgwMGYsIDJ9LAorICAgICAgICB7MHg4MDE4LCAyfSwKKyAgICAgICAgezB4ODAxZiwgMn0sCisgICAgICAgIHsweDgwMjksIDJ9LAorICAgICAgICB7MHhjMDM4LCAyfSwKKyAgICAgICAgezB4ODAwMywgM30sCisgICAgICAgIHsweDgwMDYsIDN9LAorICAgICAgICB7MHg4MDBhLCAzfSwKKyAgICAgICAgezB4ODAwZiwgM30sCisgICAgICAgIHsweDgwMTgsIDN9LAorICAgICAgICB7MHg4MDFmLCAzfSwKKyAgICAgICAgezB4ODAyOSwgM30sCisgICAgICAgIHsweGMwMzgsIDN9LAorICAgIH0sCisgICAgLyogMjI4ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA0fSwKKyAgICAgICAgezB4ODAwOSwgNH0sCisgICAgICAgIHsweDgwMTcsIDR9LAorICAgICAgICB7MHhjMDI4LCA0fSwKKyAgICAgICAgezB4ODAwMiwgNX0sCisgICAgICAgIHsweDgwMDksIDV9LAorICAgICAgICB7MHg4MDE3LCA1fSwKKyAgICAgICAgezB4YzAyOCwgNX0sCisgICAgICAgIHsweDgwMDIsIDZ9LAorICAgICAgICB7MHg4MDA5LCA2fSwKKyAgICAgICAgezB4ODAxNywgNn0sCisgICAgICAgIHsweGMwMjgsIDZ9LAorICAgICAgICB7MHg4MDAyLCA3fSwKKyAgICAgICAgezB4ODAwOSwgN30sCisgICAgICAgIHsweDgwMTcsIDd9LAorICAgICAgICB7MHhjMDI4LCA3fSwKKyAgICB9LAorICAgIC8qIDIyOSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNH0sCisgICAgICAgIHsweDgwMDYsIDR9LAorICAgICAgICB7MHg4MDBhLCA0fSwKKyAgICAgICAgezB4ODAwZiwgNH0sCisgICAgICAgIHsweDgwMTgsIDR9LAorICAgICAgICB7MHg4MDFmLCA0fSwKKyAgICAgICAgezB4ODAyOSwgNH0sCisgICAgICAgIHsweGMwMzgsIDR9LAorICAgICAgICB7MHg4MDAzLCA1fSwKKyAgICAgICAgezB4ODAwNiwgNX0sCisgICAgICAgIHsweDgwMGEsIDV9LAorICAgICAgICB7MHg4MDBmLCA1fSwKKyAgICAgICAgezB4ODAxOCwgNX0sCisgICAgICAgIHsweDgwMWYsIDV9LAorICAgICAgICB7MHg4MDI5LCA1fSwKKyAgICAgICAgezB4YzAzOCwgNX0sCisgICAgfSwKKyAgICAvKiAyMzAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDZ9LAorICAgICAgICB7MHg4MDA2LCA2fSwKKyAgICAgICAgezB4ODAwYSwgNn0sCisgICAgICAgIHsweDgwMGYsIDZ9LAorICAgICAgICB7MHg4MDE4LCA2fSwKKyAgICAgICAgezB4ODAxZiwgNn0sCisgICAgICAgIHsweDgwMjksIDZ9LAorICAgICAgICB7MHhjMDM4LCA2fSwKKyAgICAgICAgezB4ODAwMywgN30sCisgICAgICAgIHsweDgwMDYsIDd9LAorICAgICAgICB7MHg4MDBhLCA3fSwKKyAgICAgICAgezB4ODAwZiwgN30sCisgICAgICAgIHsweDgwMTgsIDd9LAorICAgICAgICB7MHg4MDFmLCA3fSwKKyAgICAgICAgezB4ODAyOSwgN30sCisgICAgICAgIHsweGMwMzgsIDd9LAorICAgIH0sCisgICAgLyogMjMxICovCisgICAgeworICAgICAgICB7MHg4MDAxLCA4fSwKKyAgICAgICAgezB4YzAxNiwgOH0sCisgICAgICAgIHsweDgwMDEsIDExfSwKKyAgICAgICAgezB4YzAxNiwgMTF9LAorICAgICAgICB7MHg4MDAxLCAxMn0sCisgICAgICAgIHsweGMwMTYsIDEyfSwKKyAgICAgICAgezB4ODAwMSwgMTR9LAorICAgICAgICB7MHhjMDE2LCAxNH0sCisgICAgICAgIHsweDgwMDEsIDE1fSwKKyAgICAgICAgezB4YzAxNiwgMTV9LAorICAgICAgICB7MHg4MDAxLCAxNn0sCisgICAgICAgIHsweGMwMTYsIDE2fSwKKyAgICAgICAgezB4ODAwMSwgMTd9LAorICAgICAgICB7MHhjMDE2LCAxN30sCisgICAgICAgIHsweDgwMDEsIDE4fSwKKyAgICAgICAgezB4YzAxNiwgMTh9LAorICAgIH0sCisgICAgLyogMjMyICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA4fSwKKyAgICAgICAgezB4ODAwOSwgOH0sCisgICAgICAgIHsweDgwMTcsIDh9LAorICAgICAgICB7MHhjMDI4LCA4fSwKKyAgICAgICAgezB4ODAwMiwgMTF9LAorICAgICAgICB7MHg4MDA5LCAxMX0sCisgICAgICAgIHsweDgwMTcsIDExfSwKKyAgICAgICAgezB4YzAyOCwgMTF9LAorICAgICAgICB7MHg4MDAyLCAxMn0sCisgICAgICAgIHsweDgwMDksIDEyfSwKKyAgICAgICAgezB4ODAxNywgMTJ9LAorICAgICAgICB7MHhjMDI4LCAxMn0sCisgICAgICAgIHsweDgwMDIsIDE0fSwKKyAgICAgICAgezB4ODAwOSwgMTR9LAorICAgICAgICB7MHg4MDE3LCAxNH0sCisgICAgICAgIHsweGMwMjgsIDE0fSwKKyAgICB9LAorICAgIC8qIDIzMyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgOH0sCisgICAgICAgIHsweDgwMDYsIDh9LAorICAgICAgICB7MHg4MDBhLCA4fSwKKyAgICAgICAgezB4ODAwZiwgOH0sCisgICAgICAgIHsweDgwMTgsIDh9LAorICAgICAgICB7MHg4MDFmLCA4fSwKKyAgICAgICAgezB4ODAyOSwgOH0sCisgICAgICAgIHsweGMwMzgsIDh9LAorICAgICAgICB7MHg4MDAzLCAxMX0sCisgICAgICAgIHsweDgwMDYsIDExfSwKKyAgICAgICAgezB4ODAwYSwgMTF9LAorICAgICAgICB7MHg4MDBmLCAxMX0sCisgICAgICAgIHsweDgwMTgsIDExfSwKKyAgICAgICAgezB4ODAxZiwgMTF9LAorICAgICAgICB7MHg4MDI5LCAxMX0sCisgICAgICAgIHsweGMwMzgsIDExfSwKKyAgICB9LAorICAgIC8qIDIzNCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTJ9LAorICAgICAgICB7MHg4MDA2LCAxMn0sCisgICAgICAgIHsweDgwMGEsIDEyfSwKKyAgICAgICAgezB4ODAwZiwgMTJ9LAorICAgICAgICB7MHg4MDE4LCAxMn0sCisgICAgICAgIHsweDgwMWYsIDEyfSwKKyAgICAgICAgezB4ODAyOSwgMTJ9LAorICAgICAgICB7MHhjMDM4LCAxMn0sCisgICAgICAgIHsweDgwMDMsIDE0fSwKKyAgICAgICAgezB4ODAwNiwgMTR9LAorICAgICAgICB7MHg4MDBhLCAxNH0sCisgICAgICAgIHsweDgwMGYsIDE0fSwKKyAgICAgICAgezB4ODAxOCwgMTR9LAorICAgICAgICB7MHg4MDFmLCAxNH0sCisgICAgICAgIHsweDgwMjksIDE0fSwKKyAgICAgICAgezB4YzAzOCwgMTR9LAorICAgIH0sCisgICAgLyogMjM1ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNX0sCisgICAgICAgIHsweDgwMDksIDE1fSwKKyAgICAgICAgezB4ODAxNywgMTV9LAorICAgICAgICB7MHhjMDI4LCAxNX0sCisgICAgICAgIHsweDgwMDIsIDE2fSwKKyAgICAgICAgezB4ODAwOSwgMTZ9LAorICAgICAgICB7MHg4MDE3LCAxNn0sCisgICAgICAgIHsweGMwMjgsIDE2fSwKKyAgICAgICAgezB4ODAwMiwgMTd9LAorICAgICAgICB7MHg4MDA5LCAxN30sCisgICAgICAgIHsweDgwMTcsIDE3fSwKKyAgICAgICAgezB4YzAyOCwgMTd9LAorICAgICAgICB7MHg4MDAyLCAxOH0sCisgICAgICAgIHsweDgwMDksIDE4fSwKKyAgICAgICAgezB4ODAxNywgMTh9LAorICAgICAgICB7MHhjMDI4LCAxOH0sCisgICAgfSwKKyAgICAvKiAyMzYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE1fSwKKyAgICAgICAgezB4ODAwNiwgMTV9LAorICAgICAgICB7MHg4MDBhLCAxNX0sCisgICAgICAgIHsweDgwMGYsIDE1fSwKKyAgICAgICAgezB4ODAxOCwgMTV9LAorICAgICAgICB7MHg4MDFmLCAxNX0sCisgICAgICAgIHsweDgwMjksIDE1fSwKKyAgICAgICAgezB4YzAzOCwgMTV9LAorICAgICAgICB7MHg4MDAzLCAxNn0sCisgICAgICAgIHsweDgwMDYsIDE2fSwKKyAgICAgICAgezB4ODAwYSwgMTZ9LAorICAgICAgICB7MHg4MDBmLCAxNn0sCisgICAgICAgIHsweDgwMTgsIDE2fSwKKyAgICAgICAgezB4ODAxZiwgMTZ9LAorICAgICAgICB7MHg4MDI5LCAxNn0sCisgICAgICAgIHsweGMwMzgsIDE2fSwKKyAgICB9LAorICAgIC8qIDIzNyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTd9LAorICAgICAgICB7MHg4MDA2LCAxN30sCisgICAgICAgIHsweDgwMGEsIDE3fSwKKyAgICAgICAgezB4ODAwZiwgMTd9LAorICAgICAgICB7MHg4MDE4LCAxN30sCisgICAgICAgIHsweDgwMWYsIDE3fSwKKyAgICAgICAgezB4ODAyOSwgMTd9LAorICAgICAgICB7MHhjMDM4LCAxN30sCisgICAgICAgIHsweDgwMDMsIDE4fSwKKyAgICAgICAgezB4ODAwNiwgMTh9LAorICAgICAgICB7MHg4MDBhLCAxOH0sCisgICAgICAgIHsweDgwMGYsIDE4fSwKKyAgICAgICAgezB4ODAxOCwgMTh9LAorICAgICAgICB7MHg4MDFmLCAxOH0sCisgICAgICAgIHsweDgwMjksIDE4fSwKKyAgICAgICAgezB4YzAzOCwgMTh9LAorICAgIH0sCisgICAgLyogMjM4ICovCisgICAgeworICAgICAgICB7MHhjMDAwLCAxOX0sCisgICAgICAgIHsweGMwMDAsIDIwfSwKKyAgICAgICAgezB4YzAwMCwgMjF9LAorICAgICAgICB7MHhjMDAwLCAyM30sCisgICAgICAgIHsweGMwMDAsIDI0fSwKKyAgICAgICAgezB4YzAwMCwgMjV9LAorICAgICAgICB7MHhjMDAwLCAyNn0sCisgICAgICAgIHsweGMwMDAsIDI3fSwKKyAgICAgICAgezB4YzAwMCwgMjh9LAorICAgICAgICB7MHhjMDAwLCAyOX0sCisgICAgICAgIHsweGMwMDAsIDMwfSwKKyAgICAgICAgezB4YzAwMCwgMzF9LAorICAgICAgICB7MHhjMDAwLCAxMjd9LAorICAgICAgICB7MHhjMDAwLCAyMjB9LAorICAgICAgICB7MHhjMDAwLCAyNDl9LAorICAgICAgICB7MHhmZCwgMH0sCisgICAgfSwKKyAgICAvKiAyMzkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDE5fSwKKyAgICAgICAgezB4YzAxNiwgMTl9LAorICAgICAgICB7MHg4MDAxLCAyMH0sCisgICAgICAgIHsweGMwMTYsIDIwfSwKKyAgICAgICAgezB4ODAwMSwgMjF9LAorICAgICAgICB7MHhjMDE2LCAyMX0sCisgICAgICAgIHsweDgwMDEsIDIzfSwKKyAgICAgICAgezB4YzAxNiwgMjN9LAorICAgICAgICB7MHg4MDAxLCAyNH0sCisgICAgICAgIHsweGMwMTYsIDI0fSwKKyAgICAgICAgezB4ODAwMSwgMjV9LAorICAgICAgICB7MHhjMDE2LCAyNX0sCisgICAgICAgIHsweDgwMDEsIDI2fSwKKyAgICAgICAgezB4YzAxNiwgMjZ9LAorICAgICAgICB7MHg4MDAxLCAyN30sCisgICAgICAgIHsweGMwMTYsIDI3fSwKKyAgICB9LAorICAgIC8qIDI0MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTl9LAorICAgICAgICB7MHg4MDA5LCAxOX0sCisgICAgICAgIHsweDgwMTcsIDE5fSwKKyAgICAgICAgezB4YzAyOCwgMTl9LAorICAgICAgICB7MHg4MDAyLCAyMH0sCisgICAgICAgIHsweDgwMDksIDIwfSwKKyAgICAgICAgezB4ODAxNywgMjB9LAorICAgICAgICB7MHhjMDI4LCAyMH0sCisgICAgICAgIHsweDgwMDIsIDIxfSwKKyAgICAgICAgezB4ODAwOSwgMjF9LAorICAgICAgICB7MHg4MDE3LCAyMX0sCisgICAgICAgIHsweGMwMjgsIDIxfSwKKyAgICAgICAgezB4ODAwMiwgMjN9LAorICAgICAgICB7MHg4MDA5LCAyM30sCisgICAgICAgIHsweDgwMTcsIDIzfSwKKyAgICAgICAgezB4YzAyOCwgMjN9LAorICAgIH0sCisgICAgLyogMjQxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxOX0sCisgICAgICAgIHsweDgwMDYsIDE5fSwKKyAgICAgICAgezB4ODAwYSwgMTl9LAorICAgICAgICB7MHg4MDBmLCAxOX0sCisgICAgICAgIHsweDgwMTgsIDE5fSwKKyAgICAgICAgezB4ODAxZiwgMTl9LAorICAgICAgICB7MHg4MDI5LCAxOX0sCisgICAgICAgIHsweGMwMzgsIDE5fSwKKyAgICAgICAgezB4ODAwMywgMjB9LAorICAgICAgICB7MHg4MDA2LCAyMH0sCisgICAgICAgIHsweDgwMGEsIDIwfSwKKyAgICAgICAgezB4ODAwZiwgMjB9LAorICAgICAgICB7MHg4MDE4LCAyMH0sCisgICAgICAgIHsweDgwMWYsIDIwfSwKKyAgICAgICAgezB4ODAyOSwgMjB9LAorICAgICAgICB7MHhjMDM4LCAyMH0sCisgICAgfSwKKyAgICAvKiAyNDIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIxfSwKKyAgICAgICAgezB4ODAwNiwgMjF9LAorICAgICAgICB7MHg4MDBhLCAyMX0sCisgICAgICAgIHsweDgwMGYsIDIxfSwKKyAgICAgICAgezB4ODAxOCwgMjF9LAorICAgICAgICB7MHg4MDFmLCAyMX0sCisgICAgICAgIHsweDgwMjksIDIxfSwKKyAgICAgICAgezB4YzAzOCwgMjF9LAorICAgICAgICB7MHg4MDAzLCAyM30sCisgICAgICAgIHsweDgwMDYsIDIzfSwKKyAgICAgICAgezB4ODAwYSwgMjN9LAorICAgICAgICB7MHg4MDBmLCAyM30sCisgICAgICAgIHsweDgwMTgsIDIzfSwKKyAgICAgICAgezB4ODAxZiwgMjN9LAorICAgICAgICB7MHg4MDI5LCAyM30sCisgICAgICAgIHsweGMwMzgsIDIzfSwKKyAgICB9LAorICAgIC8qIDI0MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMjR9LAorICAgICAgICB7MHg4MDA5LCAyNH0sCisgICAgICAgIHsweDgwMTcsIDI0fSwKKyAgICAgICAgezB4YzAyOCwgMjR9LAorICAgICAgICB7MHg4MDAyLCAyNX0sCisgICAgICAgIHsweDgwMDksIDI1fSwKKyAgICAgICAgezB4ODAxNywgMjV9LAorICAgICAgICB7MHhjMDI4LCAyNX0sCisgICAgICAgIHsweDgwMDIsIDI2fSwKKyAgICAgICAgezB4ODAwOSwgMjZ9LAorICAgICAgICB7MHg4MDE3LCAyNn0sCisgICAgICAgIHsweGMwMjgsIDI2fSwKKyAgICAgICAgezB4ODAwMiwgMjd9LAorICAgICAgICB7MHg4MDA5LCAyN30sCisgICAgICAgIHsweDgwMTcsIDI3fSwKKyAgICAgICAgezB4YzAyOCwgMjd9LAorICAgIH0sCisgICAgLyogMjQ0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNH0sCisgICAgICAgIHsweDgwMDYsIDI0fSwKKyAgICAgICAgezB4ODAwYSwgMjR9LAorICAgICAgICB7MHg4MDBmLCAyNH0sCisgICAgICAgIHsweDgwMTgsIDI0fSwKKyAgICAgICAgezB4ODAxZiwgMjR9LAorICAgICAgICB7MHg4MDI5LCAyNH0sCisgICAgICAgIHsweGMwMzgsIDI0fSwKKyAgICAgICAgezB4ODAwMywgMjV9LAorICAgICAgICB7MHg4MDA2LCAyNX0sCisgICAgICAgIHsweDgwMGEsIDI1fSwKKyAgICAgICAgezB4ODAwZiwgMjV9LAorICAgICAgICB7MHg4MDE4LCAyNX0sCisgICAgICAgIHsweDgwMWYsIDI1fSwKKyAgICAgICAgezB4ODAyOSwgMjV9LAorICAgICAgICB7MHhjMDM4LCAyNX0sCisgICAgfSwKKyAgICAvKiAyNDUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI2fSwKKyAgICAgICAgezB4ODAwNiwgMjZ9LAorICAgICAgICB7MHg4MDBhLCAyNn0sCisgICAgICAgIHsweDgwMGYsIDI2fSwKKyAgICAgICAgezB4ODAxOCwgMjZ9LAorICAgICAgICB7MHg4MDFmLCAyNn0sCisgICAgICAgIHsweDgwMjksIDI2fSwKKyAgICAgICAgezB4YzAzOCwgMjZ9LAorICAgICAgICB7MHg4MDAzLCAyN30sCisgICAgICAgIHsweDgwMDYsIDI3fSwKKyAgICAgICAgezB4ODAwYSwgMjd9LAorICAgICAgICB7MHg4MDBmLCAyN30sCisgICAgICAgIHsweDgwMTgsIDI3fSwKKyAgICAgICAgezB4ODAxZiwgMjd9LAorICAgICAgICB7MHg4MDI5LCAyN30sCisgICAgICAgIHsweGMwMzgsIDI3fSwKKyAgICB9LAorICAgIC8qIDI0NiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMjh9LAorICAgICAgICB7MHhjMDE2LCAyOH0sCisgICAgICAgIHsweDgwMDEsIDI5fSwKKyAgICAgICAgezB4YzAxNiwgMjl9LAorICAgICAgICB7MHg4MDAxLCAzMH0sCisgICAgICAgIHsweGMwMTYsIDMwfSwKKyAgICAgICAgezB4ODAwMSwgMzF9LAorICAgICAgICB7MHhjMDE2LCAzMX0sCisgICAgICAgIHsweDgwMDEsIDEyN30sCisgICAgICAgIHsweGMwMTYsIDEyN30sCisgICAgICAgIHsweDgwMDEsIDIyMH0sCisgICAgICAgIHsweGMwMTYsIDIyMH0sCisgICAgICAgIHsweDgwMDEsIDI0OX0sCisgICAgICAgIHsweGMwMTYsIDI0OX0sCisgICAgICAgIHsweGZlLCAwfSwKKyAgICAgICAgezB4ZmYsIDB9LAorICAgIH0sCisgICAgLyogMjQ3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyOH0sCisgICAgICAgIHsweDgwMDksIDI4fSwKKyAgICAgICAgezB4ODAxNywgMjh9LAorICAgICAgICB7MHhjMDI4LCAyOH0sCisgICAgICAgIHsweDgwMDIsIDI5fSwKKyAgICAgICAgezB4ODAwOSwgMjl9LAorICAgICAgICB7MHg4MDE3LCAyOX0sCisgICAgICAgIHsweGMwMjgsIDI5fSwKKyAgICAgICAgezB4ODAwMiwgMzB9LAorICAgICAgICB7MHg4MDA5LCAzMH0sCisgICAgICAgIHsweDgwMTcsIDMwfSwKKyAgICAgICAgezB4YzAyOCwgMzB9LAorICAgICAgICB7MHg4MDAyLCAzMX0sCisgICAgICAgIHsweDgwMDksIDMxfSwKKyAgICAgICAgezB4ODAxNywgMzF9LAorICAgICAgICB7MHhjMDI4LCAzMX0sCisgICAgfSwKKyAgICAvKiAyNDggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI4fSwKKyAgICAgICAgezB4ODAwNiwgMjh9LAorICAgICAgICB7MHg4MDBhLCAyOH0sCisgICAgICAgIHsweDgwMGYsIDI4fSwKKyAgICAgICAgezB4ODAxOCwgMjh9LAorICAgICAgICB7MHg4MDFmLCAyOH0sCisgICAgICAgIHsweDgwMjksIDI4fSwKKyAgICAgICAgezB4YzAzOCwgMjh9LAorICAgICAgICB7MHg4MDAzLCAyOX0sCisgICAgICAgIHsweDgwMDYsIDI5fSwKKyAgICAgICAgezB4ODAwYSwgMjl9LAorICAgICAgICB7MHg4MDBmLCAyOX0sCisgICAgICAgIHsweDgwMTgsIDI5fSwKKyAgICAgICAgezB4ODAxZiwgMjl9LAorICAgICAgICB7MHg4MDI5LCAyOX0sCisgICAgICAgIHsweGMwMzgsIDI5fSwKKyAgICB9LAorICAgIC8qIDI0OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMzB9LAorICAgICAgICB7MHg4MDA2LCAzMH0sCisgICAgICAgIHsweDgwMGEsIDMwfSwKKyAgICAgICAgezB4ODAwZiwgMzB9LAorICAgICAgICB7MHg4MDE4LCAzMH0sCisgICAgICAgIHsweDgwMWYsIDMwfSwKKyAgICAgICAgezB4ODAyOSwgMzB9LAorICAgICAgICB7MHhjMDM4LCAzMH0sCisgICAgICAgIHsweDgwMDMsIDMxfSwKKyAgICAgICAgezB4ODAwNiwgMzF9LAorICAgICAgICB7MHg4MDBhLCAzMX0sCisgICAgICAgIHsweDgwMGYsIDMxfSwKKyAgICAgICAgezB4ODAxOCwgMzF9LAorICAgICAgICB7MHg4MDFmLCAzMX0sCisgICAgICAgIHsweDgwMjksIDMxfSwKKyAgICAgICAgezB4YzAzOCwgMzF9LAorICAgIH0sCisgICAgLyogMjUwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMjd9LAorICAgICAgICB7MHg4MDA5LCAxMjd9LAorICAgICAgICB7MHg4MDE3LCAxMjd9LAorICAgICAgICB7MHhjMDI4LCAxMjd9LAorICAgICAgICB7MHg4MDAyLCAyMjB9LAorICAgICAgICB7MHg4MDA5LCAyMjB9LAorICAgICAgICB7MHg4MDE3LCAyMjB9LAorICAgICAgICB7MHhjMDI4LCAyMjB9LAorICAgICAgICB7MHg4MDAyLCAyNDl9LAorICAgICAgICB7MHg4MDA5LCAyNDl9LAorICAgICAgICB7MHg4MDE3LCAyNDl9LAorICAgICAgICB7MHhjMDI4LCAyNDl9LAorICAgICAgICB7MHhjMDAwLCAxMH0sCisgICAgICAgIHsweGMwMDAsIDEzfSwKKyAgICAgICAgezB4YzAwMCwgMjJ9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgIH0sCisgICAgLyogMjUxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMjd9LAorICAgICAgICB7MHg4MDA2LCAxMjd9LAorICAgICAgICB7MHg4MDBhLCAxMjd9LAorICAgICAgICB7MHg4MDBmLCAxMjd9LAorICAgICAgICB7MHg4MDE4LCAxMjd9LAorICAgICAgICB7MHg4MDFmLCAxMjd9LAorICAgICAgICB7MHg4MDI5LCAxMjd9LAorICAgICAgICB7MHhjMDM4LCAxMjd9LAorICAgICAgICB7MHg4MDAzLCAyMjB9LAorICAgICAgICB7MHg4MDA2LCAyMjB9LAorICAgICAgICB7MHg4MDBhLCAyMjB9LAorICAgICAgICB7MHg4MDBmLCAyMjB9LAorICAgICAgICB7MHg4MDE4LCAyMjB9LAorICAgICAgICB7MHg4MDFmLCAyMjB9LAorICAgICAgICB7MHg4MDI5LCAyMjB9LAorICAgICAgICB7MHhjMDM4LCAyMjB9LAorICAgIH0sCisgICAgLyogMjUyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNDl9LAorICAgICAgICB7MHg4MDA2LCAyNDl9LAorICAgICAgICB7MHg4MDBhLCAyNDl9LAorICAgICAgICB7MHg4MDBmLCAyNDl9LAorICAgICAgICB7MHg4MDE4LCAyNDl9LAorICAgICAgICB7MHg4MDFmLCAyNDl9LAorICAgICAgICB7MHg4MDI5LCAyNDl9LAorICAgICAgICB7MHhjMDM4LCAyNDl9LAorICAgICAgICB7MHg4MDAxLCAxMH0sCisgICAgICAgIHsweGMwMTYsIDEwfSwKKyAgICAgICAgezB4ODAwMSwgMTN9LAorICAgICAgICB7MHhjMDE2LCAxM30sCisgICAgICAgIHsweDgwMDEsIDIyfSwKKyAgICAgICAgezB4YzAxNiwgMjJ9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgIH0sCisgICAgLyogMjUzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMH0sCisgICAgICAgIHsweDgwMDksIDEwfSwKKyAgICAgICAgezB4ODAxNywgMTB9LAorICAgICAgICB7MHhjMDI4LCAxMH0sCisgICAgICAgIHsweDgwMDIsIDEzfSwKKyAgICAgICAgezB4ODAwOSwgMTN9LAorICAgICAgICB7MHg4MDE3LCAxM30sCisgICAgICAgIHsweGMwMjgsIDEzfSwKKyAgICAgICAgezB4ODAwMiwgMjJ9LAorICAgICAgICB7MHg4MDA5LCAyMn0sCisgICAgICAgIHsweDgwMTcsIDIyfSwKKyAgICAgICAgezB4YzAyOCwgMjJ9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgIH0sCisgICAgLyogMjU0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMH0sCisgICAgICAgIHsweDgwMDYsIDEwfSwKKyAgICAgICAgezB4ODAwYSwgMTB9LAorICAgICAgICB7MHg4MDBmLCAxMH0sCisgICAgICAgIHsweDgwMTgsIDEwfSwKKyAgICAgICAgezB4ODAxZiwgMTB9LAorICAgICAgICB7MHg4MDI5LCAxMH0sCisgICAgICAgIHsweGMwMzgsIDEwfSwKKyAgICAgICAgezB4ODAwMywgMTN9LAorICAgICAgICB7MHg4MDA2LCAxM30sCisgICAgICAgIHsweDgwMGEsIDEzfSwKKyAgICAgICAgezB4ODAwZiwgMTN9LAorICAgICAgICB7MHg4MDE4LCAxM30sCisgICAgICAgIHsweDgwMWYsIDEzfSwKKyAgICAgICAgezB4ODAyOSwgMTN9LAorICAgICAgICB7MHhjMDM4LCAxM30sCisgICAgfSwKKyAgICAvKiAyNTUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIyfSwKKyAgICAgICAgezB4ODAwNiwgMjJ9LAorICAgICAgICB7MHg4MDBhLCAyMn0sCisgICAgICAgIHsweDgwMGYsIDIyfSwKKyAgICAgICAgezB4ODAxOCwgMjJ9LAorICAgICAgICB7MHg4MDFmLCAyMn0sCisgICAgICAgIHsweDgwMjksIDIyfSwKKyAgICAgICAgezB4YzAzOCwgMjJ9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgIH0sCisgICAgLyogMjU2ICovCisgICAgeworICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgICAgICB7MHgxMDAsIDB9LAorICAgIH0sCit9OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZWxwZXIuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExMzZhNgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGVscGVyLmMKQEAgLTAsMCArMSw2MjkgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfaGVscGVyLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm5naHR0cDJfbmV0LmgiCisKK3ZvaWQgbmdodHRwMl9wdXRfdWludDE2YmUodWludDhfdCAqYnVmLCB1aW50MTZfdCBuKSB7CisgIHVpbnQxNl90IHggPSBodG9ucyhuKTsKKyAgbWVtY3B5KGJ1ZiwgJngsIHNpemVvZih1aW50MTZfdCkpOworfQorCit2b2lkIG5naHR0cDJfcHV0X3VpbnQzMmJlKHVpbnQ4X3QgKmJ1ZiwgdWludDMyX3QgbikgeworICB1aW50MzJfdCB4ID0gaHRvbmwobik7CisgIG1lbWNweShidWYsICZ4LCBzaXplb2YodWludDMyX3QpKTsKK30KKwordWludDE2X3QgbmdodHRwMl9nZXRfdWludDE2KGNvbnN0IHVpbnQ4X3QgKmRhdGEpIHsKKyAgdWludDE2X3QgbjsKKyAgbWVtY3B5KCZuLCBkYXRhLCBzaXplb2YodWludDE2X3QpKTsKKyAgcmV0dXJuIG50b2hzKG4pOworfQorCit1aW50MzJfdCBuZ2h0dHAyX2dldF91aW50MzIoY29uc3QgdWludDhfdCAqZGF0YSkgeworICB1aW50MzJfdCBuOworICBtZW1jcHkoJm4sIGRhdGEsIHNpemVvZih1aW50MzJfdCkpOworICByZXR1cm4gbnRvaGwobik7Cit9CisKKy8qIEdlbmVyYXRlZCBieSBnZW5kb3duY2FzZXRibC5weSAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3QgRE9XTkNBU0VfVEJMW10gPSB7CisgICAgMCAvKiBOVUwgICovLCAgIDEgLyogU09IICAqLywgICAyIC8qIFNUWCAgKi8sICAgMyAvKiBFVFggICovLAorICAgIDQgLyogRU9UICAqLywgICA1IC8qIEVOUSAgKi8sICAgNiAvKiBBQ0sgICovLCAgIDcgLyogQkVMICAqLywKKyAgICA4IC8qIEJTICAgKi8sICAgOSAvKiBIVCAgICovLCAgIDEwIC8qIExGICAgKi8sICAxMSAvKiBWVCAgICovLAorICAgIDEyIC8qIEZGICAgKi8sICAxMyAvKiBDUiAgICovLCAgMTQgLyogU08gICAqLywgIDE1IC8qIFNJICAgKi8sCisgICAgMTYgLyogRExFICAqLywgIDE3IC8qIERDMSAgKi8sICAxOCAvKiBEQzIgICovLCAgMTkgLyogREMzICAqLywKKyAgICAyMCAvKiBEQzQgICovLCAgMjEgLyogTkFLICAqLywgIDIyIC8qIFNZTiAgKi8sICAyMyAvKiBFVEIgICovLAorICAgIDI0IC8qIENBTiAgKi8sICAyNSAvKiBFTSAgICovLCAgMjYgLyogU1VCICAqLywgIDI3IC8qIEVTQyAgKi8sCisgICAgMjggLyogRlMgICAqLywgIDI5IC8qIEdTICAgKi8sICAzMCAvKiBSUyAgICovLCAgMzEgLyogVVMgICAqLywKKyAgICAzMiAvKiBTUEMgICovLCAgMzMgLyogISAgICAqLywgIDM0IC8qICIgICAgKi8sICAzNSAvKiAjICAgICovLAorICAgIDM2IC8qICQgICAgKi8sICAzNyAvKiAlICAgICovLCAgMzggLyogJiAgICAqLywgIDM5IC8qICcgICAgKi8sCisgICAgNDAgLyogKCAgICAqLywgIDQxIC8qICkgICAgKi8sICA0MiAvKiAqICAgICovLCAgNDMgLyogKyAgICAqLywKKyAgICA0NCAvKiAsICAgICovLCAgNDUgLyogLSAgICAqLywgIDQ2IC8qIC4gICAgKi8sICA0NyAvKiAvICAgICovLAorICAgIDQ4IC8qIDAgICAgKi8sICA0OSAvKiAxICAgICovLCAgNTAgLyogMiAgICAqLywgIDUxIC8qIDMgICAgKi8sCisgICAgNTIgLyogNCAgICAqLywgIDUzIC8qIDUgICAgKi8sICA1NCAvKiA2ICAgICovLCAgNTUgLyogNyAgICAqLywKKyAgICA1NiAvKiA4ICAgICovLCAgNTcgLyogOSAgICAqLywgIDU4IC8qIDogICAgKi8sICA1OSAvKiA7ICAgICovLAorICAgIDYwIC8qIDwgICAgKi8sICA2MSAvKiA9ICAgICovLCAgNjIgLyogPiAgICAqLywgIDYzIC8qID8gICAgKi8sCisgICAgNjQgLyogQCAgICAqLywgIDk3IC8qIEEgICAgKi8sICA5OCAvKiBCICAgICovLCAgOTkgLyogQyAgICAqLywKKyAgICAxMDAgLyogRCAgICAqLywgMTAxIC8qIEUgICAgKi8sIDEwMiAvKiBGICAgICovLCAxMDMgLyogRyAgICAqLywKKyAgICAxMDQgLyogSCAgICAqLywgMTA1IC8qIEkgICAgKi8sIDEwNiAvKiBKICAgICovLCAxMDcgLyogSyAgICAqLywKKyAgICAxMDggLyogTCAgICAqLywgMTA5IC8qIE0gICAgKi8sIDExMCAvKiBOICAgICovLCAxMTEgLyogTyAgICAqLywKKyAgICAxMTIgLyogUCAgICAqLywgMTEzIC8qIFEgICAgKi8sIDExNCAvKiBSICAgICovLCAxMTUgLyogUyAgICAqLywKKyAgICAxMTYgLyogVCAgICAqLywgMTE3IC8qIFUgICAgKi8sIDExOCAvKiBWICAgICovLCAxMTkgLyogVyAgICAqLywKKyAgICAxMjAgLyogWCAgICAqLywgMTIxIC8qIFkgICAgKi8sIDEyMiAvKiBaICAgICovLCA5MSAvKiBbICAgICovLAorICAgIDkyIC8qIFwgICAgKi8sICA5MyAvKiBdICAgICovLCAgOTQgLyogXiAgICAqLywgIDk1IC8qIF8gICAgKi8sCisgICAgOTYgLyogYCAgICAqLywgIDk3IC8qIGEgICAgKi8sICA5OCAvKiBiICAgICovLCAgOTkgLyogYyAgICAqLywKKyAgICAxMDAgLyogZCAgICAqLywgMTAxIC8qIGUgICAgKi8sIDEwMiAvKiBmICAgICovLCAxMDMgLyogZyAgICAqLywKKyAgICAxMDQgLyogaCAgICAqLywgMTA1IC8qIGkgICAgKi8sIDEwNiAvKiBqICAgICovLCAxMDcgLyogayAgICAqLywKKyAgICAxMDggLyogbCAgICAqLywgMTA5IC8qIG0gICAgKi8sIDExMCAvKiBuICAgICovLCAxMTEgLyogbyAgICAqLywKKyAgICAxMTIgLyogcCAgICAqLywgMTEzIC8qIHEgICAgKi8sIDExNCAvKiByICAgICovLCAxMTUgLyogcyAgICAqLywKKyAgICAxMTYgLyogdCAgICAqLywgMTE3IC8qIHUgICAgKi8sIDExOCAvKiB2ICAgICovLCAxMTkgLyogdyAgICAqLywKKyAgICAxMjAgLyogeCAgICAqLywgMTIxIC8qIHkgICAgKi8sIDEyMiAvKiB6ICAgICovLCAxMjMgLyogeyAgICAqLywKKyAgICAxMjQgLyogfCAgICAqLywgMTI1IC8qIH0gICAgKi8sIDEyNiAvKiB+ICAgICovLCAxMjcgLyogREVMICAqLywKKyAgICAxMjggLyogMHg4MCAqLywgMTI5IC8qIDB4ODEgKi8sIDEzMCAvKiAweDgyICovLCAxMzEgLyogMHg4MyAqLywKKyAgICAxMzIgLyogMHg4NCAqLywgMTMzIC8qIDB4ODUgKi8sIDEzNCAvKiAweDg2ICovLCAxMzUgLyogMHg4NyAqLywKKyAgICAxMzYgLyogMHg4OCAqLywgMTM3IC8qIDB4ODkgKi8sIDEzOCAvKiAweDhhICovLCAxMzkgLyogMHg4YiAqLywKKyAgICAxNDAgLyogMHg4YyAqLywgMTQxIC8qIDB4OGQgKi8sIDE0MiAvKiAweDhlICovLCAxNDMgLyogMHg4ZiAqLywKKyAgICAxNDQgLyogMHg5MCAqLywgMTQ1IC8qIDB4OTEgKi8sIDE0NiAvKiAweDkyICovLCAxNDcgLyogMHg5MyAqLywKKyAgICAxNDggLyogMHg5NCAqLywgMTQ5IC8qIDB4OTUgKi8sIDE1MCAvKiAweDk2ICovLCAxNTEgLyogMHg5NyAqLywKKyAgICAxNTIgLyogMHg5OCAqLywgMTUzIC8qIDB4OTkgKi8sIDE1NCAvKiAweDlhICovLCAxNTUgLyogMHg5YiAqLywKKyAgICAxNTYgLyogMHg5YyAqLywgMTU3IC8qIDB4OWQgKi8sIDE1OCAvKiAweDllICovLCAxNTkgLyogMHg5ZiAqLywKKyAgICAxNjAgLyogMHhhMCAqLywgMTYxIC8qIDB4YTEgKi8sIDE2MiAvKiAweGEyICovLCAxNjMgLyogMHhhMyAqLywKKyAgICAxNjQgLyogMHhhNCAqLywgMTY1IC8qIDB4YTUgKi8sIDE2NiAvKiAweGE2ICovLCAxNjcgLyogMHhhNyAqLywKKyAgICAxNjggLyogMHhhOCAqLywgMTY5IC8qIDB4YTkgKi8sIDE3MCAvKiAweGFhICovLCAxNzEgLyogMHhhYiAqLywKKyAgICAxNzIgLyogMHhhYyAqLywgMTczIC8qIDB4YWQgKi8sIDE3NCAvKiAweGFlICovLCAxNzUgLyogMHhhZiAqLywKKyAgICAxNzYgLyogMHhiMCAqLywgMTc3IC8qIDB4YjEgKi8sIDE3OCAvKiAweGIyICovLCAxNzkgLyogMHhiMyAqLywKKyAgICAxODAgLyogMHhiNCAqLywgMTgxIC8qIDB4YjUgKi8sIDE4MiAvKiAweGI2ICovLCAxODMgLyogMHhiNyAqLywKKyAgICAxODQgLyogMHhiOCAqLywgMTg1IC8qIDB4YjkgKi8sIDE4NiAvKiAweGJhICovLCAxODcgLyogMHhiYiAqLywKKyAgICAxODggLyogMHhiYyAqLywgMTg5IC8qIDB4YmQgKi8sIDE5MCAvKiAweGJlICovLCAxOTEgLyogMHhiZiAqLywKKyAgICAxOTIgLyogMHhjMCAqLywgMTkzIC8qIDB4YzEgKi8sIDE5NCAvKiAweGMyICovLCAxOTUgLyogMHhjMyAqLywKKyAgICAxOTYgLyogMHhjNCAqLywgMTk3IC8qIDB4YzUgKi8sIDE5OCAvKiAweGM2ICovLCAxOTkgLyogMHhjNyAqLywKKyAgICAyMDAgLyogMHhjOCAqLywgMjAxIC8qIDB4YzkgKi8sIDIwMiAvKiAweGNhICovLCAyMDMgLyogMHhjYiAqLywKKyAgICAyMDQgLyogMHhjYyAqLywgMjA1IC8qIDB4Y2QgKi8sIDIwNiAvKiAweGNlICovLCAyMDcgLyogMHhjZiAqLywKKyAgICAyMDggLyogMHhkMCAqLywgMjA5IC8qIDB4ZDEgKi8sIDIxMCAvKiAweGQyICovLCAyMTEgLyogMHhkMyAqLywKKyAgICAyMTIgLyogMHhkNCAqLywgMjEzIC8qIDB4ZDUgKi8sIDIxNCAvKiAweGQ2ICovLCAyMTUgLyogMHhkNyAqLywKKyAgICAyMTYgLyogMHhkOCAqLywgMjE3IC8qIDB4ZDkgKi8sIDIxOCAvKiAweGRhICovLCAyMTkgLyogMHhkYiAqLywKKyAgICAyMjAgLyogMHhkYyAqLywgMjIxIC8qIDB4ZGQgKi8sIDIyMiAvKiAweGRlICovLCAyMjMgLyogMHhkZiAqLywKKyAgICAyMjQgLyogMHhlMCAqLywgMjI1IC8qIDB4ZTEgKi8sIDIyNiAvKiAweGUyICovLCAyMjcgLyogMHhlMyAqLywKKyAgICAyMjggLyogMHhlNCAqLywgMjI5IC8qIDB4ZTUgKi8sIDIzMCAvKiAweGU2ICovLCAyMzEgLyogMHhlNyAqLywKKyAgICAyMzIgLyogMHhlOCAqLywgMjMzIC8qIDB4ZTkgKi8sIDIzNCAvKiAweGVhICovLCAyMzUgLyogMHhlYiAqLywKKyAgICAyMzYgLyogMHhlYyAqLywgMjM3IC8qIDB4ZWQgKi8sIDIzOCAvKiAweGVlICovLCAyMzkgLyogMHhlZiAqLywKKyAgICAyNDAgLyogMHhmMCAqLywgMjQxIC8qIDB4ZjEgKi8sIDI0MiAvKiAweGYyICovLCAyNDMgLyogMHhmMyAqLywKKyAgICAyNDQgLyogMHhmNCAqLywgMjQ1IC8qIDB4ZjUgKi8sIDI0NiAvKiAweGY2ICovLCAyNDcgLyogMHhmNyAqLywKKyAgICAyNDggLyogMHhmOCAqLywgMjQ5IC8qIDB4ZjkgKi8sIDI1MCAvKiAweGZhICovLCAyNTEgLyogMHhmYiAqLywKKyAgICAyNTIgLyogMHhmYyAqLywgMjUzIC8qIDB4ZmQgKi8sIDI1NCAvKiAweGZlICovLCAyNTUgLyogMHhmZiAqLywKK307CisKK3ZvaWQgbmdodHRwMl9kb3duY2FzZSh1aW50OF90ICpzLCBzaXplX3QgbGVuKSB7CisgIHNpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICBzW2ldID0gRE9XTkNBU0VfVEJMW3NbaV1dOworICB9Cit9CisKKy8qCisgKiAgIGxvY2FsX3dpbmRvd19zaXplCisgKiAgIF4gICoKKyAqICAgfCAgKiAgICByZWN2X3dpbmRvd19zaXplCisgKiAgIHwgICogICogXgorICogICB8ICAqICAqIHwKKyAqICAwKysrKysrKysrCisgKiAgIHwgICogICogICBcCisgKiAgIHwgICogICogICB8IFRoaXMgcmFnZSBpcyBoaWRkZW4gaW4gZmxvdyBjb250cm9sLiAgQnV0IGl0IG11c3QgYmUKKyAqICAgdiAgKiAgKiAgIC8ga2VwdCBpbiBvcmRlciB0byByZXN0b3JlIGl0IHdoZW4gd2luZG93IHNpemUgaXMgZW5sYXJnZWQuCisgKiAgIHJlY3ZfcmVkdWN0aW9uCisgKiAgICgrIGZvciBuZWdhdGl2ZSBkaXJlY3Rpb24pCisgKgorICogICByZWN2X3dpbmRvd19zaXplIGNvdWxkIGJlIG5lZ2F0aXZlIGlmIHdlIGRlY3JlYXNlCisgKiAgIGxvY2FsX3dpbmRvd19zaXplIG1vcmUgdGhhbiByZWN2X3dpbmRvd19zaXplOgorICoKKyAqICAgbG9jYWxfd2luZG93X3NpemUKKyAqICAgXiAgKgorICogICB8ICAqCisgKiAgIHwgICoKKyAqICAgMCsrKysrKysrCisgKiAgIHwgICogICAgXiByZWN2X3dpbmRvd19zaXplIChuZWdhdGl2ZSkKKyAqICAgfCAgKiAgICB8CisgKiAgIHYgICogICoKKyAqICAgcmVjdl9yZWR1Y3Rpb24KKyAqLworaW50IG5naHR0cDJfYWRqdXN0X2xvY2FsX3dpbmRvd19zaXplKGludDMyX3QgKmxvY2FsX3dpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpyZWN2X3dpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpyZWN2X3JlZHVjdGlvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqZGVsdGFfcHRyKSB7CisgIGlmICgqZGVsdGFfcHRyID4gMCkgeworICAgIGludDMyX3QgcmVjdl9yZWR1Y3Rpb25fZGVsdGE7CisgICAgaW50MzJfdCBkZWx0YTsKKyAgICBpbnQzMl90IG5ld19yZWN2X3dpbmRvd19zaXplID0KKyAgICAgICAgbmdodHRwMl9tYXgoMCwgKnJlY3Zfd2luZG93X3NpemVfcHRyKSAtICpkZWx0YV9wdHI7CisKKyAgICBpZiAobmV3X3JlY3Zfd2luZG93X3NpemUgPj0gMCkgeworICAgICAgKnJlY3Zfd2luZG93X3NpemVfcHRyID0gbmV3X3JlY3Zfd2luZG93X3NpemU7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBkZWx0YSA9IC1uZXdfcmVjdl93aW5kb3dfc2l6ZTsKKworICAgIC8qIFRoZSBkZWx0YSBzaXplIGlzIHN0cmljdGx5IG1vcmUgdGhhbiByZWNlaXZlZCBieXRlcy4gSW5jcmVhc2UKKyAgICAgICBsb2NhbF93aW5kb3dfc2l6ZSBieSB0aGF0IGRpZmZlcmVuY2UgfGRlbHRhfC4gKi8KKyAgICBpZiAoKmxvY2FsX3dpbmRvd19zaXplX3B0ciA+IE5HSFRUUDJfTUFYX1dJTkRPV19TSVpFIC0gZGVsdGEpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9GTE9XX0NPTlRST0w7CisgICAgfQorICAgICpsb2NhbF93aW5kb3dfc2l6ZV9wdHIgKz0gZGVsdGE7CisgICAgLyogSWYgdGhlcmUgaXMgcmVjdl9yZWR1Y3Rpb24gZHVlIHRvIGVhcmxpZXIgd2luZG93X3NpemUKKyAgICAgICByZWR1Y3Rpb24sIHdlIGhhdmUgdG8gYWRqdXN0IGl0IHRvby4gKi8KKyAgICByZWN2X3JlZHVjdGlvbl9kZWx0YSA9IG5naHR0cDJfbWluKCpyZWN2X3JlZHVjdGlvbl9wdHIsIGRlbHRhKTsKKyAgICAqcmVjdl9yZWR1Y3Rpb25fcHRyIC09IHJlY3ZfcmVkdWN0aW9uX2RlbHRhOworICAgIGlmICgqcmVjdl93aW5kb3dfc2l6ZV9wdHIgPCAwKSB7CisgICAgICAqcmVjdl93aW5kb3dfc2l6ZV9wdHIgKz0gcmVjdl9yZWR1Y3Rpb25fZGVsdGE7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIElmICpyZWN2X3dpbmRvd19zaXplX3B0ciA+IDAsIHRoZW4gdGhvc2UgYnl0ZXMgYXJlIGdvaW5nIHRvCisgICAgICAgICBiZSByZXR1cm5lZCB0byB0aGUgcmVtb3RlIHBlZXIgKGJ5IFdJTkRPV19VUERBVEUgd2l0aCB0aGUKKyAgICAgICAgIGFkanVzdGVkICpkZWx0YV9wdHIpLCBzbyBpdCBpcyBlZmZlY3RpdmVseSAwIG5vdy4gIFdlIHNldCB0bworICAgICAgICAgKnJlY3ZfcmVkdWN0aW9uX2RlbHRhLCBiZWNhdXNlIGNhbGxlciBkb2VzIG5vdCB0YWtlIGludG8KKyAgICAgICAgIGFjY291bnQgaXQgaW4gKmRlbHRhX3B0ci4gKi8KKyAgICAgICpyZWN2X3dpbmRvd19zaXplX3B0ciA9IHJlY3ZfcmVkdWN0aW9uX2RlbHRhOworICAgIH0KKyAgICAvKiByZWN2X3JlZHVjdGlvbl9kZWx0YSBtdXN0IGJlIHBhaWQgZnJvbSAqZGVsdGFfcHRyLCBzaW5jZSBpdCB3YXMKKyAgICAgICBhZGRlZCBpbiB3aW5kb3cgc2l6ZSByZWR1Y3Rpb24gKHNlZSBiZWxvdykuICovCisgICAgKmRlbHRhX3B0ciAtPSByZWN2X3JlZHVjdGlvbl9kZWx0YTsKKworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKCpsb2NhbF93aW5kb3dfc2l6ZV9wdHIgKyAqZGVsdGFfcHRyIDwgMCB8fAorICAgICAgKnJlY3Zfd2luZG93X3NpemVfcHRyIDwgSU5UMzJfTUlOIC0gKmRlbHRhX3B0ciB8fAorICAgICAgKnJlY3ZfcmVkdWN0aW9uX3B0ciA+IElOVDMyX01BWCArICpkZWx0YV9wdHIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MOworICB9CisgIC8qIERlY3JlYXNpbmcgbG9jYWwgd2luZG93IHNpemUuIE5vdGUgdGhhdCB3ZSBhY2hpZXZlIHRoaXMgd2l0aG91dAorICAgICBub3RpY2luZyB0byB0aGUgcmVtb3RlIHBlZXIuIFRvIGRvIHRoaXMsIHdlIGN1dAorICAgICByZWN2X3dpbmRvd19zaXplIGJ5IC1kZWx0YS4gVGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IHNlbmQKKyAgICAgV0lORE9XX1VQREFURSBmb3IgLWRlbHRhIGJ5dGVzLiAqLworICAqbG9jYWxfd2luZG93X3NpemVfcHRyICs9ICpkZWx0YV9wdHI7CisgICpyZWN2X3dpbmRvd19zaXplX3B0ciArPSAqZGVsdGFfcHRyOworICAqcmVjdl9yZWR1Y3Rpb25fcHRyIC09ICpkZWx0YV9wdHI7CisgICpkZWx0YV9wdHIgPSAwOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9pbmNyZWFzZV9sb2NhbF93aW5kb3dfc2l6ZShpbnQzMl90ICpsb2NhbF93aW5kb3dfc2l6ZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpyZWN2X3dpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnJlY3ZfcmVkdWN0aW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKmRlbHRhX3B0cikgeworICBpbnQzMl90IHJlY3ZfcmVkdWN0aW9uX2RlbHRhOworICBpbnQzMl90IGRlbHRhOworCisgIGRlbHRhID0gKmRlbHRhX3B0cjsKKworICBhc3NlcnQoZGVsdGEgPj0gMCk7CisKKyAgLyogVGhlIGRlbHRhIHNpemUgaXMgc3RyaWN0bHkgbW9yZSB0aGFuIHJlY2VpdmVkIGJ5dGVzLiBJbmNyZWFzZQorICAgICBsb2NhbF93aW5kb3dfc2l6ZSBieSB0aGF0IGRpZmZlcmVuY2UgfGRlbHRhfC4gKi8KKyAgaWYgKCpsb2NhbF93aW5kb3dfc2l6ZV9wdHIgPiBOR0hUVFAyX01BWF9XSU5ET1dfU0laRSAtIGRlbHRhKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTDsKKyAgfQorCisgICpsb2NhbF93aW5kb3dfc2l6ZV9wdHIgKz0gZGVsdGE7CisgIC8qIElmIHRoZXJlIGlzIHJlY3ZfcmVkdWN0aW9uIGR1ZSB0byBlYXJsaWVyIHdpbmRvd19zaXplCisgICAgIHJlZHVjdGlvbiwgd2UgaGF2ZSB0byBhZGp1c3QgaXQgdG9vLiAqLworICByZWN2X3JlZHVjdGlvbl9kZWx0YSA9IG5naHR0cDJfbWluKCpyZWN2X3JlZHVjdGlvbl9wdHIsIGRlbHRhKTsKKyAgKnJlY3ZfcmVkdWN0aW9uX3B0ciAtPSByZWN2X3JlZHVjdGlvbl9kZWx0YTsKKworICAqcmVjdl93aW5kb3dfc2l6ZV9wdHIgKz0gcmVjdl9yZWR1Y3Rpb25fZGVsdGE7CisKKyAgLyogcmVjdl9yZWR1Y3Rpb25fZGVsdGEgbXVzdCBiZSBwYWlkIGZyb20gKmRlbHRhX3B0ciwgc2luY2UgaXQgd2FzCisgICAgIGFkZGVkIGluIHdpbmRvdyBzaXplIHJlZHVjdGlvbiAoc2VlIGJlbG93KS4gKi8KKyAgKmRlbHRhX3B0ciAtPSByZWN2X3JlZHVjdGlvbl9kZWx0YTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2hvdWxkX3NlbmRfd2luZG93X3VwZGF0ZShpbnQzMl90IGxvY2FsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlY3Zfd2luZG93X3NpemUpIHsKKyAgcmV0dXJuIHJlY3Zfd2luZG93X3NpemUgPiAwICYmIHJlY3Zfd2luZG93X3NpemUgPj0gbG9jYWxfd2luZG93X3NpemUgLyAyOworfQorCitjb25zdCBjaGFyICpuZ2h0dHAyX3N0cmVycm9yKGludCBlcnJvcl9jb2RlKSB7CisgIHN3aXRjaCAoZXJyb3JfY29kZSkgeworICBjYXNlIDA6CisgICAgcmV0dXJuICJTdWNjZXNzIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOgorICAgIHJldHVybiAiSW52YWxpZCBhcmd1bWVudCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SOgorICAgIHJldHVybiAiT3V0IG9mIGJ1ZmZlciBzcGFjZSI7CisgIGNhc2UgTkdIVFRQMl9FUlJfVU5TVVBQT1JURURfVkVSU0lPTjoKKyAgICByZXR1cm4gIlVuc3VwcG9ydGVkIFNQRFkgdmVyc2lvbiI7CisgIGNhc2UgTkdIVFRQMl9FUlJfV09VTERCTE9DSzoKKyAgICByZXR1cm4gIk9wZXJhdGlvbiB3b3VsZCBibG9jayI7CisgIGNhc2UgTkdIVFRQMl9FUlJfUFJPVE86CisgICAgcmV0dXJuICJQcm90b2NvbCBlcnJvciI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSU5WQUxJRF9GUkFNRToKKyAgICByZXR1cm4gIkludmFsaWQgZnJhbWUgb2N0ZXRzIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9FT0Y6CisgICAgcmV0dXJuICJFT0YiOworICBjYXNlIE5HSFRUUDJfRVJSX0RFRkVSUkVEOgorICAgIHJldHVybiAiRGF0YSB0cmFuc2ZlciBkZWZlcnJlZCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfU1RSRUFNX0lEX05PVF9BVkFJTEFCTEU6CisgICAgcmV0dXJuICJObyBtb3JlIFN0cmVhbSBJRCBhdmFpbGFibGUiOworICBjYXNlIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQ6CisgICAgcmV0dXJuICJTdHJlYW0gd2FzIGFscmVhZHkgY2xvc2VkIG9yIGludmFsaWQiOworICBjYXNlIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HOgorICAgIHJldHVybiAiU3RyZWFtIGlzIGNsb3NpbmciOworICBjYXNlIE5HSFRUUDJfRVJSX1NUUkVBTV9TSFVUX1dSOgorICAgIHJldHVybiAiVGhlIHRyYW5zbWlzc2lvbiBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBzdHJlYW0iOworICBjYXNlIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX0lEOgorICAgIHJldHVybiAiU3RyZWFtIElEIGlzIGludmFsaWQiOworICBjYXNlIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX1NUQVRFOgorICAgIHJldHVybiAiSW52YWxpZCBzdHJlYW0gc3RhdGUiOworICBjYXNlIE5HSFRUUDJfRVJSX0RFRkVSUkVEX0RBVEFfRVhJU1Q6CisgICAgcmV0dXJuICJBbm90aGVyIERBVEEgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBkZWZlcnJlZCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfU1RBUlRfU1RSRUFNX05PVF9BTExPV0VEOgorICAgIHJldHVybiAicmVxdWVzdCBIRUFERVJTIGlzIG5vdCBhbGxvd2VkIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9HT0FXQVlfQUxSRUFEWV9TRU5UOgorICAgIHJldHVybiAiR09BV0FZIGhhcyBhbHJlYWR5IGJlZW4gc2VudCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSU5WQUxJRF9IRUFERVJfQkxPQ0s6CisgICAgcmV0dXJuICJJbnZhbGlkIGhlYWRlciBibG9jayI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURToKKyAgICByZXR1cm4gIkludmFsaWQgc3RhdGUiOworICBjYXNlIE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkU6CisgICAgcmV0dXJuICJUaGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQgZHVlIHRvIHRoZSB0ZW1wb3JhbCBlcnJvciI7CisgIGNhc2UgTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUjoKKyAgICByZXR1cm4gIlRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGlzIGludmFsaWQiOworICBjYXNlIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOgorICAgIHJldHVybiAiSGVhZGVyIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZXJyb3IiOworICBjYXNlIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTDoKKyAgICByZXR1cm4gIkZsb3cgY29udHJvbCBlcnJvciI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSU5TVUZGX0JVRlNJWkU6CisgICAgcmV0dXJuICJJbnN1ZmZpY2llbnQgYnVmZmVyIHNpemUgZ2l2ZW4gdG8gZnVuY3Rpb24iOworICBjYXNlIE5HSFRUUDJfRVJSX1BBVVNFOgorICAgIHJldHVybiAiQ2FsbGJhY2sgd2FzIHBhdXNlZCBieSB0aGUgYXBwbGljYXRpb24iOworICBjYXNlIE5HSFRUUDJfRVJSX1RPT19NQU5ZX0lORkxJR0hUX1NFVFRJTkdTOgorICAgIHJldHVybiAiVG9vIG1hbnkgaW5mbGlnaHQgU0VUVElOR1MiOworICBjYXNlIE5HSFRUUDJfRVJSX1BVU0hfRElTQUJMRUQ6CisgICAgcmV0dXJuICJTZXJ2ZXIgcHVzaCBpcyBkaXNhYmxlZCBieSBwZWVyIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9EQVRBX0VYSVNUOgorICAgIHJldHVybiAiREFUQSBvciBIRUFERVJTIGZyYW1lIGhhcyBhbHJlYWR5IGJlZW4gc3VibWl0dGVkIGZvciB0aGUgc3RyZWFtIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkc6CisgICAgcmV0dXJuICJUaGUgY3VycmVudCBzZXNzaW9uIGlzIGNsb3NpbmciOworICBjYXNlIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOgorICAgIHJldHVybiAiSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB3YXMgcmVjZWl2ZWQiOworICBjYXNlIE5HSFRUUDJfRVJSX0hUVFBfTUVTU0FHSU5HOgorICAgIHJldHVybiAiVmlvbGF0aW9uIGluIEhUVFAgbWVzc2FnaW5nIHJ1bGUiOworICBjYXNlIE5HSFRUUDJfRVJSX1JFRlVTRURfU1RSRUFNOgorICAgIHJldHVybiAiU3RyZWFtIHdhcyByZWZ1c2VkIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9JTlRFUk5BTDoKKyAgICByZXR1cm4gIkludGVybmFsIGVycm9yIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9DQU5DRUw6CisgICAgcmV0dXJuICJDYW5jZWwiOworICBjYXNlIE5HSFRUUDJfRVJSX1NFVFRJTkdTX0VYUEVDVEVEOgorICAgIHJldHVybiAiV2hlbiBhIGxvY2FsIGVuZHBvaW50IGV4cGVjdHMgdG8gcmVjZWl2ZSBTRVRUSU5HUyBmcmFtZSwgaXQgIgorICAgICAgICAgICAicmVjZWl2ZXMgYW4gb3RoZXIgdHlwZSBvZiBmcmFtZSI7CisgIGNhc2UgTkdIVFRQMl9FUlJfTk9NRU06CisgICAgcmV0dXJuICJPdXQgb2YgbWVtb3J5IjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOgorICAgIHJldHVybiAiVGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9CQURfQ0xJRU5UX01BR0lDOgorICAgIHJldHVybiAiUmVjZWl2ZWQgYmFkIGNsaWVudCBtYWdpYyBieXRlIHN0cmluZyI7CisgIGNhc2UgTkdIVFRQMl9FUlJfRkxPT0RFRDoKKyAgICByZXR1cm4gIkZsb29kaW5nIHdhcyBkZXRlY3RlZCBpbiB0aGlzIEhUVFAvMiBzZXNzaW9uLCBhbmQgaXQgbXVzdCBiZSAiCisgICAgICAgICAgICJjbG9zZWQiOworICBkZWZhdWx0OgorICAgIHJldHVybiAiVW5rbm93biBlcnJvciBjb2RlIjsKKyAgfQorfQorCisvKiBHZW5lcmF0ZWQgYnkgZ2Vubm1jaGFydGJsLnB5ICovCitzdGF0aWMgY29uc3QgaW50IFZBTElEX0hEX05BTUVfQ0hBUlNbXSA9IHsKKyAgICAwIC8qIE5VTCAgKi8sIDAgLyogU09IICAqLywgMCAvKiBTVFggICovLCAwIC8qIEVUWCAgKi8sCisgICAgMCAvKiBFT1QgICovLCAwIC8qIEVOUSAgKi8sIDAgLyogQUNLICAqLywgMCAvKiBCRUwgICovLAorICAgIDAgLyogQlMgICAqLywgMCAvKiBIVCAgICovLCAwIC8qIExGICAgKi8sIDAgLyogVlQgICAqLywKKyAgICAwIC8qIEZGICAgKi8sIDAgLyogQ1IgICAqLywgMCAvKiBTTyAgICovLCAwIC8qIFNJICAgKi8sCisgICAgMCAvKiBETEUgICovLCAwIC8qIERDMSAgKi8sIDAgLyogREMyICAqLywgMCAvKiBEQzMgICovLAorICAgIDAgLyogREM0ICAqLywgMCAvKiBOQUsgICovLCAwIC8qIFNZTiAgKi8sIDAgLyogRVRCICAqLywKKyAgICAwIC8qIENBTiAgKi8sIDAgLyogRU0gICAqLywgMCAvKiBTVUIgICovLCAwIC8qIEVTQyAgKi8sCisgICAgMCAvKiBGUyAgICovLCAwIC8qIEdTICAgKi8sIDAgLyogUlMgICAqLywgMCAvKiBVUyAgICovLAorICAgIDAgLyogU1BDICAqLywgMSAvKiAhICAgICovLCAwIC8qICIgICAgKi8sIDEgLyogIyAgICAqLywKKyAgICAxIC8qICQgICAgKi8sIDEgLyogJSAgICAqLywgMSAvKiAmICAgICovLCAxIC8qICcgICAgKi8sCisgICAgMCAvKiAoICAgICovLCAwIC8qICkgICAgKi8sIDEgLyogKiAgICAqLywgMSAvKiArICAgICovLAorICAgIDAgLyogLCAgICAqLywgMSAvKiAtICAgICovLCAxIC8qIC4gICAgKi8sIDAgLyogLyAgICAqLywKKyAgICAxIC8qIDAgICAgKi8sIDEgLyogMSAgICAqLywgMSAvKiAyICAgICovLCAxIC8qIDMgICAgKi8sCisgICAgMSAvKiA0ICAgICovLCAxIC8qIDUgICAgKi8sIDEgLyogNiAgICAqLywgMSAvKiA3ICAgICovLAorICAgIDEgLyogOCAgICAqLywgMSAvKiA5ICAgICovLCAwIC8qIDogICAgKi8sIDAgLyogOyAgICAqLywKKyAgICAwIC8qIDwgICAgKi8sIDAgLyogPSAgICAqLywgMCAvKiA+ICAgICovLCAwIC8qID8gICAgKi8sCisgICAgMCAvKiBAICAgICovLCAwIC8qIEEgICAgKi8sIDAgLyogQiAgICAqLywgMCAvKiBDICAgICovLAorICAgIDAgLyogRCAgICAqLywgMCAvKiBFICAgICovLCAwIC8qIEYgICAgKi8sIDAgLyogRyAgICAqLywKKyAgICAwIC8qIEggICAgKi8sIDAgLyogSSAgICAqLywgMCAvKiBKICAgICovLCAwIC8qIEsgICAgKi8sCisgICAgMCAvKiBMICAgICovLCAwIC8qIE0gICAgKi8sIDAgLyogTiAgICAqLywgMCAvKiBPICAgICovLAorICAgIDAgLyogUCAgICAqLywgMCAvKiBRICAgICovLCAwIC8qIFIgICAgKi8sIDAgLyogUyAgICAqLywKKyAgICAwIC8qIFQgICAgKi8sIDAgLyogVSAgICAqLywgMCAvKiBWICAgICovLCAwIC8qIFcgICAgKi8sCisgICAgMCAvKiBYICAgICovLCAwIC8qIFkgICAgKi8sIDAgLyogWiAgICAqLywgMCAvKiBbICAgICovLAorICAgIDAgLyogXCAgICAqLywgMCAvKiBdICAgICovLCAxIC8qIF4gICAgKi8sIDEgLyogXyAgICAqLywKKyAgICAxIC8qIGAgICAgKi8sIDEgLyogYSAgICAqLywgMSAvKiBiICAgICovLCAxIC8qIGMgICAgKi8sCisgICAgMSAvKiBkICAgICovLCAxIC8qIGUgICAgKi8sIDEgLyogZiAgICAqLywgMSAvKiBnICAgICovLAorICAgIDEgLyogaCAgICAqLywgMSAvKiBpICAgICovLCAxIC8qIGogICAgKi8sIDEgLyogayAgICAqLywKKyAgICAxIC8qIGwgICAgKi8sIDEgLyogbSAgICAqLywgMSAvKiBuICAgICovLCAxIC8qIG8gICAgKi8sCisgICAgMSAvKiBwICAgICovLCAxIC8qIHEgICAgKi8sIDEgLyogciAgICAqLywgMSAvKiBzICAgICovLAorICAgIDEgLyogdCAgICAqLywgMSAvKiB1ICAgICovLCAxIC8qIHYgICAgKi8sIDEgLyogdyAgICAqLywKKyAgICAxIC8qIHggICAgKi8sIDEgLyogeSAgICAqLywgMSAvKiB6ICAgICovLCAwIC8qIHsgICAgKi8sCisgICAgMSAvKiB8ICAgICovLCAwIC8qIH0gICAgKi8sIDEgLyogfiAgICAqLywgMCAvKiBERUwgICovLAorICAgIDAgLyogMHg4MCAqLywgMCAvKiAweDgxICovLCAwIC8qIDB4ODIgKi8sIDAgLyogMHg4MyAqLywKKyAgICAwIC8qIDB4ODQgKi8sIDAgLyogMHg4NSAqLywgMCAvKiAweDg2ICovLCAwIC8qIDB4ODcgKi8sCisgICAgMCAvKiAweDg4ICovLCAwIC8qIDB4ODkgKi8sIDAgLyogMHg4YSAqLywgMCAvKiAweDhiICovLAorICAgIDAgLyogMHg4YyAqLywgMCAvKiAweDhkICovLCAwIC8qIDB4OGUgKi8sIDAgLyogMHg4ZiAqLywKKyAgICAwIC8qIDB4OTAgKi8sIDAgLyogMHg5MSAqLywgMCAvKiAweDkyICovLCAwIC8qIDB4OTMgKi8sCisgICAgMCAvKiAweDk0ICovLCAwIC8qIDB4OTUgKi8sIDAgLyogMHg5NiAqLywgMCAvKiAweDk3ICovLAorICAgIDAgLyogMHg5OCAqLywgMCAvKiAweDk5ICovLCAwIC8qIDB4OWEgKi8sIDAgLyogMHg5YiAqLywKKyAgICAwIC8qIDB4OWMgKi8sIDAgLyogMHg5ZCAqLywgMCAvKiAweDllICovLCAwIC8qIDB4OWYgKi8sCisgICAgMCAvKiAweGEwICovLCAwIC8qIDB4YTEgKi8sIDAgLyogMHhhMiAqLywgMCAvKiAweGEzICovLAorICAgIDAgLyogMHhhNCAqLywgMCAvKiAweGE1ICovLCAwIC8qIDB4YTYgKi8sIDAgLyogMHhhNyAqLywKKyAgICAwIC8qIDB4YTggKi8sIDAgLyogMHhhOSAqLywgMCAvKiAweGFhICovLCAwIC8qIDB4YWIgKi8sCisgICAgMCAvKiAweGFjICovLCAwIC8qIDB4YWQgKi8sIDAgLyogMHhhZSAqLywgMCAvKiAweGFmICovLAorICAgIDAgLyogMHhiMCAqLywgMCAvKiAweGIxICovLCAwIC8qIDB4YjIgKi8sIDAgLyogMHhiMyAqLywKKyAgICAwIC8qIDB4YjQgKi8sIDAgLyogMHhiNSAqLywgMCAvKiAweGI2ICovLCAwIC8qIDB4YjcgKi8sCisgICAgMCAvKiAweGI4ICovLCAwIC8qIDB4YjkgKi8sIDAgLyogMHhiYSAqLywgMCAvKiAweGJiICovLAorICAgIDAgLyogMHhiYyAqLywgMCAvKiAweGJkICovLCAwIC8qIDB4YmUgKi8sIDAgLyogMHhiZiAqLywKKyAgICAwIC8qIDB4YzAgKi8sIDAgLyogMHhjMSAqLywgMCAvKiAweGMyICovLCAwIC8qIDB4YzMgKi8sCisgICAgMCAvKiAweGM0ICovLCAwIC8qIDB4YzUgKi8sIDAgLyogMHhjNiAqLywgMCAvKiAweGM3ICovLAorICAgIDAgLyogMHhjOCAqLywgMCAvKiAweGM5ICovLCAwIC8qIDB4Y2EgKi8sIDAgLyogMHhjYiAqLywKKyAgICAwIC8qIDB4Y2MgKi8sIDAgLyogMHhjZCAqLywgMCAvKiAweGNlICovLCAwIC8qIDB4Y2YgKi8sCisgICAgMCAvKiAweGQwICovLCAwIC8qIDB4ZDEgKi8sIDAgLyogMHhkMiAqLywgMCAvKiAweGQzICovLAorICAgIDAgLyogMHhkNCAqLywgMCAvKiAweGQ1ICovLCAwIC8qIDB4ZDYgKi8sIDAgLyogMHhkNyAqLywKKyAgICAwIC8qIDB4ZDggKi8sIDAgLyogMHhkOSAqLywgMCAvKiAweGRhICovLCAwIC8qIDB4ZGIgKi8sCisgICAgMCAvKiAweGRjICovLCAwIC8qIDB4ZGQgKi8sIDAgLyogMHhkZSAqLywgMCAvKiAweGRmICovLAorICAgIDAgLyogMHhlMCAqLywgMCAvKiAweGUxICovLCAwIC8qIDB4ZTIgKi8sIDAgLyogMHhlMyAqLywKKyAgICAwIC8qIDB4ZTQgKi8sIDAgLyogMHhlNSAqLywgMCAvKiAweGU2ICovLCAwIC8qIDB4ZTcgKi8sCisgICAgMCAvKiAweGU4ICovLCAwIC8qIDB4ZTkgKi8sIDAgLyogMHhlYSAqLywgMCAvKiAweGViICovLAorICAgIDAgLyogMHhlYyAqLywgMCAvKiAweGVkICovLCAwIC8qIDB4ZWUgKi8sIDAgLyogMHhlZiAqLywKKyAgICAwIC8qIDB4ZjAgKi8sIDAgLyogMHhmMSAqLywgMCAvKiAweGYyICovLCAwIC8qIDB4ZjMgKi8sCisgICAgMCAvKiAweGY0ICovLCAwIC8qIDB4ZjUgKi8sIDAgLyogMHhmNiAqLywgMCAvKiAweGY3ICovLAorICAgIDAgLyogMHhmOCAqLywgMCAvKiAweGY5ICovLCAwIC8qIDB4ZmEgKi8sIDAgLyogMHhmYiAqLywKKyAgICAwIC8qIDB4ZmMgKi8sIDAgLyogMHhmZCAqLywgMCAvKiAweGZlICovLCAwIC8qIDB4ZmYgKi8KK307CisKK2ludCBuZ2h0dHAyX2NoZWNrX2hlYWRlcl9uYW1lKGNvbnN0IHVpbnQ4X3QgKm5hbWUsIHNpemVfdCBsZW4pIHsKKyAgY29uc3QgdWludDhfdCAqbGFzdDsKKyAgaWYgKGxlbiA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCpuYW1lID09ICc6JykgeworICAgIGlmIChsZW4gPT0gMSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICsrbmFtZTsKKyAgICAtLWxlbjsKKyAgfQorICBmb3IgKGxhc3QgPSBuYW1lICsgbGVuOyBuYW1lICE9IGxhc3Q7ICsrbmFtZSkgeworICAgIGlmICghVkFMSURfSERfTkFNRV9DSEFSU1sqbmFtZV0pIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworLyogR2VuZXJhdGVkIGJ5IGdlbnZjaGFydGJsLnB5ICovCitzdGF0aWMgY29uc3QgaW50IFZBTElEX0hEX1ZBTFVFX0NIQVJTW10gPSB7CisgICAgMCAvKiBOVUwgICovLCAwIC8qIFNPSCAgKi8sIDAgLyogU1RYICAqLywgMCAvKiBFVFggICovLAorICAgIDAgLyogRU9UICAqLywgMCAvKiBFTlEgICovLCAwIC8qIEFDSyAgKi8sIDAgLyogQkVMICAqLywKKyAgICAwIC8qIEJTICAgKi8sIDEgLyogSFQgICAqLywgMCAvKiBMRiAgICovLCAwIC8qIFZUICAgKi8sCisgICAgMCAvKiBGRiAgICovLCAwIC8qIENSICAgKi8sIDAgLyogU08gICAqLywgMCAvKiBTSSAgICovLAorICAgIDAgLyogRExFICAqLywgMCAvKiBEQzEgICovLCAwIC8qIERDMiAgKi8sIDAgLyogREMzICAqLywKKyAgICAwIC8qIERDNCAgKi8sIDAgLyogTkFLICAqLywgMCAvKiBTWU4gICovLCAwIC8qIEVUQiAgKi8sCisgICAgMCAvKiBDQU4gICovLCAwIC8qIEVNICAgKi8sIDAgLyogU1VCICAqLywgMCAvKiBFU0MgICovLAorICAgIDAgLyogRlMgICAqLywgMCAvKiBHUyAgICovLCAwIC8qIFJTICAgKi8sIDAgLyogVVMgICAqLywKKyAgICAxIC8qIFNQQyAgKi8sIDEgLyogISAgICAqLywgMSAvKiAiICAgICovLCAxIC8qICMgICAgKi8sCisgICAgMSAvKiAkICAgICovLCAxIC8qICUgICAgKi8sIDEgLyogJiAgICAqLywgMSAvKiAnICAgICovLAorICAgIDEgLyogKCAgICAqLywgMSAvKiApICAgICovLCAxIC8qICogICAgKi8sIDEgLyogKyAgICAqLywKKyAgICAxIC8qICwgICAgKi8sIDEgLyogLSAgICAqLywgMSAvKiAuICAgICovLCAxIC8qIC8gICAgKi8sCisgICAgMSAvKiAwICAgICovLCAxIC8qIDEgICAgKi8sIDEgLyogMiAgICAqLywgMSAvKiAzICAgICovLAorICAgIDEgLyogNCAgICAqLywgMSAvKiA1ICAgICovLCAxIC8qIDYgICAgKi8sIDEgLyogNyAgICAqLywKKyAgICAxIC8qIDggICAgKi8sIDEgLyogOSAgICAqLywgMSAvKiA6ICAgICovLCAxIC8qIDsgICAgKi8sCisgICAgMSAvKiA8ICAgICovLCAxIC8qID0gICAgKi8sIDEgLyogPiAgICAqLywgMSAvKiA/ICAgICovLAorICAgIDEgLyogQCAgICAqLywgMSAvKiBBICAgICovLCAxIC8qIEIgICAgKi8sIDEgLyogQyAgICAqLywKKyAgICAxIC8qIEQgICAgKi8sIDEgLyogRSAgICAqLywgMSAvKiBGICAgICovLCAxIC8qIEcgICAgKi8sCisgICAgMSAvKiBIICAgICovLCAxIC8qIEkgICAgKi8sIDEgLyogSiAgICAqLywgMSAvKiBLICAgICovLAorICAgIDEgLyogTCAgICAqLywgMSAvKiBNICAgICovLCAxIC8qIE4gICAgKi8sIDEgLyogTyAgICAqLywKKyAgICAxIC8qIFAgICAgKi8sIDEgLyogUSAgICAqLywgMSAvKiBSICAgICovLCAxIC8qIFMgICAgKi8sCisgICAgMSAvKiBUICAgICovLCAxIC8qIFUgICAgKi8sIDEgLyogViAgICAqLywgMSAvKiBXICAgICovLAorICAgIDEgLyogWCAgICAqLywgMSAvKiBZICAgICovLCAxIC8qIFogICAgKi8sIDEgLyogWyAgICAqLywKKyAgICAxIC8qIFwgICAgKi8sIDEgLyogXSAgICAqLywgMSAvKiBeICAgICovLCAxIC8qIF8gICAgKi8sCisgICAgMSAvKiBgICAgICovLCAxIC8qIGEgICAgKi8sIDEgLyogYiAgICAqLywgMSAvKiBjICAgICovLAorICAgIDEgLyogZCAgICAqLywgMSAvKiBlICAgICovLCAxIC8qIGYgICAgKi8sIDEgLyogZyAgICAqLywKKyAgICAxIC8qIGggICAgKi8sIDEgLyogaSAgICAqLywgMSAvKiBqICAgICovLCAxIC8qIGsgICAgKi8sCisgICAgMSAvKiBsICAgICovLCAxIC8qIG0gICAgKi8sIDEgLyogbiAgICAqLywgMSAvKiBvICAgICovLAorICAgIDEgLyogcCAgICAqLywgMSAvKiBxICAgICovLCAxIC8qIHIgICAgKi8sIDEgLyogcyAgICAqLywKKyAgICAxIC8qIHQgICAgKi8sIDEgLyogdSAgICAqLywgMSAvKiB2ICAgICovLCAxIC8qIHcgICAgKi8sCisgICAgMSAvKiB4ICAgICovLCAxIC8qIHkgICAgKi8sIDEgLyogeiAgICAqLywgMSAvKiB7ICAgICovLAorICAgIDEgLyogfCAgICAqLywgMSAvKiB9ICAgICovLCAxIC8qIH4gICAgKi8sIDAgLyogREVMICAqLywKKyAgICAxIC8qIDB4ODAgKi8sIDEgLyogMHg4MSAqLywgMSAvKiAweDgyICovLCAxIC8qIDB4ODMgKi8sCisgICAgMSAvKiAweDg0ICovLCAxIC8qIDB4ODUgKi8sIDEgLyogMHg4NiAqLywgMSAvKiAweDg3ICovLAorICAgIDEgLyogMHg4OCAqLywgMSAvKiAweDg5ICovLCAxIC8qIDB4OGEgKi8sIDEgLyogMHg4YiAqLywKKyAgICAxIC8qIDB4OGMgKi8sIDEgLyogMHg4ZCAqLywgMSAvKiAweDhlICovLCAxIC8qIDB4OGYgKi8sCisgICAgMSAvKiAweDkwICovLCAxIC8qIDB4OTEgKi8sIDEgLyogMHg5MiAqLywgMSAvKiAweDkzICovLAorICAgIDEgLyogMHg5NCAqLywgMSAvKiAweDk1ICovLCAxIC8qIDB4OTYgKi8sIDEgLyogMHg5NyAqLywKKyAgICAxIC8qIDB4OTggKi8sIDEgLyogMHg5OSAqLywgMSAvKiAweDlhICovLCAxIC8qIDB4OWIgKi8sCisgICAgMSAvKiAweDljICovLCAxIC8qIDB4OWQgKi8sIDEgLyogMHg5ZSAqLywgMSAvKiAweDlmICovLAorICAgIDEgLyogMHhhMCAqLywgMSAvKiAweGExICovLCAxIC8qIDB4YTIgKi8sIDEgLyogMHhhMyAqLywKKyAgICAxIC8qIDB4YTQgKi8sIDEgLyogMHhhNSAqLywgMSAvKiAweGE2ICovLCAxIC8qIDB4YTcgKi8sCisgICAgMSAvKiAweGE4ICovLCAxIC8qIDB4YTkgKi8sIDEgLyogMHhhYSAqLywgMSAvKiAweGFiICovLAorICAgIDEgLyogMHhhYyAqLywgMSAvKiAweGFkICovLCAxIC8qIDB4YWUgKi8sIDEgLyogMHhhZiAqLywKKyAgICAxIC8qIDB4YjAgKi8sIDEgLyogMHhiMSAqLywgMSAvKiAweGIyICovLCAxIC8qIDB4YjMgKi8sCisgICAgMSAvKiAweGI0ICovLCAxIC8qIDB4YjUgKi8sIDEgLyogMHhiNiAqLywgMSAvKiAweGI3ICovLAorICAgIDEgLyogMHhiOCAqLywgMSAvKiAweGI5ICovLCAxIC8qIDB4YmEgKi8sIDEgLyogMHhiYiAqLywKKyAgICAxIC8qIDB4YmMgKi8sIDEgLyogMHhiZCAqLywgMSAvKiAweGJlICovLCAxIC8qIDB4YmYgKi8sCisgICAgMSAvKiAweGMwICovLCAxIC8qIDB4YzEgKi8sIDEgLyogMHhjMiAqLywgMSAvKiAweGMzICovLAorICAgIDEgLyogMHhjNCAqLywgMSAvKiAweGM1ICovLCAxIC8qIDB4YzYgKi8sIDEgLyogMHhjNyAqLywKKyAgICAxIC8qIDB4YzggKi8sIDEgLyogMHhjOSAqLywgMSAvKiAweGNhICovLCAxIC8qIDB4Y2IgKi8sCisgICAgMSAvKiAweGNjICovLCAxIC8qIDB4Y2QgKi8sIDEgLyogMHhjZSAqLywgMSAvKiAweGNmICovLAorICAgIDEgLyogMHhkMCAqLywgMSAvKiAweGQxICovLCAxIC8qIDB4ZDIgKi8sIDEgLyogMHhkMyAqLywKKyAgICAxIC8qIDB4ZDQgKi8sIDEgLyogMHhkNSAqLywgMSAvKiAweGQ2ICovLCAxIC8qIDB4ZDcgKi8sCisgICAgMSAvKiAweGQ4ICovLCAxIC8qIDB4ZDkgKi8sIDEgLyogMHhkYSAqLywgMSAvKiAweGRiICovLAorICAgIDEgLyogMHhkYyAqLywgMSAvKiAweGRkICovLCAxIC8qIDB4ZGUgKi8sIDEgLyogMHhkZiAqLywKKyAgICAxIC8qIDB4ZTAgKi8sIDEgLyogMHhlMSAqLywgMSAvKiAweGUyICovLCAxIC8qIDB4ZTMgKi8sCisgICAgMSAvKiAweGU0ICovLCAxIC8qIDB4ZTUgKi8sIDEgLyogMHhlNiAqLywgMSAvKiAweGU3ICovLAorICAgIDEgLyogMHhlOCAqLywgMSAvKiAweGU5ICovLCAxIC8qIDB4ZWEgKi8sIDEgLyogMHhlYiAqLywKKyAgICAxIC8qIDB4ZWMgKi8sIDEgLyogMHhlZCAqLywgMSAvKiAweGVlICovLCAxIC8qIDB4ZWYgKi8sCisgICAgMSAvKiAweGYwICovLCAxIC8qIDB4ZjEgKi8sIDEgLyogMHhmMiAqLywgMSAvKiAweGYzICovLAorICAgIDEgLyogMHhmNCAqLywgMSAvKiAweGY1ICovLCAxIC8qIDB4ZjYgKi8sIDEgLyogMHhmNyAqLywKKyAgICAxIC8qIDB4ZjggKi8sIDEgLyogMHhmOSAqLywgMSAvKiAweGZhICovLCAxIC8qIDB4ZmIgKi8sCisgICAgMSAvKiAweGZjICovLCAxIC8qIDB4ZmQgKi8sIDEgLyogMHhmZSAqLywgMSAvKiAweGZmICovCit9OworCitpbnQgbmdodHRwMl9jaGVja19oZWFkZXJfdmFsdWUoY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCBsZW4pIHsKKyAgY29uc3QgdWludDhfdCAqbGFzdDsKKyAgZm9yIChsYXN0ID0gdmFsdWUgKyBsZW47IHZhbHVlICE9IGxhc3Q7ICsrdmFsdWUpIHsKKyAgICBpZiAoIVZBTElEX0hEX1ZBTFVFX0NIQVJTWyp2YWx1ZV0pIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworLyogR2VuZXJhdGVkIGJ5IGdlbmF1dGhyb2l0eWNoYXJ0YmwucHkgKi8KK3N0YXRpYyBjaGFyIFZBTElEX0FVVEhPUklUWV9DSEFSU1tdID0geworICAgIDAgLyogTlVMICAqLywgMCAvKiBTT0ggICovLCAwIC8qIFNUWCAgKi8sIDAgLyogRVRYICAqLywKKyAgICAwIC8qIEVPVCAgKi8sIDAgLyogRU5RICAqLywgMCAvKiBBQ0sgICovLCAwIC8qIEJFTCAgKi8sCisgICAgMCAvKiBCUyAgICovLCAwIC8qIEhUICAgKi8sIDAgLyogTEYgICAqLywgMCAvKiBWVCAgICovLAorICAgIDAgLyogRkYgICAqLywgMCAvKiBDUiAgICovLCAwIC8qIFNPICAgKi8sIDAgLyogU0kgICAqLywKKyAgICAwIC8qIERMRSAgKi8sIDAgLyogREMxICAqLywgMCAvKiBEQzIgICovLCAwIC8qIERDMyAgKi8sCisgICAgMCAvKiBEQzQgICovLCAwIC8qIE5BSyAgKi8sIDAgLyogU1lOICAqLywgMCAvKiBFVEIgICovLAorICAgIDAgLyogQ0FOICAqLywgMCAvKiBFTSAgICovLCAwIC8qIFNVQiAgKi8sIDAgLyogRVNDICAqLywKKyAgICAwIC8qIEZTICAgKi8sIDAgLyogR1MgICAqLywgMCAvKiBSUyAgICovLCAwIC8qIFVTICAgKi8sCisgICAgMCAvKiBTUEMgICovLCAxIC8qICEgICAgKi8sIDAgLyogIiAgICAqLywgMCAvKiAjICAgICovLAorICAgIDEgLyogJCAgICAqLywgMSAvKiAlICAgICovLCAxIC8qICYgICAgKi8sIDEgLyogJyAgICAqLywKKyAgICAxIC8qICggICAgKi8sIDEgLyogKSAgICAqLywgMSAvKiAqICAgICovLCAxIC8qICsgICAgKi8sCisgICAgMSAvKiAsICAgICovLCAxIC8qIC0gICAgKi8sIDEgLyogLiAgICAqLywgMCAvKiAvICAgICovLAorICAgIDEgLyogMCAgICAqLywgMSAvKiAxICAgICovLCAxIC8qIDIgICAgKi8sIDEgLyogMyAgICAqLywKKyAgICAxIC8qIDQgICAgKi8sIDEgLyogNSAgICAqLywgMSAvKiA2ICAgICovLCAxIC8qIDcgICAgKi8sCisgICAgMSAvKiA4ICAgICovLCAxIC8qIDkgICAgKi8sIDEgLyogOiAgICAqLywgMSAvKiA7ICAgICovLAorICAgIDAgLyogPCAgICAqLywgMSAvKiA9ICAgICovLCAwIC8qID4gICAgKi8sIDAgLyogPyAgICAqLywKKyAgICAxIC8qIEAgICAgKi8sIDEgLyogQSAgICAqLywgMSAvKiBCICAgICovLCAxIC8qIEMgICAgKi8sCisgICAgMSAvKiBEICAgICovLCAxIC8qIEUgICAgKi8sIDEgLyogRiAgICAqLywgMSAvKiBHICAgICovLAorICAgIDEgLyogSCAgICAqLywgMSAvKiBJICAgICovLCAxIC8qIEogICAgKi8sIDEgLyogSyAgICAqLywKKyAgICAxIC8qIEwgICAgKi8sIDEgLyogTSAgICAqLywgMSAvKiBOICAgICovLCAxIC8qIE8gICAgKi8sCisgICAgMSAvKiBQICAgICovLCAxIC8qIFEgICAgKi8sIDEgLyogUiAgICAqLywgMSAvKiBTICAgICovLAorICAgIDEgLyogVCAgICAqLywgMSAvKiBVICAgICovLCAxIC8qIFYgICAgKi8sIDEgLyogVyAgICAqLywKKyAgICAxIC8qIFggICAgKi8sIDEgLyogWSAgICAqLywgMSAvKiBaICAgICovLCAxIC8qIFsgICAgKi8sCisgICAgMCAvKiBcICAgICovLCAxIC8qIF0gICAgKi8sIDAgLyogXiAgICAqLywgMSAvKiBfICAgICovLAorICAgIDAgLyogYCAgICAqLywgMSAvKiBhICAgICovLCAxIC8qIGIgICAgKi8sIDEgLyogYyAgICAqLywKKyAgICAxIC8qIGQgICAgKi8sIDEgLyogZSAgICAqLywgMSAvKiBmICAgICovLCAxIC8qIGcgICAgKi8sCisgICAgMSAvKiBoICAgICovLCAxIC8qIGkgICAgKi8sIDEgLyogaiAgICAqLywgMSAvKiBrICAgICovLAorICAgIDEgLyogbCAgICAqLywgMSAvKiBtICAgICovLCAxIC8qIG4gICAgKi8sIDEgLyogbyAgICAqLywKKyAgICAxIC8qIHAgICAgKi8sIDEgLyogcSAgICAqLywgMSAvKiByICAgICovLCAxIC8qIHMgICAgKi8sCisgICAgMSAvKiB0ICAgICovLCAxIC8qIHUgICAgKi8sIDEgLyogdiAgICAqLywgMSAvKiB3ICAgICovLAorICAgIDEgLyogeCAgICAqLywgMSAvKiB5ICAgICovLCAxIC8qIHogICAgKi8sIDAgLyogeyAgICAqLywKKyAgICAwIC8qIHwgICAgKi8sIDAgLyogfSAgICAqLywgMSAvKiB+ICAgICovLCAwIC8qIERFTCAgKi8sCisgICAgMCAvKiAweDgwICovLCAwIC8qIDB4ODEgKi8sIDAgLyogMHg4MiAqLywgMCAvKiAweDgzICovLAorICAgIDAgLyogMHg4NCAqLywgMCAvKiAweDg1ICovLCAwIC8qIDB4ODYgKi8sIDAgLyogMHg4NyAqLywKKyAgICAwIC8qIDB4ODggKi8sIDAgLyogMHg4OSAqLywgMCAvKiAweDhhICovLCAwIC8qIDB4OGIgKi8sCisgICAgMCAvKiAweDhjICovLCAwIC8qIDB4OGQgKi8sIDAgLyogMHg4ZSAqLywgMCAvKiAweDhmICovLAorICAgIDAgLyogMHg5MCAqLywgMCAvKiAweDkxICovLCAwIC8qIDB4OTIgKi8sIDAgLyogMHg5MyAqLywKKyAgICAwIC8qIDB4OTQgKi8sIDAgLyogMHg5NSAqLywgMCAvKiAweDk2ICovLCAwIC8qIDB4OTcgKi8sCisgICAgMCAvKiAweDk4ICovLCAwIC8qIDB4OTkgKi8sIDAgLyogMHg5YSAqLywgMCAvKiAweDliICovLAorICAgIDAgLyogMHg5YyAqLywgMCAvKiAweDlkICovLCAwIC8qIDB4OWUgKi8sIDAgLyogMHg5ZiAqLywKKyAgICAwIC8qIDB4YTAgKi8sIDAgLyogMHhhMSAqLywgMCAvKiAweGEyICovLCAwIC8qIDB4YTMgKi8sCisgICAgMCAvKiAweGE0ICovLCAwIC8qIDB4YTUgKi8sIDAgLyogMHhhNiAqLywgMCAvKiAweGE3ICovLAorICAgIDAgLyogMHhhOCAqLywgMCAvKiAweGE5ICovLCAwIC8qIDB4YWEgKi8sIDAgLyogMHhhYiAqLywKKyAgICAwIC8qIDB4YWMgKi8sIDAgLyogMHhhZCAqLywgMCAvKiAweGFlICovLCAwIC8qIDB4YWYgKi8sCisgICAgMCAvKiAweGIwICovLCAwIC8qIDB4YjEgKi8sIDAgLyogMHhiMiAqLywgMCAvKiAweGIzICovLAorICAgIDAgLyogMHhiNCAqLywgMCAvKiAweGI1ICovLCAwIC8qIDB4YjYgKi8sIDAgLyogMHhiNyAqLywKKyAgICAwIC8qIDB4YjggKi8sIDAgLyogMHhiOSAqLywgMCAvKiAweGJhICovLCAwIC8qIDB4YmIgKi8sCisgICAgMCAvKiAweGJjICovLCAwIC8qIDB4YmQgKi8sIDAgLyogMHhiZSAqLywgMCAvKiAweGJmICovLAorICAgIDAgLyogMHhjMCAqLywgMCAvKiAweGMxICovLCAwIC8qIDB4YzIgKi8sIDAgLyogMHhjMyAqLywKKyAgICAwIC8qIDB4YzQgKi8sIDAgLyogMHhjNSAqLywgMCAvKiAweGM2ICovLCAwIC8qIDB4YzcgKi8sCisgICAgMCAvKiAweGM4ICovLCAwIC8qIDB4YzkgKi8sIDAgLyogMHhjYSAqLywgMCAvKiAweGNiICovLAorICAgIDAgLyogMHhjYyAqLywgMCAvKiAweGNkICovLCAwIC8qIDB4Y2UgKi8sIDAgLyogMHhjZiAqLywKKyAgICAwIC8qIDB4ZDAgKi8sIDAgLyogMHhkMSAqLywgMCAvKiAweGQyICovLCAwIC8qIDB4ZDMgKi8sCisgICAgMCAvKiAweGQ0ICovLCAwIC8qIDB4ZDUgKi8sIDAgLyogMHhkNiAqLywgMCAvKiAweGQ3ICovLAorICAgIDAgLyogMHhkOCAqLywgMCAvKiAweGQ5ICovLCAwIC8qIDB4ZGEgKi8sIDAgLyogMHhkYiAqLywKKyAgICAwIC8qIDB4ZGMgKi8sIDAgLyogMHhkZCAqLywgMCAvKiAweGRlICovLCAwIC8qIDB4ZGYgKi8sCisgICAgMCAvKiAweGUwICovLCAwIC8qIDB4ZTEgKi8sIDAgLyogMHhlMiAqLywgMCAvKiAweGUzICovLAorICAgIDAgLyogMHhlNCAqLywgMCAvKiAweGU1ICovLCAwIC8qIDB4ZTYgKi8sIDAgLyogMHhlNyAqLywKKyAgICAwIC8qIDB4ZTggKi8sIDAgLyogMHhlOSAqLywgMCAvKiAweGVhICovLCAwIC8qIDB4ZWIgKi8sCisgICAgMCAvKiAweGVjICovLCAwIC8qIDB4ZWQgKi8sIDAgLyogMHhlZSAqLywgMCAvKiAweGVmICovLAorICAgIDAgLyogMHhmMCAqLywgMCAvKiAweGYxICovLCAwIC8qIDB4ZjIgKi8sIDAgLyogMHhmMyAqLywKKyAgICAwIC8qIDB4ZjQgKi8sIDAgLyogMHhmNSAqLywgMCAvKiAweGY2ICovLCAwIC8qIDB4ZjcgKi8sCisgICAgMCAvKiAweGY4ICovLCAwIC8qIDB4ZjkgKi8sIDAgLyogMHhmYSAqLywgMCAvKiAweGZiICovLAorICAgIDAgLyogMHhmYyAqLywgMCAvKiAweGZkICovLCAwIC8qIDB4ZmUgKi8sIDAgLyogMHhmZiAqLworfTsKKworaW50IG5naHR0cDJfY2hlY2tfYXV0aG9yaXR5KGNvbnN0IHVpbnQ4X3QgKnZhbHVlLCBzaXplX3QgbGVuKSB7CisgIGNvbnN0IHVpbnQ4X3QgKmxhc3Q7CisgIGZvciAobGFzdCA9IHZhbHVlICsgbGVuOyB2YWx1ZSAhPSBsYXN0OyArK3ZhbHVlKSB7CisgICAgaWYgKCFWQUxJRF9BVVRIT1JJVFlfQ0hBUlNbKnZhbHVlXSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCit1aW50OF90ICpuZ2h0dHAyX2NweW1lbSh1aW50OF90ICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pIHsKKyAgaWYgKGxlbiA9PSAwKSB7CisgICAgcmV0dXJuIGRlc3Q7CisgIH0KKworICBtZW1jcHkoZGVzdCwgc3JjLCBsZW4pOworCisgIHJldHVybiBkZXN0ICsgbGVuOworfQorCitjb25zdCBjaGFyICpuZ2h0dHAyX2h0dHAyX3N0cmVycm9yKHVpbnQzMl90IGVycm9yX2NvZGUpIHsKKyAgc3dpdGNoIChlcnJvcl9jb2RlKSB7CisgIGNhc2UgTkdIVFRQMl9OT19FUlJPUjoKKyAgICByZXR1cm4gIk5PX0VSUk9SIjsKKyAgY2FzZSBOR0hUVFAyX1BST1RPQ09MX0VSUk9SOgorICAgIHJldHVybiAiUFJPVE9DT0xfRVJST1IiOworICBjYXNlIE5HSFRUUDJfSU5URVJOQUxfRVJST1I6CisgICAgcmV0dXJuICJJTlRFUk5BTF9FUlJPUiI7CisgIGNhc2UgTkdIVFRQMl9GTE9XX0NPTlRST0xfRVJST1I6CisgICAgcmV0dXJuICJGTE9XX0NPTlRST0xfRVJST1IiOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfVElNRU9VVDoKKyAgICByZXR1cm4gIlNFVFRJTkdTX1RJTUVPVVQiOworICBjYXNlIE5HSFRUUDJfU1RSRUFNX0NMT1NFRDoKKyAgICByZXR1cm4gIlNUUkVBTV9DTE9TRUQiOworICBjYXNlIE5HSFRUUDJfRlJBTUVfU0laRV9FUlJPUjoKKyAgICByZXR1cm4gIkZSQU1FX1NJWkVfRVJST1IiOworICBjYXNlIE5HSFRUUDJfUkVGVVNFRF9TVFJFQU06CisgICAgcmV0dXJuICJSRUZVU0VEX1NUUkVBTSI7CisgIGNhc2UgTkdIVFRQMl9DQU5DRUw6CisgICAgcmV0dXJuICJDQU5DRUwiOworICBjYXNlIE5HSFRUUDJfQ09NUFJFU1NJT05fRVJST1I6CisgICAgcmV0dXJuICJDT01QUkVTU0lPTl9FUlJPUiI7CisgIGNhc2UgTkdIVFRQMl9DT05ORUNUX0VSUk9SOgorICAgIHJldHVybiAiQ09OTkVDVF9FUlJPUiI7CisgIGNhc2UgTkdIVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTToKKyAgICByZXR1cm4gIkVOSEFOQ0VfWU9VUl9DQUxNIjsKKyAgY2FzZSBOR0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFk6CisgICAgcmV0dXJuICJJTkFERVFVQVRFX1NFQ1VSSVRZIjsKKyAgY2FzZSBOR0hUVFAyX0hUVFBfMV8xX1JFUVVJUkVEOgorICAgIHJldHVybiAiSFRUUF8xXzFfUkVRVUlSRUQiOworICBkZWZhdWx0OgorICAgIHJldHVybiAidW5rbm93biI7CisgIH0KK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGVscGVyLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjE4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hlbHBlci5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9IRUxQRVJfSAorI2RlZmluZSBOR0hUVFAyX0hFTFBFUl9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorI2luY2x1ZGUgIm5naHR0cDJfbWVtLmgiCisKKyNkZWZpbmUgbmdodHRwMl9taW4oQSwgQikgKChBKSA8IChCKSA/IChBKSA6IChCKSkKKyNkZWZpbmUgbmdodHRwMl9tYXgoQSwgQikgKChBKSA+IChCKSA/IChBKSA6IChCKSkKKworI2RlZmluZSBsc3RyZXEoQSwgQiwgTikgKChzaXplb2YoKEEpKSAtIDEpID09IChOKSAmJiBtZW1jbXAoKEEpLCAoQiksIChOKSkgPT0gMCkKKworI2RlZmluZSBuZ2h0dHAyX3N0cnVjdF9vZihwdHIsIHR5cGUsIG1lbWJlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCh0eXBlICopKHZvaWQgKikoKGNoYXIgKikocHRyKS1vZmZzZXRvZih0eXBlLCBtZW1iZXIpKSkKKworLyoKKyAqIENvcGllcyAyIGJ5dGUgdW5zaWduZWQgaW50ZWdlciB8bnwgaW4gaG9zdCBieXRlIG9yZGVyIHRvIHxidWZ8IGluCisgKiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKi8KK3ZvaWQgbmdodHRwMl9wdXRfdWludDE2YmUodWludDhfdCAqYnVmLCB1aW50MTZfdCBuKTsKKworLyoKKyAqIENvcGllcyA0IGJ5dGUgdW5zaWduZWQgaW50ZWdlciB8bnwgaW4gaG9zdCBieXRlIG9yZGVyIHRvIHxidWZ8IGluCisgKiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKi8KK3ZvaWQgbmdodHRwMl9wdXRfdWludDMyYmUodWludDhfdCAqYnVmLCB1aW50MzJfdCBuKTsKKworLyoKKyAqIFJldHJpZXZlcyAyIGJ5dGUgdW5zaWduZWQgaW50ZWdlciBzdG9yZWQgaW4gfGRhdGF8IGluIG5ldHdvcmsgYnl0ZQorICogb3JkZXIgYW5kIHJldHVybnMgaXQgaW4gaG9zdCBieXRlIG9yZGVyLgorICovCit1aW50MTZfdCBuZ2h0dHAyX2dldF91aW50MTYoY29uc3QgdWludDhfdCAqZGF0YSk7CisKKy8qCisgKiBSZXRyaWV2ZXMgNCBieXRlIHVuc2lnbmVkIGludGVnZXIgc3RvcmVkIGluIHxkYXRhfCBpbiBuZXR3b3JrIGJ5dGUKKyAqIG9yZGVyIGFuZCByZXR1cm5zIGl0IGluIGhvc3QgYnl0ZSBvcmRlci4KKyAqLwordWludDMyX3QgbmdodHRwMl9nZXRfdWludDMyKGNvbnN0IHVpbnQ4X3QgKmRhdGEpOworCit2b2lkIG5naHR0cDJfZG93bmNhc2UodWludDhfdCAqcywgc2l6ZV90IGxlbik7CisKKy8qCisgKiBBZGp1c3RzIHwqbG9jYWxfd2luZG93X3NpemVfcHRyfCwgfCpyZWN2X3dpbmRvd19zaXplX3B0cnwsCisgKiB8KnJlY3ZfcmVkdWN0aW9uX3B0cnwgd2l0aCB8KmRlbHRhX3B0cnwgd2hpY2ggaXMgdGhlCisgKiBXSU5ET1dfVVBEQVRFJ3Mgd2luZG93X3NpemVfaW5jcmVtZW50IHNlbnQgZnJvbSBsb2NhbCBzaWRlLiBJZgorICogfGRlbHRhfCBpcyBzdHJpY3RseSBsYXJnZXIgdGhhbiB8KnJlY3Zfd2luZG93X3NpemVfcHRyfCwKKyAqIHwqbG9jYWxfd2luZG93X3NpemVfcHRyfCBpcyBpbmNyZWFzZWQgYnkgZGVsdGEgLQorICogKnJlY3Zfd2luZG93X3NpemVfcHRyLiBJZiB8ZGVsdGF8IGlzIG5lZ2F0aXZlLAorICogfCpsb2NhbF93aW5kb3dfc2l6ZV9wdHJ8IGlzIGRlY3JlYXNlZCBieSBkZWx0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTAorICogICAgIGxvY2FsX3dpbmRvd19zaXplIG92ZXJmbG93IG9yIGdldHMgbmVnYXRpdmUuCisgKi8KK2ludCBuZ2h0dHAyX2FkanVzdF9sb2NhbF93aW5kb3dfc2l6ZShpbnQzMl90ICpsb2NhbF93aW5kb3dfc2l6ZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqcmVjdl93aW5kb3dfc2l6ZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqcmVjdl9yZWR1Y3Rpb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKmRlbHRhX3B0cik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgbmdodHRwMl9hZGp1c3RfbG9jYWxfd2luZG93X3NpemUoKS4gIFRoZQorICogZGlmZmVyZW5jZSBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gYXNzdW1lcyAqZGVsdGFfcHRyID49IDAsIGFuZAorICogKnJlY3Zfd2luZG93X3NpemVfcHRyIGlzIG5vdCBkZWNyZWFzZWQgYnkgKmRlbHRhX3B0ci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTAorICogICAgIGxvY2FsX3dpbmRvd19zaXplIG92ZXJmbG93IG9yIGdldHMgbmVnYXRpdmUuCisgKi8KK2ludCBuZ2h0dHAyX2luY3JlYXNlX2xvY2FsX3dpbmRvd19zaXplKGludDMyX3QgKmxvY2FsX3dpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnJlY3Zfd2luZG93X3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqcmVjdl9yZWR1Y3Rpb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqZGVsdGFfcHRyKTsKKworLyoKKyAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIGZ1bmN0aW9uIGRlY2lkZWQgdGhhdCBXSU5ET1dfVVBEQVRFIHNob3VsZAorICogYmUgc2VudC4KKyAqLworaW50IG5naHR0cDJfc2hvdWxkX3NlbmRfd2luZG93X3VwZGF0ZShpbnQzMl90IGxvY2FsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlY3Zfd2luZG93X3NpemUpOworCisvKgorICogQ29waWVzIHRoZSBidWZmZXIgfHNyY3wgb2YgbGVuZ3RoIHxsZW58IHRvIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVkCisgKiBieSB0aGUgfGRlc3R8LCBhc3N1bWluZyB0aGF0IHRoZSB8ZGVzdHwgaXMgYXQgbGVzdCB8bGVufCBieXRlcyBsb25nCisgKiAuIFJldHVybnMgZGVzdCArIGxlbi4KKyAqLwordWludDhfdCAqbmdodHRwMl9jcHltZW0odWludDhfdCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTsKKworI2VuZGlmIC8qIE5HSFRUUDJfSEVMUEVSX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaHR0cC5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9odHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNTdiNgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaHR0cC5jCkBAIC0wLDAgKzEsNTMwIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX2h0dHAuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX2hkLmgiCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKworc3RhdGljIHVpbnQ4X3QgZG93bmNhc2UodWludDhfdCBjKSB7CisgIHJldHVybiAnQScgPD0gYyAmJiBjIDw9ICdaJyA/ICh1aW50OF90KShjIC0gJ0EnICsgJ2EnKSA6IGM7Cit9CisKK3N0YXRpYyBpbnQgbWVtaWVxKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBuKSB7CisgIHNpemVfdCBpOworICBjb25zdCB1aW50OF90ICphYSA9IGEsICpiYiA9IGI7CisKKyAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworICAgIGlmIChkb3duY2FzZShhYVtpXSkgIT0gZG93bmNhc2UoYmJbaV0pKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgbHN0cmllcShBLCBCLCBOKSAoKHNpemVvZigoQSkpIC0gMSkgPT0gKE4pICYmIG1lbWllcSgoQSksIChCKSwgKE4pKSkKKworc3RhdGljIGludDY0X3QgcGFyc2VfdWludChjb25zdCB1aW50OF90ICpzLCBzaXplX3QgbGVuKSB7CisgIGludDY0X3QgbiA9IDA7CisgIHNpemVfdCBpOworICBpZiAobGVuID09IDApIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgaWYgKCcwJyA8PSBzW2ldICYmIHNbaV0gPD0gJzknKSB7CisgICAgICBpZiAobiA+IElOVDY0X01BWCAvIDEwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICAgIG4gKj0gMTA7CisgICAgICBpZiAobiA+IElOVDY0X01BWCAtIChzW2ldIC0gJzAnKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICBuICs9IHNbaV0gLSAnMCc7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBuOworfQorCitzdGF0aWMgaW50IGx3cyhjb25zdCB1aW50OF90ICpzLCBzaXplX3QgbikgeworICBzaXplX3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworICAgIGlmIChzW2ldICE9ICcgJyAmJiBzW2ldICE9ICdcdCcpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja19wc2V1ZG9faGVhZGVyKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIGNvbnN0IG5naHR0cDJfaGRfbnYgKm52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFnKSB7CisgIGlmIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBmbGFnKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKGx3cyhudi0+dmFsdWUtPmJhc2UsIG52LT52YWx1ZS0+bGVuKSkgeworICAgIHJldHVybiAwOworICB9CisgIHN0cmVhbS0+aHR0cF9mbGFncyA9ICh1aW50MTZfdCkoc3RyZWFtLT5odHRwX2ZsYWdzIHwgZmxhZyk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4cGVjdF9yZXNwb25zZV9ib2R5KG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0hFQUQpID09IDAgJiYKKyAgICAgICAgIHN0cmVhbS0+c3RhdHVzX2NvZGUgLyAxMDAgIT0gMSAmJiBzdHJlYW0tPnN0YXR1c19jb2RlICE9IDMwNCAmJgorICAgICAgICAgc3RyZWFtLT5zdGF0dXNfY29kZSAhPSAyMDQ7Cit9CisKKy8qIEZvciAiaHR0cCIgb3IgImh0dHBzIiBVUklzLCBPUFRJT05TIHJlcXVlc3QgbWF5IGhhdmUgIioiIGluIDpwYXRoCisgICBoZWFkZXIgZmllbGQgdG8gcmVwcmVzZW50IHN5c3RlbS13aWRlIE9QVElPTlMgcmVxdWVzdC4gIE90aGVyd2lzZSwKKyAgIDpwYXRoIGhlYWRlciBmaWVsZCB2YWx1ZSBtdXN0IHN0YXJ0IHdpdGggIi8iLiAgVGhpcyBmdW5jdGlvbiBtdXN0CisgICBiZSBjYWxsZWQgYWZ0ZXIgIjptZXRob2QiIGhlYWRlciBmaWVsZCB3YXMgcmVjZWl2ZWQuICBUaGlzIGZ1bmN0aW9uCisgICByZXR1cm5zIG5vbnplcm8gaWYgcGF0aCBpcyB2YWxpZC4qLworc3RhdGljIGludCBjaGVja19wYXRoKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19TQ0hFTUVfSFRUUCkgPT0gMCB8fAorICAgICAgICAgKChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19QQVRIX1JFR1VMQVIpIHx8CisgICAgICAgICAgKChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX09QVElPTlMpICYmCisgICAgICAgICAgIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19QQVRIX0FTVEVSSVNLKSkpOworfQorCitzdGF0aWMgaW50IGh0dHBfcmVxdWVzdF9vbl9oZWFkZXIobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgbmdodHRwMl9oZF9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyYWlsZXIsIGludCBjb25uZWN0X3Byb3RvY29sKSB7CisgIGlmIChudi0+bmFtZS0+YmFzZVswXSA9PSAnOicpIHsKKyAgICBpZiAodHJhaWxlciB8fAorICAgICAgICAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfUFNFVURPX0hFQURFUl9ESVNBTExPV0VEKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgfQorCisgIHN3aXRjaCAobnYtPnRva2VuKSB7CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9fQVVUSE9SSVRZOgorICAgIGlmICghY2hlY2tfcHNldWRvX2hlYWRlcihzdHJlYW0sIG52LCBOR0hUVFAyX0hUVFBfRkxBR19fQVVUSE9SSVRZKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX19NRVRIT0Q6CisgICAgaWYgKCFjaGVja19wc2V1ZG9faGVhZGVyKHN0cmVhbSwgbnYsIE5HSFRUUDJfSFRUUF9GTEFHX19NRVRIT0QpKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIHN3aXRjaCAobnYtPnZhbHVlLT5sZW4pIHsKKyAgICBjYXNlIDQ6CisgICAgICBpZiAobHN0cmVxKCJIRUFEIiwgbnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbikpIHsKKyAgICAgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfSEVBRDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgNzoKKyAgICAgIHN3aXRjaCAobnYtPnZhbHVlLT5iYXNlWzZdKSB7CisgICAgICBjYXNlICdUJzoKKyAgICAgICAgaWYgKGxzdHJlcSgiQ09OTkVDVCIsIG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pKSB7CisgICAgICAgICAgaWYgKHN0cmVhbS0+c3RyZWFtX2lkICUgMiA9PSAwKSB7CisgICAgICAgICAgICAvKiB3ZSB3b24ndCBhbGxvdyBDT05ORUNUIGZvciBwdXNoICovCisgICAgICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgICAgICAgfQorICAgICAgICAgIHN0cmVhbS0+aHR0cF9mbGFncyB8PSBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0NPTk5FQ1Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdTJzoKKyAgICAgICAgaWYgKGxzdHJlcSgiT1BUSU9OUyIsIG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pKSB7CisgICAgICAgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfT1BUSU9OUzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX19QQVRIOgorICAgIGlmICghY2hlY2tfcHNldWRvX2hlYWRlcihzdHJlYW0sIG52LCBOR0hUVFAyX0hUVFBfRkxBR19fUEFUSCkpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgaWYgKG52LT52YWx1ZS0+YmFzZVswXSA9PSAnLycpIHsKKyAgICAgIHN0cmVhbS0+aHR0cF9mbGFncyB8PSBOR0hUVFAyX0hUVFBfRkxBR19QQVRIX1JFR1VMQVI7CisgICAgfSBlbHNlIGlmIChudi0+dmFsdWUtPmxlbiA9PSAxICYmIG52LT52YWx1ZS0+YmFzZVswXSA9PSAnKicpIHsKKyAgICAgIHN0cmVhbS0+aHR0cF9mbGFncyB8PSBOR0hUVFAyX0hUVFBfRkxBR19QQVRIX0FTVEVSSVNLOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX19TQ0hFTUU6CisgICAgaWYgKCFjaGVja19wc2V1ZG9faGVhZGVyKHN0cmVhbSwgbnYsIE5HSFRUUDJfSFRUUF9GTEFHX19TQ0hFTUUpKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIGlmICgobnYtPnZhbHVlLT5sZW4gPT0gNCAmJiBtZW1pZXEoImh0dHAiLCBudi0+dmFsdWUtPmJhc2UsIDQpKSB8fAorICAgICAgICAobnYtPnZhbHVlLT5sZW4gPT0gNSAmJiBtZW1pZXEoImh0dHBzIiwgbnYtPnZhbHVlLT5iYXNlLCA1KSkpIHsKKyAgICAgIHN0cmVhbS0+aHR0cF9mbGFncyB8PSBOR0hUVFAyX0hUVFBfRkxBR19TQ0hFTUVfSFRUUDsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9fUFJPVE9DT0w6CisgICAgaWYgKCFjb25uZWN0X3Byb3RvY29sKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorCisgICAgaWYgKCFjaGVja19wc2V1ZG9faGVhZGVyKHN0cmVhbSwgbnYsIE5HSFRUUDJfSFRUUF9GTEFHX19QUk9UT0NPTCkpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9IT1NUOgorICAgIGlmICghY2hlY2tfcHNldWRvX2hlYWRlcihzdHJlYW0sIG52LCBOR0hUVFAyX0hUVFBfRkxBR19IT1NUKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfTEVOR1RIOiB7CisgICAgaWYgKHN0cmVhbS0+Y29udGVudF9sZW5ndGggIT0gLTEpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IHBhcnNlX3VpbnQobnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbik7CisgICAgaWYgKHN0cmVhbS0+Y29udGVudF9sZW5ndGggPT0gLTEpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKyAgLyogZGlzYWxsb3dlZCBoZWFkZXIgZmllbGRzICovCisgIGNhc2UgTkdIVFRQMl9UT0tFTl9DT05ORUNUSU9OOgorICBjYXNlIE5HSFRUUDJfVE9LRU5fS0VFUF9BTElWRToKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX1BST1hZX0NPTk5FQ1RJT046CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9UUkFOU0ZFUl9FTkNPRElORzoKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX1VQR1JBREU6CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICBjYXNlIE5HSFRUUDJfVE9LRU5fVEU6CisgICAgaWYgKCFsc3RyaWVxKCJ0cmFpbGVycyIsIG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGlmIChudi0+bmFtZS0+YmFzZVswXSA9PSAnOicpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgIH0KKworICBpZiAobnYtPm5hbWUtPmJhc2VbMF0gIT0gJzonKSB7CisgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX1BTRVVET19IRUFERVJfRElTQUxMT1dFRDsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh0dHBfcmVzcG9uc2Vfb25faGVhZGVyKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIG5naHR0cDJfaGRfbnYgKm52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhaWxlcikgeworICBpZiAobnYtPm5hbWUtPmJhc2VbMF0gPT0gJzonKSB7CisgICAgaWYgKHRyYWlsZXIgfHwKKyAgICAgICAgKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX1BTRVVET19IRUFERVJfRElTQUxMT1dFRCkpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgIH0KKworICBzd2l0Y2ggKG52LT50b2tlbikgeworICBjYXNlIE5HSFRUUDJfVE9LRU5fX1NUQVRVUzogeworICAgIGlmICghY2hlY2tfcHNldWRvX2hlYWRlcihzdHJlYW0sIG52LCBOR0hUVFAyX0hUVFBfRkxBR19fU1RBVFVTKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBpZiAobnYtPnZhbHVlLT5sZW4gIT0gMykgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBzdHJlYW0tPnN0YXR1c19jb2RlID0gKGludDE2X3QpcGFyc2VfdWludChudi0+dmFsdWUtPmJhc2UsIG52LT52YWx1ZS0+bGVuKTsKKyAgICBpZiAoc3RyZWFtLT5zdGF0dXNfY29kZSA9PSAtMSB8fCBzdHJlYW0tPnN0YXR1c19jb2RlID09IDEwMSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICBjYXNlIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9MRU5HVEg6IHsKKyAgICBpZiAoc3RyZWFtLT5zdGF0dXNfY29kZSA9PSAyMDQpIHsKKyAgICAgIC8qIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciBmaWVsZCBpbiAyMDQgcmVzcG9uc2UgaXMgcHJvaGliaXRlZCBieQorICAgICAgICAgUkZDIDcyMzAuICBCdXQgc29tZSB3aWRlbHkgdXNlZCBzZXJ2ZXJzIHNlbmQgY29udGVudC1sZW5ndGg6CisgICAgICAgICAwLiAgVW50aWwgdGhleSBnZXQgZml4ZWQsIHdlIGlnbm9yZSBpdC4gKi8KKyAgICAgIGlmIChzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoICE9IC0xKSB7CisgICAgICAgIC8qIEZvdW5kIG11bHRpcGxlIGNvbnRlbnQtbGVuZ3RoIGZpZWxkICovCisgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICAgIH0KKyAgICAgIGlmICghbHN0cmllcSgiMCIsIG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICAgIH0KKyAgICAgIHN0cmVhbS0+Y29udGVudF9sZW5ndGggPSAwOworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1JFTU9WRV9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgaWYgKHN0cmVhbS0+c3RhdHVzX2NvZGUgLyAxMDAgPT0gMSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICAvKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4zICovCisgICAgaWYgKHN0cmVhbS0+c3RhdHVzX2NvZGUgLyAxMDAgPT0gMiAmJgorICAgICAgICAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9DT05ORUNUKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1JFTU9WRV9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgaWYgKHN0cmVhbS0+Y29udGVudF9sZW5ndGggIT0gLTEpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IHBhcnNlX3VpbnQobnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbik7CisgICAgaWYgKHN0cmVhbS0+Y29udGVudF9sZW5ndGggPT0gLTEpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKyAgLyogZGlzYWxsb3dlZCBoZWFkZXIgZmllbGRzICovCisgIGNhc2UgTkdIVFRQMl9UT0tFTl9DT05ORUNUSU9OOgorICBjYXNlIE5HSFRUUDJfVE9LRU5fS0VFUF9BTElWRToKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX1BST1hZX0NPTk5FQ1RJT046CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9UUkFOU0ZFUl9FTkNPRElORzoKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX1VQR1JBREU6CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICBjYXNlIE5HSFRUUDJfVE9LRU5fVEU6CisgICAgaWYgKCFsc3RyaWVxKCJ0cmFpbGVycyIsIG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGlmIChudi0+bmFtZS0+YmFzZVswXSA9PSAnOicpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgIH0KKworICBpZiAobnYtPm5hbWUtPmJhc2VbMF0gIT0gJzonKSB7CisgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX1BTRVVET19IRUFERVJfRElTQUxMT1dFRDsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3NjaGVtZShjb25zdCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IGxlbikgeworICBjb25zdCB1aW50OF90ICpsYXN0OworICBpZiAobGVuID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmICghKCgnQScgPD0gKnZhbHVlICYmICp2YWx1ZSA8PSAnWicpIHx8ICgnYScgPD0gKnZhbHVlICYmICp2YWx1ZSA8PSAneicpKSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgbGFzdCA9IHZhbHVlICsgbGVuOworICArK3ZhbHVlOworCisgIGZvciAoOyB2YWx1ZSAhPSBsYXN0OyArK3ZhbHVlKSB7CisgICAgaWYgKCEoKCdBJyA8PSAqdmFsdWUgJiYgKnZhbHVlIDw9ICdaJykgfHwKKyAgICAgICAgICAoJ2EnIDw9ICp2YWx1ZSAmJiAqdmFsdWUgPD0gJ3onKSB8fAorICAgICAgICAgICgnMCcgPD0gKnZhbHVlICYmICp2YWx1ZSA8PSAnOScpIHx8ICp2YWx1ZSA9PSAnKycgfHwgKnZhbHVlID09ICctJyB8fAorICAgICAgICAgICp2YWx1ZSA9PSAnLicpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludCBuZ2h0dHAyX2h0dHBfb25faGVhZGVyKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLCBuZ2h0dHAyX2hkX252ICpudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmFpbGVyKSB7CisgIGludCBydjsKKworICAvKiBXZSBhcmUgc3RyaWN0IGZvciBwc2V1ZG8gaGVhZGVyIGZpZWxkLiAgT25lIGJhZCBjaGFyYWN0ZXIgc2hvdWxkCisgICAgIGxlYWQgdG8gZmFpbC4gIE9UT0gsIHdlIHNob3VsZCBiZSBhIGJpdCBmb3JnaXZpbmcgZm9yIHJlZ3VsYXIKKyAgICAgaGVhZGVycywgc2luY2UgZXhpc3RpbmcgcHVibGljIGludGVybmV0IGhhcyBzbyBtdWNoIGlsbGVnYWwKKyAgICAgaGVhZGVycyBmbG9hdGluZyBhcm91bmQgYW5kIGlmIHdlIGtpbGwgdGhlIHN0cmVhbSBiZWNhdXNlIG9mCisgICAgIHRoaXMsIHdlIG1heSBkaXNydXB0IG1hbnkgd2ViIHNpdGVzIGFuZC9vciBsaWJyYXJpZXMuICBTbyB3ZQorICAgICBiZWNvbWUgY29uc2VydmF0aXZlIGhlcmUsIGFuZCBqdXN0IGlnbm9yZSB0aG9zZSBpbGxlZ2FsIHJlZ3VsYXIKKyAgICAgaGVhZGVycy4gKi8KKyAgaWYgKCFuZ2h0dHAyX2NoZWNrX2hlYWRlcl9uYW1lKG52LT5uYW1lLT5iYXNlLCBudi0+bmFtZS0+bGVuKSkgeworICAgIHNpemVfdCBpOworICAgIGlmIChudi0+bmFtZS0+bGVuID4gMCAmJiBudi0+bmFtZS0+YmFzZVswXSA9PSAnOicpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgLyogaGVhZGVyIGZpZWxkIG5hbWUgbXVzdCBiZSBsb3dlci1jYXNlZCB3aXRob3V0IGV4Y2VwdGlvbiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudi0+bmFtZS0+bGVuOyArK2kpIHsKKyAgICAgIHVpbnQ4X3QgYyA9IG52LT5uYW1lLT5iYXNlW2ldOworICAgICAgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ1onKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICAgIH0KKyAgICB9CisgICAgLyogV2hlbiBpZ25vcmluZyByZWd1bGFyIGhlYWRlcnMsIHdlIHNldCB0aGlzIGZsYWcgc28gdGhhdCB3ZQorICAgICAgIHN0aWxsIGVuZm9yY2UgaGVhZGVyIGZpZWxkIG9yZGVyaW5nIHJ1bGUgZm9yIHBzZXVkbyBoZWFkZXIKKyAgICAgICBmaWVsZHMuICovCisgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX1BTRVVET19IRUFERVJfRElTQUxMT1dFRDsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hUVFBfSEVBREVSOworICB9CisKKyAgaWYgKG52LT50b2tlbiA9PSBOR0hUVFAyX1RPS0VOX19BVVRIT1JJVFkgfHwKKyAgICAgIG52LT50b2tlbiA9PSBOR0hUVFAyX1RPS0VOX0hPU1QpIHsKKyAgICBydiA9IG5naHR0cDJfY2hlY2tfYXV0aG9yaXR5KG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pOworICB9IGVsc2UgaWYgKG52LT50b2tlbiA9PSBOR0hUVFAyX1RPS0VOX19TQ0hFTUUpIHsKKyAgICBydiA9IGNoZWNrX3NjaGVtZShudi0+dmFsdWUtPmJhc2UsIG52LT52YWx1ZS0+bGVuKTsKKyAgfSBlbHNlIHsKKyAgICBydiA9IG5naHR0cDJfY2hlY2tfaGVhZGVyX3ZhbHVlKG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pOworICB9CisKKyAgaWYgKHJ2ID09IDApIHsKKyAgICBhc3NlcnQobnYtPm5hbWUtPmxlbiA+IDApOworICAgIGlmIChudi0+bmFtZS0+YmFzZVswXSA9PSAnOicpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgLyogV2hlbiBpZ25vcmluZyByZWd1bGFyIGhlYWRlcnMsIHdlIHNldCB0aGlzIGZsYWcgc28gdGhhdCB3ZQorICAgICAgIHN0aWxsIGVuZm9yY2UgaGVhZGVyIGZpZWxkIG9yZGVyaW5nIHJ1bGUgZm9yIHBzZXVkbyBoZWFkZXIKKyAgICAgICBmaWVsZHMuICovCisgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX1BTRVVET19IRUFERVJfRElTQUxMT1dFRDsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hUVFBfSEVBREVSOworICB9CisKKyAgaWYgKHNlc3Npb24tPnNlcnZlciB8fCBmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX1BVU0hfUFJPTUlTRSkgeworICAgIHJldHVybiBodHRwX3JlcXVlc3Rfb25faGVhZGVyKHN0cmVhbSwgbnYsIHRyYWlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VydmVyICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnBlbmRpbmdfZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2wpOworICB9CisKKyAgcmV0dXJuIGh0dHBfcmVzcG9uc2Vfb25faGVhZGVyKHN0cmVhbSwgbnYsIHRyYWlsZXIpOworfQorCitpbnQgbmdodHRwMl9odHRwX29uX3JlcXVlc3RfaGVhZGVycyhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaWYgKCEoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfX1BST1RPQ09MKSAmJgorICAgICAgKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfQ09OTkVDVCkpIHsKKyAgICBpZiAoKHN0cmVhbS0+aHR0cF9mbGFncyAmCisgICAgICAgICAoTkdIVFRQMl9IVFRQX0ZMQUdfX1NDSEVNRSB8IE5HSFRUUDJfSFRUUF9GTEFHX19QQVRIKSkgfHwKKyAgICAgICAgKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX19BVVRIT1JJVFkpID09IDApIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IC0xOworICB9IGVsc2UgeworICAgIGlmICgoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfUkVRX0hFQURFUlMpICE9CisgICAgICAgICAgICBOR0hUVFAyX0hUVFBfRkxBR19SRVFfSEVBREVSUyB8fAorICAgICAgICAoc3RyZWFtLT5odHRwX2ZsYWdzICYKKyAgICAgICAgIChOR0hUVFAyX0hUVFBfRkxBR19fQVVUSE9SSVRZIHwgTkdIVFRQMl9IVFRQX0ZMQUdfSE9TVCkpID09IDApIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19fUFJPVE9DT0wpICYmCisgICAgICAgICgoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9DT05ORUNUKSA9PSAwIHx8CisgICAgICAgICAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfX0FVVEhPUklUWSkgPT0gMCkpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFjaGVja19wYXRoKHN0cmVhbSkpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKworICBpZiAoZnJhbWUtPmhkLnR5cGUgPT0gTkdIVFRQMl9QVVNIX1BST01JU0UpIHsKKyAgICAvKiB3ZSBhcmUgZ29pbmcgdG8gcmV1c2UgZGF0YSBmaWVsZHMgZm9yIHVwY29taW5nIHJlc3BvbnNlLiAgQ2xlYXIKKyAgICAgICB0aGVtIG5vdywgZXhjZXB0IGZvciBtZXRob2QgZmxhZ3MuICovCisgICAgc3RyZWFtLT5odHRwX2ZsYWdzICY9IE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfQUxMOworICAgIHN0cmVhbS0+Y29udGVudF9sZW5ndGggPSAtMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9odHRwX29uX3Jlc3BvbnNlX2hlYWRlcnMobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpZiAoKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX19TVEFUVVMpID09IDApIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoc3RyZWFtLT5zdGF0dXNfY29kZSAvIDEwMCA9PSAxKSB7CisgICAgLyogbm9uLWZpbmFsIHJlc3BvbnNlICovCisgICAgc3RyZWFtLT5odHRwX2ZsYWdzID0KKyAgICAgICAgKHVpbnQxNl90KSgoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9BTEwpIHwKKyAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0hUVFBfRkxBR19FWFBFQ1RfRklOQUxfUkVTUE9OU0UpOworICAgIHN0cmVhbS0+Y29udGVudF9sZW5ndGggPSAtMTsKKyAgICBzdHJlYW0tPnN0YXR1c19jb2RlID0gLTE7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdHJlYW0tPmh0dHBfZmxhZ3MgPQorICAgICAgKHVpbnQxNl90KShzdHJlYW0tPmh0dHBfZmxhZ3MgJiB+TkdIVFRQMl9IVFRQX0ZMQUdfRVhQRUNUX0ZJTkFMX1JFU1BPTlNFKTsKKworICBpZiAoIWV4cGVjdF9yZXNwb25zZV9ib2R5KHN0cmVhbSkpIHsKKyAgICBzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoID0gMDsKKyAgfSBlbHNlIGlmIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiAoTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9DT05ORUNUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9VUEdSQURFX1dPUktBUk9VTkQpKSB7CisgICAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2h0dHBfb25fdHJhaWxlcl9oZWFkZXJzKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICAodm9pZClzdHJlYW07CisKKyAgaWYgKChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgPT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9odHRwX29uX3JlbW90ZV9lbmRfc3RyZWFtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaWYgKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX0VYUEVDVF9GSU5BTF9SRVNQT05TRSkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoICE9IC0xICYmCisgICAgICBzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoICE9IHN0cmVhbS0+cmVjdl9jb250ZW50X2xlbmd0aCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9odHRwX29uX2RhdGFfY2h1bmsobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgc2l6ZV90IG4pIHsKKyAgc3RyZWFtLT5yZWN2X2NvbnRlbnRfbGVuZ3RoICs9IChpbnQ2NF90KW47CisKKyAgaWYgKChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19FWFBFQ1RfRklOQUxfUkVTUE9OU0UpIHx8CisgICAgICAoc3RyZWFtLT5jb250ZW50X2xlbmd0aCAhPSAtMSAmJgorICAgICAgIHN0cmVhbS0+cmVjdl9jb250ZW50X2xlbmd0aCA+IHN0cmVhbS0+Y29udGVudF9sZW5ndGgpKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9odHRwX3JlY29yZF9yZXF1ZXN0X21ldGhvZChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGNvbnN0IG5naHR0cDJfbnYgKm52YTsKKyAgc2l6ZV90IG52bGVuOworICBzaXplX3QgaTsKKworICBzd2l0Y2ggKGZyYW1lLT5oZC50eXBlKSB7CisgIGNhc2UgTkdIVFRQMl9IRUFERVJTOgorICAgIG52YSA9IGZyYW1lLT5oZWFkZXJzLm52YTsKKyAgICBudmxlbiA9IGZyYW1lLT5oZWFkZXJzLm52bGVuOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgIG52YSA9IGZyYW1lLT5wdXNoX3Byb21pc2UubnZhOworICAgIG52bGVuID0gZnJhbWUtPnB1c2hfcHJvbWlzZS5udmxlbjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm47CisgIH0KKworICAvKiBUT0RPIHdlIHNob3VsZCBkbyB0aGlzIHN0cmljdGx5LiAqLworICBmb3IgKGkgPSAwOyBpIDwgbnZsZW47ICsraSkgeworICAgIGNvbnN0IG5naHR0cDJfbnYgKm52ID0gJm52YVtpXTsKKyAgICBpZiAoIShudi0+bmFtZWxlbiA9PSA3ICYmIG52LT5uYW1lWzZdID09ICdkJyAmJgorICAgICAgICAgIG1lbWNtcCgiOm1ldGhvIiwgbnYtPm5hbWUsIG52LT5uYW1lbGVuIC0gMSkgPT0gMCkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAobHN0cmVxKCJDT05ORUNUIiwgbnYtPnZhbHVlLCBudi0+dmFsdWVsZW4pKSB7CisgICAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9DT05ORUNUOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobHN0cmVxKCJIRUFEIiwgbnYtPnZhbHVlLCBudi0+dmFsdWVsZW4pKSB7CisgICAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9IRUFEOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZXR1cm47CisgIH0KK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaHR0cC5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9odHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwNTdjZAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaHR0cC5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0hUVFBfSAorI2RlZmluZSBOR0hUVFAyX0hUVFBfSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisjaW5jbHVkZSAibmdodHRwMl9zZXNzaW9uLmgiCisjaW5jbHVkZSAibmdodHRwMl9zdHJlYW0uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gSFRUUCBoZWFkZXIgZmllbGQgfG52fCBpbiB8ZnJhbWV8IGlzCisgKiByZWNlaXZlZCBmb3IgfHN0cmVhbXwuICBUaGlzIGZ1bmN0aW9uIHdpbGwgdmFsaWRhdGUgfG52fCBhZ2FpbnN0CisgKiB0aGUgY3VycmVudCBzdGF0ZSBvZiBzdHJlYW0uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUgorICogICAgIEludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgd2FzIHJlY2VpdmVkLgorICogTkdIVFRQMl9FUlJfSUdOX0hUVFBfSEVBREVSCisgKiAgICAgSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB3YXMgcmVjZWl2ZWQgYnV0IGl0IGNhbiBiZSB0cmVhdGVkIGFzCisgKiAgICAgaWYgaXQgd2FzIG5vdCByZWNlaXZlZCBiZWNhdXNlIG9mIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KKyAqLworaW50IG5naHR0cDJfaHR0cF9vbl9oZWFkZXIobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsIG5naHR0cDJfaGRfbnYgKm52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyYWlsZXIpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiByZXF1ZXN0IGhlYWRlciBpcyByZWNlaXZlZC4gIFRoaXMKKyAqIGZ1bmN0aW9uIHBlcmZvcm1zIHZhbGlkYXRpb24gYW5kIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3IgLTEuCisgKi8KK2ludCBuZ2h0dHAyX2h0dHBfb25fcmVxdWVzdF9oZWFkZXJzKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHJlc3BvbnNlIGhlYWRlciBpcyByZWNlaXZlZC4gIFRoaXMKKyAqIGZ1bmN0aW9uIHBlcmZvcm1zIHZhbGlkYXRpb24gYW5kIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3IgLTEuCisgKi8KK2ludCBuZ2h0dHAyX2h0dHBfb25fcmVzcG9uc2VfaGVhZGVycyhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRyYWlsZXIgaGVhZGVyIChmb3IgYm90aCByZXF1ZXN0IGFuZAorICogcmVzcG9uc2UpIGlzIHJlY2VpdmVkLiAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB2YWxpZGF0aW9uIGFuZAorICogcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciAtMS4KKyAqLworaW50IG5naHR0cDJfaHR0cF9vbl90cmFpbGVyX2hlYWRlcnMobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gRU5EX1NUUkVBTSBmbGFnIGlzIHNlZW4gaW4gaW5jb21pbmcKKyAqIGZyYW1lLiAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB2YWxpZGF0aW9uIGFuZCByZXR1cm5zIDAgaWYgaXQKKyAqIHN1Y2NlZWRzLCBvciAtMS4KKyAqLworaW50IG5naHR0cDJfaHR0cF9vbl9yZW1vdGVfZW5kX3N0cmVhbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gY2h1bmsgb2YgZGF0YSBpcyByZWNlaXZlZC4gIFRoaXMKKyAqIGZ1bmN0aW9uIHBlcmZvcm1zIHZhbGlkYXRpb24gYW5kIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3IgLTEuCisgKi8KK2ludCBuZ2h0dHAyX2h0dHBfb25fZGF0YV9jaHVuayhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBzaXplX3Qgbik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluc3BlY3RzIGhlYWRlciBmaWVsZCBpbiB8ZnJhbWV8IGFuZCByZWNvcmRzIGl0cworICogbWV0aG9kIGluIHN0cmVhbS0+aHR0cF9mbGFncy4gIElmIGZyYW1lLT5oZC50eXBlIGlzIG5laXRoZXIKKyAqIE5HSFRUUDJfSEVBREVSUyBub3IgTkdIVFRQMl9QVVNIX1BST01JU0UsIHRoaXMgZnVuY3Rpb24gZG9lcworICogbm90aGluZy4KKyAqLwordm9pZCBuZ2h0dHAyX2h0dHBfcmVjb3JkX3JlcXVlc3RfbWV0aG9kKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisjZW5kaWYgLyogTkdIVFRQMl9IVFRQX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaW50LmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzU4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2ludC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0lOVF9ICisjZGVmaW5lIE5HSFRUUDJfSU5UX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisvKiBNYWNyb3MsIHR5cGVzIGFuZCBjb25zdGFudHMgZm9yIGludGVybmFsIHVzZSAqLworCisvKiAibGVzcyIgZnVuY3Rpb24sIHJldHVybiBub256ZXJvIGlmIHxsaHN8IGlzIGxlc3MgdGhhbiB8cmhzfC4gKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9sZXNzKShjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocyk7CisKKy8qIEludGVybmFsIGVycm9yIGNvZGUuIFRoZXkgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWy00OTksIC0xMDBdLAorICAgaW5jbHVzaXZlLiAqLwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9FUlJfQ1JFREVOVElBTF9QRU5ESU5HID0gLTEwMSwKKyAgTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSyA9IC0xMDMsCisgIE5HSFRUUDJfRVJSX0lHTl9QQVlMT0FEID0gLTEwNCwKKyAgLyoKKyAgICogSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB3YXMgcmVjZWl2ZWQgYnV0IGl0IGNhbiBiZSB0cmVhdGVkIGFzCisgICAqIGlmIGl0IHdhcyBub3QgcmVjZWl2ZWQgYmVjYXVzZSBvZiBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisgICAqLworICBOR0hUVFAyX0VSUl9JR05fSFRUUF9IRUFERVIgPSAtMTA1LAorICAvKgorICAgKiBJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHdhcyByZWNlaXZlZCwgYW5kIGl0IGlzIGlnbm9yZWQuCisgICAqIFVubGlrZSBOR0hUVFAyX0VSUl9JR05fSFRUUF9IRUFERVIsIHRoaXMgZG9lcyBub3QgaW52b2tlCisgICAqIG5naHR0cDJfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2suCisgICAqLworICBOR0hUVFAyX0VSUl9SRU1PVkVfSFRUUF9IRUFERVIgPSAtMTA2Cit9IG5naHR0cDJfaW50ZXJuYWxfZXJyb3I7CisKKyNlbmRpZiAvKiBOR0hUVFAyX0lOVF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21hcC5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDlmOTdiCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9tYXAuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9tYXAuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIElOSVRJQUxfVEFCTEVfTEVOR1RIIDI1NgorCitpbnQgbmdodHRwMl9tYXBfaW5pdChuZ2h0dHAyX21hcCAqbWFwLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG1hcC0+bWVtID0gbWVtOworICBtYXAtPnRhYmxlbGVuID0gSU5JVElBTF9UQUJMRV9MRU5HVEg7CisgIG1hcC0+dGFibGUgPQorICAgICAgbmdodHRwMl9tZW1fY2FsbG9jKG1lbSwgbWFwLT50YWJsZWxlbiwgc2l6ZW9mKG5naHR0cDJfbWFwX2VudHJ5ICopKTsKKyAgaWYgKG1hcC0+dGFibGUgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG1hcC0+c2l6ZSA9IDA7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9tYXBfZnJlZShuZ2h0dHAyX21hcCAqbWFwKSB7CisgIG5naHR0cDJfbWVtX2ZyZWUobWFwLT5tZW0sIG1hcC0+dGFibGUpOworfQorCit2b2lkIG5naHR0cDJfbWFwX2VhY2hfZnJlZShuZ2h0dHAyX21hcCAqbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnVuYykobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LCB2b2lkICpwdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHRyKSB7CisgIHVpbnQzMl90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBtYXAtPnRhYmxlbGVuOyArK2kpIHsKKyAgICBuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnk7CisgICAgZm9yIChlbnRyeSA9IG1hcC0+dGFibGVbaV07IGVudHJ5OykgeworICAgICAgbmdodHRwMl9tYXBfZW50cnkgKm5leHQgPSBlbnRyeS0+bmV4dDsKKyAgICAgIGZ1bmMoZW50cnksIHB0cik7CisgICAgICBlbnRyeSA9IG5leHQ7CisgICAgfQorICAgIG1hcC0+dGFibGVbaV0gPSBOVUxMOworICB9Cit9CisKK2ludCBuZ2h0dHAyX21hcF9lYWNoKG5naHR0cDJfbWFwICptYXAsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnksIHZvaWQgKnB0ciksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIpIHsKKyAgaW50IHJ2OworICB1aW50MzJfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgbWFwLT50YWJsZWxlbjsgKytpKSB7CisgICAgbmdodHRwMl9tYXBfZW50cnkgKmVudHJ5OworICAgIGZvciAoZW50cnkgPSBtYXAtPnRhYmxlW2ldOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkgeworICAgICAgcnYgPSBmdW5jKGVudHJ5LCBwdHIpOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX21hcF9lbnRyeV9pbml0KG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSwga2V5X3R5cGUga2V5KSB7CisgIGVudHJ5LT5rZXkgPSBrZXk7CisgIGVudHJ5LT5uZXh0ID0gTlVMTDsKK30KKworLyogU2FtZSBoYXNoIGZ1bmN0aW9uIGluIGFuZHJvaWQgSGFzaE1hcCBzb3VyY2UgY29kZS4gKi8KKy8qIFRoZSB8bW9kfCBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KK3N0YXRpYyB1aW50MzJfdCBoYXNoKGludDMyX3Qga2V5LCB1aW50MzJfdCBtb2QpIHsKKyAgdWludDMyX3QgaCA9ICh1aW50MzJfdClrZXk7CisgIGggXj0gKGggPj4gMjApIF4gKGggPj4gMTIpOworICBoIF49IChoID4+IDcpIF4gKGggPj4gNCk7CisgIHJldHVybiBoICYgKG1vZCAtIDEpOworfQorCitzdGF0aWMgaW50IGluc2VydChuZ2h0dHAyX21hcF9lbnRyeSAqKnRhYmxlLCB1aW50MzJfdCB0YWJsZWxlbiwKKyAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSkgeworICB1aW50MzJfdCBoID0gaGFzaChlbnRyeS0+a2V5LCB0YWJsZWxlbik7CisgIGlmICh0YWJsZVtoXSA9PSBOVUxMKSB7CisgICAgdGFibGVbaF0gPSBlbnRyeTsKKyAgfSBlbHNlIHsKKyAgICBuZ2h0dHAyX21hcF9lbnRyeSAqcDsKKyAgICAvKiBXZSB3b24ndCBhbGxvdyBkdXBsaWNhdGVkIGtleSwgc28gY2hlY2sgaXQgb3V0LiAqLworICAgIGZvciAocCA9IHRhYmxlW2hdOyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgaWYgKHAtPmtleSA9PSBlbnRyeS0+a2V5KSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICAgICAgfQorICAgIH0KKyAgICBlbnRyeS0+bmV4dCA9IHRhYmxlW2hdOworICAgIHRhYmxlW2hdID0gZW50cnk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIG5ld190YWJsZWxlbiBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KK3N0YXRpYyBpbnQgcmVzaXplKG5naHR0cDJfbWFwICptYXAsIHVpbnQzMl90IG5ld190YWJsZWxlbikgeworICB1aW50MzJfdCBpOworICBuZ2h0dHAyX21hcF9lbnRyeSAqKm5ld190YWJsZTsKKworICBuZXdfdGFibGUgPQorICAgICAgbmdodHRwMl9tZW1fY2FsbG9jKG1hcC0+bWVtLCBuZXdfdGFibGVsZW4sIHNpemVvZihuZ2h0dHAyX21hcF9lbnRyeSAqKSk7CisgIGlmIChuZXdfdGFibGUgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBtYXAtPnRhYmxlbGVuOyArK2kpIHsKKyAgICBuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnk7CisgICAgZm9yIChlbnRyeSA9IG1hcC0+dGFibGVbaV07IGVudHJ5OykgeworICAgICAgbmdodHRwMl9tYXBfZW50cnkgKm5leHQgPSBlbnRyeS0+bmV4dDsKKyAgICAgIGVudHJ5LT5uZXh0ID0gTlVMTDsKKyAgICAgIC8qIFRoaXMgZnVuY3Rpb24gbXVzdCBzdWNjZWVkICovCisgICAgICBpbnNlcnQobmV3X3RhYmxlLCBuZXdfdGFibGVsZW4sIGVudHJ5KTsKKyAgICAgIGVudHJ5ID0gbmV4dDsKKyAgICB9CisgIH0KKyAgbmdodHRwMl9tZW1fZnJlZShtYXAtPm1lbSwgbWFwLT50YWJsZSk7CisgIG1hcC0+dGFibGVsZW4gPSBuZXdfdGFibGVsZW47CisgIG1hcC0+dGFibGUgPSBuZXdfdGFibGU7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX21hcF9pbnNlcnQobmdodHRwMl9tYXAgKm1hcCwgbmdodHRwMl9tYXBfZW50cnkgKm5ld19lbnRyeSkgeworICBpbnQgcnY7CisgIC8qIExvYWQgZmFjdG9yIGlzIDAuNzUgKi8KKyAgaWYgKChtYXAtPnNpemUgKyAxKSAqIDQgPiBtYXAtPnRhYmxlbGVuICogMykgeworICAgIHJ2ID0gcmVzaXplKG1hcCwgbWFwLT50YWJsZWxlbiAqIDIpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisgIHJ2ID0gaW5zZXJ0KG1hcC0+dGFibGUsIG1hcC0+dGFibGVsZW4sIG5ld19lbnRyeSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgICsrbWFwLT5zaXplOworICByZXR1cm4gMDsKK30KKworbmdodHRwMl9tYXBfZW50cnkgKm5naHR0cDJfbWFwX2ZpbmQobmdodHRwMl9tYXAgKm1hcCwga2V5X3R5cGUga2V5KSB7CisgIHVpbnQzMl90IGg7CisgIG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeTsKKyAgaCA9IGhhc2goa2V5LCBtYXAtPnRhYmxlbGVuKTsKKyAgZm9yIChlbnRyeSA9IG1hcC0+dGFibGVbaF07IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KSB7CisgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICB9CisgIHJldHVybiBOVUxMOworfQorCitpbnQgbmdodHRwMl9tYXBfcmVtb3ZlKG5naHR0cDJfbWFwICptYXAsIGtleV90eXBlIGtleSkgeworICB1aW50MzJfdCBoOworICBuZ2h0dHAyX21hcF9lbnRyeSAqKmRzdDsKKworICBoID0gaGFzaChrZXksIG1hcC0+dGFibGVsZW4pOworCisgIGZvciAoZHN0ID0gJm1hcC0+dGFibGVbaF07ICpkc3Q7IGRzdCA9ICYoKmRzdCktPm5leHQpIHsKKyAgICBpZiAoKCpkc3QpLT5rZXkgIT0ga2V5KSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAqZHN0ID0gKCpkc3QpLT5uZXh0OworICAgIC0tbWFwLT5zaXplOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworfQorCitzaXplX3QgbmdodHRwMl9tYXBfc2l6ZShuZ2h0dHAyX21hcCAqbWFwKSB7IHJldHVybiBtYXAtPnNpemU7IH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWFwLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTI5ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21hcC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9NQVBfSAorI2RlZmluZSBOR0hUVFAyX01BUF9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKyNpbmNsdWRlICJuZ2h0dHAyX2ludC5oIgorI2luY2x1ZGUgIm5naHR0cDJfbWVtLmgiCisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHVub3JkZXJlZCBtYXAgKi8KKwordHlwZWRlZiBpbnQzMl90IGtleV90eXBlOworCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX21hcF9lbnRyeSB7CisgIHN0cnVjdCBuZ2h0dHAyX21hcF9lbnRyeSAqbmV4dDsKKyAga2V5X3R5cGUga2V5OworI2lmIFNJWkVPRl9JTlRfUCA9PSA0CisgIC8qIHdlIHJlcXVpcmVzIDggYnl0ZXMgYWxpZ21lbnQgKi8KKyAgaW50NjRfdCBwYWQ7CisjZW5kaWYKK30gbmdodHRwMl9tYXBfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9tYXBfZW50cnkgKip0YWJsZTsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgc2l6ZV90IHNpemU7CisgIHVpbnQzMl90IHRhYmxlbGVuOworfSBuZ2h0dHAyX21hcDsKKworLyoKKyAqIEluaXRpYWxpemVzIHRoZSBtYXAgfG1hcHwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX21hcF9pbml0KG5naHR0cDJfbWFwICptYXAsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRGVhbGxvY2F0ZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHxtYXB8LiBUaGUgc3RvcmVkIGVudHJpZXMKKyAqIGFyZSBub3QgZnJlZWQgYnkgdGhpcyBmdW5jdGlvbi4gVXNlIG5naHR0cDJfbWFwX2VhY2hfZnJlZSgpIHRvIGZyZWUKKyAqIGVhY2ggZW50cmllcy4KKyAqLwordm9pZCBuZ2h0dHAyX21hcF9mcmVlKG5naHR0cDJfbWFwICptYXApOworCisvKgorICogRGVhbGxvY2F0ZXMgZWFjaCBlbnRyaWVzIHVzaW5nIHxmdW5jfCBmdW5jdGlvbiBhbmQgYW55IHJlc291cmNlcworICogYWxsb2NhdGVkIGZvciB8bWFwfC4gVGhlIHxmdW5jfCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZworICogZ2l2ZW4gdGhlIHxlbnRyeXwgb2JqZWN0LiBUaGUgfHB0cnwgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHxmdW5jfCBhcworICogc2VuZCBhcmd1bWVudC4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgfGZ1bmN8IHdpbGwgYmUgaWdub3JlZC4KKyAqLwordm9pZCBuZ2h0dHAyX21hcF9lYWNoX2ZyZWUobmdodHRwMl9tYXAgKm1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpKG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSwgdm9pZCAqcHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0cik7CisKKy8qCisgKiBJbml0aWFsaXplcyB0aGUgfGVudHJ5fCB3aXRoIHRoZSB8a2V5fC4gQWxsIGVudHJpZXMgdG8gYmUgaW5zZXJ0ZWQKKyAqIHRvIHRoZSBtYXAgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgbmdodHRwMl9tYXBfZW50cnlfaW5pdChuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnksIGtleV90eXBlIGtleSk7CisKKy8qCisgKiBJbnNlcnRzIHRoZSBuZXcgfGVudHJ5fCB3aXRoIHRoZSBrZXkgfGVudHJ5LT5rZXl8IHRvIHRoZSBtYXAgfG1hcHwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UCisgKiAgICAgVGhlIGl0ZW0gYXNzb2NpYXRlZCBieSB8a2V5fCBhbHJlYWR5IGV4aXN0cy4KKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfbWFwX2luc2VydChuZ2h0dHAyX21hcCAqbWFwLCBuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnkpOworCisvKgorICogUmV0dXJucyB0aGUgZW50cnkgYXNzb2NpYXRlZCBieSB0aGUga2V5IHxrZXl8LiAgSWYgdGhlcmUgaXMgbm8gc3VjaAorICogZW50cnksIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgorICovCituZ2h0dHAyX21hcF9lbnRyeSAqbmdodHRwMl9tYXBfZmluZChuZ2h0dHAyX21hcCAqbWFwLCBrZXlfdHlwZSBrZXkpOworCisvKgorICogUmVtb3ZlcyB0aGUgZW50cnkgYXNzb2NpYXRlZCBieSB0aGUga2V5IHxrZXl8IGZyb20gdGhlIHxtYXB8LiAgVGhlCisgKiByZW1vdmVkIGVudHJ5IGlzIG5vdCBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVAorICogICAgIFRoZSBlbnRyeSBhc3NvY2lhdGVkIGJ5IHxrZXl8IGRvZXMgbm90IGV4aXN0LgorICovCitpbnQgbmdodHRwMl9tYXBfcmVtb3ZlKG5naHR0cDJfbWFwICptYXAsIGtleV90eXBlIGtleSk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkIGluIHRoZSBtYXAgfG1hcHwuCisgKi8KK3NpemVfdCBuZ2h0dHAyX21hcF9zaXplKG5naHR0cDJfbWFwICptYXApOworCisvKgorICogQXBwbGllcyB0aGUgZnVuY3Rpb24gfGZ1bmN8IHRvIGVhY2ggZW50cnkgaW4gdGhlIHxtYXB8IHdpdGggdGhlCisgKiBvcHRpb25hbCB1c2VyIHN1cHBsaWVkIHBvaW50ZXIgfHB0cnwuCisgKgorICogSWYgdGhlIHxmdW5jfCByZXR1cm5zIDAsIHRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIHxmdW5jfCB3aXRoIHRoZQorICogbmV4dCBlbnRyeS4gSWYgdGhlIHxmdW5jfCByZXR1cm5zIG5vbnplcm8sIGl0IHdpbGwgbm90IGNhbGwgdGhlCisgKiB8ZnVuY3wgZm9yIGZ1cnRoZXIgZW50cmllcyBhbmQgcmV0dXJuIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCisgKiB8ZnVuY3wgaW1tZWRpYXRlbHkuICBUaHVzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBhbGwgdGhlCisgKiBpbnZvY2F0aW9ucyBvZiB0aGUgfGZ1bmN8IHJldHVybiAwLCBvciBub256ZXJvIHZhbHVlIHdoaWNoIHRoZSBsYXN0CisgKiBpbnZvY2F0aW9uIG9mIHxmdW5jfCByZXR1cm5zLgorICoKKyAqIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgZWFjaCBlbnRyeS4gVXNlCisgKiBuZ2h0dHAyX21hcF9lYWNoX2ZyZWUoKSBpbnN0ZWFkLgorICovCitpbnQgbmdodHRwMl9tYXBfZWFjaChuZ2h0dHAyX21hcCAqbWFwLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnVuYykobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LCB2b2lkICpwdHIpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHRyKTsKKworI2VuZGlmIC8qIE5HSFRUUDJfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWVtLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDQ5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21lbS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfbWVtLmgiCisKK3N0YXRpYyB2b2lkICpkZWZhdWx0X21hbGxvYyhzaXplX3Qgc2l6ZSwgdm9pZCAqbWVtX3VzZXJfZGF0YSkgeworICAodm9pZCltZW1fdXNlcl9kYXRhOworCisgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmF1bHRfZnJlZSh2b2lkICpwdHIsIHZvaWQgKm1lbV91c2VyX2RhdGEpIHsKKyAgKHZvaWQpbWVtX3VzZXJfZGF0YTsKKworICBmcmVlKHB0cik7Cit9CisKK3N0YXRpYyB2b2lkICpkZWZhdWx0X2NhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCB2b2lkICptZW1fdXNlcl9kYXRhKSB7CisgICh2b2lkKW1lbV91c2VyX2RhdGE7CisKKyAgcmV0dXJuIGNhbGxvYyhubWVtYiwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICpkZWZhdWx0X3JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCAqbWVtX3VzZXJfZGF0YSkgeworICAodm9pZCltZW1fdXNlcl9kYXRhOworCisgIHJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBuZ2h0dHAyX21lbSBtZW1fZGVmYXVsdCA9IHtOVUxMLCBkZWZhdWx0X21hbGxvYywgZGVmYXVsdF9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfY2FsbG9jLCBkZWZhdWx0X3JlYWxsb2N9OworCituZ2h0dHAyX21lbSAqbmdodHRwMl9tZW1fZGVmYXVsdCh2b2lkKSB7IHJldHVybiAmbWVtX2RlZmF1bHQ7IH0KKwordm9pZCAqbmdodHRwMl9tZW1fbWFsbG9jKG5naHR0cDJfbWVtICptZW0sIHNpemVfdCBzaXplKSB7CisgIHJldHVybiBtZW0tPm1hbGxvYyhzaXplLCBtZW0tPm1lbV91c2VyX2RhdGEpOworfQorCit2b2lkIG5naHR0cDJfbWVtX2ZyZWUobmdodHRwMl9tZW0gKm1lbSwgdm9pZCAqcHRyKSB7CisgIG1lbS0+ZnJlZShwdHIsIG1lbS0+bWVtX3VzZXJfZGF0YSk7Cit9CisKK3ZvaWQgbmdodHRwMl9tZW1fZnJlZTIobmdodHRwMl9mcmVlIGZyZWVfZnVuYywgdm9pZCAqcHRyLCB2b2lkICptZW1fdXNlcl9kYXRhKSB7CisgIGZyZWVfZnVuYyhwdHIsIG1lbV91c2VyX2RhdGEpOworfQorCit2b2lkICpuZ2h0dHAyX21lbV9jYWxsb2MobmdodHRwMl9tZW0gKm1lbSwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gbWVtLT5jYWxsb2Mobm1lbWIsIHNpemUsIG1lbS0+bWVtX3VzZXJfZGF0YSk7Cit9CisKK3ZvaWQgKm5naHR0cDJfbWVtX3JlYWxsb2MobmdodHRwMl9tZW0gKm1lbSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gbWVtLT5yZWFsbG9jKHB0ciwgc2l6ZSwgbWVtLT5tZW1fdXNlcl9kYXRhKTsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWVtLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4M2RiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21lbS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX01FTV9ICisjZGVmaW5lIE5HSFRUUDJfTUVNX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisvKiBUaGUgZGVmYXVsdCwgc3lzdGVtIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0b3IgKi8KK25naHR0cDJfbWVtICpuZ2h0dHAyX21lbV9kZWZhdWx0KHZvaWQpOworCisvKiBDb252ZW5pZW50IHdyYXBwZXIgZnVuY3Rpb25zIHRvIGNhbGwgYWxsb2NhdG9yIGZ1bmN0aW9uIGluCisgICB8bWVtfC4gKi8KK3ZvaWQgKm5naHR0cDJfbWVtX21hbGxvYyhuZ2h0dHAyX21lbSAqbWVtLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIG5naHR0cDJfbWVtX2ZyZWUobmdodHRwMl9tZW0gKm1lbSwgdm9pZCAqcHRyKTsKK3ZvaWQgbmdodHRwMl9tZW1fZnJlZTIobmdodHRwMl9mcmVlIGZyZWVfZnVuYywgdm9pZCAqcHRyLCB2b2lkICptZW1fdXNlcl9kYXRhKTsKK3ZvaWQgKm5naHR0cDJfbWVtX2NhbGxvYyhuZ2h0dHAyX21lbSAqbWVtLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsKK3ZvaWQgKm5naHR0cDJfbWVtX3JlYWxsb2MobmdodHRwMl9tZW0gKm1lbSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX01FTV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX25ldC5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9uZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWZmZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9uZXQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9ORVRfSAorI2RlZmluZSBOR0hUVFAyX05FVF9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZiAvKiBIQVZFX0FSUEFfSU5FVF9IICovCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmIC8qIEhBVkVfTkVUSU5FVF9JTl9IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworI2lmIGRlZmluZWQoV0lOMzIpCisvKiBXaW5kb3dzIHJlcXVpcmVzIHdzMl8zMiBsaWJyYXJ5IGZvciBudG9ubCBmYW1pbHkgZnVuY3Rpb25zLiAgV2UKKyAgIGRlZmluZSBpbmxpbmUgZnVuY3Rpb25zIGZvciB0aG9zZSBmdW5jdGlvbiBzbyB0aGF0IHdlIGRvbid0IGhhdmUKKyAgIGRlcGVuZGVueSBvbiB0aGF0IGxpYi4gKi8KKworIyAgaWZkZWYgX01TQ19WRVIKKyMgICAgZGVmaW5lIFNUSU4gc3RhdGljIF9faW5saW5lCisjICBlbHNlCisjICAgIGRlZmluZSBTVElOIHN0YXRpYyBpbmxpbmUKKyMgIGVuZGlmCisKK1NUSU4gdWludDMyX3QgaHRvbmwodWludDMyX3QgaG9zdGxvbmcpIHsKKyAgdWludDMyX3QgcmVzOworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmcmVzOworICAqcCsrID0gaG9zdGxvbmcgPj4gMjQ7CisgICpwKysgPSAoaG9zdGxvbmcgPj4gMTYpICYgMHhmZnU7CisgICpwKysgPSAoaG9zdGxvbmcgPj4gOCkgJiAweGZmdTsKKyAgKnAgPSBob3N0bG9uZyAmIDB4ZmZ1OworICByZXR1cm4gcmVzOworfQorCitTVElOIHVpbnQxNl90IGh0b25zKHVpbnQxNl90IGhvc3RzaG9ydCkgeworICB1aW50MTZfdCByZXM7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZyZXM7CisgICpwKysgPSBob3N0c2hvcnQgPj4gODsKKyAgKnAgPSBob3N0c2hvcnQgJiAweGZmdTsKKyAgcmV0dXJuIHJlczsKK30KKworU1RJTiB1aW50MzJfdCBudG9obCh1aW50MzJfdCBuZXRsb25nKSB7CisgIHVpbnQzMl90IHJlczsKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopJm5ldGxvbmc7CisgIHJlcyA9ICpwKysgPDwgMjQ7CisgIHJlcyArPSAqcCsrIDw8IDE2OworICByZXMgKz0gKnArKyA8PCA4OworICByZXMgKz0gKnA7CisgIHJldHVybiByZXM7Cit9CisKK1NUSU4gdWludDE2X3QgbnRvaHModWludDE2X3QgbmV0c2hvcnQpIHsKKyAgdWludDE2X3QgcmVzOworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmbmV0c2hvcnQ7CisgIHJlcyA9ICpwKysgPDwgODsKKyAgcmVzICs9ICpwOworICByZXR1cm4gcmVzOworfQorCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2VuZGlmIC8qIE5HSFRUUDJfTkVUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbnBuLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX25wbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzg0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX25wbi5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfbnBuLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGludCBzZWxlY3RfbmV4dF9wcm90b2NvbCh1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikgeworICB1bnNpZ25lZCBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSArIGtleWxlbiA8PSBpbmxlbjsgaSArPSAodW5zaWduZWQgaW50KShpbltpXSArIDEpKSB7CisgICAgaWYgKG1lbWNtcCgmaW5baV0sIGtleSwga2V5bGVuKSA9PSAwKSB7CisgICAgICAqb3V0ID0gKHVuc2lnbmVkIGNoYXIgKikmaW5baSArIDFdOworICAgICAgKm91dGxlbiA9IGluW2ldOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAtMTsKK30KKworI2RlZmluZSBOR0hUVFAyX0hUVFBfMV8xX0FMUE4gIlx4OGh0dHAvMS4xIgorI2RlZmluZSBOR0hUVFAyX0hUVFBfMV8xX0FMUE5fTEVOIChzaXplb2YoTkdIVFRQMl9IVFRQXzFfMV9BTFBOKSAtIDEpCisKK2ludCBuZ2h0dHAyX3NlbGVjdF9uZXh0X3Byb3RvY29sKHVuc2lnbmVkIGNoYXIgKipvdXQsIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4pIHsKKyAgaWYgKHNlbGVjdF9uZXh0X3Byb3RvY29sKG91dCwgb3V0bGVuLCBpbiwgaW5sZW4sIE5HSFRUUDJfUFJPVE9fQUxQTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fQUxQTl9MRU4pID09IDApIHsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiAoc2VsZWN0X25leHRfcHJvdG9jb2wob3V0LCBvdXRsZW4sIGluLCBpbmxlbiwgTkdIVFRQMl9IVFRQXzFfMV9BTFBOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9IVFRQXzFfMV9BTFBOX0xFTikgPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbnBuLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX25wbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZjFjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX25wbi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX05QTl9ICisjZGVmaW5lIE5HSFRUUDJfTlBOX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisjZW5kaWYgLyogTkdIVFRQMl9OUE5fSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vcHRpb24uYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfb3B0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzZjIyZAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfb3B0aW9uLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfb3B0aW9uLmgiCisKKyNpbmNsdWRlICJuZ2h0dHAyX3Nlc3Npb24uaCIKKworaW50IG5naHR0cDJfb3B0aW9uX25ldyhuZ2h0dHAyX29wdGlvbiAqKm9wdGlvbl9wdHIpIHsKKyAgKm9wdGlvbl9wdHIgPSBjYWxsb2MoMSwgc2l6ZW9mKG5naHR0cDJfb3B0aW9uKSk7CisKKyAgaWYgKCpvcHRpb25fcHRyID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9kZWwobmdodHRwMl9vcHRpb24gKm9wdGlvbikgeyBmcmVlKG9wdGlvbik7IH0KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fYXV0b193aW5kb3dfdXBkYXRlKG5naHR0cDJfb3B0aW9uICpvcHRpb24sIGludCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfTk9fQVVUT19XSU5ET1dfVVBEQVRFOworICBvcHRpb24tPm5vX2F1dG9fd2luZG93X3VwZGF0ZSA9IHZhbDsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfcGVlcl9tYXhfY29uY3VycmVudF9zdHJlYW1zKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsKSB7CisgIG9wdGlvbi0+b3B0X3NldF9tYXNrIHw9IE5HSFRUUDJfT1BUX1BFRVJfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzsKKyAgb3B0aW9uLT5wZWVyX21heF9jb25jdXJyZW50X3N0cmVhbXMgPSB2YWw7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X25vX3JlY3ZfY2xpZW50X21hZ2ljKG5naHR0cDJfb3B0aW9uICpvcHRpb24sIGludCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfTk9fUkVDVl9DTElFTlRfTUFHSUM7CisgIG9wdGlvbi0+bm9fcmVjdl9jbGllbnRfbWFnaWMgPSB2YWw7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X25vX2h0dHBfbWVzc2FnaW5nKG5naHR0cDJfb3B0aW9uICpvcHRpb24sIGludCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfTk9fSFRUUF9NRVNTQUdJTkc7CisgIG9wdGlvbi0+bm9faHR0cF9tZXNzYWdpbmcgPSB2YWw7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X21heF9yZXNlcnZlZF9yZW1vdGVfc3RyZWFtcyhuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9NQVhfUkVTRVJWRURfUkVNT1RFX1NUUkVBTVM7CisgIG9wdGlvbi0+bWF4X3Jlc2VydmVkX3JlbW90ZV9zdHJlYW1zID0gdmFsOworfQorCitzdGF0aWMgdm9pZCBzZXRfZXh0X3R5cGUodWludDhfdCAqZXh0X3R5cGVzLCB1aW50OF90IHR5cGUpIHsKKyAgZXh0X3R5cGVzW3R5cGUgLyA4XSA9ICh1aW50OF90KShleHRfdHlwZXNbdHlwZSAvIDhdIHwgKDEgPDwgKHR5cGUgJiAweDcpKSk7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X3VzZXJfcmVjdl9leHRlbnNpb25fdHlwZShuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdHlwZSkgeworICBpZiAodHlwZSA8IDEwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfVVNFUl9SRUNWX0VYVF9UWVBFUzsKKyAgc2V0X2V4dF90eXBlKG9wdGlvbi0+dXNlcl9yZWN2X2V4dF90eXBlcywgdHlwZSk7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X2J1aWx0aW5fcmVjdl9leHRlbnNpb25fdHlwZShuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdHlwZSkgeworICBzd2l0Y2ggKHR5cGUpIHsKKyAgY2FzZSBOR0hUVFAyX0FMVFNWQzoKKyAgICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9CVUlMVElOX1JFQ1ZfRVhUX1RZUEVTOworICAgIG9wdGlvbi0+YnVpbHRpbl9yZWN2X2V4dF90eXBlcyB8PSBOR0hUVFAyX1RZUEVNQVNLX0FMVFNWQzsKKyAgICByZXR1cm47CisgIGNhc2UgTkdIVFRQMl9PUklHSU46CisgICAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfQlVJTFRJTl9SRUNWX0VYVF9UWVBFUzsKKyAgICBvcHRpb24tPmJ1aWx0aW5fcmVjdl9leHRfdHlwZXMgfD0gTkdIVFRQMl9UWVBFTUFTS19PUklHSU47CisgICAgcmV0dXJuOworICBkZWZhdWx0OgorICAgIHJldHVybjsKKyAgfQorfQorCit2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9ub19hdXRvX3BpbmdfYWNrKG5naHR0cDJfb3B0aW9uICpvcHRpb24sIGludCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfTk9fQVVUT19QSU5HX0FDSzsKKyAgb3B0aW9uLT5ub19hdXRvX3BpbmdfYWNrID0gdmFsOworfQorCit2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9tYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfTUFYX1NFTkRfSEVBREVSX0JMT0NLX0xFTkdUSDsKKyAgb3B0aW9uLT5tYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoID0gdmFsOworfQorCit2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9tYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFsKSB7CisgIG9wdGlvbi0+b3B0X3NldF9tYXNrIHw9IE5HSFRUUDJfT1BUX01BWF9ERUZMQVRFX0RZTkFNSUNfVEFCTEVfU0laRTsKKyAgb3B0aW9uLT5tYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUgPSB2YWw7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X25vX2Nsb3NlZF9zdHJlYW1zKG5naHR0cDJfb3B0aW9uICpvcHRpb24sIGludCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfTk9fQ0xPU0VEX1NUUkVBTVM7CisgIG9wdGlvbi0+bm9fY2xvc2VkX3N0cmVhbXMgPSB2YWw7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X21heF9vdXRib3VuZF9hY2sobmdodHRwMl9vcHRpb24gKm9wdGlvbiwgc2l6ZV90IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9NQVhfT1VUQk9VTkRfQUNLOworICBvcHRpb24tPm1heF9vdXRib3VuZF9hY2sgPSB2YWw7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX29wdGlvbi5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc0MGFhCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vcHRpb24uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfT1BUSU9OX0gKKyNkZWZpbmUgTkdIVFRQMl9PUFRJT05fSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisKKy8qKgorICogQ29uZmlndXJhdGlvbiBvcHRpb25zCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKgorICAgKiBUaGlzIG9wdGlvbiBwcmV2ZW50cyB0aGUgbGlicmFyeSBmcm9tIHNlbmRpbmcgV0lORE9XX1VQREFURSBmb3IgYQorICAgKiBjb25uZWN0aW9uIGF1dG9tYXRpY2FsbHkuICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gbm9uemVybywgdGhlCisgICAqIGxpYnJhcnkgd29uJ3Qgc2VuZCBXSU5ET1dfVVBEQVRFIGZvciBEQVRBIHVudGlsIGFwcGxpY2F0aW9uIGNhbGxzCisgICAqIG5naHR0cDJfc2Vzc2lvbl9jb25zdW1lKCkgdG8gaW5kaWNhdGUgdGhlIGFtb3VudCBvZiBjb25zdW1lZAorICAgKiBEQVRBLiAgQnkgZGVmYXVsdCwgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHplcm8uCisgICAqLworICBOR0hUVFAyX09QVF9OT19BVVRPX1dJTkRPV19VUERBVEUgPSAxLAorICAvKioKKyAgICogVGhpcyBvcHRpb24gc2V0cyB0aGUgU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyB2YWx1ZSBvZgorICAgKiByZW1vdGUgZW5kcG9pbnQgYXMgaWYgaXQgaXMgcmVjZWl2ZWQgaW4gU0VUVElOR1MgZnJhbWUuIFdpdGhvdXQKKyAgICogc3BlY2lmeWluZyB0aGlzIG9wdGlvbiwgYmVmb3JlIHRoZSBsb2NhbCBlbmRwb2ludCByZWNlaXZlcworICAgKiBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIGluIFNFVFRJTkdTIGZyYW1lIGZyb20gcmVtb3RlCisgICAqIGVuZHBvaW50LCBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIGlzIHVubGltaXRlZC4gVGhpcyBtYXkKKyAgICogY2F1c2UgcHJvYmxlbSBpZiBsb2NhbCBlbmRwb2ludCBzdWJtaXRzIGxvdHMgb2YgcmVxdWVzdHMKKyAgICogaW5pdGlhbGx5IGFuZCBzZW5kaW5nIHRoZW0gYXQgb25jZSB0byB0aGUgcmVtb3RlIHBlZXIgbWF5IGxlYWQgdG8KKyAgICogdGhlIHJlamVjdGlvbiBvZiBzb21lIHJlcXVlc3RzLiBTcGVjaWZ5aW5nIHRoaXMgb3B0aW9uIHRvIHRoZQorICAgKiBzZW5zaWJsZSB2YWx1ZSwgc2F5IDEwMCwgbWF5IGF2b2lkIHRoaXMga2luZCBvZiBpc3N1ZS4gVGhpcyB2YWx1ZQorICAgKiB3aWxsIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBsb2NhbCBlbmRwb2ludCByZWNlaXZlcworICAgKiBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludC4KKyAgICovCisgIE5HSFRUUDJfT1BUX1BFRVJfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyA9IDEgPDwgMSwKKyAgTkdIVFRQMl9PUFRfTk9fUkVDVl9DTElFTlRfTUFHSUMgPSAxIDw8IDIsCisgIE5HSFRUUDJfT1BUX05PX0hUVFBfTUVTU0FHSU5HID0gMSA8PCAzLAorICBOR0hUVFAyX09QVF9NQVhfUkVTRVJWRURfUkVNT1RFX1NUUkVBTVMgPSAxIDw8IDQsCisgIE5HSFRUUDJfT1BUX1VTRVJfUkVDVl9FWFRfVFlQRVMgPSAxIDw8IDUsCisgIE5HSFRUUDJfT1BUX05PX0FVVE9fUElOR19BQ0sgPSAxIDw8IDYsCisgIE5HSFRUUDJfT1BUX0JVSUxUSU5fUkVDVl9FWFRfVFlQRVMgPSAxIDw8IDcsCisgIE5HSFRUUDJfT1BUX01BWF9TRU5EX0hFQURFUl9CTE9DS19MRU5HVEggPSAxIDw8IDgsCisgIE5HSFRUUDJfT1BUX01BWF9ERUZMQVRFX0RZTkFNSUNfVEFCTEVfU0laRSA9IDEgPDwgOSwKKyAgTkdIVFRQMl9PUFRfTk9fQ0xPU0VEX1NUUkVBTVMgPSAxIDw8IDEwLAorICBOR0hUVFAyX09QVF9NQVhfT1VUQk9VTkRfQUNLID0gMSA8PCAxMSwKK30gbmdodHRwMl9vcHRpb25fZmxhZzsKKworLyoqCisgKiBTdHJ1Y3QgdG8gc3RvcmUgb3B0aW9uIHZhbHVlcyBmb3IgbmdodHRwMl9zZXNzaW9uLgorICovCitzdHJ1Y3QgbmdodHRwMl9vcHRpb24geworICAvKioKKyAgICogTkdIVFRQMl9PUFRfTUFYX1NFTkRfSEVBREVSX0JMT0NLX0xFTkdUSAorICAgKi8KKyAgc2l6ZV90IG1heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGg7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9NQVhfREVGTEFURV9EWU5BTUlDX1RBQkxFX1NJWkUKKyAgICovCisgIHNpemVfdCBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemU7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9NQVhfT1VUQk9VTkRfQUNLCisgICAqLworICBzaXplX3QgbWF4X291dGJvdW5kX2FjazsKKyAgLyoqCisgICAqIEJpdHdpc2UgT1Igb2YgbmdodHRwMl9vcHRpb25fZmxhZyB0byBkZXRlcm1pbmUgdGhhdCB3aGljaCBmaWVsZHMKKyAgICogYXJlIHNwZWNpZmllZC4KKyAgICovCisgIHVpbnQzMl90IG9wdF9zZXRfbWFzazsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX1BFRVJfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUworICAgKi8KKyAgdWludDMyX3QgcGVlcl9tYXhfY29uY3VycmVudF9zdHJlYW1zOworICAvKioKKyAgICogTkdIVFRQMl9PUFRfTUFYX1JFU0VSVkVEX1JFTU9URV9TVFJFQU1TCisgICAqLworICB1aW50MzJfdCBtYXhfcmVzZXJ2ZWRfcmVtb3RlX3N0cmVhbXM7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9CVUlMVElOX1JFQ1ZfRVhUX1RZUEVTCisgICAqLworICB1aW50MzJfdCBidWlsdGluX3JlY3ZfZXh0X3R5cGVzOworICAvKioKKyAgICogTkdIVFRQMl9PUFRfTk9fQVVUT19XSU5ET1dfVVBEQVRFCisgICAqLworICBpbnQgbm9fYXV0b193aW5kb3dfdXBkYXRlOworICAvKioKKyAgICogTkdIVFRQMl9PUFRfTk9fUkVDVl9DTElFTlRfTUFHSUMKKyAgICovCisgIGludCBub19yZWN2X2NsaWVudF9tYWdpYzsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX05PX0hUVFBfTUVTU0FHSU5HCisgICAqLworICBpbnQgbm9faHR0cF9tZXNzYWdpbmc7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9OT19BVVRPX1BJTkdfQUNLCisgICAqLworICBpbnQgbm9fYXV0b19waW5nX2FjazsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX05PX0NMT1NFRF9TVFJFQU1TCisgICAqLworICBpbnQgbm9fY2xvc2VkX3N0cmVhbXM7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9VU0VSX1JFQ1ZfRVhUX1RZUEVTCisgICAqLworICB1aW50OF90IHVzZXJfcmVjdl9leHRfdHlwZXNbMzJdOworfTsKKworI2VuZGlmIC8qIE5HSFRUUDJfT1BUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfb3V0Ym91bmRfaXRlbS5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vdXRib3VuZF9pdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1MWM4MAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfb3V0Ym91bmRfaXRlbS5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX291dGJvdW5kX2l0ZW0uaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit2b2lkIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9pbml0KG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSkgeworICBpdGVtLT5jeWNsZSA9IDA7CisgIGl0ZW0tPnFuZXh0ID0gTlVMTDsKKyAgaXRlbS0+cXVldWVkID0gMDsKKworICBtZW1zZXQoJml0ZW0tPmF1eF9kYXRhLCAwLCBzaXplb2YobmdodHRwMl9hdXhfZGF0YSkpOworfQorCit2b2lkIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9mcmVlKG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKworICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgc3dpdGNoIChmcmFtZS0+aGQudHlwZSkgeworICBjYXNlIE5HSFRUUDJfREFUQToKKyAgICBuZ2h0dHAyX2ZyYW1lX2RhdGFfZnJlZSgmZnJhbWUtPmRhdGEpOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfSEVBREVSUzoKKyAgICBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfZnJlZSgmZnJhbWUtPmhlYWRlcnMsIG1lbSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9QUklPUklUWToKKyAgICBuZ2h0dHAyX2ZyYW1lX3ByaW9yaXR5X2ZyZWUoJmZyYW1lLT5wcmlvcml0eSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgIG5naHR0cDJfZnJhbWVfcnN0X3N0cmVhbV9mcmVlKCZmcmFtZS0+cnN0X3N0cmVhbSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HUzoKKyAgICBuZ2h0dHAyX2ZyYW1lX3NldHRpbmdzX2ZyZWUoJmZyYW1lLT5zZXR0aW5ncywgbWVtKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1BVU0hfUFJPTUlTRToKKyAgICBuZ2h0dHAyX2ZyYW1lX3B1c2hfcHJvbWlzZV9mcmVlKCZmcmFtZS0+cHVzaF9wcm9taXNlLCBtZW0pOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfUElORzoKKyAgICBuZ2h0dHAyX2ZyYW1lX3BpbmdfZnJlZSgmZnJhbWUtPnBpbmcpOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfR09BV0FZOgorICAgIG5naHR0cDJfZnJhbWVfZ29hd2F5X2ZyZWUoJmZyYW1lLT5nb2F3YXksIG1lbSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9XSU5ET1dfVVBEQVRFOgorICAgIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9mcmVlKCZmcmFtZS0+d2luZG93X3VwZGF0ZSk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6IHsKKyAgICBuZ2h0dHAyX2V4dF9hdXhfZGF0YSAqYXV4X2RhdGE7CisKKyAgICBhdXhfZGF0YSA9ICZpdGVtLT5hdXhfZGF0YS5leHQ7CisKKyAgICBpZiAoYXV4X2RhdGEtPmJ1aWx0aW4gPT0gMCkgeworICAgICAgbmdodHRwMl9mcmFtZV9leHRlbnNpb25fZnJlZSgmZnJhbWUtPmV4dCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGZyYW1lLT5oZC50eXBlKSB7CisgICAgY2FzZSBOR0hUVFAyX0FMVFNWQzoKKyAgICAgIG5naHR0cDJfZnJhbWVfYWx0c3ZjX2ZyZWUoJmZyYW1lLT5leHQsIG1lbSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfT1JJR0lOOgorICAgICAgbmdodHRwMl9mcmFtZV9vcmlnaW5fZnJlZSgmZnJhbWUtPmV4dCwgbWVtKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBhc3NlcnQoMCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgfQorfQorCit2b2lkIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfaW5pdChuZ2h0dHAyX291dGJvdW5kX3F1ZXVlICpxKSB7CisgIHEtPmhlYWQgPSBxLT50YWlsID0gTlVMTDsKKyAgcS0+biA9IDA7Cit9CisKK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wdXNoKG5naHR0cDJfb3V0Ym91bmRfcXVldWUgKnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0pIHsKKyAgaWYgKHEtPnRhaWwpIHsKKyAgICBxLT50YWlsID0gcS0+dGFpbC0+cW5leHQgPSBpdGVtOworICB9IGVsc2UgeworICAgIHEtPmhlYWQgPSBxLT50YWlsID0gaXRlbTsKKyAgfQorICArK3EtPm47Cit9CisKK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wb3AobmdodHRwMl9vdXRib3VuZF9xdWV1ZSAqcSkgeworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIGlmICghcS0+aGVhZCkgeworICAgIHJldHVybjsKKyAgfQorICBpdGVtID0gcS0+aGVhZDsKKyAgcS0+aGVhZCA9IHEtPmhlYWQtPnFuZXh0OworICBpdGVtLT5xbmV4dCA9IE5VTEw7CisgIGlmICghcS0+aGVhZCkgeworICAgIHEtPnRhaWwgPSBOVUxMOworICB9CisgIC0tcS0+bjsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfb3V0Ym91bmRfaXRlbS5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vdXRib3VuZF9pdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmNTAzYQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfb3V0Ym91bmRfaXRlbS5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9PVVRCT1VORF9JVEVNX0gKKyNkZWZpbmUgTkdIVFRQMl9PVVRCT1VORF9JVEVNX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorI2luY2x1ZGUgIm5naHR0cDJfZnJhbWUuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX21lbS5oIgorCisvKiBzdHJ1Y3QgdXNlZCBmb3IgSEVBREVSUyBhbmQgUFVTSF9QUk9NSVNFIGZyYW1lICovCit0eXBlZGVmIHN0cnVjdCB7CisgIG5naHR0cDJfZGF0YV9wcm92aWRlciBkYXRhX3ByZDsKKyAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YTsKKyAgLyogZXJyb3IgY29kZSB3aGVuIHJlcXVlc3QgSEVBREVSUyBpcyBjYW5jZWxlZCBieSBSU1RfU1RSRUFNIHdoaWxlCisgICAgIGl0IGlzIGluIHF1ZXVlLiAqLworICB1aW50MzJfdCBlcnJvcl9jb2RlOworICAvKiBub256ZXJvIGlmIHJlcXVlc3QgSEVBREVSUyBpcyBjYW5jZWxlZC4gIFRoZSBlcnJvciBjb2RlIGlzIHN0b3JlZAorICAgICBpbiB8ZXJyb3JfY29kZXwuICovCisgIHVpbnQ4X3QgY2FuY2VsZWQ7Cit9IG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YTsKKworLyogc3RydWN0IHVzZWQgZm9yIERBVEEgZnJhbWUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBkYXRhIHRvIGJlIHNlbnQgZm9yIHRoaXMgREFUQSBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfZGF0YV9wcm92aWRlciBkYXRhX3ByZDsKKyAgLyoqCisgICAqIFRoZSBmbGFncyBvZiBEQVRBIGZyYW1lLiAgV2UgdXNlIHNlcGFyYXRlIGZsYWdzIGhlcmUgYW5kCisgICAqIG5naHR0cDJfZGF0YSBmcmFtZS4gIFRoZSBsYXR0ZXIgY29udGFpbnMgZmxhZ3MgYWN0dWFsbHkgc2VudCB0bworICAgKiBwZWVyLiAgVGhpcyB8ZmxhZ3N8IG1heSBjb250YWluIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNIGFuZCBvbmx5CisgICAqIHdoZW4gfGVvZnwgYmVjb21lcyBub256ZXJvLCBmbGFncyBpbiBuZ2h0dHAyX2RhdGEgaGFzCisgICAqIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNIHNldC4KKyAgICovCisgIHVpbnQ4X3QgZmxhZ3M7CisgIC8qKgorICAgKiBUaGUgZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIEVPRiB3YXMgcmVhY2hlZCBvciBub3QuIEluaXRpYWxseQorICAgKiB8ZW9mfCBpcyAwLiBJdCBiZWNvbWVzIDEgYWZ0ZXIgYWxsIGRhdGEgd2VyZSByZWFkLgorICAgKi8KKyAgdWludDhfdCBlb2Y7CisgIC8qKgorICAgKiBUaGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IE5HSFRUUDJfREFUQV9GTEFHX05PX0NPUFkgaXMgdXNlZC4KKyAgICovCisgIHVpbnQ4X3Qgbm9fY29weTsKK30gbmdodHRwMl9kYXRhX2F1eF9kYXRhOworCit0eXBlZGVmIGVudW0geworICBOR0hUVFAyX0dPQVdBWV9BVVhfTk9ORSA9IDB4MCwKKyAgLyogaW5kaWNhdGVzIHRoYXQgc2Vzc2lvbiBzaG91bGQgYmUgdGVybWluYXRlZCBhZnRlciB0aGUKKyAgICAgdHJhbnNtaXNzaW9uIG9mIHRoaXMgZnJhbWUuICovCisgIE5HSFRUUDJfR09BV0FZX0FVWF9URVJNX09OX1NFTkQgPSAweDEsCisgIC8qIGluZGljYXRlcyB0aGF0IHRoaXMgR09BV0FZIGlzIGp1c3QgYSBub3RpZmljYXRpb24gZm9yIGdyYWNlZnVsCisgICAgIHNodXRkb3duLiAgTm8gbmdodHRwMl9zZXNzaW9uLmdvYXdheV9mbGFncyBzaG91bGQgYmUgdXBkYXRlZCBvbgorICAgICB0aGUgcmVhY3Rpb24gdG8gdGhpcyBmcmFtZS4gKi8KKyAgTkdIVFRQMl9HT0FXQVlfQVVYX1NIVVRET1dOX05PVElDRSA9IDB4MgorfSBuZ2h0dHAyX2dvYXdheV9hdXhfZmxhZzsKKworLyogc3RydWN0IHVzZWQgZm9yIEdPQVdBWSBmcmFtZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBiaXR3aXNlLU9SIG9mIG9uZSBvciBtb3JlIG9mIG5naHR0cDJfZ29hd2F5X2F1eF9mbGFnLiAqLworICB1aW50OF90IGZsYWdzOworfSBuZ2h0dHAyX2dvYXdheV9hdXhfZGF0YTsKKworLyogc3RydWN0IHVzZWQgZm9yIGV4dGVuc2lvbiBmcmFtZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBub256ZXJvIGlmIHRoaXMgZXh0ZW5zaW9uIGZyYW1lIGlzIHNlcmlhbGl6ZWQgYnkgbGlicmFyeQorICAgICBmdW5jdGlvbiwgaW5zdGVhZCBvZiB1c2VyLWRlZmluZWQgY2FsbGJhY2tzLiAqLworICB1aW50OF90IGJ1aWx0aW47Cit9IG5naHR0cDJfZXh0X2F1eF9kYXRhOworCisvKiBBZGRpdGlvbmFsIGRhdGEgd2hpY2ggY2Fubm90IGJlIHN0b3JlZCBpbiBuZ2h0dHAyX2ZyYW1lIHN0cnVjdCAqLwordHlwZWRlZiB1bmlvbiB7CisgIG5naHR0cDJfZGF0YV9hdXhfZGF0YSBkYXRhOworICBuZ2h0dHAyX2hlYWRlcnNfYXV4X2RhdGEgaGVhZGVyczsKKyAgbmdodHRwMl9nb2F3YXlfYXV4X2RhdGEgZ29hd2F5OworICBuZ2h0dHAyX2V4dF9hdXhfZGF0YSBleHQ7Cit9IG5naHR0cDJfYXV4X2RhdGE7CisKK3N0cnVjdCBuZ2h0dHAyX291dGJvdW5kX2l0ZW07Cit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gbmdodHRwMl9vdXRib3VuZF9pdGVtOworCitzdHJ1Y3QgbmdodHRwMl9vdXRib3VuZF9pdGVtIHsKKyAgbmdodHRwMl9mcmFtZSBmcmFtZTsKKyAgLyogU3RvcmFnZSBmb3IgZXh0ZW5zaW9uIGZyYW1lIHBheWxvYWQuICBmcmFtZS0+ZXh0LnBheWxvYWQgcG9pbnRzCisgICAgIHRvIHRoaXMgc3RydWN0dXJlIHRvIGF2b2lkIGZyZXF1ZW50IG1lbW9yeSBhbGxvY2F0aW9uLiAqLworICBuZ2h0dHAyX2V4dF9mcmFtZV9wYXlsb2FkIGV4dF9mcmFtZV9wYXlsb2FkOworICBuZ2h0dHAyX2F1eF9kYXRhIGF1eF9kYXRhOworICAvKiBUaGUgcHJpb3JpdHkgdXNlZCBpbiBwcmlvcml0eSBjb21wYXJpb24uICBTbWFsbGVyIGlzIHNlcnZlZAorICAgICBlYXJsaWVyLiAgRm9yIFBJTkcsIFNFVFRJTkdTIGFuZCBub24tREFUQSBmcmFtZXMgKGV4Y2x1ZGluZworICAgICByZXNwb25zZSBIRUFERVJTIGZyYW1lKSBoYXZlIGRlZGljYXRlZCBjeWNsZSB2YWx1ZSBkZWZpbmVkIGFib3ZlLgorICAgICBGb3IgREFUQSBmcmFtZSwgY3ljbGUgaXMgY29tcHV0ZWQgYnkgdGFraW5nIGludG8gYWNjb3VudCBvZgorICAgICBlZmZlY3RpdmUgd2VpZ2h0IGFuZCBmcmFtZSBwYXlsb2FkIGxlbmd0aCBwcmV2aW91c2x5IHNlbnQsIHNvCisgICAgIHRoYXQgdGhlIGFtb3VudCBvZiB0cmFuc21pc3Npb24gaXMgZGlzdHJpYnV0ZWQgYWNyb3NzIHN0cmVhbXMKKyAgICAgcHJvcG9ydGlvbmFsIHRvIGVmZmVjdGl2ZSB3ZWlnaHQgKGluc2lkZSBhIHRyZWUpLiAqLworICB1aW50NjRfdCBjeWNsZTsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICpxbmV4dDsKKyAgLyogbm9uemVybyBpZiB0aGlzIG9iamVjdCBpcyBxdWV1ZWQsIGV4Y2VwdCBmb3IgREFUQSBvciBIRUFERVJTCisgICAgIHdoaWNoIGFyZSBhdHRhY2hlZCB0byBzdHJlYW0gYXMgaXRlbS4gKi8KKyAgdWludDhfdCBxdWV1ZWQ7Cit9OworCisvKgorICogSW5pdGlhbGl6ZXMgfGl0ZW18LiAgTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgZG9uZSBpbiB0aGlzIGZ1bmN0aW9uLgorICogRG9uJ3QgY2FsbCBuZ2h0dHAyX291dGJvdW5kX2l0ZW1fZnJlZSgpIHVudGlsIGZyYW1lIG1lbWJlciBpcworICogaW5pdGlhbGl6ZWQuCisgKi8KK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQobmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKTsKKworLyoKKyAqIERlYWxsb2NhdGVzIHJlc291cmNlIGZvciB8aXRlbXwuIElmIHxpdGVtfCBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uCisgKiBkb2VzIG5vdGhpbmcuCisgKi8KK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9pdGVtX2ZyZWUobmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIHF1ZXVlIGZvciBuZ2h0dHAyX291dGJvdW5kX2l0ZW0uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICpoZWFkLCAqdGFpbDsKKyAgLyogbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgcXVldWUuICovCisgIHNpemVfdCBuOworfSBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlOworCit2b2lkIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfaW5pdChuZ2h0dHAyX291dGJvdW5kX3F1ZXVlICpxKTsKKworLyogUHVzaGVzIHxpdGVtfCBpbnRvIHxxfCAqLwordm9pZCBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3B1c2gobmdodHRwMl9vdXRib3VuZF9xdWV1ZSAqcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSk7CisKKy8qIFBvcHMgfGl0ZW18IGF0IHRoZSB0b3AgZnJvbSB8cXwuICBJZiB8cXwgaXMgZW1wdHksIG5vdGhpbmcKKyAgIGhhcHBlbnMuICovCit2b2lkIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcG9wKG5naHR0cDJfb3V0Ym91bmRfcXVldWUgKnEpOworCisvKiBSZXR1cm5zIHRoZSB0b3AgaXRlbS4gKi8KKyNkZWZpbmUgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoUSkgKChRKS0+aGVhZCkKKworLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcXVldWUgKi8KKyNkZWZpbmUgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9zaXplKFEpICgoUSktPm4pCisKKyNlbmRpZiAvKiBOR0hUVFAyX09VVEJPVU5EX0lURU1fSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9wcS5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9wcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYmNjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3BxLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfcHEuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX2hlbHBlci5oIgorCitpbnQgbmdodHRwMl9wcV9pbml0KG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX2xlc3MgbGVzcywgbmdodHRwMl9tZW0gKm1lbSkgeworICBwcS0+bWVtID0gbWVtOworICBwcS0+Y2FwYWNpdHkgPSAwOworICBwcS0+cSA9IE5VTEw7CisgIHBxLT5sZW5ndGggPSAwOworICBwcS0+bGVzcyA9IGxlc3M7CisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfcHFfZnJlZShuZ2h0dHAyX3BxICpwcSkgeworICBuZ2h0dHAyX21lbV9mcmVlKHBxLT5tZW0sIHBxLT5xKTsKKyAgcHEtPnEgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzd2FwKG5naHR0cDJfcHEgKnBxLCBzaXplX3QgaSwgc2l6ZV90IGopIHsKKyAgbmdodHRwMl9wcV9lbnRyeSAqYSA9IHBxLT5xW2ldOworICBuZ2h0dHAyX3BxX2VudHJ5ICpiID0gcHEtPnFbal07CisKKyAgcHEtPnFbaV0gPSBiOworICBiLT5pbmRleCA9IGk7CisgIHBxLT5xW2pdID0gYTsKKyAgYS0+aW5kZXggPSBqOworfQorCitzdGF0aWMgdm9pZCBidWJibGVfdXAobmdodHRwMl9wcSAqcHEsIHNpemVfdCBpbmRleCkgeworICBzaXplX3QgcGFyZW50OworICB3aGlsZSAoaW5kZXggIT0gMCkgeworICAgIHBhcmVudCA9IChpbmRleCAtIDEpIC8gMjsKKyAgICBpZiAoIXBxLT5sZXNzKHBxLT5xW2luZGV4XSwgcHEtPnFbcGFyZW50XSkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3dhcChwcSwgcGFyZW50LCBpbmRleCk7CisgICAgaW5kZXggPSBwYXJlbnQ7CisgIH0KK30KKworaW50IG5naHR0cDJfcHFfcHVzaChuZ2h0dHAyX3BxICpwcSwgbmdodHRwMl9wcV9lbnRyeSAqaXRlbSkgeworICBpZiAocHEtPmNhcGFjaXR5IDw9IHBxLT5sZW5ndGgpIHsKKyAgICB2b2lkICpucTsKKyAgICBzaXplX3QgbmNhcGFjaXR5OworCisgICAgbmNhcGFjaXR5ID0gbmdodHRwMl9tYXgoNCwgKHBxLT5jYXBhY2l0eSAqIDIpKTsKKworICAgIG5xID0gbmdodHRwMl9tZW1fcmVhbGxvYyhwcS0+bWVtLCBwcS0+cSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNhcGFjaXR5ICogc2l6ZW9mKG5naHR0cDJfcHFfZW50cnkgKikpOworICAgIGlmIChucSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgfQorICAgIHBxLT5jYXBhY2l0eSA9IG5jYXBhY2l0eTsKKyAgICBwcS0+cSA9IG5xOworICB9CisgIHBxLT5xW3BxLT5sZW5ndGhdID0gaXRlbTsKKyAgaXRlbS0+aW5kZXggPSBwcS0+bGVuZ3RoOworICArK3BxLT5sZW5ndGg7CisgIGJ1YmJsZV91cChwcSwgcHEtPmxlbmd0aCAtIDEpOworICByZXR1cm4gMDsKK30KKworbmdodHRwMl9wcV9lbnRyeSAqbmdodHRwMl9wcV90b3AobmdodHRwMl9wcSAqcHEpIHsKKyAgaWYgKHBxLT5sZW5ndGggPT0gMCkgeworICAgIHJldHVybiBOVUxMOworICB9IGVsc2UgeworICAgIHJldHVybiBwcS0+cVswXTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBidWJibGVfZG93bihuZ2h0dHAyX3BxICpwcSwgc2l6ZV90IGluZGV4KSB7CisgIHNpemVfdCBpLCBqLCBtaW5pbmRleDsKKyAgZm9yICg7OykgeworICAgIGogPSBpbmRleCAqIDIgKyAxOworICAgIG1pbmluZGV4ID0gaW5kZXg7CisgICAgZm9yIChpID0gMDsgaSA8IDI7ICsraSwgKytqKSB7CisgICAgICBpZiAoaiA+PSBwcS0+bGVuZ3RoKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKHBxLT5sZXNzKHBxLT5xW2pdLCBwcS0+cVttaW5pbmRleF0pKSB7CisgICAgICAgIG1pbmluZGV4ID0gajsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKG1pbmluZGV4ID09IGluZGV4KSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHN3YXAocHEsIGluZGV4LCBtaW5pbmRleCk7CisgICAgaW5kZXggPSBtaW5pbmRleDsKKyAgfQorfQorCit2b2lkIG5naHR0cDJfcHFfcG9wKG5naHR0cDJfcHEgKnBxKSB7CisgIGlmIChwcS0+bGVuZ3RoID4gMCkgeworICAgIHBxLT5xWzBdID0gcHEtPnFbcHEtPmxlbmd0aCAtIDFdOworICAgIHBxLT5xWzBdLT5pbmRleCA9IDA7CisgICAgLS1wcS0+bGVuZ3RoOworICAgIGJ1YmJsZV9kb3duKHBxLCAwKTsKKyAgfQorfQorCit2b2lkIG5naHR0cDJfcHFfcmVtb3ZlKG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX3BxX2VudHJ5ICppdGVtKSB7CisgIGFzc2VydChwcS0+cVtpdGVtLT5pbmRleF0gPT0gaXRlbSk7CisKKyAgaWYgKGl0ZW0tPmluZGV4ID09IDApIHsKKyAgICBuZ2h0dHAyX3BxX3BvcChwcSk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGl0ZW0tPmluZGV4ID09IHBxLT5sZW5ndGggLSAxKSB7CisgICAgLS1wcS0+bGVuZ3RoOworICAgIHJldHVybjsKKyAgfQorCisgIHBxLT5xW2l0ZW0tPmluZGV4XSA9IHBxLT5xW3BxLT5sZW5ndGggLSAxXTsKKyAgcHEtPnFbaXRlbS0+aW5kZXhdLT5pbmRleCA9IGl0ZW0tPmluZGV4OworICAtLXBxLT5sZW5ndGg7CisKKyAgaWYgKHBxLT5sZXNzKGl0ZW0sIHBxLT5xW2l0ZW0tPmluZGV4XSkpIHsKKyAgICBidWJibGVfZG93bihwcSwgaXRlbS0+aW5kZXgpOworICB9IGVsc2UgeworICAgIGJ1YmJsZV91cChwcSwgaXRlbS0+aW5kZXgpOworICB9Cit9CisKK2ludCBuZ2h0dHAyX3BxX2VtcHR5KG5naHR0cDJfcHEgKnBxKSB7IHJldHVybiBwcS0+bGVuZ3RoID09IDA7IH0KKworc2l6ZV90IG5naHR0cDJfcHFfc2l6ZShuZ2h0dHAyX3BxICpwcSkgeyByZXR1cm4gcHEtPmxlbmd0aDsgfQorCit2b2lkIG5naHR0cDJfcHFfdXBkYXRlKG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX3BxX2l0ZW1fY2IgZnVuLCB2b2lkICphcmcpIHsKKyAgc2l6ZV90IGk7CisgIGludCBydiA9IDA7CisgIGlmIChwcS0+bGVuZ3RoID09IDApIHsKKyAgICByZXR1cm47CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IHBxLT5sZW5ndGg7ICsraSkgeworICAgIHJ2IHw9ICgqZnVuKShwcS0+cVtpXSwgYXJnKTsKKyAgfQorICBpZiAocnYpIHsKKyAgICBmb3IgKGkgPSBwcS0+bGVuZ3RoOyBpID4gMDsgLS1pKSB7CisgICAgICBidWJibGVfZG93bihwcSwgaSAtIDEpOworICAgIH0KKyAgfQorfQorCitpbnQgbmdodHRwMl9wcV9lYWNoKG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX3BxX2l0ZW1fY2IgZnVuLCB2b2lkICphcmcpIHsKKyAgc2l6ZV90IGk7CisKKyAgaWYgKHBxLT5sZW5ndGggPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisgIGZvciAoaSA9IDA7IGkgPCBwcS0+bGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoKCpmdW4pKHBxLT5xW2ldLCBhcmcpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3BxLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3BxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ3YjcwMgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcHEuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfUFFfSAorI2RlZmluZSBOR0hUVFAyX1BRX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorI2luY2x1ZGUgIm5naHR0cDJfaW50LmgiCisjaW5jbHVkZSAibmdodHRwMl9tZW0uaCIKKworLyogSW1wbGVtZW50YXRpb24gb2YgcHJpb3JpdHkgcXVldWUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzaXplX3QgaW5kZXg7Cit9IG5naHR0cDJfcHFfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogVGhlIHBvaW50ZXIgdG8gdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZW0gc3RvcmVkICovCisgIG5naHR0cDJfcHFfZW50cnkgKipxOworICAvKiBNZW1vcnkgYWxsb2NhdG9yICovCisgIG5naHR0cDJfbWVtICptZW07CisgIC8qIFRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkICovCisgIHNpemVfdCBsZW5ndGg7CisgIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGlzIHBxIGNhbiBzdG9yZS4gVGhpcyBpcworICAgICBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHdoZW4gbGVuZ3RoIGlzIHJlYWNoZWQgdG8gdGhpcyB2YWx1ZS4gKi8KKyAgc2l6ZV90IGNhcGFjaXR5OworICAvKiBUaGUgbGVzcyBmdW5jdGlvbiBiZXR3ZWVuIGl0ZW1zICovCisgIG5naHR0cDJfbGVzcyBsZXNzOworfSBuZ2h0dHAyX3BxOworCisvKgorICogSW5pdGlhbGl6ZXMgcHJpb3JpdHkgcXVldWUgfHBxfCB3aXRoIGNvbXBhcmUgZnVuY3Rpb24gfGNtcHwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX3BxX2luaXQobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfbGVzcyBsZXNzLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIERlYWxsb2NhdGVzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB8cHF8LiAgVGhlIHN0b3JlZCBpdGVtcyBhcmUKKyAqIG5vdCBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIG5naHR0cDJfcHFfZnJlZShuZ2h0dHAyX3BxICpwcSk7CisKKy8qCisgKiBBZGRzIHxpdGVtfCB0byB0aGUgcHJpb3JpdHkgcXVldWUgfHBxfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfcHFfcHVzaChuZ2h0dHAyX3BxICpwcSwgbmdodHRwMl9wcV9lbnRyeSAqaXRlbSk7CisKKy8qCisgKiBSZXR1cm5zIGl0ZW0gYXQgdGhlIHRvcCBvZiB0aGUgcXVldWUgfHBxfC4gSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LAorICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK25naHR0cDJfcHFfZW50cnkgKm5naHR0cDJfcHFfdG9wKG5naHR0cDJfcHEgKnBxKTsKKworLyoKKyAqIFBvcHMgaXRlbSBhdCB0aGUgdG9wIG9mIHRoZSBxdWV1ZSB8cHF8LiBUaGUgcG9wcGVkIGl0ZW0gaXMgbm90CisgKiBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIG5naHR0cDJfcHFfcG9wKG5naHR0cDJfcHEgKnBxKTsKKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiB0aGUgcXVldWUgfHBxfCBpcyBlbXB0eS4KKyAqLworaW50IG5naHR0cDJfcHFfZW1wdHkobmdodHRwMl9wcSAqcHEpOworCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZSB8cHF8LgorICovCitzaXplX3QgbmdodHRwMl9wcV9zaXplKG5naHR0cDJfcHEgKnBxKTsKKwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX3BxX2l0ZW1fY2IpKG5naHR0cDJfcHFfZW50cnkgKml0ZW0sIHZvaWQgKmFyZyk7CisKKy8qCisgKiBVcGRhdGVzIGVhY2ggaXRlbSBpbiB8cHF8IHVzaW5nIGZ1bmN0aW9uIHxmdW58IGFuZCByZS1jb25zdHJ1Y3QKKyAqIHByaW9yaXR5IHF1ZXVlLiBUaGUgfGZ1bnwgbXVzdCByZXR1cm4gbm9uLXplcm8gaWYgaXQgbW9kaWZpZXMgdGhlCisgKiBpdGVtIGluIGEgd2F5IHRoYXQgaXQgYWZmZWN0cyBvcmRlcmluZyBpbiB0aGUgcHJpb3JpdHkgcXVldWUuIFRoZQorICogfGFyZ3wgaXMgcGFzc2VkIHRvIHRoZSAybmQgcGFyYW1ldGVyIG9mIHxmdW58LgorICovCit2b2lkIG5naHR0cDJfcHFfdXBkYXRlKG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX3BxX2l0ZW1fY2IgZnVuLCB2b2lkICphcmcpOworCisvKgorICogQXBwbHlzIHxmdW58IHRvIGVhY2ggaXRlbSBpbiB8cHF8LiAgVGhlIHxhcmd8IGlzIHBhc3NlZCBhcyBhcmcKKyAqIHBhcmFtZXRlciB0byBjYWxsYmFjayBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgY2hhbmdlIHRoZQorICogb3JkZXJpbmcga2V5LiAgSWYgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGNhbGxiYWNrIGlzIG5vbnplcm8sIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgMSBpbW1lZGlhdGVseSB3aXRob3V0IGl0ZXJhdGluZyByZW1haW5pbmcgaXRlbXMuCisgKiBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAuCisgKi8KK2ludCBuZ2h0dHAyX3BxX2VhY2gobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfcHFfaXRlbV9jYiBmdW4sIHZvaWQgKmFyZyk7CisKKy8qCisgKiBSZW1vdmVzIHxpdGVtfCBmcm9tIHByaW9yaXR5IHF1ZXVlLgorICovCit2b2lkIG5naHR0cDJfcHFfcmVtb3ZlKG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX3BxX2VudHJ5ICppdGVtKTsKKworI2VuZGlmIC8qIE5HSFRUUDJfUFFfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9wcmlvcml0eV9zcGVjLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3ByaW9yaXR5X3NwZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjE5NmUzCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9wcmlvcml0eV9zcGVjLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9wcmlvcml0eV9zcGVjLmgiCisKK3ZvaWQgbmdodHRwMl9wcmlvcml0eV9zcGVjX2luaXQobmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIGludDMyX3Qgd2VpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhjbHVzaXZlKSB7CisgIHByaV9zcGVjLT5zdHJlYW1faWQgPSBzdHJlYW1faWQ7CisgIHByaV9zcGVjLT53ZWlnaHQgPSB3ZWlnaHQ7CisgIHByaV9zcGVjLT5leGNsdXNpdmUgPSBleGNsdXNpdmUgIT0gMDsKK30KKwordm9pZCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpIHsKKyAgcHJpX3NwZWMtPnN0cmVhbV9pZCA9IDA7CisgIHByaV9zcGVjLT53ZWlnaHQgPSBOR0hUVFAyX0RFRkFVTFRfV0VJR0hUOworICBwcmlfc3BlYy0+ZXhjbHVzaXZlID0gMDsKK30KKworaW50IG5naHR0cDJfcHJpb3JpdHlfc3BlY19jaGVja19kZWZhdWx0KGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpIHsKKyAgcmV0dXJuIHByaV9zcGVjLT5zdHJlYW1faWQgPT0gMCAmJgorICAgICAgICAgcHJpX3NwZWMtPndlaWdodCA9PSBOR0hUVFAyX0RFRkFVTFRfV0VJR0hUICYmIHByaV9zcGVjLT5leGNsdXNpdmUgPT0gMDsKK30KKwordm9pZCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfbm9ybWFsaXplX3dlaWdodChuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKSB7CisgIGlmIChwcmlfc3BlYy0+d2VpZ2h0IDwgTkdIVFRQMl9NSU5fV0VJR0hUKSB7CisgICAgcHJpX3NwZWMtPndlaWdodCA9IE5HSFRUUDJfTUlOX1dFSUdIVDsKKyAgfSBlbHNlIGlmIChwcmlfc3BlYy0+d2VpZ2h0ID4gTkdIVFRQMl9NQVhfV0VJR0hUKSB7CisgICAgcHJpX3NwZWMtPndlaWdodCA9IE5HSFRUUDJfTUFYX1dFSUdIVDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9wcmlvcml0eV9zcGVjLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3ByaW9yaXR5X3NwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVjZTgyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9wcmlvcml0eV9zcGVjLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfUFJJT1JJVFlfU1BFQ19ICisjZGVmaW5lIE5HSFRUUDJfUFJJT1JJVFlfU1BFQ19ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbm9ybWFsaXplcyBwcmlfc3BlYy0+d2VpZ2h0IGlmIGl0IGlzIG91dCBvZiByYW5nZS4KKyAqIElmIHByaV9zcGVjLT53ZWlnaHQgaXMgbGVzcyB0aGFuIE5HSFRUUDJfTUlOX1dFSUdIVCwgaXQgaXMgc2V0IHRvCisgKiBOR0hUVFAyX01JTl9XRUlHSFQuICBJZiBwcmlfc3BlYy0+d2VpZ2h0IGlzIGxhcmdlciB0aGFuCisgKiBOR0hUVFAyX01BWF9XRUlHSFQsIGl0IGlzIHNldCB0byBOR0hUVFAyX01BWF9XRUlHSFQuCisgKi8KK3ZvaWQgbmdodHRwMl9wcmlvcml0eV9zcGVjX25vcm1hbGl6ZV93ZWlnaHQobmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX1BSSU9SSVRZX1NQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9xdWV1ZS5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NWViNjkKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3F1ZXVlLmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9xdWV1ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK3ZvaWQgbmdodHRwMl9xdWV1ZV9pbml0KG5naHR0cDJfcXVldWUgKnF1ZXVlKSB7CisgIHF1ZXVlLT5mcm9udCA9IHF1ZXVlLT5iYWNrID0gTlVMTDsKK30KKwordm9pZCBuZ2h0dHAyX3F1ZXVlX2ZyZWUobmdodHRwMl9xdWV1ZSAqcXVldWUpIHsKKyAgaWYgKCFxdWV1ZSkgeworICAgIHJldHVybjsKKyAgfSBlbHNlIHsKKyAgICBuZ2h0dHAyX3F1ZXVlX2NlbGwgKnAgPSBxdWV1ZS0+ZnJvbnQ7CisgICAgd2hpbGUgKHApIHsKKyAgICAgIG5naHR0cDJfcXVldWVfY2VsbCAqbmV4dCA9IHAtPm5leHQ7CisgICAgICBmcmVlKHApOworICAgICAgcCA9IG5leHQ7CisgICAgfQorICB9Cit9CisKK2ludCBuZ2h0dHAyX3F1ZXVlX3B1c2gobmdodHRwMl9xdWV1ZSAqcXVldWUsIHZvaWQgKmRhdGEpIHsKKyAgbmdodHRwMl9xdWV1ZV9jZWxsICpuZXdfY2VsbCA9CisgICAgICAobmdodHRwMl9xdWV1ZV9jZWxsICopbWFsbG9jKHNpemVvZihuZ2h0dHAyX3F1ZXVlX2NlbGwpKTsKKyAgaWYgKCFuZXdfY2VsbCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorICBuZXdfY2VsbC0+ZGF0YSA9IGRhdGE7CisgIG5ld19jZWxsLT5uZXh0ID0gTlVMTDsKKyAgaWYgKHF1ZXVlLT5iYWNrKSB7CisgICAgcXVldWUtPmJhY2stPm5leHQgPSBuZXdfY2VsbDsKKyAgICBxdWV1ZS0+YmFjayA9IG5ld19jZWxsOworCisgIH0gZWxzZSB7CisgICAgcXVldWUtPmZyb250ID0gcXVldWUtPmJhY2sgPSBuZXdfY2VsbDsKKyAgfQorICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX3F1ZXVlX3BvcChuZ2h0dHAyX3F1ZXVlICpxdWV1ZSkgeworICBuZ2h0dHAyX3F1ZXVlX2NlbGwgKmZyb250ID0gcXVldWUtPmZyb250OworICBhc3NlcnQoZnJvbnQpOworICBxdWV1ZS0+ZnJvbnQgPSBmcm9udC0+bmV4dDsKKyAgaWYgKGZyb250ID09IHF1ZXVlLT5iYWNrKSB7CisgICAgcXVldWUtPmJhY2sgPSBOVUxMOworICB9CisgIGZyZWUoZnJvbnQpOworfQorCit2b2lkICpuZ2h0dHAyX3F1ZXVlX2Zyb250KG5naHR0cDJfcXVldWUgKnF1ZXVlKSB7CisgIGFzc2VydChxdWV1ZS0+ZnJvbnQpOworICByZXR1cm4gcXVldWUtPmZyb250LT5kYXRhOworfQorCit2b2lkICpuZ2h0dHAyX3F1ZXVlX2JhY2sobmdodHRwMl9xdWV1ZSAqcXVldWUpIHsKKyAgYXNzZXJ0KHF1ZXVlLT5iYWNrKTsKKyAgcmV0dXJuIHF1ZXVlLT5iYWNrLT5kYXRhOworfQorCitpbnQgbmdodHRwMl9xdWV1ZV9lbXB0eShuZ2h0dHAyX3F1ZXVlICpxdWV1ZSkgeyByZXR1cm4gcXVldWUtPmZyb250ID09IE5VTEw7IH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcXVldWUuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDZmYTZjCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9xdWV1ZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX1FVRVVFX0gKKyNkZWZpbmUgTkdIVFRQMl9RVUVVRV9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9xdWV1ZV9jZWxsIHsKKyAgdm9pZCAqZGF0YTsKKyAgc3RydWN0IG5naHR0cDJfcXVldWVfY2VsbCAqbmV4dDsKK30gbmdodHRwMl9xdWV1ZV9jZWxsOworCit0eXBlZGVmIHN0cnVjdCB7CisgIG5naHR0cDJfcXVldWVfY2VsbCAqZnJvbnQsICpiYWNrOworfSBuZ2h0dHAyX3F1ZXVlOworCit2b2lkIG5naHR0cDJfcXVldWVfaW5pdChuZ2h0dHAyX3F1ZXVlICpxdWV1ZSk7Cit2b2lkIG5naHR0cDJfcXVldWVfZnJlZShuZ2h0dHAyX3F1ZXVlICpxdWV1ZSk7CitpbnQgbmdodHRwMl9xdWV1ZV9wdXNoKG5naHR0cDJfcXVldWUgKnF1ZXVlLCB2b2lkICpkYXRhKTsKK3ZvaWQgbmdodHRwMl9xdWV1ZV9wb3AobmdodHRwMl9xdWV1ZSAqcXVldWUpOwordm9pZCAqbmdodHRwMl9xdWV1ZV9mcm9udChuZ2h0dHAyX3F1ZXVlICpxdWV1ZSk7Cit2b2lkICpuZ2h0dHAyX3F1ZXVlX2JhY2sobmdodHRwMl9xdWV1ZSAqcXVldWUpOworaW50IG5naHR0cDJfcXVldWVfZW1wdHkobmdodHRwMl9xdWV1ZSAqcXVldWUpOworCisjZW5kaWYgLyogTkdIVFRQMl9RVUVVRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3JjYnVmLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3JjYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3ODE0ZAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcmNidWYuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9yY2J1Zi5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX21lbS5oIgorI2luY2x1ZGUgIm5naHR0cDJfaGVscGVyLmgiCisKK2ludCBuZ2h0dHAyX3JjYnVmX25ldyhuZ2h0dHAyX3JjYnVmICoqcmNidWZfcHRyLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHVpbnQ4X3QgKnA7CisKKyAgcCA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX3JjYnVmKSArIHNpemUpOworICBpZiAocCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgKnJjYnVmX3B0ciA9ICh2b2lkICopcDsKKworICAoKnJjYnVmX3B0ciktPm1lbV91c2VyX2RhdGEgPSBtZW0tPm1lbV91c2VyX2RhdGE7CisgICgqcmNidWZfcHRyKS0+ZnJlZSA9IG1lbS0+ZnJlZTsKKyAgKCpyY2J1Zl9wdHIpLT5iYXNlID0gcCArIHNpemVvZihuZ2h0dHAyX3JjYnVmKTsKKyAgKCpyY2J1Zl9wdHIpLT5sZW4gPSBzaXplOworICAoKnJjYnVmX3B0ciktPnJlZiA9IDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3JjYnVmX25ldzIobmdodHRwMl9yY2J1ZiAqKnJjYnVmX3B0ciwgY29uc3QgdWludDhfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjbGVuLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGludCBydjsKKworICBydiA9IG5naHR0cDJfcmNidWZfbmV3KHJjYnVmX3B0ciwgc3JjbGVuICsgMSwgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICAoKnJjYnVmX3B0ciktPmxlbiA9IHNyY2xlbjsKKyAgKm5naHR0cDJfY3B5bWVtKCgqcmNidWZfcHRyKS0+YmFzZSwgc3JjLCBzcmNsZW4pID0gJ1wwJzsKKworICByZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWVzIHxyY2J1ZnwgaXRzZWxmLCByZWdhcmRsZXNzIG9mIGl0cyByZWZlcmVuY2UgY291dC4KKyAqLwordm9pZCBuZ2h0dHAyX3JjYnVmX2RlbChuZ2h0dHAyX3JjYnVmICpyY2J1ZikgeworICBuZ2h0dHAyX21lbV9mcmVlMihyY2J1Zi0+ZnJlZSwgcmNidWYsIHJjYnVmLT5tZW1fdXNlcl9kYXRhKTsKK30KKwordm9pZCBuZ2h0dHAyX3JjYnVmX2luY3JlZihuZ2h0dHAyX3JjYnVmICpyY2J1ZikgeworICBpZiAocmNidWYtPnJlZiA9PSAtMSkgeworICAgIHJldHVybjsKKyAgfQorCisgICsrcmNidWYtPnJlZjsKK30KKwordm9pZCBuZ2h0dHAyX3JjYnVmX2RlY3JlZihuZ2h0dHAyX3JjYnVmICpyY2J1ZikgeworICBpZiAocmNidWYgPT0gTlVMTCB8fCByY2J1Zi0+cmVmID09IC0xKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgYXNzZXJ0KHJjYnVmLT5yZWYgPiAwKTsKKworICBpZiAoLS1yY2J1Zi0+cmVmID09IDApIHsKKyAgICBuZ2h0dHAyX3JjYnVmX2RlbChyY2J1Zik7CisgIH0KK30KKworbmdodHRwMl92ZWMgbmdodHRwMl9yY2J1Zl9nZXRfYnVmKG5naHR0cDJfcmNidWYgKnJjYnVmKSB7CisgIG5naHR0cDJfdmVjIHJlcyA9IHtyY2J1Zi0+YmFzZSwgcmNidWYtPmxlbn07CisgIHJldHVybiByZXM7Cit9CisKK2ludCBuZ2h0dHAyX3JjYnVmX2lzX3N0YXRpYyhjb25zdCBuZ2h0dHAyX3JjYnVmICpyY2J1ZikgeworICByZXR1cm4gcmNidWYtPnJlZiA9PSAtMTsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcmNidWYuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcmNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODE0ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9yY2J1Zi5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX1JDQlVGX0gKKyNkZWZpbmUgTkdIVFRQMl9SQ0JVRl9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworc3RydWN0IG5naHR0cDJfcmNidWYgeworICAvKiBjdXN0b20gbWVtb3J5IGFsbG9jYXRvciBiZWxvbmdzIHRvIHRoZSBtZW0gcGFyYW1ldGVyIHdoZW4KKyAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuICovCisgIHZvaWQgKm1lbV91c2VyX2RhdGE7CisgIG5naHR0cDJfZnJlZSBmcmVlOworICAvKiBUaGUgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBidWZmZXIgKi8KKyAgdWludDhfdCAqYmFzZTsKKyAgLyogU2l6ZSBvZiBidWZmZXIgcG9pbnRlZCBieSB8YmFzZXwuICovCisgIHNpemVfdCBsZW47CisgIC8qIFJlZmVyZW5jZSBjb3VudCAqLworICBpbnQzMl90IHJlZjsKK307CisKKy8qCisgKiBBbGxvY2F0ZXMgbmdodHRwMl9yY2J1ZiBvYmplY3Qgd2l0aCB8c2l6ZXwgYXMgaW5pdGlhbCBidWZmZXIgc2l6ZS4KKyAqIFdoZW4gdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgcmVmZXJlbmNlIGNvdW50IGJlY29tZXMgMS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNOgorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX3JjYnVmX25ldyhuZ2h0dHAyX3JjYnVmICoqcmNidWZfcHRyLCBzaXplX3Qgc2l6ZSwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBMaWtlIG5naHR0cDJfcmNidWZfbmV3KCksIGJ1dCBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHdpdGggfHNyY3wgb2YKKyAqIGxlbmd0aCB8c3JjbGVufC4gIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFkZGl0aW9uYWwgYnl0ZSBhdCB0aGUKKyAqIGVuZCBhbmQgcHV0cyAnXDAnIGludG8gaXQsIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBidWZmZXIgY291bGQgYmUKKyAqIHVzZWQgYXMgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4gIFN0aWxsICgqcmNidWZfcHRyKS0+bGVuIGVxdWFscyB0bworICogfHNyY2xlbnwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTToKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9yY2J1Zl9uZXcyKG5naHR0cDJfcmNidWYgKipyY2J1Zl9wdHIsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY2xlbiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBGcmVlcyB8cmNidWZ8IGl0c2VsZiwgcmVnYXJkbGVzcyBvZiBpdHMgcmVmZXJlbmNlIGNvdXQuCisgKi8KK3ZvaWQgbmdodHRwMl9yY2J1Zl9kZWwobmdodHRwMl9yY2J1ZiAqcmNidWYpOworCisjZW5kaWYgLyogTkdIVFRQMl9SQ0JVRl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3Nlc3Npb24uYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc2Vzc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjNkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3Nlc3Npb24uYwpAQCAtMCwwICsxLDc3ODAgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfc2Vzc2lvbi5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaGVscGVyLmgiCisjaW5jbHVkZSAibmdodHRwMl9uZXQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX3ByaW9yaXR5X3NwZWMuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX29wdGlvbi5oIgorI2luY2x1ZGUgIm5naHR0cDJfaHR0cC5oIgorI2luY2x1ZGUgIm5naHR0cDJfcHEuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2RlYnVnLmgiCisKKy8qCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgb3BlbmVkIHN0cmVhbXMgaXMgbGFyZ2VyCisgKiB0aGFuIG9yIGVxdWFsIHRvCisgKiByZW1vdGVfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcy4KKyAqLworc3RhdGljIGludAorc2Vzc2lvbl9pc19vdXRnb2luZ19jb25jdXJyZW50X3N0cmVhbXNfbWF4KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPD0KKyAgICAgICAgIHNlc3Npb24tPm51bV9vdXRnb2luZ19zdHJlYW1zOworfQorCisvKgorICogUmV0dXJucyBub24temVybyBpZiB0aGUgbnVtYmVyIG9mIGluY29taW5nIG9wZW5lZCBzdHJlYW1zIGlzIGxhcmdlcgorICogdGhhbiBvciBlcXVhbCB0bworICogbG9jYWxfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcy4KKyAqLworc3RhdGljIGludAorc2Vzc2lvbl9pc19pbmNvbWluZ19jb25jdXJyZW50X3N0cmVhbXNfbWF4KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA8PQorICAgICAgICAgc2Vzc2lvbi0+bnVtX2luY29taW5nX3N0cmVhbXM7Cit9CisKKy8qCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBudW1iZXIgb2YgaW5jb21pbmcgb3BlbmVkIHN0cmVhbXMgaXMgbGFyZ2VyCisgKiB0aGFuIG9yIGVxdWFsIHRvCisgKiBzZXNzaW9uLT5wZW5kaW5nX2xvY2FsX21heF9jb25jdXJyZW50X3N0cmVhbS4KKyAqLworc3RhdGljIGludAorc2Vzc2lvbl9pc19pbmNvbWluZ19jb25jdXJyZW50X3N0cmVhbXNfcGVuZGluZ19tYXgobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5wZW5kaW5nX2xvY2FsX21heF9jb25jdXJyZW50X3N0cmVhbSA8PQorICAgICAgICAgc2Vzc2lvbi0+bnVtX2luY29taW5nX3N0cmVhbXM7Cit9CisKKy8qCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHxsaWJfZXJyb3J8IGlzIG5vbi1mYXRhbCBlcnJvci4KKyAqLworc3RhdGljIGludCBpc19ub25fZmF0YWwoaW50IGxpYl9lcnJvcl9jb2RlKSB7CisgIHJldHVybiBsaWJfZXJyb3JfY29kZSA8IDAgJiYgbGliX2Vycm9yX2NvZGUgPiBOR0hUVFAyX0VSUl9GQVRBTDsKK30KKworaW50IG5naHR0cDJfaXNfZmF0YWwoaW50IGxpYl9lcnJvcl9jb2RlKSB7CisgIHJldHVybiBsaWJfZXJyb3JfY29kZSA8IE5HSFRUUDJfRVJSX0ZBVEFMOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fZW5mb3JjZV9odHRwX21lc3NhZ2luZyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIChzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fSFRUUF9NRVNTQUdJTkcpID09IDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgfGZyYW1lfCBpcyB0cmFpbGVyIGhlYWRlcnMuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl90cmFpbGVyX2hlYWRlcnMobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpZiAoIXN0cmVhbSB8fCBmcmFtZS0+aGQudHlwZSAhPSBOR0hUVFAyX0hFQURFUlMpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgcmV0dXJuIGZyYW1lLT5oZWFkZXJzLmNhdCA9PSBOR0hUVFAyX0hDQVRfSEVBREVSUzsKKyAgfQorCisgIHJldHVybiBmcmFtZS0+aGVhZGVycy5jYXQgPT0gTkdIVFRQMl9IQ0FUX0hFQURFUlMgJiYKKyAgICAgICAgIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19FWFBFQ1RfRklOQUxfUkVTUE9OU0UpID09IDA7Cit9CisKKy8qIFJldHVybnMgbm9uemVybyBpZiB0aGUgfHN0cmVhbXwgaXMgaW4gcmVzZXJ2ZWQocmVtb3RlKSBzdGF0ZSAqLworc3RhdGljIGludCBzdGF0ZV9yZXNlcnZlZF9yZW1vdGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCAmJgorICAgICAgICAgIW5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQpOworfQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIHxzdHJlYW18IGlzIGluIHJlc2VydmVkKGxvY2FsKSBzdGF0ZSAqLworc3RhdGljIGludCBzdGF0ZV9yZXNlcnZlZF9sb2NhbChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQgJiYKKyAgICAgICAgIG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQpOworfQorCisvKgorICogQ2hlY2tzIHdoZXRoZXIgcmVjZWl2ZWQgc3RyZWFtX2lkIGlzIHZhbGlkLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiAxIGlmIGl0IHN1Y2NlZWRzLCBvciAwLgorICovCitzdGF0aWMgaW50IHNlc3Npb25faXNfbmV3X3BlZXJfc3RyZWFtX2lkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgcmV0dXJuIHN0cmVhbV9pZCAhPSAwICYmCisgICAgICAgICAhbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW1faWQpICYmCisgICAgICAgICBzZXNzaW9uLT5sYXN0X3JlY3Zfc3RyZWFtX2lkIDwgc3RyZWFtX2lkOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgLyogQXNzdW1lIHRoYXQgc3RyZWFtIG9iamVjdCB3aXRoIHN0cmVhbV9pZCBkb2VzIG5vdCBleGlzdCAqLworICBpZiAobmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW1faWQpKSB7CisgICAgaWYgKHNlc3Npb24tPmxhc3Rfc2VudF9zdHJlYW1faWQgPCBzdHJlYW1faWQpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoc2Vzc2lvbl9pc19uZXdfcGVlcl9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKSkgeworICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX2V4dF90eXBlX3NldChjb25zdCB1aW50OF90ICpleHRfdHlwZXMsIHVpbnQ4X3QgdHlwZSkgeworICByZXR1cm4gKGV4dF90eXBlc1t0eXBlIC8gOF0gJiAoMSA8PCAodHlwZSAmIDB4NykpKSA+IDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9jYWxsX2Vycm9yX2NhbGxiYWNrKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaWJfZXJyb3JfY29kZSwgY29uc3QgY2hhciAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSB7CisgIHNpemVfdCBidWZzaXplOworICB2YV9saXN0IGFwOworICBjaGFyICpidWY7CisgIGludCBydjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBpZiAoIXNlc3Npb24tPmNhbGxiYWNrcy5lcnJvcl9jYWxsYmFjayAmJgorICAgICAgIXNlc3Npb24tPmNhbGxiYWNrcy5lcnJvcl9jYWxsYmFjazIpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIHJ2ID0gdnNucHJpbnRmKE5VTEwsIDAsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworCisgIGlmIChydiA8IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBidWZzaXplID0gKHNpemVfdCkocnYgKyAxKTsKKworICBidWYgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBidWZzaXplKTsKKyAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIHJ2ID0gdnNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisKKyAgaWYgKHJ2IDwgMCkgeworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBidWYpOworICAgIC8qIHZzbnByaW50ZiBtYXkgcmV0dXJuIGVycm9yIGJlY2F1c2Ugb2YgdmFyaW91cyB0aGluZ3Mgd2UgY2FuCisgICAgICAgaW1hZ2luZSwgYnV0IHR5cGljYWxseSB3ZSBkb24ndCB3YW50IHRvIGRyb3Agc2Vzc2lvbiBqdXN0IGZvcgorICAgICAgIGRlYnVnIGNhbGxiYWNrLiAqLworICAgIERFQlVHRigiZXJyb3JfY2FsbGJhY2s6IHZzbnByaW50ZiBmYWlsZWQuIFRoZSB0ZW1wbGF0ZSB3YXMgJXNcbiIsIGZtdCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLmVycm9yX2NhbGxiYWNrMikgeworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLmVycm9yX2NhbGxiYWNrMihzZXNzaW9uLCBsaWJfZXJyb3JfY29kZSwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KXJ2LCBzZXNzaW9uLT51c2VyX2RhdGEpOworICB9IGVsc2UgeworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLmVycm9yX2NhbGxiYWNrKHNlc3Npb24sIGJ1ZiwgKHNpemVfdClydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT51c2VyX2RhdGEpOworICB9CisKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGJ1Zik7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fdGVybWluYXRlX3Nlc3Npb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGFzdF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSwgY29uc3QgY2hhciAqcmVhc29uKSB7CisgIGludCBydjsKKyAgY29uc3QgdWludDhfdCAqZGVidWdfZGF0YTsKKyAgc2l6ZV90IGRlYnVnX2RhdGFsZW47CisKKyAgaWYgKHNlc3Npb24tPmdvYXdheV9mbGFncyAmIE5HSFRUUDJfR09BV0FZX1RFUk1fT05fU0VORCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgLyogSWdub3JlIGFsbCBpbmNvbWluZyBmcmFtZXMgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gdGVhciBkb3duIHRoZQorICAgICBzZXNzaW9uLiAqLworICBzZXNzaW9uLT5pZnJhbWUuc3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9BTEw7CisKKyAgaWYgKHJlYXNvbiA9PSBOVUxMKSB7CisgICAgZGVidWdfZGF0YSA9IE5VTEw7CisgICAgZGVidWdfZGF0YWxlbiA9IDA7CisgIH0gZWxzZSB7CisgICAgZGVidWdfZGF0YSA9IChjb25zdCB1aW50OF90ICopcmVhc29uOworICAgIGRlYnVnX2RhdGFsZW4gPSBzdHJsZW4ocmVhc29uKTsKKyAgfQorCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9nb2F3YXkoc2Vzc2lvbiwgbGFzdF9zdHJlYW1faWQsIGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfZGF0YSwgZGVidWdfZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0dPQVdBWV9BVVhfVEVSTV9PTl9TRU5EKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHNlc3Npb24tPmdvYXdheV9mbGFncyB8PSBOR0hUVFAyX0dPQVdBWV9URVJNX09OX1NFTkQ7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlKSB7CisgIHJldHVybiBzZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uKHNlc3Npb24sIHNlc3Npb24tPmxhc3RfcHJvY19zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUsIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uMihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSkgeworICByZXR1cm4gc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihzZXNzaW9uLCBsYXN0X3N0cmVhbV9pZCwgZXJyb3JfY29kZSwgTlVMTCk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24pIHsKKyAgcmV0dXJuIHNlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oc2Vzc2lvbiwgc2Vzc2lvbi0+bGFzdF9wcm9jX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSwgcmVhc29uKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgaW50IHJlbTsKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmVtID0gc3RyZWFtX2lkICYgMHgxOworICBpZiAoc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgcmV0dXJuIHJlbSA9PSAwOworICB9CisgIHJldHVybiByZW0gPT0gMTsKK30KKworbmdodHRwMl9zdHJlYW0gKm5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIHN0cmVhbSA9IChuZ2h0dHAyX3N0cmVhbSAqKW5naHR0cDJfbWFwX2ZpbmQoJnNlc3Npb24tPnN0cmVhbXMsIHN0cmVhbV9pZCk7CisKKyAgaWYgKHN0cmVhbSA9PSBOVUxMIHx8IChzdHJlYW0tPmZsYWdzICYgTkdIVFRQMl9TVFJFQU1fRkxBR19DTE9TRUQpIHx8CisgICAgICBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0lETEUpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiBzdHJlYW07Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yYXcobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICByZXR1cm4gKG5naHR0cDJfc3RyZWFtICopbmdodHRwMl9tYXBfZmluZCgmc2Vzc2lvbi0+c3RyZWFtcywgc3RyZWFtX2lkKTsKK30KKworc3RhdGljIHZvaWQgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfbWVtICptZW0gPSAmc2Vzc2lvbi0+bWVtOworICAvKiBBIGJpdCByaXNreSBjb2RlLCBzaW5jZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tCisgICAgIG5naHR0cDJfc2Vzc2lvbl9uZXcoKSwgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0CisgICAgIGlmcmFtZS0+ZnJhbWUuaGQudHlwZSBpcyAwLCBzbyB0aGF0IG5vIGZyZWUgaXMgcGVyZm9ybWVkLiAqLworICBzd2l0Y2ggKGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkgeworICBjYXNlIE5HSFRUUDJfREFUQToKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisgICAgbmdodHRwMl9mcmFtZV9oZWFkZXJzX2ZyZWUoJmlmcmFtZS0+ZnJhbWUuaGVhZGVycywgbWVtKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1BSSU9SSVRZOgorICAgIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfZnJlZSgmaWZyYW1lLT5mcmFtZS5wcmlvcml0eSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgIG5naHR0cDJfZnJhbWVfcnN0X3N0cmVhbV9mcmVlKCZpZnJhbWUtPmZyYW1lLnJzdF9zdHJlYW0pOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1M6CisgICAgbmdodHRwMl9mcmFtZV9zZXR0aW5nc19mcmVlKCZpZnJhbWUtPmZyYW1lLnNldHRpbmdzLCBtZW0pOworCisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGlmcmFtZS0+aXYpOworCisgICAgaWZyYW1lLT5pdiA9IE5VTEw7CisgICAgaWZyYW1lLT5uaXYgPSAwOworICAgIGlmcmFtZS0+bWF4X25pdiA9IDA7CisKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1BVU0hfUFJPTUlTRToKKyAgICBuZ2h0dHAyX2ZyYW1lX3B1c2hfcHJvbWlzZV9mcmVlKCZpZnJhbWUtPmZyYW1lLnB1c2hfcHJvbWlzZSwgbWVtKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1BJTkc6CisgICAgbmdodHRwMl9mcmFtZV9waW5nX2ZyZWUoJmlmcmFtZS0+ZnJhbWUucGluZyk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9HT0FXQVk6CisgICAgbmdodHRwMl9mcmFtZV9nb2F3YXlfZnJlZSgmaWZyYW1lLT5mcmFtZS5nb2F3YXksIG1lbSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9XSU5ET1dfVVBEQVRFOgorICAgIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9mcmVlKCZpZnJhbWUtPmZyYW1lLndpbmRvd191cGRhdGUpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIC8qIGV4dGVuc2lvbiBmcmFtZSAqLworICAgIGlmIChjaGVja19leHRfdHlwZV9zZXQoc2Vzc2lvbi0+dXNlcl9yZWN2X2V4dF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkpIHsKKyAgICAgIG5naHR0cDJfZnJhbWVfZXh0ZW5zaW9uX2ZyZWUoJmlmcmFtZS0+ZnJhbWUuZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgc3dpdGNoIChpZnJhbWUtPmZyYW1lLmhkLnR5cGUpIHsKKyAgICAgIGNhc2UgTkdIVFRQMl9BTFRTVkM6CisgICAgICAgIGlmICgoc2Vzc2lvbi0+YnVpbHRpbl9yZWN2X2V4dF90eXBlcyAmIE5HSFRUUDJfVFlQRU1BU0tfQUxUU1ZDKSA9PSAwKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbmdodHRwMl9mcmFtZV9hbHRzdmNfZnJlZSgmaWZyYW1lLT5mcmFtZS5leHQsIG1lbSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX09SSUdJTjoKKyAgICAgICAgaWYgKChzZXNzaW9uLT5idWlsdGluX3JlY3ZfZXh0X3R5cGVzICYgTkdIVFRQMl9UWVBFTUFTS19PUklHSU4pID09IDApIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBuZ2h0dHAyX2ZyYW1lX29yaWdpbl9mcmVlKCZpZnJhbWUtPmZyYW1lLmV4dCwgbWVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgYnJlYWs7CisgIH0KKworICBtZW1zZXQoJmlmcmFtZS0+ZnJhbWUsIDAsIHNpemVvZihuZ2h0dHAyX2ZyYW1lKSk7CisgIG1lbXNldCgmaWZyYW1lLT5leHRfZnJhbWVfcGF5bG9hZCwgMCwgc2l6ZW9mKG5naHR0cDJfZXh0X2ZyYW1lX3BheWxvYWQpKTsKKworICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0hFQUQ7CisKKyAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZpZnJhbWUtPnNidWYsIGlmcmFtZS0+cmF3X3NidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaWZyYW1lLT5yYXdfc2J1ZikpOworICBpZnJhbWUtPnNidWYubWFyayArPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfYnVmX2ZyZWUoJmlmcmFtZS0+bGJ1ZiwgbWVtKTsKKyAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZpZnJhbWUtPmxidWYsIE5VTEwsIDApOworCisgIGlmcmFtZS0+cmF3X2xidWYgPSBOVUxMOworCisgIGlmcmFtZS0+cGF5bG9hZGxlZnQgPSAwOworICBpZnJhbWUtPnBhZGxlbiA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfc2V0dGluZ3MobmdodHRwMl9zZXR0aW5nc19zdG9yYWdlICpzZXR0aW5ncykgeworICBzZXR0aW5ncy0+aGVhZGVyX3RhYmxlX3NpemUgPSBOR0hUVFAyX0hEX0RFRkFVTFRfTUFYX0JVRkZFUl9TSVpFOworICBzZXR0aW5ncy0+ZW5hYmxlX3B1c2ggPSAxOworICBzZXR0aW5ncy0+bWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9IE5HSFRUUDJfREVGQVVMVF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOworICBzZXR0aW5ncy0+aW5pdGlhbF93aW5kb3dfc2l6ZSA9IE5HSFRUUDJfSU5JVElBTF9XSU5ET1dfU0laRTsKKyAgc2V0dGluZ3MtPm1heF9mcmFtZV9zaXplID0gTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NSU47CisgIHNldHRpbmdzLT5tYXhfaGVhZGVyX2xpc3Rfc2l6ZSA9IFVJTlQzMl9NQVg7Cit9CisKK3N0YXRpYyB2b2lkIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KG5naHR0cDJfYWN0aXZlX291dGJvdW5kX2l0ZW0gKmFvYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgREVCVUdGKCJzZW5kOiByZXNldCBuZ2h0dHAyX2FjdGl2ZV9vdXRib3VuZF9pdGVtXG4iKTsKKyAgREVCVUdGKCJzZW5kOiBhb2ItPml0ZW0gPSAlcFxuIiwgYW9iLT5pdGVtKTsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2ZyZWUoYW9iLT5pdGVtLCBtZW0pOworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgYW9iLT5pdGVtKTsKKyAgYW9iLT5pdGVtID0gTlVMTDsKKyAgbmdodHRwMl9idWZzX3Jlc2V0KCZhb2ItPmZyYW1lYnVmcyk7CisgIGFvYi0+c3RhdGUgPSBOR0hUVFAyX09CX1BPUF9JVEVNOworfQorCitpbnQgbmdodHRwMl9lbmFibGVfc3RyaWN0X3ByZWZhY2UgPSAxOworCitzdGF0aWMgaW50IHNlc3Npb25fbmV3KG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgaW50IHNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbiwgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIHNpemVfdCBuYnVmZmVyOworICBzaXplX3QgbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplID0KKyAgICAgIE5HSFRUUDJfSERfREVGQVVMVF9NQVhfREVGTEFURV9CVUZGRVJfU0laRTsKKworICBpZiAobWVtID09IE5VTEwpIHsKKyAgICBtZW0gPSBuZ2h0dHAyX21lbV9kZWZhdWx0KCk7CisgIH0KKworICAqc2Vzc2lvbl9wdHIgPSBuZ2h0dHAyX21lbV9jYWxsb2MobWVtLCAxLCBzaXplb2YobmdodHRwMl9zZXNzaW9uKSk7CisgIGlmICgqc2Vzc2lvbl9wdHIgPT0gTlVMTCkgeworICAgIHJ2ID0gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgZ290byBmYWlsX3Nlc3Npb247CisgIH0KKworICAoKnNlc3Npb25fcHRyKS0+bWVtID0gKm1lbTsKKyAgbWVtID0gJigqc2Vzc2lvbl9wdHIpLT5tZW07CisKKyAgLyogbmV4dF9zdHJlYW1faWQgaXMgaW5pdGlhbGl6ZWQgaW4gZWl0aGVyCisgICAgIG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3MiBvciBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzIgKi8KKworICBuZ2h0dHAyX3N0cmVhbV9pbml0KCYoKnNlc3Npb25fcHRyKS0+cm9vdCwgMCwgTkdIVFRQMl9TVFJFQU1fRkxBR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfU1RSRUFNX0lETEUsIE5HSFRUUDJfREVGQVVMVF9XRUlHSFQsIDAsIDAsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgbWVtKTsKKworICAoKnNlc3Npb25fcHRyKS0+cmVtb3RlX3dpbmRvd19zaXplID0gTkdIVFRQMl9JTklUSUFMX0NPTk5FQ1RJT05fV0lORE9XX1NJWkU7CisgICgqc2Vzc2lvbl9wdHIpLT5yZWN2X3dpbmRvd19zaXplID0gMDsKKyAgKCpzZXNzaW9uX3B0ciktPmNvbnN1bWVkX3NpemUgPSAwOworICAoKnNlc3Npb25fcHRyKS0+cmVjdl9yZWR1Y3Rpb24gPSAwOworICAoKnNlc3Npb25fcHRyKS0+bG9jYWxfd2luZG93X3NpemUgPSBOR0hUVFAyX0lOSVRJQUxfQ09OTkVDVElPTl9XSU5ET1dfU0laRTsKKworICAoKnNlc3Npb25fcHRyKS0+Z29hd2F5X2ZsYWdzID0gTkdIVFRQMl9HT0FXQVlfTk9ORTsKKyAgKCpzZXNzaW9uX3B0ciktPmxvY2FsX2xhc3Rfc3RyZWFtX2lkID0gKDF1IDw8IDMxKSAtIDE7CisgICgqc2Vzc2lvbl9wdHIpLT5yZW1vdGVfbGFzdF9zdHJlYW1faWQgPSAoMXUgPDwgMzEpIC0gMTsKKworICAoKnNlc3Npb25fcHRyKS0+cGVuZGluZ19sb2NhbF9tYXhfY29uY3VycmVudF9zdHJlYW0gPQorICAgICAgTkdIVFRQMl9ERUZBVUxUX01BWF9DT05DVVJSRU5UX1NUUkVBTVM7CisgICgqc2Vzc2lvbl9wdHIpLT5wZW5kaW5nX2VuYWJsZV9wdXNoID0gMTsKKworICBpZiAoc2VydmVyKSB7CisgICAgKCpzZXNzaW9uX3B0ciktPnNlcnZlciA9IDE7CisgIH0KKworICBpbml0X3NldHRpbmdzKCYoKnNlc3Npb25fcHRyKS0+cmVtb3RlX3NldHRpbmdzKTsKKyAgaW5pdF9zZXR0aW5ncygmKCpzZXNzaW9uX3B0ciktPmxvY2FsX3NldHRpbmdzKTsKKworICAoKnNlc3Npb25fcHRyKS0+bWF4X2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXMgPQorICAgICAgTkdIVFRQMl9NQVhfSU5DT01JTkdfUkVTRVJWRURfU1RSRUFNUzsKKworICAvKiBMaW1pdCBtYXggb3V0Z29pbmcgY29uY3VycmVudCBzdHJlYW1zIHRvIHNlbnNpYmxlIHZhbHVlICovCisgICgqc2Vzc2lvbl9wdHIpLT5yZW1vdGVfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9IDEwMDsKKworICAoKnNlc3Npb25fcHRyKS0+bWF4X3NlbmRfaGVhZGVyX2Jsb2NrX2xlbmd0aCA9IE5HSFRUUDJfTUFYX0hFQURFUlNMRU47CisgICgqc2Vzc2lvbl9wdHIpLT5tYXhfb3V0Ym91bmRfYWNrID0gTkdIVFRQMl9ERUZBVUxUX01BWF9PQlFfRkxPT0RfSVRFTTsKKworICBpZiAob3B0aW9uKSB7CisgICAgaWYgKChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX05PX0FVVE9fV0lORE9XX1VQREFURSkgJiYKKyAgICAgICAgb3B0aW9uLT5ub19hdXRvX3dpbmRvd191cGRhdGUpIHsKKworICAgICAgKCpzZXNzaW9uX3B0ciktPm9wdF9mbGFncyB8PSBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFOworICAgIH0KKworICAgIGlmIChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX1BFRVJfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykgeworCisgICAgICAoKnNlc3Npb25fcHRyKS0+cmVtb3RlX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPQorICAgICAgICAgIG9wdGlvbi0+cGVlcl9tYXhfY29uY3VycmVudF9zdHJlYW1zOworICAgIH0KKworICAgIGlmIChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX01BWF9SRVNFUlZFRF9SRU1PVEVfU1RSRUFNUykgeworCisgICAgICAoKnNlc3Npb25fcHRyKS0+bWF4X2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXMgPQorICAgICAgICAgIG9wdGlvbi0+bWF4X3Jlc2VydmVkX3JlbW90ZV9zdHJlYW1zOworICAgIH0KKworICAgIGlmICgob3B0aW9uLT5vcHRfc2V0X21hc2sgJiBOR0hUVFAyX09QVF9OT19SRUNWX0NMSUVOVF9NQUdJQykgJiYKKyAgICAgICAgb3B0aW9uLT5ub19yZWN2X2NsaWVudF9tYWdpYykgeworCisgICAgICAoKnNlc3Npb25fcHRyKS0+b3B0X2ZsYWdzIHw9IE5HSFRUUDJfT1BUTUFTS19OT19SRUNWX0NMSUVOVF9NQUdJQzsKKyAgICB9CisKKyAgICBpZiAoKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfTk9fSFRUUF9NRVNTQUdJTkcpICYmCisgICAgICAgIG9wdGlvbi0+bm9faHR0cF9tZXNzYWdpbmcpIHsKKworICAgICAgKCpzZXNzaW9uX3B0ciktPm9wdF9mbGFncyB8PSBOR0hUVFAyX09QVE1BU0tfTk9fSFRUUF9NRVNTQUdJTkc7CisgICAgfQorCisgICAgaWYgKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfVVNFUl9SRUNWX0VYVF9UWVBFUykgeworICAgICAgbWVtY3B5KCgqc2Vzc2lvbl9wdHIpLT51c2VyX3JlY3ZfZXh0X3R5cGVzLCBvcHRpb24tPnVzZXJfcmVjdl9leHRfdHlwZXMsCisgICAgICAgICAgICAgc2l6ZW9mKCgqc2Vzc2lvbl9wdHIpLT51c2VyX3JlY3ZfZXh0X3R5cGVzKSk7CisgICAgfQorCisgICAgaWYgKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfQlVJTFRJTl9SRUNWX0VYVF9UWVBFUykgeworICAgICAgKCpzZXNzaW9uX3B0ciktPmJ1aWx0aW5fcmVjdl9leHRfdHlwZXMgPSBvcHRpb24tPmJ1aWx0aW5fcmVjdl9leHRfdHlwZXM7CisgICAgfQorCisgICAgaWYgKChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX05PX0FVVE9fUElOR19BQ0spICYmCisgICAgICAgIG9wdGlvbi0+bm9fYXV0b19waW5nX2FjaykgeworICAgICAgKCpzZXNzaW9uX3B0ciktPm9wdF9mbGFncyB8PSBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19QSU5HX0FDSzsKKyAgICB9CisKKyAgICBpZiAob3B0aW9uLT5vcHRfc2V0X21hc2sgJiBOR0hUVFAyX09QVF9NQVhfU0VORF9IRUFERVJfQkxPQ0tfTEVOR1RIKSB7CisgICAgICAoKnNlc3Npb25fcHRyKS0+bWF4X3NlbmRfaGVhZGVyX2Jsb2NrX2xlbmd0aCA9CisgICAgICAgICAgb3B0aW9uLT5tYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoOworICAgIH0KKworICAgIGlmIChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX01BWF9ERUZMQVRFX0RZTkFNSUNfVEFCTEVfU0laRSkgeworICAgICAgbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplID0gb3B0aW9uLT5tYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemU7CisgICAgfQorCisgICAgaWYgKChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX05PX0NMT1NFRF9TVFJFQU1TKSAmJgorICAgICAgICBvcHRpb24tPm5vX2Nsb3NlZF9zdHJlYW1zKSB7CisgICAgICAoKnNlc3Npb25fcHRyKS0+b3B0X2ZsYWdzIHw9IE5HSFRUUDJfT1BUTUFTS19OT19DTE9TRURfU1RSRUFNUzsKKyAgICB9CisKKyAgICBpZiAob3B0aW9uLT5vcHRfc2V0X21hc2sgJiBOR0hUVFAyX09QVF9NQVhfT1VUQk9VTkRfQUNLKSB7CisgICAgICAoKnNlc3Npb25fcHRyKS0+bWF4X291dGJvdW5kX2FjayA9IG9wdGlvbi0+bWF4X291dGJvdW5kX2FjazsKKyAgICB9CisgIH0KKworICBydiA9IG5naHR0cDJfaGRfZGVmbGF0ZV9pbml0MigmKCpzZXNzaW9uX3B0ciktPmhkX2RlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUsIG1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgZ290byBmYWlsX2hkX2RlZmxhdGVyOworICB9CisgIHJ2ID0gbmdodHRwMl9oZF9pbmZsYXRlX2luaXQoJigqc2Vzc2lvbl9wdHIpLT5oZF9pbmZsYXRlciwgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBnb3RvIGZhaWxfaGRfaW5mbGF0ZXI7CisgIH0KKyAgcnYgPSBuZ2h0dHAyX21hcF9pbml0KCYoKnNlc3Npb25fcHRyKS0+c3RyZWFtcywgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBnb3RvIGZhaWxfbWFwOworICB9CisKKyAgbmJ1ZmZlciA9ICgoKnNlc3Npb25fcHRyKS0+bWF4X3NlbmRfaGVhZGVyX2Jsb2NrX2xlbmd0aCArCisgICAgICAgICAgICAgTkdIVFRQMl9GUkFNRUJVRl9DSFVOS0xFTiAtIDEpIC8KKyAgICAgICAgICAgIE5HSFRUUDJfRlJBTUVCVUZfQ0hVTktMRU47CisKKyAgaWYgKG5idWZmZXIgPT0gMCkgeworICAgIG5idWZmZXIgPSAxOworICB9CisKKyAgLyogMSBmb3IgUGFkIEZpZWxkLiAqLworICBydiA9IG5naHR0cDJfYnVmc19pbml0MygmKCpzZXNzaW9uX3B0ciktPmFvYi5mcmFtZWJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRlJBTUVCVUZfQ0hVTktMRU4sIG5idWZmZXIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRlJBTUVfSERMRU4gKyAxLCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIGdvdG8gZmFpbF9hb2JfZnJhbWVidWY7CisgIH0KKworICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldCgmKCpzZXNzaW9uX3B0ciktPmFvYiwgbWVtKTsKKworICAoKnNlc3Npb25fcHRyKS0+Y2FsbGJhY2tzID0gKmNhbGxiYWNrczsKKyAgKCpzZXNzaW9uX3B0ciktPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKworICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoKnNlc3Npb25fcHRyKTsKKworICBpZiAobmdodHRwMl9lbmFibGVfc3RyaWN0X3ByZWZhY2UpIHsKKyAgICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICYoKnNlc3Npb25fcHRyKS0+aWZyYW1lOworCisgICAgaWYgKHNlcnZlciAmJiAoKCpzZXNzaW9uX3B0ciktPm9wdF9mbGFncyAmCisgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9PUFRNQVNLX05PX1JFQ1ZfQ0xJRU5UX01BR0lDKSA9PSAwKSB7CisgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0NMSUVOVF9NQUdJQzsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgPSBOR0hUVFAyX0NMSUVOVF9NQUdJQ19MRU47CisgICAgfSBlbHNlIHsKKyAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfRklSU1RfU0VUVElOR1M7CisgICAgfQorCisgICAgaWYgKCFzZXJ2ZXIpIHsKKyAgICAgICgqc2Vzc2lvbl9wdHIpLT5hb2Iuc3RhdGUgPSBOR0hUVFAyX09CX1NFTkRfQ0xJRU5UX01BR0lDOworICAgICAgbmdodHRwMl9idWZzX2FkZCgmKCpzZXNzaW9uX3B0ciktPmFvYi5mcmFtZWJ1ZnMsIE5HSFRUUDJfQ0xJRU5UX01BR0lDLAorICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0NMSUVOVF9NQUdJQ19MRU4pOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworCitmYWlsX2FvYl9mcmFtZWJ1ZjoKKyAgbmdodHRwMl9tYXBfZnJlZSgmKCpzZXNzaW9uX3B0ciktPnN0cmVhbXMpOworZmFpbF9tYXA6CisgIG5naHR0cDJfaGRfaW5mbGF0ZV9mcmVlKCYoKnNlc3Npb25fcHRyKS0+aGRfaW5mbGF0ZXIpOworZmFpbF9oZF9pbmZsYXRlcjoKKyAgbmdodHRwMl9oZF9kZWZsYXRlX2ZyZWUoJigqc2Vzc2lvbl9wdHIpLT5oZF9kZWZsYXRlcik7CitmYWlsX2hkX2RlZmxhdGVyOgorICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgKnNlc3Npb25fcHRyKTsKK2ZhaWxfc2Vzc2lvbjoKKyAgcmV0dXJuIHJ2OworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcobmdodHRwMl9zZXNzaW9uICoqc2Vzc2lvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkgeworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXczKHNlc3Npb25fcHRyLCBjYWxsYmFja3MsIHVzZXJfZGF0YSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3MihuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIGNvbnN0IG5naHR0cDJfb3B0aW9uICpvcHRpb24pIHsKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3MyhzZXNzaW9uX3B0ciwgY2FsbGJhY2tzLCB1c2VyX2RhdGEsIG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3MyhuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIGNvbnN0IG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb247CisKKyAgcnYgPSBzZXNzaW9uX25ldygmc2Vzc2lvbiwgY2FsbGJhY2tzLCB1c2VyX2RhdGEsIDAsIG9wdGlvbiwgbWVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorICAvKiBJRHMgZm9yIHVzZSBpbiBjbGllbnQgKi8KKyAgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgPSAxOworCisgICpzZXNzaW9uX3B0ciA9IHNlc3Npb247CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldyhuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKSB7CisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzMoc2Vzc2lvbl9wdHIsIGNhbGxiYWNrcywgdXNlcl9kYXRhLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcyKG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbikgeworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXczKHNlc3Npb25fcHRyLCBjYWxsYmFja3MsIHVzZXJfZGF0YSwgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXczKG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbjsKKworICBydiA9IHNlc3Npb25fbmV3KCZzZXNzaW9uLCBjYWxsYmFja3MsIHVzZXJfZGF0YSwgMSwgb3B0aW9uLCBtZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIC8qIElEcyBmb3IgdXNlIGluIGNsaWVudCAqLworICBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCA9IDI7CisKKyAgKnNlc3Npb25fcHRyID0gc2Vzc2lvbjsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmcmVlX3N0cmVhbXMobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LCB2b2lkICpwdHIpIHsKKyAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgc2Vzc2lvbiA9IChuZ2h0dHAyX3Nlc3Npb24gKilwdHI7CisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisgIHN0cmVhbSA9IChuZ2h0dHAyX3N0cmVhbSAqKWVudHJ5OworICBpdGVtID0gc3RyZWFtLT5pdGVtOworCisgIGlmIChpdGVtICYmICFpdGVtLT5xdWV1ZWQgJiYgaXRlbSAhPSBzZXNzaW9uLT5hb2IuaXRlbSkgeworICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9mcmVlKGl0ZW0sIG1lbSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworICB9CisKKyAgbmdodHRwMl9zdHJlYW1fZnJlZShzdHJlYW0pOworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgc3RyZWFtKTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb2JfcV9mcmVlKG5naHR0cDJfb3V0Ym91bmRfcXVldWUgKnEsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtLCAqbmV4dDsKKyAgZm9yIChpdGVtID0gcS0+aGVhZDsgaXRlbTspIHsKKyAgICBuZXh0ID0gaXRlbS0+cW5leHQ7CisgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2ZyZWUoaXRlbSwgbWVtKTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgICAgaXRlbSA9IG5leHQ7CisgIH0KK30KKworc3RhdGljIGludCBpbmZsaWdodF9zZXR0aW5nc19uZXcobmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncyAqKnNldHRpbmdzX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LCBzaXplX3Qgbml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICAqc2V0dGluZ3NfcHRyID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MpKTsKKyAgaWYgKCEqc2V0dGluZ3NfcHRyKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgaWYgKG5pdiA+IDApIHsKKyAgICAoKnNldHRpbmdzX3B0ciktPml2ID0gbmdodHRwMl9mcmFtZV9pdl9jb3B5KGl2LCBuaXYsIG1lbSk7CisgICAgaWYgKCEoKnNldHRpbmdzX3B0ciktPml2KSB7CisgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgKnNldHRpbmdzX3B0cik7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgfQorICB9IGVsc2UgeworICAgICgqc2V0dGluZ3NfcHRyKS0+aXYgPSBOVUxMOworICB9CisKKyAgKCpzZXR0aW5nc19wdHIpLT5uaXYgPSBuaXY7CisgICgqc2V0dGluZ3NfcHRyKS0+bmV4dCA9IE5VTEw7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluZmxpZ2h0X3NldHRpbmdzX2RlbChuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICpzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGlmICghc2V0dGluZ3MpIHsKKyAgICByZXR1cm47CisgIH0KKworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgc2V0dGluZ3MtPml2KTsKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIHNldHRpbmdzKTsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fZGVsKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX21lbSAqbWVtOworICBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICpzZXR0aW5nczsKKworICBpZiAoc2Vzc2lvbiA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBmb3IgKHNldHRpbmdzID0gc2Vzc2lvbi0+aW5mbGlnaHRfc2V0dGluZ3NfaGVhZDsgc2V0dGluZ3M7KSB7CisgICAgbmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncyAqbmV4dCA9IHNldHRpbmdzLT5uZXh0OworICAgIGluZmxpZ2h0X3NldHRpbmdzX2RlbChzZXR0aW5ncywgbWVtKTsKKyAgICBzZXR0aW5ncyA9IG5leHQ7CisgIH0KKworICBuZ2h0dHAyX3N0cmVhbV9mcmVlKCZzZXNzaW9uLT5yb290KTsKKworICAvKiBIYXZlIHRvIGZyZWUgc3RyZWFtcyBmaXJzdCwgc28gdGhhdCB3ZSBjYW4gY2hlY2sKKyAgICAgc3RyZWFtLT5pdGVtLT5xdWV1ZWQgKi8KKyAgbmdodHRwMl9tYXBfZWFjaF9mcmVlKCZzZXNzaW9uLT5zdHJlYW1zLCBmcmVlX3N0cmVhbXMsIHNlc3Npb24pOworICBuZ2h0dHAyX21hcF9mcmVlKCZzZXNzaW9uLT5zdHJlYW1zKTsKKworICBvYl9xX2ZyZWUoJnNlc3Npb24tPm9iX3VyZ2VudCwgbWVtKTsKKyAgb2JfcV9mcmVlKCZzZXNzaW9uLT5vYl9yZWcsIG1lbSk7CisgIG9iX3FfZnJlZSgmc2Vzc2lvbi0+b2Jfc3luLCBtZW0pOworCisgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KCZzZXNzaW9uLT5hb2IsIG1lbSk7CisgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKyAgbmdodHRwMl9oZF9kZWZsYXRlX2ZyZWUoJnNlc3Npb24tPmhkX2RlZmxhdGVyKTsKKyAgbmdodHRwMl9oZF9pbmZsYXRlX2ZyZWUoJnNlc3Npb24tPmhkX2luZmxhdGVyKTsKKyAgbmdodHRwMl9idWZzX2ZyZWUoJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMpOworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgc2Vzc2lvbik7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fcmVwcmlvcml0aXplX3N0cmVhbSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlY19pbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtID0gTlVMTDsKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjIHByaV9zcGVjX2RlZmF1bHQ7CisgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMgPSBwcmlfc3BlY19pbjsKKworICBhc3NlcnQocHJpX3NwZWMtPnN0cmVhbV9pZCAhPSBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgaWYgKCFuZ2h0dHAyX3N0cmVhbV9pbl9kZXBfdHJlZShzdHJlYW0pKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAocHJpX3NwZWMtPnN0cmVhbV9pZCAhPSAwKSB7CisgICAgZGVwX3N0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBwcmlfc3BlYy0+c3RyZWFtX2lkKTsKKworICAgIGlmICghZGVwX3N0cmVhbSAmJgorICAgICAgICBzZXNzaW9uX2RldGVjdF9pZGxlX3N0cmVhbShzZXNzaW9uLCBwcmlfc3BlYy0+c3RyZWFtX2lkKSkgeworCisgICAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KCZwcmlfc3BlY19kZWZhdWx0KTsKKworICAgICAgZGVwX3N0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9vcGVuX3N0cmVhbSgKKyAgICAgICAgICBzZXNzaW9uLCBwcmlfc3BlYy0+c3RyZWFtX2lkLCBOR0hUVFAyX0ZMQUdfTk9ORSwgJnByaV9zcGVjX2RlZmF1bHQsCisgICAgICAgICAgTkdIVFRQMl9TVFJFQU1fSURMRSwgTlVMTCk7CisKKyAgICAgIGlmIChkZXBfc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoIWRlcF9zdHJlYW0gfHwgIW5naHR0cDJfc3RyZWFtX2luX2RlcF90cmVlKGRlcF9zdHJlYW0pKSB7CisgICAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KCZwcmlfc3BlY19kZWZhdWx0KTsKKyAgICAgIHByaV9zcGVjID0gJnByaV9zcGVjX2RlZmF1bHQ7CisgICAgfQorICB9CisKKyAgaWYgKHByaV9zcGVjLT5zdHJlYW1faWQgPT0gMCkgeworICAgIGRlcF9zdHJlYW0gPSAmc2Vzc2lvbi0+cm9vdDsKKyAgfSBlbHNlIGlmIChuZ2h0dHAyX3N0cmVhbV9kZXBfZmluZF9hbmNlc3RvcihkZXBfc3RyZWFtLCBzdHJlYW0pKSB7CisgICAgREVCVUdGKCJzdHJlYW06IGN5Y2xlIGRldGVjdGVkLCBkZXBfc3RyZWFtKCVwKT0lZCBzdHJlYW0oJXApPSVkXG4iLAorICAgICAgICAgICBkZXBfc3RyZWFtLCBkZXBfc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgICAgbmdodHRwMl9zdHJlYW1fZGVwX3JlbW92ZV9zdWJ0cmVlKGRlcF9zdHJlYW0pOworICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGVwX2FkZF9zdWJ0cmVlKHN0cmVhbS0+ZGVwX3ByZXYsIGRlcF9zdHJlYW0pOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgYXNzZXJ0KGRlcF9zdHJlYW0pOworCisgIGlmIChkZXBfc3RyZWFtID09IHN0cmVhbS0+ZGVwX3ByZXYgJiYgIXByaV9zcGVjLT5leGNsdXNpdmUpIHsKKyAgICAvKiBUaGlzIGlzIG1pbm9yIG9wdGltaXphdGlvbiB3aGVuIGp1c3Qgd2VpZ2h0IGlzIGNoYW5nZWQuICovCisgICAgbmdodHRwMl9zdHJlYW1fY2hhbmdlX3dlaWdodChzdHJlYW0sIHByaV9zcGVjLT53ZWlnaHQpOworCisgICAgcmV0dXJuIDA7CisgIH0KKworICBuZ2h0dHAyX3N0cmVhbV9kZXBfcmVtb3ZlX3N1YnRyZWUoc3RyZWFtKTsKKworICAvKiBXZSBoYXZlIHRvIHVwZGF0ZSB3ZWlnaHQgYWZ0ZXIgcmVtb3Zpbmcgc3RyZWFtIGZyb20gdHJlZSAqLworICBzdHJlYW0tPndlaWdodCA9IHByaV9zcGVjLT53ZWlnaHQ7CisKKyAgaWYgKHByaV9zcGVjLT5leGNsdXNpdmUpIHsKKyAgICBydiA9IG5naHR0cDJfc3RyZWFtX2RlcF9pbnNlcnRfc3VidHJlZShkZXBfc3RyZWFtLCBzdHJlYW0pOworICB9IGVsc2UgeworICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGVwX2FkZF9zdWJ0cmVlKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgIH0KKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKSB7CisgIC8qIFRPRE8gUmV0dXJuIGVycm9yIGlmIHN0cmVhbSBpcyBub3QgZm91bmQgZm9yIHRoZSBmcmFtZSByZXF1aXJpbmcKKyAgICAgc3RyZWFtIHByZXNlbmNlLiAqLworICBpbnQgcnYgPSAwOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisKKyAgc3dpdGNoIChmcmFtZS0+aGQudHlwZSkgeworICBjYXNlIE5HSFRUUDJfREFUQToKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQ7CisgICAgfQorCisgICAgaWYgKHN0cmVhbS0+aXRlbSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0RBVEFfRVhJU1Q7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9hdHRhY2hfaXRlbShzdHJlYW0sIGl0ZW0pOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisgICAgLyogV2UgcHVzaCByZXF1ZXN0IEhFQURFUlMgYW5kIHB1c2ggcmVzcG9uc2UgSEVBREVSUyB0bworICAgICAgIGRlZGljYXRlZCBxdWV1ZSBiZWNhdXNlIHRoZWlyIHRyYW5zbWlzc2lvbiBpcyBhZmZlY3RlZCBieQorICAgICAgIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgKi8KKyAgICAvKiBUT0RPIElmIDIgSEVBREVSUyBhcmUgc3VibWl0dGVkIGZvciByZXNlcnZlZCBzdHJlYW0sIHRoZW4KKyAgICAgICBib3RoIG9mIHRoZW0gYXJlIHF1ZXVlZCBpbnRvIG9iX3N5biwgd2hpY2ggaXMgbm90CisgICAgICAgZGVzaXJhYmxlLiAqLworICAgIGlmIChmcmFtZS0+aGVhZGVycy5jYXQgPT0gTkdIVFRQMl9IQ0FUX1JFUVVFU1QgfHwKKyAgICAgICAgKHN0cmVhbSAmJiBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEKSkgeworICAgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wdXNoKCZzZXNzaW9uLT5vYl9zeW4sIGl0ZW0pOworICAgICAgaXRlbS0+cXVldWVkID0gMTsKKyAgICAgIHJldHVybiAwOworICAgICAgOworICAgIH0KKworICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcHVzaCgmc2Vzc2lvbi0+b2JfcmVnLCBpdGVtKTsKKyAgICBpdGVtLT5xdWV1ZWQgPSAxOworICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1M6CisgIGNhc2UgTkdIVFRQMl9QSU5HOgorICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcHVzaCgmc2Vzc2lvbi0+b2JfdXJnZW50LCBpdGVtKTsKKyAgICBpdGVtLT5xdWV1ZWQgPSAxOworICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfUlNUX1NUUkVBTToKKyAgICBpZiAoc3RyZWFtKSB7CisgICAgICBzdHJlYW0tPnN0YXRlID0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORzsKKyAgICB9CisgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wdXNoKCZzZXNzaW9uLT5vYl9yZWcsIGl0ZW0pOworICAgIGl0ZW0tPnF1ZXVlZCA9IDE7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6IHsKKyAgICBuZ2h0dHAyX2hlYWRlcnNfYXV4X2RhdGEgKmF1eF9kYXRhOworICAgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBwcmlfc3BlYzsKKworICAgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmhlYWRlcnM7CisKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQ7CisgICAgfQorCisgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjX2luaXQoJnByaV9zcGVjLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0RFRkFVTFRfV0VJR0hULCAwKTsKKworICAgIGlmICghbmdodHRwMl9zZXNzaW9uX29wZW5fc3RyZWFtKAorICAgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQsCisgICAgICAgICAgICBOR0hUVFAyX1NUUkVBTV9GTEFHX05PTkUsICZwcmlfc3BlYywgTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQsCisgICAgICAgICAgICBhdXhfZGF0YS0+c3RyZWFtX3VzZXJfZGF0YSkpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICB9CisKKyAgICAvKiBXZSBkb24ndCBoYXZlIHRvIGNhbGwgbmdodHRwMl9zZXNzaW9uX2FkanVzdF9jbG9zZWRfc3RyZWFtKCkKKyAgICAgICBoZXJlLCBzaW5jZSBzdHJlYW0tPnN0cmVhbV9pZCBpcyBsb2NhbCBzdHJlYW1faWQsIGFuZCBpdCBkb2VzCisgICAgICAgbm90IGFmZmVjdCBjbG9zZWQgc3RyZWFtIGNvdW50LiAqLworCisgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wdXNoKCZzZXNzaW9uLT5vYl9yZWcsIGl0ZW0pOworICAgIGl0ZW0tPnF1ZXVlZCA9IDE7CisKKyAgICByZXR1cm4gMDsKKyAgfQorICBjYXNlIE5HSFRUUDJfV0lORE9XX1VQREFURToKKyAgICBpZiAoc3RyZWFtKSB7CisgICAgICBzdHJlYW0tPndpbmRvd191cGRhdGVfcXVldWVkID0gMTsKKyAgICB9IGVsc2UgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgPT0gMCkgeworICAgICAgc2Vzc2lvbi0+d2luZG93X3VwZGF0ZV9xdWV1ZWQgPSAxOworICAgIH0KKyAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3B1c2goJnNlc3Npb24tPm9iX3JlZywgaXRlbSk7CisgICAgaXRlbS0+cXVldWVkID0gMTsKKyAgICByZXR1cm4gMDsKKyAgZGVmYXVsdDoKKyAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3B1c2goJnNlc3Npb24tPm9iX3JlZywgaXRlbSk7CisgICAgaXRlbS0+cXVldWVkID0gMTsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisgIGlmIChzdHJlYW0gJiYgc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBDYW5jZWwgcGVuZGluZyByZXF1ZXN0IEhFQURFUlMgaW4gb2Jfc3luIGlmIHRoaXMgUlNUX1NUUkVBTQorICAgICByZWZlcnMgdG8gdGhhdCBzdHJlYW0uICovCisgIGlmICghc2Vzc2lvbi0+c2VydmVyICYmIG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKSAmJgorICAgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3N5bikpIHsKKyAgICBuZ2h0dHAyX2hlYWRlcnNfYXV4X2RhdGEgKmF1eF9kYXRhOworICAgIG5naHR0cDJfZnJhbWUgKmhlYWRlcnNfZnJhbWU7CisKKyAgICBoZWFkZXJzX2ZyYW1lID0gJm5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9zeW4pLT5mcmFtZTsKKyAgICBhc3NlcnQoaGVhZGVyc19mcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX0hFQURFUlMpOworCisgICAgaWYgKGhlYWRlcnNfZnJhbWUtPmhkLnN0cmVhbV9pZCA8PSBzdHJlYW1faWQgJiYKKyAgICAgICAgKHVpbnQzMl90KXN0cmVhbV9pZCA8IHNlc3Npb24tPm5leHRfc3RyZWFtX2lkKSB7CisKKyAgICAgIGZvciAoaXRlbSA9IHNlc3Npb24tPm9iX3N5bi5oZWFkOyBpdGVtOyBpdGVtID0gaXRlbS0+cW5leHQpIHsKKyAgICAgICAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuaGVhZGVyczsKKworICAgICAgICBpZiAoaXRlbS0+ZnJhbWUuaGQuc3RyZWFtX2lkIDwgc3RyZWFtX2lkKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBzdHJlYW1faWQgaW4gb2Jfc3luIHF1ZXVlIG11c3QgYmUgc3RyaWN0bHkgaW5jcmVhc2luZy4gIElmCisgICAgICAgICAgIHdlIGZvdW5kIGxhcmdlciBJRCwgdGhlbiB3ZSBjYW4gYnJlYWsgaGVyZS4gKi8KKyAgICAgICAgaWYgKGl0ZW0tPmZyYW1lLmhkLnN0cmVhbV9pZCA+IHN0cmVhbV9pZCB8fCBhdXhfZGF0YS0+Y2FuY2VsZWQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1eF9kYXRhLT5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKyAgICAgICAgYXV4X2RhdGEtPmNhbmNlbGVkID0gMTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpdGVtID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfb3V0Ym91bmRfaXRlbSkpOworICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV9yc3Rfc3RyZWFtX2luaXQoJmZyYW1lLT5yc3Rfc3RyZWFtLCBzdHJlYW1faWQsIGVycm9yX2NvZGUpOworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX3JzdF9zdHJlYW1fZnJlZSgmZnJhbWUtPnJzdF9zdHJlYW0pOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlY19pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW1fc3RhdGUgaW5pdGlhbF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtID0gTlVMTDsKKyAgaW50IHN0cmVhbV9hbGxvYyA9IDA7CisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBwcmlfc3BlY19kZWZhdWx0OworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjID0gcHJpX3NwZWNfaW47CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgaWYgKHN0cmVhbSkgeworICAgIGFzc2VydChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0lETEUpOworICAgIGFzc2VydChuZ2h0dHAyX3N0cmVhbV9pbl9kZXBfdHJlZShzdHJlYW0pKTsKKyAgICBuZ2h0dHAyX3Nlc3Npb25fZGV0YWNoX2lkbGVfc3RyZWFtKHNlc3Npb24sIHN0cmVhbSk7CisgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXBfcmVtb3ZlKHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdHJlYW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9zdHJlYW0pKTsKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0cmVhbV9hbGxvYyA9IDE7CisgIH0KKworICBpZiAocHJpX3NwZWMtPnN0cmVhbV9pZCAhPSAwKSB7CisgICAgZGVwX3N0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBwcmlfc3BlYy0+c3RyZWFtX2lkKTsKKworICAgIGlmICghZGVwX3N0cmVhbSAmJgorICAgICAgICBzZXNzaW9uX2RldGVjdF9pZGxlX3N0cmVhbShzZXNzaW9uLCBwcmlfc3BlYy0+c3RyZWFtX2lkKSkgeworICAgICAgLyogRGVwZW5kcyBvbiBpZGxlIHN0cmVhbSwgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gbWVtb3J5LgorICAgICAgICAgQXNzaWduIGRlZmF1bHQgcHJpb3JpdHkgZm9yIGl0LiAqLworICAgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjX2RlZmF1bHRfaW5pdCgmcHJpX3NwZWNfZGVmYXVsdCk7CisKKyAgICAgIGRlcF9zdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oCisgICAgICAgICAgc2Vzc2lvbiwgcHJpX3NwZWMtPnN0cmVhbV9pZCwgTkdIVFRQMl9GTEFHX05PTkUsICZwcmlfc3BlY19kZWZhdWx0LAorICAgICAgICAgIE5HSFRUUDJfU1RSRUFNX0lETEUsIE5VTEwpOworCisgICAgICBpZiAoZGVwX3N0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChzdHJlYW1fYWxsb2MpIHsKKyAgICAgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgc3RyZWFtKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoIWRlcF9zdHJlYW0gfHwgIW5naHR0cDJfc3RyZWFtX2luX2RlcF90cmVlKGRlcF9zdHJlYW0pKSB7CisgICAgICAvKiBJZiBkZXBfc3RyZWFtIGlzIG5vdCBwYXJ0IG9mIGRlcGVuZGVuY3kgdHJlZSwgc3RyZWFtIHdpbGwgZ2V0CisgICAgICAgICBkZWZhdWx0IHByaW9yaXR5LiAgVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZW4KKyAgICAgICAgIHByaV9zcGVjLT5zdHJlYW1faWQgPT0gc3RyZWFtX2lkLiAgVGhpcyBoYXBwZW5zIGJlY2F1c2Ugd2UKKyAgICAgICAgIGRvbid0IGNoZWNrIHByaV9zcGVjLT5zdHJlYW1faWQgYWdhaW5zdCBuZXcgc3RyZWFtIElEIGluCisgICAgICAgICBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0LiAgVGhpcyBhbHNvIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBpZGxlCisgICAgICAgICBzdHJlYW0gY3JlYXRlZCBieSBQUklPUklUWSBmcmFtZSB3YXMgb3BlbmVkLiAgU29tZWhvdyB3ZQorICAgICAgICAgZmlyc3QgcmVtb3ZlIHRoZSBpZGxlIHN0cmVhbSBmcm9tIGRlcGVuZGVuY3kgdHJlZS4gIFRoaXMgaXMKKyAgICAgICAgIGRvbmUgdG8gc2ltcGxpZnkgY29kZSBiYXNlLCBidXQgaWRlYWxseSB3ZSBzaG91bGQgcmV0YWluIG9sZAorICAgICAgICAgZGVwZW5kZW5jeS4gIEJ1dCBJJ20gbm90IHN1cmUgdGhpcyBhZGRzIHZhbHVlcy4gKi8KKyAgICAgIG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQoJnByaV9zcGVjX2RlZmF1bHQpOworICAgICAgcHJpX3NwZWMgPSAmcHJpX3NwZWNfZGVmYXVsdDsKKyAgICB9CisgIH0KKworICBpZiAoaW5pdGlhbF9zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCkgeworICAgIGZsYWdzIHw9IE5HSFRUUDJfU1RSRUFNX0ZMQUdfUFVTSDsKKyAgfQorCisgIGlmIChzdHJlYW1fYWxsb2MpIHsKKyAgICBuZ2h0dHAyX3N0cmVhbV9pbml0KHN0cmVhbSwgc3RyZWFtX2lkLCBmbGFncywgaW5pdGlhbF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaV9zcGVjLT53ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQzMl90KXNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmluaXRpYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1fdXNlcl9kYXRhLCBtZW0pOworCisgICAgcnYgPSBuZ2h0dHAyX21hcF9pbnNlcnQoJnNlc3Npb24tPnN0cmVhbXMsICZzdHJlYW0tPm1hcF9lbnRyeSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIG5naHR0cDJfc3RyZWFtX2ZyZWUoc3RyZWFtKTsKKyAgICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBzdHJlYW0pOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB9IGVsc2UgeworICAgIHN0cmVhbS0+ZmxhZ3MgPSBmbGFnczsKKyAgICBzdHJlYW0tPnN0YXRlID0gaW5pdGlhbF9zdGF0ZTsKKyAgICBzdHJlYW0tPndlaWdodCA9IHByaV9zcGVjLT53ZWlnaHQ7CisgICAgc3RyZWFtLT5zdHJlYW1fdXNlcl9kYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgfQorCisgIHN3aXRjaCAoaW5pdGlhbF9zdGF0ZSkgeworICBjYXNlIE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEOgorICAgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbV9pZCkpIHsKKyAgICAgIC8qIHJlc2VydmVkIChsb2NhbCkgKi8KKyAgICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1JEKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogcmVzZXJ2ZWQgKHJlbW90ZSkgKi8KKyAgICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1dSKTsKKyAgICAgICsrc2Vzc2lvbi0+bnVtX2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXM7CisgICAgfQorICAgIC8qIFJlc2VydmVkIHN0cmVhbSBkb2VzIG5vdCBjb3VudCBpbiB0aGUgY29uY3VycmVudCBzdHJlYW1zCisgICAgICAgbGltaXQuIFRoYXQgaXMgb25lIG9mIHRoZSBET1MgdmVjdG9yLiAqLworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfU1RSRUFNX0lETEU6CisgICAgLyogSWRsZSBzdHJlYW0gZG9lcyBub3QgY291bnQgdG93YXJkIHRoZSBjb25jdXJyZW50IHN0cmVhbXMgbGltaXQuCisgICAgICAgVGhpcyBpcyB1c2VkIGFzIGFuY2hvciBub2RlIGluIGRlcGVuZGVuY3kgdHJlZS4gKi8KKyAgICBuZ2h0dHAyX3Nlc3Npb25fa2VlcF9pZGxlX3N0cmVhbShzZXNzaW9uLCBzdHJlYW0pOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbV9pZCkpIHsKKyAgICAgICsrc2Vzc2lvbi0+bnVtX291dGdvaW5nX3N0cmVhbXM7CisgICAgfSBlbHNlIHsKKyAgICAgICsrc2Vzc2lvbi0+bnVtX2luY29taW5nX3N0cmVhbXM7CisgICAgfQorICB9CisKKyAgaWYgKHByaV9zcGVjLT5zdHJlYW1faWQgPT0gMCkgeworICAgIGRlcF9zdHJlYW0gPSAmc2Vzc2lvbi0+cm9vdDsKKyAgfQorCisgIGFzc2VydChkZXBfc3RyZWFtKTsKKworICBpZiAocHJpX3NwZWMtPmV4Y2x1c2l2ZSkgeworICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGVwX2luc2VydChkZXBfc3RyZWFtLCBzdHJlYW0pOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbmdodHRwMl9zdHJlYW1fZGVwX2FkZChkZXBfc3RyZWFtLCBzdHJlYW0pOworICB9CisKKyAgcmV0dXJuIHN0cmVhbTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX21lbSAqbWVtOworICBpbnQgaXNfbXlfc3RyZWFtX2lkOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIERFQlVHRigic3RyZWFtOiBzdHJlYW0oJXApPSVkIGNsb3NlXG4iLCBzdHJlYW0sIHN0cmVhbS0+c3RyZWFtX2lkKTsKKworICBpZiAoc3RyZWFtLT5pdGVtKSB7CisgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworCisgICAgaXRlbSA9IHN0cmVhbS0+aXRlbTsKKworICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGV0YWNoX2l0ZW0oc3RyZWFtKTsKKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgLyogSWYgaXRlbSBpcyBxdWV1ZWQsIGl0IHdpbGwgYmUgZGVsZXRlZCB3aGVuIGl0IGlzIHBvcHBlZAorICAgICAgIChuZ2h0dHAyX3Nlc3Npb25fcHJlcF9mcmFtZSgpIHdpbGwgZmFpbCkuICBJZiBzZXNzaW9uLT5hb2IuaXRlbQorICAgICAgIHBvaW50cyB0byB0aGlzIGl0ZW0sIGxldCBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldCgpCisgICAgICAgZnJlZSB0aGUgaXRlbS4gKi8KKyAgICBpZiAoIWl0ZW0tPnF1ZXVlZCAmJiBpdGVtICE9IHNlc3Npb24tPmFvYi5pdGVtKSB7CisgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1fZnJlZShpdGVtLCBtZW0pOworICAgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworICAgIH0KKyAgfQorCisgIC8qIFdlIGNhbGwgb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrIGV2ZW4gaWYgc3RyZWFtLT5zdGF0ZSBpcworICAgICBOR0hUVFAyX1NUUkVBTV9JTklUSUFMLiBUaGlzIHdpbGwgaGFwcGVuIHdoaWxlIHNlbmRpbmcgcmVxdWVzdAorICAgICBIRUFERVJTLCBhIGxvY2FsIGVuZHBvaW50IHJlY2VpdmVzIFJTVF9TVFJFQU0gZm9yIHRoYXQgc3RyZWFtLiBJdAorICAgICBtYXkgYmUgUFJPVE9DT0xfRVJST1IsIGJ1dCB3aXRob3V0IG5vdGlmeWluZyBzdHJlYW0gY2xvc3VyZSB3aWxsCisgICAgIGhhbmcgdGhlIHN0cmVhbSBpbiBhIGxvY2FsIGVuZHBvaW50LgorICAqLworCisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrKSB7CisgICAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2soCisgICAgICAgICAgICBzZXNzaW9uLCBzdHJlYW1faWQsIGVycm9yX2NvZGUsIHNlc3Npb24tPnVzZXJfZGF0YSkgIT0gMCkgeworCisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0KKworICBpc19teV9zdHJlYW1faWQgPSBuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgLyogcHVzaGVkIHN0cmVhbXMgd2hpY2ggaXMgbm90IG9wZW5lZCB5ZXQgaXMgbm90IGNvdW50ZWQgdG93YXJkIG1heAorICAgICBjb25jdXJyZW50IGxpbWl0cyAqLworICBpZiAoKHN0cmVhbS0+ZmxhZ3MgJiBOR0hUVFAyX1NUUkVBTV9GTEFHX1BVU0gpKSB7CisgICAgaWYgKCFpc19teV9zdHJlYW1faWQpIHsKKyAgICAgIC0tc2Vzc2lvbi0+bnVtX2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXM7CisgICAgfQorICB9IGVsc2UgeworICAgIGlmIChpc19teV9zdHJlYW1faWQpIHsKKyAgICAgIC0tc2Vzc2lvbi0+bnVtX291dGdvaW5nX3N0cmVhbXM7CisgICAgfSBlbHNlIHsKKyAgICAgIC0tc2Vzc2lvbi0+bnVtX2luY29taW5nX3N0cmVhbXM7CisgICAgfQorICB9CisKKyAgLyogQ2xvc2VzIGJvdGggZGlyZWN0aW9ucyBqdXN0IGluIGNhc2UgdGhleSBhcmUgbm90IGNsb3NlZCB5ZXQgKi8KKyAgc3RyZWFtLT5mbGFncyB8PSBOR0hUVFAyX1NUUkVBTV9GTEFHX0NMT1NFRDsKKworICBpZiAoKHNlc3Npb24tPm9wdF9mbGFncyAmIE5HSFRUUDJfT1BUTUFTS19OT19DTE9TRURfU1RSRUFNUykgPT0gMCAmJgorICAgICAgc2Vzc2lvbi0+c2VydmVyICYmICFpc19teV9zdHJlYW1faWQgJiYKKyAgICAgIG5naHR0cDJfc3RyZWFtX2luX2RlcF90cmVlKHN0cmVhbSkpIHsKKyAgICAvKiBPbiBzZXJ2ZXIgc2lkZSwgcmV0YWluIHN0cmVhbSBhdCBtb3N0IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMKKyAgICAgICBjb21iaW5lZCB3aXRoIHRoZSBjdXJyZW50IGFjdGl2ZSBpbmNvbWluZyBzdHJlYW1zIHRvIG1ha2UKKyAgICAgICBkZXBlbmRlbmN5IHRyZWUgd29yayBiZXR0ZXIuICovCisgICAgbmdodHRwMl9zZXNzaW9uX2tlZXBfY2xvc2VkX3N0cmVhbShzZXNzaW9uLCBzdHJlYW0pOworICB9IGVsc2UgeworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Rlc3Ryb3lfc3RyZWFtKHNlc3Npb24sIHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9kZXN0cm95X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgaW50IHJ2OworCisgIERFQlVHRigic3RyZWFtOiBkZXN0cm95IGNsb3NlZCBzdHJlYW0oJXApPSVkXG4iLCBzdHJlYW0sIHN0cmVhbS0+c3RyZWFtX2lkKTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmIChuZ2h0dHAyX3N0cmVhbV9pbl9kZXBfdHJlZShzdHJlYW0pKSB7CisgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXBfcmVtb3ZlKHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICBuZ2h0dHAyX21hcF9yZW1vdmUoJnNlc3Npb24tPnN0cmVhbXMsIHN0cmVhbS0+c3RyZWFtX2lkKTsKKyAgbmdodHRwMl9zdHJlYW1fZnJlZShzdHJlYW0pOworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgc3RyZWFtKTsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fa2VlcF9jbG9zZWRfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIERFQlVHRigic3RyZWFtOiBrZWVwIGNsb3NlZCBzdHJlYW0oJXApPSVkLCBzdGF0ZT0lZFxuIiwgc3RyZWFtLAorICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbS0+c3RhdGUpOworCisgIGlmIChzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX3RhaWwpIHsKKyAgICBzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX3RhaWwtPmNsb3NlZF9uZXh0ID0gc3RyZWFtOworICAgIHN0cmVhbS0+Y2xvc2VkX3ByZXYgPSBzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX3RhaWw7CisgIH0gZWxzZSB7CisgICAgc2Vzc2lvbi0+Y2xvc2VkX3N0cmVhbV9oZWFkID0gc3RyZWFtOworICB9CisgIHNlc3Npb24tPmNsb3NlZF9zdHJlYW1fdGFpbCA9IHN0cmVhbTsKKworICArK3Nlc3Npb24tPm51bV9jbG9zZWRfc3RyZWFtczsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fa2VlcF9pZGxlX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgREVCVUdGKCJzdHJlYW06IGtlZXAgaWRsZSBzdHJlYW0oJXApPSVkLCBzdGF0ZT0lZFxuIiwgc3RyZWFtLAorICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbS0+c3RhdGUpOworCisgIGlmIChzZXNzaW9uLT5pZGxlX3N0cmVhbV90YWlsKSB7CisgICAgc2Vzc2lvbi0+aWRsZV9zdHJlYW1fdGFpbC0+Y2xvc2VkX25leHQgPSBzdHJlYW07CisgICAgc3RyZWFtLT5jbG9zZWRfcHJldiA9IHNlc3Npb24tPmlkbGVfc3RyZWFtX3RhaWw7CisgIH0gZWxzZSB7CisgICAgc2Vzc2lvbi0+aWRsZV9zdHJlYW1faGVhZCA9IHN0cmVhbTsKKyAgfQorICBzZXNzaW9uLT5pZGxlX3N0cmVhbV90YWlsID0gc3RyZWFtOworCisgICsrc2Vzc2lvbi0+bnVtX2lkbGVfc3RyZWFtczsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fZGV0YWNoX2lkbGVfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpwcmV2X3N0cmVhbSwgKm5leHRfc3RyZWFtOworCisgIERFQlVHRigic3RyZWFtOiBkZXRhY2ggaWRsZSBzdHJlYW0oJXApPSVkLCBzdGF0ZT0lZFxuIiwgc3RyZWFtLAorICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbS0+c3RhdGUpOworCisgIHByZXZfc3RyZWFtID0gc3RyZWFtLT5jbG9zZWRfcHJldjsKKyAgbmV4dF9zdHJlYW0gPSBzdHJlYW0tPmNsb3NlZF9uZXh0OworCisgIGlmIChwcmV2X3N0cmVhbSkgeworICAgIHByZXZfc3RyZWFtLT5jbG9zZWRfbmV4dCA9IG5leHRfc3RyZWFtOworICB9IGVsc2UgeworICAgIHNlc3Npb24tPmlkbGVfc3RyZWFtX2hlYWQgPSBuZXh0X3N0cmVhbTsKKyAgfQorCisgIGlmIChuZXh0X3N0cmVhbSkgeworICAgIG5leHRfc3RyZWFtLT5jbG9zZWRfcHJldiA9IHByZXZfc3RyZWFtOworICB9IGVsc2UgeworICAgIHNlc3Npb24tPmlkbGVfc3RyZWFtX3RhaWwgPSBwcmV2X3N0cmVhbTsKKyAgfQorCisgIHN0cmVhbS0+Y2xvc2VkX3ByZXYgPSBOVUxMOworICBzdHJlYW0tPmNsb3NlZF9uZXh0ID0gTlVMTDsKKworICAtLXNlc3Npb24tPm51bV9pZGxlX3N0cmVhbXM7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2Nsb3NlZF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHNpemVfdCBudW1fc3RyZWFtX21heDsKKyAgaW50IHJ2OworCisgIGlmIChzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zID09CisgICAgICBOR0hUVFAyX0RFRkFVTFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykgeworICAgIG51bV9zdHJlYW1fbWF4ID0gc2Vzc2lvbi0+cGVuZGluZ19sb2NhbF9tYXhfY29uY3VycmVudF9zdHJlYW07CisgIH0gZWxzZSB7CisgICAgbnVtX3N0cmVhbV9tYXggPSBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zOworICB9CisKKyAgREVCVUdGKCJzdHJlYW06IGFkanVzdGluZyBrZXB0IGNsb3NlZCBzdHJlYW1zIG51bV9jbG9zZWRfc3RyZWFtcz0lenUsICIKKyAgICAgICAgICJudW1faW5jb21pbmdfc3RyZWFtcz0lenUsIG1heF9jb25jdXJyZW50X3N0cmVhbXM9JXp1XG4iLAorICAgICAgICAgc2Vzc2lvbi0+bnVtX2Nsb3NlZF9zdHJlYW1zLCBzZXNzaW9uLT5udW1faW5jb21pbmdfc3RyZWFtcywKKyAgICAgICAgIG51bV9zdHJlYW1fbWF4KTsKKworICB3aGlsZSAoc2Vzc2lvbi0+bnVtX2Nsb3NlZF9zdHJlYW1zID4gMCAmJgorICAgICAgICAgc2Vzc2lvbi0+bnVtX2Nsb3NlZF9zdHJlYW1zICsgc2Vzc2lvbi0+bnVtX2luY29taW5nX3N0cmVhbXMgPgorICAgICAgICAgICAgIG51bV9zdHJlYW1fbWF4KSB7CisgICAgbmdodHRwMl9zdHJlYW0gKmhlYWRfc3RyZWFtOworICAgIG5naHR0cDJfc3RyZWFtICpuZXh0OworCisgICAgaGVhZF9zdHJlYW0gPSBzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX2hlYWQ7CisKKyAgICBhc3NlcnQoaGVhZF9zdHJlYW0pOworCisgICAgbmV4dCA9IGhlYWRfc3RyZWFtLT5jbG9zZWRfbmV4dDsKKworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Rlc3Ryb3lfc3RyZWFtKHNlc3Npb24sIGhlYWRfc3RyZWFtKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIC8qIGhlYWRfc3RyZWFtIGlzIG5vdyBmcmVlZCAqLworCisgICAgc2Vzc2lvbi0+Y2xvc2VkX3N0cmVhbV9oZWFkID0gbmV4dDsKKworICAgIGlmIChzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX2hlYWQpIHsKKyAgICAgIHNlc3Npb24tPmNsb3NlZF9zdHJlYW1faGVhZC0+Y2xvc2VkX3ByZXYgPSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICBzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX3RhaWwgPSBOVUxMOworICAgIH0KKworICAgIC0tc2Vzc2lvbi0+bnVtX2Nsb3NlZF9zdHJlYW1zOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2lkbGVfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBzaXplX3QgbWF4OworICBpbnQgcnY7CisKKyAgLyogTWFrZSBtaW5pbXVtIG51bWJlciBvZiBpZGxlIHN0cmVhbXMgMTYsIGFuZCBtYXhpbXVtIDEwMCwgd2hpY2gKKyAgICAgYXJlIGFyYml0cmFyeSBjaG9zZW4gbnVtYmVycy4gKi8KKyAgbWF4ID0gbmdodHRwMl9taW4oCisgICAgICAxMDAsIG5naHR0cDJfbWF4KAorICAgICAgICAgICAgICAgMTYsIG5naHR0cDJfbWluKHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+cGVuZGluZ19sb2NhbF9tYXhfY29uY3VycmVudF9zdHJlYW0pKSk7CisKKyAgREVCVUdGKCJzdHJlYW06IGFkanVzdGluZyBrZXB0IGlkbGUgc3RyZWFtcyBudW1faWRsZV9zdHJlYW1zPSV6dSwgbWF4PSV6dVxuIiwKKyAgICAgICAgIHNlc3Npb24tPm51bV9pZGxlX3N0cmVhbXMsIG1heCk7CisKKyAgd2hpbGUgKHNlc3Npb24tPm51bV9pZGxlX3N0cmVhbXMgPiBtYXgpIHsKKyAgICBuZ2h0dHAyX3N0cmVhbSAqaGVhZDsKKyAgICBuZ2h0dHAyX3N0cmVhbSAqbmV4dDsKKworICAgIGhlYWQgPSBzZXNzaW9uLT5pZGxlX3N0cmVhbV9oZWFkOworICAgIGFzc2VydChoZWFkKTsKKworICAgIG5leHQgPSBoZWFkLT5jbG9zZWRfbmV4dDsKKworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Rlc3Ryb3lfc3RyZWFtKHNlc3Npb24sIGhlYWQpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgLyogaGVhZCBpcyBub3cgZGVzdHJveWVkICovCisKKyAgICBzZXNzaW9uLT5pZGxlX3N0cmVhbV9oZWFkID0gbmV4dDsKKworICAgIGlmIChzZXNzaW9uLT5pZGxlX3N0cmVhbV9oZWFkKSB7CisgICAgICBzZXNzaW9uLT5pZGxlX3N0cmVhbV9oZWFkLT5jbG9zZWRfcHJldiA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgIHNlc3Npb24tPmlkbGVfc3RyZWFtX3RhaWwgPSBOVUxMOworICAgIH0KKworICAgIC0tc2Vzc2lvbi0+bnVtX2lkbGVfc3RyZWFtczsKKyAgfQorCisgIHJldHVybiAwOworfQorCisvKgorICogQ2xvc2VzIHN0cmVhbSB3aXRoIHN0cmVhbSBJRCB8c3RyZWFtX2lkfCBpZiBib3RoIHRyYW5zbWlzc2lvbiBhbmQKKyAqIHJlY2VwdGlvbiBvZiB0aGUgc3RyZWFtIHdlcmUgZGlzYWxsb3dlZC4gVGhlIHxlcnJvcl9jb2RlfCBpbmRpY2F0ZXMKKyAqIHRoZSByZWFzb24gb2YgdGhlIGNsb3N1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UCisgKiAgIFRoZSBzdHJlYW0gaXMgbm90IGZvdW5kLgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbV9pZl9zaHV0X3Jkd3IobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaWYgKChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfUkRXUikgPT0gTkdIVFRQMl9TSFVUX1JEV1IpIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbShzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX05PX0VSUk9SKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiBsb2NhbCBlbmRwb2ludCBhbGxvd3MgcmVjZXB0aW9uIG9mIG5ldyBzdHJlYW0KKyAqIGZyb20gcmVtb3RlLgorICovCitzdGF0aWMgaW50IHNlc3Npb25fYWxsb3dfaW5jb21pbmdfbmV3X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJgorICAgICAgICAgIChOR0hUVFAyX0dPQVdBWV9URVJNX09OX1NFTkQgfCBOR0hUVFAyX0dPQVdBWV9TRU5UKSkgPT0gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBub256ZXJvIGlmIHNlc3Npb24gaXMgY2xvc2luZy4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX2lzX2Nsb3NpbmcobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYgTkdIVFRQMl9HT0FXQVlfVEVSTV9PTl9TRU5EKSAhPSAwIHx8CisgICAgICAgICAobmdodHRwMl9zZXNzaW9uX3dhbnRfcmVhZChzZXNzaW9uKSA9PSAwICYmCisgICAgICAgICAgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoc2Vzc2lvbikgPT0gMCk7Cit9CisKKy8qCisgKiBDaGVjayB0aGF0IHdlIGNhbiBzZW5kIGEgZnJhbWUgdG8gdGhlIHxzdHJlYW18LiBUaGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIDAgaWYgd2UgY2FuIHNlbmQgYSBmcmFtZSB0byB0aGUgfGZyYW1lfCwgb3Igb25lIG9mIHRoZQorICogZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQKKyAqICAgVGhlIHN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZC4KKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9TSFVUX1dSCisgKiAgIFRoZSBzdHJlYW0gaXMgaGFsZi1jbG9zZWQgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORworICogICBUaGlzIHNlc3Npb24gaXMgY2xvc2luZy4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX3ByZWRpY2F0ZV9mb3Jfc3RyZWFtX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRDsKKyAgfQorICBpZiAoc2Vzc2lvbl9pc19jbG9zaW5nKHNlc3Npb24pKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzsKKyAgfQorICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1dSKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9TSFVUX1dSOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NoZWNrX3JlcXVlc3RfYWxsb3dlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuICFzZXNzaW9uLT5zZXJ2ZXIgJiYgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgPD0gSU5UMzJfTUFYICYmCisgICAgICAgICAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYgTkdIVFRQMl9HT0FXQVlfUkVDVikgPT0gMCAmJgorICAgICAgICAgIXNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHJlcXVlc3QgSEVBREVSUyBmcmFtZSwgd2hpY2ggb3BlbnMgc3RyZWFtLCBjYW4KKyAqIGJlIHNlbnQgYXQgdGhpcyB0aW1lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfU1RBUlRfU1RSRUFNX05PVF9BTExPV0VECisgKiAgICAgTmV3IHN0cmVhbSBjYW5ub3QgYmUgY3JlYXRlZCBiZWNhdXNlIG9mIEdPQVdBWTogc2Vzc2lvbiBpcworICogICAgIGdvaW5nIGRvd24gb3IgcmVjZWl2ZWQgbGFzdF9zdHJlYW1faWQgaXMgc3RyaWN0bHkgbGVzcyB0aGFuCisgKiAgICAgZnJhbWUtPmhkLnN0cmVhbV9pZC4KKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HCisgKiAgICAgcmVxdWVzdCBIRUFERVJTIHdhcyBjYW5jZWxlZCBieSBSU1RfU1RSRUFNIHdoaWxlIGl0IGlzIGluIHF1ZXVlLgorICovCitzdGF0aWMgaW50IHNlc3Npb25fcHJlZGljYXRlX3JlcXVlc3RfaGVhZGVyc19zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKSB7CisgIGlmIChpdGVtLT5hdXhfZGF0YS5oZWFkZXJzLmNhbmNlbGVkKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HOworICB9CisgIC8qIElmIHdlIGFyZSB0ZXJtaW5hdGluZyBzZXNzaW9uIChOR0hUVFAyX0dPQVdBWV9URVJNX09OX1NFTkQpLAorICAgICBHT0FXQVkgd2FzIHJlY2VpdmVkIGZyb20gcGVlciwgb3Igc2Vzc2lvbiBpcyBhYm91dCB0byBjbG9zZSwgbmV3CisgICAgIHJlcXVlc3QgaXMgbm90IGFsbG93ZWQuICovCisgIGlmICgoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYgTkdIVFRQMl9HT0FXQVlfUkVDVikgfHwKKyAgICAgIHNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVEFSVF9TVFJFQU1fTk9UX0FMTE9XRUQ7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBIRUFERVJTLCB3aGljaCBpcyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUKKyAqIHNlcnZlciwgd2l0aCB0aGUgfHN0cmVhbXwgY2FuIGJlIHNlbnQgYXQgdGhpcyB0aW1lLiAgVGhlIHxzdHJlYW18CisgKiBjYW4gYmUgTlVMTC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQKKyAqICAgICBUaGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIG9yIGRvZXMgbm90IGV4aXN0LgorICogTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1IKKyAqICAgICBUaGUgdHJhbnNtaXNzaW9uIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHN0cmVhbSAoZS5nLiwgYSBmcmFtZQorICogICAgIHdpdGggRU5EX1NUUkVBTSBmbGFnIHNldCBoYXMgYWxyZWFkeSBzZW50KQorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fSUQKKyAqICAgICBUaGUgc3RyZWFtIElEIGlzIGludmFsaWQuCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORworICogICAgIFJTVF9TVFJFQU0gd2FzIHF1ZXVlZCBmb3IgdGhpcyBzdHJlYW0uCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9TVEFURQorICogICAgIFRoZSBzdGF0ZSBvZiB0aGUgc3RyZWFtIGlzIG5vdCB2YWxpZC4KKyAqIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORworICogICAgIFRoaXMgc2Vzc2lvbiBpcyBjbG9zaW5nLgorICogTkdIVFRQMl9FUlJfUFJPVE8KKyAqICAgICBDbGllbnQgc2lkZSBhdHRlbXB0ZWQgdG8gc2VuZCByZXNwb25zZS4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX3ByZWRpY2F0ZV9yZXNwb25zZV9oZWFkZXJzX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnY7CisgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfZm9yX3N0cmVhbV9zZW5kKHNlc3Npb24sIHN0cmVhbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIGFzc2VydChzdHJlYW0pOworICBpZiAoIXNlc3Npb24tPnNlcnZlcikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9QUk9UTzsKKyAgfQorICBpZiAobmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fSUQ7CisgIH0KKyAgc3dpdGNoIChzdHJlYW0tPnN0YXRlKSB7CisgIGNhc2UgTkdIVFRQMl9TVFJFQU1fT1BFTklORzoKKyAgICByZXR1cm4gMDsKKyAgY2FzZSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HOgorICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORzsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEU7CisgIH0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIEhFQURFUlMgZm9yIHJlc2VydmVkIHN0cmVhbSBjYW4gYmUgc2VudC4gVGhlCisgKiB8c3RyZWFtfCBtdXN0IGJlIHJlc2VydmVkIHN0YXRlIGFuZCB0aGUgfHNlc3Npb258IGlzIHNlcnZlciBzaWRlLgorICogVGhlIHxzdHJlYW18IGNhbiBiZSBOVUxMLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICBUaGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLgorICogTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1IKKyAqICAgVGhlIHN0cmVhbSBpcyBoYWxmLWNsb3NlZCBmb3IgdHJhbnNtaXNzaW9uLgorICogTkdIVFRQMl9FUlJfUFJPVE8KKyAqICAgVGhlIHN0cmVhbSBpcyBub3QgcmVzZXJ2ZWQgc3RhdGUKKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQKKyAqICAgUlNUX1NUUkVBTSB3YXMgcXVldWVkIGZvciB0aGlzIHN0cmVhbS4KKyAqIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORworICogICBUaGlzIHNlc3Npb24gaXMgY2xvc2luZy4KKyAqIE5HSFRUUDJfRVJSX1NUQVJUX1NUUkVBTV9OT1RfQUxMT1dFRAorICogICBOZXcgc3RyZWFtIGNhbm5vdCBiZSBjcmVhdGVkIGJlY2F1c2UgR09BV0FZIGlzIGFscmVhZHkgc2VudCBvcgorICogICByZWNlaXZlZC4KKyAqIE5HSFRUUDJfRVJSX1BST1RPCisgKiAgIENsaWVudCBzaWRlIGF0dGVtcHRlZCB0byBzZW5kIHB1c2ggcmVzcG9uc2UuCisgKi8KK3N0YXRpYyBpbnQKK3Nlc3Npb25fcHJlZGljYXRlX3B1c2hfcmVzcG9uc2VfaGVhZGVyc19zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2OworICAvKiBUT0RPIFNob3VsZCBkaXNhbGxvdyBIRUFERVJTIGlmIEdPQVdBWSBoYXMgYWxyZWFkeSBiZWVuIGlzc3VlZD8gKi8KKyAgcnYgPSBzZXNzaW9uX3ByZWRpY2F0ZV9mb3Jfc3RyZWFtX3NlbmQoc2Vzc2lvbiwgc3RyZWFtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgYXNzZXJ0KHN0cmVhbSk7CisgIGlmICghc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1BST1RPOworICB9CisgIGlmIChzdHJlYW0tPnN0YXRlICE9IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1BST1RPOworICB9CisgIGlmIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJiBOR0hUVFAyX0dPQVdBWV9SRUNWKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUQVJUX1NUUkVBTV9OT1RfQUxMT1dFRDsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIEhFQURFUlMsIHdoaWNoIGlzIG5laXRoZXIgc3RyZWFtLW9wZW5pbmcgbm9yCisgKiBmaXJzdCByZXNwb25zZSBoZWFkZXIsIHdpdGggdGhlIHxzdHJlYW18IGNhbiBiZSBzZW50IGF0IHRoaXMgdGltZS4KKyAqIFRoZSB8c3RyZWFtfCBjYW4gYmUgTlVMTC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQKKyAqICAgICBUaGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIG9yIGRvZXMgbm90IGV4aXN0LgorICogTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1IKKyAqICAgICBUaGUgdHJhbnNtaXNzaW9uIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHN0cmVhbSAoZS5nLiwgYSBmcmFtZQorICogICAgIHdpdGggRU5EX1NUUkVBTSBmbGFnIHNldCBoYXMgYWxyZWFkeSBzZW50KQorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkcKKyAqICAgICBSU1RfU1RSRUFNIHdhcyBxdWV1ZWQgZm9yIHRoaXMgc3RyZWFtLgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEUKKyAqICAgICBUaGUgc3RhdGUgb2YgdGhlIHN0cmVhbSBpcyBub3QgdmFsaWQuCisgKiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkcKKyAqICAgVGhpcyBzZXNzaW9uIGlzIGNsb3NpbmcuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcmVkaWNhdGVfaGVhZGVyc19zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2OworICBydiA9IHNlc3Npb25fcHJlZGljYXRlX2Zvcl9zdHJlYW1fc2VuZChzZXNzaW9uLCBzdHJlYW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorICBhc3NlcnQoc3RyZWFtKTsKKworICBzd2l0Y2ggKHN0cmVhbS0+c3RhdGUpIHsKKyAgY2FzZSBOR0hUVFAyX1NUUkVBTV9PUEVORUQ6CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9TVFJFQU1fQ0xPU0lORzoKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkc7CisgIGRlZmF1bHQ6CisgICAgaWYgKG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX1NUQVRFOworICB9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBQVVNIX1BST01JU0UgZnJhbWUgfGZyYW1lfCB3aXRoIHRoZSB8c3RyZWFtfAorICogY2FuIGJlIHNlbnQgYXQgdGhpcyB0aW1lLiAgVGhlIHxzdHJlYW18IGNhbiBiZSBOVUxMLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfU1RBUlRfU1RSRUFNX05PVF9BTExPV0VECisgKiAgICAgTmV3IHN0cmVhbSBjYW5ub3QgYmUgY3JlYXRlZCBiZWNhdXNlIEdPQVdBWSBpcyBhbHJlYWR5IHNlbnQgb3IKKyAqICAgICByZWNlaXZlZC4KKyAqIE5HSFRUUDJfRVJSX1BST1RPCisgKiAgICAgVGhlIGNsaWVudCBzaWRlIGF0dGVtcHRzIHRvIHNlbmQgUFVTSF9QUk9NSVNFLCBvciB0aGUgc2VydmVyCisgKiAgICAgc2VuZHMgUFVTSF9QUk9NSVNFIGZvciB0aGUgc3RyZWFtIG5vdCBpbml0aWF0ZWQgYnkgdGhlIGNsaWVudC4KKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQKKyAqICAgICBUaGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIG9yIGRvZXMgbm90IGV4aXN0LgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkcKKyAqICAgICBSU1RfU1RSRUFNIHdhcyBxdWV1ZWQgZm9yIHRoaXMgc3RyZWFtLgorICogTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1IKKyAqICAgICBUaGUgdHJhbnNtaXNzaW9uIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHN0cmVhbSAoZS5nLiwgYSBmcmFtZQorICogICAgIHdpdGggRU5EX1NUUkVBTSBmbGFnIHNldCBoYXMgYWxyZWFkeSBzZW50KQorICogTkdIVFRQMl9FUlJfUFVTSF9ESVNBQkxFRAorICogICAgIFRoZSByZW1vdGUgcGVlciBkaXNhYmxlZCByZWNlcHRpb24gb2YgUFVTSF9QUk9NSVNFLgorICogTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HCisgKiAgIFRoaXMgc2Vzc2lvbiBpcyBjbG9zaW5nLgorICovCitzdGF0aWMgaW50IHNlc3Npb25fcHJlZGljYXRlX3B1c2hfcHJvbWlzZV9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnY7CisKKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfUFJPVE87CisgIH0KKworICBydiA9IHNlc3Npb25fcHJlZGljYXRlX2Zvcl9zdHJlYW1fc2VuZChzZXNzaW9uLCBzdHJlYW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGFzc2VydChzdHJlYW0pOworCisgIGlmIChzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuZW5hYmxlX3B1c2ggPT0gMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9QVVNIX0RJU0FCTEVEOworICB9CisgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkc7CisgIH0KKyAgaWYgKHNlc3Npb24tPmdvYXdheV9mbGFncyAmIE5HSFRUUDJfR09BV0FZX1JFQ1YpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RBUlRfU1RSRUFNX05PVF9BTExPV0VEOworICB9CisgIHJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgV0lORE9XX1VQREFURSB3aXRoIHRoZSBzdHJlYW0gSUQgfHN0cmVhbV9pZHwKKyAqIGNhbiBiZSBzZW50IGF0IHRoaXMgdGltZS4gTm90ZSB0aGF0IEVORF9TVFJFQU0gZmxhZyBvZiB0aGUgcHJldmlvdXMKKyAqIGZyYW1lIGRvZXMgbm90IGFmZmVjdCB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZSBXSU5ET1dfVVBEQVRFIGZyYW1lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICAgIFRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQgb3IgZG9lcyBub3QgZXhpc3QuCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORworICogICAgIFJTVF9TVFJFQU0gd2FzIHF1ZXVlZCBmb3IgdGhpcyBzdHJlYW0uCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9TVEFURQorICogICAgIFRoZSBzdGF0ZSBvZiB0aGUgc3RyZWFtIGlzIG5vdCB2YWxpZC4KKyAqIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORworICogICBUaGlzIHNlc3Npb24gaXMgY2xvc2luZy4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX3ByZWRpY2F0ZV93aW5kb3dfdXBkYXRlX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBpZiAoc2Vzc2lvbl9pc19jbG9zaW5nKHNlc3Npb24pKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzsKKyAgfQorCisgIGlmIChzdHJlYW1faWQgPT0gMCkgeworICAgIC8qIENvbm5lY3Rpb24tbGV2ZWwgd2luZG93IHVwZGF0ZSAqLworICAgIHJldHVybiAwOworICB9CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VEOworICB9CisgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkc7CisgIH0KKyAgaWYgKHN0YXRlX3Jlc2VydmVkX2xvY2FsKHNlc3Npb24sIHN0cmVhbSkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEU7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcmVkaWNhdGVfYWx0c3ZjX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HOworICB9CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRDsKKyAgfQorICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcmVkaWNhdGVfb3JpZ2luX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HOworICB9CisgIHJldHVybiAwOworfQorCisvKiBUYWtlIGludG8gYWNjb3VudCBzZXR0aW5ncyBtYXggZnJhbWUgc2l6ZSBhbmQgYm90aCBjb25uZWN0aW9uLWxldmVsCisgICBmbG93IGNvbnRyb2wgaGVyZSAqLworc3RhdGljIHNzaXplX3QKK25naHR0cDJfc2Vzc2lvbl9lbmZvcmNlX2Zsb3dfY29udHJvbF9saW1pdHMobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IHJlcXVlc3RlZF93aW5kb3dfc2l6ZSkgeworICBERUJVR0YoInNlbmQ6IHJlbW90ZSB3aW5kb3dzaXplIGNvbm5lY3Rpb249JWQsIHJlbW90ZSBtYXhmcmFtc2l6ZT0ldSwgIgorICAgICAgICAgInN0cmVhbShpZCAlZCk9JWRcbiIsCisgICAgICAgICBzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemUsIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfZnJhbWVfc2l6ZSwKKyAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLCBzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSk7CisKKyAgcmV0dXJuIG5naHR0cDJfbWluKG5naHR0cDJfbWluKG5naHR0cDJfbWluKHJlcXVlc3RlZF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cmVtb3RlX3dpbmRvd19zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2ZyYW1lX3NpemUpOworfQorCisvKgorICogUmV0dXJucyB0aGUgbWF4aW11bSBsZW5ndGggb2YgbmV4dCBkYXRhIHJlYWQuIElmIHRoZQorICogY29ubmVjdGlvbi1sZXZlbCBhbmQvb3Igc3RyZWFtLXdpc2UgZmxvdyBjb250cm9sIGFyZSBlbmFibGVkLCB0aGUKKyAqIHJldHVybiB2YWx1ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhvc2UgY3VycmVudCB3aW5kb3cgc2l6ZXMuIFRoZSByZW1vdGUKKyAqIHNldHRpbmdzIGZvciBtYXggZnJhbWUgc2l6ZSBpcyBhbHNvIHRha2VuIGludG8gYWNjb3VudC4KKyAqLworc3RhdGljIHNpemVfdCBuZ2h0dHAyX3Nlc3Npb25fbmV4dF9kYXRhX3JlYWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBzc2l6ZV90IHdpbmRvd19zaXplOworCisgIHdpbmRvd19zaXplID0gbmdodHRwMl9zZXNzaW9uX2VuZm9yY2VfZmxvd19jb250cm9sX2xpbWl0cygKKyAgICAgIHNlc3Npb24sIHN0cmVhbSwgTkdIVFRQMl9EQVRBX1BBWUxPQURMRU4pOworCisgIERFQlVHRigic2VuZDogYXZhaWxhYmxlIHdpbmRvdz0lemRcbiIsIHdpbmRvd19zaXplKTsKKworICByZXR1cm4gd2luZG93X3NpemUgPiAwID8gKHNpemVfdCl3aW5kb3dfc2l6ZSA6IDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBEQVRBIHdpdGggdGhlIHxzdHJlYW18IGNhbiBiZSBzZW50IGF0IHRoaXMKKyAqIHRpbWUuICBUaGUgfHN0cmVhbXwgY2FuIGJlIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VECisgKiAgICAgVGhlIHN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZCBvciBkb2VzIG5vdCBleGlzdC4KKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9TSFVUX1dSCisgKiAgICAgVGhlIHRyYW5zbWlzc2lvbiBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBzdHJlYW0gKGUuZy4sIGEgZnJhbWUKKyAqICAgICB3aXRoIEVORF9TVFJFQU0gZmxhZyBzZXQgaGFzIGFscmVhZHkgc2VudCkKKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HCisgKiAgICAgUlNUX1NUUkVBTSB3YXMgcXVldWVkIGZvciB0aGlzIHN0cmVhbS4KKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX1NUQVRFCisgKiAgICAgVGhlIHN0YXRlIG9mIHRoZSBzdHJlYW0gaXMgbm90IHZhbGlkLgorICogTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HCisgKiAgIFRoaXMgc2Vzc2lvbiBpcyBjbG9zaW5nLgorICovCitzdGF0aWMgaW50IG5naHR0cDJfc2Vzc2lvbl9wcmVkaWNhdGVfZGF0YV9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnY7CisgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfZm9yX3N0cmVhbV9zZW5kKHNlc3Npb24sIHN0cmVhbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIGFzc2VydChzdHJlYW0pOworICBpZiAobmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCkpIHsKKyAgICAvKiBSZXF1ZXN0IGJvZHkgZGF0YSAqLworICAgIC8qIElmIHN0cmVhbS0+c3RhdGUgaXMgTkdIVFRQMl9TVFJFQU1fQ0xPU0lORywgUlNUX1NUUkVBTSB3YXMKKyAgICAgICBxdWV1ZWQgYnV0IG5vdCB5ZXQgc2VudC4gSW4gdGhpcyBjYXNlLCB3ZSB3b24ndCBzZW5kIERBVEEKKyAgICAgICBmcmFtZXMuICovCisgICAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORykgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HOworICAgIH0KKyAgICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX1NUQVRFOworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorICAvKiBSZXNwb25zZSBib2R5IGRhdGEgKi8KKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fT1BFTkVEKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORykgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORzsKKyAgfQorICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNlc3Npb25fY2FsbF9zZWxlY3RfcGFkZGluZyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9wYXlsb2FkbGVuKSB7CisgIHNzaXplX3QgcnY7CisKKyAgaWYgKGZyYW1lLT5oZC5sZW5ndGggPj0gbWF4X3BheWxvYWRsZW4pIHsKKyAgICByZXR1cm4gKHNzaXplX3QpZnJhbWUtPmhkLmxlbmd0aDsKKyAgfQorCisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Muc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2spIHsKKyAgICBzaXplX3QgbWF4X3BhZGRlZGxlbjsKKworICAgIG1heF9wYWRkZWRsZW4gPQorICAgICAgICBuZ2h0dHAyX21pbihmcmFtZS0+aGQubGVuZ3RoICsgTkdIVFRQMl9NQVhfUEFETEVOLCBtYXhfcGF5bG9hZGxlbik7CisKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5zZWxlY3RfcGFkZGluZ19jYWxsYmFjaygKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIG1heF9wYWRkZWRsZW4sIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgICAgaWYgKHJ2IDwgKHNzaXplX3QpZnJhbWUtPmhkLmxlbmd0aCB8fCBydiA+IChzc2l6ZV90KW1heF9wYWRkZWRsZW4pIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIChzc2l6ZV90KWZyYW1lLT5oZC5sZW5ndGg7Cit9CisKKy8qIEFkZCBwYWRkaW5nIHRvIEhFQURFUlMgb3IgUFVTSF9QUk9NSVNFLiBXZSB1c2UKKyAgIGZyYW1lLT5oZWFkZXJzLnBhZGxlbiBpbiB0aGlzIGZ1bmN0aW9uIHRvIHVzZSB0aGUgZmFjdCB0aGF0CisgICBmcmFtZS0+cHVzaF9wcm9taXNlIGhhcyBhbHNvIHBhZGxlbiBpbiB0aGUgc2FtZSBwb3NpdGlvbi4gKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9oZWFkZXJzX2FkZF9wYWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpbnQgcnY7CisgIHNzaXplX3QgcGFkZGVkX3BheWxvYWRsZW47CisgIG5naHR0cDJfYWN0aXZlX291dGJvdW5kX2l0ZW0gKmFvYjsKKyAgbmdodHRwMl9idWZzICpmcmFtZWJ1ZnM7CisgIHNpemVfdCBwYWRsZW47CisgIHNpemVfdCBtYXhfcGF5bG9hZGxlbjsKKworICBhb2IgPSAmc2Vzc2lvbi0+YW9iOworICBmcmFtZWJ1ZnMgPSAmYW9iLT5mcmFtZWJ1ZnM7CisKKyAgbWF4X3BheWxvYWRsZW4gPSBuZ2h0dHAyX21pbihOR0hUVFAyX01BWF9QQVlMT0FETEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5oZC5sZW5ndGggKyBOR0hUVFAyX01BWF9QQURMRU4pOworCisgIHBhZGRlZF9wYXlsb2FkbGVuID0KKyAgICAgIHNlc3Npb25fY2FsbF9zZWxlY3RfcGFkZGluZyhzZXNzaW9uLCBmcmFtZSwgbWF4X3BheWxvYWRsZW4pOworCisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKChpbnQpcGFkZGVkX3BheWxvYWRsZW4pKSB7CisgICAgcmV0dXJuIChpbnQpcGFkZGVkX3BheWxvYWRsZW47CisgIH0KKworICBwYWRsZW4gPSAoc2l6ZV90KXBhZGRlZF9wYXlsb2FkbGVuIC0gZnJhbWUtPmhkLmxlbmd0aDsKKworICBERUJVR0YoInNlbmQ6IHBhZGRpbmcgc2VsZWN0ZWQ6IHBheWxvYWRsZW49JXpkLCBwYWRsZW49JXp1XG4iLAorICAgICAgICAgcGFkZGVkX3BheWxvYWRsZW4sIHBhZGxlbik7CisKKyAgcnYgPSBuZ2h0dHAyX2ZyYW1lX2FkZF9wYWQoZnJhbWVidWZzLCAmZnJhbWUtPmhkLCBwYWRsZW4sIDApOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgZnJhbWUtPmhlYWRlcnMucGFkbGVuID0gcGFkbGVuOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IHNlc3Npb25fZXN0aW1hdGVfaGVhZGVyc19wYXlsb2FkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGRpdGlvbmFsKSB7CisgIHJldHVybiBuZ2h0dHAyX2hkX2RlZmxhdGVfYm91bmQoJnNlc3Npb24tPmhkX2RlZmxhdGVyLCBudmEsIG52bGVuKSArCisgICAgICAgICBhZGRpdGlvbmFsOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fcGFja19leHRlbnNpb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBuZ2h0dHAyX2J1ZnMgKmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgc3NpemVfdCBydjsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKyAgc2l6ZV90IGJ1ZmxlbjsKKyAgc2l6ZV90IGZyYW1lbGVuOworCisgIGFzc2VydChzZXNzaW9uLT5jYWxsYmFja3MucGFja19leHRlbnNpb25fY2FsbGJhY2spOworCisgIGJ1ZiA9ICZidWZzLT5oZWFkLT5idWY7CisgIGJ1ZmxlbiA9IG5naHR0cDJfbWluKG5naHR0cDJfYnVmX2F2YWlsKGJ1ZiksIE5HSFRUUDJfTUFYX1BBWUxPQURMRU4pOworCisgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKHNlc3Npb24sIGJ1Zi0+bGFzdCwgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSwgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0NBTkNFTCkgeworICAgIHJldHVybiAoaW50KXJ2OworICB9CisKKyAgaWYgKHJ2IDwgMCB8fCAoc2l6ZV90KXJ2ID4gYnVmbGVuKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICBmcmFtZWxlbiA9IChzaXplX3QpcnY7CisKKyAgZnJhbWUtPmhkLmxlbmd0aCA9IGZyYW1lbGVuOworCisgIGFzc2VydChidWYtPnBvcyA9PSBidWYtPmxhc3QpOworICBidWYtPmxhc3QgKz0gZnJhbWVsZW47CisgIGJ1Zi0+cG9zIC09IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmZnJhbWUtPmhkKTsKKworICByZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2VyaWFsaXplcyBmcmFtZSBmb3IgdHJhbnNtaXNzaW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGVzLCBpbmNsdWRpbmcgYm90aCBmYXRhbCBhbmQgbm9uLWZhdGFsIG9uZXMuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcmVwX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIHN3aXRjaCAoZnJhbWUtPmhkLnR5cGUpIHsKKyAgY2FzZSBOR0hUVFAyX0RBVEE6IHsKKyAgICBzaXplX3QgbmV4dF9yZWFkbWF4OworICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKworICAgIGlmIChzdHJlYW0pIHsKKyAgICAgIGFzc2VydChzdHJlYW0tPml0ZW0gPT0gaXRlbSk7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fcHJlZGljYXRlX2RhdGFfc2VuZChzZXNzaW9uLCBzdHJlYW0pOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICAvLyBJZiBzdHJlYW0gd2FzIGFscmVhZHkgY2xvc2VkLCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbSgpCisgICAgICAvLyByZXR1cm5zIE5VTEwsIGJ1dCBpdGVtIGlzIHN0aWxsIGF0dGFjaGVkIHRvIHRoZSBzdHJlYW0uCisgICAgICAvLyBTZWFyY2ggc3RyZWFtIGluY2x1ZGluZyBjbG9zZWQgYWdhaW4uCisgICAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yYXcoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgICAgICBpZiAoc3RyZWFtKSB7CisgICAgICAgIGludCBydjI7CisKKyAgICAgICAgcnYyID0gbmdodHRwMl9zdHJlYW1fZGV0YWNoX2l0ZW0oc3RyZWFtKTsKKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydjIpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2MjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gcnY7CisgICAgfQorICAgIC8qIEFzc3VtaW5nIHN0cmVhbSBpcyBub3QgTlVMTCAqLworICAgIGFzc2VydChzdHJlYW0pOworICAgIG5leHRfcmVhZG1heCA9IG5naHR0cDJfc2Vzc2lvbl9uZXh0X2RhdGFfcmVhZChzZXNzaW9uLCBzdHJlYW0pOworCisgICAgaWYgKG5leHRfcmVhZG1heCA9PSAwKSB7CisKKyAgICAgIC8qIFRoaXMgbXVzdCBiZSB0cnVlIHNpbmNlIHdlIG9ubHkgcG9wIERBVEEgZnJhbWUgaXRlbSBmcm9tCisgICAgICAgICBxdWV1ZSB3aGVuIHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZSA+IDAgKi8KKyAgICAgIGFzc2VydChzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemUgPiAwKTsKKworICAgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZWZlcl9pdGVtKHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0ZMT1dfQ09OVFJPTCk7CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHNlc3Npb24tPmFvYi5pdGVtID0gTlVMTDsKKyAgICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KCZzZXNzaW9uLT5hb2IsIG1lbSk7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfREVGRVJSRUQ7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fcGFja19kYXRhKHNlc3Npb24sICZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3JlYWRtYXgsIGZyYW1lLCAmaXRlbS0+YXV4X2RhdGEuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKyAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfUEFVU0UpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0RFRkVSUkVEKSB7CisgICAgICBydiA9IG5naHR0cDJfc3RyZWFtX2RlZmVyX2l0ZW0oc3RyZWFtLCBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX1VTRVIpOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBzZXNzaW9uLT5hb2IuaXRlbSA9IE5VTEw7CisgICAgICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldCgmc2Vzc2lvbi0+YW9iLCBtZW0pOworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0RFRkVSUkVEOworICAgIH0KKyAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRSkgeworICAgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShzdHJlYW0pOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICAgIGlmIChydiAhPSAwKSB7CisgICAgICBpbnQgcnYyOworCisgICAgICBydjIgPSBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShzdHJlYW0pOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydjIpKSB7CisgICAgICAgIHJldHVybiBydjI7CisgICAgICB9CisKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKyAgY2FzZSBOR0hUVFAyX0hFQURFUlM6IHsKKyAgICBuZ2h0dHAyX2hlYWRlcnNfYXV4X2RhdGEgKmF1eF9kYXRhOworICAgIHNpemVfdCBlc3RpbWF0ZWRfcGF5bG9hZGxlbjsKKworICAgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmhlYWRlcnM7CisKKyAgICBpZiAoZnJhbWUtPmhlYWRlcnMuY2F0ID09IE5HSFRUUDJfSENBVF9SRVFVRVNUKSB7CisgICAgICAvKiBpbml0aWFsIEhFQURFUlMsIHdoaWNoIG9wZW5zIHN0cmVhbSAqLworICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICAgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX29wZW5fc3RyZWFtKAorICAgICAgICAgIHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQsIE5HSFRUUDJfU1RSRUFNX0ZMQUdfTk9ORSwKKyAgICAgICAgICAmZnJhbWUtPmhlYWRlcnMucHJpX3NwZWMsIE5HSFRUUDJfU1RSRUFNX0lOSVRJQUwsCisgICAgICAgICAgYXV4X2RhdGEtPnN0cmVhbV91c2VyX2RhdGEpOworCisgICAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgICAgfQorCisgICAgICAvKiBXZSBkb24ndCBjYWxsIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfY2xvc2VkX3N0cmVhbSgpIGhlcmUsCisgICAgICAgICBzaW5jZSB3ZSBkb24ndCBrZWVwIGNsb3NlZCBzdHJlYW0gaW4gY2xpZW50IHNpZGUgKi8KKworICAgICAgcnYgPSBzZXNzaW9uX3ByZWRpY2F0ZV9yZXF1ZXN0X2hlYWRlcnNfc2VuZChzZXNzaW9uLCBpdGVtKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKHNlc3Npb25fZW5mb3JjZV9odHRwX21lc3NhZ2luZyhzZXNzaW9uKSkgeworICAgICAgICBuZ2h0dHAyX2h0dHBfcmVjb3JkX3JlcXVlc3RfbWV0aG9kKHN0cmVhbSwgZnJhbWUpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgICAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKworICAgICAgaWYgKHN0cmVhbSAmJiBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEKSB7CisgICAgICAgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfcHVzaF9yZXNwb25zZV9oZWFkZXJzX3NlbmQoc2Vzc2lvbiwgc3RyZWFtKTsKKyAgICAgICAgaWYgKHJ2ID09IDApIHsKKyAgICAgICAgICBmcmFtZS0+aGVhZGVycy5jYXQgPSBOR0hUVFAyX0hDQVRfUFVTSF9SRVNQT05TRTsKKworICAgICAgICAgIGlmIChhdXhfZGF0YS0+c3RyZWFtX3VzZXJfZGF0YSkgeworICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1fdXNlcl9kYXRhID0gYXV4X2RhdGEtPnN0cmVhbV91c2VyX2RhdGE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHNlc3Npb25fcHJlZGljYXRlX3Jlc3BvbnNlX2hlYWRlcnNfc2VuZChzZXNzaW9uLCBzdHJlYW0pID09CisgICAgICAgICAgICAgICAgIDApIHsKKyAgICAgICAgZnJhbWUtPmhlYWRlcnMuY2F0ID0gTkdIVFRQMl9IQ0FUX1JFU1BPTlNFOworICAgICAgICBydiA9IDA7CisgICAgICB9IGVsc2UgeworICAgICAgICBmcmFtZS0+aGVhZGVycy5jYXQgPSBOR0hUVFAyX0hDQVRfSEVBREVSUzsKKworICAgICAgICBydiA9IHNlc3Npb25fcHJlZGljYXRlX2hlYWRlcnNfc2VuZChzZXNzaW9uLCBzdHJlYW0pOworICAgICAgfQorCisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgfQorCisgICAgZXN0aW1hdGVkX3BheWxvYWRsZW4gPSBzZXNzaW9uX2VzdGltYXRlX2hlYWRlcnNfcGF5bG9hZCgKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPmhlYWRlcnMubnZhLCBmcmFtZS0+aGVhZGVycy5udmxlbiwKKyAgICAgICAgTkdIVFRQMl9QUklPUklUWV9TUEVDTEVOKTsKKworICAgIGlmIChlc3RpbWF0ZWRfcGF5bG9hZGxlbiA+IHNlc3Npb24tPm1heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGgpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOworICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9mcmFtZV9wYWNrX2hlYWRlcnMoJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsICZmcmFtZS0+aGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5oZF9kZWZsYXRlcik7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIERFQlVHRigic2VuZDogYmVmb3JlIHBhZGRpbmcsIEhFQURFUlMgc2VyaWFsaXplZCBpbiAlemQgYnl0ZXNcbiIsCisgICAgICAgICAgIG5naHR0cDJfYnVmc19sZW4oJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMpKTsKKworICAgIHJ2ID0gc2Vzc2lvbl9oZWFkZXJzX2FkZF9wYWQoc2Vzc2lvbiwgZnJhbWUpOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBERUJVR0YoInNlbmQ6IEhFQURFUlMgZmluYWxseSBzZXJpYWxpemVkIGluICV6ZCBieXRlc1xuIiwKKyAgICAgICAgICAgbmdodHRwMl9idWZzX2xlbigmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcykpOworCisgICAgaWYgKGZyYW1lLT5oZWFkZXJzLmNhdCA9PSBOR0hUVFAyX0hDQVRfUkVRVUVTVCkgeworICAgICAgYXNzZXJ0KHNlc3Npb24tPmxhc3Rfc2VudF9zdHJlYW1faWQgPCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgICAgIHNlc3Npb24tPmxhc3Rfc2VudF9zdHJlYW1faWQgPSBmcmFtZS0+aGQuc3RyZWFtX2lkOworICAgIH0KKworICAgIHJldHVybiAwOworICB9CisgIGNhc2UgTkdIVFRQMl9QUklPUklUWTogeworICAgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkc7CisgICAgfQorICAgIC8qIFBSSU9SSVRZIGZyYW1lIGNhbiBiZSBzZW50IGF0IGFueSB0aW1lIGFuZCB0byBhbnkgc3RyZWFtCisgICAgICAgSUQuICovCisgICAgbmdodHRwMl9mcmFtZV9wYWNrX3ByaW9yaXR5KCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCAmZnJhbWUtPnByaW9yaXR5KTsKKworICAgIC8qIFBlZXIgY2FuIHNlbmQgUFJJT1JJVFkgZnJhbWUgYWdhaW5zdCBpZGxlIHN0cmVhbSB0byBjcmVhdGUKKyAgICAgICAiYW5jaG9yIiBpbiBkZXBlbmRlbmN5IHRyZWUuICBPbmx5IGNsaWVudCBjYW4gZG8gdGhpcyBpbgorICAgICAgIG5naHR0cDIuICBJbiBuZ2h0dHAyLCBvbmx5IHNlcnZlciByZXRhaW5zIG5vbi1hY3RpdmUgKGNsb3NlZAorICAgICAgIG9yIGlkbGUpIHN0cmVhbXMgaW4gbWVtb3J5LCBzbyB3ZSBkb24ndCBvcGVuIHN0cmVhbSBoZXJlLiAqLworICAgIHJldHVybiAwOworICB9CisgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkc7CisgICAgfQorICAgIG5naHR0cDJfZnJhbWVfcGFja19yc3Rfc3RyZWFtKCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCAmZnJhbWUtPnJzdF9zdHJlYW0pOworICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1M6IHsKKyAgICBpZiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0FDSykgeworICAgICAgYXNzZXJ0KHNlc3Npb24tPm9icV9mbG9vZF9jb3VudGVyXyA+IDApOworICAgICAgLS1zZXNzaW9uLT5vYnFfZmxvb2RfY291bnRlcl87CisgICAgICAvKiBXaGVuIHNlc3Npb24gaXMgYWJvdXQgdG8gY2xvc2UsIGRvbid0IHNlbmQgU0VUVElOR1MgQUNLLgorICAgICAgICAgV2UgYXJlIHJlcXVpcmVkIHRvIHNlbmQgU0VUVElOR1Mgd2l0aG91dCBBQ0sgdGhvdWdoOyBmb3IKKyAgICAgICAgIGV4YW1wbGUsIHdlIGhhdmUgdG8gc2VuZCBTRVRUSU5HUyBhcyBhIHBhcnQgb2YgY29ubmVjdGlvbgorICAgICAgICAgcHJlZmFjZS4gKi8KKyAgICAgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzsKKyAgICAgIH0KKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfZnJhbWVfcGFja19zZXR0aW5ncygmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcywgJmZyYW1lLT5zZXR0aW5ncyk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKyAgY2FzZSBOR0hUVFAyX1BVU0hfUFJPTUlTRTogeworICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgICAgc2l6ZV90IGVzdGltYXRlZF9wYXlsb2FkbGVuOworCisgICAgLyogc3RyZWFtIGNvdWxkIGJlIE5VTEwgaWYgYXNzb2NpYXRlZCBzdHJlYW0gd2FzIGFscmVhZHkKKyAgICAgICBjbG9zZWQuICovCisgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisKKyAgICAvKiBwcmVkaWNhdGUgc2hvdWxkIGZhaWwgaWYgc3RyZWFtIGlzIE5VTEwuICovCisgICAgcnYgPSBzZXNzaW9uX3ByZWRpY2F0ZV9wdXNoX3Byb21pc2Vfc2VuZChzZXNzaW9uLCBzdHJlYW0pOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgYXNzZXJ0KHN0cmVhbSk7CisKKyAgICBlc3RpbWF0ZWRfcGF5bG9hZGxlbiA9IHNlc3Npb25fZXN0aW1hdGVfaGVhZGVyc19wYXlsb2FkKAorICAgICAgICBzZXNzaW9uLCBmcmFtZS0+cHVzaF9wcm9taXNlLm52YSwgZnJhbWUtPnB1c2hfcHJvbWlzZS5udmxlbiwgMCk7CisKKyAgICBpZiAoZXN0aW1hdGVkX3BheWxvYWRsZW4gPiBzZXNzaW9uLT5tYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfZnJhbWVfcGFja19wdXNoX3Byb21pc2UoCisgICAgICAgICZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCAmZnJhbWUtPnB1c2hfcHJvbWlzZSwgJnNlc3Npb24tPmhkX2RlZmxhdGVyKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICBydiA9IHNlc3Npb25faGVhZGVyc19hZGRfcGFkKHNlc3Npb24sIGZyYW1lKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIGFzc2VydChzZXNzaW9uLT5sYXN0X3NlbnRfc3RyZWFtX2lkICsgMiA8PQorICAgICAgICAgICBmcmFtZS0+cHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZCk7CisgICAgc2Vzc2lvbi0+bGFzdF9zZW50X3N0cmVhbV9pZCA9IGZyYW1lLT5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkOworCisgICAgcmV0dXJuIDA7CisgIH0KKyAgY2FzZSBOR0hUVFAyX1BJTkc6CisgICAgaWYgKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19BQ0spIHsKKyAgICAgIGFzc2VydChzZXNzaW9uLT5vYnFfZmxvb2RfY291bnRlcl8gPiAwKTsKKyAgICAgIC0tc2Vzc2lvbi0+b2JxX2Zsb29kX2NvdW50ZXJfOworICAgIH0KKyAgICAvKiBQSU5HIGZyYW1lIGlzIGFsbG93ZWQgdG8gYmUgc2VudCB1bmxlc3MgdGVybWluYXRpb24gR09BV0FZIGlzCisgICAgICAgc2VudCAqLworICAgIGlmIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJiBOR0hUVFAyX0dPQVdBWV9URVJNX09OX1NFTkQpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkc7CisgICAgfQorICAgIG5naHR0cDJfZnJhbWVfcGFja19waW5nKCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCAmZnJhbWUtPnBpbmcpOworICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfR09BV0FZOgorICAgIHJ2ID0gbmdodHRwMl9mcmFtZV9wYWNrX2dvYXdheSgmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcywgJmZyYW1lLT5nb2F3YXkpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICAgIHNlc3Npb24tPmxvY2FsX2xhc3Rfc3RyZWFtX2lkID0gZnJhbWUtPmdvYXdheS5sYXN0X3N0cmVhbV9pZDsKKworICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfV0lORE9XX1VQREFURToKKyAgICBydiA9IHNlc3Npb25fcHJlZGljYXRlX3dpbmRvd191cGRhdGVfc2VuZChzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICBuZ2h0dHAyX2ZyYW1lX3BhY2tfd2luZG93X3VwZGF0ZSgmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWUtPndpbmRvd191cGRhdGUpOworICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfQ09OVElOVUFUSU9OOgorICAgIC8qIFdlIG5ldmVyIGhhbmRsZSBDT05USU5VQVRJT04gaGVyZS4gKi8KKyAgICBhc3NlcnQoMCk7CisgICAgcmV0dXJuIDA7CisgIGRlZmF1bHQ6IHsKKyAgICBuZ2h0dHAyX2V4dF9hdXhfZGF0YSAqYXV4X2RhdGE7CisKKyAgICAvKiBleHRlbnNpb24gZnJhbWUgKi8KKworICAgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmV4dDsKKworICAgIGlmIChhdXhfZGF0YS0+YnVpbHRpbiA9PSAwKSB7CisgICAgICBpZiAoc2Vzc2lvbl9pc19jbG9zaW5nKHNlc3Npb24pKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkc7CisgICAgICB9CisKKyAgICAgIHJldHVybiBzZXNzaW9uX3BhY2tfZXh0ZW5zaW9uKHNlc3Npb24sICZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCBmcmFtZSk7CisgICAgfQorCisgICAgc3dpdGNoIChmcmFtZS0+aGQudHlwZSkgeworICAgIGNhc2UgTkdIVFRQMl9BTFRTVkM6CisgICAgICBydiA9IHNlc3Npb25fcHJlZGljYXRlX2FsdHN2Y19zZW5kKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBuZ2h0dHAyX2ZyYW1lX3BhY2tfYWx0c3ZjKCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCAmZnJhbWUtPmV4dCk7CisKKyAgICAgIHJldHVybiAwOworICAgIGNhc2UgTkdIVFRQMl9PUklHSU46CisgICAgICBydiA9IHNlc3Npb25fcHJlZGljYXRlX29yaWdpbl9zZW5kKHNlc3Npb24pOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBydiA9IG5naHR0cDJfZnJhbWVfcGFja19vcmlnaW4oJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsICZmcmFtZS0+ZXh0KTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIDA7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIFVucmVhY2hhYmxlIGhlcmUgKi8KKyAgICAgIGFzc2VydCgwKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICB9Cit9CisKK25naHR0cDJfb3V0Ym91bmRfaXRlbSAqCituZ2h0dHAyX3Nlc3Npb25fZ2V0X25leHRfb2JfaXRlbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgaWYgKG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl91cmdlbnQpKSB7CisgICAgcmV0dXJuIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl91cmdlbnQpOworICB9CisKKyAgaWYgKG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9yZWcpKSB7CisgICAgcmV0dXJuIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9yZWcpOworICB9CisKKyAgaWYgKCFzZXNzaW9uX2lzX291dGdvaW5nX2NvbmN1cnJlbnRfc3RyZWFtc19tYXgoc2Vzc2lvbikpIHsKKyAgICBpZiAobmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3N5bikpIHsKKyAgICAgIHJldHVybiBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2Jfc3luKTsKKyAgICB9CisgIH0KKworICBpZiAoc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplID4gMCkgeworICAgIHJldHVybiBuZ2h0dHAyX3N0cmVhbV9uZXh0X291dGJvdW5kX2l0ZW0oJnNlc3Npb24tPnJvb3QpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK25naHR0cDJfb3V0Ym91bmRfaXRlbSAqCituZ2h0dHAyX3Nlc3Npb25fcG9wX25leHRfb2JfaXRlbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworCisgIGl0ZW0gPSBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2JfdXJnZW50KTsKKyAgaWYgKGl0ZW0pIHsKKyAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3BvcCgmc2Vzc2lvbi0+b2JfdXJnZW50KTsKKyAgICBpdGVtLT5xdWV1ZWQgPSAwOworICAgIHJldHVybiBpdGVtOworICB9CisKKyAgaXRlbSA9IG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9yZWcpOworICBpZiAoaXRlbSkgeworICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcG9wKCZzZXNzaW9uLT5vYl9yZWcpOworICAgIGl0ZW0tPnF1ZXVlZCA9IDA7CisgICAgcmV0dXJuIGl0ZW07CisgIH0KKworICBpZiAoIXNlc3Npb25faXNfb3V0Z29pbmdfY29uY3VycmVudF9zdHJlYW1zX21heChzZXNzaW9uKSkgeworICAgIGl0ZW0gPSBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2Jfc3luKTsKKyAgICBpZiAoaXRlbSkgeworICAgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wb3AoJnNlc3Npb24tPm9iX3N5bik7CisgICAgICBpdGVtLT5xdWV1ZWQgPSAwOworICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQorICB9CisKKyAgaWYgKHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZSA+IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9zdHJlYW1fbmV4dF9vdXRib3VuZF9pdGVtKCZzZXNzaW9uLT5yb290KTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fY2FsbF9iZWZvcmVfZnJhbWVfc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpbnQgcnY7CisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3MuYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2spIHsKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjayhzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT51c2VyX2RhdGEpOworICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9DQU5DRUwpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fY2FsbF9vbl9mcmFtZV9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2OworICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ZyYW1lX3NlbmRfY2FsbGJhY2spIHsKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5vbl9mcmFtZV9zZW5kX2NhbGxiYWNrKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmRfc3RyZWFtX29uX2dvYXdheV9mdW5jKG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSwgdm9pZCAqcHRyKSB7CisgIG5naHR0cDJfY2xvc2Vfc3RyZWFtX29uX2dvYXdheV9hcmcgKmFyZzsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBhcmcgPSAobmdodHRwMl9jbG9zZV9zdHJlYW1fb25fZ29hd2F5X2FyZyAqKXB0cjsKKyAgc3RyZWFtID0gKG5naHR0cDJfc3RyZWFtICopZW50cnk7CisKKyAgaWYgKG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoYXJnLT5zZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCkpIHsKKyAgICBpZiAoYXJnLT5pbmNvbWluZykgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9IGVsc2UgaWYgKCFhcmctPmluY29taW5nKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoc3RyZWFtLT5zdGF0ZSAhPSBOR0hUVFAyX1NUUkVBTV9JRExFICYmCisgICAgICAoc3RyZWFtLT5mbGFncyAmIE5HSFRUUDJfU1RSRUFNX0ZMQUdfQ0xPU0VEKSA9PSAwICYmCisgICAgICBzdHJlYW0tPnN0cmVhbV9pZCA+IGFyZy0+bGFzdF9zdHJlYW1faWQpIHsKKyAgICAvKiBXZSBhcmUgY29sbGVjdGluZyBzdHJlYW1zIHRvIGNsb3NlIGJlY2F1c2Ugd2UgY2Fubm90IGNhbGwKKyAgICAgICBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtKCkgaW5zaWRlIG5naHR0cDJfbWFwX2VhY2goKS4KKyAgICAgICBSZXVzZSBjbG9zZWRfbmV4dCBtZW1iZXIuLiBiYWQgY2hvaWNlPyAqLworICAgIGFzc2VydChzdHJlYW0tPmNsb3NlZF9uZXh0ID09IE5VTEwpOworICAgIGFzc2VydChzdHJlYW0tPmNsb3NlZF9wcmV2ID09IE5VTEwpOworCisgICAgaWYgKGFyZy0+aGVhZCkgeworICAgICAgc3RyZWFtLT5jbG9zZWRfbmV4dCA9IGFyZy0+aGVhZDsKKyAgICAgIGFyZy0+aGVhZCA9IHN0cmVhbTsKKyAgICB9IGVsc2UgeworICAgICAgYXJnLT5oZWFkID0gc3RyZWFtOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCisvKiBDbG9zZXMgbm9uLWlkbGUgYW5kIG5vbi1jbG9zZWQgc3RyZWFtcyB3aG9zZSBzdHJlYW0gSUQgPgorICAgbGFzdF9zdHJlYW1faWQuICBJZiBpbmNvbWluZyBpcyBub256ZXJvLCB3ZSBhcmUgZ29pbmcgdG8gY2xvc2UKKyAgIGluY29taW5nIHN0cmVhbXMuICBPdGhlcndpc2UsIGNsb3NlIG91dGdvaW5nIHN0cmVhbXMuICovCitzdGF0aWMgaW50IHNlc3Npb25fY2xvc2Vfc3RyZWFtX29uX2dvYXdheShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluY29taW5nKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgKm5leHRfc3RyZWFtOworICBuZ2h0dHAyX2Nsb3NlX3N0cmVhbV9vbl9nb2F3YXlfYXJnIGFyZyA9IHtzZXNzaW9uLCBOVUxMLCBsYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmd9OworCisgIHJ2ID0gbmdodHRwMl9tYXBfZWFjaCgmc2Vzc2lvbi0+c3RyZWFtcywgZmluZF9zdHJlYW1fb25fZ29hd2F5X2Z1bmMsICZhcmcpOworICBhc3NlcnQocnYgPT0gMCk7CisKKyAgc3RyZWFtID0gYXJnLmhlYWQ7CisgIHdoaWxlIChzdHJlYW0pIHsKKyAgICBuZXh0X3N0cmVhbSA9IHN0cmVhbS0+Y2xvc2VkX25leHQ7CisgICAgc3RyZWFtLT5jbG9zZWRfbmV4dCA9IE5VTEw7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtKHNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX1JFRlVTRURfU1RSRUFNKTsKKworICAgIC8qIHN0cmVhbSBtYXkgYmUgZGVsZXRlZCBoZXJlICovCisKKyAgICBzdHJlYW0gPSBuZXh0X3N0cmVhbTsKKworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgLyogQ2xlYW4gdXAgY2xvc2VkX25leHQgbWVtYmVyIGp1c3QgaW4gY2FzZSAqLworICAgICAgd2hpbGUgKHN0cmVhbSkgeworICAgICAgICBuZXh0X3N0cmVhbSA9IHN0cmVhbS0+Y2xvc2VkX25leHQ7CisgICAgICAgIHN0cmVhbS0+Y2xvc2VkX25leHQgPSBOVUxMOworICAgICAgICBzdHJlYW0gPSBuZXh0X3N0cmVhbTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVzY2hlZHVsZV9zdHJlYW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBzdHJlYW0tPmxhc3Rfd3JpdGVsZW4gPSBzdHJlYW0tPml0ZW0tPmZyYW1lLmhkLmxlbmd0aDsKKworICBuZ2h0dHAyX3N0cmVhbV9yZXNjaGVkdWxlKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl91cGRhdGVfc3RyZWFtX2NvbnN1bWVkX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVsdGFfc2l6ZSk7CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl91cGRhdGVfY29ubmVjdGlvbl9jb25zdW1lZF9zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkZWx0YV9zaXplKTsKKworc3RhdGljIGludCBzZXNzaW9uX3VwZGF0ZV9yZWN2X2Nvbm5lY3Rpb25fd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhX3NpemUpOworCitzdGF0aWMgaW50IHNlc3Npb25fdXBkYXRlX3JlY3Zfc3RyZWFtX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZW5kX3dpbmRvd191cGRhdGUpOworCisvKgorICogQ2FsbGVkIGFmdGVyIGEgZnJhbWUgaXMgc2VudC4gIFRoaXMgZnVuY3Rpb24gcnVucworICogb25fZnJhbWVfc2VuZF9jYWxsYmFjayBhbmQgaGFuZGxlcyBzdHJlYW0gY2xvc3VyZSB1cG9uIEVORF9TVFJFQU0KKyAqIG9yIFJTVF9TVFJFQU0uICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHNlc3Npb24tPmFvYi4gIEl0IGlzIGEKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDIuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQxKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfYWN0aXZlX291dGJvdW5kX2l0ZW0gKmFvYiA9ICZzZXNzaW9uLT5hb2I7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSA9IGFvYi0+aXRlbTsKKyAgbmdodHRwMl9idWZzICpmcmFtZWJ1ZnMgPSAmYW9iLT5mcmFtZWJ1ZnM7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIGlmIChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX0RBVEEpIHsKKyAgICBuZ2h0dHAyX2RhdGFfYXV4X2RhdGEgKmF1eF9kYXRhOworCisgICAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuZGF0YTsKKworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICAgIC8qIFdlIHVwZGF0ZSBmbG93IGNvbnRyb2wgd2luZG93IGFmdGVyIGEgZnJhbWUgd2FzIGNvbXBsZXRlbHkKKyAgICAgICBzZW50LiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2Ugd2UgY2hvb3NlIHBheWxvYWQgbGVuZ3RoIG5vdCB0bworICAgICAgIGV4Y2VlZCB0aGUgd2luZG93ICovCisgICAgc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplIC09IChpbnQzMl90KWZyYW1lLT5oZC5sZW5ndGg7CisgICAgaWYgKHN0cmVhbSkgeworICAgICAgc3RyZWFtLT5yZW1vdGVfd2luZG93X3NpemUgLT0gKGludDMyX3QpZnJhbWUtPmhkLmxlbmd0aDsKKyAgICB9CisKKyAgICBpZiAoc3RyZWFtICYmIGF1eF9kYXRhLT5lb2YpIHsKKyAgICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGV0YWNoX2l0ZW0oc3RyZWFtKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIC8qIENhbGwgb25fZnJhbWVfc2VuZF9jYWxsYmFjayBhZnRlcgorICAgICAgICAgbmdodHRwMl9zdHJlYW1fZGV0YWNoX2l0ZW0oKSwgc28gdGhhdCBhcHBsaWNhdGlvbiBjYW4gaXNzdWUKKyAgICAgICAgIG5naHR0cDJfc3VibWl0X2RhdGEoKSBpbiB0aGUgY2FsbGJhY2suICovCisgICAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ZyYW1lX3NlbmRfY2FsbGJhY2spIHsKKyAgICAgICAgcnYgPSBzZXNzaW9uX2NhbGxfb25fZnJhbWVfc2VuZChzZXNzaW9uLCBmcmFtZSk7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pIHsKKyAgICAgICAgaW50IHN0cmVhbV9jbG9zZWQ7CisKKyAgICAgICAgc3RyZWFtX2Nsb3NlZCA9CisgICAgICAgICAgICAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEV1IpID09IE5HSFRUUDJfU0hVVF9SRFdSOworCisgICAgICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1dSKTsKKworICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW1faWZfc2h1dF9yZHdyKHNlc3Npb24sIHN0cmVhbSk7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgICAvKiBzdHJlYW0gbWF5IGJlIE5VTEwgaWYgaXQgd2FzIGNsb3NlZCAqLworICAgICAgICBpZiAoc3RyZWFtX2Nsb3NlZCkgeworICAgICAgICAgIHN0cmVhbSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfc2VuZF9jYWxsYmFjaykgeworICAgICAgcnYgPSBzZXNzaW9uX2NhbGxfb25fZnJhbWVfc2VuZChzZXNzaW9uLCBmcmFtZSk7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworICB9CisKKyAgLyogbm9uLURBVEEgZnJhbWUgKi8KKworICBpZiAoZnJhbWUtPmhkLnR5cGUgPT0gTkdIVFRQMl9IRUFERVJTIHx8CisgICAgICBmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX1BVU0hfUFJPTUlTRSkgeworICAgIGlmIChuZ2h0dHAyX2J1ZnNfbmV4dF9wcmVzZW50KGZyYW1lYnVmcykpIHsKKyAgICAgIERFQlVHRigic2VuZDogQ09OVElOVUFUSU9OIGV4aXN0cywganVzdCByZXR1cm5cbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3NlbmQoc2Vzc2lvbiwgZnJhbWUpOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgc3dpdGNoIChmcmFtZS0+aGQudHlwZSkgeworICBjYXNlIE5HSFRUUDJfSEVBREVSUzogeworICAgIG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YSAqYXV4X2RhdGE7CisKKyAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3dpdGNoIChmcmFtZS0+aGVhZGVycy5jYXQpIHsKKyAgICBjYXNlIE5HSFRUUDJfSENBVF9SRVFVRVNUOiB7CisgICAgICBzdHJlYW0tPnN0YXRlID0gTkdIVFRQMl9TVFJFQU1fT1BFTklORzsKKyAgICAgIGlmIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgeworICAgICAgICBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihzdHJlYW0sIE5HSFRUUDJfU0hVVF9XUik7CisgICAgICB9CisgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW1faWZfc2h1dF9yZHdyKHNlc3Npb24sIHN0cmVhbSk7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgICAgLyogV2UgYXNzdW1lIGF1eF9kYXRhIGlzIGEgcG9pbnRlciB0byBuZ2h0dHAyX2hlYWRlcnNfYXV4X2RhdGEgKi8KKyAgICAgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmhlYWRlcnM7CisgICAgICBpZiAoYXV4X2RhdGEtPmRhdGFfcHJkLnJlYWRfY2FsbGJhY2spIHsKKyAgICAgICAgLyogbmdodHRwMl9zdWJtaXRfZGF0YSgpIG1ha2VzIGEgY29weSBvZiBhdXhfZGF0YS0+ZGF0YV9wcmQgKi8KKyAgICAgICAgcnYgPSBuZ2h0dHAyX3N1Ym1pdF9kYXRhKHNlc3Npb24sIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmhkLnN0cmVhbV9pZCwgJmF1eF9kYXRhLT5kYXRhX3ByZCk7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgICAvKiBUT0RPIG5naHR0cDJfc3VibWl0X2RhdGEoKSBtYXkgZmFpbCBpZiBzdHJlYW0gaGFzIGFscmVhZHkKKyAgICAgICAgICAgREFUQSBmcmFtZSBpdGVtLiAgV2UgbWlnaHQgaGF2ZSB0byBoYW5kbGUgaXQgaGVyZS4gKi8KKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBjYXNlIE5HSFRUUDJfSENBVF9QVVNIX1JFU1BPTlNFOgorICAgICAgc3RyZWFtLT5mbGFncyA9ICh1aW50OF90KShzdHJlYW0tPmZsYWdzICYgfk5HSFRUUDJfU1RSRUFNX0ZMQUdfUFVTSCk7CisgICAgICArK3Nlc3Npb24tPm51bV9vdXRnb2luZ19zdHJlYW1zOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgTkdIVFRQMl9IQ0FUX1JFU1BPTlNFOgorICAgICAgc3RyZWFtLT5zdGF0ZSA9IE5HSFRUUDJfU1RSRUFNX09QRU5FRDsKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE5HSFRUUDJfSENBVF9IRUFERVJTOgorICAgICAgaWYgKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNKSB7CisgICAgICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1dSKTsKKyAgICAgIH0KKyAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbV9pZl9zaHV0X3Jkd3Ioc2Vzc2lvbiwgc3RyZWFtKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgICAvKiBXZSBhc3N1bWUgYXV4X2RhdGEgaXMgYSBwb2ludGVyIHRvIG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YSAqLworICAgICAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuaGVhZGVyczsKKyAgICAgIGlmIChhdXhfZGF0YS0+ZGF0YV9wcmQucmVhZF9jYWxsYmFjaykgeworICAgICAgICBydiA9IG5naHR0cDJfc3VibWl0X2RhdGEoc2Vzc2lvbiwgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+aGQuc3RyZWFtX2lkLCAmYXV4X2RhdGEtPmRhdGFfcHJkKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisgICAgICAgIC8qIFRPRE8gbmdodHRwMl9zdWJtaXRfZGF0YSgpIG1heSBmYWlsIGlmIHN0cmVhbSBoYXMgYWxyZWFkeQorICAgICAgICAgICBEQVRBIGZyYW1lIGl0ZW0uICBXZSBtaWdodCBoYXZlIHRvIGhhbmRsZSBpdCBoZXJlLiAqLworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIFVucmVhY2hhYmxlICovCisgICAgICBhc3NlcnQoMCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgY2FzZSBOR0hUVFAyX1BSSU9SSVRZOgorICAgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICAgIHJldHVybiAwOworICAgICAgOworICAgIH0KKworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKworICAgIGlmICghc3RyZWFtKSB7CisgICAgICBpZiAoIXNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oCisgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgTkdIVFRQMl9GTEFHX05PTkUsCisgICAgICAgICAgJmZyYW1lLT5wcmlvcml0eS5wcmlfc3BlYywgTkdIVFRQMl9TVFJFQU1fSURMRSwgTlVMTCk7CisgICAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3JlcHJpb3JpdGl6ZV9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWUtPnByaW9yaXR5LnByaV9zcGVjKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2lkbGVfc3RyZWFtKHNlc3Npb24pOworCisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+cnN0X3N0cmVhbS5lcnJvcl9jb2RlKTsKKyAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9HT0FXQVk6IHsKKyAgICBuZ2h0dHAyX2dvYXdheV9hdXhfZGF0YSAqYXV4X2RhdGE7CisKKyAgICBhdXhfZGF0YSA9ICZpdGVtLT5hdXhfZGF0YS5nb2F3YXk7CisKKyAgICBpZiAoKGF1eF9kYXRhLT5mbGFncyAmIE5HSFRUUDJfR09BV0FZX0FVWF9TSFVURE9XTl9OT1RJQ0UpID09IDApIHsKKworICAgICAgaWYgKGF1eF9kYXRhLT5mbGFncyAmIE5HSFRUUDJfR09BV0FZX0FVWF9URVJNX09OX1NFTkQpIHsKKyAgICAgICAgc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzIHw9IE5HSFRUUDJfR09BV0FZX1RFUk1fU0VOVDsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzIHw9IE5HSFRUUDJfR09BV0FZX1NFTlQ7CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9jbG9zZV9zdHJlYW1fb25fZ29hd2F5KHNlc3Npb24sIGZyYW1lLT5nb2F3YXkubGFzdF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKKworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorICBjYXNlIE5HSFRUUDJfV0lORE9XX1VQREFURToKKyAgICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgICBzZXNzaW9uLT53aW5kb3dfdXBkYXRlX3F1ZXVlZCA9IDA7CisgICAgICBpZiAoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkgeworICAgICAgICBydiA9IHNlc3Npb25fdXBkYXRlX2Nvbm5lY3Rpb25fY29uc3VtZWRfc2l6ZShzZXNzaW9uLCAwKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfcmVjdl9jb25uZWN0aW9uX3dpbmRvd19zaXplKHNlc3Npb24sIDApOworICAgICAgfQorCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3RyZWFtLT53aW5kb3dfdXBkYXRlX3F1ZXVlZCA9IDA7CisKKyAgICAvKiBXZSBkb24ndCBoYXZlIHRvIHNlbmQgV0lORE9XX1VQREFURSBpZiBFTkRfU1RSRUFNIGZyb20gcGVlcgorICAgICAgIGlzIHNlZW4uICovCisgICAgaWYgKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9SRCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHNlc3Npb24tPm9wdF9mbGFncyAmIE5HSFRUUDJfT1BUTUFTS19OT19BVVRPX1dJTkRPV19VUERBVEUpIHsKKyAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfc3RyZWFtX2NvbnN1bWVkX3NpemUoc2Vzc2lvbiwgc3RyZWFtLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9yZWN2X3N0cmVhbV93aW5kb3dfc2l6ZShzZXNzaW9uLCBzdHJlYW0sIDAsIDEpOworICAgIH0KKworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIHJldHVybiAwOworICBkZWZhdWx0OgorICAgIHJldHVybiAwOworICB9Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgYSBmcmFtZSBpcyBzZW50IGFuZCBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQxLiAgVGhpcworICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgdG8gcmVzZXQgc2Vzc2lvbi0+YW9iLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9hZnRlcl9mcmFtZV9zZW50MihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2FjdGl2ZV9vdXRib3VuZF9pdGVtICphb2IgPSAmc2Vzc2lvbi0+YW9iOworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0gPSBhb2ItPml0ZW07CisgIG5naHR0cDJfYnVmcyAqZnJhbWVidWZzID0gJmFvYi0+ZnJhbWVidWZzOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgbmdodHRwMl9kYXRhX2F1eF9kYXRhICphdXhfZGF0YTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBpZiAoZnJhbWUtPmhkLnR5cGUgIT0gTkdIVFRQMl9EQVRBKSB7CisKKyAgICBpZiAoZnJhbWUtPmhkLnR5cGUgPT0gTkdIVFRQMl9IRUFERVJTIHx8CisgICAgICAgIGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfUFVTSF9QUk9NSVNFKSB7CisKKyAgICAgIGlmIChuZ2h0dHAyX2J1ZnNfbmV4dF9wcmVzZW50KGZyYW1lYnVmcykpIHsKKyAgICAgICAgZnJhbWVidWZzLT5jdXIgPSBmcmFtZWJ1ZnMtPmN1ci0+bmV4dDsKKworICAgICAgICBERUJVR0YoInNlbmQ6IG5leHQgQ09OVElOVUFUSU9OIGZyYW1lLCAlenUgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICBuZ2h0dHAyX2J1Zl9sZW4oJmZyYW1lYnVmcy0+Y3VyLT5idWYpKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldCgmc2Vzc2lvbi0+YW9iLCBtZW0pOworCisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBEQVRBIGZyYW1lICovCisKKyAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuZGF0YTsKKworICAvKiBPbiBFT0YsIHdlIGhhdmUgYWxyZWFkeSBkZXRhY2hlZCBkYXRhLiAgUGxlYXNlIG5vdGUgdGhhdAorICAgICBhcHBsaWNhdGlvbiBtYXkgaXNzdWUgbmdodHRwMl9zdWJtaXRfZGF0YSgpIGluCisgICAgIG9uX2ZyYW1lX3NlbmRfY2FsbGJhY2sgKGNhbGwgZnJvbSBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQxKSwKKyAgICAgd2hpY2ggYXR0YWNoIGRhdGEgdG8gc3RyZWFtLiAgV2UgZG9uJ3Qgd2FudCB0byBkZXRhY2ggaXQuICovCisgIGlmIChhdXhfZGF0YS0+ZW9mKSB7CisgICAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoYW9iLCBtZW0pOworCisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBSZXNldCBub19jb3B5IGhlcmUgYmVjYXVzZSBuZXh0IHdyaXRlIG1heSBub3QgdXNlIHRoaXMuICovCisgIGF1eF9kYXRhLT5ub19jb3B5ID0gMDsKKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKworICAvKiBJZiBzZXNzaW9uIGlzIGNsb3NlZCBvciBSU1RfU1RSRUFNIHdhcyBxdWV1ZWQsIHdlIHdvbid0IHNlbmQKKyAgICAgZnVydGhlciBkYXRhLiAqLworICBpZiAobmdodHRwMl9zZXNzaW9uX3ByZWRpY2F0ZV9kYXRhX3NlbmQoc2Vzc2lvbiwgc3RyZWFtKSAhPSAwKSB7CisgICAgaWYgKHN0cmVhbSkgeworICAgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShzdHJlYW0pOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgIH0KKworICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KGFvYiwgbWVtKTsKKworICAgIHJldHVybiAwOworICB9CisKKyAgYW9iLT5pdGVtID0gTlVMTDsKKyAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoJnNlc3Npb24tPmFvYiwgbWVtKTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfc2VuZF9kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9idWZzICpmcmFtZWJ1ZnMpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2J1ZiAqYnVmOworICBzaXplX3QgbGVuZ3RoOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9kYXRhX2F1eF9kYXRhICphdXhfZGF0YTsKKworICBidWYgPSAmZnJhbWVidWZzLT5jdXItPmJ1ZjsKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisgIGxlbmd0aCA9IGZyYW1lLT5oZC5sZW5ndGggLSBmcmFtZS0+ZGF0YS5wYWRsZW47CisgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmRhdGE7CisKKyAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Muc2VuZF9kYXRhX2NhbGxiYWNrKHNlc3Npb24sIGZyYW1lLCBidWYtPnBvcywgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF1eF9kYXRhLT5kYXRhX3ByZC5zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT51c2VyX2RhdGEpOworCisgIHN3aXRjaCAocnYpIHsKKyAgY2FzZSAwOgorICBjYXNlIE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0s6CisgIGNhc2UgTkdIVFRQMl9FUlJfUEFVU0U6CisgIGNhc2UgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRToKKyAgICByZXR1cm4gcnY7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KK30KKworc3RhdGljIHNzaXplX3QgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kX2ludGVybmFsKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICoqZGF0YV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZhc3RfY2IpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2FjdGl2ZV9vdXRib3VuZF9pdGVtICphb2I7CisgIG5naHR0cDJfYnVmcyAqZnJhbWVidWZzOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisgIGFvYiA9ICZzZXNzaW9uLT5hb2I7CisgIGZyYW1lYnVmcyA9ICZhb2ItPmZyYW1lYnVmczsKKworICAvKiBXZSBtYXkgaGF2ZSBpZGxlIHN0cmVhbXMgbW9yZSB0aGFuIHdlIGV4cGVjdCAoZS5nLiwKKyAgICAgbmdodHRwMl9zZXNzaW9uX2NoYW5nZV9zdHJlYW1fcHJpb3JpdHkoKSBvcgorICAgICBuZ2h0dHAyX3Nlc3Npb25fY3JlYXRlX2lkbGVfc3RyZWFtKCkpLiAgQWRqdXN0IHRoZW0gaGVyZS4gKi8KKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2lkbGVfc3RyZWFtKHNlc3Npb24pOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBmb3IgKDs7KSB7CisgICAgc3dpdGNoIChhb2ItPnN0YXRlKSB7CisgICAgY2FzZSBOR0hUVFAyX09CX1BPUF9JVEVNOiB7CisgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisKKyAgICAgIGl0ZW0gPSBuZ2h0dHAyX3Nlc3Npb25fcG9wX25leHRfb2JfaXRlbShzZXNzaW9uKTsKKyAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcmVwX2ZyYW1lKHNlc3Npb24sIGl0ZW0pOworICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX1BBVVNFKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0RFRkVSUkVEKSB7CisgICAgICAgIERFQlVHRigic2VuZDogZnJhbWUgdHJhbnNtaXNzaW9uIGRlZmVycmVkXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIGludDMyX3Qgb3BlbmVkX3N0cmVhbV9pZCA9IDA7CisgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUgPSBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SOworCisgICAgICAgIERFQlVHRigic2VuZDogZnJhbWUgcHJlcGFyYXRpb24gZmFpbGVkIHdpdGggJXNcbiIsCisgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKHJ2KSk7CisgICAgICAgIC8qIFRPRE8gSWYgdGhlIGVycm9yIGNvbWVzIGZyb20gY29tcHJlc3NvciwgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgbXVzdCBiZSBjbG9zZWQuICovCisgICAgICAgIGlmIChpdGVtLT5mcmFtZS5oZC50eXBlICE9IE5HSFRUUDJfREFUQSAmJgorICAgICAgICAgICAgc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrICYmIGlzX25vbl9mYXRhbChydikpIHsKKyAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKyAgICAgICAgICAvKiBUaGUgbGlicmFyeSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHRyYW5zbWlzc2lvbiBvZgorICAgICAgICAgICAgIFdJTkRPV19VUERBVEUgZnJhbWUsIHNvIHdlIGRvbid0IGNhbGwgZXJyb3IgY2FsbGJhY2sgZm9yCisgICAgICAgICAgICAgaXQuICovCisgICAgICAgICAgaWYgKGZyYW1lLT5oZC50eXBlICE9IE5HSFRUUDJfV0lORE9XX1VQREFURSAmJgorICAgICAgICAgICAgICBzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2soCisgICAgICAgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgcnYsIHNlc3Npb24tPnVzZXJfZGF0YSkgIT0gMCkgeworCisgICAgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1fZnJlZShpdGVtLCBtZW0pOworICAgICAgICAgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworCisgICAgICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogV2UgaGF2ZSB0byBjbG9zZSBzdHJlYW0gb3BlbmVkIGJ5IGZhaWxlZCByZXF1ZXN0IEhFQURFUlMKKyAgICAgICAgICAgb3IgUFVTSF9QUk9NSVNFLiAqLworICAgICAgICBzd2l0Y2ggKGl0ZW0tPmZyYW1lLmhkLnR5cGUpIHsKKyAgICAgICAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisgICAgICAgICAgaWYgKGl0ZW0tPmZyYW1lLmhlYWRlcnMuY2F0ID09IE5HSFRUUDJfSENBVF9SRVFVRVNUKSB7CisgICAgICAgICAgICBvcGVuZWRfc3RyZWFtX2lkID0gaXRlbS0+ZnJhbWUuaGQuc3RyZWFtX2lkOworICAgICAgICAgICAgaWYgKGl0ZW0tPmF1eF9kYXRhLmhlYWRlcnMuY2FuY2VsZWQpIHsKKyAgICAgICAgICAgICAgZXJyb3JfY29kZSA9IGl0ZW0tPmF1eF9kYXRhLmhlYWRlcnMuZXJyb3JfY29kZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8qIFNldCBlcnJvcl9jb2RlIHRvIFJFRlVTRURfU1RSRUFNIHNvIHRoYXQgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgY2FuIHNlbmQgcmVxdWVzdCBhZ2Fpbi4gKi8KKyAgICAgICAgICAgICAgZXJyb3JfY29kZSA9IE5HSFRUUDJfUkVGVVNFRF9TVFJFQU07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgICAgICAgIG9wZW5lZF9zdHJlYW1faWQgPSBpdGVtLT5mcmFtZS5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVuZWRfc3RyZWFtX2lkKSB7CisgICAgICAgICAgLyogY2FyZWZ1bCBub3QgdG8gb3ZlcnJpZGUgcnYgKi8KKyAgICAgICAgICBpbnQgcnYyOworICAgICAgICAgIHJ2MiA9IG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW0oc2Vzc2lvbiwgb3BlbmVkX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUpOworCisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYyKSkgeworICAgICAgICAgICAgcmV0dXJuIHJ2MjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1fZnJlZShpdGVtLCBtZW0pOworICAgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgICAgICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KGFvYiwgbWVtKTsKKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVApIHsKKyAgICAgICAgICAvKiBJZiBoZWFkZXIgY29tcHJlc3Npb24gZXJyb3Igb2NjdXJyZWQsIHNob3VsZCB0ZXJtaW5pYXRlCisgICAgICAgICAgICAgY29ubmVjdGlvbi4gKi8KKyAgICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfSU5URVJOQUxfRVJST1IpOworICAgICAgICB9CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgYW9iLT5pdGVtID0gaXRlbTsKKworICAgICAgbmdodHRwMl9idWZzX3Jld2luZChmcmFtZWJ1ZnMpOworCisgICAgICBpZiAoaXRlbS0+ZnJhbWUuaGQudHlwZSAhPSBOR0hUVFAyX0RBVEEpIHsKKyAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisKKyAgICAgICAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgICAgICAgREVCVUdGKCJzZW5kOiBuZXh0IGZyYW1lOiBwYXlsb2FkbGVuPSV6dSwgdHlwZT0ldSwgZmxhZ3M9MHglMDJ4LCAiCisgICAgICAgICAgICAgICAic3RyZWFtX2lkPSVkXG4iLAorICAgICAgICAgICAgICAgZnJhbWUtPmhkLmxlbmd0aCwgZnJhbWUtPmhkLnR5cGUsIGZyYW1lLT5oZC5mbGFncywKKyAgICAgICAgICAgICAgIGZyYW1lLT5oZC5zdHJlYW1faWQpOworCisgICAgICAgIHJ2ID0gc2Vzc2lvbl9jYWxsX2JlZm9yZV9mcmFtZV9zZW5kKHNlc3Npb24sIGZyYW1lKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0NBTkNFTCkgeworICAgICAgICAgIGludDMyX3Qgb3BlbmVkX3N0cmVhbV9pZCA9IDA7CisgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSA9IE5HSFRUUDJfSU5URVJOQUxfRVJST1I7CisKKyAgICAgICAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrKAorICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgcnYsIHNlc3Npb24tPnVzZXJfZGF0YSkgIT0gMCkgeworICAgICAgICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBXZSBoYXZlIHRvIGNsb3NlIHN0cmVhbSBvcGVuZWQgYnkgY2FuY2VsZWQgcmVxdWVzdAorICAgICAgICAgICAgIEhFQURFUlMgb3IgUFVTSF9QUk9NSVNFLiAqLworICAgICAgICAgIHN3aXRjaCAoaXRlbS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgICAgIGNhc2UgTkdIVFRQMl9IRUFERVJTOgorICAgICAgICAgICAgaWYgKGl0ZW0tPmZyYW1lLmhlYWRlcnMuY2F0ID09IE5HSFRUUDJfSENBVF9SRVFVRVNUKSB7CisgICAgICAgICAgICAgIG9wZW5lZF9zdHJlYW1faWQgPSBpdGVtLT5mcmFtZS5oZC5zdHJlYW1faWQ7CisgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sKKyAgICAgICAgICAgICAgICAgaXRlbS0+YXV4X2RhdGEuaGVhZGVycy5jYW5jZWxlZCBzaW5jZSBpdCBoYXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICBiZWVuIGNoZWNrZWQuICovCisgICAgICAgICAgICAgIC8qIFNldCBlcnJvcl9jb2RlIHRvIFJFRlVTRURfU1RSRUFNIHNvIHRoYXQgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgY2FuIHNlbmQgcmVxdWVzdCBhZ2Fpbi4gKi8KKyAgICAgICAgICAgICAgZXJyb3JfY29kZSA9IE5HSFRUUDJfUkVGVVNFRF9TVFJFQU07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgICAgICAgICAgb3BlbmVkX3N0cmVhbV9pZCA9IGl0ZW0tPmZyYW1lLnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKG9wZW5lZF9zdHJlYW1faWQpIHsKKyAgICAgICAgICAgIC8qIGNhcmVmdWwgbm90IHRvIG92ZXJyaWRlIHJ2ICovCisgICAgICAgICAgICBpbnQgcnYyOworICAgICAgICAgICAgcnYyID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbShzZXNzaW9uLCBvcGVuZWRfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKTsKKworICAgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYyKSkgeworICAgICAgICAgICAgICByZXR1cm4gcnYyOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KGFvYiwgbWVtKTsKKworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBERUJVR0YoInNlbmQ6IG5leHQgZnJhbWU6IERBVEFcbiIpOworCisgICAgICAgIGlmIChpdGVtLT5hdXhfZGF0YS5kYXRhLm5vX2NvcHkpIHsKKyAgICAgICAgICBhb2ItPnN0YXRlID0gTkdIVFRQMl9PQl9TRU5EX05PX0NPUFk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgREVCVUdGKCJzZW5kOiBzdGFydCB0cmFuc21pdHRpbmcgZnJhbWUgdHlwZT0ldSwgbGVuZ3RoPSV6ZFxuIiwKKyAgICAgICAgICAgICBmcmFtZWJ1ZnMtPmN1ci0+YnVmLnBvc1szXSwKKyAgICAgICAgICAgICBmcmFtZWJ1ZnMtPmN1ci0+YnVmLmxhc3QgLSBmcmFtZWJ1ZnMtPmN1ci0+YnVmLnBvcyk7CisKKyAgICAgIGFvYi0+c3RhdGUgPSBOR0hUVFAyX09CX1NFTkRfREFUQTsKKworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTkdIVFRQMl9PQl9TRU5EX0RBVEE6IHsKKyAgICAgIHNpemVfdCBkYXRhbGVuOworICAgICAgbmdodHRwMl9idWYgKmJ1ZjsKKworICAgICAgYnVmID0gJmZyYW1lYnVmcy0+Y3VyLT5idWY7CisKKyAgICAgIGlmIChidWYtPnBvcyA9PSBidWYtPmxhc3QpIHsKKyAgICAgICAgREVCVUdGKCJzZW5kOiBlbmQgdHJhbnNtaXNzaW9uIG9mIGEgZnJhbWVcbiIpOworCisgICAgICAgIC8qIEZyYW1lIGhhcyBjb21wbGV0ZWx5IHNlbnQgKi8KKyAgICAgICAgaWYgKGZhc3RfY2IpIHsKKyAgICAgICAgICBydiA9IHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDIoc2Vzc2lvbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcnYgPSBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQxKHNlc3Npb24pOworICAgICAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgICAgIC8qIEZBVEFMICovCisgICAgICAgICAgICBhc3NlcnQobmdodHRwMl9pc19mYXRhbChydikpOworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKyAgICAgICAgICBydiA9IHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDIoc2Vzc2lvbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICAgIC8qIEZBVEFMICovCisgICAgICAgICAgYXNzZXJ0KG5naHR0cDJfaXNfZmF0YWwocnYpKTsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKyAgICAgICAgLyogV2UgaGF2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBuZXh0IHN0YXRlICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAqZGF0YV9wdHIgPSBidWYtPnBvczsKKyAgICAgIGRhdGFsZW4gPSBuZ2h0dHAyX2J1Zl9sZW4oYnVmKTsKKworICAgICAgLyogV2UgaW5jcmVtZW50IHRoZSBvZmZzZXQgaGVyZS4gSWYgc2VuZF9jYWxsYmFjayBkb2VzIG5vdCBzZW5kCisgICAgICAgICBldmVyeXRoaW5nLCB3ZSB3aWxsIGFkanVzdCBpdC4gKi8KKyAgICAgIGJ1Zi0+cG9zICs9IGRhdGFsZW47CisKKyAgICAgIHJldHVybiAoc3NpemVfdClkYXRhbGVuOworICAgIH0KKyAgICBjYXNlIE5HSFRUUDJfT0JfU0VORF9OT19DT1BZOiB7CisgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgICAgICBpbnQgcGF1c2U7CisKKyAgICAgIERFQlVHRigic2VuZDogbm8gY29weSBEQVRBXG4iKTsKKworICAgICAgZnJhbWUgPSAmYW9iLT5pdGVtLT5mcmFtZTsKKworICAgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgICAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdGKCJzZW5kOiBubyBjb3B5IERBVEEgY2FuY2VsbGVkIGJlY2F1c2Ugc3RyZWFtIHdhcyBjbG9zZWRcbiIpOworCisgICAgICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KGFvYiwgbWVtKTsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgcnYgPSBzZXNzaW9uX2NhbGxfc2VuZF9kYXRhKHNlc3Npb24sIGFvYi0+aXRlbSwgZnJhbWVidWZzKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGV0YWNoX2l0ZW0oc3RyZWFtKTsKKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoYW9iLCBtZW0pOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfV09VTERCTE9DSykgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgcGF1c2UgPSAocnYgPT0gTkdIVFRQMl9FUlJfUEFVU0UpOworCisgICAgICBydiA9IHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDEoc2Vzc2lvbik7CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIGFzc2VydChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSk7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICAgIHJ2ID0gc2Vzc2lvbl9hZnRlcl9mcmFtZV9zZW50MihzZXNzaW9uKTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgYXNzZXJ0KG5naHR0cDJfaXNfZmF0YWwocnYpKTsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICAvKiBXZSBoYXZlIGFscmVhZHkgYWRqdXN0ZWQgdGhlIG5leHQgc3RhdGUgKi8KKworICAgICAgaWYgKHBhdXNlKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOR0hUVFAyX09CX1NFTkRfQ0xJRU5UX01BR0lDOiB7CisgICAgICBzaXplX3QgZGF0YWxlbjsKKyAgICAgIG5naHR0cDJfYnVmICpidWY7CisKKyAgICAgIGJ1ZiA9ICZmcmFtZWJ1ZnMtPmN1ci0+YnVmOworCisgICAgICBpZiAoYnVmLT5wb3MgPT0gYnVmLT5sYXN0KSB7CisgICAgICAgIERFQlVHRigic2VuZDogZW5kIHRyYW5zbWlzc2lvbiBvZiBjbGllbnQgbWFnaWNcbiIpOworICAgICAgICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldChhb2IsIG1lbSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAqZGF0YV9wdHIgPSBidWYtPnBvczsKKyAgICAgIGRhdGFsZW4gPSBuZ2h0dHAyX2J1Zl9sZW4oYnVmKTsKKworICAgICAgYnVmLT5wb3MgKz0gZGF0YWxlbjsKKworICAgICAgcmV0dXJuIChzc2l6ZV90KWRhdGFsZW47CisgICAgfQorICAgIH0KKyAgfQorfQorCitzc2l6ZV90IG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICoqZGF0YV9wdHIpIHsKKyAgaW50IHJ2OworICBzc2l6ZV90IGxlbjsKKworICAqZGF0YV9wdHIgPSBOVUxMOworCisgIGxlbiA9IG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZF9pbnRlcm5hbChzZXNzaW9uLCBkYXRhX3B0ciwgMSk7CisgIGlmIChsZW4gPD0gMCkgeworICAgIHJldHVybiBsZW47CisgIH0KKworICBpZiAoc2Vzc2lvbi0+YW9iLml0ZW0pIHsKKyAgICAvKiBXZSBoYXZlIHRvIGNhbGwgc2Vzc2lvbl9hZnRlcl9mcmFtZV9zZW50MSBoZXJlIHRvIGhhbmRsZSBzdHJlYW0KKyAgICAgICBjbG9zdXJlIHVwb24gdHJhbnNtaXNzaW9uIG9mIGZyYW1lcy4gIE90aGVyd2lzZSwgRU5EX1NUUkVBTSBtYXkKKyAgICAgICBiZSByZWFjaGVkIHRvIGNsaWVudCBiZWZvcmUgd2UgY2FsbCBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQKKyAgICAgICBhZ2FpbiBhbmQgd2UgbWF5IGdldCBleGNlZWRpbmcgbnVtYmVyIG9mIGluY29taW5nIHN0cmVhbXMuICovCisgICAgcnYgPSBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQxKHNlc3Npb24pOworICAgIGlmIChydiA8IDApIHsKKyAgICAgIGFzc2VydChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSk7CisgICAgICByZXR1cm4gKHNzaXplX3QpcnY7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGxlbjsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBjb25zdCB1aW50OF90ICpkYXRhID0gTlVMTDsKKyAgc3NpemVfdCBkYXRhbGVuOworICBzc2l6ZV90IHNlbnRsZW47CisgIG5naHR0cDJfYnVmcyAqZnJhbWVidWZzOworCisgIGZyYW1lYnVmcyA9ICZzZXNzaW9uLT5hb2IuZnJhbWVidWZzOworCisgIGZvciAoOzspIHsKKyAgICBkYXRhbGVuID0gbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kX2ludGVybmFsKHNlc3Npb24sICZkYXRhLCAwKTsKKyAgICBpZiAoZGF0YWxlbiA8PSAwKSB7CisgICAgICByZXR1cm4gKGludClkYXRhbGVuOworICAgIH0KKyAgICBzZW50bGVuID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLnNlbmRfY2FsbGJhY2soc2Vzc2lvbiwgZGF0YSwgKHNpemVfdClkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICAgIGlmIChzZW50bGVuIDwgMCkgeworICAgICAgaWYgKHNlbnRsZW4gPT0gTkdIVFRQMl9FUlJfV09VTERCTE9DSykgeworICAgICAgICAvKiBUcmFuc21pc3Npb24gY2FuY2VsZWQuIFJld2luZCB0aGUgb2Zmc2V0ICovCisgICAgICAgIGZyYW1lYnVmcy0+Y3VyLT5idWYucG9zIC09IGRhdGFsZW47CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgICAgLyogUmV3aW5kIHRoZSBvZmZzZXQgdG8gdGhlIGFtb3VudCBvZiB1bnNlbnQgYnl0ZXMgKi8KKyAgICBmcmFtZWJ1ZnMtPmN1ci0+YnVmLnBvcyAtPSBkYXRhbGVuIC0gc2VudGxlbjsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdCBzZXNzaW9uX3JlY3YobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90ICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgeworICBzc2l6ZV90IHJ2OworICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5yZWN2X2NhbGxiYWNrKHNlc3Npb24sIGJ1ZiwgbGVuLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgIGlmIChydiA+IDApIHsKKyAgICBpZiAoKHNpemVfdClydiA+IGxlbikgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9IGVsc2UgaWYgKHJ2IDwgMCAmJiBydiAhPSBOR0hUVFAyX0VSUl9XT1VMREJMT0NLICYmIHJ2ICE9IE5HSFRUUDJfRVJSX0VPRikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisgIHJldHVybiBydjsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfb25fYmVnaW5fZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZV9oZCAqaGQpIHsKKyAgaW50IHJ2OworCisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fYmVnaW5fZnJhbWVfY2FsbGJhY2spIHsKKworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrKHNlc3Npb24sIGhkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9mcmFtZV9yZWN2X2NhbGxiYWNrKSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfcmVjdl9jYWxsYmFjayhzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfb25fYmVnaW5faGVhZGVycyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgREVCVUdGKCJyZWN2OiBjYWxsIG9uX2JlZ2luX2hlYWRlcnMgY2FsbGJhY2sgc3RyZWFtX2lkPSVkXG4iLAorICAgICAgICAgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fYmVnaW5faGVhZGVyc19jYWxsYmFjaykgeworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2soc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT51c2VyX2RhdGEpOworICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9jYWxsX29uX2hlYWRlcihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9oZF9udiAqbnYpIHsKKyAgaW50IHJ2ID0gMDsKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9oZWFkZXJfY2FsbGJhY2syKSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25faGVhZGVyX2NhbGxiYWNrMigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIG52LT5uYW1lLCBudi0+dmFsdWUsIG52LT5mbGFncywgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgfSBlbHNlIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25faGVhZGVyX2NhbGxiYWNrKSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25faGVhZGVyX2NhbGxiYWNrKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgbnYtPm5hbWUtPmJhc2UsIG52LT5uYW1lLT5sZW4sIG52LT52YWx1ZS0+YmFzZSwKKyAgICAgICAgbnYtPnZhbHVlLT5sZW4sIG52LT5mbGFncywgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgfQorCisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9QQVVTRSB8fCBydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfb25faW52YWxpZF9oZWFkZXIobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2hkX252ICpudikgeworICBpbnQgcnY7CisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syKSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgbnYtPm5hbWUsIG52LT52YWx1ZSwgbnYtPmZsYWdzLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICB9IGVsc2UgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjaykgeworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgbnYtPm5hbWUtPmJhc2UsIG52LT5uYW1lLT5sZW4sIG52LT52YWx1ZS0+YmFzZSwKKyAgICAgICAgbnYtPnZhbHVlLT5sZW4sIG52LT5mbGFncywgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9QQVVTRSB8fCBydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2Vzc2lvbl9jYWxsX29uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpZnJhbWUtPmZyYW1lOworCisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2spIHsKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjaygKKyAgICAgICAgc2Vzc2lvbiwgJmZyYW1lLT5oZCwgZGF0YSwgbGVuLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9DQU5DRUwpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fY2FsbF91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKyAgdm9pZCAqcGF5bG9hZCA9IE5VTEw7CisKKyAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3MudW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaygKKyAgICAgIHNlc3Npb24sICZwYXlsb2FkLCAmZnJhbWUtPmhkLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfQ0FOQ0VMKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICBmcmFtZS0+ZXh0LnBheWxvYWQgPSBwYXlsb2FkOworCisgIHJldHVybiAwOworfQorCisvKgorICogSGFuZGxlcyBmcmFtZSBzaXplIGVycm9yLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgT3V0IG9mIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX2hhbmRsZV9mcmFtZV9zaXplX2Vycm9yKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICAvKiBUT0RPIEN1cnJlbnRseSBubyBjYWxsYmFjayBpcyBjYWxsZWQgZm9yIHRoaXMgZXJyb3IsIGJlY2F1c2Ugd2UKKyAgICAgY2FsbCB0aGlzIGNhbGxiYWNrIGJlZm9yZSByZWFkaW5nIGFueSBwYXlsb2FkICovCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oc2Vzc2lvbiwgTkdIVFRQMl9GUkFNRV9TSVpFX0VSUk9SKTsKK30KKworc3RhdGljIHVpbnQzMl90IGdldF9lcnJvcl9jb2RlX2Zyb21fbGliX2Vycm9yX2NvZGUoaW50IGxpYl9lcnJvcl9jb2RlKSB7CisgIHN3aXRjaCAobGliX2Vycm9yX2NvZGUpIHsKKyAgY2FzZSBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VEOgorICAgIHJldHVybiBOR0hUVFAyX1NUUkVBTV9DTE9TRUQ7CisgIGNhc2UgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA6CisgICAgcmV0dXJuIE5HSFRUUDJfQ09NUFJFU1NJT05fRVJST1I7CisgIGNhc2UgTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUjoKKyAgICByZXR1cm4gTkdIVFRQMl9GUkFNRV9TSVpFX0VSUk9SOworICBjYXNlIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTDoKKyAgICByZXR1cm4gTkdIVFRQMl9GTE9XX0NPTlRST0xfRVJST1I7CisgIGNhc2UgTkdIVFRQMl9FUlJfUkVGVVNFRF9TVFJFQU06CisgICAgcmV0dXJuIE5HSFRUUDJfUkVGVVNFRF9TVFJFQU07CisgIGNhc2UgTkdIVFRQMl9FUlJfUFJPVE86CisgIGNhc2UgTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI6CisgIGNhc2UgTkdIVFRQMl9FUlJfSFRUUF9NRVNTQUdJTkc6CisgICAgcmV0dXJuIE5HSFRUUDJfUFJPVE9DT0xfRVJST1I7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIE5HSFRUUDJfSU5URVJOQUxfRVJST1I7CisgIH0KK30KKworLyoKKyAqIENhbGxzIG9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjayBpZiBpdCBpcyBzZXQgdG8gfHNlc3Npb258LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICBVc2VyIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9jYWxsX29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjayhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlKSB7CisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKSB7CisgICAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2soCisgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgbGliX2Vycm9yX2NvZGUsIHNlc3Npb24tPnVzZXJfZGF0YSkgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25faGFuZGxlX2ludmFsaWRfc3RyZWFtMihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlKSB7CisgIGludCBydjsKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oCisgICAgICBzZXNzaW9uLCBzdHJlYW1faWQsIGdldF9lcnJvcl9jb2RlX2Zyb21fbGliX2Vycm9yX2NvZGUobGliX2Vycm9yX2NvZGUpKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2spIHsKKyAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaygKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBsaWJfZXJyb3JfY29kZSwgc2Vzc2lvbi0+dXNlcl9kYXRhKSAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlKSB7CisgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX3N0cmVhbTIoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Vycm9yX2NvZGUpOworfQorCitzdGF0aWMgaW50IHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaWJfZXJyb3JfY29kZSkgeworICBpbnQgcnY7CisgIHJ2ID0gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUsIGxpYl9lcnJvcl9jb2RlKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLOworfQorCisvKgorICogSGFuZGxlcyBpbnZhbGlkIGZyYW1lIHdoaWNoIGNhdXNlcyBjb25uZWN0aW9uIGVycm9yLgorICovCitzdGF0aWMgaW50IHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaWJfZXJyb3JfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikgeworICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaykgeworICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKAorICAgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIGxpYl9lcnJvcl9jb2RlLCBzZXNzaW9uLT51c2VyX2RhdGEpICE9IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgfQorICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgc2Vzc2lvbiwgZ2V0X2Vycm9yX2NvZGVfZnJvbV9saWJfZXJyb3JfY29kZShsaWJfZXJyb3JfY29kZSksIHJlYXNvbik7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24pIHsKKyAgaW50IHJ2OworICBydiA9CisgICAgICBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsIGxpYl9lcnJvcl9jb2RlLCByZWFzb24pOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7Cit9CisKKy8qCisgKiBJbmZsYXRlcyBoZWFkZXIgYmxvY2sgaW4gdGhlIG1lbW9yeSBwb2ludGVkIGJ5IHxpbnwgd2l0aCB8aW5sZW58CisgKiBieXRlcy4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5HSFRUUDJfRVJSX1BBVVNFLCB0aGUgY2FsbGVyIG11c3QKKyAqIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiwgdW50aWwgaXQgcmV0dXJucyAwIG9yIG9uZSBvZiBuZWdhdGl2ZQorICogZXJyb3IgY29kZS4gIElmIHxjYWxsX2hlYWRlcl9jYnwgaXMgemVybywgdGhlIG9uX2hlYWRlcl9jYWxsYmFjaworICogYXJlIG5vdCBpbnZva2VkIGFuZCB0aGUgZnVuY3Rpb24gbmV2ZXIgcmV0dXJuIE5HSFRUUDJfRVJSX1BBVVNFLiBJZgorICogdGhlIGdpdmVuIHxpbnwgaXMgdGhlIGxhc3QgY2h1bmsgb2YgaGVhZGVyIGJsb2NrLCB0aGUgfGZpbmFsfCBtdXN0CisgKiBiZSBub256ZXJvLiBJZiBoZWFkZXIgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCAod2hpY2ggaXMKKyAqIGluZGljYXRlZCBieSB0aGUgcmV0dXJuIHZhbHVlIDAsIE5HSFRUUDJfRVJSX1BBVVNFIG9yCisgKiBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSwgdGhlIG51bWJlciBvZiBwcm9jZXNzZWQKKyAqIGlucHV0IGJ5dGVzIGlzIGFzc2lnbmVkIHRvIHRoZSB8KnJlYWRsZW5fcHRyfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqIE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgcmV0dXJucyB0aGlzIGVycm9yIGNvZGUsIGluZGljYXRpbmcgdGhhdCB0aGlzCisgKiAgICAgc3RyZWFtIHNob3VsZCBiZSBSU1RfU1RSRUFNZWQuCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9QQVVTRQorICogICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5lZCBOR0hUVFAyX0VSUl9QQVVTRQorICogTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAKKyAqICAgICBIZWFkZXIgZGVjb21wcmVzc2lvbiBmYWlsZWQKKyAqLworc3RhdGljIGludCBpbmZsYXRlX2hlYWRlcl9ibG9jayhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnJlYWRsZW5fcHRyLCB1aW50OF90ICppbiwgc2l6ZV90IGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmluYWwsIGludCBjYWxsX2hlYWRlcl9jYikgeworICBzc2l6ZV90IHByb2NsZW47CisgIGludCBydjsKKyAgaW50IGluZmxhdGVfZmxhZ3M7CisgIG5naHR0cDJfaGRfbnYgbnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfc3RyZWFtICpzdWJqZWN0X3N0cmVhbTsKKyAgaW50IHRyYWlsZXIgPSAwOworCisgICpyZWFkbGVuX3B0ciA9IDA7CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworCisgIGlmIChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX1BVU0hfUFJPTUlTRSkgeworICAgIHN1YmplY3Rfc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLT5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkKTsKKyAgfSBlbHNlIHsKKyAgICBzdWJqZWN0X3N0cmVhbSA9IHN0cmVhbTsKKyAgICB0cmFpbGVyID0gc2Vzc2lvbl90cmFpbGVyX2hlYWRlcnMoc2Vzc2lvbiwgc3RyZWFtLCBmcmFtZSk7CisgIH0KKworICBERUJVR0YoInJlY3Y6IGRlY29kaW5nIGhlYWRlciBibG9jayAlenUgYnl0ZXNcbiIsIGlubGVuKTsKKyAgZm9yICg7OykgeworICAgIGluZmxhdGVfZmxhZ3MgPSAwOworICAgIHByb2NsZW4gPSBuZ2h0dHAyX2hkX2luZmxhdGVfaGRfbnYoJnNlc3Npb24tPmhkX2luZmxhdGVyLCAmbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5mbGF0ZV9mbGFncywgaW4sIGlubGVuLCBmaW5hbCk7CisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwoKGludClwcm9jbGVuKSkgeworICAgICAgcmV0dXJuIChpbnQpcHJvY2xlbjsKKyAgICB9CisgICAgaWYgKHByb2NsZW4gPCAwKSB7CisgICAgICBpZiAoc2Vzc2lvbi0+aWZyYW1lLnN0YXRlID09IE5HSFRUUDJfSUJfUkVBRF9IRUFERVJfQkxPQ0spIHsKKyAgICAgICAgaWYgKHN1YmplY3Rfc3RyZWFtICYmIHN1YmplY3Rfc3RyZWFtLT5zdGF0ZSAhPSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgICAgICAgLyogQWRkaW5nIFJTVF9TVFJFQU0gaGVyZSBpcyB2ZXJ5IGltcG9ydGFudC4gSXQgcHJldmVudHMKKyAgICAgICAgICAgICBmcm9tIGludm9raW5nIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGZvciB0aGUgc2FtZSBzdHJlYW0KKyAgICAgICAgICAgICBJRC4gKi8KKyAgICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbSgKKyAgICAgICAgICAgICAgc2Vzc2lvbiwgc3ViamVjdF9zdHJlYW0tPnN0cmVhbV9pZCwgTkdIVFRQMl9DT01QUkVTU0lPTl9FUlJPUik7CisKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJ2ID0KKyAgICAgICAgICBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oc2Vzc2lvbiwgTkdIVFRQMl9DT01QUkVTU0lPTl9FUlJPUik7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgICAgfQorICAgIGluICs9IHByb2NsZW47CisgICAgaW5sZW4gLT0gKHNpemVfdClwcm9jbGVuOworICAgICpyZWFkbGVuX3B0ciArPSAoc2l6ZV90KXByb2NsZW47CisKKyAgICBERUJVR0YoInJlY3Y6IHByb2NsZW49JXpkXG4iLCBwcm9jbGVuKTsKKworICAgIGlmIChjYWxsX2hlYWRlcl9jYiAmJiAoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9FTUlUKSkgeworICAgICAgcnYgPSAwOworICAgICAgaWYgKHN1YmplY3Rfc3RyZWFtKSB7CisgICAgICAgIGlmIChzZXNzaW9uX2VuZm9yY2VfaHR0cF9tZXNzYWdpbmcoc2Vzc2lvbikpIHsKKyAgICAgICAgICBydiA9IG5naHR0cDJfaHR0cF9vbl9oZWFkZXIoc2Vzc2lvbiwgc3ViamVjdF9zdHJlYW0sIGZyYW1lLCAmbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsZXIpOworCisgICAgICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0lHTl9IVFRQX0hFQURFUikgeworICAgICAgICAgICAgLyogRG9uJ3Qgb3ZlcndyaXRlIHJ2IGhlcmUgKi8KKyAgICAgICAgICAgIGludCBydjI7CisKKyAgICAgICAgICAgIHJ2MiA9IHNlc3Npb25fY2FsbF9vbl9pbnZhbGlkX2hlYWRlcihzZXNzaW9uLCBmcmFtZSwgJm52KTsKKyAgICAgICAgICAgIGlmIChydjIgPT0gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRSkgeworICAgICAgICAgICAgICBydiA9IE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHJ2MiAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJ2MjsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIC8qIGhlYWRlciBpcyBpZ25vcmVkICovCisgICAgICAgICAgICAgIERFQlVHRigicmVjdjogSFRUUCBpZ25vcmVkOiB0eXBlPSV1LCBpZD0lZCwgaGVhZGVyICUuKnM6ICUuKnNcbiIsCisgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+aGQudHlwZSwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgKGludCludi5uYW1lLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICBudi5uYW1lLT5iYXNlLCAoaW50KW52LnZhbHVlLT5sZW4sIG52LnZhbHVlLT5iYXNlKTsKKworICAgICAgICAgICAgICBydjIgPSBzZXNzaW9uX2NhbGxfZXJyb3JfY2FsbGJhY2soCisgICAgICAgICAgICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICJJZ25vcmluZyByZWNlaXZlZCBpbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkOiBmcmFtZSB0eXBlOiAiCisgICAgICAgICAgICAgICAgICAiJXUsIHN0cmVhbTogJWQsIG5hbWU6IFslLipzXSwgdmFsdWU6IFslLipzXSIsCisgICAgICAgICAgICAgICAgICBmcmFtZS0+aGQudHlwZSwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgKGludCludi5uYW1lLT5sZW4sCisgICAgICAgICAgICAgICAgICBudi5uYW1lLT5iYXNlLCAoaW50KW52LnZhbHVlLT5sZW4sIG52LnZhbHVlLT5iYXNlKTsKKworICAgICAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydjIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJ2MjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUikgeworICAgICAgICAgICAgREVCVUdGKCJyZWN2OiBIVFRQIGVycm9yOiB0eXBlPSV1LCBpZD0lZCwgaGVhZGVyICUuKnM6ICUuKnNcbiIsCisgICAgICAgICAgICAgICAgICAgZnJhbWUtPmhkLnR5cGUsIGZyYW1lLT5oZC5zdHJlYW1faWQsIChpbnQpbnYubmFtZS0+bGVuLAorICAgICAgICAgICAgICAgICAgIG52Lm5hbWUtPmJhc2UsIChpbnQpbnYudmFsdWUtPmxlbiwgbnYudmFsdWUtPmJhc2UpOworCisgICAgICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9lcnJvcl9jYWxsYmFjaygKKyAgICAgICAgICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUiwKKyAgICAgICAgICAgICAgICAiSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB3YXMgcmVjZWl2ZWQ6IGZyYW1lIHR5cGU6ICIKKyAgICAgICAgICAgICAgICAiJXUsIHN0cmVhbTogJWQsIG5hbWU6IFslLipzXSwgdmFsdWU6IFslLipzXSIsCisgICAgICAgICAgICAgICAgZnJhbWUtPmhkLnR5cGUsIGZyYW1lLT5oZC5zdHJlYW1faWQsIChpbnQpbnYubmFtZS0+bGVuLAorICAgICAgICAgICAgICAgIG52Lm5hbWUtPmJhc2UsIChpbnQpbnYudmFsdWUtPmxlbiwgbnYudmFsdWUtPmJhc2UpOworCisgICAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBydiA9IHNlc3Npb25faGFuZGxlX2ludmFsaWRfc3RyZWFtMihzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdF9zdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLCBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUik7CisgICAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChydiA9PSAwKSB7CisgICAgICAgICAgcnYgPSBzZXNzaW9uX2NhbGxfb25faGVhZGVyKHNlc3Npb24sIGZyYW1lLCAmbnYpOworICAgICAgICAgIC8qIFRoaXMgaGFuZGxlcyBOR0hUVFAyX0VSUl9QQVVTRSBhbmQKKyAgICAgICAgICAgICBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFIGFzIHdlbGwgKi8KKyAgICAgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTCkgeworICAgICAgbmdodHRwMl9oZF9pbmZsYXRlX2VuZF9oZWFkZXJzKCZzZXNzaW9uLT5oZF9pbmZsYXRlcik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKChpbmZsYXRlX2ZsYWdzICYgTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVQpID09IDAgJiYgaW5sZW4gPT0gMCkgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gSEVBREVSUyBmcmFtZSB3YXMgY29tcGxldGVseSByZWNlaXZlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX2VuZF9zdHJlYW1faGVhZGVyc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKyAgaWYgKChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24oc3RyZWFtLCBOR0hUVFAyX1NIVVRfUkQpOworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW1faWZfc2h1dF9yZHdyKHNlc3Npb24sIHN0cmVhbSk7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fYWZ0ZXJfaGVhZGVyX2Jsb2NrX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnYgPSAwOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWUuZnJhbWU7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgLyogV2UgZG9uJ3QgY2FsbCBvbl9mcmFtZV9yZWN2X2NhbGxiYWNrIGlmIHN0cmVhbSBoYXMgYmVlbiBjbG9zZWQKKyAgICAgYWxyZWFkeSBvciBiZWluZyBjbG9zZWQuICovCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICBpZiAoIXN0cmVhbSB8fCBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChzZXNzaW9uX2VuZm9yY2VfaHR0cF9tZXNzYWdpbmcoc2Vzc2lvbikpIHsKKyAgICBpZiAoZnJhbWUtPmhkLnR5cGUgPT0gTkdIVFRQMl9QVVNIX1BST01JU0UpIHsKKyAgICAgIG5naHR0cDJfc3RyZWFtICpzdWJqZWN0X3N0cmVhbTsKKworICAgICAgc3ViamVjdF9zdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbSgKKyAgICAgICAgICBzZXNzaW9uLCBmcmFtZS0+cHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZCk7CisgICAgICBpZiAoc3ViamVjdF9zdHJlYW0pIHsKKyAgICAgICAgcnYgPSBuZ2h0dHAyX2h0dHBfb25fcmVxdWVzdF9oZWFkZXJzKHN1YmplY3Rfc3RyZWFtLCBmcmFtZSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGFzc2VydChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX0hFQURFUlMpOworICAgICAgc3dpdGNoIChmcmFtZS0+aGVhZGVycy5jYXQpIHsKKyAgICAgIGNhc2UgTkdIVFRQMl9IQ0FUX1JFUVVFU1Q6CisgICAgICAgIHJ2ID0gbmdodHRwMl9odHRwX29uX3JlcXVlc3RfaGVhZGVycyhzdHJlYW0sIGZyYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfSENBVF9SRVNQT05TRToKKyAgICAgIGNhc2UgTkdIVFRQMl9IQ0FUX1BVU0hfUkVTUE9OU0U6CisgICAgICAgIHJ2ID0gbmdodHRwMl9odHRwX29uX3Jlc3BvbnNlX2hlYWRlcnMoc3RyZWFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfSENBVF9IRUFERVJTOgorICAgICAgICBpZiAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfRVhQRUNUX0ZJTkFMX1JFU1BPTlNFKSB7CisgICAgICAgICAgYXNzZXJ0KCFzZXNzaW9uLT5zZXJ2ZXIpOworICAgICAgICAgIHJ2ID0gbmdodHRwMl9odHRwX29uX3Jlc3BvbnNlX2hlYWRlcnMoc3RyZWFtKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBydiA9IG5naHR0cDJfaHR0cF9vbl90cmFpbGVyX2hlYWRlcnMoc3RyZWFtLCBmcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7CisgICAgICB9CisgICAgICBpZiAocnYgPT0gMCAmJiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pKSB7CisgICAgICAgIHJ2ID0gbmdodHRwMl9odHRwX29uX3JlbW90ZV9lbmRfc3RyZWFtKHN0cmVhbSk7CisgICAgICB9CisgICAgfQorICAgIGlmIChydiAhPSAwKSB7CisgICAgICBpbnQzMl90IHN0cmVhbV9pZDsKKworICAgICAgaWYgKGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfUFVTSF9QUk9NSVNFKSB7CisgICAgICAgIHN0cmVhbV9pZCA9IGZyYW1lLT5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RyZWFtX2lkID0gZnJhbWUtPmhkLnN0cmVhbV9pZDsKKyAgICAgIH0KKworICAgICAgcnYgPSBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX3N0cmVhbTIoc2Vzc2lvbiwgc3RyZWFtX2lkLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRVJSX0hUVFBfTUVTU0FHSU5HKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIGlmIChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX0hFQURFUlMgJiYKKyAgICAgICAgICAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pKSB7CisgICAgICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1JEKTsKKyAgICAgICAgLyogRG9uJ3QgY2FsbCBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtX2lmX3NodXRfcmR3cgorICAgICAgICAgICBiZWNhdXNlIFJTVF9TVFJFQU0gaGFzIGJlZW4gc3VibWl0dGVkLiAqLworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcnYgPSBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBpZiAoZnJhbWUtPmhkLnR5cGUgIT0gTkdIVFRQMl9IRUFERVJTKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gc2Vzc2lvbl9lbmRfc3RyZWFtX2hlYWRlcnNfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUsIHN0cmVhbSk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcmVxdWVzdF9oZWFkZXJzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydiA9IDA7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywgInJlcXVlc3QgSEVBREVSUzogc3RyZWFtX2lkID09IDAiKTsKKyAgfQorCisgIC8qIElmIGNsaWVudCByZWNlaXZlcyBpZGxlIHN0cmVhbSBmcm9tIHNlcnZlciwgaXQgaXMgaW52YWxpZAorICAgICByZWdhcmRsZXNzIHN0cmVhbSBJRCBpcyBldmVuIG9yIG9kZC4gIFRoaXMgaXMgYmVjYXVzZSBjbGllbnQgaXMKKyAgICAgbm90IGV4cGVjdGVkIHRvIHJlY2VpdmUgcmVxdWVzdCBmcm9tIHNlcnZlci4gKi8KKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICBpZiAoc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICAgInJlcXVlc3QgSEVBREVSUzogY2xpZW50IHJlY2VpdmVkIHJlcXVlc3QiKTsKKyAgICB9CisKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSzsKKyAgfQorCisgIGFzc2VydChzZXNzaW9uLT5zZXJ2ZXIpOworCisgIGlmICghc2Vzc2lvbl9pc19uZXdfcGVlcl9zdHJlYW1faWQoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwIHx8CisgICAgICAgIG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICAgInJlcXVlc3QgSEVBREVSUzogaW52YWxpZCBzdHJlYW1faWQiKTsKKyAgICB9CisKKyAgICAvKiBSRkMgNzU0MCBzYXlzIGlmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGEgSEVBREVSUyB3aXRoIGludmFsaWQKKyAgICAgKiBzdHJlYW0gSUQgKGUuZywgbnVtZXJpY2FsbHkgc21hbGxlciB0aGFuIHByZXZpb3VzKSwgaXQgTVVTVAorICAgICAqIGlzc3VlIGNvbm5lY3Rpb24gZXJyb3Igd2l0aCBlcnJvciBjb2RlIFBST1RPQ09MX0VSUk9SLiAgSXQgaXMgYQorICAgICAqIGJpdCBoYXJkIHRvIGRldGVjdCB0aGlzLCBzaW5jZSB3ZSBjYW5ub3QgcmVtZW1iZXIgYWxsIHN0cmVhbXMKKyAgICAgKiB3ZSBvYnNlcnZlZCBzbyBmYXIuCisgICAgICoKKyAgICAgKiBZb3UgbWlnaHQgaW1hZ2luZSB0aGlzIGlzIHJlYWxseSBlYXN5LiAgQnV0IG5vLiAgSFRUUC8yIGlzCisgICAgICogYXN5bmNocm9ub3VzIHByb3RvY29sLCBhbmQgdXN1YWxseSBjbGllbnQgYW5kIHNlcnZlciBkbyBub3QKKyAgICAgKiBzaGFyZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBvcGVuL2Nsb3NlZCBzdHJlYW0gc3RhdHVzLiAgRm9yCisgICAgICogZXhhbXBsZSwgYWZ0ZXIgc2VydmVyIHNlbmRzIFJTVF9TVFJFQU0gZm9yIGEgc3RyZWFtLCBjbGllbnQgbWF5CisgICAgICogc2VuZCB0cmFpbGVyIEhFQURFUlMgZm9yIHRoYXQgc3RyZWFtLiAgSWYgbmFpdmUgc2VydmVyIGRldGVjdHMKKyAgICAgKiB0aGF0LCBhbmQgaXNzdWVkIGNvbm5lY3Rpb24gZXJyb3IsIHRoZW4gaXQgaXMgYSBidWcgb2Ygc2VydmVyCisgICAgICogaW1wbGVtZW50YXRpb24gc2luY2UgY2xpZW50IGlzIG5vdCB3cm9uZyBpZiBpdCBkaWQgbm90IGdldAorICAgICAqIFJTVF9TVFJFQU0gd2hlbiBpdCBpc3N1ZWQgdHJhaWxlciBIRUFERVJTLgorICAgICAqCisgICAgICogQXQgdGhlIG1vbWVudCwgd2UgYXJlIHZlcnkgY29uc2VydmF0aXZlIGhlcmUuICBXZSBvbmx5IHVzZQorICAgICAqIGNvbm5lY3Rpb24gZXJyb3IgaWYgc3RyZWFtIElEIHJlZmVycyBpZGxlIHN0cmVhbSwgb3Igd2UgYXJlCisgICAgICogc3VyZSB0aGF0IHN0cmVhbSBpcyBoYWxmLWNsb3NlZChyZW1vdGUpIG9yIGNsb3NlZC4gIE90aGVyd2lzZQorICAgICAqIHdlIGp1c3QgaWdub3JlIEhFQURFUlMgZm9yIG5vdy4KKyAgICAgKi8KKyAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yYXcoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgICAgaWYgKHN0cmVhbSAmJiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSkgeworICAgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VELCAiSEVBREVSUzogc3RyZWFtIGNsb3NlZCIpOworICAgIH0KKworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLOworICB9CisgIHNlc3Npb24tPmxhc3RfcmVjdl9zdHJlYW1faWQgPSBmcmFtZS0+aGQuc3RyZWFtX2lkOworCisgIGlmIChzZXNzaW9uX2lzX2luY29taW5nX2NvbmN1cnJlbnRfc3RyZWFtc19tYXgoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgInJlcXVlc3QgSEVBREVSUzogbWF4IGNvbmN1cnJlbnQgc3RyZWFtcyBleGNlZWRlZCIpOworICB9CisKKyAgaWYgKCFzZXNzaW9uX2FsbG93X2luY29taW5nX25ld19zdHJlYW0oc2Vzc2lvbikpIHsKKyAgICAvKiBXZSBqdXN0IGlnbm9yZSBzdHJlYW0gYWZ0ZXIgR09BV0FZIHdhcyBzZW50ICovCisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7CisgIH0KKworICBpZiAoZnJhbWUtPmhlYWRlcnMucHJpX3NwZWMuc3RyZWFtX2lkID09IGZyYW1lLT5oZC5zdHJlYW1faWQpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywgInJlcXVlc3QgSEVBREVSUzogZGVwZW5kIG9uIGl0c2VsZiIpOworICB9CisKKyAgaWYgKHNlc3Npb25faXNfaW5jb21pbmdfY29uY3VycmVudF9zdHJlYW1zX3BlbmRpbmdfbWF4KHNlc3Npb24pKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9FUlJfUkVGVVNFRF9TVFJFQU0pOworICB9CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX29wZW5fc3RyZWFtKAorICAgICAgc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgTkdIVFRQMl9TVFJFQU1fRkxBR19OT05FLAorICAgICAgJmZyYW1lLT5oZWFkZXJzLnByaV9zcGVjLCBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HLCBOVUxMKTsKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfY2xvc2VkX3N0cmVhbShzZXNzaW9uKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgc2Vzc2lvbi0+bGFzdF9wcm9jX3N0cmVhbV9pZCA9IHNlc3Npb24tPmxhc3RfcmVjdl9zdHJlYW1faWQ7CisKKyAgcnYgPSBzZXNzaW9uX2NhbGxfb25fYmVnaW5faGVhZGVycyhzZXNzaW9uLCBmcmFtZSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3Jlc3BvbnNlX2hlYWRlcnNfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2OworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHN0cmVhbS0+c3RhdGUgPT0KKyAgICAgTkdIVFRQMl9TVFJFQU1fT1BFTklORyBhbmQgc3RyZWFtX2lkIGlzIGxvY2FsIHNpZGUgaW5pdGlhdGVkLiAqLworICBhc3NlcnQoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HICYmCisgICAgICAgICBuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKTsKKyAgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgPT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLCAicmVzcG9uc2UgSEVBREVSUzogc3RyZWFtX2lkID09IDAiKTsKKyAgfQorICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSB7CisgICAgLyogaGFsZiBjbG9zZWQgKHJlbW90ZSk6IGZyb20gdGhlIHNwZWM6CisKKyAgICAgICBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhZGRpdGlvbmFsIGZyYW1lcyBmb3IgYSBzdHJlYW0gdGhhdCBpcworICAgICAgIGluIHRoaXMgc3RhdGUgaXQgTVVTVCByZXNwb25kIHdpdGggYSBzdHJlYW0gZXJyb3IgKFNlY3Rpb24KKyAgICAgICA1LjQuMikgb2YgdHlwZSBTVFJFQU1fQ0xPU0VELgorCisgICAgICAgV2UgZ28gZnVydGhlciwgYW5kIG1ha2UgaXQgY29ubmVjdGlvbiBlcnJvci4KKyAgICAqLworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQsICJIRUFERVJTOiBzdHJlYW0gY2xvc2VkIik7CisgIH0KKyAgc3RyZWFtLT5zdGF0ZSA9IE5HSFRUUDJfU1RSRUFNX09QRU5FRDsKKyAgcnYgPSBzZXNzaW9uX2NhbGxfb25fYmVnaW5faGVhZGVycyhzZXNzaW9uLCBmcmFtZSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3B1c2hfcmVzcG9uc2VfaGVhZGVyc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2ID0gMDsKKyAgYXNzZXJ0KHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQpOworICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICJwdXNoIHJlc3BvbnNlIEhFQURFUlM6IHN0cmVhbV9pZCA9PSAwIik7CisgIH0KKworICBpZiAoc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICJIRUFERVJTOiBubyBIRUFERVJTIGFsbG93ZWQgZnJvbSBjbGllbnQgaW4gcmVzZXJ2ZWQgc3RhdGUiKTsKKyAgfQorCisgIGlmIChzZXNzaW9uX2lzX2luY29taW5nX2NvbmN1cnJlbnRfc3RyZWFtc19tYXgoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgInB1c2ggcmVzcG9uc2UgSEVBREVSUzogbWF4IGNvbmN1cnJlbnQgc3RyZWFtcyBleGNlZWRlZCIpOworICB9CisKKyAgaWYgKCFzZXNzaW9uX2FsbG93X2luY29taW5nX25ld19zdHJlYW0oc2Vzc2lvbikpIHsKKyAgICAvKiBXZSBkb24ndCBhY2NlcHQgbmV3IHN0cmVhbSBhZnRlciBHT0FXQVkgd2FzIHNlbnQuICovCisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7CisgIH0KKworICBpZiAoc2Vzc2lvbl9pc19pbmNvbWluZ19jb25jdXJyZW50X3N0cmVhbXNfcGVuZGluZ19tYXgoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX3N0cmVhbShzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0VSUl9SRUZVU0VEX1NUUkVBTSk7CisgIH0KKworICBuZ2h0dHAyX3N0cmVhbV9wcm9taXNlX2Z1bGZpbGxlZChzdHJlYW0pOworICBpZiAoIW5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQpKSB7CisgICAgLS1zZXNzaW9uLT5udW1faW5jb21pbmdfcmVzZXJ2ZWRfc3RyZWFtczsKKyAgfQorICArK3Nlc3Npb24tPm51bV9pbmNvbWluZ19zdHJlYW1zOworICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9oZWFkZXJzKHNlc3Npb24sIGZyYW1lKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25faGVhZGVyc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnYgPSAwOworICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sICJIRUFERVJTOiBzdHJlYW1faWQgPT0gMCIpOworICB9CisgIGlmICgoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSkgeworICAgIC8qIGhhbGYgY2xvc2VkIChyZW1vdGUpOiBmcm9tIHRoZSBzcGVjOgorCisgICAgICAgSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYWRkaXRpb25hbCBmcmFtZXMgZm9yIGEgc3RyZWFtIHRoYXQgaXMKKyAgICAgICBpbiB0aGlzIHN0YXRlIGl0IE1VU1QgcmVzcG9uZCB3aXRoIGEgc3RyZWFtIGVycm9yIChTZWN0aW9uCisgICAgICAgNS40LjIpIG9mIHR5cGUgU1RSRUFNX0NMT1NFRC4KKworICAgICAgIHdlIGdvIGZ1cnRoZXIsIGFuZCBtYWtlIGl0IGNvbm5lY3Rpb24gZXJyb3IuCisgICAgKi8KKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VELCAiSEVBREVSUzogc3RyZWFtIGNsb3NlZCIpOworICB9CisgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKSB7CisgICAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fT1BFTkVEKSB7CisgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9oZWFkZXJzKHNlc3Npb24sIGZyYW1lKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLOworICB9CisgIC8qIElmIHRoaXMgaXMgcmVtb3RlIHBlZXIgaW5pdGlhdGVkIHN0cmVhbSwgaXQgaXMgT0sgdW5sZXNzIGl0CisgICAgIGhhcyBzZW50IEVORF9TVFJFQU0gZnJhbWUgYWxyZWFkeS4gQnV0IGlmIHN0cmVhbSBpcyBpbgorICAgICBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HLCB3ZSBkaXNjYXJkIHRoZSBmcmFtZS4gVGhpcyBpcyBhIHJhY2UKKyAgICAgY29uZGl0aW9uLiAqLworICBpZiAoc3RyZWFtLT5zdGF0ZSAhPSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgcnYgPSBzZXNzaW9uX2NhbGxfb25fYmVnaW5faGVhZGVycyhzZXNzaW9uLCBmcmFtZSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcm9jZXNzX2hlYWRlcnNfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpZnJhbWUtPmZyYW1lOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIHJ2ID0gbmdodHRwMl9mcmFtZV91bnBhY2tfaGVhZGVyc19wYXlsb2FkKCZmcmFtZS0+aGVhZGVycywgaWZyYW1lLT5zYnVmLnBvcyk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SLCAiSEVBREVSUzogY291bGQgbm90IHVucGFjayIpOworICB9CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICBpZiAoIXN0cmVhbSkgeworICAgIGZyYW1lLT5oZWFkZXJzLmNhdCA9IE5HSFRUUDJfSENBVF9SRVFVRVNUOworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fcmVxdWVzdF9oZWFkZXJzX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKKyAgfQorCisgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEKSB7CisgICAgZnJhbWUtPmhlYWRlcnMuY2F0ID0gTkdIVFRQMl9IQ0FUX1BVU0hfUkVTUE9OU0U7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9wdXNoX3Jlc3BvbnNlX2hlYWRlcnNfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKyAgfQorCisgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX09QRU5JTkcgJiYKKyAgICAgIG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICBmcmFtZS0+aGVhZGVycy5jYXQgPSBOR0hUVFAyX0hDQVRfUkVTUE9OU0U7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9yZXNwb25zZV9oZWFkZXJzX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lLCBzdHJlYW0pOworICB9CisKKyAgZnJhbWUtPmhlYWRlcnMuY2F0ID0gTkdIVFRQMl9IQ0FUX0hFQURFUlM7CisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25faGVhZGVyc19yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSwgc3RyZWFtKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9wcmlvcml0eV9yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFJJT1JJVFk6IHN0cmVhbV9pZCA9PSAwIik7CisgIH0KKworICBpZiAoZnJhbWUtPnByaW9yaXR5LnByaV9zcGVjLnN0cmVhbV9pZCA9PSBmcmFtZS0+aGQuc3RyZWFtX2lkKSB7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwgImRlcGVuZCBvbiBpdHNlbGYiKTsKKyAgfQorCisgIGlmICghc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgLyogUmUtcHJpb3JpdGl6YXRpb24gd29ya3Mgb25seSBpbiBzZXJ2ZXIgKi8KKyAgICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKworICBpZiAoIXN0cmVhbSkgeworICAgIC8qIFBSSU9SSVRZIGFnYWluc3QgaWRsZSBzdHJlYW0gY2FuIGNyZWF0ZSBhbmNob3Igbm9kZSBpbgorICAgICAgIGRlcGVuZGVuY3kgdHJlZS4gKi8KKyAgICBpZiAoIXNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQsIE5HSFRUUDJfU1RSRUFNX0ZMQUdfTk9ORSwKKyAgICAgICAgJmZyYW1lLT5wcmlvcml0eS5wcmlfc3BlYywgTkdIVFRQMl9TVFJFQU1fSURMRSwgTlVMTCk7CisKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oc2Vzc2lvbik7CisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9IGVsc2UgeworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3JlcHJpb3JpdGl6ZV9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lLT5wcmlvcml0eS5wcmlfc3BlYyk7CisKKyAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oc2Vzc2lvbik7CisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcm9jZXNzX3ByaW9yaXR5X2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfcHJpb3JpdHlfcGF5bG9hZCgmZnJhbWUtPnByaW9yaXR5LCBpZnJhbWUtPnNidWYucG9zKTsKKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX3ByaW9yaXR5X3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9yc3Rfc3RyZWFtX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU1RfU1RSRUFNOiBzdHJlYW1faWQgPT0gMCIpOworICB9CisKKyAgaWYgKHNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKSB7CisgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNUX1NUUkVBTTogc3RyZWFtIGluIGlkbGUiKTsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICBpZiAoc3RyZWFtKSB7CisgICAgLyogV2UgbWF5IHVzZSBzdHJlYW0tPnNodXRfZmxhZ3MgZm9yIHN0cmljdCBlcnJvciBjaGVja2luZy4gKi8KKyAgICBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihzdHJlYW0sIE5HSFRUUDJfU0hVVF9SRCk7CisgIH0KKworICBydiA9IHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnJzdF9zdHJlYW0uZXJyb3JfY29kZSk7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3NfcnN0X3N0cmVhbV9mcmFtZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpZnJhbWUtPmZyYW1lOworCisgIG5naHR0cDJfZnJhbWVfdW5wYWNrX3JzdF9zdHJlYW1fcGF5bG9hZCgmZnJhbWUtPnJzdF9zdHJlYW0sIGlmcmFtZS0+c2J1Zi5wb3MpOworCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fcnN0X3N0cmVhbV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3JlbW90ZV9pbml0aWFsX3dpbmRvd19zaXplX2Z1bmMobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3VwZGF0ZV93aW5kb3dfc2l6ZV9hcmcgKmFyZzsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBhcmcgPSAobmdodHRwMl91cGRhdGVfd2luZG93X3NpemVfYXJnICopcHRyOworICBzdHJlYW0gPSAobmdodHRwMl9zdHJlYW0gKillbnRyeTsKKworICBydiA9IG5naHR0cDJfc3RyZWFtX3VwZGF0ZV9yZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZSgKKyAgICAgIHN0cmVhbSwgYXJnLT5uZXdfd2luZG93X3NpemUsIGFyZy0+b2xkX3dpbmRvd19zaXplKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKGFyZy0+c2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUik7CisgIH0KKworICAvKiBJZiB3aW5kb3cgc2l6ZSBnZXRzIHBvc2l0aXZlLCBwdXNoIGRlZmVycmVkIERBVEEgZnJhbWUgdG8KKyAgICAgb3V0Ym91bmQgcXVldWUuICovCisgIGlmIChzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSA+IDAgJiYKKyAgICAgIG5naHR0cDJfc3RyZWFtX2NoZWNrX2RlZmVycmVkX2J5X2Zsb3dfY29udHJvbChzdHJlYW0pKSB7CisKKyAgICBydiA9IG5naHR0cDJfc3RyZWFtX3Jlc3VtZV9kZWZlcnJlZF9pdGVtKAorICAgICAgICBzdHJlYW0sIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfRkxPV19DT05UUk9MKTsKKworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyoKKyAqIFVwZGF0ZXMgdGhlIHJlbW90ZSBpbml0aWFsIHdpbmRvdyBzaXplIG9mIGFsbCBhY3RpdmUgc3RyZWFtcy4gIElmCisgKiBlcnJvciBvY2N1cnMsIGFsbCBzdHJlYW1zIG1heSBub3QgYmUgdXBkYXRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworc3RhdGljIGludAorc2Vzc2lvbl91cGRhdGVfcmVtb3RlX2luaXRpYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSkgeworICBuZ2h0dHAyX3VwZGF0ZV93aW5kb3dfc2l6ZV9hcmcgYXJnOworCisgIGFyZy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAgYXJnLm5ld193aW5kb3dfc2l6ZSA9IG5ld19pbml0aWFsX3dpbmRvd19zaXplOworICBhcmcub2xkX3dpbmRvd19zaXplID0gKGludDMyX3Qpc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmluaXRpYWxfd2luZG93X3NpemU7CisKKyAgcmV0dXJuIG5naHR0cDJfbWFwX2VhY2goJnNlc3Npb24tPnN0cmVhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9yZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZV9mdW5jLCAmYXJnKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfbG9jYWxfaW5pdGlhbF93aW5kb3dfc2l6ZV9mdW5jKG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3VwZGF0ZV93aW5kb3dfc2l6ZV9hcmcgKmFyZzsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgYXJnID0gKG5naHR0cDJfdXBkYXRlX3dpbmRvd19zaXplX2FyZyAqKXB0cjsKKyAgc3RyZWFtID0gKG5naHR0cDJfc3RyZWFtICopZW50cnk7CisgIHJ2ID0gbmdodHRwMl9zdHJlYW1fdXBkYXRlX2xvY2FsX2luaXRpYWxfd2luZG93X3NpemUoCisgICAgICBzdHJlYW0sIGFyZy0+bmV3X3dpbmRvd19zaXplLCBhcmctPm9sZF93aW5kb3dfc2l6ZSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbShhcmctPnNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9GTE9XX0NPTlRST0xfRVJST1IpOworICB9CisgIGlmICghKGFyZy0+c2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkgJiYKKyAgICAgIHN0cmVhbS0+d2luZG93X3VwZGF0ZV9xdWV1ZWQgPT0gMCAmJgorICAgICAgbmdodHRwMl9zaG91bGRfc2VuZF93aW5kb3dfdXBkYXRlKHN0cmVhbS0+bG9jYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplKSkgeworCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3dpbmRvd191cGRhdGUoYXJnLT5zZXNzaW9uLCBOR0hUVFAyX0ZMQUdfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplID0gMDsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoKKyAqIFVwZGF0ZXMgdGhlIGxvY2FsIGluaXRpYWwgd2luZG93IHNpemUgb2YgYWxsIGFjdGl2ZSBzdHJlYW1zLiAgSWYKKyAqIGVycm9yIG9jY3VycywgYWxsIHN0cmVhbXMgbWF5IG5vdCBiZSB1cGRhdGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50CitzZXNzaW9uX3VwZGF0ZV9sb2NhbF9pbml0aWFsX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBvbGRfaW5pdGlhbF93aW5kb3dfc2l6ZSkgeworICBuZ2h0dHAyX3VwZGF0ZV93aW5kb3dfc2l6ZV9hcmcgYXJnOworICBhcmcuc2Vzc2lvbiA9IHNlc3Npb247CisgIGFyZy5uZXdfd2luZG93X3NpemUgPSBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZTsKKyAgYXJnLm9sZF93aW5kb3dfc2l6ZSA9IG9sZF9pbml0aWFsX3dpbmRvd19zaXplOworICByZXR1cm4gbmdodHRwMl9tYXBfZWFjaCgmc2Vzc2lvbi0+c3RyZWFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX2xvY2FsX2luaXRpYWxfd2luZG93X3NpemVfZnVuYywgJmFyZyk7Cit9CisKKy8qCisgKiBBcHBseSBTRVRUSU5HUyB2YWx1ZXMgfGl2fCBoYXZpbmcgfG5pdnwgZWxlbWVudHMgdG8gdGhlIGxvY2FsCisgKiBzZXR0aW5ncy4gIFdlIGFzc3VtZXMgdGhhdCBhbGwgdmFsdWVzIGluIHxpdnwgaXMgY29ycmVjdCwgc2luY2Ugd2UKKyAqIHZhbGlkYXRlZCB0aGVtIGluIG5naHR0cDJfc2Vzc2lvbl9hZGRfc2V0dGluZ3MoKSBhbHJlYWR5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAKKyAqICAgICBUaGUgaGVhZGVyIHRhYmxlIHNpemUgaXMgb3V0IG9mIHJhbmdlCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl91cGRhdGVfbG9jYWxfc2V0dGluZ3MobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml2KSB7CisgIGludCBydjsKKyAgc2l6ZV90IGk7CisgIGludDMyX3QgbmV3X2luaXRpYWxfd2luZG93X3NpemUgPSAtMTsKKyAgdWludDMyX3QgaGVhZGVyX3RhYmxlX3NpemUgPSAwOworICB1aW50MzJfdCBtaW5faGVhZGVyX3RhYmxlX3NpemUgPSBVSU5UMzJfTUFYOworICB1aW50OF90IGhlYWRlcl90YWJsZV9zaXplX3NlZW4gPSAwOworICAvKiBGb3IgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFLCB1c2UgdGhlIHZhbHVlIGxhc3QKKyAgICAgc2Vlbi4gIEZvciBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFLCB1c2UgYm90aCBtaW5pbXVtCisgICAgIHZhbHVlIGFuZCBsYXN0IHNlZW4gdmFsdWUuICovCisgIGZvciAoaSA9IDA7IGkgPCBuaXY7ICsraSkgeworICAgIHN3aXRjaCAoaXZbaV0uc2V0dGluZ3NfaWQpIHsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkU6CisgICAgICBoZWFkZXJfdGFibGVfc2l6ZV9zZWVuID0gMTsKKyAgICAgIGhlYWRlcl90YWJsZV9zaXplID0gaXZbaV0udmFsdWU7CisgICAgICBtaW5faGVhZGVyX3RhYmxlX3NpemUgPSBuZ2h0dHAyX21pbihtaW5faGVhZGVyX3RhYmxlX3NpemUsIGl2W2ldLnZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOgorICAgICAgbmV3X2luaXRpYWxfd2luZG93X3NpemUgPSAoaW50MzJfdClpdltpXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAoaGVhZGVyX3RhYmxlX3NpemVfc2VlbikgeworICAgIGlmIChtaW5faGVhZGVyX3RhYmxlX3NpemUgPCBoZWFkZXJfdGFibGVfc2l6ZSkgeworICAgICAgcnYgPSBuZ2h0dHAyX2hkX2luZmxhdGVfY2hhbmdlX3RhYmxlX3NpemUoJnNlc3Npb24tPmhkX2luZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2hlYWRlcl90YWJsZV9zaXplKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfaGRfaW5mbGF0ZV9jaGFuZ2VfdGFibGVfc2l6ZSgmc2Vzc2lvbi0+aGRfaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX3RhYmxlX3NpemUpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisgIGlmIChuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSAhPSAtMSkgeworICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfbG9jYWxfaW5pdGlhbF93aW5kb3dfc2l6ZSgKKyAgICAgICAgc2Vzc2lvbiwgbmV3X2luaXRpYWxfd2luZG93X3NpemUsCisgICAgICAgIChpbnQzMl90KXNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmluaXRpYWxfd2luZG93X3NpemUpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgZm9yIChpID0gMDsgaSA8IG5pdjsgKytpKSB7CisgICAgc3dpdGNoIChpdltpXS5zZXR0aW5nc19pZCkgeworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRToKKyAgICAgIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmhlYWRlcl90YWJsZV9zaXplID0gaXZbaV0udmFsdWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX1BVU0g6CisgICAgICBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5lbmFibGVfcHVzaCA9IGl2W2ldLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVM6CisgICAgICBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zID0gaXZbaV0udmFsdWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfSU5JVElBTF9XSU5ET1dfU0laRToKKyAgICAgIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmluaXRpYWxfd2luZG93X3NpemUgPSBpdltpXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfRlJBTUVfU0laRToKKyAgICAgIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9mcmFtZV9zaXplID0gaXZbaV0udmFsdWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0hFQURFUl9MSVNUX1NJWkU6CisgICAgICBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5tYXhfaGVhZGVyX2xpc3Rfc2l6ZSA9IGl2W2ldLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MOgorICAgICAgc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MuZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2wgPSBpdltpXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3NldHRpbmdzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsIGludCBub2FjaykgeworICBpbnQgcnY7CisgIHNpemVfdCBpOworICBuZ2h0dHAyX21lbSAqbWVtOworICBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICpzZXR0aW5nczsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkICE9IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVRUSU5HUzogc3RyZWFtX2lkICE9IDAiKTsKKyAgfQorICBpZiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0FDSykgeworICAgIGlmIChmcmFtZS0+c2V0dGluZ3Mubml2ICE9IDApIHsKKyAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1IsCisgICAgICAgICAgIlNFVFRJTkdTOiBBQ0sgYW5kIHBheWxvYWQgIT0gMCIpOworICAgIH0KKworICAgIHNldHRpbmdzID0gc2Vzc2lvbi0+aW5mbGlnaHRfc2V0dGluZ3NfaGVhZDsKKworICAgIGlmICghc2V0dGluZ3MpIHsKKyAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLCAiU0VUVElOR1M6IHVuZXhwZWN0ZWQgQUNLIik7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdXBkYXRlX2xvY2FsX3NldHRpbmdzKHNlc3Npb24sIHNldHRpbmdzLT5pdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MtPm5pdik7CisKKyAgICBzZXNzaW9uLT5pbmZsaWdodF9zZXR0aW5nc19oZWFkID0gc2V0dGluZ3MtPm5leHQ7CisKKyAgICBpbmZsaWdodF9zZXR0aW5nc19kZWwoc2V0dGluZ3MsIG1lbSk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsIHJ2LCBOVUxMKTsKKyAgICB9CisgICAgcmV0dXJuIHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7CisgIH0KKworICBpZiAoIXNlc3Npb24tPnJlbW90ZV9zZXR0aW5nc19yZWNlaXZlZCkgeworICAgIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zID0KKyAgICAgICAgTkdIVFRQMl9ERUZBVUxUX01BWF9DT05DVVJSRU5UX1NUUkVBTVM7CisgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzX3JlY2VpdmVkID0gMTsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBmcmFtZS0+c2V0dGluZ3Mubml2OyArK2kpIHsKKyAgICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICplbnRyeSA9ICZmcmFtZS0+c2V0dGluZ3MuaXZbaV07CisKKyAgICBzd2l0Y2ggKGVudHJ5LT5zZXR0aW5nc19pZCkgeworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRToKKworICAgICAgcnYgPSBuZ2h0dHAyX2hkX2RlZmxhdGVfY2hhbmdlX3RhYmxlX3NpemUoJnNlc3Npb24tPmhkX2RlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnZhbHVlKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAsIE5VTEwpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5oZWFkZXJfdGFibGVfc2l6ZSA9IGVudHJ5LT52YWx1ZTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9QVVNIOgorCisgICAgICBpZiAoZW50cnktPnZhbHVlICE9IDAgJiYgZW50cnktPnZhbHVlICE9IDEpIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICJTRVRUSU5HUzogaW52YWxpZCBTRVRUSU5HU19FTkJMRV9QVVNIIik7CisgICAgICB9CisKKyAgICAgIGlmICghc2Vzc2lvbi0+c2VydmVyICYmIGVudHJ5LT52YWx1ZSAhPSAwKSB7CisgICAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICAgICAiU0VUVElOR1M6IHNlcnZlciBhdHRlbXB0ZWQgdG8gZW5hYmxlIHB1c2giKTsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmVuYWJsZV9wdXNoID0gZW50cnktPnZhbHVlOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzoKKworICAgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPSBlbnRyeS0+dmFsdWU7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOgorCisgICAgICAvKiBVcGRhdGUgdGhlIGluaXRpYWwgd2luZG93IHNpemUgb2YgdGhlIGFsbCBhY3RpdmUgc3RyZWFtcyAqLworICAgICAgLyogQ2hlY2sgdGhhdCBpbml0aWFsX3dpbmRvd19zaXplIDwgKDF1IDw8IDMxKSAqLworICAgICAgaWYgKGVudHJ5LT52YWx1ZSA+IE5HSFRUUDJfTUFYX1dJTkRPV19TSVpFKSB7CisgICAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MLAorICAgICAgICAgICAgIlNFVFRJTkdTOiB0b28gbGFyZ2UgU0VUVElOR1NfSU5JVElBTF9XSU5ET1dfU0laRSIpOworICAgICAgfQorCisgICAgICBydiA9IHNlc3Npb25fdXBkYXRlX3JlbW90ZV9pbml0aWFsX3dpbmRvd19zaXplKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQzMl90KWVudHJ5LT52YWx1ZSk7CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MLCBOVUxMKTsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmluaXRpYWxfd2luZG93X3NpemUgPSBlbnRyeS0+dmFsdWU7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfRlJBTUVfU0laRToKKworICAgICAgaWYgKGVudHJ5LT52YWx1ZSA8IE5HSFRUUDJfTUFYX0ZSQU1FX1NJWkVfTUlOIHx8CisgICAgICAgICAgZW50cnktPnZhbHVlID4gTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NQVgpIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICJTRVRUSU5HUzogaW52YWxpZCBTRVRUSU5HU19NQVhfRlJBTUVfU0laRSIpOworICAgICAgfQorCisgICAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2ZyYW1lX3NpemUgPSBlbnRyeS0+dmFsdWU7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfSEVBREVSX0xJU1RfU0laRToKKworICAgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLm1heF9oZWFkZXJfbGlzdF9zaXplID0gZW50cnktPnZhbHVlOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX0NPTk5FQ1RfUFJPVE9DT0w6CisKKyAgICAgIGlmIChlbnRyeS0+dmFsdWUgIT0gMCAmJiBlbnRyeS0+dmFsdWUgIT0gMSkgeworICAgICAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgIlNFVFRJTkdTOiBpbnZhbGlkIFNFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MIik7CisgICAgICB9CisKKyAgICAgIGlmICghc2Vzc2lvbi0+c2VydmVyICYmCisgICAgICAgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmVuYWJsZV9jb25uZWN0X3Byb3RvY29sICYmCisgICAgICAgICAgZW50cnktPnZhbHVlID09IDApIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICJTRVRUSU5HUzogc2VydmVyIGF0dGVtcHRlZCB0byBkaXNhYmxlICIKKyAgICAgICAgICAgICJTRVRUSU5HU19FTkFCTEVfQ09OTkVDVF9QUk9UT0NPTCIpOworICAgICAgfQorCisgICAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2wgPSBlbnRyeS0+dmFsdWU7CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmICghbm9hY2sgJiYgIXNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKSkgeworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9zZXR0aW5ncyhzZXNzaW9uLCBOR0hUVFAyX0ZMQUdfQUNLLCBOVUxMLCAwKTsKKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0VSUl9JTlRFUk5BTCwgTlVMTCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcm9jZXNzX3NldHRpbmdzX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisgIHNpemVfdCBpOworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5IG1pbl9oZWFkZXJfc2l6ZV9lbnRyeTsKKworICBpZiAoaWZyYW1lLT5tYXhfbml2KSB7CisgICAgbWluX2hlYWRlcl9zaXplX2VudHJ5ID0gaWZyYW1lLT5pdltpZnJhbWUtPm1heF9uaXYgLSAxXTsKKworICAgIGlmIChtaW5faGVhZGVyX3NpemVfZW50cnkudmFsdWUgPCBVSU5UMzJfTUFYKSB7CisgICAgICAvKiBJZiB3ZSBoYXZlIGxlc3MgdmFsdWUsIHRoZW4gd2UgbXVzdCBoYXZlCisgICAgICAgICBTRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRSBpbiBpIDwgaWZyYW1lLT5uaXYgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBpZnJhbWUtPm5pdjsgKytpKSB7CisgICAgICAgIGlmIChpZnJhbWUtPml2W2ldLnNldHRpbmdzX2lkID09IE5HSFRUUDJfU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkUpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBhc3NlcnQoaSA8IGlmcmFtZS0+bml2KTsKKworICAgICAgaWYgKG1pbl9oZWFkZXJfc2l6ZV9lbnRyeS52YWx1ZSAhPSBpZnJhbWUtPml2W2ldLnZhbHVlKSB7CisgICAgICAgIGlmcmFtZS0+aXZbaWZyYW1lLT5uaXYrK10gPSBpZnJhbWUtPml2W2ldOworICAgICAgICBpZnJhbWUtPml2W2ldID0gbWluX2hlYWRlcl9zaXplX2VudHJ5OworICAgICAgfQorICAgIH0KKyAgfQorCisgIG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX3BheWxvYWQoJmZyYW1lLT5zZXR0aW5ncywgaWZyYW1lLT5pdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUtPm5pdik7CisKKyAgaWZyYW1lLT5pdiA9IE5VTEw7CisgIGlmcmFtZS0+bml2ID0gMDsKKyAgaWZyYW1lLT5tYXhfbml2ID0gMDsKKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX3NldHRpbmdzX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lLCAwIC8qIEFDSyAqLyk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcHVzaF9wcm9taXNlX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgbmdodHRwMl9zdHJlYW0gKnByb21pc2VkX3N0cmVhbTsKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjIHByaV9zcGVjOworCisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywgIlBVU0hfUFJPTUlTRTogc3RyZWFtX2lkID09IDAiKTsKKyAgfQorICBpZiAoc2Vzc2lvbi0+c2VydmVyIHx8IHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmVuYWJsZV9wdXNoID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywgIlBVU0hfUFJPTUlTRTogcHVzaCBkaXNhYmxlZCIpOworICB9CisKKyAgaWYgKCFuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sICJQVVNIX1BST01JU0U6IGludmFsaWQgc3RyZWFtX2lkIik7CisgIH0KKworICBpZiAoIXNlc3Npb25fYWxsb3dfaW5jb21pbmdfbmV3X3N0cmVhbShzZXNzaW9uKSkgeworICAgIC8qIFdlIGp1c3QgZGlzY2FyZCBQVVNIX1BST01JU0UgYWZ0ZXIgR09BV0FZIHdhcyBzZW50ICovCisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7CisgIH0KKworICBpZiAoIXNlc3Npb25faXNfbmV3X3BlZXJfc3RyZWFtX2lkKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQpKSB7CisgICAgLyogVGhlIHNwZWMgc2F5cyBpZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIFBVU0hfUFJPTUlTRSB3aXRoCisgICAgICAgaWxsZWdhbCBzdHJlYW0gSUQgaXMgc3ViamVjdCB0byBhIGNvbm5lY3Rpb24gZXJyb3Igb2YgdHlwZQorICAgICAgIFBST1RPQ09MX0VSUk9SLiAqLworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAiUFVTSF9QUk9NSVNFOiBpbnZhbGlkIHByb21pc2VkX3N0cmVhbV9pZCIpOworICB9CisKKyAgaWYgKHNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sICJQVVNIX1BST01JU0U6IHN0cmVhbSBpbiBpZGxlIik7CisgIH0KKworICBzZXNzaW9uLT5sYXN0X3JlY3Zfc3RyZWFtX2lkID0gZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQ7CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICBpZiAoIXN0cmVhbSB8fCBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcgfHwKKyAgICAgICFzZXNzaW9uLT5wZW5kaW5nX2VuYWJsZV9wdXNoIHx8CisgICAgICBzZXNzaW9uLT5udW1faW5jb21pbmdfcmVzZXJ2ZWRfc3RyZWFtcyA+PQorICAgICAgICAgIHNlc3Npb24tPm1heF9pbmNvbWluZ19yZXNlcnZlZF9zdHJlYW1zKSB7CisgICAgLyogQ3VycmVudGx5LCBjbGllbnQgZG9lcyBub3QgcmV0YWluIGNsb3NlZCBzdHJlYW0sIHNvIHdlIGRvbid0CisgICAgICAgY2hlY2sgTkdIVFRQMl9TSFVUX1JEIGNvbmRpdGlvbiBoZXJlLiAqLworCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLT5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkLCBOR0hUVFAyX0NBTkNFTCk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7CisgIH0KKworICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRCwKKyAgICAgICAgIlBVU0hfUFJPTUlTRTogc3RyZWFtIGNsb3NlZCIpOworICB9CisKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjX2luaXQoJnByaV9zcGVjLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9ERUZBVUxUX1dFSUdIVCwgMCk7CisKKyAgcHJvbWlzZWRfc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX29wZW5fc3RyZWFtKAorICAgICAgc2Vzc2lvbiwgZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQsIE5HSFRUUDJfU1RSRUFNX0ZMQUdfTk9ORSwKKyAgICAgICZwcmlfc3BlYywgTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQsIE5VTEwpOworCisgIGlmICghcHJvbWlzZWRfc3RyZWFtKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgLyogV2UgZG9uJ3QgY2FsbCBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2Nsb3NlZF9zdHJlYW0oKSwgc2luY2Ugd2UKKyAgICAgZG9uJ3Qga2VlcCBjbG9zZWQgc3RyZWFtIGluIGNsaWVudCBzaWRlICovCisKKyAgc2Vzc2lvbi0+bGFzdF9wcm9jX3N0cmVhbV9pZCA9IHNlc3Npb24tPmxhc3RfcmVjdl9zdHJlYW1faWQ7CisgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2JlZ2luX2hlYWRlcnMoc2Vzc2lvbiwgZnJhbWUpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3NfcHVzaF9wcm9taXNlX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKworICBydiA9IG5naHR0cDJfZnJhbWVfdW5wYWNrX3B1c2hfcHJvbWlzZV9wYXlsb2FkKCZmcmFtZS0+cHVzaF9wcm9taXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+c2J1Zi5wb3MpOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwgIlBVU0hfUFJPTUlTRTogY291bGQgbm90IHVucGFjayIpOworICB9CisKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9wdXNoX3Byb21pc2VfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3BpbmdfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydiA9IDA7CisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkICE9IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQSU5HOiBzdHJlYW1faWQgIT0gMCIpOworICB9CisgIGlmICgoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fUElOR19BQ0spID09IDAgJiYKKyAgICAgIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSA9PSAwICYmCisgICAgICAhc2Vzc2lvbl9pc19jbG9zaW5nKHNlc3Npb24pKSB7CisgICAgLyogUGVlciBzZW50IHBpbmcsIHNvIHBpbmcgaXQgYmFjayAqLworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9waW5nKHNlc3Npb24sIE5HSFRUUDJfRkxBR19BQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnBpbmcub3BhcXVlX2RhdGEpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisgIHJldHVybiBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fcHJvY2Vzc19waW5nX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfcGluZ19wYXlsb2FkKCZmcmFtZS0+cGluZywgaWZyYW1lLT5zYnVmLnBvcyk7CisKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9waW5nX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9nb2F3YXlfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2OworCisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkICE9IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHT0FXQVk6IHN0cmVhbV9pZCAhPSAwIik7CisgIH0KKyAgLyogU3BlYyBzYXlzIEVuZHBvaW50cyBNVVNUIE5PVCBpbmNyZWFzZSB0aGUgdmFsdWUgdGhleSBzZW5kIGluIHRoZQorICAgICBsYXN0IHN0cmVhbSBpZGVudGlmaWVyLiAqLworICBpZiAoKGZyYW1lLT5nb2F3YXkubGFzdF9zdHJlYW1faWQgPiAwICYmCisgICAgICAgIW5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+Z29hd2F5Lmxhc3Rfc3RyZWFtX2lkKSkgfHwKKyAgICAgIHNlc3Npb24tPnJlbW90ZV9sYXN0X3N0cmVhbV9pZCA8IGZyYW1lLT5nb2F3YXkubGFzdF9zdHJlYW1faWQpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHT0FXQVk6IGludmFsaWQgbGFzdF9zdHJlYW1faWQiKTsKKyAgfQorCisgIHNlc3Npb24tPmdvYXdheV9mbGFncyB8PSBOR0hUVFAyX0dPQVdBWV9SRUNWOworCisgIHNlc3Npb24tPnJlbW90ZV9sYXN0X3N0cmVhbV9pZCA9IGZyYW1lLT5nb2F3YXkubGFzdF9zdHJlYW1faWQ7CisKKyAgcnYgPSBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworCisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiBzZXNzaW9uX2Nsb3NlX3N0cmVhbV9vbl9nb2F3YXkoc2Vzc2lvbiwgZnJhbWUtPmdvYXdheS5sYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3NfZ29hd2F5X2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfZ29hd2F5X3BheWxvYWQoJmZyYW1lLT5nb2F3YXksIGlmcmFtZS0+c2J1Zi5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+bGJ1Zi5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfYnVmX2xlbigmaWZyYW1lLT5sYnVmKSk7CisKKyAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZpZnJhbWUtPmxidWYsIE5VTEwsIDApOworCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fZ29hd2F5X3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludAorc2Vzc2lvbl9vbl9jb25uZWN0aW9uX3dpbmRvd191cGRhdGVfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgLyogSGFuZGxlIGNvbm5lY3Rpb24tbGV2ZWwgZmxvdyBjb250cm9sICovCisgIGlmIChmcmFtZS0+d2luZG93X3VwZGF0ZS53aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgIldJTkRPV19VUERBVEU6IHdpbmRvd19zaXplX2luY3JlbWVudCA9PSAwIik7CisgIH0KKworICBpZiAoTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUgLSBmcmFtZS0+d2luZG93X3VwZGF0ZS53aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPAorICAgICAgc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplKSB7CisgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTCwgTlVMTCk7CisgIH0KKyAgc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplICs9IGZyYW1lLT53aW5kb3dfdXBkYXRlLndpbmRvd19zaXplX2luY3JlbWVudDsKKworICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX29uX3N0cmVhbV93aW5kb3dfdXBkYXRlX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgaWYgKHNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpKSB7CisgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0lORE9XX1VQREFURSB0byBpZGxlIHN0cmVhbSIpOworICB9CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgIGlmICghc3RyZWFtKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKHN0YXRlX3Jlc2VydmVkX3JlbW90ZShzZXNzaW9uLCBzdHJlYW0pKSB7CisgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLCAiV0lORE9XX1VQQURBVEUgdG8gcmVzZXJ2ZWQgc3RyZWFtIik7CisgIH0KKyAgaWYgKGZyYW1lLT53aW5kb3dfdXBkYXRlLndpbmRvd19zaXplX2luY3JlbWVudCA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAiV0lORE9XX1VQREFURTogd2luZG93X3NpemVfaW5jcmVtZW50ID09IDAiKTsKKyAgfQorICBpZiAoTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUgLSBmcmFtZS0+d2luZG93X3VwZGF0ZS53aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPAorICAgICAgc3RyZWFtLT5yZW1vdGVfd2luZG93X3NpemUpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTCk7CisgIH0KKyAgc3RyZWFtLT5yZW1vdGVfd2luZG93X3NpemUgKz0gZnJhbWUtPndpbmRvd191cGRhdGUud2luZG93X3NpemVfaW5jcmVtZW50OworCisgIGlmIChzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSA+IDAgJiYKKyAgICAgIG5naHR0cDJfc3RyZWFtX2NoZWNrX2RlZmVycmVkX2J5X2Zsb3dfY29udHJvbChzdHJlYW0pKSB7CisKKyAgICBydiA9IG5naHR0cDJfc3RyZWFtX3Jlc3VtZV9kZWZlcnJlZF9pdGVtKAorICAgICAgICBzdHJlYW0sIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfRkxPV19DT05UUk9MKTsKKworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl93aW5kb3dfdXBkYXRlX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25fb25fY29ubmVjdGlvbl93aW5kb3dfdXBkYXRlX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9vbl9zdHJlYW1fd2luZG93X3VwZGF0ZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7CisgIH0KK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3Nfd2luZG93X3VwZGF0ZV9mcmFtZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpZnJhbWUtPmZyYW1lOworCisgIG5naHR0cDJfZnJhbWVfdW5wYWNrX3dpbmRvd191cGRhdGVfcGF5bG9hZCgmZnJhbWUtPndpbmRvd191cGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUtPnNidWYucG9zKTsKKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX3dpbmRvd191cGRhdGVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX2FsdHN2Y19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBuZ2h0dHAyX2V4dF9hbHRzdmMgKmFsdHN2YzsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBhbHRzdmMgPSBmcmFtZS0+ZXh0LnBheWxvYWQ7CisKKyAgLyogc2Vzc2lvbi0+c2VydmVyIGNhc2UgaGFzIGJlZW4gZXhjbHVkZWQgKi8KKworICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgaWYgKGFsdHN2Yy0+b3JpZ2luX2xlbiA9PSAwKSB7CisgICAgICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjayhzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRVJSX1BST1RPKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKGFsdHN2Yy0+b3JpZ2luX2xlbiA+IDApIHsKKyAgICAgIHJldHVybiBzZXNzaW9uX2NhbGxfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9FUlJfUFJPVE8pOworICAgIH0KKworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICAgIGlmICghc3RyZWFtKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBpZiAoYWx0c3ZjLT5maWVsZF92YWx1ZV9sZW4gPT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2NhbGxfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRVJSX1BST1RPKTsKKyAgfQorCisgIHJldHVybiBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX29yaWdpbl9yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3NfYWx0c3ZjX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfYWx0c3ZjX3BheWxvYWQoCisgICAgICAmZnJhbWUtPmV4dCwgbmdodHRwMl9nZXRfdWludDE2KGlmcmFtZS0+c2J1Zi5wb3MpLCBpZnJhbWUtPmxidWYucG9zLAorICAgICAgbmdodHRwMl9idWZfbGVuKCZpZnJhbWUtPmxidWYpKTsKKworICAvKiBuZ2h0dHAyX2ZyYW1lX3VucGFja19hbHRzdmNfcGF5bG9hZCBzdGVhbHMgYnVmZmVyIGZyb20KKyAgICAgaWZyYW1lLT5sYnVmICovCisgIG5naHR0cDJfYnVmX3dyYXBfaW5pdCgmaWZyYW1lLT5sYnVmLCBOVUxMLCAwKTsKKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX2FsdHN2Y19yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcm9jZXNzX29yaWdpbl9mcmFtZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpZnJhbWUtPmZyYW1lOworICBuZ2h0dHAyX21lbSAqbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgaW50IHJ2OworCisgIHJ2ID0gbmdodHRwMl9mcmFtZV91bnBhY2tfb3JpZ2luX3BheWxvYWQoJmZyYW1lLT5leHQsIGlmcmFtZS0+bGJ1Zi5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9idWZfbGVuKCZpZnJhbWUtPmxidWYpLCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICAvKiBJZ25vcmUgT1JJR0lOIGZyYW1lIHdoaWNoIGNhbm5vdCBiZSBwYXJzZWQuICovCisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX29yaWdpbl9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcm9jZXNzX2V4dGVuc2lvbl9mcmFtZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgcnYgPSBzZXNzaW9uX2NhbGxfdW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayhzZXNzaW9uKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgLyogVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHJ2ID09IE5HSFRUUDJfRVJSX0NBTkNFTCBhcyB3ZWxsICovCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9kYXRhX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpbnQgcnYgPSAwOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIC8qIFdlIGRvbid0IGNhbGwgb25fZnJhbWVfcmVjdl9jYWxsYmFjayBpZiBzdHJlYW0gaGFzIGJlZW4gY2xvc2VkCisgICAgIGFscmVhZHkgb3IgYmVpbmcgY2xvc2VkLiAqLworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgaWYgKCFzdHJlYW0gfHwgc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgLyogVGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBzdHJlYW0gZXJyb3IsIGJ1dCBpdCByZXN1bHRzIGluIGxvdHMKKyAgICAgICBvZiBSU1RfU1RSRUFNLiBTbyBqdXN0IGlnbm9yZSBmcmFtZSBhZ2FpbnN0IG5vbmV4aXN0ZW50IHN0cmVhbQorICAgICAgIGZvciBub3cuICovCisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoc2Vzc2lvbl9lbmZvcmNlX2h0dHBfbWVzc2FnaW5nKHNlc3Npb24pICYmCisgICAgICAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pKSB7CisgICAgaWYgKG5naHR0cDJfaHR0cF9vbl9yZW1vdGVfZW5kX3N0cmVhbShzdHJlYW0pICE9IDApIHsKKyAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKHNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUik7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihzdHJlYW0sIE5HSFRUUDJfU0hVVF9SRCk7CisgICAgICAvKiBEb24ndCBjYWxsIG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW1faWZfc2h1dF9yZHdyIGJlY2F1c2UKKyAgICAgICAgIFJTVF9TVFJFQU0gaGFzIGJlZW4gc3VibWl0dGVkLiAqLworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgcnYgPSBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBpZiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pIHsKKyAgICBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihzdHJlYW0sIE5HSFRUUDJfU0hVVF9SRCk7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtX2lmX3NodXRfcmR3cihzZXNzaW9uLCBzdHJlYW0pOworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogRm9yIGVycm9ycywgdGhpcyBmdW5jdGlvbiBvbmx5IHJldHVybnMgRkFUQUwgZXJyb3IuICovCitzdGF0aWMgaW50IHNlc3Npb25fcHJvY2Vzc19kYXRhX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfZnJhbWUgKnB1YmxpY19kYXRhX2ZyYW1lID0gJnNlc3Npb24tPmlmcmFtZS5mcmFtZTsKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fb25fZGF0YV9yZWNlaXZlZChzZXNzaW9uLCBwdWJsaWNfZGF0YV9mcmFtZSk7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoKKyAqIE5vdyB3ZSBoYXZlIFNFVFRJTkdTIHN5bmNocm9uaXphdGlvbiwgZmxvdyBjb250cm9sIGVycm9yIGNhbiBiZQorICogZGV0ZWN0ZWQgc3RyaWN0bHkuIElmIERBVEEgZnJhbWUgaXMgcmVjZWl2ZWQgd2l0aCBsZW5ndGggPiAwIGFuZAorICogY3VycmVudCByZWNlaXZlZCB3aW5kb3cgc2l6ZSArIGRlbHRhIGxlbmd0aCBpcyBzdHJpY3RseSBsYXJnZXIgdGhhbgorICogbG9jYWwgd2luZG93IHNpemUsIGl0IGlzIHN1YmplY3QgdG8gRkxPV19DT05UUk9MX0VSUk9SLCBzbyByZXR1cm4KKyAqIC0xLiBOb3RlIHRoYXQgbG9jYWxfd2luZG93X3NpemUgaXMgY2FsY3VsYXRlZCBhZnRlciBTRVRUSU5HUyBBQ0sgaXMKKyAqIHJlY2VpdmVkIGZyb20gcGVlciwgc28gcGVlciBtdXN0IGhvbm9yIHRoaXMgbGltaXQuIElmIHRoZSByZXN1bHRpbmcKKyAqIHJlY3Zfd2luZG93X3NpemUgaXMgc3RyaWN0bHkgbGFyZ2VyIHRoYW4gTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUsCisgKiByZXR1cm4gLTEgdG9vLgorICovCitzdGF0aWMgaW50IGFkanVzdF9yZWN2X3dpbmRvd19zaXplKGludDMyX3QgKnJlY3Zfd2luZG93X3NpemVfcHRyLCBzaXplX3QgZGVsdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbG9jYWxfd2luZG93X3NpemUpIHsKKyAgaWYgKCpyZWN2X3dpbmRvd19zaXplX3B0ciA+IGxvY2FsX3dpbmRvd19zaXplIC0gKGludDMyX3QpZGVsdGEgfHwKKyAgICAgICpyZWN2X3dpbmRvd19zaXplX3B0ciA+IE5HSFRUUDJfTUFYX1dJTkRPV19TSVpFIC0gKGludDMyX3QpZGVsdGEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgKnJlY3Zfd2luZG93X3NpemVfcHRyICs9IChpbnQzMl90KWRlbHRhOworICByZXR1cm4gMDsKK30KKworLyoKKyAqIEFjY3VtdWxhdGVzIHJlY2VpdmVkIGJ5dGVzIHxkZWx0YV9zaXplfCBmb3Igc3RyZWFtLWxldmVsIGZsb3cKKyAqIGNvbnRyb2wgYW5kIGRlY2lkZXMgd2hldGhlciB0byBzZW5kIFdJTkRPV19VUERBVEUgdG8gdGhhdCBzdHJlYW0uCisgKiBJZiBOR0hUVFAyX09QVF9OT19BVVRPX1dJTkRPV19VUERBVEUgaXMgc2V0LCBXSU5ET1dfVVBEQVRFIHdpbGwgbm90CisgKiBiZSBzZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50IHNlc3Npb25fdXBkYXRlX3JlY3Zfc3RyZWFtX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZW5kX3dpbmRvd191cGRhdGUpIHsKKyAgaW50IHJ2OworICBydiA9IGFkanVzdF9yZWN2X3dpbmRvd19zaXplKCZzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUsIGRlbHRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SKTsKKyAgfQorICAvKiBXZSBkb24ndCBoYXZlIHRvIHNlbmQgV0lORE9XX1VQREFURSBpZiB0aGUgZGF0YSByZWNlaXZlZCBpcyB0aGUKKyAgICAgbGFzdCBjaHVuayBpbiB0aGUgaW5jb21pbmcgc3RyZWFtLiAqLworICAvKiBXZSBoYXZlIHRvIHVzZSBsb2NhbF9zZXR0aW5ncyBoZXJlIGJlY2F1c2UgaXQgaXMgdGhlIGNvbnN0cmFpbnQKKyAgICAgdGhlIHJlbW90ZSBlbmRwb2ludCBzaG91bGQgaG9ub3IuICovCisgIGlmIChzZW5kX3dpbmRvd191cGRhdGUgJiYKKyAgICAgICEoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkgJiYKKyAgICAgIHN0cmVhbS0+d2luZG93X3VwZGF0ZV9xdWV1ZWQgPT0gMCAmJgorICAgICAgbmdodHRwMl9zaG91bGRfc2VuZF93aW5kb3dfdXBkYXRlKHN0cmVhbS0+bG9jYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplKSkgeworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF93aW5kb3dfdXBkYXRlKHNlc3Npb24sIE5HSFRUUDJfRkxBR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUgPSAwOworICB9CisgIHJldHVybiAwOworfQorCisvKgorICogQWNjdW11bGF0ZXMgcmVjZWl2ZWQgYnl0ZXMgfGRlbHRhX3NpemV8IGZvciBjb25uZWN0aW9uLWxldmVsIGZsb3cKKyAqIGNvbnRyb2wgYW5kIGRlY2lkZXMgd2hldGhlciB0byBzZW5kIFdJTkRPV19VUERBVEUgdG8gdGhlCisgKiBjb25uZWN0aW9uLiAgSWYgTkdIVFRQMl9PUFRfTk9fQVVUT19XSU5ET1dfVVBEQVRFIGlzIHNldCwKKyAqIFdJTkRPV19VUERBVEUgd2lsbCBub3QgYmUgc2VudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX3VwZGF0ZV9yZWN2X2Nvbm5lY3Rpb25fd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhX3NpemUpIHsKKyAgaW50IHJ2OworICBydiA9IGFkanVzdF9yZWN2X3dpbmRvd19zaXplKCZzZXNzaW9uLT5yZWN2X3dpbmRvd19zaXplLCBkZWx0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPmxvY2FsX3dpbmRvd19zaXplKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUik7CisgIH0KKyAgaWYgKCEoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkgJiYKKyAgICAgIHNlc3Npb24tPndpbmRvd191cGRhdGVfcXVldWVkID09IDAgJiYKKyAgICAgIG5naHR0cDJfc2hvdWxkX3NlbmRfd2luZG93X3VwZGF0ZShzZXNzaW9uLT5sb2NhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5yZWN2X3dpbmRvd19zaXplKSkgeworICAgIC8qIFVzZSBzdHJlYW0gSUQgMCB0byB1cGRhdGUgY29ubmVjdGlvbi1sZXZlbCBmbG93IGNvbnRyb2wKKyAgICAgICB3aW5kb3cgKi8KKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfd2luZG93X3VwZGF0ZShzZXNzaW9uLCBOR0hUVFAyX0ZMQUdfTk9ORSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5yZWN2X3dpbmRvd19zaXplKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIHNlc3Npb24tPnJlY3Zfd2luZG93X3NpemUgPSAwOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fdXBkYXRlX2NvbnN1bWVkX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKmNvbnN1bWVkX3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnJlY3Zfd2luZG93X3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgd2luZG93X3VwZGF0ZV9xdWV1ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIHNpemVfdCBkZWx0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbG9jYWxfd2luZG93X3NpemUpIHsKKyAgaW50MzJfdCByZWN2X3NpemU7CisgIGludCBydjsKKworICBpZiAoKHNpemVfdCkqY29uc3VtZWRfc2l6ZV9wdHIgPiBOR0hUVFAyX01BWF9XSU5ET1dfU0laRSAtIGRlbHRhX3NpemUpIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUik7CisgIH0KKworICAqY29uc3VtZWRfc2l6ZV9wdHIgKz0gKGludDMyX3QpZGVsdGFfc2l6ZTsKKworICBpZiAod2luZG93X3VwZGF0ZV9xdWV1ZWQgPT0gMCkgeworICAgIC8qIHJlY3Zfd2luZG93X3NpemUgbWF5IGJlIHNtYWxsZXIgdGhhbiBjb25zdW1lZF9zaXplLCBiZWNhdXNlIGl0CisgICAgICAgbWF5IGJlIGRlY3JlYXNlZCBieSBuZWdhdGl2ZSB2YWx1ZSB3aXRoCisgICAgICAgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpLiAqLworICAgIHJlY3Zfc2l6ZSA9IG5naHR0cDJfbWluKCpjb25zdW1lZF9zaXplX3B0ciwgKnJlY3Zfd2luZG93X3NpemVfcHRyKTsKKworICAgIGlmIChuZ2h0dHAyX3Nob3VsZF9zZW5kX3dpbmRvd191cGRhdGUobG9jYWxfd2luZG93X3NpemUsIHJlY3Zfc2l6ZSkpIHsKKyAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF93aW5kb3dfdXBkYXRlKHNlc3Npb24sIE5HSFRUUDJfRkxBR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtX2lkLCByZWN2X3NpemUpOworCisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgICpyZWN2X3dpbmRvd19zaXplX3B0ciAtPSByZWN2X3NpemU7CisgICAgICAqY29uc3VtZWRfc2l6ZV9wdHIgLT0gcmVjdl9zaXplOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fdXBkYXRlX3N0cmVhbV9jb25zdW1lZF9zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhX3NpemUpIHsKKyAgcmV0dXJuIHNlc3Npb25fdXBkYXRlX2NvbnN1bWVkX3NpemUoCisgICAgICBzZXNzaW9uLCAmc3RyZWFtLT5jb25zdW1lZF9zaXplLCAmc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplLAorICAgICAgc3RyZWFtLT53aW5kb3dfdXBkYXRlX3F1ZXVlZCwgc3RyZWFtLT5zdHJlYW1faWQsIGRlbHRhX3NpemUsCisgICAgICBzdHJlYW0tPmxvY2FsX3dpbmRvd19zaXplKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3VwZGF0ZV9jb25uZWN0aW9uX2NvbnN1bWVkX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhX3NpemUpIHsKKyAgcmV0dXJuIHNlc3Npb25fdXBkYXRlX2NvbnN1bWVkX3NpemUoCisgICAgICBzZXNzaW9uLCAmc2Vzc2lvbi0+Y29uc3VtZWRfc2l6ZSwgJnNlc3Npb24tPnJlY3Zfd2luZG93X3NpemUsCisgICAgICBzZXNzaW9uLT53aW5kb3dfdXBkYXRlX3F1ZXVlZCwgMCwgZGVsdGFfc2l6ZSwgc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemUpOworfQorCisvKgorICogQ2hlY2tzIHRoYXQgd2UgY2FuIHJlY2VpdmUgdGhlIERBVEEgZnJhbWUgZm9yIHN0cmVhbSwgd2hpY2ggaXMKKyAqIGluZGljYXRlZCBieSB8c2Vzc2lvbi0+aWZyYW1lLmZyYW1lLmhkLnN0cmVhbV9pZHwuIElmIGl0IGlzIGEKKyAqIGNvbm5lY3Rpb24gZXJyb3Igc2l0dWF0aW9uLCBHT0FXQVkgZnJhbWUgd2lsbCBiZSBpc3N1ZWQgYnkgdGhpcworICogZnVuY3Rpb24uCisgKgorICogSWYgdGhlIERBVEEgZnJhbWUgaXMgYWxsb3dlZCwgcmV0dXJucyAwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfSUdOX1BBWUxPQUQKKyAqICAgVGhlIHJlY2VwdGlvbiBvZiBEQVRBIGZyYW1lIGlzIGNvbm5lY3Rpb24gZXJyb3I7IG9yIHNob3VsZCBiZQorICogICBpZ25vcmVkLgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgT3V0IG9mIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX29uX2RhdGFfcmVjZWl2ZWRfZmFpbF9mYXN0KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lOworICBpbnQzMl90IHN0cmVhbV9pZDsKKyAgY29uc3QgY2hhciAqZmFpbHVyZV9yZWFzb247CisgIHVpbnQzMl90IGVycm9yX2NvZGUgPSBOR0hUVFAyX1BST1RPQ09MX0VSUk9SOworCisgIGlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIHN0cmVhbV9pZCA9IGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkOworCisgIGlmIChzdHJlYW1faWQgPT0gMCkgeworICAgIC8qIFRoZSBzcGVjIHNheXMgdGhhdCBpZiBhIERBVEEgZnJhbWUgaXMgcmVjZWl2ZWQgd2hvc2Ugc3RyZWFtIElECisgICAgICAgaXMgMCwgdGhlIHJlY2lwaWVudCBNVVNUIHJlc3BvbmQgd2l0aCBhIGNvbm5lY3Rpb24gZXJyb3Igb2YKKyAgICAgICB0eXBlIFBST1RPQ09MX0VSUk9SLiAqLworICAgIGZhaWx1cmVfcmVhc29uID0gIkRBVEE6IHN0cmVhbV9pZCA9PSAwIjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICBpZiAoc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKSkgeworICAgIGZhaWx1cmVfcmVhc29uID0gIkRBVEE6IHN0cmVhbSBpbiBpZGxlIjsKKyAgICBlcnJvcl9jb2RlID0gTkdIVFRQMl9QUk9UT0NPTF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoIXN0cmVhbSkgeworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBzdHJlYW1faWQpOworICAgIGlmIChzdHJlYW0gJiYgKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9SRCkpIHsKKyAgICAgIGZhaWx1cmVfcmVhc29uID0gIkRBVEE6IHN0cmVhbSBjbG9zZWQiOworICAgICAgZXJyb3JfY29kZSA9IE5HSFRUUDJfU1RSRUFNX0NMT1NFRDsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX1BBWUxPQUQ7CisgIH0KKyAgaWYgKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9SRCkgeworICAgIGZhaWx1cmVfcmVhc29uID0gIkRBVEE6IHN0cmVhbSBpbiBoYWxmLWNsb3NlZChyZW1vdGUpIjsKKyAgICBlcnJvcl9jb2RlID0gTkdIVFRQMl9TVFJFQU1fQ0xPU0VEOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbV9pZCkpIHsKKyAgICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX1BBWUxPQUQ7CisgICAgfQorICAgIGlmIChzdHJlYW0tPnN0YXRlICE9IE5HSFRUUDJfU1RSRUFNX09QRU5FRCkgeworICAgICAgZmFpbHVyZV9yZWFzb24gPSAiREFUQTogc3RyZWFtIG5vdCBvcGVuZWQiOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCkgeworICAgIGZhaWx1cmVfcmVhc29uID0gIkRBVEE6IHN0cmVhbSBpbiByZXNlcnZlZCI7CisgICAgZ290byBmYWlsOworICB9CisgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX1BBWUxPQUQ7CisgIH0KKyAgcmV0dXJuIDA7CitmYWlsOgorICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbihzZXNzaW9uLCBlcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlX3JlYXNvbik7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX1BBWUxPQUQ7Cit9CisKK3N0YXRpYyBzaXplX3QgaW5ib3VuZF9mcmFtZV9wYXlsb2FkX3JlYWRsZW4obmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpsYXN0KSB7CisgIHJldHVybiBuZ2h0dHAyX21pbigoc2l6ZV90KShsYXN0IC0gaW4pLCBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKK30KKworLyoKKyAqIFJlc2V0cyBpZnJhbWUtPnNidWYgYW5kIGFkdmFuY2UgaXRzIG1hcmsgcG9pbnRlciBieSB8bGVmdHwgYnl0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGluYm91bmRfZnJhbWVfc2V0X21hcmsobmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUsIHNpemVfdCBsZWZ0KSB7CisgIG5naHR0cDJfYnVmX3Jlc2V0KCZpZnJhbWUtPnNidWYpOworICBpZnJhbWUtPnNidWYubWFyayArPSBsZWZ0OworfQorCitzdGF0aWMgc2l6ZV90IGluYm91bmRfZnJhbWVfYnVmX3JlYWQobmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW4sIGNvbnN0IHVpbnQ4X3QgKmxhc3QpIHsKKyAgc2l6ZV90IHJlYWRsZW47CisKKyAgcmVhZGxlbiA9CisgICAgICBuZ2h0dHAyX21pbigoc2l6ZV90KShsYXN0IC0gaW4pLCBuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKCZpZnJhbWUtPnNidWYpKTsKKworICBpZnJhbWUtPnNidWYubGFzdCA9IG5naHR0cDJfY3B5bWVtKGlmcmFtZS0+c2J1Zi5sYXN0LCBpbiwgcmVhZGxlbik7CisKKyAgcmV0dXJuIHJlYWRsZW47Cit9CisKKy8qCisgKiBVbnBhY2tzIFNFVFRJTkdTIGVudHJ5IGluIGlmcmFtZS0+c2J1Zi4KKyAqLworc3RhdGljIHZvaWQgaW5ib3VuZF9mcmFtZV9zZXRfc2V0dGluZ3NfZW50cnkobmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUpIHsKKyAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSBpdjsKKyAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqbWluX2hlYWRlcl90YWJsZV9zaXplX2VudHJ5OworICBzaXplX3QgaTsKKworICBuZ2h0dHAyX2ZyYW1lX3VucGFja19zZXR0aW5nc19lbnRyeSgmaXYsIGlmcmFtZS0+c2J1Zi5wb3MpOworCisgIHN3aXRjaCAoaXYuc2V0dGluZ3NfaWQpIHsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFOgorICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX1BVU0g6CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOgorICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfSU5JVElBTF9XSU5ET1dfU0laRToKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9GUkFNRV9TSVpFOgorICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0hFQURFUl9MSVNUX1NJWkU6CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfQ09OTkVDVF9QUk9UT0NPTDoKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBERUJVR0YoInJlY3Y6IHVua25vd24gc2V0dGluZ3MgaWQ9MHglMDJ4XG4iLCBpdi5zZXR0aW5nc19pZCk7CisKKyAgICBpZnJhbWUtPml2W2lmcmFtZS0+bml2KytdID0gaXY7CisKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgaWZyYW1lLT5uaXY7ICsraSkgeworICAgIGlmIChpZnJhbWUtPml2W2ldLnNldHRpbmdzX2lkID09IGl2LnNldHRpbmdzX2lkKSB7CisgICAgICBpZnJhbWUtPml2W2ldID0gaXY7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAoaSA9PSBpZnJhbWUtPm5pdikgeworICAgIGlmcmFtZS0+aXZbaWZyYW1lLT5uaXYrK10gPSBpdjsKKyAgfQorCisgIGlmIChpdi5zZXR0aW5nc19pZCA9PSBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFKSB7CisgICAgLyogS2VlcCB0cmFjayBvZiBtaW5pbXVtIHZhbHVlIG9mIFNFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFICovCisgICAgbWluX2hlYWRlcl90YWJsZV9zaXplX2VudHJ5ID0gJmlmcmFtZS0+aXZbaWZyYW1lLT5tYXhfbml2IC0gMV07CisKKyAgICBpZiAoaXYudmFsdWUgPCBtaW5faGVhZGVyX3RhYmxlX3NpemVfZW50cnktPnZhbHVlKSB7CisgICAgICBtaW5faGVhZGVyX3RhYmxlX3NpemVfZW50cnktPnZhbHVlID0gaXYudmFsdWU7CisgICAgfQorICB9Cit9CisKKy8qCisgKiBDaGVja3MgUEFEREVEIGZsYWdzIGFuZCBzZXQgaWZyYW1lLT5zYnVmIHRvIHJlYWQgdGhlbSBhY2NvcmRpbmdseS4KKyAqIElmIHBhZGRpbmcgaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMS4gIElmIG5vIHBhZGRpbmcgaXMgc2V0LAorICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAuICBPbiBlcnJvciwgcmV0dXJucyAtMS4KKyAqLworc3RhdGljIGludCBpbmJvdW5kX2ZyYW1lX2hhbmRsZV9wYWQobmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lX2hkICpoZCkgeworICBpZiAoaGQtPmZsYWdzICYgTkdIVFRQMl9GTEFHX1BBRERFRCkgeworICAgIGlmIChoZC0+bGVuZ3RoIDwgMSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgMSk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgREVCVUdGKCJyZWN2OiBubyBwYWRkaW5nIGluIHBheWxvYWRcbiIpOworICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbXB1dGVzIG51bWJlciBvZiBwYWRkaW5nIGJhc2VkIG9uIGZsYWdzLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIHRoZSBjYWxjdWxhdGVkIGxlbmd0aCBpZiBpdCBzdWNjZWVkcywgb3IgLTEuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGluYm91bmRfZnJhbWVfY29tcHV0ZV9wYWQobmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUpIHsKKyAgc2l6ZV90IHBhZGxlbjsKKworICAvKiAxIGZvciBQYWQgTGVuZ3RoIGZpZWxkICovCisgIHBhZGxlbiA9IChzaXplX3QpKGlmcmFtZS0+c2J1Zi5wb3NbMF0gKyAxKTsKKworICBERUJVR0YoInJlY3Y6IHBhZGxlbj0lenVcbiIsIHBhZGxlbik7CisKKyAgLyogV2UgY2Fubm90IHVzZSBpZnJhbWUtPmZyYW1lLmhkLmxlbmd0aCBiZWNhdXNlIG9mIENPTlRJTlVBVElPTiAqLworICBpZiAocGFkbGVuIC0gMSA+IGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZnJhbWUtPnBhZGxlbiA9IHBhZGxlbjsKKworICByZXR1cm4gKHNzaXplX3QpcGFkbGVuOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBlZmZlY3RpdmUgcGF5bG9hZCBsZW5ndGggaW4gdGhlIGRhdGEgb2YKKyAqIGxlbmd0aCB8cmVhZGxlbnwgd2hlbiB0aGUgcmVtYW5pbmcgcGF5bG9hZCBpcyB8cGF5bG9hZGxlZnR8LiBUaGUKKyAqIHxwYXlsb2FkbGVmdHwgZG9lcyBub3QgaW5jbHVkZSB8cmVhZGxlbnwuIElmIHBhZGRpbmcgd2FzIHN0YXJ0ZWQKKyAqIHN0cmljdGx5IGJlZm9yZSB0aGlzIGRhdGEgY2h1bmssIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMS4KKyAqLworc3RhdGljIHNzaXplX3QgaW5ib3VuZF9mcmFtZV9lZmZlY3RpdmVfcmVhZGxlbihuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVhZGxlbikgeworICBzaXplX3QgdHJhaWxfcGFkbGVuID0KKyAgICAgIG5naHR0cDJfZnJhbWVfdHJhaWxfcGFkbGVuKCZpZnJhbWUtPmZyYW1lLCBpZnJhbWUtPnBhZGxlbik7CisKKyAgaWYgKHRyYWlsX3BhZGxlbiA+IHBheWxvYWRsZWZ0KSB7CisgICAgc2l6ZV90IHBhZGxlbjsKKyAgICBwYWRsZW4gPSB0cmFpbF9wYWRsZW4gLSBwYXlsb2FkbGVmdDsKKyAgICBpZiAocmVhZGxlbiA8IHBhZGxlbikgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gKHNzaXplX3QpKHJlYWRsZW4gLSBwYWRsZW4pOworICB9CisgIHJldHVybiAoc3NpemVfdCkocmVhZGxlbik7Cit9CisKK3NzaXplX3QgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgdWludDhfdCAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5sZW4pIHsKKyAgY29uc3QgdWludDhfdCAqZmlyc3QgPSBpbiwgKmxhc3QgPSBpbiArIGlubGVuOworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIHNpemVfdCByZWFkbGVuOworICBzc2l6ZV90IHBhZGxlbjsKKyAgaW50IHJ2OworICBpbnQgYnVzeSA9IDA7CisgIG5naHR0cDJfZnJhbWVfaGQgY29udF9oZDsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgc2l6ZV90IHByaV9maWVsZGxlbjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBERUJVR0YoInJlY3Y6IGNvbm5lY3Rpb24gcmVjdl93aW5kb3dfc2l6ZT0lZCwgbG9jYWxfd2luZG93PSVkXG4iLAorICAgICAgICAgc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZSwgc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemUpOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgLyogV2UgbWF5IGhhdmUgaWRsZSBzdHJlYW1zIG1vcmUgdGhhbiB3ZSBleHBlY3QgKGUuZy4sCisgICAgIG5naHR0cDJfc2Vzc2lvbl9jaGFuZ2Vfc3RyZWFtX3ByaW9yaXR5KCkgb3IKKyAgICAgbmdodHRwMl9zZXNzaW9uX2NyZWF0ZV9pZGxlX3N0cmVhbSgpKS4gIEFkanVzdCB0aGVtIGhlcmUuICovCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkanVzdF9pZGxlX3N0cmVhbShzZXNzaW9uKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgaWYgKCFuZ2h0dHAyX3Nlc3Npb25fd2FudF9yZWFkKHNlc3Npb24pKSB7CisgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICB9CisKKyAgZm9yICg7OykgeworICAgIHN3aXRjaCAoaWZyYW1lLT5zdGF0ZSkgeworICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX0NMSUVOVF9NQUdJQzoKKyAgICAgIHJlYWRsZW4gPSBuZ2h0dHAyX21pbihpbmxlbiwgaWZyYW1lLT5wYXlsb2FkbGVmdCk7CisKKyAgICAgIGlmIChtZW1jbXAoJk5HSFRUUDJfQ0xJRU5UX01BR0lDW05HSFRUUDJfQ0xJRU5UX01BR0lDX0xFTiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0XSwKKyAgICAgICAgICAgICAgICAgaW4sIHJlYWRsZW4pICE9IDApIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0JBRF9DTElFTlRfTUFHSUM7CisgICAgICB9CisKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0ID09IDApIHsKKyAgICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0ZJUlNUX1NFVFRJTkdTOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9GSVJTVF9TRVRUSU5HUzoKKyAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfRklSU1RfU0VUVElOR1NdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfYnVmX3JlYWQoaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpbiArPSByZWFkbGVuOworCisgICAgICBpZiAobmdodHRwMl9idWZfbWFya19hdmFpbCgmaWZyYW1lLT5zYnVmKSkgeworICAgICAgICByZXR1cm4gaW4gLSBmaXJzdDsKKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+c2J1Zi5wb3NbM10gIT0gTkdIVFRQMl9TRVRUSU5HUyB8fAorICAgICAgICAgIChpZnJhbWUtPnNidWYucG9zWzRdICYgTkdIVFRQMl9GTEFHX0FDSykpIHsKKyAgICAgICAgcnYgPSBzZXNzaW9uX2NhbGxfZXJyb3JfY2FsbGJhY2soCisgICAgICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX0VSUl9TRVRUSU5HU19FWFBFQ1RFRCwKKyAgICAgICAgICAgICJSZW1vdGUgcGVlciByZXR1cm5lZCB1bmV4cGVjdGVkIGRhdGEgd2hpbGUgd2UgZXhwZWN0ZWQgIgorICAgICAgICAgICAgIlNFVFRJTkdTIGZyYW1lLiAgUGVyaGFwcywgcGVlciBkb2VzIG5vdCBzdXBwb3J0IEhUVFAvMiAiCisgICAgICAgICAgICAicHJvcGVybHkuIik7CisKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SLCAiU0VUVElOR1MgZXhwZWN0ZWQiKTsKKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICB9CisKKyAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfSEVBRDsKKworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX0hFQUQ6IHsKKyAgICAgIGludCBvbl9iZWdpbl9mcmFtZV9jYWxsZWQgPSAwOworCisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX0hFQURdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfYnVmX3JlYWQoaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpbiArPSByZWFkbGVuOworCisgICAgICBpZiAobmdodHRwMl9idWZfbWFya19hdmFpbCgmaWZyYW1lLT5zYnVmKSkgeworICAgICAgICByZXR1cm4gaW4gLSBmaXJzdDsKKyAgICAgIH0KKworICAgICAgbmdodHRwMl9mcmFtZV91bnBhY2tfZnJhbWVfaGQoJmlmcmFtZS0+ZnJhbWUuaGQsIGlmcmFtZS0+c2J1Zi5wb3MpOworICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCA9IGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoOworCisgICAgICBERUJVR0YoInJlY3Y6IHBheWxvYWRsZW49JXp1LCB0eXBlPSV1LCBmbGFncz0weCUwMngsIHN0cmVhbV9pZD0lZFxuIiwKKyAgICAgICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmxlbmd0aCwgaWZyYW1lLT5mcmFtZS5oZC50eXBlLAorICAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MsIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkKTsKKworICAgICAgaWYgKGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoID4gc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2ZyYW1lX3NpemUpIHsKKyAgICAgICAgREVCVUdGKCJyZWN2OiBsZW5ndGggaXMgdG9vIGxhcmdlICV6dSA+ICV1XG4iLCBpZnJhbWUtPmZyYW1lLmhkLmxlbmd0aCwKKyAgICAgICAgICAgICAgIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9mcmFtZV9zaXplKTsKKworICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfRlJBTUVfU0laRV9FUlJPUiwgInRvbyBsYXJnZSBmcmFtZSBzaXplIik7CisKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgfQorCisgICAgICBzd2l0Y2ggKGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgY2FzZSBOR0hUVFAyX0RBVEE6IHsKKyAgICAgICAgREVCVUdGKCJyZWN2OiBEQVRBXG4iKTsKKworICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICY9CisgICAgICAgICAgICAoTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0gfCBOR0hUVFAyX0ZMQUdfUEFEREVEKTsKKyAgICAgICAgLyogQ2hlY2sgc3RyZWFtIGlzIG9wZW4uIElmIGl0IGlzIG5vdCBvcGVuIG9yIGNsb3NpbmcsCisgICAgICAgICAgIGlnbm9yZSBwYXlsb2FkLiAqLworICAgICAgICBidXN5ID0gMTsKKworICAgICAgICBydiA9IHNlc3Npb25fb25fZGF0YV9yZWNlaXZlZF9mYWlsX2Zhc3Qoc2Vzc2lvbik7CisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfSUdOX1BBWUxPQUQpIHsKKyAgICAgICAgICBERUJVR0YoInJlY3Y6IERBVEEgbm90IGFsbG93ZWQgc3RyZWFtX2lkPSVkXG4iLAorICAgICAgICAgICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCk7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0RBVEE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBydiA9IGluYm91bmRfZnJhbWVfaGFuZGxlX3BhZChpZnJhbWUsICZpZnJhbWUtPmZyYW1lLmhkKTsKKyAgICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SLAorICAgICAgICAgICAgICAiREFUQTogaW5zdWZmaWNpZW50IHBhZGRpbmcgc3BhY2UiKTsKKworICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gMSkgeworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfUEFEX0RBVEE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0RBVEE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisKKyAgICAgICAgREVCVUdGKCJyZWN2OiBIRUFERVJTXG4iKTsKKworICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICY9CisgICAgICAgICAgICAoTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0gfCBOR0hUVFAyX0ZMQUdfRU5EX0hFQURFUlMgfAorICAgICAgICAgICAgIE5HSFRUUDJfRkxBR19QQURERUQgfCBOR0hUVFAyX0ZMQUdfUFJJT1JJVFkpOworCisgICAgICAgIHJ2ID0gaW5ib3VuZF9mcmFtZV9oYW5kbGVfcGFkKGlmcmFtZSwgJmlmcmFtZS0+ZnJhbWUuaGQpOworICAgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsCisgICAgICAgICAgICAgICJIRUFERVJTOiBpbnN1ZmZpY2llbnQgcGFkZGluZyBzcGFjZSIpOworICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gMSkgeworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmlfZmllbGRsZW4gPSBuZ2h0dHAyX2ZyYW1lX3ByaW9yaXR5X2xlbihpZnJhbWUtPmZyYW1lLmhkLmZsYWdzKTsKKworICAgICAgICBpZiAocHJpX2ZpZWxkbGVuID4gMCkgeworICAgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0IDwgcHJpX2ZpZWxkbGVuKSB7CisgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX05CWVRFOworCisgICAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIHByaV9maWVsZGxlbik7CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENhbGwgb25fYmVnaW5fZnJhbWVfY2FsbGJhY2sgaGVyZSBiZWNhdXNlCisgICAgICAgICAgIHNlc3Npb25fcHJvY2Vzc19oZWFkZXJzX2ZyYW1lKCkgbWF5IGNhbGwKKyAgICAgICAgICAgb25fYmVnaW5faGVhZGVyc19jYWxsYmFjayAqLworICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9mcmFtZShzZXNzaW9uLCAmaWZyYW1lLT5mcmFtZS5oZCk7CisKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgb25fYmVnaW5fZnJhbWVfY2FsbGVkID0gMTsKKworICAgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19oZWFkZXJzX2ZyYW1lKHNlc3Npb24pOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBidXN5ID0gMTsKKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRSkgeworICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKAorICAgICAgICAgICAgICBzZXNzaW9uLCBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCwgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSykgeworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSzsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9QUklPUklUWToKKyAgICAgICAgREVCVUdGKCJyZWN2OiBQUklPUklUWVxuIik7CisKKyAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworCisgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0ICE9IE5HSFRUUDJfUFJJT1JJVFlfU1BFQ0xFTikgeworICAgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9OQllURTsKKworICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgTkdIVFRQMl9QUklPUklUWV9TUEVDTEVOKTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgICAgY2FzZSBOR0hUVFAyX1dJTkRPV19VUERBVEU6CisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgICBzd2l0Y2ggKGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgICBjYXNlIE5HSFRUUDJfUlNUX1NUUkVBTToKKyAgICAgICAgICBERUJVR0YoInJlY3Y6IFJTVF9TVFJFQU1cbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5HSFRUUDJfV0lORE9XX1VQREFURToKKyAgICAgICAgICBERUJVR0YoInJlY3Y6IFdJTkRPV19VUERBVEVcbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYgLyogREVCVUdCVUlMRCAqLworCisgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgPSBOR0hUVFAyX0ZMQUdfTk9ORTsKKworICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCAhPSA0KSB7CisgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisKKyAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIDQpOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTOgorICAgICAgICBERUJVR0YoInJlY3Y6IFNFVFRJTkdTXG4iKTsKKworICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICY9IE5HSFRUUDJfRkxBR19BQ0s7CisKKyAgICAgICAgaWYgKChpZnJhbWUtPmZyYW1lLmhkLmxlbmd0aCAlIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIKSB8fAorICAgICAgICAgICAgKChpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0FDSykgJiYKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0ID4gMCkpIHsKKyAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9TRVRUSU5HUzsKKworICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICAgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKm1pbl9oZWFkZXJfdGFibGVfc2l6ZV9lbnRyeTsKKworICAgICAgICAgIC8qIFdlIGFsbG9jYXRlIGl2IHdpdGggYWRkaXRpb25hbCBvbmUgZW50cnksIHRvIHN0b3JlIHRoZQorICAgICAgICAgICAgIG1pbmltdW0gaGVhZGVyIHRhYmxlIHNpemUuICovCisgICAgICAgICAgaWZyYW1lLT5tYXhfbml2ID0KKyAgICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGggLyBOR0hUVFAyX0ZSQU1FX1NFVFRJTkdTX0VOVFJZX0xFTkdUSCArIDE7CisKKyAgICAgICAgICBpZnJhbWUtPml2ID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfc2V0dGluZ3NfZW50cnkpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+bWF4X25pdik7CisKKyAgICAgICAgICBpZiAoIWlmcmFtZS0+aXYpIHsKKyAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBtaW5faGVhZGVyX3RhYmxlX3NpemVfZW50cnkgPSAmaWZyYW1lLT5pdltpZnJhbWUtPm1heF9uaXYgLSAxXTsKKyAgICAgICAgICBtaW5faGVhZGVyX3RhYmxlX3NpemVfZW50cnktPnNldHRpbmdzX2lkID0KKyAgICAgICAgICAgICAgTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRTsKKyAgICAgICAgICBtaW5faGVhZGVyX3RhYmxlX3NpemVfZW50cnktPnZhbHVlID0gVUlOVDMyX01BWDsKKworICAgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCBOR0hUVFAyX0ZSQU1FX1NFVFRJTkdTX0VOVFJZX0xFTkdUSCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBidXN5ID0gMTsKKworICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgMCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgICAgICBERUJVR0YoInJlY3Y6IFBVU0hfUFJPTUlTRVxuIik7CisKKyAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyAmPQorICAgICAgICAgICAgKE5HSFRUUDJfRkxBR19FTkRfSEVBREVSUyB8IE5HSFRUUDJfRkxBR19QQURERUQpOworCisgICAgICAgIHJ2ID0gaW5ib3VuZF9mcmFtZV9oYW5kbGVfcGFkKGlmcmFtZSwgJmlmcmFtZS0+ZnJhbWUuaGQpOworICAgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsCisgICAgICAgICAgICAgICJQVVNIX1BST01JU0U6IGluc3VmZmljaWVudCBwYWRkaW5nIHNwYWNlIik7CisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSAxKSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9OQllURTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0IDwgNCkgeworICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX05CWVRFOworCisgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCA0KTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9QSU5HOgorICAgICAgICBERUJVR0YoInJlY3Y6IFBJTkdcbiIpOworCisgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJj0gTkdIVFRQMl9GTEFHX0FDSzsKKworICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCAhPSA4KSB7CisgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCA4KTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9HT0FXQVk6CisgICAgICAgIERFQlVHRigicmVjdjogR09BV0FZXG4iKTsKKworICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzID0gTkdIVFRQMl9GTEFHX05PTkU7CisKKyAgICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPCA4KSB7CisgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCA4KTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9DT05USU5VQVRJT046CisgICAgICAgIERFQlVHRigicmVjdjogdW5leHBlY3RlZCBDT05USU5VQVRJT05cbiIpOworCisgICAgICAgIC8qIFJlY2VpdmluZyBDT05USU5VQVRJT04gaW4gdGhpcyBzdGF0ZSBhcmUgc3ViamVjdCB0bworICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yIG9mIHR5cGUgUFJPVE9DT0xfRVJST1IgKi8KKyAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SLCAiQ09OVElOVUFUSU9OOiB1bmV4cGVjdGVkIik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHRigicmVjdjogZXh0ZW5zaW9uIGZyYW1lXG4iKTsKKworICAgICAgICBpZiAoY2hlY2tfZXh0X3R5cGVfc2V0KHNlc3Npb24tPnVzZXJfcmVjdl9leHRfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC50eXBlKSkgeworICAgICAgICAgIGlmICghc2Vzc2lvbi0+Y2FsbGJhY2tzLnVucGFja19leHRlbnNpb25fY2FsbGJhY2spIHsKKyAgICAgICAgICAgIC8qIFNpbGVudGx5IGlnbm9yZSB1bmtub3duIGZyYW1lIHR5cGUuICovCisKKyAgICAgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fUEFZTE9BRDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0VYVEVOU0lPTl9QQVlMT0FEOworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3dpdGNoIChpZnJhbWUtPmZyYW1lLmhkLnR5cGUpIHsKKyAgICAgICAgICBjYXNlIE5HSFRUUDJfQUxUU1ZDOgorICAgICAgICAgICAgaWYgKChzZXNzaW9uLT5idWlsdGluX3JlY3ZfZXh0X3R5cGVzICYgTkdIVFRQMl9UWVBFTUFTS19BTFRTVkMpID09CisgICAgICAgICAgICAgICAgMCkgeworICAgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX1BBWUxPQUQ7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBERUJVR0YoInJlY3Y6IEFMVFNWQ1xuIik7CisKKyAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgPSBOR0hUVFAyX0ZMQUdfTk9ORTsKKyAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuZXh0LnBheWxvYWQgPSAmaWZyYW1lLT5leHRfZnJhbWVfcGF5bG9hZC5hbHRzdmM7CisKKyAgICAgICAgICAgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPCAyKSB7CisgICAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisgICAgICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgMik7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTkdIVFRQMl9PUklHSU46CisgICAgICAgICAgICBpZiAoIShzZXNzaW9uLT5idWlsdGluX3JlY3ZfZXh0X3R5cGVzICYgTkdIVFRQMl9UWVBFTUFTS19PUklHSU4pKSB7CisgICAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fUEFZTE9BRDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIERFQlVHRigicmVjdjogT1JJR0lOXG4iKTsKKworICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5leHQucGF5bG9hZCA9ICZpZnJhbWUtPmV4dF9mcmFtZV9wYXlsb2FkLm9yaWdpbjsKKworICAgICAgICAgICAgaWYgKHNlc3Npb24tPnNlcnZlciB8fCBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCB8fAorICAgICAgICAgICAgICAgIChpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICYgMHhmMCkpIHsKKyAgICAgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworCisgICAgICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICAgICAgICBpZnJhbWUtPnJhd19sYnVmID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgaWZyYW1lLT5wYXlsb2FkbGVmdCk7CisKKyAgICAgICAgICAgICAgaWYgKGlmcmFtZS0+cmF3X2xidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIG5naHR0cDJfYnVmX3dyYXBfaW5pdCgmaWZyYW1lLT5sYnVmLCBpZnJhbWUtPnJhd19sYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9PUklHSU5fUEFZTE9BRDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fUEFZTE9BRDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICghb25fYmVnaW5fZnJhbWVfY2FsbGVkKSB7CisgICAgICAgIHN3aXRjaCAoaWZyYW1lLT5zdGF0ZSkgeworICAgICAgICBjYXNlIE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzoKKyAgICAgICAgY2FzZSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOgorICAgICAgICBjYXNlIE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjoKKyAgICAgICAgY2FzZSBOR0hUVFAyX0lCX0lHTl9EQVRBOgorICAgICAgICBjYXNlIE5HSFRUUDJfSUJfSUdOX0FMTDoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9mcmFtZShzZXNzaW9uLCAmaWZyYW1lLT5mcmFtZS5oZCk7CisKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX05CWVRFOgorICAgICAgREVCVUdGKCJyZWN2OiBbSUJfUkVBRF9OQllURV1cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9idWZfcmVhZChpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGluICs9IHJlYWRsZW47CisgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dSwgbGVmdD0lemRcbiIsIHJlYWRsZW4sCisgICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCwgbmdodHRwMl9idWZfbWFya19hdmFpbCgmaWZyYW1lLT5zYnVmKSk7CisKKyAgICAgIGlmIChuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKCZpZnJhbWUtPnNidWYpKSB7CisgICAgICAgIHJldHVybiBpbiAtIGZpcnN0OworICAgICAgfQorCisgICAgICBzd2l0Y2ggKGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisgICAgICAgIGlmIChpZnJhbWUtPnBhZGxlbiA9PSAwICYmCisgICAgICAgICAgICAoaWZyYW1lLT5mcmFtZS5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19QQURERUQpKSB7CisgICAgICAgICAgcHJpX2ZpZWxkbGVuID0gbmdodHRwMl9mcmFtZV9wcmlvcml0eV9sZW4oaWZyYW1lLT5mcmFtZS5oZC5mbGFncyk7CisgICAgICAgICAgcGFkbGVuID0gaW5ib3VuZF9mcmFtZV9jb21wdXRlX3BhZChpZnJhbWUpOworICAgICAgICAgIGlmIChwYWRsZW4gPCAwIHx8CisgICAgICAgICAgICAgIChzaXplX3QpcGFkbGVuICsgcHJpX2ZpZWxkbGVuID4gMSArIGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsICJIRUFERVJTOiBpbnZhbGlkIHBhZGRpbmciKTsKKyAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgICAgfQorICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGVhZGVycy5wYWRsZW4gPSAoc2l6ZV90KXBhZGxlbjsKKworICAgICAgICAgIGlmIChwcmlfZmllbGRsZW4gPiAwKSB7CisgICAgICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCA8IHByaV9maWVsZGxlbikgeworICAgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX05CWVRFOworICAgICAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIHByaV9maWVsZGxlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogVHJ1bmNhdGUgYnVmZmVycyB1c2VkIGZvciBwYWRkaW5nIHNwZWMgKi8KKyAgICAgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19oZWFkZXJzX2ZyYW1lKHNlc3Npb24pOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBidXN5ID0gMTsKKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRSkgeworICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKAorICAgICAgICAgICAgICBzZXNzaW9uLCBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCwgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSykgeworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSzsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9QUklPUklUWToKKyAgICAgICAgcnYgPSBzZXNzaW9uX3Byb2Nlc3NfcHJpb3JpdHlfZnJhbWUoc2Vzc2lvbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19yc3Rfc3RyZWFtX2ZyYW1lKHNlc3Npb24pOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgICAgICBpZiAoaWZyYW1lLT5wYWRsZW4gPT0gMCAmJgorICAgICAgICAgICAgKGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfUEFEREVEKSkgeworICAgICAgICAgIHBhZGxlbiA9IGluYm91bmRfZnJhbWVfY29tcHV0ZV9wYWQoaWZyYW1lKTsKKyAgICAgICAgICBpZiAocGFkbGVuIDwgMCB8fCAoc2l6ZV90KXBhZGxlbiArIDQgLyogcHJvbWlzZWQgc3RyZWFtIGlkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gMSArIGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsCisgICAgICAgICAgICAgICAgIlBVU0hfUFJPTUlTRTogaW52YWxpZCBwYWRkaW5nIik7CisgICAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmcmFtZS0+ZnJhbWUucHVzaF9wcm9taXNlLnBhZGxlbiA9IChzaXplX3QpcGFkbGVuOworCisgICAgICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPCA0KSB7CisgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX05CWVRFOworCisgICAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIDQpOworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19wdXNoX3Byb21pc2VfZnJhbWUoc2Vzc2lvbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oCisgICAgICAgICAgICAgIHNlc3Npb24sIGlmcmFtZS0+ZnJhbWUucHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSykgeworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSzsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9QSU5HOgorICAgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19waW5nX2ZyYW1lKHNlc3Npb24pOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfR09BV0FZOiB7CisgICAgICAgIHNpemVfdCBkZWJ1Z2xlbjsKKworICAgICAgICAvKiA4IGlzIExhc3Qtc3RyZWFtLUlEICsgRXJyb3IgQ29kZSAqLworICAgICAgICBkZWJ1Z2xlbiA9IGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoIC0gODsKKworICAgICAgICBpZiAoZGVidWdsZW4gPiAwKSB7CisgICAgICAgICAgaWZyYW1lLT5yYXdfbGJ1ZiA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIGRlYnVnbGVuKTsKKworICAgICAgICAgIGlmIChpZnJhbWUtPnJhd19sYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmlmcmFtZS0+bGJ1ZiwgaWZyYW1lLT5yYXdfbGJ1ZiwgZGVidWdsZW4pOworICAgICAgICB9CisKKyAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9HT0FXQVlfREVCVUc7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIE5HSFRUUDJfV0lORE9XX1VQREFURToKKyAgICAgICAgcnYgPSBzZXNzaW9uX3Byb2Nlc3Nfd2luZG93X3VwZGF0ZV9mcmFtZShzZXNzaW9uKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICB9CisKKyAgICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX0FMVFNWQzogeworICAgICAgICBzaXplX3Qgb3JpZ2luX2xlbjsKKworICAgICAgICBvcmlnaW5fbGVuID0gbmdodHRwMl9nZXRfdWludDE2KGlmcmFtZS0+c2J1Zi5wb3MpOworCisgICAgICAgIERFQlVHRigicmVjdjogb3JpZ2luX2xlbj0lenVcbiIsIG9yaWdpbl9sZW4pOworCisgICAgICAgIGlmIChvcmlnaW5fbGVuID4gaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGggPiAyKSB7CisgICAgICAgICAgaWZyYW1lLT5yYXdfbGJ1ZiA9CisgICAgICAgICAgICAgIG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoIC0gMik7CisKKyAgICAgICAgICBpZiAoaWZyYW1lLT5yYXdfbGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgICAgICAgfQorCisgICAgICAgICAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZpZnJhbWUtPmxidWYsIGlmcmFtZS0+cmF3X2xidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfQUxUU1ZDX1BBWUxPQUQ7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICAvKiBUaGlzIGlzIHVua25vd24gZnJhbWUgKi8KKyAgICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLOgorICAgIGNhc2UgTkdIVFRQMl9JQl9JR05fSEVBREVSX0JMT0NLOiB7CisgICAgICBzc2l6ZV90IGRhdGFfcmVhZGxlbjsKKyAgICAgIHNpemVfdCB0cmFpbF9wYWRsZW47CisgICAgICBpbnQgZmluYWw7CisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSykgeworICAgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX0hFQURFUl9CTE9DS11cbiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdGKCJyZWN2OiBbSUJfSUdOX0hFQURFUl9CTE9DS11cbiIpOworICAgICAgfQorI2VuZGlmIC8qIERFQlVHQlVJTEQgKi8KKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfcGF5bG9hZF9yZWFkbGVuKGlmcmFtZSwgaW4sIGxhc3QpOworCisgICAgICBERUJVR0YoInJlY3Y6IHJlYWRsZW49JXp1LCBwYXlsb2FkbGVmdD0lenVcbiIsIHJlYWRsZW4sCisgICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtIHJlYWRsZW4pOworCisgICAgICBkYXRhX3JlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX2VmZmVjdGl2ZV9yZWFkbGVuKAorICAgICAgICAgIGlmcmFtZSwgaWZyYW1lLT5wYXlsb2FkbGVmdCAtIHJlYWRsZW4sIHJlYWRsZW4pOworCisgICAgICBpZiAoZGF0YV9yZWFkbGVuID09IC0xKSB7CisgICAgICAgIC8qIGV2ZXJ5dGhpbmcgaXMgcGFkZGluZyAqLworICAgICAgICBkYXRhX3JlYWRsZW4gPSAwOworICAgICAgfQorCisgICAgICB0cmFpbF9wYWRsZW4gPSBuZ2h0dHAyX2ZyYW1lX3RyYWlsX3BhZGxlbigmaWZyYW1lLT5mcmFtZSwgaWZyYW1lLT5wYWRsZW4pOworCisgICAgICBmaW5hbCA9IChpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTKSAmJgorICAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC0gKHNpemVfdClkYXRhX3JlYWRsZW4gPT0gdHJhaWxfcGFkbGVuOworCisgICAgICBpZiAoZGF0YV9yZWFkbGVuID4gMCB8fCAoZGF0YV9yZWFkbGVuID09IDAgJiYgZmluYWwpKSB7CisgICAgICAgIHNpemVfdCBoZF9wcm9jbGVuID0gMDsKKworICAgICAgICBERUJVR0YoInJlY3Y6IGJsb2NrIGZpbmFsPSVkXG4iLCBmaW5hbCk7CisKKyAgICAgICAgcnYgPQorICAgICAgICAgICAgaW5mbGF0ZV9oZWFkZXJfYmxvY2soc2Vzc2lvbiwgJmlmcmFtZS0+ZnJhbWUsICZoZF9wcm9jbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKilpbiwgKHNpemVfdClkYXRhX3JlYWRsZW4sIGZpbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLKTsKKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfUEFVU0UpIHsKKyAgICAgICAgICBpbiArPSBoZF9wcm9jbGVuOworICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gaGRfcHJvY2xlbjsKKworICAgICAgICAgIHJldHVybiBpbiAtIGZpcnN0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUpIHsKKyAgICAgICAgICAvKiBUaGUgYXBwbGljYXRpb24gc2F5cyBubyBtb3JlIGhlYWRlcnMuIFdlIGRlY29tcHJlc3MgdGhlCisgICAgICAgICAgICAgcmVzdCBvZiB0aGUgaGVhZGVyIGJsb2NrIGJ1dCBub3QgaW52b2tlIG9uX2hlYWRlcl9jYWxsYmFjaworICAgICAgICAgICAgIGFuZCBvbl9mcmFtZV9yZWN2X2NhbGxiYWNrLiAqLworICAgICAgICAgIGluICs9IGhkX3Byb2NsZW47CisgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSBoZF9wcm9jbGVuOworCisgICAgICAgICAgLyogVXNlIHByb21pc2VkIHN0cmVhbSBJRCBmb3IgUFVTSF9QUk9NSVNFICovCisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oCisgICAgICAgICAgICAgIHNlc3Npb24sCisgICAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQudHlwZSA9PSBOR0hUVFAyX1BVU0hfUFJPTUlTRQorICAgICAgICAgICAgICAgICAgPyBpZnJhbWUtPmZyYW1lLnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQKKyAgICAgICAgICAgICAgICAgIDogaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQsCisgICAgICAgICAgICAgIE5HSFRUUDJfSU5URVJOQUxfRVJST1IpOworICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKyAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fSEVBREVSX0JMT0NLOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW4gKz0gcmVhZGxlbjsKKyAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSByZWFkbGVuOworCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUCkgeworICAgICAgICAgIC8qIEdPQVdBWSBpcyBhbHJlYWR5IGlzc3VlZCAqLworICAgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0ID09IDApIHsKKyAgICAgICAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fUEFZTE9BRDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGluICs9IHJlYWRsZW47CisgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmICgoaWZyYW1lLT5mcmFtZS5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19FTkRfSEVBREVSUykgPT0gMCkgeworCisgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCBOR0hUVFAyX0ZSQU1FX0hETEVOKTsKKworICAgICAgICBpZnJhbWUtPnBhZGxlbiA9IDA7CisKKyAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSykgeworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0VYUEVDVF9DT05USU5VQVRJT047CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0NPTlRJTlVBVElPTjsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSykgeworICAgICAgICAgIHJ2ID0gc2Vzc2lvbl9hZnRlcl9oZWFkZXJfYmxvY2tfcmVjZWl2ZWQoc2Vzc2lvbik7CisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5HSFRUUDJfSUJfSUdOX1BBWUxPQUQ6CisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9JR05fUEFZTE9BRF1cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9wYXlsb2FkX3JlYWRsZW4oaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisgICAgICBpbiArPSByZWFkbGVuOworCisgICAgICBERUJVR0YoInJlY3Y6IHJlYWRsZW49JXp1LCBwYXlsb2FkbGVmdD0lenVcbiIsIHJlYWRsZW4sCisgICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCk7CisKKyAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0KSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzd2l0Y2ggKGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisgICAgICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgICAgY2FzZSBOR0hUVFAyX0NPTlRJTlVBVElPTjoKKyAgICAgICAgLyogTWFyayBpbmZsYXRlciBiYWQgc28gdGhhdCB3ZSB3b24ndCBwZXJmb3JtIGZ1cnRoZXIgZGVjb2RpbmcgKi8KKyAgICAgICAgc2Vzc2lvbi0+aGRfaW5mbGF0ZXIuY3R4LmJhZCA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX0ZSQU1FX1NJWkVfRVJST1I6CisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9GUkFNRV9TSVpFX0VSUk9SXVxuIik7CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9oYW5kbGVfZnJhbWVfc2l6ZV9lcnJvcihzZXNzaW9uKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIGFzc2VydChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCk7CisKKyAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9TRVRUSU5HUzoKKyAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfU0VUVElOR1NdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfYnVmX3JlYWQoaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisgICAgICBpbiArPSByZWFkbGVuOworCisgICAgICBERUJVR0YoInJlY3Y6IHJlYWRsZW49JXp1LCBwYXlsb2FkbGVmdD0lenVcbiIsIHJlYWRsZW4sCisgICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCk7CisKKyAgICAgIGlmIChuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKCZpZnJhbWUtPnNidWYpKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAocmVhZGxlbiA+IDApIHsKKyAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfc2V0dGluZ3NfZW50cnkoaWZyYW1lKTsKKyAgICAgIH0KKyAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0KSB7CisgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCBOR0hUVFAyX0ZSQU1FX1NFVFRJTkdTX0VOVFJZX0xFTkdUSCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19zZXR0aW5nc19mcmFtZShzZXNzaW9uKTsKKworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9HT0FXQVlfREVCVUc6CisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX0dPQVdBWV9ERUJVR11cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9wYXlsb2FkX3JlYWRsZW4oaWZyYW1lLCBpbiwgbGFzdCk7CisKKyAgICAgIGlmIChyZWFkbGVuID4gMCkgeworICAgICAgICBpZnJhbWUtPmxidWYubGFzdCA9IG5naHR0cDJfY3B5bWVtKGlmcmFtZS0+bGJ1Zi5sYXN0LCBpbiwgcmVhZGxlbik7CisKKyAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSByZWFkbGVuOworICAgICAgICBpbiArPSByZWFkbGVuOworICAgICAgfQorCisgICAgICBERUJVR0YoInJlY3Y6IHJlYWRsZW49JXp1LCBwYXlsb2FkbGVmdD0lenVcbiIsIHJlYWRsZW4sCisgICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCk7CisKKyAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0KSB7CisgICAgICAgIGFzc2VydChuZ2h0dHAyX2J1Zl9hdmFpbCgmaWZyYW1lLT5sYnVmKSA+IDApOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19nb2F3YXlfZnJhbWUoc2Vzc2lvbik7CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICB9CisKKyAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX0VYUEVDVF9DT05USU5VQVRJT046CisgICAgY2FzZSBOR0hUVFAyX0lCX0lHTl9DT05USU5VQVRJT046CisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9FWFBFQ1RfQ09OVElOVUFUSU9OKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVjdjogW0lCX0VYUEVDVF9DT05USU5VQVRJT05dXG4iKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVjdjogW0lCX0lHTl9DT05USU5VQVRJT05dXG4iKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBERUJVR0JVSUxEICovCisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX2J1Zl9yZWFkKGlmcmFtZSwgaW4sIGxhc3QpOworICAgICAgaW4gKz0gcmVhZGxlbjsKKworICAgICAgaWYgKG5naHR0cDJfYnVmX21hcmtfYXZhaWwoJmlmcmFtZS0+c2J1ZikpIHsKKyAgICAgICAgcmV0dXJuIGluIC0gZmlyc3Q7CisgICAgICB9CisKKyAgICAgIG5naHR0cDJfZnJhbWVfdW5wYWNrX2ZyYW1lX2hkKCZjb250X2hkLCBpZnJhbWUtPnNidWYucG9zKTsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgPSBjb250X2hkLmxlbmd0aDsKKworICAgICAgREVCVUdGKCJyZWN2OiBwYXlsb2FkbGVuPSV6dSwgdHlwZT0ldSwgZmxhZ3M9MHglMDJ4LCBzdHJlYW1faWQ9JWRcbiIsCisgICAgICAgICAgICAgY29udF9oZC5sZW5ndGgsIGNvbnRfaGQudHlwZSwgY29udF9oZC5mbGFncywgY29udF9oZC5zdHJlYW1faWQpOworCisgICAgICBpZiAoY29udF9oZC50eXBlICE9IE5HSFRUUDJfQ09OVElOVUFUSU9OIHx8CisgICAgICAgICAgY29udF9oZC5zdHJlYW1faWQgIT0gaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQpIHsKKyAgICAgICAgREVCVUdGKCJyZWN2OiBleHBlY3RlZCBzdHJlYW1faWQ9JWQsIHR5cGU9JWQsIGJ1dCBnb3Qgc3RyZWFtX2lkPSVkLCAiCisgICAgICAgICAgICAgICAidHlwZT0ldVxuIiwKKyAgICAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkLCBOR0hUVFAyX0NPTlRJTlVBVElPTiwKKyAgICAgICAgICAgICAgIGNvbnRfaGQuc3RyZWFtX2lkLCBjb250X2hkLnR5cGUpOworICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsCisgICAgICAgICAgICAidW5leHBlY3RlZCBub24tQ09OVElOVUFUSU9OIGZyYW1lIG9yIHN0cmVhbV9pZCBpcyBpbnZhbGlkIik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIH0KKworICAgICAgLyogQ09OVElOVUFUSU9OIHdvbid0IGJlYXIgTkdIVFRQMl9QQURERUQgZmxhZyAqLworCisgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzID0gKHVpbnQ4X3QpKAorICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgfCAoY29udF9oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19FTkRfSEVBREVSUykpOworICAgICAgaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGggKz0gY29udF9oZC5sZW5ndGg7CisKKyAgICAgIGJ1c3kgPSAxOworCisgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0VYUEVDVF9DT05USU5VQVRJT04pIHsKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9IRUFERVJfQkxPQ0s7CisKKyAgICAgICAgcnYgPSBzZXNzaW9uX2NhbGxfb25fYmVnaW5fZnJhbWUoc2Vzc2lvbiwgJmNvbnRfaGQpOworCisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfUEFEX0RBVEE6CisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX1BBRF9EQVRBXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX2J1Zl9yZWFkKGlmcmFtZSwgaW4sIGxhc3QpOworICAgICAgaW4gKz0gcmVhZGxlbjsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKworICAgICAgREVCVUdGKCJyZWN2OiByZWFkbGVuPSV6dSwgcGF5bG9hZGxlZnQ9JXp1LCBsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0LCBuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKCZpZnJhbWUtPnNidWYpKTsKKworICAgICAgaWYgKG5naHR0cDJfYnVmX21hcmtfYXZhaWwoJmlmcmFtZS0+c2J1ZikpIHsKKyAgICAgICAgcmV0dXJuIGluIC0gZmlyc3Q7CisgICAgICB9CisKKyAgICAgIC8qIFBhZCBMZW5ndGggZmllbGQgaXMgc3ViamVjdCB0byBmbG93IGNvbnRyb2wgKi8KKyAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfcmVjdl9jb25uZWN0aW9uX3dpbmRvd19zaXplKHNlc3Npb24sIHJlYWRsZW4pOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIH0KKworICAgICAgLyogUGFkIExlbmd0aCBmaWVsZCBpcyBjb25zdW1lZCBpbW1lZGlhdGVseSAqLworICAgICAgcnYgPQorICAgICAgICAgIG5naHR0cDJfc2Vzc2lvbl9jb25zdW1lKHNlc3Npb24sIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkLCByZWFkbGVuKTsKKworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIH0KKworICAgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQpOworICAgICAgaWYgKHN0cmVhbSkgeworICAgICAgICBydiA9IHNlc3Npb25fdXBkYXRlX3JlY3Zfc3RyZWFtX3dpbmRvd19zaXplKAorICAgICAgICAgICAgc2Vzc2lvbiwgc3RyZWFtLCByZWFkbGVuLAorICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCB8fAorICAgICAgICAgICAgICAgIChpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pID09IDApOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYnVzeSA9IDE7CisKKyAgICAgIHBhZGxlbiA9IGluYm91bmRfZnJhbWVfY29tcHV0ZV9wYWQoaWZyYW1lKTsKKyAgICAgIGlmIChwYWRsZW4gPCAwKSB7CisgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwgIkRBVEE6IGludmFsaWQgcGFkZGluZyIpOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgfQorCisgICAgICBpZnJhbWUtPmZyYW1lLmRhdGEucGFkbGVuID0gKHNpemVfdClwYWRsZW47CisKKyAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfREFUQTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfREFUQToKKyAgICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkKTsKKworICAgICAgaWYgKCFzdHJlYW0pIHsKKyAgICAgICAgYnVzeSA9IDE7CisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9EQVRBOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgREVCVUdGKCJyZWN2OiBbSUJfUkVBRF9EQVRBXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX3BheWxvYWRfcmVhZGxlbihpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKHJlYWRsZW4gPiAwKSB7CisgICAgICAgIHNzaXplX3QgZGF0YV9yZWFkbGVuOworCisgICAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfcmVjdl9jb25uZWN0aW9uX3dpbmRvd19zaXplKHNlc3Npb24sIHJlYWRsZW4pOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBydiA9IHNlc3Npb25fdXBkYXRlX3JlY3Zfc3RyZWFtX3dpbmRvd19zaXplKAorICAgICAgICAgICAgc2Vzc2lvbiwgc3RyZWFtLCByZWFkbGVuLAorICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCB8fAorICAgICAgICAgICAgICAgIChpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pID09IDApOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBkYXRhX3JlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX2VmZmVjdGl2ZV9yZWFkbGVuKAorICAgICAgICAgICAgaWZyYW1lLCBpZnJhbWUtPnBheWxvYWRsZWZ0LCByZWFkbGVuKTsKKworICAgICAgICBpZiAoZGF0YV9yZWFkbGVuID09IC0xKSB7CisgICAgICAgICAgLyogZXZlcnl0aGluZyBpcyBwYWRkaW5nICovCisgICAgICAgICAgZGF0YV9yZWFkbGVuID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHBhZGxlbiA9IChzc2l6ZV90KXJlYWRsZW4gLSBkYXRhX3JlYWRsZW47CisKKyAgICAgICAgaWYgKHBhZGxlbiA+IDApIHsKKyAgICAgICAgICAvKiBQYWRkaW5nIGlzIGNvbnNpZGVyZWQgYXMgImNvbnN1bWVkIiBpbW1lZGlhdGVseSAqLworICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2NvbnN1bWUoc2Vzc2lvbiwgaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KXBhZGxlbik7CisKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBERUJVR0YoInJlY3Y6IGRhdGFfcmVhZGxlbj0lemRcbiIsIGRhdGFfcmVhZGxlbik7CisKKyAgICAgICAgaWYgKGRhdGFfcmVhZGxlbiA+IDApIHsKKyAgICAgICAgICBpZiAoc2Vzc2lvbl9lbmZvcmNlX2h0dHBfbWVzc2FnaW5nKHNlc3Npb24pKSB7CisgICAgICAgICAgICBpZiAobmdodHRwMl9odHRwX29uX2RhdGFfY2h1bmsoc3RyZWFtLCAoc2l6ZV90KWRhdGFfcmVhZGxlbikgIT0gMCkgeworICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkgeworICAgICAgICAgICAgICAgIC8qIENvbnN1bWUgYWxsIGRhdGEgZm9yIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHkgaGVyZSAqLworICAgICAgICAgICAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfY29ubmVjdGlvbl9jb25zdW1lZF9zaXplKAorICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLCAoc2l6ZV90KWRhdGFfcmVhZGxlbik7CisKKyAgICAgICAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9EQVRBKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oCisgICAgICAgICAgICAgICAgICBzZXNzaW9uLCBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUik7CisgICAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0RBVEE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjaykgeworICAgICAgICAgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrKAorICAgICAgICAgICAgICAgIHNlc3Npb24sIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MsIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgIGluIC0gcmVhZGxlbiwgKHNpemVfdClkYXRhX3JlYWRsZW4sIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgICAgICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfUEFVU0UpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGluIC0gZmlyc3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX2RhdGFfZnJhbWUoc2Vzc2lvbik7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9JQl9JR05fREFUQToKKyAgICAgIERFQlVHRigicmVjdjogW0lCX0lHTl9EQVRBXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX3BheWxvYWRfcmVhZGxlbihpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKHJlYWRsZW4gPiAwKSB7CisgICAgICAgIC8qIFVwZGF0ZSBjb25uZWN0aW9uLWxldmVsIGZsb3cgY29udHJvbCB3aW5kb3cgZm9yIGlnbm9yZWQKKyAgICAgICAgICAgREFUQSBmcmFtZSB0b28gKi8KKyAgICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9yZWN2X2Nvbm5lY3Rpb25fd2luZG93X3NpemUoc2Vzc2lvbiwgcmVhZGxlbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSB7CisKKyAgICAgICAgICAvKiBJZ25vcmVkIERBVEEgaXMgY29uc2lkZXJlZCBhcyAiY29uc3VtZWQiIGltbWVkaWF0ZWx5LiAqLworICAgICAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfY29ubmVjdGlvbl9jb25zdW1lZF9zaXplKHNlc3Npb24sIHJlYWRsZW4pOworCisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0KSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9JQl9JR05fQUxMOgorICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX0VYVEVOU0lPTl9QQVlMT0FEOgorICAgICAgREVCVUdGKCJyZWN2OiBbSUJfUkVBRF9FWFRFTlNJT05fUEFZTE9BRF1cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9wYXlsb2FkX3JlYWRsZW4oaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisgICAgICBpbiArPSByZWFkbGVuOworCisgICAgICBERUJVR0YoInJlY3Y6IHJlYWRsZW49JXp1LCBwYXlsb2FkbGVmdD0lenVcbiIsIHJlYWRsZW4sCisgICAgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCk7CisKKyAgICAgIGlmIChyZWFkbGVuID4gMCkgeworICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjaygKKyAgICAgICAgICAgIHNlc3Npb24sIGluIC0gcmVhZGxlbiwgcmVhZGxlbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fUEFZTE9BRDsKKworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0ID4gMCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgcnYgPSBzZXNzaW9uX3Byb2Nlc3NfZXh0ZW5zaW9uX2ZyYW1lKHNlc3Npb24pOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9BTFRTVkNfUEFZTE9BRDoKKyAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfQUxUU1ZDX1BBWUxPQURdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfcGF5bG9hZF9yZWFkbGVuKGlmcmFtZSwgaW4sIGxhc3QpOworICAgICAgaWYgKHJlYWRsZW4gPiAwKSB7CisgICAgICAgIGlmcmFtZS0+bGJ1Zi5sYXN0ID0gbmdodHRwMl9jcHltZW0oaWZyYW1lLT5sYnVmLmxhc3QsIGluLCByZWFkbGVuKTsKKworICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisgICAgICAgIGluICs9IHJlYWRsZW47CisgICAgICB9CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKCZpZnJhbWUtPmxidWYpID4gMCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX2FsdHN2Y19mcmFtZShzZXNzaW9uKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfT1JJR0lOX1BBWUxPQUQ6CisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX09SSUdJTl9QQVlMT0FEXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX3BheWxvYWRfcmVhZGxlbihpZnJhbWUsIGluLCBsYXN0KTsKKworICAgICAgaWYgKHJlYWRsZW4gPiAwKSB7CisgICAgICAgIGlmcmFtZS0+bGJ1Zi5sYXN0ID0gbmdodHRwMl9jcHltZW0oaWZyYW1lLT5sYnVmLmxhc3QsIGluLCByZWFkbGVuKTsKKworICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisgICAgICAgIGluICs9IHJlYWRsZW47CisgICAgICB9CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKCZpZnJhbWUtPmxidWYpID4gMCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX29yaWdpbl9mcmFtZShzZXNzaW9uKTsKKworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWJ1c3kgJiYgaW4gPT0gbGFzdCkgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYnVzeSA9IDA7CisgIH0KKworICBhc3NlcnQoaW4gPT0gbGFzdCk7CisKKyAgcmV0dXJuIGluIC0gZmlyc3Q7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fcmVjdihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgdWludDhfdCBidWZbTkdIVFRQMl9JTkJPVU5EX0JVRkZFUl9MRU5HVEhdOworICB3aGlsZSAoMSkgeworICAgIHNzaXplX3QgcmVhZGxlbjsKKyAgICByZWFkbGVuID0gc2Vzc2lvbl9yZWN2KHNlc3Npb24sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIGlmIChyZWFkbGVuID4gMCkgeworICAgICAgc3NpemVfdCBwcm9jbGVuID0gbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KHNlc3Npb24sIGJ1ZiwgKHNpemVfdClyZWFkbGVuKTsKKyAgICAgIGlmIChwcm9jbGVuIDwgMCkgeworICAgICAgICByZXR1cm4gKGludClwcm9jbGVuOworICAgICAgfQorICAgICAgYXNzZXJ0KHByb2NsZW4gPT0gcmVhZGxlbik7CisgICAgfSBlbHNlIGlmIChyZWFkbGVuID09IDAgfHwgcmVhZGxlbiA9PSBOR0hUVFAyX0VSUl9XT1VMREJMT0NLKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKHJlYWRsZW4gPT0gTkdIVFRQMl9FUlJfRU9GKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfRU9GOworICAgIH0gZWxzZSBpZiAocmVhZGxlbiA8IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgfQorfQorCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBzdHJlYW1zLCB3aGljaCBpbmNsdWRlcyBzdHJlYW1zIGluCisgKiByZXNlcnZlZCBzdGF0ZS4KKyAqLworc3RhdGljIHNpemVfdCBzZXNzaW9uX2dldF9udW1fYWN0aXZlX3N0cmVhbXMobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBuZ2h0dHAyX21hcF9zaXplKCZzZXNzaW9uLT5zdHJlYW1zKSAtIHNlc3Npb24tPm51bV9jbG9zZWRfc3RyZWFtcyAtCisgICAgICAgICBzZXNzaW9uLT5udW1faWRsZV9zdHJlYW1zOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3dhbnRfcmVhZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgc2l6ZV90IG51bV9hY3RpdmVfc3RyZWFtczsKKworICAvKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCB3ZSBkb24ndCB3YW50IHRvIHJlYWQuIFRoZSBhcHBsaWNhdGlvbgorICAgICBzaG91bGQgZHJvcCB0aGUgY29ubmVjdGlvbi4gKi8KKyAgaWYgKHNlc3Npb24tPmdvYXdheV9mbGFncyAmIE5HSFRUUDJfR09BV0FZX1RFUk1fU0VOVCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgbnVtX2FjdGl2ZV9zdHJlYW1zID0gc2Vzc2lvbl9nZXRfbnVtX2FjdGl2ZV9zdHJlYW1zKHNlc3Npb24pOworCisgIC8qIFVubGVzcyB0ZXJtaW5hdGlvbiBHT0FXQVkgaXMgc2VudCBvciByZWNlaXZlZCwgd2UgYWx3YXlzIHdhbnQgdG8KKyAgICAgcmVhZCBpbmNvbWluZyBmcmFtZXMuICovCisKKyAgaWYgKG51bV9hY3RpdmVfc3RyZWFtcyA+IDApIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIC8qIElmIHRoZXJlIGlzIG5vIGFjdGl2ZSBzdHJlYW1zIGFuZCBHT0FXQVkgaGFzIGJlZW4gc2VudCBvcgorICAgICByZWNlaXZlZCwgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHNlc3Npb24uICovCisgIHJldHVybiAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYKKyAgICAgICAgICAoTkdIVFRQMl9HT0FXQVlfU0VOVCB8IE5HSFRUUDJfR09BV0FZX1JFQ1YpKSA9PSAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIC8qIElmIHRoZXNlIGZsYWcgaXMgc2V0LCB3ZSBkb24ndCB3YW50IHRvIHdyaXRlIGFueSBkYXRhLiBUaGUKKyAgICAgYXBwbGljYXRpb24gc2hvdWxkIGRyb3AgdGhlIGNvbm5lY3Rpb24uICovCisgIGlmIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJiBOR0hUVFAyX0dPQVdBWV9URVJNX1NFTlQpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qCisgICAqIFVubGVzcyB0ZXJtaW5hdGlvbiBHT0FXQVkgaXMgc2VudCBvciByZWNlaXZlZCwgd2Ugd2FudCB0byB3cml0ZQorICAgKiBmcmFtZXMgaWYgdGhlcmUgaXMgcGVuZGluZyBvbmVzLiBJZiBwZW5kaW5nIGZyYW1lIGlzIHJlcXVlc3QvcHVzaAorICAgKiByZXNwb25zZSBIRUFERVJTIGFuZCBjb25jdXJyZW50IHN0cmVhbSBsaW1pdCBpcyByZWFjaGVkLCB3ZSBkb24ndAorICAgKiB3YW50IHRvIHdyaXRlIHRoZW0uCisgICAqLworICByZXR1cm4gc2Vzc2lvbi0+YW9iLml0ZW0gfHwgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3VyZ2VudCkgfHwKKyAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9yZWcpIHx8CisgICAgICAgICAoIW5naHR0cDJfcHFfZW1wdHkoJnNlc3Npb24tPnJvb3Qub2JxKSAmJgorICAgICAgICAgIHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZSA+IDApIHx8CisgICAgICAgICAobmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3N5bikgJiYKKyAgICAgICAgICAhc2Vzc2lvbl9pc19vdXRnb2luZ19jb25jdXJyZW50X3N0cmVhbXNfbWF4KHNlc3Npb24pKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfcGluZyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9wYXF1ZV9kYXRhKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmICgoZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSAmJgorICAgICAgc2Vzc2lvbi0+b2JxX2Zsb29kX2NvdW50ZXJfID49IHNlc3Npb24tPm1heF9vdXRib3VuZF9hY2spIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfRkxPT0RFRDsKKyAgfQorCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3BpbmdfaW5pdCgmZnJhbWUtPnBpbmcsIGZsYWdzLCBvcGFxdWVfZGF0YSk7CisKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX2l0ZW0oc2Vzc2lvbiwgaXRlbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX3BpbmdfZnJlZSgmZnJhbWUtPnBpbmcpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBpZiAoZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSB7CisgICAgKytzZXNzaW9uLT5vYnFfZmxvb2RfY291bnRlcl87CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfZ29hd2F5KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBsYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLCBjb25zdCB1aW50OF90ICpvcGFxdWVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3BhcXVlX2RhdGFfbGVuLCB1aW50OF90IGF1eF9mbGFncykgeworICBpbnQgcnY7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIHVpbnQ4X3QgKm9wYXF1ZV9kYXRhX2NvcHkgPSBOVUxMOworICBuZ2h0dHAyX2dvYXdheV9hdXhfZGF0YSAqYXV4X2RhdGE7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBpZiAobmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBsYXN0X3N0cmVhbV9pZCkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmIChvcGFxdWVfZGF0YV9sZW4pIHsKKyAgICBpZiAob3BhcXVlX2RhdGFfbGVuICsgOCA+IE5HSFRUUDJfTUFYX1BBWUxPQURMRU4pIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICAgIH0KKyAgICBvcGFxdWVfZGF0YV9jb3B5ID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgb3BhcXVlX2RhdGFfbGVuKTsKKyAgICBpZiAob3BhcXVlX2RhdGFfY29weSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgfQorICAgIG1lbWNweShvcGFxdWVfZGF0YV9jb3B5LCBvcGFxdWVfZGF0YSwgb3BhcXVlX2RhdGFfbGVuKTsKKyAgfQorCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgb3BhcXVlX2RhdGFfY29weSk7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgLyogbGFzdF9zdHJlYW1faWQgbXVzdCBub3QgYmUgaW5jcmVhc2VkIGZyb20gdGhlIHZhbHVlIHByZXZpb3VzbHkKKyAgICAgc2VudCAqLworICBsYXN0X3N0cmVhbV9pZCA9IG5naHR0cDJfbWluKGxhc3Rfc3RyZWFtX2lkLCBzZXNzaW9uLT5sb2NhbF9sYXN0X3N0cmVhbV9pZCk7CisKKyAgbmdodHRwMl9mcmFtZV9nb2F3YXlfaW5pdCgmZnJhbWUtPmdvYXdheSwgbGFzdF9zdHJlYW1faWQsIGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcXVlX2RhdGFfY29weSwgb3BhcXVlX2RhdGFfbGVuKTsKKworICBhdXhfZGF0YSA9ICZpdGVtLT5hdXhfZGF0YS5nb2F3YXk7CisgIGF1eF9kYXRhLT5mbGFncyA9IGF1eF9mbGFnczsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX2dvYXdheV9mcmVlKCZmcmFtZS0+Z29hd2F5LCBtZW0pOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRkX3dpbmRvd191cGRhdGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3dpbmRvd191cGRhdGVfaW5pdCgmZnJhbWUtPndpbmRvd191cGRhdGUsIGZsYWdzLCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd19zaXplX2luY3JlbWVudCk7CisKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX2l0ZW0oc2Vzc2lvbiwgaXRlbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX3dpbmRvd191cGRhdGVfZnJlZSgmZnJhbWUtPndpbmRvd191cGRhdGUpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXNzaW9uX2FwcGVuZF9pbmZsaWdodF9zZXR0aW5ncyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICpzZXR0aW5ncykgeworICBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICoqaTsKKworICBmb3IgKGkgPSAmc2Vzc2lvbi0+aW5mbGlnaHRfc2V0dGluZ3NfaGVhZDsgKmk7IGkgPSAmKCppKS0+bmV4dCkKKyAgICA7CisKKyAgKmkgPSBzZXR0aW5nczsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfc2V0dGluZ3MobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsIHNpemVfdCBuaXYpIHsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXZfY29weTsKKyAgc2l6ZV90IGk7CisgIGludCBydjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgbmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncyAqaW5mbGlnaHRfc2V0dGluZ3MgPSBOVUxMOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKGZsYWdzICYgTkdIVFRQMl9GTEFHX0FDSykgeworICAgIGlmIChuaXYgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgfQorCisgICAgaWYgKHNlc3Npb24tPm9icV9mbG9vZF9jb3VudGVyXyA+PSBzZXNzaW9uLT5tYXhfb3V0Ym91bmRfYWNrKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfRkxPT0RFRDsKKyAgICB9CisgIH0KKworICBpZiAoIW5naHR0cDJfaXZfY2hlY2soaXYsIG5pdikpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBpZiAobml2ID4gMCkgeworICAgIGl2X2NvcHkgPSBuZ2h0dHAyX2ZyYW1lX2l2X2NvcHkoaXYsIG5pdiwgbWVtKTsKKyAgICBpZiAoaXZfY29weSA9PSBOVUxMKSB7CisgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgfQorICB9IGVsc2UgeworICAgIGl2X2NvcHkgPSBOVUxMOworICB9CisKKyAgaWYgKChmbGFncyAmIE5HSFRUUDJfRkxBR19BQ0spID09IDApIHsKKyAgICBydiA9IGluZmxpZ2h0X3NldHRpbmdzX25ldygmaW5mbGlnaHRfc2V0dGluZ3MsIGl2LCBuaXYsIG1lbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIGFzc2VydChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSk7CisgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXZfY29weSk7CisgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV9zZXR0aW5nc19pbml0KCZmcmFtZS0+c2V0dGluZ3MsIGZsYWdzLCBpdl9jb3B5LCBuaXYpOworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICAvKiBUaGUgb25seSBleHBlY3RlZCBlcnJvciBpcyBmYXRhbCBvbmUgKi8KKyAgICBhc3NlcnQobmdodHRwMl9pc19mYXRhbChydikpOworCisgICAgaW5mbGlnaHRfc2V0dGluZ3NfZGVsKGluZmxpZ2h0X3NldHRpbmdzLCBtZW0pOworCisgICAgbmdodHRwMl9mcmFtZV9zZXR0aW5nc19mcmVlKCZmcmFtZS0+c2V0dGluZ3MsIG1lbSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworCisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgaWYgKGZsYWdzICYgTkdIVFRQMl9GTEFHX0FDSykgeworICAgICsrc2Vzc2lvbi0+b2JxX2Zsb29kX2NvdW50ZXJfOworICB9IGVsc2UgeworICAgIHNlc3Npb25fYXBwZW5kX2luZmxpZ2h0X3NldHRpbmdzKHNlc3Npb24sIGluZmxpZ2h0X3NldHRpbmdzKTsKKyAgfQorCisgIC8qIEV4dHJhY3QgTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIGFuZCBFTkFCTEVfUFVTSAorICAgICBoZXJlLiAgV2UgdXNlIGl0IHRvIHJlZnVzZSB0aGUgaW5jb21pbmcgc3RyZWFtIGFuZCBQVVNIX1BST01JU0UKKyAgICAgd2l0aCBSU1RfU1RSRUFNLiAqLworCisgIGZvciAoaSA9IG5pdjsgaSA+IDA7IC0taSkgeworICAgIGlmIChpdltpIC0gMV0uc2V0dGluZ3NfaWQgPT0gTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7CisgICAgICBzZXNzaW9uLT5wZW5kaW5nX2xvY2FsX21heF9jb25jdXJyZW50X3N0cmVhbSA9IGl2W2kgLSAxXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGZvciAoaSA9IG5pdjsgaSA+IDA7IC0taSkgeworICAgIGlmIChpdltpIC0gMV0uc2V0dGluZ3NfaWQgPT0gTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfUFVTSCkgeworICAgICAgc2Vzc2lvbi0+cGVuZGluZ19lbmFibGVfcHVzaCA9ICh1aW50OF90KWl2W2kgLSAxXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGZvciAoaSA9IG5pdjsgaSA+IDA7IC0taSkgeworICAgIGlmIChpdltpIC0gMV0uc2V0dGluZ3NfaWQgPT0gTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfQ09OTkVDVF9QUk9UT0NPTCkgeworICAgICAgc2Vzc2lvbi0+cGVuZGluZ19lbmFibGVfY29ubmVjdF9wcm90b2NvbCA9ICh1aW50OF90KWl2W2kgLSAxXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3BhY2tfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbWF4LCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZGF0YV9hdXhfZGF0YSAqYXV4X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKyAgdWludDMyX3QgZGF0YV9mbGFnczsKKyAgc3NpemVfdCBwYXlsb2FkbGVuOworICBzc2l6ZV90IHBhZGRlZF9wYXlsb2FkbGVuOworICBuZ2h0dHAyX2J1ZiAqYnVmOworICBzaXplX3QgbWF4X3BheWxvYWRsZW47CisKKyAgYXNzZXJ0KGJ1ZnMtPmhlYWQgPT0gYnVmcy0+Y3VyKTsKKworICBidWYgPSAmYnVmcy0+Y3VyLT5idWY7CisKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5yZWFkX2xlbmd0aF9jYWxsYmFjaykgeworCisgICAgcGF5bG9hZGxlbiA9IHNlc3Npb24tPmNhbGxiYWNrcy5yZWFkX2xlbmd0aF9jYWxsYmFjaygKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPmhkLnR5cGUsIHN0cmVhbS0+c3RyZWFtX2lkLCBzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemUsCisgICAgICAgIHN0cmVhbS0+cmVtb3RlX3dpbmRvd19zaXplLCBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2ZyYW1lX3NpemUsCisgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisKKyAgICBERUJVR0YoInNlbmQ6IHJlYWRfbGVuZ3RoX2NhbGxiYWNrPSV6ZFxuIiwgcGF5bG9hZGxlbik7CisKKyAgICBwYXlsb2FkbGVuID0gbmdodHRwMl9zZXNzaW9uX2VuZm9yY2VfZmxvd19jb250cm9sX2xpbWl0cyhzZXNzaW9uLCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZGxlbik7CisKKyAgICBERUJVR0YoInNlbmQ6IHJlYWRfbGVuZ3RoX2NhbGxiYWNrIGFmdGVyIGZsb3cgY29udHJvbD0lemRcbiIsIHBheWxvYWRsZW4pOworCisgICAgaWYgKHBheWxvYWRsZW4gPD0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorCisgICAgaWYgKChzaXplX3QpcGF5bG9hZGxlbiA+IG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikpIHsKKyAgICAgIC8qIFJlc2l6ZSB0aGUgY3VycmVudCBidWZmZXIocykuICBUaGUgcmVhc29uIHdoeSB3ZSBkbyArMSBmb3IKKyAgICAgICAgIGJ1ZmZlciBzaXplIGlzIGZvciBwb3NzaWJsZSBwYWRkaW5nIGZpZWxkLiAqLworICAgICAgcnYgPSBuZ2h0dHAyX2J1ZnNfcmVhbGxvYygmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkoTkdIVFRQMl9GUkFNRV9IRExFTiArIDEgKyBwYXlsb2FkbGVuKSk7CisKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIERFQlVHRigic2VuZDogcmVhbGxvYyBidWZmZXIgZmFpbGVkIHJ2PSVkIiwgcnYpOworICAgICAgICAvKiBJZiByZWFsbG9jYXRpb24gZmFpbGVkLCBvbGQgYnVmZmVycyBhcmUgc3RpbGwgaW4gdGFjdC4gIFNvCisgICAgICAgICAgIHVzZSBzYWZlIGxpbWl0LiAqLworICAgICAgICBwYXlsb2FkbGVuID0gKHNzaXplX3QpZGF0YW1heDsKKworICAgICAgICBERUJVR0YoInNlbmQ6IHVzZSBzYWZlIGxpbWl0IHBheWxvYWRsZW49JXpkIiwgcGF5bG9hZGxlbik7CisgICAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMgPT0gYnVmcyk7CisKKyAgICAgICAgYnVmID0gJmJ1ZnMtPmN1ci0+YnVmOworICAgICAgfQorICAgIH0KKyAgICBkYXRhbWF4ID0gKHNpemVfdClwYXlsb2FkbGVuOworICB9CisKKyAgLyogQ3VycmVudCBtYXggREFUQSBsZW5ndGggaXMgbGVzcyB0aGVuIGJ1ZmZlciBjaHVuayBzaXplICovCisgIGFzc2VydChuZ2h0dHAyX2J1Zl9hdmFpbChidWYpID49IGRhdGFtYXgpOworCisgIGRhdGFfZmxhZ3MgPSBOR0hUVFAyX0RBVEFfRkxBR19OT05FOworICBwYXlsb2FkbGVuID0gYXV4X2RhdGEtPmRhdGFfcHJkLnJlYWRfY2FsbGJhY2soCisgICAgICBzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLCBidWYtPnBvcywgZGF0YW1heCwgJmRhdGFfZmxhZ3MsCisgICAgICAmYXV4X2RhdGEtPmRhdGFfcHJkLnNvdXJjZSwgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKworICBpZiAocGF5bG9hZGxlbiA9PSBOR0hUVFAyX0VSUl9ERUZFUlJFRCB8fAorICAgICAgcGF5bG9hZGxlbiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFIHx8CisgICAgICBwYXlsb2FkbGVuID09IE5HSFRUUDJfRVJSX1BBVVNFKSB7CisgICAgREVCVUdGKCJzZW5kOiBEQVRBIHBvc3Rwb25lZCBkdWUgdG8gJXNcbiIsCisgICAgICAgICAgIG5naHR0cDJfc3RyZXJyb3IoKGludClwYXlsb2FkbGVuKSk7CisKKyAgICByZXR1cm4gKGludClwYXlsb2FkbGVuOworICB9CisKKyAgaWYgKHBheWxvYWRsZW4gPCAwIHx8IGRhdGFtYXggPCAoc2l6ZV90KXBheWxvYWRsZW4pIHsKKyAgICAvKiBUaGlzIGlzIHRoZSBlcnJvciBjb2RlIHdoZW4gY2FsbGJhY2sgaXMgZmFpbGVkLiAqLworICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgYnVmLT5sYXN0ID0gYnVmLT5wb3MgKyBwYXlsb2FkbGVuOworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIC8qIENsZWFyIGZsYWdzLCBiZWNhdXNlIHRoaXMgbWF5IGNvbnRhaW4gcHJldmlvdXMgZmxhZ3Mgb2YgcHJldmlvdXMKKyAgICAgREFUQSAqLworICBmcmFtZS0+aGQuZmxhZ3MgPSBOR0hUVFAyX0ZMQUdfTk9ORTsKKworICBpZiAoZGF0YV9mbGFncyAmIE5HSFRUUDJfREFUQV9GTEFHX0VPRikgeworICAgIGF1eF9kYXRhLT5lb2YgPSAxOworICAgIC8qIElmIE5HSFRUUDJfREFUQV9GTEFHX05PX0VORF9TVFJFQU0gaXMgc2V0LCBkb24ndCBzZXQKKyAgICAgICBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSAqLworICAgIGlmICgoYXV4X2RhdGEtPmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pICYmCisgICAgICAgIChkYXRhX2ZsYWdzICYgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fRU5EX1NUUkVBTSkgPT0gMCkgeworICAgICAgZnJhbWUtPmhkLmZsYWdzIHw9IE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNOworICAgIH0KKyAgfQorCisgIGlmIChkYXRhX2ZsYWdzICYgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fQ09QWSkgeworICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Muc2VuZF9kYXRhX2NhbGxiYWNrID09IE5VTEwpIHsKKyAgICAgIERFQlVHRigiTkdIVFRQMl9EQVRBX0ZMQUdfTk9fQ09QWSByZXF1aXJlcyBzZW5kX2RhdGFfY2FsbGJhY2sgc2V0XG4iKTsKKworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICAgIGF1eF9kYXRhLT5ub19jb3B5ID0gMTsKKyAgfQorCisgIGZyYW1lLT5oZC5sZW5ndGggPSAoc2l6ZV90KXBheWxvYWRsZW47CisgIGZyYW1lLT5kYXRhLnBhZGxlbiA9IDA7CisKKyAgbWF4X3BheWxvYWRsZW4gPSBuZ2h0dHAyX21pbihkYXRhbWF4LCBmcmFtZS0+aGQubGVuZ3RoICsgTkdIVFRQMl9NQVhfUEFETEVOKTsKKworICBwYWRkZWRfcGF5bG9hZGxlbiA9CisgICAgICBzZXNzaW9uX2NhbGxfc2VsZWN0X3BhZGRpbmcoc2Vzc2lvbiwgZnJhbWUsIG1heF9wYXlsb2FkbGVuKTsKKworICBpZiAobmdodHRwMl9pc19mYXRhbCgoaW50KXBhZGRlZF9wYXlsb2FkbGVuKSkgeworICAgIHJldHVybiAoaW50KXBhZGRlZF9wYXlsb2FkbGVuOworICB9CisKKyAgZnJhbWUtPmRhdGEucGFkbGVuID0gKHNpemVfdCkocGFkZGVkX3BheWxvYWRsZW4gLSBwYXlsb2FkbGVuKTsKKworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZmcmFtZS0+aGQpOworCisgIHJ2ID0gbmdodHRwMl9mcmFtZV9hZGRfcGFkKGJ1ZnMsICZmcmFtZS0+aGQsIGZyYW1lLT5kYXRhLnBhZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV4X2RhdGEtPm5vX2NvcHkpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJlc2NoZWR1bGVfc3RyZWFtKHN0cmVhbSk7CisKKyAgaWYgKGZyYW1lLT5oZC5sZW5ndGggPT0gMCAmJiAoZGF0YV9mbGFncyAmIE5HSFRUUDJfREFUQV9GTEFHX0VPRikgJiYKKyAgICAgIChkYXRhX2ZsYWdzICYgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fRU5EX1NUUkVBTSkpIHsKKyAgICAvKiBEQVRBIHBheWxvYWQgbGVuZ3RoIGlzIDAsIGFuZCBEQVRBIGZyYW1lIGRvZXMgbm90IGJlYXIKKyAgICAgICBFTkRfU1RSRUFNLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBubyBwb2ludCB0byBzZW5kIDAgbGVuZ3RoCisgICAgICAgREFUQSBmcmFtZS4gKi8KKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FOQ0VMOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKm5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3VzZXJfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSkgeworICAgIHJldHVybiBzdHJlYW0tPnN0cmVhbV91c2VyX2RhdGE7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSkgeworICAgIHN0cmVhbS0+c3RyZWFtX3VzZXJfZGF0YSA9IHN0cmVhbV91c2VyX2RhdGE7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoc2Vzc2lvbi0+c2VydmVyIHx8ICFuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbV9pZCkgfHwKKyAgICAgICFuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2Jfc3luKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgZnJhbWUgPSAmbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3N5biktPmZyYW1lOworICBhc3NlcnQoZnJhbWUtPmhkLnR5cGUgPT0gTkdIVFRQMl9IRUFERVJTKTsKKworICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA+IHN0cmVhbV9pZCB8fAorICAgICAgKHVpbnQzMl90KXN0cmVhbV9pZCA+PSBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgZm9yIChpdGVtID0gc2Vzc2lvbi0+b2Jfc3luLmhlYWQ7IGl0ZW07IGl0ZW0gPSBpdGVtLT5xbmV4dCkgeworICAgIGlmIChpdGVtLT5mcmFtZS5oZC5zdHJlYW1faWQgPCBzdHJlYW1faWQpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChpdGVtLT5mcmFtZS5oZC5zdHJlYW1faWQgPiBzdHJlYW1faWQpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGl0ZW0tPmF1eF9kYXRhLmhlYWRlcnMuc3RyZWFtX3VzZXJfZGF0YSA9IHN0cmVhbV91c2VyX2RhdGE7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSA9PSBOVUxMIHx8ICFuZ2h0dHAyX3N0cmVhbV9jaGVja19kZWZlcnJlZF9pdGVtKHN0cmVhbSkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHJ2ID0gbmdodHRwMl9zdHJlYW1fcmVzdW1lX2RlZmVycmVkX2l0ZW0oc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfVVNFUik7CisKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X291dGJvdW5kX3F1ZXVlX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3NpemUoJnNlc3Npb24tPm9iX3VyZ2VudCkgKworICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9zaXplKCZzZXNzaW9uLT5vYl9yZWcpICsKKyAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfc2l6ZSgmc2Vzc2lvbi0+b2Jfc3luKTsKKyAgLyogVE9ETyBhY2NvdW50IGZvciBpdGVtIGF0dGFjaGVkIHRvIHN0cmVhbSAqLworfQorCitpbnQzMl90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9lZmZlY3RpdmVfcmVjdl9kYXRhX2xlbmd0aChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuIHN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSA8IDAgPyAwIDogc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplOworfQorCitpbnQzMl90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9lZmZlY3RpdmVfbG9jYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZTsKK30KKworaW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9sb2NhbF93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIGludDMyX3Qgc2l6ZTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgc2l6ZSA9IHN0cmVhbS0+bG9jYWxfd2luZG93X3NpemUgLSBzdHJlYW0tPnJlY3Zfd2luZG93X3NpemU7CisKKyAgLyogc2l6ZSBjb3VsZCBiZSBuZWdhdGl2ZSBpZiBsb2NhbCBlbmRwb2ludCByZWR1Y2VkCisgICAgIFNFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkUgKi8KKyAgaWYgKHNpemUgPCAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gc2l6ZTsKK30KKworaW50MzJfdAorbmdodHRwMl9zZXNzaW9uX2dldF9lZmZlY3RpdmVfcmVjdl9kYXRhX2xlbmd0aChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIHNlc3Npb24tPnJlY3Zfd2luZG93X3NpemUgPCAwID8gMCA6IHNlc3Npb24tPnJlY3Zfd2luZG93X3NpemU7Cit9CisKK2ludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfZWZmZWN0aXZlX2xvY2FsX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemU7Cit9CisKK2ludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9sb2NhbF93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3dpbmRvd19zaXplIC0gc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZTsKK30KKworaW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yZW1vdGVfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSBjYW4gYmUgbmVnYXRpdmUgd2hlbgorICAgICBTRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFIGlzIGNoYW5nZWQuICovCisgIHJldHVybiBuZ2h0dHAyX21heCgwLCBzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSk7Cit9CisKK2ludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9yZW1vdGVfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemU7Cit9CisKK3VpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfcmVtb3RlX3NldHRpbmdzKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc2V0dGluZ3NfaWQgaWQpIHsKKyAgc3dpdGNoIChpZCkgeworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5oZWFkZXJfdGFibGVfc2l6ZTsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9QVVNIOgorICAgIHJldHVybiBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuZW5hYmxlX3B1c2g7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOgorICAgIHJldHVybiBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtczsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5pbml0aWFsX3dpbmRvd19zaXplOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0ZSQU1FX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfZnJhbWVfc2l6ZTsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9IRUFERVJfTElTVF9TSVpFOgorICAgIHJldHVybiBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2hlYWRlcl9saXN0X3NpemU7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfQ09OTkVDVF9QUk9UT0NPTDoKKyAgICByZXR1cm4gc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmVuYWJsZV9jb25uZWN0X3Byb3RvY29sOworICB9CisKKyAgYXNzZXJ0KDApOworICBhYm9ydCgpOyAvKiBpZiBOREVCVUcgaXMgc2V0ICovCit9CisKK3VpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfbG9jYWxfc2V0dGluZ3MobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3NldHRpbmdzX2lkIGlkKSB7CisgIHN3aXRjaCAoaWQpIHsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFOgorICAgIHJldHVybiBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5oZWFkZXJfdGFibGVfc2l6ZTsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9QVVNIOgorICAgIHJldHVybiBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5lbmFibGVfcHVzaDsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVM6CisgICAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXM7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOgorICAgIHJldHVybiBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5pbml0aWFsX3dpbmRvd19zaXplOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0ZSQU1FX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9mcmFtZV9zaXplOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0hFQURFUl9MSVNUX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9oZWFkZXJfbGlzdF9zaXplOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX0NPTk5FQ1RfUFJPVE9DT0w6CisgICAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmVuYWJsZV9jb25uZWN0X3Byb3RvY29sOworICB9CisKKyAgYXNzZXJ0KDApOworICBhYm9ydCgpOyAvKiBpZiBOREVCVUcgaXMgc2V0ICovCit9CisKK3N0YXRpYyBpbnQgbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGVfaW50ZXJuYWwobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzZXR0aW5nc19wYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2V0dGluZ3NfcGF5bG9hZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX2ZyYW1lIGZyYW1lOworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdjsKKyAgc2l6ZV90IG5pdjsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgcHJpX3NwZWM7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBpZiAoKCFzZXNzaW9uLT5zZXJ2ZXIgJiYgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgIT0gMSkgfHwKKyAgICAgIChzZXNzaW9uLT5zZXJ2ZXIgJiYgc2Vzc2lvbi0+bGFzdF9yZWN2X3N0cmVhbV9pZCA+PSAxKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9QUk9UTzsKKyAgfQorICBpZiAoc2V0dGluZ3NfcGF5bG9hZGxlbiAlIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKyAgcnYgPSBuZ2h0dHAyX2ZyYW1lX3VucGFja19zZXR0aW5nc19wYXlsb2FkMigmaXYsICZuaXYsIHNldHRpbmdzX3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3NfcGF5bG9hZGxlbiwgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBpZiAoc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgbmdodHRwMl9mcmFtZV9oZF9pbml0KCZmcmFtZS5oZCwgc2V0dGluZ3NfcGF5bG9hZGxlbiwgTkdIVFRQMl9TRVRUSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9GTEFHX05PTkUsIDApOworICAgIGZyYW1lLnNldHRpbmdzLml2ID0gaXY7CisgICAgZnJhbWUuc2V0dGluZ3Mubml2ID0gbml2OworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX29uX3NldHRpbmdzX3JlY2VpdmVkKHNlc3Npb24sICZmcmFtZSwgMSAvKiBObyBBQ0sgKi8pOworICB9IGVsc2UgeworICAgIHJ2ID0gbmdodHRwMl9zdWJtaXRfc2V0dGluZ3Moc2Vzc2lvbiwgTkdIVFRQMl9GTEFHX05PTkUsIGl2LCBuaXYpOworICB9CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdik7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjX2RlZmF1bHRfaW5pdCgmcHJpX3NwZWMpOworCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9vcGVuX3N0cmVhbSgKKyAgICAgIHNlc3Npb24sIDEsIE5HSFRUUDJfU1RSRUFNX0ZMQUdfTk9ORSwgJnByaV9zcGVjLCBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HLAorICAgICAgc2Vzc2lvbi0+c2VydmVyID8gTlVMTCA6IHN0cmVhbV91c2VyX2RhdGEpOworICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICAvKiBXZSBkb24ndCBjYWxsIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfY2xvc2VkX3N0cmVhbSgpLCBzaW5jZSB0aGlzCisgICAgIHNob3VsZCBiZSB0aGUgZmlyc3Qgc3RyZWFtIG9wZW4uICovCisKKyAgaWYgKHNlc3Npb24tPnNlcnZlcikgeworICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1JEKTsKKyAgICBzZXNzaW9uLT5sYXN0X3JlY3Zfc3RyZWFtX2lkID0gMTsKKyAgICBzZXNzaW9uLT5sYXN0X3Byb2Nfc3RyZWFtX2lkID0gMTsKKyAgfSBlbHNlIHsKKyAgICBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihzdHJlYW0sIE5HSFRUUDJfU0hVVF9XUik7CisgICAgc2Vzc2lvbi0+bGFzdF9zZW50X3N0cmVhbV9pZCA9IDE7CisgICAgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgKz0gMjsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl91cGdyYWRlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzZXR0aW5nc19wYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZXR0aW5nc19wYXlsb2FkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGVfaW50ZXJuYWwoc2Vzc2lvbiwgc2V0dGluZ3NfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc19wYXlsb2FkbGVuLCBzdHJlYW1fdXNlcl9kYXRhKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCAxKTsKKyAgYXNzZXJ0KHN0cmVhbSk7CisKKyAgLyogV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCByZXF1ZXN0IGhlYWRlciBmaWVsZHMgd2hlbiBVcGdyYWRlCisgICAgIHdhcyBoYXBwZW5lZC4gIFNvIHdlIGRvbid0IGtub3cgdGhlIHJlcXVlc3QgbWV0aG9kIGhlcmUuICBJZgorICAgICByZXF1ZXN0IG1ldGhvZCBpcyBIRUFELCB3ZSBoYXZlIGEgdHJvdWJsZSBiZWNhdXNlIHdlIG1heSBoYXZlCisgICAgIG5vbnplcm8gY29udGVudC1sZW5ndGggaGVhZGVyIGZpZWxkIGluIHJlc3BvbnNlIGhlYWRlcnMsIGFuZCB3ZQorICAgICB3aWxsIGdvaW5nIHRvIGNoZWNrIGl0IGFnYWluc3QgdGhlIGFjdHVhbCBEQVRBIGZyYW1lcywgYnV0IHdlIG1heQorICAgICBnZXQgbWlzbWF0Y2ggYmVjYXVzZSBIRUFEIHJlc3BvbnNlIGJvZHkgbXVzdCBiZSBlbXB0eS4gIEJlY2F1c2UKKyAgICAgb2YgdGhpcyByZWFzb24sIG5naHR0cDJfc2Vzc2lvbl91cGdyYWRlKCkgd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3IKKyAgICAgb2YgbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGUyKCksIHdoaWNoIGhhcyB8aGVhZF9yZXF1ZXN0fCBwYXJhbWV0ZXIKKyAgICAgdG8gaW5kaWNhdGUgdGhhdCByZXF1ZXN0IG1ldGhvZCBpcyBIRUFEIG9yIG5vdC4gKi8KKyAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfVVBHUkFERV9XT1JLQVJPVU5EOworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl91cGdyYWRlMihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNldHRpbmdzX3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZXR0aW5nc19wYXlsb2FkbGVuLCBpbnQgaGVhZF9yZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl91cGdyYWRlX2ludGVybmFsKHNlc3Npb24sIHNldHRpbmdzX3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3NfcGF5bG9hZGxlbiwgc3RyZWFtX3VzZXJfZGF0YSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgMSk7CisgIGFzc2VydChzdHJlYW0pOworCisgIGlmIChoZWFkX3JlcXVlc3QpIHsKKyAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9IRUFEOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9sb2NhbF9jbG9zZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworCisgIGlmICghc3RyZWFtKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfV1IpICE9IDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yZW1vdGVfY2xvc2UobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9SRCkgIT0gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9jb25zdW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGlmIChzdHJlYW1faWQgPT0gMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaWYgKCEoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURTsKKyAgfQorCisgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfY29ubmVjdGlvbl9jb25zdW1lZF9zaXplKHNlc3Npb24sIHNpemUpOworCisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfc3RyZWFtX2NvbnN1bWVkX3NpemUoc2Vzc2lvbiwgc3RyZWFtLCBzaXplKTsKKworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9jb25zdW1lX2Nvbm5lY3Rpb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBzaXplX3Qgc2l6ZSkgeworICBpbnQgcnY7CisKKyAgaWYgKCEoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURTsKKyAgfQorCisgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfY29ubmVjdGlvbl9jb25zdW1lZF9zaXplKHNlc3Npb24sIHNpemUpOworCisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWVfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmICghKHNlc3Npb24tPm9wdF9mbGFncyAmIE5HSFRUUDJfT1BUTUFTS19OT19BVVRPX1dJTkRPV19VUERBVEUpKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEU7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworCisgIGlmICghc3RyZWFtKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBydiA9IHNlc3Npb25fdXBkYXRlX3N0cmVhbV9jb25zdW1lZF9zaXplKHNlc3Npb24sIHN0cmVhbSwgc2l6ZSk7CisKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fc2V0X25leHRfc3RyZWFtX2lkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbmV4dF9zdHJlYW1faWQpIHsKKyAgaWYgKG5leHRfc3RyZWFtX2lkIDw9IDAgfHwKKyAgICAgIHNlc3Npb24tPm5leHRfc3RyZWFtX2lkID4gKHVpbnQzMl90KW5leHRfc3RyZWFtX2lkKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpZiAoc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgaWYgKG5leHRfc3RyZWFtX2lkICUgMikgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgfQorICB9IGVsc2UgaWYgKG5leHRfc3RyZWFtX2lkICUgMiA9PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCA9ICh1aW50MzJfdCluZXh0X3N0cmVhbV9pZDsKKyAgcmV0dXJuIDA7Cit9CisKK3VpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfbmV4dF9zdHJlYW1faWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZDsKK30KKworaW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X2xhc3RfcHJvY19zdHJlYW1faWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5sYXN0X3Byb2Nfc3RyZWFtX2lkOworfQorCituZ2h0dHAyX3N0cmVhbSAqbmdodHRwMl9zZXNzaW9uX2ZpbmRfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuICZzZXNzaW9uLT5yb290OworICB9CisKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBzdHJlYW1faWQpOworfQorCituZ2h0dHAyX3N0cmVhbSAqbmdodHRwMl9zZXNzaW9uX2dldF9yb290X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuICZzZXNzaW9uLT5yb290OworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NoZWNrX3NlcnZlcl9zZXNzaW9uKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gc2Vzc2lvbi0+c2VydmVyOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NoYW5nZV9zdHJlYW1fcHJpb3JpdHkoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjIHByaV9zcGVjX2NvcHk7CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwIHx8IHN0cmVhbV9pZCA9PSBwcmlfc3BlYy0+c3RyZWFtX2lkKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yYXcoc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHByaV9zcGVjX2NvcHkgPSAqcHJpX3NwZWM7CisgIG5naHR0cDJfcHJpb3JpdHlfc3BlY19ub3JtYWxpemVfd2VpZ2h0KCZwcmlfc3BlY19jb3B5KTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9yZXByaW9yaXRpemVfc3RyZWFtKHNlc3Npb24sIHN0cmVhbSwgJnByaV9zcGVjX2NvcHkpOworCisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIC8qIFdlIGRvbid0IGludGVudGlvbmFsbHkgY2FsbCBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2lkbGVfc3RyZWFtKCkKKyAgICAgc28gdGhhdCBpZGxlIHN0cmVhbSBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24sIGFuZCBleGlzdGluZyBvbmVzCisgICAgIGFyZSBrZXB0IGZvciBhcHBsaWNhdGlvbi4gIFdlIHdpbGwgYWRqdXN0IG51bWJlciBvZiBpZGxlIHN0cmVhbQorICAgICBpbiBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQgb3IgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2IGlzCisgICAgIGNhbGxlZC4gKi8KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fY3JlYXRlX2lkbGVfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYykgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgcHJpX3NwZWNfY29weTsKKworICBpZiAoc3RyZWFtX2lkID09IDAgfHwgc3RyZWFtX2lkID09IHByaV9zcGVjLT5zdHJlYW1faWQgfHwKKyAgICAgICFzZXNzaW9uX2RldGVjdF9pZGxlX3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yYXcoc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgcHJpX3NwZWNfY29weSA9ICpwcmlfc3BlYzsKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjX25vcm1hbGl6ZV93ZWlnaHQoJnByaV9zcGVjX2NvcHkpOworCisgIHN0cmVhbSA9CisgICAgICBuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkLCBOR0hUVFAyX1NUUkVBTV9GTEFHX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaV9zcGVjX2NvcHksIE5HSFRUUDJfU1RSRUFNX0lETEUsIE5VTEwpOworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIC8qIFdlIGRvbid0IGludGVudGlvbmFsbHkgY2FsbCBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2lkbGVfc3RyZWFtKCkKKyAgICAgc28gdGhhdCBpZGxlIHN0cmVhbSBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24sIGFuZCBleGlzdGluZyBvbmVzCisgICAgIGFyZSBrZXB0IGZvciBhcHBsaWNhdGlvbi4gIFdlIHdpbGwgYWRqdXN0IG51bWJlciBvZiBpZGxlIHN0cmVhbQorICAgICBpbiBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQgb3IgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2IGlzCisgICAgIGNhbGxlZC4gKi8KKyAgcmV0dXJuIDA7Cit9CisKK3NpemVfdAorbmdodHRwMl9zZXNzaW9uX2dldF9oZF9pbmZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIG5naHR0cDJfaGRfaW5mbGF0ZV9nZXRfZHluYW1pY190YWJsZV9zaXplKCZzZXNzaW9uLT5oZF9pbmZsYXRlcik7Cit9CisKK3NpemVfdAorbmdodHRwMl9zZXNzaW9uX2dldF9oZF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIG5naHR0cDJfaGRfZGVmbGF0ZV9nZXRfZHluYW1pY190YWJsZV9zaXplKCZzZXNzaW9uLT5oZF9kZWZsYXRlcik7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX3NldF91c2VyX2RhdGEobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB2b2lkICp1c2VyX2RhdGEpIHsKKyAgc2Vzc2lvbi0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zZXNzaW9uLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3Nlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGVhZDljCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zZXNzaW9uLmgKQEAgLTAsMCArMSw5MDEgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX1NFU1NJT05fSAorI2RlZmluZSBOR0hUVFAyX1NFU1NJT05fSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisjaW5jbHVkZSAibmdodHRwMl9tYXAuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2ZyYW1lLmgiCisjaW5jbHVkZSAibmdodHRwMl9oZC5oIgorI2luY2x1ZGUgIm5naHR0cDJfc3RyZWFtLmgiCisjaW5jbHVkZSAibmdodHRwMl9vdXRib3VuZF9pdGVtLmgiCisjaW5jbHVkZSAibmdodHRwMl9pbnQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2J1Zi5oIgorI2luY2x1ZGUgIm5naHR0cDJfY2FsbGJhY2tzLmgiCisjaW5jbHVkZSAibmdodHRwMl9tZW0uaCIKKworLyogVGhlIGdsb2JhbCB2YXJpYWJsZSBmb3IgdGVzdHMgd2hlcmUgd2Ugd2FudCB0byBkaXNhYmxlIHN0cmljdAorICAgcHJlZmFjZSBoYW5kbGluZy4gKi8KK2V4dGVybiBpbnQgbmdodHRwMl9lbmFibGVfc3RyaWN0X3ByZWZhY2U7CisKKy8qCisgKiBPcHRpb24gZmxhZ3MuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfT1BUTUFTS19OT19BVVRPX1dJTkRPV19VUERBVEUgPSAxIDw8IDAsCisgIE5HSFRUUDJfT1BUTUFTS19OT19SRUNWX0NMSUVOVF9NQUdJQyA9IDEgPDwgMSwKKyAgTkdIVFRQMl9PUFRNQVNLX05PX0hUVFBfTUVTU0FHSU5HID0gMSA8PCAyLAorICBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19QSU5HX0FDSyA9IDEgPDwgMywKKyAgTkdIVFRQMl9PUFRNQVNLX05PX0NMT1NFRF9TVFJFQU1TID0gMSA8PCA0Cit9IG5naHR0cDJfb3B0bWFzazsKKworLyoKKyAqIGJpdG1hc2sgZm9yIGJ1aWx0LWluIHR5cGUgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IGhhbmRsaW5nIGZvciB0aGF0CisgKiB0eXBlIG9mIHRoZSBmcmFtZS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9UWVBFTUFTS19OT05FID0gMCwKKyAgTkdIVFRQMl9UWVBFTUFTS19BTFRTVkMgPSAxIDw8IDAsCisgIE5HSFRUUDJfVFlQRU1BU0tfT1JJR0lOID0gMSA8PCAxCit9IG5naHR0cDJfdHlwZW1hc2s7CisKK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfT0JfUE9QX0lURU0sCisgIE5HSFRUUDJfT0JfU0VORF9EQVRBLAorICBOR0hUVFAyX09CX1NFTkRfTk9fQ09QWSwKKyAgTkdIVFRQMl9PQl9TRU5EX0NMSUVOVF9NQUdJQworfSBuZ2h0dHAyX291dGJvdW5kX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9idWZzIGZyYW1lYnVmczsKKyAgbmdodHRwMl9vdXRib3VuZF9zdGF0ZSBzdGF0ZTsKK30gbmdodHRwMl9hY3RpdmVfb3V0Ym91bmRfaXRlbTsKKworLyogQnVmZmVyIGxlbmd0aCBmb3IgaW5ib3VuZCByYXcgYnl0ZSBzdHJlYW0gdXNlZCBpbgorICAgbmdodHRwMl9zZXNzaW9uX3JlY3YoKS4gKi8KKyNkZWZpbmUgTkdIVFRQMl9JTkJPVU5EX0JVRkZFUl9MRU5HVEggMTYzODQKKworLyogVGhlIGRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgcmVzZXJ2ZWQgc3RyZWFtcyAqLworI2RlZmluZSBOR0hUVFAyX01BWF9JTkNPTUlOR19SRVNFUlZFRF9TVFJFQU1TIDIwMAorCisvKiBFdmVuIGlmIHdlIGhhdmUgbGVzcyBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIHRoYW4gdGhpcworICAgbnVtYmVyLCB3ZSBrZWVwIE5HSFRUUDJfTUlOX0lETEVfU1RSRUFNUyBzdHJlYW1zIGluIGlkbGUgc3RhdGUgKi8KKyNkZWZpbmUgTkdIVFRQMl9NSU5fSURMRV9TVFJFQU1TIDE2CisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpbiBvdXRib3VuZCBxdWV1ZSwgd2hpY2ggaXMgY29uc2lkZXJlZAorICAgYXMgZmxvb2RpbmcgY2F1c2VkIGJ5IHBlZXIuICBBbGwgZnJhbWVzIGFyZSBub3QgY29uc2lkZXJlZCBoZXJlLgorICAgV2Ugb25seSBjb25zaWRlciBQSU5HICsgQUNLIGFuZCBTRVRUSU5HUyArIEFDSy4gIFRoaXMgaXMgYmVjYXVzZQorICAgdGhleSBib3RoIGFyZSByZXNwb25zZSB0byB0aGUgZnJhbWUgaW5pdGlhdGVkIGJ5IHBlZXIgYW5kIHBlZXIgY2FuCisgICBzZW5kIGFzIG1hbnkgb2YgdGhlbSBhcyB0aGV5IHdhbnQuICBJZiBwZWVyIGRvZXMgbm90IHJlYWQgbmV0d29yaywKKyAgIHJlc3BvbnNlIGZyYW1lcyBhcmUgc3RhY2tlZCB1cCwgd2hpY2ggbGVhZHMgdG8gbWVtb3J5IGV4aGF1c3Rpb24uCisgICBUaGUgdmFsdWUgc2VsZWN0ZWQgaGVyZSBpcyBhcmJpdHJhcnksIGJ1dCBzYWZlIHZhbHVlIGFuZCBpZiB3ZSBoYXZlCisgICB0aGVzZSBmcmFtZXMgaW4gdGhpcyBudW1iZXIsIGl0IGlzIGNvbnNpZGVyZWQgc3VzcGljaW91cy4gKi8KKyNkZWZpbmUgTkdIVFRQMl9ERUZBVUxUX01BWF9PQlFfRkxPT0RfSVRFTSAxMDAwCisKKy8qIFRoZSBkZWZhdWx0IHZhbHVlIG9mIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgc3RyZWFtcy4gKi8KKyNkZWZpbmUgTkdIVFRQMl9ERUZBVUxUX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgMHhmZmZmZmZmZnUKKworLyogSW50ZXJuYWwgc3RhdGUgd2hlbiByZWNlaXZpbmcgaW5jb21pbmcgZnJhbWUgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qIFJlY2VpdmluZyBmcmFtZSBoZWFkZXIgKi8KKyAgTkdIVFRQMl9JQl9SRUFEX0NMSUVOVF9NQUdJQywKKyAgTkdIVFRQMl9JQl9SRUFEX0ZJUlNUX1NFVFRJTkdTLAorICBOR0hUVFAyX0lCX1JFQURfSEVBRCwKKyAgTkdIVFRQMl9JQl9SRUFEX05CWVRFLAorICBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLLAorICBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0ssCisgIE5HSFRUUDJfSUJfSUdOX1BBWUxPQUQsCisgIE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUiwKKyAgTkdIVFRQMl9JQl9SRUFEX1NFVFRJTkdTLAorICBOR0hUVFAyX0lCX1JFQURfR09BV0FZX0RFQlVHLAorICBOR0hUVFAyX0lCX0VYUEVDVF9DT05USU5VQVRJT04sCisgIE5HSFRUUDJfSUJfSUdOX0NPTlRJTlVBVElPTiwKKyAgTkdIVFRQMl9JQl9SRUFEX1BBRF9EQVRBLAorICBOR0hUVFAyX0lCX1JFQURfREFUQSwKKyAgTkdIVFRQMl9JQl9JR05fREFUQSwKKyAgTkdIVFRQMl9JQl9JR05fQUxMLAorICBOR0hUVFAyX0lCX1JFQURfQUxUU1ZDX1BBWUxPQUQsCisgIE5HSFRUUDJfSUJfUkVBRF9PUklHSU5fUEFZTE9BRCwKKyAgTkdIVFRQMl9JQl9SRUFEX0VYVEVOU0lPTl9QQVlMT0FECit9IG5naHR0cDJfaW5ib3VuZF9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX2ZyYW1lIGZyYW1lOworICAvKiBTdG9yYWdlIGZvciBleHRlbnNpb24gZnJhbWUgcGF5bG9hZC4gIGZyYW1lLT5leHQucGF5bG9hZCBwb2ludHMKKyAgICAgdG8gdGhpcyBzdHJ1Y3R1cmUgdG8gYXZvaWQgZnJlcXVlbnQgbWVtb3J5IGFsbG9jYXRpb24uICovCisgIG5naHR0cDJfZXh0X2ZyYW1lX3BheWxvYWQgZXh0X2ZyYW1lX3BheWxvYWQ7CisgIC8qIFRoZSByZWNlaXZlZCBTRVRUSU5HUyBlbnRyeS4gIEZvciB0aGUgc3RhbmRhcmQgc2V0dGluZ3MgZW50cmllcywKKyAgICAgd2Ugb25seSBrZWVwIHRoZSBsYXN0IHNlZW4gdmFsdWUuICBGb3IKKyAgICAgU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkUsIHdlIGFsc28ga2VlcCBtaW5pbXVtIHZhbHVlIGluIHRoZQorICAgICBsYXN0IGluZGV4LiAqLworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdjsKKyAgLyogYnVmZmVyIHBvaW50ZXJzIHRvIHNtYWxsIGJ1ZmZlciwgcmF3X3NidWYgKi8KKyAgbmdodHRwMl9idWYgc2J1ZjsKKyAgLyogYnVmZmVyIHBvaW50ZXJzIHRvIGxhcmdlIGJ1ZmZlciwgcmF3X2xidWYgKi8KKyAgbmdodHRwMl9idWYgbGJ1ZjsKKyAgLyogTGFyZ2UgYnVmZmVyLCBtYWxsb2NlZCBvbiBkZW1hbmQgKi8KKyAgdWludDhfdCAqcmF3X2xidWY7CisgIC8qIFRoZSBudW1iZXIgb2YgZW50cnkgZmlsbGVkIGluIHxpdnwgKi8KKyAgc2l6ZV90IG5pdjsKKyAgLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIHxpdnwgY2FuIHN0b3JlLiAqLworICBzaXplX3QgbWF4X25pdjsKKyAgLyogSG93IG1hbnkgYnl0ZXMgd2Ugc3RpbGwgbmVlZCB0byByZWNlaXZlIGZvciBjdXJyZW50IGZyYW1lICovCisgIHNpemVfdCBwYXlsb2FkbGVmdDsKKyAgLyogcGFkZGluZyBsZW5ndGggZm9yIHRoZSBjdXJyZW50IGZyYW1lICovCisgIHNpemVfdCBwYWRsZW47CisgIG5naHR0cDJfaW5ib3VuZF9zdGF0ZSBzdGF0ZTsKKyAgLyogU21hbGwgYnVmZmVyLiAgQ3VycmVudGx5IHRoZSBsYXJnZXN0IGNvbnRpZ3VvdXMgY2h1bmsgdG8gYnVmZmVyCisgICAgIGlzIGZyYW1lIGhlYWRlci4gIFdlIGJ1ZmZlciBwYXJ0IG9mIHBheWxvYWQsIGJ1dCB0aGV5IGFyZSBzbWFsbGVyCisgICAgIHRoYW4gZnJhbWUgaGVhZGVyLiAqLworICB1aW50OF90IHJhd19zYnVmW05HSFRUUDJfRlJBTUVfSERMRU5dOworfSBuZ2h0dHAyX2luYm91bmRfZnJhbWU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDMyX3QgaGVhZGVyX3RhYmxlX3NpemU7CisgIHVpbnQzMl90IGVuYWJsZV9wdXNoOworICB1aW50MzJfdCBtYXhfY29uY3VycmVudF9zdHJlYW1zOworICB1aW50MzJfdCBpbml0aWFsX3dpbmRvd19zaXplOworICB1aW50MzJfdCBtYXhfZnJhbWVfc2l6ZTsKKyAgdWludDMyX3QgbWF4X2hlYWRlcl9saXN0X3NpemU7CisgIHVpbnQzMl90IGVuYWJsZV9jb25uZWN0X3Byb3RvY29sOworfSBuZ2h0dHAyX3NldHRpbmdzX3N0b3JhZ2U7CisKK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfR09BV0FZX05PTkUgPSAwLAorICAvKiBGbGFnIG1lYW5zIHRoYXQgY29ubmVjdGlvbiBzaG91bGQgYmUgdGVybWluYXRlZCBhZnRlciBzZW5kaW5nIEdPQVdBWS4gKi8KKyAgTkdIVFRQMl9HT0FXQVlfVEVSTV9PTl9TRU5EID0gMHgxLAorICAvKiBGbGFnIG1lYW5zIEdPQVdBWSB0byB0ZXJtaW5hdGUgc2Vzc2lvbiBoYXMgYmVlbiBzZW50ICovCisgIE5HSFRUUDJfR09BV0FZX1RFUk1fU0VOVCA9IDB4MiwKKyAgLyogRmxhZyBtZWFucyBHT0FXQVkgd2FzIHNlbnQgKi8KKyAgTkdIVFRQMl9HT0FXQVlfU0VOVCA9IDB4NCwKKyAgLyogRmxhZyBtZWFucyBHT0FXQVkgd2FzIHJlY2VpdmVkICovCisgIE5HSFRUUDJfR09BV0FZX1JFQ1YgPSAweDgKK30gbmdodHRwMl9nb2F3YXlfZmxhZzsKKworLyogbmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncyBzdG9yZXMgdGhlIFNFVFRJTkdTIGVudHJpZXMgd2hpY2ggbG9jYWwKKyAgIGVuZHBvaW50IGhhcyBzZW50IHRvIHRoZSByZW1vdGUgZW5kcG9pbnQsIGFuZCBoYXMgbm90IHJlY2VpdmVkIEFDSworICAgeWV0LiAqLworc3RydWN0IG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgeworICBzdHJ1Y3QgbmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncyAqbmV4dDsKKyAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXY7CisgIHNpemVfdCBuaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzIG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3M7CisKK3N0cnVjdCBuZ2h0dHAyX3Nlc3Npb24geworICBuZ2h0dHAyX21hcCAvKiA8bmdodHRwMl9zdHJlYW0qPiAqLyBzdHJlYW1zOworICAvKiByb290IG9mIGRlcGVuZGVuY3kgdHJlZSovCisgIG5naHR0cDJfc3RyZWFtIHJvb3Q7CisgIC8qIFF1ZXVlIGZvciBvdXRib3VuZCB1cmdlbnQgZnJhbWVzIChQSU5HIGFuZCBTRVRUSU5HUykgKi8KKyAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZSBvYl91cmdlbnQ7CisgIC8qIFF1ZXVlIGZvciBub24tREFUQSBmcmFtZXMgKi8KKyAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZSBvYl9yZWc7CisgIC8qIFF1ZXVlIGZvciBvdXRib3VuZCBzdHJlYW0tY3JlYXRpbmcgSEVBREVSUyAocmVxdWVzdCBvciBwdXNoCisgICAgIHJlc3BvbnNlKSBmcmFtZSwgd2hpY2ggYXJlIHN1YmplY3QgdG8KKyAgICAgU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyBsaW1pdC4gKi8KKyAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZSBvYl9zeW47CisgIG5naHR0cDJfYWN0aXZlX291dGJvdW5kX2l0ZW0gYW9iOworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgaWZyYW1lOworICBuZ2h0dHAyX2hkX2RlZmxhdGVyIGhkX2RlZmxhdGVyOworICBuZ2h0dHAyX2hkX2luZmxhdGVyIGhkX2luZmxhdGVyOworICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzIGNhbGxiYWNrczsKKyAgLyogTWVtb3J5IGFsbG9jYXRvciAqLworICBuZ2h0dHAyX21lbSBtZW07CisgIHZvaWQgKnVzZXJfZGF0YTsKKyAgLyogUG9pbnRzIHRvIHRoZSBsYXRlc3QgaW5jb21pbmcgY2xvc2VkIHN0cmVhbS4gIE5VTEwgaWYgdGhlcmUgaXMgbm8KKyAgICAgY2xvc2VkIHN0cmVhbS4gIE9ubHkgdXNlZCB3aGVuIHNlc3Npb24gaXMgaW5pdGlhbGl6ZWQgYXMKKyAgICAgc2VydmVyLiAqLworICBuZ2h0dHAyX3N0cmVhbSAqY2xvc2VkX3N0cmVhbV9oZWFkOworICAvKiBQb2ludHMgdG8gdGhlIG9sZGVzdCBpbmNvbWluZyBjbG9zZWQgc3RyZWFtLiAgTlVMTCBpZiB0aGVyZSBpcyBubworICAgICBjbG9zZWQgc3RyZWFtLiAgT25seSB1c2VkIHdoZW4gc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBhcworICAgICBzZXJ2ZXIuICovCisgIG5naHR0cDJfc3RyZWFtICpjbG9zZWRfc3RyZWFtX3RhaWw7CisgIC8qIFBvaW50cyB0byB0aGUgbGF0ZXN0IGlkbGUgc3RyZWFtLiAgTlVMTCBpZiB0aGVyZSBpcyBubyBpZGxlCisgICAgIHN0cmVhbS4gIE9ubHkgdXNlZCB3aGVuIHNlc3Npb24gaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyIC4qLworICBuZ2h0dHAyX3N0cmVhbSAqaWRsZV9zdHJlYW1faGVhZDsKKyAgLyogUG9pbnRzIHRvIHRoZSBvbGRlc3QgaWRsZSBzdHJlYW0uICBOVUxMIGlmIHRoZXJlIGlzIG5vIGlkbGUKKyAgICAgc3RyZWFtLiAgT25seSB1c2VkIHdoZW4gc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBhcyBlcnZlci4gKi8KKyAgbmdodHRwMl9zdHJlYW0gKmlkbGVfc3RyZWFtX3RhaWw7CisgIC8qIFF1ZXVlIG9mIEluLWZsaWdodCBTRVRUSU5HUyB2YWx1ZXMuICBTRVRUSU5HUyBiZWFyaW5nIEFDSyBpcyBub3QKKyAgICAgY29uc2lkZXJlZCBhcyBpbi1mbGlnaHQuICovCisgIG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgKmluZmxpZ2h0X3NldHRpbmdzX2hlYWQ7CisgIC8qIFRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcy4gVGhpcyB3aWxsIGJlIGNhcHBlZCBieQorICAgICByZW1vdGVfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcy4gKi8KKyAgc2l6ZV90IG51bV9vdXRnb2luZ19zdHJlYW1zOworICAvKiBUaGUgbnVtYmVyIG9mIGluY29taW5nIHN0cmVhbXMuIFRoaXMgd2lsbCBiZSBjYXBwZWQgYnkKKyAgICAgbG9jYWxfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcy4gKi8KKyAgc2l6ZV90IG51bV9pbmNvbWluZ19zdHJlYW1zOworICAvKiBUaGUgbnVtYmVyIG9mIGluY29taW5nIHJlc2VydmVkIHN0cmVhbXMuICBUaGlzIGlzIHRoZSBudW1iZXIgb2YKKyAgICAgc3RyZWFtcyBpbiByZXNlcnZlZCAocmVtb3RlKSBzdGF0ZS4gIFJGQyA3NTQwIGRvZXMgbm90IGxpbWl0IHRoaXMKKyAgICAgbnVtYmVyLiAgbmdodHRwMiBvZmZlcnMKKyAgICAgbmdodHRwMl9vcHRpb25fc2V0X21heF9yZXNlcnZlZF9yZW1vdGVfc3RyZWFtcygpIHRvIGFjaGlldmUgdGhpcy4KKyAgICAgSWYgaXQgaXMgdXNlZCwgbnVtX2luY29taW5nX3N0cmVhbXMgaXMgY2FwcGVkIGJ5CisgICAgIG1heF9pbmNvbWluZ19yZXNlcnZlZF9zdHJlYW1zLiAgQ2xpZW50IGFwcGxpY2F0aW9uIHNob3VsZAorICAgICBjb25zaWRlciB0byBzZXQgdGhpcyBiZWNhdXNlIHdpdGhvdXQgdGhhdCBzZXJ2ZXIgY2FuIHNlbmQKKyAgICAgYXJiaXRyYXJ5IG51bWJlciBvZiBQVVNIX1BST01JU0UsIGFuZCBleGhhdXN0IGNsaWVudCdzIG1lbW9yeS4gKi8KKyAgc2l6ZV90IG51bV9pbmNvbWluZ19yZXNlcnZlZF9zdHJlYW1zOworICAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgcmVzZXJ2ZWQgc3RyZWFtcyAocmVzZXJ2ZWQKKyAgICAgKHJlbW90ZSkgc3RhdGUpLiAgUlNUX1NUUkVBTSB3aWxsIGJlIHNlbnQgZm9yIHRoZSBwdXNoZWQgc3RyZWFtCisgICAgIHdoaWNoIGV4Y2VlZHMgdGhpcyBsaW1pdC4gKi8KKyAgc2l6ZV90IG1heF9pbmNvbWluZ19yZXNlcnZlZF9zdHJlYW1zOworICAvKiBUaGUgbnVtYmVyIG9mIGNsb3NlZCBzdHJlYW1zIHN0aWxsIGtlcHQgaW4gfHN0cmVhbXN8IGhhc2guICBUaGUKKyAgICAgY2xvc2VkIHN0cmVhbXMgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggc2luZ2xlIGxpbmtlZCBsaXN0CisgICAgIHxjbG9zZWRfc3RyZWFtX2hlYWR8LiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBrZWVwcworICAgICBpbmNvbWluZyBzdHJlYW1zIGFuZCBzZXNzaW9uIGlzIGluaXRpYWxpemVkIGFzIHNlcnZlci4gKi8KKyAgc2l6ZV90IG51bV9jbG9zZWRfc3RyZWFtczsKKyAgLyogVGhlIG51bWJlciBvZiBpZGxlIHN0cmVhbXMga2VwdCBpbiB8c3RyZWFtc3wgaGFzaC4gIFRoZSBpZGxlCisgICAgIHN0cmVhbXMgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZG91Ymx5IGxpbmtlZCBsaXN0CisgICAgIHxpZGxlX3N0cmVhbV9oZWFkfC4gIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkga2VlcHMgaWRsZQorICAgICBzdHJlYW1zIGlmIHNlc3Npb24gaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyLiAqLworICBzaXplX3QgbnVtX2lkbGVfc3RyZWFtczsKKyAgLyogVGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgZm9yIG52YnVmICovCisgIHNpemVfdCBudmJ1ZmxlbjsKKyAgLyogQ291bnRlciBmb3IgZGV0ZWN0aW5nIGZsb29kaW5nIGluIG91dGJvdW5kIHF1ZXVlLiAgSWYgaXQgZXhjZWVkcworICAgICBtYXhfb3V0Ym91bmRfYWNrLCBzZXNzaW9uIHdpbGwgYmUgY2xvc2VkLiAqLworICBzaXplX3Qgb2JxX2Zsb29kX2NvdW50ZXJfOworICAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0Z29pbmcgU0VUVElOR1MgQUNLIGFuZCBQSU5HIEFDSyBpbgorICAgICBvdXRib3VuZCBxdWV1ZS4gKi8KKyAgc2l6ZV90IG1heF9vdXRib3VuZF9hY2s7CisgIC8qIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBoZWFkZXIgYmxvY2sgdG8gc2VuZC4gIENhbGN1bGF0ZWQgYnkgdGhlCisgICAgIHNhbWUgd2F5IGFzIG5naHR0cDJfaGRfZGVmbGF0ZV9ib3VuZCgpIGRvZXMuICovCisgIHNpemVfdCBtYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoOworICAvKiBOZXh0IFN0cmVhbSBJRC4gTWFkZSB1bnNpZ25lZCBpbnQgdG8gZGV0ZWN0ID49ICgxIDw8IDMxKS4gKi8KKyAgdWludDMyX3QgbmV4dF9zdHJlYW1faWQ7CisgIC8qIFRoZSBsYXN0IHN0cmVhbSBJRCB0aGlzIHNlc3Npb24gaW5pdGlhdGVkLiAgRm9yIGNsaWVudCBzZXNzaW9uLAorICAgICB0aGlzIGlzIHRoZSBsYXN0IHN0cmVhbSBJRCBpdCBoYXMgc2VudC4gIEZvciBzZXJ2ZXIgc2Vzc2lvbiwgaXQKKyAgICAgaXMgdGhlIGxhc3QgcHJvbWlzZWQgc3RyZWFtIElEIHNlbnQgaW4gUFVTSF9QUk9NSVNFLiAqLworICBpbnQzMl90IGxhc3Rfc2VudF9zdHJlYW1faWQ7CisgIC8qIFRoZSBsYXJnZXN0IHN0cmVhbSBJRCByZWNlaXZlZCBzbyBmYXIgKi8KKyAgaW50MzJfdCBsYXN0X3JlY3Zfc3RyZWFtX2lkOworICAvKiBUaGUgbGFyZ2VzdCBzdHJlYW0gSUQgd2hpY2ggaGFzIGJlZW4gcHJvY2Vzc2VkIGluIHNvbWUgd2F5LiBUaGlzCisgICAgIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyBsYXN0LXN0cmVhbS1pZCB3aGVuIHNlbmRpbmcgR09BV0FZCisgICAgIGZyYW1lLiAqLworICBpbnQzMl90IGxhc3RfcHJvY19zdHJlYW1faWQ7CisgIC8qIENvdW50ZXIgb2YgdW5pcXVlIElEIG9mIFBJTkcuIFdyYXBzIHdoZW4gaXQgZXhjZWVkcworICAgICBOR0hUVFAyX01BWF9VTklRVUVfSUQgKi8KKyAgdWludDMyX3QgbmV4dF91bmlxdWVfaWQ7CisgIC8qIFRoaXMgaXMgdGhlIGxhc3Qtc3RyZWFtLUlEIHdlIGhhdmUgc2VudCBpbiBHT0FXQVkgKi8KKyAgaW50MzJfdCBsb2NhbF9sYXN0X3N0cmVhbV9pZDsKKyAgLyogVGhpcyBpcyB0aGUgdmFsdWUgaW4gR09BV0FZIGZyYW1lIHJlY2VpdmVkIGZyb20gcmVtb3RlIGVuZHBvaW50LiAqLworICBpbnQzMl90IHJlbW90ZV9sYXN0X3N0cmVhbV9pZDsKKyAgLyogQ3VycmVudCBzZW5kZXIgd2luZG93IHNpemUuIFRoaXMgdmFsdWUgaXMgY29tcHV0ZWQgYWdhaW5zdCB0aGUKKyAgICAgY3VycmVudCBpbml0aWFsIHdpbmRvdyBzaXplIG9mIHJlbW90ZSBlbmRwb2ludC4gKi8KKyAgaW50MzJfdCByZW1vdGVfd2luZG93X3NpemU7CisgIC8qIEtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCB3aXRob3V0CisgICAgIFdJTkRPV19VUERBVEUuIFRoaXMgY291bGQgYmUgbmVnYXRpdmUgYWZ0ZXIgc3VibWl0dGluZyBuZWdhdGl2ZQorICAgICB2YWx1ZSB0byBXSU5ET1dfVVBEQVRFLiAqLworICBpbnQzMl90IHJlY3Zfd2luZG93X3NpemU7CisgIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFuZCBub3cgaXMKKyAgICAgc3ViamVjdCB0byBXSU5ET1dfVVBEQVRFLiAgVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBhdXRvCisgICAgIFdJTkRPV19VUERBVEUgaXMgdHVybmVkIG9mZi4gKi8KKyAgaW50MzJfdCBjb25zdW1lZF9zaXplOworICAvKiBUaGUgYW1vdW50IG9mIHJlY3Zfd2luZG93X3NpemUgY3V0IHVzaW5nIHN1Ym1pdHRpbmcgbmVnYXRpdmUKKyAgICAgdmFsdWUgdG8gV0lORE9XX1VQREFURSAqLworICBpbnQzMl90IHJlY3ZfcmVkdWN0aW9uOworICAvKiB3aW5kb3cgc2l6ZSBmb3IgbG9jYWwgZmxvdyBjb250cm9sLiBJdCBpcyBpbml0aWFsbHkgc2V0IHRvCisgICAgIE5HSFRUUDJfSU5JVElBTF9DT05ORUNUSU9OX1dJTkRPV19TSVpFIGFuZCBjb3VsZCBiZQorICAgICBpbmNyZWFzZWQvZGVjcmVhc2VkIGJ5IHN1Ym1pdHRpbmcgV0lORE9XX1VQREFURS4gU2VlCisgICAgIG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKS4gKi8KKyAgaW50MzJfdCBsb2NhbF93aW5kb3dfc2l6ZTsKKyAgLyogVGhpcyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbG9jYWwgZW5kcG9pbnQgcmVjZWl2ZWQgaW5pdGlhbAorICAgICBTRVRUSU5HUyBmcmFtZSBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQuICovCisgIHVpbnQ4X3QgcmVtb3RlX3NldHRpbmdzX3JlY2VpdmVkOworICAvKiBTZXR0aW5ncyB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQuICovCisgIG5naHR0cDJfc2V0dGluZ3Nfc3RvcmFnZSByZW1vdGVfc2V0dGluZ3M7CisgIC8qIFNldHRpbmdzIHZhbHVlIG9mIHRoZSBsb2NhbCBlbmRwb2ludC4gKi8KKyAgbmdodHRwMl9zZXR0aW5nc19zdG9yYWdlIGxvY2FsX3NldHRpbmdzOworICAvKiBPcHRpb24gZmxhZ3MuIFRoaXMgaXMgYml0d2lzZS1PUiBvZiAwIG9yIG1vcmUgb2YgbmdodHRwMl9vcHRtYXNrLiAqLworICB1aW50MzJfdCBvcHRfZmxhZ3M7CisgIC8qIFVuYWNrZWQgbG9jYWwgU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyB2YWx1ZS4gV2UgdXNlIHRoaXMKKyAgICAgdG8gcmVmdXNlIHRoZSBpbmNvbWluZyBzdHJlYW0gaWYgaXQgZXhjZWVkcyB0aGlzIHZhbHVlLiAqLworICB1aW50MzJfdCBwZW5kaW5nX2xvY2FsX21heF9jb25jdXJyZW50X3N0cmVhbTsKKyAgLyogVGhlIGJpdHdpc2UgT1Igb2YgemVybyBvciBtb3JlIG9mIG5naHR0cDJfdHlwZW1hc2sgdG8gaW5kaWNhdGUKKyAgICAgdGhhdCB0aGUgZGVmYXVsdCBoYW5kbGluZyBvZiBleHRlbnNpb24gZnJhbWUgaXMgZW5hYmxlZC4gKi8KKyAgdWludDMyX3QgYnVpbHRpbl9yZWN2X2V4dF90eXBlczsKKyAgLyogVW5hY2tlZCBsb2NhbCBFTkFCTEVfUFVTSCB2YWx1ZS4gIFdlIHVzZSB0aGlzIHRvIHJlZnVzZQorICAgICBQVVNIX1BST01JU0UgYmVmb3JlIFNFVFRJTkdTIEFDSyBpcyByZWNlaXZlZC4gKi8KKyAgdWludDhfdCBwZW5kaW5nX2VuYWJsZV9wdXNoOworICAvKiBVbmFja2VkIGxvY2FsIEVOQUJMRV9DT05ORUNUX1BST1RPQ09MIHZhbHVlLiAgV2UgdXNlIHRoaXMgdG8KKyAgICAgYWNjZXB0IDpwcm90b2NvbCBoZWFkZXIgZmllbGQgYmVmb3JlIFNFVFRJTkdTX0FDSyBpcyByZWNlaXZlZC4gKi8KKyAgdWludDhfdCBwZW5kaW5nX2VuYWJsZV9jb25uZWN0X3Byb3RvY29sOworICAvKiBOb256ZXJvIGlmIHRoZSBzZXNzaW9uIGlzIHNlcnZlciBzaWRlLiAqLworICB1aW50OF90IHNlcnZlcjsKKyAgLyogRmxhZ3MgaW5kaWNhdGluZyBHT0FXQVkgaXMgc2VudCBhbmQvb3IgcmVjZWl2ZWQuIFRoZSBmbGFncyBhcmUKKyAgICAgY29tcG9zZWQgYnkgYml0d2lzZSBPUi1pbmcgbmdodHRwMl9nb2F3YXlfZmxhZy4gKi8KKyAgdWludDhfdCBnb2F3YXlfZmxhZ3M7CisgIC8qIFRoaXMgZmxhZyBpcyB1c2VkIHRvIHJlZHVjZSBleGNlc3NpdmUgcXVldWluZyBvZiBXSU5ET1dfVVBEQVRFIHRvCisgICAgIHRoaXMgc2Vzc2lvbi4gIFRoZSBub256ZXJvIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4KKyAgICAgV0lORE9XX1VQREFURSBpcyBub3QgcXVldWVkLiAqLworICB1aW50OF90IHdpbmRvd191cGRhdGVfcXVldWVkOworICAvKiBCaXRmaWVsZCBvZiBleHRlbnNpb24gZnJhbWUgdHlwZXMgdGhhdCBhcHBsaWNhdGlvbiBpcyB3aWxsaW5nIHRvCisgICAgIHJlY2VpdmUuICBUbyBkZXNpZ25hdGUgdGhlIGJpdCBvZiBnaXZlbiBmcmFtZSB0eXBlIGksIHVzZQorICAgICB1c2VyX3JlY3ZfZXh0X3R5cGVzW2kgLyA4XSAmICgxIDw8IChpICYgMHg3KSkuICBGaXJzdCAxMCBmcmFtZQorICAgICB0eXBlcyBhcmUgc3RhbmRhcmQgZnJhbWUgdHlwZXMgYW5kIG5vdCB1c2VkIGluIHRoaXMgYml0ZmllbGQuICBJZgorICAgICBiaXQgaXMgc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCBpbmNvbWluZyBmcmFtZSB3aXRoIHRoYXQgdHlwZSBpcworICAgICBwYXNzZWQgdG8gdXNlciBkZWZpbmVkIGNhbGxiYWNrcywgb3RoZXJ3aXNlIHRoZXkgYXJlIGlnbm9yZWQuICovCisgIHVpbnQ4X3QgdXNlcl9yZWN2X2V4dF90eXBlc1szMl07Cit9OworCisvKiBTdHJ1Y3QgdXNlZCB3aGVuIHVwZGF0aW5nIGluaXRpYWwgd2luZG93IHNpemUgb2YgZWFjaCBhY3RpdmUKKyAgIHN0cmVhbS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uOworICBpbnQzMl90IG5ld193aW5kb3dfc2l6ZSwgb2xkX3dpbmRvd19zaXplOworfSBuZ2h0dHAyX3VwZGF0ZV93aW5kb3dfc2l6ZV9hcmc7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uOworICAvKiBsaW5rZWQgbGlzdCBvZiBzdHJlYW1zIHRvIGNsb3NlICovCisgIG5naHR0cDJfc3RyZWFtICpoZWFkOworICBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkOworICAvKiBub256ZXJvIGlmIEdPQVdBWSBpcyBzZW50IHRvIHBlZXIsIHdoaWNoIG1lYW5zIHdlIGFyZSBnb2luZyB0bworICAgICBjbG9zZSBpbmNvbWluZyBzdHJlYW1zLiAgemVybyBpZiBHT0FXQVkgaXMgcmVjZWl2ZWQgZnJvbSBwZWVyIGFuZAorICAgICB3ZSBhcmUgZ29pbmcgdG8gY2xvc2Ugb3V0Z29pbmcgc3RyZWFtcy4gKi8KKyAgaW50IGluY29taW5nOworfSBuZ2h0dHAyX2Nsb3NlX3N0cmVhbV9vbl9nb2F3YXlfYXJnOworCisvKiBUT0RPIHN0cmVhbSB0aW1lb3V0IGV0YyAqLworCisvKgorICogUmV0dXJucyBub256ZXJvIHZhbHVlIGlmIHxzdHJlYW1faWR8IGlzIGluaXRpYXRlZCBieSBsb2NhbAorICogZW5kcG9pbnQuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKTsKKworLyoKKyAqIEFkZHMgfGl0ZW18IHRvIHRoZSBvdXRib3VuZCBxdWV1ZSBpbiB8c2Vzc2lvbnwuICBXaGVuIHRoaXMgZnVuY3Rpb24KKyAqIHN1Y2NlZWRzLCBpdCB0YWtlcyBvd25lcnNoaXAgb2YgfGl0ZW18LiBTbyBjYWxsZXIgbXVzdCBub3QgZnJlZSBpdAorICogb24gc3VjY2Vzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQKKyAqICAgICBTdHJlYW0gYWxyZWFkeSBjbG9zZWQgKERBVEEgYW5kIFBVU0hfUFJPTUlTRSBmcmFtZSBvbmx5KQorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKTsKKworLyoKKyAqIEFkZHMgUlNUX1NUUkVBTSBmcmFtZSBmb3IgdGhlIHN0cmVhbSB8c3RyZWFtX2lkfCB3aXRoIHRoZSBlcnJvcgorICogY29kZSB8ZXJyb3JfY29kZXwuIFRoaXMgaXMgYSBjb252ZW5pZW50IGZ1bmN0aW9uIGJ1aWx0IG9uIHRvcCBvZgorICogbmdodHRwMl9zZXNzaW9uX2FkZF9mcmFtZSgpIHRvIGFkZCBSU1RfU1RSRUFNIGVhc2lseS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zIDAgd2l0aG91dCBhZGRpbmcgUlNUX1NUUkVBTSBmcmFtZSBpZgorICogZ2l2ZW4gc3RyZWFtIGlzIGluIE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcgc3RhdGUsIGJlY2F1c2UgbXVsdGlwbGUKKyAqIFJTVF9TVFJFQU0gZm9yIGEgc3RyZWFtIGlzIHJlZHVuZGFudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlKTsKKworLyoKKyAqIEFkZHMgUElORyBmcmFtZS4gVGhpcyBpcyBhIGNvbnZlbmllbnQgZnVuY3RpbiBidWlsdCBvbiB0b3Agb2YKKyAqIG5naHR0cDJfc2Vzc2lvbl9hZGRfZnJhbWUoKSB0byBhZGQgUElORyBlYXNpbHkuCisgKgorICogSWYgdGhlIHxvcGFxdWVfZGF0YXwgaXMgbm90IE5VTEwsIGl0IG11c3QgcG9pbnQgdG8gOCBieXRlcyBtZW1vcnkKKyAqIHJlZ2lvbiBvZiBkYXRhLiBUaGUgZGF0YSBwb2ludGVkIGJ5IHxvcGFxdWVfZGF0YXwgaXMgY29waWVkLiBJdCBjYW4KKyAqIGJlIE5VTEwuIEluIHRoaXMgY2FzZSwgOCBieXRlcyBOVUxMIGlzIHVzZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9GTE9PREVECisgKiAgICAgVGhlcmUgYXJlIHRvbyBtYW55IGl0ZW1zIGluIG91dGJvdW5kIHF1ZXVlOyB0aGlzIG9ubHkgaGFwcGVucworICogICAgIGlmIE5HSFRUUDJfRkxBR19BQ0sgaXMgc2V0IGluIHxmbGFnc3wKKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfcGluZyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9wYXF1ZV9kYXRhKTsKKworLyoKKyAqIEFkZHMgR09BV0FZIGZyYW1lIHdpdGggdGhlIGxhc3Qtc3RyZWFtLUlEIHxsYXN0X3N0cmVhbV9pZHwgYW5kIHRoZQorICogZXJyb3IgY29kZSB8ZXJyb3JfY29kZXwuIFRoaXMgaXMgYSBjb252ZW5pZW50IGZ1bmN0aW9uIGJ1aWx0IG9uIHRvcAorICogb2YgbmdodHRwMl9zZXNzaW9uX2FkZF9mcmFtZSgpIHRvIGFkZCBHT0FXQVkgZWFzaWx5LiAgVGhlCisgKiB8YXV4X2ZsYWdzfCBhcmUgYml0d2lzZS1PUiBvZiBvbmUgb3IgbW9yZSBvZgorICogbmdodHRwMl9nb2F3YXlfYXV4X2ZsYWcuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UCisgKiAgICAgVGhlIHxvcGFxdWVfZGF0YV9sZW58IGlzIHRvbyBsYXJnZS4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfZ29hd2F5KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBsYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLCBjb25zdCB1aW50OF90ICpvcGFxdWVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3BhcXVlX2RhdGFfbGVuLCB1aW50OF90IGF1eF9mbGFncyk7CisKKy8qCisgKiBBZGRzIFdJTkRPV19VUERBVEUgZnJhbWUgd2l0aCBzdHJlYW0gSUQgfHN0cmVhbV9pZHwgYW5kCisgKiB3aW5kb3ctc2l6ZS1pbmNyZW1lbnQgfHdpbmRvd19zaXplX2luY3JlbWVudHwuIFRoaXMgaXMgYSBjb252ZW5pZW50CisgKiBmdW5jdGlvbiBidWlsdCBvbiB0b3Agb2YgbmdodHRwMl9zZXNzaW9uX2FkZF9mcmFtZSgpIHRvIGFkZAorICogV0lORE9XX1VQREFURSBlYXNpbHkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRkX3dpbmRvd191cGRhdGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworCisvKgorICogQWRkcyBTRVRUSU5HUyBmcmFtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0ZMT09ERUQKKyAqICAgICBUaGVyZSBhcmUgdG9vIG1hbnkgaXRlbXMgaW4gb3V0Ym91bmQgcXVldWU7IHRoaXMgb25seSBoYXBwZW5zCisgKiAgICAgaWYgTkdIVFRQMl9GTEFHX0FDSyBpcyBzZXQgaW4gfGZsYWdzfAorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9zZXR0aW5ncyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwgc2l6ZV90IG5pdik7CisKKy8qCisgKiBDcmVhdGVzIG5ldyBzdHJlYW0gaW4gfHNlc3Npb258IHdpdGggc3RyZWFtIElEIHxzdHJlYW1faWR8LAorICogcHJpb3JpdHkgfHByaV9zcGVjfCBhbmQgZmxhZ3MgfGZsYWdzfC4gIFRoZSB8ZmxhZ3N8IGlzIGJpdHdpc2UgT1IKKyAqIG9mIG5naHR0cDJfc3RyZWFtX2ZsYWcuICBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGluaXRpYWwKKyAqIEhFQURFUlMgaXMgc2VudCBvciByZWNlaXZlZCwgdGhlc2UgZmxhZ3MgYXJlIHRha2VuIGZyb20gaXQuICBUaGUKKyAqIHN0YXRlIG9mIHN0cmVhbSBpcyBzZXQgdG8gfGluaXRpYWxfc3RhdGV8LiBUaGUgfHN0cmVhbV91c2VyX2RhdGF8CisgKiBpcyBhIHBvaW50ZXIgdG8gdGhlIGFyYml0cmFyeSB1c2VyIHN1cHBsaWVkIGRhdGEgdG8gYmUgYXNzb2NpYXRlZAorICogdG8gdGhpcyBzdHJlYW0uCisgKgorICogSWYgfGluaXRpYWxfc3RhdGV8IGlzIE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVELCB0aGlzIGZ1bmN0aW9uIHNldHMKKyAqIE5HSFRUUDJfU1RSRUFNX0ZMQUdfUFVTSCBmbGFnIHNldC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGNyZWF0ZWQgbmV3IHN0cmVhbSBvYmplY3QsIG9yCisgKiBOVUxMLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWRqdXN0cyBuZWl0aGVyIHRoZSBudW1iZXIgb2YgY2xvc2VkIHN0cmVhbXMgb3IgaWRsZQorICogc3RyZWFtcy4gIFRoZSBjYWxsZXIgc2hvdWxkIG1hbnVhbGx5IGNhbGwKKyAqIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfY2xvc2VkX3N0cmVhbSgpIG9yCisgKiBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2lkbGVfc3RyZWFtKCkgcmVzcGVjdGl2ZWx5LgorICovCituZ2h0dHAyX3N0cmVhbSAqbmdodHRwMl9zZXNzaW9uX29wZW5fc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtX3N0YXRlIGluaXRpYWxfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpOworCisvKgorICogQ2xvc2VzIHN0cmVhbSB3aG9zZSBzdHJlYW0gSUQgaXMgfHN0cmVhbV9pZHwuIFRoZSByZWFzb24gb2YgY2xvc3VyZQorICogaXMgaW5kaWNhdGVkIGJ5IHRoZSB8ZXJyb3JfY29kZXwuIFdoZW4gY2xvc2luZyB0aGUgc3RyZWFtLAorICogb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLgorICoKKyAqIElmIHRoZSBzZXNzaW9uIGlzIGluaXRpYWxpemVkIGFzIHNlcnZlciBhbmQgfHN0cmVhbXwgaXMgaW5jb21pbmcKKyAqIHN0cmVhbSwgc3RyZWFtIGlzIGp1c3QgbWFya2VkIGNsb3NlZCBhbmQgdGhpcyBmdW5jdGlvbiBjYWxscworICogbmdodHRwMl9zZXNzaW9uX2tlZXBfY2xvc2VkX3N0cmVhbSgpIHdpdGggfHN0cmVhbXwuICBPdGhlcndpc2UsCisgKiB8c3RyZWFtfCB3aWxsIGJlIGRlbGV0ZWQgZnJvbSBtZW1vcnkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgICBUaGUgc3BlY2lmaWVkIHN0cmVhbSBkb2VzIG5vdCBleGlzdC4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSk7CisKKy8qCisgKiBEZWxldGVzIHxzdHJlYW18IGZyb20gbWVtb3J5LiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBzdHJlYW0KKyAqIGNhbm5vdCBiZSBhY2Nlc3NlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2Rlc3Ryb3lfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBUcmllcyB0byBrZWVwIGluY29taW5nIGNsb3NlZCBzdHJlYW0gfHN0cmVhbXwuICBEdWUgdG8gdGhlCisgKiBsaW1pdGF0aW9uIG9mIG1heGltdW0gbnVtYmVyIG9mIHN0cmVhbXMgaW4gbWVtb3J5LCB8c3RyZWFtfCBpcyBub3QKKyAqIGNsb3NlZCBhbmQganVzdCBkZWxldGVkIGZyb20gbWVtb3J5IChzZWUKKyAqIG5naHR0cDJfc2Vzc2lvbl9kZXN0cm95X3N0cmVhbSkuCisgKi8KK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2tlZXBfY2xvc2VkX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBBcHBlbmRzIHxzdHJlYW18IHRvIGxpbmtlZCBsaXN0IHxzZXNzaW9uLT5pZGxlX3N0cmVhbV9oZWFkfC4gIFdlCisgKiBhcHBseSBmaXhlZCBsaW1pdCBmb3IgbGlzdCBzaXplLiAgVG8gZml0IGludG8gdGhhdCBsaW1pdCwgb25lIG9yCisgKiBtb3JlIG9sZGVzdCBzdHJlYW1zIGFyZSByZW1vdmVkIGZyb20gbGlzdCBhcyBuZWNlc3NhcnkuCisgKi8KK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2tlZXBfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIERldGFjaGVzIHxzdHJlYW18IGZyb20gaWRsZSBzdHJlYW1zIGxpbmtlZCBsaXN0LgorICovCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9kZXRhY2hfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogRGVsZXRlcyBjbG9zZWQgc3RyZWFtIHRvIGVuc3VyZSB0aGF0IG51bWJlciBvZiBpbmNvbWluZyBzdHJlYW1zCisgKiBpbmNsdWRpbmcgYWN0aXZlIGFuZCBjbG9zZWQgaXMgaW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQKKyAqIHN0cmVhbS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkanVzdF9jbG9zZWRfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qCisgKiBEZWxldGVzIGlkbGUgc3RyZWFtIHRvIGVuc3VyZSB0aGF0IG51bWJlciBvZiBpZGxlIHN0cmVhbXMgaXMgaW4KKyAqIGNlcnRhaW4gbGltaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoKKyAqIElmIGZ1cnRoZXIgcmVjZXB0aW9ucyBhbmQgdHJhbnNtaXNzaW9ucyBvdmVyIHRoZSBzdHJlYW0gfHN0cmVhbV9pZHwKKyAqIGFyZSBkaXNhbGxvd2VkLCBjbG9zZSB0aGUgc3RyZWFtIHdpdGggZXJyb3IgY29kZSBOR0hUVFAyX05PX0VSUk9SLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0CisgKiBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVAorICogICAgIFRoZSBzcGVjaWZpZWQgc3RyZWFtIGRvZXMgbm90IGV4aXN0LgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbV9pZl9zaHV0X3Jkd3IobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3JlcXVlc3RfaGVhZGVyc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcmVzcG9uc2VfaGVhZGVyc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcHVzaF9yZXNwb25zZV9oZWFkZXJzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBIRUFERVJTIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4gIFRoaXMgZnVuY3Rpb24gZG9lcyBmaXJzdCB2YWxpZGF0ZSByZWNlaXZlZCBmcmFtZSBhbmQKKyAqIHRoZW4gb3BlbiBzdHJlYW0gYW5kIGNhbGwgY2FsbGJhY2sgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSworICogICAgIEZyYW1lIHdhcyByZWplY3RlZCBhbmQgaGVhZGVyIGJsb2NrIG11c3QgYmUgZGVjb2RlZCBidXQKKyAqICAgICByZXN1bHQgbXVzdCBiZSBpZ25vcmVkLgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSByZWFkX2NhbGxiYWNrIGZhaWxlZAorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX2hlYWRlcnNfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogQ2FsbGVkIHdoZW4gUFJJT1JJVFkgaXMgcmVjZWl2ZWQsIGFzc3VtaW5nIHxmcmFtZXwgaXMgcHJvcGVybHkKKyAqIGluaXRpYWxpemVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSByZWFkX2NhbGxiYWNrIGZhaWxlZAorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3ByaW9yaXR5X3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisvKgorICogQ2FsbGVkIHdoZW4gUlNUX1NUUkVBTSBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgcmVhZF9jYWxsYmFjayBmYWlsZWQKKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9yc3Rfc3RyZWFtX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBTRVRUSU5HUyBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuIElmIHxub2Fja3wgaXMgbm9uLXplcm8sIFNFVFRJTkdTIHdpdGggQUNLIHdpbGwgbm90IGJlCisgKiBzdWJtaXR0ZWQuIElmIHxmcmFtZXwgaGFzIE5HSFRUUDJfRkxBR19BQ0sgZmxhZyBzZXQsIG5vIFNFVFRJTkdTCisgKiB3aXRoIEFDSyB3aWxsIG5vdCBiZSBzdWJtaXR0ZWQgcmVnYXJkbGVzcyBvZiB8bm9hY2t8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIHJlYWRfY2FsbGJhY2sgZmFpbGVkCisgKiBOR0hUVFAyX0VSUl9GTE9PREVECisgKiAgICAgVGhlcmUgYXJlIHRvbyBtYW55IGl0ZW1zIGluIG91dGJvdW5kIHF1ZXVlLCBhbmQgdGhpcyBpcyBtb3N0CisgKiAgICAgbGlrZWx5IGNhdXNlZCBieSBtaXNiZWhhdmlvdXIgb2YgcGVlci4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9zZXR0aW5nc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLCBpbnQgbm9hY2spOworCisvKgorICogQ2FsbGVkIHdoZW4gUFVTSF9QUk9NSVNFIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0sKKyAqICAgICBGcmFtZSB3YXMgcmVqZWN0ZWQgYW5kIGhlYWRlciBibG9jayBtdXN0IGJlIGRlY29kZWQgYnV0CisgKiAgICAgcmVzdWx0IG11c3QgYmUgaWdub3JlZC4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgcmVhZF9jYWxsYmFjayBmYWlsZWQKKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9wdXNoX3Byb21pc2VfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisvKgorICogQ2FsbGVkIHdoZW4gUElORyBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqIE5HSFRUUDJfRVJSX0ZMT09ERUQKKyAqICAgICBUaGVyZSBhcmUgdG9vIG1hbnkgaXRlbXMgaW4gb3V0Ym91bmQgcXVldWUsIGFuZCB0aGlzIGlzIG1vc3QKKyAqICAgICBsaWtlbHkgY2F1c2VkIGJ5IG1pc2JlaGF2aW91ciBvZiBwZWVyLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3BpbmdfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIEdPQVdBWSBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9nb2F3YXlfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisvKgorICogQ2FsbGVkIHdoZW4gV0lORE9XX1VQREFURSBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl93aW5kb3dfdXBkYXRlX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBBTFRTVkMgaXMgcmVjZWl2ZWQsIGFzc3VtaW5nIHxmcmFtZXwgaXMgcHJvcGVybHkKKyAqIGluaXRpYWxpemVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fYWx0c3ZjX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIE9SSUdJTiBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9vcmlnaW5fcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisvKgorICogQ2FsbGVkIHdoZW4gREFUQSBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9kYXRhX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBSZXR1cm5zIG5naHR0cDJfc3RyZWFtKiBvYmplY3Qgd2hvc2Ugc3RyZWFtIElEIGlzIHxzdHJlYW1faWR8LiAgSXQKKyAqIGNvdWxkIGJlIE5VTEwgaWYgc3VjaCBzdHJlYW0gZG9lcyBub3QgZXhpc3QuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIE5VTEwgaWYgc3RyZWFtIGlzIG1hcmtlZCBhcyBjbG9zZWQuCisgKi8KK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oKSwgYnV0IGl0CisgKiByZXR1cm5zIHN0cmVhbSBvYmplY3QgZXZlbiBpZiBpdCBpcyBtYXJrZWQgYXMgY2xvc2VkIG9yIGluCisgKiBOR0hUVFAyX1NUUkVBTV9JRExFIHN0YXRlLgorICovCituZ2h0dHAyX3N0cmVhbSAqbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpOworCisvKgorICogUGFja3MgREFUQSBmcmFtZSB8ZnJhbWV8IGluIHdpcmUgZnJhbWUgZm9ybWF0IGFuZCBzdG9yZXMgaXQgaW4KKyAqIHxidWZzfC4gIFBheWxvYWQgd2lsbCBiZSByZWFkIHVzaW5nIHxhdXhfZGF0YS0+ZGF0YV9wcmR8LiAgVGhlCisgKiBsZW5ndGggb2YgcGF5bG9hZCBpcyBhdCBtb3N0IHxkYXRhbWF4fCBieXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0RFRkVSUkVECisgKiAgICAgVGhlIERBVEEgZnJhbWUgaXMgcG9zdHBvbmVkLgorICogTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSByZWFkX2NhbGxiYWNrIGZhaWxlZCAoc3RyZWFtIGVycm9yKS4KKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgcmVhZF9jYWxsYmFjayBmYWlsZWQgKHNlc3Npb24gZXJyb3IpLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX3BhY2tfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbWF4LCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZGF0YV9hdXhfZGF0YSAqYXV4X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFBvcHMgYW5kIHJldHVybnMgbmV4dCBpdGVtIHRvIHNlbmQuICBJZiB0aGVyZSBpcyBubyBzdWNoIGl0ZW0sCisgKiByZXR1cm5zIE5VTEwuICBUaGlzIGZ1bmN0aW9uIHRha2VzIGludG8gYWNjb3VudCBtYXggY29uY3VycmVudAorICogc3RyZWFtcy4gIFRoYXQgbWVhbnMgaWYgc2Vzc2lvbi0+b2Jfc3luIGhhcyBpdGVtIGFuZCBtYXggY29uY3VycmVudAorICogc3RyZWFtcyBpcyByZWFjaGVkLCB0aGUgZXZlbiBpZiBvdGhlciBxdWV1ZXMgY29udGFpbiBpdGVtcywgdGhlbgorICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK25naHR0cDJfb3V0Ym91bmRfaXRlbSAqCituZ2h0dHAyX3Nlc3Npb25fcG9wX25leHRfb2JfaXRlbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKgorICogUmV0dXJucyBuZXh0IGl0ZW0gdG8gc2VuZC4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggaXRlbSwgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyBOVUxMLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyBpbnRvIGFjY291bnQgbWF4IGNvbmN1cnJlbnQKKyAqIHN0cmVhbXMuICBUaGF0IG1lYW5zIGlmIHNlc3Npb24tPm9iX3N5biBoYXMgaXRlbSBhbmQgbWF4IGNvbmN1cnJlbnQKKyAqIHN0cmVhbXMgaXMgcmVhY2hlZCwgdGhlIGV2ZW4gaWYgb3RoZXIgcXVldWVzIGNvbnRhaW4gaXRlbXMsIHRoZW4KKyAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgorICovCituZ2h0dHAyX291dGJvdW5kX2l0ZW0gKgorbmdodHRwMl9zZXNzaW9uX2dldF9uZXh0X29iX2l0ZW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoKKyAqIFVwZGF0ZXMgbG9jYWwgc2V0dGluZ3Mgd2l0aCB0aGUgfGl2fC4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUKKyAqIGFycmF5IHBvaW50ZWQgYnkgdGhlIHxpdnwgaXMgZ2l2ZW4gYnkgdGhlIHxuaXZ8LiAgVGhpcyBmdW5jdGlvbgorICogYXNzdW1lcyB0aGF0IHRoZSBhbGwgc2V0dGluZ3NfaWQgbWVtYmVyIGluIHxpdnwgYXJlIGluIHJhbmdlIDEgdG8KKyAqIE5HSFRUUDJfU0VUVElOR1NfTUFYLCBpbmNsdXNpdmUuCisgKgorICogV2hpbGUgdXBkYXRpbmcgaW5kaXZpZHVhbCBzdHJlYW0ncyBsb2NhbCB3aW5kb3cgc2l6ZSwgaWYgdGhlIHdpbmRvdworICogc2l6ZSBiZWNvbWVzIHN0cmljdGx5IGxhcmdlciB0aGFuIE5HSFRUUDJfTUFYX1dJTkRPV19TSVpFLAorICogUlNUX1NUUkVBTSBpcyBpc3N1ZWQgYWdhaW5zdCBzdWNoIGEgc3RyZWFtLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fdXBkYXRlX2xvY2FsX3NldHRpbmdzKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdik7CisKKy8qCisgKiBSZS1wcmlvcml0aXplIHxzdHJlYW18LiBUaGUgbmV3IHByaW9yaXR5IHNwZWNpZmljYXRpb24gaXMKKyAqIHxwcmlfc3BlY3wuICBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBzdHJlYW0tPmhkLnN0cmVhbV9pZCAhPQorICogcHJpX3NwZWMtPnN0cmVhbV9pZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFkanVzdCB0aGUgbnVtYmVyIG9mIGlkbGUgc3RyZWFtcy4gIFRoZQorICogY2FsbGVyIHNob3VsZCBjYWxsIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oKSBsYXRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX3JlcHJpb3JpdGl6ZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyk7CisKKy8qCisgKiBUZXJtaW5hdGVzIGN1cnJlbnQgfHNlc3Npb258IHdpdGggdGhlIHxlcnJvcl9jb2RlfC4gIFRoZSB8cmVhc29ufAorICogaXMgTlVMTC10ZXJtaW5hdGVkIGRlYnVnIHN0cmluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgICBUaGUgfHJlYXNvbnwgaXMgdG9vIGxvbmcuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24pOworCisjZW5kaWYgLyogTkdIVFRQMl9TRVNTSU9OX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3RyZWFtLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjM2E2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N0cmVhbS5jCkBAIC0wLDAgKzEsMTAwMSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9zdHJlYW0uaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX3Nlc3Npb24uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2hlbHBlci5oIgorI2luY2x1ZGUgIm5naHR0cDJfZGVidWcuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2ZyYW1lLmgiCisKKy8qIE1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBhbnkgdHdvIHN0cmVhbSdzIGN5Y2xlIGluIHRoZSBzYW1lCisgICBwcmlyb3JpdHkgcXVldWUuICBJbWFnaW5lIHN0cmVhbSBBJ3MgY3ljbGUgaXMgQSwgYW5kIHN0cmVhbSBCJ3MKKyAgIGN5Y2xlIGlzIEIsIGFuZCBBIDwgQi4gIFRoZSBjeWNsZSBpcyB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciwgaXQKKyAgIG1heSBnZXQgb3ZlcmZsb3cuICBCZWNhdXNlIG9mIGhvdyB3ZSBjYWxjdWxhdGUgdGhlIG5leHQgY3ljbGUKKyAgIHZhbHVlLCBpZiBCIC0gQSBpcyBsZXNzIHRoYW4gb3IgZXF1YWxzIHRvCisgICBOR0hUVFAyX01BWF9DWUNMRV9ESVNUQU5DRSwgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgc2NhbGUsIGluIG90aGVyCisgICB3b3JkcywgQiBpcyByZWFsbHkgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEEuICBPdGhlcndpc2UsIEEgaXMgYQorICAgcmVzdWx0IG9mIG92ZXJmbG93LCBhbmQgaXQgaXMgYWN0dWFsbHkgQSA+IEIgaWYgd2UgY29uc2lkZXIgdGhhdAorICAgZmFjdC4gKi8KKyNkZWZpbmUgTkdIVFRQMl9NQVhfQ1lDTEVfRElTVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgodWludDY0X3QpTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NQVggKiAyNTYgKyAyNTUpCisKK3N0YXRpYyBpbnQgc3RyZWFtX2xlc3MoY29uc3Qgdm9pZCAqbGhzeCwgY29uc3Qgdm9pZCAqcmhzeCkgeworICBjb25zdCBuZ2h0dHAyX3N0cmVhbSAqbGhzLCAqcmhzOworCisgIGxocyA9IG5naHR0cDJfc3RydWN0X29mKGxoc3gsIG5naHR0cDJfc3RyZWFtLCBwcV9lbnRyeSk7CisgIHJocyA9IG5naHR0cDJfc3RydWN0X29mKHJoc3gsIG5naHR0cDJfc3RyZWFtLCBwcV9lbnRyeSk7CisKKyAgaWYgKGxocy0+Y3ljbGUgPT0gcmhzLT5jeWNsZSkgeworICAgIHJldHVybiBsaHMtPnNlcSA8IHJocy0+c2VxOworICB9CisKKyAgcmV0dXJuIHJocy0+Y3ljbGUgLSBsaHMtPmN5Y2xlIDw9IE5HSFRUUDJfTUFYX0NZQ0xFX0RJU1RBTkNFOworfQorCit2b2lkIG5naHR0cDJfc3RyZWFtX2luaXQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgbmdodHRwMl9zdHJlYW1fc3RhdGUgaW5pdGlhbF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdlaWdodCwgaW50MzJfdCByZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxvY2FsX2luaXRpYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX21hcF9lbnRyeV9pbml0KCZzdHJlYW0tPm1hcF9lbnRyeSwgKGtleV90eXBlKXN0cmVhbV9pZCk7CisgIG5naHR0cDJfcHFfaW5pdCgmc3RyZWFtLT5vYnEsIHN0cmVhbV9sZXNzLCBtZW0pOworCisgIHN0cmVhbS0+c3RyZWFtX2lkID0gc3RyZWFtX2lkOworICBzdHJlYW0tPmZsYWdzID0gZmxhZ3M7CisgIHN0cmVhbS0+c3RhdGUgPSBpbml0aWFsX3N0YXRlOworICBzdHJlYW0tPnNodXRfZmxhZ3MgPSBOR0hUVFAyX1NIVVRfTk9ORTsKKyAgc3RyZWFtLT5zdHJlYW1fdXNlcl9kYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc3RyZWFtLT5pdGVtID0gTlVMTDsKKyAgc3RyZWFtLT5yZW1vdGVfd2luZG93X3NpemUgPSByZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZTsKKyAgc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSA9IGxvY2FsX2luaXRpYWxfd2luZG93X3NpemU7CisgIHN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSA9IDA7CisgIHN0cmVhbS0+Y29uc3VtZWRfc2l6ZSA9IDA7CisgIHN0cmVhbS0+cmVjdl9yZWR1Y3Rpb24gPSAwOworICBzdHJlYW0tPndpbmRvd191cGRhdGVfcXVldWVkID0gMDsKKworICBzdHJlYW0tPmRlcF9wcmV2ID0gTlVMTDsKKyAgc3RyZWFtLT5kZXBfbmV4dCA9IE5VTEw7CisgIHN0cmVhbS0+c2liX3ByZXYgPSBOVUxMOworICBzdHJlYW0tPnNpYl9uZXh0ID0gTlVMTDsKKworICBzdHJlYW0tPmNsb3NlZF9wcmV2ID0gTlVMTDsKKyAgc3RyZWFtLT5jbG9zZWRfbmV4dCA9IE5VTEw7CisKKyAgc3RyZWFtLT53ZWlnaHQgPSB3ZWlnaHQ7CisgIHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQgPSAwOworCisgIHN0cmVhbS0+aHR0cF9mbGFncyA9IE5HSFRUUDJfSFRUUF9GTEFHX05PTkU7CisgIHN0cmVhbS0+Y29udGVudF9sZW5ndGggPSAtMTsKKyAgc3RyZWFtLT5yZWN2X2NvbnRlbnRfbGVuZ3RoID0gMDsKKyAgc3RyZWFtLT5zdGF0dXNfY29kZSA9IC0xOworCisgIHN0cmVhbS0+cXVldWVkID0gMDsKKyAgc3RyZWFtLT5kZXNjZW5kYW50X2xhc3RfY3ljbGUgPSAwOworICBzdHJlYW0tPmN5Y2xlID0gMDsKKyAgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkgPSAwOworICBzdHJlYW0tPmRlc2NlbmRhbnRfbmV4dF9zZXEgPSAwOworICBzdHJlYW0tPnNlcSA9IDA7CisgIHN0cmVhbS0+bGFzdF93cml0ZWxlbiA9IDA7Cit9CisKK3ZvaWQgbmdodHRwMl9zdHJlYW1fZnJlZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfcHFfZnJlZSgmc3RyZWFtLT5vYnEpOworICAvKiBXZSBkb24ndCBmcmVlIHN0cmVhbS0+aXRlbS4gIElmIGl0IGlzIGFzc2lnbmVkIHRvIGFvYiwgdGhlbgorICAgICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldCgpIHdpbGwgZGVsZXRlIGl0LiAgT3RoZXJ3aXNlLAorICAgICBuZ2h0dHAyX3N0cmVhbV9jbG9zZSgpIG9yIHNlc3Npb25fZGVsKCkgd2lsbCBkZWxldGUgaXQuICovCit9CisKK3ZvaWQgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24obmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgbmdodHRwMl9zaHV0X2ZsYWcgZmxhZykgeworICBzdHJlYW0tPnNodXRfZmxhZ3MgPSAodWludDhfdCkoc3RyZWFtLT5zaHV0X2ZsYWdzIHwgZmxhZyk7Cit9CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgfHN0cmVhbXwgaXMgYWN0aXZlLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlCisgKiBpbnRvIGFjY291bnQgaXRzIGRlc2NlbmRhbnRzLgorICovCitzdGF0aWMgaW50IHN0cmVhbV9hY3RpdmUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5pdGVtICYmCisgICAgICAgICAoc3RyZWFtLT5mbGFncyAmIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfQUxMKSA9PSAwOworfQorCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIHxzdHJlYW18IG9yIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgaXMgYWN0aXZlCisgKi8KK3N0YXRpYyBpbnQgc3RyZWFtX3N1YnRyZWVfYWN0aXZlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbV9hY3RpdmUoc3RyZWFtKSB8fCAhbmdodHRwMl9wcV9lbXB0eSgmc3RyZWFtLT5vYnEpOworfQorCisvKgorICogUmV0dXJucyBuZXh0IGN5Y2xlIGZvciB8c3RyZWFtfC4KKyAqLworc3RhdGljIHZvaWQgc3RyZWFtX25leHRfY3ljbGUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgdWludDY0X3QgbGFzdF9jeWNsZSkgeworICB1aW50NjRfdCBwZW5hbHR5OworCisgIHBlbmFsdHkgPSAodWludDY0X3Qpc3RyZWFtLT5sYXN0X3dyaXRlbGVuICogTkdIVFRQMl9NQVhfV0VJR0hUICsKKyAgICAgICAgICAgIHN0cmVhbS0+cGVuZGluZ19wZW5hbHR5OworCisgIHN0cmVhbS0+Y3ljbGUgPSBsYXN0X2N5Y2xlICsgcGVuYWx0eSAvICh1aW50MzJfdClzdHJlYW0tPndlaWdodDsKKyAgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkgPSAodWludDMyX3QpKHBlbmFsdHkgJSAodWludDMyX3Qpc3RyZWFtLT53ZWlnaHQpOworfQorCitzdGF0aWMgaW50IHN0cmVhbV9vYnFfcHVzaChuZ2h0dHAyX3N0cmVhbSAqZGVwX3N0cmVhbSwgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnY7CisKKyAgZm9yICg7IGRlcF9zdHJlYW0gJiYgIXN0cmVhbS0+cXVldWVkOworICAgICAgIHN0cmVhbSA9IGRlcF9zdHJlYW0sIGRlcF9zdHJlYW0gPSBkZXBfc3RyZWFtLT5kZXBfcHJldikgeworICAgIHN0cmVhbV9uZXh0X2N5Y2xlKHN0cmVhbSwgZGVwX3N0cmVhbS0+ZGVzY2VuZGFudF9sYXN0X2N5Y2xlKTsKKyAgICBzdHJlYW0tPnNlcSA9IGRlcF9zdHJlYW0tPmRlc2NlbmRhbnRfbmV4dF9zZXErKzsKKworICAgIERFQlVHRigic3RyZWFtOiBzdHJlYW09JWQgb2JxIHB1c2ggY3ljbGU9JWx1XG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgc3RyZWFtLT5jeWNsZSk7CisKKyAgICBERUJVR0YoInN0cmVhbTogcHVzaCBzdHJlYW0gJWQgdG8gc3RyZWFtICVkXG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgZGVwX3N0cmVhbS0+c3RyZWFtX2lkKTsKKworICAgIHJ2ID0gbmdodHRwMl9wcV9wdXNoKCZkZXBfc3RyZWFtLT5vYnEsICZzdHJlYW0tPnBxX2VudHJ5KTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICBzdHJlYW0tPnF1ZXVlZCA9IDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZXMgfHN0cmVhbXwgZnJvbSBwYXJlbnQncyBvYnEuICBJZiByZW1vdmFsIG9mIHxzdHJlYW18IG1ha2VzCisgKiBwYXJlbnQncyBvYnEgZW1wdHksIGFuZCBwYXJlbnQgaXMgbm90IGFjdGl2ZSwgdGhlbiBwYXJlbnQgaXMgYWxzbworICogcmVtb3ZlZC4gIFRoaXMgcHJvY2VzcyBpcyByZXBlYXRlZCByZWN1cnNpdmVseS4KKyAqLworc3RhdGljIHZvaWQgc3RyZWFtX29icV9yZW1vdmUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqZGVwX3N0cmVhbTsKKworICBkZXBfc3RyZWFtID0gc3RyZWFtLT5kZXBfcHJldjsKKworICBpZiAoIXN0cmVhbS0+cXVldWVkKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yICg7IGRlcF9zdHJlYW07IHN0cmVhbSA9IGRlcF9zdHJlYW0sIGRlcF9zdHJlYW0gPSBkZXBfc3RyZWFtLT5kZXBfcHJldikgeworICAgIERFQlVHRigic3RyZWFtOiByZW1vdmUgc3RyZWFtICVkIGZyb20gc3RyZWFtICVkXG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgZGVwX3N0cmVhbS0+c3RyZWFtX2lkKTsKKworICAgIG5naHR0cDJfcHFfcmVtb3ZlKCZkZXBfc3RyZWFtLT5vYnEsICZzdHJlYW0tPnBxX2VudHJ5KTsKKworICAgIGFzc2VydChzdHJlYW0tPnF1ZXVlZCk7CisKKyAgICBzdHJlYW0tPnF1ZXVlZCA9IDA7CisgICAgc3RyZWFtLT5jeWNsZSA9IDA7CisgICAgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkgPSAwOworICAgIHN0cmVhbS0+ZGVzY2VuZGFudF9sYXN0X2N5Y2xlID0gMDsKKyAgICBzdHJlYW0tPmxhc3Rfd3JpdGVsZW4gPSAwOworCisgICAgaWYgKHN0cmVhbV9zdWJ0cmVlX2FjdGl2ZShkZXBfc3RyZWFtKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorfQorCisvKgorICogTW92ZXMgfHN0cmVhbXwgZnJvbSB8c3JjfCdzIG9icSB0byB8ZGVzdHwncyBvYnEuICBSZW1vdmFsIGZyb20KKyAqIHxzcmN8J3Mgb2JxIGlzIGp1c3QgZG9uZSBjYWxsaW5nIG5naHR0cDJfcHFfcmVtb3ZlKCksIHNvIGl0IGRvZXMKKyAqIG5vdCByZWN1cnNpdmVseSByZW1vdmUgfHNyY3wgYW5kIGFuY2VzdG9ycywgbGlrZQorICogc3RyZWFtX29icV9yZW1vdmUoKS4KKyAqLworc3RhdGljIGludCBzdHJlYW1fb2JxX21vdmUobmdodHRwMl9zdHJlYW0gKmRlc3QsIG5naHR0cDJfc3RyZWFtICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGlmICghc3RyZWFtLT5xdWV1ZWQpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIERFQlVHRigic3RyZWFtOiByZW1vdmUgc3RyZWFtICVkIGZyb20gc3RyZWFtICVkIChtb3ZlKVxuIiwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICBzcmMtPnN0cmVhbV9pZCk7CisKKyAgbmdodHRwMl9wcV9yZW1vdmUoJnNyYy0+b2JxLCAmc3RyZWFtLT5wcV9lbnRyeSk7CisgIHN0cmVhbS0+cXVldWVkID0gMDsKKworICByZXR1cm4gc3RyZWFtX29icV9wdXNoKGRlc3QsIHN0cmVhbSk7Cit9CisKK3ZvaWQgbmdodHRwMl9zdHJlYW1fcmVzY2hlZHVsZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtOworCisgIGFzc2VydChzdHJlYW0tPnF1ZXVlZCk7CisKKyAgZGVwX3N0cmVhbSA9IHN0cmVhbS0+ZGVwX3ByZXY7CisKKyAgZm9yICg7IGRlcF9zdHJlYW07IHN0cmVhbSA9IGRlcF9zdHJlYW0sIGRlcF9zdHJlYW0gPSBkZXBfc3RyZWFtLT5kZXBfcHJldikgeworICAgIG5naHR0cDJfcHFfcmVtb3ZlKCZkZXBfc3RyZWFtLT5vYnEsICZzdHJlYW0tPnBxX2VudHJ5KTsKKworICAgIHN0cmVhbV9uZXh0X2N5Y2xlKHN0cmVhbSwgZGVwX3N0cmVhbS0+ZGVzY2VuZGFudF9sYXN0X2N5Y2xlKTsKKyAgICBzdHJlYW0tPnNlcSA9IGRlcF9zdHJlYW0tPmRlc2NlbmRhbnRfbmV4dF9zZXErKzsKKworICAgIG5naHR0cDJfcHFfcHVzaCgmZGVwX3N0cmVhbS0+b2JxLCAmc3RyZWFtLT5wcV9lbnRyeSk7CisKKyAgICBERUJVR0YoInN0cmVhbTogc3RyZWFtPSVkIG9icSByZXNjaGVkIGN5Y2xlPSVsdVxuIiwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgIHN0cmVhbS0+Y3ljbGUpOworCisgICAgZGVwX3N0cmVhbS0+bGFzdF93cml0ZWxlbiA9IHN0cmVhbS0+bGFzdF93cml0ZWxlbjsKKyAgfQorfQorCit2b2lkIG5naHR0cDJfc3RyZWFtX2NoYW5nZV93ZWlnaHQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCB3ZWlnaHQpIHsKKyAgbmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW07CisgIHVpbnQ2NF90IGxhc3RfY3ljbGU7CisgIGludDMyX3Qgb2xkX3dlaWdodDsKKyAgdWludDY0X3Qgd2xlbl9wZW5hbHR5OworCisgIGlmIChzdHJlYW0tPndlaWdodCA9PSB3ZWlnaHQpIHsKKyAgICByZXR1cm47CisgIH0KKworICBvbGRfd2VpZ2h0ID0gc3RyZWFtLT53ZWlnaHQ7CisgIHN0cmVhbS0+d2VpZ2h0ID0gd2VpZ2h0OworCisgIGRlcF9zdHJlYW0gPSBzdHJlYW0tPmRlcF9wcmV2OworCisgIGlmICghZGVwX3N0cmVhbSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGRlcF9zdHJlYW0tPnN1bV9kZXBfd2VpZ2h0ICs9IHdlaWdodCAtIG9sZF93ZWlnaHQ7CisKKyAgaWYgKCFzdHJlYW0tPnF1ZXVlZCkgeworICAgIHJldHVybjsKKyAgfQorCisgIG5naHR0cDJfcHFfcmVtb3ZlKCZkZXBfc3RyZWFtLT5vYnEsICZzdHJlYW0tPnBxX2VudHJ5KTsKKworICB3bGVuX3BlbmFsdHkgPSAodWludDY0X3Qpc3RyZWFtLT5sYXN0X3dyaXRlbGVuICogTkdIVFRQMl9NQVhfV0VJR0hUOworCisgIC8qIENvbXB1dGUgb2xkIHN0cmVhbS0+cGVuZGluZ19wZW5hbHR5IHdlIHVzZWQgdG8gY2FsY3VsYXRlCisgICAgIHN0cmVhbS0+Y3ljbGUgKi8KKyAgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkgPQorICAgICAgKHVpbnQzMl90KSgoc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkgKyAodWludDMyX3Qpb2xkX3dlaWdodCAtCisgICAgICAgICAgICAgICAgICAod2xlbl9wZW5hbHR5ICUgKHVpbnQzMl90KW9sZF93ZWlnaHQpKSAlCisgICAgICAgICAgICAgICAgICh1aW50MzJfdClvbGRfd2VpZ2h0KTsKKworICBsYXN0X2N5Y2xlID0gc3RyZWFtLT5jeWNsZSAtCisgICAgICAgICAgICAgICAod2xlbl9wZW5hbHR5ICsgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkpIC8gKHVpbnQzMl90KW9sZF93ZWlnaHQ7CisKKyAgLyogTm93IHdlIGhhdmUgb2xkIHN0cmVhbS0+cGVuZGluZ19wZW5hbHR5IGFuZCBuZXcgc3RyZWFtLT53ZWlnaHQgaW4KKyAgICAgcGxhY2UgKi8KKyAgc3RyZWFtX25leHRfY3ljbGUoc3RyZWFtLCBsYXN0X2N5Y2xlKTsKKworICBpZiAoZGVwX3N0cmVhbS0+ZGVzY2VuZGFudF9sYXN0X2N5Y2xlIC0gc3RyZWFtLT5jeWNsZSA8PQorICAgICAgTkdIVFRQMl9NQVhfQ1lDTEVfRElTVEFOQ0UpIHsKKyAgICBzdHJlYW0tPmN5Y2xlID0gZGVwX3N0cmVhbS0+ZGVzY2VuZGFudF9sYXN0X2N5Y2xlOworICB9CisKKyAgLyogQ29udGludWUgdG8gdXNlIHNhbWUgc3RyZWFtLT5zZXEgKi8KKworICBuZ2h0dHAyX3BxX3B1c2goJmRlcF9zdHJlYW0tPm9icSwgJnN0cmVhbS0+cHFfZW50cnkpOworCisgIERFQlVHRigic3RyZWFtOiBzdHJlYW09JWQgb2JxIHJlc2NoZWQgY3ljbGU9JWx1XG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgIHN0cmVhbS0+Y3ljbGUpOworfQorCitzdGF0aWMgbmdodHRwMl9zdHJlYW0gKnN0cmVhbV9sYXN0X3NpYihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGZvciAoOyBzdHJlYW0tPnNpYl9uZXh0OyBzdHJlYW0gPSBzdHJlYW0tPnNpYl9uZXh0KQorICAgIDsKKworICByZXR1cm4gc3RyZWFtOworfQorCitpbnQzMl90IG5naHR0cDJfc3RyZWFtX2RlcF9kaXN0cmlidXRlZF93ZWlnaHQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdlaWdodCkgeworICB3ZWlnaHQgPSBzdHJlYW0tPndlaWdodCAqIHdlaWdodCAvIHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQ7CisKKyAgcmV0dXJuIG5naHR0cDJfbWF4KDEsIHdlaWdodCk7Cit9CisKKyNpZmRlZiBTVFJFQU1fREVQX0RFQlVHCisKK3N0YXRpYyB2b2lkIGVuc3VyZV9pbmFjdGl2ZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpzaTsKKworICBpZiAoc3RyZWFtLT5xdWV1ZWQpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN0cmVhbSglcCk9JWQsIHN0cmVhbS0+cXVldWVkID0gMTsgd2FudCAwXG4iLCBzdHJlYW0sCisgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgYXNzZXJ0KDApOworICB9CisKKyAgaWYgKHN0cmVhbV9hY3RpdmUoc3RyZWFtKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAic3RyZWFtKCVwKT0lZCwgc3RyZWFtX2FjdGl2ZShzdHJlYW0pID0gMTsgd2FudCAwXG4iLAorICAgICAgICAgICAgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgYXNzZXJ0KDApOworICB9CisKKyAgaWYgKCFuZ2h0dHAyX3BxX2VtcHR5KCZzdHJlYW0tPm9icSkpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN0cmVhbSglcCk9JWQsIG5naHR0cDJfcHFfc2l6ZSgpID0gJXp1OyB3YW50IDBcbiIsIHN0cmVhbSwKKyAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLCBuZ2h0dHAyX3BxX3NpemUoJnN0cmVhbS0+b2JxKSk7CisgICAgYXNzZXJ0KDApOworICB9CisKKyAgZm9yIChzaSA9IHN0cmVhbS0+ZGVwX25leHQ7IHNpOyBzaSA9IHNpLT5zaWJfbmV4dCkgeworICAgIGVuc3VyZV9pbmFjdGl2ZShzaSk7CisgIH0KK30KKworc3RhdGljIHZvaWQgY2hlY2tfcXVldWVkKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnNpOworICBpbnQgcXVldWVkOworCisgIGlmIChzdHJlYW0tPnF1ZXVlZCkgeworICAgIGlmICghc3RyZWFtX3N1YnRyZWVfYWN0aXZlKHN0cmVhbSkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAic3RyZWFtKCVwKT0lZCwgc3RyZWFtLT5xdWV1ZWQgPT0gMSwgYnV0ICIKKyAgICAgICAgICAgICAgInN0cmVhbV9hY3RpdmUoKSA9PSAlZCBhbmQgbmdodHRwMl9wcV9zaXplKCZzdHJlYW0tPm9icSkgPSAlenVcbiIsCisgICAgICAgICAgICAgIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbV9hY3RpdmUoc3RyZWFtKSwKKyAgICAgICAgICAgICAgbmdodHRwMl9wcV9zaXplKCZzdHJlYW0tPm9icSkpOworICAgICAgYXNzZXJ0KDApOworICAgIH0KKyAgICBpZiAoIXN0cmVhbV9hY3RpdmUoc3RyZWFtKSkgeworICAgICAgcXVldWVkID0gMDsKKyAgICAgIGZvciAoc2kgPSBzdHJlYW0tPmRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICAgICAgaWYgKHNpLT5xdWV1ZWQpIHsKKyAgICAgICAgICArK3F1ZXVlZDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHF1ZXVlZCA9PSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJzdHJlYW0oJXApPSVkLCBzdHJlYW0tPnF1ZXVlZCA9PSAxLCBhbmQgIgorICAgICAgICAgICAgICAgICIhc3RyZWFtX2FjdGl2ZSgpLCBidXQgbm8gZGVzY2VuZGFudHMgaXMgcXVldWVkXG4iLAorICAgICAgICAgICAgICAgIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworICAgICAgICBhc3NlcnQoMCk7CisgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaSA9IHN0cmVhbS0+ZGVwX25leHQ7IHNpOyBzaSA9IHNpLT5zaWJfbmV4dCkgeworICAgICAgY2hlY2tfcXVldWVkKHNpKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKHN0cmVhbV9hY3RpdmUoc3RyZWFtKSB8fCAhbmdodHRwMl9wcV9lbXB0eSgmc3RyZWFtLT5vYnEpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgInN0cmVhbSglcCkgPSAlZCwgc3RyZWFtLT5xdWV1ZWQgPT0gMCwgYnV0ICIKKyAgICAgICAgICAgICAgInN0cmVhbV9hY3RpdmUoc3RyZWFtKSA9PSAlZCBhbmQgIgorICAgICAgICAgICAgICAibmdodHRwMl9wcV9zaXplKCZzdHJlYW0tPm9icSkgPSAlenVcbiIsCisgICAgICAgICAgICAgIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbV9hY3RpdmUoc3RyZWFtKSwKKyAgICAgICAgICAgICAgbmdodHRwMl9wcV9zaXplKCZzdHJlYW0tPm9icSkpOworICAgICAgYXNzZXJ0KDApOworICAgIH0KKyAgICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgICBlbnN1cmVfaW5hY3RpdmUoc2kpOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19zdW1fZGVwKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnNpOworICBpbnQzMl90IG4gPSAwOworICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgbiArPSBzaS0+d2VpZ2h0OworICB9CisgIGlmIChuICE9IHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN0cmVhbSglcCk9JWQsIHN1bV9kZXBfd2VpZ2h0ID0gJWQ7IHdhbnQgJWRcbiIsIHN0cmVhbSwKKyAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLCBuLCBzdHJlYW0tPnN1bV9kZXBfd2VpZ2h0KTsKKyAgICBhc3NlcnQoMCk7CisgIH0KKyAgZm9yIChzaSA9IHN0cmVhbS0+ZGVwX25leHQ7IHNpOyBzaSA9IHNpLT5zaWJfbmV4dCkgeworICAgIGNoZWNrX3N1bV9kZXAoc2kpOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2RlcF9wcmV2KG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnNpOworICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgaWYgKHNpLT5kZXBfcHJldiAhPSBzdHJlYW0pIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAic2ktPmRlcF9wcmV2ID0gJXA7IHdhbnQgJXBcbiIsIHNpLT5kZXBfcHJldiwgc3RyZWFtKTsKKyAgICAgIGFzc2VydCgwKTsKKyAgICB9CisgICAgY2hlY2tfZGVwX3ByZXYoc2kpOworICB9Cit9CisKKyNlbmRpZiAvKiBTVFJFQU1fREVQX0RFQlVHICovCisKKyNpZmRlZiBTVFJFQU1fREVQX0RFQlVHCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV90cmVlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnNpOworCisgIGlmICghc3RyZWFtKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yICg7IHN0cmVhbS0+ZGVwX3ByZXY7IHN0cmVhbSA9IHN0cmVhbS0+ZGVwX3ByZXYpCisgICAgOworCisgIGFzc2VydChzdHJlYW0tPnN0cmVhbV9pZCA9PSAwKTsKKyAgYXNzZXJ0KCFzdHJlYW0tPnF1ZXVlZCk7CisKKyAgZnByaW50ZihzdGRlcnIsICJjaGVja2luZy4uLlxuIik7CisgIGlmIChuZ2h0dHAyX3BxX2VtcHR5KCZzdHJlYW0tPm9icSkpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInJvb3Qgb2JxIGVtcHR5XG4iKTsKKyAgICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgICBlbnN1cmVfaW5hY3RpdmUoc2kpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgICBjaGVja19xdWV1ZWQoc2kpOworICAgIH0KKyAgfQorCisgIGNoZWNrX3N1bV9kZXAoc3RyZWFtKTsKKyAgY2hlY2tfZGVwX3ByZXYoc3RyZWFtKTsKK30KKyNlbHNlICAvKiAhU1RSRUFNX0RFUF9ERUJVRyAqLworc3RhdGljIHZvaWQgdmFsaWRhdGVfdHJlZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7ICh2b2lkKXN0cmVhbTsgfQorI2VuZGlmIC8qICFTVFJFQU1fREVQX0RFQlVHKi8KKworc3RhdGljIGludCBzdHJlYW1fdXBkYXRlX2RlcF9vbl9hdHRhY2hfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKworICBydiA9IHN0cmVhbV9vYnFfcHVzaChzdHJlYW0tPmRlcF9wcmV2LCBzdHJlYW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHZhbGlkYXRlX3RyZWUoc3RyZWFtKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtX3VwZGF0ZV9kZXBfb25fZGV0YWNoX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpZiAobmdodHRwMl9wcV9lbXB0eSgmc3RyZWFtLT5vYnEpKSB7CisgICAgc3RyZWFtX29icV9yZW1vdmUoc3RyZWFtKTsKKyAgfQorCisgIHZhbGlkYXRlX3RyZWUoc3RyZWFtKTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX2F0dGFjaF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKSB7CisgIGludCBydjsKKworICBhc3NlcnQoKHN0cmVhbS0+ZmxhZ3MgJiBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0FMTCkgPT0gMCk7CisgIGFzc2VydChzdHJlYW0tPml0ZW0gPT0gTlVMTCk7CisKKyAgREVCVUdGKCJzdHJlYW06IHN0cmVhbT0lZCBhdHRhY2ggaXRlbT0lcFxuIiwgc3RyZWFtLT5zdHJlYW1faWQsIGl0ZW0pOworCisgIHN0cmVhbS0+aXRlbSA9IGl0ZW07CisKKyAgcnYgPSBzdHJlYW1fdXBkYXRlX2RlcF9vbl9hdHRhY2hfaXRlbShzdHJlYW0pOworICBpZiAocnYgIT0gMCkgeworICAgIC8qIFRoaXMgbWF5IHJlbGF2ZSBzdHJlYW0tPnF1ZXVlZCA9PSAxLCBidXQgc3RyZWFtLT5pdGVtID09IE5VTEwuCisgICAgICAgQnV0IG9ubHkgY29uc2VxdWVuY2Ugb2YgdGhpcyBlcnJvciBpcyBmYXRhbCBvbmUsIGFuZCBzZXNzaW9uCisgICAgICAgZGVzdHJ1Y3Rpb24uICBJbiB0aGF0IGV4ZWN1dGlvbiBwYXRoLCB0aGVzZSBpbmNvbnNpc3RlbmN5IGRvZXMKKyAgICAgICBub3QgbWF0dGVyLiAqLworICAgIHN0cmVhbS0+aXRlbSA9IE5VTEw7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIERFQlVHRigic3RyZWFtOiBzdHJlYW09JWQgZGV0YWNoIGl0ZW09JXBcbiIsIHN0cmVhbS0+c3RyZWFtX2lkLCBzdHJlYW0tPml0ZW0pOworCisgIHN0cmVhbS0+aXRlbSA9IE5VTEw7CisgIHN0cmVhbS0+ZmxhZ3MgPSAodWludDhfdCkoc3RyZWFtLT5mbGFncyAmIH5OR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0FMTCk7CisKKyAgcmV0dXJuIHN0cmVhbV91cGRhdGVfZGVwX29uX2RldGFjaF9pdGVtKHN0cmVhbSk7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9kZWZlcl9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIHVpbnQ4X3QgZmxhZ3MpIHsKKyAgYXNzZXJ0KHN0cmVhbS0+aXRlbSk7CisKKyAgREVCVUdGKCJzdHJlYW06IHN0cmVhbT0lZCBkZWZlciBpdGVtPSVwIGNhdXNlPSUwMnhcbiIsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgc3RyZWFtLT5pdGVtLCBmbGFncyk7CisKKyAgc3RyZWFtLT5mbGFncyB8PSBmbGFnczsKKworICByZXR1cm4gc3RyZWFtX3VwZGF0ZV9kZXBfb25fZGV0YWNoX2l0ZW0oc3RyZWFtKTsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX3Jlc3VtZV9kZWZlcnJlZF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIHVpbnQ4X3QgZmxhZ3MpIHsKKyAgYXNzZXJ0KHN0cmVhbS0+aXRlbSk7CisKKyAgREVCVUdGKCJzdHJlYW06IHN0cmVhbT0lZCByZXN1bWUgaXRlbT0lcCBmbGFncz0lMDJ4XG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgIHN0cmVhbS0+aXRlbSwgZmxhZ3MpOworCisgIHN0cmVhbS0+ZmxhZ3MgPSAodWludDhfdCkoc3RyZWFtLT5mbGFncyAmIH5mbGFncyk7CisKKyAgaWYgKHN0cmVhbS0+ZmxhZ3MgJiBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0FMTCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIHN0cmVhbV91cGRhdGVfZGVwX29uX2F0dGFjaF9pdGVtKHN0cmVhbSk7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9jaGVja19kZWZlcnJlZF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+aXRlbSAmJiAoc3RyZWFtLT5mbGFncyAmIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfQUxMKTsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX2NoZWNrX2RlZmVycmVkX2J5X2Zsb3dfY29udHJvbChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHJldHVybiBzdHJlYW0tPml0ZW0gJiYKKyAgICAgICAgIChzdHJlYW0tPmZsYWdzICYgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9GTE9XX0NPTlRST0wpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9pbml0aWFsX3dpbmRvd19zaXplKGludDMyX3QgKndpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBvbGRfaW5pdGlhbF93aW5kb3dfc2l6ZSkgeworICBpbnQ2NF90IG5ld193aW5kb3dfc2l6ZSA9IChpbnQ2NF90KSgqd2luZG93X3NpemVfcHRyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2luaXRpYWxfd2luZG93X3NpemUgLSBvbGRfaW5pdGlhbF93aW5kb3dfc2l6ZTsKKyAgaWYgKElOVDMyX01JTiA+IG5ld193aW5kb3dfc2l6ZSB8fAorICAgICAgbmV3X3dpbmRvd19zaXplID4gTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgKndpbmRvd19zaXplX3B0ciA9IChpbnQzMl90KW5ld193aW5kb3dfc2l6ZTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV91cGRhdGVfcmVtb3RlX2luaXRpYWxfd2luZG93X3NpemUoCisgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICBpbnQzMl90IG9sZF9pbml0aWFsX3dpbmRvd19zaXplKSB7CisgIHJldHVybiB1cGRhdGVfaW5pdGlhbF93aW5kb3dfc2l6ZSgmc3RyZWFtLT5yZW1vdGVfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbml0aWFsX3dpbmRvd19zaXplKTsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX3VwZGF0ZV9sb2NhbF9pbml0aWFsX3dpbmRvd19zaXplKAorICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIGludDMyX3QgbmV3X2luaXRpYWxfd2luZG93X3NpemUsCisgICAgaW50MzJfdCBvbGRfaW5pdGlhbF93aW5kb3dfc2l6ZSkgeworICByZXR1cm4gdXBkYXRlX2luaXRpYWxfd2luZG93X3NpemUoJnN0cmVhbS0+bG9jYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbml0aWFsX3dpbmRvd19zaXplKTsKK30KKwordm9pZCBuZ2h0dHAyX3N0cmVhbV9wcm9taXNlX2Z1bGZpbGxlZChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHN0cmVhbS0+c3RhdGUgPSBOR0hUVFAyX1NUUkVBTV9PUEVORUQ7CisgIHN0cmVhbS0+ZmxhZ3MgPSAodWludDhfdCkoc3RyZWFtLT5mbGFncyAmIH5OR0hUVFAyX1NUUkVBTV9GTEFHX1BVU0gpOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX2ZpbmRfYW5jZXN0b3IobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqdGFyZ2V0KSB7CisgIGZvciAoOyBzdHJlYW07IHN0cmVhbSA9IHN0cmVhbS0+ZGVwX3ByZXYpIHsKKyAgICBpZiAoc3RyZWFtID09IHRhcmdldCkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX2luc2VydChuZ2h0dHAyX3N0cmVhbSAqZGVwX3N0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnNpOworICBpbnQgcnY7CisKKyAgREVCVUdGKCJzdHJlYW06IGRlcF9pbnNlcnQgZGVwX3N0cmVhbSglcCk9JWQsIHN0cmVhbSglcCk9JWRcbiIsIGRlcF9zdHJlYW0sCisgICAgICAgICBkZXBfc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQgPSBkZXBfc3RyZWFtLT5zdW1fZGVwX3dlaWdodDsKKyAgZGVwX3N0cmVhbS0+c3VtX2RlcF93ZWlnaHQgPSBzdHJlYW0tPndlaWdodDsKKworICBpZiAoZGVwX3N0cmVhbS0+ZGVwX25leHQpIHsKKyAgICBmb3IgKHNpID0gZGVwX3N0cmVhbS0+ZGVwX25leHQ7IHNpOyBzaSA9IHNpLT5zaWJfbmV4dCkgeworICAgICAgc2ktPmRlcF9wcmV2ID0gc3RyZWFtOworICAgICAgaWYgKHNpLT5xdWV1ZWQpIHsKKyAgICAgICAgcnYgPSBzdHJlYW1fb2JxX21vdmUoc3RyZWFtLCBkZXBfc3RyZWFtLCBzaSk7CisgICAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0cmVhbV9zdWJ0cmVlX2FjdGl2ZShzdHJlYW0pKSB7CisgICAgICBydiA9IHN0cmVhbV9vYnFfcHVzaChkZXBfc3RyZWFtLCBzdHJlYW0pOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgIH0KKworICAgIHN0cmVhbS0+ZGVwX25leHQgPSBkZXBfc3RyZWFtLT5kZXBfbmV4dDsKKyAgfQorCisgIGRlcF9zdHJlYW0tPmRlcF9uZXh0ID0gc3RyZWFtOworICBzdHJlYW0tPmRlcF9wcmV2ID0gZGVwX3N0cmVhbTsKKworICB2YWxpZGF0ZV90cmVlKHN0cmVhbSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZXBfcHJldihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBuZ2h0dHAyX3N0cmVhbSAqZGVwKSB7CisgIGZvciAoOyBzdHJlYW07IHN0cmVhbSA9IHN0cmVhbS0+c2liX25leHQpIHsKKyAgICBzdHJlYW0tPmRlcF9wcmV2ID0gZGVwOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtfZGVwKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLCBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGRlcF9zdHJlYW0tPmRlcF9uZXh0ID0gc3RyZWFtOworICBpZiAoc3RyZWFtKSB7CisgICAgc3RyZWFtLT5kZXBfcHJldiA9IGRlcF9zdHJlYW07CisgIH0KK30KKworc3RhdGljIHZvaWQgbGlua19zaWIobmdodHRwMl9zdHJlYW0gKmEsIG5naHR0cDJfc3RyZWFtICpiKSB7CisgIGEtPnNpYl9uZXh0ID0gYjsKKyAgaWYgKGIpIHsKKyAgICBiLT5zaWJfcHJldiA9IGE7CisgIH0KK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X2xpbmtfZGVwKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnNpYl9uZXh0OworCisgIGFzc2VydChzdHJlYW0tPnNpYl9wcmV2ID09IE5VTEwpOworCisgIHNpYl9uZXh0ID0gZGVwX3N0cmVhbS0+ZGVwX25leHQ7CisKKyAgbGlua19zaWIoc3RyZWFtLCBzaWJfbmV4dCk7CisKKyAgbGlua19kZXAoZGVwX3N0cmVhbSwgc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX3NpYihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpwcmV2LCAqbmV4dCwgKmRlcF9uZXh0OworCisgIHByZXYgPSBzdHJlYW0tPnNpYl9wcmV2OworICBkZXBfbmV4dCA9IHN0cmVhbS0+ZGVwX25leHQ7CisKKyAgYXNzZXJ0KHByZXYpOworCisgIGlmIChkZXBfbmV4dCkgeworICAgIC8qCisgICAgICogIHByZXYtLXN0cmVhbSgtLXNpYl9uZXh0LS0uLi4pCisgICAgICogICAgICAgICB8CisgICAgICogICAgICAgIGRlcF9uZXh0CisgICAgICovCisKKyAgICBsaW5rX3NpYihwcmV2LCBkZXBfbmV4dCk7CisKKyAgICBzZXRfZGVwX3ByZXYoZGVwX25leHQsIHN0cmVhbS0+ZGVwX3ByZXYpOworCisgICAgaWYgKHN0cmVhbS0+c2liX25leHQpIHsKKyAgICAgIGxpbmtfc2liKHN0cmVhbV9sYXN0X3NpYihkZXBfbmV4dCksIHN0cmVhbS0+c2liX25leHQpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKgorICAgICAqICBwcmV2LS1zdHJlYW0oLS1zaWJfbmV4dC0tLi4uKQorICAgICAqLworICAgIG5leHQgPSBzdHJlYW0tPnNpYl9uZXh0OworCisgICAgcHJldi0+c2liX25leHQgPSBuZXh0OworCisgICAgaWYgKG5leHQpIHsKKyAgICAgIG5leHQtPnNpYl9wcmV2ID0gcHJldjsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQgdW5saW5rX2RlcChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpwcmV2LCAqbmV4dCwgKmRlcF9uZXh0OworCisgIHByZXYgPSBzdHJlYW0tPmRlcF9wcmV2OworICBkZXBfbmV4dCA9IHN0cmVhbS0+ZGVwX25leHQ7CisKKyAgYXNzZXJ0KHByZXYpOworCisgIGlmIChkZXBfbmV4dCkgeworICAgIC8qCisgICAgICogcHJldgorICAgICAqICAgfAorICAgICAqIHN0cmVhbSgtLXNpYl9uZXh0LS0uLi4pCisgICAgICogICB8CisgICAgICogZGVwX25leHQKKyAgICAgKi8KKyAgICBsaW5rX2RlcChwcmV2LCBkZXBfbmV4dCk7CisKKyAgICBzZXRfZGVwX3ByZXYoZGVwX25leHQsIHN0cmVhbS0+ZGVwX3ByZXYpOworCisgICAgaWYgKHN0cmVhbS0+c2liX25leHQpIHsKKyAgICAgIGxpbmtfc2liKHN0cmVhbV9sYXN0X3NpYihkZXBfbmV4dCksIHN0cmVhbS0+c2liX25leHQpOworICAgIH0KKworICB9IGVsc2UgaWYgKHN0cmVhbS0+c2liX25leHQpIHsKKyAgICAvKgorICAgICAqIHByZXYKKyAgICAgKiAgIHwKKyAgICAgKiBzdHJlYW0tLXNpYl9uZXh0CisgICAgICovCisgICAgbmV4dCA9IHN0cmVhbS0+c2liX25leHQ7CisKKyAgICBuZXh0LT5zaWJfcHJldiA9IE5VTEw7CisKKyAgICBsaW5rX2RlcChwcmV2LCBuZXh0KTsKKyAgfSBlbHNlIHsKKyAgICBwcmV2LT5kZXBfbmV4dCA9IE5VTEw7CisgIH0KK30KKwordm9pZCBuZ2h0dHAyX3N0cmVhbV9kZXBfYWRkKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgREVCVUdGKCJzdHJlYW06IGRlcF9hZGQgZGVwX3N0cmVhbSglcCk9JWQsIHN0cmVhbSglcCk9JWRcbiIsIGRlcF9zdHJlYW0sCisgICAgICAgICBkZXBfc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIGRlcF9zdHJlYW0tPnN1bV9kZXBfd2VpZ2h0ICs9IHN0cmVhbS0+d2VpZ2h0OworCisgIGlmIChkZXBfc3RyZWFtLT5kZXBfbmV4dCA9PSBOVUxMKSB7CisgICAgbGlua19kZXAoZGVwX3N0cmVhbSwgc3RyZWFtKTsKKyAgfSBlbHNlIHsKKyAgICBpbnNlcnRfbGlua19kZXAoZGVwX3N0cmVhbSwgc3RyZWFtKTsKKyAgfQorCisgIHZhbGlkYXRlX3RyZWUoc3RyZWFtKTsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX2RlcF9yZW1vdmUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqZGVwX3ByZXYsICpzaTsKKyAgaW50MzJfdCBzdW1fZGVwX3dlaWdodF9kZWx0YTsKKyAgaW50IHJ2OworCisgIERFQlVHRigic3RyZWFtOiBkZXBfcmVtb3ZlIHN0cmVhbSglcCk9JWRcbiIsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIC8qIERpc3RyaWJ1dGUgd2VpZ2h0IG9mIHxzdHJlYW18IHRvIGRpcmVjdCBkZXNjZW5kYW50cyAqLworICBzdW1fZGVwX3dlaWdodF9kZWx0YSA9IC1zdHJlYW0tPndlaWdodDsKKworICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgc2ktPndlaWdodCA9IG5naHR0cDJfc3RyZWFtX2RlcF9kaXN0cmlidXRlZF93ZWlnaHQoc3RyZWFtLCBzaS0+d2VpZ2h0KTsKKworICAgIHN1bV9kZXBfd2VpZ2h0X2RlbHRhICs9IHNpLT53ZWlnaHQ7CisKKyAgICBpZiAoc2ktPnF1ZXVlZCkgeworICAgICAgcnYgPSBzdHJlYW1fb2JxX21vdmUoc3RyZWFtLT5kZXBfcHJldiwgc3RyZWFtLCBzaSk7CisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgfQorICB9CisKKyAgYXNzZXJ0KHN0cmVhbS0+ZGVwX3ByZXYpOworCisgIGRlcF9wcmV2ID0gc3RyZWFtLT5kZXBfcHJldjsKKworICBkZXBfcHJldi0+c3VtX2RlcF93ZWlnaHQgKz0gc3VtX2RlcF93ZWlnaHRfZGVsdGE7CisKKyAgaWYgKHN0cmVhbS0+cXVldWVkKSB7CisgICAgc3RyZWFtX29icV9yZW1vdmUoc3RyZWFtKTsKKyAgfQorCisgIGlmIChzdHJlYW0tPnNpYl9wcmV2KSB7CisgICAgdW5saW5rX3NpYihzdHJlYW0pOworICB9IGVsc2UgeworICAgIHVubGlua19kZXAoc3RyZWFtKTsKKyAgfQorCisgIHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQgPSAwOworCisgIHN0cmVhbS0+ZGVwX3ByZXYgPSBOVUxMOworICBzdHJlYW0tPmRlcF9uZXh0ID0gTlVMTDsKKyAgc3RyZWFtLT5zaWJfcHJldiA9IE5VTEw7CisgIHN0cmVhbS0+c2liX25leHQgPSBOVUxMOworCisgIHZhbGlkYXRlX3RyZWUoZGVwX3ByZXYpOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX2luc2VydF9zdWJ0cmVlKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpsYXN0X3NpYjsKKyAgbmdodHRwMl9zdHJlYW0gKmRlcF9uZXh0OworICBuZ2h0dHAyX3N0cmVhbSAqc2k7CisgIGludCBydjsKKworICBERUJVR0YoInN0cmVhbTogZGVwX2luc2VydF9zdWJ0cmVlIGRlcF9zdHJlYW0oJXApPSVkIHN0cmVhbSglcCk9JWRcbiIsCisgICAgICAgICBkZXBfc3RyZWFtLCBkZXBfc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQgKz0gZGVwX3N0cmVhbS0+c3VtX2RlcF93ZWlnaHQ7CisgIGRlcF9zdHJlYW0tPnN1bV9kZXBfd2VpZ2h0ID0gc3RyZWFtLT53ZWlnaHQ7CisKKyAgaWYgKGRlcF9zdHJlYW0tPmRlcF9uZXh0KSB7CisgICAgZGVwX25leHQgPSBkZXBfc3RyZWFtLT5kZXBfbmV4dDsKKworICAgIGxpbmtfZGVwKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisKKyAgICBpZiAoc3RyZWFtLT5kZXBfbmV4dCkgeworICAgICAgbGFzdF9zaWIgPSBzdHJlYW1fbGFzdF9zaWIoc3RyZWFtLT5kZXBfbmV4dCk7CisKKyAgICAgIGxpbmtfc2liKGxhc3Rfc2liLCBkZXBfbmV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxpbmtfZGVwKHN0cmVhbSwgZGVwX25leHQpOworICAgIH0KKworICAgIGZvciAoc2kgPSBkZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgICBzaS0+ZGVwX3ByZXYgPSBzdHJlYW07CisgICAgICBpZiAoc2ktPnF1ZXVlZCkgeworICAgICAgICBydiA9IHN0cmVhbV9vYnFfbW92ZShzdHJlYW0sIGRlcF9zdHJlYW0sIHNpKTsKKyAgICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgbGlua19kZXAoZGVwX3N0cmVhbSwgc3RyZWFtKTsKKyAgfQorCisgIGlmIChzdHJlYW1fc3VidHJlZV9hY3RpdmUoc3RyZWFtKSkgeworICAgIHJ2ID0gc3RyZWFtX29icV9wdXNoKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICB2YWxpZGF0ZV90cmVlKGRlcF9zdHJlYW0pOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX2FkZF9zdWJ0cmVlKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKworICBERUJVR0YoInN0cmVhbTogZGVwX2FkZF9zdWJ0cmVlIGRlcF9zdHJlYW0oJXApPSVkIHN0cmVhbSglcCk9JWRcbiIsCisgICAgICAgICBkZXBfc3RyZWFtLCBkZXBfc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIGRlcF9zdHJlYW0tPnN1bV9kZXBfd2VpZ2h0ICs9IHN0cmVhbS0+d2VpZ2h0OworCisgIGlmIChkZXBfc3RyZWFtLT5kZXBfbmV4dCkgeworICAgIGluc2VydF9saW5rX2RlcChkZXBfc3RyZWFtLCBzdHJlYW0pOworICB9IGVsc2UgeworICAgIGxpbmtfZGVwKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgIH0KKworICBpZiAoc3RyZWFtX3N1YnRyZWVfYWN0aXZlKHN0cmVhbSkpIHsKKyAgICBydiA9IHN0cmVhbV9vYnFfcHVzaChkZXBfc3RyZWFtLCBzdHJlYW0pOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgdmFsaWRhdGVfdHJlZShkZXBfc3RyZWFtKTsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX3N0cmVhbV9kZXBfcmVtb3ZlX3N1YnRyZWUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqbmV4dCwgKmRlcF9wcmV2OworCisgIERFQlVHRigic3RyZWFtOiBkZXBfcmVtb3ZlX3N1YnRyZWUgc3RyZWFtKCVwKT0lZFxuIiwgc3RyZWFtLAorICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIGFzc2VydChzdHJlYW0tPmRlcF9wcmV2KTsKKworICBkZXBfcHJldiA9IHN0cmVhbS0+ZGVwX3ByZXY7CisKKyAgaWYgKHN0cmVhbS0+c2liX3ByZXYpIHsKKyAgICBsaW5rX3NpYihzdHJlYW0tPnNpYl9wcmV2LCBzdHJlYW0tPnNpYl9uZXh0KTsKKyAgfSBlbHNlIHsKKyAgICBuZXh0ID0gc3RyZWFtLT5zaWJfbmV4dDsKKworICAgIGxpbmtfZGVwKGRlcF9wcmV2LCBuZXh0KTsKKworICAgIGlmIChuZXh0KSB7CisgICAgICBuZXh0LT5zaWJfcHJldiA9IE5VTEw7CisgICAgfQorICB9CisKKyAgZGVwX3ByZXYtPnN1bV9kZXBfd2VpZ2h0IC09IHN0cmVhbS0+d2VpZ2h0OworCisgIGlmIChzdHJlYW0tPnF1ZXVlZCkgeworICAgIHN0cmVhbV9vYnFfcmVtb3ZlKHN0cmVhbSk7CisgIH0KKworICB2YWxpZGF0ZV90cmVlKGRlcF9wcmV2KTsKKworICBzdHJlYW0tPnNpYl9wcmV2ID0gTlVMTDsKKyAgc3RyZWFtLT5zaWJfbmV4dCA9IE5VTEw7CisgIHN0cmVhbS0+ZGVwX3ByZXYgPSBOVUxMOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1faW5fZGVwX3RyZWUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5kZXBfcHJldiB8fCBzdHJlYW0tPmRlcF9uZXh0IHx8IHN0cmVhbS0+c2liX3ByZXYgfHwKKyAgICAgICAgIHN0cmVhbS0+c2liX25leHQ7Cit9CisKK25naHR0cDJfb3V0Ym91bmRfaXRlbSAqCituZ2h0dHAyX3N0cmVhbV9uZXh0X291dGJvdW5kX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3BxX2VudHJ5ICplbnQ7CisgIG5naHR0cDJfc3RyZWFtICpzaTsKKworICBmb3IgKDs7KSB7CisgICAgaWYgKHN0cmVhbV9hY3RpdmUoc3RyZWFtKSkgeworICAgICAgLyogVXBkYXRlIGFzY2VuZGFudCdzIGRlc2NlbmRhbnRfbGFzdF9jeWNsZSBoZXJlLCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAgYXNzdXJlIHRoYXQgbmV3IHN0cmVhbSBpcyBzY2hlZHVsZWQgYmFzZWQgb24gaXQuICovCisgICAgICBmb3IgKHNpID0gc3RyZWFtOyBzaS0+ZGVwX3ByZXY7IHNpID0gc2ktPmRlcF9wcmV2KSB7CisgICAgICAgIHNpLT5kZXBfcHJldi0+ZGVzY2VuZGFudF9sYXN0X2N5Y2xlID0gc2ktPmN5Y2xlOworICAgICAgfQorICAgICAgcmV0dXJuIHN0cmVhbS0+aXRlbTsKKyAgICB9CisgICAgZW50ID0gbmdodHRwMl9wcV90b3AoJnN0cmVhbS0+b2JxKTsKKyAgICBpZiAoIWVudCkgeworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN0cmVhbSA9IG5naHR0cDJfc3RydWN0X29mKGVudCwgbmdodHRwMl9zdHJlYW0sIHBxX2VudHJ5KTsKKyAgfQorfQorCituZ2h0dHAyX3N0cmVhbV9wcm90b19zdGF0ZSBuZ2h0dHAyX3N0cmVhbV9nZXRfc3RhdGUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpZiAoc3RyZWFtLT5mbGFncyAmIE5HSFRUUDJfU1RSRUFNX0ZMQUdfQ0xPU0VEKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX1NUQVRFX0NMT1NFRDsKKyAgfQorCisgIGlmIChzdHJlYW0tPmZsYWdzICYgTkdIVFRQMl9TVFJFQU1fRkxBR19QVVNIKSB7CisgICAgaWYgKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9SRCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX1NUQVRFX1JFU0VSVkVEX0xPQ0FMOworICAgIH0KKworICAgIGlmIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfV1IpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX1NUUkVBTV9TVEFURV9SRVNFUlZFRF9SRU1PVEU7CisgICAgfQorICB9CisKKyAgaWYgKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9SRCkgeworICAgIHJldHVybiBOR0hUVFAyX1NUUkVBTV9TVEFURV9IQUxGX0NMT1NFRF9SRU1PVEU7CisgIH0KKworICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1dSKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX1NUQVRFX0hBTEZfQ0xPU0VEX0xPQ0FMOworICB9CisKKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fSURMRSkgeworICAgIHJldHVybiBOR0hUVFAyX1NUUkVBTV9TVEFURV9JRExFOworICB9CisKKyAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX1NUQVRFX09QRU47Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3N0cmVhbV9nZXRfcGFyZW50KG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+ZGVwX3ByZXY7Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3N0cmVhbV9nZXRfbmV4dF9zaWJsaW5nKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+c2liX25leHQ7Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3N0cmVhbV9nZXRfcHJldmlvdXNfc2libGluZyhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHJldHVybiBzdHJlYW0tPnNpYl9wcmV2OworfQorCituZ2h0dHAyX3N0cmVhbSAqbmdodHRwMl9zdHJlYW1fZ2V0X2ZpcnN0X2NoaWxkKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+ZGVwX25leHQ7Cit9CisKK2ludDMyX3QgbmdodHRwMl9zdHJlYW1fZ2V0X3dlaWdodChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHJldHVybiBzdHJlYW0tPndlaWdodDsKK30KKworaW50MzJfdCBuZ2h0dHAyX3N0cmVhbV9nZXRfc3VtX2RlcGVuZGVuY3lfd2VpZ2h0KG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQ7Cit9CisKK2ludDMyX3QgbmdodHRwMl9zdHJlYW1fZ2V0X3N0cmVhbV9pZChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHJldHVybiBzdHJlYW0tPnN0cmVhbV9pZDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3RyZWFtLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjgwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N0cmVhbS5oCkBAIC0wLDAgKzEsNDM3IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9TVFJFQU1fSAorI2RlZmluZSBOR0hUVFAyX1NUUkVBTV9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKyNpbmNsdWRlICJuZ2h0dHAyX291dGJvdW5kX2l0ZW0uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX21hcC5oIgorI2luY2x1ZGUgIm5naHR0cDJfcHEuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2ludC5oIgorCisvKgorICogSWYgbG9jYWwgcGVlciBpcyBzdHJlYW0gaW5pdGlhdG9yOgorICogTkdIVFRQMl9TVFJFQU1fT1BFTklORyA6IHVwb24gc2VuZGluZyByZXF1ZXN0IEhFQURFUlMKKyAqIE5HSFRUUDJfU1RSRUFNX09QRU5FRCA6IHVwb24gcmVjZWl2aW5nIHJlc3BvbnNlIEhFQURFUlMKKyAqIE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcgOiB1cG9uIHF1ZXVpbmcgUlNUX1NUUkVBTQorICoKKyAqIElmIHJlbW90ZSBwZWVyIGlzIHN0cmVhbSBpbml0aWF0b3I6CisgKiBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HIDogdXBvbiByZWNlaXZpbmcgcmVxdWVzdCBIRUFERVJTCisgKiBOR0hUVFAyX1NUUkVBTV9PUEVORUQgOiB1cG9uIHNlbmRpbmcgcmVzcG9uc2UgSEVBREVSUworICogTkdIVFRQMl9TVFJFQU1fQ0xPU0lORyA6IHVwb24gcXVldWluZyBSU1RfU1RSRUFNCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qIEluaXRpYWwgc3RhdGUgKi8KKyAgTkdIVFRQMl9TVFJFQU1fSU5JVElBTCwKKyAgLyogRm9yIHN0cmVhbSBpbml0aWF0b3I6IHJlcXVlc3QgSEVBREVSUyBoYXMgYmVlbiBzZW50LCBidXQgcmVzcG9uc2UKKyAgICAgSEVBREVSUyBoYXMgbm90IGJlZW4gcmVjZWl2ZWQgeWV0LiAgRm9yIHJlY2VpdmVyOiByZXF1ZXN0IEhFQURFUlMKKyAgICAgaGFzIGJlZW4gcmVjZWl2ZWQsIGJ1dCBpdCBkb2VzIG5vdCBzZW5kIHJlc3BvbnNlIEhFQURFUlMgeWV0LiAqLworICBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HLAorICAvKiBGb3Igc3RyZWFtIGluaXRpYXRvcjogcmVzcG9uc2UgSEVBREVSUyBpcyByZWNlaXZlZC4gRm9yIHJlY2VpdmVyOgorICAgICByZXNwb25zZSBIRUFERVJTIGlzIHNlbnQuICovCisgIE5HSFRUUDJfU1RSRUFNX09QRU5FRCwKKyAgLyogUlNUX1NUUkVBTSBpcyByZWNlaXZlZCwgYnV0IHNvbWVob3cgd2UgbmVlZCB0byBrZWVwIHN0cmVhbSBpbgorICAgICBtZW1vcnkuICovCisgIE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcsCisgIC8qIFBVU0hfUFJPTUlTRSBpcyByZWNlaXZlZCBvciBzZW50ICovCisgIE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVELAorICAvKiBTdHJlYW0gaXMgY3JlYXRlZCBpbiB0aGlzIHN0YXRlIGlmIGl0IGlzIHVzZWQgYXMgYW5jaG9yIGluCisgICAgIGRlcGVuZGVuY3kgdHJlZS4gKi8KKyAgTkdIVFRQMl9TVFJFQU1fSURMRQorfSBuZ2h0dHAyX3N0cmVhbV9zdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9TSFVUX05PTkUgPSAwLAorICAvKiBJbmRpY2F0ZXMgZnVydGhlciByZWNlcHRpb25zIHdpbGwgYmUgZGlzYWxsb3dlZC4gKi8KKyAgTkdIVFRQMl9TSFVUX1JEID0gMHgwMSwKKyAgLyogSW5kaWNhdGVzIGZ1cnRoZXIgdHJhbnNtaXNzaW9ucyB3aWxsIGJlIGRpc2FsbG93ZWQuICovCisgIE5HSFRUUDJfU0hVVF9XUiA9IDB4MDIsCisgIC8qIEluZGljYXRlcyBib3RoIGZ1cnRoZXIgcmVjZXB0aW9ucyBhbmQgdHJhbnNtaXNzaW9ucyB3aWxsIGJlCisgICAgIGRpc2FsbG93ZWQuICovCisgIE5HSFRUUDJfU0hVVF9SRFdSID0gTkdIVFRQMl9TSFVUX1JEIHwgTkdIVFRQMl9TSFVUX1dSCit9IG5naHR0cDJfc2h1dF9mbGFnOworCit0eXBlZGVmIGVudW0geworICBOR0hUVFAyX1NUUkVBTV9GTEFHX05PTkUgPSAwLAorICAvKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIHN0cmVhbSBpcyBwdXNoZWQgc3RyZWFtIGFuZCBub3Qgb3BlbmVkCisgICAgIHlldC4gKi8KKyAgTkdIVFRQMl9TVFJFQU1fRkxBR19QVVNIID0gMHgwMSwKKyAgLyogSW5kaWNhdGVzIHRoYXQgdGhpcyBzdHJlYW0gd2FzIGNsb3NlZCAqLworICBOR0hUVFAyX1NUUkVBTV9GTEFHX0NMT1NFRCA9IDB4MDIsCisgIC8qIEluZGljYXRlcyB0aGUgaXRlbSBpcyBkZWZlcnJlZCBkdWUgdG8gZmxvdyBjb250cm9sLiAqLworICBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0ZMT1dfQ09OVFJPTCA9IDB4MDQsCisgIC8qIEluZGljYXRlcyB0aGUgaXRlbSBpcyBkZWZlcnJlZCBieSB1c2VyIGNhbGxiYWNrICovCisgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfVVNFUiA9IDB4MDgsCisgIC8qIGJpdHdpc2UgT1Igb2YgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9GTE9XX0NPTlRST0wgYW5kCisgICAgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfVVNFUi4gKi8KKyAgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9BTEwgPSAweDBjCisKK30gbmdodHRwMl9zdHJlYW1fZmxhZzsKKworLyogSFRUUCByZWxhdGVkIGZsYWdzIHRvIGVuZm9yY2UgSFRUUCBzZW1hbnRpY3MgKi8KK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfSFRUUF9GTEFHX05PTkUgPSAwLAorICAvKiBoZWFkZXIgZmllbGQgc2VlbiBzbyBmYXIgKi8KKyAgTkdIVFRQMl9IVFRQX0ZMQUdfX0FVVEhPUklUWSA9IDEsCisgIE5HSFRUUDJfSFRUUF9GTEFHX19QQVRIID0gMSA8PCAxLAorICBOR0hUVFAyX0hUVFBfRkxBR19fTUVUSE9EID0gMSA8PCAyLAorICBOR0hUVFAyX0hUVFBfRkxBR19fU0NIRU1FID0gMSA8PCAzLAorICAvKiBob3N0IGlzIG5vdCBwc2V1ZG8gaGVhZGVyLCBidXQgd2UgcmVxdWlyZSBlaXRoZXIgaG9zdCBvcgorICAgICA6YXV0aG9yaXR5ICovCisgIE5HSFRUUDJfSFRUUF9GTEFHX0hPU1QgPSAxIDw8IDQsCisgIE5HSFRUUDJfSFRUUF9GTEFHX19TVEFUVVMgPSAxIDw8IDUsCisgIC8qIHJlcXVpcmVkIGhlYWRlciBmaWVsZHMgZm9yIEhUVFAgcmVxdWVzdCBleGNlcHQgZm9yIENPTk5FQ1QKKyAgICAgbWV0aG9kLiAqLworICBOR0hUVFAyX0hUVFBfRkxBR19SRVFfSEVBREVSUyA9IE5HSFRUUDJfSFRUUF9GTEFHX19NRVRIT0QgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfSFRUUF9GTEFHX19QQVRIIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0hUVFBfRkxBR19fU0NIRU1FLAorICBOR0hUVFAyX0hUVFBfRkxBR19QU0VVRE9fSEVBREVSX0RJU0FMTE9XRUQgPSAxIDw8IDYsCisgIC8qIEhUVFAgbWV0aG9kIGZsYWdzICovCisgIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfQ09OTkVDVCA9IDEgPDwgNywKKyAgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9IRUFEID0gMSA8PCA4LAorICBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX09QVElPTlMgPSAxIDw8IDksCisgIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfVVBHUkFERV9XT1JLQVJPVU5EID0gMSA8PCAxMCwKKyAgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9BTEwgPSBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0NPTk5FQ1QgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfSEVBRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9PUFRJT05TIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX1VQR1JBREVfV09SS0FST1VORCwKKyAgLyogOnBhdGggY2F0ZWdvcnkgKi8KKyAgLyogcGF0aCBzdGFydHMgd2l0aCAiLyIgKi8KKyAgTkdIVFRQMl9IVFRQX0ZMQUdfUEFUSF9SRUdVTEFSID0gMSA8PCAxMSwKKyAgLyogcGF0aCAiKiIgKi8KKyAgTkdIVFRQMl9IVFRQX0ZMQUdfUEFUSF9BU1RFUklTSyA9IDEgPDwgMTIsCisgIC8qIHNjaGVtZSAqLworICAvKiAiaHR0cCIgb3IgImh0dHBzIiBzY2hlbWUgKi8KKyAgTkdIVFRQMl9IVFRQX0ZMQUdfU0NIRU1FX0hUVFAgPSAxIDw8IDEzLAorICAvKiBzZXQgaWYgZmluYWwgcmVzcG9uc2UgaXMgZXhwZWN0ZWQgKi8KKyAgTkdIVFRQMl9IVFRQX0ZMQUdfRVhQRUNUX0ZJTkFMX1JFU1BPTlNFID0gMSA8PCAxNCwKKyAgTkdIVFRQMl9IVFRQX0ZMQUdfX1BST1RPQ09MID0gMSA8PCAxNSwKK30gbmdodHRwMl9odHRwX2ZsYWc7CisKK3N0cnVjdCBuZ2h0dHAyX3N0cmVhbSB7CisgIC8qIEludHJ1c2l2ZSBNYXAgKi8KKyAgbmdodHRwMl9tYXBfZW50cnkgbWFwX2VudHJ5OworICAvKiBFbnRyeSBmb3IgZGVwX3ByZXYtPm9icSAqLworICBuZ2h0dHAyX3BxX2VudHJ5IHBxX2VudHJ5OworICAvKiBQcmlvcml0eSBRdWV1ZSBzdG9yaW5nIGRpcmVjdCBkZXNjZW5kYW50IChuZ2h0dHAyX3N0cmVhbSkuICBPbmx5CisgICAgIHN0cmVhbXMgd2hpY2ggaXRzZWxmIGhhcyBzb21lIGRhdGEgdG8gc2VuZCwgb3IgaGFzIGEgZGVzY2VuZGFudAorICAgICB3aGljaCBoYXMgc29tZSBkYXRhIHRvIHNlbnQuICovCisgIG5naHR0cDJfcHEgb2JxOworICAvKiBDb250ZW50LUxlbmd0aCBvZiByZXF1ZXN0L3Jlc3BvbnNlIGJvZHkuICAtMSBpZiB1bmtub3duLiAqLworICBpbnQ2NF90IGNvbnRlbnRfbGVuZ3RoOworICAvKiBSZWNlaXZlZCBib2R5IHNvIGZhciAqLworICBpbnQ2NF90IHJlY3ZfY29udGVudF9sZW5ndGg7CisgIC8qIEJhc2UgbGFzdF9jeWNsZSBmb3IgZGlyZWN0IGRlc2NlbmRlbnQgc3RyZWFtcy4gKi8KKyAgdWludDY0X3QgZGVzY2VuZGFudF9sYXN0X2N5Y2xlOworICAvKiBOZXh0IHNjaGVkdWxlZCB0aW1lIHRvIHNlbnQgaXRlbSAqLworICB1aW50NjRfdCBjeWNsZTsKKyAgLyogTmV4dCBzZXEgdXNlZCBmb3IgZGlyZWN0IGRlc2NlbmRhbnQgc3RyZWFtcyAqLworICB1aW50NjRfdCBkZXNjZW5kYW50X25leHRfc2VxOworICAvKiBTZWNvbmRhcnkga2V5IGZvciBwcmlvcml0aXphdGlvbiB0byBicmVhayBhIHRpZSBmb3IgY3ljbGUuICBUaGlzCisgICAgIHZhbHVlIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2VkIGZvciBzaW5nbGUgcGFyZW50IHN0cmVhbS4gKi8KKyAgdWludDY0X3Qgc2VxOworICAvKiBwb2ludGVycyB0byBmb3JtIGRlcGVuZGVuY3kgdHJlZS4gIElmIG11bHRpcGxlIHN0cmVhbXMgZGVwZW5kIG9uCisgICAgIGEgc3RyZWFtLCBvbmx5IG9uZSBzdHJlYW0gKGxlZnQgbW9zdCkgaGFzIG5vbi1OVUxMIGRlcF9wcmV2IHdoaWNoCisgICAgIHBvaW50cyB0byB0aGUgc3RyZWFtIGl0IGRlcGVuZHMgb24uIFRoZSByZW1haW5pbmcgc3RyZWFtcyBhcmUKKyAgICAgbGlua2VkIHVzaW5nIHNpYl9wcmV2IGFuZCBzaWJfbmV4dC4gIFRoZSBzdHJlYW0gd2hpY2ggaGFzCisgICAgIG5vbi1OVUxMIGRlcF9wcmV2IGFsd2F5cyBOVUxMIHNpYl9wcmV2LiAgVGhlIHJpZ2h0IG1vc3Qgc3RyZWFtCisgICAgIGhhcyBOVUxMIHNpYl9uZXh0LiAgSWYgdGhpcyBzdHJlYW0gaXMgYSByb290IG9mIGRlcGVuZGVuY3kgdHJlZSwKKyAgICAgZGVwX3ByZXYgYW5kIHNpYl9wcmV2IGFyZSBOVUxMLiAqLworICBuZ2h0dHAyX3N0cmVhbSAqZGVwX3ByZXYsICpkZXBfbmV4dDsKKyAgbmdodHRwMl9zdHJlYW0gKnNpYl9wcmV2LCAqc2liX25leHQ7CisgIC8qIFdoZW4gc3RyZWFtIGlzIGtlcHQgYWZ0ZXIgY2xvc3VyZSwgaXQgbWF5IGJlIGtlcHQgaW4gZG91Ymx5CisgICAgIGxpbmtlZCBsaXN0IHBvaW50ZWQgYnkgbmdodHRwMl9zZXNzaW9uIGNsb3NlZF9zdHJlYW1faGVhZC4KKyAgICAgY2xvc2VkX25leHQgcG9pbnRzIHRvIHRoZSBuZXh0IHN0cmVhbSBvYmplY3QgaWYgaXQgaXMgdGhlIGVsZW1lbnQKKyAgICAgb2YgdGhlIGxpc3QuICovCisgIG5naHR0cDJfc3RyZWFtICpjbG9zZWRfcHJldiwgKmNsb3NlZF9uZXh0OworICAvKiBUaGUgYXJiaXRyYXJ5IGRhdGEgcHJvdmlkZWQgYnkgdXNlciBmb3IgdGhpcyBzdHJlYW0uICovCisgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGE7CisgIC8qIEl0ZW0gdG8gc2VuZCAqLworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIC8qIExhc3Qgd3JpdHRlbiBsZW5ndGggb2YgZnJhbWUgcGF5bG9hZCAqLworICBzaXplX3QgbGFzdF93cml0ZWxlbjsKKyAgLyogc3RyZWFtIElEICovCisgIGludDMyX3Qgc3RyZWFtX2lkOworICAvKiBDdXJyZW50IHJlbW90ZSB3aW5kb3cgc2l6ZS4gVGhpcyB2YWx1ZSBpcyBjb21wdXRlZCBhZ2FpbnN0IHRoZQorICAgICBjdXJyZW50IGluaXRpYWwgd2luZG93IHNpemUgb2YgcmVtb3RlIGVuZHBvaW50LiAqLworICBpbnQzMl90IHJlbW90ZV93aW5kb3dfc2l6ZTsKKyAgLyogS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIHdpdGhvdXQKKyAgICAgV0lORE9XX1VQREFURS4gVGhpcyBjb3VsZCBiZSBuZWdhdGl2ZSBhZnRlciBzdWJtaXR0aW5nIG5lZ2F0aXZlCisgICAgIHZhbHVlIHRvIFdJTkRPV19VUERBVEUgKi8KKyAgaW50MzJfdCByZWN2X3dpbmRvd19zaXplOworICAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQgbm93IGlzCisgICAgIHN1YmplY3QgdG8gV0lORE9XX1VQREFURS4gIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gYXV0bworICAgICBXSU5ET1dfVVBEQVRFIGlzIHR1cm5lZCBvZmYuICovCisgIGludDMyX3QgY29uc3VtZWRfc2l6ZTsKKyAgLyogVGhlIGFtb3VudCBvZiByZWN2X3dpbmRvd19zaXplIGN1dCB1c2luZyBzdWJtaXR0aW5nIG5lZ2F0aXZlCisgICAgIHZhbHVlIHRvIFdJTkRPV19VUERBVEUgKi8KKyAgaW50MzJfdCByZWN2X3JlZHVjdGlvbjsKKyAgLyogd2luZG93IHNpemUgZm9yIGxvY2FsIGZsb3cgY29udHJvbC4gSXQgaXMgaW5pdGlhbGx5IHNldCB0bworICAgICBOR0hUVFAyX0lOSVRJQUxfV0lORE9XX1NJWkUgYW5kIGNvdWxkIGJlIGluY3JlYXNlZC9kZWNyZWFzZWQgYnkKKyAgICAgc3VibWl0dGluZyBXSU5ET1dfVVBEQVRFLiBTZWUgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpLiAqLworICBpbnQzMl90IGxvY2FsX3dpbmRvd19zaXplOworICAvKiB3ZWlnaHQgb2YgdGhpcyBzdHJlYW0gKi8KKyAgaW50MzJfdCB3ZWlnaHQ7CisgIC8qIFRoaXMgaXMgdW5wYWlkIHBlbmFsdHkgKG9mZnNldCkgd2hlbiBjYWxjdWxhdGluZyBjeWNsZS4gKi8KKyAgdWludDMyX3QgcGVuZGluZ19wZW5hbHR5OworICAvKiBzdW0gb2Ygd2VpZ2h0IG9mIGRpcmVjdCBkZXNjZW5kYW50cyAqLworICBpbnQzMl90IHN1bV9kZXBfd2VpZ2h0OworICBuZ2h0dHAyX3N0cmVhbV9zdGF0ZSBzdGF0ZTsKKyAgLyogc3RhdHVzIGNvZGUgZnJvbSByZW1vdGUgc2VydmVyICovCisgIGludDE2X3Qgc3RhdHVzX2NvZGU7CisgIC8qIEJpdHdpc2UgT1Igb2YgemVybyBvciBtb3JlIG5naHR0cDJfaHR0cF9mbGFnIHZhbHVlcyAqLworICB1aW50MTZfdCBodHRwX2ZsYWdzOworICAvKiBUaGlzIGlzIGJpdHdpc2UtT1Igb2YgMCBvciBtb3JlIG9mIG5naHR0cDJfc3RyZWFtX2ZsYWcuICovCisgIHVpbnQ4X3QgZmxhZ3M7CisgIC8qIEJpdHdpc2UgT1Igb2YgemVybyBvciBtb3JlIG5naHR0cDJfc2h1dF9mbGFnIHZhbHVlcyAqLworICB1aW50OF90IHNodXRfZmxhZ3M7CisgIC8qIE5vbnplcm8gaWYgdGhpcyBzdHJlYW0gaGFzIGJlZW4gcXVldWVkIHRvIHN0cmVhbSBwb2ludGVkIGJ5CisgICAgIGRlcF9wcmV2LiAgV2UgbWFpbnRhaW4gdGhlIGludmFyaWFudCB0aGF0IGlmIGEgc3RyZWFtIGlzIHF1ZXVlZCwKKyAgICAgdGhlbiBpdHMgYW5jZXN0b3JzLCBleGNlcHQgZm9yIHJvb3QsIGFyZSBhbHNvIHF1ZXVlZC4gIFRoaXMKKyAgICAgaW52YXJpYW50IG1heSBicmVhayBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24uICovCisgIHVpbnQ4X3QgcXVldWVkOworICAvKiBUaGlzIGZsYWcgaXMgdXNlZCB0byByZWR1Y2UgZXhjZXNzaXZlIHF1ZXVpbmcgb2YgV0lORE9XX1VQREFURSB0bworICAgICB0aGlzIHN0cmVhbS4gIFRoZSBub256ZXJvIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gV0lORE9XX1VQREFURQorICAgICBpcyBub3QgcXVldWVkLiAqLworICB1aW50OF90IHdpbmRvd191cGRhdGVfcXVldWVkOworfTsKKwordm9pZCBuZ2h0dHAyX3N0cmVhbV9pbml0KG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIG5naHR0cDJfc3RyZWFtX3N0YXRlIGluaXRpYWxfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB3ZWlnaHQsIGludDMyX3QgcmVtb3RlX2luaXRpYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsb2NhbF9pbml0aWFsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEsIG5naHR0cDJfbWVtICptZW0pOworCit2b2lkIG5naHR0cDJfc3RyZWFtX2ZyZWUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBEaXNhbGxvdyBlaXRoZXIgZnVydGhlciByZWNlcHRpb25zIG9yIHRyYW5zbWlzc2lvbnMsIG9yIGJvdGguCisgKiB8ZmxhZ3wgaXMgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiBuZ2h0dHAyX3NodXRfZmxhZy4KKyAqLwordm9pZCBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBuZ2h0dHAyX3NodXRfZmxhZyBmbGFnKTsKKworLyoKKyAqIERlZmVyIHxzdHJlYW0tPml0ZW18LiAgV2Ugd29uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIHRoZSBzaXR1YXRpb24KKyAqIHdoZXJlIHxzdHJlYW0tPml0ZW18ID09IE5VTEwuICBUaGUgfGZsYWdzfCBpcyBiaXR3aXNlIE9SIG9mIHplcm8gb3IKKyAqIG1vcmUgb2YgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9VU0VSIGFuZAorICogTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9GTE9XX0NPTlRST0wuICBUaGUgfGZsYWdzfCBpbmRpY2F0ZXMKKyAqIHRoZSByZWFzb24gb2YgdGhpcyBhY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfc3RyZWFtX2RlZmVyX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgdWludDhfdCBmbGFncyk7CisKKy8qCisgKiBQdXQgYmFjayBkZWZlcnJlZCBkYXRhIGluIHRoaXMgc3RyZWFtIHRvIGFjdGl2ZSBzdGF0ZS4gIFRoZSB8ZmxhZ3N8CisgKiBhcmUgb25lIG9yIG1vcmUgb2YgYml0d2lzZSBPUiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAqIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfVVNFUiBhbmQKKyAqIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfRkxPV19DT05UUk9MIGFuZCBnaXZlbiBtYXNrcyBhcmUKKyAqIGNsZWFyZWQgaWYgdGhleSBhcmUgc2V0LiAgU28gZXZlbiBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaWYKKyAqIG9uZSBvZiBmbGFnIGlzIHN0aWxsIHNldCwgZGF0YSBkb2VzIG5vdCBiZWNvbWUgYWN0aXZlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9yZXN1bWVfZGVmZXJyZWRfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCB1aW50OF90IGZsYWdzKTsKKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiBpdGVtIGlzIGRlZmVycmVkIGJ5IHdoYXRldmVyIHJlYXNvbi4KKyAqLworaW50IG5naHR0cDJfc3RyZWFtX2NoZWNrX2RlZmVycmVkX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgaXRlbSBpcyBkZWZlcnJlZCBieSBmbG93IGNvbnRyb2wuCisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9jaGVja19kZWZlcnJlZF9ieV9mbG93X2NvbnRyb2wobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBVcGRhdGVzIHRoZSByZW1vdGUgd2luZG93IHNpemUgd2l0aCB0aGUgbmV3IHZhbHVlCisgKiB8bmV3X2luaXRpYWxfd2luZG93X3NpemV8LiBUaGUgfG9sZF9pbml0aWFsX3dpbmRvd19zaXplfCBpcyB1c2VkIHRvCisgKiBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgd2luZG93IHNpemUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMgb3IgLTEuIFRoZSBmYWlsdXJlIGlzIGR1ZSB0bworICogb3ZlcmZsb3cuCisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV91cGRhdGVfcmVtb3RlX2luaXRpYWxfd2luZG93X3NpemUoCisgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICBpbnQzMl90IG9sZF9pbml0aWFsX3dpbmRvd19zaXplKTsKKworLyoKKyAqIFVwZGF0ZXMgdGhlIGxvY2FsIHdpbmRvdyBzaXplIHdpdGggdGhlIG5ldyB2YWx1ZQorICogfG5ld19pbml0aWFsX3dpbmRvd19zaXplfC4gVGhlIHxvbGRfaW5pdGlhbF93aW5kb3dfc2l6ZXwgaXMgdXNlZCB0bworICogY2FsY3VsYXRlIHRoZSBjdXJyZW50IHdpbmRvdyBzaXplLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzIG9yIC0xLiBUaGUgZmFpbHVyZSBpcyBkdWUgdG8KKyAqIG92ZXJmbG93LgorICovCitpbnQgbmdodHRwMl9zdHJlYW1fdXBkYXRlX2xvY2FsX2luaXRpYWxfd2luZG93X3NpemUoCisgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICBpbnQzMl90IG9sZF9pbml0aWFsX3dpbmRvd19zaXplKTsKKworLyoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiBpZiBwcm9taXNlZCBzdHJlYW0gfHN0cmVhbXwgaXMgcmVwbGllZCB3aXRoCisgKiBIRUFERVJTLiAgVGhpcyBmdW5jdGlvbiBtYWtlcyB0aGUgc3RhdGUgb2YgdGhlIHxzdHJlYW18IHRvCisgKiBOR0hUVFAyX1NUUkVBTV9PUEVORUQuCisgKi8KK3ZvaWQgbmdodHRwMl9zdHJlYW1fcHJvbWlzZV9mdWxmaWxsZWQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgfHRhcmdldHwgaXMgYW4gYW5jZXN0b3Igb2YgfHN0cmVhbXwuCisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfZmluZF9hbmNlc3RvcihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICp0YXJnZXQpOworCisvKgorICogQ29tcHV0ZXMgZGlzdHJpYnV0ZWQgd2VpZ2h0IG9mIGEgc3RyZWFtIG9mIHRoZSB8d2VpZ2h0fCB1bmRlciB0aGUKKyAqIHxzdHJlYW18IGlmIHxzdHJlYW18IGlzIHJlbW92ZWQgZnJvbSBhIGRlcGVuZGVuY3kgdHJlZS4KKyAqLworaW50MzJfdCBuZ2h0dHAyX3N0cmVhbV9kZXBfZGlzdHJpYnV0ZWRfd2VpZ2h0KG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB3ZWlnaHQpOworCisvKgorICogTWFrZXMgdGhlIHxzdHJlYW18IGRlcGVuZCBvbiB0aGUgfGRlcF9zdHJlYW18LiAgVGhpcyBkZXBlbmRlbmN5IGlzCisgKiBleGNsdXNpdmUuICBBbGwgZXhpc3RpbmcgZGlyZWN0IGRlc2NlbmRhbnRzIG9mIHxkZXBfc3RyZWFtfCBiZWNvbWUKKyAqIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgfHN0cmVhbXwuICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMKKyAqIHxzdHJlYW0tPml0ZW18IGlzIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfc3RyZWFtX2RlcF9pbnNlcnQobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIE1ha2VzIHRoZSB8c3RyZWFtfCBkZXBlbmQgb24gdGhlIHxkZXBfc3RyZWFtfC4gIFRoaXMgZGVwZW5kZW5jeSBpcworICogbm90IGV4Y2x1c2l2ZS4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB8c3RyZWFtLT5pdGVtfCBpcyBOVUxMLgorICovCit2b2lkIG5naHR0cDJfc3RyZWFtX2RlcF9hZGQobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogUmVtb3ZlcyB0aGUgfHN0cmVhbXwgZnJvbSB0aGUgY3VycmVudCBkZXBlbmRlbmN5IHRyZWUuICBUaGlzCisgKiBmdW5jdGlvbiBhc3N1bWVzIHxzdHJlYW0tPml0ZW18IGlzIE5VTEwuCisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfcmVtb3ZlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogQXR0YWNoZXMgfGl0ZW18IHRvIHxzdHJlYW18LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9hdHRhY2hfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSk7CisKKy8qCisgKiBEZXRhY2hlcyB8c3RyZWFtLT5pdGVtfC4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZnJlZQorICogfHN0cmVhbS0+aXRlbXwuICBUaGUgY2FsbGVyIG11c3QgZnJlZSBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zdHJlYW1fZGV0YWNoX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBNYWtlcyB0aGUgfHN0cmVhbXwgZGVwZW5kIG9uIHRoZSB8ZGVwX3N0cmVhbXwuICBUaGlzIGRlcGVuZGVuY3kgaXMKKyAqIGV4Y2x1c2l2ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX2luc2VydF9zdWJ0cmVlKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIE1ha2VzIHRoZSB8c3RyZWFtfCBkZXBlbmQgb24gdGhlIHxkZXBfc3RyZWFtfC4gIFRoaXMgZGVwZW5kZW5jeSBpcworICogbm90IGV4Y2x1c2l2ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX2FkZF9zdWJ0cmVlKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFJlbW92ZXMgc3VidHJlZSB3aG9zZSByb290IHN0cmVhbSBpcyB8c3RyZWFtfC4gIFRoZQorICogZWZmZWN0aXZlX3dlaWdodCBvZiBzdHJlYW1zIGluIHJlbW92ZWQgc3VidHJlZSBpcyBub3QgdXBkYXRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCit2b2lkIG5naHR0cDJfc3RyZWFtX2RlcF9yZW1vdmVfc3VidHJlZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiB8c3RyZWFtfCBpcyBpbiBhbnkgZGVwZW5kZW5jeSB0cmVlLgorICovCitpbnQgbmdodHRwMl9zdHJlYW1faW5fZGVwX3RyZWUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBTY2hlZHVsZXMgdHJhbnNtaXNzaW9uIG9mIHxzdHJlYW18J3MgaXRlbSwgYXNzdW1pbmcgc3RyZWFtLT5pdGVtIGlzCisgKiBhdHRhY2hlZCwgYW5kIHN0cmVhbS0+bGFzdF93cml0ZWxlbiB3YXMgdXBkYXRlZC4KKyAqLwordm9pZCBuZ2h0dHAyX3N0cmVhbV9yZXNjaGVkdWxlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogQ2hhbmdlcyB8c3RyZWFtfCdzIHdlaWdodCB0byB8d2VpZ2h0fC4gIElmIHxzdHJlYW18IGlzIHF1ZXVlZCwgaXQKKyAqIHdpbGwgYmUgcmVzY2hlZHVsZWQgYmFzZWQgb24gbmV3IHdlaWdodC4KKyAqLwordm9pZCBuZ2h0dHAyX3N0cmVhbV9jaGFuZ2Vfd2VpZ2h0KG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIGludDMyX3Qgd2VpZ2h0KTsKKworLyoKKyAqIFJldHVybnMgYSBzdHJlYW0gd2hpY2ggaGFzIGhpZ2hlc3QgcHJpb3JpdHksIHVwZGF0aW5nCisgKiBkZXNjZW5kYW50X2xhc3RfY3ljbGUgb2Ygc2VsZWN0ZWQgc3RyZWFtJ3MgYW5jZXN0b3JzLgorICovCituZ2h0dHAyX291dGJvdW5kX2l0ZW0gKgorbmdodHRwMl9zdHJlYW1fbmV4dF9vdXRib3VuZF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisjZW5kaWYgLyogTkdIVFRQMl9TVFJFQU0gKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3VibWl0LmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N1Ym1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MDRlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N1Ym1pdC5jCkBAIC0wLDAgKzEsODE0IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTMgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX3N1Ym1pdC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX3Nlc3Npb24uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2ZyYW1lLmgiCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX3ByaW9yaXR5X3NwZWMuaCIKKworLyoKKyAqIERldGVjdHMgdGhlIGRlcGVuZGVuY3kgZXJyb3IsIHRoYXQgaXMgc3RyZWFtIGF0dGVtcHRlZCB0byBkZXBlbmQgb24KKyAqIGl0c2VsZi4gIElmIHxzdHJlYW1faWR8IGlzIC0xLCB3ZSB1c2Ugc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgYXMKKyAqIHN0cmVhbSBJRC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgU3RyZWFtIGF0dGVtcHRlZCB0byBkZXBlbmQgb24gaXRzZWxmLgorICovCitzdGF0aWMgaW50IGRldGVjdF9zZWxmX2RlcGVuZGVuY3kobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKSB7CisgIGFzc2VydChwcmlfc3BlYyk7CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAtMSkgeworICAgIGlmICgoaW50MzJfdClzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCA9PSBwcmlfc3BlYy0+c3RyZWFtX2lkKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoc3RyZWFtX2lkID09IHByaV9zcGVjLT5zdHJlYW1faWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB8bnZhX2NvcHl8LiBSZWdhcmRsZXNzIG9mIHRoZQorICAgcmV0dXJuIHZhbHVlLCB0aGUgY2FsbGVyIG11c3Qgbm90IGZyZWUgfG52YV9jb3B5fCBhZnRlciB0aGlzCisgICBmdW5jdGlvbiByZXR1cm5zLiAqLworc3RhdGljIGludDMyX3Qgc3VibWl0X2hlYWRlcnNfc2hhcmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52YV9jb3B5LCBzaXplX3QgbnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9kYXRhX3Byb3ZpZGVyICpkYXRhX3ByZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKSB7CisgIGludCBydjsKKyAgdWludDhfdCBmbGFnc19jb3B5OworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0gPSBOVUxMOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9IE5VTEw7CisgIG5naHR0cDJfaGVhZGVyc19jYXRlZ29yeSBoY2F0OworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJ2ID0gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgZ290byBmYWlsOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgaWYgKGRhdGFfcHJkICE9IE5VTEwgJiYgZGF0YV9wcmQtPnJlYWRfY2FsbGJhY2sgIT0gTlVMTCkgeworICAgIGl0ZW0tPmF1eF9kYXRhLmhlYWRlcnMuZGF0YV9wcmQgPSAqZGF0YV9wcmQ7CisgIH0KKworICBpdGVtLT5hdXhfZGF0YS5oZWFkZXJzLnN0cmVhbV91c2VyX2RhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworCisgIGZsYWdzX2NvcHkgPQorICAgICAgKHVpbnQ4X3QpKChmbGFncyAmIChOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSB8IE5HSFRUUDJfRkxBR19QUklPUklUWSkpIHwKKyAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMQUdfRU5EX0hFQURFUlMpOworCisgIGlmIChzdHJlYW1faWQgPT0gLTEpIHsKKyAgICBpZiAoc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgPiBJTlQzMl9NQVgpIHsKKyAgICAgIHJ2ID0gTkdIVFRQMl9FUlJfU1RSRUFNX0lEX05PVF9BVkFJTEFCTEU7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3RyZWFtX2lkID0gKGludDMyX3Qpc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQ7CisgICAgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgKz0gMjsKKworICAgIGhjYXQgPSBOR0hUVFAyX0hDQVRfUkVRVUVTVDsKKyAgfSBlbHNlIHsKKyAgICAvKiBNb3JlIHNwZWNpZmljIGNhdGVnb3JpemF0aW9uIHdpbGwgYmUgZG9uZSBsYXRlci4gKi8KKyAgICBoY2F0ID0gTkdIVFRQMl9IQ0FUX0hFQURFUlM7CisgIH0KKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfaW5pdCgmZnJhbWUtPmhlYWRlcnMsIGZsYWdzX2NvcHksIHN0cmVhbV9pZCwgaGNhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpX3NwZWMsIG52YV9jb3B5LCBudmxlbik7CisKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX2l0ZW0oc2Vzc2lvbiwgaXRlbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfZnJlZSgmZnJhbWUtPmhlYWRlcnMsIG1lbSk7CisgICAgZ290byBmYWlsMjsKKyAgfQorCisgIGlmIChoY2F0ID09IE5HSFRUUDJfSENBVF9SRVFVRVNUKSB7CisgICAgcmV0dXJuIHN0cmVhbV9pZDsKKyAgfQorCisgIHJldHVybiAwOworCitmYWlsOgorICAvKiBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfaW5pdCgpIHRha2VzIG93bmVyc2hpcCBvZiBudmFfY29weS4gKi8KKyAgbmdodHRwMl9udl9hcnJheV9kZWwobnZhX2NvcHksIG1lbSk7CitmYWlsMjoKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworCisgIHJldHVybiBydjsKK30KKworc3RhdGljIGludDMyX3Qgc3VibWl0X2hlYWRlcnNfc2hhcmVkX252YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9kYXRhX3Byb3ZpZGVyICpkYXRhX3ByZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfbnYgKm52YV9jb3B5OworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgY29weV9wcmlfc3BlYzsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmIChwcmlfc3BlYykgeworICAgIGNvcHlfcHJpX3NwZWMgPSAqcHJpX3NwZWM7CisgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjX25vcm1hbGl6ZV93ZWlnaHQoJmNvcHlfcHJpX3NwZWMpOworICB9IGVsc2UgeworICAgIG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQoJmNvcHlfcHJpX3NwZWMpOworICB9CisKKyAgcnYgPSBuZ2h0dHAyX252X2FycmF5X2NvcHkoJm52YV9jb3B5LCBudmEsIG52bGVuLCBtZW0pOworICBpZiAocnYgPCAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIHN1Ym1pdF9oZWFkZXJzX3NoYXJlZChzZXNzaW9uLCBmbGFncywgc3RyZWFtX2lkLCAmY29weV9wcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudmFfY29weSwgbnZsZW4sIGRhdGFfcHJkLCBzdHJlYW1fdXNlcl9kYXRhKTsKK30KKworaW50IG5naHR0cDJfc3VibWl0X3RyYWlsZXIobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKSB7CisgIGlmIChzdHJlYW1faWQgPD0gMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgcmV0dXJuIChpbnQpc3VibWl0X2hlYWRlcnNfc2hhcmVkX252YShzZXNzaW9uLCBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1faWQsIE5VTEwsIG52YSwgbnZsZW4sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CisKK2ludDMyX3QgbmdodHRwMl9zdWJtaXRfaGVhZGVycyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKSB7CisgIGludCBydjsKKworICBpZiAoc3RyZWFtX2lkID09IC0xKSB7CisgICAgaWYgKHNlc3Npb24tPnNlcnZlcikgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1BST1RPOworICAgIH0KKyAgfSBlbHNlIGlmIChzdHJlYW1faWQgPD0gMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgZmxhZ3MgJj0gTkdIVFRQMl9GTEFHX0VORF9TVFJFQU07CisKKyAgaWYgKHByaV9zcGVjICYmICFuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfY2hlY2tfZGVmYXVsdChwcmlfc3BlYykpIHsKKyAgICBydiA9IGRldGVjdF9zZWxmX2RlcGVuZGVuY3koc2Vzc2lvbiwgc3RyZWFtX2lkLCBwcmlfc3BlYyk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBmbGFncyB8PSBOR0hUVFAyX0ZMQUdfUFJJT1JJVFk7CisgIH0gZWxzZSB7CisgICAgcHJpX3NwZWMgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIHN1Ym1pdF9oZWFkZXJzX3NoYXJlZF9udmEoc2Vzc2lvbiwgZmxhZ3MsIHN0cmVhbV9pZCwgcHJpX3NwZWMsIG52YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnZsZW4sIE5VTEwsIHN0cmVhbV91c2VyX2RhdGEpOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfcGluZyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpvcGFxdWVfZGF0YSkgeworICBmbGFncyAmPSBOR0hUVFAyX0ZMQUdfQUNLOworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9waW5nKHNlc3Npb24sIGZsYWdzLCBvcGFxdWVfZGF0YSk7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF9wcmlvcml0eShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYykgeworICBpbnQgcnY7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBjb3B5X3ByaV9zcGVjOworICBuZ2h0dHAyX21lbSAqbWVtOworICAodm9pZClmbGFnczsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmIChzdHJlYW1faWQgPT0gMCB8fCBwcmlfc3BlYyA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpZiAoc3RyZWFtX2lkID09IHByaV9zcGVjLT5zdHJlYW1faWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGNvcHlfcHJpX3NwZWMgPSAqcHJpX3NwZWM7CisKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjX25vcm1hbGl6ZV93ZWlnaHQoJmNvcHlfcHJpX3NwZWMpOworCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9pbml0KGl0ZW0pOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfaW5pdCgmZnJhbWUtPnByaW9yaXR5LCBzdHJlYW1faWQsICZjb3B5X3ByaV9zcGVjKTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfZnJlZSgmZnJhbWUtPnByaW9yaXR5KTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc3VibWl0X3JzdF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIHVpbnQzMl90IGVycm9yX2NvZGUpIHsKKyAgKHZvaWQpZmxhZ3M7CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCwgZXJyb3JfY29kZSk7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF9nb2F3YXkobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLCB1aW50MzJfdCBlcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpvcGFxdWVfZGF0YSwgc2l6ZV90IG9wYXF1ZV9kYXRhX2xlbikgeworICAodm9pZClmbGFnczsKKworICBpZiAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYgTkdIVFRQMl9HT0FXQVlfVEVSTV9PTl9TRU5EKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9hZGRfZ29hd2F5KHNlc3Npb24sIGxhc3Rfc3RyZWFtX2lkLCBlcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcXVlX2RhdGEsIG9wYXF1ZV9kYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfR09BV0FZX0FVWF9OT05FKTsKK30KKworaW50IG5naHR0cDJfc3VibWl0X3NodXRkb3duX25vdGljZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURTsKKyAgfQorICBpZiAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9hZGRfZ29hd2F5KHNlc3Npb24sICgxdSA8PCAzMSkgLSAxLCBOR0hUVFAyX05PX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfR09BV0FZX0FVWF9TSFVURE9XTl9OT1RJQ0UpOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfc2V0dGluZ3MobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LCBzaXplX3Qgbml2KSB7CisgICh2b2lkKWZsYWdzOworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9zZXR0aW5ncyhzZXNzaW9uLCBOR0hUVFAyX0ZMQUdfTk9ORSwgaXYsIG5pdik7Cit9CisKK2ludDMyX3QgbmdodHRwMl9zdWJtaXRfcHVzaF9wcm9taXNlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLCBjb25zdCBuZ2h0dHAyX252ICpudmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9taXNlZF9zdHJlYW1fdXNlcl9kYXRhKSB7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfbnYgKm52YV9jb3B5OworICB1aW50OF90IGZsYWdzX2NvcHk7CisgIGludDMyX3QgcHJvbWlzZWRfc3RyZWFtX2lkOworICBpbnQgcnY7CisgIG5naHR0cDJfbWVtICptZW07CisgICh2b2lkKWZsYWdzOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKHN0cmVhbV9pZCA8PSAwIHx8IG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfUFJPVE87CisgIH0KKworICAvKiBBbGwgMzJiaXQgc2lnbmVkIHN0cmVhbSBJRHMgYXJlIHNwZW50LiAqLworICBpZiAoc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgPiBJTlQzMl9NQVgpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0lEX05PVF9BVkFJTEFCTEU7CisgIH0KKworICBpdGVtID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfb3V0Ym91bmRfaXRlbSkpOworICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgaXRlbS0+YXV4X2RhdGEuaGVhZGVycy5zdHJlYW1fdXNlcl9kYXRhID0gcHJvbWlzZWRfc3RyZWFtX3VzZXJfZGF0YTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBydiA9IG5naHR0cDJfbnZfYXJyYXlfY29weSgmbnZhX2NvcHksIG52YSwgbnZsZW4sIG1lbSk7CisgIGlmIChydiA8IDApIHsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgZmxhZ3NfY29weSA9IE5HSFRUUDJfRkxBR19FTkRfSEVBREVSUzsKKworICBwcm9taXNlZF9zdHJlYW1faWQgPSAoaW50MzJfdClzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZDsKKyAgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgKz0gMjsKKworICBuZ2h0dHAyX2ZyYW1lX3B1c2hfcHJvbWlzZV9pbml0KCZmcmFtZS0+cHVzaF9wcm9taXNlLCBmbGFnc19jb3B5LCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZWRfc3RyZWFtX2lkLCBudmFfY29weSwgbnZsZW4pOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgbmdodHRwMl9mcmFtZV9wdXNoX3Byb21pc2VfZnJlZSgmZnJhbWUtPnB1c2hfcHJvbWlzZSwgbWVtKTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gcHJvbWlzZWRfc3RyZWFtX2lkOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgd2luZG93X3NpemVfaW5jcmVtZW50KSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSA9IDA7CisgICh2b2lkKWZsYWdzOworCisgIGlmICh3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisgIGlmIChzdHJlYW1faWQgPT0gMCkgeworICAgIHJ2ID0gbmdodHRwMl9hZGp1c3RfbG9jYWxfd2luZG93X3NpemUoCisgICAgICAgICZzZXNzaW9uLT5sb2NhbF93aW5kb3dfc2l6ZSwgJnNlc3Npb24tPnJlY3Zfd2luZG93X3NpemUsCisgICAgICAgICZzZXNzaW9uLT5yZWN2X3JlZHVjdGlvbiwgJndpbmRvd19zaXplX2luY3JlbWVudCk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX2FkanVzdF9sb2NhbF93aW5kb3dfc2l6ZSgKKyAgICAgICAgJnN0cmVhbS0+bG9jYWxfd2luZG93X3NpemUsICZzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUsCisgICAgICAgICZzdHJlYW0tPnJlY3ZfcmVkdWN0aW9uLCAmd2luZG93X3NpemVfaW5jcmVtZW50KTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIGlmICh3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPiAwKSB7CisgICAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgICBzZXNzaW9uLT5jb25zdW1lZF9zaXplID0KKyAgICAgICAgICBuZ2h0dHAyX21heCgwLCBzZXNzaW9uLT5jb25zdW1lZF9zaXplIC0gd2luZG93X3NpemVfaW5jcmVtZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgc3RyZWFtLT5jb25zdW1lZF9zaXplID0KKyAgICAgICAgICBuZ2h0dHAyX21heCgwLCBzdHJlYW0tPmNvbnN1bWVkX3NpemUgLSB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworICAgIH0KKworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fYWRkX3dpbmRvd191cGRhdGUoc2Vzc2lvbiwgMCwgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93X3NpemVfaW5jcmVtZW50KTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9zZXRfbG9jYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdpbmRvd19zaXplKSB7CisgIGludDMyX3Qgd2luZG93X3NpemVfaW5jcmVtZW50OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBpbnQgcnY7CisgICh2b2lkKWZsYWdzOworCisgIGlmICh3aW5kb3dfc2l6ZSA8IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmIChzdHJlYW1faWQgPT0gMCkgeworICAgIHdpbmRvd19zaXplX2luY3JlbWVudCA9IHdpbmRvd19zaXplIC0gc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemU7CisKKyAgICBpZiAod2luZG93X3NpemVfaW5jcmVtZW50ID09IDApIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICh3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPCAwKSB7CisgICAgICByZXR1cm4gbmdodHRwMl9hZGp1c3RfbG9jYWxfd2luZG93X3NpemUoCisgICAgICAgICAgJnNlc3Npb24tPmxvY2FsX3dpbmRvd19zaXplLCAmc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAmc2Vzc2lvbi0+cmVjdl9yZWR1Y3Rpb24sICZ3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9pbmNyZWFzZV9sb2NhbF93aW5kb3dfc2l6ZSgKKyAgICAgICAgJnNlc3Npb24tPmxvY2FsX3dpbmRvd19zaXplLCAmc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZSwKKyAgICAgICAgJnNlc3Npb24tPnJlY3ZfcmVkdWN0aW9uLCAmd2luZG93X3NpemVfaW5jcmVtZW50KTsKKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9IGVsc2UgeworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdpbmRvd19zaXplX2luY3JlbWVudCA9IHdpbmRvd19zaXplIC0gc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZTsKKworICAgIGlmICh3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPT0gMCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHdpbmRvd19zaXplX2luY3JlbWVudCA8IDApIHsKKyAgICAgIHJldHVybiBuZ2h0dHAyX2FkanVzdF9sb2NhbF93aW5kb3dfc2l6ZSgKKyAgICAgICAgICAmc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSwgJnN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAmc3RyZWFtLT5yZWN2X3JlZHVjdGlvbiwgJndpbmRvd19zaXplX2luY3JlbWVudCk7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX2luY3JlYXNlX2xvY2FsX3dpbmRvd19zaXplKAorICAgICAgICAmc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSwgJnN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSwKKyAgICAgICAgJnN0cmVhbS0+cmVjdl9yZWR1Y3Rpb24sICZ3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICBpZiAod2luZG93X3NpemVfaW5jcmVtZW50ID4gMCkgeworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fYWRkX3dpbmRvd191cGRhdGUoc2Vzc2lvbiwgMCwgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93X3NpemVfaW5jcmVtZW50KTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfYWx0c3ZjKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIGNvbnN0IHVpbnQ4X3QgKm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9yaWdpbl9sZW4sIGNvbnN0IHVpbnQ4X3QgKmZpZWxkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZmllbGRfdmFsdWVfbGVuKSB7CisgIG5naHR0cDJfbWVtICptZW07CisgIHVpbnQ4X3QgKmJ1ZiwgKnA7CisgIHVpbnQ4X3QgKm9yaWdpbl9jb3B5OworICB1aW50OF90ICpmaWVsZF92YWx1ZV9jb3B5OworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX2V4dF9hbHRzdmMgKmFsdHN2YzsKKyAgaW50IHJ2OworICAodm9pZClmbGFnczsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmICghc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEU7CisgIH0KKworICBpZiAoMiArIG9yaWdpbl9sZW4gKyBmaWVsZF92YWx1ZV9sZW4gPiBOR0hUVFAyX01BWF9QQVlMT0FETEVOKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICBpZiAob3JpZ2luX2xlbiA9PSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICB9CisgIH0gZWxzZSBpZiAob3JpZ2luX2xlbiAhPSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBidWYgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBvcmlnaW5fbGVuICsgZmllbGRfdmFsdWVfbGVuICsgMik7CisgIGlmIChidWYgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIHAgPSBidWY7CisKKyAgb3JpZ2luX2NvcHkgPSBwOworICBpZiAob3JpZ2luX2xlbikgeworICAgIHAgPSBuZ2h0dHAyX2NweW1lbShwLCBvcmlnaW4sIG9yaWdpbl9sZW4pOworICB9CisgICpwKysgPSAnXDAnOworCisgIGZpZWxkX3ZhbHVlX2NvcHkgPSBwOworICBpZiAoZmllbGRfdmFsdWVfbGVuKSB7CisgICAgcCA9IG5naHR0cDJfY3B5bWVtKHAsIGZpZWxkX3ZhbHVlLCBmaWVsZF92YWx1ZV9sZW4pOworICB9CisgICpwKysgPSAnXDAnOworCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICBydiA9IE5HSFRUUDJfRVJSX05PTUVNOworICAgIGdvdG8gZmFpbF9pdGVtX21hbGxvYzsKKyAgfQorCisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9pbml0KGl0ZW0pOworCisgIGl0ZW0tPmF1eF9kYXRhLmV4dC5idWlsdGluID0gMTsKKworICBhbHRzdmMgPSAmaXRlbS0+ZXh0X2ZyYW1lX3BheWxvYWQuYWx0c3ZjOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworICBmcmFtZS0+ZXh0LnBheWxvYWQgPSBhbHRzdmM7CisKKyAgbmdodHRwMl9mcmFtZV9hbHRzdmNfaW5pdCgmZnJhbWUtPmV4dCwgc3RyZWFtX2lkLCBvcmlnaW5fY29weSwgb3JpZ2luX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF92YWx1ZV9jb3B5LCBmaWVsZF92YWx1ZV9sZW4pOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfYWx0c3ZjX2ZyZWUoJmZyYW1lLT5leHQsIG1lbSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworCisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7CisKK2ZhaWxfaXRlbV9tYWxsb2M6CisgIGZyZWUoYnVmKTsKKworICByZXR1cm4gcnY7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF9vcmlnaW4obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX29yaWdpbl9lbnRyeSAqb3YsIHNpemVfdCBub3YpIHsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgdWludDhfdCAqcDsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9leHRfb3JpZ2luICpvcmlnaW47CisgIG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvdl9jb3B5OworICBzaXplX3QgbGVuID0gMDsKKyAgc2l6ZV90IGk7CisgIGludCBydjsKKyAgKHZvaWQpZmxhZ3M7CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBpZiAoIXNlc3Npb24tPnNlcnZlcikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFOworICB9CisKKyAgaWYgKG5vdikgeworICAgIGZvciAoaSA9IDA7IGkgPCBub3Y7ICsraSkgeworICAgICAgbGVuICs9IG92W2ldLm9yaWdpbl9sZW47CisgICAgfQorCisgICAgaWYgKDIgKiBub3YgKyBsZW4gPiBOR0hUVFAyX01BWF9QQVlMT0FETEVOKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICB9CisKKyAgICAvKiBUaGUgbGFzdCBub3YgaXMgYWRkZWQgZm9yIHRlcm1pbmFsIE5VTEwgY2hhcmFjdGVyLiAqLworICAgIG92X2NvcHkgPQorICAgICAgICBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBub3YgKiBzaXplb2YobmdodHRwMl9vcmlnaW5fZW50cnkpICsgbGVuICsgbm92KTsKKyAgICBpZiAob3ZfY29weSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgfQorCisgICAgcCA9ICh1aW50OF90ICopb3ZfY29weSArIG5vdiAqIHNpemVvZihuZ2h0dHAyX29yaWdpbl9lbnRyeSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbm92OyArK2kpIHsKKyAgICAgIG92X2NvcHlbaV0ub3JpZ2luID0gcDsKKyAgICAgIG92X2NvcHlbaV0ub3JpZ2luX2xlbiA9IG92W2ldLm9yaWdpbl9sZW47CisgICAgICBwID0gbmdodHRwMl9jcHltZW0ocCwgb3ZbaV0ub3JpZ2luLCBvdltpXS5vcmlnaW5fbGVuKTsKKyAgICAgICpwKysgPSAnXDAnOworICAgIH0KKworICAgIGFzc2VydCgoc2l6ZV90KShwIC0gKHVpbnQ4X3QgKilvdl9jb3B5KSA9PQorICAgICAgICAgICBub3YgKiBzaXplb2YobmdodHRwMl9vcmlnaW5fZW50cnkpICsgbGVuICsgbm92KTsKKyAgfSBlbHNlIHsKKyAgICBvdl9jb3B5ID0gTlVMTDsKKyAgfQorCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICBydiA9IE5HSFRUUDJfRVJSX05PTUVNOworICAgIGdvdG8gZmFpbF9pdGVtX21hbGxvYzsKKyAgfQorCisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9pbml0KGl0ZW0pOworCisgIGl0ZW0tPmF1eF9kYXRhLmV4dC5idWlsdGluID0gMTsKKworICBvcmlnaW4gPSAmaXRlbS0+ZXh0X2ZyYW1lX3BheWxvYWQub3JpZ2luOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworICBmcmFtZS0+ZXh0LnBheWxvYWQgPSBvcmlnaW47CisKKyAgbmdodHRwMl9mcmFtZV9vcmlnaW5faW5pdCgmZnJhbWUtPmV4dCwgb3ZfY29weSwgbm92KTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX29yaWdpbl9mcmVlKCZmcmFtZS0+ZXh0LCBtZW0pOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworCitmYWlsX2l0ZW1fbWFsbG9jOgorICBmcmVlKG92X2NvcHkpOworCisgIHJldHVybiBydjsKK30KKworc3RhdGljIHVpbnQ4X3Qgc2V0X3JlcXVlc3RfZmxhZ3MoY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZGF0YV9wcm92aWRlciAqZGF0YV9wcmQpIHsKKyAgdWludDhfdCBmbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworICBpZiAoZGF0YV9wcmQgPT0gTlVMTCB8fCBkYXRhX3ByZC0+cmVhZF9jYWxsYmFjayA9PSBOVUxMKSB7CisgICAgZmxhZ3MgfD0gTkdIVFRQMl9GTEFHX0VORF9TVFJFQU07CisgIH0KKworICBpZiAocHJpX3NwZWMpIHsKKyAgICBmbGFncyB8PSBOR0hUVFAyX0ZMQUdfUFJJT1JJVFk7CisgIH0KKworICByZXR1cm4gZmxhZ3M7Cit9CisKK2ludDMyX3QgbmdodHRwMl9zdWJtaXRfcmVxdWVzdChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpIHsKKyAgdWludDhfdCBmbGFnczsKKyAgaW50IHJ2OworCisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfUFJPVE87CisgIH0KKworICBpZiAocHJpX3NwZWMgJiYgIW5naHR0cDJfcHJpb3JpdHlfc3BlY19jaGVja19kZWZhdWx0KHByaV9zcGVjKSkgeworICAgIHJ2ID0gZGV0ZWN0X3NlbGZfZGVwZW5kZW5jeShzZXNzaW9uLCAtMSwgcHJpX3NwZWMpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9IGVsc2UgeworICAgIHByaV9zcGVjID0gTlVMTDsKKyAgfQorCisgIGZsYWdzID0gc2V0X3JlcXVlc3RfZmxhZ3MocHJpX3NwZWMsIGRhdGFfcHJkKTsKKworICByZXR1cm4gc3VibWl0X2hlYWRlcnNfc2hhcmVkX252YShzZXNzaW9uLCBmbGFncywgLTEsIHByaV9zcGVjLCBudmEsIG52bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3ByZCwgc3RyZWFtX3VzZXJfZGF0YSk7Cit9CisKK3N0YXRpYyB1aW50OF90IHNldF9yZXNwb25zZV9mbGFncyhjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkKSB7CisgIHVpbnQ4X3QgZmxhZ3MgPSBOR0hUVFAyX0ZMQUdfTk9ORTsKKyAgaWYgKGRhdGFfcHJkID09IE5VTEwgfHwgZGF0YV9wcmQtPnJlYWRfY2FsbGJhY2sgPT0gTlVMTCkgeworICAgIGZsYWdzIHw9IE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNOworICB9CisgIHJldHVybiBmbGFnczsKK30KKworaW50IG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9kYXRhX3Byb3ZpZGVyICpkYXRhX3ByZCkgeworICB1aW50OF90IGZsYWdzOworCisgIGlmIChzdHJlYW1faWQgPD0gMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfUFJPVE87CisgIH0KKworICBmbGFncyA9IHNldF9yZXNwb25zZV9mbGFncyhkYXRhX3ByZCk7CisgIHJldHVybiBzdWJtaXRfaGVhZGVyc19zaGFyZWRfbnZhKHNlc3Npb24sIGZsYWdzLCBzdHJlYW1faWQsIE5VTEwsIG52YSwgbnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcHJkLCBOVUxMKTsKK30KKworaW50IG5naHR0cDJfc3VibWl0X2RhdGEobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9kYXRhX2F1eF9kYXRhICphdXhfZGF0YTsKKyAgdWludDhfdCBuZmxhZ3MgPSBmbGFncyAmIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpdGVtID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfb3V0Ym91bmRfaXRlbSkpOworICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmRhdGE7CisgIGF1eF9kYXRhLT5kYXRhX3ByZCA9ICpkYXRhX3ByZDsKKyAgYXV4X2RhdGEtPmVvZiA9IDA7CisgIGF1eF9kYXRhLT5mbGFncyA9IG5mbGFnczsKKworICAvKiBmbGFncyBhcmUgc2VudCBvbiB0cmFuc21pc3Npb24gKi8KKyAgbmdodHRwMl9mcmFtZV9kYXRhX2luaXQoJmZyYW1lLT5kYXRhLCBOR0hUVFAyX0ZMQUdfTk9ORSwgc3RyZWFtX2lkKTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX2RhdGFfZnJlZSgmZnJhbWUtPmRhdGEpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QgbmdodHRwMl9wYWNrX3NldHRpbmdzX3BheWxvYWQodWludDhfdCAqYnVmLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdikgeworICBpZiAoIW5naHR0cDJfaXZfY2hlY2soaXYsIG5pdikpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmIChidWZsZW4gPCAobml2ICogTkdIVFRQMl9GUkFNRV9TRVRUSU5HU19FTlRSWV9MRU5HVEgpKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOU1VGRl9CVUZTSVpFOworICB9CisKKyAgcmV0dXJuIChzc2l6ZV90KW5naHR0cDJfZnJhbWVfcGFja19zZXR0aW5nc19wYXlsb2FkKGJ1ZiwgaXYsIG5pdik7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF9leHRlbnNpb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIGludDMyX3Qgc3RyZWFtX2lkLCB2b2lkICpwYXlsb2FkKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmICh0eXBlIDw9IE5HSFRUUDJfQ09OVElOVUFUSU9OKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpZiAoIXNlc3Npb24tPmNhbGxiYWNrcy5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaykgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFOworICB9CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9pbml0KGl0ZW0pOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworICBuZ2h0dHAyX2ZyYW1lX2V4dGVuc2lvbl9pbml0KCZmcmFtZS0+ZXh0LCB0eXBlLCBmbGFncywgc3RyZWFtX2lkLCBwYXlsb2FkKTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX2V4dGVuc2lvbl9mcmVlKCZmcmFtZS0+ZXh0KTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N1Ym1pdC5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zdWJtaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQ3MDJmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zdWJtaXQuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9TVUJNSVRfSAorI2RlZmluZSBOR0hUVFAyX1NVQk1JVF9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworI2VuZGlmIC8qIE5HSFRUUDJfU1VCTUlUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfdmVyc2lvbi5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxMWYyYwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfdmVyc2lvbi5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgMjAxMyBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCitzdGF0aWMgbmdodHRwMl9pbmZvIHZlcnNpb24gPSB7TkdIVFRQMl9WRVJTSU9OX0FHRSwgTkdIVFRQMl9WRVJTSU9OX05VTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX1ZFUlNJT04sIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRH07CisKK25naHR0cDJfaW5mbyAqbmdodHRwMl92ZXJzaW9uKGludCBsZWFzdF92ZXJzaW9uKSB7CisgIGlmIChsZWFzdF92ZXJzaW9uID4gTkdIVFRQMl9WRVJTSU9OX05VTSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuICZ2ZXJzaW9uOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtemxpYi9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9jbXpsaWIvQ01ha2VMaXN0cy50eHQKaW5kZXggODg4YzNmZi4uMDU4NGM1NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtemxpYi9DTWFrZUxpc3RzLnR4dAorKysgYi9VdGlsaXRpZXMvY216bGliL0NNYWtlTGlzdHMudHh0CkBAIC0zOCwxMSArMzgsNiBAQAogQ09ORklHVVJFX0ZJTEUoJHtDTVpMSUJfU09VUkNFX0RJUn0vemxpYkRsbENvbmZpZy5oLmluCiAgICR7Q01aTElCX0JJTkFSWV9ESVJ9L3psaWJEbGxDb25maWcuaCkKIAotRk9SRUFDSChuYW1lIHpsaWIgemNvbmYgY21femxpYl9tYW5nbGUpCi0gIENPTkZJR1VSRV9GSUxFKCR7Q01aTElCX1NPVVJDRV9ESVJ9LyR7bmFtZX0uaAotICAgICR7Q01aTElCX0JJTkFSWV9ESVJ9LyR7bmFtZX0uaCBDT1BZT05MWSkKLUVOREZPUkVBQ0gobmFtZSkKLQogCiBBRERfTElCUkFSWShjbXpsaWIgJHtaTElCX1NSQ1N9KQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL3N0ZC9DTWFrZUxpc3RzLnR4dAppbmRleCA2M2MwYTYwLi4yM2Q5MTA0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvc3RkL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9zdGQvQ01ha2VMaXN0cy50eHQKQEAgLTEsMTAgKzEsMTcgQEAKIAorIyBUbyBlbnN1cmUgbWF4aW11bSBwb3J0YWJpbGl0eSBhY3Jvc3MgdmFyaW91cyBjb21waWxlcnMgYW5kIHBsYXRmb3JtcworIyBkZWFjdGl2YXRlIGFueSBjb21waWxlciBleHRlbnNpb25zCitzZXQoQ01BS0VfQ1hYX0VYVEVOU0lPTlMgRkFMU0UpCisKICMgc291cmNlIGZpbGVzIGZvciBDTWFrZSBzdGQgbGlicmFyeQotc2V0KFNSQ1MgY20vYml0cy9zdHJpbmdfdmlldy5jeHgKK3NldChTUkNTIGNtL2JpdHMvZnNfcGF0aC5jeHgKKyAgICAgICAgIGNtL2JpdHMvc3RyaW5nX3ZpZXcuY3h4CisgICAgICAgICBjbS9maWxlc3lzdGVtCiAgICAgICAgICBjbS9tZW1vcnkKICAgICAgICAgIGNtL29wdGlvbmFsCiAgICAgICAgICBjbS9zaGFyZWRfbXV0ZXgKICAgICAgICAgIGNtL3N0cmluZ192aWV3Ci0gICAgICAgICBjbS91dGlsaXR5KQorICAgICAgICAgY20vdXRpbGl0eQorICAgICAgICAgY21leHQvc3RyaW5nX3ZpZXcpCiAKIGFkZF9saWJyYXJ5KGNtc3RkIFNUQVRJQyAke1NSQ1N9KQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL2ZzX3BhdGguY3h4IGIvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL2ZzX3BhdGguY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzU2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2JpdHMvZnNfcGF0aC5jeHgKQEAgLTAsMCArMSwxMDI5IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKyNpbmNsdWRlIDxjbS9maWxlc3lzdGVtPiAvLyBJV1lVIHByYWdtYTogYXNzb2NpYXRlZAorCisjaWYgIWRlZmluZWQoQ01ha2VfSEFWRV9DWFhfRklMRVNZU1RFTSkKKworIyAgaW5jbHVkZSA8YWxnb3JpdGhtPgorIyAgaW5jbHVkZSA8Y2Fzc2VydD4KKyMgIGluY2x1ZGUgPGNzdGRkZWY+CisjICBpbmNsdWRlIDxjc3RkbGliPgorIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGluY2x1ZGUgPHN0cmluZz4KKyMgIGluY2x1ZGUgPHV0aWxpdHk+CisjICBpbmNsdWRlIDx2ZWN0b3I+CisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKKyMgICAgaW5jbHVkZSA8Y2N0eXBlPgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICAgIGluY2x1ZGUgPGl0ZXJhdG9yPgorIyAgZW5kaWYKKworIyAgaW5jbHVkZSA8Y20vbWVtb3J5PgorIyAgaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjICBpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KKworbmFtZXNwYWNlIGNtIHsKK25hbWVzcGFjZSBmaWxlc3lzdGVtIHsKK25hbWVzcGFjZSBpbnRlcm5hbHMgeworCitjbGFzcyBwYXRoX3BhcnNlcgoreworIyAgaWYgZGVmaW5lZChfX1NVTlBST19DQykgJiYgZGVmaW5lZChfX3NwYXJjKQorICAvLyBPcmFjbGUgRGV2ZWxvcGVyU3R1ZGlvIEMrKyBjb21waWxlciBnZW5lcmF0ZXMgd3JvbmcgY29kZSBpZiBlbnVtIHNpemUKKyAgLy8gaXMgZGlmZmVyZW50IHRoYW4gdGhlIGRlZmF1bHQuCisgIHVzaW5nIGVudW1fc2l6ZSA9IGludDsKKyMgIGVsc2UKKyAgdXNpbmcgZW51bV9zaXplID0gdW5zaWduZWQgY2hhcjsKKyMgIGVuZGlmCisKKyAgZW51bSBjbGFzcyBzdGF0ZSA6IGVudW1fc2l6ZQorICB7CisgICAgYmVmb3JlX2JlZ2luLAorICAgIGluX3Jvb3RfbmFtZSwKKyAgICBpbl9yb290X2RpciwKKyAgICBpbl9maWxlbmFtZSwKKyAgICB0cmFpbGluZ19zZXBhcmF0b3IsCisgICAgYXRfZW5kCisgIH07CisKKyAgdXNpbmcgcG9pbnRlciA9IGNoYXIgY29uc3QqOworCitwdWJsaWM6CisgIGVudW0gY2xhc3Mgc2Vla19wb3NpdGlvbiA6IGVudW1fc2l6ZQorICB7CisgICAgcm9vdF9uYW1lID0gc3RhdGljX2Nhc3Q8ZW51bV9zaXplPihzdGF0ZTo6aW5fcm9vdF9uYW1lKSwKKyAgICByb290X2RpcmVjdG9yeSA9IHN0YXRpY19jYXN0PGVudW1fc2l6ZT4oc3RhdGU6OmluX3Jvb3RfZGlyKQorICB9OworICBlbnVtIGNsYXNzIHBlZWtfZnJhZ21lbnQgOiBlbnVtX3NpemUKKyAgeworICAgIHJlbWFpbmRlciwKKyAgICBwYXRoCisgIH07CisKKyAgcGF0aF9wYXJzZXIoY206OnN0cmluZ192aWV3IHBhdGgsIGJvb2wgc2V0X2F0X2VuZCA9IGZhbHNlKQorICAgIDogU3RhdGUoc2V0X2F0X2VuZCA/IHN0YXRlOjphdF9lbmQgOiBzdGF0ZTo6YmVmb3JlX2JlZ2luKQorICAgICwgUGF0aChwYXRoKQorICB7CisgIH0KKworICBwYXRoX3BhcnNlcihjb25zdCBwYXRoX3BhcnNlciYpID0gZGVmYXVsdDsKKworICB+cGF0aF9wYXJzZXIoKSA9IGRlZmF1bHQ7CisKKyAgdm9pZCByZXNldCgpIG5vZXhjZXB0IHsgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjpiZWZvcmVfYmVnaW4pOyB9CisKKyAgdm9pZCBpbmNyZW1lbnQoKSBub2V4Y2VwdAorICB7CisgICAgY29uc3QgcG9pbnRlciBzdGFydCA9IHRoaXMtPm5leHRfdG9rZW4oKTsKKyAgICBjb25zdCBwb2ludGVyIGVuZCA9IHRoaXMtPmFmdGVyX2VuZCgpOworCisgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjphdF9lbmQpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAodGhpcy0+U3RhdGUpIHsKKyAgICAgIGNhc2Ugc3RhdGU6OmJlZm9yZV9iZWdpbjogeworICAgICAgICBhdXRvIHBvcyA9IHRoaXMtPmNvbnN1bWVfcm9vdF9uYW1lKHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAocG9zKSB7CisgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9yb290X25hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHBvcyA9IHRoaXMtPmNvbnN1bWVfc2VwYXJhdG9yKHN0YXJ0LCBlbmQpOworICAgICAgICAgIGlmIChwb3MpIHsKKyAgICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fcm9vdF9kaXIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLT5jb25zdW1lX2ZpbGVuYW1lKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9maWxlbmFtZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6aW5fcm9vdF9uYW1lOiB7CisgICAgICAgIGF1dG8gcG9zID0gdGhpcy0+Y29uc3VtZV9zZXBhcmF0b3Ioc3RhcnQsIGVuZCk7CisgICAgICAgIGlmIChwb3MpIHsKKyAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX3Jvb3RfZGlyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLT5jb25zdW1lX2ZpbGVuYW1lKHN0YXJ0LCBlbmQpOworICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fZmlsZW5hbWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6aW5fcm9vdF9kaXI6IHsKKyAgICAgICAgdGhpcy0+Y29uc3VtZV9maWxlbmFtZShzdGFydCwgZW5kKTsKKyAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9maWxlbmFtZSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6aW5fZmlsZW5hbWU6IHsKKyAgICAgICAgYXV0byBwb3NTZXAgPSB0aGlzLT5jb25zdW1lX3NlcGFyYXRvcihzdGFydCwgZW5kKTsKKyAgICAgICAgaWYgKHBvc1NlcCAhPSBlbmQpIHsKKyAgICAgICAgICBhdXRvIHBvcyA9IHRoaXMtPmNvbnN1bWVfZmlsZW5hbWUocG9zU2VwLCBlbmQpOworICAgICAgICAgIGlmIChwb3MpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2V0X3N0YXRlKHN0YXRlOjp0cmFpbGluZ19zZXBhcmF0b3IpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2Ugc3RhdGU6OnRyYWlsaW5nX3NlcGFyYXRvcjogeworICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmF0X2VuZCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6YXRfZW5kOgorICAgICAgICAvLyB1bnJlYWNoYWJsZQorICAgICAgICBzdGQ6OmFib3J0KCk7CisgICAgfQorICB9CisKKyAgdm9pZCBkZWNyZW1lbnQoKSBub2V4Y2VwdAorICB7CisgICAgY29uc3QgcG9pbnRlciByc3RhcnQgPSB0aGlzLT5jdXJyZW50X3Rva2VuKCkgLSAxOworICAgIGNvbnN0IHBvaW50ZXIgcmVuZCA9IHRoaXMtPmJlZm9yZV9zdGFydCgpOworCisgICAgaWYgKHJzdGFydCA9PSByZW5kKSB7CisgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmJlZm9yZV9iZWdpbik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoICh0aGlzLT5TdGF0ZSkgeworICAgICAgY2FzZSBzdGF0ZTo6YXRfZW5kOiB7CisgICAgICAgIGF1dG8gcG9zU2VwID0gdGhpcy0+Y29uc3VtZV9zZXBhcmF0b3IocnN0YXJ0LCByZW5kKTsKKyAgICAgICAgaWYgKHBvc1NlcCkgeworICAgICAgICAgIGlmIChwb3NTZXAgPT0gcmVuZCkgeworICAgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9yb290X2Rpcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcG9zID0gdGhpcy0+Y29uc3VtZV9yb290X25hbWUocG9zU2VwLCByZW5kLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChwb3MgPT0gcmVuZCkgeworICAgICAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX3Jvb3RfZGlyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6dHJhaWxpbmdfc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYXV0byBwb3MgPSB0aGlzLT5jb25zdW1lX3Jvb3RfbmFtZShyc3RhcnQsIHJlbmQpOworICAgICAgICAgIGlmIChwb3MgPT0gcmVuZCkgeworICAgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9yb290X25hbWUpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLT5jb25zdW1lX2ZpbGVuYW1lKHJzdGFydCwgcmVuZCk7CisgICAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX2ZpbGVuYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIHN0YXRlOjp0cmFpbGluZ19zZXBhcmF0b3I6IHsKKyAgICAgICAgdGhpcy0+Y29uc3VtZV9maWxlbmFtZShyc3RhcnQsIHJlbmQpOworICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX2ZpbGVuYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIHN0YXRlOjppbl9maWxlbmFtZTogeworICAgICAgICBhdXRvIHBvc1NlcCA9IHRoaXMtPmNvbnN1bWVfc2VwYXJhdG9yKHJzdGFydCwgcmVuZCk7CisgICAgICAgIGlmIChwb3NTZXAgPT0gcmVuZCkgeworICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fcm9vdF9kaXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGF1dG8gcG9zID0gdGhpcy0+Y29uc3VtZV9yb290X25hbWUocG9zU2VwLCByZW5kLCB0cnVlKTsKKyAgICAgICAgICBpZiAocG9zID09IHJlbmQpIHsKKyAgICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fcm9vdF9kaXIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLT5jb25zdW1lX2ZpbGVuYW1lKHBvc1NlcCwgcmVuZCk7CisgICAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX2ZpbGVuYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIHN0YXRlOjppbl9yb290X2RpcjogeworICAgICAgICBhdXRvIHBvcyA9IHRoaXMtPmNvbnN1bWVfcm9vdF9uYW1lKHJzdGFydCwgcmVuZCk7CisgICAgICAgIGlmIChwb3MpIHsKKyAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX3Jvb3RfbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIHN0YXRlOjppbl9yb290X25hbWU6CisgICAgICBjYXNlIHN0YXRlOjpiZWZvcmVfYmVnaW46IHsKKyAgICAgICAgLy8gdW5yZWFjaGFibGUKKyAgICAgICAgc3RkOjphYm9ydCgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHBhdGhfcGFyc2VyJiBvcGVyYXRvcisrKCkgbm9leGNlcHQKKyAgeworICAgIHRoaXMtPmluY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHBhdGhfcGFyc2VyJiBvcGVyYXRvci0tKCkgbm9leGNlcHQKKyAgeworICAgIHRoaXMtPmRlY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIGNtOjpzdHJpbmdfdmlldyBvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgc3dpdGNoICh0aGlzLT5TdGF0ZSkgeworICAgICAgY2FzZSBzdGF0ZTo6YmVmb3JlX2JlZ2luOgorICAgICAgY2FzZSBzdGF0ZTo6YXRfZW5kOgorICAgICAgICByZXR1cm4gY206OnN0cmluZ192aWV3KCk7CisgICAgICBjYXNlIHN0YXRlOjp0cmFpbGluZ19zZXBhcmF0b3I6CisgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfZGlyOgorICAgICAgY2FzZSBzdGF0ZTo6aW5fcm9vdF9uYW1lOgorICAgICAgY2FzZSBzdGF0ZTo6aW5fZmlsZW5hbWU6CisgICAgICAgIHJldHVybiB0aGlzLT5FbnRyeTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIHVucmVhY2hhYmxlCisgICAgICAgIHN0ZDo6YWJvcnQoKTsKKyAgICB9CisgIH0KKworICB2b2lkIHNlZWsoc2Vla19wb3NpdGlvbiBwb3NpdGlvbikKKyAgeworICAgIHN0YXRlIHMgPSBzdGF0aWNfY2FzdDxzdGF0ZT4oc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbikpOworCisgICAgd2hpbGUgKHRoaXMtPlN0YXRlIDw9IHMpIHsKKyAgICAgIHRoaXMtPmluY3JlbWVudCgpOworICAgIH0KKyAgfQorCisgIGNtOjpzdHJpbmdfdmlldyBwZWVrKHBlZWtfZnJhZ21lbnQgZnJhZ21lbnQpCisgIHsKKyAgICBpZiAoZnJhZ21lbnQgPT0gcGVla19mcmFnbWVudDo6cmVtYWluZGVyKSB7CisgICAgICAvLyBwZWVrLXVwIHJlbWFpbiBwYXJ0IG9mIHRoZSBpbml0aWFsIHBhdGgKKyAgICAgIHJldHVybiB7IHRoaXMtPkVudHJ5LmRhdGEoKSwKKyAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90KCZ0aGlzLT5QYXRoLmJhY2soKSAtIHRoaXMtPkVudHJ5LmRhdGEoKSArIDEpIH07CisgICAgfQorICAgIGlmIChmcmFnbWVudCA9PSBwZWVrX2ZyYWdtZW50OjpwYXRoKSB7CisgICAgICAvLyBwZWVrLXVwIGZ1bGwgcGF0aCB1bnRpbCBjdXJyZW50IHBvc2l0aW9uCisgICAgICByZXR1cm4geyB0aGlzLT5QYXRoLmRhdGEoKSwKKyAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90KCZ0aGlzLT5FbnRyeS5iYWNrKCkgLSB0aGlzLT5QYXRoLmRhdGEoKSArIDEpIH07CisgICAgfQorICAgIHJldHVybiB7fTsKKyAgfQorCisgIGJvb2wgaW5fcm9vdF9uYW1lKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3RhdGUgPT0gc3RhdGU6OmluX3Jvb3RfbmFtZTsgfQorICBib29sIGluX3Jvb3RfZGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3RhdGUgPT0gc3RhdGU6OmluX3Jvb3RfZGlyOyB9CisgIGJvb2wgYXRfZW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3RhdGUgPT0gc3RhdGU6OmF0X2VuZDsgfQorCisgIGJvb2wgYXRfc3RhcnQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5FbnRyeS5kYXRhKCkgPT0gdGhpcy0+UGF0aC5kYXRhKCk7IH0KKworcHJpdmF0ZToKKyAgdm9pZCBzZXRfc3RhdGUoc3RhdGUgbmV3U3RhdGUpIG5vZXhjZXB0CisgIHsKKyAgICB0aGlzLT5TdGF0ZSA9IG5ld1N0YXRlOworICAgIGlmIChuZXdTdGF0ZSA9PSBzdGF0ZTo6YmVmb3JlX2JlZ2luIHx8IG5ld1N0YXRlID09IHN0YXRlOjphdF9lbmQpIHsKKyAgICAgIHRoaXMtPkVudHJ5ID0ge307CisgICAgfQorICB9CisKKyAgcG9pbnRlciBiZWZvcmVfc3RhcnQoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiB0aGlzLT5QYXRoLmRhdGEoKSAtIDE7IH0KKyAgcG9pbnRlciBhZnRlcl9lbmQoKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuIHRoaXMtPlBhdGguZGF0YSgpICsgdGhpcy0+UGF0aC5zaXplKCk7CisgIH0KKworICBwb2ludGVyIGN1cnJlbnRfdG9rZW4oKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgc3dpdGNoICh0aGlzLT5TdGF0ZSkgeworICAgICAgY2FzZSBzdGF0ZTo6YmVmb3JlX2JlZ2luOgorICAgICAgY2FzZSBzdGF0ZTo6aW5fcm9vdF9uYW1lOgorICAgICAgICByZXR1cm4gJnRoaXMtPlBhdGguZnJvbnQoKTsKKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfZGlyOgorICAgICAgY2FzZSBzdGF0ZTo6aW5fZmlsZW5hbWU6CisgICAgICBjYXNlIHN0YXRlOjp0cmFpbGluZ19zZXBhcmF0b3I6CisgICAgICAgIHJldHVybiAmdGhpcy0+RW50cnkuZnJvbnQoKTsKKyAgICAgIGNhc2Ugc3RhdGU6OmF0X2VuZDoKKyAgICAgICAgcmV0dXJuICZ0aGlzLT5QYXRoLmJhY2soKSArIDE7CisgICAgICBkZWZhdWx0OgorICAgICAgICAvLyB1bnJlYWNoYWJsZQorICAgICAgICBzdGQ6OmFib3J0KCk7CisgICAgfQorICB9CisgIHBvaW50ZXIgbmV4dF90b2tlbigpIGNvbnN0IG5vZXhjZXB0CisgIHsKKyAgICBzd2l0Y2ggKHRoaXMtPlN0YXRlKSB7CisgICAgICBjYXNlIHN0YXRlOjpiZWZvcmVfYmVnaW46CisgICAgICAgIHJldHVybiB0aGlzLT5QYXRoLmRhdGEoKTsKKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfbmFtZToKKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfZGlyOgorICAgICAgY2FzZSBzdGF0ZTo6aW5fZmlsZW5hbWU6CisgICAgICAgIHJldHVybiAmdGhpcy0+RW50cnkuYmFjaygpICsgMTsKKyAgICAgIGNhc2Ugc3RhdGU6OnRyYWlsaW5nX3NlcGFyYXRvcjoKKyAgICAgIGNhc2Ugc3RhdGU6OmF0X2VuZDoKKyAgICAgICAgcmV0dXJuIGFmdGVyX2VuZCgpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gdW5yZWFjaGFibGUKKyAgICAgICAgc3RkOjphYm9ydCgpOworICAgIH0KKyAgfQorCisgIHBvaW50ZXIgY29uc3VtZV9zZXBhcmF0b3IocG9pbnRlciBwdHIsIHBvaW50ZXIgZW5kKSBub2V4Y2VwdAorICB7CisgICAgaWYgKHB0ciA9PSBlbmQgfHwKKyAgICAgICAgKCpwdHIgIT0gJy8nCisjICBpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgICYmICpwdHIgIT0gJ1xcJworIyAgZW5kaWYKKyAgICAgICAgICkpIHsKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBjb25zdCBhdXRvIHN0ZXAgPSBwdHIgPCBlbmQgPyAxIDogLTE7CisgICAgcHRyICs9IHN0ZXA7CisgICAgd2hpbGUgKHB0ciAhPSBlbmQgJiYKKyAgICAgICAgICAgKCpwdHIgPT0gJy8nCisjICBpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgICAgIHx8ICpwdHIgPT0gJyBcXCcKKyMgIGVuZGlmCisgICAgICAgICAgICApKSB7CisgICAgICBwdHIgKz0gc3RlcDsKKyAgICB9CisgICAgaWYgKHN0ZXAgPT0gMSkgeworICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocHRyIC0gMSwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPkVudHJ5ID0gY206OnN0cmluZ192aWV3KHB0ciArIDEsIDEpOworICAgIH0KKworICAgIHJldHVybiBwdHI7CisgIH0KKworICBwb2ludGVyIGNvbnN1bWVfZmlsZW5hbWUocG9pbnRlciBwdHIsIHBvaW50ZXIgZW5kKSBub2V4Y2VwdAorICB7CisgICAgYXV0byBzdGFydCA9IHB0cjsKKworICAgIGlmIChwdHIgPT0gZW5kIHx8ICpwdHIgPT0gJy8nCisjICBpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgfHwgKnB0ciA9PSAnXFwnCisjICBlbmRpZgorICAgICkgeworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGNvbnN0IGF1dG8gc3RlcCA9IHB0ciA8IGVuZCA/IDEgOiAtMTsKKyAgICBwdHIgKz0gc3RlcDsKKyAgICB3aGlsZSAocHRyICE9IGVuZCAmJiAqcHRyICE9ICcvJworIyAgaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgICAgICYmICpwdHIgIT0gJ1xcJworIyAgZW5kaWYKKyAgICApIHsKKyAgICAgIHB0ciArPSBzdGVwOworICAgIH0KKworIyAgaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKHN0ZXAgPT0gLTEgJiYgKHN0YXJ0IC0gcHRyKSA+PSAyICYmIHB0ciA9PSBlbmQpIHsKKyAgICAgIC8vIHJvbGxiYWNrIGRyaXZlIG5hbWUgY29uc3VtcHRpb24sIGlmIGFueQorICAgICAgaWYgKHRoaXMtPmlzX2RyaXZlX25hbWUocHRyICsgMSkpIHsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICB9CisgICAgICBpZiAocHRyID09IHN0YXJ0KSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgfQorICAgIH0KKyMgIGVuZGlmCisKKyAgICBpZiAoc3RlcCA9PSAxKSB7CisgICAgICB0aGlzLT5FbnRyeSA9IGNtOjpzdHJpbmdfdmlldyhzdGFydCwgcHRyIC0gc3RhcnQpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5FbnRyeSA9IGNtOjpzdHJpbmdfdmlldyhwdHIgKyAxLCBzdGFydCAtIHB0cik7CisgICAgfQorCisgICAgcmV0dXJuIHB0cjsKKyAgfQorCisjICBpZiBkZWZpbmVkKF9XSU4zMikKKyAgYm9vbCBpc19kcml2ZV9uYW1lKHBvaW50ZXIgcHRyKQorICB7CisgICAgcmV0dXJuIHN0ZDo6dG91cHBlcihwdHJbMF0pID49ICdBJyAmJiBzdGQ6OnRvdXBwZXIocHRyWzBdKSA8PSAnWicgJiYKKyAgICAgIHB0clsxXSA9PSAnOic7CisgIH0KKyMgIGVuZGlmCisKKyAgcG9pbnRlciBjb25zdW1lX3Jvb3RfbmFtZShwb2ludGVyIHB0ciwgcG9pbnRlciBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGVja19vbmx5ID0gZmFsc2UpIG5vZXhjZXB0CisgIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIGlmIChwdHIgPCBlbmQpIHsKKyAgICAgIGlmICgoZW5kIC0gcHRyKSA+PSAyICYmIHRoaXMtPmlzX2RyaXZlX25hbWUocHRyKSkgeworICAgICAgICAvLyBEcml2ZSBsZXR0ZXIgKFg6KSBpcyBhIHJvb3QgbmFtZQorICAgICAgICBpZiAoIWNoZWNrX29ubHkpIHsKKyAgICAgICAgICB0aGlzLT5FbnRyeSA9IGNtOjpzdHJpbmdfdmlldyhwdHIsIDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwdHIgKyAyOworICAgICAgfQorICAgICAgaWYgKChlbmQgLSBwdHIpID4gMiAmJiAocHRyWzBdID09ICcvJyB8fCBwdHJbMF0gPT0gJ1xcJykgJiYKKyAgICAgICAgICAocHRyWzFdID09ICcvJyB8fCBwdHJbMV0gPT0gJ1xcJykgJiYKKyAgICAgICAgICAocHRyWzJdICE9ICcvJyAmJiBwdHJbMl0gIT0gJ1xcJykpIHsKKyAgICAgICAgLy8gc2VydmVyIG5hbWUgKC8vc2VydmVyKSBpcyBhIHJvb3QgbmFtZQorICAgICAgICBhdXRvIHBvcyA9IHN0ZDo6ZmluZF9pZihwdHIgKyAyLCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNoYXIgYykgeyByZXR1cm4gYyA9PSAnLycgfHwgYyA9PSAnXFwnOyB9KTsKKyAgICAgICAgaWYgKCFjaGVja19vbmx5KSB7CisgICAgICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocHRyLCBwb3MgLSBwdHIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwb3M7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICgocHRyIC0gZW5kKSA+PSAyICYmIHRoaXMtPmlzX2RyaXZlX25hbWUocHRyIC0gMSkpIHsKKyAgICAgICAgLy8gRHJpdmUgbGV0dGVyIChYOikgaXMgYSByb290IG5hbWUKKyAgICAgICAgaWYgKCFjaGVja19vbmx5KSB7CisgICAgICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocHRyIC0gMSwgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHB0ciAtIDI7CisgICAgICB9CisgICAgICBpZiAoKHB0ciAtIGVuZCkgPiAyICYmIChwdHJbMF0gIT0gJy8nICYmIHB0clswXSAhPSAnXFwnKSkgeworICAgICAgICBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8cG9pbnRlcj4gc3RhcnQocHRyKTsKKyAgICAgICAgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPHBvaW50ZXI+IHN0b3AoZW5kKTsKKyAgICAgICAgYXV0byByZXMgPSBzdGQ6OmZpbmRfaWYoc3RhcnQsIHN0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNoYXIgYykgeyByZXR1cm4gYyA9PSAnLycgfHwgYyA9PSAnXFwnOyB9KTsKKyAgICAgICAgcG9pbnRlciBwb3MgPSByZXMuYmFzZSgpIC0gMTsKKyAgICAgICAgaWYgKChwb3MgLSAxKSA+IGVuZCAmJiAocG9zWy0xXSA9PSAnLycgfHwgcG9zWy0xXSA9PSAnXFwnKSkgeworICAgICAgICAgIC8vIHNlcnZlciBuYW1lICgvL3NlcnZlcikgaXMgYSByb290IG5hbWUKKyAgICAgICAgICBpZiAoIWNoZWNrX29ubHkpIHsKKyAgICAgICAgICAgIHRoaXMtPkVudHJ5ID0gY206OnN0cmluZ192aWV3KHBvcyAtIDEsIHB0ciAtIHBvcyArIDIpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gcG9zIC0gMjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyMgIGVsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIGlmIChwdHIgPCBlbmQpIHsKKyAgICAgIGlmICgoZW5kIC0gcHRyKSA+IDIgJiYgcHRyWzBdID09ICcvJyAmJiBwdHJbMV0gPT0gJy8nICYmIHB0clsyXSAhPSAnLycpIHsKKyAgICAgICAgLy8gc2VydmVyIG5hbWUgKC8vc2VydmVyKSBpcyBhIHJvb3QgbmFtZQorICAgICAgICBhdXRvIHBvcyA9IHN0ZDo6ZmluZChwdHIgKyAyLCBlbmQsICcvJyk7CisgICAgICAgIGlmICghY2hlY2tfb25seSkgeworICAgICAgICAgIHRoaXMtPkVudHJ5ID0gY206OnN0cmluZ192aWV3KHB0ciwgcG9zIC0gcHRyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcG9zOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoKHB0ciAtIGVuZCkgPiAyICYmIHB0clswXSAhPSAnLycpIHsKKyAgICAgICAgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPHBvaW50ZXI+IHN0YXJ0KHB0cik7CisgICAgICAgIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxwb2ludGVyPiBzdG9wKGVuZCk7CisgICAgICAgIGF1dG8gcmVzID0gc3RkOjpmaW5kKHN0YXJ0LCBzdG9wLCAnLycpOworICAgICAgICBwb2ludGVyIHBvcyA9IHJlcy5iYXNlKCkgLSAxOworICAgICAgICBpZiAoKHBvcyAtIDEpID4gZW5kICYmIHBvc1stMV0gPT0gJy8nKSB7CisgICAgICAgICAgLy8gc2VydmVyIG5hbWUgKC8vc2VydmVyKSBpcyBhIHJvb3QgbmFtZQorICAgICAgICAgIGlmICghY2hlY2tfb25seSkgeworICAgICAgICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocG9zIC0gMSwgcHRyIC0gcG9zICsgMik7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBwb3MgLSAyOworICAgICAgICB9CisgICAgICB9CisgICAgfQorIyAgZWxzZQorICAgICh2b2lkKXB0cjsKKyAgICAodm9pZCllbmQ7CisgICAgKHZvaWQpY2hlY2tfb25seTsKKyMgIGVuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworICBzdGF0ZSBTdGF0ZTsKKyAgY29uc3QgY206OnN0cmluZ192aWV3IFBhdGg7CisgIGNtOjpzdHJpbmdfdmlldyBFbnRyeTsKK307CisKKy8vIGNsYXNzIHVuaWNvZGVfaGVscGVyCit2b2lkIHVuaWNvZGVfaGVscGVyOjphcHBlbmQoc3RkOjpzdHJpbmcmIHN0ciwgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQpCit7CisgIGlmIChjb2RlcG9pbnQgPD0gMHg3ZikgeworICAgIHN0ci5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oY29kZXBvaW50KSk7CisgIH0gZWxzZSBpZiAoY29kZXBvaW50ID49IDB4ODAgJiYgY29kZXBvaW50IDw9IDB4N2ZmKSB7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ID4+IDYpICsgMTkyKSk7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ICYgMHgzZikgKyAxMjgpKTsKKyAgfSBlbHNlIGlmICgoY29kZXBvaW50ID49IDB4ODAwICYmIGNvZGVwb2ludCA8PSAweGQ3ZmYpIHx8CisgICAgICAgICAgICAgKGNvZGVwb2ludCA+PSAweGUwMDAgJiYgY29kZXBvaW50IDw9IDB4ZmZmZikpIHsKKyAgICBzdHIucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KChjb2RlcG9pbnQgPj4gMTIpICsgMjI0KSk7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoKGNvZGVwb2ludCAmIDB4ZmZmKSA+PiA2KSArIDEyOCkpOworICAgIHN0ci5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oKGNvZGVwb2ludCAmIDB4M2YpICsgMTI4KSk7CisgIH0gZWxzZSBpZiAoY29kZXBvaW50ID49IDB4MTAwMDAgJiYgY29kZXBvaW50IDw9IDB4MTBmZmZmKSB7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ID4+IDE4KSArIDI0MCkpOworICAgIHN0ci5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oKChjb2RlcG9pbnQgJiAweDNmZmZmKSA+PiAxMikgKyAxMjgpKTsKKyAgICBzdHIucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KCgoY29kZXBvaW50ICYgMHhmZmYpID4+IDYpICsgMTI4KSk7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ICYgMHgzZikgKyAxMjgpKTsKKyAgfSBlbHNlIHsKKyAgICBhcHBlbmQoc3RyLCAweGZmZmQpOworICB9Cit9CisKK3VuaWNvZGVfaGVscGVyOjp1dGY4X3N0YXRlIHVuaWNvZGVfaGVscGVyOjpkZWNvZGUoY29uc3QgdXRmOF9zdGF0ZSBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1aW50OF90IGZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVpbnQzMl90JiBjb2RlcG9pbnQpCit7CisgIGNvbnN0IHN0ZDo6dWludDMyX3QgdXRmOF9zdGF0ZV9pbmZvW10gPSB7CisgICAgLy8gZW5jb2RlZCBzdGF0ZXMKKyAgICAweDExMTExMTExdSwgMHgxMTExMTExMXUsIDB4Nzc3Nzc3Nzd1LCAweDc3Nzc3Nzc3dSwgMHg4ODg4ODg4OHUsCisgICAgMHg4ODg4ODg4OHUsIDB4ODg4ODg4ODh1LCAweDg4ODg4ODg4dSwgMHgyMjIyMjI5OXUsIDB4MjIyMjIyMjJ1LAorICAgIDB4MjIyMjIyMjJ1LCAweDIyMjIyMjIydSwgMHgzMzMzMzMzYXUsIDB4MzM0MzMzMzN1LCAweDk5OTU2NjZidSwKKyAgICAweDk5OTk5OTk5dSwgMHg4ODg4ODg4MHUsIDB4MjI4MTgxMDh1LCAweDg4ODg4ODgxdSwgMHg4ODg4ODg4MnUsCisgICAgMHg4ODg4ODg4NHUsIDB4ODg4ODg4ODd1LCAweDg4ODg4ODg2dSwgMHg4MjIxODEwOHUsIDB4ODIyODExMDh1LAorICAgIDB4ODg4ODg4ODh1LCAweDg4ODg4ODgzdSwgMHg4ODg4ODg4NXUsIDB1LCAgICAgICAgICAwdSwKKyAgICAwdSwgICAgICAgICAgMHUsCisgIH07CisgIHN0ZDo6dWludDhfdCBjYXRlZ29yeSA9IGZyYWdtZW50IDwgMTI4CisgICAgPyAwCisgICAgOiAodXRmOF9zdGF0ZV9pbmZvWyhmcmFnbWVudCA+PiAzKSAmIDB4Zl0gPj4gKChmcmFnbWVudCAmIDcpIDw8IDIpKSAmIDB4ZjsKKyAgY29kZXBvaW50ID0gKHN0YXRlID8gKGNvZGVwb2ludCA8PCA2KSB8IChmcmFnbWVudCAmIDB4M2Z1KQorICAgICAgICAgICAgICAgICAgICAgOiAoMHhmZnUgPj4gY2F0ZWdvcnkpICYgZnJhZ21lbnQpOworICByZXR1cm4gc3RhdGUgPT0gc19yZWplY3QKKyAgICA/IHNfcmVqZWN0CisgICAgOiBzdGF0aWNfY2FzdDx1dGY4X3N0YXRlPigKKyAgICAgICAgKHV0Zjhfc3RhdGVfaW5mb1tjYXRlZ29yeSArIDE2XSA+PiAoc3RhdGUgPDwgMikpICYgMHhmKTsKK30KKworfSAvLyBpbnRlcm5hbHMKKworLy8gQ2xhc3MgcGF0aAorcGF0aCYgcGF0aDo6b3BlcmF0b3IvPShjb25zdCBwYXRoJiBwKQoreworICBpZiAocC5pc19hYnNvbHV0ZSgpIHx8CisgICAgICAocC5oYXNfcm9vdF9uYW1lKCkgJiYgcC5nZXRfcm9vdF9uYW1lKCkgIT0gdGhpcy0+Z2V0X3Jvb3RfbmFtZSgpKSkgeworICAgIHRoaXMtPnBhdGhfID0gcC5wYXRoXzsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgaWYgKHAuaGFzX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICB0aGlzLT5wYXRoXyA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPih0aGlzLT5nZXRfcm9vdF9uYW1lKCkpOworICAgIHRoaXMtPnBhdGhfICs9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihwLmdldF9yb290X2RpcmVjdG9yeSgpKTsKKyAgfSBlbHNlIGlmICh0aGlzLT5oYXNfZmlsZW5hbWUoKSkgeworICAgIHRoaXMtPnBhdGhfICs9IHRoaXMtPnByZWZlcnJlZF9zZXBhcmF0b3I7CisjICBpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIC8vIHNwZWNpYWwgY2FzZTogIi8vaG9zdCIgLyAiYiIgPT4gIi8vaG9zdC9iIgorICB9IGVsc2UgaWYgKHRoaXMtPmhhc19yb290X25hbWUoKSAmJiAhdGhpcy0+aGFzX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICBpZiAodGhpcy0+cGF0aF8ubGVuZ3RoKCkgPj0gMyAmJgorICAgICAgICAodGhpcy0+cGF0aF9bMF0gPT0gJy8nCisjICAgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgICAgICAgfHwgdGhpcy0+cGF0aF9bMF0gPT0gJ1xcJworIyAgICBlbmRpZgorICAgICAgICAgKSAmJgorICAgICAgICAodGhpcy0+cGF0aF9bMV0gPT0gJy8nCisjICAgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgICAgICAgfHwgdGhpcy0+cGF0aF9bMV0gPT0gJ1xcJworIyAgICBlbmRpZgorICAgICAgICAgKSAmJgorICAgICAgICAodGhpcy0+cGF0aF9bMl0gIT0gJy8nCisjICAgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgICAgICAgJiYgdGhpcy0+cGF0aF9bMl0gIT0gJ1xcJworIyAgICBlbmRpZgorICAgICAgICAgKSkgeworICAgICAgdGhpcy0+cGF0aF8gKz0gdGhpcy0+cHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICB9CisjICBlbmRpZgorICB9CisKKyAgdGhpcy0+cGF0aF8gKz0gcC5nZXRfcmVsYXRpdmVfcGF0aCgpOworICByZXR1cm4gKnRoaXM7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNhbGx5X25vcm1hbCgpIGNvbnN0Cit7CisgIGlmICh0aGlzLT5wYXRoXy5lbXB0eSgpKSB7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgY29uc3QgY206OnN0cmluZ192aWV3IGRvdCA9ICIuIl9zOworICBjb25zdCBjbTo6c3RyaW5nX3ZpZXcgZG90ZG90ID0gIi4uIl9zOworCisgIHN0ZDo6dmVjdG9yPGNtOjpzdHJpbmdfdmlldz4gcm9vdF9wYXJ0czsKKyAgc3RkOjp2ZWN0b3I8Y206OnN0cmluZ192aWV3PiBwYXJ0czsKKyAgYm9vbCByb290X2RpcmVjdG9yeV9kZWZpbmVkID0gZmFsc2U7CisgIGJvb2wgbmVlZF9maW5hbF9zZXBhcmF0b3IgPSBmYWxzZTsKKyAgc3RkOjpzaXplX3QgcGF0aF9zaXplID0gMDsKKworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgICsrcGFyc2VyOworICB3aGlsZSAoIXBhcnNlci5hdF9lbmQoKSkgeworICAgIGF1dG8gcGFydCA9ICpwYXJzZXI7CisKKyAgICBpZiAocGFyc2VyLmluX3Jvb3RfbmFtZSgpIHx8IHBhcnNlci5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgICBpZiAocGFyc2VyLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgICAgcm9vdF9kaXJlY3RvcnlfZGVmaW5lZCA9IHRydWU7CisgICAgICB9CisgICAgICByb290X3BhcnRzLnB1c2hfYmFjayhwYXJ0KTsKKyAgICAgIHBhdGhfc2l6ZSArPSBwYXJ0LnNpemUoKTsKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gZG90ZG90KSB7CisgICAgICBpZiAoIXBhcnRzLmVtcHR5KCkgJiYgcGFydHMuYmFjaygpICE9IGRvdGRvdCkgeworICAgICAgICBuZWVkX2ZpbmFsX3NlcGFyYXRvciA9IHRydWU7CisgICAgICAgIHBhdGhfc2l6ZSAtPSBwYXJ0cy5iYWNrKCkuc2l6ZSgpOworICAgICAgICBwYXJ0cy5wb3BfYmFjaygpOworICAgICAgfSBlbHNlIGlmICgocGFydHMuZW1wdHkoKSB8fCBwYXJ0cy5iYWNrKCkgPT0gZG90ZG90KSAmJgorICAgICAgICAgICAgICAgICAhcm9vdF9kaXJlY3RvcnlfZGVmaW5lZCkgeworICAgICAgICBwYXJ0cy5wdXNoX2JhY2soZG90ZG90KTsKKyAgICAgICAgcGF0aF9zaXplICs9IDI7CisgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gZG90IHx8IHBhcnQuZW1wdHkoKSkgeworICAgICAgbmVlZF9maW5hbF9zZXBhcmF0b3IgPSB0cnVlOworICAgICAgaWYgKHBhcnQuZW1wdHkoKSkgeworICAgICAgICBwYXJ0cy5wdXNoX2JhY2socGFydCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIGZpbGVuYW1lCisgICAgICBuZWVkX2ZpbmFsX3NlcGFyYXRvciA9IGZhbHNlOworICAgICAgcGFydHMucHVzaF9iYWNrKHBhcnQpOworICAgICAgcGF0aF9zaXplICs9IHBhcnQuc2l6ZSgpOworICAgIH0KKyAgICArK3BhcnNlcjsKKyAgfQorCisgIC8vIG5vIGZpbmFsIHNlcGFyYXRvciBpZiBsYXN0IGVsZW1lbnQgb2YgcGF0aCBpcyAiLi4iCisgIG5lZWRfZmluYWxfc2VwYXJhdG9yID0KKyAgICBuZWVkX2ZpbmFsX3NlcGFyYXRvciAmJiAhcGFydHMuZW1wdHkoKSAmJiBwYXJ0cy5iYWNrKCkgIT0gZG90ZG90OworCisgIC8vIGJ1aWxkIGZpbmFsIHBhdGgKKyAgLy8vLyBjb21wdXRlIGZpbmFsIHNpemUgb2YgcGF0aAorICBwYXRoX3NpemUgKz0gcGFydHMuc2l6ZSgpICsgKG5lZWRfZmluYWxfc2VwYXJhdG9yID8gMSA6IDApOworCisgIHN0ZDo6c3RyaW5nIG5wOworICBucC5yZXNlcnZlKHBhdGhfc2l6ZSk7CisgIGZvciAoY29uc3QgYXV0byYgcCA6IHJvb3RfcGFydHMpIHsKKyAgICBucCArPSBwOworICB9CisgIC8vIGNvbnZlcnQgYW55IHNsYXNoIHRvIHRoZSBwcmVmZXJyZWRfc2VwYXJhdG9yCisgIGlmIChzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZzo6dmFsdWVfdHlwZT4odGhpcy0+cHJlZmVycmVkX3NlcGFyYXRvcikgIT0gJy8nKSB7CisgICAgc3RkOjpyZXBsYWNlKAorICAgICAgbnAuYmVnaW4oKSwgbnAuZW5kKCksICcvJywKKyAgICAgIHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nOjp2YWx1ZV90eXBlPih0aGlzLT5wcmVmZXJyZWRfc2VwYXJhdG9yKSk7CisgIH0KKyAgZm9yIChjb25zdCBhdXRvJiBwIDogcGFydHMpIHsKKyAgICBpZiAoIXAuZW1wdHkoKSkgeworICAgICAgbnAgKz0gcDsKKyAgICAgIG5wICs9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nOjp2YWx1ZV90eXBlPih0aGlzLT5wcmVmZXJyZWRfc2VwYXJhdG9yKTsKKyAgICB9CisgIH0KKyAgaWYgKCFwYXJ0cy5lbXB0eSgpICYmICFuZWVkX2ZpbmFsX3NlcGFyYXRvcikgeworICAgIC8vIHJlbW92ZSBleHRyYSBzZXBhcmF0b3IKKyAgICBucC5wb3BfYmFjaygpOworICB9CisgIGlmIChucC5lbXB0eSgpKSB7CisgICAgbnAuYXNzaWduKDEsICcuJyk7CisgIH0KKworICByZXR1cm4gcGF0aChzdGQ6Om1vdmUobnApKTsKK30KKworcGF0aCBwYXRoOjpsZXhpY2FsbHlfcmVsYXRpdmUoY29uc3QgcGF0aCYgYmFzZSkgY29uc3QKK3sKKyAgaW50ZXJuYWxzOjpwYXRoX3BhcnNlciBwYXJzZXIodGhpcy0+cGF0aF8pOworICArK3BhcnNlcjsKKyAgaW50ZXJuYWxzOjpwYXRoX3BhcnNlciBwYXJzZXJiYXNlKGJhc2UucGF0aF8pOworICArK3BhcnNlcmJhc2U7CisgIGNtOjpzdHJpbmdfdmlldyB0aGlzX3Jvb3RfbmFtZSwgYmFzZV9yb290X25hbWU7CisgIGNtOjpzdHJpbmdfdmlldyB0aGlzX3Jvb3RfZGlyLCBiYXNlX3Jvb3RfZGlyOworCisgIGlmIChwYXJzZXIuaW5fcm9vdF9uYW1lKCkpIHsKKyAgICB0aGlzX3Jvb3RfbmFtZSA9ICpwYXJzZXI7CisgICAgKytwYXJzZXI7CisgIH0KKyAgaWYgKHBhcnNlci5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgdGhpc19yb290X2RpciA9ICpwYXJzZXI7CisgICAgKytwYXJzZXI7CisgIH0KKyAgaWYgKHBhcnNlcmJhc2UuaW5fcm9vdF9uYW1lKCkpIHsKKyAgICBiYXNlX3Jvb3RfbmFtZSA9ICpwYXJzZXJiYXNlOworICAgICsrcGFyc2VyYmFzZTsKKyAgfQorICBpZiAocGFyc2VyYmFzZS5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgYmFzZV9yb290X2RpciA9ICpwYXJzZXJiYXNlOworICAgICsrcGFyc2VyYmFzZTsKKyAgfQorCisgIGF1dG8gaXNfcGF0aF9hYnNvbHV0ZSA9IFtdKGNtOjpzdHJpbmdfdmlldyBybiwgY206OnN0cmluZ192aWV3IHJkKSAtPiBib29sIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIHJldHVybiAhcm4uZW1wdHkoKSAmJiAhcmQuZW1wdHkoKTsKKyMgIGVsc2UKKyAgICAodm9pZClybjsKKyAgICByZXR1cm4gIXJkLmVtcHR5KCk7CisjICBlbmRpZgorICB9OworCisgIGlmICh0aGlzX3Jvb3RfbmFtZSAhPSBiYXNlX3Jvb3RfbmFtZSB8fAorICAgICAgaXNfcGF0aF9hYnNvbHV0ZSh0aGlzX3Jvb3RfbmFtZSwgdGhpc19yb290X2RpcikgIT0KKyAgICAgICAgaXNfcGF0aF9hYnNvbHV0ZShiYXNlX3Jvb3RfbmFtZSwgYmFzZV9yb290X2RpcikgfHwKKyAgICAgICh0aGlzX3Jvb3RfZGlyLmVtcHR5KCkgJiYgIWJhc2Vfcm9vdF9kaXIuZW1wdHkoKSkpIHsKKyAgICByZXR1cm4gcGF0aCgpOworICB9CisKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAvLyBMV0czMDcwIGhhbmRsZSBzcGVjaWFsIGNhc2U6IGZpbGVuYW1lIGNhbiBhbHNvIGJlIGEgcm9vdC1uYW1lCisgIGF1dG8gaXNfZHJpdmVfbmFtZSA9IFtdKGNtOjpzdHJpbmdfdmlldyBpdGVtKSAtPiBib29sIHsKKyAgICByZXR1cm4gaXRlbS5sZW5ndGgoKSA9PSAyICYmIGl0ZW1bMV0gPT0gJzonOworICB9OworICBwYXJzZXIucmVzZXQoKTsKKyAgcGFyc2VyLnNlZWsoaW50ZXJuYWxzOjpwYXRoX3BhcnNlcjo6c2Vla19wb3NpdGlvbjo6cm9vdF9kaXJlY3RvcnkpOworICB3aGlsZSAoIXBhcnNlci5hdF9lbmQoKSkgeworICAgIGlmIChpc19kcml2ZV9uYW1lKCpwYXJzZXIpKSB7CisgICAgICByZXR1cm4gcGF0aCgpOworICAgIH0KKyAgICArK3BhcnNlcjsKKyAgfQorICBwYXJzZXJiYXNlLnJlc2V0KCk7CisgIHBhcnNlcmJhc2Uuc2VlayhpbnRlcm5hbHM6OnBhdGhfcGFyc2VyOjpzZWVrX3Bvc2l0aW9uOjpyb290X2RpcmVjdG9yeSk7CisgIHdoaWxlICghcGFyc2VyYmFzZS5hdF9lbmQoKSkgeworICAgIGlmIChpc19kcml2ZV9uYW1lKCpwYXJzZXJiYXNlKSkgeworICAgICAgcmV0dXJuIHBhdGgoKTsKKyAgICB9CisgICAgKytwYXJzZXJiYXNlOworICB9CisjICBlbmRpZgorCisgIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBkb3QgPSAiLiJfczsKKyAgY29uc3QgY206OnN0cmluZ192aWV3IGRvdGRvdCA9ICIuLiJfczsKKworICBhdXRvIGEgPSB0aGlzLT5iZWdpbigpLCBhZW5kID0gdGhpcy0+ZW5kKCk7CisgIGF1dG8gYiA9IGJhc2UuYmVnaW4oKSwgYmVuZCA9IGJhc2UuZW5kKCk7CisgIHdoaWxlIChhICE9IGFlbmQgJiYgYiAhPSBiZW5kICYmIGEtPnN0cmluZygpID09IGItPnN0cmluZygpKSB7CisgICAgKythOworICAgICsrYjsKKyAgfQorCisgIGludCBjb3VudCA9IDA7CisgIGZvciAoOyBiICE9IGJlbmQ7ICsrYikgeworICAgIGF1dG8gcGFydCA9ICpiOworICAgIGlmIChwYXJ0ID09IGRvdGRvdCkgeworICAgICAgLS1jb3VudDsKKyAgICB9IGVsc2UgaWYgKHBhcnQuc3RyaW5nKCkgIT0gZG90ICYmICFwYXJ0LmVtcHR5KCkpIHsKKyAgICAgICsrY291bnQ7CisgICAgfQorICB9CisKKyAgaWYgKGNvdW50ID09IDAgJiYgKGEgPT0gdGhpcy0+ZW5kKCkgfHwgYS0+ZW1wdHkoKSkpIHsKKyAgICByZXR1cm4gcGF0aChkb3QpOworICB9CisgIGlmIChjb3VudCA+PSAwKSB7CisgICAgcGF0aCByZXN1bHQ7CisgICAgcGF0aCBwX2RvdGRvdChkb3Rkb3QpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgcmVzdWx0IC89IHBfZG90ZG90OworICAgIH0KKyAgICBmb3IgKDsgYSAhPSBhZW5kOyArK2EpIHsKKyAgICAgIHJlc3VsdCAvPSAqYTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICAvLyBjb3VudCA8IDAKKyAgcmV0dXJuIHBhdGgoKTsKK30KKworcGF0aDo6cGF0aF90eXBlIHBhdGg6OmdldF9nZW5lcmljKCkgY29uc3QKK3sKKyAgYXV0byBnZW5fcGF0aCA9IHRoaXMtPnBhdGhfOworICBhdXRvIHN0YXJ0ID0gZ2VuX3BhdGguYmVnaW4oKTsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICBzdGQ6OnJlcGxhY2UoZ2VuX3BhdGguYmVnaW4oKSwgZ2VuX3BhdGguZW5kKCksICdcXCcsICcvJyk7CisgIC8vIHByZXNlcnZlIHNwZWNpYWwgc3ludGF4IGZvciByb290X25hbWUgKCcvL3NlcnZlcicgb3IgJy8vPycpCisgIGlmIChnZW5fcGF0aC5sZW5ndGgoKSA+IDIgJiYgZ2VuX3BhdGhbMl0gIT0gJy8nKSB7CisgICAgc3RhcnQgKz0gMjsKKyAgfQorIyAgZW5kaWYKKyAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSBzZXBhcmF0b3JzCisgIGF1dG8gbmV3X2VuZCA9IHN0ZDo6dW5pcXVlKHN0YXJ0LCBnZW5fcGF0aC5lbmQoKSwgW10oY2hhciBsaHMsIGNoYXIgcmhzKSB7CisgICAgcmV0dXJuIGxocyA9PSByaHMgJiYgbGhzID09ICcvJzsKKyAgfSk7CisgIGdlbl9wYXRoLmVyYXNlKG5ld19lbmQsIGdlbl9wYXRoLmVuZCgpKTsKKyAgcmV0dXJuIGdlbl9wYXRoOworfQorCitjbTo6c3RyaW5nX3ZpZXcgcGF0aDo6Z2V0X3Jvb3RfbmFtZSgpIGNvbnN0Cit7CisgIGludGVybmFsczo6cGF0aF9wYXJzZXIgcGFyc2VyKHRoaXMtPnBhdGhfKTsKKyAgKytwYXJzZXI7CisgIGlmIChwYXJzZXIuaW5fcm9vdF9uYW1lKCkpIHsKKyAgICByZXR1cm4gKnBhcnNlcjsKKyAgfQorICByZXR1cm4ge307Cit9CisKK2NtOjpzdHJpbmdfdmlldyBwYXRoOjpnZXRfcm9vdF9kaXJlY3RvcnkoKSBjb25zdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgICsrcGFyc2VyOworICBpZiAocGFyc2VyLmluX3Jvb3RfbmFtZSgpKSB7CisgICAgKytwYXJzZXI7CisgIH0KKyAgaWYgKHBhcnNlci5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgcmV0dXJuICpwYXJzZXI7CisgIH0KKyAgcmV0dXJuIHt9OworfQorCitjbTo6c3RyaW5nX3ZpZXcgcGF0aDo6Z2V0X3JlbGF0aXZlX3BhdGgoKSBjb25zdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgIHBhcnNlci5zZWVrKGludGVybmFsczo6cGF0aF9wYXJzZXI6OnNlZWtfcG9zaXRpb246OnJvb3RfZGlyZWN0b3J5KTsKKyAgaWYgKHBhcnNlci5hdF9lbmQoKSkgeworICAgIHJldHVybiB7fTsKKyAgfQorICByZXR1cm4gcGFyc2VyLnBlZWsoaW50ZXJuYWxzOjpwYXRoX3BhcnNlcjo6cGVla19mcmFnbWVudDo6cmVtYWluZGVyKTsKK30KKworY206OnN0cmluZ192aWV3IHBhdGg6OmdldF9wYXJlbnRfcGF0aCgpIGNvbnN0Cit7CisgIGlmICghdGhpcy0+aGFzX3JlbGF0aXZlX3BhdGgoKSkgeworICAgIHJldHVybiB0aGlzLT5wYXRoXzsKKyAgfQorCisgIC8vIHBlZWstdXAgZnVsbCBwYXRoIG1pbnVzIGxhc3QgZWxlbWVudAorICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXywgdHJ1ZSk7CisgIC0tcGFyc2VyOworICBpZiAocGFyc2VyLmF0X3N0YXJ0KCkpIHsKKyAgICByZXR1cm4ge307CisgIH0KKyAgLS1wYXJzZXI7CisgIHJldHVybiBwYXJzZXIucGVlayhpbnRlcm5hbHM6OnBhdGhfcGFyc2VyOjpwZWVrX2ZyYWdtZW50OjpwYXRoKTsKK30KKworY206OnN0cmluZ192aWV3IHBhdGg6OmdldF9maWxlbmFtZSgpIGNvbnN0Cit7CisgIHsKKyAgICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgICAgcGFyc2VyLnNlZWsoaW50ZXJuYWxzOjpwYXRoX3BhcnNlcjo6c2Vla19wb3NpdGlvbjo6cm9vdF9kaXJlY3RvcnkpOworICAgIGlmIChwYXJzZXIuYXRfZW5kKCkpIHsKKyAgICAgIHJldHVybiB7fTsKKyAgICB9CisgIH0KKyAgeworICAgIGludGVybmFsczo6cGF0aF9wYXJzZXIgcGFyc2VyKHRoaXMtPnBhdGhfLCB0cnVlKTsKKyAgICByZXR1cm4gKigtLXBhcnNlcik7CisgIH0KK30KKworY206OnN0cmluZ192aWV3IHBhdGg6OmdldF9maWxlbmFtZV9mcmFnbWVudChmaWxlbmFtZV9mcmFnbWVudCBmcmFnbWVudCkgY29uc3QKK3sKKyAgYXV0byBmaWxlID0gdGhpcy0+Z2V0X2ZpbGVuYW1lKCk7CisKKyAgaWYgKGZpbGUgPT0gIi4iIHx8IGZpbGUgPT0gIi4uIiB8fCBmaWxlLmVtcHR5KCkpIHsKKyAgICByZXR1cm4gZnJhZ21lbnQgPT0gZmlsZW5hbWVfZnJhZ21lbnQ6OnN0ZW0gPyBmaWxlIDogY206OnN0cmluZ192aWV3e307CisgIH0KKworICBhdXRvIHBvcyA9IGZpbGUuZmluZF9sYXN0X29mKCcuJyk7CisgIGlmIChwb3MgPT0gY206OnN0cmluZ192aWV3OjpucG9zIHx8IHBvcyA9PSAwKSB7CisgICAgcmV0dXJuIGZyYWdtZW50ID09IGZpbGVuYW1lX2ZyYWdtZW50OjpzdGVtID8gZmlsZSA6IGNtOjpzdHJpbmdfdmlld3t9OworICB9CisgIHJldHVybiBmcmFnbWVudCA9PSBmaWxlbmFtZV9mcmFnbWVudDo6c3RlbSA/IGZpbGUuc3Vic3RyKDAsIHBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmlsZS5zdWJzdHIocG9zKTsKK30KKworaW50IHBhdGg6OmNvbXBhcmVfcGF0aChjbTo6c3RyaW5nX3ZpZXcgc3RyKSBjb25zdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHRoaXNfcHAodGhpcy0+cGF0aF8pOworICArK3RoaXNfcHA7CisgIGludGVybmFsczo6cGF0aF9wYXJzZXIgb3RoZXJfcHAoc3RyKTsKKyAgKytvdGhlcl9wcDsKKworICAvLyBjb21wYXJlIHJvb3RfbmFtZSBwYXJ0CisgIHsKKyAgICBib29sIGNvbXBhcmVfcm9vdF9uYW1lcyA9IGZhbHNlOworICAgIGNtOjpzdHJpbmdfdmlldyB0aGlzX3Jvb3RfbmFtZSwgb3RoZXJfcm9vdF9uYW1lOworICAgIGludCByZXM7CisKKyAgICBpZiAodGhpc19wcC5pbl9yb290X25hbWUoKSkgeworICAgICAgY29tcGFyZV9yb290X25hbWVzID0gdHJ1ZTsKKyAgICAgIHRoaXNfcm9vdF9uYW1lID0gKnRoaXNfcHA7CisgICAgICArK3RoaXNfcHA7CisgICAgfQorICAgIGlmIChvdGhlcl9wcC5pbl9yb290X25hbWUoKSkgeworICAgICAgY29tcGFyZV9yb290X25hbWVzID0gdHJ1ZTsKKyAgICAgIG90aGVyX3Jvb3RfbmFtZSA9ICpvdGhlcl9wcDsKKyAgICAgICsrb3RoZXJfcHA7CisgICAgfQorICAgIGlmIChjb21wYXJlX3Jvb3RfbmFtZXMgJiYKKyAgICAgICAgKHJlcyA9IHRoaXNfcm9vdF9uYW1lLmNvbXBhcmUob3RoZXJfcm9vdF9uYW1lKSAhPSAwKSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKworICAvLyBjb21wYXJlIHJvb3RfZGlyZWN0b3J5IHBhcnQKKyAgeworICAgIGlmICghdGhpc19wcC5pbl9yb290X2RpcmVjdG9yeSgpICYmIG90aGVyX3BwLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKHRoaXNfcHAuaW5fcm9vdF9kaXJlY3RvcnkoKSAmJiAhb3RoZXJfcHAuaW5fcm9vdF9kaXJlY3RvcnkoKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICh0aGlzX3BwLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgICsrdGhpc19wcDsKKyAgICB9CisgICAgaWYgKG90aGVyX3BwLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgICsrb3RoZXJfcHA7CisgICAgfQorICB9CisKKyAgLy8gY29tcGFyZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBwYXRocworICB3aGlsZSAoIXRoaXNfcHAuYXRfZW5kKCkgJiYgIW90aGVyX3BwLmF0X2VuZCgpKSB7CisgICAgaW50IHJlczsKKyAgICBpZiAoKHJlcyA9ICgqdGhpc19wcCkuY29tcGFyZSgqb3RoZXJfcHApKSAhPSAwKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICArK3RoaXNfcHA7CisgICAgKytvdGhlcl9wcDsKKyAgfQorCisgIC8vIGZpbmFsIHN0ZXAKKyAgaWYgKHRoaXNfcHAuYXRfZW5kKCkgJiYgIW90aGVyX3BwLmF0X2VuZCgpKSB7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgaWYgKCF0aGlzX3BwLmF0X2VuZCgpICYmIG90aGVyX3BwLmF0X2VuZCgpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworLy8gQ2xhc3MgcGF0aDo6aXRlcmF0b3IKK3BhdGg6Oml0ZXJhdG9yOjppdGVyYXRvcigpCisgIDogcGF0aF8obnVsbHB0cikKK3sKK30KK3BhdGg6Oml0ZXJhdG9yOjppdGVyYXRvcihjb25zdCBpdGVyYXRvciYgb3RoZXIpCit7CisgIHRoaXMtPnBhdGhfID0gb3RoZXIucGF0aF87CisgIGlmIChvdGhlci5wYXJzZXJfKSB7CisgICAgdGhpcy0+cGFyc2VyXyA9IGNtOjptYWtlX3VuaXF1ZTxpbnRlcm5hbHM6OnBhdGhfcGFyc2VyPigqb3RoZXIucGFyc2VyXyk7CisgICAgdGhpcy0+cGF0aF9lbGVtZW50XyA9IHBhdGgoKip0aGlzLT5wYXJzZXJfKTsKKyAgfQorfQorcGF0aDo6aXRlcmF0b3I6Oml0ZXJhdG9yKGNvbnN0IHBhdGgqIHAsIGJvb2wgYXRfZW5kKQorICA6IHBhdGhfKHApCisgICwgcGFyc2VyXyhjbTo6bWFrZV91bmlxdWU8aW50ZXJuYWxzOjpwYXRoX3BhcnNlcj4ocC0+cGF0aF8sIGF0X2VuZCkpCit7CisgIGlmICghYXRfZW5kKSB7CisgICAgKysoKnRoaXMtPnBhcnNlcl8pOworICAgIHRoaXMtPnBhdGhfZWxlbWVudF8gPSBwYXRoKCoqdGhpcy0+cGFyc2VyXyk7CisgIH0KK30KKworcGF0aDo6aXRlcmF0b3I6On5pdGVyYXRvcigpID0gZGVmYXVsdDsKKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpvcGVyYXRvcj0oY29uc3QgaXRlcmF0b3ImIG90aGVyKQoreworICB0aGlzLT5wYXRoXyA9IG90aGVyLnBhdGhfOworICBpZiAob3RoZXIucGFyc2VyXykgeworICAgIHRoaXMtPnBhcnNlcl8gPSBjbTo6bWFrZV91bmlxdWU8aW50ZXJuYWxzOjpwYXRoX3BhcnNlcj4oKm90aGVyLnBhcnNlcl8pOworICAgIHRoaXMtPnBhdGhfZWxlbWVudF8gPSBwYXRoKCoqdGhpcy0+cGFyc2VyXyk7CisgIH0KKworICByZXR1cm4gKnRoaXM7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRoOjppdGVyYXRvcjo6b3BlcmF0b3IrKygpCit7CisgIGFzc2VydCh0aGlzLT5wYXJzZXJfKTsKKworICBpZiAodGhpcy0+cGFyc2VyXykgeworICAgIGFzc2VydCghdGhpcy0+cGFyc2VyXy0+YXRfZW5kKCkpOworCisgICAgaWYgKCF0aGlzLT5wYXJzZXJfLT5hdF9lbmQoKSkgeworICAgICAgKysoKnRoaXMtPnBhcnNlcl8pOworICAgICAgaWYgKHRoaXMtPnBhcnNlcl8tPmF0X2VuZCgpKSB7CisgICAgICAgIHRoaXMtPnBhdGhfZWxlbWVudF8gPSBwYXRoKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLT5wYXRoX2VsZW1lbnRfID0gcGF0aCgqKnRoaXMtPnBhcnNlcl8pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAqdGhpczsKK30KKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpvcGVyYXRvci0tKCkKK3sKKyAgYXNzZXJ0KHRoaXMtPnBhcnNlcl8pOworCisgIGlmICh0aGlzLT5wYXJzZXJfKSB7CisgICAgYXNzZXJ0KCF0aGlzLT5wYXJzZXJfLT5hdF9zdGFydCgpKTsKKworICAgIGlmICghdGhpcy0+cGFyc2VyXy0+YXRfc3RhcnQoKSkgeworICAgICAgLS0oKnRoaXMtPnBhcnNlcl8pOworICAgICAgdGhpcy0+cGF0aF9lbGVtZW50XyA9IHBhdGgoKip0aGlzLT5wYXJzZXJfKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoOjppdGVyYXRvciYgbGhzLCBjb25zdCBwYXRoOjppdGVyYXRvciYgcmhzKQoreworICByZXR1cm4gbGhzLnBhdGhfID09IHJocy5wYXRoXyAmJiBsaHMucGFyc2VyXyAhPSBudWxscHRyICYmCisgICAgKChsaHMucGFyc2VyXy0+YXRfZW5kKCkgJiYgcmhzLnBhcnNlcl8tPmF0X2VuZCgpKSB8fAorICAgICAobGhzLnBhcnNlcl8tPmF0X3N0YXJ0KCkgJiYgcmhzLnBhcnNlcl8tPmF0X3N0YXJ0KCkpIHx8CisgICAgICgoKipsaHMucGFyc2VyXykuZGF0YSgpID09ICgqKnJocy5wYXJzZXJfKS5kYXRhKCkpKTsKK30KKworc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcihwLnBhdGhfKTsKKyAgc3RkOjpoYXNoPGNtOjpzdHJpbmdfdmlldz4gaGFzaGVyOworICBzdGQ6OnNpemVfdCB2YWx1ZSA9IDA7CisKKyAgd2hpbGUgKCFwYXJzZXIuYXRfZW5kKCkpIHsKKyAgICB2YWx1ZSA9IGhhc2hlcigqcGFyc2VyKSArIDB4OWUzNzc5YjkgKyAodmFsdWUgPDwgNikgKyAodmFsdWUgPj4gMik7CisgICAgKytwYXJzZXI7CisgIH0KKworICByZXR1cm4gdmFsdWU7Cit9Cit9IC8vIGZpbGVzeXN0ZW0KK30gLy8gY20KKworI2Vsc2UKKworLy8gQXZvaWQgZW1wdHkgdHJhbnNsYXRpb24gdW5pdC4KK3ZvaWQgY21fZmlsZXN5c3RlbV9wYXRoX2N4eCgpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL3N0cmluZ192aWV3LmN4eCBiL1V0aWxpdGllcy9zdGQvY20vYml0cy9zdHJpbmdfdmlldy5jeHgKaW5kZXggZTM0NWZkMy4uNTM4MWZlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL3N0cmluZ192aWV3LmN4eAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2JpdHMvc3RyaW5nX3ZpZXcuY3h4CkBAIC05LDcgKzksNyBAQAogIyAgaW5jbHVkZSA8b3N0cmVhbT4KICMgIGluY2x1ZGUgPHN0ZGV4Y2VwdD4KIAotIyAgaW5jbHVkZSAiY21fa3dpbWwuaCIKKyMgIGluY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKIG5hbWVzcGFjZSBjbSB7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vZmlsZXN5c3RlbSBiL1V0aWxpdGllcy9zdGQvY20vZmlsZXN5c3RlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDIxNzEyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS9maWxlc3lzdGVtCkBAIC0wLDAgKzEsMTE3NSBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21fZmlsZXN5c3RlbQorI2RlZmluZSBjbV9maWxlc3lzdGVtCisKKyNpbmNsdWRlICJjbVNUTC5oeHgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCisKKyNpZiBkZWZpbmVkKENNYWtlX0hBVkVfQ1hYX0ZJTEVTWVNURU0pCisKKyMgIGluY2x1ZGUgPGZpbGVzeXN0ZW0+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworI2Vsc2UKKworIyAgaW5jbHVkZSA8Y3N0ZGRlZj4KKyMgIGluY2x1ZGUgPGNzdGRpbnQ+CisjICBpbmNsdWRlIDxpb3N0cmVhbT4KKyMgIGluY2x1ZGUgPGl0ZXJhdG9yPgorIyAgaW5jbHVkZSA8bWVtb3J5PgorIyAgaW5jbHVkZSA8c3RyaW5nPgorIyAgaW5jbHVkZSA8dXRpbGl0eT4KKworIyAgaW5jbHVkZSA8Y20vaW9tYW5pcD4KKyMgIGluY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorIyAgaW5jbHVkZSA8Y20vdHlwZV90cmFpdHM+CisjICBpbmNsdWRlIDxjbWV4dC9pdGVyYXRvcj4KKworIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjICAgIGluY2x1ZGUgPGFsZ29yaXRobT4KKyMgIGVuZGlmCisKKyNlbmRpZgorCituYW1lc3BhY2UgY20geworbmFtZXNwYWNlIGZpbGVzeXN0ZW0geworCisjaWYgZGVmaW5lZChDTWFrZV9IQVZFX0NYWF9GSUxFU1lTVEVNKQorCit1c2luZyBzdGQ6OmZpbGVzeXN0ZW06OnBhdGg7Cit1c2luZyBzdGQ6OmZpbGVzeXN0ZW06OnN3YXA7Cit1c2luZyBzdGQ6OmZpbGVzeXN0ZW06Omhhc2hfdmFsdWU7CisKKyNlbHNlCisKKyMgIGlmICFkZWZpbmVkKENNX0ZJTEVTWVNURU1fU09VUkNFX1RSQUlUU19JVEVSQVRPUikKKy8vIE9yYWNsZSBEZXZlbG9wZXJTdHVkaW8gQysrIGNvbXBpbGVyIG9uIFNvbGFyaXMvU3BhcmMgZmFpbHMgdG8gY29tcGlsZQorLy8gdGhlIHNvdXJjZV90cmFpdHMgZm9yIGl0ZXJhdG9yIGNoZWNrLiAgU28gZGlzYWJsZSBpdCBmb3Igbm93LgorIyAgICBkZWZpbmUgQ01fRklMRVNZU1RFTV9TT1VSQ0VfVFJBSVRTX0lURVJBVE9SIDAKKyMgIGVuZGlmCisKK25hbWVzcGFjZSBpbnRlcm5hbHMgeworCitjbGFzcyBwYXRoX3BhcnNlcjsKKworY2xhc3MgdW5pY29kZV9oZWxwZXIKK3sKK3Byb3RlY3RlZDoKKyAgdXNpbmcgdXRmOF9zdGF0ZSA9IHVuc2lnbmVkIGNoYXI7CisgIHN0YXRpYyBjb25zdCB1dGY4X3N0YXRlIHNfc3RhcnQgPSAwOworICBzdGF0aWMgY29uc3QgdXRmOF9zdGF0ZSBzX3JlamVjdCA9IDg7CisKKyAgc3RhdGljIGlubGluZSBib29sIGluX3JhbmdlKHN0ZDo6dWludDMyX3QgYywgc3RkOjp1aW50MzJfdCBsbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dWludDMyX3QgaGkpCisgIHsKKyAgICByZXR1cm4gKHN0YXRpY19jYXN0PHN0ZDo6dWludDMyX3Q+KGMgLSBsbykgPCAoaGkgLSBsbyArIDEpKTsKKyAgfQorCisgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19zdXJyb2dhdGUoc3RkOjp1aW50MzJfdCBjKQorICB7CisgICAgcmV0dXJuIGluX3JhbmdlKGMsIDB4ZDgwMCwgMHhkZmZmKTsKKyAgfQorCisgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19oaWdoX3N1cnJvZ2F0ZShzdGQ6OnVpbnQzMl90IGMpCisgIHsKKyAgICByZXR1cm4gKGMgJiAweGZmZmZmYzAwKSA9PSAweGQ4MDA7CisgIH0KKworICBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbG93X3N1cnJvZ2F0ZShzdGQ6OnVpbnQzMl90IGMpCisgIHsKKyAgICByZXR1cm4gKGMgJiAweGZmZmZmYzAwKSA9PSAweGRjMDA7CisgIH0KKworICBzdGF0aWMgdm9pZCBhcHBlbmQoc3RkOjpzdHJpbmcmIHN0ciwgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQpOworCisgIHN0YXRpYyB1dGY4X3N0YXRlIGRlY29kZShjb25zdCB1dGY4X3N0YXRlIHN0YXRlLCBjb25zdCBzdGQ6OnVpbnQ4X3QgZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVpbnQzMl90JiBjb2RlcG9pbnQpOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lID0gdm9pZD4KK2NsYXNzIHVuaWNvZGUKK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorY2xhc3MgdW5pY29kZTxDaGFyLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwoc2l6ZW9mKENoYXIpID09IDQpPjo6dHlwZT4KKyAgOiBwdWJsaWMgdW5pY29kZV9oZWxwZXIKK3sKK3B1YmxpYzoKKyAgLy8gVVRGMzIgLT4gVVRGOAorICBzdGF0aWMgc3RkOjpzdHJpbmcgdG9fdXRmOChjb25zdCBzdGQ6OndzdHJpbmcmIHN0cikKKyAgeworICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgICBmb3IgKGF1dG8gYyA6IHN0cikgeworICAgICAgYXBwZW5kKHJlc3VsdCwgYyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvX3V0ZjgoQ2hhciBjKQorICB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGFwcGVuZChyZXN1bHQsIGMpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvLyBVVEY4IC0+IFVURjMyCisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgZnJvbV91dGY4KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCisgIHsKKyAgICBzdGQ6OndzdHJpbmcgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlKHN0ci5sZW5ndGgoKSk7CisgICAgYXV0byBpdGVyID0gc3RyLmJlZ2luKCk7CisgICAgdXRmOF9zdGF0ZSBzdGF0ZSA9IHNfc3RhcnQ7CisgICAgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQgPSAwOworICAgIHdoaWxlIChpdGVyIDwgc3RyLmVuZCgpKSB7CisgICAgICBpZiAoKHN0YXRlID0gZGVjb2RlKHN0YXRlLCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KCppdGVyKyspLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlcG9pbnQpKSA9PSBzX3N0YXJ0KSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgICAgIGNvZGVwb2ludCA9IDA7CisgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IHNfcmVqZWN0KSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgICAgIHN0YXRlID0gc19zdGFydDsKKyAgICAgICAgY29kZXBvaW50ID0gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0YXRlKSB7CisgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigweGZmZmQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgZnJvbV91dGY4KGNoYXIgYykKKyAgeworICAgIHN0ZDo6d3N0cmluZyByZXN1bHQ7CisgICAgdXRmOF9zdGF0ZSBzdGF0ZSA9IHNfc3RhcnQ7CisgICAgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQgPSAwOworICAgIGlmICgoc3RhdGUgPSBkZWNvZGUoc3RhdGUsIHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oYyksIGNvZGVwb2ludCkpID09CisgICAgICAgIHNfc3RhcnQpIHsKKyAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CitjbGFzcyB1bmljb2RlPENoYXIsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPChzaXplb2YoQ2hhcikgPT0gMik+Ojp0eXBlPgorICA6IHB1YmxpYyB1bmljb2RlX2hlbHBlcgoreworcHVibGljOgorICAvLyBVVEYxNiAtPiBVVEY4CisgIHN0YXRpYyBzdGQ6OnN0cmluZyB0b191dGY4KGNvbnN0IHN0ZDo6d3N0cmluZyYgc3RyKQorICB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGZvciAoYXV0byBpdGVyID0gc3RyLmJlZ2luKCk7IGl0ZXIgIT0gc3RyLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgIHN0ZDo6dWludDMyX3QgYyA9ICppdGVyOworICAgICAgaWYgKGlzX3N1cnJvZ2F0ZShjKSkgeworICAgICAgICArK2l0ZXI7CisgICAgICAgIGlmIChpdGVyICE9IHN0ci5lbmQoKSAmJiBpc19oaWdoX3N1cnJvZ2F0ZShjKSAmJgorICAgICAgICAgICAgaXNfbG93X3N1cnJvZ2F0ZSgqaXRlcikpIHsKKyAgICAgICAgICBhcHBlbmQocmVzdWx0LCAoc3RkOjp1aW50MzJfdChjKSA8PCAxMCkgKyAqaXRlciAtIDB4MzVmZGMwMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgMHhmZmZkKTsKKyAgICAgICAgICBpZiAoaXRlciA9PSBzdHIuZW5kKCkpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5kKHJlc3VsdCwgYyk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvX3V0ZjgoQ2hhciBjKQorICB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGlmIChpc19zdXJyb2dhdGUoYykpIHsKKyAgICAgIGFwcGVuZChyZXN1bHQsIDB4ZmZmZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGFwcGVuZChyZXN1bHQsIGMpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgLy8gVVRGOCAtPiBVVEYxNgorICBzdGF0aWMgc3RkOjp3c3RyaW5nIGZyb21fdXRmOChjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQorICB7CisgICAgc3RkOjp3c3RyaW5nIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZShzdHIubGVuZ3RoKCkpOworICAgIGF1dG8gaXRlciA9IHN0ci5iZWdpbigpOworICAgIHV0Zjhfc3RhdGUgc3RhdGUgPSBzX3N0YXJ0OworICAgIHN0ZDo6dWludDMyX3QgY29kZXBvaW50ID0gMDsKKyAgICB3aGlsZSAoaXRlciA8IHN0ci5lbmQoKSkgeworICAgICAgaWYgKChzdGF0ZSA9IGRlY29kZShzdGF0ZSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PigqaXRlcisrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXBvaW50KSkgPT0gc19zdGFydCkgeworICAgICAgICBpZiAoY29kZXBvaW50IDw9IDB4ZmZmZikgeworICAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29kZXBvaW50IC09IDB4MTAwMDA7CisgICAgICAgICAgcmVzdWx0ICs9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KChjb2RlcG9pbnQgPj4gMTApICsgMHhkODAwKTsKKyAgICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigoY29kZXBvaW50ICYgMHgzZmYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGRjMDApOworICAgICAgICB9CisgICAgICAgIGNvZGVwb2ludCA9IDA7CisgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IHNfcmVqZWN0KSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgICAgIHN0YXRlID0gc19zdGFydDsKKyAgICAgICAgY29kZXBvaW50ID0gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0YXRlKSB7CisgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigweGZmZmQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgZnJvbV91dGY4KGNoYXIgYykKKyAgeworICAgIHN0ZDo6d3N0cmluZyByZXN1bHQ7CisgICAgdXRmOF9zdGF0ZSBzdGF0ZSA9IHNfc3RhcnQ7CisgICAgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQgPSAwOworICAgIGlmICgoc3RhdGUgPSBkZWNvZGUoc3RhdGUsIHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oYyksIGNvZGVwb2ludCkpID09CisgICAgICAgIHNfc3RhcnQpIHsKKyAgICAgIGlmIChjb2RlcG9pbnQgPD0gMHhmZmZmKSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb2RlcG9pbnQgLT0gMHgxMDAwMDsKKyAgICAgICAgcmVzdWx0ICs9CisgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigoY29kZXBvaW50ID4+IDEwKSArIDB4ZDgwMCk7CisgICAgICAgIHJlc3VsdCArPQorICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6d3N0cmluZzo6dmFsdWVfdHlwZT4oKGNvZGVwb2ludCAmIDB4M2ZmKSArIDB4ZGMwMCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbiwgdHlwZW5hbWUgT3V0PgorY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXI7CisKK3RlbXBsYXRlIDw+CitjbGFzcyB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCB3Y2hhcl90PgoreworcHVibGljOgorICBzdGQ6OndzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyYgaW4pCisgIHsKKyAgICByZXR1cm4gdW5pY29kZTx3Y2hhcl90Pjo6ZnJvbV91dGY4KGluKTsKKyAgfQorICBzdGQ6OndzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBpbikKKyAgeworICAgIHJldHVybiB1bmljb2RlPHdjaGFyX3Q+Ojpmcm9tX3V0ZjgoaW4pOworICB9CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKGNoYXIgaW4pIHsgcmV0dXJuIHVuaWNvZGU8d2NoYXJfdD46OmZyb21fdXRmOChpbik7IH0KK307Cit0ZW1wbGF0ZSA8PgorY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgY2hhcj4KK3sKK3B1YmxpYzoKKyAgc3RkOjpzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBzdGQ6OndzdHJpbmcmIGluKQorICB7CisgICAgcmV0dXJuIHVuaWNvZGU8d2NoYXJfdD46OnRvX3V0ZjgoaW4pOworICB9CisgIHN0ZDo6c3RyaW5nIG9wZXJhdG9yKCkoY29uc3Qgd2NoYXJfdCogaW4pCisgIHsKKyAgICByZXR1cm4gdW5pY29kZTx3Y2hhcl90Pjo6dG9fdXRmOChpbik7CisgIH0KKyAgc3RkOjpzdHJpbmcgb3BlcmF0b3IoKSh3Y2hhcl90IGluKSB7IHJldHVybiB1bmljb2RlPHdjaGFyX3Q+Ojp0b191dGY4KGluKTsgfQorfTsKK3RlbXBsYXRlIDw+CitjbGFzcyB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBjaGFyPgoreworcHVibGljOgorICBzdGQ6OnN0cmluZyBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbikgeyByZXR1cm4gaW47IH0KKyAgc3RkOjpzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBpbikgeyByZXR1cm4gc3RkOjpzdHJpbmcoaW4pOyB9CisgIHN0ZDo6c3RyaW5nIG9wZXJhdG9yKCkoY2hhciBpbikgeyByZXR1cm4gc3RkOjpzdHJpbmcoMSwgaW4pOyB9Cit9OwordGVtcGxhdGUgPD4KK2NsYXNzIHVuaWNvZGVfY29udmVydGVyPHdjaGFyX3QsIHdjaGFyX3Q+Cit7CitwdWJsaWM6CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6d3N0cmluZyYgaW4pIHsgcmV0dXJuIGluOyB9CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKGNvbnN0IHdjaGFyX3QqIGluKSB7IHJldHVybiBzdGQ6OndzdHJpbmcoaW4pOyB9CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKHdjaGFyX3QgaW4pIHsgcmV0dXJuIHN0ZDo6d3N0cmluZygxLCBpbik7IH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbj4KK3N0cnVjdCBzdHJpbmdfY29udmVydGVyCit7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IHN0cmluZ19jb252ZXJ0ZXI8Y2hhcj4KK3sKKyAgLy8gc29tZSBjb21waWxlcnMsIGxpa2UgZ2NjIDQuOCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBDKysxMQorICAvLyBzaWduYXR1cmU6CisgIC8vIHN0ZDo6c3RyaW5nOjpzdHJpbmcoY29uc3Qgc3RyaW5nJiwgY29uc3QgQWxsb2NhdG9yJikKKyAgLy8gQXMgd29ya2Fyb3VuZCwgdXNlIGNoYXIqIHBvaW50ZXIuCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorICBzdGF0aWMgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4gdG8oY29uc3Qgc3RkOjpzdHJpbmcmIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKGNvbnN0IGNoYXIqIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKGNoYXIgaW4sIGNvbnN0IEFsbG9jJiBhKQorICB7CisgICAgcmV0dXJuIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+KAorICAgICAgdW5pY29kZV9jb252ZXJ0ZXI8Y2hhciwgQ2hhcj4oKShpbikuY19zdHIoKSwgYSk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+IHRvKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbikKKyAgeworICAgIHJldHVybiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPih1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CisgIHN0YXRpYyBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB0byhjb25zdCBjaGFyKiBpbikKKyAgeworICAgIHJldHVybiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPih1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CisgIHN0YXRpYyBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB0byhjaGFyIGluKQorICB7CisgICAgcmV0dXJuIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+KHVuaWNvZGVfY29udmVydGVyPGNoYXIsIENoYXI+KCkoaW4pKTsKKyAgfQorfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qgc3RyaW5nX2NvbnZlcnRlcjx3Y2hhcl90PgoreworICAvLyBzb21lIGNvbXBpbGVycywgbGlrZSBnY2MgNC44IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEMrKzExCisgIC8vIHNpZ25hdHVyZToKKyAgLy8gc3RkOjpzdHJpbmc6OnN0cmluZyhjb25zdCBzdHJpbmcmLCBjb25zdCBBbGxvY2F0b3ImKQorICAvLyBBcyB3b3JrYXJvdW5kLCB1c2UgY2hhciogcG9pbnRlci4KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgQWxsb2M+CisgIHN0YXRpYyBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdHMsIEFsbG9jPiB0byhjb25zdCBzdGQ6OndzdHJpbmcmIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjx3Y2hhcl90LCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKGNvbnN0IHdjaGFyX3QqIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjx3Y2hhcl90LCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKHdjaGFyX3QgaW4sIGNvbnN0IEFsbG9jJiBhKQorICB7CisgICAgcmV0dXJuIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+KAorICAgICAgdW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgQ2hhcj4oKShpbikuY19zdHIoKSwgYSk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+IHRvKGNvbnN0IHN0ZDo6d3N0cmluZyYgaW4pCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4odW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgQ2hhcj4oKShpbikpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorICBzdGF0aWMgc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4gdG8oY29uc3Qgd2NoYXJfdCogaW4pCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4odW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgQ2hhcj4oKShpbikpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorICBzdGF0aWMgc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4gdG8od2NoYXJfdCBpbikKKyAgeworICAgIHJldHVybiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPih1bmljb2RlX2NvbnZlcnRlcjx3Y2hhcl90LCBDaGFyPigpKGluKSk7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3Qgc291cmNlX3RyYWl0cworeworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3Qgc291cmNlX3RyYWl0czxUW05dPgoreworICB1c2luZyB2YWx1ZV90eXBlID0gVDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorc3RydWN0IHNvdXJjZV90cmFpdHM8c3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4+Cit7CisgIHVzaW5nIHZhbHVlX3R5cGUgPQorICAgIHR5cGVuYW1lIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+Ojp2YWx1ZV90eXBlOworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBzb3VyY2VfdHJhaXRzPGNtOjpzdHJpbmdfdmlldz4KK3sKKyAgdXNpbmcgdmFsdWVfdHlwZSA9IGNtOjpzdHJpbmdfdmlldzo6dmFsdWVfdHlwZTsKK307CisKKyMgIGlmIENNX0ZJTEVTWVNURU1fU09VUkNFX1RSQUlUU19JVEVSQVRPUgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qgc291cmNlX3RyYWl0czxULCBjbTo6ZW5hYmxlX2lmX3Q8Y206OmlzX2l0ZXJhdG9yPFQ+Ojp2YWx1ZSwgdm9pZD4+Cit7CisgIHVzaW5nIHZhbHVlX3R5cGUgPQorICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZV90eXBlOworfTsKKyMgIGVuZGlmCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbiwgdHlwZW5hbWUgT3V0Pgorc3RydWN0IHNvdXJjZV9jb252ZXJ0ZXIKK3sKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qgc291cmNlX2NvbnZlcnRlcjxjaGFyLCBjaGFyPgoreworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3I+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9yYW5nZShzdGQ6OnN0cmluZyYgcCwgSXRlcmF0b3IgYiwgSXRlcmF0b3IgZSkKKyAgeworICAgIGlmIChiID09IGUpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgcC5hcHBlbmQoYiwgZSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yPgorICBzdGF0aWMgdm9pZCBhcHBlbmRfcmFuZ2Uoc3RkOjpzdHJpbmcmIHAsIEl0ZXJhdG9yIGIpCisgIHsKKyAgICBjaGFyIGUgPSAnXDAnOworCisgICAgaWYgKCpiID09IGUpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yICg7ICpiICE9IGU7ICsrYikgeworICAgICAgcC5wdXNoX2JhY2soKmIpOworICAgIH0KKyAgfQorCisgIHN0YXRpYyB2b2lkIGFwcGVuZF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBzKQorICB7CisgICAgYXBwZW5kX3JhbmdlKHAsIHMuYmVnaW4oKSwgcy5lbmQoKSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgQWxsb2M+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgVHJhaXRzLCBBbGxvYz4mIHMpCisgIHsKKyAgICBhcHBlbmRfcmFuZ2UocCwgcy5iZWdpbigpLCBzLmVuZCgpKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlPgorICBzdGF0aWMgdm9pZCBhcHBlbmRfc291cmNlKHN0ZDo6c3RyaW5nJiBwLCBjb25zdCBTb3VyY2UmIHMpCisgIHsKKyAgICBhcHBlbmRfcmFuZ2UocCwgcyk7CisgIH0KKworICBzdGF0aWMgdm9pZCBzZXRfc291cmNlKHN0ZDo6c3RyaW5nJiBwLCBzdGQ6OnN0cmluZyYmIHMpIHsgcCA9IHN0ZDo6bW92ZShzKTsgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBzb3VyY2VfY29udmVydGVyPHdjaGFyX3QsIGNoYXI+Cit7CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvcj4KKyAgc3RhdGljIHZvaWQgYXBwZW5kX3JhbmdlKHN0ZDo6c3RyaW5nJiBwLCBJdGVyYXRvciBiLCBJdGVyYXRvciBlKQorICB7CisgICAgaWYgKGIgPT0gZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6d3N0cmluZyB0bXAoYiwgZSk7CisgICAgc3RkOjpzdHJpbmcgZGVzdCA9IHN0cmluZ19jb252ZXJ0ZXI8d2NoYXJfdD46OnRvPGNoYXI+KHRtcCk7CisgICAgcC5hcHBlbmQoZGVzdC5iZWdpbigpLCBkZXN0LmVuZCgpKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3I+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9yYW5nZShzdGQ6OnN0cmluZyYgcCwgSXRlcmF0b3IgYikKKyAgeworICAgIHdjaGFyX3QgZSA9ICdcMCc7CisKKyAgICBpZiAoKmIgPT0gZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdGQ6OndzdHJpbmcgdG1wOworICAgIGZvciAoOyAqYiAhPSBlOyArK2IpIHsKKyAgICAgIHRtcC5wdXNoX2JhY2soKmIpOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIGRlc3QgPSBzdHJpbmdfY29udmVydGVyPHdjaGFyX3Q+Ojp0bzxjaGFyPih0bXApOworICAgIHAuYXBwZW5kKGRlc3QuYmVnaW4oKSwgZGVzdC5lbmQoKSk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHZvaWQgYXBwZW5kX3NvdXJjZShzdGQ6OnN0cmluZyYgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzx3Y2hhcl90LCBUcmFpdHMsIEFsbG9jPiYgcykKKyAgeworICAgIGFwcGVuZF9yYW5nZShwLCBzLmJlZ2luKCksIHMuZW5kKCkpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBTb3VyY2U+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsIGNvbnN0IFNvdXJjZSYgcykKKyAgeworICAgIGFwcGVuZF9yYW5nZShwLCBzKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIHNldF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsIHN0ZDo6d3N0cmluZyYmIHMpCisgIHsKKyAgICBwID0gc3RyaW5nX2NvbnZlcnRlcjx3Y2hhcl90Pjo6dG88Y2hhcj4ocyk7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IGlzX3BhdGhhYmxlX3N0cmluZyA6IHN0ZDo6ZmFsc2VfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorc3RydWN0IGlzX3BhdGhhYmxlX3N0cmluZzxzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBUcmFpdHMsIEFsbG9jPj4KKyAgOiBzdGQ6OnRydWVfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorc3RydWN0IGlzX3BhdGhhYmxlX3N0cmluZzxzdGQ6OmJhc2ljX3N0cmluZzx3Y2hhcl90LCBUcmFpdHMsIEFsbG9jPj4KKyAgOiBzdGQ6OnRydWVfdHlwZQoreworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgaXNfcGF0aGFibGVfc3RyaW5nPGNtOjpzdHJpbmdfdmlldz4gOiBzdGQ6OnRydWVfdHlwZQoreworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZD4KK3N0cnVjdCBpc19wYXRoYWJsZV9jaGFyX2FycmF5IDogc3RkOjpmYWxzZV90eXBlCit7Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfcGF0aGFibGVfY2hhcl9hcnJheTwKKyAgVCwKKyAgY206OmVuYWJsZV9pZl90PAorICAgIHN0ZDo6aXNfc2FtZTxjaGFyKiwgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlIHx8CisgICAgICBzdGQ6OmlzX3NhbWU8d2NoYXJfdCosIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZSwKKyAgICB2b2lkPj4KKyAgOiBib29sX2NvbnN0YW50PHN0ZDo6aXNfc2FtZTxjaGFyKiwgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8d2NoYXJfdCosIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZT4KK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgaXNfcGF0aGFibGVfaXRlcmF0b3IgOiBzdGQ6OmZhbHNlX3R5cGUKK3sKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBpc19wYXRoYWJsZV9pdGVyYXRvcjwKKyAgVCwKKyAgY206OmVuYWJsZV9pZl90PAorICAgIGlzX2lucHV0X2l0ZXJhdG9yPFQ+Ojp2YWx1ZSAmJgorICAgICAgKHN0ZDo6aXNfc2FtZTxjaGFyLAorICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPjo6dmFsdWVfdHlwZT46OnZhbHVlIHx8CisgICAgICAgc3RkOjppc19zYW1lPHdjaGFyX3QsCisgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZV90eXBlPjo6dmFsdWUpLAorICAgIHZvaWQ+PgorICA6IGJvb2xfY29uc3RhbnQ8CisgICAgICBzdGQ6OmlzX3NhbWU8Y2hhciwKKyAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKKyAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZV90eXBlPjo6dmFsdWUgfHwKKyAgICAgIHN0ZDo6aXNfc2FtZTx3Y2hhcl90LAorICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPAorICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlX3R5cGU+Ojp2YWx1ZT4KK3sKK307CisKKyMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYmIGRlZmluZWQoX19zcGFyYykKKy8vIE9yYWNsZSBEZXZlbG9wZXJTdHVkaW8gQysrIGNvbXBpbGVyIG9uIFNvbGFyaXMvU3BhcmMgZmFpbHMgdG8gY29tcGlsZQorLy8gdGhlIGZ1bGwgJ2lzX3BhdGhhYmxlJyBjaGVjay4gIFdlIHVzZSBpdCBvbmx5IHRvIGltcHJvdmUgZXJyb3IgbWVzc2FnZXMKKy8vIHZpYSAnZW5hYmxlX2lmJyB3aGVuIGNhbGxpbmcgbWV0aG9kcyB3aXRoIGluY29ycmVjdCB0eXBlcy4gIEp1c3QKKy8vIHByZXRlbmQgYWxsIHR5cGVzIGFyZSBhbGxvd2VkIHNvIHdlIGNhbiBhdCBsZWFzdCBjb21waWxlIHZhbGlkIGNvZGUuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBpc19wYXRoYWJsZSA6IHN0ZDo6dHJ1ZV90eXBlCit7Cit9OworIyAgZWxzZQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfcGF0aGFibGUKKyAgOiBib29sX2NvbnN0YW50PGlzX3BhdGhhYmxlX3N0cmluZzxUPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgIGlzX3BhdGhhYmxlX2NoYXJfYXJyYXk8VD46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICBpc19wYXRoYWJsZV9pdGVyYXRvcjxUPjo6dmFsdWU+Cit7Cit9OworIyAgZW5kaWYKK30KKworY2xhc3MgcGF0aAoreworICB1c2luZyBwYXRoX3R5cGUgPSBzdGQ6OnN0cmluZzsKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlPgorICB1c2luZyBlbmFibGVfaWZfcGF0aGFibGUgPQorICAgIGVuYWJsZV9pZl90PGludGVybmFsczo6aXNfcGF0aGFibGU8U291cmNlPjo6dmFsdWUsIHBhdGgmPjsKKworICBlbnVtIGNsYXNzIGZpbGVuYW1lX2ZyYWdtZW50IDogdW5zaWduZWQgY2hhcgorICB7CisgICAgc3RlbSwKKyAgICBleHRlbnNpb24KKyAgfTsKKworcHVibGljOgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisgIHVzaW5nIHZhbHVlX3R5cGUgPSB3Y2hhcl90OworIyAgZWxzZQorICB1c2luZyB2YWx1ZV90eXBlID0gY2hhcjsKKyMgIGVuZGlmCisgIHVzaW5nIHN0cmluZ190eXBlID0gc3RkOjpiYXNpY19zdHJpbmc8dmFsdWVfdHlwZT47CisKKyAgY2xhc3MgaXRlcmF0b3I7CisgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gaXRlcmF0b3I7CisKKyAgZW51bSBmb3JtYXQgOiB1bnNpZ25lZCBjaGFyCisgIHsKKyAgICBhdXRvX2Zvcm1hdCwKKyAgICBuYXRpdmVfZm9ybWF0LAorICAgIGdlbmVyaWNfZm9ybWF0CisgIH07CisKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICBzdGF0aWMgY29uc3RleHByIHZhbHVlX3R5cGUgcHJlZmVycmVkX3NlcGFyYXRvciA9IEwnXFwnOworIyAgZWxzZQorICBzdGF0aWMgY29uc3RleHByIHZhbHVlX3R5cGUgcHJlZmVycmVkX3NlcGFyYXRvciA9ICcvJzsKKyMgIGVuZGlmCisKKyAgLy8gQ29uc3RydWN0b3JzCisgIC8vID09PT09PT09PT09PQorICBwYXRoKCkgbm9leGNlcHQge30KKyAgcGF0aChjb25zdCBwYXRoJiBwKQorICAgIDogcGF0aF8ocC5wYXRoXykKKyAgeworICB9CisgIHBhdGgocGF0aCYmIHApIG5vZXhjZXB0CisgICAgOiBwYXRoXyhzdGQ6Om1vdmUocC5wYXRoXykpCisgIHsKKyAgfQorICBwYXRoKHN0cmluZ190eXBlJiYgc291cmNlLCBmb3JtYXQgZm10ID0gYXV0b19mb3JtYXQpCisgIHsKKyAgICAodm9pZClmbXQ7CisgICAgaW50ZXJuYWxzOjpzb3VyY2VfY29udmVydGVyPHZhbHVlX3R5cGUsIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnNldF9zb3VyY2UoCisgICAgICB0aGlzLT5wYXRoXywgc3RkOjptb3ZlKHNvdXJjZSkpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBTb3VyY2UsIHR5cGVuYW1lID0gZW5hYmxlX2lmX3BhdGhhYmxlPFNvdXJjZT4+CisgIHBhdGgoY29uc3QgU291cmNlJiBzb3VyY2UsIGZvcm1hdCBmbXQgPSBhdXRvX2Zvcm1hdCkKKyAgeworICAgICh2b2lkKWZtdDsKKyAgICBpbnRlcm5hbHM6OnNvdXJjZV9jb252ZXJ0ZXI8CisgICAgICB0eXBlbmFtZSBpbnRlcm5hbHM6OnNvdXJjZV90cmFpdHM8U291cmNlPjo6dmFsdWVfdHlwZSwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OmFwcGVuZF9zb3VyY2UodGhpcy0+cGF0aF8sIHNvdXJjZSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgoY29uc3QgSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QsIGZvcm1hdCBmbXQgPSBhdXRvX2Zvcm1hdCkKKyAgeworICAgICh2b2lkKWZtdDsKKyAgICBpbnRlcm5hbHM6OnNvdXJjZV9jb252ZXJ0ZXI8CisgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisgICAgICBwYXRoX3R5cGU6OnZhbHVlX3R5cGU+OjphcHBlbmRfcmFuZ2UodGhpcy0+cGF0aF8sIGZpcnN0LCBsYXN0KTsKKyAgfQorCisgIH5wYXRoKCkgPSBkZWZhdWx0OworCisgIC8vIEFzc2lnbm1lbnRzCisgIC8vID09PT09PT09PT09CisgIHBhdGgmIG9wZXJhdG9yPShjb25zdCBwYXRoJiBwKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnApIHsKKyAgICAgIHRoaXMtPnBhdGhfID0gcC5wYXRoXzsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHBhdGgmIG9wZXJhdG9yPShwYXRoJiYgcCkgbm9leGNlcHQKKyAgeworICAgIGlmICh0aGlzICE9ICZwKSB7CisgICAgICB0aGlzLT5wYXRoXyA9IHN0ZDo6bW92ZShwLnBhdGhfKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHBhdGgmIG9wZXJhdG9yPShzdHJpbmdfdHlwZSYmIHNvdXJjZSkgeyByZXR1cm4gdGhpcy0+YXNzaWduKHNvdXJjZSk7IH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgPSBlbmFibGVfaWZfcGF0aGFibGU8U291cmNlPj4KKyAgcGF0aCYgb3BlcmF0b3I9KGNvbnN0IFNvdXJjZSYgc291cmNlKQorICB7CisgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihzb3VyY2UpOworICB9CisKKyAgcGF0aCYgYXNzaWduKHN0cmluZ190eXBlJiYgc291cmNlKQorICB7CisgICAgaW50ZXJuYWxzOjpzb3VyY2VfY29udmVydGVyPHZhbHVlX3R5cGUsIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnNldF9zb3VyY2UoCisgICAgICB0aGlzLT5wYXRoXywgc3RkOjptb3ZlKHNvdXJjZSkpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxTb3VyY2U+PgorICBwYXRoJiBhc3NpZ24oY29uc3QgU291cmNlJiBzb3VyY2UpCisgIHsKKyAgICB0aGlzLT5wYXRoXy5jbGVhcigpOworICAgIGludGVybmFsczo6c291cmNlX2NvbnZlcnRlcjwKKyAgICAgIHR5cGVuYW1lIGludGVybmFsczo6c291cmNlX3RyYWl0czxTb3VyY2U+Ojp2YWx1ZV90eXBlLAorICAgICAgcGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6YXBwZW5kX3NvdXJjZSh0aGlzLT5wYXRoXywgc291cmNlKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgmIGFzc2lnbihJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkKKyAgeworICAgIHRoaXMtPnBhdGhfLmNsZWFyKCk7CisgICAgaW50ZXJuYWxzOjpzb3VyY2VfY29udmVydGVyPAorICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorICAgICAgcGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6YXBwZW5kX3JhbmdlKHRoaXMtPnBhdGhfLCBmaXJzdCwgbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gQ29uY2F0ZW5hdGlvbgorICAvLyA9PT09PT09PT09PT09CisgIHBhdGgmIG9wZXJhdG9yLz0oY29uc3QgcGF0aCYgcCk7CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgPSBlbmFibGVfaWZfcGF0aGFibGU8U291cmNlPj4KKyAgcGF0aCYgYXBwZW5kKGNvbnN0IFNvdXJjZSYgc291cmNlKQorICB7CisgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yLz0ocGF0aChzb3VyY2UpKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlPgorICBwYXRoJiBvcGVyYXRvci89KGNvbnN0IFNvdXJjZSYgc291cmNlKQorICB7CisgICAgcmV0dXJuIHRoaXMtPmFwcGVuZChzb3VyY2UpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgmIGFwcGVuZChJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkKKyAgeworICAgIHJldHVybiB0aGlzLT5vcGVyYXRvci89KHBhdGgoZmlyc3QsIGxhc3QpKTsKKyAgfQorCisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3QgcGF0aCYgcCkKKyAgeworICAgIHRoaXMtPnBhdGhfICs9IHAucGF0aF87CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3Qgc3RyaW5nX3R5cGUmIHN0cikKKyAgeworICAgIHRoaXMtPnBhdGhfICs9CisgICAgICBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8dmFsdWVfdHlwZT46OnRvPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4oc3RyKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgcGF0aCYgb3BlcmF0b3IrPShjbTo6c3RyaW5nX3ZpZXcgc3RyKQorICB7CisgICAgdGhpcy0+cGF0aF8uYXBwZW5kKHN0ci5iZWdpbigpLCBzdHIuZW5kKCkpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorICBwYXRoJiBvcGVyYXRvcis9KGNvbnN0IHZhbHVlX3R5cGUqIHN0cikKKyAgeworICAgIHRoaXMtPnBhdGhfICs9CisgICAgICBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8dmFsdWVfdHlwZT46OnRvPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4oc3RyKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCB2YWx1ZV90eXBlIGMpCisgIHsKKyAgICB0aGlzLT5wYXRoXyArPQorICAgICAgaW50ZXJuYWxzOjpzdHJpbmdfY29udmVydGVyPHZhbHVlX3R5cGU+Ojp0bzxwYXRoX3R5cGU6OnZhbHVlX3R5cGU+KGMpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxTb3VyY2U+PgorICBwYXRoJiBjb25jYXQoY29uc3QgU291cmNlJiBzb3VyY2UpCisgIHsKKyAgICBpbnRlcm5hbHM6OnNvdXJjZV9jb252ZXJ0ZXI8CisgICAgICB0eXBlbmFtZSBpbnRlcm5hbHM6OnNvdXJjZV90cmFpdHM8U291cmNlPjo6dmFsdWVfdHlwZSwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OmFwcGVuZF9zb3VyY2UodGhpcy0+cGF0aF8sIHNvdXJjZSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBTb3VyY2U+CisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3QgU291cmNlJiBzb3VyY2UpCisgIHsKKyAgICByZXR1cm4gdGhpcy0+Y29uY2F0KHNvdXJjZSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgmIGNvbmNhdChJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkKKyAgeworICAgIGludGVybmFsczo6c291cmNlX2NvbnZlcnRlcjwKKyAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OmFwcGVuZF9yYW5nZSh0aGlzLT5wYXRoXywgZmlyc3QsIGxhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIE1vZGlmaWVycworICAvLyA9PT09PT09PT0KKyAgdm9pZCBjbGVhcigpIG5vZXhjZXB0IHsgdGhpcy0+cGF0aF8uY2xlYXIoKTsgfQorCisgIHBhdGgmIG1ha2VfcHJlZmVycmVkKCkKKyAgeworIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisgICAgc3RkOjpyZXBsYWNlKAorICAgICAgdGhpcy0+cGF0aF8uYmVnaW4oKSwgdGhpcy0+cGF0aF8uZW5kKCksICcvJywKKyAgICAgIHN0YXRpY19jYXN0PHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4odGhpcy0+cHJlZmVycmVkX3NlcGFyYXRvcikpOworIyAgZW5kaWYKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBwYXRoJiByZW1vdmVfZmlsZW5hbWUoKQorICB7CisgICAgYXV0byBmbmFtZSA9IHRoaXMtPmdldF9maWxlbmFtZSgpOworICAgIGlmICghZm5hbWUuZW1wdHkoKSkgeworICAgICAgdGhpcy0+cGF0aF8uZXJhc2UoZm5hbWUuZGF0YSgpIC0gdGhpcy0+cGF0aF8uZGF0YSgpKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgcGF0aCYgcmVwbGFjZV9maWxlbmFtZShjb25zdCBwYXRoJiByZXBsYWNlbWVudCkKKyAgeworICAgIHRoaXMtPnJlbW92ZV9maWxlbmFtZSgpOworICAgIHRoaXMtPm9wZXJhdG9yLz0ocmVwbGFjZW1lbnQpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHBhdGgmIHJlcGxhY2VfZXh0ZW5zaW9uKGNvbnN0IHBhdGgmIHJlcGxhY2VtZW50ID0gcGF0aCgpKQorICB7CisgICAgYXV0byBleHQgPSB0aGlzLT5nZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQ6OmV4dGVuc2lvbik7CisgICAgaWYgKCFleHQuZW1wdHkoKSkgeworICAgICAgdGhpcy0+cGF0aF8uZXJhc2UoZXh0LmRhdGEoKSAtIHRoaXMtPnBhdGhfLmRhdGEoKSk7CisgICAgfQorICAgIGlmICghcmVwbGFjZW1lbnQucGF0aF8uZW1wdHkoKSkgeworICAgICAgaWYgKHJlcGxhY2VtZW50LnBhdGhfWzBdICE9ICcuJykgeworICAgICAgICB0aGlzLT5wYXRoXyArPSAnLic7CisgICAgICB9CisgICAgICB0aGlzLT5wYXRoXy5hcHBlbmQocmVwbGFjZW1lbnQucGF0aF8pOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB2b2lkIHN3YXAocGF0aCYgb3RoZXIpIG5vZXhjZXB0IHsgdGhpcy0+cGF0aF8uc3dhcChvdGhlci5wYXRoXyk7IH0KKworICAvLyBGb3JtYXQgb2JzZXJ2ZXJzCisgIC8vID09PT09PT09PT09PT09PT0KKyAgY29uc3Qgc3RyaW5nX3R5cGUmIG5hdGl2ZSgpIGNvbnN0IG5vZXhjZXB0CisgIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIHRoaXMtPm5hdGl2ZV9wYXRoXyA9IGludGVybmFsczo6c3RyaW5nX2NvbnZlcnRlcjwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnRvPHN0cmluZ190eXBlOjp2YWx1ZV90eXBlPih0aGlzLT5wYXRoXyk7CisgICAgcmV0dXJuIHRoaXMtPm5hdGl2ZV9wYXRoXzsKKyMgIGVsc2UKKyAgICByZXR1cm4gdGhpcy0+cGF0aF87CisjICBlbmRpZgorICB9CisgIGNvbnN0IHZhbHVlX3R5cGUqIGNfc3RyKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+bmF0aXZlKCkuY19zdHIoKTsgfQorICBvcGVyYXRvciBzdHJpbmdfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPm5hdGl2ZSgpOyB9CisKKyAgdGVtcGxhdGUgPAorICAgIHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFRyYWl0cyA9IHN0ZDo6Y2hhcl90cmFpdHM8Q2hhcj4sCisgICAgdHlwZW5hbWUgQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxDaGFyPiwKKyAgICBjbTo6ZW5hYmxlX2lmX3Q8KHN0ZDo6aXNfc2FtZTxDaGFyLCBjaGFyPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxUcmFpdHMsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4+Ojp2YWx1ZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19zYW1lPENoYXIsIHdjaGFyX3Q+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VHJhaXRzLCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+Pjo6dmFsdWUpLAorICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMT4KKyAgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4gc3RyaW5nKGNvbnN0IEFsbG9jJiBhID0gQWxsb2MoKSkgY29uc3QKKyAgeworICAgIHJldHVybiBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8cGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6dG88Q2hhciwgVHJhaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2M+KAorICAgICAgdGhpcy0+cGF0aF8sIGEpOworICB9CisgIGNvbnN0IHN0ZDo6c3RyaW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnBhdGhfOyB9CisgIHN0ZDo6d3N0cmluZyB3c3RyaW5nKCkgY29uc3QKKyAgeworICAgIHN0ZDo6c3RyaW5nIG91dCA9IHRoaXMtPnN0cmluZygpOworICAgIHJldHVybiBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8cGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6dG88CisgICAgICBzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KG91dCk7CisgIH0KKworICB0ZW1wbGF0ZSA8CisgICAgdHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzID0gc3RkOjpjaGFyX3RyYWl0czxDaGFyPiwKKyAgICB0eXBlbmFtZSBBbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPENoYXI+LAorICAgIGNtOjplbmFibGVfaWZfdDwoc3RkOjppc19zYW1lPENoYXIsIGNoYXI+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPFRyYWl0cywgc3RkOjpjaGFyX3RyYWl0czxjaGFyPj46OnZhbHVlKSB8fAorICAgICAgICAgICAgICAgICAgICAgIChzdGQ6OmlzX3NhbWU8Q2hhciwgd2NoYXJfdD46OnZhbHVlICYmCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxUcmFpdHMsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4+Ojp2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgIGludD4gPSAxPgorICBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdHMsIEFsbG9jPiBnZW5lcmljX3N0cmluZygKKyAgICBjb25zdCBBbGxvYyYgYSA9IEFsbG9jKCkpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gaW50ZXJuYWxzOjpzdHJpbmdfY29udmVydGVyPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnRvPENoYXIsIFRyYWl0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jPigKKyAgICAgIHRoaXMtPmdldF9nZW5lcmljKCksIGEpOworICB9CisgIHN0ZDo6c3RyaW5nIGdlbmVyaWNfc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Z2V0X2dlbmVyaWMoKTsgfQorICBzdGQ6OndzdHJpbmcgZ2VuZXJpY193c3RyaW5nKCkgY29uc3QKKyAgeworICAgIGF1dG8gZGVzdCA9IHRoaXMtPmdlbmVyaWNfc3RyaW5nKCk7CisgICAgcmV0dXJuIGludGVybmFsczo6c3RyaW5nX2NvbnZlcnRlcjxwYXRoX3R5cGU6OnZhbHVlX3R5cGU+Ojp0bzwKKyAgICAgIHN0ZDo6d3N0cmluZzo6dmFsdWVfdHlwZT4oZGVzdCk7CisgIH0KKworICAvLyBDb21wYXJlCisgIC8vID09PT09PT0KKyAgaW50IGNvbXBhcmUoY29uc3QgcGF0aCYgcCkgY29uc3Qgbm9leGNlcHQKKyAgeworICAgIHJldHVybiB0aGlzLT5jb21wYXJlX3BhdGgocC5wYXRoXyk7CisgIH0KKyAgaW50IGNvbXBhcmUoY29uc3Qgc3RyaW5nX3R5cGUmIHN0cikgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5jb21wYXJlX3BhdGgoCisgICAgICBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8dmFsdWVfdHlwZT46OnRvPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4oc3RyKSk7CisgIH0KKyAgaW50IGNvbXBhcmUoY29uc3QgdmFsdWVfdHlwZSogc3RyKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPmNvbXBhcmVfcGF0aCgKKyAgICAgIGludGVybmFsczo6c3RyaW5nX2NvbnZlcnRlcjx2YWx1ZV90eXBlPjo6dG88cGF0aF90eXBlOjp2YWx1ZV90eXBlPihzdHIpKTsKKyAgfQorICBpbnQgY29tcGFyZShjbTo6c3RyaW5nX3ZpZXcgc3RyKSBjb25zdCB7IHJldHVybiB0aGlzLT5jb21wYXJlX3BhdGgoc3RyKTsgfQorCisgIC8vIEdlbmVyYXRpb24KKyAgLy8gPT09PT09PT09PQorICBwYXRoIGxleGljYWxseV9ub3JtYWwoKSBjb25zdDsKKworICBwYXRoIGxleGljYWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBiYXNlKSBjb25zdDsKKworICBwYXRoIGxleGljYWxseV9wcm94aW1hdGUoY29uc3QgcGF0aCYgYmFzZSkgY29uc3QKKyAgeworICAgIHBhdGggcmVzdWx0ID0gdGhpcy0+bGV4aWNhbGx5X3JlbGF0aXZlKGJhc2UpOworICAgIHJldHVybiByZXN1bHQuZW1wdHkoKSA/ICp0aGlzIDogcmVzdWx0OworICB9CisKKyAgLy8gRGVjb21wb3NpdGlvbgorICAvLyA9PT09PT09PT09PT09CisgIHBhdGggcm9vdF9uYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0X3Jvb3RfbmFtZSgpOyB9CisKKyAgcGF0aCByb290X2RpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmdldF9yb290X2RpcmVjdG9yeSgpOyB9CisKKyAgcGF0aCByb290X3BhdGgoKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPnJvb3RfbmFtZSgpLmFwcGVuZCh0aGlzLT5nZXRfcm9vdF9kaXJlY3RvcnkoKSk7CisgIH0KKworICBwYXRoIHJlbGF0aXZlX3BhdGgoKSBjb25zdCB7IHJldHVybiB0aGlzLT5nZXRfcmVsYXRpdmVfcGF0aCgpOyB9CisKKyAgcGF0aCBwYXJlbnRfcGF0aCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmdldF9wYXJlbnRfcGF0aCgpOyB9CisKKyAgcGF0aCBmaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmdldF9maWxlbmFtZSgpOyB9CisKKyAgcGF0aCBzdGVtKCkgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5nZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQ6OnN0ZW0pOworICB9CisgIHBhdGggZXh0ZW5zaW9uKCkgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5nZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQ6OmV4dGVuc2lvbik7CisgIH0KKworICAvLyBRdWVyaWVzCisgIC8vID09PT09PT0KKyAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHRoaXMtPnBhdGhfLmVtcHR5KCk7IH0KKworICBib29sIGhhc19yb290X25hbWUoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+Z2V0X3Jvb3RfbmFtZSgpLmVtcHR5KCk7IH0KKworICBib29sIGhhc19yb290X2RpcmVjdG9yeSgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gIXRoaXMtPmdldF9yb290X2RpcmVjdG9yeSgpLmVtcHR5KCk7CisgIH0KKworICBib29sIGhhc19yb290X3BhdGgoKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPmhhc19yb290X25hbWUoKSB8fCB0aGlzLT5oYXNfcm9vdF9kaXJlY3RvcnkoKTsKKyAgfQorCisgIGJvb2wgaGFzX3JlbGF0aXZlX3BhdGgoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+Z2V0X3JlbGF0aXZlX3BhdGgoKS5lbXB0eSgpOyB9CisKKyAgYm9vbCBoYXNfcGFyZW50X3BhdGgoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+Z2V0X3BhcmVudF9wYXRoKCkuZW1wdHkoKTsgfQorCisgIGJvb2wgaGFzX2ZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gIXRoaXMtPmdldF9maWxlbmFtZSgpLmVtcHR5KCk7IH0KKworICBib29sIGhhc19zdGVtKCkgY29uc3QKKyAgeworICAgIHJldHVybiAhdGhpcy0+Z2V0X2ZpbGVuYW1lX2ZyYWdtZW50KGZpbGVuYW1lX2ZyYWdtZW50OjpzdGVtKS5lbXB0eSgpOworICB9CisgIGJvb2wgaGFzX2V4dGVuc2lvbigpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gIXRoaXMtPmdldF9maWxlbmFtZV9mcmFnbWVudChmaWxlbmFtZV9mcmFnbWVudDo6ZXh0ZW5zaW9uKS5lbXB0eSgpOworICB9CisKKyAgYm9vbCBpc19hYnNvbHV0ZSgpIGNvbnN0CisgIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIHJldHVybiB0aGlzLT5oYXNfcm9vdF9uYW1lKCkgJiYgdGhpcy0+aGFzX3Jvb3RfZGlyZWN0b3J5KCk7CisjICBlbHNlCisgICAgLy8gRm9yIENZR1dJTiwgcm9vdF9uYW1lIChpLmUuIC8vaG9zdCBvciAvY3lnZHJpdmUveCkgaXMgbm90IGNvbnNpZGVyZWQuCisgICAgLy8gU2FtZSBhcyBjdXJyZW50IEdOVSBnKysgaW1wbGVtZW50YXRpb24gKDkuMykuCisgICAgcmV0dXJuIHRoaXMtPmhhc19yb290X2RpcmVjdG9yeSgpOworIyAgZW5kaWYKKyAgfQorCisgIGJvb2wgaXNfcmVsYXRpdmUoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+aXNfYWJzb2x1dGUoKTsgfQorCisgIC8vIEl0ZXJhdG9ycworICAvLyA9PT09PT09PT0KKyAgaW5saW5lIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgIGlubGluZSBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICAvLyBOb24tbWVtYmVycworICAvLyA9PT09PT09PT09PQorICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQKKyAgeworICAgIHJldHVybiBsaHMuY29tcGFyZShyaHMpID09IDA7CisgIH0KKyAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSAhPSAwOworICB9CisgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA8IDA7CisgIH0KKyAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA8PSAwOworICB9CisgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA+IDA7CisgIH0KKyAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA+PSAwOworICB9CisKKyAgZnJpZW5kIGlubGluZSBwYXRoIG9wZXJhdG9yLyhjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykKKyAgeworICAgIHBhdGggcmVzdWx0KGxocyk7CisgICAgcmVzdWx0IC89IHJoczsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzPgorICBmcmllbmQgaW5saW5lIGNtOjplbmFibGVfaWZfdDwKKyAgICAoc3RkOjppc19zYW1lPENoYXIsIHBhdGg6OnZhbHVlX3R5cGU+Ojp2YWx1ZSAmJgorICAgICBzdGQ6OmlzX3NhbWU8VHJhaXRzLCBzdGQ6OmNoYXJfdHJhaXRzPHBhdGg6OnZhbHVlX3R5cGU+Pjo6dmFsdWUpIHx8CisgICAgICAoc3RkOjppc19zYW1lPENoYXIsIHBhdGg6OnBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnZhbHVlICYmCisgICAgICAgc3RkOjppc19zYW1lPFRyYWl0cywKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpjaGFyX3RyYWl0czxwYXRoOjpwYXRoX3R5cGU6OnZhbHVlX3R5cGU+Pjo6dmFsdWUpLAorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyLCBUcmFpdHM+Jj4KKyAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiYgb3MsIGNvbnN0IHBhdGgmIHApCisgIHsKKyAgICBvcyA8PCBjbTo6cXVvdGVkKHAuc3RyaW5nPENoYXIsIFRyYWl0cz4oKSk7CisgICAgcmV0dXJuIG9zOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFRyYWl0cz4KKyAgZnJpZW5kIGlubGluZSBjbTo6ZW5hYmxlX2lmX3Q8CisgICAgKHN0ZDo6aXNfc2FtZTxDaGFyLCBwYXRoOjp2YWx1ZV90eXBlPjo6dmFsdWUgJiYKKyAgICAgc3RkOjppc19zYW1lPFRyYWl0cywgc3RkOjpjaGFyX3RyYWl0czxwYXRoOjp2YWx1ZV90eXBlPj46OnZhbHVlKSB8fAorICAgICAgKHN0ZDo6aXNfc2FtZTxDaGFyLCBwYXRoOjpwYXRoX3R5cGU6OnZhbHVlX3R5cGU+Ojp2YWx1ZSAmJgorICAgICAgIHN0ZDo6aXNfc2FtZTxUcmFpdHMsCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2hhcl90cmFpdHM8cGF0aDo6cGF0aF90eXBlOjp2YWx1ZV90eXBlPj46OnZhbHVlKSwKKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhciwgVHJhaXRzPiY+CisgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPENoYXIsIFRyYWl0cz4mIGlzLCBwYXRoJiBwKQorICB7CisgICAgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzPiB0bXA7CisgICAgaXMgPj4gY206OnF1b3RlZCh0bXApOworICAgIHAgPSB0bXA7CisgICAgcmV0dXJuIGlzOworICB9CisKK3ByaXZhdGU6CisgIGZyaWVuZCBjbGFzcyBpdGVyYXRvcjsKKyAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY29uc3QgcGF0aCYgcCkgbm9leGNlcHQ7CisKKyAgcGF0aF90eXBlIGdldF9nZW5lcmljKCkgY29uc3Q7CisKKyAgY206OnN0cmluZ192aWV3IGdldF9yb290X25hbWUoKSBjb25zdDsKKyAgY206OnN0cmluZ192aWV3IGdldF9yb290X2RpcmVjdG9yeSgpIGNvbnN0OworICBjbTo6c3RyaW5nX3ZpZXcgZ2V0X3JlbGF0aXZlX3BhdGgoKSBjb25zdDsKKyAgY206OnN0cmluZ192aWV3IGdldF9wYXJlbnRfcGF0aCgpIGNvbnN0OworICBjbTo6c3RyaW5nX3ZpZXcgZ2V0X2ZpbGVuYW1lKCkgY29uc3Q7CisgIGNtOjpzdHJpbmdfdmlldyBnZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQgZnJhZ21lbnQpIGNvbnN0OworCisgIGludCBjb21wYXJlX3BhdGgoY206OnN0cmluZ192aWV3IHN0cikgY29uc3Q7CisKKyAgcGF0aF90eXBlIHBhdGhfOworIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisgIG11dGFibGUgc3RyaW5nX3R5cGUgbmF0aXZlX3BhdGhfOworIyAgZW5kaWYKK307CisKK2NsYXNzIHBhdGg6Oml0ZXJhdG9yCit7CitwdWJsaWM6CisgIHVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZzsKKworICB1c2luZyB2YWx1ZV90eXBlID0gcGF0aDsKKyAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHBvaW50ZXIgPSBjb25zdCBwYXRoKjsKKyAgdXNpbmcgcmVmZXJlbmNlID0gY29uc3QgcGF0aCY7CisKKyAgaXRlcmF0b3IoKTsKKyAgaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIG90aGVyKTsKKworICB+aXRlcmF0b3IoKTsKKworICBpdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcik7CisKKyAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnBhdGhfZWxlbWVudF87IH0KKworICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmdGhpcy0+cGF0aF9lbGVtZW50XzsgfQorCisgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisKKyAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgIHsKKyAgICBpdGVyYXRvciBpdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0b3IrKygpOworICAgIHJldHVybiBpdDsKKyAgfQorCisgIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCk7CisKKyAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCisgIHsKKyAgICBpdGVyYXRvciBpdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0b3ItLSgpOworICAgIHJldHVybiBpdDsKKyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgcGF0aDsKKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYsIGNvbnN0IGl0ZXJhdG9yJik7CisKKyAgaXRlcmF0b3IoY29uc3QgcGF0aCogcCwgYm9vbCBhdF9lbmQgPSBmYWxzZSk7CisKKyAgY29uc3QgcGF0aCogcGF0aF87CisgIHN0ZDo6dW5pcXVlX3B0cjxpbnRlcm5hbHM6OnBhdGhfcGFyc2VyPiBwYXJzZXJfOworICBwYXRoIHBhdGhfZWxlbWVudF87Cit9OworCitpbmxpbmUgcGF0aDo6aXRlcmF0b3IgcGF0aDo6YmVnaW4oKSBjb25zdAoreworICByZXR1cm4gaXRlcmF0b3IodGhpcyk7Cit9CitpbmxpbmUgcGF0aDo6aXRlcmF0b3IgcGF0aDo6ZW5kKCkgY29uc3QKK3sKKyAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHRydWUpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIGxocywgY29uc3QgcGF0aDo6aXRlcmF0b3ImIHJocyk7CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIGxocywgY29uc3QgcGF0aDo6aXRlcmF0b3ImIHJocykKK3sKKyAgcmV0dXJuICEobGhzID09IHJocyk7Cit9CisKKy8vIE5vbi1tZW1iZXIgZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PQoraW5saW5lIHZvaWQgc3dhcChwYXRoJiBsaHMsIHBhdGgmIHJocykgbm9leGNlcHQKK3sKKyAgbGhzLnN3YXAocmhzKTsKK30KKworc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdDsKKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIGZpbGVzeXN0ZW0KK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9pb21hbmlwIGIvVXRpbGl0aWVzL3N0ZC9jbS9pb21hbmlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjg1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2lvbWFuaXAKQEAgLTAsMCArMSwxODMgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtX2lvbWFuaXAKKyNkZWZpbmUgY21faW9tYW5pcAorCisjaW5jbHVkZSA8aW9tYW5pcD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2lmIF9fY3BsdXNwbHVzIDwgMjAxNDAyTCB8fCBkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPCAyMDE0MDJMCisjICBpbmNsdWRlIDxpb3M+CisjICBpbmNsdWRlIDxpb3N0cmVhbT4KKyMgIGluY2x1ZGUgPHNzdHJlYW0+CisjICBpbmNsdWRlIDxzdHJpbmc+CisjICBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNlbmRpZgorI2lmIF9fY3BsdXNwbHVzIDwgMjAxNzAzTCB8fCBkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPCAyMDE3MDNMCisjICBpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNlbmRpZgorCituYW1lc3BhY2UgY20geworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTCB8fCBkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPj0gMjAxNDAyTAorCit1c2luZyBzdGQ6OnF1b3RlZDsKKworIyAgaWYgX19jcGx1c3BsdXMgPCAyMDE3MDNMIHx8IGRlZmluZWQoX01TVkNfTEFORykgJiYgX01TVkNfTEFORyA8IDIwMTcwM0wKKworaW5saW5lIGF1dG8gcXVvdGVkKGNtOjpzdHJpbmdfdmlldyBzdHIsIGNoYXIgZGVsaW0gPSAnIicsIGNoYXIgZXNjYXBlID0gJ1xcJykKK3sKKyAgcmV0dXJuIHN0ZDo6cXVvdGVkKHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihzdHIpLCBkZWxpbSwgZXNjYXBlKTsKK30KKworIyAgZW5kaWYKKworI2Vsc2UKKworbmFtZXNwYWNlIGludGVybmFscyB7CisKKy8vIFN0cnVjdCBmb3IgZGVsaW1pdGVkIHN0cmluZ3MuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nLCB0eXBlbmFtZSBDaGFyPgorc3RydWN0IHF1b3RlZF9zdHJpbmcKK3sKKyAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3JlZmVyZW5jZTxTdHJpbmc+Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFN0cmluZz46OnZhbHVlLAorICAgICAgICAgICAgICAgICJTdHJpbmcgdHlwZSBtdXN0IGJlIHBvaW50ZXIgb3IgcmVmZXJlbmNlIik7CisKKyAgcXVvdGVkX3N0cmluZyhTdHJpbmcgc3RyLCBDaGFyIGRlbCwgQ2hhciBlc2MpCisgICAgOiBzdHJpbmdfKHN0cikKKyAgICAsIGRlbGltX3sgZGVsIH0KKyAgICAsIGVzY2FwZV97IGVzYyB9CisgIHsKKyAgfQorCisgIHF1b3RlZF9zdHJpbmcmIG9wZXJhdG9yPShxdW90ZWRfc3RyaW5nJikgPSBkZWxldGU7CisKKyAgU3RyaW5nIHN0cmluZ187CisgIENoYXIgZGVsaW1fOworICBDaGFyIGVzY2FwZV87Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IHF1b3RlZF9zdHJpbmc8Y206OnN0cmluZ192aWV3LCBjaGFyPgoreworICBxdW90ZWRfc3RyaW5nKGNtOjpzdHJpbmdfdmlldyBzdHIsIGNoYXIgZGVsLCBjaGFyIGVzYykKKyAgICA6IHN0cmluZ18oc3RyKQorICAgICwgZGVsaW1feyBkZWwgfQorICAgICwgZXNjYXBlX3sgZXNjIH0KKyAgeworICB9CisKKyAgcXVvdGVkX3N0cmluZyYgb3BlcmF0b3I9KHF1b3RlZF9zdHJpbmcmKSA9IGRlbGV0ZTsKKworICBjbTo6c3RyaW5nX3ZpZXcgc3RyaW5nXzsKKyAgY2hhciBkZWxpbV87CisgIGNoYXIgZXNjYXBlXzsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHM+CitzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiYgb3BlcmF0b3I8PCgKKyAgc3RkOjpiYXNpY19vc3RyZWFtPENoYXIsIFRyYWl0cz4mIG9zLAorICBjb25zdCBxdW90ZWRfc3RyaW5nPGNvbnN0IENoYXIqLCBDaGFyPiYgc3RyKQoreworICBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Q2hhciwgVHJhaXRzPiBvc3RyOworICBvc3RyIDw8IHN0ci5kZWxpbV87CisgIGZvciAoY29uc3QgQ2hhciogYyA9IHN0ci5zdHJpbmdfOyAqYzsgKytjKSB7CisgICAgaWYgKCpjID09IHN0ci5kZWxpbV8gfHwgKmMgPT0gc3RyLmVzY2FwZV8pCisgICAgICBvc3RyIDw8IHN0ci5lc2NhcGVfOworICAgIG9zdHIgPDwgKmM7CisgIH0KKyAgb3N0ciA8PCBzdHIuZGVsaW1fOworCisgIHJldHVybiBvcyA8PCBvc3RyLnN0cigpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBTdHJpbmc+CitzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiYgb3BlcmF0b3I8PCgKKyAgc3RkOjpiYXNpY19vc3RyZWFtPENoYXIsIFRyYWl0cz4mIG9zLCBjb25zdCBxdW90ZWRfc3RyaW5nPFN0cmluZywgQ2hhcj4mIHN0cikKK3sKKyAgc3RkOjpiYXNpY19vc3RyaW5nc3RyZWFtPENoYXIsIFRyYWl0cz4gb3N0cjsKKyAgb3N0ciA8PCBzdHIuZGVsaW1fOworICBmb3IgKGF1dG8gYyA6IHN0ci5zdHJpbmdfKSB7CisgICAgaWYgKGMgPT0gc3RyLmRlbGltXyB8fCBjID09IHN0ci5lc2NhcGVfKQorICAgICAgb3N0ciA8PCBzdHIuZXNjYXBlXzsKKyAgICBvc3RyIDw8IGM7CisgIH0KKyAgb3N0ciA8PCBzdHIuZGVsaW1fOworCisgIHJldHVybiBvcyA8PCBvc3RyLnN0cigpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KK3N0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyLCBUcmFpdHM+JiBvcGVyYXRvcj4+KAorICBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhciwgVHJhaXRzPiYgaXMsCisgIGNvbnN0IHF1b3RlZF9zdHJpbmc8c3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mLCBDaGFyPiYgc3RyKQoreworICBDaGFyIGM7CisgIGlzID4+IGM7CisgIGlmICghaXMuZ29vZCgpKQorICAgIHJldHVybiBpczsKKyAgaWYgKGMgIT0gc3RyLmRlbGltXykgeworICAgIGlzLnVuZ2V0KCk7CisgICAgaXMgPj4gc3RyLnN0cmluZ187CisgICAgcmV0dXJuIGlzOworICB9CisgIHN0ci5zdHJpbmdfLmNsZWFyKCk7CisgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIGZsYWdzID0KKyAgICBpcy5mbGFncyhpcy5mbGFncygpICYgfnN0ZDo6aW9zX2Jhc2U6OnNraXB3cyk7CisgIGRvIHsKKyAgICBpcyA+PiBjOworICAgIGlmICghaXMuZ29vZCgpKQorICAgICAgYnJlYWs7CisgICAgaWYgKGMgPT0gc3RyLmVzY2FwZV8pIHsKKyAgICAgIGlzID4+IGM7CisgICAgICBpZiAoIWlzLmdvb2QoKSkKKyAgICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChjID09IHN0ci5kZWxpbV8pCisgICAgICBicmVhazsKKyAgICBzdHIuc3RyaW5nXyArPSBjOworICB9IHdoaWxlICh0cnVlKTsKKyAgaXMuc2V0ZihmbGFncyk7CisKKyAgcmV0dXJuIGlzOworfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KK2lubGluZSBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8Y29uc3QgQ2hhciosIENoYXI+IHF1b3RlZCgKKyAgY29uc3QgQ2hhciogc3RyLCBDaGFyIGRlbGltID0gQ2hhcignIicpLCBDaGFyIGVzY2FwZSA9IENoYXIoJ1xcJykpCit7CisgIHJldHVybiBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8Y29uc3QgQ2hhciosIENoYXI+KHN0ciwgZGVsaW0sIGVzY2FwZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgoraW5saW5lIGludGVybmFsczo6cXVvdGVkX3N0cmluZzxjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdHMsIEFsbG9jPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXI+CitxdW90ZWQoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mIHN0ciwKKyAgICAgICBDaGFyIGRlbGltID0gQ2hhcignIicpLCBDaGFyIGVzY2FwZSA9IENoYXIoJ1xcJykpCit7CisgIHJldHVybiBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8CisgICAgY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mLCBDaGFyPihzdHIsIGRlbGltLCBlc2NhcGUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KK2lubGluZSBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8c3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mLCBDaGFyPgorcXVvdGVkKHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+JiBzdHIsIENoYXIgZGVsaW0gPSBDaGFyKCciJyksCisgICAgICAgQ2hhciBlc2NhcGUgPSBDaGFyKCdcXCcpKQoreworICByZXR1cm4gaW50ZXJuYWxzOjpxdW90ZWRfc3RyaW5nPHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyPihzdHIsIGRlbGltLCBlc2NhcGUpOworfQorCitpbmxpbmUgaW50ZXJuYWxzOjpxdW90ZWRfc3RyaW5nPGNtOjpzdHJpbmdfdmlldywgY2hhcj4gcXVvdGVkKAorICBjbTo6c3RyaW5nX3ZpZXcgc3RyLCBjaGFyIGRlbGltID0gJyInLCBjaGFyIGVzY2FwZSA9ICdcXCcpCit7CisgIHJldHVybiBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8Y206OnN0cmluZ192aWV3LCBjaGFyPihzdHIsIGRlbGltLCBlc2NhcGUpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL21lbW9yeSBiL1V0aWxpdGllcy9zdGQvY20vbWVtb3J5CmluZGV4IGRkMGY4MjIuLjU2MTFmNmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9zdGQvY20vbWVtb3J5CisrKyBiL1V0aWxpdGllcy9zdGQvY20vbWVtb3J5CkBAIC02LDcgKzYsMTAgQEAKICNpZm5kZWYgY21fbWVtb3J5CiAjZGVmaW5lIGNtX21lbW9yeQogCisjaW5jbHVkZSAiY21TVEwuaHh4IiAvLyBJV1lVIHByYWdtYToga2VlcAorCiAjaW5jbHVkZSA8bWVtb3J5PiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKICNpZiAhZGVmaW5lZChDTWFrZV9IQVZFX0NYWF9NQUtFX1VOSVFVRSkKICMgIGluY2x1ZGUgPGNzdGRkZWY+CiAjICBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vc2hhcmVkX211dGV4IGIvVXRpbGl0aWVzL3N0ZC9jbS9zaGFyZWRfbXV0ZXgKaW5kZXggMmFjOTQ0Ny4uZWM2M2E3YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL3N0ZC9jbS9zaGFyZWRfbXV0ZXgKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS9zaGFyZWRfbXV0ZXgKQEAgLTE3LDcgKzE3LDcgQEAKICMgIGluY2x1ZGUgPHNoYXJlZF9tdXRleD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAogI2VuZGlmCiAjaWYgIWRlZmluZWQoQ01ha2VfSEFWRV9DWFhfU0hBUkVEX01VVEVYKQotIyAgaW5jbHVkZSAiY21fdXYuaCIKKyMgIGluY2x1ZGUgPGNtM3AvdXYuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgY20gewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbVNUTC5oeHguaW4gYi9VdGlsaXRpZXMvc3RkL2NtU1RMLmh4eC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzg2MDVjCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbVNUTC5oeHguaW4KQEAgLTAsMCArMSwxMCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbVNUTF9oeHgKKyNkZWZpbmUgY21TVExfaHh4CisKKy8qIFdoZXRoZXIgQ01ha2UgaXMgdXNpbmcgaXRzIG93biBTVEwgaW1wbGVtZW50YXRpb24uICAqLworI2NtYWtlZGVmaW5lIENNYWtlX0hBVkVfQ1hYX01BS0VfVU5JUVVFCisjY21ha2VkZWZpbmUgQ01ha2VfSEFWRV9DWFhfRklMRVNZU1RFTQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY21leHQvYWxnb3JpdGhtIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC9hbGdvcml0aG0KaW5kZXggNDRlNjFmNC4uMjUxYzg5YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL3N0ZC9jbWV4dC9hbGdvcml0aG0KKysrIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC9hbGdvcml0aG0KQEAgLTEzLDEyICsxMywxMSBAQAogCiAjaW5jbHVkZSA8Y20vdHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8Y21leHQvaXRlcmF0b3I+CisjaW5jbHVkZSA8Y21leHQvdHlwZV90cmFpdHM+CiAKICNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiBkZWZpbmVkKF9fc3BhcmMpCiAjICBpbmNsdWRlIDxsaXN0PgogIyAgaW5jbHVkZSA8dmVjdG9yPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtZXh0L3R5cGVfdHJhaXRzPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBjbSB7CkBAIC0xNTgsNiArMTU3LDk1IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQordGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBLZXk+CithdXRvIGNvbnRhaW5zKEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0LCBLZXkgY29uc3QmIGtleSwKKyAgICAgICAgICAgICAgZGV0YWlsOjpvdmVybG9hZF9zZWxlY3RvcjwxPikgLT4gZGVjbHR5cGUoZmlyc3QtPmZpcnN0ID09IGtleSkKKyNlbHNlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIEtleSwKKyAgICAgICAgICBjbTo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBjbTo6aXNfaW5wdXRfaXRlcmF0b3I8SXRlcmF0b3I+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxlPEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yPjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZT46OnZhbHVlLAorICAgICAgICAgICAgaW50PiA9IDA+Citib29sIGNvbnRhaW5zKEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0LCBLZXkgY29uc3QmIGtleSkKKyNlbmRpZgoreworICByZXR1cm4gc3RkOjpmaW5kX2lmKAorICAgICAgICAgICBmaXJzdCwgbGFzdCwKKyAgICAgICAgICAgWyZrZXldKAorICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBjb25zdCYgaXRlbSkgeworICAgICAgICAgICAgIHJldHVybiBpdGVtLmZpcnN0ID09IGtleTsKKyAgICAgICAgICAgfSkgIT0gbGFzdDsKK30KKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIEtleT4KK2Jvb2wgY29udGFpbnMoSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QsIEtleSBjb25zdCYga2V5LAorICAgICAgICAgICAgICBkZXRhaWw6Om92ZXJsb2FkX3NlbGVjdG9yPDA+KQorI2Vsc2UKK3RlbXBsYXRlIDwKKyAgdHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIEtleSwKKyAgY206OmVuYWJsZV9pZl90PAorICAgIGNtOjppc19pbnB1dF9pdGVyYXRvcjxJdGVyYXRvcj46OnZhbHVlICYmCisgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxlPAorICAgICAgICBLZXksIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT46OnZhbHVlLAorICAgIGludD4gPSAwPgorYm9vbCBjb250YWlucyhJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCwgS2V5IGNvbnN0JiBrZXkpCisjZW5kaWYKK3sKKyAgcmV0dXJuIHN0ZDo6ZmluZChmaXJzdCwgbGFzdCwga2V5KSAhPSBsYXN0OworfQorCisjaWYgZGVmaW5lZChfX1NVTlBST19DQykKK3RlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgS2V5PgorYm9vbCBjb250YWlucyhJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCwgS2V5IGNvbnN0JiBrZXkpCit7CisgIHJldHVybiBjb250YWlucyhmaXJzdCwgbGFzdCwga2V5LCBkZXRhaWw6Om92ZXJsb2FkX3NlbGVjdG9yPDE+e30pOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQordGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXk+CithdXRvIGNvbnRhaW5zKFJhbmdlIGNvbnN0JiByYW5nZSwgS2V5IGNvbnN0JiBrZXksIGRldGFpbDo6b3ZlcmxvYWRfc2VsZWN0b3I8MT4pCisgIC0+IGRlY2x0eXBlKHJhbmdlLmZpbmQoa2V5KSAhPSByYW5nZS5lbmQoKSkKKyNlbHNlCit0ZW1wbGF0ZSA8CisgIHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXksCisgIGNtOjplbmFibGVfaWZfdDxjbTo6aXNfYXNzb2NpYXRpdmVfY29udGFpbmVyPFJhbmdlPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgY206OmlzX3Vub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXI8UmFuZ2U+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorYm9vbCBjb250YWlucyhSYW5nZSBjb25zdCYgcmFuZ2UsIEtleSBjb25zdCYga2V5KQorI2VuZGlmCit7CisgIHJldHVybiByYW5nZS5maW5kKGtleSkgIT0gcmFuZ2UuZW5kKCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQordGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXk+Citib29sIGNvbnRhaW5zKFJhbmdlIGNvbnN0JiByYW5nZSwgS2V5IGNvbnN0JiBrZXksIGRldGFpbDo6b3ZlcmxvYWRfc2VsZWN0b3I8MD4pCisjZWxzZQordGVtcGxhdGUgPAorICB0eXBlbmFtZSBSYW5nZSwgdHlwZW5hbWUgS2V5LAorICBjbTo6ZW5hYmxlX2lmX3Q8Y206OmlzX2lucHV0X3JhbmdlPFJhbmdlPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgIShjbTo6aXNfYXNzb2NpYXRpdmVfY29udGFpbmVyPFJhbmdlPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgICBjbTo6aXNfdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcjxSYW5nZT46OnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorYm9vbCBjb250YWlucyhSYW5nZSBjb25zdCYgcmFuZ2UsIEtleSBjb25zdCYga2V5KQorI2VuZGlmCit7CisgIHJldHVybiBzdGQ6OmZpbmQoc3RkOjpiZWdpbihyYW5nZSksIHN0ZDo6ZW5kKHJhbmdlKSwga2V5KSAhPSBzdGQ6OmVuZChyYW5nZSk7Cit9CisKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQordGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXk+Citib29sIGNvbnRhaW5zKFJhbmdlIGNvbnN0JiByYW5nZSwgS2V5IGNvbnN0JiBrZXkpCit7CisgIHJldHVybiBjb250YWlucyhyYW5nZSwga2V5LCBkZXRhaWw6Om92ZXJsb2FkX3NlbGVjdG9yPDE+e30pOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIGNtCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbWV4dC9pdGVyYXRvciBiL1V0aWxpdGllcy9zdGQvY21leHQvaXRlcmF0b3IKaW5kZXggZmZlOTRiMS4uY2U5NDYyZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL3N0ZC9jbWV4dC9pdGVyYXRvcgorKysgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L2l0ZXJhdG9yCkBAIC0yMywyNSArMjMsMjcgQEAKICAgc3RkOjppc19iYXNlX29mPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8ST46Oml0ZXJhdG9yX2NhdGVnb3J5PjsKIAotLy8gY2hlY2tzIGlmIGEgdHlwZSBpcyBhIHJhbmdlIHR5cGU6IG11c3QgaGF2ZSBhIGRpZmZlcmVuY2VfdHlwZSB0eXBlCisvLyBjaGVja3MgaWYgYSB0eXBlIGlzIGEgcmFuZ2UgdHlwZTogc3RkOjpiZWdpbigpIGFuZCBzdGQ6OmVuZCgpIGFyZSBzdXBwb3J0ZWQKIHRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KIHVzaW5nIGlzX3JhbmdlID0gY206OmJvb2xfY29uc3RhbnQ8Ci0gIGNtOjppc19pdGVyYXRvcjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8Y29uc3QgUmFuZ2U+KCkuYmVnaW4oKSk+Ojp2YWx1ZSAmJgotICBjbTo6aXNfaXRlcmF0b3I8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGNvbnN0IFJhbmdlPigpLmVuZCgpKT46OnZhbHVlPjsKKyAgY206OmlzX2l0ZXJhdG9yPGRlY2x0eXBlKHN0ZDo6YmVnaW4oc3RkOjpkZWNsdmFsPGNvbnN0IFJhbmdlPigpKSk+Ojp2YWx1ZSAmJgorICBjbTo6aXNfaXRlcmF0b3I8ZGVjbHR5cGUoc3RkOjplbmQoc3RkOjpkZWNsdmFsPGNvbnN0IFJhbmdlPigpKSk+Ojp2YWx1ZT47CiAKLS8vIGNoZWNrcyBpZiBhIHR5cGUgaXMgYW4gaW5wdXQgcmFuZ2UgdHlwZTogbXVzdCBoYXZlIG1ldGhvZHMgYmVnaW4oKSBhbmQgZW5kKCkKKy8vIGNoZWNrcyBpZiBhIHR5cGUgaXMgYW4gaW5wdXQgcmFuZ2UgdHlwZTogc3RkOjpiZWdpbigpIGFuZCBzdGQ6OmVuZCgpIGFyZQogLy8gcmV0dXJuaW5nIGFuIGlucHV0IGl0ZXJhdG9yCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2U+CiB1c2luZyBpc19pbnB1dF9yYW5nZSA9CiAjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTIwCiAgIC8vIE1TIEMrKyBpcyBub3QgYWJsZSB0byBldmFsdWF0ZSBjb21wbGV4IHR5cGUgaW50cm9zcGVjdGlvbiwKICAgLy8gc28gdXNlIGEgc2ltcGxpZmllZCB2ZXJzaW9uCi0gIGNtOjppc19pbnB1dF9pdGVyYXRvcjx0eXBlbmFtZSBSYW5nZTo6Y29uc3RfaXRlcmF0b3I+OworICBjbTo6Ym9vbF9jb25zdGFudDxzdGQ6OmlzX2NsYXNzPFJhbmdlPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFJhbmdlPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgc3RkOjppc19hcnJheTxSYW5nZT46OnZhbHVlPjsKICNlbHNlCi0gIGNtOjpib29sX2NvbnN0YW50PAotICAgIGNtOjppc19pbnB1dF9pdGVyYXRvcjxkZWNsdHlwZSgKLSAgICAgIHN0ZDo6ZGVjbHZhbDxjb25zdCBSYW5nZT4oKS5iZWdpbigpKT46OnZhbHVlICYmCi0gICAgY206OmlzX2lucHV0X2l0ZXJhdG9yPGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxjb25zdCBSYW5nZT4oKS5lbmQoKSk+Ojp2YWx1ZT47CisgIGNtOjpib29sX2NvbnN0YW50PGNtOjppc19pbnB1dF9pdGVyYXRvcjxkZWNsdHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmJlZ2luKHN0ZDo6ZGVjbHZhbDxjb25zdCBSYW5nZT4oKSkpPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgY206OmlzX2lucHV0X2l0ZXJhdG9yPGRlY2x0eXBlKAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6ZW5kKHN0ZDo6ZGVjbHZhbDxjb25zdCBSYW5nZT4oKSkpPjo6dmFsdWU+OwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIGNtCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtZXh0L21lbW9yeSBiL1V0aWxpdGllcy9zdGQvY21leHQvbWVtb3J5CmluZGV4IDUwZTc5ZGYuLmZhMzI2ZjAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9zdGQvY21leHQvbWVtb3J5CisrKyBiL1V0aWxpdGllcy9zdGQvY21leHQvbWVtb3J5CkBAIC0xMiwxOCArMTIsMTkgQEAKIAogbmFtZXNwYWNlIGNtIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE8sCi0gICAgICAgICAgY206OmVuYWJsZV9pZl90PAotICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPGNtOjppbnZva2VfcmVzdWx0X3Q8ZGVjbHR5cGUoJk86OmdldCksIE8+Pjo6dmFsdWUsCi0gICAgICAgICAgICBpbnQ+ID0gMD4KK3RlbXBsYXRlIDwKKyAgdHlwZW5hbWUgVCwgdHlwZW5hbWUgTywKKyAgY206OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8Tz4oKS5nZXQoKSk+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgIGludD4gPSAwPgogVCYgc3RhdGljX3JlZmVyZW5jZV9jYXN0KE8mIGl0ZW0pCiB7CiAgIHJldHVybiAqKHN0YXRpY19jYXN0PFQqPihpdGVtLmdldCgpKSk7CiB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTywKLSAgICAgICAgICBjbTo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8Y206Omludm9rZV9yZXN1bHRfdDxkZWNsdHlwZSgmTzo6Z2V0KSwgTz4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIGludD4gPSAwPgorCit0ZW1wbGF0ZSA8CisgIHR5cGVuYW1lIFQsIHR5cGVuYW1lIE8sCisgIGNtOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPE8+KCkuZ2V0KCkpPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KIFQmIGR5bmFtaWNfcmVmZXJlbmNlX2Nhc3QoTyYgaXRlbSkKIHsKICAgYXV0byBwID0gZHluYW1pY19jYXN0PFQqPihpdGVtLmdldCgpKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY21leHQvc3RyaW5nX3ZpZXcgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L3N0cmluZ192aWV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNTJiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L3N0cmluZ192aWV3CkBAIC0wLDAgKzEsNDIgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtZXh0X3N0cmluZ192aWV3CisjZGVmaW5lIGNtZXh0X3N0cmluZ192aWV3CisKKyNpbmNsdWRlIDxjc3RkZGVmPgorCisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisKK25hbWVzcGFjZSBjbSB7CisKKy8qKiBBIHN0cmluZ192aWV3IHRoYXQgb25seSBiaW5kcyB0byBzdGF0aWMgc3RvcmFnZS4KKyAqCisgKiBUaGlzIGlzIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgYCIiX3NgIHVzZXItZGVmaW5lZCBsaXRlcmFsIG9wZXJhdG9yCisgKiB0byBjb25zdHJ1Y3QgYSB0eXBlLXNhZmUgYWJzdHJhY3Rpb24gb2YgYSBzdHJpbmdfdmlldyB0aGF0IG9ubHkgdmlld3MKKyAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cmluZ3MuICBUaGVzZSBzdHJpbmdzIGFyZSBjb25zdCBhbmQgYXZhaWxhYmxlCisgKiBmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZiB0aGUgcHJvZ3JhbS4KKyAqLworY2xhc3Mgc3RhdGljX3N0cmluZ192aWV3IDogcHVibGljIHN0cmluZ192aWV3Cit7CisgIHN0YXRpY19zdHJpbmdfdmlldyhzdHJpbmdfdmlldyB2KQorICAgIDogc3RyaW5nX3ZpZXcodikKKyAgeworICB9CisKKyAgZnJpZW5kIHN0YXRpY19zdHJpbmdfdmlldyBvcGVyYXRvciIiIF9zKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKK307CisKKy8qKiBDcmVhdGUgYSBzdGF0aWNfc3RyaW5nX3ZpZXcgdXNpbmcgYCIiX3NgIGxpdGVyYWwgc3ludGF4LiAgKi8KK2lubGluZSBzdGF0aWNfc3RyaW5nX3ZpZXcgb3BlcmF0b3IiIiBfcyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIHN0cmluZ192aWV3KGRhdGEsIHNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZSBjbQorCit1c2luZyBjbTo6b3BlcmF0b3IiIiBfczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtZXh0L3R5cGVfdHJhaXRzIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC90eXBlX3RyYWl0cwppbmRleCAwMDk4NGNiLi5mMDJiNDg4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvc3RkL2NtZXh0L3R5cGVfdHJhaXRzCisrKyBiL1V0aWxpdGllcy9zdGQvY21leHQvdHlwZV90cmFpdHMKQEAgLTYsNiArNiw4IEBACiAjaWZuZGVmIGNtZXh0X3R5cGVfdHJhaXRzCiAjZGVmaW5lIGNtZXh0X3R5cGVfdHJhaXRzCiAKKyNpbmNsdWRlIDxtZW1vcnk+CisKICNpbmNsdWRlIDxjbS90eXBlX3RyYWl0cz4KIAogbmFtZXNwYWNlIGNtIHsKZGlmZiAtLWdpdCBhL2Jvb3RzdHJhcCBiL2Jvb3RzdHJhcAppbmRleCAwM2Q5ZWYwLi5lNjQ4NGNlIDEwMDc1NQotLS0gYS9ib290c3RyYXAKKysrIGIvYm9vdHN0cmFwCkBAIC05LDE1ICs5LDIzIEBACiAjIENvbXBpbGUgZmxhZyBleHRyYWN0aW9uIGZ1bmN0aW9uLgogY21ha2VfZXh0cmFjdF9zdGFuZGFyZF9mbGFncygpCiB7Ci0gIHNlZCAtbiAicy8gKnNldCAqKCAqQ01BS0VfJHsyfSR7M31fRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICpcIlx7MCwxXH1cKFteXCIpXSpcKS4qL1wxL3AiIFwKLSAgICAiJHtjbWFrZV9zb3VyY2VfZGlyfS9Nb2R1bGVzL0NvbXBpbGVyLyIkezE6LSp9LSR7Mn0uY21ha2UgMj4vZGV2L251bGwgfCB0ciAnOycgJyAnCisgIGlkPSIkezE6LSp9IgorICBsYW5nPSIkezJ9IgorICB2ZXI9IiR7M30iCisgIHNlZCAtbiAicy8gKnNldCAqKCAqQ01BS0VfJHtsYW5nfSR7dmVyfV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gKlwiXHswLDFcfVwoW15cIildKlwpLiovXDEvcCIgXAorICAgICIke2NtYWtlX3NvdXJjZV9kaXJ9L01vZHVsZXMvQ29tcGlsZXIvIiR7aWR9LSR7bGFuZ30uY21ha2UgXAorICAgIDI+L2Rldi9udWxsIHwgdHIgJzsnICcgJworICAjIENsYW5nJ3MgQ1hYIGNvbXBpbGVyIGZsYWdzIGFyZSBpbiB0aGUgY29tbW9uIG1vZHVsZS4KKyAgc2VkIC1uICJzLyAqc2V0ICooICpDTUFLRV9cXFwke2xhbmd9JHt2ZXJ9X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAqXCJcezAsMVx9XChbXlwiKV0qXCkuKi9cMS9wIiBcCisgICAgIiR7Y21ha2Vfc291cmNlX2Rpcn0vTW9kdWxlcy9Db21waWxlci9DbGFuZy5jbWFrZSIgXAorICAgIDI+L2Rldi9udWxsIHwgdHIgJzsnICcgJwogfQogCiAjIFZlcnNpb24gbnVtYmVyIGV4dHJhY3Rpb24gZnVuY3Rpb24uCiBjbWFrZV92ZXJzaW9uX2NvbXBvbmVudCgpCiB7CiAgIHNlZCAtbiAiCi0vXnNldChDTWFrZV9WRVJTSU9OXyR7MX0vIHtzL3NldChDTWFrZV9WRVJTSU9OXyR7MX0gKlwoWzAtOV0qXCkpL1wxLztwO30KKy9ec2V0KENNYWtlX1ZFUlNJT05fJHsxfS8ge3Mvc2V0KENNYWtlX1ZFUlNJT05fJHsxfSAqXChbMC05XSpcKSkuKi9cMS87cDt9CiAiICIke2NtYWtlX3NvdXJjZV9kaXJ9L1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UiCiB9CiAKQEAgLTUyLDcgKzYwLDcgQEAKIGNtYWtlX3ZlcnNpb25fcGF0Y2g9ImBjbWFrZV92ZXJzaW9uX2NvbXBvbmVudCBQQVRDSGAiCiBjbWFrZV92ZXJzaW9uPSIke2NtYWtlX3ZlcnNpb25fbWFqb3J9LiR7Y21ha2VfdmVyc2lvbl9taW5vcn0uJHtjbWFrZV92ZXJzaW9uX3BhdGNofSIKIGNtYWtlX3ZlcnNpb25fcmM9ImBjbWFrZV92ZXJzaW9uX2NvbXBvbmVudCBSQ2AiCi1pZiBbICIkY21ha2VfdmVyc2lvbl9yYyIgIT0gIiIgXTsgdGhlbgoraWYgdGVzdCAiJGNtYWtlX3ZlcnNpb25fcmMiICE9ICIiOyB0aGVuCiAgIGNtYWtlX3ZlcnNpb249IiR7Y21ha2VfdmVyc2lvbn0tcmMke2NtYWtlX3ZlcnNpb25fcmN9IgogZmkKIApAQCAtMTMxLDcgKzEzOSw3IEBACiBpZiBlY2hvICIke2NtYWtlX3N5c3RlbX0iIHwgZ3JlcCBIUC1VWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgZGllICdDTWFrZSBubyBsb25nZXIgY29tcGlsZXMgb24gSFAtVVguICBTZWUKIAotICBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTcxMzcKKyAgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTcxMzcKIAogVXNlIENNYWtlIDMuOSBvciBsb3dlciBpbnN0ZWFkLicKICAgY21ha2Vfc3lzdGVtX2hwdXg9dHJ1ZQpAQCAtMjAxLDEzICsyMDksMTMgQEAKIAogIyBDaG9vc2UgdGhlIGRlZmF1bHQgaW5zdGFsbCBwcmVmaXguCiBpZiAke2NtYWtlX3N5c3RlbV9taW5nd307IHRoZW4KLSAgaWYgWyAieCR7UFJPR1JBTUZJTEVTfSIgIT0gIngiIF07IHRoZW4KKyAgaWYgdGVzdCAieCR7UFJPR1JBTUZJTEVTfSIgIT0gIngiOyB0aGVuCiAgICAgY21ha2VfZGVmYXVsdF9wcmVmaXg9YGNtYWtlX2ZpeF9zbGFzaGVzICIke1BST0dSQU1GSUxFU30vQ01ha2UiYAotICBlbGlmIFsgIngke1Byb2dyYW1GaWxlc30iICE9ICJ4IiBdOyB0aGVuCisgIGVsaWYgdGVzdCAieCR7UHJvZ3JhbUZpbGVzfSIgIT0gIngiOyB0aGVuCiAgICAgY21ha2VfZGVmYXVsdF9wcmVmaXg9YGNtYWtlX2ZpeF9zbGFzaGVzICIke1Byb2dyYW1GaWxlc30vQ01ha2UiYAotICBlbGlmIFsgIngke1NZU1RFTURSSVZFfSIgIT0gIngiIF07IHRoZW4KKyAgZWxpZiB0ZXN0ICJ4JHtTWVNURU1EUklWRX0iICE9ICJ4IjsgdGhlbgogICAgIGNtYWtlX2RlZmF1bHRfcHJlZml4PWBjbWFrZV9maXhfc2xhc2hlcyAiJHtTWVNURU1EUklWRX0vUHJvZ3JhbSBGaWxlcy9DTWFrZSJgCi0gIGVsaWYgWyAieCR7U3lzdGVtRHJpdmV9IiAhPSAieCIgXTsgdGhlbgorICBlbGlmIHRlc3QgIngke1N5c3RlbURyaXZlfSIgIT0gIngiOyB0aGVuCiAgICAgY21ha2VfZGVmYXVsdF9wcmVmaXg9YGNtYWtlX2ZpeF9zbGFzaGVzICIke1N5c3RlbURyaXZlfS9Qcm9ncmFtIEZpbGVzL0NNYWtlImAKICAgZWxzZQogICAgIGNtYWtlX2RlZmF1bHRfcHJlZml4PSJjOi9Qcm9ncmFtIEZpbGVzL0NNYWtlIgpAQCAtMjM5LDggKzI0NywxMiBAQAogICAqL0NNYWtlQ1hYQ29tcGlsZXIuY21ha2UgXAogICBTb3VyY2UvY21Db25maWd1cmUuaCBcCiAgIFNvdXJjZS9DVGVzdC9DdXJsL2NvbmZpZy5oIFwKLSAgVXRpbGl0aWVzL2NtZXhwYXQvZXhwYXRDb25maWcuaCBcCi0gIFV0aWxpdGllcy9jbWV4cGF0L2V4cGF0RGxsQ29uZmlnLmggXAorICBVdGlsaXRpZXMvY21UaGlyZFBhcnR5LmggXAorICBVdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2NvbmZpZy5oIFwKKyAgVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9jb25maWcuaCBcCisgIFV0aWxpdGllcy9jbWxpYmx6bWEvY29uZmlnLmggXAorICBVdGlsaXRpZXMvY21uZ2h0dHAyL2NvbmZpZy5oIFwKKyAgVXRpbGl0aWVzL2NtemxpYi96bGliRGxsQ29uZmlnLmggXAogICAiCiAKIENNQUtFX1VOVVNFRF9TT1VSQ0VTPSJcCkBAIC00MDQsNyArNDE2LDYgQEAKICAgY21Qcm9jZXNzT3V0cHV0IFwKICAgY21Qcm9qZWN0Q29tbWFuZCBcCiAgIGNtUHJvcGVydHlEZWZpbml0aW9uIFwKLSAgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAgXAogICBjbVByb3BlcnR5TWFwIFwKICAgY21SZXR1cm5Db21tYW5kIFwKICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlciBcCkBAIC00MjEsNiArNDMyLDcgQEAKICAgY21TaXRlTmFtZUNvbW1hbmQgXAogICBjbVNvdXJjZUZpbGUgXAogICBjbVNvdXJjZUZpbGVMb2NhdGlvbiBcCisgIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyIFwKICAgY21TdGF0ZSBcCiAgIGNtU3RhdGVEaXJlY3RvcnkgXAogICBjbVN0YXRlU25hcHNob3QgXApAQCAtNDY3LDYgKzQ3OSw3IEBACiBmaQogCiBDTUFLRV9TVERfQ1hYX0hFQURFUlM9IlwKKyAgZmlsZXN5c3RlbSBcCiAgIG1lbW9yeSBcCiAgIG9wdGlvbmFsIFwKICAgc2hhcmVkX211dGV4IFwKQEAgLTQ3NCw2ICs0ODcsNyBAQAogICB1dGlsaXR5IFwKICIKIENNQUtFX1NURF9DWFhfU09VUkNFUz0iXAorICBmc19wYXRoIFwKICAgc3RyaW5nX3ZpZXcgXAogIgogCkBAIC02MTEsNiArNjI1LDggQEAKICAgLS1uby1zeXN0ZW0tYnppcDIgICAgICAgdXNlIGNtYWtlLXByb3ZpZGVkIGJ6aXAyIGxpYnJhcnkgKGRlZmF1bHQpCiAgIC0tc3lzdGVtLWxpYmx6bWEgICAgICAgIHVzZSBzeXN0ZW0taW5zdGFsbGVkIGxpYmx6bWEgbGlicmFyeQogICAtLW5vLXN5c3RlbS1saWJsem1hICAgICB1c2UgY21ha2UtcHJvdmlkZWQgbGlibHptYSBsaWJyYXJ5IChkZWZhdWx0KQorICAtLXN5c3RlbS1uZ2h0dHAyICAgICAgICB1c2Ugc3lzdGVtLWluc3RhbGxlZCBuZ2h0dHAyIGxpYnJhcnkKKyAgLS1uby1zeXN0ZW0tbmdodHRwMiAgICAgdXNlIGNtYWtlLXByb3ZpZGVkIG5naHR0cDIgbGlicmFyeSAoZGVmYXVsdCkKICAgLS1zeXN0ZW0tenN0ZCAgICAgICAgICAgdXNlIHN5c3RlbS1pbnN0YWxsZWQgenN0ZCBsaWJyYXJ5CiAgIC0tbm8tc3lzdGVtLXpzdGQgICAgICAgIHVzZSBjbWFrZS1wcm92aWRlZCB6c3RkIGxpYnJhcnkgKGRlZmF1bHQpCiAgIC0tc3lzdGVtLWxpYmFyY2hpdmUgICAgIHVzZSBzeXN0ZW0taW5zdGFsbGVkIGxpYmFyY2hpdmUgbGlicmFyeQpAQCAtNjIwLDYgKzYzNiw4IEBACiAgIC0tc3lzdGVtLWxpYnV2ICAgICAgICAgIHVzZSBzeXN0ZW0taW5zdGFsbGVkIGxpYnV2IGxpYnJhcnkKICAgLS1uby1zeXN0ZW0tbGlidXYgICAgICAgdXNlIGNtYWtlLXByb3ZpZGVkIGxpYnV2IGxpYnJhcnkgKGRlZmF1bHQpCiAKKyAgLS1ib290c3RyYXAtc3lzdGVtLWxpYnV2IHVzZSBzeXN0ZW0taW5zdGFsbGVkIGxpYnV2IGxpYnJhcnkgZm9yIGJvb3N0cmFwCisKICAgLS1xdC1ndWkgICAgICAgICAgICAgICAgYnVpbGQgdGhlIFF0LWJhc2VkIEdVSSAocmVxdWlyZXMgUXQgPj0gNC4yKQogICAtLW5vLXF0LWd1aSAgICAgICAgICAgICBkbyBub3QgYnVpbGQgdGhlIFF0LWJhc2VkIEdVSSAoZGVmYXVsdCkKICAgLS1xdC1xbWFrZT08cW1ha2U+ICAgICAgdXNlIDxxbWFrZT4gYXMgdGhlIHFtYWtlIGV4ZWN1dGFibGUgdG8gZmluZCBRdApAQCAtNjYzLDcgKzY4MSw3IEBACiAgIGVjaG8gIkVycm9yIHdoZW4gYm9vdHN0cmFwcGluZyBDTWFrZToiCiAgIGVjaG8gIiQqIgogICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIGlmIFsgLWYgY21ha2VfYm9vdHN0cmFwLmxvZyBdOyB0aGVuCisgIGlmIHRlc3QgLWYgY21ha2VfYm9vdHN0cmFwLmxvZzsgdGhlbgogICAgIGVjaG8gIkxvZyBvZiBlcnJvcnM6IGBwd2RgL2NtYWtlX2Jvb3RzdHJhcC5sb2ciCiAgICAgI2NhdCBjbWFrZV9ib290c3RyYXAubG9nCiAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpAQCAtNjkwLDkgKzcwOCw5IEBACiAgIE9VVEZJTEU9IiQyIgogICBTRUFSQ0hGT1I9IiQzIgogICBSRVBMQUNFV0lUSD0iJDQiCi0gIGlmIFsgLWYgIiR7SU5GSUxFfSIgXSB8fCAke2NtYWtlX3N5c3RlbV9vcGVudm1zfTsgdGhlbgorICBpZiB0ZXN0IC1mICIke0lORklMRX0iIHx8ICR7Y21ha2Vfc3lzdGVtX29wZW52bXN9OyB0aGVuCiAgICAgc2VkICJzL1xAJHtTRUFSQ0hGT1J9XEAvJHtSRVBMQUNFV0lUSH0vZyIgIiR7SU5GSUxFfSIgPiAiJHtPVVRGSUxFfSR7X3RtcH0iCi0gICAgaWYgWyAtZiAiJHtPVVRGSUxFfSR7X3RtcH0iIF07IHRoZW4KKyAgICBpZiB0ZXN0IC1mICIke09VVEZJTEV9JHtfdG1wfSI7IHRoZW4KICAgICAgIGlmICIke19kaWZmfSIgIiR7T1VURklMRX0iICIke09VVEZJTEV9JHtfdG1wfSIgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIDsgdGhlbgogICAgICAgICAjZWNobyAiRmlsZXMgYXJlIHRoZSBzYW1lIgogICAgICAgICBybSAtZiAiJHtPVVRGSUxFfSR7X3RtcH0iCkBAIC03MTEsNyArNzI5LDcgQEAKICAgT1VURklMRT0iJDIiCiAgIHNoaWZ0IDIKICAgQVBQRU5EPSIkKiIKLSAgaWYgWyAtZiAiJHtJTkZJTEV9IiBdIHx8ICR7Y21ha2Vfc3lzdGVtX29wZW52bXN9OyB0aGVuCisgIGlmIHRlc3QgLWYgIiR7SU5GSUxFfSIgfHwgJHtjbWFrZV9zeXN0ZW1fb3BlbnZtc307IHRoZW4KICAgICBlY2hvICIke0FQUEVORH0iID4gIiR7T1VURklMRX0ke190bXB9IgogICAgIHNlZCAiLy4vIHtzL1xAS1dTWVNfTkFNRVNQQUNFXEAvY21zeXMvZzsKICAgICAgICAgICAgICAgcy9AS1dTWVNfQlVJTERfU0hBUkVEQC8ke0tXU1lTX0JVSUxEX1NIQVJFRH0vZzsKQEAgLTcyMiw3ICs3NDAsNyBAQAogICAgICAgICAgICAgICBzL0BLV1NZU19DWFhfSEFTX0VYVF9TVERJT19GSUxFQlVGX0hALyR7S1dTWVNfQ1hYX0hBU19FWFRfU1RESU9fRklMRUJVRl9IfS9nOwogICAgICAgICAgICAgICBzL0BLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQQC8ke0tXU1lTX1NZU1RFTVRPT0xTX1VTRV9UUkFOU0xBVElPTl9NQVB9L2c7CiAgICAgICAgICAgICAgfSIgIiR7SU5GSUxFfSIgPj4gIiR7T1VURklMRX0ke190bXB9IgotICAgIGlmIFsgLWYgIiR7T1VURklMRX0ke190bXB9IiBdOyB0aGVuCisgICAgaWYgdGVzdCAtZiAiJHtPVVRGSUxFfSR7X3RtcH0iOyB0aGVuCiAgICAgICBpZiAiJHtfZGlmZn0iICIke09VVEZJTEV9IiAiJHtPVVRGSUxFfSR7X3RtcH0iID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCA7IHRoZW4KICAgICAgICAgI2VjaG8gIkZpbGVzIGFyZSB0aGUgc2FtZSIKICAgICAgICAgcm0gLWYgIiR7T1VURklMRX0ke190bXB9IgpAQCAtNzc5LDcgKzc5Nyw3IEBACiAgIENPTVBJTEVSPSQxCiAgIEZMQUdTPSQyCiAgIFRFU1RGSUxFPSQzCi0gIGlmIFsgISAtZiAiJHtURVNURklMRX0iIF07IHRoZW4KKyAgaWYgdGVzdCAhIC1mICIke1RFU1RGSUxFfSI7IHRoZW4KICAgICBlY2hvICJUZXN0IGZpbGUgJHtURVNURklMRX0gbWlzc2luZy4gUGxlYXNlIHZlcmlmeSB5b3VyIENNYWtlIHNvdXJjZSB0cmVlLiIKICAgICBleGl0IDQKICAgZmkKQEAgLTc5MSwxOCArODA5LDE4IEBACiAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgIiR7Q09NUElMRVJ9IiAke0ZMQUdTfSAiJHtURVNURklMRX0iIC1vICIke1RNUEZJTEV9IgogICBSRVM9JD8KLSAgaWYgWyAiJHtSRVN9IiAtbmUgIjAiIF07IHRoZW4KKyAgaWYgdGVzdCAiJHtSRVN9IiAtbmUgIjAiOyB0aGVuCiAgICAgZWNobyAiVGVzdCBmYWlsZWQgdG8gY29tcGlsZSIKICAgICByZXR1cm4gMQogICBmaQotICBpZiBbICEgLWYgIiR7VE1QRklMRX0iIF0gJiYgWyAhIC1mICIke1RNUEZJTEV9LmV4ZSIgXTsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiR7VE1QRklMRX0iICYmIHRlc3QgISAtZiAiJHtUTVBGSUxFfS5leGUiOyB0aGVuCiAgICAgZWNobyAiVGVzdCBmYWlsZWQgdG8gcHJvZHVjZSBleGVjdXRhYmxlIgogICAgIHJldHVybiAyCiAgIGZpCiAgIC4vJHtUTVBGSUxFfQogICBSRVM9JD8KICAgcm0gLWYgIiR7VE1QRklMRX0iCi0gIGlmIFsgIiR7UkVTfSIgLW5lICIwIiBdOyB0aGVuCisgIGlmIHRlc3QgIiR7UkVTfSIgLW5lICIwIjsgdGhlbgogICAgIGVjaG8gIlRlc3QgcHJvZHVjZWQgbm9uLXplcm8gcmV0dXJuIGNvZGUiCiAgICAgcmV0dXJuIDMKICAgZmkKQEAgLTgxOCwxOCArODM2LDE4IEBACiAgIGVjaG8gIlRyeTogJHtNQUtFX1BST0N9IgogICAiJHtNQUtFX1BST0N9IiAke01BS0VfRkxBR1N9CiAgIFJFUz0kPwotICBpZiBbICIke1JFU30iIC1uZSAiMCIgXTsgdGhlbgorICBpZiB0ZXN0ICIke1JFU30iIC1uZSAiMCI7IHRoZW4KICAgICBlY2hvICIke01BS0VfUFJPQ30gZG9lcyBub3Qgd29yayIKICAgICByZXR1cm4gMQogICBmaQotICBpZiBbICEgLWYgInRlc3QiIF0gJiYgWyAhIC1mICJ0ZXN0LmV4ZSIgXTsgdGhlbgorICBpZiB0ZXN0ICEgLWYgInRlc3QiICYmIHRlc3QgISAtZiAidGVzdC5leGUiOyB0aGVuCiAgICAgZWNobyAiJHtDT01QSUxFUn0gZG9lcyBub3QgcHJvZHVjZSBvdXRwdXQiCiAgICAgcmV0dXJuIDIKICAgZmkKICAgLi90ZXN0CiAgIFJFUz0kPwogICBybSAtZiAidGVzdCIKLSAgaWYgWyAiJHtSRVN9IiAtbmUgIjAiIF07IHRoZW4KKyAgaWYgdGVzdCAiJHtSRVN9IiAtbmUgIjAiOyB0aGVuCiAgICAgZWNobyAiJHtNQUtFX1BST0N9IHByb2R1Y2VzIHN0cmFuZ2UgZXhlY3V0YWJsZSIKICAgICByZXR1cm4gMwogICBmaQpAQCAtODQyLDYgKzg2MCw3IEBACiBjbWFrZV9wYXJhbGxlbF9tYWtlPQogY21ha2VfY2NhY2hlX2VuYWJsZWQ9CiBjbWFrZV9wcmVmaXhfZGlyPSIke2NtYWtlX2RlZmF1bHRfcHJlZml4fSIKK2Jvb3RzdHJhcF9zeXN0ZW1fbGlidXY9CiB3aGlsZSB0ZXN0ICQjICE9IDA7IGRvCiAgIGNhc2UgIiQxIiBpbgogICAtLXByZWZpeD0qKSBkaXI9YGNtYWtlX2FyZyAiJDEiYApAQCAtODU1LDEyICs4NzQsMTMgQEAKICAgLS1pbml0PSopIGNtYWtlX2luaXRfZmlsZT1gY21ha2VfYXJnICIkMSJgIDs7CiAgIC0tc3lzdGVtLWxpYnMpIGNtYWtlX2Jvb3RzdHJhcF9zeXN0ZW1fbGlicz0iJHtjbWFrZV9ib290c3RyYXBfc3lzdGVtX2xpYnN9IC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJJRVM9MSIgOzsKICAgLS1uby1zeXN0ZW0tbGlicykgY21ha2VfYm9vdHN0cmFwX3N5c3RlbV9saWJzPSIke2NtYWtlX2Jvb3RzdHJhcF9zeXN0ZW1fbGlic30gLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUklFUz0wIiA7OwotICAtLXN5c3RlbS1iemlwMnwtLXN5c3RlbS1jdXJsfC0tc3lzdGVtLWV4cGF0fC0tc3lzdGVtLWpzb25jcHB8LS1zeXN0ZW0tbGliYXJjaGl2ZXwtLXN5c3RlbS1saWJyaGFzaHwtLXN5c3RlbS16bGlifC0tc3lzdGVtLWxpYmx6bWF8LS1zeXN0ZW0tenN0ZHwtLXN5c3RlbS1saWJ1dikKKyAgLS1zeXN0ZW0tYnppcDJ8LS1zeXN0ZW0tY3VybHwtLXN5c3RlbS1leHBhdHwtLXN5c3RlbS1qc29uY3BwfC0tc3lzdGVtLWxpYmFyY2hpdmV8LS1zeXN0ZW0tbGlicmhhc2h8LS1zeXN0ZW0temxpYnwtLXN5c3RlbS1saWJsem1hfC0tc3lzdGVtLW5naHR0cDJ8LS1zeXN0ZW0tenN0ZHwtLXN5c3RlbS1saWJ1dikKICAgICBsaWI9YGNtYWtlX2FyZyAiJDEiICItLXN5c3RlbS0iYAogICAgIGNtYWtlX2Jvb3RzdHJhcF9zeXN0ZW1fbGlicz0iJHtjbWFrZV9ib290c3RyYXBfc3lzdGVtX2xpYnN9IC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX2BjbWFrZV90b3VwcGVyICRsaWJgPTEiIDs7Ci0gIC0tbm8tc3lzdGVtLWJ6aXAyfC0tbm8tc3lzdGVtLWN1cmx8LS1uby1zeXN0ZW0tZXhwYXR8LS1uby1zeXN0ZW0tanNvbmNwcHwtLW5vLXN5c3RlbS1saWJhcmNoaXZlfC0tbm8tc3lzdGVtLWxpYnJoYXNofC0tbm8tc3lzdGVtLXpsaWJ8LS1uby1zeXN0ZW0tbGlibHptYXwtLW5vLXN5c3RlbS16c3RkfC0tbm8tc3lzdGVtLWxpYnV2KQorICAtLW5vLXN5c3RlbS1iemlwMnwtLW5vLXN5c3RlbS1jdXJsfC0tbm8tc3lzdGVtLWV4cGF0fC0tbm8tc3lzdGVtLWpzb25jcHB8LS1uby1zeXN0ZW0tbGliYXJjaGl2ZXwtLW5vLXN5c3RlbS1saWJyaGFzaHwtLW5vLXN5c3RlbS16bGlifC0tbm8tc3lzdGVtLWxpYmx6bWF8LS1uby1zeXN0ZW0tbmdodHRwMnwtLW5vLXN5c3RlbS16c3RkfC0tbm8tc3lzdGVtLWxpYnV2KQogICAgIGxpYj1gY21ha2VfYXJnICIkMSIgIi0tbm8tc3lzdGVtLSJgCiAgICAgY21ha2VfYm9vdHN0cmFwX3N5c3RlbV9saWJzPSIke2NtYWtlX2Jvb3RzdHJhcF9zeXN0ZW1fbGlic30gLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfYGNtYWtlX3RvdXBwZXIgJGxpYmA9MCIgOzsKKyAgLS1ib290c3RyYXAtc3lzdGVtLWxpYnV2KSBib290c3RyYXBfc3lzdGVtX2xpYnV2PSIxIiA7OwogICAtLXF0LWd1aSkgY21ha2VfYm9vdHN0cmFwX3F0X2d1aT0iMSIgOzsKICAgLS1uby1xdC1ndWkpIGNtYWtlX2Jvb3RzdHJhcF9xdF9ndWk9IjAiIDs7CiAgIC0tcXQtcW1ha2U9KikgY21ha2VfYm9vdHN0cmFwX3F0X3FtYWtlPWBjbWFrZV9hcmcgIiQxImAgOzsKQEAgLTg4NiwxMyArOTA2LDEzIEBACiBkb25lCiAKICMgSWYgdmVyYm9zZSwgZGlzcGxheSBzb21lIGluZm9ybWF0aW9uIGFib3V0IGJvb3RzdHJhcAotaWYgWyAtbiAiJHtjbWFrZV92ZXJib3NlfSIgXTsgdGhlbgoraWYgdGVzdCAtbiAiJHtjbWFrZV92ZXJib3NlfSI7IHRoZW4KICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBlY2hvICJTb3VyY2UgZGlyZWN0b3J5OiAke2NtYWtlX3NvdXJjZV9kaXJ9IgogICBlY2hvICJCaW5hcnkgZGlyZWN0b3J5OiAke2NtYWtlX2JpbmFyeV9kaXJ9IgogICBlY2hvICJQcmVmaXggZGlyZWN0b3J5OiAke2NtYWtlX3ByZWZpeF9kaXJ9IgogICBlY2hvICJTeXN0ZW06ICAgICAgICAgICAke2NtYWtlX3N5c3RlbX0iCi0gIGlmIFsgIngke2NtYWtlX3BhcmFsbGVsX21ha2V9IiAhPSAieCIgXTsgdGhlbgorICBpZiB0ZXN0ICJ4JHtjbWFrZV9wYXJhbGxlbF9tYWtlfSIgIT0gIngiOyB0aGVuCiAgICAgZWNobyAiRG9pbmcgcGFyYWxsZWwgbWFrZTogJHtjbWFrZV9wYXJhbGxlbF9tYWtlfSIKICAgZmkKICAgZWNobyAiIgpAQCAtOTA0LDE4ICs5MjQsMTggQEAKIAogIyBDaGVjayBmb3IgaW4tc291cmNlIGJ1aWxkCiBjbWFrZV9pbl9zb3VyY2VfYnVpbGQ9Ci1pZiBbIC1mICIke2NtYWtlX2JpbmFyeV9kaXJ9L1NvdXJjZS9jbWFrZS5jeHgiIC1hIFwKLSAgICAgLWYgIiR7Y21ha2VfYmluYXJ5X2Rpcn0vU291cmNlL2NtYWtlLmgiIF07IHRoZW4KLSAgaWYgWyAtbiAiJHtjbWFrZV92ZXJib3NlfSIgXTsgdGhlbgoraWYgdGVzdCAtZiAiJHtjbWFrZV9iaW5hcnlfZGlyfS9Tb3VyY2UvY21ha2UuY3h4IiAmJgorICAgICB0ZXN0IC1mICIke2NtYWtlX2JpbmFyeV9kaXJ9L1NvdXJjZS9jbWFrZS5oIjsgdGhlbgorICBpZiB0ZXN0IC1uICIke2NtYWtlX3ZlcmJvc2V9IjsgdGhlbgogICAgIGVjaG8gIldhcm5pbmc6IFRoaXMgaXMgYW4gaW4tc291cmNlIGJ1aWxkIgogICBmaQogICBjbWFrZV9pbl9zb3VyY2VfYnVpbGQ9VFJVRQogZmkKIAogIyBJZiB0aGlzIGlzIG5vdCBhbiBpbi1zb3VyY2UgYnVpbGQsIHRoZW4gQm9vdHN0cmFwIHN0dWZmIHNob3VsZCBub3QgZXhpc3QuCi1pZiBbIC16ICIke2NtYWtlX2luX3NvdXJjZV9idWlsZH0iIF07IHRoZW4KK2lmIHRlc3QgLXogIiR7Y21ha2VfaW5fc291cmNlX2J1aWxkfSI7IHRoZW4KICAgIyBEaWQgc29tZWJvZHkgYm9vdHN0cmFwIGluIHRoZSBzb3VyY2UgdHJlZT8KLSAgaWYgWyAtZCAiJHtjbWFrZV9zb3VyY2VfZGlyfS9Cb290c3RyYXAke19jbWt9IiBdOyB0aGVuCisgIGlmIHRlc3QgLWQgIiR7Y21ha2Vfc291cmNlX2Rpcn0vQm9vdHN0cmFwJHtfY21rfSI7IHRoZW4KICAgICBjbWFrZV9lcnJvciAxMCAiRm91bmQgZGlyZWN0b3J5IFwiJHtjbWFrZV9zb3VyY2VfZGlyfS9Cb290c3RyYXAke19jbWt9XCIuCiBMb29rcyBsaWtlIHNvbWVib2R5IGRpZCBib290c3RyYXAgQ01ha2UgaW4gdGhlIHNvdXJjZSB0cmVlLCBidXQgbm93IHlvdSBhcmUKIHRyeWluZyB0byBkbyBib290c3RyYXAgaW4gdGhlIGJpbmFyeSB0cmVlLiBQbGVhc2UgcmVtb3ZlIEJvb3RzdHJhcCR7X2Nta30KQEAgLTkyMyw3ICs5NDMsNyBAQAogICBmaQogICAjIElzIHRoZXJlIGEgY2FjaGUgaW4gdGhlIHNvdXJjZSB0cmVlPwogICBmb3IgY21ha2VfcHJvYmxlbWF0aWNfZmlsZSBpbiAke0NNQUtFX1BST0JMRU1BVElDX0ZJTEVTfTsgZG8KLSAgICBpZiBbIC1mICIke2NtYWtlX3NvdXJjZV9kaXJ9LyR7Y21ha2VfcHJvYmxlbWF0aWNfZmlsZX0iIF07IHRoZW4KKyAgICBpZiB0ZXN0IC1mICIke2NtYWtlX3NvdXJjZV9kaXJ9LyR7Y21ha2VfcHJvYmxlbWF0aWNfZmlsZX0iOyB0aGVuCiAgICAgICBjbWFrZV9lcnJvciAxMCAiRm91bmQgXCIke2NtYWtlX3NvdXJjZV9kaXJ9LyR7Y21ha2VfcHJvYmxlbWF0aWNfZmlsZX1cIi4KIExvb2tzIGxpa2Ugc29tZWJvZHkgdHJpZWQgdG8gYnVpbGQgQ01ha2UgaW4gdGhlIHNvdXJjZSB0cmVlLCBidXQgbm93IHlvdSBhcmUKIHRyeWluZyB0byBkbyBib290c3RyYXAgaW4gdGhlIGJpbmFyeSB0cmVlLiBQbGVhc2UgcmVtb3ZlIFwiJHtjbWFrZV9wcm9ibGVtYXRpY19maWxlfVwiCkBAIC05MzMsMTQgKzk1MywxNCBAQAogZmkKIAogIyBNYWtlIGJvb3RzdHJhcCBkaXJlY3RvcnkKLVsgLWQgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iIF0gfHwgbWtkaXIgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iCi1pZiBbICEgLWQgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iIF07IHRoZW4KK3Rlc3QgLWQgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iIHx8IG1rZGlyICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9IgoraWYgdGVzdCAhIC1kICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9IjsgdGhlbgogICBjbWFrZV9lcnJvciAzICJDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9IHRvIGJvb3RzdHJhcCBDTWFrZS4iCiBmaQogY2QgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iCiAKLVsgLWQgImNtc3lzIiBdIHx8IG1rZGlyICJjbXN5cyIKLWlmIFsgISAtZCAiY21zeXMiIF07IHRoZW4KK3Rlc3QgLWQgImNtc3lzIiB8fCBta2RpciAiY21zeXMiCitpZiB0ZXN0ICEgLWQgImNtc3lzIjsgdGhlbgogICBjbWFrZV9lcnJvciA0ICJDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L2Ntc3lzIgogZmkKIApAQCAtOTUxLDcgKzk3MSw3IEBACiAKICMgSWYgYnVpbGRpbmcgaW4tc291cmNlLCByZW1vdmUgYW55IGNtQ29uZmlndXJlLmggdGhhdCBtYXkKICMgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgYSBwcmV2aW91cyBydW4gb2YgdGhlIGJvb3RzdHJhcCBjbWFrZS4KLWlmIFsgLW4gIiR7Y21ha2VfaW5fc291cmNlX2J1aWxkfSIgXTsgdGhlbgoraWYgdGVzdCAtbiAiJHtjbWFrZV9pbl9zb3VyY2VfYnVpbGR9IjsgdGhlbgogICBybSAtZiAiJHtjbWFrZV9zb3VyY2VfZGlyfS9Tb3VyY2UvY21Db25maWd1cmUuaCIKIGZpCiAKQEAgLTEwMzYsNyArMTA1Niw3IEBACiAgIGRvbmUKIH0KIAotaWYgWyAteiAiJHtDQ30iIC1hIC16ICIke0NYWH0iIF07IHRoZW4KK2lmIHRlc3QgLXogIiR7Q0N9IiAmJiB0ZXN0IC16ICIke0NYWH0iOyB0aGVuCiAgIGNtYWtlX3Rvb2xjaGFpbl9kZXRlY3QKIGZpCiAKQEAgLTEwNTAsOSArMTA3MCw5IEBACiBjbWFrZV9jX2NvbXBpbGVyPQogCiAjIElmIENDIGlzIHNldCwgdXNlIHRoYXQgZm9yIGNvbXBpbGVyLCBvdGhlcndpc2UgdXNlIGxpc3Qgb2Yga25vd24gY29tcGlsZXJzCi1pZiBbIC1uICIke2NtYWtlX3Rvb2xjaGFpbn0iIF07IHRoZW4KK2lmIHRlc3QgLW4gIiR7Y21ha2VfdG9vbGNoYWlufSI7IHRoZW4KICAgZXZhbCBjbWFrZV9jX2NvbXBpbGVycz0iXCR7Y21ha2VfdG9vbGNoYWluXyR7Y21ha2VfdG9vbGNoYWlufV9DQ30iCi1lbGlmIFsgLW4gIiR7Q0N9IiBdOyB0aGVuCitlbGlmIHRlc3QgLW4gIiR7Q0N9IjsgdGhlbgogICBjbWFrZV9jX2NvbXBpbGVycz0iJHtDQ30iCiBlbHNlCiAgIGNtYWtlX2NfY29tcGlsZXJzPSIke0NNQUtFX0tOT1dOX0NfQ09NUElMRVJTfSIKQEAgLTExMDMsNyArMTEyMyw3IEBACiBkb25lCiBybSAtZiAiJHtUTVBGSUxFfS5jIgogCi1pZiBbIC16ICIke2NtYWtlX2NfY29tcGlsZXJ9IiBdOyB0aGVuCitpZiB0ZXN0IC16ICIke2NtYWtlX2NfY29tcGlsZXJ9IjsgdGhlbgogICBjbWFrZV9lcnJvciA2ICJDYW5ub3QgZmluZCBhcHByb3ByaWF0ZSBDIGNvbXBpbGVyIG9uIHRoaXMgc3lzdGVtLgogUGxlYXNlIHNwZWNpZnkgb25lIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIENDLgogU2VlIGNtYWtlX2Jvb3RzdHJhcC5sb2cgZm9yIGNvbXBpbGVycyBhdHRlbXB0ZWQuCkBAIC0xMTE4LDkgKzExMzgsOSBAQAogIyBPbiBNYWMgT1NYLCBDQyBpcyB0aGUgc2FtZSBhcyBjYywgc28gbWFrZSBzdXJlIG5vdCB0byB0cnkgQ0MgYXMgYysrIGNvbXBpbGVyLgogCiAjIElmIENDIGlzIHNldCwgdXNlIHRoYXQgZm9yIGNvbXBpbGVyLCBvdGhlcndpc2UgdXNlIGxpc3Qgb2Yga25vd24gY29tcGlsZXJzCi1pZiBbIC1uICIke2NtYWtlX3Rvb2xjaGFpbn0iIF07IHRoZW4KK2lmIHRlc3QgLW4gIiR7Y21ha2VfdG9vbGNoYWlufSI7IHRoZW4KICAgZXZhbCBjbWFrZV9jeHhfY29tcGlsZXJzPSJcJHtjbWFrZV90b29sY2hhaW5fJHtjbWFrZV90b29sY2hhaW59X0NYWH0iCi1lbGlmIFsgLW4gIiR7Q1hYfSIgXTsgdGhlbgorZWxpZiB0ZXN0IC1uICIke0NYWH0iOyB0aGVuCiAgIGNtYWtlX2N4eF9jb21waWxlcnM9IiR7Q1hYfSIKIGVsc2UKICAgY21ha2VfY3h4X2NvbXBpbGVycz0iJHtDTUFLRV9LTk9XTl9DWFhfQ09NUElMRVJTfSIKQEAgLTEyMjQsNyArMTI0NCw3IEBACiBkb25lCiBybSAtZiAiJHtUTVBGSUxFfS5jeHgiCiAKLWlmIFsgLXogIiR7Y21ha2VfY3h4X2NvbXBpbGVyfSIgXTsgdGhlbgoraWYgdGVzdCAteiAiJHtjbWFrZV9jeHhfY29tcGlsZXJ9IjsgdGhlbgogY21ha2VfZXJyb3IgNyAiQ2Fubm90IGZpbmQgYSBDKysgY29tcGlsZXIgdGhhdCBzdXBwb3J0cyBib3RoIEMrKzExIGFuZCB0aGUgc3BlY2lmaWVkIEMrKyBmbGFncy4KIFBsZWFzZSBzcGVjaWZ5IG9uZSB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBDWFguCiBUaGUgQysrIGZsYWdzIGFyZSBcIiRjbWFrZV9jeHhfZmxhZ3NcIi4KQEAgLTEyMzYsNyArMTI1Niw3IEBACiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGVzdCBDWFggZmVhdHVyZXMKIAotY21ha2VfY3h4X2ZlYXR1cmVzPSJtYWtlX3VuaXF1ZSIKK2NtYWtlX2N4eF9mZWF0dXJlcz0ibWFrZV91bmlxdWUgZmlsZXN5c3RlbSIKIAogZm9yIGZlYXR1cmUgaW4gJHtjbWFrZV9jeHhfZmVhdHVyZXN9OyBkbwogICBldmFsICJjbWFrZV9oYXZlX2N4eF8ke2ZlYXR1cmV9PTAiCkBAIC0xMjUxLDExICsxMjcxLDE0IEBACiBmb3IgZmVhdHVyZSBpbiAke2NtYWtlX2N4eF9mZWF0dXJlc307IGRvCiAgIGZlYXR1cmVfdmFyaWFibGU9ImNtYWtlX2hhdmVfY3h4XyR7ZmVhdHVyZX0iCiAgIGV2YWwgImZlYXR1cmVfdmFsdWU9XCR7JHtmZWF0dXJlX3ZhcmlhYmxlfX0iCi0gIGlmIFsgIiR7ZmVhdHVyZV92YWx1ZX0iIC1lcSAiMSIgXTsgdGhlbgorICBpZiB0ZXN0ICIke2ZlYXR1cmVfdmFsdWV9IiAtZXEgIjEiOyB0aGVuCiAgICAgY21ha2VfaGF2ZV9jeHhfZmVhdHVyZXM9IiR7Y21ha2VfaGF2ZV9jeHhfZmVhdHVyZXN9IC1EQ01ha2VfSEFWRV9DWFhfYGNtYWtlX3RvdXBwZXIgJHtmZWF0dXJlfWA9JHtmZWF0dXJlX3ZhbHVlfSIKICAgZmkKIGRvbmUKIAorY21ha2VfZ2VuZXJhdGVfZmlsZSAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9jbVNUTC5oeHgiICIiCisKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRlc3QgTWFrZQogCkBAIC0xMjYzLDcgKzEyODYsNyBAQAogY21ha2VfbWFrZV9mbGFncz0KIAogIyBJZiBNQUtFIGlzIHNldCwgdXNlIHRoYXQgZm9yIG1ha2UgcHJvY2Vzc29yLCBvdGhlcndpc2UgdXNlIGxpc3Qgb2Yga25vd24gbWFrZQotaWYgWyAtbiAiJHtNQUtFfSIgXTsgdGhlbgoraWYgdGVzdCAtbiAiJHtNQUtFfSI7IHRoZW4KICAgY21ha2VfbWFrZV9wcm9jZXNzb3JzPSIke01BS0V9IgogZWxzZQogICBjbWFrZV9tYWtlX3Byb2Nlc3NvcnM9IiR7Q01BS0VfS05PV05fTUFLRV9QUk9DRVNTT1JTfSIKQEAgLTEyODIsMjAgKzEzMDUsMjAgQEAKIGludCBtYWluKCl7IHByaW50ZigiMSVjIiwgKGNoYXIpMHgwYSk7IHJldHVybiAwOyB9CiAnID4gInRlc3QuYyIKIGNtYWtlX29yaWdpbmFsX21ha2VfZmxhZ3M9IiR7Y21ha2VfbWFrZV9mbGFnc30iCi1pZiBbICJ4JHtjbWFrZV9wYXJhbGxlbF9tYWtlfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX3BhcmFsbGVsX21ha2V9IiAhPSAieCI7IHRoZW4KICAgY21ha2VfbWFrZV9mbGFncz0iJHtjbWFrZV9tYWtlX2ZsYWdzfSAtaiAke2NtYWtlX3BhcmFsbGVsX21ha2V9IgogZmkKIGZvciBhIGluICR7Y21ha2VfbWFrZV9wcm9jZXNzb3JzfTsgZG8KLSAgaWYgWyAteiAiJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0iIF0gJiYgY21ha2VfdHJ5X21ha2UgIiR7YX0iICIke2NtYWtlX21ha2VfZmxhZ3N9IiA+PiAuLi9jbWFrZV9ib290c3RyYXAubG9nIDI+JjE7IHRoZW4KKyAgaWYgdGVzdCAteiAiJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0iICYmIGNtYWtlX3RyeV9tYWtlICIke2F9IiAiJHtjbWFrZV9tYWtlX2ZsYWdzfSIgPj4gLi4vY21ha2VfYm9vdHN0cmFwLmxvZyAyPiYxOyB0aGVuCiAgICAgY21ha2VfbWFrZV9wcm9jZXNzb3I9IiR7YX0iCiAgIGZpCiBkb25lCiBjbWFrZV9mdWxsX21ha2VfZmxhZ3M9IiR7Y21ha2VfbWFrZV9mbGFnc30iCi1pZiBbICJ4JHtjbWFrZV9vcmlnaW5hbF9tYWtlX2ZsYWdzfSIgIT0gIngke2NtYWtlX21ha2VfZmxhZ3N9IiBdOyB0aGVuCi0gIGlmIFsgLXogIiR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9vcmlnaW5hbF9tYWtlX2ZsYWdzfSIgIT0gIngke2NtYWtlX21ha2VfZmxhZ3N9IjsgdGhlbgorICBpZiB0ZXN0IC16ICIke2NtYWtlX21ha2VfcHJvY2Vzc29yfSI7IHRoZW4KICAgICBjbWFrZV9tYWtlX2ZsYWdzPSIke2NtYWtlX29yaWdpbmFsX21ha2VfZmxhZ3N9IgogICAgIGZvciBhIGluICR7Y21ha2VfbWFrZV9wcm9jZXNzb3JzfTsgZG8KLSAgICAgIGlmIFsgLXogIiR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IiBdICYmIGNtYWtlX3RyeV9tYWtlICIke2F9IiAiJHtjbWFrZV9tYWtlX2ZsYWdzfSIgPj4gLi4vY21ha2VfYm9vdHN0cmFwLmxvZyAyPiYxOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIke2NtYWtlX21ha2VfcHJvY2Vzc29yfSIgJiYgY21ha2VfdHJ5X21ha2UgIiR7YX0iICIke2NtYWtlX21ha2VfZmxhZ3N9IiA+PiAuLi9jbWFrZV9ib290c3RyYXAubG9nIDI+JjE7IHRoZW4KICAgICAgICAgY21ha2VfbWFrZV9wcm9jZXNzb3I9IiR7YX0iCiAgICAgICBmaQogICAgIGRvbmUKQEAgLTEzMDMsMTMgKzEzMjYsMTMgQEAKIGZpCiBjZCAiJHtjbWFrZV9ib290c3RyYXBfZGlyfSIKIAotaWYgWyAteiAiJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0iIF07IHRoZW4KK2lmIHRlc3QgLXogIiR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IjsgdGhlbgogICBjbWFrZV9lcnJvciA4ICJDYW5ub3QgZmluZCBhcHByb3ByaWF0ZSBNYWtlZmlsZSBwcm9jZXNzb3Igb24gdGhpcyBzeXN0ZW0uCiBQbGVhc2Ugc3BlY2lmeSBvbmUgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgTUFLRS4iCiBmaQogcm0gLXJmICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9LyR7VE1QRklMRX0iCiBlY2hvICJNYWtlZmlsZSBwcm9jZXNzb3Igb24gdGhpcyBzeXN0ZW0gaXM6ICR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IgotaWYgWyAieCR7Y21ha2VfZnVsbF9tYWtlX2ZsYWdzfSIgIT0gIngke2NtYWtlX21ha2VfZmxhZ3N9IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9mdWxsX21ha2VfZmxhZ3N9IiAhPSAieCR7Y21ha2VfbWFrZV9mbGFnc30iOyB0aGVuCiAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgZWNobyAiTWFrZWZpbGUgcHJvY2Vzc29yICR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IGRvZXMgbm90IHN1cHBvcnQgcGFyYWxsZWwgYnVpbGQiCiAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKQEAgLTEzNzQsNyArMTM5Nyw3IEBACiAgIGVjaG8gIiR7Y21ha2VfY3h4X2NvbXBpbGVyfSBkb2VzIG5vdCBoYXZlIDxleHQvc3RkaW9fZmlsZWJ1Zi5oPiIKIGZpCiAKLWlmIFsgLW4gIiR7Y21ha2VfY2NhY2hlX2VuYWJsZWR9IiBdOyB0aGVuCitpZiB0ZXN0IC1uICIke2NtYWtlX2NjYWNoZV9lbmFibGVkfSI7IHRoZW4KICAgZWNobyAiQnVpbGRpbmcgQ01ha2Ugd2l0aCBjY2FjaGUiCiAgIGNtYWtlX2NfY29tcGlsZXI9ImNjYWNoZSAke2NtYWtlX2NfY29tcGlsZXJ9IgogICBjbWFrZV9jeHhfY29tcGlsZXI9ImNjYWNoZSAke2NtYWtlX2N4eF9jb21waWxlcn0iCkBAIC0xNDc2LDkgKzE0OTksMTEgQEAKIGZvciBhIGluICR7Q01BS0VfQ1hYX1NPVVJDRVN9ICR7Q01BS0VfQ19TT1VSQ0VTfSAke0NNQUtFX1NURF9DWFhfU09VUkNFU30gJHtMZXhlclBhcnNlcl9DWFhfU09VUkNFU30gJHtMZXhlclBhcnNlcl9DX1NPVVJDRVN9ICR7S1dTWVNfQ1hYX1NPVVJDRVN9ICR7S1dTWVNfQ19TT1VSQ0VTfTsgZG8KICAgb2Jqcz0iJHtvYmpzfSAke2F9Lm8iCiBkb25lCi1mb3IgYSBpbiAke0xJQlVWX0NfU09VUkNFU307IGRvCi0gIG9ianM9IiR7b2Jqc30gdXYtYGNtYWtlX29iaiAke2F9YCIKLWRvbmUKK2lmIHRlc3QgIngke2Jvb3RzdHJhcF9zeXN0ZW1fbGlidXZ9IiA9ICJ4IjsgdGhlbgorICBmb3IgYSBpbiAke0xJQlVWX0NfU09VUkNFU307IGRvCisgICAgb2Jqcz0iJHtvYmpzfSB1di1gY21ha2Vfb2JqICR7YX1gIgorICBkb25lCitmaQogCiBsaWJzPSIiCiAKQEAgLTE1MTYsMjMgKzE1NDEsMjkgQEAKICAgICAgIDs7CiAgIGVzYWMKIGZpCi11dl9jX2ZsYWdzPSIke3V2X2NfZmxhZ3N9IGBjbWFrZV9lc2NhcGUgIi1JJHtjbWFrZV9zb3VyY2VfZGlyfS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlImAiCi1pZiAke2NtYWtlX3N5c3RlbV9taW5nd307IHRoZW4KLSAgdXZfY19mbGFncz0iJHt1dl9jX2ZsYWdzfSBgY21ha2VfZXNjYXBlICItSSR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbiJgIgoraWYgdGVzdCAieCR7Ym9vdHN0cmFwX3N5c3RlbV9saWJ1dn0iID0gIngiOyB0aGVuCisgIHV2X2NfZmxhZ3M9IiR7dXZfY19mbGFnc30gYGNtYWtlX2VzY2FwZSAiLUkke2NtYWtlX3NvdXJjZV9kaXJ9L1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUiYCIKKyAgaWYgJHtjbWFrZV9zeXN0ZW1fbWluZ3d9OyB0aGVuCisgICAgdXZfY19mbGFncz0iJHt1dl9jX2ZsYWdzfSBgY21ha2VfZXNjYXBlICItSSR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbiJgIgorICBlbHNlCisgICAgdXZfY19mbGFncz0iJHt1dl9jX2ZsYWdzfSBgY21ha2VfZXNjYXBlICItSSR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgiYCIKKyAgZmkKKyAgdXZfY19mbGFncz0iJHt1dl9jX2ZsYWdzfSBgY21ha2VfZXNjYXBlICItSSR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvc3JjImAiCiBlbHNlCi0gIHV2X2NfZmxhZ3M9IiR7dXZfY19mbGFnc30gYGNtYWtlX2VzY2FwZSAiLUkke2NtYWtlX3NvdXJjZV9kaXJ9L1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4ImAiCisgIGlmIHRlc3QgYHdoaWNoIHBrZy1jb25maWdgOyB0aGVuCisgICAgdXZfY19mbGFncz0iJHt1dl9jX2ZsYWdzfSBgcGtnLWNvbmZpZyAtLWNmbGFncyBsaWJ1dmAiCisgIGZpCisgIGxpYnM9IiR7bGlic30gLWx1diIKIGZpCi11dl9jX2ZsYWdzPSIke3V2X2NfZmxhZ3N9IGBjbWFrZV9lc2NhcGUgIi1JJHtjbWFrZV9zb3VyY2VfZGlyfS9VdGlsaXRpZXMvY21saWJ1di9zcmMiYCIKLQotaWYgWyAieCR7Y21ha2VfYW5zaV9jeHhfZmxhZ3N9IiAhPSAieCIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2VfYW5zaV9jeHhfZmxhZ3N9IiAhPSAieCI7IHRoZW4KICAgY21ha2VfY3h4X2ZsYWdzPSIke2NtYWtlX2Fuc2lfY3h4X2ZsYWdzfSAke2NtYWtlX2N4eF9mbGFnc30iCiBmaQogCi1pZiBbICJ4JHtjbWFrZV9jX2ZsYWdzfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX2NfZmxhZ3N9IiAhPSAieCI7IHRoZW4KICAgY21ha2VfY19mbGFncz0iJHtjbWFrZV9jX2ZsYWdzfSAiCiBmaQogCi1pZiBbICJ4JHtjbWFrZV9jeHhfZmxhZ3N9IiAhPSAieCIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2VfY3h4X2ZsYWdzfSIgIT0gIngiOyB0aGVuCiAgIGNtYWtlX2N4eF9mbGFncz0iJHtjbWFrZV9jeHhfZmxhZ3N9ICIKIGZpCiAKQEAgLTE2MDUsMTEgKzE2MzYsMTMgQEAKICAgZWNobyAiJHthfS5vIDogJHtzcmN9ICR7ZGVwfSIgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vTWFrZWZpbGUiCiAgIGVjaG8gIgkke2NtYWtlX2N4eF9jb21waWxlcn0gJHtjbWFrZV9jeHhfZmxhZ3N9IC1ES1dTWVNfTkFNRVNQQUNFPWNtc3lzICR7c3JjX2ZsYWdzfSAtYyAke3NyY30gLW8gJHthfS5vIiA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9NYWtlZmlsZSIKIGRvbmUKLWZvciBhIGluICR7TElCVVZfQ19TT1VSQ0VTfTsgZG8KLSAgc3JjPWBjbWFrZV9lc2NhcGUgIiR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvJHthfSJgCi0gIGVjaG8gInV2LWBjbWFrZV9vYmogJHthfWAgOiAke3NyY30gJHtkZXB9IiA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9NYWtlZmlsZSIKLSAgZWNobyAiCSR7Y21ha2VfY19jb21waWxlcn0gJHtjbWFrZV9jX2ZsYWdzfSAke3V2X2NfZmxhZ3N9IC1jICR7c3JjfSAtbyB1di1gY21ha2Vfb2JqICR7YX1gIiA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9NYWtlZmlsZSIKLWRvbmUKK2lmIHRlc3QgIngke2Jvb3RzdHJhcF9zeXN0ZW1fbGlidXZ9IiA9ICJ4IjsgdGhlbgorICBmb3IgYSBpbiAke0xJQlVWX0NfU09VUkNFU307IGRvCisgICAgc3JjPWBjbWFrZV9lc2NhcGUgIiR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvJHthfSJgCisgICAgZWNobyAidXYtYGNtYWtlX29iaiAke2F9YCA6ICR7c3JjfSAke2RlcH0iID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L01ha2VmaWxlIgorICAgIGVjaG8gIgkke2NtYWtlX2NfY29tcGlsZXJ9ICR7Y21ha2VfY19mbGFnc30gJHt1dl9jX2ZsYWdzfSAtYyAke3NyY30gLW8gdXYtYGNtYWtlX29iaiAke2F9YCIgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vTWFrZWZpbGUiCisgIGRvbmUKK2ZpCiBlY2hvICcKIHJlYnVpbGRfY2FjaGU6CiAJY2QgIiR7Y21ha2VfYmluYXJ5X2Rpcn0iICYmICIke2NtYWtlX3NvdXJjZV9kaXJ9L2Jvb3RzdHJhcCIKQEAgLTE2MjksNDIgKzE2NjIsNDIgQEAKICcgPiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIAogIyBBZGQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBnaXZlbiBhcyBjb21tYW5kLWxpbmUgb3B0aW9ucy4KLWlmIFsgIngke2NtYWtlX2Jvb3RzdHJhcF9xdF9ndWl9IiAhPSAieCIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2VfYm9vdHN0cmFwX3F0X2d1aX0iICE9ICJ4IjsgdGhlbgogICBlY2hvICcKIHNldCAoQlVJTERfUXREaWFsb2cgJyIke2NtYWtlX2Jvb3RzdHJhcF9xdF9ndWl9IicgQ0FDSEUgQk9PTCAiQnVpbGQgUXQgZGlhbG9nIGZvciBDTWFrZSIgRk9SQ0UpCiAnID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIgogZmkKLWlmIFsgIngke2NtYWtlX2Jvb3RzdHJhcF9xdF9xbWFrZX0iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9ib290c3RyYXBfcXRfcW1ha2V9IiAhPSAieCI7IHRoZW4KICAgZWNobyAnCiBzZXQgKFFUX1FNQUtFX0VYRUNVVEFCTEUgIiciJHtjbWFrZV9ib290c3RyYXBfcXRfcW1ha2V9IiciIENBQ0hFIEZJTEVQQVRIICJMb2NhdGlvbiBvZiBRdCBxbWFrZSIgRk9SQ0UpCiAnID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIgogZmkKLWlmIFsgIngke2NtYWtlX3NwaGlueF9pbmZvfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX3NwaGlueF9pbmZvfSIgIT0gIngiOyB0aGVuCiAgIGVjaG8gJwogc2V0IChTUEhJTlhfSU5GTyAiJyIke2NtYWtlX3NwaGlueF9pbmZvfSInIiBDQUNIRSBCT09MICJCdWlsZCBJbmZvIG1hbnVhbCB3aXRoIFNwaGlueCIgRk9SQ0UpCiAnID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIgogZmkKLWlmIFsgIngke2NtYWtlX3NwaGlueF9tYW59IiAhPSAieCIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2Vfc3BoaW54X21hbn0iICE9ICJ4IjsgdGhlbgogICBlY2hvICcKIHNldCAoU1BISU5YX01BTiAiJyIke2NtYWtlX3NwaGlueF9tYW59IiciIENBQ0hFIEJPT0wgIkJ1aWxkIG1hbiBwYWdlcyB3aXRoIFNwaGlueCIgRk9SQ0UpCiAnID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIgogZmkKLWlmIFsgIngke2NtYWtlX3NwaGlueF9odG1sfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX3NwaGlueF9odG1sfSIgIT0gIngiOyB0aGVuCiAgIGVjaG8gJwogc2V0IChTUEhJTlhfSFRNTCAiJyIke2NtYWtlX3NwaGlueF9odG1sfSInIiBDQUNIRSBCT09MICJCdWlsZCBodG1sIGhlbHAgd2l0aCBTcGhpbngiIEZPUkNFKQogJyA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIGZpCi1pZiBbICJ4JHtjbWFrZV9zcGhpbnhfcXRoZWxwfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX3NwaGlueF9xdGhlbHB9IiAhPSAieCI7IHRoZW4KICAgZWNobyAnCiBzZXQgKFNQSElOWF9RVEhFTFAgIiciJHtjbWFrZV9zcGhpbnhfcXRoZWxwfSInIiBDQUNIRSBCT09MICJCdWlsZCBxY2ggaGVscCB3aXRoIFNwaGlueCIgRk9SQ0UpCiAnID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIgogZmkKLWlmIFsgIngke2NtYWtlX3NwaGlueF9idWlsZH0iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9zcGhpbnhfYnVpbGR9IiAhPSAieCI7IHRoZW4KICAgZWNobyAnCiBzZXQgKFNQSElOWF9FWEVDVVRBQkxFICInIiR7Y21ha2Vfc3BoaW54X2J1aWxkfSInIiBDQUNIRSBGSUxFUEFUSCAiTG9jYXRpb24gb2YgUXQgc3BoaW54LWJ1aWxkIiBGT1JDRSkKICcgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vSW5pdGlhbENhY2hlRmxhZ3MuY21ha2UiCiBmaQotaWYgWyAieCR7Y21ha2Vfc3BoaW54X2ZsYWdzfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX3NwaGlueF9mbGFnc30iICE9ICJ4IjsgdGhlbgogICBlY2hvICcKIHNldCAoU1BISU5YX0ZMQUdTIFs9PVsnIiR7Y21ha2Vfc3BoaW54X2ZsYWdzfSInXT09XSBDQUNIRSBTVFJJTkcgIkZsYWdzIHRvIHBhc3MgdG8gc3BoaW54LWJ1aWxkIiBGT1JDRSkKICcgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vSW5pdGlhbENhY2hlRmxhZ3MuY21ha2UiCkBAIC0xNjc0LDcgKzE3MDcsNyBAQAogIyBzcGVjaWZpY2F0aW9uIG9mIGNtYWtlX2luaXRfZmlsZS4KICgKIGNkICIke2NtYWtlX2JpbmFyeV9kaXJ9IgotaWYgWyAtZiAiJHtjbWFrZV9pbml0X2ZpbGV9IiBdOyB0aGVuCitpZiB0ZXN0IC1mICIke2NtYWtlX2luaXRfZmlsZX0iOyB0aGVuCiAgIGNhdCAiJHtjbWFrZV9pbml0X2ZpbGV9IiA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIGZpCiApCkBAIC0xNjgyLDEzICsxNzE1LDEzIEBACiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAKICMgUnVuIG1ha2UgdG8gYnVpbGQgYm9vdHN0cmFwIGNtYWtlCi1pZiBbICJ4JHtjbWFrZV9wYXJhbGxlbF9tYWtlfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX3BhcmFsbGVsX21ha2V9IiAhPSAieCI7IHRoZW4KICAgJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0gJHtjbWFrZV9tYWtlX2ZsYWdzfQogZWxzZQogICAke2NtYWtlX21ha2VfcHJvY2Vzc29yfQogZmkKIFJFUz0kPwotaWYgWyAiJHtSRVN9IiAtbmUgIjAiIF07IHRoZW4KK2lmIHRlc3QgIiR7UkVTfSIgLW5lICIwIjsgdGhlbgogICBjbWFrZV9lcnJvciA5ICJQcm9ibGVtIHdoaWxlIHJ1bm5pbmcgJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0iCiBmaQogY2QgIiR7Y21ha2VfYmluYXJ5X2Rpcn0iCkBAIC0xNzA3LDEyICsxNzQwLDEyIEBACiAKICMgUnVuIGJvb3RzdHJhcCBDTWFrZSB0byBjb25maWd1cmUgcmVhbCBDTWFrZQogY21ha2Vfb3B0aW9ucz0iLURDTUFLRV9CT09UU1RSQVA9MSIKLWlmIFsgLW4gIiR7Y21ha2VfdmVyYm9zZX0iIF07IHRoZW4KK2lmIHRlc3QgLW4gIiR7Y21ha2VfdmVyYm9zZX0iOyB0aGVuCiAgIGNtYWtlX29wdGlvbnM9IiR7Y21ha2Vfb3B0aW9uc30gLURDTUFLRV9WRVJCT1NFX01BS0VGSUxFPTEiCiBmaQogIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vY21ha2UiICIke2NtYWtlX3NvdXJjZV9kaXJ9IiAiLUMke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIiAiLUcke2NtYWtlX2Jvb3RzdHJhcF9nZW5lcmF0b3J9IiAke2NtYWtlX29wdGlvbnN9ICR7Y21ha2VfYm9vdHN0cmFwX3N5c3RlbV9saWJzfSAiJEAiCiBSRVM9JD8KLWlmIFsgIiR7UkVTfSIgLW5lICIwIiBdOyB0aGVuCitpZiB0ZXN0ICIke1JFU30iIC1uZSAiMCI7IHRoZW4KICAgY21ha2VfZXJyb3IgMTEgIlByb2JsZW0gd2hpbGUgcnVubmluZyBpbml0aWFsIENNYWtlIgogZmkKIAo=